[med-svn] [sra-sdk] 01/02: Imported Upstream version 2.3.2-4
Andreas Tille
tille at debian.org
Tue Aug 13 09:11:36 UTC 2013
This is an automated email from the git hooks/post-receive script.
tille pushed a commit to branch master
in repository sra-sdk.
commit 5dafdbf8b2adf26e89e817d285dc29681467c2c2
Author: Andreas Tille <tille at debian.org>
Date: Tue Aug 13 11:06:45 2013 +0200
Imported Upstream version 2.3.2-4
---
CHANGES | 30 -
Makefile | 45 +-
README | 22 +-
README-WINDOWS.txt | 15 +
README-build | 237 -
README-build.txt | 259 +
README-config.txt | 58 +
USAGE | 162 -
build/BUILD.linux | 2 +-
build/BUILD.mac | 2 +-
build/BUILD.win | 2 +-
build/COMP.mac | 2 +-
build/LNKG.linux | 1 +
build/LNKG.mac | 1 +
build/LNKG.win | 1 +
build/Makefile.clang | 80 +
build/Makefile.env | 140 +-
build/Makefile.gcc | 18 +-
build/Makefile.linux | 7 +
build/Makefile.mac | 7 +
build/Makefile.rules | 5 -
build/Makefile.shell | 102 +-
build/Makefile.vc++ | 22 +-
build/Makefile.win | 7 +
build/ld.linux.cmn.sh | 6 +-
build/ld.linux.dlib.sh | 4 +
build/ld.linux.exe.sh | 7 +-
build/ld.linux.ln.sh | 13 +-
build/ld.linux.slib.sh | 4 +-
build/ld.mac.cmn.sh | 12 +-
build/ld.mac.dlib.sh | 116 +-
build/ld.mac.exe.sh | 118 +-
build/ld.mac.ln.sh | 2 +
build/ld.mac.slib.sh | 6 +-
build/ld.sh | 272 +-
build/ld.win.cmn.sh | 7 +-
build/ld.win.dlib.sh | 60 +-
build/ld.win.exe.sh | 6 +-
build/ld.win.slib.sh | 51 +-
build/mac.arch.sh | 9 +-
build/sra-dflt-schema.sh | 50 +-
build/win-cc.sh | 110 +-
configuration-assistant.perl | 1266 +-
doc/help/html/bam-load-help.html | 29 +
doc/help/html/bam-loader-help.html | 31 -
doc/help/html/crc32sum-help.html | 2 +-
interfaces/align/align-access.h | 11 +-
interfaces/align/align.vschema | 675 +-
interfaces/align/alignarc.h | 63 -
interfaces/align/bam.h | 91 +-
interfaces/align/dna-reverse-cmpl.h | 43 +
interfaces/align/iterator.h | 610 +
interfaces/align/manager.h | 69 +
interfaces/align/qstat.vschema | 87 +
interfaces/align/quality-quantizer.h | 49 +
interfaces/align/reader-refseq.h | 6 +-
interfaces/align/reference.h | 150 +
interfaces/align/refseq-mgr.h | 16 +-
interfaces/align/refseq.vschema | 100 +
interfaces/align/seq.vschema | 300 +
interfaces/align/writer-alignment.h | 49 +-
interfaces/align/writer-reference.h | 45 +-
interfaces/align/writer-refseq.h | 6 +-
interfaces/align/writer-sequence.h | 16 +-
interfaces/cc/gcc/i386/atomic.h | 1 +
interfaces/cc/gcc/i386/fmtdef.h | 42 -
interfaces/cc/gcc/noarch/bitstr.h | 29 +-
interfaces/cc/gcc/v128.h | 1088 +
interfaces/cc/gcc/x86_64/fmtdef.h | 58 -
interfaces/cc/vc++/compiler.h | 2 +-
interfaces/cc/vc++/i386/arch-impl.h | 194 -
interfaces/cc/vc++/i386/fmtdef.h | 42 -
interfaces/cc/vc++/noarch/arch-impl.h | 194 +
interfaces/cc/vc++/noarch/bitstr.h | 8 +-
interfaces/cc/vc++/stdint.h | 43 +-
interfaces/cc/vc++/x86_64/arch-impl.h | 133 -
interfaces/cc/vc++/x86_64/fmtdef.h | 41 -
interfaces/ext/libxml/DOCBparser.h | 96 +
interfaces/ext/libxml/HTMLparser.h | 303 +
interfaces/ext/libxml/HTMLtree.h | 147 +
interfaces/ext/libxml/SAX.h | 173 +
interfaces/ext/libxml/SAX2.h | 176 +
interfaces/ext/libxml/c14n.h | 115 +
interfaces/ext/libxml/catalog.h | 182 +
interfaces/ext/libxml/chvalid.h | 230 +
interfaces/ext/libxml/debugXML.h | 217 +
interfaces/ext/libxml/dict.h | 69 +
interfaces/ext/libxml/encoding.h | 226 +
interfaces/ext/libxml/entities.h | 150 +
interfaces/ext/libxml/globals.h | 491 +
interfaces/ext/libxml/hash.h | 233 +
interfaces/ext/libxml/list.h | 137 +
interfaces/ext/libxml/nanoftp.h | 143 +
interfaces/ext/libxml/nanohttp.h | 81 +
interfaces/ext/libxml/parser.h | 1226 +
interfaces/ext/libxml/parserInternals.h | 611 +
interfaces/ext/libxml/pattern.h | 100 +
interfaces/ext/libxml/relaxng.h | 213 +
interfaces/ext/libxml/schemasInternals.h | 958 +
interfaces/ext/libxml/schematron.h | 142 +
interfaces/ext/libxml/threads.h | 84 +
interfaces/ext/libxml/tree.h | 1252 +
interfaces/ext/libxml/uri.h | 94 +
interfaces/ext/libxml/valid.h | 458 +
interfaces/ext/libxml/xinclude.h | 125 +
interfaces/ext/libxml/xlink.h | 189 +
interfaces/ext/libxml/xmlIO.h | 360 +
interfaces/ext/libxml/xmlautomata.h | 146 +
interfaces/ext/libxml/xmlerror.h | 944 +
interfaces/ext/libxml/xmlexports.h | 157 +
interfaces/ext/libxml/xmlmemory.h | 224 +
interfaces/ext/libxml/xmlmodule.h | 57 +
interfaces/ext/libxml/xmlreader.h | 424 +
interfaces/ext/libxml/xmlregexp.h | 222 +
interfaces/ext/libxml/xmlsave.h | 87 +
interfaces/ext/libxml/xmlschemas.h | 218 +
interfaces/ext/libxml/xmlschemastypes.h | 151 +
interfaces/ext/libxml/xmlstring.h | 140 +
interfaces/ext/libxml/xmlunicode.h | 202 +
interfaces/ext/libxml/xmlversion.h | 458 +
interfaces/ext/libxml/xmlwriter.h | 485 +
interfaces/ext/libxml/xpath.h | 546 +
interfaces/ext/libxml/xpathInternals.h | 630 +
interfaces/ext/libxml/xpointer.h | 114 +
interfaces/insdc/insdc.h | 35 +
interfaces/insdc/sra.h | 27 +-
interfaces/insdc/sra.vschema | 1 +
interfaces/kapp/args.h | 54 +-
interfaces/kapp/loader-file.h | 17 +-
interfaces/kapp/loader-meta.h | 2 +-
interfaces/kapp/log-xml.h | 10 +-
interfaces/kapp/queue-file.h | 149 +
interfaces/kdb/btree.h | 95 +-
interfaces/kdb/consistency-check.h | 21 +-
interfaces/kdb/database.h | 18 +-
interfaces/kdb/kdb-priv.h | 12 +
interfaces/kdb/manager.h | 40 +-
interfaces/kdb/namelist.h | 3 +-
interfaces/kdb/table.h | 14 +
interfaces/kfg/config.h | 168 +-
interfaces/kfg/kfg-priv.h | 4 +
interfaces/kfg/repository.h | 271 +
interfaces/kfs/arc.h | 14 +
interfaces/kfs/buffile.h | 10 +
interfaces/kfs/cacheteefile.h | 147 +
interfaces/kfs/directory.h | 63 +-
interfaces/kfs/file.h | 29 +
interfaces/kfs/impl.h | 11 +-
interfaces/kfs/kfs-priv.h | 31 +-
interfaces/kfs/lockfile.h | 116 +
interfaces/kfs/path-priv.h | 101 -
interfaces/kfs/path.h | 237 -
interfaces/kfs/quickmount.h | 61 +
interfaces/kfs/ramfile.h | 75 +
interfaces/kfs/readheadfile.h | 86 +
interfaces/kfs/sra.h | 19 +-
interfaces/kfs/tar.h | 5 +
interfaces/klib/checksum.h | 2 +-
interfaces/klib/debug.h | 33 +-
interfaces/klib/defs.h | 7 +-
interfaces/klib/extern.h | 6 +-
interfaces/klib/klib-priv.h | 106 +
interfaces/klib/ksort-macro.h | 257 +
interfaces/klib/log.h | 4 +-
interfaces/klib/namelist.h | 10 +
interfaces/klib/out.h | 6 +-
interfaces/klib/printf.h | 260 +-
interfaces/klib/rc.h | 129 +-
interfaces/klib/refcount.h | 8 +-
interfaces/klib/report.h | 98 +
interfaces/klib/sort.h | 60 +
interfaces/klib/status.h | 2 +-
interfaces/klib/vector.h | 155 +
interfaces/klib/xml.h | 355 -
interfaces/klib/xml.hpp | 198 -
interfaces/kns/KCurlRequest.h | 65 +
interfaces/kns/curl-file.h | 49 +
interfaces/kns/entrez-fetcher.h | 88 +
interfaces/kns/extern.h | 41 +
interfaces/kns/impl.h | 104 +
interfaces/kns/manager.h | 85 +
interfaces/kns/stream.h | 126 +
interfaces/kns/url-fetcher.h | 66 +
interfaces/kproc/impl.h | 104 +
interfaces/kproc/procmgr.h | 115 +
interfaces/kproc/q-extern.h | 4 +-
interfaces/kproc/queue.h | 2 +-
interfaces/kproc/sem.h | 8 +
interfaces/kproc/task.h | 83 +
interfaces/kproc/timeout.h | 64 +
interfaces/krypto/cipher-impl.h | 1 +
interfaces/krypto/cipher-priv.h | 1 +
interfaces/krypto/cipher-test.h | 49 +
interfaces/krypto/cipher.h | 208 +
interfaces/krypto/ciphermgr-priv.h | 38 +
interfaces/krypto/ciphermgr.h | 98 +
interfaces/krypto/encfile-priv.h | 250 +
interfaces/krypto/encfile.h | 134 +
interfaces/krypto/extern.h | 66 +
interfaces/krypto/key.h | 103 +
interfaces/krypto/manager-priv.h | 26 +
interfaces/krypto/manager.h | 33 +
interfaces/krypto/reencfile.h | 91 +
interfaces/krypto/rng-impl.h | 86 +
interfaces/krypto/rng.h | 68 +
interfaces/krypto/testciphermgr.h | 58 +
interfaces/krypto/wgaencrypt.h | 128 +
interfaces/ktst/test_tools.hpp | 93 +-
interfaces/ktst/unit_test.hpp | 283 +-
interfaces/ktst/unit_test_suite.hpp | 524 +-
interfaces/kxml/xml.h | 382 +
interfaces/loader/alignment-writer.h | 97 +
interfaces/loader/common-reader-priv.h | 300 +
interfaces/loader/common-reader.h | 486 +
interfaces/loader/common-writer.h | 190 +
interfaces/loader/mmarray.h | 50 +
interfaces/loader/reference-writer.h | 78 +
interfaces/loader/sequence-writer.h | 91 +
interfaces/ncbi/seq.vschema | 27 +-
interfaces/ncbi/wgs-contig.h | 176 +
interfaces/ncbi/wgs-contig.vschema | 660 +
interfaces/os/mac/os-native.h | 6 +-
interfaces/os/unix/unix-native.h | 13 -
interfaces/os/win/atomic64.h | 34 +-
interfaces/os/win/os-native.h | 59 +-
interfaces/sra/impl.h | 20 +
interfaces/sra/pevents.vschema | 2 +-
interfaces/sra/sradb-priv.h | 123 +-
interfaces/sra/srapath.h | 9 +-
interfaces/vdb/blob.h | 147 +
interfaces/vdb/built-in.vschema | 26 +-
interfaces/vdb/cursor.h | 37 +
interfaces/vdb/database.h | 18 +-
interfaces/vdb/dependencies.h | 211 +
interfaces/vdb/manager.h | 23 +
interfaces/vdb/manager.hpp | 8 +-
interfaces/vdb/report.h | 92 +
interfaces/vdb/vdb-priv.h | 70 +-
interfaces/vdb/vdb.vschema | 59 +-
interfaces/vfs/extern.h | 42 +
interfaces/vfs/manager-priv.h | 115 +
interfaces/vfs/manager.h | 306 +
interfaces/vfs/path-priv.h | 149 +
interfaces/vfs/path.h | 289 +
interfaces/vfs/resolver.h | 206 +
libs/Makefile | 19 +-
libs/align/Makefile | 39 +-
libs/align/al_iterator.c | 562 +
libs/align/align-access.c | 22 +-
libs/align/align_mgr.c | 108 +
libs/align/bam.c | 2883 +-
libs/align/debug.h | 36 +-
libs/align/dna-reverse-cmpl.c | 80 +
libs/align/libalign-access.vers | 2 +-
libs/align/libalign-reader.vers | 2 +-
libs/align/pl_iterator.c | 671 +
libs/align/quality-quantizer.c | 105 +
libs/align/reader-cmn.c | 290 +-
libs/align/reader-cmn.h | 31 +-
libs/align/reader-refseq.c | 103 +-
libs/align/ref_iterator.c | 866 +
libs/align/reference-cmn.c | 43 +
libs/align/reference-cmn.h | 38 +
libs/align/reference.c | 1933 +
libs/align/refseq-mgr.c | 626 +-
libs/align/writer-alignment.c | 128 +-
libs/align/writer-cmn.c | 112 +-
libs/align/writer-priv.h | 10 +-
libs/align/writer-ref.c | 175 +-
libs/align/writer-ref.h | 22 +-
libs/align/writer-reference.c | 2987 +-
libs/align/writer-refseq.c | 19 +-
libs/align/writer-sequence.c | 221 +-
libs/axf/Makefile | 25 +-
libs/axf/align-local_ref_id.c | 70 +-
libs/axf/align-local_ref_start.c | 61 +-
libs/axf/align-ref-name.c | 52 +-
libs/axf/align-ref-pos.c | 147 +-
libs/axf/align-ref-seq-id.c | 60 +-
libs/axf/align-restore-read.c | 28 +-
libs/axf/cigar.c | 1089 +-
libs/axf/get-sam-flags.c | 80 +-
libs/axf/get_mate_align_ids.c | 271 +
libs/axf/libaxf.vers | 2 +-
libs/axf/libaxf.vers.h | 1 -
libs/axf/libwaxf.vers | 2 +-
libs/axf/libwaxf.vers.h | 1 -
libs/axf/make-cmp-read_desc.c | 156 +
libs/axf/not-my-row.c | 2 +-
libs/axf/project_read_from_sequence.c | 119 +-
libs/axf/ref-preserve_qual.c | 2 +
libs/axf/ref-restore-read.c | 6 +-
libs/axf/ref-tbl-sub-select.c | 471 +-
libs/axf/ref-tbl.c | 85 +
libs/axf/ref-tbl.h | 32 +
libs/axf/refseq-stats.c | 2 +-
libs/axf/seq-construct-read.c | 125 +
libs/axf/seq-restore-read.c | 92 +-
libs/axf/template-len.c | 112 +-
libs/ext/Makefile | 3 +-
libs/ext/bzip2/Makefile | 93 +-
libs/ext/bzip2/blocksort.c | 1094 +
libs/ext/bzip2/bzip2-1.0.6.tar.gz | Bin 0 -> 782025 bytes
libs/ext/bzip2/bzip2.c | 2034 +
libs/ext/bzip2/bzip2recover.c | 514 +
libs/ext/bzip2/bzlib.c | 1572 +
libs/ext/bzip2/bzlib.h | 282 +
libs/ext/bzip2/bzlib_private.h | 509 +
libs/ext/bzip2/compress.c | 672 +
libs/ext/bzip2/crctable.c | 104 +
libs/ext/bzip2/decompress.c | 646 +
libs/ext/bzip2/dlltest.c | 175 +
libs/ext/bzip2/huffman.c | 205 +
libs/ext/bzip2/libbz2.def | 27 +
libs/{axf/libaxf.vers => ext/bzip2/libbz2.vers} | 0
libs/ext/bzip2/mk251.c | 31 +
libs/ext/bzip2/randtable.c | 84 +
libs/ext/bzip2/spewG.c | 54 +
libs/ext/bzip2/unzcrash.c | 141 +
libs/ext/curl/Makefile | 103 +
libs/ext/zlib/Makefile | 97 +-
libs/ext/zlib/adler32.c | 179 +
libs/ext/zlib/compress.c | 80 +
libs/ext/zlib/crc32.c | 425 +
libs/ext/zlib/crc32.h | 441 +
libs/ext/zlib/deflate.c | 1965 +
libs/ext/zlib/deflate.h | 346 +
libs/ext/zlib/gzclose.c | 25 +
libs/ext/zlib/gzguts.h | 193 +
libs/ext/zlib/gzlib.c | 620 +
libs/ext/zlib/gzread.c | 589 +
libs/ext/zlib/gzwrite.c | 565 +
libs/ext/zlib/infback.c | 640 +
libs/ext/zlib/inffast.c | 340 +
libs/ext/zlib/inffast.h | 11 +
libs/ext/zlib/inffixed.h | 94 +
libs/ext/zlib/inflate.c | 1496 +
libs/ext/zlib/inflate.h | 122 +
libs/ext/zlib/inftrees.c | 306 +
libs/ext/zlib/inftrees.h | 62 +
libs/ext/zlib/libz.def | 84 +
libs/ext/zlib/libz.vers | 1 +
libs/ext/zlib/trees.c | 1224 +
libs/ext/zlib/trees.h | 128 +
libs/ext/zlib/uncompr.c | 59 +
libs/ext/zlib/zconf.h | 506 +
libs/ext/zlib/zlib-1.2.7.tar.gz | Bin 0 -> 560351 bytes
libs/ext/zlib/zlib.h | 1744 +
libs/ext/zlib/zutil.c | 324 +
libs/ext/zlib/zutil.h | 252 +
libs/kapp/Makefile | 10 +
libs/kapp/args.c | 749 +-
libs/kapp/args_debug.h | 47 +
libs/kapp/libload.vers | 2 +-
libs/kapp/loader-file.c | 117 +-
libs/kapp/log-xml.c | 26 +-
libs/kapp/main.c | 36 +-
libs/kapp/queue-file.c | 925 +
libs/kapp/tokenizer.c | 525 +
libs/kapp/unix/sysmain.c | 13 +
libs/kapp/win/sysmain.c | 18 +
libs/kdb/Makefile | 20 +-
libs/kdb/btree.c | 69 +-
libs/kdb/coldata.c | 2 +-
libs/kdb/colidx0.c | 4 +-
libs/kdb/colidx1.c | 8 +-
libs/kdb/colidx2-priv.h | 29 +-
libs/kdb/colidx2.c | 114 +-
libs/kdb/column-cc.c | 67 +-
libs/kdb/column.c | 26 +-
libs/kdb/database-cc.c | 232 +-
libs/kdb/database-cmn.c | 2 +-
libs/kdb/database.c | 198 +-
libs/kdb/dbcc-cmn.c | 2 +-
libs/kdb/dbmgr-cmn.c | 62 +-
libs/kdb/dbmgr-priv.h | 5 +-
libs/kdb/dbmgr.c | 255 +-
libs/kdb/idxblk.c | 9 +-
libs/kdb/index-cmn.h | 7 +-
libs/kdb/index.c | 16 +-
libs/kdb/kdb-priv.h | 45 +-
libs/kdb/kdb.c | 652 +-
libs/kdb/libkdb.vers | 2 +-
libs/kdb/libkdb.vers.h | 1 -
libs/kdb/libwkdb.vers | 2 +-
libs/kdb/libwkdb.vers.h | 1 -
libs/kdb/meta.c | 69 +-
libs/kdb/ptrieval-v2.c | 115 +-
libs/kdb/table-cc.c | 229 +-
libs/kdb/table.c | 133 +-
libs/kdb/trieidx-v2.c | 21 +-
libs/kdb/trieval-v2.c | 4 +-
libs/kdb/wcolidx0.c | 4 +-
libs/kdb/wcolidx1.c | 10 +-
libs/kdb/wcolidx2.c | 6 +-
libs/kdb/wcolumn.c | 74 +-
libs/kdb/wdatabase.c | 233 +-
libs/kdb/wdbmgr.c | 15 +-
libs/kdb/windex.c | 16 +-
libs/kdb/wkdb-priv.h | 62 +-
libs/kdb/wkdb.c | 653 +-
libs/kdb/wmeta.c | 90 +-
libs/kdb/wtable.c | 186 +-
libs/kdb/wtrieidx-v1.c | 2 +-
libs/kdb/wtrieidx-v2.c | 14 +-
libs/kfg/Makefile | 43 +-
libs/kfg/config-grammar.c | 1725 +
libs/kfg/config-lex.c | 2511 +
libs/kfg/config-tokens.h | 75 +
libs/kfg/config.c | 2309 +-
libs/kfg/config.linux.kfg | 29 -
libs/kfg/config.mac.kfg | 29 -
libs/kfg/config.win.kfg | 29 -
libs/kfg/default.kfg | 45 +
libs/kfg/kfg-parse.h | 81 +
libs/kfg/libkfg.vers | 2 +-
libs/kfg/report-kfg.c | 505 +
libs/kfg/report.c | 433 +
libs/kfg/repository.c | 1087 +
libs/kfs/Makefile | 24 +-
libs/kfs/arc.c | 273 +-
libs/kfs/buffile-read.c | 265 +
libs/kfs/buffile-write.c | 4 +-
libs/kfs/buffile.c | 2 +-
libs/kfs/bzip.c | 34 +-
libs/kfs/cacheteefile.c | 1689 +
libs/kfs/countfile.c | 11 +
libs/kfs/crc32.c | 19 +-
libs/kfs/directory.c | 183 +-
libs/kfs/ffext.c | 12 +-
libs/kfs/ffmagic.c | 122 +-
libs/kfs/file.c | 160 +-
libs/kfs/fileformat-priv.h | 2 +-
libs/kfs/gzip.c | 5 +-
libs/kfs/libkfs.vers | 2 +-
libs/kfs/lockfile.c | 350 +
libs/kfs/md5.c | 42 +-
libs/kfs/mmap.c | 12 +-
libs/kfs/nullfile.c | 1 +
libs/kfs/pagefile.c | 121 +-
libs/kfs/path-priv.h | 114 -
libs/kfs/path.c | 1669 -
libs/kfs/quickmount.c | 967 +
libs/kfs/ramfile.c | 415 +
libs/kfs/readheadfile.c | 294 +
libs/kfs/report.c | 169 +
libs/kfs/sra.c | 79 +-
libs/kfs/subfile.c | 18 +-
libs/kfs/tar.c | 94 +-
libs/kfs/teefile.c | 1 +
libs/kfs/tocentry.c | 39 +-
libs/kfs/tocfile.c | 2 +-
libs/kfs/unix/sysdir-priv.h | 9 -
libs/kfs/unix/sysdir.c | 94 +-
libs/kfs/unix/sysdll.c | 120 +-
libs/kfs/unix/sysfile-priv.h | 2 +-
libs/kfs/unix/sysfile.c | 24 +-
libs/kfs/unix/syslockfile.c | 215 +
libs/kfs/unix/syspath.c | 126 -
libs/kfs/win/lnk_tools.c | 9 +-
libs/kfs/win/sysdir-priv.h | 4 +-
libs/kfs/win/sysdir.c | 254 +-
libs/kfs/win/sysdll.c | 115 +-
libs/kfs/win/sysfile-priv.h | 5 +-
libs/kfs/win/sysfile.c | 347 +-
libs/kfs/win/syslockfile.c | 67 +
libs/kfs/win/sysmmap.c | 2 +
libs/kfs/win/syspath.c | 287 -
libs/klib/Judy.h | 629 +
libs/klib/Makefile | 36 +-
libs/klib/SHA-32bit.c | 8 +-
libs/klib/SHA-64bit.c | 8 +-
libs/klib/data-buffer.c | 223 +-
libs/klib/judy-vector.c | 892 +
libs/klib/judy/Judy1.h | 549 +
libs/klib/judy/JudyByCount.c | 952 +
libs/klib/judy/JudyByCountWithDefs.c | 4 +
libs/klib/judy/JudyCascade.c | 1940 +
libs/klib/judy/JudyCount.c | 1193 +
libs/klib/judy/JudyCreateBranch.c | 312 +
libs/klib/judy/JudyDecascade.c | 1204 +
libs/klib/judy/JudyDel.c | 2144 +
libs/klib/judy/JudyFirst.c | 211 +
libs/klib/judy/JudyFreeArray.c | 361 +
libs/klib/judy/JudyGet.c | 1092 +
libs/klib/judy/JudyHS.c | 770 +
libs/klib/judy/JudyHS.h | 35 +
libs/klib/judy/JudyIns.c | 1871 +
libs/klib/judy/JudyInsArray.c | 1176 +
libs/klib/judy/JudyInsertBranch.c | 133 +
libs/klib/judy/JudyL.h | 503 +
libs/klib/judy/JudyMalloc.c | 86 +
libs/klib/judy/JudyMallocIF.c | 780 +
libs/klib/judy/JudyMemActive.c | 257 +
libs/klib/judy/JudyMemUsed.c | 59 +
libs/klib/judy/JudyNext.c | 2 +
libs/klib/judy/JudyNextEmpty.c | 2 +
libs/klib/judy/JudyPrev.c | 2 +
libs/klib/judy/JudyPrevEmpty.c | 2 +
libs/klib/judy/JudyPrevNext.c | 1888 +
libs/klib/judy/JudyPrevNextEmpty.c | 1388 +
libs/klib/judy/JudyPrintJP.c | 399 +
libs/klib/judy/JudyPrivate.h | 1610 +
libs/klib/judy/JudyPrivate1L.h | 483 +
libs/klib/judy/JudyPrivateBranch.h | 777 +
libs/klib/judy/JudySL.c | 1125 +
libs/klib/judy/JudyTablesGen.c | 294 +
libs/klib/judy/Makefile | 207 +
libs/klib/judy/j__udyGet.c | 2 +
libs/klib/ksort.c | 97 +
libs/klib/libklib.vers | 2 +-
libs/klib/libklib.vers.h | 1 -
libs/klib/log.c | 40 +-
libs/klib/pbstree-impl.c | 220 +-
libs/klib/printf.c | 2329 +-
libs/klib/qsort.c | 34 +-
libs/klib/refcount.c | 1 -
libs/klib/report.c | 816 +
libs/klib/status.c | 4 +-
libs/klib/symtab.c | 2 +-
libs/klib/token.c | 9 +-
libs/klib/unix/systime.c | 4 +-
libs/klib/unpack.c | 176 +-
libs/klib/vector_namelist.c | 57 +
libs/klib/vlen-encode.c | 3 +-
libs/klib/win/syserrcode.c | 2 +-
libs/klib/win/syswriter.c | 17 +-
libs/klib/writer.c | 8 +-
libs/kns/KCurlFile.c | 716 +
libs/kns/KCurlRequest.c | 438 +
libs/kns/Makefile | 125 +
libs/kns/curlhdr/curl.h | 1600 +
libs/kns/curlhdr/curlver.h | 56 +
libs/kns/curlhdr/easy.h | 81 +
libs/kns/curlhdr/multi.h | 344 +
libs/kns/curlhdr/types.h | 1 +
libs/kns/entrez-fetcher.c | 221 +
libs/kns/kns_manager.c | 263 +
libs/kns/kns_mgr_priv.h | 59 +
.../libalign-writer.vers => kns/libkns.vers} | 0
libs/kns/libkurl.vers | 1 +
libs/kns/stream-from-files.c | 168 +
libs/kns/stream-from-streams.c | 150 +
libs/kns/stream-priv.h | 32 +
libs/kns/stream.c | 336 +
libs/kns/url-fetcher-curl.c | 255 +
libs/kns/url-fetcher-impl.h | 109 +
libs/kns/url-fetcher.c | 129 +
libs/kproc/Makefile | 55 +-
libs/kproc/bsd/syslock.c | 1 +
libs/kproc/libkproc.vers | 2 +-
libs/kproc/libkq.vers | 2 +-
libs/kproc/libksproc.vers | 2 +-
libs/kproc/linux/syslock.c | 1 +
libs/kproc/procmgr.c | 412 +
libs/kproc/queue.c | 93 +-
libs/kproc/sem.c | 79 +-
libs/kproc/sttimeout.c | 1 +
libs/kproc/task.c | 156 +
libs/kproc/unix/syscond.c | 46 +-
libs/kproc/unix/systimeout.c | 1 +
libs/kproc/win/syscond-priv.h | 10 +-
libs/kproc/win/syscond.c | 238 +-
libs/kproc/win/syslock.c | 6 +-
libs/krypto/Makefile | 336 +
libs/krypto/aes-byte.c | 236 +
libs/krypto/aes-ncbi-priv.h | 227 +
libs/krypto/aes-ncbi.aes-ni.pic.o.list |38295 ++++++++++
libs/krypto/aes-ncbi.c | 2644 +
libs/krypto/aes-ncbi.vec.pic.o.list |74023 +++++++++++++++++++
libs/krypto/aes-ncbi.vecreg.pic.o.list |75192 ++++++++++++++++++++
libs/krypto/aes-priv.h | 94 +
libs/krypto/aes.c | 1 +
libs/krypto/aes_core.c | 1181 +
libs/krypto/blockcipher-impl.h | 187 +
libs/krypto/blockcipher-priv.h | 90 +
libs/krypto/blockcipher.c | 3 +
libs/krypto/cipher-byte.c | 522 +
libs/krypto/cipher-impl.h | 174 +
libs/krypto/cipher-no-vec.c | 41 +
libs/krypto/cipher-priv.h | 79 +
libs/krypto/cipher-vec.aes-ni.pic.o.list |10909 +++
libs/krypto/cipher-vec.c | 808 +
libs/krypto/cipher-vec.vec.pic.o.list |10959 +++
libs/krypto/cipher-vec.vecreg.pic.o.list |10919 +++
libs/krypto/cipher.c | 536 +
libs/krypto/ciphermgr.c | 295 +
libs/krypto/compile-test.aes-ni.pic.o.list | 592 +
libs/krypto/compile-test.c | 50 +
libs/krypto/compile-test.vec.pic.o.list | 590 +
libs/krypto/compile-test.vecreg.pic.o.list | 592 +
libs/krypto/csprng.c | 163 +
libs/krypto/encfile-priv.h | 163 +
libs/krypto/encfile.c | 2122 +
libs/krypto/encfilev2.c | 2589 +
libs/krypto/key.c | 126 +
libs/krypto/libkrypto.vers | 1 +
.../libkryptotest.vers} | 0
libs/krypto/manager.c | 11 +
libs/krypto/ncbi-priv.h | 122 +
libs/krypto/no-null-ncbi.aes-ni.pic.o.list | 2539 +
libs/krypto/no-null-ncbi.c | 59 +
libs/krypto/no-null-ncbi.vec.pic.o.list | 2540 +
libs/krypto/no-null-ncbi.vecreg.pic.o.list | 2540 +
libs/krypto/null-ncbi-priv.h | 56 +
libs/krypto/null-ncbi.c | 251 +
libs/krypto/null-ncbi.vec.pic.o.list | 4406 ++
libs/krypto/null-ncbi.vecreg.pic.o.list | 4406 ++
libs/krypto/reencfile.c | 1255 +
libs/krypto/rng-impl.h | 91 +
build/STATIC => libs/krypto/rng-priv.h | 0
libs/krypto/rng.c | 120 +
libs/krypto/testcipher.c | 76 +
libs/krypto/wgaencrypt.c | 1254 +
libs/ktst/Makefile | 90 +
libs/ktst/testcase.cpp | 95 +
libs/ktst/testenv.cpp | 503 +
libs/ktst/testrunner.cpp | 77 +
libs/ktst/unix/runprocesstestcase.cpp | 100 +
libs/ktst/win/runprocesstestcase.cpp | 141 +
libs/kxml/Makefile | 4 +-
libs/kxml/libkxfs.vers | 2 +-
libs/kxml/libkxml.vers | 2 +-
libs/kxml/xml.c | 44 +-
libs/kxml/xtoc-parsexml.c | 36 +-
libs/kxml/xtoc.c | 389 +-
libs/loader/Makefile | 99 +
libs/loader/alignment-writer.c | 226 +
libs/loader/common-reader.c | 614 +
libs/loader/common-writer.c | 1987 +
libs/loader/mmarray.c | 131 +
libs/loader/reference-writer.c | 459 +
libs/loader/sequence-writer.c | 361 +
libs/search/Makefile | 10 +-
libs/search/libksrch.vers | 2 +-
libs/search/libksrch.vers.h | 1 -
libs/sra/Makefile | 99 +-
libs/sra/libsradb.vers | 2 +-
libs/sra/libsradb.vers.h | 1 -
libs/sra/libsrareader.vers | 2 +-
libs/sra/libsrareader.vers.h | 1 -
libs/sra/libsraschema.vers.h | 1 -
libs/sra/libwsradb.vers | 2 +-
libs/sra/libwsradb.vers.h | 1 -
libs/sra/libwsraschema.vers.h | 1 -
libs/sra/reader-abi.c | 25 +-
libs/sra/reader-fastq.c | 16 +-
libs/sra/reader-illumina.c | 96 +-
libs/sra/reader-sff.c | 115 +-
libs/sra/sra-dflt-schema.c | 1 -
libs/sra/sra-priv.h | 21 +-
libs/sra/sracache.c | 466 +
libs/sra/sramgr-cmn.c | 206 +-
libs/sra/srapath-stub.c | 408 -
libs/sra/sraschema-stub.c | 67 -
libs/sra/sratbl-cmn.c | 320 +-
libs/sra/wsramgr.c | 1 +
libs/sra/wsraschema-stub.c | 67 -
libs/sra/wsratbl.c | 19 +-
libs/sraxf/Makefile | 26 +-
libs/sraxf/fix_read_seg_impl.h | 169 +
libs/sraxf/format-spot-name.c | 11 +-
libs/sraxf/index_lookup.c | 23 +-
libs/sraxf/libsraxf.vers | 2 +-
libs/sraxf/libsraxf.vers.h | 1 -
libs/sraxf/libwsraxf.vers | 2 +-
libs/sraxf/libwsraxf.vers.h | 1 -
libs/sraxf/prefix-tree-to-name.c | 2 -
libs/sraxf/read-desc.c | 9 +-
libs/sraxf/read-seg-from-readn.c | 43 +-
libs/sraxf/stats.c | 193 +-
libs/sraxf/stats_quality.c | 2 +-
libs/sraxf/tokenize-spot_name-ion-torrent.c | 67 +-
libs/vdb/Makefile | 25 +-
libs/vdb/blob-priv.h | 67 +-
libs/vdb/blob.c | 895 +-
libs/vdb/blob.h | 7 -
libs/vdb/column-cmn.c | 22 +-
libs/vdb/column-priv.h | 56 +-
libs/vdb/cursor-cmn.c | 656 +-
libs/vdb/cursor-priv.h | 36 +-
libs/vdb/cursor.c | 3 +-
libs/vdb/database-cmn.c | 25 +
libs/vdb/database-depend.c | 1715 +
libs/vdb/dbmgr-cmn.c | 324 +-
libs/vdb/dbmgr-priv.h | 42 -
libs/vdb/dbmgr.c | 5 -
libs/vdb/delta_average.c | 297 +
libs/vdb/libvdb.vers | 2 +-
libs/vdb/libvdb.vers.h | 1 -
libs/vdb/libwvdb.vers | 2 +-
libs/vdb/libwvdb.vers.h | 1 -
libs/vdb/linker-cmn.c | 25 +
libs/vdb/linker-int.c | 11 +-
libs/vdb/linker-priv.h | 7 +
libs/vdb/meta-attr-write.c | 21 +-
libs/vdb/page-map.c | 1397 +-
libs/vdb/page-map.h | 291 +-
libs/vdb/phys-cmn.c | 39 +-
libs/vdb/prod-cmn.c | 291 +-
libs/vdb/prod-expr.c | 12 +-
libs/vdb/prod-func.c | 6 +-
libs/vdb/prod-priv.h | 50 +-
libs/vdb/prod.c | 13 +
libs/vdb/redimension.c | 1 +
libs/vdb/report-vdb.c | 856 +
libs/vdb/schema-dump.c | 37 +-
libs/vdb/schema-expr.c | 11 +-
libs/vdb/schema-int.c | 1 +
libs/vdb/schema-parse.c | 8 +
libs/vdb/schema-parse.h | 5 +
libs/vdb/schema-priv.h | 3 +
libs/vdb/schema-tbl.c | 54 +-
libs/vdb/schema-type.c | 18 +-
libs/vdb/schema.c | 26 +-
libs/vdb/table-cmn.c | 123 +-
libs/vdb/table-priv.h | 2 +-
libs/vdb/wcolumn.c | 1177 +-
libs/vdb/wcursor.c | 274 +-
libs/vdb/wdbmgr.c | 7 -
libs/vdb/wphys.c | 99 +-
libs/vdb/wprod.c | 28 +-
libs/vdb/wtable.c | 113 +-
libs/vfs/Makefile | 139 +
libs/vfs/libsrapath.vers | 1 +
libs/vfs/libvfs.vers | 1 +
libs/vfs/manager.c | 3709 +
libs/vfs/path-priv.h | 115 +
libs/vfs/path.c | 2457 +
libs/vfs/resolver-priv.h | 144 +
libs/vfs/resolver.c | 2694 +
libs/vfs/srapath-stub.c | 372 +
libs/vfs/srapath.c | 1424 +
libs/vfs/unix/syspath.c | 127 +
libs/vfs/win/syspath.c | 288 +
libs/vxf/Makefile | 68 +-
libs/vxf/checksum.c | 2 +
libs/vxf/irzip.c | 6 +-
libs/vxf/irzip.impl.h | 174 +-
libs/vxf/iunzip.c | 7 +-
libs/vxf/izip-common.h | 4 +-
libs/vxf/libvxf.vers | 2 +-
libs/vxf/libvxf.vers.h | 1 -
libs/vxf/libwvxf.vers | 2 +-
libs/vxf/lower-case-tech-reads.c | 111 +
libs/vxf/math-funcs-impl.h | 2 +-
libs/vxf/simple-sub-select.c | 79 +-
libs/vxf/sprintf.c | 1308 +-
libs/vxf/unzip.c | 16 +-
libs/vxf/vec-sum.c | 214 +-
libs/vxf/wgs-tokenize-accession.c | 212 +
libs/wgsxf/Makefile | 138 +
libs/wgsxf/build_read_type.c | 113 +
libs/wgsxf/build_scaffold.c | 388 +
.../libalign-writer.vers => wgsxf/libwgsxf.vers} | 0
.../libalign-writer.vers => wgsxf/libwwgsxf.vers} | 0
tools/Makefile | 25 +-
tools/align-info/Makefile | 37 +-
tools/align-info/align-info.c | 547 +-
tools/align-info/align-info.vers | 2 +-
tools/align-info/align-info.vers.h | 1 -
tools/bam-loader/Globals.h | 90 +
tools/bam-loader/KFileHelper.c | 142 +
tools/bam-loader/KFileHelper.h | 48 +
tools/bam-loader/KVPFile.c | 355 +
tools/bam-loader/KVPFile.h | 164 +
tools/bam-loader/Makefile | 136 +
tools/bam-loader/alignment-writer.c | 176 +
tools/bam-loader/alignment-writer.h | 95 +
tools/bam-loader/analysis.c | 157 +
tools/bam-loader/analysis.h | 49 +
tools/bam-loader/bam-load.vers | 1 +
tools/bam-loader/bam-loader.c | 987 +
tools/bam-loader/hashtable.c | 878 +
tools/bam-loader/hashtable.h | 55 +
tools/bam-loader/loader-imp.c | 2097 +
tools/bam-loader/loader-imp.h | 29 +
tools/bam-loader/reference-writer.c | 447 +
tools/bam-loader/reference-writer.h | 69 +
tools/bam-loader/sequence-writer.c | 345 +
tools/bam-loader/sequence-writer.h | 84 +
tools/cg-load/Makefile | 119 +
tools/cg-load/cg-load.c | 1120 +
tools/cg-load/cg-load.vers | 1 +
tools/cg-load/debug.h | 34 +
tools/cg-load/defs.h | 136 +
tools/cg-load/f1_3.c | 76 +
tools/cg-load/f1_5.c | 76 +
tools/cg-load/f2_0.c | 79 +
tools/cg-load/f2_2.c | 95 +
tools/cg-load/factory-cmn.h | 61 +
tools/cg-load/factory-evidence-dnbs.c | 351 +
tools/cg-load/factory-evidence-dnbs.h | 43 +
tools/cg-load/factory-evidence-intervals.c | 306 +
tools/cg-load/factory-evidence-intervals.h | 43 +
tools/cg-load/factory-file.h | 43 +
tools/cg-load/factory-mappings.c | 338 +
tools/cg-load/factory-mappings.h | 43 +
tools/cg-load/factory-reads.c | 261 +
tools/cg-load/factory-reads.h | 43 +
tools/cg-load/file-version-factory.c | 157 +
tools/cg-load/file.c | 403 +
tools/cg-load/file.h | 330 +
tools/cg-load/writer-algn.c | 775 +
tools/cg-load/writer-algn.h | 62 +
tools/cg-load/writer-evidence-dnbs.c | 227 +
tools/cg-load/writer-evidence-dnbs.h | 88 +
tools/cg-load/writer-evidence-intervals.c | 255 +
tools/cg-load/writer-evidence-intervals.h | 68 +
tools/cg-load/writer-seq.c | 135 +
tools/cg-load/writer-seq.h | 58 +
tools/fastq-loader/Makefile | 222 +
tools/fastq-loader/fastq-grammar.c | 2100 +
tools/fastq-loader/fastq-grammar.y | 294 +
tools/fastq-loader/fastq-lex.c | 2418 +
tools/fastq-loader/fastq-lex.l | 294 +
tools/fastq-loader/fastq-loader.c | 541 +
tools/fastq-loader/fastq-parse.h | 140 +
tools/fastq-loader/fastq-reader.c | 701 +
tools/fastq-loader/fastq-reader.h | 50 +
tools/fastq-loader/fastq-tokens.h | 64 +
tools/fastq-loader/latf-load.vers | 1 +
tools/fastq-loader/loader-imp.c | 242 +
tools/kar/Makefile | 34 +-
tools/kar/kar.c | 104 +-
tools/kar/kar.vers | 2 +-
tools/kar/kar.vers.h | 1 -
tools/kar/sra-kar.c | 37 +-
tools/kar/sra-kar.vers | 2 +-
tools/kar/sra-kar.vers.h | 1 -
tools/nenctool/Makefile | 123 +
tools/nenctool/nenctest.c | 502 +
tools/nenctool/nenctest.vers | 1 +
tools/nenctool/nenctool.c | 446 +
tools/nenctool/nenctool.vers | 1 +
tools/nencvalid/Makefile | 111 +
tools/nencvalid/nencvalid.c | 683 +
tools/nencvalid/nencvalid.vers | 1 +
tools/prefetch/Makefile | 111 +
tools/prefetch/prefetch.c | 1177 +
tools/prefetch/prefetch.vers | 1 +
tools/refseq-load/Makefile | 26 +-
tools/refseq-load/context.c | 115 +-
tools/refseq-load/context.h | 8 +-
tools/refseq-load/definitions.h | 4 -
tools/refseq-load/refseq-load.c | 468 +-
tools/refseq-load/refseq-load.vers | 2 +-
tools/refseq-load/refseq-load.vers.h | 1 -
tools/sam-dump/#Makefile# | 118 +
tools/sam-dump/Makefile | 38 +-
tools/sam-dump/sam-dump.c | 5607 +-
tools/sam-dump/sam-dump.vers | 2 +-
tools/sam-dump/sam-dump.vers.h | 1 -
tools/sra-dbcc/#Makefile# | 126 +
tools/sra-dbcc/Makefile | 40 +-
tools/sra-dbcc/sra-dbcc.c | 1464 +-
tools/sra-dbcc/sra-dbcc.vers | 2 +-
tools/sra-dbcc/sra-dbcc.vers.h | 1 -
tools/sra-dump/Makefile | 46 +-
tools/sra-dump/abi-dump.vers | 2 +-
tools/sra-dump/abi-dump.vers.h | 1 -
tools/sra-dump/abi.c | 118 +-
tools/sra-dump/core.c | 1454 +-
tools/sra-dump/core.h | 2 +-
tools/sra-dump/factory.c | 77 +-
tools/sra-dump/factory.h | 23 +-
tools/sra-dump/fasta_dump.c | 752 +
tools/sra-dump/fasta_dump.h | 36 +
tools/sra-dump/fastq-dump.vers | 2 +-
tools/sra-dump/fastq-dump.vers.h | 1 -
tools/sra-dump/fastq.c | 3507 +-
tools/sra-dump/illumina-dump.vers | 2 +-
tools/sra-dump/illumina-dump.vers.h | 1 -
tools/sra-dump/illumina.c | 110 +-
tools/sra-dump/sff-dump.vers | 2 +-
tools/sra-dump/sff-dump.vers.h | 1 -
tools/sra-dump/sff.c | 23 +-
tools/sra-dump/sra-dump.c | 60 +-
tools/sra-dump/sra-dump.vers | 2 +-
tools/sra-dump/sra-dump.vers.h | 1 -
tools/sra-load/Makefile | 36 +-
tools/sra-load/abi-load.vers | 2 +-
tools/sra-load/abi-load.vers.h | 1 -
tools/sra-load/absolid-fmt.c | 6 -
tools/sra-load/common-xml.c | 79 +-
tools/sra-load/common-xml.h | 30 +-
tools/sra-load/experiment-xml.c | 170 +-
tools/sra-load/experiment-xml.h | 1 -
tools/sra-load/fastq-fmt.c | 33 +-
tools/sra-load/fastq-load.vers | 2 +-
tools/sra-load/fastq-load.vers.h | 1 -
tools/sra-load/helicos-fmt.c | 5 -
tools/sra-load/helicos-load.vers | 2 +-
tools/sra-load/helicos-load.vers.h | 1 -
tools/sra-load/illumina-fmt.c | 5 -
tools/sra-load/illumina-load.vers | 2 +-
tools/sra-load/illumina-load.vers.h | 1 -
tools/sra-load/loader-file.c | 9 +-
tools/sra-load/loader-file.h | 4 +-
tools/sra-load/loader-fmt.h | 1 +
tools/sra-load/loader.c | 66 +-
tools/sra-load/run-xml.c | 5 +-
tools/sra-load/run-xml.h | 3 +-
tools/sra-load/sff-fmt.c | 5 -
tools/sra-load/sff-load.vers | 2 +-
tools/sra-load/sff-load.vers.h | 1 -
tools/sra-load/srf-fmt.c | 5 -
tools/sra-load/srf-load.vers | 2 +-
tools/sra-load/srf-load.vers.h | 1 -
tools/sra-load/writer-absolid.c | 10 +-
tools/sra-load/writer-absolid.h | 5 +-
tools/sra-pileup/Makefile | 152 +
tools/sra-pileup/cg_tools.c | 532 +
tools/sra-pileup/cg_tools.h | 64 +
tools/sra-pileup/cmdline_cmn.c | 1042 +
tools/sra-pileup/cmdline_cmn.h | 133 +
tools/sra-pileup/debug.h | 34 +
tools/sra-pileup/inputfiles.c | 376 +
tools/sra-pileup/inputfiles.h | 99 +
tools/sra-pileup/matecache.c | 439 +
tools/sra-pileup/matecache.h | 119 +
tools/sra-pileup/out_redir.c | 120 +
tools/sra-pileup/out_redir.h | 64 +
tools/sra-pileup/read_fkt.c | 338 +
tools/sra-pileup/read_fkt.h | 63 +
tools/sra-pileup/reref.c | 498 +
tools/sra-pileup/reref.h | 48 +
tools/sra-pileup/sam-aligned.c | 1604 +
tools/sra-pileup/sam-aligned.h | 45 +
tools/sra-pileup/sam-dump-opts.c | 1493 +
tools/sra-pileup/sam-dump-opts.h | 277 +
tools/sra-pileup/sam-dump.c | 4917 ++
tools/sra-pileup/sam-dump.vers | 1 +
tools/sra-pileup/sam-dump3.c | 532 +
tools/sra-pileup/sam-hdr.c | 425 +
tools/sra-pileup/sam-hdr.h | 41 +
tools/sra-pileup/sam-unaligned.c | 1411 +
tools/sra-pileup/sam-unaligned.h | 43 +
tools/sra-pileup/sra-pileup.c | 1834 +
tools/sra-pileup/sra-pileup.vers | 1 +
tools/sra-sort/Makefile | 141 +
tools/sra-sort/Makefile.cc | 24 +
tools/sra-sort/Makefile.clang | 27 +
tools/sra-sort/Makefile.gcc | 27 +
tools/sra-sort/Makefile.vc++ | 24 +
tools/sra-sort/buff-writer.c | 785 +
tools/sra-sort/buff-writer.h | 64 +
tools/sra-sort/caps.c | 125 +
tools/sra-sort/caps.h | 70 +
tools/sra-sort/capture-first-half-aligned.c | 192 +
tools/sra-sort/col-pair.c | 816 +
tools/sra-sort/col-pair.h | 323 +
tools/sra-sort/csra-pair.c | 216 +
tools/sra-sort/csra-pair.h | 84 +
tools/sra-sort/csra-tbl.c | 783 +
tools/sra-sort/csra-tbl.h | 83 +
tools/sra-sort/ctx.h | 105 +
tools/sra-sort/db-pair.c | 883 +
tools/sra-sort/db-pair.h | 208 +
tools/sra-sort/dir-pair.c | 504 +
tools/sra-sort/dir-pair.h | 124 +
tools/sra-sort/dump-blob-boundaries.c | 203 +
tools/sra-sort/except.c | 231 +
tools/sra-sort/except.h | 160 +
tools/sra-sort/gcc-ped.sh | 39 +
tools/sra-sort/glob-poslen.c | 349 +
tools/sra-sort/glob-poslen.h | 95 +
tools/sra-sort/id-mapper-col.c | 260 +
tools/sra-sort/id-mapper-col.h | 55 +
tools/sra-sort/idx-mapping.c | 92 +
tools/sra-sort/idx-mapping.h | 59 +
tools/sra-sort/map-file.c | 1192 +
tools/sra-sort/map-file.h | 172 +
tools/sra-sort/mapping-row-set.c | 496 +
tools/sra-sort/mem.c | 68 +
tools/sra-sort/mem.h | 128 +
tools/sra-sort/membank-priv.h | 44 +
tools/sra-sort/membank.c | 296 +
tools/sra-sort/meta-pair.c | 458 +
tools/sra-sort/meta-pair.h | 109 +
tools/sra-sort/paged-membank.c | 244 +
tools/sra-sort/paged-mmapbank.c | 399 +
tools/sra-sort/poslen-col-pair.c | 559 +
tools/sra-sort/poslen-col-pair.h | 63 +
tools/sra-sort/ref-alignid-col.c | 705 +
tools/sra-sort/ref-alignid-col.h | 53 +
tools/sra-sort/row-set-priv.h | 44 +
tools/sra-sort/row-set.c | 208 +
tools/sra-sort/row-set.h | 215 +
tools/sra-sort/run.c | 388 +
tools/sra-sort/simple-row-set.c | 212 +
tools/sra-sort/sort-defs.h | 82 +
tools/sra-sort/sorting-row-set.c | 405 +
tools/sra-sort/sra-sort.c | 754 +
tools/sra-sort/sra-sort.h | 171 +
tools/sra-sort/sra-sort.vers | 1 +
tools/sra-sort/status.h | 48 +
tools/sra-sort/tbl-pair.c | 1055 +
tools/sra-sort/tbl-pair.h | 209 +
tools/sra-sort/xcheck-ref-align.c | 404 +
tools/sra-sort/xcheck.h | 49 +
tools/sra-stat/Makefile | 42 +-
tools/sra-stat/sra-stat.c | 2353 +-
tools/sra-stat/sra-stat.vers | 2 +-
tools/sra-stat/sra-stat.vers.h | 1 -
tools/srapath/Makefile | 96 +
tools/srapath/srapath.c | 283 +
tools/srapath/srapath.vers | 1 +
tools/util/Makefile | 131 +-
tools/util/kdbmeta.c | 545 +-
tools/util/kdbmeta.vers | 2 +-
tools/util/kdbmeta.vers.h | 1 -
tools/util/mac/syspass.c | 48 +
tools/util/rcexplain.vers | 2 +-
tools/util/rcexplain.vers.h | 1 -
tools/util/rowwritetest.c | 14 +-
tools/util/rowwritetest.vers | 2 +-
tools/util/syspass-priv.h | 44 +
tools/util/test-sra.c | 1165 +
tools/util/test-sra.vers | 1 +
tools/util/testld.vers | 2 +-
tools/util/txt2kdb.vers | 2 +-
tools/util/unix/syspass.c | 62 +
tools/util/vdb-lock.c | 4 +-
tools/util/vdb-lock.vers | 2 +-
tools/util/vdb-lock.vers.h | 1 -
tools/util/vdb-passwd.c | 276 +
tools/util/vdb-passwd.vers | 1 +
tools/util/vdb-unlock.c | 4 +-
tools/util/vdb-unlock.vers | 2 +-
tools/util/vdb-unlock.vers.h | 1 -
tools/util/win/syspass.c | 53 +
tools/vdb-config/Makefile | 25 +-
tools/vdb-config/vdb-config.c | 386 +-
tools/vdb-config/vdb-config.vers | 2 +-
tools/vdb-config/vdb-config.vers.h | 1 -
tools/vdb-copy/#Makefile# | 137 +
tools/vdb-copy/Makefile | 37 +-
tools/vdb-copy/coldefs.c | 43 +-
tools/vdb-copy/coldefs.h | 2 +-
tools/vdb-copy/context.c | 4 +
tools/vdb-copy/context.h | 8 +
tools/vdb-copy/copy_meta.c | 165 +-
tools/vdb-copy/definitions.h | 2 +
tools/vdb-copy/helper.c | 14 +-
tools/vdb-copy/helper.h | 3 +-
tools/vdb-copy/namelist_tools.c | 2 +-
tools/vdb-copy/num-gen.c | 10 +-
tools/vdb-copy/progressbar.c | 18 +-
tools/vdb-copy/redactval.c | 1 -
tools/vdb-copy/type_matcher.c | 24 +-
tools/vdb-copy/vdb-copy-includes.h | 2 +
tools/vdb-copy/vdb-copy.c | 119 +-
tools/vdb-copy/vdb-copy.vers | 2 +-
tools/vdb-copy/vdb-copy.vers.h | 1 -
tools/vdb-decrypt/Makefile | 130 +
tools/vdb-decrypt/shared.c | 1270 +
tools/vdb-decrypt/shared.h | 93 +
tools/vdb-decrypt/vdb-decrypt.c | 280 +
tools/vdb-decrypt/vdb-decrypt.vers | 1 +
tools/vdb-decrypt/vdb-encrypt.c | 227 +
tools/vdb-decrypt/vdb-encrypt.vers | 1 +
tools/vdb-dump/#Makefile# | 130 +
tools/vdb-dump/Makefile | 39 +-
tools/vdb-dump/vdb-dump-coldefs.c | 258 +-
tools/vdb-dump/vdb-dump-coldefs.h | 4 +-
tools/vdb-dump/vdb-dump-context.c | 79 +-
tools/vdb-dump/vdb-dump-context.h | 17 +-
tools/vdb-dump/vdb-dump-filter.c | 4 +-
tools/vdb-dump/vdb-dump-formats.c | 55 +-
tools/vdb-dump/vdb-dump-helper.c | 78 +-
tools/vdb-dump/vdb-dump-helper.h | 2 +-
tools/vdb-dump/vdb-dump-num-gen.c | 4 +-
tools/vdb-dump/vdb-dump-num-gen.h | 3 +-
tools/vdb-dump/vdb-dump-row-context.h | 1 +
tools/vdb-dump/vdb-dump-str.c | 32 +-
tools/vdb-dump/vdb-dump-tools.c | 1 -
tools/vdb-dump/vdb-dump.c | 767 +-
tools/vdb-dump/vdb-dump.vers | 2 +-
tools/vdb-dump/vdb-dump.vers.h | 1 -
tools/vdb-validate/Makefile | 114 +
tools/vdb-validate/vdb-validate.c | 2325 +
tools/vdb-validate/vdb-validate.vers | 1 +
1083 files changed, 478413 insertions(+), 20164 deletions(-)
diff --git a/CHANGES b/CHANGES
deleted file mode 100644
index 63d53dc..0000000
--- a/CHANGES
+++ /dev/null
@@ -1,30 +0,0 @@
-# ===========================================================================
-#
-# PUBLIC DOMAIN NOTICE
-# National Center for Biotechnology Information
-#
-# This software/database is a "United States Government Work" under the
-# terms of the United States Copyright Act. It was written as part of
-# the author's official duties as a United States Government employee and
-# thus cannot be copyrighted. This software/database is freely available
-# to the public for use. The National Library of Medicine and the U.S.
-# Government have not placed any restriction on its use or reproduction.
-#
-# Although all reasonable efforts have been taken to ensure the accuracy
-# and reliability of the software and data, the NLM and the U.S.
-# Government do not and cannot warrant the performance or results that
-# may be obtained by using this software or data. The NLM and the U.S.
-# Government disclaim all warranties, express or implied, including
-# warranties of performance, merchantability or fitness for any particular
-# purpose.
-#
-# Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-
-The NCBI SRA Software Development Kit
-Contact: sra-tools at ncbi.nlm.nih.gov
-
-Release documentation is now being delivered at
-http://trace.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=software
diff --git a/Makefile b/Makefile
index 85bb82c..b556f1a 100644
--- a/Makefile
+++ b/Makefile
@@ -47,17 +47,6 @@ $(SUBDIRS) test:
.PHONY: default $(SUBDIRS) test
#-------------------------------------------------------------------------------
-# static vs. dynamic
-#
-static:
- @ touch "$(CURDIR)/build/STATIC"
-
-dynamic:
- @ rm -f "$(CURDIR)/build/STATIC"
-
-.PHONY: static dynamic
-
-#-------------------------------------------------------------------------------
# all
#
SUBDIRS_ALL = $(addsuffix _all,$(SUBDIRS))
@@ -89,27 +78,45 @@ SUBDIRS_CLEAN = $(addsuffix _clean,$(SUBDIRS_ALL))
clean: $(SUBDIRS_CLEAN)
$(SUBDIRS_CLEAN):
- @ $(MAKE) -C $(subst _all_clean,,$@) clean
+ @ $(MAKE) -s -C $(subst _all_clean,,$@) clean
.PHONY: clean $(SUBDIRS_CLEAN)
#-------------------------------------------------------------------------------
+# runtests
+#
+SUBDIRS_RUNTESTS = $(addsuffix _runtests, libs tools test)
+
+runtests: std $(SUBDIRS_RUNTESTS)
+
+$(SUBDIRS_RUNTESTS):
+ @ $(MAKE) -C $(subst _runtests,,$@) runtests
+
+.PHONY: runtests $(SUBDIRS_RUNTESTS)
+
+#-------------------------------------------------------------------------------
# pass-through targets
#
-COMPILERS = GCC ICC VC++
-ARCHITECTURES = i386 x86_64
-CONFIG = debug profile release
+COMPILERS = GCC VC++ CLANG
+ARCHITECTURES = i386 x86_64 sparc32 sparc64
+CONFIG = debug profile release static dynamic
+PUBLISH = scm pubtools
+REPORTS = bindir targdir osdir config compilers architecture architectures
PASSTHRUS = \
- out bindir \
+ out \
CC $(COMPILERS) \
$(ARCHITECTURES) \
- $(CONFIG)
+ $(CONFIG) $(PUBLISH)
$(PASSTHRUS):
- @ $(MAKE) TOP=$(CURDIR) -f build/Makefile.env $@
+ @ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env $@
+ @ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env rebuild-dirlinks config
+
+$(REPORTS):
+ @ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env $@
-.PHONY: $(PASSTHRUS)
+.PHONY: $(PASSTHRUS) $(REPORTS)
#-------------------------------------------------------------------------------
diff --git a/README b/README
index 6abcab1..b9cb81e 100644
--- a/README
+++ b/README
@@ -32,26 +32,8 @@ http://trace.ncbi.nlm.nih.gov/Traces/sra/std
The SRA Toolkit and SDK from NCBI is a collection of tools and
libraries for using data in the INSDC Sequence Read Archives.
-With this release, NCBI has implemented Compression by Reference, a
-sequence alignment compression process for storing sequence data.
-Currently BAM, Complete Genomics and Illumina export.txt formats
-contain alignment information. Compression by Reference only stores
-the difference in base pairs between sequence data and the segments it
-aligns to. The decompression process to restore original data such as
-fastq-dump would require fast access to the actual sequences of the
-references. NCBI recommends that SRA users dedicate local disk space
-to store local references downloaded from the NCBI SRA site. Linked
-references should be in a location accessible by the SRA Reader
-software.
-
-Older files in the NCBI system may not have been compressed using
-Compression by Reference. For more information on how to use
-Reference-based compressed files, download local references, and use
-related tools please refer to Compression by Reference file on the
-NCBI SRA website:
-
- "http://trace.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=softwareReadme"
-
+With this release, NCBI has implemented Automatic Remote Access by accession,
+making it possible to access data using NCBI servers without prior download.
For additional information on using and building the toolkit,
please visit our web site at:
diff --git a/README-WINDOWS.txt b/README-WINDOWS.txt
index 6a72a3b..fc27bf0 100644
--- a/README-WINDOWS.txt
+++ b/README-WINDOWS.txt
@@ -29,6 +29,21 @@ The NCBI SRA ( Sequence Read Archive ) SDK ( Software Development Kit )
Contact: sra-tools at ncbi.nlm.nih.gov
+NOTICE:
+
+ Effective as of release 2.1.8, NCBI is no longer supporting public sources for
+ Windows builds. The sources will still contain everything that we use to build
+ the binaries, but may not build in your environment.
+
+ The reason for this change has to do with dependencies upon third party
+ libraries, which are commonly installed on other platforms, but could be
+ described as "hit and miss" on Windows. When the libraries DO exist, it is
+ difficult to know if they have a correct or compatible calling convention.
+
+ We will continue to distribute pre-built binaries for Windows. You are welcome
+ to try your luck at compiling the sources yourself under Cygwin.
+
+
ENVIRONMENT:
The Windows build uses the same makefiles as Linux and Mac, and has
diff --git a/README-build b/README-build
deleted file mode 100644
index fe1d722..0000000
--- a/README-build
+++ /dev/null
@@ -1,237 +0,0 @@
-# ===========================================================================
-#
-# PUBLIC DOMAIN NOTICE
-# National Center for Biotechnology Information
-#
-# This software/database is a "United States Government Work" under the
-# terms of the United States Copyright Act. It was written as part of
-# the author's official duties as a United States Government employee and
-# thus cannot be copyrighted. This software/database is freely available
-# to the public for use. The National Library of Medicine and the U.S.
-# Government have not placed any restriction on its use or reproduction.
-#
-# Although all reasonable efforts have been taken to ensure the accuracy
-# and reliability of the software and data, the NLM and the U.S.
-# Government do not and cannot warrant the performance or results that
-# may be obtained by using this software or data. The NLM and the U.S.
-# Government disclaim all warranties, express or implied, including
-# warranties of performance, merchantability or fitness for any particular
-# purpose.
-#
-# Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-
-The NCBI SRA ( Sequence Read Archive ) SDK ( Software Development Kit )
-
-
-Contact: sra-tools at ncbi.nlm.nih.gov
-http://trace.ncbi.nlm.nih.gov/Traces/sra/std
-
-
-This version of the NCBI SRA SDK generates loading and dumping tools with
-their respective libraries for building new and accessing existing runs.
-It may be built with GCC, ICC or Microsoft VC++.
-
-
-REQUIREMENTS:
-
-This software release was designed to run under Linux, MacOSX and Windows
-operating systems on Intel x86-compatible 32 and 64 bit architectures.
-
- ar # tested with version 2.15.90
- bash # certain scripts require bash
- make # GNU make version 3.80 or later
- gcc, g++ # tested with 4.1.2, but should work with others
- libz # version 1
- libbz2 # version 1
- libxml2 # tested with version 2.6.7 [Linux and Mac only]
-
-If your system does NOT have libz or libbz2, or if the build fails due to
-missing one of the expected libraries, try running "make all" which will
-attempt to download the sources to libz and libbz2 and build them.
-
-OPTIONS:
-
-Specific versions of ICC are supported as an alternate compiler.
-
- icc, icpc # tested with 11.0 (64-bit) and 10.1 (32-bit)
- # 32-bit 11.0 does not work
-
-WINDOWS BUILD:
-
-The Windows build uses the same makefiles as Linux and Mac, and has been tested
-under Cygwin. You need to execute Cygwin AFTER sourcing the Microsoft batch file
-from Visual Studio.
-
-
-CONTENTS:
-
- CHANGES # describes changes at pertinent levels
- Makefile # drives configuration and sub-target builds
- README
- README-WINDOWS.txt
- USAGE
- build # holds special makefiles and configuration
- interfaces # contains module interfaces, schema, plus
- compiler and platform specific includes
- libs # sdk library code
- tools # toolkit code
- test # testing code
-
-
-CONFIGURATION:
-
-There are three configurable parameters:
- 1) BUILD = 'debug', 'release' etc.
- 2) COMP = 'GCC' etc.
- 3) OUTDIR = <path-to-binaries-libs-objfiles>
-
-The target architecture is chosen to match your build host. At this
-time, only the Macintosh build will support cross-compilation. In the
-instructions below, x86_64 is the assumed architecture. If your host
-is i386 (32-bit), then you would substitute 32 for paths that contain
-64.
-
-
-BUILD INSTRUCTIONS:
-
-## create output directories and symlinks for first time
-
- $ OUTDIR=<path-to-output>
- $ make OUTDIR="$OUTDIR" out
-
-The path in OUTDIR MUST be a full path - relative paths may fail.
-
-## decide upon STATIC or DYNAMIC builds
-# VDB.2 was designed to make use of dynamic libraries, but
-# in many environments static builds are more convenient or may even be
-# required, due to installation restrictions.
-#
-# THE BUILD DOES NOT CURRENTLY SUPPORT PARALLEL DYNAMIC AND STATIC MODES
-# if you switch between them, you should perform a "make clean" first.
-
- $ make static
--OR_
- $ make dynamic
-
-## if you are using a dynamic build, update LD_LIBRARY_PATH - probably want to put
-# in shell startup ( ensure that libz, libbz2 and libxml2 can be found in your path )
-
- $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OUTDIR/lib64"
-
-## the build uses "TOP" as an internal variable
-# if you have it defined in your shell environment, unset it before making
-
-## build the libraries and binaries
-
- $ make GCC debug # optionally set compiler and/or build
- $ make # builds libraries and binary executables
-
-The standard make will cause default libraries and tools to be built. Binary
-executables and both shared and static libraries can be found in their
-respective output directories.
-
-If the build fails due to not finding libz or libbz2, try:
-
- $ make all # see note above on libraries
-
-
-STATIC BUILD RESULTS:
-
-<OUTDIR>/bin64/ # (bin32 for 32-bit builds)
- abi-dump # dump to ABI-native format
- abi-load # load from ABI-native format
- align-info # retrieve information from cSRA object
- fastq-dump # dump to FASTQ format
- fastq-load # load from FASTQ format
- helicos-load # load from Helicos native format
- illumina-dump # dump to Illumina-native format
- illumina-load # load from Illumina-native format
- kar # single file archive utility
- kdbmeta # access db, table or column metadata
- rcexplain # return code display utility
- sam-dump # dump to SAM format from cSRA
- sff-dump # dumps 454 runs in SFF format
- sff-load # load from SFF format
- sra-dbcc # consistency checker
- sra-kar # sra-specific kar tool
- sra-stat # gather run statistics and print to stdout
- srf-load # load from SRF format
- vdb-copy # tool to copy tables
- vdb-dump # dump rows in a textual format
- vdb-lock # locks an object against modification
- vdb-unlock # unlocks an object
-
-<OUTDIR>/bin64/ncbi # (bin32 for 32-bit builds)
- config.kfg # simple text file for configuring file system
-
-<OUTDIR>/lib64/ # (lib32 for 32-bit builds)
- libkdb # static physical layer reading library
- libkfg # static configuration library
- libkfs # static file system library
- libklib # static support library
- libkproc # static process synchronization library
- libkq # static cross-thread queue library
- libksproc # static single-threaded emulation library
- libksrch # static search algorithm library
- libkxfs # static XML to filesystem library
- libkxml # static XML container support library
- libload # static loader tool utility library
- libsradb # static API for accessing sra
- libsrareader # static reader library
- libsraschema # static version of SRA schema
- libvdb # static virtual layer reading library
- libwkdb # static physical layer update library
- libwsradb # static update API for SRA
- libwvdb # static virtual layer update library
-
-<OUTDIR>/mod64/ # (mod32 for 32-bit builds)
- -- empty --
-
-<OUTDIR>/wmod64/ # (wmod32 for 32-bit builds)
- -- empty --
-
-
-
-DYNAMIC BUILD RESULTS:
-
-<OUTDIR>/bin64/ # (bin32 for 32-bit builds)
- -- same as static --
-
-<OUTDIR>/bin64/ncbi # (bin32 for 32-bit builds)
- -- empty --
-
-<OUTDIR>/lib64/ # (lib32 for 32-bit builds)
- libkdb # physical layer reading library
- libkfg # configuration library
- libkfs # file system library
- libklib # support library
- libkproc # process synchronization library
- libkq # cross-thread queue library
- libksproc # single-threaded emulation library
- libksrch # search algorithm library
- libkxfs # XML to filesystem library
- libkxml # XML container support library
- libload # loader tool utility library
- libsra-schema # weak-linked sra schema
- libsradb # API for accessing sra
- libsrapath # weak-link stubs for srapath
- libsrareader # reader library
- libvdb # virtual layer reading library
- libwkdb # physical layer update library
- libwsradb # update API for SRA
- libwvdb # virtual layer update library
-
-<OUTDIR>/lib64/ncbi # (lib32 for 32-bit builds)
- config.kfg # simple text file for configuring file system
-
-<OUTDIR>/mod64/ # (mod32 for 32-bit builds)
- libaxf # cSRA-specific VDB external functions
- libsraxf # sra-specific VDB external functions
- libvxf # generic VDB external functions
-
-<OUTDIR>/wmod64/ # (wmod32 for 32-bit builds)
- libwsraxf # sra-specific VDB external functions for update
- libwvxf # update VDB external functions
diff --git a/README-build.txt b/README-build.txt
new file mode 100644
index 0000000..300f138
--- /dev/null
+++ b/README-build.txt
@@ -0,0 +1,259 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+The NCBI SRA ( Sequence Read Archive ) SDK ( Software Development Kit )
+
+
+Contact: sra-tools at ncbi.nlm.nih.gov
+http://trace.ncbi.nlm.nih.gov/Traces/sra/std
+
+
+This version of the NCBI SRA SDK generates tools with their respective libraries
+for building new and accessing existing runs. It may be built with GCC.
+
+
+REQUIREMENTS:
+
+This software release was designed to run under Linux, MacOSX and Windows
+operating systems on Intel x86-compatible 32 and 64 bit architectures.
+
+ ar # tested with version 2.22
+ bash # certain scripts require bash
+ make # GNU make version 3.81 or later
+ gcc, g++ # tested with 4.4.2, but should work with others
+ libxml2 # tested with version 2.7.6
+ libcurl # tested with version 7.27
+
+WINDOWS BUILD:
+
+The Windows build uses the same make files as Linux and Mac, and has been tested
+under Cygwin. You need to execute Cygwin AFTER sourcing the Microsoft batch file
+from Visual Studio.
+
+
+CONTENTS:
+
+ Makefile # drives configuration and sub-target builds
+ README
+ README-WINDOWS.txt
+ build # holds special makefiles and configuration
+ interfaces # contains module interfaces, schema, plus
+ compiler and platform specific includes
+ libs # sdk library code
+ tools # toolkit code
+
+
+CONFIGURATION:
+
+There are three configurable parameters:
+ 1) BUILD = 'debug', 'release' etc.
+ 2) COMP = 'GCC' etc.
+ 3) OUTDIR = <path-to-binaries-libs-objfiles>
+
+The target architecture is chosen to match your build host. At this
+time, only the Macintosh build will support cross-compilation. In the
+instructions below, x86_64 is the assumed architecture. If your host
+is i386 (32-bit), then you would substitute 32 for paths that contain
+64.
+
+Running "make help" will list more details of how your build may
+be configured:
+
+ Before initial build, run 'make OUTDIR=<dir> out' from
+ the project root to set the output directory of your builds.
+
+ To select a compiler, run 'make <comp>' where
+ comp = { GCC VC++ CLANG }.
+
+ For hosts that support cross-compilation ( only Macintosh today ),
+ you can run 'make <arch>' where arch = { i386 x86_64 sparc32 sparc64 }.
+
+ To set a build configuration, run 'make <config>' where
+ config = { debug profile release static dynamic }.
+
+Running "make config" will show the current configuration, e.g.:
+
+ current build is linux static rel x86_64 build using gcc tools
+ output target directory is '$PATH_TO_OUTPUT/linux/gcc/stat/x86_64/rel'
+
+where "$PATH_TO_OUTPUT" is local to your system, of course.
+
+
+BUILD INSTRUCTIONS:
+
+## create output directories and symlinks for first time
+
+ $ OUTDIR=<path-to-output>
+ $ make OUTDIR="$OUTDIR" out
+
+The path in OUTDIR MUST be a full path - relative paths may fail.
+
+## decide upon STATIC or DYNAMIC builds
+# VDB.2 was designed to make use of dynamic libraries, but
+# in many environments static builds are more convenient or may even be
+# required, due to installation restrictions.
+#
+# THE BUILD DOES NOT CURRENTLY SUPPORT PARALLEL DYNAMIC AND STATIC MODES
+# if you switch between them, you should perform a "make clean" first.
+
+ $ make static
+-OR_
+ $ make dynamic
+
+## if you are using a dynamic build, update LD_LIBRARY_PATH - probably want to put
+# in shell startup ( ensure that libz, libbz2 and libxml2 can be found in your path )
+
+ $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OUTDIR/lib64"
+
+## the build uses "TOP" as an internal variable
+# if you have it defined in your shell environment, unset it before making
+
+## build the libraries and binaries
+
+ $ make GCC debug # optionally set compiler and/or build
+ $ make # builds libraries and binary executables
+
+The standard make will cause default libraries and tools to be built. Binary
+executables and both shared and static libraries can be found in their
+respective output directories.
+
+
+STATIC BUILD RESULTS:
+
+<OUTDIR>/bin64/ # (bin32 for 32-bit builds)
+ abi-dump # dump to ABI-native format
+ abi-load # load from ABI-native format
+ align-info # retrieve information from SRA alignment object (cSRA)
+ bam-load # load from BAM format into SRA (cSRA)
+ cg-load # load from Complete Genomics native format
+ fastq-dump # dump to FASTQ format
+ fastq-load # load from FASTQ format
+ helicos-load # load from Helicos native format
+ illumina-dump # dump to Illumina-native format
+ illumina-load # load from Illumina-native format
+ kar # single file archive utility
+ kdbmeta # access db, table or column metadata
+ latf-load # generic FASTQ loader
+ prefetch # tool to download runs from NCBI by accession
+ rcexplain # return code display utility
+ sam-dump # dump to SAM format from cSRA
+ sff-dump # dumps 454 runs in SFF format
+ sff-load # load from SFF format
+ sra-kar # sra-specific kar tool
+ sra-pileup # produces SAM-style pileup information from SRA (cSRA)
+ sra-sort # canonically orders SRA (cSRA) data for improved access
+ sra-stat # gather run statistics and print to stdout
+ srapath # returns the full location of an object by accession
+ srf-load # load from SRF format
+ test-sra # test user's environment for configuration and libraries
+ vdb-config # display and/or modify user configuration
+ vdb-copy # tool to copy tables
+ vdb-decrypt # tool to decrypt files from dbGap
+ vdb-dump # dump rows in a textual format
+ vdb-encrypt # to to (re)encrypt files using dbGap encryption key
+ vdb-lock # locks an object against modification
+ vdb-unlock # unlocks an object
+
+<OUTDIR>/lib64/ # (lib32 for 32-bit builds)
+ libalign-access # BAM format reading API
+ libalign-reader # SRA (cSRA) alignment reading API
+ libbz2 # bzip2 library
+ libkdb # physical layer reading library
+ libkfg # configuration library
+ libkfs # physical file system library
+ libklib # support library
+ libkproc # process synchronization library
+ libkq # cross-thread queue library
+ libkrypto # cryptographic library
+ libsproc # single-threaded stub library
+ libksrch # search algorithm library
+ libkurl # interface to libcurl
+ libkxfs # XML to filesystem library
+ libkxml # XML container support library
+ libload # loader tool utility library
+ libsradb # API for accessing sra
+ libsrareader # reader library
+ libsraschema # version of SRA schema for reading
+ libvdb # virtual layer reading library
+ libvfs # virtual file system library
+ libwkdb # physical layer update library
+ libwsradb # update API for SRA
+ libwsraschema # version of SRA schema for update
+ libwvdb # virtual layer update library
+ libz # gzip library
+
+<OUTDIR>/mod64/ # (mod32 for 32-bit builds)
+ -- empty --
+
+<OUTDIR>/wmod64/ # (wmod32 for 32-bit builds)
+ -- empty --
+
+
+
+DYNAMIC BUILD RESULTS:
+
+<OUTDIR>/bin64/ # (bin32 for 32-bit builds)
+ -- same as static --
+
+<OUTDIR>/lib64/ # (lib32 for 32-bit builds)
+ libalign-access # BAM format reading API
+ libalign-reader # SRA (cSRA) alignment reading API
+ libbz2 # static bzip2 library
+ libkdb # physical layer reading library
+ libkfg # configuration library
+ libkfs # physical file system library
+ libklib # support library
+ libkproc # process synchronization library
+ libkq # cross-thread queue library
+ libkrypto # cryptographic library
+ libsproc # single-threaded stub library
+ libksrch # search algorithm library
+ libkurl # interface to libcurl
+ libkxfs # XML to filesystem library
+ libkxml # XML container support library
+ libload # loader tool utility library
+ libsradb # API for accessing sra
+ libsrareader # reader library
+ libsraschema # static version of SRA schema for reading
+ libvdb # virtual layer reading library
+ libvfs # virtual file system library
+ libwkdb # physical layer update library
+ libwsradb # update API for SRA
+ libwsraschema # static version of SRA schema for update
+ libwvdb # virtual layer update library
+ libz # static gzip library
+
+<OUTDIR>/mod64/ # (mod32 for 32-bit builds)
+ libaxf # cSRA-specific VDB external functions
+ libsraxf # SRA-specific VDB external functions
+ libvxf # generic VDB external functions
+ libwgsxf # WGS-specific VDB external functions
+
+<OUTDIR>/wmod64/ # (wmod32 for 32-bit builds)
+ libwaxf # cSRA-specific VDB external functions for update
+ libwsraxf # SRA-specific VDB external functions for update
+ libwvxf # update VDB external functions
+ libwwgsxf # WGS-specific VDB external functions for update
+
diff --git a/README-config.txt b/README-config.txt
new file mode 100644
index 0000000..f64ffdb
--- /dev/null
+++ b/README-config.txt
@@ -0,0 +1,58 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+The NCBI SRA ( Sequence Read Archive )
+
+
+Contact: sra-tools at ncbi.nlm.nih.gov
+http://trace.ncbi.nlm.nih.gov/Traces/sra/std
+
+About configuration-assistant:
+
+ configuration-assistant.perl will help you to configure the SRA tools to be able
+ to access the local reference repository and to download the correct references
+ for a given cSRA file.
+
+To run configuration-assistant on Linux or Mac:
+ - open a shell
+ - change directory to the folder where you extracted the toolkit (cd .../sratoolkit...),
+ - type 'perl configuration-assistant.perl' (without the quotation marks).
+
+
+To run configuration-assistant on Windows:
+
+ - open Command Prompt (Start->Run->cmd.exe),
+ - change directory to the folder where you extracted the toolkit (cd ...\sratoolkit.x.x.x-win64),
+ - type 'perl configuration-assistant.perl' (without the quotation marks).
+
+
+If the following message shows up:
+
+ "'perl' is not recognized as an internal or external command,
+ operable program or batch file."
+
+that means perl is not installed or not installed properly.
+
+Download Perl at ActiveState.com (http://www.activestate.com/activeperl/downloads)
diff --git a/USAGE b/USAGE
deleted file mode 100644
index 148122e..0000000
--- a/USAGE
+++ /dev/null
@@ -1,162 +0,0 @@
-# ===========================================================================
-#
-# PUBLIC DOMAIN NOTICE
-# National Center for Biotechnology Information
-#
-# This software/database is a "United States Government Work" under the
-# terms of the United States Copyright Act. It was written as part of
-# the author's official duties as a United States Government employee and
-# thus cannot be copyrighted. This software/database is freely available
-# to the public for use. The National Library of Medicine and the U.S.
-# Government have not placed any restriction on its use or reproduction.
-#
-# Although all reasonable efforts have been taken to ensure the accuracy
-# and reliability of the software and data, the NLM and the U.S.
-# Government do not and cannot warrant the performance or results that
-# may be obtained by using this software or data. The NLM and the U.S.
-# Government disclaim all warranties, express or implied, including
-# warranties of performance, merchantability or fitness for any particular
-# purpose.
-#
-# Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-
-The NCBI SRA ( Sequence Read Archive ) Toolkit
-
-
-Contact: sra-tools at ncbi.nlm.nih.gov
-http://trace.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=software
-
-
-For preliminary documentation on tool usage, consult the files within
-the "help" directory.
-
-
-CHANGES:
-
-SRA Toolkit includes new features in sam-dump tool and vdb-dump tools.
-
-Sam-dump now supports slicing across multiple sequences, and dumping cSRA files to fasta and fastq formats. In addition, sam-dump has three new parameters
--=|--hide-identical Output '=' if base is identical to reference
---gzip Compress output using gzip
---bzip2 Compress output using bzip2
-
-vdb-dump has two new parameters
--o|--column_enum_short enumerates columns in short form
--b|--boolean defines how boolean's are printed (1,T)
-
-We have combined the functionality of two scripts, config-assistant.perl and reference-assistant.perl into a single script, configuration-assistant.perl that helps users download the correct references for a given cSRA file and configure the user environment for the SRA Toolkit.
-
-DESCRIPTION:
-
- This release includes tools for reading the SRA archive, generally
- by converting individual runs into some commonly used format such as
- fastq. Support for NCBI's Compression by Reference is also included.
-
- "Linux" binaries have been created on CentOS and SuSE Linux
- distributions. They are not guaranteed to work on other
- distributions. In particular, the version of libc.so should be
- compatible. They are specific to the x86-family architectures.
-
- "Windows" binaries have been created using MSVC's (not Cygwin)
- tools. This release includes Win32 binaries. The "*-load" tools
- are not released for "Windows".
-
- "Mac OS X" binaries are available for the x86-family
- architectures. They will NOT run on PPC Macs. The 64-bit binaries
- will run only on OS 10.6. The 32-bit binaries should run on either
- 10.5 or later.
-
-
-CONTENTS:
-
- "abi-dump" - dump ABI color-space runs into their native format
- "abi-load" - load ABI color-space runs
- "fastq-dump" - dump any run of any platform in FASTQ format
- "fastq-load" - load FASTQ runs
- "helicos-load" - load HELICOS runs
- "illumina-dump" - dump Illumina runs into their native format
- "illumina-load" - load Illumina native runs
- "kar" - an archive extraction tool for .sra files
- "kdbmeta" - display the contents of one or more metadata stores
- "rcexplain" - print out error string for return codes (RC)
- "refseq-load" - ( NEW for Linux and Mac ) download a reference
- sequence object
- "sff-dump" - dump 454 runs into SFF format
- "sff-load" - load 454 SFF runs
- "sra-dbcc" - check SRA runs
- "sra-dump" - dump any run in a textual format [see note below]
- "sra-kar" - creates a single file archive from an SRA run
- "sra-stat" - display run column statistics
- "srf-load" - load SRF runs
- "sam-dump" - dump a cSRA into the SAM-format
- "vdb-copy" - copy SRA objects
- "vdb-dump" - display SRA objects in a textual format [see note below]
- "vdb-lock" - lock an object against modification
- "vdb-unlock" - unlock an object
- "align-info" - displays which references a csra-archive uses
- "vdb-config" - displays the configuration
-
-
-NOTES:
-
- The "sam-dump" tool only works on cSRA's. ( See README-csra )
- The textual dumpers "sra-dump" and "vdb-dump" are provided in this
- release as an aid in visual inspection. It is likely that their
- actual output formatting will be changed in the near future to a
- stricter, more formalized representation[s].
-
- The "help" information will be improved in near future releases, and
- the tool options will become standardized across the set. We will
- also be providing documentation on our web site.
-
- Tool options may change in the next release. Version 1 tool options
- will remain supported wherever possible in order to preserve
- operation of any existing scripts.
-
-
-CAVEATS:
-
- SRA tools are designed to handle very large amounts of data, and are
- not currently oriented toward desktop use. They work well within any
- Unix-like environment, such as Linux or MacOS's BSD shell.
-
- Windows operation presents a few challenges. We have tested our
- binaries under the MS "cmd.exe" shell and Cygwin's bash. Our tools
- know how to accept paths in Windows, Cygwin, POSIX and MinGW
- formats. Internally, all paths are treated as MinGW-style POSIX
- paths, so any information appearing in output will reflect this
- conversion:
-
- # simple file names
- SRR012345.sra => [NO CHANGE]
-
- # relative paths
- win\SRR012345.sra => win/SRR012345.sra
-
- # full or drive-relative paths
- C:\sra\win\SRR012345.sra => /C/sra/win/SRR012345.sra
-
- # network paths
- \\server\sra\SRR012345.sra => //server/sra/SRR012345.sra
-
- # POSIX paths
- /sra/posix/SRR012345.sra => [NO CHANGE]
-
- # Cygwin full paths
- /cygdrive/C/sra/SRR012345.sra => /C/sra/SRR012345.sra
-
- There are some situations where the software may behave unexpectedly
- due to path conversions. In particular, since Windows does not
- conform to POSIX path conventions, there may be difficulties
- combining network paths with non-network paths, explicitly or
- implicitly. IF YOU HAVE PROBLEMS, we recommend mounting file servers
- as network drives.
-
- If you run the software under Cygwin, you should take care to use
- either relative paths (those that do not begin with '/') or full
- paths that start with "/cygdrive/". The reason is that Cygwin
- provides its own path manipulation, but our tools are not aware of
- which shell they are running under.
diff --git a/build/BUILD.linux b/build/BUILD.linux
index 79f9a60..7d0ab7a 100644
--- a/build/BUILD.linux
+++ b/build/BUILD.linux
@@ -1 +1 @@
-pub
+dbg
diff --git a/build/BUILD.mac b/build/BUILD.mac
index 79f9a60..17640be 100644
--- a/build/BUILD.mac
+++ b/build/BUILD.mac
@@ -1 +1 @@
-pub
+rel
diff --git a/build/BUILD.win b/build/BUILD.win
index 79f9a60..17640be 100644
--- a/build/BUILD.win
+++ b/build/BUILD.win
@@ -1 +1 @@
-pub
+rel
diff --git a/build/COMP.mac b/build/COMP.mac
index 90584dd..e671fa2 100644
--- a/build/COMP.mac
+++ b/build/COMP.mac
@@ -1 +1 @@
-gcc
+clang
diff --git a/build/LNKG.linux b/build/LNKG.linux
new file mode 100644
index 0000000..d37cc1c
--- /dev/null
+++ b/build/LNKG.linux
@@ -0,0 +1 @@
+dyn
diff --git a/build/LNKG.mac b/build/LNKG.mac
new file mode 100644
index 0000000..fa47d9e
--- /dev/null
+++ b/build/LNKG.mac
@@ -0,0 +1 @@
+stat
diff --git a/build/LNKG.win b/build/LNKG.win
new file mode 100644
index 0000000..fa47d9e
--- /dev/null
+++ b/build/LNKG.win
@@ -0,0 +1 @@
+stat
diff --git a/build/Makefile.clang b/build/Makefile.clang
new file mode 100644
index 0000000..51d6c8a
--- /dev/null
+++ b/build/Makefile.clang
@@ -0,0 +1,80 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# compilers
+CC = @ $(TOP)/build/cc.sh $(OS) 'clang -c' \
+ $(CHECKSUM) --objx $(OBJX) --cflags "$(CFLAGS)" -MD
+CP = @ $(TOP)/build/cc.sh $(OS) 'clang -xc++ -c' \
+ $(CHECKSUM) --objx $(OBJX) --cflags "$(CPFLAGS)" -MD
+
+# C preprocessor
+PP = gcc -E $(CFLAGS)
+
+# linkers
+LD = @ $(TOP)/build/ld.sh $(OS) $(ARCH) gcc \
+ --build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+ $(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+ -MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
+
+LP = @ $(TOP)/build/ld.sh $(OS) $(ARCH) g++ \
+ --build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+ $(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+ -MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
+
+# tool options
+WARN = -Wall -Wno-variadic-macros -Wno-long-long # -Wconversion
+ifeq (linux,$(OS))
+ NO_ARRAY_BOUNDS_WARNING = -Wno-array-bounds
+endif
+
+ifeq (64,$(BITS))
+ CARCH = -m64
+else
+ CARCH = -m32
+endif
+
+ifeq (prof, $(BUILD))
+ PROF = -pg
+endif
+
+ifeq (dbg, $(BUILD))
+ DBG = -g
+ OPT = $(WARN)
+ NOPT = $(WARN)
+ # GCC seems unable to use c99 without ansi, which
+ # basically clobbers features back to c89. the options
+ # must be specified in the order shown.
+ PED = -std=c99 -ansi -pedantic # -fdiagnostics-show-option
+else
+
+ifeq (x86_64, $(ARCH))
+ OPT = -O3 -Wall -Wno-variadic-macros -fno-strict-aliasing
+else
+ OPT = -O3 -Wno-variadic-macros -fno-strict-aliasing
+endif
+endif
+
+# clang is designed to be a GCC substitute
+COMP_DAD = gcc
diff --git a/build/Makefile.env b/build/Makefile.env
index 3bef237..4c32b99 100644
--- a/build/Makefile.env
+++ b/build/Makefile.env
@@ -37,8 +37,9 @@ LIBEXT = $(LIBX) $(SHLX)
# normally build static intermediate libs
ILIBEXT = $(LIBX)
-# only build dynamic library modules
-MODEXT = $(SHLX)
+# would normally only build dynamic library modules,
+# but some tools are expecting to be able to static link
+MODEXT = $(LIBX) $(SHLX)
# determine BUILD
ifeq (,$(BUILD))
@@ -59,27 +60,24 @@ ifeq (rel,$(BUILD))
endif
ifeq (prof,$(BUILD))
DEBUG := -DNDEBUG -D_PROFILING
- STATIC = --static
-endif
-ifeq (pub,$(BUILD))
- DEBUG := -DNDEBUG
- BUILDTYPE = rel
- STATIC = --static
- STATICSYSLIBS := --static-system-libs
endif
-
# allow for an all-static build
-ifndef STATIC
- STATIC = $(shell test -f $(TOP)/build/STATIC && echo "--static")
-endif
-ifeq (--static,$(STATIC))
+ifeq (stat,$(LNKG))
+ STATIC = --static
LINKAGE := -D_STATIC
LIBEXT = $(LIBX)
ILIBEXT = $(LIBX)
MODEXT = $(LIBX)
+ STAT_OR_DYN = static
+ STATICSYSLIBS := --static-system-libs
+
+else
+ STAT_OR_DYN = dynamic
endif
+LOCAL_OR_REMOTE = local
+
# drop all suffix rules
.SUFFIXES:
@@ -89,9 +87,22 @@ include $(TOP)/build/Makefile.$(OS)
include $(TOP)/build/Makefile.$(COMP)
include $(TOP)/build/Makefile.rules
+# external schema modules
+EXT_SCHEMA_MODULES = axf sraxf wgsxf vxf
+READONLY_SCHEMA_LIBS = $(addprefix -d,$(EXT_SCHEMA_MODULES))
+UPDATE_SCHEMA_LIBS = $(addprefix -dw,$(EXT_SCHEMA_MODULES))
+ALWAYS_STATIC_SCHEMA_LIBS = $(addprefix -s,$(EXT_SCHEMA_MODULES))
+
# full directory paths
-TARGDIR = $(OUTDIR)/$(OSFLAV)/$(BUILD)/$(COMP)/$(ARCH)
+OLD_TARGDIR = $(OUTDIR)/$(OSFLAV)/$(BUILD)/$(TOOLSET)/$(ARCH)
+TARGDIR = $(OUTDIR)/$(OSFLAV)/$(TOOLSET)/$(LNKG)/$(ARCH)/$(BUILD)
BINDIR = $(TARGDIR)/bin
+ifeq (win,$(OS))
+ # on Windows, place test executables next to .dlls
+ TEST_BINDIR = $(BINDIR)
+else
+ TEST_BINDIR = $(TARGDIR)/test-bin
+endif
ILIBDIR = $(TARGDIR)/ilib
LIBDIR = $(TARGDIR)/lib
MODDIR = $(TARGDIR)/mod
@@ -116,22 +127,23 @@ endif
endif
# make reissue command
-MAKE_CMD = $(MAKE) BUILD=$(BUILD) COMP=$(COMP) TOP=$(TOP) \
- SRCDIR=$(SRCDIR) OUTDIR=$(OUTDIR) -C $(OBJDIR) -f $(SRCDIR)/Makefile
+MAKE_CMD = $(MAKE) BUILD=$(BUILD) TOOLSET=$(TOOLSET) COMP=$(COMP) LNKG=$(LNKG) \
+ TOP=$(TOP) SRCDIR=$(SRCDIR) OUTDIR=$(OUTDIR) -C $(OBJDIR) -f $(SRCDIR)/Makefile
# directory and link creation
-SUBDIRS = bin ilib lib mod wmod
+SUBDIRS = bin test-bin ilib lib mod wmod
OUTDIRS = schema
# clean rules
stdclean:
- @ rm -rf $(OBJDIR)
- @ rm -f $(addsuffix .vers.h,$(ALL_TOOLS) $(ALL_LIBS)) \
+ @ -rm -rf $(OBJDIR)
+ @ rm -rf $(addsuffix .vers.h,$(ALL_TOOLS) $(ALL_LIBS)) \
$(addsuffix .*,$(addprefix $(ILIBDIR)/,$(ALL_LIBS))) \
$(addsuffix .*,$(addprefix $(LIBDIR)/,$(ALL_LIBS))) \
$(addsuffix .*,$(addprefix $(MODDIR)/,$(ALL_LIBS))) \
$(addsuffix .*,$(addprefix $(WMODDIR)/,$(ALL_LIBS))) \
- $(addsuffix *,$(addprefix $(BINDIR)/,$(ALL_TOOLS) $(ALL_LIBS)))
+ $(addsuffix *,$(addprefix $(BINDIR)/,$(ALL_TOOLS) $(ALL_LIBS))) \
+ $(addsuffix *,$(addprefix $(TEST_BINDIR)/,$(TEST_TOOLS)))
# removing symbolic links that point to specific builds
removelinks:
@@ -143,6 +155,10 @@ removelinks:
makedirs:
@ mkdir -p $(addprefix $(TARGDIR)/,$(SUBDIRS) obj/$(MODULE)) $(NCBIDIR)
+# build version include files
+vers-includes: makedirs
+ @ $(MAKE_CMD) -s $(TARGDIR)/$@
+
ifeq (win,$(OS))
# Windows doesn't really support symbolic links
@@ -155,66 +171,79 @@ LNDIRS = $(addprefix ln_,$(SUBDIRS))
$(LNDIRS):
@ ln -s $(TARGDIR)/$(subst ln_,,$@) $(OUTDIR)/$(subst ln_,,$@)$(BITS)
+ifdef NOREBUILD_LINKS
+rebuild-dirlinks:
+ @ true
+else
rebuild-dirlinks: removelinks makedirs $(LNDIRS)
@ ln -s $(TOP)/interfaces $(OUTDIR)/schema
+endif
endif
-.PHONY: stdclean removelinks makedirs rebuild-dirlinks
+.PHONY: stdclean removelinks makedirs vers-includes rebuild-dirlinks
# configuration targets
out:
- echo $(OUTDIR) > $(TOP)/build/OUTDIR.$(OS)
+ @ echo $(OUTDIR) > $(TOP)/build/OUTDIR.$(BUILD_OS)
@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
CC:
@ echo cc > $(TOP)/build/COMP.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
GCC:
@ echo gcc > $(TOP)/build/COMP.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
ICC:
@ echo icc > $(TOP)/build/COMP.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
VC++:
@ echo vc++ > $(TOP)/build/COMP.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+
+CLANG:
+ @ echo clang > $(TOP)/build/COMP.$(OS)
+
+static:
+ @ echo stat > $(TOP)/build/LNKG.$(OS)
+
+dynamic:
+ @ echo dyn > $(TOP)/build/LNKG.$(OS)
debug:
@ echo dbg > $(TOP)/build/BUILD.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
-profile:
+profile: static
@ echo prof > $(TOP)/build/BUILD.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
release:
@ echo rel > $(TOP)/build/BUILD.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
-scm:
- @ echo scm > $(TOP)/build/BUILD.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
-
-pubtools:
- @ echo pub > $(TOP)/build/BUILD.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+pubtools: release static
bindir:
@ echo "$(BINDIR)"
-purify:
- @ echo pur > $(TOP)/build/BUILD.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+targdir:
+ @ echo "$(TARGDIR)"
-purecov:
- @ echo pcov > $(TOP)/build/BUILD.$(OS)
- @ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+osdir:
+ @ echo "$(OUTDIR)/$(OSFLAV)"
+
+compilers:
+ @ echo "$(COMPILERS)"
+
+architectures:
+ @ echo "$(ARCHITECTURES)"
-.PHONY: out CC GCC ICC debug profile release scm purify purecov
+architecture:
+ @ echo "$(ARCH)"
+
+config:
+ @ echo " current build is $(BUILD_OS) $(STAT_OR_DYN) $(BUILD) $(ARCH) build using $(TOOLSET) tools"
+ @ echo " output target directory is '$(TARGDIR)'"
+ @ echo
+
+.PHONY: out CC GCC ICC debug profile release bindir report_config
# includes based upon build
ITF = $(TOP)/interfaces
@@ -264,7 +293,8 @@ INCDIRS = \
$(addprefix -I,$(SRCDIRS_OS)) \
$(addprefix -I,$(SRCDIR) $(ITF)) \
$(addprefix -I,$(INCDIRS_COMP)) \
- $(addprefix -I,$(INCDIRS_OS) $(XTINC))
+ $(addprefix -I,$(INCDIRS_OS) $(XTINC)) \
+ -I.
# defines that describe os & architecture
@@ -274,4 +304,20 @@ ARCHDEFS = -D_ARCH_BITS=$(BITS) -DLIBPREFIX=$(LPFX) -DSHLIBEXT=$(DLLX)
# default tool parameters
CFLAGS = $(DEBUG) $(DBG) $(CARCH) $(PROF) $(PED) $(LINKAGE) $(DEFINES) $(ARCHDEFS) $(INCDIRS)
CPFLAGS = $(DEBUG) $(DBG) $(CARCH) $(PROF) $(LINKAGE) $(DEFINES) $(ARCHDEFS) $(INCDIRS)
-LDFLAGS = $(DBG) $(PROF)
+LDFLAGS = $(DBG) $(PROF) $(CARCH)
+
+#-------------------------------------------------------------------------------
+# runtests
+#
+ifeq ($(RUNTESTS_OVERRIDE),)
+runtests: std $(TEST_TOOLS)
+ @ echo "$0 $*"; export LD_LIBRARY_PATH=$(LIBDIR);\
+ for i in $(TEST_TOOLS);\
+ do\
+ echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++;\
+ echo Run $(TEST_BINDIR)/$$i;eval $(RUN_REMOTELY) $(TEST_BINDIR)/$$i;r=$$?; \
+ if [ "$$r" != "0" ] ; then exit $$r; fi; \
+ done
+
+.PHONY: runtests
+endif
diff --git a/build/Makefile.gcc b/build/Makefile.gcc
index 59a169c..271dff3 100644
--- a/build/Makefile.gcc
+++ b/build/Makefile.gcc
@@ -44,7 +44,14 @@ LP = @ $(TOP)/build/ld.sh $(OS) $(ARCH) g++ \
-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
# tool options
-WARN = -Wall # -Wconversion
+WARN = -Wall -Wno-long-long
+ifneq (sun,$(OS))
+ WARN += -Wno-variadic-macros
+endif
+
+ifeq (linux,$(OS))
+ NO_ARRAY_BOUNDS_WARNING = -Wno-array-bounds
+endif
ifeq (64,$(BITS))
CARCH = -m64
@@ -60,12 +67,15 @@ ifeq (dbg, $(BUILD))
DBG = -g
OPT = $(WARN)
NOPT = $(WARN)
- PED = -std=c99 -ansi -pedantic
+ # GCC seems unable to use c99 without ansi, which
+ # basically clobbers features back to c89. the options
+ # must be specified in the order shown.
+ PED = -std=c99 -ansi -pedantic # -fdiagnostics-show-option
else
ifeq (x86_64, $(ARCH))
- OPT = -O3 -fno-strict-aliasing
+ OPT = -O3 -Wall -Wno-variadic-macros -fno-strict-aliasing
else
- OPT = -O3 -fno-strict-aliasing
+ OPT = -O3 -Wno-variadic-macros -fno-strict-aliasing
endif
endif
diff --git a/build/Makefile.linux b/build/Makefile.linux
index e6468de..a5fcd45 100644
--- a/build/Makefile.linux
+++ b/build/Makefile.linux
@@ -73,3 +73,10 @@ ifdef NCBI
endif
DFLT_LIBXML_INCLUDES = $(NCBI)/libxml/include/libxml2
endif
+
+# flex+bison
+LEX = @ true
+YACC = @ true
+
+# build matrix
+COMPILERS = GCC # ICC
diff --git a/build/Makefile.mac b/build/Makefile.mac
index a17f50a..74e5160 100644
--- a/build/Makefile.mac
+++ b/build/Makefile.mac
@@ -68,3 +68,10 @@ OS_DAD = bsd
OS_GDAD = unix
LIBXML_LPATH = /usr/lib
+
+# flex+bison: on Mac, use source-controlled generated .c/.h files
+YACC = @ true
+LEX = @ true
+
+# build matrix
+COMPILERS = GCC CLANG
diff --git a/build/Makefile.rules b/build/Makefile.rules
index 699e0e5..bb18f20 100644
--- a/build/Makefile.rules
+++ b/build/Makefile.rules
@@ -99,11 +99,6 @@
$(CP) -S -o $@ -fPIC $(NOPT) $<
-######################################################################
-## TBD: *.vers.h will no longer be generated or used for executables #
-# instead, we will update the linker to produce a *.vers.o #
-# with a stub for KAppVersion to return a constant #
-######################################################################
# version include generation
%.vers.h: %.vers
$(TOP)/build/make-vers-inc.sh $^ > $@
diff --git a/build/Makefile.shell b/build/Makefile.shell
index 70844af..4aaeb86 100644
--- a/build/Makefile.shell
+++ b/build/Makefile.shell
@@ -27,61 +27,77 @@
UNAME = $(shell uname -s)
ifeq (Darwin, $(UNAME))
- OS = mac
+ HOST_OS = mac
endif
ifeq (Linux, $(UNAME))
- OS = linux
+ HOST_OS = linux
endif
ifeq (SunOS, $(UNAME))
- OS = sun
+ HOST_OS = sun
+ ARCHITECTURES = x86_64 i386
endif
ifeq (xCYGWIN, $(findstring xCYGWIN,x$(UNAME)))
- OS = win
+ HOST_OS = win
endif
ifeq (xMINGW, $(findstring xMINGW,x$(UNAME)))
- OS = win
+ HOST_OS = win
endif
-# OS flavor is normally OS
-OSFLAV = $(OS)
+# assume build OS is the same as host OS
+OS = $(HOST_OS)
+BUILD_OS = $(OS)
# determine ARCH
-ifeq (mac,$(OS))
- ARCH = $(shell $(TOP)/build/mac.arch.sh)
+ARCHITECTURES = default
+ifeq (mac,$(HOST_OS))
+ HOST_ARCH = $(shell $(TOP)/build/mac.arch.sh)
else
MARCH = $(shell uname -m)
ifeq (i386, $(MARCH))
- ARCH = i386
+ HOST_ARCH = i386
endif
ifeq (i486, $(MARCH))
- ARCH = i386
+ HOST_ARCH = i386
endif
ifeq (i586, $(MARCH))
- ARCH = i386
+ HOST_ARCH = i386
endif
ifeq (i686, $(MARCH))
- ARCH = i386
+ ifeq (WOW64x, $(findstring WOW64x,$(UNAME)x))
+ # 64-bit capable Cygwin. Analyze the version of cl to set the corect architecture
+ CL = $(shell cl.exe 2>&1 >/dev/null)
+ ifeq (for x64, $(findstring for x64, $(CL)))
+ HOST_ARCH = x86_64
+ else
+ HOST_ARCH = i386
+ endif
+ else
+ HOST_ARCH = i386
+ endif
endif
ifeq (x86_64, $(MARCH))
- ARCH = x86_64
+ HOST_ARCH = x86_64
endif
- ifeq (sun4u,$(MARCH))
- ARCH = sparc32
+ ifeq (i86pc, $(MARCH))
+ HOST_ARCH = x86_64
+ ARCHITECTURES = x86_64 i386
+ endif
+ ifeq (sun4v,$(MARCH))
+ HOST_ARCH = sparc64
+ ARCHITECTURES = sparc64 sparc32
endif
endif
-# determine BITS
-ifeq (x86_64, $(ARCH))
- BITS = 64
-else
- BITS = 32
-endif
+ARCH = $(HOST_ARCH)
+REMOTE_ARCH = $(ARCH)
-# first pass through defines SRCDIR
-ifndef SRCDIR
+# pick up dependencies from object directory
+ifdef SRCDIR
+ include $(wildcard *.d)
+else
-# set SRCDIR from MODULE
+# determine SRCDIR
ifdef MODULE
SRCDIR=$(TOP)/$(MODULE)
else
@@ -90,7 +106,7 @@ endif
# set OUTDIR
ifndef OUTDIR
- OUTDIR = $(shell test -f $(TOP)/build/OUTDIR.$(OS) && cat $(TOP)/build/OUTDIR.$(OS) || echo $(TOP))
+ OUTDIR = $(shell test -f $(TOP)/build/OUTDIR && mv $(TOP)/build/OUTDIR $(TOP)/build/OUTDIR.$(BUILD_OS); test -f $(TOP)/build/OUTDIR.$(BUILD_OS) && cat $(TOP)/build/OUTDIR.$(BUILD_OS) || echo $(TOP))
ifeq (,$(OUTDIR))
OUTDIR = $(TOP)
endif
@@ -99,8 +115,36 @@ ifndef OUTDIR
endif
endif
-# set COMP and BUILD
-COMP = $(shell test -f $(TOP)/build/COMP.$(OS) && cat $(TOP)/build/COMP.$(OS) || echo gcc)
-BUILD = $(shell test -f $(TOP)/build/BUILD.$(OS) && cat $(TOP)/build/BUILD.$(OS) || echo dbg)
+# set COMP, LNKG and BUILD
+COMP = $(shell test -f $(TOP)/build/COMP && mv $(TOP)/build/COMP $(TOP)/build/COMP.$(OS); test -f $(TOP)/build/COMP.$(OS) && cat $(TOP)/build/COMP.$(OS) || echo gcc)
+LNKG = $(shell test -f $(TOP)/build/STATIC && mv $(TOP)/build/STATIC $(TOP)/build/LNKG.$(OS) && echo stat > $(TOP)/build/LNKG.$(OS); test -f $(TOP)/build/LNKG.$(OS) && cat $(TOP)/build/LNKG.$(OS) || echo stat)
+BUILD = $(shell test -f $(TOP)/build/BUILD && mv $(TOP)/build/BUILD $(TOP)/build/BUILD.$(OS); test -f $(TOP)/build/BUILD.$(OS) && cat $(TOP)/build/BUILD.$(OS) || echo dbg)
+TOOLSET := $(COMP)
+
+ifdef USE_GCC_IF_ICC
+ifeq (icc,$(COMP))
+COMP = gcc
+endif
+ifeq (clang,$(COMP))
+COMP = gcc
+endif
+endif
+
+endif
+# OS flavor is normally OS
+OSFLAV = $(OS)
+
+# determine BITS
+ifeq (x86_64, $(ARCH))
+ BITS = 64
+endif
+ifeq (sparc64, $(ARCH))
+ BITS = 64
+endif
+ifeq (i386, $(ARCH))
+ BITS = 32
+endif
+ifeq (sparc32, $(ARCH))
+ BITS = 32
endif
diff --git a/build/Makefile.vc++ b/build/Makefile.vc++
index 3835d7d..e2c3815 100644
--- a/build/Makefile.vc++
+++ b/build/Makefile.vc++
@@ -22,31 +22,33 @@
#
# ===========================================================================
-
+# RFLAGS have to go before any other flags since they can affect their handling
# compilers
-CC = @ $(TOP)/build/win-cc.sh win "cl /c -D_WIN32_WINNT=0x0502" \
- $(CHECKSUM) --objx $(OBJX) $(CFLAGS) -MD
-CP = @ $(TOP)/build/win-cc.sh win "cl /c" \
- $(CHECKSUM) --objx $(OBJX) $(CPFLAGS) -MD
+CC = @ $(TOP)/build/win-cc.sh $(BUILD_OS) "cl /c /D_WIN32_WINNT=0x0502" \
+ $(CHECKSUM) --objx $(OBJX) $(RFLAGS) $(CFLAGS) -MD
+
+CP = @ $(TOP)/build/win-cc.sh $(BUILD_OS) "cl /c" \
+ $(CHECKSUM) --objx $(OBJX) $(RFLAGS) $(CPFLAGS) -MD -EHsc
+
# C preprocessor
PP = gcc -E $(CFLAGS)
# linkers
-LD = @ $(TOP)/build/ld.sh win $(ARCH) link \
- --build $(BUILD) $(LDFLAGS) $(STATIC) $(CHECKSUM) \
+LD = @ $(TOP)/build/ld.sh $(BUILD_OS) $(ARCH) link \
+ --build $(BUILD) $(RFLAGS) $(LDFLAGS) $(STATIC) $(CHECKSUM) \
--objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
-LP = @ $(TOP)/build/ld.sh win $(ARCH) link \
- --build $(BUILD) $(LDFLAGS) $(STATIC) $(CHECKSUM) \
+LP = @ $(TOP)/build/ld.sh $(BUILD_OS) $(ARCH) link \
+ --build $(BUILD) $(RFLAGS) $(LDFLAGS) $(STATIC) $(CHECKSUM) \
--objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
# tool options
CDECL = -Gd
STDCALL = -Gz
-CALLCONV = $(STDCALL)
+CALLCONV = $(CDECL)
STRING_POOLING = -GF
OPT := $(STRING_POOLING) $(CALLCONV) -nologo
NOPT := -Od $(OPT)
diff --git a/build/Makefile.win b/build/Makefile.win
index 5238a36..5644350 100644
--- a/build/Makefile.win
+++ b/build/Makefile.win
@@ -57,3 +57,10 @@ DLLX = dll
# compilation defines
DEFINES := -DWINDOWS
+
+# flex+bison: on Windows, use source-controlled generated .c/.h files
+YACC = @ true
+LEX = @ true
+
+# build matrix
+COMPILERS = VC++
diff --git a/build/ld.linux.cmn.sh b/build/ld.linux.cmn.sh
index 8779412..f896821 100755
--- a/build/ld.linux.cmn.sh
+++ b/build/ld.linux.cmn.sh
@@ -63,7 +63,11 @@ MODE=$(expr $MODE / 2)
DYLD=$(expr $MODE % 2)
MODE=$(expr $MODE / 2)
KPROC=$(expr $MODE % 2)
-THREADS=$(expr $MODE / 2)
+MODE=$(expr $MODE / 2)
+THREADS=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+KRYPTO=$(expr $MODE % 2)
+CRYPTO=$(expr $MODE / 2)
# decode SCMFLAGS
CHECKSUM=$(expr $SCMFLAGS % 2)
diff --git a/build/ld.linux.dlib.sh b/build/ld.linux.dlib.sh
index d086ddd..308f4d3 100755
--- a/build/ld.linux.dlib.sh
+++ b/build/ld.linux.dlib.sh
@@ -82,6 +82,10 @@ then
DIRS="${DIRS#:}"
done
+ # update LD_LIBRARY_PATH
+ unset LD_LIBRARY_PATH
+ export LD_LIBRARY_PATH="$LDIRS:$XDIRS"
+
# tack on libraries, finding as we go
for LIB in $LIBS
do
diff --git a/build/ld.linux.exe.sh b/build/ld.linux.exe.sh
index c1d6231..17ddf5c 100755
--- a/build/ld.linux.exe.sh
+++ b/build/ld.linux.exe.sh
@@ -66,7 +66,8 @@ CMD="$EXE_CMD $LDFLAGS"
# the main application will substitute for name lookup
if [ $STATIC -eq 1 ] && [ $DYLD -eq 1 ]
then
- CMD="$CMD $LD_EXPORT_GLOBAL $LD_MULTIPLE_DEFS"
+# CMD="$CMD $LD_EXPORT_GLOBAL $LD_MULTIPLE_DEFS"
+ CMD="$CMD $LD_EXPORT_GLOBAL"
fi
# tack on object files
@@ -89,6 +90,10 @@ then
DIRS="${DIRS#:}"
done
+ # update LD_LIBRARY_PATH
+ unset LD_LIBRARY_PATH
+ export LD_LIBRARY_PATH="$LDIRS:$XDIRS"
+
# tack on libraries, finding as we go
for LIB in $LIBS
do
diff --git a/build/ld.linux.ln.sh b/build/ld.linux.ln.sh
index c248afa..ee5bd9d 100755
--- a/build/ld.linux.ln.sh
+++ b/build/ld.linux.ln.sh
@@ -40,7 +40,12 @@ TARG=$(basename "$TARG")
# put extension back onto name
NAME="$NAME$DBGAP"
-[ "$EXT" != "" ] && NAME="$NAME.$EXT"
+STATIC_NAME="$NAME-static"
+if [ "$EXT" != "" ]
+then
+ NAME="$NAME.$EXT"
+ STATIC_NAME="$STATIC_NAME.$EXT"
+fi
# break out version
set-vers ()
@@ -73,6 +78,12 @@ then
create-link "$NAME.$MAJ.$MIN.$REL" "$NAME.$MAJ"
create-link "$NAME.$MAJ" "$NAME"
+ # for static libraries, create special link
+ if [ "$TYPE" = "slib" ]
+ then
+ create-link "$NAME" "$STATIC_NAME"
+ fi
+
# for name with major version in it
elif [ "$TARG" = "$NAME.$MAJ" ]
then
diff --git a/build/ld.linux.slib.sh b/build/ld.linux.slib.sh
index 1a420b8..4eb0a8e 100755
--- a/build/ld.linux.slib.sh
+++ b/build/ld.linux.slib.sh
@@ -99,10 +99,10 @@ then
# look at linkage
case "$LIB" in
- -l*|-s*)
+ -s*)
# force static load
- LIBPATH="$(find-lib $LIBNAME.a $LDIRS)"
+ find-lib $LIBNAME.a $LDIRS
if [ "$LIBPATH" != "" ]
then
diff --git a/build/ld.mac.cmn.sh b/build/ld.mac.cmn.sh
index 066db13..ab1d23c 100755
--- a/build/ld.mac.cmn.sh
+++ b/build/ld.mac.cmn.sh
@@ -46,7 +46,7 @@ DEPFILE="$3"
shift 3
MODE="$1"
-CHECKSUM="$2"
+SCMFLAGS="$2"
LDFLAGS="$3"
shift 3
@@ -63,7 +63,15 @@ MODE=$(expr $MODE / 2)
DYLD=$(expr $MODE % 2)
MODE=$(expr $MODE / 2)
KPROC=$(expr $MODE % 2)
-THREADS=$(expr $MODE / 2)
+MODE=$(expr $MODE / 2)
+THREADS=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+KRYPTO=$(expr $MODE % 2)
+CRYPTO=$(expr $MODE / 2)
+
+# decode SCMFLAGS
+CHECKSUM=$(expr $SCMFLAGS % 2)
+STATICSYSLIBS=$(expr $SCMFLAGS / 2)
# return parameter for find-lib
LIBPATH=''
diff --git a/build/ld.mac.dlib.sh b/build/ld.mac.dlib.sh
index ff54ec5..6f28f6b 100755
--- a/build/ld.mac.dlib.sh
+++ b/build/ld.mac.dlib.sh
@@ -86,13 +86,21 @@ then
# look at linkage
case "$LIB" in
+ -ldl|-ddl)
+
+ # always load libdl as shared library
+ load-ref-symbols
+ load-dynamic
+ CMD="$CMD -ldl"
+ ;;
+
-l*)
# normal or dynamic linkage
FOUND=0
if [ $STATIC -eq 0 ]
then
- find-lib $LIBNAME.so $LDIRS
+ find-lib $LIBNAME.dylib $LDIRS
if [ "$LIBPATH" != "" ]
then
@@ -110,6 +118,26 @@ then
# try static only
if [ $FOUND -eq 0 ]
then
+ find-lib $LIBNAME-static.a $LDIRS
+ if [ "$LIBPATH" != "" ]
+ then
+
+ # found it
+ FOUND=1
+
+ # add it to dependencies
+ DEPS="$DEPS $LIBPATH"
+
+ # load static
+ load-static
+ load-all-symbols
+ CMD="$CMD -l$LIBNAME-static"
+
+ fi
+ fi
+
+ if [ $FOUND -eq 0 ]
+ then
find-lib $LIBNAME.a $LDIRS
if [ "$LIBPATH" != "" ]
then
@@ -131,9 +159,29 @@ then
# not found within our directories
if [ $FOUND -eq 0 ]
then
- # set load to normal
- load-ref-symbols
- load-dynamic
+
+ if [ $STATICSYSLIBS -eq 1 ]
+ then
+ case "$LIBNAME" in
+ z|bz2)
+ # set load to static
+ load-static
+ load-all-symbols
+ ;;
+
+ *)
+ # set load to dynamic
+ load-ref-symbols
+ load-dynamic
+ ;;
+
+ esac
+ else
+ # set load to normal
+ load-ref-symbols
+ load-dynamic
+ fi
+
CMD="$CMD -l$LIBNAME"
fi
;;
@@ -142,7 +190,7 @@ then
# force static load
FOUND=0
- find-lib $LIBNAME.a $LDIRS
+ find-lib $LIBNAME-static.a $LDIRS
if [ "$LIBPATH" != "" ]
then
@@ -155,16 +203,56 @@ then
# load static
load-static
load-all-symbols
- CMD="$CMD -l$LIBNAME"
+ CMD="$CMD -l$LIBNAME-static"
fi
+ if [ $FOUND -eq 0 ]
+ then
+ find-lib $LIBNAME.a $LDIRS
+ if [ "$LIBPATH" != "" ]
+ then
+
+ # found it
+ FOUND=1
+
+ # add it to dependencies
+ DEPS="$DEPS $LIBPATH"
+
+ # load static
+ load-static
+ load-all-symbols
+ CMD="$CMD -l$LIBNAME"
+
+ fi
+ fi
+
# not found within our directories
if [ $FOUND -eq 0 ]
then
- # set load to static
- load-static
- load-all-symbols
+
+ if [ $STATIC -eq 1 ] || [ $STATICSYSLIBS -eq 1 ]
+ then
+ # set load to static
+ load-static
+ load-all-symbols
+ else
+
+ case "$LIBNAME" in
+ z|bz2)
+ # set load to dynamic
+ load-ref-symbols
+ load-dynamic
+ ;;
+
+ *)
+ # set load to static
+ load-static
+ load-all-symbols
+ ;;
+ esac
+ fi
+
CMD="$CMD -l$LIBNAME"
fi
;;
@@ -175,7 +263,7 @@ then
FOUND=0
if [ $STATIC -eq 0 ]
then
- find-lib $LIBNAME.so $LDIRS
+ find-lib $LIBNAME.dylib $LDIRS
if [ "$LIBPATH" != "" ]
then
@@ -209,8 +297,14 @@ fi
load-ref-symbols
load-dynamic
+# add in pthreads
+if [ $THREADS -ne 0 ]
+then
+ CMD="$CMD -lpthread"
+fi
+
# produce shared library
-echo $CMD
+echo "$CMD"
$CMD || exit $?
# produce dependencies
diff --git a/build/ld.mac.exe.sh b/build/ld.mac.exe.sh
index 1701cc2..9ac44ef 100755
--- a/build/ld.mac.exe.sh
+++ b/build/ld.mac.exe.sh
@@ -94,6 +94,14 @@ then
# look at linkage
case "$LIB" in
+ -ldl|-ddl)
+
+ # always load libdl as shared library
+ load-ref-symbols
+ load-dynamic
+ CMD="$CMD -ldl"
+ ;;
+
-l*)
# normal or dynamic linkage
@@ -117,6 +125,26 @@ then
# try static only
if [ $FOUND -eq 0 ]
then
+ find-lib $LIBNAME-static.a $LDIRS
+ if [ "$LIBPATH" != "" ]
+ then
+
+ # found it
+ FOUND=1
+
+ # add it to dependencies
+ DEPS="$DEPS $LIBPATH"
+
+ # load static
+ load-static
+ [ $STATIC -eq 1 ] && load-all-symbols
+ CMD="$CMD -l$LIBNAME-static"
+
+ fi
+ fi
+
+ if [ $FOUND -eq 0 ]
+ then
find-lib $LIBNAME.a $LDIRS
if [ "$LIBPATH" != "" ]
then
@@ -128,7 +156,9 @@ then
DEPS="$DEPS $LIBPATH"
# load static
- CMD="$CMD $LIBPATH"
+ load-static
+ [ $STATIC -eq 1 ] && load-all-symbols
+ CMD="$CMD -l$LIBNAME"
fi
fi
@@ -136,8 +166,28 @@ then
# not found within our directories
if [ $FOUND -eq 0 ]
then
+
+ # do not need to load all symbols for external libs
[ $STATIC -eq 1 ] && load-ref-symbols
- load-dynamic
+
+ if [ $STATICSYSLIBS -eq 1 ]
+ then
+ case "$LIBNAME" in
+ z|bz2)
+ # set load to static
+ load-static
+ ;;
+
+ *)
+ # set load to dynamic
+ load-dynamic
+ ;;
+
+ esac
+ else
+ # set load to normal
+ load-dynamic
+ fi
CMD="$CMD -l$LIBNAME"
fi
@@ -147,7 +197,7 @@ then
# force static load
FOUND=0
- find-lib $LIBNAME.a $LDIRS
+ find-lib $LIBNAME-static.a $LDIRS
if [ "$LIBPATH" != "" ]
then
@@ -157,17 +207,61 @@ then
# add it to dependencies
DEPS="$DEPS $LIBPATH"
- # load library directly
- CMD="$CMD $LIBPATH"
+ # load static
+ load-static
+ [ $STATIC -eq 1 ] && load-all-symbols
+ CMD="$CMD -l$LIBNAME-static"
fi
+ if [ $FOUND -eq 0 ]
+ then
+ find-lib $LIBNAME.a $LDIRS
+ if [ "$LIBPATH" != "" ]
+ then
+
+ # found it
+ FOUND=1
+
+ # add it to dependencies
+ DEPS="$DEPS $LIBPATH"
+
+ # load static
+ load-static
+ [ $STATIC -eq 1 ] && load-all-symbols
+ CMD="$CMD -l$LIBNAME"
+
+ fi
+ fi
+
# not found within our directories
if [ $FOUND -eq 0 ]
then
- # set load to static
- load-static
- [ $STATIC -eq 1 ] && load-all-symbols
+
+ # do not need to load all symbols for external libs
+ [ $STATIC -eq 1 ] && load-ref-symbols
+
+ if [ $STATIC -eq 1 ] || [ $STATICSYSLIBS -eq 1 ]
+ then
+
+ # set load to static
+ load-static
+
+ else
+
+ # special case for libs we have in "ext"
+ # that are sometimes requested as static
+ case "$LIBNAME" in
+ z|bz2)
+ # set load to dynamic
+ load-dynamic
+ ;;
+ *)
+ load-static
+ ;;
+ esac
+ fi
+
CMD="$CMD -l$LIBNAME"
fi
;;
@@ -191,7 +285,7 @@ then
load-static
load-all-symbols
- CMD="$CMD $LIBPATH"
+ CMD="$CMD -l$LIBNAME"
fi
@@ -216,6 +310,12 @@ fi
load-ref-symbols
load-dynamic
+# add in pthreads
+if [ $THREADS -ne 0 ]
+then
+ CMD="$CMD -lpthread"
+fi
+
# produce shared library
echo $CMD
$CMD || exit $?
diff --git a/build/ld.mac.ln.sh b/build/ld.mac.ln.sh
index efc834a..55216fd 100755
--- a/build/ld.mac.ln.sh
+++ b/build/ld.mac.ln.sh
@@ -40,6 +40,7 @@ TARG=$(basename "$TARG")
# put extension back onto name, unless it's "dylib"
NAME="$NAME$DBGAP"
+STATIC_LIB_NAME="$NAME-static.a"
[ "$EXT" != "" ] && [ "$EXT" != "dylib" ] && NAME="$NAME.$EXT"
# break out version
@@ -86,6 +87,7 @@ then
then
create-link "$NAME_MMR" "$NAME_M"
create-link "$NAME_M" "$NAME"
+ [ "$EXT" = "a" ] && create-link "$NAME" "$STATIC_LIB_NAME"
# for name with major version in it
elif [ "$TARG" = "$NAME_M" ]
diff --git a/build/ld.mac.slib.sh b/build/ld.mac.slib.sh
index 07faab0..41a3afe 100755
--- a/build/ld.mac.slib.sh
+++ b/build/ld.mac.slib.sh
@@ -47,7 +47,7 @@ convert-static ()
{
# list members
local path="$1"
- local mbrs="$(ar -t $path)"
+ local mbrs="$(ar -t $path | grep -v '__.SYMDEF SORTED')"
# unpack archive into temporary directory
mkdir -p ld-tmp
@@ -95,10 +95,10 @@ then
# look at linkage
case "$LIB" in
- -l*|-s*)
+ -s*)
# force static load
- LIBPATH="$(find-lib $LIBNAME.a $LDIRS)"
+ find-lib $LIBNAME.a $LDIRS
if [ "$LIBPATH" != "" ]
then
diff --git a/build/ld.sh b/build/ld.sh
index 0976636..1f2b86b 100755
--- a/build/ld.sh
+++ b/build/ld.sh
@@ -54,8 +54,18 @@ STATIC=0
DYLD=0
STATICSYSLIBS=0
CHECKSUM=0
-THREADS=0
KPROC=0
+THREADS=0
+HAVE_KSPROC=0
+NEED_KPROC=0
+HAVE_GZIP=0
+NEED_GZIP=0
+HAVE_BZIP=0
+NEED_BZIP=0
+HAVE_SRAPATH=0
+NEED_SRAPATH=0
+HAVE_DL=0
+NEED_DL=0
unset BUILD
unset LDIRS
unset XDIRS
@@ -69,6 +79,12 @@ unset OBJS
unset LIBS
unset DEPFILE
+# paths for translating local to remote
+unset RHOME
+unset LHOME
+unset RHOST
+unset PROXY_TOOL
+
while [ $# -ne 0 ]
do
@@ -120,6 +136,31 @@ do
BINDIR="$2"
shift
;;
+
+ --rhome)
+ RHOME="$2"
+ shift
+ ;;
+
+ --lhome)
+ LHOME="$2"
+ shift
+ ;;
+
+ --rhost)
+ RHOST="$2"
+ shift
+ ;;
+
+ --rport)
+ RPORT="$2"
+ shift
+ ;;
+
+ --proxy_tool)
+ PROXY_TOOL="$2"
+ shift
+ ;;
-MD)
DEPFILE=1
@@ -189,30 +230,121 @@ do
TARG="$ARG"
;;
- -lpthread|-spthread|-dpthread)
- THREADS=8
+ -lz|-sz|-dz)
+ LIBS="$LIBS $1"
+ HAVE_GZIP=1
+ ;;
+ -lbz2|-sbz2|-dbz2)
+ LIBS="$LIBS $1"
+ HAVE_BZIP=1
+ ;;
+ -ldl|-sdl|-ddl)
+ LIBS="$LIBS $1"
+ HAVE_DL=1
;;
- -lkproc)
+ -lsrapath|-ssrapath|-dsrapath)
LIBS="$LIBS $1"
- KPROC=4
+ HAVE_SRAPATH=1
+ ;;
+ -lsradb|-ssradb|-dsradb|-lwsradb|-swsradb)
+ LIBS="$LIBS $1"
+ NEED_DL=1
+ DYLD=2
+ if [ $STATIC -ne 0 ]
+ then
+ NEED_SRAPATH=1
+ fi
+ ;;
+
+ -lkrypto|-dkrypto)
+ LIBS="$LIBS $1"
+ if [ $STATIC -ne 0 ]
+ then
+ NEED_KPROC=1
+ fi
+ ;;
+ -skrypto)
+ LIBS="$LIBS $1"
+ NEED_KPROC=1
;;
+ -lkproc|-dkproc)
+ KPROC=4
+ LIBS="$LIBS $1"
+ ;;
-skproc)
+ KPROC=4
+ THREADS=8
+ LIBS="$LIBS $1"
+ ;;
+
+ -[lds]ksproc)
+ HAVE_KSPROC=1
LIBS="$LIBS $1"
+ THREADS=0
+ ;;
+
+ -lpthread|-spthread|-dpthread)
THREADS=8
- KPROC=4
;;
- -l*|-s*)
+ -lkfs)
LIBS="$LIBS $1"
+ if [ $STATIC -ne 0 ]
+ then
+ NEED_GZIP=1
+ NEED_BZIP=1
+ NEED_DL=1
+ fi
;;
- -dkproc)
+ -skfs)
LIBS="$LIBS $1"
- KPROC=4
+ NEED_GZIP=1
+ NEED_BZIP=1
+ NEED_DL=1
+ ;;
+
+ -dkfs)
+ LIBS="$LIBS $1"
+ NEED_GZIP=1
+ NEED_BZIP=1
+ NEED_DL=1
DYLD=2
;;
+
+ -svfs)
+ LIBS="$LIBS $1"
+ NEED_SRAPATH=1
+ ;;
+
+ -lvfs)
+ LIBS="$LIBS $1"
+ if [ $STATIC -ne 0 ]
+ then
+ NEED_SRAPATH=1
+ fi
+ ;;
+
+ -dvfs)
+ LIBS="$LIBS $1"
+ if [ $STATIC -ne 0 ]
+ then
+ NEED_SRAPATH=1
+ fi
+ DYLD=2
+ ;;
+
+ -lncbi-bam|-sncbi-bam|-dncbi-bam)
+ LIBS="$LIBS $1"
+ #NEED_GZIP=1
+ ;;
+
+ -l*|-s*)
+ LIBS="$LIBS $1"
+ ;;
+
-d*)
LIBS="$LIBS $1"
DYLD=2
@@ -246,27 +378,34 @@ then
EXT="$DYLX"
NAME="${NAME%.$DYLX}"
fi
+
unset VERS
-if [ "$NAME" != "${NAME%.[0-9][0-9]*}" ]
+
+V="${NAME#${NAME%\.[^.]*}\.}"
+if [[ $V == ${V//[^0-9]/} ]]
then
- ARG="${NAME%.[0-9][0-9]*}"
- VERS="${NAME#$ARG}"
+ ARG="${NAME%\.$V}"
+ VERS="$V"
NAME="${ARG#.}"
- if [ "$NAME" != "${NAME%.[0-9][0-9]*}" ]
+ V="${NAME#${NAME%\.[^.]*}\.}"
+ if [[ $V == ${V//[^0-9]/} ]]
then
- ARG="${NAME%.[0-9][0-9]*}"
- VERS="${NAME#$ARG}.$VERS"
- NAME="${ARG#.}"
+ ARG="${NAME%\.$V}"
+ VERS="$V.$VERS"
+ NAME="${ARG#.}"
- if [ "$NAME" != "${NAME%.[0-9][0-9]*}" ]
+ V="${NAME#${NAME%\.[^.]*}\.}"
+ if [[ $V == ${V//[^0-9]/} ]]
then
- ARG="${NAME%.[0-9][0-9]*}"
- VERS="${NAME#$ARG}.$VERS"
- NAME="${ARG#.}"
+ ARG="${NAME%\.$V}"
+ VERS="$V.$VERS"
+ NAME="${ARG#.}"
fi
fi
+ #echo "ARG=$ARG,VERS=$VERS,NAME=$NAME"
fi
+
case "$TYPE" in
dlib)
if [ "$SHLX" != "" ]
@@ -304,60 +443,87 @@ then
fi
ARG=$(cat $VERSFILE)
- if [ "$VERS" != "" ] && [ "$VERS" != "$ARG" ]
+ if [ "$VERS" != "" ] && [ "$VERS" != "$ARG" ] && [ "$ARG" = "${ARG#$VERS.}" ]
then
- echo "$SELF_NAME: version from file '$VERSFILE' does not match '$VERS'"
+ echo "$SELF_NAME: version from file '$VERSFILE' ($ARG) does not match '$VERS'"
exit 5
fi
VERS="$ARG"
fi
-#echo "# $SELF_NAME"
-#echo "# BUILD : $BUILD"
-#echo "# OS : $OS"
-#echo "# ARCH : $ARCH"
-#echo "# tool : $LD"
-#echo "# dep file : $DEPFILE"
-#echo "# LDFLAGS : $LDFLAGS"
-#echo "# static sys libs: $STATICSYSLIBS"
-#echo "# checksum : $CHECKSUM"
-#echo "# static : $STATIC"
-#echo "# kproc : $KPROC"
-#echo "# thread libs : $THREADS"
-#echo "# type : $TYPE"
-#echo "# srcdir : $SRCDIR"
-#echo "# bindir : $BINDIR"
-#echo "# LDIRS : $LDIRS"
-#echo "# XDIRS : $XDIRS"
-#echo "# vers file : $VERSFILE"
-#echo "# vers dir : $VERSDIR"
-#echo "# target : $TARG"
-#echo "# outdir : $OUTDIR"
-#echo "# name : $NAME"
-#echo "# dbgap : $DBGAP"
-#echo "# extension : $EXT"
-#echo "# version : $VERS"
-#echo "# objects : $OBJS"
-#echo "# libraries : $LIBS"
-#echo "# script-base : $SCRIPT_BASE"
+# detect need for kproc
+if [ $KPROC -eq 0 ] && [ $NEED_KPROC -ne 0 ] && [ $HAVE_KSPROC -eq 0 ]
+then
+ KPROC=4
+ LIBS="$LIBS -lkproc"
+fi
+
+# turn on threads for kproc
+[ $STATIC -eq 0 ] && [ "$NAME" = "libkproc" ] && THREADS=8
+[ $STATIC -ne 0 ] && [ $KPROC -ne 0 ] && THREADS=8
+
+# supply missing libraries
+[ $HAVE_GZIP -eq 0 ] && [ $NEED_GZIP -ne 0 ] && LIBS="$LIBS -lz"
+[ $HAVE_BZIP -eq 0 ] && [ $NEED_BZIP -ne 0 ] && LIBS="$LIBS -lbz2"
+[ $HAVE_DL -eq 0 ] && [ $NEED_DL -ne 0 ] && LIBS="$LIBS -ldl"
+[ $HAVE_SRAPATH -eq 0 ] && [ $NEED_SRAPATH -ne 0 ] && [ "$TYPE" = "exe" ] && LIBS="$LIBS -ssrapath"
# overwrite dependencies
[ -f "$DEPFILE" ] && rm -f "$DEPFILE"
# generate mode
-[ $STATIC -ne 0 ] && [ $KPROC -ne 0 ] && THREADS=8
MODE=$(expr $THREADS + $KPROC + $DYLD + $STATIC)
# generate SCM flags
SCMFLAGS=$(expr $STATICSYSLIBS + $STATICSYSLIBS + $CHECKSUM)
+if [ 0 -ne 0 ]
+then
+ echo "# $SELF_NAME"
+ echo "# script-base : $SCRIPT_BASE"
+ echo "# OS : $OS"
+ echo "# type : $TYPE"
+ echo "# tool : $LD"
+ echo "# ARCH : $ARCH"
+ echo "# BUILD : $BUILD"
+ echo "# srcdir : $SRCDIR"
+ echo "# bindir : $BINDIR"
+ echo "# outdir : $OUTDIR"
+ echo "# target : $TARG"
+ echo "# name : $NAME"
+ echo "# dbgap : $DBGAP"
+ echo "# version : $VERS"
+ echo "# vers file : $VERSFILE"
+ echo "# dep file : $DEPFILE"
+ echo "# mode : $MODE"
+ echo "# DYLD : $DYLD"
+ echo "# SCMFLAGS : $SCMFLAGS"
+ echo "# LDFLAGS : $LDFLAGS"
+ echo "# LDIRS : $LDIRS"
+ echo "# XDIRS : $XDIRS"
+ echo "# objects : $OBJS"
+ echo "# libraries : $LIBS"
+ echo "# rhost : $RHOST"
+ echo "# rport : $RPORT"
+ echo "# rhome : $RHOME"
+ echo "# lhome : $LHOME"
+ echo "# proxy_tool : $PROXY_TOOL"
+
+ echo "# static sys libs: $STATICSYSLIBS"
+ echo "# checksum : $CHECKSUM"
+ echo "# static : $STATIC"
+ echo "# kproc : $KPROC"
+ echo "# thread libs : $THREADS"
+ echo "# vers dir : $VERSDIR"
+ echo "# extension : $EXT"
+fi
# perform link
"$SCRIPT_BASE.$OS.$TYPE.sh" "$LD" "$ARCH" "$BUILD" "$SRCDIR" "$BINDIR" "$OUTDIR" \
"$TARG" "$NAME" "$DBGAP" "$VERS" "$VERSFILE" "$DEPFILE" "$MODE" "$SCMFLAGS" \
- "$LDFLAGS" "$LDIRS" "$XDIRS" "$OBJS" "$LIBS" || exit $?
+ "$LDFLAGS" "$LDIRS" "$XDIRS" "$OBJS" "$LIBS" "$RHOST" "$RPORT" "$RHOME" "$LHOME" "$PROXY_TOOL" || exit $?
# establish links
-if [ "$VERS" != "" ] && [ "$OS" != "win" ]
+if [ "$VERS" != "" ] && [ "$OS" != "win" ] && [ "$OS" != "rwin" ]
then
$SCRIPT_BASE.$OS.ln.sh "$TYPE" "$OUTDIR" "$TARG" "$NAME" "$DBGAP" "$EXT" "$VERS"
fi
diff --git a/build/ld.win.cmn.sh b/build/ld.win.cmn.sh
index ec41236..f40fd0c 100755
--- a/build/ld.win.cmn.sh
+++ b/build/ld.win.cmn.sh
@@ -56,6 +56,7 @@ shift 2
OBJS="$1"
LIBS="$2"
+shift 2
# decode MODE
STATIC=$(expr $MODE % 2)
@@ -63,7 +64,11 @@ MODE=$(expr $MODE / 2)
DYLD=$(expr $MODE % 2)
MODE=$(expr $MODE / 2)
KPROC=$(expr $MODE % 2)
-THREADS=$(expr $MODE / 2)
+MODE=$(expr $MODE / 2)
+THREADS=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+KRYPTO=$(expr $MODE % 2)
+CRYPTO=$(expr $MODE / 2)
##### TEMPORARY #####
KPROC=0
diff --git a/build/ld.win.dlib.sh b/build/ld.win.dlib.sh
index 9bfa4b8..f21eadf 100755
--- a/build/ld.win.dlib.sh
+++ b/build/ld.win.dlib.sh
@@ -61,33 +61,28 @@ CMD="$DLIB_CMD $LDFLAGS OLE32.lib"
# function to convert static libraries to individual COFF files
convert-static ()
{
- if [ $STATIC -eq 0 ]
+ # list members
+ local path="$1"
+ local mbrs="$(ar -t $path)"
+
+ # create sub directory
+ rm -rf "$2" && mkdir "$2"
+ if ! cd "$2"
then
- CMD="$CMD $2.a"
- else
- # list members
- local path="$1"
- local mbrs="$(ar -t $path)"
-
- # create sub directory
- rm -rf "$2" && mkdir "$2"
- if ! cd "$2"
- then
- echo "$SELF_NAME: failed to cd to $2"
- exit 5
- fi
- ar -x "$path"
-
- # add source files to link
- local m=
- for m in $mbrs
- do
- CMD="$CMD $2/$m"
- done
-
- # return to prior location
- cd - > /dev/null
+ echo "$SELF_NAME: failed to cd to $2"
+ exit 5
fi
+ ar -x "$path"
+
+ # add source files to link
+ local m=
+ for m in $mbrs
+ do
+ CMD="$CMD $2/$m"
+ done
+
+ # return to prior location
+ cd - > /dev/null
}
# tack on object files
@@ -150,9 +145,9 @@ then
;;
##### TEMPORARY #####
-# skip kproc
+# use ksproc for kproc
kproc)
- continue
+ xLIBNAME=ksproc
;;
#####################
@@ -309,16 +304,21 @@ load-dynamic
# produce shared library, stub library and exp file
echo $CMD
-if ! $CMD
+$CMD
+STATUS=$?
+if [[ ${STATUS} != 0 ]]
then
- STATUS=$?
rm -f "$TARG" "${TARG%lib}dll"
exit $STATUS
fi
# copy dll to binary directory, so they can be found by the executables
-# leave the dll in it's original place, so that they can be found in /mod and /wmod too
cp "${TARG%lib}dll" "$BINDIR"
+STATUS=$?
+if [[ ${STATUS} != 0 ]]
+then
+ exit $STATUS
+fi
# produce dependencies
if [ "$DEPFILE" != "" ]
diff --git a/build/ld.win.exe.sh b/build/ld.win.exe.sh
index 2b698b2..975505c 100755
--- a/build/ld.win.exe.sh
+++ b/build/ld.win.exe.sh
@@ -73,7 +73,7 @@ convert-static ()
CMD="$CMD $2.a"
else
# list members
- local path="$1"
+ local path=`cd $(dirname $1);pwd`/$(basename $1) # make sure path is absolute
local mbrs="$(ar -t $path)"
# create sub directory
@@ -172,9 +172,9 @@ then
;;
##### TEMPORARY #####
-# skip kproc
+# use ksproc for kproc
kproc)
- continue
+ xLIBNAME=ksproc
;;
#####################
diff --git a/build/ld.win.slib.sh b/build/ld.win.slib.sh
index 104bf6b..17bbc25 100755
--- a/build/ld.win.slib.sh
+++ b/build/ld.win.slib.sh
@@ -50,34 +50,29 @@ fi
# function to convert an archive into individual object files
convert-static ()
{
- if [ $STATIC -eq 0 ]
+ # list members
+ local path="$1"
+ local mbrs="$(ar -t $path)"
+
+ # unpack archive into temporary directory
+ mkdir -p ld-tmp
+ if ! cd ld-tmp
then
- CMD="$CMD $(cygpath -w $1)"
- else
- # list members
- local path="$1"
- local mbrs="$(ar -t $path)"
-
- # unpack archive into temporary directory
- mkdir -p ld-tmp
- if ! cd ld-tmp
- then
- echo "$SELF_NAME: failed to cd to ld-tmp"
- exit 5
- fi
- ar -x "$path"
-
- # rename and add to source files list
- local m=
- for m in $mbrs
- do
- mv $m $NAME-$m
- CMD="$CMD ld-tmp/$NAME-$m"
- done
-
- # return to prior location
- cd - > /dev/null
+ echo "$SELF_NAME: failed to cd to ld-tmp"
+ exit 5
fi
+ ar -x "$path"
+
+ # rename and add to source files list
+ local m=
+ for m in $mbrs
+ do
+ mv $m $NAME-$m
+ CMD="$CMD ld-tmp/$NAME-$m"
+ done
+
+ # return to prior location
+ cd - > /dev/null
}
if [ $STATIC -eq 0 ]
@@ -105,10 +100,10 @@ then
# look at linkage
case "$xLIB" in
- -l*|-s*)
+ -s*)
# force static load
- xLIBPATH="$(find-lib $xLIBNAME.lib $LDIRS)"
+ find-lib $xLIBNAME.a $LDIRS
if [ "$xLIBPATH" != "" ]
then
diff --git a/build/mac.arch.sh b/build/mac.arch.sh
index 19121e0..60ee5d4 100755
--- a/build/mac.arch.sh
+++ b/build/mac.arch.sh
@@ -25,12 +25,19 @@
# PPC or Intel?
ARCH="$(uname -m)"
+if [ "$ARCH" = "x86_64" ]
+then
+ echo $ARCH
+ exit 0
+fi
# the Mac likes to keep its architecture hidden because for all practical
# purposes, it is both 32 and 64 bit, and makes use of emulation as needed.
# does the hardware support 64-bit mode, even in emulation?
-CAP64=$(/usr/sbin/sysctl -n hw.cpu64bit_capable)
+SYSCTL=/usr/sbin/sysctl
+[ -x /sbin/sysctl ] && SYSCTL=/sbin/sysctl
+CAP64=$($SYSCTL -n hw.cpu64bit_capable)
# real 64-bit hardware has > 32 bits of address space
PADDR_BITS=$(/usr/sbin/sysctl -n machdep.cpu.address_bits.physical)
diff --git a/build/sra-dflt-schema.sh b/build/sra-dflt-schema.sh
index 86eaa65..79249f1 100755
--- a/build/sra-dflt-schema.sh
+++ b/build/sra-dflt-schema.sh
@@ -33,22 +33,42 @@ shift
# binary compiler
CC="$1"
-shift
+shift
# everything except windows is fine as-is
-if [ "$OS" != "win" ]
-then
+if [[ "$OS" != "win" && "$OS" != "rwin" ]]
+then
echo "$CC $*"
$CC $*
exit $?
fi
+if [[ "$OS" == "rwin" ]]
+then # for rwin, $CC is a multi-word string; extract server location data from it:
+# $(TOP)/build/run_remotely.sh $(PROXY_TOOL) $(RHOST) $(RPORT) $(RHOME) $(LHOME) $(TOP) $(SCHEMA_EXE)
+ PARMS=($CC)
+ RHOME=${PARMS[4]}
+ LHOME=${PARMS[5]}
+ TOP=${PARMS[6]}
+fi
+
# state
unset ARGS
unset DEPENDENCIES
unset DEPTARG
unset TARG
+function convert_path
+{
+ if [[ "$OS" != "rwin" ]]
+ then
+ convert_path_result="$(cygpath -w $1)"
+ else
+ convert_path_result="$RHOME${1#$LHOME}"
+ convert_path_result="$(echo $convert_path_result | tr '/' '\\')"
+ fi
+}
+
# process parameters for windows
while [ $# -ne 0 ]
do
@@ -62,8 +82,8 @@ do
shift
fi
TARG="$ARG"
- ARG="$(cygpath -w $ARG)"
- ARGS="$ARGS -o$ARG"
+ convert_path $ARG
+ ARGS="$ARGS -o${convert_path_result}"
;;
-I*)
@@ -73,8 +93,9 @@ do
ARG="$2"
shift
fi
- ARG="$(cygpath -w $ARG)"
- ARGS="$ARGS -I$ARG"
+
+ convert_path $ARG
+ ARGS="$ARGS -I${convert_path_result}"
;;
-T*)
@@ -86,13 +107,13 @@ do
fi
DEPTARG="$ARG"
DEPENDENCIES=1
- ARG="$(cygpath -w $ARG)"
- ARGS="$ARGS -T$ARG"
+ convert_path $ARG
+ ARGS="$ARGS -T${convert_path_result}"
;;
*)
- ARG="$(cygpath -w $1)"
- ARGS="$ARGS $ARG"
+ convert_path $1
+ ARGS="$ARGS ${convert_path_result}"
;;
esac
@@ -102,11 +123,12 @@ do
done
echo "$CC $ARGS"
-if ! $CC $ARGS
+$CC $ARGS
+STATUS=$?
+if [[ ${STATUS} != 0 ]]
then
- STATUS=$?
rm -f $TARG $DEPTARG
- exit $?
+ exit ${STATUS}
fi
if [ $DEPENDENCIES -eq 1 ]
diff --git a/build/win-cc.sh b/build/win-cc.sh
index f989761..d869894 100755
--- a/build/win-cc.sh
+++ b/build/win-cc.sh
@@ -42,6 +42,24 @@ unset OBJX
unset SRCFILE
unset SOURCES
unset DEPENDENCIES
+# paths for translating local to remote
+unset RHOME
+unset LHOME
+unset RHOST
+unset RPORT
+unset PROXY_TOOL
+
+function convert_path
+{
+ if [ "$OS" != "rwin" ] ; then
+ convert_path_result="$(cygpath -w $1)"
+ elif [ "$1" != "." ] ; then
+ convert_path_result="$RHOME${1#$LHOME}"
+ convert_path_result="${convert_path_result//\//\\}"
+ else
+ convert_path_result="."
+ fi
+}
while [ $# -ne 0 ]
do
@@ -64,6 +82,31 @@ do
shift
;;
+ --rhome)
+ RHOME="$2"
+ shift
+ ;;
+
+ --lhome)
+ LHOME="$2"
+ shift
+ ;;
+
+ --rhost)
+ RHOST="$2"
+ shift
+ ;;
+
+ --rport)
+ RPORT="$2"
+ shift
+ ;;
+
+ --proxy_tool)
+ PROXY_TOOL="$2"
+ shift
+ ;;
+
-D*)
ARG="${1#-D}"
if [ "$ARG" = "" ]
@@ -81,8 +124,8 @@ do
ARG="$2"
shift
fi
- ARG="$(cygpath -w $ARG)"
- ARGS="$ARGS /I$ARG"
+ convert_path $ARG
+ ARGS="$ARGS /I$convert_path_result"
;;
-o*)
@@ -115,8 +158,9 @@ do
*)
SRCFILE="$(basename $1)"
SOURCES="$SOURCES $1"
- ARG="$(cygpath -w $1)"
- ARGS="$ARGS $ARG"
+ convert_path $1
+ ARGS="$ARGS $convert_path_result"
+ SRCDIR="$(dirname $1)" # assume the last source file is in the same dir as all the .vers files we need as dependencies
;;
esac
@@ -127,15 +171,16 @@ done
unset STATUS
CMD="$CC $ARGS"
-echo "$CMD"
# run command with redirection
-if $CMD > $TARG.out 2> $TARG.err
+if [ "$OS" = "win" ]
then
- # success
- STATUS=0
+ $CMD > $TARG.out 2> $TARG.err
+ STATUS=$?
else
- # failure
+ # determine current directory
+ CURDIR="$(pwd)"
+ ${TOP}/build/run_remotely.sh $PROXY_TOOL $RHOST $RPORT $RHOME $LHOME $CURDIR $CMD > $TARG.out 2> $TARG.err
STATUS=$?
fi
@@ -144,12 +189,51 @@ if [ "$DEPENDENCIES" = "1" ]
then
sed -e '/including file/!d' -e 's/.*including file: *\([^\r\n][^\r\n]*\)/\1/g' -e '/ /d' $TARG.out > $TARG.inc
echo -n "$TARG.$OBJX: $SOURCES" | sed -e 's/\r//g' > $TARG.d
- for inc in $(cat $TARG.inc)
- do
- echo -n " $(cygpath -u $inc)" | sed -e 's/\r//g' >> $TARG.d
- done
+ if [ "$OS" = "win" ]
+ then
+ for inc in $(cat $TARG.inc)
+ do
+ # vers.h files are now generated in the objdir
+ if [ "$inc" != "${inc%.vers.h}" ]
+ then
+ inc="${inc%.h}"
+ fi
+ echo -n " $(cygpath -u $inc)" | sed -e 's/\r//g' >> $TARG.d
+ done
+ else # rwin
+ # sometimes home path comes back in lowercase
+ # make sure to compare lowercased prefixes
+ rhome_low=$(echo ${RHOME} | tr '[A-Z]' '[a-z]' | tr '\\' '/')
+ rhome_len=${#RHOME}
+
+ for inc in $(cat $TARG.inc)
+ do
+ inc_low=$(echo ${inc} | tr '[A-Z]' '[a-z]' | tr '\\' '/')
+ # vers.h files are now generated in the objdir
+ if [ "$inc" != "${inc%.vers.h}" ]
+ then
+ # convert the "...vers.h" in the object directory into "...vers" in the source directory
+ inc="${inc%.h}"
+ if [ "${inc_low#$rhome_low}" != "$inc_low" ]
+ then
+ inc="${inc:$rhome_len}"
+ inc="${inc//\\//}"
+ inc="$(basename $inc)"
+ inc="$SRCDIR/$inc"
+ fi
+ else
+ if [ "${inc_low#$rhome_low}" != "$inc_low" ]
+ then
+ inc="$LHOME${inc:$rhome_len}"
+ fi
+ fi
+ echo -n " $inc" | tr '\\' '/' >> $TARG.d
+ done
+ fi
+ echo >> $TARG.d
fi
+echo "$CMD"
# repeat output files but without CR
sed -e 's/\r//g' $TARG.err > /dev/stderr
sed -e 's/\r//g' -e "/^$SRCFILE$/d" -e '/including file/d' $TARG.out
diff --git a/configuration-assistant.perl b/configuration-assistant.perl
index 0d7901f..cdc4c29 100755
--- a/configuration-assistant.perl
+++ b/configuration-assistant.perl
@@ -1,10 +1,10 @@
-#!/usr/local/bin/perl -w
+#!/usr/bin/perl -w
################################################################################
# N.B. Run "perl configuration-assistant.perl" if you see a message like:
-# configuration-assistant.pl: /bin/perl: bad interpreter: No such file or directory
+# configuration-assistant.perl: /usr/bin/perl: bad interpreter: No such file or directory
################################################################################
-# v.1.0.2
+my $VERSION = '2.3.2.4';
################################################################################
use strict;
@@ -15,10 +15,12 @@ use File::Basename qw(basename dirname);
use File::Path "mkpath";
use File::Spec;
use Getopt::Long "GetOptions";
+use IO::Handle;
+use Getopt::Long "GetOptions";
sub println { print @_; print "\n"; }
-select((select(STDOUT), $| = 1)[0]);
+STDOUT->autoflush(1);
my $R = 1;
my $W = 2;
@@ -28,243 +30,148 @@ my $FOUND = 16;
my $RWX = $FOUND + $R + $W + $X;
println "==========================================";
-println "The SRA toolkit documentation page is";
+println "Welcome to the SRA Toolkit Configuration Script.";
+println "SRA toolkit documentation:";
println "http://www.ncbi.nlm.nih.gov/Traces/sra/std";
println "==========================================\n";
my %options;
-Help() unless (GetOptions(\%options, "help", "verbose"));
-Help() if ($options{help});
+Help(1) unless (GetOptions(\%options, 'fix', 'help', 'version', 'wordy'));
+Help(0) if ($options{help});
+Version() if ($options{version});
-#try_help() if ($#ARGV >= 0);
+$options{references} = 1 if ($#ARGV >= 0);
-my ($VDB_CONFIG, $BIN_DIR) = find_bin("vdb-config");
+println "cwd = '" . getcwd() . "'\n";
-my %refseq_cfg;
-my @KFG_FILES;
-my $fixed_config = 0;
+my $DECRYPTION_PKG;
{
- print "checking configuration files... ";
- my $f = `$VDB_CONFIG -f`;
- if ($f =~ /\w/) {
- while (chomp $f) {}
- @KFG_FILES = split /\n/, $f;
- println "'$f'";
- %refseq_cfg = check_refseq_kfg();
- } else {
- println "not found";
+ my ($fastq_dump, $fastq_dir) = FindBin("fastq-dump", "optional");
+ my ($sam_dump, $sam_dir) = FindBin("sam-dump", "optional");
+ if (! $fastq_dump && ! $sam_dump) {
+ println "presuming to be run in decryption package";
+ $DECRYPTION_PKG = 1;
}
}
-if ($refseq_cfg{NO_volumes} or $refseq_cfg{NO_servers}) {
- fix_config(\%refseq_cfg,
- "Existing configuration is invalid. Whould you like to fix it?",
- "Your tools will not work properly.\n" .
- "For more information visit SRA website.");
-}
-
-if ($refseq_cfg{refseq_dir}) {
- if ($refseq_cfg{FIX_volumes} or $refseq_cfg{FIX_paths}) {
- $refseq_cfg{refseq_dir} = ask_refseq_change($refseq_cfg{refseq_dir});
- if ($refseq_cfg{refseq_dir} ne 'READ^ONLY') {
- my $config_dir = del_all_cfg_path($refseq_cfg{refseq_dir});
- create_cfg($config_dir, $refseq_cfg{refseq_dir}, $BIN_DIR);
- }
- } elsif (not $refseq_cfg{refseq_dir_prm}) {
- unless (askYn("Configuration is found\n"
- . "but the local reference repository $refseq_cfg{refseq_dir} "
- . "does not exist.\n"
- . "Do you want to create it?"))
- {
- println "Your tools will not work properly.";
- println "Remote reference sequences will not be resolved.";
- println "For more information visit SRA website.";
- exit 1;
- }
- my $prm = check_dir($refseq_cfg{refseq_dir}, "create_missing");
- my $created = $prm & $CREATED;
- $prm &= ~ $CREATED;
- if ($prm != $RWX) {
- if ($^O ne 'cygwin' or $created != $CREATED) {
- FATAL("Cannot create $refseq_cfg{refseq_dir}");
- fix_config(\%refseq_cfg,
- "Local reference repository is read-only. ".
- "Whould you like to change it?",
- "You will not be able to upload reference sequences.\n" .
- "For more information visit SRA website.");
- }
- }
- ++$fixed_config;
- }
-} else {
- unless (askYn("Do you want to create a new configuration?")) {
- println "Your tools will not work properly without configuration.";
- println "For more information visit SRA website.";
- exit 1;
- }
-
- print "checking configuration directories... ";
- my $paths = `$VDB_CONFIG -d`;
- if ($?) {
- die $!;
- }
- while (chomp $paths) {}
- my @paths = split /:/, $paths;
- println if ($#paths >= 0);
-
- my $config_dir;
- foreach (@paths) {
- next if ($_ eq '/etc/ncbi');
- if ($^O eq 'MSWin32') { # Windows: translate POSIX to Windows path
- tr|/|\\|;
- s/^\\([a-zA-Z])\\/$1:\\/;
- } elsif ($^O eq 'cygwin') {
- if (m|^/([a-zA-Z])/|) {
- $_ = "/cygdrive$_";
- }
- }
-
- my $prm = check_dir($_, "create_missing");
- my $created = $prm & $CREATED;
- $prm &= ~ $CREATED;
- if ($prm == $RWX or ($^O eq 'cygwin' and $created == $CREATED)) {
- $config_dir = $_;
- last;
- }
- }
- FATAL("cannot find a usable directory to create configuration file")
- unless ($config_dir);
+my ($VDB_CONFIG, $BIN_DIR) = FindBin("vdb-config");
- ($refseq_cfg{refseq_dir}, $refseq_cfg{refseq_dir_prm}) = make_refseq_dir();
-
- create_cfg($config_dir, $refseq_cfg{refseq_dir}, $BIN_DIR);
- ++$fixed_config;
-}
-
-if ($#ARGV >= 0) {
- $options{references} = 1;
-} elsif ($fixed_config == 0) {
- $options{references} = 1;
-}
-$options{references} = ask
- ("Would you like to test cSRA files for remote reference dependencies?",
- $fixed_config)
- unless ($options{references});
-exit 0 unless ($options{references});
-
-my $CHECK_ONLY = $refseq_cfg{refseq_dir} eq 'READ^ONLY';
-
-my ($ALIGN_INFO, $ALIGN_INFO_DIR) = find_bin("align-info");
-WARN("using align-info and vdb-config located in different directories:\n"
- . "\t$ALIGN_INFO\n\t$VDB_CONFIG")
- if ($BIN_DIR ne $ALIGN_INFO_DIR);
-
-my $WGET;
-unless ($CHECK_ONLY) {
- print "checking for wget... ";
- my $out = `wget -h 2>&1`;
- if ($? == 0) {
- println "yes";
- $WGET = "wget -O";
- } else {
- println "no";
- }
-
- unless ($WGET) {
- print "checking for curl... ";
- my $out = `curl -h 2>&1`;
- if ($? == 0) {
- println "yes";
- $WGET = "curl -o";
- } else {
- println "no";
- }
- }
- unless ($WGET) {
- print "checking for ./wget... ";
- my $cmd = dirname($0) ."/wget";
- my $out = `$cmd -h 2>&1`;
- if ($? == 0) {
- println "yes";
- $WGET = "$cmd -O";
- } else {
- println "no";
- }
- }
- FATAL("none of wget, curl could be found") unless ($WGET);
-}
-
-if ($#ARGV > -1) {
- foreach (@ARGV) {
- load($CHECK_ONLY, $refseq_cfg{refseq_dir}, $_);
- }
-} else {
- while (1) {
- my $f = ask("Enter cSRA file name (Press Enter to exit)");
- last unless ($f);
- load($CHECK_ONLY, $refseq_cfg{refseq_dir}, $f);
- }
+my %kfg;
+Kfg(\%kfg, 'read', 'Reading configuration');
+umask 0002;
+my $fixed = FixKfg(\%kfg);
+if ($fixed) {
+ undef %kfg;
+ Kfg(\%kfg, 'read', 'Checking configuration');
}
+#DoKryptoCfg(\%kfg);
################################################################################
# FUNCTIONS #
################################################################################
-sub ask {
+sub Ask {
my ($prompt) = @_;
+
print "$prompt: ";
+
my $in = <STDIN>;
unless ($in) {
println;
return "";
}
+
chomp $in;
return $in;
}
-sub askYn { return askYN($_[0], 'yes');}
-sub askyN { return askYN($_[0], 'no' );}
-sub askYN {
+
+sub AskYn { return AskYN($_[0], 'yes');}
+sub AskyN { return AskYN($_[0], 'no' );}
+
+sub AskYN {
my ($q, $yes) = @_;
+
$yes = '' if ($yes eq 'no');
+
print "$q ";
+
if ($yes) {
print "[Y/n] ";
} else {
print "[y/N] ";
}
+
my $in = <STDIN>;
chomp $in;
if ($in) {
- return $in eq 'Y' or $in eq 'y'
- or $in eq 'YES' or $in eq 'yes' or $in eq 'Yes';
+ return $in eq 'Y' || $in eq 'y'
+ || $in eq 'YES' || $in eq 'yes' || $in eq 'Yes';
} else {
return $yes;
}
}
-sub ask_refseq_change {
+
+sub AskRefseqChange {
my ($refseq) = @_;
+
die unless ($refseq);
+
my $force;
+
while (1) {
+ my $read = -r $refseq && -x $refseq;
println "Your repository directory is $refseq.";
- println "It is read-only. You cannot add new sequences to it.";
+ my $dflt;
+ if ($read) {
+ println "It is read-only. You cannot add new sequences to it.";
+ $dflt = "1";
+ } else {
+ println "You cannot read it.";
+ $dflt = "2";
+ }
println "Make your choice:";
println "1) Use existing repository";
println "2) Use a different repository";
println "3) exit the script";
- print "Your selection? [1] ";
+ print "Your selection? [$dflt] ";
+
my $in = <STDIN>;
chomp $in;
- return 'READ^ONLY' if (! $in or $in eq "1");
+ $in = $dflt unless ($in);
+
+ if ($in eq "1") {
+ unless ($read) {
+ Fatal(
+"Ask the owner of $refseq to allow you access $refseq directory\n" .
+"Otherwise the dumpers will not be able to find reference files"
+ );
+ }
+ return ($refseq, 'READ^ONLY');
+ }
+
if ($in eq "2") {
last;
}
+
exit 0 if ($in eq "3");
}
- my ($path, $perm) = make_refseq_dir();
- return $path;
+
+ my ($path, $perm) = MakeRefseqDir();
+
+ return ($path, '');
+}
+
+sub Home {
+ if ($ENV{HOME}) {
+ return $ENV{HOME};
+ } elsif ($ENV{USERPROFILE}) {
+ return $ENV{USERPROFILE};
+ } else {
+ return '';
+ }
}
-sub make_refseq_dir {
+
+sub MakeRefseqDir {
my $deflt;
if ($^O eq 'cygwin' and $ENV{USERPROFILE}) {
$deflt = $ENV{USERPROFILE};
@@ -273,11 +180,10 @@ sub make_refseq_dir {
if ($1) {
$deflt = "/cygdrive$deflt";
}
- } elsif ($ENV{HOME}) {
- $deflt = $ENV{HOME};
- } elsif ($ENV{USERPROFILE}) {
- $deflt = $ENV{USERPROFILE};
} else {
+ $deflt = Home();
+ }
+ unless ($deflt) {
$deflt = getcwd();
}
$deflt = "." unless($deflt);
@@ -303,199 +209,310 @@ sub make_refseq_dir {
$path = $deflt;
}
exit 1 unless ($path);
- my $perm = check_dir($path, "create_missing");
- my $prm = $perm;
+ my ($prm_org, $perm) = CheckDir($path, "create_missing");
+ my $prm = $prm_org;
my $created = $prm & $CREATED;
- $prm &= ~ $CREATED;
- if ($prm == $RWX or ($^O eq 'cygwin' and $created == $CREATED)) {
- return ($path, $perm);
+ $prm &= $RWX;
+ if ($prm == $RWX || ($^O eq 'cygwin' and $created == $CREATED)) {
+ return ($path, $prm_org);
+ } elsif ($prm & $FOUND) {
+ println "'$path' does not seem to be writable.";
+ println "You will not be able to add new sequences to it.";
+ if (AskyN("Do you want to use it?")) {
+ return ($path, $prm_org);
+ }
}
}
}
-sub create_cfg {
- my ($config_dir, $refseq_dir, $bin_dir) = @_;
+sub Posixify {
+ ($_) = @_;
- my $kfg;
- for (my $i = 0; ; ++$i) {
- $kfg = "$config_dir/ncbi-config";
- $kfg .= "$i" if ($i);
- $kfg .= ".kfg";
- last unless (-e $kfg);
- }
-
- print "creating configuration file $kfg... ";
- {
- # convert refseq_dir to POSIX path
- $refseq_dir =~ s|^/cygdrive/|/|;
- $refseq_dir =~ tr|\\|/|;
- $refseq_dir =~ s|^([a-zA-Z]):/|/$1/|;
- }
+ # convert to POSIX path
+ s|^/cygdrive/|/|;
+ tr|\\|/|;
+ s|^([a-zA-Z]):/|/$1/|;
- open(F, ">$kfg") or die "cannot open $kfg";
- print F "refseq/paths = \"$refseq_dir\"\n";
- close F or die "cannot close $kfg";
- println "ok";
+ return $_;
+}
- my %tmp_cfg = check_refseq_kfg();
- die unless ($tmp_cfg{refseq_dir_prm} = $RWX);
+sub Version {
+ my $bin = basename($0);
+ print << "END";
+$bin version $VERSION
+END
- println "N.B. Configuration file location is relative to the binaries";
- {
- if ($bin_dir and (File::Spec->catfile($bin_dir, "ncbi") eq $config_dir))
- {
- println " ($bin_dir)";
- }
- }
- println " It can be lost of you move an application";
+ exit 0;
}
sub Help {
+ my ($exit) = @_;
+ $exit = 0 unless ($exit);
my $bin = basename($0);
print << "END";
-$bin version 1.0.2
+$bin version $VERSION
Utility to help configure the SRA tools to be able
to access the local reference repository,
-determine which reference sequences a cSRA file relies
+determine which reference sequences a SRA file relies
upon and to fetch them from NCBI.
Fetched references are placed in the local reference repository.
-Usage: $bin [-v] [cSRA_FILE...]
+Usage: $bin [--fix] [--wordy] [SRA_FILE ...]
Options
--v, --verbose increase "fetcher" verbosity
+-f, --fix re-download existing reference files;
+ fix refseq repository permissions
+-v, --version print version and exit
+-w, --wordy increase "fetcher" verbosity
END
- exit 1;
+ exit $exit;
}
-sub fix_config {
+sub FixRefseqCfg {
my ($refseq_cfg, $question, $bye) = @_;
- unless (askYn($question)) {
+
+ unless (AskYn($question)) {
print $bye;
exit 1;
}
- my $config_dir = del_all_cfg_path($refseq_cfg);
- ($refseq_cfg->{refseq_dir}, $refseq_cfg{refseq_dir_prm})
- = make_refseq_dir();
- create_cfg($config_dir, $refseq_cfg->{refseq_dir}, $BIN_DIR);
-}
-
-sub del_all_cfg_path {
- my ($refseq_cfg) = @_;
- my $config_dir;
- my %bak;
- foreach (@KFG_FILES) {
- my $f = $_;
- my $file_bak;
- my $fixed = "";
- open IN, $f or die "cannot open $_";
- while (<IN>) {
- if (m|refseq/servers| or m|refseq/volumes| or m|refseq/paths|) {
- $config_dir = dirname($f) unless ($config_dir);
- $fixed .= "# $_";
- for (my $i = 0; not $file_bak; ++$i) {
- $file_bak = "$f.bak";
- $file_bak .= "$i" if ($i);
- last unless (-e $file_bak);
- }
- } else {
- $fixed .= $_;
- }
+
+ ($refseq_cfg->{refseq_dir}, $refseq_cfg->{refseq_dir_prm})
+ = MakeRefseqDir();
+ UpdateRefseqCfgNode($refseq_cfg->{refseq_dir});
+}
+
+sub UpdateRefseqCfgNode {
+ ($_) = @_;
+ $_ = Posixify($_);
+ UpdateConfigNode('refseq/paths' , $_);
+}
+
+sub UpdateKryptoCfgNode {
+ ($_) = @_;
+ $_ = Posixify($_);
+ UpdateConfigNode('krypto/pwfile', $_);
+}
+
+sub UpdateConfigNode {
+ my ($name, $val) = @_;
+
+ print "'$name' => '$val': ";
+ my $cmd = "$VDB_CONFIG -s \"$name=$val\"";
+# println "\n$cmd";
+ `$cmd`;
+ if ($?) {
+ println "error: $!";
+ } else {
+ println "updated";
+ }
+}
+
+sub DoSchemaCfg {
+ my $error;
+
+ print "checking schema configuration... ";
+
+ my $tmp = `$VDB_CONFIG vdb/schema/paths 2>&1`;
+ if ($? == 0) {
+ chomp $tmp;
+
+ if ($tmp =~ m|<paths>(.+)</paths>|) {
+ my $paths = $1;
+ println $paths;
+ my @paths = split(/:/, $paths);
+
+ $error += !CheckSchemaFile('align/align.vschema', @paths);
+ $error += !CheckSchemaFile('ncbi/seq.vschema' , @paths);
+ $error += !CheckSchemaFile('vdb/vdb.vschema' , @paths);
+ } else {
+ $error = "unexpected: $tmp";
+ println $error;
}
- close $f;
- if ($file_bak) {
- unless (rename($f, $file_bak)) {
- rollback(%bak);
- FATAL("Cannot update(save) $f: is file/directory writable?");
- } else {
- $bak{$file_bak} = $f;
- unless (open(OUT, ">$f")) {
- rollback(%bak);
- FATAL("Cannot update $f: $!");
- }
- print OUT $fixed;
- unless (close(OUT)) {
- rollback(%bak);
- FATAL("Cannot update(close) $f: $!");
- }
- }
+ } elsif ($tmp =~ /path not found/) {
+ $error = "not found";
+ println $error;
+ } else {
+ $error = "unknown vdb-config schema error";
+ println $error;
+ }
+
+ if ($error) {
+ println "--------------------------------------";
+ println "WARNING: SCHEMA FILES CANNOT BE FOUND.";
+ println "IT COULD CAUSE LOADERS TO FAIL.";
+ println "--------------------------------------";
+ }
+
+ return ! $error;
+}
+
+sub CheckSchemaFile {
+ my ($file, @dir) = @_;
+
+ my $cygdrive = '/cygdrive';
+ my $hasCygdrive = -e '/cygdrive';
+
+ print "checking $file... ";
+
+ foreach my $dir(@dir) {
+ my $path = "$dir/$file";
+ if (-e $path) {
+ println $path;
+ return 1;
}
}
- return $config_dir;
+
+ println "not found";
+
+ return 0;
}
-sub rollback {
- my (%bak) = @_;
- while (my ($bak, $orig) = each %bak) {
- rename($bak, $orig);
+sub CleanEmptyFiles {
+ my ($refseq_dir) = @_;
+
+ print "checking $refseq_dir for invalid empty reference files... ";
+
+ my $i = 0;
+ opendir DIR, $refseq_dir or die "cannot opendir $refseq_dir";
+ while ($_ = readdir DIR) {
+ next if (/^\.{1,2}$/);
+
+ my $f = "$refseq_dir/$_";
+
+ my $empty;
+ if (-z $f) {
+ ++$empty;
+ } elsif (-d $f) {
+ # skip a directory
+ } elsif (-s $f < 999) {
+ open F, $f or die "cannot open $f";
+ my $data = '';
+ while (<F>) {
+ while(chomp) {};
+ $data .= $_;
+ }
+ ++$empty if ($data =~ m|<title>404 - Not Found</title>|);
+ }
+ if ($empty) {
+ unlink $f or die "cannot remove $f";
+ ++$i;
+ }
}
+ closedir DIR;
+
+ if ($i)
+ { println "$i found"; }
+ else
+ { println "none found"; }
}
-sub load {
- my ($check_only, $refseq_dir, $f) = @_;
- println "Determining $f external dependencies...";
- my $cmd = "$ALIGN_INFO $f";
- my @info = `$cmd`;
- if ($?) {
- println "$f: error";
+sub FixRefseqDirPermissions {
+ my ($dir, $read_only) = @_;
+ print "checking refseq repository...";
+ my $mode = (stat($dir))[2] & 07777;
+
+ if ($read_only) {
+ println " read-only";
+ print "\tchecking directory permissions...";
+ unless (-r $dir && -x $dir) {
+ Fatal("\n$dir cannot be accessed. "
+ . "Either update its permissions\n"
+ . "or choose another directory for refseq repository.");
+ }
+ println " OK";
+ print "\tchecking file permissions...";
+ opendir REP, $dir or die "cannot opendir $dir";
+ my $ok = 1;
+ while (my $f = readdir REP) {
+ next if ($f =~ /^\.{1,2}$/);
+ unless (-r "$dir/$f") {
+ Warn("\n$dir/$f is not readable. "
+ . "Either update its permissions\n"
+ . "or choose another directory for refseq repository.");
+ $ok = 0;
+ }
+ }
+ closedir REP;
+ println " OK" if $ok;
+ println "\tchecking parent directories...";
+ my @dirs = File::Spec->splitdir($dir);
+ my $p = File::Spec->rootdir;
+ while (@dirs) {
+ $_ = shift @dirs;
+ $p = File::Spec->catdir($p, $_);
+ print "\t\t$p";
+ $ok = 1;
+ unless (-r $p && -x $p) {
+ Warn("\n$p cannot be accessed. "
+ . "Either update its permissions\n"
+ . "or choose another directory for refseq repository.");
+ $ok = 0;
+ }
+ println " OK" if $ok;
+ }
} else {
- my $refs = 0;
- my $ok = 0;
- my $ko = 0;
- foreach (@info) {
- chomp;
- my @r = split /,/;
- if ($#r >= 3) {
- my ($seqId, $remote) = ($r[0], $r[3]);
- ++$refs;
- if ($remote eq 'remote') {
- if ($check_only) {
- println "$seqId: unresolved";
- ++$ok;
- } else {
- print "Downloading $seqId... ";
- println if ($options{verbose});
- my $cmd = "$WGET \"$refseq_dir/$seqId\"" .
- " http://ftp-trace.ncbi.nlm.nih.gov/sra/refseq/$seqId"
- . " 2>&1";
- my $res;
- if ($options{verbose}) {
- $res = system($cmd);
- } else {
- `$cmd`;
- $res = $?;
- }
- print "$seqId: " if ($options{verbose});
- if ($res) {
- println "failed";
- ++$ko;
- } else {
- println "ok";
- ++$ok;
- }
- }
+ println " writable";
+ print "\tchecking directory permissions...";
+ my $ok = 1;
+ if (($mode & 0755) != 0755) {
+ $mode |= 0755;
+ if (chmod($mode, $dir) != 1) {
+ Warn("\n$dir is not acessible by some of the users\n"
+ . "Dumping of some files could fail if run by anoother user"
+ );
+ $ok = 0;
+ } else { println " fixed" }
+ } else { println " OK" }
+ $ok = "OK";
+ print "\tchecking file permissions...";
+ opendir REP, $dir or die "cannot opendir $dir";
+ while (my $next = readdir REP) {
+ next if ($next =~ /^\.{1,2}$/);
+ my $f = "$dir/$next";
+ my $mode = (stat($f))[2] & 07777;
+ if (($mode & 0644) != 0644) {
+ if ($ok) {
+ $mode |= 0644;
+ if (chmod($mode, $f) != 1) {
+ Warn("\n$f cannot be acessed by some of the users\n"
+ . "Dumping of some files could fail "
+ . "if run by anoother user");
+ $ok = "";
+ } else { $ok = "fixed" }
}
}
}
- if ($check_only) {
- if ($ok == 0) {
- println "All $refs references were found";
- } else {
- println "$refs references were checked, $ok missed";
- }
- } else {
- print "All $refs references were checked (";
- print "$ko failed, " if ($ko);
- println "$ok downloaded)";
+ closedir REP;
+ println " $ok" if ($ok);
+ $ok = 1;
+ println "\tchecking parent directories...";
+ my @dirs = File::Spec->splitdir($dir);
+ my $p = File::Spec->rootdir;
+ while (@dirs) {
+ $_ = shift @dirs;
+ $p = File::Spec->catdir($p, $_);
+ print "\t\t$p";
+ my $mode = (stat($p))[2] & 07777;
+ if (($mode & 0550) != 0550) {
+ if ($ok) {
+ $mode |= 0550;
+ if (chmod($mode, $p) != 1) {
+ Warn("\n$p cannot be acessed by some of the users\n"
+ . "Dumping of some files could fail "
+ . "if run by anoother user");
+ $ok = 0;
+ } else { println " fixed" }
+ }
+ } else { println " OK" }
}
}
}
################################################################################
-sub check_dir {
+sub CheckDir {
my ($dir, $create_missing) = @_;
$dir = File::Spec->canonpath($dir);
@@ -504,7 +521,7 @@ sub check_dir {
my $prm = 0;
unless (-e $dir) {
println "not found";
- return 0 unless ($create_missing);
+ return (0, 0) unless ($create_missing);
print "checking ${dir}'s parents... ";
$dir = File::Spec->canonpath($dir);
@@ -513,7 +530,7 @@ sub check_dir {
if ($^O eq 'MSWin32') {
$test = "";
} else {
- FATAL("bad root directory '$test'") unless (-e $test);
+ Fatal("bad root directory '$test'") unless (-e $test);
}
foreach (@dirs) {
my $prev = $test;
@@ -531,12 +548,12 @@ sub check_dir {
print "($test)... ";
my $cygwin_beauty;
# cygwin does not detect -r for $ENV{USERPROFILE}
- if (! -r $test or ! -x $test) {
+ if (! -r $test || ! -x $test) {
if ($^O eq 'cygwin') {
++$cygwin_beauty;
} else {
println "not readable";
- return 0;
+ return (0, 0);
}
}
if (! -x $test) {
@@ -544,7 +561,7 @@ sub check_dir {
++$cygwin_beauty;
} else {
println "not writable";
- return 0;
+ return (0, 0);
}
}
if ($cygwin_beauty) {
@@ -557,13 +574,14 @@ sub check_dir {
unless (mkpath($dir)) {
die "cannot mkdir $dir" unless ($cygwin_beauty);
println "failed. Is it writable?";
- return 0;
+ return (0, 0);
}
println("ok");
$prm += $CREATED;
print "checking $dir... ";
}
+ my $perm = (stat($dir))[2];
$prm += $FOUND;
{
@@ -579,7 +597,7 @@ sub check_dir {
$prm += $X;
}
- if (! -r $dir or ! -x $dir) {
+ if (! -r $dir || ! -x $dir) {
if ($^O eq 'cygwin') {
++$cygwin_beauty;
} else {
@@ -602,53 +620,43 @@ sub check_dir {
}
}
- return $prm;
+ return ($prm, $perm);
}
-sub check_refseq_kfg {
+sub CheckCfg {
print "checking refseq configuration... ";
- my %refseq_cfg;
- refseq_from_kfg(\%refseq_cfg);
-
- if ($refseq_cfg{servers} and !$refseq_cfg{volumes}) {
- ++$refseq_cfg{NO_volumes};
- println "found invalid";
- return %refseq_cfg;
- FATAL("need to update existing invalid configuration");
- # TODO
- } elsif ($refseq_cfg{volumes} and !$refseq_cfg{servers}) {
- ++$refseq_cfg{NO_servers};
- println "found invalid";
- FATAL("need to update existing invalid configuration");
- # TODO
- } elsif ($refseq_cfg{servers} and $refseq_cfg{volumes}) {
- println "servers=$refseq_cfg{servers}volumes=$refseq_cfg{volumes}";
- if ($refseq_cfg{paths}) {
- WARN("/refseq/servers&volumes found: /refseq/paths will be ignored");
- }
- } elsif ($refseq_cfg{paths}) {
- println "paths=refseq_cfg{paths}";
+
+ my %konfig;
+ RefseqFromConfig(\%konfig);
+
+ if ($konfig{refseqrepository} || $konfig{servers} || $konfig{volumes})
+ {
+ if ($konfig{refseqrepository}) {
+ println "refseq/repository found:";
+ } elsif ($konfig{servers}) {
+ println "refseq/servers found:";
+ } elsif ($konfig{volumes}) {
+ println "refseq/volumes found:";
+ }
+ println "Seems to be running in NCBI environment:";
+ println " refseq configuration fix/update is disabled;";
+ println " reference files download is disabled.";
+ ++$options{NCBI};
+ return;
+ }
+
+ if ($konfig{paths}) {
+ println "paths=$konfig{paths}";
} else {
println "not found";
- return %refseq_cfg;
+ return %konfig;
}
- if ($refseq_cfg{servers} and index($refseq_cfg{servers}, ":") != -1) {
- die "Unexpected configuration: servers=$refseq_cfg{servers}";
- }
- if ($refseq_cfg{volumes} and index($refseq_cfg{volumes}, ":") != -1) {
- die "Unexpected configuration: volumes=$refseq_cfg{volumes}";
- }
- if ($refseq_cfg{paths} and index($refseq_cfg{paths}, ":") != -1) {
- die "Unexpected configuration: paths=$refseq_cfg{paths}";
+ if ($konfig{paths} and index($konfig{paths}, ":") != -1) {
+ die "Unexpected configuration: paths=$konfig{paths}";
}
- my $dir;
- if ($refseq_cfg{servers} and $refseq_cfg{volumes}) {
- $dir = File::Spec->catdir($refseq_cfg{servers}, $refseq_cfg{volumes});
- } else {
- $dir ="$refseq_cfg{paths}";
- }
+ my $dir = "$konfig{paths}";
if ($^O eq 'MSWin32') { # Windows: translate POSIX to Windows path
$dir =~ tr|/|\\|;
@@ -657,26 +665,90 @@ sub check_refseq_kfg {
$dir = "/cygdrive$dir";
}
- $refseq_cfg{refseq_dir} = $dir;
- my $prm = check_dir($dir);
- $refseq_cfg{refseq_dir_prm} = $prm;
+ $konfig{refseq_dir} = $dir;
+ my ($prm, $perm) = CheckDir($dir);
+ $konfig{refseq_dir_prm} = $prm;
if ($prm == 0) { # not found
- return %refseq_cfg;
+ return %konfig;
} elsif ($prm != $RWX) {
if ($^O ne 'cygwin') {
- if ($refseq_cfg{servers}) {
- ++$refseq_cfg{FIX_volumes};
+ ++$konfig{FIX_paths};
+# Fatal("refseq repository is invalid or read-only");
+ } # else cygwin does not always can tell permissions correctly
+ }
+ return %konfig;
+}
+
+sub FindWget {
+ my $WGET;
+
+ print "checking for wget... ";
+ my $out = `wget -h 2>&1`;
+ if ($? == 0) {
+ println "yes";
+ if ($options{fix}) {
+ $WGET = "wget -O";
+ } else {
+ $WGET = "wget -c -O";
+ }
+ ++$options{all_references};
+ } else {
+ println "no";
+ }
+
+ unless ($WGET) {
+ print "checking for curl... ";
+ my $out = `curl -h 2>&1`;
+ if ($? == 0) {
+ println "yes";
+ $WGET = "curl -o";
+ ++$options{all_references} if ($options{fix});
+ } else {
+ println "no";
+ }
+ }
+
+ unless ($WGET) {
+ print "checking for ./wget... ";
+ my $cmd = dirname($0) ."/wget";
+ my $out = `$cmd -h 2>&1`;
+ if ($? == 0) {
+ println "yes";
+ if ($options{fix}) {
+ $WGET = "$cmd -O";
} else {
- ++$refseq_cfg{FIX_paths};
+ $WGET = "$cmd -c -O";
}
-# FATAL("refseq repository is invalid or read-only");
- } # else cygwin does not always can tell permissions correctly
+ ++$options{all_references};
+ } else {
+ println "no";
+ }
+ }
+
+ unless ($WGET) {
+ print "checking for ./wget.exe... ";
+ my $cmd = dirname($0) ."/wget.exe";
+ my $out = `$cmd -h 2>&1`;
+ if ($? == 0) {
+ println "yes";
+ if ($options{fix}) {
+ $WGET = "$cmd -O";
+ } else {
+ $WGET = "$cmd -c -O";
+ }
+ ++$options{all_references};
+ } else {
+ println "no";
+ }
}
- return %refseq_cfg;
+
+ Fatal("none of wget, curl could be found") unless ($WGET);
+
+ return $WGET;
}
-sub find_bin {
- my ($name) = @_;
+sub FindBin {
+ my ($name, $optional) = @_;
my $prompt = "checking for $name";
my $basedir = dirname($0);
@@ -690,13 +762,19 @@ sub find_bin {
if ($? == 0) {
chomp $dir;
my $try = File::Spec->catfile($dir, $name);
- print "($try)... ";
- my $tmp = `$try -h 2>&1`;
- if ($? == 0) {
- println "yes";
- return ($try, $dir);
+ print "($try";
+ if (-e $try) {
+ print ": found)... ";
+ my $tmp = `$try -h 2>&1`;
+ if ($? == 0) {
+ println "yes";
+ return ($try, $dir);
+ } else {
+ println "\nfailed to run '$try -h'";
+ }
+ } else {
+ println ": not found)";
}
- println "no";
}
}
} else {
@@ -706,13 +784,36 @@ sub find_bin {
# try the script directory
{
my $try = File::Spec->catfile($basedir, $name);
- print "$prompt ($try)... ";
- my $tmp = `$try -h 2>&1`;
- if ($? == 0) {
- println "yes";
- return ($try, $basedir);
+ print "$prompt ($try";
+ if (-e $try) {
+ print ": found)... ";
+ my $tmp = `$try -h 2>&1`;
+ if ($? == 0) {
+ println "yes";
+ return ($try, $basedir);
+ } else {
+ println "\nfailed to run '$try -h'";
+ }
} else {
- println "no";
+ println ": not found)";
+ }
+ }
+
+ # the script directory: windows
+ {
+ my $try = File::Spec->catfile($basedir, "$name.exe");
+ print "$prompt ($try";
+ if (-e $try) {
+ print ": found)... ";
+ my $tmp = `$try -h 2>&1`;
+ if ($? == 0) {
+ println "yes";
+ return ($try, $basedir);
+ } else {
+ println "\nfailed to run '$try -h'";
+ }
+ } else {
+ println ": not found)";
}
}
@@ -729,47 +830,382 @@ sub find_bin {
}
}
- FATAL("$name could not be found");
+ Fatal("$name could not be found") unless ($optional);
+ return (undef, undef);
+}
+
+sub DoKryptoCfg {
+ my ($kfg) = @_;
+
+ my $v = $kfg->{'krypto/pwfile'};
+ unless ($v) {
+ println "failed to read krypto configuration";
+ return;
+ }
+
+ my $dflt = $DECRYPTION_PKG ? 'y' : 'n';
+ print "Do you want to " . ((-e $v) ? "update" : "set") . " your dbGap encryption key? [" .
+ ($DECRYPTION_PKG ? "Y/n" : "y/N") . "] ";
+ my $answer = GetYNAnswer($dflt, 'y');
+ UpdateKryptoCfg() if ($answer eq 'y');
+}
+
+sub UpdateKryptoCfg {
+ my $VDB_PASSWD = (FindBin('vdb-passwd'))[0];
+
+ my $res = system("$VDB_PASSWD -q");
+ if ($res) {
+ println "password update failed";
+ } else {
+ println "password updated ok";
+ }
}
-sub refseq_config {
+sub RefseqConfig {
my ($nm) = @_;
- my $v = `$VDB_CONFIG refseq/$nm 2>&1`;
+
+ $_ = `$VDB_CONFIG refseq/$nm 2>&1`;
+
if ($?) {
- if ($v =~ /path not found while opening node/) {
- $v = '';
+ if (/path not found while opening node/) {
+ $_ = '';
} else {
die $!;
}
} else {
- $v =~ /<$nm>(.*)<\/$nm>/;
+ m|<$nm>(.*)</$nm>|s;
die "Invalid 'refseq/$nm' configuration" unless ($1);
# TODO die if (refseq/paths = "") : fix it
- $v = $1;
+ $_ = $1;
}
- return $v;
+
+ return $_;
}
-sub refseq_from_kfg {
+sub RefseqFromConfig {
my ($refseq) = @_;
- $refseq->{servers} = refseq_config('servers');
- $refseq->{volumes} = refseq_config('volumes');
- $refseq->{paths} = refseq_config('paths');
+
+ $refseq->{paths} = RefseqConfig('paths');
+ $refseq->{refseqrepository} = RefseqConfig('repository');
+ $refseq->{servers} = RefseqConfig('servers');
+ $refseq->{volumes} = RefseqConfig('volumes');
+}
+
+sub GetKfgNode {
+ my ($nm, $specPrnt) = @_;
+
+ print "$nm: ";
+
+ @_ = split(/\//, $nm);
+ die "GetKfgNode($nm)" if ($#_ < 0);
+ my $leaf = $_[$#_];
+
+ $_ = `$VDB_CONFIG $nm 2>&1`;
+
+ if ($?) {
+ if (/path not found while opening node/) {
+ $_ = '';
+ } else {
+ println;
+ die $!;
+ }
+ } else {
+ m|<$leaf>(.*)</$leaf>|s;
+ unless ($1) {
+ println;
+ die "Invalid '$nm' configuration: '$_'"
+ }
+ $_ = $1;
+ }
+
+ if ($_) {
+ if ($specPrnt) {
+ if ($specPrnt eq 'file') {
+ print "'$_': ";
+ if (-e $_) {
+ println "exists";
+ } else {
+ println "does not exist";
+ }
+ } else {
+ println "found";
+ }
+ } else {
+ println "'$_'";
+ }
+ } else {
+ println "not found";
+ }
+
+ return $_;
}
-sub FATAL {
+sub Kfg {
+ my ($kfg, $kfgMode, $msg) = @_;
+ my $updated;
+ my $read;
+ if ($kfgMode eq 'fix') {
+ println "\n$msg";
+ } else {
+ println "\n$msg";
+ $read = 1;
+ }
+
+ if ($read) {
+ $kfg->{dflt_user_root} = File::Spec->catdir(Home(), 'ncbi', 'public');
+ }
+
+# my $nm = 'krypto/pwfile';
+# if ($read) {
+# $kfg->{$nm} = GetKfgNode($nm, 'file');
+# if ($kfg->{$nm} eq '1' || $kfg->{$nm} eq '/.ncbi/vdb-passwd') {
+# # fix bugs introduced by previous script version
+# $kfg->{$nm} = '';
+# }
+# println;
+# } else {
+# if (!$kfg->{$nm}) {
+# my $path = Posixify(
+# File::Spec->catdir(Home(), '.ncbi', 'vdb-passwd'));
+# UpdateConfigNode($nm, $path);
+# $updated = 1;
+# }
+# }
+
+ if ($read) {
+ my $nm = 'refseq/servers';
+ $kfg->{$nm} = GetKfgNode($nm, 'file');
+
+ $nm = 'refseq/volumes';
+ $kfg->{$nm} = GetKfgNode($nm);
+ if ($kfg->{'refseq/servers'} && !($kfg->{'refseq/servers'} =~ m|^/net|)
+ && !($kfg->{'refseq/servers'} =~ m|^/panfs/|))
+ {
+ $kfg->{dflt_user_root}
+ = File::Spec->catdir($kfg->{'refseq/servers'});
+ }
+
+ $nm = 'refseq/paths';
+ $kfg->{$nm} = GetKfgNode($nm, 'file');
+ if ($kfg->{$nm} && ($kfg->{$nm} =~ m|^(.+)/refseq$|)) {
+ $kfg->{dflt_user_root} = $1;
+ }
+
+ println;
+ }
+
+
+ if ($read) {
+ my $nm = 'repository';
+ $kfg->{$nm} = GetKfgNode($nm, 'dont print');
+ }
+
+ my $disableRemoteName = 'repository/remote/main/NCBI/disabled';
+ my %remote = (
+ 'repository/remote/main/NCBI/root'
+ => 'http://ftp-trace.ncbi.nlm.nih.gov/sra',
+ 'repository/remote/main/NCBI/apps/sra/volumes/fuse1000'
+ => 'sra-instant/reads/ByRun/sra',
+ 'repository/remote/main/NCBI/apps/refseq/volumes/refseq' => 'refseq',
+ 'repository/remote/main/NCBI/apps/wgs/volumes/fuseWGS' => 'wgs',
+ $disableRemoteName => '',
+ 'repository/remote/protected/CGI/resolver-cgi'
+ => 'http://www.ncbi.nlm.nih.gov/Traces/names/names.cgi'
+ );
+
+ my $userRootName = 'repository/user/main/public/root';
+ my $enableCacheName = 'repository/user/main/public/cache-enabled';
+ my %user = (
+ $userRootName => '',
+ 'repository/user/main/public/apps/sra/volumes/sraFlat' => 'sra',
+ 'repository/user/main/public/apps/refseq/volumes/refseq' => 'refseq',
+ 'repository/user/main/public/apps/wgs/volumes/wgsFlat' => 'wgs',
+ $enableCacheName => ''
+ );
+
+ if ($read && $kfg->{repository}) {
+ my $nm = 'repository/site';
+ $kfg->{$nm} = GetKfgNode($nm, 'dont print');
+
+ println;
+ }
+
+ if ($read && $kfg->{repository}) {
+ my $nm = 'repository/remote';
+ $kfg->{$nm} = GetKfgNode($nm, 'dont print');
+ }
+
+ foreach my $nm(keys %remote) {
+ if ($read) {
+ if ($kfg->{'repository/remote'}) {
+ $kfg->{$nm} = GetKfgNode($nm);
+ unless ($kfg->{$nm}) {
+ if ($nm ne $disableRemoteName || ! $DECRYPTION_PKG) {
+ $kfg->{fix_remote} = 1;
+ }
+ }
+ }
+ } else {
+ my $v = $remote{$nm};
+ if (!$kfg->{$nm}) {
+ if (!$v) {
+ unless ($nm eq $disableRemoteName) {
+ println "$nm: unknown";
+ next;
+ }
+ next if ($DECRYPTION_PKG);
+ print "\nWould you like to enable Remote Internet"
+ . " access to NCBI(recommented)? [Y/n] ";
+ my $answer = GetYNAnswer('y', 'n');
+ if ($answer eq 'y') {
+ $v = 'no';
+ } else {
+ println "You will be able to work "
+ . "just with SRR files found locally";
+ $v = 'yes';
+ }
+ }
+ UpdateConfigNode($nm, $v);
+ $updated = 1;
+ } elsif ($v && ($kfg->{$nm} ne $v)) {
+ UpdateConfigNode($nm, $v);
+ $updated = 1;
+ }
+ }
+ }
+
+ if ($read && $kfg->{repository}) {
+ my $nm = 'repository/user';
+ $kfg->{$nm} = GetKfgNode($nm, 'dont print');
+ }
+
+ foreach my $nm(keys %user) {
+ if ($read) {
+ if ($kfg->{'repository/user'}) {
+ my $mode;
+ $mode = 'file' if ($nm eq $userRootName);
+ $kfg->{$nm} = GetKfgNode($nm, $mode);
+ $kfg->{fix_user} = 1 unless ($kfg->{$nm});
+ }
+ } elsif (!$kfg->{$nm}) {
+ my $v = $user{$nm};
+ unless ($v) {
+ next if ($DECRYPTION_PKG);
+ if ($nm eq $userRootName) {
+ my $dflt = '';
+ if ($kfg->{dflt_user_root}) {
+ $dflt = $kfg->{dflt_user_root};
+ }
+ println;
+ print
+ "The SRA Toolkit has the ability to download and cache data.\n" .
+ "Please indicate where data should be stored.\n" .
+ "You should choose a volume with enough free space.\n" .
+ "Path to your Repository ";
+ print "[ $dflt ]: " if ($dflt);
+ my $in = <STDIN>;
+ chomp $in;
+ $in = $dflt unless ($in);
+ if (-e $in) {
+ unless (-d $in) {
+ println "$in: bad path";
+ }
+ } else {
+ println "Directory '$in' does not exist.";
+ print "Would you like to create it? [Y/n] ";
+ my $answer = GetYNAnswer('y', 'y');
+ if ($answer eq 'y') {
+ print "'$in': creating... ";
+ if (mkpath($in)) {
+ println "ok";
+ } else {
+ println "error";
+ }
+ }
+ }
+ $v = Posixify($in);
+ } elsif ($nm eq $enableCacheName) {
+ print
+ "\nWould you like to enable caching of downloaded data? [Y/n] ";
+ my $answer = GetYNAnswer('y', 'y');
+ $v = $answer eq 'n' ? 'false' : 'true';
+ } else {
+ println "$nm: unknown";
+ next;
+ }
+ }
+ UpdateConfigNode($nm, $v);
+ $updated = 1;
+ }
+ }
+
+ println;
+
+ if ($read) {
+ if (!$kfg->{repository} || $kfg->{fix_remote} || $kfg->{fix_user}) {
+ println "Configuration is incorrect";
+ } else {
+ println "Configuration is correct";
+ }
+ }
+
+ return $updated;
+}
+
+sub FixKfg {
+ my ($kfg) = @_;
+
+ if (!$kfg->{repository} || $kfg->{fix_remote} || $kfg->{fix_user}) {
+ print "Your configuration is incomplete. " .
+ "Would you like to fix it? [Y/n] ";
+ my $answer = GetYNAnswer('y', 'n');
+ if ($answer eq 'y') {
+ return Kfg($kfg, 'fix', 'Fixing configuration');
+ } else {
+ println
+ "Warning: Some tools could fail without proper configuration.";
+ }
+ }
+
+ return 0;
+}
+
+sub GetYNAnswer {
+ my ($dflt, $no) = @_;
+ my $in = <STDIN>;
+ chomp $in;
+ if ($in) {
+ if ($in eq 'Y' || $in eq 'y' ||
+ $in eq 'YES' || $in eq 'yes' || $in eq 'Yes')
+ {
+ return 'y';
+ } elsif ($in eq 'N' || $in eq 'n'
+ || $in eq 'NO' || $in eq 'no' || $in eq 'No')
+ {
+ return 'n';
+ } else {
+ return $no;
+ }
+ } else {
+ return $dflt;
+ }
+}
+
+sub Fatal {
my ($msg) = @_;
+
print basename($0);
- println ": FATAL: $msg";
+ println ": Fatal: $msg";
+
exit 1;
}
-sub WARN {
+sub Warn {
my ($msg) = @_;
+
print basename($0);
println ": WARNING: $msg";
}
-################################################################################
# EOF #
################################################################################
diff --git a/doc/help/html/bam-load-help.html b/doc/help/html/bam-load-help.html
new file mode 100644
index 0000000..69bc6fa
--- /dev/null
+++ b/doc/help/html/bam-load-help.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>bam-load help</title>
+</head>
+<body>
+
+<pre>
+Usage:
+bam-load [Options] BAMFILE
+ Load a bam file.
+
+Options:
+ -o, --output=TABLEPATH REQUIRED: path to a table where the table will be put
+ -V, --version this will cause the program to emit the internal
+ version number before any other action
+ -v, --verbose extra information will be output during
+ processing second occurrence on the command line
+ means even more
+ -h, -?, --help print this message
+ -l, --log-level=LEVEL the next token will affect the logging level of
+ the program accepted tokens are the numbers
+ 0-15, fatal, sys, int, err, warn, info
+ , debug1...debug10
+</pre>
+
+</body>
+</html>
diff --git a/doc/help/html/bam-loader-help.html b/doc/help/html/bam-loader-help.html
deleted file mode 100644
index c55de32..0000000
--- a/doc/help/html/bam-loader-help.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<title>bam-loader help</title>
-</head>
-<body>
-
-<pre>
-Usage:
- bam-loader 0.0.1
-
-bam-loader [Options] BAMFILE
- Load a bam file.
-
-Options:
- -o, --output=TABLEPATH REQUIRED: path to a table where the table will be put
- -V, --version this will cause the program to emit the internal
- version number before any other action
- -v, --verbose extra information will be output during
- processing second occurrence on the command line
- means even more
- -h, -?, --help print this message
- -l, --log-level=LEVEL the next token will affect the logging level of
- the program accepted tokens are the numbers
- 0-15, fatal, sys, int, err, warn, info
- , debug1...debug10
-</pre>
-
-</body>
-</html>
diff --git a/doc/help/html/crc32sum-help.html b/doc/help/html/crc32sum-help.html
index 8092dbb..d12b31f 100644
--- a/doc/help/html/crc32sum-help.html
+++ b/doc/help/html/crc32sum-help.html
@@ -7,7 +7,7 @@
<body>
<pre>
-: usage: crc32sum [<option>] file [file...]
+: usage: crc32sum [<option>] file [file...]
options:
-c check CRC32 against given list
diff --git a/doc/help/txt/fastq-dump-help.txt b/doc/help/txt/fastq-dump-help.txt
old mode 100755
new mode 100644
diff --git a/interfaces/align/align-access.h b/interfaces/align/align-access.h
index 106e56c..75f92ea 100644
--- a/interfaces/align/align-access.h
+++ b/interfaces/align/align-access.h
@@ -39,7 +39,12 @@
extern "C" {
#endif
-struct KPath;
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VPath;
+
/*--------------------------------------------------------------------------
* constants
@@ -91,9 +96,9 @@ typedef struct AlignAccessDB AlignAccessDB;
* NB - on Windows, these paths should be converted POSIX-style
*/
ALIGN_EXTERN rc_t CC AlignAccessMgrMakeBAMDB ( const AlignAccessMgr *self,
- const AlignAccessDB **db, struct KPath const *bam );
+ const AlignAccessDB **db, struct VPath const *bam );
ALIGN_EXTERN rc_t CC AlignAccessMgrMakeIndexBAMDB ( const AlignAccessMgr *self,
- const AlignAccessDB **db, struct KPath const *bam, struct KPath const *bam_index );
+ const AlignAccessDB **db, struct VPath const *bam, struct VPath const *bam_index );
/* AddRef
* Release
diff --git a/interfaces/align/align.vschema b/interfaces/align/align.vschema
index 06edb91..d7c35c9 100644
--- a/interfaces/align/align.vschema
+++ b/interfaces/align/align.vschema
@@ -54,7 +54,7 @@ typedef U32 NCBI:align:ploidy;
/* cigar
- * construct "cigar" alignment string
+ * construct "cigar" alignment string or length arrays
*
* "ctype" [ CONST ] - select variant of format
* 0 => both matches and mismatches represented as M
@@ -68,12 +68,23 @@ typedef U32 NCBI:align:ploidy;
*
* "ref_offset" [ DATA ] - a packed sequence of signed offsets to aligned position
* one entry for every true in "has_ref_offset"
+ *
+ * "read_len" [ DATA ] - v2: elem_count defines PLOIDY and values are an actual length of reads in spot
*/
extern function
-ascii NCBI:align:cigar #1 < U8 ctype > ( bool has_mismatch, bool has_ref_offset, I32 ref_offset )
- = ALIGN:cigar;
-extern function U32 NCBI:align:edit_distance #1 ( bool has_mismatch, bool has_ref_offset, I32 ref_offset );
+ascii NCBI:align:cigar #1 < U8 ctype > ( bool has_mismatch, bool has_ref_offset,
+ I32 ref_offset, * INSDC:coord:len ref_len ) = ALIGN:cigar;
+
+extern function < type T >
+T NCBI:align:cigar #2 < U8 ctype > ( bool has_mismatch, bool has_ref_offset,
+ I32 ref_offset, INSDC:coord:len read_len, * INSDC:coord:len ref_len ) = ALIGN:cigar_2;
+extern function U32 NCBI:align:edit_distance #1
+ ( bool has_mismatch, bool has_ref_offset, I32 ref_offset );
+
+extern function U32 NCBI:align:edit_distance #2
+ ( bool has_mismatch, bool has_ref_offset, I32 ref_offset, INSDC:coord:len ref_len, *INSDC:coord:len read_len)
+ = NCBI:align:edit_distance_2;
/* project_from_sequence
* projects column from SEQUENCE
@@ -103,7 +114,7 @@ T NCBI:align:project_from_sequence #1 < ascii col> ( I64 seq_spot_id, INSDC:coor
*/
extern function
INSDC:4na:bin NCBI:align:align_restore_read #1 ( INSDC:4na:bin ref_read, bool has_mismatch,
- INSDC:4na:bin mismatch, bool has_ref_offset, I32 ref_offset)
+ INSDC:4na:bin mismatch, bool has_ref_offset, I32 ref_offset * INSDC:coord:len read_len)
= ALIGN:align_restore_read;
@@ -145,20 +156,6 @@ INSDC:4na:bin NCBI:align:ref_sub_select #1 ( I64 id, INSDC:coord:zero start,
= ALIGN:ref_sub_select;
-/* ref_sub_select_preserve_qual
- * projects from reference
- *
- * "id" [ DATA ]
- *
- * "start" [ DATA ] and "len" [ DATA ]
- *
- * "ref_ploidy" [ DATA, OPTIONAL ]
- */
-extern function
-bool NCBI:align:ref_sub_select_preserve_qual #1 ( I64 id, INSDC:coord:zero start,
- INSDC:coord:len len * U32 ref_ploidy);
-
-
/* ref_restore_read
* restores read from central storage
*
@@ -303,20 +300,36 @@ extern function U32 NCBI:align:get_sam_flags #2 (
extern function INSDC:coord:len NCBI:align:get_left_soft_clip #1
( bool has_ref_offset, I32 ref_offset );
+extern function INSDC:coord:len NCBI:align:get_left_soft_clip #2
+ ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len read_len )
+ = NCBI:align:get_left_soft_clip_2;
+
/* get_right_soft_clip
* compute the length of the soft clip on the right edge of the alignment
*/
extern function INSDC:coord:len NCBI:align:get_right_soft_clip #1
( bool has_mismatch, INSDC:coord:len left_clip * bool has_ref_offset );
+
extern function INSDC:coord:len NCBI:align:get_right_soft_clip #2
( bool has_mismatch, INSDC:coord:len left_clip, bool has_ref_offset, I32 ref_offset )
= NCBI:align:get_right_soft_clip_2;
+extern function INSDC:coord:len NCBI:align:get_right_soft_clip #3
+ ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len ref_len )
+ = NCBI:align:get_right_soft_clip_3;
+
+extern function INSDC:coord:len NCBI:align:get_right_soft_clip #4
+ ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len read_len, INSDC:coord:len ref_len )
+ = NCBI:align:get_right_soft_clip_4;
+
/* get_clipped_cigar
* compute the CIGAR string with the soft clipping removed
*/
extern function ascii NCBI:align:get_clipped_cigar #1 ( ascii cigar );
+extern function < type T >
+T NCBI:align:get_clipped_cigar #2 ( ascii cigar, INSDC:coord:len cigar_len ) = NCBI:align:get_clipped_cigar_2;
+
/* get_clipped_ref_offset
* compute the reference offsets with the soft clipping removed
*/
@@ -330,11 +343,15 @@ extern function I32 NCBI:align:get_clipped_ref_offset #1
extern function < type T > T NCBI:align:clip #1
( T object, INSDC:coord:len left_clip, INSDC:coord:len right_clip);
+extern function < type T > T NCBI:align:clip #2
+ ( T object, INSDC:coord:len read_len, INSDC:coord:len left_clip, INSDC:coord:len right_clip)
+ = NCBI:align:clip_2;
+
/* get_ref_len
* compute reference length from alignment information
*/
extern function INSDC:coord:len NCBI:align:get_ref_len #1
- ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len right_clip );
+ ( bool has_ref_offset, I32 ref_offset, * INSDC:coord:len right_clip );
/* get_mismatch_read
* generate the READ with matching bases replaced with '='
@@ -364,33 +381,6 @@ function bool NCBI:align:get_ref_delete #1
( bool has_mismatch, bool has_ref_offset, I32 ref_offset,
INSDC:coord:len ref_len );
-/* get_ref_preserve_qual
- * compute the positions where corresponding qualities should be preserved
- * when converting to an analysis database. In reference coordinate space.
- * This is imported by generate_preserve_qual.
- * Preserve where:
- * one position to each side of a mismatch
- * two positions to each side of an indel
- */
-function bool NCBI:align:get_ref_preserve_qual #1
- ( bool has_mismatch, bool has_ref_offset, I32 ref_offset,
- INSDC:coord:len ref_len );
-
-/* get_seq_preserve_qual
- * the positions where corresponding qualities should be preserved
- * when converting to an analysis database. In sequence coordinate space.
- */
-function bool NCBI:align:get_seq_preserve_qual #1
- ( bool ref_preserve_qual, bool has_ref_offset, I32 ref_offset );
-
-/* generate_preserve_qual
- * the positions where corresponding qualities should be preserved
- * when converting to an analysis database.
- * This is pulled from get_ref_preserve_qual, piled up, and or'ed together.
- */
-extern function bool NCBI:align:generate_preserve_qual #1
- ( utf8 ref_name, INSDC:coord:len seq_len, U32 max_seq_len );
-
extern function INSDC:quality:phred NCBI:align:compress_quality #1
( INSDC:quality:phred quality, bool preserved );
@@ -398,6 +388,41 @@ extern function INSDC:quality:phred NCBI:align:decompress_quality #1
< INSDC:quality:phred restored_qual_value >
( INSDC:quality:phred cmp_quality, bool preserved );
+/* make_cmp_read_start
+ *
+ */
+extern function INSDC:coord:zero NCBI:align:make_read_start #1
+ (INSDC:coord:len read_len);
+
+/* make_cmp_read_desc
+ * determines whether an element of "operand" is aligned
+ * by looking at the corresponding element of "align_id"
+ *
+ * zeros out unaligned elements of operand, unless "invert" is true,
+ * in which case it zeros out aligned elements.
+ *
+ * "T" [ TYPE ] - type of operand
+ *
+ * "invert" [ CONST ] - if true, invert the logic of which elements
+ * to zero out.
+ *
+ * "operand" [ DATA ] - uncompressed data
+ *
+ * "align_id" [ DATA ] - indication of alignment
+ */
+extern function < type T >
+T NCBI:align:make_cmp_read_desc #1 <bool invert>(T operand, I64 align_id);
+
+/* seq_construct_read
+ * assembles read from aligned and unaligned parts
+ */
+extern function < type T >
+T NCBI:align:seq_construct_read #1 (
+ T aligned, INSDC:coord:len aligned_read_len,
+ T unaligned, INSDC:coord:len unaligned_read_len );
+
+extern function I64 NCBI:align:get_mate_align_id #1 ( I64 spot_id );
+
/*--------------------------------------------------------------------------
* tables
*/
@@ -408,11 +433,9 @@ extern function INSDC:quality:phred NCBI:align:decompress_quality #1
*/
table NCBI:align:tbl:ref_block_cmn #1.0.0
{
- // TBD:
- // Name of Reference table; should be a constant
- // extern column zip_encoding < ascii > REF_TABLE;
readonly column ascii REF_TABLE
- = < ascii > echo < 'REFERENCE' > ();
+ = < ascii > meta:read < "CONFIG/REF_TABLE" > ()
+ | < ascii > echo < 'REFERENCE' > ();
// REF_ID is rowid in Reference Table REF_TABLE
extern column I64 REF_ID
@@ -421,17 +444,20 @@ table NCBI:align:tbl:ref_block_cmn #1.0.0
// this is a redefinition of REF_START
// REF_START is the offset within REFERENCE.READ
extern column INSDC:coord:zero REF_START
- = out_local_ref_start;
+ = out_ref_start;
// global REF_START
extern column U64 GLOBAL_REF_START
= out_global_ref_start;
// REF_LEN the length of a read projection on reference
- // extern column < INSDC:coord:len > izip_encoding REF_LEN;
+ INSDC:coord:len out_ref_len_internal
+ = NCBI:align:get_ref_len ( out_has_ref_offset, out_ref_offset );
+
INSDC:coord:len out_ref_len
= .REF_LEN
- | NCBI:align:get_ref_len ( out_has_ref_offset, out_ref_offset, out_right_clip );
+ | NCBI:align:get_ref_len ( out_has_ref_offset, out_ref_offset, out_right_clip )
+ | out_ref_len_internal;
physical column < INSDC:coord:len > izip_encoding .REF_LEN = REF_LEN;
extern column INSDC:coord:len REF_LEN = out_ref_len;
@@ -448,7 +474,7 @@ table NCBI:align:tbl:ref_block_cmn #1.0.0
* per PLOIDY
*/
readonly column INSDC:coord:zero REF_POS
- = NCBI:align:ref_pos ( out_ref_id, out_local_ref_start );
+ = NCBI:align:ref_pos ( out_ref_id, out_ref_start );
/* REF_NAME
* the name of the reference
@@ -459,7 +485,8 @@ table NCBI:align:tbl:ref_block_cmn #1.0.0
/* REF_SEQ_ID
*/
readonly column ascii REF_SEQ_ID
- = NCBI:align:ref_seq_id ( out_ref_id );
+ = NCBI:align:ref_seq_id ( out_ref_id )
+ | < ascii > echo < '' > ();
};
@@ -473,7 +500,7 @@ table NCBI:align:tbl:global_ref_block #1.0.0
physical < U64 > izip_encoding .GLOBAL_REF_START = GLOBAL_REF_START;
I64 out_ref_id = NCBI:align:local_ref_id ( .GLOBAL_REF_START );
- INSDC:coord:zero out_local_ref_start = NCBI:align:local_ref_start ( .GLOBAL_REF_START );
+ INSDC:coord:zero out_ref_start = NCBI:align:local_ref_start ( .GLOBAL_REF_START );
};
@@ -486,7 +513,7 @@ table NCBI:align:tbl:local_ref_block #1.0.0
I64 out_ref_id = .REF_ID;
physical < I64 > izip_encoding .REF_ID = REF_ID;
- INSDC:coord:zero out_local_ref_start = .REF_START;
+ INSDC:coord:zero out_ref_start = .REF_START;
physical < INSDC:coord:zero > izip_encoding .REF_START = REF_START;
};
@@ -494,7 +521,7 @@ table NCBI:align:tbl:local_ref_block #1.0.0
/* align_cmn
* common interface and implementation for alignment object
*/
-table NCBI:align:tbl:align_cmn #1.1.0
+table NCBI:align:tbl:align_cmn #2
= NCBI:tbl:base_space_common #1.0.3
, NCBI:SRA:tbl:stats #1.2.0
, NCBI:align:tbl:ref_block_cmn #1.0.0
@@ -516,19 +543,28 @@ table NCBI:align:tbl:align_cmn #1.1.0
/* Soft-Clipped data block */
readonly column INSDC:coord:len LEFT_SOFT_CLIP
- = NCBI:align:get_left_soft_clip ( HAS_REF_OFFSET, REF_OFFSET );
+ = NCBI:align:get_left_soft_clip ( HAS_REF_OFFSET, REF_OFFSET, out_read_len );
- INSDC:coord:len out_right_clip = NCBI:align:get_right_soft_clip #2( out_has_mismatch, LEFT_SOFT_CLIP, out_has_ref_offset,out_ref_offset );
+ INSDC:coord:len out_right_clip
+ = NCBI:align:get_right_soft_clip #4 ( out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len )
+ | NCBI:align:get_right_soft_clip #3 ( out_has_ref_offset, out_ref_offset, out_ref_len )
+ | NCBI:align:get_right_soft_clip #2 ( out_has_mismatch, LEFT_SOFT_CLIP, out_has_ref_offset, out_ref_offset );
readonly column INSDC:coord:len RIGHT_SOFT_CLIP = out_right_clip;
readonly column ascii CLIPPED_CIGAR_LONG
- = NCBI:align:get_clipped_cigar ( CIGAR_LONG );
+ = < ascii > NCBI:align:get_clipped_cigar ( CIGAR_LONG, CIGAR_LONG_LEN );
+
+ readonly column INSDC:coord:len CLIPPED_CIGAR_LONG_LEN
+ = < INSDC:coord:len > NCBI:align:get_clipped_cigar ( CIGAR_LONG, CIGAR_LONG_LEN );
readonly column ascii CLIPPED_CIGAR_SHORT
- = NCBI:align:get_clipped_cigar ( CIGAR_SHORT );
+ = < ascii > NCBI:align:get_clipped_cigar ( CIGAR_SHORT, CIGAR_SHORT_LEN );
+ readonly column INSDC:coord:len CLIPPED_CIGAR_SHORT_LEN
+ = < INSDC:coord:len > NCBI:align:get_clipped_cigar ( CIGAR_SHORT, CIGAR_SHORT_LEN );
+
bool out_clipped_has_mismatch
- = < bool > NCBI:align:clip (out_has_mismatch, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+ = < bool > NCBI:align:clip (out_has_mismatch, out_read_len, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
readonly column ascii CLIPPED_HAS_MISMATCH
= < U8 , ascii > map < [ 0 , 1 ] , '01' > ( out_clipped_has_mismatch );
@@ -536,33 +572,26 @@ table NCBI:align:tbl:align_cmn #1.1.0
readonly column bool CLIPPED_HAS_MISMATCH = out_clipped_has_mismatch;
bool out_clipped_has_ref_offset
- = < bool > NCBI:align:clip (HAS_REF_OFFSET, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+ = < bool > NCBI:align:clip (HAS_REF_OFFSET, out_read_len, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
readonly column ascii CLIPPED_HAS_REF_OFFSET
= < U8 , ascii > map < [ 0 , 1 ] , '01' > ( out_clipped_has_ref_offset );
readonly column bool CLIPPED_HAS_REF_OFFSET = out_clipped_has_ref_offset;
+ // TBD cannot be computed right unless HAS_MISMATCH and! READ_LEN is used
readonly column INSDC:dna:text CLIPPED_MISMATCH
- = < INSDC:dna:text > NCBI:align:clip ( out_mismatch_dna_text, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+ = < INSDC:dna:text > NCBI:align:clip #1 ( out_mismatch_dna_text, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
readonly column I32 CLIPPED_REF_OFFSET
= NCBI:align:get_clipped_ref_offset ( HAS_REF_OFFSET, REF_OFFSET );
readonly column INSDC:quality:phred CLIPPED_QUALITY
- = < INSDC:quality:phred > NCBI:align:clip (out_qual_phred, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+ = < INSDC:quality:phred > NCBI:align:clip (out_qual_phred, out_read_len, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
readonly column INSDC:dna:text CLIPPED_READ
- = < INSDC:dna:text > NCBI:align:clip (READ, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+ = < INSDC:dna:text > NCBI:align:clip (READ, out_read_len, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
- bool out_clipped_preserve_qual
- = < bool > NCBI:align:clip (out_seq_preserve_qual, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
-
- readonly column ascii CLIPPED_PRESERVE_QUAL
- = < U8 , ascii > map < [ 0 , 1 ] , '01' > ( out_clipped_preserve_qual );
-
- readonly column bool CLIPPED_PRESERVE_QUAL = out_clipped_preserve_qual;
-
/* Sequence Block */
extern column < NCBI:align:ploidy > izip_encoding PLOIDY;
@@ -595,18 +624,22 @@ table NCBI:align:tbl:align_cmn #1.1.0
INSDC:quality:phred out_raw_qual = < INSDC:quality:phred >
NCBI:align:project_from_sequence < '( INSDC:quality:phred ) QUALITY'> ( .SEQ_SPOT_ID, .SEQ_READ_ID );
INSDC:quality:phred out_qual_phred
- = NCBI:align:decompress_quality < 40 > ( .CMP_QUALITY, PRESERVE_QUAL )
- | NCBI:align:raw_restore_qual ( out_raw_qual, .REF_ORIENTATION );
- readonly column INSDC:quality:text:phred_33 SAM_QUALITY = QUALITY; // simple alias
+ = NCBI:align:raw_restore_qual ( out_raw_qual, .REF_ORIENTATION )
+ | < INSDC:quality:phred > echo < 30 > ( out_4na_bin );
+ readonly column INSDC:quality:text:phred_33 SAM_QUALITY = QUALITY ;
// project read group and name
ascii out_spot_group = < ascii > simple_sub_select < 'SEQUENCE','SPOT_GROUP'> (.SEQ_SPOT_ID);
+
+ INSDC:SRA:spotid_t tmp_seq_spot_id
+ = cast ( .SEQ_SPOT_ID )
+ ;
physical <ascii> zip_encoding .SEQ_NAME = SEQ_NAME;
extern column ascii SEQ_NAME
= .SEQ_NAME
| < ascii > simple_sub_select < 'SEQUENCE','NAME'> (.SEQ_SPOT_ID)
- | sprintf < "%u" > ( .SEQ_SPOT_ID );
+ | sprintf < "%u" > ( tmp_seq_spot_id );
// compute sam flags
/* blows up parser: starts at schema-tbl.c:2138
@@ -646,12 +679,14 @@ table NCBI:align:tbl:align_cmn #1.1.0
INSDC:SRA:read_filter out_rd_filter
= .RD_FILTER
| < INSDC:SRA:read_filter > NCBI:align:project_from_sequence < 'READ_FILTER' > ( .SEQ_SPOT_ID, .SEQ_READ_ID )
- | < INSDC:SRA:read_filter > echo < SRA_READ_FILTER_PASS > ( out_ref_len );
+ | < INSDC:SRA:read_filter > echo < SRA_READ_FILTER_PASS > ( out_read_len );
INSDC:SRA:platform_id out_platform
= .PLATFORM
+ | < INSDC:SRA:platform_id > simple_sub_select < 'SEQUENCE','PLATFORM'> (.SEQ_SPOT_ID)
| < INSDC:SRA:platform_id > echo < SRA_PLATFORM_UNDEFINED > ();
+ U8 out_alignment_count = <U8> NCBI:align:project_from_sequence < 'ALIGNMENT_COUNT' > ( .SEQ_SPOT_ID, .SEQ_READ_ID );
/* out_read_type
* set to SRA_READ_TYPE_FORWARD + SRA_READ_TYPE_BIOLOGICAL
@@ -678,13 +713,15 @@ table NCBI:align:tbl:align_cmn #1.1.0
// MAPQ - single value quality of the mapping; the scale is submitter specific
extern column < I32 > izip_encoding MAPQ;
-
+
extern column INSDC:coord:zero MATE_REF_POS = out_mate_ref_pos;
extern column INSDC:coord:len MATE_REF_LEN = out_mate_ref_len;
extern column I64 MATE_REF_ID = out_mate_ref_id;
extern column I32 TEMPLATE_LEN = out_template_len;
extern column bool MATE_REF_ORIENTATION = out_mate_ref_orientation;
readonly column ascii MATE_REF_NAME = NCBI:align:ref_name ( out_mate_ref_id );
+ readonly column ascii MATE_REF_SEQ_ID = NCBI:align:ref_seq_id( out_mate_ref_id );
+ readonly column U8 ALIGNMENT_COUNT = out_alignment_count;
/********************************
@@ -715,21 +752,14 @@ table NCBI:align:tbl:align_cmn #1.1.0
readonly column INSDC:dna:text REF_READ
= < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( REF_READ );
- // TDB: fix this function
readonly column INSDC:4na:bin REF_READ
- = NCBI:align:ref_sub_select (out_ref_id, out_local_ref_start, out_ref_len, .REF_PLOIDY)
- | NCBI:align:ref_sub_select (out_ref_id, out_local_ref_start, out_ref_len );
-
- bool in_preserve_qual_ref
- = NCBI:align:ref_sub_select_preserve_qual (out_ref_id, out_local_ref_start, out_ref_len, .REF_PLOIDY)
- | NCBI:align:ref_sub_select_preserve_qual (out_ref_id, out_local_ref_start, out_ref_len );
-
- readonly column ascii PRESERVE_QUAL_REF = < U8 , ascii > map < [ 0 , 1 ] , '01' > ( in_preserve_qual_ref );
- readonly column bool PRESERVE_QUAL_REF = in_preserve_qual_ref;
-
- INSDC:quality:phred out_cmp_quality
- = NCBI:align:compress_quality ( CLIPPED_QUALITY, CLIPPED_PRESERVE_QUAL );
+ = NCBI:align:ref_sub_select (out_ref_id, out_ref_start, out_ref_len, .REF_PLOIDY)
+ | NCBI:align:ref_sub_select (out_ref_id, out_ref_start, out_ref_len );
+ INSDC:4na:bin ref_read_internal
+ = NCBI:align:ref_sub_select (out_ref_id, out_ref_start, out_ref_len_internal, .REF_PLOIDY)
+ | NCBI:align:ref_sub_select (out_ref_id, out_ref_start, out_ref_len_internal);
+
// text forms of reads
INSDC:dna:text out_dna_text
= < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_4na_bin );
@@ -739,10 +769,23 @@ table NCBI:align:tbl:align_cmn #1.1.0
= out_raw_read;
// CIGARs
- // TBD: when PLOIDY more than 1
- readonly column ascii CIGAR_LONG = NCBI:align:cigar < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset);
- readonly column ascii CIGAR_SHORT = NCBI:align:cigar < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset);
- readonly column U32 EDIT_DISTANCE = NCBI:align:edit_distance (out_has_mismatch, out_has_ref_offset, out_ref_offset);
+ readonly column ascii CIGAR_LONG
+ = < ascii > NCBI:align:cigar #2 < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len)
+ | < ascii > NCBI:align:cigar #2 < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len);
+ readonly column INSDC:coord:len CIGAR_LONG_LEN
+ = < INSDC:coord:len > NCBI:align:cigar #2 < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len)
+ | < INSDC:coord:len > NCBI:align:cigar #2 < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len);
+ readonly column ascii CIGAR_SHORT
+ = < ascii > NCBI:align:cigar #2 < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len)
+ | < ascii > NCBI:align:cigar #2 < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len);
+ readonly column INSDC:coord:len CIGAR_SHORT_LEN
+ = < INSDC:coord:len > NCBI:align:cigar #2 < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len)
+ | < INSDC:coord:len > NCBI:align:cigar #2 < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len);
+
+ readonly column U32 EDIT_DISTANCE
+ = NCBI:align:edit_distance #2 (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_ref_len, out_read_len)
+ | NCBI:align:edit_distance #2 (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_ref_len)
+ | NCBI:align:edit_distance #1 (out_has_mismatch, out_has_ref_offset, out_ref_offset);
readonly column ascii HAS_MISMATCH = < U8 , ascii > map < [ 0 , 1 ] , '01' > ( out_has_mismatch );
@@ -750,17 +793,6 @@ table NCBI:align:tbl:align_cmn #1.1.0
readonly column ascii SEQ_SPOT_GROUP = out_spot_group;
-/* These columns for calculating the positions where quality is preserved when
- * converting to an analysis database.
- */
- bool out_ref_preserve_qual = NCBI:align:get_ref_preserve_qual ( out_has_mismatch, out_has_ref_offset, out_ref_offset, out_ref_len );
- readonly column ascii REF_PRESERVE_QUAL = < U8 , ascii > map < [ 0 , 1 ] , '01' > ( out_ref_preserve_qual );
- readonly column bool REF_PRESERVE_QUAL = out_ref_preserve_qual;
-
- bool out_seq_preserve_qual = NCBI:align:get_seq_preserve_qual ( in_preserve_qual_ref, out_has_ref_offset, out_ref_offset );
- readonly column ascii PRESERVE_QUAL = < U8 , ascii > map < [ 0 , 1 ] , '01' > ( out_seq_preserve_qual );
- readonly column bool PRESERVE_QUAL = out_seq_preserve_qual;
-
/* These columns are purely informational. */
bool out_ref_mismatch = NCBI:align:get_ref_mismatch ( out_has_mismatch, out_has_ref_offset, out_ref_offset, out_ref_len );
readonly column ascii REF_MISMATCH = < U8 , ascii > map < [ 0 , 1 ] , '01' > ( out_ref_mismatch );
@@ -782,42 +814,61 @@ table NCBI:align:tbl:align_cmn #1.1.0
* alignment transcript is calculated
*/
table NCBI:align:tbl:align_full #1.0.0
- = NCBI:align:tbl:align_cmn #1.1.0
+ = NCBI:align:tbl:align_cmn #2
{
bool out_is_secondary = <bool> echo < true > ();
// restore reads to its raw form (orientation is restored)
+
INSDC:4na:bin out_raw_read
- = < INSDC:4na:bin > simple_sub_select < 'PRIMARY_ALIGNMENT', '( INSDC:4na:bin ) RAW_READ' > (PRIMARY_ALIGNMENT_ID)
+ = < INSDC:4na:bin > simple_sub_select < 'PRIMARY_ALIGNMENT', '( INSDC:4na:bin ) RAW_READ' > (.PRIMARY_ALIGNMENT_ID)
| < INSDC:4na:bin > NCBI:align:project_from_sequence < '( INSDC:4na:bin ) READ'> ( .SEQ_SPOT_ID, .SEQ_READ_ID );
- INSDC:4na:bin out_4na_bin = NCBI:align:raw_restore_read ( out_raw_read, .REF_ORIENTATION );
+ INSDC:4na:bin out_4na_bin
+ = NCBI:align:align_restore_read ( ref_read_internal, out_has_mismatch, tmp_out_mismatch_4na_bin, out_has_ref_offset, out_ref_offset, .READ_LEN )
+ | NCBI:align:align_restore_read ( ref_read_internal, out_has_mismatch, tmp_out_mismatch_4na_bin, out_has_ref_offset, out_ref_offset )
+ | NCBI:align:raw_restore_read ( out_raw_read, .REF_ORIENTATION );
// flags mismatches with the reference
// produced by actual comparison of REF_READ and READ
+ // TMP_HAS_MISMATCH is a hack to speed up retrieval during coverage recalculation
+ column bool_encoding TMP_HAS_MISMATCH;
bool out_has_mismatch
- = NCBI:align:generate_has_mismatch ( REF_READ, READ, out_has_ref_offset, out_ref_offset );
+ = .TMP_HAS_MISMATCH
+ | NCBI:align:generate_has_mismatch ( REF_READ, READ, out_has_ref_offset, out_ref_offset );
+ readonly column bool HAS_MISMATCH = out_has_mismatch;
INSDC:4na:bin out_mismatch_4na_bin
= NCBI:align:generate_mismatch ( REF_READ, READ, out_has_ref_offset, out_ref_offset );
-
+
+ INSDC:4na:bin tmp_out_mismatch_4na_bin = < INSDC:dna:text, INSDC:4na:bin > map < INSDC:4na:map:CHARSET, INSDC:4na:map:BINSET > ( .TMP_MISMATCH );
+
+ // temporary column for reference coverage calculation
+ column < INSDC:dna:text> zip_encoding TMP_MISMATCH;
+
INSDC:dna:text out_mismatch_dna_text
- = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_mismatch_4na_bin );
+ = .TMP_MISMATCH
+ | < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_mismatch_4na_bin );
readonly column INSDC:dna:text MISMATCH = out_mismatch_dna_text;
readonly column INSDC:4na:bin MISMATCH = out_mismatch_4na_bin;
physical column < INSDC:coord:zero > izip_encoding .MATE_REF_POS = MATE_REF_POS;
- INSDC:coord:zero out_mate_ref_pos = .MATE_REF_POS;
+ INSDC:coord:zero out_mate_ref_pos = .MATE_REF_POS
+ | < INSDC:coord:zero > simple_sub_select < '','REF_POS'> (MATE_ALIGN_ID);
physical column < I64 > izip_encoding .MATE_REF_ID = MATE_REF_ID;
- I64 out_mate_ref_id = .MATE_REF_ID;
+ I64 out_mate_ref_id = .MATE_REF_ID
+ | < I64 > simple_sub_select < '','REF_ID'> (MATE_ALIGN_ID);
+ INSDC:coord:len out_mate_ref_len = < INSDC:coord:len > simple_sub_select < '','REF_LEN'> (MATE_ALIGN_ID);
physical column < I32 > izip_encoding .TEMPLATE_LEN = TEMPLATE_LEN;
- I32 out_template_len = .TEMPLATE_LEN;
+ I32 out_template_len = .TEMPLATE_LEN
+ | NCBI:align:template_len(REF_POS,out_mate_ref_pos,out_ref_len,out_mate_ref_len,REF_NAME,MATE_REF_NAME,SEQ_READ_ID);
physical column < bool > izip_encoding .MATE_REF_ORIENTATION = MATE_REF_ORIENTATION;
- bool out_mate_ref_orientation = .MATE_REF_ORIENTATION;
+ bool out_mate_ref_orientation = .MATE_REF_ORIENTATION
+ | < bool > simple_sub_select < '','REF_ORIENTATION'> (MATE_ALIGN_ID);
I64 out_mate_align_id = .MATE_ALIGN_ID;
physical column <I64> izip_encoding .MATE_ALIGN_ID = MATE_ALIGN_ID;
@@ -838,8 +889,8 @@ table NCBI:align:tbl:align_full #1.0.0
* alignment transcript is stored
* original sequence is reconstructed
*/
-table NCBI:align:tbl:compressed_by_reference #1.0.0
- = NCBI:align:tbl:align_cmn #1.1.0
+table NCBI:align:tbl:compressed_by_reference #1.1.0
+ = NCBI:align:tbl:align_cmn #2
{
bool out_is_secondary = <bool> echo < false > ();
@@ -850,7 +901,11 @@ table NCBI:align:tbl:compressed_by_reference #1.0.0
bool out_has_mismatch = .HAS_MISMATCH;
// has number of elements equal to number of true elements in HAS_MISMATCH
- extern column INSDC:dna:text MISMATCH = out_mismatch_dna_text;
+ extern column INSDC:dna:text MISMATCH
+ {
+ read = out_mismatch_dna_text;
+ validate = < INSDC:dna:text > compare ( in_mismatch_dna_text, out_mismatch_dna_text );
+ }
INSDC:dna:text in_mismatch_dna_text
= < INSDC:dna:text, INSDC:dna:text > map < '.acmgrsvtwyhkdbn','NACMGRSVTWYHKDBN' > ( MISMATCH );
@@ -858,24 +913,26 @@ table NCBI:align:tbl:compressed_by_reference #1.0.0
INSDC:4na:bin in_mismatch_4na_bin
= < INSDC:dna:text, INSDC:4na:bin > map < INSDC:4na:map:CHARSET, INSDC:4na:map:BINSET > ( in_mismatch_dna_text );
- physical column < INSDC:4na:bin > zip_encoding .MISMATCH = in_mismatch_4na_bin;
+ extern column < ascii > zip_encoding ALIGN_GROUP;
+ physical column < INSDC:4na:bin > zip_encoding .MISMATCH = in_mismatch_4na_bin;
+
INSDC:4na:bin out_mismatch_4na_bin = .MISMATCH;
INSDC:dna:text out_mismatch_dna_text
= < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_mismatch_4na_bin );
-
I64 out_mate_align_id
= .MATE_ALIGN_ID
- | NCBI:align:not_my_row (primary_align_pair);
+ | NCBI:align:get_mate_align_id (.SEQ_SPOT_ID);
physical column <I64> izip_encoding .MATE_ALIGN_ID = MATE_ALIGN_ID;
extern column I64 MATE_ALIGN_ID = out_mate_align_id;
// restore reads from alignment columns and the reference
- // TBD: update for PLOIDY by looping in REF_READ
- INSDC:4na:bin out_4na_bin = NCBI:align:align_restore_read ( REF_READ,
- out_has_mismatch, .MISMATCH, out_has_ref_offset, out_ref_offset );
+ // optional .READ_LEN size defines PLOIDY
+ INSDC:4na:bin out_4na_bin
+ = NCBI:align:align_restore_read ( ref_read_internal, out_has_mismatch, .MISMATCH, out_has_ref_offset, out_ref_offset, .READ_LEN )
+ | NCBI:align:align_restore_read ( ref_read_internal, out_has_mismatch, .MISMATCH, out_has_ref_offset, out_ref_offset );
// restore reads to its raw form (orientation is restored)
INSDC:4na:bin out_raw_read = NCBI:align:raw_restore_read (out_4na_bin,.REF_ORIENTATION);
@@ -888,6 +945,8 @@ table NCBI:align:tbl:compressed_by_reference #1.0.0
readonly column U32 MATE_EDIT_DISTANCE = < U32 > simple_sub_select < '','EDIT_DISTANCE'> (MATE_ALIGN_ID);
readonly column ascii MATE_CIGAR_LONG = < ascii > simple_sub_select < '','CIGAR_LONG'> (MATE_ALIGN_ID);
readonly column ascii MATE_CIGAR_SHORT = < ascii > simple_sub_select < '','CIGAR_SHORT'> (MATE_ALIGN_ID);
+ readonly column INSDC:coord:len MATE_CIGAR_LONG_LEN = < INSDC:coord:len > simple_sub_select < '','CIGAR_LONG_LEN'> (MATE_ALIGN_ID);
+ readonly column INSDC:coord:len MATE_CIGAR_SHORT_LEN = < INSDC:coord:len > simple_sub_select < '','CIGAR_SHORT_LEN'> (MATE_ALIGN_ID);
I32 out_template_len = NCBI:align:template_len (REF_POS,out_mate_ref_pos,out_ref_len,out_mate_ref_len,REF_NAME,MATE_REF_NAME,SEQ_READ_ID);
};
@@ -896,40 +955,61 @@ table NCBI:align:tbl:compressed_by_reference #1.0.0
/* align_sorted
* deflated alignment data sorted against reference
*/
-table NCBI:align:tbl:align_sorted #1.0.0
- = NCBI:align:tbl:compressed_by_reference #1.0.0
+table NCBI:align:tbl:align_sorted #1.1.0
+ = NCBI:align:tbl:compressed_by_reference #1.1.0
, NCBI:align:tbl:global_ref_block #1.0.0
{
+ // 128K
+ column default limit = 131072;
};
/* align_unsorted
* deflated alignment unsorted data
*/
-table NCBI:align:tbl:align_unsorted #1.0.0
- = NCBI:align:tbl:compressed_by_reference #1.0.0
+table NCBI:align:tbl:align_unsorted #1.1.0
+ = NCBI:align:tbl:compressed_by_reference #1.1.0
, NCBI:align:tbl:local_ref_block #1.0.0
{
+ // 128K
+ column default limit = 131072;
};
/* align_mate_sorted
*/
-table NCBI:align:tbl:align_mate_sorted #1.0.0
+table NCBI:align:tbl:align_mate_sorted #1.0.1
= NCBI:align:tbl:align_full #1.0.0
, NCBI:align:tbl:global_ref_block #1.0.0
{
+ // 128K
+ column default limit = 131072;
};
/* align_mate_unsorted
*/
-table NCBI:align:tbl:align_mate_unsorted #1.0.0
+table NCBI:align:tbl:align_mate_unsorted #1.0.1
= NCBI:align:tbl:align_full #1.0.0
, NCBI:align:tbl:local_ref_block #1.0.0
{
+ // 128K
+ column default limit = 131072;
};
+/* align_allele
+ * alleles coverage extension
+ */
+table NCBI:align:tbl:align_allele #1.1.0
+ = NCBI:align:tbl:align_unsorted #1.1.0
+{
+ extern column < I64 > izip_encoding EVIDENCE_ALIGNMENT_IDS;
+
+ /*
+ INSDC:quality:phred out_qual_phred
+ = < INSDC:quality:phred > echo < 30 > ( out_4na_bin );
+ */
+};
/*--------------------------------------------------------------------------
* seq
@@ -954,11 +1034,14 @@ I64 NCBI:align:sorted:alignment_id_encoding #1.0
table NCBI:align:tbl:seq #1.0.0 =
NCBI:tbl:base_space #2.0.3,
- NCBI:tbl:phred_quality #2.0.3,
+ NCBI:tbl:phred_quality #2.0.4,
NCBI:align:tbl:cmp_base_space #1,
NCBI:SRA:tbl:spotdesc #1.0.2,
NCBI:SRA:tbl:stats #1.2.0
{
+ // 128K
+ column default limit = 131072;
+
// gets primary record in alignment table (size of column is NREADS)
// if sorted - should used special encoding
extern column <I64> izip_encoding PRIMARY_ALIGNMENT_ID;
@@ -973,11 +1056,273 @@ table NCBI:align:tbl:seq #1.0.0 =
ascii out_name_fmt = < ascii > echo < '$R' > ();
// temparary column
- extern column < U32 > izip_encoding TMP_KEY_ID;
+ extern column < U64 > izip_encoding TMP_KEY_ID;
-//Restored READ
+ // restored READ
INSDC:4na:bin out_dcmp_4na_bin
= NCBI:align:seq_restore_read (out_cmp_4na_bin, .PRIMARY_ALIGNMENT_ID, .READ_LEN, .READ_TYPE);
+
+ extern column < U64 > izip_encoding TI;
+};
+
+
+table NCBI:align:tbl:cs_seq #1.1
+{
+ /* writable columns */
+ extern column INSDC:color:text CMP_CSREAD
+ = out_cmp_color_text
+ ;
+
+ extern column < INSDC:dna:text > zip_encoding CS_KEY;
+
+ extern default column < INSDC:quality:phred > zip_encoding QUALITY;
+
+ extern column < I64 > izip_encoding PRIMARY_ALIGNMENT_ID;
+
+ extern column < U8 > zip_encoding ALIGNMENT_COUNT;
+
+ extern column < INSDC:SRA:platform_id > zip_encoding PLATFORM;
+
+ extern column < ascii > zip_encoding LABEL;
+ extern column < INSDC:coord:zero > izip_encoding LABEL_START;
+ extern column < INSDC:coord:len > izip_encoding LABEL_LEN;
+
+ extern column < INSDC:SRA:xread_type > zip_encoding READ_TYPE;
+ extern column < INSDC:coord:zero > izip_encoding READ_START;
+ extern column < INSDC:coord:len > izip_encoding READ_LEN;
+ extern column < INSDC:SRA:read_filter > zip_encoding READ_FILTER;
+
+ extern column < U64 > izip_encoding TMP_KEY_ID;
+
+ extern column < ascii > zip_encoding SPOT_GROUP;
+
+ extern column < U64 > izip_encoding TI;
+
+ /* writing rules */
+ INSDC:x2cs:bin in_cmp_x2cs_bin
+ = < INSDC:color:text, INSDC:x2cs:bin > map < INSDC:x2cs:map:CHARSET, INSDC:x2cs:map:BINSET > ( CMP_CSREAD )
+ ;
+ INSDC:2cs:bin in_cmp_2cs_bin
+ = < INSDC:x2cs:bin, INSDC:2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( in_cmp_x2cs_bin )
+ ;
+ INSDC:x2cs:bin in_cmp_alt_x2cs_bin
+ = < INSDC:x2cs:bin, INSDC:x2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 0, 0, 0, 4 ] > ( in_cmp_x2cs_bin )
+ ;
+ physical column INSDC:2cs:packed .CMP_CSREAD
+ = ( INSDC:2cs:packed ) pack ( in_cmp_2cs_bin )
+ ;
+ physical column < INSDC:x2cs:bin > zip_encoding .CMP_ALTCSREAD
+ = < INSDC:x2cs:bin > trim < ALIGN_LEFT, 0 > ( in_cmp_alt_x2cs_bin )
+ ;
+
+ /* reading rules */
+ INSDC:2cs:packed phys_cmp_2cs_packed
+ = .CMP_CSREAD
+ ;
+ INSDC:x2cs:bin phys_cmp_alt_x2cs_bin
+ = .CMP_ALTCSREAD
+ ;
+ INSDC:2cs:packed phys_2cs_packed
+ = .CSREAD
+ ;
+ INSDC:x2cs:bin phys_alt_x2cs_bin
+ = .ALTCSREAD
+ ;
+ INSDC:2cs:bin out_cmp_2cs_bin
+ = ( INSDC:2cs:bin ) unpack ( phys_cmp_2cs_packed )
+ ;
+ INSDC:2cs:bin out_2cs_bin
+ = ( INSDC:2cs:bin ) unpack ( phys_2cs_packed )
+ ;
+ INSDC:x2cs:bin out_cmp_x2cs_bin
+ = ( INSDC:x2cs:bin ) < U8 > bit_or < ALIGN_RIGHT > ( out_cmp_2cs_bin, phys_cmp_alt_x2cs_bin )
+ | ( INSDC:x2cs:bin ) out_cmp_2cs_bin
+ ;
+ INSDC:x2cs:bin out_x2cs_bin
+ = ( INSDC:x2cs:bin ) < U8 > bit_or < ALIGN_RIGHT > ( out_2cs_bin, phys_alt_x2cs_bin )
+ | ( INSDC:x2cs:bin ) out_2cs_bin
+ ;
+ INSDC:color:text out_cmp_color_text
+ = < INSDC:x2cs:bin, INSDC:color:text > map < INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_cmp_x2cs_bin )
+ ;
+ INSDC:color:text out_color_text
+ = < INSDC:x2cs:bin, INSDC:color:text > map < INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_x2cs_bin )
+ ;
+
+ /* triggers from stats */
+ INSDC:quality:phred in_qual_phred
+ = QUALITY
+ ;
+ INSDC:coord:len in_read_len
+ = READ_LEN
+ ;
+ INSDC:SRA:xread_type in_read_type
+ = READ_TYPE
+ ;
+ ascii in_spot_group
+ = SPOT_GROUP
+ ;
+ trigger meta_stats
+ = NCBI:SRA:cmp_stats_trigger ( in_cmp_x2cs_bin, in_qual_phred, in_read_len, in_read_type, in_spot_group )
+ | NCBI:SRA:cmp_stats_trigger ( in_cmp_x2cs_bin, in_qual_phred, in_read_len, in_read_type )
+ ;
+ trigger qual_stats
+ = NCBI:SRA:phred_stats_trigger #1 ( in_qual_phred )
+ ;
+};
+
+table NCBI:align:view:cs_seq #1.1 = NCBI:align:tbl:cs_seq #1.1
+{
+ // various READ columns
+ default readonly column INSDC:dna:text READ
+ = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_dcmp_4na_bin )
+ | < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_4na_bin )
+ ;
+ readonly column INSDC:4na:bin READ = out_dcmp_4na_bin | out_4na_bin;
+ readonly column INSDC:4na:packed READ = pack ( out_dcmp_4na_bin ) | pack ( out_4na_bin );
+ readonly column INSDC:x2na:bin READ = out_dcmp_x2na_bin | out_x2na_bin;
+ readonly column INSDC:2na:bin READ = out_dcmp_2na_bin | out_2na_bin;
+ INSDC:2na:bin out_dcmp_2na_bin
+ = < INSDC:x2na:bin, INSDC:2na:bin > map < INSDC:x2na:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_dcmp_x2na_bin )
+ ;
+ INSDC:2na:bin out_2na_bin
+ = < INSDC:x2na:bin, INSDC:2na:bin > map < INSDC:x2na:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_x2na_bin )
+ ;
+ readonly column INSDC:2na:packed READ = pack ( out_dcmp_2na_bin ) | pack ( out_2na_bin );
+
+ // decompression in base space
+ INSDC:coord:len cmp_read_len
+ = < INSDC:coord:len > NCBI:align:make_cmp_read_desc #1 < true > ( .READ_LEN, .PRIMARY_ALIGNMENT_ID )
+ ;
+ INSDC:coord:zero cmp_read_start
+ = NCBI:align:make_read_start #1 ( cmp_read_len )
+ ;
+ INSDC:x2na:bin out_cmp_x2na_bin
+ = NCBI:dna_from_color #1 ( out_cmp_x2cs_bin, cmp_read_start, cmp_read_len, .CS_KEY, color_matrix )
+ ;
+ INSDC:x2na:bin out_x2na_bin
+ = NCBI:dna_from_color #1 ( out_x2cs_bin, .READ_START, .READ_LEN, .CS_KEY, color_matrix )
+ ;
+ INSDC:4na:bin out_cmp_4na_bin
+ = < INSDC:x2na:bin, INSDC:4na:bin > map < INSDC:x2na:map:BINSET, [ 1, 2, 4, 8, 15 ] > ( out_cmp_x2na_bin )
+ ;
+ INSDC:4na:bin out_4na_bin
+ = < INSDC:x2na:bin, INSDC:4na:bin > map < INSDC:x2na:map:BINSET, [ 1, 2, 4, 8, 15 ] > ( out_x2na_bin )
+ ;
+ INSDC:4na:bin out_dcmp_4na_bin
+ = NCBI:align:seq_restore_read ( out_cmp_4na_bin, .PRIMARY_ALIGNMENT_ID, .READ_LEN, .READ_TYPE )
+ ;
+
+
+ // various CSREAD columns
+ default readonly column INSDC:color:text CSREAD
+ = < INSDC:x2cs:bin, INSDC:color:text > map < INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_dcmp_x2cs_bin )
+ | out_color_text;
+ readonly column INSDC:x2cs:bin CSREAD = out_dcmp_x2cs_bin | out_x2cs_bin;
+ readonly column INSDC:2cs:bin CSREAD = out_dcmp_2cs_bin | out_2cs_bin;
+ INSDC:2cs:bin out_dcmp_2cs_bin
+ = < INSDC:x2cs:bin, INSDC:2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_dcmp_x2cs_bin )
+ ;
+ readonly column INSDC:2cs:packed CSREAD = pack ( out_dcmp_2cs_bin ) | out_2cs_bin;
+
+
+ // decompression in color space
+ INSDC:x2na:bin out_dcmp_x2na_bin
+ = < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( out_dcmp_4na_bin )
+ ;
+ INSDC:x2cs:bin out_dcmp_x2na_x2cs_bin
+ = NCBI:color_from_dna #1 ( out_dcmp_x2na_bin, .READ_START, .READ_LEN, .CS_KEY, color_matrix )
+ ;
+ INSDC:coord:len aligned_read_len
+ = < INSDC:coord:len > NCBI:align:make_cmp_read_desc #1 < false > ( .READ_LEN, .PRIMARY_ALIGNMENT_ID )
+ ;
+ INSDC:x2cs:bin out_dcmp_x2cs_bin
+ = < INSDC:x2cs:bin > NCBI:align:seq_construct_read #1 ( out_dcmp_x2na_x2cs_bin, .READ_LEN, out_cmp_x2cs_bin, cmp_read_len )
+ ;
+
+ // CS_NATIVE - dynamic
+ U32 cmp_csread_row_len
+ = row_len #1 ( phys_cmp_2cs_packed )
+ ;
+ U32 cmp_csread_not_zero
+ = < U32 > clip < 0, 1 > ( cmp_csread_row_len )
+ ;
+ readonly column bool CS_NATIVE
+ = < U32, bool > map < [ 0, 1 ], [ false, true ] > ( cmp_cs_read_not_zero )
+ ;
+
+ // COLOR_MATRIX
+ readonly column U8 COLOR_MATRIX
+ = color_matrix
+ ;
+ U8 color_matrix
+ = < U8 > echo < INSDC:color:default_matrix > ()
+ ;
+
+ // various QUALITY types
+ readonly column INSDC:quality:text:phred_33 QUALITY
+ = out_qual_text_phred_33
+ | ( INSDC:quality:text:phred_33 ) < B8 > sum < 33 > ( .QUALITY );
+ readonly column INSDC:quality:text:phred_64 QUALITY
+ = out_qual_text_phred_64
+ | ( INSDC:quality:text:phred_64 ) < B8 > sum < 64 > ( .QUALITY );
+
+ // SPOT_LEN
+ INSDC:coord:len spot_len
+ = ( INSDC:coord:len ) row_len ( out_dcmp_4na_bin )
+ ;
+ readonly column INSDC:coord:len SPOT_LEN = spot_len;
+
+ // TRIM_START
+ readonly column INSDC:coord:zero TRIM_START
+ = < INSDC:coord:zero > echo < 0 > ()
+ ;
+ readonly column INSDC:coord:one TRIM_START
+ = < INSDC:coord:one > echo < 1 > ()
+ ;
+ // TRIM_LEN
+ readonly column INSDC:coord:len TRIM_LEN = spot_len;
+
+ // MIN_SPOT_ID
+ readonly column INSDC:SRA:spotid_t MIN_SPOT_ID
+ = < INSDC:SRA:spotid_t > meta:value < "STATS/TABLE/SPOT_MIN" > ()
+ ;
+ // MAX_SPOT_ID
+ readonly column INSDC:SRA:spotid_t MAX_SPOT_ID
+ = < INSDC:SRA:spotid_t > meta:value < "STATS/TABLE/SPOT_MAX" > ()
+ ;
+ // SPOT_COUNT
+ readonly column U64 SPOT_COUNT
+ = < U64 > meta:value < "STATS/TABLE/SPOT_COUNT" > ()
+ ;
+ // BASE_COUNT
+ U64 base_count
+ = < U64 > meta:value < "STATS/TABLE/BASE_COUNT" > ()
+ ;
+ readonly column U64 BASE_COUNT = base_count;
+ // BIO_BASE_COUNT
+ readonly column U64 BIO_BASE_COUNT
+ = < U64 > meta:value < "STATS/TABLE/BIO_BASE_COUNT" > ()
+ ;
+ // CMP_BASE_COUNT
+ readonly column U64 CMP_BASE_COUNT
+ = < U64 > meta:value < "STATS/TABLE/CMP_BASE_COUNT" > ()
+ | base_count
+ ;
+
+ // various PLATFORM
+ // TBD
+
+ // SPOT_ID
+ I64 rowid_64 = row_id ();
+ readonly column INSDC:SRA:spotid_t SPOT_ID
+ = cast ( rowid_64 )
+ ;
+
+ readonly column ascii NAME
+ = sprintf < "%u" > ( SPOT_ID )
+ ;
+
};
@@ -998,7 +1343,7 @@ table NCBI:align:tbl:seq #1.0.0 =
* - 0 < rowlen(.READ)< SEQ_LEN -- the sequence have to be filled with 'N's
*
v***********************************/
-table NCBI:align:tbl:reference #1.1.0 =
+table NCBI:align:tbl:reference #2 =
NCBI:align:tbl:cmp_base_space #1,
NCBI:tbl:base_space #2.0.3,
NCBI:tbl:seqloc #1,
@@ -1060,15 +1405,6 @@ table NCBI:align:tbl:reference #1.1.0 =
// Columns of computed coverages by alignment
- // Preserve Quality bit map
- extern column bool PRESERVE_QUAL = out_preserve_qual;
- physical bool_encoding .PRESERVE_QUAL = PRESERVE_QUAL;
- bool out_preserve_qual
- = .PRESERVE_QUAL
- | NCBI:align:generate_preserve_qual(NAME, SEQ_LEN, .MAX_SEQ_LEN);
-
- readonly default column ascii PRESERVE_QUAL = < U8 , ascii > map < [ 0 , 1 ] , '01' > ( out_preserve_qual );
-
// TBD: use percentiles instead of min/max?
// maximum value clipped at 255 of the coverage density
// for a chunk
@@ -1087,6 +1423,14 @@ table NCBI:align:tbl:reference #1.1.0 =
// List of row ids from alignment tables
extern column < I64 > izip_encoding PRIMARY_ALIGNMENT_IDS;
extern column < I64 > izip_encoding SECONDARY_ALIGNMENT_IDS;
+ extern column < I64 > izip_encoding EVIDENCE_INTERVAL_IDS;
+
+ // both OVERLAP_REF_* columns are array of three elements, matching number of *_IDS columns above.
+ // points back to an offset where the alignments to this chunk start
+ extern column < INSDC:coord:zero > izip_encoding OVERLAP_REF_POS;
+ // indicates the length of the longest tail of the alignmnent to this chunk which start in previous chunks
+ // if value of an element in this col is zero corresponding value of OVERLAP_REF_POS is meaningless
+ extern column < INSDC:coord:len > izip_encoding OVERLAP_REF_LEN;
// Mechanism to seach for NAME
readonly column vdb:row_id_range NAME_RANGE
@@ -1098,31 +1442,46 @@ table NCBI:align:tbl:reference #1.1.0 =
}
// THE DATABASES
-database NCBI:align:db:alignment_sorted #1.1
+database NCBI:align:db:alignment_sorted #1.2.1
{
- table NCBI:align:tbl:reference #1.1 REFERENCE;
- table NCBI:align:tbl:align_sorted #1.0 PRIMARY_ALIGNMENT;
+ table NCBI:align:tbl:reference #2 REFERENCE;
+ table NCBI:align:tbl:align_sorted #1.1 PRIMARY_ALIGNMENT;
table NCBI:align:tbl:align_mate_sorted #1.0 SECONDARY_ALIGNMENT;
table NCBI:align:tbl:seq #1.0 SEQUENCE;
+ table NCBI:align:view:cs_seq #1.1 CS_SEQUENCE;
table NCBI:align:tbl:qstat #1.0 QUAL_STAT;
};
-database NCBI:align:db:alignment_unsorted #1.1
+database NCBI:align:db:alignment_unsorted #1.2.1
{
- table NCBI:align:tbl:reference #1.1 REFERENCE;
- table NCBI:align:tbl:align_unsorted #1.0 PRIMARY_ALIGNMENT;
+ table NCBI:align:tbl:reference #2 REFERENCE;
+ table NCBI:align:tbl:align_unsorted #1.1 PRIMARY_ALIGNMENT;
table NCBI:align:tbl:align_mate_unsorted #1.0 SECONDARY_ALIGNMENT;
table NCBI:align:tbl:seq #1.0 SEQUENCE;
+ table NCBI:align:view:cs_seq #1.1 CS_SEQUENCE;
table NCBI:align:tbl:qstat #1.0 QUAL_STAT;
};
-database NCBI:align:db:alignment_evidence #1.1
+database NCBI:align:db:alignment_evidence #1.2.1
{
- table NCBI:align:tbl:reference #1.1 REFERENCE;
- table NCBI:align:tbl:align_unsorted #1.0 PRIMARY_ALIGNMENT;
+ table NCBI:align:tbl:reference #2 REFERENCE;
+ table NCBI:align:tbl:align_unsorted #1.1 PRIMARY_ALIGNMENT;
table NCBI:align:tbl:align_mate_unsorted #1.0 SECONDARY_ALIGNMENT;
- table NCBI:align:tbl:align_unsorted #1.0 EVIDENCE_INTERVAL;
+ table NCBI:align:tbl:align_allele #1.1 EVIDENCE_INTERVAL;
+ table NCBI:align:tbl:align_mate_unsorted #1.0 EVIDENCE_ALIGNMENT;
+ table NCBI:align:tbl:seq #1.0 SEQUENCE;
+ table NCBI:align:view:cs_seq #1.1 CS_SEQUENCE;
+ table NCBI:align:tbl:qstat #1.0 QUAL_STAT;
+};
+
+database NCBI:align:db:alignment_evidence_sorted #1.0.1
+{
+ table NCBI:align:tbl:reference #2 REFERENCE;
+ table NCBI:align:tbl:align_sorted #1.1 PRIMARY_ALIGNMENT;
+ table NCBI:align:tbl:align_mate_sorted #1.0 SECONDARY_ALIGNMENT;
+ table NCBI:align:tbl:align_allele #1.1 EVIDENCE_INTERVAL;
table NCBI:align:tbl:align_mate_unsorted #1.0 EVIDENCE_ALIGNMENT;
table NCBI:align:tbl:seq #1.0 SEQUENCE;
+ table NCBI:align:view:cs_seq #1.1 CS_SEQUENCE;
table NCBI:align:tbl:qstat #1.0 QUAL_STAT;
};
diff --git a/interfaces/align/alignarc.h b/interfaces/align/alignarc.h
deleted file mode 100644
index ab87c4e..0000000
--- a/interfaces/align/alignarc.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_align_alignarc_
-#define _h_align_alignarc_
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#ifndef _h_align_extern_
- #include <align/extern.h>
-#endif
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*--------------------------------------------------------------------------
- * AlignMgr
- * opaque handle to Alignment Archive
- */
-typedef struct AlignMgr AlignMgr;
-
-
-/*--------------------------------------------------------------------------
- * AlignTable
- * an alignment guy
- */
-typedef struct AlignTable AlignTable;
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_align_alignarc_ */
diff --git a/interfaces/align/bam.h b/interfaces/align/bam.h
index 99e9b1f..09f78a3 100644
--- a/interfaces/align/bam.h
+++ b/interfaces/align/bam.h
@@ -47,7 +47,7 @@ extern "C" {
*/
struct KDirectory;
struct KFile;
-struct KPath;
+struct VPath;
struct AlignAccessDB;
struct AlignAccessAlignmentEnumerator;
@@ -215,14 +215,18 @@ ALIGN_EXTERN bool CC BAMAlignmentHasColorSpace ( const BAMAlignment *self );
*/
ALIGN_EXTERN rc_t CC BAMAlignmentGetCSKey ( const BAMAlignment *self, char cskey[1] );
+ALIGN_EXTERN rc_t CC BAMAlignmentGetCSSeqLen ( const BAMAlignment *self, uint32_t *seqLen );
/* GetCSSequence
- * get the colorspace sequence data [0..ReadLength)
- * caller provides buffer of ReadLength bytes
+ * get the colorspace sequence data [0..seqLen)
+ * caller provides buffer of seqLen bytes
*
- * "csseq" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ * "csseq" [ OUT ] - pointer to a buffer of at least seqLen bytes
+ * "seqLen" [ IN ] - length of sequence from BAMAlignmentGetCSSeqLen
*/
-ALIGN_EXTERN rc_t CC BAMAlignmentGetCSSequence ( const BAMAlignment *self, char csseq[] );
-
+ALIGN_EXTERN rc_t CC BAMAlignmentGetCSSequence ( const BAMAlignment *self, char *csseq, uint32_t seqLen );
+
+ALIGN_EXTERN rc_t CC BAMAlignmentGetCSQuality(BAMAlignment const *cself, uint8_t const **quality, uint8_t *offset);
+
/* GetFlags
* return the raw "flags" bitmap word
@@ -284,15 +288,15 @@ ALIGN_EXTERN rc_t CC BAMAlignmentGetMapQuality ( const BAMAlignment *self, uint8
typedef uint32_t BAMCigarType;
enum BAMCigarTypes
{
- ct_Match = 'M',
- ct_Insert = 'I',
- ct_Delete = 'D',
- ct_Skip = 'N',
- ct_SoftClip = 'S',
- ct_HardClip = 'H',
- ct_Padded = 'P',
- ct_Equal = '=',
- ct_NotEqual = 'X',
+ ct_Match = 'M', /* 0 */
+ ct_Insert = 'I', /* 1 */
+ ct_Delete = 'D', /* 2 */
+ ct_Skip = 'N', /* 3 */
+ ct_SoftClip = 'S', /* 4 */
+ ct_HardClip = 'H', /* 5 */
+ ct_Padded = 'P', /* 6 */
+ ct_Equal = '=', /* 7 */
+ ct_NotEqual = 'X', /* 8 */
ct_Overlap = 'B' /* Complete Genomics extension */
};
@@ -419,34 +423,35 @@ struct BAMOptData
typedef struct BAMOptData BAMOptData;
-#ifndef USE_OLD_BAM_OPT_FOR_EACH
-#define USE_OLD_BAM_OPT_FOR_EACH 0
-#endif
-#if USE_OLD_BAM_OPT_FOR_EACH
-/* Optional data callback function */
-typedef rc_t ( CC * BAMOptionalDataFunction )
- ( void *ctx, const char tag[2], BAMOptDataValueType type,
- const void *value, uint32_t size );
-
-ALIGN_EXTERN rc_t CC BAMAlignmentOptDataForEach
- ( const BAMAlignment *self, void *ctx, BAMOptionalDataFunction callback );
-
-typedef rc_t ( CC * BAMOptionalDataFunction2 )
- ( void *ctx, const char tag[2], const BAMOptData *value );
-
-ALIGN_EXTERN rc_t CC BAMAlignmentOptDataForEach2
- ( const BAMAlignment *self, void *ctx, BAMOptionalDataFunction2 callback );
-
-#else
-
typedef rc_t ( CC * BAMOptionalDataFunction )
( void *ctx, const char tag[2], const BAMOptData *value );
ALIGN_EXTERN rc_t CC BAMAlignmentOptDataForEach
( const BAMAlignment *self, void *ctx, BAMOptionalDataFunction callback );
-#endif
+
+ALIGN_EXTERN bool CC BAMAlignmentHasCGData(BAMAlignment const *self);
+
+ALIGN_EXTERN
+rc_t CC BAMAlignmentGetCGSeqQual(BAMAlignment const *self,
+ char sequence[/* 35 */],
+ uint8_t quality[/* 35 */]);
+
+ALIGN_EXTERN
+rc_t CC BAMAlignmentGetCGCigar(BAMAlignment const *self,
+ uint32_t *cigar,
+ uint32_t cig_max,
+ uint32_t *cig_act);
+
+ALIGN_EXTERN rc_t BAMAlignmentGetTI(BAMAlignment const *self, uint64_t *ti);
+
+ALIGN_EXTERN rc_t BAMAlignmentGetCGAlignGroup(BAMAlignment const *self,
+ char buffer[],
+ size_t max_size,
+ size_t *act_size);
+
+
/*--------------------------------------------------------------------------
* BAMFile
*/
@@ -497,6 +502,10 @@ typedef uint64_t BAMFilePosition;
*/
ALIGN_EXTERN rc_t CC BAMFileMake ( const BAMFile **result, const char *path, ... );
+ALIGN_EXTERN rc_t CC BAMFileMakeWithHeader ( const BAMFile **result,
+ char const headerText[],
+ char const path[], ... );
+
/* MakeWithDir
* open the BAM file specified by path and supplied directory
*
@@ -522,8 +531,8 @@ ALIGN_EXTERN rc_t CC BAMFileMakeWithKFile(const BAMFile **result,
*
* "file" [ IN ] - an open KFile
*/
-ALIGN_EXTERN rc_t CC BAMFileMakeWithKPath(const BAMFile **result,
- struct KPath const *path);
+ALIGN_EXTERN rc_t CC BAMFileMakeWithVPath(const BAMFile **result,
+ struct VPath const *path);
/* ExportBAMFile
* export the BAMFile object in use by the AlignAccessDB, if any
@@ -643,7 +652,7 @@ ALIGN_EXTERN rc_t CC BAMFileGetReadGroupByName ( const BAMFile *self,
*/
ALIGN_EXTERN rc_t CC BAMFileOpenIndex ( const BAMFile *self, const char *path );
-ALIGN_EXTERN rc_t CC BAMFileOpenIndexWithKPath ( const BAMFile *self, struct KPath const *path );
+ALIGN_EXTERN rc_t CC BAMFileOpenIndexWithVPath ( const BAMFile *self, struct VPath const *path );
/* IsIndexed
* returns true if true
@@ -771,8 +780,8 @@ typedef rc_t (CC *BAMValidateCallback)(void *ctx, rc_t result, const BAMValidate
/* Validate
*/
-ALIGN_EXTERN rc_t CC BAMValidate ( struct KPath const *bam,
- struct KPath const *bai,
+ALIGN_EXTERN rc_t CC BAMValidate ( struct VPath const *bam,
+ struct VPath const *bai,
BAMValidateOption options,
BAMValidateCallback callback,
void *callbackContext
diff --git a/interfaces/align/dna-reverse-cmpl.h b/interfaces/align/dna-reverse-cmpl.h
new file mode 100644
index 0000000..82c4783
--- /dev/null
+++ b/interfaces/align/dna-reverse-cmpl.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_align_dna_reverse_cmpl_
+#define _h_align_dna_reverse_cmpl_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ALIGN_EXTERN rc_t CC DNAReverseCompliment(const INSDC_dna_text* seq, INSDC_dna_text* cmpl, uint32_t len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_dna_reverse_cmpl_ */
diff --git a/interfaces/align/iterator.h b/interfaces/align/iterator.h
new file mode 100644
index 0000000..94b92ed
--- /dev/null
+++ b/interfaces/align/iterator.h
@@ -0,0 +1,610 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_align_iterator_
+#define _h_align_iterator_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifndef _h_klib_container_
+#include <klib/container.h>
+#endif
+
+#ifndef _h_insdc_insdc_
+#include <insdc/insdc.h>
+#endif
+
+#ifndef _h_vdb_database_
+#include <vdb/database.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VCursor;
+struct AlignMgr;
+struct ReferenceObj;
+
+
+/*--------------------------------------------------------------------------
+ * AlignmentIterator
+ * walk across a single alignment in reference space
+ */
+typedef struct AlignmentIterator AlignmentIterator;
+
+
+/* Make
+ * create an encapsulation of alignment
+ *
+ * iter [ OUT ] - return parameter for new iterator
+ *
+ * copy [ IN ] - when "true" the data will be copied.
+ * otherwise, pointers will be expected to refer to data
+ * with a lifetime >= that of the iterator being created.
+ *
+ * "ref_pos" [ IN ] and "ref_len" [ IN ] - projection onto reference
+ *
+ * "read" [ IN ] and "read_len" [ IN ] - full sequence of alignment
+ *
+ * "has_mismatch" [ IN ] - describes comparison result of each base
+ * in "read" against the alignment.
+ *
+ * "has_ref_offset" [ IN ] - describes positions of reference offsets
+ *
+ * "ref_offset" [ IN ] and "ref_offset_len" [ IN ] - packed array of
+ * offsets of position against reference.
+ */
+ALIGN_EXTERN rc_t CC AlignMgrMakeAlignmentIterator ( struct AlignMgr const *self,
+ AlignmentIterator **iter,
+ bool copy,
+ INSDC_coord_zero ref_pos,
+ INSDC_coord_len ref_len,
+ const INSDC_4na_bin *read,
+ INSDC_coord_len read_len,
+ const bool *has_mismatch,
+ const bool *has_ref_offset,
+ const int32_t *ref_offset,
+ uint32_t ref_offset_len,
+ INSDC_coord_zero ref_window_start,
+ INSDC_coord_len ref_window_len );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC AlignmentIteratorAddRef ( const AlignmentIterator *self );
+ALIGN_EXTERN rc_t CC AlignmentIteratorRelease ( const AlignmentIterator *self );
+
+
+/* Next
+ * advance position by 1 in reference space
+ * must be called initially to advance to first element
+ *
+ * returns RCState = rcDone when done
+ */
+ALIGN_EXTERN rc_t CC AlignmentIteratorNext ( AlignmentIterator *self );
+
+
+/* State
+ * returns bitmap of state bits and event code at the current position
+ * will return invalid before initial Next message or after final
+ *
+ * bits [ 0..7 ] :
+ * { 0..15 } = 4na mismatch (NACMGRSVTWYHKDBN)
+ * 64 = match
+ * 128 = skip
+ * bit [ 8 ] = have insert if ! 0
+ * bit [ 9 ] = have delete if ! 0
+ * bit [ 10 ] = first base if ! 0
+ * bit [ 11 ] = last base if ! 0
+ * bit [ 31 ] = iterator position is invalid if ! 0
+ * NB - converts state word to negative
+ */
+enum
+{
+ align_iter_match = ( 1 << 8 ),
+ align_iter_skip = ( 1 << 9 ),
+
+ align_iter_insert = ( 1 << 10 ),
+ align_iter_delete = ( 1 << 11 ),
+ align_iter_first = ( 1 << 12 ),
+ align_iter_last = ( 1 << 13 ),
+
+ align_iter_invalid = ( 1 << 31 )
+};
+
+ALIGN_EXTERN int32_t CC AlignmentIteratorState ( const AlignmentIterator *self,
+ INSDC_coord_zero *seq_pos );
+
+
+/* Position
+ * return current position of iterator relative to reference
+ */
+ALIGN_EXTERN rc_t CC AlignmentIteratorPosition ( const AlignmentIterator *self,
+ INSDC_coord_zero *pos );
+
+
+/* BasesInserted
+ * return the number of inserted bases and a pointer to their values
+ *
+ * "bases" [ OUT, NULL OKAY ] - optional output parameter to inserted bases
+ *
+ * returns count of bases inserted at current position
+ */
+ALIGN_EXTERN uint32_t CC AlignmentIteratorBasesInserted
+ ( const AlignmentIterator *self, const INSDC_4na_bin **bases );
+
+
+/* BasesDeleted
+ * return the number of bases deleted at the current position
+ * also returns the location on the reference where the delete starts
+ *
+ * "pos" [ OUT ] - return parameter for location on the reference
+ * where delete starts, and continues for the number of bases given by function return
+ *
+ * returns count of bases deleted at current position
+ */
+ALIGN_EXTERN uint32_t CC AlignmentIteratorBasesDeleted
+ ( const AlignmentIterator *self, INSDC_coord_zero *pos );
+
+
+/*--------------------------------------------------------------------------
+ * PlacementRecord
+ * record describing a placement
+ */
+typedef struct PlacementRecord PlacementRecord;
+struct PlacementRecord
+{
+ DLNode n;
+
+ /* row id of alignment record */
+ int64_t id;
+
+ /* object representing reference sequence */
+ struct ReferenceObj const *ref;
+
+ /* placement position and length on reference */
+ INSDC_coord_zero pos;
+ INSDC_coord_len len;
+
+ /* mapping quality of alignment */
+ int32_t mapq;
+
+ /* spotgroup is now in here too */
+ uint32_t spot_group_len;
+ char * spot_group;
+};
+
+
+/* Cast
+ * cast to an extended object
+ *
+ * "ext" [ IN ] - selects the extended object level
+ * can be placementRecordExtension0 or placementRecordExtension1
+ */
+
+enum { placementRecordExtension0, placementRecordExtension1 };
+
+ALIGN_EXTERN void* CC PlacementRecordCast ( const PlacementRecord *self, uint32_t ext );
+
+
+ALIGN_EXTERN void* CC PlacementRecord_get_ext_data_ptr ( const PlacementRecord *self, uint32_t ext );
+
+
+/* Whack
+ * destroys PlacementRecord and any associated extensions
+ */
+ALIGN_EXTERN void CC PlacementRecordWhack ( const PlacementRecord *self );
+
+
+/* structure of function pointers for creating extensions
+ all function pointers are optional ( NULL OKAY ) */
+typedef struct PlacementRecordExtendFuncs PlacementRecordExtendFuncs;
+struct PlacementRecordExtendFuncs
+{
+ /* opaque pointer to data passed to each function */
+ void *data;
+
+ /* destructor */
+ void ( CC * destroy ) ( void *obj, void *data );
+
+ /* constructor */
+ rc_t ( CC * populate ) ( void *obj, const PlacementRecord *placement,
+ struct VCursor const *curs, INSDC_coord_zero ref_window_start,
+ INSDC_coord_len ref_window_len, void *data );
+
+ /* variable allocation size calculation
+ when non-NULL, takes precedence over "fixed_size" */
+ bool ( CC * filter ) ( struct VCursor const *curs, int64_t row_id,
+ const PlacementRecord *placement, INSDC_coord_zero ref_window_start,
+ INSDC_coord_len ref_window_len, void *data );
+
+ /* variable allocation size calculation
+ when non-NULL, takes precedence over "fixed_size" */
+ rc_t ( CC * alloc_size ) ( struct VCursor const *curs, int64_t row_id, size_t * size, void *data );
+
+ /* fixed allocation size
+ ignored if "alloc_size" is non-NULL,
+ must be non-zero otherwise */
+ size_t fixed_size;
+};
+
+
+/* external functions for extension of a placement record
+ to include ( construct ) an AlignmentIterator */
+ALIGN_EXTERN void CC AlignIteratorRecordDestroy ( void *obj, void *data );
+ALIGN_EXTERN rc_t CC AlignIteratorRecordPopulate ( void *obj,
+ const PlacementRecord *placement, struct VCursor const *curs,
+ INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len, void *data );
+ALIGN_EXTERN rc_t CC AlignIteratorRecordSize ( struct VCursor const *curs, int64_t row_id, size_t * size, void *data );
+
+
+/*--------------------------------------------------------------------------
+ * PlacementIterator
+ * walk across placements from an alignment db within a reference window
+ */
+typedef struct PlacementIterator PlacementIterator;
+
+
+/* Make
+ * create a placement iterator
+ *
+ * "iter" [ OUT ] - return parameter for iterator
+ *
+ * "ref_obj" [ IN, NULL OKAY ] - optional parameter giving an object
+ * representing the reference sequence for this iterator. it will be
+ * inserted into each PlacementRecord (see above) and made available to
+ * outer code.
+ *
+ * "ref_pos" [ IN ] and "ref_len" [ IN ] - window onto reference
+ *
+ * "min_mapq" [ IN ] - minimum map quality value
+ *
+ * "ref_cur" [ IN ] - read-only cursor on REFERENCE table
+ * will be modified as necessary to contain requisite columns
+ * will be opened by iterator.
+ *
+ * "align_cur" [ IN ] - read-only cursor on PRIMARY_ALIGNMENT or SECONDARY_ALIGNMENT
+ * table ( see "secondary" ). will be modified as necessary to contain
+ * requisite columns. will be opened by iterator.
+ *
+ * "ids" [ IN ] - an enum describing which column of alignment ids should
+ * be used when reading "ref"
+ *
+ * "ext_0" [ IN, NULL OKAY ] and "ext_1" [ IN, NULL OKAY ] - optional pointers
+ * to blocks describing how to extend the basic placement record
+ *
+ * rd_group [ IN, NULL OKAY ]
+ * != NULL, non empty string ... produce all alignments with this string as
+ * spot-group ( no matter what the "real" spot-group of the
+ * alignment is )
+ *
+ * != NULL, empty string ... produce all alignments with the "real" spot-group
+ * read from the column "SPOT_GROUP"
+ *
+ * == NULL, ... produce all alignments with no spot-group assigned ( the user
+ * does not wish the data to be read, the alignment to be bined )
+ */
+
+typedef uint8_t align_id_src;
+enum { primary_align_ids, secondary_align_ids, evidence_align_ids };
+
+ALIGN_EXTERN rc_t CC AlignMgrMakePlacementIterator ( struct AlignMgr const *self,
+ PlacementIterator **iter, struct ReferenceObj const *ref_obj,
+ INSDC_coord_zero ref_pos, INSDC_coord_len ref_len, int32_t min_mapq,
+ struct VCursor const *ref_cur, struct VCursor const *align_cur, align_id_src ids,
+ const PlacementRecordExtendFuncs *ext_0, const PlacementRecordExtendFuncs *ext_1,
+ const char * spot_group );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorAddRef ( const PlacementIterator *self );
+ALIGN_EXTERN rc_t CC PlacementIteratorRelease ( const PlacementIterator *self );
+
+
+/* RefWindow
+ * returns the reference identification string and iteration window
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorRefWindow ( const PlacementIterator *self,
+ const char **idstr, INSDC_coord_zero *pos, INSDC_coord_len *len );
+
+
+/* RefObj
+ * returns the Ref-obj, that was used to create this placement-iterator
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorRefObj( const PlacementIterator * self,
+ struct ReferenceObj const ** refobj );
+
+
+/* NextAvailPos
+ * check the next available position having one or more placements
+ *
+ * "pos" [ OUT ] - next position on reference having one or more placements
+ * may return negative position, indicating an alignment that wraps around
+ * a circular reference, and starts in negative space after linearization.
+ *
+ * "len" [ OUT, NULL OKAY ] - optional return parameter for length of
+ * placement at that position
+ *
+ * returns non-zero rc when no window is done
+ * (rcRange, rcDone)
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorNextAvailPos ( const PlacementIterator *self,
+ INSDC_coord_zero *pos, INSDC_coord_len *len );
+
+
+/* NextRecordAt
+ * retrieve a placement at the requested position
+ *
+ * "pos" [ IN ] - required position of the placement
+ * obtained from "NextAvailPos"
+ *
+ * "rec" [ OUT ] - returned record
+ * must be freed via PlacementRecordWhack
+ *
+ * returns non-zero rc when no more placements are available
+ * (rcOffset, rcDone)
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorNextRecordAt ( PlacementIterator *self,
+ INSDC_coord_zero pos, const PlacementRecord **rec );
+
+
+/* NextIdAt
+ * retrieve a row id at the requested position
+ *
+ * "pos" [ IN ] - required position of the placement
+ * obtained from "NextAvailPos"
+ *
+ * "id" [ OUT ] - returned row-id, within domain of align cursor
+ *
+ * "len" [ OUT, NULL OKAY ] - optional return parameter for length of
+ * placement on reference
+ *
+ * returns non-zero rc when no more placements are available
+ * (rcOffset, rcDone)
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorNextIdAt ( PlacementIterator *self,
+ INSDC_coord_zero pos, int64_t *row_id, INSDC_coord_len *len );
+
+
+/*--------------------------------------------------------------------------
+ * PlacementSetIterator
+ * walk across placements from an alignment db within a reference window
+ */
+typedef struct PlacementSetIterator PlacementSetIterator;
+
+
+/* Make
+ * create a placement set iterator
+ *
+ * "iter" [ OUT ] - return parameter for iterator
+ *
+ * "ref_pos" [ IN ] and "ref_len" [ IN ] - window onto reference
+ */
+ALIGN_EXTERN rc_t CC AlignMgrMakePlacementSetIterator ( struct AlignMgr const *self,
+ PlacementSetIterator **iter );
+
+
+/* AddPlacementIterator
+ * adds a placement iterator
+ * used to provide ordered placements within window
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorAddPlacementIterator
+ ( PlacementSetIterator *self, PlacementIterator *pi );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorAddRef ( const PlacementSetIterator *self );
+ALIGN_EXTERN rc_t CC PlacementSetIteratorRelease ( const PlacementSetIterator *self );
+
+
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextReference ( PlacementSetIterator *self,
+ INSDC_coord_zero *first_pos, INSDC_coord_len *len, struct ReferenceObj const ** refobj );
+
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextWindow ( PlacementSetIterator *self,
+ INSDC_coord_zero *first_pos, INSDC_coord_len *len );
+
+/* NextAvailPos
+ * check the next available position having one or more placements
+ *
+ * "pos" [ OUT ] - next position on reference having one or more placements
+ * may return negative position, indicating an alignment that wraps around
+ * a circular reference, and starts in negative space after linearization.
+ *
+ * "len" [ OUT, NULL OKAY ] - optional return parameter for length of
+ * placement at that position
+ *
+ * returns non-zero rc when no more placements are available
+ * TBD - define a proper value
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextAvailPos ( const PlacementSetIterator *self,
+ INSDC_coord_zero *pos, INSDC_coord_len *len );
+
+
+/* NextRecordAt
+ * retrieve a placement at the requested position
+ *
+ * "pos" [ IN ] - required position of the placement
+ * obtained from "NextAvailPos"
+ *
+ * "rec" [ OUT ] - returned record
+ * must be freed via PlacementRecordWhack
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextRecordAt ( PlacementSetIterator *self,
+ INSDC_coord_zero pos, const PlacementRecord **rec );
+
+
+/* NextIdAt
+ * retrieve a row id at the requested position
+ *
+ * "pos" [ IN ] - required position of the placement
+ * obtained from "NextAvailPos"
+ *
+ * "id" [ OUT ] - returned row-id, within domain of align cursor
+ *
+ * "len" [ OUT, NULL OKAY ] - optional return parameter for length of
+ * placement on reference
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextIdAt ( PlacementSetIterator *self,
+ INSDC_coord_zero pos, int64_t *row_id, INSDC_coord_len *len );
+
+
+/*--------------------------------------------------------------------------
+ * ReferenceIterator
+ * walk across placements from an alignment db within a reference window
+ */
+typedef struct ReferenceIterator ReferenceIterator;
+
+
+/* Make
+ * create a reference iterator
+ *
+ * "iter" [ OUT ] - return parameter for iterator
+ *
+ * "ext_1" [ IN, NULL OKAY ] - optional pointer to a block describing how
+ * to extend the align-iterator record
+ *
+ * "min_mapq" [ IN ] - minimum map quality value
+ */
+ALIGN_EXTERN rc_t CC AlignMgrMakeReferenceIterator ( struct AlignMgr const *self,
+ ReferenceIterator **iter, const PlacementRecordExtendFuncs *ext_1, int32_t min_mapq );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorAddRef ( const ReferenceIterator *self );
+ALIGN_EXTERN rc_t CC ReferenceIteratorRelease ( const ReferenceIterator *self );
+
+
+/* AddPlacementIterator
+ * adds a placement iterator
+ * used to provide ordered placements within window
+ */
+#if 0
+ALIGN_EXTERN rc_t CC ReferenceIteratorAddPlacementIterator
+ ( ReferenceIterator *self, PlacementIterator *pi );
+#endif
+
+/* AddPlacements
+ * adds a source for placements (file/table)
+ * used to provide ordered placements within window
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorAddPlacements ( ReferenceIterator *self,
+ struct ReferenceObj const *ref_obj, INSDC_coord_zero ref_pos, INSDC_coord_len ref_len,
+ struct VCursor const *ref, struct VCursor const *align, align_id_src ids,
+ const char * spot_group );
+
+
+/* NextReference
+ * advance to the next reference
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextReference ( ReferenceIterator *self,
+ INSDC_coord_zero *first_pos, INSDC_coord_len *len, struct ReferenceObj const ** refobj );
+
+/* NextWindow
+ * advance to the next window on the reference
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextWindow ( ReferenceIterator *self,
+ INSDC_coord_zero *first_pos, INSDC_coord_len *len );
+
+/* NextSpotGroup
+ * advance to the next spot_group on the reference
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextSpotGroup ( ReferenceIterator *self,
+ const char ** name, size_t * len );
+
+
+/* NextPos
+ * advance to the next position on current reference
+ * resets internal iterator on placements at that position
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextPos ( ReferenceIterator *self, bool skip_empty );
+
+
+/* Position
+ * return current position on the reference
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorPosition ( const ReferenceIterator *self,
+ INSDC_coord_zero *pos, uint32_t * depth, INSDC_4na_bin * base );
+
+
+/* NextPlacement
+ * advance internal iterator to next placement in list
+ * returns a pointer to the next placement object at current position
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextPlacement ( ReferenceIterator *self,
+ const PlacementRecord **rec );
+
+
+/* State
+ * return state of current placement at current position
+ */
+ALIGN_EXTERN int32_t CC ReferenceIteratorState ( const ReferenceIterator *self, INSDC_coord_zero *seq_pos );
+
+
+/* BasesInserted
+ * return the number of inserted bases and a pointer to their values
+ *
+ * "bases" [ OUT, NULL OKAY ] - optional output parameter to inserted bases
+ *
+ * returns count of bases inserted at current position
+ */
+ALIGN_EXTERN uint32_t CC ReferenceIteratorBasesInserted ( const ReferenceIterator *self,
+ const INSDC_4na_bin **bases );
+
+
+/* BasesDeleted
+ * return the number of bases deleted at the current position
+ * also returns the location on the reference where the delete starts
+ *
+ * "pos" [ OUT ] - return parameter for location on the reference
+ * where delete starts, and continues for the number of bases given by function return
+ *
+ * "bases" [ OUT, NULL OKAY ] - optional output parameter to deleted bases
+ *
+ * returns count of bases deleted at current position
+ */
+ALIGN_EXTERN uint32_t CC ReferenceIteratorBasesDeleted ( const ReferenceIterator *self,
+ INSDC_coord_zero *pos, const INSDC_4na_bin **bases );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_iterator_ */
diff --git a/interfaces/align/manager.h b/interfaces/align/manager.h
new file mode 100644
index 0000000..4527f8a
--- /dev/null
+++ b/interfaces/align/manager.h
@@ -0,0 +1,69 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_align_manager_
+#define _h_align_manager_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * AlignMgr
+ * manages the alignment module
+ */
+typedef struct AlignMgr AlignMgr;
+
+/* MakeRead
+ * make for read-only operations
+ * MakeUpdate
+ * make for read/write operations
+ */
+ALIGN_EXTERN rc_t CC AlignMgrMakeRead ( const AlignMgr **mgr );
+ALIGN_EXTERN rc_t CC AlignMgrMakeUpdate ( AlignMgr **mgr );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC AlignMgrAddRef ( const AlignMgr *self );
+ALIGN_EXTERN rc_t CC AlignMgrRelease ( const AlignMgr *self );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_manager_ */
diff --git a/interfaces/align/qstat.vschema b/interfaces/align/qstat.vschema
new file mode 100644
index 0000000..d97c20b
--- /dev/null
+++ b/interfaces/align/qstat.vschema
@@ -0,0 +1,87 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*==========================================================================
+ * VDB Quality Statistics Table
+ */
+version 1;
+
+include 'vdb/vdb.vschema';
+include 'ncbi/ncbi.vschema';
+
+table NCBI:align:tbl:qstat #1.0
+{
+ /* SPOT_GROUP
+ */
+ extern column < ascii > zip_encoding SPOT_GROUP;
+
+ /* CYCLE
+ * machine cycle
+ */
+ extern column < U32 > izip_encoding CYCLE;
+
+ /* KMER
+ * use dimer
+ */
+ extern column INSDC:dna:text KMER;
+
+ /* HPRUN
+ * homopolymer run
+ * number of bases of the same type preceding the current base
+ */
+ extern column < INSDC:coord:len > izip_encoding HPRUN;
+
+ /* GC_CONTENT
+ * number of G's or C's in the 7 bases preceding the current base
+ */
+ extern column < U32 > izip_encoding GC_CONTENT;
+
+ /* ORIG_QUAL
+ * original quality scores
+ */
+ extern column < INSDC:quality:phred > zip_encoding ORIG_QUAL;
+
+ /* MAX_QUAL
+ * max. quality score in read
+ */
+ extern column < INSDC:quality:phred > zip_encoding MAX_QUAL;
+
+ /* NREAD
+ * number of the read
+ */
+ extern column < U8 > zip_encoding NREAD;
+
+ /* TOTAL_COUNT
+ * total count of observed events
+ */
+ extern column < U32 > izip_encoding TOTAL_COUNT;
+
+ /* MISMATCH_COUNT
+ * count of observed mismatches
+ */
+ extern column < U32 > izip_encoding MISMATCH_COUNT;
+
+};
diff --git a/interfaces/align/quality-quantizer.h b/interfaces/align/quality-quantizer.h
new file mode 100644
index 0000000..223ffda
--- /dev/null
+++ b/interfaces/align/quality-quantizer.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#ifndef _h_align_quality_quantizer_
+#define _h_align_quality_quantizer_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* InitMatrix
+ *
+ *
+ */
+ALIGN_EXTERN bool CC QualityQuantizerInitMatrix(uint8_t result[256], char const initializer[]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_quality_quantizer_ */
diff --git a/interfaces/align/reader-refseq.h b/interfaces/align/reader-refseq.h
index 443e0ee..e7c4ac1 100644
--- a/interfaces/align/reader-refseq.h
+++ b/interfaces/align/reader-refseq.h
@@ -50,7 +50,7 @@ ALIGN_EXTERN void CC TableReaderRefSeq_Whack(const TableReaderRefSeq* cself);
ALIGN_EXTERN rc_t CC TableReaderRefSeq_SeqId(const TableReaderRefSeq* cself, const char** id, uint32_t* id_sz);
-ALIGN_EXTERN rc_t CC TableReaderRefSeq_SeqLength(const TableReaderRefSeq* cself, uint64_t* len);
+ALIGN_EXTERN rc_t CC TableReaderRefSeq_SeqLength(const TableReaderRefSeq* cself, INSDC_coord_len* len);
ALIGN_EXTERN rc_t CC TableReaderRefSeq_Circular(const TableReaderRefSeq* cself, bool* circular);
@@ -60,8 +60,8 @@ ALIGN_EXTERN rc_t CC TableReaderRefSeq_MD5(const TableReaderRefSeq* cself, const
/* read a chunk of refseq into buffer from offset up to offset + len
if offset is beyond non-circular refseq size error is returned
*/
-ALIGN_EXTERN rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, int64_t offset, INSDC_coord_len len,
- INSDC_dna_text* buffer, INSDC_coord_len* written);
+ALIGN_EXTERN rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* written);
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/align/reference.h b/interfaces/align/reference.h
new file mode 100644
index 0000000..d105d44
--- /dev/null
+++ b/interfaces/align/reference.h
@@ -0,0 +1,150 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was readten as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_align_reader_reference_
+#define _h_align_reader_reference_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifndef _h_vdb_cursor_
+#include <vdb/cursor.h>
+#endif
+
+#ifndef _h_vdb_table_
+#include <vdb/table.h>
+#endif
+
+#ifndef _h_vdb_database_
+#include <vdb/database.h>
+#endif
+
+#ifndef _h_vdb_manager_
+#include <vdb/manager.h>
+#endif
+
+#ifndef _h_align_iterator_
+#include <align/iterator.h>
+#endif
+
+#ifndef _h_insdc_insdc_
+#include <insdc/insdc.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct VCursor;
+struct PlacementIterator;
+
+enum ReferenceList_Options {
+ ereferencelist_4na = 0x01, /* READ in 4na, otherwise it is DNA */
+ /* next 3 options are used only if iterator is NOT created using existing cursor */
+ ereferencelist_usePrimaryIds = 0x02, /* read PRIMARY_ALIGNMENT_IDS too */
+ ereferencelist_useSecondaryIds = 0x04, /* read SECONDARY_ALIGNMENT_IDS too */
+ ereferencelist_useEvidenceIds = 0x08 /* use EVIDENCE_ALIGNMENT */
+};
+
+typedef struct ReferenceList ReferenceList;
+
+/** name is used to limit only to a single sequence - for quick lookups **/
+/** numbins is used to divide whole reference table in equi-row-bins and show only the bin where the name is falling to **/
+ALIGN_EXTERN rc_t CC ReferenceList_MakeCursor(const ReferenceList** cself, const VCursor* cursor, uint32_t options,
+ const char* name, const uint32_t numbins);
+
+ALIGN_EXTERN rc_t CC ReferenceList_MakeTable(const ReferenceList** cself, const VTable* table, uint32_t options,
+ size_t cache, const char* name, const uint32_t numbins);
+
+ALIGN_EXTERN rc_t CC ReferenceList_MakeDatabase(const ReferenceList** cself, const VDatabase* db, uint32_t options,
+ size_t cache, const char* name, const uint32_t numbins);
+
+ALIGN_EXTERN rc_t CC ReferenceList_MakePath(const ReferenceList** cself, const VDBManager* vmgr, const char* dbpath,
+ uint32_t options, size_t cache,const char *name, const uint32_t numbins);
+
+ALIGN_EXTERN rc_t CC ReferenceList_AddRef(const ReferenceList *cself);
+ALIGN_EXTERN void CC ReferenceList_Release(const ReferenceList* cself);
+
+/* number of items in the list */
+ALIGN_EXTERN rc_t CC ReferenceList_Count(const ReferenceList* cself, uint32_t* count);
+
+typedef struct ReferenceObj ReferenceObj;
+
+/* find object by SEQ_ID and if not found by NAME */
+ALIGN_EXTERN rc_t CC ReferenceList_Find(const ReferenceList* cself, const ReferenceObj** obj, const char* key, size_t key_sz);
+
+/* idx is 0-based */
+ALIGN_EXTERN rc_t CC ReferenceList_Get(const ReferenceList* cself, const ReferenceObj** obj, uint32_t idx);
+
+ALIGN_EXTERN rc_t ReferenceObj_AddRef(const ReferenceObj *cself);
+ALIGN_EXTERN void CC ReferenceObj_Release(const ReferenceObj* cself);
+
+/* internal idx for use in ReferenceList_Get above */
+ALIGN_EXTERN rc_t CC ReferenceObj_Idx(const ReferenceObj* cself, uint32_t* idx);
+/* Gets RowId range for the object */
+ALIGN_EXTERN rc_t CC ReferenceObj_IdRange(const ReferenceObj* cself, int64_t* start, int64_t* stop);
+/* Gets Current bin number if ReferenceList was binned*/
+ALIGN_EXTERN rc_t CC ReferenceObj_Bin(const ReferenceObj* cself, uint32_t* bin);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_SeqId(const ReferenceObj* cself, const char** seqid);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_Name(const ReferenceObj* cself, const char** name);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_SeqLength(const ReferenceObj* cself, INSDC_coord_len* len);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_Circular(const ReferenceObj* cself, bool* circular);
+
+/* check if actual refseq data is located in external table (external == true on return)
+ optionally obtain its path, returned path == NULL means actual refseq is missing
+ if path was requested and obtained caller must free(path)! */
+ALIGN_EXTERN rc_t CC ReferenceObj_External(const ReferenceObj* cself, bool* external, char** path);
+
+/* read a chunk of refseq into buffer from offset up to offset + len
+ if offset is beyond non-circular refseq size error is returned
+ */
+ALIGN_EXTERN rc_t CC ReferenceObj_Read(const ReferenceObj* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* written);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_GetIdCount( const ReferenceObj* cself, int64_t row_id, uint32_t *count );
+
+/* return pointer to iterator for (PRIMARY|SECONDARY)_ALIGNMENT_IDS to a given range on reference,
+ both cursors could be NULL
+ ref_len will be truncated to seq length for non-circular references
+ for other parameters see AlignMgrMakePlacementIterator
+ */
+ALIGN_EXTERN rc_t CC ReferenceObj_MakePlacementIterator ( const ReferenceObj* cself,
+ PlacementIterator **iter,
+ INSDC_coord_zero ref_window_start,
+ INSDC_coord_len ref_window_len, int32_t min_mapq,
+ struct VCursor const *ref_cur, struct VCursor const *align_cur, align_id_src ids,
+ const PlacementRecordExtendFuncs *ext_0, const PlacementRecordExtendFuncs *ext_1,
+ const char * rd_group );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_reader_reference_ */
diff --git a/interfaces/align/refseq-mgr.h b/interfaces/align/refseq-mgr.h
index 936b0a7..bfa73ca 100644
--- a/interfaces/align/refseq-mgr.h
+++ b/interfaces/align/refseq-mgr.h
@@ -50,15 +50,17 @@ ALIGN_EXTERN rc_t CC RefSeqMgr_Make(const RefSeqMgr** cself, const VDBManager* v
ALIGN_EXTERN rc_t CC RefSeqMgr_Release(const RefSeqMgr* cself);
-/* return value if 0 means object was found */
-ALIGN_EXTERN rc_t RefSeqMgr_Exists(const RefSeqMgr* cself, const char* accession, uint32_t accession_sz);
+ALIGN_EXTERN rc_t CC RefSeqMgr_SetCache(RefSeqMgr const *cself, size_t cache, uint32_t keep_open_num);
+
+/* return value if 0 means object was found, path is optional */
+ALIGN_EXTERN rc_t RefSeqMgr_Exists(const RefSeqMgr* cself, const char* accession, uint32_t accession_sz, char** path);
/* Read from refseq ided by seq_id chunk of 'len' bases into provided 'buffer' (must be enough big for len);
on return written has number of bases written
*/
ALIGN_EXTERN rc_t CC RefSeqMgr_Read(const RefSeqMgr* cself, const char* seq_id, uint32_t seq_id_sz,
- int64_t offset, INSDC_coord_len len,
- INSDC_dna_text* buffer, INSDC_coord_len* written);
+ INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* written);
typedef struct RefSeq RefSeq;
@@ -66,12 +68,12 @@ ALIGN_EXTERN rc_t CC RefSeqMgr_GetSeq(const RefSeqMgr* cmgr, const RefSeq** csel
/* Same as RefSeqMgr_Read
*/
-ALIGN_EXTERN rc_t CC RefSeq_Read(const RefSeq* cself, int64_t offset, INSDC_coord_len len,
- INSDC_dna_text* buffer, INSDC_coord_len* written);
+ALIGN_EXTERN rc_t CC RefSeq_Read(const RefSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* written);
ALIGN_EXTERN rc_t CC RefSeq_Circular(const RefSeq* cself, bool* circular);
-ALIGN_EXTERN rc_t CC RefSeq_SeqLength(const RefSeq* cself, uint64_t* len);
+ALIGN_EXTERN rc_t CC RefSeq_SeqLength(const RefSeq* cself, INSDC_coord_len* len);
ALIGN_EXTERN rc_t CC RefSeq_MD5(const RefSeq* cself, const uint8_t** md5);
diff --git a/interfaces/align/refseq.vschema b/interfaces/align/refseq.vschema
new file mode 100644
index 0000000..7ea0dc8
--- /dev/null
+++ b/interfaces/align/refseq.vschema
@@ -0,0 +1,100 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*==========================================================================
+ * VDB Reference Sequence types, functions and tables
+ */
+version 1;
+
+include 'vdb/vdb.vschema';
+include 'ncbi/seq.vschema';
+include 'ncbi/sra.vschema';
+include 'ncbi/stats.vschema';
+
+
+extern function U8 NCBI:refseq:stats #1 ( INSDC:4na:bin seq )
+ = NCBI:refSeq:stats;
+
+table NCBI:refseq:tbl:reference #1.0.2 =
+ NCBI:tbl:base_space #2.0.2,
+ NCBI:tbl:phred_quality #2.0.3,
+ NCBI:tbl:seqloc #1.0,
+ NCBI:SRA:tbl:stats #1.1.2
+{
+ // 128K
+ column default limit = 131072;
+
+ extern column U32 MAX_SEQ_LEN; /* must be static */
+ extern column < ascii > izip_encoding DEF_LINE; /* remainder of defline after SEQ_ID */
+
+ // trigger upconverts to INSDC:dna:text to get MD5
+ trigger table_stats
+ = NCBI:refseq:stats(in_4na_bin);
+
+ readonly column U64 TOTAL_SEQ_LEN
+ = < U64 > meta:value < 'STATS/TOTAL_SEQ_LEN', true >();
+
+ readonly column U8[16] MD5
+ = < U8[16] > meta:read < 'STATS/MD5', true >();
+
+ // indicates if sequence has circular structure
+ // should be static
+ extern column bool_encoding CIRCULAR;
+
+ /* columns:
+ * READ
+ * QUALITY (optional)
+ * SEQ_ID
+ * SEQ_START
+ * SEQ_LEN
+ * MAX_SEQ_LEN
+ * TOTAL_SEQ_LEN
+ * DEF_LINE
+ */
+
+ // make CS_KEY writable
+ INSDC:dna:text in_cs_key
+ = < INSDC:dna:text, INSDC:dna:text > map < 'acgtn', 'ACGTN' > ( CS_KEY );
+ physical column < INSDC:dna:text > zip_encoding .CS_KEY = in_cs_key;
+ // extra columns needed for CS conversion
+ INSDC:coord:zero out_read_start = < INSDC:coord:zero> echo < 0 > ();
+ INSDC:coord:len out_read_len = .SEQ_LEN;
+
+ INSDC:coord:len _alt_in_read_len
+ = READ_LEN
+ | SEQ_LEN;
+
+ INSDC:SRA:xread_type _alt_in_read_type
+ = READ_TYPE
+ | < INSDC:SRA:xread_type > echo < SRA_READ_TYPE_BIOLOGICAL > ();
+
+ INSDC:SRA:xread_type out_read_type
+ = .READ_TYPE
+ | < INSDC:SRA:xread_type > echo < SRA_READ_TYPE_BIOLOGICAL > ();
+};
+
+// older spelling
+alias NCBI:refseq:tbl:reference NCBI:refSeq:tbl:reference;
diff --git a/interfaces/align/seq.vschema b/interfaces/align/seq.vschema
new file mode 100644
index 0000000..9b2f452
--- /dev/null
+++ b/interfaces/align/seq.vschema
@@ -0,0 +1,300 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*==========================================================================
+ * Sequence schema
+ */
+version 1;
+
+include 'vdb/vdb.vschema';
+include 'ncbi/seq.vschema';
+
+
+/* cmp_base_space
+ * table representing compressed reads in base space,
+ * where the bases are only stored for unaligned reads
+ */
+table NCBI:align:tbl:cmp_base_space #1
+ = INSDC:tbl:sequence #1.0.1
+ , NCBI:tbl:dcmp_base_space #1
+{
+ /* CMP_READ
+ * read compressed against a reference sequence
+ */
+
+ // default is IUPAC character representation
+ extern default column INSDC:dna:text CMP_READ
+ {
+ read = out_cmp_dna_text;
+ validate = < INSDC:dna:text > compare ( in_cmp_dna_text, out_cmp_dna_text );
+ }
+
+ // 4na representation
+ extern column INSDC:4na:bin CMP_READ = out_cmp_4na_bin;
+ extern column INSDC:4na:packed CMP_READ = out_cmp_4na_packed;
+
+ // x2na representation - 2na with ambiguity
+ extern column INSDC:x2na:bin CMP_READ = out_cmp_x2na_bin;
+
+ // 2na representation - 2na with no ambiguity
+ extern column INSDC:2na:bin CMP_READ = out_cmp_2na_bin;
+ extern column INSDC:2na:packed CMP_READ = out_cmp_2na_packed;
+
+
+ /* input processing rules
+ */
+
+ // compressed input text
+ INSDC:dna:text in_cmp_dna_text
+ = < INSDC:dna:text, INSDC:dna:text > map < '.acmgrsvtwyhkdbn','NACMGRSVTWYHKDBN' > ( CMP_READ );
+
+ // compressed input 4na bin
+ INSDC:4na:bin in_cmp_4na_bin
+ = < INSDC:4na:bin > range_validate < 0, 15 > ( CMP_READ )
+ | ( INSDC:4na:bin ) unpack ( in_cmp_4na_packed )
+ | < INSDC:dna:text, INSDC:4na:bin > map < INSDC:4na:map:CHARSET, INSDC:4na:map:BINSET > ( in_cmp_dna_text )
+ | < INSDC:x2na:bin, INSDC:4na:bin > map < INSDC:x2na:map:BINSET, [ 1, 2, 4, 8, 15 ] > ( in_cmp_x2na_bin );
+
+ // compressed input 4na packed
+ INSDC:4na:packed in_cmp_4na_packed = CMP_READ;
+
+ // compressed input x2na bin
+ INSDC:x2na:bin in_cmp_x2na_bin
+ = < INSDC:x2na:bin > range_validate < 0, 4 > ( CMP_READ )
+ | < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( in_cmp_4na_bin );
+
+ // compressed input 2na bin
+ INSDC:2na:bin in_cmp_2na_bin
+ = < INSDC:2na:bin > range_validate < 0, 3 > ( CMP_READ )
+ | ( INSDC:2na:bin ) unpack ( in_cmp_2na_packed )
+ | INSDC:SEQ:rand_4na_2na ( in_cmp_4na_bin );
+
+ // compressed input 2na packed
+ INSDC:2na:packed in_cmp_2na_packed = CMP_READ;
+
+ // input 4na alt-read ( ambiguities )
+ INSDC:4na:bin in_cmp_alt_4na_bin
+ = < INSDC:4na:bin, INSDC:4na:bin > map < INSDC:4na:map:BINSET, [ 15,0,0,3,0,5,6,7,0,9,10,11,12,13,14,15 ] > ( in_cmp_4na_bin );
+
+ // preparing a feed into stats column
+ U8 in_cmp_stats_bin = in_cmp_2na_bin;
+
+
+ /* physical columns
+ */
+
+ physical column INSDC:2na:packed .CMP_READ
+ = in_cmp_2na_packed
+ | ( INSDC:2na:packed ) pack ( in_cmp_2na_bin );
+
+ physical column < INSDC:4na:bin > zip_encoding .CMP_ALTREAD
+ = < INSDC:4na:bin > trim < 0, 0 > ( in_cmp_alt_4na_bin );
+
+
+ /* output processing rules
+ */
+
+ // output 2na packed
+ INSDC:2na:packed out_cmp_2na_packed = .CMP_READ;
+
+ // unambiguous unpacked 2na
+ INSDC:2na:bin out_cmp_2na_bin
+ = ( INSDC:2na:bin ) unpack ( out_cmp_2na_packed );
+
+ // output x2na bin
+ INSDC:x2na:bin out_cmp_x2na_bin
+ = < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( out_cmp_4na_bin );
+
+ // output 2na->4na bin
+ INSDC:4na:bin out_cmp_2na_4na_bin
+ = < INSDC:2na:bin, INSDC:4na:bin > map < INSDC:2na:map:BINSET, [ 1, 2, 4, 8 ] > ( out_cmp_2na_bin );
+
+ // output 4na bin
+ INSDC:4na:bin out_cmp_4na_bin
+ = < INSDC:4na:bin > bit_or < ALIGN_RIGHT > ( out_cmp_2na_4na_bin, .CMP_ALTREAD )
+ | out_cmp_2na_4na_bin;
+
+ // synthesized packed 4na
+ INSDC:4na:packed out_cmp_4na_packed
+ = ( INSDC:4na:packed ) pack ( out_cmp_4na_bin );
+
+ // output text
+ INSDC:dna:text out_cmp_dna_text
+ = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_cmp_4na_bin );
+
+
+ /* decompressed sequences
+ * source is out_dcmp_4na_bin - a virtual production
+ */
+
+ // synthesize x2na_bin, 2na_bin and 2na_packed
+ INSDC:x2na:bin out_dcmp_x2na_bin
+ = < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( out_dcmp_4na_bin );
+ INSDC:2na:bin out_dcmp_2na_bin
+ = < INSDC:x2na:bin, INSDC:2na:bin > map < [ 0,1,2,3,4 ], [ 0,1,2,3,0 ] > ( out_dcmp_x2na_bin );
+ INSDC:2na:packed out_dcmp_2na_packed
+ = ( INSDC:2na:packed ) pack ( out_dcmp_2na_bin );
+
+
+ /* INSDC:tbl:sequence inherited productions
+ * cs_native
+ * out_cs_key
+ * out_signal
+ * out_2cs_bin
+ * out_2na_bin
+ * out_4na_bin
+ * out_dna_text
+ * out_x2cs_bin
+ * out_x2na_bin
+ * out_2cs_packed
+ * out_2na_packed
+ * out_4na_packed
+ * out_color_text
+ * out_color_matrix
+ */
+
+ /* NCBI:tbl:dcmp_base_space inherited productions
+ * out_dcmp_4na_bin
+ */
+}
+
+
+/* cmp_color_space
+ * table representing compressed reads in color space,
+ * where the colors are only stored for unaligned reads
+ */
+table NCBI:align:tbl:cmp_color_space #1 =
+ INSDC:tbl:sequence #1.0.1, NCBI:tbl:dcmp_color_space #1
+{
+ /* CMP_CSREAD
+ * read compressed against a reference sequence
+ */
+
+ // default is IUPAC character representation
+ extern default column INSDC:color:text CMP_CSREAD = out_cmp_color_text;
+
+ // x2cs representation - 2cs with ambiguity
+ extern column INSDC:x2cs:bin CMP_CSREAD = out_cmp_x2cs_bin;
+
+ // 2cs representation - 2cs with no ambiguity
+ extern column INSDC:2cs:bin CMP_CSREAD = out_cmp_2cs_bin;
+ extern column INSDC:2cs:packed CMP_CSREAD = out_cmp_2cs_packed;
+
+
+ /* input processing rules
+ */
+
+ // compressed input text
+ INSDC:color:text in_cmp_color_text = CMP_CSREAD;
+
+ // compressed input x2cs bin
+ INSDC:x2cs:bin in_cmp_x2cs_bin
+ = < INSDC:x2cs:bin > range_validate < 0, 4 > ( CMP_CSREAD )
+ | < INSDC:color:text, INSDC:x2cs:bin > map < INSDC:x2cs:map:CHARSET, INSDC:x2cs:map:BINSET > ( in_cmp_color_text );
+
+ // compressed input 2cs bin
+ INSDC:2cs:bin in_cmp_2cs_bin
+ = < INSDC:2cs:bin > range_validate < 0, 3 > ( CMP_CSREAD )
+ | ( INSDC:2cs:bin ) unpack ( in_cmp_2cs_packed )
+ | < INSDC:x2cs:bin, INSDC:2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( in_cmp_x2cs_bin );
+
+ // compressed input 2cs packed
+ INSDC:2cs:packed in_cmp_2cs_packed = CMP_CSREAD;
+
+ // compressed input x2cs alt-read ( ambiguities )
+ INSDC:x2cs:bin in_cmp_alt_x2cs_bin
+ = < INSDC:x2cs:bin, INSDC:x2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 0, 0, 0, 4 ] > ( in_cmp_x2cs_bin );
+
+ // preparing a feed into stats column
+ U8 in_cmp_stats_bin = in_cmp_2cs_bin;
+
+
+ /* physical columns
+ */
+
+ physical column INSDC:2cs:packed .CMP_CSREAD
+ = in_cmp_2cs_packed
+ | ( INSDC:2cs:packed ) pack ( in_cmp_2cs_bin );
+
+ physical column < INSDC:x2cs:bin > zip_encoding .CMP_ALTCSREAD
+ = < INSDC:x2cs:bin > trim < 0, 0 > ( in_cmp_alt_x2cs_bin );
+
+
+ /* output processing rules
+ */
+
+ // compressed output 2cs packed
+ INSDC:2cs:packed out_cmp_2cs_packed = .CMP_CSREAD;
+
+ // unambiguous unpacked 2cs
+ INSDC:2cs:bin out_cmp_2cs_bin
+ = ( INSDC:2cs:bin ) unpack ( out_cmp_2cs_packed );
+
+ // unpacked 2cs with ambiguity
+ INSDC:x2cs:bin out_cmp_x2cs_bin
+ = ( INSDC:x2cs:bin ) < U8 > bit_or < ALIGN_RIGHT > ( out_cmp_2cs_bin, .CMP_ALTCSREAD )
+ | ( INSDC:x2cs:bin ) out_cmp_2cs_bin;
+
+ // output text
+ INSDC:color:text out_cmp_color_text
+ = < INSDC:x2cs:bin, INSDC:color:text > map < INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_cmp_x2cs_bin );
+
+
+ /* decompressed sequences
+ * sources are out_dcmp_x2cs_bin - virtual production
+ */
+
+ // synthesize 2cs_bin and 2cs_packed
+ INSDC:2cs:bin out_dcmp_2cs_bin
+ = < INSDC:x2cs:bin, INSDC:2cs:bin > map < [ 0,1,2,3,4 ], [ 0,1,2,3,0 ] > ( out_dcmp_x2cs_bin );
+ INSDC:2cs:packed out_dcmp_2cs_packed
+ = ( INSDC:2cs:packed ) pack ( out_dcmp_2cs_bin );
+
+
+ /* INSDC:tbl:sequence inherited productions
+ * cs_native
+ * out_cs_key
+ * out_signal
+ * out_2cs_bin
+ * out_2na_bin
+ * out_4na_bin
+ * out_dna_text
+ * out_x2cs_bin
+ * out_x2na_bin
+ * out_2cs_packed
+ * out_2na_packed
+ * out_4na_packed
+ * out_color_text
+ * out_qual_phred
+ * out_color_matrix
+ * out_qual_text_phred_33
+ * out_qual_text_phred_64
+ */
+
+ /* NCBI:tbl:dcmp_color_space inherited productions
+ * out_dcmp_x2cs_bin
+ */
+}
diff --git a/interfaces/align/writer-alignment.h b/interfaces/align/writer-alignment.h
index 5f616a4..a52db48 100644
--- a/interfaces/align/writer-alignment.h
+++ b/interfaces/align/writer-alignment.h
@@ -59,7 +59,9 @@ enum ETableWriterAlgn_ColNames {
ewalgn_cn_HAS_REF_OFFSET,
ewalgn_cn_MISMATCH,
ewalgn_cn_REF_OFFSET,
- ewalgn_cn_Last = ewalgn_cn_REF_OFFSET
+ ewalgn_cn_EVIDENCE_ALIGNMENT_IDS,
+ ewalgn_cn_ALIGN_GROUP,
+ ewalgn_cn_Last = ewalgn_cn_ALIGN_GROUP
};
typedef uint8_t ETableWriterAlgn_TableType;
@@ -74,7 +76,8 @@ enum ETableWriterAlgn_ColOptions {
ewalgn_co_SEQ_SPOT_ID = 0x01, /* SEQ_SPOT_ID will be written with the whole record */
ewalgn_co_TMP_KEY_ID = 0x02, /* use TMP_KEY_ID column, by default not opened */
ewalgn_co_PLOIDY = 0x04, /* ploidy is more than 1, columns PLOIDY, READ_START, READ_LEN needs data */
- ewalgn_co_unsorted = 0x08 /* use the unsorted table scheme */
+ ewalgn_co_unsorted = 0x08, /* use the unsorted table scheme */
+ ewalgn_co_MATE_ALIGN_ID_only = 0x10 /* disable all other MATE_* columns */
};
typedef struct TableWriterAlgnData_struct {
@@ -83,27 +86,29 @@ typedef struct TableWriterAlgnData_struct {
TableWriterData seq_read_id;
TableWriterData tmp_key_id;
- /* filled out by ReferenceMgr_Compress */
- uint32_t ploidy; /* incremented sequentially for each call, set it to 0 for each new spot */
- TableWriterData read_start;
- TableWriterData read_len;
- TableWriterData has_ref_offset;
- TableWriterData ref_offset;
- TableWriterData ref_id; /* unsorted */
- TableWriterData ref_start; /* unsorted */
- TableWriterData global_ref_start; /* sorted */
- /* not used for secondary and evidence alignment table type */
- TableWriterData has_mismatch;
- TableWriterData mismatch;
+ /* BEGIN filled out by ReferenceMgr_Compress */
+ uint32_t ploidy; /* incremented sequentially for each call, must be set to 0 for each new spot */
+ TableWriterData read_start; /* mandatory */
+ TableWriterData read_len; /* mandatory */
+ TableWriterData has_ref_offset; /* mandatory */
+ TableWriterData ref_offset; /* mandatory */
+ TableWriterData ref_id; /* used for unsorted*/
+ TableWriterData ref_start; /* used only for unsorted */
+ TableWriterData global_ref_start; /* used only for sorted */
+ TableWriterData has_mismatch; /* mandatory only for primary */
+ TableWriterData mismatch; /* mandatory only for primary */
+
+ INSDC_coord_len ref_len; /* projection on refseq is same for all alleles! */
/* tmp data, never saved to db */
- TableWriterData effective_offset; /* recalculated based on CIGAR and circularity in Compression */
- TableWriterData ref_len;
- TableWriterData ref_1st_row_id;
- /* filled out by ReferenceMgr_Compress end */
+ /* recalculated offset in reference based on CIGAR and circularity in Compression */
+ INSDC_coord_zero effective_offset;
+ int64_t ref_1st_row_id;
+ /* END filled out by ReferenceMgr_Compress */
TableWriterData ref_orientation;
TableWriterData ref_ploidy;
TableWriterData mapq;
+ TableWriterData align_group; /* set length to 0 if not used */
/* used only only in secondary */
TableWriterData mate_ref_orientation;
@@ -111,6 +116,9 @@ typedef struct TableWriterAlgnData_struct {
TableWriterData mate_ref_pos;
TableWriterData mate_align_id;
TableWriterData template_len;
+
+ /* used only in for ewalgn_tabletype_EvidenceInterval table type */
+ TableWriterData alingment_ids;
} TableWriterAlgnData;
typedef struct TableWriterAlgn TableWriterAlgn;
@@ -133,14 +141,11 @@ ALIGN_EXTERN rc_t CC TableWriterAlgn_Write(const TableWriterAlgn* cself, const T
ALIGN_EXTERN rc_t CC TableWriterAlgn_TmpKeyStart(const TableWriterAlgn* cself);
/* retrieve TMP_KEY value by rowid */
-ALIGN_EXTERN rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t rowid, uint32_t* key_id);
+ALIGN_EXTERN rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t rowid, uint64_t* key_id);
/* assign a SPOT_ID value to row */
ALIGN_EXTERN rc_t CC TableWriterAlgn_Write_SpotId(const TableWriterAlgn* cself, int64_t rowid, int64_t spot_id);
-/* utillity function */
-ALIGN_EXTERN rc_t CC TableWriterAlgn_ReverseCompliment(const INSDC_dna_text* seq, INSDC_dna_text* cmpl, uint32_t len);
-
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/align/writer-reference.h b/interfaces/align/writer-reference.h
index 74dd22a..cfdca83 100644
--- a/interfaces/align/writer-reference.h
+++ b/interfaces/align/writer-reference.h
@@ -39,9 +39,12 @@
extern "C" {
#endif
+struct KFile;
+
enum EReference_Options {
ewrefmgr_co_allREADs = 0x01, /* always write READ */
- ewrefmgr_co_Coverage = 0x02 /* use coverage data, by default not used */
+ ewrefmgr_co_Coverage = 0x02, /* use coverage data, by default not used */
+ ewrefmgr_co_AcceptHardClip = 0x04 /* accept hard clipping in CIGAR */
};
typedef struct ReferenceMgr ReferenceMgr;
@@ -62,51 +65,69 @@ ALIGN_EXTERN rc_t CC ReferenceMgr_Make(const ReferenceMgr** cself, VDatabase* db
const uint32_t options, const char* conf, const char* path, uint32_t max_seq_len,
size_t cache, uint32_t num_open);
-ALIGN_EXTERN rc_t CC ReferenceMgr_Release(const ReferenceMgr* cself, bool commit, uint64_t* rows, bool build_coverage);
+ALIGN_EXTERN rc_t CC ReferenceMgr_Release(const ReferenceMgr* cself, bool commit, uint64_t* const rows, bool build_coverage);
+
+ALIGN_EXTERN rc_t CC ReferenceMgr_SetCache(ReferenceMgr const *const self, size_t cache, uint32_t num_open);
typedef struct ReferenceSeq ReferenceSeq;
/* id: chr12 or NC_000001.3 */
-ALIGN_EXTERN rc_t CC ReferenceMgr_GetSeq(const ReferenceMgr* cself, const ReferenceSeq** seq, const char* id);
+ALIGN_EXTERN rc_t CC ReferenceMgr_GetSeq(const ReferenceMgr* const cself, const ReferenceSeq** const seq, const char* id);
+
+ALIGN_EXTERN rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id, INSDC_coord_len length, const uint8_t md5[16]);
-ALIGN_EXTERN rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id, uint64_t length, const uint8_t md5[16]);
+ALIGN_EXTERN rc_t CC ReferenceMgr_FastaPath(const ReferenceMgr* cself, const char* fasta_path);
+
+ALIGN_EXTERN rc_t CC ReferenceMgr_FastaFile(const ReferenceMgr* cself, struct KFile const* file);
enum EReference_CompressionOptions {
ewrefmgr_cmp_Binary = 0x01, /* binary cigar on input (BAM format: 28+4 bits) */
- ewrefmgr_cmp_NoMismatch = 0x02 /* do not fill out MISMATCH data */
+ ewrefmgr_cmp_Exact = 0x02 /* exact matching no cliping */
};
ALIGN_EXTERN rc_t CC ReferenceMgr_Compress(const ReferenceMgr* cself, uint32_t options,
- const char* id, int64_t offset,
+ const char* id, INSDC_coord_zero offset,
const char* seq, INSDC_coord_len seq_len,
const void* cigar, uint32_t cigar_len,
+ INSDC_coord_zero allele_offset, const char* allele, INSDC_coord_len allele_len,INSDC_coord_zero offset_in_allele,
+ const void* allele_cigar, uint32_t allele_cigar_len,
TableWriterAlgnData* data);
/* Read refseq chunk of 'len' bases into provided 'buffer' (must be enough big for len);
ref_len - on return has number of bases written to the buffer
*/
-ALIGN_EXTERN rc_t CC ReferenceSeq_Read(const ReferenceSeq* cself, int64_t offset, INSDC_coord_len len,
- INSDC_dna_text* buffer, INSDC_coord_len* ref_len);
+ALIGN_EXTERN rc_t CC ReferenceSeq_Read(const ReferenceSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* ref_len);
ALIGN_EXTERN rc_t CC ReferenceSeq_Get1stRow(const ReferenceSeq* cself, int64_t* row_id);
ALIGN_EXTERN rc_t CC ReferenceSeq_Compress(const ReferenceSeq* cself, uint32_t options,
- int64_t offset,
+ INSDC_coord_zero offset,
const char* seq, INSDC_coord_len seq_len,
const void* cigar, uint32_t cigar_len,
+ INSDC_coord_zero allele_offset, const char* allele, INSDC_coord_len allele_len,INSDC_coord_zero offset_in_allele,
+ const void* allele_cigar, uint32_t allele_cigar_len,
TableWriterAlgnData* data);
+enum ReferenceSeqCoverageTableType {
+ ewrefcov_primary_table = 0,
+ ewrefcov_secondary_table,
+ ewrefcov_evidence_table
+};
typedef struct ReferenceSeqCoverage_struct {
+ /* based only on primary and secondary */
uint8_t high;
uint8_t low;
uint32_t mismatches;
uint32_t indels;
- TableWriterData primary_ids;
- TableWriterData secondary_ids;
+ /* in that order (use enum above): prim, 2nd, evidence */
+ INSDC_coord_zero overlap_ref_pos[3];
+ INSDC_coord_len overlap_ref_len[3];
+ TableWriterData ids[3];
} ReferenceSeqCoverage;
-ALIGN_EXTERN rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, int64_t offset, const ReferenceSeqCoverage* data);
+ALIGN_EXTERN rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, INSDC_coord_zero offset, const ReferenceSeqCoverage* data);
ALIGN_EXTERN rc_t CC ReferenceSeq_Release(const ReferenceSeq* cself);
diff --git a/interfaces/align/writer-refseq.h b/interfaces/align/writer-refseq.h
index 0dedcbd..6a12d09 100644
--- a/interfaces/align/writer-refseq.h
+++ b/interfaces/align/writer-refseq.h
@@ -68,8 +68,10 @@ typedef struct TableWriterRefSeq TableWriterRefSeq;
ALIGN_EXTERN rc_t CC TableWriterRefSeq_Make(const TableWriterRefSeq** cself, VDBManager* mgr, const char* schema_path,
const char* table_path, const uint32_t options);
-/* rows optional here */
-ALIGN_EXTERN rc_t CC TableWriterRefSeq_Whack(const TableWriterRefSeq* cself, bool commit, uint64_t* rows);
+/* rows optional here, app signature is mandatory */
+ALIGN_EXTERN rc_t CC TableWriterRefSeq_Whack(const TableWriterRefSeq* cself, bool commit, uint64_t* rows,
+ const char* argv0, const char* argv0_date,
+ const char* app_name, ver_t app_version);
ALIGN_EXTERN rc_t CC TableWriterRefSeq_WriteDefault(const TableWriterRefSeq* cself,
enum ETableWriterRefSeq_ColNames col, const TableWriterData* data);
diff --git a/interfaces/align/writer-sequence.h b/interfaces/align/writer-sequence.h
index a0cfbc5..3282b07 100644
--- a/interfaces/align/writer-sequence.h
+++ b/interfaces/align/writer-sequence.h
@@ -53,7 +53,8 @@ enum ETableWriterSeq_ColNames {
ewseq_cn_TMP_KEY_ID,
ewseq_cn_SPOT_GROUP,
ewseq_cn_READ_FILTER,
- ewseq_cn_Last = ewseq_cn_READ_FILTER
+ ewseq_cn_TI,
+ ewseq_cn_Last = ewseq_cn_TI
};
enum ETableWriterSeq_ColOptions {
@@ -61,8 +62,9 @@ enum ETableWriterSeq_ColOptions {
ewseq_co_FullQuality = 0x02, /* write full quality values, by default [1,10,20,30] */
ewseq_co_AlignData = 0x04, /* PRIMARY_ALIGNMENT_ID, ALIGNMENT_COUNT will be written with the whole record */
ewseq_co_NoLabelData = 0x08, /* LABEL and related columns will not be written */
- ewseq_co_ColorSpace = 0x10, /* CMP_CSREAD will be written instead of CMP_READ */
- ewseq_co_SpotGroup = 0x20 /* SPOT_GROUP will be written */
+ ewseq_co_ColorSpace = 0x10, /* CMP_CSREAD will be written instead of CMP_READ */
+ ewseq_co_SpotGroup = 0x20, /* SPOT_GROUP will be written */
+ ewseq_co_TI = 0x40 /* TI will be written */
};
typedef struct TableWriterSeqData_struct {
@@ -77,10 +79,13 @@ typedef struct TableWriterSeqData_struct {
TableWriterData read_type;
TableWriterData read_start;
TableWriterData read_len;
- uint32_t tmp_key_id;
+ uint64_t tmp_key_id;
TableWriterData spot_group;
TableWriterData cskey;
TableWriterData read_filter;
+ TableWriterData no_quantize_mask;
+ TableWriterData platform;
+ TableWriterData ti;
} TableWriterSeqData;
typedef struct TableWriterSeq TableWriterSeq;
@@ -129,8 +134,9 @@ ALIGN_EXTERN rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Tab
ALIGN_EXTERN rc_t CC TableWriterSeq_TmpKeyStart(const TableWriterSeq* cself);
/* retrieve TMP_KEY value by rowid */
-ALIGN_EXTERN rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t rowid, uint32_t *key_id);
+ALIGN_EXTERN rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t rowid, uint64_t *key_id);
+/* passing rowid == 0 will cause the cursor to be flushed */
ALIGN_EXTERN rc_t CC TableWriterSeq_WriteAlignmentData(const TableWriterSeq* cself, int64_t rowid,
const TableWriterData* primary_alignment_id,
const TableWriterData* alignment_count);
diff --git a/interfaces/cc/gcc/i386/atomic.h b/interfaces/cc/gcc/i386/atomic.h
index 111462a..f0abfc2 100644
--- a/interfaces/cc/gcc/i386/atomic.h
+++ b/interfaces/cc/gcc/i386/atomic.h
@@ -35,6 +35,7 @@
extern "C" {
#endif
+typedef int atomic_int;
typedef struct atomic32_t atomic_t;
/* ( * v ) */
diff --git a/interfaces/cc/gcc/i386/fmtdef.h b/interfaces/cc/gcc/i386/fmtdef.h
deleted file mode 100644
index d51c88f..0000000
--- a/interfaces/cc/gcc/i386/fmtdef.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_fmtdef_
-#define _h_fmtdef_
-
-/* int64_t is "long long int" in 32 bit */
-#define LD64 "lld"
-#define LU64 "llu"
-#define LX64 "llX"
-#define Lx64 "llx"
-
-/* size_t is traditionally "unsigned int"
- although it should have been "long unsigned int" */
-#define LUSZ "u"
-#define LXSZ "X"
-#define LxSZ "x"
-
-#endif /* _h_fmtdef_ */
diff --git a/interfaces/cc/gcc/noarch/bitstr.h b/interfaces/cc/gcc/noarch/bitstr.h
index b28ec12..2bb5bd0 100644
--- a/interfaces/cc/gcc/noarch/bitstr.h
+++ b/interfaces/cc/gcc/noarch/bitstr.h
@@ -41,19 +41,19 @@
extern "C" {
#endif
-/* bitcpy
- * copy a string of bits from source to dest
- *
- * both source and dest may have non-byte aligned pointers
- * the number of bits to copy need not be byte aligned
- *
- * depending upon architecture and OS conventions, the word
- * size may be adjusted to 1, 2, or 4 bytes, where the base
- * pointers are always word aligned.
- *
- * bits in memory are always treated as big-endian, meaning
- * that on multi-byte fetches and stores, we perform byte-swapping
- * if there are shifts or masks
+/* bitcpy
+ * copy a string of bits from source to dest
+ *
+ * both source and dest may have non-byte aligned pointers
+ * the number of bits to copy need not be byte aligned
+ *
+ * depending upon architecture and OS conventions, the word
+ * size may be adjusted to 1, 2, or 4 bytes, where the base
+ * pointers are always word aligned.
+ *
+ * bits in memory are always treated as big-endian, meaning
+ * that on multi-byte fetches and stores, we perform byte-swapping
+ * if there are shifts or masks
*/
static __inline__
void bitcpy ( void *dbase, bitsz_t doff, const void *sbase, bitsz_t soff, bitsz_t sz )
@@ -155,7 +155,8 @@ void bitcpy ( void *dbase, bitsz_t doff, const void *sbase, bitsz_t soff, bitsz_
for ( acc <<= WRDSIZE, i = 0; i < scountz; acc <<= WRDSIZE )
{
dst [ i ] = BSWAP ( reg );
- acc |= BSWAP ( src [ ++ i ] );
+ ++ i;
+ acc |= BSWAP ( src [ i ] );
reg = ( WRD ) ( acc >> shift );
}
diff --git a/interfaces/cc/gcc/v128.h b/interfaces/cc/gcc/v128.h
new file mode 100644
index 0000000..e16e31b
--- /dev/null
+++ b/interfaces/cc/gcc/v128.h
@@ -0,0 +1,1088 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_v128_
+#define _h_v128_
+
+#include <stdint.h>
+#include <x86intrin.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef int8_t v128_i8_t __attribute__ ((vector_size (16),__may_alias__));
+typedef uint8_t v128_u8_t __attribute__ ((vector_size (16),__may_alias__));
+typedef int16_t v128_i16_t __attribute__ ((vector_size (16),__may_alias__));
+typedef int32_t v128_i32_t __attribute__ ((vector_size (16),__may_alias__));
+typedef int64_t v128_i64_t __attribute__ ((vector_size (16),__may_alias__));
+typedef uint16_t v128_u16_t __attribute__ ((vector_size (16),__may_alias__));
+typedef uint32_t v128_u32_t __attribute__ ((vector_size (16),__may_alias__));
+typedef uint64_t v128_u64_t __attribute__ ((vector_size (16),__may_alias__));
+typedef float v128_f_t __attribute__ ((vector_size (16),__may_alias__));
+typedef double v128_d_t __attribute__ ((vector_size (16),__may_alias__));
+
+/* NOTE:
+ * these types are to hide perceived flaws in the Intel/GCC code
+ * don't use them outside of this file. uint8_t, int8_t and int64_t all
+ * fail to compile so the above types can't be used within this file in some
+ * places.
+ */
+typedef char v128_c_t __attribute__ ((vector_size (16),__may_alias__));
+typedef long long int v128_lli_t __attribute__ ((vector_size (16),__may_alias__));
+
+
+#if USE_VEC_REG
+
+/* SSE
+ movss
+ movaps
+ movups
+ movlps
+ movhps
+ movlhps
+ movhlps
+*/
+
+#ifdef __MMX__
+/* MMX
+ v8qi __builtin_ia32_paddb (v8qi, v8qi)
+ v4hi __builtin_ia32_paddw (v4hi, v4hi)
+ v2si __builtin_ia32_paddd (v2si, v2si)
+ v8qi __builtin_ia32_psubb (v8qi, v8qi)
+ v4hi __builtin_ia32_psubw (v4hi, v4hi)
+ v2si __builtin_ia32_psubd (v2si, v2si)
+ v8qi __builtin_ia32_paddsb (v8qi, v8qi)
+ v4hi __builtin_ia32_paddsw (v4hi, v4hi)
+ v8qi __builtin_ia32_psubsb (v8qi, v8qi)
+ v4hi __builtin_ia32_psubsw (v4hi, v4hi)
+ v8qi __builtin_ia32_paddusb (v8qi, v8qi)
+ v4hi __builtin_ia32_paddusw (v4hi, v4hi)
+ v8qi __builtin_ia32_psubusb (v8qi, v8qi)
+ v4hi __builtin_ia32_psubusw (v4hi, v4hi)
+ v4hi __builtin_ia32_pmullw (v4hi, v4hi)
+ v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
+ di __builtin_ia32_pand (di, di)
+ di __builtin_ia32_pandn (di,di)
+ di __builtin_ia32_por (di, di)
+ di __builtin_ia32_pxor (di, di)
+ v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
+ v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
+ v2si __builtin_ia32_pcmpeqd (v2si, v2si)
+ v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
+ v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
+ v2si __builtin_ia32_pcmpgtd (v2si, v2si)
+ v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
+ v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
+ v2si __builtin_ia32_punpckhdq (v2si, v2si)
+ v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
+ v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
+ v2si __builtin_ia32_punpckldq (v2si, v2si)
+ v8qi __builtin_ia32_packsswb (v4hi, v4hi)
+ v4hi __builtin_ia32_packssdw (v2si, v2si)
+ v8qi __builtin_ia32_packuswb (v4hi, v4hi)
+
+ v4hi __builtin_ia32_psllw (v4hi, v4hi)
+ v2si __builtin_ia32_pslld (v2si, v2si)
+ v1di __builtin_ia32_psllq (v1di, v1di)
+ v4hi __builtin_ia32_psrlw (v4hi, v4hi)
+ v2si __builtin_ia32_psrld (v2si, v2si)
+ v1di __builtin_ia32_psrlq (v1di, v1di)
+ v4hi __builtin_ia32_psraw (v4hi, v4hi)
+ v2si __builtin_ia32_psrad (v2si, v2si)
+ v4hi __builtin_ia32_psllwi (v4hi, int)
+ v2si __builtin_ia32_pslldi (v2si, int)
+ v1di __builtin_ia32_psllqi (v1di, int)
+ v4hi __builtin_ia32_psrlwi (v4hi, int)
+ v2si __builtin_ia32_psrldi (v2si, int)
+ v1di __builtin_ia32_psrlqi (v1di, int)
+ v4hi __builtin_ia32_psrawi (v4hi, int)
+ v2si __builtin_ia32_psradi (v2si, int)
+*/
+#endif
+
+#ifdef __SSE__
+/* SSE
+ v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
+ v8qi __builtin_ia32_pavgb (v8qi, v8qi)
+ v4hi __builtin_ia32_pavgw (v4hi, v4hi)
+ v1di __builtin_ia32_psadbw (v8qi, v8qi)
+ v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
+ v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
+ v8qi __builtin_ia32_pminub (v8qi, v8qi)
+ v4hi __builtin_ia32_pminsw (v4hi, v4hi)
+ int __builtin_ia32_pextrw (v4hi, int)
+ v4hi __builtin_ia32_pinsrw (v4hi, int, int)
+ int __builtin_ia32_pmovmskb (v8qi)
+ void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
+ void __builtin_ia32_movntq (di *, di)
+ void __builtin_ia32_sfence (void)
+
+ int __builtin_ia32_comieq (v4sf, v4sf)
+ int __builtin_ia32_comineq (v4sf, v4sf)
+ int __builtin_ia32_comilt (v4sf, v4sf)
+ int __builtin_ia32_comile (v4sf, v4sf)
+ int __builtin_ia32_comigt (v4sf, v4sf)
+ int __builtin_ia32_comige (v4sf, v4sf)
+ int __builtin_ia32_ucomieq (v4sf, v4sf)
+ int __builtin_ia32_ucomineq (v4sf, v4sf)
+ int __builtin_ia32_ucomilt (v4sf, v4sf)
+ int __builtin_ia32_ucomile (v4sf, v4sf)
+ int __builtin_ia32_ucomigt (v4sf, v4sf)
+ int __builtin_ia32_ucomige (v4sf, v4sf)
+ v4sf __builtin_ia32_addps (v4sf, v4sf)
+ v4sf __builtin_ia32_subps (v4sf, v4sf)
+ v4sf __builtin_ia32_mulps (v4sf, v4sf)
+ v4sf __builtin_ia32_divps (v4sf, v4sf)
+ v4sf __builtin_ia32_addss (v4sf, v4sf)
+ v4sf __builtin_ia32_subss (v4sf, v4sf)
+ v4sf __builtin_ia32_mulss (v4sf, v4sf)
+ v4sf __builtin_ia32_divss (v4sf, v4sf)
+ v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpltps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpleps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpordps (v4sf, v4sf)
+ v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
+ v4si __builtin_ia32_cmpltss (v4sf, v4sf)
+ v4si __builtin_ia32_cmpless (v4sf, v4sf)
+ v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
+ v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
+ v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
+ v4si __builtin_ia32_cmpnless (v4sf, v4sf)
+ v4si __builtin_ia32_cmpordss (v4sf, v4sf)
+ v4sf __builtin_ia32_maxps (v4sf, v4sf)
+ v4sf __builtin_ia32_maxss (v4sf, v4sf)
+ v4sf __builtin_ia32_minps (v4sf, v4sf)
+ v4sf __builtin_ia32_minss (v4sf, v4sf)
+ v4sf __builtin_ia32_andps (v4sf, v4sf)
+ v4sf __builtin_ia32_andnps (v4sf, v4sf)
+ v4sf __builtin_ia32_orps (v4sf, v4sf)
+ v4sf __builtin_ia32_xorps (v4sf, v4sf)
+ v4sf __builtin_ia32_movss (v4sf, v4sf)
+ v4sf __builtin_ia32_movhlps (v4sf, v4sf)
+ v4sf __builtin_ia32_movlhps (v4sf, v4sf)
+ v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
+ v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
+ v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
+ v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
+ v2si __builtin_ia32_cvtps2pi (v4sf)
+ int __builtin_ia32_cvtss2si (v4sf)
+ v2si __builtin_ia32_cvttps2pi (v4sf)
+ int __builtin_ia32_cvttss2si (v4sf)
+ v4sf __builtin_ia32_rcpps (v4sf)
+ v4sf __builtin_ia32_rsqrtps (v4sf)
+ v4sf __builtin_ia32_sqrtps (v4sf)
+ v4sf __builtin_ia32_rcpss (v4sf)
+ v4sf __builtin_ia32_rsqrtss (v4sf)
+ v4sf __builtin_ia32_sqrtss (v4sf)
+ v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
+*/
+static __inline
+v128_u8_t op_SHUFPS ( v128_u8_t vin1, v128_u8_t vin2, const int mask )
+ __attribute__ ((always_inline));
+
+static __inline
+v128_u8_t op_SHUFPS (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+{
+ return ( v128_u8_t ) __builtin_ia32_shufps ((v128_f_t)vin1, (v128_f_t)vin2, mask);
+}
+
+ /*
+ void __builtin_ia32_movntps (float *, v4sf)
+ int __builtin_ia32_movmskps (v4sf)
+
+v4sf __builtin_ia32_loadaps (float *)
+Generates the movaps machine instruction as a load from memory.
+void __builtin_ia32_storeaps (float *, v4sf)
+Generates the movaps machine instruction as a store to memory.
+v4sf __builtin_ia32_loadups (float *)
+Generates the movups machine instruction as a load from memory.
+void __builtin_ia32_storeups (float *, v4sf)
+Generates the movups machine instruction as a store to memory.
+v4sf __builtin_ia32_loadsss (float *)
+Generates the movss machine instruction as a load from memory.
+void __builtin_ia32_storess (float *, v4sf)
+Generates the movss machine instruction as a store to memory.
+v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)
+Generates the movhps machine instruction as a load from memory.
+v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)
+Generates the movlps machine instruction as a load from memory
+void __builtin_ia32_storehps (v2sf *, v4sf)
+Generates the movhps machine instruction as a store to memory.
+void __builtin_ia32_storelps (v2sf *, v4sf)
+Generates the movlps machine instruction as a store to memory.
+*/
+#endif
+
+#ifdef __SSE2__
+/* sse2
+ int __builtin_ia32_comisdeq (v2df, v2df)
+ int __builtin_ia32_comisdlt (v2df, v2df)
+ int __builtin_ia32_comisdle (v2df, v2df)
+ int __builtin_ia32_comisdgt (v2df, v2df)
+ int __builtin_ia32_comisdge (v2df, v2df)
+ int __builtin_ia32_comisdneq (v2df, v2df)
+ int __builtin_ia32_ucomisdeq (v2df, v2df)
+ int __builtin_ia32_ucomisdlt (v2df, v2df)
+ int __builtin_ia32_ucomisdle (v2df, v2df)
+ int __builtin_ia32_ucomisdgt (v2df, v2df)
+ int __builtin_ia32_ucomisdge (v2df, v2df)
+ int __builtin_ia32_ucomisdneq (v2df, v2df)
+ v2df __builtin_ia32_cmpeqpd (v2df, v2df)
+ v2df __builtin_ia32_cmpltpd (v2df, v2df)
+ v2df __builtin_ia32_cmplepd (v2df, v2df)
+ v2df __builtin_ia32_cmpgtpd (v2df, v2df)
+ v2df __builtin_ia32_cmpgepd (v2df, v2df)
+ v2df __builtin_ia32_cmpunordpd (v2df, v2df)
+ v2df __builtin_ia32_cmpneqpd (v2df, v2df)
+ v2df __builtin_ia32_cmpnltpd (v2df, v2df)
+ v2df __builtin_ia32_cmpnlepd (v2df, v2df)
+ v2df __builtin_ia32_cmpngtpd (v2df, v2df)
+ v2df __builtin_ia32_cmpngepd (v2df, v2df)
+ v2df __builtin_ia32_cmpordpd (v2df, v2df)
+ v2df __builtin_ia32_cmpeqsd (v2df, v2df)
+ v2df __builtin_ia32_cmpltsd (v2df, v2df)
+ v2df __builtin_ia32_cmplesd (v2df, v2df)
+ v2df __builtin_ia32_cmpunordsd (v2df, v2df)
+ v2df __builtin_ia32_cmpneqsd (v2df, v2df)
+ v2df __builtin_ia32_cmpnltsd (v2df, v2df)
+ v2df __builtin_ia32_cmpnlesd (v2df, v2df)
+ v2df __builtin_ia32_cmpordsd (v2df, v2df)
+ v2di __builtin_ia32_paddq (v2di, v2di)
+ v2di __builtin_ia32_psubq (v2di, v2di)
+ v2df __builtin_ia32_addpd (v2df, v2df)
+ v2df __builtin_ia32_subpd (v2df, v2df)
+ v2df __builtin_ia32_mulpd (v2df, v2df)
+ v2df __builtin_ia32_divpd (v2df, v2df)
+ v2df __builtin_ia32_addsd (v2df, v2df)
+ v2df __builtin_ia32_subsd (v2df, v2df)
+ v2df __builtin_ia32_mulsd (v2df, v2df)
+ v2df __builtin_ia32_divsd (v2df, v2df)
+ v2df __builtin_ia32_minpd (v2df, v2df)
+ v2df __builtin_ia32_maxpd (v2df, v2df)
+ v2df __builtin_ia32_minsd (v2df, v2df)
+ v2df __builtin_ia32_maxsd (v2df, v2df)
+ v2df __builtin_ia32_andpd (v2df, v2df)
+ v2df __builtin_ia32_andnpd (v2df, v2df)
+ v2df __builtin_ia32_orpd (v2df, v2df)
+ v2df __builtin_ia32_xorpd (v2df, v2df)
+ v2df __builtin_ia32_movsd (v2df, v2df)
+ v2df __builtin_ia32_unpckhpd (v2df, v2df)
+ v2df __builtin_ia32_unpcklpd (v2df, v2df)
+ v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
+ v4si __builtin_ia32_paddd128 (v4si, v4si)
+ v2di __builtin_ia32_paddq128 (v2di, v2di)
+ v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
+ v4si __builtin_ia32_psubd128 (v4si, v4si)
+ v2di __builtin_ia32_psubq128 (v2di, v2di)
+ v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
+ v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
+ v2di __builtin_ia32_pand128 (v2di, v2di)
+ v2di __builtin_ia32_pandn128 (v2di, v2di)
+ v2di __builtin_ia32_por128 (v2di, v2di)
+ v2di __builtin_ia32_pxor128 (v2di, v2di)
+ v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
+ v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
+ v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
+ v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
+ v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
+ v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
+ v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
+ v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
+ v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
+ v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
+ v4si __builtin_ia32_punpckldq128 (v4si, v4si)
+ v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
+ v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
+ v8hi __builtin_ia32_packssdw128 (v4si, v4si)
+ v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
+ v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
+ void __builtin_ia32_maskmovdqu (v16qi, v16qi)
+ v2df __builtin_ia32_loadupd (double *)
+ void __builtin_ia32_storeupd (double *, v2df)
+ v2df __builtin_ia32_loadhpd (v2df, double const *)
+ v2df __builtin_ia32_loadlpd (v2df, double const *)
+ int __builtin_ia32_movmskpd (v2df)
+ int __builtin_ia32_pmovmskb128 (v16qi)
+ void __builtin_ia32_movnti (int *, int)
+ void __builtin_ia32_movntpd (double *, v2df)
+ void __builtin_ia32_movntdq (v2df *, v2df)
+ v4si __builtin_ia32_pshufd (v4si, int)
+ v8hi __builtin_ia32_pshuflw (v8hi, int)
+ v8hi __builtin_ia32_pshufhw (v8hi, int)
+ v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
+ v2df __builtin_ia32_sqrtpd (v2df)
+ v2df __builtin_ia32_sqrtsd (v2df)
+ v2df __builtin_ia32_shufpd (v2df, v2df, int)
+*/
+static __inline
+v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ __attribute__ ((always_inline));
+
+static __inline
+v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+{
+ return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+}
+
+/*
+ v2df __builtin_ia32_cvtdq2pd (v4si)
+ v4sf __builtin_ia32_cvtdq2ps (v4si)
+ v4si __builtin_ia32_cvtpd2dq (v2df)
+ v2si __builtin_ia32_cvtpd2pi (v2df)
+ v4sf __builtin_ia32_cvtpd2ps (v2df)
+ v4si __builtin_ia32_cvttpd2dq (v2df)
+ v2si __builtin_ia32_cvttpd2pi (v2df)
+ v2df __builtin_ia32_cvtpi2pd (v2si)
+ int __builtin_ia32_cvtsd2si (v2df)
+ int __builtin_ia32_cvttsd2si (v2df)
+ long long __builtin_ia32_cvtsd2si64 (v2df)
+ long long __builtin_ia32_cvttsd2si64 (v2df)
+ v4si __builtin_ia32_cvtps2dq (v4sf)
+ v2df __builtin_ia32_cvtps2pd (v4sf)
+ v4si __builtin_ia32_cvttps2dq (v4sf)
+ v2df __builtin_ia32_cvtsi2sd (v2df, int)
+ v2df __builtin_ia32_cvtsi642sd (v2df, long long)
+ v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
+ v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
+ void __builtin_ia32_clflush (const void *)
+ void __builtin_ia32_lfence (void)
+ void __builtin_ia32_mfence (void)
+ v16qi __builtin_ia32_loaddqu (const char *)
+ void __builtin_ia32_storedqu (char *, v16qi)
+ v1di __builtin_ia32_pmuludq (v2si, v2si)
+ v2di __builtin_ia32_pmuludq128 (v4si, v4si)
+ v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
+ v4si __builtin_ia32_pslld128 (v4si, v4si)
+ v2di __builtin_ia32_psllq128 (v2di, v2di)
+ v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
+ v4si __builtin_ia32_psrld128 (v4si, v4si)
+ v2di __builtin_ia32_psrlq128 (v2di, v2di)
+ v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
+ v4si __builtin_ia32_psrad128 (v4si, v4si)
+ v2di __builtin_ia32_pslldqi128 (v2di, int)
+ v8hi __builtin_ia32_psllwi128 (v8hi, int)
+ v4si __builtin_ia32_pslldi128 (v4si, int)
+*/
+
+static __inline
+v128_u8_t op_PSLLDI128 ( v128_u8_t vin, const int bit_count )
+ __attribute__ ((always_inline));
+
+static __inline
+v128_u8_t op_PSLLDI128 (v128_u8_t vin, const int bit_count)
+{
+ return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+}
+
+/*
+ v2di __builtin_ia32_psllqi128 (v2di, int)
+ v2di __builtin_ia32_psrldqi128 (v2di, int)
+ v8hi __builtin_ia32_psrlwi128 (v8hi, int)
+ v4si __builtin_ia32_psrldi128 (v4si, int)
+*/
+
+static __inline
+v128_u8_t op_PSRLDI128 ( v128_u8_t vin, const int bit_count )
+ __attribute__ ((always_inline));
+
+static __inline
+v128_u8_t op_PSRLDI128 (v128_u8_t vin, const int bit_count)
+{
+ return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+}
+
+/*
+ v2di __builtin_ia32_psrlqi128 (v2di, int)
+ v8hi __builtin_ia32_psrawi128 (v8hi, int)
+ v4si __builtin_ia32_psradi128 (v4si, int)
+ v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
+ v2di __builtin_ia32_movq128 (v2di)
+*/
+static __inline__
+v128_u8_t op_PSHUFD128 ( v128_u8_t vin, const int mask )
+ __attribute__ ((always_inline));
+
+static __inline__
+v128_u8_t op_PSHUFD128 (v128_u8_t vin, const int mask)
+{
+ return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+}
+#endif
+
+#ifdef __SSE3__
+/* sse3
+ v2df __builtin_ia32_addsubpd (v2df, v2df)
+ v4sf __builtin_ia32_addsubps (v4sf, v4sf)
+ v2df __builtin_ia32_haddpd (v2df, v2df)
+ v4sf __builtin_ia32_haddps (v4sf, v4sf)
+ v2df __builtin_ia32_hsubpd (v2df, v2df)
+ v4sf __builtin_ia32_hsubps (v4sf, v4sf)
+ v16qi __builtin_ia32_lddqu (char const *)
+ void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
+ v2df __builtin_ia32_movddup (v2df)
+ v4sf __builtin_ia32_movshdup (v4sf)
+ v4sf __builtin_ia32_movsldup (v4sf)
+ void __builtin_ia32_mwait (unsigned int, unsigned int)
+
+v2df __builtin_ia32_loadddup (double const *)
+
+*/
+
+#endif
+
+#ifdef __SSSE3__
+
+/* ssse3
+ *
+ * The following built-in functions are available when -mssse3 is used. All of
+ * them generate the machine instruction that is part of the name with MMX
+ * registers.
+ *
+ *
+ v2si __builtin_ia32_phaddd (v2si, v2si)
+ v4hi __builtin_ia32_phaddw (v4hi, v4hi)
+ v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
+ v2si __builtin_ia32_phsubd (v2si, v2si)
+ v4hi __builtin_ia32_phsubw (v4hi, v4hi)
+ v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
+ v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
+ v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
+ v8qi __builtin_ia32_pshufb (v8qi, v8qi)
+ v8qi __builtin_ia32_psignb (v8qi, v8qi)
+ v2si __builtin_ia32_psignd (v2si, v2si)
+ v4hi __builtin_ia32_psignw (v4hi, v4hi)
+ v1di __builtin_ia32_palignr (v1di, v1di, int)
+ v8qi __builtin_ia32_pabsb (v8qi)
+ v2si __builtin_ia32_pabsd (v2si)
+ v4hi __builtin_ia32_pabsw (v4hi)
+The following built-in functions are available when -mssse3 is used.
+All of them generate the machine instruction that is part of the name
+with SSE registers.
+
+ v4si __builtin_ia32_phaddd128 (v4si, v4si)
+ v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
+ v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
+ v4si __builtin_ia32_phsubd128 (v4si, v4si)
+ v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
+ v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
+ v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
+ v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
++ v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
+ v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
+ v4si __builtin_ia32_psignd128 (v4si, v4si)
+ v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
+ v2di __builtin_ia32_palignr128 (v2di, v2di, int)
+ v16qi __builtin_ia32_pabsb128 (v16qi)
+ v4si __builtin_ia32_pabsd128 (v4si)
+ v8hi __builtin_ia32_pabsw128 (v8hi)
+ */
+
+static __inline__
+v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+ __attribute__ ((always_inline));
+
+static __inline__
+v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+{
+ return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+}
+#endif
+
+#ifdef __SSE4_1__
+/* sse4.1
+The following built-in functions are available when -msse4.1 is used.
+All of them generate the machine instruction that is part of the name.
+
+ v2df __builtin_ia32_blendpd (v2df, v2df, const int)
+ v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
+ v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
+ v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
+ v2df __builtin_ia32_dppd (v2df, v2df, const int)
+ v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
+ v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
+ v2di __builtin_ia32_movntdqa (v2di *);
+ v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
+ v8hi __builtin_ia32_packusdw128 (v4si, v4si)
+ v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
+ v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
+ v2di __builtin_ia32_pcmpeqq (v2di, v2di)
+ v8hi __builtin_ia32_phminposuw128 (v8hi)
+ v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
+ v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
+ v4si __builtin_ia32_pmaxud128 (v4si, v4si)
+ v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
+ v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
+ v4si __builtin_ia32_pminsd128 (v4si, v4si)
+ v4si __builtin_ia32_pminud128 (v4si, v4si)
+ v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
+ v4si __builtin_ia32_pmovsxbd128 (v16qi)
+ v2di __builtin_ia32_pmovsxbq128 (v16qi)
+ v8hi __builtin_ia32_pmovsxbw128 (v16qi)
+ v2di __builtin_ia32_pmovsxdq128 (v4si)
+ v4si __builtin_ia32_pmovsxwd128 (v8hi)
+ v2di __builtin_ia32_pmovsxwq128 (v8hi)
+ v4si __builtin_ia32_pmovzxbd128 (v16qi)
+ v2di __builtin_ia32_pmovzxbq128 (v16qi)
+ v8hi __builtin_ia32_pmovzxbw128 (v16qi)
+ v2di __builtin_ia32_pmovzxdq128 (v4si)
+ v4si __builtin_ia32_pmovzxwd128 (v8hi)
+ v2di __builtin_ia32_pmovzxwq128 (v8hi)
+ v2di __builtin_ia32_pmuldq128 (v4si, v4si)
+ v4si __builtin_ia32_pmulld128 (v4si, v4si)
+ int __builtin_ia32_ptestc128 (v2di, v2di)
+ int __builtin_ia32_ptestnzc128 (v2di, v2di)
+ int __builtin_ia32_ptestz128 (v2di, v2di)
+ v2df __builtin_ia32_roundpd (v2df, const int)
+ v4sf __builtin_ia32_roundps (v4sf, const int)
+ v2df __builtin_ia32_roundsd (v2df, v2df, const int)
+ v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
+The following built-in functions are available when -msse4.1 is used.
+
+v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)
+Generates the insertps machine instruction.
+int __builtin_ia32_vec_ext_v16qi (v16qi, const int)
+Generates the pextrb machine instruction.
+v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)
+Generates the pinsrb machine instruction.
+v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)
+Generates the pinsrd machine instruction.
+*/
+static __inline__
+v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+ __attribute__ ((always_inline));
+static __inline__
+v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+{
+ return (v128_u8_t)__builtin_ia32_vec_set_v4si ((v128_i32_t)vin, ii, off);
+}
+/*
+v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)
+Generates the pinsrq machine instruction in 64bit mode.
+The following built-in functions are changed to generate new SSE4.1 instructions when -msse4.1 is used.
+
+float __builtin_ia32_vec_ext_v4sf (v4sf, const int)
+Generates the extractps machine instruction.
+int __builtin_ia32_vec_ext_v4si (v4si, const int)
+Generates the pextrd machine instruction.
+long long __builtin_ia32_vec_ext_v2di (v2di, const int)
+Generates the pextrq machine instruction in 64bit mode.
+ */
+
+#endif
+
+#ifdef __SSE4_2__
+
+/* sse4.2
+The following built-in functions are available when -msse4.2 is used.
+All of them generate the machine instruction that is part of the name.
+
+ v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
+ int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
+ int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
+ int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
+ int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
+ int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
+ int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
+ v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
+ int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
+ int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
+ int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
+ int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
+ int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
+ int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
+ v2di __builtin_ia32_pcmpgtq (v2di, v2di)
+The following built-in functions are available when -msse4.2 is used.
+
+unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)
+Generates the crc32b machine instruction.
+unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)
+Generates the crc32w machine instruction.
+unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)
+Generates the crc32l machine instruction.
+unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)
+Generates the crc32q machine instruction.
+The following built-in functions are changed to generate new SSE4.2 instructions when -msse4.2 is used.
+
+int __builtin_popcount (unsigned int)
+Generates the popcntl machine instruction.
+int __builtin_popcountl (unsigned long)
+Generates the popcntl or popcntq machine instruction, depending on the size of unsigned long.
+int __builtin_popcountll (unsigned long long)
+Generates the popcntq machine instruction.
+
+*/
+
+#endif
+
+/* avx
+The following built-in functions are available when -mavx is used.
+All of them generate the machine instruction that is part of the name.
+
+ v4df __builtin_ia32_addpd256 (v4df,v4df)
+ v8sf __builtin_ia32_addps256 (v8sf,v8sf)
+ v4df __builtin_ia32_addsubpd256 (v4df,v4df)
+ v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
+ v4df __builtin_ia32_andnpd256 (v4df,v4df)
+ v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
+ v4df __builtin_ia32_andpd256 (v4df,v4df)
+ v8sf __builtin_ia32_andps256 (v8sf,v8sf)
+ v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
+ v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
+ v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
+ v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
+ v2df __builtin_ia32_cmppd (v2df,v2df,int)
+ v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
+ v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
+ v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
+ v2df __builtin_ia32_cmpsd (v2df,v2df,int)
+ v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
+ v4df __builtin_ia32_cvtdq2pd256 (v4si)
+ v8sf __builtin_ia32_cvtdq2ps256 (v8si)
+ v4si __builtin_ia32_cvtpd2dq256 (v4df)
+ v4sf __builtin_ia32_cvtpd2ps256 (v4df)
+ v8si __builtin_ia32_cvtps2dq256 (v8sf)
+ v4df __builtin_ia32_cvtps2pd256 (v4sf)
+ v4si __builtin_ia32_cvttpd2dq256 (v4df)
+ v8si __builtin_ia32_cvttps2dq256 (v8sf)
+ v4df __builtin_ia32_divpd256 (v4df,v4df)
+ v8sf __builtin_ia32_divps256 (v8sf,v8sf)
+ v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
+ v4df __builtin_ia32_haddpd256 (v4df,v4df)
+ v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
+ v4df __builtin_ia32_hsubpd256 (v4df,v4df)
+ v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
+ v32qi __builtin_ia32_lddqu256 (pcchar)
+ v32qi __builtin_ia32_loaddqu256 (pcchar)
+ v4df __builtin_ia32_loadupd256 (pcdouble)
+ v8sf __builtin_ia32_loadups256 (pcfloat)
+ v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
+ v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
+ v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
+ v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
+ void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
+ void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
+ void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
+ void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
+ v4df __builtin_ia32_maxpd256 (v4df,v4df)
+ v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
+ v4df __builtin_ia32_minpd256 (v4df,v4df)
+ v8sf __builtin_ia32_minps256 (v8sf,v8sf)
+ v4df __builtin_ia32_movddup256 (v4df)
+ int __builtin_ia32_movmskpd256 (v4df)
+ int __builtin_ia32_movmskps256 (v8sf)
+ v8sf __builtin_ia32_movshdup256 (v8sf)
+ v8sf __builtin_ia32_movsldup256 (v8sf)
+ v4df __builtin_ia32_mulpd256 (v4df,v4df)
+ v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
+ v4df __builtin_ia32_orpd256 (v4df,v4df)
+ v8sf __builtin_ia32_orps256 (v8sf,v8sf)
+ v2df __builtin_ia32_pd_pd256 (v4df)
+ v4df __builtin_ia32_pd256_pd (v2df)
+ v4sf __builtin_ia32_ps_ps256 (v8sf)
+ v8sf __builtin_ia32_ps256_ps (v4sf)
+ int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
+ int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
+ int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
+ v8sf __builtin_ia32_rcpps256 (v8sf)
+ v4df __builtin_ia32_roundpd256 (v4df,int)
+ v8sf __builtin_ia32_roundps256 (v8sf,int)
+ v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
+ v8sf __builtin_ia32_rsqrtps256 (v8sf)
+ v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
+ v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
+ v4si __builtin_ia32_si_si256 (v8si)
+ v8si __builtin_ia32_si256_si (v4si)
+ v4df __builtin_ia32_sqrtpd256 (v4df)
+ v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
+ v8sf __builtin_ia32_sqrtps256 (v8sf)
+ void __builtin_ia32_storedqu256 (pchar,v32qi)
+ void __builtin_ia32_storeupd256 (pdouble,v4df)
+ void __builtin_ia32_storeups256 (pfloat,v8sf)
+ v4df __builtin_ia32_subpd256 (v4df,v4df)
+ v8sf __builtin_ia32_subps256 (v8sf,v8sf)
+ v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
+ v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
+ v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
+ v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
+ v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
+ v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
+ v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
+ v4sf __builtin_ia32_vbroadcastss (pcfloat)
+ v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
+ v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
+ v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
+ v4si __builtin_ia32_vextractf128_si256 (v8si,int)
+ v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
+ v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
+ v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
+ v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
+ v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
+ v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
+ v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
+ v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
+ v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
+ v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
+ v2df __builtin_ia32_vpermilpd (v2df,int)
+ v4df __builtin_ia32_vpermilpd256 (v4df,int)
+ v4sf __builtin_ia32_vpermilps (v4sf,int)
+ v8sf __builtin_ia32_vpermilps256 (v8sf,int)
+ v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
+ v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
+ v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
+ v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
+ int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
+ int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
+ int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
+ int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
+ int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
+ int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
+ int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
+ int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
+ int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
+ int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
+ int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
+ int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
+ void __builtin_ia32_vzeroall (void)
+ void __builtin_ia32_vzeroupper (void)
+ v4df __builtin_ia32_xorpd256 (v4df,v4df)
+ v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
+
+
+
+*/
+
+#ifdef __AES__
+/*
+ * AES-NI instruction set
+ * includes PCMUL
+ */
+
+/* AES-NI aes
+ */
+
+
+/* v2di __builtin_ia32_aesenc128 (v2di, v2di) */
+static __inline__
+v128_u8_t op_AESENC (register v128_u8_t state, register const v128_u8_t round_key)
+{
+ return (v128_u8_t)__builtin_ia32_aesenc128 ((v128_lli_t)state,
+ (v128_lli_t)round_key);
+}
+
+
+/* v2di __builtin_ia32_aesenclast128 (v2di, v2di) */
+static __inline__
+v128_u8_t op_AESENCLAST (register v128_u8_t state,
+ register const v128_u8_t round_key)
+{
+ return (v128_u8_t)__builtin_ia32_aesenclast128 ((v128_lli_t)state,
+ (v128_lli_t)round_key);
+}
+
+
+/* v2di __builtin_ia32_aesdec128 (v2di, v2di) */
+static __inline__
+v128_u8_t op_AESDEC (register v128_u8_t state, register const v128_u8_t round_key)
+{
+ return (v128_u8_t)__builtin_ia32_aesdec128 ((v128_lli_t)state,
+ (v128_lli_t)round_key);
+}
+
+
+/* v2di __builtin_ia32_aesdeclast128 (v2di, v2di) */
+static __inline__
+v128_u8_t op_AESDECLAST (register v128_u8_t state,
+ register const v128_u8_t round_key)
+{
+ return (v128_u8_t)__builtin_ia32_aesdeclast128 ((v128_lli_t)state,
+ (v128_lli_t)round_key);
+}
+
+
+/* v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) */
+static __inline__
+v128_u8_t op_AESKEYGENASSIST (register const v128_u8_t round_key,
+ const int rcon ) __attribute__ ((always_inline));
+static __inline__
+v128_u8_t op_AESKEYGENASSIST (register const v128_u8_t round_key,
+ const int rcon )
+{
+ return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ rcon);
+}
+
+
+/* v2di __builtin_ia32_aesimc128 (v2di) */
+static __inline__
+v128_u8_t op_AESIMC (register const v128_u8_t round_key)
+{
+ return (v128_u8_t)__builtin_ia32_aesimc128 ((v128_lli_t)round_key);
+}
+
+/* pclmul
+v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)
+*/
+#endif
+
+#ifdef __SSE5__
+/* sse5
+ v2df __builtin_ia32_comeqpd (v2df, v2df)
+ v2df __builtin_ia32_comeqps (v2df, v2df)
+ v4sf __builtin_ia32_comeqsd (v4sf, v4sf)
+ v4sf __builtin_ia32_comeqss (v4sf, v4sf)
+ v2df __builtin_ia32_comfalsepd (v2df, v2df)
+ v2df __builtin_ia32_comfalseps (v2df, v2df)
+ v4sf __builtin_ia32_comfalsesd (v4sf, v4sf)
+ v4sf __builtin_ia32_comfalsess (v4sf, v4sf)
+ v2df __builtin_ia32_comgepd (v2df, v2df)
+ v2df __builtin_ia32_comgeps (v2df, v2df)
+ v4sf __builtin_ia32_comgesd (v4sf, v4sf)
+ v4sf __builtin_ia32_comgess (v4sf, v4sf)
+ v2df __builtin_ia32_comgtpd (v2df, v2df)
+ v2df __builtin_ia32_comgtps (v2df, v2df)
+ v4sf __builtin_ia32_comgtsd (v4sf, v4sf)
+ v4sf __builtin_ia32_comgtss (v4sf, v4sf)
+ v2df __builtin_ia32_comlepd (v2df, v2df)
+ v2df __builtin_ia32_comleps (v2df, v2df)
+ v4sf __builtin_ia32_comlesd (v4sf, v4sf)
+ v4sf __builtin_ia32_comless (v4sf, v4sf)
+ v2df __builtin_ia32_comltpd (v2df, v2df)
+ v2df __builtin_ia32_comltps (v2df, v2df)
+ v4sf __builtin_ia32_comltsd (v4sf, v4sf)
+ v4sf __builtin_ia32_comltss (v4sf, v4sf)
+ v2df __builtin_ia32_comnepd (v2df, v2df)
+ v2df __builtin_ia32_comneps (v2df, v2df)
+ v4sf __builtin_ia32_comnesd (v4sf, v4sf)
+ v4sf __builtin_ia32_comness (v4sf, v4sf)
+ v2df __builtin_ia32_comordpd (v2df, v2df)
+ v2df __builtin_ia32_comordps (v2df, v2df)
+ v4sf __builtin_ia32_comordsd (v4sf, v4sf)
+ v4sf __builtin_ia32_comordss (v4sf, v4sf)
+ v2df __builtin_ia32_comtruepd (v2df, v2df)
+ v2df __builtin_ia32_comtrueps (v2df, v2df)
+ v4sf __builtin_ia32_comtruesd (v4sf, v4sf)
+ v4sf __builtin_ia32_comtruess (v4sf, v4sf)
+ v2df __builtin_ia32_comueqpd (v2df, v2df)
+ v2df __builtin_ia32_comueqps (v2df, v2df)
+ v4sf __builtin_ia32_comueqsd (v4sf, v4sf)
+ v4sf __builtin_ia32_comueqss (v4sf, v4sf)
+ v2df __builtin_ia32_comugepd (v2df, v2df)
+ v2df __builtin_ia32_comugeps (v2df, v2df)
+ v4sf __builtin_ia32_comugesd (v4sf, v4sf)
+ v4sf __builtin_ia32_comugess (v4sf, v4sf)
+ v2df __builtin_ia32_comugtpd (v2df, v2df)
+ v2df __builtin_ia32_comugtps (v2df, v2df)
+ v4sf __builtin_ia32_comugtsd (v4sf, v4sf)
+ v4sf __builtin_ia32_comugtss (v4sf, v4sf)
+ v2df __builtin_ia32_comulepd (v2df, v2df)
+ v2df __builtin_ia32_comuleps (v2df, v2df)
+ v4sf __builtin_ia32_comulesd (v4sf, v4sf)
+ v4sf __builtin_ia32_comuless (v4sf, v4sf)
+ v2df __builtin_ia32_comultpd (v2df, v2df)
+ v2df __builtin_ia32_comultps (v2df, v2df)
+ v4sf __builtin_ia32_comultsd (v4sf, v4sf)
+ v4sf __builtin_ia32_comultss (v4sf, v4sf)
+ v2df __builtin_ia32_comunepd (v2df, v2df)
+ v2df __builtin_ia32_comuneps (v2df, v2df)
+ v4sf __builtin_ia32_comunesd (v4sf, v4sf)
+ v4sf __builtin_ia32_comuness (v4sf, v4sf)
+ v2df __builtin_ia32_comunordpd (v2df, v2df)
+ v2df __builtin_ia32_comunordps (v2df, v2df)
+ v4sf __builtin_ia32_comunordsd (v4sf, v4sf)
+ v4sf __builtin_ia32_comunordss (v4sf, v4sf)
+ v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
+ v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
+ v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
+ v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
+ v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
+ v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
+ v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
+ v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
+ v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
+ v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
+ v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
+ v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
+ v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
+ v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
+ v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
+ v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
+ v2df __builtin_ia32_frczpd (v2df)
+ v4sf __builtin_ia32_frczps (v4sf)
+ v2df __builtin_ia32_frczsd (v2df, v2df)
+ v4sf __builtin_ia32_frczss (v4sf, v4sf)
+ v2di __builtin_ia32_pcmov (v2di, v2di, v2di)
+ v2di __builtin_ia32_pcmov_v2di (v2di, v2di, v2di)
+ v4si __builtin_ia32_pcmov_v4si (v4si, v4si, v4si)
+ v8hi __builtin_ia32_pcmov_v8hi (v8hi, v8hi, v8hi)
+ v16qi __builtin_ia32_pcmov_v16qi (v16qi, v16qi, v16qi)
+ v2df __builtin_ia32_pcmov_v2df (v2df, v2df, v2df)
+ v4sf __builtin_ia32_pcmov_v4sf (v4sf, v4sf, v4sf)
+ v16qi __builtin_ia32_pcomeqb (v16qi, v16qi)
+ v8hi __builtin_ia32_pcomeqw (v8hi, v8hi)
+ v4si __builtin_ia32_pcomeqd (v4si, v4si)
+ v2di __builtin_ia32_pcomeqq (v2di, v2di)
+ v16qi __builtin_ia32_pcomequb (v16qi, v16qi)
+ v4si __builtin_ia32_pcomequd (v4si, v4si)
+ v2di __builtin_ia32_pcomequq (v2di, v2di)
+ v8hi __builtin_ia32_pcomequw (v8hi, v8hi)
+ v8hi __builtin_ia32_pcomeqw (v8hi, v8hi)
+ v16qi __builtin_ia32_pcomfalseb (v16qi, v16qi)
+ v4si __builtin_ia32_pcomfalsed (v4si, v4si)
+ v2di __builtin_ia32_pcomfalseq (v2di, v2di)
+ v16qi __builtin_ia32_pcomfalseub (v16qi, v16qi)
+ v4si __builtin_ia32_pcomfalseud (v4si, v4si)
+ v2di __builtin_ia32_pcomfalseuq (v2di, v2di)
+ v8hi __builtin_ia32_pcomfalseuw (v8hi, v8hi)
+ v8hi __builtin_ia32_pcomfalsew (v8hi, v8hi)
+ v16qi __builtin_ia32_pcomgeb (v16qi, v16qi)
+ v4si __builtin_ia32_pcomged (v4si, v4si)
+ v2di __builtin_ia32_pcomgeq (v2di, v2di)
+ v16qi __builtin_ia32_pcomgeub (v16qi, v16qi)
+ v4si __builtin_ia32_pcomgeud (v4si, v4si)
+ v2di __builtin_ia32_pcomgeuq (v2di, v2di)
+ v8hi __builtin_ia32_pcomgeuw (v8hi, v8hi)
+ v8hi __builtin_ia32_pcomgew (v8hi, v8hi)
+ v16qi __builtin_ia32_pcomgtb (v16qi, v16qi)
+ v4si __builtin_ia32_pcomgtd (v4si, v4si)
+ v2di __builtin_ia32_pcomgtq (v2di, v2di)
+ v16qi __builtin_ia32_pcomgtub (v16qi, v16qi)
+ v4si __builtin_ia32_pcomgtud (v4si, v4si)
+ v2di __builtin_ia32_pcomgtuq (v2di, v2di)
+ v8hi __builtin_ia32_pcomgtuw (v8hi, v8hi)
+ v8hi __builtin_ia32_pcomgtw (v8hi, v8hi)
+ v16qi __builtin_ia32_pcomleb (v16qi, v16qi)
+ v4si __builtin_ia32_pcomled (v4si, v4si)
+ v2di __builtin_ia32_pcomleq (v2di, v2di)
+ v16qi __builtin_ia32_pcomleub (v16qi, v16qi)
+ v4si __builtin_ia32_pcomleud (v4si, v4si)
+ v2di __builtin_ia32_pcomleuq (v2di, v2di)
+ v8hi __builtin_ia32_pcomleuw (v8hi, v8hi)
+ v8hi __builtin_ia32_pcomlew (v8hi, v8hi)
+ v16qi __builtin_ia32_pcomltb (v16qi, v16qi)
+ v4si __builtin_ia32_pcomltd (v4si, v4si)
+ v2di __builtin_ia32_pcomltq (v2di, v2di)
+ v16qi __builtin_ia32_pcomltub (v16qi, v16qi)
+ v4si __builtin_ia32_pcomltud (v4si, v4si)
+ v2di __builtin_ia32_pcomltuq (v2di, v2di)
+ v8hi __builtin_ia32_pcomltuw (v8hi, v8hi)
+ v8hi __builtin_ia32_pcomltw (v8hi, v8hi)
+ v16qi __builtin_ia32_pcomneb (v16qi, v16qi)
+ v4si __builtin_ia32_pcomned (v4si, v4si)
+ v2di __builtin_ia32_pcomneq (v2di, v2di)
+ v16qi __builtin_ia32_pcomneub (v16qi, v16qi)
+ v4si __builtin_ia32_pcomneud (v4si, v4si)
+ v2di __builtin_ia32_pcomneuq (v2di, v2di)
+ v8hi __builtin_ia32_pcomneuw (v8hi, v8hi)
+ v8hi __builtin_ia32_pcomnew (v8hi, v8hi)
+ v16qi __builtin_ia32_pcomtrueb (v16qi, v16qi)
+ v4si __builtin_ia32_pcomtrued (v4si, v4si)
+ v2di __builtin_ia32_pcomtrueq (v2di, v2di)
+ v16qi __builtin_ia32_pcomtrueub (v16qi, v16qi)
+ v4si __builtin_ia32_pcomtrueud (v4si, v4si)
+ v2di __builtin_ia32_pcomtrueuq (v2di, v2di)
+ v8hi __builtin_ia32_pcomtrueuw (v8hi, v8hi)
+ v8hi __builtin_ia32_pcomtruew (v8hi, v8hi)
+ v4df __builtin_ia32_permpd (v2df, v2df, v16qi)
+ v4sf __builtin_ia32_permps (v4sf, v4sf, v16qi)
+ v4si __builtin_ia32_phaddbd (v16qi)
+ v2di __builtin_ia32_phaddbq (v16qi)
+ v8hi __builtin_ia32_phaddbw (v16qi)
+ v2di __builtin_ia32_phadddq (v4si)
+ v4si __builtin_ia32_phaddubd (v16qi)
+ v2di __builtin_ia32_phaddubq (v16qi)
+ v8hi __builtin_ia32_phaddubw (v16qi)
+ v2di __builtin_ia32_phaddudq (v4si)
+ v4si __builtin_ia32_phadduwd (v8hi)
+ v2di __builtin_ia32_phadduwq (v8hi)
+ v4si __builtin_ia32_phaddwd (v8hi)
+ v2di __builtin_ia32_phaddwq (v8hi)
+ v8hi __builtin_ia32_phsubbw (v16qi)
+ v2di __builtin_ia32_phsubdq (v4si)
+ v4si __builtin_ia32_phsubwd (v8hi)
+ v4si __builtin_ia32_pmacsdd (v4si, v4si, v4si)
+ v2di __builtin_ia32_pmacsdqh (v4si, v4si, v2di)
+ v2di __builtin_ia32_pmacsdql (v4si, v4si, v2di)
+ v4si __builtin_ia32_pmacssdd (v4si, v4si, v4si)
+ v2di __builtin_ia32_pmacssdqh (v4si, v4si, v2di)
+ v2di __builtin_ia32_pmacssdql (v4si, v4si, v2di)
+ v4si __builtin_ia32_pmacsswd (v8hi, v8hi, v4si)
+ v8hi __builtin_ia32_pmacssww (v8hi, v8hi, v8hi)
+ v4si __builtin_ia32_pmacswd (v8hi, v8hi, v4si)
+ v8hi __builtin_ia32_pmacsww (v8hi, v8hi, v8hi)
+ v4si __builtin_ia32_pmadcsswd (v8hi, v8hi, v4si)
+ v4si __builtin_ia32_pmadcswd (v8hi, v8hi, v4si)
+ v16qi __builtin_ia32_pperm (v16qi, v16qi, v16qi)
+ v16qi __builtin_ia32_protb (v16qi, v16qi)
+ v4si __builtin_ia32_protd (v4si, v4si)
+ v2di __builtin_ia32_protq (v2di, v2di)
+ v8hi __builtin_ia32_protw (v8hi, v8hi)
+ v16qi __builtin_ia32_pshab (v16qi, v16qi)
+ v4si __builtin_ia32_pshad (v4si, v4si)
+ v2di __builtin_ia32_pshaq (v2di, v2di)
+ v8hi __builtin_ia32_pshaw (v8hi, v8hi)
+ v16qi __builtin_ia32_pshlb (v16qi, v16qi)
+ v4si __builtin_ia32_pshld (v4si, v4si)
+ v2di __builtin_ia32_pshlq (v2di, v2di)
+ v8hi __builtin_ia32_pshlw (v8hi, v8hi)
+The following builtin-in functions are available when -msse5 is used.
+The second argument must be an integer constant and generate the machine
+instruction that is part of the name with the `_imm' suffix removed.
+
+ v16qi __builtin_ia32_protb_imm (v16qi, int)
+ v4si __builtin_ia32_protd_imm (v4si, int)
+ v2di __builtin_ia32_protq_imm (v2di, int)
+ v8hi __builtin_ia32_protw_imm (v8hi, int)
+
+
+*/
+#endif
+
+#endif /* if USE_VECREG */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_v128_ */
diff --git a/interfaces/cc/gcc/x86_64/fmtdef.h b/interfaces/cc/gcc/x86_64/fmtdef.h
deleted file mode 100644
index 150b807..0000000
--- a/interfaces/cc/gcc/x86_64/fmtdef.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_fmtdef_
-#define _h_fmtdef_
-
-#if MAC
-
-/* int64_t is still a "long long int" */
-#define LD64 "lld"
-#define LU64 "llu"
-#define LX64 "llX"
-#define Lx64 "llx"
-
-/* size_t is now a "long unsigned int" */
-#define LUSZ "lu"
-#define LXSZ "lX"
-#define LxSZ "lx"
-
-#else /* MAC */
-
-/* int64_t is now a "long int" */
-#define LD64 "ld"
-#define LU64 "lu"
-#define LX64 "lX"
-#define Lx64 "lx"
-
-/* size_t is now a "long unsigned int" */
-#define LUSZ "lu"
-#define LXSZ "lX"
-#define LxSZ "lx"
-
-#endif /* MAC */
-
-#endif /* _h_fmtdef_ */
diff --git a/interfaces/cc/vc++/compiler.h b/interfaces/cc/vc++/compiler.h
index 2c2837d..46a1ac0 100644
--- a/interfaces/cc/vc++/compiler.h
+++ b/interfaces/cc/vc++/compiler.h
@@ -37,7 +37,7 @@ extern "C" {
static __inline
float roundf( float value_in )
{
- return ( value_in < 0 ) ? ceilf ( value_in - 0.5 ) : floorf ( value_in + 0.5 );
+ return ( value_in < 0 ) ? ceilf ( value_in - 0.5F ) : floorf ( value_in + 0.5 );
}
#define lroundf( x ) (long int)roundf( x )
diff --git a/interfaces/cc/vc++/i386/arch-impl.h b/interfaces/cc/vc++/i386/arch-impl.h
index 9745a2b..2494460 100644
--- a/interfaces/cc/vc++/i386/arch-impl.h
+++ b/interfaces/cc/vc++/i386/arch-impl.h
@@ -31,204 +31,10 @@
#include "../noarch/arch-impl.h"
#endif
-#ifndef _INC_STDLIB
-#include <stdlib.h>
-#endif
-
#ifdef __cplusplus
extern "C" {
#endif
-typedef struct int128_t int128_t;
-struct int128_t
-{
- uint64_t lo;
- int64_t hi;
-};
-
-static __inline
-int64_t int128_hi ( const int128_t *self )
-{
- return self -> hi;
-}
-
-static __inline
-uint64_t int128_lo ( const int128_t *self )
-{
- return self -> lo;
-}
-
-static __inline
-void int128_sethi ( int128_t *self, int64_t i )
-{
- self -> hi = i;
-}
-
-static __inline
-void int128_setlo ( int128_t *self, uint64_t i )
-{
- self -> lo = i;
-}
-
-typedef struct uint128_t uint128_t;
-struct uint128_t
-{
- uint64_t lo;
- uint64_t hi;
-};
-
-static __inline
-uint64_t uint128_hi ( const uint128_t *self )
-{
- return self -> hi;
-}
-
-static __inline
-uint64_t uint128_lo ( const uint128_t *self )
-{
- return self -> lo;
-}
-
-static __inline
-void uint128_sethi ( uint128_t *self, uint64_t i )
-{
- self -> hi = i;
-}
-
-static __inline
-void uint128_setlo ( uint128_t *self, uint64_t i )
-{
- self -> lo = i;
-}
-
-static __inline
-void int128_add ( int128_t *self, const int128_t *i )
-{
- uint64_t carry = ( ( const uint32_t* ) self ) [ 0 ] + ( ( const uint32_t* ) i ) [ 0 ];
- self -> hi += i -> hi;
- carry = ( ( const uint32_t* ) self ) [ 1 ] + ( ( const uint32_t* ) i ) [ 1 ] + ( carry >> 32 );
- self -> lo += i -> lo;
- self -> hi += carry >> 32;
-}
-
-static __inline
-void int128_sub ( int128_t *self, const int128_t *i )
-{
- int carry = i -> lo > self -> lo;
- self -> hi -= i -> hi;
- self -> lo -= i -> lo;
- self -> hi -= carry;
-}
-
-static __inline
-void int128_sar ( int128_t *self, uint32_t i )
-{
- if ( i < 64 )
- {
- self -> lo = ( self -> hi << ( 64 - i ) ) | ( self -> lo >> i );
- self -> hi >>= i;
- }
- else
- {
- self -> lo = self -> hi >> ( i - 64 );
- self -> hi >>= 63;
- }
-}
-
-static __inline
-void int128_shl ( int128_t *self, uint32_t i )
-{
- if ( i < 64 )
- {
- self -> hi = ( self -> hi << i ) | ( int64_t ) ( self -> lo >> ( 64 - i ) );
- self -> lo <<= i;
- }
- else
- {
- self -> hi = ( int64_t ) ( self -> lo << ( i - 64 ) );
- self -> lo = 0;
- }
-}
-
-static __inline
-void uint128_and ( uint128_t *self, const uint128_t *i )
-{
- self -> lo &= i -> lo;
- self -> hi &= i -> hi;
-}
-
-static __inline
-void uint128_or ( uint128_t *self, const uint128_t *i )
-{
- self -> lo |= i -> lo;
- self -> hi |= i -> hi;
-}
-
-static __inline
-void uint128_orlo ( uint128_t *self, uint64_t i )
-{
- self -> lo |= i;
-}
-
-static __inline
-void uint128_xor ( uint128_t *self, const uint128_t *i )
-{
- self -> lo ^= i -> lo;
- self -> hi ^= i -> hi;
-}
-
-static __inline
-void uint128_not ( uint128_t *self )
-{
- self -> lo = ~ self -> lo;
- self -> hi = ~ self -> hi;
-}
-
-static __inline
-void uint128_shr ( uint128_t *self, uint32_t i )
-{
- if ( i < 64 )
- {
- self -> lo = ( self -> hi << ( 64 - i ) ) | ( self -> lo >> i );
- self -> hi >>= i;
- }
- else
- {
- self -> lo = self -> hi >> ( i - 64 );
- self -> hi >>= 63;
- }
-}
-
-static __inline
-void uint128_shl ( uint128_t *self, uint32_t i )
-{
- if ( i < 64 )
- {
- self -> hi = ( self -> hi << i ) | ( self -> lo >> ( 64 - i ) );
- self -> lo <<= i;
- }
- else
- {
- self -> hi = self -> lo << ( i - 64 );
- self -> lo = 0;
- }
-}
-
-static __inline
-void uint128_bswap ( uint128_t *self )
-{
- uint64_t tmp = _byteswap_uint64 ( self -> lo );
- self -> lo = _byteswap_uint64 ( self -> hi );
- ( ( uint64_t* ) self ) [ 1 ] = tmp;
-}
-
-static __inline
-void uint128_bswap_copy ( uint128_t *to, const uint128_t *from )
-{
- to -> lo = _byteswap_uint64 ( from -> hi );
- to -> hi = _byteswap_uint64 ( from -> lo );
-}
-
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/cc/vc++/i386/fmtdef.h b/interfaces/cc/vc++/i386/fmtdef.h
deleted file mode 100644
index d51c88f..0000000
--- a/interfaces/cc/vc++/i386/fmtdef.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_fmtdef_
-#define _h_fmtdef_
-
-/* int64_t is "long long int" in 32 bit */
-#define LD64 "lld"
-#define LU64 "llu"
-#define LX64 "llX"
-#define Lx64 "llx"
-
-/* size_t is traditionally "unsigned int"
- although it should have been "long unsigned int" */
-#define LUSZ "u"
-#define LXSZ "X"
-#define LxSZ "x"
-
-#endif /* _h_fmtdef_ */
diff --git a/interfaces/cc/vc++/noarch/arch-impl.h b/interfaces/cc/vc++/noarch/arch-impl.h
index 9cf5132..94feb4f 100644
--- a/interfaces/cc/vc++/noarch/arch-impl.h
+++ b/interfaces/cc/vc++/noarch/arch-impl.h
@@ -29,6 +29,10 @@
#include <stdint.h>
+#ifndef _INC_STDLIB
+#include <stdlib.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -85,6 +89,196 @@ int32_t uint32_lsbit ( uint32_t self )
return uint16_lsbit ( self >> 16 ) + 16;
}
+typedef struct int128_t int128_t;
+struct int128_t
+{
+ uint64_t lo;
+ int64_t hi;
+};
+
+static __inline
+int64_t int128_hi ( const int128_t *self )
+{
+ return self -> hi;
+}
+
+static __inline
+uint64_t int128_lo ( const int128_t *self )
+{
+ return self -> lo;
+}
+
+static __inline
+void int128_sethi ( int128_t *self, int64_t i )
+{
+ self -> hi = i;
+}
+
+static __inline
+void int128_setlo ( int128_t *self, uint64_t i )
+{
+ self -> lo = i;
+}
+
+typedef struct uint128_t uint128_t;
+struct uint128_t
+{
+ uint64_t lo;
+ uint64_t hi;
+};
+
+static __inline
+uint64_t uint128_hi ( const uint128_t *self )
+{
+ return self -> hi;
+}
+
+static __inline
+uint64_t uint128_lo ( const uint128_t *self )
+{
+ return self -> lo;
+}
+
+static __inline
+void uint128_sethi ( uint128_t *self, uint64_t i )
+{
+ self -> hi = i;
+}
+
+static __inline
+void uint128_setlo ( uint128_t *self, uint64_t i )
+{
+ self -> lo = i;
+}
+
+static __inline
+void int128_add ( int128_t *self, const int128_t *i )
+{
+ uint64_t carry = ( ( const uint32_t* ) self ) [ 0 ] + ( ( const uint32_t* ) i ) [ 0 ];
+ self -> hi += i -> hi;
+ carry = ( ( const uint32_t* ) self ) [ 1 ] + ( ( const uint32_t* ) i ) [ 1 ] + ( carry >> 32 );
+ self -> lo += i -> lo;
+ self -> hi += carry >> 32;
+}
+
+static __inline
+void int128_sub ( int128_t *self, const int128_t *i )
+{
+ int carry = i -> lo > self -> lo;
+ self -> hi -= i -> hi;
+ self -> lo -= i -> lo;
+ self -> hi -= carry;
+}
+
+static __inline
+void int128_sar ( int128_t *self, uint32_t i )
+{
+ if ( i < 64 )
+ {
+ self -> lo = ( self -> hi << ( 64 - i ) ) | ( self -> lo >> i );
+ self -> hi >>= i;
+ }
+ else
+ {
+ self -> lo = self -> hi >> ( i - 64 );
+ self -> hi >>= 63;
+ }
+}
+
+static __inline
+void int128_shl ( int128_t *self, uint32_t i )
+{
+ if ( i < 64 )
+ {
+ self -> hi = ( self -> hi << i ) | ( int64_t ) ( self -> lo >> ( 64 - i ) );
+ self -> lo <<= i;
+ }
+ else
+ {
+ self -> hi = ( int64_t ) ( self -> lo << ( i - 64 ) );
+ self -> lo = 0;
+ }
+}
+
+static __inline
+void uint128_and ( uint128_t *self, const uint128_t *i )
+{
+ self -> lo &= i -> lo;
+ self -> hi &= i -> hi;
+}
+
+static __inline
+void uint128_or ( uint128_t *self, const uint128_t *i )
+{
+ self -> lo |= i -> lo;
+ self -> hi |= i -> hi;
+}
+
+static __inline
+void uint128_orlo ( uint128_t *self, uint64_t i )
+{
+ self -> lo |= i;
+}
+
+static __inline
+void uint128_xor ( uint128_t *self, const uint128_t *i )
+{
+ self -> lo ^= i -> lo;
+ self -> hi ^= i -> hi;
+}
+
+static __inline
+void uint128_not ( uint128_t *self )
+{
+ self -> lo = ~ self -> lo;
+ self -> hi = ~ self -> hi;
+}
+
+static __inline
+void uint128_shr ( uint128_t *self, uint32_t i )
+{
+ if ( i < 64 )
+ {
+ self -> lo = ( self -> hi << ( 64 - i ) ) | ( self -> lo >> i );
+ self -> hi >>= i;
+ }
+ else
+ {
+ self -> lo = self -> hi >> ( i - 64 );
+ self -> hi >>= 63;
+ }
+}
+
+static __inline
+void uint128_shl ( uint128_t *self, uint32_t i )
+{
+ if ( i < 64 )
+ {
+ self -> hi = ( self -> hi << i ) | ( self -> lo >> ( 64 - i ) );
+ self -> lo <<= i;
+ }
+ else
+ {
+ self -> hi = self -> lo << ( i - 64 );
+ self -> lo = 0;
+ }
+}
+
+static __inline
+void uint128_bswap ( uint128_t *self )
+{
+ uint64_t tmp = _byteswap_uint64 ( self -> lo );
+ self -> lo = _byteswap_uint64 ( self -> hi );
+ ( ( uint64_t* ) self ) [ 1 ] = tmp;
+}
+
+static __inline
+void uint128_bswap_copy ( uint128_t *to, const uint128_t *from )
+{
+ to -> lo = _byteswap_uint64 ( from -> hi );
+ to -> hi = _byteswap_uint64 ( from -> lo );
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/cc/vc++/noarch/bitstr.h b/interfaces/cc/vc++/noarch/bitstr.h
index de0880f..88a4c34 100644
--- a/interfaces/cc/vc++/noarch/bitstr.h
+++ b/interfaces/cc/vc++/noarch/bitstr.h
@@ -94,7 +94,7 @@ void bitcpy ( void *dbase, bitsz_t doff, const void *sbase, bitsz_t soff, bitsz_
soff &= ( WRDSIZE - 1 );
/* calculate number of words - 1 in dst */
- dcountz = ( doff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT;
+ dcountz = ( size_t ) ( ( doff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT );
/* calculate masks */
lmask = rmask = ~ 0;
@@ -139,7 +139,7 @@ void bitcpy ( void *dbase, bitsz_t doff, const void *sbase, bitsz_t soff, bitsz_
else
{
/* source count may differ from dest count */
- size_t scountz = ( soff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT;
+ size_t scountz = ( size_t ) ( ( soff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT );
/* use double-word accumulator */
ACC acc = BSWAP ( src [ 0 ] );
@@ -259,7 +259,7 @@ int bitcmp ( const void *abase, bitsz_t aoff, const void *bbase, bitsz_t boff, b
at least 1. our loops treat the last word
specially, so calculate a loop counter that
excludes the last word */
- lcountz = ( aoff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT;
+ lcountz = ( size_t ) ( ( aoff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT );
/* calculate masks */
lmask = rmask = ~ 0;
@@ -301,7 +301,7 @@ int bitcmp ( const void *abase, bitsz_t aoff, const void *bbase, bitsz_t boff, b
since alignments differ, the span of "sz"
bits may hit a different number of words in
the left array than in the right. */
- size_t rcountz = ( boff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT;
+ size_t rcountz = ( size_t ) ( ( boff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT );
/* use double-word accumulator
note that the extra bits get ignored */
diff --git a/interfaces/cc/vc++/stdint.h b/interfaces/cc/vc++/stdint.h
index 7c6cdf1..057374c 100644
--- a/interfaces/cc/vc++/stdint.h
+++ b/interfaces/cc/vc++/stdint.h
@@ -47,29 +47,70 @@ typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
+#ifndef INT8_MAX
#define INT8_MAX _I8_MAX
+#endif
+
+#ifndef INT8_MIN
#define INT8_MIN _I8_MIN
+#endif
+
+#ifndef UINT8_MAX
#define UINT8_MAX _UI8_MAX
+#endif
+#ifndef INT16_MAX
#define INT16_MAX _I16_MAX
+#endif
+
+#ifndef INT16_MIN
#define INT16_MIN _I16_MIN
+#endif
+
+#ifndef UINT16_MAX
#define UINT16_MAX _UI16_MAX
+#endif
+#ifndef INT32_MAX
#define INT32_MAX _I32_MAX
+#endif
+
+#ifndef INT32_MIN
#define INT32_MIN _I32_MIN
+#endif
+
+#ifndef UINT32_MAX
#define UINT32_MAX _UI32_MAX
+#endif
+#ifndef INT64_MAX
#define INT64_MAX _I64_MAX
+#endif
+
+#ifndef INT64_MIN
#define INT64_MIN _I64_MIN
+#endif
+
+#ifndef UINT64_MAX
#define UINT64_MAX _UI64_MAX
+#endif
#ifndef SIZE_T_MAX
#define SIZE_T_MAX ((size_t)(-(1ULL)))
#endif
+#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
+#ifndef UINT64_C
+#define UINT64_C(x) (x ## ULL)
+#endif
+#ifndef INT64_C
+#define INT64_C(x) (x ## LL)
+#endif
+#endif
-
+#ifndef __func__
#define __func__ __FUNCTION__
+#endif
#ifdef __cplusplus
}
diff --git a/interfaces/cc/vc++/x86_64/arch-impl.h b/interfaces/cc/vc++/x86_64/arch-impl.h
index 104d643..2494460 100644
--- a/interfaces/cc/vc++/x86_64/arch-impl.h
+++ b/interfaces/cc/vc++/x86_64/arch-impl.h
@@ -35,139 +35,6 @@
extern "C" {
#endif
-typedef __int128 int128_t;
-
-static __inline
-int64_t int128_hi ( const int128_t *self )
-{
- return ( ( const int64_t* ) self ) [ 1 ];
-}
-
-static __inline
-uint64_t int128_lo ( const int128_t *self )
-{
- return ( ( const uint64_t* ) self ) [ 0 ];
-}
-
-static __inline
-void int128_sethi ( int128_t *self, int64_t i )
-{
- ( ( int64_t* ) self ) [ 1 ] = i;
-}
-
-static __inline
-void int128_setlo ( int128_t *self, uint64_t i )
-{
- ( ( uint64_t* ) self ) [ 0 ] = i;
-}
-
-typedef __uint128 uint128_t;
-
-static __inline
-uint64_t uint128_hi ( const uint128_t *self )
-{
- return ( ( const uint64_t* ) self ) [ 1 ];
-}
-
-static __inline
-uint64_t uint128_lo ( const uint128_t *self )
-{
- return ( ( const uint64_t* ) self ) [ 0 ];
-}
-
-static __inline
-void uint128_sethi ( uint128_t *self, uint64_t i )
-{
- ( ( uint64_t* ) self ) [ 1 ] = i;
-}
-
-static __inline
-void uint128_setlo ( uint128_t *self, uint64_t i )
-{
- ( ( uint64_t* ) self ) [ 0 ] = i;
-}
-
-static __inline
-void int128_add ( int128_t *self, const int128_t *i )
-{
- * self += * i;
-}
-
-static __inline
-void int128_sub ( int128_t *self, const int128_t *i )
-{
- * self -= * i;
-}
-
-static __inline
-void int128_sar ( int128_t *self, uint32_t i )
-{
- * self >>= i;
-}
-
-static __inline
-void int128_shl ( int128_t *self, uint32_t i )
-{
- * self << i;
-}
-
-static __inline
-void uint128_and ( uint128_t *self, const uint128_t *i )
-{
- * self &= * i;
-}
-
-static __inline
-void uint128_or ( uint128_t *self, const uint128_t *i )
-{
- * self |= * i;
-}
-
-static __inline
-void uint128_orlo ( uint128_t *self, uint64_t i )
-{
- ( ( uint64_t* ) self ) [ 0 ] |= i;
-}
-
-static __inline
-void uint128_xor ( uint128_t *self, const uint128_t *i )
-{
- * self ^= * i;
-}
-
-static __inline
-void uint128_not ( uint128_t *self )
-{
- * self = ~ * self;
-}
-
-static __inline
-void uint128_shr ( uint128_t *self, uint32_t i )
-{
- * self >>= i;
-}
-
-static __inline
-void uint128_shl ( uint128_t *self, uint32_t i )
-{
- * self <<= i;
-}
-
-static __inline
-void uint128_bswap ( uint128_t *self )
-{
- uint64_t tmp = _byteswap_uint64 ( ( ( const uint64_t* ) self ) [ 0 ] );
- ( ( uint64_t* ) self ) [ 0 ] = _byteswap_uint64 ( ( ( const uint64_t* ) self ) [ 1 ] );
- ( ( uint64_t* ) self ) [ 1 ] = tmp;
-}
-
-static __inline
-void uint128_bswap_copy ( uint128_t *to, const uint128_t *from )
-{
- ( ( uint64_t* ) to ) [ 0 ] = _byteswap_uint64 ( ( ( const uint64_t* ) from ) [ 1 ] );
- ( ( uint64_t* ) to ) [ 1 ] = _byteswap_uint64 ( ( ( const uint64_t* ) from ) [ 0 ] );
-}
-
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/cc/vc++/x86_64/fmtdef.h b/interfaces/cc/vc++/x86_64/fmtdef.h
deleted file mode 100644
index 2a39d7c..0000000
--- a/interfaces/cc/vc++/x86_64/fmtdef.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_fmtdef_
-#define _h_fmtdef_
-
-/* int64_t is now a "long int" */
-#define LD64 "ld"
-#define LU64 "lu"
-#define LX64 "lX"
-#define Lx64 "lx"
-
-/* size_t is now a "long unsigned int" */
-#define LUSZ "lu"
-#define LXSZ "lX"
-#define LxSZ "lx"
-
-#endif /* _h_fmtdef_ */
diff --git a/interfaces/ext/libxml/DOCBparser.h b/interfaces/ext/libxml/DOCBparser.h
new file mode 100644
index 0000000..461d4ee
--- /dev/null
+++ b/interfaces/ext/libxml/DOCBparser.h
@@ -0,0 +1,96 @@
+/*
+ * Summary: old DocBook SGML parser
+ * Description: interface for a DocBook SGML non-verifying parser
+ * This code is DEPRECATED, and should not be used anymore.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __DOCB_PARSER_H__
+#define __DOCB_PARSER_H__
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_DOCB_ENABLED
+
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+
+#ifndef IN_LIBXML
+#ifdef __GNUC__
+#warning "The DOCBparser module has been deprecated in libxml2-2.6.0"
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Most of the back-end structures from XML and SGML are shared.
+ */
+typedef xmlParserCtxt docbParserCtxt;
+typedef xmlParserCtxtPtr docbParserCtxtPtr;
+typedef xmlSAXHandler docbSAXHandler;
+typedef xmlSAXHandlerPtr docbSAXHandlerPtr;
+typedef xmlParserInput docbParserInput;
+typedef xmlParserInputPtr docbParserInputPtr;
+typedef xmlDocPtr docbDocPtr;
+
+/*
+ * There is only few public functions.
+ */
+XMLPUBFUN int XMLCALL
+ docbEncodeEntities(unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen, int quoteChar);
+
+XMLPUBFUN docbDocPtr XMLCALL
+ docbSAXParseDoc (xmlChar *cur,
+ const char *encoding,
+ docbSAXHandlerPtr sax,
+ void *userData);
+XMLPUBFUN docbDocPtr XMLCALL
+ docbParseDoc (xmlChar *cur,
+ const char *encoding);
+XMLPUBFUN docbDocPtr XMLCALL
+ docbSAXParseFile (const char *filename,
+ const char *encoding,
+ docbSAXHandlerPtr sax,
+ void *userData);
+XMLPUBFUN docbDocPtr XMLCALL
+ docbParseFile (const char *filename,
+ const char *encoding);
+
+/**
+ * Interfaces for the Push mode.
+ */
+XMLPUBFUN void XMLCALL
+ docbFreeParserCtxt (docbParserCtxtPtr ctxt);
+XMLPUBFUN docbParserCtxtPtr XMLCALL
+ docbCreatePushParserCtxt(docbSAXHandlerPtr sax,
+ void *user_data,
+ const char *chunk,
+ int size,
+ const char *filename,
+ xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL
+ docbParseChunk (docbParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ int terminate);
+XMLPUBFUN docbParserCtxtPtr XMLCALL
+ docbCreateFileParserCtxt(const char *filename,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ docbParseDocument (docbParserCtxtPtr ctxt);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_DOCB_ENABLED */
+
+#endif /* __DOCB_PARSER_H__ */
diff --git a/interfaces/ext/libxml/HTMLparser.h b/interfaces/ext/libxml/HTMLparser.h
new file mode 100644
index 0000000..05905e4
--- /dev/null
+++ b/interfaces/ext/libxml/HTMLparser.h
@@ -0,0 +1,303 @@
+/*
+ * Summary: interface for an HTML 4.0 non-verifying parser
+ * Description: this module implements an HTML 4.0 non-verifying parser
+ * with API compatible with the XML parser ones. It should
+ * be able to parse "real world" HTML, even if severely
+ * broken from a specification point of view.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __HTML_PARSER_H__
+#define __HTML_PARSER_H__
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+
+#ifdef LIBXML_HTML_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Most of the back-end structures from XML and HTML are shared.
+ */
+typedef xmlParserCtxt htmlParserCtxt;
+typedef xmlParserCtxtPtr htmlParserCtxtPtr;
+typedef xmlParserNodeInfo htmlParserNodeInfo;
+typedef xmlSAXHandler htmlSAXHandler;
+typedef xmlSAXHandlerPtr htmlSAXHandlerPtr;
+typedef xmlParserInput htmlParserInput;
+typedef xmlParserInputPtr htmlParserInputPtr;
+typedef xmlDocPtr htmlDocPtr;
+typedef xmlNodePtr htmlNodePtr;
+
+/*
+ * Internal description of an HTML element, representing HTML 4.01
+ * and XHTML 1.0 (which share the same structure).
+ */
+typedef struct _htmlElemDesc htmlElemDesc;
+typedef htmlElemDesc *htmlElemDescPtr;
+struct _htmlElemDesc {
+ const char *name; /* The tag name */
+ char startTag; /* Whether the start tag can be implied */
+ char endTag; /* Whether the end tag can be implied */
+ char saveEndTag; /* Whether the end tag should be saved */
+ char empty; /* Is this an empty element ? */
+ char depr; /* Is this a deprecated element ? */
+ char dtd; /* 1: only in Loose DTD, 2: only Frameset one */
+ char isinline; /* is this a block 0 or inline 1 element */
+ const char *desc; /* the description */
+
+/* NRK Jan.2003
+ * New fields encapsulating HTML structure
+ *
+ * Bugs:
+ * This is a very limited representation. It fails to tell us when
+ * an element *requires* subelements (we only have whether they're
+ * allowed or not), and it doesn't tell us where CDATA and PCDATA
+ * are allowed. Some element relationships are not fully represented:
+ * these are flagged with the word MODIFIER
+ */
+ const char** subelts; /* allowed sub-elements of this element */
+ const char* defaultsubelt; /* subelement for suggested auto-repair
+ if necessary or NULL */
+ const char** attrs_opt; /* Optional Attributes */
+ const char** attrs_depr; /* Additional deprecated attributes */
+ const char** attrs_req; /* Required attributes */
+};
+
+/*
+ * Internal description of an HTML entity.
+ */
+typedef struct _htmlEntityDesc htmlEntityDesc;
+typedef htmlEntityDesc *htmlEntityDescPtr;
+struct _htmlEntityDesc {
+ unsigned int value; /* the UNICODE value for the character */
+ const char *name; /* The entity name */
+ const char *desc; /* the description */
+};
+
+/*
+ * There is only few public functions.
+ */
+XMLPUBFUN const htmlElemDesc * XMLCALL
+ htmlTagLookup (const xmlChar *tag);
+XMLPUBFUN const htmlEntityDesc * XMLCALL
+ htmlEntityLookup(const xmlChar *name);
+XMLPUBFUN const htmlEntityDesc * XMLCALL
+ htmlEntityValueLookup(unsigned int value);
+
+XMLPUBFUN int XMLCALL
+ htmlIsAutoClosed(htmlDocPtr doc,
+ htmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ htmlAutoCloseTag(htmlDocPtr doc,
+ const xmlChar *name,
+ htmlNodePtr elem);
+XMLPUBFUN const htmlEntityDesc * XMLCALL
+ htmlParseEntityRef(htmlParserCtxtPtr ctxt,
+ const xmlChar **str);
+XMLPUBFUN int XMLCALL
+ htmlParseCharRef(htmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ htmlParseElement(htmlParserCtxtPtr ctxt);
+
+XMLPUBFUN htmlParserCtxtPtr XMLCALL
+ htmlNewParserCtxt(void);
+
+XMLPUBFUN htmlParserCtxtPtr XMLCALL
+ htmlCreateMemoryParserCtxt(const char *buffer,
+ int size);
+
+XMLPUBFUN int XMLCALL
+ htmlParseDocument(htmlParserCtxtPtr ctxt);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlSAXParseDoc (xmlChar *cur,
+ const char *encoding,
+ htmlSAXHandlerPtr sax,
+ void *userData);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlParseDoc (xmlChar *cur,
+ const char *encoding);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlSAXParseFile(const char *filename,
+ const char *encoding,
+ htmlSAXHandlerPtr sax,
+ void *userData);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlParseFile (const char *filename,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ UTF8ToHtml (unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen);
+XMLPUBFUN int XMLCALL
+ htmlEncodeEntities(unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen, int quoteChar);
+XMLPUBFUN int XMLCALL
+ htmlIsScriptAttribute(const xmlChar *name);
+XMLPUBFUN int XMLCALL
+ htmlHandleOmittedElem(int val);
+
+#ifdef LIBXML_PUSH_ENABLED
+/**
+ * Interfaces for the Push mode.
+ */
+XMLPUBFUN htmlParserCtxtPtr XMLCALL
+ htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *chunk,
+ int size,
+ const char *filename,
+ xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL
+ htmlParseChunk (htmlParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ int terminate);
+#endif /* LIBXML_PUSH_ENABLED */
+
+XMLPUBFUN void XMLCALL
+ htmlFreeParserCtxt (htmlParserCtxtPtr ctxt);
+
+/*
+ * New set of simpler/more flexible APIs
+ */
+/**
+ * xmlParserOption:
+ *
+ * This is the set of XML parser options that can be passed down
+ * to the xmlReadDoc() and similar calls.
+ */
+typedef enum {
+ HTML_PARSE_RECOVER = 1<<0, /* Relaxed parsing */
+ HTML_PARSE_NOERROR = 1<<5, /* suppress error reports */
+ HTML_PARSE_NOWARNING= 1<<6, /* suppress warning reports */
+ HTML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */
+ HTML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */
+ HTML_PARSE_NONET = 1<<11,/* Forbid network access */
+ HTML_PARSE_COMPACT = 1<<16 /* compact small text nodes */
+} htmlParserOption;
+
+XMLPUBFUN void XMLCALL
+ htmlCtxtReset (htmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ htmlCtxtUseOptions (htmlParserCtxtPtr ctxt,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadDoc (const xmlChar *cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadFile (const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadMemory (const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadFd (int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadIO (xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadDoc (xmlParserCtxtPtr ctxt,
+ const xmlChar *cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadFile (xmlParserCtxtPtr ctxt,
+ const char *filename,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadMemory (xmlParserCtxtPtr ctxt,
+ const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadFd (xmlParserCtxtPtr ctxt,
+ int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadIO (xmlParserCtxtPtr ctxt,
+ xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+
+/* NRK/Jan2003: further knowledge of HTML structure
+ */
+typedef enum {
+ HTML_NA = 0 , /* something we don't check at all */
+ HTML_INVALID = 0x1 ,
+ HTML_DEPRECATED = 0x2 ,
+ HTML_VALID = 0x4 ,
+ HTML_REQUIRED = 0xc /* VALID bit set so ( & HTML_VALID ) is TRUE */
+} htmlStatus ;
+
+/* Using htmlElemDesc rather than name here, to emphasise the fact
+ that otherwise there's a lookup overhead
+*/
+XMLPUBFUN htmlStatus XMLCALL htmlAttrAllowed(const htmlElemDesc*, const xmlChar*, int) ;
+XMLPUBFUN int XMLCALL htmlElementAllowedHere(const htmlElemDesc*, const xmlChar*) ;
+XMLPUBFUN htmlStatus XMLCALL htmlElementStatusHere(const htmlElemDesc*, const htmlElemDesc*) ;
+XMLPUBFUN htmlStatus XMLCALL htmlNodeStatus(const htmlNodePtr, int) ;
+/**
+ * htmlDefaultSubelement:
+ * @elt: HTML element
+ *
+ * Returns the default subelement for this element
+ */
+#define htmlDefaultSubelement(elt) elt->defaultsubelt
+/**
+ * htmlElementAllowedHereDesc:
+ * @parent: HTML parent element
+ * @elt: HTML element
+ *
+ * Checks whether an HTML element description may be a
+ * direct child of the specified element.
+ *
+ * Returns 1 if allowed; 0 otherwise.
+ */
+#define htmlElementAllowedHereDesc(parent,elt) \
+ htmlElementAllowedHere((parent), (elt)->name)
+/**
+ * htmlRequiredAttrs:
+ * @elt: HTML element
+ *
+ * Returns the attributes required for the specified element.
+ */
+#define htmlRequiredAttrs(elt) (elt)->attrs_req
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_HTML_ENABLED */
+#endif /* __HTML_PARSER_H__ */
diff --git a/interfaces/ext/libxml/HTMLtree.h b/interfaces/ext/libxml/HTMLtree.h
new file mode 100644
index 0000000..6ea8207
--- /dev/null
+++ b/interfaces/ext/libxml/HTMLtree.h
@@ -0,0 +1,147 @@
+/*
+ * Summary: specific APIs to process HTML tree, especially serialization
+ * Description: this module implements a few function needed to process
+ * tree in an HTML specific way.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __HTML_TREE_H__
+#define __HTML_TREE_H__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/HTMLparser.h>
+
+#ifdef LIBXML_HTML_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * HTML_TEXT_NODE:
+ *
+ * Macro. A text node in a HTML document is really implemented
+ * the same way as a text node in an XML document.
+ */
+#define HTML_TEXT_NODE XML_TEXT_NODE
+/**
+ * HTML_ENTITY_REF_NODE:
+ *
+ * Macro. An entity reference in a HTML document is really implemented
+ * the same way as an entity reference in an XML document.
+ */
+#define HTML_ENTITY_REF_NODE XML_ENTITY_REF_NODE
+/**
+ * HTML_COMMENT_NODE:
+ *
+ * Macro. A comment in a HTML document is really implemented
+ * the same way as a comment in an XML document.
+ */
+#define HTML_COMMENT_NODE XML_COMMENT_NODE
+/**
+ * HTML_PRESERVE_NODE:
+ *
+ * Macro. A preserved node in a HTML document is really implemented
+ * the same way as a CDATA section in an XML document.
+ */
+#define HTML_PRESERVE_NODE XML_CDATA_SECTION_NODE
+/**
+ * HTML_PI_NODE:
+ *
+ * Macro. A processing instruction in a HTML document is really implemented
+ * the same way as a processing instruction in an XML document.
+ */
+#define HTML_PI_NODE XML_PI_NODE
+
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlNewDoc (const xmlChar *URI,
+ const xmlChar *ExternalID);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlNewDocNoDtD (const xmlChar *URI,
+ const xmlChar *ExternalID);
+XMLPUBFUN const xmlChar * XMLCALL
+ htmlGetMetaEncoding (htmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ htmlSetMetaEncoding (htmlDocPtr doc,
+ const xmlChar *encoding);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ htmlDocDumpMemory (xmlDocPtr cur,
+ xmlChar **mem,
+ int *size);
+XMLPUBFUN void XMLCALL
+ htmlDocDumpMemoryFormat (xmlDocPtr cur,
+ xmlChar **mem,
+ int *size,
+ int format);
+XMLPUBFUN int XMLCALL
+ htmlDocDump (FILE *f,
+ xmlDocPtr cur);
+XMLPUBFUN int XMLCALL
+ htmlSaveFile (const char *filename,
+ xmlDocPtr cur);
+XMLPUBFUN int XMLCALL
+ htmlNodeDump (xmlBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur);
+XMLPUBFUN void XMLCALL
+ htmlNodeDumpFile (FILE *out,
+ xmlDocPtr doc,
+ xmlNodePtr cur);
+XMLPUBFUN int XMLCALL
+ htmlNodeDumpFileFormat (FILE *out,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ const char *encoding,
+ int format);
+XMLPUBFUN int XMLCALL
+ htmlSaveFileEnc (const char *filename,
+ xmlDocPtr cur,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ htmlSaveFileFormat (const char *filename,
+ xmlDocPtr cur,
+ const char *encoding,
+ int format);
+
+XMLPUBFUN void XMLCALL
+ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ const char *encoding,
+ int format);
+XMLPUBFUN void XMLCALL
+ htmlDocContentDumpOutput(xmlOutputBufferPtr buf,
+ xmlDocPtr cur,
+ const char *encoding);
+XMLPUBFUN void XMLCALL
+ htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf,
+ xmlDocPtr cur,
+ const char *encoding,
+ int format);
+XMLPUBFUN void XMLCALL
+ htmlNodeDumpOutput (xmlOutputBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ const char *encoding);
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+XMLPUBFUN int XMLCALL
+ htmlIsBooleanAttr (const xmlChar *name);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_HTML_ENABLED */
+
+#endif /* __HTML_TREE_H__ */
+
diff --git a/interfaces/ext/libxml/SAX.h b/interfaces/ext/libxml/SAX.h
new file mode 100644
index 0000000..0ca161b
--- /dev/null
+++ b/interfaces/ext/libxml/SAX.h
@@ -0,0 +1,173 @@
+/*
+ * Summary: Old SAX version 1 handler, deprecated
+ * Description: DEPRECATED set of SAX version 1 interfaces used to
+ * build the DOM tree.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SAX_H__
+#define __XML_SAX_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/xlink.h>
+
+#ifdef LIBXML_LEGACY_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN const xmlChar * XMLCALL
+ getPublicId (void *ctx);
+XMLPUBFUN const xmlChar * XMLCALL
+ getSystemId (void *ctx);
+XMLPUBFUN void XMLCALL
+ setDocumentLocator (void *ctx,
+ xmlSAXLocatorPtr loc);
+
+XMLPUBFUN int XMLCALL
+ getLineNumber (void *ctx);
+XMLPUBFUN int XMLCALL
+ getColumnNumber (void *ctx);
+
+XMLPUBFUN int XMLCALL
+ isStandalone (void *ctx);
+XMLPUBFUN int XMLCALL
+ hasInternalSubset (void *ctx);
+XMLPUBFUN int XMLCALL
+ hasExternalSubset (void *ctx);
+
+XMLPUBFUN void XMLCALL
+ internalSubset (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN void XMLCALL
+ externalSubset (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ getEntity (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ getParameterEntity (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ resolveEntity (void *ctx,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+
+XMLPUBFUN void XMLCALL
+ entityDecl (void *ctx,
+ const xmlChar *name,
+ int type,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ xmlChar *content);
+XMLPUBFUN void XMLCALL
+ attributeDecl (void *ctx,
+ const xmlChar *elem,
+ const xmlChar *fullname,
+ int type,
+ int def,
+ const xmlChar *defaultValue,
+ xmlEnumerationPtr tree);
+XMLPUBFUN void XMLCALL
+ elementDecl (void *ctx,
+ const xmlChar *name,
+ int type,
+ xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL
+ notationDecl (void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+XMLPUBFUN void XMLCALL
+ unparsedEntityDecl (void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ const xmlChar *notationName);
+
+XMLPUBFUN void XMLCALL
+ startDocument (void *ctx);
+XMLPUBFUN void XMLCALL
+ endDocument (void *ctx);
+XMLPUBFUN void XMLCALL
+ attribute (void *ctx,
+ const xmlChar *fullname,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ startElement (void *ctx,
+ const xmlChar *fullname,
+ const xmlChar **atts);
+XMLPUBFUN void XMLCALL
+ endElement (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ reference (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ characters (void *ctx,
+ const xmlChar *ch,
+ int len);
+XMLPUBFUN void XMLCALL
+ ignorableWhitespace (void *ctx,
+ const xmlChar *ch,
+ int len);
+XMLPUBFUN void XMLCALL
+ processingInstruction (void *ctx,
+ const xmlChar *target,
+ const xmlChar *data);
+XMLPUBFUN void XMLCALL
+ globalNamespace (void *ctx,
+ const xmlChar *href,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ setNamespace (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlNsPtr XMLCALL
+ getNamespace (void *ctx);
+XMLPUBFUN int XMLCALL
+ checkNamespace (void *ctx,
+ xmlChar *nameSpace);
+XMLPUBFUN void XMLCALL
+ namespaceDecl (void *ctx,
+ const xmlChar *href,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ comment (void *ctx,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ cdataBlock (void *ctx,
+ const xmlChar *value,
+ int len);
+
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN void XMLCALL
+ initxmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr,
+ int warning);
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN void XMLCALL
+ inithtmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr);
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN void XMLCALL
+ initdocbDefaultSAXHandler (xmlSAXHandlerV1 *hdlr);
+#endif
+#endif /* LIBXML_SAX1_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_LEGACY_ENABLED */
+
+#endif /* __XML_SAX_H__ */
diff --git a/interfaces/ext/libxml/SAX2.h b/interfaces/ext/libxml/SAX2.h
new file mode 100644
index 0000000..8d2db02
--- /dev/null
+++ b/interfaces/ext/libxml/SAX2.h
@@ -0,0 +1,176 @@
+/*
+ * Summary: SAX2 parser interface used to build the DOM tree
+ * Description: those are the default SAX2 interfaces used by
+ * the library when building DOM tree.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SAX2_H__
+#define __XML_SAX2_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/xlink.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlSAX2GetPublicId (void *ctx);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlSAX2GetSystemId (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlSAX2SetDocumentLocator (void *ctx,
+ xmlSAXLocatorPtr loc);
+
+XMLPUBFUN int XMLCALL
+ xmlSAX2GetLineNumber (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSAX2GetColumnNumber (void *ctx);
+
+XMLPUBFUN int XMLCALL
+ xmlSAX2IsStandalone (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSAX2HasInternalSubset (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSAX2HasExternalSubset (void *ctx);
+
+XMLPUBFUN void XMLCALL
+ xmlSAX2InternalSubset (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN void XMLCALL
+ xmlSAX2ExternalSubset (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlSAX2GetEntity (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlSAX2GetParameterEntity (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlSAX2ResolveEntity (void *ctx,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+
+XMLPUBFUN void XMLCALL
+ xmlSAX2EntityDecl (void *ctx,
+ const xmlChar *name,
+ int type,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ xmlChar *content);
+XMLPUBFUN void XMLCALL
+ xmlSAX2AttributeDecl (void *ctx,
+ const xmlChar *elem,
+ const xmlChar *fullname,
+ int type,
+ int def,
+ const xmlChar *defaultValue,
+ xmlEnumerationPtr tree);
+XMLPUBFUN void XMLCALL
+ xmlSAX2ElementDecl (void *ctx,
+ const xmlChar *name,
+ int type,
+ xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL
+ xmlSAX2NotationDecl (void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+XMLPUBFUN void XMLCALL
+ xmlSAX2UnparsedEntityDecl (void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ const xmlChar *notationName);
+
+XMLPUBFUN void XMLCALL
+ xmlSAX2StartDocument (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlSAX2EndDocument (void *ctx);
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+XMLPUBFUN void XMLCALL
+ xmlSAX2StartElement (void *ctx,
+ const xmlChar *fullname,
+ const xmlChar **atts);
+XMLPUBFUN void XMLCALL
+ xmlSAX2EndElement (void *ctx,
+ const xmlChar *name);
+#endif /* LIBXML_SAX1_ENABLED or LIBXML_HTML_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlSAX2StartElementNs (void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI,
+ int nb_namespaces,
+ const xmlChar **namespaces,
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes);
+XMLPUBFUN void XMLCALL
+ xmlSAX2EndElementNs (void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI);
+XMLPUBFUN void XMLCALL
+ xmlSAX2Reference (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ xmlSAX2Characters (void *ctx,
+ const xmlChar *ch,
+ int len);
+XMLPUBFUN void XMLCALL
+ xmlSAX2IgnorableWhitespace (void *ctx,
+ const xmlChar *ch,
+ int len);
+XMLPUBFUN void XMLCALL
+ xmlSAX2ProcessingInstruction (void *ctx,
+ const xmlChar *target,
+ const xmlChar *data);
+XMLPUBFUN void XMLCALL
+ xmlSAX2Comment (void *ctx,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ xmlSAX2CDataBlock (void *ctx,
+ const xmlChar *value,
+ int len);
+
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlSAXDefaultVersion (int version);
+#endif /* LIBXML_SAX1_ENABLED */
+
+XMLPUBFUN int XMLCALL
+ xmlSAXVersion (xmlSAXHandler *hdlr,
+ int version);
+XMLPUBFUN void XMLCALL
+ xmlSAX2InitDefaultSAXHandler (xmlSAXHandler *hdlr,
+ int warning);
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr);
+XMLPUBFUN void XMLCALL
+ htmlDefaultSAXHandlerInit (void);
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr);
+XMLPUBFUN void XMLCALL
+ docbDefaultSAXHandlerInit (void);
+#endif
+XMLPUBFUN void XMLCALL
+ xmlDefaultSAXHandlerInit (void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_SAX2_H__ */
diff --git a/interfaces/ext/libxml/c14n.h b/interfaces/ext/libxml/c14n.h
new file mode 100644
index 0000000..a8aa737
--- /dev/null
+++ b/interfaces/ext/libxml/c14n.h
@@ -0,0 +1,115 @@
+/*
+ * Summary: Provide Canonical XML and Exclusive XML Canonicalization
+ * Description: the c14n modules provides a
+ *
+ * "Canonical XML" implementation
+ * http://www.w3.org/TR/xml-c14n
+ *
+ * and an
+ *
+ * "Exclusive XML Canonicalization" implementation
+ * http://www.w3.org/TR/xml-exc-c14n
+
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Aleksey Sanin <aleksey at aleksey.com>
+ */
+#ifndef __XML_C14N_H__
+#define __XML_C14N_H__
+#ifdef LIBXML_C14N_ENABLED
+#ifdef LIBXML_OUTPUT_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+/*
+ * XML Canonicazation
+ * http://www.w3.org/TR/xml-c14n
+ *
+ * Exclusive XML Canonicazation
+ * http://www.w3.org/TR/xml-exc-c14n
+ *
+ * Canonical form of an XML document could be created if and only if
+ * a) default attributes (if any) are added to all nodes
+ * b) all character and parsed entity references are resolved
+ * In order to achive this in libxml2 the document MUST be loaded with
+ * following global setings:
+ *
+ * xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
+ * xmlSubstituteEntitiesDefault(1);
+ *
+ * or corresponding parser context setting:
+ * xmlParserCtxtPtr ctxt;
+ *
+ * ...
+ * ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
+ * ctxt->replaceEntities = 1;
+ * ...
+ */
+
+
+XMLPUBFUN int XMLCALL
+ xmlC14NDocSaveTo (xmlDocPtr doc,
+ xmlNodeSetPtr nodes,
+ int exclusive,
+ xmlChar **inclusive_ns_prefixes,
+ int with_comments,
+ xmlOutputBufferPtr buf);
+
+XMLPUBFUN int XMLCALL
+ xmlC14NDocDumpMemory (xmlDocPtr doc,
+ xmlNodeSetPtr nodes,
+ int exclusive,
+ xmlChar **inclusive_ns_prefixes,
+ int with_comments,
+ xmlChar **doc_txt_ptr);
+
+XMLPUBFUN int XMLCALL
+ xmlC14NDocSave (xmlDocPtr doc,
+ xmlNodeSetPtr nodes,
+ int exclusive,
+ xmlChar **inclusive_ns_prefixes,
+ int with_comments,
+ const char* filename,
+ int compression);
+
+
+/**
+ * This is the core C14N function
+ */
+/**
+ * xmlC14NIsVisibleCallback:
+ * @user_data: user data
+ * @node: the curent node
+ * @parent: the parent node
+ *
+ * Signature for a C14N callback on visible nodes
+ *
+ * Returns 1 if the node should be included
+ */
+typedef int (*xmlC14NIsVisibleCallback) (void* user_data,
+ xmlNodePtr node,
+ xmlNodePtr parent);
+
+XMLPUBFUN int XMLCALL
+ xmlC14NExecute (xmlDocPtr doc,
+ xmlC14NIsVisibleCallback is_visible_callback,
+ void* user_data,
+ int exclusive,
+ xmlChar **inclusive_ns_prefixes,
+ int with_comments,
+ xmlOutputBufferPtr buf);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+#endif /* LIBXML_C14N_ENABLED */
+#endif /* __XML_C14N_H__ */
+
diff --git a/interfaces/ext/libxml/catalog.h b/interfaces/ext/libxml/catalog.h
new file mode 100644
index 0000000..b444137
--- /dev/null
+++ b/interfaces/ext/libxml/catalog.h
@@ -0,0 +1,182 @@
+/**
+ * Summary: interfaces to the Catalog handling system
+ * Description: the catalog module implements the support for
+ * XML Catalogs and SGML catalogs
+ *
+ * SGML Open Technical Resolution TR9401:1997.
+ * http://www.jclark.com/sp/catalog.htm
+ *
+ * XML Catalogs Working Draft 06 August 2001
+ * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_CATALOG_H__
+#define __XML_CATALOG_H__
+
+#include <stdio.h>
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlstring.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_CATALOG_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * XML_CATALOGS_NAMESPACE:
+ *
+ * The namespace for the XML Catalogs elements.
+ */
+#define XML_CATALOGS_NAMESPACE \
+ (const xmlChar *) "urn:oasis:names:tc:entity:xmlns:xml:catalog"
+/**
+ * XML_CATALOG_PI:
+ *
+ * The specific XML Catalog Processing Instuction name.
+ */
+#define XML_CATALOG_PI \
+ (const xmlChar *) "oasis-xml-catalog"
+
+/*
+ * The API is voluntarily limited to general cataloging.
+ */
+typedef enum {
+ XML_CATA_PREFER_NONE = 0,
+ XML_CATA_PREFER_PUBLIC = 1,
+ XML_CATA_PREFER_SYSTEM
+} xmlCatalogPrefer;
+
+typedef enum {
+ XML_CATA_ALLOW_NONE = 0,
+ XML_CATA_ALLOW_GLOBAL = 1,
+ XML_CATA_ALLOW_DOCUMENT = 2,
+ XML_CATA_ALLOW_ALL = 3
+} xmlCatalogAllow;
+
+typedef struct _xmlCatalog xmlCatalog;
+typedef xmlCatalog *xmlCatalogPtr;
+
+/*
+ * Operations on a given catalog.
+ */
+XMLPUBFUN xmlCatalogPtr XMLCALL
+ xmlNewCatalog (int sgml);
+XMLPUBFUN xmlCatalogPtr XMLCALL
+ xmlLoadACatalog (const char *filename);
+XMLPUBFUN xmlCatalogPtr XMLCALL
+ xmlLoadSGMLSuperCatalog (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlConvertSGMLCatalog (xmlCatalogPtr catal);
+XMLPUBFUN int XMLCALL
+ xmlACatalogAdd (xmlCatalogPtr catal,
+ const xmlChar *type,
+ const xmlChar *orig,
+ const xmlChar *replace);
+XMLPUBFUN int XMLCALL
+ xmlACatalogRemove (xmlCatalogPtr catal,
+ const xmlChar *value);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlACatalogResolve (xmlCatalogPtr catal,
+ const xmlChar *pubID,
+ const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlACatalogResolveSystem(xmlCatalogPtr catal,
+ const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlACatalogResolvePublic(xmlCatalogPtr catal,
+ const xmlChar *pubID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlACatalogResolveURI (xmlCatalogPtr catal,
+ const xmlChar *URI);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlACatalogDump (xmlCatalogPtr catal,
+ FILE *out);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlFreeCatalog (xmlCatalogPtr catal);
+XMLPUBFUN int XMLCALL
+ xmlCatalogIsEmpty (xmlCatalogPtr catal);
+
+/*
+ * Global operations.
+ */
+XMLPUBFUN void XMLCALL
+ xmlInitializeCatalog (void);
+XMLPUBFUN int XMLCALL
+ xmlLoadCatalog (const char *filename);
+XMLPUBFUN void XMLCALL
+ xmlLoadCatalogs (const char *paths);
+XMLPUBFUN void XMLCALL
+ xmlCatalogCleanup (void);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlCatalogDump (FILE *out);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogResolve (const xmlChar *pubID,
+ const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogResolveSystem (const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogResolvePublic (const xmlChar *pubID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogResolveURI (const xmlChar *URI);
+XMLPUBFUN int XMLCALL
+ xmlCatalogAdd (const xmlChar *type,
+ const xmlChar *orig,
+ const xmlChar *replace);
+XMLPUBFUN int XMLCALL
+ xmlCatalogRemove (const xmlChar *value);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseCatalogFile (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlCatalogConvert (void);
+
+/*
+ * Strictly minimal interfaces for per-document catalogs used
+ * by the parser.
+ */
+XMLPUBFUN void XMLCALL
+ xmlCatalogFreeLocal (void *catalogs);
+XMLPUBFUN void * XMLCALL
+ xmlCatalogAddLocal (void *catalogs,
+ const xmlChar *URL);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogLocalResolve (void *catalogs,
+ const xmlChar *pubID,
+ const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogLocalResolveURI(void *catalogs,
+ const xmlChar *URI);
+/*
+ * Preference settings.
+ */
+XMLPUBFUN int XMLCALL
+ xmlCatalogSetDebug (int level);
+XMLPUBFUN xmlCatalogPrefer XMLCALL
+ xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer);
+XMLPUBFUN void XMLCALL
+ xmlCatalogSetDefaults (xmlCatalogAllow allow);
+XMLPUBFUN xmlCatalogAllow XMLCALL
+ xmlCatalogGetDefaults (void);
+
+
+/* DEPRECATED interfaces */
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlCatalogGetSystem (const xmlChar *sysID);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlCatalogGetPublic (const xmlChar *pubID);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* LIBXML_CATALOG_ENABLED */
+#endif /* __XML_CATALOG_H__ */
diff --git a/interfaces/ext/libxml/chvalid.h b/interfaces/ext/libxml/chvalid.h
new file mode 100644
index 0000000..fb43016
--- /dev/null
+++ b/interfaces/ext/libxml/chvalid.h
@@ -0,0 +1,230 @@
+/*
+ * Summary: Unicode character range checking
+ * Description: this module exports interfaces for the character
+ * range validation APIs
+ *
+ * This file is automatically generated from the cvs source
+ * definition files using the genChRanges.py Python script
+ *
+ * Generation date: Mon Mar 27 11:09:48 2006
+ * Sources: chvalid.def
+ * Author: William Brack <wbrack at mmm.com.hk>
+ */
+
+#ifndef __XML_CHVALID_H__
+#define __XML_CHVALID_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Define our typedefs and structures
+ *
+ */
+typedef struct _xmlChSRange xmlChSRange;
+typedef xmlChSRange *xmlChSRangePtr;
+struct _xmlChSRange {
+ unsigned short low;
+ unsigned short high;
+};
+
+typedef struct _xmlChLRange xmlChLRange;
+typedef xmlChLRange *xmlChLRangePtr;
+struct _xmlChLRange {
+ unsigned int low;
+ unsigned int high;
+};
+
+typedef struct _xmlChRangeGroup xmlChRangeGroup;
+typedef xmlChRangeGroup *xmlChRangeGroupPtr;
+struct _xmlChRangeGroup {
+ int nbShortRange;
+ int nbLongRange;
+ const xmlChSRange *shortRange; /* points to an array of ranges */
+ const xmlChLRange *longRange;
+};
+
+/**
+ * Range checking routine
+ */
+XMLPUBFUN int XMLCALL
+ xmlCharInRange(unsigned int val, const xmlChRangeGroup *group);
+
+
+/**
+ * xmlIsBaseChar_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBaseChar_ch(c) (((0x41 <= (c)) && ((c) <= 0x5a)) || \
+ ((0x61 <= (c)) && ((c) <= 0x7a)) || \
+ ((0xc0 <= (c)) && ((c) <= 0xd6)) || \
+ ((0xd8 <= (c)) && ((c) <= 0xf6)) || \
+ (0xf8 <= (c)))
+
+/**
+ * xmlIsBaseCharQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBaseCharQ(c) (((c) < 0x100) ? \
+ xmlIsBaseChar_ch((c)) : \
+ xmlCharInRange((c), &xmlIsBaseCharGroup))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsBaseCharGroup;
+
+/**
+ * xmlIsBlank_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBlank_ch(c) (((c) == 0x20) || \
+ ((0x9 <= (c)) && ((c) <= 0xa)) || \
+ ((c) == 0xd))
+
+/**
+ * xmlIsBlankQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBlankQ(c) (((c) < 0x100) ? \
+ xmlIsBlank_ch((c)) : 0)
+
+
+/**
+ * xmlIsChar_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsChar_ch(c) (((0x9 <= (c)) && ((c) <= 0xa)) || \
+ ((c) == 0xd) || \
+ (0x20 <= (c)))
+
+/**
+ * xmlIsCharQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsCharQ(c) (((c) < 0x100) ? \
+ xmlIsChar_ch((c)) :\
+ (((0x100 <= (c)) && ((c) <= 0xd7ff)) || \
+ ((0xe000 <= (c)) && ((c) <= 0xfffd)) || \
+ ((0x10000 <= (c)) && ((c) <= 0x10ffff))))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsCharGroup;
+
+/**
+ * xmlIsCombiningQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsCombiningQ(c) (((c) < 0x100) ? \
+ 0 : \
+ xmlCharInRange((c), &xmlIsCombiningGroup))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsCombiningGroup;
+
+/**
+ * xmlIsDigit_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsDigit_ch(c) (((0x30 <= (c)) && ((c) <= 0x39)))
+
+/**
+ * xmlIsDigitQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsDigitQ(c) (((c) < 0x100) ? \
+ xmlIsDigit_ch((c)) : \
+ xmlCharInRange((c), &xmlIsDigitGroup))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsDigitGroup;
+
+/**
+ * xmlIsExtender_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsExtender_ch(c) (((c) == 0xb7))
+
+/**
+ * xmlIsExtenderQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsExtenderQ(c) (((c) < 0x100) ? \
+ xmlIsExtender_ch((c)) : \
+ xmlCharInRange((c), &xmlIsExtenderGroup))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsExtenderGroup;
+
+/**
+ * xmlIsIdeographicQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsIdeographicQ(c) (((c) < 0x100) ? \
+ 0 :\
+ (((0x4e00 <= (c)) && ((c) <= 0x9fa5)) || \
+ ((c) == 0x3007) || \
+ ((0x3021 <= (c)) && ((c) <= 0x3029))))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsIdeographicGroup;
+XMLPUBVAR const unsigned char xmlIsPubidChar_tab[256];
+
+/**
+ * xmlIsPubidChar_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsPubidChar_ch(c) (xmlIsPubidChar_tab[(c)])
+
+/**
+ * xmlIsPubidCharQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsPubidCharQ(c) (((c) < 0x100) ? \
+ xmlIsPubidChar_ch((c)) : 0)
+
+XMLPUBFUN int XMLCALL
+ xmlIsBaseChar(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsBlank(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsChar(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsCombining(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsDigit(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsExtender(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsIdeographic(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsPubidChar(unsigned int ch);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_CHVALID_H__ */
diff --git a/interfaces/ext/libxml/debugXML.h b/interfaces/ext/libxml/debugXML.h
new file mode 100644
index 0000000..5a9d20b
--- /dev/null
+++ b/interfaces/ext/libxml/debugXML.h
@@ -0,0 +1,217 @@
+/*
+ * Summary: Tree debugging APIs
+ * Description: Interfaces to a set of routines used for debugging the tree
+ * produced by the XML parser.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __DEBUG_XML__
+#define __DEBUG_XML__
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_DEBUG_ENABLED
+
+#include <libxml/xpath.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The standard Dump routines.
+ */
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpString (FILE *output,
+ const xmlChar *str);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpAttr (FILE *output,
+ xmlAttrPtr attr,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpAttrList (FILE *output,
+ xmlAttrPtr attr,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpOneNode (FILE *output,
+ xmlNodePtr node,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpNode (FILE *output,
+ xmlNodePtr node,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpNodeList (FILE *output,
+ xmlNodePtr node,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpDocumentHead(FILE *output,
+ xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpDocument (FILE *output,
+ xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpDTD (FILE *output,
+ xmlDtdPtr dtd);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpEntities (FILE *output,
+ xmlDocPtr doc);
+
+/****************************************************************
+ * *
+ * Checking routines *
+ * *
+ ****************************************************************/
+
+XMLPUBFUN int XMLCALL
+ xmlDebugCheckDocument (FILE * output,
+ xmlDocPtr doc);
+
+/****************************************************************
+ * *
+ * XML shell helpers *
+ * *
+ ****************************************************************/
+
+XMLPUBFUN void XMLCALL
+ xmlLsOneNode (FILE *output, xmlNodePtr node);
+XMLPUBFUN int XMLCALL
+ xmlLsCountNode (xmlNodePtr node);
+
+XMLPUBFUN const char * XMLCALL
+ xmlBoolToText (int boolval);
+
+/****************************************************************
+ * *
+ * The XML shell related structures and functions *
+ * *
+ ****************************************************************/
+
+#ifdef LIBXML_XPATH_ENABLED
+/**
+ * xmlShellReadlineFunc:
+ * @prompt: a string prompt
+ *
+ * This is a generic signature for the XML shell input function.
+ *
+ * Returns a string which will be freed by the Shell.
+ */
+typedef char * (* xmlShellReadlineFunc)(char *prompt);
+
+/**
+ * xmlShellCtxt:
+ *
+ * A debugging shell context.
+ * TODO: add the defined function tables.
+ */
+typedef struct _xmlShellCtxt xmlShellCtxt;
+typedef xmlShellCtxt *xmlShellCtxtPtr;
+struct _xmlShellCtxt {
+ char *filename;
+ xmlDocPtr doc;
+ xmlNodePtr node;
+ xmlXPathContextPtr pctxt;
+ int loaded;
+ FILE *output;
+ xmlShellReadlineFunc input;
+};
+
+/**
+ * xmlShellCmd:
+ * @ctxt: a shell context
+ * @arg: a string argument
+ * @node: a first node
+ * @node2: a second node
+ *
+ * This is a generic signature for the XML shell functions.
+ *
+ * Returns an int, negative returns indicating errors.
+ */
+typedef int (* xmlShellCmd) (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+
+XMLPUBFUN void XMLCALL
+ xmlShellPrintXPathError (int errorType,
+ const char *arg);
+XMLPUBFUN void XMLCALL
+ xmlShellPrintXPathResult(xmlXPathObjectPtr list);
+XMLPUBFUN int XMLCALL
+ xmlShellList (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellBase (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellDir (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellLoad (xmlShellCtxtPtr ctxt,
+ char *filename,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlShellPrintNode (xmlNodePtr node);
+XMLPUBFUN int XMLCALL
+ xmlShellCat (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellWrite (xmlShellCtxtPtr ctxt,
+ char *filename,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellSave (xmlShellCtxtPtr ctxt,
+ char *filename,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+#endif /* LIBXML_OUTPUT_ENABLED */
+#ifdef LIBXML_VALID_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlShellValidate (xmlShellCtxtPtr ctxt,
+ char *dtd,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+#endif /* LIBXML_VALID_ENABLED */
+XMLPUBFUN int XMLCALL
+ xmlShellDu (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr tree,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellPwd (xmlShellCtxtPtr ctxt,
+ char *buffer,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+
+/*
+ * The Shell interface.
+ */
+XMLPUBFUN void XMLCALL
+ xmlShell (xmlDocPtr doc,
+ char *filename,
+ xmlShellReadlineFunc input,
+ FILE *output);
+
+#endif /* LIBXML_XPATH_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_DEBUG_ENABLED */
+#endif /* __DEBUG_XML__ */
diff --git a/interfaces/ext/libxml/dict.h b/interfaces/ext/libxml/dict.h
new file mode 100644
index 0000000..abb8339
--- /dev/null
+++ b/interfaces/ext/libxml/dict.h
@@ -0,0 +1,69 @@
+/*
+ * Summary: string dictionnary
+ * Description: dictionary of reusable strings, just used to avoid allocation
+ * and freeing operations.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_DICT_H__
+#define __XML_DICT_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The dictionnary.
+ */
+typedef struct _xmlDict xmlDict;
+typedef xmlDict *xmlDictPtr;
+
+/*
+ * Constructor and destructor.
+ */
+XMLPUBFUN xmlDictPtr XMLCALL
+ xmlDictCreate (void);
+XMLPUBFUN xmlDictPtr XMLCALL
+ xmlDictCreateSub(xmlDictPtr sub);
+XMLPUBFUN int XMLCALL
+ xmlDictReference(xmlDictPtr dict);
+XMLPUBFUN void XMLCALL
+ xmlDictFree (xmlDictPtr dict);
+
+/*
+ * Lookup of entry in the dictionnary.
+ */
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlDictLookup (xmlDictPtr dict,
+ const xmlChar *name,
+ int len);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlDictExists (xmlDictPtr dict,
+ const xmlChar *name,
+ int len);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlDictQLookup (xmlDictPtr dict,
+ const xmlChar *prefix,
+ const xmlChar *name);
+XMLPUBFUN int XMLCALL
+ xmlDictOwns (xmlDictPtr dict,
+ const xmlChar *str);
+XMLPUBFUN int XMLCALL
+ xmlDictSize (xmlDictPtr dict);
+
+/*
+ * Cleanup function
+ */
+XMLPUBFUN void XMLCALL
+ xmlDictCleanup (void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! __XML_DICT_H__ */
diff --git a/interfaces/ext/libxml/encoding.h b/interfaces/ext/libxml/encoding.h
new file mode 100644
index 0000000..c74b25f
--- /dev/null
+++ b/interfaces/ext/libxml/encoding.h
@@ -0,0 +1,226 @@
+/*
+ * Summary: interface for the encoding conversion functions
+ * Description: interface for the encoding conversion functions needed for
+ * XML basic encoding and iconv() support.
+ *
+ * Related specs are
+ * rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies
+ * [ISO-10646] UTF-8 and UTF-16 in Annexes
+ * [ISO-8859-1] ISO Latin-1 characters codes.
+ * [UNICODE] The Unicode Consortium, "The Unicode Standard --
+ * Worldwide Character Encoding -- Version 1.0", Addison-
+ * Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is
+ * described in Unicode Technical Report #4.
+ * [US-ASCII] Coded Character Set--7-bit American Standard Code for
+ * Information Interchange, ANSI X3.4-1986.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_CHAR_ENCODING_H__
+#define __XML_CHAR_ENCODING_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_ICONV_ENABLED
+#include <iconv.h>
+#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * xmlCharEncoding:
+ *
+ * Predefined values for some standard encodings.
+ * Libxml does not do beforehand translation on UTF8 and ISOLatinX.
+ * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default.
+ *
+ * Anything else would have to be translated to UTF8 before being
+ * given to the parser itself. The BOM for UTF16 and the encoding
+ * declaration are looked at and a converter is looked for at that
+ * point. If not found the parser stops here as asked by the XML REC. A
+ * converter can be registered by the user using xmlRegisterCharEncodingHandler
+ * but the current form doesn't allow stateful transcoding (a serious
+ * problem agreed !). If iconv has been found it will be used
+ * automatically and allow stateful transcoding, the simplest is then
+ * to be sure to enable iconv and to provide iconv libs for the encoding
+ * support needed.
+ *
+ * Note that the generic "UTF-16" is not a predefined value. Instead, only
+ * the specific UTF-16LE and UTF-16BE are present.
+ */
+typedef enum {
+ XML_CHAR_ENCODING_ERROR= -1, /* No char encoding detected */
+ XML_CHAR_ENCODING_NONE= 0, /* No char encoding detected */
+ XML_CHAR_ENCODING_UTF8= 1, /* UTF-8 */
+ XML_CHAR_ENCODING_UTF16LE= 2, /* UTF-16 little endian */
+ XML_CHAR_ENCODING_UTF16BE= 3, /* UTF-16 big endian */
+ XML_CHAR_ENCODING_UCS4LE= 4, /* UCS-4 little endian */
+ XML_CHAR_ENCODING_UCS4BE= 5, /* UCS-4 big endian */
+ XML_CHAR_ENCODING_EBCDIC= 6, /* EBCDIC uh! */
+ XML_CHAR_ENCODING_UCS4_2143=7, /* UCS-4 unusual ordering */
+ XML_CHAR_ENCODING_UCS4_3412=8, /* UCS-4 unusual ordering */
+ XML_CHAR_ENCODING_UCS2= 9, /* UCS-2 */
+ XML_CHAR_ENCODING_8859_1= 10,/* ISO-8859-1 ISO Latin 1 */
+ XML_CHAR_ENCODING_8859_2= 11,/* ISO-8859-2 ISO Latin 2 */
+ XML_CHAR_ENCODING_8859_3= 12,/* ISO-8859-3 */
+ XML_CHAR_ENCODING_8859_4= 13,/* ISO-8859-4 */
+ XML_CHAR_ENCODING_8859_5= 14,/* ISO-8859-5 */
+ XML_CHAR_ENCODING_8859_6= 15,/* ISO-8859-6 */
+ XML_CHAR_ENCODING_8859_7= 16,/* ISO-8859-7 */
+ XML_CHAR_ENCODING_8859_8= 17,/* ISO-8859-8 */
+ XML_CHAR_ENCODING_8859_9= 18,/* ISO-8859-9 */
+ XML_CHAR_ENCODING_2022_JP= 19,/* ISO-2022-JP */
+ XML_CHAR_ENCODING_SHIFT_JIS=20,/* Shift_JIS */
+ XML_CHAR_ENCODING_EUC_JP= 21,/* EUC-JP */
+ XML_CHAR_ENCODING_ASCII= 22 /* pure ASCII */
+} xmlCharEncoding;
+
+/**
+ * xmlCharEncodingInputFunc:
+ * @out: a pointer to an array of bytes to store the UTF-8 result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of chars in the original encoding
+ * @inlen: the length of @in
+ *
+ * Take a block of chars in the original encoding and try to convert
+ * it to an UTF-8 block of chars out.
+ *
+ * Returns the number of bytes written, -1 if lack of space, or -2
+ * if the transcoding failed.
+ * The value of @inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictiable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+typedef int (* xmlCharEncodingInputFunc)(unsigned char *out, int *outlen,
+ const unsigned char *in, int *inlen);
+
+
+/**
+ * xmlCharEncodingOutputFunc:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to another
+ * encoding.
+ * Note: a first call designed to produce heading info is called with
+ * in = NULL. If stateful this should also initialize the encoder state.
+ *
+ * Returns the number of bytes written, -1 if lack of space, or -2
+ * if the transcoding failed.
+ * The value of @inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictiable.
+ * The value of @outlen after return is the number of octets produced.
+ */
+typedef int (* xmlCharEncodingOutputFunc)(unsigned char *out, int *outlen,
+ const unsigned char *in, int *inlen);
+
+
+/*
+ * Block defining the handlers for non UTF-8 encodings.
+ * If iconv is supported, there are two extra fields.
+ */
+
+typedef struct _xmlCharEncodingHandler xmlCharEncodingHandler;
+typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr;
+struct _xmlCharEncodingHandler {
+ char *name;
+ xmlCharEncodingInputFunc input;
+ xmlCharEncodingOutputFunc output;
+#ifdef LIBXML_ICONV_ENABLED
+ iconv_t iconv_in;
+ iconv_t iconv_out;
+#endif /* LIBXML_ICONV_ENABLED */
+};
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/tree.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Interfaces for encoding handlers.
+ */
+XMLPUBFUN void XMLCALL
+ xmlInitCharEncodingHandlers (void);
+XMLPUBFUN void XMLCALL
+ xmlCleanupCharEncodingHandlers (void);
+XMLPUBFUN void XMLCALL
+ xmlRegisterCharEncodingHandler (xmlCharEncodingHandlerPtr handler);
+XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
+ xmlGetCharEncodingHandler (xmlCharEncoding enc);
+XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
+ xmlFindCharEncodingHandler (const char *name);
+XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
+ xmlNewCharEncodingHandler (const char *name,
+ xmlCharEncodingInputFunc input,
+ xmlCharEncodingOutputFunc output);
+
+/*
+ * Interfaces for encoding names and aliases.
+ */
+XMLPUBFUN int XMLCALL
+ xmlAddEncodingAlias (const char *name,
+ const char *alias);
+XMLPUBFUN int XMLCALL
+ xmlDelEncodingAlias (const char *alias);
+XMLPUBFUN const char * XMLCALL
+ xmlGetEncodingAlias (const char *alias);
+XMLPUBFUN void XMLCALL
+ xmlCleanupEncodingAliases (void);
+XMLPUBFUN xmlCharEncoding XMLCALL
+ xmlParseCharEncoding (const char *name);
+XMLPUBFUN const char * XMLCALL
+ xmlGetCharEncodingName (xmlCharEncoding enc);
+
+/*
+ * Interfaces directly used by the parsers.
+ */
+XMLPUBFUN xmlCharEncoding XMLCALL
+ xmlDetectCharEncoding (const unsigned char *in,
+ int len);
+
+XMLPUBFUN int XMLCALL
+ xmlCharEncOutFunc (xmlCharEncodingHandler *handler,
+ xmlBufferPtr out,
+ xmlBufferPtr in);
+
+XMLPUBFUN int XMLCALL
+ xmlCharEncInFunc (xmlCharEncodingHandler *handler,
+ xmlBufferPtr out,
+ xmlBufferPtr in);
+XMLPUBFUN int XMLCALL
+ xmlCharEncFirstLine (xmlCharEncodingHandler *handler,
+ xmlBufferPtr out,
+ xmlBufferPtr in);
+XMLPUBFUN int XMLCALL
+ xmlCharEncCloseFunc (xmlCharEncodingHandler *handler);
+
+/*
+ * Export a few useful functions
+ */
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN int XMLCALL
+ UTF8Toisolat1 (unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN int XMLCALL
+ isolat1ToUTF8 (unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_CHAR_ENCODING_H__ */
diff --git a/interfaces/ext/libxml/entities.h b/interfaces/ext/libxml/entities.h
new file mode 100644
index 0000000..cefb97f
--- /dev/null
+++ b/interfaces/ext/libxml/entities.h
@@ -0,0 +1,150 @@
+/*
+ * Summary: interface for the XML entities handling
+ * Description: this module provides some of the entity API needed
+ * for the parser and applications.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_ENTITIES_H__
+#define __XML_ENTITIES_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The different valid entity types.
+ */
+typedef enum {
+ XML_INTERNAL_GENERAL_ENTITY = 1,
+ XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2,
+ XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3,
+ XML_INTERNAL_PARAMETER_ENTITY = 4,
+ XML_EXTERNAL_PARAMETER_ENTITY = 5,
+ XML_INTERNAL_PREDEFINED_ENTITY = 6
+} xmlEntityType;
+
+/*
+ * An unit of storage for an entity, contains the string, the value
+ * and the linkind data needed for the linking in the hash table.
+ */
+
+struct _xmlEntity {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_ENTITY_DECL, must be second ! */
+ const xmlChar *name; /* Entity name */
+ struct _xmlNode *children; /* First child link */
+ struct _xmlNode *last; /* Last child link */
+ struct _xmlDtd *parent; /* -> DTD */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ xmlChar *orig; /* content without ref substitution */
+ xmlChar *content; /* content or ndata if unparsed */
+ int length; /* the content length */
+ xmlEntityType etype; /* The entity type */
+ const xmlChar *ExternalID; /* External identifier for PUBLIC */
+ const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC Entity */
+
+ struct _xmlEntity *nexte; /* unused */
+ const xmlChar *URI; /* the full URI as computed */
+ int owner; /* does the entity own the childrens */
+ int checked; /* was the entity content checked */
+ /* this is also used to count entites
+ * references done from that entity */
+};
+
+/*
+ * All entities are stored in an hash table.
+ * There is 2 separate hash tables for global and parameter entities.
+ */
+
+typedef struct _xmlHashTable xmlEntitiesTable;
+typedef xmlEntitiesTable *xmlEntitiesTablePtr;
+
+/*
+ * External functions:
+ */
+
+#ifdef LIBXML_LEGACY_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlInitializePredefinedEntities (void);
+#endif /* LIBXML_LEGACY_ENABLED */
+
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlNewEntity (xmlDocPtr doc,
+ const xmlChar *name,
+ int type,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID,
+ const xmlChar *content);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlAddDocEntity (xmlDocPtr doc,
+ const xmlChar *name,
+ int type,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID,
+ const xmlChar *content);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlAddDtdEntity (xmlDocPtr doc,
+ const xmlChar *name,
+ int type,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID,
+ const xmlChar *content);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlGetPredefinedEntity (const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlGetDocEntity (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlGetDtdEntity (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlGetParameterEntity (xmlDocPtr doc,
+ const xmlChar *name);
+#ifdef LIBXML_LEGACY_ENABLED
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlEncodeEntities (xmlDocPtr doc,
+ const xmlChar *input);
+#endif /* LIBXML_LEGACY_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlEncodeEntitiesReentrant(xmlDocPtr doc,
+ const xmlChar *input);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlEncodeSpecialChars (xmlDocPtr doc,
+ const xmlChar *input);
+XMLPUBFUN xmlEntitiesTablePtr XMLCALL
+ xmlCreateEntitiesTable (void);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlEntitiesTablePtr XMLCALL
+ xmlCopyEntitiesTable (xmlEntitiesTablePtr table);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlFreeEntitiesTable (xmlEntitiesTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlDumpEntitiesTable (xmlBufferPtr buf,
+ xmlEntitiesTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlDumpEntityDecl (xmlBufferPtr buf,
+ xmlEntityPtr ent);
+#endif /* LIBXML_OUTPUT_ENABLED */
+#ifdef LIBXML_LEGACY_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlCleanupPredefinedEntities(void);
+#endif /* LIBXML_LEGACY_ENABLED */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+# endif /* __XML_ENTITIES_H__ */
diff --git a/interfaces/ext/libxml/globals.h b/interfaces/ext/libxml/globals.h
new file mode 100644
index 0000000..57e25fa
--- /dev/null
+++ b/interfaces/ext/libxml/globals.h
@@ -0,0 +1,491 @@
+/*
+ * Summary: interface for all global variables of the library
+ * Description: all the global variables and thread handling for
+ * those variables is handled by this module.
+ *
+ * The bottom of this file is automatically generated by build_glob.py
+ * based on the description file global.data
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Gary Pennington <Gary.Pennington at uk.sun.com>, Daniel Veillard
+ */
+
+#ifndef __XML_GLOBALS_H
+#define __XML_GLOBALS_H
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/xmlerror.h>
+#include <libxml/SAX.h>
+#include <libxml/SAX2.h>
+#include <libxml/xmlmemory.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN void XMLCALL xmlInitGlobals(void);
+XMLPUBFUN void XMLCALL xmlCleanupGlobals(void);
+
+/**
+ * xmlParserInputBufferCreateFilenameFunc:
+ * @URI: the URI to read from
+ * @enc: the requested source encoding
+ *
+ * Signature for the function doing the lookup for a suitable input method
+ * corresponding to an URI.
+ *
+ * Returns the new xmlParserInputBufferPtr in case of success or NULL if no
+ * method was found.
+ */
+typedef xmlParserInputBufferPtr (*xmlParserInputBufferCreateFilenameFunc) (const char *URI, xmlCharEncoding enc);
+
+/**
+ * xmlOutputBufferCreateFilenameFunc:
+ * @URI: the URI to write to
+ * @enc: the requested target encoding
+ *
+ * Signature for the function doing the lookup for a suitable output method
+ * corresponding to an URI.
+ *
+ * Returns the new xmlOutputBufferPtr in case of success or NULL if no
+ * method was found.
+ */
+typedef xmlOutputBufferPtr (*xmlOutputBufferCreateFilenameFunc) (const char *URI, xmlCharEncodingHandlerPtr encoder, int compression);
+
+XMLPUBFUN xmlParserInputBufferCreateFilenameFunc
+XMLCALL xmlParserInputBufferCreateFilenameDefault (xmlParserInputBufferCreateFilenameFunc func);
+XMLPUBFUN xmlOutputBufferCreateFilenameFunc
+XMLCALL xmlOutputBufferCreateFilenameDefault (xmlOutputBufferCreateFilenameFunc func);
+
+/*
+ * Externally global symbols which need to be protected for backwards
+ * compatibility support.
+ */
+
+#undef docbDefaultSAXHandler
+#undef htmlDefaultSAXHandler
+#undef oldXMLWDcompatibility
+#undef xmlBufferAllocScheme
+#undef xmlDefaultBufferSize
+#undef xmlDefaultSAXHandler
+#undef xmlDefaultSAXLocator
+#undef xmlDoValidityCheckingDefaultValue
+#undef xmlFree
+#undef xmlGenericError
+#undef xmlStructuredError
+#undef xmlGenericErrorContext
+#undef xmlGetWarningsDefaultValue
+#undef xmlIndentTreeOutput
+#undef xmlTreeIndentString
+#undef xmlKeepBlanksDefaultValue
+#undef xmlLineNumbersDefaultValue
+#undef xmlLoadExtDtdDefaultValue
+#undef xmlMalloc
+#undef xmlMallocAtomic
+#undef xmlMemStrdup
+#undef xmlParserDebugEntities
+#undef xmlParserVersion
+#undef xmlPedanticParserDefaultValue
+#undef xmlRealloc
+#undef xmlSaveNoEmptyTags
+#undef xmlSubstituteEntitiesDefaultValue
+#undef xmlRegisterNodeDefaultValue
+#undef xmlDeregisterNodeDefaultValue
+#undef xmlLastError
+#undef xmlParserInputBufferCreateFilenameValue
+#undef xmlOutputBufferCreateFilenameValue
+
+/**
+ * xmlRegisterNodeFunc:
+ * @node: the current node
+ *
+ * Signature for the registration callback of a created node
+ */
+typedef void (*xmlRegisterNodeFunc) (xmlNodePtr node);
+/**
+ * xmlDeregisterNodeFunc:
+ * @node: the current node
+ *
+ * Signature for the deregistration callback of a discarded node
+ */
+typedef void (*xmlDeregisterNodeFunc) (xmlNodePtr node);
+
+typedef struct _xmlGlobalState xmlGlobalState;
+typedef xmlGlobalState *xmlGlobalStatePtr;
+struct _xmlGlobalState
+{
+ const char *xmlParserVersion;
+
+ xmlSAXLocator xmlDefaultSAXLocator;
+ xmlSAXHandlerV1 xmlDefaultSAXHandler;
+ xmlSAXHandlerV1 docbDefaultSAXHandler;
+ xmlSAXHandlerV1 htmlDefaultSAXHandler;
+
+ xmlFreeFunc xmlFree;
+ xmlMallocFunc xmlMalloc;
+ xmlStrdupFunc xmlMemStrdup;
+ xmlReallocFunc xmlRealloc;
+
+ xmlGenericErrorFunc xmlGenericError;
+ xmlStructuredErrorFunc xmlStructuredError;
+ void *xmlGenericErrorContext;
+
+ int oldXMLWDcompatibility;
+
+ xmlBufferAllocationScheme xmlBufferAllocScheme;
+ int xmlDefaultBufferSize;
+
+ int xmlSubstituteEntitiesDefaultValue;
+ int xmlDoValidityCheckingDefaultValue;
+ int xmlGetWarningsDefaultValue;
+ int xmlKeepBlanksDefaultValue;
+ int xmlLineNumbersDefaultValue;
+ int xmlLoadExtDtdDefaultValue;
+ int xmlParserDebugEntities;
+ int xmlPedanticParserDefaultValue;
+
+ int xmlSaveNoEmptyTags;
+ int xmlIndentTreeOutput;
+ const char *xmlTreeIndentString;
+
+ xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
+ xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
+
+ xmlMallocFunc xmlMallocAtomic;
+ xmlError xmlLastError;
+
+ xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue;
+ xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue;
+};
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/threads.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN void XMLCALL xmlInitializeGlobalState(xmlGlobalStatePtr gs);
+
+XMLPUBFUN void XMLCALL xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
+
+XMLPUBFUN void XMLCALL xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler);
+
+XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlRegisterNodeDefault(xmlRegisterNodeFunc func);
+XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func);
+XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func);
+XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func);
+
+XMLPUBFUN xmlOutputBufferCreateFilenameFunc XMLCALL
+ xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func);
+XMLPUBFUN xmlParserInputBufferCreateFilenameFunc XMLCALL
+ xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func);
+
+/** DOC_DISABLE */
+/*
+ * In general the memory allocation entry points are not kept
+ * thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED
+ * - xmlMalloc
+ * - xmlMallocAtomic
+ * - xmlRealloc
+ * - xmlMemStrdup
+ * - xmlFree
+ */
+
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMalloc(void);
+#define xmlMalloc \
+(*(__xmlMalloc()))
+#else
+XMLPUBVAR xmlMallocFunc xmlMalloc;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMallocAtomic(void);
+#define xmlMallocAtomic \
+(*(__xmlMallocAtomic()))
+#else
+XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlReallocFunc * XMLCALL __xmlRealloc(void);
+#define xmlRealloc \
+(*(__xmlRealloc()))
+#else
+XMLPUBVAR xmlReallocFunc xmlRealloc;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlFreeFunc * XMLCALL __xmlFree(void);
+#define xmlFree \
+(*(__xmlFree()))
+#else
+XMLPUBVAR xmlFreeFunc xmlFree;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlStrdupFunc * XMLCALL __xmlMemStrdup(void);
+#define xmlMemStrdup \
+(*(__xmlMemStrdup()))
+#else
+XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
+#endif
+
+#else /* !LIBXML_THREAD_ALLOC_ENABLED */
+XMLPUBVAR xmlMallocFunc xmlMalloc;
+XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
+XMLPUBVAR xmlReallocFunc xmlRealloc;
+XMLPUBVAR xmlFreeFunc xmlFree;
+XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
+#endif /* LIBXML_THREAD_ALLOC_ENABLED */
+
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __docbDefaultSAXHandler(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define docbDefaultSAXHandler \
+(*(__docbDefaultSAXHandler()))
+#else
+XMLPUBVAR xmlSAXHandlerV1 docbDefaultSAXHandler;
+#endif
+#endif
+
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __htmlDefaultSAXHandler(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define htmlDefaultSAXHandler \
+(*(__htmlDefaultSAXHandler()))
+#else
+XMLPUBVAR xmlSAXHandlerV1 htmlDefaultSAXHandler;
+#endif
+#endif
+
+XMLPUBFUN xmlError * XMLCALL __xmlLastError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlLastError \
+(*(__xmlLastError()))
+#else
+XMLPUBVAR xmlError xmlLastError;
+#endif
+
+/*
+ * Everything starting from the line below is
+ * Automatically generated by build_glob.py.
+ * Do not modify the previous line.
+ */
+
+
+XMLPUBFUN int * XMLCALL __oldXMLWDcompatibility(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define oldXMLWDcompatibility \
+(*(__oldXMLWDcompatibility()))
+#else
+XMLPUBVAR int oldXMLWDcompatibility;
+#endif
+
+XMLPUBFUN xmlBufferAllocationScheme * XMLCALL __xmlBufferAllocScheme(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlBufferAllocScheme \
+(*(__xmlBufferAllocScheme()))
+#else
+XMLPUBVAR xmlBufferAllocationScheme xmlBufferAllocScheme;
+#endif
+XMLPUBFUN xmlBufferAllocationScheme XMLCALL xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v);
+
+XMLPUBFUN int * XMLCALL __xmlDefaultBufferSize(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDefaultBufferSize \
+(*(__xmlDefaultBufferSize()))
+#else
+XMLPUBVAR int xmlDefaultBufferSize;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefDefaultBufferSize(int v);
+
+XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __xmlDefaultSAXHandler(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDefaultSAXHandler \
+(*(__xmlDefaultSAXHandler()))
+#else
+XMLPUBVAR xmlSAXHandlerV1 xmlDefaultSAXHandler;
+#endif
+
+XMLPUBFUN xmlSAXLocator * XMLCALL __xmlDefaultSAXLocator(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDefaultSAXLocator \
+(*(__xmlDefaultSAXLocator()))
+#else
+XMLPUBVAR xmlSAXLocator xmlDefaultSAXLocator;
+#endif
+
+XMLPUBFUN int * XMLCALL __xmlDoValidityCheckingDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDoValidityCheckingDefaultValue \
+(*(__xmlDoValidityCheckingDefaultValue()))
+#else
+XMLPUBVAR int xmlDoValidityCheckingDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefDoValidityCheckingDefaultValue(int v);
+
+XMLPUBFUN xmlGenericErrorFunc * XMLCALL __xmlGenericError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlGenericError \
+(*(__xmlGenericError()))
+#else
+XMLPUBVAR xmlGenericErrorFunc xmlGenericError;
+#endif
+
+XMLPUBFUN xmlStructuredErrorFunc * XMLCALL __xmlStructuredError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlStructuredError \
+(*(__xmlStructuredError()))
+#else
+XMLPUBVAR xmlStructuredErrorFunc xmlStructuredError;
+#endif
+
+XMLPUBFUN void * * XMLCALL __xmlGenericErrorContext(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlGenericErrorContext \
+(*(__xmlGenericErrorContext()))
+#else
+XMLPUBVAR void * xmlGenericErrorContext;
+#endif
+
+XMLPUBFUN int * XMLCALL __xmlGetWarningsDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlGetWarningsDefaultValue \
+(*(__xmlGetWarningsDefaultValue()))
+#else
+XMLPUBVAR int xmlGetWarningsDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefGetWarningsDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlIndentTreeOutput(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlIndentTreeOutput \
+(*(__xmlIndentTreeOutput()))
+#else
+XMLPUBVAR int xmlIndentTreeOutput;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefIndentTreeOutput(int v);
+
+XMLPUBFUN const char * * XMLCALL __xmlTreeIndentString(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlTreeIndentString \
+(*(__xmlTreeIndentString()))
+#else
+XMLPUBVAR const char * xmlTreeIndentString;
+#endif
+XMLPUBFUN const char * XMLCALL xmlThrDefTreeIndentString(const char * v);
+
+XMLPUBFUN int * XMLCALL __xmlKeepBlanksDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlKeepBlanksDefaultValue \
+(*(__xmlKeepBlanksDefaultValue()))
+#else
+XMLPUBVAR int xmlKeepBlanksDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefKeepBlanksDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlLineNumbersDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlLineNumbersDefaultValue \
+(*(__xmlLineNumbersDefaultValue()))
+#else
+XMLPUBVAR int xmlLineNumbersDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefLineNumbersDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlLoadExtDtdDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlLoadExtDtdDefaultValue \
+(*(__xmlLoadExtDtdDefaultValue()))
+#else
+XMLPUBVAR int xmlLoadExtDtdDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefLoadExtDtdDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlParserDebugEntities(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlParserDebugEntities \
+(*(__xmlParserDebugEntities()))
+#else
+XMLPUBVAR int xmlParserDebugEntities;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefParserDebugEntities(int v);
+
+XMLPUBFUN const char * * XMLCALL __xmlParserVersion(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlParserVersion \
+(*(__xmlParserVersion()))
+#else
+XMLPUBVAR const char * xmlParserVersion;
+#endif
+
+XMLPUBFUN int * XMLCALL __xmlPedanticParserDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlPedanticParserDefaultValue \
+(*(__xmlPedanticParserDefaultValue()))
+#else
+XMLPUBVAR int xmlPedanticParserDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefPedanticParserDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlSaveNoEmptyTags(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlSaveNoEmptyTags \
+(*(__xmlSaveNoEmptyTags()))
+#else
+XMLPUBVAR int xmlSaveNoEmptyTags;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefSaveNoEmptyTags(int v);
+
+XMLPUBFUN int * XMLCALL __xmlSubstituteEntitiesDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlSubstituteEntitiesDefaultValue \
+(*(__xmlSubstituteEntitiesDefaultValue()))
+#else
+XMLPUBVAR int xmlSubstituteEntitiesDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefSubstituteEntitiesDefaultValue(int v);
+
+XMLPUBFUN xmlRegisterNodeFunc * XMLCALL __xmlRegisterNodeDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlRegisterNodeDefaultValue \
+(*(__xmlRegisterNodeDefaultValue()))
+#else
+XMLPUBVAR xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
+#endif
+
+XMLPUBFUN xmlDeregisterNodeFunc * XMLCALL __xmlDeregisterNodeDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDeregisterNodeDefaultValue \
+(*(__xmlDeregisterNodeDefaultValue()))
+#else
+XMLPUBVAR xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
+#endif
+
+XMLPUBFUN xmlParserInputBufferCreateFilenameFunc * XMLCALL __xmlParserInputBufferCreateFilenameValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlParserInputBufferCreateFilenameValue \
+(*(__xmlParserInputBufferCreateFilenameValue()))
+#else
+XMLPUBVAR xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue;
+#endif
+
+XMLPUBFUN xmlOutputBufferCreateFilenameFunc * XMLCALL __xmlOutputBufferCreateFilenameValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlOutputBufferCreateFilenameValue \
+(*(__xmlOutputBufferCreateFilenameValue()))
+#else
+XMLPUBVAR xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_GLOBALS_H */
diff --git a/interfaces/ext/libxml/hash.h b/interfaces/ext/libxml/hash.h
new file mode 100644
index 0000000..7fe4be7
--- /dev/null
+++ b/interfaces/ext/libxml/hash.h
@@ -0,0 +1,233 @@
+/*
+ * Summary: Chained hash tables
+ * Description: This module implements the hash table support used in
+ * various places in the library.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Bjorn Reese <bjorn.reese at systematic.dk>
+ */
+
+#ifndef __XML_HASH_H__
+#define __XML_HASH_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The hash table.
+ */
+typedef struct _xmlHashTable xmlHashTable;
+typedef xmlHashTable *xmlHashTablePtr;
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/dict.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Recent version of gcc produce a warning when a function pointer is assigned
+ * to an object pointer, or vice versa. The following macro is a dirty hack
+ * to allow suppression of the warning. If your architecture has function
+ * pointers which are a different size than a void pointer, there may be some
+ * serious trouble within the library.
+ */
+/**
+ * XML_CAST_FPTR:
+ * @fptr: pointer to a function
+ *
+ * Macro to do a casting from an object pointer to a
+ * function pointer without encountering a warning from
+ * gcc
+ *
+ * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr))
+ * This macro violated ISO C aliasing rules (gcc4 on s390 broke)
+ * so it is disabled now
+ */
+
+#define XML_CAST_FPTR(fptr) fptr
+
+
+/*
+ * function types:
+ */
+/**
+ * xmlHashDeallocator:
+ * @payload: the data in the hash
+ * @name: the name associated
+ *
+ * Callback to free data from a hash.
+ */
+typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
+/**
+ * xmlHashCopier:
+ * @payload: the data in the hash
+ * @name: the name associated
+ *
+ * Callback to copy data from a hash.
+ *
+ * Returns a copy of the data or NULL in case of error.
+ */
+typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
+/**
+ * xmlHashScanner:
+ * @payload: the data in the hash
+ * @data: extra scannner data
+ * @name: the name associated
+ *
+ * Callback when scanning data in a hash with the simple scanner.
+ */
+typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
+/**
+ * xmlHashScannerFull:
+ * @payload: the data in the hash
+ * @data: extra scannner data
+ * @name: the name associated
+ * @name2: the second name associated
+ * @name3: the third name associated
+ *
+ * Callback when scanning data in a hash with the full scanner.
+ */
+typedef void (*xmlHashScannerFull)(void *payload, void *data,
+ const xmlChar *name, const xmlChar *name2,
+ const xmlChar *name3);
+
+/*
+ * Constructor and destructor.
+ */
+XMLPUBFUN xmlHashTablePtr XMLCALL
+ xmlHashCreate (int size);
+XMLPUBFUN xmlHashTablePtr XMLCALL
+ xmlHashCreateDict(int size,
+ xmlDictPtr dict);
+XMLPUBFUN void XMLCALL
+ xmlHashFree (xmlHashTablePtr table,
+ xmlHashDeallocator f);
+
+/*
+ * Add a new entry to the hash table.
+ */
+XMLPUBFUN int XMLCALL
+ xmlHashAddEntry (xmlHashTablePtr table,
+ const xmlChar *name,
+ void *userdata);
+XMLPUBFUN int XMLCALL
+ xmlHashUpdateEntry(xmlHashTablePtr table,
+ const xmlChar *name,
+ void *userdata,
+ xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL
+ xmlHashAddEntry2(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ void *userdata);
+XMLPUBFUN int XMLCALL
+ xmlHashUpdateEntry2(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ void *userdata,
+ xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL
+ xmlHashAddEntry3(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3,
+ void *userdata);
+XMLPUBFUN int XMLCALL
+ xmlHashUpdateEntry3(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3,
+ void *userdata,
+ xmlHashDeallocator f);
+
+/*
+ * Remove an entry from the hash table.
+ */
+XMLPUBFUN int XMLCALL
+ xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
+ xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL
+ xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL
+ xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, const xmlChar *name3,
+ xmlHashDeallocator f);
+
+/*
+ * Retrieve the userdata.
+ */
+XMLPUBFUN void * XMLCALL
+ xmlHashLookup (xmlHashTablePtr table,
+ const xmlChar *name);
+XMLPUBFUN void * XMLCALL
+ xmlHashLookup2 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2);
+XMLPUBFUN void * XMLCALL
+ xmlHashLookup3 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3);
+XMLPUBFUN void * XMLCALL
+ xmlHashQLookup (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *prefix);
+XMLPUBFUN void * XMLCALL
+ xmlHashQLookup2 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *prefix,
+ const xmlChar *name2,
+ const xmlChar *prefix2);
+XMLPUBFUN void * XMLCALL
+ xmlHashQLookup3 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *prefix,
+ const xmlChar *name2,
+ const xmlChar *prefix2,
+ const xmlChar *name3,
+ const xmlChar *prefix3);
+
+/*
+ * Helpers.
+ */
+XMLPUBFUN xmlHashTablePtr XMLCALL
+ xmlHashCopy (xmlHashTablePtr table,
+ xmlHashCopier f);
+XMLPUBFUN int XMLCALL
+ xmlHashSize (xmlHashTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlHashScan (xmlHashTablePtr table,
+ xmlHashScanner f,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlHashScan3 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3,
+ xmlHashScanner f,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlHashScanFull (xmlHashTablePtr table,
+ xmlHashScannerFull f,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlHashScanFull3(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3,
+ xmlHashScannerFull f,
+ void *data);
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! __XML_HASH_H__ */
diff --git a/interfaces/ext/libxml/list.h b/interfaces/ext/libxml/list.h
new file mode 100644
index 0000000..1d83482
--- /dev/null
+++ b/interfaces/ext/libxml/list.h
@@ -0,0 +1,137 @@
+/*
+ * Summary: lists interfaces
+ * Description: this module implement the list support used in
+ * various place in the library.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Gary Pennington <Gary.Pennington at uk.sun.com>
+ */
+
+#ifndef __XML_LINK_INCLUDE__
+#define __XML_LINK_INCLUDE__
+
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _xmlLink xmlLink;
+typedef xmlLink *xmlLinkPtr;
+
+typedef struct _xmlList xmlList;
+typedef xmlList *xmlListPtr;
+
+/**
+ * xmlListDeallocator:
+ * @lk: the data to deallocate
+ *
+ * Callback function used to free data from a list.
+ */
+typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
+/**
+ * xmlListDataCompare:
+ * @data0: the first data
+ * @data1: the second data
+ *
+ * Callback function used to compare 2 data.
+ *
+ * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
+ */
+typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
+/**
+ * xmlListWalker:
+ * @data: the data found in the list
+ * @user: extra user provided data to the walker
+ *
+ * Callback function used when walking a list with xmlListWalk().
+ *
+ * Returns 0 to stop walking the list, 1 otherwise.
+ */
+typedef int (*xmlListWalker) (const void *data, const void *user);
+
+/* Creation/Deletion */
+XMLPUBFUN xmlListPtr XMLCALL
+ xmlListCreate (xmlListDeallocator deallocator,
+ xmlListDataCompare compare);
+XMLPUBFUN void XMLCALL
+ xmlListDelete (xmlListPtr l);
+
+/* Basic Operators */
+XMLPUBFUN void * XMLCALL
+ xmlListSearch (xmlListPtr l,
+ void *data);
+XMLPUBFUN void * XMLCALL
+ xmlListReverseSearch (xmlListPtr l,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlListInsert (xmlListPtr l,
+ void *data) ;
+XMLPUBFUN int XMLCALL
+ xmlListAppend (xmlListPtr l,
+ void *data) ;
+XMLPUBFUN int XMLCALL
+ xmlListRemoveFirst (xmlListPtr l,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlListRemoveLast (xmlListPtr l,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlListRemoveAll (xmlListPtr l,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlListClear (xmlListPtr l);
+XMLPUBFUN int XMLCALL
+ xmlListEmpty (xmlListPtr l);
+XMLPUBFUN xmlLinkPtr XMLCALL
+ xmlListFront (xmlListPtr l);
+XMLPUBFUN xmlLinkPtr XMLCALL
+ xmlListEnd (xmlListPtr l);
+XMLPUBFUN int XMLCALL
+ xmlListSize (xmlListPtr l);
+
+XMLPUBFUN void XMLCALL
+ xmlListPopFront (xmlListPtr l);
+XMLPUBFUN void XMLCALL
+ xmlListPopBack (xmlListPtr l);
+XMLPUBFUN int XMLCALL
+ xmlListPushFront (xmlListPtr l,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlListPushBack (xmlListPtr l,
+ void *data);
+
+/* Advanced Operators */
+XMLPUBFUN void XMLCALL
+ xmlListReverse (xmlListPtr l);
+XMLPUBFUN void XMLCALL
+ xmlListSort (xmlListPtr l);
+XMLPUBFUN void XMLCALL
+ xmlListWalk (xmlListPtr l,
+ xmlListWalker walker,
+ const void *user);
+XMLPUBFUN void XMLCALL
+ xmlListReverseWalk (xmlListPtr l,
+ xmlListWalker walker,
+ const void *user);
+XMLPUBFUN void XMLCALL
+ xmlListMerge (xmlListPtr l1,
+ xmlListPtr l2);
+XMLPUBFUN xmlListPtr XMLCALL
+ xmlListDup (const xmlListPtr old);
+XMLPUBFUN int XMLCALL
+ xmlListCopy (xmlListPtr cur,
+ const xmlListPtr old);
+/* Link operators */
+XMLPUBFUN void * XMLCALL
+ xmlLinkGetData (xmlLinkPtr lk);
+
+/* xmlListUnique() */
+/* xmlListSwap */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_LINK_INCLUDE__ */
diff --git a/interfaces/ext/libxml/nanoftp.h b/interfaces/ext/libxml/nanoftp.h
new file mode 100644
index 0000000..e3c28a0
--- /dev/null
+++ b/interfaces/ext/libxml/nanoftp.h
@@ -0,0 +1,143 @@
+/*
+ * Summary: minimal FTP implementation
+ * Description: minimal FTP implementation allowing to fetch resources
+ * like external subset.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __NANO_FTP_H__
+#define __NANO_FTP_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_FTP_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * ftpListCallback:
+ * @userData: user provided data for the callback
+ * @filename: the file name (including "->" when links are shown)
+ * @attrib: the attribute string
+ * @owner: the owner string
+ * @group: the group string
+ * @size: the file size
+ * @links: the link count
+ * @year: the year
+ * @month: the month
+ * @day: the day
+ * @hour: the hour
+ * @minute: the minute
+ *
+ * A callback for the xmlNanoFTPList command.
+ * Note that only one of year and day:minute are specified.
+ */
+typedef void (*ftpListCallback) (void *userData,
+ const char *filename, const char *attrib,
+ const char *owner, const char *group,
+ unsigned long size, int links, int year,
+ const char *month, int day, int hour,
+ int minute);
+/**
+ * ftpDataCallback:
+ * @userData: the user provided context
+ * @data: the data received
+ * @len: its size in bytes
+ *
+ * A callback for the xmlNanoFTPGet command.
+ */
+typedef void (*ftpDataCallback) (void *userData,
+ const char *data,
+ int len);
+
+/*
+ * Init
+ */
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPInit (void);
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPCleanup (void);
+
+/*
+ * Creating/freeing contexts.
+ */
+XMLPUBFUN void * XMLCALL
+ xmlNanoFTPNewCtxt (const char *URL);
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPFreeCtxt (void * ctx);
+XMLPUBFUN void * XMLCALL
+ xmlNanoFTPConnectTo (const char *server,
+ int port);
+/*
+ * Opening/closing session connections.
+ */
+XMLPUBFUN void * XMLCALL
+ xmlNanoFTPOpen (const char *URL);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPConnect (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPClose (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPQuit (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPScanProxy (const char *URL);
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPProxy (const char *host,
+ int port,
+ const char *user,
+ const char *passwd,
+ int type);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPUpdateURL (void *ctx,
+ const char *URL);
+
+/*
+ * Rather internal commands.
+ */
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPGetResponse (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPCheckResponse (void *ctx);
+
+/*
+ * CD/DIR/GET handlers.
+ */
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPCwd (void *ctx,
+ const char *directory);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPDele (void *ctx,
+ const char *file);
+
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPGetConnection (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPCloseConnection(void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPList (void *ctx,
+ ftpListCallback callback,
+ void *userData,
+ const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPGetSocket (void *ctx,
+ const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPGet (void *ctx,
+ ftpDataCallback callback,
+ void *userData,
+ const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPRead (void *ctx,
+ void *dest,
+ int len);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* LIBXML_FTP_ENABLED */
+#endif /* __NANO_FTP_H__ */
diff --git a/interfaces/ext/libxml/nanohttp.h b/interfaces/ext/libxml/nanohttp.h
new file mode 100644
index 0000000..1d8ac24
--- /dev/null
+++ b/interfaces/ext/libxml/nanohttp.h
@@ -0,0 +1,81 @@
+/*
+ * Summary: minimal HTTP implementation
+ * Description: minimal HTTP implementation allowing to fetch resources
+ * like external subset.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __NANO_HTTP_H__
+#define __NANO_HTTP_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_HTTP_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN void XMLCALL
+ xmlNanoHTTPInit (void);
+XMLPUBFUN void XMLCALL
+ xmlNanoHTTPCleanup (void);
+XMLPUBFUN void XMLCALL
+ xmlNanoHTTPScanProxy (const char *URL);
+XMLPUBFUN int XMLCALL
+ xmlNanoHTTPFetch (const char *URL,
+ const char *filename,
+ char **contentType);
+XMLPUBFUN void * XMLCALL
+ xmlNanoHTTPMethod (const char *URL,
+ const char *method,
+ const char *input,
+ char **contentType,
+ const char *headers,
+ int ilen);
+XMLPUBFUN void * XMLCALL
+ xmlNanoHTTPMethodRedir (const char *URL,
+ const char *method,
+ const char *input,
+ char **contentType,
+ char **redir,
+ const char *headers,
+ int ilen);
+XMLPUBFUN void * XMLCALL
+ xmlNanoHTTPOpen (const char *URL,
+ char **contentType);
+XMLPUBFUN void * XMLCALL
+ xmlNanoHTTPOpenRedir (const char *URL,
+ char **contentType,
+ char **redir);
+XMLPUBFUN int XMLCALL
+ xmlNanoHTTPReturnCode (void *ctx);
+XMLPUBFUN const char * XMLCALL
+ xmlNanoHTTPAuthHeader (void *ctx);
+XMLPUBFUN const char * XMLCALL
+ xmlNanoHTTPRedir (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoHTTPContentLength( void * ctx );
+XMLPUBFUN const char * XMLCALL
+ xmlNanoHTTPEncoding (void *ctx);
+XMLPUBFUN const char * XMLCALL
+ xmlNanoHTTPMimeType (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoHTTPRead (void *ctx,
+ void *dest,
+ int len);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlNanoHTTPSave (void *ctxt,
+ const char *filename);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlNanoHTTPClose (void *ctx);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_HTTP_ENABLED */
+#endif /* __NANO_HTTP_H__ */
diff --git a/interfaces/ext/libxml/parser.h b/interfaces/ext/libxml/parser.h
new file mode 100644
index 0000000..567addb
--- /dev/null
+++ b/interfaces/ext/libxml/parser.h
@@ -0,0 +1,1226 @@
+/*
+ * Summary: the core parser module
+ * Description: Interfaces, constants and types related to the XML parser
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_PARSER_H__
+#define __XML_PARSER_H__
+
+#include <stdarg.h>
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/dict.h>
+#include <libxml/hash.h>
+#include <libxml/valid.h>
+#include <libxml/entities.h>
+#include <libxml/xmlerror.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * XML_DEFAULT_VERSION:
+ *
+ * The default version of XML used: 1.0
+ */
+#define XML_DEFAULT_VERSION "1.0"
+
+/**
+ * xmlParserInput:
+ *
+ * An xmlParserInput is an input flow for the XML processor.
+ * Each entity parsed is associated an xmlParserInput (except the
+ * few predefined ones). This is the case both for internal entities
+ * - in which case the flow is already completely in memory - or
+ * external entities - in which case we use the buf structure for
+ * progressive reading and I18N conversions to the internal UTF-8 format.
+ */
+
+/**
+ * xmlParserInputDeallocate:
+ * @str: the string to deallocate
+ *
+ * Callback for freeing some parser input allocations.
+ */
+typedef void (* xmlParserInputDeallocate)(xmlChar *str);
+
+struct _xmlParserInput {
+ /* Input buffer */
+ xmlParserInputBufferPtr buf; /* UTF-8 encoded buffer */
+
+ const char *filename; /* The file analyzed, if any */
+ const char *directory; /* the directory/base of the file */
+ const xmlChar *base; /* Base of the array to parse */
+ const xmlChar *cur; /* Current char being parsed */
+ const xmlChar *end; /* end of the array to parse */
+ int length; /* length if known */
+ int line; /* Current line */
+ int col; /* Current column */
+ /*
+ * NOTE: consumed is only tested for equality in the parser code,
+ * so even if there is an overflow this should not give troubles
+ * for parsing very large instances.
+ */
+ unsigned long consumed; /* How many xmlChars already consumed */
+ xmlParserInputDeallocate free; /* function to deallocate the base */
+ const xmlChar *encoding; /* the encoding string for entity */
+ const xmlChar *version; /* the version string for entity */
+ int standalone; /* Was that entity marked standalone */
+ int id; /* an unique identifier for the entity */
+};
+
+/**
+ * xmlParserNodeInfo:
+ *
+ * The parser can be asked to collect Node informations, i.e. at what
+ * place in the file they were detected.
+ * NOTE: This is off by default and not very well tested.
+ */
+typedef struct _xmlParserNodeInfo xmlParserNodeInfo;
+typedef xmlParserNodeInfo *xmlParserNodeInfoPtr;
+
+struct _xmlParserNodeInfo {
+ const struct _xmlNode* node;
+ /* Position & line # that text that created the node begins & ends on */
+ unsigned long begin_pos;
+ unsigned long begin_line;
+ unsigned long end_pos;
+ unsigned long end_line;
+};
+
+typedef struct _xmlParserNodeInfoSeq xmlParserNodeInfoSeq;
+typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr;
+struct _xmlParserNodeInfoSeq {
+ unsigned long maximum;
+ unsigned long length;
+ xmlParserNodeInfo* buffer;
+};
+
+/**
+ * xmlParserInputState:
+ *
+ * The parser is now working also as a state based parser.
+ * The recursive one use the state info for entities processing.
+ */
+typedef enum {
+ XML_PARSER_EOF = -1, /* nothing is to be parsed */
+ XML_PARSER_START = 0, /* nothing has been parsed */
+ XML_PARSER_MISC, /* Misc* before int subset */
+ XML_PARSER_PI, /* Within a processing instruction */
+ XML_PARSER_DTD, /* within some DTD content */
+ XML_PARSER_PROLOG, /* Misc* after internal subset */
+ XML_PARSER_COMMENT, /* within a comment */
+ XML_PARSER_START_TAG, /* within a start tag */
+ XML_PARSER_CONTENT, /* within the content */
+ XML_PARSER_CDATA_SECTION, /* within a CDATA section */
+ XML_PARSER_END_TAG, /* within a closing tag */
+ XML_PARSER_ENTITY_DECL, /* within an entity declaration */
+ XML_PARSER_ENTITY_VALUE, /* within an entity value in a decl */
+ XML_PARSER_ATTRIBUTE_VALUE, /* within an attribute value */
+ XML_PARSER_SYSTEM_LITERAL, /* within a SYSTEM value */
+ XML_PARSER_EPILOG, /* the Misc* after the last end tag */
+ XML_PARSER_IGNORE, /* within an IGNORED section */
+ XML_PARSER_PUBLIC_LITERAL /* within a PUBLIC value */
+} xmlParserInputState;
+
+/**
+ * XML_DETECT_IDS:
+ *
+ * Bit in the loadsubset context field to tell to do ID/REFs lookups.
+ * Use it to initialize xmlLoadExtDtdDefaultValue.
+ */
+#define XML_DETECT_IDS 2
+
+/**
+ * XML_COMPLETE_ATTRS:
+ *
+ * Bit in the loadsubset context field to tell to do complete the
+ * elements attributes lists with the ones defaulted from the DTDs.
+ * Use it to initialize xmlLoadExtDtdDefaultValue.
+ */
+#define XML_COMPLETE_ATTRS 4
+
+/**
+ * XML_SKIP_IDS:
+ *
+ * Bit in the loadsubset context field to tell to not do ID/REFs registration.
+ * Used to initialize xmlLoadExtDtdDefaultValue in some special cases.
+ */
+#define XML_SKIP_IDS 8
+
+/**
+ * xmlParserMode:
+ *
+ * A parser can operate in various modes
+ */
+typedef enum {
+ XML_PARSE_UNKNOWN = 0,
+ XML_PARSE_DOM = 1,
+ XML_PARSE_SAX = 2,
+ XML_PARSE_PUSH_DOM = 3,
+ XML_PARSE_PUSH_SAX = 4,
+ XML_PARSE_READER = 5
+} xmlParserMode;
+
+/**
+ * xmlParserCtxt:
+ *
+ * The parser context.
+ * NOTE This doesn't completely define the parser state, the (current ?)
+ * design of the parser uses recursive function calls since this allow
+ * and easy mapping from the production rules of the specification
+ * to the actual code. The drawback is that the actual function call
+ * also reflect the parser state. However most of the parsing routines
+ * takes as the only argument the parser context pointer, so migrating
+ * to a state based parser for progressive parsing shouldn't be too hard.
+ */
+struct _xmlParserCtxt {
+ struct _xmlSAXHandler *sax; /* The SAX handler */
+ void *userData; /* For SAX interface only, used by DOM build */
+ xmlDocPtr myDoc; /* the document being built */
+ int wellFormed; /* is the document well formed */
+ int replaceEntities; /* shall we replace entities ? */
+ const xmlChar *version; /* the XML version string */
+ const xmlChar *encoding; /* the declared encoding, if any */
+ int standalone; /* standalone document */
+ int html; /* an HTML(1)/Docbook(2) document */
+
+ /* Input stream stack */
+ xmlParserInputPtr input; /* Current input stream */
+ int inputNr; /* Number of current input streams */
+ int inputMax; /* Max number of input streams */
+ xmlParserInputPtr *inputTab; /* stack of inputs */
+
+ /* Node analysis stack only used for DOM building */
+ xmlNodePtr node; /* Current parsed Node */
+ int nodeNr; /* Depth of the parsing stack */
+ int nodeMax; /* Max depth of the parsing stack */
+ xmlNodePtr *nodeTab; /* array of nodes */
+
+ int record_info; /* Whether node info should be kept */
+ xmlParserNodeInfoSeq node_seq; /* info about each node parsed */
+
+ int errNo; /* error code */
+
+ int hasExternalSubset; /* reference and external subset */
+ int hasPErefs; /* the internal subset has PE refs */
+ int external; /* are we parsing an external entity */
+
+ int valid; /* is the document valid */
+ int validate; /* shall we try to validate ? */
+ xmlValidCtxt vctxt; /* The validity context */
+
+ xmlParserInputState instate; /* current type of input */
+ int token; /* next char look-ahead */
+
+ char *directory; /* the data directory */
+
+ /* Node name stack */
+ const xmlChar *name; /* Current parsed Node */
+ int nameNr; /* Depth of the parsing stack */
+ int nameMax; /* Max depth of the parsing stack */
+ const xmlChar * *nameTab; /* array of nodes */
+
+ long nbChars; /* number of xmlChar processed */
+ long checkIndex; /* used by progressive parsing lookup */
+ int keepBlanks; /* ugly but ... */
+ int disableSAX; /* SAX callbacks are disabled */
+ int inSubset; /* Parsing is in int 1/ext 2 subset */
+ const xmlChar * intSubName; /* name of subset */
+ xmlChar * extSubURI; /* URI of external subset */
+ xmlChar * extSubSystem; /* SYSTEM ID of external subset */
+
+ /* xml:space values */
+ int * space; /* Should the parser preserve spaces */
+ int spaceNr; /* Depth of the parsing stack */
+ int spaceMax; /* Max depth of the parsing stack */
+ int * spaceTab; /* array of space infos */
+
+ int depth; /* to prevent entity substitution loops */
+ xmlParserInputPtr entity; /* used to check entities boundaries */
+ int charset; /* encoding of the in-memory content
+ actually an xmlCharEncoding */
+ int nodelen; /* Those two fields are there to */
+ int nodemem; /* Speed up large node parsing */
+ int pedantic; /* signal pedantic warnings */
+ void *_private; /* For user data, libxml won't touch it */
+
+ int loadsubset; /* should the external subset be loaded */
+ int linenumbers; /* set line number in element content */
+ void *catalogs; /* document's own catalog */
+ int recovery; /* run in recovery mode */
+ int progressive; /* is this a progressive parsing */
+ xmlDictPtr dict; /* dictionnary for the parser */
+ const xmlChar * *atts; /* array for the attributes callbacks */
+ int maxatts; /* the size of the array */
+ int docdict; /* use strings from dict to build tree */
+
+ /*
+ * pre-interned strings
+ */
+ const xmlChar *str_xml;
+ const xmlChar *str_xmlns;
+ const xmlChar *str_xml_ns;
+
+ /*
+ * Everything below is used only by the new SAX mode
+ */
+ int sax2; /* operating in the new SAX mode */
+ int nsNr; /* the number of inherited namespaces */
+ int nsMax; /* the size of the arrays */
+ const xmlChar * *nsTab; /* the array of prefix/namespace name */
+ int *attallocs; /* which attribute were allocated */
+ void * *pushTab; /* array of data for push */
+ xmlHashTablePtr attsDefault; /* defaulted attributes if any */
+ xmlHashTablePtr attsSpecial; /* non-CDATA attributes if any */
+ int nsWellFormed; /* is the document XML Nanespace okay */
+ int options; /* Extra options */
+
+ /*
+ * Those fields are needed only for treaming parsing so far
+ */
+ int dictNames; /* Use dictionary names for the tree */
+ int freeElemsNr; /* number of freed element nodes */
+ xmlNodePtr freeElems; /* List of freed element nodes */
+ int freeAttrsNr; /* number of freed attributes nodes */
+ xmlAttrPtr freeAttrs; /* List of freed attributes nodes */
+
+ /*
+ * the complete error informations for the last error.
+ */
+ xmlError lastError;
+ xmlParserMode parseMode; /* the parser mode */
+ unsigned long nbentities; /* number of entities references */
+ unsigned long sizeentities; /* size of parsed entities */
+};
+
+/**
+ * xmlSAXLocator:
+ *
+ * A SAX Locator.
+ */
+struct _xmlSAXLocator {
+ const xmlChar *(*getPublicId)(void *ctx);
+ const xmlChar *(*getSystemId)(void *ctx);
+ int (*getLineNumber)(void *ctx);
+ int (*getColumnNumber)(void *ctx);
+};
+
+/**
+ * xmlSAXHandler:
+ *
+ * A SAX handler is bunch of callbacks called by the parser when processing
+ * of the input generate data or structure informations.
+ */
+
+/**
+ * resolveEntitySAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * Callback:
+ * The entity loader, to control the loading of external entities,
+ * the application can either:
+ * - override this resolveEntity() callback in the SAX block
+ * - or better use the xmlSetExternalEntityLoader() function to
+ * set up it's own entity resolution routine
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+typedef xmlParserInputPtr (*resolveEntitySAXFunc) (void *ctx,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+/**
+ * internalSubsetSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: the root element name
+ * @ExternalID: the external ID
+ * @SystemID: the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on internal subset declaration.
+ */
+typedef void (*internalSubsetSAXFunc) (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+/**
+ * externalSubsetSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: the root element name
+ * @ExternalID: the external ID
+ * @SystemID: the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on external subset declaration.
+ */
+typedef void (*externalSubsetSAXFunc) (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+/**
+ * getEntitySAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get an entity by name.
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+typedef xmlEntityPtr (*getEntitySAXFunc) (void *ctx,
+ const xmlChar *name);
+/**
+ * getParameterEntitySAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get a parameter entity by name.
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+typedef xmlEntityPtr (*getParameterEntitySAXFunc) (void *ctx,
+ const xmlChar *name);
+/**
+ * entityDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: the entity name
+ * @type: the entity type
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @content: the entity value (without processing).
+ *
+ * An entity definition has been parsed.
+ */
+typedef void (*entityDeclSAXFunc) (void *ctx,
+ const xmlChar *name,
+ int type,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ xmlChar *content);
+/**
+ * notationDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The name of the notation
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * What to do when a notation declaration has been parsed.
+ */
+typedef void (*notationDeclSAXFunc)(void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+/**
+ * attributeDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @elem: the name of the element
+ * @fullname: the attribute name
+ * @type: the attribute type
+ * @def: the type of default value
+ * @defaultValue: the attribute default value
+ * @tree: the tree of enumerated value set
+ *
+ * An attribute definition has been parsed.
+ */
+typedef void (*attributeDeclSAXFunc)(void *ctx,
+ const xmlChar *elem,
+ const xmlChar *fullname,
+ int type,
+ int def,
+ const xmlChar *defaultValue,
+ xmlEnumerationPtr tree);
+/**
+ * elementDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: the element name
+ * @type: the element type
+ * @content: the element value tree
+ *
+ * An element definition has been parsed.
+ */
+typedef void (*elementDeclSAXFunc)(void *ctx,
+ const xmlChar *name,
+ int type,
+ xmlElementContentPtr content);
+/**
+ * unparsedEntityDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The name of the entity
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @notationName: the name of the notation
+ *
+ * What to do when an unparsed entity declaration is parsed.
+ */
+typedef void (*unparsedEntityDeclSAXFunc)(void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ const xmlChar *notationName);
+/**
+ * setDocumentLocatorSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @loc: A SAX Locator
+ *
+ * Receive the document locator at startup, actually xmlDefaultSAXLocator.
+ * Everything is available on the context, so this is useless in our case.
+ */
+typedef void (*setDocumentLocatorSAXFunc) (void *ctx,
+ xmlSAXLocatorPtr loc);
+/**
+ * startDocumentSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Called when the document start being processed.
+ */
+typedef void (*startDocumentSAXFunc) (void *ctx);
+/**
+ * endDocumentSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Called when the document end has been detected.
+ */
+typedef void (*endDocumentSAXFunc) (void *ctx);
+/**
+ * startElementSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The element name, including namespace prefix
+ * @atts: An array of name/value attributes pairs, NULL terminated
+ *
+ * Called when an opening tag has been processed.
+ */
+typedef void (*startElementSAXFunc) (void *ctx,
+ const xmlChar *name,
+ const xmlChar **atts);
+/**
+ * endElementSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The element name
+ *
+ * Called when the end of an element has been detected.
+ */
+typedef void (*endElementSAXFunc) (void *ctx,
+ const xmlChar *name);
+/**
+ * attributeSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The attribute name, including namespace prefix
+ * @value: The attribute value
+ *
+ * Handle an attribute that has been read by the parser.
+ * The default handling is to convert the attribute into an
+ * DOM subtree and past it in a new xmlAttr element added to
+ * the element.
+ */
+typedef void (*attributeSAXFunc) (void *ctx,
+ const xmlChar *name,
+ const xmlChar *value);
+/**
+ * referenceSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Called when an entity reference is detected.
+ */
+typedef void (*referenceSAXFunc) (void *ctx,
+ const xmlChar *name);
+/**
+ * charactersSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * Receiving some chars from the parser.
+ */
+typedef void (*charactersSAXFunc) (void *ctx,
+ const xmlChar *ch,
+ int len);
+/**
+ * ignorableWhitespaceSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * Receiving some ignorable whitespaces from the parser.
+ * UNUSED: by default the DOM building will use characters.
+ */
+typedef void (*ignorableWhitespaceSAXFunc) (void *ctx,
+ const xmlChar *ch,
+ int len);
+/**
+ * processingInstructionSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @target: the target name
+ * @data: the PI data's
+ *
+ * A processing instruction has been parsed.
+ */
+typedef void (*processingInstructionSAXFunc) (void *ctx,
+ const xmlChar *target,
+ const xmlChar *data);
+/**
+ * commentSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @value: the comment content
+ *
+ * A comment has been parsed.
+ */
+typedef void (*commentSAXFunc) (void *ctx,
+ const xmlChar *value);
+/**
+ * cdataBlockSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @value: The pcdata content
+ * @len: the block length
+ *
+ * Called when a pcdata block has been parsed.
+ */
+typedef void (*cdataBlockSAXFunc) (
+ void *ctx,
+ const xmlChar *value,
+ int len);
+/**
+ * warningSAXFunc:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a warning messages, callback.
+ */
+typedef void (XMLCDECL *warningSAXFunc) (void *ctx,
+ const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+/**
+ * errorSAXFunc:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format an error messages, callback.
+ */
+typedef void (XMLCDECL *errorSAXFunc) (void *ctx,
+ const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+/**
+ * fatalErrorSAXFunc:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format fatal error messages, callback.
+ * Note: so far fatalError() SAX callbacks are not used, error()
+ * get all the callbacks for errors.
+ */
+typedef void (XMLCDECL *fatalErrorSAXFunc) (void *ctx,
+ const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+/**
+ * isStandaloneSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Is this document tagged standalone?
+ *
+ * Returns 1 if true
+ */
+typedef int (*isStandaloneSAXFunc) (void *ctx);
+/**
+ * hasInternalSubsetSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Does this document has an internal subset.
+ *
+ * Returns 1 if true
+ */
+typedef int (*hasInternalSubsetSAXFunc) (void *ctx);
+
+/**
+ * hasExternalSubsetSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Does this document has an external subset?
+ *
+ * Returns 1 if true
+ */
+typedef int (*hasExternalSubsetSAXFunc) (void *ctx);
+
+/************************************************************************
+ * *
+ * The SAX version 2 API extensions *
+ * *
+ ************************************************************************/
+/**
+ * XML_SAX2_MAGIC:
+ *
+ * Special constant found in SAX2 blocks initialized fields
+ */
+#define XML_SAX2_MAGIC 0xDEEDBEAF
+
+/**
+ * startElementNsSAX2Func:
+ * @ctx: the user data (XML parser context)
+ * @localname: the local name of the element
+ * @prefix: the element namespace prefix if available
+ * @URI: the element namespace name if available
+ * @nb_namespaces: number of namespace definitions on that node
+ * @namespaces: pointer to the array of prefix/URI pairs namespace definitions
+ * @nb_attributes: the number of attributes on that node
+ * @nb_defaulted: the number of defaulted attributes. The defaulted
+ * ones are at the end of the array
+ * @attributes: pointer to the array of (localname/prefix/URI/value/end)
+ * attribute values.
+ *
+ * SAX2 callback when an element start has been detected by the parser.
+ * It provides the namespace informations for the element, as well as
+ * the new namespace declarations on the element.
+ */
+
+typedef void (*startElementNsSAX2Func) (void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI,
+ int nb_namespaces,
+ const xmlChar **namespaces,
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes);
+
+/**
+ * endElementNsSAX2Func:
+ * @ctx: the user data (XML parser context)
+ * @localname: the local name of the element
+ * @prefix: the element namespace prefix if available
+ * @URI: the element namespace name if available
+ *
+ * SAX2 callback when an element end has been detected by the parser.
+ * It provides the namespace informations for the element.
+ */
+
+typedef void (*endElementNsSAX2Func) (void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI);
+
+
+struct _xmlSAXHandler {
+ internalSubsetSAXFunc internalSubset;
+ isStandaloneSAXFunc isStandalone;
+ hasInternalSubsetSAXFunc hasInternalSubset;
+ hasExternalSubsetSAXFunc hasExternalSubset;
+ resolveEntitySAXFunc resolveEntity;
+ getEntitySAXFunc getEntity;
+ entityDeclSAXFunc entityDecl;
+ notationDeclSAXFunc notationDecl;
+ attributeDeclSAXFunc attributeDecl;
+ elementDeclSAXFunc elementDecl;
+ unparsedEntityDeclSAXFunc unparsedEntityDecl;
+ setDocumentLocatorSAXFunc setDocumentLocator;
+ startDocumentSAXFunc startDocument;
+ endDocumentSAXFunc endDocument;
+ startElementSAXFunc startElement;
+ endElementSAXFunc endElement;
+ referenceSAXFunc reference;
+ charactersSAXFunc characters;
+ ignorableWhitespaceSAXFunc ignorableWhitespace;
+ processingInstructionSAXFunc processingInstruction;
+ commentSAXFunc comment;
+ warningSAXFunc warning;
+ errorSAXFunc error;
+ fatalErrorSAXFunc fatalError; /* unused error() get all the errors */
+ getParameterEntitySAXFunc getParameterEntity;
+ cdataBlockSAXFunc cdataBlock;
+ externalSubsetSAXFunc externalSubset;
+ unsigned int initialized;
+ /* The following fields are extensions available only on version 2 */
+ void *_private;
+ startElementNsSAX2Func startElementNs;
+ endElementNsSAX2Func endElementNs;
+ xmlStructuredErrorFunc serror;
+};
+
+/*
+ * SAX Version 1
+ */
+typedef struct _xmlSAXHandlerV1 xmlSAXHandlerV1;
+typedef xmlSAXHandlerV1 *xmlSAXHandlerV1Ptr;
+struct _xmlSAXHandlerV1 {
+ internalSubsetSAXFunc internalSubset;
+ isStandaloneSAXFunc isStandalone;
+ hasInternalSubsetSAXFunc hasInternalSubset;
+ hasExternalSubsetSAXFunc hasExternalSubset;
+ resolveEntitySAXFunc resolveEntity;
+ getEntitySAXFunc getEntity;
+ entityDeclSAXFunc entityDecl;
+ notationDeclSAXFunc notationDecl;
+ attributeDeclSAXFunc attributeDecl;
+ elementDeclSAXFunc elementDecl;
+ unparsedEntityDeclSAXFunc unparsedEntityDecl;
+ setDocumentLocatorSAXFunc setDocumentLocator;
+ startDocumentSAXFunc startDocument;
+ endDocumentSAXFunc endDocument;
+ startElementSAXFunc startElement;
+ endElementSAXFunc endElement;
+ referenceSAXFunc reference;
+ charactersSAXFunc characters;
+ ignorableWhitespaceSAXFunc ignorableWhitespace;
+ processingInstructionSAXFunc processingInstruction;
+ commentSAXFunc comment;
+ warningSAXFunc warning;
+ errorSAXFunc error;
+ fatalErrorSAXFunc fatalError; /* unused error() get all the errors */
+ getParameterEntitySAXFunc getParameterEntity;
+ cdataBlockSAXFunc cdataBlock;
+ externalSubsetSAXFunc externalSubset;
+ unsigned int initialized;
+};
+
+
+/**
+ * xmlExternalEntityLoader:
+ * @URL: The System ID of the resource requested
+ * @ID: The Public ID of the resource requested
+ * @context: the XML parser context
+ *
+ * External entity loaders types.
+ *
+ * Returns the entity input parser.
+ */
+typedef xmlParserInputPtr (*xmlExternalEntityLoader) (const char *URL,
+ const char *ID,
+ xmlParserCtxtPtr context);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <libxml/encoding.h>
+#include <libxml/xmlIO.h>
+#include <libxml/globals.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * Init/Cleanup
+ */
+XMLPUBFUN void XMLCALL
+ xmlInitParser (void);
+XMLPUBFUN void XMLCALL
+ xmlCleanupParser (void);
+
+/*
+ * Input functions
+ */
+XMLPUBFUN int XMLCALL
+ xmlParserInputRead (xmlParserInputPtr in,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlParserInputGrow (xmlParserInputPtr in,
+ int len);
+
+/*
+ * Basic parsing Interfaces
+ */
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseDoc (const xmlChar *cur);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseFile (const char *filename);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseMemory (const char *buffer,
+ int size);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN int XMLCALL
+ xmlSubstituteEntitiesDefault(int val);
+XMLPUBFUN int XMLCALL
+ xmlKeepBlanksDefault (int val);
+XMLPUBFUN void XMLCALL
+ xmlStopParser (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlPedanticParserDefault(int val);
+XMLPUBFUN int XMLCALL
+ xmlLineNumbersDefault (int val);
+
+#ifdef LIBXML_SAX1_ENABLED
+/*
+ * Recovery mode
+ */
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlRecoverDoc (xmlChar *cur);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlRecoverMemory (const char *buffer,
+ int size);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlRecoverFile (const char *filename);
+#endif /* LIBXML_SAX1_ENABLED */
+
+/*
+ * Less common routines and SAX interfaces
+ */
+XMLPUBFUN int XMLCALL
+ xmlParseDocument (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseExtParsedEnt (xmlParserCtxtPtr ctxt);
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlSAXUserParseFile (xmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlSAXUserParseMemory (xmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *buffer,
+ int size);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseDoc (xmlSAXHandlerPtr sax,
+ const xmlChar *cur,
+ int recovery);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseMemory (xmlSAXHandlerPtr sax,
+ const char *buffer,
+ int size,
+ int recovery);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax,
+ const char *buffer,
+ int size,
+ int recovery,
+ void *data);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseFile (xmlSAXHandlerPtr sax,
+ const char *filename,
+ int recovery);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseFileWithData (xmlSAXHandlerPtr sax,
+ const char *filename,
+ int recovery,
+ void *data);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseEntity (xmlSAXHandlerPtr sax,
+ const char *filename);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseEntity (const char *filename);
+#endif /* LIBXML_SAX1_ENABLED */
+
+#ifdef LIBXML_VALID_ENABLED
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlSAXParseDTD (xmlSAXHandlerPtr sax,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlParseDTD (const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlIOParseDTD (xmlSAXHandlerPtr sax,
+ xmlParserInputBufferPtr input,
+ xmlCharEncoding enc);
+#endif /* LIBXML_VALID_ENABLE */
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlParseBalancedChunkMemory(xmlDocPtr doc,
+ xmlSAXHandlerPtr sax,
+ void *user_data,
+ int depth,
+ const xmlChar *string,
+ xmlNodePtr *lst);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN xmlParserErrors XMLCALL
+ xmlParseInNodeContext (xmlNodePtr node,
+ const char *data,
+ int datalen,
+ int options,
+ xmlNodePtr *lst);
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc,
+ xmlSAXHandlerPtr sax,
+ void *user_data,
+ int depth,
+ const xmlChar *string,
+ xmlNodePtr *lst,
+ int recover);
+XMLPUBFUN int XMLCALL
+ xmlParseExternalEntity (xmlDocPtr doc,
+ xmlSAXHandlerPtr sax,
+ void *user_data,
+ int depth,
+ const xmlChar *URL,
+ const xmlChar *ID,
+ xmlNodePtr *lst);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN int XMLCALL
+ xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx,
+ const xmlChar *URL,
+ const xmlChar *ID,
+ xmlNodePtr *lst);
+
+/*
+ * Parser contexts handling.
+ */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlNewParserCtxt (void);
+XMLPUBFUN int XMLCALL
+ xmlInitParserCtxt (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlClearParserCtxt (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlFreeParserCtxt (xmlParserCtxtPtr ctxt);
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt,
+ const xmlChar* buffer,
+ const char *filename);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateDocParserCtxt (const xmlChar *cur);
+
+#ifdef LIBXML_LEGACY_ENABLED
+/*
+ * Reading/setting optional parsing features.
+ */
+XMLPUBFUN int XMLCALL
+ xmlGetFeaturesList (int *len,
+ const char **result);
+XMLPUBFUN int XMLCALL
+ xmlGetFeature (xmlParserCtxtPtr ctxt,
+ const char *name,
+ void *result);
+XMLPUBFUN int XMLCALL
+ xmlSetFeature (xmlParserCtxtPtr ctxt,
+ const char *name,
+ void *value);
+#endif /* LIBXML_LEGACY_ENABLED */
+
+#ifdef LIBXML_PUSH_ENABLED
+/*
+ * Interfaces for the Push mode.
+ */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *chunk,
+ int size,
+ const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlParseChunk (xmlParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ int terminate);
+#endif /* LIBXML_PUSH_ENABLED */
+
+/*
+ * Special I/O mode.
+ */
+
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateIOParserCtxt (xmlSAXHandlerPtr sax,
+ void *user_data,
+ xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ xmlCharEncoding enc);
+
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewIOInputStream (xmlParserCtxtPtr ctxt,
+ xmlParserInputBufferPtr input,
+ xmlCharEncoding enc);
+
+/*
+ * Node infos.
+ */
+XMLPUBFUN const xmlParserNodeInfo* XMLCALL
+ xmlParserFindNodeInfo (const xmlParserCtxtPtr ctxt,
+ const xmlNodePtr node);
+XMLPUBFUN void XMLCALL
+ xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq);
+XMLPUBFUN void XMLCALL
+ xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq);
+XMLPUBFUN unsigned long XMLCALL
+ xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq,
+ const xmlNodePtr node);
+XMLPUBFUN void XMLCALL
+ xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt,
+ const xmlParserNodeInfoPtr info);
+
+/*
+ * External entities handling actually implemented in xmlIO.
+ */
+
+XMLPUBFUN void XMLCALL
+ xmlSetExternalEntityLoader(xmlExternalEntityLoader f);
+XMLPUBFUN xmlExternalEntityLoader XMLCALL
+ xmlGetExternalEntityLoader(void);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlLoadExternalEntity (const char *URL,
+ const char *ID,
+ xmlParserCtxtPtr ctxt);
+
+/*
+ * Index lookup, actually implemented in the encoding module
+ */
+XMLPUBFUN long XMLCALL
+ xmlByteConsumed (xmlParserCtxtPtr ctxt);
+
+/*
+ * New set of simpler/more flexible APIs
+ */
+/**
+ * xmlParserOption:
+ *
+ * This is the set of XML parser options that can be passed down
+ * to the xmlReadDoc() and similar calls.
+ */
+typedef enum {
+ XML_PARSE_RECOVER = 1<<0, /* recover on errors */
+ XML_PARSE_NOENT = 1<<1, /* substitute entities */
+ XML_PARSE_DTDLOAD = 1<<2, /* load the external subset */
+ XML_PARSE_DTDATTR = 1<<3, /* default DTD attributes */
+ XML_PARSE_DTDVALID = 1<<4, /* validate with the DTD */
+ XML_PARSE_NOERROR = 1<<5, /* suppress error reports */
+ XML_PARSE_NOWARNING = 1<<6, /* suppress warning reports */
+ XML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */
+ XML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */
+ XML_PARSE_SAX1 = 1<<9, /* use the SAX1 interface internally */
+ XML_PARSE_XINCLUDE = 1<<10,/* Implement XInclude substitition */
+ XML_PARSE_NONET = 1<<11,/* Forbid network access */
+ XML_PARSE_NODICT = 1<<12,/* Do not reuse the context dictionnary */
+ XML_PARSE_NSCLEAN = 1<<13,/* remove redundant namespaces declarations */
+ XML_PARSE_NOCDATA = 1<<14,/* merge CDATA as text nodes */
+ XML_PARSE_NOXINCNODE= 1<<15,/* do not generate XINCLUDE START/END nodes */
+ XML_PARSE_COMPACT = 1<<16,/* compact small text nodes; no modification of
+ the tree allowed afterwards (will possibly
+ crash if you try to modify the tree) */
+ XML_PARSE_OLD10 = 1<<17,/* parse using XML-1.0 before update 5 */
+ XML_PARSE_NOBASEFIX = 1<<18,/* do not fixup XINCLUDE xml:base uris */
+ XML_PARSE_HUGE = 1<<19, /* relax any hardcoded limit from the parser */
+ XML_PARSE_OLDSAX = 1<<20 /* parse using SAX2 interface from before 2.7.0 */
+} xmlParserOption;
+
+XMLPUBFUN void XMLCALL
+ xmlCtxtReset (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlCtxtResetPush (xmlParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ const char *filename,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ xmlCtxtUseOptions (xmlParserCtxtPtr ctxt,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadDoc (const xmlChar *cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadFile (const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadMemory (const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadFd (int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadIO (xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadDoc (xmlParserCtxtPtr ctxt,
+ const xmlChar *cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadFile (xmlParserCtxtPtr ctxt,
+ const char *filename,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadMemory (xmlParserCtxtPtr ctxt,
+ const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadFd (xmlParserCtxtPtr ctxt,
+ int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadIO (xmlParserCtxtPtr ctxt,
+ xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+
+/*
+ * Library wide options
+ */
+/**
+ * xmlFeature:
+ *
+ * Used to examine the existance of features that can be enabled
+ * or disabled at compile-time.
+ * They used to be called XML_FEATURE_xxx but this clashed with Expat
+ */
+typedef enum {
+ XML_WITH_THREAD = 1,
+ XML_WITH_TREE = 2,
+ XML_WITH_OUTPUT = 3,
+ XML_WITH_PUSH = 4,
+ XML_WITH_READER = 5,
+ XML_WITH_PATTERN = 6,
+ XML_WITH_WRITER = 7,
+ XML_WITH_SAX1 = 8,
+ XML_WITH_FTP = 9,
+ XML_WITH_HTTP = 10,
+ XML_WITH_VALID = 11,
+ XML_WITH_HTML = 12,
+ XML_WITH_LEGACY = 13,
+ XML_WITH_C14N = 14,
+ XML_WITH_CATALOG = 15,
+ XML_WITH_XPATH = 16,
+ XML_WITH_XPTR = 17,
+ XML_WITH_XINCLUDE = 18,
+ XML_WITH_ICONV = 19,
+ XML_WITH_ISO8859X = 20,
+ XML_WITH_UNICODE = 21,
+ XML_WITH_REGEXP = 22,
+ XML_WITH_AUTOMATA = 23,
+ XML_WITH_EXPR = 24,
+ XML_WITH_SCHEMAS = 25,
+ XML_WITH_SCHEMATRON = 26,
+ XML_WITH_MODULES = 27,
+ XML_WITH_DEBUG = 28,
+ XML_WITH_DEBUG_MEM = 29,
+ XML_WITH_DEBUG_RUN = 30,
+ XML_WITH_ZLIB = 31,
+ XML_WITH_NONE = 99999 /* just to be sure of allocation size */
+} xmlFeature;
+
+XMLPUBFUN int XMLCALL
+ xmlHasFeature (xmlFeature feature);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_PARSER_H__ */
+
diff --git a/interfaces/ext/libxml/parserInternals.h b/interfaces/ext/libxml/parserInternals.h
new file mode 100644
index 0000000..a5e75b5
--- /dev/null
+++ b/interfaces/ext/libxml/parserInternals.h
@@ -0,0 +1,611 @@
+/*
+ * Summary: internals routines exported by the parser.
+ * Description: this module exports a number of internal parsing routines
+ * they are not really all intended for applications but
+ * can prove useful doing low level processing.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_PARSER_INTERNALS_H__
+#define __XML_PARSER_INTERNALS_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/HTMLparser.h>
+#include <libxml/chvalid.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlParserMaxDepth:
+ *
+ * arbitrary depth limit for the XML documents that we allow to
+ * process. This is not a limitation of the parser but a safety
+ * boundary feature, use XML_PARSE_HUGE option to override it.
+ */
+XMLPUBVAR unsigned int xmlParserMaxDepth;
+
+/**
+ * XML_MAX_TEXT_LENGTH:
+ *
+ * Maximum size allowed for a single text node when building a tree.
+ * This is not a limitation of the parser but a safety boundary feature,
+ * use XML_PARSE_HUGE option to override it.
+ */
+#define XML_MAX_TEXT_LENGTH 10000000
+
+/**
+ * XML_MAX_NAMELEN:
+ *
+ * Identifiers can be longer, but this will be more costly
+ * at runtime.
+ */
+#define XML_MAX_NAMELEN 100
+
+/**
+ * INPUT_CHUNK:
+ *
+ * The parser tries to always have that amount of input ready.
+ * One of the point is providing context when reporting errors.
+ */
+#define INPUT_CHUNK 250
+
+/************************************************************************
+ * *
+ * UNICODE version of the macros. *
+ * *
+ ************************************************************************/
+/**
+ * IS_BYTE_CHAR:
+ * @c: an byte value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [2] Char ::= #x9 | #xA | #xD | [#x20...]
+ * any byte character in the accepted range
+ */
+#define IS_BYTE_CHAR(c) xmlIsChar_ch(c)
+
+/**
+ * IS_CHAR:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
+ * | [#x10000-#x10FFFF]
+ * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
+ */
+#define IS_CHAR(c) xmlIsCharQ(c)
+
+/**
+ * IS_CHAR_CH:
+ * @c: an xmlChar (usually an unsigned char)
+ *
+ * Behaves like IS_CHAR on single-byte value
+ */
+#define IS_CHAR_CH(c) xmlIsChar_ch(c)
+
+/**
+ * IS_BLANK:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [3] S ::= (#x20 | #x9 | #xD | #xA)+
+ */
+#define IS_BLANK(c) xmlIsBlankQ(c)
+
+/**
+ * IS_BLANK_CH:
+ * @c: an xmlChar value (normally unsigned char)
+ *
+ * Behaviour same as IS_BLANK
+ */
+#define IS_BLANK_CH(c) xmlIsBlank_ch(c)
+
+/**
+ * IS_BASECHAR:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [85] BaseChar ::= ... long list see REC ...
+ */
+#define IS_BASECHAR(c) xmlIsBaseCharQ(c)
+
+/**
+ * IS_DIGIT:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [88] Digit ::= ... long list see REC ...
+ */
+#define IS_DIGIT(c) xmlIsDigitQ(c)
+
+/**
+ * IS_DIGIT_CH:
+ * @c: an xmlChar value (usually an unsigned char)
+ *
+ * Behaves like IS_DIGIT but with a single byte argument
+ */
+#define IS_DIGIT_CH(c) xmlIsDigit_ch(c)
+
+/**
+ * IS_COMBINING:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [87] CombiningChar ::= ... long list see REC ...
+ */
+#define IS_COMBINING(c) xmlIsCombiningQ(c)
+
+/**
+ * IS_COMBINING_CH:
+ * @c: an xmlChar (usually an unsigned char)
+ *
+ * Always false (all combining chars > 0xff)
+ */
+#define IS_COMBINING_CH(c) 0
+
+/**
+ * IS_EXTENDER:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 |
+ * #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] |
+ * [#x309D-#x309E] | [#x30FC-#x30FE]
+ */
+#define IS_EXTENDER(c) xmlIsExtenderQ(c)
+
+/**
+ * IS_EXTENDER_CH:
+ * @c: an xmlChar value (usually an unsigned char)
+ *
+ * Behaves like IS_EXTENDER but with a single-byte argument
+ */
+#define IS_EXTENDER_CH(c) xmlIsExtender_ch(c)
+
+/**
+ * IS_IDEOGRAPHIC:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]
+ */
+#define IS_IDEOGRAPHIC(c) xmlIsIdeographicQ(c)
+
+/**
+ * IS_LETTER:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [84] Letter ::= BaseChar | Ideographic
+ */
+#define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c))
+
+/**
+ * IS_LETTER_CH:
+ * @c: an xmlChar value (normally unsigned char)
+ *
+ * Macro behaves like IS_LETTER, but only check base chars
+ *
+ */
+#define IS_LETTER_CH(c) xmlIsBaseChar_ch(c)
+
+/**
+ * IS_ASCII_LETTER:
+ * @c: an xmlChar value
+ *
+ * Macro to check [a-zA-Z]
+ *
+ */
+#define IS_ASCII_LETTER(c) (((0x41 <= (c)) && ((c) <= 0x5a)) || \
+ ((0x61 <= (c)) && ((c) <= 0x7a)))
+
+/**
+ * IS_ASCII_DIGIT:
+ * @c: an xmlChar value
+ *
+ * Macro to check [0-9]
+ *
+ */
+#define IS_ASCII_DIGIT(c) ((0x30 <= (c)) && ((c) <= 0x39))
+
+/**
+ * IS_PUBIDCHAR:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
+ */
+#define IS_PUBIDCHAR(c) xmlIsPubidCharQ(c)
+
+/**
+ * IS_PUBIDCHAR_CH:
+ * @c: an xmlChar value (normally unsigned char)
+ *
+ * Same as IS_PUBIDCHAR but for single-byte value
+ */
+#define IS_PUBIDCHAR_CH(c) xmlIsPubidChar_ch(c)
+
+/**
+ * SKIP_EOL:
+ * @p: and UTF8 string pointer
+ *
+ * Skips the end of line chars.
+ */
+#define SKIP_EOL(p) \
+ if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; } \
+ if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; }
+
+/**
+ * MOVETO_ENDTAG:
+ * @p: and UTF8 string pointer
+ *
+ * Skips to the next '>' char.
+ */
+#define MOVETO_ENDTAG(p) \
+ while ((*p) && (*(p) != '>')) (p)++
+
+/**
+ * MOVETO_STARTTAG:
+ * @p: and UTF8 string pointer
+ *
+ * Skips to the next '<' char.
+ */
+#define MOVETO_STARTTAG(p) \
+ while ((*p) && (*(p) != '<')) (p)++
+
+/**
+ * Global variables used for predefined strings.
+ */
+XMLPUBVAR const xmlChar xmlStringText[];
+XMLPUBVAR const xmlChar xmlStringTextNoenc[];
+XMLPUBVAR const xmlChar xmlStringComment[];
+
+/*
+ * Function to finish the work of the macros where needed.
+ */
+XMLPUBFUN int XMLCALL xmlIsLetter (int c);
+
+/**
+ * Parser context.
+ */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateFileParserCtxt (const char *filename);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateURLParserCtxt (const char *filename,
+ int options);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateMemoryParserCtxt(const char *buffer,
+ int size);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateEntityParserCtxt(const xmlChar *URL,
+ const xmlChar *ID,
+ const xmlChar *base);
+XMLPUBFUN int XMLCALL
+ xmlSwitchEncoding (xmlParserCtxtPtr ctxt,
+ xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL
+ xmlSwitchToEncoding (xmlParserCtxtPtr ctxt,
+ xmlCharEncodingHandlerPtr handler);
+XMLPUBFUN int XMLCALL
+ xmlSwitchInputEncoding (xmlParserCtxtPtr ctxt,
+ xmlParserInputPtr input,
+ xmlCharEncodingHandlerPtr handler);
+
+#ifdef IN_LIBXML
+/* internal error reporting */
+XMLPUBFUN void XMLCALL
+ __xmlErrEncoding (xmlParserCtxtPtr ctxt,
+ xmlParserErrors xmlerr,
+ const char *msg,
+ const xmlChar * str1,
+ const xmlChar * str2);
+#endif
+
+/**
+ * Input Streams.
+ */
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewStringInputStream (xmlParserCtxtPtr ctxt,
+ const xmlChar *buffer);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewEntityInputStream (xmlParserCtxtPtr ctxt,
+ xmlEntityPtr entity);
+XMLPUBFUN int XMLCALL
+ xmlPushInput (xmlParserCtxtPtr ctxt,
+ xmlParserInputPtr input);
+XMLPUBFUN xmlChar XMLCALL
+ xmlPopInput (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlFreeInputStream (xmlParserInputPtr input);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewInputFromFile (xmlParserCtxtPtr ctxt,
+ const char *filename);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewInputStream (xmlParserCtxtPtr ctxt);
+
+/**
+ * Namespaces.
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlSplitQName (xmlParserCtxtPtr ctxt,
+ const xmlChar *name,
+ xmlChar **prefix);
+
+/**
+ * Generic production rules.
+ */
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParseName (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseNmtoken (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseEntityValue (xmlParserCtxtPtr ctxt,
+ xmlChar **orig);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseAttValue (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseSystemLiteral (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParsePubidLiteral (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseCharData (xmlParserCtxtPtr ctxt,
+ int cdata);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseExternalID (xmlParserCtxtPtr ctxt,
+ xmlChar **publicID,
+ int strict);
+XMLPUBFUN void XMLCALL
+ xmlParseComment (xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParsePITarget (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParsePI (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseNotationDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseEntityDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseDefaultDecl (xmlParserCtxtPtr ctxt,
+ xmlChar **value);
+XMLPUBFUN xmlEnumerationPtr XMLCALL
+ xmlParseNotationType (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlEnumerationPtr XMLCALL
+ xmlParseEnumerationType (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseEnumeratedType (xmlParserCtxtPtr ctxt,
+ xmlEnumerationPtr *tree);
+XMLPUBFUN int XMLCALL
+ xmlParseAttributeType (xmlParserCtxtPtr ctxt,
+ xmlEnumerationPtr *tree);
+XMLPUBFUN void XMLCALL
+ xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlParseElementMixedContentDecl
+ (xmlParserCtxtPtr ctxt,
+ int inputchk);
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlParseElementChildrenContentDecl
+ (xmlParserCtxtPtr ctxt,
+ int inputchk);
+XMLPUBFUN int XMLCALL
+ xmlParseElementContentDecl(xmlParserCtxtPtr ctxt,
+ const xmlChar *name,
+ xmlElementContentPtr *result);
+XMLPUBFUN int XMLCALL
+ xmlParseElementDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseMarkupDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseCharRef (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlParseEntityRef (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseReference (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParsePEReference (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt);
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParseAttribute (xmlParserCtxtPtr ctxt,
+ xmlChar **value);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParseStartTag (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseEndTag (xmlParserCtxtPtr ctxt);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlParseCDSect (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseContent (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseElement (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseVersionNum (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseVersionInfo (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseEncName (xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParseEncodingDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseSDDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseXMLDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseTextDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseMisc (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseExternalSubset (xmlParserCtxtPtr ctxt,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+/**
+ * XML_SUBSTITUTE_NONE:
+ *
+ * If no entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_NONE 0
+/**
+ * XML_SUBSTITUTE_REF:
+ *
+ * Whether general entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_REF 1
+/**
+ * XML_SUBSTITUTE_PEREF:
+ *
+ * Whether parameter entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_PEREF 2
+/**
+ * XML_SUBSTITUTE_BOTH:
+ *
+ * Both general and parameter entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_BOTH 3
+
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStringDecodeEntities (xmlParserCtxtPtr ctxt,
+ const xmlChar *str,
+ int what,
+ xmlChar end,
+ xmlChar end2,
+ xmlChar end3);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStringLenDecodeEntities (xmlParserCtxtPtr ctxt,
+ const xmlChar *str,
+ int len,
+ int what,
+ xmlChar end,
+ xmlChar end2,
+ xmlChar end3);
+
+/*
+ * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP.
+ */
+XMLPUBFUN int XMLCALL nodePush (xmlParserCtxtPtr ctxt,
+ xmlNodePtr value);
+XMLPUBFUN xmlNodePtr XMLCALL nodePop (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL inputPush (xmlParserCtxtPtr ctxt,
+ xmlParserInputPtr value);
+XMLPUBFUN xmlParserInputPtr XMLCALL inputPop (xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL namePop (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL namePush (xmlParserCtxtPtr ctxt,
+ const xmlChar *value);
+
+/*
+ * other commodities shared between parser.c and parserInternals.
+ */
+XMLPUBFUN int XMLCALL xmlSkipBlankChars (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL xmlStringCurrentChar (xmlParserCtxtPtr ctxt,
+ const xmlChar *cur,
+ int *len);
+XMLPUBFUN void XMLCALL xmlParserHandlePEReference(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL xmlCheckLanguageID (const xmlChar *lang);
+
+/*
+ * Really core function shared with HTML parser.
+ */
+XMLPUBFUN int XMLCALL xmlCurrentChar (xmlParserCtxtPtr ctxt,
+ int *len);
+XMLPUBFUN int XMLCALL xmlCopyCharMultiByte (xmlChar *out,
+ int val);
+XMLPUBFUN int XMLCALL xmlCopyChar (int len,
+ xmlChar *out,
+ int val);
+XMLPUBFUN void XMLCALL xmlNextChar (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL xmlParserInputShrink (xmlParserInputPtr in);
+
+#ifdef LIBXML_HTML_ENABLED
+/*
+ * Actually comes from the HTML parser but launched from the init stuff.
+ */
+XMLPUBFUN void XMLCALL htmlInitAutoClose (void);
+XMLPUBFUN htmlParserCtxtPtr XMLCALL htmlCreateFileParserCtxt(const char *filename,
+ const char *encoding);
+#endif
+
+/*
+ * Specific function to keep track of entities references
+ * and used by the XSLT debugger.
+ */
+#ifdef LIBXML_LEGACY_ENABLED
+/**
+ * xmlEntityReferenceFunc:
+ * @ent: the entity
+ * @firstNode: the fist node in the chunk
+ * @lastNode: the last nod in the chunk
+ *
+ * Callback function used when one needs to be able to track back the
+ * provenance of a chunk of nodes inherited from an entity replacement.
+ */
+typedef void (*xmlEntityReferenceFunc) (xmlEntityPtr ent,
+ xmlNodePtr firstNode,
+ xmlNodePtr lastNode);
+
+XMLPUBFUN void XMLCALL xmlSetEntityReferenceFunc (xmlEntityReferenceFunc func);
+
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseQuotedString (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseNamespace (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlScanName (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL xmlParserHandleReference(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNamespaceParseQName (xmlParserCtxtPtr ctxt,
+ xmlChar **prefix);
+/**
+ * Entities
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlDecodeEntities (xmlParserCtxtPtr ctxt,
+ int len,
+ int what,
+ xmlChar end,
+ xmlChar end2,
+ xmlChar end3);
+XMLPUBFUN void XMLCALL
+ xmlHandleEntity (xmlParserCtxtPtr ctxt,
+ xmlEntityPtr entity);
+
+#endif /* LIBXML_LEGACY_ENABLED */
+
+#ifdef IN_LIBXML
+/*
+ * internal only
+ */
+XMLPUBFUN void XMLCALL
+ xmlErrMemory (xmlParserCtxtPtr ctxt,
+ const char *extra);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_PARSER_INTERNALS_H__ */
diff --git a/interfaces/ext/libxml/pattern.h b/interfaces/ext/libxml/pattern.h
new file mode 100644
index 0000000..97d2cd2
--- /dev/null
+++ b/interfaces/ext/libxml/pattern.h
@@ -0,0 +1,100 @@
+/*
+ * Summary: pattern expression handling
+ * Description: allows to compile and test pattern expressions for nodes
+ * either in a tree or based on a parser state.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_PATTERN_H__
+#define __XML_PATTERN_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/dict.h>
+
+#ifdef LIBXML_PATTERN_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlPattern:
+ *
+ * A compiled (XPath based) pattern to select nodes
+ */
+typedef struct _xmlPattern xmlPattern;
+typedef xmlPattern *xmlPatternPtr;
+
+/**
+ * xmlPatternFlags:
+ *
+ * This is the set of options affecting the behaviour of pattern
+ * matching with this module
+ *
+ */
+typedef enum {
+ XML_PATTERN_DEFAULT = 0, /* simple pattern match */
+ XML_PATTERN_XPATH = 1<<0, /* standard XPath pattern */
+ XML_PATTERN_XSSEL = 1<<1, /* XPath subset for schema selector */
+ XML_PATTERN_XSFIELD = 1<<2 /* XPath subset for schema field */
+} xmlPatternFlags;
+
+XMLPUBFUN void XMLCALL
+ xmlFreePattern (xmlPatternPtr comp);
+
+XMLPUBFUN void XMLCALL
+ xmlFreePatternList (xmlPatternPtr comp);
+
+XMLPUBFUN xmlPatternPtr XMLCALL
+ xmlPatterncompile (const xmlChar *pattern,
+ xmlDict *dict,
+ int flags,
+ const xmlChar **namespaces);
+XMLPUBFUN int XMLCALL
+ xmlPatternMatch (xmlPatternPtr comp,
+ xmlNodePtr node);
+
+/* streaming interfaces */
+typedef struct _xmlStreamCtxt xmlStreamCtxt;
+typedef xmlStreamCtxt *xmlStreamCtxtPtr;
+
+XMLPUBFUN int XMLCALL
+ xmlPatternStreamable (xmlPatternPtr comp);
+XMLPUBFUN int XMLCALL
+ xmlPatternMaxDepth (xmlPatternPtr comp);
+XMLPUBFUN int XMLCALL
+ xmlPatternMinDepth (xmlPatternPtr comp);
+XMLPUBFUN int XMLCALL
+ xmlPatternFromRoot (xmlPatternPtr comp);
+XMLPUBFUN xmlStreamCtxtPtr XMLCALL
+ xmlPatternGetStreamCtxt (xmlPatternPtr comp);
+XMLPUBFUN void XMLCALL
+ xmlFreeStreamCtxt (xmlStreamCtxtPtr stream);
+XMLPUBFUN int XMLCALL
+ xmlStreamPushNode (xmlStreamCtxtPtr stream,
+ const xmlChar *name,
+ const xmlChar *ns,
+ int nodeType);
+XMLPUBFUN int XMLCALL
+ xmlStreamPush (xmlStreamCtxtPtr stream,
+ const xmlChar *name,
+ const xmlChar *ns);
+XMLPUBFUN int XMLCALL
+ xmlStreamPushAttr (xmlStreamCtxtPtr stream,
+ const xmlChar *name,
+ const xmlChar *ns);
+XMLPUBFUN int XMLCALL
+ xmlStreamPop (xmlStreamCtxtPtr stream);
+XMLPUBFUN int XMLCALL
+ xmlStreamWantsAnyNode (xmlStreamCtxtPtr stream);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_PATTERN_ENABLED */
+
+#endif /* __XML_PATTERN_H__ */
diff --git a/interfaces/ext/libxml/relaxng.h b/interfaces/ext/libxml/relaxng.h
new file mode 100644
index 0000000..d3e39e0
--- /dev/null
+++ b/interfaces/ext/libxml/relaxng.h
@@ -0,0 +1,213 @@
+/*
+ * Summary: implementation of the Relax-NG validation
+ * Description: implementation of the Relax-NG validation
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_RELAX_NG__
+#define __XML_RELAX_NG__
+
+#include <libxml/xmlversion.h>
+#include <libxml/hash.h>
+#include <libxml/xmlstring.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _xmlRelaxNG xmlRelaxNG;
+typedef xmlRelaxNG *xmlRelaxNGPtr;
+
+
+/**
+ * xmlRelaxNGValidityErrorFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of an error callback from a Relax-NG validation
+ */
+typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * xmlRelaxNGValidityWarningFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of a warning callback from a Relax-NG validation
+ */
+typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * A schemas validation context
+ */
+typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
+typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
+
+typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
+typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
+
+/*
+ * xmlRelaxNGValidErr:
+ *
+ * List of possible Relax NG validation errors
+ */
+typedef enum {
+ XML_RELAXNG_OK = 0,
+ XML_RELAXNG_ERR_MEMORY,
+ XML_RELAXNG_ERR_TYPE,
+ XML_RELAXNG_ERR_TYPEVAL,
+ XML_RELAXNG_ERR_DUPID,
+ XML_RELAXNG_ERR_TYPECMP,
+ XML_RELAXNG_ERR_NOSTATE,
+ XML_RELAXNG_ERR_NODEFINE,
+ XML_RELAXNG_ERR_LISTEXTRA,
+ XML_RELAXNG_ERR_LISTEMPTY,
+ XML_RELAXNG_ERR_INTERNODATA,
+ XML_RELAXNG_ERR_INTERSEQ,
+ XML_RELAXNG_ERR_INTEREXTRA,
+ XML_RELAXNG_ERR_ELEMNAME,
+ XML_RELAXNG_ERR_ATTRNAME,
+ XML_RELAXNG_ERR_ELEMNONS,
+ XML_RELAXNG_ERR_ATTRNONS,
+ XML_RELAXNG_ERR_ELEMWRONGNS,
+ XML_RELAXNG_ERR_ATTRWRONGNS,
+ XML_RELAXNG_ERR_ELEMEXTRANS,
+ XML_RELAXNG_ERR_ATTREXTRANS,
+ XML_RELAXNG_ERR_ELEMNOTEMPTY,
+ XML_RELAXNG_ERR_NOELEM,
+ XML_RELAXNG_ERR_NOTELEM,
+ XML_RELAXNG_ERR_ATTRVALID,
+ XML_RELAXNG_ERR_CONTENTVALID,
+ XML_RELAXNG_ERR_EXTRACONTENT,
+ XML_RELAXNG_ERR_INVALIDATTR,
+ XML_RELAXNG_ERR_DATAELEM,
+ XML_RELAXNG_ERR_VALELEM,
+ XML_RELAXNG_ERR_LISTELEM,
+ XML_RELAXNG_ERR_DATATYPE,
+ XML_RELAXNG_ERR_VALUE,
+ XML_RELAXNG_ERR_LIST,
+ XML_RELAXNG_ERR_NOGRAMMAR,
+ XML_RELAXNG_ERR_EXTRADATA,
+ XML_RELAXNG_ERR_LACKDATA,
+ XML_RELAXNG_ERR_INTERNAL,
+ XML_RELAXNG_ERR_ELEMWRONG,
+ XML_RELAXNG_ERR_TEXTWRONG
+} xmlRelaxNGValidErr;
+
+/*
+ * xmlRelaxNGParserFlags:
+ *
+ * List of possible Relax NG Parser flags
+ */
+typedef enum {
+ XML_RELAXNGP_NONE = 0,
+ XML_RELAXNGP_FREE_DOC = 1,
+ XML_RELAXNGP_CRNG = 2
+} xmlRelaxNGParserFlag;
+
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGInitTypes (void);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGCleanupTypes (void);
+
+/*
+ * Interfaces for parsing.
+ */
+XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
+ xmlRelaxNGNewParserCtxt (const char *URL);
+XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
+ xmlRelaxNGNewMemParserCtxt (const char *buffer,
+ int size);
+XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
+ xmlRelaxNGNewDocParserCtxt (xmlDocPtr doc);
+
+XMLPUBFUN int XMLCALL
+ xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt,
+ int flag);
+
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc err,
+ xmlRelaxNGValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc *err,
+ xmlRelaxNGValidityWarningFunc *warn,
+ void **ctx);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGSetParserStructuredErrors(
+ xmlRelaxNGParserCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror,
+ void *ctx);
+XMLPUBFUN xmlRelaxNGPtr XMLCALL
+ xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGFree (xmlRelaxNGPtr schema);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGDump (FILE *output,
+ xmlRelaxNGPtr schema);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGDumpTree (FILE * output,
+ xmlRelaxNGPtr schema);
+#endif /* LIBXML_OUTPUT_ENABLED */
+/*
+ * Interfaces for validating
+ */
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc err,
+ xmlRelaxNGValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc *err,
+ xmlRelaxNGValidityWarningFunc *warn,
+ void **ctx);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror, void *ctx);
+XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
+ xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+/*
+ * Interfaces for progressive validation when possible
+ */
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt,
+ const xmlChar *data,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+
+#endif /* __XML_RELAX_NG__ */
diff --git a/interfaces/ext/libxml/schemasInternals.h b/interfaces/ext/libxml/schemasInternals.h
new file mode 100644
index 0000000..b68a6e1
--- /dev/null
+++ b/interfaces/ext/libxml/schemasInternals.h
@@ -0,0 +1,958 @@
+/*
+ * Summary: internal interfaces for XML Schemas
+ * Description: internal interfaces for the XML Schemas handling
+ * and schema validity checking
+ * The Schemas development is a Work In Progress.
+ * Some of those interfaces are not garanteed to be API or ABI stable !
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMA_INTERNALS_H__
+#define __XML_SCHEMA_INTERNALS_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/xmlregexp.h>
+#include <libxml/hash.h>
+#include <libxml/dict.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ XML_SCHEMAS_UNKNOWN = 0,
+ XML_SCHEMAS_STRING,
+ XML_SCHEMAS_NORMSTRING,
+ XML_SCHEMAS_DECIMAL,
+ XML_SCHEMAS_TIME,
+ XML_SCHEMAS_GDAY,
+ XML_SCHEMAS_GMONTH,
+ XML_SCHEMAS_GMONTHDAY,
+ XML_SCHEMAS_GYEAR,
+ XML_SCHEMAS_GYEARMONTH,
+ XML_SCHEMAS_DATE,
+ XML_SCHEMAS_DATETIME,
+ XML_SCHEMAS_DURATION,
+ XML_SCHEMAS_FLOAT,
+ XML_SCHEMAS_DOUBLE,
+ XML_SCHEMAS_BOOLEAN,
+ XML_SCHEMAS_TOKEN,
+ XML_SCHEMAS_LANGUAGE,
+ XML_SCHEMAS_NMTOKEN,
+ XML_SCHEMAS_NMTOKENS,
+ XML_SCHEMAS_NAME,
+ XML_SCHEMAS_QNAME,
+ XML_SCHEMAS_NCNAME,
+ XML_SCHEMAS_ID,
+ XML_SCHEMAS_IDREF,
+ XML_SCHEMAS_IDREFS,
+ XML_SCHEMAS_ENTITY,
+ XML_SCHEMAS_ENTITIES,
+ XML_SCHEMAS_NOTATION,
+ XML_SCHEMAS_ANYURI,
+ XML_SCHEMAS_INTEGER,
+ XML_SCHEMAS_NPINTEGER,
+ XML_SCHEMAS_NINTEGER,
+ XML_SCHEMAS_NNINTEGER,
+ XML_SCHEMAS_PINTEGER,
+ XML_SCHEMAS_INT,
+ XML_SCHEMAS_UINT,
+ XML_SCHEMAS_LONG,
+ XML_SCHEMAS_ULONG,
+ XML_SCHEMAS_SHORT,
+ XML_SCHEMAS_USHORT,
+ XML_SCHEMAS_BYTE,
+ XML_SCHEMAS_UBYTE,
+ XML_SCHEMAS_HEXBINARY,
+ XML_SCHEMAS_BASE64BINARY,
+ XML_SCHEMAS_ANYTYPE,
+ XML_SCHEMAS_ANYSIMPLETYPE
+} xmlSchemaValType;
+
+/*
+ * XML Schemas defines multiple type of types.
+ */
+typedef enum {
+ XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */
+ XML_SCHEMA_TYPE_ANY,
+ XML_SCHEMA_TYPE_FACET,
+ XML_SCHEMA_TYPE_SIMPLE,
+ XML_SCHEMA_TYPE_COMPLEX,
+ XML_SCHEMA_TYPE_SEQUENCE = 6,
+ XML_SCHEMA_TYPE_CHOICE,
+ XML_SCHEMA_TYPE_ALL,
+ XML_SCHEMA_TYPE_SIMPLE_CONTENT,
+ XML_SCHEMA_TYPE_COMPLEX_CONTENT,
+ XML_SCHEMA_TYPE_UR,
+ XML_SCHEMA_TYPE_RESTRICTION,
+ XML_SCHEMA_TYPE_EXTENSION,
+ XML_SCHEMA_TYPE_ELEMENT,
+ XML_SCHEMA_TYPE_ATTRIBUTE,
+ XML_SCHEMA_TYPE_ATTRIBUTEGROUP,
+ XML_SCHEMA_TYPE_GROUP,
+ XML_SCHEMA_TYPE_NOTATION,
+ XML_SCHEMA_TYPE_LIST,
+ XML_SCHEMA_TYPE_UNION,
+ XML_SCHEMA_TYPE_ANY_ATTRIBUTE,
+ XML_SCHEMA_TYPE_IDC_UNIQUE,
+ XML_SCHEMA_TYPE_IDC_KEY,
+ XML_SCHEMA_TYPE_IDC_KEYREF,
+ XML_SCHEMA_TYPE_PARTICLE = 25,
+ XML_SCHEMA_TYPE_ATTRIBUTE_USE,
+ XML_SCHEMA_FACET_MININCLUSIVE = 1000,
+ XML_SCHEMA_FACET_MINEXCLUSIVE,
+ XML_SCHEMA_FACET_MAXINCLUSIVE,
+ XML_SCHEMA_FACET_MAXEXCLUSIVE,
+ XML_SCHEMA_FACET_TOTALDIGITS,
+ XML_SCHEMA_FACET_FRACTIONDIGITS,
+ XML_SCHEMA_FACET_PATTERN,
+ XML_SCHEMA_FACET_ENUMERATION,
+ XML_SCHEMA_FACET_WHITESPACE,
+ XML_SCHEMA_FACET_LENGTH,
+ XML_SCHEMA_FACET_MAXLENGTH,
+ XML_SCHEMA_FACET_MINLENGTH,
+ XML_SCHEMA_EXTRA_QNAMEREF = 2000,
+ XML_SCHEMA_EXTRA_ATTR_USE_PROHIB
+} xmlSchemaTypeType;
+
+typedef enum {
+ XML_SCHEMA_CONTENT_UNKNOWN = 0,
+ XML_SCHEMA_CONTENT_EMPTY = 1,
+ XML_SCHEMA_CONTENT_ELEMENTS,
+ XML_SCHEMA_CONTENT_MIXED,
+ XML_SCHEMA_CONTENT_SIMPLE,
+ XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, /* Obsolete */
+ XML_SCHEMA_CONTENT_BASIC,
+ XML_SCHEMA_CONTENT_ANY
+} xmlSchemaContentType;
+
+typedef struct _xmlSchemaVal xmlSchemaVal;
+typedef xmlSchemaVal *xmlSchemaValPtr;
+
+typedef struct _xmlSchemaType xmlSchemaType;
+typedef xmlSchemaType *xmlSchemaTypePtr;
+
+typedef struct _xmlSchemaFacet xmlSchemaFacet;
+typedef xmlSchemaFacet *xmlSchemaFacetPtr;
+
+/**
+ * Annotation
+ */
+typedef struct _xmlSchemaAnnot xmlSchemaAnnot;
+typedef xmlSchemaAnnot *xmlSchemaAnnotPtr;
+struct _xmlSchemaAnnot {
+ struct _xmlSchemaAnnot *next;
+ xmlNodePtr content; /* the annotation */
+};
+
+/**
+ * XML_SCHEMAS_ANYATTR_SKIP:
+ *
+ * Skip unknown attribute from validation
+ * Obsolete, not used anymore.
+ */
+#define XML_SCHEMAS_ANYATTR_SKIP 1
+/**
+ * XML_SCHEMAS_ANYATTR_LAX:
+ *
+ * Ignore validation non definition on attributes
+ * Obsolete, not used anymore.
+ */
+#define XML_SCHEMAS_ANYATTR_LAX 2
+/**
+ * XML_SCHEMAS_ANYATTR_STRICT:
+ *
+ * Apply strict validation rules on attributes
+ * Obsolete, not used anymore.
+ */
+#define XML_SCHEMAS_ANYATTR_STRICT 3
+/**
+ * XML_SCHEMAS_ANY_SKIP:
+ *
+ * Skip unknown attribute from validation
+ */
+#define XML_SCHEMAS_ANY_SKIP 1
+/**
+ * XML_SCHEMAS_ANY_LAX:
+ *
+ * Used by wildcards.
+ * Validate if type found, don't worry if not found
+ */
+#define XML_SCHEMAS_ANY_LAX 2
+/**
+ * XML_SCHEMAS_ANY_STRICT:
+ *
+ * Used by wildcards.
+ * Apply strict validation rules
+ */
+#define XML_SCHEMAS_ANY_STRICT 3
+/**
+ * XML_SCHEMAS_ATTR_USE_PROHIBITED:
+ *
+ * Used by wildcards.
+ * The attribute is prohibited.
+ */
+#define XML_SCHEMAS_ATTR_USE_PROHIBITED 0
+/**
+ * XML_SCHEMAS_ATTR_USE_REQUIRED:
+ *
+ * The attribute is required.
+ */
+#define XML_SCHEMAS_ATTR_USE_REQUIRED 1
+/**
+ * XML_SCHEMAS_ATTR_USE_OPTIONAL:
+ *
+ * The attribute is optional.
+ */
+#define XML_SCHEMAS_ATTR_USE_OPTIONAL 2
+/**
+ * XML_SCHEMAS_ATTR_GLOBAL:
+ *
+ * allow elements in no namespace
+ */
+#define XML_SCHEMAS_ATTR_GLOBAL 1 << 0
+/**
+ * XML_SCHEMAS_ATTR_NSDEFAULT:
+ *
+ * allow elements in no namespace
+ */
+#define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7
+/**
+ * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED:
+ *
+ * this is set when the "type" and "ref" references
+ * have been resolved.
+ */
+#define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8
+/**
+ * XML_SCHEMAS_ATTR_FIXED:
+ *
+ * the attribute has a fixed value
+ */
+#define XML_SCHEMAS_ATTR_FIXED 1 << 9
+
+/**
+ * xmlSchemaAttribute:
+ * An attribute definition.
+ */
+
+typedef struct _xmlSchemaAttribute xmlSchemaAttribute;
+typedef xmlSchemaAttribute *xmlSchemaAttributePtr;
+struct _xmlSchemaAttribute {
+ xmlSchemaTypeType type;
+ struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */
+ const xmlChar *name; /* the name of the declaration */
+ const xmlChar *id; /* Deprecated; not used */
+ const xmlChar *ref; /* Deprecated; not used */
+ const xmlChar *refNs; /* Deprecated; not used */
+ const xmlChar *typeName; /* the local name of the type definition */
+ const xmlChar *typeNs; /* the ns URI of the type definition */
+ xmlSchemaAnnotPtr annot;
+
+ xmlSchemaTypePtr base; /* Deprecated; not used */
+ int occurs; /* Deprecated; not used */
+ const xmlChar *defValue; /* The initial value of the value constraint */
+ xmlSchemaTypePtr subtypes; /* the type definition */
+ xmlNodePtr node;
+ const xmlChar *targetNamespace;
+ int flags;
+ const xmlChar *refPrefix; /* Deprecated; not used */
+ xmlSchemaValPtr defVal; /* The compiled value constraint */
+ xmlSchemaAttributePtr refDecl; /* Deprecated; not used */
+};
+
+/**
+ * xmlSchemaAttributeLink:
+ * Used to build a list of attribute uses on complexType definitions.
+ * WARNING: Deprecated; not used.
+ */
+typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink;
+typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr;
+struct _xmlSchemaAttributeLink {
+ struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */
+ struct _xmlSchemaAttribute *attr;/* the linked attribute */
+};
+
+/**
+ * XML_SCHEMAS_WILDCARD_COMPLETE:
+ *
+ * If the wildcard is complete.
+ */
+#define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0
+
+/**
+ * xmlSchemaCharValueLink:
+ * Used to build a list of namespaces on wildcards.
+ */
+typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs;
+typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr;
+struct _xmlSchemaWildcardNs {
+ struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */
+ const xmlChar *value;/* the value */
+};
+
+/**
+ * xmlSchemaWildcard.
+ * A wildcard.
+ */
+typedef struct _xmlSchemaWildcard xmlSchemaWildcard;
+typedef xmlSchemaWildcard *xmlSchemaWildcardPtr;
+struct _xmlSchemaWildcard {
+ xmlSchemaTypeType type; /* The kind of type */
+ const xmlChar *id; /* Deprecated; not used */
+ xmlSchemaAnnotPtr annot;
+ xmlNodePtr node;
+ int minOccurs; /* Deprecated; not used */
+ int maxOccurs; /* Deprecated; not used */
+ int processContents;
+ int any; /* Indicates if the ns constraint is of ##any */
+ xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */
+ xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */
+ int flags;
+};
+
+/**
+ * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED:
+ *
+ * The attribute wildcard has been already builded.
+ */
+#define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0
+/**
+ * XML_SCHEMAS_ATTRGROUP_GLOBAL:
+ *
+ * The attribute wildcard has been already builded.
+ */
+#define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1
+/**
+ * XML_SCHEMAS_ATTRGROUP_MARKED:
+ *
+ * Marks the attr group as marked; used for circular checks.
+ */
+#define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2
+
+/**
+ * XML_SCHEMAS_ATTRGROUP_REDEFINED:
+ *
+ * The attr group was redefined.
+ */
+#define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3
+/**
+ * XML_SCHEMAS_ATTRGROUP_HAS_REFS:
+ *
+ * Whether this attr. group contains attr. group references.
+ */
+#define XML_SCHEMAS_ATTRGROUP_HAS_REFS 1 << 4
+
+/**
+ * An attribute group definition.
+ *
+ * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
+ * must be kept similar
+ */
+typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;
+typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr;
+struct _xmlSchemaAttributeGroup {
+ xmlSchemaTypeType type; /* The kind of type */
+ struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
+ const xmlChar *name;
+ const xmlChar *id;
+ const xmlChar *ref; /* Deprecated; not used */
+ const xmlChar *refNs; /* Deprecated; not used */
+ xmlSchemaAnnotPtr annot;
+
+ xmlSchemaAttributePtr attributes; /* Deprecated; not used */
+ xmlNodePtr node;
+ int flags;
+ xmlSchemaWildcardPtr attributeWildcard;
+ const xmlChar *refPrefix; /* Deprecated; not used */
+ xmlSchemaAttributeGroupPtr refItem; /* Deprecated; not used */
+ const xmlChar *targetNamespace;
+ void *attrUses;
+};
+
+/**
+ * xmlSchemaTypeLink:
+ * Used to build a list of types (e.g. member types of
+ * simpleType with variety "union").
+ */
+typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink;
+typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr;
+struct _xmlSchemaTypeLink {
+ struct _xmlSchemaTypeLink *next;/* the next type link ... */
+ xmlSchemaTypePtr type;/* the linked type */
+};
+
+/**
+ * xmlSchemaFacetLink:
+ * Used to build a list of facets.
+ */
+typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink;
+typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr;
+struct _xmlSchemaFacetLink {
+ struct _xmlSchemaFacetLink *next;/* the next facet link ... */
+ xmlSchemaFacetPtr facet;/* the linked facet */
+};
+
+/**
+ * XML_SCHEMAS_TYPE_MIXED:
+ *
+ * the element content type is mixed
+ */
+#define XML_SCHEMAS_TYPE_MIXED 1 << 0
+/**
+ * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION:
+ *
+ * the simple or complex type has a derivation method of "extension".
+ */
+#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION 1 << 1
+/**
+ * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION:
+ *
+ * the simple or complex type has a derivation method of "restriction".
+ */
+#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION 1 << 2
+/**
+ * XML_SCHEMAS_TYPE_GLOBAL:
+ *
+ * the type is global
+ */
+#define XML_SCHEMAS_TYPE_GLOBAL 1 << 3
+/**
+ * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD:
+ *
+ * the complexType owns an attribute wildcard, i.e.
+ * it can be freed by the complexType
+ */
+#define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD 1 << 4 /* Obsolete. */
+/**
+ * XML_SCHEMAS_TYPE_VARIETY_ABSENT:
+ *
+ * the simpleType has a variety of "absent".
+ * TODO: Actually not necessary :-/, since if
+ * none of the variety flags occur then it's
+ * automatically absent.
+ */
+#define XML_SCHEMAS_TYPE_VARIETY_ABSENT 1 << 5
+/**
+ * XML_SCHEMAS_TYPE_VARIETY_LIST:
+ *
+ * the simpleType has a variety of "list".
+ */
+#define XML_SCHEMAS_TYPE_VARIETY_LIST 1 << 6
+/**
+ * XML_SCHEMAS_TYPE_VARIETY_UNION:
+ *
+ * the simpleType has a variety of "union".
+ */
+#define XML_SCHEMAS_TYPE_VARIETY_UNION 1 << 7
+/**
+ * XML_SCHEMAS_TYPE_VARIETY_ATOMIC:
+ *
+ * the simpleType has a variety of "union".
+ */
+#define XML_SCHEMAS_TYPE_VARIETY_ATOMIC 1 << 8
+/**
+ * XML_SCHEMAS_TYPE_FINAL_EXTENSION:
+ *
+ * the complexType has a final of "extension".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_EXTENSION 1 << 9
+/**
+ * XML_SCHEMAS_TYPE_FINAL_RESTRICTION:
+ *
+ * the simpleType/complexType has a final of "restriction".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_RESTRICTION 1 << 10
+/**
+ * XML_SCHEMAS_TYPE_FINAL_LIST:
+ *
+ * the simpleType has a final of "list".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_LIST 1 << 11
+/**
+ * XML_SCHEMAS_TYPE_FINAL_UNION:
+ *
+ * the simpleType has a final of "union".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_UNION 1 << 12
+/**
+ * XML_SCHEMAS_TYPE_FINAL_DEFAULT:
+ *
+ * the simpleType has a final of "default".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_DEFAULT 1 << 13
+/**
+ * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE:
+ *
+ * Marks the item as a builtin primitive.
+ */
+#define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE 1 << 14
+/**
+ * XML_SCHEMAS_TYPE_MARKED:
+ *
+ * Marks the item as marked; used for circular checks.
+ */
+#define XML_SCHEMAS_TYPE_MARKED 1 << 16
+/**
+ * XML_SCHEMAS_TYPE_BLOCK_DEFAULT:
+ *
+ * the complexType did not specify 'block' so use the default of the
+ * <schema> item.
+ */
+#define XML_SCHEMAS_TYPE_BLOCK_DEFAULT 1 << 17
+/**
+ * XML_SCHEMAS_TYPE_BLOCK_EXTENSION:
+ *
+ * the complexType has a 'block' of "extension".
+ */
+#define XML_SCHEMAS_TYPE_BLOCK_EXTENSION 1 << 18
+/**
+ * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION:
+ *
+ * the complexType has a 'block' of "restriction".
+ */
+#define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION 1 << 19
+/**
+ * XML_SCHEMAS_TYPE_ABSTRACT:
+ *
+ * the simple/complexType is abstract.
+ */
+#define XML_SCHEMAS_TYPE_ABSTRACT 1 << 20
+/**
+ * XML_SCHEMAS_TYPE_FACETSNEEDVALUE:
+ *
+ * indicates if the facets need a computed value
+ */
+#define XML_SCHEMAS_TYPE_FACETSNEEDVALUE 1 << 21
+/**
+ * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED:
+ *
+ * indicates that the type was typefixed
+ */
+#define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED 1 << 22
+/**
+ * XML_SCHEMAS_TYPE_INTERNAL_INVALID:
+ *
+ * indicates that the type is invalid
+ */
+#define XML_SCHEMAS_TYPE_INTERNAL_INVALID 1 << 23
+/**
+ * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE:
+ *
+ * a whitespace-facet value of "preserve"
+ */
+#define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE 1 << 24
+/**
+ * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE:
+ *
+ * a whitespace-facet value of "replace"
+ */
+#define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE 1 << 25
+/**
+ * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE:
+ *
+ * a whitespace-facet value of "collapse"
+ */
+#define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE 1 << 26
+/**
+ * XML_SCHEMAS_TYPE_HAS_FACETS:
+ *
+ * has facets
+ */
+#define XML_SCHEMAS_TYPE_HAS_FACETS 1 << 27
+/**
+ * XML_SCHEMAS_TYPE_NORMVALUENEEDED:
+ *
+ * indicates if the facets (pattern) need a normalized value
+ */
+#define XML_SCHEMAS_TYPE_NORMVALUENEEDED 1 << 28
+
+/**
+ * XML_SCHEMAS_TYPE_FIXUP_1:
+ *
+ * First stage of fixup was done.
+ */
+#define XML_SCHEMAS_TYPE_FIXUP_1 1 << 29
+
+/**
+ * XML_SCHEMAS_TYPE_REDEFINED:
+ *
+ * The type was redefined.
+ */
+#define XML_SCHEMAS_TYPE_REDEFINED 1 << 30
+/**
+ * XML_SCHEMAS_TYPE_REDEFINING:
+ *
+ * The type redefines an other type.
+ */
+/* #define XML_SCHEMAS_TYPE_REDEFINING 1 << 31 */
+
+/**
+ * _xmlSchemaType:
+ *
+ * Schemas type definition.
+ */
+struct _xmlSchemaType {
+ xmlSchemaTypeType type; /* The kind of type */
+ struct _xmlSchemaType *next; /* the next type if in a sequence ... */
+ const xmlChar *name;
+ const xmlChar *id ; /* Deprecated; not used */
+ const xmlChar *ref; /* Deprecated; not used */
+ const xmlChar *refNs; /* Deprecated; not used */
+ xmlSchemaAnnotPtr annot;
+ xmlSchemaTypePtr subtypes;
+ xmlSchemaAttributePtr attributes; /* Deprecated; not used */
+ xmlNodePtr node;
+ int minOccurs; /* Deprecated; not used */
+ int maxOccurs; /* Deprecated; not used */
+
+ int flags;
+ xmlSchemaContentType contentType;
+ const xmlChar *base; /* Base type's local name */
+ const xmlChar *baseNs; /* Base type's target namespace */
+ xmlSchemaTypePtr baseType; /* The base type component */
+ xmlSchemaFacetPtr facets; /* Local facets */
+ struct _xmlSchemaType *redef; /* Deprecated; not used */
+ int recurse; /* Obsolete */
+ xmlSchemaAttributeLinkPtr *attributeUses; /* Deprecated; not used */
+ xmlSchemaWildcardPtr attributeWildcard;
+ int builtInType; /* Type of built-in types. */
+ xmlSchemaTypeLinkPtr memberTypes; /* member-types if a union type. */
+ xmlSchemaFacetLinkPtr facetSet; /* All facets (incl. inherited) */
+ const xmlChar *refPrefix; /* Deprecated; not used */
+ xmlSchemaTypePtr contentTypeDef; /* Used for the simple content of complex types.
+ Could we use @subtypes for this? */
+ xmlRegexpPtr contModel; /* Holds the automaton of the content model */
+ const xmlChar *targetNamespace;
+ void *attrUses;
+};
+
+/*
+ * xmlSchemaElement:
+ * An element definition.
+ *
+ * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
+ * structures must be kept similar
+ */
+/**
+ * XML_SCHEMAS_ELEM_NILLABLE:
+ *
+ * the element is nillable
+ */
+#define XML_SCHEMAS_ELEM_NILLABLE 1 << 0
+/**
+ * XML_SCHEMAS_ELEM_GLOBAL:
+ *
+ * the element is global
+ */
+#define XML_SCHEMAS_ELEM_GLOBAL 1 << 1
+/**
+ * XML_SCHEMAS_ELEM_DEFAULT:
+ *
+ * the element has a default value
+ */
+#define XML_SCHEMAS_ELEM_DEFAULT 1 << 2
+/**
+ * XML_SCHEMAS_ELEM_FIXED:
+ *
+ * the element has a fixed value
+ */
+#define XML_SCHEMAS_ELEM_FIXED 1 << 3
+/**
+ * XML_SCHEMAS_ELEM_ABSTRACT:
+ *
+ * the element is abstract
+ */
+#define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4
+/**
+ * XML_SCHEMAS_ELEM_TOPLEVEL:
+ *
+ * the element is top level
+ * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead
+ */
+#define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5
+/**
+ * XML_SCHEMAS_ELEM_REF:
+ *
+ * the element is a reference to a type
+ */
+#define XML_SCHEMAS_ELEM_REF 1 << 6
+/**
+ * XML_SCHEMAS_ELEM_NSDEFAULT:
+ *
+ * allow elements in no namespace
+ * Obsolete, not used anymore.
+ */
+#define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7
+/**
+ * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED:
+ *
+ * this is set when "type", "ref", "substitutionGroup"
+ * references have been resolved.
+ */
+#define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED 1 << 8
+ /**
+ * XML_SCHEMAS_ELEM_CIRCULAR:
+ *
+ * a helper flag for the search of circular references.
+ */
+#define XML_SCHEMAS_ELEM_CIRCULAR 1 << 9
+/**
+ * XML_SCHEMAS_ELEM_BLOCK_ABSENT:
+ *
+ * the "block" attribute is absent
+ */
+#define XML_SCHEMAS_ELEM_BLOCK_ABSENT 1 << 10
+/**
+ * XML_SCHEMAS_ELEM_BLOCK_EXTENSION:
+ *
+ * disallowed substitutions are absent
+ */
+#define XML_SCHEMAS_ELEM_BLOCK_EXTENSION 1 << 11
+/**
+ * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION:
+ *
+ * disallowed substitutions: "restriction"
+ */
+#define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION 1 << 12
+/**
+ * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION:
+ *
+ * disallowed substitutions: "substituion"
+ */
+#define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION 1 << 13
+/**
+ * XML_SCHEMAS_ELEM_FINAL_ABSENT:
+ *
+ * substitution group exclusions are absent
+ */
+#define XML_SCHEMAS_ELEM_FINAL_ABSENT 1 << 14
+/**
+ * XML_SCHEMAS_ELEM_FINAL_EXTENSION:
+ *
+ * substitution group exclusions: "extension"
+ */
+#define XML_SCHEMAS_ELEM_FINAL_EXTENSION 1 << 15
+/**
+ * XML_SCHEMAS_ELEM_FINAL_RESTRICTION:
+ *
+ * substitution group exclusions: "restriction"
+ */
+#define XML_SCHEMAS_ELEM_FINAL_RESTRICTION 1 << 16
+/**
+ * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD:
+ *
+ * the declaration is a substitution group head
+ */
+#define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD 1 << 17
+/**
+ * XML_SCHEMAS_ELEM_INTERNAL_CHECKED:
+ *
+ * this is set when the elem decl has been checked against
+ * all constraints
+ */
+#define XML_SCHEMAS_ELEM_INTERNAL_CHECKED 1 << 18
+
+typedef struct _xmlSchemaElement xmlSchemaElement;
+typedef xmlSchemaElement *xmlSchemaElementPtr;
+struct _xmlSchemaElement {
+ xmlSchemaTypeType type; /* The kind of type */
+ struct _xmlSchemaType *next; /* Not used? */
+ const xmlChar *name;
+ const xmlChar *id; /* Deprecated; not used */
+ const xmlChar *ref; /* Deprecated; not used */
+ const xmlChar *refNs; /* Deprecated; not used */
+ xmlSchemaAnnotPtr annot;
+ xmlSchemaTypePtr subtypes; /* the type definition */
+ xmlSchemaAttributePtr attributes;
+ xmlNodePtr node;
+ int minOccurs; /* Deprecated; not used */
+ int maxOccurs; /* Deprecated; not used */
+
+ int flags;
+ const xmlChar *targetNamespace;
+ const xmlChar *namedType;
+ const xmlChar *namedTypeNs;
+ const xmlChar *substGroup;
+ const xmlChar *substGroupNs;
+ const xmlChar *scope;
+ const xmlChar *value; /* The original value of the value constraint. */
+ struct _xmlSchemaElement *refDecl; /* This will now be used for the
+ substitution group affiliation */
+ xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */
+ xmlSchemaContentType contentType;
+ const xmlChar *refPrefix; /* Deprecated; not used */
+ xmlSchemaValPtr defVal; /* The compiled value contraint. */
+ void *idcs; /* The identity-constraint defs */
+};
+
+/*
+ * XML_SCHEMAS_FACET_UNKNOWN:
+ *
+ * unknown facet handling
+ */
+#define XML_SCHEMAS_FACET_UNKNOWN 0
+/*
+ * XML_SCHEMAS_FACET_PRESERVE:
+ *
+ * preserve the type of the facet
+ */
+#define XML_SCHEMAS_FACET_PRESERVE 1
+/*
+ * XML_SCHEMAS_FACET_REPLACE:
+ *
+ * replace the type of the facet
+ */
+#define XML_SCHEMAS_FACET_REPLACE 2
+/*
+ * XML_SCHEMAS_FACET_COLLAPSE:
+ *
+ * collapse the types of the facet
+ */
+#define XML_SCHEMAS_FACET_COLLAPSE 3
+/**
+ * A facet definition.
+ */
+struct _xmlSchemaFacet {
+ xmlSchemaTypeType type; /* The kind of type */
+ struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */
+ const xmlChar *value; /* The original value */
+ const xmlChar *id; /* Obsolete */
+ xmlSchemaAnnotPtr annot;
+ xmlNodePtr node;
+ int fixed; /* XML_SCHEMAS_FACET_PRESERVE, etc. */
+ int whitespace;
+ xmlSchemaValPtr val; /* The compiled value */
+ xmlRegexpPtr regexp; /* The regex for patterns */
+};
+
+/**
+ * A notation definition.
+ */
+typedef struct _xmlSchemaNotation xmlSchemaNotation;
+typedef xmlSchemaNotation *xmlSchemaNotationPtr;
+struct _xmlSchemaNotation {
+ xmlSchemaTypeType type; /* The kind of type */
+ const xmlChar *name;
+ xmlSchemaAnnotPtr annot;
+ const xmlChar *identifier;
+ const xmlChar *targetNamespace;
+};
+
+/*
+* TODO: Actually all those flags used for the schema should sit
+* on the schema parser context, since they are used only
+* during parsing an XML schema document, and not available
+* on the component level as per spec.
+*/
+/**
+ * XML_SCHEMAS_QUALIF_ELEM:
+ *
+ * Reflects elementFormDefault == qualified in
+ * an XML schema document.
+ */
+#define XML_SCHEMAS_QUALIF_ELEM 1 << 0
+/**
+ * XML_SCHEMAS_QUALIF_ATTR:
+ *
+ * Reflects attributeFormDefault == qualified in
+ * an XML schema document.
+ */
+#define XML_SCHEMAS_QUALIF_ATTR 1 << 1
+/**
+ * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION:
+ *
+ * the schema has "extension" in the set of finalDefault.
+ */
+#define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION 1 << 2
+/**
+ * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION:
+ *
+ * the schema has "restriction" in the set of finalDefault.
+ */
+#define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION 1 << 3
+/**
+ * XML_SCHEMAS_FINAL_DEFAULT_LIST:
+ *
+ * the cshema has "list" in the set of finalDefault.
+ */
+#define XML_SCHEMAS_FINAL_DEFAULT_LIST 1 << 4
+/**
+ * XML_SCHEMAS_FINAL_DEFAULT_UNION:
+ *
+ * the schema has "union" in the set of finalDefault.
+ */
+#define XML_SCHEMAS_FINAL_DEFAULT_UNION 1 << 5
+/**
+ * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION:
+ *
+ * the schema has "extension" in the set of blockDefault.
+ */
+#define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION 1 << 6
+/**
+ * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION:
+ *
+ * the schema has "restriction" in the set of blockDefault.
+ */
+#define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION 1 << 7
+/**
+ * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION:
+ *
+ * the schema has "substitution" in the set of blockDefault.
+ */
+#define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION 1 << 8
+/**
+ * XML_SCHEMAS_INCLUDING_CONVERT_NS:
+ *
+ * the schema is currently including an other schema with
+ * no target namespace.
+ */
+#define XML_SCHEMAS_INCLUDING_CONVERT_NS 1 << 9
+/**
+ * _xmlSchema:
+ *
+ * A Schemas definition
+ */
+struct _xmlSchema {
+ const xmlChar *name; /* schema name */
+ const xmlChar *targetNamespace; /* the target namespace */
+ const xmlChar *version;
+ const xmlChar *id; /* Obsolete */
+ xmlDocPtr doc;
+ xmlSchemaAnnotPtr annot;
+ int flags;
+
+ xmlHashTablePtr typeDecl;
+ xmlHashTablePtr attrDecl;
+ xmlHashTablePtr attrgrpDecl;
+ xmlHashTablePtr elemDecl;
+ xmlHashTablePtr notaDecl;
+
+ xmlHashTablePtr schemasImports;
+
+ void *_private; /* unused by the library for users or bindings */
+ xmlHashTablePtr groupDecl;
+ xmlDictPtr dict;
+ void *includes; /* the includes, this is opaque for now */
+ int preserve; /* whether to free the document */
+ int counter; /* used to give ononymous components unique names */
+ xmlHashTablePtr idcDef; /* All identity-constraint defs. */
+ void *volatiles; /* Obsolete */
+};
+
+XMLPUBFUN void XMLCALL xmlSchemaFreeType (xmlSchemaTypePtr type);
+XMLPUBFUN void XMLCALL xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#endif /* __XML_SCHEMA_INTERNALS_H__ */
diff --git a/interfaces/ext/libxml/schematron.h b/interfaces/ext/libxml/schematron.h
new file mode 100644
index 0000000..f442826
--- /dev/null
+++ b/interfaces/ext/libxml/schematron.h
@@ -0,0 +1,142 @@
+/*
+ * Summary: XML Schemastron implementation
+ * Description: interface to the XML Schematron validity checking.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMATRON_H__
+#define __XML_SCHEMATRON_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMATRON_ENABLED
+
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ XML_SCHEMATRON_OUT_QUIET = 1 << 0, /* quiet no report */
+ XML_SCHEMATRON_OUT_TEXT = 1 << 1, /* build a textual report */
+ XML_SCHEMATRON_OUT_XML = 1 << 2, /* output SVRL */
+ XML_SCHEMATRON_OUT_ERROR = 1 << 3, /* output via xmlStructuredErrorFunc */
+ XML_SCHEMATRON_OUT_FILE = 1 << 8, /* output to a file descriptor */
+ XML_SCHEMATRON_OUT_BUFFER = 1 << 9, /* output to a buffer */
+ XML_SCHEMATRON_OUT_IO = 1 << 10 /* output to I/O mechanism */
+} xmlSchematronValidOptions;
+
+/**
+ * The schemas related types are kept internal
+ */
+typedef struct _xmlSchematron xmlSchematron;
+typedef xmlSchematron *xmlSchematronPtr;
+
+/**
+ * xmlSchematronValidityErrorFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of an error callback from a Schematron validation
+ */
+typedef void (*xmlSchematronValidityErrorFunc) (void *ctx, const char *msg, ...);
+
+/**
+ * xmlSchematronValidityWarningFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of a warning callback from a Schematron validation
+ */
+typedef void (*xmlSchematronValidityWarningFunc) (void *ctx, const char *msg, ...);
+
+/**
+ * A schemas validation context
+ */
+typedef struct _xmlSchematronParserCtxt xmlSchematronParserCtxt;
+typedef xmlSchematronParserCtxt *xmlSchematronParserCtxtPtr;
+
+typedef struct _xmlSchematronValidCtxt xmlSchematronValidCtxt;
+typedef xmlSchematronValidCtxt *xmlSchematronValidCtxtPtr;
+
+/*
+ * Interfaces for parsing.
+ */
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
+ xmlSchematronNewParserCtxt (const char *URL);
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
+ xmlSchematronNewMemParserCtxt(const char *buffer,
+ int size);
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
+ xmlSchematronNewDocParserCtxt(xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlSchematronFreeParserCtxt (xmlSchematronParserCtxtPtr ctxt);
+/*****
+XMLPUBFUN void XMLCALL
+ xmlSchematronSetParserErrors(xmlSchematronParserCtxtPtr ctxt,
+ xmlSchematronValidityErrorFunc err,
+ xmlSchematronValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchematronGetParserErrors(xmlSchematronParserCtxtPtr ctxt,
+ xmlSchematronValidityErrorFunc * err,
+ xmlSchematronValidityWarningFunc * warn,
+ void **ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchematronIsValid (xmlSchematronValidCtxtPtr ctxt);
+ *****/
+XMLPUBFUN xmlSchematronPtr XMLCALL
+ xmlSchematronParse (xmlSchematronParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlSchematronFree (xmlSchematronPtr schema);
+/*
+ * Interfaces for validating
+ */
+XMLPUBFUN void XMLCALL
+ xmlSchematronSetValidStructuredErrors(
+ xmlSchematronValidCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror,
+ void *ctx);
+/******
+XMLPUBFUN void XMLCALL
+ xmlSchematronSetValidErrors (xmlSchematronValidCtxtPtr ctxt,
+ xmlSchematronValidityErrorFunc err,
+ xmlSchematronValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchematronGetValidErrors (xmlSchematronValidCtxtPtr ctxt,
+ xmlSchematronValidityErrorFunc *err,
+ xmlSchematronValidityWarningFunc *warn,
+ void **ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchematronSetValidOptions(xmlSchematronValidCtxtPtr ctxt,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlSchematronValidCtxtGetOptions(xmlSchematronValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlSchematronValidateOneElement (xmlSchematronValidCtxtPtr ctxt,
+ xmlNodePtr elem);
+ *******/
+
+XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL
+ xmlSchematronNewValidCtxt (xmlSchematronPtr schema,
+ int options);
+XMLPUBFUN void XMLCALL
+ xmlSchematronFreeValidCtxt (xmlSchematronValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlSchematronValidateDoc (xmlSchematronValidCtxtPtr ctxt,
+ xmlDocPtr instance);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMATRON_ENABLED */
+#endif /* __XML_SCHEMATRON_H__ */
diff --git a/interfaces/ext/libxml/threads.h b/interfaces/ext/libxml/threads.h
new file mode 100644
index 0000000..d31f16a
--- /dev/null
+++ b/interfaces/ext/libxml/threads.h
@@ -0,0 +1,84 @@
+/**
+ * Summary: interfaces for thread handling
+ * Description: set of generic threading related routines
+ * should work with pthreads, Windows native or TLS threads
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_THREADS_H__
+#define __XML_THREADS_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * xmlMutex are a simple mutual exception locks.
+ */
+typedef struct _xmlMutex xmlMutex;
+typedef xmlMutex *xmlMutexPtr;
+
+/*
+ * xmlRMutex are reentrant mutual exception locks.
+ */
+typedef struct _xmlRMutex xmlRMutex;
+typedef xmlRMutex *xmlRMutexPtr;
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/globals.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN xmlMutexPtr XMLCALL
+ xmlNewMutex (void);
+XMLPUBFUN void XMLCALL
+ xmlMutexLock (xmlMutexPtr tok);
+XMLPUBFUN void XMLCALL
+ xmlMutexUnlock (xmlMutexPtr tok);
+XMLPUBFUN void XMLCALL
+ xmlFreeMutex (xmlMutexPtr tok);
+
+XMLPUBFUN xmlRMutexPtr XMLCALL
+ xmlNewRMutex (void);
+XMLPUBFUN void XMLCALL
+ xmlRMutexLock (xmlRMutexPtr tok);
+XMLPUBFUN void XMLCALL
+ xmlRMutexUnlock (xmlRMutexPtr tok);
+XMLPUBFUN void XMLCALL
+ xmlFreeRMutex (xmlRMutexPtr tok);
+
+/*
+ * Library wide APIs.
+ */
+XMLPUBFUN void XMLCALL
+ xmlInitThreads (void);
+XMLPUBFUN void XMLCALL
+ xmlLockLibrary (void);
+XMLPUBFUN void XMLCALL
+ xmlUnlockLibrary(void);
+XMLPUBFUN int XMLCALL
+ xmlGetThreadId (void);
+XMLPUBFUN int XMLCALL
+ xmlIsMainThread (void);
+XMLPUBFUN void XMLCALL
+ xmlCleanupThreads(void);
+XMLPUBFUN xmlGlobalStatePtr XMLCALL
+ xmlGetGlobalState(void);
+
+#if defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && defined(LIBXML_STATIC_FOR_DLL)
+int XMLCALL xmlDllMain(void *hinstDLL, unsigned long fdwReason, void *lpvReserved);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __XML_THREADS_H__ */
diff --git a/interfaces/ext/libxml/tree.h b/interfaces/ext/libxml/tree.h
new file mode 100644
index 0000000..b733589
--- /dev/null
+++ b/interfaces/ext/libxml/tree.h
@@ -0,0 +1,1252 @@
+/*
+ * Summary: interfaces for tree manipulation
+ * Description: this module describes the structures found in an tree resulting
+ * from an XML or HTML parsing, as well as the API provided for
+ * various processing on that tree
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_TREE_H__
+#define __XML_TREE_H__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Some of the basic types pointer to structures:
+ */
+/* xmlIO.h */
+typedef struct _xmlParserInputBuffer xmlParserInputBuffer;
+typedef xmlParserInputBuffer *xmlParserInputBufferPtr;
+
+typedef struct _xmlOutputBuffer xmlOutputBuffer;
+typedef xmlOutputBuffer *xmlOutputBufferPtr;
+
+/* parser.h */
+typedef struct _xmlParserInput xmlParserInput;
+typedef xmlParserInput *xmlParserInputPtr;
+
+typedef struct _xmlParserCtxt xmlParserCtxt;
+typedef xmlParserCtxt *xmlParserCtxtPtr;
+
+typedef struct _xmlSAXLocator xmlSAXLocator;
+typedef xmlSAXLocator *xmlSAXLocatorPtr;
+
+typedef struct _xmlSAXHandler xmlSAXHandler;
+typedef xmlSAXHandler *xmlSAXHandlerPtr;
+
+/* entities.h */
+typedef struct _xmlEntity xmlEntity;
+typedef xmlEntity *xmlEntityPtr;
+
+/**
+ * BASE_BUFFER_SIZE:
+ *
+ * default buffer size 4000.
+ */
+#define BASE_BUFFER_SIZE 4096
+
+/**
+ * LIBXML_NAMESPACE_DICT:
+ *
+ * Defines experimental behaviour:
+ * 1) xmlNs gets an additional field @context (a xmlDoc)
+ * 2) when creating a tree, xmlNs->href is stored in the dict of xmlDoc.
+ */
+/* #define LIBXML_NAMESPACE_DICT */
+
+/**
+ * xmlBufferAllocationScheme:
+ *
+ * A buffer allocation scheme can be defined to either match exactly the
+ * need or double it's allocated size each time it is found too small.
+ */
+
+typedef enum {
+ XML_BUFFER_ALLOC_DOUBLEIT, /* double each time one need to grow */
+ XML_BUFFER_ALLOC_EXACT, /* grow only to the minimal size */
+ XML_BUFFER_ALLOC_IMMUTABLE, /* immutable buffer */
+ XML_BUFFER_ALLOC_IO /* special allocation scheme used for I/O */
+} xmlBufferAllocationScheme;
+
+/**
+ * xmlBuffer:
+ *
+ * A buffer structure.
+ */
+typedef struct _xmlBuffer xmlBuffer;
+typedef xmlBuffer *xmlBufferPtr;
+struct _xmlBuffer {
+ xmlChar *content; /* The buffer content UTF8 */
+ unsigned int use; /* The buffer size used */
+ unsigned int size; /* The buffer size */
+ xmlBufferAllocationScheme alloc; /* The realloc method */
+ xmlChar *contentIO; /* in IO mode we may have a different base */
+};
+
+/**
+ * XML_XML_NAMESPACE:
+ *
+ * This is the namespace for the special xml: prefix predefined in the
+ * XML Namespace specification.
+ */
+#define XML_XML_NAMESPACE \
+ (const xmlChar *) "http://www.w3.org/XML/1998/namespace"
+
+/**
+ * XML_XML_ID:
+ *
+ * This is the name for the special xml:id attribute
+ */
+#define XML_XML_ID (const xmlChar *) "xml:id"
+
+/*
+ * The different element types carried by an XML tree.
+ *
+ * NOTE: This is synchronized with DOM Level1 values
+ * See http://www.w3.org/TR/REC-DOM-Level-1/
+ *
+ * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should
+ * be deprecated to use an XML_DTD_NODE.
+ */
+typedef enum {
+ XML_ELEMENT_NODE= 1,
+ XML_ATTRIBUTE_NODE= 2,
+ XML_TEXT_NODE= 3,
+ XML_CDATA_SECTION_NODE= 4,
+ XML_ENTITY_REF_NODE= 5,
+ XML_ENTITY_NODE= 6,
+ XML_PI_NODE= 7,
+ XML_COMMENT_NODE= 8,
+ XML_DOCUMENT_NODE= 9,
+ XML_DOCUMENT_TYPE_NODE= 10,
+ XML_DOCUMENT_FRAG_NODE= 11,
+ XML_NOTATION_NODE= 12,
+ XML_HTML_DOCUMENT_NODE= 13,
+ XML_DTD_NODE= 14,
+ XML_ELEMENT_DECL= 15,
+ XML_ATTRIBUTE_DECL= 16,
+ XML_ENTITY_DECL= 17,
+ XML_NAMESPACE_DECL= 18,
+ XML_XINCLUDE_START= 19,
+ XML_XINCLUDE_END= 20
+#ifdef LIBXML_DOCB_ENABLED
+ ,XML_DOCB_DOCUMENT_NODE= 21
+#endif
+} xmlElementType;
+
+
+/**
+ * xmlNotation:
+ *
+ * A DTD Notation definition.
+ */
+
+typedef struct _xmlNotation xmlNotation;
+typedef xmlNotation *xmlNotationPtr;
+struct _xmlNotation {
+ const xmlChar *name; /* Notation name */
+ const xmlChar *PublicID; /* Public identifier, if any */
+ const xmlChar *SystemID; /* System identifier, if any */
+};
+
+/**
+ * xmlAttributeType:
+ *
+ * A DTD Attribute type definition.
+ */
+
+typedef enum {
+ XML_ATTRIBUTE_CDATA = 1,
+ XML_ATTRIBUTE_ID,
+ XML_ATTRIBUTE_IDREF ,
+ XML_ATTRIBUTE_IDREFS,
+ XML_ATTRIBUTE_ENTITY,
+ XML_ATTRIBUTE_ENTITIES,
+ XML_ATTRIBUTE_NMTOKEN,
+ XML_ATTRIBUTE_NMTOKENS,
+ XML_ATTRIBUTE_ENUMERATION,
+ XML_ATTRIBUTE_NOTATION
+} xmlAttributeType;
+
+/**
+ * xmlAttributeDefault:
+ *
+ * A DTD Attribute default definition.
+ */
+
+typedef enum {
+ XML_ATTRIBUTE_NONE = 1,
+ XML_ATTRIBUTE_REQUIRED,
+ XML_ATTRIBUTE_IMPLIED,
+ XML_ATTRIBUTE_FIXED
+} xmlAttributeDefault;
+
+/**
+ * xmlEnumeration:
+ *
+ * List structure used when there is an enumeration in DTDs.
+ */
+
+typedef struct _xmlEnumeration xmlEnumeration;
+typedef xmlEnumeration *xmlEnumerationPtr;
+struct _xmlEnumeration {
+ struct _xmlEnumeration *next; /* next one */
+ const xmlChar *name; /* Enumeration name */
+};
+
+/**
+ * xmlAttribute:
+ *
+ * An Attribute declaration in a DTD.
+ */
+
+typedef struct _xmlAttribute xmlAttribute;
+typedef xmlAttribute *xmlAttributePtr;
+struct _xmlAttribute {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_ATTRIBUTE_DECL, must be second ! */
+ const xmlChar *name; /* Attribute name */
+ struct _xmlNode *children; /* NULL */
+ struct _xmlNode *last; /* NULL */
+ struct _xmlDtd *parent; /* -> DTD */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ struct _xmlAttribute *nexth; /* next in hash table */
+ xmlAttributeType atype; /* The attribute type */
+ xmlAttributeDefault def; /* the default */
+ const xmlChar *defaultValue; /* or the default value */
+ xmlEnumerationPtr tree; /* or the enumeration tree if any */
+ const xmlChar *prefix; /* the namespace prefix if any */
+ const xmlChar *elem; /* Element holding the attribute */
+};
+
+/**
+ * xmlElementContentType:
+ *
+ * Possible definitions of element content types.
+ */
+typedef enum {
+ XML_ELEMENT_CONTENT_PCDATA = 1,
+ XML_ELEMENT_CONTENT_ELEMENT,
+ XML_ELEMENT_CONTENT_SEQ,
+ XML_ELEMENT_CONTENT_OR
+} xmlElementContentType;
+
+/**
+ * xmlElementContentOccur:
+ *
+ * Possible definitions of element content occurrences.
+ */
+typedef enum {
+ XML_ELEMENT_CONTENT_ONCE = 1,
+ XML_ELEMENT_CONTENT_OPT,
+ XML_ELEMENT_CONTENT_MULT,
+ XML_ELEMENT_CONTENT_PLUS
+} xmlElementContentOccur;
+
+/**
+ * xmlElementContent:
+ *
+ * An XML Element content as stored after parsing an element definition
+ * in a DTD.
+ */
+
+typedef struct _xmlElementContent xmlElementContent;
+typedef xmlElementContent *xmlElementContentPtr;
+struct _xmlElementContent {
+ xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
+ xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
+ const xmlChar *name; /* Element name */
+ struct _xmlElementContent *c1; /* first child */
+ struct _xmlElementContent *c2; /* second child */
+ struct _xmlElementContent *parent; /* parent */
+ const xmlChar *prefix; /* Namespace prefix */
+};
+
+/**
+ * xmlElementTypeVal:
+ *
+ * The different possibilities for an element content type.
+ */
+
+typedef enum {
+ XML_ELEMENT_TYPE_UNDEFINED = 0,
+ XML_ELEMENT_TYPE_EMPTY = 1,
+ XML_ELEMENT_TYPE_ANY,
+ XML_ELEMENT_TYPE_MIXED,
+ XML_ELEMENT_TYPE_ELEMENT
+} xmlElementTypeVal;
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/xmlregexp.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlElement:
+ *
+ * An XML Element declaration from a DTD.
+ */
+
+typedef struct _xmlElement xmlElement;
+typedef xmlElement *xmlElementPtr;
+struct _xmlElement {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_ELEMENT_DECL, must be second ! */
+ const xmlChar *name; /* Element name */
+ struct _xmlNode *children; /* NULL */
+ struct _xmlNode *last; /* NULL */
+ struct _xmlDtd *parent; /* -> DTD */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ xmlElementTypeVal etype; /* The type */
+ xmlElementContentPtr content; /* the allowed element content */
+ xmlAttributePtr attributes; /* List of the declared attributes */
+ const xmlChar *prefix; /* the namespace prefix if any */
+#ifdef LIBXML_REGEXP_ENABLED
+ xmlRegexpPtr contModel; /* the validating regexp */
+#else
+ void *contModel;
+#endif
+};
+
+
+/**
+ * XML_LOCAL_NAMESPACE:
+ *
+ * A namespace declaration node.
+ */
+#define XML_LOCAL_NAMESPACE XML_NAMESPACE_DECL
+typedef xmlElementType xmlNsType;
+
+/**
+ * xmlNs:
+ *
+ * An XML namespace.
+ * Note that prefix == NULL is valid, it defines the default namespace
+ * within the subtree (until overridden).
+ *
+ * xmlNsType is unified with xmlElementType.
+ */
+
+typedef struct _xmlNs xmlNs;
+typedef xmlNs *xmlNsPtr;
+struct _xmlNs {
+ struct _xmlNs *next; /* next Ns link for this node */
+ xmlNsType type; /* global or local */
+ const xmlChar *href; /* URL for the namespace */
+ const xmlChar *prefix; /* prefix for the namespace */
+ void *_private; /* application data */
+ struct _xmlDoc *context; /* normally an xmlDoc */
+};
+
+/**
+ * xmlDtd:
+ *
+ * An XML DTD, as defined by <!DOCTYPE ... There is actually one for
+ * the internal subset and for the external subset.
+ */
+typedef struct _xmlDtd xmlDtd;
+typedef xmlDtd *xmlDtdPtr;
+struct _xmlDtd {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_DTD_NODE, must be second ! */
+ const xmlChar *name; /* Name of the DTD */
+ struct _xmlNode *children; /* the value of the property link */
+ struct _xmlNode *last; /* last child link */
+ struct _xmlDoc *parent; /* child->parent link */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ /* End of common part */
+ void *notations; /* Hash table for notations if any */
+ void *elements; /* Hash table for elements if any */
+ void *attributes; /* Hash table for attributes if any */
+ void *entities; /* Hash table for entities if any */
+ const xmlChar *ExternalID; /* External identifier for PUBLIC DTD */
+ const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC DTD */
+ void *pentities; /* Hash table for param entities if any */
+};
+
+/**
+ * xmlAttr:
+ *
+ * An attribute on an XML node.
+ */
+typedef struct _xmlAttr xmlAttr;
+typedef xmlAttr *xmlAttrPtr;
+struct _xmlAttr {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_ATTRIBUTE_NODE, must be second ! */
+ const xmlChar *name; /* the name of the property */
+ struct _xmlNode *children; /* the value of the property */
+ struct _xmlNode *last; /* NULL */
+ struct _xmlNode *parent; /* child->parent link */
+ struct _xmlAttr *next; /* next sibling link */
+ struct _xmlAttr *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+ xmlNs *ns; /* pointer to the associated namespace */
+ xmlAttributeType atype; /* the attribute type if validating */
+ void *psvi; /* for type/PSVI informations */
+};
+
+/**
+ * xmlID:
+ *
+ * An XML ID instance.
+ */
+
+typedef struct _xmlID xmlID;
+typedef xmlID *xmlIDPtr;
+struct _xmlID {
+ struct _xmlID *next; /* next ID */
+ const xmlChar *value; /* The ID name */
+ xmlAttrPtr attr; /* The attribute holding it */
+ const xmlChar *name; /* The attribute if attr is not available */
+ int lineno; /* The line number if attr is not available */
+ struct _xmlDoc *doc; /* The document holding the ID */
+};
+
+/**
+ * xmlRef:
+ *
+ * An XML IDREF instance.
+ */
+
+typedef struct _xmlRef xmlRef;
+typedef xmlRef *xmlRefPtr;
+struct _xmlRef {
+ struct _xmlRef *next; /* next Ref */
+ const xmlChar *value; /* The Ref name */
+ xmlAttrPtr attr; /* The attribute holding it */
+ const xmlChar *name; /* The attribute if attr is not available */
+ int lineno; /* The line number if attr is not available */
+};
+
+/**
+ * xmlNode:
+ *
+ * A node in an XML tree.
+ */
+typedef struct _xmlNode xmlNode;
+typedef xmlNode *xmlNodePtr;
+struct _xmlNode {
+ void *_private; /* application data */
+ xmlElementType type; /* type number, must be second ! */
+ const xmlChar *name; /* the name of the node, or the entity */
+ struct _xmlNode *children; /* parent->childs link */
+ struct _xmlNode *last; /* last child link */
+ struct _xmlNode *parent; /* child->parent link */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ /* End of common part */
+ xmlNs *ns; /* pointer to the associated namespace */
+ xmlChar *content; /* the content */
+ struct _xmlAttr *properties;/* properties list */
+ xmlNs *nsDef; /* namespace definitions on this node */
+ void *psvi; /* for type/PSVI informations */
+ unsigned short line; /* line number */
+ unsigned short extra; /* extra data for XPath/XSLT */
+};
+
+/**
+ * XML_GET_CONTENT:
+ *
+ * Macro to extract the content pointer of a node.
+ */
+#define XML_GET_CONTENT(n) \
+ ((n)->type == XML_ELEMENT_NODE ? NULL : (n)->content)
+
+/**
+ * XML_GET_LINE:
+ *
+ * Macro to extract the line number of an element node.
+ */
+#define XML_GET_LINE(n) \
+ (xmlGetLineNo(n))
+
+/**
+ * xmlDocProperty
+ *
+ * Set of properties of the document as found by the parser
+ * Some of them are linked to similary named xmlParserOption
+ */
+typedef enum {
+ XML_DOC_WELLFORMED = 1<<0, /* document is XML well formed */
+ XML_DOC_NSVALID = 1<<1, /* document is Namespace valid */
+ XML_DOC_OLD10 = 1<<2, /* parsed with old XML-1.0 parser */
+ XML_DOC_DTDVALID = 1<<3, /* DTD validation was successful */
+ XML_DOC_XINCLUDE = 1<<4, /* XInclude substitution was done */
+ XML_DOC_USERBUILT = 1<<5, /* Document was built using the API
+ and not by parsing an instance */
+ XML_DOC_INTERNAL = 1<<6, /* built for internal processing */
+ XML_DOC_HTML = 1<<7 /* parsed or built HTML document */
+} xmlDocProperties;
+
+/**
+ * xmlDoc:
+ *
+ * An XML document.
+ */
+typedef struct _xmlDoc xmlDoc;
+typedef xmlDoc *xmlDocPtr;
+struct _xmlDoc {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */
+ char *name; /* name/filename/URI of the document */
+ struct _xmlNode *children; /* the document tree */
+ struct _xmlNode *last; /* last child link */
+ struct _xmlNode *parent; /* child->parent link */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* autoreference to itself */
+
+ /* End of common part */
+ int compression;/* level of zlib compression */
+ int standalone; /* standalone document (no external refs)
+ 1 if standalone="yes"
+ 0 if standalone="no"
+ -1 if there is no XML declaration
+ -2 if there is an XML declaration, but no
+ standalone attribute was specified */
+ struct _xmlDtd *intSubset; /* the document internal subset */
+ struct _xmlDtd *extSubset; /* the document external subset */
+ struct _xmlNs *oldNs; /* Global namespace, the old way */
+ const xmlChar *version; /* the XML version string */
+ const xmlChar *encoding; /* external initial encoding, if any */
+ void *ids; /* Hash table for ID attributes if any */
+ void *refs; /* Hash table for IDREFs attributes if any */
+ const xmlChar *URL; /* The URI for that document */
+ int charset; /* encoding of the in-memory content
+ actually an xmlCharEncoding */
+ struct _xmlDict *dict; /* dict used to allocate names or NULL */
+ void *psvi; /* for type/PSVI informations */
+ int parseFlags; /* set of xmlParserOption used to parse the
+ document */
+ int properties; /* set of xmlDocProperties for this document
+ set at the end of parsing */
+};
+
+
+typedef struct _xmlDOMWrapCtxt xmlDOMWrapCtxt;
+typedef xmlDOMWrapCtxt *xmlDOMWrapCtxtPtr;
+
+/**
+ * xmlDOMWrapAcquireNsFunction:
+ * @ctxt: a DOM wrapper context
+ * @node: the context node (element or attribute)
+ * @nsName: the requested namespace name
+ * @nsPrefix: the requested namespace prefix
+ *
+ * A function called to acquire namespaces (xmlNs) from the wrapper.
+ *
+ * Returns an xmlNsPtr or NULL in case of an error.
+ */
+typedef xmlNsPtr (*xmlDOMWrapAcquireNsFunction) (xmlDOMWrapCtxtPtr ctxt,
+ xmlNodePtr node,
+ const xmlChar *nsName,
+ const xmlChar *nsPrefix);
+
+/**
+ * xmlDOMWrapCtxt:
+ *
+ * Context for DOM wrapper-operations.
+ */
+struct _xmlDOMWrapCtxt {
+ void * _private;
+ /*
+ * The type of this context, just in case we need specialized
+ * contexts in the future.
+ */
+ int type;
+ /*
+ * Internal namespace map used for various operations.
+ */
+ void * namespaceMap;
+ /*
+ * Use this one to acquire an xmlNsPtr intended for node->ns.
+ * (Note that this is not intended for elem->nsDef).
+ */
+ xmlDOMWrapAcquireNsFunction getNsForNodeFunc;
+};
+
+/**
+ * xmlChildrenNode:
+ *
+ * Macro for compatibility naming layer with libxml1. Maps
+ * to "children."
+ */
+#ifndef xmlChildrenNode
+#define xmlChildrenNode children
+#endif
+
+/**
+ * xmlRootNode:
+ *
+ * Macro for compatibility naming layer with libxml1. Maps
+ * to "children".
+ */
+#ifndef xmlRootNode
+#define xmlRootNode children
+#endif
+
+/*
+ * Variables.
+ */
+
+/*
+ * Some helper functions
+ */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+XMLPUBFUN int XMLCALL
+ xmlValidateNCName (const xmlChar *value,
+ int space);
+#endif
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN int XMLCALL
+ xmlValidateQName (const xmlChar *value,
+ int space);
+XMLPUBFUN int XMLCALL
+ xmlValidateName (const xmlChar *value,
+ int space);
+XMLPUBFUN int XMLCALL
+ xmlValidateNMToken (const xmlChar *value,
+ int space);
+#endif
+
+XMLPUBFUN xmlChar * XMLCALL
+ xmlBuildQName (const xmlChar *ncname,
+ const xmlChar *prefix,
+ xmlChar *memory,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlSplitQName2 (const xmlChar *name,
+ xmlChar **prefix);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlSplitQName3 (const xmlChar *name,
+ int *len);
+
+/*
+ * Handling Buffers.
+ */
+
+XMLPUBFUN void XMLCALL
+ xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme);
+XMLPUBFUN xmlBufferAllocationScheme XMLCALL
+ xmlGetBufferAllocationScheme(void);
+
+XMLPUBFUN xmlBufferPtr XMLCALL
+ xmlBufferCreate (void);
+XMLPUBFUN xmlBufferPtr XMLCALL
+ xmlBufferCreateSize (size_t size);
+XMLPUBFUN xmlBufferPtr XMLCALL
+ xmlBufferCreateStatic (void *mem,
+ size_t size);
+XMLPUBFUN int XMLCALL
+ xmlBufferResize (xmlBufferPtr buf,
+ unsigned int size);
+XMLPUBFUN void XMLCALL
+ xmlBufferFree (xmlBufferPtr buf);
+XMLPUBFUN int XMLCALL
+ xmlBufferDump (FILE *file,
+ xmlBufferPtr buf);
+XMLPUBFUN int XMLCALL
+ xmlBufferAdd (xmlBufferPtr buf,
+ const xmlChar *str,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlBufferAddHead (xmlBufferPtr buf,
+ const xmlChar *str,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlBufferCat (xmlBufferPtr buf,
+ const xmlChar *str);
+XMLPUBFUN int XMLCALL
+ xmlBufferCCat (xmlBufferPtr buf,
+ const char *str);
+XMLPUBFUN int XMLCALL
+ xmlBufferShrink (xmlBufferPtr buf,
+ unsigned int len);
+XMLPUBFUN int XMLCALL
+ xmlBufferGrow (xmlBufferPtr buf,
+ unsigned int len);
+XMLPUBFUN void XMLCALL
+ xmlBufferEmpty (xmlBufferPtr buf);
+XMLPUBFUN const xmlChar* XMLCALL
+ xmlBufferContent (const xmlBufferPtr buf);
+XMLPUBFUN void XMLCALL
+ xmlBufferSetAllocationScheme(xmlBufferPtr buf,
+ xmlBufferAllocationScheme scheme);
+XMLPUBFUN int XMLCALL
+ xmlBufferLength (const xmlBufferPtr buf);
+
+/*
+ * Creating/freeing new structures.
+ */
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlCreateIntSubset (xmlDocPtr doc,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlNewDtd (xmlDocPtr doc,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlGetIntSubset (xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlFreeDtd (xmlDtdPtr cur);
+#ifdef LIBXML_LEGACY_ENABLED
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlNewGlobalNs (xmlDocPtr doc,
+ const xmlChar *href,
+ const xmlChar *prefix);
+#endif /* LIBXML_LEGACY_ENABLED */
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlNewNs (xmlNodePtr node,
+ const xmlChar *href,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ xmlFreeNs (xmlNsPtr cur);
+XMLPUBFUN void XMLCALL
+ xmlFreeNsList (xmlNsPtr cur);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlNewDoc (const xmlChar *version);
+XMLPUBFUN void XMLCALL
+ xmlFreeDoc (xmlDocPtr cur);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlNewDocProp (xmlDocPtr doc,
+ const xmlChar *name,
+ const xmlChar *value);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
+ defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlNewProp (xmlNodePtr node,
+ const xmlChar *name,
+ const xmlChar *value);
+#endif
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlNewNsProp (xmlNodePtr node,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlNewNsPropEatName (xmlNodePtr node,
+ xmlNsPtr ns,
+ xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ xmlFreePropList (xmlAttrPtr cur);
+XMLPUBFUN void XMLCALL
+ xmlFreeProp (xmlAttrPtr cur);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlCopyProp (xmlNodePtr target,
+ xmlAttrPtr cur);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlCopyPropList (xmlNodePtr target,
+ xmlAttrPtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlCopyDtd (xmlDtdPtr dtd);
+#endif /* LIBXML_TREE_ENABLED */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCopyDoc (xmlDocPtr doc,
+ int recursive);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+/*
+ * Creating new nodes.
+ */
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocNode (xmlDocPtr doc,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocNodeEatName (xmlDocPtr doc,
+ xmlNsPtr ns,
+ xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewNode (xmlNsPtr ns,
+ const xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewNodeEatName (xmlNsPtr ns,
+ xmlChar *name);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewChild (xmlNodePtr parent,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *content);
+#endif
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocText (xmlDocPtr doc,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewText (const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocPI (xmlDocPtr doc,
+ const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewPI (const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocTextLen (xmlDocPtr doc,
+ const xmlChar *content,
+ int len);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewTextLen (const xmlChar *content,
+ int len);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocComment (xmlDocPtr doc,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewComment (const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewCDataBlock (xmlDocPtr doc,
+ const xmlChar *content,
+ int len);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewCharRef (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewReference (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlCopyNode (const xmlNodePtr node,
+ int recursive);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlDocCopyNode (const xmlNodePtr node,
+ xmlDocPtr doc,
+ int recursive);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlDocCopyNodeList (xmlDocPtr doc,
+ const xmlNodePtr node);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlCopyNodeList (const xmlNodePtr node);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewTextChild (xmlNodePtr parent,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocRawNode (xmlDocPtr doc,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocFragment (xmlDocPtr doc);
+#endif /* LIBXML_TREE_ENABLED */
+
+/*
+ * Navigating.
+ */
+XMLPUBFUN long XMLCALL
+ xmlGetLineNo (xmlNodePtr node);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
+XMLPUBFUN xmlChar * XMLCALL
+ xmlGetNodePath (xmlNodePtr node);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlDocGetRootElement (xmlDocPtr doc);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlGetLastChild (xmlNodePtr parent);
+XMLPUBFUN int XMLCALL
+ xmlNodeIsText (xmlNodePtr node);
+XMLPUBFUN int XMLCALL
+ xmlIsBlankNode (xmlNodePtr node);
+
+/*
+ * Changing the structure.
+ */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlDocSetRootElement (xmlDocPtr doc,
+ xmlNodePtr root);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlNodeSetName (xmlNodePtr cur,
+ const xmlChar *name);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddChild (xmlNodePtr parent,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddChildList (xmlNodePtr parent,
+ xmlNodePtr cur);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlReplaceNode (xmlNodePtr old,
+ xmlNodePtr cur);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
+ defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddPrevSibling (xmlNodePtr cur,
+ xmlNodePtr elem);
+#endif /* LIBXML_TREE_ENABLED || LIBXML_HTML_ENABLED || LIBXML_SCHEMAS_ENABLED */
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddSibling (xmlNodePtr cur,
+ xmlNodePtr elem);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddNextSibling (xmlNodePtr cur,
+ xmlNodePtr elem);
+XMLPUBFUN void XMLCALL
+ xmlUnlinkNode (xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlTextMerge (xmlNodePtr first,
+ xmlNodePtr second);
+XMLPUBFUN int XMLCALL
+ xmlTextConcat (xmlNodePtr node,
+ const xmlChar *content,
+ int len);
+XMLPUBFUN void XMLCALL
+ xmlFreeNodeList (xmlNodePtr cur);
+XMLPUBFUN void XMLCALL
+ xmlFreeNode (xmlNodePtr cur);
+XMLPUBFUN void XMLCALL
+ xmlSetTreeDoc (xmlNodePtr tree,
+ xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlSetListDoc (xmlNodePtr list,
+ xmlDocPtr doc);
+/*
+ * Namespaces.
+ */
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlSearchNs (xmlDocPtr doc,
+ xmlNodePtr node,
+ const xmlChar *nameSpace);
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlSearchNsByHref (xmlDocPtr doc,
+ xmlNodePtr node,
+ const xmlChar *href);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlNsPtr * XMLCALL
+ xmlGetNsList (xmlDocPtr doc,
+ xmlNodePtr node);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) */
+
+XMLPUBFUN void XMLCALL
+ xmlSetNs (xmlNodePtr node,
+ xmlNsPtr ns);
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlCopyNamespace (xmlNsPtr cur);
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlCopyNamespaceList (xmlNsPtr cur);
+
+/*
+ * Changing the content.
+ */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlSetProp (xmlNodePtr node,
+ const xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlSetNsProp (xmlNodePtr node,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *value);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlGetNoNsProp (xmlNodePtr node,
+ const xmlChar *name);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlGetProp (xmlNodePtr node,
+ const xmlChar *name);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlHasProp (xmlNodePtr node,
+ const xmlChar *name);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlHasNsProp (xmlNodePtr node,
+ const xmlChar *name,
+ const xmlChar *nameSpace);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlGetNsProp (xmlNodePtr node,
+ const xmlChar *name,
+ const xmlChar *nameSpace);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlStringGetNodeList (xmlDocPtr doc,
+ const xmlChar *value);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlStringLenGetNodeList (xmlDocPtr doc,
+ const xmlChar *value,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeListGetString (xmlDocPtr doc,
+ xmlNodePtr list,
+ int inLine);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeListGetRawString (xmlDocPtr doc,
+ xmlNodePtr list,
+ int inLine);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlNodeSetContent (xmlNodePtr cur,
+ const xmlChar *content);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlNodeSetContentLen (xmlNodePtr cur,
+ const xmlChar *content,
+ int len);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlNodeAddContent (xmlNodePtr cur,
+ const xmlChar *content);
+XMLPUBFUN void XMLCALL
+ xmlNodeAddContentLen (xmlNodePtr cur,
+ const xmlChar *content,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeGetContent (xmlNodePtr cur);
+XMLPUBFUN int XMLCALL
+ xmlNodeBufGetContent (xmlBufferPtr buffer,
+ xmlNodePtr cur);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeGetLang (xmlNodePtr cur);
+XMLPUBFUN int XMLCALL
+ xmlNodeGetSpacePreserve (xmlNodePtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlNodeSetLang (xmlNodePtr cur,
+ const xmlChar *lang);
+XMLPUBFUN void XMLCALL
+ xmlNodeSetSpacePreserve (xmlNodePtr cur,
+ int val);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeGetBase (xmlDocPtr doc,
+ xmlNodePtr cur);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+XMLPUBFUN void XMLCALL
+ xmlNodeSetBase (xmlNodePtr cur,
+ const xmlChar *uri);
+#endif
+
+/*
+ * Removing content.
+ */
+XMLPUBFUN int XMLCALL
+ xmlRemoveProp (xmlAttrPtr cur);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN int XMLCALL
+ xmlUnsetNsProp (xmlNodePtr node,
+ xmlNsPtr ns,
+ const xmlChar *name);
+XMLPUBFUN int XMLCALL
+ xmlUnsetProp (xmlNodePtr node,
+ const xmlChar *name);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+
+/*
+ * Internal, don't use.
+ */
+XMLPUBFUN void XMLCALL
+ xmlBufferWriteCHAR (xmlBufferPtr buf,
+ const xmlChar *string);
+XMLPUBFUN void XMLCALL
+ xmlBufferWriteChar (xmlBufferPtr buf,
+ const char *string);
+XMLPUBFUN void XMLCALL
+ xmlBufferWriteQuotedString(xmlBufferPtr buf,
+ const xmlChar *string);
+
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void xmlAttrSerializeTxtContent(xmlBufferPtr buf,
+ xmlDocPtr doc,
+ xmlAttrPtr attr,
+ const xmlChar *string);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#ifdef LIBXML_TREE_ENABLED
+/*
+ * Namespace handling.
+ */
+XMLPUBFUN int XMLCALL
+ xmlReconciliateNs (xmlDocPtr doc,
+ xmlNodePtr tree);
+#endif
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Saving.
+ */
+XMLPUBFUN void XMLCALL
+ xmlDocDumpFormatMemory (xmlDocPtr cur,
+ xmlChar **mem,
+ int *size,
+ int format);
+XMLPUBFUN void XMLCALL
+ xmlDocDumpMemory (xmlDocPtr cur,
+ xmlChar **mem,
+ int *size);
+XMLPUBFUN void XMLCALL
+ xmlDocDumpMemoryEnc (xmlDocPtr out_doc,
+ xmlChar **doc_txt_ptr,
+ int * doc_txt_len,
+ const char *txt_encoding);
+XMLPUBFUN void XMLCALL
+ xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc,
+ xmlChar **doc_txt_ptr,
+ int * doc_txt_len,
+ const char *txt_encoding,
+ int format);
+XMLPUBFUN int XMLCALL
+ xmlDocFormatDump (FILE *f,
+ xmlDocPtr cur,
+ int format);
+XMLPUBFUN int XMLCALL
+ xmlDocDump (FILE *f,
+ xmlDocPtr cur);
+XMLPUBFUN void XMLCALL
+ xmlElemDump (FILE *f,
+ xmlDocPtr doc,
+ xmlNodePtr cur);
+XMLPUBFUN int XMLCALL
+ xmlSaveFile (const char *filename,
+ xmlDocPtr cur);
+XMLPUBFUN int XMLCALL
+ xmlSaveFormatFile (const char *filename,
+ xmlDocPtr cur,
+ int format);
+XMLPUBFUN int XMLCALL
+ xmlNodeDump (xmlBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ int level,
+ int format);
+
+XMLPUBFUN int XMLCALL
+ xmlSaveFileTo (xmlOutputBufferPtr buf,
+ xmlDocPtr cur,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ xmlSaveFormatFileTo (xmlOutputBufferPtr buf,
+ xmlDocPtr cur,
+ const char *encoding,
+ int format);
+XMLPUBFUN void XMLCALL
+ xmlNodeDumpOutput (xmlOutputBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ int level,
+ int format,
+ const char *encoding);
+
+XMLPUBFUN int XMLCALL
+ xmlSaveFormatFileEnc (const char *filename,
+ xmlDocPtr cur,
+ const char *encoding,
+ int format);
+
+XMLPUBFUN int XMLCALL
+ xmlSaveFileEnc (const char *filename,
+ xmlDocPtr cur,
+ const char *encoding);
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+/*
+ * XHTML
+ */
+XMLPUBFUN int XMLCALL
+ xmlIsXHTML (const xmlChar *systemID,
+ const xmlChar *publicID);
+
+/*
+ * Compression.
+ */
+XMLPUBFUN int XMLCALL
+ xmlGetDocCompressMode (xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlSetDocCompressMode (xmlDocPtr doc,
+ int mode);
+XMLPUBFUN int XMLCALL
+ xmlGetCompressMode (void);
+XMLPUBFUN void XMLCALL
+ xmlSetCompressMode (int mode);
+
+/*
+* DOM-wrapper helper functions.
+*/
+XMLPUBFUN xmlDOMWrapCtxtPtr XMLCALL
+ xmlDOMWrapNewCtxt (void);
+XMLPUBFUN void XMLCALL
+ xmlDOMWrapFreeCtxt (xmlDOMWrapCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlDOMWrapReconcileNamespaces(xmlDOMWrapCtxtPtr ctxt,
+ xmlNodePtr elem,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlDOMWrapAdoptNode (xmlDOMWrapCtxtPtr ctxt,
+ xmlDocPtr sourceDoc,
+ xmlNodePtr node,
+ xmlDocPtr destDoc,
+ xmlNodePtr destParent,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlDOMWrapRemoveNode (xmlDOMWrapCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr node,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlDOMWrapCloneNode (xmlDOMWrapCtxtPtr ctxt,
+ xmlDocPtr sourceDoc,
+ xmlNodePtr node,
+ xmlNodePtr *clonedNode,
+ xmlDocPtr destDoc,
+ xmlNodePtr destParent,
+ int deep,
+ int options);
+
+#ifdef LIBXML_TREE_ENABLED
+/*
+ * 5 interfaces from DOM ElementTraversal, but different in entities
+ * traversal.
+ */
+XMLPUBFUN unsigned long XMLCALL
+ xmlChildElementCount (xmlNodePtr parent);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNextElementSibling (xmlNodePtr node);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlFirstElementChild (xmlNodePtr parent);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlLastElementChild (xmlNodePtr parent);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlPreviousElementSibling (xmlNodePtr node);
+#endif
+#ifdef __cplusplus
+}
+#endif
+#ifndef __XML_PARSER_H__
+#include <libxml/xmlmemory.h>
+#endif
+
+#endif /* __XML_TREE_H__ */
+
diff --git a/interfaces/ext/libxml/uri.h b/interfaces/ext/libxml/uri.h
new file mode 100644
index 0000000..db48262
--- /dev/null
+++ b/interfaces/ext/libxml/uri.h
@@ -0,0 +1,94 @@
+/**
+ * Summary: library of generic URI related routines
+ * Description: library of generic URI related routines
+ * Implements RFC 2396
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_URI_H__
+#define __XML_URI_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlURI:
+ *
+ * A parsed URI reference. This is a struct containing the various fields
+ * as described in RFC 2396 but separated for further processing.
+ *
+ * Note: query is a deprecated field which is incorrectly unescaped.
+ * query_raw takes precedence over query if the former is set.
+ * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00127
+ */
+typedef struct _xmlURI xmlURI;
+typedef xmlURI *xmlURIPtr;
+struct _xmlURI {
+ char *scheme; /* the URI scheme */
+ char *opaque; /* opaque part */
+ char *authority; /* the authority part */
+ char *server; /* the server part */
+ char *user; /* the user part */
+ int port; /* the port number */
+ char *path; /* the path string */
+ char *query; /* the query string (deprecated - use with caution) */
+ char *fragment; /* the fragment identifier */
+ int cleanup; /* parsing potentially unclean URI */
+ char *query_raw; /* the query string (as it appears in the URI) */
+};
+
+/*
+ * This function is in tree.h:
+ * xmlChar * xmlNodeGetBase (xmlDocPtr doc,
+ * xmlNodePtr cur);
+ */
+XMLPUBFUN xmlURIPtr XMLCALL
+ xmlCreateURI (void);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlBuildURI (const xmlChar *URI,
+ const xmlChar *base);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlBuildRelativeURI (const xmlChar *URI,
+ const xmlChar *base);
+XMLPUBFUN xmlURIPtr XMLCALL
+ xmlParseURI (const char *str);
+XMLPUBFUN xmlURIPtr XMLCALL
+ xmlParseURIRaw (const char *str,
+ int raw);
+XMLPUBFUN int XMLCALL
+ xmlParseURIReference (xmlURIPtr uri,
+ const char *str);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlSaveUri (xmlURIPtr uri);
+XMLPUBFUN void XMLCALL
+ xmlPrintURI (FILE *stream,
+ xmlURIPtr uri);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlURIEscapeStr (const xmlChar *str,
+ const xmlChar *list);
+XMLPUBFUN char * XMLCALL
+ xmlURIUnescapeString (const char *str,
+ int len,
+ char *target);
+XMLPUBFUN int XMLCALL
+ xmlNormalizeURIPath (char *path);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlURIEscape (const xmlChar *str);
+XMLPUBFUN void XMLCALL
+ xmlFreeURI (xmlURIPtr uri);
+XMLPUBFUN xmlChar* XMLCALL
+ xmlCanonicPath (const xmlChar *path);
+XMLPUBFUN xmlChar* XMLCALL
+ xmlPathToURI (const xmlChar *path);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_URI_H__ */
diff --git a/interfaces/ext/libxml/valid.h b/interfaces/ext/libxml/valid.h
new file mode 100644
index 0000000..f1892b0
--- /dev/null
+++ b/interfaces/ext/libxml/valid.h
@@ -0,0 +1,458 @@
+/*
+ * Summary: The DTD validation
+ * Description: API for the DTD handling and the validity checking
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_VALID_H__
+#define __XML_VALID_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlerror.h>
+#include <libxml/tree.h>
+#include <libxml/list.h>
+#include <libxml/xmlautomata.h>
+#include <libxml/xmlregexp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Validation state added for non-determinist content model.
+ */
+typedef struct _xmlValidState xmlValidState;
+typedef xmlValidState *xmlValidStatePtr;
+
+/**
+ * xmlValidityErrorFunc:
+ * @ctx: usually an xmlValidCtxtPtr to a validity error context,
+ * but comes from ctxt->userData (which normally contains such
+ * a pointer); ctxt->userData can be changed by the user.
+ * @msg: the string to format *printf like vararg
+ * @...: remaining arguments to the format
+ *
+ * Callback called when a validity error is found. This is a message
+ * oriented function similar to an *printf function.
+ */
+typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
+ const char *msg,
+ ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * xmlValidityWarningFunc:
+ * @ctx: usually an xmlValidCtxtPtr to a validity error context,
+ * but comes from ctxt->userData (which normally contains such
+ * a pointer); ctxt->userData can be changed by the user.
+ * @msg: the string to format *printf like vararg
+ * @...: remaining arguments to the format
+ *
+ * Callback called when a validity warning is found. This is a message
+ * oriented function similar to an *printf function.
+ */
+typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
+ const char *msg,
+ ...) ATTRIBUTE_PRINTF(2,3);
+
+#ifdef IN_LIBXML
+/**
+ * XML_CTXT_FINISH_DTD_0:
+ *
+ * Special value for finishDtd field when embedded in an xmlParserCtxt
+ */
+#define XML_CTXT_FINISH_DTD_0 0xabcd1234
+/**
+ * XML_CTXT_FINISH_DTD_1:
+ *
+ * Special value for finishDtd field when embedded in an xmlParserCtxt
+ */
+#define XML_CTXT_FINISH_DTD_1 0xabcd1235
+#endif
+
+/*
+ * xmlValidCtxt:
+ * An xmlValidCtxt is used for error reporting when validating.
+ */
+typedef struct _xmlValidCtxt xmlValidCtxt;
+typedef xmlValidCtxt *xmlValidCtxtPtr;
+struct _xmlValidCtxt {
+ void *userData; /* user specific data block */
+ xmlValidityErrorFunc error; /* the callback in case of errors */
+ xmlValidityWarningFunc warning; /* the callback in case of warning */
+
+ /* Node analysis stack used when validating within entities */
+ xmlNodePtr node; /* Current parsed Node */
+ int nodeNr; /* Depth of the parsing stack */
+ int nodeMax; /* Max depth of the parsing stack */
+ xmlNodePtr *nodeTab; /* array of nodes */
+
+ unsigned int finishDtd; /* finished validating the Dtd ? */
+ xmlDocPtr doc; /* the document */
+ int valid; /* temporary validity check result */
+
+ /* state state used for non-determinist content validation */
+ xmlValidState *vstate; /* current state */
+ int vstateNr; /* Depth of the validation stack */
+ int vstateMax; /* Max depth of the validation stack */
+ xmlValidState *vstateTab; /* array of validation states */
+
+#ifdef LIBXML_REGEXP_ENABLED
+ xmlAutomataPtr am; /* the automata */
+ xmlAutomataStatePtr state; /* used to build the automata */
+#else
+ void *am;
+ void *state;
+#endif
+};
+
+/*
+ * ALL notation declarations are stored in a table.
+ * There is one table per DTD.
+ */
+
+typedef struct _xmlHashTable xmlNotationTable;
+typedef xmlNotationTable *xmlNotationTablePtr;
+
+/*
+ * ALL element declarations are stored in a table.
+ * There is one table per DTD.
+ */
+
+typedef struct _xmlHashTable xmlElementTable;
+typedef xmlElementTable *xmlElementTablePtr;
+
+/*
+ * ALL attribute declarations are stored in a table.
+ * There is one table per DTD.
+ */
+
+typedef struct _xmlHashTable xmlAttributeTable;
+typedef xmlAttributeTable *xmlAttributeTablePtr;
+
+/*
+ * ALL IDs attributes are stored in a table.
+ * There is one table per document.
+ */
+
+typedef struct _xmlHashTable xmlIDTable;
+typedef xmlIDTable *xmlIDTablePtr;
+
+/*
+ * ALL Refs attributes are stored in a table.
+ * There is one table per document.
+ */
+
+typedef struct _xmlHashTable xmlRefTable;
+typedef xmlRefTable *xmlRefTablePtr;
+
+/* Notation */
+XMLPUBFUN xmlNotationPtr XMLCALL
+ xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
+ xmlDtdPtr dtd,
+ const xmlChar *name,
+ const xmlChar *PublicID,
+ const xmlChar *SystemID);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlNotationTablePtr XMLCALL
+ xmlCopyNotationTable (xmlNotationTablePtr table);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlFreeNotationTable (xmlNotationTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlDumpNotationDecl (xmlBufferPtr buf,
+ xmlNotationPtr nota);
+XMLPUBFUN void XMLCALL
+ xmlDumpNotationTable (xmlBufferPtr buf,
+ xmlNotationTablePtr table);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* Element Content */
+/* the non Doc version are being deprecated */
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlNewElementContent (const xmlChar *name,
+ xmlElementContentType type);
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlCopyElementContent (xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL
+ xmlFreeElementContent (xmlElementContentPtr cur);
+/* the new versions with doc argument */
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlNewDocElementContent (xmlDocPtr doc,
+ const xmlChar *name,
+ xmlElementContentType type);
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlCopyDocElementContent(xmlDocPtr doc,
+ xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL
+ xmlFreeDocElementContent(xmlDocPtr doc,
+ xmlElementContentPtr cur);
+XMLPUBFUN void XMLCALL
+ xmlSnprintfElementContent(char *buf,
+ int size,
+ xmlElementContentPtr content,
+ int englob);
+#ifdef LIBXML_OUTPUT_ENABLED
+/* DEPRECATED */
+XMLPUBFUN void XMLCALL
+ xmlSprintfElementContent(char *buf,
+ xmlElementContentPtr content,
+ int englob);
+#endif /* LIBXML_OUTPUT_ENABLED */
+/* DEPRECATED */
+
+/* Element */
+XMLPUBFUN xmlElementPtr XMLCALL
+ xmlAddElementDecl (xmlValidCtxtPtr ctxt,
+ xmlDtdPtr dtd,
+ const xmlChar *name,
+ xmlElementTypeVal type,
+ xmlElementContentPtr content);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlElementTablePtr XMLCALL
+ xmlCopyElementTable (xmlElementTablePtr table);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlFreeElementTable (xmlElementTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlDumpElementTable (xmlBufferPtr buf,
+ xmlElementTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlDumpElementDecl (xmlBufferPtr buf,
+ xmlElementPtr elem);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* Enumeration */
+XMLPUBFUN xmlEnumerationPtr XMLCALL
+ xmlCreateEnumeration (const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ xmlFreeEnumeration (xmlEnumerationPtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlEnumerationPtr XMLCALL
+ xmlCopyEnumeration (xmlEnumerationPtr cur);
+#endif /* LIBXML_TREE_ENABLED */
+
+/* Attribute */
+XMLPUBFUN xmlAttributePtr XMLCALL
+ xmlAddAttributeDecl (xmlValidCtxtPtr ctxt,
+ xmlDtdPtr dtd,
+ const xmlChar *elem,
+ const xmlChar *name,
+ const xmlChar *ns,
+ xmlAttributeType type,
+ xmlAttributeDefault def,
+ const xmlChar *defaultValue,
+ xmlEnumerationPtr tree);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlAttributeTablePtr XMLCALL
+ xmlCopyAttributeTable (xmlAttributeTablePtr table);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlFreeAttributeTable (xmlAttributeTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlDumpAttributeTable (xmlBufferPtr buf,
+ xmlAttributeTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlDumpAttributeDecl (xmlBufferPtr buf,
+ xmlAttributePtr attr);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* IDs */
+XMLPUBFUN xmlIDPtr XMLCALL
+ xmlAddID (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ const xmlChar *value,
+ xmlAttrPtr attr);
+XMLPUBFUN void XMLCALL
+ xmlFreeIDTable (xmlIDTablePtr table);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlGetID (xmlDocPtr doc,
+ const xmlChar *ID);
+XMLPUBFUN int XMLCALL
+ xmlIsID (xmlDocPtr doc,
+ xmlNodePtr elem,
+ xmlAttrPtr attr);
+XMLPUBFUN int XMLCALL
+ xmlRemoveID (xmlDocPtr doc,
+ xmlAttrPtr attr);
+
+/* IDREFs */
+XMLPUBFUN xmlRefPtr XMLCALL
+ xmlAddRef (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ const xmlChar *value,
+ xmlAttrPtr attr);
+XMLPUBFUN void XMLCALL
+ xmlFreeRefTable (xmlRefTablePtr table);
+XMLPUBFUN int XMLCALL
+ xmlIsRef (xmlDocPtr doc,
+ xmlNodePtr elem,
+ xmlAttrPtr attr);
+XMLPUBFUN int XMLCALL
+ xmlRemoveRef (xmlDocPtr doc,
+ xmlAttrPtr attr);
+XMLPUBFUN xmlListPtr XMLCALL
+ xmlGetRefs (xmlDocPtr doc,
+ const xmlChar *ID);
+
+/**
+ * The public function calls related to validity checking.
+ */
+#ifdef LIBXML_VALID_ENABLED
+/* Allocate/Release Validation Contexts */
+XMLPUBFUN xmlValidCtxtPtr XMLCALL
+ xmlNewValidCtxt(void);
+XMLPUBFUN void XMLCALL
+ xmlFreeValidCtxt(xmlValidCtxtPtr);
+
+XMLPUBFUN int XMLCALL
+ xmlValidateRoot (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlElementPtr elem);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlValidNormalizeAttributeValue(xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlAttributePtr attr);
+XMLPUBFUN int XMLCALL
+ xmlValidateAttributeValue(xmlAttributeType type,
+ const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNotationPtr nota);
+XMLPUBFUN int XMLCALL
+ xmlValidateDtd (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlDtdPtr dtd);
+XMLPUBFUN int XMLCALL
+ xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlValidateDocument (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlValidateElement (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ xmlValidateOneElement (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ xmlAttrPtr attr,
+ const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *prefix,
+ xmlNsPtr ns,
+ const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+#endif /* LIBXML_VALID_ENABLED */
+
+#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN int XMLCALL
+ xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ const xmlChar *notationName);
+#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
+
+XMLPUBFUN int XMLCALL
+ xmlIsMixedElement (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlAttributePtr XMLCALL
+ xmlGetDtdAttrDesc (xmlDtdPtr dtd,
+ const xmlChar *elem,
+ const xmlChar *name);
+XMLPUBFUN xmlAttributePtr XMLCALL
+ xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
+ const xmlChar *elem,
+ const xmlChar *name,
+ const xmlChar *prefix);
+XMLPUBFUN xmlNotationPtr XMLCALL
+ xmlGetDtdNotationDesc (xmlDtdPtr dtd,
+ const xmlChar *name);
+XMLPUBFUN xmlElementPtr XMLCALL
+ xmlGetDtdQElementDesc (xmlDtdPtr dtd,
+ const xmlChar *name,
+ const xmlChar *prefix);
+XMLPUBFUN xmlElementPtr XMLCALL
+ xmlGetDtdElementDesc (xmlDtdPtr dtd,
+ const xmlChar *name);
+
+#ifdef LIBXML_VALID_ENABLED
+
+XMLPUBFUN int XMLCALL
+ xmlValidGetPotentialChildren(xmlElementContent *ctree,
+ const xmlChar **names,
+ int *len,
+ int max);
+
+XMLPUBFUN int XMLCALL
+ xmlValidGetValidElements(xmlNode *prev,
+ xmlNode *next,
+ const xmlChar **names,
+ int max);
+XMLPUBFUN int XMLCALL
+ xmlValidateNameValue (const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateNamesValue (const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateNmtokenValue (const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateNmtokensValue(const xmlChar *value);
+
+#ifdef LIBXML_REGEXP_ENABLED
+/*
+ * Validation based on the regexp support
+ */
+XMLPUBFUN int XMLCALL
+ xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
+ xmlElementPtr elem);
+
+XMLPUBFUN int XMLCALL
+ xmlValidatePushElement (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *qname);
+XMLPUBFUN int XMLCALL
+ xmlValidatePushCData (xmlValidCtxtPtr ctxt,
+ const xmlChar *data,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlValidatePopElement (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *qname);
+#endif /* LIBXML_REGEXP_ENABLED */
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_VALID_H__ */
diff --git a/interfaces/ext/libxml/xinclude.h b/interfaces/ext/libxml/xinclude.h
new file mode 100644
index 0000000..ba9c9b5
--- /dev/null
+++ b/interfaces/ext/libxml/xinclude.h
@@ -0,0 +1,125 @@
+/*
+ * Summary: implementation of XInclude
+ * Description: API to handle XInclude processing,
+ * implements the
+ * World Wide Web Consortium Last Call Working Draft 10 November 2003
+ * http://www.w3.org/TR/2003/WD-xinclude-20031110
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XINCLUDE_H__
+#define __XML_XINCLUDE_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * XINCLUDE_NS:
+ *
+ * Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude
+ */
+#define XINCLUDE_NS (const xmlChar *) "http://www.w3.org/2003/XInclude"
+/**
+ * XINCLUDE_OLD_NS:
+ *
+ * Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude
+ */
+#define XINCLUDE_OLD_NS (const xmlChar *) "http://www.w3.org/2001/XInclude"
+/**
+ * XINCLUDE_NODE:
+ *
+ * Macro defining "include"
+ */
+#define XINCLUDE_NODE (const xmlChar *) "include"
+/**
+ * XINCLUDE_FALLBACK:
+ *
+ * Macro defining "fallback"
+ */
+#define XINCLUDE_FALLBACK (const xmlChar *) "fallback"
+/**
+ * XINCLUDE_HREF:
+ *
+ * Macro defining "href"
+ */
+#define XINCLUDE_HREF (const xmlChar *) "href"
+/**
+ * XINCLUDE_PARSE:
+ *
+ * Macro defining "parse"
+ */
+#define XINCLUDE_PARSE (const xmlChar *) "parse"
+/**
+ * XINCLUDE_PARSE_XML:
+ *
+ * Macro defining "xml"
+ */
+#define XINCLUDE_PARSE_XML (const xmlChar *) "xml"
+/**
+ * XINCLUDE_PARSE_TEXT:
+ *
+ * Macro defining "text"
+ */
+#define XINCLUDE_PARSE_TEXT (const xmlChar *) "text"
+/**
+ * XINCLUDE_PARSE_ENCODING:
+ *
+ * Macro defining "encoding"
+ */
+#define XINCLUDE_PARSE_ENCODING (const xmlChar *) "encoding"
+/**
+ * XINCLUDE_PARSE_XPOINTER:
+ *
+ * Macro defining "xpointer"
+ */
+#define XINCLUDE_PARSE_XPOINTER (const xmlChar *) "xpointer"
+
+typedef struct _xmlXIncludeCtxt xmlXIncludeCtxt;
+typedef xmlXIncludeCtxt *xmlXIncludeCtxtPtr;
+
+/*
+ * standalone processing
+ */
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcess (xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcessFlags (xmlDocPtr doc,
+ int flags);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcessFlagsData(xmlDocPtr doc,
+ int flags,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcessTree (xmlNodePtr tree);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcessTreeFlags(xmlNodePtr tree,
+ int flags);
+/*
+ * contextual processing
+ */
+XMLPUBFUN xmlXIncludeCtxtPtr XMLCALL
+ xmlXIncludeNewContext (xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeSetFlags (xmlXIncludeCtxtPtr ctxt,
+ int flags);
+XMLPUBFUN void XMLCALL
+ xmlXIncludeFreeContext (xmlXIncludeCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcessNode (xmlXIncludeCtxtPtr ctxt,
+ xmlNodePtr tree);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XINCLUDE_ENABLED */
+
+#endif /* __XML_XINCLUDE_H__ */
diff --git a/interfaces/ext/libxml/xlink.h b/interfaces/ext/libxml/xlink.h
new file mode 100644
index 0000000..083c7ed
--- /dev/null
+++ b/interfaces/ext/libxml/xlink.h
@@ -0,0 +1,189 @@
+/*
+ * Summary: unfinished XLink detection module
+ * Description: unfinished XLink detection module
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XLINK_H__
+#define __XML_XLINK_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_XPTR_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Various defines for the various Link properties.
+ *
+ * NOTE: the link detection layer will try to resolve QName expansion
+ * of namespaces. If "foo" is the prefix for "http://foo.com/"
+ * then the link detection layer will expand role="foo:myrole"
+ * to "http://foo.com/:myrole".
+ * NOTE: the link detection layer will expand URI-Refences found on
+ * href attributes by using the base mechanism if found.
+ */
+typedef xmlChar *xlinkHRef;
+typedef xmlChar *xlinkRole;
+typedef xmlChar *xlinkTitle;
+
+typedef enum {
+ XLINK_TYPE_NONE = 0,
+ XLINK_TYPE_SIMPLE,
+ XLINK_TYPE_EXTENDED,
+ XLINK_TYPE_EXTENDED_SET
+} xlinkType;
+
+typedef enum {
+ XLINK_SHOW_NONE = 0,
+ XLINK_SHOW_NEW,
+ XLINK_SHOW_EMBED,
+ XLINK_SHOW_REPLACE
+} xlinkShow;
+
+typedef enum {
+ XLINK_ACTUATE_NONE = 0,
+ XLINK_ACTUATE_AUTO,
+ XLINK_ACTUATE_ONREQUEST
+} xlinkActuate;
+
+/**
+ * xlinkNodeDetectFunc:
+ * @ctx: user data pointer
+ * @node: the node to check
+ *
+ * This is the prototype for the link detection routine.
+ * It calls the default link detection callbacks upon link detection.
+ */
+typedef void (*xlinkNodeDetectFunc) (void *ctx, xmlNodePtr node);
+
+/*
+ * The link detection module interact with the upper layers using
+ * a set of callback registered at parsing time.
+ */
+
+/**
+ * xlinkSimpleLinkFunk:
+ * @ctx: user data pointer
+ * @node: the node carrying the link
+ * @href: the target of the link
+ * @role: the role string
+ * @title: the link title
+ *
+ * This is the prototype for a simple link detection callback.
+ */
+typedef void
+(*xlinkSimpleLinkFunk) (void *ctx,
+ xmlNodePtr node,
+ const xlinkHRef href,
+ const xlinkRole role,
+ const xlinkTitle title);
+
+/**
+ * xlinkExtendedLinkFunk:
+ * @ctx: user data pointer
+ * @node: the node carrying the link
+ * @nbLocators: the number of locators detected on the link
+ * @hrefs: pointer to the array of locator hrefs
+ * @roles: pointer to the array of locator roles
+ * @nbArcs: the number of arcs detected on the link
+ * @from: pointer to the array of source roles found on the arcs
+ * @to: pointer to the array of target roles found on the arcs
+ * @show: array of values for the show attributes found on the arcs
+ * @actuate: array of values for the actuate attributes found on the arcs
+ * @nbTitles: the number of titles detected on the link
+ * @title: array of titles detected on the link
+ * @langs: array of xml:lang values for the titles
+ *
+ * This is the prototype for a extended link detection callback.
+ */
+typedef void
+(*xlinkExtendedLinkFunk)(void *ctx,
+ xmlNodePtr node,
+ int nbLocators,
+ const xlinkHRef *hrefs,
+ const xlinkRole *roles,
+ int nbArcs,
+ const xlinkRole *from,
+ const xlinkRole *to,
+ xlinkShow *show,
+ xlinkActuate *actuate,
+ int nbTitles,
+ const xlinkTitle *titles,
+ const xmlChar **langs);
+
+/**
+ * xlinkExtendedLinkSetFunk:
+ * @ctx: user data pointer
+ * @node: the node carrying the link
+ * @nbLocators: the number of locators detected on the link
+ * @hrefs: pointer to the array of locator hrefs
+ * @roles: pointer to the array of locator roles
+ * @nbTitles: the number of titles detected on the link
+ * @title: array of titles detected on the link
+ * @langs: array of xml:lang values for the titles
+ *
+ * This is the prototype for a extended link set detection callback.
+ */
+typedef void
+(*xlinkExtendedLinkSetFunk) (void *ctx,
+ xmlNodePtr node,
+ int nbLocators,
+ const xlinkHRef *hrefs,
+ const xlinkRole *roles,
+ int nbTitles,
+ const xlinkTitle *titles,
+ const xmlChar **langs);
+
+/**
+ * This is the structure containing a set of Links detection callbacks.
+ *
+ * There is no default xlink callbacks, if one want to get link
+ * recognition activated, those call backs must be provided before parsing.
+ */
+typedef struct _xlinkHandler xlinkHandler;
+typedef xlinkHandler *xlinkHandlerPtr;
+struct _xlinkHandler {
+ xlinkSimpleLinkFunk simple;
+ xlinkExtendedLinkFunk extended;
+ xlinkExtendedLinkSetFunk set;
+};
+
+/*
+ * The default detection routine, can be overridden, they call the default
+ * detection callbacks.
+ */
+
+XMLPUBFUN xlinkNodeDetectFunc XMLCALL
+ xlinkGetDefaultDetect (void);
+XMLPUBFUN void XMLCALL
+ xlinkSetDefaultDetect (xlinkNodeDetectFunc func);
+
+/*
+ * Routines to set/get the default handlers.
+ */
+XMLPUBFUN xlinkHandlerPtr XMLCALL
+ xlinkGetDefaultHandler (void);
+XMLPUBFUN void XMLCALL
+ xlinkSetDefaultHandler (xlinkHandlerPtr handler);
+
+/*
+ * Link detection module itself.
+ */
+XMLPUBFUN xlinkType XMLCALL
+ xlinkIsLink (xmlDocPtr doc,
+ xmlNodePtr node);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XPTR_ENABLED */
+
+#endif /* __XML_XLINK_H__ */
diff --git a/interfaces/ext/libxml/xmlIO.h b/interfaces/ext/libxml/xmlIO.h
new file mode 100644
index 0000000..eea9ed6
--- /dev/null
+++ b/interfaces/ext/libxml/xmlIO.h
@@ -0,0 +1,360 @@
+/*
+ * Summary: interface for the I/O interfaces used by the parser
+ * Description: interface for the I/O interfaces used by the parser
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_IO_H__
+#define __XML_IO_H__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Those are the functions and datatypes for the parser input
+ * I/O structures.
+ */
+
+/**
+ * xmlInputMatchCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Input API to detect if the current handler
+ * can provide input fonctionnalities for this resource.
+ *
+ * Returns 1 if yes and 0 if another Input module should be used
+ */
+typedef int (XMLCALL *xmlInputMatchCallback) (char const *filename);
+/**
+ * xmlInputOpenCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Input API to open the resource
+ *
+ * Returns an Input context or NULL in case or error
+ */
+typedef void * (XMLCALL *xmlInputOpenCallback) (char const *filename);
+/**
+ * xmlInputReadCallback:
+ * @context: an Input context
+ * @buffer: the buffer to store data read
+ * @len: the length of the buffer in bytes
+ *
+ * Callback used in the I/O Input API to read the resource
+ *
+ * Returns the number of bytes read or -1 in case of error
+ */
+typedef int (XMLCALL *xmlInputReadCallback) (void * context, char * buffer, int len);
+/**
+ * xmlInputCloseCallback:
+ * @context: an Input context
+ *
+ * Callback used in the I/O Input API to close the resource
+ *
+ * Returns 0 or -1 in case of error
+ */
+typedef int (XMLCALL *xmlInputCloseCallback) (void * context);
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Those are the functions and datatypes for the library output
+ * I/O structures.
+ */
+
+/**
+ * xmlOutputMatchCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Output API to detect if the current handler
+ * can provide output fonctionnalities for this resource.
+ *
+ * Returns 1 if yes and 0 if another Output module should be used
+ */
+typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename);
+/**
+ * xmlOutputOpenCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Output API to open the resource
+ *
+ * Returns an Output context or NULL in case or error
+ */
+typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename);
+/**
+ * xmlOutputWriteCallback:
+ * @context: an Output context
+ * @buffer: the buffer of data to write
+ * @len: the length of the buffer in bytes
+ *
+ * Callback used in the I/O Output API to write to the resource
+ *
+ * Returns the number of bytes written or -1 in case of error
+ */
+typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer,
+ int len);
+/**
+ * xmlOutputCloseCallback:
+ * @context: an Output context
+ *
+ * Callback used in the I/O Output API to close the resource
+ *
+ * Returns 0 or -1 in case of error
+ */
+typedef int (XMLCALL *xmlOutputCloseCallback) (void * context);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <libxml/globals.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/encoding.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+struct _xmlParserInputBuffer {
+ void* context;
+ xmlInputReadCallback readcallback;
+ xmlInputCloseCallback closecallback;
+
+ xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
+
+ xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 */
+ xmlBufferPtr raw; /* if encoder != NULL buffer for raw input */
+ int compressed; /* -1=unknown, 0=not compressed, 1=compressed */
+ int error;
+ unsigned long rawconsumed;/* amount consumed from raw */
+};
+
+
+#ifdef LIBXML_OUTPUT_ENABLED
+struct _xmlOutputBuffer {
+ void* context;
+ xmlOutputWriteCallback writecallback;
+ xmlOutputCloseCallback closecallback;
+
+ xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
+
+ xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */
+ xmlBufferPtr conv; /* if encoder != NULL buffer for output */
+ int written; /* total number of byte written */
+ int error;
+};
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/*
+ * Interfaces for input
+ */
+XMLPUBFUN void XMLCALL
+ xmlCleanupInputCallbacks (void);
+
+XMLPUBFUN int XMLCALL
+ xmlPopInputCallbacks (void);
+
+XMLPUBFUN void XMLCALL
+ xmlRegisterDefaultInputCallbacks (void);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlAllocParserInputBuffer (xmlCharEncoding enc);
+
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateFilename (const char *URI,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateFile (FILE *file,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateFd (int fd,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateMem (const char *mem, int size,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateStatic (const char *mem, int size,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateIO (xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL
+ xmlParserInputBufferRead (xmlParserInputBufferPtr in,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlParserInputBufferGrow (xmlParserInputBufferPtr in,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlParserInputBufferPush (xmlParserInputBufferPtr in,
+ int len,
+ const char *buf);
+XMLPUBFUN void XMLCALL
+ xmlFreeParserInputBuffer (xmlParserInputBufferPtr in);
+XMLPUBFUN char * XMLCALL
+ xmlParserGetDirectory (const char *filename);
+
+XMLPUBFUN int XMLCALL
+ xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc,
+ xmlInputOpenCallback openFunc,
+ xmlInputReadCallback readFunc,
+ xmlInputCloseCallback closeFunc);
+
+xmlParserInputBufferPtr
+ __xmlParserInputBufferCreateFilename(const char *URI,
+ xmlCharEncoding enc);
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Interfaces for output
+ */
+XMLPUBFUN void XMLCALL
+ xmlCleanupOutputCallbacks (void);
+XMLPUBFUN void XMLCALL
+ xmlRegisterDefaultOutputCallbacks(void);
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlOutputBufferCreateFilename (const char *URI,
+ xmlCharEncodingHandlerPtr encoder,
+ int compression);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlOutputBufferCreateFile (FILE *file,
+ xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlOutputBufferCreateBuffer (xmlBufferPtr buffer,
+ xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlOutputBufferCreateFd (int fd,
+ xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite,
+ xmlOutputCloseCallback ioclose,
+ void *ioctx,
+ xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN int XMLCALL
+ xmlOutputBufferWrite (xmlOutputBufferPtr out,
+ int len,
+ const char *buf);
+XMLPUBFUN int XMLCALL
+ xmlOutputBufferWriteString (xmlOutputBufferPtr out,
+ const char *str);
+XMLPUBFUN int XMLCALL
+ xmlOutputBufferWriteEscape (xmlOutputBufferPtr out,
+ const xmlChar *str,
+ xmlCharEncodingOutputFunc escaping);
+
+XMLPUBFUN int XMLCALL
+ xmlOutputBufferFlush (xmlOutputBufferPtr out);
+XMLPUBFUN int XMLCALL
+ xmlOutputBufferClose (xmlOutputBufferPtr out);
+
+XMLPUBFUN int XMLCALL
+ xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc,
+ xmlOutputOpenCallback openFunc,
+ xmlOutputWriteCallback writeFunc,
+ xmlOutputCloseCallback closeFunc);
+
+xmlOutputBufferPtr
+ __xmlOutputBufferCreateFilename(const char *URI,
+ xmlCharEncodingHandlerPtr encoder,
+ int compression);
+
+#ifdef LIBXML_HTTP_ENABLED
+/* This function only exists if HTTP support built into the library */
+XMLPUBFUN void XMLCALL
+ xmlRegisterHTTPPostCallbacks (void );
+#endif /* LIBXML_HTTP_ENABLED */
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlCheckHTTPInput (xmlParserCtxtPtr ctxt,
+ xmlParserInputPtr ret);
+
+/*
+ * A predefined entity loader disabling network accesses
+ */
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNoNetExternalEntityLoader (const char *URL,
+ const char *ID,
+ xmlParserCtxtPtr ctxt);
+
+/*
+ * xmlNormalizeWindowsPath is obsolete, don't use it.
+ * Check xmlCanonicPath in uri.h for a better alternative.
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNormalizeWindowsPath (const xmlChar *path);
+
+XMLPUBFUN int XMLCALL
+ xmlCheckFilename (const char *path);
+/**
+ * Default 'file://' protocol callbacks
+ */
+XMLPUBFUN int XMLCALL
+ xmlFileMatch (const char *filename);
+XMLPUBFUN void * XMLCALL
+ xmlFileOpen (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlFileRead (void * context,
+ char * buffer,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlFileClose (void * context);
+
+/**
+ * Default 'http://' protocol callbacks
+ */
+#ifdef LIBXML_HTTP_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPMatch (const char *filename);
+XMLPUBFUN void * XMLCALL
+ xmlIOHTTPOpen (const char *filename);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void * XMLCALL
+ xmlIOHTTPOpenW (const char * post_uri,
+ int compression );
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPRead (void * context,
+ char * buffer,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPClose (void * context);
+#endif /* LIBXML_HTTP_ENABLED */
+
+/**
+ * Default 'ftp://' protocol callbacks
+ */
+#ifdef LIBXML_FTP_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlIOFTPMatch (const char *filename);
+XMLPUBFUN void * XMLCALL
+ xmlIOFTPOpen (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlIOFTPRead (void * context,
+ char * buffer,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlIOFTPClose (void * context);
+#endif /* LIBXML_FTP_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_IO_H__ */
diff --git a/interfaces/ext/libxml/xmlautomata.h b/interfaces/ext/libxml/xmlautomata.h
new file mode 100644
index 0000000..f98b55e
--- /dev/null
+++ b/interfaces/ext/libxml/xmlautomata.h
@@ -0,0 +1,146 @@
+/*
+ * Summary: API to build regexp automata
+ * Description: the API to build regexp automata
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_AUTOMATA_H__
+#define __XML_AUTOMATA_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_REGEXP_ENABLED
+#ifdef LIBXML_AUTOMATA_ENABLED
+#include <libxml/xmlregexp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlAutomataPtr:
+ *
+ * A libxml automata description, It can be compiled into a regexp
+ */
+typedef struct _xmlAutomata xmlAutomata;
+typedef xmlAutomata *xmlAutomataPtr;
+
+/**
+ * xmlAutomataStatePtr:
+ *
+ * A state int the automata description,
+ */
+typedef struct _xmlAutomataState xmlAutomataState;
+typedef xmlAutomataState *xmlAutomataStatePtr;
+
+/*
+ * Building API
+ */
+XMLPUBFUN xmlAutomataPtr XMLCALL
+ xmlNewAutomata (void);
+XMLPUBFUN void XMLCALL
+ xmlFreeAutomata (xmlAutomataPtr am);
+
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataGetInitState (xmlAutomataPtr am);
+XMLPUBFUN int XMLCALL
+ xmlAutomataSetFinalState (xmlAutomataPtr am,
+ xmlAutomataStatePtr state);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewState (xmlAutomataPtr am);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewTransition (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewTransition2 (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ const xmlChar *token2,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewNegTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ const xmlChar *token2,
+ void *data);
+
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewCountTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ int min,
+ int max,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewCountTrans2 (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ const xmlChar *token2,
+ int min,
+ int max,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewOnceTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ int min,
+ int max,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewOnceTrans2 (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ const xmlChar *token2,
+ int min,
+ int max,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewAllTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ int lax);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewEpsilon (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewCountedTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ int counter);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewCounterTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ int counter);
+XMLPUBFUN int XMLCALL
+ xmlAutomataNewCounter (xmlAutomataPtr am,
+ int min,
+ int max);
+
+XMLPUBFUN xmlRegexpPtr XMLCALL
+ xmlAutomataCompile (xmlAutomataPtr am);
+XMLPUBFUN int XMLCALL
+ xmlAutomataIsDeterminist (xmlAutomataPtr am);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_AUTOMATA_ENABLED */
+#endif /* LIBXML_REGEXP_ENABLED */
+
+#endif /* __XML_AUTOMATA_H__ */
diff --git a/interfaces/ext/libxml/xmlerror.h b/interfaces/ext/libxml/xmlerror.h
new file mode 100644
index 0000000..7cce9c3
--- /dev/null
+++ b/interfaces/ext/libxml/xmlerror.h
@@ -0,0 +1,944 @@
+/*
+ * Summary: error handling
+ * Description: the API used to report errors
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#include <libxml/parser.h>
+
+#ifndef __XML_ERROR_H__
+#define __XML_ERROR_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlErrorLevel:
+ *
+ * Indicates the level of an error
+ */
+typedef enum {
+ XML_ERR_NONE = 0,
+ XML_ERR_WARNING = 1, /* A simple warning */
+ XML_ERR_ERROR = 2, /* A recoverable error */
+ XML_ERR_FATAL = 3 /* A fatal error */
+} xmlErrorLevel;
+
+/**
+ * xmlErrorDomain:
+ *
+ * Indicates where an error may have come from
+ */
+typedef enum {
+ XML_FROM_NONE = 0,
+ XML_FROM_PARSER, /* The XML parser */
+ XML_FROM_TREE, /* The tree module */
+ XML_FROM_NAMESPACE, /* The XML Namespace module */
+ XML_FROM_DTD, /* The XML DTD validation with parser context*/
+ XML_FROM_HTML, /* The HTML parser */
+ XML_FROM_MEMORY, /* The memory allocator */
+ XML_FROM_OUTPUT, /* The serialization code */
+ XML_FROM_IO, /* The Input/Output stack */
+ XML_FROM_FTP, /* The FTP module */
+ XML_FROM_HTTP, /* The HTTP module */
+ XML_FROM_XINCLUDE, /* The XInclude processing */
+ XML_FROM_XPATH, /* The XPath module */
+ XML_FROM_XPOINTER, /* The XPointer module */
+ XML_FROM_REGEXP, /* The regular expressions module */
+ XML_FROM_DATATYPE, /* The W3C XML Schemas Datatype module */
+ XML_FROM_SCHEMASP, /* The W3C XML Schemas parser module */
+ XML_FROM_SCHEMASV, /* The W3C XML Schemas validation module */
+ XML_FROM_RELAXNGP, /* The Relax-NG parser module */
+ XML_FROM_RELAXNGV, /* The Relax-NG validator module */
+ XML_FROM_CATALOG, /* The Catalog module */
+ XML_FROM_C14N, /* The Canonicalization module */
+ XML_FROM_XSLT, /* The XSLT engine from libxslt */
+ XML_FROM_VALID, /* The XML DTD validation with valid context */
+ XML_FROM_CHECK, /* The error checking module */
+ XML_FROM_WRITER, /* The xmlwriter module */
+ XML_FROM_MODULE, /* The dynamically loaded module module*/
+ XML_FROM_I18N, /* The module handling character conversion */
+ XML_FROM_SCHEMATRONV /* The Schematron validator module */
+} xmlErrorDomain;
+
+/**
+ * xmlError:
+ *
+ * An XML Error instance.
+ */
+
+typedef struct _xmlError xmlError;
+typedef xmlError *xmlErrorPtr;
+struct _xmlError {
+ int domain; /* What part of the library raised this error */
+ int code; /* The error code, e.g. an xmlParserError */
+ char *message;/* human-readable informative error message */
+ xmlErrorLevel level;/* how consequent is the error */
+ char *file; /* the filename */
+ int line; /* the line number if available */
+ char *str1; /* extra string information */
+ char *str2; /* extra string information */
+ char *str3; /* extra string information */
+ int int1; /* extra number information */
+ int int2; /* column number of the error or 0 if N/A (todo: rename this field when we would break ABI) */
+ void *ctxt; /* the parser context if available */
+ void *node; /* the node in the tree */
+};
+
+/**
+ * xmlParserError:
+ *
+ * This is an error that the XML (or HTML) parser can generate
+ */
+typedef enum {
+ XML_ERR_OK = 0,
+ XML_ERR_INTERNAL_ERROR, /* 1 */
+ XML_ERR_NO_MEMORY, /* 2 */
+ XML_ERR_DOCUMENT_START, /* 3 */
+ XML_ERR_DOCUMENT_EMPTY, /* 4 */
+ XML_ERR_DOCUMENT_END, /* 5 */
+ XML_ERR_INVALID_HEX_CHARREF, /* 6 */
+ XML_ERR_INVALID_DEC_CHARREF, /* 7 */
+ XML_ERR_INVALID_CHARREF, /* 8 */
+ XML_ERR_INVALID_CHAR, /* 9 */
+ XML_ERR_CHARREF_AT_EOF, /* 10 */
+ XML_ERR_CHARREF_IN_PROLOG, /* 11 */
+ XML_ERR_CHARREF_IN_EPILOG, /* 12 */
+ XML_ERR_CHARREF_IN_DTD, /* 13 */
+ XML_ERR_ENTITYREF_AT_EOF, /* 14 */
+ XML_ERR_ENTITYREF_IN_PROLOG, /* 15 */
+ XML_ERR_ENTITYREF_IN_EPILOG, /* 16 */
+ XML_ERR_ENTITYREF_IN_DTD, /* 17 */
+ XML_ERR_PEREF_AT_EOF, /* 18 */
+ XML_ERR_PEREF_IN_PROLOG, /* 19 */
+ XML_ERR_PEREF_IN_EPILOG, /* 20 */
+ XML_ERR_PEREF_IN_INT_SUBSET, /* 21 */
+ XML_ERR_ENTITYREF_NO_NAME, /* 22 */
+ XML_ERR_ENTITYREF_SEMICOL_MISSING, /* 23 */
+ XML_ERR_PEREF_NO_NAME, /* 24 */
+ XML_ERR_PEREF_SEMICOL_MISSING, /* 25 */
+ XML_ERR_UNDECLARED_ENTITY, /* 26 */
+ XML_WAR_UNDECLARED_ENTITY, /* 27 */
+ XML_ERR_UNPARSED_ENTITY, /* 28 */
+ XML_ERR_ENTITY_IS_EXTERNAL, /* 29 */
+ XML_ERR_ENTITY_IS_PARAMETER, /* 30 */
+ XML_ERR_UNKNOWN_ENCODING, /* 31 */
+ XML_ERR_UNSUPPORTED_ENCODING, /* 32 */
+ XML_ERR_STRING_NOT_STARTED, /* 33 */
+ XML_ERR_STRING_NOT_CLOSED, /* 34 */
+ XML_ERR_NS_DECL_ERROR, /* 35 */
+ XML_ERR_ENTITY_NOT_STARTED, /* 36 */
+ XML_ERR_ENTITY_NOT_FINISHED, /* 37 */
+ XML_ERR_LT_IN_ATTRIBUTE, /* 38 */
+ XML_ERR_ATTRIBUTE_NOT_STARTED, /* 39 */
+ XML_ERR_ATTRIBUTE_NOT_FINISHED, /* 40 */
+ XML_ERR_ATTRIBUTE_WITHOUT_VALUE, /* 41 */
+ XML_ERR_ATTRIBUTE_REDEFINED, /* 42 */
+ XML_ERR_LITERAL_NOT_STARTED, /* 43 */
+ XML_ERR_LITERAL_NOT_FINISHED, /* 44 */
+ XML_ERR_COMMENT_NOT_FINISHED, /* 45 */
+ XML_ERR_PI_NOT_STARTED, /* 46 */
+ XML_ERR_PI_NOT_FINISHED, /* 47 */
+ XML_ERR_NOTATION_NOT_STARTED, /* 48 */
+ XML_ERR_NOTATION_NOT_FINISHED, /* 49 */
+ XML_ERR_ATTLIST_NOT_STARTED, /* 50 */
+ XML_ERR_ATTLIST_NOT_FINISHED, /* 51 */
+ XML_ERR_MIXED_NOT_STARTED, /* 52 */
+ XML_ERR_MIXED_NOT_FINISHED, /* 53 */
+ XML_ERR_ELEMCONTENT_NOT_STARTED, /* 54 */
+ XML_ERR_ELEMCONTENT_NOT_FINISHED, /* 55 */
+ XML_ERR_XMLDECL_NOT_STARTED, /* 56 */
+ XML_ERR_XMLDECL_NOT_FINISHED, /* 57 */
+ XML_ERR_CONDSEC_NOT_STARTED, /* 58 */
+ XML_ERR_CONDSEC_NOT_FINISHED, /* 59 */
+ XML_ERR_EXT_SUBSET_NOT_FINISHED, /* 60 */
+ XML_ERR_DOCTYPE_NOT_FINISHED, /* 61 */
+ XML_ERR_MISPLACED_CDATA_END, /* 62 */
+ XML_ERR_CDATA_NOT_FINISHED, /* 63 */
+ XML_ERR_RESERVED_XML_NAME, /* 64 */
+ XML_ERR_SPACE_REQUIRED, /* 65 */
+ XML_ERR_SEPARATOR_REQUIRED, /* 66 */
+ XML_ERR_NMTOKEN_REQUIRED, /* 67 */
+ XML_ERR_NAME_REQUIRED, /* 68 */
+ XML_ERR_PCDATA_REQUIRED, /* 69 */
+ XML_ERR_URI_REQUIRED, /* 70 */
+ XML_ERR_PUBID_REQUIRED, /* 71 */
+ XML_ERR_LT_REQUIRED, /* 72 */
+ XML_ERR_GT_REQUIRED, /* 73 */
+ XML_ERR_LTSLASH_REQUIRED, /* 74 */
+ XML_ERR_EQUAL_REQUIRED, /* 75 */
+ XML_ERR_TAG_NAME_MISMATCH, /* 76 */
+ XML_ERR_TAG_NOT_FINISHED, /* 77 */
+ XML_ERR_STANDALONE_VALUE, /* 78 */
+ XML_ERR_ENCODING_NAME, /* 79 */
+ XML_ERR_HYPHEN_IN_COMMENT, /* 80 */
+ XML_ERR_INVALID_ENCODING, /* 81 */
+ XML_ERR_EXT_ENTITY_STANDALONE, /* 82 */
+ XML_ERR_CONDSEC_INVALID, /* 83 */
+ XML_ERR_VALUE_REQUIRED, /* 84 */
+ XML_ERR_NOT_WELL_BALANCED, /* 85 */
+ XML_ERR_EXTRA_CONTENT, /* 86 */
+ XML_ERR_ENTITY_CHAR_ERROR, /* 87 */
+ XML_ERR_ENTITY_PE_INTERNAL, /* 88 */
+ XML_ERR_ENTITY_LOOP, /* 89 */
+ XML_ERR_ENTITY_BOUNDARY, /* 90 */
+ XML_ERR_INVALID_URI, /* 91 */
+ XML_ERR_URI_FRAGMENT, /* 92 */
+ XML_WAR_CATALOG_PI, /* 93 */
+ XML_ERR_NO_DTD, /* 94 */
+ XML_ERR_CONDSEC_INVALID_KEYWORD, /* 95 */
+ XML_ERR_VERSION_MISSING, /* 96 */
+ XML_WAR_UNKNOWN_VERSION, /* 97 */
+ XML_WAR_LANG_VALUE, /* 98 */
+ XML_WAR_NS_URI, /* 99 */
+ XML_WAR_NS_URI_RELATIVE, /* 100 */
+ XML_ERR_MISSING_ENCODING, /* 101 */
+ XML_WAR_SPACE_VALUE, /* 102 */
+ XML_ERR_NOT_STANDALONE, /* 103 */
+ XML_ERR_ENTITY_PROCESSING, /* 104 */
+ XML_ERR_NOTATION_PROCESSING, /* 105 */
+ XML_WAR_NS_COLUMN, /* 106 */
+ XML_WAR_ENTITY_REDEFINED, /* 107 */
+ XML_ERR_UNKNOWN_VERSION, /* 108 */
+ XML_ERR_VERSION_MISMATCH, /* 109 */
+ XML_NS_ERR_XML_NAMESPACE = 200,
+ XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */
+ XML_NS_ERR_QNAME, /* 202 */
+ XML_NS_ERR_ATTRIBUTE_REDEFINED, /* 203 */
+ XML_NS_ERR_EMPTY, /* 204 */
+ XML_NS_ERR_COLON, /* 205 */
+ XML_DTD_ATTRIBUTE_DEFAULT = 500,
+ XML_DTD_ATTRIBUTE_REDEFINED, /* 501 */
+ XML_DTD_ATTRIBUTE_VALUE, /* 502 */
+ XML_DTD_CONTENT_ERROR, /* 503 */
+ XML_DTD_CONTENT_MODEL, /* 504 */
+ XML_DTD_CONTENT_NOT_DETERMINIST, /* 505 */
+ XML_DTD_DIFFERENT_PREFIX, /* 506 */
+ XML_DTD_ELEM_DEFAULT_NAMESPACE, /* 507 */
+ XML_DTD_ELEM_NAMESPACE, /* 508 */
+ XML_DTD_ELEM_REDEFINED, /* 509 */
+ XML_DTD_EMPTY_NOTATION, /* 510 */
+ XML_DTD_ENTITY_TYPE, /* 511 */
+ XML_DTD_ID_FIXED, /* 512 */
+ XML_DTD_ID_REDEFINED, /* 513 */
+ XML_DTD_ID_SUBSET, /* 514 */
+ XML_DTD_INVALID_CHILD, /* 515 */
+ XML_DTD_INVALID_DEFAULT, /* 516 */
+ XML_DTD_LOAD_ERROR, /* 517 */
+ XML_DTD_MISSING_ATTRIBUTE, /* 518 */
+ XML_DTD_MIXED_CORRUPT, /* 519 */
+ XML_DTD_MULTIPLE_ID, /* 520 */
+ XML_DTD_NO_DOC, /* 521 */
+ XML_DTD_NO_DTD, /* 522 */
+ XML_DTD_NO_ELEM_NAME, /* 523 */
+ XML_DTD_NO_PREFIX, /* 524 */
+ XML_DTD_NO_ROOT, /* 525 */
+ XML_DTD_NOTATION_REDEFINED, /* 526 */
+ XML_DTD_NOTATION_VALUE, /* 527 */
+ XML_DTD_NOT_EMPTY, /* 528 */
+ XML_DTD_NOT_PCDATA, /* 529 */
+ XML_DTD_NOT_STANDALONE, /* 530 */
+ XML_DTD_ROOT_NAME, /* 531 */
+ XML_DTD_STANDALONE_WHITE_SPACE, /* 532 */
+ XML_DTD_UNKNOWN_ATTRIBUTE, /* 533 */
+ XML_DTD_UNKNOWN_ELEM, /* 534 */
+ XML_DTD_UNKNOWN_ENTITY, /* 535 */
+ XML_DTD_UNKNOWN_ID, /* 536 */
+ XML_DTD_UNKNOWN_NOTATION, /* 537 */
+ XML_DTD_STANDALONE_DEFAULTED, /* 538 */
+ XML_DTD_XMLID_VALUE, /* 539 */
+ XML_DTD_XMLID_TYPE, /* 540 */
+ XML_DTD_DUP_TOKEN, /* 541 */
+ XML_HTML_STRUCURE_ERROR = 800,
+ XML_HTML_UNKNOWN_TAG, /* 801 */
+ XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000,
+ XML_RNGP_ATTR_CONFLICT, /* 1001 */
+ XML_RNGP_ATTRIBUTE_CHILDREN, /* 1002 */
+ XML_RNGP_ATTRIBUTE_CONTENT, /* 1003 */
+ XML_RNGP_ATTRIBUTE_EMPTY, /* 1004 */
+ XML_RNGP_ATTRIBUTE_NOOP, /* 1005 */
+ XML_RNGP_CHOICE_CONTENT, /* 1006 */
+ XML_RNGP_CHOICE_EMPTY, /* 1007 */
+ XML_RNGP_CREATE_FAILURE, /* 1008 */
+ XML_RNGP_DATA_CONTENT, /* 1009 */
+ XML_RNGP_DEF_CHOICE_AND_INTERLEAVE, /* 1010 */
+ XML_RNGP_DEFINE_CREATE_FAILED, /* 1011 */
+ XML_RNGP_DEFINE_EMPTY, /* 1012 */
+ XML_RNGP_DEFINE_MISSING, /* 1013 */
+ XML_RNGP_DEFINE_NAME_MISSING, /* 1014 */
+ XML_RNGP_ELEM_CONTENT_EMPTY, /* 1015 */
+ XML_RNGP_ELEM_CONTENT_ERROR, /* 1016 */
+ XML_RNGP_ELEMENT_EMPTY, /* 1017 */
+ XML_RNGP_ELEMENT_CONTENT, /* 1018 */
+ XML_RNGP_ELEMENT_NAME, /* 1019 */
+ XML_RNGP_ELEMENT_NO_CONTENT, /* 1020 */
+ XML_RNGP_ELEM_TEXT_CONFLICT, /* 1021 */
+ XML_RNGP_EMPTY, /* 1022 */
+ XML_RNGP_EMPTY_CONSTRUCT, /* 1023 */
+ XML_RNGP_EMPTY_CONTENT, /* 1024 */
+ XML_RNGP_EMPTY_NOT_EMPTY, /* 1025 */
+ XML_RNGP_ERROR_TYPE_LIB, /* 1026 */
+ XML_RNGP_EXCEPT_EMPTY, /* 1027 */
+ XML_RNGP_EXCEPT_MISSING, /* 1028 */
+ XML_RNGP_EXCEPT_MULTIPLE, /* 1029 */
+ XML_RNGP_EXCEPT_NO_CONTENT, /* 1030 */
+ XML_RNGP_EXTERNALREF_EMTPY, /* 1031 */
+ XML_RNGP_EXTERNAL_REF_FAILURE, /* 1032 */
+ XML_RNGP_EXTERNALREF_RECURSE, /* 1033 */
+ XML_RNGP_FORBIDDEN_ATTRIBUTE, /* 1034 */
+ XML_RNGP_FOREIGN_ELEMENT, /* 1035 */
+ XML_RNGP_GRAMMAR_CONTENT, /* 1036 */
+ XML_RNGP_GRAMMAR_EMPTY, /* 1037 */
+ XML_RNGP_GRAMMAR_MISSING, /* 1038 */
+ XML_RNGP_GRAMMAR_NO_START, /* 1039 */
+ XML_RNGP_GROUP_ATTR_CONFLICT, /* 1040 */
+ XML_RNGP_HREF_ERROR, /* 1041 */
+ XML_RNGP_INCLUDE_EMPTY, /* 1042 */
+ XML_RNGP_INCLUDE_FAILURE, /* 1043 */
+ XML_RNGP_INCLUDE_RECURSE, /* 1044 */
+ XML_RNGP_INTERLEAVE_ADD, /* 1045 */
+ XML_RNGP_INTERLEAVE_CREATE_FAILED, /* 1046 */
+ XML_RNGP_INTERLEAVE_EMPTY, /* 1047 */
+ XML_RNGP_INTERLEAVE_NO_CONTENT, /* 1048 */
+ XML_RNGP_INVALID_DEFINE_NAME, /* 1049 */
+ XML_RNGP_INVALID_URI, /* 1050 */
+ XML_RNGP_INVALID_VALUE, /* 1051 */
+ XML_RNGP_MISSING_HREF, /* 1052 */
+ XML_RNGP_NAME_MISSING, /* 1053 */
+ XML_RNGP_NEED_COMBINE, /* 1054 */
+ XML_RNGP_NOTALLOWED_NOT_EMPTY, /* 1055 */
+ XML_RNGP_NSNAME_ATTR_ANCESTOR, /* 1056 */
+ XML_RNGP_NSNAME_NO_NS, /* 1057 */
+ XML_RNGP_PARAM_FORBIDDEN, /* 1058 */
+ XML_RNGP_PARAM_NAME_MISSING, /* 1059 */
+ XML_RNGP_PARENTREF_CREATE_FAILED, /* 1060 */
+ XML_RNGP_PARENTREF_NAME_INVALID, /* 1061 */
+ XML_RNGP_PARENTREF_NO_NAME, /* 1062 */
+ XML_RNGP_PARENTREF_NO_PARENT, /* 1063 */
+ XML_RNGP_PARENTREF_NOT_EMPTY, /* 1064 */
+ XML_RNGP_PARSE_ERROR, /* 1065 */
+ XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME, /* 1066 */
+ XML_RNGP_PAT_ATTR_ATTR, /* 1067 */
+ XML_RNGP_PAT_ATTR_ELEM, /* 1068 */
+ XML_RNGP_PAT_DATA_EXCEPT_ATTR, /* 1069 */
+ XML_RNGP_PAT_DATA_EXCEPT_ELEM, /* 1070 */
+ XML_RNGP_PAT_DATA_EXCEPT_EMPTY, /* 1071 */
+ XML_RNGP_PAT_DATA_EXCEPT_GROUP, /* 1072 */
+ XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE, /* 1073 */
+ XML_RNGP_PAT_DATA_EXCEPT_LIST, /* 1074 */
+ XML_RNGP_PAT_DATA_EXCEPT_ONEMORE, /* 1075 */
+ XML_RNGP_PAT_DATA_EXCEPT_REF, /* 1076 */
+ XML_RNGP_PAT_DATA_EXCEPT_TEXT, /* 1077 */
+ XML_RNGP_PAT_LIST_ATTR, /* 1078 */
+ XML_RNGP_PAT_LIST_ELEM, /* 1079 */
+ XML_RNGP_PAT_LIST_INTERLEAVE, /* 1080 */
+ XML_RNGP_PAT_LIST_LIST, /* 1081 */
+ XML_RNGP_PAT_LIST_REF, /* 1082 */
+ XML_RNGP_PAT_LIST_TEXT, /* 1083 */
+ XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME, /* 1084 */
+ XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME, /* 1085 */
+ XML_RNGP_PAT_ONEMORE_GROUP_ATTR, /* 1086 */
+ XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR, /* 1087 */
+ XML_RNGP_PAT_START_ATTR, /* 1088 */
+ XML_RNGP_PAT_START_DATA, /* 1089 */
+ XML_RNGP_PAT_START_EMPTY, /* 1090 */
+ XML_RNGP_PAT_START_GROUP, /* 1091 */
+ XML_RNGP_PAT_START_INTERLEAVE, /* 1092 */
+ XML_RNGP_PAT_START_LIST, /* 1093 */
+ XML_RNGP_PAT_START_ONEMORE, /* 1094 */
+ XML_RNGP_PAT_START_TEXT, /* 1095 */
+ XML_RNGP_PAT_START_VALUE, /* 1096 */
+ XML_RNGP_PREFIX_UNDEFINED, /* 1097 */
+ XML_RNGP_REF_CREATE_FAILED, /* 1098 */
+ XML_RNGP_REF_CYCLE, /* 1099 */
+ XML_RNGP_REF_NAME_INVALID, /* 1100 */
+ XML_RNGP_REF_NO_DEF, /* 1101 */
+ XML_RNGP_REF_NO_NAME, /* 1102 */
+ XML_RNGP_REF_NOT_EMPTY, /* 1103 */
+ XML_RNGP_START_CHOICE_AND_INTERLEAVE, /* 1104 */
+ XML_RNGP_START_CONTENT, /* 1105 */
+ XML_RNGP_START_EMPTY, /* 1106 */
+ XML_RNGP_START_MISSING, /* 1107 */
+ XML_RNGP_TEXT_EXPECTED, /* 1108 */
+ XML_RNGP_TEXT_HAS_CHILD, /* 1109 */
+ XML_RNGP_TYPE_MISSING, /* 1110 */
+ XML_RNGP_TYPE_NOT_FOUND, /* 1111 */
+ XML_RNGP_TYPE_VALUE, /* 1112 */
+ XML_RNGP_UNKNOWN_ATTRIBUTE, /* 1113 */
+ XML_RNGP_UNKNOWN_COMBINE, /* 1114 */
+ XML_RNGP_UNKNOWN_CONSTRUCT, /* 1115 */
+ XML_RNGP_UNKNOWN_TYPE_LIB, /* 1116 */
+ XML_RNGP_URI_FRAGMENT, /* 1117 */
+ XML_RNGP_URI_NOT_ABSOLUTE, /* 1118 */
+ XML_RNGP_VALUE_EMPTY, /* 1119 */
+ XML_RNGP_VALUE_NO_CONTENT, /* 1120 */
+ XML_RNGP_XMLNS_NAME, /* 1121 */
+ XML_RNGP_XML_NS, /* 1122 */
+ XML_XPATH_EXPRESSION_OK = 1200,
+ XML_XPATH_NUMBER_ERROR, /* 1201 */
+ XML_XPATH_UNFINISHED_LITERAL_ERROR, /* 1202 */
+ XML_XPATH_START_LITERAL_ERROR, /* 1203 */
+ XML_XPATH_VARIABLE_REF_ERROR, /* 1204 */
+ XML_XPATH_UNDEF_VARIABLE_ERROR, /* 1205 */
+ XML_XPATH_INVALID_PREDICATE_ERROR, /* 1206 */
+ XML_XPATH_EXPR_ERROR, /* 1207 */
+ XML_XPATH_UNCLOSED_ERROR, /* 1208 */
+ XML_XPATH_UNKNOWN_FUNC_ERROR, /* 1209 */
+ XML_XPATH_INVALID_OPERAND, /* 1210 */
+ XML_XPATH_INVALID_TYPE, /* 1211 */
+ XML_XPATH_INVALID_ARITY, /* 1212 */
+ XML_XPATH_INVALID_CTXT_SIZE, /* 1213 */
+ XML_XPATH_INVALID_CTXT_POSITION, /* 1214 */
+ XML_XPATH_MEMORY_ERROR, /* 1215 */
+ XML_XPTR_SYNTAX_ERROR, /* 1216 */
+ XML_XPTR_RESOURCE_ERROR, /* 1217 */
+ XML_XPTR_SUB_RESOURCE_ERROR, /* 1218 */
+ XML_XPATH_UNDEF_PREFIX_ERROR, /* 1219 */
+ XML_XPATH_ENCODING_ERROR, /* 1220 */
+ XML_XPATH_INVALID_CHAR_ERROR, /* 1221 */
+ XML_TREE_INVALID_HEX = 1300,
+ XML_TREE_INVALID_DEC, /* 1301 */
+ XML_TREE_UNTERMINATED_ENTITY, /* 1302 */
+ XML_TREE_NOT_UTF8, /* 1303 */
+ XML_SAVE_NOT_UTF8 = 1400,
+ XML_SAVE_CHAR_INVALID, /* 1401 */
+ XML_SAVE_NO_DOCTYPE, /* 1402 */
+ XML_SAVE_UNKNOWN_ENCODING, /* 1403 */
+ XML_REGEXP_COMPILE_ERROR = 1450,
+ XML_IO_UNKNOWN = 1500,
+ XML_IO_EACCES, /* 1501 */
+ XML_IO_EAGAIN, /* 1502 */
+ XML_IO_EBADF, /* 1503 */
+ XML_IO_EBADMSG, /* 1504 */
+ XML_IO_EBUSY, /* 1505 */
+ XML_IO_ECANCELED, /* 1506 */
+ XML_IO_ECHILD, /* 1507 */
+ XML_IO_EDEADLK, /* 1508 */
+ XML_IO_EDOM, /* 1509 */
+ XML_IO_EEXIST, /* 1510 */
+ XML_IO_EFAULT, /* 1511 */
+ XML_IO_EFBIG, /* 1512 */
+ XML_IO_EINPROGRESS, /* 1513 */
+ XML_IO_EINTR, /* 1514 */
+ XML_IO_EINVAL, /* 1515 */
+ XML_IO_EIO, /* 1516 */
+ XML_IO_EISDIR, /* 1517 */
+ XML_IO_EMFILE, /* 1518 */
+ XML_IO_EMLINK, /* 1519 */
+ XML_IO_EMSGSIZE, /* 1520 */
+ XML_IO_ENAMETOOLONG, /* 1521 */
+ XML_IO_ENFILE, /* 1522 */
+ XML_IO_ENODEV, /* 1523 */
+ XML_IO_ENOENT, /* 1524 */
+ XML_IO_ENOEXEC, /* 1525 */
+ XML_IO_ENOLCK, /* 1526 */
+ XML_IO_ENOMEM, /* 1527 */
+ XML_IO_ENOSPC, /* 1528 */
+ XML_IO_ENOSYS, /* 1529 */
+ XML_IO_ENOTDIR, /* 1530 */
+ XML_IO_ENOTEMPTY, /* 1531 */
+ XML_IO_ENOTSUP, /* 1532 */
+ XML_IO_ENOTTY, /* 1533 */
+ XML_IO_ENXIO, /* 1534 */
+ XML_IO_EPERM, /* 1535 */
+ XML_IO_EPIPE, /* 1536 */
+ XML_IO_ERANGE, /* 1537 */
+ XML_IO_EROFS, /* 1538 */
+ XML_IO_ESPIPE, /* 1539 */
+ XML_IO_ESRCH, /* 1540 */
+ XML_IO_ETIMEDOUT, /* 1541 */
+ XML_IO_EXDEV, /* 1542 */
+ XML_IO_NETWORK_ATTEMPT, /* 1543 */
+ XML_IO_ENCODER, /* 1544 */
+ XML_IO_FLUSH, /* 1545 */
+ XML_IO_WRITE, /* 1546 */
+ XML_IO_NO_INPUT, /* 1547 */
+ XML_IO_BUFFER_FULL, /* 1548 */
+ XML_IO_LOAD_ERROR, /* 1549 */
+ XML_IO_ENOTSOCK, /* 1550 */
+ XML_IO_EISCONN, /* 1551 */
+ XML_IO_ECONNREFUSED, /* 1552 */
+ XML_IO_ENETUNREACH, /* 1553 */
+ XML_IO_EADDRINUSE, /* 1554 */
+ XML_IO_EALREADY, /* 1555 */
+ XML_IO_EAFNOSUPPORT, /* 1556 */
+ XML_XINCLUDE_RECURSION=1600,
+ XML_XINCLUDE_PARSE_VALUE, /* 1601 */
+ XML_XINCLUDE_ENTITY_DEF_MISMATCH, /* 1602 */
+ XML_XINCLUDE_NO_HREF, /* 1603 */
+ XML_XINCLUDE_NO_FALLBACK, /* 1604 */
+ XML_XINCLUDE_HREF_URI, /* 1605 */
+ XML_XINCLUDE_TEXT_FRAGMENT, /* 1606 */
+ XML_XINCLUDE_TEXT_DOCUMENT, /* 1607 */
+ XML_XINCLUDE_INVALID_CHAR, /* 1608 */
+ XML_XINCLUDE_BUILD_FAILED, /* 1609 */
+ XML_XINCLUDE_UNKNOWN_ENCODING, /* 1610 */
+ XML_XINCLUDE_MULTIPLE_ROOT, /* 1611 */
+ XML_XINCLUDE_XPTR_FAILED, /* 1612 */
+ XML_XINCLUDE_XPTR_RESULT, /* 1613 */
+ XML_XINCLUDE_INCLUDE_IN_INCLUDE, /* 1614 */
+ XML_XINCLUDE_FALLBACKS_IN_INCLUDE, /* 1615 */
+ XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE, /* 1616 */
+ XML_XINCLUDE_DEPRECATED_NS, /* 1617 */
+ XML_XINCLUDE_FRAGMENT_ID, /* 1618 */
+ XML_CATALOG_MISSING_ATTR = 1650,
+ XML_CATALOG_ENTRY_BROKEN, /* 1651 */
+ XML_CATALOG_PREFER_VALUE, /* 1652 */
+ XML_CATALOG_NOT_CATALOG, /* 1653 */
+ XML_CATALOG_RECURSION, /* 1654 */
+ XML_SCHEMAP_PREFIX_UNDEFINED = 1700,
+ XML_SCHEMAP_ATTRFORMDEFAULT_VALUE, /* 1701 */
+ XML_SCHEMAP_ATTRGRP_NONAME_NOREF, /* 1702 */
+ XML_SCHEMAP_ATTR_NONAME_NOREF, /* 1703 */
+ XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF, /* 1704 */
+ XML_SCHEMAP_ELEMFORMDEFAULT_VALUE, /* 1705 */
+ XML_SCHEMAP_ELEM_NONAME_NOREF, /* 1706 */
+ XML_SCHEMAP_EXTENSION_NO_BASE, /* 1707 */
+ XML_SCHEMAP_FACET_NO_VALUE, /* 1708 */
+ XML_SCHEMAP_FAILED_BUILD_IMPORT, /* 1709 */
+ XML_SCHEMAP_GROUP_NONAME_NOREF, /* 1710 */
+ XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI, /* 1711 */
+ XML_SCHEMAP_IMPORT_REDEFINE_NSNAME, /* 1712 */
+ XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI, /* 1713 */
+ XML_SCHEMAP_INVALID_BOOLEAN, /* 1714 */
+ XML_SCHEMAP_INVALID_ENUM, /* 1715 */
+ XML_SCHEMAP_INVALID_FACET, /* 1716 */
+ XML_SCHEMAP_INVALID_FACET_VALUE, /* 1717 */
+ XML_SCHEMAP_INVALID_MAXOCCURS, /* 1718 */
+ XML_SCHEMAP_INVALID_MINOCCURS, /* 1719 */
+ XML_SCHEMAP_INVALID_REF_AND_SUBTYPE, /* 1720 */
+ XML_SCHEMAP_INVALID_WHITE_SPACE, /* 1721 */
+ XML_SCHEMAP_NOATTR_NOREF, /* 1722 */
+ XML_SCHEMAP_NOTATION_NO_NAME, /* 1723 */
+ XML_SCHEMAP_NOTYPE_NOREF, /* 1724 */
+ XML_SCHEMAP_REF_AND_SUBTYPE, /* 1725 */
+ XML_SCHEMAP_RESTRICTION_NONAME_NOREF, /* 1726 */
+ XML_SCHEMAP_SIMPLETYPE_NONAME, /* 1727 */
+ XML_SCHEMAP_TYPE_AND_SUBTYPE, /* 1728 */
+ XML_SCHEMAP_UNKNOWN_ALL_CHILD, /* 1729 */
+ XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD, /* 1730 */
+ XML_SCHEMAP_UNKNOWN_ATTR_CHILD, /* 1731 */
+ XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD, /* 1732 */
+ XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP, /* 1733 */
+ XML_SCHEMAP_UNKNOWN_BASE_TYPE, /* 1734 */
+ XML_SCHEMAP_UNKNOWN_CHOICE_CHILD, /* 1735 */
+ XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD, /* 1736 */
+ XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD, /* 1737 */
+ XML_SCHEMAP_UNKNOWN_ELEM_CHILD, /* 1738 */
+ XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD, /* 1739 */
+ XML_SCHEMAP_UNKNOWN_FACET_CHILD, /* 1740 */
+ XML_SCHEMAP_UNKNOWN_FACET_TYPE, /* 1741 */
+ XML_SCHEMAP_UNKNOWN_GROUP_CHILD, /* 1742 */
+ XML_SCHEMAP_UNKNOWN_IMPORT_CHILD, /* 1743 */
+ XML_SCHEMAP_UNKNOWN_LIST_CHILD, /* 1744 */
+ XML_SCHEMAP_UNKNOWN_NOTATION_CHILD, /* 1745 */
+ XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD, /* 1746 */
+ XML_SCHEMAP_UNKNOWN_REF, /* 1747 */
+ XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD, /* 1748 */
+ XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD, /* 1749 */
+ XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD, /* 1750 */
+ XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD, /* 1751 */
+ XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD, /* 1752 */
+ XML_SCHEMAP_UNKNOWN_TYPE, /* 1753 */
+ XML_SCHEMAP_UNKNOWN_UNION_CHILD, /* 1754 */
+ XML_SCHEMAP_ELEM_DEFAULT_FIXED, /* 1755 */
+ XML_SCHEMAP_REGEXP_INVALID, /* 1756 */
+ XML_SCHEMAP_FAILED_LOAD, /* 1757 */
+ XML_SCHEMAP_NOTHING_TO_PARSE, /* 1758 */
+ XML_SCHEMAP_NOROOT, /* 1759 */
+ XML_SCHEMAP_REDEFINED_GROUP, /* 1760 */
+ XML_SCHEMAP_REDEFINED_TYPE, /* 1761 */
+ XML_SCHEMAP_REDEFINED_ELEMENT, /* 1762 */
+ XML_SCHEMAP_REDEFINED_ATTRGROUP, /* 1763 */
+ XML_SCHEMAP_REDEFINED_ATTR, /* 1764 */
+ XML_SCHEMAP_REDEFINED_NOTATION, /* 1765 */
+ XML_SCHEMAP_FAILED_PARSE, /* 1766 */
+ XML_SCHEMAP_UNKNOWN_PREFIX, /* 1767 */
+ XML_SCHEMAP_DEF_AND_PREFIX, /* 1768 */
+ XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD, /* 1769 */
+ XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI, /* 1770 */
+ XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI, /* 1771 */
+ XML_SCHEMAP_NOT_SCHEMA, /* 1772 */
+ XML_SCHEMAP_UNKNOWN_MEMBER_TYPE, /* 1773 */
+ XML_SCHEMAP_INVALID_ATTR_USE, /* 1774 */
+ XML_SCHEMAP_RECURSIVE, /* 1775 */
+ XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE, /* 1776 */
+ XML_SCHEMAP_INVALID_ATTR_COMBINATION, /* 1777 */
+ XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION, /* 1778 */
+ XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD, /* 1779 */
+ XML_SCHEMAP_INVALID_ATTR_NAME, /* 1780 */
+ XML_SCHEMAP_REF_AND_CONTENT, /* 1781 */
+ XML_SCHEMAP_CT_PROPS_CORRECT_1, /* 1782 */
+ XML_SCHEMAP_CT_PROPS_CORRECT_2, /* 1783 */
+ XML_SCHEMAP_CT_PROPS_CORRECT_3, /* 1784 */
+ XML_SCHEMAP_CT_PROPS_CORRECT_4, /* 1785 */
+ XML_SCHEMAP_CT_PROPS_CORRECT_5, /* 1786 */
+ XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, /* 1787 */
+ XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1, /* 1788 */
+ XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2, /* 1789 */
+ XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2, /* 1790 */
+ XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3, /* 1791 */
+ XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER, /* 1792 */
+ XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE, /* 1793 */
+ XML_SCHEMAP_UNION_NOT_EXPRESSIBLE, /* 1794 */
+ XML_SCHEMAP_SRC_IMPORT_3_1, /* 1795 */
+ XML_SCHEMAP_SRC_IMPORT_3_2, /* 1796 */
+ XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1, /* 1797 */
+ XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2, /* 1798 */
+ XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3, /* 1799 */
+ XML_SCHEMAP_COS_CT_EXTENDS_1_3, /* 1800 */
+ XML_SCHEMAV_NOROOT = 1801,
+ XML_SCHEMAV_UNDECLAREDELEM, /* 1802 */
+ XML_SCHEMAV_NOTTOPLEVEL, /* 1803 */
+ XML_SCHEMAV_MISSING, /* 1804 */
+ XML_SCHEMAV_WRONGELEM, /* 1805 */
+ XML_SCHEMAV_NOTYPE, /* 1806 */
+ XML_SCHEMAV_NOROLLBACK, /* 1807 */
+ XML_SCHEMAV_ISABSTRACT, /* 1808 */
+ XML_SCHEMAV_NOTEMPTY, /* 1809 */
+ XML_SCHEMAV_ELEMCONT, /* 1810 */
+ XML_SCHEMAV_HAVEDEFAULT, /* 1811 */
+ XML_SCHEMAV_NOTNILLABLE, /* 1812 */
+ XML_SCHEMAV_EXTRACONTENT, /* 1813 */
+ XML_SCHEMAV_INVALIDATTR, /* 1814 */
+ XML_SCHEMAV_INVALIDELEM, /* 1815 */
+ XML_SCHEMAV_NOTDETERMINIST, /* 1816 */
+ XML_SCHEMAV_CONSTRUCT, /* 1817 */
+ XML_SCHEMAV_INTERNAL, /* 1818 */
+ XML_SCHEMAV_NOTSIMPLE, /* 1819 */
+ XML_SCHEMAV_ATTRUNKNOWN, /* 1820 */
+ XML_SCHEMAV_ATTRINVALID, /* 1821 */
+ XML_SCHEMAV_VALUE, /* 1822 */
+ XML_SCHEMAV_FACET, /* 1823 */
+ XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1, /* 1824 */
+ XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2, /* 1825 */
+ XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3, /* 1826 */
+ XML_SCHEMAV_CVC_TYPE_3_1_1, /* 1827 */
+ XML_SCHEMAV_CVC_TYPE_3_1_2, /* 1828 */
+ XML_SCHEMAV_CVC_FACET_VALID, /* 1829 */
+ XML_SCHEMAV_CVC_LENGTH_VALID, /* 1830 */
+ XML_SCHEMAV_CVC_MINLENGTH_VALID, /* 1831 */
+ XML_SCHEMAV_CVC_MAXLENGTH_VALID, /* 1832 */
+ XML_SCHEMAV_CVC_MININCLUSIVE_VALID, /* 1833 */
+ XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID, /* 1834 */
+ XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID, /* 1835 */
+ XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID, /* 1836 */
+ XML_SCHEMAV_CVC_TOTALDIGITS_VALID, /* 1837 */
+ XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID, /* 1838 */
+ XML_SCHEMAV_CVC_PATTERN_VALID, /* 1839 */
+ XML_SCHEMAV_CVC_ENUMERATION_VALID, /* 1840 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1, /* 1841 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2, /* 1842 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3, /* 1843 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4, /* 1844 */
+ XML_SCHEMAV_CVC_ELT_1, /* 1845 */
+ XML_SCHEMAV_CVC_ELT_2, /* 1846 */
+ XML_SCHEMAV_CVC_ELT_3_1, /* 1847 */
+ XML_SCHEMAV_CVC_ELT_3_2_1, /* 1848 */
+ XML_SCHEMAV_CVC_ELT_3_2_2, /* 1849 */
+ XML_SCHEMAV_CVC_ELT_4_1, /* 1850 */
+ XML_SCHEMAV_CVC_ELT_4_2, /* 1851 */
+ XML_SCHEMAV_CVC_ELT_4_3, /* 1852 */
+ XML_SCHEMAV_CVC_ELT_5_1_1, /* 1853 */
+ XML_SCHEMAV_CVC_ELT_5_1_2, /* 1854 */
+ XML_SCHEMAV_CVC_ELT_5_2_1, /* 1855 */
+ XML_SCHEMAV_CVC_ELT_5_2_2_1, /* 1856 */
+ XML_SCHEMAV_CVC_ELT_5_2_2_2_1, /* 1857 */
+ XML_SCHEMAV_CVC_ELT_5_2_2_2_2, /* 1858 */
+ XML_SCHEMAV_CVC_ELT_6, /* 1859 */
+ XML_SCHEMAV_CVC_ELT_7, /* 1860 */
+ XML_SCHEMAV_CVC_ATTRIBUTE_1, /* 1861 */
+ XML_SCHEMAV_CVC_ATTRIBUTE_2, /* 1862 */
+ XML_SCHEMAV_CVC_ATTRIBUTE_3, /* 1863 */
+ XML_SCHEMAV_CVC_ATTRIBUTE_4, /* 1864 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1, /* 1865 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1, /* 1866 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2, /* 1867 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_4, /* 1868 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1, /* 1869 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2, /* 1870 */
+ XML_SCHEMAV_ELEMENT_CONTENT, /* 1871 */
+ XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING, /* 1872 */
+ XML_SCHEMAV_CVC_COMPLEX_TYPE_1, /* 1873 */
+ XML_SCHEMAV_CVC_AU, /* 1874 */
+ XML_SCHEMAV_CVC_TYPE_1, /* 1875 */
+ XML_SCHEMAV_CVC_TYPE_2, /* 1876 */
+ XML_SCHEMAV_CVC_IDC, /* 1877 */
+ XML_SCHEMAV_CVC_WILDCARD, /* 1878 */
+ XML_SCHEMAV_MISC, /* 1879 */
+ XML_XPTR_UNKNOWN_SCHEME = 1900,
+ XML_XPTR_CHILDSEQ_START, /* 1901 */
+ XML_XPTR_EVAL_FAILED, /* 1902 */
+ XML_XPTR_EXTRA_OBJECTS, /* 1903 */
+ XML_C14N_CREATE_CTXT = 1950,
+ XML_C14N_REQUIRES_UTF8, /* 1951 */
+ XML_C14N_CREATE_STACK, /* 1952 */
+ XML_C14N_INVALID_NODE, /* 1953 */
+ XML_C14N_UNKNOW_NODE, /* 1954 */
+ XML_C14N_RELATIVE_NAMESPACE, /* 1955 */
+ XML_FTP_PASV_ANSWER = 2000,
+ XML_FTP_EPSV_ANSWER, /* 2001 */
+ XML_FTP_ACCNT, /* 2002 */
+ XML_FTP_URL_SYNTAX, /* 2003 */
+ XML_HTTP_URL_SYNTAX = 2020,
+ XML_HTTP_USE_IP, /* 2021 */
+ XML_HTTP_UNKNOWN_HOST, /* 2022 */
+ XML_SCHEMAP_SRC_SIMPLE_TYPE_1 = 3000,
+ XML_SCHEMAP_SRC_SIMPLE_TYPE_2, /* 3001 */
+ XML_SCHEMAP_SRC_SIMPLE_TYPE_3, /* 3002 */
+ XML_SCHEMAP_SRC_SIMPLE_TYPE_4, /* 3003 */
+ XML_SCHEMAP_SRC_RESOLVE, /* 3004 */
+ XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE, /* 3005 */
+ XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE, /* 3006 */
+ XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES, /* 3007 */
+ XML_SCHEMAP_ST_PROPS_CORRECT_1, /* 3008 */
+ XML_SCHEMAP_ST_PROPS_CORRECT_2, /* 3009 */
+ XML_SCHEMAP_ST_PROPS_CORRECT_3, /* 3010 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_1_1, /* 3011 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_1_2, /* 3012 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1, /* 3013 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2, /* 3014 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_2_1, /* 3015 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1, /* 3016 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2, /* 3017 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1, /* 3018 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2, /* 3019 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3, /* 3020 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4, /* 3021 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5, /* 3022 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_3_1, /* 3023 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1, /* 3024 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2, /* 3025 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2, /* 3026 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1, /* 3027 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3, /* 3028 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4, /* 3029 */
+ XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5, /* 3030 */
+ XML_SCHEMAP_COS_ST_DERIVED_OK_2_1, /* 3031 */
+ XML_SCHEMAP_COS_ST_DERIVED_OK_2_2, /* 3032 */
+ XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED, /* 3033 */
+ XML_SCHEMAP_S4S_ELEM_MISSING, /* 3034 */
+ XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, /* 3035 */
+ XML_SCHEMAP_S4S_ATTR_MISSING, /* 3036 */
+ XML_SCHEMAP_S4S_ATTR_INVALID_VALUE, /* 3037 */
+ XML_SCHEMAP_SRC_ELEMENT_1, /* 3038 */
+ XML_SCHEMAP_SRC_ELEMENT_2_1, /* 3039 */
+ XML_SCHEMAP_SRC_ELEMENT_2_2, /* 3040 */
+ XML_SCHEMAP_SRC_ELEMENT_3, /* 3041 */
+ XML_SCHEMAP_P_PROPS_CORRECT_1, /* 3042 */
+ XML_SCHEMAP_P_PROPS_CORRECT_2_1, /* 3043 */
+ XML_SCHEMAP_P_PROPS_CORRECT_2_2, /* 3044 */
+ XML_SCHEMAP_E_PROPS_CORRECT_2, /* 3045 */
+ XML_SCHEMAP_E_PROPS_CORRECT_3, /* 3046 */
+ XML_SCHEMAP_E_PROPS_CORRECT_4, /* 3047 */
+ XML_SCHEMAP_E_PROPS_CORRECT_5, /* 3048 */
+ XML_SCHEMAP_E_PROPS_CORRECT_6, /* 3049 */
+ XML_SCHEMAP_SRC_INCLUDE, /* 3050 */
+ XML_SCHEMAP_SRC_ATTRIBUTE_1, /* 3051 */
+ XML_SCHEMAP_SRC_ATTRIBUTE_2, /* 3052 */
+ XML_SCHEMAP_SRC_ATTRIBUTE_3_1, /* 3053 */
+ XML_SCHEMAP_SRC_ATTRIBUTE_3_2, /* 3054 */
+ XML_SCHEMAP_SRC_ATTRIBUTE_4, /* 3055 */
+ XML_SCHEMAP_NO_XMLNS, /* 3056 */
+ XML_SCHEMAP_NO_XSI, /* 3057 */
+ XML_SCHEMAP_COS_VALID_DEFAULT_1, /* 3058 */
+ XML_SCHEMAP_COS_VALID_DEFAULT_2_1, /* 3059 */
+ XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1, /* 3060 */
+ XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2, /* 3061 */
+ XML_SCHEMAP_CVC_SIMPLE_TYPE, /* 3062 */
+ XML_SCHEMAP_COS_CT_EXTENDS_1_1, /* 3063 */
+ XML_SCHEMAP_SRC_IMPORT_1_1, /* 3064 */
+ XML_SCHEMAP_SRC_IMPORT_1_2, /* 3065 */
+ XML_SCHEMAP_SRC_IMPORT_2, /* 3066 */
+ XML_SCHEMAP_SRC_IMPORT_2_1, /* 3067 */
+ XML_SCHEMAP_SRC_IMPORT_2_2, /* 3068 */
+ XML_SCHEMAP_INTERNAL, /* 3069 non-W3C */
+ XML_SCHEMAP_NOT_DETERMINISTIC, /* 3070 non-W3C */
+ XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1, /* 3071 */
+ XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2, /* 3072 */
+ XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3, /* 3073 */
+ XML_SCHEMAP_MG_PROPS_CORRECT_1, /* 3074 */
+ XML_SCHEMAP_MG_PROPS_CORRECT_2, /* 3075 */
+ XML_SCHEMAP_SRC_CT_1, /* 3076 */
+ XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3, /* 3077 */
+ XML_SCHEMAP_AU_PROPS_CORRECT_2, /* 3078 */
+ XML_SCHEMAP_A_PROPS_CORRECT_2, /* 3079 */
+ XML_SCHEMAP_C_PROPS_CORRECT, /* 3080 */
+ XML_SCHEMAP_SRC_REDEFINE, /* 3081 */
+ XML_SCHEMAP_SRC_IMPORT, /* 3082 */
+ XML_SCHEMAP_WARN_SKIP_SCHEMA, /* 3083 */
+ XML_SCHEMAP_WARN_UNLOCATED_SCHEMA, /* 3084 */
+ XML_SCHEMAP_WARN_ATTR_REDECL_PROH, /* 3085 */
+ XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH, /* 3085 */
+ XML_SCHEMAP_AG_PROPS_CORRECT, /* 3086 */
+ XML_SCHEMAP_COS_CT_EXTENDS_1_2, /* 3087 */
+ XML_SCHEMAP_AU_PROPS_CORRECT, /* 3088 */
+ XML_SCHEMAP_A_PROPS_CORRECT_3, /* 3089 */
+ XML_SCHEMAP_COS_ALL_LIMITED, /* 3090 */
+ XML_SCHEMATRONV_ASSERT = 4000, /* 4000 */
+ XML_SCHEMATRONV_REPORT,
+ XML_MODULE_OPEN = 4900, /* 4900 */
+ XML_MODULE_CLOSE, /* 4901 */
+ XML_CHECK_FOUND_ELEMENT = 5000,
+ XML_CHECK_FOUND_ATTRIBUTE, /* 5001 */
+ XML_CHECK_FOUND_TEXT, /* 5002 */
+ XML_CHECK_FOUND_CDATA, /* 5003 */
+ XML_CHECK_FOUND_ENTITYREF, /* 5004 */
+ XML_CHECK_FOUND_ENTITY, /* 5005 */
+ XML_CHECK_FOUND_PI, /* 5006 */
+ XML_CHECK_FOUND_COMMENT, /* 5007 */
+ XML_CHECK_FOUND_DOCTYPE, /* 5008 */
+ XML_CHECK_FOUND_FRAGMENT, /* 5009 */
+ XML_CHECK_FOUND_NOTATION, /* 5010 */
+ XML_CHECK_UNKNOWN_NODE, /* 5011 */
+ XML_CHECK_ENTITY_TYPE, /* 5012 */
+ XML_CHECK_NO_PARENT, /* 5013 */
+ XML_CHECK_NO_DOC, /* 5014 */
+ XML_CHECK_NO_NAME, /* 5015 */
+ XML_CHECK_NO_ELEM, /* 5016 */
+ XML_CHECK_WRONG_DOC, /* 5017 */
+ XML_CHECK_NO_PREV, /* 5018 */
+ XML_CHECK_WRONG_PREV, /* 5019 */
+ XML_CHECK_NO_NEXT, /* 5020 */
+ XML_CHECK_WRONG_NEXT, /* 5021 */
+ XML_CHECK_NOT_DTD, /* 5022 */
+ XML_CHECK_NOT_ATTR, /* 5023 */
+ XML_CHECK_NOT_ATTR_DECL, /* 5024 */
+ XML_CHECK_NOT_ELEM_DECL, /* 5025 */
+ XML_CHECK_NOT_ENTITY_DECL, /* 5026 */
+ XML_CHECK_NOT_NS_DECL, /* 5027 */
+ XML_CHECK_NO_HREF, /* 5028 */
+ XML_CHECK_WRONG_PARENT,/* 5029 */
+ XML_CHECK_NS_SCOPE, /* 5030 */
+ XML_CHECK_NS_ANCESTOR, /* 5031 */
+ XML_CHECK_NOT_UTF8, /* 5032 */
+ XML_CHECK_NO_DICT, /* 5033 */
+ XML_CHECK_NOT_NCNAME, /* 5034 */
+ XML_CHECK_OUTSIDE_DICT, /* 5035 */
+ XML_CHECK_WRONG_NAME, /* 5036 */
+ XML_CHECK_NAME_NOT_NULL, /* 5037 */
+ XML_I18N_NO_NAME = 6000,
+ XML_I18N_NO_HANDLER, /* 6001 */
+ XML_I18N_EXCESS_HANDLER, /* 6002 */
+ XML_I18N_CONV_FAILED, /* 6003 */
+ XML_I18N_NO_OUTPUT /* 6004 */
+#if 0
+ XML_CHECK_, /* 5033 */
+ XML_CHECK_X /* 503 */
+#endif
+} xmlParserErrors;
+
+/**
+ * xmlGenericErrorFunc:
+ * @ctx: a parsing context
+ * @msg: the message
+ * @...: the extra arguments of the varags to format the message
+ *
+ * Signature of the function to use when there is an error and
+ * no parsing or validity context available .
+ */
+typedef void (XMLCDECL *xmlGenericErrorFunc) (void *ctx,
+ const char *msg,
+ ...) ATTRIBUTE_PRINTF(2,3);
+/**
+ * xmlStructuredErrorFunc:
+ * @userData: user provided data for the error callback
+ * @error: the error being raised.
+ *
+ * Signature of the function to use when there is an error and
+ * the module handles the new error reporting mechanism.
+ */
+typedef void (XMLCALL *xmlStructuredErrorFunc) (void *userData, xmlErrorPtr error);
+
+/*
+ * Use the following function to reset the two global variables
+ * xmlGenericError and xmlGenericErrorContext.
+ */
+XMLPUBFUN void XMLCALL
+ xmlSetGenericErrorFunc (void *ctx,
+ xmlGenericErrorFunc handler);
+XMLPUBFUN void XMLCALL
+ initGenericErrorDefaultFunc (xmlGenericErrorFunc *handler);
+
+XMLPUBFUN void XMLCALL
+ xmlSetStructuredErrorFunc (void *ctx,
+ xmlStructuredErrorFunc handler);
+/*
+ * Default message routines used by SAX and Valid context for error
+ * and warning reporting.
+ */
+XMLPUBFUN void XMLCDECL
+ xmlParserError (void *ctx,
+ const char *msg,
+ ...) ATTRIBUTE_PRINTF(2,3);
+XMLPUBFUN void XMLCDECL
+ xmlParserWarning (void *ctx,
+ const char *msg,
+ ...) ATTRIBUTE_PRINTF(2,3);
+XMLPUBFUN void XMLCDECL
+ xmlParserValidityError (void *ctx,
+ const char *msg,
+ ...) ATTRIBUTE_PRINTF(2,3);
+XMLPUBFUN void XMLCDECL
+ xmlParserValidityWarning (void *ctx,
+ const char *msg,
+ ...) ATTRIBUTE_PRINTF(2,3);
+XMLPUBFUN void XMLCALL
+ xmlParserPrintFileInfo (xmlParserInputPtr input);
+XMLPUBFUN void XMLCALL
+ xmlParserPrintFileContext (xmlParserInputPtr input);
+
+/*
+ * Extended error information routines
+ */
+XMLPUBFUN xmlErrorPtr XMLCALL
+ xmlGetLastError (void);
+XMLPUBFUN void XMLCALL
+ xmlResetLastError (void);
+XMLPUBFUN xmlErrorPtr XMLCALL
+ xmlCtxtGetLastError (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlCtxtResetLastError (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlResetError (xmlErrorPtr err);
+XMLPUBFUN int XMLCALL
+ xmlCopyError (xmlErrorPtr from,
+ xmlErrorPtr to);
+
+#ifdef IN_LIBXML
+/*
+ * Internal callback reporting routine
+ */
+XMLPUBFUN void XMLCALL
+ __xmlRaiseError (xmlStructuredErrorFunc schannel,
+ xmlGenericErrorFunc channel,
+ void *data,
+ void *ctx,
+ void *node,
+ int domain,
+ int code,
+ xmlErrorLevel level,
+ const char *file,
+ int line,
+ const char *str1,
+ const char *str2,
+ const char *str3,
+ int int1,
+ int col,
+ const char *msg,
+ ...) ATTRIBUTE_PRINTF(16,17);
+XMLPUBFUN void XMLCALL
+ __xmlSimpleError (int domain,
+ int code,
+ xmlNodePtr node,
+ const char *msg,
+ const char *extra);
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_ERROR_H__ */
diff --git a/interfaces/ext/libxml/xmlexports.h b/interfaces/ext/libxml/xmlexports.h
new file mode 100644
index 0000000..29a6f54
--- /dev/null
+++ b/interfaces/ext/libxml/xmlexports.h
@@ -0,0 +1,157 @@
+/*
+ * Summary: macros for marking symbols as exportable/importable.
+ * Description: macros for marking symbols as exportable/importable.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Igor Zlatovic <igor at zlatkovic.com>
+ */
+
+#ifndef __XML_EXPORTS_H__
+#define __XML_EXPORTS_H__
+
+/**
+ * XMLPUBFUN, XMLPUBVAR, XMLCALL
+ *
+ * Macros which declare an exportable function, an exportable variable and
+ * the calling convention used for functions.
+ *
+ * Please use an extra block for every platform/compiler combination when
+ * modifying this, rather than overlong #ifdef lines. This helps
+ * readability as well as the fact that different compilers on the same
+ * platform might need different definitions.
+ */
+
+/**
+ * XMLPUBFUN:
+ *
+ * Macros which declare an exportable function
+ */
+#define XMLPUBFUN
+/**
+ * XMLPUBVAR:
+ *
+ * Macros which declare an exportable variable
+ */
+#define XMLPUBVAR extern
+/**
+ * XMLCALL:
+ *
+ * Macros which declare the called convention for exported functions
+ */
+#define XMLCALL
+/**
+ * XMLCDECL:
+ *
+ * Macro which declares the calling convention for exported functions that
+ * use '...'.
+ */
+#define XMLCDECL
+
+/** DOC_DISABLE */
+
+/* Windows platform with MS compiler */
+#if defined(_WIN32) && defined(_MSC_VER)
+ #undef XMLPUBFUN
+ #undef XMLPUBVAR
+ #undef XMLCALL
+ #undef XMLCDECL
+ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+ #define XMLPUBFUN __declspec(dllexport)
+ #define XMLPUBVAR __declspec(dllexport)
+ #else
+ #define XMLPUBFUN
+ #if !defined(LIBXML_STATIC)
+ #define XMLPUBVAR __declspec(dllimport) extern
+ #else
+ #define XMLPUBVAR extern
+ #endif
+ #endif
+ #if defined(LIBXML_FASTCALL)
+ #define XMLCALL __fastcall
+ #else
+ #define XMLCALL __cdecl
+ #endif
+ #define XMLCDECL __cdecl
+ #if !defined _REENTRANT
+ #define _REENTRANT
+ #endif
+#endif
+
+/* Windows platform with Borland compiler */
+#if defined(_WIN32) && defined(__BORLANDC__)
+ #undef XMLPUBFUN
+ #undef XMLPUBVAR
+ #undef XMLCALL
+ #undef XMLCDECL
+ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+ #define XMLPUBFUN __declspec(dllexport)
+ #define XMLPUBVAR __declspec(dllexport) extern
+ #else
+ #define XMLPUBFUN
+ #if !defined(LIBXML_STATIC)
+ #define XMLPUBVAR __declspec(dllimport) extern
+ #else
+ #define XMLPUBVAR extern
+ #endif
+ #endif
+ #define XMLCALL __cdecl
+ #define XMLCDECL __cdecl
+ #if !defined _REENTRANT
+ #define _REENTRANT
+ #endif
+#endif
+
+/* Windows platform with GNU compiler (Mingw) */
+#if defined(_WIN32) && defined(__MINGW32__)
+ #undef XMLPUBFUN
+ #undef XMLPUBVAR
+ #undef XMLCALL
+ #undef XMLCDECL
+ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+ #define XMLPUBFUN __declspec(dllexport)
+ #define XMLPUBVAR __declspec(dllexport)
+ #else
+ #define XMLPUBFUN
+ #if !defined(LIBXML_STATIC)
+ #define XMLPUBVAR __declspec(dllimport) extern
+ #else
+ #define XMLPUBVAR extern
+ #endif
+ #endif
+ #define XMLCALL __cdecl
+ #define XMLCDECL __cdecl
+ #if !defined _REENTRANT
+ #define _REENTRANT
+ #endif
+#endif
+
+/* Cygwin platform, GNU compiler */
+#if defined(_WIN32) && defined(__CYGWIN__)
+ #undef XMLPUBFUN
+ #undef XMLPUBVAR
+ #undef XMLCALL
+ #undef XMLCDECL
+ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+ #define XMLPUBFUN __declspec(dllexport)
+ #define XMLPUBVAR __declspec(dllexport)
+ #else
+ #define XMLPUBFUN
+ #if !defined(LIBXML_STATIC)
+ #define XMLPUBVAR __declspec(dllimport) extern
+ #else
+ #define XMLPUBVAR
+ #endif
+ #endif
+ #define XMLCALL __cdecl
+ #define XMLCDECL __cdecl
+#endif
+
+/* Compatibility */
+#if !defined(LIBXML_DLL_IMPORT)
+#define LIBXML_DLL_IMPORT XMLPUBVAR
+#endif
+
+#endif /* __XML_EXPORTS_H__ */
+
+
diff --git a/interfaces/ext/libxml/xmlmemory.h b/interfaces/ext/libxml/xmlmemory.h
new file mode 100644
index 0000000..8f3b109
--- /dev/null
+++ b/interfaces/ext/libxml/xmlmemory.h
@@ -0,0 +1,224 @@
+/*
+ * Summary: interface for the memory allocator
+ * Description: provides interfaces for the memory allocator,
+ * including debugging capabilities.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __DEBUG_MEMORY_ALLOC__
+#define __DEBUG_MEMORY_ALLOC__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+
+/**
+ * DEBUG_MEMORY:
+ *
+ * DEBUG_MEMORY replaces the allocator with a collect and debug
+ * shell to the libc allocator.
+ * DEBUG_MEMORY should only be activated when debugging
+ * libxml i.e. if libxml has been configured with --with-debug-mem too.
+ */
+/* #define DEBUG_MEMORY_FREED */
+/* #define DEBUG_MEMORY_LOCATION */
+
+#ifdef DEBUG
+#ifndef DEBUG_MEMORY
+#define DEBUG_MEMORY
+#endif
+#endif
+
+/**
+ * DEBUG_MEMORY_LOCATION:
+ *
+ * DEBUG_MEMORY_LOCATION should be activated only when debugging
+ * libxml i.e. if libxml has been configured with --with-debug-mem too.
+ */
+#ifdef DEBUG_MEMORY_LOCATION
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The XML memory wrapper support 4 basic overloadable functions.
+ */
+/**
+ * xmlFreeFunc:
+ * @mem: an already allocated block of memory
+ *
+ * Signature for a free() implementation.
+ */
+typedef void (XMLCALL *xmlFreeFunc)(void *mem);
+/**
+ * xmlMallocFunc:
+ * @size: the size requested in bytes
+ *
+ * Signature for a malloc() implementation.
+ *
+ * Returns a pointer to the newly allocated block or NULL in case of error.
+ */
+typedef void *(ATTRIBUTE_ALLOC_SIZE(1) XMLCALL *xmlMallocFunc)(size_t size);
+
+/**
+ * xmlReallocFunc:
+ * @mem: an already allocated block of memory
+ * @size: the new size requested in bytes
+ *
+ * Signature for a realloc() implementation.
+ *
+ * Returns a pointer to the newly reallocated block or NULL in case of error.
+ */
+typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
+
+/**
+ * xmlStrdupFunc:
+ * @str: a zero terminated string
+ *
+ * Signature for an strdup() implementation.
+ *
+ * Returns the copy of the string or NULL in case of error.
+ */
+typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
+
+/*
+ * The 4 interfaces used for all memory handling within libxml.
+LIBXML_DLL_IMPORT extern xmlFreeFunc xmlFree;
+LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMalloc;
+LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMallocAtomic;
+LIBXML_DLL_IMPORT extern xmlReallocFunc xmlRealloc;
+LIBXML_DLL_IMPORT extern xmlStrdupFunc xmlMemStrdup;
+ */
+
+/*
+ * The way to overload the existing functions.
+ * The xmlGc function have an extra entry for atomic block
+ * allocations useful for garbage collected memory allocators
+ */
+XMLPUBFUN int XMLCALL
+ xmlMemSetup (xmlFreeFunc freeFunc,
+ xmlMallocFunc mallocFunc,
+ xmlReallocFunc reallocFunc,
+ xmlStrdupFunc strdupFunc);
+XMLPUBFUN int XMLCALL
+ xmlMemGet (xmlFreeFunc *freeFunc,
+ xmlMallocFunc *mallocFunc,
+ xmlReallocFunc *reallocFunc,
+ xmlStrdupFunc *strdupFunc);
+XMLPUBFUN int XMLCALL
+ xmlGcMemSetup (xmlFreeFunc freeFunc,
+ xmlMallocFunc mallocFunc,
+ xmlMallocFunc mallocAtomicFunc,
+ xmlReallocFunc reallocFunc,
+ xmlStrdupFunc strdupFunc);
+XMLPUBFUN int XMLCALL
+ xmlGcMemGet (xmlFreeFunc *freeFunc,
+ xmlMallocFunc *mallocFunc,
+ xmlMallocFunc *mallocAtomicFunc,
+ xmlReallocFunc *reallocFunc,
+ xmlStrdupFunc *strdupFunc);
+
+/*
+ * Initialization of the memory layer.
+ */
+XMLPUBFUN int XMLCALL
+ xmlInitMemory (void);
+
+/*
+ * Cleanup of the memory layer.
+ */
+XMLPUBFUN void XMLCALL
+ xmlCleanupMemory (void);
+/*
+ * These are specific to the XML debug memory wrapper.
+ */
+XMLPUBFUN int XMLCALL
+ xmlMemUsed (void);
+XMLPUBFUN int XMLCALL
+ xmlMemBlocks (void);
+XMLPUBFUN void XMLCALL
+ xmlMemDisplay (FILE *fp);
+XMLPUBFUN void XMLCALL
+ xmlMemDisplayLast(FILE *fp, long nbBytes);
+XMLPUBFUN void XMLCALL
+ xmlMemShow (FILE *fp, int nr);
+XMLPUBFUN void XMLCALL
+ xmlMemoryDump (void);
+XMLPUBFUN void * XMLCALL
+ xmlMemMalloc (size_t size) ATTRIBUTE_ALLOC_SIZE(1);
+XMLPUBFUN void * XMLCALL
+ xmlMemRealloc (void *ptr,size_t size);
+XMLPUBFUN void XMLCALL
+ xmlMemFree (void *ptr);
+XMLPUBFUN char * XMLCALL
+ xmlMemoryStrdup (const char *str);
+XMLPUBFUN void * XMLCALL
+ xmlMallocLoc (size_t size, const char *file, int line) ATTRIBUTE_ALLOC_SIZE(1);
+XMLPUBFUN void * XMLCALL
+ xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
+XMLPUBFUN void * XMLCALL
+ xmlMallocAtomicLoc (size_t size, const char *file, int line) ATTRIBUTE_ALLOC_SIZE(1);
+XMLPUBFUN char * XMLCALL
+ xmlMemStrdupLoc (const char *str, const char *file, int line);
+
+
+#ifdef DEBUG_MEMORY_LOCATION
+/**
+ * xmlMalloc:
+ * @size: number of bytes to allocate
+ *
+ * Wrapper for the malloc() function used in the XML library.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
+/**
+ * xmlMallocAtomic:
+ * @size: number of bytes to allocate
+ *
+ * Wrapper for the malloc() function used in the XML library for allocation
+ * of block not containing pointers to other areas.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
+/**
+ * xmlRealloc:
+ * @ptr: pointer to the existing allocated area
+ * @size: number of bytes to allocate
+ *
+ * Wrapper for the realloc() function used in the XML library.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
+/**
+ * xmlMemStrdup:
+ * @str: pointer to the existing string
+ *
+ * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
+
+#endif /* DEBUG_MEMORY_LOCATION */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#ifndef __XML_GLOBALS_H
+#ifndef __XML_THREADS_H__
+#include <libxml/threads.h>
+#include <libxml/globals.h>
+#endif
+#endif
+
+#endif /* __DEBUG_MEMORY_ALLOC__ */
+
diff --git a/interfaces/ext/libxml/xmlmodule.h b/interfaces/ext/libxml/xmlmodule.h
new file mode 100644
index 0000000..8f4a560
--- /dev/null
+++ b/interfaces/ext/libxml/xmlmodule.h
@@ -0,0 +1,57 @@
+/*
+ * Summary: dynamic module loading
+ * Description: basic API for dynamic module loading, used by
+ * libexslt added in 2.6.17
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Joel W. Reed
+ */
+
+#ifndef __XML_MODULE_H__
+#define __XML_MODULE_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_MODULES_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlModulePtr:
+ *
+ * A handle to a dynamically loaded module
+ */
+typedef struct _xmlModule xmlModule;
+typedef xmlModule *xmlModulePtr;
+
+/**
+ * xmlModuleOption:
+ *
+ * enumeration of options that can be passed down to xmlModuleOpen()
+ */
+typedef enum {
+ XML_MODULE_LAZY = 1, /* lazy binding */
+ XML_MODULE_LOCAL= 2 /* local binding */
+} xmlModuleOption;
+
+XMLPUBFUN xmlModulePtr XMLCALL xmlModuleOpen (const char *filename,
+ int options);
+
+XMLPUBFUN int XMLCALL xmlModuleSymbol (xmlModulePtr module,
+ const char* name,
+ void **result);
+
+XMLPUBFUN int XMLCALL xmlModuleClose (xmlModulePtr module);
+
+XMLPUBFUN int XMLCALL xmlModuleFree (xmlModulePtr module);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_MODULES_ENABLED */
+
+#endif /*__XML_MODULE_H__ */
diff --git a/interfaces/ext/libxml/xmlreader.h b/interfaces/ext/libxml/xmlreader.h
new file mode 100644
index 0000000..6964482
--- /dev/null
+++ b/interfaces/ext/libxml/xmlreader.h
@@ -0,0 +1,424 @@
+/*
+ * Summary: the XMLReader implementation
+ * Description: API of the XML streaming API based on C# interfaces.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XMLREADER_H__
+#define __XML_XMLREADER_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xmlIO.h>
+#ifdef LIBXML_SCHEMAS_ENABLED
+#include <libxml/relaxng.h>
+#include <libxml/xmlschemas.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlParserSeverities:
+ *
+ * How severe an error callback is when the per-reader error callback API
+ * is used.
+ */
+typedef enum {
+ XML_PARSER_SEVERITY_VALIDITY_WARNING = 1,
+ XML_PARSER_SEVERITY_VALIDITY_ERROR = 2,
+ XML_PARSER_SEVERITY_WARNING = 3,
+ XML_PARSER_SEVERITY_ERROR = 4
+} xmlParserSeverities;
+
+#ifdef LIBXML_READER_ENABLED
+
+/**
+ * xmlTextReaderMode:
+ *
+ * Internal state values for the reader.
+ */
+typedef enum {
+ XML_TEXTREADER_MODE_INITIAL = 0,
+ XML_TEXTREADER_MODE_INTERACTIVE = 1,
+ XML_TEXTREADER_MODE_ERROR = 2,
+ XML_TEXTREADER_MODE_EOF =3,
+ XML_TEXTREADER_MODE_CLOSED = 4,
+ XML_TEXTREADER_MODE_READING = 5
+} xmlTextReaderMode;
+
+/**
+ * xmlParserProperties:
+ *
+ * Some common options to use with xmlTextReaderSetParserProp, but it
+ * is better to use xmlParserOption and the xmlReaderNewxxx and
+ * xmlReaderForxxx APIs now.
+ */
+typedef enum {
+ XML_PARSER_LOADDTD = 1,
+ XML_PARSER_DEFAULTATTRS = 2,
+ XML_PARSER_VALIDATE = 3,
+ XML_PARSER_SUBST_ENTITIES = 4
+} xmlParserProperties;
+
+/**
+ * xmlReaderTypes:
+ *
+ * Predefined constants for the different types of nodes.
+ */
+typedef enum {
+ XML_READER_TYPE_NONE = 0,
+ XML_READER_TYPE_ELEMENT = 1,
+ XML_READER_TYPE_ATTRIBUTE = 2,
+ XML_READER_TYPE_TEXT = 3,
+ XML_READER_TYPE_CDATA = 4,
+ XML_READER_TYPE_ENTITY_REFERENCE = 5,
+ XML_READER_TYPE_ENTITY = 6,
+ XML_READER_TYPE_PROCESSING_INSTRUCTION = 7,
+ XML_READER_TYPE_COMMENT = 8,
+ XML_READER_TYPE_DOCUMENT = 9,
+ XML_READER_TYPE_DOCUMENT_TYPE = 10,
+ XML_READER_TYPE_DOCUMENT_FRAGMENT = 11,
+ XML_READER_TYPE_NOTATION = 12,
+ XML_READER_TYPE_WHITESPACE = 13,
+ XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14,
+ XML_READER_TYPE_END_ELEMENT = 15,
+ XML_READER_TYPE_END_ENTITY = 16,
+ XML_READER_TYPE_XML_DECLARATION = 17
+} xmlReaderTypes;
+
+/**
+ * xmlTextReader:
+ *
+ * Structure for an xmlReader context.
+ */
+typedef struct _xmlTextReader xmlTextReader;
+
+/**
+ * xmlTextReaderPtr:
+ *
+ * Pointer to an xmlReader context.
+ */
+typedef xmlTextReader *xmlTextReaderPtr;
+
+/*
+ * Constructors & Destructor
+ */
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlNewTextReader (xmlParserInputBufferPtr input,
+ const char *URI);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlNewTextReaderFilename(const char *URI);
+
+XMLPUBFUN void XMLCALL
+ xmlFreeTextReader (xmlTextReaderPtr reader);
+
+XMLPUBFUN int XMLCALL
+ xmlTextReaderSetup(xmlTextReaderPtr reader,
+ xmlParserInputBufferPtr input, const char *URL,
+ const char *encoding, int options);
+
+/*
+ * Iterators
+ */
+XMLPUBFUN int XMLCALL
+ xmlTextReaderRead (xmlTextReaderPtr reader);
+
+#ifdef LIBXML_WRITER_ENABLED
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderReadInnerXml (xmlTextReaderPtr reader);
+
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderReadOuterXml (xmlTextReaderPtr reader);
+#endif
+
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderReadString (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderReadAttributeValue (xmlTextReaderPtr reader);
+
+/*
+ * Attributes of the node
+ */
+XMLPUBFUN int XMLCALL
+ xmlTextReaderAttributeCount(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderDepth (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderHasAttributes(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderHasValue(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderIsDefault (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderNodeType (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderQuoteChar (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderReadState (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader);
+
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstBaseUri (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstLocalName (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstName (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstPrefix (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstXmlLang (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstString (xmlTextReaderPtr reader,
+ const xmlChar *str);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstValue (xmlTextReaderPtr reader);
+
+/*
+ * use the Const version of the routine for
+ * better performance and simpler code
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderBaseUri (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderLocalName (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderName (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderNamespaceUri(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderPrefix (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderXmlLang (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderValue (xmlTextReaderPtr reader);
+
+/*
+ * Methods of the XmlTextReader
+ */
+XMLPUBFUN int XMLCALL
+ xmlTextReaderClose (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderGetAttributeNo (xmlTextReaderPtr reader,
+ int no);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderGetAttribute (xmlTextReaderPtr reader,
+ const xmlChar *name);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderGetAttributeNs (xmlTextReaderPtr reader,
+ const xmlChar *localName,
+ const xmlChar *namespaceURI);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlTextReaderGetRemainder (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderLookupNamespace(xmlTextReaderPtr reader,
+ const xmlChar *prefix);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader,
+ int no);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader,
+ const xmlChar *name);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
+ const xmlChar *localName,
+ const xmlChar *namespaceURI);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToElement (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderNormalization (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstEncoding (xmlTextReaderPtr reader);
+
+/*
+ * Extensions
+ */
+XMLPUBFUN int XMLCALL
+ xmlTextReaderSetParserProp (xmlTextReaderPtr reader,
+ int prop,
+ int value);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderGetParserProp (xmlTextReaderPtr reader,
+ int prop);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlTextReaderCurrentNode (xmlTextReaderPtr reader);
+
+XMLPUBFUN int XMLCALL
+ xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader);
+
+XMLPUBFUN int XMLCALL
+ xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader);
+
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlTextReaderPreserve (xmlTextReaderPtr reader);
+#ifdef LIBXML_PATTERN_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlTextReaderPreservePattern(xmlTextReaderPtr reader,
+ const xmlChar *pattern,
+ const xmlChar **namespaces);
+#endif /* LIBXML_PATTERN_ENABLED */
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlTextReaderCurrentDoc (xmlTextReaderPtr reader);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlTextReaderExpand (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderNext (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderNextSibling (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderIsValid (xmlTextReaderPtr reader);
+#ifdef LIBXML_SCHEMAS_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader,
+ const char *rng);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
+ xmlRelaxNGPtr schema);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderSchemaValidate (xmlTextReaderPtr reader,
+ const char *xsd);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderSchemaValidateCtxt(xmlTextReaderPtr reader,
+ xmlSchemaValidCtxtPtr ctxt,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderSetSchema (xmlTextReaderPtr reader,
+ xmlSchemaPtr schema);
+#endif
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderStandalone (xmlTextReaderPtr reader);
+
+
+/*
+ * Index lookup
+ */
+XMLPUBFUN long XMLCALL
+ xmlTextReaderByteConsumed (xmlTextReaderPtr reader);
+
+/*
+ * New more complete APIs for simpler creation and reuse of readers
+ */
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderWalker (xmlDocPtr doc);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForDoc (const xmlChar * cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForFile (const char *filename,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForMemory (const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForFd (int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForIO (xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+
+XMLPUBFUN int XMLCALL
+ xmlReaderNewWalker (xmlTextReaderPtr reader,
+ xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewDoc (xmlTextReaderPtr reader,
+ const xmlChar * cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewFile (xmlTextReaderPtr reader,
+ const char *filename,
+ const char *encoding,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewMemory (xmlTextReaderPtr reader,
+ const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewFd (xmlTextReaderPtr reader,
+ int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewIO (xmlTextReaderPtr reader,
+ xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+/*
+ * Error handling extensions
+ */
+typedef void * xmlTextReaderLocatorPtr;
+
+/**
+ * xmlTextReaderErrorFunc:
+ * @arg: the user argument
+ * @msg: the message
+ * @severity: the severity of the error
+ * @locator: a locator indicating where the error occured
+ *
+ * Signature of an error callback from a reader parser
+ */
+typedef void (XMLCALL *xmlTextReaderErrorFunc)(void *arg,
+ const char *msg,
+ xmlParserSeverities severity,
+ xmlTextReaderLocatorPtr locator);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
+/*int xmlTextReaderLocatorLinePosition(xmlTextReaderLocatorPtr locator);*/
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
+XMLPUBFUN void XMLCALL
+ xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
+ xmlTextReaderErrorFunc f,
+ void *arg);
+XMLPUBFUN void XMLCALL
+ xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
+ xmlStructuredErrorFunc f,
+ void *arg);
+XMLPUBFUN void XMLCALL
+ xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
+ xmlTextReaderErrorFunc *f,
+ void **arg);
+
+#endif /* LIBXML_READER_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_XMLREADER_H__ */
+
diff --git a/interfaces/ext/libxml/xmlregexp.h b/interfaces/ext/libxml/xmlregexp.h
new file mode 100644
index 0000000..7009645
--- /dev/null
+++ b/interfaces/ext/libxml/xmlregexp.h
@@ -0,0 +1,222 @@
+/*
+ * Summary: regular expressions handling
+ * Description: basic API for libxml regular expressions handling used
+ * for XML Schemas and validation.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_REGEXP_H__
+#define __XML_REGEXP_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_REGEXP_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlRegexpPtr:
+ *
+ * A libxml regular expression, they can actually be far more complex
+ * thank the POSIX regex expressions.
+ */
+typedef struct _xmlRegexp xmlRegexp;
+typedef xmlRegexp *xmlRegexpPtr;
+
+/**
+ * xmlRegExecCtxtPtr:
+ *
+ * A libxml progressive regular expression evaluation context
+ */
+typedef struct _xmlRegExecCtxt xmlRegExecCtxt;
+typedef xmlRegExecCtxt *xmlRegExecCtxtPtr;
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/tree.h>
+#include <libxml/dict.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The POSIX like API
+ */
+XMLPUBFUN xmlRegexpPtr XMLCALL
+ xmlRegexpCompile (const xmlChar *regexp);
+XMLPUBFUN void XMLCALL xmlRegFreeRegexp(xmlRegexpPtr regexp);
+XMLPUBFUN int XMLCALL
+ xmlRegexpExec (xmlRegexpPtr comp,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ xmlRegexpPrint (FILE *output,
+ xmlRegexpPtr regexp);
+XMLPUBFUN int XMLCALL
+ xmlRegexpIsDeterminist(xmlRegexpPtr comp);
+
+/**
+ * xmlRegExecCallbacks:
+ * @exec: the regular expression context
+ * @token: the current token string
+ * @transdata: transition data
+ * @inputdata: input data
+ *
+ * Callback function when doing a transition in the automata
+ */
+typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec,
+ const xmlChar *token,
+ void *transdata,
+ void *inputdata);
+
+/*
+ * The progressive API
+ */
+XMLPUBFUN xmlRegExecCtxtPtr XMLCALL
+ xmlRegNewExecCtxt (xmlRegexpPtr comp,
+ xmlRegExecCallbacks callback,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec);
+XMLPUBFUN int XMLCALL
+ xmlRegExecPushString(xmlRegExecCtxtPtr exec,
+ const xmlChar *value,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlRegExecPushString2(xmlRegExecCtxtPtr exec,
+ const xmlChar *value,
+ const xmlChar *value2,
+ void *data);
+
+XMLPUBFUN int XMLCALL
+ xmlRegExecNextValues(xmlRegExecCtxtPtr exec,
+ int *nbval,
+ int *nbneg,
+ xmlChar **values,
+ int *terminal);
+XMLPUBFUN int XMLCALL
+ xmlRegExecErrInfo (xmlRegExecCtxtPtr exec,
+ const xmlChar **string,
+ int *nbval,
+ int *nbneg,
+ xmlChar **values,
+ int *terminal);
+#ifdef LIBXML_EXPR_ENABLED
+/*
+ * Formal regular expression handling
+ * Its goal is to do some formal work on content models
+ */
+
+/* expressions are used within a context */
+typedef struct _xmlExpCtxt xmlExpCtxt;
+typedef xmlExpCtxt *xmlExpCtxtPtr;
+
+XMLPUBFUN void XMLCALL
+ xmlExpFreeCtxt (xmlExpCtxtPtr ctxt);
+XMLPUBFUN xmlExpCtxtPtr XMLCALL
+ xmlExpNewCtxt (int maxNodes,
+ xmlDictPtr dict);
+
+XMLPUBFUN int XMLCALL
+ xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt);
+
+/* Expressions are trees but the tree is opaque */
+typedef struct _xmlExpNode xmlExpNode;
+typedef xmlExpNode *xmlExpNodePtr;
+
+typedef enum {
+ XML_EXP_EMPTY = 0,
+ XML_EXP_FORBID = 1,
+ XML_EXP_ATOM = 2,
+ XML_EXP_SEQ = 3,
+ XML_EXP_OR = 4,
+ XML_EXP_COUNT = 5
+} xmlExpNodeType;
+
+/*
+ * 2 core expressions shared by all for the empty language set
+ * and for the set with just the empty token
+ */
+XMLPUBVAR xmlExpNodePtr forbiddenExp;
+XMLPUBVAR xmlExpNodePtr emptyExp;
+
+/*
+ * Expressions are reference counted internally
+ */
+XMLPUBFUN void XMLCALL
+ xmlExpFree (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr);
+XMLPUBFUN void XMLCALL
+ xmlExpRef (xmlExpNodePtr expr);
+
+/*
+ * constructors can be either manual or from a string
+ */
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpParse (xmlExpCtxtPtr ctxt,
+ const char *expr);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpNewAtom (xmlExpCtxtPtr ctxt,
+ const xmlChar *name,
+ int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpNewOr (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr left,
+ xmlExpNodePtr right);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpNewSeq (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr left,
+ xmlExpNodePtr right);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpNewRange (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr subset,
+ int min,
+ int max);
+/*
+ * The really interesting APIs
+ */
+XMLPUBFUN int XMLCALL
+ xmlExpIsNillable(xmlExpNodePtr expr);
+XMLPUBFUN int XMLCALL
+ xmlExpMaxToken (xmlExpNodePtr expr);
+XMLPUBFUN int XMLCALL
+ xmlExpGetLanguage(xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ const xmlChar**langList,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlExpGetStart (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ const xmlChar**tokList,
+ int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpStringDerive(xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ const xmlChar *str,
+ int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpExpDerive (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ xmlExpNodePtr sub);
+XMLPUBFUN int XMLCALL
+ xmlExpSubsume (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ xmlExpNodePtr sub);
+XMLPUBFUN void XMLCALL
+ xmlExpDump (xmlBufferPtr buf,
+ xmlExpNodePtr expr);
+#endif /* LIBXML_EXPR_ENABLED */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_REGEXP_ENABLED */
+
+#endif /*__XML_REGEXP_H__ */
diff --git a/interfaces/ext/libxml/xmlsave.h b/interfaces/ext/libxml/xmlsave.h
new file mode 100644
index 0000000..4201b4d
--- /dev/null
+++ b/interfaces/ext/libxml/xmlsave.h
@@ -0,0 +1,87 @@
+/*
+ * Summary: the XML document serializer
+ * Description: API to save document or subtree of document
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XMLSAVE_H__
+#define __XML_XMLSAVE_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/encoding.h>
+#include <libxml/xmlIO.h>
+
+#ifdef LIBXML_OUTPUT_ENABLED
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlSaveOption:
+ *
+ * This is the set of XML save options that can be passed down
+ * to the xmlSaveToFd() and similar calls.
+ */
+typedef enum {
+ XML_SAVE_FORMAT = 1<<0, /* format save output */
+ XML_SAVE_NO_DECL = 1<<1, /* drop the xml declaration */
+ XML_SAVE_NO_EMPTY = 1<<2, /* no empty tags */
+ XML_SAVE_NO_XHTML = 1<<3, /* disable XHTML1 specific rules */
+ XML_SAVE_XHTML = 1<<4, /* force XHTML1 specific rules */
+ XML_SAVE_AS_XML = 1<<5, /* force XML serialization on HTML doc */
+ XML_SAVE_AS_HTML = 1<<6 /* force HTML serialization on XML doc */
+} xmlSaveOption;
+
+
+typedef struct _xmlSaveCtxt xmlSaveCtxt;
+typedef xmlSaveCtxt *xmlSaveCtxtPtr;
+
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+ xmlSaveToFd (int fd,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+ xmlSaveToFilename (const char *filename,
+ const char *encoding,
+ int options);
+
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+ xmlSaveToBuffer (xmlBufferPtr buffer,
+ const char *encoding,
+ int options);
+
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+ xmlSaveToIO (xmlOutputWriteCallback iowrite,
+ xmlOutputCloseCallback ioclose,
+ void *ioctx,
+ const char *encoding,
+ int options);
+
+XMLPUBFUN long XMLCALL
+ xmlSaveDoc (xmlSaveCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN long XMLCALL
+ xmlSaveTree (xmlSaveCtxtPtr ctxt,
+ xmlNodePtr node);
+
+XMLPUBFUN int XMLCALL
+ xmlSaveFlush (xmlSaveCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlSaveClose (xmlSaveCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlSaveSetEscape (xmlSaveCtxtPtr ctxt,
+ xmlCharEncodingOutputFunc escape);
+XMLPUBFUN int XMLCALL
+ xmlSaveSetAttrEscape (xmlSaveCtxtPtr ctxt,
+ xmlCharEncodingOutputFunc escape);
+#ifdef __cplusplus
+}
+#endif
+#endif /* LIBXML_OUTPUT_ENABLED */
+#endif /* __XML_XMLSAVE_H__ */
+
+
diff --git a/interfaces/ext/libxml/xmlschemas.h b/interfaces/ext/libxml/xmlschemas.h
new file mode 100644
index 0000000..ebef3a7
--- /dev/null
+++ b/interfaces/ext/libxml/xmlschemas.h
@@ -0,0 +1,218 @@
+/*
+ * Summary: incomplete XML Schemas structure implementation
+ * Description: interface to the XML Schemas handling and schema validity
+ * checking, it is incomplete right now.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMA_H__
+#define __XML_SCHEMA_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * This error codes are obsolete; not used any more.
+ */
+typedef enum {
+ XML_SCHEMAS_ERR_OK = 0,
+ XML_SCHEMAS_ERR_NOROOT = 1,
+ XML_SCHEMAS_ERR_UNDECLAREDELEM,
+ XML_SCHEMAS_ERR_NOTTOPLEVEL,
+ XML_SCHEMAS_ERR_MISSING,
+ XML_SCHEMAS_ERR_WRONGELEM,
+ XML_SCHEMAS_ERR_NOTYPE,
+ XML_SCHEMAS_ERR_NOROLLBACK,
+ XML_SCHEMAS_ERR_ISABSTRACT,
+ XML_SCHEMAS_ERR_NOTEMPTY,
+ XML_SCHEMAS_ERR_ELEMCONT,
+ XML_SCHEMAS_ERR_HAVEDEFAULT,
+ XML_SCHEMAS_ERR_NOTNILLABLE,
+ XML_SCHEMAS_ERR_EXTRACONTENT,
+ XML_SCHEMAS_ERR_INVALIDATTR,
+ XML_SCHEMAS_ERR_INVALIDELEM,
+ XML_SCHEMAS_ERR_NOTDETERMINIST,
+ XML_SCHEMAS_ERR_CONSTRUCT,
+ XML_SCHEMAS_ERR_INTERNAL,
+ XML_SCHEMAS_ERR_NOTSIMPLE,
+ XML_SCHEMAS_ERR_ATTRUNKNOWN,
+ XML_SCHEMAS_ERR_ATTRINVALID,
+ XML_SCHEMAS_ERR_VALUE,
+ XML_SCHEMAS_ERR_FACET,
+ XML_SCHEMAS_ERR_,
+ XML_SCHEMAS_ERR_XXX
+} xmlSchemaValidError;
+
+/*
+* ATTENTION: Change xmlSchemaSetValidOptions's check
+* for invalid values, if adding to the validation
+* options below.
+*/
+/**
+ * xmlSchemaValidOption:
+ *
+ * This is the set of XML Schema validation options.
+ */
+typedef enum {
+ XML_SCHEMA_VAL_VC_I_CREATE = 1<<0
+ /* Default/fixed: create an attribute node
+ * or an element's text node on the instance.
+ */
+} xmlSchemaValidOption;
+
+/*
+ XML_SCHEMA_VAL_XSI_ASSEMBLE = 1<<1,
+ * assemble schemata using
+ * xsi:schemaLocation and
+ * xsi:noNamespaceSchemaLocation
+*/
+
+/**
+ * The schemas related types are kept internal
+ */
+typedef struct _xmlSchema xmlSchema;
+typedef xmlSchema *xmlSchemaPtr;
+
+/**
+ * xmlSchemaValidityErrorFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of an error callback from an XSD validation
+ */
+typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) (void *ctx, const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * xmlSchemaValidityWarningFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of a warning callback from an XSD validation
+ */
+typedef void (XMLCDECL *xmlSchemaValidityWarningFunc) (void *ctx, const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * A schemas validation context
+ */
+typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt;
+typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr;
+
+typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt;
+typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr;
+
+/*
+ * Interfaces for parsing.
+ */
+XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
+ xmlSchemaNewParserCtxt (const char *URL);
+XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
+ xmlSchemaNewMemParserCtxt (const char *buffer,
+ int size);
+XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
+ xmlSchemaNewDocParserCtxt (xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFreeParserCtxt (xmlSchemaParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlSchemaSetParserErrors (xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaValidityErrorFunc err,
+ xmlSchemaValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlSchemaSetParserStructuredErrors(xmlSchemaParserCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchemaGetParserErrors(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaValidityErrorFunc * err,
+ xmlSchemaValidityWarningFunc * warn,
+ void **ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchemaIsValid (xmlSchemaValidCtxtPtr ctxt);
+
+XMLPUBFUN xmlSchemaPtr XMLCALL
+ xmlSchemaParse (xmlSchemaParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFree (xmlSchemaPtr schema);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlSchemaDump (FILE *output,
+ xmlSchemaPtr schema);
+#endif /* LIBXML_OUTPUT_ENABLED */
+/*
+ * Interfaces for validating
+ */
+XMLPUBFUN void XMLCALL
+ xmlSchemaSetValidErrors (xmlSchemaValidCtxtPtr ctxt,
+ xmlSchemaValidityErrorFunc err,
+ xmlSchemaValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchemaGetValidErrors (xmlSchemaValidCtxtPtr ctxt,
+ xmlSchemaValidityErrorFunc *err,
+ xmlSchemaValidityWarningFunc *warn,
+ void **ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchemaSetValidOptions (xmlSchemaValidCtxtPtr ctxt,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt);
+
+XMLPUBFUN xmlSchemaValidCtxtPtr XMLCALL
+ xmlSchemaNewValidCtxt (xmlSchemaPtr schema);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFreeValidCtxt (xmlSchemaValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateDoc (xmlSchemaValidCtxtPtr ctxt,
+ xmlDocPtr instance);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateOneElement (xmlSchemaValidCtxtPtr ctxt,
+ xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateStream (xmlSchemaValidCtxtPtr ctxt,
+ xmlParserInputBufferPtr input,
+ xmlCharEncoding enc,
+ xmlSAXHandlerPtr sax,
+ void *user_data);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateFile (xmlSchemaValidCtxtPtr ctxt,
+ const char * filename,
+ int options);
+
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt);
+
+/*
+ * Interface to insert Schemas SAX validation in a SAX stream
+ */
+typedef struct _xmlSchemaSAXPlug xmlSchemaSAXPlugStruct;
+typedef xmlSchemaSAXPlugStruct *xmlSchemaSAXPlugPtr;
+
+XMLPUBFUN xmlSchemaSAXPlugPtr XMLCALL
+ xmlSchemaSAXPlug (xmlSchemaValidCtxtPtr ctxt,
+ xmlSAXHandlerPtr *sax,
+ void **user_data);
+XMLPUBFUN int XMLCALL
+ xmlSchemaSAXUnplug (xmlSchemaSAXPlugPtr plug);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#endif /* __XML_SCHEMA_H__ */
diff --git a/interfaces/ext/libxml/xmlschemastypes.h b/interfaces/ext/libxml/xmlschemastypes.h
new file mode 100644
index 0000000..9a3a7a1
--- /dev/null
+++ b/interfaces/ext/libxml/xmlschemastypes.h
@@ -0,0 +1,151 @@
+/*
+ * Summary: implementation of XML Schema Datatypes
+ * Description: module providing the XML Schema Datatypes implementation
+ * both definition and validity checking
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMA_TYPES_H__
+#define __XML_SCHEMA_TYPES_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/schemasInternals.h>
+#include <libxml/xmlschemas.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ XML_SCHEMA_WHITESPACE_UNKNOWN = 0,
+ XML_SCHEMA_WHITESPACE_PRESERVE = 1,
+ XML_SCHEMA_WHITESPACE_REPLACE = 2,
+ XML_SCHEMA_WHITESPACE_COLLAPSE = 3
+} xmlSchemaWhitespaceValueType;
+
+XMLPUBFUN void XMLCALL
+ xmlSchemaInitTypes (void);
+XMLPUBFUN void XMLCALL
+ xmlSchemaCleanupTypes (void);
+XMLPUBFUN xmlSchemaTypePtr XMLCALL
+ xmlSchemaGetPredefinedType (const xmlChar *name,
+ const xmlChar *ns);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidatePredefinedType (xmlSchemaTypePtr type,
+ const xmlChar *value,
+ xmlSchemaValPtr *val);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValPredefTypeNode (xmlSchemaTypePtr type,
+ const xmlChar *value,
+ xmlSchemaValPtr *val,
+ xmlNodePtr node);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateFacet (xmlSchemaTypePtr base,
+ xmlSchemaFacetPtr facet,
+ const xmlChar *value,
+ xmlSchemaValPtr val);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateFacetWhtsp (xmlSchemaFacetPtr facet,
+ xmlSchemaWhitespaceValueType fws,
+ xmlSchemaValType valType,
+ const xmlChar *value,
+ xmlSchemaValPtr val,
+ xmlSchemaWhitespaceValueType ws);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFreeValue (xmlSchemaValPtr val);
+XMLPUBFUN xmlSchemaFacetPtr XMLCALL
+ xmlSchemaNewFacet (void);
+XMLPUBFUN int XMLCALL
+ xmlSchemaCheckFacet (xmlSchemaFacetPtr facet,
+ xmlSchemaTypePtr typeDecl,
+ xmlSchemaParserCtxtPtr ctxt,
+ const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFreeFacet (xmlSchemaFacetPtr facet);
+XMLPUBFUN int XMLCALL
+ xmlSchemaCompareValues (xmlSchemaValPtr x,
+ xmlSchemaValPtr y);
+XMLPUBFUN xmlSchemaTypePtr XMLCALL
+ xmlSchemaGetBuiltInListSimpleTypeItemType (xmlSchemaTypePtr type);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateListSimpleTypeFacet (xmlSchemaFacetPtr facet,
+ const xmlChar *value,
+ unsigned long actualLen,
+ unsigned long *expectedLen);
+XMLPUBFUN xmlSchemaTypePtr XMLCALL
+ xmlSchemaGetBuiltInType (xmlSchemaValType type);
+XMLPUBFUN int XMLCALL
+ xmlSchemaIsBuiltInTypeFacet (xmlSchemaTypePtr type,
+ int facetType);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlSchemaCollapseString (const xmlChar *value);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlSchemaWhiteSpaceReplace (const xmlChar *value);
+XMLPUBFUN unsigned long XMLCALL
+ xmlSchemaGetFacetValueAsULong (xmlSchemaFacetPtr facet);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateLengthFacet (xmlSchemaTypePtr type,
+ xmlSchemaFacetPtr facet,
+ const xmlChar *value,
+ xmlSchemaValPtr val,
+ unsigned long *length);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
+ xmlSchemaValType valType,
+ const xmlChar *value,
+ xmlSchemaValPtr val,
+ unsigned long *length,
+ xmlSchemaWhitespaceValueType ws);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type,
+ const xmlChar *value,
+ xmlSchemaValPtr *val,
+ xmlNodePtr node);
+XMLPUBFUN int XMLCALL
+ xmlSchemaGetCanonValue (xmlSchemaValPtr val,
+ const xmlChar **retValue);
+XMLPUBFUN int XMLCALL
+ xmlSchemaGetCanonValueWhtsp (xmlSchemaValPtr val,
+ const xmlChar **retValue,
+ xmlSchemaWhitespaceValueType ws);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValueAppend (xmlSchemaValPtr prev,
+ xmlSchemaValPtr cur);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+ xmlSchemaValueGetNext (xmlSchemaValPtr cur);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlSchemaValueGetAsString (xmlSchemaValPtr val);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValueGetAsBoolean (xmlSchemaValPtr val);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+ xmlSchemaNewStringValue (xmlSchemaValType type,
+ const xmlChar *value);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+ xmlSchemaNewNOTATIONValue (const xmlChar *name,
+ const xmlChar *ns);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+ xmlSchemaNewQNameValue (const xmlChar *namespaceName,
+ const xmlChar *localName);
+XMLPUBFUN int XMLCALL
+ xmlSchemaCompareValuesWhtsp (xmlSchemaValPtr x,
+ xmlSchemaWhitespaceValueType xws,
+ xmlSchemaValPtr y,
+ xmlSchemaWhitespaceValueType yws);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+ xmlSchemaCopyValue (xmlSchemaValPtr val);
+XMLPUBFUN xmlSchemaValType XMLCALL
+ xmlSchemaGetValType (xmlSchemaValPtr val);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#endif /* __XML_SCHEMA_TYPES_H__ */
diff --git a/interfaces/ext/libxml/xmlstring.h b/interfaces/ext/libxml/xmlstring.h
new file mode 100644
index 0000000..1dfc5ea
--- /dev/null
+++ b/interfaces/ext/libxml/xmlstring.h
@@ -0,0 +1,140 @@
+/*
+ * Summary: set of routines to process strings
+ * Description: type and interfaces needed for the internal string handling
+ * of the library, especially UTF8 processing.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_STRING_H__
+#define __XML_STRING_H__
+
+#include <stdarg.h>
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlChar:
+ *
+ * This is a basic byte in an UTF-8 encoded string.
+ * It's unsigned allowing to pinpoint case where char * are assigned
+ * to xmlChar * (possibly making serialization back impossible).
+ */
+typedef unsigned char xmlChar;
+
+/**
+ * BAD_CAST:
+ *
+ * Macro to cast a string to an xmlChar * when one know its safe.
+ */
+#define BAD_CAST (xmlChar *)
+
+/*
+ * xmlChar handling
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrdup (const xmlChar *cur);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrndup (const xmlChar *cur,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCharStrndup (const char *cur,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCharStrdup (const char *cur);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrsub (const xmlChar *str,
+ int start,
+ int len);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlStrchr (const xmlChar *str,
+ xmlChar val);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlStrstr (const xmlChar *str,
+ const xmlChar *val);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlStrcasestr (const xmlChar *str,
+ xmlChar *val);
+XMLPUBFUN int XMLCALL
+ xmlStrcmp (const xmlChar *str1,
+ const xmlChar *str2);
+XMLPUBFUN int XMLCALL
+ xmlStrncmp (const xmlChar *str1,
+ const xmlChar *str2,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlStrcasecmp (const xmlChar *str1,
+ const xmlChar *str2);
+XMLPUBFUN int XMLCALL
+ xmlStrncasecmp (const xmlChar *str1,
+ const xmlChar *str2,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlStrEqual (const xmlChar *str1,
+ const xmlChar *str2);
+XMLPUBFUN int XMLCALL
+ xmlStrQEqual (const xmlChar *pref,
+ const xmlChar *name,
+ const xmlChar *str);
+XMLPUBFUN int XMLCALL
+ xmlStrlen (const xmlChar *str);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrcat (xmlChar *cur,
+ const xmlChar *add);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrncat (xmlChar *cur,
+ const xmlChar *add,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrncatNew (const xmlChar *str1,
+ const xmlChar *str2,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlStrPrintf (xmlChar *buf,
+ int len,
+ const xmlChar *msg,
+ ...);
+XMLPUBFUN int XMLCALL
+ xmlStrVPrintf (xmlChar *buf,
+ int len,
+ const xmlChar *msg,
+ va_list ap);
+
+XMLPUBFUN int XMLCALL
+ xmlGetUTF8Char (const unsigned char *utf,
+ int *len);
+XMLPUBFUN int XMLCALL
+ xmlCheckUTF8 (const unsigned char *utf);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Strsize (const xmlChar *utf,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlUTF8Strndup (const xmlChar *utf,
+ int len);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlUTF8Strpos (const xmlChar *utf,
+ int pos);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Strloc (const xmlChar *utf,
+ const xmlChar *utfchar);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlUTF8Strsub (const xmlChar *utf,
+ int start,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Strlen (const xmlChar *utf);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Size (const xmlChar *utf);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Charcmp (const xmlChar *utf1,
+ const xmlChar *utf2);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_STRING_H__ */
diff --git a/interfaces/ext/libxml/xmlunicode.h b/interfaces/ext/libxml/xmlunicode.h
new file mode 100644
index 0000000..01ac8b6
--- /dev/null
+++ b/interfaces/ext/libxml/xmlunicode.h
@@ -0,0 +1,202 @@
+/*
+ * Summary: Unicode character APIs
+ * Description: API for the Unicode character APIs
+ *
+ * This file is automatically generated from the
+ * UCS description files of the Unicode Character Database
+ * http://www.unicode.org/Public/4.0-Update1/UCD-4.0.1.html
+ * using the genUnicode.py Python script.
+ *
+ * Generation date: Mon Mar 27 11:09:52 2006
+ * Sources: Blocks-4.0.1.txt UnicodeData-4.0.1.txt
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_UNICODE_H__
+#define __XML_UNICODE_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_UNICODE_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN int XMLCALL xmlUCSIsAegeanNumbers (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsAlphabeticPresentationForms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArabic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArmenian (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArrows (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBasicLatin (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBengali (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBlockElements (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBopomofo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBopomofoExtended (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBoxDrawing (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBraillePatterns (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBuhid (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsByzantineMusicalSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibility (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityForms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographs (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographsSupplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKRadicalsSupplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKSymbolsandPunctuation (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographs (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCherokee (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarks (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarksforSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningHalfMarks (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningMarksforSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsControlPictures (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCurrencySymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCypriotSyllabary (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCyrillic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCyrillicSupplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsDeseret (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsDevanagari (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsDingbats (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsEnclosedAlphanumerics (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsEnclosedCJKLettersandMonths (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsEthiopic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGeneralPunctuation (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGeometricShapes (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGeorgian (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGothic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGreek (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGreekExtended (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGreekandCoptic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGujarati (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGurmukhi (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHalfwidthandFullwidthForms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHangulCompatibilityJamo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHangulJamo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHangulSyllables (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHanunoo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHebrew (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHighPrivateUseSurrogates (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHighSurrogates (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHiragana (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsIPAExtensions (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsIdeographicDescriptionCharacters (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKanbun (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKangxiRadicals (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKannada (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKatakana (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKatakanaPhoneticExtensions (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKhmer (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKhmerSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLao (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatin1Supplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedAdditional (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLetterlikeSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLimbu (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLinearBIdeograms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLinearBSyllabary (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLowSurrogates (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMalayalam (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMathematicalAlphanumericSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMathematicalOperators (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbolsandArrows (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousTechnical (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMongolian (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMusicalSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMyanmar (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsNumberForms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOgham (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOldItalic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOpticalCharacterRecognition (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOriya (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOsmanya (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsPhoneticExtensions (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsPrivateUse (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsPrivateUseArea (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsRunic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsShavian (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSinhala (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSmallFormVariants (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSpacingModifierLetters (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSpecials (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSuperscriptsandSubscripts (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementalMathematicalOperators (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSyriac (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTagalog (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTagbanwa (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTags (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTaiLe (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTaiXuanJingSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTamil (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTelugu (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsThaana (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsThai (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTibetan (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsUgaritic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsUnifiedCanadianAboriginalSyllabics (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectors (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectorsSupplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsYiRadicals (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsYiSyllables (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsYijingHexagramSymbols (int code);
+
+XMLPUBFUN int XMLCALL xmlUCSIsBlock (int code, const char *block);
+
+XMLPUBFUN int XMLCALL xmlUCSIsCatC (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCc (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCf (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCs (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatL (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLl (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLm (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLt (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLu (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatM (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatMc (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatMe (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatMn (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatN (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatNd (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatNl (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatNo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatP (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPc (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPd (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPe (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPf (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPi (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPs (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatS (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSc (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSk (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSm (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZ (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZl (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZp (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZs (int code);
+
+XMLPUBFUN int XMLCALL xmlUCSIsCat (int code, const char *cat);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_UNICODE_ENABLED */
+
+#endif /* __XML_UNICODE_H__ */
diff --git a/interfaces/ext/libxml/xmlversion.h b/interfaces/ext/libxml/xmlversion.h
new file mode 100644
index 0000000..0660956
--- /dev/null
+++ b/interfaces/ext/libxml/xmlversion.h
@@ -0,0 +1,458 @@
+/*
+ * Summary: compile-time version informations
+ * Description: compile-time version informations for the XML library
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_VERSION_H__
+#define __XML_VERSION_H__
+
+#include <libxml/xmlexports.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * use those to be sure nothing nasty will happen if
+ * your library and includes mismatch
+ */
+#ifndef LIBXML2_COMPILING_MSCCDEF
+XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
+#endif /* LIBXML2_COMPILING_MSCCDEF */
+
+/**
+ * LIBXML_DOTTED_VERSION:
+ *
+ * the version string like "1.2.3"
+ */
+#define LIBXML_DOTTED_VERSION "2.7.3"
+
+/**
+ * LIBXML_VERSION:
+ *
+ * the version number: 1.2.3 value is 10203
+ */
+#define LIBXML_VERSION 20703
+
+/**
+ * LIBXML_VERSION_STRING:
+ *
+ * the version number string, 1.2.3 value is "10203"
+ */
+#define LIBXML_VERSION_STRING "20703"
+
+/**
+ * LIBXML_VERSION_EXTRA:
+ *
+ * extra version information, used to show a CVS compilation
+ */
+#define LIBXML_VERSION_EXTRA ""
+
+/**
+ * LIBXML_TEST_VERSION:
+ *
+ * Macro to check that the libxml version in use is compatible with
+ * the version the software has been compiled against
+ */
+#define LIBXML_TEST_VERSION xmlCheckVersion(20703);
+
+#ifndef VMS
+#if 0
+/**
+ * WITH_TRIO:
+ *
+ * defined if the trio support need to be configured in
+ */
+#define WITH_TRIO
+#else
+/**
+ * WITHOUT_TRIO:
+ *
+ * defined if the trio support should not be configured in
+ */
+#define WITHOUT_TRIO
+#endif
+#else /* VMS */
+/**
+ * WITH_TRIO:
+ *
+ * defined if the trio support need to be configured in
+ */
+#define WITH_TRIO 1
+#endif /* VMS */
+
+/**
+ * LIBXML_THREAD_ENABLED:
+ *
+ * Whether the thread support is configured in
+ */
+#if 1
+#if defined(_REENTRANT) || defined(__MT__) || \
+ (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0 >= 199506L))
+#define LIBXML_THREAD_ENABLED
+#endif
+#endif
+
+/**
+ * LIBXML_TREE_ENABLED:
+ *
+ * Whether the DOM like tree manipulation API support is configured in
+ */
+#if 1
+#define LIBXML_TREE_ENABLED
+#endif
+
+/**
+ * LIBXML_OUTPUT_ENABLED:
+ *
+ * Whether the serialization/saving support is configured in
+ */
+#if 1
+#define LIBXML_OUTPUT_ENABLED
+#endif
+
+/**
+ * LIBXML_PUSH_ENABLED:
+ *
+ * Whether the push parsing interfaces are configured in
+ */
+#if 1
+#define LIBXML_PUSH_ENABLED
+#endif
+
+/**
+ * LIBXML_READER_ENABLED:
+ *
+ * Whether the xmlReader parsing interface is configured in
+ */
+#if 1
+#define LIBXML_READER_ENABLED
+#endif
+
+/**
+ * LIBXML_PATTERN_ENABLED:
+ *
+ * Whether the xmlPattern node selection interface is configured in
+ */
+#if 1
+#define LIBXML_PATTERN_ENABLED
+#endif
+
+/**
+ * LIBXML_WRITER_ENABLED:
+ *
+ * Whether the xmlWriter saving interface is configured in
+ */
+#if 1
+#define LIBXML_WRITER_ENABLED
+#endif
+
+/**
+ * LIBXML_SAX1_ENABLED:
+ *
+ * Whether the older SAX1 interface is configured in
+ */
+#if 1
+#define LIBXML_SAX1_ENABLED
+#endif
+
+/**
+ * LIBXML_FTP_ENABLED:
+ *
+ * Whether the FTP support is configured in
+ */
+#if 1
+#define LIBXML_FTP_ENABLED
+#endif
+
+/**
+ * LIBXML_HTTP_ENABLED:
+ *
+ * Whether the HTTP support is configured in
+ */
+#if 1
+#define LIBXML_HTTP_ENABLED
+#endif
+
+/**
+ * LIBXML_VALID_ENABLED:
+ *
+ * Whether the DTD validation support is configured in
+ */
+#if 1
+#define LIBXML_VALID_ENABLED
+#endif
+
+/**
+ * LIBXML_HTML_ENABLED:
+ *
+ * Whether the HTML support is configured in
+ */
+#if 1
+#define LIBXML_HTML_ENABLED
+#endif
+
+/**
+ * LIBXML_LEGACY_ENABLED:
+ *
+ * Whether the deprecated APIs are compiled in for compatibility
+ */
+#if 1
+#define LIBXML_LEGACY_ENABLED
+#endif
+
+/**
+ * LIBXML_C14N_ENABLED:
+ *
+ * Whether the Canonicalization support is configured in
+ */
+#if 1
+#define LIBXML_C14N_ENABLED
+#endif
+
+/**
+ * LIBXML_CATALOG_ENABLED:
+ *
+ * Whether the Catalog support is configured in
+ */
+#if 1
+#define LIBXML_CATALOG_ENABLED
+#endif
+
+/**
+ * LIBXML_DOCB_ENABLED:
+ *
+ * Whether the SGML Docbook support is configured in
+ */
+#if 1
+#define LIBXML_DOCB_ENABLED
+#endif
+
+/**
+ * LIBXML_XPATH_ENABLED:
+ *
+ * Whether XPath is configured in
+ */
+#if 1
+#define LIBXML_XPATH_ENABLED
+#endif
+
+/**
+ * LIBXML_XPTR_ENABLED:
+ *
+ * Whether XPointer is configured in
+ */
+#if 1
+#define LIBXML_XPTR_ENABLED
+#endif
+
+/**
+ * LIBXML_XINCLUDE_ENABLED:
+ *
+ * Whether XInclude is configured in
+ */
+#if 1
+#define LIBXML_XINCLUDE_ENABLED
+#endif
+
+/**
+ * LIBXML_ICONV_ENABLED:
+ *
+ * Whether iconv support is available
+ */
+#if 1
+#define LIBXML_ICONV_ENABLED
+#endif
+
+/**
+ * LIBXML_ISO8859X_ENABLED:
+ *
+ * Whether ISO-8859-* support is made available in case iconv is not
+ */
+#if 1
+#define LIBXML_ISO8859X_ENABLED
+#endif
+
+/**
+ * LIBXML_DEBUG_ENABLED:
+ *
+ * Whether Debugging module is configured in
+ */
+#if 0
+#define LIBXML_DEBUG_ENABLED
+#endif
+
+/**
+ * DEBUG_MEMORY_LOCATION:
+ *
+ * Whether the memory debugging is configured in
+ */
+#if 0
+#define DEBUG_MEMORY_LOCATION
+#endif
+
+/**
+ * LIBXML_DEBUG_RUNTIME:
+ *
+ * Whether the runtime debugging is configured in
+ */
+#if 0
+#define LIBXML_DEBUG_RUNTIME
+#endif
+
+/**
+ * LIBXML_UNICODE_ENABLED:
+ *
+ * Whether the Unicode related interfaces are compiled in
+ */
+#if 1
+#define LIBXML_UNICODE_ENABLED
+#endif
+
+/**
+ * LIBXML_REGEXP_ENABLED:
+ *
+ * Whether the regular expressions interfaces are compiled in
+ */
+#if 1
+#define LIBXML_REGEXP_ENABLED
+#endif
+
+/**
+ * LIBXML_AUTOMATA_ENABLED:
+ *
+ * Whether the automata interfaces are compiled in
+ */
+#if 1
+#define LIBXML_AUTOMATA_ENABLED
+#endif
+
+/**
+ * LIBXML_EXPR_ENABLED:
+ *
+ * Whether the formal expressions interfaces are compiled in
+ */
+#if 1
+#define LIBXML_EXPR_ENABLED
+#endif
+
+/**
+ * LIBXML_SCHEMAS_ENABLED:
+ *
+ * Whether the Schemas validation interfaces are compiled in
+ */
+#if 1
+#define LIBXML_SCHEMAS_ENABLED
+#endif
+
+/**
+ * LIBXML_SCHEMATRON_ENABLED:
+ *
+ * Whether the Schematron validation interfaces are compiled in
+ */
+#if 1
+#define LIBXML_SCHEMATRON_ENABLED
+#endif
+
+/**
+ * LIBXML_MODULES_ENABLED:
+ *
+ * Whether the module interfaces are compiled in
+ */
+#if 1
+#define LIBXML_MODULES_ENABLED
+/**
+ * LIBXML_MODULE_EXTENSION:
+ *
+ * the string suffix used by dynamic modules (usually shared libraries)
+ */
+#define LIBXML_MODULE_EXTENSION ".so"
+#endif
+
+/**
+ * LIBXML_ZLIB_ENABLED:
+ *
+ * Whether the Zlib support is compiled in
+ */
+#if 0
+#define LIBXML_ZLIB_ENABLED
+#endif
+
+#ifdef __GNUC__
+#ifdef HAVE_ANSIDECL_H
+#include <ansidecl.h>
+#endif
+
+/**
+ * ATTRIBUTE_UNUSED:
+ *
+ * Macro used to signal to GCC unused function parameters
+ */
+
+#ifndef ATTRIBUTE_UNUSED
+#define ATTRIBUTE_UNUSED __attribute__((unused))
+#endif
+
+/**
+ * ATTRIBUTE_ALLOC_SIZE:
+ *
+ * Macro used to indicate to GCC this is an allocator function
+ */
+
+#ifndef ATTRIBUTE_ALLOC_SIZE
+# if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
+# define ATTRIBUTE_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
+# else
+# define ATTRIBUTE_ALLOC_SIZE(x)
+# endif
+#else
+# define ATTRIBUTE_ALLOC_SIZE(x)
+#endif
+
+/**
+ * ATTRIBUTE_PRINTF:
+ *
+ * Macro used to indicate to GCC the parameter are printf like
+ */
+
+#ifndef ATTRIBUTE_PRINTF
+# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
+# define ATTRIBUTE_PRINTF(fmt,args) __attribute__((__format__(__printf__,fmt,args)))
+# else
+# define ATTRIBUTE_PRINTF(fmt,args)
+# endif
+#else
+# define ATTRIBUTE_PRINTF(fmt,args)
+#endif
+
+#else /* ! __GNUC__ */
+/**
+ * ATTRIBUTE_UNUSED:
+ *
+ * Macro used to signal to GCC unused function parameters
+ */
+#define ATTRIBUTE_UNUSED
+/**
+ * ATTRIBUTE_ALLOC_SIZE:
+ *
+ * Macro used to indicate to GCC this is an allocator function
+ */
+#define ATTRIBUTE_ALLOC_SIZE(x)
+/**
+ * ATTRIBUTE_PRINTF:
+ *
+ * Macro used to indicate to GCC the parameter are printf like
+ */
+#define ATTRIBUTE_PRINTF(fmt,args)
+#endif /* __GNUC__ */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif
+
+
diff --git a/interfaces/ext/libxml/xmlwriter.h b/interfaces/ext/libxml/xmlwriter.h
new file mode 100644
index 0000000..df4509d
--- /dev/null
+++ b/interfaces/ext/libxml/xmlwriter.h
@@ -0,0 +1,485 @@
+
+/*
+ * Summary: text writing API for XML
+ * Description: text writing API for XML
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Alfred Mickautsch <alfred at mickautsch.de>
+ */
+
+#ifndef __XML_XMLWRITER_H__
+#define __XML_XMLWRITER_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_WRITER_ENABLED
+
+#include <stdarg.h>
+#include <libxml/xmlIO.h>
+#include <libxml/list.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ typedef struct _xmlTextWriter xmlTextWriter;
+ typedef xmlTextWriter *xmlTextWriterPtr;
+
+/*
+ * Constructors & Destructor
+ */
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriter(xmlOutputBufferPtr out);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterFilename(const char *uri, int compression);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterMemory(xmlBufferPtr buf, int compression);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt, int compression);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterDoc(xmlDocPtr * doc, int compression);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node,
+ int compression);
+ XMLPUBFUN void XMLCALL xmlFreeTextWriter(xmlTextWriterPtr writer);
+
+/*
+ * Functions
+ */
+
+
+/*
+ * Document
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDocument(xmlTextWriterPtr writer,
+ const char *version,
+ const char *encoding,
+ const char *standalone);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDocument(xmlTextWriterPtr
+ writer);
+
+/*
+ * Comments
+ */
+ XMLPUBFUN int XMLCALL xmlTextWriterStartComment(xmlTextWriterPtr
+ writer);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndComment(xmlTextWriterPtr writer);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatComment(xmlTextWriterPtr writer,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(2,3);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer,
+ const char *format,
+ va_list argptr)
+ ATTRIBUTE_PRINTF(2,0);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteComment(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ content);
+
+/*
+ * Elements
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartElement(xmlTextWriterPtr writer,
+ const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterStartElementNS(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ prefix,
+ const xmlChar * name,
+ const xmlChar *
+ namespaceURI);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndElement(xmlTextWriterPtr writer);
+ XMLPUBFUN int XMLCALL xmlTextWriterFullEndElement(xmlTextWriterPtr
+ writer);
+
+/*
+ * Elements conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(3,4);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr)
+ ATTRIBUTE_PRINTF(3,0);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteElement(xmlTextWriterPtr
+ writer,
+ const xmlChar * name,
+ const xmlChar *
+ content);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(5,6);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format,
+ va_list argptr)
+ ATTRIBUTE_PRINTF(5,0);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteElementNS(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ prefix,
+ const xmlChar * name,
+ const xmlChar *
+ namespaceURI,
+ const xmlChar *
+ content);
+
+/*
+ * Text
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(2,3);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer,
+ const char *format, va_list argptr)
+ ATTRIBUTE_PRINTF(2,0);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteRawLen(xmlTextWriterPtr writer,
+ const xmlChar * content, int len);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteRaw(xmlTextWriterPtr writer,
+ const xmlChar * content);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteFormatString(xmlTextWriterPtr
+ writer,
+ const char
+ *format, ...)
+ ATTRIBUTE_PRINTF(2,3);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteVFormatString(xmlTextWriterPtr
+ writer,
+ const char
+ *format,
+ va_list argptr)
+ ATTRIBUTE_PRINTF(2,0);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteString(xmlTextWriterPtr writer,
+ const xmlChar *
+ content);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteBase64(xmlTextWriterPtr writer,
+ const char *data,
+ int start, int len);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteBinHex(xmlTextWriterPtr writer,
+ const char *data,
+ int start, int len);
+
+/*
+ * Attributes
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartAttribute(xmlTextWriterPtr writer,
+ const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterStartAttributeNS(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ prefix,
+ const xmlChar *
+ name,
+ const xmlChar *
+ namespaceURI);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndAttribute(xmlTextWriterPtr
+ writer);
+
+/*
+ * Attributes conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(3,4);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr)
+ ATTRIBUTE_PRINTF(3,0);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteAttribute(xmlTextWriterPtr
+ writer,
+ const xmlChar * name,
+ const xmlChar *
+ content);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(5,6);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format,
+ va_list argptr)
+ ATTRIBUTE_PRINTF(5,0);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteAttributeNS(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ prefix,
+ const xmlChar *
+ name,
+ const xmlChar *
+ namespaceURI,
+ const xmlChar *
+ content);
+
+/*
+ * PI's
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartPI(xmlTextWriterPtr writer,
+ const xmlChar * target);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndPI(xmlTextWriterPtr writer);
+
+/*
+ * PI conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatPI(xmlTextWriterPtr writer,
+ const xmlChar * target,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(3,4);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer,
+ const xmlChar * target,
+ const char *format, va_list argptr)
+ ATTRIBUTE_PRINTF(3,0);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWritePI(xmlTextWriterPtr writer,
+ const xmlChar * target,
+ const xmlChar * content);
+
+/**
+ * xmlTextWriterWriteProcessingInstruction:
+ *
+ * This macro maps to xmlTextWriterWritePI
+ */
+#define xmlTextWriterWriteProcessingInstruction xmlTextWriterWritePI
+
+/*
+ * CDATA
+ */
+ XMLPUBFUN int XMLCALL xmlTextWriterStartCDATA(xmlTextWriterPtr writer);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndCDATA(xmlTextWriterPtr writer);
+
+/*
+ * CDATA conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(2,3);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer,
+ const char *format, va_list argptr)
+ ATTRIBUTE_PRINTF(2,0);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteCDATA(xmlTextWriterPtr writer,
+ const xmlChar * content);
+
+/*
+ * DTD
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDTD(xmlTextWriterPtr writer);
+
+/*
+ * DTD conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(5,6);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const char *format, va_list argptr)
+ ATTRIBUTE_PRINTF(5,0);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const xmlChar * subset);
+
+/**
+ * xmlTextWriterWriteDocType:
+ *
+ * this macro maps to xmlTextWriterWriteDTD
+ */
+#define xmlTextWriterWriteDocType xmlTextWriterWriteDTD
+
+/*
+ * DTD element definition
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDTDElement(xmlTextWriterPtr writer,
+ const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDTDElement(xmlTextWriterPtr
+ writer);
+
+/*
+ * DTD element definition conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(3,4);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr)
+ ATTRIBUTE_PRINTF(3,0);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDElement(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ name,
+ const xmlChar *
+ content);
+
+/*
+ * DTD attribute list definition
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer,
+ const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDTDAttlist(xmlTextWriterPtr
+ writer);
+
+/*
+ * DTD attribute list definition conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(3,4);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr)
+ ATTRIBUTE_PRINTF(3,0);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDAttlist(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ name,
+ const xmlChar *
+ content);
+
+/*
+ * DTD entity definition
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDTDEntity(xmlTextWriterPtr writer,
+ int pe, const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDTDEntity(xmlTextWriterPtr
+ writer);
+
+/*
+ * DTD entity definition conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const char *format, ...)
+ ATTRIBUTE_PRINTF(4,5);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr)
+ ATTRIBUTE_PRINTF(4,0);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const xmlChar * content);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const xmlChar * ndataid);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTDExternalEntityContents(xmlTextWriterPtr
+ writer,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const xmlChar *
+ ndataid);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDEntity(xmlTextWriterPtr
+ writer, int pe,
+ const xmlChar * name,
+ const xmlChar *
+ pubid,
+ const xmlChar *
+ sysid,
+ const xmlChar *
+ ndataid,
+ const xmlChar *
+ content);
+
+/*
+ * DTD notation definition
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid);
+
+/*
+ * Indentation
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterSetIndent(xmlTextWriterPtr writer, int indent);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterSetIndentString(xmlTextWriterPtr writer,
+ const xmlChar * str);
+
+/*
+ * misc
+ */
+ XMLPUBFUN int XMLCALL xmlTextWriterFlush(xmlTextWriterPtr writer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_WRITER_ENABLED */
+
+#endif /* __XML_XMLWRITER_H__ */
diff --git a/interfaces/ext/libxml/xpath.h b/interfaces/ext/libxml/xpath.h
new file mode 100644
index 0000000..1a9e30e
--- /dev/null
+++ b/interfaces/ext/libxml/xpath.h
@@ -0,0 +1,546 @@
+/*
+ * Summary: XML Path Language implementation
+ * Description: API for the XML Path Language implementation
+ *
+ * XML Path Language implementation
+ * XPath is a language for addressing parts of an XML document,
+ * designed to be used by both XSLT and XPointer
+ * http://www.w3.org/TR/xpath
+ *
+ * Implements
+ * W3C Recommendation 16 November 1999
+ * http://www.w3.org/TR/1999/REC-xpath-19991116
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XPATH_H__
+#define __XML_XPATH_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_XPATH_ENABLED
+
+#include <libxml/xmlerror.h>
+#include <libxml/tree.h>
+#include <libxml/hash.h>
+#endif /* LIBXML_XPATH_ENABLED */
+
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef __cplusplus
+extern "C" {
+#endif
+#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED */
+
+#ifdef LIBXML_XPATH_ENABLED
+
+typedef struct _xmlXPathContext xmlXPathContext;
+typedef xmlXPathContext *xmlXPathContextPtr;
+typedef struct _xmlXPathParserContext xmlXPathParserContext;
+typedef xmlXPathParserContext *xmlXPathParserContextPtr;
+
+/**
+ * The set of XPath error codes.
+ */
+
+typedef enum {
+ XPATH_EXPRESSION_OK = 0,
+ XPATH_NUMBER_ERROR,
+ XPATH_UNFINISHED_LITERAL_ERROR,
+ XPATH_START_LITERAL_ERROR,
+ XPATH_VARIABLE_REF_ERROR,
+ XPATH_UNDEF_VARIABLE_ERROR,
+ XPATH_INVALID_PREDICATE_ERROR,
+ XPATH_EXPR_ERROR,
+ XPATH_UNCLOSED_ERROR,
+ XPATH_UNKNOWN_FUNC_ERROR,
+ XPATH_INVALID_OPERAND,
+ XPATH_INVALID_TYPE,
+ XPATH_INVALID_ARITY,
+ XPATH_INVALID_CTXT_SIZE,
+ XPATH_INVALID_CTXT_POSITION,
+ XPATH_MEMORY_ERROR,
+ XPTR_SYNTAX_ERROR,
+ XPTR_RESOURCE_ERROR,
+ XPTR_SUB_RESOURCE_ERROR,
+ XPATH_UNDEF_PREFIX_ERROR,
+ XPATH_ENCODING_ERROR,
+ XPATH_INVALID_CHAR_ERROR,
+ XPATH_INVALID_CTXT
+} xmlXPathError;
+
+/*
+ * A node-set (an unordered collection of nodes without duplicates).
+ */
+typedef struct _xmlNodeSet xmlNodeSet;
+typedef xmlNodeSet *xmlNodeSetPtr;
+struct _xmlNodeSet {
+ int nodeNr; /* number of nodes in the set */
+ int nodeMax; /* size of the array as allocated */
+ xmlNodePtr *nodeTab; /* array of nodes in no particular order */
+ /* @@ with_ns to check wether namespace nodes should be looked at @@ */
+};
+
+/*
+ * An expression is evaluated to yield an object, which
+ * has one of the following four basic types:
+ * - node-set
+ * - boolean
+ * - number
+ * - string
+ *
+ * @@ XPointer will add more types !
+ */
+
+typedef enum {
+ XPATH_UNDEFINED = 0,
+ XPATH_NODESET = 1,
+ XPATH_BOOLEAN = 2,
+ XPATH_NUMBER = 3,
+ XPATH_STRING = 4,
+ XPATH_POINT = 5,
+ XPATH_RANGE = 6,
+ XPATH_LOCATIONSET = 7,
+ XPATH_USERS = 8,
+ XPATH_XSLT_TREE = 9 /* An XSLT value tree, non modifiable */
+} xmlXPathObjectType;
+
+typedef struct _xmlXPathObject xmlXPathObject;
+typedef xmlXPathObject *xmlXPathObjectPtr;
+struct _xmlXPathObject {
+ xmlXPathObjectType type;
+ xmlNodeSetPtr nodesetval;
+ int boolval;
+ double floatval;
+ xmlChar *stringval;
+ void *user;
+ int index;
+ void *user2;
+ int index2;
+};
+
+/**
+ * xmlXPathConvertFunc:
+ * @obj: an XPath object
+ * @type: the number of the target type
+ *
+ * A conversion function is associated to a type and used to cast
+ * the new type to primitive values.
+ *
+ * Returns -1 in case of error, 0 otherwise
+ */
+typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
+
+/*
+ * Extra type: a name and a conversion function.
+ */
+
+typedef struct _xmlXPathType xmlXPathType;
+typedef xmlXPathType *xmlXPathTypePtr;
+struct _xmlXPathType {
+ const xmlChar *name; /* the type name */
+ xmlXPathConvertFunc func; /* the conversion function */
+};
+
+/*
+ * Extra variable: a name and a value.
+ */
+
+typedef struct _xmlXPathVariable xmlXPathVariable;
+typedef xmlXPathVariable *xmlXPathVariablePtr;
+struct _xmlXPathVariable {
+ const xmlChar *name; /* the variable name */
+ xmlXPathObjectPtr value; /* the value */
+};
+
+/**
+ * xmlXPathEvalFunc:
+ * @ctxt: an XPath parser context
+ * @nargs: the number of arguments passed to the function
+ *
+ * An XPath evaluation function, the parameters are on the XPath context stack.
+ */
+
+typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
+ int nargs);
+
+/*
+ * Extra function: a name and a evaluation function.
+ */
+
+typedef struct _xmlXPathFunct xmlXPathFunct;
+typedef xmlXPathFunct *xmlXPathFuncPtr;
+struct _xmlXPathFunct {
+ const xmlChar *name; /* the function name */
+ xmlXPathEvalFunc func; /* the evaluation function */
+};
+
+/**
+ * xmlXPathAxisFunc:
+ * @ctxt: the XPath interpreter context
+ * @cur: the previous node being explored on that axis
+ *
+ * An axis traversal function. To traverse an axis, the engine calls
+ * the first time with cur == NULL and repeat until the function returns
+ * NULL indicating the end of the axis traversal.
+ *
+ * Returns the next node in that axis or NULL if at the end of the axis.
+ */
+
+typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
+ xmlXPathObjectPtr cur);
+
+/*
+ * Extra axis: a name and an axis function.
+ */
+
+typedef struct _xmlXPathAxis xmlXPathAxis;
+typedef xmlXPathAxis *xmlXPathAxisPtr;
+struct _xmlXPathAxis {
+ const xmlChar *name; /* the axis name */
+ xmlXPathAxisFunc func; /* the search function */
+};
+
+/**
+ * xmlXPathFunction:
+ * @ctxt: the XPath interprestation context
+ * @nargs: the number of arguments
+ *
+ * An XPath function.
+ * The arguments (if any) are popped out from the context stack
+ * and the result is pushed on the stack.
+ */
+
+typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
+
+/*
+ * Function and Variable Lookup.
+ */
+
+/**
+ * xmlXPathVariableLookupFunc:
+ * @ctxt: an XPath context
+ * @name: name of the variable
+ * @ns_uri: the namespace name hosting this variable
+ *
+ * Prototype for callbacks used to plug variable lookup in the XPath
+ * engine.
+ *
+ * Returns the XPath object value or NULL if not found.
+ */
+typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri);
+
+/**
+ * xmlXPathFuncLookupFunc:
+ * @ctxt: an XPath context
+ * @name: name of the function
+ * @ns_uri: the namespace name hosting this function
+ *
+ * Prototype for callbacks used to plug function lookup in the XPath
+ * engine.
+ *
+ * Returns the XPath function or NULL if not found.
+ */
+typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri);
+
+/**
+ * xmlXPathFlags:
+ * Flags for XPath engine compilation and runtime
+ */
+/**
+ * XML_XPATH_CHECKNS:
+ *
+ * check namespaces at compilation
+ */
+#define XML_XPATH_CHECKNS (1<<0)
+/**
+ * XML_XPATH_NOVAR:
+ *
+ * forbid variables in expression
+ */
+#define XML_XPATH_NOVAR (1<<1)
+
+/**
+ * xmlXPathContext:
+ *
+ * Expression evaluation occurs with respect to a context.
+ * he context consists of:
+ * - a node (the context node)
+ * - a node list (the context node list)
+ * - a set of variable bindings
+ * - a function library
+ * - the set of namespace declarations in scope for the expression
+ * Following the switch to hash tables, this need to be trimmed up at
+ * the next binary incompatible release.
+ * The node may be modified when the context is passed to libxml2
+ * for an XPath evaluation so you may need to initialize it again
+ * before the next call.
+ */
+
+struct _xmlXPathContext {
+ xmlDocPtr doc; /* The current document */
+ xmlNodePtr node; /* The current node */
+
+ int nb_variables_unused; /* unused (hash table) */
+ int max_variables_unused; /* unused (hash table) */
+ xmlHashTablePtr varHash; /* Hash table of defined variables */
+
+ int nb_types; /* number of defined types */
+ int max_types; /* max number of types */
+ xmlXPathTypePtr types; /* Array of defined types */
+
+ int nb_funcs_unused; /* unused (hash table) */
+ int max_funcs_unused; /* unused (hash table) */
+ xmlHashTablePtr funcHash; /* Hash table of defined funcs */
+
+ int nb_axis; /* number of defined axis */
+ int max_axis; /* max number of axis */
+ xmlXPathAxisPtr axis; /* Array of defined axis */
+
+ /* the namespace nodes of the context node */
+ xmlNsPtr *namespaces; /* Array of namespaces */
+ int nsNr; /* number of namespace in scope */
+ void *user; /* function to free */
+
+ /* extra variables */
+ int contextSize; /* the context size */
+ int proximityPosition; /* the proximity position */
+
+ /* extra stuff for XPointer */
+ int xptr; /* is this an XPointer context? */
+ xmlNodePtr here; /* for here() */
+ xmlNodePtr origin; /* for origin() */
+
+ /* the set of namespace declarations in scope for the expression */
+ xmlHashTablePtr nsHash; /* The namespaces hash table */
+ xmlXPathVariableLookupFunc varLookupFunc;/* variable lookup func */
+ void *varLookupData; /* variable lookup data */
+
+ /* Possibility to link in an extra item */
+ void *extra; /* needed for XSLT */
+
+ /* The function name and URI when calling a function */
+ const xmlChar *function;
+ const xmlChar *functionURI;
+
+ /* function lookup function and data */
+ xmlXPathFuncLookupFunc funcLookupFunc;/* function lookup func */
+ void *funcLookupData; /* function lookup data */
+
+ /* temporary namespace lists kept for walking the namespace axis */
+ xmlNsPtr *tmpNsList; /* Array of namespaces */
+ int tmpNsNr; /* number of namespaces in scope */
+
+ /* error reporting mechanism */
+ void *userData; /* user specific data block */
+ xmlStructuredErrorFunc error; /* the callback in case of errors */
+ xmlError lastError; /* the last error */
+ xmlNodePtr debugNode; /* the source node XSLT */
+
+ /* dictionary */
+ xmlDictPtr dict; /* dictionary if any */
+
+ int flags; /* flags to control compilation */
+
+ /* Cache for reusal of XPath objects */
+ void *cache;
+};
+
+/*
+ * The structure of a compiled expression form is not public.
+ */
+
+typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
+typedef xmlXPathCompExpr *xmlXPathCompExprPtr;
+
+/**
+ * xmlXPathParserContext:
+ *
+ * An XPath parser context. It contains pure parsing informations,
+ * an xmlXPathContext, and the stack of objects.
+ */
+struct _xmlXPathParserContext {
+ const xmlChar *cur; /* the current char being parsed */
+ const xmlChar *base; /* the full expression */
+
+ int error; /* error code */
+
+ xmlXPathContextPtr context; /* the evaluation context */
+ xmlXPathObjectPtr value; /* the current value */
+ int valueNr; /* number of values stacked */
+ int valueMax; /* max number of values stacked */
+ xmlXPathObjectPtr *valueTab; /* stack of values */
+
+ xmlXPathCompExprPtr comp; /* the precompiled expression */
+ int xptr; /* it this an XPointer expression */
+ xmlNodePtr ancestor; /* used for walking preceding axis */
+};
+
+/************************************************************************
+ * *
+ * Public API *
+ * *
+ ************************************************************************/
+
+/**
+ * Objects and Nodesets handling
+ */
+
+XMLPUBVAR double xmlXPathNAN;
+XMLPUBVAR double xmlXPathPINF;
+XMLPUBVAR double xmlXPathNINF;
+
+/* These macros may later turn into functions */
+/**
+ * xmlXPathNodeSetGetLength:
+ * @ns: a node-set
+ *
+ * Implement a functionality similar to the DOM NodeList.length.
+ *
+ * Returns the number of nodes in the node-set.
+ */
+#define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
+/**
+ * xmlXPathNodeSetItem:
+ * @ns: a node-set
+ * @index: index of a node in the set
+ *
+ * Implements a functionality similar to the DOM NodeList.item().
+ *
+ * Returns the xmlNodePtr at the given @index in @ns or NULL if
+ * @index is out of range (0 to length-1)
+ */
+#define xmlXPathNodeSetItem(ns, index) \
+ ((((ns) != NULL) && \
+ ((index) >= 0) && ((index) < (ns)->nodeNr)) ? \
+ (ns)->nodeTab[(index)] \
+ : NULL)
+/**
+ * xmlXPathNodeSetIsEmpty:
+ * @ns: a node-set
+ *
+ * Checks whether @ns is empty or not.
+ *
+ * Returns %TRUE if @ns is an empty node-set.
+ */
+#define xmlXPathNodeSetIsEmpty(ns) \
+ (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
+
+
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeObject (xmlXPathObjectPtr obj);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeSetCreate (xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeNodeSet (xmlNodeSetPtr obj);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathObjectCopy (xmlXPathObjectPtr val);
+XMLPUBFUN int XMLCALL
+ xmlXPathCmpNodes (xmlNodePtr node1,
+ xmlNodePtr node2);
+/**
+ * Conversion functions to basic types.
+ */
+XMLPUBFUN int XMLCALL
+ xmlXPathCastNumberToBoolean (double val);
+XMLPUBFUN int XMLCALL
+ xmlXPathCastStringToBoolean (const xmlChar * val);
+XMLPUBFUN int XMLCALL
+ xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns);
+XMLPUBFUN int XMLCALL
+ xmlXPathCastToBoolean (xmlXPathObjectPtr val);
+
+XMLPUBFUN double XMLCALL
+ xmlXPathCastBooleanToNumber (int val);
+XMLPUBFUN double XMLCALL
+ xmlXPathCastStringToNumber (const xmlChar * val);
+XMLPUBFUN double XMLCALL
+ xmlXPathCastNodeToNumber (xmlNodePtr node);
+XMLPUBFUN double XMLCALL
+ xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns);
+XMLPUBFUN double XMLCALL
+ xmlXPathCastToNumber (xmlXPathObjectPtr val);
+
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastBooleanToString (int val);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastNumberToString (double val);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastNodeToString (xmlNodePtr node);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastNodeSetToString (xmlNodeSetPtr ns);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastToString (xmlXPathObjectPtr val);
+
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathConvertBoolean (xmlXPathObjectPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathConvertNumber (xmlXPathObjectPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathConvertString (xmlXPathObjectPtr val);
+
+/**
+ * Context handling.
+ */
+XMLPUBFUN xmlXPathContextPtr XMLCALL
+ xmlXPathNewContext (xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeContext (xmlXPathContextPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
+ int active,
+ int value,
+ int options);
+/**
+ * Evaluation functions.
+ */
+XMLPUBFUN long XMLCALL
+ xmlXPathOrderDocElems (xmlDocPtr doc);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathEval (const xmlChar *str,
+ xmlXPathContextPtr ctx);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathEvalExpression (const xmlChar *str,
+ xmlXPathContextPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlXPathEvalPredicate (xmlXPathContextPtr ctxt,
+ xmlXPathObjectPtr res);
+/**
+ * Separate compilation/evaluation entry points.
+ */
+XMLPUBFUN xmlXPathCompExprPtr XMLCALL
+ xmlXPathCompile (const xmlChar *str);
+XMLPUBFUN xmlXPathCompExprPtr XMLCALL
+ xmlXPathCtxtCompile (xmlXPathContextPtr ctxt,
+ const xmlChar *str);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathCompiledEval (xmlXPathCompExprPtr comp,
+ xmlXPathContextPtr ctx);
+XMLPUBFUN int XMLCALL
+ xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
+ xmlXPathContextPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp);
+#endif /* LIBXML_XPATH_ENABLED */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN void XMLCALL
+ xmlXPathInit (void);
+XMLPUBFUN int XMLCALL
+ xmlXPathIsNaN (double val);
+XMLPUBFUN int XMLCALL
+ xmlXPathIsInf (double val);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED*/
+#endif /* ! __XML_XPATH_H__ */
diff --git a/interfaces/ext/libxml/xpathInternals.h b/interfaces/ext/libxml/xpathInternals.h
new file mode 100644
index 0000000..dcd5243
--- /dev/null
+++ b/interfaces/ext/libxml/xpathInternals.h
@@ -0,0 +1,630 @@
+/*
+ * Summary: internal interfaces for XML Path Language implementation
+ * Description: internal interfaces for XML Path Language implementation
+ * used to build new modules on top of XPath like XPointer and
+ * XSLT
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XPATH_INTERNALS_H__
+#define __XML_XPATH_INTERNALS_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xpath.h>
+
+#ifdef LIBXML_XPATH_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/************************************************************************
+ * *
+ * Helpers *
+ * *
+ ************************************************************************/
+
+/*
+ * Many of these macros may later turn into functions. They
+ * shouldn't be used in #ifdef's preprocessor instructions.
+ */
+/**
+ * xmlXPathSetError:
+ * @ctxt: an XPath parser context
+ * @err: an xmlXPathError code
+ *
+ * Raises an error.
+ */
+#define xmlXPathSetError(ctxt, err) \
+ { xmlXPatherror((ctxt), __FILE__, __LINE__, (err)); \
+ if ((ctxt) != NULL) (ctxt)->error = (err); }
+
+/**
+ * xmlXPathSetArityError:
+ * @ctxt: an XPath parser context
+ *
+ * Raises an XPATH_INVALID_ARITY error.
+ */
+#define xmlXPathSetArityError(ctxt) \
+ xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
+
+/**
+ * xmlXPathSetTypeError:
+ * @ctxt: an XPath parser context
+ *
+ * Raises an XPATH_INVALID_TYPE error.
+ */
+#define xmlXPathSetTypeError(ctxt) \
+ xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
+
+/**
+ * xmlXPathGetError:
+ * @ctxt: an XPath parser context
+ *
+ * Get the error code of an XPath context.
+ *
+ * Returns the context error.
+ */
+#define xmlXPathGetError(ctxt) ((ctxt)->error)
+
+/**
+ * xmlXPathCheckError:
+ * @ctxt: an XPath parser context
+ *
+ * Check if an XPath error was raised.
+ *
+ * Returns true if an error has been raised, false otherwise.
+ */
+#define xmlXPathCheckError(ctxt) ((ctxt)->error != XPATH_EXPRESSION_OK)
+
+/**
+ * xmlXPathGetDocument:
+ * @ctxt: an XPath parser context
+ *
+ * Get the document of an XPath context.
+ *
+ * Returns the context document.
+ */
+#define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc)
+
+/**
+ * xmlXPathGetContextNode:
+ * @ctxt: an XPath parser context
+ *
+ * Get the context node of an XPath context.
+ *
+ * Returns the context node.
+ */
+#define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node)
+
+XMLPUBFUN int XMLCALL
+ xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN double XMLCALL
+ xmlXPathPopNumber (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathPopString (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void * XMLCALL
+ xmlXPathPopExternal (xmlXPathParserContextPtr ctxt);
+
+/**
+ * xmlXPathReturnBoolean:
+ * @ctxt: an XPath parser context
+ * @val: a boolean
+ *
+ * Pushes the boolean @val on the context stack.
+ */
+#define xmlXPathReturnBoolean(ctxt, val) \
+ valuePush((ctxt), xmlXPathNewBoolean(val))
+
+/**
+ * xmlXPathReturnTrue:
+ * @ctxt: an XPath parser context
+ *
+ * Pushes true on the context stack.
+ */
+#define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1)
+
+/**
+ * xmlXPathReturnFalse:
+ * @ctxt: an XPath parser context
+ *
+ * Pushes false on the context stack.
+ */
+#define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0)
+
+/**
+ * xmlXPathReturnNumber:
+ * @ctxt: an XPath parser context
+ * @val: a double
+ *
+ * Pushes the double @val on the context stack.
+ */
+#define xmlXPathReturnNumber(ctxt, val) \
+ valuePush((ctxt), xmlXPathNewFloat(val))
+
+/**
+ * xmlXPathReturnString:
+ * @ctxt: an XPath parser context
+ * @str: a string
+ *
+ * Pushes the string @str on the context stack.
+ */
+#define xmlXPathReturnString(ctxt, str) \
+ valuePush((ctxt), xmlXPathWrapString(str))
+
+/**
+ * xmlXPathReturnEmptyString:
+ * @ctxt: an XPath parser context
+ *
+ * Pushes an empty string on the stack.
+ */
+#define xmlXPathReturnEmptyString(ctxt) \
+ valuePush((ctxt), xmlXPathNewCString(""))
+
+/**
+ * xmlXPathReturnNodeSet:
+ * @ctxt: an XPath parser context
+ * @ns: a node-set
+ *
+ * Pushes the node-set @ns on the context stack.
+ */
+#define xmlXPathReturnNodeSet(ctxt, ns) \
+ valuePush((ctxt), xmlXPathWrapNodeSet(ns))
+
+/**
+ * xmlXPathReturnEmptyNodeSet:
+ * @ctxt: an XPath parser context
+ *
+ * Pushes an empty node-set on the context stack.
+ */
+#define xmlXPathReturnEmptyNodeSet(ctxt) \
+ valuePush((ctxt), xmlXPathNewNodeSet(NULL))
+
+/**
+ * xmlXPathReturnExternal:
+ * @ctxt: an XPath parser context
+ * @val: user data
+ *
+ * Pushes user data on the context stack.
+ */
+#define xmlXPathReturnExternal(ctxt, val) \
+ valuePush((ctxt), xmlXPathWrapExternal(val))
+
+/**
+ * xmlXPathStackIsNodeSet:
+ * @ctxt: an XPath parser context
+ *
+ * Check if the current value on the XPath stack is a node set or
+ * an XSLT value tree.
+ *
+ * Returns true if the current object on the stack is a node-set.
+ */
+#define xmlXPathStackIsNodeSet(ctxt) \
+ (((ctxt)->value != NULL) \
+ && (((ctxt)->value->type == XPATH_NODESET) \
+ || ((ctxt)->value->type == XPATH_XSLT_TREE)))
+
+/**
+ * xmlXPathStackIsExternal:
+ * @ctxt: an XPath parser context
+ *
+ * Checks if the current value on the XPath stack is an external
+ * object.
+ *
+ * Returns true if the current object on the stack is an external
+ * object.
+ */
+#define xmlXPathStackIsExternal(ctxt) \
+ ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
+
+/**
+ * xmlXPathEmptyNodeSet:
+ * @ns: a node-set
+ *
+ * Empties a node-set.
+ */
+#define xmlXPathEmptyNodeSet(ns) \
+ { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; }
+
+/**
+ * CHECK_ERROR:
+ *
+ * Macro to return from the function if an XPath error was detected.
+ */
+#define CHECK_ERROR \
+ if (ctxt->error != XPATH_EXPRESSION_OK) return
+
+/**
+ * CHECK_ERROR0:
+ *
+ * Macro to return 0 from the function if an XPath error was detected.
+ */
+#define CHECK_ERROR0 \
+ if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
+
+/**
+ * XP_ERROR:
+ * @X: the error code
+ *
+ * Macro to raise an XPath error and return.
+ */
+#define XP_ERROR(X) \
+ { xmlXPathErr(ctxt, X); return; }
+
+/**
+ * XP_ERROR0:
+ * @X: the error code
+ *
+ * Macro to raise an XPath error and return 0.
+ */
+#define XP_ERROR0(X) \
+ { xmlXPathErr(ctxt, X); return(0); }
+
+/**
+ * CHECK_TYPE:
+ * @typeval: the XPath type
+ *
+ * Macro to check that the value on top of the XPath stack is of a given
+ * type.
+ */
+#define CHECK_TYPE(typeval) \
+ if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
+ XP_ERROR(XPATH_INVALID_TYPE)
+
+/**
+ * CHECK_TYPE0:
+ * @typeval: the XPath type
+ *
+ * Macro to check that the value on top of the XPath stack is of a given
+ * type. Return(0) in case of failure
+ */
+#define CHECK_TYPE0(typeval) \
+ if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
+ XP_ERROR0(XPATH_INVALID_TYPE)
+
+/**
+ * CHECK_ARITY:
+ * @x: the number of expected args
+ *
+ * Macro to check that the number of args passed to an XPath function matches.
+ */
+#define CHECK_ARITY(x) \
+ if (ctxt == NULL) return; \
+ if (nargs != (x)) \
+ XP_ERROR(XPATH_INVALID_ARITY);
+
+/**
+ * CAST_TO_STRING:
+ *
+ * Macro to try to cast the value on the top of the XPath stack to a string.
+ */
+#define CAST_TO_STRING \
+ if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
+ xmlXPathStringFunction(ctxt, 1);
+
+/**
+ * CAST_TO_NUMBER:
+ *
+ * Macro to try to cast the value on the top of the XPath stack to a number.
+ */
+#define CAST_TO_NUMBER \
+ if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
+ xmlXPathNumberFunction(ctxt, 1);
+
+/**
+ * CAST_TO_BOOLEAN:
+ *
+ * Macro to try to cast the value on the top of the XPath stack to a boolean.
+ */
+#define CAST_TO_BOOLEAN \
+ if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
+ xmlXPathBooleanFunction(ctxt, 1);
+
+/*
+ * Variable Lookup forwarding.
+ */
+
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt,
+ xmlXPathVariableLookupFunc f,
+ void *data);
+
+/*
+ * Function Lookup forwarding.
+ */
+
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
+ xmlXPathFuncLookupFunc f,
+ void *funcCtxt);
+
+/*
+ * Error reporting.
+ */
+XMLPUBFUN void XMLCALL
+ xmlXPatherror (xmlXPathParserContextPtr ctxt,
+ const char *file,
+ int line,
+ int no);
+
+XMLPUBFUN void XMLCALL
+ xmlXPathErr (xmlXPathParserContextPtr ctxt,
+ int error);
+
+#ifdef LIBXML_DEBUG_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlXPathDebugDumpObject (FILE *output,
+ xmlXPathObjectPtr cur,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlXPathDebugDumpCompExpr(FILE *output,
+ xmlXPathCompExprPtr comp,
+ int depth);
+#endif
+/**
+ * NodeSet handling.
+ */
+XMLPUBFUN int XMLCALL
+ xmlXPathNodeSetContains (xmlNodeSetPtr cur,
+ xmlNodePtr val);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathDifference (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathIntersection (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathDistinctSorted (xmlNodeSetPtr nodes);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathDistinct (xmlNodeSetPtr nodes);
+
+XMLPUBFUN int XMLCALL
+ xmlXPathHasSameNodes (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,
+ xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathLeadingSorted (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeLeading (xmlNodeSetPtr nodes,
+ xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathLeading (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes,
+ xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathTrailingSorted (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeTrailing (xmlNodeSetPtr nodes,
+ xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathTrailing (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+
+
+/**
+ * Extending a context.
+ */
+
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterNs (xmlXPathContextPtr ctxt,
+ const xmlChar *prefix,
+ const xmlChar *ns_uri);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlXPathNsLookup (xmlXPathContextPtr ctxt,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt);
+
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ xmlXPathFunction f);
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri,
+ xmlXPathFunction f);
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ xmlXPathObjectPtr value);
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri,
+ xmlXPathObjectPtr value);
+XMLPUBFUN xmlXPathFunction XMLCALL
+ xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,
+ const xmlChar *name);
+XMLPUBFUN xmlXPathFunction XMLCALL
+ xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri);
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathVariableLookup (xmlXPathContextPtr ctxt,
+ const xmlChar *name);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri);
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
+
+/**
+ * Utilities to extend XPath.
+ */
+XMLPUBFUN xmlXPathParserContextPtr XMLCALL
+ xmlXPathNewParserContext (const xmlChar *str,
+ xmlXPathContextPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
+
+/* TODO: remap to xmlXPathValuePop and Push. */
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ valuePop (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN int XMLCALL
+ valuePush (xmlXPathParserContextPtr ctxt,
+ xmlXPathObjectPtr value);
+
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewString (const xmlChar *val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewCString (const char *val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathWrapString (xmlChar *val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathWrapCString (char * val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewFloat (double val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewBoolean (int val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewNodeSet (xmlNodePtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewValueTree (xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetAdd (xmlNodeSetPtr cur,
+ xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur,
+ xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetAddNs (xmlNodeSetPtr cur,
+ xmlNodePtr node,
+ xmlNsPtr ns);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetSort (xmlNodeSetPtr set);
+
+XMLPUBFUN void XMLCALL
+ xmlXPathRoot (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathParseName (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathParseNCName (xmlXPathParserContextPtr ctxt);
+
+/*
+ * Existing functions.
+ */
+XMLPUBFUN double XMLCALL
+ xmlXPathStringEvalNumber (const xmlChar *str);
+XMLPUBFUN int XMLCALL
+ xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
+ xmlXPathObjectPtr res);
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeSetMerge (xmlNodeSetPtr val1,
+ xmlNodeSetPtr val2);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetDel (xmlNodeSetPtr cur,
+ xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetRemove (xmlNodeSetPtr cur,
+ int val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewNodeSetList (xmlNodeSetPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathWrapNodeSet (xmlNodeSetPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathWrapExternal (void *val);
+
+XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
+XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
+
+XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
+
+/*
+ * Some of the axis navigation routines.
+ */
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+/*
+ * The official core of XPath functions.
+ */
+XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
+
+/**
+ * Really internal functions
+ */
+XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XPATH_ENABLED */
+#endif /* ! __XML_XPATH_INTERNALS_H__ */
diff --git a/interfaces/ext/libxml/xpointer.h b/interfaces/ext/libxml/xpointer.h
new file mode 100644
index 0000000..dde1dfb
--- /dev/null
+++ b/interfaces/ext/libxml/xpointer.h
@@ -0,0 +1,114 @@
+/*
+ * Summary: API to handle XML Pointers
+ * Description: API to handle XML Pointers
+ * Base implementation was made accordingly to
+ * W3C Candidate Recommendation 7 June 2000
+ * http://www.w3.org/TR/2000/CR-xptr-20000607
+ *
+ * Added support for the element() scheme described in:
+ * W3C Proposed Recommendation 13 November 2002
+ * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XPTR_H__
+#define __XML_XPTR_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_XPTR_ENABLED
+
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A Location Set
+ */
+typedef struct _xmlLocationSet xmlLocationSet;
+typedef xmlLocationSet *xmlLocationSetPtr;
+struct _xmlLocationSet {
+ int locNr; /* number of locations in the set */
+ int locMax; /* size of the array as allocated */
+ xmlXPathObjectPtr *locTab;/* array of locations */
+};
+
+/*
+ * Handling of location sets.
+ */
+
+XMLPUBFUN xmlLocationSetPtr XMLCALL
+ xmlXPtrLocationSetCreate (xmlXPathObjectPtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPtrFreeLocationSet (xmlLocationSetPtr obj);
+XMLPUBFUN xmlLocationSetPtr XMLCALL
+ xmlXPtrLocationSetMerge (xmlLocationSetPtr val1,
+ xmlLocationSetPtr val2);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRange (xmlNodePtr start,
+ int startindex,
+ xmlNodePtr end,
+ int endindex);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangePoints (xmlXPathObjectPtr start,
+ xmlXPathObjectPtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangeNodePoint (xmlNodePtr start,
+ xmlXPathObjectPtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangePointNode (xmlXPathObjectPtr start,
+ xmlNodePtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangeNodes (xmlNodePtr start,
+ xmlNodePtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewLocationSetNodes (xmlNodePtr start,
+ xmlNodePtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangeNodeObject (xmlNodePtr start,
+ xmlXPathObjectPtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewCollapsedRange (xmlNodePtr start);
+XMLPUBFUN void XMLCALL
+ xmlXPtrLocationSetAdd (xmlLocationSetPtr cur,
+ xmlXPathObjectPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrWrapLocationSet (xmlLocationSetPtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPtrLocationSetDel (xmlLocationSetPtr cur,
+ xmlXPathObjectPtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPtrLocationSetRemove (xmlLocationSetPtr cur,
+ int val);
+
+/*
+ * Functions.
+ */
+XMLPUBFUN xmlXPathContextPtr XMLCALL
+ xmlXPtrNewContext (xmlDocPtr doc,
+ xmlNodePtr here,
+ xmlNodePtr origin);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrEval (const xmlChar *str,
+ xmlXPathContextPtr ctx);
+XMLPUBFUN void XMLCALL
+ xmlXPtrRangeToFunction (xmlXPathParserContextPtr ctxt,
+ int nargs);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlXPtrBuildNodeList (xmlXPathObjectPtr obj);
+XMLPUBFUN void XMLCALL
+ xmlXPtrEvalRangePredicate (xmlXPathParserContextPtr ctxt);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XPTR_ENABLED */
+#endif /* __XML_XPTR_H__ */
diff --git a/interfaces/insdc/insdc.h b/interfaces/insdc/insdc.h
index 9c1107c..33e6e94 100644
--- a/interfaces/insdc/insdc.h
+++ b/interfaces/insdc/insdc.h
@@ -235,6 +235,41 @@ typedef INSDC_coord_val INSDC_coord_one;
typedef INSDC_coord_zero INSDC_position_zero;
typedef INSDC_coord_one INSDC_position_one;
+
+/*--------------------------------------------------------------------------
+ * read description
+ * type and filter constants
+ */
+
+
+/* read type
+ * describes the type of read within a spot
+ * the extended version also describes its orientation
+ */
+typedef uint8_t INSDC_read_type;
+enum
+{
+ /* read_type */
+ READ_TYPE_TECHNICAL = 0,
+ READ_TYPE_BIOLOGICAL = 1,
+
+ /* orientation - applied as bits, e.g.:
+ type = READ_TYPE_BIOLOGICAL | READ_TYPE_REVERSE */
+ READ_TYPE_FORWARD = 2,
+ READ_TYPE_REVERSE = 4
+};
+
+/* read filter
+ */
+typedef uint8_t INSDC_read_filter;
+enum
+{
+ READ_FILTER_PASS = 0,
+ READ_FILTER_REJECT = 1,
+ READ_FILTER_CRITERIA = 2,
+ READ_FILTER_REDACTED = 3
+};
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/insdc/sra.h b/interfaces/insdc/sra.h
index df4e00f..85a94f7 100644
--- a/interfaces/insdc/sra.h
+++ b/interfaces/insdc/sra.h
@@ -27,8 +27,8 @@
#ifndef _h_insdc_sra_
#define _h_insdc_sra_
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
+#ifndef _h_insdc_insdc_
+#include <insdc/insdc.h>
#endif
#ifdef __cplusplus
@@ -56,13 +56,13 @@ typedef uint64_t INSDC_SRA_spot_ids_found [ 4 ];
/* read filter
*/
#define sra_read_filter_t "INSDC:SRA:read_filter"
-typedef uint8_t INSDC_SRA_read_filter;
+typedef INSDC_read_filter INSDC_SRA_read_filter;
enum
{
- SRA_READ_FILTER_PASS = 0,
- SRA_READ_FILTER_REJECT = 1,
- SRA_READ_FILTER_CRITERIA = 2,
- SRA_READ_FILTER_REDACTED = 3
+ SRA_READ_FILTER_PASS = READ_FILTER_PASS,
+ SRA_READ_FILTER_REJECT = READ_FILTER_REJECT,
+ SRA_READ_FILTER_CRITERIA = READ_FILTER_CRITERIA,
+ SRA_READ_FILTER_REDACTED = READ_FILTER_REDACTED
};
@@ -71,18 +71,18 @@ enum
* the extended version also describes its orientation
*/
#define sra_read_type_t "INSDC:SRA:xread_type"
-typedef uint8_t INSDC_SRA_xread_type;
+typedef INSDC_read_type INSDC_SRA_xread_type;
typedef INSDC_SRA_xread_type INSDC_SRA_read_type;
enum
{
/* read_type and xread_type */
- SRA_READ_TYPE_TECHNICAL = 0,
- SRA_READ_TYPE_BIOLOGICAL = 1,
+ SRA_READ_TYPE_TECHNICAL = READ_TYPE_TECHNICAL,
+ SRA_READ_TYPE_BIOLOGICAL = READ_TYPE_BIOLOGICAL,
/* xread_type only - applied as bits, e.g.:
type = SRA_READ_TYPE_BIOLOGICAL | SRA_READ_TYPE_REVERSE */
- SRA_READ_TYPE_FORWARD = 2,
- SRA_READ_TYPE_REVERSE = 4
+ SRA_READ_TYPE_FORWARD = READ_TYPE_FORWARD,
+ SRA_READ_TYPE_REVERSE = READ_TYPE_REVERSE
};
@@ -99,7 +99,8 @@ enum
SRA_PLATFORM_COMPLETE_GENOMICS = 4,
SRA_PLATFORM_HELICOS = 5,
SRA_PLATFORM_PACBIO_SMRT = 6,
- SRA_PLATFORM_ION_TORRENT = 7
+ SRA_PLATFORM_ION_TORRENT = 7,
+ SRA_PLATFORM_SANGER = 8
};
#ifdef __cplusplus
diff --git a/interfaces/insdc/sra.vschema b/interfaces/insdc/sra.vschema
index ed196e5..e5dc2f6 100644
--- a/interfaces/insdc/sra.vschema
+++ b/interfaces/insdc/sra.vschema
@@ -374,6 +374,7 @@ const INSDC:SRA:platform_id SRA_PLATFORM_COMPLETE_GENOMICS = 4;
const INSDC:SRA:platform_id SRA_PLATFORM_HELICOS = 5;
const INSDC:SRA:platform_id SRA_PLATFORM_PACBIO_SMRT = 6;
const INSDC:SRA:platform_id SRA_PLATFORM_ION_TORRENT = 7;
+const INSDC:SRA:platform_id SRA_PLATFORM_SANGER = 8;
table INSDC:SRA:tbl:sra #1.0.3 =
INSDC:tbl:sequence #1.0.1, INSDC:SRA:tbl:spotname #1.0.1,
diff --git a/interfaces/kapp/args.h b/interfaces/kapp/args.h
index 949ba72..e19a394 100644
--- a/interfaces/kapp/args.h
+++ b/interfaces/kapp/args.h
@@ -35,6 +35,10 @@
extern "C" {
#endif
+/* this define is while adding the --option-file to standard options
+ * and it might not be right yet */
+#define USE_OPTFILE 1
+
/*
* Terminology for this module:
*
@@ -76,13 +80,24 @@ extern OptDef StandardOptions [];
#define OPTION_HELP "help"
#define OPTION_VERSION "version"
#define OPTION_VERBOSE "verbose"
-
+#define OPTION_QUIET "quiet"
+#if USE_OPTFILE
+#define OPTION_OPTFILE "option-file"
+#endif
+#define OPTION_NO_USER_SETTINGS "no-user-settings"
#define ALIAS_DEBUG "+"
#define ALIAS_LOG_LEVEL "L"
#define ALIAS_HELP "h?"
#define ALIAS_HELP1 "h"
#define ALIAS_VERSION "V"
#define ALIAS_VERBOSE "v"
+#define ALIAS_QUIET "q"
+#if USE_OPTFILE
+#define ALIAS_OPTFILE ""
+#endif
+
+#define OPTION_REPORT "ncbi_error_report"
+#define ALIAS_REPORT ""
/*--------------------------------------------------------------------------
* Args
@@ -103,6 +118,9 @@ rc_t CC ArgsMake ( Args ** pself );
*/
rc_t CC ArgsWhack ( Args * self );
+#ifndef ArgsRelease
+#define ArgsRelease(self) ArgsWhack(self)
+#endif
/* AddOptionArray
* helper function to call the ArgsAddOption() multiple times
@@ -127,6 +145,35 @@ rc_t CC ArgsAddStandardOptions ( Args * self );
rc_t CC ArgsParse ( Args * self, int argc, char *argv[] );
+/* tokenizes a file into an user supplied argv array ( not the one from main() ! )
+ * the result can be passed into ArgsParse(), enables commandline-options from a file
+ * caller has to free the created array via Args_free_token_argv()
+ */
+rc_t CC Args_tokenize_file_into_argv( const char * filename, int * argc, char *** argv );
+
+rc_t CC Args_tokenize_file_and_progname_into_argv( const char * filename, const char * progname,
+ int * argc, char *** argv );
+
+/* free's the array that was created by calling Args_tokenize_file_into_argv()
+ */
+void CC Args_free_token_argv( int argc, char * argv[] );
+
+
+/* looks in args for file_option(s), if found loades the files, parses them
+ if this results in more files to be parsed ( kind of includes ),
+ the parsing continues recursivly
+ */
+rc_t CC Args_parse_inf_file( Args * args, const char * file_option );
+
+
+/* looks in the unparsed original argv for the value of an option
+ >>> this is a hack to enable special treatment for tools that do not use
+ the standard args-parsing <<<
+ */
+rc_t CC Args_find_option_in_argv( int argc, char * argv[],
+ const char * option_name,
+ char * option, size_t option_len );
+
/* OptionCount
* how many times did this Option occur?
*/
@@ -188,6 +235,7 @@ rc_t CC ArgsMakeStandardOptions (Args** pself);
rc_t CC ArgsHandleHelp (Args * self);
rc_t CC ArgsHandleVersion (Args * self);
+rc_t CC ArgsHandleOptfile (Args * self);
/*
* ArgsHandleLogLevel
@@ -212,6 +260,10 @@ rc_t CC ArgsOptionSingleString (const Args * self, const char * option, const ch
rc_t CC ArgsProgram (const Args * args, const char ** fullpath, const char ** progname);
+/* after arguments are parsed; check to see if any required arguments are missing */
+rc_t CC ArgsCheckRequired (Args * args);
+
+
/*
* Help Interface:
* This interface is an extention os the Args Interface that is used for
diff --git a/interfaces/kapp/loader-file.h b/interfaces/kapp/loader-file.h
index d067a77..e4c0de8 100644
--- a/interfaces/kapp/loader-file.h
+++ b/interfaces/kapp/loader-file.h
@@ -36,6 +36,8 @@
#include <stdarg.h>
+#include <klib/log.h>
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -47,7 +49,13 @@ struct KDirectory;
*/
typedef struct KLoaderFile KLoaderFile;
-KAPP_EXTERN rc_t CC KLoaderFile_Make(const KLoaderFile **file, struct KDirectory const* dir, const char* filename, const uint8_t* md5_digest);
+/*
+ md5_digest - not null forces MD5 verification for the file content
+ read_ahead - force reading of the file in a diff thread, ahead of time,
+ usefull on compressed file, speeds up MD5 verify too
+*/
+KAPP_EXTERN rc_t CC KLoaderFile_Make(const KLoaderFile **file, struct KDirectory const* dir, const char* filename,
+ const uint8_t* md5_digest, bool read_ahead);
KAPP_EXTERN rc_t CC KLoaderFile_Release(const KLoaderFile* cself, bool exclude_from_progress);
@@ -57,6 +65,8 @@ KAPP_EXTERN rc_t CC KLoaderFile_Close(const KLoaderFile* cself);
/* restart reading from beginning of the file */
KAPP_EXTERN rc_t CC KLoaderFile_Reset(const KLoaderFile* cself);
+KAPP_EXTERN rc_t CC KLoaderFile_SetReadAhead(const KLoaderFile* cself, bool read_ahead);
+
/* print error msg file file info and return original!! rc
if msg is NULL fmt is not used so call with NULL, NULL if no msg needs to be printed */
KAPP_EXTERN rc_t CC KLoaderFile_LOG(const KLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...);
@@ -74,9 +84,12 @@ KAPP_EXTERN rc_t CC KLoaderFile_Line(const KLoaderFile* cself, uint64_t* line);
/* file name */
KAPP_EXTERN rc_t CC KLoaderFile_Name(const KLoaderFile *self, const char **name);
-/* file name completly resolved */
+/* real file name */
KAPP_EXTERN rc_t CC KLoaderFile_FullName(const KLoaderFile *self, const char **name);
+/* file name completly resolved */
+KAPP_EXTERN rc_t CC KLoaderFile_ResolveName(const KLoaderFile *self, char *resolved, size_t rsize);
+
/* Readline
* makes next line from a file available in buffer.
* eligable EOL symbols are: \n (unix), \r (older mac), \r\n (win)
diff --git a/interfaces/kapp/loader-meta.h b/interfaces/kapp/loader-meta.h
index 6976d2d..28a711a 100644
--- a/interfaces/kapp/loader-meta.h
+++ b/interfaces/kapp/loader-meta.h
@@ -40,7 +40,7 @@ extern "C" {
struct KMDataNode;
-KAPP_EXTERN rc_t CC KLoaderMeta_Write(KMDataNode* root,
+KAPP_EXTERN rc_t CC KLoaderMeta_Write(struct KMDataNode* root,
const char* argv0, const char* argv0_date,
const char* app_name, ver_t app_version);
diff --git a/interfaces/kapp/log-xml.h b/interfaces/kapp/log-xml.h
index 4f7b77b..9517fb8 100644
--- a/interfaces/kapp/log-xml.h
+++ b/interfaces/kapp/log-xml.h
@@ -38,6 +38,8 @@
extern "C" {
#endif
+struct KDirectory;
+
KAPP_EXTERN_DATA const OptDef XMLLogger_Args [];
KAPP_EXTERN_DATA const size_t XMLLogger_ArgsQty;
@@ -46,7 +48,8 @@ typedef struct XMLLogger XMLLogger;
/*
Creates XML logging based on dir and command line
*/
-KAPP_EXTERN rc_t CC XMLLogger_Make(const XMLLogger** cself, KDirectory* dir, const Args *args);
+KAPP_EXTERN rc_t CC XMLLogger_Make(const XMLLogger** cself,
+ struct KDirectory* dir, const Args *args);
/*
Creates XML logging based on dir, logpath pair or fd directly
@@ -57,12 +60,15 @@ KAPP_EXTERN rc_t CC XMLLogger_Make(const XMLLogger** cself, KDirectory* dir, con
if both logpath == NULL and fd < 0 than no XML log is produced normal log gets full inforamtion
*/
-KAPP_EXTERN rc_t CC XMLLogger_Make2(const XMLLogger** cself, KDirectory* dir, const char* logpath, const int fd);
+KAPP_EXTERN rc_t CC XMLLogger_Make2(const XMLLogger** cself,
+ struct KDirectory* dir, const char* logpath, const int fd);
KAPP_EXTERN void CC XMLLogger_Usage(void);
KAPP_EXTERN void CC XMLLogger_Release(const XMLLogger* cself);
+KAPP_EXTERN rc_t CC XMLLogger_Encode(const char* src, char *dst, size_t dst_sz, size_t *num_writ);
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/kapp/queue-file.h b/interfaces/kapp/queue-file.h
new file mode 100644
index 0000000..79fa890
--- /dev/null
+++ b/interfaces/kapp/queue-file.h
@@ -0,0 +1,149 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_kapp_queue_file_
+#define _h_kapp_queue_file_
+
+#ifndef _h_kapp_extern_
+#include <kapp/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * KQueueFile
+ * an extension to KFile that runs on a background thread
+ */
+struct KFile;
+
+
+/* MakeRead
+ * make a queue file for reading-ahead on background thread
+ *
+ * when the file is created, a background thread is started
+ * that begins reading from "src" at position "pos", into
+ * buffers of size "buffer_size". each buffer is pushed into
+ * a cross-thread queue where it is consumed by the reading
+ * thread.
+ *
+ * the background thread is throttled by queue capacity - determined
+ * by "queue_bytes" and "block_size", such that if the queue is full,
+ * the thread will sleep. the consumer thread is also throttled by the
+ * queue in that it will sleep if the queue is empty with pending data.
+ *
+ * the background thread will exit upon reaching end of file,
+ * upon a permanent error, or if the queue is sealed by the consumer
+ * thread.
+ *
+ * when the file is collected in response to a release message,
+ * the queue will be sealed against further inserts, pending buffers
+ * will be discarded, the background thread will be joined, and
+ * the source file will be released.
+ *
+ * the intended usage is serial reading of the file. reads
+ * may only progress forward, i.e. backing up is not permitted.
+ *
+ * "qf" [ OUT ] - return parameter for queue file
+ *
+ * "pos" [ IN ] - starting position for reads from "src".
+ * NB - "src" must support being addressed at this position.
+ *
+ * "src" [ IN ] - source file for read-ahead on background thread.
+ * must have read permissions.
+ *
+ * "queue_bytes" [ IN ] - the read-ahead limit of the background
+ * thread, in bytes. this is the amount of data that will be queued
+ * for the consumer thread before the bg thread sleeps.
+ *
+ * "block_size" [ IN, DEFAULT ZERO ] - optional parameter giving
+ * desired block size when reading from "src". this may be used
+ * to tune reading for source data, e.g. 64K blocks for gzip.
+ *
+ * "timeout_ms" [ IN, DEFAULT ZERO ] - optional parameter specifying the period of time (in ms)
+ * at which the background thread will check whether it is to quit (e.g. the foregrount thread has sealed the buffer),
+ * when the queue cannot be written into. If 0 specified, the timeout is set to 150 ms.
+ */
+KAPP_EXTERN rc_t CC KQueueFileMakeRead ( struct KFile const **qf, uint64_t pos,
+ struct KFile const *src, size_t queue_bytes, size_t block_size, uint32_t timeout_ms );
+
+
+/* MakeWrite
+ * make a queue file for writing-behind on background thread
+ *
+ * when the file is created, a background thread is started that
+ * waits for buffers to appear in the cross-thread queue. as the producer
+ * thread writes, data are accumulated into buffers which are pushed
+ * into the queue as they fill, and written in turn on the bg thread.
+ *
+ * the producer thread is throttled by queue capacity - determined by
+ * "queue_bytes" and "block_size", such that if the queue is full,
+ * the thread will sleep. the background thread is also throttled by
+ * the queue in that it will sleep if the queue is empty with pending
+ * data.
+ *
+ * the background thread will exit upon a permanent error, or if the
+ * queue is sealed by the producer thread.
+ *
+ * when the file is collected in response to a release message,
+ * the queue will be sealed against further inserts, pending buffers
+ * will be written, the background thread will be joined, and
+ * the source file will be released.
+ *
+ * the intended usage is serial writing of the file. random writes
+ * will be accepted, but may reduce the queue efficiency.
+ *
+ * "qf" [ OUT ] - return parameter for queue file
+ *
+ * "dst" [ IN ] - destination file for write-behind on background thread.
+ * must have write permissions.
+ *
+ * "queue_bytes" [ IN ] - the write-behind limit of the producer
+ * thread, in bytes. this is the amount of data that will be queued
+ * for the background thread before the producer thread sleeps.
+ *
+ * "block_size" [ IN, DEFAULT ZERO ] - optional parameter giving
+ * desired block size when writing to "dst". this may be used
+ * to tune writing for source data, e.g. 64K blocks for gzip.
+ *
+ * "timeout_ms" [ IN, DEFAULT ZERO ] - optional parameter specifying the period of time (in ms)
+ * at which the background thread will check whether it is to quit (e.g. the foregrount thread has sealed the buffer),
+ * when the queue cannot be read from. If 0 specified, the timeout is set to 150 ms.
+ */
+KAPP_EXTERN rc_t CC KQueueFileMakeWrite ( struct KFile **qf,
+ struct KFile *dst, size_t queue_bytes, size_t block_size, uint32_t timeout_ms );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kapp_queue_file_ */
diff --git a/interfaces/kdb/btree.h b/interfaces/kdb/btree.h
index 83d46f2..0f6e85d 100644
--- a/interfaces/kdb/btree.h
+++ b/interfaces/kdb/btree.h
@@ -58,6 +58,7 @@ extern "C" {
* forwards
*/
struct KFile;
+struct KDataBuffer;
/*--------------------------------------------------------------------------
@@ -130,6 +131,7 @@ enum
kbtFloatKey, /* key is a float */
kbtDoubleKey, /* key is a double */
#endif
+ kbtPacked2naKey, /* key is in packed 2na */
kbtLastDefined
};
@@ -161,6 +163,8 @@ enum
* opaque key sizes. min == max implies fixed size. ignored for well
* known fixed size key types.
*
+ * "id_size" [ IN ] - size of id in bytes, from 1 to 8.
+ *
* "min_value_size" [ IN ] and "max_value_size" [ IN ] - specifies the allowed
* value sizes. min == max implies fixed size.
*
@@ -173,7 +177,7 @@ KDB_EXTERN rc_t CC KBTreeMakeRead ( const KBTree **bt,
#if BTREE_KEY2ID
KDB_EXTERN rc_t CC KBTreeMakeUpdate ( KBTree **bt, struct KFile *backing,
size_t climit, bool write_through, KBTreeKeyType type,
- size_t min_key_size, size_t max_key_size,
+ size_t min_key_size, size_t max_key_size, size_t id_size,
KBTreeCompareFunc cmp );
#else
KDB_EXTERN rc_t CC KBTreeMakeUpdate ( KBTree **bt, struct KFile *backing,
@@ -225,7 +229,7 @@ KDB_EXTERN rc_t CC KBTreeSize ( const KBTree *self,
* opaque key
*/
#if BTREE_KEY2ID
-KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, uint32_t *id,
+KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, uint64_t *id,
const void *key, size_t key_size );
#else
KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
@@ -233,6 +237,89 @@ KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
#endif
+/* FindOne
+ * searches for a match
+ * where "match" is defined as an exact match
+ * of the shorter ( key, entry ) against the
+ * corresponding prefix of the longer.
+ *
+ * "id" [ OUT ] - return id of matching entry if found
+ *
+ * "key" [ IN ] and "key_size" [ IN ] - describes an
+ * opaque key
+ *
+ * "match_type" [ IN ] - choose search algorithm
+ *
+ * "remainder" [ OUT ] - returns the number of bytes
+ * left unmatched by comparison between the key and entry.
+ * values:
+ * = 0 - exact match
+ * < 0 - key is shorter than entry
+ * > 0 - key is longer than entry
+ */
+#if BTREE_KEY2ID && 1
+typedef uint32_t KBTreeMatchType;
+enum
+{
+ kbtMatchFirst = 1, /* choose first matching entry */
+ kbtMatchRandom /* choose a matching entry at random */
+};
+
+typedef struct KBTreeMatchResult KBTreeMatchResult;
+struct KBTreeMatchResult
+{
+ uint64_t id;
+ int64_t remainder;
+};
+
+KDB_EXTERN rc_t CC KBTreeFindOne ( const KBTree *self,
+ KBTreeMatchResult *found, KBTreeMatchType match_type,
+ const void *key, size_t key_size );
+#endif
+
+
+/* FindAll
+ * searches for all matches
+ * where "match" is defined as an exact match
+ * of the shorter ( key, entry ) against the
+ * corresponding prefix of the longer.
+ *
+ * "ids" [ IN/OUT ] - array of uint64_t gets dynamically
+ * resized based upon the number of matches
+ *
+ * "key" [ IN ] and "key_size" [ IN ] - describes an
+ * opaque key
+ *
+ * "remainder" [ OUT ] - returns the number of bytes
+ * left unmatched by comparison between the key and entry.
+ * values:
+ * = 0 - exact match
+ * < 0 - key is shorter than entry
+ * > 0 - key is longer than entry
+ */
+#if BTREE_KEY2ID && 1
+KDB_EXTERN rc_t CC KBTreeFindAll ( const KBTree *self,
+ struct KDataBuffer *found_set,
+ const void *key, size_t key_size );
+#endif
+
+
+/* FindCustom
+ * searches for a match using a custom function
+ *
+ * "val" [ OUT ] - return parameter for value found
+ * accessed via KBTreeValueAccess* described above
+ * must be balanced with a call to KBTreeValueWhack.
+ *
+ * "key" [ IN ] and "key_size" [ IN ] - describes an
+ * opaque key
+ */
+#if BTREE_KEY2ID && 0
+KDB_EXTERN rc_t CC KBTreeFindCustom ( const KBTree *self, uint64_t *id,
+ const void *key, size_t key_size, KBTreeCompareFunc custom_cmp );
+#endif
+
+
/* Entry
* searches for a match or creates a new entry
*
@@ -252,7 +339,7 @@ KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
* opaque key
*/
#if BTREE_KEY2ID
-KDB_EXTERN rc_t CC KBTreeEntry ( KBTree *self, uint32_t *id,
+KDB_EXTERN rc_t CC KBTreeEntry ( KBTree *self, uint64_t *id,
bool *was_inserted, const void *key, size_t key_size );
#else
KDB_EXTERN rc_t CC KBTreeEntry ( KBTree *self, KBTreeValue *val,
@@ -270,7 +357,7 @@ KDB_EXTERN rc_t CC KBTreeEntry ( KBTree *self, KBTreeValue *val,
*/
#if BTREE_KEY2ID
KDB_EXTERN rc_t CC KBTreeForEach ( const KBTree *self, bool reverse,
- void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data );
+ void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data );
#else
KDB_EXTERN rc_t CC KBTreeForEach ( const KBTree *self, bool reverse,
void ( CC * f ) ( const void *key, size_t key_size, KBTreeValue *val, void *data ), void *data );
diff --git a/interfaces/kdb/consistency-check.h b/interfaces/kdb/consistency-check.h
index d4a607d..18444e4 100644
--- a/interfaces/kdb/consistency-check.h
+++ b/interfaces/kdb/consistency-check.h
@@ -31,6 +31,10 @@
#include <kdb/extern.h>
#endif
+#ifndef _h_insdc_sra_
+#include <insdc/sra.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -51,7 +55,8 @@ enum
ccrpt_Done,
ccrpt_MD5,
ccrpt_Blob,
- ccrpt_Index
+ ccrpt_Index,
+ ccrpt_Visit
};
@@ -72,14 +77,12 @@ struct CCReportInfoBlock
{
const char *mesg;
rc_t rc;
-
} done;
struct ccrb_md5_s
{
const char *file;
rc_t rc;
-
} MD5;
struct ccrb_blob_s
@@ -98,25 +101,31 @@ struct CCReportInfoBlock
uint64_t num_holes;
} index;
-
+
+ struct ccrb_visit_s {
+ unsigned depth;
+ } visit;
} info;
};
typedef rc_t ( CC *CCReportFunc ) ( const CCReportInfoBlock *info, void *data );
+/* a flag for level parameter */
+#define CC_INDEX_ONLY 0x80000000
/*--------------------------------------------------------------------------
* KDatabase
*/
KDB_EXTERN rc_t CC KDatabaseConsistencyCheck ( struct KDatabase const *self,
- uint32_t level, CCReportFunc report, void *data );
+ uint32_t depth, uint32_t level, CCReportFunc report, void *data );
/*--------------------------------------------------------------------------
* KTable
*/
KDB_EXTERN rc_t CC KTableConsistencyCheck ( struct KTable const *self,
- uint32_t level, CCReportFunc report, void *data );
+ uint32_t depth, uint32_t level, CCReportFunc report, void *data,
+ INSDC_SRA_platform_id platform);
/*--------------------------------------------------------------------------
diff --git a/interfaces/kdb/database.h b/interfaces/kdb/database.h
index 20cbee8..af65ebb 100644
--- a/interfaces/kdb/database.h
+++ b/interfaces/kdb/database.h
@@ -134,15 +134,29 @@ KDB_EXTERN bool CC KDatabaseLocked ( const KDatabase *self );
* returns true if requested object exists
*
* "type" [ IN ] - a KDBPathType
- * valid values are kptIndex and kptColumn
+ * valid values are kptDatabase, kptTable and kptIndex
*
- * "path" [ IN ] - NUL terminated path
+ * "name" [ IN ] - NUL terminated object name
*/
KDB_EXTERN bool CC KDatabaseExists ( const KDatabase *self, uint32_t type,
const char *name, ... );
KDB_EXTERN bool CC KDatabaseVExists ( const KDatabase *self, uint32_t type,
const char *name, va_list args );
+/* IsAlias
+ * returns true if object name is an alias
+ * returns path to fundamental name if it was aliased
+ *
+ * "type" [ IN ] - a KDBPathType
+ * valid values are kptDatabase, kptTable and kptIndex
+ *
+ * "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ * for fundamenta object name if "alias" is not a fundamental name,
+ *
+ * "name" [ IN ] - NUL terminated object name
+ */
+KDB_EXTERN bool CC KDatabaseIsAlias ( const KDatabase *self, uint32_t type,
+ char *resolved, size_t rsize, const char *name );
/* Writable
* returns 0 if object is writable
diff --git a/interfaces/kdb/kdb-priv.h b/interfaces/kdb/kdb-priv.h
index 5fb4724..280f0de 100644
--- a/interfaces/kdb/kdb-priv.h
+++ b/interfaces/kdb/kdb-priv.h
@@ -76,6 +76,12 @@ KDB_EXTERN rc_t CC KDBManagerVGetTableModDate ( struct KDBManager const *self,
KDB_EXTERN rc_t CC KDatabaseOpenDirectoryRead ( struct KDatabase const *self, struct KDirectory const **dir );
KDB_EXTERN rc_t CC KDatabaseOpenDirectoryUpdate ( struct KDatabase *self, struct KDirectory **dir );
+/* GetPath
+ * return the absolute path to DB
+ */
+KDB_EXTERN rc_t CC KDatabaseGetPath ( struct KDatabase const *self,
+ const char **path );
+
/*--------------------------------------------------------------------------
* KTable
@@ -90,6 +96,12 @@ KDB_EXTERN rc_t CC KTableOpenDirectoryUpdate ( struct KTable *self, struct KDire
#define KTableGetDirectoryRead KTableOpenDirectoryRead
#define KTableGetDirectoryUpdate KTableOpenDirectoryUpdate
+/* GetPath
+ * return the absolute path to table
+ */
+KDB_EXTERN rc_t CC KTableGetPath ( struct KTable const *self,
+ const char **path );
+
/*--------------------------------------------------------------------------
* KColumn
diff --git a/interfaces/kdb/manager.h b/interfaces/kdb/manager.h
index 31c5577..48576a3 100644
--- a/interfaces/kdb/manager.h
+++ b/interfaces/kdb/manager.h
@@ -31,29 +31,37 @@
#include <kdb/extern.h>
#endif
-#ifndef _h_kfs_directory_
-#include <kfs/directory.h>
-#endif
+/* #ifndef _h_kfs_directory_ */
+/* #include <kfs/directory.h> */
+/* #endif */
+#include <kfs/defs.h> /* kpt types */
+#include <stdarg.h>
#ifdef __cplusplus
extern "C" {
#endif
+struct VPath;
+struct KDirectory;
/*--------------------------------------------------------------------------
* KDBPathType
- * extends KPathType from <kfs/directory.h>
+ * extends KPathType from <kfs/defs.h>
*/
enum
{
/* must be handled carefully and can not go back to KDirectory
- * as this value has a different meaning in KDirectory */
+ * as this value has a different meaning in KDirectory */
kptAny = 0,
kptDatabase = kptLastDefined,
kptTable,
kptIndex,
- kptColumn
+ kptColumn,
+
+ /* these values may not be used in KDBManagerExists below */
+ kptMetadata,
+ kptPrereleaseTbl
};
@@ -81,8 +89,8 @@ KDB_EXTERN rc_t CC KDBManagerRelease ( const KDBManager *self );
* "wd" [ IN, NULL OKAY ] - optional working directory for
* accessing the file system. mgr will attach its own reference.
*/
-KDB_EXTERN rc_t CC KDBManagerMakeRead ( const KDBManager **mgr, const KDirectory *wd );
-KDB_EXTERN rc_t CC KDBManagerMakeUpdate ( KDBManager **mgr, KDirectory *wd );
+KDB_EXTERN rc_t CC KDBManagerMakeRead ( const KDBManager **mgr, const struct KDirectory *wd );
+KDB_EXTERN rc_t CC KDBManagerMakeUpdate ( KDBManager **mgr, struct KDirectory *wd );
/* Version
@@ -97,6 +105,9 @@ KDB_EXTERN rc_t CC KDBManagerVersion ( const KDBManager *self, uint32_t *version
* "type" [ IN ] - a KDBPathType
*
* "path" [ IN ] - NUL terminated path
+ *
+ * DEPRECATED:
+ * Should use KDBManagerPathType for reduced network thrashing.
*/
KDB_EXTERN bool CC KDBManagerExists ( const KDBManager *self, uint32_t type,
const char *name, ... );
@@ -154,13 +165,14 @@ KDB_EXTERN rc_t CC KDBManagerRunPeriodicTasks ( const KDBManager *self );
/* PathType
- * check the path type of an object/directory path.
- * this is an extension of the KDirectoryPathType and will return
- * the KDirectory values if a path type is not specifically a
- * kdb object
+ * check the path type of an object/directory path.
+ * this is an extension of the KDirectoryPathType and will return
+ * the KDirectory values if a path type is not specifically a
+ * kdb object
*/
-KDB_EXTERN int CC KDBManagerPathType ( const KDBManager * self, const char *path, ... );
-KDB_EXTERN int CC KDBManagerVPathType ( const KDBManager * self, const char *path, va_list args );
+KDB_EXTERN int CC KDBManagerPathTypeVP ( const KDBManager * self, const struct VPath * path );
+KDB_EXTERN int CC KDBManagerPathType ( const KDBManager * self, const char *path, ... );
+KDB_EXTERN int CC KDBManagerVPathType ( const KDBManager * self, const char *path, va_list args );
#ifdef __cplusplus
diff --git a/interfaces/kdb/namelist.h b/interfaces/kdb/namelist.h
index 773d7df..68233f4 100644
--- a/interfaces/kdb/namelist.h
+++ b/interfaces/kdb/namelist.h
@@ -70,7 +70,8 @@ KDB_EXTERN rc_t CC KTableListIdx ( struct KTable const *self, struct KNamelist *
* create metadata node listings
*/
KDB_EXTERN rc_t CC KMDataNodeListAttr ( struct KMDataNode const *self, struct KNamelist **names );
-KDB_EXTERN rc_t CC KMDataNodeListChild ( struct KMDataNode const *self, struct KNamelist **names );
+KDB_EXTERN rc_t CC KMDataNodeListChildren ( struct KMDataNode const *self, struct KNamelist **names );
+#define KMDataNodeListChild KMDataNodeListChildren
#ifdef __cplusplus
diff --git a/interfaces/kdb/table.h b/interfaces/kdb/table.h
index a506938..2d1a819 100644
--- a/interfaces/kdb/table.h
+++ b/interfaces/kdb/table.h
@@ -143,6 +143,20 @@ KDB_EXTERN bool CC KTableExists ( const KTable *self, uint32_t type,
KDB_EXTERN bool CC KTableVExists ( const KTable *self, uint32_t type,
const char *name, va_list args );
+/* IsAlias
+ * returns true if object name is an alias
+ * returns path to fundamental name if it was aliased
+ *
+ * "type" [ IN ] - a KDBPathType
+ * valid values are kptIndex and kptColumn
+ *
+ * "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ * for fundamenta object name if "alias" is not a fundamental name,
+ *
+ * "name" [ IN ] - NUL terminated object name
+ */
+KDB_EXTERN bool CC KTableIsAlias ( const KTable *self, uint32_t type,
+ char *resolved, size_t rsize, const char *name );
/* Writable
* returns 0 if object is writable
diff --git a/interfaces/kfg/config.h b/interfaces/kfg/config.h
index c61ab4c..f58eb61 100644
--- a/interfaces/kfg/config.h
+++ b/interfaces/kfg/config.h
@@ -54,12 +54,20 @@ extern "C" {
/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct KDirectory;
+struct KNamelist;
+struct VPath;
+struct String;
+
+/*--------------------------------------------------------------------------
* KConfig
* configuration paramter manager
*/
typedef struct KConfig KConfig;
-struct KDirectory;
/* Make
* create a process-global configuration manager
@@ -71,7 +79,6 @@ struct KDirectory;
KFG_EXTERN rc_t CC KConfigMake ( KConfig **cfg,
struct KDirectory const * optional_search_base );
-
/* AddRef
* Release
*/
@@ -82,11 +89,103 @@ KFG_EXTERN rc_t CC KConfigRelease ( const KConfig *self );
/* LoadFile
* loads a configuration file
*/
-struct KFile;
KFG_EXTERN rc_t CC KConfigLoadFile ( KConfig * self,
const char * path, struct KFile const * file );
+/* Commit
+ * commits changes to user's private configuration file
+ */
+KFG_EXTERN rc_t CC KConfigCommit ( KConfig *self );
+
+/* ReadBool
+ * read a boolean node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (true if "TRUE", false if "FALSE"; rc != 0 if neither)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadBool ( const KConfig* self, const char* path, bool* result );
+
+/* ReadI64
+ * read an integer node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadI64 ( const KConfig* self, const char* path, int64_t* result );
+
+/* ReadU64
+ * read an unsigned node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadU64 ( const KConfig* self, const char* path, uint64_t* result );
+
+/* ReadF64
+ * read an F64 node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadF64( const KConfig* self, const char* path, double* result );
+
+#if 0
+/*** NB - temporarily lives in vfs due to library interdependencies ***/
+
+/* ReadVPath
+ * read a VPath node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadVPath ( const KConfig* self, const char* path, struct VPath** result );
+#endif
+
+/* ReadString
+ * read a String node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value; caller responsible for deallocation
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadString ( const KConfig* self, const char* path, struct String** result );
+
+
+/* Print
+ * print configuration to output handler (using OUTMSG)
+ */
+KFG_EXTERN rc_t CC KConfigPrint ( const KConfig * self, int indent );
+
+
+/* ImportNgc
+ * import ngc file into current configuration
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the ngc file
+ * pathToProtectedRepository [ IN, NULL OKAY ] - optional - the
+ * special value NULL is interpreted as ${HOME}/ncbi/dbGap-$(Project #)
+ */
+KFG_EXTERN rc_t CC KConfigImportNgc(KConfig *self,
+ const char *ngcPath, const char *pathToProtectedRepository);
+
+/* DisableUserSettings
+ * for testing purposes
+ */
+KFG_EXTERN void CC KConfigDisableUserSettings ( void );
+
+
/*--------------------------------------------------------------------------
* KConfigNode
* node within configuration tree
@@ -164,12 +263,69 @@ KFG_EXTERN rc_t CC KConfigNodeRead ( const KConfigNode *self,
size_t offset, char *buffer, size_t bsize,
size_t *num_read, size_t *remaining );
+/* ReadBool
+ * read a boolean node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (true if "TRUE", false if "FALSE"; rc != 0 if neither)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadBool ( const KConfigNode *self, bool* result );
+
+/* ReadI64
+ * read an integer node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadI64 ( const KConfigNode *self, int64_t* result );
-/* ListChild
+/* ReadU64
+ * read an unsigned node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadU64 ( const KConfigNode *self, uint64_t* result );
+
+/* ReadF64
+ * read an F64 node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadF64 ( const KConfigNode *self, double* result );
+
+#if 0
+/*** NB - temporarily lives in vfs due to library interdependencies ***/
+
+/* ReadVPath
+ * read a VPath node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadVPath ( const KConfigNode *self, struct VPath** result );
+#endif
+
+/* ReadString
+ * read a String node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value; caller responsible for deallocation
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadString ( const KConfigNode *self, struct String** result );
+
+/* ListChildren - nee ListChild
* list all named children
*/
-struct KNamelist;
-KFG_EXTERN rc_t CC KConfigNodeListChild ( const KConfigNode *self,
+#define KConfigNodeListChild KConfigNodeListChildren
+KFG_EXTERN rc_t CC KConfigNodeListChildren ( const KConfigNode *self,
struct KNamelist **names );
diff --git a/interfaces/kfg/kfg-priv.h b/interfaces/kfg/kfg-priv.h
index dc8f00c..59a4dcd 100644
--- a/interfaces/kfg/kfg-priv.h
+++ b/interfaces/kfg/kfg-priv.h
@@ -48,6 +48,10 @@ KFG_EXTERN rc_t CC KConfigListIncluded ( const KConfig *self,
KFG_EXTERN rc_t CC KConfigGetLoadPath ( const KConfig *self,
const char **path );
+/* call KConfigMake not initializing the static global KConfig pointer */
+KFG_EXTERN rc_t CC KConfigMakeLocal ( KConfig **cfg,
+ const struct KDirectory * cfgdir );
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/kfg/repository.h b/interfaces/kfg/repository.h
new file mode 100644
index 0000000..6d90247
--- /dev/null
+++ b/interfaces/kfg/repository.h
@@ -0,0 +1,271 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfg_repository_
+#define _h_kfg_repository_
+
+#ifndef _h_kfg_extern_
+#include <kfg/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KConfig;
+
+
+/*--------------------------------------------------------------------------
+ * KRepository
+ * presents structured access to a storage repository
+ * as modeled in KConfig.
+ *
+ * all objects are obtained via KRepositoryMgr ( see below )
+ */
+typedef struct KRepository KRepository;
+
+
+/* AddRef
+ * Release
+ */
+KFG_EXTERN rc_t CC KRepositoryAddRef ( const KRepository *self );
+KFG_EXTERN rc_t CC KRepositoryRelease ( const KRepository *self );
+
+
+/* Category
+ * SubCategory
+ * tells what the repository category or sub-category are
+ * or returns "bad" if the repository object is not usable.
+ */
+typedef uint32_t KRepCategory;
+enum
+{
+ krepBadCategory,
+ krepUserCategory,
+ krepSiteCategory,
+ krepRemoteCategory
+};
+
+typedef uint32_t KRepSubCategory;
+enum
+{
+ krepBadSubCategory,
+ krepMainSubCategory,
+ krepAuxSubCategory,
+ krepProtectedSubCategory
+};
+
+KFG_EXTERN KRepCategory CC KRepositoryCategory ( const KRepository *self );
+KFG_EXTERN KRepSubCategory CC KRepositorySubCategory ( const KRepository *self );
+
+
+/* Name
+ * get the repository name
+ * attempts to copy NUL-terminated name into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - name output parameter
+ *
+ * "name_size" [ OUT, NULL OKAY ] - returns the name size in
+ * bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryName ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *name_size );
+
+
+/* DisplayName
+ * get the repository display name,
+ * if different from its actual name
+ *
+ * attempts to copy NUL-terminated name into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - name output parameter
+ *
+ * "name_size" [ OUT, NULL OKAY ] - returns the name size in
+ * bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryDisplayName ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *name_size );
+
+
+/* Root
+ * read the root path as a POSIX path or URL
+ *
+ * attempts to copy NUL-terminated path into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - path output parameter
+ *
+ * "root_size" [ OUT, NULL OKAY ] - returns the path size in
+ * bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryRoot ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *root_size );
+
+
+/* Disabled
+ * discover whether the repository is enabled
+ */
+KFG_EXTERN bool CC KRepositoryDisabled ( const KRepository *self );
+
+/* CacheEnabled
+ * discover whether the repository supports caching
+ */
+KFG_EXTERN bool CC KRepositoryCacheEnabled ( const KRepository *self );
+
+
+/* DownloadTicket
+ * return any associated download ticket
+ *
+ * attempts to copy NUL-terminated ticket into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - ticket output parameter
+ *
+ * "ticket_size" [ OUT, NULL OKAY ] - returns the ticket size in
+ * bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryDownloadTicket ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *ticket_size );
+
+
+/* EncryptionKey
+ * return any associated encryption key
+ *
+ * attempts to copy NUL-terminated key into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - encryption key output parameter
+ *
+ * "key_size" [ OUT, NULL OKAY ] - returns the key size in
+ * bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryEncryptionKey ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *key_size );
+
+
+/* EncryptionKeyFile
+ * return path to any associated encryption key file
+ *
+ * attempts to copy NUL-terminated path into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - key file path output parameter
+ *
+ * "path_size" [ OUT, NULL OKAY ] - returns the path size in
+ * bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryEncryptionKeyFile ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *path_size );
+
+
+/* Description
+ * return any associated descriptive text
+ *
+ * attempts to copy NUL-terminated description into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - description text output parameter
+ *
+ * "desc_size" [ OUT, NULL OKAY ] - returns the text size in
+ * bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryDescription ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *desc_size );
+
+
+/*--------------------------------------------------------------------------
+ * KRepositoryVector
+ * uses Vector API
+ * holds zero or more KRepository objects
+ */
+typedef struct Vector KRepositoryVector;
+
+
+/* Whack
+ * destroy your vector
+ */
+KFG_EXTERN rc_t CC KRepositoryVectorWhack ( KRepositoryVector *self );
+
+
+/*--------------------------------------------------------------------------
+ * KRepositoryMgr
+ * manages structured access to repositories
+ */
+typedef struct KRepositoryMgr KRepositoryMgr;
+
+
+/* Make
+ * create a repository manager
+ * uses values from "self"
+ */
+KFG_EXTERN rc_t CC KConfigMakeRepositoryMgrRead ( struct KConfig const *self,
+ const KRepositoryMgr **mgr );
+KFG_EXTERN rc_t CC KConfigMakeRepositoryMgrUpdate ( struct KConfig *self,
+ KRepositoryMgr **mgr );
+
+
+/* AddRef
+ * Release
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrAddRef ( const KRepositoryMgr *self );
+KFG_EXTERN rc_t CC KRepositoryMgrRelease ( const KRepositoryMgr *self );
+
+
+/* UserRepositories
+ * retrieve all user repositories in a Vector
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrUserRepositories ( const KRepositoryMgr *self,
+ KRepositoryVector *user_repositories );
+
+
+/* SiteRepositories
+ * retrieve all site repositories in a Vector
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrSiteRepositories ( const KRepositoryMgr *self,
+ KRepositoryVector *site_repositories );
+
+
+/* RemoteRepositories
+ * retrieve all remote repositories in a Vector
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrRemoteRepositories ( const KRepositoryMgr *self,
+ KRepositoryVector *remote_repositories );
+
+/* CurrentProtectedRepository
+ * returns the currently active user protected repository
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrCurrentProtectedRepository ( const KRepositoryMgr *self,
+ const KRepository **protected );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfg_repository_ */
diff --git a/interfaces/kfs/arc.h b/interfaces/kfs/arc.h
index 374a872..8eca2fe 100644
--- a/interfaces/kfs/arc.h
+++ b/interfaces/kfs/arc.h
@@ -42,6 +42,7 @@ extern "C" {
#endif
struct KDirectory;
+struct KFile;
struct KToc;
struct vector;
@@ -94,6 +95,19 @@ KFS_EXTERN rc_t CC KDirectoryOpenArcDirRead(const struct KDirectory * self,
bool( CC * )(const struct KDirectory*, const char *, void*), void*),
bool (CC* filter )(const KDirectory*, const char *, void *), void * filterparam);
+KFS_EXTERN rc_t CC KDirectoryOpenArcDirRead_silent(const struct KDirectory * self,
+ const struct KDirectory ** pdir, bool chroot, const char * path, KArcFSType baseType,
+ rc_t ( CC * parse )(struct KToc *,const void *,
+ bool( CC * )(const struct KDirectory*, const char *, void*), void*),
+ bool (CC* filter )(const KDirectory*, const char *, void *), void * filterparam);
+
+KFS_EXTERN rc_t CC KDirectoryOpenArcDirRead_silent_preopened(const struct KDirectory * self,
+ const struct KDirectory ** pdir, bool chroot, const char * path, KArcFSType baseType,
+ void * f,
+ rc_t ( CC * parse )(struct KToc *,const void *,
+ bool( CC * )(const struct KDirectory*, const char *, void*), void*),
+ bool (CC* filter )(const KDirectory*, const char *, void *), void * filterparam);
+
diff --git a/interfaces/kfs/buffile.h b/interfaces/kfs/buffile.h
index 73e24e3..f32837b 100644
--- a/interfaces/kfs/buffile.h
+++ b/interfaces/kfs/buffile.h
@@ -77,6 +77,16 @@ KFS_EXTERN rc_t CC KBufFileMakeRead ( struct KFile const ** buf,
KFS_EXTERN rc_t CC KBufFileMakeWrite ( struct KFile ** buf,
struct KFile * original, bool update, size_t bsize );
+
+
+
+KFS_EXTERN rc_t CC KBufReadFileMakeRead ( const struct KFile ** bp,
+ const struct KFile * original, size_t bsize );
+
+KFS_EXTERN rc_t CC KBufWriteFileMakeWrite ( struct KFile ** bp,
+ struct KFile * original, size_t bsize );
+
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/kfs/cacheteefile.h b/interfaces/kfs/cacheteefile.h
new file mode 100644
index 0000000..aad2b9c
--- /dev/null
+++ b/interfaces/kfs/cacheteefile.h
@@ -0,0 +1,147 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_cacheteefile_
+#define _h_kfs_cacheteefile_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct KDirectory;
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ */
+
+/* MakeCacheTee
+ * takes a KFile as source
+ *
+ * "tee" [ OUT ] - return parameter for tee file
+ *
+ * "remote" [ IN ] - the source file, generally costly to read which is
+ * the motivation behind caching its output
+ *
+ * "logger" [ IN, NULL OKAY ] - optional debugging output for observing
+ * access patterns of "remote"
+ *
+ * "blocksize" [ IN ] - the cache-file page size
+ * ( if 0 ... default-value will be 32k )
+ *
+ * "cluster" [ IN ] - a blocking factor for accessing "remote"
+ * reads are in blocks of size "blocksize" * "cluster"
+ * ( 1...4 makes most sense )
+ *
+ * "report" [ IN ] - when true, provides more verbose debugging output
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting full cache file, i.e. the name of the file
+ * as it would appear after promoting from partial to full status.
+ *
+ * the function creates a new ( cached ) KFile in **tee
+ *
+ * the caller can access this file to read and query the filesize, these are the only
+ * supported messages to this object
+ *
+ * when the caller requests data that is not already cached in the local file,
+ * the cached file will read from the remote-file, write into the local-file and then
+ * return the requested data in the read-buffer
+ *
+ * when the caller requests data that is already cached, the data will be read from
+ * the local file only, no remote request will be made
+ *
+ * when the caller requests data this is partially cached, the file will return the
+ * part that comes first either from the remote or from the local file
+ * in this case the file will return less data than requested
+ *
+ * when the caller opens an existing local file that contains a full copy of the
+ * remote file, the local KFile will be returned in self
+ *
+ * this function will check if the remote-file and the local file ( if it already exists )
+ * do have the same size and blocksize
+ *
+ */
+KFS_EXTERN rc_t CC KDirectoryMakeCacheTee ( struct KDirectory *self,
+ struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+ uint32_t blocksize, uint32_t cluster, bool report, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVMakeCacheTee ( struct KDirectory *self,
+ struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+ uint32_t blocksize, uint32_t cluster, bool report, const char *path, va_list args );
+
+/* -----
+ * checks if a given file ( has to be a local file )
+ *
+ * a ... is a backing cache-file for the CacheTee-file
+ * b ... all blocks have been filled with the remote content
+ *
+ * it returns the result of the check in *is_complete
+ */
+KFS_EXTERN rc_t CC IsCacheFileComplete( const struct KFile * self, bool * is_complete, bool silent);
+
+
+/* -----
+ * truncates a cache-file for a CacheTee-filec by removing the bitmap/content-lenght/block-size
+ *
+ * it returns the result of the check in *is_complete
+ */
+KFS_EXTERN rc_t CC TruncateCacheFile( struct KFile * self );
+
+
+/* -----
+ * examens the file, and reports what percentage of blocks are in the cache...
+ *
+ */
+KFS_EXTERN rc_t CC GetCacheCompleteness( const struct KFile * self, float * percent );
+
+
+/* -----
+ * examens the file, and reports the size of the original file ( without the cachefile-footer )
+ *
+ */
+KFS_EXTERN rc_t CC GetCacheTruncatedSize( const struct KFile * self, uint64_t * truncated_size, bool silent );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_teefile_ */
diff --git a/interfaces/kfs/directory.h b/interfaces/kfs/directory.h
index 209b263..a6b3fab 100644
--- a/interfaces/kfs/directory.h
+++ b/interfaces/kfs/directory.h
@@ -78,6 +78,9 @@ KFS_EXTERN rc_t CC KDirectoryRelease ( const KDirectory *self );
*
* "path" [ IN, NULL OKAY ] - optional parameter for target
* directory. if NULL or empty, interpreted to mean "."
+ *
+ * function makes a flat list, does not step into sub-dirs!
+ *
*/
KFS_EXTERN rc_t CC KDirectoryList ( const KDirectory *self, struct KNamelist **list,
bool ( CC * f ) ( const KDirectory *dir, const char *name, void *data ),
@@ -274,18 +277,22 @@ KFS_EXTERN rc_t CC KDirectoryVSetDate ( KDirectory *self, bool recurse,
/* CreateAlias
* creates a path alias according to create mode
+ * such that "alias" => "targ"
*
* "access" [ IN ] - standard Unix directory access mode
* used when "mode" has kcmParents set and alias path does
* not exist.
*
- * "mode" [ IN ] - a creation mode ( see explanation above ).
+ * "mode" [ IN ] - a creation mode ( see explanation in kfs/defs.h ).
*
* "targ" [ IN ] - NUL terminated string in directory-native
- * character set denoting target object
+ * character set denoting target object, i.e. the object which
+ * is designated by symlink "alias". THE PATH IS GIVEN RELATIVE
+ * TO DIRECTORY ( "self" ), NOT SYMLINK ( "alias" )!
*
* "alias" [ IN ] - NUL terminated string in directory-native
- * character set denoting target alias
+ * character set denoting target alias, i.e. the symlink that
+ * designates a target "targ".
*/
KFS_EXTERN rc_t CC KDirectoryCreateAlias ( KDirectory *self,
uint32_t access, KCreateMode mode,
@@ -330,7 +337,7 @@ KFS_EXTERN rc_t CC KDirectoryVOpenFileWrite ( KDirectory *self,
*
* "access" [ IN ] - standard Unix access mode, e.g. 0664
*
- * "mode" [ IN ] - a creation mode ( see explanation above ).
+ * "mode" [ IN ] - a creation mode ( see explanation in kfs/defs.h ).
*
* "path" [ IN ] - NUL terminated string in directory-native
* character set denoting target file
@@ -436,7 +443,7 @@ KFS_EXTERN rc_t CC KDirectoryVOpenDirUpdate ( KDirectory *self,
*
* "access" [ IN ] - standard Unix directory mode, e.g.0775
*
- * "mode" [ IN ] - a creation mode ( see explanation above ).
+ * "mode" [ IN ] - a creation mode ( see explanation in defs.h ).
*
* "path" [ IN ] - NUL terminated string in directory-native
* character set denoting target directory
@@ -446,6 +453,52 @@ KFS_EXTERN rc_t CC KDirectoryCreateDir ( KDirectory *self,
KFS_EXTERN rc_t CC KDirectoryVCreateDir ( KDirectory *self,
uint32_t access, KCreateMode mode, const char *path, va_list args );
+
+/* CopyPath
+ * copies a file
+ *
+ * "src_path" [ IN ] - path to source-file
+ *
+ * "dst_path" [ IN ] - file to create
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target directory
+ */
+KFS_EXTERN rc_t CC KDirectoryCopyPath ( const KDirectory *src_dir,
+ KDirectory *dst_dir, const char *src_path, const char * dst_path );
+
+
+/* CopyPaths
+ * copies files, optional recursive in sub-dirs...
+ *
+ * "recursive" [ IN ] - handle subdir's recursivly
+ *
+ * "src" [ IN ] - what directory to copy
+ *
+ * "dst" [ IN ] - into what directory to copy
+ * ( will be created if it does not already exist )
+ *
+ */
+LIB_EXPORT rc_t CC KDirectoryCopyPaths( const KDirectory * src_dir,
+ KDirectory *dst_dir, bool recursive, const char *src, const char *dst );
+
+
+/* Copy
+ * detects if src is a file or a directory
+ *
+ * "recursive" [ IN ] - handle subdir's recursivly
+ * ( if srs is a directory )
+ *
+ * "src" [ IN ] - what file/directory to copy
+ *
+ * "dst" [ IN ] - into what file/directory to copy
+ * ( will be created if it does not already exist )
+ *
+ */
+LIB_EXPORT rc_t CC KDirectoryCopy( const KDirectory * src_dir,
+ KDirectory *dst_dir, bool recursive, const char *src, const char *dst );
+
+
/* NativeDir
* returns a native file-system directory node reference
* the directory root will be "/" and set to the native
diff --git a/interfaces/kfs/file.h b/interfaces/kfs/file.h
index c1d240a..47fe143 100644
--- a/interfaces/kfs/file.h
+++ b/interfaces/kfs/file.h
@@ -119,6 +119,21 @@ KFS_EXTERN rc_t CC KFileSetSize ( KFile *self, uint64_t size );
KFS_EXTERN rc_t CC KFileRead ( const KFile *self, uint64_t pos,
void *buffer, size_t bsize, size_t *num_read );
+/* ReadAll
+ * read from file until "bsize" bytes have been retrieved
+ * or until end-of-input
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT ] - return parameter giving number of bytes
+ * actually read. when returned value is zero and return code is
+ * also zero, interpreted as end of file.
+ */
+KFS_EXTERN rc_t CC KFileReadAll ( const KFile *self, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read );
+
/* Write
* write file at known position
*
@@ -132,6 +147,20 @@ KFS_EXTERN rc_t CC KFileRead ( const KFile *self, uint64_t pos,
KFS_EXTERN rc_t CC KFileWrite ( KFile *self, uint64_t pos,
const void *buffer, size_t size, size_t *num_writ );
+/* WriteAll
+ * write to file until "size" bytes have been transferred
+ * or until no further progress can be made
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ */
+KFS_EXTERN rc_t CC KFileWriteAll ( KFile *self, uint64_t pos,
+ const void *buffer, size_t size, size_t *num_writ );
+
/* MakeStdIn
* creates a read-only file on stdin
*/
diff --git a/interfaces/kfs/impl.h b/interfaces/kfs/impl.h
index 70b3b79..22bf168 100644
--- a/interfaces/kfs/impl.h
+++ b/interfaces/kfs/impl.h
@@ -74,7 +74,7 @@ struct KFile
{
const KFile_vt *vt;
const KDirectory *dir;
- atomic32_t refcount;
+ KRefcount refcount;
uint8_t read_enabled;
uint8_t write_enabled;
uint8_t align [ 2 ];
@@ -122,6 +122,7 @@ union KFile_vt
* initialize a newly allocated file object
*/
KFS_EXTERN rc_t CC KFileInit ( KFile *self, const KFile_vt *vt,
+ const char *classname, const char *fname,
bool read_enabled, bool write_enabled );
/* Destroy
@@ -254,6 +255,14 @@ KFS_EXTERN rc_t CC KDirectoryDestroyFile ( const KDirectory *self, KFile *f );
KFS_EXTERN struct KSysDir* CC KDirectoryGetSysDir ( const KDirectory *self );
+/* RealPath
+ * exposes functionality of system directory
+ */
+KFS_EXTERN rc_t CC KSysDirRealPath ( struct KSysDir const *self,
+ char *real, size_t bsize, const char *path, ... );
+KFS_EXTERN rc_t CC KSysDirVRealPath ( struct KSysDir const *self,
+ char *real, size_t bsize, const char *path, va_list args );
+
/*--------------------------------------------------------------------------
* KArrayFile
diff --git a/interfaces/kfs/kfs-priv.h b/interfaces/kfs/kfs-priv.h
index 73a1568..3f4a82b 100644
--- a/interfaces/kfs/kfs-priv.h
+++ b/interfaces/kfs/kfs-priv.h
@@ -46,6 +46,7 @@ extern "C" {
struct KDirectory;
struct KFile;
struct KPath;
+struct KDlset;
struct KArrayFile;
struct KNamelist;
@@ -56,31 +57,6 @@ struct KNamelist;
KFS_EXTERN rc_t CC KFileMakeFDFileRead ( struct KFile const **f, int fd );
KFS_EXTERN rc_t CC KFileMakeFDFileWrite ( struct KFile **f, bool update, int fd );
-KFS_EXTERN int CC KDirectoryVOpenSraArchiveRead_silent ( struct KDirectory const *self,
- struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
-
-KFS_EXTERN int CC KDirectoryOpenSraArchiveRead_silent ( struct KDirectory const *self,
- struct KDirectory const **sra_dir, int chroot, const char *path, ... );
-
-KFS_EXTERN int CC KDirectoryVOpenTarArchiveRead_silent ( struct KDirectory const *self,
- struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
-
-KFS_EXTERN int CC KDirectoryOpenTarArchiveRead_silent ( struct KDirectory const *self,
- struct KDirectory const **sra_dir, int chroot, const char *path, ... );
-
-
-/*
- * copy the path string out of a KPath object.
- * if buffer is too short an RC (rcBuffer, rcInsufficient) is returned
- * and nothing is copied.
- * if there is a room the NUL is copied as well
- */
-KFS_EXTERN rc_t CC KPathReadPath (const struct KPath * self, char * buffer,
- size_t buffer_size, size_t * num_read);
-
-/* get current working directory */
-KFS_EXTERN rc_t CC KPathGetCWD (char * buffer, size_t buffer_size);
-
/* GetMeta
* extracts metadata into a string-vector
*
@@ -92,6 +68,11 @@ KFS_EXTERN rc_t CC KPathGetCWD (char * buffer, size_t buffer_size);
KFS_EXTERN rc_t CC KArrayFileGetMeta ( struct KArrayFile const *self, const char *key,
const struct KNamelist **list );
+/* List
+ * list the paths to the libraries in the set
+ */
+KFS_EXTERN rc_t CC KDlsetList ( struct KDlset const *self, struct KNamelist **list );
+
#ifdef __cplusplus
}
diff --git a/interfaces/kfs/lockfile.h b/interfaces/kfs/lockfile.h
new file mode 100644
index 0000000..ef83254
--- /dev/null
+++ b/interfaces/kfs/lockfile.h
@@ -0,0 +1,116 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_lockfile_
+#define _h_kfs_lockfile_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct KDirectory;
+
+
+/*--------------------------------------------------------------------------
+ * KLockFile
+ * a mutual exclusion lock on a file
+ * the lock is acquired upon creation
+ * and released upon destruction
+ *
+ * NB - only guaranteed to work when used from a single host
+ */
+typedef struct KLockFile KLockFile;
+
+
+/* AddRef
+ * Release
+ */
+KFS_EXTERN rc_t CC KLockFileAddRef ( const KLockFile *self );
+KFS_EXTERN rc_t CC KLockFileRelease ( const KLockFile *self );
+
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ * interface extensions
+ */
+
+
+/* CreateLockFile
+ * attempts to create a KLockFile
+ *
+ * "lock" [ OUT ] - return parameter for newly created lock file
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting lock file
+ */
+KFS_EXTERN rc_t CC KDirectoryCreateLockFile ( struct KDirectory *self,
+ KLockFile **lock, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVCreateLockFile ( struct KDirectory *self,
+ KLockFile **lock, const char *path, va_list args );
+
+
+/* CreateExclusiveAccessFile
+ * opens a file with exclusive write access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "update" [ IN ] - if true, open in read/write mode
+ * otherwise, open in write-only mode
+ *
+ * "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ * "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ */
+KFS_EXTERN rc_t CC KDirectoryCreateExclusiveAccessFile ( struct KDirectory *self, struct KFile **f,
+ bool update, uint32_t access, KCreateMode mode, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVCreateExclusiveAccessFile ( struct KDirectory *self, struct KFile **f,
+ bool update, uint32_t access, KCreateMode mode, const char *path, va_list args );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_lockfile_ */
diff --git a/interfaces/kfs/path-priv.h b/interfaces/kfs/path-priv.h
deleted file mode 100644
index c2cb5a7..0000000
--- a/interfaces/kfs/path-priv.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*===========================================================================
-*
-* Public Domain Notice
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_kfs_path_priv_
-#define _h_kfs_path_priv_
-
-#ifndef _h_kfs_extern_
-#include <kfs/extern.h>
-#endif
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#include <kfs/path.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* options for a KPath possibly obtained from a query string on an URI */
-typedef uint32_t KPOption_t;
-enum eKPOption_t
-{
- kpopt_encrypted,
- kpopt_pwpath,
- kpopt_pwfd,
- kpopt_count
-};
-
-
-/* =====
- * Much of what follows is expected to move into the interface kfs/path.h
- * once it becomes supported.
- */
-
-/* MakeFmt
- * make a path object from a format string plus arguments
- *
- * "new_path" [ OUT ] - a reference to the new object.
- *
- * "fmt" [ IN ] and "args" [ IN ] - arguments to string_printf
- * ( see <klib/text.h> ) to build a NUL-terminated string
- * that conforms with the rules for "posix_path"
- *
- * NB - SECURITY RISK IF USED DIRECTLY FROM EXTERNAL STRINGS.
- * ALSO, FMT IS **NOT** PRINTF COMPATIBLE - see string_printf.
- */
-KFS_EXTERN rc_t CC KPathMakeFmt ( KPath ** new_path, const char * fmt, ... );
-KFS_EXTERN rc_t CC KPathMakeVFmt ( KPath ** new_path, const char * fmt, va_list args );
-
-
-/* Bill - I don't know that we're ready to export these yet */
-KFS_EXTERN rc_t CC KPathMakeRelative ( KPath ** new_path, const KPath * base_path,
- const char * relative_path );
-KFS_EXTERN rc_t CC KPathMakeRelativeFmt ( KPath ** new_path, const KPath * base_path,
- const char * fmt, ... );
-KFS_EXTERN rc_t CC KPathVMakeRelativeFmt ( KPath ** new_path, const KPath * base_path,
- const char * fmt, va_list args );
-KFS_EXTERN rc_t CC KPathMakeCurrentPath ( KPath ** new_path );
-
-KFS_EXTERN rc_t CC KPathMakeURI ( KPath ** new_path, const char * uri );
-
-
-KFS_EXTERN rc_t CC KPathReadPath (const struct KPath * self, char * buffer,
- size_t buffer_size, size_t * num_read);
-
-KFS_EXTERN rc_t CC KPathOption (const KPath * self, KPOption_t option,
- char * buffer, size_t buffer_size,
- size_t * num_read);
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_kfs_path_priv_ */
diff --git a/interfaces/kfs/path.h b/interfaces/kfs/path.h
deleted file mode 100644
index b3c2aa2..0000000
--- a/interfaces/kfs/path.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/*===========================================================================
-*
-* Public Domain Notice
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_kfs_path_
-#define _h_kfs_path_
-
-#ifndef _h_kfs_extern_
-#include <kfs/extern.h>
-#endif
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*--------------------------------------------------------------------------
- *
- * The ABNF form described in RFC5234 will be used to define URLS and paths
- * with some handwaving instead of complete character definitions for case
- * insensitivity. CORE definitions from RFC5234 will be used again handwaving
- * case insensitivity.
- *
- * --------------------
- *
- * URL for a KPath
- *
- * as per RFC 3986, an URI consists of:
- *
- * URI = scheme ":" heir-part [ "?" query ] [ "#" fragment ]
- *
- * We will support however something intbetween an URI and an IRI in that we'll
- * all UTF-8 rather than limit certain characters to ASCII.
- *
- * For the NCBI path URL: The hier-part is intended to be compatible with the
- * "file:" scheme Authority on any of the Unix-like operating
- * systems must either be empty or "localhost". For Windows
- * it must be a host that can be used if the "file" url is
- * translated into a UNC style Windows path. Also in a
- * Windows kfs: URL a single colon ':' will be allowed only at
- * the end of a single character rive letter for the first
- * sub-part of the path.
- *
- * scheme = "ncbi-file" ; ( case insensitive )
- *
- * hier-part = "//" authority path-abempty
- * / path-absolute
- * / path-relative
- * / path-empty
- *
- * by RFC 3986 authority is
- * authority = [ userinfo "@" ] host [ ":" port]
- * but at this point we only recognize
- * authority = host
- *
- * by RFC 3986 host is
- * host = IP-literal / IPv4address / reg-name
- * but at this point we only recognize
- * host = reg-name
- *
- * reg-name = *( unreserved / pct-encoded / sub-delims )
- *
- * path = path-abempty
- * / path-absolute
- * / path-noscheme
- * / path-rootless
- * / path-empty
- *
- * path-abempty = * ( "/" segment )
- *
- * path-absolute = "/" segment-nz *( "/" segment )
- *
- * path-noscheme = segment-nz-nc *( "/" segment )
- *
- * path-rootless = segment-nz *( "/" segment )
- *
- * path-empty = ""
- *
- * segment = *pchar ; can be empty
- * segment-nz = 1*pchar ; can't be empty
- * segment-nz-nc = 1*pchar-nz ; can't be empty
- *
- * pchar = ":" / pchar-nc
- *
- * pchar-nc = unreserved / pct-encoded / sub-delims ? "@"
- *
- * pct-encoded = "%" HEXDIG HEXDIG ; hex digits are 0-9, a-f or A-F
- *
- * authority = "localhost" / host-name ; the host name is an O/S specific
- * ; name of a remote host
- *
- * query = query_entry [ * ( "&" query_entry ) ]
- *
- * query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
- *
- * fd = 1* DIGIT
- *
- * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" / UTF-8
- *
- * reserved = gen-delims / subdelims
- *
- * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
- *
- * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*"
- * / "+" / "," / ";" / "="
- *
- * Handwaving on the UTF-8. We'll accept it rather than requiring percent encoding
- * in most cases.
-
- * Examples:
- * "ncbi-file://home/my-name/data-files"
- * "ncbi-file://win-server/archive/secure/read12345?encrypted"
- * "ncbi-file:///c:/scanned-data/0001/file.sra?enc?pwd-file=c:/Users/JamesMcCoy/ncbi.pwd"
- *
- * We allow an implied scheme of "kfs" if none present.
- * 'host-name' is partially implemented for Windows. Not currently for any the
- * of the supported Unix systems. We do not support IP addresses instead of
- * host names.
- *
- * 'path' can be either absolute or relative and must be posix style as per
- * RFC 3986 and matches the "file" scheme.
- *
- * 'fragment' is not yet implemented or defined.
- *
- * 'fd' is a system specific file handle. Not yet supported on Windows.
- *
- * --------------------
- *
- * KFS posix_path representation:
- *
- * The internal representation of a path for KFS resembles very closely the
- * POSIX pathname crossed with the Windows UNC path. Only the Unix "/"
- * separator is allowed not the "\" for paths.
- *
- * posix-path = full-path / relative-path
- *
- * full-path = ["//" host] "/" [ directory-path "/" ] resource
- *
- * relative-path = [ directory-path "/" ] resource
- *
- * directory-path = resource [ "/" directory-path ]
- *
- * resource = string ; (UTF-8 O/S specific name for a directory or a file)
- *
- * host = string ; (UTF-8 O/S specific name for the local or remote host)
- *
- * For a host "localhost" is a synonym for the current host.
- * The "//host" is not guaranteed to work for all systems except "//localhost"
- *
- * The resource "." is assumed to mean the local directory and will be stripped
- * when a path is made canonical.
- *
- * The resource ".." is assumed to mean the containing directory and when made
- * canonical it will be left in at the begining for relative paths or removed along
- * with the preceding resource name.
- *
- * For Windows the device is handled in a unique way with some potential for ambiguity.
- * The UNC approach for a named drive "C:" becomes "/c". So "C:\" becomes "/c/".
- *
- * In the future the complex approach from the "file:" URL should be adopted
- * with the ":" allowed only in the first directory name in a path. RFC 3986
- * notes though that this complex approach puts some five variants into the ABNF
- * to describe the path portion of an URL.
- */
-
-typedef struct KPath KPath;
-
-
-/* AddRef
- * Release
- * ignores NULL references
- */
-KFS_EXTERN rc_t CC KPathAddRef ( const KPath *self );
-KFS_EXTERN rc_t CC KPathRelease ( const KPath *self );
-
-
-/* Make
- * make a path object from a POSIX path string
- * or an URL using the kfs scheme. THe file scheme might be supported in the
- * future perhaps with other suitable schemes as well.
- *
- * "new_path" [ OUT ] - a reference to the new object.
- *
- * "posix_path" [ IN ] - a UTF-8, NUL-terminated POSIX-compliant path
- * or a fully formed "kfs" or "file" url.
- */
-KFS_EXTERN rc_t CC KPathMake ( KPath ** new_path, const char * posix_path);
-
-
-/* MakeSysPath
- * make a path object from an external, OS-specific path string
- * or a listed kfs URL.
- *
- * "new_path" [ OUT ] - a reference to the new object.
- *
- * "sys_path" [ IN ] - a UTF-8, NUL-terminated, O/S specific file path
- * with an optional query part for encryption.
- * The path portion must be legal characters in path names for the O/S in use.
- *
- * NB - see <klib/text.h> for functions to convert between character sets.
- */
-KFS_EXTERN rc_t CC KPathMakeSysPath ( KPath ** new_path, const char * sys_path );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_kfs_path_ */
diff --git a/interfaces/kfs/quickmount.h b/interfaces/kfs/quickmount.h
new file mode 100644
index 0000000..6ecbaef
--- /dev/null
+++ b/interfaces/kfs/quickmount.h
@@ -0,0 +1,61 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_quick_mount_
+#define _h_kfs_quick_mount_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct KDirectory;
+struct KFile;
+
+typedef struct KQuickMountDir KQuickMountDir;
+
+/* OpenQuickMountDirRead
+ *
+ */
+KFS_EXTERN rc_t KQuickMountDirMake (const struct KDirectory * self,
+ const struct KDirectory ** pnewdir,
+ const struct KFile * file,
+ const char * path, size_t path_size,
+ const char * mount, size_t mount_size);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_quick_mount_ */
diff --git a/interfaces/kfs/ramfile.h b/interfaces/kfs/ramfile.h
new file mode 100644
index 0000000..65957b1
--- /dev/null
+++ b/interfaces/kfs/ramfile.h
@@ -0,0 +1,75 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_ramfile_
+#define _h_kfs_ramfile_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct KFile;
+
+typedef struct KRamFile KRamFile;
+
+/* -----
+ * fakes file reads and writes into a buffer
+ *
+ * writes never fail. Acts like a sliding window from previous writes of possible
+ * reads only succeed of they are from what was contained in the last write
+ *
+ * zero fills are put in where possible. If you write a buffer, slide the window with
+ * a write that doesn't fill the buffer, the rest will be zero not what was previously written
+ *
+ * The Read only form doesn;t allow writes but will reflect what was put in
+ * the buffer outside of the KFile
+ *
+ * The write only will accept writes but can only be accessed outside of the KFile.
+ *
+ * The update form tries its best to give what was asked for [see above]
+ */
+KFS_EXTERN rc_t CC KRamFileMakeRead (const struct KFile ** self,
+ char * buffer, size_t buffer_size);
+
+KFS_EXTERN rc_t CC KRamFileMakeWrite (struct KFile ** self,
+ char * buffer, size_t buffer_size);
+
+KFS_EXTERN rc_t CC KRamFileMakeUpdate (struct KFile ** self,
+ char * buffer, size_t buffer_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_ramfile_ */
diff --git a/interfaces/kfs/readheadfile.h b/interfaces/kfs/readheadfile.h
new file mode 100644
index 0000000..1cd47a1
--- /dev/null
+++ b/interfaces/kfs/readheadfile.h
@@ -0,0 +1,86 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_readheadfile_
+#define _h_kfs_readheadfile_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards allowing opaque class typing
+ */
+struct KFile;
+
+
+/* MakeReadHead
+ * make a read-only file where we buffer only the first part of the file
+ * this is pretty much only needed to type a file when we don't know
+ * or want to see if we can acess randomly. This is a fairly smart type
+ * that will take ownership of the pointer to the 'original' KFile
+ * reference. If it finds that the 'original' KFile is seekable (has
+ * random access) it will merely return a reference to that const KFile *
+ * rather than creating a new KFile that will in most cases pass through
+ * all method calls to the original.
+ *
+ * This type was created primarily to allow the reading of the first part
+ * of a file for type recognition with out forcing numerous cases of
+ * duplicated code to check for random access on an existing KFile reference
+ * and handling of the pre-read in the application.
+ *
+ * This class is intended for files that once typed will be read straight
+ * through. If more random access to the file is needed the KBufFile is
+ * indicated rather than this one. If a straight through access is needed
+ * this is a far lighter weight solution than KBufFile.
+ *
+ * A references is added to the original even if it becomes used as the new
+ * file because it allows random access.
+ *
+ * "buf" [ OUT ] - return parameter for new buffered file
+ *
+ * "original" [ IN ] - source file to be buffered. must have read access
+ *
+ * "bsize" [ IN ] - buffer size
+ */
+KFS_EXTERN
+rc_t CC KFileMakeReadHead (const struct KFile ** pself,
+ const struct KFile * original,
+ size_t buffer_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_readheadfile_ */
diff --git a/interfaces/kfs/sra.h b/interfaces/kfs/sra.h
index 60b72cd..ef52bc4 100644
--- a/interfaces/kfs/sra.h
+++ b/interfaces/kfs/sra.h
@@ -55,7 +55,7 @@ extern "C" {
* just these enumerated values.
*/
typedef uint32_t KSRAFileAlignment;
-enum KSRAFileAlignment
+enum eKSRAFileAlignment
{
/* align on byte count unit boundaries
* set this to the number of bytes in the alignment unit
@@ -109,9 +109,6 @@ struct KSraHeader
-KFS_EXTERN rc_t CC SraHeaderMake (KSraHeader ** self, size_t treesize, KSRAFileAlignment alignment);
-KFS_EXTERN rc_t CC SraHeaderValidate (const KSraHeader * self, bool * reverse, uint32_t * version);
-KFS_EXTERN size_t CC SraHeaderSize (const KSraHeader * self);
#define FS_SRA_CUR_VERSION 1
KFS_EXTERN uint64_t CC SraHeaderGetFileOffset (const KSraHeader * self);
@@ -165,6 +162,18 @@ KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveRead ( struct KDirectory const *self,
struct KDirectory const **sra_dir, int chroot, const char *path, ... );
KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveRead ( struct KDirectory const *self,
struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
+KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveRead_silent ( struct KDirectory const *self,
+ struct KDirectory const **sra_dir, int chroot, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveRead_silent ( struct KDirectory const *self,
+ struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
+KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveRead_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveRead_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, va_list args );
+KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveReadUnbounded_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveReadUnbounded_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, va_list args );
/* copycat needs an unbounded version - that is filesize is not necessarily known
* this is unsafe for most other uses */
KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveReadUnbounded ( struct KDirectory const *self,
@@ -172,6 +181,8 @@ KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveReadUnbounded ( struct KDirectory con
KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveReadUnbounded ( struct KDirectory const *self,
struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
+KFS_EXTERN rc_t CC KFileIsSRA (const char * b, size_t z);
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/kfs/tar.h b/interfaces/kfs/tar.h
index 4491538..96d8c63 100644
--- a/interfaces/kfs/tar.h
+++ b/interfaces/kfs/tar.h
@@ -82,6 +82,11 @@ KFS_EXTERN int CC KDirectoryOpenTarArchiveRead_silent ( struct KDirectory const
KFS_EXTERN int CC KDirectoryVOpenTarArchiveRead_silent ( struct KDirectory const *self,
struct KDirectory const **tar_dir, int chroot, const char *path, va_list args );
+KFS_EXTERN int CC KDirectoryOpenTarArchiveRead_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **tar_dir, int chroot, const struct KFile * f, const char *path, ... );
+KFS_EXTERN int CC KDirectoryVOpenTarArchiveRead_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **tar_dir, int chroot, const struct KFile * f, const char *path, va_list args );
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/klib/checksum.h b/interfaces/klib/checksum.h
index 78e5afc..5c38ee8 100644
--- a/interfaces/klib/checksum.h
+++ b/interfaces/klib/checksum.h
@@ -106,7 +106,7 @@ struct SHA64bitState
{
uint64_t len;
uint64_t H [ 8 ];
- uint32_t cur;
+ unsigned long cur;
uint8_t W [ 128 ];
};
diff --git a/interfaces/klib/debug.h b/interfaces/klib/debug.h
index 80b40f8..3b321ef 100644
--- a/interfaces/klib/debug.h
+++ b/interfaces/klib/debug.h
@@ -61,7 +61,7 @@ extern "C" {
/*
* To add a new module, just add it to the list in MODULE_NAMES but as a
- * parameters to the macro "_module"
+ * parameter to the macro "_module"
*
* Then add the conditions for that module. There must be at least one.
* Put them in the macro "_condition"
@@ -102,10 +102,10 @@ extern "C" {
*/
#define MODULE_NAMES() \
- _module(APP) _module(KDB) _module(REF) _module(LEGREF) \
+ _module(APP) _module(BLAST) _module(KDB) _module(REF) _module(LEGREF) \
_module(KFS) _module(XML) _module(VDB) _module(SRA) \
_module(XARC) _module(ALIGN) _module(KFG) _module(KRYPTO) \
- _module(SEARCH) _module(LOADLIB)
+ _module(SEARCH) _module(LOADLIB) _module(VFS) _module(AES) _module(ARGS)
#define APP_CONDITIONS() \
_condition(APP,0) _condition(APP,1) _condition(APP,2) _condition(APP,3) \
@@ -125,6 +125,9 @@ extern "C" {
_condition(APP,56) _condition(APP,57) _condition(APP,58) _condition(APP,59) \
_condition(APP,60) _condition(APP,61) _condition(APP,62) _condition(APP,63)
+#define BLAST_CONDITIONS() \
+ _condition(BLAST,BLAST)
+
#define KDB_CONDITIONS() \
_condition(KDB,KDB)
@@ -139,8 +142,10 @@ extern "C" {
_condition(KFS,MD5) _condition(KFS,DLL) _condition(KFS,KFFENTRY) _condition(KFS,KFF) \
_condition(KFS,ARCENTRY) _condition(KFS,ARC) _condition(KFS,TOCENTRY) _condition(KFS,TOC) \
_condition(KFS,TARENTRY) _condition(KFS,TAR) _condition(KFS,SRASORT) _condition(KFS,GZIP) \
- _condition(KFS,DIR) _condition(KFS,COUNTER) _condition(KFS,BZIP) _condition(KFS,SYS) \
- _condition(KFS,MGR) _condition(KFS,PATH)
+ _condition(KFS,DIR) _condition(KFS,COUNTER) _condition(KFS,BZIP) _condition(KFS,SYS)
+
+#define VFS_CONDITIONS() \
+ _condition(VFS,MGR) _condition(VFS,PATH)
#define XML_CONDITIONS() \
_condition(XML,XML)
@@ -161,13 +166,22 @@ extern "C" {
_condition(XARC,ARC)
#define ALIGN_CONDITIONS() \
- _condition(ALIGN,WRITER)
+ _condition(ALIGN,WRITER) _condition(ALIGN,COMPRESS) _condition(ALIGN,COVERAGE) \
+ _condition(ALIGN,BAM) _condition(ALIGN,BGZF) _condition(ALIGN,CFG)
#define KFG_CONDITIONS() \
- _condition(KFG,LOAD)
+ _condition(KFG,LOAD) _condition(KFG,NODE)
#define KRYPTO_CONDITIONS() \
- _condition(KRYPTO,STS) _condition(KRYPTO,CFG) _condition(KRYPTO,ENCRYPT) _condition(KRYPTO,DECRYPT)
+ _condition(KRYPTO,STS) \
+ _condition(KRYPTO,CFG) \
+ _condition(KRYPTO,ENCRYPT) \
+ _condition(KRYPTO,DECRYPT)
+
+#define AES_CONDITIONS() \
+ _condition(AES,KEYEXP) _condition(AES,CIPHER) \
+ _condition(AES,INVKEYEXP) _condition(AES,INVCIPHER) \
+ _condition(AES,OBJECT)
#define SEARCH_CONDITIONS() \
_condition(SEARCH,MYERS)
@@ -175,6 +189,9 @@ extern "C" {
#define LOADLIB_CONDITIONS() \
_condition(LOADLIB,PBAR) _condition(LOADLIB,FILE) _condition(LOADLIB,XLOG)
+#define ARGS_CONDITIONS() \
+ _condition(ARGS,WRITER)
+
/*
* Nothing below here needs to be changed when just adding new modules
* and/or conditions
diff --git a/interfaces/klib/defs.h b/interfaces/klib/defs.h
index afc3400..b5f37ce 100644
--- a/interfaces/klib/defs.h
+++ b/interfaces/klib/defs.h
@@ -33,10 +33,11 @@
#include <stdint.h>
#include <stddef.h>
-#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
+#else
+#include <stdbool.h>
#endif
/*--------------------------------------------------------------------------
@@ -87,7 +88,7 @@ typedef int64_t KTime_t;
/*--------------------------------------------------------------------------
* ver_t
- * 32 bit 2 part type
+ * 32 bit 4 part type
*/
typedef uint32_t ver_t;
@@ -112,7 +113,7 @@ typedef uint32_t ver_t;
/*--------------------------------------------------------------------------
* KCreateMode
- * values are defined in <kfs/directory.h>
+ * values are defined in <kfs/defs.h>
*/
typedef uint32_t KCreateMode;
diff --git a/interfaces/klib/extern.h b/interfaces/klib/extern.h
index 38abab1..92727f0 100644
--- a/interfaces/klib/extern.h
+++ b/interfaces/klib/extern.h
@@ -40,7 +40,11 @@
#else
#define KLIB_EXTERN LIB_IMPORT
+#ifdef __cplusplus
+#define KLIB_EXTERN_DATA extern /* LIB_IMPORT_DATA */
+#else
#define KLIB_EXTERN_DATA LIB_IMPORT_DATA
+#endif
#endif
@@ -54,7 +58,7 @@
function addresses resolve to the thunk and not
the actual function. */
#define LIB_IMPORT extern
-#define LIB_IMPORT_DATA __declspec ( dllimport )
+#define LIB_IMPORT_DATA extern __declspec ( dllimport )
#define LIB_EXPORT __declspec ( dllexport )
#define LIB_EXPORT_DATA __declspec ( dllexport )
diff --git a/interfaces/klib/klib-priv.h b/interfaces/klib/klib-priv.h
new file mode 100644
index 0000000..f3a0f6f
--- /dev/null
+++ b/interfaces/klib/klib-priv.h
@@ -0,0 +1,106 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_klib_priv_
+#define _h_klib_priv_
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifndef _h_klib_writer_
+#include <klib/writer.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ */
+
+
+/* reporting structure
+ */
+typedef struct ReportFuncs ReportFuncs;
+struct ReportFuncs
+{
+ void ( CC * report ) ( uint32_t indent, const char* name, uint32_t count, ... );
+ void ( CC * reportData ) ( uint32_t indent, const char* name, const char* data, uint32_t count, ... );
+ rc_t ( CC * reportData1 ) ( const char* data );
+ void ( CC * reportOpen ) ( uint32_t indent, const char* name, uint32_t count, ... );
+ void ( CC * reportOpen1 ) ( uint32_t indent, const char* name );
+ void ( CC * reportClose ) ( uint32_t indent, const char* name );
+ void ( CC * reportClose1 ) ( const char* name );
+ void ( CC * reportError ) ( uint32_t indent, rc_t rc, const char* function );
+ void ( CC * reportErrorStr ) ( uint32_t indent, rc_t rc, const char* function,
+ const char* name, const char* val );
+ void ( CC * reportErrorStrImpl ) ( uint32_t indent, rc_t rc, const char* function,
+ const char* name, const char* val, bool eol );
+ void ( CC * reportErrorStrInt ) ( uint32_t indent, rc_t rc, const char* function,
+ const char* names, const char* vals, const char* namei, uint32_t vali );
+ void ( CC * reportError3Str ) ( uint32_t indent, rc_t rc, const char* function,
+ const char* name, const char* v1, const char* v2, const char* v3, bool eol );
+};
+
+
+/* InitKFS
+ */
+KLIB_EXTERN void CC ReportInitKFS (
+ rc_t ( CC * report_cwd ) ( const ReportFuncs *f, uint32_t indent ),
+ rc_t ( CC * report_redirect ) ( KWrtHandler* handler,
+ const char* filename, bool* to_file, bool finalize ) );
+
+/* InitConfig
+ * returns appname if available
+ */
+KLIB_EXTERN const char* CC ReportInitConfig ( rc_t ( CC * report ) ( const ReportFuncs *f, uint32_t indent ) );
+
+
+/* InitVDB
+ */
+KLIB_EXTERN rc_t CC ReportInitVDB(
+ rc_t (CC *report_obj)(const ReportFuncs *f,
+ uint32_t indent, const char *path, bool *wasDbOrTableSet),
+ rc_t (CC *report_software)(const ReportFuncs *f,
+ uint32_t indent, const char *argv_0, const char *date, ver_t tool_ver),
+ rc_t (CC *whack)(void));
+
+
+/* RecordZombieFile
+ */
+KLIB_EXTERN void CC ReportRecordZombieFile ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_klib_priv_ */
diff --git a/interfaces/klib/ksort-macro.h b/interfaces/klib/ksort-macro.h
new file mode 100644
index 0000000..e86d57b
--- /dev/null
+++ b/interfaces/klib/ksort-macro.h
@@ -0,0 +1,257 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_klib_ksort_macro_
+#define _h_klib_ksort_macro_
+
+#include <limits.h>
+#include <stdlib.h>
+
+
+/* Copyright (C) 1991,1992,1996,1997,1999,2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Written by Douglas C. Schmidt (schmidt at ics.uci.edu).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+/* If you consider tuning this algorithm, you should consult first:
+ Engineering a sort function; Jon Bentley and M. Douglas McIlroy;
+ Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993. */
+
+/* Discontinue quicksort algorithm when partition gets below this size.
+ This particular magic number was chosen to work best on a Sun 4/260. */
+#ifndef KSORT_MAX_THRESH
+#define KSORT_MAX_THRESH 4
+#endif
+
+/* Stack node declarations used to store unfulfilled partition obligations. */
+#ifndef ksort_stack_node_declared
+#define ksort_stack_node_declared 1
+typedef struct ksort_stack_node ksort_stack_node;
+struct ksort_stack_node
+{
+ char *lo;
+ char *hi;
+};
+#endif
+
+/* The next 4 #defines implement a very fast in-line stack abstraction. */
+/* The stack needs log (total_elements) entries (we could even subtract
+ log(MAX_THRESH)). Since total_elements has type size_t, we get as
+ upper bound for log (total_elements):
+ bits per byte (CHAR_BIT) * sizeof(size_t). */
+
+#ifndef KSORT_STACK_SIZE
+#define KSORT_STACK_SIZE (CHAR_BIT * sizeof(size_t))
+#endif
+
+#ifndef KSORT_PUSH
+#define KSORT_PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top))
+#endif
+
+#ifndef KSORT_POP
+#define KSORT_POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi)))
+#endif
+
+#ifndef KSORT_STACK_EMPTY
+#define KSORT_STACK_EMPTY ( stack >= top )
+#endif
+
+#ifndef KSORT_SWAP
+#define KSORT_SWAP( a, b, off, size ) \
+ do \
+ { \
+ register size_t i, end = off + size; \
+ register char *__a = (a), *__b = (b); \
+ for ( i = off; i < end; ++ i ) \
+ { \
+ char __tmp = __a [ i ]; \
+ __a [ i ] = __b [ i ]; \
+ __b [ i ] = __tmp; \
+ } \
+ } while (0)
+#endif
+
+#define KSORT_TSWAP( T, a, b ) \
+ do \
+ { \
+ T tmp = * ( const T* ) ( a ); \
+ * ( T* ) ( a ) = * ( const T* ) ( b ); \
+ * ( T* ) ( b ) = tmp; \
+ } \
+ while ( 0 )
+
+
+/* Order size using quicksort. This implementation incorporates
+ four optimizations discussed in Sedgewick:
+
+ 1. Non-recursive, using an explicit stack of pointer that store the
+ next array partition to sort. To save time, this maximum amount
+ of space required to store an array of SIZE_MAX is allocated on the
+ stack. Assuming a 32-bit (64 bit) integer for size_t, this needs
+ only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes).
+ Pretty cheap, actually.
+
+ 2. Chose the pivot element using a median-of-three decision tree.
+ This reduces the probability of selecting a bad pivot value and
+ eliminates certain extraneous comparisons.
+
+ 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving
+ insertion sort to order the MAX_THRESH items within each partition.
+ This is a big win, since insertion sort is faster for small, mostly
+ sorted array segments.
+
+ 4. The larger of the two sub-partitions is always pushed onto the
+ stack first, with the algorithm then concentrating on the
+ smaller partition. This *guarantees* no more than log (total_elems)
+ stack size is needed (actually O(1) in this case)! */
+
+#define KSORT( PBASE, TOTAL_ELEMS, ELEM_SIZE, SWAP_OFFSET, SWAP_SIZE ) \
+ register char *base_ptr = ( char* ) ( PBASE ); \
+ const size_t max_thresh = KSORT_MAX_THRESH * ( ELEM_SIZE ); \
+ if ( ( TOTAL_ELEMS ) < 2) \
+ return; \
+ if ( ( TOTAL_ELEMS ) > KSORT_MAX_THRESH) \
+ { \
+ char *lo = base_ptr; \
+ char *hi = & lo [ ( ELEM_SIZE ) * ( ( TOTAL_ELEMS ) - 1 ) ]; \
+ ksort_stack_node stack [ KSORT_STACK_SIZE ]; \
+ ksort_stack_node *top = stack; \
+ KSORT_PUSH (NULL, NULL); \
+ while ( ! KSORT_STACK_EMPTY ) \
+ { \
+ char *left_ptr; \
+ char *right_ptr; \
+ char *mid = lo + ( ELEM_SIZE ) * ( ( hi - lo ) / ( ELEM_SIZE ) >> 1 );\
+ if ( CMP ( ( void* ) mid, ( void* ) lo ) < 0 ) \
+ SWAP ( mid, lo, ( SWAP_OFFSET ), ( SWAP_SIZE ) ); \
+ if ( CMP ( ( void* ) hi, ( void* ) mid) < 0 ) \
+ SWAP ( mid, hi, ( SWAP_OFFSET ), ( SWAP_SIZE ) ); \
+ else \
+ goto jump_over; \
+ if ( CMP ( ( void* ) mid, ( void* ) lo ) < 0 ) \
+ SWAP ( mid, lo, ( SWAP_OFFSET ), ( SWAP_SIZE ) ); \
+ jump_over: \
+ left_ptr = lo + ( ELEM_SIZE ); \
+ right_ptr = hi - ( ELEM_SIZE ); \
+ do \
+ { \
+ while ( CMP ( ( void* ) left_ptr, ( void* ) mid ) < 0 ) \
+ left_ptr += ( ELEM_SIZE ); \
+ while ( CMP ( ( void* ) mid, ( void* ) right_ptr ) < 0 ) \
+ right_ptr -= ( ELEM_SIZE ); \
+ if ( left_ptr < right_ptr ) \
+ { \
+ SWAP ( left_ptr, right_ptr, ( SWAP_OFFSET ), ( SWAP_SIZE ) ); \
+ if ( mid == left_ptr ) \
+ mid = right_ptr; \
+ else if ( mid == right_ptr ) \
+ mid = left_ptr; \
+ left_ptr += ( ELEM_SIZE ); \
+ right_ptr -= ( ELEM_SIZE ); \
+ } \
+ else if ( left_ptr == right_ptr ) \
+ { \
+ left_ptr += ( ELEM_SIZE ); \
+ right_ptr -= ( ELEM_SIZE ); \
+ break; \
+ } \
+ } \
+ while ( left_ptr <= right_ptr ); \
+ if ((size_t) (right_ptr - lo) <= max_thresh) \
+ { \
+ if ((size_t) (hi - left_ptr) <= max_thresh) \
+ KSORT_POP (lo, hi); \
+ else \
+ lo = left_ptr; \
+ } \
+ else if ((size_t) (hi - left_ptr) <= max_thresh) \
+ hi = right_ptr; \
+ else if ((right_ptr - lo) > (hi - left_ptr)) \
+ { \
+ KSORT_PUSH (lo, right_ptr); \
+ lo = left_ptr; \
+ } \
+ else \
+ { \
+ KSORT_PUSH (left_ptr, hi); \
+ hi = right_ptr; \
+ } \
+ } \
+ } \
+ { \
+ register char *run_ptr; \
+ char *const end_ptr = & base_ptr [(ELEM_SIZE)*((TOTAL_ELEMS)-1)]; \
+ char *tmp_ptr = base_ptr; \
+ char *thresh = base_ptr + max_thresh; \
+ if ( thresh > end_ptr ) \
+ thresh = end_ptr; \
+ for (run_ptr = tmp_ptr+(ELEM_SIZE);run_ptr<=thresh;run_ptr+=(ELEM_SIZE)) \
+ if ( CMP ( ( void* ) run_ptr, ( void* ) tmp_ptr ) < 0 ) \
+ tmp_ptr = run_ptr; \
+ if (tmp_ptr != base_ptr) \
+ SWAP ( tmp_ptr, base_ptr, ( SWAP_OFFSET ), ( SWAP_SIZE ) ); \
+ tmp_ptr = base_ptr + ( ELEM_SIZE ); \
+ for ( run_ptr = base_ptr + ( 2 * ( ELEM_SIZE ) ); \
+ run_ptr <= end_ptr; tmp_ptr = run_ptr, run_ptr += ( ELEM_SIZE ) ) \
+ { \
+ for ( ; tmp_ptr >= base_ptr; tmp_ptr -= ( ELEM_SIZE ) ) \
+ { \
+ if ( CMP ( run_ptr, tmp_ptr ) >= 0 ) \
+ break; \
+ } \
+ tmp_ptr += ( ELEM_SIZE ); \
+ if ( tmp_ptr != run_ptr ) \
+ { \
+ char *trav; \
+ trav = run_ptr + ( ELEM_SIZE ); \
+ while ( --trav >= run_ptr ) \
+ { \
+ char c = *trav; \
+ char *hi, *lo; \
+ for (hi=lo=trav; (lo-=(ELEM_SIZE)) >= tmp_ptr; hi=lo) \
+ *hi = *lo; \
+ *hi = c; \
+ } \
+ } \
+ } \
+ } \
+ ( void ) 0
+
+#endif /* _h_klib_ksort_macro_ */
diff --git a/interfaces/klib/log.h b/interfaces/klib/log.h
index 04701f2..dd4f6eb 100644
--- a/interfaces/klib/log.h
+++ b/interfaces/klib/log.h
@@ -64,7 +64,7 @@ extern "C" {
* "debug" - verbose output for use in debugging
*/
typedef uint32_t KLogLevel;
-enum KLogLevel
+enum
{
klogLevelMin = 0,
klogFatal = klogLevelMin,
@@ -143,7 +143,7 @@ KLIB_EXTERN rc_t CC KLogLibHandlerSetStdErr (void);
/* formatting */
typedef uint32_t KLogFmtFlags;
-enum KLogFmtFlags
+enum
{
klogFmtTimestamp = 0x00000001,
klogFmtSeverity = 0x00000002,
diff --git a/interfaces/klib/namelist.h b/interfaces/klib/namelist.h
index a744d02..9826d1e 100644
--- a/interfaces/klib/namelist.h
+++ b/interfaces/klib/namelist.h
@@ -142,6 +142,16 @@ KLIB_EXTERN rc_t CC VNameListCount ( const VNamelist *self, uint32_t *count );
*/
KLIB_EXTERN rc_t CC VNameListGet ( const VNamelist *self, uint32_t idx, const char **name );
+
+/* Reorder
+ * sort the names according to case sensitivity
+ * and UNICODE character code ordering
+ *
+ * "case_insensitive" [ IN ] - when true, perform "tolower" on
+ * each character before compare
+ */
+KLIB_EXTERN void CC VNamelistReorder ( VNamelist *self, bool case_insensitive );
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/klib/out.h b/interfaces/klib/out.h
index 2253e00..02aa06f 100644
--- a/interfaces/klib/out.h
+++ b/interfaces/klib/out.h
@@ -65,6 +65,8 @@ KLIB_EXTERN rc_t CC KOutInit (void);
KLIB_EXTERN rc_t CC KOutMsg (const char * fmt, ...);
+#define KOutStr(str) KOutMsg("%s",str)
+
/*
* A usage could look like
*
@@ -72,8 +74,10 @@ KLIB_EXTERN rc_t CC KOutMsg (const char * fmt, ...);
*
*/
#define OUTMSG(msg) \
- (void)((KOutWriterGet() != NULL) ? KOutMsg msg : 0)
+ ((KOutWriterGet() != NULL) ? KOutMsg msg : 0)
+#define OUTSTR(msg) \
+ ((KOutWriterGet() != NULL) ? KOutStr (msg) : 0)
#ifdef __cplusplus
}
diff --git a/interfaces/klib/printf.h b/interfaces/klib/printf.h
index 794ae5d..baf05bc 100644
--- a/interfaces/klib/printf.h
+++ b/interfaces/klib/printf.h
@@ -41,11 +41,24 @@
extern "C" {
#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct String;
+struct KSymbol;
+struct KWrtHandler;
+
+
/*--------------------------------------------------------------------------
* FORMAT
* a description of the string_printf formatting
*/
+#define SUPPORT_PERCENT_N 1
+
+
/*
The standard C library formatting approach was taken as a basis.
@@ -61,37 +74,48 @@ extern "C" {
flags
= ' ' : prepend space to a numeral if it does not have a sign
- | '-' : left-align parameter within field
| '+' : always produce a sign on numeric conversion
- | '0' : left-pad with zeroes rather than spaces
+ | '-' : left-align parameter within field
+ | '0' : left-pad with zeros rather than spaces
| '#' : use "alternate" representation
| ',' : produce comma-separated triples
| '\'' : " "
;
- field-width
- = DECIMAL : a base-10 numeral
+ field-width *(1)
+ = DECIMAL : an unsigned base-10 numeral
| '*' : take field width from args as type 'uint32_t'
;
- precision
- = DECIMAL : a base-10 numeral
+ precision *(1)(2)(3)
+ = DECIMAL : an unsigned base-10 numeral
| '*' : take precision from args as type 'uint32_t'
+ | : an empty precision means 0
;
index
= idx : a single, zero-based vector element
| idx '-' idx : a fully-closed, zero-based interval
+ | idx '/' len : a start index plus length
;
idx
- = DECIMAL : a base-10 numeral
- | '$' : the last element in vector
+ = DECIMAL : an unsigned base-10 numeral
| '*' : take index from args as type 'uint32_t'
+ | '$' : last vector element
+ | : an empty index means 0 or $
+ ;
+
+ len
+ = DECIMAL : a base-10 numeral
+ | '*' : take length from args as type 'uint32_t'
+ | '$' : length-of ( vector )
+ | : an empty length means $
;
storage-class-width
- = 'h' : half the normal size
+ = 't' : tiny integer ( i.e. byte )
+ | 'h' : half the normal size
| 'l' : twice the normal size
| 'z' : sizeof size_t
| time-modifier
@@ -103,25 +127,41 @@ extern "C" {
| 'z' : date, time and zone
;
- storage-class
- = 'd' | 'i' : decimal int32_t
- | 'u' : decimal uint32_t
- | 'x' : lower-case hex uint32_t
- | 'X' : upper-case hex uint32_t
- | 'o' : octal uint32_t
- | 'b' : binary uint32_t
+ scalar storage-class
+ = 'd' | 'i' : decimal signed integer
+ | 'u' : decimal unsigned integer
+ | 'x' : lower-case hex integer
+ | 'X' : upper-case hex integer
+ | 'o' : octal integer
+ | 'b' : binary integer
| 'p' : hex void*
| 'f' : double
| 'e' : scientific notation double
| 'g' : general double
| 'c' : UTF-32 character
- | 's' : UTF-8 string
- | 'S' : const String* [ see above ]
| 'N' : const KSymbol* [ <klib/symbol.h> ]
- | 'V' : tri-part version [ ver_t ]
+ | 'V' *(4) : tri-part version [ ver_t ]
| 'R' : return code [ rc_t ]
| 'T' : const KTime* [ <klib/time.h> ]
| '!' ; operating specific error code ( i.e. errno or GetLastError() )
+ | 'n' *(5) ; output of number of characters printed so far to uint32_t*
+ ;
+
+ single-index vector storage-class *(6)(7)
+ = 'd' | 'i' : as above
+ | 'u' | 'x' : index range is ignored
+ | 'X' | 'o' : start index is used
+ | 'b' | 'p' : to select element
+ | 'f' | 'e' | 'g'
+ | 'N' : const KSymbol* [ <klib/symbol.h> ]
+ | 'V' *(4) : tri-part version [ ver_t ]
+ | 'R' : return code [ rc_t ]
+ | 'T' : const KTime* [ <klib/time.h> ]
+ ;
+
+ index-range vector storage-class *(8)
+ = 'c' *(9) : unbounded character vector
+ | 's' | 'S' : bounded character vector
;
Notes:
@@ -132,9 +172,21 @@ extern "C" {
minimum number of fields required.
4. the storage-class-width is interpreted differently for storage-class
'T' ( const KTime* )
+ 5. %n may not be supported for security purposes
+ 6. when an index is specified, the argument is taken as an
+ unbounded vector. if an index range is given, only the
+ starting index is used, and only a single element is selected.
+ 7. the vector reference class is determined by both the format
+ and the size modifier.
+ 8. an index for character classes may specify a string as the
+ selection. when missing, the default start index is 0 while
+ the default end index is $.
+ 9. a character vector is NOT assumed to be NUL-terminated,
+ and in this case the default end index is the start index.
*/
+
/* string_printf
* provides a facility similar to snprintf
* formatting is similar but differs somewhat [ see FORMAT at bottom ]
@@ -162,6 +214,176 @@ KLIB_EXTERN rc_t CC string_vprintf ( char *dst, size_t bsize,
size_t *num_writ, const char *fmt, va_list args );
+/*--------------------------------------------------------------------------
+ * structured_printf
+ * the engine behind string_printf
+ */
+
+/* formatting
+ */
+enum
+{
+ spfNone, /* 'n', sptTerm */
+ spfText, /* 'csS', literal */
+ spfSignedInt, /* 'di' */
+ spfUnsigned, /* 'bouxX' */
+ spfStdFloat, /* 'f' */
+ spfGenFloat, /* 'g' */
+ spfSciFloat, /* 'e' */
+ spfVersion, /* 'V' */
+ spfSymbol, /* 'N' */
+ spfTime, /* [ 'hlz' + ] 'T' */
+ spfRC, /* 'R' */
+ spfOSErr /* '!' */
+};
+
+/* types
+ */
+enum
+{
+ sptTerm, /* terminates format */
+ sptLiteral, /* char literal - arg in fmt */
+ sptSignedInt, /* signed scalar int - arg is d */
+ sptSignedInt8Vect, /* signed vector int - arg is d8 */
+ sptSignedInt16Vect, /* signed vector int - arg is d16 */
+ sptSignedInt32Vect, /* signed vector int - arg is d32 */
+ sptSignedInt64Vect, /* signed vector int - arg is d64 */
+ sptUnsignedInt, /* unsigned scalar int - arg is u */
+ sptUnsignedInt8Vect, /* unsigned vector int - arg is u8 */
+ sptUnsignedInt16Vect, /* unsigned vector int - arg is u16 */
+ sptUnsignedInt32Vect, /* unsigned vector int - arg is u32 */
+ sptUnsignedInt64Vect, /* unsigned vector int - arg is u64 */
+ sptFloat, /* scalar float - arg is f */
+ sptFloat32Vect, /* vector float - arg is f32 */
+ sptFloat64Vect, /* vector float - arg is f64 */
+ sptFloatLongVect, /* vector float - arg is flong */
+ sptChar, /* scalar character - arg is c */
+ sptNulTermString, /* vector character - arg is s */
+ sptString, /* vector character - arg is S */
+ sptUCS2String, /* vector character - arg is S */
+ sptUTF32String, /* vector character - arg is S */
+ sptPointer, /* object reference - arg is p */
+ sptRowId, /* current row id - arg is d */
+ sptRowLen /* current row length - arg is u */
+#if SUPPORT_PERCENT_N
+ , sptBytesPrinted /* output parameter - arg is n */
+#endif
+};
+
+
+/* format
+ * structured and constant format information
+ * takes the place of format string
+ * flags indicate whether fields are active
+ * and in some cases whether the value is external, in the next arg
+ */
+typedef struct PrintFmt PrintFmt;
+struct PrintFmt
+{
+ union
+ {
+ struct
+ {
+ uint64_t min_field_width; /* minimum field width in characters */
+ uint64_t precision; /* precision in characters */
+ uint64_t start_idx; /* zero-based starting vector index */
+ uint64_t select_len; /* length of selection or 0 for inf */
+ } f;
+ struct
+ {
+ const char *text; /* string literal text pointer */
+ size_t size; /* string literal text size */
+ } l;
+ } u;
+ unsigned int upper_case_num : 1; /* upper-case numerals */
+ unsigned int reverse_alnum : 1; /* reverse ordering of alpha-numeric */
+ unsigned int thousands_separate : 1; /* separate numerals by thousands */
+ unsigned int ext_field_width : 1; /* field width is external argument */
+ unsigned int ext_precision : 1; /* precision is external argument */
+ unsigned int inf_start_index : 1; /* start index is last in vector */
+ unsigned int ext_start_index : 1; /* start index is external argument */
+ unsigned int inf_stop_index : 1; /* stop index is last in vector */
+ unsigned int ext_stop_index : 1; /* stop index is an external argument */
+ unsigned int ext_select_len : 1; /* selection length is external */
+ unsigned int add_prefix : 1; /* '#' flag on 'boxX' */
+ unsigned int force_decimal_point : 1; /* '#' flag on 'efg' */
+ unsigned int leave_trailing_zeros : 1; /* '#' flag on 'g' */
+ unsigned int print_time : 1;
+ unsigned int print_date : 1;
+ unsigned int print_weekday : 1;
+ unsigned int print_timezone : 1;
+ unsigned int hour_24 : 1;
+ unsigned int min_vers_components : 1;
+ unsigned int explain_rc : 1;
+ unsigned int type_cast : 1; /* if true, convert type for fmt */
+ unsigned int pointer_arg : 1; /* argument is a pointer */
+ uint32_t radix; /* 0 default, 2, 8, 10, 16, .. 36 */
+ uint8_t fmt; /* spf... from above */
+ uint8_t type; /* spt... from above */
+ char sign; /* 0, ' ' or '+' */
+ char left_fill; /* 0 for left-align, ' ' or '0' */
+};
+
+
+/* argument
+ * union of argument values
+ * passed as an array, much like va_arg
+ */
+typedef union PrintArg PrintArg;
+union PrintArg
+{
+ int64_t d; /* signed integer scalar */
+ const int8_t *d8; /* signed integer vectors */
+ const int16_t *d16;
+ const int32_t *d32;
+ const int64_t *d64;
+
+ uint64_t u; /* unsigned integer scalar */
+ const uint8_t *u8; /* unsigned integer vectors */
+ const uint16_t *u16;
+ const uint32_t *u32;
+ const uint64_t *u64;
+
+ double f; /* floating point scalar */
+ const float *f32; /* floating point vectors */
+ const double *f64;
+ const long double *flong;
+
+ uint32_t c; /* character scalar */
+ const char *s; /* NUL-terminated char vector */
+ struct String const *S; /* character vector */
+
+ const void *p; /* object reference */
+
+#if SUPPORT_PERCENT_N
+ uint32_t *n; /* output parameter */
+#endif
+};
+
+
+/* structured_printf
+ * uses constant format descriptors and argument block
+ * prints to "out" handler
+ */
+KLIB_EXTERN rc_t CC structured_printf ( struct KWrtHandler const *out,
+ size_t *num_writ, const PrintFmt *fmt, const PrintArg *args );
+
+
+/* structured_sprintf
+ * uses constant format descriptors and argument block
+ * prints to UTF-8 character buffer "dst"
+ */
+KLIB_EXTERN rc_t CC structured_sprintf ( char *dst, size_t bsize,
+ size_t *num_writ, const PrintFmt *fmt, const PrintArg *args );
+
+
+/* TEMPORARY */
+KLIB_EXTERN rc_t CC new_string_printf ( char *dst, size_t bsize,
+ size_t *num_writ, const char *fmt, ... );
+KLIB_EXTERN rc_t CC new_string_vprintf ( char *dst, size_t bsize,
+ size_t *num_writ, const char *fmt, va_list args );
+
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/klib/rc.h b/interfaces/klib/rc.h
index b9de799..e7ad1a4 100644
--- a/interfaces/klib/rc.h
+++ b/interfaces/klib/rc.h
@@ -35,10 +35,15 @@
#include <klib/defs.h>
#endif
-#if ! defined _h_compiler_ && _DEBUGGING
+#if _DEBUGGING
+
+#ifndef _h_compiler_
#include <compiler.h>
#endif
+#include <assert.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -74,7 +79,7 @@ extern "C" {
#if _DEBUGGING && ! defined RECORD_RC_FILE_LINE
#define RECORD_RC_FILE_LINE 1
#elif ! defined RECORD_RC_FILE_LINE
-#define RECORD_RC_FILE_LINE 1
+#define RECORD_RC_FILE_LINE 0
#endif
@@ -99,10 +104,11 @@ RC_ENUM ( RCModule )
RC_ENTRY ( rcSRA, "short read archive" )
RC_VLAST ( rcLastModule_v1_0 )
RC_ENTRY ( rcKFG = rcLastModule_v1_0, "configuration" )
- RC_ENTRY ( rcAlign, "alignment module" )
+ RC_ENTRY ( rcAlign, "alignment" )
RC_ENTRY ( rcKrypto, "cryptographic" )
RC_ENTRY ( rcRDBMS, "RDBMS" )
RC_ENTRY ( rcNS, "network system" )
+ RC_ENTRY ( rcVFS, "virtual file system" )
RC_LAST ( rcLastModule_v1_1 )
};
@@ -168,15 +174,11 @@ RC_ENUM ( RCTarget )
RC_VLAST ( rcLastTarget_v1_0 )
RC_ENTRY ( rcProduction = rcLastTarget_v1_0, "schema production" )
RC_ENTRY ( rcEncryptionKey, "encryption key" )
- RC_ENTRY ( rcInput, "input" )
RC_ENTRY ( rcRng, "random number generator" )
- RC_ENTRY ( rcTest, "test" )
RC_ENTRY ( rcCmd, "command" )
- RC_ENTRY ( rcConfig, "configuration" )
RC_ENTRY ( rcData, "data" )
RC_ENTRY ( rcQuery, "query" )
RC_ENTRY ( rcUri, "uri" )
- RC_ENTRY ( rcWriter, "stream writer" )
RC_LAST ( rcLastTarget_v1_1 )
};
@@ -253,6 +255,7 @@ RC_ENUM ( RCContext )
RC_ENTRY ( rcRetrieving, "retrieving" )
RC_ENTRY ( rcSending, "sending" )
RC_ENTRY ( rcProcessing, "processing" )
+ RC_ENTRY ( rcIdentifying, "type identifying" )
RC_LAST ( rcLastContext_v1_1 )
};
@@ -352,6 +355,7 @@ RC_ENUM ( RCState )
RC_ENTRY ( rcUnequal, "unequal" )
RC_ENTRY ( rcFailed, "failed" )
RC_ENTRY ( rcNotAvailable, "not available" )
+ RC_ENTRY ( rcWrongType, "wrong type" )
RC_LAST ( rcLastState_v1_1 )
};
@@ -365,95 +369,65 @@ KLIB_EXTERN bool CC GetUnreadRCInfo ( rc_t *rc, const char **filename, const cha
#if RECORD_RC_FILE_LINE
-#define SET_RC_FILE_FUNC_LINE( rc ) \
- SetRCFileFuncLine ( ( rc ), __FILE__, __func__, __LINE__ )
+ #if defined(__SUNPRO_CC) && __SUNPRO_CC <= 0x590 && defined(__cplusplus)
+
+ #define SET_RC_FILE_FUNC_LINE( rc ) \
+ SetRCFileFuncLine ( ( rc ), __FILE__, "(unknown)", __LINE__ )
+
+ #else
+
+ #define SET_RC_FILE_FUNC_LINE( rc ) \
+ SetRCFileFuncLine ( ( rc ), __FILE__, __func__, __LINE__ )
+
+ #endif
+
#else
-#define SET_RC_FILE_FUNC_LINE( rc ) \
- ( rc_t ) ( rc )
+ #define SET_RC_FILE_FUNC_LINE( rc ) \
+ ( rc_t ) ( rc )
#endif
-/* for C++ they are all inline functions to allow type checks for parameters */
-#ifdef __cplusplus
-
-/* CTX
- * form a context from parts
- */
-static __inline__
-rc_t CTX ( enum RCModule mod, enum RCTarget targ, enum RCContext ctx )
-{
#ifdef assert
- assert ( rcLastModule_v1_1 <= ( 1 << 5 ) );
- assert ( rcLastTarget_v1_1 <= ( 1 << 6 ) );
- assert ( rcLastContext_v1_1 <= ( 1 << 7 ) );
- assert ( mod < rcLastModule_v1_1 );
- assert ( targ < rcLastTarget_v1_1 );
- assert ( ctx < rcLastContext_v1_1 );
-#endif
- return ( rc_t ) (
- ( ( rc_t ) mod << 27 ) | /* 5 bits */
- ( ( rc_t ) targ << 21 ) | /* 6 bits */
- ( ( rc_t ) ctx << 14 ) ); /* 7 bits */
-}
+#define ASSERT_MOD_TARG_CTX() \
+ assert ( ( int ) rcLastModule_v1_1 < ( 1 << 5 ) ), \
+ assert ( ( int ) rcLastTarget_v1_1 < ( 1 << 6 ) ), \
+ assert ( ( int ) rcLastContext_v1_1 < ( 1 << 7 ) )
+
+#define ASSERT_OBJ_STATE() \
+ assert ( ( int ) rcLastObject_v1_1 < ( 1 << 8 ) ), \
+ assert ( ( int ) rcLastState_v1_1 < ( 1 << 6 ) )
+#else
+#define ASSERT_MOD_TARG_CTX() ( void ) 0
-/* RC
-* form a complete return code from parts
-*/
-static __inline__
-rc_t RC ( enum RCModule mod, enum RCTarget targ, enum RCContext ctx, int obj, enum RCState state )
-{
-#ifdef assert
- assert ( rcLastObject_v1_1 <= ( 1 << 8 ) );
- assert ( rcLastState_v1_1 <= ( 1 << 6 ) );
- assert ( obj < rcLastObject_v1_1 );
- assert ( state < rcLastState_v1_1 );
+#define ASSERT_OBJ_STATE() ( void ) 0
#endif
- return SET_RC_FILE_FUNC_LINE (
- CTX ( mod, targ, ctx ) | /* 18 bits */
- ( ( rc_t ) obj << 6 ) | /* 8 bits */
- ( ( rc_t ) state ) ); /* 6 bits */
-
-}
-/* ResetRCContext
-* rewrite rc to reflect different context
-* typically used to pass out return codes
-*/
-static __inline__
-rc_t ResetRCContext ( rc_t rc, enum RCModule mod, enum RCTarget targ, enum RCContext ctx )
-{
- return ( rc & 0x3FFF ) | CTX ( mod, targ, ctx );
-}
-
-/* ResetRCState
-* rewrite rc to reflect different state
-* typically used to pass out return codes
-*/
-static __inline__
-rc_t ResetRCState( rc_t rc, int obj, enum RCState state )
-{
- return ( rc & 0xFFFFC000 ) | /* 18 bits */
- ( ( rc_t ) obj << 6 ) | /* 8 bits */
- ( ( rc_t ) state ); /* 6 bits */
-}
-
-#else /* __cplusplus */
-
-#define CTX( mod, targ, ctx ) \
- ( rc_t ) ( \
+/* CTX
+ * form a context from parts
+ */
+#define CTX( mod, targ, ctx ) \
+ ( rc_t ) ( ASSERT_MOD_TARG_CTX (), ( \
( ( rc_t ) ( mod ) << 27 ) | /* 5 bits */ \
( ( rc_t ) ( targ ) << 21 ) | /* 6 bits */ \
- ( ( rc_t ) ( ctx ) << 14 ) ) /* 7 bits */
+ ( ( rc_t ) ( ctx ) << 14 ) ) /* 7 bits */ \
+ )
/* RC
* form a complete return code from parts
*/
+#define SILENT_RC( mod, targ, ctx, obj, state ) \
+ ( rc_t ) ( ASSERT_OBJ_STATE (), \
+ CTX ( mod, targ, ctx ) | /* 18 bits */ \
+ ( ( rc_t ) ( obj ) << 6 ) | /* 8 bits */ \
+ ( ( rc_t ) ( state ) ) ) /* 6 bits */
+
#define RC( mod, targ, ctx, obj, state ) \
+ ( rc_t ) ( ASSERT_OBJ_STATE (), \
SET_RC_FILE_FUNC_LINE ( \
CTX ( mod, targ, ctx ) | /* 18 bits */ \
( ( rc_t ) ( obj ) << 6 ) | /* 8 bits */ \
- ( ( rc_t ) ( state ) ) ) /* 6 bits */
+ ( ( rc_t ) ( state ) ) ) ) /* 6 bits */
/* ResetRCContext
* rewrite rc to reflect different context
@@ -501,7 +475,6 @@ rc_t ResetRCState( rc_t rc, int obj, enum RCState state )
#define GetRCState( rc ) \
( enum RCState ) ( ( rc ) & 0x3F )
-#endif /* RC_EMIT */
#ifdef __cplusplus
}
diff --git a/interfaces/klib/refcount.h b/interfaces/klib/refcount.h
index 8984577..bc7cfd5 100644
--- a/interfaces/klib/refcount.h
+++ b/interfaces/klib/refcount.h
@@ -50,10 +50,6 @@
#include <klib/debug.h>
-#ifndef _h_fmtdef_
-#include <fmtdef.h>
-#endif
-
#endif
#ifdef __cplusplus
@@ -233,8 +229,8 @@ KLIB_EXTERN int CC KDualRefDropDep ( const KDualRef *self, const char *clsname )
"instance 0x%zX: initial refcount %d\n", \
clsname, op, name, instance, refcount ))
#define CNTMSG( clsname, op, instance, refcount ) \
- DBGMSG ( REFMOD, REFCOND, ( "about to %s instance 0x%zX: prior refcount = %d\n", \
- op, instance, refcount ))
+ DBGMSG ( REFMOD, REFCOND, ( "about to %s instance 0x%zX: prior refcount = %d for %s\n", \
+ op, instance, refcount, clsname ))
#define REFMSG( clsname, op, instance ) \
CNTMSG ( clsname, op, instance, atomic32_read ( instance ) )
#define REFNEW_COMMA( clsname, op, name, instance, refcount ) \
diff --git a/interfaces/klib/report.h b/interfaces/klib/report.h
new file mode 100644
index 0000000..2c60e2f
--- /dev/null
+++ b/interfaces/klib/report.h
@@ -0,0 +1,98 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_klib_report_
+#define _h_klib_report_
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+
+/* Init
+ * initialize with common information
+ *
+ * "argc" [ IN ] and "argv" [ IN ] - intact command line
+ *
+ * "tool_version" [ IN ] - version of tool
+ */
+KLIB_EXTERN void CC ReportInit ( int argc, char *argv [],
+ ver_t tool_version );
+
+
+/* BuildDate
+ * set the build date of the tool
+ *
+ * "date" [ IN ] - pre-processor __DATE__
+ */
+KLIB_EXTERN void CC ReportBuildDate ( const char *date );
+
+
+/* Silence
+ * tell report to be silent at exit
+ * useful especially in response to ^C
+ */
+KLIB_EXTERN void CC ReportSilence ( void );
+
+
+/* Finalize
+ * perform cleanup
+ * optionally report error condition
+ *
+ * "rc" [ IN ] - report environment information if not zero
+ */
+KLIB_EXTERN rc_t CC ReportFinalize ( rc_t rc );
+
+
+/* ResetObject
+ * Resets the name of the current object beeing processes(path or accession),
+ * usually from command line.
+ * Should be called each time
+ * when starting next command line argument processing.
+ */
+KLIB_EXTERN rc_t CC ReportResetObject ( const char *path );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_klib_report_ */
diff --git a/interfaces/klib/sort.h b/interfaces/klib/sort.h
index dd986c2..4adf75a 100644
--- a/interfaces/klib/sort.h
+++ b/interfaces/klib/sort.h
@@ -35,6 +35,10 @@
#include <klib/defs.h>
#endif
+#ifndef _h_klib_ksort_macro_
+#include <klib/ksort-macro.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -48,6 +52,62 @@ KLIB_EXTERN void CC ksort ( void *pbase, size_t total_elems, size_t size,
int ( CC * cmp ) ( const void*, const void*, void *data ), void *data );
+/* various custom ksort operations
+ * structures will generally want their own functions
+ * these fundamental types can be standardized
+ */
+KLIB_EXTERN void CC ksort_int32_t ( int32_t *pbase, size_t total_elems );
+KLIB_EXTERN void CC ksort_uint32_t ( uint32_t *pbase, size_t total_elems );
+KLIB_EXTERN void CC ksort_int64_t ( int64_t *pbase, size_t total_elems );
+KLIB_EXTERN void CC ksort_uint64_t ( uint64_t *pbase, size_t total_elems );
+
+
+/* KSORT
+ * macro ( see <klib/ksort-macro.h> )
+ * allows creation of a custom qsort with inlined compare and swap
+ * MUCH faster than normal qsort or ksort.
+ *
+ * basically you need to define a macro CMP() and another SWAP(),
+ * and the KSORT macro will fill in the rest.
+ *
+ * CMP() needs to evaluate to a signed 32-bit integer.
+ * THIS WILL CHANGE TO BECOME LESS_THAN( a, b ).
+ *
+ * SWAP() will generally be a custom operation, but can be
+ * defined in terms of a default operation similar to qsort.
+ *
+ * an example usage follows:
+ */
+#if 0
+static
+void ksort_int64_t ( int64_t *base, size_t count )
+{
+ /* swap is performed on full element, not byte-for-byte */
+#define SWAP( a, b, off, size ) \
+ do \
+ { \
+ int64_t tmp = * ( const int64_t* ) ( a ); \
+ * ( int64_t* ) ( a ) = * ( const int64_t* ) ( b ); \
+ * ( int64_t* ) ( b ) = tmp; \
+ } \
+ while ( 0 )
+
+ /* 64-bit comparison producing a signed 32-bit result */
+#define CMP( a, b ) \
+ ( ( * ( const int64_t* ) ( a ) < * ( const int64_t* ) ( b ) ) ? -1 : \
+ ( * ( const int64_t* ) ( a ) > * ( const int64_t* ) ( b ) ) )
+}
+
+ /* let the macro fill out the remainder */
+ KSORT ( base, count, sizeof * base, 0, sizeof * base );
+
+ /* free up macros for future use */
+#undef SWAP
+#undef CMP
+
+#endif
+
+
/*--------------------------------------------------------------------------
* kbsearch
* bsearch with a function data pointer
diff --git a/interfaces/klib/status.h b/interfaces/klib/status.h
index 73249c8..718c38f 100644
--- a/interfaces/klib/status.h
+++ b/interfaces/klib/status.h
@@ -78,7 +78,7 @@ KLIB_EXTERN rc_t CC KStsLibHandlerSetStdErr ( void );
/* formatting */
typedef uint32_t KStsFmtFlags;
-enum KStsFmtFlags
+enum KStsFmtFlagsEnum
{
kstsFmtTimestamp = 0x00000001,
kstsFmtPid = 0x00000002,
diff --git a/interfaces/klib/vector.h b/interfaces/klib/vector.h
index 4bc553b..be72b90 100644
--- a/interfaces/klib/vector.h
+++ b/interfaces/klib/vector.h
@@ -41,6 +41,161 @@ extern "C" {
/*--------------------------------------------------------------------------
+ * KVector
+ * encapsulated vector interface
+ *
+ * a vector obeys a particular set of messages
+ * it may be implemented as an array, but not necessarily.
+ *
+ * the principal property of a vector is that it acts as a map
+ * between an integer key and a value of some type. in this case,
+ * we only accept unsigned integers as keys.
+ */
+typedef struct KVector KVector;
+
+
+/* Make
+ * create an empty vector
+ */
+KLIB_EXTERN rc_t CC KVectorMake ( KVector **v );
+
+
+/* AddRef
+ * Release
+ */
+KLIB_EXTERN rc_t CC KVectorAddRef ( const KVector *self );
+KLIB_EXTERN rc_t CC KVectorRelease ( const KVector *self );
+
+
+/* Get
+ * get an untyped value
+ * returns rc_t state of rcNull if index is not set
+ *
+ * "key" [ IN ] - vector index
+ *
+ * "value_buffer" [ OUT ] and "bsize" [ IN ] - return buffer for value
+ *
+ * "bytes" [ OUT ] - return parameter for bytes in value
+ *
+ * NB - if rc_t state is rcInsufficient, "bytes" will contain
+ * the number of bytes required to access the indexed value
+ */
+KLIB_EXTERN rc_t CC KVectorGet ( const KVector *self, uint64_t key,
+ void *value_buffer, size_t bsize, size_t *bytes );
+
+/* Get
+ * get typed values
+ * returns rc_t state of rcNull if index is not set
+ *
+ * "key" [ IN ] - vector index
+ *
+ * "value" [ OUT ] - return parameter for value
+ */
+KLIB_EXTERN rc_t CC KVectorGetBool ( const KVector *self, uint64_t key, bool *value );
+
+KLIB_EXTERN rc_t CC KVectorGetI8 ( const KVector *self, uint64_t key, int8_t *value );
+KLIB_EXTERN rc_t CC KVectorGetI16 ( const KVector *self, uint64_t key, int16_t *value );
+KLIB_EXTERN rc_t CC KVectorGetI32 ( const KVector *self, uint64_t key, int32_t *value );
+KLIB_EXTERN rc_t CC KVectorGetI64 ( const KVector *self, uint64_t key, int64_t *value );
+
+KLIB_EXTERN rc_t CC KVectorGetU8 ( const KVector *self, uint64_t key, uint8_t *value );
+KLIB_EXTERN rc_t CC KVectorGetU16 ( const KVector *self, uint64_t key, uint16_t *value );
+KLIB_EXTERN rc_t CC KVectorGetU32 ( const KVector *self, uint64_t key, uint32_t *value );
+KLIB_EXTERN rc_t CC KVectorGetU64 ( const KVector *self, uint64_t key, uint64_t *value );
+
+KLIB_EXTERN rc_t CC KVectorGetF32 ( const KVector *self, uint64_t key, float *value );
+KLIB_EXTERN rc_t CC KVectorGetF64 ( const KVector *self, uint64_t key, double *value );
+
+KLIB_EXTERN rc_t CC KVectorGetPtr ( const KVector *self, uint64_t key, void **value );
+
+
+/* Set
+ * set an untyped value
+ *
+ * "key" [ IN ] - vector index
+ *
+ * "value" [ IN ] and "bytes" [ IN ] - value buffer
+ */
+KLIB_EXTERN rc_t CC KVectorSet ( KVector *self, uint64_t key,
+ const void *value, size_t bytes );
+
+/* Set
+ * set typed values
+ *
+ * "key" [ IN ] - vector index
+ *
+ * "data" [ IN ] - value
+ */
+KLIB_EXTERN rc_t CC KVectorSetBool ( KVector *self, uint64_t key, bool value );
+
+KLIB_EXTERN rc_t CC KVectorSetI8 ( KVector *self, uint64_t key, int8_t value );
+KLIB_EXTERN rc_t CC KVectorSetI16 ( KVector *self, uint64_t key, int16_t value );
+KLIB_EXTERN rc_t CC KVectorSetI32 ( KVector *self, uint64_t key, int32_t value );
+KLIB_EXTERN rc_t CC KVectorSetI64 ( KVector *self, uint64_t key, int64_t value );
+
+KLIB_EXTERN rc_t CC KVectorSetU8 ( KVector *self, uint64_t key, uint8_t value );
+KLIB_EXTERN rc_t CC KVectorSetU16 ( KVector *self, uint64_t key, uint16_t value );
+KLIB_EXTERN rc_t CC KVectorSetU32 ( KVector *self, uint64_t key, uint32_t value );
+KLIB_EXTERN rc_t CC KVectorSetU64 ( KVector *self, uint64_t key, uint64_t value );
+
+KLIB_EXTERN rc_t CC KVectorSetF32 ( KVector *self, uint64_t key, float value );
+KLIB_EXTERN rc_t CC KVectorSetF64 ( KVector *self, uint64_t key, double value );
+
+KLIB_EXTERN rc_t CC KVectorSetPtr ( KVector *self, uint64_t key, const void *value );
+
+
+/* Unset
+ * unset an entry
+ * returns rc_t state rcNull if index is not set
+ *
+ * "key" [ IN ] - vector index
+ */
+KLIB_EXTERN rc_t CC KVectorUnset ( KVector *self, uint64_t key );
+
+
+/* Visit
+ * executes a function on each key/value pair
+ * returns early if "f" returns non-zero rc_t
+ *
+ * "reverse" [ IN ] - if true, execute in reverse order
+ *
+ * "f" [ IN ] and "user_data" [ IN, OPAQUE ] - function to be
+ * executed on each vector element or until the function
+ * returns true.
+ */
+KLIB_EXTERN rc_t CC KVectorVisit ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, const void *value, size_t bytes, void *user_data ),
+ void *user_data );
+
+/* Visit
+ * visit typed values
+ * returns early if "f" returns non-zero rc_t
+ *
+ * "reverse" [ IN ] - if true, execute in reverse order
+ *
+ * "f" [ IN ] and "user_data" [ IN, OPAQUE ] - function to be
+ * executed on each vector element or until the function
+ * returns true.
+ */
+KLIB_EXTERN rc_t CC KVectorVisitBool ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, bool value, void *user_data ),
+ void *user_data );
+KLIB_EXTERN rc_t CC KVectorVisitI64 ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, int64_t value, void *user_data ),
+ void *user_data );
+KLIB_EXTERN rc_t CC KVectorVisitU64 ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, uint64_t value, void *user_data ),
+ void *user_data );
+KLIB_EXTERN rc_t CC KVectorVisitF64 ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, double value, void *user_data ),
+ void *user_data );
+KLIB_EXTERN rc_t CC KVectorVisitPtr ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, const void *value, void *user_data ),
+ void *user_data );
+
+
+
+/*--------------------------------------------------------------------------
* Vector
* simple vector of void*
*/
diff --git a/interfaces/klib/xml.h b/interfaces/klib/xml.h
deleted file mode 100644
index 165a6e6..0000000
--- a/interfaces/klib/xml.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_klib_xml_
-#define _h_klib_xml_
-
-#ifndef _h_klib_extern_
-#include <klib/extern.h>
-#endif
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#include <stdarg.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*--------------------------------------------------------------------------
- * forwards
- */
-struct KFile;
-struct KNamelist;
-struct KXMLNodeset;
-
-
-/*--------------------------------------------------------------------------
- * XML node
- */
-typedef struct KXMLNode KXMLNode;
-
-/* AddRef
- * Release
- */
-KLIB_EXTERN rc_t CC KXMLNodeAddRef ( const KXMLNode *self );
-KLIB_EXTERN rc_t CC KXMLNodeRelease ( const KXMLNode *self );
-
-/* GetName
- * Get node path from parent nodeset
- */
-KLIB_EXTERN rc_t CC KXMLNodeGetName ( const KXMLNode *self, const char **name );
-
-/* Get element name (tag)
- */
-KLIB_EXTERN rc_t CC KXMLNodeElementName ( const KXMLNode *self, const char **name );
-
-/* Read
- */
-KLIB_EXTERN rc_t CC KXMLNodeRead ( const KXMLNode *self,
- size_t offset, void *buffer, size_t size,
- size_t *num_read, size_t *remaining );
-
-/* Write
- */
-KLIB_EXTERN rc_t CC KXMLNodeWrite ( KXMLNode *self,
- size_t offset, const void *buffer, size_t size );
-
-/* Append
- */
-KLIB_EXTERN rc_t CC KXMLNodeAppend ( KXMLNode *self,
- const void *buffer, size_t bsize );
-
-
-/* ReadAs ( formatted )
- * reads as integer or float value in native byte order
- * casts smaller-sized values to desired size, e.g.
- * uint32_t to uint64_t
- *
- * "i" [ OUT ] - return parameter for signed integer
- * "u" [ OUT ] - return parameter for unsigned integer
- * "f" [ OUT ] - return parameter for double float
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAsI16 ( const KXMLNode *self, int16_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsU16 ( const KXMLNode *self, uint16_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsI32 ( const KXMLNode *self, int32_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsU32 ( const KXMLNode *self, uint32_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsI64 ( const KXMLNode *self, int64_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsU64 ( const KXMLNode *self, uint64_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsF64 ( const KXMLNode *self, double *f );
-
-
-/* ReadCString ( formatted )
- * reads as C-string
- *
- * "buffer" [ OUT ] and "bsize" [ IN ] - output buffer for
- * NUL terminated string.
- *
- * "size" [ OUT ] - return parameter giving size of string
- * not including NUL byte. the size is set both upon success
- * and insufficient buffer space error.
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadCString ( const KXMLNode *self,
- char *buffer, size_t bsize, size_t *size );
-
-/* ReadCStr
- * reads node value as C-string
- *
- * "str" [ IN ] - returned pointer to a NULL terminated string.
- * Caller responsible to dealloc (free)!
- * "default_value" [IN] - default value used in case node value is empty, NULL - none
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadCStr( const KXMLNode *self, char** str, const char* default_value );
-
-/* Write ( formatted )
- * writes string
- *
- * "str" [ IN ] - NULL terminated string.
- */
-KLIB_EXTERN rc_t CC KXMLNodeWriteCString ( KXMLNode *self, const char *str );
-
-
-/* OpenNodesetRead
- *
- * NB. OpenNodesetRead could return Nodeset with 0 elements.
- * To make sure the node exists you should verify that (KXMLNodesetCount > 0)
- */
-KLIB_EXTERN rc_t CC KXMLNodeOpenNodesetRead ( const KXMLNode *self,
- struct KXMLNodeset const **ns, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLNodeVOpenNodesetRead ( const KXMLNode *self,
- struct KXMLNodeset const **ns, const char *path, va_list args );
-
-/* OpenNodesetUpdate
- */
-KLIB_EXTERN rc_t CC KXMLNodeOpenNodesetUpdate ( KXMLNode *self,
- struct KXMLNodeset **ns, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLNodeVOpenNodesetUpdate ( KXMLNode *self,
- struct KXMLNodeset **ns, const char *path, va_list args );
-
-/* ReadAttr
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAttr ( const KXMLNode *self,
- const char *attr, void *buffer, size_t bsize,
- size_t *num_read, size_t *remaining );
-
-/* WriteAttr
- */
-KLIB_EXTERN rc_t CC KXMLNodeWriteAttr ( KXMLNode *self,
- const char *attr, const void *buffer, size_t size );
-
-
-/* ReadAttrAs ( formatted )
- * reads as integer or float value in native byte order
- * casts smaller-sized values to desired size, e.g.
- * uint32_t to uint64_t
- *
- * "i" [ OUT ] - return parameter for signed integer
- * "u" [ OUT ] - return parameter for unsigned integer
- * "f" [ OUT ] - return parameter for double float
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI16 ( const KXMLNode *self, const char *attr, int16_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU16 ( const KXMLNode *self, const char *attr, uint16_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI32 ( const KXMLNode *self, const char *attr, int32_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU32 ( const KXMLNode *self, const char *attr, uint32_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI64 ( const KXMLNode *self, const char *attr, int64_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU64 ( const KXMLNode *self, const char *attr, uint64_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsF64 ( const KXMLNode *self, const char *attr, double *f );
-
-
-/* ReadAttrCString ( formatted )
- * reads as C-string
- *
- * "buffer" [ OUT ] and "bsize" [ IN ] - output buffer for
- * NUL terminated string.
- *
- * "size" [ OUT ] - return parameter giving size of string
- * not including NUL byte. the size is set both upon success
- * and insufficient buffer space error.
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrCString ( const KXMLNode *self, const char *attr,
- char *buffer, size_t bsize, size_t *size );
-
-/* ReadAttrCStr
- * reads attribute as C-string
- *
- * "str" [ IN ] - returned pointer to a NULL terminated string.
- * Caller responsible to dealloc (free)!
- * "default_value" [IN] - default value used in case node value is empty, NULL - none
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrCStr( const KXMLNode *self, const char *attr, char** str, const char* default_value);
-
-/* CountChildNodes
- * count child nodes
- */
-KLIB_EXTERN rc_t CC KXMLNodeCountChildNodes(const KXMLNode *self,
- uint32_t *count);
-
-/* GetNodeRead
- * access indexed node
- * "idx" [ IN ] - a zero-based index
- */
-KLIB_EXTERN rc_t CC KXMLNodeGetNodeRead ( const KXMLNode *self,
- const KXMLNode **node, uint32_t idx );
-
-/* ListAttr
- * list all named attributes
- */
-KLIB_EXTERN rc_t CC KXMLNodeListAttr ( const KXMLNode *self,
- struct KNamelist const **names );
-
-/* ListChild
- * list all named children
- */
-KLIB_EXTERN rc_t CC KXMLNodeListChild ( const KXMLNode *self,
- struct KNamelist const **names );
-
-
-/* GetFirstChildNodeRead
- * Returns the first(with index 0) sub-node of self using path.
- * Is equivalent to:
- * KXMLNodeOpenNodesetRead(self, &nc, path, ...);
- * KXMLNodesetGetNodeRead(ns, node, 0);
- * It will return NotFound error if any node exists
- */
-KLIB_EXTERN rc_t CC KXMLNodeGetFirstChildNodeRead ( const KXMLNode *self,
- const KXMLNode **node, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLNodeVGetFirstChildNodeRead ( const KXMLNode *self,
- const KXMLNode **node, const char *path, va_list args );
-
-
-/*--------------------------------------------------------------------------
- * XML node set
- */
-typedef struct KXMLNodeset KXMLNodeset;
-
-/* AddRef
- * Release
- */
-KLIB_EXTERN rc_t CC KXMLNodesetAddRef ( const KXMLNodeset *self );
-KLIB_EXTERN rc_t CC KXMLNodesetRelease ( const KXMLNodeset *self );
-
-/* Count
- * retrieve the number of nodes in set
- */
-KLIB_EXTERN rc_t CC KXMLNodesetCount ( const KXMLNodeset *self, uint32_t *count );
-
-/* GetNode
- * access indexed node
- * "idx" [ IN ] - a zero-based index
- */
-KLIB_EXTERN rc_t CC KXMLNodesetGetNodeRead ( const KXMLNodeset *self,
- const KXMLNode **node, uint32_t idx );
-
-
-/*--------------------------------------------------------------------------
- * XML document
- */
-typedef struct KXMLDoc KXMLDoc;
-
-/* AddRef
- * Release
- * ignores NULL references
- */
-KLIB_EXTERN rc_t CC KXMLDocAddRef ( const KXMLDoc *self );
-KLIB_EXTERN rc_t CC KXMLDocRelease ( const KXMLDoc *self );
-
-/* OpenNodesetRead
- * opens a node set with given path
- */
-KLIB_EXTERN rc_t CC KXMLDocOpenNodesetRead ( const KXMLDoc *self,
- const KXMLNodeset **ns, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLDocVOpenNodesetRead ( const KXMLDoc *self,
- const KXMLNodeset **ns, const char *path, va_list args );
-
-/* OpenNodesetUpdate
- * opens a node set with given path
- */
-KLIB_EXTERN rc_t CC KXMLDocOpenNodesetUpdate ( KXMLDoc *self,
- KXMLNodeset **ns, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLDocVOpenNodesetUpdate ( KXMLDoc *self,
- KXMLNodeset **ns, const char *path, va_list args );
-
-
-/*--------------------------------------------------------------------------
- * XML manager
- */
-typedef struct KXMLMgr KXMLMgr;
-
-/* Make
- * make an XML manager object
- */
-KLIB_EXTERN rc_t CC KXMLMgrMakeRead ( const KXMLMgr **mgr );
-
-/* AddRef
- * Release
- * ignores NULL references
- */
-KLIB_EXTERN rc_t CC KXMLMgrAddRef ( const KXMLMgr *self );
-KLIB_EXTERN rc_t CC KXMLMgrRelease ( const KXMLMgr *self );
-
-/* MakeDoc
- * create a document object from source file
- */
-KLIB_EXTERN rc_t CC KXMLMgrMakeDocRead ( const KXMLMgr *self,
- const KXMLDoc **doc, struct KFile const *src );
-
-/* MakeDoc
- * create a document object from memory
- */
-KLIB_EXTERN rc_t KXMLMgrMakeDocReadFromMemory ( const KXMLMgr *self,
- const KXMLDoc **result, const char* buffer, uint64_t size );
-
-/*--------------------------------------------------------------------------
- * KDirectory
- * this will probably be relocated later on
- */
-struct KDirectory;
-
-/* OpenXTocDirRead
- * open copycat XML as a chroot'd directory
- * XML data comes from a KFile in this case
- *
- * "dir" [ OUT ] - return parameter for directory object
- *
- * "base_path" [ IN ] - NUL terminated string giving the path
- * of the new directory relative to "self". NB - can be absolute
- * or relative, but is always interpreted by "self".
- *
- * "xml" [ IN ] - file containing XML data produced by copycat tool
- */
-KLIB_EXTERN rc_t CC KDirectoryOpenXTocDirRead ( struct KDirectory const * self,
- struct KDirectory const ** dir, const char * base_path, struct KFile const * xml);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_klib_xml_ */
diff --git a/interfaces/klib/xml.hpp b/interfaces/klib/xml.hpp
deleted file mode 100644
index 24dbfcd..0000000
--- a/interfaces/klib/xml.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _hpp_klib_xml_
-#define _hpp_klib_xml_
-
-#ifndef _h_klib_xml_
-#include <klib/xml.h>
-#endif
-
-/*--------------------------------------------------------------------------
- * XML node
- */
-struct KXMLNode
-{
- /* AddRef
- * Release
- */
- inline rc_t AddRef ( void ) const
- { return KXMLNodeAddRef ( this ); }
- inline rc_t Release ( void ) const
- { return KXMLNodeRelease ( this ); }
-
- /* GetName
- */
- inline rc_t GetName ( const char **name ) const
- { return KXMLNodeGetName ( this, name ); }
-
- /* OpenNodesetRead
- */
- inline rc_t OpenNodesetRead ( struct KXMLNodeset const **ns,
- const char *path, ... ) const
- {
- va_list args;
- va_start ( args, path );
- rc_t status = KXMLNodeVOpenNodesetRead ( this, ns, path, args );
- va_end ( args );
- return status;
- }
-
- /* ReadAttr
- */
- inline rc_t ReadAttr ( const char *attr, void *buffer, size_t bsize,
- size_t *num_read, size_t *remaining ) const
- {
- return KXMLNodeReadAttr
- ( this, attr, buffer, bsize, num_read, remaining );
- }
-
- /* CountNodes
- * count child nodes
- */
- inline rc_t CountChildNodes ( uint32_t *count ) const
- { return KXMLNodeCountChildNodes ( this, count ); }
-
- /* GetNodeRead
- * access indexed node
- * "idx" [ IN ] - a zero-based index
- */
- inline rc_t GetNodeRead ( const KXMLNode **node,
- uint32_t idx ) const
- { return KXMLNodeGetNodeRead ( this, node, idx ); }
-
- /* ListChild
- * list all named children
- */
- inline rc_t ListChild ( struct KNamelist const **names ) const
- { return KXMLNodeListChild ( this, names ); }
-
- inline rc_t GetFirstChildNodeRead ( const KXMLNode **node,
- const char *path, ... ) const
- {
- va_list args;
- va_start ( args, path );
- rc_t rc = KXMLNodeVGetFirstChildNodeRead ( this, node, path, args );
- va_end ( args );
- return rc;
- }
-
- inline rc_t Read ( int32_t *i ) const
- { return KXMLNodeReadAsI32 ( this, i ); }
-
- inline rc_t Read ( char *buffer, size_t bsize, size_t *size ) const
- { return KXMLNodeReadCString ( this, buffer, bsize, size ); }
-
- inline rc_t ReadAttr ( const char *attr, int32_t *i ) const
- { return KXMLNodeReadAttrAsI32 ( this, attr, i ); }
-
- inline rc_t ReadAttr ( const char *attr,
- char *buffer, size_t bsize, size_t *size ) const
- { return KXMLNodeReadAttrCString ( this, attr, buffer, bsize, size ); }
-};
-
-/*--------------------------------------------------------------------------
- * XML node set
- */
-struct KXMLNodeset
-{
- /* AddRef
- * Release
- */
- inline rc_t AddRef ( void ) const
- { return KXMLNodesetAddRef ( this ); }
- inline rc_t Release ( void ) const
- { return KXMLNodesetRelease ( this ); }
-
- /* Count
- * retrieve the number of nodes in set
- */
- inline rc_t Count ( uint32_t *count ) const
- { return KXMLNodesetCount ( this, count ); }
-
- /* GetNode
- * access indexed node
- */
- inline rc_t GetNodeRead ( const KXMLNode **node, uint32_t idx ) const
- { return KXMLNodesetGetNodeRead ( this, node, idx ); }
-};
-
-/*--------------------------------------------------------------------------
- * XML document
- */
-struct KXMLDoc
-{
- /* AddRef
- * Release
- * ignores NULL references
- */
- inline rc_t AddRef ( void ) const
- { return KXMLDocAddRef ( this ); }
- inline rc_t Release ( void ) const
- { return KXMLDocRelease ( this ); }
-
- /* OpenNodesetRead
- * opens a node set with given path
- */
- inline rc_t OpenNodesetRead ( const KXMLNodeset **ns, const char *path, ... ) const
- {
- va_list args;
- va_start ( args, path );
- int status = KXMLDocVOpenNodesetRead ( this, ns, path, args );
- va_end ( args );
- return status;
- }
-};
-
-/*--------------------------------------------------------------------------
- * XML manager
- */
-struct KXMLMgr
-{
- /* Make
- * make an XML manager object
- */
- static inline rc_t MakeRead ( const KXMLMgr **mgr )
- { return KXMLMgrMakeRead ( mgr ); }
-
- /* AddRef
- * Release
- * ignores NULL references
- */
- inline rc_t AddRef ( void ) const
- { return KXMLMgrAddRef ( this ); }
- inline rc_t Release ( void ) const
- { return KXMLMgrRelease ( this ); }
-
- /* MakeDoc
- * create a document object from source file
- */
- inline rc_t MakeDocRead ( const KXMLDoc **doc, struct KFile const *src ) const
- { return KXMLMgrMakeDocRead ( this, doc, src ); }
-
-};
-
-#endif /* _hpp_klib_xml_ */
diff --git a/interfaces/kns/KCurlRequest.h b/interfaces/kns/KCurlRequest.h
new file mode 100644
index 0000000..215ca40
--- /dev/null
+++ b/interfaces/kns/KCurlRequest.h
@@ -0,0 +1,65 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_kns_request_
+#define _h_kns_request_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct String;
+struct KNSManager;
+struct KDataBuffer;
+
+struct KCurlRequest;
+
+KNS_EXTERN rc_t CC KNSManagerMakeRequest( struct KNSManager const *kns_mgr, struct KCurlRequest **self, const char * url, bool verbose );
+
+KNS_EXTERN rc_t CC KCurlRequestAddRef ( const struct KCurlRequest *self );
+
+KNS_EXTERN rc_t CC KCurlRequestRelease( const struct KCurlRequest *self );
+
+KNS_EXTERN rc_t CC KCurlRequestAddFields( struct KCurlRequest *self, const char * fields );
+
+KNS_EXTERN rc_t CC KCurlRequestAddSFields( struct KCurlRequest *self, struct String const * fields );
+
+KNS_EXTERN rc_t CC KCurlRequestAddField( struct KCurlRequest *self, const char * name, const char * value );
+
+KNS_EXTERN rc_t CC KCurlRequestAddSField( struct KCurlRequest *self, struct String const * name, struct String const * value );
+
+KNS_EXTERN rc_t CC KCurlRequestPerform( struct KCurlRequest *self, struct KDataBuffer * buffer );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/interfaces/kns/curl-file.h b/interfaces/kns/curl-file.h
new file mode 100644
index 0000000..77aabe4
--- /dev/null
+++ b/interfaces/kns/curl-file.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_curl_file_
+#define _h_curl_file_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * KCurlFile
+ * a remote file, fetched (in parts) via http using libcurl
+ */
+KNS_EXTERN rc_t CC KCurlFileMake ( struct KFile const **self, const char * url, bool verbose );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/interfaces/kns/entrez-fetcher.h b/interfaces/kns/entrez-fetcher.h
new file mode 100644
index 0000000..7d79cd7
--- /dev/null
+++ b/interfaces/kns/entrez-fetcher.h
@@ -0,0 +1,88 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_entrez_fetcher_
+#define _h_entrez_fetcher_
+
+#ifndef _h_url_fetcher_
+#include <kns/url-fetcher.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * KEntrezFetcher
+ * everything to fetch DNA-text from entrez - server
+ */
+typedef struct KEntrezFetcher KEntrezFetcher;
+
+
+/* Make
+ * create a fetcher object
+ */
+rc_t KEntrezFetcherMake ( KEntrezFetcher **fetcher, KUrlFetcher * url_fetcher );
+
+/* Setup
+ * prepares a fetch and indicates to caller the buffer size
+ *
+ * "server" [ IN ] - NUL terminated URI, e.g.
+ * "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi"
+ *
+ * "seq_id" [ IN ] - NUL terminated sequence identifier, e.g. "NC_000001"
+ * max_seq_len : 1024
+ * row_id : 11
+ * row_count : 1
+ */
+rc_t KEntrezFetcherSetup ( KEntrezFetcher *self,
+ const char * server, const char * seq_id,
+ const size_t max_seq_len, const uint64_t row_id, const size_t row_count,
+ size_t * buffsize );
+
+
+/* Setup
+ * prepares a fetch by giving it a usable url
+ */
+rc_t KEntrezFetcherSetupUri ( KEntrezFetcher *self, const char * uri );
+
+
+/* AddRef
+ * Release
+ */
+rc_t KEntrezFetcherAddRef ( const KEntrezFetcher *self );
+rc_t KEntrezFetcherRelease ( const KEntrezFetcher *self );
+
+/* Read
+ * reads data from prepared URI
+ */
+rc_t KEntrezFetcherRead ( KEntrezFetcher *self,
+ void *dst, size_t dst_size, size_t *num_read );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_entrez_fetcher_ */
diff --git a/interfaces/kns/extern.h b/interfaces/kns/extern.h
new file mode 100644
index 0000000..afd5c00
--- /dev/null
+++ b/interfaces/kns/extern.h
@@ -0,0 +1,41 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kns_extern_
+#define _h_kns_extern_
+
+#if ! defined EXPORT_LATCH && defined _LIBRARY
+#define KNS_EXTERN LIB_EXPORT
+#define EXPORT_LATCH 1
+#else
+#define KNS_EXTERN LIB_IMPORT
+#endif
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#endif /* _h_kns_extern_ */
diff --git a/interfaces/kns/impl.h b/interfaces/kns/impl.h
new file mode 100644
index 0000000..eec1bd8
--- /dev/null
+++ b/interfaces/kns/impl.h
@@ -0,0 +1,104 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kns_impl_
+#define _h_kns_impl_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_kns_stream_
+#include <kns/stream.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef union KStream_vt KStream_vt;
+
+
+/*--------------------------------------------------------------------------
+ * KStream
+ * a virtual stream
+ */
+struct KStream
+{
+ const KStream_vt *vt;
+ KRefcount refcount;
+ uint8_t read_enabled;
+ uint8_t write_enabled;
+ uint8_t align [ 2 ];
+};
+
+#ifndef KSTREAM_IMPL
+#define KSTREAM_IMPL struct KStream
+#endif
+
+typedef struct KStream_vt_v1 KStream_vt_v1;
+struct KStream_vt_v1
+{
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+ rc_t ( CC * destroy ) ( KSTREAM_IMPL *self );
+ rc_t ( CC * read ) ( const KSTREAM_IMPL *self,
+ void *buffer, size_t bsize, size_t *num_read );
+ rc_t ( CC * write ) ( KSTREAM_IMPL *self,
+ const void *buffer, size_t size, size_t *num_writ );
+ /* end minor version == 0 */
+};
+
+union KStream_vt
+{
+ KStream_vt_v1 v1;
+};
+
+
+/* Init
+ * initialize a newly allocated stream object
+ */
+KNS_EXTERN rc_t CC KStreamInit ( KStream *self, const KStream_vt *vt,
+ const char *classname, const char *strname,
+ bool read_enabled, bool write_enabled );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kns_impl_ */
diff --git a/interfaces/kns/manager.h b/interfaces/kns/manager.h
new file mode 100644
index 0000000..1c78d49
--- /dev/null
+++ b/interfaces/kns/manager.h
@@ -0,0 +1,85 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_kns_manager_
+#define _h_kns_manager_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+
+/*--------------------------------------------------------------------------
+ * KNSManager
+ * manages the network system
+ */
+typedef struct KNSManager KNSManager;
+
+
+/* Make
+ * create a manager instance
+ */
+KNS_EXTERN rc_t CC KNSManagerMake ( KNSManager **mgr );
+
+
+/* AddRef
+ * Release
+ * ignores NULL references
+ */
+KNS_EXTERN rc_t CC KNSManagerAddRef ( const KNSManager *self );
+KNS_EXTERN rc_t CC KNSManagerRelease ( const KNSManager *self );
+
+
+/* Avail - DEPRECATED
+ * indicate to caller whether networking services are available
+ * mainly here to support libcurl
+ */
+KNS_EXTERN rc_t CC KNSManagerAvail ( const KNSManager *self );
+
+/* CurlVersion - DEPRECATED
+ * indicate which version of curl is available
+ * return this as a string, because this is how libcurl does it
+ */
+KNS_EXTERN rc_t CC KNSManagerCurlVersion ( const KNSManager *self, const char ** version_string );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kns_manager_ */
diff --git a/interfaces/kns/stream.h b/interfaces/kns/stream.h
new file mode 100644
index 0000000..a7c1bf7
--- /dev/null
+++ b/interfaces/kns/stream.h
@@ -0,0 +1,126 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kns_stream_
+#define _h_kns_stream_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * KStream
+ * the stream is defined to have no concept of size,
+ * and to not support any form of random access
+ */
+typedef struct KStream KStream;
+
+
+/* AddRef
+ * Release
+ * ignores NULL references
+ */
+KNS_EXTERN rc_t CC KStreamAddRef ( const KStream *self );
+KNS_EXTERN rc_t CC KStreamRelease ( const KStream *self );
+
+
+/* Read
+ * read data from stream
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT ] - return parameter giving number of bytes
+ * actually read. when returned value is zero and return code is
+ * also zero, interpreted as end of stream.
+ */
+KNS_EXTERN rc_t CC KStreamRead ( const KStream *self,
+ void *buffer, size_t bsize, size_t *num_read );
+
+/* ReadAll
+ * read from stream until "bsize" bytes have been retrieved
+ * or until end-of-input
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT ] - return parameter giving number of bytes
+ * actually read. when returned value is zero and return code is
+ * also zero, interpreted as end of stream.
+ */
+KNS_EXTERN rc_t CC KStreamReadAll ( const KStream *self,
+ void *buffer, size_t bsize, size_t *num_read );
+
+
+/* Write
+ * send data to stream
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ */
+KNS_EXTERN rc_t CC KStreamWrite ( KStream *self,
+ const void *buffer, size_t size, size_t *num_writ );
+
+/* WriteAll
+ * write to stream until "size" bytes have been transferred
+ * or until no further progress can be made
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ */
+KNS_EXTERN rc_t CC KStreamWriteAll ( KStream *self,
+ const void *buffer, size_t size, size_t *num_writ );
+
+
+/* MakeStdIn
+ * creates a read-only stream on stdin
+ */
+KNS_EXTERN rc_t CC KStreamMakeStdIn ( const KStream **std_in );
+
+/* MakeStdOut
+ * MakeStdErr
+ * creates a write-only stream on stdout or stderr
+ */
+KNS_EXTERN rc_t CC KStreamMakeStdOut ( KStream **std_out );
+KNS_EXTERN rc_t CC KStreamMakeStdErr ( KStream **std_err );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kns_stream_ */
diff --git a/interfaces/kns/url-fetcher.h b/interfaces/kns/url-fetcher.h
new file mode 100644
index 0000000..36ac6a7
--- /dev/null
+++ b/interfaces/kns/url-fetcher.h
@@ -0,0 +1,66 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_url_fetcher_
+#define _h_url_fetcher_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * KUrlFetcher
+ * a generic way of fetching data from a url
+ */
+typedef struct KUrlFetcher KUrlFetcher;
+
+/* AddRef
+ * Release
+ * ignores NULL references
+ */
+KNS_EXTERN rc_t CC KUrlFetcherAddRef ( const KUrlFetcher *self );
+KNS_EXTERN rc_t CC KUrlFetcherRelease ( const KUrlFetcher *self );
+
+KNS_EXTERN rc_t CC KUrlFetcherRead( KUrlFetcher *self, const char *uri,
+ void *dst, size_t to_read, size_t *num_read );
+
+/* this typedef has to stay here for the virtual interface to work...*/
+typedef struct KUrlFetcherCurl KUrlFetcherCurl;
+
+KNS_EXTERN rc_t CC KUrlFetcherCurlMake( KUrlFetcher **fetcher, const bool verbose );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/interfaces/kproc/impl.h b/interfaces/kproc/impl.h
new file mode 100644
index 0000000..4d99b04
--- /dev/null
+++ b/interfaces/kproc/impl.h
@@ -0,0 +1,104 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kproc_impl_
+#define _h_kproc_impl_
+
+#ifndef _h_kproc_extern_
+#include <kproc/extern.h>
+#endif
+
+#ifndef _h_kproc_task_
+#include <kproc/task.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef union KTask_vt KTask_vt;
+
+
+/*--------------------------------------------------------------------------
+ * KTask
+ * a deferred task abstraction
+ * specific task objects are constructed with required parameters
+ * and implement the Execute method to perform their operation
+ */
+struct KTask
+{
+ const KTask_vt *vt;
+ KRefcount refcount;
+ uint8_t align [ 4 ];
+};
+
+#ifndef KTASK_IMPL
+#define KTASK_IMPL struct KTask
+#endif
+
+typedef struct KTask_vt_v1 KTask_vt_v1;
+struct KTask_vt_v1
+{
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+ rc_t ( CC * destroy ) ( KTASK_IMPL *self );
+ rc_t ( CC * execute ) ( KTASK_IMPL * self );
+ /* end minor version == 0 */
+};
+
+union KTask_vt
+{
+ KTask_vt_v1 v1;
+};
+
+/* Init
+ * initialize a newly allocated task object
+ */
+KPROC_EXTERN rc_t CC KTaskInit ( KTask *self, const KTask_vt *vt, const char *clsname, const char *name );
+
+
+/* Destroy
+ * destroy task
+ */
+KPROC_EXTERN rc_t CC KTaskDestroy ( KTask *self, const char *clsname );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kproc_impl_ */
diff --git a/interfaces/kproc/procmgr.h b/interfaces/kproc/procmgr.h
new file mode 100644
index 0000000..d0b0a44
--- /dev/null
+++ b/interfaces/kproc/procmgr.h
@@ -0,0 +1,115 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kproc_procmgr_
+#define _h_kproc_procmgr_
+
+#ifndef _h_kproc_extern_
+#include <kproc/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KTask;
+struct KTaskTicket;
+
+
+/*--------------------------------------------------------------------------
+ * KProcMgr
+ */
+typedef struct KProcMgr KProcMgr;
+
+
+/* Init
+ * initialize the proc mgr
+ * creates the singleton object
+ */
+KPROC_EXTERN rc_t CC KProcMgrInit ( void );
+
+/* Whack
+ * tear down proc mgr
+ * runs any outstanding cleanup tasks
+ * deletes the singleton object
+ * intended to be called from an "atexit()" or similar task
+ */
+KPROC_EXTERN rc_t CC KProcMgrWhack ( void );
+
+
+/* MakeSingleton
+ * access singleton process manager
+ * returns a new reference
+ * or an error code if not initialized
+ * VDB-2 ONLY
+ */
+KPROC_EXTERN rc_t CC KProcMgrMakeSingleton ( KProcMgr ** mgr );
+
+
+/* AddRef
+ * Release
+ * here to support refcounting API
+ * not generally useful in that the proc mgr
+ * will stay around until process exit
+ */
+KPROC_EXTERN rc_t CC KProcMgrAddRef ( const KProcMgr *self );
+KPROC_EXTERN rc_t CC KProcMgrRelease ( const KProcMgr *self );
+
+
+/* AddCleanupTask
+ * add a task to be performed at process exit time
+ *
+ * "ticket" [ OUT ] - an id that can be used later to remove task
+ *
+ * "task" [ IN ] - task object that will be executed at process
+ * exit, unless previously removed ( see RemoveCleanupTask ).
+ * NB - a new reference to "task" will be created
+ */
+KPROC_EXTERN rc_t CC KProcMgrAddCleanupTask ( KProcMgr *self,
+ struct KTaskTicket *ticket, struct KTask *task );
+
+
+/* RemoveCleanupTask
+ * remove a task from exit queue
+ * releases reference to task object
+ * returns an rcNotFound code if task no longer exists
+ */
+KPROC_EXTERN rc_t CC KProcMgrRemoveCleanupTask ( KProcMgr *self,
+ struct KTaskTicket const *ticket );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kproc_procmgr_ */
diff --git a/interfaces/kproc/q-extern.h b/interfaces/kproc/q-extern.h
index cb2c74c..96f01d4 100644
--- a/interfaces/kproc/q-extern.h
+++ b/interfaces/kproc/q-extern.h
@@ -25,9 +25,9 @@
*/
#ifndef _h_kproc_q_extern_
-#define _h_kprocc_q_extern_
+#define _h_kproc_q_extern_
-#if ! defined EXPORT_LATCH && defined _LIBRARY
+#if ! defined EXPORT_LATCH && _LIBRARY
#define KQ_EXTERN LIB_EXPORT
#define EXPORT_LATCH 1
#else
diff --git a/interfaces/kproc/queue.h b/interfaces/kproc/queue.h
index 3a7f927..e1d5bca 100644
--- a/interfaces/kproc/queue.h
+++ b/interfaces/kproc/queue.h
@@ -31,7 +31,7 @@
#include <klib/defs.h>
#endif
-#include <kproc/extern.h>
+#include <kproc/q-extern.h>
#ifdef __cplusplus
extern "C" {
diff --git a/interfaces/kproc/sem.h b/interfaces/kproc/sem.h
index ce10440..32ee405 100644
--- a/interfaces/kproc/sem.h
+++ b/interfaces/kproc/sem.h
@@ -80,6 +80,14 @@ KPROC_EXTERN rc_t CC KSemaphoreTimedWait ( KSemaphore *self,
struct KLock *lock, struct timeout_t *tm );
+/* Cancel
+ * signal that the count will never increase
+ *
+ * NB - external lock used for synchronization must be locked by current thread
+ */
+KPROC_EXTERN rc_t CC KSemaphoreCancel ( KSemaphore *self );
+
+
/* Signal
* signal that a count has become available
*
diff --git a/interfaces/kproc/task.h b/interfaces/kproc/task.h
new file mode 100644
index 0000000..5e49547
--- /dev/null
+++ b/interfaces/kproc/task.h
@@ -0,0 +1,83 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kproc_task_
+#define _h_kproc_task_
+
+#ifndef _h_kproc_extern_
+#include <kproc/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+
+/*--------------------------------------------------------------------------
+ * KTask
+ * a deferred task abstraction
+ * specific task objects are constructed with required parameters
+ * and implement the Execute method to perform their operation
+ */
+typedef struct KTask KTask;
+
+
+/* AddRef
+ * Release
+ */
+KPROC_EXTERN rc_t CC KTaskAddRef ( const KTask *self );
+KPROC_EXTERN rc_t CC KTaskRelease ( const KTask *self );
+KPROC_EXTERN rc_t CC KTaskDestroy ( KTask *self, const char *clsname );
+
+/* Execute
+ * perform deferred operation
+ */
+KPROC_EXTERN rc_t CC KTaskExecute ( KTask *self );
+
+/*--------------------------------------------------------------------------
+ * KTaskTicket
+ * an opaque object holding task identification
+ */
+typedef struct KTaskTicket KTaskTicket;
+struct KTaskTicket
+{
+ uint64_t info [ 2 ];
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kproc_task_ */
diff --git a/interfaces/kproc/timeout.h b/interfaces/kproc/timeout.h
new file mode 100644
index 0000000..017f1a3
--- /dev/null
+++ b/interfaces/kproc/timeout.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kproc_timeout_
+#define _h_kproc_timeout_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifndef _h_kproc_extern_
+#include <kproc/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * system specific timeout object
+ */
+typedef struct timeout_t timeout_t;
+
+
+/* Init
+ * initialize a timeout in milliseconds
+ */
+KPROC_EXTERN rc_t CC TimeoutInit ( timeout_t *tm, uint32_t msec );
+
+
+/* Prepare
+ * ensures that a timeout is prepared with an absolute value
+*/
+KPROC_EXTERN rc_t CC TimeoutPrepare ( timeout_t *tm );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kproc_timeout_ */
diff --git a/interfaces/krypto/cipher-impl.h b/interfaces/krypto/cipher-impl.h
new file mode 100644
index 0000000..02214d4
--- /dev/null
+++ b/interfaces/krypto/cipher-impl.h
@@ -0,0 +1 @@
+#error "OBSOLETE do not use"
diff --git a/interfaces/krypto/cipher-priv.h b/interfaces/krypto/cipher-priv.h
new file mode 100644
index 0000000..328ba6d
--- /dev/null
+++ b/interfaces/krypto/cipher-priv.h
@@ -0,0 +1 @@
+#error "Obsolete do not use"
diff --git a/interfaces/krypto/cipher-test.h b/interfaces/krypto/cipher-test.h
new file mode 100644
index 0000000..f123525
--- /dev/null
+++ b/interfaces/krypto/cipher-test.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_cipher_test_
+#define _h_krypto_cipher_test_
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include <krypto/ciphermgr.h>
+
+KRYPTO_EXTERN rc_t KCipherTestVecAesNiMake (struct KCipher ** new_cipher,
+ kcipher_type type);
+KRYPTO_EXTERN rc_t KCipherTestVecRegMake (struct KCipher ** new_cipher,
+ kcipher_type type);
+KRYPTO_EXTERN rc_t KCipherTestVecMake (struct KCipher ** new_cipher,
+ kcipher_type type);
+KRYPTO_EXTERN rc_t KCipherTestByteMake (struct KCipher ** new_cipher,
+ kcipher_type type);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_cipher_test_ */
diff --git a/interfaces/krypto/cipher.h b/interfaces/krypto/cipher.h
new file mode 100644
index 0000000..2f22733
--- /dev/null
+++ b/interfaces/krypto/cipher.h
@@ -0,0 +1,208 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_cipher_
+#define _h_krypto_cipher_
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+typedef struct KCipher KCipher;
+
+KRYPTO_EXTERN
+rc_t CC KCipherAddref (const KCipher * self);
+
+KRYPTO_EXTERN rc_t CC KCipherRelease (const KCipher * self);
+
+KRYPTO_EXTERN rc_t CC KCipherBlockSize (const KCipher * self, size_t * bytes);
+
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptKey (KCipher * self,
+ const void * user_key,
+ size_t user_key_size);
+
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptKey (KCipher * self,
+ const void * user_key,
+ size_t user_key_size);
+
+/*
+ * Set the ivec (Initialization vector or feedback) for the cipher
+ * this is done automatically for the longer runs defined below.
+ *
+ * the size of ivec must match KCipherBlockSize
+ *
+ * the ivec is copied into the cipher not used in place
+ */
+KRYPTO_EXTERN
+ rc_t CC KCipherSetEncryptIVec (KCipher * self, const void * ivec);
+
+KRYPTO_EXTERN
+ rc_t CC KCipherSetDecryptIVec (KCipher * self, const void * ivec);
+
+
+typedef void (*cipher_ctr_func)(void * ivec);
+
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptCtrFunc (KCipher * self, cipher_ctr_func func);
+
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptCtrFunc (KCipher * self, cipher_ctr_func func);
+
+/*
+ * 'in' can equal 'out'
+ */
+KRYPTO_EXTERN rc_t CC KCipherEncrypt (KCipher * self, const void * in, void * out);
+
+KRYPTO_EXTERN rc_t CC KCipherDecrypt (KCipher * self, const void * in, void * out);
+
+
+/* ====================
+ * longer runs of multiple blocks.
+ *
+ * The algorithms are well defined and standard in most cases.
+ *
+ * PT: plain text block
+ * CT: cipher text block
+ * EK: encryption key
+ * DK: decryption key (might be sthe same as EK)
+ * ENC: encrypt cipher function on a block using a key
+ * DEC: decrypt cipher function on a block using a key
+ * IV: initialization vector - used as feedback for chaining
+ * N: number used once (nonce)
+ * FB: feedback is the next IV in a chained/feedback mode
+ */
+
+/* -----
+ * NOTE:
+ * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ * time is written. The code does not look for overlaps at this point.
+ */
+
+/* ----------
+ * Electronic Code Book - simple cipher with no chaining feedback just iterate
+ * simple encrypt/decrypt with the plain, text, cipher text and key/
+ *
+ * CT = ENC (PT,EK)
+ * PT = DEC (CT,DK)
+ */
+
+/* -----
+ * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ * size. Changing MAX_BLOCK_SIZE in cipher.c can up that limit without
+ * causing any other compatibility issues.
+ *
+ * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ */
+KRYPTO_EXTERN rc_t CC KCipherEncryptECB (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+KRYPTO_EXTERN rc_t CC KCipherDecryptECB (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+/* ----------
+ * Cipher-Block Chaining
+ * CT = (FB = ENC (PT^IV, EK))
+ * PT = DEC ((FB = CT), DK)
+ *
+ */
+KRYPTO_EXTERN rc_t CC KCipherEncryptCBC (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+KRYPTO_EXTERN rc_t CC KCipherDecryptCBC (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+/* ----------
+ * Propagating cipher-block chaining
+ * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ */
+
+/* not yet implemented */
+
+/* ----------
+ * Cipher Feedback
+ * CT = (FB = PT) ^ ENC (IV, EK))
+ * PT = (FB = CT) ^ ENC (IV, DK)
+ *
+ * NOTE the use of the encrypt function for decryption
+ *
+ * Not implemented as the openssl does something different
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherEncryptCFB (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+KRYPTO_EXTERN
+rc_t CC KCipherDecryptCFB (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+KRYPTO_EXTERN
+rc_t CC KCipherEncryptPCFB (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+KRYPTO_EXTERN
+rc_t CC KCipherDecryptPCFB (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+/* ----------
+ * Output Feedback
+ * CT = PT ^ (FB = ENC (IV, EK))
+ * PT = CT ^ (FB = ENC (IV, DK))
+ *
+ * NOTE the use of the encrypt function for decryption
+ *
+ * Not implemented as the openssl does something different
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherEncryptOFB (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+KRYPTO_EXTERN
+rc_t CC KCipherDecryptOFB (KCipher * self, const void * in, void * out,
+ uint32_t block_count);
+
+/* ----------
+ * Counter
+ * IV is a nonce and not re-used as FB
+ * CT = PT ^ ENC (N, EK)
+ * PT = CT ^ ENC (N, DK)
+ *
+ * NOTE the use of the encrypt function for decryption
+ *
+ * nonce is a function that given an iv generates the next iv
+ *
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherEncryptCTR (KCipher * self, const void * in,
+ void * out, uint32_t block_count);
+KRYPTO_EXTERN
+rc_t CC KCipherDecryptCTR (KCipher * self, const void * in,
+ void * out, uint32_t block_count);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_cipher_ */
diff --git a/interfaces/krypto/ciphermgr-priv.h b/interfaces/krypto/ciphermgr-priv.h
new file mode 100644
index 0000000..943e067
--- /dev/null
+++ b/interfaces/krypto/ciphermgr-priv.h
@@ -0,0 +1,38 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* #ifndef _h_krypto_manager_priv_ */
diff --git a/interfaces/krypto/ciphermgr.h b/interfaces/krypto/ciphermgr.h
new file mode 100644
index 0000000..2534400
--- /dev/null
+++ b/interfaces/krypto/ciphermgr.h
@@ -0,0 +1,98 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_krypto_manager_
+#define _h_krypto_manager_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* enabled/disable a set of in-house clean;y written aes ciphers. some optimize
+ * for certain c processors */
+
+#define USE_NCBI_AES 1
+
+
+/*--------------------------------------------------------------------------
+ * KCipherManager
+ */
+struct KCipher;
+
+typedef struct KCipherManager KCipherManager;
+
+/* AddRef
+ * Release
+ * ignores NULL references
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherManagerAddRef (const KCipherManager *self);
+
+KRYPTO_EXTERN
+rc_t CC KCipherManagerRelease (const KCipherManager *self);
+
+
+/* MakeCipher
+ */
+typedef uint32_t kcipher_type;
+enum
+{
+ kcipher_null, /* no encryption = just a copy */
+ kcipher_AES,
+ kcipher_count
+};
+
+
+KRYPTO_EXTERN
+rc_t CC KCipherManagerMakeCipher (const KCipherManager * self,
+ struct KCipher ** cipher,
+ kcipher_type type);
+
+/* Make
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherManagerMake (KCipherManager ** pmanager);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_manager_ */
diff --git a/interfaces/krypto/encfile-priv.h b/interfaces/krypto/encfile-priv.h
new file mode 100644
index 0000000..79d2fd1
--- /dev/null
+++ b/interfaces/krypto/encfile-priv.h
@@ -0,0 +1,250 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_encfile_priv_
+#define _h_krypto_encfile_priv_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <krypto/encfile.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DEBUG_STS(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_STS),msg)
+#define DEBUG_CFG(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_CFG_,msg)
+#define DEBUG_ENCRYPT(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_ENCRYPT),msg)
+#define DEBUG_DECRYPT(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_DECRYPT),msg)
+
+/* -----
+ * Encrypted file structure:
+ * - File Header
+ * - zero or more data blocks
+ * - file footer
+ *
+ * File Header:
+ * - file signature "NCBInenc"
+ * - byte order flag
+ * - version
+ *
+ * Data Block:
+ * - rkey - randomly generated 32 byte key for this block (encrypted using user key)
+ * - encrypted block of 32768 bytes size above says how many are really used (encrypted using rkey and salt above)
+ * - block-offset + (valid bytes in block % 32768)
+ * - crc-32 (includes phantom block start offset as initial seed)
+ *
+ * File Footer:
+ * - footer signature "foot"
+ * - checksum of crcs
+ */
+
+
+/* ----------------------------------------------------------------------
+ * Header - the file header
+ * all constant values for the first version
+ */
+typedef char KEncFileSig [8];
+typedef uint32_t Endian_t;
+typedef uint32_t KEncFileVersion;
+
+
+typedef struct KEncFileHeader KEncFileHeader;
+struct KEncFileHeader
+{
+ KEncFileSig file_sig; /* "NCBInenc" or "NCBIkenc" */
+ Endian_t byte_order; /* do we byte swap on read? */
+ KEncFileVersion version; /* simple incrementation starting at 1 */
+};
+
+
+/* ----------------------------------------------------------------------
+ * KEncFileBlock
+ * The body of the file is blocks containing a portion of the decrypted
+ * file. These are an ordered sequence with the last block being the
+ * same size as the rest but with only some of the data portion being
+ * a part of the file.
+ *
+ * An crypted file is longer than an unencrypted file by
+ * a constant: the lengths of the header and the footer
+ * proportinally by the length of the block key and crc
+ */
+
+/* -----
+ * Key the header for an encrypted block
+ *
+ * when initialized the first 38 bytes should be set to random data.
+ * valid is a count of how many bytes in the block are valid data
+ * offset is the offset of this block with in the decrypted file
+ */
+typedef uint8_t KEncFileKey [32];
+
+
+/* -----
+ * We sized the data portion of a block to match the KPageFile
+ * structure allowing a KBufFile in front of a KEncFile to
+ * operate in a fairly efficient manner
+ */
+#define ENC_DATA_BLOCK_SIZE (32*1024)
+typedef uint8_t KEncFileData [ENC_DATA_BLOCK_SIZE];
+
+typedef uint16_t KEncFileOffValid;
+
+typedef uint64_t KEncFileBlockId;
+typedef uint16_t KEncFileBlockValid;
+
+/* -----
+ * we use the same 32 bit CRC as the rest of the project
+ */
+typedef uint32_t KEncFileCRC;
+
+
+/*
+ * NOTE:
+ * The size of data + u + id + crc + crc_copy must remain divisible
+ * by the size of key
+ */
+typedef struct KEncFileBlock KEncFileBlock;
+struct KEncFileBlock
+{
+ KEncFileKey key; /* encrypted with the user key */
+ KEncFileData data; /* encrypted with block key */
+ union
+ {
+ KEncFileBlockValid valid; /* obscured and encrypted */
+ uint8_t bytes [16]; /* mostly fill */
+ } u;
+ KEncFileBlockId id; /* plain text */
+ KEncFileCRC crc; /* plain text */
+ KEncFileCRC crc_copy; /* plain text */
+};
+
+
+/* ----------------------------------------------------------------------
+ * Foot - the ending of an encrypted file:
+ * these are in plan text for non-decryption validation of the whole file
+ *
+ * In Version 1 the crc_checksum is required.
+ * In Version 2 the crc_checksum is optional - if 0 it is not computed.
+ */
+typedef uint64_t KEncFileFooter_t;
+typedef struct KEncFileFooter KEncFileFooter;
+struct KEncFileFooter
+{
+ KEncFileFooter_t block_count; /* how many blocks do we have? */
+ KEncFileFooter_t crc_checksum; /* sum of crcs of all blocks */
+};
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeRead_v1 (const struct KFile ** pself,
+ const struct KFile * encrypted_input,
+ const struct KKey * key);
+
+KRYPTO_EXTERN rc_t CC KEncFileMakeRead_v2 (const struct KFile ** pself,
+ const struct KFile * encrypted_input,
+ const struct KKey * key);
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through from the
+ * first byte to the last.
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeWrite_v1 (struct KFile ** pself,
+ struct KFile * encrypted_output,
+ const struct KKey * key);
+
+KRYPTO_EXTERN rc_t CC KEncFileMakeWrite_v2 (struct KFile ** pself,
+ struct KFile * encrypted_output,
+ const struct KKey * key);
+
+
+/* ----------
+ * Update mode is read/write mode where seeking within the file is allowed.
+ *
+ * NOTE this is in the private interface because it is not actually working
+ * yet.
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeUpdate_v1 (struct KFile ** pself,
+ struct KFile * encrypted,
+ const struct KKey * key);
+
+KRYPTO_EXTERN rc_t CC KEncFileMakeUpdate_v2 (struct KFile ** pself,
+ struct KFile * encrypted,
+ const struct KKey * key);
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ */
+KRYPTO_EXTERN rc_t CC KEncFileValidate_v1 (const struct KFile * encrypted);
+
+KRYPTO_EXTERN rc_t CC KEncFileValidate_v2 (const struct KFile * encrypted);
+
+
+/* ----------
+ * Identify whether a file is a KEncFile type encrypted file by the header.
+ * read the header into a buffer and pass it into this function.
+ * The buffer_size needs to be at least 8 but more bytes lead to a better
+ * check up to the size of the header of a KEncFile type encrypted file.
+ * As the header may change in the future (in a backwards compatible way)
+ * that size might change from the current 16.
+ *
+ * Possible returns:
+ * 0:
+ * the file is an identified KEncFile type file. False positives are
+ * possible if a file happens to match at 8 or more bytes
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ * the file is definitely not a KEncFIle type encrypted file.
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ * bad parameters in the call
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ * not a large enough buffer to make an identification
+ */
+KRYPTO_EXTERN rc_t CC KFileIsEnc_v1 (const char * buffer, size_t buffer_size);
+
+KRYPTO_EXTERN rc_t CC KFileIsEnc_v2 (const char * buffer, size_t buffer_size);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_encfile_priv_ */
diff --git a/interfaces/krypto/encfile.h b/interfaces/krypto/encfile.h
new file mode 100644
index 0000000..df8efe1
--- /dev/null
+++ b/interfaces/krypto/encfile.h
@@ -0,0 +1,134 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*
+ * This needs to be changed to true in about the middle of summer 2013
+ *
+ * When re-enabling this feature also fix test/kreypto/Makefile
+ */
+#define SENC_IS_NENC_FOR_WRITER 0
+
+
+#ifndef _h_krypto_encfile_
+#define _h_krypto_encfile_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct KFile;
+struct KKey;
+
+typedef struct KEncFile KEncFile;
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ *
+ * One difference between update and read mode is the handling of
+ * "missing blocks". Open for update will read a missing block as all
+ * zero while
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeRead (const struct KFile ** pself,
+ const struct KFile * encrypted_input,
+ const struct KKey * key);
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through from the
+ * first byte to the last.
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeWrite (struct KFile ** pself,
+ struct KFile * encrypted_output,
+ const struct KKey * key);
+
+
+/* ----------
+ * Update mode is read/write mode where seeking within the file is allowed.
+ *
+ * One difference between update and read mode is the handling of
+ * "missing blocks". Open for update will read a missing block as all
+ * zero while
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeUpdate (struct KFile ** pself,
+ struct KFile * encrypted,
+ const struct KKey * key);
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ */
+KRYPTO_EXTERN rc_t CC KEncFileValidate (const struct KFile * encrypted);
+
+
+/* ----------
+ * Identify whether a file is a KEncFile type encrypted file by the header.
+ * read the header into a buffer and pass it into this function.
+ * The buffer_size needs to be at least 8 but more bytes lead to a better
+ * check up to the size of the header of a KEncFile type encrypted file.
+ * As the header may change in the future (in a backwards compatible way)
+ * that size might change from the current 16.
+ *
+ * Possible returns:
+ * 0:
+ * the file is an identified KEncFile type file. False positives are
+ * possible if a file happens to match at 8 or more bytes
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ * the file is definitely not a KEncFIle type encrypted file.
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ * bad parameters in the call
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ * not a large enough buffer to make an identification
+ */
+
+/* requires NCBInenc or NCBIsenc or signature but if available
+ * checks the byte order and version fields
+ */
+KRYPTO_EXTERN rc_t CC KFileIsEnc (const char * buffer, size_t buffer_size);
+
+/* same as above but requires NCBIsenc signature only */
+KRYPTO_EXTERN rc_t CC KFileIsSraEnc (const char * buffer, size_t buffer_size);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_encfile_ */
diff --git a/interfaces/krypto/extern.h b/interfaces/krypto/extern.h
new file mode 100644
index 0000000..4663585
--- /dev/null
+++ b/interfaces/krypto/extern.h
@@ -0,0 +1,66 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_extern_
+#define _h_krypto_extern_
+
+#ifndef _h_klib_callconv_
+#include <klib/callconv.h>
+#endif
+
+#if ! defined EXPORT_LATCH && _LIBRARY
+
+#define KRYPTO_EXTERN LIB_EXPORT
+#define KRYPTO_EXTERN_DATA extern LIB_EXPORT
+#define EXPORT_LATCH 1
+
+#else
+
+#define KRYPTO_EXTERN LIB_IMPORT
+#define KRYPTO_EXTERN_DATA LIB_IMPORT
+
+#endif
+
+#if defined _MSC_VER && ! _STATIC
+
+/* __declspec ( dllimport ) will cause creation of
+ function pointers rather than thunks, which makes
+ the code that imports unable to link statically
+ against a library. we leave this symbol defined as
+ "extern" to use thunks instead. as a result, all
+ function addresses resolve to the thunk and not
+ the actual function. */
+#define LIB_IMPORT extern
+#define LIB_EXPORT __declspec ( dllexport )
+
+#else
+
+#define LIB_IMPORT extern
+#define LIB_EXPORT
+
+#endif
+
+#endif /* _h_krypto_extern_ */
diff --git a/interfaces/krypto/key.h b/interfaces/krypto/key.h
new file mode 100644
index 0000000..f170d7d
--- /dev/null
+++ b/interfaces/krypto/key.h
@@ -0,0 +1,103 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_key_
+#define _h_kfs_key_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct KKey KKey;
+
+
+typedef uint32_t KKeyType;
+enum eKKeyType
+{
+ kkeyNone,
+ kkeyAES128,
+ kkeyAES192,
+ kkeyAES256,
+ kkeyTypeCount
+};
+
+#define KKeyTypeDefault (kkeyAES128)
+
+struct KKey
+{
+ KKeyType type;
+ uint8_t text [32]; /* might be more, might be less */
+};
+
+enum eKKeySize
+{
+ kkeyMinimumSize = 6
+};
+
+KRYPTO_EXTERN_DATA KKey KKeyEncrypt;
+KRYPTO_EXTERN_DATA KKey KKeyDecrypt;
+
+/* WGA ncryption passwords are only significant to 32 characters */
+#define WGA_MAX_PASSWORD (32)
+KRYPTO_EXTERN_DATA char WGAEncryptPassword[WGA_MAX_PASSWORD];
+KRYPTO_EXTERN_DATA char WGADecryptPassword[WGA_MAX_PASSWORD];
+
+typedef char KryptoKeyMapNCBI [32*2];
+typedef char KryptoKeyMapWGA [2 + 32*2];
+typedef char KryptoKeyMap [(2*sizeof(KryptoKeyMapNCBI))+(2*sizeof(KryptoKeyMapWGA))+1];
+enum
+{
+ KryptoKeyMapEncrypt = 0,
+ KryptoKeyMapDecrypt = sizeof(KryptoKeyMapNCBI),
+ KryptoKeyMapWGAEncrypt = KryptoKeyMapDecrypt + sizeof(KryptoKeyMapNCBI),
+ KryptoKeyMapWGADecrypt = KryptoKeyMapWGAEncrypt + sizeof(KryptoKeyMapWGA),
+ KryptoKeyMapNul = KryptoKeyMapWGADecrypt + sizeof(KryptoKeyMapWGA)
+};
+
+KRYPTO_EXTERN rc_t CC KKeyInitRead (KKey * self, KKeyType key_type,
+ const void * password, size_t password_size);
+
+KRYPTO_EXTERN rc_t CC KKeyInitUpdate (KKey * key, KKeyType key_type,
+ const void * password, size_t password_size);
+
+
+#define FAIL_SHORT_PASSWORD (false)
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_key_ */
diff --git a/interfaces/krypto/manager-priv.h b/interfaces/krypto/manager-priv.h
new file mode 100644
index 0000000..f2f3346
--- /dev/null
+++ b/interfaces/krypto/manager-priv.h
@@ -0,0 +1,26 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#error "OBSOLETE do not use"
diff --git a/interfaces/krypto/manager.h b/interfaces/krypto/manager.h
new file mode 100644
index 0000000..0581659
--- /dev/null
+++ b/interfaces/krypto/manager.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_manager_
+#define _h_krypto_manager_
+
+
+DO NOT USE
+
+#endif /* _h_krypto_manager_ */
diff --git a/interfaces/krypto/reencfile.h b/interfaces/krypto/reencfile.h
new file mode 100644
index 0000000..02d4894
--- /dev/null
+++ b/interfaces/krypto/reencfile.h
@@ -0,0 +1,91 @@
+
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_reencfile_
+#define _h_krypto_reencfile_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Currently only the read version is implmented
+ */
+#define REENCFILE_WRITE_SUPPORTED 0
+/*
+ * Currently the input encrypted KFile must respond to KFileSize
+ * with the size of the encrypted file.
+ */
+#define REENCFILE_STREAM_SUPPORTED 0
+
+
+struct KFile;
+struct KKey;
+
+typedef struct KReencFile KReencFile;
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+KRYPTO_EXTERN rc_t CC KReencFileMakeRead (const struct KFile ** pself,
+ const struct KFile * encrypted,
+ const struct KKey * deckey,
+ const struct KKey * enckey);
+
+KRYPTO_EXTERN rc_t CC KEncryptFileMakeRead (const struct KFile ** pself,
+ const struct KFile * encrypted,
+ const struct KKey * enckey);
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through form the
+ * first byte to the last.
+ */
+#if REENCFILE_WRITE_SUPPORTED
+KRYPTO_EXTERN rc_t CC KReencFileMakeWrite (struct KFile ** pself,
+ struct KFile * encrypted,
+ const struct KKey * deckey,
+ const struct KKey * enckey);
+#endif
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_reencfile_ */
diff --git a/interfaces/krypto/rng-impl.h b/interfaces/krypto/rng-impl.h
new file mode 100644
index 0000000..96d03fe
--- /dev/null
+++ b/interfaces/krypto/rng-impl.h
@@ -0,0 +1,86 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kryptoimpl_
+#define _h_kryptoimpl_
+
+#include <krypto/extern.h>
+#include <krypto/rng.h>
+#include <klib/refcount.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+typedef union KRng_vt KRng_vt;
+
+struct KRng
+{
+ const union KRng_vt *vt;
+ KRefcount refcount;
+};
+
+#ifndef KRNG_IMPL
+#define KRNG_IMPL KRng
+#endif
+
+typedef struct KRng_vt_v1 KRng_vt_v1;
+struct KRng_vt_v1
+{
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+ rc_t (CC * destroy) (KRNG_IMPL * self);
+ rc_t (CC * seed) (KRNG_IMPL * self);
+ rc_t (CC * reseed) (KRNG_IMPL * self, const void * buff, size_t buff_size);
+ rc_t (CC * read) (const KRNG_IMPL *self, void * buff, uint32_t buff_len,
+ uint32_t * num_read);
+ /* end minor version == 0 */
+ /* start minor version == 1 */
+ /* end minor version == 1 */
+ /* end version == 1.x */
+};
+
+union KRng_vt
+{
+ KRng_vt_v1 v1;
+};
+
+KRYPTO_EXTERN rc_t CC KRngInit (KRng * self, union KRng_vt * vt, const char * type);
+KRYPTO_EXTERN rc_t CC KRngSysEntropy (KRng * self, uint8_t * buffer, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kryptoimpl_ */
diff --git a/interfaces/krypto/rng.h b/interfaces/krypto/rng.h
new file mode 100644
index 0000000..32b0d47
--- /dev/null
+++ b/interfaces/krypto/rng.h
@@ -0,0 +1,68 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_rng_
+#define _h_krypto_rng_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct KRng KRng;
+
+/* attach a new 'ownership' reference */
+KRYPTO_EXTERN rc_t CC KRngAddRef (const KRng * self);
+
+/* release an 'ownership' reference */
+KRYPTO_EXTERN rc_t CC KRngRelease (const KRng * self);
+
+/* call to the system entropy function and [re-]seed the rng */
+KRYPTO_EXTERN rc_t CC KRngSeed (KRng * self);
+
+/* fill a buffer of a given size with random values: type sepcific as to the meaning or size of elements
+ * return the number of elements actually written to the buffer */
+KRYPTO_EXTERN rc_t CC KRngRead (const KRng * self, void * buffer, uint32_t bsize, uint32_t * num_read);
+
+
+/*
+ * Cryptographically secure pseudo-random number generator
+ * elements are 8 bits long
+ */
+KRYPTO_EXTERN rc_t CC KCSPRngMake (KRng ** pself);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_rng_ */
diff --git a/interfaces/krypto/testciphermgr.h b/interfaces/krypto/testciphermgr.h
new file mode 100644
index 0000000..ffaa35a
--- /dev/null
+++ b/interfaces/krypto/testciphermgr.h
@@ -0,0 +1,58 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_krypto_manager_test_
+#define _h_krypto_manager_test_
+
+#include <krypto/ciphermgr.h>
+
+/* MakeCipher
+ */
+typedef int32_t kcipher_subtype;
+enum
+{
+ ksubcipher_none = -1,
+ ksubcipher_byte,
+ ksubcipher_vec,
+ ksubcipher_vecreg,
+ ksubcipher_accelerated, /* for example AES-NI */
+ ksubcipher_count
+};
+
+extern kcipher_subtype KCipherSubType;
+
+
+KRYPTO_EXTERN
+rc_t CC KCipherManagerTestMakeCipher (const KCipherManager * self,
+ struct KCipher ** cipher,
+ kcipher_type type,
+ kcipher_subtype subtype);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_manager_ */
diff --git a/interfaces/krypto/wgaencrypt.h b/interfaces/krypto/wgaencrypt.h
new file mode 100644
index 0000000..b8cfeeb
--- /dev/null
+++ b/interfaces/krypto/wgaencrypt.h
@@ -0,0 +1,128 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_wgaencryptfile_
+#define _h_krypto_wgaencryptfile_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+
+
+/*--------------------------------------------------------------------------
+ * KFile
+ * wga extensions
+ */
+
+/* MakeWGAEncRead
+ *
+ * Parameters:
+ * pself is a KFile that will represent the unencrypted side of operations.
+ *
+ * encrypted is a KFile that will represent the encrypted side of operations.
+ *
+ * key is an arbitrary array of characters
+ *
+ * key_size is how many bytes to use from key. Maximum used is 256.
+ *
+ * encoding is one of the three values defined by FER_ENCODING above. Any
+ * other values will cause a failure.
+ *
+ * KFileMakeWGAEncRead
+ * A file opened for read can only read and decrypt an encrypted file. Seeks
+ * within the file are allowed if the KFile for the encrypted file allows
+ * seeks.
+ *
+ * KFileMakeWGAEncUpdate
+ * A file opened for update must be able to read and write from the encrypted
+ * file. Seeks within the file are allowed if the KFile for the encrypted
+ * file allows seeks.
+ *
+ * KFileMakeWGAEncRead
+ * A Write opened file can only be written. Seeks backwards are not allowed.
+ * Seeks forward will cause NUL data bytes to be inserted before encryption.
+ * An attempt will be made to truncate the encrypted file but failure of that
+ * operation will not fail this call. Writes will begin at position 0. If
+ * the file already existed and could not be truncated a corrupt file will
+ * result if the whole of the old contents are not over-written.
+ *
+ *
+ * NOTE: cipher must be of type kcipherAES
+ *
+ */
+KRYPTO_EXTERN rc_t CC KFileMakeWGAEncRead (const struct KFile ** pself,
+ const struct KFile * encrypted,
+ const char * key,
+ size_t key_size);
+
+
+/* IsWGAEnc
+ * identify whether a file is a KFileWGAEnc type encrypted file by the header.
+ * read the header into a buffer and pass it into this function.
+ * The buffer_size needs to be at least 8 but more bytes lead to a better
+ * check up to the size of the header of a KFileWGAEnc type encrypted file.
+ * This file type is deprecated and is not versioned. Hopefully we won't
+ * have to deal with changes to the format.
+ *
+ * Possible returns:
+ * 0:
+ * the file is an identified KFileWGAEnc type file. False positives are
+ * possible if a file happens to match at 8 or more bytes
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ * the file is definitely not a KFileWGAEnc type encrypted file.
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ * bad parameters in the call
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ * not a large enough buffer to make an identification
+ */
+KRYPTO_EXTERN rc_t CC KFileIsWGAEnc (const void * buffer, size_t buffer_size);
+
+KRYPTO_EXTERN rc_t CC WGAEncValidate (const struct KFile * file,
+ const char * password,
+ size_t password_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_wgaencryptfile_ */
diff --git a/interfaces/ktst/test_tools.hpp b/interfaces/ktst/test_tools.hpp
index 6e7b085..b6644da 100644
--- a/interfaces/ktst/test_tools.hpp
+++ b/interfaces/ktst/test_tools.hpp
@@ -2,6 +2,7 @@
#define _h_ktst_test_tools_
////////////////////////////////////////////////////////////////////////////////
+// these macros are available outside of test cases' code
#define LOG(log_level, msg) \
if (log_level >= ncbi::NK::TestEnv::verbosity) std::cerr << msg
@@ -12,97 +13,7 @@ if (log_level >= ncbi::NK::TestEnv::verbosity) std::cerr << msg
#define TEST_CHECKPOINT(M) TEST_MESSAGE(M)
-#define CHECK(exp) \
- ( (exp) \
- ? report_passed((#exp), __FILE__, __LINE__) \
- : report_error ((#exp), __FILE__, __LINE__) )
-
-/* TODO #define CHECK_MESSAGE(exp, M) \
- std::ostringstream s, s << M, \
- ( (exp) \
- ? report_passed(s.str(),__FILE__,__LINE__) \
- : report_error (s.str(),__FILE__,__LINE__) )*/
-
-#define REQUIRE(exp) \
- ( (exp) \
- ? report_passed ((#exp), __FILE__, __LINE__) \
- : _REPORT_CRITICAL_ERROR_((#exp), __FILE__, __LINE__) )
-
-#define CHECK_CLOSE(left, right, tolerance) \
-( (ncbi::NK::abs((left) - (right)) < (tolerance)) \
-?report_passed_close(#left,#right,(left),(right),(tolerance),__FILE__,__LINE__)\
-: report_error_close(#left,#right,(left),(right),(tolerance), \
- ncbi::NK::abs((left) - (right)), __FILE__, __LINE__) )
-
-#define REQUIRE_CLOSE(left, right, tolerance) \
-( (ncbi::NK::abs((left) - (right)) < (tolerance)) \
-?report_passed_close(#left,#right,(left),(right),(tolerance),__FILE__,__LINE__)\
-: report_error_close(#left,#right,(left),(right),(tolerance), \
- ncbi::NK::abs((left) - (right)), __FILE__, __LINE__, true) )
-
-#define CHECK_EQUAL(e1, e2) \
- ( ((e1) == (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "==", "!=") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "==", "!=") )
-
-#define REQUIRE_EQUAL(e1, e2) \
- ( ((e1) == (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "==", "!=") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "==", "!=", true) )
-
-#define CHECK_GE(e1, e2) \
- ( ((e1) >= (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">=", "<") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">=", "<") )
-
-#define REQUIRE_GE(e1, e2) \
- ( ((e1) >= (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">=", "<") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">=", "<", true) )
-
-#define CHECK_GT(e1, e2) \
- ( ((e1) > (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">", "<=") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">", "<=") )
-
-#define REQUIRE_GT(e1, e2) \
- ( ((e1) > (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">", "<=") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">", "<=", true) )
-
-#define CHECK_LE(e1, e2) \
- ( ((e1) <= (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<=", ">") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<=", ">") )
-
-#define REQUIRE_LE(e1, e2) \
- ( ((e1) <= (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<=", ">") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<=", ">", true) )
-
-#define CHECK_LT(e1, e2) \
- ( ((e1) < (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<", ">=") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<", ">=") )
-
-#define REQUIRE_LT(e1, e2) \
- ( ((e1) < (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<", ">=") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<", ">=", true) )
-
-#define CHECK_NE(e1, e2) \
- ( ((e1) != (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "!=", "==") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "!=", "==") )
-
-#define REQUIRE_NE(e1, e2) \
- ( ((e1) != (e2)) \
- ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "!=", "==") \
- : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "!=", "==", true) )
-
-#define ERROR( msg_ ) \
- report_error( (msg_), __FILE__, __LINE__, true )
-
+// report failure from a fixture
#define FAIL( msg_ ) \
_REPORT_CRITICAL_ERROR_( (msg_), __FILE__, __LINE__, true )
diff --git a/interfaces/ktst/unit_test.hpp b/interfaces/ktst/unit_test.hpp
index c4385e6..1cdbd50 100644
--- a/interfaces/ktst/unit_test.hpp
+++ b/interfaces/ktst/unit_test.hpp
@@ -1,70 +1,249 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
#ifndef _h_ktst_unit_test_
#define _h_ktst_unit_test_
-#include <ktst/test_tools.hpp>
#include <ktst/unit_test_suite.hpp>
-#include <iostream> // cout
-#include <sstream> // ostringstream
-#include <vector>
-#include <cassert>
-#include <csignal> /* sigaction */
-
////////////////////////////////////////////////////////////////////////////////
+namespace ncbi { namespace NK {
-#define FIXTURE_TEST_CASE(test_name, F) \
-namespace ncbi { namespace NK { \
-class C##test_name : public TestCase { \
-public: \
- C##test_name(void* globalFixtute, F* fixture) : TestCase(#test_name) \
- , _globalFixture \
- (static_cast<AUTO_TEST_CASE_FIXTURE*>(globalFixtute)) \
- , _fixture(fixture) {} \
- void test_method(); \
-private: \
- AUTO_TEST_CASE_FIXTURE* GET_GLOBAL_FIXTURE(void) const \
- { return _globalFixture; } \
- F* GET_FIXTURE(void) const { return _fixture; } \
- AUTO_TEST_CASE_FIXTURE* _globalFixture; \
- F* _fixture; \
-}; \
-class C##test_name##Invoker : TestInvoker { \
-public: C##test_name##Invoker(void) : TestInvoker(#test_name) \
-{ GetTestSuite()->Add(this); } \
-private: virtual void Run(void* globalFixtute) { \
- F fixture; \
- C##test_name t(globalFixtute, &fixture); \
- try { \
- t.test_method(); \
- SetErrorCounter(t.GetErrorCounter()); \
- } catch (...) { \
- SetErrorCounter(t.GetErrorCounter()); \
- throw; \
- } \
- } \
-}; \
-static C##test_name##Invoker* _##test_name##instance \
- = new C##test_name##Invoker; \
-} } /* ncbi::NK */ \
-void ncbi::NK::C##test_name::test_method()
+// a utility template used to pass test character string case names to FixtureTestCase
+template<class T>
+struct TestCaseTraits
+{
+ static const char* name;
+};
+
+// create an executable test case class with the given fixture.
+template <class TCaseTraits, class TFixture>
+class FixtureTestCase : public ncbi::NK::TestCase, public TFixture {
+public:
+ typedef TCaseTraits Traits;
+
+ // Represents the global test fixture. Cast to the correct data type in the test code
+ typedef void AUTO_TEST_CASE_FIXTURE;
+
+public:
+ FixtureTestCase(void* globalFixture)
+ : TestCase(TCaseTraits::name), _globalFixture (static_cast<AUTO_TEST_CASE_FIXTURE*>(globalFixture))
+ {
+ }
+
+protected:
+ AUTO_TEST_CASE_FIXTURE* GET_GLOBAL_FIXTURE(void) const { return _globalFixture; }
+ AUTO_TEST_CASE_FIXTURE* _globalFixture;
+
+ const TFixture* GET_FIXTURE(void) const { return this; }
+ TFixture* GET_FIXTURE(void) { return this; }
+};
+// Create an invoker object for a test case with a given fixture.
+// The invoker object is static and registers itself with the global test suite during initialization.
+// When executed, the invoker will instantiate a fixture and a test case object and execute object's test method
+// on the current thread.
+template <class TCase, class TFixture>
+class TestCaseInvoker : ncbi::NK::TestInvoker {
+public:
+ TestCaseInvoker() : TestInvoker(TCase::Traits::name)
+ {
+ ncbi::NK::GetTestSuite()->Add(this);
+ }
+private:
+ virtual void Run(void* globalFixture)
+ {
+ try
+ { // in case constructor throws
+ TCase t(globalFixture);
+ try {
+ t.test_method();
+ SetErrorCounter(t.GetErrorCounter());
+ } catch (...) {
+ SetErrorCounter(t.GetErrorCounter());
+ if (GetErrorCounter() == 0)
+ {
+ SetErrorCounter(1);
+ }
+ throw;
+ }
+ }
+ catch (const execution_aborted&)
+ {
+ SetErrorCounter(1);
+ throw;
+ }
+ catch (const std::exception& ex)
+ {
+ if (!ncbi::NK::TestEnv::lastLocation.empty())
+ {
+ LOG(ncbi::NK::LogLevel::e_fatal_error, ncbi::NK::TestEnv::lastLocation << ": last checkpoint before exception \"" << ex.what() << "\"\n");
+ }
+ SetErrorCounter(1);
+ throw;
+ }
+ catch (...) // a non-framework exception escaped
+ {
+ if (!ncbi::NK::TestEnv::lastLocation.empty())
+ {
+ LOG(ncbi::NK::LogLevel::e_fatal_error, ncbi::NK::TestEnv::lastLocation << ": last checkpoint before an unknown exception\n");
+ }
+ SetErrorCounter(1);
+ throw;
+ }
+ }
+ static TestCaseInvoker instance;
+};
+
+// Create an out-of-thread invoker object for a test case with a given fixture.
+// The invoker object is static and registers itself with the global test suite during initialization.
+// When executed, the invoker will instantiate a fixture and a test case object and execute object's test method
+// as a child process (Unix) or on a separate thread(Windows).
+template <class TCase, class TFixture, int rc, int timeout>
+class ProcessTestCaseInvoker : ncbi::NK::TestInvoker {
+public:
+ ProcessTestCaseInvoker() : TestInvoker(TCase::Traits::name)
+ {
+ ncbi::NK::GetTestSuite()->Add(this);
+ }
+private:
+ virtual void Run(void* globalFixture)
+ {
+ try
+ {
+ TCase t(globalFixture);
+ if (ncbi::NK::TestEnv::RunProcessTestCase(t, (void(ncbi::NK::TestCase::*)())&TCase::test_method, timeout) != rc)
+ {
+ throw ncbi::NK::execution_aborted();
+ }
+ SetErrorCounter(t.GetErrorCounter());
+ }
+ catch (...)
+ {
+ if (GetErrorCounter() == 0)
+ {
+ SetErrorCounter(1);
+ }
+ throw;
+ }
+ }
+};
+
+}} // namespace
+
+// macros to be used to instantiate test cases
+
+// user code should not not use this directly.
+#define DEFINE_TEST_CASE(testcase, F, rc, timeout) \
+ struct testcase { \
+ class dummy{}; \
+ typedef ncbi::NK::FixtureTestCase< ::ncbi::NK::TestCaseTraits<dummy>, F> Case;\
+ struct Instance : public Case { \
+ Instance(void* g) : Case(g){}\
+ void test_method(); } ; \
+ class Invoker : public ::ncbi::NK::TestCaseInvoker<Instance, F> {}; \
+ class ProcessInvoker : public ::ncbi::NK::ProcessTestCaseInvoker<Instance, F, rc, timeout> {}; \
+ };\
+ template<> const char* ::ncbi::NK::TestCaseTraits<testcase::dummy>::name=#testcase;
+
+// define an in-thread test case with a fixture
+#define FIXTURE_TEST_CASE(testcase, F) \
+ DEFINE_TEST_CASE(testcase, F, 0, 0) \
+ static testcase::Invoker testcase##Invoker;\
+ void testcase::Instance::test_method()
+
+// define an in-thread test case without a fixture
#define TEST_CASE(test_name) FIXTURE_TEST_CASE(test_name, ncbi::NK::Empty)
+// define an out-of-thread test case with a fixture, expected exit code, and a timeout (in seconds)
+#define PROCESS_FIXTURE_TEST_CASE(testcase, F, rc, timeout) \
+ DEFINE_TEST_CASE(testcase, F, rc, timeout) \
+ static testcase::ProcessInvoker testcase##Invoker;\
+ void testcase::Instance::test_method()
+
+// define an out-of-thread test case with an expected exit code and a timeout (in seconds), no fixture
+#define PROCESS_TEST_CASE(test_name, rc, timeout) PROCESS_FIXTURE_TEST_CASE(test_name, ncbi::NK::Empty, rc, timeout)
+
+// fix param type
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+#define DECLARE_EXTERN_C_ENTRYPOINTS \
+ extern "C" \
+ { \
+ rc_t CC UsageSummary ( const char *progname ) \
+ { return ncbi::NK::TestEnv::UsageSummary ( progname ); } \
+ \
+ rc_t CC Usage ( const Args *args ) \
+ { return ncbi::NK::TestEnv::Usage ( args ); } \
+ }
+#else
+#define DECLARE_EXTERN_C_ENTRYPOINTS
+#endif
+
+// define a suite of test cases with a global fixture
+// Note: Typed access to global fixture from the test cases' code is not currently implemented
#define FIXTURE_TEST_SUITE( suite_name, F ) \
+DECLARE_EXTERN_C_ENTRYPOINTS \
+typedef F AUTO_TEST_CASE_FIXTURE; \
+int suite_name(int argc, char* argv[]) { \
+ ncbi::NK::TestEnv args(argc, argv); \
+ if (args.catch_system_errors) { \
+ args.set_handlers(); \
+ } \
+ ncbi::NK::counter_t ec = ncbi::NK::Main<AUTO_TEST_CASE_FIXTURE>(argc, argv, #suite_name); \
+ return ec == 0 ? 0 : -ec; /* positive rc represents the signal that killed the process */ \
+}
+
+// define a suite of test cases with a global fixture
+// with callback to handle application command line arguments
+#define FIXTURE_TEST_SUITE_WITH_ARGS_HANDLER( suite_name, F, Handler ) \
+DECLARE_EXTERN_C_ENTRYPOINTS \
typedef F AUTO_TEST_CASE_FIXTURE; \
-int main(int argc, char* argv[]) { \
+int suite_name(int argc, char* argv[]) { \
+ ncbi::NK::TestEnv args(argc, argv, Handler); \
+ if (args.catch_system_errors) { \
+ args.set_handlers(); \
+ } \
+ ncbi::NK::counter_t ec = ncbi::NK::Main<AUTO_TEST_CASE_FIXTURE>(argc, argv, #suite_name); \
+ return ec == 0 ? 0 : -ec; /* positive rc represents the signal that killed the process */ \
+}
+
+// define a suite of test cases with a global fixture; command line parsing, Usage and UsageSummary functions are supplied by the user's code
+#define FIXTURE_TEST_SUITE_WITH_USAGE( suite_name, F ) \
+typedef F AUTO_TEST_CASE_FIXTURE; \
+int suite_name(int argc, char* argv[]) { \
ncbi::NK::TestEnv args(argc, argv); \
if (args.catch_system_errors) { \
args.set_handlers(); \
} \
- ncbi::NK::counter_t ec = \
- ncbi::NK::Main<AUTO_TEST_CASE_FIXTURE>(argc, argv, #suite_name); \
- return ec == 0 ? EXIT_SUCCESS : EXIT_FAILURE; \
-} \
-std::string ncbi::NK::TestEnv::lastLocation; \
-ncbi::NK::LogLevel::E ncbi::NK::TestEnv::verbosity = LogLevel::e_error;
-
-#define TEST_SUITE( suite_name ) \
-FIXTURE_TEST_SUITE(suite_name, ncbi::NK::Empty)
+ ncbi::NK::counter_t ec = ncbi::NK::Main<AUTO_TEST_CASE_FIXTURE>(argc, argv, #suite_name); \
+ return ec == 0 ? 0 : -ec; /* positive rc represents the signal that killed the process */ \
+}
+
+#define TEST_SUITE( suite_name ) FIXTURE_TEST_SUITE(suite_name, ncbi::NK::Empty)
+#define TEST_SUITE_WITH_USAGE( suite_name ) FIXTURE_TEST_SUITE_WITH_USAGE(suite_name, ncbi::NK::Empty)
+#define TEST_SUITE_WITH_ARGS_HANDLER( suite_name, Handler ) FIXTURE_TEST_SUITE_WITH_ARGS_HANDLER(suite_name, ncbi::NK::Empty, Handler)
#endif// _h_ktst_unit_test_
diff --git a/interfaces/ktst/unit_test_suite.hpp b/interfaces/ktst/unit_test_suite.hpp
index e01baaf..0d87c48 100644
--- a/interfaces/ktst/unit_test_suite.hpp
+++ b/interfaces/ktst/unit_test_suite.hpp
@@ -1,13 +1,67 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
#ifndef NCBI_NK_UNIT_TEST__SUITE_HPP
#define NCBI_NK_UNIT_TEST__SUITE_HPP
-#include <iostream> // cerr
-#include <sstream> // ostringstream
+// turn on INT64_C, UINT64_C etc.
+#define __STDC_CONSTANT_MACROS
+#include <klib/defs.h>
+
+#include <string>
#include <vector>
-#include <csignal> // sigaction
#include <cassert>
+#include <iostream>
+
+// it's generally a bad idea to make the test suite rely upon code under test
+#define ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED 0
////////////////////////////////////////////////////////////////////////////////
+// these macros are available outside of test cases' code
+
+#define LOG(log_level, msg) \
+ if (log_level >= ncbi::NK::TestEnv::verbosity) std::cerr << msg
+
+#define TEST_MESSAGE(M) \
+{ ncbi::NK::saveLocation(__FILE__,__LINE__); \
+ LOG(ncbi::NK::LogLevel::e_message, M << std::endl); }
+
+#define TEST_CHECKPOINT(M) TEST_MESSAGE(M)
+
+// report failure from a fixture
+#define FAIL( msg_ ) \
+ ncbi::NK::_REPORT_CRITICAL_ERROR_( (msg_), __FILE__, __LINE__, true )
+
+#define GET_TEST_SUITE ncbi::NK::GetTestSuite
+
+////////////////////////////////////////////////////////////////////////////////
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+struct Args;
+#endif
namespace ncbi { namespace NK {
@@ -31,196 +85,79 @@ public:
};
};
+extern void saveLocation(const char* file, int line);
+extern void _REPORT_CRITICAL_ERROR_(const std::string& msg, const char* file, int line, bool is_msg);
+
template<class T> const T abs(const T& a) { return a >= 0 ? a : -a; }
+class TestCase;
+
class TestEnv {
public:
- TestEnv(int argc, char* argv[]) : catch_system_errors(true) {
- process_args(argc, argv);
- }
+ typedef rc_t ArgsHandler(int argc, char* argv[]);
- void set_handlers(void) {
- struct sigaction act;
- memset(&act, 0, sizeof act);
- act.sa_handler = SigHandler;
- act.sa_flags = SA_RESETHAND;
- int status = sigaction(SIGFPE , &act, NULL);
- status = sigaction(SIGILL , &act, NULL);
- status = sigaction(SIGSEGV, &act, NULL);
- }
+ TestEnv(int argc, char* argv[], ArgsHandler *argsHandler = NULL);
+ ~TestEnv(void);
+
+ static void set_handlers(void);
static std::string lastLocation;
static LogLevel::E verbosity;
bool catch_system_errors;
+ static int RunProcessTestCase(TestCase&, void(TestCase::*)(), int);
+ static unsigned int Sleep(unsigned int seconds);
+
+ static const int TEST_CASE_TIMED_OUT=14;
+ static const int TEST_CASE_FAILED=255;
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+ static struct Args* GetArgs() { return args; }
+#endif
+
+ static rc_t UsageSummary(const char* progname);
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+ static rc_t Usage(const Args* args);
+#else
+ static rc_t Usage(const char *progname);
+#endif
+
private:
- static void SigHandler(int sig) {
- switch (sig) {
- case SIGFPE:
- LOG(ncbi::NK::LogLevel::e_fatal_error,
- "fatal error: signal: SIGFPE(Floating point exception)\n");
- break;
- case SIGILL:
- LOG(ncbi::NK::LogLevel::e_fatal_error,
- "fatal error: signal: SIGILL(Illegal instruction)\n");
- break;
- case SIGSEGV:
- LOG(ncbi::NK::LogLevel::e_fatal_error,
- "fatal error: signal: SIGSEGV(Segmentation fault)\n");
- break;
- default:
- LOG(ncbi::NK::LogLevel::e_fatal_error,
- "fatal error: signal: " << sig << "\n");
- break;
- }
- if (!ncbi::NK::TestEnv::lastLocation.empty()) {
- LOG(ncbi::NK::LogLevel::e_fatal_error,
- ncbi::NK::TestEnv::lastLocation << ": last checkpoint\n");
- }
- LOG(ncbi::NK::LogLevel::e_fatal_error, "Test is aborted\n");
- exit(1);
- }
+ static void TermHandler();
- void process_args(int argc, char* argv[]) {
- bool debug = false;
- LogLevel::E detected = LogLevel::e_undefined;
- char arg_catch_system_errors[] = "-catch_system_errors=";
- char arg_log_level [] = "-l=";
- for (int i = 1; i < argc; ++i) {
- if (strncmp(argv[i], arg_log_level, strlen(arg_log_level))
- == 0)
- {
- char* a = argv[i] + strlen(arg_log_level);
- if (strcmp(a, "test_suite") == 0)
- { detected = LogLevel::e_test_suite; }
- else if (strcmp(a, "all" ) == 0)
- { detected = LogLevel::e_all; }
- else if (strcmp(a, "message") == 0)
- { detected = LogLevel::e_message; }
- else if (strcmp(a, "warning") == 0)
- { detected = LogLevel::e_warning; }
- else if (strcmp(a, "error" ) == 0)
- { detected = LogLevel::e_error; }
- else if (strcmp(a, "nothing") == 0)
- { detected = LogLevel::e_nothing; }
- else if (strcmp(a, "fatal_error") == 0)
- { detected = LogLevel::e_fatal_error; }
- if (detected != LogLevel::e_undefined) {
- verbosity = detected;
- if (debug) {
- LOG(LogLevel::e_nothing,
- "debug: log_level was set to " << a << std::endl);
- }
- }
- else {
- verbosity = LogLevel::e_error;
- if (debug) {
- LOG(LogLevel::e_nothing,
- "debug: log_level was set to error\n");
- }
- }
- }
- else if (strncmp(argv[i], arg_catch_system_errors,
- strlen(arg_catch_system_errors)) == 0)
- {
- char* a = argv[i] + strlen(arg_catch_system_errors);
- if (strcmp(a, "n") == 0 || strcmp(a, "no") == 0) {
- catch_system_errors = false;
- if (debug) {
- LOG(LogLevel::e_nothing,
- "debug: arg_catch_system_errors was set to false\n");
- }
- }
- else {
- if (debug) {
- LOG(LogLevel::e_nothing,
- "debug: arg_catch_system_errors was set to true\n");
- }
- }
- }
- else if (strcmp(argv[i], "-debug") == 0) {
- debug = true;
- LOG(LogLevel::e_nothing, "debug: debug was set to true\n");
- }
- else if (strcmp(argv[i], "-h") == 0) {
- if (debug) {
- LOG(LogLevel::e_nothing, "debug: help was set to true\n");
- }
- std::cerr << "Usage:\n"
-<< argv[0] << " [-debug] [-catch_system_errors=[yes|y|no|n]] "
-"[-l=<value>] [-h]\nwhere:\n"
-"debug - Print recognized command line arguments (should be specified first)\n"
-"catch_system_errors - "
- "Allows to switch between catching and ignoring system errors (signals)\n"
-"l (log_level) - Specifies log level\n"
-"\tall - report all log messages\n"
-"\t including the passed test notification\n"
-"\ttest_suite - show test suite messages\n"
-"\tmessage - show user messages\n"
-"\twarning - report warnings issued by user\n"
-"\terror - report all error conditions (default)\n"
-"\tfatal_error- report user or system originated fatal errors\n"
-"\t (for example, memory access violation)\n"
-"\tnothing - do not report any information\n"
-"h (help) - this help message\n"; exit(0);
- }
- }
+ static void SigHandler(int sig);
- if (verbosity == LogLevel::e_undefined) {
- verbosity = LogLevel::e_error;
- if (debug) {
- LOG(LogLevel::e_nothing,
- "debug: log_level was set to error\n");
- }
- }
- }
+ rc_t process_args(int argc, char* argv[], ArgsHandler* argsHandler);
+
+ int argc2;
+ char** argv2;
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+ static struct Args* args;
+#endif
};
class TestCase {
protected:
- TestCase(const std::string& name) : _name(name), _ec(0) {}
+ TestCase(const std::string& name);
public:
ncbi::NK::counter_t GetErrorCounter(void) { return _ec; }
const std::string& GetName(void) const { return _name; }
protected:
- void report_error(const char* msg, const char* file, int line,
- bool is_msg = false, bool isCritical = false)
- {
- ncbi_NK_saveLocation(file, line);
- ++_ec;
- LOG(LogLevel::e_error, file << "(" << line << "): ");
- if (isCritical) {
- LOG(LogLevel::e_error, "fatal ");
- }
- LOG(LogLevel::e_error, "error in \"" << _name << "\": ");
- if (is_msg) {
- LOG(LogLevel::e_error, msg);
- }
- else {
- if (isCritical) {
- LOG(LogLevel::e_error, "critical ");
- }
- LOG(LogLevel::e_error, "check " << msg << " failed");
- }
- LOG(LogLevel::e_error, std::endl);
- if (isCritical)
- { throw ncbi::NK::execution_aborted(); }
- }
+ void ErrorCounterAdd(ncbi::NK::counter_t ec) { _ec += ec; }
- void report_passed(const char* msg, const char* file, int line) {
- ncbi_NK_saveLocation(file, line);
- LOG(LogLevel::e_all, file << "(" << line << "): info: "
- "check " << msg << " passed" << std::endl);
- }
+ void report_error(const char* msg, const char* file, int line, bool is_msg = false, bool isCritical = false);
- template<class T1, class T2>
- void report_error2(const char* e1, const char* e2, T1 t1, T2 t2,
+ void report_passed(const char* msg, const char* file, int line);
+
+ template<class T1>
+ void report_error2(const char* e1, const char* e2, T1 t1, T1 t2,
const char* file, int line, const char* eq, const char* ne,
bool isCritical = false)
{
- ncbi_NK_saveLocation(file, line);
+ ncbi::NK::saveLocation(file, line);
++_ec;
LOG(LogLevel::e_error, file << "(" << line << "): ");
if (isCritical) {
@@ -236,13 +173,29 @@ protected:
if (isCritical)
{ throw ncbi::NK::execution_aborted(); }
}
+ // pointers reported as ints (otherwise << may crash if given an invalid pointer)
+ template<class T1>
+ void report_error2(const char* e1, const char* e2, const T1* t1, const T1* t2,
+ const char* file, int line, const char* eq, const char* ne,
+ bool isCritical = false)
+ {
+ report_error2(e1, e2, (uint64_t)t1, (uint64_t)t2,file, line, eq, ne,isCritical);
+ }
+ template<class T1>
+ void report_error2(const char* e1, const char* e2, T1* t1, T1* t2,
+ const char* file, int line, const char* eq, const char* ne,
+ bool isCritical = false)
+ {
+ report_error2(e1, e2, (uint64_t)t1, (uint64_t)t2,file, line, eq, ne,isCritical);
+ }
+
template<class T1, class T2>
void report_passed2(const char* e1, const char* e2,
const T1& t1, const T2& t2,
const char* file, int line, const char* eq, const char* ne)
{
- ncbi_NK_saveLocation(file, line);
+ ncbi::NK::saveLocation(file, line);
LOG(LogLevel::e_all, file << "(" << line << "): info: "
"check " << e1 << " " << eq << " " << e2 << " passed" << std::endl);
}
@@ -252,7 +205,7 @@ protected:
const T1& t1, const T2& t2, const T3& tolerance,
const char* file, int line)
{
- ncbi_NK_saveLocation(file, line);
+ ncbi::NK::saveLocation(file, line);
LOG(LogLevel::e_all, file << "(" << line << "): "
"info: difference between "
<< e1 << "{" << t1 << "} and " << e2 << "{" << t2 << "} "
@@ -264,7 +217,7 @@ protected:
const T1& t1, const T2& t2, const T3& tolerance, const T4& diff,
const char* file, int line, bool isCritical = false)
{
- ncbi_NK_saveLocation(file, line);
+ ncbi::NK::saveLocation(file, line);
++_ec;
LOG(LogLevel::e_error, file << "(" << line << "): ");
if (isCritical) {
@@ -278,15 +231,164 @@ protected:
{ throw ncbi::NK::execution_aborted(); }
}
- void ncbi_NK_saveLocation(const char* file, int line) {
- std::ostringstream s;
- s << file << "(" << line << ")";
- ncbi::NK::TestEnv::lastLocation = s.str();
+ void _REPORT_CRITICAL_ERROR_(const std::string& msg, const char* file, int line, bool is_msg = false);
+
+#define CHECK(exp) \
+ ( (exp) \
+ ? report_passed((#exp), __FILE__, __LINE__) \
+ : report_error ((#exp), __FILE__, __LINE__) )
+
+/* TODO #define CHECK_MESSAGE(exp, M) \
+ std::ostringstream s, s << M, \
+ ( (exp) \
+ ? report_passed(s.str(),__FILE__,__LINE__) \
+ : report_error (s.str(),__FILE__,__LINE__) )*/
+
+#define REQUIRE(exp) \
+ ( (exp) \
+ ? report_passed ((#exp), __FILE__, __LINE__) \
+ : _REPORT_CRITICAL_ERROR_((#exp), __FILE__, __LINE__) )
+
+#define CHECK_CLOSE(left, right, tolerance) \
+( (ncbi::NK::abs((left) - (right)) < (tolerance)) \
+?report_passed_close(#left,#right,(left),(right),(tolerance),__FILE__,__LINE__)\
+: report_error_close(#left,#right,(left),(right),(tolerance), \
+ ncbi::NK::abs((left) - (right)), __FILE__, __LINE__) )
+
+#define REQUIRE_CLOSE(left, right, tolerance) \
+( (ncbi::NK::abs((left) - (right)) < (tolerance)) \
+?report_passed_close(#left,#right,(left),(right),(tolerance),__FILE__,__LINE__)\
+: report_error_close(#left,#right,(left),(right),(tolerance), \
+ ncbi::NK::abs((left) - (right)), __FILE__, __LINE__, true) )
+
+ template<class T>
+ void AssertEqual(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+ {
+ if (e1 == e2)
+ {
+ report_passed2(e1str, e2str, e1, e2, file, line, "==", "!=");
+ }
+ else
+ {
+ report_error2 (e1str, e2str, e1, e2, file, line, "==", "!=", critical);
+ }
+ }
+#define CHECK_EQUAL(e1, e2) AssertEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define CHECK_EQ(e1, e2) CHECK_EQUAL(e1,e2)
+#define REQUIRE_EQUAL(e1, e2) AssertEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+#define REQUIRE_EQ(e1, e2) REQUIRE_EQUAL(e1,e2)
+
+ template<class T>
+ void AssertNotEqual(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+ {
+ if (e1 != e2)
+ {
+ report_passed2(e1str, e2str, e1, e2, file, line, "!=", "==");
+ }
+ else
+ {
+ report_error2 (e1str, e2str, e1, e2, file, line, "!=", "==", critical);
+ }
+ }
+#define CHECK_NE(e1, e2) AssertNotEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_NE(e1, e2) AssertNotEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+ template<class T>
+ void AssertGreaterOrEqual(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+ {
+ if (e1 >= e2)
+ {
+ report_passed2(e1str, e2str, e1, e2, file, line, ">=", "<");
+ }
+ else
+ {
+ report_error2 (e1str, e2str, e1, e2, file, line, ">=", "<", critical);
+ }
+ }
+#define CHECK_GE(e1, e2) AssertGreaterOrEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_GE(e1, e2) AssertGreaterOrEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+ template<class T>
+ void AssertGreater(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+ {
+ if (e1 > e2)
+ {
+ report_passed2(e1str, e2str, e1, e2, file, line, ">", "<=");
+ }
+ else
+ {
+ report_error2 (e1str, e2str, e1, e2, file, line, ">", "<=", critical);
+ }
+ }
+#define CHECK_GT(e1, e2) AssertGreater((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_GT(e1, e2) AssertGreater((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+ template<class T>
+ void AssertLessOrEqual(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+ {
+ if (e1 <= e2)
+ {
+ report_passed2(e1str, e2str, e1, e2, file, line, "<=", ">");
+ }
+ else
+ {
+ report_error2 (e1str, e2str, e1, e2, file, line, "<=", ">", critical);
+ }
+ }
+#define CHECK_LE(e1, e2) AssertLessOrEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_LE(e1, e2) AssertLessOrEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+ template<class T>
+ void AssertLess(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+ {
+ if (e1 < e2)
+ {
+ report_passed2(e1str, e2str, e1, e2, file, line, "<", ">=");
+ }
+ else
+ {
+ report_error2 (e1str, e2str, e1, e2, file, line, "<", ">=", critical);
+ }
}
+#define CHECK_LT(e1, e2) AssertLess((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_LT(e1, e2) AssertLess((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+ void report_rc(rc_t rc, const char* callStr, const char* file, int line, int successExpected, bool isCritical = false);
- void _REPORT_CRITICAL_ERROR_(const std::string& msg,
- const char* file, int line, bool is_msg = false)
- { report_error( msg.c_str(), file, line, is_msg, true ); }
+#define CHECK_RC(exp) report_rc((exp), #exp, __FILE__, __LINE__, true, false)
+#define REQUIRE_RC(exp) report_rc((exp), #exp, __FILE__, __LINE__, true, true)
+#define CHECK_RC_FAIL(exp) report_rc((exp), #exp, __FILE__, __LINE__, false, false)
+#define REQUIRE_RC_FAIL(exp) report_rc((exp), #exp, __FILE__, __LINE__, false, true)
+
+ template<class T>
+ void AssertNull(const T* e1, const char* e1str,const char* file, unsigned int line, bool critical=false)
+ {
+ if (e1 == 0)
+ {
+ report_passed2(e1str, "NULL", e1, (const T*)0, file, line, "==", "!=");
+ }
+ else
+ {
+ report_error2 (e1str, "NULL", e1, (const T*)0, file, line, "==", "!=", critical);
+ }
+ }
+#define CHECK_NULL(e1) AssertNull((e1), #e1, __FILE__,__LINE__, false)
+#define REQUIRE_NULL(e1) AssertNull((e1), #e1, __FILE__,__LINE__, true)
+
+ template<class T>
+ void AssertNotNull(const T* e1, const char* e1str,const char* file, unsigned int line, bool critical=false)
+ {
+ if (e1 != 0)
+ {
+ report_passed2(e1str, "NULL", e1, (const T*)0, file, line, "!=", "==");
+ }
+ else
+ {
+ report_error2 (e1str, "NULL", e1, (const T*)0, file, line, "!=", "==", critical);
+ }
+ }
+#define CHECK_NOT_NULL(e1) AssertNotNull((e1), #e1, __FILE__,__LINE__, false)
+#define REQUIRE_NOT_NULL(e1) AssertNotNull((e1), #e1, __FILE__,__LINE__, true)
private:
const std::string _name;
@@ -313,53 +415,21 @@ class TestRunner {
typedef T::const_iterator TCI;
public:
- TestRunner() : argc(0), argv(NULL) {}
+ TestRunner();
int argc;
char** argv;
- void ReportTestNumber(void) {
- T::size_type sz = _cases.size();
- if (sz == 1) {
- LOG(LogLevel::e_fatal_error, "Running " << sz << " test case...\n");
- } else if (sz > 1) {
- LOG(LogLevel::e_fatal_error, "Running " << sz << " test cases...\n");
- }
- }
- void SetArgs(int argc, char* argv[]) {
- this->argc = argc;
- this->argv = argv;
- }
- void Add(ncbi::NK::TestInvoker* t) {
- if (t) {
- _cases.push_back(t);
- }
- }
- ncbi::NK::counter_t Run(void* globalFixtute) const {
- ncbi::NK::counter_t ec = 0;
- for (TCI it = _cases.begin(); it != _cases.end(); ++it) {
- ncbi::NK::TestInvoker* c = *it;
- try {
- LOG(LogLevel::e_test_suite,
- "Entering test case \"" << c->GetName() << "\"\n");
- c->Run(globalFixtute);
- LOG(LogLevel::e_test_suite,
- "Leaving test case \"" << c->GetName() << "\"\n");
- } catch (const ncbi::NK::execution_aborted&) {
- LOG(LogLevel::e_test_suite,
- "Leaving test case \"" << c->GetName() << "\"\n");
- }
- ec += c->GetErrorCounter();
- }
- return ec;
- }
+ void ReportTestNumber(void);
+ void SetArgs(int argc, char* argv[]);
+ void Add(ncbi::NK::TestInvoker* t);
+ counter_t Run(void* globalFixtute) const;
private:
T _cases;
};
-static ncbi::NK::TestRunner* GetTestSuite(void)
-{ static ncbi::NK::TestRunner* t = new ncbi::NK::TestRunner; return t; }
+extern ncbi::NK::TestRunner* GetTestSuite();
template<class TFixture>
ncbi::NK::counter_t Main(int argc, char* argv[],
@@ -377,7 +447,16 @@ ncbi::NK::counter_t Main(int argc, char* argv[],
ec = t->Run(&globalFixtute);
LOG(ncbi::NK::LogLevel::e_test_suite,
"Leaving test suite \"" << suite_name << "\"\n";)
- } catch (const ncbi::NK::execution_aborted& e) { ++ec; }
+ }
+ catch (std::exception& ex)
+ {
+ LOG(ncbi::NK::LogLevel::e_nothing, std::string("*** Exception caught: ") + ex.what());
+ ++ec;
+ }
+ catch (...)
+ {
+ ++ec;
+ }
switch (ec) {
case 0:
LOG(ncbi::NK::LogLevel::e_nothing, "\n*** No errors detected\n");
@@ -396,22 +475,5 @@ ncbi::NK::counter_t Main(int argc, char* argv[],
} } // namespace ncbi::NK
-inline void ncbi_NK_saveLocation(const char* file, int line) {}
-inline void _REPORT_CRITICAL_ERROR_(const std::string& msg,
- const char* file, int line, bool is_msg)
-{
- LOG(ncbi::NK::LogLevel::e_error, file << "(" << line << "): ");
- LOG(ncbi::NK::LogLevel::e_error, "fatal ");
- LOG(ncbi::NK::LogLevel::e_error, "error in fixture: ");
- if (is_msg) {
- LOG(ncbi::NK::LogLevel::e_error, msg);
- }
- else {
- LOG(ncbi::NK::LogLevel::e_error, "critical ");
- LOG(ncbi::NK::LogLevel::e_error, "check " << msg << " failed");
- }
- LOG(ncbi::NK::LogLevel::e_error, std::endl);
- throw ncbi::NK::execution_aborted();
- }
#endif// NCBI_NK_UNIT_TEST__SUITE_HPP
diff --git a/interfaces/kxml/xml.h b/interfaces/kxml/xml.h
new file mode 100644
index 0000000..2f42564
--- /dev/null
+++ b/interfaces/kxml/xml.h
@@ -0,0 +1,382 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kxml_xml_
+#define _h_kxml_xml_
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#include <klib/defs.h>
+
+#include <stdarg.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct KNamelist;
+struct KXMLNodeset;
+
+
+/*--------------------------------------------------------------------------
+ * XML node
+ */
+typedef struct KXMLNode KXMLNode;
+
+/* AddRef
+ * Release
+ */
+KLIB_EXTERN rc_t CC KXMLNodeAddRef ( const KXMLNode *self );
+KLIB_EXTERN rc_t CC KXMLNodeRelease ( const KXMLNode *self );
+
+/* GetName
+ * Get node path from parent nodeset
+ */
+KLIB_EXTERN rc_t CC KXMLNodeGetName ( const KXMLNode *self, const char **name );
+
+/* Get element name (tag)
+ */
+KLIB_EXTERN rc_t CC KXMLNodeElementName ( const KXMLNode *self, const char **name );
+
+/* Read
+ */
+KLIB_EXTERN rc_t CC KXMLNodeRead ( const KXMLNode *self,
+ size_t offset, void *buffer, size_t size,
+ size_t *num_read, size_t *remaining );
+
+/* Write
+ */
+KLIB_EXTERN rc_t CC KXMLNodeWrite ( KXMLNode *self,
+ size_t offset, const void *buffer, size_t size );
+
+/* Append
+ */
+KLIB_EXTERN rc_t CC KXMLNodeAppend ( KXMLNode *self,
+ const void *buffer, size_t bsize );
+
+
+/* ReadAs ( formatted )
+ * reads as integer or float value in native byte order
+ * casts smaller-sized values to desired size, e.g.
+ * uint32_t to uint64_t
+ *
+ * "i" [ OUT ] - return parameter for signed integer
+ * "u" [ OUT ] - return parameter for unsigned integer
+ * "f" [ OUT ] - return parameter for double float
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAsI16 ( const KXMLNode *self, int16_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsU16 ( const KXMLNode *self, uint16_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsI32 ( const KXMLNode *self, int32_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsU32 ( const KXMLNode *self, uint32_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsI64 ( const KXMLNode *self, int64_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsU64 ( const KXMLNode *self, uint64_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsF64 ( const KXMLNode *self, double *f );
+
+
+/* ReadCString ( formatted )
+ * reads as C-string
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - output buffer for
+ * NUL terminated string.
+ *
+ * "size" [ OUT ] - return parameter giving size of string
+ * not including NUL byte. the size is set both upon success
+ * and insufficient buffer space error.
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadCString ( const KXMLNode *self,
+ char *buffer, size_t bsize, size_t *size );
+
+/* ReadCStr
+ * reads node value as C-string
+ *
+ * "str" [ IN ] - returned pointer to a NULL terminated string.
+ * Caller responsible to dealloc (free)!
+ * "default_value" [IN] - default value used in case node value is empty, NULL - none
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadCStr( const KXMLNode *self, char** str, const char* default_value );
+
+/* Write ( formatted )
+ * writes string
+ *
+ * "str" [ IN ] - NULL terminated string.
+ */
+KLIB_EXTERN rc_t CC KXMLNodeWriteCString ( KXMLNode *self, const char *str );
+
+
+/* OpenNodesetRead
+ *
+ * NB. OpenNodesetRead could return Nodeset with 0 elements.
+ * To make sure the node exists you should verify that (KXMLNodesetCount > 0)
+ */
+KLIB_EXTERN rc_t CC KXMLNodeOpenNodesetRead ( const KXMLNode *self,
+ struct KXMLNodeset const **ns, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLNodeVOpenNodesetRead ( const KXMLNode *self,
+ struct KXMLNodeset const **ns, const char *path, va_list args );
+
+/* OpenNodesetUpdate
+ */
+KLIB_EXTERN rc_t CC KXMLNodeOpenNodesetUpdate ( KXMLNode *self,
+ struct KXMLNodeset **ns, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLNodeVOpenNodesetUpdate ( KXMLNode *self,
+ struct KXMLNodeset **ns, const char *path, va_list args );
+
+/* ReadAttr
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAttr ( const KXMLNode *self,
+ const char *attr, void *buffer, size_t bsize,
+ size_t *num_read, size_t *remaining );
+
+/* WriteAttr
+ */
+KLIB_EXTERN rc_t CC KXMLNodeWriteAttr ( KXMLNode *self,
+ const char *attr, const void *buffer, size_t size );
+
+
+/* ReadAttrAs ( formatted )
+ * reads as integer or float value in native byte order
+ * casts smaller-sized values to desired size, e.g.
+ * uint32_t to uint64_t
+ *
+ * "i" [ OUT ] - return parameter for signed integer
+ * "u" [ OUT ] - return parameter for unsigned integer
+ * "f" [ OUT ] - return parameter for double float
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI16 ( const KXMLNode *self, const char *attr, int16_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU16 ( const KXMLNode *self, const char *attr, uint16_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI32 ( const KXMLNode *self, const char *attr, int32_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU32 ( const KXMLNode *self, const char *attr, uint32_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI64 ( const KXMLNode *self, const char *attr, int64_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU64 ( const KXMLNode *self, const char *attr, uint64_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsF64 ( const KXMLNode *self, const char *attr, double *f );
+
+
+/* ReadAttrCString ( formatted )
+ * reads as C-string
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - output buffer for
+ * NUL terminated string.
+ *
+ * "size" [ OUT ] - return parameter giving size of string
+ * not including NUL byte. the size is set both upon success
+ * and insufficient buffer space error.
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrCString ( const KXMLNode *self, const char *attr,
+ char *buffer, size_t bsize, size_t *size );
+
+/* ReadAttrCStr
+ * reads attribute as C-string
+ *
+ * "str" [ IN ] - returned pointer to a NULL terminated string.
+ * Caller responsible to dealloc (free)!
+ * "default_value" [IN] - default value used in case node value is empty, NULL - none
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrCStr( const KXMLNode *self, const char *attr, char** str, const char* default_value);
+
+/* CountChildNodes
+ * count child nodes
+ */
+KLIB_EXTERN rc_t CC KXMLNodeCountChildNodes(const KXMLNode *self,
+ uint32_t *count);
+
+/* GetNodeRead
+ * access indexed node
+ * "idx" [ IN ] - a zero-based index
+ */
+KLIB_EXTERN rc_t CC KXMLNodeGetNodeRead ( const KXMLNode *self,
+ const KXMLNode **node, uint32_t idx );
+
+/* ListAttr
+ * list all named attributes
+ */
+KLIB_EXTERN rc_t CC KXMLNodeListAttr ( const KXMLNode *self,
+ struct KNamelist const **names );
+
+/* ListChild
+ * list all named children
+ */
+KLIB_EXTERN rc_t CC KXMLNodeListChild ( const KXMLNode *self,
+ struct KNamelist const **names );
+
+
+/* GetFirstChildNodeRead
+ * Returns the first(with index 0) sub-node of self using path.
+ * Is equivalent to:
+ * KXMLNodeOpenNodesetRead(self, &nc, path, ...);
+ * KXMLNodesetGetNodeRead(ns, node, 0);
+ * It will return NotFound error if any node exists
+ */
+KLIB_EXTERN rc_t CC KXMLNodeGetFirstChildNodeRead ( const KXMLNode *self,
+ const KXMLNode **node, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLNodeVGetFirstChildNodeRead ( const KXMLNode *self,
+ const KXMLNode **node, const char *path, va_list args );
+
+
+/*--------------------------------------------------------------------------
+ * XML node set
+ */
+typedef struct KXMLNodeset KXMLNodeset;
+
+/* AddRef
+ * Release
+ */
+KLIB_EXTERN rc_t CC KXMLNodesetAddRef ( const KXMLNodeset *self );
+KLIB_EXTERN rc_t CC KXMLNodesetRelease ( const KXMLNodeset *self );
+
+/* Count
+ * retrieve the number of nodes in set
+ */
+KLIB_EXTERN rc_t CC KXMLNodesetCount ( const KXMLNodeset *self, uint32_t *count );
+
+/* GetNode
+ * access indexed node
+ * "idx" [ IN ] - a zero-based index
+ */
+KLIB_EXTERN rc_t CC KXMLNodesetGetNodeRead ( const KXMLNodeset *self,
+ const KXMLNode **node, uint32_t idx );
+
+
+/*--------------------------------------------------------------------------
+ * XML document
+ */
+typedef struct KXMLDoc KXMLDoc;
+
+/* AddRef
+ * Release
+ * ignores NULL references
+ */
+KLIB_EXTERN rc_t CC KXMLDocAddRef ( const KXMLDoc *self );
+KLIB_EXTERN rc_t CC KXMLDocRelease ( const KXMLDoc *self );
+
+/* OpenNodesetRead
+ * opens a node set with given path
+ */
+KLIB_EXTERN rc_t CC KXMLDocOpenNodesetRead ( const KXMLDoc *self,
+ const KXMLNodeset **ns, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLDocVOpenNodesetRead ( const KXMLDoc *self,
+ const KXMLNodeset **ns, const char *path, va_list args );
+
+/* OpenNodesetUpdate
+ * opens a node set with given path
+ */
+KLIB_EXTERN rc_t CC KXMLDocOpenNodesetUpdate ( KXMLDoc *self,
+ KXMLNodeset **ns, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLDocVOpenNodesetUpdate ( KXMLDoc *self,
+ KXMLNodeset **ns, const char *path, va_list args );
+
+
+/*--------------------------------------------------------------------------
+ * XML manager
+ */
+typedef struct KXMLMgr KXMLMgr;
+
+/* Make
+ * make an XML manager object
+ */
+KLIB_EXTERN rc_t CC KXMLMgrMakeRead ( const KXMLMgr **mgr );
+
+/* AddRef
+ * Release
+ * ignores NULL references
+ */
+KLIB_EXTERN rc_t CC KXMLMgrAddRef ( const KXMLMgr *self );
+KLIB_EXTERN rc_t CC KXMLMgrRelease ( const KXMLMgr *self );
+
+/* MakeDoc
+ * create a document object from source file
+ */
+KLIB_EXTERN rc_t CC KXMLMgrMakeDocRead ( const KXMLMgr *self,
+ const KXMLDoc **doc, struct KFile const *src );
+
+/* MakeDoc
+ * create a document object from memory
+ */
+KLIB_EXTERN rc_t KXMLMgrMakeDocReadFromMemory ( const KXMLMgr *self,
+ const KXMLDoc **result, const char* buffer, uint64_t size );
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ * this will probably be relocated later on
+ */
+struct KDirectory;
+struct KFile;
+struct String;
+struct VFSManager;
+struct VPath;
+
+/* OpenXTocDirRead
+ * open copycat XML as a chroot'd directory
+ * XML data comes from a KFile in this case
+ *
+ * "dir" [ OUT ] - return parameter for directory object
+ *
+ * "base_path" [ IN ] - NUL terminated string giving the path
+ * of the new directory relative to "self". NB - can be absolute
+ * or relative, but is always interpreted by "self".
+ *
+ * "xml" [ IN ] - file containing XML data produced by copycat tool
+ */
+rc_t CC KDirectoryOpenXTocDirRead (const struct KDirectory * self,
+ const struct KDirectory ** pnew_dir,
+ bool chroot,
+ const struct KFile * xml,
+ const char * path, ... );
+rc_t CC KDirectoryVOpenXTocDirRead (const struct KDirectory * self,
+ const struct KDirectory ** pnew_dir,
+ bool chroot,
+ const struct KFile * xml,
+ const char * _path,
+ va_list args );
+rc_t CC KDirectoryOpenXTocDirRead (const struct KDirectory * self,
+ const struct KDirectory ** pnew_dir,
+ bool chroot,
+ const struct KFile * xml,
+ const char * path, ... );
+rc_t CC KDirectoryOpenXTocDirReadDir (const struct KDirectory * self,
+ const struct KDirectory ** pnew_dir,
+ const struct KFile * xml,
+ const struct String * spath);
+
+rc_t CC VFSManagerOpenXTocDirRead (const struct VFSManager * self,
+ const struct KDirectory ** pnew_dir,
+ const struct KFile * xml,
+ const struct VPath * path);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kxml_xml_ */
diff --git a/interfaces/loader/alignment-writer.h b/interfaces/loader/alignment-writer.h
new file mode 100644
index 0000000..7ad3613
--- /dev/null
+++ b/interfaces/loader/alignment-writer.h
@@ -0,0 +1,97 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_ALIGNMENT_WRITER_H_
+#define BAM_LOAD_ALIGNMENT_WRITER_H_ 1
+
+#include <klib/text.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <insdc/insdc.h>
+
+#include <align/writer-alignment.h>
+
+typedef struct AlignmentWriter AlignmentWriter;
+typedef struct AlignmentRecord AlignmentRecord;
+
+struct AlignmentRecord {
+ TableWriterAlgnData data;
+ int64_t alignId;
+ bool isPrimary;
+
+ INSDC_coord_one read_id;
+ int64_t ref_id;
+ INSDC_coord_zero ref_start;
+ uint64_t global_ref_start;
+ bool ref_orientation;
+ uint32_t mapq;
+ uint64_t tmp_key_id;
+
+ INSDC_coord_zero read_start;
+ INSDC_coord_len read_len;
+
+ bool mate_ref_orientation;
+ int64_t mate_ref_id;
+ INSDC_coord_zero mate_ref_pos;
+ int64_t mate_align_id;
+ int32_t template_len;
+};
+
+#define AR_REF_ID(X) ((X).ref_id)
+#define AR_REF_START(X) ((X).global_ref_start)
+#define AR_REF_LEN(X) ((X).ref_len)
+#define AR_REF_ORIENT(X) ((X).ref_orientation)
+#define AR_READNO(X) ((X).read_id)
+#define AR_MAPQ(X) ((X).mapq)
+#define AR_KEY(X) ((X).tmp_key_id)
+
+#define AR_BASECOUNT(X) ((X).data.has_mismatch.elements)
+#define AR_HAS_MISMATCH(X) ((bool *)((X).data.has_mismatch.buffer))
+#define AR_HAS_OFFSET(X) ((bool *)((X).data.has_ref_offset.buffer))
+
+#define AR_NUM_MISMATCH(X) ((X).data.mismatch.elements)
+#define AR_MISMATCH(X) ((char *)((X).data.mismatch.buffer))
+
+#define AR_NUM_OFFSET(X) ((X).data.ref_offset.elements)
+#define AR_OFFSET(X) ((INSDC_coord_zero *)((X).data.ref_offset.buffer))
+
+AlignmentWriter *AlignmentMake(VDatabase *db);
+
+rc_t AlignmentWriteRecord(AlignmentWriter * const self, AlignmentRecord * const data, bool expectUnsorted);
+
+rc_t AlignmentStartUpdatingSpotIds(AlignmentWriter * const self);
+
+rc_t AlignmentGetSpotKey(AlignmentWriter * const self, uint64_t *keyId);
+
+rc_t AlignmentWriteSpotId(AlignmentWriter * const self, int64_t const spotId);
+
+rc_t AlignmentWhack(AlignmentWriter * const self, bool const commit);
+
+void AlignmentRecordInit(AlignmentRecord *self, void *buffer, unsigned readlen, char **endp, bool expectUnsorted);
+
+#endif
diff --git a/interfaces/loader/common-reader-priv.h b/interfaces/loader/common-reader-priv.h
new file mode 100644
index 0000000..26a8e19
--- /dev/null
+++ b/interfaces/loader/common-reader-priv.h
@@ -0,0 +1,300 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_common_reader_priv_
+#define _h_common_reader_priv_
+
+#include <loader/common-reader.h>
+
+#include <klib/refcount.h>
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*TODO: add module rcLoader to rc.h? */
+#define RC_MODULE rcAlign
+
+/*--------------------------------------------------------------------------
+ ReaderFile
+ */
+#ifndef READERFILE_IMPL
+ #define READERFILE_IMPL struct ReaderFile
+#endif
+
+typedef struct ReaderFile_vt_v1_struct {
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+ rc_t ( *destroy ) ( READERFILE_IMPL* self );
+ rc_t ( *getRecord ) ( const READERFILE_IMPL *self, const Record** result );
+ float ( *getProportionalPosition ) ( const READERFILE_IMPL *self );
+ rc_t ( *getReferenceInfo ) ( const READERFILE_IMPL *self, const ReferenceInfo** result );
+ /* end minor version == 0 */
+
+} ReaderFile_vt_v1;
+
+typedef union ReaderFile_vt {
+ ReaderFile_vt_v1* v1;
+} ReaderFile_vt;
+
+struct ReaderFile
+{
+ ReaderFile_vt vt;
+ KRefcount refcount;
+ char* pathname;
+};
+
+/* Init
+ * polymorphic parent constructor
+ */
+rc_t CC ReaderFileInit ( READERFILE_IMPL *self );
+
+/* Whack
+ * destructor
+ */
+rc_t CC ReaderFileWhack ( ReaderFile *self );
+
+/*--------------------------------------------------------------------------
+ Record
+ */
+#ifndef RECORD_IMPL
+ #define RECORD_IMPL struct Record
+#endif
+
+typedef struct Record_vt_v1_struct {
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+ rc_t ( *addRef ) ( const RECORD_IMPL* self );
+ rc_t ( *release ) ( const RECORD_IMPL* self );
+ rc_t ( *getSequence ) ( const RECORD_IMPL *self, const Sequence** result );
+ rc_t ( *getAlignment ) ( const RECORD_IMPL *self, const Alignment** result );
+ rc_t ( *getRejected ) ( const RECORD_IMPL *self, const Rejected** result );
+ /* end minor version == 0 */
+
+} Record_vt_v1;
+
+typedef union Record_vt {
+ Record_vt_v1* v1;
+} Record_vt;
+
+struct Record
+{
+ Record_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ Sequence
+ */
+#ifndef SEQUENCE_IMPL
+ #define SEQUENCE_IMPL struct Sequence
+#endif
+
+typedef struct Sequence_vt_v1_struct {
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+ rc_t ( *addRef ) ( const SEQUENCE_IMPL* self );
+ rc_t ( *release ) ( const SEQUENCE_IMPL* self );
+
+ rc_t ( *getReadLength ) ( const SEQUENCE_IMPL *self, uint32_t *length );
+ rc_t ( *getRead ) ( const SEQUENCE_IMPL *self, char *sequence );
+ rc_t ( *getRead2 ) ( const SEQUENCE_IMPL *self, char *sequence, uint32_t start, uint32_t stop );
+ rc_t ( *getQuality ) ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+ rc_t ( *getSpotGroup ) ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+ rc_t ( *getSpotName ) ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+ bool ( *isColorSpace ) ( const SEQUENCE_IMPL *self );
+ rc_t ( *getCSKey ) ( const SEQUENCE_IMPL *self, char cskey[1] );
+ rc_t ( *getCSReadLength ) ( const SEQUENCE_IMPL *self, uint32_t *length );
+ rc_t ( *getCSRead ) ( const SEQUENCE_IMPL *self, char *sequence );
+ rc_t ( *getCSQuality ) ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+
+ bool ( *wasPaired ) ( const SEQUENCE_IMPL *self );
+ int ( *orientationSelf ) ( const SEQUENCE_IMPL *self );
+ int ( *orientationMate ) ( const SEQUENCE_IMPL *self );
+ bool ( *isFirst ) ( const SEQUENCE_IMPL *self );
+ bool ( *isSecond ) ( const SEQUENCE_IMPL *self );
+ bool ( *isDuplicate ) ( const SEQUENCE_IMPL *self );
+ bool ( *isLowQuality ) ( const SEQUENCE_IMPL *self );
+
+ rc_t ( *getTI ) ( const SEQUENCE_IMPL *self, uint64_t *ti );
+
+ /* end minor version == 0 */
+
+} Sequence_vt_v1;
+
+typedef union Sequence_vt {
+ Sequence_vt_v1* v1;
+} Sequence_vt;
+
+struct Sequence
+{
+ Sequence_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ Alignment
+ */
+#ifndef ALIGNMENT_IMPL
+ #define ALIGNMENT_IMPL struct Alignment
+#endif
+
+typedef struct Alignment_vt_v1_struct {
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+
+ rc_t ( *addRef ) ( const ALIGNMENT_IMPL* self );
+ rc_t ( *release ) ( const ALIGNMENT_IMPL* self );
+
+ rc_t ( *getRefSeqId ) ( const ALIGNMENT_IMPL *self, int32_t *refSeqId );
+ rc_t ( *getMateRefSeqId ) ( const ALIGNMENT_IMPL *self, int32_t *refSeqId );
+ rc_t ( *getPosition ) ( const ALIGNMENT_IMPL *self, int64_t *pos );
+ rc_t ( *getMatePosition ) ( const ALIGNMENT_IMPL *self, int64_t *pos );
+ rc_t ( *getMapQuality ) ( const ALIGNMENT_IMPL *self, uint8_t *qual );
+ rc_t ( *getAlignmentDetail ) ( const ALIGNMENT_IMPL *self, AlignmentDetail *rslt, uint32_t count, uint32_t *actual, int32_t *firstMatch, int32_t *lastMatch );
+ rc_t ( *getAlignOpCount ) ( const ALIGNMENT_IMPL *self, uint32_t *n );
+ rc_t ( *getInsertSize ) ( const ALIGNMENT_IMPL *self, int64_t *size );
+ rc_t ( *getCG ) ( const ALIGNMENT_IMPL *self, const CGData** result );
+ rc_t ( *getBAMCigar ) ( const ALIGNMENT_IMPL *self, uint32_t const **rslt, uint32_t *length );
+
+ bool ( *isSecondary ) ( const ALIGNMENT_IMPL *self );
+
+ /* end minor version == 0 */
+
+} Alignment_vt_v1;
+
+typedef union Alignment_vt {
+ Alignment_vt_v1* v1;
+} Alignment_vt;
+
+struct Alignment
+{
+ Alignment_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ CGData
+ */
+#ifndef CGDATA_IMPL
+ #define CGDATA_IMPL struct CGData
+#endif
+
+typedef struct CGData_vt_v1_struct {
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+
+ rc_t ( *addRef ) ( const CGDATA_IMPL* self );
+ rc_t ( *release ) ( const CGDATA_IMPL* self );
+
+ rc_t ( * getSeqQual ) ( const CGDATA_IMPL* self, char sequence[/* 35 */], uint8_t quality[/* 35 */] );
+ rc_t ( * getCigar ) ( const CGDATA_IMPL* self, uint32_t *cigar, uint32_t cig_max, uint32_t *cig_act );
+ rc_t ( * getAlignGroup ) ( const CGDATA_IMPL* self, char buffer[], size_t max_size, size_t *act_size);
+ /* end minor version == 0 */
+
+} CGData_vt_v1;
+
+typedef union CGData_vt {
+ CGData_vt_v1* v1;
+} CGData_vt;
+
+struct CGData
+{
+ CGData_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ Rejected
+ */
+
+struct Rejected {
+ KRefcount refcount;
+
+ String source;
+ const char* message;
+ uint64_t line;
+ uint64_t column;
+ bool fatal;
+};
+
+rc_t CC RejectedInit ( Rejected *self );
+
+/*--------------------------------------------------------------------------
+ ReferenceInfo
+ */
+
+#ifndef REFERENCEINFO_IMPL
+ #define REFERENCEINFO_IMPL struct ReferenceInfo
+#endif
+
+typedef struct ReferenceInfo_vt_v1_struct {
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+
+ rc_t ( *addRef ) ( const REFERENCEINFO_IMPL* self );
+ rc_t ( *release ) ( const REFERENCEINFO_IMPL* self );
+
+ rc_t ( *getRefSeqCount ) ( const REFERENCEINFO_IMPL* self, uint32_t* count );
+ rc_t ( *getRefSeq ) ( const REFERENCEINFO_IMPL* self, uint32_t n, ReferenceSequence* result );
+ rc_t ( *getReadGroupCount ) ( const REFERENCEINFO_IMPL* self, uint32_t* count );
+ rc_t ( *getReadGroup ) ( const REFERENCEINFO_IMPL* self, unsigned n, ReadGroup* result );
+ rc_t ( *getReadGroupByName ) ( const REFERENCEINFO_IMPL* self, const char* name, ReadGroup* result );
+
+ /* end minor version == 0 */
+
+} ReferenceInfo_vt_v1;
+
+typedef union ReferenceInfo_vt {
+ ReferenceInfo_vt_v1* v1;
+} ReferenceInfo_vt;
+
+struct ReferenceInfo
+{
+ ReferenceInfo_vt vt;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_common_reader_priv_ */
diff --git a/interfaces/loader/common-reader.h b/interfaces/loader/common-reader.h
new file mode 100644
index 0000000..b6cd796
--- /dev/null
+++ b/interfaces/loader/common-reader.h
@@ -0,0 +1,486 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_common_reader_
+#define _h_common_reader_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef struct ReaderFile ReaderFile;
+typedef struct Record Record;
+typedef struct Sequence Sequence;
+typedef struct Alignment Alignment;
+typedef struct CGData CGData;
+typedef struct Rejected Rejected;
+typedef struct ReferenceInfo ReferenceInfo;
+
+/*--------------------------------------------------------------------------
+ ReaderFile
+ */
+rc_t CC ReaderFileAddRef ( const ReaderFile *self );
+rc_t CC ReaderFileRelease ( const ReaderFile *self );
+
+/* GetRecord
+ * Parses the next record from the source. At the end of the file, rc == 0, *result == 0.
+ */
+rc_t CC ReaderFileGetRecord( const ReaderFile *self, const Record** result);
+
+/* GetPathname
+ * Returns input's pathname, if applicable.
+ */
+const char* CC ReaderFileGetPathname ( const ReaderFile *self );
+
+/* GetProportionalPosition
+ * get the aproximate proportional position in the input file
+ * this is intended to be useful for computing progress
+ *
+ * NB - does not return rc_t
+ */
+float CC ReaderFileGetProportionalPosition ( const ReaderFile *self );
+
+/* GetReferenceInfo
+ *
+ */
+rc_t CC ReaderFileGetReferenceInfo ( const ReaderFile *self, const ReferenceInfo** result );
+
+/*--------------------------------------------------------------------------
+ Record
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC RecordAddRef ( const Record *self );
+rc_t CC RecordRelease ( const Record *self );
+
+rc_t CC RecordGetRejected ( const Record *self, const Rejected** result);
+rc_t CC RecordGetSequence ( const Record *self, const Sequence** result);
+rc_t CC RecordGetAlignment( const Record *self, const Alignment** result);
+
+/*--------------------------------------------------------------------------
+ Sequence
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC SequenceAddRef ( const Sequence *self );
+rc_t CC SequenceRelease ( const Sequence *self );
+
+/* GetReadLength
+ * get the sequence length
+ * i.e. the number of elements of both sequence and quality
+ *
+ * "length" [ OUT ] - length in bases of query sequence and quality
+ */
+rc_t CC SequenceGetReadLength ( const Sequence *self, uint32_t *length );
+
+/* GetRead
+ * get the sequence data [0..ReadLength)
+ * caller provides buffer of ReadLength bytes
+ *
+ * "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ */
+rc_t CC SequenceGetRead( const Sequence *self, char *sequence );
+
+/* GetRead2
+ * get the sequence data [0..ReadLength)
+ * caller provides buffer of ReadLength bytes
+ *
+ * "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ *
+ * "start" [ IN ] and "stop" [ IN ] - zero-based coordinates, half-closed interval; both have to be within ReadLength
+ */
+rc_t CC SequenceGetRead2 ( const Sequence *self, char *sequence, uint32_t start, uint32_t stop);
+
+enum QualityType {
+ QT_Unknown = 0,
+ QT_Phred,
+ QT_LogOdds
+};
+/* GetQuality
+ * get the raw quality data [0..ReadLength) from OQ if possible else from QUAL
+ * values are unsigned with 0xFF == missing
+ *
+ * "quality" [ OUT ] - return param for quality sequence
+ * held internally, validity is guaranteed for the life of the sequence
+ *
+ * "offset" [ OUT ] - the zero point of quality (33, 64; 0 for binary)
+ *
+ * "qualType" [ OUT ] - quality type (phred, log-odds, unknown)
+ */
+rc_t CC SequenceGetQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType);
+
+/* SequenceGetSpotGroup
+ * get the name of the spot group (e.g. accession)
+ *
+ * "name" [ OUT ] - return param for group name
+ * held internally, validity is guaranteed for the life of the sequence
+ *
+ * "length" [ OUT ] - return the number of bytes in "name"
+ */
+rc_t CC SequenceGetSpotGroup ( const Sequence *self, const char **name, size_t *length );
+
+
+/* SequenceGetSpotName
+ * get the read name and length in bytes
+ *
+ * "name" [ OUT ] - return param for read group name
+ * held internally, validity is guaranteed for the life of the sequence
+ *
+ * "length" [ OUT ] - return the number of bytes in "name"
+ */
+rc_t CC SequenceGetSpotName ( const Sequence *self, const char **name, size_t *length );
+
+/* IsColorSpace
+ * Does the sequence have colorspace info
+ */
+bool CC SequenceIsColorSpace ( const Sequence *self );
+
+/* GetCSKey
+ * get the colorspace key
+ *
+ * "cskey" [ OUT ] - return param
+ *
+ * return: if no colorspace info, RC is 0 but the value of cskey is undefined
+ */
+rc_t CC SequenceGetCSKey ( const Sequence *self, char cskey[1] );
+
+/* GetCSReadLength
+ * get the color space sequence length
+ * i.e. the number of elements of both sequence and quality
+ *
+ * "length" [ OUT ] - length in bases of query sequence and quality
+ */
+rc_t CC SequenceGetCSReadLength ( const Sequence *self, uint32_t *length );
+
+/* GetCSRead
+ * get the color space sequence data [0..ReadLength)
+ * caller provides buffer of ReadLength bytes
+ *
+ * "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ */
+rc_t CC SequenceGetCSRead( const Sequence *self, char *sequence );
+
+/* GetCSQuality
+ * get the color spaqce sequence's raw quality data [0..ReadLength) from OQ if possible else from QUAL
+ * values are unsigned with 0xFF == missing
+ *
+ * "quality" [ OUT ] - return param for quality sequence
+ * held internally, validity is guaranteed for the life of the sequence
+ *
+ * "offset" [ OUT ] - the zero point of quality (33, 64; 0 for binary)
+ *
+ * "qualType" [ OUT ] - quality type (phred, log-odds, unknown)
+ */
+rc_t CC SequenceGetCSQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType);
+
+
+/* WasPaired
+ * true if read number is present and not 0
+ */
+bool CC SequenceWasPaired ( const Sequence *self );
+
+enum ReadOrientation {
+ ReadOrientationUnknown,
+ ReadOrientationForward,
+ ReadOrientationReverse
+};
+/* SequenceGetOrientationSelf
+ */
+int CC SequenceGetOrientationSelf( const Sequence *self );
+/* SequenceGetOrientationMate
+ */
+int CC SequenceGetOrientationMate( const Sequence *self );
+
+/* IsFirst
+ * fastq: read number is present and equal to 1
+ */
+bool CC SequenceIsFirst ( const Sequence *self );
+/* IsSecond
+ * fastq: read number is present and equal to 2
+ */
+bool CC SequenceIsSecond ( const Sequence *self );
+/* IsDuplicate
+ *
+ */
+bool CC SequenceIsDuplicate( const Sequence *self );
+/* IsLowQuality
+ *
+ */
+bool CC SequenceIsLowQuality( const Sequence *self );
+
+/* RecordGetTI
+ *
+ */
+rc_t SequenceGetTI(Sequence const *self, uint64_t *ti);
+
+/*--------------------------------------------------------------------------
+ Alignment
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC AlignmentAddRef ( const Alignment *self );
+rc_t CC AlignmentRelease ( const Alignment *self );
+
+/* GetRefSeqId
+ * get id of reference sequence
+ * pass result into BAMFileGetRefSeqById to get the Reference Sequence record
+ *
+ * "refSeqId" [ OUT ] - zero-based id of reference sequence
+ * returns -1 if set is invalid within BAM ( rc may be zero )
+ */
+rc_t CC AlignmentGetRefSeqId ( const Alignment *self, int32_t *refSeqId );
+
+/* GetMateRefSeqId
+ * get id of mate's reference sequence
+ * pass result into BAMFileGetRefSeqById to get the Reference Sequence record
+ *
+ * "refSeqId" [ OUT ] - zero-based id of reference sequence
+ * returns -1 if invalid
+ */
+rc_t CC AlignmentGetMateRefSeqId ( const Alignment *self, int32_t *refSeqId );
+
+/* GetPosition
+ * get the aligned position on the ref. seq.
+ *
+ * "n" [ IN ] - zero-based position index for cases of multiple alignments
+ *
+ * "pos" [ OUT ] - zero-based position on reference sequence
+ * returns -1 if invalid
+ */
+rc_t CC AlignmentGetPosition ( const Alignment *self, int64_t *pos );
+
+/* GetMatePosition
+ * starting coordinate of mate's alignment on ref. seq.
+ *
+ * "pos" [ OUT ] - zero-based position on reference sequence
+ * returns -1 if invalid
+ */
+rc_t CC AlignmentGetMatePosition ( const Alignment *self, int64_t *pos );
+
+/* GetMapQuality
+ * return the quality score of mapping
+ *
+ * "qual" [ OUT ] - return param for quality score
+ */
+rc_t CC AlignmentGetMapQuality ( const Alignment *self, uint8_t *qual );
+
+/* GetAlignmentDetail
+ * get the alignment details
+ *
+ * "rslt" [ OUT, NULL OKAY ] and "count" [ IN ] - array to hold detail records
+ *
+ * "actual" [ OUT, NULL OKAY ] - number of elements written to "rslt"
+ * required if "rslt" is NULL
+ *
+ * "firstMatch" [ OUT, NULL OKAY ] - zero-based index into "rslt" of the first match to the refSeq
+ * or < 0 if invalid
+ *
+ * "lastMatch" [ OUT, NULL OKAY ] - zero-based index into "rslt" of the last match to the refSeq
+ * or < 0 if invalid
+ */
+typedef uint32_t AlignOpType;
+enum AlignOpTypes
+{
+ align_Match = 'M', /* 0 */
+ align_Insert = 'I', /* 1 */
+ align_Delete = 'D', /* 2 */
+ align_Skip = 'N', /* 3 */
+ align_SoftClip = 'S', /* 4 */
+ align_HardClip = 'H', /* 5 */
+ align_Padded = 'P', /* 6 */
+ align_Equal = '=', /* 7 */
+ align_NotEqual = 'X', /* 8 */
+ align_Overlap = 'B' /* Complete Genomics extension */
+};
+
+typedef struct AlignmentDetail AlignmentDetail;
+struct AlignmentDetail
+{
+ int64_t refSeq_pos; /* position on refSeq where this alignment region starts or -1 if NA */
+ int32_t read_pos; /* position on read where this alignment region starts or -1 if NA */
+ uint32_t length; /* length of alignment region */
+ AlignOpType type; /* type of alignment */
+};
+
+rc_t CC AlignmentGetAlignmentDetail ( const Alignment *self,
+ AlignmentDetail *rslt,
+ uint32_t count,
+ uint32_t *actual,
+ int32_t *firstMatch,
+ int32_t *lastMatch );
+
+
+/* GetCigarCount
+ * the number of CIGAR elements
+ * a CIGAR element consists of the pair of matching op code and op length
+ *
+ * "n" [ OUT ] - return param for cigar count
+ */
+rc_t CC AlignmentGetAlignOpCount ( const Alignment *self, uint32_t *n );
+
+
+/* GetInsertSize
+ * distance in bases to start of mate's alignment on ref. seq.
+ *
+ * "size" [ OUT ] - >0 for first in pair, <0 for second
+ */
+rc_t CC AlignmentGetInsertSize ( const Alignment *self, int64_t *size );
+
+/* GetBAMCigar
+ *
+ */
+rc_t CC AlignmentGetBAMCigar(const Alignment *cself, uint32_t const **rslt, uint32_t *length);
+
+/* IsSecondary
+ *
+ */
+bool CC AlignmentIsSecondary( const Alignment *self );
+
+
+/* AlignmentGetCG
+ * rc_t == 0, result == 0 if no CG data
+ */
+rc_t CC AlignmentGetCGData ( const Alignment *self, const CGData** result);
+
+/*--------------------------------------------------------------------------
+ * CGData
+ */
+rc_t CC CGDataAddRef ( const CGData *self );
+rc_t CC CGDataRelease ( const CGData *self );
+
+/* CGGetSeqQual
+ */
+rc_t CC CGDataGetSeqQual ( const CGData* self,
+ char sequence[/* 35 */],
+ uint8_t quality[/* 35 */] );
+
+/* CGGetCigar
+ */
+rc_t CC CGDataGetCigar ( const CGData* self,
+ uint32_t *cigar,
+ uint32_t cig_max,
+ uint32_t *cig_act );
+
+/* CGGetAlignGroup
+ */
+rc_t CC CGDataGetAlignGroup ( const CGData* self,
+ char buffer[],
+ size_t max_size,
+ size_t *act_size );
+
+/*--------------------------------------------------------------------------
+ * Rejected
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC RejectedAddRef ( const Rejected *self );
+rc_t CC RejectedRelease ( const Rejected *self );
+
+/* GetError
+ * "text" [ OUT ] - NUL-terminated error message, held internally
+ * "line" [ OUT ] - 1-based line # in the source (0 for binary formats)
+ * "column" [ OUT ] - 1-based column # in the source (offset from the start of the file for binary formats)
+ * "fatal" [ OUT ] - no further parsing should be done (likely an unsupported format)
+ */
+rc_t CC RejectedGetError( const Rejected* self, const char** text, uint64_t* line, uint64_t* column, bool* fatal );
+
+/* GetData
+ * "data" [ OUT ] - raw input representing the rejected record. held internally
+ * "length" [ OUT ] - size of the data buffer
+ */
+rc_t CC RejectedGetData( const Rejected* self, const void** text, size_t* length );
+
+/*--------------------------------------------------------------------------
+ * ReferenceInfo
+ */
+typedef struct ReferenceSequence
+{
+ uint64_t length;
+ const char *name; /* not null unique */
+ const uint8_t *checksum;
+} ReferenceSequence;
+
+typedef struct ReadGroup
+{
+ const char *name; /* not null unique, accession e.g. SRR001138 */
+ const char *platform; /* e.g. ILLUMINA */
+} ReadGroup;
+
+rc_t CC ReferenceInfoAddRef ( const ReferenceInfo *self );
+rc_t CC ReferenceInfoRelease ( const ReferenceInfo *self );
+
+/* GetRefSeqCount
+ * get the number of Reference Sequences refered to in the header
+ * this is not necessarily the number of Reference Sequences referenced
+ * by the alignments
+ */
+rc_t CC ReferenceInfoGetRefSeqCount ( const ReferenceInfo *self, uint32_t* count );
+
+/* GetRefSeq
+ * get the n'th Ref. Seq. where n is [0..RefSeqCount)
+ * the result is populated with pointers that are good for precisely at long as the ReferenceInfo exists.
+ */
+rc_t CC ReferenceInfoGetRefSeq ( const ReferenceInfo *self, uint32_t n, ReferenceSequence *result );
+
+/* GetReadGroupCount
+ * get the number of Read Groups (accessions, etc.) refered to in the header
+ * this is not necessarily the number of Read Groups referenced
+ * by the alignments
+ */
+rc_t CC ReferenceInfoGetReadGroupCount ( const ReferenceInfo *self, uint32_t *count );
+
+/* GetReadGroup
+ * get the n'th Read Group where n is [0..ReadGroupCount)
+ * the result is populated with pointers that are good for precisely at long as the ReferenceInfo exists.
+ */
+rc_t CC ReferenceInfoGetReadGroup ( const ReferenceInfo *self, unsigned n, ReadGroup *result );
+
+/* GetReadGroupByName
+ * get a Read Group by its name
+ * the result is populated with pointers that are good for precisely at long as the ReferenceInfo exists.
+ */
+rc_t CC ReferenceInfoGetReadGroupByName ( const ReferenceInfo *self, const char *name, ReadGroup *result );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_common_reader_ */
diff --git a/interfaces/loader/common-writer.h b/interfaces/loader/common-writer.h
new file mode 100644
index 0000000..c81c0ce
--- /dev/null
+++ b/interfaces/loader/common-writer.h
@@ -0,0 +1,190 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_common_writer_
+#define _h_common_writer_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifndef _h_insdc_sra_
+#include <insdc/sra.h>
+#endif
+
+#ifndef _h_mmarray_
+#include <loader/mmarray.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+struct VDBManager;
+struct VDatabase;
+struct KMemBank;
+struct KBTree;
+struct KLoadProgressbar;
+struct ReaderFile;
+struct CommonWriter;
+struct SequenceWriter;
+struct AlignmentWriter;
+struct Reference;
+
+/*--------------------------------------------------------------------------
+ * CommonWriterSettings
+ */
+enum LoaderModes {
+ mode_Archive,
+ mode_Analysis
+};
+
+typedef struct CommonWriterSettings
+{
+ uint64_t numfiles;
+ char const *inpath;
+ char const *outpath;
+ char const *tmpfs;
+
+ struct KFile *noMatchLog;
+
+ char const *schemaPath;
+ char const *schemaIncludePath;
+
+ char const *refXRefPath;
+
+ char const *QualQuantizer;
+
+ char const *refFilter;
+
+ char const** refFiles; /* NULL-terminated array pointing to argv */
+
+ char const *headerText;
+
+ uint64_t maxAlignCount;
+ size_t cache_size;
+
+ uint64_t errCount;
+ uint64_t maxErrCount;
+ uint64_t maxErrPct;
+ uint64_t maxWarnCount_NoMatch;
+ uint64_t maxWarnCount_DupConflict;
+ uint64_t pid;
+ uint64_t minMatchCount; /* minimum number of matches to count as an alignment */
+ int minMapQual;
+ enum LoaderModes mode;
+ uint32_t maxSeqLen;
+ bool omit_aligned_reads;
+ bool omit_reference_reads;
+ bool no_real_output;
+ bool expectUnsorted;
+ bool noVerifyReferences;
+ bool onlyVerifyReferences;
+ bool useQUAL;
+ bool limit2config;
+ bool editAlignedQual;
+ bool keepMismatchQual;
+ bool acceptBadDups; /* accept spots with inconsistent PCR duplicate flags */
+ bool acceptNoMatch; /* accept without any matching bases */
+ uint8_t alignedQualValue;
+ bool allUnaligned; /* treat all records as unaligned */
+ bool noColorSpace;
+ bool noSecondary;
+ bool hasTI;
+ bool acceptHardClip;
+ INSDC_SRA_platform_id platform;
+ bool parseSpotName;
+} CommonWriterSettings;
+
+/*--------------------------------------------------------------------------
+ * SpotAssembler
+ */
+
+#define FRAG_CHUNK_SIZE (128)
+
+typedef struct SpotAssembler {
+ const struct KLoadProgressbar *progress[4];
+ struct KBTree *key2id[NUM_ID_SPACES];
+ char *key2id_names;
+ struct MMArray *id2value;
+ struct KMemBank *fragsBoth; /*** mate will be there soon ***/
+ struct KMemBank *fragsOne; /*** mate may not be found soon or even show up ***/
+ int64_t spotId;
+ int64_t primaryId;
+ int64_t secondId;
+ uint64_t alignCount;
+
+ uint32_t idCount[NUM_ID_SPACES];
+ uint32_t key2id_hash[NUM_ID_SPACES];
+
+ unsigned key2id_max;
+ unsigned key2id_name_max;
+ unsigned key2id_name_alloc;
+ unsigned key2id_count;
+
+ unsigned key2id_name[NUM_ID_SPACES];
+ /* this array is kept in name order */
+ /* this maps the names to key2id and idCount */
+ unsigned key2id_oid[NUM_ID_SPACES];
+
+ unsigned pass;
+ bool isColorSpace;
+
+} SpotAssembler;
+
+INSDC_SRA_platform_id PlatformToId(const char* name);
+
+/*--------------------------------------------------------------------------
+ * CommonWriter
+ */
+typedef struct CommonWriter {
+ CommonWriterSettings settings;
+ SpotAssembler ctx;
+ struct Reference* ref;
+ struct SequenceWriter* seq;
+ struct AlignmentWriter* align;
+ bool had_alignments;
+ bool had_sequences;
+ unsigned err_count;
+ bool commit;
+} CommonWriter;
+
+rc_t CommonWriterInit(CommonWriter* self, struct VDBManager *mgr, struct VDatabase *db, const CommonWriterSettings* settings);
+
+rc_t CommonWriterArchive(CommonWriter* self, const struct ReaderFile *);
+rc_t CommonWriterComplete(CommonWriter* self, bool quitting);
+
+rc_t CommonWriterWhack(CommonWriter* self);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_common_writer_ */
diff --git a/interfaces/loader/mmarray.h b/interfaces/loader/mmarray.h
new file mode 100644
index 0000000..7786b81
--- /dev/null
+++ b/interfaces/loader/mmarray.h
@@ -0,0 +1,50 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_mmarray_
+#define _h_mmarray_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+struct KFile;
+
+#define NUM_ID_SPACES (256u)
+
+struct MMArray;
+
+rc_t MMArrayMake(struct MMArray **rslt, struct KFile *fp, uint32_t elemSize);
+
+rc_t MMArrayGet(struct MMArray *const self, void **const value, uint64_t const element);
+
+void MMArrayWhack(struct MMArray *self);
+
+#endif
diff --git a/interfaces/loader/reference-writer.h b/interfaces/loader/reference-writer.h
new file mode 100644
index 0000000..7e354e4
--- /dev/null
+++ b/interfaces/loader/reference-writer.h
@@ -0,0 +1,78 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef LOADER_REFERENCE_WRITER_H_
+#define LOADER_REFERENCE_WRITER_H_ 1
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <klib/data-buffer.h>
+
+#include <align/writer-reference.h>
+#include "alignment-writer.h"
+
+typedef struct Reference {
+ const ReferenceMgr *mgr;
+ const ReferenceSeq *rseq;
+ int64_t lastRefId;
+ int32_t lastOffset;
+ unsigned curPos;
+ unsigned endPos;
+ unsigned length;
+ KDataBuffer coverage;
+ KDataBuffer mismatches;
+ KDataBuffer indels;
+ KDataBuffer pri_align;
+ KDataBuffer sec_align;
+ KDataBuffer pri_overlap;
+ KDataBuffer sec_overlap;
+ bool out_of_order;
+ bool acceptHardClip;
+ char last_id[256];
+} Reference;
+
+rc_t ReferenceInit(Reference *self, const VDBManager *mgr, VDatabase *db,
+ bool expectUnsorted,
+ bool acceptHardClip,
+ char const *refXRefPath,
+ char const *inpath,
+ uint32_t maxSeqLen, /*TODO: save in Reference object, reuse in other functions*/
+ char const** refFiles
+ );
+rc_t ReferenceSetFile(Reference *self, const char *id, uint64_t length, uint8_t const md5[16], uint32_t maxSeqLen);
+rc_t ReferenceVerify(Reference const *self, char const id[], uint64_t length, uint8_t const md5[16]);
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[]);
+rc_t ReferenceAddAlignId(Reference *self,
+ int64_t align_id,
+ bool is_primary
+ );
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t const pos,
+ uint32_t const rawCigar[], uint32_t const cigCount,
+ char const seqDNA[], uint32_t const seqLen, uint32_t *matches, bool acceptNoMatch, unsigned minMatchCount, uint32_t maxSeqLen);
+rc_t ReferenceWhack(Reference *self, bool commit, uint32_t maxSeqLen);
+
+#endif
diff --git a/interfaces/loader/sequence-writer.h b/interfaces/loader/sequence-writer.h
new file mode 100644
index 0000000..c7565cb
--- /dev/null
+++ b/interfaces/loader/sequence-writer.h
@@ -0,0 +1,91 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_SEQUENCE_WRITER_H_
+#define BAM_LOAD_SEQUENCE_WRITER_H_ 1
+
+#include <insdc/sra.h>
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+
+struct TableWriterSeq;
+
+typedef struct s_sequence_record {
+ char *seq;
+ uint8_t *qual;
+ uint32_t *readStart;
+ uint32_t *readLen;
+ uint8_t *orientation;
+ uint8_t *is_bad;
+ uint8_t *alignmentCount;
+ char *spotGroup;
+ bool *aligned;
+ char *cskey;
+ uint64_t *ti;
+ uint64_t keyId;
+ unsigned spotGroupLen;
+ KDataBuffer storage;
+ uint8_t numreads;
+} SequenceRecord;
+
+
+rc_t SequenceRecordInit(SequenceRecord *self,
+ unsigned numreads, unsigned readLen[]);
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+ const SequenceRecord *other);
+
+typedef struct SequenceWriter {
+ VDatabase *db;
+ struct TableWriterSeq const *tbl;
+} SequenceWriter;
+
+SequenceWriter *SequenceWriterInit(SequenceWriter *self, VDatabase *db);
+
+rc_t SequenceWriteRecord(SequenceWriter *self, SequenceRecord const *rec,
+ bool color, bool isDup, INSDC_SRA_platform_id platform,
+ bool keepMismatchQual,
+ bool no_real_output,
+ bool hasTI,
+ char const *QualQuantizer
+ );
+
+rc_t SequenceDoneWriting(SequenceWriter *self);
+rc_t SequenceReadKey(const SequenceWriter *self, int64_t row, uint64_t *key);
+rc_t SequenceUpdateAlignData(SequenceWriter *self, int64_t row, unsigned nreads,
+ const int64_t primeId[/* nreads */],
+ const uint8_t alignCount[/* nreads */]);
+
+void SequenceWhack(SequenceWriter *self, bool commit);
+
+
+#endif /* ndef BAM_LOAD_SEQUENCE_WRITER_H_ */
diff --git a/interfaces/ncbi/seq.vschema b/interfaces/ncbi/seq.vschema
index 707def9..bfb8f1a 100644
--- a/interfaces/ncbi/seq.vschema
+++ b/interfaces/ncbi/seq.vschema
@@ -358,9 +358,6 @@ table NCBI:tbl:base_space #2.0.3
* nucleotide sequences in color space
*/
-/* TBD - does this function need to know something about
- * whether a read is forward or reverse?
- */
extern function
INSDC:x2na:bin NCBI:dna_from_color #1 ( INSDC:x2cs:bin color_bin,
INSDC:coord:zero read_start, INSDC:coord:len read_len,
@@ -377,8 +374,7 @@ table NCBI:tbl:dcmp_color_space #1
INSDC:dna:text dcmp_virtual_productions
= out_dcmp_x2cs_bin
| out_dcmp_2cs_bin
- | out_dcmp_2cs_packed
- | out_dcmp_cs_key;
+ | out_dcmp_2cs_packed;
}
/* history:
@@ -449,7 +445,6 @@ table NCBI:tbl:color_space_common #1.0.3
*/
/* NCBI:tbl:dcmp_color_space inherited productions
- * out_dcmp_cs_key
* out_dcmp_2cs_bin
* out_dcmp_x2cs_bin
* out_dcmp_2cs_packed
@@ -599,9 +594,7 @@ table NCBI:tbl:color_space #2.1
| ( INSDC:x2cs:bin ) out_2cs_bin;
// read directly from physical column
- INSDC:dna:text out_cs_key
- = .CS_KEY
- | out_dcmp_cs_key;
+ INSDC:dna:text out_cs_key = .CS_KEY;
// color matrix may be synthesized
U8 out_color_matrix
@@ -614,7 +607,6 @@ table NCBI:tbl:color_space #2.1
*/
/* NCBI:tbl:dcmp_color_space inherited productions
- * out_dcmp_cs_key
* out_dcmp_2cs_bin
* out_dcmp_x2cs_bin
* out_dcmp_2cs_packed
@@ -653,6 +645,7 @@ table NCBI:tbl:protein #1 = INSDC:tbl:protein
* reserves value 0 as ambiguity symbol for reads
*/
+
/* history:
* 1.0.1 - base explicitly upon sequence #1.0.1
*/
@@ -696,8 +689,10 @@ table NCBI:tbl:phred_quality #1.0.1 = NCBI:tbl:phred_quality_nocol #1.0.1
* 2.0.1 - added feed of in_stats_qual
* 2.0.2 - added input of text encodings
* 2.0.3 - base explicitly upon sequence #1.0.1
+ * 2.0.4 - change compression from izip to zip
+ * 2.0.5 - change from zip to delta_average_zip
*/
-table NCBI:tbl:phred_quality #2.0.3 = INSDC:tbl:sequence #1.0.1
+table NCBI:tbl:phred_quality #2.0.4 = INSDC:tbl:sequence #1.0.1
{
// read directly quality as phred
INSDC:quality:phred out_qual_phred = .QUALITY;
@@ -712,7 +707,10 @@ table NCBI:tbl:phred_quality #2.0.3 = INSDC:tbl:sequence #1.0.1
| ( INSDC:quality:phred ) < B8 > diff < 64 > ( in_qual_text_phred_64 );
// physical storage
- physical column < INSDC:quality:phred > izip_encoding .QUALITY = in_qual_phred;
+/*** next line is for future change in production, but we have to wait until supporting code is released to the public ***/
+// physical column < INSDC:quality:phred > delta_average_zip_encoding .QUALITY = in_qual_phred;
+/*** NB *** MUST change table version to 2.0.5 and propagate to all derived tables ***/
+ physical column < INSDC:quality:phred > zip_encoding .QUALITY = in_qual_phred;
// feed to compressed statistics
INSDC:quality:phred in_stats_qual = in_qual_phred;
@@ -856,8 +854,9 @@ table NCBI:tbl:log_odds_quality_nocol #2.0.1 = INSDC:tbl:sequence #1.0.1
* 2.0.1 - added feed of in_stats_qual
* 2.0.2 - added input of text encodings
* 2.0.3 - base explicitly upon log_odds_quality_nocol #2.0.1
+ * 2.0.4 - changed compression from izip to zip
*/
-table NCBI:tbl:log_odds_quality #2.0.3 = NCBI:tbl:log_odds_quality_nocol #2.0.1
+table NCBI:tbl:log_odds_quality #2.0.4 = NCBI:tbl:log_odds_quality_nocol #2.0.1
{
INSDC:quality:log_odds out_qual_log_odds= .QUALITY;
@@ -872,7 +871,7 @@ table NCBI:tbl:log_odds_quality #2.0.3 = NCBI:tbl:log_odds_quality_nocol #2.0.1
= QUALITY
| ( INSDC:quality:log_odds ) < B8 > diff < 64 > ( in_qual_text_log_odds_64 );
- physical column < INSDC:quality:log_odds > izip_encoding .QUALITY
+ physical column < INSDC:quality:log_odds > zip_encoding .QUALITY
= in_qual_log_odds;
// feed to compressed statistics
diff --git a/interfaces/ncbi/wgs-contig.h b/interfaces/ncbi/wgs-contig.h
new file mode 100644
index 0000000..7b8ab2d
--- /dev/null
+++ b/interfaces/ncbi/wgs-contig.h
@@ -0,0 +1,176 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_ncbi_wgs_contig_
+#define _h_ncbi_wgs_contig_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*==========================================================================
+ * WGS Contig
+ */
+
+
+/*--------------------------------------------------------------------------
+ * types
+ * constants
+ */
+
+/* component_props
+ * a signed value describing either contigs or gaps
+ * where values >= 0 refer to contigs
+ * and negatives describe gaps
+ */
+typedef int16_t NCBI_WGS_component_props;
+
+/* component description
+ * the sequencing status of the component
+ *
+ * These typically correspond to keywords in the INSDC submission.
+ * Current acceptable values are_
+ * A Active Finishing
+ * D Draft HTG (often phase1 and phase2 are called Draft,
+ * whether or not they have the draft keyword).
+ * F Finished HTG (phase3)
+ * G Whole Genome Finishing
+ * O Other sequence (typically means no HTG keyword)
+ * P Pre Draft
+ * W WGS contig
+ */
+enum
+{
+ NCBI_WGS_component_WGS = 0,
+ NCBI_WGS_component_ActiveFinishing = 1,
+ NCBI_WGS_component_DraftHTG = 2,
+ NCBI_WGS_component_FinishedHTG = 3,
+ NCBI_WGS_component_WholeGenomeFinishing = 4,
+ NCBI_WGS_component_OtherSequence = 5,
+ NCBI_WGS_component_PreDraft = 6
+};
+
+/* strand
+ * specifies the orientation of the component relative to scaffold
+ * values given allow strand to be determined as "prop / 16"
+ * yielding_
+ * 0 unknown orientation
+ * 1 plus strand
+ * 2 negative strand
+ */
+enum
+{
+ NCBI_WGS_strand_plus = 1 * 16,
+ NCBI_WGS_strand_minus = 2 * 16
+};
+
+
+/* gap description
+ * These typically correspond to keywords in the INSDC submission.
+ * Current acceptable values are_
+ * N gap with specified size
+ * U gap of unknown size, defaulting to 100 bases.
+ */
+enum
+{
+ NCBI_WGS_gap_known = 1 * -1,
+ NCBI_WGS_gap_unknown = 2 * -1
+};
+
+/* gap type
+ * scaffold a gap between two sequence contigs in a scaffold
+ * contig an unspanned gap between two sequence contigs
+ * centromere a gap inserted for the centromere
+ * short_arm a gap inserted at the start of an acrocentric chromosome
+ * heterochromatin a gap inserted for an especially large region of heterochromatic sequence
+ * telomere a gap inserted for the telomere
+ * repeat an unresolvable repeat
+ */
+enum
+{
+ NCBI_WGS_gap_scaffold = 1 * -4,
+ NCBI_WGS_gap_contig = 2 * -4,
+ NCBI_WGS_gap_centromere = 3 * -4,
+ NCBI_WGS_gap_short_arm = 4 * -4,
+ NCBI_WGS_gap_heterochromatin = 5 * -4,
+ NCBI_WGS_gap_telomere = 6 * -4,
+ NCBI_WGS_gap_repeat = 7 * -4
+};
+
+/* gap linkage evidence
+ * paired-ends paired sequences from the two ends of a DNA fragment
+ * align_genus alignment to a reference genome within the same genus
+ * align_xgenus alignment to a reference genome within another genus
+ * align_trnscpt alignment to a transcript from the same species
+ * within_clone sequence on both sides of the gap is derived from
+ * the same clone, but the gap is not spanned by paired-ends
+ * clone_contig linkage is provided by a clone contig in the tiling path
+ * map linkage asserted using a non-sequence based map
+ * such as RH, linkage, fingerprint or optical
+ * strobe strobe sequencing (PacBio)
+ * unspecified
+ */
+enum
+{
+ NCBI_WGS_gap_linkage_paired_ends = 1 * -64,
+ NCBI_WGS_gap_linkage_align_genus = 2 * -64,
+ NCBI_WGS_gap_linkage_align_xgenus = 3 * -64,
+ NCBI_WGS_gap_linkage_align_trnscpt = 4 * -64,
+ NCBI_WGS_gap_linkage_within_clone = 5 * -64,
+ NCBI_WGS_gap_linkage_clone_contig = 6 * -64,
+ NCBI_WGS_gap_linkage_map = 7 * -64,
+ NCBI_WGS_gap_linkage_strobe = 8 * -64,
+ NCBI_WGS_gap_linkage_unspecified = 9 * -64
+};
+
+
+/*--------------------------------------------------------------------------
+ * accession tokenization constants
+ */
+
+/* tokenize_nuc_accession
+ * tokenize_prot_accession
+ * scans name on input
+ * tokenizes into parts
+ */
+enum
+{
+ NCBI_WGS_acc_token_unrecognized = 1,
+ NCBI_WGS_acc_token_prefix = 2,
+ NCBI_WGS_acc_token_contig = 3
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_ncbi_wgs_contig_ */
diff --git a/interfaces/ncbi/wgs-contig.vschema b/interfaces/ncbi/wgs-contig.vschema
new file mode 100644
index 0000000..c31914f
--- /dev/null
+++ b/interfaces/ncbi/wgs-contig.vschema
@@ -0,0 +1,660 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*==========================================================================
+ * WGS Contig
+ */
+version 1;
+
+include 'vdb/vdb.vschema';
+include 'ncbi/ncbi.vschema';
+include 'ncbi/seq.vschema';
+include 'ncbi/spotname.vschema';
+include 'ncbi/stats.vschema';
+
+
+/*--------------------------------------------------------------------------
+ * types
+ * constants
+ */
+
+/* component_props
+ * a signed value describing either contigs or gaps
+ * where values >= 0 refer to contigs
+ * and negatives describe gaps
+ */
+typedef I16 NCBI:WGS:component_props;
+
+/* component description
+ * the sequencing status of the component
+ *
+ * These typically correspond to keywords in the INSDC submission.
+ * Current acceptable values are:
+ * A Active Finishing
+ * D Draft HTG (often phase1 and phase2 are called Draft,
+ * whether or not they have the draft keyword).
+ * F Finished HTG (phase3)
+ * G Whole Genome Finishing
+ * O Other sequence (typically means no HTG keyword)
+ * P Pre Draft
+ * W WGS contig
+ */
+const NCBI:WGS:component_props NCBI:WGS:component:WGS = 0;
+const NCBI:WGS:component_props NCBI:WGS:component:ActiveFinishing = 1;
+const NCBI:WGS:component_props NCBI:WGS:component:DraftHTG = 2;
+const NCBI:WGS:component_props NCBI:WGS:component:FinishedHTG = 3;
+const NCBI:WGS:component_props NCBI:WGS:component:WholeGenomeFinishing = 4;
+const NCBI:WGS:component_props NCBI:WGS:component:OtherSequence = 5;
+const NCBI:WGS:component_props NCBI:WGS:component:PreDraft = 6;
+
+/* strand
+ * specifies the orientation of the component relative to scaffold
+ * values given allow strand to be determined as "prop / 16"
+ * yielding:
+ * 0 unknown orientation
+ * 1 plus strand
+ * 2 negative strand
+ */
+const NCBI:WGS:component_props NCBI:WGS:strand:plus = 16;
+const NCBI:WGS:component_props NCBI:WGS:strand:minus = 32;
+
+
+/* gap description
+ * These typically correspond to keywords in the INSDC submission.
+ * Current acceptable values are:
+ * N gap with specified size
+ * U gap of unknown size, defaulting to 100 bases.
+ */
+const NCBI:WGS:component_props NCBI:WGS:gap:known = -1;
+const NCBI:WGS:component_props NCBI:WGS:gap:unknown = -2;
+
+/* gap type
+ * scaffold a gap between two sequence contigs in a scaffold
+ * contig an unspanned gap between two sequence contigs
+ * centromere a gap inserted for the centromere
+ * short_arm a gap inserted at the start of an acrocentric chromosome
+ * heterochromatin a gap inserted for an especially large region of heterochromatic sequence
+ * telomere a gap inserted for the telomere
+ * repeat an unresolvable repeat
+ */
+const NCBI:WGS:component_props NCBI:WGS:gap:scaffold = -4;
+const NCBI:WGS:component_props NCBI:WGS:gap:contig = -8;
+const NCBI:WGS:component_props NCBI:WGS:gap:centromere = -12;
+const NCBI:WGS:component_props NCBI:WGS:gap:short_arm = -16;
+const NCBI:WGS:component_props NCBI:WGS:gap:heterochromatin = -20;
+const NCBI:WGS:component_props NCBI:WGS:gap:telomere = -24;
+const NCBI:WGS:component_props NCBI:WGS:gap:repeat = -28;
+
+/* gap linkage evidence
+ * paired-ends paired sequences from the two ends of a DNA fragment
+ * align_genus alignment to a reference genome within the same genus
+ * align_xgenus alignment to a reference genome within another genus
+ * align_trnscpt alignment to a transcript from the same species
+ * within_clone sequence on both sides of the gap is derived from
+ * the same clone, but the gap is not spanned by paired-ends
+ * clone_contig linkage is provided by a clone contig in the tiling path
+ * map linkage asserted using a non-sequence based map
+ * such as RH, linkage, fingerprint or optical
+ * strobe strobe sequencing (PacBio)
+ * unspecified
+ */
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:paired_ends = -64;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:align_genus = -128;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:align_xgenus = -192;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:align_trnscpt = -256;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:within_clone = -320;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:clone_contig = -384;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:map = -448;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:strobe = -512;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:unspecified = -576;
+
+
+/*--------------------------------------------------------------------------
+ * functions
+ */
+
+/* tokenize_nuc_accession
+ * tokenize_prot_accession
+ * scans name on input
+ * tokenizes into parts
+ */
+extern function text:token
+ NCBI:WGS:tokenize_nuc_accession #1 ( ascii acc );
+extern function text:token
+ NCBI:WGS:tokenize_prot_accession #1 ( ascii acc );
+
+const U16 NCBI:WGS:acc_token:unrecognized = 1;
+const U16 NCBI:WGS:acc_token:prefix = 2;
+const U16 NCBI:WGS:acc_token:contig = 3;
+
+
+/* build_scaffold_read
+ * assembles contigs and gaps into a single row
+ * transcribes + strand contigs as they are,
+ * performs reverse complement of - strand contigs,
+ * fills gaps with stated number of N
+ *
+ * build_scaffold_quality
+ * assembles contig and gap qualities into a single row
+ * contig qualities are taken as they are,
+ * gap qualities are assigned a constant
+ *
+ * "component_start" [ DATA ] - starting locations on each
+ * component or 0 for gaps. normal starting point is 0,
+ * but offsets are supported.
+ * NB - ONE-BASED COORDINATES
+ *
+ * "component_len" [ DATA ] - length of contig sequence
+ * from component_start, or length of gap, projected onto
+ * scaffold at scaffold_start.
+ *
+ * "component_props" [ DATA ] - see discussion of type
+ * distinguish between contigs and gaps, indicate strand
+ *
+ * "component_id" [ DATA ] - foreign keys into SEQUENCE table
+ * row_len ( component_id ) == count-of-contigs ( component_props )
+ */
+extern function INSDC:4na:bin NCBI:WGS:build_scaffold_read #1
+ ( INSDC:coord:one component_start, INSDC:coord:len component_len,
+ NCBI:WGS:component_props component_props, I64 component_id );
+
+extern function INSDC:quality:phred NCBI:WGS:build_scaffold_qual #1
+ ( INSDC:coord:one component_start, INSDC:coord:len component_len,
+ NCBI:WGS:component_props component_props, I64 component_id );
+
+
+/* build_read_type
+ * generate standard SRA read type from component properties
+ * contigs are biological, gaps are technical
+ *
+ * "component_props" [ DATA ] - see discussion of type
+ * distinguish between contigs and gaps, indicate strand
+ */
+extern function INSDC:SRA:xread_type
+ NCBI:WGS:build_read_type #1 ( NCBI:WGS:component_props component_props );
+
+
+/*--------------------------------------------------------------------------
+ * nucleotide
+ */
+table NCBI:WGS:tbl:nucleotide #1.1
+ = NCBI:tbl:base_space #2.0.3
+ , NCBI:tbl:phred_quality #2.0.4
+ , NCBI:SRA:tbl:stats #1.2.0
+{
+ /* ACCESSION
+ * [<opt-prefix>]<4-letter-prefix><2-digit-version><6-or-7-digit-contig>
+ */
+ extern column ascii ACCESSION = out_accession;
+ extern column U32 ACC_VERSION = .ACC_VERSION | <U32> echo <1> ();
+
+ // input
+ ascii in_accession = ACCESSION;
+
+ // parsed input
+ text:token in_acc_token
+ = NCBI:WGS:tokenize_nuc_accession ( in_accession );
+ // [<opt-prefix>]<4-letter-prefix><2-digit-version>
+ ascii in_acc_prefix
+ = extract_token < 0 > ( in_accession, in_acc_token );
+ // <6-or-7-digit-contig>
+ ascii in_contig_text
+ = extract_token < 1 > ( in_accession, in_acc_token );
+ U32 in_contig_len
+ = row_len ( in_contig_text );
+ U64 in_contig_bin
+ = strtonum ( in_contig_text );
+
+ // physical storage
+ physical column < ascii > zip_encoding .ACC_PREFIX = in_acc_prefix;
+ physical column < U32 > izip_encoding .ACC_CONTIG_LEN = in_contig_len;
+ physical column < U64 > izip_encoding .ACC_CONTIG = in_contig_bin;
+ physical column < U32 > izip_encoding .ACC_VERSION = ACC_VERSION; //needed to back-fill WGS data from ID where version may be > 1
+
+ // output
+ ascii out_acc_prefix
+ = .ACC_PREFIX
+ | < ascii > meta:read < 'ACC_PREFIX', true > ()
+ ;
+ U32 out_acc_contig_len
+ = .ACC_CONTIG_LEN
+ | < U32 > meta:value < 'ACC_CONTIG_LEN', true > ()
+ ;
+ U64 out_acc_contig
+ = .ACC_CONTIG
+ | ( U64 ) row_id ()
+ ;
+ ascii out_accession
+ = sprintf < "%s%0*u" > ( out_acc_prefix, out_acc_contig_len, out_acc_contig );
+
+ readonly column ascii ACC_PREFIX
+ = .ACC_PREFIX
+ | < ascii > meta:read < 'ACC_PREFIX', true > ()
+ ;
+ readonly column U32 ACC_CONTIG_LEN
+ = .ACC_CONTIG_LEN
+ | < U32 > meta:value < 'ACC_CONTIG_LEN', true > ()
+ ;
+
+ /* CONTIG_NAME
+ * principal name
+ */
+ extern column utf8 CONTIG_NAME
+ = idx:text:project < 'contig_name' > ( .CONTIG_NAME );
+
+ physical column < utf8 > zip_encoding .CONTIG_NAME
+ = idx:text:insert < 'contig_name' > ( CONTIG_NAME );
+
+ ascii out_contig_name = cast ( CONTIG_NAME );
+
+ // NB - this is only useful if CONTIG_NAME is unique
+ // or if clustered by CONTIG_NAME
+ readonly column vdb:row_id_range CONTIG_NAME_ROW_RANGE
+ = idx:text:lookup < 'contig_name', 'NAME_QUERY' > ();
+
+ /* EXTRA_SEQIDS
+ * pipe-separated list of additional names
+ */
+ extern column < ascii > zip_encoding EXTRA_SEQIDS;
+
+ /* TITLE
+ */
+ extern column < ascii > zip_encoding TITLE;
+
+ /* GI
+ * gi is indexed in a parallel table
+ */
+ extern column < NCBI:gi > izip_encoding GI;
+
+ /* TAXID
+ * taxonomy id
+ */
+ extern column < NCBI:taxid > izip_encoding TAXID;
+
+ /* GB_STATE
+ * genbank state
+ */
+ extern column < NCBI:gb_state > izip_encoding GB_STATE;
+
+ /* DESCR
+ * ASN.1 description
+ */
+ extern column < NCBI:asn:binary > zip_encoding DESCR;
+
+ /* ANNOT
+ * ASN.1 annotation
+ */
+ extern column < NCBI:asn:binary > zip_encoding ANNOT;
+
+ ascii out_seqid_gi = sprintf < "gi|%u" > ( .GI );
+ ascii out_seqid_gb = sprintf < "gb|%s.%u|" > ( out_accession, ACC_VERSION )
+ | sprintf < "gb|%s.1|" > ( out_accession );
+ ascii out_seqid_gnl = sprintf < "gnl|WGS:%s|%s" > (.ACC_PREFIX, out_contig_name ) | <ascii> echo < '' > ();
+
+
+ /* outputs to spotname */
+ ascii out_seqid_name
+ = sprintf < "%s|%s" > ( out_seqid_gi , out_seqid_gb )
+ | sprintf < "%s" > ( out_seqid_gb );
+
+ ascii out_spot_name = sprintf < "%s %s" > ( out_seqid_name, .TITLE );
+
+ readonly column ascii SEQ_ID = out_seqid_name;
+ readonly column ascii SEQ_ID_GNL = out_seqid_gnl;
+
+ /* outputs to spotdesc */
+ // INSDC:coord:len in_read_len = (INSDC:coord:len) row_len ( in_2na_bin );
+ INSDC:coord:len out_read_len = (INSDC:coord:len) row_len ( out_2na_bin );
+ INSDC:coord:len trim_len = (INSDC:coord:len) row_len ( out_2na_bin );
+ INSDC:coord:zero out_read_start = <INSDC:coord:zero> echo < 0 > ();
+ INSDC:coord:zero trim_start = <INSDC:coord:zero> echo < 0 > ();
+ INSDC:SRA:read_filter out_rd_filter = < INSDC:SRA:read_filter > echo < SRA_READ_FILTER_PASS > ();
+ INSDC:SRA:xread_type out_read_type = < INSDC:SRA:xread_type > echo < SRA_READ_TYPE_BIOLOGICAL > ();
+ // help trigger statistics
+ INSDC:SRA:xread_type _alt_in_read_type = < INSDC:SRA:xread_type > echo < SRA_READ_TYPE_BIOLOGICAL > ();
+ INSDC:coord:len _alt_in_read_len = (INSDC:coord:len) row_len ( in_2na_bin );
+
+ ascii out_label = < ascii > echo < "contig" > ();
+ INSDC:coord:len out_label_len = < INSDC:coord:len > echo < 6 > ();
+ INSDC:coord:zero out_label_start = < INSDC:coord:zero > echo < 0 > ();
+
+ INSDC:SRA:platform_id out_platform = < INSDC:SRA:platform_id > echo < SRA_PLATFORM_UNDEFINED > ();
+};
+
+
+/*--------------------------------------------------------------------------
+ * protein
+ * contig
+ */
+table NCBI:WGS:tbl:protein #1
+ = NCBI:tbl:protein #1.0.0
+{
+ /* ACCESSION
+ * [<opt-prefix>]<4-letter-prefix><2-digit-version><6-or-7-digit-contig>
+ */
+ extern column ascii ACCESSION = out_accession;
+
+ // input
+ ascii in_accession = ACCESSION;
+
+ // parsed input
+ text:token in_acc_token
+ = NCBI:WGS:tokenize_prot_accession ( in_accession );
+ // [<opt-prefix>]<4-letter-prefix><2-digit-version>
+ ascii in_acc_prefix
+ = extract_token < 0 > ( in_accession, in_acc_token );
+ // <6-or-7-digit-contig>
+ ascii in_contig_text
+ = extract_token < 1 > ( in_accession, in_acc_token );
+ U32 in_contig_len
+ = row_len ( in_contig_text );
+ I64 in_contig_bin
+ = strtonum ( in_contig_text );
+
+ // physical storage
+ physical column < ascii > zip_encoding .ACC_PREFIX = in_acc_prefix;
+ physical column < U32 > izip_encoding .ACC_CONTIG_LEN = in_contig_len;
+ physical column < U64 > izip_encoding .ACC_CONTIG = in_contig_bin;
+
+ // output
+ ascii out_acc_prefix
+ = .ACC_PREFIX
+ | < ascii > meta:read < 'ACC_PREFIX', true > ()
+ ;
+ U32 out_acc_contig_len
+ = .ACC_CONTIG_LEN
+ | < U32 > meta:value < 'ACC_CONTIG_LEN', true > ()
+ ;
+ U64 out_acc_contig
+ = .ACC_CONTIG
+ | ( U64 ) row_id ()
+ ;
+ ascii out_accession
+ = sprintf < "%s%0*u" > ( out_acc_prefix, out_acc_contig_len, out_acc_contig );
+
+ /* TITLE
+ */
+ extern column < ascii > zip_encoding TITLE;
+
+ /* GI
+ * gi is indexed in a parallel table
+ */
+ extern column < NCBI:gi > izip_encoding GI;
+
+ /* GB_STATE
+ * genbank state
+ */
+ extern column < NCBI:gb_state > izip_encoding GB_STATE;
+
+ /* DESCR
+ * ASN.1 description
+ */
+ extern column < NCBI:asn:binary > zip_encoding DESCR;
+
+ /* ANNOT
+ * ASN.1 annotation
+ */
+ extern column < NCBI:asn:binary > zip_encoding ANNOT;
+
+ /* outputs to spotname */
+ ascii out_seqid_name = sprintf < "TBD" > ( .ACC_PREFIX, out_accession );
+ ascii out_spot_name = sprintf < "%s %s" > ( out_seqid_name, .TITLE );
+
+ /* TBD
+ * need to create an extension to NCBI:tbl:protein
+ * that satisfies fastq-dump requirements for READ and QUALITY
+ */
+};
+
+
+/*--------------------------------------------------------------------------
+ * gi_idx
+ * gi is row-id
+ */
+table NCBI:WGS:tbl:gi_idx #1
+{
+ /* NUC_ROW_ID
+ * row-id in nucleotide table
+ */
+ extern column < I64 > izip_encoding NUC_ROW_ID;
+
+ /* PROT_ROW_ID
+ * row-id in protein table
+ */
+ extern column < I64 > izip_encoding PROT_ROW_ID;
+};
+
+
+/*--------------------------------------------------------------------------
+ * scaffold
+ * records AGP data
+ */
+table NCBI:WGS:tbl:scaffold #1
+{
+ /* SCAFFOLD_NAME
+ * This is the identifier for the object being assembled.
+ * This can be a chromosome, scaffold or contig.
+ * If an accession.version identifier is not used to describe
+ * the object the naming convention is to precede chromosome numbers
+ * (e.g. chr1) and linkage group numbers (e.g. LG3).
+ * Contigs or scaffolds may have any identifier that is unique
+ * within the assembly
+ */
+ extern column utf8 SCAFFOLD_NAME
+ = out_scaffold_name;
+ extern column ascii SCAFFOLD_NAME = cast (out_scaffold_name);
+ utf8 out_scaffold_name
+ = idx:text:project < 'scaffold_name' > ( .SCAFFOLD_NAME );
+ physical column < utf8 > zip_encoding .SCAFFOLD_NAME
+ = idx:text:insert < 'scaffold_name' > ( SCAFFOLD_NAME );
+
+ /* COMPONENT_START
+ * starting position within the component sequence
+ */
+ extern column < INSDC:coord:one > izip_encoding COMPONENT_START;
+
+ /* COMPONENT_LEN
+ * length of the component/gap projected onto the scaffold
+ */
+ extern column < INSDC:coord:len > izip_encoding COMPONENT_LEN;
+
+ /* COMPONENT_PROPS
+ * see description of type
+ */
+ extern column < NCBI:WGS:component_props > zip_encoding COMPONENT_PROPS;
+
+ /* COMPONENT_ID
+ * one row-id for each non-gap component in COMPONENT_TYPE
+ */
+ extern column < I64 > izip_encoding COMPONENT_ID;
+}
+
+table NCBI:WGS:view:scaffold #1 = NCBI:WGS:tbl:scaffold #1
+{
+ /* ACCESSION
+ * scaffold accession
+ */
+ readonly column ascii ACCESSION
+ = out_accession;
+ I64 scaffold_row_id
+ = row_id ();
+ I64 acc_row_id
+ = < I64 > echo < 1 > ();
+ ascii acc_prefix
+ = < ascii > simple_sub_select < 'SEQUENCE', 'ACC_PREFIX' > ( acc_row_id );
+ U32 acc_contig_len
+ = < ascii > simple_sub_select < 'SEQUENCE', 'ACC_CONTIG_LEN' > ( acc_row_id );
+ ascii out_accession
+ = sprintf < "%sS%0*d" > ( acc_prefix, acc_contig_len, scaffold_row_id );
+
+ /* READ
+ * base space construction of entire scaffold
+ */
+
+ // construct the read from contigs and gaps
+ INSDC:4na:bin out_4na_bin = NCBI:WGS:build_scaffold_read
+ ( .COMPONENT_START, .COMPONENT_LEN, .COMPONENT_PROPS, .COMPONENT_ID );
+
+ // various READ columns
+ default readonly column INSDC:dna:text READ
+ = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_4na_bin );
+ readonly column INSDC:4na:bin READ
+ = out_4na_bin;
+ readonly column INSDC:4na:packed READ
+ = pack ( out_4na_bin );
+ readonly column INSDC:x2na:bin READ
+ = out_x2na_bin;
+ INSDC:x2na:bin out_x2na_bin
+ = < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( out_4na_bin );
+ readonly column INSDC:2na:bin READ
+ = out_2na_bin;
+ INSDC:2na:bin out_2na_bin
+ = < INSDC:x2na:bin, INSDC:2na:bin > map < INSDC:x2na:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_x2na_bin );
+ readonly column INSDC:2na:packed READ
+ = pack ( out_2na_bin );
+
+
+ /* CSREAD
+ * base space converted to color space
+ */
+ default readonly column INSDC:color:text CSREAD
+ = < INSDC:x2cs:bin, INSDC:color:text > map < INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_x2cs_bin );
+ readonly column INSDC:x2cs:bin CSREAD
+ = out_x2cs_bin;
+ INSDC:x2cs:bin out_x2cs_bin
+ = NCBI:color_from_dna ( out_x2na_bin, out_read_start, .COMPONENT_LEN, out_cs_key, out_color_matrix );
+ readonly column INSDC:2cs:bin CSREAD
+ = out_2cs_bin;
+ INSDC:2cs:bin out_2cs_bin
+ = < INSDC:x2cs:bin, INSDC:2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_x2cs_bin );
+ readonly column INSDC:2cs:packed CSREAD
+ = pack ( out_2cs_bin );
+
+ /* CS_NATIVE
+ * is color-space the native sequence space
+ */
+ readonly column bool CS_NATIVE
+ = < bool > echo < false > ();
+
+ /* CS_KEY
+ * leading call given in base-space
+ */
+ readonly column INSDC:dna:text CS_KEY
+ = out_cs_key;
+ INSDC:dna:text out_cs_key
+ = < INSDC:dna:text > echo < 'T' > ( .COMPONENT_LEN );
+
+ /* COLOR_MATRIX
+ * matrix used for color-space conversions
+ */
+ readonly column U8 COLOR_MATRIX
+ = out_color_matrix;
+ U8 out_color_matrix
+ = < U8 > echo < INSDC:color:default_matrix > ();
+
+
+ /* QUALITY
+ * base or color call qualities
+ */
+ INSDC:quality:phred out_qual_phred = NCBI:WGS:build_scaffold_qual
+ ( .COMPONENT_START, .COMPONENT_LEN, .COMPONENT_PROPS, .COMPONENT_ID );
+
+ // PHRED is default
+ default readonly column INSDC:quality:phred QUALITY
+ = out_qual_phred;
+
+ // textual encodings
+ readonly column INSDC:quality:text:phred_33 QUALITY
+ = ( INSDC:quality:text:phred_33 ) < B8 > sum < 33 > ( out_qual_phred );
+ readonly column INSDC:quality:text:phred_64 QUALITY
+ = ( INSDC:quality:text:phred_64 ) < B8 > sum < 64 > ( out_qual_phred );
+
+
+ /* PLATFORM
+ * sequencing platform, if known
+ */
+ INSDC:SRA:platform_id out_platform
+ = < INSDC:SRA:platform_id > echo < SRA_PLATFORM_UNDEFINED > ();
+ readonly column INSDC:SRA:platform_id PLATFORM
+ = out_platform;
+
+ /* SPOT_ID
+ * support for libsra
+ */
+ INSDC:SRA:spotid_t out_spot_id
+ = cast ( scaffold_row_id );
+ readonly column INSDC:SRA:spotid_t SPOT_ID
+ = out_spot_id;
+
+ /* NAME
+ * spot name
+ */
+ readonly column ascii NAME
+ = out_scaffold_name;
+
+ /* SPOT_LEN
+ * TRIM_START
+ * TRIM_LEN
+ * spot descriptor
+ */
+ readonly column INSDC:coord:len SPOT_LEN
+ = out_spot_len;
+ INSDC:coord:len out_spot_len
+ = < INSDC:coord:len > vec_sum ( .COMPONENT_LEN );
+ readonly column INSDC:coord:zero TRIM_START
+ = < INSDC:coord:zero > echo < 0 > ();
+ readonly column INSDC:coord:len TRIM_LEN
+ = out_spot_len;
+
+
+ /* READ_START
+ * READ_LEN
+ * READ_TYPE
+ * read descriptor portion
+ */
+ readonly column INSDC:coord:zero READ_START
+ = out_read_start;
+ INSDC:coord:zero out_read_start
+ = ( INSDC:coord:zero ) < U32 > integral ( .COMPONENT_LEN );
+ readonly column INSDC:coord:len READ_LEN
+ = .COMPONENT_LEN;
+ readonly column INSDC:SRA:xread_type READ_TYPE
+ = out_read_type;
+ INSDC:SRA:xread_type out_read_type
+ = NCBI:WGS:build_read_type ( .COMPONENT_PROPS );
+}
+
+
+/*--------------------------------------------------------------------------
+ * contig
+ */
+database NCBI:WGS:db:contig #1.1
+{
+ table NCBI:WGS:tbl:nucleotide SEQUENCE;
+ table NCBI:WGS:tbl:protein PROTEIN;
+ table NCBI:WGS:tbl:gi_idx GI_IDX;
+ table NCBI:WGS:tbl:scaffold SCAFFOLD;
+};
diff --git a/interfaces/os/mac/os-native.h b/interfaces/os/mac/os-native.h
index eeacd46..079c12b 100644
--- a/interfaces/os/mac/os-native.h
+++ b/interfaces/os/mac/os-native.h
@@ -45,6 +45,7 @@ extern "C" {
*/
char *strdup ( const char *str );
+#if !defined(__MAC_10_7) || (__MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7)
static __inline__
char *strndup ( const char *str, size_t n )
{
@@ -54,7 +55,7 @@ char *strndup ( const char *str, size_t n )
if ( end != NULL )
n = end - str;
- dupstr = malloc ( n + 1 );
+ dupstr = (char*)malloc ( n + 1 );
if ( dupstr != NULL )
{
memcpy ( dupstr, str, n );
@@ -63,6 +64,7 @@ char *strndup ( const char *str, size_t n )
return dupstr;
}
+#endif
/*--------------------------------------------------------------------------
* strchrnul - implemented inline here
@@ -83,7 +85,7 @@ static __inline__
void *memrchr ( const void *s, int c, size_t n )
{
size_t i;
- const char *cp = s;
+ const char *cp = (const char*)s;
for ( i = n; i > 0; )
{
if ( ( int ) cp [ -- i ] == c )
diff --git a/interfaces/os/unix/unix-native.h b/interfaces/os/unix/unix-native.h
index 21459f8..236806a 100644
--- a/interfaces/os/unix/unix-native.h
+++ b/interfaces/os/unix/unix-native.h
@@ -44,7 +44,6 @@ extern "C" {
* a structure for communicating a timeout
* which under Unix converts to an absolute time once prepared
*/
-typedef struct timeout_t timeout_t;
struct timeout_t
{
struct timespec ts;
@@ -52,18 +51,6 @@ struct timeout_t
uint32_t prepared;
};
-/* Init
- * initialize a timeout in milliseconds
- */
-rc_t TimeoutInit ( timeout_t *tm, uint32_t msec );
-
-
-/* Prepare
- * ensures that a timeout is prepared with an absolute value
-*/
-rc_t TimeoutPrepare ( timeout_t *tm );
-
-
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/os/win/atomic64.h b/interfaces/os/win/atomic64.h
index 566204a..cb9870e 100644
--- a/interfaces/os/win/atomic64.h
+++ b/interfaces/os/win/atomic64.h
@@ -57,7 +57,7 @@ struct atomic64_t
atomic64_read_and_add ( v, i )
/* add to v -> counter and return the result */
-static __inline int atomic64_add_and_read ( atomic64_t *v, int i )
+static __inline LONG64 atomic64_add_and_read ( atomic64_t *v, int i )
{
return atomic64_read_and_add ( v, i ) + i;
}
@@ -90,9 +90,9 @@ static __inline int atomic64_add_and_read ( atomic64_t *v, int i )
InterlockedCompareExchange64 ( & ( v ) -> counter, ( s ), ( t ) )
/* conditional modifications */
-static __inline int atomic64_read_and_add_lt ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_lt ( atomic64_t *v, int i, int t )
{
- LONG val, val_intern;
+ LONG64 val, val_intern;
for ( val = atomic64_read ( v ); val < t; val = val_intern )
{
val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -102,9 +102,9 @@ static __inline int atomic64_read_and_add_lt ( atomic64_t *v, int i, int t )
return val;
}
-static __inline int atomic64_read_and_add_le ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_le ( atomic64_t *v, int i, int t )
{
- LONG val, val_intern;
+ LONG64 val, val_intern;
for ( val = atomic64_read ( v ); val <= t; val = val_intern )
{
val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -114,9 +114,9 @@ static __inline int atomic64_read_and_add_le ( atomic64_t *v, int i, int t )
return val;
}
-static __inline int atomic64_read_and_add_eq ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_eq ( atomic64_t *v, int i, int t )
{
- LONG val, val_intern;
+ LONG64 val, val_intern;
for ( val = atomic64_read( v ); val == t; val = val_intern )
{
val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -126,9 +126,9 @@ static __inline int atomic64_read_and_add_eq ( atomic64_t *v, int i, int t )
return val;
}
-static __inline int atomic64_read_and_add_ne ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_ne ( atomic64_t *v, int i, int t )
{
- LONG val, val_intern;
+ LONG64 val, val_intern;
for ( val = atomic64_read ( v ); val != t; val = val_intern )
{
val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -138,9 +138,9 @@ static __inline int atomic64_read_and_add_ne ( atomic64_t *v, int i, int t )
return val;
}
-static __inline int atomic64_read_and_add_ge ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_ge ( atomic64_t *v, int i, int t )
{
- LONG val, val_intern;
+ LONG64 val, val_intern;
for ( val = atomic64_read ( v ); val >= t; val = val_intern )
{
val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -150,9 +150,9 @@ static __inline int atomic64_read_and_add_ge ( atomic64_t *v, int i, int t )
return val;
}
-static __inline int atomic64_read_and_add_gt ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_gt ( atomic64_t *v, int i, int t )
{
- LONG val, val_intern;
+ LONG64 val, val_intern;
for ( val = atomic64_read ( v ); val > t; val = val_intern )
{
val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -162,9 +162,9 @@ static __inline int atomic64_read_and_add_gt ( atomic64_t *v, int i, int t )
return val;
}
-static __inline int atomic64_read_and_add_odd ( atomic64_t *v, int i )
+static __inline LONG64 atomic64_read_and_add_odd ( atomic64_t *v, int i )
{
- LONG val, val_intern;
+ LONG64 val, val_intern;
for ( val = atomic64_read ( v ); ( val & 1 ) != 0; val = val_intern )
{
val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -174,9 +174,9 @@ static __inline int atomic64_read_and_add_odd ( atomic64_t *v, int i )
return val;
}
-static __inline int atomic64_read_and_add_even ( atomic64_t *v, int i )
+static __inline LONG64 atomic64_read_and_add_even ( atomic64_t *v, int i )
{
- LONG val, val_intern;
+ LONG64 val, val_intern;
for ( val = atomic64_read ( v ); ( val & 1 ) == 0; val = val_intern )
{
val_intern = atomic64_test_and_set ( v, val + i, val );
diff --git a/interfaces/os/win/os-native.h b/interfaces/os/win/os-native.h
index cb24027..224129a 100644
--- a/interfaces/os/win/os-native.h
+++ b/interfaces/os/win/os-native.h
@@ -49,7 +49,9 @@
#include <klib/text.h>
#endif
+#include <ctype.h>
#include <direct.h>
+#include <math.h>
#ifdef __cplusplus
extern "C" {
@@ -68,31 +70,24 @@ extern "C" {
* a structure for communicating a timeout
* which under Windows is a relative time
*/
-typedef struct timeout_t timeout_t;
struct timeout_t
{
uint32_t mS;
+ uint32_t prepared;
};
-/* Init
- * initialize a timeout in milliseconds
- */
-rc_t CC TimeoutInit ( timeout_t *tm, uint32_t msec );
-
-
-/* Prepare
- * ensures that a timeout is prepared with an absolute value
-*/
-#define TimeoutPrepare( tm ) \
- ( ( void ) ( tm ), 0 )
-
-
/* not consistent across all windows? */
/* #define snprintf _snprintf */
+#ifndef putenv
+#define putenv( s ) _putenv ( s )
+#endif
+
#define mkdir( d, m ) _mkdir( d )
#define strcasecmp _stricmp
+#define strtoll _strtoi64
+#define strtok_r strtok_s
#undef strdup
#define strdup( str ) \
@@ -114,7 +109,7 @@ static __inline__
void *memrchr ( const void *s, int c, size_t n )
{
size_t i;
- const char *cp = s;
+ const char *cp = (const char*)s;
for ( i = n; i > 0; )
{
if ( ( int ) cp [ -- i ] == c )
@@ -163,6 +158,8 @@ char *strsep ( char **stringp, const char *delim )
return NULL;
}
+#define gmtime_r(t, tm) gmtime_s(tm, t)
+#define timegm _mkgmtime
static __inline
int strncasecmp( const char *s1, const char *s2, size_t n )
@@ -170,6 +167,38 @@ int strncasecmp( const char *s1, const char *s2, size_t n )
return _strnicmp( s1, s2, n );
}
+static __inline
+const char *strcasestr (const char *s1, const char *s2)
+{
+ unsigned char c2 = tolower((unsigned char) *s2);
+ size_t l1 = strlen(s1), l2 = strlen(s2);
+
+ if (l2 == 0) {
+ return s1;
+ }
+
+ while (l1 >= l2) {
+ if (tolower((unsigned char) *s1) == c2
+ && (l2 == 1 || _strnicmp(s1 + 1, s2 + 1, l2 - 1) == 0)) {
+ return s1;
+ }
+ ++s1;
+ --l1;
+ }
+
+ return NULL;
+}
+
+static __inline
+long int lround ( double x )
+{
+ double val = ( x < 0.0 ) ? ceil ( x - 0.5 ) : floor ( x + 0.5 );
+ if ( val > ( double ) LONG_MAX )
+ return LONG_MAX;
+ if ( val < ( double ) LONG_MIN )
+ return LONG_MIN;
+ return ( long int ) val;
+}
#ifdef __cplusplus
}
diff --git a/interfaces/sra/impl.h b/interfaces/sra/impl.h
index 86674ee..815d5a6 100644
--- a/interfaces/sra/impl.h
+++ b/interfaces/sra/impl.h
@@ -50,6 +50,7 @@ struct KNamelist;
struct KDirectory;
typedef union SRAPath_vt SRAPath_vt;
typedef struct SRAPath_vt_v1 SRAPath_vt_v1;
+typedef struct SRAPath_vt_v2 SRAPath_vt_v2;
/*--------------------------------------------------------------------------
@@ -83,9 +84,28 @@ struct SRAPath_vt_v1
rc_t ( CC *listPath ) ( const SRAPATH_IMPL *self, struct KNamelist **runs, bool deep );
};
+struct SRAPath_vt_v2
+{
+ /* version == 2.x */
+ uint32_t maj;
+ uint32_t min;
+
+ rc_t ( CC *addref ) ( const SRAPATH_IMPL *self );
+ rc_t ( CC *release ) ( const SRAPATH_IMPL *self );
+ rc_t ( CC *version ) ( const SRAPATH_IMPL *self, uint32_t *version );
+ rc_t ( CC *clear ) ( SRAPATH_IMPL *self );
+ rc_t ( CC *addRepPath ) ( SRAPATH_IMPL *self, const char *path );
+ rc_t ( CC *addVolPath ) ( SRAPATH_IMPL *self, const char *path );
+ rc_t ( CC *fullPath ) ( const SRAPATH_IMPL *self, const char *rep, const char *vol,
+ const char *acc, char *path, size_t path_max );
+ bool ( CC *testPath ) ( const SRAPATH_IMPL *self, const char *path );
+ rc_t ( CC *findPath ) ( const SRAPATH_IMPL *self, const char *acc, char *path, size_t path_max, size_t *rep_len );
+};
+
union SRAPath_vt
{
SRAPath_vt_v1 v1;
+ SRAPath_vt_v2 v2;
};
diff --git a/interfaces/sra/pevents.vschema b/interfaces/sra/pevents.vschema
index 5fd53be..8072810 100644
--- a/interfaces/sra/pevents.vschema
+++ b/interfaces/sra/pevents.vschema
@@ -71,7 +71,7 @@ table NCBI:SRA:tbl:pevents #1.0
zip_encoding #1.0 < Z_RLE > .SORT_ORDER = sort_encode;
F32 reorder = NCBI:SRA:reorder < 4 > ( sort_encode, LIKELIHOODS );
- F32 like_scale = vdb:vec_sum < F32, 4 > ( reorder );
+ F32 like_scale = vdb:fixed_vec_sum < F32, 4 > ( reorder );
physical column < F32 >
fzip_encoding #1.0 < 4 > .SCALE = like_scale;
diff --git a/interfaces/sra/sradb-priv.h b/interfaces/sra/sradb-priv.h
index 204008b..d22d8d0 100644
--- a/interfaces/sra/sradb-priv.h
+++ b/interfaces/sra/sradb-priv.h
@@ -27,6 +27,18 @@
#ifndef _h_sra_sradb_priv_
#define _h_sra_sradb_priv_
+#ifndef _h_klib_container_
+#include <klib/container.h>
+#endif
+
+#ifndef _h_klib_text
+#include <klib/text.h>
+#endif
+
+#ifndef _h_klib_vector
+#include <klib/vector.h>
+#endif
+
#ifndef _h_sra_sradb_
#include <sra/sradb.h>
#endif
@@ -52,14 +64,15 @@ extern "C" {
* forwards
*/
struct KFile;
+struct KDirectory;
struct KDBManager;
struct KTable;
+struct KLock;
struct VDBManager;
struct VTable;
struct VSchema;
struct SRAPath;
-
/*--------------------------------------------------------------------------
* SRAMgr
* opaque handle to SRA library
@@ -116,6 +129,11 @@ SRA_EXTERN rc_t CC SRAMgrVGetTableModDate ( const SRAMgr *self,
SRA_EXTERN rc_t CC SRAMgrGetTableModDate ( const SRAMgr *self,
KTime_t *mtime, const char *spec, ... );
+/* ConfigReload
+ * update SRAPath object
+ */
+SRA_EXTERN rc_t CC SRAMgrConfigReload( const SRAMgr *self, struct KDirectory const *wd );
+
/*--------------------------------------------------------------------------
* SRATable
@@ -153,7 +171,11 @@ SRA_EXTERN rc_t CC SRATableGetKTableUpdate ( SRATable *self, struct KTable **ktb
SRA_EXTERN rc_t CC SRATableMakeSingleFileArchive ( const SRATable *self,
struct KFile const **sfa, bool lightweight, const char** ext );
-
+/* SingleFileArchiveExt
+ * retrieve archive extension based on object in the spec
+ */
+SRA_EXTERN rc_t CC SRAMgrSingleFileArchiveExt(const SRAMgr *self,
+ const char* spec, const bool lightweight, const char** ext);
/*--------------------------------------------------------------------------
* SRAPath
*/
@@ -162,7 +184,7 @@ SRA_EXTERN rc_t CC SRATableMakeSingleFileArchive ( const SRATable *self,
* finds location of run within rep-server/volume matrix
* returns length of rep-server portion
*/
-SRA_PATH_EXTERN rc_t CC SRAPathFindWithRepLen ( struct SRAPath const *self,
+SRA_EXTERN rc_t CC SRAPathFindWithRepLen ( struct SRAPath const *self,
const char *accession, char *path, size_t path_max, size_t *rep_len );
@@ -263,7 +285,102 @@ SRA_EXTERN const SRATableData *CC SRATableGetTableData ( const SRATable *self );
#endif
+/*--------------------------------------------------------------------------
+ * SRA Accession Cache
+ */
+struct SRACacheIndex;
+
+typedef struct SRACacheMetrics
+{ /* 0 = metric not used */
+
+ /* sizeof table data */
+ /* expanded cache bytes, i.e. cursor */
+ uint64_t bytes;
+ uint32_t elements; /* open tables */
+ uint32_t threads;
+ uint32_t fds;
+} SRACacheMetrics;
+
+#define SRACacheThresholdSoftBytesDefault ((uint64_t)0)
+#define SRACacheThresholdSoftElementsDefault ((uint32_t)1000)
+#define SRACacheThresholdSoftThreadsDefault ((uint32_t)0)
+#define SRACacheThresholdSoftFdsDefault ((uint32_t)0)
+
+#define SRACacheThresholdHardBytesDefault ((uint64_t)0)
+#define SRACacheThresholdHardElementsDefault ((uint32_t)10000)
+#define SRACacheThresholdHardThreadsDefault ((uint32_t)0)
+#define SRACacheThresholdHardFdsDefault ((uint32_t)0)
+
+SRA_EXTERN bool CC SRACacheMetricsLessThan(const SRACacheMetrics* a, const SRACacheMetrics* b);
+
+typedef struct SRACacheElement
+{
+ DLNode dad;
+
+ SRATable* object;
+
+ KTime_t lastAccessed;
+
+ struct SRACacheIndex* index;
+ uint32_t key;
+
+ SRACacheMetrics metrics;
+} SRACacheElement;
+
+SRA_EXTERN rc_t CC SRACacheElementMake(SRACacheElement** self,
+ SRATable* object,
+ struct SRACacheIndex* index,
+ uint32_t key,
+ const SRACacheMetrics* metrics);
+SRA_EXTERN rc_t CC SRACacheElementDestroy(SRACacheElement* self);
+
+typedef struct SRACacheIndex
+{
+ BSTNode dad;
+
+ String* prefix;
+ KVector* body; /* KVector<SRACacheElement*> */
+} SRACacheIndex;
+
+SRA_EXTERN rc_t CC SRACacheIndexMake(SRACacheIndex** self, String* prefix);
+SRA_EXTERN rc_t CC SRACacheIndexDestroy(SRACacheIndex* self);
+
+typedef struct SRACache
+{
+ BSTree indexes; /* grows as needed */
+
+ DLList lru; /* DLList<SRACacheElement*>; head is the oldest */
+
+ SRACacheMetrics softThreshold;
+ SRACacheMetrics hardThreshold;
+ SRACacheMetrics usage;
+
+ struct KLock* mutex;
+
+} SRACache;
+
+SRA_EXTERN rc_t CC SRACacheInit(SRACache**);
+
+SRA_EXTERN rc_t CC SRACacheGetSoftThreshold(SRACache* self, SRACacheMetrics* metrics);
+SRA_EXTERN rc_t CC SRACacheSetSoftThreshold(SRACache* self, const SRACacheMetrics* metrics);
+
+SRA_EXTERN rc_t CC SRACacheGetHardThreshold(SRACache* self, SRACacheMetrics* metrics);
+SRA_EXTERN rc_t CC SRACacheSetHardThreshold(SRACache* self, const SRACacheMetrics* metrics);
+
+SRA_EXTERN rc_t CC SRACacheGetUsage(SRACache* self, SRACacheMetrics* metrics);
+
+/* flush tables until usage is lower than specified in self->softThreshold */
+SRA_EXTERN rc_t CC SRACacheFlush(SRACache* self);
+
+/* if found, moves element to the back of the list; return NULL object if not in the cache */
+SRA_EXTERN rc_t CC SRACacheGetTable(SRACache* self, const char* acc, const SRATable** object);
+
+/*
+ * fails if table is already in the cache
+ */
+SRA_EXTERN rc_t CC SRACacheAddTable(SRACache* self, const char* acc, SRATable*);
+SRA_EXTERN rc_t CC SRACacheWhack(SRACache* self);
#ifdef __cplusplus
}
diff --git a/interfaces/sra/srapath.h b/interfaces/sra/srapath.h
index 19cc6ab..9965e8d 100644
--- a/interfaces/sra/srapath.h
+++ b/interfaces/sra/srapath.h
@@ -43,6 +43,8 @@
extern "C" {
#endif
+#define TOOLS_USE_SRAPATH 0
+
/*--------------------------------------------------------------------------
* forwards
*/
@@ -76,7 +78,6 @@ SRA_EXTERN rc_t CC SRAPathMake ( SRAPath **pm, struct KDirectory const *dir );
SRA_EXTERN rc_t CC SRAPathAddRef ( const SRAPath *self );
SRA_EXTERN rc_t CC SRAPathRelease ( const SRAPath *self );
-
/* Version
* returns the library version
*/
@@ -84,13 +85,13 @@ SRA_EXTERN rc_t CC SRAPathVersion ( const SRAPath *self, uint32_t *version );
/* Clear
- * forget all existing server and volume paths
+ * forget existing server and volume paths for the default repository
*/
SRA_EXTERN rc_t CC SRAPathClear ( SRAPath *self );
/* AddRepPath
- * add a replication path
+ * add a replication path to the default repository
*
* "rep" [ IN ] - NUL-terminated server search path
* may be a compound path with ':' separator characters, e.g.
@@ -105,7 +106,7 @@ SRA_EXTERN rc_t CC SRAPathAddRepPath ( SRAPath *self, const char *rep );
/* AddVolPath
- * add a volume path
+ * add a volume path to the default repository
*
* "vol" [ IN ] - NUL-terminated volume search path
* may be a compound path with ':' separator characters, e.g.
diff --git a/interfaces/vdb/blob.h b/interfaces/vdb/blob.h
new file mode 100644
index 0000000..89feaa5
--- /dev/null
+++ b/interfaces/vdb/blob.h
@@ -0,0 +1,147 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_blob_
+#define _h_vdb_blob_
+
+#ifndef _h_vdb_extern_
+#include <vdb/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+
+/*--------------------------------------------------------------------------
+ * VBlob
+ * a collection of data cells
+ */
+typedef struct VBlob VBlob;
+
+
+/* AddRef
+ * Release
+ * all objects are reference counted
+ * NULL references are ignored
+ */
+VDB_EXTERN rc_t CC VBlobAddRef ( const VBlob *self );
+VDB_EXTERN rc_t CC VBlobRelease ( const VBlob *self );
+
+
+/* IdRange
+ * returns id range for blob
+ *
+ * "first" [ OUT, NULL OKAY ] and "count" [ OUT, NULL OKAY ] -
+ * id range is returned in these output parameters, where
+ * at least ONE must be NOT-NULL
+ */
+VDB_EXTERN rc_t CC VBlobIdRange ( const VBlob *self,
+ int64_t *first, uint64_t *count );
+
+
+/* Read
+ * read entire single cell of byte-aligned data into a buffer
+ *
+ * "row_id" [ IN ] - allows ReadDirect random access to any cell
+ * in column
+ *
+ * "elem_bits" [ IN ] - expected element size in bits, required
+ * to be compatible with the actual element size, and be a multiple
+ * of 8 ( byte-aligned ). for non-byte-aligned data, see ReadBits
+ *
+ * "buffer" [ OUT ] and "blen" [ IN ] - return buffer for row data
+ * where "blen" gives buffer capacity in elements. the total buffer
+ * size in bytes == ( "elem_bits" * "blen" + 7 ) / 8.
+ *
+ * "row_len" [ OUT ] - return parameter for the number of elements
+ * in the requested row.
+ *
+ * when the return code is 0, "row_len" will contain the number of
+ * elements read into buffer. if the return code indicates that the
+ * buffer is too small, "row_len" will give the required buffer length.
+ */
+VDB_EXTERN rc_t CC VBlobRead ( const VBlob *self, int64_t row_id,
+ uint32_t elem_bits, void *buffer, uint32_t blen, uint32_t *row_len );
+
+
+/* ReadBits
+ * read single row of potentially bit-aligned cell data into a buffer
+ *
+ * "elem_bits" [ IN ] - expected element size in bits, required to be
+ * compatible with the actual element size, and may ( or may not ) be
+ * a multiple of 8 ( byte aligned ).
+ *
+ * "start" [ IN ] - zero-based starting index to first element,
+ * valid from 0 .. row_len - 1
+ *
+ * "buffer" [ IN ], "boff" [ IN ] and "blen" [ IN ] -
+ * return buffer for row data, where "boff" is in BITS
+ * and "blen" is in ELEMENTS.
+ *
+ * "num_read" [ OUT ] - return parameter for the number of elements
+ * read, which is <= "blen"
+ *
+ * "remaining" [ OUT, NULL OKAY ] - optional return parameter for
+ * the number of elements remaining to be read. specifically,
+ * "start" + "num_read" + "remaining" == row length, assuming that
+ * "start" <= row length.
+ */
+VDB_EXTERN rc_t CC VBlobReadBits ( const VBlob *self, int64_t row_id,
+ uint32_t elem_bits, uint32_t start, void *buffer, uint32_t boff,
+ uint32_t blen, uint32_t *num_read, uint32_t *remaining );
+
+
+/* CellData
+ * access pointer to single cell of potentially bit-aligned cell data
+ *
+ * "elem_bits" [ OUT, NULL OKAY ] - optional return parameter for
+ * element size in bits
+ *
+ * "base" [ OUT ] and "boff" [ OUT, NULL OKAY ] -
+ * compound return parameter for pointer to row starting bit
+ * where "boff" is in BITS
+ *
+ * "row_len" [ OUT, NULL OKAY ] - the number of elements in cell
+ */
+VDB_EXTERN rc_t CC VBlobCellData ( const VBlob *self, int64_t row_id,
+ uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vdb_blob_ */
diff --git a/interfaces/vdb/built-in.vschema b/interfaces/vdb/built-in.vschema
index ba43a3a..07b28c0 100644
--- a/interfaces/vdb/built-in.vschema
+++ b/interfaces/vdb/built-in.vschema
@@ -45,6 +45,7 @@ typeset integer_set { I8, U8, I16, U16, I32, U32, I64, U64 };
typeset float_set { F32, F64 };
typeset numeric_set { integer_set, float_set };
typeset text_set { utf8, utf16, utf32, ascii };
+typeset text8_set { utf8, ascii };
typeset transpose_set { B8, B16, B32, B64 };
@@ -53,6 +54,7 @@ typeset transpose_set { B8, B16, B32, B64 };
*/
fmtdef merged_fmt;
fmtdef transposed_fmt;
+fmtdef delta_averaged_fmt;
/*--------------------------------------------------------------------------
@@ -81,11 +83,10 @@ any cast #1.0 ( any in )
* performs a bitwise operation 'OR' for every byte in A and B
* A and B are not neccesarily have the same size
* the resulting row will have the size of B while OR operation is done for portion of A overlapping B
- * For different sizes of A and B 'align' parameter provides what edge of A and B are alligned
+ * For different sizes of A and B 'align' parameter provides what edge of A and B are aligned
* possible values ALIGN_LEFT, ALIGN_RIGHT
*
*/
-
function < type T >
T bit_or #1 < U8 align > ( T A, T B )
= vdb:bit_or;
@@ -207,7 +208,7 @@ T range_validate #1.0 < T lower, T upper > ( T in )
/* select
- * return first non-null input for id
+ * return first non-empty input for id
* inputs are taken from first to last
*
* "T" [ TYPE ] - data type of selection
@@ -271,6 +272,17 @@ function
transpose_set detranspose #1 ( transposed_fmt in )
= vdb:detranspose;
+/*
+ * delta_average computes average representation of the maximium
+ * lengh row and deltas every row against it
+ */
+function
+delta_averaged_fmt delta_average #1 ( any in )
+ = vdb:delta_average;
+
+function
+any undelta_average #1 ( delta_averaged_fmt in )
+ = vdb:undelta_average;
/* merge
* merges all input blobs of any format/type into a single blob
@@ -350,7 +362,7 @@ ascii meta:attr:write #1.0 < ascii node, ascii attr > ( ascii in );
* "name" [ CONST ] - parameter name
*/
function
-utf8 parameter:read #1.0 < ascii name, * bool deterministic > ();
+text8_set parameter:read #1.0 < ascii name, * bool deterministic > ();
/* environment:read
@@ -359,7 +371,7 @@ utf8 parameter:read #1.0 < ascii name, * bool deterministic > ();
* "name" [ CONST ] - environment variable name
*/
function
-utf8 environment:read #1.0 < ascii name > ();
+text8_set environment:read #1.0 < ascii name > ();
/* idx:text:project
@@ -372,12 +384,12 @@ utf8 environment:read #1.0 < ascii name > ();
* of values to substitute for values not
* found in the index.
*/
-function utf8 idx:text:project #1.0 < ascii index_name > ( * utf8 substitute );
+function text8_set idx:text:project #1.0 < ascii index_name > ( * text8_set substitute );
/* idx:text:insert
*/
-function utf8 idx:text:insert #1.0 < ascii index_name > ( utf8 key );
+function text8_set idx:text:insert #1.0 < ascii index_name > ( text8_set key );
/* vdb:row_id_range
diff --git a/interfaces/vdb/cursor.h b/interfaces/vdb/cursor.h
index e90ef5f..55dce40 100644
--- a/interfaces/vdb/cursor.h
+++ b/interfaces/vdb/cursor.h
@@ -49,6 +49,7 @@ extern "C" {
/*--------------------------------------------------------------------------
* forwards
*/
+struct VBlob;
struct VTable;
struct VTypedesc;
struct VTypedecl;
@@ -222,6 +223,17 @@ VDB_EXTERN rc_t CC VCursorOpenRow ( const VCursor *self );
*/
VDB_EXTERN rc_t CC VCursorCommitRow ( VCursor *self );
+/* RepeatRow
+ * repeats the current row by the count provided
+ * row must have been committed
+ *
+ * AVAILABILITY: version 2.6
+ *
+ * "count" [ IN ] - the number of times to repeat
+ * the current row.
+ */
+VDB_EXTERN rc_t CC VCursorRepeatRow ( VCursor *self, uint64_t count );
+
/* CloseRow
* balances OpenRow message
* if there are uncommitted modifications,
@@ -241,6 +253,26 @@ VDB_EXTERN rc_t CC VCursorCloseRow ( const VCursor *self );
VDB_EXTERN rc_t CC VCursorFlushPage ( VCursor *self );
+/* GetBlob
+ * retrieve a blob of data containing the current row id
+ * GetBlobDirect
+ * retrieve a blob of data containing the requested row id
+ *
+ * "blob" [ OUT ] - return parameter for a new reference
+ * to VBlob containing requested cell. NB - must be released
+ * via VBlobRelease when no longer needed.
+ *
+ * "row_id" [ IN ] - allows ReadDirect random access to any cell
+ * in column
+ *
+ * "col_idx" [ IN ] - index of column to be read, returned by "AddColumn"
+ */
+VDB_EXTERN rc_t CC VCursorGetBlob ( const VCursor *self,
+ struct VBlob const **blob, uint32_t col_idx );
+VDB_EXTERN rc_t CC VCursorGetBlobDirect ( const VCursor *self,
+ struct VBlob const **blob, int64_t row_id, uint32_t col_idx );
+
+
/* Read
* read entire single row of byte-aligned data into a buffer
* ReadDirect
@@ -397,6 +429,11 @@ VDB_EXTERN rc_t CC VCursorSetUserData ( const VCursor *self,
void *data, void ( CC * destroy ) ( void *data ) );
+VDB_EXTERN rc_t CC VCursorLinkedCursorGet(const VCursor *cself,const char *tbl,VCursor const **curs);
+VDB_EXTERN rc_t CC VCursorLinkedCursorSet(const VCursor *cself,const char *tbl,VCursor const *curs);
+
+
+
#ifdef __cplusplus
}
#endif
diff --git a/interfaces/vdb/database.h b/interfaces/vdb/database.h
index 82be035..2753eee 100644
--- a/interfaces/vdb/database.h
+++ b/interfaces/vdb/database.h
@@ -188,6 +188,22 @@ VDB_EXTERN rc_t CC VDatabaseTypespec ( const VDatabase *self,
VDB_EXTERN bool CC VDatabaseLocked ( const VDatabase *self );
+/* IsAlias
+ * returns true if object name is an alias
+ * returns path to fundamental name if it was aliased
+ *
+ * "type" [ IN ] - a KDBPathType
+ * valid values are kptDatabase, kptTable and kptIndex
+ *
+ * "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ * for fundamenta object name if "alias" is not a fundamental name,
+ *
+ * "name" [ IN ] - NUL terminated object name
+ */
+VDB_EXTERN bool CC VDatabaseIsAlias ( const VDatabase *self, uint32_t type,
+ char *resolved, size_t rsize, const char *name );
+
+
/* Writable
* returns 0 if object is writable
* or a reason why if not
@@ -288,7 +304,7 @@ VDB_EXTERN rc_t CC VDatabaseOpenSchema ( const VDatabase *self, struct VSchema c
*
* "names" [ OUT ] - return parameter for table
*/
-VDB_EXTERN rc_t CC VDatabaseListTbl( const VDatabase *self, KNamelist **names );
+VDB_EXTERN rc_t CC VDatabaseListTbl ( const VDatabase *self, KNamelist **names );
/* lists the sub-databases of the database
*
diff --git a/interfaces/vdb/dependencies.h b/interfaces/vdb/dependencies.h
new file mode 100644
index 0000000..4e96670
--- /dev/null
+++ b/interfaces/vdb/dependencies.h
@@ -0,0 +1,211 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#ifndef _h_vdb_dependencies_
+#define _h_vdb_dependencies_
+
+
+#ifndef _h_vdb_extern_
+#include <vdb/extern.h>
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VDatabase;
+struct VTable;
+
+
+/*--------------------------------------------------------------------------
+ * VDBDependencies
+ * information about VDatabase dependencies
+ *
+ * object contains zero or more dependencies
+ *
+ * each dependency has a number of properties, accessible via index
+ */
+typedef struct VDBDependencies VDBDependencies;
+
+
+/* AddRef
+ * Release
+ * all objects are reference counted
+ * NULL references are ignored */
+VDB_EXTERN rc_t CC VDBDependenciesAddRef ( const VDBDependencies *self );
+VDB_EXTERN rc_t CC VDBDependenciesRelease ( const VDBDependencies *self );
+
+/* ListDependencies
+ * create a dependencies object: list all dependencies
+ *
+ * "dep" [ OUT ] - return for VDBDependencies object
+ *
+ * "missing" [ IN ] - if true, list only missing dependencies
+ * otherwise, list all dependencies
+ */
+VDB_EXTERN rc_t CC VDatabaseListDependencies ( struct VDatabase const *self,
+ const VDBDependencies **dep, bool missing );
+
+/* Count
+ * retrieve the number of dependencies
+ *
+ * "count" [ OUT ] - return parameter for dependencies count
+ */
+VDB_EXTERN rc_t CC VDBDependenciesCount ( const VDBDependencies *self,
+ uint32_t *count );
+
+
+/* Type
+ * describe the dependency object type ( see kbd/manager.h )
+ *
+ * "type" [ OUT ] - a KDBPathType
+ *
+ * "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesType ( const VDBDependencies *self,
+ uint32_t *type, uint32_t idx );
+
+
+/* Local
+ * retrieve local property
+ *
+ * "local" [ OUT ] - true if object is stored internally
+ *
+ * "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesLocal ( const VDBDependencies *self,
+ bool *local, uint32_t idx );
+
+
+/* SeqId
+ * retrieve sequence id of object
+ *
+ * "seq_id" [ OUT ] - returned pointer should not be freed.
+ * becomes invalid after VDBDependenciesRelease
+ *
+ * "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesSeqId ( const VDBDependencies *self,
+ const char **seq_id, uint32_t idx );
+
+
+/* Name
+ * retrieve object name
+ *
+ * "name" [ OUT ] - returner pointed should not be freed.
+ * it becomes invalid after VDBDependenciesRelease
+ *
+ * "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesName ( const VDBDependencies *self,
+ const char **name, uint32_t idx );
+
+
+/* Circular
+ * retrieve circular property
+ * reference sequences may be circular
+ *
+ * "circular" [ OUT ] - true if dependency is a circular reference table
+ *
+ * "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesCircular ( const VDBDependencies *self,
+ bool *circular, uint32_t idx );
+
+
+/* Path
+ * returns [Local] path for resolved dependency,
+ * returns NULL for local and missing dependency.
+ *
+ * "path" [ OUT ] - returned pointer should not be freed.
+ * it becomes invalid after VDBDependenciesRelease
+ *
+ * "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesPath ( const VDBDependencies *self,
+ const char **path, uint32_t idx );
+
+/* PathRemote
+ * returns Remote path for dependency,
+ * returns NULL for not found dependency.
+ *
+ * "path" [ OUT ] - returned pointer should not be freed.
+ * it becomes invalid after VDBDependenciesRelease
+ *
+ * "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesPathRemote ( const VDBDependencies *self,
+ const char **path, uint32_t idx );
+
+/* PathCache
+ * returns Cache path for dependency,
+ * returns NULL for not found dependency.
+ *
+ * "path" [ OUT ] - returned pointer should not be freed.
+ * it becomes invalid after VDBDependenciesRelease
+ *
+ * "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesPathCache ( const VDBDependencies *self,
+ const char **path, uint32_t idx );
+
+/* Error
+ * trying to analyze rc code and object
+ * in order to recognize dependencies error
+ *
+ * db OR table - only one is required
+ */
+VDB_EXTERN bool CC UIError( rc_t rc,
+ struct VDatabase const *db, struct VTable const *table);
+
+/* report error(s) via PLOGERR based on an object
+ * log_list - if true logs the missing items list also
+ */
+VDB_EXTERN void CC UIDatabaseLOGError( rc_t rc,
+ struct VDatabase const *db, bool log_list );
+VDB_EXTERN void CC UITableLOGError( rc_t rc,
+ struct VTable const *table, bool log_list );
+
+/* return human-readable string explaining rc code.
+ * the string should not be freed
+ */
+VDB_EXTERN const char* CC UIDatabaseGetErrorString(rc_t rc);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _h_vdb_dependencies_ */
diff --git a/interfaces/vdb/manager.h b/interfaces/vdb/manager.h
index d06bc63..90ccb2f 100644
--- a/interfaces/vdb/manager.h
+++ b/interfaces/vdb/manager.h
@@ -157,6 +157,29 @@ VDB_EXTERN rc_t CC VDBManagerGetUserData ( const VDBManager *self, void **data )
VDB_EXTERN rc_t CC VDBManagerSetUserData ( const VDBManager *self,
void *data, void ( CC * destroy ) ( void *data ) );
+
+/* GetObjVersion
+ * returns the vdb-version of the given object
+ *
+ * "version" [ OUT ] - discovered vdb-version
+ *
+ * "path" [ IN ] - path to the object to be examined ( database or table )
+ */
+VDB_EXTERN rc_t CC VDBManagerGetObjVersion ( const VDBManager *self,
+ ver_t * version, const char *path );
+
+
+/* PathType
+ * check the path type of an object/directory path.
+ *
+ * this is an extension of the KDirectoryPathType ( see <kdb/manager.h> )
+ * and will return the KDirectory values if a path type is not specifically
+ * a VDB or KDB object.
+ */
+VDB_EXTERN int CC VDBManagerPathType ( const VDBManager * self,
+ const char *path, ... );
+VDB_EXTERN int CC VDBManagerVPathType ( const VDBManager * self,
+ const char *path, va_list args );
#ifdef __cplusplus
}
diff --git a/interfaces/vdb/manager.hpp b/interfaces/vdb/manager.hpp
index e02e0d8..b7becc3 100644
--- a/interfaces/vdb/manager.hpp
+++ b/interfaces/vdb/manager.hpp
@@ -181,7 +181,7 @@ struct VDBManager
* wd-native character set giving path to table
*/
inline rc_t OpenTable ( const VTable **tbl, struct VSchema const *schema,
- const char *path, ... ) throw()
+ const char *path, ... ) const throw ()
{
va_list args;
va_start ( args, path );
@@ -190,11 +190,11 @@ struct VDBManager
return rc;
}
inline rc_t OpenTable ( const VTable **tbl, struct VSchema const *schema,
- const char *path, va_list args ) throw()
+ const char *path, va_list args ) const throw ()
{ return VDBManagerVOpenTableRead ( this, tbl, schema, path, args ); }
inline rc_t OpenTable ( VTable **tbl, struct VSchema const *schema,
- const char *path, ... ) throw()
+ const char *path, ... ) throw ()
{
va_list args;
va_start ( args, path );
@@ -203,7 +203,7 @@ struct VDBManager
return rc;
}
inline rc_t OpenTable ( VTable **tbl, struct VSchema const *schema,
- const char *path, va_list args ) throw()
+ const char *path, va_list args ) throw ()
{ return VDBManagerVOpenTableUpdate ( this, tbl, schema, path, args ); }
diff --git a/interfaces/vdb/report.h b/interfaces/vdb/report.h
new file mode 100644
index 0000000..90d3695
--- /dev/null
+++ b/interfaces/vdb/report.h
@@ -0,0 +1,92 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_report_
+#define _h_vdb_report_
+
+#ifndef _h_vdb_extern_
+#include <vdb/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VDBManager;
+struct VDatabase;
+struct VTable;
+
+
+/*--------------------------------------------------------------------------
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+
+/* SetVDBManager
+ * remember the manager in use
+ */
+VDB_EXTERN rc_t CC ReportSetVDBManager ( struct VDBManager const *mgr );
+
+
+/* SetDatabase
+ * To be called after application successfully opened Database
+ * specified in command line.
+ * If the application supports multiple objects passed in command line
+ * to be processed in a loop: should be called for each argument database.
+ *
+ * "path" [ IN ] - path to the database that is used to access it
+ */
+VDB_EXTERN rc_t CC ReportResetDatabase ( const char *path,
+ struct VDatabase const *db );
+
+
+/* SetTable
+ * To be called after application successfully opened Table
+ * specified in command line.
+ * If the application supports multiple objects passed in command line
+ * to be processed in a loop: should be called for each argument table.
+ *
+ * "path" [ IN ] - path to the table that is used to access it
+ */
+VDB_EXTERN rc_t CC ReportResetTable ( const char *path,
+ struct VTable const *tbl );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vdb_report_ */
diff --git a/interfaces/vdb/vdb-priv.h b/interfaces/vdb/vdb-priv.h
index 2e8b6e6..2d3640d 100644
--- a/interfaces/vdb/vdb-priv.h
+++ b/interfaces/vdb/vdb-priv.h
@@ -77,6 +77,17 @@ VDB_EXTERN rc_t CC VDBManagerOpenKDBManagerUpdate ( struct VDBManager *self,
#define VDBManagerGetKDBManagerUpdate VDBManagerOpenKDBManagerUpdate
+/* ListExternalSchemaModules
+ */
+VDB_EXTERN rc_t CC VDBManagerListExternalSchemaModules ( struct VDBManager const *self,
+ struct KNamelist **list );
+
+/* DisablePagemapThread
+ * this can cause difficulties for some clients
+ */
+VDB_EXTERN rc_t CC VDBManagerDisablePagemapThread ( struct VDBManager const *self );
+
+
/*--------------------------------------------------------------------------
* VSchema
*/
@@ -123,10 +134,34 @@ VDB_EXTERN rc_t CC VTableOpenKTableUpdate ( struct VTable *self, struct KTable *
#define VTableGetKTableRead VTableOpenKTableRead
#define VTableGetKTableUpdate VTableOpenKTableUpdate
-
-VDB_EXTERN rc_t CC VTableDropColumn(struct VTable *self, const char *name, ...);
-VDB_EXTERN rc_t CC VTableVDropColumn(struct VTable *self, const char *name, va_list args);
-
+
+
+/* DropColumn
+ */
+VDB_EXTERN rc_t CC VTableDropColumn ( struct VTable *self, const char *name, ... );
+VDB_EXTERN rc_t CC VTableVDropColumn ( struct VTable *self, const char *name, va_list args );
+
+/* RenameColumn
+ */
+VDB_EXTERN rc_t CC VTableRenameColumn ( struct VTable *self, bool force,
+ const char *from, const char *to );
+
+/* ListPhysColumns
+ * ListSeededWritableColumns
+ * avail: 2.4
+ */
+VDB_EXTERN rc_t CC VTableListPhysColumns ( struct VTable const *self, struct KNamelist **names );
+VDB_EXTERN rc_t CC VTableListSeededWritableColumns ( struct VTable *self,
+ struct KNamelist **names, struct KNamelist const *seed );
+
+
+/* HasStaticColumn
+ * given a physical column name, report whether it exists
+ * and is ( currently ) static
+ * avail: 2.5
+ */
+VDB_EXTERN bool CC VTableHasStaticColumn ( struct VTable const *self, const char *name );
+
/* VUntypedTableTest
* support for tables created before embedded schema
@@ -147,18 +182,41 @@ typedef bool ( CC * VUntypedTableTest )
* useful if table was opened using a later version of schema than
* was used for its creation.
*/
-rc_t VTableStoreSchema ( struct VTable *self );
+VDB_EXTERN rc_t VTableStoreSchema ( struct VTable *self );
/*--------------------------------------------------------------------------
* VCursor
*/
+
+/* CreateCursorView
+ * creates a read-only cursor onto table
+ * uses table schema as base
+ * uses view described in viewspec as view
+ *
+ * AVAILABILITY: version 2.3
+ *
+ * for pre-vdb-2.3 tables, defaults to CreateCursorRead, ignoring
+ * schema specification
+ *
+ * "curs" [ OUT ] - return parameter for newly created cursor
+ *
+ * "viewspec" [ IN ] - NUL terminated string describing the view schema
+ */
+VDB_EXTERN rc_t CC VTableCreateCursorView ( struct VTable const *self,
+ struct VCursor const **curs, const char *viewspec );
+
/* PermitPostOpenAdd
* allows columns to be added to open cursor
* for write cursor, the effect lasts until the first row commit
*/
VDB_EXTERN rc_t CC VCursorPermitPostOpenAdd ( struct VCursor const *self );
+/* SuspendTriggers
+ * blocks resolution of schema-based triggers
+ *
+ */
+VDB_EXTERN rc_t CC VCursorSuspendTriggers ( struct VCursor const *self );
/* VCursorGetSchema
* returns current schema of the open cursor
@@ -178,6 +236,8 @@ VDB_EXTERN rc_t CC VCursorPageIdRange ( struct VCursor const *self,
uint32_t idx, int64_t id, int64_t *first, int64_t *last );
+VDB_EXTERN rc_t CC VCursorLinkedCursorGet(const struct VCursor *cself,const char *tbl, struct VCursor const **curs);
+VDB_EXTERN rc_t CC VCursorLinkedCursorSet(const struct VCursor *cself,const char *tbl, struct VCursor const *curs);
/*--------------------------------------------------------------------------
diff --git a/interfaces/vdb/vdb.vschema b/interfaces/vdb/vdb.vschema
index 4d8f428..fa501c9 100644
--- a/interfaces/vdb/vdb.vschema
+++ b/interfaces/vdb/vdb.vschema
@@ -421,7 +421,7 @@ T [ * ] paste #1.0 ( T [ * ] in, ... )
/* vec_sum
- * compute the sum of all the elements of the input vector
+ * compute the sum of all the elements of the row
*
* "T" [ TYPE ] - base element type to be processed
*
@@ -431,6 +431,17 @@ function < type T >
T vec_sum #1.0 ( T [ * ] in )
= vdb:vec_sum;
+/* vec_sum
+ * compute the sum of all the elements of the input vector
+ *
+ * "T" [ TYPE ] - base element type to be processed
+ *
+ * "in" [ DATA ] - the input
+ */
+function < type T >
+T fixed_vec_sum #1.0 ( T [ * ] in )
+ = vdb:fixed_vec_sum;
+
/* checksum
* compute a checksum ( hash ) of all of the input bytes
@@ -634,6 +645,21 @@ T delta_zip_encoding #1.0
return zip < Z_RLE, Z_BEST_SPEED > ( dlt );
}
}
+physical < type T >
+T delta_average_zip_encoding #1.0
+{
+ decode
+ {
+ delta_averaged_fmt t = unzip ( @ );
+ return undelta_average ( t );
+ }
+
+ encode
+ {
+ delta_averaged_fmt t = delta_average ( @ );
+ return zip < Z_RLE, Z_BEST_SPEED > ( t );
+ }
+}
/* bzip
* bunzip
@@ -721,7 +747,7 @@ numeric_set strtonum #1.0 < * U32 radix > ( text_set str )
*
* formatting rules differ somewhat from C sprintf:
*
- * '%' [ <flags> ] [ <field-width> ] [ ':' <index-range> ] [ '.' <precision> ] <storage-class>
+ * '%' [ <flags> ] [ <field-width> ] [ '.' <precision> ] [ ':' <index> ] <storage-class>
*
* where:
*
@@ -739,22 +765,33 @@ numeric_set strtonum #1.0 < * U32 radix > ( text_set str )
* | '*' : take field width from args
* ;
*
- * index-range
- * = index
- * | index '-' index
+ * precision
+ * = DECIMAL : a base-10 numeral
+ * | '*' : take precision from args
+ * | : an empty precision means 0
* ;
*
* index
- * = DECIMAL : a base-10 numeral
- * | '$' : last vector element
+ * = idx : a single, zero-based vector element
+ * | idx '-' idx : a fully-closed, zero-based interval
+ * | idx '/' len : a start index plus length
+ * ;
+ *
+ * idx
+ * = DECIMAL : an unsigned base-10 numeral
* | '*' : take index from args
+ * | '$' : last element in cell
+ * | : an empty index means 0 or $
* ;
*
- * precision
+ * len
* = DECIMAL : a base-10 numeral
- * | '*' : take precision from args
+ * | '*' : take length from args
+ * | '$' : row-length of ( cell )
+ * | : an empty length means $
* ;
*
+ *
* storage-class
* = 'd' | 'i' : general decimal integer
* | 'u' : decimal unsigned integer
@@ -769,10 +806,12 @@ numeric_set strtonum #1.0 < * U32 radix > ( text_set str )
* ;
*
*
- * "fmt" [ CONST ] - constant format string
+ * "fmt" [ CONST ] - constant format string, adhering to
+ * the description above
*
* "p1" [ DATA ] - first param
* this and any subsequent params must correspond to format
+ * in type/position/number.
*/
function
text_set sprintf #1.0 < ascii fmt > ( any p1, ... )
diff --git a/interfaces/vfs/extern.h b/interfaces/vfs/extern.h
new file mode 100644
index 0000000..5b85276
--- /dev/null
+++ b/interfaces/vfs/extern.h
@@ -0,0 +1,42 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_extern_
+#define _h_vfs_extern_
+
+#if ! defined EXPORT_LATCH && defined _LIBRARY
+#define VFS_EXTERN LIB_EXPORT
+#define VFS_EXTERN_DATA extern LIB_EXPORT
+#define EXPORT_LATCH 1
+#else
+#define VFS_EXTERN LIB_IMPORT
+#endif
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#endif /* _h_vfs_extern_ */
diff --git a/interfaces/vfs/manager-priv.h b/interfaces/vfs/manager-priv.h
new file mode 100644
index 0000000..6039528
--- /dev/null
+++ b/interfaces/vfs/manager-priv.h
@@ -0,0 +1,115 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_vfs_manager_priv_
+#define _h_vfs_manager_priv_
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ENV_KRYPTO_PWFILE "VDB_PWFILE"
+#define KFG_KRYPTO_PWFILE "krypto/pwfile"
+#define KFG_KRYPTO_PWFD "krypto/pwfd"
+
+
+struct VFSManager;
+struct KDirectory;
+struct KFile;
+struct VPath;
+struct SRAPath;
+
+
+/* this resembles the interface functions in manager.h
+ * but allows the use of a KDirectory for the base instead of a VPath
+ * of a directory
+ *
+ * this is expected to be more temporary if this code base continues.
+ * much longer
+ */
+VFS_EXTERN rc_t CC VFSManagerResolvePathRelativeDir (const struct VFSManager * self,
+ uint32_t flags,
+ const struct KDirectory * base_dir,
+ const struct VPath * in_path,
+ struct VPath ** out_path);
+
+
+
+/* bad interface. Bad! Bad!
+ * but needed to hack VFS into KDB
+ */
+VFS_EXTERN rc_t CC VFSManagerOpenFileReadDirectoryRelative (const struct VFSManager *self,
+ const struct KDirectory * dir, struct KFile const **f, const struct VPath * path);
+
+VFS_EXTERN rc_t CC VFSManagerOpenFileReadDirectoryRelativeDecrypt (const struct VFSManager *self,
+ const struct KDirectory * dir, struct KFile const **f, const struct VPath * path);
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryReadDirectoryRelative ( const struct VFSManager *self,
+ struct KDirectory const * dir, struct KDirectory const **d, const struct VPath * path );
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryReadDirectoryRelativeDecrypt ( const struct VFSManager *self,
+ struct KDirectory const * dir, struct KDirectory const **d, const struct VPath * path );
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryUpdateDirectoryRelative ( const struct VFSManager *self,
+ struct KDirectory const * dir, struct KDirectory **d, const struct VPath * path );
+
+VFS_EXTERN rc_t CC VPathMakeDirectoryRelative ( struct VPath ** new_path,
+ struct KDirectory const * dir, const char * posix_path, struct SRAPath * srapathmgr);
+
+
+VFS_EXTERN rc_t CC VFSManagerOpenFileReadDecrypt (const struct VFSManager *self,
+ struct KFile const **f,
+ const struct VPath * path);
+
+
+/*
+ * quick hack for vdb-validate for immediate testing release
+ */
+VFS_EXTERN rc_t CC VFSManagerWGAValidateHack (const struct VFSManager * self,
+ const struct KFile * file,
+ const char * path); /* we'll move this to a vpath */
+
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_manager_priv_ */
diff --git a/interfaces/vfs/manager.h b/interfaces/vfs/manager.h
new file mode 100644
index 0000000..5c89823
--- /dev/null
+++ b/interfaces/vfs/manager.h
@@ -0,0 +1,306 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_vfs_manager_
+#define _h_vfs_manager_
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct VPath;
+struct SRAPath;
+struct VResolver;
+struct KDirectory;
+struct VPath;
+
+/* temporary */
+
+
+/*--------------------------------------------------------------------------
+ * VFSManager
+ */
+typedef struct VFSManager VFSManager;
+
+#define VFS_KRYPTO_PASSWORD_MAX_SIZE 4096
+
+
+/* AddRef
+ * Release
+ * ignores NULL references
+ */
+VFS_EXTERN rc_t CC VFSManagerAddRef ( const VFSManager *self );
+VFS_EXTERN rc_t CC VFSManagerRelease ( const VFSManager *self );
+
+/* OpenFileRead
+ * opens an existing file with read-only access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "path" [ IN ] VPath representing the path, URL or URN of the desired file
+ */
+VFS_EXTERN rc_t CC VFSManagerOpenFileRead (const VFSManager *self,
+ struct KFile const **f,
+ const struct VPath * path);
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryRead ( const VFSManager *self,
+ struct KDirectory const **d, const struct VPath * path );
+
+/* it forces decryption to be used for kdb */
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryReadDecrypt ( const VFSManager *self,
+ struct KDirectory const **d, const struct VPath * path );
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryUpdate ( const VFSManager *self,
+ struct KDirectory **d, const struct VPath * path );
+
+
+/* OpenFileWrite
+ * opens an existing file with write access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "update" [ IN ] - if true, open in read/write mode
+ * otherwise, open in write-only mode
+ *
+ * "path" [ IN ] VPath representing the path, URL or URN of the desired file
+ */
+VFS_EXTERN rc_t CC VFSManagerOpenFileWrite (const VFSManager *self,
+ struct KFile **f,
+ bool update,
+ const struct VPath * path);
+
+/* CreateFile
+ * opens a file with write access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "update" [ IN ] - if true, open in read/write mode
+ * otherwise, open in write-only mode
+ *
+ * "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ * "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ * "path" [ IN ] VPath representing the path, URL or URN of the desired file
+ */
+VFS_EXTERN rc_t CC VFSManagerCreateFile (const VFSManager *self,
+ struct KFile **f,
+ bool update, uint32_t access,
+ KCreateMode mode,
+ const struct VPath * path );
+
+
+/* Remove
+ * remove an accessible object from its directory
+ *
+ * "force" [ IN ] - if true and target is a directory,
+ * remove recursively
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target object
+ */
+VFS_EXTERN rc_t CC VFSManagerRemove (const VFSManager *self, bool force,
+ const struct VPath * path );
+
+
+/* Make
+ */
+VFS_EXTERN rc_t CC VFSManagerMake ( VFSManager ** pmanager );
+
+
+/* GetConfigPWFile
+ */
+VFS_EXTERN rc_t CC VFSManagerGetConfigPWFile (const VFSManager * self,
+ char * b, size_t bz, size_t * pz);
+
+
+/* GetCWD
+ */
+VFS_EXTERN rc_t CC VFSManagerGetCWD (const VFSManager * self, struct KDirectory ** cwd);
+
+/* GetSRAPath
+ * why aren't any of these functions properly commented?
+ */
+VFS_EXTERN rc_t CC VFSManagerGetSRAPath ( const VFSManager * self, struct SRAPath ** pmgr );
+
+VFS_EXTERN rc_t CC VFSManagerGetResolver ( const VFSManager * self, struct VResolver ** resolver );
+
+
+VFS_EXTERN rc_t CC VFSManagerGetKryptoPassword (const VFSManager * self, char * new_password, size_t max_size, size_t * size);
+
+#if 0 /* obsoleted? */
+VFS_EXTERN rc_t CC VFSManagerSetKryptoPassword (const VFSManager * self, char * new_password, size_t size);
+VFS_EXTERN rc_t CC VFSManagerResetKryptoPassword (const VFSManager * self,
+ char * new_password, size_t size,
+ char * new_password, size_t size);
+#else
+
+/*
+ NULL value for self
+ RC (rcVFS, rcEncryptionKey, rcUpdating, rcSelf, rcNull);
+
+ NULL value for password or 0 value for size
+ RC (rcVFS, rcEncryptionKey, rcUpdating, rcParam, rcNull);
+
+ size greater than VFS_KRYPTO_PASSWORD_MAX_SIZE
+ RC (rcVFS, rcEncryptionKey, rcUpdating, rcSize, rcExcessive);
+
+ illegal CR or LF (NL) in the password
+ RC (rcVFS, rcEncryptionKey, rcUpdating, rcEncryptionKey, rcInvalid);
+
+ path/file name for password too long for function as written
+ RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcExcessive);
+
+ existing password path/file name is not a file
+ RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcIncorrect);
+
+ unknown file type for configured path/file name
+ RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcCorrupt);
+
+ incomplete writes to temporary password file
+ RC (rcVFS, rcEncryptionKey, rcWriting, rcFile, rcInsufficient);
+
+ other errors from KFS and KLIB
+*/
+
+/* pwd_dir[pwd_dir_size] -
+ Output parameters for path to directory containing the password file.
+ pwd_dir is not updated if pwd_dir == NULL or pwd_dir_size == 0
+ or pwd_dir_size is insufficient to copy the path
+ */
+VFS_EXTERN rc_t CC VFSManagerUpdateKryptoPassword (const VFSManager * self,
+ const char * password,
+ size_t size,
+ char * pwd_dir,
+ size_t pwd_dir_size);
+
+#endif
+
+
+VFS_EXTERN rc_t CC VFSManagerResolveSpec ( const VFSManager * self,
+ const char * spec,
+ struct VPath ** path_to_build,
+ const struct KFile ** remote_file,
+ const struct VPath ** local_cache,
+ bool resolve_acc );
+
+struct KDirectory;
+
+VFS_EXTERN rc_t CC VFSManagerResolveSpecIntoDir ( const VFSManager * self,
+ const char * spec,
+ const struct KDirectory ** dir,
+ bool resolve_acc );
+
+/*--------------------------------------------------------------------------
+ * KConfig
+ * placing some KConfig code that relies upon VFS here
+ */
+struct KConfig;
+struct KConfigNode;
+
+
+/* ReadVPath
+ * read a VPath node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+VFS_EXTERN rc_t CC KConfigReadVPath ( struct KConfig const* self, const char* path, struct VPath** result );
+
+/* ReadVPath
+ * read a VPath node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+VFS_EXTERN rc_t CC KConfigNodeReadVPath ( struct KConfigNode const *self, struct VPath** result );
+
+
+
+/* ResolvePath
+ *
+ * take a VPath and resolve to a final form apropriate for KDB
+ *
+ * that is take a relative path and resolve it against the CWD
+ * or take an accession and resolve into the local or remote
+ * VResolver file based on config. It is just a single resolution percall
+ *
+ * flags
+ * can disable all Accession resolution
+ * can let VPath With no scheme be treated as a possible accession
+ *
+ */
+
+/* bit values for flags */
+ /* allow no local accession resolution */
+#define vfsmgr_rflag_no_acc_local (1<<0)
+ /* allow no remote accession resolution */
+#define vfsmgr_rflag_no_acc_remote (1<<1)
+ /* never do VResolver Accession resolution */
+#define vfsmgr_rflag_no_acc (vfsmgr_rflag_no_acc_local|vfsmgr_rflag_no_acc_remote)
+ /* use VResolver Accession resolution for simple names with no scheme */
+
+#define vfsmgr_rflag_kdb_acc (1<<2)
+ /* over ridden by vfsmgr_rflag_no_acc */
+
+
+VFS_EXTERN rc_t CC VFSManagerResolvePath (const VFSManager * self,
+ uint32_t flags,
+ const struct VPath * in_path,
+ struct VPath ** out_path);
+
+VFS_EXTERN rc_t CC VFSManagerResolvePathRelative (const VFSManager * self,
+ uint32_t flags,
+ const struct VPath * base_path,
+ const struct VPath * in_path,
+ struct VPath ** out_path);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_manager_ */
diff --git a/interfaces/vfs/path-priv.h b/interfaces/vfs/path-priv.h
new file mode 100644
index 0000000..98fe948
--- /dev/null
+++ b/interfaces/vfs/path-priv.h
@@ -0,0 +1,149 @@
+/*===========================================================================
+*
+* Public Domain Notice
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_path_priv_
+#define _h_vfs_path_priv_
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_vfs_path_
+#include <vfs/path.h>
+#endif
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+typedef int32_t VPUri_t;
+enum eVPUri_t
+{
+ vpuri_invalid = -1,
+ vpuri_none,
+ vpuri_not_supported,
+ vpuri_ncbi_file,
+ vpuri_ncbi_vfs = vpuri_ncbi_file,
+#if SUPPORT_FILE_URL
+ vpuri_file,
+#endif
+ vpuri_ncbi_acc,
+ vpuri_http,
+ vpuri_ftp,
+ vpuri_ncbi_legrefseq,
+ vpuri_count
+};
+*/
+
+#define NCBI_FILE_SCHEME "ncbi-file"
+#define NCBI_ACCESSION_SCHEME "ncbi-acc"
+#define HTTP_SCHEME "http"
+#define FTP_SCHEME "ftp"
+#define NCBI_LEGREFSEQ_SCHEME "x-ncbi-legrefseq"
+
+VFS_EXTERN VPUri_t VPathGetUri_t (const VPath * self);
+
+
+
+
+/* options for a VPath possibly obtained from a query string on an URI */
+typedef uint32_t VPOption_t;
+enum eVPOption_t
+{
+ vpopt_encrypted,
+ vpopt_pwpath,
+ vpopt_pwfd,
+ vpopt_readgroup,
+ vpopt_temporary_pw_hack,
+ vpopt_vdb_ctx,
+ vpopt_gap_ticket,
+ vpopt_count
+};
+
+
+/* =====
+ * Much of what follows is expected to move into the interface vfs/path.h
+ * once it becomes supported.
+ */
+
+/* MakeFmt
+ * make a path object from a format string plus arguments
+ *
+ * "new_path" [ OUT ] - a reference to the new object.
+ *
+ * "fmt" [ IN ] and "args" [ IN ] - arguments to string_printf
+ * ( see <klib/text.h> ) to build a NUL-terminated string
+ * that conforms with the rules for "posix_path"
+ *
+ * NB - SECURITY RISK IF USED DIRECTLY FROM EXTERNAL STRINGS.
+ * ALSO, FMT IS **NOT** PRINTF COMPATIBLE - see string_printf.
+ */
+VFS_EXTERN rc_t CC VPathMakeFmt ( VPath ** new_path, const char * fmt, ... );
+VFS_EXTERN rc_t CC VPathMakeVFmt ( VPath ** new_path, const char * fmt, va_list args );
+
+
+/* Bill - I don't know that we're ready to export these yet */
+VFS_EXTERN rc_t CC VPathMakeRelative ( VPath ** new_path, const VPath * base_path,
+ const char * relative_path );
+VFS_EXTERN rc_t CC VPathMakeRelativeFmt ( VPath ** new_path, const VPath * base_path,
+ const char * fmt, ... );
+VFS_EXTERN rc_t CC VPathVMakeRelativeFmt ( VPath ** new_path, const VPath * base_path,
+ const char * fmt, va_list args );
+VFS_EXTERN rc_t CC VPathMakeCurrentPath ( VPath ** new_path );
+
+VFS_EXTERN rc_t CC VPathMakeURI ( VPath ** new_path, const char * uri );
+
+
+VFS_EXTERN rc_t CC VPathReadPath ( const VPath * self, char * buffer,
+ size_t buffer_size, size_t * num_read);
+
+VFS_EXTERN rc_t CC VPathOption ( const VPath * self, VPOption_t option,
+ char * buffer, size_t buffer_size,
+ size_t * num_read);
+
+/*
+ * copy the path string out of a KPath object.
+ * if buffer is too short an RC (rcBuffer, rcInsufficient) is returned
+ * and nothing is copied.
+ * if there is a room the NUL is copied as well
+ */
+VFS_EXTERN rc_t CC VPathReadPath ( const VPath * self, char * buffer,
+ size_t buffer_size, size_t * num_read);
+
+
+/* get current working directory */
+VFS_EXTERN rc_t CC VPathGetCWD (char * buffer, size_t buffer_size);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_path_priv_ */
diff --git a/interfaces/vfs/path.h b/interfaces/vfs/path.h
new file mode 100644
index 0000000..9a1df57
--- /dev/null
+++ b/interfaces/vfs/path.h
@@ -0,0 +1,289 @@
+/*===========================================================================
+*
+* Public Domain Notice
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_path_
+#define _h_vfs_path_
+
+#ifndef SUPPORT_FILE_URL
+#define SUPPORT_FILE_URL 1
+#endif
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct String;
+
+
+/*--------------------------------------------------------------------------
+ *
+ * The ABNF form described in RFC5234 will be used to define URLS and paths
+ * with some handwaving instead of complete character definitions for case
+ * insensitivity. CORE definitions from RFC5234 will be used again handwaving
+ * case insensitivity.
+ *
+ * --------------------
+ *
+ * URL for a VPath
+ *
+ * as per RFC 3986, an URI consists of:
+ *
+ * URI = scheme ":" heir-part [ "?" query ] [ "#" fragment ]
+ *
+ * We will support however something intbetween an URI and an IRI in that we'll
+ * all UTF-8 rather than limit certain characters to ASCII.
+ *
+ * For the NCBI path URL: The hier-part is intended to be compatible with the
+ * "file:" scheme Authority on any of the Unix-like operating
+ * systems must either be empty or "localhost". For Windows
+ * it must be a host that can be used if the "file" url is
+ * translated into a UNC style Windows path. Also in a
+ * Windows vfs: URL a single colon ':' will be allowed only at
+ * the end of a single character rive letter for the first
+ * sub-part of the path.
+ *
+ * scheme = "ncbi-file" ; ( case insensitive )
+ *
+ * hier-part = "//" authority path-abempty
+ * / path-absolute
+ * / path-relative
+ * / path-empty
+ *
+ * by RFC 3986 authority is
+ * authority = [ userinfo "@" ] host [ ":" port]
+ * but at this point we only recognize
+ * authority = host
+ *
+ * by RFC 3986 host is
+ * host = IP-literal / IPv4address / reg-name
+ * but at this point we only recognize
+ * host = reg-name
+ *
+ * reg-name = *( unreserved / pct-encoded / sub-delims )
+ *
+ * path = path-abempty
+ * / path-absolute
+ * / path-noscheme
+ * / path-rootless
+ * / path-empty
+ *
+ * path-abempty = * ( "/" segment )
+ *
+ * path-absolute = "/" segment-nz *( "/" segment )
+ *
+ * path-noscheme = segment-nz-nc *( "/" segment )
+ *
+ * path-rootless = segment-nz *( "/" segment )
+ *
+ * path-empty = ""
+ *
+ * segment = *pchar ; can be empty
+ * segment-nz = 1*pchar ; can't be empty
+ * segment-nz-nc = 1*pchar-nz ; can't be empty
+ *
+ * pchar = ":" / pchar-nc
+ *
+ * pchar-nc = unreserved / pct-encoded / sub-delims ? "@"
+ *
+ * pct-encoded = "%" HEXDIG HEXDIG ; hex digits are 0-9, a-f or A-F
+ *
+ * authority = "localhost" / host-name ; the host name is an O/S specific
+ * ; name of a remote host
+ *
+ * query = query_entry [ * ( "&" query_entry ) ]
+ *
+ * query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
+ *
+ * fd = 1* DIGIT
+ *
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" / UTF-8
+ *
+ * reserved = gen-delims / subdelims
+ *
+ * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
+ *
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*"
+ * / "+" / "," / ";" / "="
+ *
+ * Handwaving on the UTF-8. We'll accept it rather than requiring percent encoding
+ * in most cases.
+
+ * Examples:
+ * "ncbi-file://home/my-name/data-files"
+ * "ncbi-file://win-server/archive/secure/read12345?encrypted"
+ * "ncbi-file:///c:/scanned-data/0001/file.sra?enc?pwd-file=c:/Users/JamesMcCoy/ncbi.pwd"
+ *
+ * We allow an implied scheme of "vfs" if none present.
+ * 'host-name' is partially implemented for Windows. Not currently for any the
+ * of the supported Unix systems. We do not support IP addresses instead of
+ * host names.
+ *
+ * 'path' can be either absolute or relative and must be posix style as per
+ * RFC 3986 and matches the "file" scheme.
+ *
+ * 'fragment' is not yet implemented or defined.
+ *
+ * 'fd' is a system specific file handle. Not yet supported on Windows.
+ *
+ * --------------------
+ *
+ * VFS posix_path representation:
+ *
+ * The internal representation of a path for VFS resembles very closely the
+ * POSIX pathname crossed with the Windows UNC path. Only the Unix "/"
+ * separator is allowed not the "\" for paths.
+ *
+ * posix-path = full-path / relative-path
+ *
+ * full-path = ["//" host] "/" [ directory-path "/" ] resource
+ *
+ * relative-path = [ directory-path "/" ] resource
+ *
+ * directory-path = resource [ "/" directory-path ]
+ *
+ * resource = string ; (UTF-8 O/S specific name for a directory or a file)
+ *
+ * host = string ; (UTF-8 O/S specific name for the local or remote host)
+ *
+ * For a host "localhost" is a synonym for the current host.
+ * The "//host" is not guaranteed to work for all systems except "//localhost"
+ *
+ * The resource "." is assumed to mean the local directory and will be stripped
+ * when a path is made canonical.
+ *
+ * The resource ".." is assumed to mean the containing directory and when made
+ * canonical it will be left in at the begining for relative paths or removed along
+ * with the preceding resource name.
+ *
+ * For Windows the device is handled in a unique way with some potential for ambiguity.
+ * The UNC approach for a named drive "C:" becomes "/c". So "C:\" becomes "/c/".
+ *
+ * In the future the complex approach from the "file:" URL should be adopted
+ * with the ":" allowed only in the first directory name in a path. RFC 3986
+ * notes though that this complex approach puts some five variants into the ABNF
+ * to describe the path portion of an URL.
+ */
+
+typedef struct VPath VPath;
+
+/* AddRef
+ * Release
+ * ignores NULL references
+ */
+VFS_EXTERN rc_t CC VPathAddRef ( const VPath *self );
+VFS_EXTERN rc_t CC VPathRelease ( const VPath *self );
+
+
+/* Make
+ * make a path object from a POSIX path string
+ * or an URL using the vfs scheme. THe file scheme might be supported in the
+ * future perhaps with other suitable schemes as well.
+ *
+ * "new_path" [ OUT ] - a reference to the new object.
+ *
+ * "posix_path" [ IN ] - a UTF-8, NUL-terminated POSIX-compliant path
+ * or a fully formed "vfs" or "file" url.
+ */
+VFS_EXTERN rc_t CC VPathMake ( VPath ** new_path, const char * posix_path);
+
+
+/* MakeSysPath
+ * make a path object from an external, OS-specific path string
+ * or a listed vfs URL.
+ *
+ * "new_path" [ OUT ] - a reference to the new object.
+ *
+ * "sys_path" [ IN ] - a UTF-8, NUL-terminated, O/S specific file path
+ * with an optional query part for encryption.
+ * The path portion must be legal characters in path names for the O/S in use.
+ *
+ * NB - see <klib/text.h> for functions to convert between character sets.
+ */
+VFS_EXTERN rc_t CC VPathMakeSysPath ( VPath ** new_path, const char * sys_path );
+
+
+/* ReadPath
+ * returns the hierarchical part of the VPath
+ */
+VFS_EXTERN rc_t CC VPathReadPath ( const VPath * self,
+ char * buffer, size_t buffer_size, size_t * num_read );
+
+/* GetPath
+ * returns an allocation of hierarchical part of the VPath ( ? )
+ */
+VFS_EXTERN rc_t CC VPathGetPath ( const VPath * self, struct String const ** path );
+
+
+/* MakeString
+ * convert a VPath into a String
+ * create a String that is the "URI" representation of VPath.
+ * If the incoming string had no scheme, this will not as well
+ */
+VFS_EXTERN rc_t CC VPathMakeString ( const VPath * self, struct String const ** uri );
+
+
+/* GetScheme
+ * returns the scheme as an allocation or as an enum
+ */
+typedef int32_t VPUri_t;
+enum eVPUri_t
+{
+ vpuri_invalid = -1,
+ vpuri_none,
+ vpuri_not_supported,
+ vpuri_ncbi_file,
+ vpuri_ncbi_vfs = vpuri_ncbi_file,
+#if SUPPORT_FILE_URL
+ vpuri_file,
+#endif
+ vpuri_ncbi_acc,
+ vpuri_http,
+ vpuri_ftp,
+ vpuri_ncbi_legrefseq,
+ vpuri_count
+};
+
+VFS_EXTERN rc_t CC VPathGetScheme ( const VPath * self, struct String const ** scheme );
+VFS_EXTERN rc_t CC VPathGetScheme_t ( const VPath * self, VPUri_t * uri_type );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_path_ */
diff --git a/interfaces/vfs/resolver.h b/interfaces/vfs/resolver.h
new file mode 100644
index 0000000..76c5ffb
--- /dev/null
+++ b/interfaces/vfs/resolver.h
@@ -0,0 +1,206 @@
+/*===========================================================================
+*
+* Public Domain Notice
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_resolver_
+#define _h_vfs_resolver_
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct VPath;
+struct KConfig;
+struct VFSManager;
+
+
+/*--------------------------------------------------------------------------
+ * VResolver
+ */
+typedef struct VResolver VResolver;
+
+
+/* Make
+ * ask the VFS manager to make a resolver
+ */
+VFS_EXTERN rc_t CC VFSManagerMakeResolver ( struct VFSManager const * self,
+ VResolver ** new_resolver, struct KConfig const * cfg );
+
+
+/* AddRef
+ * Release
+ */
+VFS_EXTERN rc_t CC VResolverAddRef ( const VResolver * self );
+VFS_EXTERN rc_t CC VResolverRelease ( const VResolver * self );
+
+
+/* Local
+ * Find an existing local file/directory that is named by the accession.
+ * rcState of rcNotFound means it does not exist.
+ *
+ * other rc code for failure are possible.
+ *
+ * Accession must be an ncbi-acc scheme or a simple name with no
+ * directory paths.
+ */
+VFS_EXTERN rc_t CC VResolverLocal ( const VResolver * self,
+ struct VPath const * accession, struct VPath const ** path );
+
+
+/* Remote
+ * Find an existing remote file that is named by the accession.
+ *
+ * rcState of rcNotFound means it did not exist and can not be
+ * downloaded. Probably a bad accession name.
+ *
+ * Need a specific rc for no network configured.
+ * Need a specific rc for network access permitted.
+ *
+ * Other rc code for failure are possible.
+ *
+ * Accession must be an ncbi-acc scheme or a simple name with no
+ * directory paths.
+ *
+ * "opt_file_rtn" [ OUT, NULL OKAY ] - optional return parameter for
+ * any KFile that may be opened as a result of resolution. This can
+ * happen if resolving an accession involves opening a URL to a
+ * remote server, for example, in which case the KFile can be returned.
+ */
+VFS_EXTERN rc_t CC VResolverRemote ( const VResolver * self,
+ struct VPath const * accession, struct VPath const ** path,
+ struct KFile const ** opt_file_rtn );
+
+
+/* Cache
+ * Find a cache directory that might or might not contain a partially
+ * downloaded file.
+ *
+ * Accession must be an ncbi-acc scheme, an http url or a simple name with no
+ * directory paths. All three should return the same directory URL as a VPath. (?)
+ * Or should it be a directory or a file url depending upon finding a partial
+ * download? This would require co-ordination with all download mechanisms that
+ * we permit.
+ *
+ * With refseq holding wgs objects we have a case were the downloaded file is not
+ * named the same as the original accession as the file archive you want is a
+ * container for other files.
+ *
+ * Find local will give a path that has a special scheme in these cases.
+ * Find remote will give the url for the container that contains the accession
+ * so using the returned VPath from resolve remote is better than the original
+ * accession in this one case. I think...
+ */
+VFS_EXTERN rc_t CC VResolverCache ( const VResolver * self,
+ struct VPath const * url, struct VPath const ** path, uint64_t file_size );
+
+
+/* EnableState
+ * modifies how the various properties are interpreted
+ */
+typedef uint32_t VResolverEnableState;
+enum
+{
+ vrUseConfig = 0, /* take enable/disable state from KConfig */
+ vrAlwaysEnable = 1, /* always enable, regardless of KConfig */
+ vrAlwaysDisable = 2 /* always disable, regardless of KConfig */
+};
+
+
+/* LocalEnable
+ * modify settings for using local repositories,
+ * meaning site, user-public and user-protected.
+ *
+ * "enable" [ IN ] - enable or disable local access,
+ * or follow settings in KConfig
+ *
+ * returns the previous state of "remote-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ * shared libraries in separate closures will have separate
+ * state. this can only occur if dynamic ( manual ) loading of
+ * shared libraries is used, and will not occur with normal
+ * usage. in VDB-3 the state will be stored with the process,
+ * not the library.
+ */
+VFS_EXTERN VResolverEnableState CC VResolveLocalEnable ( const VResolver * self,
+ VResolverEnableState enable );
+
+
+/* RemoteEnable
+ * modify settings for using remote repositories
+ *
+ * "enable" [ IN ] - enable or disable remote access,
+ * or follow settings in KConfig
+ *
+ * returns the previous state of "remote-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ * shared libraries in separate closures will have separate
+ * state. this can only occur if dynamic ( manual ) loading of
+ * shared libraries is used, and will not occur with normal
+ * usage. in VDB-3 the state will be stored with the process,
+ * not the library.
+ */
+VFS_EXTERN VResolverEnableState CC VResolverRemoteEnable ( const VResolver * self,
+ VResolverEnableState enable );
+
+
+/* CacheEnable
+ * modify settings for caching files in user repositories
+ *
+ * "enable" [ IN ] - enable or disable user repository cache,
+ * or follow settings in KConfig
+ *
+ * returns the previous state of "cache-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ * shared libraries in separate closures will have separate
+ * state. this can only occur if dynamic ( manual ) loading of
+ * shared libraries is used, and will not occur with normal
+ * usage. in VDB-3 the state will be stored with the process,
+ * not the library.
+ */
+VFS_EXTERN VResolverEnableState CC VResolverCacheEnable ( const VResolver * self,
+ VResolverEnableState enable );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_resolver_ */
diff --git a/libs/Makefile b/libs/Makefile
index 18d43d4..2840672 100644
--- a/libs/Makefile
+++ b/libs/Makefile
@@ -36,8 +36,11 @@ SUBDIRS = \
klib \
kproc \
kfs \
+ kns \
kxml \
kfg \
+ krypto \
+ vfs \
kapp \
kdb \
vdb \
@@ -46,7 +49,10 @@ SUBDIRS = \
sra \
sraxf \
align \
- axf
+ axf \
+ wgsxf \
+ ktst \
+ loader
default: $(SUBDIRS)
@@ -104,6 +110,17 @@ $(SUBDIRS_TAG):
.PHONY: tag $(SUBDIRS_TAG)
+#-------------------------------------------------------------------------------
+# runtests
+#
+SUBDIRS_RUNTESTS = $(addsuffix _runtests, kfg vxf)
+
+runtests: std $(SUBDIRS_RUNTESTS)
+
+$(SUBDIRS_RUNTESTS):
+ @ $(MAKE) -C $(subst _runtests,,$@) runtests
+
+.PHONY: runtests $(SUBDIRS_RUNTESTS)
#-------------------------------------------------------------------------------
# pass-through
diff --git a/libs/align/Makefile b/libs/align/Makefile
index 26aca1b..22ee629 100644
--- a/libs/align/Makefile
+++ b/libs/align/Makefile
@@ -72,6 +72,14 @@ clean: stdclean
.PHONY: clean
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+ $(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
#-------------------------------------------------------------------------------
# libncbi-bam
@@ -85,15 +93,19 @@ BAM_OBJ = \
$(addsuffix .$(LOBX),$(BAM_SRC))
BAM_LIB = \
+ -lvfs \
-lkfs \
-lklib \
-lz
$(ILIBDIR)/libncbi-bam.$(SHLX): $(BAM_OBJ)
- $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(BAM_LIB)
+ $(LD) --dlib -o $@ $^ $(BAM_LIB)
$(ILIBDIR)/libncbi-bam.$(LIBX): $(BAM_OBJ)
- $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(BAM_LIB)
+ $(LD) --slib -o $@ $^ $(BAM_LIB)
+
+libncbi-bam_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) libncbi-bam $(BAM_OBJ)
#-------------------------------------------------------------------------------
@@ -109,7 +121,9 @@ ALIGN_ACCESS_OBJ = \
ALIGN_ACCESS_LIB = \
-sncbi-bam \
+ -lvfs \
-lkfs \
+ -dkproc \
-lklib \
-lz
@@ -119,6 +133,8 @@ $(LIBDIR)/libalign-access.$(SHLX): $(ALIGN_ACCESS_OBJ)
$(LIBDIR)/libalign-access.$(LIBX): $(ALIGN_ACCESS_OBJ)
$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(ALIGN_ACCESS_LIB)
+libalign-access_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) libalign-access $(ALIGN_ACCESS_OBJ)
#-------------------------------------------------------------------------------
# align-reader
@@ -126,9 +142,17 @@ $(LIBDIR)/libalign-access.$(LIBX): $(ALIGN_ACCESS_OBJ)
$(LIBDIR)/libalign-reader: $(addprefix $(LIBDIR)/libalign-reader.,$(LIBEXT))
ALIGN_READER_SRC = \
+ align_mgr \
+ al_iterator \
+ ref_iterator \
+ pl_iterator \
+ dna-reverse-cmpl \
+ reference-cmn \
reader-cmn \
reader-refseq \
- refseq-mgr
+ reference \
+ refseq-mgr \
+ quality-quantizer
ALIGN_READER_OBJ = \
$(addsuffix .$(LOBX),$(ALIGN_READER_SRC))
@@ -147,14 +171,18 @@ $(LIBDIR)/libalign-reader.$(SHLX): $(ALIGN_READER_OBJ)
$(LIBDIR)/libalign-reader.$(LIBX): $(ALIGN_READER_OBJ)
$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(ALIGN_READER_LIB)
+libalign-reader_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) libalign-reader $(ALIGN_READER_OBJ)
#-------------------------------------------------------------------------------
# align-writer
#
-$(ILIBDIR)/libalign-writer: $(addprefix $(ILIBDIR)/libalign-writer.,$(ILIBEXT))
+$(ILIBDIR)/libalign-writer: $(addprefix $(ILIBDIR)/libalign-writer.,$(LIBX))
ALIGN_WRITER_SRC = \
+ dna-reverse-cmpl \
reader-cmn \
+ reference-cmn \
reader-refseq \
refseq-mgr \
writer-cmn \
@@ -180,3 +208,6 @@ $(ILIBDIR)/libalign-writer.$(SHLX): $(ALIGN_WRITER_OBJ)
$(ILIBDIR)/libalign-writer.$(LIBX): $(ALIGN_WRITER_OBJ)
$(LD) --slib -o $@ $^ $(ALIGN_WRITER_LIB)
+
+libalign-writer_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) libalign-writer $(ALIGN_WRITER_OBJ)
diff --git a/libs/align/al_iterator.c b/libs/align/al_iterator.c
new file mode 100644
index 0000000..e53fc27
--- /dev/null
+++ b/libs/align/al_iterator.c
@@ -0,0 +1,562 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <insdc/insdc.h>
+#include <align/iterator.h>
+#include <align/manager.h>
+#include <vdb/cursor.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#define COL_READ "READ"
+#define COL_HAS_MISMATCH "HAS_MISMATCH"
+#define COL_HAS_REF_OFFSET "HAS_REF_OFFSET"
+#define COL_REF_OFFSET "REF_OFFSET"
+
+typedef struct pos_offset
+{
+ uint32_t pos;
+ int32_t offset;
+} pos_offset;
+
+
+struct AlignmentIterator
+{
+ struct AlignMgr const *amgr; /* the alignment-manager... */
+
+ /* data to walk */
+ bool * has_mismatch; /* copy of HAS_MISMATCH */
+ INSDC_4na_bin * read; /* copy of READ */
+ uint32_t read_len; /* length of READ */
+ uint32_t ref_len; /* length of projection on reference */
+
+ INSDC_coord_zero ref_window_start; /* where the requested window on the reference starts */
+ INSDC_coord_len ref_window_len; /* how long the requested window on the reference is */
+
+ pos_offset * pos_ofs; /* computed by walking HAS_REF_OFFSET, REF_OFFSET ( method 1 ) */
+ uint32_t pos_ofs_idx; /* current index into pos_ofs[] */
+ uint32_t pos_ofs_cnt; /* how many pos_ofs-values are there */
+
+ int32_t abs_ref_start; /* absolute reference-related start-position */
+ int32_t rel_ref_pos; /* relative reference-related position ( relative to start of sequence ) */
+ uint32_t seq_pos; /* position on the sequence, as the reference sees it */
+ uint32_t skip; /* how many bases to skip if we are in DELETE */
+ uint32_t flags; /* flags it, when we are in INSERT/DELETE */
+ uint32_t inserts; /* how many inserts */
+
+ KRefcount refcount;
+ bool free_on_whack; /* true if allocated and allowing references */
+ uint8_t align [ 3 ];
+};
+
+
+/* forward decl. for private helper functions */
+static rc_t compute_posofs( AlignmentIterator * self,
+ const bool * has_ref_offset,
+ const int32_t * ref_offset,
+ uint32_t ref_offset_len );
+
+static void al_iter_adjust_next( AlignmentIterator * self );
+
+LIB_EXPORT void CC AlignIteratorRecordDestroy ( void *obj, void *data )
+{
+ /* nothing to do, because there are no sub-allocations etc. ... */
+}
+
+
+static rc_t get_idx_and_read( struct VCursor const *curs,
+ const char * name,
+ int64_t row_id,
+ const void ** base,
+ uint32_t * len )
+{
+ uint32_t column_idx;
+ rc_t rc = VCursorGetColumnIdx ( curs, &column_idx, name );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "VCursorGetColumnIdx() failed" );
+ else
+ {
+ uint32_t elem_bits, boff, len_intern;
+ const void * ptr;
+ rc = VCursorCellDataDirect ( curs, row_id, column_idx,
+ &elem_bits, &ptr, &boff, &len_intern );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "VCursorCellDataDirect() failed" );
+ else
+ {
+ assert( boff == 0 );
+ if ( len != NULL ) *len = len_intern;
+ if ( base != NULL ) *base = ptr;
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignIteratorRecordPopulate ( void *obj,
+ const PlacementRecord *placement, struct VCursor const *curs,
+ INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len, void *data )
+{
+ /* read the data required to build a Alignment-Iterator,
+ then create the Alignment-Iterator into the already allocated memory */
+ const void * base;
+ const void * base_has_ref_offset;
+ const void * base_ref_offset;
+
+ INSDC_coord_len data_len;
+ uint32_t ref_offset_len;
+ rc_t rc;
+
+ AlignmentIterator *iter = ( AlignmentIterator * ) obj;
+ AlignMgr *almgr = ( AlignMgr * ) data;
+
+ uint8_t * ptr = ( void* ) iter;
+ ptr += ( sizeof *iter );
+
+ rc = get_idx_and_read( curs, COL_HAS_MISMATCH, placement->id, &base, &data_len );
+ if ( rc == 0 )
+ {
+ /* copy HAS_MISMATCH into place, point the header-value to it, advance */
+ memcpy( ptr, base, data_len );
+ iter->has_mismatch = (bool *)ptr;
+ ptr += data_len;
+ }
+
+ if ( rc == 0 )
+ {
+ rc = get_idx_and_read( curs, COL_READ, placement->id, &base, &data_len );
+ /* copy READ into place, point the header-value to it, advance */
+ if ( rc == 0 )
+ {
+ memcpy( ptr, base, data_len );
+ iter->read = ( INSDC_4na_bin * )ptr;
+ iter->read_len = data_len;
+ iter->abs_ref_start = placement->pos;
+ iter->ref_len = placement->len;
+ iter->rel_ref_pos = 0;
+ iter->seq_pos = 0;
+ ptr += data_len;
+ iter->pos_ofs = (pos_offset *)ptr;
+ iter->ref_window_start = ref_window_start;
+ iter->ref_window_len = ref_window_len;
+ iter->free_on_whack = false;
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ rc = get_idx_and_read( curs, COL_HAS_REF_OFFSET, placement->id, &base_has_ref_offset, &data_len );
+ }
+ if ( rc == 0 )
+ {
+ rc = get_idx_and_read( curs, COL_REF_OFFSET, placement->id, &base_ref_offset, &ref_offset_len );
+ }
+ if ( rc == 0 )
+ {
+ rc = compute_posofs( iter,
+ ( const bool * )base_has_ref_offset,
+ ( const int32_t * )base_ref_offset,
+ ref_offset_len );
+ }
+ if ( rc == 0 )
+ {
+ if ( iter->pos_ofs_idx == 0 )
+ al_iter_adjust_next( iter );
+ KRefcountInit( &iter->refcount, 1, "AlignmentIterator", "Make", "align" );
+ data_len = 0;
+ while( ( iter->abs_ref_start + iter->rel_ref_pos ) < ref_window_start && rc == 0 )
+ {
+ rc = AlignmentIteratorNext ( iter );
+ data_len++;
+ }
+ }
+ if ( rc == 0 ) { rc = AlignMgrAddRef ( almgr ); }
+ if ( rc == 0 ) { iter->amgr = almgr; }
+
+/*
+ if ( rc == 0 )
+ {
+ OUTMSG(( "placement[%lu] at %u (w=%u) next(%u) \n",
+ placement->id, iter->abs_ref_start, ref_window_start, data_len ));
+ }
+*/
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignIteratorRecordSize ( struct VCursor const *curs, int64_t row_id, size_t *size, void *data )
+{
+ uint32_t ref_offset_len, read_len;
+
+ rc_t rc = get_idx_and_read( curs, COL_REF_OFFSET, row_id, NULL, &ref_offset_len );
+ if ( rc == 0 )
+ rc = get_idx_and_read( curs, COL_READ, row_id, NULL, &read_len );
+
+ if ( rc == 0 )
+ {
+ AlignmentIterator * ali = NULL;
+ size_t po_size = ( ( sizeof *(ali->pos_ofs) ) * ( ref_offset_len ) );
+ *size = ( ( sizeof *ali ) + ( read_len * 2 ) + po_size );
+ }
+
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignMgrMakeAlignmentIterator ( struct AlignMgr const *self,
+ AlignmentIterator **iter,
+ bool copy,
+ INSDC_coord_zero ref_pos,
+ INSDC_coord_len ref_len,
+ const INSDC_4na_bin *read,
+ INSDC_coord_len read_len,
+ const bool *has_mismatch,
+ const bool *has_ref_offset,
+ const int32_t *ref_offset,
+ uint32_t ref_offset_len,
+ INSDC_coord_zero ref_window_start,
+ INSDC_coord_len ref_window_len )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+ else
+ {
+ if ( iter == NULL || has_mismatch == NULL || has_ref_offset == NULL ||
+ read == NULL || read_len == 0 )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+ else
+ {
+ AlignmentIterator * ali = NULL;
+ size_t po_size = ( ( sizeof *(ali->pos_ofs) ) * ( ref_offset_len ) );
+ size_t full_size = ( sizeof *ali ) + ( read_len * 2 ) + po_size;
+
+ uint8_t * ptr = calloc( full_size, 1 );
+ *iter = NULL;
+ if ( ptr == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ ali = ( AlignmentIterator * )ptr;
+ ptr += ( sizeof *ali );
+
+ KRefcountInit( &ali->refcount, 1, "AlignmentIterator", "Make", "align" );
+
+ /* copy HAS_MISMATCH into place, point the header-value to it, advance */
+ memcpy( ptr, has_mismatch, read_len );
+ ali->has_mismatch = (bool *)ptr;
+ ptr += read_len;
+
+ /* copy READ into place, point the header-value to it, advance */
+ memcpy( ptr, read, read_len );
+ ali->read = ( INSDC_4na_bin * )ptr;
+ ptr += read_len;
+
+ ali->read_len = read_len;
+ ali->ref_len = ref_len;
+ ali->abs_ref_start = ref_pos;
+ ali->pos_ofs = (pos_offset *)ptr;
+ ali->ref_window_start = ref_window_start;
+ ali->ref_window_len = ref_window_len;
+ ali->free_on_whack = true;
+
+ rc = compute_posofs( ali, has_ref_offset, ref_offset, ref_offset_len );
+ if ( ali->pos_ofs_idx == 0 )
+ al_iter_adjust_next( ali );
+
+ if ( rc == 0 )
+ {
+ rc = AlignMgrAddRef ( self );
+ if ( rc == 0 )
+ ali->amgr = self;
+ }
+ }
+
+ if ( rc == 0 )
+ *iter = ali;
+ else
+ free( ali );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignmentIteratorAddRef( const AlignmentIterator * cself )
+{
+ rc_t rc = 0;
+ if ( cself == NULL )
+ rc = RC( rcAlign, rcIterator, rcAttaching, rcSelf, rcNull );
+ else
+ {
+ if ( KRefcountAdd( &cself->refcount, "AlignmentIterator" ) != krefOkay )
+ {
+ rc = RC( rcAlign, rcIterator, rcAttaching, rcError, rcUnexpected );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignmentIteratorRelease( const AlignmentIterator * cself )
+{
+ rc_t rc = 0;
+ if ( cself == NULL )
+ rc = RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+ else
+ {
+ if ( KRefcountDrop( &cself->refcount, "AlignmentIterator" ) == krefWhack )
+ {
+ AlignmentIterator * self = ( AlignmentIterator * ) cself;
+ AlignMgrRelease ( self->amgr );
+ if ( self->free_on_whack )
+ free( self );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignmentIteratorNext ( AlignmentIterator *self )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcPositioning, rcSelf, rcNull );
+ else
+ {
+ self->flags = 0;
+ self->rel_ref_pos++;
+
+ if ( self->rel_ref_pos >= self->ref_len )
+ rc = SILENT_RC( rcAlign, rcIterator, rcPositioning, rcItem, rcDone );
+ else
+ {
+ if ( self->skip > 0 )
+ {
+ self->flags |= align_iter_skip;
+ self->skip--;
+ }
+ else if ( self->inserts > 0 )
+ {
+ self->seq_pos += ( self->inserts + 1 );
+ self->inserts = 0;
+ }
+ else
+ {
+ self->seq_pos++;
+ }
+ al_iter_adjust_next( self );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT int32_t CC AlignmentIteratorState ( const AlignmentIterator *self,
+ INSDC_coord_zero *seq_pos )
+{
+ uint32_t res = align_iter_invalid;
+ if ( self != NULL )
+ {
+ INSDC_coord_zero pos = self->seq_pos;
+ if ( pos < self->read_len )
+ {
+ res = ( self->read[ pos ] & 0x0F );
+
+ if ( self->rel_ref_pos < 1 )
+ res |= align_iter_first;
+
+ if ( self->rel_ref_pos == ( self->ref_len - 1 ) )
+ res |= align_iter_last;
+
+ if ( !self->has_mismatch[ pos ] )
+ res |= align_iter_match;
+
+ res |= self->flags;
+
+ if ( seq_pos != NULL )
+ *seq_pos = pos;
+ }
+ }
+ return res;
+}
+
+
+LIB_EXPORT rc_t CC AlignmentIteratorPosition ( const AlignmentIterator *self,
+ INSDC_coord_zero *pos )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcPositioning, rcSelf, rcNull );
+ else
+ {
+ if ( pos == NULL )
+ rc = RC( rcAlign, rcIterator, rcPositioning, rcParam, rcNull );
+ else
+ {
+ *pos = ( self->abs_ref_start + self->rel_ref_pos );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT uint32_t CC AlignmentIteratorBasesInserted
+ ( const AlignmentIterator *self, const INSDC_4na_bin **bases )
+{
+ uint32_t res = 0;
+ if ( ( self != NULL )&&( bases != NULL ) )
+ {
+ res = self->inserts;
+ *bases = &( self->read[ self->seq_pos + 1 ] );
+ }
+ return res;
+}
+
+
+LIB_EXPORT uint32_t CC AlignmentIteratorBasesDeleted
+ ( const AlignmentIterator *self, INSDC_coord_zero *pos )
+{
+ uint32_t res = 0;
+ if ( ( self != NULL )&&( pos != NULL ) )
+ {
+ res = ( self->skip );
+ *pos = ( self->abs_ref_start + self->rel_ref_pos + 1 );
+ }
+ return res;
+}
+
+
+/* ============ private static functions ============ */
+static rc_t compute_posofs( AlignmentIterator * self,
+ const bool * has_ref_offset, const int32_t * ref_offset, uint32_t ref_offset_len )
+{
+ rc_t rc = 0;
+
+ self->pos_ofs_idx = 0;
+ self->pos_ofs_cnt = ref_offset_len;
+ if ( ref_offset_len > 0 )
+ {
+ int32_t shift = 0;
+ uint32_t seq_position;
+ uint32_t src = 0;
+ uint32_t dst = 0;
+
+ if ( has_ref_offset[ 0 ] && ( ref_offset[ 0 ] < 0 ) )
+ {
+ shift = ref_offset[ src++ ];
+ self->seq_pos = -( shift );
+ self->pos_ofs_cnt--;
+ }
+
+ seq_position = self->seq_pos;
+ while( seq_position < self->read_len && rc == 0 )
+ {
+ if ( has_ref_offset[ seq_position ] )
+ {
+ /* we do have to process a reference-offset ! */
+ if ( src < ref_offset_len )
+ {
+ /* we do have a ref-offset value available... */
+ int32_t ro = ref_offset[ src++ ];
+ if ( ro == 0 )
+ {
+ /* zero-values in REF_OFFSET are an error ! */
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcItem, rcNull );
+ }
+ else
+ {
+ /* ref-offset is positive: DELETE against the reference */
+ self->pos_ofs[ dst ].pos = ( seq_position + shift - 1 );
+ self->pos_ofs[ dst++ ].offset = ro;
+ shift += ro;
+
+ /* !!! CHANGE on May 04 2012 !!!
+ the unused bits in has_ref_offset after an insert ( negative ro )
+ are used now to hint the position of a "B"-cigar-string-case
+ for cSRA-files created Complete-Genomic-Submissions
+ that means we have to jump forward with seq_position in this case!
+ */
+ if ( ro < 0 )
+ {
+ seq_position -= ( ro + 1 );
+ }
+ }
+ }
+ else
+ {
+ /* if has_ref_offset has more flags than ref_offset has values... */
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcItem, rcTooBig );
+ }
+ }
+ ++seq_position;
+ }
+
+/* OUTMSG(( "pos_ofs:" ));
+ for ( src = 0; src < self->pos_ofs_cnt; ++src )
+ {
+ OUTMSG(( "[%u/%u]", self->pos_ofs[ src ].pos, self->pos_ofs[ src ].offset ));
+ }
+ OUTMSG(( "\n" )); */
+ }
+ return rc;
+}
+
+
+static void al_iter_adjust_next( AlignmentIterator * self )
+{
+ if ( self->pos_ofs_idx < self->pos_ofs_cnt )
+ {
+ if ( self->rel_ref_pos == self->pos_ofs[ self->pos_ofs_idx ].pos )
+ {
+ /* we have to adjust... */
+ int32_t ro = self->pos_ofs[ self->pos_ofs_idx++ ].offset;
+ if ( ro < 0 )
+ {
+ self->flags |= align_iter_insert;
+ self->inserts = (-ro);
+ }
+ else
+ {
+ self->flags |= align_iter_delete;
+ self->skip = ro;
+ }
+ }
+ }
+}
diff --git a/libs/align/align-access.c b/libs/align/align-access.c
index fbd0047..7518d53 100644
--- a/libs/align/align-access.c
+++ b/libs/align/align-access.c
@@ -26,13 +26,13 @@
#include <align/extern.h>
#include <klib/rc.h>
+#include <klib/text.h>
#include <align/align-access.h>
-#include <sysalloc.h>
#include <atomic32.h>
-#include <kfs/path.h>
+#include <vfs/path.h>
+#include <sysalloc.h>
-#include <fmtdef.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
@@ -88,14 +88,14 @@ struct AlignAccessDB {
const BAMFile *innerSelf;
};
-LIB_EXPORT rc_t CC AlignAccessMgrMakeBAMDB(const AlignAccessMgr *self, const AlignAccessDB **db, const KPath *bam) {
+LIB_EXPORT rc_t CC AlignAccessMgrMakeBAMDB(const AlignAccessMgr *self, const AlignAccessDB **db, const VPath *bam) {
AlignAccessDB *lhs = malloc(sizeof(*lhs));
rc_t rc;
if (lhs == NULL)
return RC(rcAlign, rcMgr, rcConstructing, rcMemory, rcExhausted);
- rc = BAMFileMakeWithKPath(&lhs->innerSelf, bam);
+ rc = BAMFileMakeWithVPath(&lhs->innerSelf, bam);
if (rc) {
free(lhs);
return rc;
@@ -108,10 +108,10 @@ LIB_EXPORT rc_t CC AlignAccessMgrMakeBAMDB(const AlignAccessMgr *self, const Ali
return 0;
}
-LIB_EXPORT rc_t CC AlignAccessMgrMakeIndexBAMDB(const AlignAccessMgr *self, const AlignAccessDB **db, const KPath *bam, const KPath *bam_index) {
+LIB_EXPORT rc_t CC AlignAccessMgrMakeIndexBAMDB(const AlignAccessMgr *self, const AlignAccessDB **db, const VPath *bam, const VPath *bam_index) {
rc_t rc = AlignAccessMgrMakeBAMDB(self, db, bam);
if (rc == 0) {
- rc = BAMFileOpenIndexWithKPath((**db).innerSelf, bam_index);
+ rc = BAMFileOpenIndexWithVPath((**db).innerSelf, bam_index);
if (rc == 0)
return 0;
AlignAccessDBRelease(*db);
@@ -252,7 +252,7 @@ LIB_EXPORT rc_t CC AlignAccessRefSeqEnumeratorGetID(const AlignAccessRefSeqEnume
rc = BAMFileGetRefSeq(cself->parent->innerSelf, cself->cur, &cur);
if (rc)
return rc;
- id_act_size = strlen(cur->name) + 1;
+ id_act_size = string_size( cur->name ) + 1;
if (id_size != NULL)
*id_size = id_act_size;
if (id_buffer != NULL) {
@@ -481,7 +481,7 @@ LIB_EXPORT rc_t CC AlignAccessAlignmentEnumeratorGetRefSeqID(
rc = BAMFileGetRefSeq(self->parent->innerSelf, id, &cur);
if (rc)
return rc;
- id_act_size = strlen(cur->name) + 1;
+ id_act_size = string_size( cur->name ) + 1;
if (id_size != NULL)
*id_size = id_act_size;
if (id_buffer != NULL) {
@@ -548,7 +548,7 @@ LIB_EXPORT rc_t CC AlignAccessAlignmentEnumeratorGetShortSeqAccessionID(
if (readGroupName == 0)
*id_size = 0;
else {
- id_act_size = strlen(readGroupName) + 1;
+ id_act_size = string_size( readGroupName ) + 1;
if (id_size != NULL)
*id_size = id_act_size;
if (id_buffer != NULL) {
@@ -578,7 +578,7 @@ LIB_EXPORT rc_t CC AlignAccessAlignmentEnumeratorGetShortSeqID(
if (rc)
return rc;
- id_act_size = strlen(readName) + 1;
+ id_act_size = string_size( readName ) + 1;
if (id_size != NULL)
*id_size = id_act_size;
if (id_buffer != NULL) {
diff --git a/libs/align/align_mgr.c b/libs/align/align_mgr.c
new file mode 100644
index 0000000..c700463
--- /dev/null
+++ b/libs/align/align_mgr.c
@@ -0,0 +1,108 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <insdc/insdc.h>
+#include <align/iterator.h>
+#include <align/manager.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+struct AlignMgr
+{
+ KRefcount refcount;
+ /* what else will be here ? */
+};
+
+
+LIB_EXPORT rc_t CC AlignMgrMakeRead ( const struct AlignMgr **self )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+ else
+ {
+ AlignMgr * alm = calloc( sizeof * alm, 1 );
+ if ( alm == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ KRefcountInit( &alm->refcount, 1, "AlignMgr", "Make", "align" );
+ }
+
+ if ( rc == 0 )
+ *self = alm;
+ else
+ free( alm );
+ }
+ return rc;
+
+}
+
+
+LIB_EXPORT rc_t CC AlignMgrAddRef ( const AlignMgr *self )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcAttaching, rcSelf, rcNull );
+ else
+ {
+ if ( KRefcountAdd( &self->refcount, "AlignMgr" ) != krefOkay )
+ {
+ rc = RC( rcAlign, rcIterator, rcAttaching, rcError, rcUnexpected );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignMgrRelease ( const AlignMgr *cself )
+{
+ rc_t rc = 0;
+ if ( cself == NULL )
+ rc = RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+ else
+ {
+ if ( KRefcountDrop( &cself->refcount, "AlignMgr" ) == krefWhack )
+ {
+ AlignMgr * self = ( AlignMgr * ) cself;
+ free( self );
+ }
+ }
+ return rc;
+
+}
diff --git a/libs/align/bam.c b/libs/align/bam.c
index 2f4a22c..843c498 100644
--- a/libs/align/bam.c
+++ b/libs/align/bam.c
@@ -26,11 +26,15 @@
#include <align/extern.h>
#include <klib/defs.h>
+#include <klib/debug.h>
#include <klib/sort.h>
#include <klib/rc.h>
#include <kfs/file.h>
#include <kfs/directory.h>
#include <kfs/mmap.h>
+#include <klib/printf.h>
+#include <klib/log.h>
+#include <klib/text.h>
#include <sysalloc.h>
#include <atomic32.h>
@@ -39,7 +43,8 @@
#include <align/bam.h>
#include "bam-priv.h"
-#include <kfs/path.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
#include <kfs/kfs-priv.h>
#include <limits.h>
@@ -58,26 +63,26 @@
#include <zlib.h>
#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define LE2HUI16(X) (*((const uint16_t *)(X)))
-#define LE2HUI32(X) (*((const uint32_t *)(X)))
-#define LE2HUI64(X) (*((const uint64_t *)(X)))
-#define LE2HI16(X) (*((const int16_t *)(X)))
-#define LE2HI32(X) (*((const int32_t *)(X)))
-#define LE2HI64(X) (*((const int64_t *)(X)))
+static uint16_t LE2HUI16(void const *X) { uint16_t y; memcpy(&y, X, sizeof(y)); return y; }
+static uint32_t LE2HUI32(void const *X) { uint32_t y; memcpy(&y, X, sizeof(y)); return y; }
+static uint64_t LE2HUI64(void const *X) { uint64_t y; memcpy(&y, X, sizeof(y)); return y; }
+static int16_t LE2HI16(void const *X) { int16_t y; memcpy(&y, X, sizeof(y)); return y; }
+static int32_t LE2HI32(void const *X) { int32_t y; memcpy(&y, X, sizeof(y)); return y; }
+static int64_t LE2HI64(void const *X) { int64_t y; memcpy(&y, X, sizeof(y)); return y; }
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
-#define LE2HUI16(X) ((uint16_t)(bswap_16(*((const uint16_t *)(X)))))
-#define LE2HUI32(X) ((uint32_t)(bswap_32(*((const uint32_t *)(X)))))
-#define LE2HUI64(X) ((uint64_t)(bswap_64(*((const uint64_t *)(X)))))
-#define LE2HI16(X) (( int16_t)(bswap_16(*((const int16_t *)(X)))))
-#define LE2HI32(X) (( int32_t)(bswap_32(*((const int32_t *)(X)))))
-#define LE2HI64(X) (( int64_t)(bswap_64(*((const int64_t *)(X)))))
+static uint16_t LE2HUI16(void const *X) { uint16_t y; memcpy(&y, X, sizeof(y)); return (uint16_t)bswap_16(y); }
+static uint32_t LE2HUI32(void const *X) { uint32_t y; memcpy(&y, X, sizeof(y)); return (uint32_t)bswap_32(y); }
+static uint64_t LE2HUI64(void const *X) { uint64_t y; memcpy(&y, X, sizeof(y)); return (uint64_t)bswap_64(y); }
+static int16_t LE2HI16(void const *X) { int16_t y; memcpy(&y, X, sizeof(y)); return ( int16_t)bswap_16(y); }
+static int32_t LE2HI32(void const *X) { int32_t y; memcpy(&y, X, sizeof(y)); return ( int32_t)bswap_32(y); }
+static int64_t LE2HI64(void const *X) { int64_t y; memcpy(&y, X, sizeof(y)); return ( int64_t)bswap_64(y); }
#endif
typedef struct BAMIndex BAMIndex;
typedef struct BGZFile BGZFile;
-#define USEMMAP 0
+/* #pragma mark BGZFile *** Start *** */
#define VALIDATE_BGZF_HEADER 1
#if (ZLIB_VERNUM < 0x1230)
@@ -92,98 +97,58 @@ typedef uint8_t zlib_block_t[ZLIB_BLOCK_SIZE];
#define MEM_ALIGN_SIZE ( 64 * 1024 )
/* MEM_CHUNK_SIZE must be an integer multiple of ZLIB_BLOCK_SIZE.
* The multiple must be >= 2 shouldn't be < 3.
- * If using mmap, it can be much bigger and let the OS deal with the IO.
*/
-#if USEMMAP
-#define MEM_CHUNK_SIZE ( 256 * ZLIB_BLOCK_SIZE ) /* 16 MB */
-#else
#define MEM_CHUNK_SIZE ( 256 * ZLIB_BLOCK_SIZE )
-#endif
+#define CG_NUM_SEGS 4
+
+typedef struct BGZFile_vt_s {
+ rc_t (*FileRead)(void *, zlib_block_t, unsigned *);
+ uint64_t (*FileGetPos)(void const *);
+ float (*FileProPos)(void const *);
+ uint64_t (*FileGetSize)(void const *);
+ rc_t (*FileSetPos)(void *, uint64_t);
+ void (*FileWhack)(void *);
+} BGZFile_vt;
struct BGZFile {
uint64_t fsize;
uint64_t fpos; /* position in file of first byte in buffer */
const uint8_t *buf; /* page aligned or memmapped */
-#if USEMMAP
- const KMMap *mm;
-#else
const KFile *kfp;
uint8_t *_buf; /* allocated */
unsigned malign;
-#endif
size_t bcount; /* number of valid bytes in buffer */
uint32_t bpos; /* position in buffer of read head */
z_stream zs;
-#if USEMMAP
- bool sequentialForward;
-#endif
};
-static rc_t BGZFileInit(BGZFile *self, const KFile *kfp)
-{
- int i;
- rc_t rc;
-
- memset(self, 0, sizeof(*self));
-
- i = inflateInit2(&self->zs, MAX_WBITS + 16); /* max + enable gzip headers */
- switch (i) {
- case Z_OK:
- break;
- case Z_MEM_ERROR:
- return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- default:
- return RC(rcAlign, rcFile, rcConstructing, rcNoObj, rcUnexpected);
- }
-
- rc = KFileSize(kfp, &self->fsize);
- if (rc)
- return rc;
-
-#if USEMMAP
- rc = KMMapMakeRgnRead(&self->mm, kfp, 0, MEM_CHUNK_SIZE);
-#else
- self->_buf = malloc(MEM_CHUNK_SIZE + MEM_ALIGN_SIZE);
- if (self->_buf == NULL)
- return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- self->malign = (MEM_ALIGN_SIZE - ((intptr_t)self->_buf & (MEM_ALIGN_SIZE - 1))) & (MEM_ALIGN_SIZE - 1);
- self->buf = self->_buf + self->malign;
-
- self->kfp = kfp;
- KFileAddRef(kfp);
-#endif
-
- return 0;
-}
-
-static rc_t BGZFileGetMoreBytes(BGZFile *self)
+static
+rc_t BGZFileGetMoreBytes(BGZFile *self)
{
rc_t rc;
self->fpos += self->bpos;
self->bpos &= (MEM_ALIGN_SIZE - 1);
self->fpos -= self->bpos;
-#if USEMMAP
- rc = KMMapReposition(self->mm, self->fpos, &self->bcount);
- if (rc)
- return rc;
- rc = KMMapAddrRead(self->mm, (const void **)&self->buf);
-#else
+
rc = KFileRead(self->kfp, self->fpos, self->_buf + self->malign,
MEM_CHUNK_SIZE, &self->bcount);
-#endif
- if (rc)
+ if (rc) {
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Error reading BAM file: %R\n", rc));
return rc;
+ }
if (self->bcount == 0 || self->bcount == self->bpos)
return RC(rcAlign, rcFile, rcReading, rcData, rcInsufficient);
-
+
self->zs.avail_in = (uInt)(self->bcount - self->bpos);
self->zs.next_in = (Bytef *)&self->buf[self->bpos];
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Read %u bytes from BAM file at position %lu\n", self->zs.avail_in, self->fpos));
return 0;
}
-static rc_t BGZFileRead(BGZFile *self, zlib_block_t dst, uint32_t *pNumRead)
+static
+rc_t BGZFileRead(BGZFile *self, zlib_block_t dst, unsigned *pNumRead)
{
#if VALIDATE_BGZF_HEADER
uint8_t extra[256];
@@ -194,7 +159,7 @@ static rc_t BGZFileRead(BGZFile *self, zlib_block_t dst, uint32_t *pNumRead)
int zr;
*pNumRead = 0;
- if (self->bcount == 0) {
+ if (self->bcount == 0 || self->zs.avail_in == 0) {
rc = BGZFileGetMoreBytes(self);
if (rc)
return rc;
@@ -213,48 +178,66 @@ static rc_t BGZFileRead(BGZFile *self, zlib_block_t dst, uint32_t *pNumRead)
self->zs.avail_out = sizeof(zlib_block_t);
for (loops = 0; loops != 2; ++loops) {
- uInt temp = self->zs.total_in;
+ uInt const in = self->zs.total_in;
zr = inflate(&self->zs, Z_FINISH);
- self->bpos += self->zs.total_in - temp;
+ self->bpos += self->zs.total_in - in;
assert(self->zs.avail_in == self->bcount - self->bpos);
+
switch (zr) {
case Z_OK:
case Z_BUF_ERROR:
rc = BGZFileGetMoreBytes(self);
- if (rc)
+ if (rc) {
+ if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInsufficient) {
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("EOF in Zlib block after %lu bytes\n", self->fpos + self->bpos));
+ rc = RC(rcAlign, rcFile, rcReading, rcFile, rcTooShort);
+ }
return rc;
+ }
break;
case Z_STREAM_END:
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Zlib block size (before/after): %u/%u\n", self->zs.total_in, self->zs.total_out));
#if VALIDATE_BGZF_HEADER
if (head.done) {
+ unsigned const extra_len = head.extra_len;
unsigned i;
unsigned bsize = 0;
- uint16_t t16;
- for (i = 0; i < head.extra_len; ) {
- if (extra[i] == 'B' && extra[i + 1] == 'C') {
- memcpy(&t16, &extra[i + 4], 2);
- bsize = 1 + LE2HUI16(&t16);
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("GZIP Header extra length: %u\n", extra_len));
+ for (i = 0; i < extra_len; ) {
+ uint8_t const si1 = extra[i + 0];
+ uint8_t const si2 = extra[i + 1];
+ unsigned const slen = LE2HUI16(&extra[i + 2]);
+
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("GZIP Header extra: %c%c(%u)\n", si1, si2, slen));
+ if (si1 == 'B' && si2 == 'C') {
+ bsize = 1 + LE2HUI16(&extra[i + 4]);
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("BGZF Header extra field BC: bsize %u\n", bsize));
break;
}
- memcpy(&t16, &extra[i + 2], 2);
- i += LE2HUI16(&t16);
+ i += slen + 4;
}
- if (bsize == 0 || bsize != self->zs.total_in)
+ if (bsize == 0 || bsize != self->zs.total_in) {
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("BGZF Header extra field BC not found\n"));
rc = RC(rcAlign, rcFile, rcReading, rcFormat, rcInvalid); /* not BGZF */
+ }
}
- else
+ else {
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("GZIP Header not found\n"));
rc = RC(rcAlign, rcFile, rcReading, rcFile, rcCorrupt);
+ }
#endif
*pNumRead = self->zs.total_out;
zr = inflateReset(&self->zs);
assert(zr == Z_OK);
return rc;
default:
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Unexpected Zlib result %i\n", zr));
return RC(rcAlign, rcFile, rcReading, rcFile, rcCorrupt);
}
}
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Failed reading BAM file after %lu bytes\n", self->fpos + self->bpos));
return RC(rcAlign, rcFile, rcReading, rcFile, rcTooShort);
}
@@ -326,16 +309,13 @@ static rc_t BGZFileWalkBlocksND(BGZFile *self, BGZFileWalkBlocks_cb cb, void *ct
hsize += temp;
if (head.done) {
unsigned i;
- uint16_t t16;
for (i = 0; i < head.extra_len; ) {
if (extra[i] == 'B' && extra[i + 1] == 'C') {
- memcpy(&t16, &extra[i + 4], 2);
- bsize = 1 + LE2HUI16(&t16);
+ bsize = 1 + LE2HUI16(&extra[i + 4]);
break;
}
- memcpy(&t16, &extra[i + 2], 2);
- i += LE2HUI16(&t16);
+ i += LE2HUI16(&extra[i + 2]);
}
break;
}
@@ -394,7 +374,7 @@ static rc_t BGZFileWalkBlocksUnzip(BGZFile *self, zlib_block_t *bufp, BGZFileWal
{
rc_t rc;
rc_t rc2;
- uint32_t dsize;
+ unsigned dsize;
do {
uint64_t const fpos = self->fpos + self->bpos;
@@ -430,18 +410,230 @@ static rc_t BGZFileWalkBlocks(BGZFile *self, bool decompress, zlib_block_t *bufp
return BGZFileWalkBlocksND(self, cb, ctx);
}
+static uint64_t BGZFileGetSize(BGZFile const *const self)
+{
+ return self->fsize;
+}
+
static void BGZFileWhack(BGZFile *self)
{
inflateEnd(&self->zs);
-#if USEMMAP
- KMMapRelease(self->mm);
-#else
KFileRelease(self->kfp);
if (self->_buf)
free(self->_buf);
-#endif
}
+static rc_t BGZFileInit(BGZFile *self, const KFile *kfp, BGZFile_vt *vt)
+{
+ int i;
+ rc_t rc;
+ static BGZFile_vt const my_vt = {
+ (rc_t (*)(void *, zlib_block_t, unsigned *))BGZFileRead,
+ (uint64_t (*)(void const *))BGZFileGetPos,
+ (float (*)(void const *))BGZFileProPos,
+ (uint64_t (*)(void const *))BGZFileGetSize,
+ (rc_t (*)(void *, uint64_t))BGZFileSetPos,
+ (void (*)(void *))BGZFileWhack
+ };
+
+ memset(self, 0, sizeof(*self));
+ memset(vt, 0, sizeof(*vt));
+
+ i = inflateInit2(&self->zs, MAX_WBITS + 16); /* max + enable gzip headers */
+ switch (i) {
+ case Z_OK:
+ break;
+ case Z_MEM_ERROR:
+ return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+ default:
+ return RC(rcAlign, rcFile, rcConstructing, rcNoObj, rcUnexpected);
+ }
+
+ rc = KFileSize(kfp, &self->fsize);
+ if (rc)
+ return rc;
+
+ self->_buf = malloc(MEM_CHUNK_SIZE + MEM_ALIGN_SIZE);
+ if (self->_buf == NULL)
+ return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+ self->malign = (MEM_ALIGN_SIZE - ((intptr_t)self->_buf & (MEM_ALIGN_SIZE - 1))) & (MEM_ALIGN_SIZE - 1);
+ self->buf = self->_buf + self->malign;
+
+ self->kfp = kfp;
+ KFileAddRef(kfp);
+
+ *vt = my_vt;
+
+ return 0;
+}
+
+/* #pragma mark BGZFile *** End *** */
+
+#ifndef WINDOWS
+
+#include <kproc/thread.h>
+#include <kproc/lock.h>
+#include <kproc/cond.h>
+
+/* #pragma mark BGZThreadFile *** Start *** */
+typedef struct BGZThreadFile_s BGZThreadFile;
+
+#define BUFFER_COUNT (3)
+
+typedef struct BGZThreadFileWorkQElem_s BGZThreadFileWorkQElem;
+
+struct BGZThreadFileWorkQElem_s {
+ uint8_t *buf;
+ uint64_t pos;
+ unsigned bsz;
+};
+
+struct BGZThreadFile_s {
+ BGZFile file;
+ KLock *lock;
+ KCondition *have_data;
+ KCondition *need_data;
+ KThread *th;
+ uint64_t pos;
+ BGZThreadFileWorkQElem que[BUFFER_COUNT];
+ rc_t volatile rc;
+ unsigned volatile nque;
+ bool eof;
+ uint8_t buffer[sizeof(zlib_block_t) * BUFFER_COUNT];
+};
+
+static rc_t BGZThreadFileRead(BGZThreadFile *self, zlib_block_t dst, unsigned *pNumRead)
+{
+ rc_t rc;
+
+ *pNumRead = 0;
+
+ KLockAcquire(self->lock);
+ if ((rc = self->rc) == 0) {
+ while (self->nque == 0 && (rc = self->rc) == 0)
+ KConditionWait(self->have_data, self->lock);
+ if (rc == 0) {
+ BGZThreadFileWorkQElem const work = self->que[0];
+
+ self->pos = work.pos;
+ if (work.buf) {
+ memcpy(dst, work.buf, *pNumRead = work.bsz);
+ memmove(&self->que[0], &self->que[1], --self->nque * sizeof(self->que[0]));
+ KConditionSignal(self->need_data);
+ }
+ else {
+ self->eof = true;
+ self->rc = rc = RC(rcAlign, rcFile, rcReading, rcData, rcInsufficient);
+ }
+ }
+ }
+ KLockUnlock(self->lock);
+ return rc;
+}
+
+static rc_t CC BGZThreadFileMain(KThread const *const th, void *const vp)
+{
+ BGZThreadFile *const self = (BGZThreadFile *)vp;
+ rc_t rc = 0;
+ unsigned bufno;
+
+ KLockAcquire(self->lock);
+ for (bufno = 0; ; bufno = (bufno + 1) % BUFFER_COUNT) {
+ while (self->nque == BUFFER_COUNT)
+ KConditionWait(self->need_data, self->lock);
+ {
+ BGZThreadFileWorkQElem work;
+
+ work.pos = BGZFileGetPos(&self->file);
+ work.buf = &self->buffer[bufno * sizeof(zlib_block_t)];
+ rc = BGZFileRead(&self->file, work.buf, &work.bsz);
+ if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInsufficient)
+ work.buf = NULL;
+ else if (rc)
+ break;
+ self->que[self->nque++] = work;
+ KConditionSignal(self->have_data);
+ }
+ }
+ self->rc = rc;
+ KLockUnlock(self->lock);
+ return 0;
+}
+
+static uint64_t BGZThreadFileGetPos(BGZThreadFile const *const self)
+{
+ return self->pos;
+}
+
+/* returns the position as proportion of the whole file */
+static float BGZThreadFileProPos(BGZThreadFile const *const self)
+{
+ return BGZThreadFileGetPos(self) / (double)self->file.fsize;
+}
+
+static uint64_t BGZThreadFileGetSize(BGZThreadFile const *const self)
+{
+ return BGZFileGetSize(&self->file);
+}
+
+static rc_t BGZThreadFileSetPos(BGZThreadFile *const self)
+{
+ return RC(rcAlign, rcFile, rcPositioning, rcFunction, rcUnsupported);
+}
+
+static void BGZThreadFileWhack(BGZThreadFile *const self)
+{
+ KThreadCancel(self->th);
+ KThreadWait(self->th, NULL);
+ BGZFileWhack(&self->file);
+ KConditionRelease(self->need_data);
+ KConditionRelease(self->have_data);
+ KLockRelease(self->lock);
+ KThreadRelease(self->th);
+}
+
+static rc_t BGZThreadFileInit(BGZThreadFile *self, const KFile *kfp, BGZFile_vt *vt)
+{
+ rc_t rc;
+ static BGZFile_vt const my_vt = {
+ (rc_t (*)(void *, zlib_block_t, unsigned *))BGZThreadFileRead,
+ (uint64_t (*)(void const *))BGZThreadFileGetPos,
+ (float (*)(void const *))BGZThreadFileProPos,
+ (uint64_t (*)(void const *))BGZThreadFileGetSize,
+ (rc_t (*)(void *, uint64_t))BGZThreadFileSetPos,
+ (void (*)(void *))BGZThreadFileWhack
+ };
+
+ memset(self, 0, sizeof(self));
+
+ rc = BGZFileInit(&self->file, kfp, vt);
+ if (rc == 0) {
+ rc = KLockMake(&self->lock);
+ if (rc == 0) {
+ rc = KConditionMake(&self->have_data);
+ if (rc == 0) {
+ rc = KConditionMake(&self->need_data);
+ if (rc == 0) {
+ rc = KThreadMake(&self->th, BGZThreadFileMain, self);
+ if (rc == 0) {
+ *vt = my_vt;
+ return 0;
+ }
+ KConditionRelease(self->need_data);
+ }
+ KConditionRelease(self->have_data);
+ }
+ KLockRelease(self->lock);
+ }
+ BGZFileWhack(&self->file);
+ }
+ memset(self, 0, sizeof(self));
+ memset(vt, 0, sizeof(*vt));
+ return rc;
+}
+
+#endif
+
struct BAMIndex {
BAMFilePosition *refSeq[1];
};
@@ -450,25 +642,33 @@ struct BAMFile {
uint64_t fpos_first;
uint64_t fpos_cur;
- BGZFile file;
- BAMRefSeq *refSeq;
- BAMReadGroup *readGroup;
- BAMAlignment *bufLocker;
- const char *version;
+ union {
+ BGZFile plain;
+#ifndef WINDOWS
+ BGZThreadFile thread;
+#endif
+ } file;
+ BGZFile_vt vt;
+
+ BAMRefSeq *refSeq; /* pointers into headerData1 except name points into headerData2 */
+ BAMReadGroup *readGroup; /* pointers into headerData1 */
+ char const *version;
char const *header;
- char const *headerData1;
- char const *headerData2;
- const BAMIndex *ndx;
+ char *headerData1; /* gets used for refSeq and readGroup */
+ uint8_t *headerData2; /* gets used for refSeq */
+ BAMAlignment *bufLocker;
+ BAMIndex const *ndx;
unsigned refSeqs;
unsigned readGroups;
atomic32_t refcount;
- unsigned ucfirst; /* offset of first record in uncompressed buffer */
- unsigned bufSize; /* current size of uncompressed buffer */
- unsigned bufCurrent; /* location in uncompressed buffer of read head */
+ unsigned ucfirst; /* offset of first record in uncompressed buffer */
+ unsigned bufSize; /* current size of uncompressed buffer */
+ unsigned bufCurrent; /* location in uncompressed buffer of read head */
bool eof;
- zlib_block_t buffer; /* uncompressed buffer */
+ bool threaded;
+ zlib_block_t buffer; /* uncompressed buffer */
};
struct bam_alignment_s {
@@ -485,9 +685,9 @@ struct bam_alignment_s {
uint8_t ins_size[4];
char read_name[1 /* read_name_len */];
/* if you change length of read_name,
- * adjust calculation of offsets in BAMAlignmentParse */
+ * adjust calculation of offsets in BAMFileRead */
/* uint32_t cigar[n_cigars];
- * uint8_t seq[(read_len + 1) >> 1];
+ * uint8_t seq[(read_len + 1) / 2];
* uint8_t qual[read_len];
* uint8_t extra[...];
*/
@@ -498,21 +698,24 @@ typedef union bam_alignment_u {
uint8_t raw[sizeof(struct bam_alignment_s)];
} bam_alignment;
+struct offset_size_s {
+ unsigned offset;
+ unsigned size; /* this is the total length of the tag; length of data is size - 3 */
+};
+
struct BAMAlignment {
atomic32_t refcount;
BAMFile *parent;
bam_alignment *data;
+ uint8_t *storage;
unsigned datasize;
unsigned cigar;
unsigned seq;
unsigned qual;
- unsigned extra;
- unsigned readGroupName;
- unsigned csread;
-
- uint8_t storage[1];
+ unsigned numExtra;
+ struct offset_size_s extra[1];
};
static const char cigarChars[] = {
@@ -529,17 +732,11 @@ static const char cigarChars[] = {
};
static int32_t getRefSeqId(const BAMAlignment *cself) {
- int32_t y;
-
- memcpy(&y, cself->data->cooked.rID, 4);
- return LE2HI32(&y);
+ return LE2HI32(cself->data->cooked.rID);
}
static int32_t getPosition(const BAMAlignment *cself) {
- int32_t y;
-
- memcpy(&y, cself->data->cooked.pos, 4);
- return LE2HI32(&y);
+ return LE2HI32(cself->data->cooked.pos);
}
static uint8_t getReadNameLength(const BAMAlignment *cself) {
@@ -547,10 +744,7 @@ static uint8_t getReadNameLength(const BAMAlignment *cself) {
}
static uint16_t getBin(const BAMAlignment *cself) {
- uint16_t y;
-
- memcpy(&y, cself->data->cooked.bin, 2);
- return LE2HUI16(&y);
+ return LE2HUI16(cself->data->cooked.bin);
}
static uint8_t getMapQual(const BAMAlignment *cself) {
@@ -558,51 +752,131 @@ static uint8_t getMapQual(const BAMAlignment *cself) {
}
static uint16_t getCigarCount(const BAMAlignment *cself) {
- uint16_t y;
-
- memcpy(&y, cself->data->cooked.n_cigars, 2);
- return LE2HUI16(&y);
+ return LE2HUI16(cself->data->cooked.n_cigars);
}
static uint16_t getFlags(const BAMAlignment *cself) {
- uint16_t y;
-
- memcpy(&y, cself->data->cooked.flags, 2);
- return LE2HUI16(&y);
+ return LE2HUI16(cself->data->cooked.flags);
}
static uint32_t getReadLen(const BAMAlignment *cself) {
- uint32_t y;
-
- memcpy(&y, cself->data->cooked.read_len, 4);
- return LE2HUI32(&y);
+ return LE2HUI32(cself->data->cooked.read_len);
}
static int32_t getMateRefSeqId(const BAMAlignment *cself) {
- int32_t y;
-
- memcpy(&y, cself->data->cooked.mate_rID, 4);
- return LE2HI32(&y);
+ return LE2HI32(cself->data->cooked.mate_rID);
}
static int32_t getMatePos(const BAMAlignment *cself) {
- int32_t y;
-
- memcpy(&y, cself->data->cooked.mate_pos, 4);
- return LE2HI32(&y);
+ return LE2HI32(cself->data->cooked.mate_pos);
}
static int32_t getInsertSize(const BAMAlignment *cself) {
- int32_t y;
-
- memcpy(&y, cself->data->cooked.ins_size, 4);
- return LE2HI32(&y);
+ return LE2HI32(cself->data->cooked.ins_size);
}
-static const char *getReadName(const BAMAlignment *cself) {
+static char const *getReadName(const BAMAlignment *cself) {
return &cself->data->cooked.read_name[0];
}
+static void const *getCigarBase(BAMAlignment const *cself)
+{
+ return &cself->data->raw[cself->cigar];
+}
+
+static int opt_tag_cmp(uint8_t const a[2], uint8_t const b[2])
+{
+ int const d0 = (int)a[0] - (int)b[0];
+ return d0 ? d0 : ((int)a[1] - (int)b[1]);
+}
+
+static int CC OptTag_sort(void const *a, void const *b, void *ctx)
+{
+ BAMAlignment const *const self = ctx;
+ unsigned const a_off = ((struct offset_size_s const *)a)->offset;
+ unsigned const b_off = ((struct offset_size_s const *)b)->offset;
+
+ return opt_tag_cmp(&self->data->raw[a_off], &self->data->raw[b_off]);
+}
+
+static int CC OptTag_cmp(void const *key, void const *item, void *ctx)
+{
+ BAMAlignment const *const self = ctx;
+ unsigned const offset = ((struct offset_size_s const *)item)->offset;
+
+ return opt_tag_cmp(key, &self->data->raw[offset]);
+}
+
+static char const *get_RG(BAMAlignment const *cself)
+{
+ struct offset_size_s const *const x = kbsearch("RG", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+ return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static struct offset_size_s const *get_CS_info(BAMAlignment const *cself)
+{
+ return kbsearch("CS", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CQ_info(BAMAlignment const *cself)
+{
+ return kbsearch("CQ", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static char const *get_CS(BAMAlignment const *cself)
+{
+ struct offset_size_s const *const x = get_CS_info(cself);
+ return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static uint8_t const *get_CQ(BAMAlignment const *cself)
+{
+ struct offset_size_s const *const x = get_CQ_info(cself);
+ return (uint8_t const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static struct offset_size_s const *get_OQ_info(BAMAlignment const *cself)
+{
+ return kbsearch("OQ", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static uint8_t const *get_OQ(BAMAlignment const *cself)
+{
+ struct offset_size_s const *const x = get_OQ_info(cself);
+ return (uint8_t const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static char const *get_XT(BAMAlignment const *cself)
+{
+ struct offset_size_s const *const x = kbsearch("XT", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+ return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static struct offset_size_s const *get_CG_ZA_info(BAMAlignment const *cself)
+{
+ return kbsearch("ZA", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CG_ZI_info(BAMAlignment const *cself)
+{
+ return kbsearch("ZI", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CG_GC_info(BAMAlignment const *cself)
+{
+ return kbsearch("GC", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CG_GS_info(BAMAlignment const *cself)
+{
+ return kbsearch("GS", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CG_GQ_info(BAMAlignment const *cself)
+{
+ return kbsearch("GQ", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
static rc_t BAMFileReadn(BAMFile *self, const unsigned len, uint8_t dst[/* len */]) {
rc_t rc;
unsigned cur;
@@ -630,14 +904,14 @@ static rc_t BAMFileReadn(BAMFile *self, const unsigned len, uint8_t dst[/* len *
* self->fpos_cur == BGZFileGetPos(&self->file)
* is already true.
*/
- self->fpos_cur = BGZFileGetPos(&self->file);
+ self->fpos_cur = self->vt.FileGetPos(&self->file);
self->bufCurrent = 0;
self->bufSize = 0;
if (cur + n == len)
return 0;
}
- rc = BGZFileRead(&self->file, self->buffer, &self->bufSize);
+ rc = self->vt.FileRead(&self->file, self->buffer, &self->bufSize);
if (rc)
return rc;
if (self->bufSize == 0 || self->bufSize <= self->bufCurrent)
@@ -645,312 +919,410 @@ static rc_t BAMFileReadn(BAMFile *self, const unsigned len, uint8_t dst[/* len *
}
}
-static rc_t BAMFileReadUI32(BAMFile *self, uint32_t *rhs) {
- uint8_t buf[sizeof(*rhs)];
- rc_t rc = BAMFileReadn(self, sizeof(buf), buf);
+static rc_t BAMFileReadI32(BAMFile *self, int32_t *rhs)
+{
+ uint8_t buf[sizeof(int32_t)];
+ rc_t rc = BAMFileReadn(self, sizeof(int32_t), buf);
+
if (rc == 0)
- *rhs = LE2HUI32(buf);
+ *rhs = LE2HI32(buf);
return rc;
}
-static int CC comp_ReadGroup(const void *A, const void *B, void * ignored) {
- const BAMReadGroup *a = (const BAMReadGroup *)A;
- const BAMReadGroup *b = (const BAMReadGroup *)B;
-
- if (a->name == NULL) {
- if (b->name)
- return -1;
- else
- return 0;
- }
- if (b->name == NULL) {
- if (a->name)
- return 1;
- else
- return 0;
- }
- return strcmp(a->name, b->name);
+static int CC comp_ReadGroup(const void *a, const void *b, void *ignored) {
+ return strcmp(((BAMReadGroup const *)a)->name, ((BAMReadGroup const *)b)->name);
}
-static int CC comp_RefSeqName ( const void *A, const void *B, void * ignored ) {
- const BAMRefSeq *a = *(const BAMRefSeq **)A;
- const BAMRefSeq *b = *(const BAMRefSeq **)B;
-
- if (a->name == NULL) {
- if (b->name)
- return -1;
- else
- return 0;
+static rc_t ParseHD(BAMFile *self, char hdata[], unsigned hlen, unsigned *used)
+{
+ unsigned i;
+ unsigned tag;
+ unsigned value;
+ int st = 0;
+ int ws = 1;
+
+ for (i = 0; i < hlen; ++i) {
+ char const cc = hdata[i];
+
+ if (ws && isspace(cc))
+ continue;
+ ws = 0;
+
+ switch (st) {
+ case 0:
+ tag = i;
+ ++st;
+ break;
+ case 1:
+ if (isspace(cc))
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+ ++st;
+ break;
+ case 2:
+ if (cc != ':')
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+ hdata[i] = '\0';
+ value = i + 1;
+ ++st;
+ break;
+ case 3:
+ if (cc == '\t' || cc == '\r' || cc == '\n') {
+ hdata[i] = '\0';
+
+ if (strcmp(&hdata[tag], "VN") == 0)
+ self->version = &hdata[value];
+
+ ++st;
+ ws = 1;
+ }
+ break;
+ case 4:
+ if (cc == '@')
+ goto DONE;
+ tag = i;
+ st = 1;
+ break;
+ }
}
- if (b->name == NULL) {
- if (a->name)
- return 1;
- else
- return 0;
+ if (st == 4) {
+DONE:
+ *used = i;
+ return 0;
}
- return strcmp(a->name, b->name);
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
}
-static rc_t ParseHeader(BAMFile *self, char hdata[], size_t hlen, const BAMRefSeq ** rs_by_name) {
- unsigned readGroups = 0;
- const char *const endp = hdata + hlen;
- const char *token = NULL, *value = NULL;
- int st = 0, eat_ws = 1;
+static rc_t ParseSQ(BAMFile *self, char hdata[], unsigned hlen, unsigned *used, unsigned const rs_by_name[])
+{
+ unsigned i;
+ unsigned tag;
+ unsigned value;
+ int st = 0;
+ int ws = 1;
BAMRefSeq rs;
-#define ST_HD_START 10
-#define ST_SQ_START 20
-#define ST_RG_START 30
-
- while (hdata != endp) {
- if (eat_ws && isspace(*hdata)) {
- ++hdata;
+ memset(&rs, 0, sizeof(rs));
+
+ for (i = 0; i < hlen; ++i) {
+ char const cc = hdata[i];
+
+ if (ws && isspace(cc))
continue;
- }
- else
- eat_ws = 0;
+ ws = 0;
switch (st) {
- case 0:
- if (*hdata == '@')
- ++st;
- else
- return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
- break;
- case 1:
- if (isspace(*hdata))
- return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
- token = hdata;
- ++st;
- break;
- case 2:
- if (isspace(*hdata)) {
- *hdata = '\0';
- if (hdata - token == 2) {
- eat_ws = 1;
- if (strcmp(token, "HD") == 0)
- st = ST_HD_START;
- else if (strcmp(token, "SQ") == 0)
- st = ST_SQ_START;
- else if (strcmp(token, "RG") == 0)
- st = ST_RG_START;
- }
- if (st == 2) {
- ++st;
- eat_ws = 0;
- }
- }
- else if (hdata - token > 2)
- ++st;
- break;
- case 3:
- if (*hdata == '\r' || *hdata == '\n') {
- st = 0;
- eat_ws = 1;
- }
- break;
- case ST_HD_START:
- token = hdata;
- ++st;
- break;
- case ST_HD_START + 1:
- if (isspace(*hdata))
- return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
- ++st;
- break;
- case ST_HD_START + 2:
- if (*hdata != ':')
+ case 0:
+ tag = i;
+ ++st;
+ break;
+ case 1:
+ if (isspace(cc))
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+ ++st;
+ break;
+ case 2:
+#define HACKAMATIC 1
+#if HACKAMATIC
+ if (cc != ':') {
+ if (i + 1 >= hlen || hdata[i+1] != ':')
return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
- *hdata = '\0';
- eat_ws = 1;
- ++st;
- break;
- case ST_HD_START + 3:
- value = hdata;
- ++st;
- break;
- case ST_HD_START + 4:
- if (*hdata == '\t' || *hdata == '\r' || *hdata == '\n') {
- *hdata = '\0';
-
- if (strcmp(token, "VN") == 0)
- self->version = value;
-
- ++st;
- eat_ws = 1;
- }
- break;
- case ST_HD_START + 5:
- if (*hdata == '@')
- st = 1;
- else {
- token = hdata;
- st = ST_HD_START + 1;
- }
- break;
+ else
+ ++i;
+ }
+#else
+ if (cc != ':')
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+#endif
+ hdata[i] = '\0';
+ value = i + 1;
+ ++st;
+ break;
+ case 3:
+ if (cc == '\t' || cc == '\r' || cc == '\n') {
+ unsigned j;
+ hdata[i] = '\0';
- case ST_SQ_START:
- memset(&rs, 0, sizeof(rs));
- token = hdata;
- ++st;
- break;
- case ST_SQ_START + 1:
- if (isspace(*hdata))
- return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
- ++st;
- break;
- case ST_SQ_START + 2:
- if (*hdata != ':')
- return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
- *hdata = '\0';
- eat_ws = 1;
- ++st;
- break;
- case ST_SQ_START + 3:
- value = hdata;
- ++st;
- break;
- case ST_SQ_START + 4:
- if (*hdata == '\t' || *hdata == '\r' || *hdata == '\n') {
- *hdata = '\0';
+ while (value < i && isspace(hdata[value]))
+ ++value;
+ for (j = i; value < j && isspace(hdata[j - 1]); )
+ hdata[--j] = '\0';
+
+ if (strcmp(&hdata[tag], "SN") == 0)
+ rs.name = &hdata[value];
+ else if (strcmp(&hdata[tag], "LN") == 0)
+ rs.length = strtou64(&hdata[value], NULL, 10);
+ else if (strcmp(&hdata[tag], "AS") == 0)
+ rs.assemblyId = &hdata[value];
+#if HACKAMATIC
+ else if (strcmp(&hdata[tag], "M5") == 0 || strcmp(&hdata[tag], "MD5") == 0)
+#else
+ else if (strcmp(&hdata[tag], "M5") == 0)
+#endif
+#undef HACKAMATIC
+ {
+ unsigned len = j - value;
- if (strcmp(token, "SN") == 0)
- rs.name = value;
- else if (strcmp(token, "LN") == 0)
- rs.length = strtou64(value, NULL, 10);
- else if (strcmp(token, "AS") == 0)
- rs.assemblyId = value;
- else if (strcmp(token, "M5") == 0) {
- unsigned len = hdata - value;
-
- while (isspace(value[len - 1]))
- --len;
-
- if ((value[0] == '\'' || value[0] == '"') && value[len - 1] == value[0]) {
- ++value;
- len -= 2;
- }
- if (len == 32) {
- unsigned i;
-
- rs.checksum = &rs.checksum_array[0];
- for (i = 0; i != 16; ++i) {
- int const ch1 = toupper(value[i * 2 + 0]);
- int const ch2 = toupper(value[i * 2 + 1]);
-
- if (isxdigit(ch1) && isxdigit(ch2)) {
- rs.checksum_array[i] =
- ((ch1 > '9' ? (ch1 - ('A' - 10)) : (ch1 - '0')) << 4) +
- (ch2 > '9' ? (ch2 - ('A' - 10)) : (ch2 - '0'));
- }
- else {
- rs.checksum = NULL;
- break;
- }
- }
- }
+ if ((hdata[value] == '\'' || hdata[value] == '"') && hdata[value + len - 1] == hdata[value]) {
+ ++value;
+ len -= 2;
}
- else if (strcmp(token, "UR") == 0)
- rs.uri = value;
- else if (strcmp(token, "SP") == 0)
- rs.species = value;
-
- ++st;
- eat_ws = 1;
- }
- break;
- case ST_SQ_START + 5:
- if (*hdata == '@') {
- if (rs.name != NULL) {
- BAMRefSeq *y = &rs, **xx = kbsearch( &y, rs_by_name, self->refSeqs, sizeof(y), comp_RefSeqName, NULL );
-
- if (xx != NULL) {
- BAMRefSeq *x = *xx;
+ if (len == 32) {
+ rs.checksum = &rs.checksum_array[0];
+ for (j = 0; j != 16; ++j) {
+ int const ch1 = toupper(hdata[value + j * 2 + 0]);
+ int const ch2 = toupper(hdata[value + j * 2 + 1]);
- x->assemblyId = rs.assemblyId;
- if (rs.checksum) {
- x->checksum = &x->checksum_array[0];
- memcpy(x->checksum_array, rs.checksum_array, 16);
+ if (isxdigit(ch1) && isxdigit(ch2)) {
+ rs.checksum_array[j] =
+ ((ch1 > '9' ? (ch1 - ('A' - 10)) : (ch1 - '0')) << 4) +
+ (ch2 > '9' ? (ch2 - ('A' - 10)) : (ch2 - '0'));
+ }
+ else {
+ rs.checksum = NULL;
+ break;
}
- else
- x->checksum = NULL;
- x->uri = rs.uri;
- x->species = rs.species;
}
}
- st = 1;
}
- else {
- token = hdata;
- st = ST_SQ_START + 1;
+ else if (strcmp(&hdata[tag], "UR") == 0)
+ rs.uri = &hdata[value];
+ else if (strcmp(&hdata[tag], "SP") == 0)
+ rs.species = &hdata[value];
+
+ ++st;
+ ws = 1;
+ }
+ break;
+ case 4:
+ if (cc == '@')
+ goto DONE;
+ tag = i;
+ st = 1;
+ break;
+ }
+ }
+DONE:
+ if (st == 4) {
+ unsigned f = 0;
+ unsigned e = self->refSeqs;
+
+ if (rs.name == NULL) /* required tags */
+ return RC(rcAlign, rcFile, rcParsing, rcConstraint, rcViolated);
+
+ while (f < e) {
+ unsigned const m = (f + e) >> 1;
+ BAMRefSeq *const x = &self->refSeq[rs_by_name[m]];
+ int const cmp = strcmp(rs.name, x->name);
+
+ if (cmp < 0)
+ e = m;
+ else if (cmp > 0)
+ f = m + 1;
+ else {
+ x->assemblyId = rs.assemblyId;
+ x->uri = rs.uri;
+ x->species = rs.species;
+ if (rs.checksum) {
+ x->checksum = &x->checksum_array[0];
+ memcpy(x->checksum_array, rs.checksum_array, 16);
}
+ else
+ x->checksum = NULL;
break;
+ }
+ }
+ *used = i;
+ return 0;
+ }
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+}
+
+static rc_t ParseRG(BAMFile *self, char hdata[], unsigned hlen, unsigned *used, BAMReadGroup *dst)
+{
+ unsigned i;
+ unsigned tag;
+ unsigned value;
+ int st = 0;
+ int ws = 1;
+#if _DEBUGGING
+ char const *cur = hdata;
+#endif
+
+ memset(dst, 0, sizeof(*dst));
+
+ for (i = 0; i < hlen; ++i) {
+ char const cc = hdata[i];
+
+ if (ws && isspace(cc))
+ continue;
+ ws = 0;
+
+ switch (st) {
+ case 0:
+ tag = i;
+ ++st;
+ break;
+ case 1:
+ if (isspace(cc))
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+ ++st;
+ break;
+ case 2:
+ if (cc != ':')
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+#if _DEBUGGING
+ cur = hdata + i + 1;
+#endif
+ hdata[i] = '\0';
+ value = i + 1;
+ ++st;
+ break;
+ case 3:
+ if (cc == '\t' || cc == '\r' || cc == '\n') {
+ unsigned j = i;
+#if _DEBUGGING
+ cur = hdata + i + 1;
+#endif
+ hdata[i] = '\0';
+
+ while (value < i && isspace(hdata[value]))
+ ++value;
+ while (value < j && isspace(hdata[j - 1]))
+ hdata[--j] = '\0';
+ if ((hdata[value] == '\"' || hdata[value] == '\'') && hdata[value] == hdata[j - 1]) {
+ ++value;
+ hdata[j - 1] = '\0';
+ }
+ if (strcmp(&hdata[tag], "ID") == 0)
+ dst->name = &hdata[value];
+ else if (strcmp(&hdata[tag], "SM") == 0)
+ dst->sample = &hdata[value];
+ else if (strcmp(&hdata[tag], "LB") == 0)
+ dst->library = &hdata[value];
+ else if (strcmp(&hdata[tag], "DS") == 0)
+ dst->description = &hdata[value];
+ else if (strcmp(&hdata[tag], "PU") == 0)
+ dst->unit = &hdata[value];
+ else if (strcmp(&hdata[tag], "PI") == 0)
+ dst->insertSize = &hdata[value];
+ else if (strcmp(&hdata[tag], "CN") == 0)
+ dst->center = &hdata[value];
+ else if (strcmp(&hdata[tag], "DT") == 0)
+ dst->runDate = &hdata[value];
+ else if (strcmp(&hdata[tag], "PL") == 0)
+ dst->platform = &hdata[value];
- case ST_RG_START:
- token = hdata;
++st;
- break;
- case ST_RG_START + 1:
- if (isspace(*hdata))
- return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
- ++st;
- break;
- case ST_RG_START + 2:
- if (*hdata != ':')
- return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
- *hdata = '\0';
- eat_ws = 1;
- ++st;
- break;
- case ST_RG_START + 3:
- value = hdata;
+ ws = 1;
+ }
+ break;
+ case 4:
+ if (cc == '@')
+ goto DONE;
+ tag = i;
+ st = 1;
+ break;
+ }
+ }
+ if (st == 4) {
+DONE:
+ *used = i;
+ if (dst->name == NULL) /* required */
+ return RC(rcAlign, rcFile, rcParsing, rcConstraint, rcViolated);
+ return 0;
+ }
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+}
+
+static rc_t ParseHeader(BAMFile *self, char hdata[], unsigned hlen, unsigned const rs_by_name[]) {
+ unsigned rg = 0;
+ unsigned i;
+ unsigned tag;
+ int st = 0;
+ int ws = 1;
+ unsigned used;
+ rc_t rc;
+
+ for (i = 0; i < hlen; ++i) {
+ char const cc = hdata[i];
+
+ if (ws && isspace(cc))
+ continue;
+ ws = 0;
+
+ switch (st) {
+ case 0:
+ if (cc == '@')
++st;
- break;
- case ST_RG_START + 4:
- if (*hdata == '\t' || *hdata == '\r' || *hdata == '\n') {
- *hdata = '\0';
-
- if (strcmp(token, "ID") == 0)
- self->readGroup[readGroups].name = value;
- else if (strcmp(token, "SM") == 0)
- self->readGroup[readGroups].sample = value;
- else if (strcmp(token, "LB") == 0)
- self->readGroup[readGroups].library = value;
- else if (strcmp(token, "DS") == 0)
- self->readGroup[readGroups].description = value;
- else if (strcmp(token, "PU") == 0)
- self->readGroup[readGroups].unit = value;
- else if (strcmp(token, "PI") == 0)
- self->readGroup[readGroups].insertSize = value;
- else if (strcmp(token, "CN") == 0)
- self->readGroup[readGroups].center = value;
- else if (strcmp(token, "DT") == 0)
- self->readGroup[readGroups].runDate = value;
- else if (strcmp(token, "PL") == 0)
- self->readGroup[readGroups].platform = value;
-
- ++st;
- eat_ws = 1;
- }
- break;
- case ST_RG_START + 5:
- if (*hdata == '@') {
- ++readGroups;
- st = 1;
+ else
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+ break;
+ case 1:
+ if (isspace(cc))
+ return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+ tag = i;
+ ++st;
+ break;
+ case 2:
+ if (isspace(cc)) {
+ hdata[i] = '\0';
+ if (i - tag == 2) {
+ if (strcmp(&hdata[tag], "HD") == 0) {
+ rc = ParseHD(self, &hdata[i + 1], hlen - i - 1, &used);
+ if (rc) return rc;
+ i += used;
+ st = 0;
+ }
+ else if (strcmp(&hdata[tag], "SQ") == 0) {
+ rc = ParseSQ(self, &hdata[i + 1], hlen - i - 1, &used, rs_by_name);
+ if (rc) return rc;
+ i += used;
+ st = 0;
+ }
+ else if (strcmp(&hdata[tag], "RG") == 0) {
+ rc = ParseRG(self, &hdata[i + 1], hlen - i - 1, &used, &self->readGroup[rg]);
+ if (GetRCObject(rc) == rcConstraint && GetRCState(rc) == rcViolated) {
+ (void)LOGERR(klogWarn, rc, "Read Group is missing ID in BAM header");
+ rc = 0;
+ if (self->readGroups) --self->readGroups;
+ }
+ else if (rc)
+ return rc;
+ else
+ ++rg;
+ i += used;
+ st = 0;
+ }
}
- else {
- token = hdata;
- st = ST_RG_START + 1;
+ if (st == 2) {
+ ++st;
+ ws = 0;
}
- break;
+ }
+ else if (i - tag > 2)
+ ++st;
+ break;
+ case 3:
+ if (cc == '\r' || cc == '\n') {
+ st = 0;
+ ws = 1;
+ }
+ break;
}
- ++hdata;
}
ksort( self->readGroup, self->readGroups, sizeof(self->readGroup[0]), comp_ReadGroup, NULL );
- for (readGroups = 0; readGroups != self->readGroups; ++readGroups)
- self->readGroup[readGroups].id = readGroups;
+ for (rg = 0; rg != self->readGroups; ++rg) {
+ if (rg > 0 && strcmp(self->readGroup[rg - 1].name, self->readGroup[rg].name) == 0)
+ return RC(rcAlign, rcFile, rcParsing, rcConstraint, rcViolated); /* name must be unique */
+ self->readGroup[rg].id = rg;
+ }
+ for (i = 0; i < self->refSeqs; ++i) {
+ if (self->refSeq[i].length == 0) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Reference '$(ref)' has zero length", "ref=%s", self->refSeq[i].name));
+ }
+ }
return 0;
}
@@ -974,124 +1346,200 @@ static rc_t CountReadGroups(char const txt[], size_t len, unsigned *reads) {
return 0;
}
-static rc_t ProcessHeader(BAMFile *self) {
- rc_t rc;
- uint8_t magic[4];
- uint32_t hlen;
+static rc_t ReadMagic(BAMFile *self)
+{
+ uint8_t sig[4];
+ rc_t rc = BAMFileReadn(self, 4, sig);
+
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM signature: '%c%c%c' %u\n", sig[0], sig[1], sig[2], sig[3]));
+ if (rc == 0 && (sig[0] != 'B' || sig[1] != 'A' || sig[2] != 'M' || sig[3] != 1))
+ rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcBadVersion);
+ return rc;
+}
+
+static rc_t ReadHeaders(BAMFile *self,
+ char **headerText, unsigned *headerTextLen,
+ uint8_t **refData, unsigned *numrefs)
+{
+ unsigned hlen;
+ char *htxt = NULL;
unsigned nrefs;
- char *htxt;
- char *names = NULL;
- size_t in_names = 0, names_size;
- struct {
- size_t name;
- uint32_t length;
- } *refs;
- const BAMRefSeq **rs_by_name = NULL;
-
- rc = BAMFileReadn(self, sizeof(magic), magic);
- if (rc)
- return rc;
- if (memcmp(magic, "BAM\1", 4) != 0)
- return RC(rcAlign, rcFile, rcConstructing, rcData, rcBadVersion);
+ uint8_t *rdat = NULL;
+ unsigned rdsz;
+ unsigned rdms;
+ unsigned i;
+ int32_t i32;
+ rc_t rc = BAMFileReadI32(self, &i32);
+
+ if (rc) return rc;
- rc = BAMFileReadUI32(self, &hlen);
- if (rc)
- return rc;
+ if (i32 < 0) {
+ rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcInvalid);
+ goto BAILOUT;
+ }
+ hlen = i32;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Header text size: %u\n", hlen));
+ if (hlen) {
+ htxt = malloc(hlen + 1);
+ if (htxt == NULL) {
+ rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+ goto BAILOUT;
+ }
+
+ rc = BAMFileReadn(self, hlen, (uint8_t *)htxt); if (rc) goto BAILOUT;
+ htxt[hlen] = '\0';
+ }
+ rc = BAMFileReadI32(self, &i32); if (rc) goto BAILOUT;
+ if (i32 < 0) {
+ rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcInvalid);
+ goto BAILOUT;
+ }
+ nrefs = i32;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Header reference count: %u\n", nrefs));
+ if (nrefs) {
+ rdms = nrefs * 16;
+ if (rdms < 4096)
+ rdms = 4096;
+ rdat = malloc(rdms);
+ if (rdat == NULL) {
+ rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+ goto BAILOUT;
+ }
+ for (i = rdsz = 0; i < nrefs; ++i) {
+ rc = BAMFileReadI32(self, &i32); if (rc) goto BAILOUT;
+ if (i32 <= 0) {
+ rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcInvalid);
+ goto BAILOUT;
+ }
+ if (rdsz + i32 + 8 > rdms) {
+ void *tmp;
+
+ do { rdms <<= 1; } while (rdsz + i32 + 8 > rdms);
+ tmp = realloc(rdat, rdms);
+ if (tmp == NULL) {
+ rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+ goto BAILOUT;
+ }
+ rdat = tmp;
+ }
+ memcpy(rdat + rdsz, &i32, 4);
+ rdsz += 4;
+ rc = BAMFileReadn(self, i32, &rdat[rdsz]); if (rc) goto BAILOUT;
+ rdsz += i32;
+ rc = BAMFileReadI32(self, &i32); if (rc) goto BAILOUT;
+ memcpy(rdat + rdsz, &i32, 4);
+ rdsz += 4;
+ }
+ }
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Header reference size: %u\n", rdsz));
- self->header = htxt = malloc(hlen + 1);
- if (htxt == NULL)
- return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+ *headerText = htxt;
+ *headerTextLen = hlen;
+ *refData = rdat;
+ *numrefs = nrefs;
+ return 0;
- self->headerData1 = htxt = malloc(hlen + 1);
- if (htxt == NULL)
- return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+BAILOUT:
+ if (htxt)
+ free(htxt);
+ if (rdat)
+ free(rdat);
- rc = BAMFileReadn(self, hlen, (uint8_t *)htxt);
- if (rc == 0) {
- htxt[hlen] = 0;
+ return rc;
+}
+
+static int CC comp_RefSeqName(const void *A, const void *B, void *ignored) {
+ BAMFile const *self = (BAMFile const *)ignored;
+ unsigned const a = *(unsigned const *)A;
+ unsigned const b = *(unsigned const *)B;
+
+ return strcmp(self->refSeq[a].name, self->refSeq[b].name);
+}
+
+static rc_t ProcessHeader(BAMFile *self, char const headerText[])
+{
+ unsigned *rs_by_name = NULL;
+ unsigned i;
+ unsigned cp;
+ char *htxt;
+ uint8_t *rdat;
+ unsigned hlen;
+ unsigned nrefs;
+ rc_t rc = ReadMagic(self);
+
+ if (rc) return rc;
+
+ rc = ReadHeaders(self, &htxt, &hlen, &rdat, &nrefs);
+ if (rc) return rc;
+
+ self->fpos_first = self->fpos_cur;
+ self->ucfirst = self->bufCurrent;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Data records start at: %lu+%u\n", self->ucfirst, self->fpos_first));
+
+ if (headerText) {
+ free(htxt);
+ hlen = string_size( headerText );
+ htxt = malloc(hlen + 1);
+ if (htxt == NULL) {
+ free(rdat);
+ return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+ }
+ memcpy(htxt, headerText, hlen + 1);
+ }
+
+ self->headerData2 = rdat;
+ if (hlen) {
+ self->header = htxt;
+ self->headerData1 = malloc(hlen + 1);
+ if (self->headerData1 == NULL)
+ return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+ memcpy(self->headerData1, self->header, hlen + 1);
+ }
+ else {
+ htxt = malloc(1);
+ htxt[0] = '\0';
+ self->header = htxt;
+ self->headerData1 = NULL;
+ }
+ self->refSeqs = nrefs;
+ if (nrefs) {
+ self->refSeq = calloc(nrefs, sizeof(self->refSeq[0]));
+ if (self->refSeq == NULL)
+ return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- memcpy((char *)self->header, htxt, hlen + 1);
+ rs_by_name = calloc(nrefs, sizeof(rs_by_name[0]));
+ if (rs_by_name == NULL)
+ return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- rc = BAMFileReadUI32(self, &nrefs);
- if (rc == 0) {
- names = malloc(names_size = 1024);
- if (names == NULL)
- rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
-
- if (rc == 0) {
- refs = malloc(nrefs * sizeof(refs[0]));
- if (refs == NULL)
- rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- else {
- int i;
-
- for (i = 0; i != nrefs; ++i) {
- uint32_t namelen;
-
- rc = BAMFileReadUI32(self, &namelen);
- if (rc)
- break;
- if (namelen + in_names >= names_size) {
- void *temp = realloc(names, names_size <<= 1);
-
- if (temp == NULL) {
- rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- break;
- }
- names = temp;
- }
- refs[i].name = in_names;
- rc = BAMFileReadn(self, namelen, (uint8_t *)&names[in_names]);
- if (rc)
- break;
- rc = BAMFileReadUI32(self, &refs[i].length);
- if (rc)
- break;
- in_names += namelen;
- }
- if (rc == 0) {
- self->refSeqs = nrefs;
- self->refSeq = calloc(self->refSeqs, sizeof(self->refSeq[0]));
- if (self->refSeq == NULL)
- rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- }
- if (rc == 0) {
- rs_by_name = malloc(self->refSeqs * sizeof(*rs_by_name));
- if (rs_by_name == NULL)
- rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
- }
- if (rc == 0) {
- self->headerData2 = names;
-
- for (i = 0; i != nrefs; ++i) {
- rs_by_name[i] = self->refSeq + i;
- self->refSeq[i].id = i;
- self->refSeq[i].name = names + refs[i].name;
- self->refSeq[i].length = refs[i].length;
- }
- /* cast to to quiet a warning from VS C */
- ksort( (void*const)rs_by_name, self->refSeqs, sizeof(rs_by_name[0]), comp_RefSeqName, NULL );
- }
- free(refs);
- }
- }
+ for (i = cp = 0; i < nrefs; ++i) {
+ uint32_t nlen;
+ uint32_t rlen;
+
+ rs_by_name[i] = i;
+ self->refSeq[i].id = i;
+ memcpy(&nlen, &self->headerData2[cp], 4);
+ cp += 4;
+ self->refSeq[i].name = (char const *)&self->headerData2[cp];
+ cp += nlen;
+ memcpy(&rlen, &self->headerData2[cp], 4);
+ self->headerData2[cp] = 0;
+ cp += 4;
+ self->refSeq[i].length = rlen;
}
+ ksort((void *)rs_by_name, self->refSeqs, sizeof(rs_by_name[0]), comp_RefSeqName, self);
+ }
+ if (self->headerData1) {
+ rc = CountReadGroups(self->headerData1, hlen, &self->readGroups);
if (rc == 0) {
- self->fpos_first = self->fpos_cur;
- self->ucfirst = self->bufCurrent;
-
- rc = CountReadGroups(htxt, hlen, &self->readGroups);
- if (rc == 0) {
- self->readGroup = calloc(self->readGroups, sizeof(self->readGroup[0]));
- if (self->readGroup != NULL)
- rc = ParseHeader(self, htxt, hlen, rs_by_name);
- else
- rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- }
+ self->readGroup = calloc(self->readGroups, sizeof(self->readGroup[0]));
+ if (self->readGroup != NULL)
+ rc = ParseHeader(self, self->headerData1, hlen, rs_by_name);
+ else
+ rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
}
}
- if ( rs_by_name != NULL )
- free( (void*) rs_by_name );
+ if (rs_by_name != NULL)
+ free((void *)rs_by_name);
return rc;
}
@@ -1111,13 +1559,17 @@ static rc_t BAMFileWhack(BAMFile *self) {
free((void *)self->headerData2);
if (self->ndx)
BAMIndexWhack(self->ndx);
- BGZFileWhack(&self->file);
+ if (self->vt.FileWhack)
+ self->vt.FileWhack(&self->file);
return 0;
}
/* file is retained */
-LIB_EXPORT rc_t CC BAMFileMakeWithKFile(const BAMFile **cself, const KFile *file)
+static rc_t BAMFileMakeWithKFileAndHeader(BAMFile const **cself,
+ KFile const *file,
+ char const *headerText,
+ bool threaded)
{
BAMFile *self = calloc(1, sizeof(*self));
rc_t rc;
@@ -1125,11 +1577,16 @@ LIB_EXPORT rc_t CC BAMFileMakeWithKFile(const BAMFile **cself, const KFile *file
if (self == NULL)
return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- memset(self, 0, sizeof(*self));
atomic32_set(&self->refcount, 1);
- rc = BGZFileInit(&self->file, file);
+#ifndef WINDOWS
+ if (threaded)
+ rc = BGZThreadFileInit(&self->file.thread, file, &self->vt);
+ else
+#endif
+ rc = BGZFileInit(&self->file.plain, file, &self->vt);
+
if (rc == 0) {
- rc = ProcessHeader(self);
+ rc = ProcessHeader(self, headerText);
if (rc == 0) {
*cself = self;
return 0;
@@ -1139,6 +1596,12 @@ LIB_EXPORT rc_t CC BAMFileMakeWithKFile(const BAMFile **cself, const KFile *file
return rc;
}
+/* file is retained */
+LIB_EXPORT rc_t CC BAMFileMakeWithKFile(const BAMFile **cself, const KFile *file)
+{
+ return BAMFileMakeWithKFileAndHeader(cself, file, NULL, false);
+}
+
LIB_EXPORT rc_t CC BAMFileVMakeWithDir(const BAMFile **result,
const KDirectory *dir,
const char *path,
@@ -1192,13 +1655,40 @@ LIB_EXPORT rc_t CC BAMFileMake(const BAMFile **cself, const char *path, ...)
return rc;
}
-LIB_EXPORT rc_t CC BAMFileMakeWithKPath(const BAMFile **cself, const KPath *kpath)
+LIB_EXPORT rc_t CC BAMFileMakeWithHeader ( const BAMFile **cself,
+ char const headerText[],
+ char const path[], ... )
+{
+ KDirectory *dir;
+ va_list args;
+ rc_t rc;
+ const KFile *kf;
+
+ if (cself == NULL)
+ return RC(rcAlign, rcFile, rcOpening, rcParam, rcNull);
+ *cself = NULL;
+
+ rc = KDirectoryNativeDir(&dir);
+ if (rc) return rc;
+ va_start(args, path);
+ rc = KDirectoryVOpenFileRead(dir, &kf, path, args);
+ if (rc == 0) {
+ rc = BAMFileMakeWithKFileAndHeader(cself, kf, headerText, false);
+ KFileRelease(kf);
+ }
+ va_end(args);
+ KDirectoryRelease(dir);
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC BAMFileMakeWithVPath(const BAMFile **cself, const VPath *kpath)
{
char path[4096];
size_t nread;
rc_t rc;
- rc = KPathReadPath(kpath, path, sizeof(path), &nread);
+ rc = VPathReadPath(kpath, path, sizeof(path), &nread);
if (rc == 0)
rc = BAMFileMake(cself, "%.*s", (int)nread, path);
return rc;
@@ -1226,93 +1716,188 @@ LIB_EXPORT rc_t CC BAMFileRelease(const BAMFile *cself) {
return rc;
}
-LIB_EXPORT float CC BAMFileGetProportionalPosition(const BAMFile *self)
-{
- return BGZFileProPos(&self->file);
-}
-
-LIB_EXPORT rc_t CC BAMFileGetPosition(const BAMFile *self, BAMFilePosition *pos) {
- *pos = (self->fpos_cur << 16) | self->bufCurrent;
- return 0;
-}
-
-static rc_t BAMFileSetPositionInt(const BAMFile *cself, uint64_t fpos, uint16_t bpos)
-{
- BAMFile *self = (BAMFile *)cself;
-
- if (cself->fpos_first > fpos || fpos > cself->file.fsize ||
- (fpos == cself->fpos_first && bpos < cself->ucfirst))
- {
- return RC(rcAlign, rcFile, rcPositioning, rcParam, rcInvalid);
- }
- if (cself->fpos_cur == fpos) {
- if (bpos <= cself->bufSize) {
- self->eof = false;
- self->bufCurrent = bpos;
- return 0;
- }
- return RC(rcAlign, rcFile, rcPositioning, rcParam, rcInvalid);
- }
- BGZFileSetPos(&self->file, fpos);
- self->eof = false;
- self->bufSize = 0; /* force re-read */
- self->bufCurrent = bpos;
- self->fpos_cur = fpos;
- return 0;
-}
-
-LIB_EXPORT rc_t CC BAMFileSetPosition(const BAMFile *cself, const BAMFilePosition *pos)
-{
- return BAMFileSetPositionInt(cself, *pos >> 16, (uint16_t)(*pos));
-}
-
-LIB_EXPORT rc_t CC BAMFileRewind(const BAMFile *cself)
+LIB_EXPORT float CC BAMFileGetProportionalPosition(const BAMFile *self)
+{
+ return self->vt.FileProPos(&self->file);
+}
+
+LIB_EXPORT rc_t CC BAMFileGetPosition(const BAMFile *self, BAMFilePosition *pos) {
+ *pos = (self->fpos_cur << 16) | self->bufCurrent;
+ return 0;
+}
+
+static rc_t BAMFileSetPositionInt(const BAMFile *cself, uint64_t fpos, uint16_t bpos)
+{
+ rc_t rc;
+ BAMFile *self = (BAMFile *)cself;
+
+ if (cself->fpos_first > fpos || fpos > cself->vt.FileGetSize(&cself->file) ||
+ (fpos == cself->fpos_first && bpos < cself->ucfirst))
+ {
+ return RC(rcAlign, rcFile, rcPositioning, rcParam, rcInvalid);
+ }
+ if (cself->fpos_cur == fpos) {
+ if (bpos <= cself->bufSize) {
+ self->eof = false;
+ self->bufCurrent = bpos;
+ return 0;
+ }
+ return RC(rcAlign, rcFile, rcPositioning, rcParam, rcInvalid);
+ }
+ rc = self->vt.FileSetPos(&self->file, fpos);
+ if (rc == 0) {
+ self->eof = false;
+ self->bufSize = 0; /* force re-read */
+ self->bufCurrent = bpos;
+ self->fpos_cur = fpos;
+ }
+ return rc;
+}
+
+LIB_EXPORT rc_t CC BAMFileSetPosition(const BAMFile *cself, const BAMFilePosition *pos)
+{
+ return BAMFileSetPositionInt(cself, *pos >> 16, (uint16_t)(*pos));
+}
+
+LIB_EXPORT rc_t CC BAMFileRewind(const BAMFile *cself)
+{
+ return BAMFileSetPositionInt(cself, cself->fpos_first, cself->ucfirst);
+}
+
+typedef bool (* i_OptData_f)(void *ctx, char const tag[2], BAMOptDataValueType type, unsigned length,
+ unsigned count, unsigned size, void const *value);
+
+static rc_t ParseOptData(uint8_t const data[], unsigned const n, void *ctx, i_OptData_f f)
+{
+ unsigned i = 0;
+ rc_t rc = 0;
+
+ while (rc == 0 && i + 3 < n) {
+ char const *const tag = (char const *)&data[i];
+ int type = data[i + 2];
+ uint8_t const *const vp = &data[i + 3];
+ unsigned len = 0;
+ unsigned size = 0;
+ unsigned count = 1;
+ unsigned offset = 0;
+
+ switch (type) {
+ case dt_CSTRING:
+ case dt_HEXSTRING:
+ len = 0;
+ while (i + len + 3 != n && vp[len] != '\0')
+ ++len;
+ if (i + len + 3 == n) {
+ rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+ break;
+ }
+ size = len;
+ ++len;
+ break;
+ case dt_INT8:
+ case dt_UINT8:
+ case dt_ASCII:
+ size = len = 1;
+ break;
+ case dt_INT16:
+ case dt_UINT16:
+ size = len = 2;
+ break;
+ case dt_INT:
+ case dt_FLOAT32:
+ case dt_UINT:
+ size = len = 4;
+ break;
+ case dt_FLOAT64:
+ size = len = 8;
+ break;
+ case dt_NUM_ARRAY:
+ offset = len = 5;
+ {
+ unsigned elem_size = 0;
+ uint32_t elem_count = 0;
+
+ switch (vp[0]) {
+ case dt_INT8:
+ case dt_UINT8:
+ elem_size = 1;
+ break;
+ case dt_INT16:
+ case dt_UINT16:
+ elem_size = 2;
+ break;
+ case dt_FLOAT32:
+ case dt_INT:
+ case dt_UINT:
+ elem_size = 4;
+ break;
+ case dt_FLOAT64:
+ elem_size = 8;
+ break;
+ default:
+ rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+ break;
+ }
+ if (rc)
+ break;
+ elem_count = LE2HUI32(&vp[1]);
+ len += elem_size * elem_count;
+ if (i + len + 3 > n) {
+ rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+ break;
+ }
+ type = vp[0];
+ count = elem_count;
+ size = elem_size;
+ }
+ break;
+ default:
+ rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+ break;
+ }
+ if (rc)
+ break;
+ i += len + 3;
+ if (f(ctx, tag, type, len + 3, count, size, &vp[offset]))
+ break;
+ }
+ return rc;
+}
+
+static bool CountOptTags(void *ctx, char const tag[2], BAMOptDataValueType type, unsigned length,
+ unsigned count, unsigned size, void const *value)
{
- return BAMFileSetPositionInt(cself, cself->fpos_first, cself->ucfirst);
+ ++*(unsigned *)ctx;
+ return false;
}
-static void BAMFileUnlockBuffer(BAMFile *self) {
- if (self->bufLocker != NULL) {
- memcpy(self->bufLocker->storage, self->bufLocker->data, self->bufLocker->datasize);
- self->bufLocker->data = (bam_alignment *)&self->bufLocker->storage[0];
- self->bufLocker = NULL;
- }
-}
+struct ctx_LoadOptTags_s {
+ unsigned i;
+ BAMAlignment *self;
+};
-static
-rc_t BAMAlignmentParse(BAMAlignment *y, const uint8_t data[], uint32_t datasize)
+static bool LoadOptTags(void *Ctx, char const tag[2], BAMOptDataValueType type, unsigned length,
+ unsigned count, unsigned size, void const *value)
{
- y->datasize = datasize;
- y->data = (bam_alignment *)&data[0];
+ struct ctx_LoadOptTags_s *ctx = Ctx;
+ BAMAlignment *self = ctx->self;
- /* calculate the offsets and verify that none are beyond the end of data */
- y->cigar = sizeof(struct bam_alignment_s) + getReadNameLength(y) - 1;
- if (y->cigar >= datasize)
- return RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
-
- y->seq = y->cigar + 4 * getCigarCount(y);
- if (y->seq >= datasize)
- return RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
-
- y->qual = y->seq + ((getReadLen(y) + 1) >> 1);
- if (y->qual >= datasize)
- return RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
-
- y->extra = y->qual + getReadLen(y);
- if (y->extra > datasize) /* if extra is empty, it will be equal to datasize */
- return RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
-
- y->readGroupName = 0;
- y->csread = 0;
- return 0;
+ self->extra[ctx->i].offset = (uint8_t const *)&tag[0] - (uint8_t const *)&self->data->raw[0];
+ self->extra[ctx->i].size = length;
+ ++ctx->i;
+ return false;
}
LIB_EXPORT rc_t CC BAMFileRead(const BAMFile *cself, const BAMAlignment **rhs)
{
BAMFile *self = (BAMFile *)cself;
BAMAlignment *y;
- uint32_t datasize;
+ BAMAlignment x;
+ struct ctx_LoadOptTags_s load_ctx;
+ bool local = false;
+ int32_t i32;
rc_t rc;
+ unsigned xtra;
*rhs = NULL;
@@ -1322,9 +1907,17 @@ LIB_EXPORT rc_t CC BAMFileRead(const BAMFile *cself, const BAMAlignment **rhs)
if (cself->bufCurrent >= cself->bufSize && cself->eof)
return RC(rcAlign, rcFile, rcReading, rcRow, rcNotFound);
- BAMFileUnlockBuffer(self);
-
- rc = BAMFileReadUI32(self, &datasize);
+ if (self->bufLocker != NULL) {
+ if (self->bufLocker->storage == NULL)
+ self->bufLocker->storage = malloc(self->bufLocker->datasize);
+ if (self->bufLocker->storage == NULL)
+ return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+ memcpy(self->bufLocker->storage, self->bufLocker->data, self->bufLocker->datasize);
+ self->bufLocker->data = (bam_alignment *)&self->bufLocker->storage[0];
+ self->bufLocker = NULL;
+ }
+
+ rc = BAMFileReadI32(self, &i32);
if (rc) {
if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInsufficient) {
self->eof = true;
@@ -1332,45 +1925,77 @@ LIB_EXPORT rc_t CC BAMFileRead(const BAMFile *cself, const BAMAlignment **rhs)
}
return rc;
}
- /* it should never be bigger than 64K */
- if ((datasize & 0xFFFF) != datasize) {
- /* probably a seek to a bad position */
- return RC(rcAlign, rcFile, rcReading, rcData, rcTooBig);
- }
- y = malloc(sizeof(*y) - sizeof(y->storage) + datasize);
- if (y == NULL)
- return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
-
- y->datasize = datasize;
+ if (i32 <= 0)
+ return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
- if (self->bufCurrent + datasize <= self->bufSize) {
- /* all of the data needed for this record is in the buffer
- * so instead of copying it, we'll take the pointer and
- * place a reservation on the buffer to prevent it from
- * going away on us. Note that enough storage was allocated
- * that if the reservation needs to be broken there is space
- * to copy the data into.
- */
- rc = BAMAlignmentParse(y, &self->buffer[self->bufCurrent], datasize);
- if (rc) {
- free(y);
- return rc;
- }
- self->bufLocker = y;
- self->bufCurrent += datasize;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM record: { size: %i }\n", i32));
+ memset(&x, 0, sizeof(x));
+ x.datasize = i32;
+
+ if (self->bufCurrent + x.datasize <= self->bufSize) {
+ x.data = (bam_alignment *)&self->buffer[self->bufCurrent];
+ local = true;
}
else {
- rc = BAMFileReadn(self, datasize, y->storage);
- if (rc == 0)
- rc = BAMAlignmentParse(y, y->storage, datasize);
+ x.storage = malloc(x.datasize);
+ if (x.storage == NULL)
+ return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+
+ rc = BAMFileReadn(self, x.datasize, x.storage);
if (rc) {
- free(y);
+ free(x.storage);
return rc;
}
+ x.data = (bam_alignment *)x.storage;
+ }
+ {{
+ unsigned const nameLen = getReadNameLength(&x);
+ unsigned const cigCnt = getCigarCount(&x);
+ unsigned const readLen = getReadLen(&x);
+
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM record: { name length: %u, cigar count: %u, read length %u }\n", nameLen, cigCnt, readLen));
+ x.cigar = sizeof(x.data[0]) + nameLen - 1;
+ x.seq = x.cigar + 4 * cigCnt;
+ x.qual = x.seq + (readLen + 1) / 2;
+ xtra = x.qual + readLen;
+ }}
+ if ( x.cigar >= x.datasize
+ || x.seq > x.datasize
+ || x.qual > x.datasize
+ || xtra > x.datasize
+ || (rc = ParseOptData(&x.data->raw[xtra], x.datasize - xtra, &x.numExtra, CountOptTags)) != 0)
+ {
+ rc = RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
+ free(x.storage);
+ return rc;
+ }
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM record: { number of extra fields: %u }\n", x.numExtra));
+ y = calloc(sizeof(*y) + (x.numExtra ? x.numExtra - 1 : 0) * sizeof(y->extra), 1);
+ if (y == NULL) {
+ free(x.storage);
+ return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+ }
+ *y = x;
+ load_ctx.self = y;
+ load_ctx.i = 0;
+ if ((rc = ParseOptData(&y->data->raw[xtra], y->datasize - xtra, &load_ctx, LoadOptTags)) != 0) {
+ free(x.storage);
+ free(y);
+ return rc;
}
+ ksort(y->extra, y->numExtra, sizeof(y->extra[0]), OptTag_sort, y);
BAMFileAddRef(y->parent = self);
atomic32_set(&y->refcount, 1);
+ if (local) {
+ self->bufLocker = y;
+ self->bufCurrent += y->datasize;
+ if (self->bufCurrent == self->bufSize) {
+ self->fpos_cur = self->vt.FileGetPos(&self->file);
+ self->bufCurrent = 0;
+ self->bufSize = 0;
+ }
+ }
*rhs = y;
return 0;
@@ -1428,7 +2053,7 @@ LIB_EXPORT rc_t CC BAMFileGetReadGroup(const BAMFile *cself, unsigned i, const B
LIB_EXPORT rc_t CC BAMFileGetHeaderText(BAMFile const *cself, char const **header, size_t *header_len)
{
*header = cself->header;
- *header_len = strlen(*header);
+ *header_len = *header ? string_size( *header ) : 0;
return 0;
}
@@ -1446,6 +2071,7 @@ static rc_t BAMAlignmentWhack(BAMAlignment *self)
if (self->parent->bufLocker == self)
self->parent->bufLocker = NULL;
BAMFileRelease(self->parent);
+ free(self->storage);
free(self);
return 0;
}
@@ -1473,10 +2099,7 @@ LIB_EXPORT uint16_t CC BAMAlignmentBadFields(const BAMAlignment *self)
static uint32_t BAMAlignmentGetCigarElement(const BAMAlignment *self, unsigned i)
{
- uint32_t y;
-
- memcpy(&y, &self->data->raw[self->cigar + i * 4], 4);
- return LE2HUI32(&y);
+ return LE2HUI32(&((uint8_t const *)getCigarBase(self))[i * 4]);
}
LIB_EXPORT rc_t CC BAMAlignmentGetRefSeqId(const BAMAlignment *cself, int32_t *rhs)
@@ -1620,8 +2243,7 @@ unsigned ReferenceLengthFromCIGAR(const BAMAlignment *self)
}
return y;
}
-#if 0
-Ken: don't delete it! It's documentation!
+
static
unsigned SequenceLengthFromCIGAR(const BAMAlignment *self)
{
@@ -1646,7 +2268,6 @@ unsigned SequenceLengthFromCIGAR(const BAMAlignment *self)
}
return y;
}
-#endif
LIB_EXPORT rc_t CC BAMAlignmentGetPosition2(const BAMAlignment *cself, int64_t *rhs, uint32_t *length)
{
@@ -1658,90 +2279,7 @@ LIB_EXPORT rc_t CC BAMAlignmentGetPosition2(const BAMAlignment *cself, int64_t *
LIB_EXPORT rc_t CC BAMAlignmentGetReadGroupName(const BAMAlignment *cself, const char **rhs)
{
- if (cself->readGroupName == 0) {
- const unsigned n = cself->datasize;
- unsigned i = cself->extra;
- rc_t rc = 0;
-
- while (i + 3 < n) {
- const char *const tag = (const char *)&cself->data->raw[i];
- const int type = cself->data->raw[i + 2];
- const uint8_t *const value = &cself->data->raw[i + 3];
- unsigned size = 3;
-
- switch (type) {
- case dt_CSTRING:
- if (tag[0] == 'R' && tag[1] == 'G')
- ((BAMAlignment *)cself)->readGroupName = i + 3;
- case dt_HEXSTRING:
- while (size != n && tag[size] != '\0')
- ++size;
- if (size == n)
- rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
- else
- ++size;
- break;
- case dt_INT8:
- case dt_UINT8:
- case dt_ASCII:
- size += 1;
- break;
- case dt_INT16:
- case dt_UINT16:
- size += 2;
- break;
- case dt_FLOAT32:
- case dt_INT:
- case dt_UINT:
- size += 4;
- break;
- case dt_FLOAT64:
- size += 8;
- break;
- case dt_NUM_ARRAY:
- size += 5;
- {
- uint32_t elem_count;
-
- memcpy(&elem_count, &value[1], 4);
- elem_count = LE2HUI32(&elem_count);
- switch (value[0]) {
- case dt_INT8:
- case dt_UINT8:
- size += elem_count;
- break;
- case dt_INT16:
- case dt_UINT16:
- size += elem_count * 2;
- break;
- case dt_FLOAT32:
- case dt_INT:
- case dt_UINT:
- size += elem_count * 4;
- break;
- case dt_FLOAT64:
- size += elem_count * 8;
- break;
- default:
- rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
- }
- }
- break;
- default:
- rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
- }
- if (rc) {
- ((BAMAlignment *)cself)->readGroupName = 0;
- break;
- }
- i += size;
- }
- }
-
- if (cself->readGroupName != 0)
- *rhs = (const char *)&cself->data->raw[cself->readGroupName];
- else
- *rhs = NULL;
+ *rhs = get_RG(cself);
return 0;
}
@@ -1753,7 +2291,7 @@ LIB_EXPORT rc_t CC BAMAlignmentGetReadName(const BAMAlignment *cself, const char
LIB_EXPORT rc_t CC BAMAlignmentGetReadName2(const BAMAlignment *cself, const char **rhs, size_t *length)
{
- *length = getReadNameLength(cself);
+ *length = getReadNameLength(cself) - 1;
*rhs = getReadName(cself);
return 0;
}
@@ -1776,9 +2314,9 @@ LIB_EXPORT rc_t CC BAMAlignmentGetCigarCount(const BAMAlignment *cself, unsigned
return 0;
}
-LIB_EXPORT rc_t CC BAMAlignmentGetRawCigar(const BAMAlignment *cself, uint32_t const **rslt, uint32_t *length)
+LIB_EXPORT rc_t CC BAMAlignmentGetRawCigar(const BAMAlignment *cself, uint32_t const *rslt[], uint32_t *length)
{
- *rslt = (uint32_t*)&cself->data->raw[cself->cigar];
+ *rslt = getCigarBase(cself);
*length = getCigarCount(cself);
return 0;
}
@@ -1811,7 +2349,7 @@ LIB_EXPORT rc_t CC BAMAlignmentGetSequence2(const BAMAlignment *cself, char *rhs
* N T G K C Y S B A W R D M H V =
*/
static const char tr[16] = "=ACMGRSVTWYHKDBN";
- /* static const char ctr[16] = "=TGKCYSBAWRDMHVN"; */
+ /* static const char ctr[16] = "=TGKCYSBAWRDMHVN"; */
unsigned const n = getReadLen(cself);
const uint8_t * const seq = &cself->data->raw[cself->seq];
unsigned si, di;
@@ -1832,190 +2370,91 @@ LIB_EXPORT rc_t CC BAMAlignmentGetSequence(const BAMAlignment *cself, char *rhs)
{
return BAMAlignmentGetSequence2(cself, rhs, 0, 0);
}
-
-static rc_t BAMAlignmentGetCSRead(BAMAlignment const *cself);
-
-LIB_EXPORT bool CC BAMAlignmentHasColorSpace(BAMAlignment const *cself)
-{
- if (cself->csread == 0) {
- BAMAlignmentGetCSRead(cself);
- if (cself->csread == 0)
- return false;
- }
- return true;
-}
-
-LIB_EXPORT rc_t CC BAMAlignmentGetCSKey(BAMAlignment const *cself, char rhs[1])
-{
- if (cself->csread == 0) {
- BAMAlignmentGetCSRead(cself);
- if (cself->csread == 0)
- return RC(rcAlign, rcFile, rcReading, rcData, rcNotFound);
- }
- *rhs = cself->data->raw[cself->csread];
- return 0;
-}
-
-LIB_EXPORT rc_t CC BAMAlignmentGetCSSequence(BAMAlignment const *cself, char rhs[])
-{
- if (cself->csread == 0) {
- BAMAlignmentGetCSRead(cself);
- if (cself->csread == 0)
- return RC(rcAlign, rcFile, rcReading, rcData, rcNotFound);
- }
- memcpy(rhs, &cself->data->raw[cself->csread + 1], getReadLen(cself));
- return 0;
-}
-
-LIB_EXPORT rc_t CC BAMAlignmentGetQuality(const BAMAlignment *cself, const uint8_t **rhs)
-{
- *rhs = &cself->data->raw[cself->qual];
- return 0;
-}
-
-typedef bool (* i_OptData_f)(BAMAlignment const *cself, void *ctx, char const tag[2], BAMOptDataValueType type, unsigned count,
- void const *value, unsigned size);
-
-static rc_t BAMAlignmentParseOptData(BAMAlignment const *cself, void *ctx, i_OptData_f f)
-{
- unsigned const n = cself->datasize;
- unsigned i = cself->extra;
- rc_t rc = 0;
-
- while (rc == 0 && i + 3 < n) {
- char const *const tag = (char const *)&cself->data->raw[i];
- int type = cself->data->raw[i + 2];
- const uint8_t *const vp = &cself->data->raw[i + 3];
- unsigned len = 0;
- unsigned size = 0;
- unsigned count = 1;
- unsigned offset = 0;
-
- switch (type) {
- case dt_CSTRING:
- case dt_HEXSTRING:
- len = 0;
- while (i + len + 3 != n && vp[len] != '\0')
- ++len;
- if (i + len + 3 == n) {
- rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
- break;
- }
- size = len;
- ++len;
- break;
- case dt_INT8:
- case dt_UINT8:
- case dt_ASCII:
- size = len = 1;
- break;
- case dt_INT16:
- case dt_UINT16:
- size = len = 2;
- break;
- case dt_INT:
- case dt_FLOAT32:
- case dt_UINT:
- size = len = 4;
- break;
- case dt_FLOAT64:
- size = len = 8;
- break;
- case dt_NUM_ARRAY:
- offset = len = 5;
- {
- unsigned elem_size = 0;
- uint32_t elem_count = 0;
-
- switch (vp[0]) {
- case dt_INT8:
- case dt_UINT8:
- elem_size = 1;
- break;
- case dt_INT16:
- case dt_UINT16:
- elem_size = 2;
- break;
- case dt_FLOAT32:
- case dt_INT:
- case dt_UINT:
- elem_size = 4;
- break;
- case dt_FLOAT64:
- elem_size = 8;
- break;
- default:
- rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
- break;
- }
- if (rc)
- break;
- memcpy(&elem_count, &vp[1], 4);
- elem_count = LE2HUI32(&elem_count);
- len += elem_size * elem_count;
- if (i + len + 3 > n) {
- rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
- break;
- }
- type = vp[0];
- count = elem_count;
- size = elem_size;
- }
- break;
- default:
- rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
- break;
- }
- if (rc)
- break;
- i += len + 3;
- if (f(cself, ctx, tag, type, count, &vp[offset], size))
- break;
- }
- return rc;
+
+LIB_EXPORT bool CC BAMAlignmentHasColorSpace(BAMAlignment const *cself)
+{
+ return get_CS(cself) != NULL;
}
-static bool BAMAlignmentGetCS(BAMAlignment const *cself, void *ctx, char const tag[2],
- BAMOptDataValueType type, unsigned count,
- void const *value, unsigned size)
+LIB_EXPORT rc_t CC BAMAlignmentGetCSKey(BAMAlignment const *cself, char rhs[1])
{
- if (tag[0] == 'C' && tag[1] == 'S' && size == getReadLen(cself) + 1) {
- *(uint8_t const **)ctx = value;
- return true;
- }
- return false;
+ char const *const vCS = get_CS(cself);
+
+ if (vCS)
+ rhs[0] = vCS[0];
+ return 0;
}
-static rc_t BAMAlignmentGetCSRead(BAMAlignment const *cself)
+LIB_EXPORT rc_t CC BAMAlignmentGetCSSeqLen(BAMAlignment const *cself, uint32_t *const rhs)
{
- uint8_t const *cs = NULL;
- rc_t rc = BAMAlignmentParseOptData(cself, &cs, BAMAlignmentGetCS);
- if (rc == 0 && cs != NULL) {
- ((BAMAlignment *)cself)->csread = cs - cself->data->raw;
- }
- return rc;
+ struct offset_size_s const *const vCS = get_CS_info(cself);
+
+ *rhs = vCS ? vCS->size - 5 : 0;
+ return 0;
}
-static bool BAMAlignmentGetOQ(BAMAlignment const *cself, void *ctx, char const tag[2],
- BAMOptDataValueType type, unsigned count,
- void const *value, unsigned size)
+LIB_EXPORT rc_t CC BAMAlignmentGetCSSequence(BAMAlignment const *cself, char rhs[], uint32_t const seqlen)
{
- if (tag[0] == 'O' && tag[1] == 'Q') {
- *(uint8_t const **)ctx = value;
- return true;
+ char const *const vCS = get_CS(cself);
+
+ if (vCS) {
+ unsigned i;
+
+ for (i = 0;i != seqlen; ++i) {
+ char const ch = vCS[i+1];
+
+ rhs[i] = (ch == '4') ? '.' : ch;
+ }
}
- return false;
+ return 0;
+}
+
+LIB_EXPORT rc_t CC BAMAlignmentGetQuality(const BAMAlignment *cself, const uint8_t **rhs)
+{
+ *rhs = &cself->data->raw[cself->qual];
+ return 0;
}
LIB_EXPORT rc_t CC BAMAlignmentGetQuality2(BAMAlignment const *cself, uint8_t const **rhs, uint8_t *offset)
{
- rc_t rc;
+ uint8_t const *const OQ = get_OQ(cself);
- *offset = 33;
- *rhs = NULL;
- rc = BAMAlignmentParseOptData(cself, ( void* ) rhs, BAMAlignmentGetOQ);
- if (rc == 0 && *rhs != NULL)
- return 0;
+ if (OQ) {
+ struct offset_size_s const *const oq = get_OQ_info(cself);
+
+ if (oq->size - 4 == getReadLen(cself)) {
+ *offset = 33;
+ *rhs = OQ;
+ }
+ else
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+ }
+ else {
+ *offset = 0;
+ *rhs = &cself->data->raw[cself->qual];
+ }
+ return 0;
+}
+
+LIB_EXPORT rc_t CC BAMAlignmentGetCSQuality(BAMAlignment const *cself, uint8_t const **rhs, uint8_t *offset)
+{
+ struct offset_size_s const *const cs = get_CS_info(cself);
+ struct offset_size_s const *const cq = get_CQ_info(cself);
+ uint8_t const *const CQ = get_CQ(cself);
+
+ if (cs && cq && CQ) {
+ if (cs->size == cq->size) {
+ *offset = 33;
+ *rhs = CQ + 1;
+ return 0;
+ }
+ if (cs->size == cq->size + 1) {
+ *offset = 33;
+ *rhs = CQ;
+ return 0;
+ }
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+ }
*offset = 0;
*rhs = &cself->data->raw[cself->qual];
return 0;
@@ -2051,7 +2490,7 @@ typedef struct OptForEach_ctx_s {
static bool i_OptDataForEach(BAMAlignment const *cself, void *Ctx, char const tag[2], BAMOptDataValueType type, unsigned count, void const *value, unsigned size)
{
OptForEach_ctx_t *ctx = (OptForEach_ctx_t *)Ctx;
- size_t const need = (size_t)&((BAMOptData const *)NULL)->u.f64[(count * size + sizeof(double))/sizeof(double)];
+ size_t const need = (size_t)&((BAMOptData const *)NULL)->u.f64[(count * size + sizeof(double) - 1)/sizeof(double)];
if (need > ctx->valsize) {
void *const temp = realloc(ctx->alloced, need);
@@ -2063,12 +2502,13 @@ static bool i_OptDataForEach(BAMAlignment const *cself, void *Ctx, char const ta
ctx->valsize = need;
}
ctx->val->type = type;
- ctx->val->element_count = (type == dt_CSTRING || type == dt_HEXSTRING) ? size : count;
+ ctx->val->element_count = (type == dt_CSTRING || type == dt_HEXSTRING) ? size - 1 : count;
memcpy(ctx->val->u.u8, value, size * count);
#if __BYTE_ORDER == __BIG_ENDIAN
{{
unsigned di;
+ uint32_t elem_count = ctx->val->element_count;
switch (size) {
case 2:
@@ -2090,66 +2530,7 @@ static bool i_OptDataForEach(BAMAlignment const *cself, void *Ctx, char const ta
return ctx->rc != 0;
}
-#if USE_OLD_BAM_OPT_FOR_EACH
-LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach(const BAMAlignment *cself, void *ctx, BAMOptionalDataFunction f)
-{
- const char *const auxData = (const char *)&cself->data->raw[cself->extra];
- const unsigned n = cself->datasize - cself->extra;
- unsigned i;
- rc_t rc;
-
- if (n < 4)
- return 0;
- for (i = 0; i < n - 3; ) {
- const char *const tag = &auxData[i];
- const int type = ((const uint8_t *)auxData)[i + 2];
- const uint8_t *const value = (const uint8_t *)&auxData[i + 3];
- unsigned size = 3;
-
- switch (type) {
- case dt_CSTRING:
- case dt_HEXSTRING:
- while (size != n && tag[size] != '\0')
- ++size;
- if (size == n)
- return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
- ++size;
- break;
- case dt_INT8:
- case dt_UINT8:
- case dt_ASCII:
- size += 1;
- break;
- case dt_INT16:
- case dt_UINT16:
- size += 2;
- break;
- case dt_FLOAT32:
- case dt_INT:
- case dt_UINT:
- size += 4;
- break;
- case dt_FLOAT64:
- size += 8;
- break;
- case dt_NUM_ARRAY:
- /* TODO: implement */
- default:
- return RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
- }
- rc = f(ctx, tag, type, value, size - 3);
- if (rc)
- return rc;
- i += size;
- }
- return 0;
-}
-
-LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach2(const BAMAlignment *cself, void *ctx, BAMOptionalDataFunction2 f)
-#else
-
LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach(const BAMAlignment *cself, void *user_ctx, BAMOptionalDataFunction f)
-#endif
{
union u {
BAMOptData value;
@@ -2157,6 +2538,7 @@ LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach(const BAMAlignment *cself, void *u
} value_auto;
OptForEach_ctx_t ctx;
rc_t rc;
+ unsigned i;
ctx.val = &value_auto.value;
ctx.alloced = NULL;
@@ -2165,22 +2547,453 @@ LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach(const BAMAlignment *cself, void *u
ctx.user_f = f;
ctx.user_ctx = user_ctx;
- rc = BAMAlignmentParseOptData(cself, &ctx, i_OptDataForEach);
- if (rc == 0)
- rc = ctx.rc;
+ for (i = 0; i != cself->numExtra; ++i) {
+ char const *const tag = (char const *)&cself->data->raw[cself->extra[i].offset];
+ uint8_t type = tag[2];
+ uint8_t const *const vp = (uint8_t const *)&tag[3];
+ unsigned len = cself->extra[i].size - 3;
+ unsigned size = cself->extra[i].size - 3;
+ unsigned count = 1;
+ unsigned offset = 0;
+
+ if (type == dt_NUM_ARRAY) {
+ unsigned elem_size = 0;
+ uint32_t elem_count = 0;
+
+ offset = len = 5;
+ switch (vp[0]) {
+ case dt_INT8:
+ case dt_UINT8:
+ elem_size = 1;
+ break;
+ case dt_INT16:
+ case dt_UINT16:
+ elem_size = 2;
+ break;
+ case dt_FLOAT32:
+ case dt_INT:
+ case dt_UINT:
+ elem_size = 4;
+ break;
+ case dt_FLOAT64:
+ elem_size = 8;
+ break;
+ default:
+ rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+ break;
+ }
+ if (rc)
+ break;
+ elem_count = LE2HUI32(&vp[1]);
+ len += elem_size * elem_count;
+ type = vp[0];
+ count = elem_count;
+ size = elem_size;
+ break;
+ }
+ if (i_OptDataForEach(cself, &ctx, tag, type, count, &vp[offset], size))
+ break;
+ }
+ rc = ctx.rc;
if (ctx.alloced)
free(ctx.alloced);
return rc;
}
-/* MARK: BAMIndex stuff */
+LIB_EXPORT bool CC BAMAlignmentHasCGData(BAMAlignment const *self)
+{
+ return get_CG_GC_info(self) && get_CG_GS_info(self) && get_CG_GQ_info(self);
+}
+
+static bool BAMAlignmentParseCGTag(BAMAlignment const *self,uint32_t *cg_segs,uint32_t max_cg_segs)
+{
+/*** patern in cg_segs should be nSnGnSnG - no more then 7 segments **/
+ struct offset_size_s const *const GCi = get_CG_GC_info(self);
+ char *cg = (char *) &self->data->raw[GCi->offset + 3];
+ char *end = cg + GCi->size -4;
+ /** init**/
+ int iseg=0;
+ char last_op='S';
+ cg_segs[iseg] = 0;
+
+ while(cg < end && iseg < max_cg_segs){
+ int op_len = strtol(cg,&cg,10);
+ char op = *cg;
+ cg++;
+ if(op==last_op){
+ cg_segs[iseg] += op_len;
+ } else{
+ last_op = op;
+ iseg++;
+ cg_segs[iseg] = op_len;
+ }
+ }
+ for(iseg+=1;iseg < max_cg_segs;iseg ++){
+ cg_segs[iseg] = 0;
+ }
+ return true;
+}
+
+static
+rc_t ExtractInt32(BAMAlignment const *self, int32_t *result,
+ struct offset_size_s const *const tag)
+{
+ int32_t y;
+
+ switch (self->data->raw[tag->offset + 2]) {
+ case 'c':
+ if (tag->size == 4)
+ y = ((int8_t const *)self->data->raw)[tag->offset + 3];
+ else
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ break;
+ case 'C':
+ if (tag->size == 4)
+ y = ((uint8_t const *)self->data->raw)[tag->offset + 3];
+ else
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ break;
+ case 's':
+ if (tag->size == 5)
+ y = LE2HI16(self->data->raw + tag->offset + 3);
+ else
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ break;
+ case 'S':
+ if (tag->size == 5)
+ y = LE2HUI16(self->data->raw + tag->offset + 3);
+ else
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ break;
+ case 'i':
+ if (tag->size == 7)
+ y = LE2HI32(self->data->raw + tag->offset + 3);
+ else
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ break;
+ case 'I':
+ if (tag->size == 7)
+ y = LE2HUI32(self->data->raw + tag->offset + 3);
+ else
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ break;
+ default:
+ return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+ }
+ *result = y;
+ return 0;
+}
+
+LIB_EXPORT
+rc_t CC BAMAlignmentGetCGAlignGroup(BAMAlignment const *self,
+ char buffer[],
+ size_t max_size,
+ size_t *act_size)
+{
+ struct offset_size_s const *const ZA = get_CG_ZA_info(self);
+ struct offset_size_s const *const ZI = get_CG_ZI_info(self);
+
+ if (ZA && ZI) {
+ rc_t rc;
+ int32_t za;
+ int32_t zi;
+
+ rc = ExtractInt32(self, &za, ZA); if (rc) return rc;
+ rc = ExtractInt32(self, &zi, ZI); if (rc) return rc;
+ return string_printf(buffer, max_size, act_size, "%i_%i", zi, za);
+ }
+ return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+LIB_EXPORT
+rc_t CC BAMAlignmentGetCGSeqQual(BAMAlignment const *self,
+ char sequence[],
+ uint8_t quality[])
+{
+ struct offset_size_s const *const GCi = get_CG_GC_info(self);
+ struct offset_size_s const *const GSi = get_CG_GS_info(self);
+ struct offset_size_s const *const GQi = get_CG_GQ_info(self);
+
+ if (GCi && GSi && GQi) {
+ char const *const vGS = (char const *)&self->data->raw[GSi->offset + 3];
+ char const *const GQ = (char const *)&self->data->raw[GQi->offset + 3];
+ unsigned const GSsize = GSi->size - 4;
+ unsigned const sn = getReadLen(self);
+ uint32_t cg_segs[2*CG_NUM_SEGS-1]; /** 4 segments + 3gaps **/
+ unsigned i,G,S;
+
+ if (GSi->size != GQi->size)
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ if (SequenceLengthFromCIGAR(self) != sn)
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ if (!BAMAlignmentParseCGTag(self, cg_segs,2*CG_NUM_SEGS-1))
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+
+ for(S=cg_segs[0],G=0,i=1;i<CG_NUM_SEGS;i++){ /** sum all S and G **/
+ S += cg_segs[2*i];
+ G += cg_segs[2*i-1];
+ }
+ if (G + G != GSsize || S + G > sn || sn + G != 35) {
+ /*fprintf(stderr, "GSsize: %u; sn: %u; S: %u; G: %u\n", GSsize, sn, S, G);*/
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ }
+ if(G > 0){
+ int nsi=cg_segs[0];/** new index into sequence */
+ int osi=nsi+G; /** old index into sequence */
+ int k; /** index into inserted sequence **/
+ /***make room for inserts **/
+ memmove(sequence + osi, sequence + nsi, sn - nsi);
+ memmove(quality + osi, quality + nsi, sn - nsi);
+ for(i=1,k=0;i<CG_NUM_SEGS && nsi < osi;i++){/*** when osi and nsi meet we are done ***/
+ int j;
+ for(j = cg_segs[2*i-1];j>0;j--){/** insert mode **/
+ sequence[nsi] = vGS[k];
+ quality [nsi] = GQ[k] - 33;
+ nsi++;k++;
+ sequence[nsi] = vGS[k];
+ quality [nsi] = GQ[k] - 33;
+ nsi++;k++;
+ osi++;
+ }
+ if(nsi < osi){
+ for(j=cg_segs[2*i];j>0;j--){/** copy mode **/
+ sequence[nsi] = sequence[osi];
+ quality[nsi] = quality[osi];
+ nsi++;osi++;
+ }
+ }
+ }
+ }
+ return 0;
+ }
+ return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+
+static unsigned splice(uint32_t cigar[], unsigned n, unsigned at, unsigned out, unsigned in, uint32_t const new_values[/* in */])
+{
+ assert(at + out <= n);
+ memmove(&cigar[at + in], &cigar[at + out], (n - at - out) * 4);
+ if (in)
+ memcpy(&cigar[at], new_values, in * 4);
+ return n + in - out;
+}
+
+#define OPCODE_2_FIX (0xF)
+
+static unsigned insert_B(unsigned S, unsigned G, uint32_t cigar[], unsigned n)
+{
+ unsigned i;
+ unsigned pos;
+ unsigned T=S+G;
+
+ for (pos = i = 0; i < n; ++i) {
+ unsigned const opcode = cigar[i] & 0xF;
+
+ switch (opcode) {
+ case 0:
+ case 1:
+ case 4:
+ case 7:
+ case 8:
+ {{
+ unsigned const len = cigar[i] >> 4;
+ unsigned const nxt = pos + len;
+
+ if (pos <= T && T <= nxt) {
+ unsigned const l = T - pos;
+ unsigned const r = len - l;
+ unsigned B = i + 2;
+ unsigned in = 4;
+ uint32_t Ops[4];
+ uint32_t *ops = Ops;
+
+ Ops[0] = (l << 4) | opcode;
+ Ops[1] = (G << 4) | 9; /* B */
+ Ops[2] = (G << 4) | 0; /* M this is not backwards */
+ Ops[3] = (r << 4) | opcode;
+
+ if (r == 0)
+ --in;
+ if (l == 0) {
+ ++ops;
+ --in;
+ --B;
+ }
+ n = splice(cigar, n, i, 1, in, ops);
+ return n;;
+ }
+ pos = nxt;
+ }}
+ break;
+ default:
+ break;
+ }
+ }
+ return n;
+}
+
+static unsigned fix_I(uint32_t cigar[], unsigned n)
+{
+ unsigned i;
+ int last_b = 0;
+
+ for (i = 0; i < n; ++i) {
+ unsigned const opcode = cigar[i] & 0xF;
+
+ if (opcode == 0xF) {
+ unsigned const oplen = cigar[i] >> 4;
+ uint32_t ops[2];
+
+ if (0/*last_b*/) {
+ ops[0] = (oplen << 4) | 0; /* M */
+ ops[1] = (oplen << 4) | 9; /* B */
+ }
+ else {
+ ops[0] = (oplen << 4) | 9; /* B */
+ ops[1] = (oplen << 4) | 0; /* M */
+ }
+
+ n = splice(cigar, n, i, 1, 2, ops);
+ ++i;
+ }
+ else if (opcode == 9)
+ last_b = 1;
+ else
+ last_b = 0;
+ }
+ return n;
+}
+
+static unsigned fix_IN(uint32_t cigar[], unsigned n)
+{
+ unsigned i;
+
+ for (i = 1; i < n; ++i) {
+ unsigned const opL = cigar[i-1] & 0xF;
+ unsigned const opI = cigar[ i ] & 0xF;
+
+ if (opL == 1 && opI == 3) {
+ unsigned const oplen = cigar[i-1] >> 4;
+ uint32_t ops[2];
+
+ ops[0] = (oplen << 4) | 9; /* B */
+ ops[1] = (oplen << 4) | 0; /* M */
+
+ n = splice(cigar, n, i-1, 1, 2, ops);
+ ++i;
+ }
+ else if (opL == 3 && opI == 1) {
+ unsigned const oplen = cigar[i] >> 4;
+ uint32_t ops[2];
+
+ ops[0] = (oplen << 4) | 9; /* M */
+ ops[1] = (oplen << 4) | 0; /* B */
+
+ n = splice(cigar, n, i, 1, 2, ops);
+ ++i;
+ }
+ }
+ return n;
+}
+
+static unsigned canonicalize(uint32_t cigar[], unsigned n)
+{
+ unsigned i;
+
+ for (i = n; i > 0; ) {
+ --i;
+ if (cigar[i] >> 4 == 0 || (cigar[i] & 0xF) == 6)
+ n = splice(cigar, n, i, 1, 0, NULL);
+ }
+ for (i = 1; i < n; ) {
+ unsigned const opL = cigar[i-1] & 0xF;
+ unsigned const opI = cigar[ i ] & 0xF;
+
+ if (opI == opL) {
+ unsigned const oplen = (cigar[i] >> 4) + (cigar[i-1] >> 4);
+ uint32_t const op = (oplen << 4) | opI;
+
+ n = splice(cigar, n, i-1, 2, 1, &op);
+ }
+ else
+ ++i;
+ }
+#if 0
+ if ((cigar[0] & 0xF) == 1)
+ cigar[0] = (cigar[0] & ~(uint32_t)0xF) | 4; /* I -> S */
+ if ((cigar[n - 1] & 0xF) == 1)
+ cigar[n - 1] = (cigar[n - 1] & ~(uint32_t)0xF) | 4; /* I -> S */
+#endif
+ return n;
+}
+
+static void reverse(uint32_t cigar[], unsigned n)
+{
+ unsigned i;
+ unsigned j;
+
+ for (j = n - 1, i = 0; i < j; ++i, --j) {
+ uint32_t const tmp = cigar[i];
+ cigar[i] = cigar[j];
+ cigar[j] = tmp;
+ }
+}
+
+LIB_EXPORT
+rc_t CC BAMAlignmentGetCGCigar(BAMAlignment const *self,
+ uint32_t *cigar,
+ uint32_t cig_max,
+ uint32_t *cig_act)
+{
+ struct offset_size_s const *const GCi = get_CG_GC_info(self);
+
+ *cig_act = 0;
+
+ if (GCi) {
+ uint32_t i,G,S;
+ unsigned n = getCigarCount(self);
+ uint32_t cg_segs[2*CG_NUM_SEGS-1]; /** 4 segments + 3gaps **/
+
+ if (!BAMAlignmentParseCGTag(self, cg_segs, 2*CG_NUM_SEGS-1))
+ return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+ if (cig_max < n + 5)
+ return RC(rcAlign, rcRow, rcReading, rcBuffer, rcInsufficient);
+
+ memcpy(cigar, getCigarBase(self), n * 4);
+ n = canonicalize(cigar, n); /* just in case */
+ for(i=0,S=0; i< CG_NUM_SEGS-1;i++){
+ S+=cg_segs[2*i];
+ G=cg_segs[2*i+1];
+ if(G > 0){
+ n = insert_B(S, G, cigar, n);
+ S+=G;
+ }
+ }
+ *cig_act = n;
+ return 0;
+ }
+ return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
-static uint64_t get_pos(const uint8_t *buf)
+
+LIB_EXPORT rc_t BAMAlignmentGetTI(BAMAlignment const *self, uint64_t *ti)
{
- uint64_t v64;
+ char const *const TI = get_XT(self);
+ long long unsigned temp;
+
+ if (TI && sscanf(TI, "ti|%llu", &temp) == 1) {
+ *ti = (uint64_t)temp;
+ return 0;
+ }
+ return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+/* MARK: BAMIndex stuff */
- memcpy(&v64, buf, 8);
- return LE2HUI64(&v64);
+static uint64_t get_pos(uint8_t const buf[])
+{
+ return LE2HUI64(buf);
}
#define MAX_BIN 37449
@@ -2245,7 +3058,7 @@ typedef rc_t (*WalkIndexStructureCallBack)(const uint8_t data[], size_t dlen,
void *ctx);
static
-rc_t WalkIndexStructure(const uint8_t buf[], size_t blen,
+rc_t WalkIndexStructure(uint8_t const buf[], size_t const blen,
WalkIndexStructureCallBack func,
void *ctx
)
@@ -2255,17 +3068,21 @@ rc_t WalkIndexStructure(const uint8_t buf[], size_t blen,
unsigned i;
rc_t rc;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index data length: %u", blen));
+
if (cp + 4 > blen)
return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
+
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index signature: '%c%c%c%u'", buf[cp+0], buf[cp+1], buf[cp+2], buf[cp+3]));
if (memcmp(buf + cp, "BAI\1", 4) != 0)
return RC(rcAlign, rcIndex, rcReading, rcFormat, rcUnknown);
- cp += 4;
+ cp += 4;
if (cp + 4 > blen)
return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
- memcpy(&nrefs, buf + cp, 4);
- nrefs = LE2HI32(&nrefs);
- cp += 4;
+
+ nrefs = LE2HI32(buf + cp); cp += 4;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference count: %i", nrefs));
if (nrefs == 0)
return RC(rcAlign, rcIndex, rcReading, rcData, rcEmpty);
@@ -2276,20 +3093,23 @@ rc_t WalkIndexStructure(const uint8_t buf[], size_t blen,
int32_t intervals;
unsigned di;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference %u: starts at %u", i, cp));
if (cp + 4 > blen)
return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
- memcpy(&bins, buf + cp, 4); cp += 4;
- bins = LE2HI32(&bins);
+ bins = LE2HI32(buf + cp); cp += 4;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference %u: %i bins", i, nrefs));
+
for (di = 0; di < bins; ++di) {
uint32_t binNo;
if (cp + 8 > blen)
return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
- memcpy(&binNo, buf + cp, 4); cp += 4;
- memcpy(&chunks, buf + cp, 4); cp += 4;
- binNo = LE2HUI32(&binNo);
- chunks = LE2HI32(&chunks);
+
+ binNo = LE2HUI32(buf + cp); cp += 4;
+ chunks = LE2HI32(buf + cp); cp += 4;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference %u, bin %u: %i chunks", i, binNo, chunks));
+
if (cp + 16 * chunks > blen)
return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
rc = func(&buf[cp], 16 * chunks, i, nrefs, bai_StartStopPairs, binNo, bins, chunks, ctx);
@@ -2299,8 +3119,10 @@ rc_t WalkIndexStructure(const uint8_t buf[], size_t blen,
}
if (cp + 4 > blen)
return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
- memcpy(&intervals, buf + cp, 4); cp += 4;
- intervals = LE2HI32(&intervals);
+
+ intervals = LE2HI32(buf + cp); cp += 4;
+ DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference %u: %i intervals", i, intervals));
+
if (cp + 8 * intervals > blen)
return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
rc = func(&buf[cp], 8 * intervals, i, nrefs, bai_16kIntervals, ~(unsigned)0, bins, intervals, ctx);
@@ -2394,17 +3216,9 @@ rc_t LoadIndex2a(const uint8_t data[], size_t dlen, unsigned refNo,
if (n_ival > 1)
break;
-#if _DEBUGGING
- {{
- uint32_t bin_no;
-
- memcpy(&bin_no, ctx->base + cp, 4);
- assert(i == LE2HI32(&bin_no));
- }}
-#endif
+ assert(i == LE2HI32(ctx->base + cp));
cp += 4;
- memcpy(&chunk_count, ctx->base + cp, 4); cp += 4;
- chunk_count = LE2HI32(&chunk_count);
+ chunk_count = LE2HI32(ctx->base + cp); cp += 4;
found = ctx->refSeq[refNo][ival];
for (k = 0; k < chunk_count; ++k) {
const uint64_t start = get_pos(ctx->base + cp);
@@ -2437,8 +3251,7 @@ rc_t LoadIndex2a(const uint8_t data[], size_t dlen, unsigned refNo,
if (ival + n_ival > max_ival)
n_ival = max_ival - ival;
- memcpy(&chunk_count, ctx->base + cp + 4, 4); cp += 8;
- chunk_count = LE2HI32(&chunk_count);
+ chunk_count = LE2HI32(ctx->base + cp + 4); cp += 8;
for (k = 0; k < chunk_count; ++k) {
const uint64_t start = get_pos(ctx->base + cp);
const uint64_t end = get_pos(ctx->base + cp + 8);
@@ -2566,13 +3379,13 @@ rc_t BAMFileOpenIndexInternal(const BAMFile *self, const char *path)
if (rc == 0) {
buf = malloc(fsize);
if (buf != NULL) {
- size_t read;
+ size_t nread;
- rc = KFileRead(kf, 0, buf, fsize, &read);
+ rc = KFileRead(kf, 0, buf, fsize, &nread);
KFileRelease(kf);
if (rc == 0) {
- if (read == fsize) {
- rc = LoadIndex((BAMFile *)self, buf, read);
+ if (nread == fsize) {
+ rc = LoadIndex((BAMFile *)self, buf, nread);
free(buf);
return rc;
}
@@ -2591,11 +3404,11 @@ LIB_EXPORT rc_t CC BAMFileOpenIndex(const BAMFile *self, const char *path)
return BAMFileOpenIndexInternal(self, path);
}
-LIB_EXPORT rc_t CC BAMFileOpenIndexWithKPath(const BAMFile *self, const KPath *kpath)
+LIB_EXPORT rc_t CC BAMFileOpenIndexWithVPath(const BAMFile *self, const VPath *kpath)
{
char path[4096];
size_t nread;
- rc_t rc = KPathReadPath(kpath, path, sizeof(path), &nread);
+ rc_t rc = VPathReadPath(kpath, path, sizeof(path), &nread);
if (rc == 0) {
path[nread] = '\0';
@@ -2720,11 +3533,11 @@ static rc_t BAMIndexWhack(const BAMIndex *cself) {
/* MARK: BAM Validation Stuff */
-static rc_t OpenKPathRead(const KFile **fp, struct KPath const *path)
+static rc_t OpenVPathRead(const KFile **fp, struct VPath const *path)
{
char buffer[4096];
size_t blen;
- rc_t rc = KPathReadPath(path, buffer, sizeof(buffer), &blen);
+ rc_t rc = VPathReadPath(path, buffer, sizeof(buffer), &blen);
if (rc == 0) {
KDirectory *dir;
@@ -2738,10 +3551,10 @@ static rc_t OpenKPathRead(const KFile **fp, struct KPath const *path)
return rc;
}
-static rc_t ReadKPath(void **data, size_t *dsize, struct KPath const *path)
+static rc_t ReadVPath(void **data, size_t *dsize, struct VPath const *path)
{
const KFile *fp;
- rc_t rc = OpenKPathRead(&fp, path);
+ rc_t rc = OpenVPathRead(&fp, path);
if (rc == 0) {
uint8_t *buff;
@@ -2774,13 +3587,14 @@ static rc_t ReadKPath(void **data, size_t *dsize, struct KPath const *path)
return rc;
}
-static rc_t KPath2BGZF(BGZFile *bgzf, struct KPath const *path)
+static rc_t VPath2BGZF(BGZFile *bgzf, struct VPath const *path)
{
const KFile *fp;
- rc_t rc = OpenKPathRead(&fp, path);
+ BGZFile_vt dummy;
+ rc_t rc = OpenVPathRead(&fp, path);
if (rc == 0) {
- rc = BGZFileInit(bgzf, fp);
+ rc = BGZFileInit(bgzf, fp, &dummy);
KFileRelease(fp);
}
return rc;
@@ -2917,16 +3731,14 @@ rc_t BAMValidateHeader(const uint8_t data[],
if (memcmp(data, "BAM\1", 4) != 0)
return RC(rcAlign, rcFile, rcValidating, rcFormat, rcUnrecognized);
- memcpy(&hlen, &data[4], 4);
- hlen = LE2HI32(&hlen);
+ hlen = LE2HI32(&data[4]);
if (hlen < 0)
return RC(rcAlign, rcFile, rcValidating, rcData, rcInvalid);
if (dsize < hlen + 12)
return RC(rcAlign, rcFile, rcValidating, rcData, rcIncomplete);
- memcpy(&refs, &data[hlen + 8], 4);
- refs = LE2HI32(&refs);
+ refs = LE2HI32(&data[hlen + 8]);
if (refs < 0)
return RC(rcAlign, rcFile, rcValidating, rcData, rcInvalid);
@@ -2936,8 +3748,7 @@ rc_t BAMValidateHeader(const uint8_t data[],
if (dsize < cp + 4)
return RC(rcAlign, rcFile, rcValidating, rcData, rcIncomplete);
- memcpy(&nlen, &data[cp], 4);
- nlen = LE2HI32(&nlen);
+ nlen = LE2HI32(&data[cp]);
if (nlen < 0)
return RC(rcAlign, rcFile, rcValidating, rcData, rcInvalid);
@@ -2953,8 +3764,8 @@ rc_t BAMValidateHeader(const uint8_t data[],
return 0;
}
-static rc_t BAMValidateIndex(struct KPath const *bampath,
- struct KPath const *baipath,
+static rc_t BAMValidateIndex(struct VPath const *bampath,
+ struct VPath const *baipath,
BAMValidateOption options,
BAMValidateCallback callback,
void *callbackContext
@@ -2976,7 +3787,7 @@ static rc_t BAMValidateIndex(struct KPath const *bampath,
if ((options & bvo_IndexOptions) == 0)
return callback(callbackContext, 0, &stats);
- rc = ReadKPath((void **)&bai, &bai_size, baipath);
+ rc = ReadVPath((void **)&bai, &bai_size, baipath);
if (rc)
return rc;
@@ -2992,7 +3803,7 @@ static rc_t BAMValidateIndex(struct KPath const *bampath,
if ((options & bvo_IndexOptions) == bvo_IndexStructure)
return WalkIndexStructure(bai, bai_size, IndexValidateStructure, &ctx);
- rc = KPath2BGZF(&bam, bampath);
+ rc = VPath2BGZF(&bam, bampath);
if (rc == 0) {
ctx.mpositions = 1024 * 32;
ctx.position = malloc(ctx.mpositions * sizeof(ctx.position[0]));
@@ -3065,8 +3876,7 @@ static rc_t BAMValidateIndex(struct KPath const *bampath,
if (dsize - bpos < 4 || dsize - bpos < rsize)
goto BAD_BLOCK_OFFSET;
}
- memcpy(&temp, data + bpos, 4);
- rsize = LE2HI32(&temp);
+ rsize = LE2HI32(data + bpos);
if (rsize <= 0)
goto BAD_BLOCK_OFFSET;
if (rsize > 0xFFFF) {
@@ -3076,7 +3886,7 @@ static rc_t BAMValidateIndex(struct KPath const *bampath,
}
if (dsize - bpos < rsize)
goto READ_MORE;
- rc = BAMAlignmentParse(&algn, data + bpos + 4, rsize);
+/* rc = BAMAlignmentParse(&algn, data + bpos + 4, rsize); */
if (rc)
goto BAD_BLOCK_OFFSET;
++stats.indexBlockOffset.good;
@@ -3233,8 +4043,7 @@ static rc_t BAMValidate2(void *Ctx, const BGZFile *file,
while (cp + 4 < ctx->bsize) {
int32_t rsize;
- memcpy(&rsize, &ctx->buf[cp], 4);
- rsize = LE2HI32(&rsize);
+ rsize = LE2HI32(&ctx->buf[cp]);
if (rsize < 0) {
++ctx->stats->blockStructure.error;
ctx->options = bvo_BlockStructure;
@@ -3256,7 +4065,7 @@ static rc_t BAMValidate2(void *Ctx, const BGZFile *file,
if (ctx->options > bvo_BlockStructure) {
BAMAlignment algn;
- rc = BAMAlignmentParse(&algn, &ctx->buf[cp + 4], rsize);
+/* rc = BAMAlignmentParse(&algn, &ctx->buf[cp + 4], rsize); */
if (rc == 0) {
++ctx->stats->recordStructure.good;
if (ctx->options > bvo_RecordStructure)
@@ -3304,7 +4113,7 @@ static rc_t BAMValidate2(void *Ctx, const BGZFile *file,
return fatal ? rc : rc2;
}
-static rc_t BAMValidateBAM(struct KPath const *bampath,
+static rc_t BAMValidateBAM(struct VPath const *bampath,
BAMValidateOption options,
BAMValidateCallback callback,
void *callbackContext
@@ -3337,7 +4146,7 @@ static rc_t BAMValidateBAM(struct KPath const *bampath,
if (options > bvo_RecordStructure)
options = bvo_RecordStructure | (options & 0xFFF0);
- rc = KPath2BGZF(&bam, bampath);
+ rc = VPath2BGZF(&bam, bampath);
if (rc == 0) {
stats.bamFileSize = bam.fsize;
if ((options & 7) > bvo_BlockHeaders)
@@ -3354,8 +4163,8 @@ static rc_t CC dummy_cb(void *ctx, rc_t result, const BAMValidateStats *stats)
return 0;
}
-LIB_EXPORT rc_t CC BAMValidate(struct KPath const *bampath,
- struct KPath const *baipath,
+LIB_EXPORT rc_t CC BAMValidate(struct VPath const *bampath,
+ struct VPath const *baipath,
BAMValidateOption options,
BAMValidateCallback callback,
void *callbackContext
diff --git a/libs/align/debug.h b/libs/align/debug.h
index cf18501..7c03771 100644
--- a/libs/align/debug.h
+++ b/libs/align/debug.h
@@ -29,15 +29,49 @@
#include <klib/debug.h>
#if _DEBUGGING
+
#define ALIGN_DBGF(msg) DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_WRITER), msg)
#define ALIGN_DBG(fmt, ...) ALIGN_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
#define ALIGN_DBGERR(rc) if(rc != 0) {ALIGN_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
#define ALIGN_DBGERRP(fmt, rc, ...) if(rc != 0) {ALIGN_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
+#define ALIGN_C_DBGF(msg) DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_COMPRESS), msg)
+#define ALIGN_C_DBG(fmt, ...) ALIGN_C_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
+#define ALIGN_C_DBGERR(rc) if(rc != 0) {ALIGN_C_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
+#define ALIGN_C_DBGERRP(fmt, rc, ...) if(rc != 0) {ALIGN_C_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
+#define ALIGN_R_DBGF(msg) DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_COVERAGE), msg)
+#define ALIGN_R_DBG(fmt, ...) ALIGN_R_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
+#define ALIGN_R_DBGERR(rc) if(rc != 0) {ALIGN_R_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
+#define ALIGN_R_DBGERRP(fmt, rc, ...) if(rc != 0) {ALIGN_R_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
+#define ALIGN_CF_DBGF(msg) DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_CFG), msg)
+#define ALIGN_CF_DBG(fmt, ...) ALIGN_CF_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
+#define ALIGN_CF_DBGERR(rc) if(rc != 0) {ALIGN_CF_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
+#define ALIGN_CF_DBGERRP(fmt, rc, ...) if(rc != 0) {ALIGN_CF_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
#else
+
+#define ALIGN_DBGF(msg) ((void)0)
#define ALIGN_DBG(fmt, ...) ((void)0)
#define ALIGN_DBGERR(rc) ((void)0)
#define ALIGN_DBGERRP(fmt, rc, ...) ((void)0)
-#define ALIGN_DBGF(msg) ((void)0)
+
+#define ALIGN_C_DBGF(msg) ((void)0)
+#define ALIGN_C_DBG(fmt, ...) ((void)0)
+#define ALIGN_C_DBGERR(rc) ((void)0)
+#define ALIGN_C_DBGERRP(fmt, rc, ...) ((void)0)
+
+#define ALIGN_R_DBGF(msg) ((void)0)
+#define ALIGN_R_DBG(fmt, ...) ((void)0)
+#define ALIGN_R_DBGERR(rc) ((void)0)
+#define ALIGN_R_DBGERRP(fmt, rc, ...) ((void)0)
+
+#define ALIGN_CF_DBGF(msg) ((void)0)
+#define ALIGN_CF_DBG(fmt, ...) ((void)0)
+#define ALIGN_CF_DBGERR(rc) ((void)0)
+#define ALIGN_CF_DBGERRP(fmt, rc, ...) ((void)0)
+
#endif
#endif /* _h_align_debug_ */
diff --git a/libs/align/dna-reverse-cmpl.c b/libs/align/dna-reverse-cmpl.c
new file mode 100644
index 0000000..3476106
--- /dev/null
+++ b/libs/align/dna-reverse-cmpl.c
@@ -0,0 +1,80 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <insdc/insdc.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+#include <align/dna-reverse-cmpl.h>
+#include <string.h>
+
+LIB_EXPORT rc_t CC DNAReverseCompliment(const INSDC_dna_text* seq, INSDC_dna_text* cmpl, uint32_t len)
+{
+ rc_t rc = 0;
+ uint32_t i;
+ static INSDC_dna_text compl[256] = "~";
+
+ if( seq == NULL || compl == NULL ) {
+ rc = RC( rcAlign, rcType, rcConverting, rcParam, rcNull);
+ } else {
+ if( compl[0] == '~' ) {
+ INSDC_dna_text* x = (INSDC_dna_text*)&compl[0];
+ memset(x, 0, sizeof(compl));
+ x['A'] = x['a'] = 'T';
+ x['T'] = x['t'] = 'A';
+ x['U'] = x['u'] = 'A';
+ x['G'] = x['g'] = 'C';
+ x['C'] = x['c'] = 'G';
+ x['Y'] = x['y'] = 'R';
+ x['R'] = x['r'] = 'Y';
+ x['S'] = x['s'] = 'S';
+ x['W'] = x['w'] = 'W';
+ x['K'] = x['k'] = 'M';
+ x['M'] = x['m'] = 'K';
+ x['B'] = x['b'] = 'V';
+ x['D'] = x['d'] = 'H';
+ x['H'] = x['h'] = 'D';
+ x['V'] = x['v'] = 'B';
+ x['N'] = x['n'] = 'N';
+ x['0'] = '0';
+ x['1'] = '1';
+ x['2'] = '2';
+ x['3'] = '3';
+ }
+ cmpl += len;
+ for(i = 0; i < len; i++) {
+ *--cmpl= compl[(int)seq[i]];
+ if( *cmpl == '\0' ) {
+ rc = RC(rcAlign, rcFormatter, rcWriting, rcData, rcInvalid);
+ break;
+ }
+ }
+ }
+ ALIGN_DBGERR(rc);
+ return rc;
+}
diff --git a/libs/align/libalign-access.vers b/libs/align/libalign-access.vers
index 21e8796..a970716 100644
--- a/libs/align/libalign-access.vers
+++ b/libs/align/libalign-access.vers
@@ -1 +1 @@
-1.0.3
+1.0.15
diff --git a/libs/align/libalign-reader.vers b/libs/align/libalign-reader.vers
index 6d7de6e..2ac9634 100644
--- a/libs/align/libalign-reader.vers
+++ b/libs/align/libalign-reader.vers
@@ -1 +1 @@
-1.0.2
+1.0.13
diff --git a/libs/align/pl_iterator.c b/libs/align/pl_iterator.c
new file mode 100644
index 0000000..b627af6
--- /dev/null
+++ b/libs/align/pl_iterator.c
@@ -0,0 +1,671 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <klib/text.h>
+#include <klib/out.h>
+#include <insdc/insdc.h>
+#include <align/manager.h>
+#include <align/iterator.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+typedef struct window
+{
+ INSDC_coord_zero first;
+ INSDC_coord_len len;
+} window;
+
+
+typedef struct pi_entry
+{
+ DLNode n; /* to have it in a DLList */
+ PlacementIterator *pi; /* the placement-iterator we have added */
+ window nxt_avail; /* the next available position of the placement-iterator */
+} pi_entry;
+
+
+typedef struct pi_window
+{
+ DLNode n; /* to have it in a DLList */
+ window w; /* the window of the placement-iterator */
+ DLList pi_entries; /* it has a DLList of pi_entry-struct's */
+ uint32_t count; /* how many entries do we have */
+} pi_window;
+
+
+typedef struct pi_ref
+{
+ DLNode n; /* to have it in a DLList */
+ char * name; /* the name of the reference it referes to */
+ window outer; /* the sum of all windows it has... */
+ bool outer_initialized; /* has the outer-window been initialized */
+ DLList pi_windows; /* it has a DLList of pi_window-struct's */
+} pi_ref;
+
+
+struct PlacementSetIterator
+{
+ KRefcount refcount;
+ struct AlignMgr const *amgr; /* the alignment-manager... ( right now: we store it, but that's it )*/
+ DLList pi_refs; /* a list of references we have to iterate over... */
+ pi_ref * current_ref; /* what is the current reference, we are handling ? */
+ pi_window * current_window; /* what is the current window, we are handling ? */
+ pi_entry * current_entry; /* what is the current pi-entry, we are handling ? */
+};
+
+
+/* =================================================================================================== */
+
+
+LIB_EXPORT rc_t CC AlignMgrMakePlacementSetIterator ( struct AlignMgr const *self,
+ PlacementSetIterator **iter )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+ else
+ {
+ if ( iter == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+ else
+ {
+ PlacementSetIterator * psi = calloc( sizeof * psi, 1 );
+ if ( psi == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = AlignMgrAddRef ( self );
+ if ( rc == 0 )
+ {
+ KRefcountInit( &psi->refcount, 1, "PlacementSetIterator", "Make", "align" );
+ psi->amgr = self;
+ psi->current_ref = NULL; /* we don't know that yet */
+ psi->current_window = NULL;
+ psi->current_entry = NULL;
+ DLListInit( &psi->pi_refs );
+ }
+ }
+ if ( rc == 0 )
+ *iter = psi;
+ else
+ free( psi );
+ }
+ }
+
+ return rc;
+}
+
+
+/* =================================================================================================== */
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+ int res = 0;
+ if ( ( a != NULL )&&( b != NULL ) )
+ {
+ size_t len_a = string_size( a );
+ size_t len_b = string_size( b );
+ res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+ }
+ return res;
+}
+
+
+/* =================================================================================================== */
+
+
+typedef struct pi_ref_cb_ctx
+{
+ const char * name;
+ pi_ref *res;
+} pi_ref_cb_ctx;
+
+
+static bool CC find_pi_ref_callback( DLNode *n, void *data )
+{
+ pi_ref_cb_ctx *ctx = ( pi_ref_cb_ctx * )data;
+ pi_ref * pr = ( pi_ref * ) n;
+ bool res = ( cmp_pchar( ctx->name, pr->name ) == 0 );
+ if ( res )
+ {
+ ctx->res = pr;
+ }
+ return res;
+}
+
+
+static pi_ref * find_pi_ref( const DLList * list, const char * name )
+{
+ pi_ref_cb_ctx ctx;
+ ctx.res = NULL;
+ ctx.name = name;
+ DLListDoUntil ( list, false, find_pi_ref_callback, &ctx );
+ return ctx.res;
+}
+
+
+/* =================================================================================================== */
+
+typedef struct pi_window_cb_ctx
+{
+ window *w;
+ pi_window *res;
+} pi_window_cb_ctx;
+
+
+static bool CC find_pi_window_callback( DLNode *n, void *data )
+{
+ pi_window_cb_ctx *ctx = ( pi_window_cb_ctx * )data;
+ pi_window * pw = ( pi_window * ) n;
+ bool res = ( pw->w.first == ctx->w->first && pw->w.len == ctx->w->len );
+ if ( res )
+ ctx->res = pw;
+ return res;
+}
+
+
+static pi_window * find_pi_window( const DLList * list, window * w )
+{
+ pi_window_cb_ctx ctx;
+ ctx.res = NULL;
+ ctx.w = w;
+ DLListDoUntil ( list, false, find_pi_window_callback, &ctx );
+ return ctx.res;
+}
+
+
+/* =================================================================================================== */
+
+
+static rc_t make_pi_window( pi_window ** pw, DLList * list, window * w )
+{
+ rc_t rc = 0;
+ *pw = calloc( 1, sizeof ** pw );
+ if ( *pw == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ (*pw)->w.first = w->first;
+ (*pw)->w.len = w->len;
+ DLListInit( &( (*pw)->pi_entries ) );
+ DLListPushTail ( list, ( DLNode * )(*pw) );
+ }
+ return rc;
+}
+
+
+static rc_t add_to_pi_window( pi_window * pw, PlacementIterator *pi )
+{
+ rc_t rc = 0;
+ pi_entry * pie = calloc( 1, sizeof *pie );
+ if ( pie == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ pie->pi = pi; /* store the placement-iterator in it's entry-struct */
+ rc = PlacementIteratorNextAvailPos ( pi, &(pie->nxt_avail.first), &(pie->nxt_avail.len) );
+ if ( rc == 0 )
+ {
+ PlacementIteratorAddRef ( pi );
+ DLListPushTail ( &pw->pi_entries, ( DLNode * )pie );
+ }
+ else
+ {
+ free( pie );
+ ALIGN_DBG( "PlacementIter has no placements...", 0 );
+ }
+ }
+ return rc;
+}
+
+
+/* =================================================================================================== */
+
+
+static rc_t make_pi_ref( pi_ref ** pr, DLList * list, const char * name )
+{
+ rc_t rc = 0;
+ *pr = calloc( 1, sizeof ** pr );
+ if ( *pr == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ (*pr)->name = string_dup_measure ( name, NULL );
+ DLListInit( &( (*pr)->pi_windows ) );
+ DLListPushTail ( list, ( DLNode * )(*pr) );
+ }
+ return rc;
+}
+
+
+static rc_t add_to_pi_ref( pi_ref * pr, window * w, PlacementIterator *pi )
+{
+ rc_t rc = 0;
+ pi_window * pw = find_pi_window( &pr->pi_windows, w );
+
+ if ( pw == NULL )
+ rc = make_pi_window( &pw, &pr->pi_windows, w );
+ if ( rc == 0 )
+ rc = add_to_pi_window( pw, pi );
+
+ if ( rc == 0 )
+ {
+ /* keep track of the outer window... */
+ if ( DLListHead( &pr->pi_windows ) == NULL )
+ {
+ /* first window ?*/
+ pr->outer.first = w->first;
+ pr->outer.len = w->len;
+ }
+ else
+ {
+ if ( w->first < pr->outer.first )
+ pr->outer.first = w->first;
+ if ( w->first + w->len > pr->outer.first + pr->outer.len )
+ pr->outer.len = ( ( w->first + w->len ) - pr->outer.first ) + 1;
+ }
+ }
+ return rc;
+}
+
+
+/* =================================================================================================== */
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorAddPlacementIterator ( PlacementSetIterator *self,
+ PlacementIterator *pi )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+ else
+ {
+ if ( pi == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+ else
+ {
+ const char * name; /* what reference are we aligning against */
+ window w; /* where does the pi start/end, against said reference */
+
+ /* to find the name of the reference used, important for adding the iterator */
+ rc = PlacementIteratorRefWindow ( pi, &name, &(w.first), &(w.len) );
+ if ( rc == 0 )
+ {
+ pi_ref * pr = find_pi_ref( &self->pi_refs, name );
+ /* if we do not have a pi_ref yet with this name: make one! */
+ if ( pr == NULL )
+ rc = make_pi_ref( &pr, &self->pi_refs, name );
+ /* add the placement-iterator to the newly-made or existing pi_ref! */
+ if ( rc == 0 )
+ rc = add_to_pi_ref( pr, &w, pi );
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorAddRef ( const PlacementSetIterator *cself )
+{
+ rc_t rc = 0;
+ if ( cself == NULL )
+ rc = RC( rcAlign, rcIterator, rcAttaching, rcSelf, rcNull );
+ else
+ {
+ if ( KRefcountAdd( &cself->refcount, "PlacementSetIterator" ) != krefOkay )
+ {
+ rc = RC( rcAlign, rcIterator, rcAttaching, rcError, rcUnexpected );
+ }
+ }
+ return rc;
+}
+
+
+/* =================================================================================================== */
+
+
+static void CC pi_entry_whacker( DLNode *n, void *data )
+{
+ pi_entry * pie = ( pi_entry * )n;
+ PlacementIteratorRelease ( pie->pi );
+ free( pie );
+}
+
+static void CC pi_window_whacker( DLNode *n, void *data )
+{
+ pi_window * pw = ( pi_window * )n;
+ DLListWhack ( &pw->pi_entries, pi_entry_whacker, NULL );
+ free( pw );
+}
+
+static void CC pi_ref_whacker( DLNode *n, void *data )
+{
+ pi_ref * pr = ( pi_ref * )n;
+ DLListWhack ( &pr->pi_windows, pi_window_whacker, NULL );
+ free( pr->name );
+ free( pr );
+}
+
+
+static void pl_set_iter_clear_curr_ref_window( PlacementSetIterator *self )
+{
+ if ( self->current_window != NULL )
+ {
+ pi_window_whacker( (DLNode *)self->current_window, NULL );
+ self->current_window = NULL;
+ }
+}
+
+
+static void pl_set_iter_clear_curr_ref( PlacementSetIterator *self )
+{
+ if ( self->current_ref != NULL )
+ {
+ pi_ref_whacker( (DLNode *)self->current_ref, NULL );
+ self->current_ref = NULL;
+ }
+}
+
+/* =================================================================================================== */
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorRelease ( const PlacementSetIterator *cself )
+{
+ rc_t rc = 0;
+ if ( cself == NULL )
+ rc = RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+ else
+ {
+ if ( KRefcountDrop( &cself->refcount, "PlacementSetIterator" ) == krefWhack )
+ {
+ PlacementSetIterator * self = ( PlacementSetIterator * ) cself;
+
+ pl_set_iter_clear_curr_ref_window( self );
+ pl_set_iter_clear_curr_ref( self );
+
+ /* release the DLList of pi-ref's and the pi's in it... */
+ DLListWhack ( &self->pi_refs, pi_ref_whacker, NULL );
+
+ AlignMgrRelease ( self->amgr );
+
+ free( self );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextReference ( PlacementSetIterator *self,
+ INSDC_coord_zero *first_pos, INSDC_coord_len *len, struct ReferenceObj const ** refobj )
+{
+ rc_t rc = 0;
+ if ( refobj != NULL ) { *refobj = NULL; }
+
+ if ( self == NULL )
+ return RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+
+ pl_set_iter_clear_curr_ref_window( self );
+ pl_set_iter_clear_curr_ref( self );
+ self->current_entry = NULL; /* what is the current pi-entry, we are handling ? */
+
+ /* !!! here we are taking the next reference from the top of the list */
+ self->current_ref = ( pi_ref * )DLListPopHead ( &self->pi_refs );
+
+ if ( self->current_ref == NULL )
+ {
+ return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+
+ if ( first_pos != NULL ) *first_pos = self->current_ref->outer.first;
+ if ( len != NULL) *len = self->current_ref->outer.len;
+
+ /* if the caller wants to know the ref-obj... */
+ if ( refobj != NULL )
+ {
+ pi_window *pw = ( pi_window * )DLListHead( &(self->current_ref->pi_windows) );
+ if ( pw != NULL )
+ {
+ pi_entry * pie = ( pi_entry * )DLListHead( &(pw->pi_entries) );
+ if ( pie != NULL )
+ {
+ rc = PlacementIteratorRefObj( pie->pi, refobj );
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextWindow ( PlacementSetIterator *self,
+ INSDC_coord_zero *first_pos, INSDC_coord_len *len )
+{
+ rc_t rc = 0;
+ if ( first_pos != NULL ) { *first_pos = 0; }
+ if ( len != NULL ) { *len = 0; }
+
+ if ( self == NULL )
+ return RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+
+ self->current_entry = NULL; /* what is the current pi-entry, we are handling ? */
+
+ if ( self->current_ref == NULL )
+ {
+ return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+
+ pl_set_iter_clear_curr_ref_window( self );
+
+ /* !!! here we are taking the next window from the top of the list */
+ self->current_window = ( pi_window * )DLListPopHead ( &(self->current_ref->pi_windows) );
+
+ /* check if we have reached the last window on this reference... */
+ if ( self->current_window == NULL )
+ {
+ return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+
+ /* point to the first entry in this window... */
+ self->current_entry = ( pi_entry * )DLListHead( &(self->current_window->pi_entries) );
+
+ /* if the caller wants to know first_pos / len */
+ if ( first_pos != NULL )
+ {
+ *first_pos = self->current_window->w.first;
+ }
+ if ( len != NULL )
+ {
+ *len = self->current_window->w.len;
+ }
+
+ return rc;
+}
+
+typedef struct pi_ref_nxt_avail_pos_ctx
+{
+ uint32_t count;
+ INSDC_coord_zero min_pos;
+ INSDC_coord_len min_len;
+ bool min_pos_initialized;
+ rc_t rc;
+} pi_ref_nxt_avail_pos_ctx;
+
+static void CC nxt_avail_pos_cb( DLNode * n, void * data )
+{
+ pi_ref_nxt_avail_pos_ctx * ctx = ( pi_ref_nxt_avail_pos_ctx * ) data;
+ if ( ctx->rc == 0 )
+ {
+ pi_entry * pie = ( pi_entry * )n;
+ rc_t rc = PlacementIteratorNextAvailPos ( pie->pi, &(pie->nxt_avail.first), &(pie->nxt_avail.len) );
+ if ( rc == 0 )
+ {
+/* OUTMSG(( "nxt_avail.first=%u w.last=%u\n", pie->nxt_avail.first, pie->w.last )); */
+ ( ctx->count )++;
+ if ( ctx->min_pos_initialized )
+ {
+ if ( pie->nxt_avail.first < ctx->min_pos )
+ {
+ ctx->min_pos = pie->nxt_avail.first;
+ ctx->min_len = pie->nxt_avail.len;
+ }
+ }
+ else
+ {
+ ctx->min_pos = pie->nxt_avail.first;
+ ctx->min_len = pie->nxt_avail.len;
+ ctx->min_pos_initialized = true;
+ }
+ }
+ else
+ {
+ if ( GetRCState( rc ) != rcDone )
+ ctx->rc = rc;
+ }
+ }
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextAvailPos ( const PlacementSetIterator *cself,
+ INSDC_coord_zero *pos, INSDC_coord_len *len )
+{
+ rc_t rc = 0;
+ if ( cself == NULL )
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ if ( pos == NULL )
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcParam, rcNull );
+ else
+ {
+ PlacementSetIterator *self = ( PlacementSetIterator * )cself;
+ if ( self->current_ref == NULL || self->current_window == NULL )
+ {
+ rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+ else
+ {
+ /* loop through all the pi_entry int the current_pi_ref */
+ pi_ref_nxt_avail_pos_ctx ctx;
+ ctx.count = 0;
+ ctx.rc = 0;
+ ctx.min_pos = 0;
+ ctx.min_len = 0;
+ ctx.min_pos_initialized = false;
+ DLListForEach ( &(self->current_window->pi_entries),
+ false, nxt_avail_pos_cb, &ctx );
+ rc = ctx.rc;
+ if ( ctx.count == 0 )
+ {
+ rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+ else
+ {
+ *pos = ctx.min_pos;
+ if ( len != NULL )
+ {
+ *len = ctx.min_len;
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextRecordAt ( PlacementSetIterator *self,
+ INSDC_coord_zero pos, const PlacementRecord **rec )
+{
+ rc_t rc = 0;
+ pi_window * pw;
+ bool done;
+
+ if ( rec == NULL )
+ return RC( rcAlign, rcIterator, rcAccessing, rcParam, rcNull );
+ *rec = NULL;
+ if ( self == NULL )
+ return RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+ if ( self->current_ref == NULL )
+ {
+ /* no more reference to iterator over! the iterator is done! */
+ return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+ if ( self->current_window == NULL )
+ {
+ /* no more windows to iterator over! the iterator is done! */
+ return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+
+ pw = self->current_window;
+ done = false;
+ do
+ {
+ if ( self->current_entry == NULL )
+ {
+ self->current_entry = ( pi_entry * )DLListHead( &(pw->pi_entries) );
+ }
+ done = ( self->current_entry == NULL );
+ rc = ( done ? SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone ) : 0 );
+ if ( rc == 0 )
+ {
+ rc = PlacementIteratorNextRecordAt ( self->current_entry->pi, pos, rec );
+ done = ( GetRCState( rc ) != rcDone );
+ if ( !done )
+ {
+ self->current_entry = ( pi_entry * )DLNodeNext( ( DLNode * )self->current_entry );
+ done = ( self->current_entry == NULL );
+ rc = ( done ? SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone ) : 0 );
+ }
+ }
+ } while ( !done );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextIdAt ( PlacementSetIterator *self,
+ INSDC_coord_zero pos, int64_t *row_id, INSDC_coord_len *len )
+{
+ const PlacementRecord *rec;
+ rc_t rc = PlacementSetIteratorNextRecordAt ( self, pos, &rec );
+ if ( rc == 0 )
+ {
+ if ( row_id != NULL ) *row_id = rec->id;
+ if ( len != NULL ) *len = rec->len;
+ }
+ return rc;
+}
diff --git a/libs/align/quality-quantizer.c b/libs/align/quality-quantizer.c
new file mode 100644
index 0000000..15205ca
--- /dev/null
+++ b/libs/align/quality-quantizer.c
@@ -0,0 +1,105 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <stdint.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <klib/defs.h>
+#include <align/quality-quantizer.h>
+
+LIB_EXPORT
+bool CC QualityQuantizerInitMatrix(uint8_t dst[256], char const quant[])
+{
+ unsigned i = 0;
+ unsigned limit = 0;
+ unsigned value = 0;
+ unsigned cur;
+ int ws = 1;
+ int st = 0;
+
+ memset(dst, 0, 256);
+ for (cur = 0; quant[cur] != 0; ++cur) {
+ int const ch = quant[cur];
+
+ if (ws) {
+ if (isspace(ch))
+ continue;
+ ws = false;
+ }
+ switch (st) {
+ case 0:
+ if (isdigit(ch)) {
+ value = (value * 10) + ch - '0';
+ break;
+ }
+ else if (isspace(ch)) {
+ ++st;
+ ws = true;
+ break;
+ }
+ ++st;
+ /* no break */
+ case 1:
+ if (ch != ':')
+ return false;
+ ws = true;
+ ++st;
+ break;
+ case 2:
+ if (isdigit(ch)) {
+ limit = (limit * 10) + ch - '0';
+ break;
+ }
+ else if (isspace(ch)) {
+ ++st;
+ ws = true;
+ break;
+ }
+ else if (ch == '-' && limit == 0) {
+ memset(dst + i, value, 256 - i);
+ return true;
+ }
+ ++st;
+ /* no break */
+ case 3:
+ if (ch != ',')
+ return false;
+ ws = true;
+ st = 0;
+ if (i > limit)
+ return false;
+ /* set from dst[i..(limit - 1)] = value
+ * not inclusive of the endpoint
+ */
+ memset(dst + i, value, limit - i);
+ i = limit;
+ limit = value = 0;
+ break;
+ }
+ }
+ return false;
+}
diff --git a/libs/align/reader-cmn.c b/libs/align/reader-cmn.c
index c147563..607ac09 100644
--- a/libs/align/reader-cmn.c
+++ b/libs/align/reader-cmn.c
@@ -26,6 +26,7 @@
#include <klib/rc.h>
#include <vdb/table.h>
#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
#include "reader-cmn.h"
#include "debug.h"
@@ -34,98 +35,283 @@
#include <stdlib.h>
#include <string.h>
-struct TableReader {
- const VTable* tbl;
+struct TableReader
+{
const VCursor* curs;
const TableReaderColumn* cols;
int64_t curr;
};
-rc_t CC TableReader_Make(const TableReader** cself, const VTable* table, TableReaderColumn* cols, size_t cache)
+
+rc_t CC TableReader_Make( const TableReader** cself, const VTable* table,
+ TableReaderColumn* cols, size_t cache )
+{
+ rc_t rc = 0;
+ const VCursor* curs;
+
+ if ( table == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcInvalid );
+ }
+ else
+ {
+ rc = VTableCreateCachedCursorRead( table, &curs, cache );
+ if ( rc == 0 )
+ {
+ rc = TableReader_MakeCursor( cself, curs, cols );
+ VCursorRelease( curs );
+ }
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+rc_t CC TableReader_MakeCursor( const TableReader** cself, const VCursor* cursor,
+ TableReaderColumn* cols )
{
rc_t rc = 0;
TableReader* obj = NULL;
- if( cself == NULL || table == NULL || cols == NULL || cols->name == NULL ) {
- rc = RC(rcAlign, rcType, rcConstructing, rcParam, rcInvalid);
- } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
- rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
- } else {
- obj->tbl = table;
- VTableAddRef(table);
- obj->cols = cols;
- if( (rc = VTableCreateCachedCursorRead(obj->tbl, &obj->curs, cache)) == 0 ) {
- while(cols->name != NULL) {
- if( !(cols->flags & ercol_Skip) ) {
- if( (rc = VCursorAddColumn(obj->curs, &cols->idx, cols->name)) != 0) {
- if( GetRCState(rc) == rcNotFound && (cols->flags & ercol_Optional) ) {
+ if ( cself == NULL || cursor == NULL || cols == NULL || cols->name == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcInvalid );
+ }
+ else if ( ( obj = calloc( 1, sizeof( *obj ) ) ) == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ rc = VCursorAddRef( cursor );
+ if ( rc == 0 )
+ {
+ obj->curs = cursor;
+/* obj->cursor_open = false; */
+ obj->cols = cols;
+ while ( rc == 0 && cols->name != NULL)
+ {
+ if ( !( cols->flags & ercol_Skip ) )
+ {
+ rc = VCursorAddColumn( obj->curs, &cols->idx, cols->name );
+ if ( rc != 0 )
+ {
+ if ( ( rc != 0 && ( cols->flags & ercol_Optional ) ) || GetRCState( rc ) == rcExists )
+ {
rc = 0;
}
+ else
+ {
+ ALIGN_DBGERRP( "cannot add column '%s' to cursor", rc, cols->name );
+ }
}
}
cols++;
}
- if( rc == 0 ) {
- rc = VCursorOpen(obj->curs);
+ if ( rc == 0 )
+ {
+ rc = VCursorOpen( obj->curs );
}
}
}
- if( rc == 0 ) {
+
+
+ if( rc == 0 )
+ {
*cself = obj;
- ALIGN_DBG("ok%c", '!');
- } else {
- TableReader_Whack(obj);
- ALIGN_DBGERRP("table", rc, 0);
+/* ALIGN_DBG("ok%c", '!'); */
+ }
+ else
+ {
+ TableReader_Whack( obj );
+ ALIGN_DBGERRP( "TableReader_MakeCursor() failed", rc, 0 );
}
return rc;
}
-void CC TableReader_Whack(const TableReader* cself)
+
+void CC TableReader_Whack( const TableReader* cself )
{
- if( cself != NULL ) {
- VCursorRelease(cself->curs);
- VTableRelease(cself->tbl);
- free((TableReader*)cself);
+ if ( cself != NULL )
+ {
+ VCursorRelease( cself->curs );
+ free( ( TableReader* ) cself );
}
}
-rc_t CC TableReader_ReadRow(const TableReader* cself, int64_t rowid)
+/*
+rc_t CC TableReader_OpenCursor( const TableReader* cself )
+{
+ TableReader * tr = ( TableReader * )cself;
+ VCursor * curs = ( VCursor * )tr->curs;
+ rc_t rc = VCursorOpen( curs );
+ tr->cursor_open = ( rc == 0 );
+ return rc;
+}
+*/
+
+rc_t CC TableReader_ReadRow( const TableReader* cself, int64_t rowid )
{
rc_t rc = 0;
TableReaderColumn* c = NULL;
- if( cself == NULL ) {
+ if ( cself == NULL )
+ {
rc = RC(rcAlign, rcType, rcOpening, rcSelf, rcNull);
- } else if( cself->curr != rowid &&
- (rc = VCursorCloseRow(cself->curs)) == 0 &&
- (rc = VCursorSetRowId(cself->curs, rowid)) == 0 &&
- (rc = VCursorOpenRow(cself->curs)) == 0 ) {
- uint32_t boff = 0;
- c = (TableReaderColumn*)(cself->cols);
- while(c->name != NULL) {
- if (c->idx != 0) {
- rc = VCursorCellData(cself->curs, c->idx, NULL, (const void**)&c->base, &boff, &c->len);
- if (rc) {
- if (c->flags & ercol_Optional) {
- rc = 0;
+ }
+ else if ( cself->curr != rowid )
+ {
+/*
+ if ( !cself->cursor_open )
+ rc = TableReader_OpenCursor( cself );
+*/
+ if ( rc == 0 )
+ {
+ rc = VCursorCloseRow( cself->curs );
+ if ( rc == 0 )
+ {
+ rc = VCursorSetRowId( cself->curs, rowid );
+ if ( rc == 0 )
+ {
+ rc = VCursorOpenRow( cself->curs );
+ if ( rc == 0 )
+ {
+ uint32_t boff = 0;
+ c = ( TableReaderColumn* )( cself->cols );
+ while ( c->name != NULL )
+ {
+ if ( c->idx != 0 )
+ {
+ /* TBD - FIX ME
+ this can be dangerous, since VCursorCellData
+ can cause cache flushes, invalidating previous
+ reads. THESE MUST BE FETCHED UPON DEMAND, NOT
+ PREFETCHED!!
+ */
+ rc = VCursorCellData( cself->curs, c->idx, NULL, (const void**)&c->base.var, &boff, &c->len );
+ if ( rc != 0 )
+ {
+ if ( c->flags & ercol_Optional )
+ rc = 0;
+ c->base.var = NULL;
+ c->len = 0;
+ }
+ else if ( boff != 0 )
+ {
+ rc = RC( rcAlign, rcType, rcReading, rcData, rcUnsupported );
+ }
+ }
+ c++;
+ }
}
}
- else if (boff != 0) {
- rc = RC(rcAlign, rcType, rcReading, rcData, rcUnsupported);
- }
}
- c++;
}
}
- if( rc != 0 ) {
- ALIGN_DBGERRP("column %s row %ld", rc, c ? c->name : "<none>", rowid);
- } else {
- ((TableReader*)cself)->curr = rowid;
+
+ if ( rc != 0 )
+ {
+ ALIGN_DBGERRP( "column %s row %ld", rc, c ? c->name : "<none>", rowid );
+ }
+ else
+ {
+ ( ( TableReader* )cself )->curr = rowid;
}
return rc;
}
-rc_t CC TableReader_IdRange(const TableReader* cself, int64_t* first, uint64_t* count)
+
+rc_t CC TableReader_IdRange( const TableReader* cself, int64_t* first, uint64_t* count )
+{
+ rc_t rc = 0;
+ if ( cself == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcRetrieving, rcSelf, rcNull );
+ }
+ else
+ {
+/*
+ if ( !cself->cursor_open )
+ rc = TableReader_OpenCursor( cself );
+ if ( rc == 0 )
+*/
+ rc = VCursorIdRange( cself->curs, 0, first, count );
+ }
+ return rc;
+}
+
+
+rc_t CC TableReader_OpenIndex( const TableReader* cself, const char* name, const KIndex** idx )
+{
+ rc_t rc = 0;
+
+ if ( cself == NULL || name == NULL || idx == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcNull );
+ }
+ else
+ {
+/*
+ if ( !cself->cursor_open )
+ rc = TableReader_OpenCursor( cself );
+ if ( rc == 0 )
+ {
+*/
+ const VTable* tbl;
+ rc = VCursorOpenParentRead( cself->curs, &tbl );
+ if ( rc == 0 )
+ {
+ rc = VTableOpenIndexRead( tbl, idx, name );
+ VTableRelease( tbl );
+ }
+/* } */
+ }
+ return rc;
+}
+
+
+rc_t CC TableReader_PageIdRange( const TableReader *cself, int64_t rowid,
+ int64_t *pfirst, int64_t *plast )
{
- return VCursorIdRange(cself->curs, 0, first, count);
+ rc_t rc = 0;
+
+ if ( cself == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcOpening, rcSelf, rcNull );
+ }
+ else
+ {
+/*
+ if ( !cself->cursor_open )
+ rc = TableReader_OpenCursor( cself );
+ if ( rc == 0 )
+ {
+*/
+ if ( pfirst != NULL || plast != NULL )
+ {
+ int64_t first = INT64_MAX;
+ int64_t last = INT64_MIN;
+ unsigned i;
+
+ for ( i = 0; cself->cols[ i ].name != NULL; ++i )
+ {
+ if ( cself->cols[i].idx != 0 )
+ {
+ int64_t tfirst;
+ int64_t tlast;
+
+ rc = VCursorPageIdRange( cself->curs, cself->cols[ i ].idx, rowid, &tfirst, &tlast );
+ if ( rc == 0 )
+ {
+ if ( first > tfirst ) { first = tfirst; }
+ if ( last < tlast ) { last = tlast; }
+ }
+ }
+ }
+ if ( pfirst != NULL ) { *pfirst = first; }
+ if ( plast != NULL ) { *plast = last; }
+ }
+/* } */
+ }
+ return rc;
}
diff --git a/libs/align/reader-cmn.h b/libs/align/reader-cmn.h
index 840d090..3310999 100644
--- a/libs/align/reader-cmn.h
+++ b/libs/align/reader-cmn.h
@@ -26,8 +26,8 @@
#ifndef _h_align_reader_cmn_
#define _h_align_reader_cmn_
-#include <vdb/manager.h>
-#include <vdb/database.h>
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
enum TableReaderColumn_Array {
ercol_Optional = 0x01,
@@ -38,7 +38,24 @@ enum TableReaderColumn_Array {
typedef struct TableReaderColumn_struct {
uint32_t idx;
const char* name;
- const void* base;
+ union {
+ const void* var;
+ const char* str;
+ const bool* buul;
+ const uint8_t* u8;
+ const int16_t* i16;
+ const uint16_t* u16;
+ const int32_t* i32;
+ const uint32_t* u32;
+ const int64_t* i64;
+ const uint64_t* u64;
+ const INSDC_coord_one* coord1;
+ const INSDC_coord_zero* coord0;
+ const INSDC_coord_len* coord_len;
+ const INSDC_coord_val* coord_val;
+ const INSDC_SRA_xread_type* read_type;
+ const INSDC_SRA_read_filter* read_filter;
+ } base;
uint32_t len;
uint32_t flags;
} TableReaderColumn;
@@ -47,10 +64,18 @@ typedef struct TableReader TableReader;
rc_t CC TableReader_Make(const TableReader** cself, const VTable* table, TableReaderColumn* cols, size_t cache);
+rc_t CC TableReader_MakeCursor(const TableReader** cself, const VCursor* cursor, TableReaderColumn* cols );
+
+rc_t CC TableReader_OpenCursor( const TableReader* cself );
+
void CC TableReader_Whack(const TableReader* cself);
rc_t CC TableReader_ReadRow(const TableReader* cself, int64_t rowid);
rc_t CC TableReader_IdRange(const TableReader* cself, int64_t* first, uint64_t* count);
+rc_t CC TableReader_OpenIndex(const TableReader* cself, const char* name, const KIndex** idx);
+
+rc_t CC TableReader_PageIdRange(const TableReader *cself, int64_t rowid, int64_t *first, int64_t *last);
+
#endif /* _h_align_reader_cmn_ */
diff --git a/libs/align/reader-refseq.c b/libs/align/reader-refseq.c
index bb72a4b..0a29c53 100644
--- a/libs/align/reader-refseq.c
+++ b/libs/align/reader-refseq.c
@@ -26,14 +26,17 @@
#include <align/extern.h>
#include <klib/rc.h>
+#include <klib/text.h>
#include <insdc/insdc.h>
#include <vdb/manager.h>
#include <vdb/table.h>
+#include <vdb/cursor.h>
#include <align/reader-refseq.h>
#include <os-native.h>
#include <sysalloc.h>
#include "reader-cmn.h"
+#include "reference-cmn.h"
#include "debug.h"
#include <stdlib.h>
@@ -46,12 +49,11 @@
static const TableReaderColumn TableReaderRefSeq_cols[] =
{
/* order important, see code below! */
- {0, "(INSDC:dna:text)READ", NULL, 0, 0},
- {0, "(INSDC:4na:bin)READ", NULL, 0, ercol_Skip},
- {0, "QUALITY", NULL, 0, ercol_Skip | ercol_Optional},
- {0, "SEQ_START", NULL, 0, 0},
- {0, "SEQ_LEN", NULL, 0, 0},
- {0, NULL, NULL, 0, 0}
+ {0, "(INSDC:dna:text)READ", {NULL}, 0, 0},
+ {0, "(INSDC:4na:bin)READ", {NULL}, 0, ercol_Skip},
+ {0, "QUALITY", {NULL}, 0, ercol_Skip | ercol_Optional},
+ {0, "SEQ_LEN", {NULL}, 0, 0},
+ {0, NULL, {NULL}, 0, 0}
};
struct TableReaderRefSeq {
@@ -59,13 +61,12 @@ struct TableReaderRefSeq {
TableReaderColumn cols[sizeof(TableReaderRefSeq_cols)/sizeof(TableReaderRefSeq_cols[0])];
char seq_id[256];
uint32_t max_seq_len;
- uint64_t total_seq_len;
+ INSDC_coord_len total_seq_len;
bool circular;
bool has_md5;
uint8_t md5[16];
- const char** read;
- const INSDC_coord_one** seq_start;
- const INSDC_coord_len** seq_len;
+ const TableReaderColumn* read;
+ const TableReaderColumn* seq_len;
};
LIB_EXPORT rc_t CC TableReaderRefSeq_MakeTable(const TableReaderRefSeq** cself, const VDBManager* vmgr,
@@ -82,28 +83,34 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MakeTable(const TableReaderRefSeq** cself,
const TableReader* tmp;
TableReaderColumn static_cols[] = {
/* order important, see code below! */
- {0, "MAX_SEQ_LEN", NULL, 0, 0},
- {0, "SEQ_ID", NULL, 0, 0},
- {0, "TOTAL_SEQ_LEN", NULL, 0, 0},
- {0, "CIRCULAR", NULL, 0, 0},
- {0, "MD5", NULL, 0, ercol_Optional},
- {0, NULL, NULL, 0, 0}
+ {0, "MAX_SEQ_LEN", {NULL}, 0, 0},
+ {0, "SEQ_ID", {NULL}, 0, 0},
+ {0, "TOTAL_SEQ_LEN", {NULL}, 0, 0},
+ {0, "CIRCULAR", {NULL}, 0, 0},
+ {0, "MD5", {NULL}, 0, ercol_Optional},
+ {0, NULL, {NULL}, 0, 0}
};
if( (rc = TableReader_Make(&tmp, table, static_cols, 0)) == 0 ) {
if( (rc = TableReader_ReadRow(tmp, 1)) == 0 ) {
- self->max_seq_len = *((uint32_t*)(static_cols[0].base));
- self->total_seq_len = *((uint64_t*)(static_cols[2].base));
- if( static_cols[1].base != NULL ) {
- if( static_cols[1].len > sizeof(self->seq_id) - 1 ) {
- rc = RC(rcAlign, rcType, rcConstructing, rcBuffer, rcInsufficient);
- } else {
- strncpy(self->seq_id, static_cols[1].base, static_cols[1].len);
- self->seq_id[static_cols[1].len] = '\0';
+ self->max_seq_len = static_cols[0].base.u32[0];
+ self->total_seq_len = static_cols[2].base.u64[0];
+ if( self->total_seq_len != static_cols[2].base.u64[0] ) {
+ rc = RC(rcAlign, rcType, rcConstructing, rcData, rcOutofrange);
+ }
+ if( static_cols[1].base.var != NULL ) {
+ if ( static_cols[ 1 ].len > sizeof( self->seq_id ) - 1 )
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcBuffer, rcInsufficient );
+ }
+ else
+ {
+ string_copy( self->seq_id, ( sizeof self->seq_id ) - 1, static_cols[1].base.str, static_cols[1].len );
+ self->seq_id[ static_cols[ 1 ].len ] = '\0';
}
}
- self->circular = *((bool*)(static_cols[3].base));
- if( static_cols[4].base != NULL ) {
- memcpy(self->md5, static_cols[4].base, sizeof(self->md5));
+ self->circular = static_cols[3].base.buul[0];
+ if( static_cols[4].base.var != NULL ) {
+ memcpy(self->md5, static_cols[4].base.var, sizeof(self->md5));
self->has_md5 = true;
}
}
@@ -112,19 +119,18 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MakeTable(const TableReaderRefSeq** cself,
memcpy(self->cols, TableReaderRefSeq_cols, sizeof(TableReaderRefSeq_cols));
if( options & errefseq_4NA) {
- self->cols[0].flags = ercol_Skip;
- self->cols[1].flags = 0;
- self->read = (const char**)&(self->cols[1].base);
+ self->cols[0].flags |= ercol_Skip;
+ self->cols[1].flags &= ~ercol_Skip;
+ self->read = &self->cols[1];
} else {
- self->read = (const char**)&(self->cols[0].base);
+ self->read = &self->cols[0];
}
- self->seq_start = (const INSDC_coord_one**)&(self->cols[3].base);
- self->seq_len = (const INSDC_coord_len**)&(self->cols[4].base);
+ self->seq_len = &self->cols[3];
rc = TableReader_Make(&self->base, table, self->cols, cache);
}
if( rc == 0 ) {
*cself = self;
- ALIGN_DBG("table 0x%p opened 0x%p", table, self);
+ /* ALIGN_DBG("table 0x%p opened 0x%p", table, self); */
} else {
TableReaderRefSeq_Whack(self);
ALIGN_DBGERRP("table for 0x%p", rc, table);
@@ -145,7 +151,7 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MakePath(const TableReaderRefSeq** cself, c
VTableRelease(tbl);
}
if( rc == 0 ) {
- ALIGN_DBG("table %s opened 0x%p", path, *cself);
+ /* ALIGN_DBG("table %s opened 0x%p", path, *cself); */
} else {
ALIGN_DBGERRP("table for %s", rc, path);
}
@@ -155,7 +161,7 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MakePath(const TableReaderRefSeq** cself, c
LIB_EXPORT void CC TableReaderRefSeq_Whack(const TableReaderRefSeq* cself)
{
if( cself != NULL ) {
- ALIGN_DBG("table 0x%p closed", cself);
+ /* ALIGN_DBG("table 0x%p closed", cself); */
TableReader_Whack(cself->base);
free((TableReaderRefSeq*)cself);
}
@@ -168,13 +174,13 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_SeqId(const TableReaderRefSeq* cself, const
rc = RC(rcAlign, rcType, rcReading, rcParam, rcNull);
} else {
*id = cself->seq_id;
- *id_sz = strlen(cself->seq_id);
+ *id_sz = string_size(cself->seq_id);
}
ALIGN_DBGERR(rc);
return rc;
}
-LIB_EXPORT rc_t CC TableReaderRefSeq_SeqLength(const TableReaderRefSeq* cself, uint64_t* len)
+LIB_EXPORT rc_t CC TableReaderRefSeq_SeqLength(const TableReaderRefSeq* cself, INSDC_coord_len* len)
{
rc_t rc = 0;
if( cself == NULL || len == NULL ) {
@@ -210,8 +216,8 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MD5(const TableReaderRefSeq* cself, const u
return rc;
}
-LIB_EXPORT rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, int64_t offset, INSDC_coord_len len,
- INSDC_dna_text* buffer, INSDC_coord_len* written)
+LIB_EXPORT rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* written)
{
rc_t rc = 0;
@@ -219,33 +225,24 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, int64_
rc = RC(rcAlign, rcType, rcReading, rcParam, rcNull);
} else if( len == 0 ) {
*written = 0;
- } else if( !cself->circular && (offset < 0 || offset >= cself->total_seq_len) ) {
- rc = RC(rcAlign, rcType, rcReading, rcParam, rcOutofrange);
- } else {
+ } else if( (rc = ReferenceSeq_ReOffset(cself->circular, cself->total_seq_len, &offset)) == 0 ) {
INSDC_coord_len q = 0;
-
- if( offset < 0 ) {
- /* revert offset to positive */
- offset = cself->total_seq_len - ((-offset) % cself->total_seq_len);
- } else if( offset > cself->total_seq_len ) {
- offset %= cself->total_seq_len;
- }
*written = 0;
do {
int64_t rowid = offset / cself->max_seq_len + 1;
INSDC_coord_zero s = offset % cself->max_seq_len;
if( (rc = TableReader_ReadRow(cself->base, rowid)) == 0 ) {
- q = **(cself->seq_len) - s;
+ q = cself->seq_len->base.coord_len[0] - s;
if( q > len ) {
q = len;
}
- memcpy(&buffer[*written], *(cself->read) + s, q);
+ memcpy(&buffer[*written], cself->read->base.str + s, q);
*written += q;
offset += q;
len -= q;
}
/* SEQ_LEN < MAX_SEQ_LEN is last row unless it is CIRCULAR */
- if( (**(cself->seq_len) < cself->max_seq_len) ) {
+ if( cself->seq_len->base.coord_len[0] < cself->max_seq_len ) {
if( !cself->circular ) {
break;
}
diff --git a/libs/align/ref_iterator.c b/libs/align/ref_iterator.c
new file mode 100644
index 0000000..8d91afc
--- /dev/null
+++ b/libs/align/ref_iterator.c
@@ -0,0 +1,866 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <klib/text.h>
+#include <klib/out.h>
+#include <insdc/insdc.h>
+#include <align/reference.h>
+#include <align/iterator.h>
+#include <align/manager.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#define COL_READ "(INSDC:4na:bin)READ"
+#define COL_HAS_MISMATCH "(bool)HAS_MISMATCH"
+#define COL_HAS_REF_OFFSET "(bool)HAS_REF_OFFSET"
+#define COL_REF_OFFSET "(I32)REF_OFFSET"
+#define COL_READ_GROUP "(ascii)SEQ_SPOT_GROUP"
+
+
+typedef struct spot_group
+{
+ DLNode n; /* to have it in a DLList */
+ char * name; /* the name of the read-group, can be NULL */
+ size_t len; /* the length of the name */
+ DLList records; /* has list of PlacementRecords... */
+} spot_group;
+
+
+static rc_t make_spot_group( spot_group ** sg, DLList * list, const char * name, size_t len )
+{
+ rc_t rc = 0;
+ *sg = calloc( 1, sizeof ** sg );
+ if ( *sg == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ if ( len > 0 && name != NULL )
+ {
+ (*sg)->name = string_dup( name, len );
+ if ( (*sg)->name != NULL )
+ {
+ (*sg)->len = len;
+ }
+ }
+ /* if name is NULL, the spot-group is initialized with 0 via calloc() */
+ DLListInit( &( (*sg)->records ) );
+ DLListPushTail ( list, ( DLNode * )(*sg) );
+ }
+ return rc;
+}
+
+
+static void CC whack_the_placement_record( DLNode *n, void *data )
+{ PlacementRecordWhack ( ( PlacementRecord * )n ); }
+
+static void free_spot_group( spot_group *sg )
+{
+ if ( sg->name != NULL ) free( sg->name );
+ DLListWhack ( &sg->records, whack_the_placement_record, NULL );
+ free( sg );
+}
+
+
+static void CC whack_the_spot_group( DLNode *n, void *data )
+{ free_spot_group ( ( spot_group * )n ); }
+
+static void clear_spot_group_list( DLList * list )
+{
+ DLListWhack ( list, whack_the_spot_group, NULL );
+}
+
+
+typedef struct find_spot_group_cb_ctx
+{
+ const char * name;
+ size_t len;
+ spot_group *res;
+} find_spot_group_cb_ctx;
+
+
+static bool CC find_spot_group_callback( DLNode *n, void *data )
+{
+ find_spot_group_cb_ctx *ctx = ( find_spot_group_cb_ctx * )data;
+ spot_group * sg = ( spot_group * ) n;
+ bool res = false;
+
+ if ( ctx->name == NULL || sg->name == NULL )
+ {
+ res = true;
+ }
+ else
+ {
+ res = ( string_cmp ( sg->name, sg->len,
+ ctx->name, ctx->len,
+ ( sg->len < ctx->len ) ? ctx->len : sg->len ) == 0 );
+ }
+
+ if ( res )
+ {
+ ctx->res = sg;
+ }
+ return res;
+}
+
+static spot_group * find_spot_group( DLList * list, const char * name, size_t len )
+{
+ find_spot_group_cb_ctx ctx;
+ ctx.res = NULL;
+ ctx.name = name;
+ ctx.len = len;
+ DLListDoUntil ( list, false, find_spot_group_callback, &ctx );
+ return ctx.res;
+}
+
+static rc_t add_to_spot_groups( DLList * list, const PlacementRecord *rec )
+{
+ rc_t rc = 0;
+ spot_group * sg = find_spot_group( list, rec->spot_group, rec->spot_group_len );
+ if ( sg == NULL )
+ {
+ rc = make_spot_group( &sg, list, rec->spot_group, rec->spot_group_len );
+ }
+ if ( rc == 0 )
+ {
+ DLListPushTail ( &sg->records, ( DLNode * )(rec) );
+ }
+ return rc;
+}
+
+
+static uint32_t remove_invalid_records( const struct ReferenceObj * const refobj,
+ DLList * list, INSDC_coord_zero pos )
+{
+ uint32_t res = 0;
+ spot_group * sg = ( spot_group * )DLListHead( list );
+ while ( sg != NULL )
+ {
+ spot_group *nxt = ( spot_group * )DLNodeNext( ( DLNode * )sg );
+ PlacementRecord *rec = ( PlacementRecord * )DLListHead( &sg->records );
+ while ( rec != NULL )
+ {
+ PlacementRecord *nxt_rec = ( PlacementRecord * )DLNodeNext( ( DLNode * )rec );
+ INSDC_coord_zero end_pos = ( rec->pos + rec->len );
+ bool remove = ( end_pos <= pos );
+ if ( !remove )
+ {
+ AlignmentIterator * al_iter = PlacementRecordCast ( rec, placementRecordExtension0 );
+ int32_t state = AlignmentIteratorState ( al_iter, NULL );
+ remove = ( ( state & align_iter_invalid ) == align_iter_invalid );
+ }
+ if ( remove )
+ {
+ DLListUnlink ( &sg->records, ( DLNode * )rec );
+ PlacementRecordWhack ( rec );
+ }
+ else
+ {
+ res++;
+ }
+ rec = nxt_rec;
+ }
+ sg = nxt;
+ }
+ return res;
+}
+
+
+static void inc_alignment_iterators( DLList * list, INSDC_coord_zero pos )
+{
+ spot_group * sg = ( spot_group * )DLListHead( list );
+ while ( sg != NULL )
+ {
+ spot_group *nxt = ( spot_group * )DLNodeNext( ( DLNode * )sg );
+ PlacementRecord *rec = ( PlacementRecord * )DLListHead( &sg->records );
+ while ( rec != NULL )
+ {
+ PlacementRecord *nxt_rec = ( PlacementRecord * )DLNodeNext( ( DLNode * )rec );
+ AlignmentIterator * al_iter = PlacementRecordCast ( rec, placementRecordExtension0 );
+ if ( rec->pos <= pos && al_iter != NULL )
+ {
+ AlignmentIteratorNext ( al_iter );
+ }
+ rec = nxt_rec;
+ }
+ sg = nxt;
+ }
+}
+
+/* ======================================================================================== */
+
+
+struct ReferenceIterator
+{
+ KRefcount refcount;
+ struct AlignMgr const *amgr;
+
+ DLList spot_groups; /* has a list of spot-groups... */
+
+ int32_t min_mapq; /* has a minimum mapq-value... */
+ PlacementRecordExtendFuncs ext_func; /* has a struct with record-extension-functions from client*/
+ PlacementRecordExtendFuncs int_func; /* has a struct with record-extension-functions for itself*/
+
+ uint32_t depth; /* how many records are in the list */
+ INSDC_coord_zero current_pos; /* what is the current ref-position on the current ref. */
+ INSDC_coord_zero last_pos; /* what is the current ref-position on the current ref. */
+ INSDC_coord_zero nxt_avail_pos; /* what is the next available ref-position on the current ref. */
+ spot_group *current_spot_group; /* what is the next spot-group to be handled */
+ PlacementRecord *current_rec; /* the current-record at the current position */
+ bool need_init; /* do we need to init for the first next()-call */
+ PlacementSetIterator * pl_set_iter; /* holds a list of placement-iterators */
+ struct ReferenceObj const * refobj; /* cached result of ReferenceIteratorNextReference(...) */
+};
+
+
+LIB_EXPORT void CC RefIterRecordDestroy ( void *obj, void *data )
+{
+ /* nothing to do, because there are no sub-allocations etc. ... */
+}
+
+
+LIB_EXPORT rc_t CC RefIterRecordSize ( struct VCursor const *curs,
+ int64_t row_id, size_t * size, void *data )
+{
+ /* discover the size of the ref-iter-part to be allocated... */
+ return AlignIteratorRecordSize ( curs, row_id, size, data );
+}
+
+
+LIB_EXPORT rc_t CC RefIterRecordPopulate ( void *obj,
+ const PlacementRecord *placement, struct VCursor const *curs,
+ INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len, void *data )
+{
+ return AlignIteratorRecordPopulate ( obj, placement, curs, ref_window_start, ref_window_len, data );
+}
+
+
+static void CC RefIterDestroyRecPart( void *obj, void *data )
+{
+ AlignmentIterator *iter = ( AlignmentIterator * )obj;
+ if ( iter != NULL )
+ AlignmentIteratorRelease( iter );
+}
+
+LIB_EXPORT rc_t CC AlignMgrMakeReferenceIterator ( struct AlignMgr const *self,
+ ReferenceIterator **iter, const PlacementRecordExtendFuncs *ext_1, int32_t min_mapq )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+ else
+ {
+ if ( iter == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+ else
+ {
+ ReferenceIterator * refi = calloc( sizeof * refi, 1 );
+ if ( refi == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ KRefcountInit( &refi->refcount, 1, "ReferenceIterator", "Make", "align" );
+ refi->min_mapq = min_mapq;
+ if ( ext_1 != NULL )
+ {
+ refi->ext_func.data = ext_1->data;
+ refi->ext_func.destroy = ext_1->destroy;
+ refi->ext_func.populate = ext_1->populate;
+ refi->ext_func.alloc_size = ext_1->alloc_size;
+ refi->ext_func.fixed_size = ext_1->fixed_size;
+ }
+
+ refi->int_func.data = ( void * )self;
+ refi->int_func.destroy = RefIterDestroyRecPart;
+ refi->int_func.populate = RefIterRecordPopulate;
+ refi->int_func.alloc_size = RefIterRecordSize;
+
+ DLListInit( &(refi->spot_groups) );
+ rc = AlignMgrMakePlacementSetIterator ( self, &refi->pl_set_iter );
+ refi->need_init = true;
+ }
+
+ if ( rc == 0 )
+ rc = AlignMgrAddRef ( self );
+
+ if ( rc == 0 )
+ {
+ refi->amgr = self;
+ *iter = refi;
+ }
+ else
+ free( refi );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorAddRef ( const ReferenceIterator *self )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcAttaching, rcSelf, rcNull );
+ else
+ {
+ if ( KRefcountAdd( &self->refcount, "ReferenceIterator" ) != krefOkay )
+ {
+ rc = RC( rcAlign, rcIterator, rcAttaching, rcError, rcUnexpected );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorRelease ( const ReferenceIterator *cself )
+{
+ rc_t rc = 0;
+ if ( cself == NULL )
+ rc = RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+ else
+ {
+ if ( KRefcountDrop( &cself->refcount, "ReferenceIterator" ) == krefWhack )
+ {
+ ReferenceIterator * self = ( ReferenceIterator * ) cself;
+ /* we 'own' the records! - we have to destroy them, if some are left in here */
+ clear_spot_group_list( &self->spot_groups );
+ rc = PlacementSetIteratorRelease ( self->pl_set_iter );
+ AlignMgrRelease ( self->amgr );
+ free( self );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorAddPlacementIterator( ReferenceIterator *self,
+ PlacementIterator *pi )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+ else
+ {
+ if ( pi == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+ else
+ {
+ rc = PlacementSetIteratorAddPlacementIterator ( self->pl_set_iter, pi );
+ }
+ }
+ return rc;
+}
+
+
+#define ALIGN_COL_COUNT 4
+
+static const char * align_cols[ ALIGN_COL_COUNT ] =
+{ COL_REF_OFFSET, COL_HAS_REF_OFFSET, COL_HAS_MISMATCH, COL_READ };
+
+
+static rc_t prepare_align_cursor( struct VCursor const *align )
+{
+ rc_t rc = 0;
+ uint32_t i, throw_away_idx;
+
+ for ( i = 0; i < ALIGN_COL_COUNT && rc == 0; ++i ) {
+ rc =VCursorAddColumn ( align, &throw_away_idx, "%s", align_cols[ i ] );
+ if( GetRCState(rc) == rcExists ) {
+ rc = 0;
+ }
+ }
+
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorAddPlacements( ReferenceIterator *self,
+ struct ReferenceObj const *ref_obj, INSDC_coord_zero ref_pos, INSDC_coord_len ref_len,
+ struct VCursor const *ref, struct VCursor const *align, align_id_src ids,
+ const char * spot_group )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+ else
+ {
+ if ( ref_obj == NULL )
+ rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+ else
+ {
+ if ( align != NULL )
+ rc = prepare_align_cursor( align );
+
+ if ( rc == 0 )
+ {
+ PlacementIterator *pi;
+
+ rc = ReferenceObj_MakePlacementIterator ( ref_obj, &pi, ref_pos, ref_len, self->min_mapq,
+ ref, align, ids, &self->int_func, &self->ext_func, spot_group );
+ if ( rc == 0 )
+ {
+ rc = PlacementSetIteratorAddPlacementIterator ( self->pl_set_iter, pi );
+ if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+ }
+ }
+ /* if rc != 0 then ref_obj had NO AddRef inside ReferenceObj_MakePlacementIterator() ! */
+ if ( rc == 0 )
+ ReferenceObj_Release( ref_obj );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t fill_recordlist( ReferenceIterator *self, INSDC_coord_zero pos )
+{
+ rc_t rc;
+ do
+ {
+ const PlacementRecord *rec;
+ /* from the placement-set-iterator into our list... */
+ rc = PlacementSetIteratorNextRecordAt ( self->pl_set_iter, pos, &rec );
+ if ( rc == 0 )
+ {
+ if ( rec->pos == pos )
+ {
+ self->depth++;
+ rc = add_to_spot_groups( &self->spot_groups, rec );
+ }
+ else
+ PlacementRecordWhack ( rec );
+ }
+ } while( rc == 0 );
+
+ if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextReference ( ReferenceIterator *self,
+ INSDC_coord_zero *first_pos, INSDC_coord_len *len, struct ReferenceObj const ** refobj )
+{
+ rc_t rc = 0;
+
+ if ( refobj != NULL )
+ *refobj = NULL;
+
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ struct ReferenceObj const * robj;
+ rc = PlacementSetIteratorNextReference ( self->pl_set_iter, first_pos, len, &robj );
+ clear_spot_group_list( &self->spot_groups );
+ if ( rc == 0 )
+ {
+ /* cache the returned refobj in order to get to reference-bases later... */
+ self->refobj = robj;
+ self->need_init = true;
+ }
+ else
+ {
+ self->refobj = NULL;
+ }
+
+ if ( refobj != NULL )
+ {
+ *refobj = self->refobj;
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextWindow ( ReferenceIterator *self,
+ INSDC_coord_zero *first_pos, INSDC_coord_len *len )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ rc = PlacementSetIteratorNextWindow ( self->pl_set_iter, first_pos, len );
+ clear_spot_group_list( &self->spot_groups );
+ if ( rc == 0 )
+ {
+ self->need_init = true;
+ self->current_pos = *first_pos;
+ self->current_spot_group = NULL;
+ self->last_pos = self->current_pos + *len - 1;
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextSpotGroup ( ReferenceIterator *self,
+ const char ** name, size_t * len )
+{
+ rc_t rc = 0;
+
+ if ( self->current_spot_group == NULL )
+ {
+ self->current_spot_group = ( spot_group * )DLListHead( &self->spot_groups );
+ if ( self->current_spot_group == NULL )
+ {
+ rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+ }
+ else
+ {
+ spot_group *nxt = ( spot_group * )DLNodeNext( ( DLNode * ) self->current_spot_group );
+ if ( nxt == NULL )
+ {
+ rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+ else
+ {
+ self->current_spot_group = nxt;
+ }
+ }
+ self->current_rec = NULL;
+
+ if ( rc == 0 && self->current_spot_group != NULL )
+ {
+ if ( name != NULL )
+ {
+ *name = self->current_spot_group->name;
+ }
+ if ( len != NULL )
+ {
+ *len = self->current_spot_group->len;
+ }
+ }
+ return rc;
+}
+
+
+/* iterates the PlacementSetIterator forward to reach self->current_pos on the reference */
+static rc_t first_ref_iter_nxt_pos( ReferenceIterator *self, bool skip_empty )
+{
+ rc_t rc;
+ bool loop;
+ self->need_init = false;
+ do
+ {
+ rc = PlacementSetIteratorNextAvailPos ( self->pl_set_iter, &self->nxt_avail_pos, NULL );
+ loop = ( rc == 0 );
+ if ( loop )
+ {
+ loop = ( self->nxt_avail_pos <= self->current_pos );
+ if ( loop )
+ {
+ rc = fill_recordlist( self, self->nxt_avail_pos );
+ self->depth = remove_invalid_records( self->refobj, &self->spot_groups, self->nxt_avail_pos - 1 );
+ }
+ }
+ } while ( loop );
+
+ if ( skip_empty && self->nxt_avail_pos > self->current_pos && self->depth == 0 )
+ {
+ self->current_pos = self->nxt_avail_pos;
+ }
+ self->depth = remove_invalid_records( self->refobj, &self->spot_groups, self->current_pos );
+
+ if ( GetRCState( rc ) == rcDone ) rc = 0;
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextPos ( ReferenceIterator *self, bool skip_empty )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ self->current_rec = NULL;
+ if ( self->need_init )
+ {
+ rc = first_ref_iter_nxt_pos( self, skip_empty );
+ }
+ else
+ {
+ /* increment the current position */
+ self->current_pos++;
+
+ if ( self->current_pos <= self->last_pos )
+ {
+ /* jump over gaps, if requested ... */
+ if ( self->depth == 0 && skip_empty )
+ {
+ self->current_pos = self->nxt_avail_pos;
+ }
+
+ /* increment the internal alignment-iterator of every placement-record */
+ inc_alignment_iterators( &self->spot_groups, self->current_pos );
+
+ /* loop through the list to look if we have to remove records,
+ that do end before this new position */
+ self->depth = remove_invalid_records( self->refobj, &self->spot_groups, self->current_pos );
+
+ rc = fill_recordlist( self, self->current_pos );
+ if ( rc == 0 )
+ {
+ self->current_spot_group = NULL;
+ /* set our sights to the next position... */
+ rc = PlacementSetIteratorNextAvailPos ( self->pl_set_iter, &self->nxt_avail_pos, NULL );
+ if ( GetRCState( rc ) == rcDone )
+ {
+ if ( self->depth > 0 )
+ {
+ rc = 0;
+ }
+ else if ( !skip_empty )
+ {
+ if ( self->current_pos <= self->last_pos ) rc = 0;
+ }
+ }
+ }
+ }
+ else
+ {
+ rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ clear_spot_group_list( &self->spot_groups );
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorPosition ( const ReferenceIterator *self,
+ INSDC_coord_zero *pos, uint32_t * depth, INSDC_4na_bin * base )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ /* return position, many records our record-list, and the base at this position */
+ if ( pos != NULL )
+ {
+ *pos = self->current_pos;
+ }
+
+ if ( depth != NULL )
+ {
+ *depth = self->depth;
+ }
+
+ if ( base != NULL )
+ {
+ uint32_t written;
+ *base = 0;
+ /* problem! how to get the base if depth == 0 */
+ if ( self->current_rec != NULL )
+ {
+ rc = ReferenceObj_Read( self->current_rec->ref, self->current_pos, 1, base, &written );
+ }
+ else if ( self->refobj != NULL )
+ {
+ rc = ReferenceObj_Read( self->refobj, self->current_pos, 1, base, &written );
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextPlacement ( ReferenceIterator *self,
+ const PlacementRecord **rec )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ {
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+ }
+ else if ( rec == NULL )
+ {
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcParam, rcNull );
+ }
+ else
+ {
+ if ( self->current_spot_group == NULL )
+ {
+ rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+ else
+ {
+ if ( self->current_rec == NULL )
+ {
+ self->current_rec = ( PlacementRecord * )DLListHead( &self->current_spot_group->records );
+ }
+ else
+ {
+ self->current_rec = ( PlacementRecord * )DLNodeNext( ( DLNode * )self->current_rec );
+ }
+
+ if ( self->current_rec == NULL )
+ {
+ rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+ else
+ {
+ *rec = self->current_rec;
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorGetPlacement ( ReferenceIterator *self,
+ const PlacementRecord **rec )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ {
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+ }
+ else if ( rec == NULL )
+ {
+ rc = RC( rcAlign, rcIterator, rcAccessing, rcParam, rcNull );
+ }
+ else
+ {
+ if ( self->current_spot_group == NULL )
+ {
+ rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+ else
+ {
+ if ( self->current_rec != NULL )
+ {
+ /* remove the 'previous' current-rec! */
+ DLListPopHead ( &self->current_spot_group->records );
+ PlacementRecordWhack ( self->current_rec );
+ self->depth--;
+ self->current_rec = NULL;
+ }
+
+ self->current_rec = ( PlacementRecord * )DLListHead( &self->current_spot_group->records );
+ if ( self->current_rec == NULL )
+ {
+ rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+ }
+ else
+ {
+ *rec = self->current_rec;
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT int32_t CC ReferenceIteratorState ( const ReferenceIterator *self,
+ INSDC_coord_zero *seq_pos )
+{
+ int32_t res = align_iter_invalid;
+ if ( seq_pos != NULL )
+ {
+ *seq_pos = 0;
+ }
+ if ( self != NULL )
+ {
+ /* PlacementRecordCast returns NULL if self->current_rec is NULL */
+ AlignmentIterator * al_iter = PlacementRecordCast ( self->current_rec, placementRecordExtension0 );
+ if ( al_iter != NULL )
+ res = AlignmentIteratorState ( al_iter, seq_pos );
+ }
+ return res;
+}
+
+
+LIB_EXPORT uint32_t CC ReferenceIteratorBasesInserted ( const ReferenceIterator *self,
+ const INSDC_4na_bin **bases )
+{
+ uint32_t res = align_iter_invalid;
+ if ( bases != NULL )
+ {
+ *bases = NULL;
+ }
+ if ( self != NULL )
+ {
+ /* PlacementRecordCast returns NULL if self->current_rec is NULL */
+ AlignmentIterator * al_iter = PlacementRecordCast ( self->current_rec, placementRecordExtension0 );
+ if ( al_iter != NULL )
+ res = AlignmentIteratorBasesInserted( al_iter, bases );
+ }
+ return res;
+}
+
+
+LIB_EXPORT uint32_t CC ReferenceIteratorBasesDeleted ( const ReferenceIterator *self,
+ INSDC_coord_zero *pos, const INSDC_4na_bin **bases )
+{
+ uint32_t res = align_iter_invalid;
+ if ( bases != NULL )
+ {
+ *bases = NULL;
+ }
+ if ( self != NULL )
+ {
+ /* PlacementRecordCast returns NULL if self->current_rec is NULL */
+ AlignmentIterator * al_iter = PlacementRecordCast ( self->current_rec, placementRecordExtension0 );
+ if ( al_iter != NULL )
+ {
+ INSDC_coord_zero temp_pos;
+ res = AlignmentIteratorBasesDeleted( al_iter, &temp_pos );
+ if ( ( res & align_iter_invalid ) != align_iter_invalid )
+ {
+ if ( pos != NULL ) { *pos = temp_pos; }
+ /* where to get the reference-bases from ? PlacementRecord.ref ! */
+ if ( res > 0 && bases != NULL )
+ {
+ uint8_t * buffer = malloc( res );
+ if ( buffer != NULL )
+ {
+ INSDC_coord_len written;
+ rc_t rc = ReferenceObj_Read( self->current_rec->ref, temp_pos, res, buffer, &written );
+ if ( rc == 0 )
+ {
+ *bases = buffer;
+ }
+ }
+ }
+ }
+ }
+ }
+ return res;
+}
diff --git a/libs/align/reference-cmn.c b/libs/align/reference-cmn.c
new file mode 100644
index 0000000..59e7c3d
--- /dev/null
+++ b/libs/align/reference-cmn.c
@@ -0,0 +1,43 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <insdc/insdc.h>
+
+#include "reference-cmn.h"
+#include <sysalloc.h>
+
+rc_t CC ReferenceSeq_ReOffset(bool circular, INSDC_coord_len seq_len, INSDC_coord_zero* offset)
+{
+ if( !circular && (*offset < 0 || *offset >= seq_len) ) {
+ return RC(rcAlign, rcType, rcReading, rcOffset, rcOutofrange);
+ } else if( *offset < 0 ) {
+ *offset = seq_len - ((-(*offset)) % seq_len);
+ } else if( circular && *offset > seq_len ) {
+ *offset %= seq_len;
+ }
+ return 0;
+}
diff --git a/libs/align/reference-cmn.h b/libs/align/reference-cmn.h
new file mode 100644
index 0000000..76fac49
--- /dev/null
+++ b/libs/align/reference-cmn.h
@@ -0,0 +1,38 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was readten as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_align_reference_cmn_
+#define _h_align_reference_cmn_
+
+#include <klib/defs.h>
+
+/* Validates and adjusts offset for a RefSeq based on its attributes
+ * circular [IN]
+ * seq_len [IN]
+ * offset [IN,OUT] always be >= 0 upon return
+ */
+rc_t CC ReferenceSeq_ReOffset(bool circular, INSDC_coord_len seq_len, INSDC_coord_zero* offset);
+
+#endif /* _h_align_reference_cmn_ */
diff --git a/libs/align/reference.c b/libs/align/reference.c
new file mode 100644
index 0000000..553652b
--- /dev/null
+++ b/libs/align/reference.c
@@ -0,0 +1,1933 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was readten as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <insdc/insdc.h>
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/cursor.h>
+#include <vdb/table.h>
+#include <vdb/vdb-priv.h>
+#include <align/iterator.h>
+#include <align/reference.h>
+#include <align/refseq-mgr.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include "reader-cmn.h"
+#include "reference-cmn.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+/* This is a temporary define, used to test code to deal with
+ circular references and new means of tracking window end */
+
+enum EReferenceList_ColNames
+{
+ ereflst_cn_READ_dna,
+ ereflst_cn_READ_4na,
+ ereflst_cn_SEQ_LEN,
+ ereflst_cn_PRIMARY_ALIGNMENT_IDS,
+ ereflst_cn_SECONDARY_ALIGNMENT_IDS,
+ ereflst_cn_EVIDENCE_INTERVAL_IDS,
+ ereflst_cn_OVERLAP_REF_POS,
+ ereflst_cn_OVERLAP_REF_LEN
+};
+
+const TableReaderColumn ReferenceList_cols[] =
+{
+ { 0, "(INSDC:dna:text)READ", { NULL }, 0, 0 },
+ { 0, "(INSDC:4na:bin)READ", { NULL }, 0, ercol_Skip },
+ { 0, "SEQ_LEN", { NULL }, 0, 0 },
+ { 0, "PRIMARY_ALIGNMENT_IDS", { NULL }, 0, ercol_Skip },
+ { 0, "SECONDARY_ALIGNMENT_IDS", { NULL }, 0, ercol_Skip },
+ { 0, "EVIDENCE_INTERVAL_IDS", { NULL }, 0, ercol_Skip | ercol_Optional },
+ { 0, "OVERLAP_REF_POS", { NULL }, 0, ercol_Optional },
+ { 0, "OVERLAP_REF_LEN", { NULL }, 0, ercol_Optional },
+ { 0, NULL, { NULL }, 0, 0 }
+};
+
+enum EPlacementIterator_ColNames
+{
+ eplacementiter_cn_REF_POS,
+ eplacementiter_cn_REF_LEN,
+ eplacementiter_cn_MAPQ,
+ eplacementiter_cn_READ_GROUP
+};
+
+const TableReaderColumn PlacementIterator_cols[] =
+{
+ { 0, "REF_POS", { NULL }, 0, 0 },
+ { 0, "REF_LEN", { NULL }, 0, 0 },
+ { 0, "MAPQ", { NULL }, 0, 0 },
+ { 0, "SPOT_GROUP", { NULL }, 0, 0 },
+ { 0, NULL, { NULL }, 0, 0 }
+};
+
+struct ReferenceList
+{
+ KRefcount refcount;
+ const RefSeqMgr* refseqmgr;
+ const VCursor* cursor;
+ BSTree name_tree;
+ BSTree seqid_tree;
+ uint32_t options;
+ size_t cache;
+ uint32_t max_seq_len;
+ uint32_t nodes_qty;
+ uint32_t nodes_max_qty;
+ const TableReader* reader;
+ TableReaderColumn reader_cols[ sizeof( ReferenceList_cols ) / sizeof( ReferenceList_cols[ 0 ] ) ];
+ const TableReader* iter;
+ TableReaderColumn iter_cols[ sizeof( PlacementIterator_cols ) / sizeof( PlacementIterator_cols[ 0 ] ) ];
+ /* last are children using realloc!! */
+ ReferenceObj* nodes[ 2 ];
+};
+
+struct ReferenceObj
+{
+ /* we use this in 2 lists so we need to adjust results of Find, etc calls for name tree!! */
+ BSTNode by_seqid; /* primary key */
+ BSTNode by_name; /* struct addr will be by_name[-1]; */
+ ReferenceList* mgr;
+ uint32_t id;
+ uint32_t bin;
+ char* name;
+ char* seqid;
+ bool circular;
+ bool read_present;
+ int64_t start_rowid;
+ int64_t end_rowid;
+ INSDC_coord_len seq_len;
+};
+
+
+static int CC ReferenceObj_CmpSeqId( const void *item, const BSTNode *n )
+{
+ return strcasecmp( ( const char* )item, ( ( const ReferenceObj* )n )->seqid );
+}
+
+
+static int CC ReferenceObj_SortSeqId( const BSTNode *item, const BSTNode *n )
+{
+ return ReferenceObj_CmpSeqId( ( ( const ReferenceObj* )item )->seqid, n );
+}
+
+
+static int CC ReferenceObj_CmpName( const void *item, const BSTNode *n )
+{
+ return strcasecmp( ( const char* )item, ( ( const ReferenceObj* )&n[ -1 ] )->name );
+}
+
+
+static int CC ReferenceObj_SortName( const BSTNode *item, const BSTNode *n )
+{
+ return ReferenceObj_CmpName( ( ( const ReferenceObj* )&item[ -1 ] )->name, n );
+}
+
+static rc_t ReferenceObj_Alloc( ReferenceObj** self, const char* seqid, size_t seqid_sz,
+ const char* name, size_t name_sz)
+{
+ rc_t rc = 0;
+ if ( self == NULL || seqid == NULL || seqid_sz == 0 || name == NULL || name_sz == 0 )
+ {
+ rc = RC( rcAlign, rcIndex, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ ReferenceObj* obj = calloc( 1, sizeof( *obj ) + seqid_sz + 1 + name_sz + 1 );
+ if ( obj == NULL )
+ {
+ rc = RC( rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ obj->seqid = ( char* )&obj[ 1 ];
+ obj->name = obj->seqid;
+ obj->name += seqid_sz + 1;
+ memcpy( obj->seqid, seqid, seqid_sz );
+ obj->seqid[ seqid_sz ] = '\0';
+ memcpy( obj->name, name, name_sz );
+ obj->name[ name_sz ] = '\0';
+ *self = obj;
+ }
+ }
+ return rc;
+}
+
+
+/* helper function for ReferenceList_MakeCursor() */
+static rc_t ReferenceList_handle_filter( const KIndex* iname, const char * filt_name, uint32_t bin_size,
+ int64_t *start, int64_t tbl_start, uint64_t *count, int *bin_num,
+ TableReaderColumn *h, const TableReader* tmp )
+{
+ rc_t rc = 0;
+ if ( strncmp( filt_name, "START_ROW:", 10 ) )
+ {
+ if ( bin_size == 0 || strncmp( filt_name, "BIN_NUM:", 8 ) )
+ {
+ rc = KIndexFindText( iname, filt_name, start, count, NULL, NULL );
+ if( rc == 0 && bin_size > 0 )
+ {
+ /** change start to the beginning of the bin **/
+ *bin_num = ( *start - tbl_start ) / bin_size;
+ }
+ }
+ else
+ {
+ *bin_num = atoi( filt_name + 8 );
+ }
+ if ( bin_size > 0 )
+ {
+ *start = tbl_start + ( bin_size * (*bin_num) );
+ rc = TableReader_ReadRow( tmp, *start );
+ if ( rc == 0 )
+ {
+ int64_t r_start;
+ char name[ 4096 ];
+ if ( h[ 0 ].len < sizeof( name ) )
+ {
+ memcpy( name, h[ 0 ].base.str, h[ 0 ].len );
+ name[ h[ 0 ].len ] = '\0';
+ rc = KIndexFindText( iname, name, &r_start, count, NULL, NULL );
+ if ( rc == 0 && *start > r_start )
+ { /*** move start to the beginning of the fully contained sequence **/
+ *start = r_start + *count;
+ }
+ }
+ else
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcName, rcTooLong );
+ }
+ }
+ }
+ }
+ else
+ {
+ int64_t req_start = atoi( filt_name + 10 );
+ if ( req_start >= *start && req_start < *start + *count )
+ {
+ int64_t delta = req_start - *start;
+ *start = req_start;
+ *count -= delta;
+ }
+ else
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcId, rcOutofrange );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_MakeCursor( const ReferenceList** cself, const VCursor* cursor, uint32_t options,
+ const char* filt_name, const uint32_t numbins )
+{
+ rc_t rc = 0;
+ ReferenceList* self = NULL;
+
+ if ( cself == NULL || cursor == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else if ( ( self = calloc( 1, sizeof( *self ) ) ) == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ const TableReader* tmp = NULL;
+ uint32_t bin_size;
+ int bin_num = -1;
+ TableReaderColumn h[] =
+ {
+ { 0, "NAME", {NULL}, 0, 0 }, /*0*/
+ { 0, "SEQ_ID", {NULL}, 0, 0 }, /*1*/
+ { 0, "SEQ_LEN", {NULL}, 0, 0 }, /*2*/
+ { 0, "CIRCULAR", {NULL}, 0, 0 }, /*3*/
+ { 0, "MAX_SEQ_LEN", {NULL}, 0, 0 }, /*4*/
+ { 0, "SEQ_START", {NULL}, 0, 0 }, /*5*/
+ { 0, "CMP_READ", {NULL}, 0, 0 }, /*6*/
+ { 0, NULL, {NULL}, 0, 0 }
+ };
+ KRefcountInit( &self->refcount, 1, "ReferenceList", "Make", "align" );
+ BSTreeInit( &self->name_tree );
+ BSTreeInit( &self->seqid_tree );
+ self->options = options;
+ self->nodes_max_qty = sizeof( self->nodes ) / sizeof( self->nodes[ 0 ] );
+
+ rc = VCursorAddRef( self->cursor = cursor );
+ if ( rc == 0 )
+ {
+ rc = TableReader_MakeCursor( &tmp, cursor, h );
+ if ( rc == 0 )
+ {
+ int64_t start, tbl_start, tbl_stop;
+ uint64_t count;
+ const KIndex* iname = NULL;
+ bool only_one = false;
+
+ /* index is optional */
+ rc_t rctmp = TableReader_OpenIndex( tmp, "i_name", &iname );
+ ALIGN_DBGERRP( "index '%s' was not found", rctmp, "i_name" );
+
+ rc = TableReader_IdRange( tmp, &start, &count );
+ assert( rc == 0 );
+ tbl_start = start;
+ tbl_stop = start + count -1;
+ if ( numbins > 0 )
+ {
+ bin_size = ( count + numbins -1 ) / numbins;
+ }
+ else
+ {
+ bin_size = 0;
+ }
+
+ if ( iname && filt_name )
+ {
+ if ( bin_size == 0 )
+ {
+ only_one = true;
+ }
+ rc = ReferenceList_handle_filter( iname, filt_name, bin_size, &start, tbl_start,
+ &count, &bin_num, h, tmp );
+ }
+
+ if ( rc == 0 )
+ {
+ ReferenceObj* node = NULL;
+ uint32_t last_name_len = 0;
+ bool read_determination_done = false;
+
+ while ( rc == 0 && start <= tbl_stop )
+ {
+ if ( bin_num < 0 && count == 0 )
+ {
+ /*** normal loop without binning ***/
+ break;
+ }
+ rc = TableReader_ReadRow( tmp, start );
+ if ( rc == 0 )
+ {
+ if ( node == NULL || last_name_len != h[0].len ||
+ strncmp( h[ 0 ].base.str, node->name, h[ 0 ].len) != 0 )
+ {
+ uint32_t cur_bin = ( bin_size > 0 ) ? ( start-tbl_start ) / bin_size : 0;
+ if ( only_one && self->nodes_qty == 1 )
+ {
+ break;
+ }
+ if ( bin_num >= 0 && cur_bin != bin_num )
+ {
+ break;
+ }
+ if ( node == NULL && h[ 4 ].len > 0 )
+ {
+ self->max_seq_len = h[ 4 ].base.u32[ 0 ];
+ }
+ if ( self->nodes_qty == self->nodes_max_qty )
+ {
+ ReferenceList* tmp = realloc( self, sizeof( *self ) + sizeof( node ) * self->nodes_max_qty );
+ if ( tmp == NULL )
+ {
+ rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
+ }
+ else
+ {
+ self = tmp;
+ self->nodes_max_qty += sizeof( self->nodes ) / sizeof( self->nodes[ 0 ] );
+ }
+ }
+ if ( rc == 0 )
+ {
+ rc = ReferenceObj_Alloc( &node, h[ 1 ].base.str, h[ 1 ].len, h[ 0 ].base.str, h[ 0 ].len );
+ if ( rc == 0 )
+ {
+ node->id = self->nodes_qty;
+ self->nodes[ self->nodes_qty++ ] = node;
+ last_name_len = h[ 0 ].len;
+ node->circular = h[ 3 ].len ? h[ 3 ].base.buul[ 0 ] : false;
+ node->start_rowid = start;
+ node->seq_len = 0;
+ node->bin = cur_bin;
+ read_determination_done = false;
+ rc = BSTreeInsertUnique( &self->seqid_tree, &node->by_seqid, NULL, ReferenceObj_SortSeqId );
+ if ( rc == 0 )
+ {
+ rc = BSTreeInsertUnique( &self->name_tree, &node->by_name, NULL, ReferenceObj_SortName );
+ }
+ }
+ }
+ }
+ if ( rc == 0 )
+ {
+ INSDC_coord_len cur_seq_len = h[ 2 ].base.coord_len[ 0 ];
+ if ( cur_seq_len == 0 )
+ {
+ /* assign it to max-seq-len */
+ cur_seq_len = h[ 4 ].base.coord_len[ 0 ];
+ }
+
+ if ( h[ 6 ].len > 0 )
+ {/** CMP_READ > 0 -- truly local ***/
+ node->read_present = true;
+ read_determination_done = true;
+ }
+ else if ( h[ 5 ].base.coord1[ 0 ] != 0 )
+ { /*** truly remote ***/
+ node->read_present = false;
+ read_determination_done = true;
+ } /*** else still not sure **/
+
+ if ( read_determination_done && iname != NULL )
+ {
+ /* scroll to last row for this reference projecting the seq_len */
+ int64_t r_start;
+ uint64_t r_count;
+ if ( KIndexFindText( iname, node->name, &r_start, &r_count, NULL, NULL ) == 0 )
+ {
+ assert( node->start_rowid == r_start );
+ /* not last ref row */
+ if ( start != r_start + r_count - 1 )
+ {
+ /* we need to pickup last row SEQ_LEN for this reference
+ so we step back 2 rows in table from this ref end row
+ and also skip rows already scanned for read presence */
+ r_count -= ( start - r_start ) + 2;
+ node->seq_len += cur_seq_len * r_count;
+ start += r_count;
+ count -= r_count;
+ }
+ }
+ }
+ node->seq_len += cur_seq_len;
+ node->end_rowid = start;
+ }
+ }
+ else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+ {
+ rc = 0;
+ }
+ start++;
+ count--;
+ }
+ for ( start = 0; rc == 0 && start < self->nodes_qty; start++ )
+ {
+ self->nodes[ start ]->mgr = self;
+ }
+ if ( rc == 0 && self->max_seq_len == 0 )
+ {
+ rc = RC(rcAlign, rcType, rcConstructing, rcData, rcCorrupt);
+ }
+ }
+ KIndexRelease( iname );
+ }
+ }
+ TableReader_Whack( tmp );
+ }
+
+ if ( rc == 0 )
+ {
+ *cself = self;
+ /* ALIGN_DBG("created 0x%p with cursor 0x%p", self, cursor); */
+ }
+ else
+ {
+ *cself = NULL;
+ ReferenceList_Release( self );
+ /* ALIGN_DBGERRP( "failed for cursor 0x%p", rc, cursor ); */
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_MakeTable( const ReferenceList** cself, const VTable* table, uint32_t options,
+ size_t cache, const char* filt_name, const uint32_t numbins )
+{
+ rc_t rc = 0;
+ const VCursor* curs;
+
+ if ( table == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = VTableCreateCachedCursorRead( table, &curs, cache );
+ if ( rc == 0 )
+ {
+ rc = VCursorPermitPostOpenAdd( curs );
+ if ( rc == 0 )
+ {
+ rc = ReferenceList_MakeCursor( cself, curs, options, filt_name, numbins );
+ if ( rc == 0 )
+ {
+ ( (ReferenceList*)(*cself))->cache = cache;
+ }
+ VCursorRelease(curs);
+ }
+ }
+ }
+ ALIGN_DBGERRP( "failed for table 0x%p", rc, table );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_MakeDatabase( const ReferenceList** cself, const VDatabase* db, uint32_t options,
+ size_t cache, const char* name, const uint32_t numbins )
+{
+ rc_t rc = 0;
+ const VTable* tbl = NULL;
+ const char* nm = "REFERENCE";
+ /*const char* nm = (options & ereferencelist_useEvidence) ? "EVIDENCE_INTERVAL" : "REFERENCE";*/
+
+ if ( db == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = VDatabaseOpenTableRead( db, &tbl, nm );
+ if ( rc == 0 )
+ {
+ rc = ReferenceList_MakeTable( cself, tbl, options, cache, name, numbins );
+ VTableRelease( tbl );
+ }
+ }
+ ALIGN_DBGERRP( "failed for database 0x%p", rc, db );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_MakePath( const ReferenceList** cself, const VDBManager* vmgr, const char* dbpath,
+ uint32_t options, size_t cache, const char* name, const uint32_t numbins )
+{
+ rc_t rc = 0;
+ const VDatabase* db = NULL;
+
+ if ( vmgr == NULL || dbpath == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = VDBManagerOpenDBRead( vmgr, &db, NULL, "%s", dbpath );
+ if ( rc == 0 )
+ {
+ rc = ReferenceList_MakeDatabase( cself, db, options, cache, name, numbins );
+ VDatabaseRelease( db );
+ }
+ }
+ ALIGN_DBGERRP( "failed for database %s", rc, dbpath );
+ return rc;
+}
+
+
+static rc_t ReferenceList_OpenCursor( ReferenceList* self )
+{
+ rc_t rc = 0;
+
+ assert( self != NULL );
+
+ memcpy( self->reader_cols, ReferenceList_cols, sizeof( ReferenceList_cols ) );
+
+ if ( self->options & ereferencelist_4na )
+ {
+ self->reader_cols[ ereflst_cn_READ_dna ].flags |= ercol_Skip;
+ self->reader_cols[ ereflst_cn_READ_4na ].flags &= ~ercol_Skip;
+ }
+
+ if ( self->options & ereferencelist_usePrimaryIds )
+ {
+ self->reader_cols[ ereflst_cn_PRIMARY_ALIGNMENT_IDS ].flags &= ~ercol_Skip;
+ }
+
+ if ( self->options & ereferencelist_useSecondaryIds )
+ {
+ self->reader_cols[ ereflst_cn_SECONDARY_ALIGNMENT_IDS ].flags &= ~ercol_Skip;
+ }
+
+ if ( self->options & ereferencelist_useEvidenceIds )
+ {
+ self->reader_cols[ ereflst_cn_EVIDENCE_INTERVAL_IDS ].flags &= ~ercol_Skip;
+ }
+
+ if ( !( self->options &
+ ( ereferencelist_usePrimaryIds | ereferencelist_useSecondaryIds | ereferencelist_useEvidenceIds ) ) )
+ {
+ self->reader_cols[ ereflst_cn_OVERLAP_REF_POS ].flags |= ercol_Skip;
+ self->reader_cols[ ereflst_cn_OVERLAP_REF_LEN ].flags |= ercol_Skip;
+ }
+ rc = TableReader_MakeCursor( &self->reader, self->cursor, self->reader_cols );
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+static rc_t ReferenceList_OpenCursor2( ReferenceList* self, align_id_src ids )
+{
+ rc_t rc = 0;
+
+ assert( self != NULL );
+ if ( ids != primary_align_ids && ids != secondary_align_ids && ids != evidence_align_ids )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcOutofrange );
+ }
+ else if ( ids == primary_align_ids && !( self->options & ereferencelist_usePrimaryIds ) )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else if ( ids == secondary_align_ids && !( self->options & ereferencelist_useSecondaryIds ) )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else if ( ids == evidence_align_ids && !( self->options & ereferencelist_useEvidenceIds ) )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ const VTable* vtbl = NULL;
+ rc = VCursorOpenParentRead( self->cursor, &vtbl );
+ if ( rc == 0 )
+ {
+ if ( rc == 0 )
+ {
+ const VDatabase* db = NULL;
+ rc = VTableOpenParentRead( vtbl, &db );
+ if ( rc == 0 )
+ {
+ rc = VDatabaseOpenTableRead( db, &vtbl, ids == primary_align_ids ? "PRIMARY_ALIGNMENT" :
+ ( ids == secondary_align_ids ? "SECONDARY_ALIGNMENT" : "EVIDENCE_INTERVAL" ) );
+ if ( rc == 0 )
+ {
+ memcpy( self->iter_cols, PlacementIterator_cols, sizeof( PlacementIterator_cols ) );
+ rc = TableReader_Make( &self->iter, vtbl, self->iter_cols, self->cache );
+ }
+ VDatabaseRelease( db );
+ }
+ }
+ VTableRelease( vtbl );
+ }
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+static rc_t ReferenceList_RefSeqMgr( const ReferenceList* cself, const RefSeqMgr** rmgr )
+{
+ rc_t rc = 0;
+
+ assert( rmgr != NULL );
+
+ if ( cself->refseqmgr == NULL )
+ {
+ const VTable* vtbl = NULL;
+ rc = VCursorOpenParentRead( cself->cursor, &vtbl );
+ if ( rc == 0 )
+ {
+ const VDBManager* vmgr;
+ rc = VTableOpenManagerRead( vtbl, &vmgr );
+ if ( rc == 0 )
+ {
+ rc = RefSeqMgr_Make( &( (ReferenceList*)cself )->refseqmgr, vmgr,
+ ( cself->options & ereferencelist_4na ) ? errefseq_4NA : 0, cself->cache, 2 );
+ VDBManagerRelease( vmgr );
+ }
+ VTableRelease( vtbl );
+ }
+ }
+ *rmgr = cself->refseqmgr;
+ ALIGN_DBGERR(rc);
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_AddRef( const ReferenceList *cself )
+{
+ rc_t rc = 0;
+ if ( cself != NULL )
+ {
+ if ( KRefcountAdd( &cself->refcount, "ReferenceList" ) != krefOkay )
+ {
+ rc = RC( rcAlign, rcType, rcAttaching, rcError, rcUnexpected );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT void CC ReferenceList_Release( const ReferenceList* cself )
+{
+ if ( cself != NULL )
+ {
+ if ( KRefcountDrop(&cself->refcount, "ReferenceList") == krefWhack )
+ {
+ ReferenceList* self = ( ReferenceList* )cself;
+ TableReader_Whack( self->reader );
+ TableReader_Whack( cself->iter );
+ RefSeqMgr_Release( self->refseqmgr );
+ while( self->nodes_qty-- > 0 )
+ {
+ free( self->nodes[ self->nodes_qty ] );
+ }
+ VCursorRelease( cself->cursor );
+ KRefcountWhack( &self->refcount, "ReferenceList" );
+ free( self );
+ }
+ }
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_Count(const ReferenceList* cself, uint32_t* count)
+{
+ rc_t rc = 0;
+ if ( cself == NULL || count == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcNull );
+ }
+ else
+ {
+ *count = cself->nodes_qty;
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_Find( const ReferenceList* cself, const ReferenceObj** obj,
+ const char* key, size_t key_sz )
+{
+ rc_t rc = 0;
+ char buf[4096], *b = buf;
+
+ if ( cself == NULL || obj == NULL || key == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcSearching, rcParam, rcNull );
+ }
+ else if ( key_sz >= sizeof( buf ) && ( b = malloc( key_sz + 1 ) ) == NULL )
+ {
+ rc = RC(rcAlign, rcType, rcSearching, rcMemory, rcExhausted);
+ }
+ else
+ {
+ memcpy( b, key, key_sz );
+ b[ key_sz ] = '\0';
+ *obj = ( ReferenceObj* )BSTreeFind( &cself->seqid_tree, b, ReferenceObj_CmpSeqId );
+ if ( *obj == NULL )
+ {
+ const BSTNode* n = BSTreeFind( &cself->name_tree, b, ReferenceObj_CmpName );
+ if ( n != NULL )
+ {
+ *obj = ( ReferenceObj* )&n[ -1 ];
+ }
+ }
+ if ( *obj == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcSearching, rcItem, rcNotFound );
+ }
+ else
+ {
+ rc = ReferenceList_AddRef( cself );
+ if ( rc != 0 )
+ {
+ *obj = NULL;
+ }
+ }
+
+ if ( b != buf )
+ {
+ free( b );
+ }
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_Get( const ReferenceList* cself, const ReferenceObj** obj, uint32_t idx )
+{
+ rc_t rc = 0;
+ if ( cself == NULL || obj == NULL || idx >= cself->nodes_qty )
+ {
+ rc = RC( rcAlign, rcType, rcRetrieving, rcParam, rcInvalid );
+ }
+ else
+ {
+ rc = ReferenceList_AddRef( cself );
+ if ( rc == 0 )
+ {
+ *obj = cself->nodes[ idx ];
+ }
+ else
+ {
+ *obj = NULL;
+ }
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t ReferenceObj_AddRef( const ReferenceObj *cself )
+{
+ if ( cself == NULL )
+ {
+ return RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ return ReferenceList_AddRef( cself->mgr );
+ }
+}
+
+
+LIB_EXPORT void ReferenceObj_Release( const ReferenceObj *cself )
+{
+ ReferenceList_Release( cself ? cself->mgr : NULL );
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Idx( const ReferenceObj* cself, uint32_t* idx )
+{
+ rc_t rc = 0;
+ if ( cself == NULL || idx == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ *idx = cself->id;
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_IdRange( const ReferenceObj* cself, int64_t* start, int64_t* stop )
+{
+ rc_t rc = 0;
+ if ( cself == NULL || (start == NULL && stop == NULL) )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ if ( start != NULL )
+ {
+ *start = cself->start_rowid;
+ }
+ if ( stop != NULL )
+ {
+ *stop = cself->end_rowid;
+ }
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Bin( const ReferenceObj* cself, uint32_t* bin )
+{
+ rc_t rc = 0;
+ if ( cself == NULL || bin == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ *bin = cself->bin;
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_SeqId( const ReferenceObj* cself, const char** seqid )
+{
+ rc_t rc = 0;
+ if ( cself == NULL || seqid == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ *seqid = cself->seqid;
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Name( const ReferenceObj* cself, const char** name )
+{
+ rc_t rc = 0;
+ if ( cself == NULL || name == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ *name = cself->name;
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_SeqLength( const ReferenceObj* cself, INSDC_coord_len* len )
+{
+ rc_t rc = 0;
+ if ( cself == NULL || len == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ *len = cself->seq_len;
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Circular( const ReferenceObj* cself, bool* circular )
+{
+ rc_t rc = 0;
+ if ( cself == NULL || circular == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ *circular = cself->circular;
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_External( const ReferenceObj* cself, bool* external, char** path )
+{
+ rc_t rc = 0;
+
+ if ( cself == NULL || external == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ const RefSeqMgr* rmgr;
+ *external = !cself->read_present;
+ if ( path != NULL && !cself->read_present )
+ {
+ rc = ReferenceList_RefSeqMgr( cself->mgr, &rmgr );
+ if ( rc == 0 )
+ {
+ *path = NULL;
+ rc = RefSeqMgr_Exists( rmgr, cself->seqid, string_size( cself->seqid ), NULL );
+ if ( GetRCObject( rc ) == rcTable && GetRCState( rc ) == rcNotFound )
+ {
+ rc = 0;
+ }
+ }
+ }
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Read( const ReferenceObj* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* written )
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || buffer == NULL || written == NULL )
+ {
+ rc = RC ( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ rc = ReferenceSeq_ReOffset( cself->circular, cself->seq_len, &offset );
+ if ( rc == 0 )
+ {
+ if ( cself->mgr->reader != NULL || ( rc = ReferenceList_OpenCursor( cself->mgr ) ) == 0 )
+ {
+ int cid = ( cself->mgr->options & ereferencelist_4na ) ? ereflst_cn_READ_4na : ereflst_cn_READ_dna;
+ INSDC_coord_len q = 0;
+ *written = 0;
+ do
+ {
+ int64_t rowid = cself->start_rowid + offset / cself->mgr->max_seq_len;
+ INSDC_coord_zero s = offset % cself->mgr->max_seq_len;
+ rc = TableReader_ReadRow( cself->mgr->reader, rowid );
+ if ( rc == 0 )
+ {
+ q = cself->mgr->reader_cols[ereflst_cn_SEQ_LEN].base.coord_len[0] - s;
+ if ( q > len ) { q = len; }
+ memcpy( &buffer[ *written ], &cself->mgr->reader_cols[ cid ].base.str[ s ], q );
+ *written += q;
+ offset += q;
+ len -= q;
+ }
+ /* SEQ_LEN < MAX_SEQ_LEN is last row unless it is CIRCULAR */
+ if ( cself->mgr->reader_cols[ ereflst_cn_SEQ_LEN ].base.coord_len[ 0 ] < cself->mgr->max_seq_len )
+ {
+ if ( !cself->circular ) { break; }
+ offset = 0;
+ }
+ } while ( rc == 0 && q > 0 && len > 0 );
+ }
+ }
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_GetIdCount( const ReferenceObj* cself, int64_t row_id, uint32_t *count )
+{
+ rc_t rc = 0;
+
+ if ( cself == NULL || count == NULL )
+ {
+ rc = RC ( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else if ( cself->mgr == NULL )
+ {
+ rc = RC ( rcAlign, rcType, rcAccessing, rcItem, rcInvalid );
+ }
+ else
+ {
+ *count = 0;
+
+ if ( cself->mgr->reader == NULL )
+ rc = ReferenceList_OpenCursor( cself->mgr );
+
+ if ( rc == 0 )
+ {
+ rc = TableReader_ReadRow( cself->mgr->reader, row_id );
+ if ( rc == 0 )
+ {
+ TableReaderColumn *col = &( cself->mgr->reader_cols[ ereflst_cn_PRIMARY_ALIGNMENT_IDS ] );
+ count[ 0 ] = col->len;
+ col = &( cself->mgr->reader_cols[ ereflst_cn_SECONDARY_ALIGNMENT_IDS ] );
+ count[ 1 ] = col->len;
+ col = &( cself->mgr->reader_cols[ ereflst_cn_EVIDENCE_INTERVAL_IDS ] );
+ count[ 2 ] = col->len;
+ }
+ }
+ }
+ return rc;
+}
+
+
+typedef struct PlacementRecExtensionInfo PlacementRecExtensionInfo;
+struct PlacementRecExtensionInfo
+{
+ /* data, destructor and size for extension 1 */
+ void * data;
+ void ( CC * destroy ) ( void *obj, void *data );
+ size_t size;
+};
+
+
+LIB_EXPORT void * CC PlacementRecordCast ( const PlacementRecord *self, uint32_t ext )
+{
+ void * res = NULL;
+ if ( self != NULL )
+ {
+ uint8_t * ptr = ( uint8_t * ) self;
+ PlacementRecExtensionInfo * ext_info;
+
+/**********************************************
+ +---------------+
+ | core | PlacementRecord *
+ +---------------+
+ | read_group | char *
+ +---------------+
+ | ext_info1 | PlacementRecExtensionInfo *
+ | ext_info2 | PlacementRecExtensionInfo *
+ +---------------+
+ | ext1 | ??? *
+ +---------------+
+ | ext2 | ??? *
+ +---------------+
+**********************************************/
+ ptr += ( sizeof * self );
+ ptr += self->spot_group_len;
+ ext_info = ( PlacementRecExtensionInfo * )( ptr );
+ ptr += ( 2 * ( sizeof * ext_info ) );
+ switch( ext )
+ {
+ case placementRecordExtension0 : res = ( void * ) ptr;
+ break;
+
+ case placementRecordExtension1 : res = ( void * ) ( ptr + ext_info->size );
+ break;
+ }
+ }
+ return res;
+}
+
+
+LIB_EXPORT void * CC PlacementRecord_get_ext_data_ptr ( const PlacementRecord *self, uint32_t ext )
+{
+ void * res = NULL;
+ if ( self != NULL )
+ {
+ uint8_t * ptr = ( uint8_t * ) self;
+ PlacementRecExtensionInfo * ext_info;
+ ptr += ( sizeof * self );
+ ptr += self->spot_group_len; /* ptr points now to the 1st ext-info-block */
+ ext_info = ( PlacementRecExtensionInfo * )( ptr );
+ switch( ext )
+ {
+ case placementRecordExtension0 : res = ext_info[ 0 ].data; break;
+ case placementRecordExtension1 : res = ext_info[ 1 ].data; break;
+ }
+ }
+ return res;
+}
+
+
+LIB_EXPORT void CC PlacementRecordWhack( const PlacementRecord *cself )
+{
+ if ( cself != NULL )
+ {
+ PlacementRecord * self = ( PlacementRecord * )cself;
+ PlacementRecExtensionInfo * ext_info;
+ uint8_t * ptr = ( uint8_t * )self;
+ ptr += sizeof( *self );
+ ptr += self->spot_group_len;
+ ext_info = ( PlacementRecExtensionInfo * ) ptr;
+
+ /* destroy from the outer callback-block beginning */
+ if ( ext_info[ 1 ].destroy != NULL )
+ {
+ void *obj = PlacementRecordCast ( self, placementRecordExtension1 );
+ ext_info[ 1 ].destroy( obj, ext_info[ 1 ].data );
+ }
+
+ if ( ext_info[ 0 ].destroy != NULL )
+ {
+ void *obj = PlacementRecordCast ( self, placementRecordExtension0 );
+ ext_info[ 0 ].destroy( obj, ext_info[ 0 ].data );
+ }
+ /* now deallocate ( or put back into pool ) */
+ free( self );
+ }
+}
+
+struct PlacementIterator
+{
+ const ReferenceObj* obj;
+ INSDC_coord_zero ref_window_start;
+ INSDC_coord_len ref_window_len;
+
+ int64_t last_ref_row_of_window_rel; /* relative to start of reference, not window */
+ int64_t cur_ref_row_rel; /* current row relative to start of reference */
+ int64_t rowcount_of_ref; /* precomputed: how many rows does this reference has */
+
+ /* own reader in case of ref cursor based construction */
+ const TableReader* ref_reader;
+ TableReaderColumn* ref_cols;
+ TableReaderColumn ref_cols_own[sizeof(ReferenceList_cols)/sizeof(ReferenceList_cols[0])];
+
+ /* own reader in case of align cursor based construction */
+ const TableReader* align_reader;
+ TableReaderColumn* align_cols;
+ TableReaderColumn align_cols_own[sizeof(PlacementIterator_cols)/sizeof(PlacementIterator_cols[0])];
+
+ /* current reference table row */
+ int64_t current_reftable_row;
+
+ const TableReaderColumn* ids_col;
+ Vector ids;
+ /* PlacementRecord c-tor params */
+ PlacementRecordExtendFuncs ext_0;
+ PlacementRecordExtendFuncs ext_1;
+
+ /* if this field is :
+ * NULL ... group by original read-group from the source-file
+ * points to empty string ... do not perform grouping at all
+ * point to non-empty string ... group by this string
+ */
+ const char * spot_group;
+ size_t spot_group_len;
+ int32_t min_mapq;
+
+ const VCursor* align_curs;
+};
+
+
+static void enter_spotgroup ( PlacementIterator *iter, const char * spot_group )
+{
+ if ( spot_group == NULL )
+ {
+ iter->spot_group = NULL;
+ iter->spot_group_len = 0;
+ }
+ else
+ {
+ iter->spot_group_len = string_size ( spot_group );
+ if ( iter->spot_group_len > 0 )
+ {
+ iter->spot_group = string_dup_measure ( spot_group, NULL );
+ }
+ else
+ {
+ iter->spot_group = calloc( 1, 1 );
+ }
+ }
+}
+
+
+static int64_t calc_overlaped( PlacementIterator * o, align_id_src ids )
+{
+ int64_t res = o->ref_window_start;
+ bool from_ref_table = false;
+
+/*
+ uint32_t ofs = 0;
+ switch ( ids )
+ {
+ case primary_align_ids : ofs = 0; break;
+ case secondary_align_ids : ofs = 1; break;
+ case evidence_align_ids : ofs = 2; break;
+ }
+
+ if ( o->ref_cols[ ereflst_cn_OVERLAP_REF_LEN ].idx != 0 &&
+ o->ref_cols[ ereflst_cn_OVERLAP_REF_LEN ].len > ofs )
+ {
+ INSDC_coord_len overlap_ref_len = o->ref_cols[ ereflst_cn_OVERLAP_REF_LEN ].base.coord_len[ ofs ];
+ if ( overlap_ref_len < o->obj->mgr->max_seq_len )
+ {
+ if ( o->ref_cols[ ereflst_cn_OVERLAP_REF_POS ].idx != 0 &&
+ o->ref_cols[ ereflst_cn_OVERLAP_REF_POS ].len > ofs )
+ {
+ res = o->ref_cols[ereflst_cn_OVERLAP_REF_POS].base.coord0[ ofs ];
+ from_ref_table = true;
+ }
+ }
+ }
+*/
+
+ if ( !from_ref_table )
+ {
+ /* default is step back 10 rows/50k bases */
+ int64_t ref_pos_lookback = ( 10 * o->obj->mgr->max_seq_len );
+ if ( o->obj->circular )
+ {
+ int64_t const half = ( o->obj->seq_len / 2 );
+
+ if ( ref_pos_lookback > half )
+ {
+ /* go back no more than one full length */
+ ref_pos_lookback = half;
+ }
+ res = ( o->ref_window_start - ref_pos_lookback ); /* could become negative */
+ }
+ else
+ {
+ res = ( o->ref_window_start < ref_pos_lookback ? 0 : ( o->ref_window_start - ref_pos_lookback ) );
+ }
+ }
+ return res;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_MakePlacementIterator ( const ReferenceObj* cself,
+ PlacementIterator **iter,
+ INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len,
+ int32_t min_mapq,
+ struct VCursor const *ref_cur, struct VCursor const *align_cur, align_id_src ids,
+ const PlacementRecordExtendFuncs *ext_0, const PlacementRecordExtendFuncs *ext_1,
+ const char * spot_group )
+{
+ rc_t rc = 0;
+ PlacementIterator* o = NULL;
+
+ if ( cself == NULL || iter == NULL )
+ {
+ rc = RC(rcAlign, rcType, rcAccessing, rcParam, rcInvalid);
+ }
+ else if ( ( rc = ReferenceSeq_ReOffset( cself->circular, cself->seq_len, &ref_window_start ) ) != 0 )
+ {
+ }
+ else if ( ( o = calloc( 1, sizeof( *o ) ) ) == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ rc = ReferenceList_AddRef( cself->mgr );
+ if ( rc == 0 )
+ {
+ ReferenceList* mgr = cself->mgr;
+ o->obj = cself;
+ /* o->wrapped_around = false; */
+ ReferenceObj_AddRef( o->obj );
+ o->min_mapq = min_mapq;
+
+ if ( ext_0 != NULL )
+ {
+ o->ext_0.data = ext_0->data;
+ o->ext_0.destroy = ext_0->destroy;
+ o->ext_0.populate = ext_0->populate;
+ o->ext_0.alloc_size = ext_0->alloc_size;
+ o->ext_0.fixed_size = ext_0->fixed_size;
+ }
+
+ if ( ext_1 != NULL )
+ {
+ o->ext_1.data = ext_1->data;
+ o->ext_1.destroy = ext_1->destroy;
+ o->ext_1.populate = ext_1->populate;
+ o->ext_1.alloc_size = ext_1->alloc_size;
+ o->ext_1.fixed_size = ext_1->fixed_size;
+ }
+
+ if ( ref_cur == NULL )
+ {
+ if ( mgr->reader == NULL )
+ {
+ rc = ReferenceList_OpenCursor( mgr );
+ }
+ if ( rc == 0 )
+ {
+ o->ref_reader = mgr->reader;
+ o->ref_cols = mgr->reader_cols;
+ }
+ }
+ else
+ {
+ memcpy( o->ref_cols_own, ReferenceList_cols, sizeof( o->ref_cols_own ) );
+ o->ref_cols = o->ref_cols_own;
+ rc = TableReader_MakeCursor( &o->ref_reader, ref_cur, o->ref_cols_own );
+ }
+
+ if ( align_cur == NULL )
+ {
+ bool b_assign = ( mgr->iter != NULL );
+ if ( !b_assign )
+ {
+ rc = ReferenceList_OpenCursor2( mgr, ids );
+ b_assign = ( rc == 0 );
+ }
+ if ( b_assign )
+ {
+ o->align_reader = mgr->iter;
+ o->align_cols = mgr->iter_cols;
+ }
+ }
+ else
+ {
+ memcpy( o->align_cols_own, PlacementIterator_cols, sizeof( o->align_cols_own ) );
+ o->align_cols = o->align_cols_own;
+ o->align_curs = align_cur;
+ rc = TableReader_MakeCursor( &o->align_reader, align_cur, o->align_cols );
+ }
+
+ if ( rc == 0 )
+ {
+ int64_t first_ref_row_of_window_rel = ( ref_window_start / mgr->max_seq_len );
+ int64_t first_ref_row_of_window_abs = ( cself->start_rowid + first_ref_row_of_window_rel );
+
+ /* in bases */
+ o->ref_window_start = ref_window_start;
+ o->ref_window_len = ref_window_len;
+
+ /* in reference-rows */
+ o->last_ref_row_of_window_rel = ref_window_start;
+ o->last_ref_row_of_window_rel += ref_window_len;
+ o->last_ref_row_of_window_rel /= mgr->max_seq_len;
+ o->rowcount_of_ref = ( cself->end_rowid - cself->start_rowid );
+
+ /* get effective starting offset based on overlap
+ from alignments which started before the requested pos */
+ rc = TableReader_ReadRow( o->ref_reader, first_ref_row_of_window_abs );
+ if ( rc == 0 )
+ {
+ int64_t ref_pos_overlapped = calc_overlaped( o, ids );
+ ALIGN_DBG( "ref_pos_overlapped: %li", ref_pos_overlapped );
+
+ /* the absolute row where we are reading from */
+ o->cur_ref_row_rel = ( ref_pos_overlapped / mgr->max_seq_len ) - 1;
+
+ VectorInit( &o->ids, 0, 100 );
+
+ o->ids_col = &o->ref_cols[ids == primary_align_ids ? ereflst_cn_PRIMARY_ALIGNMENT_IDS :
+ ( ids == secondary_align_ids ? ereflst_cn_SECONDARY_ALIGNMENT_IDS : ereflst_cn_EVIDENCE_INTERVAL_IDS ) ];
+
+ ALIGN_DBG( "iter.last_ref_row_of_window_rel: %li", o->last_ref_row_of_window_rel );
+ ALIGN_DBG( "iter.rowcount_of_ref: %li", o->rowcount_of_ref );
+ ALIGN_DBG( "iter.cur_ref_row_rel: %li", o->cur_ref_row_rel );
+ }
+ }
+
+ if ( rc != 0 )
+ {
+ ReferenceObj_Release( o->obj );
+ }
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ enter_spotgroup ( o, spot_group );
+ *iter = o;
+/* ALIGN_DBG( "iter for %s:%s opened 0x%p", cself->seqid, cself->name, o ); */
+ }
+ else
+ {
+ *iter = NULL;
+ PlacementIteratorRelease( o );
+ ALIGN_DBGERRP( "iter for %s:%s", rc, cself->seqid, cself->name );
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorAddRef ( const PlacementIterator *cself )
+{
+ return ReferenceList_AddRef(cself ? cself->obj->mgr : NULL);
+}
+
+
+static void CC PlacementIterator_whack_recs( void *item, void *data )
+{
+ PlacementRecordWhack( ( PlacementRecord * ) item );
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorRelease ( const PlacementIterator *cself )
+{
+ if ( cself != NULL )
+ {
+ PlacementIterator* self = ( PlacementIterator* )cself;
+
+ VectorWhack( &self->ids, PlacementIterator_whack_recs, NULL );
+
+ if ( self->ref_reader != self->obj->mgr->reader )
+ {
+ TableReader_Whack( self->ref_reader );
+ }
+ if ( self->align_reader != self->obj->mgr->iter )
+ {
+ TableReader_Whack( self->align_reader );
+ }
+ ReferenceObj_Release( self->obj );
+ ReferenceList_Release( self->obj->mgr );
+ if ( self->spot_group != NULL )
+ {
+ free( ( void * )self->spot_group );
+ }
+ free( self );
+ }
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorRefWindow( const PlacementIterator *self,
+ const char **idstr, INSDC_coord_zero* pos, INSDC_coord_len* len )
+{
+ rc_t rc = 0;
+
+ if ( self == NULL || (idstr == NULL || pos == NULL || len == NULL ) )
+ {
+ rc = RC(rcAlign, rcType, rcAccessing, rcParam, rcInvalid);
+ }
+ else
+ {
+ if ( idstr != NULL ) { *idstr = self->obj->seqid; }
+ if ( pos != NULL ) { *pos = self->ref_window_start; }
+ if ( len != NULL ) { *len = self -> ref_window_len; }
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorRefObj( const PlacementIterator * self,
+ struct ReferenceObj const ** refobj )
+{
+ rc_t rc = 0;
+
+ if ( self == NULL || refobj == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ *refobj = self->obj;
+ }
+ ALIGN_DBGERR( rc );
+ return rc;
+}
+
+
+#if _DEBUGGING
+static void CC PlacementRecordVector_dump( void *item, void *data )
+{
+ const PlacementRecord* i = ( const PlacementRecord* )item;
+ ALIGN_DBG( " {%u, %u, %li}", i->pos, i->len, i->id );
+}
+#endif
+
+
+/* this comparison function performs last-to-first
+ ordering in the Vector. for this reason, all
+ comparisons and return values are reversed. */
+static int CC PlacementRecordVector_cmp( const void** left, const void** right, void* data )
+{
+ const PlacementRecord* l = *( ( const PlacementRecord** )left );
+ const PlacementRecord* r = *( ( const PlacementRecord** )right );
+
+ /* order by pos desc
+ return right - left rather than
+ normal left - right to reverse result */
+ int32_t d = r -> pos - l -> pos;
+ if ( d != 0 )
+ return d;
+
+ /* ...len asc */
+ if ( l -> len < r -> len )
+ return -1;
+ if ( l -> len > r -> len )
+ return 1;
+
+ /* ...id desc */
+ if ( l -> id > r -> id )
+ return -1;
+ if ( l -> id < r -> id )
+ return 1;
+ return 0;
+}
+
+
+static rc_t allocate_populate_rec( const PlacementIterator *cself,
+ PlacementRecord **rec,
+ struct VCursor const *curs,
+ int64_t id,
+ INSDC_coord_zero apos,
+ INSDC_coord_len alen )
+{
+ rc_t rc = 0;
+
+ {
+ PlacementRecExtensionInfo * ext_info;
+ size_t spot_group_len, size0, size1, total_size;
+
+ if ( cself->spot_group_len > 0 )
+ {
+ /* use the read-group from the PlacementIterator as an fix override ... */
+ spot_group_len = cself->spot_group_len;
+ }
+ else
+ {
+ if ( cself->spot_group != NULL )
+ {
+ /* iterator has an empty (not NULL) spot-group: use the orignal data! */
+ spot_group_len = cself->align_cols[eplacementiter_cn_READ_GROUP].len;
+ }
+ else
+ {
+ /* do not use spotgroups at all ! */
+ spot_group_len = 0;
+ }
+ }
+
+ /* use callback or fixed size to discover the size of portions 0 and 1 */
+ if ( cself->ext_0.alloc_size != NULL )
+ {
+ rc = cself->ext_0.alloc_size( curs, id, &size0, cself->ext_0.data );
+ if ( rc != 0 )
+ return rc;
+ }
+ else
+ size0 = cself->ext_0.fixed_size;
+
+ if ( cself->ext_1.alloc_size != NULL )
+ {
+ rc = cself->ext_1.alloc_size( curs, id, &size1, cself->ext_1.data );
+ if ( rc != 0 )
+ return rc;
+ }
+ else
+ size1 = cself->ext_1.fixed_size;
+
+ /* allocate the record ( or take it from a pool ) */
+ total_size = ( sizeof **rec ) + spot_group_len + ( 2 * ( sizeof *ext_info ) ) + size0 + size1;
+ *rec = calloc( 1, total_size );
+ if ( *rec == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ PlacementRecord *pr = * rec;
+ uint8_t * ptr = ( uint8_t * )( * rec );
+ ptr += sizeof ( **rec );
+ pr->spot_group = (char *)ptr;
+ ptr += spot_group_len ;
+ ext_info = ( PlacementRecExtensionInfo * )ptr;
+
+ /* prepopulate the core-record : */
+ pr->id = id; /* the row-id */
+ pr->ref = cself->obj; /* the ReferenceObj it refers to */
+ pr->pos = apos; /* the positon on the reference */
+ pr->len = alen; /* the length on the reference */
+ pr->mapq = cself->align_cols[eplacementiter_cn_MAPQ].base.i32[ 0 ]; /* mapq */
+
+ /* populate the spot-group : (with the values discovered at the "size-phase" ) */
+ pr->spot_group_len = spot_group_len;
+ if ( cself->spot_group_len > 0 )
+ {
+ /* we make a copy of the spot-group-override commin from the iterator */
+ string_copy ( pr->spot_group, spot_group_len, cself->spot_group, spot_group_len );
+ }
+ else
+ {
+ if ( cself->spot_group != NULL )
+ {
+ /* iterator has an empty (not NULL) spot-group: use the orignal data! */
+ string_copy( pr->spot_group, spot_group_len,
+ cself->align_cols[eplacementiter_cn_READ_GROUP].base.str, spot_group_len );
+ }
+ }
+
+ ext_info[ 0 ].data = cself->ext_0.data; /* the opt. context ptr. */
+ ext_info[ 0 ].destroy = cself->ext_0.destroy; /* the opt. destructor */
+ ext_info[ 0 ].size = size0; /* discovered size from above */
+
+ ext_info[ 1 ].data = cself->ext_1.data; /* the opt. context ptr. */
+ ext_info[ 1 ].destroy = cself->ext_1.destroy; /* the opt. destructor */
+ ext_info[ 1 ].size = size1; /* discovered size from above */
+
+ /* pass the record now to the opt. populate-callbacks */
+ if ( cself->ext_0.populate != NULL )
+ {
+ void * obj = PlacementRecordCast ( pr, placementRecordExtension0 );
+ rc = cself->ext_0.populate( obj, pr, curs,
+ cself->ref_window_start,
+ cself->ref_window_len,
+ cself->ext_0.data );
+ if ( rc != 0 && cself->ext_0.destroy != NULL )
+ {
+ void *obj = PlacementRecordCast ( pr, placementRecordExtension0 );
+ cself->ext_0.destroy( obj, cself->ext_0.data );
+ }
+ }
+
+ if ( rc == 0 && cself->ext_1.populate != NULL )
+ {
+ void * obj = PlacementRecordCast ( pr, placementRecordExtension1 );
+ rc = cself->ext_1.populate( obj, pr, curs,
+ cself->ref_window_start,
+ cself->ref_window_len,
+ cself->ext_1.data );
+ if ( rc != 0 )
+ {
+ if ( cself->ext_1.destroy != NULL )
+ {
+ void *obj = PlacementRecordCast ( pr, placementRecordExtension1 );
+ cself->ext_1.destroy( obj, cself->ext_1.data );
+ }
+ if ( cself->ext_0.destroy != NULL )
+ {
+ void *obj = PlacementRecordCast ( pr, placementRecordExtension0 );
+ cself->ext_0.destroy( obj, cself->ext_0.data );
+ }
+
+ }
+ }
+
+ if ( rc != 0 )
+ {
+ /* free */
+ free( *rec );
+ *rec = NULL;
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t make_alignment( PlacementIterator *self, int64_t align_id,
+ INSDC_coord_zero apos, INSDC_coord_len alen )
+{
+ PlacementRecord *rec;
+ rc_t rc = allocate_populate_rec( self, &rec, self->align_curs, align_id, apos, alen );
+ if ( rc == 0 )
+ {
+ /*ALIGN_DBG("align %p: {%li, %u, %u} - added[%u]", rec, cself->ids_col->base.i64[i],
+ apos, alen, VectorLength(&cself->ids));*/
+ rc = VectorAppend( &self->ids, NULL, rec );
+ if ( rc != 0 )
+ PlacementRecordWhack( rec );
+ }
+ else
+ {
+ if ( GetRCState( rc ) == rcIgnored )
+ rc = 0; /* do not break the loop if a record is filtered out! */
+ }
+ return rc;
+}
+
+
+/*
+ we have read a single row from REFERENCE, including the
+ alignment ids. use each alignment id from this row to
+ populate internal vector
+*/
+static rc_t read_alignments( PlacementIterator *self )
+{
+ rc_t rc = 0;
+ uint32_t i;
+ /* fill out vector */
+ /*ALIGN_DBG("align rows: %u", cself->ids_col->len);*/
+ for ( i = 0; rc == 0 && i < self->ids_col->len; i++ )
+ {
+ rc = TableReader_ReadRow( self->align_reader, self->ids_col->base.i64[ i ] );
+ if ( rc == 0 )
+ {
+ INSDC_coord_zero apos = self->align_cols[ eplacementiter_cn_REF_POS ].base.coord0[ 0 ];
+ INSDC_coord_len alen = self->align_cols[ eplacementiter_cn_REF_LEN ].base.coord_len[ 0 ];
+ /*ALIGN_DBG("align row: {%li, %u, %u}", cself->ids_col->base.i64[i], apos, alen);*/
+
+ if ( self->cur_ref_row_rel < 0 )
+ apos -= self->obj->seq_len;
+
+ /* at this point we have the position of the alignment.
+ we want it to intersect with the window */
+
+ /* test mapq */
+ if ( self->align_cols[eplacementiter_cn_MAPQ].base.i32[ 0 ] < self->min_mapq )
+ continue;
+
+ /* case 1: alignment, which is expressed in
+ linear coordinates, is entirely to left of
+ window. */
+ if ( (INSDC_coord_zero)( apos + alen ) <= self -> ref_window_start )
+ {
+ /* ignore this alignment */
+ continue;
+ }
+
+ /* case 2: alignment is to the right of window */
+ if ( apos >= ( self -> ref_window_start + self -> ref_window_len ) )
+ {
+ /* if not circular, it cannot intersect */
+ if ( ! self -> obj -> circular )
+ {
+ /* this seems like it indicates end of window,
+ however there is no guarantee that the ids
+ being fetched are in reference order. they are
+ supposed to be in row order ( cluster ) to
+ reduce random access to cursor. unless row
+ order is guaranteed to be reference order,
+ we cannot know that the loop can be terminated. */
+ continue;
+ }
+
+ /* circular, but still within linear range
+ means it cannot wrap around to intersect */
+ if ( (INSDC_coord_zero)( apos + alen ) <= self->obj->seq_len )
+ continue;
+
+ }
+ else if ( ( self->obj->circular )&&( apos + alen > self->obj->seq_len ) )
+ {
+ /* the end of the alignment sticks over the end of the reference!
+ ---> we have the rare case of an alignment that wraps arround !
+ let as insert the alignment 2 times!
+ ( one with neg. position, one at real position ) */
+ rc = make_alignment( self, self->ids_col->base.i64[i], apos - self->obj->seq_len, alen );
+ }
+
+ /* having arrived here, we know the alignment intersects our window
+ apos MAY be < 0 if the alignment wrapped around */
+ if ( rc == 0 )
+ rc = make_alignment( self, self->ids_col->base.i64[i], apos, alen );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorNextAvailPos( const PlacementIterator *cself,
+ INSDC_coord_zero *pos, INSDC_coord_len *len )
+{
+ rc_t rc = 0;
+ PlacementIterator* self = (PlacementIterator*)cself;
+
+ if ( self == NULL || ( pos == NULL && len == NULL ) )
+ {
+ rc = RC( rcAlign, rcType, rcSelecting, rcParam, rcInvalid );
+ }
+ else
+ {
+ while ( rc == 0 && VectorLength( &self->ids ) == 0 )
+ {
+ /* read ids */
+
+ self->cur_ref_row_rel++; /* increment row offset */
+
+ ALIGN_DBG( "ref row: %li-%li-%li",
+ self->obj->start_rowid, self->cur_ref_row_rel, self->last_ref_row_of_window_rel );
+
+ if ( self->cur_ref_row_rel > self->last_ref_row_of_window_rel )
+ rc = SILENT_RC( rcAlign, rcType, rcSelecting, rcRange, rcDone );
+ else
+ {
+ int64_t row = ( self->obj->start_rowid + self->cur_ref_row_rel );
+ if ( self->cur_ref_row_rel < 0 )
+ row += self->rowcount_of_ref;
+
+ rc = TableReader_ReadRow( self->ref_reader, row );
+ if ( rc == 0 )
+ rc = read_alignments( self );
+
+ if ( ( rc == 0 || GetRCState( rc ) == rcDone) && VectorLength( &cself->ids ) > 0 )
+ {
+ VectorReorder( &self->ids, PlacementRecordVector_cmp, NULL );
+#if _DEBUGGING && 0
+ ALIGN_DBG( "REFERENCE row %li %u recs order by pos asc, len desc, id asc",
+ row, VectorLength( &cself->ids ) );
+ VectorForEach( &self->ids, true, PlacementRecordVector_dump, NULL );
+#endif
+ }
+ }
+ }
+
+ if ( rc == 0 || GetRCState( rc ) == rcDone )
+ {
+ uint32_t count = VectorLength( &cself->ids );
+ if ( count > 0 )
+ {
+ PlacementRecord* r = VectorLast( &cself->ids );
+ rc = 0;
+ if ( pos != NULL ) { *pos = r->pos; }
+ if ( len != NULL ) { *len = r->len; }
+
+/* ALIGN_DBG( "PlacementIteratorNextAvailPos( pos=%u, n=%u )", r->pos, count ); */
+ if ( !( cself->obj->circular ) && ( r->pos >= ( cself->ref_window_start + cself->ref_window_len ) ) )
+ {
+ /* the alignment !starts! after the end of the of the requested window! */
+ rc = SILENT_RC( rcAlign, rcType, rcSelecting, rcRange, rcDone );
+ }
+ }
+ else
+ ALIGN_DBG( "PlacementIteratorNextAvailPos( no placements )", 0 );
+ }
+ }
+
+ if ( rc != 0 && GetRCState(rc) != rcDone )
+ ALIGN_DBGERR( rc );
+
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorNextRecordAt( PlacementIterator *cself,
+ INSDC_coord_zero pos, const PlacementRecord **rec )
+{
+ rc_t rc = 0;
+ if ( cself == NULL || rec == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ uint32_t vlen = VectorLength( &cself->ids );
+ *rec = NULL;
+ if ( vlen > 0 )
+ {
+ PlacementRecord* r = VectorLast( &cself->ids );
+ if ( r->pos == pos )
+ {
+ VectorRemove( &cself->ids, vlen - 1, (void**)rec );
+ }
+ }
+ }
+
+ if ( rc == 0 && *rec == NULL )
+ {
+ rc = SILENT_RC( rcAlign, rcType, rcSelecting, rcOffset, rcDone );
+ }
+ else
+ {
+ ALIGN_DBGERR( rc );
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorNextIdAt( PlacementIterator *cself,
+ INSDC_coord_zero pos, int64_t *row_id, INSDC_coord_len *len )
+{
+ rc_t rc = 0;
+ const PlacementRecord* r = NULL;
+
+ if ( cself == NULL || row_id == NULL )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+ }
+ else
+ {
+ rc = PlacementIteratorNextRecordAt( cself, pos, &r );
+ if ( rc == 0 )
+ {
+ *row_id = r->id;
+ if ( len != NULL ) { *len = r->len; }
+ PlacementRecordWhack( r );
+ }
+ }
+
+ if ( GetRCState( rc ) != rcDone )
+ {
+ ALIGN_DBGERR( rc );
+ }
+ return rc;
+}
diff --git a/libs/align/refseq-mgr.c b/libs/align/refseq-mgr.c
index 9df013d..fde6e90 100644
--- a/libs/align/refseq-mgr.c
+++ b/libs/align/refseq-mgr.c
@@ -23,6 +23,7 @@
* ===========================================================================
*
*/
+
#include <align/extern.h>
#include <klib/rc.h>
@@ -50,6 +51,10 @@
#include <ctype.h>
#include <assert.h>
+/*#define ALIGN_DBG KOutMsg*/
+
+#define USE_OWN_REFSEQ_RESOLVER 0
+
struct RefSeqMgr {
BSTree tree;
KConfig *kfg;
@@ -63,12 +68,154 @@ struct RefSeqMgr {
BSTree vdbs;
};
+struct RefSeq {
+ BSTNode dad;
+ const RefSeqMgr* mgr;
+ const TableReaderRefSeq* reader;
+ uint64_t usage;
+ uint32_t accession_sz;
+ /* must be last member of struct */
+ char accession[1];
+};
+
+typedef struct RefSeqMgr_Db_struct {
+ BSTNode dad;
+ char key[4096];
+ const VDatabase* db;
+} RefSeqMgr_Db;
+
+#if USE_OWN_REFSEQ_RESOLVER
+struct FindTable_ctx {
+ RefSeqMgr* self;
+ const KDBManager* kmgr;
+ const VTable** tbl;
+ char const* name;
+ uint32_t name_sz;
+ bool found;
+ rc_t rc;
+ char** path; /* optional */
+};
+#endif
+
static
-rc_t RefSeqMgr_KfgReadStr(const KConfig* kfg, const char* path, char* value, size_t value_sz)
+rc_t RefSeqMgr_ConfigValue ( const KConfig *kfg, const char *node_path, char *value, size_t value_size )
{
+ const KConfigNode *node;
+ rc_t rc = KConfigOpenNodeRead ( kfg, & node, node_path );
+ if ( rc == 0 )
+ {
+ size_t num_read, remaining;
+ rc = KConfigNodeRead ( node, 0, value, value_size - 1, & num_read, & remaining );
+ if ( rc == 0 )
+ {
+ if ( remaining != 0 )
+ rc = RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+ else
+ value [ num_read ] = 0;
+ }
+
+ KConfigNodeRelease ( node );
+ }
+ return rc;
+}
+
+static
+rc_t RefSeqMgr_KfgReadRepositories(const KConfig* kfg, char* paths, size_t paths_sz)
+{
+ /* servers are children of refseq/repository, e.g.: /refseq/repository/main="..." */
+ /* volumes are in refseq/repository/<serverName>/volumes, e.g.: /refseq/repository/main/volumes="..." */
+ /* all server/volume combinations are returned in paths separated by ':' */
+
rc_t rc = 0;
const KConfigNode *node;
+#define KFG_PATH "/refseq/repository/"
+ paths[0] = 0;
+
+ rc = KConfigOpenNodeRead ( kfg, & node, KFG_PATH );
+ if ( rc == 0 )
+ {
+ KNamelist* children;
+ rc = KConfigNodeListChild ( node, &children );
+ if ( rc == 0 )
+ {
+ uint32_t count;
+ rc = KNamelistCount ( children, &count );
+ if ( rc == 0 )
+ {
+ uint32_t i;
+ for (i = 0; i < count; ++i) /* for all servers */
+ {
+ const char* name;
+ rc = KNamelistGet ( children, i, &name );
+ if ( rc == 0 )
+ {
+#define BufSize 4096
+ char server[ BufSize ];
+ char buf[ BufSize ];
+ size_t num_writ;
+
+ rc = string_printf(buf, BufSize, &num_writ, KFG_PATH "%s", name);
+ if (rc == 0)
+ {
+ rc = RefSeqMgr_ConfigValue ( kfg, buf, server, sizeof(server) );
+ if (rc == 0)
+ {
+ rc = string_printf(buf, BufSize, &num_writ, KFG_PATH "%s/volumes", name);
+ if (rc == 0)
+ {
+ char volumes[ BufSize ];
+ rc = RefSeqMgr_ConfigValue ( kfg, buf, volumes, sizeof(volumes) );
+ if (rc == 0)
+ { /* create a server/volume pair for every combination, append to paths, ':' - separate */
+ char *vol_rem = volumes;
+ char *vol_sep;
+
+ do {
+ char const *volume = vol_rem;
+ vol_sep = string_chr(volume, string_size(volume), ':');
+ if(vol_sep) {
+ vol_rem = vol_sep + 1;
+ *vol_sep = 0;
+ }
+ string_copy(paths + string_size(paths), paths_sz - string_size(paths), server, string_size(server));
+ if (paths[string_size(paths)-1] != '/')
+ {
+ string_copy(paths + string_size(paths), paths_sz - string_size(paths), "/", 1);
+ }
+ string_copy(paths + string_size(paths), paths_sz - string_size(paths), volume, string_size(volume));
+ string_copy(paths + string_size(paths), paths_sz - string_size(paths), ":", 1);
+ } while(vol_sep);
+ }
+ }
+ }
+ }
+#undef BufSize
+ }
+ if ( rc != 0 )
+ {
+ break;
+ }
+ }
+ }
+ KNamelistRelease ( children );
+ }
+
+ KConfigNodeRelease ( node );
+ }
+ if (GetRCState(rc) == rcNotFound)
+ {
+ paths[0] = '\0';
+ return 0;
+ }
+ return 0;
+}
+static
+rc_t RefSeqMgr_KfgReadStr(const KConfig* kfg, const char* path, char* value, size_t value_sz)
+{
+ rc_t rc = 0;
+ const KConfigNode *node;
+
if ( (rc = KConfigOpenNodeRead(kfg, &node, path)) == 0 ) {
size_t num_read, remaining;
if( (rc = KConfigNodeRead(node, 0, value, value_sz - 1, &num_read, &remaining)) == 0 ) {
@@ -94,95 +241,91 @@ rc_t RefSeqMgr_ForEachVolume(const RefSeqMgr* cself, RefSeqMgr_ForEachVolume_cal
if( cself == NULL || cb == NULL ) {
rc = RC(rcAlign, rcType, rcConstructing, rcParam, rcNull);
- } else if( (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/servers", servers, sizeof(servers))) != 0 ||
- (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/volumes", volumes, sizeof(volumes))) != 0 ) {
- ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(servers/volumes)");
+ } else if( cb(".", NULL, data) ) {
+ /* found in local dir */
+ } else if( (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/paths", servers, sizeof(servers))) != 0 ) {
+ ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(paths)");
} else {
bool found = false;
- char *srv_sep;
- char *srv_rem = servers;
-
- /* servers and volumes are depricated and optional */
- if( servers[0] != '\0' || volumes[0] != '\0' ) {
+ if( servers[0] != '\0' ) {
+ char *srv_sep;
+ char *srv_rem = servers;
do {
- char vol[4096];
- char const *server = srv_rem;
- char *vol_rem = vol;
- char *vol_sep;
+ char const* server = srv_rem;
- strcpy(vol, volumes);
srv_sep = strchr(server, ':');
if(srv_sep) {
srv_rem = srv_sep + 1;
*srv_sep = 0;
}
- do {
- char const *volume = vol_rem;
-
- vol_sep = strchr(volume, ':');
- if(vol_sep) {
- vol_rem = vol_sep + 1;
- *vol_sep = 0;
- }
- found = cb(server, volume, data);
- } while(!found && vol_sep);
- } while(!found && srv_sep);
+ if( cb(server, NULL, data) ) {
+ found = true;
+ break;
+ }
+ } while(srv_sep);
}
if( !found ) {
- if( (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/paths", servers, sizeof(servers))) != 0 ) {
- ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(paths)");
- } else {
+ /* locate refseq servers/volumes in possibly multiple repositories */
+ if( (rc = RefSeqMgr_KfgReadRepositories(cself->kfg, servers, sizeof(servers))) != 0 ) {
+ ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(refseq/repository/*)");
+ };
+ if( servers[0] != '\0' ) {
char *srv_sep;
char *srv_rem = servers;
-
- if( servers[0] == '\0' ) {
- /* local local dir */
- memcpy(servers, ".", 2);
- }
do {
char const* server = srv_rem;
-
+
srv_sep = strchr(server, ':');
if(srv_sep) {
srv_rem = srv_sep + 1;
*srv_sep = 0;
}
if( cb(server, NULL, data) ) {
+ found = true;
break;
}
} while(srv_sep);
}
}
+ if( !found ) {
+ if ( (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/servers", servers, sizeof(servers))) != 0 ||
+ (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/volumes", volumes, sizeof(volumes))) != 0 ) {
+ ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(servers/volumes)");
+ }
+ /* servers and volumes are deprecated and optional */
+ if( rc == 0 && (servers[0] != '\0' || volumes[0] != '\0') ) {
+ char *srv_sep;
+ char *srv_rem = servers;
+ do {
+ char vol[ 4096 ];
+ char const *server = srv_rem;
+ char *vol_rem = vol;
+ char *vol_sep;
+
+ string_copy ( vol, sizeof vol, volumes, string_size( volumes ) );
+ srv_sep = strchr(server, ':');
+ if(srv_sep) {
+ srv_rem = srv_sep + 1;
+ *srv_sep = 0;
+ }
+ do {
+ char const *volume = vol_rem;
+
+ vol_sep = strchr(volume, ':');
+ if(vol_sep) {
+ vol_rem = vol_sep + 1;
+ *vol_sep = 0;
+ }
+ found = cb(server, volume, data);
+ } while(!found && vol_sep);
+ } while(!found && srv_sep);
+ }
+ }
}
return rc;
}
-struct RefSeq {
- BSTNode dad;
- const RefSeqMgr* mgr;
- const TableReaderRefSeq* reader;
- uint64_t usage;
- uint32_t accession_sz;
- /* must be last member of struct */
- char accession[1];
-};
-
-typedef struct RefSeqMgr_Db_struct {
- BSTNode dad;
- char key[4096];
- const VDatabase* db;
-} RefSeqMgr_Db;
-
-struct FindTable_ctx {
- RefSeqMgr* self;
- const KDBManager* kmgr;
- const VTable** tbl;
- char const* name;
- uint32_t name_sz;
- bool found;
- rc_t rc;
-};
-
+#if USE_OWN_REFSEQ_RESOLVER
static
int CC RefSeqMgr_DbSort(const BSTNode* item, const BSTNode* node)
{
@@ -198,29 +341,31 @@ int CC RefSeqMgr_FindDb(const void *item, const BSTNode *node)
static
bool FindTable(char const server[], char const volume[], void *data)
{
+ const VTable* tbl = NULL;
struct FindTable_ctx *ctx = data;
- int pathType;
const char* vol_sep = "/";
- if( volume == NULL ) {
+ if( volume == NULL || string_size(volume) == 0) {
volume = "";
vol_sep = "";
}
- ALIGN_DBG("try table '%s%s%s/%.*s'", server, vol_sep, volume, ctx->name_sz, ctx->name);
- pathType = KDBManagerPathType(ctx->kmgr, "%s%s%s/%.*s", server, vol_sep, volume, ctx->name_sz, ctx->name);
- pathType &= ~kptAlias;
-
- if( pathType == kptTable ) {
- ALIGN_DBG("found table '%s%s%s/%.*s'", server, vol_sep, volume, ctx->name_sz, ctx->name);
- ctx->found = true;
- if (ctx->tbl) {
- ctx->rc = VDBManagerOpenTableRead(ctx->self->vmgr, ctx->tbl, NULL, "%s%s%s/%.*s", server, vol_sep, volume, ctx->name_sz, ctx->name);
- }
- } else if( pathType == kptNotFound ) {
+ ctx->rc = VDBManagerOpenTableRead(ctx->self->vmgr, &tbl, NULL, "%s%s%s/%.*s", server, vol_sep, volume, ctx->name_sz, ctx->name);
+ ALIGN_DBG("trying '%s%s%s/%.*s'...", server, vol_sep, volume, ctx->name_sz, ctx->name);
+
+ ctx->found = false;
+
+ if(ctx->rc == 0){
+ ALIGN_DBG("found\n", "");
+ ctx->found = true;
+ }
+ else if (GetRCState(ctx->rc) == rcNotFound) {
+ ctx->rc = 0;
+ ALIGN_DBG("not found\n", "");
+
/* can be kar */
if( ctx->name_sz > 7 ) {
uint32_t i = 0;
-
+
/* check for pattern '\w{4}\d{2}[\.\d]+' */
while( isalpha(ctx->name[i]) && i < 4 ) {
i++;
@@ -235,21 +380,21 @@ bool FindTable(char const server[], char const volume[], void *data)
if( i == ctx->name_sz ) {
char key[4096];
size_t n;
-
+
if( string_printf(key, sizeof(key), &n, "%s%s%s/%.*s", server, vol_sep, volume, 6, ctx->name) != 0 ) {
- LOGMSG(klogWarn, "kar-vdb lookup buffer");
+ (void)LOGMSG(klogWarn, "kar-vdb lookup buffer");
} else {
- RefSeqMgr_Db* db = NULL;
- ALIGN_DBG("retry as '%s/%.*s'", key, ctx->name_sz, ctx->name);
- db = (RefSeqMgr_Db*)BSTreeFind(&ctx->self->vdbs, key, RefSeqMgr_FindDb);
+ RefSeqMgr_Db *db = (RefSeqMgr_Db*)BSTreeFind(&ctx->self->vdbs, key, RefSeqMgr_FindDb);
+
+ ALIGN_DBG("trying database '%s%s%s/%.*s'...", server, vol_sep, volume, 6, ctx->name);
if( db == NULL ) {
const VDatabase* vdb = NULL;
- if( VDBManagerOpenDBRead(ctx->self->vmgr, &vdb, NULL, key) == 0 ) {
+ if( (ctx->rc = VDBManagerOpenDBRead(ctx->self->vmgr, &vdb, NULL, key)) == 0 ) {
db = malloc(sizeof(*db));
if( db == NULL ) {
ctx->rc = RC(rcAlign, rcDatabase, rcOpening, rcMemory, rcExhausted);
} else {
- strcpy(db->key, key);
+ string_copy( db->key, sizeof db->key, key, string_size( key ) );
db->db = vdb;
ctx->rc = BSTreeInsertUnique(&ctx->self->vdbs, &db->dad, NULL, RefSeqMgr_DbSort);
}
@@ -261,26 +406,42 @@ bool FindTable(char const server[], char const volume[], void *data)
}
}
if( db != NULL ) {
- const VTable* tbl = NULL;
-
- if( VDatabaseOpenTableRead(db->db, &tbl, "%.*s", ctx->name_sz, ctx->name) == 0 ) {
+ ALIGN_DBG(" table '%.*s'", ctx->name_sz, ctx->name);
+ if( (ctx->rc = VDatabaseOpenTableRead(db->db, &tbl, "%.*s", ctx->name_sz, ctx->name)) == 0 ) {
ctx->found = true;
- if(ctx->tbl) {
- *(ctx->tbl) = tbl;
- } else {
- VTableRelease(tbl);
- }
+ ALIGN_DBG("found\n", "");
}
+ else
+ ALIGN_DBG("not found\n", "");
}
+ else
+ ALIGN_DBG("not found\n", "");
}
}
}
}
+ if( ctx->found){
+ if(ctx->tbl) *(ctx->tbl) = tbl;
+ else VTableRelease(tbl);
+ }
+ if( ctx->found && ctx->path != NULL ) {
+ size_t path_sz = string_size( server ) + string_size( vol_sep ) + string_size( volume ) + 1 + ctx->name_sz + 1;
+ char* path = malloc(path_sz);
+ if( path == NULL ) {
+ ctx->rc = RC(rcAlign, rcPath, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ if( (ctx->rc = string_printf(path, path_sz, &path_sz, "%s%s%s/%.*s", server, vol_sep, volume, ctx->name_sz, ctx->name)) == 0 ) {
+ *(ctx->path) = path;
+ } else {
+ free(path);
+ }
+ }
+ }
return ctx->found;
}
static
-rc_t RefSeqMgr_FindTable(const RefSeqMgr* cself, char const accession[], uint32_t accession_sz, VTable const **tbl)
+rc_t RefSeqMgr_FindTable(const RefSeqMgr* cself, char const accession[], uint32_t accession_sz, VTable const **tbl, char** path)
{
rc_t rc;
struct FindTable_ctx ctx;
@@ -294,6 +455,7 @@ rc_t RefSeqMgr_FindTable(const RefSeqMgr* cself, char const accession[], uint32_
ctx.found = false;
ctx.tbl = tbl;
ctx.rc = 0;
+ ctx.path = path;
rc = RefSeqMgr_ForEachVolume(cself, FindTable, &ctx);
if(rc == 0 && ctx.rc == 0 && !ctx.found) {
@@ -303,31 +465,64 @@ rc_t RefSeqMgr_FindTable(const RefSeqMgr* cself, char const accession[], uint32_
}
return rc ? rc : ctx.rc;
}
+#endif
-LIB_EXPORT rc_t CC RefSeqMgr_Make(const RefSeqMgr** cself, const VDBManager* vmgr, uint32_t reader_options, size_t cache, uint32_t keep_open_num)
+LIB_EXPORT rc_t CC RefSeqMgr_SetCache(RefSeqMgr const *const cself, size_t cache, uint32_t keep_open_num)
+{
+ if (cself) {
+ RefSeqMgr *const self = (RefSeqMgr *)cself;
+
+ self->cache = cache;
+ self->num_open_max = keep_open_num;
+ }
+ return 0;
+}
+
+LIB_EXPORT rc_t CC RefSeqMgr_Make( const RefSeqMgr** cself, const VDBManager* vmgr,
+ uint32_t reader_options, size_t cache, uint32_t keep_open_num )
{
rc_t rc = 0;
RefSeqMgr* obj = NULL;
- if( cself == NULL || vmgr == NULL ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
- } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
- } else if( (rc = KConfigMake(&obj->kfg, NULL)) == 0 &&
- (rc = VDBManagerAddRef(vmgr)) == 0 ) {
- BSTreeInit(&obj->tree);
- BSTreeInit(&obj->vdbs);
- obj->vmgr = vmgr;
- obj->cache = cache;
- obj->num_open_max = keep_open_num;
- obj->reader_options = reader_options;
+ if ( cself == NULL || vmgr == NULL )
+ {
+ rc = RC( rcAlign, rcIndex, rcConstructing, rcParam, rcNull );
}
- if( rc == 0 ) {
+ else
+ {
+ obj = calloc( 1, sizeof( *obj ) );
+ if ( obj == NULL )
+ {
+ rc = RC( rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ rc = KConfigMake( &obj->kfg, NULL );
+ if ( rc == 0 )
+ {
+ rc = VDBManagerAddRef( vmgr );
+ if ( rc == 0 )
+ {
+ BSTreeInit( &obj->tree );
+ BSTreeInit( &obj->vdbs );
+ obj->vmgr = vmgr;
+ obj->cache = cache;
+ obj->num_open_max = keep_open_num;
+ obj->reader_options = reader_options;
+ }
+ }
+ }
+ }
+
+ if ( rc == 0 )
+ {
*cself = obj;
- ALIGN_DBG("max_open: %u", obj->num_open_max);
- } else {
- RefSeqMgr_Release(obj);
- ALIGN_DBGERR(rc);
+/* ALIGN_DBG( "max_open: %u", obj->num_open_max ); */
+ }
+ else
+ {
+ RefSeqMgr_Release( obj );
+ ALIGN_DBGERR( rc );
}
return rc;
}
@@ -361,14 +556,28 @@ LIB_EXPORT rc_t CC RefSeqMgr_Release(const RefSeqMgr* cself)
return 0;
}
-LIB_EXPORT rc_t RefSeqMgr_Exists(const RefSeqMgr* cself, const char* accession, uint32_t accession_sz)
+LIB_EXPORT rc_t RefSeqMgr_Exists(const RefSeqMgr* cself, const char* accession, uint32_t accession_sz, char** path)
{
rc_t rc = 0;
if( cself == NULL || accession == NULL || accession_sz == 0 ) {
rc = RC(rcAlign, rcIndex, rcAccessing, rcParam, rcNull);
- } else {
- rc = RefSeqMgr_FindTable(cself, accession, accession_sz, NULL);
+ }
+ else {
+#if USE_OWN_REFSEQ_RESOLVER
+ rc = RefSeqMgr_FindTable(cself, accession, accession_sz, NULL, path);
+#else
+ VTable const *tbl = NULL;
+
+ /* if "accession" is not a path,
+ prepend special scheme to tell VResolver
+ to treat WGS accessions as Refseq */
+ if ( string_chr ( accession, accession_sz, '/' ) == NULL )
+ rc = VDBManagerOpenTableRead(cself->vmgr, &tbl, NULL, "ncbi-acc:%.*s?vdb-ctx=refseq", accession_sz, accession);
+ else
+ rc = VDBManagerOpenTableRead(cself->vmgr, &tbl, NULL, "%.*s", accession_sz, accession);
+ VTableRelease(tbl);
+#endif
}
return rc;
}
@@ -397,22 +606,9 @@ int CC RefSeq_Sort(const BSTNode* item, const BSTNode* node)
return i->accession_sz - n->accession_sz;
}
-static
-void CC RefSeq_Unused( BSTNode *node, void *data )
-{
- RefSeq* n = (RefSeq*)node;
- RefSeq** d = (RefSeq**)data;
-
- if( n->reader != NULL ) {
- if( *d == NULL || (*d)->usage > n->usage ) {
- *d = n;
- }
- }
-}
-
LIB_EXPORT rc_t CC RefSeqMgr_Read(const RefSeqMgr* cself, const char* seq_id, uint32_t seq_id_sz,
- int64_t offset, INSDC_coord_len len,
- INSDC_dna_text* buffer, INSDC_coord_len* written)
+ INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* written)
{
rc_t rc = 0;
const RefSeq* obj;
@@ -424,78 +620,144 @@ LIB_EXPORT rc_t CC RefSeqMgr_Read(const RefSeqMgr* cself, const char* seq_id, ui
return rc;
}
-LIB_EXPORT rc_t CC RefSeqMgr_GetSeq(const RefSeqMgr* cmgr, const RefSeq** cself, const char* seq_id, uint32_t seq_id_sz)
+static
+void CC RefSeq_Oldest( BSTNode *node, void *Data )
{
- rc_t rc = 0;
- RefSeq* obj = NULL;
- RefSeqMgr* mgr = (RefSeqMgr*)cmgr;
+ RefSeq const *const n = (RefSeq const *)node;
+ RefSeq const **const rslt = (RefSeq const **)Data;
+ RefSeq const *const d = *rslt;
+
+ if (n->reader != NULL && (d == NULL || n->usage < d->usage))
+ *rslt = n;
+}
- if( cmgr == NULL || cself == NULL || seq_id == NULL ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
- } else {
- String s;
- StringInit(&s, seq_id, seq_id_sz, seq_id_sz);
- if( cmgr->last_used != NULL && RefSeq_Cmp(&s, &cmgr->last_used->dad) == 0 ) {
- obj = cmgr->last_used;
- } else {
- *cself = NULL;
- obj = (RefSeq*)BSTreeFind(&cmgr->tree, &s, RefSeq_Cmp);
- if( obj == NULL ) {
- if( (obj = calloc(1, sizeof(*obj) + seq_id_sz)) == NULL ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
- } else {
- memcpy(obj->accession, seq_id, seq_id_sz);
- obj->accession_sz = seq_id_sz;
- obj->mgr = cmgr;
- if( (rc = BSTreeInsertUnique(&mgr->tree, &obj->dad, NULL, RefSeq_Sort)) != 0 ) {
- free(obj);
- }
- }
- }
+static
+rc_t RefSeqMgr_GetReader(RefSeqMgr *const mgr, RefSeq *const obj)
+{
+ rc_t rc = 0;
+
+ if (obj->reader == NULL) {
+ VTable const *tbl;
+
+ while (mgr->num_open_max > 0 && mgr->num_open >= mgr->num_open_max) {
+ RefSeq *old;
+
+ REMOVE_OLDEST:
+ old = NULL;
+ BSTreeForEach(&mgr->tree, false, RefSeq_Oldest, &old);
+ if (old == NULL)
+ break;
+
+ TableReaderRefSeq_Whack(old->reader);
+ old->reader = NULL;
+ --mgr->num_open;
}
+#if USE_OWN_REFSEQ_RESOLVER
+ rc = RefSeqMgr_FindTable(mgr, obj->accession, obj->accession_sz, &tbl, NULL);
+#else
+ /* if "accession" is not a path,
+ prepend special scheme to tell VResolver
+ to treat WGS accessions as Refseq */
+ if ( string_chr ( obj -> accession, obj -> accession_sz, '/' ) == NULL )
+ rc = VDBManagerOpenTableRead(mgr->vmgr, &tbl, NULL, "ncbi-acc:%.*s?vdb-ctx=refseq", obj->accession_sz, obj->accession);
+ else
+ rc = VDBManagerOpenTableRead(mgr->vmgr, &tbl, NULL, "%.*s", obj->accession_sz, obj->accession);
+#endif
+ if (rc == 0)
+ rc = TableReaderRefSeq_MakeTable(&obj->reader, mgr->vmgr, tbl,
+ mgr->reader_options, mgr->cache);
+ if (rc == 0) {
+ VTableRelease(tbl);
+ ++mgr->num_open;
+ }
+ else if ( GetRCObject(rc) == rcMemory &&
+ (GetRCState (rc) == rcInsufficient || GetRCState(rc) == rcExhausted))
+ {
+ if (mgr->num_open_max == 0 || mgr->num_open < mgr->num_open_max)
+ return rc;
+ rc = 0;
+ goto REMOVE_OLDEST;
+ }
+ else
+ return rc;
}
- if( rc == 0 ) {
- if( obj->reader == NULL ) {
- const VTable* tbl;
-
- if( cmgr->num_open_max > 0 && cmgr->num_open >= cmgr->num_open_max ) {
- RefSeq* old = NULL;
- BSTreeForEach(&cmgr->tree, false, RefSeq_Unused, &old);
- if( old != NULL ) {
- TableReaderRefSeq_Whack(old->reader);
- old->reader = NULL;
- mgr->num_open--;
- }
- }
- if( (rc = RefSeqMgr_FindTable(cmgr, obj->accession, obj->accession_sz, &tbl)) == 0 ) {
- if( (rc = TableReaderRefSeq_MakeTable(&obj->reader, cmgr->vmgr, tbl,
- cmgr->reader_options, cmgr->cache)) == 0 ) {
- mgr->num_open++;
+ mgr->last_used = obj;
+ return rc;
+}
+
+static
+rc_t RefSeqMgr_GetSeqInternal(RefSeqMgr *const mgr, RefSeq const **const cself,
+ char const seq_id[], unsigned const seq_id_sz)
+{
+
+ rc_t rc;
+ RefSeq *obj;
+ String s;
+
+ StringInit(&s, seq_id, seq_id_sz, seq_id_sz);
+
+ *cself = NULL;
+ if (mgr->last_used != NULL && RefSeq_Cmp(&s, &mgr->last_used->dad) == 0)
+ obj = mgr->last_used;
+ else {
+ obj = (RefSeq*)BSTreeFind(&mgr->tree, &s, RefSeq_Cmp);
+ if (obj == NULL) {
+ obj = calloc(1, sizeof(*obj) + seq_id_sz);
+ if (obj) {
+ memcpy(obj->accession, seq_id, seq_id_sz);
+ obj->accession_sz = seq_id_sz;
+ obj->mgr = mgr;
+ rc = BSTreeInsertUnique(&mgr->tree, &obj->dad, NULL, RefSeq_Sort);
+ if (rc) {
+ free(obj);
+ return rc;
}
- VTableRelease(tbl);
}
- }
- if( rc == 0 ) {
- mgr->last_used = obj;
+ else
+ return RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
}
}
- if( rc == 0 ) {
- *cself = obj;
- } else {
+ rc = RefSeqMgr_GetReader(mgr, obj);
+ *cself = obj;
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC RefSeqMgr_GetSeq(const RefSeqMgr* cmgr, const RefSeq** cself, const char* seq_id, uint32_t seq_id_sz)
+{
+ rc_t rc;
+
+ if (cmgr == NULL || cself == NULL || seq_id == NULL)
+ rc = RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
+ else
+ rc = RefSeqMgr_GetSeqInternal((RefSeqMgr *)cmgr, cself, seq_id, seq_id_sz);
+
+ if (rc)
ALIGN_DBGERRP("SEQ_ID: '%.*s'", rc, seq_id_sz, seq_id);
- }
+
return rc;
}
-LIB_EXPORT rc_t CC RefSeq_Read(const RefSeq* cself, int64_t offset, INSDC_coord_len len,
- INSDC_dna_text* buffer, INSDC_coord_len* written)
+LIB_EXPORT rc_t CC RefSeq_Read(const RefSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* written)
{
rc_t rc = 0;
if( cself == NULL || buffer == NULL || written == NULL ) {
rc = RC(rcAlign, rcFile, rcReading, rcParam, rcNull);
- } else if( (rc = TableReaderRefSeq_Read(cself->reader, offset, len, buffer, written)) == 0 ) {
- ((RefSeq*)cself)->usage = ++((RefSeqMgr*)cself->mgr)->usage;
+ }
+ else {
+ RefSeq *const self = (RefSeq *)cself;
+ RefSeqMgr *const mgr = (RefSeqMgr *)self->mgr;
+
+ rc = RefSeqMgr_GetReader(mgr, self);
+ if (rc == 0) {
+ TableReaderRefSeq const *const reader = self->reader;
+
+ rc = TableReaderRefSeq_Read(reader, offset, len, buffer, written);
+ if (rc == 0)
+ self->usage = ++mgr->usage;
+ }
}
ALIGN_DBGERR(rc);
return rc;
@@ -514,7 +776,7 @@ LIB_EXPORT rc_t CC RefSeq_Circular(const RefSeq* cself, bool* circular)
return rc;
}
-LIB_EXPORT rc_t CC RefSeq_SeqLength(const RefSeq* cself, uint64_t* len)
+LIB_EXPORT rc_t CC RefSeq_SeqLength(const RefSeq* cself, INSDC_coord_len* len)
{
rc_t rc = 0;
diff --git a/libs/align/writer-alignment.c b/libs/align/writer-alignment.c
index 7605f60..63b54f7 100644
--- a/libs/align/writer-alignment.c
+++ b/libs/align/writer-alignment.c
@@ -28,6 +28,7 @@
#include <klib/rc.h>
#include <insdc/insdc.h>
#include <vdb/database.h>
+#include <vdb/cursor.h>
#include <align/writer-alignment.h>
#include "writer-priv.h"
#include "reader-cmn.h"
@@ -44,38 +45,41 @@
static const TableWriterColumn TableWriterAlgn_cols[ewalgn_cn_Last + 1] =
{
/* order is important, see enum in .h !!! */
- {0, "TMP_KEY_ID", sizeof(uint32_t) * 8, ewcol_Temporary | ewcol_Ignore},
+ {0, "TMP_KEY_ID", sizeof(uint64_t) * 8, ewcol_Temporary | ewcol_Ignore},
{0, "PLOIDY", sizeof(uint32_t) * 8, ewcol_Ignore},
{0, "SEQ_SPOT_ID", sizeof(int64_t) * 8, ewcol_IsArray | ewcol_Ignore},
{0, "SEQ_READ_ID", sizeof(INSDC_coord_one) * 8, ewcol_IsArray },
{0, "READ_START", sizeof(INSDC_coord_zero) * 8, ewcol_IsArray | ewcol_Ignore},
{0, "READ_LEN", sizeof(INSDC_coord_len) * 8, ewcol_IsArray | ewcol_Ignore},
- {0, "REF_ID", sizeof(int64_t) * 8, ewcol_IsArray | ewcol_Ignore},
- {0, "REF_START", sizeof(INSDC_coord_zero) * 8, ewcol_IsArray | ewcol_Ignore},
- {0, "GLOBAL_REF_START", sizeof(uint64_t) * 8, ewcol_IsArray},
- {0, "REF_LEN", sizeof(INSDC_coord_len) * 8, ewcol_IsArray | ewcol_Ignore},
- {0, "REF_ORIENTATION", sizeof(bool) * 8, ewcol_IsArray},
+ {0, "REF_ID", sizeof(int64_t) * 8, ewcol_Ignore},
+ {0, "REF_START", sizeof(INSDC_coord_zero) * 8, ewcol_Ignore},
+ {0, "GLOBAL_REF_START", sizeof(uint64_t) * 8, 0},
+ {0, "REF_LEN", sizeof(INSDC_coord_len) * 8, 0},
+ {0, "REF_ORIENTATION", sizeof(bool) * 8, 0},
{0, "REF_PLOIDY", sizeof(uint32_t) * 8, ewcol_IsArray | ewcol_Ignore},
{0, "MATE_REF_ORIENTATION", sizeof(bool) * 8, ewcol_Ignore},
{0, "MATE_REF_ID", sizeof(int64_t) * 8, ewcol_Ignore},
{0, "MATE_REF_POS", sizeof(INSDC_coord_zero) * 8, ewcol_Ignore},
{0, "MATE_ALIGN_ID", sizeof(int64_t) * 8, ewcol_Ignore},
{0, "TEMPLATE_LEN", sizeof(INSDC_coord_zero) * 8, ewcol_Ignore},
- {0, "MAPQ", sizeof(int32_t) * 8, ewcol_IsArray},
+ {0, "MAPQ", sizeof(int32_t) * 8, 0},
{0, "HAS_MISMATCH", sizeof(bool) * 8, ewcol_IsArray},
{0, "(bool)HAS_REF_OFFSET", sizeof(bool) * 8, ewcol_IsArray},
{0, "MISMATCH", sizeof(INSDC_dna_text) * 8, ewcol_IsArray},
- {0, "REF_OFFSET", sizeof(int32_t) * 8, ewcol_IsArray}
+ {0, "REF_OFFSET", sizeof(int32_t) * 8, ewcol_IsArray},
+ {0, "EVIDENCE_ALIGNMENT_IDS", sizeof(int64_t) * 8, ewcol_IsArray | ewcol_Ignore},
+ {0, "ALIGN_GROUP", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore }
};
static const TableReaderColumn TableAlgnReadTmpKey_cols[] = {
- {0, "TMP_KEY_ID", NULL, 0, 0},
- {0, NULL, NULL, 0, 0}
+ {0, "TMP_KEY_ID", {NULL}, 0, 0},
+ {0, NULL, {NULL}, 0, 0}
};
struct TableWriterAlgn {
uint32_t options;
const TableWriter* base;
+ const char* ref_table_name;
uint8_t cursor_id;
TableWriterColumn cols[sizeof(TableWriterAlgn_cols)/sizeof(TableWriterAlgn_cols[0])];
uint8_t spotid_cursor_id;
@@ -98,17 +102,22 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Make(const TableWriterAlgn** cself, VDatabase
if( self == NULL ) {
rc = RC(rcAlign, rcFormatter, rcConstructing, rcMemory, rcExhausted);
} else {
+ self->ref_table_name = "REFERENCE";
memcpy(self->cols, TableWriterAlgn_cols, sizeof(TableWriterAlgn_cols));
switch(type) {
case ewalgn_tabletype_PrimaryAlignment:
tbl_nm = "PRIMARY_ALIGNMENT";
+ self->cols[ewalgn_cn_ALIGN_GROUP].flags &= ~ewcol_Ignore;
break;
case ewalgn_tabletype_SecondaryAlignment:
tbl_nm = "SECONDARY_ALIGNMENT";
- self->cols[ewalgn_cn_REF_LEN].flags &= ~ewcol_Ignore;
+#if 0
self->cols[ewalgn_cn_HAS_MISMATCH].flags |= ewcol_Ignore;
self->cols[ewalgn_cn_MISMATCH].flags |= ewcol_Ignore;
-
+#else
+ self->cols[ewalgn_cn_MISMATCH].name = "TMP_MISMATCH";
+ self->cols[ewalgn_cn_HAS_MISMATCH].name = "TMP_HAS_MISMATCH";
+#endif
self->cols[ewalgn_cn_MATE_REF_ORIENTATION].flags &= ~ewcol_Ignore;
self->cols[ewalgn_cn_MATE_REF_ID].flags &= ~ewcol_Ignore;
self->cols[ewalgn_cn_MATE_REF_POS].flags &= ~ewcol_Ignore;
@@ -119,14 +128,21 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Make(const TableWriterAlgn** cself, VDatabase
tbl_nm = "EVIDENCE_INTERVAL";
options |= ewalgn_co_unsorted;
options |= ewalgn_co_PLOIDY;
+ self->cols[ewalgn_cn_SEQ_SPOT_ID].flags |= ewcol_Ignore;
self->cols[ewalgn_cn_SEQ_READ_ID].flags |= ewcol_Ignore;
+ self->cols[ewalgn_cn_EVIDENCE_ALIGNMENT_IDS].flags &= ~ewcol_Ignore;
break;
case ewalgn_tabletype_EvidenceAlignment:
tbl_nm = "EVIDENCE_ALIGNMENT";
- self->cols[ewalgn_cn_REF_LEN].flags &= ~ewcol_Ignore;
+ self->ref_table_name = "EVIDENCE_INTERVAL";
self->cols[ewalgn_cn_REF_PLOIDY].flags &= ~ewcol_Ignore;
+#if 0
self->cols[ewalgn_cn_HAS_MISMATCH].flags |= ewcol_Ignore;
self->cols[ewalgn_cn_MISMATCH].flags |= ewcol_Ignore;
+#else
+ self->cols[ewalgn_cn_MISMATCH].name = "TMP_MISMATCH";
+ self->cols[ewalgn_cn_HAS_MISMATCH].name = "TMP_HAS_MISMATCH";
+#endif
options |= ewalgn_co_unsorted;
break;
default:
@@ -147,8 +163,20 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Make(const TableWriterAlgn** cself, VDatabase
self->cols[ewalgn_cn_REF_ID].flags &= ~ewcol_Ignore;
self->cols[ewalgn_cn_REF_START].flags &= ~ewcol_Ignore;
self->cols[ewalgn_cn_GLOBAL_REF_START].flags |= ewcol_Ignore;
+ if( type == ewalgn_tabletype_SecondaryAlignment ) {
+ self->cols[ewalgn_cn_MISMATCH].name = "TMP_MISMATCH";
+ self->cols[ewalgn_cn_MISMATCH].flags &= ~ewcol_Ignore;
+ self->cols[ewalgn_cn_HAS_MISMATCH].name = "TMP_HAS_MISMATCH";
+ self->cols[ewalgn_cn_HAS_MISMATCH].flags &= ~ewcol_Ignore;
+ }
+ }
+ if( options & ewalgn_co_MATE_ALIGN_ID_only ) {
+ self->cols[ewalgn_cn_MATE_REF_ORIENTATION].flags |= ewcol_Ignore;
+ self->cols[ewalgn_cn_MATE_REF_ID].flags |= ewcol_Ignore;
+ self->cols[ewalgn_cn_MATE_REF_POS].flags |= ewcol_Ignore;
+ self->cols[ewalgn_cn_TEMPLATE_LEN].flags |= ewcol_Ignore;
}
- if( (rc = TableWriter_Make(&self->base, db, tbl_nm)) == 0 ) {
+ if( (rc = TableWriter_Make(&self->base, db, tbl_nm, NULL)) == 0 ) {
rc = TableWriter_AddCursor(self->base, self->cols, sizeof(self->cols)/sizeof(self->cols[0]), &self->cursor_id);
self->options = options;
}
@@ -168,7 +196,20 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Whack(const TableWriterAlgn* cself, bool comm
{
rc_t rc = 0;
if( cself != NULL ) {
+ VTable* vtbl;
+
TableReader_Whack(cself->tmpkey_reader);
+ if( (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 ) {
+ KMetadata* meta;
+ if( (rc = VTableOpenMetadataUpdate(vtbl, &meta)) == 0 ) {
+ KMDataNode* node;
+ if( (rc = KMetadataOpenNodeUpdate(meta, &node, "CONFIG/REF_TABLE")) == 0 ) {
+ rc = KMDataNodeWriteCString(node, cself->ref_table_name);
+ KMDataNodeRelease(node);
+ }
+ KMetadataRelease(meta);
+ }
+ }
rc = TableWriter_Whack(cself->base, commit, rows);
free((TableWriterAlgn*)cself);
}
@@ -208,17 +249,24 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Write(const TableWriterAlgn* cself, const Tab
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_GLOBAL_REF_START], data->global_ref_start);
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_HAS_MISMATCH], data->has_mismatch);
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MISMATCH], data->mismatch);
- TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_REF_LEN], data->ref_len);
+ TW_COL_WRITE_VAR(cself->base, cself->cols[ewalgn_cn_REF_LEN], data->ref_len);
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_REF_ORIENTATION], data->ref_orientation);
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_REF_PLOIDY], data->ref_ploidy);
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MAPQ], data->mapq);
+ if( data->mate_align_id.elements != 1 ) {
+ TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_ALIGN_ID], data->mate_align_id);
+ } else {
+ TW_COL_WRITE_BUF(cself->base, cself->cols[ewalgn_cn_MATE_ALIGN_ID], data->mate_align_id.buffer,
+ ((const int64_t*)(data->mate_align_id.buffer))[0] ? 1 : 0);
+ }
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_REF_ORIENTATION], data->mate_ref_orientation);
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_REF_ID], data->mate_ref_id);
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_REF_POS], data->mate_ref_pos);
- TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_ALIGN_ID], data->mate_align_id);
TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_TEMPLATE_LEN], data->template_len);
+ TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_EVIDENCE_ALIGNMENT_IDS], data->alingment_ids);
+ TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_ALIGN_GROUP], data->align_group);
if( rc == 0 ) {
rc = TableWriter_CloseRow(cself->base);
@@ -239,7 +287,7 @@ LIB_EXPORT rc_t CC TableWriterAlgn_TmpKeyStart(const TableWriterAlgn* cself)
ALIGN_DBGERR(rc);
} else if( (rc = TableWriter_CloseCursor(cself->base, cself->cursor_id, NULL)) == 0 ) {
TableWriterAlgn* self = (TableWriterAlgn*)cself;
- const VTable* vtbl = NULL;
+ VTable* vtbl = NULL;
memcpy(&self->cols_read_tmpkey, &TableAlgnReadTmpKey_cols, sizeof(TableAlgnReadTmpKey_cols));
if( (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 &&
(rc = TableReader_Make(&self->tmpkey_reader, vtbl, self->cols_read_tmpkey, 50 * 1024 * 1024)) == 0 ) {
@@ -255,7 +303,7 @@ LIB_EXPORT rc_t CC TableWriterAlgn_TmpKeyStart(const TableWriterAlgn* cself)
return rc;
}
-LIB_EXPORT rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t rowid, uint32_t* key_id)
+LIB_EXPORT rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t rowid, uint64_t* key_id)
{
rc_t rc = 0;
@@ -266,7 +314,7 @@ LIB_EXPORT rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t
rc = RC( rcAlign, rcType, rcReading, rcMode, rcNotOpen);
ALIGN_DBGERR(rc);
} else if( (rc = TableReader_ReadRow(cself->tmpkey_reader, rowid)) == 0 ) {
- memcpy(key_id, cself->cols_read_tmpkey[0].base, sizeof(*key_id));
+ memcpy(key_id, cself->cols_read_tmpkey[0].base.var, sizeof(*key_id));
}
return rc;
}
@@ -289,45 +337,3 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Write_SpotId(const TableWriterAlgn* cself, in
}
return rc;
}
-
-LIB_EXPORT rc_t CC TableWriterAlgn_ReverseCompliment(const INSDC_dna_text* seq, INSDC_dna_text* cmpl, uint32_t len)
-{
- rc_t rc = 0;
- uint32_t i;
- static INSDC_dna_text compl[256] = "~";
-
- if( seq == NULL || compl == NULL ) {
- rc = RC( rcAlign, rcType, rcConverting, rcParam, rcNull);
- } else {
- if( compl[0] == '~' ) {
- INSDC_dna_text* x = (INSDC_dna_text*)&compl[0];
- memset(x, 0, sizeof(compl));
- x['A'] = x['a'] = 'T';
- x['T'] = x['t'] = 'A';
- x['U'] = x['u'] = 'A';
- x['G'] = x['g'] = 'C';
- x['C'] = x['c'] = 'G';
- x['Y'] = x['y'] = 'R';
- x['R'] = x['r'] = 'Y';
- x['S'] = x['s'] = 'S';
- x['W'] = x['w'] = 'W';
- x['K'] = x['k'] = 'M';
- x['M'] = x['m'] = 'K';
- x['B'] = x['b'] = 'V';
- x['D'] = x['d'] = 'H';
- x['H'] = x['h'] = 'D';
- x['V'] = x['v'] = 'B';
- x['N'] = x['n'] = 'N';
- }
- cmpl += len;
- for(i = 0; i < len; i++) {
- *--cmpl= compl[(int)seq[i]];
- if( *cmpl == '\0' ) {
- rc = RC(rcAlign, rcFormatter, rcWriting, rcData, rcInvalid);
- break;
- }
- }
- }
- ALIGN_DBGERR(rc);
- return rc;
-}
diff --git a/libs/align/writer-cmn.c b/libs/align/writer-cmn.c
index d99262b..df4b0fa 100644
--- a/libs/align/writer-cmn.c
+++ b/libs/align/writer-cmn.c
@@ -25,6 +25,10 @@
*/
#include <klib/rc.h>
#include <klib/log.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <kdb/meta.h>
+#include <kapp/main.h>
#include <vdb/table.h>
#include <vdb/cursor.h>
#include <vdb/schema.h>
@@ -36,6 +40,7 @@
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#define TW_MAX_CURSORS 8
@@ -67,11 +72,11 @@ rc_t TableWriter_Init(TableWriter** self, const char* table, const char* table_p
} else if( (*self = calloc(1, sizeof(**self))) == NULL ) {
rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
} else {
- (*self)->table = strdup(table);
+ (*self)->table = string_dup( table, string_size( table ) );
if( (*self)->table == NULL ) {
rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
} else if( table_path != NULL ) {
- (*self)->table_path = strdup(table_path);
+ (*self)->table_path = string_dup( table_path, string_size( table_path ) );
if( (*self)->table_path == NULL ) {
rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
}
@@ -96,7 +101,7 @@ rc_t TableWriter_OpenCursor(const TableWriter* cself, uint8_t cursor_id)
} else if( self->is_update ) {
rc = VDatabaseOpenTableUpdate(self->vdb, &self->vtbl, self->table);
} else {
- rc = VDatabaseCreateTable(self->vdb, &self->vtbl, self->table, kcmCreate | kcmMD5, self->table);
+ rc = VDatabaseCreateTable(self->vdb, &self->vtbl, self->table, kcmCreate | kcmMD5, self->table_path);
}
}
@@ -129,14 +134,14 @@ rc_t TableWriter_OpenCursor(const TableWriter* cself, uint8_t cursor_id)
return rc;
}
-rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* table)
+rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* table, const char* table_path)
{
rc_t rc = 0;
TableWriter* obj = NULL;
if( cself == NULL ) {
rc = RC(rcAlign, rcType, rcConstructing, rcParam, rcNull);
- } else if( (rc = TableWriter_Init(&obj, table, NULL)) == 0 &&
+ } else if( (rc = TableWriter_Init(&obj, table, table_path ? table_path : table)) == 0 &&
(rc = VDatabaseAddRef(db)) == 0 ) {
obj->vdb = db;
}
@@ -145,7 +150,7 @@ rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* t
ALIGN_DBG("table %s opened for writing", (*cself)->table);
} else {
TableWriter_Whack(obj, false, NULL);
- ALIGN_DBGERRP("table %s", rc, table);
+ ALIGN_DBGERRP("table %s at %s", rc, table, table_path);
}
return rc;
}
@@ -196,7 +201,7 @@ rc_t CC TableWriter_MakeUpdate(const TableWriter** cself, VDatabase *db, const c
return rc;
}
-rc_t CC TableWriter_GetVTable(const TableWriter* cself, const VTable** vtbl)
+rc_t CC TableWriter_GetVTable(const TableWriter* cself, VTable** vtbl)
{
rc_t rc = 0;
@@ -208,6 +213,66 @@ rc_t CC TableWriter_GetVTable(const TableWriter* cself, const VTable** vtbl)
return rc;
}
+rc_t CC TableWriter_Sign(const TableWriter* cself, const char* argv0, const char* argv0_date, const char* app_name, ver_t app_version)
+{
+ rc_t rc = 0;
+ KMetadata* meta = NULL;
+ KMDataNode* root = NULL;
+
+ if( cself == NULL || argv0 == NULL || argv0_date == NULL || app_name == NULL || app_version == 0 ) {
+ rc = RC(rcAlign, rcMetadata, rcWriting, rcParam, rcNull);
+ } else if( (rc = VTableOpenMetadataUpdate(cself->vtbl, &meta)) == 0 &&
+ (rc = KMetadataOpenNodeUpdate(meta, &root, "/")) == 0 ) {
+ KMDataNode *node = NULL;
+ if( (rc = KMDataNodeOpenNodeUpdate(root, &node, "SOFTWARE")) == 0 ) {
+ char str_vers[64];
+ KMDataNode *subNode = NULL;
+ if( (rc = KMDataNodeOpenNodeUpdate(node, &subNode, "loader")) == 0 ) {
+ if( (rc = string_printf(str_vers, sizeof(str_vers), NULL, "%V", KAppVersion())) == 0 ) {
+ rc = KMDataNodeWriteAttr(subNode, "vers", str_vers);
+ }
+ if(rc == 0) {
+ rc = KMDataNodeWriteAttr(subNode, "date", argv0_date);
+ }
+ if(rc == 0) {
+ const char* tool_name = strrchr(argv0, '/');
+ const char* r = strrchr(argv0, '\\');
+ if( tool_name != NULL && r != NULL && tool_name < r ) {
+ tool_name = r;
+ }
+ if( tool_name++ == NULL) {
+ tool_name = argv0;
+ }
+ rc = KMDataNodeWriteAttr(subNode, "name", tool_name);
+ }
+ KMDataNodeRelease(subNode);
+ }
+ if(rc == 0 && (rc = KMDataNodeOpenNodeUpdate(node, &subNode, "formatter")) == 0 ) {
+ if( (rc = string_printf(str_vers, sizeof(str_vers), NULL, "%V", app_version)) == 0 ) {
+ rc = KMDataNodeWriteAttr(subNode, "vers", str_vers);
+ }
+ if(rc == 0) {
+ rc = KMDataNodeWriteAttr(subNode, "name", app_name ? app_name : "internal");
+ }
+ KMDataNodeRelease(subNode);
+ }
+ KMDataNodeRelease(node);
+ }
+ if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(root, &node, "LOAD")) == 0 ) {
+ KMDataNode *subNode = NULL;
+ if( (rc = KMDataNodeOpenNodeUpdate(node, &subNode, "timestamp")) == 0 ) {
+ time_t t = time(NULL);
+ rc = KMDataNodeWrite(subNode, &t, sizeof(t));
+ KMDataNodeRelease(subNode);
+ }
+ KMDataNodeRelease(node);
+ }
+ }
+ KMDataNodeRelease(root);
+ KMetadataRelease(meta);
+ return rc;
+}
+
rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
{
rc_t rc = 0;
@@ -223,10 +288,12 @@ rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
if( self->cursors[i].col_qty > 0 ) {
self->curr = &self->cursors[i];
if( self->curr->cursor != NULL ) {
+ rc_t rc1 = 0, rc2;
if( commit ) {
- rc = VCursorCommit(self->curr->cursor);
+ rc1 = VCursorCommit(self->curr->cursor);
}
- VCursorRelease(self->curr->cursor);
+ rc2 = VCursorRelease(self->curr->cursor);
+ rc = rc ? rc : (rc1 ? rc1 : rc2);
self->curr->cursor = NULL;
}
if( i == 0 && rows != NULL ) {
@@ -239,11 +306,11 @@ rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
self->curr = &self->cursors[i];
for(j = 0; j < self->curr->col_qty; j++) {
if( self->curr->cols[j].idx != 0 && (self->curr->cols[j].flags & ewcol_Temporary) ) {
- if( (rc = VTableDropColumn(self->vtbl, self->curr->cols[j].name)) != 0 ) {
- (void)PLOGERR(klogWarn, (klogWarn, rc,
+ rc_t rc1;
+ if( (rc1 = VTableDropColumn(self->vtbl, self->curr->cols[j].name)) != 0 ) {
+ (void)PLOGERR(klogWarn, (klogWarn, rc1,
"table $(table) failed to drop temporary column '$(column)'",
"table=%s,column=%s", self->table, self->curr->cols[j].name));
- rc = 0;
} else {
ALIGN_DBG("table %s dropped tmp col %s", self->table, self->curr->cols[j].name);
}
@@ -251,7 +318,7 @@ rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
}
}
}
- if( commit && rc == 0 ) {
+ if( commit && rc == 0 && self->vtbl != NULL ) {
rc = VTableReindex(self->vtbl);
}
VTableRelease(self->vtbl);
@@ -334,6 +401,25 @@ rc_t CC TableWriter_CloseCursor(const TableWriter* cself, uint8_t cursor_id, uin
return rc;
}
+rc_t CC TableWriter_Flush(const TableWriter *cself, const uint8_t cursor_id)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || cursor_id >= TW_MAX_CURSORS || cself->cursors[cursor_id].col_qty == 0 ) {
+ rc = RC(rcAlign, rcType, rcOpening, rcParam, rcInvalid);
+ ALIGN_DBGERR(rc);
+ }
+ else if( cself->cursors[cursor_id].cursor != NULL ) {
+ rc = VCursorFlushPage(cself->cursors[cursor_id].cursor);
+ if( rc == 0 ) {
+ ALIGN_DBG("table %s cursor %hu flushed", cself->table, cursor_id);
+ } else {
+ ALIGN_DBGERRP("table %s cursor %hu flushing", rc, cself->table, cursor_id);
+ }
+ }
+ return rc;
+}
+
rc_t CC TableWriter_OpenRow(const TableWriter* cself, int64_t* rowid, const uint8_t cursor_id)
{
rc_t rc = 0;
diff --git a/libs/align/writer-priv.h b/libs/align/writer-priv.h
index 199c92b..a9099a8 100644
--- a/libs/align/writer-priv.h
+++ b/libs/align/writer-priv.h
@@ -29,6 +29,7 @@
#include <vdb/manager.h>
#include <vdb/database.h>
#include <vdb/table.h>
+#include <kdb/meta.h>
#include <align/writer-cmn.h>
@@ -48,7 +49,7 @@ typedef struct TableWriterColumn_struct {
typedef struct TableWriter TableWriter;
-rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* table);
+rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* table, const char* table_path /* NULL */);
rc_t CC TableWriter_MakeMgr(const TableWriter** cself, VDBManager* mgr, const char* schema_path, const char* type, const char* table_path);
@@ -57,7 +58,9 @@ rc_t CC TableWriter_MakeUpdate(const TableWriter** cself, VDatabase *db, const c
/* add scursor based on column list */
rc_t CC TableWriter_AddCursor(const TableWriter* cself, TableWriterColumn* cols, uint32_t col_qty, uint8_t* cursor_id);
-rc_t CC TableWriter_GetVTable(const TableWriter* cself, const VTable** vtbl);
+rc_t CC TableWriter_GetVTable(const TableWriter* cself, VTable** vtbl);
+
+rc_t CC TableWriter_Sign(const TableWriter* cself, const char* argv0, const char* argv0_date, const char* app_name, ver_t app_version);
/* optionally return internal vtbl still open but committed */
rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows);
@@ -65,6 +68,9 @@ rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
/* commits and closes cursor_id, returns number of rows written in cursor, optionally */
rc_t CC TableWriter_CloseCursor(const TableWriter* cself, uint8_t cursor_id, uint64_t* rows);
+/* flushes any pending writes into the table */
+rc_t CC TableWriter_Flush(const TableWriter *cself, const uint8_t cursor_id);
+
/* CANNOT OPEN ROWS IN MULTIPLE CURSORS AT ONCE
Use sequence:
OpenRow
diff --git a/libs/align/writer-ref.c b/libs/align/writer-ref.c
index bbde6d1..d4d04a9 100644
--- a/libs/align/writer-ref.c
+++ b/libs/align/writer-ref.c
@@ -26,6 +26,7 @@
#include <align/extern.h>
#include <klib/rc.h>
+#include <kfs/file.h>
#include <insdc/insdc.h>
#include <vdb/table.h>
#include <align/writer-refseq.h>
@@ -62,8 +63,11 @@ static const TableWriterColumn TableWriterRefCoverage_cols[ewrefcv_cn_Last + 1]
{0, "CGRAPH_LOW", sizeof(uint8_t) * 8, 0},
{0, "CGRAPH_MISMATCHES", sizeof(uint32_t) * 8, 0},
{0, "CGRAPH_INDELS", sizeof(uint32_t) * 8, 0},
+ {0, "OVERLAP_REF_POS", sizeof(INSDC_coord_zero) * 8, ewcol_IsArray},
+ {0, "OVERLAP_REF_LEN", sizeof(INSDC_coord_len) * 8, ewcol_IsArray},
{0, "PRIMARY_ALIGNMENT_IDS", sizeof(int64_t) * 8, ewcol_IsArray},
- {0, "SECONDARY_ALIGNMENT_IDS", sizeof(int64_t) * 8, ewcol_IsArray}
+ {0, "SECONDARY_ALIGNMENT_IDS", sizeof(int64_t) * 8, ewcol_IsArray},
+ {0, "EVIDENCE_INTERVAL_IDS", sizeof(int64_t) * 8, ewcol_IsArray}
};
struct TableWriterRef {
@@ -98,7 +102,7 @@ rc_t CC TableWriterRef_Make(const TableWriterRef** cself, VDatabase* db, const u
if( !(options & ewref_co_QUALITY) ) {
self->cols_data[ewrefd_cn_QUALITY].flags |= ewcol_Ignore;
}
- if( (rc = TableWriter_Make(&self->base, db, "REFERENCE")) == 0 &&
+ if( (rc = TableWriter_Make(&self->base, db, "REFERENCE", NULL)) == 0 &&
(rc = TableWriter_AddCursor(self->base, self->cols_data,
sizeof(self->cols_data) / sizeof(self->cols_data[0]), &self->cursor_id)) == 0 ) {
self->options = options;
@@ -171,13 +175,17 @@ rc_t TableWriterRef_WriteDefaults(const TableWriterRef* cself)
ReferenceSeqCoverage c;
memset(&c, 0, sizeof(c));
- c.primary_ids.buffer = c.secondary_ids.buffer = &c;
TW_COL_WRITE_DEF_VAR(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_CGRAPH_HIGH], c.low);
TW_COL_WRITE_DEF_VAR(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_CGRAPH_LOW], c.high);
TW_COL_WRITE_DEF_VAR(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_CGRAPH_MISMATCHES], c.mismatches);
TW_COL_WRITE_DEF_VAR(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_CGRAPH_INDELS], c.indels);
- TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], c.primary_ids);
- TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], c.secondary_ids);
+ TW_COL_WRITE_DEF_BUF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_OVERLAP_REF_POS],
+ c.overlap_ref_pos, sizeof(c.overlap_ref_pos) / sizeof(c.overlap_ref_pos[0]));
+ TW_COL_WRITE_DEF_BUF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_OVERLAP_REF_LEN],
+ c.overlap_ref_len, sizeof(c.overlap_ref_len) / sizeof(c.overlap_ref_len[0]));
+ TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], c.ids[ewrefcov_primary_table]);
+ TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], c.ids[ewrefcov_secondary_table]);
+ TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_EVIDENCE_INTERVAL_IDS], c.ids[ewrefcov_evidence_table]);
}
}
return rc;
@@ -233,8 +241,10 @@ rc_t CC TableWriterRef_Write(const TableWriterRef* cself, const TableWriterRefDa
ALIGN_DBGERRP("%s is longer than %s", rc, cself->cols_data[ewrefd_cn_READ].name, cself->cols_data[ewrefd_cn_MAX_SEQ_LEN].name);
} else if( (rc = TableWriter_OpenRow(cself->base, rowid, cself->cursor_id)) == 0 ) {
const INSDC_dna_text* b = data->read.buffer;
- INSDC_coord_len len = data->read.elements;
+ INSDC_coord_len const len = data->read.elements;
bool write_read = data->seq_id.elements < 1 || data->force_READ_write;
+ INSDC_coord_len trim_len = len;
+
if( cself->last_seq_id_len != data->seq_id.elements ||
strncmp(cself->last_seq_id, data->seq_id.buffer, cself->last_seq_id_len) != 0 ) {
/* new seq_id: reset counters and mem it */
@@ -245,32 +255,43 @@ rc_t CC TableWriterRef_Write(const TableWriterRef* cself, const TableWriterRefDa
self->last_cs_key = 'T';
}
/* trunc trailing N */
- while( len > 0 && toupper(b[len - 1]) == 'N' ) {
- len--;
+ b += len - 1;
+ while( trim_len > 0 && (*b == 'N' || *b == 'n' || *b == '.') ) {
+ trim_len--; b--;
}
TW_COL_WRITE(cself->base, cself->cols_data[ewrefd_cn_NAME], data->name);
- TW_COL_WRITE_BUF(cself->base, cself->cols_data[ewrefd_cn_READ], data->read.buffer, (write_read ? len : 0));
+ TW_COL_WRITE_BUF(cself->base, cself->cols_data[ewrefd_cn_READ], data->read.buffer, (write_read ? trim_len : 0));
TW_COL_WRITE(cself->base, cself->cols_data[ewrefd_cn_QUALITY], data->quality);
TW_COL_WRITE(cself->base, cself->cols_data[ewrefd_cn_SEQ_ID], data->seq_id);
- if( len == 0 ) {
- TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_START], len);
+ if( trim_len == 0 ) {
+ TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_START], trim_len);
} else {
TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_START], cself->seq_start_last);
}
- TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_LEN], data->read.elements);
+ TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_LEN], len);
TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_CS_KEY], cself->last_cs_key);
TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_CIRCULAR], data->circular);
if( rc == 0 && (rc = TableWriter_CloseRow(cself->base)) == 0 ) {
TableWriterRef* self = (TableWriterRef*)cself;
self->last_cs_key = ((const char*)(data->read.buffer))[data->read.elements - 1];
+ switch (self->last_cs_key) {
+ case 'A':
+ case 'C':
+ case 'G':
+ case 'T':
+ break;
+ default:
+ self->last_cs_key = 'T';
+ break;
+ }
self->seq_start_last += data->read.elements;
}
}
return rc;
}
-rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid, int64_t offset, const ReferenceSeqCoverage* coverage)
+rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid, INSDC_coord_zero offset, const ReferenceSeqCoverage* coverage)
{
rc_t rc = 0;
@@ -284,11 +305,11 @@ rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid,
ALIGN_DBGERRP("coverage %s", rc, "data");
} else if( offset > cself->seq_start_last ) {
rc = RC(rcAlign, rcType, rcWriting, rcData, rcInvalid);
- ALIGN_DBGERRP("%lu is beyond last written chunk", rc, offset);
+ ALIGN_DBGERRP("%i is beyond last written chunk", rc, offset);
} else {
if( (rowid + offset / cself->max_seq_len) - cself->last_coverage_row > 1 ) {
/* fill in gap in coverage rows with default values */
- ALIGN_DBG("%gap in coverage rows (%li,%li) -> use defaults", cself->last_coverage_row, rowid + offset / cself->max_seq_len);
+ ALIGN_DBG("gap in coverage rows (%li,%li) -> use defaults", cself->last_coverage_row, rowid + offset / cself->max_seq_len);
rc = TableWriterRef_DefaultCoverage(cself, rowid + offset / cself->max_seq_len);
}
if( rc == 0 && (rc = TableWriter_OpenRowId(cself->base, rowid + offset / cself->max_seq_len, cself->coverage_cursor_id)) == 0 ) {
@@ -296,8 +317,13 @@ rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid,
TW_COL_WRITE_VAR(cself->base, cself->cols_coverage[ewrefcv_cn_CGRAPH_LOW], coverage->low);
TW_COL_WRITE_VAR(cself->base, cself->cols_coverage[ewrefcv_cn_CGRAPH_MISMATCHES], coverage->mismatches);
TW_COL_WRITE_VAR(cself->base, cself->cols_coverage[ewrefcv_cn_CGRAPH_INDELS], coverage->indels);
- TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], coverage->primary_ids);
- TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], coverage->secondary_ids);
+ TW_COL_WRITE_BUF(cself->base, cself->cols_coverage[ewrefcv_cn_OVERLAP_REF_POS],
+ coverage->overlap_ref_pos, sizeof(coverage->overlap_ref_pos) / sizeof(coverage->overlap_ref_pos[0]));
+ TW_COL_WRITE_BUF(cself->base, cself->cols_coverage[ewrefcv_cn_OVERLAP_REF_LEN],
+ coverage->overlap_ref_len, sizeof(coverage->overlap_ref_len) / sizeof(coverage->overlap_ref_len[0]));
+ TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], coverage->ids[ewrefcov_primary_table]);
+ TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], coverage->ids[ewrefcov_secondary_table]);
+ TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_EVIDENCE_INTERVAL_IDS], coverage->ids[ewrefcov_evidence_table]);
if( rc == 0 ) {
TableWriterRef* self = (TableWriterRef*)cself;
self->last_coverage_row = rowid + offset / cself->max_seq_len;
@@ -312,10 +338,10 @@ struct TableWriterRefCoverage {
const TableWriter* base;
bool init; /* default written indicator */
uint8_t cursor_id;
- TableWriterColumn cols[sizeof(TableWriterRefCoverage_cols)/sizeof(TableWriterRefCoverage_cols[0])];
+ TableWriterColumn cols[ewrefcv_cn_ReCover + 1];
};
-rc_t CC TableWriterRefCoverage_Make(const TableWriterRefCoverage** cself, VDatabase* db)
+rc_t CC TableWriterRefCoverage_MakeCoverage(const TableWriterRefCoverage** cself, VDatabase* db, const uint32_t options)
{
rc_t rc = 0;
TableWriterRefCoverage* self = NULL;
@@ -327,7 +353,7 @@ rc_t CC TableWriterRefCoverage_Make(const TableWriterRefCoverage** cself, VDatab
if( self == NULL ) {
rc = RC(rcAlign, rcFormatter, rcConstructing, rcMemory, rcExhausted);
} else {
- memcpy(self->cols, TableWriterRefCoverage_cols, sizeof(TableWriterRefCoverage_cols));
+ memcpy(self->cols, TableWriterRefCoverage_cols, sizeof(self->cols));
if( (rc = TableWriter_MakeUpdate(&self->base, db, "REFERENCE")) == 0 ) {
rc = TableWriter_AddCursor(self->base, self->cols,
sizeof(self->cols) / sizeof(self->cols[0]), &self->cursor_id);
@@ -336,13 +362,44 @@ rc_t CC TableWriterRefCoverage_Make(const TableWriterRefCoverage** cself, VDatab
}
if( rc == 0 ) {
*cself = self;
- ALIGN_DBG("table %s", "opened");
+ ALIGN_R_DBG("table %s", "opened");
} else {
TableWriterRefCoverage_Whack(self, false, NULL);
ALIGN_DBGERR(rc);
}
return rc;
}
+rc_t CC TableWriterRefCoverage_MakeIds(const TableWriterRefCoverage** cself, VDatabase* db, const char * col_name)
+{
+ rc_t rc = 0;
+ TableWriterRefCoverage* self = NULL;
+
+ if( cself == NULL ) {
+ rc = RC(rcAlign, rcFormatter, rcConstructing, rcParam, rcNull);
+ } else {
+ self = calloc(1, sizeof(*self));
+ if( self == NULL ) {
+ rc = RC(rcAlign, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ if( (rc = TableWriter_MakeUpdate(&self->base, db, "REFERENCE")) == 0 ) {
+ self->cols[0].idx = 0;
+ self->cols[0].name = col_name;
+ self->cols[0].element_bits = 8 * sizeof(int64_t);
+ self->cols[0].flags=ewcol_IsArray;
+ rc = TableWriter_AddCursor(self->base, self->cols,1, &self->cursor_id);
+ }
+ }
+ }
+ if( rc == 0 ) {
+ *cself = self;
+ ALIGN_R_DBG("table %s", "opened");
+ } else {
+ TableWriterRefCoverage_Whack(self, false, NULL);
+ ALIGN_DBGERR(rc);
+ }
+ return rc;
+}
+
rc_t CC TableWriterRefCoverage_Whack(const TableWriterRefCoverage* cself, bool commit, uint64_t* rows)
{
@@ -355,36 +412,70 @@ rc_t CC TableWriterRefCoverage_Whack(const TableWriterRefCoverage* cself, bool c
return rc;
}
-rc_t CC TableWriterRefCoverage_Write(const TableWriterRefCoverage* cself, int64_t rowid, const ReferenceSeqCoverage* coverage)
+
+rc_t CC TableWriterRefCoverage_WriteCoverage(const TableWriterRefCoverage* cself, int64_t rowid, const ReferenceSeqCoverage* coverage)
{
rc_t rc = 0;
if( cself == NULL || coverage == NULL ) {
rc = RC(rcAlign, rcType, rcWriting, rcParam, rcNull);
ALIGN_DBGERR(rc);
- } else if( !cself->init ) {
- ReferenceSeqCoverage c;
+ }
+ else {
+ if( !cself->init ) {
+ /* set the defaults */
+ ReferenceSeqCoverage c;
+
+ memset(&c, 0, sizeof(c));
+ TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_HIGH], c.low);
+ TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_LOW], c.high);
+ TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_MISMATCHES], c.mismatches);
+ TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_INDELS], c.indels);
+ TW_COL_WRITE_DEF_BUF(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_OVERLAP_REF_POS],
+ c.overlap_ref_pos, sizeof(c.overlap_ref_pos) / sizeof(c.overlap_ref_pos[0]));
+ TW_COL_WRITE_DEF_BUF(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_OVERLAP_REF_LEN],
+ c.overlap_ref_len, sizeof(c.overlap_ref_len) / sizeof(c.overlap_ref_len[0]));
+
+ ((TableWriterRefCoverage*)cself)->init = true;
+ }
+ if( rc == 0 && (rc = TableWriter_OpenRowId(cself->base, rowid, cself->cursor_id)) == 0 ) {
+ TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_HIGH], coverage->high);
+ TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_LOW], coverage->low);
+ TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_MISMATCHES], coverage->mismatches);
+ TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_INDELS], coverage->indels);
+ TW_COL_WRITE_BUF(cself->base, cself->cols[ewrefcv_cn_OVERLAP_REF_POS],
+ coverage->overlap_ref_pos, sizeof(coverage->overlap_ref_pos) / sizeof(coverage->overlap_ref_pos[0]));
+ TW_COL_WRITE_BUF(cself->base, cself->cols[ewrefcv_cn_OVERLAP_REF_LEN],
+ coverage->overlap_ref_len, sizeof(coverage->overlap_ref_len) / sizeof(coverage->overlap_ref_len[0]));
- memset(&c, 0, sizeof(c));
- c.primary_ids.buffer = c.secondary_ids.buffer = &c;
- TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_HIGH], c.low);
- TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_LOW], c.high);
- TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_MISMATCHES], c.mismatches);
- TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_INDELS], c.indels);
- TW_COL_WRITE_DEF(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], c.primary_ids);
- TW_COL_WRITE_DEF(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], c.secondary_ids);
- ((TableWriterRefCoverage*)cself)->init = true;
+ if( rc == 0 ) {
+ rc = TableWriter_CloseRow(cself->base);
+ }
+ }
}
- if( rc == 0 && (rc = TableWriter_OpenRowId(cself->base, rowid, cself->cursor_id)) == 0 ) {
- TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_HIGH], coverage->high);
- TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_LOW], coverage->low);
- TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_MISMATCHES], coverage->mismatches);
- TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_INDELS], coverage->indels);
- TW_COL_WRITE(cself->base, cself->cols[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], coverage->primary_ids);
- TW_COL_WRITE(cself->base, cself->cols[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], coverage->secondary_ids);
- if( rc == 0 ) {
- rc = TableWriter_CloseRow(cself->base);
+ return rc;
+}
+rc_t CC TableWriterRefCoverage_WriteIds(const TableWriterRefCoverage* cself, int64_t rowid, const int64_t* buf,uint32_t num)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || (buf == NULL && num > 0)) {
+ rc = RC(rcAlign, rcType, rcWriting, rcParam, rcNull);
+ ALIGN_DBGERR(rc);
+ }
+ else {
+ if( !cself->init ) {
+ /* set the defaults */
+ TW_COL_WRITE_DEF_BUF(cself->base, cself->cursor_id, cself->cols[0],NULL,0);
+ ((TableWriterRefCoverage*)cself)->init = true;
+ }
+ if( rc == 0 && (rc = TableWriter_OpenRowId(cself->base, rowid, cself->cursor_id)) == 0 ) {
+ TW_COL_WRITE_BUF(cself->base, cself->cols[0],buf,num);
+ if( rc == 0 ) {
+ rc = TableWriter_CloseRow(cself->base);
+ }
}
}
return rc;
}
+
diff --git a/libs/align/writer-ref.h b/libs/align/writer-ref.h
index a2a9568..e059a0b 100644
--- a/libs/align/writer-ref.h
+++ b/libs/align/writer-ref.h
@@ -45,19 +45,23 @@ enum ETableWriterRefData_ColNames {
enum ETableWriterRefCoverage_ColNames {
/* coverage data starts here */
- ewrefcv_cn_CGRAPH_HIGH,
+ ewrefcv_cn_CGRAPH_HIGH=0,
ewrefcv_cn_CGRAPH_LOW,
ewrefcv_cn_CGRAPH_MISMATCHES,
ewrefcv_cn_CGRAPH_INDELS,
+ ewrefcv_cn_OVERLAP_REF_POS,
+ ewrefcv_cn_OVERLAP_REF_LEN,
+ ewrefcv_cn_ReCover = ewrefcv_cn_OVERLAP_REF_LEN,
ewrefcv_cn_PRIMARY_ALIGNMENT_IDS,
ewrefcv_cn_SECONDARY_ALIGNMENT_IDS,
- ewrefcv_cn_Last = ewrefcv_cn_SECONDARY_ALIGNMENT_IDS
+ ewrefcv_cn_EVIDENCE_INTERVAL_IDS,
+ ewrefcv_cn_Last = ewrefcv_cn_EVIDENCE_INTERVAL_IDS
};
enum ETableWriterRef_ColOptions {
ewref_co_SaveRead = 0x01, /* always write READ */
- ewref_co_QUALITY = 0x02, /* use QUALITY column, by default not opened */
- ewref_co_Coverage = 0x04 /* use coverage columns, by default not opened */
+ ewref_co_QUALITY = 0x02, /* use QUALITY column, by default not opened */
+ ewref_co_Coverage = 0x04 /* use coverage columns, by default not opened */
};
typedef struct TableWriterRefData_struct {
@@ -85,18 +89,18 @@ rc_t CC TableWriterRef_WriteDefaultCovarage(const TableWriterRef* cself, enum ET
/* rowid optional here */
rc_t CC TableWriterRef_Write(const TableWriterRef* cself, const TableWriterRefData* data, int64_t* rowid);
-rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid, int64_t offset, const ReferenceSeqCoverage* coverage);
+rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid, INSDC_coord_zero offset, const ReferenceSeqCoverage* coverage);
typedef struct TableWriterRefCoverage TableWriterRefCoverage;
-rc_t CC TableWriterRefCoverage_Make(const TableWriterRefCoverage** cself, VDatabase* db);
-
+rc_t CC TableWriterRefCoverage_MakeCoverage(const TableWriterRefCoverage** cself, VDatabase* db, const uint32_t options);
+rc_t CC TableWriterRefCoverage_MakeIds(const TableWriterRefCoverage** cself, VDatabase* db, const char *col_name);
/* rows optional here */
rc_t CC TableWriterRefCoverage_Whack(const TableWriterRefCoverage* cself, bool commit, uint64_t* rows);
-
-rc_t CC TableWriterRefCoverage_Write(const TableWriterRefCoverage* cself, int64_t rowid, const ReferenceSeqCoverage* coverage);
+rc_t CC TableWriterRefCoverage_WriteCoverage(const TableWriterRefCoverage* cself, int64_t rowid, const ReferenceSeqCoverage* coverage);
+rc_t CC TableWriterRefCoverage_WriteIds(const TableWriterRefCoverage* cself, int64_t rowid, const int64_t* buf,uint32_t num);
#endif /* _h_align_writer_ref_ */
diff --git a/libs/align/writer-reference.c b/libs/align/writer-reference.c
index dd7e990..b310617 100644
--- a/libs/align/writer-reference.c
+++ b/libs/align/writer-reference.c
@@ -24,17 +24,22 @@
*/
#include <align/extern.h>
+#include <kapp/main.h>
#include <klib/log.h>
#include <klib/rc.h>
-#include <kapp/main.h>
#include <klib/sort.h>
+#include <klib/data-buffer.h>
#include <klib/container.h>
+#include <klib/checksum.h>
+#include <klib/text.h>
#include <kfs/mmap.h>
#include <kfs/file.h>
#include <kdb/manager.h>
#include <vdb/database.h>
#include <vdb/table.h>
+#include <vdb/cursor.h>
#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
#include <sra/sradb.h>
#include <align/writer-reference.h>
@@ -43,6 +48,7 @@
#include "refseq-mgr-priv.h"
#include "writer-ref.h"
#include "reader-cmn.h"
+#include "reference-cmn.h"
#include "debug.h"
#include <os-native.h>
#include <sysalloc.h>
@@ -53,78 +59,173 @@
#include <ctype.h>
#include <assert.h>
-struct ReferenceMgr {
- const TableWriterRef* writer;
- const KDirectory* dir;
- BSTree tree;
- uint32_t options;
- const VDBManager* vmgr;
- const RefSeqMgr* rmgr;
- VDatabase* db;
- size_t cache;
- uint32_t num_open_max;
- uint32_t num_open;
- uint64_t usage;
- uint32_t max_seq_len;
- /* last seq end */
- int64_t ref_rowid;
- int32_t compress_buf[10240];
- /* must be last element of struct! */
- INSDC_dna_text seq_buf[TableWriterRefSeq_MAX_SEQ_LEN];
+/*
+ * ReferenceSeq objects:
+ * ReferenceSeq objects may be unattached, i.e. they might not yet represent an
+ * actual sequence.
+ *
+ * ReferenceSeq objects may be attached, i.e. they represent a sequence from
+ * either RefSeq or a fasta file.
+ *
+ * A ReferenceSeq object may be refered to by more than one id, but a
+ * ReferenceSeq object has only one canonical id.
+ *
+ * More than one ReferenceSeq object may be associated with the same seqId.
+ *
+ * More than one ReferenceSeq object may be attached to the same sequence.
+ * This will cause the REFERENCE table to have more than one copy of the
+ * sequence.
+ *
+ * ReferenceSeq objects may be created from the config file. These objects
+ * will have an id, a seqId, but no fastaSeqId. These are unattached.
+ *
+ * ReferenceSeq objects may be created from explicit fasta files. These
+ * objects will have a fastaSeqId, but *** NO id OR seqId ***. These are
+ * attached.
+ *
+ * ReferenceSeq objects may be created on the fly by requesting an id that
+ * isn't already in the collection. These objects will have the requested id.
+ *
+ * When a reference is requested (by id):
+ * Resolve the id to a ReferenceSeq object.
+ * If the object is unattached, attach it to a sequence.
+ * If the sequence is not yet written to the REFERENCE table, write it to the
+ * REFERENCE table. NAME gets id; SEQID gets seqId unless seqId is null, then
+ * SEQID gets id.
+ *
+ * Resolving id's to ReferenceSeq objects:
+ * Search the id index and if the found object is attached, return it.
+ * Search the identifiers in the fastaSeqIds or seqIds.
+ * If different objects were found from both searches, use sequence length and
+ * MD5 to break the tie (if both match then use RefSeq). If no sequence length
+ * or MD5 then fail.
+ * If no objects were found from either search, then create a new unattached
+ * ReferenceSeq object.
+ * If the object's id is null, set it to the id.
+ * It the object was not found in the id index, add it.
+ *
+ * Attaching ReferenceSeq objects to sequences:
+ * Search RefSeq for seqId.
+ * Else search RefSeq for id.
+ * Else search for seqId in the loaded fasta files.
+ * Else search data directory for id.fasta or id.fa; load it or fail.
+ * Else search data directory for seqId.fasta or seqId.fa; load it or fail.
+ * Else fail.
+ * If failed, mark the object as dead.
+ *
+ *
+ *
+ * Config file:
+ * The config file consists of lines containing whitespace (preferably tab)
+ * seperated fields. The fields are:
+ * NAME (unique)
+ * SEQID
+ * extra (optional)
+ *
+ * There is one ReferenceSeq object created per record in the config file.
+ * NAME is stored in id; SEQID is stored in seqId; if extra contains the word
+ * 'circular' (case-insensitive), true is stored in circular. These
+ * ReferenceSeq object are created in the unattached state, i.e. not attached
+ * to a fasta file or a RefSeq library object.
+ *
+ * Fasta files:
+ * Fasta file consists of one of more sequences. A sequence in a fasta file
+ * consists of a seqid line followed by lines containing the bases of the
+ * sequence. A seqid line starts with '>' and the next word (whitespace
+ * delimited) is the seqid. The seqid may consist of '|' delimited identifiers
+ * (this is purposely vague). The fasta seqid is stored in fastaSeqId.
+ *
+ * Fasta files may be loaded explicitly:
+ * When a fasta file is loaded explicitly, a new ReferenceSeq object is created
+ * (with id == NULL) for each sequence found in the file.
+ *
+ * Fasta files may be loaded implicitly:
+ * When an id can't be found in the set of ReferenceSeq objects and can't be
+ * found as an accession by RefSeq, an attempt is made to load a fasta file
+ * named <id>.fasta or <id>.fa in the directory given to the constructor. If
+ * this succeeds, a new ReferenceSeq object with the given id is attached to
+ * the sequence. In this situation, to avoid ambiquity, there can be only one
+ * sequence in the fasta file.
+ *
+ */
+
+enum ReferenceSeqType {
+ rst_unattached,
+ rst_local,
+ rst_refSeqById,
+ rst_refSeqBySeqId,
+ rst_dead
};
struct ReferenceSeq {
- BSTNode dad;
- const ReferenceMgr* mgr;
- bool local;
- char id[64];
- char accession[64];
+ ReferenceMgr *mgr;
+ char *id;
+ char *seqId;
+ char *fastaSeqId;
+ /* ref table position */
+ int64_t start_rowid;
+ /* total reference length */
+ INSDC_coord_len seq_len;
+ int type;
bool circular;
+ uint8_t md5[16];
union {
struct {
- /* local file data */
- uint64_t file_size;
- uint64_t line_sz; /* length of line w/ \n */
- uint64_t fasta_offset; /* first base in file */
- const KMMap* map;
- /* cache last call to KMMapReposition */
- uint64_t map_from;
- uint64_t map_to;
+ KDataBuffer buf;
+ uint8_t const *data;
} local;
- struct {
- const RefSeq* o;
- uint64_t usage;
- } refseq;
+ RefSeq const *refseq;
} u;
- /* ref table position */
- int64_t start_rowid;
- /* total reference length */
- uint64_t seq_len;
};
-static
-int CC ReferenceSeq_Cmp(const void *item, const BSTNode *n)
-{
- return strcasecmp((const char*)item, ((const ReferenceSeq*)n)->id);
-}
+struct ReferenceMgr {
+ TableWriterRef const *writer;
+ KDirectory const *dir;
+ RefSeqMgr const *rmgr;
+ VDatabase *db;
+ ReferenceSeq *refSeq;
+
+ int64_t ref_rowid;
+
+ size_t cache;
+
+ uint32_t options;
+ uint32_t num_open_max;
+ uint32_t num_open;
+ uint32_t max_seq_len;
+
+ KDataBuffer compress;
+ KDataBuffer seq;
+ KDataBuffer refSeqs;
+ KDataBuffer refSeqsById;
+};
+
+typedef struct key_id_t {
+ char const *key;
+ int64_t id;
+} key_id_t;
static
-int CC ReferenceSeq_Sort(const BSTNode *item, const BSTNode *n)
+int CC key_id_cmp(const void *arg1, const void *arg2, void *data)
{
- return ReferenceSeq_Cmp(((const ReferenceSeq*)item)->id, n);
+ key_id_t const *a = arg1;
+ key_id_t const *b = arg2;
+
+ return strcmp(a->key, b->key);
}
static
-void CC ReferenceSeq_Unused( BSTNode *node, void *data )
+void CC ReferenceSeq_Whack(ReferenceSeq *self)
{
- ReferenceSeq* n = (ReferenceSeq*)node;
- ReferenceSeq** d = (ReferenceSeq**)data;
-
- if( !n->local && n->u.refseq.o != NULL ) {
- if( *d == NULL || (*d)->u.refseq.usage > n->u.refseq.usage ) {
- *d = n;
- }
+ if (self->type == rst_local) {
+ KDataBufferWhack(&self->u.local.buf);
+ }
+ else if (self->type == rst_refSeqById || self->type == rst_refSeqBySeqId) {
+ RefSeq_Release(self->u.refseq);
}
+ free(self->id);
+ free(self->seqId);
+ free(self->fastaSeqId);
}
struct OpenConfigFile_ctx {
@@ -156,11 +257,13 @@ bool OpenConfigFile(char const server[], char const volume[], void *Ctx)
}
static
-rc_t FindAndOpenConfigFile(const RefSeqMgr* rmgr, KDirectory const *dir, KFile const **kfp, char const conf[])
+rc_t FindAndOpenConfigFile(RefSeqMgr const *const rmgr,
+ KDirectory const *const dir,
+ KFile const **const kfp, char const conf[])
{
rc_t rc = KDirectoryOpenFileRead(dir, kfp, conf);
- if(rc) {
+ if (rc) {
struct OpenConfigFile_ctx ctx;
ctx.name = conf;
@@ -176,442 +279,1457 @@ rc_t FindAndOpenConfigFile(const RefSeqMgr* rmgr, KDirectory const *dir, KFile c
return rc;
}
+enum comparison_weights {
+ no_match = 0,
+ substring_match = (1u << 0),
+ expected_prefix = (1u << 1),
+ exact_match = (1u << 2),
+ seq_len_match = (1u << 3),
+ md5_match = (1u << 4)
+};
+
static
-rc_t ReferenceMgr_Conf(const RefSeqMgr* rmgr, BSTree* tree, KDirectory const *dir, VDBManager const *vmgr, char const conf[])
+unsigned str_weight(char const str[], char const qry[], unsigned const qry_len)
{
- rc_t rc = 0;
+ char const *const fnd = strcasestr(str, qry);
+ unsigned wt = no_match;
+
+ if (fnd) {
+ unsigned const fnd_len = string_size( fnd );
+ unsigned const fndlen = (fnd_len > qry_len && fnd[qry_len] == '|') ? qry_len : fnd_len;
+
+ if (fndlen == qry_len && (fnd == str || fnd[-1] == '|')) {
+ wt |= substring_match;
+
+ if (fnd == str) {
+ if (fnd[fndlen] == '\0')
+ wt |= exact_match;
+ }
+ else {
+ /* check for expected prefices */
+ char const *ns = fnd - 1;
+
+ while (ns != str && ns[-1] != '|')
+ --ns;
+
+ if ( memcmp(ns, "ref|", 4) == 0
+ || memcmp(ns, "emb|", 4) == 0
+ || memcmp(ns, "dbg|", 4) == 0
+ || memcmp(ns, "tpg|", 4) == 0
+ || memcmp(ns, "tpe|", 4) == 0
+ || memcmp(ns, "tpd|", 4) == 0
+ || memcmp(ns, "gpp|", 4) == 0
+ || memcmp(ns, "gb|", 3) == 0
+ )
+ {
+ wt |= expected_prefix;
+ }
+ }
+ }
+ }
+ return wt;
+}
+
+static
+rc_t ReferenceMgr_AddId(ReferenceMgr *const self, char const ID[],
+ ReferenceSeq const *const obj)
+{
+ char *id = string_dup( ID, string_size( ID ) );
+ unsigned const last_id = self->refSeqsById.elem_count;
+
+ if (id) {
+ rc_t rc = KDataBufferResize(&self->refSeqsById, last_id + 1);
+
+ if (rc == 0) {
+ key_id_t *kid = &((key_id_t *)self->refSeqsById.base)[last_id];
+
+ kid->key = id;
+ kid->id = obj - self->refSeq;
+
+ ksort(self->refSeqsById.base, self->refSeqsById.elem_count, sizeof(key_id_t), key_id_cmp, NULL);
+ }
+ else
+ free(id);
+
+ return rc;
+ }
+ else
+ return RC(rcAlign, rcIndex, rcInserting, rcMemory, rcExhausted);
+}
+
+static
+key_id_t *ReferenceMgr_FindId(ReferenceMgr const *const self, char const id[])
+{
+ key_id_t qry;
+
+ qry.key = id;
+ qry.id = 0;
+
+ return kbsearch(&qry, self->refSeqsById.base,
+ self->refSeqsById.elem_count,
+ sizeof(qry), key_id_cmp, NULL);
+}
+
+static
+rc_t ReferenceMgr_NewReferenceSeq(ReferenceMgr *const self, ReferenceSeq **const rslt)
+{
+ unsigned const last_rs = self->refSeqs.elem_count;
+ rc_t rc = KDataBufferResize(&self->refSeqs, last_rs + 1);
+
+ if (rc) return rc;
+ self->refSeq = self->refSeqs.base;
+
+ *rslt = &self->refSeq[last_rs];
+ memset(&self->refSeq[last_rs], 0, sizeof(self->refSeq[0]));
+ self->refSeq[last_rs].mgr = self;
+
+ return 0;
+}
+
+static
+int CC config_cmp(void const *A, void const *B, void *Data)
+{
+ struct {
+ unsigned id;
+ unsigned seqId;
+ unsigned extra;
+ unsigned extralen;
+ } const *const a = A;
+ struct {
+ unsigned id;
+ unsigned seqId;
+ unsigned extra;
+ unsigned extralen;
+ } const *const b = B;
+ char const *const data = Data;
+
+ return strcmp(&data[a->id], &data[b->id]);
+}
+
+static
+rc_t ReferenceMgr_ProcessConf(ReferenceMgr *const self, char Data[], unsigned const len)
+{
+ rc_t rc;
+ unsigned i;
+ unsigned j;
+ struct {
+ unsigned id;
+ unsigned seqId;
+ unsigned extra;
+ unsigned extralen;
+ } *data, tmp;
+ KDataBuffer buf;
+
+ memset(&buf, 0, sizeof(buf));
+ buf.elem_bits = sizeof(data[0]) * 8;
+
+ for (j = i = 0; i < len; ++j) {
+ unsigned lineEnd;
+ unsigned id;
+ unsigned acc;
+ unsigned ii;
+
+ for (lineEnd = i; lineEnd != len; ++lineEnd) {
+ int const ch = Data[lineEnd];
+
+ if (ch == '\n')
+ break;
+ if (ch == '\r')
+ break;
+ }
+ if (i == lineEnd) {
+ ++i;
+ continue;
+ }
+ Data[lineEnd] = '\0';
+ for (id = i; id != lineEnd; ++id) {
+ int const ch = Data[id];
+
+ if (!isspace(ch))
+ break;
+ }
+ for (ii = id; ii != lineEnd; ++ii) {
+ int const ch = Data[ii];
+
+ if (isspace(ch)) {
+ Data[ii++] = '\0';
+ break;
+ }
+ }
+ for (acc = ii; acc < lineEnd; ++acc) {
+ int const ch = Data[acc];
+
+ if (!isspace(ch))
+ break;
+ }
+ if (acc >= lineEnd)
+ return RC(rcAlign, rcFile, rcReading, rcFormat, rcInvalid);
+
+ for (ii = acc; ii != lineEnd; ++ii) {
+ int const ch = Data[ii];
+
+ if (isspace(ch)) {
+ Data[ii++] = '\0';
+ break;
+ }
+ }
+ tmp.id = id;
+ tmp.seqId = acc;
+ tmp.extra = ii;
+ tmp.extralen = lineEnd > ii ? lineEnd - ii : 0;
+
+ if ((rc = KDataBufferResize(&buf, buf.elem_count + 1)) != 0) return rc;
+ data = buf.base;
+
+ data[buf.elem_count-1] = tmp;
+ i = lineEnd + 1;
+ }
+
+ /* check unique */
+ ksort(data, buf.elem_count, sizeof(data[0]), config_cmp, Data);
+ for (i = 1; i < buf.elem_count; ++i) {
+ if (strcmp(&Data[data[i-1].id], &Data[data[i].id]) == 0)
+ return RC(rcAlign, rcIndex, rcConstructing, rcItem, rcExists);
+ }
+
+ for (i = 0; i != buf.elem_count; ++i) {
+ unsigned const extralen = data[i].extralen;
+ char const *const id = &Data[data[i].id];
+ char const *const seqId = &Data[data[i].seqId];
+ char const *const extra = extralen ? &Data[data[i].extra] : NULL;
+ bool circular = false;
+ ReferenceSeq *rs;
+
+ if (extra && extralen >= 8) {
+ char const *const circ = strcasestr(extra, "circular");
+
+ circular = circ && (circ == extra || isspace(circ[-1])) &&
+ (circ[8] == '\0' || isspace(circ[8]));
+ }
+ if ((rc = ReferenceMgr_NewReferenceSeq(self, &rs)) != 0) return rc;
+
+ rs->id = string_dup( id, string_size( id ) );
+ if ( rs->id == NULL )
+ return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+
+ rs->seqId = string_dup( seqId, string_size( seqId ) );
+ if ( rs->seqId == NULL )
+ return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+
+ rs->circular = circular;
+ }
+ KDataBufferWhack(&buf);
+ return 0;
+}
+
+static
+rc_t ReferenceMgr_Conf(ReferenceMgr *const self, char const conf[])
+{
+ rc_t rc;
const KFile* kf = NULL;
- assert(tree != NULL);
- assert(dir != NULL);
+ if (conf == NULL)
+ return 0;
+
+ rc = FindAndOpenConfigFile(self->rmgr, self->dir, &kf, conf);
+ if (rc == 0) {
+ uint64_t sz;
+ KDataBuffer buf;
+
+ rc = KFileSize(kf, &sz);
+ assert(rc == 0);
+ if (sz == 0)
+ (void)PLOGMSG(klogWarn, (klogWarn, "Configuration file '$(file)' is empty", "file=%s", conf));
+ else {
+ rc = KDataBufferMakeBytes(&buf, sz + 1);
+ if (rc == 0) {
+ size_t nread;
+
+ rc = KFileReadAll(kf, 0, buf.base, sz, &nread);
+ if (rc == 0) {
+ assert(nread == sz);
+ ((char *)buf.base)[sz] = '\n'; /* make sure that last line is terminated */
+ rc = ReferenceMgr_ProcessConf(self, buf.base, sz + 1);
+ }
+ KDataBufferWhack(&buf);
+ }
+ }
+ KFileRelease(kf);
+ }
+ return rc;
+}
+
+static
+rc_t ReferenceMgr_FastaFile_GetSeqIds(KDataBuffer *const buf, char const data[], uint64_t const len)
+{
+ uint64_t pos;
+ int st = 0;
+
+ for (pos = 0; pos < len; ++pos) {
+ int const ch = data[pos];
+
+ if (st == 0) {
+ if (ch == '>') {
+ uint64_t const n = buf->elem_count;
+ rc_t rc = KDataBufferResize(buf, n + 1);
+
+ if (rc)
+ return rc;
+ ((uint64_t *)buf->base)[n] = pos;
+ st = 1;
+ }
+ }
+ else if (ch == '\r' || ch == '\n')
+ st = 0;
+ }
+ return 0;
+}
+
+static
+rc_t ReferenceMgr_ImportFasta(ReferenceMgr *const self, ReferenceSeq *obj, KDataBuffer *const buf)
+{
+ unsigned seqId;
+ unsigned seqIdLen;
+ unsigned ln;
+ unsigned src;
+ unsigned dst;
+ unsigned start=0;
+ char *const data = buf->base;
+ unsigned const len = buf->elem_count;
+ rc_t rc;
+ MD5State mds;
+
+ memset(obj, 0, sizeof(*obj));
+ obj->mgr = self;
+
+ if (len == 0)
+ return 0;
+ assert(data[0] == '>');
+
+ for (ln = 1; ln != len; ++ln) {
+ int const ch = data[ln];
+
+ if (ch == '\r' || ch == '\n') {
+ data[ln] = '\0';
+ start = ln + 1;
+ break;
+ }
+ }
+ for (seqId = 1; seqId != ln; ++seqId) {
+ if (!isspace(data[seqId]))
+ break;
+ }
+ for (seqIdLen = 0; seqId + seqIdLen < ln; ++seqIdLen) {
+ if (isspace(data[seqId + seqIdLen])) {
+ ln = seqId + seqIdLen;
+ data[ln] = '\0';
+ break;
+ }
+ }
+ if (seqIdLen == 0)
+ return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+
+ obj->fastaSeqId = string_dup( &data[ seqId ], string_size( &data[ seqId ] ) );
+ if ( obj->fastaSeqId == NULL )
+ return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+
+ MD5StateInit(&mds);
+ for (dst = src = start; src != len; ++src) {
+ int const ch = toupper(data[src]);
+
+ if (isspace(ch))
+ continue;
+
+ if (strchr(INSDC_4na_map_CHARSET, ch) == NULL && ch != 'X')
+ return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+
+ data[dst] = ch == 'X' ? 'N' : ch;
+ MD5StateAppend(&mds, data + dst, 1);
+ ++dst;
+ }
+ MD5StateFinish(&mds, obj->md5);
+ rc = KDataBufferSub(buf, &obj->u.local.buf, start, dst - start);
+ if (rc == 0) {
+ obj->type = rst_local;
+ obj->seq_len = dst - start;
+ }
+ else
+ obj->type = rst_dead;
+ return rc;
+}
- if( conf != NULL &&
- (rc = FindAndOpenConfigFile(rmgr, dir, &kf, conf)) == 0 ) {
- const KMMap* mm;
- uint64_t pos = 0;
- size_t page_sz;
- const char* str;
+#define READ_CHUNK_SIZE (1024 * 1024)
- if( (rc = KMMapMakeRead(&mm, kf)) == 0 ) {
+static
+rc_t ReferenceMgr_ImportFastaFile(ReferenceMgr *const self, KFile const *kf,
+ ReferenceSeq *rslt)
+{
+ uint64_t file_size;
+ rc_t rc = KFileSize(kf, &file_size);
+
+ if (rc == 0) {
+ KDataBuffer fbuf;
+
+ rc = KDataBufferMake(&fbuf, 8, file_size);
+ if (rc == 0) {
+ fbuf.elem_count = 0;
do {
- ReferenceSeq* tmp = NULL;
- if( (rc = KMMapReposition(mm, pos, &page_sz)) == 0 &&
- (rc = KMMapAddrRead(mm, (const void**)&str)) == 0 ) {
- while( rc == 0 && page_sz > 0 ) {
- const char* n = memchr(str, '\n', page_sz);
- const char* r = memchr(str, '\r', page_sz);
-
- if( (tmp = calloc(1, sizeof(*tmp))) == NULL ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
- break;
- }
- if(n == NULL && r == NULL) {
- n = str + page_sz + 1;
- page_sz = 0;
- } else {
- if( n == NULL || (r != NULL && r < n) ) {
- n = r;
- }
- page_sz -= n - str + 1;
- }
- r = str;
- /* find id: chr6 */
- while( r < n && !isspace(*r)){ r++; }
- if( r == n ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcFileFormat, rcInvalid);
- break;
- } else if( r - str >= sizeof(tmp->id) ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcBuffer, rcInsufficient);
- break;
- } else {
- memcpy(tmp->id, str, r - str);
- tmp->id[r - str] = '\0';
- }
- /* skip space(s) */
- while( r < n && isspace(*r)){ r++; }
- if( r >= n ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcFileFormat, rcInvalid);
- break;
- }
- str = r;
- /* get accession */
- while( r < n && !isspace(*r)){ r++; }
- if( r - str >= sizeof(tmp->accession) ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcBuffer, rcInsufficient);
- break;
- } else {
- memcpy(tmp->accession, str, r - str);
- tmp->accession[r - str] = '\0';
- }
- if( RefSeqMgr_Exists(rmgr, tmp->accession, r - str) == 0 ) {
- tmp->local = false;
- if( (rc = BSTreeInsertUnique(tree, &tmp->dad, NULL, ReferenceSeq_Sort)) != 0 ) {
- break;
- }
- ALIGN_DBG("RefSeq translation added '%s' -> '%s'", tmp->id, tmp->accession);
- } else {
- /* skips unknown references, later may be picked up as local files */
- (void)PLOGMSG(klogWarn, (klogWarn, "RefSeq table '$(acc)' for '$(id)' was not found",
- "acc=%s,id=%s", tmp->accession, tmp->id));
- free(tmp);
- }
- tmp = NULL;
- str = n + 1;
+ size_t const readable = file_size - fbuf.elem_count;
+ size_t const to_read = readable > READ_CHUNK_SIZE ? READ_CHUNK_SIZE : readable;
+ size_t nread = 0;
+
+ rc = KFileRead(kf, fbuf.elem_count, &((uint8_t *)fbuf.base)[fbuf.elem_count], to_read, &nread);
+ if (rc != 0 || nread == 0)
+ break;
+ fbuf.elem_count += nread;
+ } while (fbuf.elem_count < file_size);
+ if (rc == 0) {
+ char const *const base = fbuf.base;
+ KDataBuffer seqIdBuf;
+
+ memset(&seqIdBuf, 0, sizeof(seqIdBuf));
+ seqIdBuf.elem_bits = sizeof(file_size) * 8;
+
+ rc = ReferenceMgr_FastaFile_GetSeqIds(&seqIdBuf, base, file_size);
+ if (rc == 0) {
+ uint64_t const *const seqIdOffset = seqIdBuf.base;
+ unsigned const seqIds = seqIdBuf.elem_count;
+ unsigned i;
+ KDataBuffer sub;
+
+ if (rslt) {
+ if (seqIds > 1)
+ rc = RC(rcAlign, rcFile, rcReading, rcItem, rcUnexpected);
+
+ memset(&sub, 0, sizeof(sub));
+ KDataBufferSub(&fbuf, &sub, seqIdOffset[0], file_size - seqIdOffset[0]);
+ rc = ReferenceMgr_ImportFasta(self, rslt, &sub);
+ KDataBufferWhack(&sub);
}
+ else
+ for (i = 0; i != seqIds; ++i) {
+ uint64_t const ofs = seqIdOffset[i];
+ uint64_t const nxt = (i < seqIds - 1) ? seqIdOffset[i + 1] : file_size;
+ uint64_t const len = nxt - ofs;
+ ReferenceSeq tmp;
+ ReferenceSeq *new_seq;
+
+ memset(&sub, 0, sizeof(sub));
+ KDataBufferSub(&fbuf, &sub, ofs, len);
+ rc = ReferenceMgr_ImportFasta(self, &tmp, &sub);
+ KDataBufferWhack(&sub);
+ if (rc) break;
+
+ rc = ReferenceMgr_NewReferenceSeq(self, &new_seq);
+ if (rc) break;
+
+ *new_seq = tmp;
+ }
}
- free(tmp);
- } while(rc == 0 && page_sz > 0);
- KMMapRelease(mm);
+ KDataBufferWhack(&seqIdBuf);
+ }
+ KDataBufferWhack(&fbuf);
}
+ }
+ return rc;
+}
+
+static
+rc_t OpenFastaFile(KFile const **const kf,
+ KDirectory const *const dir,
+ char const base[],
+ unsigned const len)
+{
+ char fname_a[4096];
+ char *fname_h = NULL;
+ char *fname = fname_a;
+ rc_t rc;
+
+ if (len + 7 >= sizeof(fname_a)) {
+ fname_h = malloc(len + 7);
+ if (fname_h)
+ fname = fname_h;
+ else
+ return RC(rcAlign, rcFile, rcOpening, rcMemory, rcExhausted);
+ }
+ memcpy(fname, base, len);
+ memcpy(fname + len, ".fasta", 7);
+
+ rc = KDirectoryOpenFileRead(dir, kf, fname);
+ if (rc) {
+ fname[len + 3] = '\0'; /* base.fasta -> base.fa */
+
+ rc = KDirectoryOpenFileRead(dir, kf, fname);
+ }
+ free(fname_h);
+ return rc;
+}
+
+#if 1
+void ReferenceSeq_Dump(ReferenceSeq const *const rs, unsigned const i, key_id_t const *const key_id_array, unsigned const m)
+{
+ static char const *types[] = {
+ "'unattached'",
+ "'fasta'",
+ "'RefSeq-by-id'",
+ "'RefSeq-by-seqid'",
+ "'dead'"
+ };
+ unsigned j;
+
+ ALIGN_CF_DBGF(("{ "));
+ ALIGN_CF_DBGF(("type: %s, ", (rs->type < 0 || rs->type > rst_dead) ? "null" : types[rs->type]));
+
+ if (rs->id)
+ ALIGN_CF_DBGF(("id: '%s', ", rs->id));
+ else
+ ALIGN_CF_DBGF(("id: null, "));
+
+ if (rs->seqId)
+ ALIGN_CF_DBGF(("seqId: '%s', ", rs->seqId));
+ else
+ ALIGN_CF_DBGF(("seqId: null, "));
+
+ if (rs->fastaSeqId)
+ ALIGN_CF_DBGF(("fastaSeqId: '%s', ", rs->fastaSeqId));
+ else
+ ALIGN_CF_DBGF(("fastaSeqId: null, "));
+
+ ALIGN_CF_DBGF(("seq-len: %u, ", rs->seq_len));
+ ALIGN_CF_DBGF(("circular: %s, ", rs->circular ? "true" : "false"));
+
+ if (rs->md5) {
+ ALIGN_CF_DBGF(("md5: '"));
+ for (j = 0; j != 16; ++j)
+ ALIGN_CF_DBGF(("%02X", rs->md5[j]));
+ ALIGN_CF_DBGF(("', "));
+ }
+ else
+ ALIGN_CF_DBGF(("md5: null, "));
+
+
+ ALIGN_CF_DBGF(("keys: [ "));
+ for (j = 0; j != m; ++j) {
+ key_id_t const *const kid = &key_id_array[j];
+
+ if (kid->id == i)
+ ALIGN_CF_DBGF(("'%s', ", kid->key));
+ }
+ ALIGN_CF_DBGF(("] }"));
+}
+
+void ReferenceMgr_DumpConfig(ReferenceMgr const *const self)
+{
+ unsigned const n = self->refSeqs.elem_count;
+ unsigned const m = self->refSeqsById.elem_count;
+ key_id_t const *const key_id_array = self->refSeqsById.base;
+ unsigned i;
+
+ ALIGN_CF_DBGF(("config: [\n"));
+ for (i = 0; i != n; ++i) {
+ ALIGN_CF_DBGF(("\t"));
+ ReferenceSeq_Dump(&self->refSeq[i], i, key_id_array, m);
+ ALIGN_CF_DBGF((",\n"));
+ }
+ ALIGN_CF_DBGF(("]\n"));
+}
+#endif
+
+static
+rc_t ReferenceMgr_TryFasta(ReferenceMgr *const self, ReferenceSeq *const seq,
+ char const id[], unsigned const idLen)
+{
+ KFile const *kf = NULL;
+ rc_t rc;
+
+ rc = OpenFastaFile(&kf, self->dir, id, idLen);
+
+ if (rc == 0) {
+ rc = ReferenceMgr_ImportFastaFile(self, kf, seq);
KFileRelease(kf);
}
return rc;
}
-LIB_EXPORT rc_t CC ReferenceMgr_Make(const ReferenceMgr** cself, VDatabase* db, const VDBManager* vmgr,
- const uint32_t options, const char* conf, const char* path,
- uint32_t max_seq_len, size_t cache, uint32_t num_open)
+static
+rc_t ReferenceSeq_GetRefSeqInfo(ReferenceSeq *const self)
+{
+ rc_t rc;
+ uint8_t const *md5;
+
+ assert(self != NULL);
+ assert(self->type == rst_refSeqById || self->type == rst_refSeqBySeqId);
+
+ if ((rc = RefSeq_Circular(self->u.refseq, &self->circular)) != 0)
+ return rc;
+ if ((rc = RefSeq_SeqLength(self->u.refseq, &self->seq_len)) != 0)
+ return rc;
+ if ((rc = RefSeq_MD5(self->u.refseq, &md5)) != 0)
+ return rc;
+
+ memcpy(self->md5, md5, 16);
+ return 0;
+}
+
+static
+rc_t ReferenceSeq_Attach(ReferenceMgr *const self, ReferenceSeq *const rs)
{
+ unsigned const seqid_len = rs->seqId ? string_size( rs->seqId ) : 0;
+ unsigned const id_len = rs->id ? string_size( rs->id ) : 0;
rc_t rc = 0;
- KDirectory* dir = NULL;
- ReferenceMgr* obj = NULL;
- uint32_t wopt = 0;
+ KFile const *kf = NULL;
- wopt |= (options & ewrefmgr_co_allREADs) ? ewref_co_SaveRead : 0;
- wopt |= (options & ewrefmgr_co_Coverage) ? ewref_co_Coverage : 0;
+ assert(rs->type == rst_unattached);
+ assert(id_len != 0 || seqid_len != 0);
+
+ if (seqid_len) {
+ if (RefSeqMgr_Exists(self->rmgr, rs->seqId, seqid_len, NULL) == 0) {
+ rc = RefSeqMgr_GetSeq(self->rmgr, &rs->u.refseq, rs->seqId, seqid_len);
+ if (rc == 0) {
+ rs->type = rst_refSeqBySeqId;
+ rc = ReferenceSeq_GetRefSeqInfo(rs);
+ }
+ return rc;
+ }
+ }
+ if (id_len) {
+ if (RefSeqMgr_Exists(self->rmgr, rs->id, id_len, NULL) == 0) {
+ rc = RefSeqMgr_GetSeq(self->rmgr, &rs->u.refseq, rs->id, id_len);
+ if (rc == 0) {
+ rs->type = rst_refSeqById;
+ rc = ReferenceSeq_GetRefSeqInfo(rs);
+ }
+ return rc;
+ }
+ }
+ if (id_len) {
+ rc = OpenFastaFile(&kf, self->dir, rs->id, id_len);
+ if (rc && seqid_len)
+ rc = OpenFastaFile(&kf, self->dir, rs->seqId, seqid_len);
+ }
+ else
+ rc = OpenFastaFile(&kf, self->dir, rs->seqId, seqid_len);
+
+ if (kf) {
+ ReferenceSeq tmp;
+
+ rc = ReferenceMgr_ImportFastaFile(self, kf, &tmp);
+ KFileRelease(kf);
+ if (rc == 0) {
+ tmp.id = rs->id;
+ tmp.seqId = rs->seqId;
+ tmp.circular = rs->circular;
+
+ *rs = tmp;
+ }
+ return rc;
+ }
+ return 0;
+}
- if( max_seq_len == 0 ) {
- max_seq_len = TableWriterRefSeq_MAX_SEQ_LEN;
+static
+rc_t ReferenceMgr_OpenSeq(ReferenceMgr *const self, ReferenceSeq **const rslt,
+ char const id[],
+ unsigned const seq_len,
+ uint8_t const md5[16])
+{
+ unsigned const idLen = string_size( id );
+ key_id_t const *const fnd = ReferenceMgr_FindId(self, id);
+
+ assert(rslt != NULL);
+ *rslt = NULL;
+ if (fnd) {
+ if (self->refSeq[fnd->id].type == rst_dead)
+ return RC(rcAlign, rcIndex, rcSearching, rcItem, rcInvalid);
+ *rslt = &self->refSeq[fnd->id];
+ return 0;
}
- if( cself == NULL || (vmgr == NULL && conf != NULL) ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
- } else if( (obj = calloc(1, sizeof(*obj) + max_seq_len - sizeof(obj->seq_buf))) == NULL ) {
- rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
+ else {
+ unsigned const n = self->refSeqs.elem_count;
+ unsigned i;
+ ReferenceSeq *seq = NULL;
+ rc_t rc = 0;
+
+ /* try to find by id; this should work most of the time */
+ for (i = 0; i != n; ++i) {
+ ReferenceSeq *const rs = &self->refSeq[i];
- } else if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
- BSTreeInit(&obj->tree);
- obj->options = options;
- obj->cache = cache;
- obj->num_open_max = num_open;
- obj->max_seq_len = max_seq_len;
- if( (rc = VDBManagerAddRef(vmgr)) == 0 ) {
- obj->vmgr = vmgr;
+ if (rs->type == rst_dead)
+ continue;
+
+ if (rs->id && strcmp(rs->id, id) == 0) {
+ seq = rs;
+ break;
+ }
}
- if( rc == 0 && db != NULL && (rc = VDatabaseAddRef(db)) == 0 ) {
- obj->db = db;
+ if (seq == NULL) {
+ /* try to find by seqId */
+ for (i = 0; i != n; ++i) {
+ ReferenceSeq *const rs = &self->refSeq[i];
+
+ if (rs->type == rst_dead)
+ continue;
+
+ if (rs->seqId && strcasecmp(rs->seqId, id) == 0) {
+ seq = rs;
+ break;
+ }
+ }
}
- if( rc == 0 ) {
- if( path == NULL ) {
- if( (rc = KDirectoryAddRef(dir)) == 0 ) {
- obj->dir = dir;
+ if (seq == NULL) {
+ /* try to find id within fasta seqIds */
+ unsigned best_wt = 0;
+ unsigned best = n;
+
+ for (i = 0; i != n; ++i) {
+ ReferenceSeq const *const rs = &self->refSeq[i];
+
+ if (rs->fastaSeqId) {
+ unsigned wt = str_weight(rs->fastaSeqId, id, idLen);
+
+ if (wt != no_match) {
+ if (seq_len && rs->seq_len == seq_len)
+ wt |= seq_len_match;
+ if (md5 && memcmp(rs->md5, md5, 16) == 0)
+ wt |= md5_match;
+ }
+ if (best_wt < wt) {
+ best_wt = wt;
+ best = i;
+ }
}
- } else {
- rc = KDirectoryOpenDirRead(dir, &obj->dir, false, path);
}
- if( rc == 0 ) {
- rc = RefSeqMgr_Make(&obj->rmgr, obj->vmgr, 0, cache, num_open);
+ if (best < n)
+ seq = &self->refSeq[best];
+ }
+ if (seq == NULL) {
+ /* try id.fasta or id.fa */
+ rc = ReferenceMgr_NewReferenceSeq(self, &seq);
+ if (rc) return rc;
+ rc = ReferenceMgr_TryFasta(self, seq, id, idLen);
+ if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcPath)
+ rc = 0;
+ else if (rc) return rc;
+ }
+ else if (seq->type == rst_unattached) {
+ /* expect to get here most of the time
+ *
+ * ReferenceSeq_Attach tries to get reference:
+ * from RefSeqMgr:
+ * by seqId
+ * by id
+ * from self->dir (data directory)
+ * id.fasta
+ * id.fa
+ * seqId.fasta
+ * seqId.fa
+ */
+ rc = ReferenceSeq_Attach(self, seq);
+ if (rc) return rc;
+
+ if (seq->type == rst_unattached && seq->seqId != NULL) {
+ /* attach didn't work for id; try to find seqId within fasta seqIds */
+ unsigned const seqIdLen = string_size( seq->seqId );
+ unsigned best_wt = 0;
+ unsigned best = n;
+
+ for (i = 0; i != n; ++i) {
+ ReferenceSeq const *const rs = &self->refSeq[i];
+
+ if (rs->type == rst_local && rs->fastaSeqId) {
+ unsigned wt = str_weight(rs->fastaSeqId, seq->seqId, seqIdLen);
+
+ if (wt != no_match) {
+ if (seq_len && rs->seq_len == seq_len)
+ wt |= seq_len_match;
+ if (md5 && memcmp(rs->md5, md5, 16) == 0)
+ wt |= md5_match;
+ }
+ if (best_wt < wt) {
+ best_wt = wt;
+ best = i;
+ }
+ }
+ }
+ if (best < n) {
+ char *const tmp_id = seq->id;
+ char *const tmp_seqId = seq->seqId;
+ bool const tmp_circ = seq->circular;
+
+ *seq = self->refSeq[best];
+ seq->id = tmp_id;
+ seq->seqId = tmp_seqId;
+ seq->fastaSeqId = NULL;
+ seq->circular = tmp_circ;
+
+ /* add another reference to the data buffer */
+ rc = KDataBufferSub(&self->refSeq[best].u.local.buf, &seq->u.local.buf, 0, 0);
+ if (rc) return rc;
+ }
}
}
- if (rc == 0 && (rc = ReferenceMgr_Conf(obj->rmgr, &obj->tree, obj->dir, obj->vmgr, conf)) != 0 ) {
- (void)PLOGERR(klogErr, (klogErr, rc, "failed to open configuration $(file)", "file=%s/%s", path ? path : ".", conf));
+ assert(seq != NULL);
+ if (seq->type == rst_unattached) {
+ /* nothing has worked and nothing left to try */
+ seq->type = rst_dead;
+ rc = RC(rcAlign, rcFile, rcConstructing, rcId, rcNotFound);
}
+ else {
+ ReferenceSeq *alt = NULL;
+
+ /* perform ambiguity check
+ *
+ * This search follows the same pattern as the main search but has
+ * more stringent conditions. One hopes that it fails to find
+ * anything.
+ */
+ for (i = 0; i != n; ++i) {
+ ReferenceSeq *const rs = &self->refSeq[i];
+
+ if ( rs->type != rst_dead
+ && rs->type != rst_unattached
+ && rs != seq
+ && rs->id != NULL
+ && strcmp(id, rs->id) == 0
+ && (seq_len == 0 || seq_len == rs->seq_len))
+ {
+ alt = rs;
+ break;
+ }
+ }
+ if (alt == NULL) {
+ for (i = 0; i != n; ++i) {
+ ReferenceSeq *const rs = &self->refSeq[i];
+
+ if ( rs->type != rst_dead
+ && rs->type != rst_unattached
+ && rs != seq
+ && rs->seqId != NULL
+ && strcasecmp(id, rs->seqId) == 0
+ && (seq_len == 0 || seq_len == rs->seq_len))
+ {
+ alt = rs;
+ break;
+ }
+ }
+ }
+ if (alt == NULL) {
+ unsigned best_wt = 0;
+ unsigned best = n;
+
+ for (i = 0; i != n; ++i) {
+ ReferenceSeq const *const rs = &self->refSeq[i];
+
+ if (rs != seq && rs->fastaSeqId && rs != seq) {
+ unsigned wt = str_weight(rs->fastaSeqId, id, idLen);
+
+ if (wt != no_match) {
+ if (seq_len && rs->seq_len == seq_len)
+ wt |= seq_len_match;
+ if (md5 && memcmp(rs->md5, md5, 16) == 0)
+ wt |= md5_match;
+ }
+ if (best_wt < wt) {
+ best_wt = wt;
+ best = i;
+ }
+ }
+ }
+ if (best < n)
+ alt = &self->refSeq[best];
+ }
+ /* try to knock the alternative out of consideration
+ * if it survives length and md5 tests, it is *really* likely to be
+ * a duplicate.
+ */
+ if (alt != NULL && seq_len != 0 && seq_len != alt->seq_len)
+ alt = NULL;
+ if (alt != NULL && md5 != NULL && memcmp(md5, alt->md5, 16) != 0)
+ alt = NULL;
+ if (alt != NULL) {
+ seq->type = rst_dead;
+ rc = RC(rcAlign, rcFile, rcConstructing, rcId, rcAmbiguous);
+ }
+ }
+ if ( seq->id == NULL )
+ {
+ seq->id = string_dup( id, string_size( id ) );
+ if ( seq->id == NULL )
+ return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+ }
+ /* finally, associate the id with the object and put it in the index */
+ {{
+ rc_t rc2 = ReferenceMgr_AddId(self, id, seq);
+ if (rc == 0)
+ rc = rc2;
+ }}
+ if (rc == 0)
+ *rslt = seq;
+ return rc;
}
- KDirectoryRelease(dir);
- if( rc == 0 ) {
- *cself = obj;
- ALIGN_DBG("conf %s, local path '%s'", conf ? conf : "", path ? path : "");
- } else {
- ReferenceMgr_Release(obj, false, NULL, false);
- ALIGN_DBGERR(rc);
+}
+
+LIB_EXPORT rc_t CC ReferenceMgr_SetCache(ReferenceMgr const *const self, size_t cache, uint32_t num_open)
+{
+ return RefSeqMgr_SetCache(self->rmgr, cache, num_open);
+}
+
+static
+rc_t OpenDataDirectory(KDirectory const **rslt, char const path[])
+{
+ KDirectory *dir;
+ rc_t rc = KDirectoryNativeDir(&dir);
+
+ if (rc == 0) {
+ if (path) {
+ rc = KDirectoryOpenDirRead(dir, rslt, false, path);
+ KDirectoryRelease(dir);
+ }
+ else
+ *rslt = dir;
}
return rc;
}
-static
-void CC ReferenceSeq_Whack(BSTNode *n, void *data)
+LIB_EXPORT rc_t CC ReferenceMgr_Make(ReferenceMgr const **cself, VDatabase *db,
+ VDBManager const* vmgr,
+ const uint32_t options, char const conf[], char const path[],
+ uint32_t max_seq_len, size_t cache, uint32_t num_open)
{
- ReferenceSeq* self = (ReferenceSeq*)n;
- if( self->local ) {
- KMMapRelease(self->u.local.map);
- } else {
- RefSeq_Release(self->u.refseq.o);
+ rc_t rc;
+ ReferenceMgr *self;
+ uint32_t wopt = 0;
+
+ if (cself == NULL)
+ return RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
+
+ wopt |= (options & ewrefmgr_co_allREADs) ? ewref_co_SaveRead : 0;
+ wopt |= (options & ewrefmgr_co_Coverage) ? ewref_co_Coverage : 0;
+
+ if (max_seq_len == 0)
+ max_seq_len = TableWriterRefSeq_MAX_SEQ_LEN;
+
+ self = calloc(1, sizeof(*self));
+ if (self) {
+ rc = KDataBufferMakeBytes(&self->seq, max_seq_len);
+ if (rc == 0) {
+ self->compress.elem_bits = 32;
+ self->refSeqs.elem_bits = sizeof(ReferenceSeq) * 8;
+ self->refSeqsById.elem_bits = sizeof(key_id_t) * 8;
+
+ self->options = options;
+ self->cache = cache;
+ self->num_open_max = num_open;
+ self->max_seq_len = max_seq_len;
+ if (db) VDatabaseAddRef(self->db = db);
+ rc = OpenDataDirectory(&self->dir, path);
+ if (rc == 0) {
+ rc = RefSeqMgr_Make(&self->rmgr, vmgr, 0, cache, num_open);
+ if (rc == 0) {
+ rc = ReferenceMgr_Conf(self, conf);
+ if (rc == 0) {
+ *cself = self;
+ ALIGN_DBG("conf %s, local path '%s'", conf ? conf : "", path ? path : "");
+ return 0;
+ }
+ (void)PLOGERR(klogErr, (klogErr, rc, "failed to open configuration $(file)", "file=%s/%s", path ? path : ".", conf));
+ }
+ }
+ }
+ ReferenceMgr_Release(self, false, NULL, false);
}
- free(self);
+ else
+ rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
+
+ ALIGN_DBGERR(rc);
+
+ return rc;
+}
+
+#define ID_CHUNK_SZ 256
+
+typedef struct TChunk32_struct {
+ struct TChunk32_struct* next;
+ uint32_t id[ID_CHUNK_SZ]; /*** will only work with positive ids **/
+} TChunk32;
+
+typedef struct AlignId32List_struct {
+ TChunk32* head;
+ TChunk32* tail;
+ uint32_t tail_qty; /** number elements in the last chunk **/
+ uint32_t chunk_qty; /** number of chunks */
+} AlignId32List;
+typedef struct AlignIdList_struct {
+ AlignId32List **sub_list;
+ uint32_t sub_list_count;
+} AlignIdList;
+
+static uint64_t AlignId32ListCount(AlignId32List *l)
+{ return (l->chunk_qty>0)?ID_CHUNK_SZ*(l->chunk_qty-1)+ l->tail_qty:0;}
+
+static uint64_t AlignIdListCount(AlignIdList *l)
+{
+ uint64_t ret=0;
+ if(l){
+ uint32_t i;
+ for(i=0;i<l->sub_list_count;i++){
+ if(l->sub_list[i]){
+ ret += AlignId32ListCount(l->sub_list[i]);
+ }
+ }
+ }
+ return ret;
+}
+static int int64_compare(const void *A, const void *B, void *ignore)
+{
+ return *(int64_t*)A - *(int64_t*)B;
+}
+static uint64_t AlignIdListFlatCopy(AlignIdList *l,int64_t *buf,uint64_t num_elem,bool do_sort)
+{
+ uint64_t res=0;
+ uint32_t i,j;
+ AlignId32List* cl;
+ assert(l!=0);
+
+ if((cl = l->sub_list[0])!=NULL){
+ TChunk32* head = cl->head;
+ while(head != cl->tail){
+ for(i=0;i<ID_CHUNK_SZ && res < num_elem;i++,res++){
+ buf[res] = head->id[i];
+ }
+ head = head->next;
+ }
+ for(i=0;i<cl->tail_qty && res < num_elem;i++,res++){
+ buf[res] = head->id[i];
+ }
+ }
+ for(j = 1; j< l->sub_list_count && res < num_elem;j++){
+ if((cl = l->sub_list[j])!=NULL){
+ TChunk32* head = cl->head;
+ uint64_t hi = ((uint64_t)j) << 32;
+ while(head != cl->tail){
+ for(i=0;i<ID_CHUNK_SZ && res < num_elem;i++,res++){
+ buf[res] = hi | head->id[i];
+ }
+ head = head->next;
+ }
+ for(i=0;i<cl->tail_qty && res < num_elem;i++,res++){
+ buf[res] = hi | head->id[i];
+ }
+ }
+ }
+ if(do_sort && res > 1)
+ ksort(buf,res,sizeof(*buf),int64_compare,NULL);
+ return res;
+}
+
+static rc_t AlignId32ListAddId(AlignId32List *l,const uint32_t id)
+{
+ if(l->tail == NULL){
+ l->head = l->tail = malloc(sizeof(*l->tail));
+ if(l->tail == NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+ l->chunk_qty =1;
+ l->tail_qty = 0;
+ }
+ if(l->tail_qty == ID_CHUNK_SZ){/** chunk is full **/
+ l->tail->next = malloc(sizeof(*l->tail));
+ if(l->tail == NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+ l->tail = l->tail->next;
+ l->chunk_qty ++;
+ l->tail_qty = 0;
+ }
+ l->tail->id[l->tail_qty++]=id;
+ return 0;
+}
+
+static rc_t AlignIdListAddId(AlignIdList *l,const int64_t id)
+{
+ uint32_t sub_id,id32;
+ if(id < 0) return RC(rcAlign, rcTable, rcCommitting, rcId, rcOutofrange);
+ id32 = (uint32_t) id;
+ sub_id = id >> 32;
+ if(sub_id >= l->sub_list_count) return RC(rcAlign, rcTable, rcCommitting, rcId, rcOutofrange);
+ if(l->sub_list[sub_id] == NULL){
+ l->sub_list[sub_id] = calloc(1,sizeof(AlignId32List));
+ if(l->sub_list[sub_id] == NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+ }
+ return AlignId32ListAddId(l->sub_list[sub_id],id32);
+}
+
+static void AlignId32ListRelease(AlignId32List *l)
+{
+ if(l){
+ while(l->head != l->tail){
+ TChunk32* head = l->head;
+ l->head = l->head->next;
+ free(head);
+ }
+ free(l->head);
+ free(l);
+ }
+}
+static void AlignIdListRelease(AlignIdList *l)
+{
+ if(l){
+ uint32_t i;
+ for(i=0;i<l->sub_list_count;i++){
+ AlignId32ListRelease(l->sub_list[i]);
+ }
+ free(l->sub_list);
+ free(l);
+ }
}
-#define ID_CHUNK_SZ 16
-typedef struct TChunk_struct {
- struct TChunk_struct* next;
- uint16_t secondary; /* bit mask */
- int64_t id[ID_CHUNK_SZ];
-} TChunk;
typedef struct {
+ AlignIdList* idlist;
ReferenceSeqCoverage cover;
- TChunk* head;
- TChunk* tail;
- uint8_t tail_qty; /* id count within tail */
- uint32_t id_qty; /* id count overall */
- uint8_t* hilo; /* array of max_seq_len */
+ INSDC_coord_len bin_seq_len;
} TCover;
static
-void ReferenceMgr_TCoverRelease(const TCover* c)
+void ReferenceMgr_TCoverRelease(TCover* c)
{
- TChunk* h = c->head;
- while( h != NULL ) {
- TChunk* n = h->next;
- free(h);
- h = n;
- }
+ if(c){
+ AlignIdListRelease(c->idlist);
+ c->idlist = NULL;
+ }
}
+static
+rc_t ReferenceMgr_TCoverSetMaxId(TCover* c,int64_t id)
+{
+ uint32_t sub_id;
+ if(id < 0) return RC(rcAlign, rcTable, rcCommitting, rcId, rcOutofrange);
+ sub_id = id >> 32;
+ if(c->idlist == NULL){
+ c->idlist = calloc(1,sizeof(AlignIdList));
+ if(c->idlist==NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+ c->idlist->sub_list_count = sub_id+1;
+ c->idlist->sub_list = calloc(c->idlist->sub_list_count,sizeof(c->idlist->sub_list[0]));
+ if( c->idlist->sub_list == NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+ } else {
+ return RC(rcAlign, rcTable, rcCommitting, rcParam, rcUnexpected);
+ }
+ return 0;
+}
+
static
-int CC int64_cmp( const void* l, const void* r, void *data )
+rc_t CoverageGetSeqLen(ReferenceMgr const *const mgr, TCover data[], uint64_t const rows)
{
- return *(const int64_t*)l - *(const int64_t*)r;
+ TableReaderColumn acols[] =
+ {
+ {0, "(INSDC:coord:len)SEQ_LEN", {NULL}, 0, 0},
+ {0, NULL, {NULL}, 0, 0}
+ };
+ VTable const *tbl;
+ rc_t rc = VDatabaseOpenTableRead(mgr->db, &tbl, "REFERENCE");
+
+ if (rc == 0) {
+ TableReader const *reader;
+
+ rc = TableReader_Make(&reader, tbl, acols, 0);
+ if (rc == 0) {
+ uint64_t i;
+
+ for (i = 0; i != rows; ++i) {
+ rc = TableReader_ReadRow(reader, i + 1);
+ if (rc == 0 && acols->len > 0)
+ data[i].bin_seq_len = acols->base.coord_len[0];
+ }
+ TableReader_Whack(reader);
+ }
+ VTableRelease(tbl);
+ }
+ return rc;
}
static
-rc_t ReferenceMgr_ReCover(const ReferenceMgr* cself, uint64_t rows)
+rc_t ReferenceMgr_ReCover(const ReferenceMgr* cself, uint64_t ref_rows)
{
rc_t rc = 0;
- int i;
uint64_t new_rows = 0;
const TableWriterRefCoverage* cover_writer = NULL;
-
+
TableReaderColumn acols[] =
{
- {0, "REF_ID", NULL, 0, 0},
- {0, "REF_START", NULL, 0, 0},
- {0, "REF_LEN", NULL, 0, 0},
- {0, "MISMATCH", NULL, 0, 0},
- {0, "REF_OFFSET", NULL, 0, 0},
- {0, "HAS_REF_OFFSET", NULL, 0, 0},
- {0, NULL, NULL, 0, 0}
+ {0, "REF_ID", {NULL}, 0, 0},
+ {0, "REF_START", {NULL}, 0, 0},
+ {0, "CIGAR_LONG",{NULL}, 0, 0},
+ {0, "REF_POS",{NULL}, 0, 0},
+ {0, NULL, {NULL}, 0, 0}
};
- const int64_t** al_ref_id = (const int64_t**)&acols[0].base;
- const INSDC_coord_zero** al_ref_start = (const INSDC_coord_zero**)&acols[1].base;
- const INSDC_coord_len** al_ref_len = (const INSDC_coord_len**)&acols[2].base;
- const uint32_t* mismatch_len = &acols[3].len;
- const uint32_t* ref_offset_len = &acols[4].len;
- const int32_t** ref_offset = (const int32_t **)&acols[4].base;
- const uint8_t** has_ref_offset = (const uint8_t **)&acols[5].base;
-
- /* TODO TO DO TBD change to work properly with mutiple reads in alignment table */
-
- if( (rc = TableWriterRefCoverage_Make(&cover_writer, cself->db)) == 0 ) {
- rc_t rc1 = 0;
- /* array of ids for sorting and writing to table:
- for head prim_ids , from tail secondry_ids */
- int64_t ref_from = 1, *ids = NULL, rr;
- size_t ids_sz = 0;
- uint64_t ref_qty = rows;
-
- ALIGN_DBG("sizeof(TCover) %u, sizeof(TChunk) %u", sizeof(TCover), sizeof(TChunk));
- while( rc == 0 && ref_from <= rows ) {
- const char* tbls[] = {"PRIMARY_ALIGNMENT", "SECONDARY_ALIGNMENT"};
- TCover* data = NULL;
- uint8_t* hilo;
- /* allocate mem for up to ref_qty of reference coverage data up to 4Gb */
- do {
- TCover* t = NULL;
- if( (ref_qty * (sizeof(*t) + cself->max_seq_len)) > (4L * 1024 * 1024 * 1024) ||
- (t = calloc(ref_qty, sizeof(*t) + cself->max_seq_len)) == NULL ) {
- ref_qty = ref_qty / 3 * 2;
+ const int64_t** al_ref_id = &acols[0].base.i64;
+ const INSDC_coord_zero** al_ref_start = &acols[1].base.coord0;
+ const TableReaderColumn* cigar = &acols[2];
+ const INSDC_coord_zero** al_ref_pos = &acols[3].base.coord0;
+ /* order is important see ReferenceSeqCoverage struct */
+ struct {
+ const char* nm;
+ const char* col;
+ bool ids_only;
+ } tbls[] = { {"PRIMARY_ALIGNMENT", "PRIMARY_ALIGNMENT_IDS",false},
+ {"SECONDARY_ALIGNMENT", "SECONDARY_ALIGNMENT_IDS",false},
+ {"EVIDENCE_INTERVAL", "EVIDENCE_INTERVAL_IDS", true} };
+ int tbls_qty=(sizeof(tbls)/sizeof(tbls[0]));
+ rc_t rc1 = 0;
+ int64_t rr;
+ uint32_t i;
+ uint8_t* hilo=NULL;
+ TCover* data = NULL;
+
+ /* allocate mem for ref_rows of reference coverage*/
+ if((data = calloc(ref_rows, (sizeof(*data) + cself->max_seq_len))) == NULL ) {
+ rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+ } else {
+ /** allocation for both data and hilo was done in 1 shot ***/
+ hilo = (uint8_t *)&data[ref_rows];
+ rc = CoverageGetSeqLen(cself, data, ref_rows);
+ }
+ /* grep through tables for coverage data */
+ ALIGN_R_DBG("covering REFERENCE rowid range [1:%ld]",ref_rows);
+ for(i = 0; rc == 0 && i < tbls_qty; i++) { /* TABLE LOOP STARTS */
+ const VTable* table = NULL;
+ const TableReader* reader = NULL;
+ int64_t al_from;
+ uint64_t al_qty;
+
+ ALIGN_R_DBG("covering REFERENCE with %s", tbls[i].nm);
+ if( (rc = VDatabaseOpenTableRead(cself->db, &table, tbls[i].nm)) != 0 ) {
+ if( GetRCState(rc) == rcNotFound ) {
+ ALIGN_R_DBG("table %s was not found, ignored", tbls[i].nm);
+ rc = 0;
+ continue;
+ } else {
+ break;
+ }
+ }
+ if( (rc = TableReader_Make(&reader, table, acols, cself->cache)) == 0 &&
+ (rc = TableReader_IdRange(reader, &al_from, &al_qty)) == 0 ) {
+ int64_t al_rowid;
+
+ for(al_rowid = al_from; rc == 0 && al_rowid < al_from + al_qty; al_rowid++) {
+ if( (rc = TableReader_ReadRow(reader, al_rowid)) != 0 ) {
+ break;
+ }
+ rr = **al_ref_id-1;
+ /**** Record ALIGNMENT_IDS ***/
+ if( data[rr].idlist == NULL
+ && (rc = ReferenceMgr_TCoverSetMaxId(data+rr,al_from + al_qty))!=0){
+ break; /*** out-of-memory ***/
}
- if( ref_qty < 1 ) {
- rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+ if((rc = AlignIdListAddId(data[rr].idlist,al_rowid))!=0){
+ break; /*** out-of-memory ***/
}
- data = t;
- hilo = (uint8_t*)&data[ref_qty];
- } while( rc == 0 && data == NULL );
- /* grep through tables for coverage data */
- ALIGN_DBG("covering REFERENCE rowid range [%ld:%ld]", ref_from, ref_from + ref_qty - 1);
- for(i = 0; rc == 0 && i < sizeof(tbls)/sizeof(tbls[0]); i++ ) {
- const VTable* table = NULL;
- const TableReader* reader = NULL;
- int64_t al_from;
- uint64_t al_qty;
-
- if( (rc = VDatabaseOpenTableRead(cself->db, &table, tbls[i])) == 0 &&
- (rc = TableReader_Make(&reader, table, acols, cself->cache)) == 0 &&
- (rc = TableReader_IdRange(reader, &al_from, &al_qty)) == 0 ) {
- int64_t al_rowid;
- for(al_rowid = al_from; rc == 0 && al_rowid <= al_qty; al_rowid++) {
- int64_t ref_r, al_ref_id_end;
- uint64_t j, seq_start = 0, refseq_start, refseq_len;
- if( (rc = TableReader_ReadRow(reader, al_rowid)) != 0 ) {
+ /**** Done alignment ids ***/
+ if( !tbls[i].ids_only ) { /*** work on statistics ***/
+ char const *c = cigar->base.str;
+ const char *c_end = c + cigar->len;
+ int64_t const global_ref_pos = rr*cself->max_seq_len + **al_ref_start; /** global_ref_start **/
+ int64_t const global_refseq_start = global_ref_pos - **al_ref_pos; /** global_ref_start of current reference **/
+ unsigned const bin_no = global_ref_pos / cself->max_seq_len;
+ TCover *const bin = &data[bin_no];
+ uint8_t *const cov = &hilo[global_ref_pos];
+ int64_t ref_offset = 0;
+ int64_t max_ref_offset = 0;
+ int64_t min_ref_offset = 0;
+ int64_t j;
+
+ while (rc == 0 && c < c_end) {
+ int op_len = strtol(c, (char **)&c, 10);
+ int const op = *c++;
+
+ switch (op){
+ case 'I':/* extra bases in the read **/
+ ++bin->cover.indels;
+ case 'S':/* skip in the read */
break;
+ case 'B':/* back up in the sequence */
+ if (ref_offset > op_len)
+ ref_offset -= op_len;
+ else
+ ref_offset = 0;
+ break;
+ case 'D': /** delete in the reference ***/
+ ++bin->cover.indels;
+ case 'N': /** expected skip in the reference ***/
+ ref_offset += op_len;
+ break;
+ case 'X':
+ bin->cover.mismatches += op_len;
+ case '=':
+ ref_offset += op_len;
+ break;
+ default:
+ rc = RC(rcAlign, rcTable, rcCommitting, rcData, rcUnrecognized);
}
- /* alignment can run across multiple reference chunks */
- al_ref_id_end = cself->max_seq_len - **al_ref_start;
- if( al_ref_id_end < **al_ref_len ) {
- al_ref_id_end = (**al_ref_len - al_ref_id_end) / cself->max_seq_len + 1;
- } else {
- al_ref_id_end = 1;
- }
- al_ref_id_end += **al_ref_id;
- refseq_start = **al_ref_start;
- ALIGN_DBG("al row %li has REF_ID [%ld,%ld], REF_START: %u, REF_LEN %u",
- al_rowid, **al_ref_id, al_ref_id_end - 1, **al_ref_start, **al_ref_len);
- for(ref_r = **al_ref_id; ref_r < al_ref_id_end; ref_r++) {
- refseq_len = cself->max_seq_len - refseq_start;
- if( seq_start + refseq_len > **al_ref_len ) {
- refseq_len = **al_ref_len - seq_start;
+ if (min_ref_offset > ref_offset)
+ min_ref_offset = ref_offset;
+ if (max_ref_offset < ref_offset)
+ max_ref_offset = ref_offset;
+ }
+ for (j = min_ref_offset; j < max_ref_offset; ++j) {
+ unsigned const hl = cov[j];
+
+ if (hl < UINT8_MAX)
+ cov[j] = hl + 1;
+ }
+ /*** check if OVERLAPS are needed ***/
+ {
+ int64_t min_rr = (global_ref_pos + min_ref_offset)/cself->max_seq_len;
+ int64_t max_rr = (global_ref_pos + max_ref_offset)/cself->max_seq_len;
+
+ if(min_rr < 0) min_rr = 0;
+ if(max_rr >= ref_rows) max_rr = ref_rows -1;
+
+ assert(min_rr<= max_rr);
+
+ if(min_rr < max_rr){
+ int64_t overlap_ref_pos; /** relative the beginning of the reference **/
+ uint32_t overlap_ref_len = (global_ref_pos + max_ref_offset) % cself->max_seq_len ;
+
+ min_rr++;
+ if (global_ref_pos + min_ref_offset > global_refseq_start) {
+ overlap_ref_pos = global_ref_pos + min_ref_offset - global_refseq_start;
}
- ALIGN_DBG("covered ref_id %ld [%ld,%ld]", ref_r, refseq_start, refseq_start + refseq_len);
- if( ref_r >= ref_from && ref_r < ref_from + ref_qty ) {
- uint64_t k = ref_r - ref_from;
- ALIGN_DBG("%ld is a match for %ld[%lu]", ref_r, ref_from + k, k);
- if( data[k].tail_qty == ID_CHUNK_SZ || data[k].head == NULL ) {
- TChunk* x = malloc(sizeof(*(data[k].tail)));
- while( x == NULL ) {
- /* release last ref cover_writer record and retry */
- ReferenceMgr_TCoverRelease(&data[--ref_qty]);
- ALIGN_DBG("downsize covering REFERENCE rowid range [%ld:%ld] from %s",
- ref_from, ref_from + ref_qty - 1, tbls[i]);
- if( ref_qty < 1 ) {
- rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
- break;
- } else if( ref_r >= ref_from + ref_qty ) {
- break;
- }
- }
- if( rc != 0 ) {
- break;
- }
- if( data[k].head == NULL ) {
- data[k].head = x;
- } else {
- data[k].tail->next = x;
- }
- x->secondary = 0;
- data[k].tail = x;
- data[k].tail->next = NULL;
- data[k].tail_qty = 0;
- data[k].hilo = &hilo[cself->max_seq_len * k];
- }
- data[k].tail->id[data[k].tail_qty] = al_rowid;
- if( i > 0 ) {
- data[k].tail->secondary |= 1 << data[k].tail_qty;
- }
- data[k].tail_qty++;
- data[k].id_qty++;
- if( ref_r == **al_ref_id ) {
- /* write those to 1st chunk only */
-
- unsigned left_soft_clip = 0;
-
- if (*ref_offset_len > 0 && (*has_ref_offset)[0] != 0 && (*ref_offset)[0] < 0) {
- left_soft_clip = 1;
- }
- data[k].cover.mismatches += *mismatch_len;
- data[k].cover.indels += *ref_offset_len - left_soft_clip;
- }
- for(j = refseq_start; j < refseq_start + refseq_len; j++) {
- if( data[k].hilo[j] < UINT8_MAX ) {
- data[k].hilo[j]++;
- }
+ else {
+ overlap_ref_pos = 1;
+ }
+ for ( ; min_rr < max_rr; ++min_rr) {
+ if ( data[min_rr].cover.overlap_ref_pos[i] == 0 /*** NOT SET***/
+ || overlap_ref_pos < data[min_rr].cover.overlap_ref_pos[i])
+ {
+ data[min_rr].cover.overlap_ref_pos[i] = overlap_ref_pos;
}
+ data[min_rr].cover.overlap_ref_len[i] = cself->max_seq_len; /*** in between chunks get full length of overlap **/
+ }
+ if ( data[min_rr].cover.overlap_ref_pos[i] == 0
+ || overlap_ref_pos < data[min_rr].cover.overlap_ref_pos[i])
+ {
+ data[min_rr].cover.overlap_ref_pos[i] = overlap_ref_pos;
}
- seq_start += refseq_len;
- refseq_start = 0;
+ if (overlap_ref_len > data[min_rr].cover.overlap_ref_len[i])
+ data[min_rr].cover.overlap_ref_len[i] = overlap_ref_len;
}
- rc = rc ? rc : Quitting();
}
- }
- VTableRelease(table);
- TableReader_Whack(reader);
+ } /**** DONE WITH WORK ON STATISTICS ***/
+ ALIGN_DBGERR(rc);
+ rc = rc ? rc : Quitting();
}
- /* prep and write coverage data */
- for(rr = 0; rc == 0 && rr < ref_qty; rr++) {
- uint32_t i;
- TChunk* x;
- ReferenceSeqCoverage* c = &data[rr].cover;
-
- while( ids_sz < data[rr].id_qty ) {
- int64_t* n = realloc(ids, data[rr].id_qty * sizeof(*ids));
- if( n == NULL ) {
- ReferenceMgr_TCoverRelease(&data[--ref_qty]);
- ALIGN_DBG("downsize covering REFERENCE rowid range [%ld:%ld]", ref_from, ref_from + ref_qty - 1);
- if( ref_qty < 1 ) {
- rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
- break;
- } else if( rr >= ref_qty ) {
- break;
+ /*** HAVE TO RELEASE **/
+ TableReader_Whack(reader);
+ VTableRelease(table);
+ /*** NOW SAVE AND RELEASE THE COLUMN ***/
+ if( (rc = TableWriterRefCoverage_MakeIds(&cover_writer, cself->db, tbls[i].col)) == 0 ) {
+ for(rr=0; rc ==0 && rr < ref_rows; rr ++){
+ uint64_t num_elem = AlignIdListCount( data[rr].idlist);
+ uint64_t num_elem_copied = 0;
+ if(num_elem > 0 ){
+#define BUF_STACK_COUNT 128 * 1024
+ int64_t buf_stack[BUF_STACK_COUNT];
+ int64_t *buf_alloc = NULL;
+ int64_t *buf = buf_stack;
+ if(num_elem > BUF_STACK_COUNT){
+ buf=buf_alloc=malloc(num_elem*sizeof(buf[0]));
+ if(buf_alloc == NULL)
+ rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
}
- } else {
- ids = n;
- ids_sz = data[rr].id_qty;
- }
- }
- if( rc != 0 || rr >= ref_qty ) {
- break;
- }
- ALIGN_DBGF(("ref rowid %ld:", ref_from + rr));
- x = data[rr].head;
- while( x != NULL ) {
- uint8_t q = data[rr].tail == x ? data[rr].tail_qty : ID_CHUNK_SZ;
- for(i = 0; i < q; i++) {
- ALIGN_DBGF((" %lu[%c]", x->id[i], (x->secondary & i) ? 's' : 'p'));
- if( x->secondary & i ) {
- ids[ids_sz - ++c->secondary_ids.elements] = x->id[i];
- } else {
- ids[c->primary_ids.elements++] = x->id[i];
+ if(rc == 0){
+ num_elem_copied = AlignIdListFlatCopy(data[rr].idlist,buf,num_elem,true);
+ assert(num_elem == num_elem_copied);
+ }
+ ReferenceMgr_TCoverRelease(data+rr); /** release memory ***/
+ if(rc == 0){
+ rc = TableWriterRefCoverage_WriteIds(cover_writer, rr+1, buf,num_elem);
}
+ if(buf_alloc) free(buf_alloc);
+ } else {
+ rc = TableWriterRefCoverage_WriteIds(cover_writer, rr+1, NULL,0);
}
- x = x->next;
}
- c->primary_ids.buffer = ids;
- c->secondary_ids.buffer = &ids[ids_sz - c->secondary_ids.elements];
- ALIGN_DBGF((" ids 0x%p:0x%p,", ids, ids + ids_sz));
- ALIGN_DBGF((" prm 0x%p q=%lu,", c->primary_ids.buffer, c->primary_ids.elements));
- ALIGN_DBGF((" 2nd 0x%p q=%lu\n", c->secondary_ids.buffer, c->secondary_ids.elements));
- ksort((void*)(c->primary_ids.buffer), c->primary_ids.elements, sizeof(*ids), int64_cmp, NULL);
- ksort((void*)(c->secondary_ids.buffer), c->secondary_ids.elements, sizeof(*ids), int64_cmp, NULL);
- if( data[rr].hilo != NULL ) {
- memset(&c->low, 0xFF, sizeof(c->low));
- for(i = 0; i < cself->max_seq_len; i++) {
- if( c->high < data[rr].hilo[i] ) {
- c->high = data[rr].hilo[i];
- }
- if( c->low > data[rr].hilo[i] ) {
- c->low = data[rr].hilo[i];
- }
+ if(rc == 0){
+ rc = TableWriterRefCoverage_Whack(cover_writer, rc == 0, &new_rows);
+ if( rc == 0 && ref_rows != new_rows ) {
+ rc = RC(rcAlign, rcTable, rcCommitting, rcData, rcInconsistent);
}
}
- rc = TableWriterRefCoverage_Write(cover_writer, ref_from + rr, c);
- ReferenceMgr_TCoverRelease(&data[rr]);
- }
- free(data);
- ref_from += ref_qty;
- ref_qty = rows - ref_from + 1;
- }
- free(ids);
- rc1 = TableWriterRefCoverage_Whack(cover_writer, rc == 0, &new_rows);
- rc = rc ? rc : rc1;
- if( rc == 0 && rows != new_rows ) {
- rc = RC(rcAlign, rcTable, rcCommitting, rcData, rcInconsistent);
- }
- }
- return rc;
+ ALIGN_DBGERR(rc);
+ }
+ } else {
+ TableReader_Whack(reader);
+ VTableRelease(table);
+ }
+ }/* TABLE LOOP ENDS **/
+ /* prep and write coverage data */
+ if(rc == 0) {
+ uint64_t k;
+
+ rc = TableWriterRefCoverage_MakeCoverage(&cover_writer, cself->db, 0);
+ for (rr = 0, k = 0; rc == 0 && rr != ref_rows; ++rr, k += cself->max_seq_len) {
+ unsigned hi = 0;
+ unsigned lo = 255;
+
+ for (i = 0; i != data[rr].bin_seq_len; ++i) {
+ unsigned const depth = hilo[k + i];
+
+ if (hi < depth) hi = depth;
+ if (lo > depth) lo = depth;
+ }
+ data[rr].cover.high = hi;
+ data[rr].cover.low = lo;
+ rc = TableWriterRefCoverage_WriteCoverage(cover_writer,rr+1, &data[rr].cover);
+ }
+ free(data);
+ rc1 = TableWriterRefCoverage_Whack(cover_writer, rc == 0, &new_rows);
+ rc = rc ? rc : rc1;
+ if( rc == 0 && ref_rows != new_rows ) {
+ rc = RC(rcAlign, rcTable, rcCommitting, rcData, rcInconsistent);
+ }
+ }
+ ALIGN_DBGERR(rc);
+ return rc;
}
-LIB_EXPORT rc_t CC ReferenceMgr_Release(const ReferenceMgr* cself, bool commit, uint64_t* rows, bool build_coverage)
+LIB_EXPORT rc_t CC ReferenceMgr_Release(const ReferenceMgr *cself,
+ bool commit,
+ uint64_t *const Rows,
+ bool build_coverage)
{
rc_t rc = 0;
- if( cself != NULL ) {
- uint64_t rr, *r = rows ? rows : &rr;
- ReferenceMgr* self = (ReferenceMgr*)cself;
- rc = TableWriterRef_Whack(self->writer, commit, r);
- BSTreeWhack(&self->tree, ReferenceSeq_Whack, NULL);
+ if (cself != NULL) {
+ ReferenceMgr *const self = (ReferenceMgr *)cself;
+ uint64_t rows;
+ unsigned i;
+
+ rc = TableWriterRef_Whack(self->writer, commit, &rows);
+ if (Rows) *Rows = rows;
KDirectoryRelease(self->dir);
- if( rc == 0 && build_coverage ) {
- rc = ReferenceMgr_ReCover(cself, *r);
+
+ for (i = 0; i != self->refSeqsById.elem_count; ++i)
+ free((void *)((key_id_t *)self->refSeqsById.base)[i].key);
+
+ for (i = 0; i != self->refSeqs.elem_count; ++i)
+ ReferenceSeq_Whack(&self->refSeq[i]);
+
+ KDataBufferWhack(&self->compress);
+ KDataBufferWhack(&self->seq);
+ KDataBufferWhack(&self->refSeqs);
+ KDataBufferWhack(&self->refSeqsById);
+
+ if (rc == 0 && build_coverage && commit)
+ rc = ReferenceMgr_ReCover(cself, rows);
+#if 0
+ {
+ VTable* t = NULL;
+
+ if (VDatabaseOpenTableUpdate(self->db, &t, "SECONDARY_ALIGNMENT") == 0) {
+ VTableDropColumn(t, "TMP_MISMATCH");
+ VTableDropColumn(t, "TMP_HAS_MISMATCH");
+ }
+ VTableRelease(t);
}
+#endif
VDatabaseRelease(self->db);
- VDBManagerRelease(self->vmgr);
RefSeqMgr_Release(self->rmgr);
free(self);
}
@@ -619,228 +1737,139 @@ LIB_EXPORT rc_t CC ReferenceMgr_Release(const ReferenceMgr* cself, bool commit,
}
static
-rc_t ReferenceSeq_Local(ReferenceSeq** self, BSTree* tree, const char* id, const KFile* kf)
+rc_t ReferenceSeq_ReadDirect(ReferenceSeq *self,
+ int offset,
+ unsigned const len,
+ bool read_circular,
+ uint8_t buffer[],
+ unsigned* written,
+ bool force_linear)
{
- rc_t rc = 0;
- ReferenceSeq* obj;
- size_t page_sz;
+ *written = 0;
+ if (len == 0)
+ return 0;
- assert(self != NULL);
- assert(id != NULL);
- assert(kf != NULL);
-
- *self = NULL;
- if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
- rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
- } else if( ((obj->local = true)) &&
- (rc = KFileSize(kf, &obj->u.local.file_size)) == 0 &&
- (rc = KMMapMakeRead(&obj->u.local.map, kf)) == 0 &&
- (rc = KMMapReposition(obj->u.local.map, 0, &page_sz)) == 0 ) {
- const char* addr;
-
- obj->u.local.map_to = page_sz;
- /* make sure we have 2 lines */
- if( (rc = KMMapAddrRead(obj->u.local.map, (const void**)&addr)) == 0 ) {
- const char* sp = memchr(addr, ' ', page_sz);
- const char* nl1 = memchr(addr, '\n', page_sz);
- const char* nl2 = memchr(nl1 + 1, '\n', page_sz - (nl1 - addr));
- sp = sp ? sp : nl1;
- if( addr[0] != '>' || nl1 == NULL || nl2 == NULL || sp-- > nl1 ) {
- rc = RC(rcAlign, rcFile, rcConstructing, rcData, rcUnrecognized);
- } else if( strlen(id) >= sizeof(obj->id) || (sp - addr) >= sizeof(obj->accession) ) {
- rc = RC(rcAlign, rcFile, rcConstructing, rcBuffer, rcInsufficient);
- } else {
- strcpy(obj->id, id);
- memcpy(obj->accession, &addr[1], sp - addr);
- obj->accession[sp - addr] = '\0';
- obj->u.local.line_sz = nl2 - nl1 - 1;
- obj->u.local.fasta_offset = (nl1 - addr) + 1;
- obj->seq_len = obj->u.local.file_size - obj->u.local.fasta_offset;
- obj->seq_len -= obj->seq_len / obj->u.local.line_sz; /* remove \n qty */
- rc = BSTreeInsertUnique(tree, &obj->dad, NULL, ReferenceSeq_Sort);
- }
+ if (read_circular || self->circular) {
+ if (offset < 0) {
+ unsigned const n = (-offset) / self->seq_len;
+ offset = (self->seq_len * (n + 1) + offset) % self->seq_len;
}
+ else if (offset > self->seq_len)
+ offset %= self->seq_len;
}
- if( rc == 0 ) {
- *self = obj;
- ALIGN_DBG("RefSeq local fasta added '%s' -> '%s'", obj->id, obj->accession);
- } else {
- ReferenceSeq_Whack(&obj->dad, NULL);
- ALIGN_DBGERR(rc);
- }
- return rc;
-}
-
-static
-rc_t ReferenceSeq_ReOffset(const ReferenceSeq* self, int64_t* offset)
-{
- /* see TableReaderRefSeq_Read, same logic */
- if( !self->circular && (*offset < 0 || *offset >= self->seq_len) ) {
+ else if (offset >= self->seq_len)
return RC(rcAlign, rcType, rcReading, rcOffset, rcOutofrange);
- } else if( *offset < 0 ) {
- *offset = self->seq_len - ((-(*offset)) % self->seq_len);
- } else if( self->circular && *offset > self->seq_len ) {
- *offset %= self->seq_len;
+
+ if (self->type == rst_local) {
+ uint8_t const *const src = self->u.local.buf.base;
+ unsigned dst_off = 0;
+
+ while (dst_off < len) {
+ unsigned const writable = len - dst_off;
+ unsigned const readable = self->seq_len - offset;
+ unsigned const to_write = readable < writable ? readable : writable;
+
+ memcpy(&buffer[dst_off], &src[offset], to_write);
+ *written += to_write;
+ if (!read_circular)
+ break;
+ offset = 0;
+ dst_off += to_write;
+ }
+ return 0;
}
- return 0;
+ else if (self->type == rst_refSeqById || self->type == rst_refSeqBySeqId) {
+ unsigned to_write = len;
+
+ if (!self->circular || force_linear) {
+ unsigned const readable = self->seq_len - offset;
+
+ if (to_write > readable)
+ to_write = readable;
+ }
+ return RefSeq_Read(self->u.refseq, offset, to_write, buffer, written);
+ }
+ return RC(rcAlign, rcType, rcReading, rcType, rcInvalid);
}
static
-rc_t ReferenceSeq_ReadDirect(ReferenceSeq* self, int64_t offset, INSDC_coord_len len, bool read_curcular,
- INSDC_dna_text* buffer, INSDC_coord_len* written)
+rc_t ReferenceMgr_LoadSeq(ReferenceMgr *const self, ReferenceSeq *obj)
{
- rc_t rc = 0;
-
- *written = 0;
- if( (rc = ReferenceSeq_ReOffset(self, &offset)) != 0 ) {
- } else if( self->local ) {
- /* translate offset into file dimensions */
- offset += offset / self->u.local.line_sz; /* add \n on each line */
- offset += self->u.local.fasta_offset; /* add defline */
- if( offset >= self->u.local.file_size ) {
- return RC(rcAlign, rcFile, rcReading, rcOffset, rcOutofrange);
- } else {
- size_t page;
- const char* str;
- do {
- if( offset < self->u.local.map_from || self->u.local.map_to < offset ) {
- if( (rc = KMMapReposition(self->u.local.map, offset, &page)) == 0 ) {
- self->u.local.map_from = offset;
- self->u.local.map_to = offset + page;
- }
- }
- if( rc == 0 && (rc = KMMapAddrRead(self->u.local.map, (const void**)&str)) == 0 ) {
- offset += page;
- while( page > 0 && len > 0 ) {
- char* nl = memchr(str, '\n', page);
- size_t q = (nl == NULL) ? page : nl - str;
- if( q > len ) {
- q = len;
- }
- memcpy(&buffer[*written], str, q);
- *written = *written + q;
- len -= q;
- if( nl != NULL ) {
- q++;
- }
- page -= q;
- str += q;
- }
- }
- if( read_curcular && offset >= self->u.local.file_size ) {
- offset = self->u.local.fasta_offset;
- }
- } while( rc == 0 && len > 0 && offset < self->u.local.file_size );
- }
- } else {
- /* we need to trim len to actual length of seq */
- if( !read_curcular && (offset + len) >= self->seq_len ) {
- len = self->seq_len - offset;
+ KDataBuffer readBuf;
+ rc_t rc = KDataBufferMake(&readBuf, 8, self->max_seq_len);
+
+ if (rc == 0) {
+ char const *const id = obj->id;
+ char const *const seqId = obj->seqId ? obj->seqId : id;
+ TableWriterRefData data;
+ INSDC_coord_zero offset = 0;
+
+ obj->start_rowid = self->ref_rowid + 1;
+ data.name.buffer = id;
+ data.name.elements = string_size( id );
+ data.read.buffer = readBuf.base;
+ data.seq_id.buffer = seqId;
+ data.seq_id.elements = string_size( seqId );
+ data.force_READ_write = obj->type == rst_local || (self->options & ewrefmgr_co_allREADs);
+ data.circular = obj->circular;
+
+ if (self->writer == NULL) {
+ uint32_t wopt = 0;
+
+ wopt |= (self->options & ewrefmgr_co_allREADs) ? ewref_co_SaveRead : 0;
+ wopt |= (self->options & ewrefmgr_co_Coverage) ? ewref_co_Coverage : 0;
+ if( (rc = TableWriterRef_Make(&self->writer, self->db, wopt)) == 0 ) {
+ TableWriterData mlen;
+
+ mlen.buffer = &self->max_seq_len;
+ mlen.elements = 1;
+ rc = TableWriterRef_WriteDefaultData(self->writer, ewrefseq_cn_MAX_SEQ_LEN, &mlen);
+ }
}
- if( rc == 0 && (rc = RefSeq_Read(self->u.refseq.o, offset, len, buffer, written)) == 0 ) {
- self->u.refseq.usage = ++((ReferenceMgr*)self->mgr)->usage;
+ while (rc == 0 && offset < obj->seq_len) {
+ unsigned row_len;
+
+ rc = ReferenceSeq_ReadDirect(obj, offset, self->max_seq_len, false,
+ readBuf.base, &row_len, true);
+ if (rc != 0 || row_len == 0) break;
+
+ data.read.elements = row_len;
+ rc = TableWriterRef_Write(self->writer, &data, NULL);
+ offset += row_len;
+ ++self->ref_rowid;
}
+ KDataBufferWhack(&readBuf);
}
- ALIGN_DBGERR(rc);
return rc;
}
-static
-rc_t CC ReferenceMgr_Find(const ReferenceMgr* cself, const char* id, ReferenceSeq** seq, const KFile** kf)
-{
- *seq = (ReferenceSeq*)BSTreeFind(&cself->tree, id, ReferenceSeq_Cmp);
- if( *seq == NULL ) {
- /* try local file */
- return KDirectoryOpenFileRead(cself->dir, kf, "%s.fasta", id);
- }
- *kf = NULL;
- return 0;
-}
-
-LIB_EXPORT rc_t CC ReferenceMgr_GetSeq(const ReferenceMgr* cself, const ReferenceSeq** seq, const char* id)
+LIB_EXPORT rc_t CC ReferenceMgr_GetSeq(ReferenceMgr const *const cself,
+ ReferenceSeq const **const seq,
+ char const id[])
{
- rc_t rc = 0;
- ReferenceSeq* obj;
+ ReferenceMgr *const self = (ReferenceMgr *)cself;
- if( cself == NULL || seq == NULL || id == NULL ) {
- rc = RC(rcAlign, rcFile, rcConstructing, rcParam, rcNull);
- } else {
- ReferenceMgr* mgr = (ReferenceMgr*)cself;
- const KFile* kf;
+ if (self == NULL || seq == NULL || id == NULL )
+ return RC(rcAlign, rcFile, rcConstructing, rcParam, rcNull);
+
+ *seq = NULL;
+ {
+ ReferenceSeq *obj;
+ rc_t rc = ReferenceMgr_OpenSeq(self, &obj, id, 0, NULL);
- *seq = NULL;
- rc = ReferenceMgr_Find(cself, id, &obj, &kf);
- if( rc == 0 && obj == NULL ) {
- /* it is local file */
- rc = ReferenceSeq_Local(&obj, &mgr->tree, id, kf);
- KFileRelease(kf);
- }
- if( rc == 0 && !obj->local && obj->u.refseq.o == NULL ) {
- if( cself->num_open_max > 0 && cself->num_open >= cself->num_open_max ) {
- ReferenceSeq* old = NULL;
- BSTreeForEach(&cself->tree, false, ReferenceSeq_Unused, &old);
- if( old != NULL ) {
- RefSeq_Release(old->u.refseq.o);
- old->u.refseq.o = NULL;
- mgr->num_open--;
- }
- }
- rc = RefSeqMgr_GetSeq(cself->rmgr, &obj->u.refseq.o, obj->accession, strlen(obj->accession));
- if( rc == 0 &&
- (rc = RefSeq_Circular(obj->u.refseq.o, &obj->circular)) == 0 &&
- (rc = RefSeq_SeqLength(obj->u.refseq.o, &obj->seq_len)) == 0 ) {
- mgr->num_open++;
- }
- }
- if( rc == 0 && obj->start_rowid == 0 ) {
- /* append to the whole thing to REFERENCE table since we encounter it for the 1st time */
- TableWriterRefData data;
- INSDC_coord_len len = 0;
- int64_t offset = 0;
- obj->mgr = cself;
- obj->start_rowid = mgr->ref_rowid + 1;
- data.name.buffer = obj->id;
- data.name.elements = strlen(obj->id);
- data.read.buffer = mgr->seq_buf;
- data.seq_id.buffer = obj->accession;
- data.seq_id.elements = strlen(obj->accession);
- data.force_READ_write = obj->local || (cself->options & ewrefmgr_co_allREADs);
- data.circular = obj->circular;
- if (cself->writer == NULL) {
- uint32_t wopt = 0;
-
- wopt |= (mgr->options & ewrefmgr_co_allREADs) ? ewref_co_SaveRead : 0;
- wopt |= (mgr->options & ewrefmgr_co_Coverage) ? ewref_co_Coverage : 0;
- if( (rc = TableWriterRef_Make(&mgr->writer, mgr->db, wopt)) == 0 ) {
- TableWriterData mlen;
- mlen.buffer = &mgr->max_seq_len;
- mlen.elements = 1;
- rc = TableWriterRef_WriteDefaultData(mgr->writer, ewrefseq_cn_MAX_SEQ_LEN, &mlen);
- }
- }
- if (rc == 0) {
- do {
- if( (rc = ReferenceSeq_ReadDirect(obj, offset, mgr->max_seq_len, false,
- mgr->seq_buf, &len)) == 0 && len > 0 ) {
- data.read.elements = len;
- rc = TableWriterRef_Write(cself->writer, &data, NULL);
- offset += len;
- mgr->ref_rowid++;
- }
- } while( rc == 0 && len > 0 && offset < obj->seq_len );
- }
+ if (rc) return rc;
+ if (obj->start_rowid == 0) {
+ rc = ReferenceMgr_LoadSeq(self, obj);
+ if (rc) return rc;
}
- }
- if( rc == 0 ) {
*seq = obj;
- } else {
- ALIGN_DBGERR(rc);
}
- return rc;
+ return 0;
}
-LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id, uint64_t seq_len, const uint8_t* md5)
+LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id, INSDC_coord_len seq_len, const uint8_t* md5)
{
+#if 0
rc_t rc = 0;
ReferenceSeq* rseq;
const KFile* kf;
@@ -859,13 +1888,29 @@ LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id
rc = RC(rcAlign, rcFile, rcValidating, rcSize, rcUnequal);
ALIGN_DBGERRP("%s->%s SEQ_LEN verification", rc, id, rseq->accession);
}
+ if( rc == 0 && md5 != NULL && memcmp(md5, rseq->u.local.md5, sizeof(rseq->u.local.md5)) != 0 ) {
+ unsigned i;
+ rc = RC(rcAlign, rcTable, rcValidating, rcChecksum, rcUnequal);
+ ALIGN_DBGERRP("%s->%s MD5 verification", rc, id, rseq->accession);
+ ALIGN_DBGF((" local '"));
+ for(i = 0; i < sizeof(rseq->u.local.md5); i++) {
+ ALIGN_DBGF(("%02hx", rseq->u.local.md5[i]));
+ }
+ ALIGN_DBGF(("' <> match '"));
+ for(i = 0; i < sizeof(rseq->u.local.md5); i++) {
+ ALIGN_DBGF(("%02hx", md5[i]));
+ }
+ ALIGN_DBGF(("'\n"));
+ } else {
+ ALIGN_DBG("%s->%s MD5 verification ok", id, rseq->accession);
+ }
} else {
const RefSeq* tmp = rseq->u.refseq.o;
- uint64_t o_len;
+ INSDC_coord_len o_len;
const uint8_t* o_md5;
if( tmp == NULL ) {
- if( (rc = RefSeqMgr_GetSeq(cself->rmgr, &tmp, rseq->accession, strlen(rseq->accession))) != 0 ||
+ if( (rc = RefSeqMgr_GetSeq(cself->rmgr, &tmp, rseq->accession, string_size( rseq->accession ))) != 0 ||
(rc = RefSeq_SeqLength(tmp, &o_len)) != 0 ) {
ALIGN_DBGERRP("%s->%s verification", rc, id, rseq->accession);
}
@@ -881,7 +1926,7 @@ LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id
}
}
if( rc == 0 && (rc = RefSeq_MD5(tmp, &o_md5)) == 0 ) {
- if( md5 != NULL && o_md5 != NULL && memcmp(md5, o_md5, 16) != 0 ) {
+ if( md5 != NULL && o_md5 != NULL && memcmp(md5, o_md5, sizeof(rseq->u.local.md5)) != 0 ) {
rc = RC(rcAlign, rcTable, rcValidating, rcChecksum, rcUnequal);
ALIGN_DBGERRP("%s->%s MD5 verification", rc, id, rseq->accession);
} else {
@@ -899,12 +1944,283 @@ LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id
ALIGN_DBGERRP("%s verification", rc, id);
}
return rc;
+#else
+ if (cself == NULL || id == NULL)
+ return RC(rcAlign, rcFile, rcValidating, rcParam, rcNull);
+ {
+ ReferenceMgr *self = (ReferenceMgr *)cself;
+ ReferenceSeq *rseq;
+ rc_t rc = ReferenceMgr_OpenSeq(self, &rseq, id, seq_len, md5);
+
+ if (rc) return rc;
+ if (rseq->seq_len != seq_len) {
+ rc = RC(rcAlign, rcFile, rcValidating, rcSize, rcUnequal);
+ ALIGN_DBGERRP("%s->%s SEQ_LEN verification", rc, id, rseq->seqId);
+ }
+ if (md5 && memcmp(md5, rseq->md5, sizeof(rseq->md5)) != 0 ) {
+ unsigned i;
+
+ rc = RC(rcAlign, rcTable, rcValidating, rcChecksum, rcUnequal);
+ ALIGN_DBGERRP("%s->%s MD5 verification", rc, id, rseq->seqId);
+ ALIGN_DBGF((" found '"));
+ for(i = 0; i < sizeof(rseq->md5); i++) {
+ ALIGN_DBGF(("%02hx", rseq->md5[i]));
+ }
+ ALIGN_DBGF(("' != requested '"));
+ for(i = 0; i < sizeof(rseq->md5); i++) {
+ ALIGN_DBGF(("%02hx", md5[i]));
+ }
+ ALIGN_DBGF(("'\n"));
+ } else {
+ ALIGN_DBG("%s->%s MD5 verification ok", id, rseq->seqId);
+ }
+ if( rc == 0 ) {
+ ALIGN_DBG("%s verification ok", id);
+ } else {
+ ALIGN_DBGERRP("%s verification", rc, id);
+ }
+ return rc;
+ }
+#endif
+}
+
+LIB_EXPORT rc_t CC ReferenceMgr_FastaPath(const ReferenceMgr* cself, const char* fasta_path)
+{
+ rc_t rc = 0;
+ KDirectory* dir;
+
+ if( cself == NULL || fasta_path == NULL ) {
+ rc = RC(rcAlign, rcFile, rcConstructing, rcParam, rcNull);
+ } else if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+ const KFile* kf;
+ if( (rc = KDirectoryOpenFileRead(dir, &kf, "%s", fasta_path)) == 0 ) {
+ rc = ReferenceMgr_FastaFile(cself, kf);
+ KFileRelease(kf);
+ }
+ KDirectoryRelease(dir);
+ }
+ ALIGN_DBGERRP("from file %s", rc, fasta_path);
+ return rc;
+}
+
+LIB_EXPORT rc_t CC ReferenceMgr_FastaFile(const ReferenceMgr* cself, const KFile* file)
+{
+ if( cself == NULL || file == NULL ) {
+ return RC(rcAlign, rcFile, rcConstructing, rcParam, rcNull);
+ }
+ return ReferenceMgr_ImportFastaFile((ReferenceMgr *)cself, file, NULL);
+}
+
+static
+int extrace_cigar_op(char *op,
+ uint32_t *op_len,
+ char const *const cigar,
+ uint32_t const cigar_len,
+ uint32_t const offset,
+ uint32_t const options,
+ unsigned *const bin)
+{
+ static char const op_txt[] = "MIDNSHP=XB??????";
+ uint32_t i = offset;
+
+ if (options & ewrefmgr_cmp_Binary) {
+ uint32_t c;
+
+ memcpy(&c, cigar + i * 4, 4);
+ *bin = c & 0x0F;
+ *op = op_txt[c & 0x0F];
+ *op_len = c >> 4;
+ }
+ else {
+ uint32_t len = 0;
+ int ch;
+
+ while(i < cigar_len && (ch = cigar[i]) != '\0' && isdigit(ch)) {
+ len *= 10;
+ len += ch - '0';
+ ++i;
+ }
+ *bin = *op = ch;
+ *op_len = len;
+ }
+ return i - offset;
+}
+
+static
+rc_t cigar2offset(const uint32_t options, const void* cigar, uint32_t cigar_len, int32_t* out, uint32_t out_sz, uint32_t out_used,
+ INSDC_coord_len* seq_len, INSDC_coord_len* ref_len, INSDC_coord_len* max_ref_len)
+{
+ rc_t rc = 0;
+ uint32_t i;
+ uint32_t last_match = 0;
+ uint32_t op_len;
+ uint32_t last_soft_len = 0;
+ uint32_t b_len = 0;
+ uint32_t last_op = cigar_len - 1;
+ char op;
+ unsigned op_bin;
+
+ if ((options & ewrefmgr_cmp_Binary) == 0) {
+ for (i = 0; i < cigar_len; last_op = ++i) {
+ i += extrace_cigar_op(&op, &op_len, cigar, cigar_len, i, options, &op_bin);
+ }
+ }
+
+#if _DEBUGGING
+ ALIGN_C_DBGF(("%s:%u: ", __func__, __LINE__));
+ if( options & ewrefmgr_cmp_Binary ) {
+ ALIGN_C_DBGF(("bin cigar '"));
+ for(i = 0; i < cigar_len; i++) {
+ extrace_cigar_op(&op, &op_len, cigar, cigar_len, i, options, &op_bin);
+ ALIGN_C_DBGF(("%u%c", op_len, op));
+ }
+ } else {
+ ALIGN_C_DBGF(("cigar '%.*s", cigar_len, cigar));
+ }
+ ALIGN_C_DBGF(("'[%u]\n", cigar_len));
+#endif
+
+ *seq_len = 0;
+ *ref_len = 0;
+ *max_ref_len = 0;
+ memset(out, 0, out_used * sizeof(*out) * 2);
+ for(i = 0; rc == 0 && i < cigar_len; i++) {
+ i += extrace_cigar_op(&op, &op_len, cigar, cigar_len, i, options, &op_bin);
+ if (op == 'P') {
+ continue;
+ }
+ if( op != 'S' && op != 'I' ) {
+ last_soft_len = 0;
+ }
+ switch(op) {
+ case 'M':
+ case '=':
+ case 'X':
+ *seq_len += op_len;
+ *ref_len += op_len;
+ *max_ref_len += op_len;
+ if(b_len > op_len) {
+ b_len -= op_len;
+ }
+ else {
+ b_len=0;
+ last_match = *seq_len;
+ }
+ break;
+ case 'S':
+ case 'I':
+ last_soft_len += op_len;
+ *max_ref_len += op_len;
+ *seq_len += op_len;
+ if (last_match < out_sz) {
+ if (i < last_op) {
+ if (b_len > 0) {/** not right soft clip **/
+ assert(out[last_match] < 0);
+ out[last_match-out[last_match]] = 0x80000000;
+ }
+ out[last_match] += -op_len;
+ }
+ if (b_len == 0) last_match = *seq_len;
+ } else {
+ rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+ }
+
+ break;
+ case 'B':
+ /* Complete Genomics CIGAR style specific:
+ overlap between consecutive reads
+ ex: sequence 6 bases: ACACTG, reference 2 bases: ACTG,
+ cigar will be: 2M2B2M
+ no need to move sequence position
+ */
+ if( last_match < out_sz ) {
+ if(b_len > 0 && i < cigar_len -1){/** not right soft clip **/
+ assert(out[last_match] < 0);
+ out[last_match-out[last_match]] = 0x80000000;
+ }
+ out[last_match] -= op_len;
+ } else {
+ rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+ }
+ if( *ref_len < op_len ) {
+ *ref_len = 0;
+ } else {
+ *ref_len -= op_len;
+ }
+ *max_ref_len += op_len;
+ b_len += op_len;
+ break;
+ case 'D':
+ case 'N':
+ if( last_match < out_sz ) {
+ out[last_match] += op_len;
+ } else if (last_match == out_sz && last_match > 0 ){ /*** delete at the end ***/
+ out[last_match-1] += op_len;
+ } else {
+ rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+ }
+ *ref_len += op_len;
+ *max_ref_len += op_len;
+ break;
+ case 'H':
+ if ((options & ewrefmgr_co_AcceptHardClip) == 0)
+ {
+ rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInvalid);
+ (void)LOGERR(klogErr, rc, "Hard clipping of sequence data is not allowed");
+ }
+ break;
+ default:
+ rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcUnrecognized);
+ if ((options & ewrefmgr_cmp_Binary) == 0)
+ (void)PLOGERR(klogErr, (klogErr, rc, "Invalid or unrecognized CIGAR operation '$(opcode)'", "opcode=%c", op));
+ else if (op != '?')
+ (void)PLOGERR(klogErr, (klogErr, rc, "Invalid or unrecognized CIGAR operation '$(opcode)' (binary code: $(opbin))", "opcode=%c,opbin=%u", op, op_bin));
+ else
+ (void)PLOGERR(klogErr, (klogErr, rc, "Invalid or unrecognized CIGAR operation (binary code: $(opbin))", "opbin=%u", op_bin));
+ break;
+ }
+ }
+ if( !(options & ewrefmgr_cmp_Exact) && last_soft_len > 0 ) {
+ ALIGN_C_DBG("trailing soft clip %u @ %u", last_soft_len, last_match);
+ out[last_match] += last_soft_len;
+ }
+#if _DEBUGGING
+ ALIGN_C_DBGF(("%s:%u: offsets: ", __func__, __LINE__));
+ last_match = last_match > *seq_len ? last_match : *seq_len;
+ for(i = 0; i <= last_match; i++) {
+ if( i == *seq_len ) {
+ ALIGN_C_DBGF((" | "));
+ }
+ ALIGN_C_DBGF(("%i%c", out[i], ((i + 1) % 5) ? ',' : ' '));
+ }
+ ALIGN_C_DBGF((" cigar derived seq_len %u, ref_len %u, max_ref_len %u\n", *seq_len, *ref_len, *max_ref_len));
+#endif
+ return rc;
+}
+
+static
+void ReferenceSeq_TranslateOffset_int(ReferenceSeq const *const cself,
+ INSDC_coord_zero const offset,
+ int64_t *const ref_id,
+ INSDC_coord_zero *const ref_start,
+ uint64_t *const global_ref_start)
+{
+ if (ref_id)
+ *ref_id = cself->start_rowid + offset / cself->mgr->max_seq_len;
+
+ if (ref_start)
+ *ref_start = offset % cself->mgr->max_seq_len;
+
+ if (global_ref_start)
+ *global_ref_start = (cself->start_rowid - 1) * cself->mgr->max_seq_len + offset;
}
LIB_EXPORT rc_t CC ReferenceMgr_Compress(const ReferenceMgr* cself, uint32_t options,
- const char* id, int64_t offset,
+ const char* id, INSDC_coord_zero offset,
const char* seq, INSDC_coord_len seq_len,
const void* cigar, uint32_t cigar_len,
+ INSDC_coord_zero allele_offset, const char* allele, INSDC_coord_len allele_len,INSDC_coord_zero offset_in_allele,
+ const void* allele_cigar, uint32_t allele_cigar_len,
TableWriterAlgnData* data)
{
rc_t rc = 0;
@@ -913,261 +2229,310 @@ LIB_EXPORT rc_t CC ReferenceMgr_Compress(const ReferenceMgr* cself, uint32_t opt
if( cself == NULL || id == NULL ) {
rc = RC(rcAlign, rcFile, rcProcessing, rcParam, rcNull);
} else if( (rc = ReferenceMgr_GetSeq(cself, &refseq, id)) == 0 ) {
- rc = ReferenceSeq_Compress(refseq, options, offset, seq, seq_len, cigar, cigar_len, data);
+ rc = ReferenceSeq_Compress(refseq, options, offset, seq, seq_len, cigar, cigar_len,
+ allele_offset, allele, allele_len,offset_in_allele,
+ allele_cigar, allele_cigar_len, data);
ReferenceSeq_Release(refseq);
}
- ALIGN_DBGERR(rc);
+ ALIGN_C_DBGERR(rc);
return rc;
}
-LIB_EXPORT rc_t CC ReferenceSeq_Compress(const ReferenceSeq* cself, uint32_t options, int64_t offset,
+LIB_EXPORT rc_t CC ReferenceSeq_Compress(const ReferenceSeq* cself, const uint32_t options, INSDC_coord_zero offset,
const char* seq, INSDC_coord_len seq_len,
const void* cigar, uint32_t cigar_len,
+ INSDC_coord_zero allele_offset, const char* allele,
+ INSDC_coord_len allele_len,
+ INSDC_coord_zero offset_in_allele,
+ const void* allele_cigar, uint32_t allele_cigar_len,
TableWriterAlgnData* data)
{
rc_t rc = 0;
- ALIGN_DBG("align '%.*s'[%u] to '%s' at %li using '%.*s'[%u]",
- (int)seq_len, seq, seq_len, cself ? cself->id : NULL, offset,
- (options & ewrefmgr_cmp_Binary) ? 3 : (int)cigar_len, (options & ewrefmgr_cmp_Binary) ? "bin" : cigar, cigar_len);
-
- if( cself == NULL || seq == NULL || cigar == NULL || cigar_len == 0 || data == NULL ) {
- rc = RC(rcAlign, rcFile, rcProcessing, rcParam, rcInvalid);
- } else if( seq_len > sizeof(cself->mgr->compress_buf) / sizeof(cself->mgr->compress_buf[0]) ) {
- rc = RC(rcAlign, rcFile, rcProcessing, rcBuffer, rcInsufficient);
- } else if( (rc = ReferenceSeq_ReOffset(cself, &offset)) == 0 ) {
- INSDC_coord_len seq_pos = 0;
- uint32_t i, last_match = 0, op_len;
- unsigned char op;
+ if( cself == NULL || seq == NULL || cigar == NULL || cigar_len == 0 || data == NULL ||
+ (!(allele == NULL && allele_len == 0 && allele_cigar == NULL && allele_cigar_len == 0) &&
+ !(allele != NULL && allele_cigar != NULL && allele_cigar_len != 0)) ) {
+ return RC(rcAlign, rcFile, rcProcessing, rcParam, rcInvalid);
+ }
+ if (seq_len * 2 > cself->mgr->compress.elem_count) {
+ rc = KDataBufferResize(&cself->mgr->compress, seq_len * 2);
+ if (rc) return rc;
+ }
+ if ((rc = ReferenceSeq_ReOffset(cself->circular, cself->seq_len, &offset)) == 0 ) {
+ INSDC_coord_len i, seq_pos = 0, allele_ref_end = 0, ref_len = 0, rl = 0, max_rl = 0;
INSDC_coord_zero* read_start = &((INSDC_coord_zero*)(data->read_start.buffer))[data->ploidy];
INSDC_coord_len* read_len = &((INSDC_coord_len*)(data->read_len.buffer))[data->ploidy];
- INSDC_coord_len rl = 0, *ref_len = &((INSDC_coord_len*)(data->ref_len.buffer))[data->ploidy];
- bool* has_ref_offset;
- uint64_t i_ref_offset_elements;
- int32_t* ref_offset, *cb = (int32_t*)(cself->mgr->compress_buf);
+ bool* has_ref_offset, *has_mismatch;
+ int32_t* ref_offset;
+ uint8_t* mismatch;
+ uint8_t sref_buf[64 * 1024];
+ void *href_buf = NULL;
+ uint8_t *ref_buf = sref_buf;
+ int32_t allele_off_buf[1024];
+#if _DEBUGGING
+ uint64_t i_ref_offset_elements, i_mismatch_elements;
+ char x[4096];
+#endif
if( data->ploidy == 0 ) {
data->has_ref_offset.elements = seq_len;
data->ref_offset.elements = 0;
+ data->has_mismatch.elements = seq_len;
+ data->mismatch.elements = 0;
*read_start = 0;
- i_ref_offset_elements = 0;
- } else {
+ }
+ else {
data->has_ref_offset.elements += seq_len;
+ data->has_mismatch.elements += seq_len;
*read_start = read_start[-1] + read_len[-1];
- i_ref_offset_elements = data->ref_offset.elements;
}
*read_len = seq_len;
- *ref_len = 0;
+ has_ref_offset = &((bool*)(data->has_ref_offset.buffer))[*read_start];
+ ref_offset = (int32_t*)(data->ref_offset.buffer);
+ has_mismatch = &((bool*)(data->has_mismatch.buffer))[*read_start];
+ mismatch = (uint8_t*)(data->mismatch.buffer);
#if _DEBUGGING
- ALIGN_DBG("real offset %li ref is circular? %s", offset, cself->circular ? "true" : "false");
- if( options & ewrefmgr_cmp_Binary ) {
- ALIGN_DBGF(("%s:%u: bin cigar:", __func__, __LINE__));
- for(i = 0; i < cigar_len; i++) {
- const uint32_t* c = cigar;
- op = c[i] & 0x0F;
- op_len = c[i] >> 4;
- ALIGN_DBGF(("%u%c", op_len, "MIDNSHP=XB"[op]));
- }
- ALIGN_DBGF(("\n"));
- }
+ i_ref_offset_elements = data->ref_offset.elements;
+ i_mismatch_elements = data->mismatch.elements;
+ ALIGN_C_DBG("align%s '%.*s'[%u] to '%s:%s' at %i", (options & ewrefmgr_cmp_Exact) ? " EXACT" : "",
+ seq_len, seq, seq_len, cself->id, cself->seqId, offset);
#endif
- memset(cb, 0, sizeof(*cb) * seq_len);
- for(i = 0; rc == 0 && i < cigar_len; i++) {
- if( options & ewrefmgr_cmp_Binary ) {
- const uint32_t* c = cigar;
- op = c[i] & 0x0F;
- op_len = c[i] >> 4;
- } else {
- const unsigned char* c = cigar;
- op_len = 0;
- while( c[i] != '\0' && isdigit(c[i]) ) {
- op_len *= 10;
- op_len += c[i++] - '0';
- }
- /* avoid intersecting with 4-bit binary above */
- op = c[i] <= 0x0F ? 0xFF : c[i];
- }
- switch(op) {
- case 'M':
- case 0:
- case '=':
- case 7:
- case 'X':
- case 8:
- seq_pos += op_len;
- rl += op_len;
- *ref_len = rl;
- last_match = seq_pos;
- break;
- case 'I':
- case 1:
- case 'S':
- case 4:
- seq_pos += op_len;
- cb[last_match] += -op_len;
- break;
- case 'B':
- case 9:
- /* Complete Genomics CIGAR style specific:
- overlap between consecutive reads
- ex: sequence 6 bases: ACACTG, reference 2 bases: ACTG,
- cigar will be: 2M2B2M
- no need to move sequence position
- */
- cb[last_match] -= op_len;
- if( rl < op_len ) {
- /* step back beyond ref start */
- offset -= op_len - rl;
- rl = 0;
- } else {
- rl -= op_len;
- }
- break;
- case 'D':
- case 2:
- case 'N':
- case 3:
- cb[last_match] += op_len;
- rl += op_len;
- break;
- case 'P':
- case 6:
- continue;
- case 'H':
- case 5:
- default:
- rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcUnrecognized);
- }
+ if( allele != NULL ) {
+ /* determine length of reference for subst by allele */
+ ALIGN_C_DBG("apply allele %.*s[%u] at %i w/cigar below",
+ allele_len, allele, allele_len, allele_offset);
+ rc = cigar2offset(options, allele_cigar, allele_cigar_len,
+ allele_off_buf, sizeof(allele_off_buf)/sizeof(*allele_off_buf)/2,
+ allele_len, &seq_pos, &allele_ref_end, &max_rl);
+ /* where allele ends on reference */
+ allele_ref_end += allele_offset;
}
if( rc == 0 ) {
- /* do not write leading deletes just move reference offset */
- if( cb[0] > 0 ) {
- offset += cb[0];
- *ref_len -= cb[0];
- cb[0] = 0;
+ rc = cigar2offset(options, cigar, cigar_len,
+ (int32_t*)(cself->mgr->compress.base), cself->mgr->compress.elem_count / 2,
+ seq_len, &seq_pos, &rl, &max_rl);
+ }
+ if( allele != NULL ) {
+ if( allele_offset + allele_ref_end < offset || allele_offset >= offset + rl ) {
+ (void)PLOGMSG(klogWarn, (klogWarn,
+ "allele $(a) offset $(ao) $(ac) is not within referenced region in $(id) at offset $(ro) $(rc)",
+ "a=%.*s,ao=%i,ac=%.*s,id=%s,ro=%i,rc=%.*s",
+ allele_len, allele, allele_offset, (options & ewrefmgr_cmp_Binary) ? 0 : allele_cigar_len, allele_cigar,
+ cself->seqId, offset, (options & ewrefmgr_cmp_Binary) ? 0 : cigar_len, cigar));
+ allele = NULL;
}
-#if _DEBUGGING
- ALIGN_DBGF(("%s:%u: last_match %u, offsets:", __func__, __LINE__, last_match));
- for(i = 0; i < seq_len; i++) {
- ALIGN_DBGF(("%i%c", cb[i], ((i + 1) % 5) ? ',' : '~'));
+ }
+ if( rc == 0 ) {
+ if( !(options & ewrefmgr_cmp_Exact) ) {
+ /* do not write leading deletes just move reference offset */
+ int32_t *const compress_buf = cself->mgr->compress.base;
+ if( compress_buf[0] > 0 ) {
+ offset += compress_buf[0];
+ rl -= compress_buf[0];
+ max_rl -= compress_buf[0];
+ compress_buf[0] = 0;
+ ALIGN_C_DBG("adjusted offset %i", offset);
+ }
}
- ALIGN_DBGF(("\n"));
-#endif
- has_ref_offset = &((bool*)(data->has_ref_offset.buffer))[*read_start];
- ref_offset = (int32_t*)(data->ref_offset.buffer);
- /* do not write trailing indels cause they are simple mismatches */
- for(i = 0; i < last_match; i++) {
- has_ref_offset[i] = cb[i] != 0;
- if( has_ref_offset[i] ) {
- ref_offset[data->ref_offset.elements++] = cb[i];
+ ref_len = rl;
+ if( (offset + max_rl) > cself->seq_len && !cself->circular ) {
+ max_rl = cself->seq_len - offset;
+ if( max_rl < rl ) {
+ /* ref_len used for compression cannot be shorter than ref_len derived from cigar,
+ if there is a shortage it will fail later here */
+ max_rl = rl;
}
+ ALIGN_C_DBG("max_ref_len truncated to %u cause it goes beyond refseq length %lu at offset %i",
+ max_rl, cself->seq_len, offset);
}
- memset(&has_ref_offset[last_match], 0, seq_len - last_match);
+ ALIGN_C_DBG("chosen REF_LEN %u, ref len for match %u", ref_len, max_rl);
-#if _DEBUGGING
- ALIGN_DBG("aligned at %li ref_len %u, num offsets %lu, seq_pos %u", offset, *ref_len, data->ref_offset.elements, seq_pos);
- ALIGN_DBGF(("%s:%u: HAS_REF_OFFSET: ", __func__, __LINE__));
- for(i = 0; i < seq_len; i++) {
- ALIGN_DBGF(("%c", (has_ref_offset[i] != 0) ? '1' : '0'));
+ assert(seq_len == seq_pos);
+ if (max_rl > sizeof(sref_buf)) {
+ if (href_buf)
+ free(href_buf);
+ href_buf = malloc(max_rl);
+ if (href_buf == NULL)
+ rc = RC(rcAlign, rcFile, rcProcessing, rcMemory, rcExhausted);
+ ref_buf = href_buf;
}
- ALIGN_DBGF((", REF_OFFSET:"));
- for(i = i_ref_offset_elements; i < data->ref_offset.elements; i++) {
- ALIGN_DBGF((" %i,", ref_offset[i]));
+ if (rc == 0) {
+ int64_t ref_pos;
+
+ if( allele != NULL ) {
+ /* subst allele in reference */
+ if( allele_offset <= offset ) {
+ /* move allele start inside referenced chunk */
+ allele += offset_in_allele;
+ allele_len -= offset_in_allele;
+ rl = 0;
+ } else {
+ /* fetch portion of reference which comes before allele */
+ rl = allele_offset - offset;
+ rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, rl, true, ref_buf, &i, false);
+ if( rc == 0 && rl != i ) {
+ /* here we need to test it otherwise excessive portion of allele could be fetch in next if */
+ rc = RC(rcAlign, rcFile, rcProcessing, rcRange, rcExcessive);
+ }
+ }
+ if( rc == 0 && allele_len < (max_rl - rl) ) {
+ memcpy(&ref_buf[rl], allele, allele_len);
+ rl += allele_len;
+ /* append tail of actual reference */
+ rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, allele_ref_end, max_rl - rl, true, &ref_buf[rl], &i, false);
+ rl += i;
+ } else if( rc == 0 ) {
+ /* allele is longer than needed */
+ memcpy(&ref_buf[rl], allele, max_rl - rl);
+ rl = max_rl;
+ }
+ } else {
+ rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, max_rl, true, ref_buf, &rl, false);
+ }
+ if( rc != 0 || max_rl != rl ) {
+ rc = rc ? rc : RC(rcAlign, rcFile, rcProcessing, rcRange, rcExcessive);
+ ALIGN_C_DBGERRP("refseq is shorter: at offset %i need %u bases", rc, offset, max_rl);
+ } else {
+ int32_t *const compress_buf = cself->mgr->compress.base;
+ for(seq_pos = 0, ref_pos = 0; seq_pos < seq_len; seq_pos++, ref_pos++) {
+ has_ref_offset[seq_pos] = compress_buf[seq_pos] != 0;
+ if( has_ref_offset[seq_pos]){
+ if(compress_buf[seq_pos] == 0x80000000 ){
+ compress_buf[seq_pos] = 0; /** the hack has served its purpose **/
+ } else {
+ ref_offset[data->ref_offset.elements++] = compress_buf[seq_pos];
+ ref_pos += compress_buf[seq_pos];
+ }
+ }
+ if( (ref_pos < 0) || (ref_pos >= max_rl) ||
+ ((toupper(ref_buf[ref_pos]) != toupper(seq[seq_pos])) && (seq[seq_pos] != '=')) ) {
+ has_mismatch[seq_pos] = true;
+ mismatch[data->mismatch.elements++] = seq[seq_pos];
+ } else {
+ /* match! */
+ has_mismatch[seq_pos] = false;
+ }
+ }
+ }
}
- ALIGN_DBGF(("[%u]\n", data->ref_offset.elements - i_ref_offset_elements));
-#endif
- assert(seq_len == seq_pos);
}
#if _DEBUGGING
- if( rc == 0 ) {
-#else
- if( rc == 0 && !(options & ewrefmgr_cmp_NoMismatch) ) {
-#endif
- bool* has_mismatch = &((bool*)(data->has_mismatch.buffer))[*read_start];
- INSDC_dna_text* mismatch = (INSDC_dna_text*)(data->mismatch.buffer);
- INSDC_dna_text ref_buf[20480];
-
- if( *ref_len > sizeof(ref_buf) ) {
- rc = RC(rcAlign, rcFile, rcProcessing, rcBuffer, rcInsufficient);
- } else if( (rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, *ref_len,
- true, ref_buf, &rl)) == 0 ) {
- int64_t ref_pos = 0;
- uint64_t ref_offset_pos = i_ref_offset_elements;
- uint64_t i_mismatch_elements;
-
- ALIGN_DBG("ref %.*s[%u]", rl, ref_buf, rl);
- if( data->ploidy == 0 ) {
- data->has_mismatch.elements = 0;
- data->mismatch.elements = 0;
- }
- i_mismatch_elements = data->mismatch.elements;
- data->has_mismatch.elements += seq_len;
+ if(rc == 0 ) {
+ int32_t j;
+ memset(x, '-', sizeof(x) - 1);
+ x[sizeof(x) - 2] = '\0';
- ALIGN_DBGF(("%s:%u: HAS_MISMATCH: ", __func__, __LINE__));
- for(seq_pos = 0; seq_pos < seq_len; seq_pos++, ref_pos++) {
- if( has_ref_offset[seq_pos] ) {
- ref_pos += ref_offset[ref_offset_pos++];
- }
- if( (ref_pos < 0) || (ref_pos >= rl) ||
- ((toupper(ref_buf[ref_pos]) != toupper(seq[seq_pos])) && (seq[seq_pos] != '=')) ) {
- has_mismatch[seq_pos] = true;
- mismatch[data->mismatch.elements++] = seq[seq_pos];
+ ALIGN_C_DBG("ref: %.*s [%u]", max_rl, ref_buf, max_rl);
+ ALIGN_C_DBGF(("%s:%u: ref: ", __func__, __LINE__));
+ for(seq_pos = 0, j = 0, rl = 0, i = 0; seq_pos < seq_len; seq_pos++, j++) {
+ if( has_ref_offset[seq_pos] ) {
+ if( ref_offset[i_ref_offset_elements + rl] > 0 ) {
+ ALIGN_C_DBGF(("%.*s", (uint32_t)(ref_offset[i_ref_offset_elements + rl]), &ref_buf[j]));
} else {
- has_mismatch[seq_pos] = false;
+ i = -ref_offset[i_ref_offset_elements + rl];
}
- ALIGN_DBGF(("%c", has_mismatch[seq_pos] ? '1' : '0'));
+ j += ref_offset[i_ref_offset_elements + rl];
+ rl++;
+ }
+ ALIGN_C_DBGF(("%c", (j < 0 || j >= max_rl) ? '-' : (i > 0) ? tolower(ref_buf[j]) : ref_buf[j]));
+ if( i > 0 ) {
+ i--;
}
- ALIGN_DBGF((", MISMATCH: '%.*s'[%u]\n", (int)(data->mismatch.elements - i_mismatch_elements),
- &mismatch[i_mismatch_elements], data->mismatch.elements - i_mismatch_elements));
}
- }
- if( rc == 0 ) {
- if( data->ref_1st_row_id.buffer ) {
- ((INSDC_coord_len*)(data->ref_1st_row_id.buffer))[data->ploidy] = cself->start_rowid;
- data->ref_1st_row_id.elements = data->ploidy + 1;
- ALIGN_DBG("1st ROW_ID %u", ((INSDC_coord_len*)(data->ref_1st_row_id.buffer))[data->ploidy]);
+ ALIGN_C_DBGF(("\n%s:%u: seq: ", __func__, __LINE__));
+ for(i = 0, j = 0; i < seq_len; i++) {
+ if( has_ref_offset[i] && ref_offset[i_ref_offset_elements + j++] > 0 ) {
+ ALIGN_C_DBGF(("%.*s", ref_offset[i_ref_offset_elements + j - 1], x));
+ }
+ ALIGN_C_DBGF(("%c", seq[i]));
}
-
- if( data->ref_id.buffer ) {
- ((int64_t*)(data->ref_id.buffer))[data->ploidy] = cself->start_rowid + offset / cself->mgr->max_seq_len;
- data->ref_id.elements = data->ploidy + 1;
- ALIGN_DBG("REF_ID: %li", ((int64_t*)(data->ref_id.buffer))[data->ploidy]);
+ ALIGN_C_DBGF((" [%u]\n", seq_len));
+ ALIGN_C_DBGF(("%s:%u: hro: ", __func__, __LINE__));
+ for(i = 0, j = 0; i < seq_len; i++) {
+ if( has_ref_offset[i] && ref_offset[i_ref_offset_elements + j++] > 0 ) {
+ ALIGN_C_DBGF(("%.*s", ref_offset[i_ref_offset_elements + j - 1], x));
+ }
+ ALIGN_C_DBGF(("%c", has_ref_offset[i] + '0'));
}
- if( data->ref_start.buffer ) {
- ((INSDC_coord_zero*)(data->ref_start.buffer))[data->ploidy] = offset % cself->mgr->max_seq_len;
- data->ref_start.elements = data->ploidy + 1;
- ALIGN_DBG("REF_START %i", ((INSDC_coord_zero*)(data->ref_start.buffer))[data->ploidy]);
+ ALIGN_C_DBGF((", ro:"));
+ for(i = i_ref_offset_elements; i < data->ref_offset.elements; i++) {
+ ALIGN_C_DBGF((" %i,", ref_offset[i]));
}
- if( data->global_ref_start.buffer ) {
- ((uint64_t*)(data->global_ref_start.buffer))[data->ploidy] = (cself->start_rowid - 1) * cself->mgr->max_seq_len + offset;
- data->global_ref_start.elements = data->ploidy + 1;
- ALIGN_DBG("GLOBAL_REF_START %lu", ((uint64_t*)(data->global_ref_start.buffer))[data->ploidy]);
+ ALIGN_C_DBGF(("[%u]\n", data->ref_offset.elements - i_ref_offset_elements));
+ ALIGN_C_DBGF(("%s:%u: hmm: ", __func__, __LINE__));
+ for(i = 0, j = 0; i < seq_len; i++) {
+ if( has_ref_offset[i] && ref_offset[i_ref_offset_elements + j++] > 0 ) {
+ ALIGN_C_DBGF(("%.*s", ref_offset[i_ref_offset_elements + j - 1], x));
+ }
+ ALIGN_C_DBGF(("%c", has_mismatch[i] + '0'));
}
- if( data->effective_offset.buffer ) {
- ((int64_t*)(data->effective_offset.buffer))[data->ploidy] = offset;
- data->effective_offset.elements = data->ploidy + 1;
- ALIGN_DBG("OFFSET %li", ((int64_t*)(data->effective_offset.buffer))[data->ploidy]);
+ ALIGN_C_DBGF((", mm: '%.*s'[%u]\n", (int)(data->mismatch.elements - i_mismatch_elements),
+ &mismatch[i_mismatch_elements], data->mismatch.elements - i_mismatch_elements));
+ }
+#endif
+ if( rc == 0 ) {
+ if( data->ploidy == 0 ) {
+ int64_t *const ref_id = (int64_t *)data->ref_id.buffer;
+ INSDC_coord_zero *const ref_start = (INSDC_coord_zero *)data->ref_start.buffer;
+ uint64_t *const global_ref_start = (uint64_t *)data->global_ref_start.buffer;
+
+ data->ref_1st_row_id = cself->start_rowid;
+ data->effective_offset = offset;
+ data->ref_len = ref_len;
+ ALIGN_C_DBGF(("%s:%u: reference 1st ROW_ID %li OFFSET %i REF_LEN %u",
+ __func__, __LINE__, data->ref_1st_row_id, data->effective_offset, data->ref_len));
+
+ ReferenceSeq_TranslateOffset_int(cself, offset, ref_id, ref_start, global_ref_start);
+
+ if (ref_id) {
+ data->ref_id.elements = 1;
+ ALIGN_C_DBGF((" REF_ID %li", ref_id[0]));
+ }
+ if (ref_start) {
+ data->ref_start.elements = 1;
+ ALIGN_C_DBGF((" REF_START %i", ref_start[0]));
+ }
+ if (global_ref_start) {
+ data->global_ref_start.elements = 1;
+ ALIGN_C_DBGF((" GLOBAL_REF_START %lu", global_ref_start[0]));
+ }
+ ALIGN_C_DBGF(("\n"));
+ } else {
+ if( data->ref_1st_row_id != cself->start_rowid || data->effective_offset != offset ) {
+ rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "all reads in alignment record must align to same refseq at same location $(r1)@$(o1) <> $(r2):$(a2)@$(o2)",
+ "r1=%li,o1=%i,r2=%s,a2=%s,o2=%i", data->ref_1st_row_id, data->effective_offset, cself->id, cself->seqId, offset));
+ } else if( data->ref_len != ref_len ) {
+ rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "all reads in alignment record must have same size projection on refseq $(rl1) <> $(rl2) $(r):$(a)@$(o)",
+ "rl1=%u,rl2=%u,r=%s,a=%s,o=%i", data->ref_len, ref_len, cself->id, cself->seqId, offset));
+ }
}
+ }
+ if( rc == 0 ) {
data->ploidy++;
data->read_start.elements = data->ploidy;
data->read_len.elements = data->ploidy;
- data->ref_len.elements = data->ploidy;
}
+ if (href_buf)
+ free(href_buf);
}
- ALIGN_DBGERR(rc);
+ ALIGN_C_DBGERR(rc);
return rc;
}
-LIB_EXPORT rc_t CC ReferenceSeq_Read(const ReferenceSeq* cself, int64_t offset, INSDC_coord_len len,
- INSDC_dna_text* buffer, INSDC_coord_len* ref_len)
+LIB_EXPORT rc_t CC ReferenceSeq_Read(const ReferenceSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+ uint8_t* buffer, INSDC_coord_len* ref_len)
{
rc_t rc = 0;
if( cself == NULL || buffer == NULL || ref_len == NULL ) {
rc = RC(rcAlign, rcFile, rcReading, rcParam, rcNull);
} else {
- rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, len, true, buffer, ref_len);
+ rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, len, true, buffer, ref_len, false);
}
ALIGN_DBGERR(rc);
return rc;
@@ -1185,7 +2550,7 @@ LIB_EXPORT rc_t CC ReferenceSeq_Get1stRow(const ReferenceSeq* cself, int64_t* ro
return rc;
}
-LIB_EXPORT rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, int64_t offset, const ReferenceSeqCoverage* data)
+LIB_EXPORT rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, INSDC_coord_zero offset, const ReferenceSeqCoverage* data)
{
rc_t rc = 0;
@@ -1193,8 +2558,8 @@ LIB_EXPORT rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, int64_t o
rc = RC(rcAlign, rcFile, rcReading, rcParam, rcNull);
} else if( !(cself->mgr->options & ewrefmgr_co_Coverage) ) {
rc = RC( rcAlign, rcType, rcWriting, rcData, rcUnexpected);
- ALIGN_DBGERRP("coverage %s", rc, "data");
- } else if( (rc = ReferenceSeq_ReOffset(cself, &offset)) == 0 ) {
+ ALIGN_R_DBGERRP("coverage %s", rc, "data");
+ } else if( (rc = ReferenceSeq_ReOffset(cself->circular, cself->seq_len, &offset)) == 0 ) {
rc = TableWriterRef_WriteCoverage(cself->mgr->writer, cself->start_rowid, offset, data);
}
ALIGN_DBGERR(rc);
diff --git a/libs/align/writer-refseq.c b/libs/align/writer-refseq.c
index 43995c5..6da7795 100644
--- a/libs/align/writer-refseq.c
+++ b/libs/align/writer-refseq.c
@@ -69,10 +69,9 @@ LIB_EXPORT rc_t CC TableWriterRefSeq_Make(const TableWriterRefSeq** cself, VDBMa
{
rc_t rc = 0;
- if( cself == NULL )
+ if( cself == NULL ) {
rc = RC(rcAlign, rcFormatter, rcConstructing, rcParam, rcNull);
- else
- {
+ } else {
TableWriterRefSeq* self = calloc(1, sizeof(*self));
if( self == NULL ) {
rc = RC(rcAlign, rcFormatter, rcConstructing, rcMemory, rcExhausted);
@@ -89,18 +88,26 @@ LIB_EXPORT rc_t CC TableWriterRefSeq_Make(const TableWriterRefSeq** cself, VDBMa
*cself = self;
ALIGN_DBG("table %s created", table_path);
} else {
- TableWriterRefSeq_Whack(self, false, NULL);
+ TableWriterRefSeq_Whack(self, false, NULL, NULL, NULL, NULL, 0);
ALIGN_DBGERRP("table %s", rc, table_path);
}
}
return rc;
}
-LIB_EXPORT rc_t CC TableWriterRefSeq_Whack(const TableWriterRefSeq* cself, bool commit, uint64_t* rows)
+LIB_EXPORT rc_t CC TableWriterRefSeq_Whack(const TableWriterRefSeq* cself, bool commit, uint64_t* rows,
+ const char* argv0, const char* argv0_date,
+ const char* app_name, ver_t app_version)
{
rc_t rc = 0;
+
if( cself != NULL ) {
- rc = TableWriter_Whack(cself->base, commit, rows);
+ rc_t rc1;
+ if( commit ) {
+ rc = TableWriter_Sign(cself->base, argv0, argv0_date, app_name, app_version);
+ }
+ rc1 = TableWriter_Whack(cself->base, rc ? false : commit, rows);
+ rc = rc ? rc : rc1;
free((TableWriterRefSeq*)cself);
}
return rc;
diff --git a/libs/align/writer-sequence.c b/libs/align/writer-sequence.c
index 4e5f634..4453ac5 100644
--- a/libs/align/writer-sequence.c
+++ b/libs/align/writer-sequence.c
@@ -26,8 +26,13 @@
#include <align/extern.h>
#include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/sort.h>
+#include <klib/data-buffer.h>
+#include <klib/printf.h>
#include <insdc/insdc.h>
#include <vdb/database.h>
+#include <vdb/cursor.h>
#include <sra/sradb.h>
#include <align/writer-sequence.h>
#include "writer-priv.h"
@@ -47,7 +52,7 @@ static const TableWriterColumn TableWriterSeq_cols[ewseq_cn_Last + 1] =
/* order is important, see Write below!!! */
{0, "(INSDC:dna:text)CMP_READ", sizeof(char) * 8, ewcol_IsArray},
{0, "(INSDC:color:text)CMP_CSREAD", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore},
- {0, "CSKEY", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore},
+ {0, "CS_KEY", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore},
{0, "QUALITY", sizeof(INSDC_quality_phred) * 8, ewcol_IsArray},
{0, "PRIMARY_ALIGNMENT_ID", sizeof(int64_t) * 8, ewcol_IsArray},
{0, "ALIGNMENT_COUNT", sizeof(uint8_t) * 8, ewcol_IsArray},
@@ -58,14 +63,16 @@ static const TableWriterColumn TableWriterSeq_cols[ewseq_cn_Last + 1] =
{0, "READ_TYPE", sizeof(SRAReadTypes) * 8, ewcol_IsArray},
{0, "READ_START", sizeof(INSDC_coord_zero) * 8, ewcol_IsArray},
{0, "READ_LEN", sizeof(INSDC_coord_len) * 8, ewcol_IsArray},
- {0, "TMP_KEY_ID", sizeof(uint32_t) * 8, ewcol_Temporary},
+ {0, "TMP_KEY_ID", sizeof(uint64_t) * 8, ewcol_Temporary},
{0, "SPOT_GROUP", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore},
- {0, "READ_FILTER", sizeof(uint8_t) * 8, ewcol_IsArray}
+ {0, "READ_FILTER", sizeof(uint8_t) * 8, ewcol_IsArray},
+ {0, "TI", sizeof(uint64_t) * 8, ewcol_IsArray | ewcol_Ignore}
};
static const TableReaderColumn TableSeqReadTmpKey_cols[] = {
- {0, "TMP_KEY_ID", NULL, 0, 0},
- {0, NULL, NULL, 0, 0}
+ {0, "TMP_KEY_ID", {NULL}, 0, 0},
+ {0, "READ_LEN", {NULL}, 0, 0},
+ {0, NULL, {NULL}, 0, 0}
};
struct TableWriterSeq {
@@ -81,6 +88,11 @@ struct TableWriterSeq {
TableWriterColumn cols_alignd[2];
const TableReader* tmpkey_reader;
TableReaderColumn cols_read_tmpkey[sizeof(TableSeqReadTmpKey_cols) / sizeof(TableSeqReadTmpKey_cols[0])];
+ KVector *stats;
+ unsigned statsCount;
+ int64_t tmpKeyIdFirst;
+ int64_t tmpKeyIdLast;
+ bool flush;
};
static bool TableWriterSeq_InitQuantMatrix(uint8_t dst[256], char const quant[])
@@ -160,11 +172,112 @@ static bool TableWriterSeq_InitQuantMatrix(uint8_t dst[256], char const quant[])
return false;
}
+typedef struct { uint64_t distance, count; } stats_pair_t;
+
+typedef struct {
+ stats_pair_t *stats;
+ unsigned i;
+} pb_t;
+
+static rc_t CC stats_cb(uint64_t key, uint64_t value, void *user_data)
+{
+ pb_t *pb = user_data;
+
+ pb->stats[pb->i].distance = key;
+ pb->stats[pb->i].count = value;
+ ++pb->i;
+
+ return 0;
+}
+
+static int CC stats_cmp_count(const void *A, const void *B, void *ignore)
+{
+ if (((stats_pair_t const *)A)->distance == 0)
+ return -1;
+ if (((stats_pair_t const *)B)->distance == 0)
+ return 1;
+ if (((stats_pair_t const *)B)->count < ((stats_pair_t const *)A)->count)
+ return -1;
+ if (((stats_pair_t const *)B)->count > ((stats_pair_t const *)A)->count)
+ return 1;
+ if (((stats_pair_t const *)B)->distance < ((stats_pair_t const *)A)->distance)
+ return 1;
+ if (((stats_pair_t const *)B)->distance > ((stats_pair_t const *)A)->distance)
+ return -1;
+ return 0;
+}
+
+static int CC stats_cmp_distance(const void *A, const void *B, void *ignore)
+{
+ if (((stats_pair_t const *)A)->distance < ((stats_pair_t const *)B)->distance)
+ return -1;
+ if (((stats_pair_t const *)A)->distance > ((stats_pair_t const *)B)->distance)
+ return 1;
+ return 0;
+}
+
+static rc_t TableWriterSeq_WriteStatistics(TableWriterSeq const *cself, KMDataNode *node)
+{
+ pb_t pb;
+ rc_t rc;
+ KDataBuffer buf;
+
+ rc = KDataBufferMake(&buf, 8 * sizeof(pb.stats[0]), cself->statsCount);
+ if (rc) return rc;
+
+ pb.stats = buf.base;
+ pb.i = 0;
+ rc = KVectorVisitU64(cself->stats, 0, stats_cb, &pb);
+ if (rc == 0) {
+ unsigned i;
+ unsigned const n = cself->statsCount < 126 ? cself->statsCount : 126;
+ uint64_t *const distance = buf.base;
+
+ ksort(pb.stats, cself->statsCount, sizeof(pb.stats[0]), stats_cmp_count, NULL);
+ ksort(pb.stats, n, sizeof(pb.stats[0]), stats_cmp_distance, NULL);
+ for (i = 0; i != n; ++i) {
+ distance[i] = pb.stats[i].distance;
+ }
+ rc = KMDataNodeWrite(node, distance, n * sizeof(distance[0]));
+ }
+ KDataBufferWhack(&buf);
+ return rc;
+}
+
+static rc_t TableWriterSeq_CollectStatistics(TableWriterSeq *self, const TableWriterData* primary_alignment_id)
+{
+ rc_t rc;
+ int64_t mate[2] = {0, 0};
+ uint64_t distance = 0;
+ uint64_t count = 0;
+
+ memcpy(mate, primary_alignment_id->buffer, sizeof(mate[0]) * primary_alignment_id->elements);
+ if (mate[0] && mate[1]) {
+ distance = (mate[0] < mate[1]) ? (mate[1] - mate[0]) : (mate[0] - mate[1]);
+ }
+ else
+ return 0;
+ if (self->stats == NULL) {
+ rc = KVectorMake(&self->stats); if (rc) return rc;
+ }
+ rc = KVectorGetU64(self->stats, distance, &count);
+ if (GetRCObject(rc) == rcItem && GetRCState(rc) == rcNotFound) {
+ rc = KVectorSetU64(self->stats, distance, 1);
+ if (rc == 0) ++self->statsCount;
+ }
+ else if (rc == 0) {
+ ++count;
+ rc = KVectorSetU64(self->stats, distance, count);
+ }
+ return rc;
+}
+
LIB_EXPORT rc_t CC TableWriterSeq_Make(const TableWriterSeq** cself, VDatabase* db,
uint32_t const options, char const qual_quantization[])
{
rc_t rc = 0;
TableWriterSeq* self = NULL;
+ char const *tblName = (options & ewseq_co_ColorSpace) ? "CS_SEQUENCE" : "SEQUENCE";
if( cself == NULL || db == NULL ) {
rc = RC(rcAlign, rcFormatter, rcConstructing, rcParam, rcNull);
@@ -193,7 +306,10 @@ LIB_EXPORT rc_t CC TableWriterSeq_Make(const TableWriterSeq** cself, VDatabase*
if( options & ewseq_co_SpotGroup) {
self->cols[ewseq_cn_SPOT_GROUP].flags &= ~ewcol_Ignore;
}
- if( (rc = TableWriter_Make(&self->base, db, "SEQUENCE")) == 0 ) {
+ if( options & ewseq_co_TI) {
+ self->cols[ewseq_cn_TI].flags &= ~ewcol_Ignore;
+ }
+ if( (rc = TableWriter_Make(&self->base, db, tblName, "SEQUENCE")) == 0 ) {
rc = TableWriter_AddCursor(self->base, self->cols, sizeof(self->cols)/sizeof(self->cols[0]), &self->cursor_id);
}
}
@@ -232,8 +348,24 @@ LIB_EXPORT rc_t CC TableWriterSeq_Whack(const TableWriterSeq* cself, bool commit
if( cself != NULL ) {
TableWriterSeq* self = (TableWriterSeq*)cself;
+ VTable *vtbl;
+
TableReader_Whack(cself->tmpkey_reader);
- rc = TableWriter_Whack(cself->base, commit, rows);
+#if 1
+ if (cself->stats && commit && (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 ) {
+ KMetadata* meta;
+ if( (rc = VTableOpenMetadataUpdate(vtbl, &meta)) == 0 ) {
+ KMDataNode* node;
+ if( (rc = KMetadataOpenNodeUpdate(meta, &node, "MATE_STATISTICS")) == 0 ) {
+ rc = TableWriterSeq_WriteStatistics(cself, node);
+ KMDataNodeRelease(node);
+ }
+ KMetadataRelease(meta);
+ }
+ }
+#endif
+ rc = TableWriter_Whack(cself->base, commit && (rc == 0), rows);
+ KVectorRelease(cself->stats);
free(self->qual_buf);
free(self);
}
@@ -299,6 +431,9 @@ LIB_EXPORT rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Table
} else if( (cself->options & ewseq_co_AlignData) && data->alignment_count.elements != data->nreads ) {
rc = RC(rcAlign, rcType, rcWriting, rcData, rcInconsistent);
ALIGN_DBGERRP("nreads and alignment_count length %u <> %lu", rc, data->nreads, data->alignment_count.elements);
+ } else if( data->no_quantize_mask.buffer && data->no_quantize_mask.elements != data->quality.elements ) {
+ rc = RC(rcAlign, rcType, rcWriting, rcData, rcInconsistent);
+ ALIGN_DBGERRP("quality and no_quantize_mask length %u <> %lu", rc, data->quality.elements, data->no_quantize_mask.elements);
} else if( !(cself->options & ewseq_co_NoLabelData) &&
(lbl = ((data->label.buffer ? 1 : 0) + (data->label_start.buffer ? 1 : 0) +
(data->label_len.buffer ? 1 : 0))) != 0 && lbl != 3 ) {
@@ -308,6 +443,9 @@ LIB_EXPORT rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Table
if( cself->options & ewseq_co_AlignData ) {
TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_PRIMARY_ALIGNMENT_ID], data->primary_alignment_id);
TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_ALIGNMENT_COUNT], data->alignment_count);
+ if (rc == 0) {
+ rc = TableWriterSeq_CollectStatistics((TableWriterSeq *)cself, &data->primary_alignment_id);
+ }
}
if( cself->options & ewseq_co_SaveRead ) {
TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_READ], data->sequence);
@@ -342,8 +480,18 @@ LIB_EXPORT rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Table
((TableWriterSeq*)cself)->qual_buf = p;
}
}
- for(i = 0; i < data->quality.elements; i++ ) {
- cself->qual_buf[i] = cself->discrete_qual[b[i]];
+ if (data->no_quantize_mask.buffer) {
+ bool const *mask = data->no_quantize_mask.buffer;
+
+ for(i = 0; i < data->quality.elements; i++ ) {
+ uint8_t const q = b[i] & 0x3F;
+ cself->qual_buf[i] = mask[i] ? q : cself->discrete_qual[q];
+ }
+ }
+ else {
+ for(i = 0; i < data->quality.elements; i++ ) {
+ cself->qual_buf[i] = cself->discrete_qual[b[i]];
+ }
}
TW_COL_WRITE_BUF(cself->base, cself->cols[ewseq_cn_QUALITY], cself->qual_buf, data->quality.elements);
}
@@ -359,6 +507,8 @@ LIB_EXPORT rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Table
TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_SPOT_GROUP], data->spot_group);
TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_CSKEY], data->cskey);
TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_READ_FILTER], data->read_filter);
+ TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_PLATFORM], data->platform);
+ TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_TI], data->ti);
if( rc == 0 ) {
rc = TableWriter_CloseRow(cself->base);
}
@@ -378,7 +528,10 @@ LIB_EXPORT rc_t CC TableWriterSeq_TmpKeyStart(const TableWriterSeq* cself)
ALIGN_DBGERR(rc);
} else if( (rc = TableWriter_CloseCursor(cself->base, 0, NULL)) == 0 ) {
TableWriterSeq* self = (TableWriterSeq*)cself;
- const VTable* vtbl = NULL;
+ VTable* vtbl = NULL;
+
+ self->tmpKeyIdFirst = INT64_MAX;
+ self->tmpKeyIdLast = INT64_MIN;
memcpy(&self->cols_read_tmpkey, &TableSeqReadTmpKey_cols, sizeof(TableSeqReadTmpKey_cols));
if( (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 &&
(rc = TableReader_Make(&self->tmpkey_reader, vtbl, self->cols_read_tmpkey, 50 * 1024 * 1024)) == 0 ) {
@@ -391,7 +544,7 @@ LIB_EXPORT rc_t CC TableWriterSeq_TmpKeyStart(const TableWriterSeq* cself)
return rc;
}
-LIB_EXPORT rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t rowid, uint32_t* key_id)
+LIB_EXPORT rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t rowid, uint64_t* key_id)
{
rc_t rc = 0;
@@ -402,7 +555,13 @@ LIB_EXPORT rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t ro
rc = RC( rcAlign, rcType, rcReading, rcMode, rcNotOpen);
ALIGN_DBGERR(rc);
} else if( (rc = TableReader_ReadRow(cself->tmpkey_reader, rowid)) == 0 ) {
- memcpy(key_id, cself->cols_read_tmpkey[0].base, sizeof(*key_id));
+ memcpy(key_id, cself->cols_read_tmpkey[0].base.var, sizeof(*key_id));
+ if (cself->tmpKeyIdLast < rowid || rowid < cself->tmpKeyIdFirst) {
+ rc = TableReader_PageIdRange(cself->tmpkey_reader, rowid,
+ &((TableWriterSeq*)cself)->tmpKeyIdFirst,
+ &((TableWriterSeq*)cself)->tmpKeyIdLast);
+ ((TableWriterSeq*)cself)->flush = rc == 0;
+ }
}
return rc;
}
@@ -413,17 +572,43 @@ LIB_EXPORT rc_t CC TableWriterSeq_WriteAlignmentData(const TableWriterSeq* cself
{
rc_t rc = 0;
- if( cself == NULL || rowid == 0 || primary_alignment_id == NULL ) {
+ if( cself == NULL ) {
rc = RC( rcAlign, rcType, rcWriting, rcParam, rcNull);
ALIGN_DBGERR(rc);
} else if( cself->options & ewseq_co_AlignData ) {
rc = RC( rcAlign, rcType, rcWriting, rcParam, rcViolated);
ALIGN_DBGERR(rc);
- } else if( (rc = TableWriter_OpenRowId(cself->base, rowid, cself->alignd_cursor_id)) == 0 ) {
- TW_COL_WRITE(cself->base, cself->cols_alignd[0], *primary_alignment_id);
- TW_COL_WRITE(cself->base, cself->cols_alignd[1], *alignment_count);
- if( rc == 0 ) {
- rc = TableWriter_CloseRow(cself->base);
+ } else if( rowid == 0 ) {
+ rc = TableWriter_Flush(cself->base, cself->alignd_cursor_id);
+ }
+ else if( primary_alignment_id == NULL || alignment_count == NULL ) {
+ rc = RC( rcAlign, rcType, rcWriting, rcParam, rcNull);
+ ALIGN_DBGERR(rc);
+ } else if( (rc = TableReader_ReadRow(cself->tmpkey_reader, rowid)) != 0 ||
+ cself->cols_read_tmpkey[1].len != primary_alignment_id->elements ) {
+ rc = rc ? rc : RC(rcAlign, rcType, rcWriting, rcData, rcInconsistent);
+ ALIGN_DBGERRP("nreads and primary_alignment_id length %u <> %lu",
+ rc, cself->cols_read_tmpkey[1].len, primary_alignment_id->elements);
+ } else if( primary_alignment_id->elements != alignment_count->elements ) {
+ rc = RC(rcAlign, rcType, rcWriting, rcData, rcInconsistent);
+ ALIGN_DBGERRP("primary_alignment_id and alignment_count length %u <> %lu",
+ rc, primary_alignment_id->elements, alignment_count->elements);
+ }
+ else {
+ if (cself->flush) {
+ rc = TableWriter_Flush(cself->base, cself->alignd_cursor_id);
+ ((TableWriterSeq*)cself)->flush = false;
+ }
+ if( rc == 0 &&
+ (rc = TableWriter_OpenRowId(cself->base, rowid, cself->alignd_cursor_id)) == 0 ) {
+ TW_COL_WRITE(cself->base, cself->cols_alignd[0], *primary_alignment_id);
+ TW_COL_WRITE(cself->base, cself->cols_alignd[1], *alignment_count);
+ if( rc == 0 ) {
+ rc = TableWriter_CloseRow(cself->base);
+ }
+ if (rc == 0/* && (cself->options & ewseq_co_WantMateStats)*/) {
+ rc = TableWriterSeq_CollectStatistics((TableWriterSeq *)cself, primary_alignment_id);
+ }
}
}
return rc;
diff --git a/libs/axf/Makefile b/libs/axf/Makefile
index 9af57d2..f9710fd 100644
--- a/libs/axf/Makefile
+++ b/libs/axf/Makefile
@@ -25,7 +25,7 @@
default: std
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
MODULE = libs/axf
MOD_LIBS = \
@@ -43,15 +43,13 @@ include $(TOP)/build/Makefile.env
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(ALL_LIBS))
-
-all std: makedirs vers-includes
+all std: makedirs
@ $(MAKE_CMD) $(TARGDIR)/std
-$(ALL_LIBS): makedirs vers-includes
+$(ALL_LIBS): makedirs
@ $(MAKE_CMD) $(TARGDIR)/$@
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
#-------------------------------------------------------------------------------
# std
@@ -82,6 +80,7 @@ AXF_SRC = \
raw-restore-read \
raw-restore-qual \
seq-restore-read \
+ seq-construct-read \
cigar \
project_read_from_sequence \
not-my-row \
@@ -94,16 +93,19 @@ AXF_SRC = \
align-local_ref_start \
generate-mismatch-qual \
mismatch-restore-qual \
- ref-preserve_qual
+ ref-preserve_qual \
+ ref-tbl \
+ make-cmp-read_desc \
+ get_mate_align_ids
AXF_OBJ = \
$(addsuffix .$(LOBX),$(AXF_SRC))
AXF_LIB = \
+ -lalign-reader \
-dvdb \
-dkdb \
-dklib \
- -dalign-reader \
-dm \
-dz
@@ -113,7 +115,7 @@ $(MODDIR)/libaxf.$(SHLX): $(AXF_OBJ)
$(TARGDIR)/libaxf.$(LIBX): $(ILIBDIR)/libaxf.$(LIBX)
$(ILIBDIR)/libaxf.$(LIBX): $(AXF_OBJ)
- $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(AXF_LIB)
+ $(LD) --slib -o $@ $^ $(AXF_LIB)
#-------------------------------------------------------------------------------
@@ -131,10 +133,11 @@ WAXF_OBJ = \
$(addsuffix .$(LOBX),$(WAXF_SRC))
WAXF_LIB = \
+ -lalign-reader \
-dwvdb \
-dwkdb \
+ -lkfg \
-dklib \
- -dalign-writer \
-dm \
-dz
@@ -144,4 +147,4 @@ $(WMODDIR)/libwaxf.$(SHLX): $(WAXF_OBJ)
$(TARGDIR)/libwaxf.$(LIBX): $(ILIBDIR)/libwaxf.$(LIBX)
$(ILIBDIR)/libwaxf.$(LIBX): $(WAXF_OBJ)
- $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(WAXF_LIB)
+ $(LD) --slib -o $@ $^ $(WAXF_LIB)
diff --git a/libs/axf/align-local_ref_id.c b/libs/axf/align-local_ref_id.c
index 64b3c5c..97f8efb 100644
--- a/libs/axf/align-local_ref_id.c
+++ b/libs/axf/align-local_ref_id.c
@@ -37,6 +37,8 @@
#include <bitstr.h>
+#include "ref-tbl.h"
+
#include <stdlib.h>
#include <string.h>
#include <assert.h>
@@ -44,7 +46,7 @@
typedef struct LocalRefID LocalRefID;
struct LocalRefID
{
- uint32_t maxSeqLen;
+ uint32_t max_seq_len;
};
static
@@ -58,53 +60,37 @@ void CC LocalRefIDWhack ( void *obj )
}
static
-rc_t LocalRefIDMake ( LocalRefID **objp, const VTable *tbl )
+rc_t LocalRefIDMake ( LocalRefID **objp, const VTable *tbl, const VCursor *native_curs)
{
rc_t rc;
- const VCursor *curs;
- uint32_t colIdx;
-
/* create the object */
LocalRefID *obj = malloc ( sizeof * obj );
if ( obj == NULL ) {
rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
} else {
- /* get at the parent database */
- const VDatabase *db;
- rc = VTableOpenParentRead ( tbl, & db );
- if ( rc == 0 )
- {
- /* open the reference table */
- const VTable *reftbl;
- rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
- VDatabaseRelease ( db );
- if ( rc == 0 )
- {
- /* create a cursor */
- rc = VTableCreateCursorRead ( reftbl, & curs);
- VTableRelease ( reftbl );
- if( rc == 0 ) {
- /* add columns to cursor */
- if( (rc = VCursorAddColumn(curs, &colIdx, "(U32)MAX_SEQ_LEN")) == 0 ) {
- rc = VCursorOpen(curs);
- }
- if (rc == 0) {
- const void *base;
- uint32_t row_len;
-
- rc = VCursorCellDataDirect(curs, 1, colIdx, NULL, &base, NULL, &row_len);
- if (rc == 0) {
- memcpy(&obj->maxSeqLen, base, 4);
- }
- }
- VCursorRelease(curs);
- if( rc == 0 ) {
- *objp = obj;
- return 0;
+ const VCursor *curs=NULL;
+ /* open the reference table cursor*/
+ if( (rc = AlignRefTableCursor(tbl, native_curs, &curs, NULL)) == 0 ){
+ uint32_t itmp;
+ if( (rc = VCursorAddColumn(curs, &itmp, "(U32)MAX_SEQ_LEN")) == 0 || GetRCState(rc) == rcExists) {
+ const void *base;
+ uint32_t row_len;
+ rc = VCursorCellDataDirect(curs, 1, itmp, NULL, &base, NULL, &row_len);
+ if(rc == 0) {
+ assert(row_len == 1);
+ memcpy(&obj->max_seq_len, base, 4);
}
}
- }
- }
+ if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+ obj->max_seq_len = 0;
+ rc = 0;
+ }
+ VCursorRelease(curs);
+ if(rc == 0){
+ *objp = obj;
+ return 0;
+ }
+ }
free ( obj );
}
return rc;
@@ -119,10 +105,10 @@ rc_t CC align_local_ref_id ( void *data, const VXformInfo *info, void *Dst, cons
LocalRefID const *self = (void const *)data;
int64_t *dst=(int64_t*)Dst;
uint64_t const *global_ref_start = Src;
- unsigned i;
+ uint64_t i;
for (i = 0; i != elem_count; ++i) {
- dst[i] = global_ref_start[i] / self->maxSeqLen + 1;
+ dst[i] = global_ref_start[i] / self->max_seq_len + 1;
}
return 0;
}
@@ -131,7 +117,7 @@ VTRANSFACT_IMPL ( NCBI_align_local_ref_id, 1, 0, 0 ) ( const void *self, const V
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
LocalRefID *fself;
- rc_t rc = LocalRefIDMake ( & fself, info -> tbl );
+ rc_t rc = LocalRefIDMake ( & fself, info -> tbl, (const VCursor*)info->parms );
if ( rc == 0 )
{
rslt -> self = fself;
diff --git a/libs/axf/align-local_ref_start.c b/libs/axf/align-local_ref_start.c
index 46ea655..6b37120 100644
--- a/libs/axf/align-local_ref_start.c
+++ b/libs/axf/align-local_ref_start.c
@@ -37,6 +37,8 @@
#include <bitstr.h>
+#include "ref-tbl.h"
+
#include <stdlib.h>
#include <string.h>
#include <assert.h>
@@ -44,7 +46,7 @@
typedef struct LocalRefStart LocalRefStart;
struct LocalRefStart
{
- uint32_t maxSeqLen;
+ uint32_t max_seq_len;
};
static
@@ -58,52 +60,37 @@ void CC LocalRefStartWhack ( void *obj )
}
static
-rc_t LocalRefStartMake ( LocalRefStart **objp, const VTable *tbl )
+rc_t LocalRefStartMake ( LocalRefStart **objp, const VTable *tbl, const VCursor *native_curs )
{
rc_t rc;
- const VCursor *curs;
- uint32_t colIdx;
/* create the object */
LocalRefStart *obj = malloc ( sizeof * obj );
if ( obj == NULL ) {
rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
} else {
- /* get at the parent database */
- const VDatabase *db;
- rc = VTableOpenParentRead ( tbl, & db );
- if ( rc == 0 )
- {
- /* open the reference table */
- const VTable *reftbl;
- rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
- VDatabaseRelease ( db );
- if ( rc == 0 )
- {
- /* create a cursor */
- rc = VTableCreateCursorRead ( reftbl, & curs);
- VTableRelease ( reftbl );
- if( rc == 0 ) {
- /* add columns to cursor */
- if( (rc = VCursorAddColumn(curs, &colIdx, "(U32)MAX_SEQ_LEN")) == 0 ) {
- rc = VCursorOpen(curs);
- }
- if (rc == 0) {
- const void *base;
- uint32_t row_len;
-
- rc = VCursorCellDataDirect(curs, 1, colIdx, NULL, &base, NULL, &row_len);
- if (rc == 0) {
- memcpy(&obj->maxSeqLen, base, 4);
- }
+ const VCursor *curs=NULL;
+ /* open the reference table cursor*/
+ if( (rc = AlignRefTableCursor(tbl, native_curs, &curs, NULL)) == 0 ){
+ uint32_t itmp;
+ if( (rc = VCursorAddColumn(curs, &itmp, "(U32)MAX_SEQ_LEN")) == 0 || GetRCState(rc) == rcExists) {
+ const void *base;
+ uint32_t row_len;
+ rc = VCursorCellDataDirect(curs, 1, itmp, NULL, &base, NULL, &row_len);
+ if(rc == 0) {
+ assert(row_len == 1);
+ memcpy(&obj->max_seq_len, base, 4);
}
- VCursorRelease(curs);
- if( rc == 0 ) {
+ }
+ if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+ obj->max_seq_len = 0;
+ rc = 0;
+ }
+ VCursorRelease(curs);
+ if(rc == 0){
*objp = obj;
return 0;
- }
}
- }
}
free ( obj );
}
@@ -122,7 +109,7 @@ rc_t CC align_local_ref_start ( void *data, const VXformInfo *info, void *Dst, c
unsigned i;
for (i = 0; i != elem_count; ++i) {
- dst[i] = global_ref_start[i] % self->maxSeqLen;
+ dst[i] = global_ref_start[i] % self->max_seq_len;
}
return 0;
}
@@ -131,7 +118,7 @@ VTRANSFACT_IMPL ( NCBI_align_local_ref_start, 1, 0, 0 ) ( const void *self, cons
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
LocalRefStart *fself;
- rc_t rc = LocalRefStartMake ( & fself, info -> tbl );
+ rc_t rc = LocalRefStartMake ( & fself, info -> tbl, (const VCursor*)info->parms );
if ( rc == 0 )
{
rslt -> self = fself;
diff --git a/libs/axf/align-ref-name.c b/libs/axf/align-ref-name.c
index e40118e..ce7fc21 100644
--- a/libs/axf/align-ref-name.c
+++ b/libs/axf/align-ref-name.c
@@ -37,6 +37,8 @@
#include <bitstr.h>
+#include "ref-tbl.h"
+
#include <stdlib.h>
#include <string.h>
#include <assert.h>
@@ -60,7 +62,7 @@ void CC RefNameWhack ( void *obj )
}
static
-rc_t RefNameMake ( RefName **objp, const VTable *tbl )
+rc_t RefNameMake ( RefName **objp, const VTable *tbl, const VCursor *native_curs )
{
rc_t rc;
@@ -69,32 +71,23 @@ rc_t RefNameMake ( RefName **objp, const VTable *tbl )
if ( obj == NULL ) {
rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
} else {
- /* get at the parent database */
- const VDatabase *db;
- rc = VTableOpenParentRead ( tbl, & db );
- if ( rc == 0 )
- {
- /* open the reference table */
- const VTable *reftbl;
- rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
- VDatabaseRelease ( db );
- if ( rc == 0 )
- {
- /* create a cursor */
- rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 2*1024u * 1024u);
- VTableRelease ( reftbl );
+ obj->curs=NULL;
+ /* open the reference cursor */
+ rc = AlignRefTableCursor(tbl, native_curs, &obj->curs, NULL);
+ if(rc == 0){
+ /* add columns to cursor */
+ rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)REF_NAME");
+ if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+ rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME");
+ }
+ if(GetRCState(rc) == rcExists){
+ rc = 0;
+ }
if( rc == 0 ) {
- /* add columns to cursor */
- if( (rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME")) == 0 ) {
- rc = VCursorOpen(obj->curs);
- }
- if( rc == 0 ) {
- *objp = obj;
- return 0;
- }
- VCursorRelease ( obj -> curs );
+ *objp = obj;
+ return 0;
}
- }
+ VCursorRelease ( obj -> curs );
}
free ( obj );
}
@@ -102,7 +95,7 @@ rc_t RefNameMake ( RefName **objp, const VTable *tbl )
}
enum align_ref_name_args {
- REF_ID,
+ REF_ID
};
/*
@@ -114,7 +107,6 @@ rc_t CC align_ref_name ( void *data, const VXformInfo *info,
{
rc_t rc;
RefName const *self = (void const *)data;
- uint8_t *dst;
char const *name = NULL;
uint32_t name_len;
@@ -132,8 +124,8 @@ rc_t CC align_ref_name ( void *data, const VXformInfo *info,
}
if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow) {
- name = "*";
- name_len = 1;
+ name = "";
+ name_len = 0;
}
else if (rc) return rc;
@@ -153,7 +145,7 @@ VTRANSFACT_IMPL ( NCBI_align_ref_name, 1, 0, 0 ) ( const void *self, const VXfac
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
RefName *fself;
- rc_t rc = RefNameMake ( & fself, info -> tbl );
+ rc_t rc = RefNameMake ( & fself, info -> tbl,(const VCursor*)info->parms );
if ( rc == 0 )
{
rslt -> self = fself;
diff --git a/libs/axf/align-ref-pos.c b/libs/axf/align-ref-pos.c
index 2c2c79c..fb891e2 100644
--- a/libs/axf/align-ref-pos.c
+++ b/libs/axf/align-ref-pos.c
@@ -38,6 +38,8 @@
#include <bitstr.h>
+#include "ref-tbl.h"
+
#include <stdlib.h>
#include <string.h>
#include <assert.h>
@@ -104,7 +106,7 @@ void CC RefPosWhack ( void *obj )
}
static
-rc_t RefPosMake ( RefPos **objp, const VTable *tbl )
+rc_t RefPosMake ( RefPos **objp, const VTable *tbl, const VCursor *native_curs )
{
rc_t rc;
@@ -113,54 +115,44 @@ rc_t RefPosMake ( RefPos **objp, const VTable *tbl )
if ( obj == NULL ) {
rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
} else {
- /* get at the parent database */
- const VDatabase *db;
- BSTreeInit(&obj->tr_range);
- rc = VTableOpenParentRead ( tbl, & db );
- if ( rc == 0 )
- {
- /* open the reference table */
- const VTable *reftbl;
- rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
- VDatabaseRelease ( db );
- if ( rc == 0 ){
- const VCursor* ctmp;
- rc = VTableCreateCursorRead ( reftbl, & ctmp);
- if(rc==0){
- uint32_t itmp;
- rc = VCursorAddColumn(ctmp, &itmp, "(U32)MAX_SEQ_LEN");
- if(rc==0) rc = VCursorOpen(ctmp);
- if(rc==0) {
- const void *base;
- uint32_t row_len;
- rc = VCursorCellDataDirect(ctmp, 1,itmp, NULL, &base, NULL, &row_len);
- if (rc == 0) {
- assert(row_len == 1);
- memcpy(&obj->max_seq_len, base, 4);
- }
- }
- }
- }
- if ( rc == 0 )
- {
- /* create a cursor */
- rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 4*1024*1024);
- VTableRelease ( reftbl );
- if( rc == 0 ) {
- /* add columns to cursor */
- if( (rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME")) == 0 &&
- (rc = VCursorAddColumn(obj->curs, &obj->name_range_idx, "NAME_RANGE")) == 0 ) {
- rc = VCursorOpen(obj->curs);
- }
- if( rc == 0 ) {
- *objp = obj;
- return 0;
+ obj->curs=NULL;
+ BSTreeInit(&obj->tr_range);
+ /* open the reference table cursor*/
+
+ if( (rc = AlignRefTableCursor(tbl, native_curs, &obj->curs, NULL)) == 0 ) {
+ uint32_t itmp;
+ if( (rc = VCursorAddColumn(obj->curs, &itmp, "(U32)MAX_SEQ_LEN")) == 0 || GetRCState(rc) == rcExists) {
+ const void *base;
+ uint32_t row_len;
+ rc = VCursorCellDataDirect(obj->curs, 1, itmp, NULL, &base, NULL, &row_len);
+ if(rc == 0) {
+ assert(row_len == 1);
+ memcpy(&obj->max_seq_len, base, 4);
}
- VCursorRelease ( obj -> curs );
}
- }
+ if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+ /*** no MAX_SEQ_LEN means that REF_POS==REF_START **/
+ VCursorRelease(obj->curs);
+ obj->curs = NULL;
+ obj->max_seq_len = 0;
+ obj->name_range_idx = 0;
+ obj->name_idx = 0;
+ rc = 0;
+ } else if( rc == 0 ) {
+ /* add columns to cursor */
+ rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME");
+ if(rc == 0 || GetRCState(rc) == rcExists)
+ rc = VCursorAddColumn(obj->curs, &obj->name_range_idx, "NAME_RANGE");
+ if(GetRCState(rc) == rcExists)
+ rc = 0;
+ }
+ }
+ if( rc == 0 ) {
+ *objp = obj;
+ } else {
+ VCursorRelease(obj->curs);
+ free(obj);
}
- free ( obj );
}
return rc;
}
@@ -182,58 +174,55 @@ rc_t CC align_ref_pos ( void *data, const VXformInfo *info,
rc_t rc;
RefPos const *self = (void const *)data;
int64_t ref_row_id;
- char const *name = NULL;
- uint32_t name_len;
INSDC_coord_zero *ref_pos;
unsigned const ploidy = argv[REF_START].u.data.elem_count;
unsigned i;
- BSTRowRange *brr;
/* get start and length of reference segment */
- int64_t const *ref_id = argv[REF_ID].u.data.base;
- INSDC_coord_zero const *ref_start = argv[REF_START].u.data.base;
+ int64_t const *ref_id;
+ INSDC_coord_zero const *ref_start;
assert(argv[REF_ID].u.data.elem_bits == sizeof(*ref_id) * 8);
assert(argv[REF_START].u.data.elem_bits == sizeof(*ref_start) * 8);
- ref_id += argv[REF_ID].u.data.first_elem;
+ ref_start = argv[REF_START].u.data.base;
ref_start += argv[REF_START].u.data.first_elem;
+ if( self->curs != NULL ) {
+ char const *name = NULL;
+ uint32_t name_len;
+ BSTRowRange *brr;
- brr = (BSTRowRange*)BSTreeFind(&self->tr_range,&ref_id[0],row_range_cmp);
+ ref_id = argv[REF_ID].u.data.base;
+ ref_id += argv[REF_ID].u.data.first_elem;
+ brr = (BSTRowRange*)BSTreeFind(&self->tr_range,&ref_id[0],row_range_cmp);
+ if(brr==NULL) {
+ RowRange *new_rr;
+ rc = VCursorCellDataDirect(self->curs, ref_id[0], self->name_idx, NULL, (void const **)&name, NULL, &name_len);
+ if (rc) return rc;
+ rc = VCursorParamsSet((struct VCursorParams const *)self->curs, "QUERY_SEQ_NAME", "%.*s", name_len, name);
+ if (rc) return rc;
- if(brr==NULL){
- RowRange *new_rr;
- rc = VCursorSetRowId(self->curs, ref_id[0]);
- if (rc) return rc;
- rc = VCursorOpenRow(self->curs);
- if (rc) return rc;
- rc = VCursorCellData(self->curs, self->name_idx, NULL, (void const **)&name, NULL, &name_len);
- if (rc) return rc;
- rc = VCursorParamsSet((struct VCursorParams const *)self->curs, "QUERY_SEQ_NAME", "%.*s", name_len, name);
- if (rc) return rc;
-
- rc = VCursorCellData(self->curs, self->name_range_idx, NULL, (void const **)&new_rr, NULL, NULL);
- if (rc) return rc;
-
- VCursorCloseRow(self->curs);
- brr=malloc(sizeof(*brr));
- memcpy(&brr->rr,new_rr,sizeof(*new_rr));
- BSTreeInsert((BSTree*)&self->tr_range,(BSTNode*)brr, row_range_sort);
- }
+ rc = VCursorCellDataDirect(self->curs, ref_id[0], self->name_range_idx, NULL, (void const **)&new_rr, NULL, NULL);
+ if (rc) return rc;
- ref_row_id = brr->rr.start_id;
-
- rc = KDataBufferCast(rslt->data, rslt->data, sizeof(ref_pos[0]) * 8, true);
- if (rc) return rc;
+ brr=malloc(sizeof(*brr));
+ memcpy(&brr->rr,new_rr,sizeof(*new_rr));
+ BSTreeInsert((BSTree*)&self->tr_range,(BSTNode*)brr, row_range_sort);
+ }
+ ref_row_id = brr->rr.start_id;
+ }
rc = KDataBufferResize(rslt->data, ploidy);
if (rc) return rc;
- ref_pos = rslt->data->base;
+ ref_pos = rslt->data->base;
for (i = 0; i != ploidy; ++i) {
- ref_pos[i] = (ref_id[0] - ref_row_id) * self->max_seq_len + ref_start[i];
+ ref_pos[i] = ref_start[i];
+ if( self->curs != NULL ) {
+ ref_pos[i] += (ref_id[0] - ref_row_id) * self->max_seq_len;
+ }
}
rslt->elem_count = ploidy;
rslt->elem_bits = sizeof(ref_pos[0]) * 8;
@@ -244,7 +233,7 @@ VTRANSFACT_IMPL ( NCBI_align_ref_pos, 1, 0, 0 ) ( const void *self, const VXfact
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
RefPos *fself;
- rc_t rc = RefPosMake ( & fself, info -> tbl );
+ rc_t rc = RefPosMake ( & fself, info -> tbl, (const VCursor*)info->parms);
if ( rc == 0 )
{
rslt -> self = fself;
diff --git a/libs/axf/align-ref-seq-id.c b/libs/axf/align-ref-seq-id.c
index 5b22a80..6d0d8a7 100644
--- a/libs/axf/align-ref-seq-id.c
+++ b/libs/axf/align-ref-seq-id.c
@@ -37,6 +37,8 @@
#include <bitstr.h>
+#include "ref-tbl.h"
+
#include <stdlib.h>
#include <string.h>
#include <assert.h>
@@ -60,7 +62,7 @@ void CC RefSeqIDWhack ( void *obj )
}
static
-rc_t RefSeqIDMake ( RefSeqID **objp, const VTable *tbl )
+rc_t RefSeqIDMake ( RefSeqID **objp, const VTable *tbl, const VCursor *native_curs )
{
rc_t rc;
@@ -69,32 +71,23 @@ rc_t RefSeqIDMake ( RefSeqID **objp, const VTable *tbl )
if ( obj == NULL ) {
rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
} else {
- /* get at the parent database */
- const VDatabase *db;
- rc = VTableOpenParentRead ( tbl, & db );
- if ( rc == 0 )
- {
- /* open the reference table */
- const VTable *reftbl;
- rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
- VDatabaseRelease ( db );
- if ( rc == 0 )
- {
- /* create a cursor */
- rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 2*1024*1024);
- VTableRelease ( reftbl );
+ obj->curs=NULL;
+ /* open the reference cursor */
+ rc = AlignRefTableCursor(tbl, native_curs, &obj->curs, NULL);
+ if(rc == 0){
+ /* add columns to cursor */
+ rc = VCursorAddColumn(obj->curs, &obj->seqID_idx, "SEQ_ID");
+ if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+ rc = VCursorAddColumn(obj->curs, &obj->seqID_idx, "REF_SEQ_ID");
+ }
+ if(GetRCState(rc) == rcExists){
+ rc = 0;
+ }
if( rc == 0 ) {
- /* add columns to cursor */
- if( (rc = VCursorAddColumn(obj->curs, &obj->seqID_idx, "SEQ_ID")) == 0 ) {
- rc = VCursorOpen(obj->curs);
- }
- if( rc == 0 ) {
- *objp = obj;
- return 0;
- }
- VCursorRelease ( obj -> curs );
+ *objp = obj;
+ return 0;
}
- }
+ VCursorRelease ( obj -> curs );
}
free ( obj );
}
@@ -102,7 +95,7 @@ rc_t RefSeqIDMake ( RefSeqID **objp, const VTable *tbl )
}
enum align_ref_name_args {
- REF_ID,
+ REF_ID
};
/*
@@ -114,7 +107,6 @@ rc_t CC align_ref_seq_id ( void *data, const VXformInfo *info,
{
rc_t rc;
RefSeqID const *self = (void const *)data;
- uint8_t *dst;
char const *name = NULL;
uint32_t name_len;
@@ -123,11 +115,19 @@ rc_t CC align_ref_seq_id ( void *data, const VXformInfo *info,
assert(argv[REF_ID].u.data.elem_bits == sizeof(*ref_id) * 8);
+ if( self->curs == NULL || argv[REF_ID].u.data.elem_count == 0 ) {
+ rslt->elem_count = 0;
+ return 0;
+ }
ref_id += argv[REF_ID].u.data.first_elem;
rc = VCursorCellDataDirect(self->curs, ref_id[0], self->seqID_idx, NULL, (void const **)&name, NULL, &name_len);
- if (rc) return rc;
-
+ if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow) {
+ name = "";
+ name_len = 0;
+ } else if( rc != 0 ) {
+ return rc;
+ }
rc = KDataBufferCast(rslt->data, rslt->data, sizeof(name[0]) * 8, true);
if (rc) return rc;
@@ -144,7 +144,7 @@ VTRANSFACT_IMPL ( NCBI_align_ref_seq_id, 1, 0, 0 ) ( const void *self, const VXf
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
RefSeqID *fself;
- rc_t rc = RefSeqIDMake ( & fself, info -> tbl );
+ rc_t rc = RefSeqIDMake ( & fself, info -> tbl, (const VCursor*)info->parms );
if ( rc == 0 )
{
rslt -> self = fself;
diff --git a/libs/axf/align-restore-read.c b/libs/axf/align-restore-read.c
index 1bd6d27..95b2066 100644
--- a/libs/axf/align-restore-read.c
+++ b/libs/axf/align-restore-read.c
@@ -47,7 +47,7 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
VRowResult *rslt, uint32_t argc, const VRowData argv [] )
{
rc_t rc;
- int mmi,roi,rri,di;
+ int mmi,roi,rri,di,bi;
const INSDC_4na_bin *ref_read = argv[0].u.data.base;
const uint32_t ref_read_len = argv[0].u.data.elem_count;
const uint8_t *has_mismatch = argv[1].u.data.base;
@@ -58,6 +58,8 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
const uint32_t has_ref_offset_len = argv[3].u.data.elem_count;
const int32_t *ref_offset = argv[4].u.data.base;
const uint32_t ref_offset_len = argv[4].u.data.elem_count;
+ uint32_t ploidy = 1, rl;
+ const INSDC_coord_len* read_len = &has_mismatch_len;
INSDC_4na_bin *dst;
uint32_t dst_len;
@@ -76,6 +78,13 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
if ( has_mismatch_len != has_ref_offset_len )
return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
+
+ if( argc > 5 ) {
+ assert(argv[5].u.data.elem_bits == 32);
+ ploidy = argv[5].u.data.elem_count;
+ read_len = argv[5].u.data.base;
+ read_len += argv[5].u.data.first_elem;
+ }
dst_len = has_mismatch_len;
/* resize output row for the total number of reads */
@@ -85,12 +94,13 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
rslt -> elem_count = dst_len;
dst = rslt -> data -> base;
/**** MAIN RESTORATION LOOP ***/
- for(mmi=roi=rri=di=0; di < dst_len; di++,rri++){
- if(has_ref_offset[di]){
+ for(mmi=roi=rri=di=bi=0, rl = 1; di < dst_len; di++,rri++,rl++,bi++){
+ if(has_ref_offset[di] && bi >= 0){ /** bi can only become negative on Bs; skip has_ref_offset if Bs are not exhausted ***/
if(roi >= ref_offset_len)
return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
- rri += ref_offset[roi]; /** can lead to negative rri ***/
- roi ++;
+ memcpy ( & bi, ref_offset + roi, sizeof bi );
+ rri += bi; /** can lead to negative rri ***/
+ roi++;
}
if(has_mismatch[di]){
if(mmi >= mismatch_len)
@@ -103,6 +113,12 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
}
dst[di]=ref_read[rri];
}
+ if( ploidy > 1 && rl == read_len[0] ) {
+ rri = -1;
+ rl = 0;
+ ploidy--;
+ read_len++;
+ }
}
return 0;
}
@@ -112,7 +128,7 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
* function
* INSDC:4na:bin ALIGN:align_restore_read #1( INSDC:4na:bin ref_read, bool has_mismatch, INSDC:4na:bin mismatch, bool has_ref_offset, I32 ref_offset);
*/
-VTRANSFACT_IMPL ( ALIGN_align_restore_read, 1, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+VTRANSFACT_IMPL ( ALIGN_align_restore_read, 1, 0, 1 ) ( const void *Self, const VXfactInfo *info,
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
diff --git a/libs/axf/cigar.c b/libs/axf/cigar.c
index 1932c37..ead65c3 100644
--- a/libs/axf/cigar.c
+++ b/libs/axf/cigar.c
@@ -34,6 +34,7 @@
#include <klib/data-buffer.h>
#include <bitstr.h>
#include <sysalloc.h>
+#include <klib/printf.h>
#include <klib/out.h>
@@ -46,160 +47,368 @@
#include <insdc/insdc.h>
+#define ARG_BASE(TYPE, N) (((TYPE const *)argv[(N)].u.data.base) + argv[(N)].u.data.first_elem)
+#define ARG_ALIAS(TYPE, NAME, N) TYPE const *const NAME = ARG_BASE(TYPE, N)
+#define ARG_ALIAS_COND(TYPE, NAME, N, ALT) TYPE const *const NAME = ((argc > (N)) ? ARG_BASE(TYPE, N) : ALT)
+
typedef struct trim_self_struct {
uint8_t version;
} self_t;
static
-rc_t cigar_string(char cigar_buf[], size_t bmax, size_t *bsize, int version,
- uint8_t const has_mismatch[],
- uint8_t const has_ref_offset[],
- int32_t const ref_offset[],
- unsigned len,
- unsigned ro_len)
+rc_t op2b(KDataBuffer *dst, unsigned const offset, unsigned *const count, int const opcode, unsigned oplen)
{
- size_t bsz = 0;
- uint32_t i,roi,m,mm;
+ unsigned digits = 1;
+ unsigned scale = 10;
-#define MACRO_FLUSH_MATCH \
-if(m > 0){ \
- if(bsz > bmax - 10) /*** reserve some space for %d%c ***/ \
- return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient ); \
- bsz += sprintf(cigar_buf+bsz,"%d=",m); \
- m = 0; \
-}
+ if (oplen == 0) {
+ *count = 0;
+ return 0;
+ }
+ while (scale < oplen) {
+ scale *= 10;
+ ++digits;
+ }
+ if (scale == oplen) /* oplen is whole power of 10 */
+ ++digits;
-#define MACRO_FLUSH_MISMATCH \
-if(mm > 0){ \
- if(bsz > bmax - 10) /*** reserve some space for %d%c ***/ \
- return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient ); \
- if(i==len) bsz += sprintf(cigar_buf+bsz,"%dS",mm); \
- else bsz += sprintf(cigar_buf+bsz,"%dX",mm); \
- mm = 0; \
+ *count = digits + 1;
+
+ if (dst) {
+ unsigned const need = offset + digits + 1;
+
+ if (need > dst->elem_count) {
+ rc_t rc = KDataBufferResize(dst, need);
+ if (rc) return rc;
+ }
+ {
+ char *const base = &((char *)dst->base)[offset];
+
+ base[digits] = opcode;
+ do {
+ unsigned const digit = oplen % 10;
+
+ oplen /= 10;
+ base[--digits] = digit + '0';
+ } while (digits);
+ }
+ }
+ return 0;
}
+static
+rc_t cigar_string(KDataBuffer *dst, size_t boff, uint64_t *bsize, bool const full,
+ bool const has_mismatch[], bool const has_ref_offset[],
+ INSDC_coord_zero const read_start, INSDC_coord_zero const read_end,
+ int32_t const ref_offset[], unsigned const ro_len, unsigned *ro_offset)
+{
+ size_t bsz = 0;
+ unsigned nwrit;
+ uint32_t i,m,mm;
+ rc_t rc;
+ unsigned cur_off = ro_offset ? *ro_offset : 0;
+
+#define BUF_WRITE(OP, LEN) if ((rc = op2b(dst, bsz + boff, &nwrit, (OP), (LEN))) != 0) return rc; bsz += nwrit;
+
+#define MACRO_FLUSH_MATCH { BUF_WRITE('=', m); m = 0; }
+#define MACRO_FLUSH_MISMATCH { BUF_WRITE(i == read_end ? 'S' : 'X', mm); mm = 0; }
+
#define MACRO_FLUSH_BOTH \
if(m+mm > 0) { \
- if(i==len) { \
- if(bsz > bmax - 20) /*** reserve some space for %d%c%d%c ***/ \
- return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient ); \
- if(m > 0) bsz += sprintf(cigar_buf+bsz,"%dM",m); \
- if(mm > 0) bsz += sprintf(cigar_buf+bsz,"%dS",mm); \
+ if(i==read_end && has_ref_offset[i]) { \
+ BUF_WRITE('M', m); BUF_WRITE('S', mm); \
} else { \
- if(bsz > bmax - 10) /*** reserve some space for %d%c ***/ \
- return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient ); \
- bsz += sprintf(cigar_buf+bsz,"%dM",m+mm); \
+ BUF_WRITE('M', m + mm) \
} \
m=mm=0; \
}
#define MACRO_FLUSH \
-if(version==1){ \
+if(full){ \
MACRO_FLUSH_MATCH; \
MACRO_FLUSH_MISMATCH; \
} else { \
MACRO_FLUSH_BOTH; \
}
- for ( i = roi = bsz = m = mm = 0; i < len; ++i)
- {
+ for(i = read_start, bsz = m = mm = 0; i < read_end; i++) {
if(has_ref_offset[i]){ /*** No offset in the reference **/
- uint32_t offset;
+ int32_t offset;
- if( roi >= ro_len) /*** bad data ***/
- return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
- if( ref_offset[roi] > 0 ){ /*** insert in the reference, delete in sequence ***/
- offset = ref_offset[roi];
+ if( cur_off >= ro_len) /*** bad data ***/
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+
+ offset = ref_offset[cur_off++];
+
+ if( offset > 0 ){ /*** insert in the reference, delete in sequence ***/
if(i==0) /**** deletes in the beginning are disallowed, REF_START should have been moved and delete converted to insert **/
return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
MACRO_FLUSH;
- if(bsz > bmax - 10) /*** reserve some space for %d%c ***/
- return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient );
- bsz += sprintf(cigar_buf+bsz,"%dD",ref_offset[roi]);
- } else if ( ref_offset[roi] < 0){ /**** delete from the reference ***/
- offset = -ref_offset[roi];
- if( i + offset > len)
+ BUF_WRITE('D', offset);
+ } else if ( offset < 0){ /**** delete from the reference ***/
+ offset = -offset;
+ if( i + offset > read_end)
return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
- if(bsz > bmax - 10) /*** reserve some space for %d%c ***/
- return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient );
- if(i > 0) { /** normally indels are after the current base ***/
+ if(i > 0) { /** normally indels are before the current base ***/
MACRO_FLUSH;
- if( i + offset == len) /*** end soft clip **/
- bsz += sprintf(cigar_buf+bsz,"%dS",offset);
- else
- bsz += sprintf(cigar_buf+bsz,"%dI",offset);
+ BUF_WRITE('I', offset);
} else { /*** this is a soft clip at the beginning ***/
- m=mm=0;
- bsz += sprintf(cigar_buf+bsz,"%dS",offset);
+ BUF_WRITE('S', offset);
}
i += offset;
} else { /*** Not possible ??? ***/
return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
}
- roi++;
}
- if(has_mismatch[i]){
- if(version==1){
- MACRO_FLUSH_MATCH;
- }
- mm++;
- } else {
- if(version==1) {
- MACRO_FLUSH_MISMATCH;
+ if(i < read_end ){
+ if(has_mismatch[i]){
+ if(full) {
+ MACRO_FLUSH_MATCH;
+ }
+ mm++;
} else {
- m+=mm;
- mm=0;
+ if(full) {
+ MACRO_FLUSH_MISMATCH;
+ } else {
+ m+=mm;
+ mm=0;
+ }
+ m++;
}
- m++;
}
}
MACRO_FLUSH;
*bsize = bsz;
+ if (ro_offset) *ro_offset = cur_off;
+ return 0;
+
+#undef BUF_WRITE
+#undef MACRO_FLUSH_MATCH
+#undef MACRO_FLUSH_MISMATCH
+#undef MACRO_FLUSH_BOTH
+#undef MACRO_FLUSH
+}
+
+
+static
+rc_t cigar_string_2(KDataBuffer *dst, size_t boff, uint64_t *bsize, const int version,
+ bool const has_mismatch[], bool const has_ref_offset[],
+ INSDC_coord_zero const read_start, INSDC_coord_zero const read_end,
+ int32_t const ref_offset[], unsigned const ro_len, unsigned* ro_offset,
+ unsigned const reflen, bool use_S)
+{
+ int ri;
+ unsigned si;
+ unsigned di;
+ rc_t rc;
+ unsigned nwrit;
+ unsigned cur_off = ro_offset ? *ro_offset : 0;
+ unsigned op_len;
+ int opcode;
+ int const opM = version == 1 ? '=' : 'M';
+ int const opX = version == 1 ? 'X' : 'M';
+ int const opS = use_S ? 'S' : 'I';
+
+#define BUF_WRITE(OP, LEN) { if ((rc = op2b(dst, di + boff, &nwrit, (OP), (LEN))) != 0) return rc; di += nwrit; }
+ si=read_start;
+ if (/* !use_S && */read_start == read_end && reflen > 0) {/** full delete as a last ploidy ends up written nowhere **/
+ di=0;
+ opcode = 'D';
+ op_len = reflen;
+ }
+ else for (op_len = di = 0, opcode = ri = 0; si < read_end && ri <= (int)reflen; ) {
+ if (has_ref_offset[si]) {
+ int offs;
+
+ if(op_len > 0) {
+ BUF_WRITE(opcode, op_len);
+ op_len = 0;
+ }
+ if (cur_off >= ro_len) /*** bad data ***/
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+
+ offs = ref_offset[cur_off++];
+ if (offs < 0) {
+ unsigned j;
+ for(j=1; j<-offs && (si + j) < read_end;){
+ if(has_ref_offset[si+j]){/*** structured insert **/
+ BUF_WRITE(si ? 'I' : opS, j);
+ offs += j;
+ si += j;
+ j=1;
+ } else {
+ j++;
+ }
+ }
+ if(offs < 0){
+ BUF_WRITE(si ? 'I' : opS, -offs);
+ si -= offs;
+ }
+ continue;
+ }
+ else if (offs > 0) {
+ BUF_WRITE('D', offs);
+ ri += offs;
+ }
+ else
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+ }
+ if (ri < (int)reflen) {
+ int const op_nxt = (has_mismatch[si] ? opX : opM);
+
+ if (op_len == 0 || opcode == op_nxt)
+ ++op_len;
+ else {
+ BUF_WRITE(opcode, op_len);
+ op_len = 1;
+ }
+ opcode = op_nxt;
+ }
+ else
+ break;
+ ++si;
+ ++ri;
+ }
+ BUF_WRITE(opcode, op_len);
+ if (si < read_end){
+ if (cur_off + 1 < ro_len) {
+ assert(read_end + ref_offset[cur_off] == si);
+ cur_off++;
+ BUF_WRITE('I', read_end - si);
+ }
+ else {
+ BUF_WRITE(opS, read_end - si);
+ }
+ }
+ *bsize = di;
+ if (ro_offset) *ro_offset = cur_off;
+
return 0;
+#undef BUF_WRITE
+}
+
+static INSDC_coord_len right_soft_clip(unsigned seq_len, unsigned ref_len,
+ unsigned noffsets,
+ int32_t const ref_offset[])
+{
+ INSDC_coord_len a = ref_len;
+ unsigned i;
+
+ for (i = 0; i < noffsets; ++i)
+ a -= ref_offset[i];
+ return a < seq_len ? seq_len - a : 0;
}
static
rc_t CC cigar_impl ( void *data, const VXformInfo *info, int64_t row_id,
VRowResult *rslt, uint32_t argc, const VRowData argv [] )
{
+ self_t const *self = data;
+ unsigned const rdln = argv[0].u.data.elem_count;
+ unsigned const ro_len = argv[2].u.data.elem_count;
+ bool const *has_mismatch = argv[0].u.data.base;
+ bool const *has_ref_offset = argv[1].u.data.base;
+ int32_t const *ref_offset = argv[2].u.data.base;
rc_t rc;
- const self_t *self = data;
- uint32_t len = argv[0].u.data.elem_count;
- uint32_t ro_len = argv[2].u.data.elem_count;
- char cigar_buf[1024];
- size_t cbi;
- const uint8_t *has_mismatch = argv [ 0 ] . u . data . base;
- const uint8_t *has_ref_offset = argv [ 1 ] . u . data . base;
- const int32_t *ref_offset = argv [ 2 ] . u . data . base;
assert(argv[0].u.data.elem_bits == 8);
assert(argv[1].u.data.elem_bits == 8);
assert(argv[2].u.data.elem_bits == 32);
- assert(len == argv[1].u.data.elem_count);
+ assert(rdln == argv[1].u.data.elem_count);
- has_mismatch += argv [ 0 ] . u . data . first_elem;
- has_ref_offset += argv [ 1 ] . u . data . first_elem;
- ref_offset += argv [ 2 ] . u . data . first_elem;
+ has_mismatch += argv[0].u.data.first_elem;
+ has_ref_offset += argv[1].u.data.first_elem;
+ ref_offset += argv[2].u.data.first_elem;
- rc = cigar_string(cigar_buf, sizeof(cigar_buf), &cbi, self->version, has_mismatch, has_ref_offset, ref_offset, len, ro_len);
- if (rc) return rc;
-
- /* resize output row for the total number of reads */
- rslt -> data -> elem_bits = 8;
- rc = KDataBufferResize ( rslt -> data, cbi );
- if ( rc != 0 )
- return rc;
+ rslt->data->elem_bits = 8;
+ if (argc == 3)
+ rc = cigar_string(rslt->data, 0, &rslt->elem_count, self->version & 0x1,
+ has_mismatch, has_ref_offset,
+ 0, rdln, ref_offset, ro_len, NULL);
+ else {
+ int32_t const *const rfln = argv[3].u.data.base;
+
+ rc = cigar_string_2(rslt->data, 0, &rslt->elem_count, self->version & 0x1,
+ has_mismatch, has_ref_offset,
+ 0, rdln, ref_offset, ro_len, NULL,
+ rfln[argv[3].u.data.first_elem],true);
+ }
+ return rc;
+}
- rslt -> elem_count = cbi;
- if(cbi > 0)
- memcpy(rslt -> data -> base, cigar_buf, cbi );
+static
+rc_t CC cigar_impl_2 ( void *data, const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+ self_t const *self = data;
+ bool const *has_mismatch = argv[0].u.data.base;
+ bool const *has_ref_offset = argv[1].u.data.base;
+ int32_t const *ref_offset = argv[2].u.data.base;
+ INSDC_coord_len const *read_len = argv[3].u.data.base;
+ uint32_t const nreads = argv[3].u.data.elem_count;
+ uint32_t const ro_len = argv[2].u.data.elem_count;
+ uint32_t n;
+ uint32_t ro_offset = 0;
+ rc_t rc = 0;
+ uint64_t cnt;
+ INSDC_coord_zero start;
+ INSDC_coord_len *cigar_len;
+ KDataBuffer *buf = (self->version & 0x04) ? NULL : rslt->data;
+
+ assert(argv[0].u.data.elem_bits == 8);
+ assert(argv[1].u.data.elem_bits == 8);
+ assert(argv[2].u.data.elem_bits == 32);
+ assert(argv[3].u.data.elem_bits == 32);
+
+ has_mismatch += argv[0].u.data.first_elem;
+ has_ref_offset += argv[1].u.data.first_elem;
+ ref_offset += argv[2].u.data.first_elem;
+ read_len += argv[3].u.data.first_elem;
+
+ if( self->version & 0x4 ) {
+ rslt->data->elem_bits = sizeof(*cigar_len) * 8;
+ rslt->elem_count = nreads;
+ rc = KDataBufferResize(rslt->data, rslt->elem_count); if (rc) return rc;
+ cigar_len = rslt->data->base;
+ if (argv[0].u.data.elem_count == 0 ||
+ argv[1].u.data.elem_count == 0)
+ {
+ memset(cigar_len, 0, sizeof(cigar_len[0]) * nreads);
+ return 0;
+ }
+ }
+ else {
+ rslt->data->elem_bits = 8;
+ rslt->elem_count = 0;
+ }
+ for (n = 0, start = 0, ro_offset = 0; n < nreads; start += read_len[n++]) {
+ if (argc == 4)
+ rc = cigar_string(buf, rslt->elem_count, &cnt, self->version & 0x1,
+ has_mismatch, has_ref_offset,
+ start, start + read_len[n],
+ ref_offset, ro_len, &ro_offset);
+ else {
+ int32_t const *const reflen = argv[4].u.data.base;
+
+ rc = cigar_string_2(buf, rslt->elem_count, &cnt, self->version & 0x1,
+ has_mismatch, has_ref_offset,
+ start, start + read_len[n],
+ ref_offset, ro_len, &ro_offset,
+ reflen[argv[4].u.data.first_elem],(nreads==1));
+ }
+ if (rc) return rc;
+ if (self->version & 0x04)
+ cigar_len[n] = cnt;
+ else
+ rslt->elem_count += cnt;
+ }
return 0;
}
static
void CC self_whack( void *ptr )
{
- free( ptr );
+ free( ptr );
}
@@ -214,11 +423,11 @@ VTRANSFACT_IMPL ( ALIGN_cigar, 1, 0, 0 ) ( const void *Self, const VXfactInfo *i
self.version =cp -> argv [ 0 ] . data . u8 [ 0 ];
switch(self.version){
- case 0:
- case 1:
- break;
- default:
- return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+ case 0:
+ case 1:
+ break;
+ default:
+ return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
}
rslt->u.rf = cigar_impl;
rslt->variant = vftRow;
@@ -229,54 +438,85 @@ VTRANSFACT_IMPL ( ALIGN_cigar, 1, 0, 0 ) ( const void *Self, const VXfactInfo *i
return 0;
}
+VTRANSFACT_IMPL ( ALIGN_cigar_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ self_t self;
+ const VTypedesc* tp = &info->fdesc.desc;
+
+ self.version = cp->argv[0].data.u8[0];
+ switch(self.version) {
+ case 0x0:
+ case 0x1:
+ break;
+ default:
+ return RC(rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect);
+ }
+
+ if( tp->domain == vtdAscii && tp->intrinsic_bits == 8 ) {
+ self.version |= 0x2;
+ } else if( tp->domain == vtdUint && tp->intrinsic_bits == sizeof(INSDC_coord_len) * 8 ) {
+ self.version |= 0x4;
+ } else {
+ return RC(rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect);
+ }
+ rslt->u.rf = cigar_impl_2;
+ rslt->variant = vftRow;
+ rslt->self = malloc(sizeof self);
+ memcpy(rslt->self, &self, sizeof(self));
+ rslt->whack = self_whack;
+ return 0;
+}
+
static
rc_t CC edit_distance_impl ( void *data, const VXformInfo *info, int64_t row_id,
- VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
{
rc_t rc;
uint32_t i,roi,mrun;
uint32_t len = argv[0].u.data.elem_count;
- uint32_t ro_len = argv[2].u.data.elem_count;
uint32_t *dst;
-
- const uint8_t *has_mismatch = argv [ 0 ] . u . data . base;
- const uint8_t *has_ref_offset = argv [ 1 ] . u . data . base;
- const int32_t *ref_offset = argv [ 2 ] . u . data . base;
+
+ uint8_t const *has_mismatch = argv [ 0 ] . u . data . base;
+ uint8_t const *has_ref_offset = argv [ 1 ] . u . data . base;
+ int32_t const *ref_offset = argv [ 2 ] . u . data . base;
assert(argv[0].u.data.elem_bits == 8);
assert(argv[1].u.data.elem_bits == 8);
assert(argv[2].u.data.elem_bits == 32);
-
+
assert(len == argv[1].u.data.elem_count);
-
+
has_mismatch += argv [ 0 ] . u . data . first_elem;
has_ref_offset += argv [ 1 ] . u . data . first_elem;
ref_offset += argv [ 2 ] . u . data . first_elem;
-
+
/* resize output row for the total number of reads */
+ rslt->data->elem_bits = rslt->elem_bits;
rc = KDataBufferResize ( rslt -> data, 1);
if ( rc != 0 ) return rc;
+
rslt -> elem_count = 1;
dst = rslt -> data -> base;
dst[0]=0;
if(len == 0) return 0; /** nothing to do **/
-
+
if(has_ref_offset[0]){/** skip mismatches from the beginning == soft clip ***/
- if(ref_offset[0] > 0) /**** deletes in the beginning are disallowed, REF_START should have been moved and delete converted to insert **/
- return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
- i=-ref_offset[0];
- roi=1;
- mrun=0;
+ if(ref_offset[0] > 0) /**** deletes in the beginning are disallowed, REF_START should have been moved and delete converted to insert **/
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
+ i=-ref_offset[0];
+ roi=1;
+ mrun=0;
} else {
- i=roi=0;
+ i=roi=0;
}
for(mrun=0;i<len;i++){
- if(has_mismatch[i]){
- mrun++;
- } else {/*** intentionally skipping last run of mismatches **/
- dst[0]+=mrun;
- mrun=0;
- }
+ if(has_mismatch[i]){
+ mrun++;
+ } else {/*** intentionally skipping last run of mismatches **/
+ dst[0]+=mrun;
+ mrun=0;
+ }
}
return 0;
}
@@ -295,7 +535,139 @@ VTRANSFACT_IMPL ( NCBI_align_edit_distance, 1, 0, 0 ) ( const void *Self, const
/*
- * function bool ALIGN:generate_has_mismatch #1 (INSDC:4na:bin reference,INSDC:4na:bin subject, bool has_ref_offset, I32 ref_offset);
+ * edit distance = sum of lengths of inserts
+ * + sum of lengths of deletes
+ * + number of mismatches
+ * excluding soft clips
+ */
+
+unsigned edit_distance(bool const has_ref_offset[],
+ bool const has_mismatch[],
+ unsigned const readlen,
+ unsigned const reflen,
+ int32_t const ref_offset[],
+ unsigned const offsets)
+{
+ if (readlen == 0) {
+ /* full delete */
+ return reflen;
+ }
+ else {
+ INSDC_coord_len const rsc = right_soft_clip(readlen, reflen, offsets, ref_offset);
+ unsigned indels = 0;
+ unsigned misses = 0;
+ unsigned i = 0;
+ unsigned j = 0;
+
+ if (has_ref_offset[0] && ref_offset[j] < 0)
+ j = i = 1;
+
+ /* sum of insert lengths + sum of delete lengths excluding soft clips */
+ for ( ; i < readlen - rsc; ++i) {
+ if (has_ref_offset[i]) {
+ int const offset = ref_offset[j++];
+
+ if (offset < 0)
+ indels += -offset;
+ else
+ indels += offset;
+ }
+ }
+ /* sum of mismatches not in inserts or soft clips */
+ for (j = i = 0; i < readlen - rsc;) {
+ if (has_ref_offset[i]) {
+ int offset = ref_offset[j++];
+
+ if (offset < 0) {
+ i += -offset;
+ continue;
+ }
+ }
+ misses += has_mismatch[i] ? 1 : 0;
+ ++i;
+ }
+ return indels + misses;
+ }
+}
+
+static
+rc_t CC edit_distance_2_impl ( void *data, const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ unsigned const nreads = argc > 4 ? argv[4].u.data.elem_count : 1;
+ unsigned const len = argv[0].u.data.elem_count;
+ unsigned const noffsets = argv[2].u.data.elem_count;
+ INSDC_coord_len const dummy_rl = len;
+
+ ARG_ALIAS (bool , has_mismatch , 0);
+ ARG_ALIAS (bool , has_ref_offset, 1);
+ ARG_ALIAS (int32_t , ref_offset , 2);
+ ARG_ALIAS (INSDC_coord_len, ref_len , 3);
+ ARG_ALIAS_COND(INSDC_coord_len, readlen , 4, &dummy_rl);
+
+ assert(argv[0].u.data.elem_bits == sizeof(has_mismatch [0]) * 8);
+ assert(argv[1].u.data.elem_bits == sizeof(has_ref_offset[0]) * 8);
+ assert(argv[2].u.data.elem_bits == sizeof(ref_offset [0]) * 8);
+ assert(argv[3].u.data.elem_bits == sizeof(ref_len [0]) * 8);
+
+ rslt->data->elem_bits = rslt->elem_bits;
+ if (len == 0) {
+ return KDataBufferResize(rslt->data, rslt->elem_count = 0);
+ }
+
+ assert(len == argv[1].u.data.elem_count);
+
+ rslt->elem_count = nreads;
+ rc = KDataBufferResize(rslt->data, nreads);
+ if (rc == 0) {
+ unsigned i;
+ unsigned start = 0;
+ unsigned offset = 0;
+ uint32_t *const dst = rslt->data->base;
+
+ for (i = 0; i < nreads; ++i) {
+ unsigned const rlen = readlen[i];
+ unsigned j;
+ unsigned offsets = 0;
+
+ for (j = 0; j < rlen; ++j) {
+ if (has_ref_offset[start + j])
+ ++offsets;
+ }
+ if (offsets + offset > noffsets)
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+
+ dst[i] = edit_distance(has_ref_offset + start,
+ has_mismatch + start,
+ rlen,
+ ref_len[0],
+ ref_offset + offset,
+ offsets);
+ start += rlen;
+ offset += offsets;
+ }
+ }
+ return rc;
+}
+
+/*
+ * function
+ * U32 NCBI:align:edit_distance #2 ( bool has_mismatch, bool has_ref_offset,
+ * I32 ref_offset, INSDC:coord:len ref_len );
+ */
+VTRANSFACT_IMPL ( NCBI_align_edit_distance_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rslt->u.rf = edit_distance_2_impl;
+ rslt->variant = vftRow;
+ return 0;
+}
+
+
+/*
+ * function bool ALIGN:generate_has_mismatch #1 (INSDC:4na:bin reference,
+ * INSDC:4na:bin subject, bool has_ref_offset, I32 ref_offset);
*/
static
rc_t CC generate_has_mismatch_impl ( void *data, const VXformInfo *info, int64_t row_id,
@@ -313,9 +685,17 @@ rc_t CC generate_has_mismatch_impl ( void *data, const VXformInfo *info, int64_t
const int32_t *ref_offset = argv [ 3 ] . u . data . base;
uint8_t * dst;
- uint32_t len;
+ uint32_t len = 0;
- assert(sbj_len == hro_len );
+ rslt -> data -> elem_bits = 8;
+ if (sbj_len == 0) {
+ rc = KDataBufferResize ( rslt -> data, 0 );
+ if ( rc != 0 )
+ return rc;
+ rslt -> elem_count = 0;
+ return 0;
+ }
+ assert(sbj_len == hro_len);
len = sbj_len;
ref += argv [ 0 ] . u . data . first_elem;
@@ -331,16 +711,16 @@ rc_t CC generate_has_mismatch_impl ( void *data, const VXformInfo *info, int64_t
rslt -> elem_count = len;
dst = rslt -> data->base;
for(si=ri=roi=0;si< len;si++,ri++){
- if(has_ref_offset[si] != 0){/*** need to offset the reference ***/
- if( roi >= ro_len){
- return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
- }
- ri += ref_offset[roi];
- }
- if(ri >=0 && ri < ref_len && (sbj[si]&ref[ri])!=0)
- dst[si]=0;
- else
- dst[si]=1;
+ if(has_ref_offset[si] != 0){/*** need to offset the reference ***/
+ if( roi >= ro_len){
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
+ }
+ ri += ref_offset[roi++];
+ }
+ if(ri >=0 && ri < ref_len && sbj[si]==ref[ri])
+ dst[si]=0;
+ else
+ dst[si]=1;
}
return 0;
}
@@ -357,7 +737,7 @@ VTRANSFACT_IMPL ( ALIGN_generate_has_mismatch, 1, 0, 0 ) ( const void *Self, con
}
/*
- * function bool ALIGN:generate_has_mismatch #1 (INSDC:4na:bin reference,INSDC:4na:bin subject, bool has_ref_offset, I32 ref_offset);
+ * function bool ALIGN:generate_mismatch #1 (INSDC:4na:bin reference,INSDC:4na:bin subject, bool has_ref_offset, I32 ref_offset);
*/
static
rc_t CC generate_mismatch_impl ( void *data, const VXformInfo *info, int64_t row_id,
@@ -376,6 +756,10 @@ rc_t CC generate_mismatch_impl ( void *data, const VXformInfo *info, int64_t row
uint8_t buf[5*1024];
uint32_t len;
+ rslt -> data -> elem_bits = 8;
+ if (sbj_len == 0) {
+ return KDataBufferResize(rslt->data, rslt->elem_count = 0);
+ }
assert(sbj_len == hro_len );
ref += argv [ 0 ] . u . data . first_elem;
@@ -384,20 +768,19 @@ rc_t CC generate_mismatch_impl ( void *data, const VXformInfo *info, int64_t row
ref_offset += argv [ 3 ] . u . data . first_elem;
for(si=ri=roi=0,len=0;si<sbj_len;si++,ri++){
- if(has_ref_offset[si] != 0){/*** need to offset the reference ***/
- if( roi >= ro_len){
- return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
- }
- ri += ref_offset[roi];
- }
- if(ri >=0 && ri < ref_len && (sbj[si]&ref[ri])!=0){/*noop*/}
- else {
- if(len > sizeof(buf)) return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient);
- buf[len++]=sbj[si];
- }
+ if(has_ref_offset[si] != 0){/*** need to offset the reference ***/
+ if( roi >= ro_len){
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
+ }
+ ri += ref_offset[roi++];
+ }
+ if(ri >=0 && ri < ref_len && sbj[si]==ref[ri]){/*noop*/}
+ else {
+ if(len > sizeof(buf)) return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient);
+ buf[len++]=sbj[si];
+ }
}
/* resize output row for the total number of reads */
- rslt -> data -> elem_bits = 8;
rc = KDataBufferResize ( rslt -> data, len );
if ( rc != 0 )
return rc;
@@ -434,9 +817,9 @@ rc_t CC generate_mismatch_qual_impl ( void *data, const VXformInfo *info, int64_
q += argv[0].u.data.first_elem;
h_mm += argv[1].u.data.first_elem;
for(mm_cnt=0,i=0;i<argv[0].u.data.elem_count;i++){
- if(h_mm[i]){
- buf[mm_cnt++]=q[i];
- }
+ if(h_mm[i]){
+ buf[mm_cnt++]=q[i];
+ }
}
/* resize output row for the total number of reads */
rslt -> data -> elem_bits = 8;
@@ -544,6 +927,61 @@ rc_t CC left_soft_clip_impl ( void *data, const VXformInfo *info, int64_t row_id
return rc;
}
+static
+rc_t CC left_soft_clip_impl_2 ( void *data, const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ INSDC_coord_len* result;
+ const bool* has_ref_offset = argv[0].u.data.base;
+ const int32_t* ref_offset = argv[1].u.data.base;
+ const uint64_t n_offsets = argv[1].u.data.elem_count;
+ const INSDC_coord_len* read_len = argv[2].u.data.base;
+ const uint32_t nreads = argv[2].u.data.elem_count;
+ uint32_t n, roi;
+ INSDC_coord_zero start;
+
+ assert(argv[0].u.data.elem_bits == sizeof(has_ref_offset[0]) * 8);
+ assert(argv[1].u.data.elem_bits == sizeof(ref_offset[0]) * 8);
+ assert(argv[2].u.data.elem_bits == sizeof(read_len[0]) * 8);
+
+ has_ref_offset += argv[0].u.data.first_elem;
+ ref_offset += argv[1].u.data.first_elem;
+ read_len += argv[2].u.data.first_elem;
+
+ rslt->data->elem_bits = sizeof(*result) * 8;
+ rslt->elem_count = nreads;
+ rc = KDataBufferResize(rslt->data, rslt->elem_count);
+ result = rslt->data->base;
+
+ for(n = roi = start = 0; rc == 0 && n < nreads; start += read_len[n++]) {
+ if(has_ref_offset[start] && ref_offset[roi] < 0) {
+ if( roi >= n_offsets ) {
+ rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+ break;
+ }
+ result[n] = -ref_offset[roi];
+ } else {
+ result[n] = 0;
+ }
+ if( n < nreads - 1 && roi < n_offsets ) {
+ /* scroll through has_ref_offset and consume ref_offsets for this read
+ only if there is next read or more offsets */
+ uint32_t k;
+ for(k = start; k < start + read_len[n]; k++) {
+ if( has_ref_offset[k] ) {
+ if( roi >= n_offsets ) {
+ rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+ break;
+ }
+ roi++;
+ }
+ }
+ }
+ }
+ return rc;
+}
+
VTRANSFACT_IMPL ( NCBI_align_get_left_soft_clip, 1, 0, 0 ) ( const void *Self, const VXfactInfo *info,
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
@@ -554,7 +992,15 @@ VTRANSFACT_IMPL ( NCBI_align_get_left_soft_clip, 1, 0, 0 ) ( const void *Self, c
return 0;
}
-
+VTRANSFACT_IMPL ( NCBI_align_get_left_soft_clip_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rslt->u.rf = left_soft_clip_impl_2;
+ rslt->variant = vftRow;
+ rslt -> self = NULL;
+ rslt -> whack = NULL;
+ return 0;
+}
/*
* function INSDC:coord:len NCBI:align:get_right_soft_clip #1 (
@@ -571,38 +1017,41 @@ rc_t CC right_soft_clip_impl ( void *data, const VXformInfo *info, int64_t row_i
bool const *has_mismatch = argv[0].u.data.base;
bool const *has_ref_offset = NULL;
int32_t last_ref_offset = 0;
-
+
assert(argv[0].u.data.elem_bits == sizeof(has_mismatch[0]) * 8);
has_mismatch += argv[0].u.data.first_elem;
-
+
if( argc > 2 ) {
has_ref_offset = argv[2].u.data.base;
has_ref_offset += argv[2].u.data.first_elem;
- if(argc > 3 ) {
- int32_t *ro = argv[3].u.data.base;
- ro += argv[3].u.data.first_elem;
- if(argv[3].u.data.elem_count > 0){
- last_ref_offset = ro[argv[3].u.data.elem_count-1];
- }
- }
+ if(argc > 3 ) {
+ const int32_t *ro = argv[3].u.data.base;
+ ro += argv[3].u.data.first_elem;
+ if(argv[3].u.data.elem_count > 0){
+ last_ref_offset = ro[argv[3].u.data.elem_count-1];
+ }
+ }
}
-
+
assert(argv[1].u.data.elem_bits == sizeof(left) * 8);
left = ((INSDC_coord_len const *)argv[1].u.data.base)[argv[1].u.data.first_elem];
while (right != left && has_mismatch[right - 1] &&
- (has_ref_offset == NULL || has_ref_offset[right - 1] == 0) ) {
+ (has_ref_offset == NULL || has_ref_offset[right - 1] == 0) )
+ {
++result;
--right;
}
- while(right > 0 && has_ref_offset[right - 1] == 0 && last_ref_offset <0){ /*** some mismatches from left needs to be recovered to cover for inserts **/
- last_ref_offset++;
- right--;
+ while(right > 0 && last_ref_offset <0 && has_ref_offset[right - 1] == 0){ /*** some mismatches from left needs to be recovered to cover for inserts **/
+ last_ref_offset++;
+ right--;
}
if(last_ref_offset < -1 ){
- last_ref_offset ++;
- if(result < -last_ref_offset) result=0;
- else result += last_ref_offset;
+ last_ref_offset ++;
+ if(result < -last_ref_offset) result=0;
+ else result += last_ref_offset;
+ } else if (last_ref_offset > 0){
+ result += last_ref_offset;
}
rslt->data->elem_bits = sizeof(result) * 8;
@@ -622,6 +1071,7 @@ VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip, 1, 0, 0 ) ( const void *Self,
rslt -> whack = NULL;
return 0;
}
+
VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
@@ -633,7 +1083,111 @@ VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip_2, 2, 0, 0 ) ( const void *Self
}
+/*
+ * function INSDC:coord:len NCBI:align:get_right_soft_clip #3
+ * ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len ref_len )
+ */
+static
+rc_t CC right_soft_clip_3_impl ( void *data, const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ INSDC_coord_len const ref_len = ((INSDC_coord_len const *)argv[2].u.data.base)[argv[2].u.data.first_elem];
+ unsigned const seq_len = argv[0].u.data.elem_count;
+ int32_t const *ref_offset = &((int32_t const *)argv[1].u.data.base)[argv[1].u.data.first_elem];
+ unsigned const n = argv[1].u.data.elem_count;
+
+ assert(argv[1].u.data.elem_bits == sizeof(ref_offset [0]) * 8);
+ assert(argv[2].u.data.elem_bits == sizeof(ref_len ) * 8);
+
+ rslt->data->elem_bits = rslt->elem_bits;
+ rslt->elem_count = 1;
+ rc = KDataBufferResize(rslt->data, 1);
+ if (rc == 0)
+ ((INSDC_coord_len *)rslt->data->base)[0] = right_soft_clip(seq_len, ref_len, n, ref_offset);
+ return rc;
+}
+
+VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip_3, 3, 0, 0 )
+ ( const void *Self, const VXfactInfo *info, VFuncDesc *rslt,
+ const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rslt->u.rf = right_soft_clip_3_impl;
+ rslt->variant = vftRow;
+ rslt -> self = NULL;
+ rslt -> whack = NULL;
+ return 0;
+}
+
+static
+rc_t CC right_soft_clip_4_impl ( void *data, const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ INSDC_coord_len* result;
+ const bool* has_ref_offset = argv[0].u.data.base;
+ const int32_t* ref_offset = argv[1].u.data.base;
+ const uint64_t n_offsets = argv[1].u.data.elem_count;
+ const INSDC_coord_len* read_len = argv[2].u.data.base;
+ const uint32_t nreads = argv[2].u.data.elem_count;
+ const INSDC_coord_len* ref_len = argv[3].u.data.base;
+ uint32_t n, roi;
+ INSDC_coord_zero start;
+
+ assert(argv[0].u.data.elem_bits == sizeof(has_ref_offset[0]) * 8);
+ assert(argv[1].u.data.elem_bits == sizeof(ref_offset[0]) * 8);
+ assert(argv[2].u.data.elem_bits == sizeof(read_len[0]) * 8);
+ assert(argv[3].u.data.elem_bits == sizeof(ref_len[0]) * 8);
+ assert(argv[3].u.data.elem_count == 1);
+
+ has_ref_offset += argv[0].u.data.first_elem;
+ ref_offset += argv[1].u.data.first_elem;
+ read_len += argv[2].u.data.first_elem;
+ ref_len += argv[3].u.data.first_elem;
+
+ rslt->data->elem_bits = sizeof(*result) * 8;
+ rslt->elem_count = nreads;
+ rc = KDataBufferResize(rslt->data, rslt->elem_count);
+ result = rslt->data->base;
+
+ for(n = roi = start = 0; rc == 0 && n < nreads; ++n) {
+ INSDC_coord_len const rlen = read_len[n];
+ unsigned k;
+ unsigned offset_count;
+
+ for (k = offset_count = 0; k < rlen; ++k) {
+ if (has_ref_offset[k + start])
+ ++offset_count;
+ }
+ result[n] = right_soft_clip(rlen, ref_len[0], offset_count, ref_offset);
+ ref_offset += offset_count;
+ start += rlen;
+#if 0
+ result[n] = read_len[n] - ref_len[0];
+ for(k = start; k < start + read_len[n]; k++) {
+ if( has_ref_offset[k] ) {
+ if( roi >= n_offsets ) {
+ rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+ break;
+ }
+ result[n] += ref_offset[roi++];
+ }
+ }
+#endif
+ }
+ return rc;
+}
+VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip_4, 4, 0, 0 )
+ ( const void *Self, const VXfactInfo *info, VFuncDesc *rslt,
+ const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rslt->u.rf = right_soft_clip_4_impl;
+ rslt->variant = vftRow;
+ rslt -> self = NULL;
+ rslt -> whack = NULL;
+ return 0;
+}
/*
* function ascii NCBI:align:get_clipped_cigar #1 ( ascii cigar )
@@ -674,6 +1228,71 @@ rc_t CC clipped_cigar_impl ( void *data, const VXformInfo *info, int64_t row_id,
return rc;
}
+static
+rc_t CC clipped_cigar_impl_v2 ( void *data, const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc = 0;
+ const char* cigar = argv[0].u.data.base;
+ const INSDC_coord_len* cigar_len = argv[1].u.data.base;
+ const uint32_t nreads = argv[1].u.data.elem_count;
+ INSDC_coord_len* new_cigar_len;
+ uint32_t n;
+ INSDC_coord_zero rstart;
+
+ assert(argv[0].u.data.elem_bits == sizeof(*cigar) * 8);
+ assert(argv[1].u.data.elem_bits == sizeof(*cigar_len) * 8);
+
+ if (argv[0].u.data.elem_count == 0) {
+ return KDataBufferResize(rslt->data, rslt->elem_count = 0);
+ }
+
+ cigar += argv[0].u.data.first_elem;
+ cigar_len += argv[1].u.data.first_elem;
+
+ if( data != NULL ) {
+ rslt->data->elem_bits = sizeof(*cigar_len) * 8;
+ rslt->elem_count = nreads;
+ rc = KDataBufferResize(rslt->data, rslt->elem_count);
+ new_cigar_len = rslt->data->base;
+ } else {
+ rslt->elem_count = 0;
+ rslt->data->elem_bits = sizeof(*cigar) * 8;
+ }
+ for(n = rstart = 0; n < nreads; rstart += cigar_len[n++]) {
+ INSDC_coord_zero i = rstart, start = rstart;
+ INSDC_coord_zero end = start + cigar_len[n];
+
+ /* drop all \d+S groups at head */
+ while(i < end) {
+ if(cigar[i] == 'S') {
+ start = i + 1;
+ } else if( !isdigit(cigar[i]) ) {
+ break;
+ }
+ i++;
+ }
+ /* drop all \d+S groups at tail */
+ while(end > start) {
+ end--;
+ if(cigar[end] != 'S' && !isdigit(cigar[end]) ) {
+ break;
+ }
+ }
+ if( data == NULL ) {
+ int64_t x = end - start + 1;
+ if( x > 0 && (rc = KDataBufferResize(rslt->data, rslt->elem_count + x)) == 0 ) {
+ char* b = rslt->data->base;
+ memcpy(&b[rslt->elem_count], &cigar[start], x);
+ rslt->elem_count += x;
+ }
+ } else {
+ new_cigar_len[n] = end - start + 1;
+ }
+ }
+ return rc;
+}
+
VTRANSFACT_IMPL ( NCBI_align_get_clipped_cigar, 1, 0, 0 ) ( const void *Self, const VXfactInfo *info,
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
@@ -684,6 +1303,24 @@ VTRANSFACT_IMPL ( NCBI_align_get_clipped_cigar, 1, 0, 0 ) ( const void *Self, co
return 0;
}
+VTRANSFACT_IMPL ( NCBI_align_get_clipped_cigar_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ const VTypedesc* tp = &info->fdesc.desc;
+
+ if( tp->domain == vtdAscii && tp->intrinsic_bits == 8 ) {
+ rslt->self = NULL;
+ } else if( tp->domain == vtdUint && tp->intrinsic_bits == sizeof(INSDC_coord_len) * 8 ) {
+ rslt->self = rslt; /* something different from NULL :) */
+ } else {
+ return RC(rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect);
+ }
+ rslt->u.rf = clipped_cigar_impl_v2;
+ rslt->variant = vftRow;
+ rslt->whack = NULL;
+ return 0;
+}
+
/*
@@ -740,31 +1377,67 @@ rc_t CC get_ref_len_impl ( void *data, const VXformInfo *info, int64_t row_id,
VRowResult *rslt, uint32_t argc, const VRowData argv [] )
{
rc_t rc;
- INSDC_coord_len result;
+ INSDC_coord_len result,right=0;
+
+ unsigned const read_len = argv[0].u.data.elem_count;
unsigned const n_offsets = argv[1].u.data.elem_count;
- INSDC_coord_len const *right = argv[2].u.data.base;
+ bool const *hro = argv[0].u.data.base;
int32_t const *ref_offset = argv[1].u.data.base;
- int32_t sum;
- unsigned i;
- assert(argv[2].u.data.elem_bits == sizeof(right[0]) * 8);
- assert(argv[0].u.data.elem_count >= right[argv[2].u.data.first_elem]);
assert(argv[1].u.data.elem_bits == sizeof(ref_offset[0]) * 8);
-
- ref_offset += argv[1].u.data.first_elem;
- result = argv[0].u.data.elem_count - right[argv[2].u.data.first_elem];
- for (sum = 0, i = 0; i != n_offsets; ++i) {
- sum += ref_offset[i];
+ hro += argv[0].u.data.first_elem;
+ ref_offset += argv[1].u.data.first_elem;
+
+ if( argc > 2 ) {
+ right = ((INSDC_coord_len*)argv[2].u.data.base)[argv[2].u.data.first_elem];
+
+ assert(argv[2].u.data.elem_bits == sizeof(right) * 8);
+ assert(read_len >= right);
+ }
+ if( n_offsets == 0){
+ if(read_len < right) return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+ result = read_len - right;
+ } else {
+ int32_t ires, rov;
+ unsigned i;
+
+ if(argc > 2){/*** clipping ***/
+ for(i=0,ires=read_len - right;i<n_offsets;i++){
+ memcpy( & rov, ref_offset + i, sizeof rov );
+ ires += rov;
+ }
+ } else {
+ int32_t sum_pos,sum_neg;
+ for(i=0,sum_pos=sum_neg=0;i<n_offsets;i++){
+ memcpy( & rov, ref_offset + i, sizeof rov );
+ if (rov > 0) sum_pos += rov;
+ else sum_neg += rov;
+ }
+ if(sum_pos + sum_neg >= 0){/** all offsets may not over-shorten needed reference ***/
+ ires = read_len + sum_pos + sum_neg;
+ } else { /** inefficient case - exact reach into the reference is needed **/
+ unsigned j;
+ for(i=0,j=0,sum_pos=0,ires=0;j<read_len; j++){
+ if(hro[i]){
+ if(i >= n_offsets) return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+ memcpy( & rov, ref_offset + i, sizeof rov );
+ ires += rov;
+ i++;
+ }
+ sum_pos ++;
+ if(sum_pos > ires) ires=sum_pos;
+ }
+ }
+ }
+ if(ires < 0) return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+ result=ires;
}
- assert((int32_t)result >= -sum);
- result += sum;
-
rslt->data->elem_bits = sizeof(result) * 8;
rslt->elem_count = 1;
rc = KDataBufferResize(rslt->data, rslt->elem_count);
if (rc == 0)
- memcpy(rslt->data->base, &result, sizeof(result));
+ memcpy(rslt->data->base,&result,sizeof(result));
return rc;
}
@@ -793,7 +1466,10 @@ rc_t CC clip_impl ( void *data, const VXformInfo *info, int64_t row_id,
INSDC_coord_len right = ((INSDC_coord_len const *)argv[2].u.data.base)[argv[2].u.data.first_elem];
rslt->data->elem_bits = argv[0].u.data.elem_bits;
- rslt->elem_count = argv[0].u.data.elem_count - left - right;
+ if (argv[0].u.data.elem_count >= left + right)
+ rslt->elem_count = argv[0].u.data.elem_count - left - right;
+ else
+ rslt->elem_count = 0;
rc = KDataBufferResize(rslt->data, rslt->elem_count);
if (rc == 0) {
if ((rslt->data->elem_bits & 7) == 0)
@@ -818,7 +1494,62 @@ VTRANSFACT_IMPL ( NCBI_align_clip, 1, 0, 0 ) ( const void *Self, const VXfactInf
return 0;
}
+static
+rc_t CC clip_impl_2 ( void *data, const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ const INSDC_coord_len* read_len = argv[1].u.data.base;
+ const uint32_t nreads = argv[1].u.data.elem_count;
+ const INSDC_coord_len* left = argv[2].u.data.base;
+ const INSDC_coord_len* right = argv[3].u.data.base;
+ uint32_t n;
+ INSDC_coord_zero start;
+
+ assert(argv[1].u.data.elem_count == argv[2].u.data.elem_count);
+ assert(argv[1].u.data.elem_count == argv[3].u.data.elem_count);
+ assert(argv[1].u.data.elem_bits == sizeof(read_len[0]) * 8);
+ assert(argv[2].u.data.elem_bits == sizeof(left[0]) * 8);
+ assert(argv[2].u.data.elem_bits == sizeof(right[0]) * 8);
+
+ read_len += argv[1].u.data.first_elem;
+ left += argv[2].u.data.first_elem;
+ right += argv[3].u.data.first_elem;
+ rslt->data->elem_bits = argv[0].u.data.elem_bits;
+ rslt->elem_count = 0;
+ rc = KDataBufferResize(rslt->data, rslt->elem_count);
+ if (rc)
+ return rc;
+ if (argv[0].u.data.elem_count == 0)
+ return 0;
+
+ for(n = start = 0; rc == 0 && n < nreads; start += read_len[n++]) {
+ uint64_t x = left[n] + right[n];
+ assert(argv[0].u.data.elem_count >= start);
+ assert(argv[0].u.data.elem_count >= start + read_len[n]);
+ if( read_len[n] > x ) {
+ x = read_len[n] - x;
+ if( x > 0 && (rc = KDataBufferResize(rslt->data, rslt->elem_count + x)) == 0) {
+ bitcpy(rslt->data->base, rslt->elem_count * argv[0].u.data.elem_bits,
+ argv[0].u.data.base, (argv[0].u.data.first_elem + start + left[n]) * argv[0].u.data.elem_bits,
+ x * rslt->data->elem_bits);
+ rslt->elem_count += x;
+ }
+ }
+ }
+ return rc;
+}
+
+VTRANSFACT_IMPL ( NCBI_align_clip_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rslt->u.rf = clip_impl_2;
+ rslt->variant = vftRow;
+ rslt -> self = NULL;
+ rslt -> whack = NULL;
+ return 0;
+}
/*
* function bool NCBI:align:get_ref_mismatch #1
diff --git a/libs/axf/get-sam-flags.c b/libs/axf/get-sam-flags.c
index c69066b..4d6574f 100644
--- a/libs/axf/get-sam-flags.c
+++ b/libs/axf/get-sam-flags.c
@@ -41,6 +41,13 @@
#include <ctype.h>
#include <assert.h>
+
+/* "properly aligned" fragments according to the aligner
+ may mean minimally that the fragments are on the same
+ chromosome. */
+#define PROPER_ALIGNED_MEANS_SAME_CHROMOSOME 1
+
+
static
rc_t CC get_sam_flags_impl(void *data, const VXformInfo *info,
int64_t row_id, VRowResult *rslt,
@@ -49,14 +56,14 @@ rc_t CC get_sam_flags_impl(void *data, const VXformInfo *info,
{
rc_t rc;
int32_t *dst;
- const INSDC_coord_one *rid = argv[1].u.data.base;
- const int32_t *tlen = argv[2].u.data.base;
- const bool *ro1 = argv[3].u.data.base;
- const bool *ro2 = argv[4].u.data.base;
- const bool *sec = argv[5].u.data.base;
+ const INSDC_coord_one *rid = argv[1].u.data.base; /* SEQ_READ_ID */
+ const int32_t *tlen = argv[2].u.data.base; /* TEMPLATE_LEN */
+ const bool *ro1 = argv[3].u.data.base; /* REF_ORIENTATION */
+ const bool *ro2 = argv[4].u.data.base; /* MATE_REF_ORIENTATION */
+ const bool *sec = argv[5].u.data.base;
+ const bool mate_present = (argv[4].u.data.elem_count > 0 );
const SRAReadFilter *flt = argc > 6 ? argv[6].u.data.base : NULL;
- assert(nreads > 0);
assert(argv[1].u.data.elem_count == 1);
assert(argv[2].u.data.elem_count == 1);
assert(argv[3].u.data.elem_count == 1);
@@ -65,10 +72,12 @@ rc_t CC get_sam_flags_impl(void *data, const VXformInfo *info,
rc = KDataBufferResize(rslt->data, 1);
- if(rc != 0) return rc;
+ if(rc != 0)
+ return rc;
rslt->elem_count=1;
dst = rslt->data->base;
dst[0]=0;
+ if(nreads == 0) return 0;
rid += argv[1].u.data.first_elem;
@@ -80,34 +89,47 @@ rc_t CC get_sam_flags_impl(void *data, const VXformInfo *info,
flt += argv[6].u.data.first_elem;
/***************** SAM FLAGS************
- Bit Description
- 0x1 template having multiple fragments in sequencing
- 0x2 each fragment properly aligned according to the aligner
- 0x4 fragment unmapped
- 0x8 next fragment in the template unmapped
- 0x10 SEQ being reverse complemented
- 0x20 SEQ of the next fragment in the template being reversed
- 0x40 the first fragment in the template
- 0x80 the last fragment in the template
+ Bit Description
+ 0x001 template having multiple fragments in sequencing
+ 0x002 each fragment properly aligned according to the aligner
+ 0x004 fragment unmapped
+ 0x008 next fragment in the template unmapped
+ 0x010 SEQ being reverse complemented
+ 0x020 SEQ of the next fragment in the template being reversed
+ 0x040 the first fragment in the template
+ 0x080 the last fragment in the template
0x100 secondary alignment
0x200 not passing quality controls
0x400 PCR or optical duplicate
****************************/
- if(ro1[0]) dst[0] |= 0x10;
- if(sec[0]) dst[0] |= 0x100;
+ if(ro1[0])
+ dst[0] |= 0x10;
+ if(sec[0])
+ dst[0] |= 0x100;
if(nreads > 1) {
- if(rid[0] == 1) dst[0] |= 0x40;
- if (rid[0] == nreads) dst[0] |= 0x80;
+ if(rid[0] == 1)
+ dst[0] |= 0x40;
+ if (rid[0] == nreads)
+ dst[0] |= 0x80;
dst[0] |= 0x1;
- if(tlen[0] != 0 ){
- dst[0] |= 0x2;
- if(ro2[0]) dst[0] |= 0x20;
+ if(mate_present) {
+#if PROPER_ALIGNED_MEANS_SAME_CHROMOSOME
+ if( tlen[0] != 0 )
+#endif
+ dst[0] |= 0x2;
+ if(ro2[0])
+ dst[0] |= 0x20;
} else {
dst[0] |= 0x8;
}
}
- if (flt && flt[0] == SRA_READ_FILTER_CRITERIA)
- dst[0] |= 0x400;
+ if( flt ) {
+ if( flt[0] == SRA_READ_FILTER_REJECT ) {
+ dst[0] |= 0x200;
+ } else if( flt[0] == SRA_READ_FILTER_CRITERIA ) {
+ dst[0] |= 0x400;
+ }
+ }
return rc;
}
@@ -120,11 +142,15 @@ rc_t CC get_sam_flags_impl_v1(void *data,const VXformInfo *info, int64_t row_id,
assert(argv[0].u.data.elem_bits == sizeof(read_len[0]) * 8);
read_len += argv[0].u.data.first_elem;
-
- for (i = 0; i != argv[0].u.data.elem_count; ++i) {
+
+#if 1
+ for (i = 0, nreads = 0; i != argv[0].u.data.elem_count; ++i) {
if (read_len[i] != 0)
++nreads;
}
+#else
+ nreads = argv[0].u.data.elem_count;
+#endif
return get_sam_flags_impl(data, info, row_id, rslt, nreads, argc, argv);
}
diff --git a/libs/axf/get_mate_align_ids.c b/libs/axf/get_mate_align_ids.c
new file mode 100644
index 0000000..d96e65d
--- /dev/null
+++ b/libs/axf/get_mate_align_ids.c
@@ -0,0 +1,271 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+
+#include <kdb/meta.h>
+
+#include <klib/rc.h>
+#include <klib/data-buffer.h>
+#include <klib/sort.h>
+#include <klib/vector.h>
+
+#include <insdc/sra.h>
+#include <insdc/insdc.h>
+
+#include <bitstr.h>
+#include <sysalloc.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+
+typedef struct ID_cache_t
+{
+ uint32_t idx;
+ VCursor const *curs;
+ KVector *j_cache;
+ KVector *p_cache;
+}ID_cache_t;
+
+#define MIN_DIFF_TO_CACHE 10000
+#define TMP_CACHE_PAGESIZE (16*1024)
+
+
+static rc_t lookup_mate(ID_cache_t *const self, int64_t const id, int64_t *mateid)
+{
+ return KVectorGetI64(self->j_cache, (uint64_t)id,mateid);
+}
+
+static rc_t cache_mate(ID_cache_t *self, int64_t id, int64_t mateid)
+{
+ return KVectorSetU64(self->j_cache, (uint64_t)id, mateid);
+}
+
+static rc_t fetch_mates(ID_cache_t *self, int64_t spotid, const int64_t **ids,uint32_t *rlen)
+{
+ rc_t rc = 0;
+ uint32_t elem_bits;
+ uint32_t boff;
+
+ rc = VCursorCellDataDirect(self->curs, spotid, self->idx,&elem_bits, (const void**) ids, &boff, rlen);
+ assert(*rlen==0 || elem_bits==64);
+ assert(boff==0);
+ return rc;
+}
+static rc_t fetch_mate_id(ID_cache_t *self, int64_t spotid, int64_t const id, int64_t *mateid)
+{
+ rc_t rc = 0;
+ uint32_t rlen;
+ int i;
+ const int64_t *base;
+
+
+
+ rc = fetch_mates(self, spotid,&base,&rlen);
+ if(rc) return rc;
+ if (rlen > 2) return RC(rcXF, rcFunction, rcExecuting, rcConstraint, rcViolated);
+ mateid[0]=0;
+ for(i=0;i<rlen;i++){
+ if(base[i] != id) {
+ mateid[0] = base[i];
+ }
+ }
+ return rc;
+}
+
+static
+rc_t get_mate_algn_id_impl(ID_cache_t *const self,
+ int64_t const row, int64_t rslt[],
+ int64_t const spotid)
+{
+ rc_t rc = 0;
+ bool page_processed=false;
+ int64_t first,first_blob,last,last_blob;
+
+ /** check cache **/
+ rc = lookup_mate(self, row, rslt);
+ if (rc == 0) return 0;
+
+ /** Page boundary is defined by the variable "first" **/
+ rc = VCursorPageIdRange(self->curs, self->idx, spotid, &first_blob, &last_blob); if (rc) return rc;
+ first = spotid & ~(TMP_CACHE_PAGESIZE - 1 );
+ if(first < first_blob) first = first_blob;
+ last = first + TMP_CACHE_PAGESIZE -1;
+ if(last > last_blob) last = last_blob;
+
+ rc = KVectorGetBool(self->p_cache, (uint64_t)first,&page_processed);
+ if (rc == 0 && page_processed) { /*** This page was processed before. Row did not need caching. Just fetch Row being asked **/
+ return fetch_mate_id(self, spotid, row, rslt);
+ } else { /** unprocessed page **/
+ int64_t i;
+
+ rc = KVectorSetBool(self->p_cache, (uint64_t)first,true); /** mark as processed **/
+ if(rc) return rc;
+
+ for(i=first;i<=last;i++){
+ int64_t ids[2]={0,0};
+ const int64_t *ptr;
+ uint32_t rlen;
+ rc = fetch_mates(self, i, &ptr,&rlen);
+ if(rc){
+ if(GetRCState ( rc ) == rcNotFound ) rc = 0;
+ else return rc;
+ }
+ memcpy(ids,ptr,rlen*sizeof(*ptr));
+ if(ids[0]!= 0 && ids[1] != 0 && labs(ids[0] - ids[1])> MIN_DIFF_TO_CACHE){
+ rc = cache_mate((ID_cache_t*)self,ids[0],ids[1]);
+ if(rc) return rc;
+ rc = cache_mate((ID_cache_t*)self,ids[1],ids[0]);
+ if(rc) return rc;
+ }
+ if(i==spotid){
+ if(ids[0] == row){
+ rslt[0] = ids[1];
+ } else if(ids[1] == row){
+ rslt[0] = ids[0];
+ } else {
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
+ }
+ }
+ }
+ }
+ return rc;
+}
+static
+rc_t CC get_mate_algn_id_drvr(void *Self,
+ const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt,
+ uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ ID_cache_t *self = Self;
+
+ rslt->data->elem_bits = rslt->elem_bits;
+ rc = KDataBufferResize(rslt->data, 1);
+ if (rc == 0) {
+#if 0
+ rc = get_mate_algn_id_impl(self, row_id, rslt->data->base,
+ ((int64_t const *)argv[0].u.data.base)[argv[0].u.data.first_elem]);
+#else
+ rc = fetch_mate_id(self, ((int64_t const *)argv[0].u.data.base)[argv[0].u.data.first_elem], row_id, rslt->data->base);
+#endif
+ if (rc == 0){
+ if(*(int64_t*)rslt->data->base == 0) rslt->elem_count = 0;
+ else rslt->elem_count = 1;
+ }
+ }
+ return rc;
+}
+
+/* open_sub_cursor
+ */
+static
+rc_t open_sub_cursor(ID_cache_t *self, const VXfactInfo *info, const VCursor *native_curs)
+{
+ rc_t rc;
+
+ rc = VCursorLinkedCursorGet(native_curs,"SEQUENCE",&self->curs);
+ if(rc != 0){
+ const VDatabase *db;
+ const VTable *tbl;
+ /* get at the parent database */
+ rc = VTableOpenParentRead ( info -> tbl, & db );
+ if(rc != 0) return rc;
+ /* open the table */
+ rc = VDatabaseOpenTableRead ( db, &tbl, "SEQUENCE" );
+ VDatabaseRelease ( db );
+ if(rc != 0) return rc;
+ /* create a cursor */
+ rc = VTableCreateCachedCursorRead(tbl, &self->curs,2UL*1024*1024*1024);
+ VTableRelease(tbl);
+ if(rc != 0) return rc;
+ rc = VCursorPermitPostOpenAdd( self->curs );
+ if(rc != 0) return rc;
+ rc = VCursorOpen( self->curs );
+ if(rc != 0) return rc;
+ rc = VCursorLinkedCursorSet(native_curs,"SEQUENCE",self->curs);
+ if(rc != 0) return rc;
+ } else {
+ VCursorAddRef(self->curs);
+ }
+ rc = VCursorAddColumn(self->curs, &self->idx, "(I64)PRIMARY_ALIGNMENT_ID");
+ if (rc == 0) {
+ rc = KVectorMake(&self->j_cache);
+ if(rc==0) rc = KVectorMake(&self->p_cache);
+ if(rc==0) return 0;
+ }
+ VCursorRelease(self->curs);
+ return rc;
+}
+
+
+/* close_sub_cursor
+ */
+static
+void CC close_sub_cursor(void *data)
+{
+ ID_cache_t *self = data;
+
+ VCursorRelease(self->curs);
+ KVectorRelease(self->j_cache);
+ KVectorRelease(self->p_cache);
+ free(self);
+}
+
+
+/*
+ * extern function I64[2] NCBI:align:get_mate_id #1 (I64 spotId);
+ */
+VTRANSFACT_IMPL(NCBI_align_get_mate_align_id, 1, 0, 0) (const void *Self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp)
+{
+ rc_t rc;
+ ID_cache_t *self = calloc(1, sizeof(*self));
+
+ if (self == NULL)
+ return RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
+
+ rc = open_sub_cursor(self, info, (const VCursor*)info->parms);
+ if (rc == 0) {
+ rslt->self = self;
+ rslt->u.rf = get_mate_algn_id_drvr;
+ rslt->variant = vftIdDepRow;
+ rslt->whack = close_sub_cursor;
+ }
+ else {
+ free(self);
+ }
+
+ return rc;
+}
diff --git a/libs/axf/libaxf.vers b/libs/axf/libaxf.vers
index af0b7dd..b0f3d96 100644
--- a/libs/axf/libaxf.vers
+++ b/libs/axf/libaxf.vers
@@ -1 +1 @@
-1.0.6
+1.0.8
diff --git a/libs/axf/libaxf.vers.h b/libs/axf/libaxf.vers.h
deleted file mode 100644
index 22278b1..0000000
--- a/libs/axf/libaxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBAXF_VERS 0x01000006
diff --git a/libs/axf/libwaxf.vers b/libs/axf/libwaxf.vers
index af0b7dd..b0f3d96 100644
--- a/libs/axf/libwaxf.vers
+++ b/libs/axf/libwaxf.vers
@@ -1 +1 @@
-1.0.6
+1.0.8
diff --git a/libs/axf/libwaxf.vers.h b/libs/axf/libwaxf.vers.h
deleted file mode 100644
index dfcee7a..0000000
--- a/libs/axf/libwaxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWAXF_VERS 0x01000006
diff --git a/libs/axf/make-cmp-read_desc.c b/libs/axf/make-cmp-read_desc.c
new file mode 100644
index 0000000..67026c0
--- /dev/null
+++ b/libs/axf/make-cmp-read_desc.c
@@ -0,0 +1,156 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/schema.h>
+
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <kdb/meta.h>
+#include <klib/data-buffer.h>
+#include <insdc/insdc.h>
+#include <align/refseq-mgr.h>
+#include <bitstr.h>
+#include <sysalloc.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <insdc/sra.h>
+
+static void copy(void *dst, size_t doff, void const *src, size_t soff, size_t bits)
+{
+ if ((doff & 7) == 0 && (soff & 7) == 0 && (bits & 7) == 0)
+ memcpy(&((char *)dst)[doff >> 3], &((char const *)src)[soff >> 3], bits >> 3);
+ else
+ bitcpy(dst, doff, src, soff, bits);
+}
+
+static
+rc_t CC make_cmp_read_desc_inv_impl(void *data, const VXformInfo *info, int64_t row_id,
+ VFixedRowResult const *rslt, uint32_t argc, VRowData const argv [] )
+{
+ int64_t const *const alignId = &((int64_t const *)argv[1].u.data.base)[argv[1].u.data.first_elem];
+ void const *const ZERO = data;
+ void const *const base = argv[0].u.data.base;
+ unsigned src = argv[0].u.data.first_elem * rslt->elem_bits;
+ unsigned dst = rslt->first_elem * rslt->elem_bits;
+ unsigned i;
+
+ for (i = 0; i != rslt->elem_count; ++i) {
+ bool const aligned = alignId[i] != 0;
+
+ copy(rslt->base, dst, !aligned ? base : ZERO, !aligned ? src : 0, rslt->elem_bits);
+
+ src += rslt->elem_bits;
+ dst += rslt->elem_bits;
+ }
+ return 0;
+}
+
+static
+rc_t CC make_cmp_read_desc_impl(void *data, const VXformInfo *info, int64_t row_id,
+ VFixedRowResult const *rslt, uint32_t argc, VRowData const argv [] )
+{
+ int64_t const *const alignId = &((int64_t const *)argv[1].u.data.base)[argv[1].u.data.first_elem];
+ void const *const ZERO = data;
+ void const *const base = argv[0].u.data.base;
+ unsigned src = argv[0].u.data.first_elem * rslt->elem_bits;
+ unsigned dst = rslt->first_elem * rslt->elem_bits;
+ unsigned i;
+
+ for (i = 0; i != rslt->elem_count; ++i) {
+ bool const aligned = alignId[i] != 0;
+
+ copy(rslt->base, dst, aligned ? base : ZERO, aligned ? src : 0, rslt->elem_bits);
+
+ src += rslt->elem_bits;
+ dst += rslt->elem_bits;
+ }
+ return 0;
+}
+
+static
+rc_t CC make_read_start_impl(void *data, const VXformInfo *info, int64_t row_id,
+ VFixedRowResult const *rslt, uint32_t argc, VRowData const argv [] )
+{
+ INSDC_coord_zero *const dst = &((INSDC_coord_zero *)rslt->base)[rslt->first_elem];
+ INSDC_coord_len const *const readlen = &((INSDC_coord_len const *)argv[0].u.data.base)[argv[0].u.data.first_elem];
+ INSDC_coord_zero start;
+ unsigned i;
+
+ for (start = 0, i = 0; i != rslt->elem_count; ++i) {
+ INSDC_coord_len const rlen = readlen[i];
+
+ dst[i] = start;
+ start += rlen;
+ }
+ return 0;
+}
+
+static rc_t make_cmp_read_desc_factory(const void *Self,
+ const VXfactInfo *info,
+ VFuncDesc *rslt,
+ const VFactoryParams *cp,
+ const VFunctionParams *dp)
+{
+ rslt->self = calloc(1, (info->fdesc.desc.intrinsic_bits * info->fdesc.desc.intrinsic_bits + 7) >> 3);
+ if (rslt->self == NULL)
+ return RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
+ rslt->whack = free;
+ rslt->u.pf = cp->argv[0].data.b[0] ? make_cmp_read_desc_inv_impl : make_cmp_read_desc_impl;
+ rslt->variant = vftFixedRow;
+ return 0;
+}
+
+/*
+ * function < type T >
+ * T NCBI:align:make_cmp_read_desc #1 <bool invert>(T operand, I64 align_id);
+ */
+VTRANSFACT_IMPL ( NCBI_align_make_cmp_read_desc, 1, 0, 0 )
+ ( const void *Self, const VXfactInfo *info, VFuncDesc *rslt,
+ const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ return make_cmp_read_desc_factory(Self, info, rslt, cp, dp);
+}
+
+/*
+ * extern function INSDC:coord:zero NCBI:align:make_read_start #1
+ * (INSDC:coord:len read_len, I64 align_id);
+ */
+VTRANSFACT_IMPL ( NCBI_align_make_read_start, 1, 0, 0 )
+ ( const void *Self, const VXfactInfo *info, VFuncDesc *rslt,
+ const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rslt->u.pf = make_read_start_impl;
+ rslt->variant = vftFixedRow;
+ return 0;
+}
diff --git a/libs/axf/not-my-row.c b/libs/axf/not-my-row.c
index 974bc92..165b205 100644
--- a/libs/axf/not-my-row.c
+++ b/libs/axf/not-my-row.c
@@ -54,7 +54,7 @@ rc_t CC not_my_row_impl(void *data,const VXformInfo *info, int64_t row_id, VRowR
int i,j;
dst = rslt->data->base;
for(i=j=0;i<len;i++){
- if(src[i]!=row_id){
+ if(src[i]!=row_id && src[i] > 0/**we used alignment is as 0 to indicate no alignmnent**/){
dst[j++]=src[i];
}
}
diff --git a/libs/axf/project_read_from_sequence.c b/libs/axf/project_read_from_sequence.c
index 963f445..cb2e6f2 100644
--- a/libs/axf/project_read_from_sequence.c
+++ b/libs/axf/project_read_from_sequence.c
@@ -28,6 +28,7 @@
#include <vdb/database.h>
#include <vdb/table.h>
#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
#include <klib/defs.h>
@@ -65,7 +66,7 @@ void CC RestoreReadWhack ( void *obj )
}
static
-rc_t RestoreReadMake ( RestoreRead **objp, const VXfactInfo *info, const VFactoryParams *cp )
+rc_t RestoreReadMake ( RestoreRead **objp, const VXfactInfo *info, const VFactoryParams *cp, const VCursor *native_curs )
{
rc_t rc;
@@ -74,59 +75,60 @@ rc_t RestoreReadMake ( RestoreRead **objp, const VXfactInfo *info, const VFactor
if ( obj == NULL ) {
rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
} else {
- /* get at the parent database */
- const VDatabase *db;
- rc = VTableOpenParentRead ( info -> tbl, & db );
- if ( rc == 0 ) {
- /* open the primary alignment table */
- const VTable *patbl;
- rc = VDatabaseOpenTableRead ( db, & patbl, "SEQUENCE" );
- VDatabaseRelease ( db );
- if ( rc == 0 )
- {
- /* create a cursor */
- rc = VTableCreateCachedCursorRead(patbl, &obj->curs, 4*1024*1024);
- VTableRelease ( patbl );
- if ( rc == 0 )
- {
- /* add columns to cursor */
- assert ( cp -> argc == 1 );
- rc = VCursorAddColumn ( obj -> curs, & obj -> col_idx, "%.*s",
- cp -> argv [ 0 ] . count, cp -> argv [ 0 ] . data . ascii );
- if ( rc == 0)
- rc = VCursorAddColumn ( obj -> curs, & obj -> read_len_idx, "(INSDC:coord:len)READ_LEN" );
- if ( rc == 0)
- rc = VCursorAddColumn ( obj -> curs, & obj -> read_start_idx, "(INSDC:coord:zero)READ_START");
- if ( rc == 0 )
- {
- rc = VCursorOpen ( obj -> curs );
- if ( rc == 0 )
- {
- VTypedesc src;
- rc = VCursorDatatype ( obj -> curs, obj -> col_idx, NULL, & src );
- if ( rc == 0 )
- {
- /* selected column should have same characteristics */
- if ( src . domain != info -> fdesc . desc . domain ||
- src . intrinsic_bits != info -> fdesc . desc . intrinsic_bits ||
- src . intrinsic_dim != info -> fdesc . desc. intrinsic_dim )
- {
- rc = RC ( rcXF, rcFunction, rcConstructing, rcType, rcInconsistent );
- }
- else if ( ( src . intrinsic_bits & 7 ) != 0 )
- rc = RC ( rcXF, rcFunction, rcConstructing, rcType, rcUnsupported );
- else
- {
- * objp = obj;
- return 0;
- }
- }
- }
- }
-
- VCursorRelease ( obj -> curs );
- }
- }
+ rc = VCursorLinkedCursorGet(native_curs,"SEQUENCE",&obj->curs);
+ if(rc != 0){
+ const VDatabase *db;
+ const VTable *tbl;
+ /* get at the parent database */
+ rc = VTableOpenParentRead ( info -> tbl, & db );
+ if(rc != 0) return rc;
+ /* open the table */
+ rc = VDatabaseOpenTableRead ( db, &tbl, "SEQUENCE" );
+ VDatabaseRelease ( db );
+ if(rc != 0) return rc;
+ /* create a cursor */
+ rc = VTableCreateCachedCursorRead(tbl, &obj->curs,2UL*1024*1024*1024);
+ VTableRelease(tbl);
+ if(rc != 0) return rc;
+ rc = VCursorPermitPostOpenAdd( obj->curs );
+ if(rc != 0) return rc;
+ rc = VCursorOpen( obj->curs );
+ if(rc != 0) return rc;
+ rc = VCursorLinkedCursorSet(native_curs,"SEQUENCE",obj->curs);
+ if(rc != 0) return rc;
+ } else {
+ VCursorAddRef(obj->curs);
+ }
+ if ( rc == 0 )
+ {
+ /* add columns to cursor */
+ assert ( cp -> argc == 1 );
+ rc = VCursorAddColumn ( obj -> curs, & obj -> col_idx, "%.*s",
+ cp -> argv [ 0 ] . count, cp -> argv [ 0 ] . data . ascii );
+ if ( rc == 0 || GetRCState(rc) == rcExists )
+ rc = VCursorAddColumn ( obj -> curs, & obj -> read_len_idx, "(INSDC:coord:len)READ_LEN" );
+ if ( rc == 0 || GetRCState(rc) == rcExists )
+ rc = VCursorAddColumn ( obj -> curs, & obj -> read_start_idx, "(INSDC:coord:zero)READ_START");
+ if ( rc == 0 || GetRCState(rc) == rcExists) {
+ VTypedesc src;
+ rc = VCursorDatatype ( obj -> curs, obj -> col_idx, NULL, & src );
+ if ( rc == 0 ){
+ /* selected column should have same characteristics */
+ if ( src . domain != info -> fdesc . desc . domain ||
+ src . intrinsic_bits != info -> fdesc . desc . intrinsic_bits ||
+ src . intrinsic_dim != info -> fdesc . desc. intrinsic_dim )
+ {
+ rc = RC ( rcXF, rcFunction, rcConstructing, rcType, rcInconsistent );
+ }
+ else if ( ( src . intrinsic_bits & 7 ) != 0 )
+ rc = RC ( rcXF, rcFunction, rcConstructing, rcType, rcUnsupported );
+ else
+ {
+ * objp = obj;
+ return 0;
+ }
+ }
+ }
}
free ( obj );
}
@@ -160,9 +162,14 @@ rc_t CC project_from_sequence_impl ( void *data, const VXformInfo *info,
assert(argv[1].u.data.elem_bits == 32);
assert(argv[1].u.data.elem_count == 1);
+ if(spot_id[0] == 0){ /*** valid case , the projection should be empty ***/
+ rslt->elem_count =0;
+ return 0;
+ }
assert ( read_id_in[0] > 0 );
read_id = read_id_in[0] - 1; /** make zero - based **/
+
rc = VCursorCellDataDirect(self->curs, spot_id[0], self->read_len_idx, NULL, (void const **)&read_len, NULL, &nreads);
if (rc) return rc;
@@ -209,11 +216,11 @@ VTRANSFACT_IMPL ( ALIGN_project_from_sequence, 1, 0, 0 ) ( const void *Self, con
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
RestoreRead *fself;
- rc_t rc = RestoreReadMake ( & fself, info, cp );
+ rc_t rc = RestoreReadMake ( & fself, info, cp, (const VCursor*)info->parms );
if(rc == 0 ) {
rslt->self = fself;
rslt->u.ndf = project_from_sequence_impl;
- rslt->variant = vftNonDetRow;
+ rslt->variant = vftRow;
rslt -> whack = RestoreReadWhack;
}
return rc;
diff --git a/libs/axf/ref-preserve_qual.c b/libs/axf/ref-preserve_qual.c
index 44de091..b4d1e3f 100644
--- a/libs/axf/ref-preserve_qual.c
+++ b/libs/axf/ref-preserve_qual.c
@@ -320,6 +320,8 @@ rc_t CC generate_preserve_qual_impl(void *Self, VXformInfo const *info,
rslt->data->elem_bits = rslt->elem_bits;
rslt->elem_count = seq_len;
rc = KDataBufferResize(rslt->data, rslt->elem_count); if (rc) return rc;
+ memset(rslt->data->base, 0, (seq_len * rslt->elem_bits + 7) >> 3);
+ return 0;
StringInit(&refName, &((char const *)argv[0].u.data.base)[argv[0].u.data.first_elem],
argv[0].u.data.elem_count, argv[0].u.data.elem_count);
diff --git a/libs/axf/ref-restore-read.c b/libs/axf/ref-restore-read.c
index fbdf9ce..beb4599 100644
--- a/libs/axf/ref-restore-read.c
+++ b/libs/axf/ref-restore-read.c
@@ -75,7 +75,7 @@ rc_t RestoreReadMake ( RestoreRead **objp, const VDBManager *mgr )
if( obj == NULL ) {
rc = RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
} else {
- if( (rc = RefSeqMgr_Make(&obj->rmgr, mgr, errefseq_4NA, 32 * 1024 * 1024, 10)) == 0 ) {
+ if( (rc = RefSeqMgr_Make(&obj->rmgr, mgr, errefseq_4NA, 1024 * 1024 * 1024, 30)) == 0 ) {
*objp = obj;
} else {
*objp = NULL;
@@ -91,7 +91,7 @@ rc_t CC ref_restore_read_impl ( void *data, const VXformInfo *info, int64_t row_
{
rc_t rc;
RestoreRead* self = data;
- INSDC_dna_text* dst;
+ uint8_t* dst;
uint32_t read_len = argv[0].u.data.elem_count;
const uint8_t *read = argv[0].u.data.base;
uint32_t seqid_len = argv[1].u.data.elem_count;
@@ -155,7 +155,7 @@ VTRANSFACT_IMPL ( ALIGN_ref_restore_read, 1, 0, 0 ) ( const void *Self, const VX
if(rc == 0 ) {
rslt->self = fself;
rslt->u.ndf = ref_restore_read_impl;
- rslt->variant = vftNonDetRow;
+ rslt->variant = vftRow;
rslt -> whack = RestoreReadWhack;
}
return rc;
diff --git a/libs/axf/ref-tbl-sub-select.c b/libs/axf/ref-tbl-sub-select.c
index 67920d7..7719353 100644
--- a/libs/axf/ref-tbl-sub-select.c
+++ b/libs/axf/ref-tbl-sub-select.c
@@ -37,6 +37,8 @@
#include <bitstr.h>
+#include "ref-tbl.h"
+
#include <stdlib.h>
#include <string.h>
#include <assert.h>
@@ -45,232 +47,321 @@
typedef struct RefTableSubSelect RefTableSubSelect;
struct RefTableSubSelect
{
+ rc_t (*func)(struct RefTableSubSelect* self, int64_t ref_row_id,
+ INSDC_coord_zero offset, INSDC_coord_len ref_len,
+ uint32_t ref_ploidy, VRowResult* rslt);
const VCursor *curs;
uint32_t out_idx;
- uint32_t circular_idx;
- uint32_t name_idx;
- uint32_t name_range_idx;
+ union {
+ struct {
+ uint32_t circular_idx;
+ uint32_t name_idx;
+ uint32_t name_range_idx;
+ uint32_t seq_len_idx;
+ uint32_t max_seq_len_idx;
+ /* set once upon 1st call */
+ /* set once per each call, if changed from previous */
+ char* name;
+ uint32_t name_len;
+ int64_t start_id;
+ int64_t stop_id;
+ bool circular;
+ INSDC_coord_len seq_len;
+ uint32_t max_seq_len;
+ } ref;
+ struct {
+ uint32_t ref_id_idx;
+ uint32_t ref_start_idx;
+ uint32_t ref_len_idx;
+ uint32_t read_start_idx;
+ uint32_t read_len_idx;
+ struct RefTableSubSelect* parent;
+ } mod;
+ } u;
};
+/*
+ ref_ploidy != 0 means that offset here is relative to ref_row_id, so it can be
+ negative or positive and can extend between rows within same refseq
+ ref_ploidy means that offset is normal REF_START
+ */
+
static
-void CC RefTableSubSelectWhack ( void *obj )
+rc_t CC REFERENCE_TABLE_sub_select(RefTableSubSelect* self, int64_t ref_row_id,
+ INSDC_coord_zero offset, INSDC_coord_len ref_len,
+ uint32_t ref_ploidy, VRowResult* rslt)
{
- RefTableSubSelect * self = obj;
- if ( self != NULL )
- {
- VCursorRelease ( self -> curs );
- free ( self );
+ rc_t rc = 0;
+ INSDC_coord_len num_read;
+
+ if( ref_row_id < self->u.ref.start_id || ref_row_id > self->u.ref.stop_id ) {
+ /* update cached ref data if ref has changed */
+ const char* n;
+ uint32_t n_len;
+ struct {
+ int64_t start_id;
+ int64_t stop_id;
+ } *out;
+
+ if( (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.ref.name_idx, NULL, (const void**)&n, NULL, &n_len)) == 0 &&
+ /* use i_name to find current ref rowid range */
+ (rc = VCursorParamsSet((const struct VCursorParams *)(self->curs), "QUERY_SEQ_NAME", "%.*s", n_len, n)) == 0 &&
+ (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.ref.name_range_idx, NULL, (const void**)&out, NULL, NULL)) == 0 ) {
+
+ if( self->u.ref.name_len < n_len ) {
+ void* p = realloc(self->u.ref.name, n_len);
+ if( p == NULL ) {
+ rc = RC(rcXF, rcFunction, rcSelecting, rcMemory, rcExhausted);
+ } else {
+ self->u.ref.name = (char*)p;
+ }
+ }
+ if( rc == 0 ) {
+ const bool* c;
+ INSDC_coord_len* sl;
+ uint32_t* m;
+
+ memcpy(self->u.ref.name, n, n_len);
+ self->u.ref.name_len = n_len;
+ self->u.ref.start_id = out->start_id;
+ self->u.ref.stop_id = out->stop_id;
+ if( (rc = VCursorCellDataDirect(self->curs, self->u.ref.stop_id, self->u.ref.circular_idx, NULL, (const void**)&c, NULL, NULL)) == 0 &&
+ (rc = VCursorCellDataDirect(self->curs, self->u.ref.stop_id, self->u.ref.seq_len_idx, NULL, (const void**)&sl, NULL, NULL)) == 0 &&
+ (rc = VCursorCellDataDirect(self->curs, self->u.ref.stop_id, self->u.ref.max_seq_len_idx, NULL, (const void**)&m, NULL, NULL)) == 0 ) {
+
+ self->u.ref.circular = c[0];
+ self->u.ref.seq_len = m[0] * (self->u.ref.stop_id - self->u.ref.start_id) + sl[0];
+ self->u.ref.max_seq_len = m[0];
+ }
+ }
+ }
+ }
+ if( rc == 0 && ref_ploidy != 0 ) {
+ /* convert offset to normal from start of ref relative to current row */
+ offset += self->u.ref.max_seq_len * (ref_row_id - self->u.ref.start_id);
+ if( self->u.ref.circular ) {
+ /* make offset positive starting from refseq actual start */
+ if( offset < 0 ) {
+ offset = self->u.ref.seq_len - ((-offset) % self->u.ref.seq_len);
+ } else {
+ offset %= self->u.ref.seq_len;
+ }
+ } else if( offset < 0 || offset >= self->u.ref.seq_len ) {
+ rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
+ }
+ ref_row_id = self->u.ref.start_id + offset / self->u.ref.max_seq_len;
+ offset %= self->u.ref.max_seq_len;
+ }
+ /* read the data */
+ for(num_read = 0; rc == 0 && num_read < ref_len && ref_row_id <= self->u.ref.stop_id; offset = 0) {
+ uint32_t bits;
+ const void* output;
+ uint32_t boff;
+ uint32_t row_len;
+
+ if( (rc = VCursorCellDataDirect(self->curs, ref_row_id,self->out_idx, &bits, &output, &boff, &row_len)) == 0 ) {
+ /* row_len MUST be > offset */
+ if( row_len <= offset ) {
+ rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
+ } else {
+ row_len -= offset;
+ if(ref_len < row_len + num_read) {
+ row_len = ref_len - num_read;
+ }
+ /* copy data */
+ bitcpy(rslt->data->base, rslt->elem_count * bits, output, offset * bits + boff, row_len * bits);
+ rslt->elem_count += row_len;
+ num_read += row_len;
+ if( ++ref_row_id > self->u.ref.stop_id && self->u.ref.circular ) {
+ ref_row_id = self->u.ref.start_id;
+ }
+ }
+ }
+ }
+ /* detect incomplete read */
+ if( rc == 0 && num_read == 0 ) {
+ rc = RC(rcXF, rcFunction, rcSelecting, rcTransfer, rcIncomplete);
}
+ return rc;
}
static
-rc_t RefTable_READ_SubSelectMake ( RefTableSubSelect **objp, const VTable *tbl )
+rc_t CC ALIGN_CMN_TABLE_sub_select(RefTableSubSelect* self, int64_t ref_row_id,
+ INSDC_coord_zero offset, INSDC_coord_len ref_len,
+ uint32_t ref_ploidy, VRowResult* rslt)
{
- rc_t rc;
+ rc_t rc=0;
+ INSDC_coord_len num_read = 0;
+ const int64_t* al_ref_id = NULL;
+ int64_t al_ref_id_value;
+ const INSDC_coord_zero* al_ref_start = NULL;
- /* create the object */
- RefTableSubSelect *obj = malloc ( sizeof * obj );
- if ( obj == NULL ) {
- rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
- } else {
- /* get at the parent database */
- const VDatabase *db;
- rc = VTableOpenParentRead ( tbl, & db );
- if ( rc == 0 )
- {
- /* open the reference table */
- const VTable *reftbl;
- rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
- VDatabaseRelease ( db );
- if ( rc == 0 )
- {
- /* create a cursor */
- rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 4*1024*1024);
- VTableRelease ( reftbl );
- if( rc == 0 ) {
- /* add columns to cursor */
- if( (rc = VCursorAddColumn(obj->curs, &obj->out_idx, "(INSDC:4na:bin) READ")) == 0 &&
- (rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME")) == 0 &&
- (rc = VCursorAddColumn(obj->curs, &obj->circular_idx, "CIRCULAR")) == 0 &&
- (rc = VCursorAddColumn(obj->curs, &obj->name_range_idx, "NAME_RANGE")) == 0 ) {
- rc = VCursorOpen(obj->curs);
- }
- if( rc == 0 ) {
- *objp = obj;
- return 0;
+ if( offset < 0 ) {
+ if( (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.ref_id_idx, NULL, (void const **)&al_ref_id, NULL, NULL)) == 0 &&
+ (rc = VCursorCellDataDirect(self->curs, ref_row_id,self->u.mod.ref_start_idx, NULL, (void const **)&al_ref_start, NULL, NULL)) == 0 ) {
+ memcpy ( & al_ref_id_value, al_ref_id, sizeof *al_ref_id );
+ if( -offset > ref_len ) {
+ /* requested chunk is to the left and is not using allele data */
+ rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
+ } else if( (rc = self->u.mod.parent->func(self->u.mod.parent, al_ref_id_value, offset + al_ref_start[0],
+ -offset, ref_ploidy, rslt)) == 0 ) {
+ /* read left portion of underlying reference */
+ num_read += rslt->elem_count;
+ offset = 0;
+ }
+ }
+ }
+ if( rc == 0 && num_read < ref_len ) {
+ /* copy self */
+ void const* output;
+ uint32_t bits, boff, rs_len, rl_len;
+ const INSDC_coord_zero* rs;
+ const INSDC_coord_len* rl;
+
+ if( (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->out_idx, &bits, &output, &boff, NULL)) == 0 &&
+ (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.read_start_idx, NULL, (void const **)&rs, NULL, &rs_len)) == 0 &&
+ (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.read_len_idx, NULL, (void const **)&rl, NULL, &rl_len)) == 0 ) {
+ assert(rs_len == rl_len);
+ assert(ref_ploidy > 0 && ref_ploidy <= rl_len);
+ if( offset > rl[ref_ploidy - 1] ) {
+ /* requested chunk starts beyond allele */
+ rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
+ } else {
+ INSDC_coord_len left = ref_len - num_read;
+ if( (rl[ref_ploidy - 1] - offset) < left ) {
+ left = rl[ref_ploidy - 1] - offset;
}
- VCursorRelease ( obj -> curs );
+ bitcpy(rslt->data->base, rslt->elem_count * bits, output, (rs[ref_ploidy - 1] + offset) * bits + boff, left * bits);
+ num_read += left;
+ rslt->elem_count += left;
}
}
}
- free ( obj );
- }
+ if( rc == 0 && num_read < ref_len ) {
+ const INSDC_coord_len* al_ref_len;
+ /* copy right portion of underlying reference */
+ if( al_ref_id == NULL || al_ref_start == NULL ) {
+ if( (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.ref_id_idx, NULL, (void const **)&al_ref_id, NULL, NULL)) == 0 ) {
+ rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.ref_start_idx, NULL, (void const **)&al_ref_start, NULL, NULL);
+ }
+ }
+ if( rc == 0 ) {
+ rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.ref_len_idx, NULL, (void const **)&al_ref_len, NULL, NULL);
+ }
+ memcpy ( & al_ref_id_value, al_ref_id, sizeof *al_ref_id );
+ if( rc == 0 &&
+ (rc = self->u.mod.parent->func(self->u.mod.parent, al_ref_id_value, al_ref_start[0] + al_ref_len[0],
+ ref_len - num_read, ref_ploidy, rslt)) == 0 ) {
+ }
+ }
return rc;
}
static
-rc_t RefTable_PRESERVE_QUAL_SubSelectMake ( RefTableSubSelect **objp, const VTable *tbl )
+void CC RefTableSubSelect_Whack ( void *obj )
+{
+ if( obj != NULL ) {
+ RefTableSubSelect* self = (RefTableSubSelect*)obj;
+ VCursorRelease(self->curs);
+ if( self->func != REFERENCE_TABLE_sub_select ) {
+ RefTableSubSelect_Whack(self->u.mod.parent);
+ } else {
+ free(self->u.ref.name);
+ }
+ free(self);
+ }
+}
+
+/* normal way to do it */
+#define IS_ADDED(c, i, n) ((rc = VCursorAddColumn(c, i, n)) == 0 || \
+ (GetRCObject(rc) == rcColumn && GetRCState(rc) == rcExists))
+
+static
+rc_t RefTableSubSelect_Make( RefTableSubSelect **objp, const VTable *tbl, const VCursor *native_curs, const char* out_col_name )
{
rc_t rc;
-
+
/* create the object */
- RefTableSubSelect *obj = malloc ( sizeof * obj );
- if ( obj == NULL ) {
- rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
+ RefTableSubSelect* obj = (RefTableSubSelect*)calloc(1, sizeof(*obj));
+ if( obj == NULL ) {
+ rc = RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
} else {
- /* get at the parent database */
- const VDatabase *db;
- rc = VTableOpenParentRead ( tbl, & db );
- if ( rc == 0 )
- {
- /* open the reference table */
- const VTable *reftbl;
- rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
- VDatabaseRelease ( db );
- if ( rc == 0 )
- {
- /* create a cursor */
- rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 4*1024*1024);
- VTableRelease ( reftbl );
- if( rc == 0 ) {
- /* add columns to cursor */
- if( (rc = VCursorAddColumn(obj->curs, &obj->out_idx, "(bool)PRESERVE_QUAL")) == 0 &&
- (rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME")) == 0 &&
- (rc = VCursorAddColumn(obj->curs, &obj->circular_idx, "CIRCULAR")) == 0 &&
- (rc = VCursorAddColumn(obj->curs, &obj->name_range_idx, "NAME_RANGE")) == 0 ) {
- rc = VCursorOpen(obj->curs);
+ const VTable *reftbl=NULL;
+ /* open the reference table cursor*/
+ if( (rc = AlignRefTableCursor(tbl, native_curs, &obj->curs,&reftbl)) == 0 ) {
+ /* add columns to cursor */
+ if( IS_ADDED(obj->curs, &obj->u.ref.circular_idx, "CIRCULAR") ) {
+ /* normal REFERENCE table */
+ if( IS_ADDED(obj->curs, &obj->u.ref.name_idx, "(utf8)NAME") &&
+ IS_ADDED(obj->curs, &obj->u.ref.name_range_idx, "NAME_RANGE") &&
+ IS_ADDED(obj->curs, &obj->u.ref.seq_len_idx, "SEQ_LEN") &&
+ IS_ADDED(obj->curs, &obj->u.ref.max_seq_len_idx, "MAX_SEQ_LEN") ) {
+ obj->func = REFERENCE_TABLE_sub_select;
+ rc = 0;
}
- if( rc == 0 ) {
- *objp = obj;
- return 0;
+ } else if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+ /* try as align_cmn */
+ if( (rc = RefTableSubSelect_Make(&obj->u.mod.parent, reftbl, native_curs, out_col_name)) ==0 &&
+ IS_ADDED(obj->curs, &obj->u.mod.ref_id_idx, "REF_ID") &&
+ IS_ADDED(obj->curs, &obj->u.mod.ref_start_idx, "REF_START") &&
+ IS_ADDED(obj->curs, &obj->u.mod.ref_len_idx, "REF_LEN") &&
+ IS_ADDED(obj->curs, &obj->u.mod.read_start_idx, "READ_START") &&
+ IS_ADDED(obj->curs, &obj->u.mod.read_len_idx, "READ_LEN") ) {
+ obj->func = ALIGN_CMN_TABLE_sub_select;
+ rc = 0;
}
- VCursorRelease ( obj -> curs );
}
- }
+ if( rc == 0 && IS_ADDED(obj->curs, &obj->out_idx, out_col_name) ) {
+ rc = 0;
+ }
+ if( rc == 0 ) {
+ *objp = obj;
+ VTableRelease(reftbl);
+ return 0;
+ }
+ VCursorRelease(obj->curs);
}
- free ( obj );
+ VTableRelease(reftbl);
+ free(obj);
}
return rc;
}
-static void my_copy(void *Dst, bitsz_t doff, void const *Src, bitsz_t soff, bitsz_t sz)
-{
- if ((doff & 7) == 0 && (soff & 7) == 0 && (sz & 7) == 0) {
- uint8_t *const dst = (uint8_t *)Dst;
- uint8_t const *const src = (uint8_t const *)Src;
-
- memcpy(&dst[doff >> 3], &src[soff >> 3], sz >> 3);
- }
- else
- bitcpy(Dst, doff, Src, soff, sz);
-}
-
static
rc_t CC reftbl_sub_select ( void *data, const VXformInfo *info,
- int64_t row_id, VRowResult *rslt, uint32_t argc, const VRowData argv[] )
+ int64_t row_id, VRowResult *rslt, uint32_t argc, const VRowData argv[] )
{
rc_t rc;
- const RefTableSubSelect * self = (const void*)data;
- uint8_t *dst;
- uint32_t num_read, row_len, ref_len;
- INSDC_coord_zero offset;
- int64_t ref_row_id;
- char* name = NULL;
- uint32_t name_len = 0;
- const bool* circular;
-
- /* get start and length of reference segment */
- const int64_t* ref_id = argv[0].u.data.base;
- const INSDC_coord_zero* ref_start = argv[1].u.data.base;
- const INSDC_coord_len* ref_lenv = argv[2].u.data.base;
-
+ RefTableSubSelect* self = (RefTableSubSelect*)data;
+ const int64_t* ref_id = (const int64_t*)argv[0].u.data.base;
+ const INSDC_coord_zero* ref_start = (const INSDC_coord_zero*)argv[1].u.data.base;
+ const INSDC_coord_len* ref_len = (const INSDC_coord_len*)argv[2].u.data.base;
+ const uint32_t* ref_ploidy = NULL;
+
+ if( argc > 3 ) {
+ ref_ploidy = (const uint32_t*)argv[3].u.data.base;
+ ref_ploidy += argv[3].u.data.first_elem;
+ assert(argv[3].u.data.elem_bits == sizeof(*ref_ploidy) * 8 );
+ }
assert(argv[0].u.data.elem_bits == sizeof(*ref_id) * 8 );
assert(argv[1].u.data.elem_bits == sizeof(*ref_start) * 8 );
- assert(argv[2].u.data.elem_bits == sizeof(*ref_lenv) * 8 );
+ assert(argv[2].u.data.elem_bits == sizeof(*ref_len) * 8 );
+
+ ref_id += argv[0].u.data.first_elem;
+ ref_start += argv[1].u.data.first_elem;
+ ref_len += argv[2].u.data.first_elem;
- ref_lenv += argv[2].u.data.first_elem;
- ref_len = ref_lenv[0];
/* get the memory for output row */
-
rslt->data->elem_bits = rslt->elem_bits;
- if((rc = KDataBufferResize ( rslt->data, ref_len )) == 0 ) {
- dst = rslt->data->base;
- /* starting row and offset */
- ref_id += argv[0].u.data.first_elem;
- ref_start += argv[1].u.data.first_elem;
- ref_row_id = ref_id[0];
- offset = ref_start[0];
- }
- /* read the sequence */
- for( num_read = 0; rc == 0 && num_read < ref_len; offset = 0, num_read += row_len ) {
- VCursorCloseRow(self->curs);
- if( (rc = VCursorSetRowId(self->curs, ref_row_id)) == 0 &&
- (rc = VCursorOpenRow(self->curs)) == 0 ) {
- void const* output;
- const char* name_next;
- uint32_t name_len_next;
- uint32_t bits;
- uint32_t boff;
-
- if( (rc = VCursorCellData(self->curs, self->out_idx, &bits, &output, &boff, &row_len)) == 0 &&
- (rc = VCursorCellData(self->curs, self->name_idx, NULL, (void const **)&name_next, NULL, &name_len_next)) == 0 ) {
- if( name != NULL && (name_len != name_len_next || memcmp(name, name_next, name_len) != 0) ) {
- /* next name detected */
- if( *circular ) {
- /* use i_name to find 1st rowid */
- if( (rc = VCursorParamsSet((const struct VCursorParams *)(self->curs),
- "QUERY_SEQ_NAME", "%.*s", name_len, name)) == 0 ) {
- struct {
- int64_t start_id;
- uint64_t id_count;
- } *out;
- if( (rc = VCursorCellData(self->curs, self->name_range_idx, NULL, (const void**)&out, NULL, NULL)) == 0 ) {
- row_len = 0;
- ref_row_id = out->start_id;
- }
- }
- continue;
- } else {
- rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
- }
- } else if( name == NULL ) {
- uint32_t l;
- if( (rc = VCursorCellData(self->curs, self->circular_idx, NULL,
- (const void**)&circular, NULL, &l)) == 0 ) {
- assert(l == sizeof(*circular));
- name = malloc(name_len_next);
- if( name == NULL ) {
- rc = RC(rcXF, rcFunction, rcSelecting, rcMemory, rcExhausted);
- } else {
- memcpy(name, name_next, name_len_next);
- name_len = name_len_next;
- }
- }
- }
- if( rc == 0 ) {
- /* row_len MUST be > offset */
- if( row_len <= offset ) {
- rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
- } else {
- row_len -= offset;
- if(ref_len < row_len + num_read) {
- row_len = ref_len - num_read;
- }
- /* copy data */
- my_copy(dst, num_read * bits, output, offset * bits + boff, row_len * bits);
-
- ref_row_id++;
- }
- }
- }
- }
- }
- /* detect incomplete read */
- if( rc == 0 && num_read < ref_len ) {
- rc = RC(rcXF, rcFunction, rcSelecting, rcTransfer, rcIncomplete);
+ if( (rc = KDataBufferResize(rslt->data, ref_len[0])) == 0 ) {
+ /* must set it to 0 here - functions above accumulate */
+ rslt->elem_count = 0;
+ if(ref_len[0] > 0){
+ int64_t ref_id_val;
+ memcpy ( & ref_id_val, ref_id, sizeof ref_id_val );
+ rc = self->func(self, ref_id_val, ref_start[0], ref_len[0], ref_ploidy ? ref_ploidy[0] : 0, rslt);
+ }
}
- free(name);
- rslt->elem_count = num_read;
return rc;
}
@@ -278,13 +369,13 @@ VTRANSFACT_IMPL ( ALIGN_ref_sub_select, 1, 0, 0 ) ( const void *self, const VXfa
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
RefTableSubSelect *fself;
- rc_t rc = RefTable_READ_SubSelectMake ( & fself, info -> tbl );
+ rc_t rc = RefTableSubSelect_Make ( & fself, info -> tbl, (const VCursor*)info->parms ,"(INSDC:4na:bin)READ" );
if ( rc == 0 )
{
rslt -> self = fself;
- rslt -> whack = RefTableSubSelectWhack;
+ rslt -> whack = RefTableSubSelect_Whack;
rslt -> u . ndf = reftbl_sub_select;
- rslt -> variant = vftNonDetRow;
+ rslt -> variant = vftRow;
}
return rc;
@@ -294,13 +385,13 @@ VTRANSFACT_IMPL ( NCBI_align_ref_sub_select_preserve_qual, 1, 0, 0 ) ( const voi
VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
{
RefTableSubSelect *fself;
- rc_t rc = RefTable_PRESERVE_QUAL_SubSelectMake ( & fself, info -> tbl );
+ rc_t rc = RefTableSubSelect_Make( & fself, info -> tbl, (const VCursor*)info->parms , "(bool)PRESERVE_QUAL" );
if ( rc == 0 )
{
rslt -> self = fself;
- rslt -> whack = RefTableSubSelectWhack;
+ rslt -> whack = RefTableSubSelect_Whack;
rslt -> u . ndf = reftbl_sub_select;
- rslt -> variant = vftNonDetRow;
+ rslt -> variant = vftRow;
}
return rc;
diff --git a/libs/axf/ref-tbl.c b/libs/axf/ref-tbl.c
new file mode 100644
index 0000000..57e0933
--- /dev/null
+++ b/libs/axf/ref-tbl.c
@@ -0,0 +1,85 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/vdb-priv.h>
+#include <vdb/cursor.h>
+#include <kdb/meta.h>
+#include <klib/rc.h>
+
+#include "ref-tbl.h"
+#include <string.h>
+
+rc_t AlignRefTableCursor(const VTable* table, const VCursor *native_curs, const VCursor** ref_cursor,const VTable **reftbl)
+{
+ rc_t rc = 0;
+ char ref_tbl_name[512] = "REFERENCE";
+ const KMetadata* meta;
+ const VCursor *curs;
+
+ if( (rc = VTableOpenMetadataRead(table, &meta)) == 0 ) {
+ const KMDataNode* node;
+ if( (rc = KMetadataOpenNodeRead(meta, &node, "CONFIG/REF_TABLE")) == 0 ) {
+ size_t sz;
+ rc = KMDataNodeReadCString(node, ref_tbl_name, sizeof(ref_tbl_name), &sz);
+ ref_tbl_name[sz] = '\0';
+ KMDataNodeRelease(node);
+ }
+ KMetadataRelease(meta);
+ }
+ rc = VCursorLinkedCursorGet(native_curs,ref_tbl_name,&curs);
+ if(rc != 0){
+ const VDatabase *db;
+ const VTable *tbl;
+ /* get at the parent database */
+ rc = VTableOpenParentRead ( table, & db );
+ if(rc != 0) return rc;
+ /* open the table */
+ rc = VDatabaseOpenTableRead ( db, &tbl, ref_tbl_name);
+ VDatabaseRelease ( db );
+ if(rc != 0) return rc;
+ /* create a cursor */
+ rc = VTableCreateCachedCursorRead(tbl, &curs,256*1024*1024);
+ if(reftbl){
+ *reftbl = tbl;
+ } else {
+ VTableRelease(tbl);
+ }
+ if(rc != 0) return rc;
+ rc = VCursorPermitPostOpenAdd( curs );
+ if(rc != 0) return rc;
+ rc = VCursorOpen( curs );
+ if(rc != 0) return rc;
+ if(native_curs)
+ rc = VCursorLinkedCursorSet(native_curs,ref_tbl_name,curs);
+
+ if(rc != 0) return rc;
+ } else {
+ VCursorAddRef(curs);
+ }
+ *ref_cursor = curs;
+ return 0;
+}
diff --git a/libs/axf/ref-tbl.h b/libs/axf/ref-tbl.h
new file mode 100644
index 0000000..24cbf80
--- /dev/null
+++ b/libs/axf/ref-tbl.h
@@ -0,0 +1,32 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_axf_ref_tbl_
+#define _h_axf_ref_tbl_
+
+/* Caller must release ref_cursor */
+rc_t AlignRefTableCursor(const VTable* table, const VCursor *native_curs, const VCursor** ref_cursor, const VTable **reftbl);
+
+#endif /* _h_axf_ref_tbl_ */
diff --git a/libs/axf/refseq-stats.c b/libs/axf/refseq-stats.c
index 8b6bf22..c77368c 100644
--- a/libs/axf/refseq-stats.c
+++ b/libs/axf/refseq-stats.c
@@ -134,7 +134,7 @@ VTRANSFACT_IMPL ( NCBI_refSeq_stats, 1, 0, 0 ) ( const void *self, const VXfactI
if( rc == 0 ) {
rslt->self = data;
rslt->whack = refseq_meta_stats_whack;
- rslt->variant = vftNonDetRow;
+ rslt->variant = vftRow;
rslt->u.rf = refseq_meta_stats;
data->crc32 = 0;
CRC32Init();
diff --git a/libs/axf/seq-construct-read.c b/libs/axf/seq-construct-read.c
new file mode 100644
index 0000000..d0fc66e
--- /dev/null
+++ b/libs/axf/seq-construct-read.c
@@ -0,0 +1,125 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/schema.h>
+
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <kdb/meta.h>
+#include <klib/data-buffer.h>
+#include <insdc/insdc.h>
+#include <align/refseq-mgr.h>
+#include <bitstr.h>
+#include <sysalloc.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <insdc/sra.h>
+
+
+static
+rc_t CC seq_construct_read ( void *data, const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ uint8_t *dst;
+
+ /* base pointers to input data */
+ const uint8_t *aligned = argv [ 0 ] . u . data . base;
+ const INSDC_coord_len *aligned_len = argv [ 1 ] . u . data . base;
+ const uint8_t *unaligned = argv [ 2 ] . u . data . base;
+ const INSDC_coord_len *unaligned_len = argv [ 3 ] . u . data . base;
+
+ /* the number of reads */
+ uint32_t i, seqlen, aligned_seqlen, unaligned_seqlen;
+ uint32_t nreads = argv [ 1 ] . u . data . elem_count;
+
+ /* require the same dimension for both inputs */
+ if ( argv [ 1 ] . u . data . elem_count != argv [ 3 ] . u . data . elem_count )
+ return RC ( rcXF, rcFunction, rcExecuting, rcData, rcInconsistent );
+
+ /* offset base pointers to start of row */
+ aligned += argv [ 0 ] . u . data . first_elem;
+ aligned_len += argv [ 1 ] . u . data . first_elem;
+ unaligned += argv [ 2 ] . u . data . first_elem;
+ unaligned_len += argv [ 3 ] . u . data . first_elem;
+
+ /* calculate new sequence length */
+ for ( i = seqlen = 0; i < nreads; ++ i )
+ seqlen += unaligned_len [ i ] != 0 ? unaligned_len [ i ] : aligned_len [ i ];
+
+ /* set output buffer size */
+ rslt -> data -> elem_bits = 8;
+ rc = KDataBufferResize ( rslt -> data, seqlen );
+ if ( rc != 0 )
+ return rc;
+
+ /* produce final sequence */
+ for ( dst = rslt -> data -> base, i = seqlen = aligned_seqlen = unaligned_seqlen = 0; i < nreads; ++ i )
+ {
+ /* give preference to unaligned */
+ if ( unaligned_len [ i ] != 0 )
+ {
+ memcpy ( & dst [ seqlen ], & unaligned [ unaligned_seqlen ], unaligned_len [ i ] );
+ seqlen += unaligned_len [ i ];
+ }
+ else
+ {
+ memcpy ( & dst [ seqlen ], & aligned [ aligned_seqlen ], aligned_len [ i ] );
+ seqlen += aligned_len [ i ];
+ }
+
+ aligned_seqlen += aligned_len [ i ];
+ unaligned_seqlen += unaligned_len [ i ];
+ }
+
+ rslt -> elem_count = seqlen;
+
+ return 0;
+}
+
+/*
+ * function < type T >
+ * T NCBI:align:seq_construct_read #1 (T read, INSDC:coord:len read_len,
+ * T cmp_read, INSDC:coord:len cmp_read_len);
+ */
+VTRANSFACT_IMPL ( NCBI_align_seq_construct_read, 1, 0, 0 )
+ ( const void *Self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ if (info->fdesc.desc.intrinsic_bits * info->fdesc.desc.intrinsic_dim != 8)
+ return RC(rcAlign, rcFunction, rcConstructing, rcType, rcIncorrect);
+ rslt->u.ndf = seq_construct_read;
+ rslt->variant = vftRow;
+ return 0;
+}
diff --git a/libs/axf/seq-restore-read.c b/libs/axf/seq-restore-read.c
index f1667c6..1141717 100644
--- a/libs/axf/seq-restore-read.c
+++ b/libs/axf/seq-restore-read.c
@@ -28,6 +28,7 @@
#include <vdb/database.h>
#include <vdb/table.h>
#include <vdb/cursor.h>
+#include <vdb/schema.h>
#include <klib/defs.h>
@@ -82,7 +83,7 @@ rc_t RestoreReadMake ( RestoreRead **objp, const VTable *tbl )
VDatabaseRelease ( db );
if ( rc == 0 ) {
/* create a cursor */
- rc = VTableCreateCachedCursorRead(patbl, &obj->curs, 4*1024*1024);
+ rc = VTableCreateCachedCursorRead(patbl, &obj->curs, 256*1024*1024UL);
VTableRelease ( patbl );
if ( rc == 0 ) {
/* add columns to cursor */
@@ -109,7 +110,7 @@ static INSDC_4na_bin map[]={
/*3 0011 - 1100*/ 12,
/*4 0100 - 0010*/ 2,
/*5 0101 - 1010*/ 10,
-/*6 0110 - 0110*/ 6,
+/* 0110 - 0110*/ 6,
/*7 0111 - 1110*/ 14,
/*8 1000 - 0001*/ 1,
/*9 1001 - 1001*/ 9,
@@ -136,21 +137,21 @@ rc_t CC seq_restore_read_impl ( void *data, const VXformInfo *info, int64_t row_
const int64_t *align_id = argv[1].u.data.base;
const INSDC_coord_len *read_len = argv[2].u.data.base;
const uint8_t *read_type = argv[3].u.data.base;
-
+
assert(argv[0].u.data.elem_bits == 8);
assert(argv[1].u.data.elem_bits == 64);
assert(argv[2].u.data.elem_bits == sizeof(INSDC_coord_len)*8);
assert(argv[2].u.data.elem_count == num_reads);
assert(argv[3].u.data.elem_count == num_reads);
-
-
+
+
src += argv [ 0 ] . u . data . first_elem;
align_id += argv [ 1 ] . u . data . first_elem;
read_len += argv [ 2 ] . u . data . first_elem;
read_type += argv [ 3 ] . u . data . first_elem;
-
+
for(i=0,len=0;i<num_reads;i++){
- len+=read_len[i];
+ len+=read_len[i];
}
/* resize output row */
rslt->data->elem_bits = 8;
@@ -158,46 +159,40 @@ rc_t CC seq_restore_read_impl ( void *data, const VXformInfo *info, int64_t row_
rslt->elem_count = len;
dst = rslt->data->base;
if ( rc == 0 && len > 0 ) {
- if(len == src_len){ /*** shortcut - all data is local ***/
- memcpy(dst,src,len);
- } else for(i=0;i<num_reads && rc == 0;i++){ /*** checking read by read ***/
- if(align_id[i] > 0) {
- /* set the starting row id */
- rc = VCursorSetRowId ( self -> curs, align_id[i] );
- if(rc==0) rc = VCursorOpenRow ( self -> curs );
- if(rc==0){
- const INSDC_4na_bin *r_src;
- uint32_t r_src_len;
- rc = VCursorCellData ( self -> curs, self -> read_idx, NULL, ( const void** ) & r_src, NULL, & r_src_len );
- if(rc == 0){
- if(r_src_len == read_len[i]){
- if(read_type[i]&SRA_READ_TYPE_FORWARD){
- memcpy(dst,r_src,read_len[i]);
- }else if(read_type[i]&SRA_READ_TYPE_REVERSE){
- int j,k;
- for(j=0,k=read_len[i]-1;j<read_len[i];j++,k--){
- dst[j]=map[r_src[k]&15];
- }
- } else {
- rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
- }
- } else {
- rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
- }
- }
- VCursorCloseRow ( self -> curs );
- }
- } else { /*** data is in READ column **/
- if(src_len >= read_len[i]){
- memcpy(dst,src,read_len[i]);
- src_len -= read_len[i];
- src += read_len[i];
- } else {
- return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent );
- }
- }
- dst += read_len[i];
- }
+ if(len == src_len){ /*** shortcut - all data is local ***/
+ memcpy(dst,src,len);
+ } else for(i=0;i<num_reads && rc == 0;i++){ /*** checking read by read ***/
+ if(align_id[i] > 0) {
+ const INSDC_4na_bin *r_src;
+ uint32_t r_src_len;
+ rc = VCursorCellDataDirect ( self -> curs, align_id[i], self -> read_idx, NULL, ( const void** ) & r_src, NULL, & r_src_len );
+ if(rc == 0){
+ if(r_src_len == read_len[i]){
+ if(read_type[i]&SRA_READ_TYPE_FORWARD){
+ memcpy(dst,r_src,read_len[i]);
+ }else if(read_type[i]&SRA_READ_TYPE_REVERSE){
+ int j,k;
+ for(j=0,k=read_len[i]-1;j<read_len[i];j++,k--){
+ dst[j]=map[r_src[k]&15];
+ }
+ } else {
+ rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
+ }
+ } else {
+ rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
+ }
+ }
+ } else { /*** data is in READ column **/
+ if(src_len >= read_len[i]){
+ memcpy(dst,src,read_len[i]);
+ src_len -= read_len[i];
+ src += read_len[i];
+ } else {
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent );
+ }
+ }
+ dst += read_len[i];
+ }
}
return rc;
}
@@ -214,9 +209,8 @@ VTRANSFACT_IMPL ( ALIGN_seq_restore_read, 1, 0, 0 ) ( const void *Self, const VX
if(rc == 0 ) {
rslt->self = fself;
rslt->u.ndf = seq_restore_read_impl;
- rslt->variant = vftNonDetRow;
+ rslt->variant = vftRow;
rslt -> whack = RestoreReadWhack;
}
return rc;
}
-
diff --git a/libs/axf/template-len.c b/libs/axf/template-len.c
index b1a3dff..07266db 100644
--- a/libs/axf/template-len.c
+++ b/libs/axf/template-len.c
@@ -42,50 +42,80 @@
static
rc_t CC template_len_impl(void *data,const VXformInfo *info, int64_t row_id, VRowResult *rslt, uint32_t argc, const VRowData argv [] )
{
- rc_t rc;
- int32_t *dst;
- const INSDC_coord_zero *p1 = argv[0].u.data.base;
- const INSDC_coord_zero *p2 = argv[1].u.data.base;
- const INSDC_coord_len *l1 = argv[2].u.data.base;
- const INSDC_coord_len *l2 = argv[3].u.data.base;
- const char *n1 = argv[4].u.data.base;
- const char *n2 = argv[5].u.data.base;
- const INSDC_coord_one *r1 = argv[6].u.data.base;
+ rc_t rc;
+ int32_t *dst;
+ const INSDC_coord_zero *p1 = argv[0].u.data.base;
+ const INSDC_coord_zero *p2 = argv[1].u.data.base;
+ const INSDC_coord_len *l1 = argv[2].u.data.base;
+ const INSDC_coord_len *l2 = argv[3].u.data.base;
+ const char *n1 = argv[4].u.data.base;
+ const char *n2 = argv[5].u.data.base;
+ const INSDC_coord_one *r1 = argv[6].u.data.base;
- /** primary should have everything defines ***/
- assert(argv[0].u.data.elem_count == 1);
- assert(argv[2].u.data.elem_count == 1);
- assert(argv[4].u.data.elem_count > 0 );
- assert(argv[6].u.data.elem_count == 1);
+ /** primary should have everything defines ***/
+ assert(argv[0].u.data.elem_count == 1);
+ assert(argv[2].u.data.elem_count == 1);
+ assert(argv[4].u.data.elem_count > 0 );
+ assert(argv[6].u.data.elem_count == 1);
+ rc = KDataBufferResize(rslt->data, 1);
+ if(rc != 0) return rc;
+ rslt->elem_count=1;
+ dst = rslt->data->base;
+ dst[0] = 0;
- rc = KDataBufferResize(rslt->data, 1);
- if(rc != 0) return rc;
- rslt->elem_count=1;
- dst = rslt->data->base;
- dst[0]=0;
-
- /*** check if the mate is mapped **/
- if( argv[1].u.data.elem_count > 0
- && argv[3].u.data.elem_count > 0
- && argv[4].u.data.elem_count == argv[5].u.data.elem_count){
- n1+=argv[4].u.data.first_elem;
- n2+=argv[5].u.data.first_elem;
- r1+=argv[6].u.data.first_elem;
- if(memcmp(n1,n2,argv[4].u.data.elem_count)==0){ /*** same reference name ***/
- dst[0] = p2[argv[1].u.data.first_elem] - p1[argv[0].u.data.first_elem];
- if(dst[0] < 0){
- dst[0] -= l1[argv[2].u.data.first_elem];
- } else if (dst[0] > 0) {
- dst[0] += l2[argv[3].u.data.first_elem];
- } else if(r1[0]==1){/*** bam wants to give positive TLEN ***/
- dst[0] = l1[argv[2].u.data.first_elem];
- } else if(r1[0]==2){/*** bam wants to give negative TLEN ***/
- dst[0] = -l2[argv[3].u.data.first_elem];
- }
- }
- }
- return rc;
+ /*** check if the mate is mapped **/
+ if( argv[1].u.data.elem_count > 0
+ && argv[3].u.data.elem_count > 0
+ && argv[4].u.data.elem_count == argv[5].u.data.elem_count)
+ {
+ n1+=argv[4].u.data.first_elem;
+ n2+=argv[5].u.data.first_elem;
+ r1+=argv[6].u.data.first_elem;
+
+ if( argv[4].u.data.elem_count == argv[5].u.data.elem_count
+ && memcmp(n1,n2,argv[4].u.data.elem_count)==0) /*** same reference name ***/
+ {
+#if 1
+ unsigned const self_left = p1[argv[0].u.data.first_elem];
+ unsigned const mate_left = p2[argv[1].u.data.first_elem];
+ unsigned const self_right = self_left + l1[argv[2].u.data.first_elem];
+ unsigned const mate_right = mate_left + l2[argv[3].u.data.first_elem];
+ unsigned const leftmost = (self_left < mate_left ) ? self_left : mate_left;
+ unsigned const rightmost = (self_right > mate_right) ? self_right : mate_right;
+ unsigned const tlen = rightmost - leftmost;
+
+ /* The standard says, "The leftmost segment has a plus sign and the rightmost has a minus sign." */
+ if ( (self_left <= mate_left && self_right >= mate_right) /* mate fully contained within self or */
+ || (mate_left <= self_left && mate_right >= self_right)) /* self fully contained within mate; */
+ {
+ if (self_left < mate_left || (r1[0] == 1 && self_left == mate_left))
+ dst[0] = tlen;
+ else
+ dst[0] = -tlen;
+ }
+ else if ( (self_right == mate_right && mate_left == leftmost) /* both are rightmost, but mate is leftmost */
+ || self_right == rightmost)
+ {
+ dst[0] = -tlen;
+ }
+ else
+ dst[0] = tlen;
+#else
+ dst[0] = p2[argv[1].u.data.first_elem] - p1[argv[0].u.data.first_elem];
+ if(dst[0] < 0){
+ dst[0] -= l1[argv[2].u.data.first_elem];
+ } else if (dst[0] > 0) {
+ dst[0] += l2[argv[3].u.data.first_elem];
+ } else if(r1[0]==1){/*** bam wants to give positive TLEN ***/
+ dst[0] = l1[argv[2].u.data.first_elem];
+ } else if(r1[0]==2){/*** bam wants to give negative TLEN ***/
+ dst[0] = -l2[argv[3].u.data.first_elem];
+ }
+#endif
+ }
+ }
+ return 0;
}
VTRANSFACT_IMPL ( NCBI_align_template_len, 1, 0, 0 ) ( const void *self, const VXfactInfo *info, VFuncDesc *rslt,
diff --git a/libs/ext/Makefile b/libs/ext/Makefile
index 8d213f2..faa5ee5 100644
--- a/libs/ext/Makefile
+++ b/libs/ext/Makefile
@@ -33,7 +33,8 @@ include $(TOP)/build/Makefile.shell
#
SUBDIRS = \
zlib \
- bzip2
+ bzip2 \
+ curl
default: $(SUBDIRS)
diff --git a/libs/ext/bzip2/Makefile b/libs/ext/bzip2/Makefile
index 7940b76..7a0a693 100644
--- a/libs/ext/bzip2/Makefile
+++ b/libs/ext/bzip2/Makefile
@@ -42,16 +42,16 @@ ALL_LIBS = \
#-------------------------------------------------------------------------------
# outer targets
#
-std: makedirs download-$(OS)
+std: makedirs download
@ $(MAKE_CMD) $(TARGDIR)/$@
all: makedirs download
@ $(MAKE_CMD) $(TARGDIR)/$@
-$(INT_LIBS): makedirs download-$(OS)
+$(INT_LIBS): makedirs download
@ $(MAKE_CMD) $(ILIBDIR)/$@
-$(EXT_LIBS): makedirs download-$(OS)
+$(EXT_LIBS): makedirs download
@ $(MAKE_CMD) $(LIBDIR)/$@
.PHONY: all std $(ALL_LIBS)
@@ -66,7 +66,7 @@ $(TARGDIR)/all: $(LIBDIR)/libbz2
#-------------------------------------------------------------------------------
# std
#
-$(TARGDIR)/std: $(LIBDIR)/libbz2-$(OS)
+$(TARGDIR)/std: $(LIBDIR)/libbz2
.PHONY: $(TARGDIR)/std
@@ -74,37 +74,18 @@ $(TARGDIR)/std: $(LIBDIR)/libbz2-$(OS)
# clean
#
clean: stdclean
+ @ rm -f libbz2.vers
.PHONY: clean
#-------------------------------------------------------------------------------
-# libbz2-$(OS)
-#
-NORMALLY_HAVE = \
- unix \
- linux \
- mac \
- sun
-
-DONT_HAVE = \
- win
-
-LIBBZ2_SYS_HAS_LIB = \
- $(addprefix $(LIBDIR)/libbz2-,$(NORMALLY_HAVE))
-
-$(LIBBZ2_SYS_HAS_LIB):
- @ true
-
-LIBBZ2_SYS_NEEDS_LIB = \
- $(addprefix $(LIBDIR)/libbz2-,$(DONT_HAVE))
-
-$(LIBBZ2_SYS_NEEDS_LIB): $(LIBDIR)/libbz2
-
-
-#-------------------------------------------------------------------------------
# libbz2
#
+ifeq (win,$(OS))
$(LIBDIR)/libbz2: $(addprefix $(LIBDIR)/libbz2.,$(LIBEXT))
+else
+$(LIBDIR)/libbz2: $(addprefix $(LIBDIR)/libbz2.,$(LIBX))
+endif
LIBBZ2_SRC = \
blocksort \
@@ -128,38 +109,52 @@ $(LIBDIR)/libbz2.$(LIBX): $(LIBBZ2_OBJ)
#-------------------------------------------------------------------------------
-# download-$(OS)
-#
-LIBBZ2_SYS_HAS_SRC = \
- $(addprefix download-,$(NORMALLY_HAVE))
-
-$(LIBBZ2_SYS_HAS_SRC):
- @ true
-
-LIBBZ2_SYS_NEEDS_SRC = \
- $(addprefix download-,$(DONT_HAVE))
-
-$(LIBBZ2_SYS_NEEDS_SRC): download
-
-
-#-------------------------------------------------------------------------------
# libbz2 download
#
BZIP2_VERS := \
1.0.6
-bzip2-$(BZIP2_VERS).tar.gz:
+BZIP2_TAR = \
+ bzip2-$(BZIP2_VERS).tar
+
+BZIP2_TAR_GZ = \
+ $(BZIP2_TAR).gz
+
+ifeq (win,$(OS))
+ECHO_VERS = echo -ne $(BZIP2_VERS) "\n"
+else
+ECHO_VERS = echo $(BZIP2_VERS)
+endif
+
+ifeq (sun,$(OS))
+ BZIP2_TAR_GET = $(BZIP2_TAR)
+ TAR_CMD = tar -xf
+else
+ BZIP2_TAR_GET = $(BZIP2_TAR_GZ)
+ TAR_CMD = tar --no-same-owner -x -z -f
+endif
+
+ifeq (mac,$(OS))
+RETRIEVE = curl -O
+else
+RETRIEVE = wget
+endif
+
+$(BZIP2_TAR_GZ):
@ echo downloading the sources
- wget http://bzip.org/$(BZIP2_VERS)/bzip2-$(BZIP2_VERS).tar.gz
+ $(RETRIEVE) http://bzip.org/$(BZIP2_VERS)/bzip2-$(BZIP2_VERS).tar.gz
@ touch $@
-libbz2.vers: bzip2-$(BZIP2_VERS).tar.gz
+$(BZIP2_TAR): $(BZIP2_TAR_GZ)
+ gzcat $^ > $@
+
+libbz2.vers: $(BZIP2_TAR_GET)
@ echo unpacking the sources
- tar xzf $^
+ $(TAR_CMD) $^
mv bzip2-$(BZIP2_VERS)/*.[ch] .
mv bzip2-$(BZIP2_VERS)/*.def .
- rm -rf bzip2-$(BZIP2_VERS)
- @ echo $(BZIP2_VERS) > $@
+ -rm -rf bzip2-$(BZIP2_VERS)
+ @ $(ECHO_VERS) > $@
download: libbz2.vers
diff --git a/libs/ext/bzip2/blocksort.c b/libs/ext/bzip2/blocksort.c
new file mode 100644
index 0000000..d0d662c
--- /dev/null
+++ b/libs/ext/bzip2/blocksort.c
@@ -0,0 +1,1094 @@
+
+/*-------------------------------------------------------------*/
+/*--- Block sorting machinery ---*/
+/*--- blocksort.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*---------------------------------------------*/
+/*--- Fallback O(N log(N)^2) sorting ---*/
+/*--- algorithm, for repetitive blocks ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+__inline__
+void fallbackSimpleSort ( UInt32* fmap,
+ UInt32* eclass,
+ Int32 lo,
+ Int32 hi )
+{
+ Int32 i, j, tmp;
+ UInt32 ec_tmp;
+
+ if (lo == hi) return;
+
+ if (hi - lo > 3) {
+ for ( i = hi-4; i >= lo; i-- ) {
+ tmp = fmap[i];
+ ec_tmp = eclass[tmp];
+ for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )
+ fmap[j-4] = fmap[j];
+ fmap[j-4] = tmp;
+ }
+ }
+
+ for ( i = hi-1; i >= lo; i-- ) {
+ tmp = fmap[i];
+ ec_tmp = eclass[tmp];
+ for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )
+ fmap[j-1] = fmap[j];
+ fmap[j-1] = tmp;
+ }
+}
+
+
+/*---------------------------------------------*/
+#define fswap(zz1, zz2) \
+ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define fvswap(zzp1, zzp2, zzn) \
+{ \
+ Int32 yyp1 = (zzp1); \
+ Int32 yyp2 = (zzp2); \
+ Int32 yyn = (zzn); \
+ while (yyn > 0) { \
+ fswap(fmap[yyp1], fmap[yyp2]); \
+ yyp1++; yyp2++; yyn--; \
+ } \
+}
+
+
+#define fmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define fpush(lz,hz) { stackLo[sp] = lz; \
+ stackHi[sp] = hz; \
+ sp++; }
+
+#define fpop(lz,hz) { sp--; \
+ lz = stackLo[sp]; \
+ hz = stackHi[sp]; }
+
+#define FALLBACK_QSORT_SMALL_THRESH 10
+#define FALLBACK_QSORT_STACK_SIZE 100
+
+
+static
+void fallbackQSort3 ( UInt32* fmap,
+ UInt32* eclass,
+ Int32 loSt,
+ Int32 hiSt )
+{
+ Int32 unLo, unHi, ltLo, gtHi, n, m;
+ Int32 sp, lo, hi;
+ UInt32 med, r, r3;
+ Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];
+ Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];
+
+ r = 0;
+
+ sp = 0;
+ fpush ( loSt, hiSt );
+
+ while (sp > 0) {
+
+ AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );
+
+ fpop ( lo, hi );
+ if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {
+ fallbackSimpleSort ( fmap, eclass, lo, hi );
+ continue;
+ }
+
+ /* Random partitioning. Median of 3 sometimes fails to
+ avoid bad cases. Median of 9 seems to help but
+ looks rather expensive. This too seems to work but
+ is cheaper. Guidance for the magic constants
+ 7621 and 32768 is taken from Sedgewick's algorithms
+ book, chapter 35.
+ */
+ r = ((r * 7621) + 1) % 32768;
+ r3 = r % 3;
+ if (r3 == 0) med = eclass[fmap[lo]]; else
+ if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else
+ med = eclass[fmap[hi]];
+
+ unLo = ltLo = lo;
+ unHi = gtHi = hi;
+
+ while (1) {
+ while (1) {
+ if (unLo > unHi) break;
+ n = (Int32)eclass[fmap[unLo]] - (Int32)med;
+ if (n == 0) {
+ fswap(fmap[unLo], fmap[ltLo]);
+ ltLo++; unLo++;
+ continue;
+ };
+ if (n > 0) break;
+ unLo++;
+ }
+ while (1) {
+ if (unLo > unHi) break;
+ n = (Int32)eclass[fmap[unHi]] - (Int32)med;
+ if (n == 0) {
+ fswap(fmap[unHi], fmap[gtHi]);
+ gtHi--; unHi--;
+ continue;
+ };
+ if (n < 0) break;
+ unHi--;
+ }
+ if (unLo > unHi) break;
+ fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;
+ }
+
+ AssertD ( unHi == unLo-1, "fallbackQSort3(2)" );
+
+ if (gtHi < ltLo) continue;
+
+ n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);
+ m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);
+
+ n = lo + unLo - ltLo - 1;
+ m = hi - (gtHi - unHi) + 1;
+
+ if (n - lo > hi - m) {
+ fpush ( lo, n );
+ fpush ( m, hi );
+ } else {
+ fpush ( m, hi );
+ fpush ( lo, n );
+ }
+ }
+}
+
+#undef fmin
+#undef fpush
+#undef fpop
+#undef fswap
+#undef fvswap
+#undef FALLBACK_QSORT_SMALL_THRESH
+#undef FALLBACK_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+ nblock > 0
+ eclass exists for [0 .. nblock-1]
+ ((UChar*)eclass) [0 .. nblock-1] holds block
+ ptr exists for [0 .. nblock-1]
+
+ Post:
+ ((UChar*)eclass) [0 .. nblock-1] holds block
+ All other areas of eclass destroyed
+ fmap [0 .. nblock-1] holds sorted order
+ bhtab [ 0 .. 2+(nblock/32) ] destroyed
+*/
+
+#define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31))
+#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))
+#define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))
+#define WORD_BH(zz) bhtab[(zz) >> 5]
+#define UNALIGNED_BH(zz) ((zz) & 0x01f)
+
+static
+void fallbackSort ( UInt32* fmap,
+ UInt32* eclass,
+ UInt32* bhtab,
+ Int32 nblock,
+ Int32 verb )
+{
+ Int32 ftab[257];
+ Int32 ftabCopy[256];
+ Int32 H, i, j, k, l, r, cc, cc1;
+ Int32 nNotDone;
+ Int32 nBhtab;
+ UChar* eclass8 = (UChar*)eclass;
+
+ /*--
+ Initial 1-char radix sort to generate
+ initial fmap and initial BH bits.
+ --*/
+ if (verb >= 4)
+ VPrintf0 ( " bucket sorting ...\n" );
+ for (i = 0; i < 257; i++) ftab[i] = 0;
+ for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;
+ for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i];
+ for (i = 1; i < 257; i++) ftab[i] += ftab[i-1];
+
+ for (i = 0; i < nblock; i++) {
+ j = eclass8[i];
+ k = ftab[j] - 1;
+ ftab[j] = k;
+ fmap[k] = i;
+ }
+
+ nBhtab = 2 + (nblock / 32);
+ for (i = 0; i < nBhtab; i++) bhtab[i] = 0;
+ for (i = 0; i < 256; i++) SET_BH(ftab[i]);
+
+ /*--
+ Inductively refine the buckets. Kind-of an
+ "exponential radix sort" (!), inspired by the
+ Manber-Myers suffix array construction algorithm.
+ --*/
+
+ /*-- set sentinel bits for block-end detection --*/
+ for (i = 0; i < 32; i++) {
+ SET_BH(nblock + 2*i);
+ CLEAR_BH(nblock + 2*i + 1);
+ }
+
+ /*-- the log(N) loop --*/
+ H = 1;
+ while (1) {
+
+ if (verb >= 4)
+ VPrintf1 ( " depth %6d has ", H );
+
+ j = 0;
+ for (i = 0; i < nblock; i++) {
+ if (ISSET_BH(i)) j = i;
+ k = fmap[i] - H; if (k < 0) k += nblock;
+ eclass[k] = j;
+ }
+
+ nNotDone = 0;
+ r = -1;
+ while (1) {
+
+ /*-- find the next non-singleton bucket --*/
+ k = r + 1;
+ while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+ if (ISSET_BH(k)) {
+ while (WORD_BH(k) == 0xffffffff) k += 32;
+ while (ISSET_BH(k)) k++;
+ }
+ l = k - 1;
+ if (l >= nblock) break;
+ while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+ if (!ISSET_BH(k)) {
+ while (WORD_BH(k) == 0x00000000) k += 32;
+ while (!ISSET_BH(k)) k++;
+ }
+ r = k - 1;
+ if (r >= nblock) break;
+
+ /*-- now [l, r] bracket current bucket --*/
+ if (r > l) {
+ nNotDone += (r - l + 1);
+ fallbackQSort3 ( fmap, eclass, l, r );
+
+ /*-- scan bucket and generate header bits-- */
+ cc = -1;
+ for (i = l; i <= r; i++) {
+ cc1 = eclass[fmap[i]];
+ if (cc != cc1) { SET_BH(i); cc = cc1; };
+ }
+ }
+ }
+
+ if (verb >= 4)
+ VPrintf1 ( "%6d unresolved strings\n", nNotDone );
+
+ H *= 2;
+ if (H > nblock || nNotDone == 0) break;
+ }
+
+ /*--
+ Reconstruct the original block in
+ eclass8 [0 .. nblock-1], since the
+ previous phase destroyed it.
+ --*/
+ if (verb >= 4)
+ VPrintf0 ( " reconstructing block ...\n" );
+ j = 0;
+ for (i = 0; i < nblock; i++) {
+ while (ftabCopy[j] == 0) j++;
+ ftabCopy[j]--;
+ eclass8[fmap[i]] = (UChar)j;
+ }
+ AssertH ( j < 256, 1005 );
+}
+
+#undef SET_BH
+#undef CLEAR_BH
+#undef ISSET_BH
+#undef WORD_BH
+#undef UNALIGNED_BH
+
+
+/*---------------------------------------------*/
+/*--- The main, O(N^2 log(N)) sorting ---*/
+/*--- algorithm. Faster for "normal" ---*/
+/*--- non-repetitive blocks. ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+__inline__
+Bool mainGtU ( UInt32 i1,
+ UInt32 i2,
+ UChar* block,
+ UInt16* quadrant,
+ UInt32 nblock,
+ Int32* budget )
+{
+ Int32 k;
+ UChar c1, c2;
+ UInt16 s1, s2;
+
+ AssertD ( i1 != i2, "mainGtU" );
+ /* 1 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 2 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 3 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 4 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 5 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 6 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 7 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 8 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 9 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 10 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 11 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 12 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+
+ k = nblock + 8;
+
+ do {
+ /* 1 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 2 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 3 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 4 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 5 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 6 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 7 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 8 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+
+ if (i1 >= nblock) i1 -= nblock;
+ if (i2 >= nblock) i2 -= nblock;
+
+ k -= 8;
+ (*budget)--;
+ }
+ while (k >= 0);
+
+ return False;
+}
+
+
+/*---------------------------------------------*/
+/*--
+ Knuth's increments seem to work better
+ than Incerpi-Sedgewick here. Possibly
+ because the number of elems to sort is
+ usually small, typically <= 20.
+--*/
+static
+Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
+ 9841, 29524, 88573, 265720,
+ 797161, 2391484 };
+
+static
+void mainSimpleSort ( UInt32* ptr,
+ UChar* block,
+ UInt16* quadrant,
+ Int32 nblock,
+ Int32 lo,
+ Int32 hi,
+ Int32 d,
+ Int32* budget )
+{
+ Int32 i, j, h, bigN, hp;
+ UInt32 v;
+
+ bigN = hi - lo + 1;
+ if (bigN < 2) return;
+
+ hp = 0;
+ while (incs[hp] < bigN) hp++;
+ hp--;
+
+ for (; hp >= 0; hp--) {
+ h = incs[hp];
+
+ i = lo + h;
+ while (True) {
+
+ /*-- copy 1 --*/
+ if (i > hi) break;
+ v = ptr[i];
+ j = i;
+ while ( mainGtU (
+ ptr[j-h]+d, v+d, block, quadrant, nblock, budget
+ ) ) {
+ ptr[j] = ptr[j-h];
+ j = j - h;
+ if (j <= (lo + h - 1)) break;
+ }
+ ptr[j] = v;
+ i++;
+
+ /*-- copy 2 --*/
+ if (i > hi) break;
+ v = ptr[i];
+ j = i;
+ while ( mainGtU (
+ ptr[j-h]+d, v+d, block, quadrant, nblock, budget
+ ) ) {
+ ptr[j] = ptr[j-h];
+ j = j - h;
+ if (j <= (lo + h - 1)) break;
+ }
+ ptr[j] = v;
+ i++;
+
+ /*-- copy 3 --*/
+ if (i > hi) break;
+ v = ptr[i];
+ j = i;
+ while ( mainGtU (
+ ptr[j-h]+d, v+d, block, quadrant, nblock, budget
+ ) ) {
+ ptr[j] = ptr[j-h];
+ j = j - h;
+ if (j <= (lo + h - 1)) break;
+ }
+ ptr[j] = v;
+ i++;
+
+ if (*budget < 0) return;
+ }
+ }
+}
+
+
+/*---------------------------------------------*/
+/*--
+ The following is an implementation of
+ an elegant 3-way quicksort for strings,
+ described in a paper "Fast Algorithms for
+ Sorting and Searching Strings", by Robert
+ Sedgewick and Jon L. Bentley.
+--*/
+
+#define mswap(zz1, zz2) \
+ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define mvswap(zzp1, zzp2, zzn) \
+{ \
+ Int32 yyp1 = (zzp1); \
+ Int32 yyp2 = (zzp2); \
+ Int32 yyn = (zzn); \
+ while (yyn > 0) { \
+ mswap(ptr[yyp1], ptr[yyp2]); \
+ yyp1++; yyp2++; yyn--; \
+ } \
+}
+
+static
+__inline__
+UChar mmed3 ( UChar a, UChar b, UChar c )
+{
+ UChar t;
+ if (a > b) { t = a; a = b; b = t; };
+ if (b > c) {
+ b = c;
+ if (a > b) b = a;
+ }
+ return b;
+}
+
+#define mmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define mpush(lz,hz,dz) { stackLo[sp] = lz; \
+ stackHi[sp] = hz; \
+ stackD [sp] = dz; \
+ sp++; }
+
+#define mpop(lz,hz,dz) { sp--; \
+ lz = stackLo[sp]; \
+ hz = stackHi[sp]; \
+ dz = stackD [sp]; }
+
+
+#define mnextsize(az) (nextHi[az]-nextLo[az])
+
+#define mnextswap(az,bz) \
+ { Int32 tz; \
+ tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \
+ tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \
+ tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }
+
+
+#define MAIN_QSORT_SMALL_THRESH 20
+#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)
+#define MAIN_QSORT_STACK_SIZE 100
+
+static
+void mainQSort3 ( UInt32* ptr,
+ UChar* block,
+ UInt16* quadrant,
+ Int32 nblock,
+ Int32 loSt,
+ Int32 hiSt,
+ Int32 dSt,
+ Int32* budget )
+{
+ Int32 unLo, unHi, ltLo, gtHi, n, m, med;
+ Int32 sp, lo, hi, d;
+
+ Int32 stackLo[MAIN_QSORT_STACK_SIZE];
+ Int32 stackHi[MAIN_QSORT_STACK_SIZE];
+ Int32 stackD [MAIN_QSORT_STACK_SIZE];
+
+ Int32 nextLo[3];
+ Int32 nextHi[3];
+ Int32 nextD [3];
+
+ sp = 0;
+ mpush ( loSt, hiSt, dSt );
+
+ while (sp > 0) {
+
+ AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );
+
+ mpop ( lo, hi, d );
+ if (hi - lo < MAIN_QSORT_SMALL_THRESH ||
+ d > MAIN_QSORT_DEPTH_THRESH) {
+ mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );
+ if (*budget < 0) return;
+ continue;
+ }
+
+ med = (Int32)
+ mmed3 ( block[ptr[ lo ]+d],
+ block[ptr[ hi ]+d],
+ block[ptr[ (lo+hi)>>1 ]+d] );
+
+ unLo = ltLo = lo;
+ unHi = gtHi = hi;
+
+ while (True) {
+ while (True) {
+ if (unLo > unHi) break;
+ n = ((Int32)block[ptr[unLo]+d]) - med;
+ if (n == 0) {
+ mswap(ptr[unLo], ptr[ltLo]);
+ ltLo++; unLo++; continue;
+ };
+ if (n > 0) break;
+ unLo++;
+ }
+ while (True) {
+ if (unLo > unHi) break;
+ n = ((Int32)block[ptr[unHi]+d]) - med;
+ if (n == 0) {
+ mswap(ptr[unHi], ptr[gtHi]);
+ gtHi--; unHi--; continue;
+ };
+ if (n < 0) break;
+ unHi--;
+ }
+ if (unLo > unHi) break;
+ mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;
+ }
+
+ AssertD ( unHi == unLo-1, "mainQSort3(2)" );
+
+ if (gtHi < ltLo) {
+ mpush(lo, hi, d+1 );
+ continue;
+ }
+
+ n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);
+ m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);
+
+ n = lo + unLo - ltLo - 1;
+ m = hi - (gtHi - unHi) + 1;
+
+ nextLo[0] = lo; nextHi[0] = n; nextD[0] = d;
+ nextLo[1] = m; nextHi[1] = hi; nextD[1] = d;
+ nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;
+
+ if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+ if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);
+ if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+
+ AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" );
+ AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" );
+
+ mpush (nextLo[0], nextHi[0], nextD[0]);
+ mpush (nextLo[1], nextHi[1], nextD[1]);
+ mpush (nextLo[2], nextHi[2], nextD[2]);
+ }
+}
+
+#undef mswap
+#undef mvswap
+#undef mpush
+#undef mpop
+#undef mmin
+#undef mnextsize
+#undef mnextswap
+#undef MAIN_QSORT_SMALL_THRESH
+#undef MAIN_QSORT_DEPTH_THRESH
+#undef MAIN_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+ nblock > N_OVERSHOOT
+ block32 exists for [0 .. nblock-1 +N_OVERSHOOT]
+ ((UChar*)block32) [0 .. nblock-1] holds block
+ ptr exists for [0 .. nblock-1]
+
+ Post:
+ ((UChar*)block32) [0 .. nblock-1] holds block
+ All other areas of block32 destroyed
+ ftab [0 .. 65536 ] destroyed
+ ptr [0 .. nblock-1] holds sorted order
+ if (*budget < 0), sorting was abandoned
+*/
+
+#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])
+#define SETMASK (1 << 21)
+#define CLEARMASK (~(SETMASK))
+
+static
+void mainSort ( UInt32* ptr,
+ UChar* block,
+ UInt16* quadrant,
+ UInt32* ftab,
+ Int32 nblock,
+ Int32 verb,
+ Int32* budget )
+{
+ Int32 i, j, k, ss, sb;
+ Int32 runningOrder[256];
+ Bool bigDone[256];
+ Int32 copyStart[256];
+ Int32 copyEnd [256];
+ UChar c1;
+ Int32 numQSorted;
+ UInt16 s;
+ if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" );
+
+ /*-- set up the 2-byte frequency table --*/
+ for (i = 65536; i >= 0; i--) ftab[i] = 0;
+
+ j = block[0] << 8;
+ i = nblock-1;
+ for (; i >= 3; i -= 4) {
+ quadrant[i] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+ ftab[j]++;
+ quadrant[i-1] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);
+ ftab[j]++;
+ quadrant[i-2] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);
+ ftab[j]++;
+ quadrant[i-3] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);
+ ftab[j]++;
+ }
+ for (; i >= 0; i--) {
+ quadrant[i] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+ ftab[j]++;
+ }
+
+ /*-- (emphasises close relationship of block & quadrant) --*/
+ for (i = 0; i < BZ_N_OVERSHOOT; i++) {
+ block [nblock+i] = block[i];
+ quadrant[nblock+i] = 0;
+ }
+
+ if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" );
+
+ /*-- Complete the initial radix sort --*/
+ for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];
+
+ s = block[0] << 8;
+ i = nblock-1;
+ for (; i >= 3; i -= 4) {
+ s = (s >> 8) | (block[i] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i;
+ s = (s >> 8) | (block[i-1] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i-1;
+ s = (s >> 8) | (block[i-2] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i-2;
+ s = (s >> 8) | (block[i-3] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i-3;
+ }
+ for (; i >= 0; i--) {
+ s = (s >> 8) | (block[i] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i;
+ }
+
+ /*--
+ Now ftab contains the first loc of every small bucket.
+ Calculate the running order, from smallest to largest
+ big bucket.
+ --*/
+ for (i = 0; i <= 255; i++) {
+ bigDone [i] = False;
+ runningOrder[i] = i;
+ }
+
+ {
+ Int32 vv;
+ Int32 h = 1;
+ do h = 3 * h + 1; while (h <= 256);
+ do {
+ h = h / 3;
+ for (i = h; i <= 255; i++) {
+ vv = runningOrder[i];
+ j = i;
+ while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {
+ runningOrder[j] = runningOrder[j-h];
+ j = j - h;
+ if (j <= (h - 1)) goto zero;
+ }
+ zero:
+ runningOrder[j] = vv;
+ }
+ } while (h != 1);
+ }
+
+ /*--
+ The main sorting loop.
+ --*/
+
+ numQSorted = 0;
+
+ for (i = 0; i <= 255; i++) {
+
+ /*--
+ Process big buckets, starting with the least full.
+ Basically this is a 3-step process in which we call
+ mainQSort3 to sort the small buckets [ss, j], but
+ also make a big effort to avoid the calls if we can.
+ --*/
+ ss = runningOrder[i];
+
+ /*--
+ Step 1:
+ Complete the big bucket [ss] by quicksorting
+ any unsorted small buckets [ss, j], for j != ss.
+ Hopefully previous pointer-scanning phases have already
+ completed many of the small buckets [ss, j], so
+ we don't have to sort them at all.
+ --*/
+ for (j = 0; j <= 255; j++) {
+ if (j != ss) {
+ sb = (ss << 8) + j;
+ if ( ! (ftab[sb] & SETMASK) ) {
+ Int32 lo = ftab[sb] & CLEARMASK;
+ Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;
+ if (hi > lo) {
+ if (verb >= 4)
+ VPrintf4 ( " qsort [0x%x, 0x%x] "
+ "done %d this %d\n",
+ ss, j, numQSorted, hi - lo + 1 );
+ mainQSort3 (
+ ptr, block, quadrant, nblock,
+ lo, hi, BZ_N_RADIX, budget
+ );
+ numQSorted += (hi - lo + 1);
+ if (*budget < 0) return;
+ }
+ }
+ ftab[sb] |= SETMASK;
+ }
+ }
+
+ AssertH ( !bigDone[ss], 1006 );
+
+ /*--
+ Step 2:
+ Now scan this big bucket [ss] so as to synthesise the
+ sorted order for small buckets [t, ss] for all t,
+ including, magically, the bucket [ss,ss] too.
+ This will avoid doing Real Work in subsequent Step 1's.
+ --*/
+ {
+ for (j = 0; j <= 255; j++) {
+ copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK;
+ copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;
+ }
+ for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {
+ k = ptr[j]-1; if (k < 0) k += nblock;
+ c1 = block[k];
+ if (!bigDone[c1])
+ ptr[ copyStart[c1]++ ] = k;
+ }
+ for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {
+ k = ptr[j]-1; if (k < 0) k += nblock;
+ c1 = block[k];
+ if (!bigDone[c1])
+ ptr[ copyEnd[c1]-- ] = k;
+ }
+ }
+
+ AssertH ( (copyStart[ss]-1 == copyEnd[ss])
+ ||
+ /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.
+ Necessity for this case is demonstrated by compressing
+ a sequence of approximately 48.5 million of character
+ 251; 1.0.0/1.0.1 will then die here. */
+ (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),
+ 1007 )
+
+ for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;
+
+ /*--
+ Step 3:
+ The [ss] big bucket is now done. Record this fact,
+ and update the quadrant descriptors. Remember to
+ update quadrants in the overshoot area too, if
+ necessary. The "if (i < 255)" test merely skips
+ this updating for the last bucket processed, since
+ updating for the last bucket is pointless.
+
+ The quadrant array provides a way to incrementally
+ cache sort orderings, as they appear, so as to
+ make subsequent comparisons in fullGtU() complete
+ faster. For repetitive blocks this makes a big
+ difference (but not big enough to be able to avoid
+ the fallback sorting mechanism, exponential radix sort).
+
+ The precise meaning is: at all times:
+
+ for 0 <= i < nblock and 0 <= j <= nblock
+
+ if block[i] != block[j],
+
+ then the relative values of quadrant[i] and
+ quadrant[j] are meaningless.
+
+ else {
+ if quadrant[i] < quadrant[j]
+ then the string starting at i lexicographically
+ precedes the string starting at j
+
+ else if quadrant[i] > quadrant[j]
+ then the string starting at j lexicographically
+ precedes the string starting at i
+
+ else
+ the relative ordering of the strings starting
+ at i and j has not yet been determined.
+ }
+ --*/
+ bigDone[ss] = True;
+
+ if (i < 255) {
+ Int32 bbStart = ftab[ss << 8] & CLEARMASK;
+ Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;
+ Int32 shifts = 0;
+
+ while ((bbSize >> shifts) > 65534) shifts++;
+
+ for (j = bbSize-1; j >= 0; j--) {
+ Int32 a2update = ptr[bbStart + j];
+ UInt16 qVal = (UInt16)(j >> shifts);
+ quadrant[a2update] = qVal;
+ if (a2update < BZ_N_OVERSHOOT)
+ quadrant[a2update + nblock] = qVal;
+ }
+ AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );
+ }
+
+ }
+
+ if (verb >= 4)
+ VPrintf3 ( " %d pointers, %d sorted, %d scanned\n",
+ nblock, numQSorted, nblock - numQSorted );
+}
+
+#undef BIGFREQ
+#undef SETMASK
+#undef CLEARMASK
+
+
+/*---------------------------------------------*/
+/* Pre:
+ nblock > 0
+ arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]
+ ((UChar*)arr2) [0 .. nblock-1] holds block
+ arr1 exists for [0 .. nblock-1]
+
+ Post:
+ ((UChar*)arr2) [0 .. nblock-1] holds block
+ All other areas of block destroyed
+ ftab [ 0 .. 65536 ] destroyed
+ arr1 [0 .. nblock-1] holds sorted order
+*/
+void BZ2_blockSort ( EState* s )
+{
+ UInt32* ptr = s->ptr;
+ UChar* block = s->block;
+ UInt32* ftab = s->ftab;
+ Int32 nblock = s->nblock;
+ Int32 verb = s->verbosity;
+ Int32 wfact = s->workFactor;
+ UInt16* quadrant;
+ Int32 budget;
+ Int32 budgetInit;
+ Int32 i;
+
+ if (nblock < 10000) {
+ fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+ } else {
+ /* Calculate the location for quadrant, remembering to get
+ the alignment right. Assumes that &(block[0]) is at least
+ 2-byte aligned -- this should be ok since block is really
+ the first section of arr2.
+ */
+ i = nblock+BZ_N_OVERSHOOT;
+ if (i & 1) i++;
+ quadrant = (UInt16*)(&(block[i]));
+
+ /* (wfact-1) / 3 puts the default-factor-30
+ transition point at very roughly the same place as
+ with v0.1 and v0.9.0.
+ Not that it particularly matters any more, since the
+ resulting compressed stream is now the same regardless
+ of whether or not we use the main sort or fallback sort.
+ */
+ if (wfact < 1 ) wfact = 1;
+ if (wfact > 100) wfact = 100;
+ budgetInit = nblock * ((wfact-1) / 3);
+ budget = budgetInit;
+
+ mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );
+ if (verb >= 3)
+ VPrintf3 ( " %d work, %d block, ratio %5.2f\n",
+ budgetInit - budget,
+ nblock,
+ (float)(budgetInit - budget) /
+ (float)(nblock==0 ? 1 : nblock) );
+ if (budget < 0) {
+ if (verb >= 2)
+ VPrintf0 ( " too repetitive; using fallback"
+ " sorting algorithm\n" );
+ fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+ }
+ }
+
+ s->origPtr = -1;
+ for (i = 0; i < s->nblock; i++)
+ if (ptr[i] == 0)
+ { s->origPtr = i; break; };
+
+ AssertH( s->origPtr != -1, 1003 );
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end blocksort.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzip2-1.0.6.tar.gz b/libs/ext/bzip2/bzip2-1.0.6.tar.gz
new file mode 100644
index 0000000..e47e903
Binary files /dev/null and b/libs/ext/bzip2/bzip2-1.0.6.tar.gz differ
diff --git a/libs/ext/bzip2/bzip2.c b/libs/ext/bzip2/bzip2.c
new file mode 100644
index 0000000..6de9d1d
--- /dev/null
+++ b/libs/ext/bzip2/bzip2.c
@@ -0,0 +1,2034 @@
+
+/*-----------------------------------------------------------*/
+/*--- A block-sorting, lossless compressor bzip2.c ---*/
+/*-----------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+/* Place a 1 beside your platform, and 0 elsewhere.
+ Generic 32-bit Unix.
+ Also works on 64-bit Unix boxes.
+ This is the default.
+*/
+#define BZ_UNIX 1
+
+/*--
+ Win32, as seen by Jacob Navia's excellent
+ port of (Chris Fraser & David Hanson)'s excellent
+ lcc compiler. Or with MS Visual C.
+ This is selected automatically if compiled by a compiler which
+ defines _WIN32, not including the Cygwin GCC.
+--*/
+#define BZ_LCCWIN32 0
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#undef BZ_LCCWIN32
+#define BZ_LCCWIN32 1
+#undef BZ_UNIX
+#define BZ_UNIX 0
+#endif
+
+
+/*---------------------------------------------*/
+/*--
+ Some stuff for all platforms.
+--*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <math.h>
+#include <errno.h>
+#include <ctype.h>
+#include "bzlib.h"
+
+#define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); }
+#define ERROR_IF_NOT_ZERO(i) { if ((i) != 0) ioError(); }
+#define ERROR_IF_MINUS_ONE(i) { if ((i) == (-1)) ioError(); }
+
+
+/*---------------------------------------------*/
+/*--
+ Platform-specific stuff.
+--*/
+
+#if BZ_UNIX
+# include <fcntl.h>
+# include <sys/types.h>
+# include <utime.h>
+# include <unistd.h>
+# include <sys/stat.h>
+# include <sys/times.h>
+
+# define PATH_SEP '/'
+# define MY_LSTAT lstat
+# define MY_STAT stat
+# define MY_S_ISREG S_ISREG
+# define MY_S_ISDIR S_ISDIR
+
+# define APPEND_FILESPEC(root, name) \
+ root=snocString((root), (name))
+
+# define APPEND_FLAG(root, name) \
+ root=snocString((root), (name))
+
+# define SET_BINARY_MODE(fd) /**/
+
+# ifdef __GNUC__
+# define NORETURN __attribute__ ((noreturn))
+# else
+# define NORETURN /**/
+# endif
+
+# ifdef __DJGPP__
+# include <io.h>
+# include <fcntl.h>
+# undef MY_LSTAT
+# undef MY_STAT
+# define MY_LSTAT stat
+# define MY_STAT stat
+# undef SET_BINARY_MODE
+# define SET_BINARY_MODE(fd) \
+ do { \
+ int retVal = setmode ( fileno ( fd ), \
+ O_BINARY ); \
+ ERROR_IF_MINUS_ONE ( retVal ); \
+ } while ( 0 )
+# endif
+
+# ifdef __CYGWIN__
+# include <io.h>
+# include <fcntl.h>
+# undef SET_BINARY_MODE
+# define SET_BINARY_MODE(fd) \
+ do { \
+ int retVal = setmode ( fileno ( fd ), \
+ O_BINARY ); \
+ ERROR_IF_MINUS_ONE ( retVal ); \
+ } while ( 0 )
+# endif
+#endif /* BZ_UNIX */
+
+
+
+#if BZ_LCCWIN32
+# include <io.h>
+# include <fcntl.h>
+# include <sys\stat.h>
+
+# define NORETURN /**/
+# define PATH_SEP '\\'
+# define MY_LSTAT _stat
+# define MY_STAT _stat
+# define MY_S_ISREG(x) ((x) & _S_IFREG)
+# define MY_S_ISDIR(x) ((x) & _S_IFDIR)
+
+# define APPEND_FLAG(root, name) \
+ root=snocString((root), (name))
+
+# define APPEND_FILESPEC(root, name) \
+ root = snocString ((root), (name))
+
+# define SET_BINARY_MODE(fd) \
+ do { \
+ int retVal = setmode ( fileno ( fd ), \
+ O_BINARY ); \
+ ERROR_IF_MINUS_ONE ( retVal ); \
+ } while ( 0 )
+
+#endif /* BZ_LCCWIN32 */
+
+
+/*---------------------------------------------*/
+/*--
+ Some more stuff for all platforms :-)
+--*/
+
+typedef char Char;
+typedef unsigned char Bool;
+typedef unsigned char UChar;
+typedef int Int32;
+typedef unsigned int UInt32;
+typedef short Int16;
+typedef unsigned short UInt16;
+
+#define True ((Bool)1)
+#define False ((Bool)0)
+
+/*--
+ IntNative is your platform's `native' int size.
+ Only here to avoid probs with 64-bit platforms.
+--*/
+typedef int IntNative;
+
+
+/*---------------------------------------------------*/
+/*--- Misc (file handling) data decls ---*/
+/*---------------------------------------------------*/
+
+Int32 verbosity;
+Bool keepInputFiles, smallMode, deleteOutputOnInterrupt;
+Bool forceOverwrite, testFailsExist, unzFailsExist, noisy;
+Int32 numFileNames, numFilesProcessed, blockSize100k;
+Int32 exitValue;
+
+/*-- source modes; F==file, I==stdin, O==stdout --*/
+#define SM_I2O 1
+#define SM_F2O 2
+#define SM_F2F 3
+
+/*-- operation modes --*/
+#define OM_Z 1
+#define OM_UNZ 2
+#define OM_TEST 3
+
+Int32 opMode;
+Int32 srcMode;
+
+#define FILE_NAME_LEN 1034
+
+Int32 longestFileName;
+Char inName [FILE_NAME_LEN];
+Char outName[FILE_NAME_LEN];
+Char tmpName[FILE_NAME_LEN];
+Char *progName;
+Char progNameReally[FILE_NAME_LEN];
+FILE *outputHandleJustInCase;
+Int32 workFactor;
+
+static void panic ( const Char* ) NORETURN;
+static void ioError ( void ) NORETURN;
+static void outOfMemory ( void ) NORETURN;
+static void configError ( void ) NORETURN;
+static void crcError ( void ) NORETURN;
+static void cleanUpAndFail ( Int32 ) NORETURN;
+static void compressedStreamEOF ( void ) NORETURN;
+
+static void copyFileName ( Char*, Char* );
+static void* myMalloc ( Int32 );
+static void applySavedFileAttrToOutputFile ( IntNative fd );
+
+
+
+/*---------------------------------------------------*/
+/*--- An implementation of 64-bit ints. Sigh. ---*/
+/*--- Roll on widespread deployment of ANSI C9X ! ---*/
+/*---------------------------------------------------*/
+
+typedef
+ struct { UChar b[8]; }
+ UInt64;
+
+
+static
+void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 )
+{
+ n->b[7] = (UChar)((hi32 >> 24) & 0xFF);
+ n->b[6] = (UChar)((hi32 >> 16) & 0xFF);
+ n->b[5] = (UChar)((hi32 >> 8) & 0xFF);
+ n->b[4] = (UChar) (hi32 & 0xFF);
+ n->b[3] = (UChar)((lo32 >> 24) & 0xFF);
+ n->b[2] = (UChar)((lo32 >> 16) & 0xFF);
+ n->b[1] = (UChar)((lo32 >> 8) & 0xFF);
+ n->b[0] = (UChar) (lo32 & 0xFF);
+}
+
+
+static
+double uInt64_to_double ( UInt64* n )
+{
+ Int32 i;
+ double base = 1.0;
+ double sum = 0.0;
+ for (i = 0; i < 8; i++) {
+ sum += base * (double)(n->b[i]);
+ base *= 256.0;
+ }
+ return sum;
+}
+
+
+static
+Bool uInt64_isZero ( UInt64* n )
+{
+ Int32 i;
+ for (i = 0; i < 8; i++)
+ if (n->b[i] != 0) return 0;
+ return 1;
+}
+
+
+/* Divide *n by 10, and return the remainder. */
+static
+Int32 uInt64_qrm10 ( UInt64* n )
+{
+ UInt32 rem, tmp;
+ Int32 i;
+ rem = 0;
+ for (i = 7; i >= 0; i--) {
+ tmp = rem * 256 + n->b[i];
+ n->b[i] = tmp / 10;
+ rem = tmp % 10;
+ }
+ return rem;
+}
+
+
+/* ... and the Whole Entire Point of all this UInt64 stuff is
+ so that we can supply the following function.
+*/
+static
+void uInt64_toAscii ( char* outbuf, UInt64* n )
+{
+ Int32 i, q;
+ UChar buf[32];
+ Int32 nBuf = 0;
+ UInt64 n_copy = *n;
+ do {
+ q = uInt64_qrm10 ( &n_copy );
+ buf[nBuf] = q + '0';
+ nBuf++;
+ } while (!uInt64_isZero(&n_copy));
+ outbuf[nBuf] = 0;
+ for (i = 0; i < nBuf; i++)
+ outbuf[i] = buf[nBuf-i-1];
+}
+
+
+/*---------------------------------------------------*/
+/*--- Processing of complete files and streams ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+Bool myfeof ( FILE* f )
+{
+ Int32 c = fgetc ( f );
+ if (c == EOF) return True;
+ ungetc ( c, f );
+ return False;
+}
+
+
+/*---------------------------------------------*/
+static
+void compressStream ( FILE *stream, FILE *zStream )
+{
+ BZFILE* bzf = NULL;
+ UChar ibuf[5000];
+ Int32 nIbuf;
+ UInt32 nbytes_in_lo32, nbytes_in_hi32;
+ UInt32 nbytes_out_lo32, nbytes_out_hi32;
+ Int32 bzerr, bzerr_dummy, ret;
+
+ SET_BINARY_MODE(stream);
+ SET_BINARY_MODE(zStream);
+
+ if (ferror(stream)) goto errhandler_io;
+ if (ferror(zStream)) goto errhandler_io;
+
+ bzf = BZ2_bzWriteOpen ( &bzerr, zStream,
+ blockSize100k, verbosity, workFactor );
+ if (bzerr != BZ_OK) goto errhandler;
+
+ if (verbosity >= 2) fprintf ( stderr, "\n" );
+
+ while (True) {
+
+ if (myfeof(stream)) break;
+ nIbuf = fread ( ibuf, sizeof(UChar), 5000, stream );
+ if (ferror(stream)) goto errhandler_io;
+ if (nIbuf > 0) BZ2_bzWrite ( &bzerr, bzf, (void*)ibuf, nIbuf );
+ if (bzerr != BZ_OK) goto errhandler;
+
+ }
+
+ BZ2_bzWriteClose64 ( &bzerr, bzf, 0,
+ &nbytes_in_lo32, &nbytes_in_hi32,
+ &nbytes_out_lo32, &nbytes_out_hi32 );
+ if (bzerr != BZ_OK) goto errhandler;
+
+ if (ferror(zStream)) goto errhandler_io;
+ ret = fflush ( zStream );
+ if (ret == EOF) goto errhandler_io;
+ if (zStream != stdout) {
+ Int32 fd = fileno ( zStream );
+ if (fd < 0) goto errhandler_io;
+ applySavedFileAttrToOutputFile ( fd );
+ ret = fclose ( zStream );
+ outputHandleJustInCase = NULL;
+ if (ret == EOF) goto errhandler_io;
+ }
+ outputHandleJustInCase = NULL;
+ if (ferror(stream)) goto errhandler_io;
+ ret = fclose ( stream );
+ if (ret == EOF) goto errhandler_io;
+
+ if (verbosity >= 1) {
+ if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0) {
+ fprintf ( stderr, " no data compressed.\n");
+ } else {
+ Char buf_nin[32], buf_nout[32];
+ UInt64 nbytes_in, nbytes_out;
+ double nbytes_in_d, nbytes_out_d;
+ uInt64_from_UInt32s ( &nbytes_in,
+ nbytes_in_lo32, nbytes_in_hi32 );
+ uInt64_from_UInt32s ( &nbytes_out,
+ nbytes_out_lo32, nbytes_out_hi32 );
+ nbytes_in_d = uInt64_to_double ( &nbytes_in );
+ nbytes_out_d = uInt64_to_double ( &nbytes_out );
+ uInt64_toAscii ( buf_nin, &nbytes_in );
+ uInt64_toAscii ( buf_nout, &nbytes_out );
+ fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, "
+ "%5.2f%% saved, %s in, %s out.\n",
+ nbytes_in_d / nbytes_out_d,
+ (8.0 * nbytes_out_d) / nbytes_in_d,
+ 100.0 * (1.0 - nbytes_out_d / nbytes_in_d),
+ buf_nin,
+ buf_nout
+ );
+ }
+ }
+
+ return;
+
+ errhandler:
+ BZ2_bzWriteClose64 ( &bzerr_dummy, bzf, 1,
+ &nbytes_in_lo32, &nbytes_in_hi32,
+ &nbytes_out_lo32, &nbytes_out_hi32 );
+ switch (bzerr) {
+ case BZ_CONFIG_ERROR:
+ configError(); break;
+ case BZ_MEM_ERROR:
+ outOfMemory (); break;
+ case BZ_IO_ERROR:
+ errhandler_io:
+ ioError(); break;
+ default:
+ panic ( "compress:unexpected error" );
+ }
+
+ panic ( "compress:end" );
+ /*notreached*/
+}
+
+
+
+/*---------------------------------------------*/
+static
+Bool uncompressStream ( FILE *zStream, FILE *stream )
+{
+ BZFILE* bzf = NULL;
+ Int32 bzerr, bzerr_dummy, ret, nread, streamNo, i;
+ UChar obuf[5000];
+ UChar unused[BZ_MAX_UNUSED];
+ Int32 nUnused;
+ void* unusedTmpV;
+ UChar* unusedTmp;
+
+ nUnused = 0;
+ streamNo = 0;
+
+ SET_BINARY_MODE(stream);
+ SET_BINARY_MODE(zStream);
+
+ if (ferror(stream)) goto errhandler_io;
+ if (ferror(zStream)) goto errhandler_io;
+
+ while (True) {
+
+ bzf = BZ2_bzReadOpen (
+ &bzerr, zStream, verbosity,
+ (int)smallMode, unused, nUnused
+ );
+ if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
+ streamNo++;
+
+ while (bzerr == BZ_OK) {
+ nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
+ if (bzerr == BZ_DATA_ERROR_MAGIC) goto trycat;
+ if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0)
+ fwrite ( obuf, sizeof(UChar), nread, stream );
+ if (ferror(stream)) goto errhandler_io;
+ }
+ if (bzerr != BZ_STREAM_END) goto errhandler;
+
+ BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
+ if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
+
+ unusedTmp = (UChar*)unusedTmpV;
+ for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
+
+ BZ2_bzReadClose ( &bzerr, bzf );
+ if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
+
+ if (nUnused == 0 && myfeof(zStream)) break;
+ }
+
+ closeok:
+ if (ferror(zStream)) goto errhandler_io;
+ if (stream != stdout) {
+ Int32 fd = fileno ( stream );
+ if (fd < 0) goto errhandler_io;
+ applySavedFileAttrToOutputFile ( fd );
+ }
+ ret = fclose ( zStream );
+ if (ret == EOF) goto errhandler_io;
+
+ if (ferror(stream)) goto errhandler_io;
+ ret = fflush ( stream );
+ if (ret != 0) goto errhandler_io;
+ if (stream != stdout) {
+ ret = fclose ( stream );
+ outputHandleJustInCase = NULL;
+ if (ret == EOF) goto errhandler_io;
+ }
+ outputHandleJustInCase = NULL;
+ if (verbosity >= 2) fprintf ( stderr, "\n " );
+ return True;
+
+ trycat:
+ if (forceOverwrite) {
+ rewind(zStream);
+ while (True) {
+ if (myfeof(zStream)) break;
+ nread = fread ( obuf, sizeof(UChar), 5000, zStream );
+ if (ferror(zStream)) goto errhandler_io;
+ if (nread > 0) fwrite ( obuf, sizeof(UChar), nread, stream );
+ if (ferror(stream)) goto errhandler_io;
+ }
+ goto closeok;
+ }
+
+ errhandler:
+ BZ2_bzReadClose ( &bzerr_dummy, bzf );
+ switch (bzerr) {
+ case BZ_CONFIG_ERROR:
+ configError(); break;
+ case BZ_IO_ERROR:
+ errhandler_io:
+ ioError(); break;
+ case BZ_DATA_ERROR:
+ crcError();
+ case BZ_MEM_ERROR:
+ outOfMemory();
+ case BZ_UNEXPECTED_EOF:
+ compressedStreamEOF();
+ case BZ_DATA_ERROR_MAGIC:
+ if (zStream != stdin) fclose(zStream);
+ if (stream != stdout) fclose(stream);
+ if (streamNo == 1) {
+ return False;
+ } else {
+ if (noisy)
+ fprintf ( stderr,
+ "\n%s: %s: trailing garbage after EOF ignored\n",
+ progName, inName );
+ return True;
+ }
+ default:
+ panic ( "decompress:unexpected error" );
+ }
+
+ panic ( "decompress:end" );
+ return True; /*notreached*/
+}
+
+
+/*---------------------------------------------*/
+static
+Bool testStream ( FILE *zStream )
+{
+ BZFILE* bzf = NULL;
+ Int32 bzerr, bzerr_dummy, ret, nread, streamNo, i;
+ UChar obuf[5000];
+ UChar unused[BZ_MAX_UNUSED];
+ Int32 nUnused;
+ void* unusedTmpV;
+ UChar* unusedTmp;
+
+ nUnused = 0;
+ streamNo = 0;
+
+ SET_BINARY_MODE(zStream);
+ if (ferror(zStream)) goto errhandler_io;
+
+ while (True) {
+
+ bzf = BZ2_bzReadOpen (
+ &bzerr, zStream, verbosity,
+ (int)smallMode, unused, nUnused
+ );
+ if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
+ streamNo++;
+
+ while (bzerr == BZ_OK) {
+ nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
+ if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
+ }
+ if (bzerr != BZ_STREAM_END) goto errhandler;
+
+ BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
+ if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
+
+ unusedTmp = (UChar*)unusedTmpV;
+ for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
+
+ BZ2_bzReadClose ( &bzerr, bzf );
+ if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
+ if (nUnused == 0 && myfeof(zStream)) break;
+
+ }
+
+ if (ferror(zStream)) goto errhandler_io;
+ ret = fclose ( zStream );
+ if (ret == EOF) goto errhandler_io;
+
+ if (verbosity >= 2) fprintf ( stderr, "\n " );
+ return True;
+
+ errhandler:
+ BZ2_bzReadClose ( &bzerr_dummy, bzf );
+ if (verbosity == 0)
+ fprintf ( stderr, "%s: %s: ", progName, inName );
+ switch (bzerr) {
+ case BZ_CONFIG_ERROR:
+ configError(); break;
+ case BZ_IO_ERROR:
+ errhandler_io:
+ ioError(); break;
+ case BZ_DATA_ERROR:
+ fprintf ( stderr,
+ "data integrity (CRC) error in data\n" );
+ return False;
+ case BZ_MEM_ERROR:
+ outOfMemory();
+ case BZ_UNEXPECTED_EOF:
+ fprintf ( stderr,
+ "file ends unexpectedly\n" );
+ return False;
+ case BZ_DATA_ERROR_MAGIC:
+ if (zStream != stdin) fclose(zStream);
+ if (streamNo == 1) {
+ fprintf ( stderr,
+ "bad magic number (file not created by bzip2)\n" );
+ return False;
+ } else {
+ if (noisy)
+ fprintf ( stderr,
+ "trailing garbage after EOF ignored\n" );
+ return True;
+ }
+ default:
+ panic ( "test:unexpected error" );
+ }
+
+ panic ( "test:end" );
+ return True; /*notreached*/
+}
+
+
+/*---------------------------------------------------*/
+/*--- Error [non-] handling grunge ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+void setExit ( Int32 v )
+{
+ if (v > exitValue) exitValue = v;
+}
+
+
+/*---------------------------------------------*/
+static
+void cadvise ( void )
+{
+ if (noisy)
+ fprintf (
+ stderr,
+ "\nIt is possible that the compressed file(s) have become corrupted.\n"
+ "You can use the -tvv option to test integrity of such files.\n\n"
+ "You can use the `bzip2recover' program to attempt to recover\n"
+ "data from undamaged sections of corrupted files.\n\n"
+ );
+}
+
+
+/*---------------------------------------------*/
+static
+void showFileNames ( void )
+{
+ if (noisy)
+ fprintf (
+ stderr,
+ "\tInput file = %s, output file = %s\n",
+ inName, outName
+ );
+}
+
+
+/*---------------------------------------------*/
+static
+void cleanUpAndFail ( Int32 ec )
+{
+ IntNative retVal;
+ struct MY_STAT statBuf;
+
+ if ( srcMode == SM_F2F
+ && opMode != OM_TEST
+ && deleteOutputOnInterrupt ) {
+
+ /* Check whether input file still exists. Delete output file
+ only if input exists to avoid loss of data. Joerg Prante, 5
+ January 2002. (JRS 06-Jan-2002: other changes in 1.0.2 mean
+ this is less likely to happen. But to be ultra-paranoid, we
+ do the check anyway.) */
+ retVal = MY_STAT ( inName, &statBuf );
+ if (retVal == 0) {
+ if (noisy)
+ fprintf ( stderr,
+ "%s: Deleting output file %s, if it exists.\n",
+ progName, outName );
+ if (outputHandleJustInCase != NULL)
+ fclose ( outputHandleJustInCase );
+ retVal = remove ( outName );
+ if (retVal != 0)
+ fprintf ( stderr,
+ "%s: WARNING: deletion of output file "
+ "(apparently) failed.\n",
+ progName );
+ } else {
+ fprintf ( stderr,
+ "%s: WARNING: deletion of output file suppressed\n",
+ progName );
+ fprintf ( stderr,
+ "%s: since input file no longer exists. Output file\n",
+ progName );
+ fprintf ( stderr,
+ "%s: `%s' may be incomplete.\n",
+ progName, outName );
+ fprintf ( stderr,
+ "%s: I suggest doing an integrity test (bzip2 -tv)"
+ " of it.\n",
+ progName );
+ }
+ }
+
+ if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) {
+ fprintf ( stderr,
+ "%s: WARNING: some files have not been processed:\n"
+ "%s: %d specified on command line, %d not processed yet.\n\n",
+ progName, progName,
+ numFileNames, numFileNames - numFilesProcessed );
+ }
+ setExit(ec);
+ exit(exitValue);
+}
+
+
+/*---------------------------------------------*/
+static
+void panic ( const Char* s )
+{
+ fprintf ( stderr,
+ "\n%s: PANIC -- internal consistency error:\n"
+ "\t%s\n"
+ "\tThis is a BUG. Please report it to me at:\n"
+ "\tjseward at bzip.org\n",
+ progName, s );
+ showFileNames();
+ cleanUpAndFail( 3 );
+}
+
+
+/*---------------------------------------------*/
+static
+void crcError ( void )
+{
+ fprintf ( stderr,
+ "\n%s: Data integrity error when decompressing.\n",
+ progName );
+ showFileNames();
+ cadvise();
+ cleanUpAndFail( 2 );
+}
+
+
+/*---------------------------------------------*/
+static
+void compressedStreamEOF ( void )
+{
+ if (noisy) {
+ fprintf ( stderr,
+ "\n%s: Compressed file ends unexpectedly;\n\t"
+ "perhaps it is corrupted? *Possible* reason follows.\n",
+ progName );
+ perror ( progName );
+ showFileNames();
+ cadvise();
+ }
+ cleanUpAndFail( 2 );
+}
+
+
+/*---------------------------------------------*/
+static
+void ioError ( void )
+{
+ fprintf ( stderr,
+ "\n%s: I/O or other error, bailing out. "
+ "Possible reason follows.\n",
+ progName );
+ perror ( progName );
+ showFileNames();
+ cleanUpAndFail( 1 );
+}
+
+
+/*---------------------------------------------*/
+static
+void mySignalCatcher ( IntNative n )
+{
+ fprintf ( stderr,
+ "\n%s: Control-C or similar caught, quitting.\n",
+ progName );
+ cleanUpAndFail(1);
+}
+
+
+/*---------------------------------------------*/
+static
+void mySIGSEGVorSIGBUScatcher ( IntNative n )
+{
+ if (opMode == OM_Z)
+ fprintf (
+ stderr,
+ "\n%s: Caught a SIGSEGV or SIGBUS whilst compressing.\n"
+ "\n"
+ " Possible causes are (most likely first):\n"
+ " (1) This computer has unreliable memory or cache hardware\n"
+ " (a surprisingly common problem; try a different machine.)\n"
+ " (2) A bug in the compiler used to create this executable\n"
+ " (unlikely, if you didn't compile bzip2 yourself.)\n"
+ " (3) A real bug in bzip2 -- I hope this should never be the case.\n"
+ " The user's manual, Section 4.3, has more info on (1) and (2).\n"
+ " \n"
+ " If you suspect this is a bug in bzip2, or are unsure about (1)\n"
+ " or (2), feel free to report it to me at: jseward at bzip.org.\n"
+ " Section 4.3 of the user's manual describes the info a useful\n"
+ " bug report should have. If the manual is available on your\n"
+ " system, please try and read it before mailing me. If you don't\n"
+ " have the manual or can't be bothered to read it, mail me anyway.\n"
+ "\n",
+ progName );
+ else
+ fprintf (
+ stderr,
+ "\n%s: Caught a SIGSEGV or SIGBUS whilst decompressing.\n"
+ "\n"
+ " Possible causes are (most likely first):\n"
+ " (1) The compressed data is corrupted, and bzip2's usual checks\n"
+ " failed to detect this. Try bzip2 -tvv my_file.bz2.\n"
+ " (2) This computer has unreliable memory or cache hardware\n"
+ " (a surprisingly common problem; try a different machine.)\n"
+ " (3) A bug in the compiler used to create this executable\n"
+ " (unlikely, if you didn't compile bzip2 yourself.)\n"
+ " (4) A real bug in bzip2 -- I hope this should never be the case.\n"
+ " The user's manual, Section 4.3, has more info on (2) and (3).\n"
+ " \n"
+ " If you suspect this is a bug in bzip2, or are unsure about (2)\n"
+ " or (3), feel free to report it to me at: jseward at bzip.org.\n"
+ " Section 4.3 of the user's manual describes the info a useful\n"
+ " bug report should have. If the manual is available on your\n"
+ " system, please try and read it before mailing me. If you don't\n"
+ " have the manual or can't be bothered to read it, mail me anyway.\n"
+ "\n",
+ progName );
+
+ showFileNames();
+ if (opMode == OM_Z)
+ cleanUpAndFail( 3 ); else
+ { cadvise(); cleanUpAndFail( 2 ); }
+}
+
+
+/*---------------------------------------------*/
+static
+void outOfMemory ( void )
+{
+ fprintf ( stderr,
+ "\n%s: couldn't allocate enough memory\n",
+ progName );
+ showFileNames();
+ cleanUpAndFail(1);
+}
+
+
+/*---------------------------------------------*/
+static
+void configError ( void )
+{
+ fprintf ( stderr,
+ "bzip2: I'm not configured correctly for this platform!\n"
+ "\tI require Int32, Int16 and Char to have sizes\n"
+ "\tof 4, 2 and 1 bytes to run properly, and they don't.\n"
+ "\tProbably you can fix this by defining them correctly,\n"
+ "\tand recompiling. Bye!\n" );
+ setExit(3);
+ exit(exitValue);
+}
+
+
+/*---------------------------------------------------*/
+/*--- The main driver machinery ---*/
+/*---------------------------------------------------*/
+
+/* All rather crufty. The main problem is that input files
+ are stat()d multiple times before use. This should be
+ cleaned up.
+*/
+
+/*---------------------------------------------*/
+static
+void pad ( Char *s )
+{
+ Int32 i;
+ if ( (Int32)strlen(s) >= longestFileName ) return;
+ for (i = 1; i <= longestFileName - (Int32)strlen(s); i++)
+ fprintf ( stderr, " " );
+}
+
+
+/*---------------------------------------------*/
+static
+void copyFileName ( Char* to, Char* from )
+{
+ if ( strlen(from) > FILE_NAME_LEN-10 ) {
+ fprintf (
+ stderr,
+ "bzip2: file name\n`%s'\n"
+ "is suspiciously (more than %d chars) long.\n"
+ "Try using a reasonable file name instead. Sorry! :-)\n",
+ from, FILE_NAME_LEN-10
+ );
+ setExit(1);
+ exit(exitValue);
+ }
+
+ strncpy(to,from,FILE_NAME_LEN-10);
+ to[FILE_NAME_LEN-10]='\0';
+}
+
+
+/*---------------------------------------------*/
+static
+Bool fileExists ( Char* name )
+{
+ FILE *tmp = fopen ( name, "rb" );
+ Bool exists = (tmp != NULL);
+ if (tmp != NULL) fclose ( tmp );
+ return exists;
+}
+
+
+/*---------------------------------------------*/
+/* Open an output file safely with O_EXCL and good permissions.
+ This avoids a race condition in versions < 1.0.2, in which
+ the file was first opened and then had its interim permissions
+ set safely. We instead use open() to create the file with
+ the interim permissions required. (--- --- rw-).
+
+ For non-Unix platforms, if we are not worrying about
+ security issues, simple this simply behaves like fopen.
+*/
+static
+FILE* fopen_output_safely ( Char* name, const char* mode )
+{
+# if BZ_UNIX
+ FILE* fp;
+ IntNative fh;
+ fh = open(name, O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR);
+ if (fh == -1) return NULL;
+ fp = fdopen(fh, mode);
+ if (fp == NULL) close(fh);
+ return fp;
+# else
+ return fopen(name, mode);
+# endif
+}
+
+
+/*---------------------------------------------*/
+/*--
+ if in doubt, return True
+--*/
+static
+Bool notAStandardFile ( Char* name )
+{
+ IntNative i;
+ struct MY_STAT statBuf;
+
+ i = MY_LSTAT ( name, &statBuf );
+ if (i != 0) return True;
+ if (MY_S_ISREG(statBuf.st_mode)) return False;
+ return True;
+}
+
+
+/*---------------------------------------------*/
+/*--
+ rac 11/21/98 see if file has hard links to it
+--*/
+static
+Int32 countHardLinks ( Char* name )
+{
+ IntNative i;
+ struct MY_STAT statBuf;
+
+ i = MY_LSTAT ( name, &statBuf );
+ if (i != 0) return 0;
+ return (statBuf.st_nlink - 1);
+}
+
+
+/*---------------------------------------------*/
+/* Copy modification date, access date, permissions and owner from the
+ source to destination file. We have to copy this meta-info off
+ into fileMetaInfo before starting to compress / decompress it,
+ because doing it afterwards means we get the wrong access time.
+
+ To complicate matters, in compress() and decompress() below, the
+ sequence of tests preceding the call to saveInputFileMetaInfo()
+ involves calling fileExists(), which in turn establishes its result
+ by attempting to fopen() the file, and if successful, immediately
+ fclose()ing it again. So we have to assume that the fopen() call
+ does not cause the access time field to be updated.
+
+ Reading of the man page for stat() (man 2 stat) on RedHat 7.2 seems
+ to imply that merely doing open() will not affect the access time.
+ Therefore we merely need to hope that the C library only does
+ open() as a result of fopen(), and not any kind of read()-ahead
+ cleverness.
+
+ It sounds pretty fragile to me. Whether this carries across
+ robustly to arbitrary Unix-like platforms (or even works robustly
+ on this one, RedHat 7.2) is unknown to me. Nevertheless ...
+*/
+#if BZ_UNIX
+static
+struct MY_STAT fileMetaInfo;
+#endif
+
+static
+void saveInputFileMetaInfo ( Char *srcName )
+{
+# if BZ_UNIX
+ IntNative retVal;
+ /* Note use of stat here, not lstat. */
+ retVal = MY_STAT( srcName, &fileMetaInfo );
+ ERROR_IF_NOT_ZERO ( retVal );
+# endif
+}
+
+
+static
+void applySavedTimeInfoToOutputFile ( Char *dstName )
+{
+# if BZ_UNIX
+ IntNative retVal;
+ struct utimbuf uTimBuf;
+
+ uTimBuf.actime = fileMetaInfo.st_atime;
+ uTimBuf.modtime = fileMetaInfo.st_mtime;
+
+ retVal = utime ( dstName, &uTimBuf );
+ ERROR_IF_NOT_ZERO ( retVal );
+# endif
+}
+
+static
+void applySavedFileAttrToOutputFile ( IntNative fd )
+{
+# if BZ_UNIX
+ IntNative retVal;
+
+ retVal = fchmod ( fd, fileMetaInfo.st_mode );
+ ERROR_IF_NOT_ZERO ( retVal );
+
+ (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid );
+ /* chown() will in many cases return with EPERM, which can
+ be safely ignored.
+ */
+# endif
+}
+
+
+/*---------------------------------------------*/
+static
+Bool containsDubiousChars ( Char* name )
+{
+# if BZ_UNIX
+ /* On unix, files can contain any characters and the file expansion
+ * is performed by the shell.
+ */
+ return False;
+# else /* ! BZ_UNIX */
+ /* On non-unix (Win* platforms), wildcard characters are not allowed in
+ * filenames.
+ */
+ for (; *name != '\0'; name++)
+ if (*name == '?' || *name == '*') return True;
+ return False;
+# endif /* BZ_UNIX */
+}
+
+
+/*---------------------------------------------*/
+#define BZ_N_SUFFIX_PAIRS 4
+
+const Char* zSuffix[BZ_N_SUFFIX_PAIRS]
+ = { ".bz2", ".bz", ".tbz2", ".tbz" };
+const Char* unzSuffix[BZ_N_SUFFIX_PAIRS]
+ = { "", "", ".tar", ".tar" };
+
+static
+Bool hasSuffix ( Char* s, const Char* suffix )
+{
+ Int32 ns = strlen(s);
+ Int32 nx = strlen(suffix);
+ if (ns < nx) return False;
+ if (strcmp(s + ns - nx, suffix) == 0) return True;
+ return False;
+}
+
+static
+Bool mapSuffix ( Char* name,
+ const Char* oldSuffix,
+ const Char* newSuffix )
+{
+ if (!hasSuffix(name,oldSuffix)) return False;
+ name[strlen(name)-strlen(oldSuffix)] = 0;
+ strcat ( name, newSuffix );
+ return True;
+}
+
+
+/*---------------------------------------------*/
+static
+void compress ( Char *name )
+{
+ FILE *inStr;
+ FILE *outStr;
+ Int32 n, i;
+ struct MY_STAT statBuf;
+
+ deleteOutputOnInterrupt = False;
+
+ if (name == NULL && srcMode != SM_I2O)
+ panic ( "compress: bad modes\n" );
+
+ switch (srcMode) {
+ case SM_I2O:
+ copyFileName ( inName, (Char*)"(stdin)" );
+ copyFileName ( outName, (Char*)"(stdout)" );
+ break;
+ case SM_F2F:
+ copyFileName ( inName, name );
+ copyFileName ( outName, name );
+ strcat ( outName, ".bz2" );
+ break;
+ case SM_F2O:
+ copyFileName ( inName, name );
+ copyFileName ( outName, (Char*)"(stdout)" );
+ break;
+ }
+
+ if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+ if (noisy)
+ fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ }
+ for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) {
+ if (hasSuffix(inName, zSuffix[i])) {
+ if (noisy)
+ fprintf ( stderr,
+ "%s: Input file %s already has %s suffix.\n",
+ progName, inName, zSuffix[i] );
+ setExit(1);
+ return;
+ }
+ }
+ if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
+ MY_STAT(inName, &statBuf);
+ if ( MY_S_ISDIR(statBuf.st_mode) ) {
+ fprintf( stderr,
+ "%s: Input file %s is a directory.\n",
+ progName,inName);
+ setExit(1);
+ return;
+ }
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
+ if (noisy)
+ fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode == SM_F2F && fileExists ( outName ) ) {
+ if (forceOverwrite) {
+ remove(outName);
+ } else {
+ fprintf ( stderr, "%s: Output file %s already exists.\n",
+ progName, outName );
+ setExit(1);
+ return;
+ }
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite &&
+ (n=countHardLinks ( inName )) > 0) {
+ fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
+ progName, inName, n, n > 1 ? "s" : "" );
+ setExit(1);
+ return;
+ }
+
+ if ( srcMode == SM_F2F ) {
+ /* Save the file's meta-info before we open it. Doing it later
+ means we mess up the access times. */
+ saveInputFileMetaInfo ( inName );
+ }
+
+ switch ( srcMode ) {
+
+ case SM_I2O:
+ inStr = stdin;
+ outStr = stdout;
+ if ( isatty ( fileno ( stdout ) ) ) {
+ fprintf ( stderr,
+ "%s: I won't write compressed data to a terminal.\n",
+ progName );
+ fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+ progName, progName );
+ setExit(1);
+ return;
+ };
+ break;
+
+ case SM_F2O:
+ inStr = fopen ( inName, "rb" );
+ outStr = stdout;
+ if ( isatty ( fileno ( stdout ) ) ) {
+ fprintf ( stderr,
+ "%s: I won't write compressed data to a terminal.\n",
+ progName );
+ fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+ progName, progName );
+ if ( inStr != NULL ) fclose ( inStr );
+ setExit(1);
+ return;
+ };
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ };
+ break;
+
+ case SM_F2F:
+ inStr = fopen ( inName, "rb" );
+ outStr = fopen_output_safely ( outName, "wb" );
+ if ( outStr == NULL) {
+ fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
+ progName, outName, strerror(errno) );
+ if ( inStr != NULL ) fclose ( inStr );
+ setExit(1);
+ return;
+ }
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ if ( outStr != NULL ) fclose ( outStr );
+ setExit(1);
+ return;
+ };
+ break;
+
+ default:
+ panic ( "compress: bad srcMode" );
+ break;
+ }
+
+ if (verbosity >= 1) {
+ fprintf ( stderr, " %s: ", inName );
+ pad ( inName );
+ fflush ( stderr );
+ }
+
+ /*--- Now the input and output handles are sane. Do the Biz. ---*/
+ outputHandleJustInCase = outStr;
+ deleteOutputOnInterrupt = True;
+ compressStream ( inStr, outStr );
+ outputHandleJustInCase = NULL;
+
+ /*--- If there was an I/O error, we won't get here. ---*/
+ if ( srcMode == SM_F2F ) {
+ applySavedTimeInfoToOutputFile ( outName );
+ deleteOutputOnInterrupt = False;
+ if ( !keepInputFiles ) {
+ IntNative retVal = remove ( inName );
+ ERROR_IF_NOT_ZERO ( retVal );
+ }
+ }
+
+ deleteOutputOnInterrupt = False;
+}
+
+
+/*---------------------------------------------*/
+static
+void uncompress ( Char *name )
+{
+ FILE *inStr;
+ FILE *outStr;
+ Int32 n, i;
+ Bool magicNumberOK;
+ Bool cantGuess;
+ struct MY_STAT statBuf;
+
+ deleteOutputOnInterrupt = False;
+
+ if (name == NULL && srcMode != SM_I2O)
+ panic ( "uncompress: bad modes\n" );
+
+ cantGuess = False;
+ switch (srcMode) {
+ case SM_I2O:
+ copyFileName ( inName, (Char*)"(stdin)" );
+ copyFileName ( outName, (Char*)"(stdout)" );
+ break;
+ case SM_F2F:
+ copyFileName ( inName, name );
+ copyFileName ( outName, name );
+ for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++)
+ if (mapSuffix(outName,zSuffix[i],unzSuffix[i]))
+ goto zzz;
+ cantGuess = True;
+ strcat ( outName, ".out" );
+ break;
+ case SM_F2O:
+ copyFileName ( inName, name );
+ copyFileName ( outName, (Char*)"(stdout)" );
+ break;
+ }
+
+ zzz:
+ if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+ if (noisy)
+ fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ }
+ if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
+ MY_STAT(inName, &statBuf);
+ if ( MY_S_ISDIR(statBuf.st_mode) ) {
+ fprintf( stderr,
+ "%s: Input file %s is a directory.\n",
+ progName,inName);
+ setExit(1);
+ return;
+ }
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
+ if (noisy)
+ fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( /* srcMode == SM_F2F implied && */ cantGuess ) {
+ if (noisy)
+ fprintf ( stderr,
+ "%s: Can't guess original name for %s -- using %s\n",
+ progName, inName, outName );
+ /* just a warning, no return */
+ }
+ if ( srcMode == SM_F2F && fileExists ( outName ) ) {
+ if (forceOverwrite) {
+ remove(outName);
+ } else {
+ fprintf ( stderr, "%s: Output file %s already exists.\n",
+ progName, outName );
+ setExit(1);
+ return;
+ }
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite &&
+ (n=countHardLinks ( inName ) ) > 0) {
+ fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
+ progName, inName, n, n > 1 ? "s" : "" );
+ setExit(1);
+ return;
+ }
+
+ if ( srcMode == SM_F2F ) {
+ /* Save the file's meta-info before we open it. Doing it later
+ means we mess up the access times. */
+ saveInputFileMetaInfo ( inName );
+ }
+
+ switch ( srcMode ) {
+
+ case SM_I2O:
+ inStr = stdin;
+ outStr = stdout;
+ if ( isatty ( fileno ( stdin ) ) ) {
+ fprintf ( stderr,
+ "%s: I won't read compressed data from a terminal.\n",
+ progName );
+ fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+ progName, progName );
+ setExit(1);
+ return;
+ };
+ break;
+
+ case SM_F2O:
+ inStr = fopen ( inName, "rb" );
+ outStr = stdout;
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
+ progName, inName, strerror(errno) );
+ if ( inStr != NULL ) fclose ( inStr );
+ setExit(1);
+ return;
+ };
+ break;
+
+ case SM_F2F:
+ inStr = fopen ( inName, "rb" );
+ outStr = fopen_output_safely ( outName, "wb" );
+ if ( outStr == NULL) {
+ fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
+ progName, outName, strerror(errno) );
+ if ( inStr != NULL ) fclose ( inStr );
+ setExit(1);
+ return;
+ }
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ if ( outStr != NULL ) fclose ( outStr );
+ setExit(1);
+ return;
+ };
+ break;
+
+ default:
+ panic ( "uncompress: bad srcMode" );
+ break;
+ }
+
+ if (verbosity >= 1) {
+ fprintf ( stderr, " %s: ", inName );
+ pad ( inName );
+ fflush ( stderr );
+ }
+
+ /*--- Now the input and output handles are sane. Do the Biz. ---*/
+ outputHandleJustInCase = outStr;
+ deleteOutputOnInterrupt = True;
+ magicNumberOK = uncompressStream ( inStr, outStr );
+ outputHandleJustInCase = NULL;
+
+ /*--- If there was an I/O error, we won't get here. ---*/
+ if ( magicNumberOK ) {
+ if ( srcMode == SM_F2F ) {
+ applySavedTimeInfoToOutputFile ( outName );
+ deleteOutputOnInterrupt = False;
+ if ( !keepInputFiles ) {
+ IntNative retVal = remove ( inName );
+ ERROR_IF_NOT_ZERO ( retVal );
+ }
+ }
+ } else {
+ unzFailsExist = True;
+ deleteOutputOnInterrupt = False;
+ if ( srcMode == SM_F2F ) {
+ IntNative retVal = remove ( outName );
+ ERROR_IF_NOT_ZERO ( retVal );
+ }
+ }
+ deleteOutputOnInterrupt = False;
+
+ if ( magicNumberOK ) {
+ if (verbosity >= 1)
+ fprintf ( stderr, "done\n" );
+ } else {
+ setExit(2);
+ if (verbosity >= 1)
+ fprintf ( stderr, "not a bzip2 file.\n" ); else
+ fprintf ( stderr,
+ "%s: %s is not a bzip2 file.\n",
+ progName, inName );
+ }
+
+}
+
+
+/*---------------------------------------------*/
+static
+void testf ( Char *name )
+{
+ FILE *inStr;
+ Bool allOK;
+ struct MY_STAT statBuf;
+
+ deleteOutputOnInterrupt = False;
+
+ if (name == NULL && srcMode != SM_I2O)
+ panic ( "testf: bad modes\n" );
+
+ copyFileName ( outName, (Char*)"(none)" );
+ switch (srcMode) {
+ case SM_I2O: copyFileName ( inName, (Char*)"(stdin)" ); break;
+ case SM_F2F: copyFileName ( inName, name ); break;
+ case SM_F2O: copyFileName ( inName, name ); break;
+ }
+
+ if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+ if (noisy)
+ fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+ fprintf ( stderr, "%s: Can't open input %s: %s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ }
+ if ( srcMode != SM_I2O ) {
+ MY_STAT(inName, &statBuf);
+ if ( MY_S_ISDIR(statBuf.st_mode) ) {
+ fprintf( stderr,
+ "%s: Input file %s is a directory.\n",
+ progName,inName);
+ setExit(1);
+ return;
+ }
+ }
+
+ switch ( srcMode ) {
+
+ case SM_I2O:
+ if ( isatty ( fileno ( stdin ) ) ) {
+ fprintf ( stderr,
+ "%s: I won't read compressed data from a terminal.\n",
+ progName );
+ fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+ progName, progName );
+ setExit(1);
+ return;
+ };
+ inStr = stdin;
+ break;
+
+ case SM_F2O: case SM_F2F:
+ inStr = fopen ( inName, "rb" );
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ };
+ break;
+
+ default:
+ panic ( "testf: bad srcMode" );
+ break;
+ }
+
+ if (verbosity >= 1) {
+ fprintf ( stderr, " %s: ", inName );
+ pad ( inName );
+ fflush ( stderr );
+ }
+
+ /*--- Now the input handle is sane. Do the Biz. ---*/
+ outputHandleJustInCase = NULL;
+ allOK = testStream ( inStr );
+
+ if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );
+ if (!allOK) testFailsExist = True;
+}
+
+
+/*---------------------------------------------*/
+static
+void license ( void )
+{
+ fprintf ( stderr,
+
+ "bzip2, a block-sorting file compressor. "
+ "Version %s.\n"
+ " \n"
+ " Copyright (C) 1996-2010 by Julian Seward.\n"
+ " \n"
+ " This program is free software; you can redistribute it and/or modify\n"
+ " it under the terms set out in the LICENSE file, which is included\n"
+ " in the bzip2-1.0.6 source distribution.\n"
+ " \n"
+ " This program is distributed in the hope that it will be useful,\n"
+ " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+ " LICENSE file for more details.\n"
+ " \n",
+ BZ2_bzlibVersion()
+ );
+}
+
+
+/*---------------------------------------------*/
+static
+void usage ( Char *fullProgName )
+{
+ fprintf (
+ stderr,
+ "bzip2, a block-sorting file compressor. "
+ "Version %s.\n"
+ "\n usage: %s [flags and input files in any order]\n"
+ "\n"
+ " -h --help print this message\n"
+ " -d --decompress force decompression\n"
+ " -z --compress force compression\n"
+ " -k --keep keep (don't delete) input files\n"
+ " -f --force overwrite existing output files\n"
+ " -t --test test compressed file integrity\n"
+ " -c --stdout output to standard out\n"
+ " -q --quiet suppress noncritical error messages\n"
+ " -v --verbose be verbose (a 2nd -v gives more)\n"
+ " -L --license display software version & license\n"
+ " -V --version display software version & license\n"
+ " -s --small use less memory (at most 2500k)\n"
+ " -1 .. -9 set block size to 100k .. 900k\n"
+ " --fast alias for -1\n"
+ " --best alias for -9\n"
+ "\n"
+ " If invoked as `bzip2', default action is to compress.\n"
+ " as `bunzip2', default action is to decompress.\n"
+ " as `bzcat', default action is to decompress to stdout.\n"
+ "\n"
+ " If no file names are given, bzip2 compresses or decompresses\n"
+ " from standard input to standard output. You can combine\n"
+ " short flags, so `-v -4' means the same as -v4 or -4v, &c.\n"
+# if BZ_UNIX
+ "\n"
+# endif
+ ,
+
+ BZ2_bzlibVersion(),
+ fullProgName
+ );
+}
+
+
+/*---------------------------------------------*/
+static
+void redundant ( Char* flag )
+{
+ fprintf (
+ stderr,
+ "%s: %s is redundant in versions 0.9.5 and above\n",
+ progName, flag );
+}
+
+
+/*---------------------------------------------*/
+/*--
+ All the garbage from here to main() is purely to
+ implement a linked list of command-line arguments,
+ into which main() copies argv[1 .. argc-1].
+
+ The purpose of this exercise is to facilitate
+ the expansion of wildcard characters * and ? in
+ filenames for OSs which don't know how to do it
+ themselves, like MSDOS, Windows 95 and NT.
+
+ The actual Dirty Work is done by the platform-
+ specific macro APPEND_FILESPEC.
+--*/
+
+typedef
+ struct zzzz {
+ Char *name;
+ struct zzzz *link;
+ }
+ Cell;
+
+
+/*---------------------------------------------*/
+static
+void *myMalloc ( Int32 n )
+{
+ void* p;
+
+ p = malloc ( (size_t)n );
+ if (p == NULL) outOfMemory ();
+ return p;
+}
+
+
+/*---------------------------------------------*/
+static
+Cell *mkCell ( void )
+{
+ Cell *c;
+
+ c = (Cell*) myMalloc ( sizeof ( Cell ) );
+ c->name = NULL;
+ c->link = NULL;
+ return c;
+}
+
+
+/*---------------------------------------------*/
+static
+Cell *snocString ( Cell *root, Char *name )
+{
+ if (root == NULL) {
+ Cell *tmp = mkCell();
+ tmp->name = (Char*) myMalloc ( 5 + strlen(name) );
+ strcpy ( tmp->name, name );
+ return tmp;
+ } else {
+ Cell *tmp = root;
+ while (tmp->link != NULL) tmp = tmp->link;
+ tmp->link = snocString ( tmp->link, name );
+ return root;
+ }
+}
+
+
+/*---------------------------------------------*/
+static
+void addFlagsFromEnvVar ( Cell** argList, Char* varName )
+{
+ Int32 i, j, k;
+ Char *envbase, *p;
+
+ envbase = getenv(varName);
+ if (envbase != NULL) {
+ p = envbase;
+ i = 0;
+ while (True) {
+ if (p[i] == 0) break;
+ p += i;
+ i = 0;
+ while (isspace((Int32)(p[0]))) p++;
+ while (p[i] != 0 && !isspace((Int32)(p[i]))) i++;
+ if (i > 0) {
+ k = i; if (k > FILE_NAME_LEN-10) k = FILE_NAME_LEN-10;
+ for (j = 0; j < k; j++) tmpName[j] = p[j];
+ tmpName[k] = 0;
+ APPEND_FLAG(*argList, tmpName);
+ }
+ }
+ }
+}
+
+
+/*---------------------------------------------*/
+#define ISFLAG(s) (strcmp(aa->name, (s))==0)
+
+IntNative main ( IntNative argc, Char *argv[] )
+{
+ Int32 i, j;
+ Char *tmp;
+ Cell *argList;
+ Cell *aa;
+ Bool decode;
+
+ /*-- Be really really really paranoid :-) --*/
+ if (sizeof(Int32) != 4 || sizeof(UInt32) != 4 ||
+ sizeof(Int16) != 2 || sizeof(UInt16) != 2 ||
+ sizeof(Char) != 1 || sizeof(UChar) != 1)
+ configError();
+
+ /*-- Initialise --*/
+ outputHandleJustInCase = NULL;
+ smallMode = False;
+ keepInputFiles = False;
+ forceOverwrite = False;
+ noisy = True;
+ verbosity = 0;
+ blockSize100k = 9;
+ testFailsExist = False;
+ unzFailsExist = False;
+ numFileNames = 0;
+ numFilesProcessed = 0;
+ workFactor = 30;
+ deleteOutputOnInterrupt = False;
+ exitValue = 0;
+ i = j = 0; /* avoid bogus warning from egcs-1.1.X */
+
+ /*-- Set up signal handlers for mem access errors --*/
+ signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);
+# if BZ_UNIX
+# ifndef __DJGPP__
+ signal (SIGBUS, mySIGSEGVorSIGBUScatcher);
+# endif
+# endif
+
+ copyFileName ( inName, (Char*)"(none)" );
+ copyFileName ( outName, (Char*)"(none)" );
+
+ copyFileName ( progNameReally, argv[0] );
+ progName = &progNameReally[0];
+ for (tmp = &progNameReally[0]; *tmp != '\0'; tmp++)
+ if (*tmp == PATH_SEP) progName = tmp + 1;
+
+
+ /*-- Copy flags from env var BZIP2, and
+ expand filename wildcards in arg list.
+ --*/
+ argList = NULL;
+ addFlagsFromEnvVar ( &argList, (Char*)"BZIP2" );
+ addFlagsFromEnvVar ( &argList, (Char*)"BZIP" );
+ for (i = 1; i <= argc-1; i++)
+ APPEND_FILESPEC(argList, argv[i]);
+
+
+ /*-- Find the length of the longest filename --*/
+ longestFileName = 7;
+ numFileNames = 0;
+ decode = True;
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) { decode = False; continue; }
+ if (aa->name[0] == '-' && decode) continue;
+ numFileNames++;
+ if (longestFileName < (Int32)strlen(aa->name) )
+ longestFileName = (Int32)strlen(aa->name);
+ }
+
+
+ /*-- Determine source modes; flag handling may change this too. --*/
+ if (numFileNames == 0)
+ srcMode = SM_I2O; else srcMode = SM_F2F;
+
+
+ /*-- Determine what to do (compress/uncompress/test/cat). --*/
+ /*-- Note that subsequent flag handling may change this. --*/
+ opMode = OM_Z;
+
+ if ( (strstr ( progName, "unzip" ) != 0) ||
+ (strstr ( progName, "UNZIP" ) != 0) )
+ opMode = OM_UNZ;
+
+ if ( (strstr ( progName, "z2cat" ) != 0) ||
+ (strstr ( progName, "Z2CAT" ) != 0) ||
+ (strstr ( progName, "zcat" ) != 0) ||
+ (strstr ( progName, "ZCAT" ) != 0) ) {
+ opMode = OM_UNZ;
+ srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O;
+ }
+
+
+ /*-- Look at the flags. --*/
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) break;
+ if (aa->name[0] == '-' && aa->name[1] != '-') {
+ for (j = 1; aa->name[j] != '\0'; j++) {
+ switch (aa->name[j]) {
+ case 'c': srcMode = SM_F2O; break;
+ case 'd': opMode = OM_UNZ; break;
+ case 'z': opMode = OM_Z; break;
+ case 'f': forceOverwrite = True; break;
+ case 't': opMode = OM_TEST; break;
+ case 'k': keepInputFiles = True; break;
+ case 's': smallMode = True; break;
+ case 'q': noisy = False; break;
+ case '1': blockSize100k = 1; break;
+ case '2': blockSize100k = 2; break;
+ case '3': blockSize100k = 3; break;
+ case '4': blockSize100k = 4; break;
+ case '5': blockSize100k = 5; break;
+ case '6': blockSize100k = 6; break;
+ case '7': blockSize100k = 7; break;
+ case '8': blockSize100k = 8; break;
+ case '9': blockSize100k = 9; break;
+ case 'V':
+ case 'L': license(); break;
+ case 'v': verbosity++; break;
+ case 'h': usage ( progName );
+ exit ( 0 );
+ break;
+ default: fprintf ( stderr, "%s: Bad flag `%s'\n",
+ progName, aa->name );
+ usage ( progName );
+ exit ( 1 );
+ break;
+ }
+ }
+ }
+ }
+
+ /*-- And again ... --*/
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) break;
+ if (ISFLAG("--stdout")) srcMode = SM_F2O; else
+ if (ISFLAG("--decompress")) opMode = OM_UNZ; else
+ if (ISFLAG("--compress")) opMode = OM_Z; else
+ if (ISFLAG("--force")) forceOverwrite = True; else
+ if (ISFLAG("--test")) opMode = OM_TEST; else
+ if (ISFLAG("--keep")) keepInputFiles = True; else
+ if (ISFLAG("--small")) smallMode = True; else
+ if (ISFLAG("--quiet")) noisy = False; else
+ if (ISFLAG("--version")) license(); else
+ if (ISFLAG("--license")) license(); else
+ if (ISFLAG("--exponential")) workFactor = 1; else
+ if (ISFLAG("--repetitive-best")) redundant(aa->name); else
+ if (ISFLAG("--repetitive-fast")) redundant(aa->name); else
+ if (ISFLAG("--fast")) blockSize100k = 1; else
+ if (ISFLAG("--best")) blockSize100k = 9; else
+ if (ISFLAG("--verbose")) verbosity++; else
+ if (ISFLAG("--help")) { usage ( progName ); exit ( 0 ); }
+ else
+ if (strncmp ( aa->name, "--", 2) == 0) {
+ fprintf ( stderr, "%s: Bad flag `%s'\n", progName, aa->name );
+ usage ( progName );
+ exit ( 1 );
+ }
+ }
+
+ if (verbosity > 4) verbosity = 4;
+ if (opMode == OM_Z && smallMode && blockSize100k > 2)
+ blockSize100k = 2;
+
+ if (opMode == OM_TEST && srcMode == SM_F2O) {
+ fprintf ( stderr, "%s: -c and -t cannot be used together.\n",
+ progName );
+ exit ( 1 );
+ }
+
+ if (srcMode == SM_F2O && numFileNames == 0)
+ srcMode = SM_I2O;
+
+ if (opMode != OM_Z) blockSize100k = 0;
+
+ if (srcMode == SM_F2F) {
+ signal (SIGINT, mySignalCatcher);
+ signal (SIGTERM, mySignalCatcher);
+# if BZ_UNIX
+ signal (SIGHUP, mySignalCatcher);
+# endif
+ }
+
+ if (opMode == OM_Z) {
+ if (srcMode == SM_I2O) {
+ compress ( NULL );
+ } else {
+ decode = True;
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) { decode = False; continue; }
+ if (aa->name[0] == '-' && decode) continue;
+ numFilesProcessed++;
+ compress ( aa->name );
+ }
+ }
+ }
+ else
+
+ if (opMode == OM_UNZ) {
+ unzFailsExist = False;
+ if (srcMode == SM_I2O) {
+ uncompress ( NULL );
+ } else {
+ decode = True;
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) { decode = False; continue; }
+ if (aa->name[0] == '-' && decode) continue;
+ numFilesProcessed++;
+ uncompress ( aa->name );
+ }
+ }
+ if (unzFailsExist) {
+ setExit(2);
+ exit(exitValue);
+ }
+ }
+
+ else {
+ testFailsExist = False;
+ if (srcMode == SM_I2O) {
+ testf ( NULL );
+ } else {
+ decode = True;
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) { decode = False; continue; }
+ if (aa->name[0] == '-' && decode) continue;
+ numFilesProcessed++;
+ testf ( aa->name );
+ }
+ }
+ if (testFailsExist && noisy) {
+ fprintf ( stderr,
+ "\n"
+ "You can use the `bzip2recover' program to attempt to recover\n"
+ "data from undamaged sections of corrupted files.\n\n"
+ );
+ setExit(2);
+ exit(exitValue);
+ }
+ }
+
+ /* Free the argument list memory to mollify leak detectors
+ (eg) Purify, Checker. Serves no other useful purpose.
+ */
+ aa = argList;
+ while (aa != NULL) {
+ Cell* aa2 = aa->link;
+ if (aa->name != NULL) free(aa->name);
+ free(aa);
+ aa = aa2;
+ }
+
+ return exitValue;
+}
+
+
+/*-----------------------------------------------------------*/
+/*--- end bzip2.c ---*/
+/*-----------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzip2recover.c b/libs/ext/bzip2/bzip2recover.c
new file mode 100644
index 0000000..f9de049
--- /dev/null
+++ b/libs/ext/bzip2/bzip2recover.c
@@ -0,0 +1,514 @@
+/*-----------------------------------------------------------*/
+/*--- Block recoverer program for bzip2 ---*/
+/*--- bzip2recover.c ---*/
+/*-----------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+/* This program is a complete hack and should be rewritten properly.
+ It isn't very complicated. */
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* This program records bit locations in the file to be recovered.
+ That means that if 64-bit ints are not supported, we will not
+ be able to recover .bz2 files over 512MB (2^32 bits) long.
+ On GNU supported platforms, we take advantage of the 64-bit
+ int support to circumvent this problem. Ditto MSVC.
+
+ This change occurred in version 1.0.2; all prior versions have
+ the 512MB limitation.
+*/
+#ifdef __GNUC__
+ typedef unsigned long long int MaybeUInt64;
+# define MaybeUInt64_FMT "%Lu"
+#else
+#ifdef _MSC_VER
+ typedef unsigned __int64 MaybeUInt64;
+# define MaybeUInt64_FMT "%I64u"
+#else
+ typedef unsigned int MaybeUInt64;
+# define MaybeUInt64_FMT "%u"
+#endif
+#endif
+
+typedef unsigned int UInt32;
+typedef int Int32;
+typedef unsigned char UChar;
+typedef char Char;
+typedef unsigned char Bool;
+#define True ((Bool)1)
+#define False ((Bool)0)
+
+
+#define BZ_MAX_FILENAME 2000
+
+Char inFileName[BZ_MAX_FILENAME];
+Char outFileName[BZ_MAX_FILENAME];
+Char progName[BZ_MAX_FILENAME];
+
+MaybeUInt64 bytesOut = 0;
+MaybeUInt64 bytesIn = 0;
+
+
+/*---------------------------------------------------*/
+/*--- Header bytes ---*/
+/*---------------------------------------------------*/
+
+#define BZ_HDR_B 0x42 /* 'B' */
+#define BZ_HDR_Z 0x5a /* 'Z' */
+#define BZ_HDR_h 0x68 /* 'h' */
+#define BZ_HDR_0 0x30 /* '0' */
+
+
+/*---------------------------------------------------*/
+/*--- I/O errors ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static void readError ( void )
+{
+ fprintf ( stderr,
+ "%s: I/O error reading `%s', possible reason follows.\n",
+ progName, inFileName );
+ perror ( progName );
+ fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
+ progName );
+ exit ( 1 );
+}
+
+
+/*---------------------------------------------*/
+static void writeError ( void )
+{
+ fprintf ( stderr,
+ "%s: I/O error reading `%s', possible reason follows.\n",
+ progName, inFileName );
+ perror ( progName );
+ fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
+ progName );
+ exit ( 1 );
+}
+
+
+/*---------------------------------------------*/
+static void mallocFail ( Int32 n )
+{
+ fprintf ( stderr,
+ "%s: malloc failed on request for %d bytes.\n",
+ progName, n );
+ fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
+ progName );
+ exit ( 1 );
+}
+
+
+/*---------------------------------------------*/
+static void tooManyBlocks ( Int32 max_handled_blocks )
+{
+ fprintf ( stderr,
+ "%s: `%s' appears to contain more than %d blocks\n",
+ progName, inFileName, max_handled_blocks );
+ fprintf ( stderr,
+ "%s: and cannot be handled. To fix, increase\n",
+ progName );
+ fprintf ( stderr,
+ "%s: BZ_MAX_HANDLED_BLOCKS in bzip2recover.c, and recompile.\n",
+ progName );
+ exit ( 1 );
+}
+
+
+
+/*---------------------------------------------------*/
+/*--- Bit stream I/O ---*/
+/*---------------------------------------------------*/
+
+typedef
+ struct {
+ FILE* handle;
+ Int32 buffer;
+ Int32 buffLive;
+ Char mode;
+ }
+ BitStream;
+
+
+/*---------------------------------------------*/
+static BitStream* bsOpenReadStream ( FILE* stream )
+{
+ BitStream *bs = malloc ( sizeof(BitStream) );
+ if (bs == NULL) mallocFail ( sizeof(BitStream) );
+ bs->handle = stream;
+ bs->buffer = 0;
+ bs->buffLive = 0;
+ bs->mode = 'r';
+ return bs;
+}
+
+
+/*---------------------------------------------*/
+static BitStream* bsOpenWriteStream ( FILE* stream )
+{
+ BitStream *bs = malloc ( sizeof(BitStream) );
+ if (bs == NULL) mallocFail ( sizeof(BitStream) );
+ bs->handle = stream;
+ bs->buffer = 0;
+ bs->buffLive = 0;
+ bs->mode = 'w';
+ return bs;
+}
+
+
+/*---------------------------------------------*/
+static void bsPutBit ( BitStream* bs, Int32 bit )
+{
+ if (bs->buffLive == 8) {
+ Int32 retVal = putc ( (UChar) bs->buffer, bs->handle );
+ if (retVal == EOF) writeError();
+ bytesOut++;
+ bs->buffLive = 1;
+ bs->buffer = bit & 0x1;
+ } else {
+ bs->buffer = ( (bs->buffer << 1) | (bit & 0x1) );
+ bs->buffLive++;
+ };
+}
+
+
+/*---------------------------------------------*/
+/*--
+ Returns 0 or 1, or 2 to indicate EOF.
+--*/
+static Int32 bsGetBit ( BitStream* bs )
+{
+ if (bs->buffLive > 0) {
+ bs->buffLive --;
+ return ( ((bs->buffer) >> (bs->buffLive)) & 0x1 );
+ } else {
+ Int32 retVal = getc ( bs->handle );
+ if ( retVal == EOF ) {
+ if (errno != 0) readError();
+ return 2;
+ }
+ bs->buffLive = 7;
+ bs->buffer = retVal;
+ return ( ((bs->buffer) >> 7) & 0x1 );
+ }
+}
+
+
+/*---------------------------------------------*/
+static void bsClose ( BitStream* bs )
+{
+ Int32 retVal;
+
+ if ( bs->mode == 'w' ) {
+ while ( bs->buffLive < 8 ) {
+ bs->buffLive++;
+ bs->buffer <<= 1;
+ };
+ retVal = putc ( (UChar) (bs->buffer), bs->handle );
+ if (retVal == EOF) writeError();
+ bytesOut++;
+ retVal = fflush ( bs->handle );
+ if (retVal == EOF) writeError();
+ }
+ retVal = fclose ( bs->handle );
+ if (retVal == EOF) {
+ if (bs->mode == 'w') writeError(); else readError();
+ }
+ free ( bs );
+}
+
+
+/*---------------------------------------------*/
+static void bsPutUChar ( BitStream* bs, UChar c )
+{
+ Int32 i;
+ for (i = 7; i >= 0; i--)
+ bsPutBit ( bs, (((UInt32) c) >> i) & 0x1 );
+}
+
+
+/*---------------------------------------------*/
+static void bsPutUInt32 ( BitStream* bs, UInt32 c )
+{
+ Int32 i;
+
+ for (i = 31; i >= 0; i--)
+ bsPutBit ( bs, (c >> i) & 0x1 );
+}
+
+
+/*---------------------------------------------*/
+static Bool endsInBz2 ( Char* name )
+{
+ Int32 n = strlen ( name );
+ if (n <= 4) return False;
+ return
+ (name[n-4] == '.' &&
+ name[n-3] == 'b' &&
+ name[n-2] == 'z' &&
+ name[n-1] == '2');
+}
+
+
+/*---------------------------------------------------*/
+/*--- ---*/
+/*---------------------------------------------------*/
+
+/* This logic isn't really right when it comes to Cygwin. */
+#ifdef _WIN32
+# define BZ_SPLIT_SYM '\\' /* path splitter on Windows platform */
+#else
+# define BZ_SPLIT_SYM '/' /* path splitter on Unix platform */
+#endif
+
+#define BLOCK_HEADER_HI 0x00003141UL
+#define BLOCK_HEADER_LO 0x59265359UL
+
+#define BLOCK_ENDMARK_HI 0x00001772UL
+#define BLOCK_ENDMARK_LO 0x45385090UL
+
+/* Increase if necessary. However, a .bz2 file with > 50000 blocks
+ would have an uncompressed size of at least 40GB, so the chances
+ are low you'll need to up this.
+*/
+#define BZ_MAX_HANDLED_BLOCKS 50000
+
+MaybeUInt64 bStart [BZ_MAX_HANDLED_BLOCKS];
+MaybeUInt64 bEnd [BZ_MAX_HANDLED_BLOCKS];
+MaybeUInt64 rbStart[BZ_MAX_HANDLED_BLOCKS];
+MaybeUInt64 rbEnd [BZ_MAX_HANDLED_BLOCKS];
+
+Int32 main ( Int32 argc, Char** argv )
+{
+ FILE* inFile;
+ FILE* outFile;
+ BitStream* bsIn, *bsWr;
+ Int32 b, wrBlock, currBlock, rbCtr;
+ MaybeUInt64 bitsRead;
+
+ UInt32 buffHi, buffLo, blockCRC;
+ Char* p;
+
+ strcpy ( progName, argv[0] );
+ inFileName[0] = outFileName[0] = 0;
+
+ fprintf ( stderr,
+ "bzip2recover 1.0.6: extracts blocks from damaged .bz2 files.\n" );
+
+ if (argc != 2) {
+ fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n",
+ progName, progName );
+ switch (sizeof(MaybeUInt64)) {
+ case 8:
+ fprintf(stderr,
+ "\trestrictions on size of recovered file: None\n");
+ break;
+ case 4:
+ fprintf(stderr,
+ "\trestrictions on size of recovered file: 512 MB\n");
+ fprintf(stderr,
+ "\tto circumvent, recompile with MaybeUInt64 as an\n"
+ "\tunsigned 64-bit int.\n");
+ break;
+ default:
+ fprintf(stderr,
+ "\tsizeof(MaybeUInt64) is not 4 or 8 -- "
+ "configuration error.\n");
+ break;
+ }
+ exit(1);
+ }
+
+ if (strlen(argv[1]) >= BZ_MAX_FILENAME-20) {
+ fprintf ( stderr,
+ "%s: supplied filename is suspiciously (>= %d chars) long. Bye!\n",
+ progName, (int)strlen(argv[1]) );
+ exit(1);
+ }
+
+ strcpy ( inFileName, argv[1] );
+
+ inFile = fopen ( inFileName, "rb" );
+ if (inFile == NULL) {
+ fprintf ( stderr, "%s: can't read `%s'\n", progName, inFileName );
+ exit(1);
+ }
+
+ bsIn = bsOpenReadStream ( inFile );
+ fprintf ( stderr, "%s: searching for block boundaries ...\n", progName );
+
+ bitsRead = 0;
+ buffHi = buffLo = 0;
+ currBlock = 0;
+ bStart[currBlock] = 0;
+
+ rbCtr = 0;
+
+ while (True) {
+ b = bsGetBit ( bsIn );
+ bitsRead++;
+ if (b == 2) {
+ if (bitsRead >= bStart[currBlock] &&
+ (bitsRead - bStart[currBlock]) >= 40) {
+ bEnd[currBlock] = bitsRead-1;
+ if (currBlock > 0)
+ fprintf ( stderr, " block %d runs from " MaybeUInt64_FMT
+ " to " MaybeUInt64_FMT " (incomplete)\n",
+ currBlock, bStart[currBlock], bEnd[currBlock] );
+ } else
+ currBlock--;
+ break;
+ }
+ buffHi = (buffHi << 1) | (buffLo >> 31);
+ buffLo = (buffLo << 1) | (b & 1);
+ if ( ( (buffHi & 0x0000ffff) == BLOCK_HEADER_HI
+ && buffLo == BLOCK_HEADER_LO)
+ ||
+ ( (buffHi & 0x0000ffff) == BLOCK_ENDMARK_HI
+ && buffLo == BLOCK_ENDMARK_LO)
+ ) {
+ if (bitsRead > 49) {
+ bEnd[currBlock] = bitsRead-49;
+ } else {
+ bEnd[currBlock] = 0;
+ }
+ if (currBlock > 0 &&
+ (bEnd[currBlock] - bStart[currBlock]) >= 130) {
+ fprintf ( stderr, " block %d runs from " MaybeUInt64_FMT
+ " to " MaybeUInt64_FMT "\n",
+ rbCtr+1, bStart[currBlock], bEnd[currBlock] );
+ rbStart[rbCtr] = bStart[currBlock];
+ rbEnd[rbCtr] = bEnd[currBlock];
+ rbCtr++;
+ }
+ if (currBlock >= BZ_MAX_HANDLED_BLOCKS)
+ tooManyBlocks(BZ_MAX_HANDLED_BLOCKS);
+ currBlock++;
+
+ bStart[currBlock] = bitsRead;
+ }
+ }
+
+ bsClose ( bsIn );
+
+ /*-- identified blocks run from 1 to rbCtr inclusive. --*/
+
+ if (rbCtr < 1) {
+ fprintf ( stderr,
+ "%s: sorry, I couldn't find any block boundaries.\n",
+ progName );
+ exit(1);
+ };
+
+ fprintf ( stderr, "%s: splitting into blocks\n", progName );
+
+ inFile = fopen ( inFileName, "rb" );
+ if (inFile == NULL) {
+ fprintf ( stderr, "%s: can't open `%s'\n", progName, inFileName );
+ exit(1);
+ }
+ bsIn = bsOpenReadStream ( inFile );
+
+ /*-- placate gcc's dataflow analyser --*/
+ blockCRC = 0; bsWr = 0;
+
+ bitsRead = 0;
+ outFile = NULL;
+ wrBlock = 0;
+ while (True) {
+ b = bsGetBit(bsIn);
+ if (b == 2) break;
+ buffHi = (buffHi << 1) | (buffLo >> 31);
+ buffLo = (buffLo << 1) | (b & 1);
+ if (bitsRead == 47+rbStart[wrBlock])
+ blockCRC = (buffHi << 16) | (buffLo >> 16);
+
+ if (outFile != NULL && bitsRead >= rbStart[wrBlock]
+ && bitsRead <= rbEnd[wrBlock]) {
+ bsPutBit ( bsWr, b );
+ }
+
+ bitsRead++;
+
+ if (bitsRead == rbEnd[wrBlock]+1) {
+ if (outFile != NULL) {
+ bsPutUChar ( bsWr, 0x17 ); bsPutUChar ( bsWr, 0x72 );
+ bsPutUChar ( bsWr, 0x45 ); bsPutUChar ( bsWr, 0x38 );
+ bsPutUChar ( bsWr, 0x50 ); bsPutUChar ( bsWr, 0x90 );
+ bsPutUInt32 ( bsWr, blockCRC );
+ bsClose ( bsWr );
+ }
+ if (wrBlock >= rbCtr) break;
+ wrBlock++;
+ } else
+ if (bitsRead == rbStart[wrBlock]) {
+ /* Create the output file name, correctly handling leading paths.
+ (31.10.2001 by Sergey E. Kusikov) */
+ Char* split;
+ Int32 ofs, k;
+ for (k = 0; k < BZ_MAX_FILENAME; k++)
+ outFileName[k] = 0;
+ strcpy (outFileName, inFileName);
+ split = strrchr (outFileName, BZ_SPLIT_SYM);
+ if (split == NULL) {
+ split = outFileName;
+ } else {
+ ++split;
+ }
+ /* Now split points to the start of the basename. */
+ ofs = split - outFileName;
+ sprintf (split, "rec%5d", wrBlock+1);
+ for (p = split; *p != 0; p++) if (*p == ' ') *p = '0';
+ strcat (outFileName, inFileName + ofs);
+
+ if ( !endsInBz2(outFileName)) strcat ( outFileName, ".bz2" );
+
+ fprintf ( stderr, " writing block %d to `%s' ...\n",
+ wrBlock+1, outFileName );
+
+ outFile = fopen ( outFileName, "wb" );
+ if (outFile == NULL) {
+ fprintf ( stderr, "%s: can't write `%s'\n",
+ progName, outFileName );
+ exit(1);
+ }
+ bsWr = bsOpenWriteStream ( outFile );
+ bsPutUChar ( bsWr, BZ_HDR_B );
+ bsPutUChar ( bsWr, BZ_HDR_Z );
+ bsPutUChar ( bsWr, BZ_HDR_h );
+ bsPutUChar ( bsWr, BZ_HDR_0 + 9 );
+ bsPutUChar ( bsWr, 0x31 ); bsPutUChar ( bsWr, 0x41 );
+ bsPutUChar ( bsWr, 0x59 ); bsPutUChar ( bsWr, 0x26 );
+ bsPutUChar ( bsWr, 0x53 ); bsPutUChar ( bsWr, 0x59 );
+ }
+ }
+
+ fprintf ( stderr, "%s: finished\n", progName );
+ return 0;
+}
+
+
+
+/*-----------------------------------------------------------*/
+/*--- end bzip2recover.c ---*/
+/*-----------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzlib.c b/libs/ext/bzip2/bzlib.c
new file mode 100644
index 0000000..bd358a7
--- /dev/null
+++ b/libs/ext/bzip2/bzlib.c
@@ -0,0 +1,1572 @@
+
+/*-------------------------------------------------------------*/
+/*--- Library top-level functions. ---*/
+/*--- bzlib.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+/* CHANGES
+ 0.9.0 -- original version.
+ 0.9.0a/b -- no changes in this file.
+ 0.9.0c -- made zero-length BZ_FLUSH work correctly in bzCompress().
+ fixed bzWrite/bzRead to ignore zero-length requests.
+ fixed bzread to correctly handle read requests after EOF.
+ wrong parameter order in call to bzDecompressInit in
+ bzBuffToBuffDecompress. Fixed.
+*/
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+/*--- Compression stuff ---*/
+/*---------------------------------------------------*/
+
+
+/*---------------------------------------------------*/
+#ifndef BZ_NO_STDIO
+void BZ2_bz__AssertH__fail ( int errcode )
+{
+ fprintf(stderr,
+ "\n\nbzip2/libbzip2: internal error number %d.\n"
+ "This is a bug in bzip2/libbzip2, %s.\n"
+ "Please report it to me at: jseward at bzip.org. If this happened\n"
+ "when you were using some program which uses libbzip2 as a\n"
+ "component, you should also report this bug to the author(s)\n"
+ "of that program. Please make an effort to report this bug;\n"
+ "timely and accurate bug reports eventually lead to higher\n"
+ "quality software. Thanks. Julian Seward, 10 December 2007.\n\n",
+ errcode,
+ BZ2_bzlibVersion()
+ );
+
+ if (errcode == 1007) {
+ fprintf(stderr,
+ "\n*** A special note about internal error number 1007 ***\n"
+ "\n"
+ "Experience suggests that a common cause of i.e. 1007\n"
+ "is unreliable memory or other hardware. The 1007 assertion\n"
+ "just happens to cross-check the results of huge numbers of\n"
+ "memory reads/writes, and so acts (unintendedly) as a stress\n"
+ "test of your memory system.\n"
+ "\n"
+ "I suggest the following: try compressing the file again,\n"
+ "possibly monitoring progress in detail with the -vv flag.\n"
+ "\n"
+ "* If the error cannot be reproduced, and/or happens at different\n"
+ " points in compression, you may have a flaky memory system.\n"
+ " Try a memory-test program. I have used Memtest86\n"
+ " (www.memtest86.com). At the time of writing it is free (GPLd).\n"
+ " Memtest86 tests memory much more thorougly than your BIOSs\n"
+ " power-on test, and may find failures that the BIOS doesn't.\n"
+ "\n"
+ "* If the error can be repeatably reproduced, this is a bug in\n"
+ " bzip2, and I would very much like to hear about it. Please\n"
+ " let me know, and, ideally, save a copy of the file causing the\n"
+ " problem -- without which I will be unable to investigate it.\n"
+ "\n"
+ );
+ }
+
+ exit(3);
+}
+#endif
+
+
+/*---------------------------------------------------*/
+static
+int bz_config_ok ( void )
+{
+ if (sizeof(int) != 4) return 0;
+ if (sizeof(short) != 2) return 0;
+ if (sizeof(char) != 1) return 0;
+ return 1;
+}
+
+
+/*---------------------------------------------------*/
+static
+void* default_bzalloc ( void* opaque, Int32 items, Int32 size )
+{
+ void* v = malloc ( items * size );
+ return v;
+}
+
+static
+void default_bzfree ( void* opaque, void* addr )
+{
+ if (addr != NULL) free ( addr );
+}
+
+
+/*---------------------------------------------------*/
+static
+void prepare_new_block ( EState* s )
+{
+ Int32 i;
+ s->nblock = 0;
+ s->numZ = 0;
+ s->state_out_pos = 0;
+ BZ_INITIALISE_CRC ( s->blockCRC );
+ for (i = 0; i < 256; i++) s->inUse[i] = False;
+ s->blockNo++;
+}
+
+
+/*---------------------------------------------------*/
+static
+void init_RL ( EState* s )
+{
+ s->state_in_ch = 256;
+ s->state_in_len = 0;
+}
+
+
+static
+Bool isempty_RL ( EState* s )
+{
+ if (s->state_in_ch < 256 && s->state_in_len > 0)
+ return False; else
+ return True;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompressInit)
+ ( bz_stream* strm,
+ int blockSize100k,
+ int verbosity,
+ int workFactor )
+{
+ Int32 n;
+ EState* s;
+
+ if (!bz_config_ok()) return BZ_CONFIG_ERROR;
+
+ if (strm == NULL ||
+ blockSize100k < 1 || blockSize100k > 9 ||
+ workFactor < 0 || workFactor > 250)
+ return BZ_PARAM_ERROR;
+
+ if (workFactor == 0) workFactor = 30;
+ if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
+ if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
+
+ s = BZALLOC( sizeof(EState) );
+ if (s == NULL) return BZ_MEM_ERROR;
+ s->strm = strm;
+
+ s->arr1 = NULL;
+ s->arr2 = NULL;
+ s->ftab = NULL;
+
+ n = 100000 * blockSize100k;
+ s->arr1 = BZALLOC( n * sizeof(UInt32) );
+ s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );
+ s->ftab = BZALLOC( 65537 * sizeof(UInt32) );
+
+ if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {
+ if (s->arr1 != NULL) BZFREE(s->arr1);
+ if (s->arr2 != NULL) BZFREE(s->arr2);
+ if (s->ftab != NULL) BZFREE(s->ftab);
+ if (s != NULL) BZFREE(s);
+ return BZ_MEM_ERROR;
+ }
+
+ s->blockNo = 0;
+ s->state = BZ_S_INPUT;
+ s->mode = BZ_M_RUNNING;
+ s->combinedCRC = 0;
+ s->blockSize100k = blockSize100k;
+ s->nblockMAX = 100000 * blockSize100k - 19;
+ s->verbosity = verbosity;
+ s->workFactor = workFactor;
+
+ s->block = (UChar*)s->arr2;
+ s->mtfv = (UInt16*)s->arr1;
+ s->zbits = NULL;
+ s->ptr = (UInt32*)s->arr1;
+
+ strm->state = s;
+ strm->total_in_lo32 = 0;
+ strm->total_in_hi32 = 0;
+ strm->total_out_lo32 = 0;
+ strm->total_out_hi32 = 0;
+ init_RL ( s );
+ prepare_new_block ( s );
+ return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+static
+void add_pair_to_block ( EState* s )
+{
+ Int32 i;
+ UChar ch = (UChar)(s->state_in_ch);
+ for (i = 0; i < s->state_in_len; i++) {
+ BZ_UPDATE_CRC( s->blockCRC, ch );
+ }
+ s->inUse[s->state_in_ch] = True;
+ switch (s->state_in_len) {
+ case 1:
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ break;
+ case 2:
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ break;
+ case 3:
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ break;
+ default:
+ s->inUse[s->state_in_len-4] = True;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = ((UChar)(s->state_in_len-4));
+ s->nblock++;
+ break;
+ }
+}
+
+
+/*---------------------------------------------------*/
+static
+void flush_RL ( EState* s )
+{
+ if (s->state_in_ch < 256) add_pair_to_block ( s );
+ init_RL ( s );
+}
+
+
+/*---------------------------------------------------*/
+#define ADD_CHAR_TO_BLOCK(zs,zchh0) \
+{ \
+ UInt32 zchh = (UInt32)(zchh0); \
+ /*-- fast track the common case --*/ \
+ if (zchh != zs->state_in_ch && \
+ zs->state_in_len == 1) { \
+ UChar ch = (UChar)(zs->state_in_ch); \
+ BZ_UPDATE_CRC( zs->blockCRC, ch ); \
+ zs->inUse[zs->state_in_ch] = True; \
+ zs->block[zs->nblock] = (UChar)ch; \
+ zs->nblock++; \
+ zs->state_in_ch = zchh; \
+ } \
+ else \
+ /*-- general, uncommon cases --*/ \
+ if (zchh != zs->state_in_ch || \
+ zs->state_in_len == 255) { \
+ if (zs->state_in_ch < 256) \
+ add_pair_to_block ( zs ); \
+ zs->state_in_ch = zchh; \
+ zs->state_in_len = 1; \
+ } else { \
+ zs->state_in_len++; \
+ } \
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool copy_input_until_stop ( EState* s )
+{
+ Bool progress_in = False;
+
+ if (s->mode == BZ_M_RUNNING) {
+
+ /*-- fast track the common case --*/
+ while (True) {
+ /*-- block full? --*/
+ if (s->nblock >= s->nblockMAX) break;
+ /*-- no input? --*/
+ if (s->strm->avail_in == 0) break;
+ progress_in = True;
+ ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
+ s->strm->next_in++;
+ s->strm->avail_in--;
+ s->strm->total_in_lo32++;
+ if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
+ }
+
+ } else {
+
+ /*-- general, uncommon case --*/
+ while (True) {
+ /*-- block full? --*/
+ if (s->nblock >= s->nblockMAX) break;
+ /*-- no input? --*/
+ if (s->strm->avail_in == 0) break;
+ /*-- flush/finish end? --*/
+ if (s->avail_in_expect == 0) break;
+ progress_in = True;
+ ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
+ s->strm->next_in++;
+ s->strm->avail_in--;
+ s->strm->total_in_lo32++;
+ if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
+ s->avail_in_expect--;
+ }
+ }
+ return progress_in;
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool copy_output_until_stop ( EState* s )
+{
+ Bool progress_out = False;
+
+ while (True) {
+
+ /*-- no output space? --*/
+ if (s->strm->avail_out == 0) break;
+
+ /*-- block done? --*/
+ if (s->state_out_pos >= s->numZ) break;
+
+ progress_out = True;
+ *(s->strm->next_out) = s->zbits[s->state_out_pos];
+ s->state_out_pos++;
+ s->strm->avail_out--;
+ s->strm->next_out++;
+ s->strm->total_out_lo32++;
+ if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+ }
+
+ return progress_out;
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool handle_compress ( bz_stream* strm )
+{
+ Bool progress_in = False;
+ Bool progress_out = False;
+ EState* s = strm->state;
+
+ while (True) {
+
+ if (s->state == BZ_S_OUTPUT) {
+ progress_out |= copy_output_until_stop ( s );
+ if (s->state_out_pos < s->numZ) break;
+ if (s->mode == BZ_M_FINISHING &&
+ s->avail_in_expect == 0 &&
+ isempty_RL(s)) break;
+ prepare_new_block ( s );
+ s->state = BZ_S_INPUT;
+ if (s->mode == BZ_M_FLUSHING &&
+ s->avail_in_expect == 0 &&
+ isempty_RL(s)) break;
+ }
+
+ if (s->state == BZ_S_INPUT) {
+ progress_in |= copy_input_until_stop ( s );
+ if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {
+ flush_RL ( s );
+ BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );
+ s->state = BZ_S_OUTPUT;
+ }
+ else
+ if (s->nblock >= s->nblockMAX) {
+ BZ2_compressBlock ( s, False );
+ s->state = BZ_S_OUTPUT;
+ }
+ else
+ if (s->strm->avail_in == 0) {
+ break;
+ }
+ }
+
+ }
+
+ return progress_in || progress_out;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )
+{
+ Bool progress;
+ EState* s;
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ s = strm->state;
+ if (s == NULL) return BZ_PARAM_ERROR;
+ if (s->strm != strm) return BZ_PARAM_ERROR;
+
+ preswitch:
+ switch (s->mode) {
+
+ case BZ_M_IDLE:
+ return BZ_SEQUENCE_ERROR;
+
+ case BZ_M_RUNNING:
+ if (action == BZ_RUN) {
+ progress = handle_compress ( strm );
+ return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;
+ }
+ else
+ if (action == BZ_FLUSH) {
+ s->avail_in_expect = strm->avail_in;
+ s->mode = BZ_M_FLUSHING;
+ goto preswitch;
+ }
+ else
+ if (action == BZ_FINISH) {
+ s->avail_in_expect = strm->avail_in;
+ s->mode = BZ_M_FINISHING;
+ goto preswitch;
+ }
+ else
+ return BZ_PARAM_ERROR;
+
+ case BZ_M_FLUSHING:
+ if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;
+ if (s->avail_in_expect != s->strm->avail_in)
+ return BZ_SEQUENCE_ERROR;
+ progress = handle_compress ( strm );
+ if (s->avail_in_expect > 0 || !isempty_RL(s) ||
+ s->state_out_pos < s->numZ) return BZ_FLUSH_OK;
+ s->mode = BZ_M_RUNNING;
+ return BZ_RUN_OK;
+
+ case BZ_M_FINISHING:
+ if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;
+ if (s->avail_in_expect != s->strm->avail_in)
+ return BZ_SEQUENCE_ERROR;
+ progress = handle_compress ( strm );
+ if (!progress) return BZ_SEQUENCE_ERROR;
+ if (s->avail_in_expect > 0 || !isempty_RL(s) ||
+ s->state_out_pos < s->numZ) return BZ_FINISH_OK;
+ s->mode = BZ_M_IDLE;
+ return BZ_STREAM_END;
+ }
+ return BZ_OK; /*--not reached--*/
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm )
+{
+ EState* s;
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ s = strm->state;
+ if (s == NULL) return BZ_PARAM_ERROR;
+ if (s->strm != strm) return BZ_PARAM_ERROR;
+
+ if (s->arr1 != NULL) BZFREE(s->arr1);
+ if (s->arr2 != NULL) BZFREE(s->arr2);
+ if (s->ftab != NULL) BZFREE(s->ftab);
+ BZFREE(strm->state);
+
+ strm->state = NULL;
+
+ return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+/*--- Decompression stuff ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompressInit)
+ ( bz_stream* strm,
+ int verbosity,
+ int small )
+{
+ DState* s;
+
+ if (!bz_config_ok()) return BZ_CONFIG_ERROR;
+
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ if (small != 0 && small != 1) return BZ_PARAM_ERROR;
+ if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;
+
+ if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
+ if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
+
+ s = BZALLOC( sizeof(DState) );
+ if (s == NULL) return BZ_MEM_ERROR;
+ s->strm = strm;
+ strm->state = s;
+ s->state = BZ_X_MAGIC_1;
+ s->bsLive = 0;
+ s->bsBuff = 0;
+ s->calculatedCombinedCRC = 0;
+ strm->total_in_lo32 = 0;
+ strm->total_in_hi32 = 0;
+ strm->total_out_lo32 = 0;
+ strm->total_out_hi32 = 0;
+ s->smallDecompress = (Bool)small;
+ s->ll4 = NULL;
+ s->ll16 = NULL;
+ s->tt = NULL;
+ s->currBlockNo = 0;
+ s->verbosity = verbosity;
+
+ return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+/* Return True iff data corruption is discovered.
+ Returns False if there is no problem.
+*/
+static
+Bool unRLE_obuf_to_output_FAST ( DState* s )
+{
+ UChar k1;
+
+ if (s->blockRandomised) {
+
+ while (True) {
+ /* try to finish existing run */
+ while (True) {
+ if (s->strm->avail_out == 0) return False;
+ if (s->state_out_len == 0) break;
+ *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+ BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+ s->state_out_len--;
+ s->strm->next_out++;
+ s->strm->avail_out--;
+ s->strm->total_out_lo32++;
+ if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+ }
+
+ /* can a new run be started? */
+ if (s->nblock_used == s->save_nblock+1) return False;
+
+ /* Only caused by corrupt data stream? */
+ if (s->nblock_used > s->save_nblock+1)
+ return True;
+
+ s->state_out_len = 1;
+ s->state_out_ch = s->k0;
+ BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 2;
+ BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 3;
+ BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ s->state_out_len = ((Int32)k1) + 4;
+ BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK;
+ s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
+ }
+
+ } else {
+
+ /* restore */
+ UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC;
+ UChar c_state_out_ch = s->state_out_ch;
+ Int32 c_state_out_len = s->state_out_len;
+ Int32 c_nblock_used = s->nblock_used;
+ Int32 c_k0 = s->k0;
+ UInt32* c_tt = s->tt;
+ UInt32 c_tPos = s->tPos;
+ char* cs_next_out = s->strm->next_out;
+ unsigned int cs_avail_out = s->strm->avail_out;
+ Int32 ro_blockSize100k = s->blockSize100k;
+ /* end restore */
+
+ UInt32 avail_out_INIT = cs_avail_out;
+ Int32 s_save_nblockPP = s->save_nblock+1;
+ unsigned int total_out_lo32_old;
+
+ while (True) {
+
+ /* try to finish existing run */
+ if (c_state_out_len > 0) {
+ while (True) {
+ if (cs_avail_out == 0) goto return_notr;
+ if (c_state_out_len == 1) break;
+ *( (UChar*)(cs_next_out) ) = c_state_out_ch;
+ BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
+ c_state_out_len--;
+ cs_next_out++;
+ cs_avail_out--;
+ }
+ s_state_out_len_eq_one:
+ {
+ if (cs_avail_out == 0) {
+ c_state_out_len = 1; goto return_notr;
+ };
+ *( (UChar*)(cs_next_out) ) = c_state_out_ch;
+ BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
+ cs_next_out++;
+ cs_avail_out--;
+ }
+ }
+ /* Only caused by corrupt data stream? */
+ if (c_nblock_used > s_save_nblockPP)
+ return True;
+
+ /* can a new run be started? */
+ if (c_nblock_used == s_save_nblockPP) {
+ c_state_out_len = 0; goto return_notr;
+ };
+ c_state_out_ch = c_k0;
+ BZ_GET_FAST_C(k1); c_nblock_used++;
+ if (k1 != c_k0) {
+ c_k0 = k1; goto s_state_out_len_eq_one;
+ };
+ if (c_nblock_used == s_save_nblockPP)
+ goto s_state_out_len_eq_one;
+
+ c_state_out_len = 2;
+ BZ_GET_FAST_C(k1); c_nblock_used++;
+ if (c_nblock_used == s_save_nblockPP) continue;
+ if (k1 != c_k0) { c_k0 = k1; continue; };
+
+ c_state_out_len = 3;
+ BZ_GET_FAST_C(k1); c_nblock_used++;
+ if (c_nblock_used == s_save_nblockPP) continue;
+ if (k1 != c_k0) { c_k0 = k1; continue; };
+
+ BZ_GET_FAST_C(k1); c_nblock_used++;
+ c_state_out_len = ((Int32)k1) + 4;
+ BZ_GET_FAST_C(c_k0); c_nblock_used++;
+ }
+
+ return_notr:
+ total_out_lo32_old = s->strm->total_out_lo32;
+ s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);
+ if (s->strm->total_out_lo32 < total_out_lo32_old)
+ s->strm->total_out_hi32++;
+
+ /* save */
+ s->calculatedBlockCRC = c_calculatedBlockCRC;
+ s->state_out_ch = c_state_out_ch;
+ s->state_out_len = c_state_out_len;
+ s->nblock_used = c_nblock_used;
+ s->k0 = c_k0;
+ s->tt = c_tt;
+ s->tPos = c_tPos;
+ s->strm->next_out = cs_next_out;
+ s->strm->avail_out = cs_avail_out;
+ /* end save */
+ }
+ return False;
+}
+
+
+
+/*---------------------------------------------------*/
+__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )
+{
+ Int32 nb, na, mid;
+ nb = 0;
+ na = 256;
+ do {
+ mid = (nb + na) >> 1;
+ if (indx >= cftab[mid]) nb = mid; else na = mid;
+ }
+ while (na - nb != 1);
+ return nb;
+}
+
+
+/*---------------------------------------------------*/
+/* Return True iff data corruption is discovered.
+ Returns False if there is no problem.
+*/
+static
+Bool unRLE_obuf_to_output_SMALL ( DState* s )
+{
+ UChar k1;
+
+ if (s->blockRandomised) {
+
+ while (True) {
+ /* try to finish existing run */
+ while (True) {
+ if (s->strm->avail_out == 0) return False;
+ if (s->state_out_len == 0) break;
+ *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+ BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+ s->state_out_len--;
+ s->strm->next_out++;
+ s->strm->avail_out--;
+ s->strm->total_out_lo32++;
+ if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+ }
+
+ /* can a new run be started? */
+ if (s->nblock_used == s->save_nblock+1) return False;
+
+ /* Only caused by corrupt data stream? */
+ if (s->nblock_used > s->save_nblock+1)
+ return True;
+
+ s->state_out_len = 1;
+ s->state_out_ch = s->k0;
+ BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 2;
+ BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 3;
+ BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ s->state_out_len = ((Int32)k1) + 4;
+ BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK;
+ s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
+ }
+
+ } else {
+
+ while (True) {
+ /* try to finish existing run */
+ while (True) {
+ if (s->strm->avail_out == 0) return False;
+ if (s->state_out_len == 0) break;
+ *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+ BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+ s->state_out_len--;
+ s->strm->next_out++;
+ s->strm->avail_out--;
+ s->strm->total_out_lo32++;
+ if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+ }
+
+ /* can a new run be started? */
+ if (s->nblock_used == s->save_nblock+1) return False;
+
+ /* Only caused by corrupt data stream? */
+ if (s->nblock_used > s->save_nblock+1)
+ return True;
+
+ s->state_out_len = 1;
+ s->state_out_ch = s->k0;
+ BZ_GET_SMALL(k1); s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 2;
+ BZ_GET_SMALL(k1); s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 3;
+ BZ_GET_SMALL(k1); s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ BZ_GET_SMALL(k1); s->nblock_used++;
+ s->state_out_len = ((Int32)k1) + 4;
+ BZ_GET_SMALL(s->k0); s->nblock_used++;
+ }
+
+ }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompress) ( bz_stream *strm )
+{
+ Bool corrupt;
+ DState* s;
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ s = strm->state;
+ if (s == NULL) return BZ_PARAM_ERROR;
+ if (s->strm != strm) return BZ_PARAM_ERROR;
+
+ while (True) {
+ if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;
+ if (s->state == BZ_X_OUTPUT) {
+ if (s->smallDecompress)
+ corrupt = unRLE_obuf_to_output_SMALL ( s ); else
+ corrupt = unRLE_obuf_to_output_FAST ( s );
+ if (corrupt) return BZ_DATA_ERROR;
+ if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {
+ BZ_FINALISE_CRC ( s->calculatedBlockCRC );
+ if (s->verbosity >= 3)
+ VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC,
+ s->calculatedBlockCRC );
+ if (s->verbosity >= 2) VPrintf0 ( "]" );
+ if (s->calculatedBlockCRC != s->storedBlockCRC)
+ return BZ_DATA_ERROR;
+ s->calculatedCombinedCRC
+ = (s->calculatedCombinedCRC << 1) |
+ (s->calculatedCombinedCRC >> 31);
+ s->calculatedCombinedCRC ^= s->calculatedBlockCRC;
+ s->state = BZ_X_BLKHDR_1;
+ } else {
+ return BZ_OK;
+ }
+ }
+ if (s->state >= BZ_X_MAGIC_1) {
+ Int32 r = BZ2_decompress ( s );
+ if (r == BZ_STREAM_END) {
+ if (s->verbosity >= 3)
+ VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x",
+ s->storedCombinedCRC, s->calculatedCombinedCRC );
+ if (s->calculatedCombinedCRC != s->storedCombinedCRC)
+ return BZ_DATA_ERROR;
+ return r;
+ }
+ if (s->state != BZ_X_OUTPUT) return r;
+ }
+ }
+
+ AssertH ( 0, 6001 );
+
+ return 0; /*NOTREACHED*/
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm )
+{
+ DState* s;
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ s = strm->state;
+ if (s == NULL) return BZ_PARAM_ERROR;
+ if (s->strm != strm) return BZ_PARAM_ERROR;
+
+ if (s->tt != NULL) BZFREE(s->tt);
+ if (s->ll16 != NULL) BZFREE(s->ll16);
+ if (s->ll4 != NULL) BZFREE(s->ll4);
+
+ BZFREE(strm->state);
+ strm->state = NULL;
+
+ return BZ_OK;
+}
+
+
+#ifndef BZ_NO_STDIO
+/*---------------------------------------------------*/
+/*--- File I/O stuff ---*/
+/*---------------------------------------------------*/
+
+#define BZ_SETERR(eee) \
+{ \
+ if (bzerror != NULL) *bzerror = eee; \
+ if (bzf != NULL) bzf->lastErr = eee; \
+}
+
+typedef
+ struct {
+ FILE* handle;
+ Char buf[BZ_MAX_UNUSED];
+ Int32 bufN;
+ Bool writing;
+ bz_stream strm;
+ Int32 lastErr;
+ Bool initialisedOk;
+ }
+ bzFile;
+
+
+/*---------------------------------------------*/
+static Bool myfeof ( FILE* f )
+{
+ Int32 c = fgetc ( f );
+ if (c == EOF) return True;
+ ungetc ( c, f );
+ return False;
+}
+
+
+/*---------------------------------------------------*/
+BZFILE* BZ_API(BZ2_bzWriteOpen)
+ ( int* bzerror,
+ FILE* f,
+ int blockSize100k,
+ int verbosity,
+ int workFactor )
+{
+ Int32 ret;
+ bzFile* bzf = NULL;
+
+ BZ_SETERR(BZ_OK);
+
+ if (f == NULL ||
+ (blockSize100k < 1 || blockSize100k > 9) ||
+ (workFactor < 0 || workFactor > 250) ||
+ (verbosity < 0 || verbosity > 4))
+ { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
+
+ if (ferror(f))
+ { BZ_SETERR(BZ_IO_ERROR); return NULL; };
+
+ bzf = malloc ( sizeof(bzFile) );
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
+
+ BZ_SETERR(BZ_OK);
+ bzf->initialisedOk = False;
+ bzf->bufN = 0;
+ bzf->handle = f;
+ bzf->writing = True;
+ bzf->strm.bzalloc = NULL;
+ bzf->strm.bzfree = NULL;
+ bzf->strm.opaque = NULL;
+
+ if (workFactor == 0) workFactor = 30;
+ ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k,
+ verbosity, workFactor );
+ if (ret != BZ_OK)
+ { BZ_SETERR(ret); free(bzf); return NULL; };
+
+ bzf->strm.avail_in = 0;
+ bzf->initialisedOk = True;
+ return bzf;
+}
+
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzWrite)
+ ( int* bzerror,
+ BZFILE* b,
+ void* buf,
+ int len )
+{
+ Int32 n, n2, ret;
+ bzFile* bzf = (bzFile*)b;
+
+ BZ_SETERR(BZ_OK);
+ if (bzf == NULL || buf == NULL || len < 0)
+ { BZ_SETERR(BZ_PARAM_ERROR); return; };
+ if (!(bzf->writing))
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+
+ if (len == 0)
+ { BZ_SETERR(BZ_OK); return; };
+
+ bzf->strm.avail_in = len;
+ bzf->strm.next_in = buf;
+
+ while (True) {
+ bzf->strm.avail_out = BZ_MAX_UNUSED;
+ bzf->strm.next_out = bzf->buf;
+ ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );
+ if (ret != BZ_RUN_OK)
+ { BZ_SETERR(ret); return; };
+
+ if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
+ n = BZ_MAX_UNUSED - bzf->strm.avail_out;
+ n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar),
+ n, bzf->handle );
+ if (n != n2 || ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+ }
+
+ if (bzf->strm.avail_in == 0)
+ { BZ_SETERR(BZ_OK); return; };
+ }
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzWriteClose)
+ ( int* bzerror,
+ BZFILE* b,
+ int abandon,
+ unsigned int* nbytes_in,
+ unsigned int* nbytes_out )
+{
+ BZ2_bzWriteClose64 ( bzerror, b, abandon,
+ nbytes_in, NULL, nbytes_out, NULL );
+}
+
+
+void BZ_API(BZ2_bzWriteClose64)
+ ( int* bzerror,
+ BZFILE* b,
+ int abandon,
+ unsigned int* nbytes_in_lo32,
+ unsigned int* nbytes_in_hi32,
+ unsigned int* nbytes_out_lo32,
+ unsigned int* nbytes_out_hi32 )
+{
+ Int32 n, n2, ret;
+ bzFile* bzf = (bzFile*)b;
+
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_OK); return; };
+ if (!(bzf->writing))
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+
+ if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;
+ if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;
+ if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;
+ if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;
+
+ if ((!abandon) && bzf->lastErr == BZ_OK) {
+ while (True) {
+ bzf->strm.avail_out = BZ_MAX_UNUSED;
+ bzf->strm.next_out = bzf->buf;
+ ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );
+ if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)
+ { BZ_SETERR(ret); return; };
+
+ if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
+ n = BZ_MAX_UNUSED - bzf->strm.avail_out;
+ n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar),
+ n, bzf->handle );
+ if (n != n2 || ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+ }
+
+ if (ret == BZ_STREAM_END) break;
+ }
+ }
+
+ if ( !abandon && !ferror ( bzf->handle ) ) {
+ fflush ( bzf->handle );
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+ }
+
+ if (nbytes_in_lo32 != NULL)
+ *nbytes_in_lo32 = bzf->strm.total_in_lo32;
+ if (nbytes_in_hi32 != NULL)
+ *nbytes_in_hi32 = bzf->strm.total_in_hi32;
+ if (nbytes_out_lo32 != NULL)
+ *nbytes_out_lo32 = bzf->strm.total_out_lo32;
+ if (nbytes_out_hi32 != NULL)
+ *nbytes_out_hi32 = bzf->strm.total_out_hi32;
+
+ BZ_SETERR(BZ_OK);
+ BZ2_bzCompressEnd ( &(bzf->strm) );
+ free ( bzf );
+}
+
+
+/*---------------------------------------------------*/
+BZFILE* BZ_API(BZ2_bzReadOpen)
+ ( int* bzerror,
+ FILE* f,
+ int verbosity,
+ int small,
+ void* unused,
+ int nUnused )
+{
+ bzFile* bzf = NULL;
+ int ret;
+
+ BZ_SETERR(BZ_OK);
+
+ if (f == NULL ||
+ (small != 0 && small != 1) ||
+ (verbosity < 0 || verbosity > 4) ||
+ (unused == NULL && nUnused != 0) ||
+ (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))
+ { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
+
+ if (ferror(f))
+ { BZ_SETERR(BZ_IO_ERROR); return NULL; };
+
+ bzf = malloc ( sizeof(bzFile) );
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
+
+ BZ_SETERR(BZ_OK);
+
+ bzf->initialisedOk = False;
+ bzf->handle = f;
+ bzf->bufN = 0;
+ bzf->writing = False;
+ bzf->strm.bzalloc = NULL;
+ bzf->strm.bzfree = NULL;
+ bzf->strm.opaque = NULL;
+
+ while (nUnused > 0) {
+ bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;
+ unused = ((void*)( 1 + ((UChar*)(unused)) ));
+ nUnused--;
+ }
+
+ ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );
+ if (ret != BZ_OK)
+ { BZ_SETERR(ret); free(bzf); return NULL; };
+
+ bzf->strm.avail_in = bzf->bufN;
+ bzf->strm.next_in = bzf->buf;
+
+ bzf->initialisedOk = True;
+ return bzf;
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )
+{
+ bzFile* bzf = (bzFile*)b;
+
+ BZ_SETERR(BZ_OK);
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_OK); return; };
+
+ if (bzf->writing)
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+
+ if (bzf->initialisedOk)
+ (void)BZ2_bzDecompressEnd ( &(bzf->strm) );
+ free ( bzf );
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzRead)
+ ( int* bzerror,
+ BZFILE* b,
+ void* buf,
+ int len )
+{
+ Int32 n, ret;
+ bzFile* bzf = (bzFile*)b;
+
+ BZ_SETERR(BZ_OK);
+
+ if (bzf == NULL || buf == NULL || len < 0)
+ { BZ_SETERR(BZ_PARAM_ERROR); return 0; };
+
+ if (bzf->writing)
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };
+
+ if (len == 0)
+ { BZ_SETERR(BZ_OK); return 0; };
+
+ bzf->strm.avail_out = len;
+ bzf->strm.next_out = buf;
+
+ while (True) {
+
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return 0; };
+
+ if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {
+ n = fread ( bzf->buf, sizeof(UChar),
+ BZ_MAX_UNUSED, bzf->handle );
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return 0; };
+ bzf->bufN = n;
+ bzf->strm.avail_in = bzf->bufN;
+ bzf->strm.next_in = bzf->buf;
+ }
+
+ ret = BZ2_bzDecompress ( &(bzf->strm) );
+
+ if (ret != BZ_OK && ret != BZ_STREAM_END)
+ { BZ_SETERR(ret); return 0; };
+
+ if (ret == BZ_OK && myfeof(bzf->handle) &&
+ bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)
+ { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };
+
+ if (ret == BZ_STREAM_END)
+ { BZ_SETERR(BZ_STREAM_END);
+ return len - bzf->strm.avail_out; };
+ if (bzf->strm.avail_out == 0)
+ { BZ_SETERR(BZ_OK); return len; };
+
+ }
+
+ return 0; /*not reached*/
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzReadGetUnused)
+ ( int* bzerror,
+ BZFILE* b,
+ void** unused,
+ int* nUnused )
+{
+ bzFile* bzf = (bzFile*)b;
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_PARAM_ERROR); return; };
+ if (bzf->lastErr != BZ_STREAM_END)
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+ if (unused == NULL || nUnused == NULL)
+ { BZ_SETERR(BZ_PARAM_ERROR); return; };
+
+ BZ_SETERR(BZ_OK);
+ *nUnused = bzf->strm.avail_in;
+ *unused = bzf->strm.next_in;
+}
+#endif
+
+
+/*---------------------------------------------------*/
+/*--- Misc convenience stuff ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzBuffToBuffCompress)
+ ( char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int blockSize100k,
+ int verbosity,
+ int workFactor )
+{
+ bz_stream strm;
+ int ret;
+
+ if (dest == NULL || destLen == NULL ||
+ source == NULL ||
+ blockSize100k < 1 || blockSize100k > 9 ||
+ verbosity < 0 || verbosity > 4 ||
+ workFactor < 0 || workFactor > 250)
+ return BZ_PARAM_ERROR;
+
+ if (workFactor == 0) workFactor = 30;
+ strm.bzalloc = NULL;
+ strm.bzfree = NULL;
+ strm.opaque = NULL;
+ ret = BZ2_bzCompressInit ( &strm, blockSize100k,
+ verbosity, workFactor );
+ if (ret != BZ_OK) return ret;
+
+ strm.next_in = source;
+ strm.next_out = dest;
+ strm.avail_in = sourceLen;
+ strm.avail_out = *destLen;
+
+ ret = BZ2_bzCompress ( &strm, BZ_FINISH );
+ if (ret == BZ_FINISH_OK) goto output_overflow;
+ if (ret != BZ_STREAM_END) goto errhandler;
+
+ /* normal termination */
+ *destLen -= strm.avail_out;
+ BZ2_bzCompressEnd ( &strm );
+ return BZ_OK;
+
+ output_overflow:
+ BZ2_bzCompressEnd ( &strm );
+ return BZ_OUTBUFF_FULL;
+
+ errhandler:
+ BZ2_bzCompressEnd ( &strm );
+ return ret;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzBuffToBuffDecompress)
+ ( char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int small,
+ int verbosity )
+{
+ bz_stream strm;
+ int ret;
+
+ if (dest == NULL || destLen == NULL ||
+ source == NULL ||
+ (small != 0 && small != 1) ||
+ verbosity < 0 || verbosity > 4)
+ return BZ_PARAM_ERROR;
+
+ strm.bzalloc = NULL;
+ strm.bzfree = NULL;
+ strm.opaque = NULL;
+ ret = BZ2_bzDecompressInit ( &strm, verbosity, small );
+ if (ret != BZ_OK) return ret;
+
+ strm.next_in = source;
+ strm.next_out = dest;
+ strm.avail_in = sourceLen;
+ strm.avail_out = *destLen;
+
+ ret = BZ2_bzDecompress ( &strm );
+ if (ret == BZ_OK) goto output_overflow_or_eof;
+ if (ret != BZ_STREAM_END) goto errhandler;
+
+ /* normal termination */
+ *destLen -= strm.avail_out;
+ BZ2_bzDecompressEnd ( &strm );
+ return BZ_OK;
+
+ output_overflow_or_eof:
+ if (strm.avail_out > 0) {
+ BZ2_bzDecompressEnd ( &strm );
+ return BZ_UNEXPECTED_EOF;
+ } else {
+ BZ2_bzDecompressEnd ( &strm );
+ return BZ_OUTBUFF_FULL;
+ };
+
+ errhandler:
+ BZ2_bzDecompressEnd ( &strm );
+ return ret;
+}
+
+
+/*---------------------------------------------------*/
+/*--
+ Code contributed by Yoshioka Tsuneo (tsuneo at rr.iij4u.or.jp)
+ to support better zlib compatibility.
+ This code is not _officially_ part of libbzip2 (yet);
+ I haven't tested it, documented it, or considered the
+ threading-safeness of it.
+ If this code breaks, please contact both Yoshioka and me.
+--*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+/*--
+ return version like "0.9.5d, 4-Sept-1999".
+--*/
+const char * BZ_API(BZ2_bzlibVersion)(void)
+{
+ return BZ_VERSION;
+}
+
+
+#ifndef BZ_NO_STDIO
+/*---------------------------------------------------*/
+
+#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
+# include <fcntl.h>
+# include <io.h>
+# define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
+#else
+# define SET_BINARY_MODE(file)
+#endif
+static
+BZFILE * bzopen_or_bzdopen
+ ( const char *path, /* no use when bzdopen */
+ int fd, /* no use when bzdopen */
+ const char *mode,
+ int open_mode) /* bzopen: 0, bzdopen:1 */
+{
+ int bzerr;
+ char unused[BZ_MAX_UNUSED];
+ int blockSize100k = 9;
+ int writing = 0;
+ char mode2[10] = "";
+ FILE *fp = NULL;
+ BZFILE *bzfp = NULL;
+ int verbosity = 0;
+ int workFactor = 30;
+ int smallMode = 0;
+ int nUnused = 0;
+
+ if (mode == NULL) return NULL;
+ while (*mode) {
+ switch (*mode) {
+ case 'r':
+ writing = 0; break;
+ case 'w':
+ writing = 1; break;
+ case 's':
+ smallMode = 1; break;
+ default:
+ if (isdigit((int)(*mode))) {
+ blockSize100k = *mode-BZ_HDR_0;
+ }
+ }
+ mode++;
+ }
+ strcat(mode2, writing ? "w" : "r" );
+ strcat(mode2,"b"); /* binary mode */
+
+ if (open_mode==0) {
+ if (path==NULL || strcmp(path,"")==0) {
+ fp = (writing ? stdout : stdin);
+ SET_BINARY_MODE(fp);
+ } else {
+ fp = fopen(path,mode2);
+ }
+ } else {
+#ifdef BZ_STRICT_ANSI
+ fp = NULL;
+#else
+ fp = fdopen(fd,mode2);
+#endif
+ }
+ if (fp == NULL) return NULL;
+
+ if (writing) {
+ /* Guard against total chaos and anarchy -- JRS */
+ if (blockSize100k < 1) blockSize100k = 1;
+ if (blockSize100k > 9) blockSize100k = 9;
+ bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,
+ verbosity,workFactor);
+ } else {
+ bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,
+ unused,nUnused);
+ }
+ if (bzfp == NULL) {
+ if (fp != stdin && fp != stdout) fclose(fp);
+ return NULL;
+ }
+ return bzfp;
+}
+
+
+/*---------------------------------------------------*/
+/*--
+ open file for read or write.
+ ex) bzopen("file","w9")
+ case path="" or NULL => use stdin or stdout.
+--*/
+BZFILE * BZ_API(BZ2_bzopen)
+ ( const char *path,
+ const char *mode )
+{
+ return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);
+}
+
+
+/*---------------------------------------------------*/
+BZFILE * BZ_API(BZ2_bzdopen)
+ ( int fd,
+ const char *mode )
+{
+ return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )
+{
+ int bzerr, nread;
+ if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;
+ nread = BZ2_bzRead(&bzerr,b,buf,len);
+ if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {
+ return nread;
+ } else {
+ return -1;
+ }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )
+{
+ int bzerr;
+
+ BZ2_bzWrite(&bzerr,b,buf,len);
+ if(bzerr == BZ_OK){
+ return len;
+ }else{
+ return -1;
+ }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzflush) (BZFILE *b)
+{
+ /* do nothing now... */
+ return 0;
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzclose) (BZFILE* b)
+{
+ int bzerr;
+ FILE *fp;
+
+ if (b==NULL) {return;}
+ fp = ((bzFile *)b)->handle;
+ if(((bzFile*)b)->writing){
+ BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);
+ if(bzerr != BZ_OK){
+ BZ2_bzWriteClose(NULL,b,1,NULL,NULL);
+ }
+ }else{
+ BZ2_bzReadClose(&bzerr,b);
+ }
+ if(fp!=stdin && fp!=stdout){
+ fclose(fp);
+ }
+}
+
+
+/*---------------------------------------------------*/
+/*--
+ return last error code
+--*/
+static const char *bzerrorstrings[] = {
+ "OK"
+ ,"SEQUENCE_ERROR"
+ ,"PARAM_ERROR"
+ ,"MEM_ERROR"
+ ,"DATA_ERROR"
+ ,"DATA_ERROR_MAGIC"
+ ,"IO_ERROR"
+ ,"UNEXPECTED_EOF"
+ ,"OUTBUFF_FULL"
+ ,"CONFIG_ERROR"
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+};
+
+
+const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)
+{
+ int err = ((bzFile *)b)->lastErr;
+
+ if(err>0) err = 0;
+ *errnum = err;
+ return bzerrorstrings[err*-1];
+}
+#endif
+
+
+/*-------------------------------------------------------------*/
+/*--- end bzlib.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzlib.h b/libs/ext/bzip2/bzlib.h
new file mode 100644
index 0000000..8277123
--- /dev/null
+++ b/libs/ext/bzip2/bzlib.h
@@ -0,0 +1,282 @@
+
+/*-------------------------------------------------------------*/
+/*--- Public header file for the library. ---*/
+/*--- bzlib.h ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#ifndef _BZLIB_H
+#define _BZLIB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BZ_RUN 0
+#define BZ_FLUSH 1
+#define BZ_FINISH 2
+
+#define BZ_OK 0
+#define BZ_RUN_OK 1
+#define BZ_FLUSH_OK 2
+#define BZ_FINISH_OK 3
+#define BZ_STREAM_END 4
+#define BZ_SEQUENCE_ERROR (-1)
+#define BZ_PARAM_ERROR (-2)
+#define BZ_MEM_ERROR (-3)
+#define BZ_DATA_ERROR (-4)
+#define BZ_DATA_ERROR_MAGIC (-5)
+#define BZ_IO_ERROR (-6)
+#define BZ_UNEXPECTED_EOF (-7)
+#define BZ_OUTBUFF_FULL (-8)
+#define BZ_CONFIG_ERROR (-9)
+
+typedef
+ struct {
+ char *next_in;
+ unsigned int avail_in;
+ unsigned int total_in_lo32;
+ unsigned int total_in_hi32;
+
+ char *next_out;
+ unsigned int avail_out;
+ unsigned int total_out_lo32;
+ unsigned int total_out_hi32;
+
+ void *state;
+
+ void *(*bzalloc)(void *,int,int);
+ void (*bzfree)(void *,void *);
+ void *opaque;
+ }
+ bz_stream;
+
+
+#ifndef BZ_IMPORT
+#define BZ_EXPORT
+#endif
+
+#ifndef BZ_NO_STDIO
+/* Need a definitition for FILE */
+#include <stdio.h>
+#endif
+
+#ifdef _WIN32
+# include <windows.h>
+# ifdef small
+ /* windows.h define small to char */
+# undef small
+# endif
+# ifdef BZ_EXPORT
+# define BZ_API(func) WINAPI func
+# define BZ_EXTERN extern
+# else
+ /* import windows dll dynamically */
+# define BZ_API(func) (WINAPI * func)
+# define BZ_EXTERN
+# endif
+#else
+# define BZ_API(func) func
+# define BZ_EXTERN extern
+#endif
+
+
+/*-- Core (low-level) library functions --*/
+
+BZ_EXTERN int BZ_API(BZ2_bzCompressInit) (
+ bz_stream* strm,
+ int blockSize100k,
+ int verbosity,
+ int workFactor
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzCompress) (
+ bz_stream* strm,
+ int action
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) (
+ bz_stream* strm
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) (
+ bz_stream *strm,
+ int verbosity,
+ int small
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompress) (
+ bz_stream* strm
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) (
+ bz_stream *strm
+ );
+
+
+
+/*-- High(er) level library functions --*/
+
+#ifndef BZ_NO_STDIO
+#define BZ_MAX_UNUSED 5000
+
+typedef void BZFILE;
+
+BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) (
+ int* bzerror,
+ FILE* f,
+ int verbosity,
+ int small,
+ void* unused,
+ int nUnused
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzReadClose) (
+ int* bzerror,
+ BZFILE* b
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) (
+ int* bzerror,
+ BZFILE* b,
+ void** unused,
+ int* nUnused
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzRead) (
+ int* bzerror,
+ BZFILE* b,
+ void* buf,
+ int len
+ );
+
+BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) (
+ int* bzerror,
+ FILE* f,
+ int blockSize100k,
+ int verbosity,
+ int workFactor
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzWrite) (
+ int* bzerror,
+ BZFILE* b,
+ void* buf,
+ int len
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzWriteClose) (
+ int* bzerror,
+ BZFILE* b,
+ int abandon,
+ unsigned int* nbytes_in,
+ unsigned int* nbytes_out
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) (
+ int* bzerror,
+ BZFILE* b,
+ int abandon,
+ unsigned int* nbytes_in_lo32,
+ unsigned int* nbytes_in_hi32,
+ unsigned int* nbytes_out_lo32,
+ unsigned int* nbytes_out_hi32
+ );
+#endif
+
+
+/*-- Utility functions --*/
+
+BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) (
+ char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int blockSize100k,
+ int verbosity,
+ int workFactor
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) (
+ char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int small,
+ int verbosity
+ );
+
+
+/*--
+ Code contributed by Yoshioka Tsuneo (tsuneo at rr.iij4u.or.jp)
+ to support better zlib compatibility.
+ This code is not _officially_ part of libbzip2 (yet);
+ I haven't tested it, documented it, or considered the
+ threading-safeness of it.
+ If this code breaks, please contact both Yoshioka and me.
+--*/
+
+BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
+ void
+ );
+
+#ifndef BZ_NO_STDIO
+BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
+ const char *path,
+ const char *mode
+ );
+
+BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
+ int fd,
+ const char *mode
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzread) (
+ BZFILE* b,
+ void* buf,
+ int len
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzwrite) (
+ BZFILE* b,
+ void* buf,
+ int len
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzflush) (
+ BZFILE* b
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzclose) (
+ BZFILE* b
+ );
+
+BZ_EXTERN const char * BZ_API(BZ2_bzerror) (
+ BZFILE *b,
+ int *errnum
+ );
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/*-------------------------------------------------------------*/
+/*--- end bzlib.h ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzlib_private.h b/libs/ext/bzip2/bzlib_private.h
new file mode 100644
index 0000000..5d0217f
--- /dev/null
+++ b/libs/ext/bzip2/bzlib_private.h
@@ -0,0 +1,509 @@
+
+/*-------------------------------------------------------------*/
+/*--- Private header file for the library. ---*/
+/*--- bzlib_private.h ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#ifndef _BZLIB_PRIVATE_H
+#define _BZLIB_PRIVATE_H
+
+#include <stdlib.h>
+
+#ifndef BZ_NO_STDIO
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#endif
+
+#include "bzlib.h"
+
+
+
+/*-- General stuff. --*/
+
+#define BZ_VERSION "1.0.6, 6-Sept-2010"
+
+typedef char Char;
+typedef unsigned char Bool;
+typedef unsigned char UChar;
+typedef int Int32;
+typedef unsigned int UInt32;
+typedef short Int16;
+typedef unsigned short UInt16;
+
+#define True ((Bool)1)
+#define False ((Bool)0)
+
+#ifndef __GNUC__
+#define __inline__ /* */
+#endif
+
+#ifndef BZ_NO_STDIO
+
+extern void BZ2_bz__AssertH__fail ( int errcode );
+#define AssertH(cond,errcode) \
+ { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
+
+#if BZ_DEBUG
+#define AssertD(cond,msg) \
+ { if (!(cond)) { \
+ fprintf ( stderr, \
+ "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
+ exit(1); \
+ }}
+#else
+#define AssertD(cond,msg) /* */
+#endif
+
+#define VPrintf0(zf) \
+ fprintf(stderr,zf)
+#define VPrintf1(zf,za1) \
+ fprintf(stderr,zf,za1)
+#define VPrintf2(zf,za1,za2) \
+ fprintf(stderr,zf,za1,za2)
+#define VPrintf3(zf,za1,za2,za3) \
+ fprintf(stderr,zf,za1,za2,za3)
+#define VPrintf4(zf,za1,za2,za3,za4) \
+ fprintf(stderr,zf,za1,za2,za3,za4)
+#define VPrintf5(zf,za1,za2,za3,za4,za5) \
+ fprintf(stderr,zf,za1,za2,za3,za4,za5)
+
+#else
+
+extern void bz_internal_error ( int errcode );
+#define AssertH(cond,errcode) \
+ { if (!(cond)) bz_internal_error ( errcode ); }
+#define AssertD(cond,msg) do { } while (0)
+#define VPrintf0(zf) do { } while (0)
+#define VPrintf1(zf,za1) do { } while (0)
+#define VPrintf2(zf,za1,za2) do { } while (0)
+#define VPrintf3(zf,za1,za2,za3) do { } while (0)
+#define VPrintf4(zf,za1,za2,za3,za4) do { } while (0)
+#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)
+
+#endif
+
+
+#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
+#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp))
+
+
+/*-- Header bytes. --*/
+
+#define BZ_HDR_B 0x42 /* 'B' */
+#define BZ_HDR_Z 0x5a /* 'Z' */
+#define BZ_HDR_h 0x68 /* 'h' */
+#define BZ_HDR_0 0x30 /* '0' */
+
+/*-- Constants for the back end. --*/
+
+#define BZ_MAX_ALPHA_SIZE 258
+#define BZ_MAX_CODE_LEN 23
+
+#define BZ_RUNA 0
+#define BZ_RUNB 1
+
+#define BZ_N_GROUPS 6
+#define BZ_G_SIZE 50
+#define BZ_N_ITERS 4
+
+#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
+
+
+
+/*-- Stuff for randomising repetitive blocks. --*/
+
+extern Int32 BZ2_rNums[512];
+
+#define BZ_RAND_DECLS \
+ Int32 rNToGo; \
+ Int32 rTPos \
+
+#define BZ_RAND_INIT_MASK \
+ s->rNToGo = 0; \
+ s->rTPos = 0 \
+
+#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
+
+#define BZ_RAND_UPD_MASK \
+ if (s->rNToGo == 0) { \
+ s->rNToGo = BZ2_rNums[s->rTPos]; \
+ s->rTPos++; \
+ if (s->rTPos == 512) s->rTPos = 0; \
+ } \
+ s->rNToGo--;
+
+
+
+/*-- Stuff for doing CRCs. --*/
+
+extern UInt32 BZ2_crc32Table[256];
+
+#define BZ_INITIALISE_CRC(crcVar) \
+{ \
+ crcVar = 0xffffffffL; \
+}
+
+#define BZ_FINALISE_CRC(crcVar) \
+{ \
+ crcVar = ~(crcVar); \
+}
+
+#define BZ_UPDATE_CRC(crcVar,cha) \
+{ \
+ crcVar = (crcVar << 8) ^ \
+ BZ2_crc32Table[(crcVar >> 24) ^ \
+ ((UChar)cha)]; \
+}
+
+
+
+/*-- States and modes for compression. --*/
+
+#define BZ_M_IDLE 1
+#define BZ_M_RUNNING 2
+#define BZ_M_FLUSHING 3
+#define BZ_M_FINISHING 4
+
+#define BZ_S_OUTPUT 1
+#define BZ_S_INPUT 2
+
+#define BZ_N_RADIX 2
+#define BZ_N_QSORT 12
+#define BZ_N_SHELL 18
+#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
+
+
+
+
+/*-- Structure holding all the compression-side stuff. --*/
+
+typedef
+ struct {
+ /* pointer back to the struct bz_stream */
+ bz_stream* strm;
+
+ /* mode this stream is in, and whether inputting */
+ /* or outputting data */
+ Int32 mode;
+ Int32 state;
+
+ /* remembers avail_in when flush/finish requested */
+ UInt32 avail_in_expect;
+
+ /* for doing the block sorting */
+ UInt32* arr1;
+ UInt32* arr2;
+ UInt32* ftab;
+ Int32 origPtr;
+
+ /* aliases for arr1 and arr2 */
+ UInt32* ptr;
+ UChar* block;
+ UInt16* mtfv;
+ UChar* zbits;
+
+ /* for deciding when to use the fallback sorting algorithm */
+ Int32 workFactor;
+
+ /* run-length-encoding of the input */
+ UInt32 state_in_ch;
+ Int32 state_in_len;
+ BZ_RAND_DECLS;
+
+ /* input and output limits and current posns */
+ Int32 nblock;
+ Int32 nblockMAX;
+ Int32 numZ;
+ Int32 state_out_pos;
+
+ /* map of bytes used in block */
+ Int32 nInUse;
+ Bool inUse[256];
+ UChar unseqToSeq[256];
+
+ /* the buffer for bit stream creation */
+ UInt32 bsBuff;
+ Int32 bsLive;
+
+ /* block and combined CRCs */
+ UInt32 blockCRC;
+ UInt32 combinedCRC;
+
+ /* misc administratium */
+ Int32 verbosity;
+ Int32 blockNo;
+ Int32 blockSize100k;
+
+ /* stuff for coding the MTF values */
+ Int32 nMTF;
+ Int32 mtfFreq [BZ_MAX_ALPHA_SIZE];
+ UChar selector [BZ_MAX_SELECTORS];
+ UChar selectorMtf[BZ_MAX_SELECTORS];
+
+ UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ /* second dimension: only 3 needed; 4 makes index calculations faster */
+ UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4];
+
+ }
+ EState;
+
+
+
+/*-- externs for compression. --*/
+
+extern void
+BZ2_blockSort ( EState* );
+
+extern void
+BZ2_compressBlock ( EState*, Bool );
+
+extern void
+BZ2_bsInitWrite ( EState* );
+
+extern void
+BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
+
+extern void
+BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
+
+
+
+/*-- states for decompression. --*/
+
+#define BZ_X_IDLE 1
+#define BZ_X_OUTPUT 2
+
+#define BZ_X_MAGIC_1 10
+#define BZ_X_MAGIC_2 11
+#define BZ_X_MAGIC_3 12
+#define BZ_X_MAGIC_4 13
+#define BZ_X_BLKHDR_1 14
+#define BZ_X_BLKHDR_2 15
+#define BZ_X_BLKHDR_3 16
+#define BZ_X_BLKHDR_4 17
+#define BZ_X_BLKHDR_5 18
+#define BZ_X_BLKHDR_6 19
+#define BZ_X_BCRC_1 20
+#define BZ_X_BCRC_2 21
+#define BZ_X_BCRC_3 22
+#define BZ_X_BCRC_4 23
+#define BZ_X_RANDBIT 24
+#define BZ_X_ORIGPTR_1 25
+#define BZ_X_ORIGPTR_2 26
+#define BZ_X_ORIGPTR_3 27
+#define BZ_X_MAPPING_1 28
+#define BZ_X_MAPPING_2 29
+#define BZ_X_SELECTOR_1 30
+#define BZ_X_SELECTOR_2 31
+#define BZ_X_SELECTOR_3 32
+#define BZ_X_CODING_1 33
+#define BZ_X_CODING_2 34
+#define BZ_X_CODING_3 35
+#define BZ_X_MTF_1 36
+#define BZ_X_MTF_2 37
+#define BZ_X_MTF_3 38
+#define BZ_X_MTF_4 39
+#define BZ_X_MTF_5 40
+#define BZ_X_MTF_6 41
+#define BZ_X_ENDHDR_2 42
+#define BZ_X_ENDHDR_3 43
+#define BZ_X_ENDHDR_4 44
+#define BZ_X_ENDHDR_5 45
+#define BZ_X_ENDHDR_6 46
+#define BZ_X_CCRC_1 47
+#define BZ_X_CCRC_2 48
+#define BZ_X_CCRC_3 49
+#define BZ_X_CCRC_4 50
+
+
+
+/*-- Constants for the fast MTF decoder. --*/
+
+#define MTFA_SIZE 4096
+#define MTFL_SIZE 16
+
+
+
+/*-- Structure holding all the decompression-side stuff. --*/
+
+typedef
+ struct {
+ /* pointer back to the struct bz_stream */
+ bz_stream* strm;
+
+ /* state indicator for this stream */
+ Int32 state;
+
+ /* for doing the final run-length decoding */
+ UChar state_out_ch;
+ Int32 state_out_len;
+ Bool blockRandomised;
+ BZ_RAND_DECLS;
+
+ /* the buffer for bit stream reading */
+ UInt32 bsBuff;
+ Int32 bsLive;
+
+ /* misc administratium */
+ Int32 blockSize100k;
+ Bool smallDecompress;
+ Int32 currBlockNo;
+ Int32 verbosity;
+
+ /* for undoing the Burrows-Wheeler transform */
+ Int32 origPtr;
+ UInt32 tPos;
+ Int32 k0;
+ Int32 unzftab[256];
+ Int32 nblock_used;
+ Int32 cftab[257];
+ Int32 cftabCopy[257];
+
+ /* for undoing the Burrows-Wheeler transform (FAST) */
+ UInt32 *tt;
+
+ /* for undoing the Burrows-Wheeler transform (SMALL) */
+ UInt16 *ll16;
+ UChar *ll4;
+
+ /* stored and calculated CRCs */
+ UInt32 storedBlockCRC;
+ UInt32 storedCombinedCRC;
+ UInt32 calculatedBlockCRC;
+ UInt32 calculatedCombinedCRC;
+
+ /* map of bytes used in block */
+ Int32 nInUse;
+ Bool inUse[256];
+ Bool inUse16[16];
+ UChar seqToUnseq[256];
+
+ /* for decoding the MTF values */
+ UChar mtfa [MTFA_SIZE];
+ Int32 mtfbase[256 / MTFL_SIZE];
+ UChar selector [BZ_MAX_SELECTORS];
+ UChar selectorMtf[BZ_MAX_SELECTORS];
+ UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+
+ Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 minLens[BZ_N_GROUPS];
+
+ /* save area for scalars in the main decompress code */
+ Int32 save_i;
+ Int32 save_j;
+ Int32 save_t;
+ Int32 save_alphaSize;
+ Int32 save_nGroups;
+ Int32 save_nSelectors;
+ Int32 save_EOB;
+ Int32 save_groupNo;
+ Int32 save_groupPos;
+ Int32 save_nextSym;
+ Int32 save_nblockMAX;
+ Int32 save_nblock;
+ Int32 save_es;
+ Int32 save_N;
+ Int32 save_curr;
+ Int32 save_zt;
+ Int32 save_zn;
+ Int32 save_zvec;
+ Int32 save_zj;
+ Int32 save_gSel;
+ Int32 save_gMinlen;
+ Int32* save_gLimit;
+ Int32* save_gBase;
+ Int32* save_gPerm;
+
+ }
+ DState;
+
+
+
+/*-- Macros for decompression. --*/
+
+#define BZ_GET_FAST(cccc) \
+ /* c_tPos is unsigned, hence test < 0 is pointless. */ \
+ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
+ s->tPos = s->tt[s->tPos]; \
+ cccc = (UChar)(s->tPos & 0xff); \
+ s->tPos >>= 8;
+
+#define BZ_GET_FAST_C(cccc) \
+ /* c_tPos is unsigned, hence test < 0 is pointless. */ \
+ if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \
+ c_tPos = c_tt[c_tPos]; \
+ cccc = (UChar)(c_tPos & 0xff); \
+ c_tPos >>= 8;
+
+#define SET_LL4(i,n) \
+ { if (((i) & 0x1) == 0) \
+ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \
+ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \
+ }
+
+#define GET_LL4(i) \
+ ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
+
+#define SET_LL(i,n) \
+ { s->ll16[i] = (UInt16)(n & 0x0000ffff); \
+ SET_LL4(i, n >> 16); \
+ }
+
+#define GET_LL(i) \
+ (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
+
+#define BZ_GET_SMALL(cccc) \
+ /* c_tPos is unsigned, hence test < 0 is pointless. */ \
+ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
+ cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \
+ s->tPos = GET_LL(s->tPos);
+
+
+/*-- externs for decompression. --*/
+
+extern Int32
+BZ2_indexIntoF ( Int32, Int32* );
+
+extern Int32
+BZ2_decompress ( DState* );
+
+extern void
+BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
+ Int32, Int32, Int32 );
+
+
+#endif
+
+
+/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/
+
+#ifdef BZ_NO_STDIO
+#ifndef NULL
+#define NULL 0
+#endif
+#endif
+
+
+/*-------------------------------------------------------------*/
+/*--- end bzlib_private.h ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/compress.c b/libs/ext/bzip2/compress.c
new file mode 100644
index 0000000..caf7696
--- /dev/null
+++ b/libs/ext/bzip2/compress.c
@@ -0,0 +1,672 @@
+
+/*-------------------------------------------------------------*/
+/*--- Compression machinery (not incl block sorting) ---*/
+/*--- compress.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+/* CHANGES
+ 0.9.0 -- original version.
+ 0.9.0a/b -- no changes in this file.
+ 0.9.0c -- changed setting of nGroups in sendMTFValues()
+ so as to do a bit better on small files
+*/
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+/*--- Bit stream I/O ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+void BZ2_bsInitWrite ( EState* s )
+{
+ s->bsLive = 0;
+ s->bsBuff = 0;
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsFinishWrite ( EState* s )
+{
+ while (s->bsLive > 0) {
+ s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
+ s->numZ++;
+ s->bsBuff <<= 8;
+ s->bsLive -= 8;
+ }
+}
+
+
+/*---------------------------------------------------*/
+#define bsNEEDW(nz) \
+{ \
+ while (s->bsLive >= 8) { \
+ s->zbits[s->numZ] \
+ = (UChar)(s->bsBuff >> 24); \
+ s->numZ++; \
+ s->bsBuff <<= 8; \
+ s->bsLive -= 8; \
+ } \
+}
+
+
+/*---------------------------------------------------*/
+static
+__inline__
+void bsW ( EState* s, Int32 n, UInt32 v )
+{
+ bsNEEDW ( n );
+ s->bsBuff |= (v << (32 - s->bsLive - n));
+ s->bsLive += n;
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsPutUInt32 ( EState* s, UInt32 u )
+{
+ bsW ( s, 8, (u >> 24) & 0xffL );
+ bsW ( s, 8, (u >> 16) & 0xffL );
+ bsW ( s, 8, (u >> 8) & 0xffL );
+ bsW ( s, 8, u & 0xffL );
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsPutUChar ( EState* s, UChar c )
+{
+ bsW( s, 8, (UInt32)c );
+}
+
+
+/*---------------------------------------------------*/
+/*--- The back end proper ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+static
+void makeMaps_e ( EState* s )
+{
+ Int32 i;
+ s->nInUse = 0;
+ for (i = 0; i < 256; i++)
+ if (s->inUse[i]) {
+ s->unseqToSeq[i] = s->nInUse;
+ s->nInUse++;
+ }
+}
+
+
+/*---------------------------------------------------*/
+static
+void generateMTFValues ( EState* s )
+{
+ UChar yy[256];
+ Int32 i, j;
+ Int32 zPend;
+ Int32 wr;
+ Int32 EOB;
+
+ /*
+ After sorting (eg, here),
+ s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,
+ and
+ ((UChar*)s->arr2) [ 0 .. s->nblock-1 ]
+ holds the original block data.
+
+ The first thing to do is generate the MTF values,
+ and put them in
+ ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].
+ Because there are strictly fewer or equal MTF values
+ than block values, ptr values in this area are overwritten
+ with MTF values only when they are no longer needed.
+
+ The final compressed bitstream is generated into the
+ area starting at
+ (UChar*) (&((UChar*)s->arr2)[s->nblock])
+
+ These storage aliases are set up in bzCompressInit(),
+ except for the last one, which is arranged in
+ compressBlock().
+ */
+ UInt32* ptr = s->ptr;
+ UChar* block = s->block;
+ UInt16* mtfv = s->mtfv;
+
+ makeMaps_e ( s );
+ EOB = s->nInUse+1;
+
+ for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;
+
+ wr = 0;
+ zPend = 0;
+ for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;
+
+ for (i = 0; i < s->nblock; i++) {
+ UChar ll_i;
+ AssertD ( wr <= i, "generateMTFValues(1)" );
+ j = ptr[i]-1; if (j < 0) j += s->nblock;
+ ll_i = s->unseqToSeq[block[j]];
+ AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" );
+
+ if (yy[0] == ll_i) {
+ zPend++;
+ } else {
+
+ if (zPend > 0) {
+ zPend--;
+ while (True) {
+ if (zPend & 1) {
+ mtfv[wr] = BZ_RUNB; wr++;
+ s->mtfFreq[BZ_RUNB]++;
+ } else {
+ mtfv[wr] = BZ_RUNA; wr++;
+ s->mtfFreq[BZ_RUNA]++;
+ }
+ if (zPend < 2) break;
+ zPend = (zPend - 2) / 2;
+ };
+ zPend = 0;
+ }
+ {
+ register UChar rtmp;
+ register UChar* ryy_j;
+ register UChar rll_i;
+ rtmp = yy[1];
+ yy[1] = yy[0];
+ ryy_j = &(yy[1]);
+ rll_i = ll_i;
+ while ( rll_i != rtmp ) {
+ register UChar rtmp2;
+ ryy_j++;
+ rtmp2 = rtmp;
+ rtmp = *ryy_j;
+ *ryy_j = rtmp2;
+ };
+ yy[0] = rtmp;
+ j = ryy_j - &(yy[0]);
+ mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
+ }
+
+ }
+ }
+
+ if (zPend > 0) {
+ zPend--;
+ while (True) {
+ if (zPend & 1) {
+ mtfv[wr] = BZ_RUNB; wr++;
+ s->mtfFreq[BZ_RUNB]++;
+ } else {
+ mtfv[wr] = BZ_RUNA; wr++;
+ s->mtfFreq[BZ_RUNA]++;
+ }
+ if (zPend < 2) break;
+ zPend = (zPend - 2) / 2;
+ };
+ zPend = 0;
+ }
+
+ mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;
+
+ s->nMTF = wr;
+}
+
+
+/*---------------------------------------------------*/
+#define BZ_LESSER_ICOST 0
+#define BZ_GREATER_ICOST 15
+
+static
+void sendMTFValues ( EState* s )
+{
+ Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;
+ Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
+ Int32 nGroups, nBytes;
+
+ /*--
+ UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ is a global since the decoder also needs it.
+
+ Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ are also globals only used in this proc.
+ Made global to keep stack frame size small.
+ --*/
+
+
+ UInt16 cost[BZ_N_GROUPS];
+ Int32 fave[BZ_N_GROUPS];
+
+ UInt16* mtfv = s->mtfv;
+
+ if (s->verbosity >= 3)
+ VPrintf3( " %d in block, %d after MTF & 1-2 coding, "
+ "%d+2 syms in use\n",
+ s->nblock, s->nMTF, s->nInUse );
+
+ alphaSize = s->nInUse+2;
+ for (t = 0; t < BZ_N_GROUPS; t++)
+ for (v = 0; v < alphaSize; v++)
+ s->len[t][v] = BZ_GREATER_ICOST;
+
+ /*--- Decide how many coding tables to use ---*/
+ AssertH ( s->nMTF > 0, 3001 );
+ if (s->nMTF < 200) nGroups = 2; else
+ if (s->nMTF < 600) nGroups = 3; else
+ if (s->nMTF < 1200) nGroups = 4; else
+ if (s->nMTF < 2400) nGroups = 5; else
+ nGroups = 6;
+
+ /*--- Generate an initial set of coding tables ---*/
+ {
+ Int32 nPart, remF, tFreq, aFreq;
+
+ nPart = nGroups;
+ remF = s->nMTF;
+ gs = 0;
+ while (nPart > 0) {
+ tFreq = remF / nPart;
+ ge = gs-1;
+ aFreq = 0;
+ while (aFreq < tFreq && ge < alphaSize-1) {
+ ge++;
+ aFreq += s->mtfFreq[ge];
+ }
+
+ if (ge > gs
+ && nPart != nGroups && nPart != 1
+ && ((nGroups-nPart) % 2 == 1)) {
+ aFreq -= s->mtfFreq[ge];
+ ge--;
+ }
+
+ if (s->verbosity >= 3)
+ VPrintf5( " initial group %d, [%d .. %d], "
+ "has %d syms (%4.1f%%)\n",
+ nPart, gs, ge, aFreq,
+ (100.0 * (float)aFreq) / (float)(s->nMTF) );
+
+ for (v = 0; v < alphaSize; v++)
+ if (v >= gs && v <= ge)
+ s->len[nPart-1][v] = BZ_LESSER_ICOST; else
+ s->len[nPart-1][v] = BZ_GREATER_ICOST;
+
+ nPart--;
+ gs = ge+1;
+ remF -= aFreq;
+ }
+ }
+
+ /*---
+ Iterate up to BZ_N_ITERS times to improve the tables.
+ ---*/
+ for (iter = 0; iter < BZ_N_ITERS; iter++) {
+
+ for (t = 0; t < nGroups; t++) fave[t] = 0;
+
+ for (t = 0; t < nGroups; t++)
+ for (v = 0; v < alphaSize; v++)
+ s->rfreq[t][v] = 0;
+
+ /*---
+ Set up an auxiliary length table which is used to fast-track
+ the common case (nGroups == 6).
+ ---*/
+ if (nGroups == 6) {
+ for (v = 0; v < alphaSize; v++) {
+ s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
+ s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
+ s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
+ }
+ }
+
+ nSelectors = 0;
+ totc = 0;
+ gs = 0;
+ while (True) {
+
+ /*--- Set group start & end marks. --*/
+ if (gs >= s->nMTF) break;
+ ge = gs + BZ_G_SIZE - 1;
+ if (ge >= s->nMTF) ge = s->nMTF-1;
+
+ /*--
+ Calculate the cost of this group as coded
+ by each of the coding tables.
+ --*/
+ for (t = 0; t < nGroups; t++) cost[t] = 0;
+
+ if (nGroups == 6 && 50 == ge-gs+1) {
+ /*--- fast track the common case ---*/
+ register UInt32 cost01, cost23, cost45;
+ register UInt16 icv;
+ cost01 = cost23 = cost45 = 0;
+
+# define BZ_ITER(nn) \
+ icv = mtfv[gs+(nn)]; \
+ cost01 += s->len_pack[icv][0]; \
+ cost23 += s->len_pack[icv][1]; \
+ cost45 += s->len_pack[icv][2]; \
+
+ BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4);
+ BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9);
+ BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);
+ BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);
+ BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);
+ BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);
+ BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);
+ BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);
+ BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);
+ BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);
+
+# undef BZ_ITER
+
+ cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
+ cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
+ cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;
+
+ } else {
+ /*--- slow version which correctly handles all situations ---*/
+ for (i = gs; i <= ge; i++) {
+ UInt16 icv = mtfv[i];
+ for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
+ }
+ }
+
+ /*--
+ Find the coding table which is best for this group,
+ and record its identity in the selector table.
+ --*/
+ bc = 999999999; bt = -1;
+ for (t = 0; t < nGroups; t++)
+ if (cost[t] < bc) { bc = cost[t]; bt = t; };
+ totc += bc;
+ fave[bt]++;
+ s->selector[nSelectors] = bt;
+ nSelectors++;
+
+ /*--
+ Increment the symbol frequencies for the selected table.
+ --*/
+ if (nGroups == 6 && 50 == ge-gs+1) {
+ /*--- fast track the common case ---*/
+
+# define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++
+
+ BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4);
+ BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9);
+ BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);
+ BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);
+ BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);
+ BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);
+ BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);
+ BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);
+ BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);
+ BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);
+
+# undef BZ_ITUR
+
+ } else {
+ /*--- slow version which correctly handles all situations ---*/
+ for (i = gs; i <= ge; i++)
+ s->rfreq[bt][ mtfv[i] ]++;
+ }
+
+ gs = ge+1;
+ }
+ if (s->verbosity >= 3) {
+ VPrintf2 ( " pass %d: size is %d, grp uses are ",
+ iter+1, totc/8 );
+ for (t = 0; t < nGroups; t++)
+ VPrintf1 ( "%d ", fave[t] );
+ VPrintf0 ( "\n" );
+ }
+
+ /*--
+ Recompute the tables based on the accumulated frequencies.
+ --*/
+ /* maxLen was changed from 20 to 17 in bzip2-1.0.3. See
+ comment in huffman.c for details. */
+ for (t = 0; t < nGroups; t++)
+ BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]),
+ alphaSize, 17 /*20*/ );
+ }
+
+
+ AssertH( nGroups < 8, 3002 );
+ AssertH( nSelectors < 32768 &&
+ nSelectors <= (2 + (900000 / BZ_G_SIZE)),
+ 3003 );
+
+
+ /*--- Compute MTF values for the selectors. ---*/
+ {
+ UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;
+ for (i = 0; i < nGroups; i++) pos[i] = i;
+ for (i = 0; i < nSelectors; i++) {
+ ll_i = s->selector[i];
+ j = 0;
+ tmp = pos[j];
+ while ( ll_i != tmp ) {
+ j++;
+ tmp2 = tmp;
+ tmp = pos[j];
+ pos[j] = tmp2;
+ };
+ pos[0] = tmp;
+ s->selectorMtf[i] = j;
+ }
+ };
+
+ /*--- Assign actual codes for the tables. --*/
+ for (t = 0; t < nGroups; t++) {
+ minLen = 32;
+ maxLen = 0;
+ for (i = 0; i < alphaSize; i++) {
+ if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
+ if (s->len[t][i] < minLen) minLen = s->len[t][i];
+ }
+ AssertH ( !(maxLen > 17 /*20*/ ), 3004 );
+ AssertH ( !(minLen < 1), 3005 );
+ BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]),
+ minLen, maxLen, alphaSize );
+ }
+
+ /*--- Transmit the mapping table. ---*/
+ {
+ Bool inUse16[16];
+ for (i = 0; i < 16; i++) {
+ inUse16[i] = False;
+ for (j = 0; j < 16; j++)
+ if (s->inUse[i * 16 + j]) inUse16[i] = True;
+ }
+
+ nBytes = s->numZ;
+ for (i = 0; i < 16; i++)
+ if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);
+
+ for (i = 0; i < 16; i++)
+ if (inUse16[i])
+ for (j = 0; j < 16; j++) {
+ if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
+ }
+
+ if (s->verbosity >= 3)
+ VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes );
+ }
+
+ /*--- Now the selectors. ---*/
+ nBytes = s->numZ;
+ bsW ( s, 3, nGroups );
+ bsW ( s, 15, nSelectors );
+ for (i = 0; i < nSelectors; i++) {
+ for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
+ bsW(s,1,0);
+ }
+ if (s->verbosity >= 3)
+ VPrintf1( "selectors %d, ", s->numZ-nBytes );
+
+ /*--- Now the coding tables. ---*/
+ nBytes = s->numZ;
+
+ for (t = 0; t < nGroups; t++) {
+ Int32 curr = s->len[t][0];
+ bsW ( s, 5, curr );
+ for (i = 0; i < alphaSize; i++) {
+ while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };
+ while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };
+ bsW ( s, 1, 0 );
+ }
+ }
+
+ if (s->verbosity >= 3)
+ VPrintf1 ( "code lengths %d, ", s->numZ-nBytes );
+
+ /*--- And finally, the block data proper ---*/
+ nBytes = s->numZ;
+ selCtr = 0;
+ gs = 0;
+ while (True) {
+ if (gs >= s->nMTF) break;
+ ge = gs + BZ_G_SIZE - 1;
+ if (ge >= s->nMTF) ge = s->nMTF-1;
+ AssertH ( s->selector[selCtr] < nGroups, 3006 );
+
+ if (nGroups == 6 && 50 == ge-gs+1) {
+ /*--- fast track the common case ---*/
+ UInt16 mtfv_i;
+ UChar* s_len_sel_selCtr
+ = &(s->len[s->selector[selCtr]][0]);
+ Int32* s_code_sel_selCtr
+ = &(s->code[s->selector[selCtr]][0]);
+
+# define BZ_ITAH(nn) \
+ mtfv_i = mtfv[gs+(nn)]; \
+ bsW ( s, \
+ s_len_sel_selCtr[mtfv_i], \
+ s_code_sel_selCtr[mtfv_i] )
+
+ BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4);
+ BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9);
+ BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);
+ BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);
+ BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);
+ BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);
+ BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);
+ BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);
+ BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);
+ BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);
+
+# undef BZ_ITAH
+
+ } else {
+ /*--- slow version which correctly handles all situations ---*/
+ for (i = gs; i <= ge; i++) {
+ bsW ( s,
+ s->len [s->selector[selCtr]] [mtfv[i]],
+ s->code [s->selector[selCtr]] [mtfv[i]] );
+ }
+ }
+
+
+ gs = ge+1;
+ selCtr++;
+ }
+ AssertH( selCtr == nSelectors, 3007 );
+
+ if (s->verbosity >= 3)
+ VPrintf1( "codes %d\n", s->numZ-nBytes );
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_compressBlock ( EState* s, Bool is_last_block )
+{
+ if (s->nblock > 0) {
+
+ BZ_FINALISE_CRC ( s->blockCRC );
+ s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
+ s->combinedCRC ^= s->blockCRC;
+ if (s->blockNo > 1) s->numZ = 0;
+
+ if (s->verbosity >= 2)
+ VPrintf4( " block %d: crc = 0x%08x, "
+ "combined CRC = 0x%08x, size = %d\n",
+ s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );
+
+ BZ2_blockSort ( s );
+ }
+
+ s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);
+
+ /*-- If this is the first block, create the stream header. --*/
+ if (s->blockNo == 1) {
+ BZ2_bsInitWrite ( s );
+ bsPutUChar ( s, BZ_HDR_B );
+ bsPutUChar ( s, BZ_HDR_Z );
+ bsPutUChar ( s, BZ_HDR_h );
+ bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );
+ }
+
+ if (s->nblock > 0) {
+
+ bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
+ bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
+ bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );
+
+ /*-- Now the block's CRC, so it is in a known place. --*/
+ bsPutUInt32 ( s, s->blockCRC );
+
+ /*--
+ Now a single bit indicating (non-)randomisation.
+ As of version 0.9.5, we use a better sorting algorithm
+ which makes randomisation unnecessary. So always set
+ the randomised bit to 'no'. Of course, the decoder
+ still needs to be able to handle randomised blocks
+ so as to maintain backwards compatibility with
+ older versions of bzip2.
+ --*/
+ bsW(s,1,0);
+
+ bsW ( s, 24, s->origPtr );
+ generateMTFValues ( s );
+ sendMTFValues ( s );
+ }
+
+
+ /*-- If this is the last block, add the stream trailer. --*/
+ if (is_last_block) {
+
+ bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
+ bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
+ bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
+ bsPutUInt32 ( s, s->combinedCRC );
+ if (s->verbosity >= 2)
+ VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC );
+ bsFinishWrite ( s );
+ }
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end compress.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/crctable.c b/libs/ext/bzip2/crctable.c
new file mode 100644
index 0000000..1fea7e9
--- /dev/null
+++ b/libs/ext/bzip2/crctable.c
@@ -0,0 +1,104 @@
+
+/*-------------------------------------------------------------*/
+/*--- Table for doing CRCs ---*/
+/*--- crctable.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*--
+ I think this is an implementation of the AUTODIN-II,
+ Ethernet & FDDI 32-bit CRC standard. Vaguely derived
+ from code by Rob Warnock, in Section 51 of the
+ comp.compression FAQ.
+--*/
+
+UInt32 BZ2_crc32Table[256] = {
+
+ /*-- Ugly, innit? --*/
+
+ 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
+ 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
+ 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
+ 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
+ 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
+ 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
+ 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
+ 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
+ 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
+ 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
+ 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
+ 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
+ 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
+ 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
+ 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
+ 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
+ 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
+ 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
+ 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
+ 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
+ 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
+ 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
+ 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
+ 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
+ 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
+ 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
+ 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
+ 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
+ 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
+ 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
+ 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
+ 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
+ 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
+ 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
+ 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
+ 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
+ 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
+ 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
+ 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
+ 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
+ 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
+ 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
+ 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
+ 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
+ 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
+ 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
+ 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
+ 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
+ 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
+ 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
+ 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
+ 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
+ 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
+ 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
+ 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
+ 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
+ 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
+ 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
+ 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
+ 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
+ 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
+ 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
+ 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
+ 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
+};
+
+
+/*-------------------------------------------------------------*/
+/*--- end crctable.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/decompress.c b/libs/ext/bzip2/decompress.c
new file mode 100644
index 0000000..311f566
--- /dev/null
+++ b/libs/ext/bzip2/decompress.c
@@ -0,0 +1,646 @@
+
+/*-------------------------------------------------------------*/
+/*--- Decompression machinery ---*/
+/*--- decompress.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+static
+void makeMaps_d ( DState* s )
+{
+ Int32 i;
+ s->nInUse = 0;
+ for (i = 0; i < 256; i++)
+ if (s->inUse[i]) {
+ s->seqToUnseq[s->nInUse] = i;
+ s->nInUse++;
+ }
+}
+
+
+/*---------------------------------------------------*/
+#define RETURN(rrr) \
+ { retVal = rrr; goto save_state_and_return; };
+
+#define GET_BITS(lll,vvv,nnn) \
+ case lll: s->state = lll; \
+ while (True) { \
+ if (s->bsLive >= nnn) { \
+ UInt32 v; \
+ v = (s->bsBuff >> \
+ (s->bsLive-nnn)) & ((1 << nnn)-1); \
+ s->bsLive -= nnn; \
+ vvv = v; \
+ break; \
+ } \
+ if (s->strm->avail_in == 0) RETURN(BZ_OK); \
+ s->bsBuff \
+ = (s->bsBuff << 8) | \
+ ((UInt32) \
+ (*((UChar*)(s->strm->next_in)))); \
+ s->bsLive += 8; \
+ s->strm->next_in++; \
+ s->strm->avail_in--; \
+ s->strm->total_in_lo32++; \
+ if (s->strm->total_in_lo32 == 0) \
+ s->strm->total_in_hi32++; \
+ }
+
+#define GET_UCHAR(lll,uuu) \
+ GET_BITS(lll,uuu,8)
+
+#define GET_BIT(lll,uuu) \
+ GET_BITS(lll,uuu,1)
+
+/*---------------------------------------------------*/
+#define GET_MTF_VAL(label1,label2,lval) \
+{ \
+ if (groupPos == 0) { \
+ groupNo++; \
+ if (groupNo >= nSelectors) \
+ RETURN(BZ_DATA_ERROR); \
+ groupPos = BZ_G_SIZE; \
+ gSel = s->selector[groupNo]; \
+ gMinlen = s->minLens[gSel]; \
+ gLimit = &(s->limit[gSel][0]); \
+ gPerm = &(s->perm[gSel][0]); \
+ gBase = &(s->base[gSel][0]); \
+ } \
+ groupPos--; \
+ zn = gMinlen; \
+ GET_BITS(label1, zvec, zn); \
+ while (1) { \
+ if (zn > 20 /* the longest code */) \
+ RETURN(BZ_DATA_ERROR); \
+ if (zvec <= gLimit[zn]) break; \
+ zn++; \
+ GET_BIT(label2, zj); \
+ zvec = (zvec << 1) | zj; \
+ }; \
+ if (zvec - gBase[zn] < 0 \
+ || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \
+ RETURN(BZ_DATA_ERROR); \
+ lval = gPerm[zvec - gBase[zn]]; \
+}
+
+
+/*---------------------------------------------------*/
+Int32 BZ2_decompress ( DState* s )
+{
+ UChar uc;
+ Int32 retVal;
+ Int32 minLen, maxLen;
+ bz_stream* strm = s->strm;
+
+ /* stuff that needs to be saved/restored */
+ Int32 i;
+ Int32 j;
+ Int32 t;
+ Int32 alphaSize;
+ Int32 nGroups;
+ Int32 nSelectors;
+ Int32 EOB;
+ Int32 groupNo;
+ Int32 groupPos;
+ Int32 nextSym;
+ Int32 nblockMAX;
+ Int32 nblock;
+ Int32 es;
+ Int32 N;
+ Int32 curr;
+ Int32 zt;
+ Int32 zn;
+ Int32 zvec;
+ Int32 zj;
+ Int32 gSel;
+ Int32 gMinlen;
+ Int32* gLimit;
+ Int32* gBase;
+ Int32* gPerm;
+
+ if (s->state == BZ_X_MAGIC_1) {
+ /*initialise the save area*/
+ s->save_i = 0;
+ s->save_j = 0;
+ s->save_t = 0;
+ s->save_alphaSize = 0;
+ s->save_nGroups = 0;
+ s->save_nSelectors = 0;
+ s->save_EOB = 0;
+ s->save_groupNo = 0;
+ s->save_groupPos = 0;
+ s->save_nextSym = 0;
+ s->save_nblockMAX = 0;
+ s->save_nblock = 0;
+ s->save_es = 0;
+ s->save_N = 0;
+ s->save_curr = 0;
+ s->save_zt = 0;
+ s->save_zn = 0;
+ s->save_zvec = 0;
+ s->save_zj = 0;
+ s->save_gSel = 0;
+ s->save_gMinlen = 0;
+ s->save_gLimit = NULL;
+ s->save_gBase = NULL;
+ s->save_gPerm = NULL;
+ }
+
+ /*restore from the save area*/
+ i = s->save_i;
+ j = s->save_j;
+ t = s->save_t;
+ alphaSize = s->save_alphaSize;
+ nGroups = s->save_nGroups;
+ nSelectors = s->save_nSelectors;
+ EOB = s->save_EOB;
+ groupNo = s->save_groupNo;
+ groupPos = s->save_groupPos;
+ nextSym = s->save_nextSym;
+ nblockMAX = s->save_nblockMAX;
+ nblock = s->save_nblock;
+ es = s->save_es;
+ N = s->save_N;
+ curr = s->save_curr;
+ zt = s->save_zt;
+ zn = s->save_zn;
+ zvec = s->save_zvec;
+ zj = s->save_zj;
+ gSel = s->save_gSel;
+ gMinlen = s->save_gMinlen;
+ gLimit = s->save_gLimit;
+ gBase = s->save_gBase;
+ gPerm = s->save_gPerm;
+
+ retVal = BZ_OK;
+
+ switch (s->state) {
+
+ GET_UCHAR(BZ_X_MAGIC_1, uc);
+ if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);
+
+ GET_UCHAR(BZ_X_MAGIC_2, uc);
+ if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);
+
+ GET_UCHAR(BZ_X_MAGIC_3, uc)
+ if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC);
+
+ GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)
+ if (s->blockSize100k < (BZ_HDR_0 + 1) ||
+ s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);
+ s->blockSize100k -= BZ_HDR_0;
+
+ if (s->smallDecompress) {
+ s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
+ s->ll4 = BZALLOC(
+ ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar)
+ );
+ if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
+ } else {
+ s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
+ if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
+ }
+
+ GET_UCHAR(BZ_X_BLKHDR_1, uc);
+
+ if (uc == 0x17) goto endhdr_2;
+ if (uc != 0x31) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_2, uc);
+ if (uc != 0x41) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_3, uc);
+ if (uc != 0x59) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_4, uc);
+ if (uc != 0x26) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_5, uc);
+ if (uc != 0x53) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_6, uc);
+ if (uc != 0x59) RETURN(BZ_DATA_ERROR);
+
+ s->currBlockNo++;
+ if (s->verbosity >= 2)
+ VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo );
+
+ s->storedBlockCRC = 0;
+ GET_UCHAR(BZ_X_BCRC_1, uc);
+ s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_BCRC_2, uc);
+ s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_BCRC_3, uc);
+ s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_BCRC_4, uc);
+ s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+
+ GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);
+
+ s->origPtr = 0;
+ GET_UCHAR(BZ_X_ORIGPTR_1, uc);
+ s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+ GET_UCHAR(BZ_X_ORIGPTR_2, uc);
+ s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+ GET_UCHAR(BZ_X_ORIGPTR_3, uc);
+ s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+
+ if (s->origPtr < 0)
+ RETURN(BZ_DATA_ERROR);
+ if (s->origPtr > 10 + 100000*s->blockSize100k)
+ RETURN(BZ_DATA_ERROR);
+
+ /*--- Receive the mapping table ---*/
+ for (i = 0; i < 16; i++) {
+ GET_BIT(BZ_X_MAPPING_1, uc);
+ if (uc == 1)
+ s->inUse16[i] = True; else
+ s->inUse16[i] = False;
+ }
+
+ for (i = 0; i < 256; i++) s->inUse[i] = False;
+
+ for (i = 0; i < 16; i++)
+ if (s->inUse16[i])
+ for (j = 0; j < 16; j++) {
+ GET_BIT(BZ_X_MAPPING_2, uc);
+ if (uc == 1) s->inUse[i * 16 + j] = True;
+ }
+ makeMaps_d ( s );
+ if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
+ alphaSize = s->nInUse+2;
+
+ /*--- Now the selectors ---*/
+ GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
+ if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
+ GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
+ if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
+ for (i = 0; i < nSelectors; i++) {
+ j = 0;
+ while (True) {
+ GET_BIT(BZ_X_SELECTOR_3, uc);
+ if (uc == 0) break;
+ j++;
+ if (j >= nGroups) RETURN(BZ_DATA_ERROR);
+ }
+ s->selectorMtf[i] = j;
+ }
+
+ /*--- Undo the MTF values for the selectors. ---*/
+ {
+ UChar pos[BZ_N_GROUPS], tmp, v;
+ for (v = 0; v < nGroups; v++) pos[v] = v;
+
+ for (i = 0; i < nSelectors; i++) {
+ v = s->selectorMtf[i];
+ tmp = pos[v];
+ while (v > 0) { pos[v] = pos[v-1]; v--; }
+ pos[0] = tmp;
+ s->selector[i] = tmp;
+ }
+ }
+
+ /*--- Now the coding tables ---*/
+ for (t = 0; t < nGroups; t++) {
+ GET_BITS(BZ_X_CODING_1, curr, 5);
+ for (i = 0; i < alphaSize; i++) {
+ while (True) {
+ if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
+ GET_BIT(BZ_X_CODING_2, uc);
+ if (uc == 0) break;
+ GET_BIT(BZ_X_CODING_3, uc);
+ if (uc == 0) curr++; else curr--;
+ }
+ s->len[t][i] = curr;
+ }
+ }
+
+ /*--- Create the Huffman decoding tables ---*/
+ for (t = 0; t < nGroups; t++) {
+ minLen = 32;
+ maxLen = 0;
+ for (i = 0; i < alphaSize; i++) {
+ if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
+ if (s->len[t][i] < minLen) minLen = s->len[t][i];
+ }
+ BZ2_hbCreateDecodeTables (
+ &(s->limit[t][0]),
+ &(s->base[t][0]),
+ &(s->perm[t][0]),
+ &(s->len[t][0]),
+ minLen, maxLen, alphaSize
+ );
+ s->minLens[t] = minLen;
+ }
+
+ /*--- Now the MTF values ---*/
+
+ EOB = s->nInUse+1;
+ nblockMAX = 100000 * s->blockSize100k;
+ groupNo = -1;
+ groupPos = 0;
+
+ for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
+
+ /*-- MTF init --*/
+ {
+ Int32 ii, jj, kk;
+ kk = MTFA_SIZE-1;
+ for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
+ for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
+ s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
+ kk--;
+ }
+ s->mtfbase[ii] = kk + 1;
+ }
+ }
+ /*-- end MTF init --*/
+
+ nblock = 0;
+ GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);
+
+ while (True) {
+
+ if (nextSym == EOB) break;
+
+ if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {
+
+ es = -1;
+ N = 1;
+ do {
+ /* Check that N doesn't get too big, so that es doesn't
+ go negative. The maximum value that can be
+ RUNA/RUNB encoded is equal to the block size (post
+ the initial RLE), viz, 900k, so bounding N at 2
+ million should guard against overflow without
+ rejecting any legitimate inputs. */
+ if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR);
+ if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
+ if (nextSym == BZ_RUNB) es = es + (1+1) * N;
+ N = N * 2;
+ GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);
+ }
+ while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);
+
+ es++;
+ uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
+ s->unzftab[uc] += es;
+
+ if (s->smallDecompress)
+ while (es > 0) {
+ if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+ s->ll16[nblock] = (UInt16)uc;
+ nblock++;
+ es--;
+ }
+ else
+ while (es > 0) {
+ if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+ s->tt[nblock] = (UInt32)uc;
+ nblock++;
+ es--;
+ };
+
+ continue;
+
+ } else {
+
+ if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+
+ /*-- uc = MTF ( nextSym-1 ) --*/
+ {
+ Int32 ii, jj, kk, pp, lno, off;
+ UInt32 nn;
+ nn = (UInt32)(nextSym - 1);
+
+ if (nn < MTFL_SIZE) {
+ /* avoid general-case expense */
+ pp = s->mtfbase[0];
+ uc = s->mtfa[pp+nn];
+ while (nn > 3) {
+ Int32 z = pp+nn;
+ s->mtfa[(z) ] = s->mtfa[(z)-1];
+ s->mtfa[(z)-1] = s->mtfa[(z)-2];
+ s->mtfa[(z)-2] = s->mtfa[(z)-3];
+ s->mtfa[(z)-3] = s->mtfa[(z)-4];
+ nn -= 4;
+ }
+ while (nn > 0) {
+ s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--;
+ };
+ s->mtfa[pp] = uc;
+ } else {
+ /* general case */
+ lno = nn / MTFL_SIZE;
+ off = nn % MTFL_SIZE;
+ pp = s->mtfbase[lno] + off;
+ uc = s->mtfa[pp];
+ while (pp > s->mtfbase[lno]) {
+ s->mtfa[pp] = s->mtfa[pp-1]; pp--;
+ };
+ s->mtfbase[lno]++;
+ while (lno > 0) {
+ s->mtfbase[lno]--;
+ s->mtfa[s->mtfbase[lno]]
+ = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
+ lno--;
+ }
+ s->mtfbase[0]--;
+ s->mtfa[s->mtfbase[0]] = uc;
+ if (s->mtfbase[0] == 0) {
+ kk = MTFA_SIZE-1;
+ for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
+ for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
+ s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
+ kk--;
+ }
+ s->mtfbase[ii] = kk + 1;
+ }
+ }
+ }
+ }
+ /*-- end uc = MTF ( nextSym-1 ) --*/
+
+ s->unzftab[s->seqToUnseq[uc]]++;
+ if (s->smallDecompress)
+ s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
+ s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]);
+ nblock++;
+
+ GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);
+ continue;
+ }
+ }
+
+ /* Now we know what nblock is, we can do a better sanity
+ check on s->origPtr.
+ */
+ if (s->origPtr < 0 || s->origPtr >= nblock)
+ RETURN(BZ_DATA_ERROR);
+
+ /*-- Set up cftab to facilitate generation of T^(-1) --*/
+ /* Check: unzftab entries in range. */
+ for (i = 0; i <= 255; i++) {
+ if (s->unzftab[i] < 0 || s->unzftab[i] > nblock)
+ RETURN(BZ_DATA_ERROR);
+ }
+ /* Actually generate cftab. */
+ s->cftab[0] = 0;
+ for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
+ for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
+ /* Check: cftab entries in range. */
+ for (i = 0; i <= 256; i++) {
+ if (s->cftab[i] < 0 || s->cftab[i] > nblock) {
+ /* s->cftab[i] can legitimately be == nblock */
+ RETURN(BZ_DATA_ERROR);
+ }
+ }
+ /* Check: cftab entries non-descending. */
+ for (i = 1; i <= 256; i++) {
+ if (s->cftab[i-1] > s->cftab[i]) {
+ RETURN(BZ_DATA_ERROR);
+ }
+ }
+
+ s->state_out_len = 0;
+ s->state_out_ch = 0;
+ BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
+ s->state = BZ_X_OUTPUT;
+ if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
+
+ if (s->smallDecompress) {
+
+ /*-- Make a copy of cftab, used in generation of T --*/
+ for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
+
+ /*-- compute the T vector --*/
+ for (i = 0; i < nblock; i++) {
+ uc = (UChar)(s->ll16[i]);
+ SET_LL(i, s->cftabCopy[uc]);
+ s->cftabCopy[uc]++;
+ }
+
+ /*-- Compute T^(-1) by pointer reversal on T --*/
+ i = s->origPtr;
+ j = GET_LL(i);
+ do {
+ Int32 tmp = GET_LL(j);
+ SET_LL(j, i);
+ i = j;
+ j = tmp;
+ }
+ while (i != s->origPtr);
+
+ s->tPos = s->origPtr;
+ s->nblock_used = 0;
+ if (s->blockRandomised) {
+ BZ_RAND_INIT_MASK;
+ BZ_GET_SMALL(s->k0); s->nblock_used++;
+ BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
+ } else {
+ BZ_GET_SMALL(s->k0); s->nblock_used++;
+ }
+
+ } else {
+
+ /*-- compute the T^(-1) vector --*/
+ for (i = 0; i < nblock; i++) {
+ uc = (UChar)(s->tt[i] & 0xff);
+ s->tt[s->cftab[uc]] |= (i << 8);
+ s->cftab[uc]++;
+ }
+
+ s->tPos = s->tt[s->origPtr] >> 8;
+ s->nblock_used = 0;
+ if (s->blockRandomised) {
+ BZ_RAND_INIT_MASK;
+ BZ_GET_FAST(s->k0); s->nblock_used++;
+ BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
+ } else {
+ BZ_GET_FAST(s->k0); s->nblock_used++;
+ }
+
+ }
+
+ RETURN(BZ_OK);
+
+
+
+ endhdr_2:
+
+ GET_UCHAR(BZ_X_ENDHDR_2, uc);
+ if (uc != 0x72) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_ENDHDR_3, uc);
+ if (uc != 0x45) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_ENDHDR_4, uc);
+ if (uc != 0x38) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_ENDHDR_5, uc);
+ if (uc != 0x50) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_ENDHDR_6, uc);
+ if (uc != 0x90) RETURN(BZ_DATA_ERROR);
+
+ s->storedCombinedCRC = 0;
+ GET_UCHAR(BZ_X_CCRC_1, uc);
+ s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_CCRC_2, uc);
+ s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_CCRC_3, uc);
+ s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_CCRC_4, uc);
+ s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+
+ s->state = BZ_X_IDLE;
+ RETURN(BZ_STREAM_END);
+
+ default: AssertH ( False, 4001 );
+ }
+
+ AssertH ( False, 4002 );
+
+ save_state_and_return:
+
+ s->save_i = i;
+ s->save_j = j;
+ s->save_t = t;
+ s->save_alphaSize = alphaSize;
+ s->save_nGroups = nGroups;
+ s->save_nSelectors = nSelectors;
+ s->save_EOB = EOB;
+ s->save_groupNo = groupNo;
+ s->save_groupPos = groupPos;
+ s->save_nextSym = nextSym;
+ s->save_nblockMAX = nblockMAX;
+ s->save_nblock = nblock;
+ s->save_es = es;
+ s->save_N = N;
+ s->save_curr = curr;
+ s->save_zt = zt;
+ s->save_zn = zn;
+ s->save_zvec = zvec;
+ s->save_zj = zj;
+ s->save_gSel = gSel;
+ s->save_gMinlen = gMinlen;
+ s->save_gLimit = gLimit;
+ s->save_gBase = gBase;
+ s->save_gPerm = gPerm;
+
+ return retVal;
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end decompress.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/dlltest.c b/libs/ext/bzip2/dlltest.c
new file mode 100644
index 0000000..03fa146
--- /dev/null
+++ b/libs/ext/bzip2/dlltest.c
@@ -0,0 +1,175 @@
+/*
+ minibz2
+ libbz2.dll test program.
+ by Yoshioka Tsuneo (tsuneo at rr.iij4u.or.jp)
+ This file is Public Domain. Welcome any email to me.
+
+ usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]
+*/
+
+#define BZ_IMPORT
+#include <stdio.h>
+#include <stdlib.h>
+#include "bzlib.h"
+#ifdef _WIN32
+#include <io.h>
+#endif
+
+
+#ifdef _WIN32
+
+#define BZ2_LIBNAME "libbz2-1.0.2.DLL"
+
+#include <windows.h>
+static int BZ2DLLLoaded = 0;
+static HINSTANCE BZ2DLLhLib;
+int BZ2DLLLoadLibrary(void)
+{
+ HINSTANCE hLib;
+
+ if(BZ2DLLLoaded==1){return 0;}
+ hLib=LoadLibrary(BZ2_LIBNAME);
+ if(hLib == NULL){
+ fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME);
+ return -1;
+ }
+ BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion");
+ BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen");
+ BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen");
+ BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread");
+ BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite");
+ BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush");
+ BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose");
+ BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror");
+
+ if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen
+ || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush
+ || !BZ2_bzclose || !BZ2_bzerror) {
+ fprintf(stderr,"GetProcAddress failed.\n");
+ return -1;
+ }
+ BZ2DLLLoaded=1;
+ BZ2DLLhLib=hLib;
+ return 0;
+
+}
+int BZ2DLLFreeLibrary(void)
+{
+ if(BZ2DLLLoaded==0){return 0;}
+ FreeLibrary(BZ2DLLhLib);
+ BZ2DLLLoaded=0;
+}
+#endif /* WIN32 */
+
+void usage(void)
+{
+ puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]");
+}
+
+int main(int argc,char *argv[])
+{
+ int decompress = 0;
+ int level = 9;
+ char *fn_r = NULL;
+ char *fn_w = NULL;
+
+#ifdef _WIN32
+ if(BZ2DLLLoadLibrary()<0){
+ fprintf(stderr,"Loading of %s failed. Giving up.\n", BZ2_LIBNAME);
+ exit(1);
+ }
+ printf("Loading of %s succeeded. Library version is %s.\n",
+ BZ2_LIBNAME, BZ2_bzlibVersion() );
+#endif
+ while(++argv,--argc){
+ if(**argv =='-' || **argv=='/'){
+ char *p;
+
+ for(p=*argv+1;*p;p++){
+ if(*p=='d'){
+ decompress = 1;
+ }else if('1'<=*p && *p<='9'){
+ level = *p - '0';
+ }else{
+ usage();
+ exit(1);
+ }
+ }
+ }else{
+ break;
+ }
+ }
+ if(argc>=1){
+ fn_r = *argv;
+ argc--;argv++;
+ }else{
+ fn_r = NULL;
+ }
+ if(argc>=1){
+ fn_w = *argv;
+ argc--;argv++;
+ }else{
+ fn_w = NULL;
+ }
+ {
+ int len;
+ char buff[0x1000];
+ char mode[10];
+
+ if(decompress){
+ BZFILE *BZ2fp_r = NULL;
+ FILE *fp_w = NULL;
+
+ if(fn_w){
+ if((fp_w = fopen(fn_w,"wb"))==NULL){
+ printf("can't open [%s]\n",fn_w);
+ perror("reason:");
+ exit(1);
+ }
+ }else{
+ fp_w = stdout;
+ }
+ if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)
+ || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){
+ printf("can't bz2openstream\n");
+ exit(1);
+ }
+ while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){
+ fwrite(buff,1,len,fp_w);
+ }
+ BZ2_bzclose(BZ2fp_r);
+ if(fp_w != stdout) fclose(fp_w);
+ }else{
+ BZFILE *BZ2fp_w = NULL;
+ FILE *fp_r = NULL;
+
+ if(fn_r){
+ if((fp_r = fopen(fn_r,"rb"))==NULL){
+ printf("can't open [%s]\n",fn_r);
+ perror("reason:");
+ exit(1);
+ }
+ }else{
+ fp_r = stdin;
+ }
+ mode[0]='w';
+ mode[1] = '0' + level;
+ mode[2] = '\0';
+
+ if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)
+ || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){
+ printf("can't bz2openstream\n");
+ exit(1);
+ }
+ while((len=fread(buff,1,0x1000,fp_r))>0){
+ BZ2_bzwrite(BZ2fp_w,buff,len);
+ }
+ BZ2_bzclose(BZ2fp_w);
+ if(fp_r!=stdin)fclose(fp_r);
+ }
+ }
+#ifdef _WIN32
+ BZ2DLLFreeLibrary();
+#endif
+ return 0;
+}
diff --git a/libs/ext/bzip2/huffman.c b/libs/ext/bzip2/huffman.c
new file mode 100644
index 0000000..2283fdb
--- /dev/null
+++ b/libs/ext/bzip2/huffman.c
@@ -0,0 +1,205 @@
+
+/*-------------------------------------------------------------*/
+/*--- Huffman coding low-level stuff ---*/
+/*--- huffman.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*---------------------------------------------------*/
+#define WEIGHTOF(zz0) ((zz0) & 0xffffff00)
+#define DEPTHOF(zz1) ((zz1) & 0x000000ff)
+#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))
+
+#define ADDWEIGHTS(zw1,zw2) \
+ (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \
+ (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))
+
+#define UPHEAP(z) \
+{ \
+ Int32 zz, tmp; \
+ zz = z; tmp = heap[zz]; \
+ while (weight[tmp] < weight[heap[zz >> 1]]) { \
+ heap[zz] = heap[zz >> 1]; \
+ zz >>= 1; \
+ } \
+ heap[zz] = tmp; \
+}
+
+#define DOWNHEAP(z) \
+{ \
+ Int32 zz, yy, tmp; \
+ zz = z; tmp = heap[zz]; \
+ while (True) { \
+ yy = zz << 1; \
+ if (yy > nHeap) break; \
+ if (yy < nHeap && \
+ weight[heap[yy+1]] < weight[heap[yy]]) \
+ yy++; \
+ if (weight[tmp] < weight[heap[yy]]) break; \
+ heap[zz] = heap[yy]; \
+ zz = yy; \
+ } \
+ heap[zz] = tmp; \
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbMakeCodeLengths ( UChar *len,
+ Int32 *freq,
+ Int32 alphaSize,
+ Int32 maxLen )
+{
+ /*--
+ Nodes and heap entries run from 1. Entry 0
+ for both the heap and nodes is a sentinel.
+ --*/
+ Int32 nNodes, nHeap, n1, n2, i, j, k;
+ Bool tooLong;
+
+ Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ];
+ Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];
+ Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ];
+
+ for (i = 0; i < alphaSize; i++)
+ weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
+
+ while (True) {
+
+ nNodes = alphaSize;
+ nHeap = 0;
+
+ heap[0] = 0;
+ weight[0] = 0;
+ parent[0] = -2;
+
+ for (i = 1; i <= alphaSize; i++) {
+ parent[i] = -1;
+ nHeap++;
+ heap[nHeap] = i;
+ UPHEAP(nHeap);
+ }
+
+ AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );
+
+ while (nHeap > 1) {
+ n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
+ n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
+ nNodes++;
+ parent[n1] = parent[n2] = nNodes;
+ weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);
+ parent[nNodes] = -1;
+ nHeap++;
+ heap[nHeap] = nNodes;
+ UPHEAP(nHeap);
+ }
+
+ AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );
+
+ tooLong = False;
+ for (i = 1; i <= alphaSize; i++) {
+ j = 0;
+ k = i;
+ while (parent[k] >= 0) { k = parent[k]; j++; }
+ len[i-1] = j;
+ if (j > maxLen) tooLong = True;
+ }
+
+ if (! tooLong) break;
+
+ /* 17 Oct 04: keep-going condition for the following loop used
+ to be 'i < alphaSize', which missed the last element,
+ theoretically leading to the possibility of the compressor
+ looping. However, this count-scaling step is only needed if
+ one of the generated Huffman code words is longer than
+ maxLen, which up to and including version 1.0.2 was 20 bits,
+ which is extremely unlikely. In version 1.0.3 maxLen was
+ changed to 17 bits, which has minimal effect on compression
+ ratio, but does mean this scaling step is used from time to
+ time, enough to verify that it works.
+
+ This means that bzip2-1.0.3 and later will only produce
+ Huffman codes with a maximum length of 17 bits. However, in
+ order to preserve backwards compatibility with bitstreams
+ produced by versions pre-1.0.3, the decompressor must still
+ handle lengths of up to 20. */
+
+ for (i = 1; i <= alphaSize; i++) {
+ j = weight[i] >> 8;
+ j = 1 + (j / 2);
+ weight[i] = j << 8;
+ }
+ }
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbAssignCodes ( Int32 *code,
+ UChar *length,
+ Int32 minLen,
+ Int32 maxLen,
+ Int32 alphaSize )
+{
+ Int32 n, vec, i;
+
+ vec = 0;
+ for (n = minLen; n <= maxLen; n++) {
+ for (i = 0; i < alphaSize; i++)
+ if (length[i] == n) { code[i] = vec; vec++; };
+ vec <<= 1;
+ }
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbCreateDecodeTables ( Int32 *limit,
+ Int32 *base,
+ Int32 *perm,
+ UChar *length,
+ Int32 minLen,
+ Int32 maxLen,
+ Int32 alphaSize )
+{
+ Int32 pp, i, j, vec;
+
+ pp = 0;
+ for (i = minLen; i <= maxLen; i++)
+ for (j = 0; j < alphaSize; j++)
+ if (length[j] == i) { perm[pp] = j; pp++; };
+
+ for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;
+ for (i = 0; i < alphaSize; i++) base[length[i]+1]++;
+
+ for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];
+
+ for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;
+ vec = 0;
+
+ for (i = minLen; i <= maxLen; i++) {
+ vec += (base[i+1] - base[i]);
+ limit[i] = vec-1;
+ vec <<= 1;
+ }
+ for (i = minLen + 1; i <= maxLen; i++)
+ base[i] = ((limit[i-1] + 1) << 1) - base[i];
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end huffman.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/libbz2.def b/libs/ext/bzip2/libbz2.def
new file mode 100644
index 0000000..2dc0dd8
--- /dev/null
+++ b/libs/ext/bzip2/libbz2.def
@@ -0,0 +1,27 @@
+LIBRARY LIBBZ2
+DESCRIPTION "libbzip2: library for data compression"
+EXPORTS
+ BZ2_bzCompressInit
+ BZ2_bzCompress
+ BZ2_bzCompressEnd
+ BZ2_bzDecompressInit
+ BZ2_bzDecompress
+ BZ2_bzDecompressEnd
+ BZ2_bzReadOpen
+ BZ2_bzReadClose
+ BZ2_bzReadGetUnused
+ BZ2_bzRead
+ BZ2_bzWriteOpen
+ BZ2_bzWrite
+ BZ2_bzWriteClose
+ BZ2_bzWriteClose64
+ BZ2_bzBuffToBuffCompress
+ BZ2_bzBuffToBuffDecompress
+ BZ2_bzlibVersion
+ BZ2_bzopen
+ BZ2_bzdopen
+ BZ2_bzread
+ BZ2_bzwrite
+ BZ2_bzflush
+ BZ2_bzclose
+ BZ2_bzerror
diff --git a/libs/axf/libaxf.vers b/libs/ext/bzip2/libbz2.vers
similarity index 100%
copy from libs/axf/libaxf.vers
copy to libs/ext/bzip2/libbz2.vers
diff --git a/libs/ext/bzip2/mk251.c b/libs/ext/bzip2/mk251.c
new file mode 100644
index 0000000..c9c36f6
--- /dev/null
+++ b/libs/ext/bzip2/mk251.c
@@ -0,0 +1,31 @@
+
+/* Spew out a long sequence of the byte 251. When fed to bzip2
+ versions 1.0.0 or 1.0.1, causes it to die with internal error
+ 1007 in blocksort.c. This assertion misses an extremely rare
+ case, which is fixed in this version (1.0.2) and above.
+*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#include <stdio.h>
+
+int main ()
+{
+ int i;
+ for (i = 0; i < 48500000 ; i++)
+ putchar(251);
+ return 0;
+}
diff --git a/libs/ext/bzip2/randtable.c b/libs/ext/bzip2/randtable.c
new file mode 100644
index 0000000..6d62459
--- /dev/null
+++ b/libs/ext/bzip2/randtable.c
@@ -0,0 +1,84 @@
+
+/*-------------------------------------------------------------*/
+/*--- Table for randomising repetitive blocks ---*/
+/*--- randtable.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------*/
+Int32 BZ2_rNums[512] = {
+ 619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
+ 985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
+ 733, 859, 335, 708, 621, 574, 73, 654, 730, 472,
+ 419, 436, 278, 496, 867, 210, 399, 680, 480, 51,
+ 878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
+ 862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
+ 150, 238, 59, 379, 684, 877, 625, 169, 643, 105,
+ 170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
+ 73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
+ 909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
+ 641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
+ 161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
+ 382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
+ 98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
+ 227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
+ 469, 68, 770, 919, 190, 373, 294, 822, 808, 206,
+ 184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
+ 715, 67, 618, 276, 204, 918, 873, 777, 604, 560,
+ 951, 160, 578, 722, 79, 804, 96, 409, 713, 940,
+ 652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
+ 645, 863, 803, 350, 139, 93, 354, 99, 820, 908,
+ 609, 772, 154, 274, 580, 184, 79, 626, 630, 742,
+ 653, 282, 762, 623, 680, 81, 927, 626, 789, 125,
+ 411, 521, 938, 300, 821, 78, 343, 175, 128, 250,
+ 170, 774, 972, 275, 999, 639, 495, 78, 352, 126,
+ 857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
+ 669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
+ 944, 375, 748, 52, 600, 747, 642, 182, 862, 81,
+ 344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
+ 897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
+ 433, 837, 553, 268, 926, 240, 102, 654, 459, 51,
+ 686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
+ 946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
+ 978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
+ 680, 879, 194, 572, 640, 724, 926, 56, 204, 700,
+ 707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
+ 297, 59, 87, 824, 713, 663, 412, 693, 342, 606,
+ 134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
+ 343, 97, 430, 751, 497, 314, 983, 374, 822, 928,
+ 140, 206, 73, 263, 980, 736, 876, 478, 430, 305,
+ 170, 514, 364, 692, 829, 82, 855, 953, 676, 246,
+ 369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
+ 804, 378, 215, 828, 592, 281, 565, 555, 710, 82,
+ 896, 831, 547, 261, 524, 462, 293, 465, 502, 56,
+ 661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
+ 768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
+ 61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
+ 372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
+ 780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
+ 920, 176, 193, 713, 857, 265, 203, 50, 668, 108,
+ 645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
+ 936, 638
+};
+
+
+/*-------------------------------------------------------------*/
+/*--- end randtable.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/spewG.c b/libs/ext/bzip2/spewG.c
new file mode 100644
index 0000000..14a3649
--- /dev/null
+++ b/libs/ext/bzip2/spewG.c
@@ -0,0 +1,54 @@
+
+/* spew out a thoroughly gigantic file designed so that bzip2
+ can compress it reasonably rapidly. This is to help test
+ support for large files (> 2GB) in a reasonable amount of time.
+ I suggest you use the undocumented --exponential option to
+ bzip2 when compressing the resulting file; this saves a bit of
+ time. Note: *don't* bother with --exponential when compressing
+ Real Files; it'll just waste a lot of CPU time :-)
+ (but is otherwise harmless).
+*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#define _FILE_OFFSET_BITS 64
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* The number of megabytes of junk to spew out (roughly) */
+#define MEGABYTES 5000
+
+#define N_BUF 1000000
+char buf[N_BUF];
+
+int main ( int argc, char** argv )
+{
+ int ii, kk, p;
+ srandom(1);
+ setbuffer ( stdout, buf, N_BUF );
+ for (kk = 0; kk < MEGABYTES * 515; kk+=3) {
+ p = 25+random()%50;
+ for (ii = 0; ii < p; ii++)
+ printf ( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );
+ for (ii = 0; ii < p-1; ii++)
+ printf ( "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" );
+ for (ii = 0; ii < p+1; ii++)
+ printf ( "ccccccccccccccccccccccccccccccccccccc" );
+ }
+ fflush(stdout);
+ return 0;
+}
diff --git a/libs/ext/bzip2/unzcrash.c b/libs/ext/bzip2/unzcrash.c
new file mode 100644
index 0000000..7041da5
--- /dev/null
+++ b/libs/ext/bzip2/unzcrash.c
@@ -0,0 +1,141 @@
+
+/* A test program written to test robustness to decompression of
+ corrupted data. Usage is
+ unzcrash filename
+ and the program will read the specified file, compress it (in memory),
+ and then repeatedly decompress it, each time with a different bit of
+ the compressed data inverted, so as to test all possible one-bit errors.
+ This should not cause any invalid memory accesses. If it does,
+ I want to know about it!
+
+ PS. As you can see from the above description, the process is
+ incredibly slow. A file of size eg 5KB will cause it to run for
+ many hours.
+*/
+
+/* ------------------------------------------------------------------
+ This file is part of bzip2/libbzip2, a program and library for
+ lossless, block-sorting data compression.
+
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+ Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+ Please read the WARNING, DISCLAIMER and PATENTS sections in the
+ README file.
+
+ This program is released under the terms of the license contained
+ in the file LICENSE.
+ ------------------------------------------------------------------ */
+
+
+#include <stdio.h>
+#include <assert.h>
+#include "bzlib.h"
+
+#define M_BLOCK 1000000
+
+typedef unsigned char uchar;
+
+#define M_BLOCK_OUT (M_BLOCK + 1000000)
+uchar inbuf[M_BLOCK];
+uchar outbuf[M_BLOCK_OUT];
+uchar zbuf[M_BLOCK + 600 + (M_BLOCK / 100)];
+
+int nIn, nOut, nZ;
+
+static char *bzerrorstrings[] = {
+ "OK"
+ ,"SEQUENCE_ERROR"
+ ,"PARAM_ERROR"
+ ,"MEM_ERROR"
+ ,"DATA_ERROR"
+ ,"DATA_ERROR_MAGIC"
+ ,"IO_ERROR"
+ ,"UNEXPECTED_EOF"
+ ,"OUTBUFF_FULL"
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+};
+
+void flip_bit ( int bit )
+{
+ int byteno = bit / 8;
+ int bitno = bit % 8;
+ uchar mask = 1 << bitno;
+ //fprintf ( stderr, "(byte %d bit %d mask %d)",
+ // byteno, bitno, (int)mask );
+ zbuf[byteno] ^= mask;
+}
+
+int main ( int argc, char** argv )
+{
+ FILE* f;
+ int r;
+ int bit;
+ int i;
+
+ if (argc != 2) {
+ fprintf ( stderr, "usage: unzcrash filename\n" );
+ return 1;
+ }
+
+ f = fopen ( argv[1], "r" );
+ if (!f) {
+ fprintf ( stderr, "unzcrash: can't open %s\n", argv[1] );
+ return 1;
+ }
+
+ nIn = fread ( inbuf, 1, M_BLOCK, f );
+ fprintf ( stderr, "%d bytes read\n", nIn );
+
+ nZ = M_BLOCK;
+ r = BZ2_bzBuffToBuffCompress (
+ zbuf, &nZ, inbuf, nIn, 9, 0, 30 );
+
+ assert (r == BZ_OK);
+ fprintf ( stderr, "%d after compression\n", nZ );
+
+ for (bit = 0; bit < nZ*8; bit++) {
+ fprintf ( stderr, "bit %d ", bit );
+ flip_bit ( bit );
+ nOut = M_BLOCK_OUT;
+ r = BZ2_bzBuffToBuffDecompress (
+ outbuf, &nOut, zbuf, nZ, 0, 0 );
+ fprintf ( stderr, " %d %s ", r, bzerrorstrings[-r] );
+
+ if (r != BZ_OK) {
+ fprintf ( stderr, "\n" );
+ } else {
+ if (nOut != nIn) {
+ fprintf(stderr, "nIn/nOut mismatch %d %d\n", nIn, nOut );
+ return 1;
+ } else {
+ for (i = 0; i < nOut; i++)
+ if (inbuf[i] != outbuf[i]) {
+ fprintf(stderr, "mismatch at %d\n", i );
+ return 1;
+ }
+ if (i == nOut) fprintf(stderr, "really ok!\n" );
+ }
+ }
+
+ flip_bit ( bit );
+ }
+
+#if 0
+ assert (nOut == nIn);
+ for (i = 0; i < nOut; i++) {
+ if (inbuf[i] != outbuf[i]) {
+ fprintf ( stderr, "difference at %d !\n", i );
+ return 1;
+ }
+ }
+#endif
+
+ fprintf ( stderr, "all ok\n" );
+ return 0;
+}
diff --git a/libs/ext/curl/Makefile b/libs/ext/curl/Makefile
new file mode 100644
index 0000000..e5736a8
--- /dev/null
+++ b/libs/ext/curl/Makefile
@@ -0,0 +1,103 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../../build/abspath.sh ../../..)
+MODULE = libs/ext/curl
+
+include $(TOP)/build/Makefile.env
+
+INT_LIBS = \
+
+EXT_LIBS = \
+ libcurl
+
+ALL_LIBS = \
+ $(INT_LIBS) \
+ $(EXT_LIBS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifneq (rwin,$(BUILD_OS))
+
+all std clean $(ALL_LIBS):
+ @true
+
+.PHONY: all std clean $(ALL_LIBS)
+
+else
+
+std: makedirs
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+all: makedirs
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(INT_LIBS): makedirs
+ @ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+ @ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: $(BINDIR)/libcurl.$(DLLX)
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: $(BINDIR)/libcurl.$(DLLX)
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+ rm -f $(BINDIR)/libcurl.$(DLLX)
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# libcurl
+#
+LIBCURL_VERS := \
+ 7.29.0
+
+ifeq (dbg,$(BUILD))
+ DBG=-dbg
+endif
+$(BINDIR)/libcurl.$(DLLX): /panfs/pan1/sra-test/TOOLKIT/libcurl/$(LIBCURL_VERS)/win$(BITS)$(DBG)/libcurl.$(DLLX)
+ cp $^ $@
+
+endif
+
diff --git a/libs/ext/zlib/Makefile b/libs/ext/zlib/Makefile
index e8329bf..6339903 100644
--- a/libs/ext/zlib/Makefile
+++ b/libs/ext/zlib/Makefile
@@ -42,16 +42,16 @@ ALL_LIBS = \
#-------------------------------------------------------------------------------
# outer targets
#
-std: makedirs download-$(OS)
+std: makedirs download
@ $(MAKE_CMD) $(TARGDIR)/$@
all: makedirs download
@ $(MAKE_CMD) $(TARGDIR)/$@
-$(INT_LIBS): makedirs download-$(OS)
+$(INT_LIBS): makedirs download
@ $(MAKE_CMD) $(ILIBDIR)/$@
-$(EXT_LIBS): makedirs download-$(OS)
+$(EXT_LIBS): makedirs download
@ $(MAKE_CMD) $(LIBDIR)/$@
.PHONY: all std $(ALL_LIBS)
@@ -66,7 +66,7 @@ $(TARGDIR)/all: $(LIBDIR)/libz
#-------------------------------------------------------------------------------
# std
#
-$(TARGDIR)/std: $(LIBDIR)/libz-$(OS)
+$(TARGDIR)/std: $(LIBDIR)/libz
.PHONY: $(TARGDIR)/std
@@ -74,37 +74,18 @@ $(TARGDIR)/std: $(LIBDIR)/libz-$(OS)
# clean
#
clean: stdclean
+ @ rm -f libz.vers
.PHONY: clean
#-------------------------------------------------------------------------------
-# libz-$(OS)
-#
-NORMALLY_HAVE = \
- unix \
- linux \
- mac \
- sun
-
-DONT_HAVE = \
- win
-
-LIBZ_SYS_HAS_LIB = \
- $(addprefix $(LIBDIR)/libz-,$(NORMALLY_HAVE))
-
-$(LIBZ_SYS_HAS_LIB):
- @ true
-
-LIBZ_SYS_NEEDS_LIB = \
- $(addprefix $(LIBDIR)/libz-,$(DONT_HAVE))
-
-$(LIBZ_SYS_NEEDS_LIB): $(LIBDIR)/libz
-
-
-#-------------------------------------------------------------------------------
# libz
#
+ifeq (win,$(OS))
$(LIBDIR)/libz: $(addprefix $(LIBDIR)/libz.,$(LIBEXT))
+else
+$(LIBDIR)/libz: $(addprefix $(LIBDIR)/libz.,$(LIBX))
+endif
LIBZ_SRC = \
adler32 \
@@ -137,38 +118,52 @@ $(LIBDIR)/libz.$(LIBX): $(LIBZ_OBJ)
#-------------------------------------------------------------------------------
-# download-$(OS)
-#
-LIBZ_SYS_HAS_SRC = \
- $(addprefix download-,$(NORMALLY_HAVE))
-
-$(LIBZ_SYS_HAS_SRC):
- @ true
-
-LIBZ_SYS_NEEDS_SRC = \
- $(addprefix download-,$(DONT_HAVE))
-
-$(LIBZ_SYS_NEEDS_SRC): download
-
-
-#-------------------------------------------------------------------------------
# libz download
#
ZLIB_VERS := \
- 1.2.5
-
-zlib-$(ZLIB_VERS).tar.gz:
+ 1.2.7
+
+ZLIB_TAR = \
+ zlib-$(ZLIB_VERS).tar
+
+ZLIB_TAR_GZ = \
+ $(ZLIB_TAR).gz
+
+ifeq (win,$(OS))
+ECHO_VERS = echo -ne $(ZLIB_VERS) "\n"
+else
+ECHO_VERS = echo $(ZLIB_VERS)
+endif
+
+ifeq (sun,$(OS))
+ ZLIB_TAR_GET = $(ZLIB_TAR)
+ TAR_CMD = tar -xf
+else
+ ZLIB_TAR_GET = $(ZLIB_TAR_GZ)
+ TAR_CMD = tar --no-same-owner -x -z -f
+endif
+
+ifeq (mac,$(OS))
+RETRIEVE = curl -O
+else
+RETRIEVE = wget
+endif
+
+$(ZLIB_TAR_GZ):
@ echo downloading the sources
- wget http://zlib.net/$@
+ $(RETRIEVE) http://zlib.net/$@
@ touch $@
-libz.vers: zlib-$(ZLIB_VERS).tar.gz
+$(ZLIB_TAR): $(ZLIB_TAR_GZ)
+ gzcat $^ > $@
+
+libz.vers: $(ZLIB_TAR_GET)
@ echo unpacking the sources
- tar xzf $^
+ $(TAR_CMD) $^
mv zlib-$(ZLIB_VERS)/*.[ch] .
mv zlib-$(ZLIB_VERS)/win32/zlib.def libz.def
- rm -rf zlib-$(ZLIB_VERS)
- @ echo $(ZLIB_VERS) > $@
+ -rm -rf zlib-$(ZLIB_VERS) >/dev/null
+ @ $(ECHO_VERS) > $@
download: libz.vers
diff --git a/libs/ext/zlib/adler32.c b/libs/ext/zlib/adler32.c
new file mode 100644
index 0000000..a868f07
--- /dev/null
+++ b/libs/ext/zlib/adler32.c
@@ -0,0 +1,179 @@
+/* adler32.c -- compute the Adler-32 checksum of a data stream
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+
+#define local static
+
+local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
+
+#define BASE 65521 /* largest prime smaller than 65536 */
+#define NMAX 5552
+/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
+
+#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;}
+#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
+#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
+#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
+#define DO16(buf) DO8(buf,0); DO8(buf,8);
+
+/* use NO_DIVIDE if your processor does not do division in hardware --
+ try it both ways to see which is faster */
+#ifdef NO_DIVIDE
+/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
+ (thank you to John Reiser for pointing this out) */
+# define CHOP(a) \
+ do { \
+ unsigned long tmp = a >> 16; \
+ a &= 0xffffUL; \
+ a += (tmp << 4) - tmp; \
+ } while (0)
+# define MOD28(a) \
+ do { \
+ CHOP(a); \
+ if (a >= BASE) a -= BASE; \
+ } while (0)
+# define MOD(a) \
+ do { \
+ CHOP(a); \
+ MOD28(a); \
+ } while (0)
+# define MOD63(a) \
+ do { /* this assumes a is not negative */ \
+ z_off64_t tmp = a >> 32; \
+ a &= 0xffffffffL; \
+ a += (tmp << 8) - (tmp << 5) + tmp; \
+ tmp = a >> 16; \
+ a &= 0xffffL; \
+ a += (tmp << 4) - tmp; \
+ tmp = a >> 16; \
+ a &= 0xffffL; \
+ a += (tmp << 4) - tmp; \
+ if (a >= BASE) a -= BASE; \
+ } while (0)
+#else
+# define MOD(a) a %= BASE
+# define MOD28(a) a %= BASE
+# define MOD63(a) a %= BASE
+#endif
+
+/* ========================================================================= */
+uLong ZEXPORT adler32(adler, buf, len)
+ uLong adler;
+ const Bytef *buf;
+ uInt len;
+{
+ unsigned long sum2;
+ unsigned n;
+
+ /* split Adler-32 into component sums */
+ sum2 = (adler >> 16) & 0xffff;
+ adler &= 0xffff;
+
+ /* in case user likes doing a byte at a time, keep it fast */
+ if (len == 1) {
+ adler += buf[0];
+ if (adler >= BASE)
+ adler -= BASE;
+ sum2 += adler;
+ if (sum2 >= BASE)
+ sum2 -= BASE;
+ return adler | (sum2 << 16);
+ }
+
+ /* initial Adler-32 value (deferred check for len == 1 speed) */
+ if (buf == Z_NULL)
+ return 1L;
+
+ /* in case short lengths are provided, keep it somewhat fast */
+ if (len < 16) {
+ while (len--) {
+ adler += *buf++;
+ sum2 += adler;
+ }
+ if (adler >= BASE)
+ adler -= BASE;
+ MOD28(sum2); /* only added so many BASE's */
+ return adler | (sum2 << 16);
+ }
+
+ /* do length NMAX blocks -- requires just one modulo operation */
+ while (len >= NMAX) {
+ len -= NMAX;
+ n = NMAX / 16; /* NMAX is divisible by 16 */
+ do {
+ DO16(buf); /* 16 sums unrolled */
+ buf += 16;
+ } while (--n);
+ MOD(adler);
+ MOD(sum2);
+ }
+
+ /* do remaining bytes (less than NMAX, still just one modulo) */
+ if (len) { /* avoid modulos if none remaining */
+ while (len >= 16) {
+ len -= 16;
+ DO16(buf);
+ buf += 16;
+ }
+ while (len--) {
+ adler += *buf++;
+ sum2 += adler;
+ }
+ MOD(adler);
+ MOD(sum2);
+ }
+
+ /* return recombined sums */
+ return adler | (sum2 << 16);
+}
+
+/* ========================================================================= */
+local uLong adler32_combine_(adler1, adler2, len2)
+ uLong adler1;
+ uLong adler2;
+ z_off64_t len2;
+{
+ unsigned long sum1;
+ unsigned long sum2;
+ unsigned rem;
+
+ /* for negative len, return invalid adler32 as a clue for debugging */
+ if (len2 < 0)
+ return 0xffffffffUL;
+
+ /* the derivation of this formula is left as an exercise for the reader */
+ MOD63(len2); /* assumes len2 >= 0 */
+ rem = (unsigned)len2;
+ sum1 = adler1 & 0xffff;
+ sum2 = rem * sum1;
+ MOD(sum2);
+ sum1 += (adler2 & 0xffff) + BASE - 1;
+ sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
+ if (sum1 >= BASE) sum1 -= BASE;
+ if (sum1 >= BASE) sum1 -= BASE;
+ if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
+ if (sum2 >= BASE) sum2 -= BASE;
+ return sum1 | (sum2 << 16);
+}
+
+/* ========================================================================= */
+uLong ZEXPORT adler32_combine(adler1, adler2, len2)
+ uLong adler1;
+ uLong adler2;
+ z_off_t len2;
+{
+ return adler32_combine_(adler1, adler2, len2);
+}
+
+uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
+ uLong adler1;
+ uLong adler2;
+ z_off64_t len2;
+{
+ return adler32_combine_(adler1, adler2, len2);
+}
diff --git a/libs/ext/zlib/compress.c b/libs/ext/zlib/compress.c
new file mode 100644
index 0000000..ea4dfbe
--- /dev/null
+++ b/libs/ext/zlib/compress.c
@@ -0,0 +1,80 @@
+/* compress.c -- compress a memory buffer
+ * Copyright (C) 1995-2005 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#define ZLIB_INTERNAL
+#include "zlib.h"
+
+/* ===========================================================================
+ Compresses the source buffer into the destination buffer. The level
+ parameter has the same meaning as in deflateInit. sourceLen is the byte
+ length of the source buffer. Upon entry, destLen is the total size of the
+ destination buffer, which must be at least 0.1% larger than sourceLen plus
+ 12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
+
+ compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+ Z_STREAM_ERROR if the level parameter is invalid.
+*/
+int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+ int level;
+{
+ z_stream stream;
+ int err;
+
+ stream.next_in = (Bytef*)source;
+ stream.avail_in = (uInt)sourceLen;
+#ifdef MAXSEG_64K
+ /* Check for source > 64K on 16-bit machine: */
+ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+#endif
+ stream.next_out = dest;
+ stream.avail_out = (uInt)*destLen;
+ if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+ stream.zalloc = (alloc_func)0;
+ stream.zfree = (free_func)0;
+ stream.opaque = (voidpf)0;
+
+ err = deflateInit(&stream, level);
+ if (err != Z_OK) return err;
+
+ err = deflate(&stream, Z_FINISH);
+ if (err != Z_STREAM_END) {
+ deflateEnd(&stream);
+ return err == Z_OK ? Z_BUF_ERROR : err;
+ }
+ *destLen = stream.total_out;
+
+ err = deflateEnd(&stream);
+ return err;
+}
+
+/* ===========================================================================
+ */
+int ZEXPORT compress (dest, destLen, source, sourceLen)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+{
+ return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
+}
+
+/* ===========================================================================
+ If the default memLevel or windowBits for deflateInit() is changed, then
+ this function needs to be updated.
+ */
+uLong ZEXPORT compressBound (sourceLen)
+ uLong sourceLen;
+{
+ return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+ (sourceLen >> 25) + 13;
+}
diff --git a/libs/ext/zlib/crc32.c b/libs/ext/zlib/crc32.c
new file mode 100644
index 0000000..979a719
--- /dev/null
+++ b/libs/ext/zlib/crc32.c
@@ -0,0 +1,425 @@
+/* crc32.c -- compute the CRC-32 of a data stream
+ * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Thanks to Rodney Brown <rbrown64 at csc.com.au> for his contribution of faster
+ * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
+ * tables for updating the shift register in one step with three exclusive-ors
+ * instead of four steps with four exclusive-ors. This results in about a
+ * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
+ */
+
+/* @(#) $Id$ */
+
+/*
+ Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
+ protection on the static variables used to control the first-use generation
+ of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
+ first call get_crc_table() to initialize the tables before allowing more than
+ one thread to use crc32().
+
+ DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
+ */
+
+#ifdef MAKECRCH
+# include <stdio.h>
+# ifndef DYNAMIC_CRC_TABLE
+# define DYNAMIC_CRC_TABLE
+# endif /* !DYNAMIC_CRC_TABLE */
+#endif /* MAKECRCH */
+
+#include "zutil.h" /* for STDC and FAR definitions */
+
+#define local static
+
+/* Definitions for doing the crc four data bytes at a time. */
+#if !defined(NOBYFOUR) && defined(Z_U4)
+# define BYFOUR
+#endif
+#ifdef BYFOUR
+ local unsigned long crc32_little OF((unsigned long,
+ const unsigned char FAR *, unsigned));
+ local unsigned long crc32_big OF((unsigned long,
+ const unsigned char FAR *, unsigned));
+# define TBLS 8
+#else
+# define TBLS 1
+#endif /* BYFOUR */
+
+/* Local functions for crc concatenation */
+local unsigned long gf2_matrix_times OF((unsigned long *mat,
+ unsigned long vec));
+local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
+local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
+
+
+#ifdef DYNAMIC_CRC_TABLE
+
+local volatile int crc_table_empty = 1;
+local z_crc_t FAR crc_table[TBLS][256];
+local void make_crc_table OF((void));
+#ifdef MAKECRCH
+ local void write_table OF((FILE *, const z_crc_t FAR *));
+#endif /* MAKECRCH */
+/*
+ Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
+ x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
+
+ Polynomials over GF(2) are represented in binary, one bit per coefficient,
+ with the lowest powers in the most significant bit. Then adding polynomials
+ is just exclusive-or, and multiplying a polynomial by x is a right shift by
+ one. If we call the above polynomial p, and represent a byte as the
+ polynomial q, also with the lowest power in the most significant bit (so the
+ byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
+ where a mod b means the remainder after dividing a by b.
+
+ This calculation is done using the shift-register method of multiplying and
+ taking the remainder. The register is initialized to zero, and for each
+ incoming bit, x^32 is added mod p to the register if the bit is a one (where
+ x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
+ x (which is shifting right by one and adding x^32 mod p if the bit shifted
+ out is a one). We start with the highest power (least significant bit) of
+ q and repeat for all eight bits of q.
+
+ The first table is simply the CRC of all possible eight bit values. This is
+ all the information needed to generate CRCs on data a byte at a time for all
+ combinations of CRC register values and incoming bytes. The remaining tables
+ allow for word-at-a-time CRC calculation for both big-endian and little-
+ endian machines, where a word is four bytes.
+*/
+local void make_crc_table()
+{
+ z_crc_t c;
+ int n, k;
+ z_crc_t poly; /* polynomial exclusive-or pattern */
+ /* terms of polynomial defining this crc (except x^32): */
+ static volatile int first = 1; /* flag to limit concurrent making */
+ static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
+
+ /* See if another task is already doing this (not thread-safe, but better
+ than nothing -- significantly reduces duration of vulnerability in
+ case the advice about DYNAMIC_CRC_TABLE is ignored) */
+ if (first) {
+ first = 0;
+
+ /* make exclusive-or pattern from polynomial (0xedb88320UL) */
+ poly = 0;
+ for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
+ poly |= (z_crc_t)1 << (31 - p[n]);
+
+ /* generate a crc for every 8-bit value */
+ for (n = 0; n < 256; n++) {
+ c = (z_crc_t)n;
+ for (k = 0; k < 8; k++)
+ c = c & 1 ? poly ^ (c >> 1) : c >> 1;
+ crc_table[0][n] = c;
+ }
+
+#ifdef BYFOUR
+ /* generate crc for each value followed by one, two, and three zeros,
+ and then the byte reversal of those as well as the first table */
+ for (n = 0; n < 256; n++) {
+ c = crc_table[0][n];
+ crc_table[4][n] = ZSWAP32(c);
+ for (k = 1; k < 4; k++) {
+ c = crc_table[0][c & 0xff] ^ (c >> 8);
+ crc_table[k][n] = c;
+ crc_table[k + 4][n] = ZSWAP32(c);
+ }
+ }
+#endif /* BYFOUR */
+
+ crc_table_empty = 0;
+ }
+ else { /* not first */
+ /* wait for the other guy to finish (not efficient, but rare) */
+ while (crc_table_empty)
+ ;
+ }
+
+#ifdef MAKECRCH
+ /* write out CRC tables to crc32.h */
+ {
+ FILE *out;
+
+ out = fopen("crc32.h", "w");
+ if (out == NULL) return;
+ fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
+ fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
+ fprintf(out, "local const z_crc_t FAR ");
+ fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
+ write_table(out, crc_table[0]);
+# ifdef BYFOUR
+ fprintf(out, "#ifdef BYFOUR\n");
+ for (k = 1; k < 8; k++) {
+ fprintf(out, " },\n {\n");
+ write_table(out, crc_table[k]);
+ }
+ fprintf(out, "#endif\n");
+# endif /* BYFOUR */
+ fprintf(out, " }\n};\n");
+ fclose(out);
+ }
+#endif /* MAKECRCH */
+}
+
+#ifdef MAKECRCH
+local void write_table(out, table)
+ FILE *out;
+ const z_crc_t FAR *table;
+{
+ int n;
+
+ for (n = 0; n < 256; n++)
+ fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
+ (unsigned long)(table[n]),
+ n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
+}
+#endif /* MAKECRCH */
+
+#else /* !DYNAMIC_CRC_TABLE */
+/* ========================================================================
+ * Tables of CRC-32s of all single-byte values, made by make_crc_table().
+ */
+#include "crc32.h"
+#endif /* DYNAMIC_CRC_TABLE */
+
+/* =========================================================================
+ * This function can be used by asm versions of crc32()
+ */
+const z_crc_t FAR * ZEXPORT get_crc_table()
+{
+#ifdef DYNAMIC_CRC_TABLE
+ if (crc_table_empty)
+ make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+ return (const z_crc_t FAR *)crc_table;
+}
+
+/* ========================================================================= */
+#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
+#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
+
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ uInt len;
+{
+ if (buf == Z_NULL) return 0UL;
+
+#ifdef DYNAMIC_CRC_TABLE
+ if (crc_table_empty)
+ make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+
+#ifdef BYFOUR
+ if (sizeof(void *) == sizeof(ptrdiff_t)) {
+ z_crc_t endian;
+
+ endian = 1;
+ if (*((unsigned char *)(&endian)))
+ return crc32_little(crc, buf, len);
+ else
+ return crc32_big(crc, buf, len);
+ }
+#endif /* BYFOUR */
+ crc = crc ^ 0xffffffffUL;
+ while (len >= 8) {
+ DO8;
+ len -= 8;
+ }
+ if (len) do {
+ DO1;
+ } while (--len);
+ return crc ^ 0xffffffffUL;
+}
+
+#ifdef BYFOUR
+
+/* ========================================================================= */
+#define DOLIT4 c ^= *buf4++; \
+ c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
+ crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
+#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
+
+/* ========================================================================= */
+local unsigned long crc32_little(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ unsigned len;
+{
+ register z_crc_t c;
+ register const z_crc_t FAR *buf4;
+
+ c = (z_crc_t)crc;
+ c = ~c;
+ while (len && ((ptrdiff_t)buf & 3)) {
+ c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+ len--;
+ }
+
+ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+ while (len >= 32) {
+ DOLIT32;
+ len -= 32;
+ }
+ while (len >= 4) {
+ DOLIT4;
+ len -= 4;
+ }
+ buf = (const unsigned char FAR *)buf4;
+
+ if (len) do {
+ c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+ } while (--len);
+ c = ~c;
+ return (unsigned long)c;
+}
+
+/* ========================================================================= */
+#define DOBIG4 c ^= *++buf4; \
+ c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
+ crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
+#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
+
+/* ========================================================================= */
+local unsigned long crc32_big(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ unsigned len;
+{
+ register z_crc_t c;
+ register const z_crc_t FAR *buf4;
+
+ c = ZSWAP32((z_crc_t)crc);
+ c = ~c;
+ while (len && ((ptrdiff_t)buf & 3)) {
+ c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+ len--;
+ }
+
+ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+ buf4--;
+ while (len >= 32) {
+ DOBIG32;
+ len -= 32;
+ }
+ while (len >= 4) {
+ DOBIG4;
+ len -= 4;
+ }
+ buf4++;
+ buf = (const unsigned char FAR *)buf4;
+
+ if (len) do {
+ c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+ } while (--len);
+ c = ~c;
+ return (unsigned long)(ZSWAP32(c));
+}
+
+#endif /* BYFOUR */
+
+#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
+
+/* ========================================================================= */
+local unsigned long gf2_matrix_times(mat, vec)
+ unsigned long *mat;
+ unsigned long vec;
+{
+ unsigned long sum;
+
+ sum = 0;
+ while (vec) {
+ if (vec & 1)
+ sum ^= *mat;
+ vec >>= 1;
+ mat++;
+ }
+ return sum;
+}
+
+/* ========================================================================= */
+local void gf2_matrix_square(square, mat)
+ unsigned long *square;
+ unsigned long *mat;
+{
+ int n;
+
+ for (n = 0; n < GF2_DIM; n++)
+ square[n] = gf2_matrix_times(mat, mat[n]);
+}
+
+/* ========================================================================= */
+local uLong crc32_combine_(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off64_t len2;
+{
+ int n;
+ unsigned long row;
+ unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
+ unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
+
+ /* degenerate case (also disallow negative lengths) */
+ if (len2 <= 0)
+ return crc1;
+
+ /* put operator for one zero bit in odd */
+ odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
+ row = 1;
+ for (n = 1; n < GF2_DIM; n++) {
+ odd[n] = row;
+ row <<= 1;
+ }
+
+ /* put operator for two zero bits in even */
+ gf2_matrix_square(even, odd);
+
+ /* put operator for four zero bits in odd */
+ gf2_matrix_square(odd, even);
+
+ /* apply len2 zeros to crc1 (first square will put the operator for one
+ zero byte, eight zero bits, in even) */
+ do {
+ /* apply zeros operator for this bit of len2 */
+ gf2_matrix_square(even, odd);
+ if (len2 & 1)
+ crc1 = gf2_matrix_times(even, crc1);
+ len2 >>= 1;
+
+ /* if no more bits set, then done */
+ if (len2 == 0)
+ break;
+
+ /* another iteration of the loop with odd and even swapped */
+ gf2_matrix_square(odd, even);
+ if (len2 & 1)
+ crc1 = gf2_matrix_times(odd, crc1);
+ len2 >>= 1;
+
+ /* if no more bits set, then done */
+ } while (len2 != 0);
+
+ /* return combined crc */
+ crc1 ^= crc2;
+ return crc1;
+}
+
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off_t len2;
+{
+ return crc32_combine_(crc1, crc2, len2);
+}
+
+uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off64_t len2;
+{
+ return crc32_combine_(crc1, crc2, len2);
+}
diff --git a/libs/ext/zlib/crc32.h b/libs/ext/zlib/crc32.h
new file mode 100644
index 0000000..9e0c778
--- /dev/null
+++ b/libs/ext/zlib/crc32.h
@@ -0,0 +1,441 @@
+/* crc32.h -- tables for rapid CRC calculation
+ * Generated automatically by crc32.c
+ */
+
+local const z_crc_t FAR crc_table[TBLS][256] =
+{
+ {
+ 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
+ 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
+ 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
+ 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
+ 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
+ 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
+ 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
+ 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
+ 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
+ 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
+ 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
+ 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
+ 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
+ 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
+ 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
+ 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
+ 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
+ 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
+ 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
+ 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
+ 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
+ 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
+ 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
+ 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
+ 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
+ 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
+ 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
+ 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
+ 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
+ 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
+ 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
+ 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
+ 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
+ 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
+ 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
+ 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
+ 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
+ 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
+ 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
+ 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
+ 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
+ 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
+ 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
+ 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
+ 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
+ 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
+ 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
+ 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
+ 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
+ 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
+ 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
+ 0x2d02ef8dUL
+#ifdef BYFOUR
+ },
+ {
+ 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
+ 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
+ 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
+ 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
+ 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
+ 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
+ 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
+ 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
+ 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
+ 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
+ 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
+ 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
+ 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
+ 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
+ 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
+ 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
+ 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
+ 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
+ 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
+ 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
+ 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
+ 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
+ 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
+ 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
+ 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
+ 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
+ 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
+ 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
+ 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
+ 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
+ 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
+ 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
+ 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
+ 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
+ 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
+ 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
+ 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
+ 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
+ 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
+ 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
+ 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
+ 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
+ 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
+ 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
+ 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
+ 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
+ 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
+ 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
+ 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
+ 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
+ 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
+ 0x9324fd72UL
+ },
+ {
+ 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
+ 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
+ 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
+ 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
+ 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
+ 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
+ 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
+ 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
+ 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
+ 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
+ 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
+ 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
+ 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
+ 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
+ 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
+ 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
+ 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
+ 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
+ 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
+ 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
+ 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
+ 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
+ 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
+ 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
+ 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
+ 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
+ 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
+ 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
+ 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
+ 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
+ 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
+ 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
+ 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
+ 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
+ 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
+ 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
+ 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
+ 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
+ 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
+ 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
+ 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
+ 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
+ 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
+ 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
+ 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
+ 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
+ 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
+ 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
+ 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
+ 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
+ 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
+ 0xbe9834edUL
+ },
+ {
+ 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
+ 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
+ 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
+ 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
+ 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
+ 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
+ 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
+ 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
+ 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
+ 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
+ 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
+ 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
+ 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
+ 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
+ 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
+ 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
+ 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
+ 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
+ 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
+ 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
+ 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
+ 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
+ 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
+ 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
+ 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
+ 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
+ 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
+ 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
+ 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
+ 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
+ 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
+ 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
+ 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
+ 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
+ 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
+ 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
+ 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
+ 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
+ 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
+ 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
+ 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
+ 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
+ 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
+ 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
+ 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
+ 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
+ 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
+ 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
+ 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
+ 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
+ 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
+ 0xde0506f1UL
+ },
+ {
+ 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
+ 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
+ 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
+ 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
+ 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
+ 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
+ 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
+ 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
+ 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
+ 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
+ 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
+ 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
+ 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
+ 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
+ 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
+ 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
+ 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
+ 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
+ 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
+ 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
+ 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
+ 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
+ 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
+ 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
+ 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
+ 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
+ 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
+ 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
+ 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
+ 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
+ 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
+ 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
+ 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
+ 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
+ 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
+ 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
+ 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
+ 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
+ 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
+ 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
+ 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
+ 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
+ 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
+ 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
+ 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
+ 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
+ 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
+ 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
+ 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
+ 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
+ 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
+ 0x8def022dUL
+ },
+ {
+ 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
+ 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
+ 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
+ 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
+ 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
+ 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
+ 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
+ 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
+ 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
+ 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
+ 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
+ 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
+ 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
+ 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
+ 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
+ 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
+ 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
+ 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
+ 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
+ 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
+ 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
+ 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
+ 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
+ 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
+ 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
+ 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
+ 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
+ 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
+ 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
+ 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
+ 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
+ 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
+ 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
+ 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
+ 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
+ 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
+ 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
+ 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
+ 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
+ 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
+ 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
+ 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
+ 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
+ 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
+ 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
+ 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
+ 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
+ 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
+ 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
+ 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
+ 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
+ 0x72fd2493UL
+ },
+ {
+ 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
+ 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
+ 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
+ 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
+ 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
+ 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
+ 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
+ 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
+ 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
+ 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
+ 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
+ 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
+ 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
+ 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
+ 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
+ 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
+ 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
+ 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
+ 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
+ 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
+ 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
+ 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
+ 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
+ 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
+ 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
+ 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
+ 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
+ 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
+ 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
+ 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
+ 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
+ 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
+ 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
+ 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
+ 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
+ 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
+ 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
+ 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
+ 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
+ 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
+ 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
+ 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
+ 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
+ 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
+ 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
+ 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
+ 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
+ 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
+ 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
+ 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
+ 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
+ 0xed3498beUL
+ },
+ {
+ 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
+ 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
+ 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
+ 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
+ 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
+ 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
+ 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
+ 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
+ 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
+ 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
+ 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
+ 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
+ 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
+ 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
+ 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
+ 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
+ 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
+ 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
+ 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
+ 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
+ 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
+ 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
+ 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
+ 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
+ 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
+ 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
+ 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
+ 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
+ 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
+ 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
+ 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
+ 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
+ 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
+ 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
+ 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
+ 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
+ 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
+ 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
+ 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
+ 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
+ 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
+ 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
+ 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
+ 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
+ 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
+ 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
+ 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
+ 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
+ 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
+ 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
+ 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
+ 0xf10605deUL
+#endif
+ }
+};
diff --git a/libs/ext/zlib/deflate.c b/libs/ext/zlib/deflate.c
new file mode 100644
index 0000000..9e4c2cb
--- /dev/null
+++ b/libs/ext/zlib/deflate.c
@@ -0,0 +1,1965 @@
+/* deflate.c -- compress data using the deflation algorithm
+ * Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * ALGORITHM
+ *
+ * The "deflation" process depends on being able to identify portions
+ * of the input text which are identical to earlier input (within a
+ * sliding window trailing behind the input currently being processed).
+ *
+ * The most straightforward technique turns out to be the fastest for
+ * most input files: try all possible matches and select the longest.
+ * The key feature of this algorithm is that insertions into the string
+ * dictionary are very simple and thus fast, and deletions are avoided
+ * completely. Insertions are performed at each input character, whereas
+ * string matches are performed only when the previous match ends. So it
+ * is preferable to spend more time in matches to allow very fast string
+ * insertions and avoid deletions. The matching algorithm for small
+ * strings is inspired from that of Rabin & Karp. A brute force approach
+ * is used to find longer strings when a small match has been found.
+ * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
+ * (by Leonid Broukhis).
+ * A previous version of this file used a more sophisticated algorithm
+ * (by Fiala and Greene) which is guaranteed to run in linear amortized
+ * time, but has a larger average cost, uses more memory and is patented.
+ * However the F&G algorithm may be faster for some highly redundant
+ * files if the parameter max_chain_length (described below) is too large.
+ *
+ * ACKNOWLEDGEMENTS
+ *
+ * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
+ * I found it in 'freeze' written by Leonid Broukhis.
+ * Thanks to many people for bug reports and testing.
+ *
+ * REFERENCES
+ *
+ * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
+ * Available in http://tools.ietf.org/html/rfc1951
+ *
+ * A description of the Rabin and Karp algorithm is given in the book
+ * "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
+ *
+ * Fiala,E.R., and Greene,D.H.
+ * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
+ *
+ */
+
+/* @(#) $Id$ */
+
+#include "deflate.h"
+
+const char deflate_copyright[] =
+ " deflate 1.2.7 Copyright 1995-2012 Jean-loup Gailly and Mark Adler ";
+/*
+ If you use the zlib library in a product, an acknowledgment is welcome
+ in the documentation of your product. If for some reason you cannot
+ include such an acknowledgment, I would appreciate that you keep this
+ copyright string in the executable of your product.
+ */
+
+/* ===========================================================================
+ * Function prototypes.
+ */
+typedef enum {
+ need_more, /* block not completed, need more input or more output */
+ block_done, /* block flush performed */
+ finish_started, /* finish started, need only more output at next deflate */
+ finish_done /* finish done, accept no more input or output */
+} block_state;
+
+typedef block_state (*compress_func) OF((deflate_state *s, int flush));
+/* Compression function. Returns the block state after the call. */
+
+local void fill_window OF((deflate_state *s));
+local block_state deflate_stored OF((deflate_state *s, int flush));
+local block_state deflate_fast OF((deflate_state *s, int flush));
+#ifndef FASTEST
+local block_state deflate_slow OF((deflate_state *s, int flush));
+#endif
+local block_state deflate_rle OF((deflate_state *s, int flush));
+local block_state deflate_huff OF((deflate_state *s, int flush));
+local void lm_init OF((deflate_state *s));
+local void putShortMSB OF((deflate_state *s, uInt b));
+local void flush_pending OF((z_streamp strm));
+local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
+#ifdef ASMV
+ void match_init OF((void)); /* asm code initialization */
+ uInt longest_match OF((deflate_state *s, IPos cur_match));
+#else
+local uInt longest_match OF((deflate_state *s, IPos cur_match));
+#endif
+
+#ifdef DEBUG
+local void check_match OF((deflate_state *s, IPos start, IPos match,
+ int length));
+#endif
+
+/* ===========================================================================
+ * Local data
+ */
+
+#define NIL 0
+/* Tail of hash chains */
+
+#ifndef TOO_FAR
+# define TOO_FAR 4096
+#endif
+/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
+
+/* Values for max_lazy_match, good_match and max_chain_length, depending on
+ * the desired pack level (0..9). The values given below have been tuned to
+ * exclude worst case performance for pathological files. Better values may be
+ * found for specific files.
+ */
+typedef struct config_s {
+ ush good_length; /* reduce lazy search above this match length */
+ ush max_lazy; /* do not perform lazy search above this match length */
+ ush nice_length; /* quit search above this match length */
+ ush max_chain;
+ compress_func func;
+} config;
+
+#ifdef FASTEST
+local const config configuration_table[2] = {
+/* good lazy nice chain */
+/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
+/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */
+#else
+local const config configuration_table[10] = {
+/* good lazy nice chain */
+/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
+/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */
+/* 2 */ {4, 5, 16, 8, deflate_fast},
+/* 3 */ {4, 6, 32, 32, deflate_fast},
+
+/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */
+/* 5 */ {8, 16, 32, 32, deflate_slow},
+/* 6 */ {8, 16, 128, 128, deflate_slow},
+/* 7 */ {8, 32, 128, 256, deflate_slow},
+/* 8 */ {32, 128, 258, 1024, deflate_slow},
+/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
+#endif
+
+/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
+ * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
+ * meaning.
+ */
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
+#ifndef NO_DUMMY_DECL
+struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
+#endif
+
+/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
+#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+
+/* ===========================================================================
+ * Update a hash value with the given input byte
+ * IN assertion: all calls to to UPDATE_HASH are made with consecutive
+ * input characters, so that a running hash key can be computed from the
+ * previous key instead of complete recalculation each time.
+ */
+#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
+
+
+/* ===========================================================================
+ * Insert string str in the dictionary and set match_head to the previous head
+ * of the hash chain (the most recent string with same hash key). Return
+ * the previous length of the hash chain.
+ * If this file is compiled with -DFASTEST, the compression level is forced
+ * to 1, and no hash chains are maintained.
+ * IN assertion: all calls to to INSERT_STRING are made with consecutive
+ * input characters and the first MIN_MATCH bytes of str are valid
+ * (except for the last MIN_MATCH-1 bytes of the input file).
+ */
+#ifdef FASTEST
+#define INSERT_STRING(s, str, match_head) \
+ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+ match_head = s->head[s->ins_h], \
+ s->head[s->ins_h] = (Pos)(str))
+#else
+#define INSERT_STRING(s, str, match_head) \
+ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+ match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
+ s->head[s->ins_h] = (Pos)(str))
+#endif
+
+/* ===========================================================================
+ * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
+ * prev[] will be initialized on the fly.
+ */
+#define CLEAR_HASH(s) \
+ s->head[s->hash_size-1] = NIL; \
+ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+
+/* ========================================================================= */
+int ZEXPORT deflateInit_(strm, level, version, stream_size)
+ z_streamp strm;
+ int level;
+ const char *version;
+ int stream_size;
+{
+ return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
+ Z_DEFAULT_STRATEGY, version, stream_size);
+ /* To do: ignore strm->next_in if we use it as window */
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
+ version, stream_size)
+ z_streamp strm;
+ int level;
+ int method;
+ int windowBits;
+ int memLevel;
+ int strategy;
+ const char *version;
+ int stream_size;
+{
+ deflate_state *s;
+ int wrap = 1;
+ static const char my_version[] = ZLIB_VERSION;
+
+ ushf *overlay;
+ /* We overlay pending_buf and d_buf+l_buf. This works since the average
+ * output size for (length,distance) codes is <= 24 bits.
+ */
+
+ if (version == Z_NULL || version[0] != my_version[0] ||
+ stream_size != sizeof(z_stream)) {
+ return Z_VERSION_ERROR;
+ }
+ if (strm == Z_NULL) return Z_STREAM_ERROR;
+
+ strm->msg = Z_NULL;
+ if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zalloc = zcalloc;
+ strm->opaque = (voidpf)0;
+#endif
+ }
+ if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zfree = zcfree;
+#endif
+
+#ifdef FASTEST
+ if (level != 0) level = 1;
+#else
+ if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+
+ if (windowBits < 0) { /* suppress zlib wrapper */
+ wrap = 0;
+ windowBits = -windowBits;
+ }
+#ifdef GZIP
+ else if (windowBits > 15) {
+ wrap = 2; /* write gzip wrapper instead */
+ windowBits -= 16;
+ }
+#endif
+ if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
+ windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+ strategy < 0 || strategy > Z_FIXED) {
+ return Z_STREAM_ERROR;
+ }
+ if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
+ s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
+ if (s == Z_NULL) return Z_MEM_ERROR;
+ strm->state = (struct internal_state FAR *)s;
+ s->strm = strm;
+
+ s->wrap = wrap;
+ s->gzhead = Z_NULL;
+ s->w_bits = windowBits;
+ s->w_size = 1 << s->w_bits;
+ s->w_mask = s->w_size - 1;
+
+ s->hash_bits = memLevel + 7;
+ s->hash_size = 1 << s->hash_bits;
+ s->hash_mask = s->hash_size - 1;
+ s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
+
+ s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
+ s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos));
+ s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos));
+
+ s->high_water = 0; /* nothing written to s->window yet */
+
+ s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+ overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
+ s->pending_buf = (uchf *) overlay;
+ s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+
+ if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
+ s->pending_buf == Z_NULL) {
+ s->status = FINISH_STATE;
+ strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
+ deflateEnd (strm);
+ return Z_MEM_ERROR;
+ }
+ s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
+ s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+
+ s->level = level;
+ s->strategy = strategy;
+ s->method = (Byte)method;
+
+ return deflateReset(strm);
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
+ z_streamp strm;
+ const Bytef *dictionary;
+ uInt dictLength;
+{
+ deflate_state *s;
+ uInt str, n;
+ int wrap;
+ unsigned avail;
+ unsigned char *next;
+
+ if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+ return Z_STREAM_ERROR;
+ s = strm->state;
+ wrap = s->wrap;
+ if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
+ return Z_STREAM_ERROR;
+
+ /* when using zlib wrappers, compute Adler-32 for provided dictionary */
+ if (wrap == 1)
+ strm->adler = adler32(strm->adler, dictionary, dictLength);
+ s->wrap = 0; /* avoid computing Adler-32 in read_buf */
+
+ /* if dictionary would fill window, just replace the history */
+ if (dictLength >= s->w_size) {
+ if (wrap == 0) { /* already empty otherwise */
+ CLEAR_HASH(s);
+ s->strstart = 0;
+ s->block_start = 0L;
+ s->insert = 0;
+ }
+ dictionary += dictLength - s->w_size; /* use the tail */
+ dictLength = s->w_size;
+ }
+
+ /* insert dictionary into window and hash */
+ avail = strm->avail_in;
+ next = strm->next_in;
+ strm->avail_in = dictLength;
+ strm->next_in = (Bytef *)dictionary;
+ fill_window(s);
+ while (s->lookahead >= MIN_MATCH) {
+ str = s->strstart;
+ n = s->lookahead - (MIN_MATCH-1);
+ do {
+ UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+ s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+ s->head[s->ins_h] = (Pos)str;
+ str++;
+ } while (--n);
+ s->strstart = str;
+ s->lookahead = MIN_MATCH-1;
+ fill_window(s);
+ }
+ s->strstart += s->lookahead;
+ s->block_start = (long)s->strstart;
+ s->insert = s->lookahead;
+ s->lookahead = 0;
+ s->match_length = s->prev_length = MIN_MATCH-1;
+ s->match_available = 0;
+ strm->next_in = next;
+ strm->avail_in = avail;
+ s->wrap = wrap;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateResetKeep (strm)
+ z_streamp strm;
+{
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+ return Z_STREAM_ERROR;
+ }
+
+ strm->total_in = strm->total_out = 0;
+ strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
+ strm->data_type = Z_UNKNOWN;
+
+ s = (deflate_state *)strm->state;
+ s->pending = 0;
+ s->pending_out = s->pending_buf;
+
+ if (s->wrap < 0) {
+ s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
+ }
+ s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+ strm->adler =
+#ifdef GZIP
+ s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
+#endif
+ adler32(0L, Z_NULL, 0);
+ s->last_flush = Z_NO_FLUSH;
+
+ _tr_init(s);
+
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateReset (strm)
+ z_streamp strm;
+{
+ int ret;
+
+ ret = deflateResetKeep(strm);
+ if (ret == Z_OK)
+ lm_init(strm->state);
+ return ret;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetHeader (strm, head)
+ z_streamp strm;
+ gz_headerp head;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+ strm->state->gzhead = head;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePending (strm, pending, bits)
+ unsigned *pending;
+ int *bits;
+ z_streamp strm;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (pending != Z_NULL)
+ *pending = strm->state->pending;
+ if (bits != Z_NULL)
+ *bits = strm->state->bi_valid;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePrime (strm, bits, value)
+ z_streamp strm;
+ int bits;
+ int value;
+{
+ deflate_state *s;
+ int put;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+ if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+ return Z_BUF_ERROR;
+ do {
+ put = Buf_size - s->bi_valid;
+ if (put > bits)
+ put = bits;
+ s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
+ s->bi_valid += put;
+ _tr_flush_bits(s);
+ value >>= put;
+ bits -= put;
+ } while (bits);
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateParams(strm, level, strategy)
+ z_streamp strm;
+ int level;
+ int strategy;
+{
+ deflate_state *s;
+ compress_func func;
+ int err = Z_OK;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+
+#ifdef FASTEST
+ if (level != 0) level = 1;
+#else
+ if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+ if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
+ return Z_STREAM_ERROR;
+ }
+ func = configuration_table[s->level].func;
+
+ if ((strategy != s->strategy || func != configuration_table[level].func) &&
+ strm->total_in != 0) {
+ /* Flush the last buffer: */
+ err = deflate(strm, Z_BLOCK);
+ }
+ if (s->level != level) {
+ s->level = level;
+ s->max_lazy_match = configuration_table[level].max_lazy;
+ s->good_match = configuration_table[level].good_length;
+ s->nice_match = configuration_table[level].nice_length;
+ s->max_chain_length = configuration_table[level].max_chain;
+ }
+ s->strategy = strategy;
+ return err;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
+ z_streamp strm;
+ int good_length;
+ int max_lazy;
+ int nice_length;
+ int max_chain;
+{
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+ s->good_match = good_length;
+ s->max_lazy_match = max_lazy;
+ s->nice_match = nice_length;
+ s->max_chain_length = max_chain;
+ return Z_OK;
+}
+
+/* =========================================================================
+ * For the default windowBits of 15 and memLevel of 8, this function returns
+ * a close to exact, as well as small, upper bound on the compressed size.
+ * They are coded as constants here for a reason--if the #define's are
+ * changed, then this function needs to be changed as well. The return
+ * value for 15 and 8 only works for those exact settings.
+ *
+ * For any setting other than those defaults for windowBits and memLevel,
+ * the value returned is a conservative worst case for the maximum expansion
+ * resulting from using fixed blocks instead of stored blocks, which deflate
+ * can emit on compressed data for some combinations of the parameters.
+ *
+ * This function could be more sophisticated to provide closer upper bounds for
+ * every combination of windowBits and memLevel. But even the conservative
+ * upper bound of about 14% expansion does not seem onerous for output buffer
+ * allocation.
+ */
+uLong ZEXPORT deflateBound(strm, sourceLen)
+ z_streamp strm;
+ uLong sourceLen;
+{
+ deflate_state *s;
+ uLong complen, wraplen;
+ Bytef *str;
+
+ /* conservative upper bound for compressed data */
+ complen = sourceLen +
+ ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
+
+ /* if can't get parameters, return conservative bound plus zlib wrapper */
+ if (strm == Z_NULL || strm->state == Z_NULL)
+ return complen + 6;
+
+ /* compute wrapper length */
+ s = strm->state;
+ switch (s->wrap) {
+ case 0: /* raw deflate */
+ wraplen = 0;
+ break;
+ case 1: /* zlib wrapper */
+ wraplen = 6 + (s->strstart ? 4 : 0);
+ break;
+ case 2: /* gzip wrapper */
+ wraplen = 18;
+ if (s->gzhead != Z_NULL) { /* user-supplied gzip header */
+ if (s->gzhead->extra != Z_NULL)
+ wraplen += 2 + s->gzhead->extra_len;
+ str = s->gzhead->name;
+ if (str != Z_NULL)
+ do {
+ wraplen++;
+ } while (*str++);
+ str = s->gzhead->comment;
+ if (str != Z_NULL)
+ do {
+ wraplen++;
+ } while (*str++);
+ if (s->gzhead->hcrc)
+ wraplen += 2;
+ }
+ break;
+ default: /* for compiler happiness */
+ wraplen = 6;
+ }
+
+ /* if not default parameters, return conservative bound */
+ if (s->w_bits != 15 || s->hash_bits != 8 + 7)
+ return complen + wraplen;
+
+ /* default settings: return tight bound for that case */
+ return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+ (sourceLen >> 25) + 13 - 6 + wraplen;
+}
+
+/* =========================================================================
+ * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+ * IN assertion: the stream state is correct and there is enough room in
+ * pending_buf.
+ */
+local void putShortMSB (s, b)
+ deflate_state *s;
+ uInt b;
+{
+ put_byte(s, (Byte)(b >> 8));
+ put_byte(s, (Byte)(b & 0xff));
+}
+
+/* =========================================================================
+ * Flush as much pending output as possible. All deflate() output goes
+ * through this function so some applications may wish to modify it
+ * to avoid allocating a large strm->next_out buffer and copying into it.
+ * (See also read_buf()).
+ */
+local void flush_pending(strm)
+ z_streamp strm;
+{
+ unsigned len;
+ deflate_state *s = strm->state;
+
+ _tr_flush_bits(s);
+ len = s->pending;
+ if (len > strm->avail_out) len = strm->avail_out;
+ if (len == 0) return;
+
+ zmemcpy(strm->next_out, s->pending_out, len);
+ strm->next_out += len;
+ s->pending_out += len;
+ strm->total_out += len;
+ strm->avail_out -= len;
+ s->pending -= len;
+ if (s->pending == 0) {
+ s->pending_out = s->pending_buf;
+ }
+}
+
+/* ========================================================================= */
+int ZEXPORT deflate (strm, flush)
+ z_streamp strm;
+ int flush;
+{
+ int old_flush; /* value of flush param for previous deflate call */
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL ||
+ flush > Z_BLOCK || flush < 0) {
+ return Z_STREAM_ERROR;
+ }
+ s = strm->state;
+
+ if (strm->next_out == Z_NULL ||
+ (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+ (s->status == FINISH_STATE && flush != Z_FINISH)) {
+ ERR_RETURN(strm, Z_STREAM_ERROR);
+ }
+ if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
+
+ s->strm = strm; /* just in case */
+ old_flush = s->last_flush;
+ s->last_flush = flush;
+
+ /* Write the header */
+ if (s->status == INIT_STATE) {
+#ifdef GZIP
+ if (s->wrap == 2) {
+ strm->adler = crc32(0L, Z_NULL, 0);
+ put_byte(s, 31);
+ put_byte(s, 139);
+ put_byte(s, 8);
+ if (s->gzhead == Z_NULL) {
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, OS_CODE);
+ s->status = BUSY_STATE;
+ }
+ else {
+ put_byte(s, (s->gzhead->text ? 1 : 0) +
+ (s->gzhead->hcrc ? 2 : 0) +
+ (s->gzhead->extra == Z_NULL ? 0 : 4) +
+ (s->gzhead->name == Z_NULL ? 0 : 8) +
+ (s->gzhead->comment == Z_NULL ? 0 : 16)
+ );
+ put_byte(s, (Byte)(s->gzhead->time & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, s->gzhead->os & 0xff);
+ if (s->gzhead->extra != Z_NULL) {
+ put_byte(s, s->gzhead->extra_len & 0xff);
+ put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
+ }
+ if (s->gzhead->hcrc)
+ strm->adler = crc32(strm->adler, s->pending_buf,
+ s->pending);
+ s->gzindex = 0;
+ s->status = EXTRA_STATE;
+ }
+ }
+ else
+#endif
+ {
+ uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+ uInt level_flags;
+
+ if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+ level_flags = 0;
+ else if (s->level < 6)
+ level_flags = 1;
+ else if (s->level == 6)
+ level_flags = 2;
+ else
+ level_flags = 3;
+ header |= (level_flags << 6);
+ if (s->strstart != 0) header |= PRESET_DICT;
+ header += 31 - (header % 31);
+
+ s->status = BUSY_STATE;
+ putShortMSB(s, header);
+
+ /* Save the adler32 of the preset dictionary: */
+ if (s->strstart != 0) {
+ putShortMSB(s, (uInt)(strm->adler >> 16));
+ putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ }
+ strm->adler = adler32(0L, Z_NULL, 0);
+ }
+ }
+#ifdef GZIP
+ if (s->status == EXTRA_STATE) {
+ if (s->gzhead->extra != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+
+ while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size)
+ break;
+ }
+ put_byte(s, s->gzhead->extra[s->gzindex]);
+ s->gzindex++;
+ }
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (s->gzindex == s->gzhead->extra_len) {
+ s->gzindex = 0;
+ s->status = NAME_STATE;
+ }
+ }
+ else
+ s->status = NAME_STATE;
+ }
+ if (s->status == NAME_STATE) {
+ if (s->gzhead->name != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+ int val;
+
+ do {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ val = s->gzhead->name[s->gzindex++];
+ put_byte(s, val);
+ } while (val != 0);
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (val == 0) {
+ s->gzindex = 0;
+ s->status = COMMENT_STATE;
+ }
+ }
+ else
+ s->status = COMMENT_STATE;
+ }
+ if (s->status == COMMENT_STATE) {
+ if (s->gzhead->comment != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+ int val;
+
+ do {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ val = s->gzhead->comment[s->gzindex++];
+ put_byte(s, val);
+ } while (val != 0);
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (val == 0)
+ s->status = HCRC_STATE;
+ }
+ else
+ s->status = HCRC_STATE;
+ }
+ if (s->status == HCRC_STATE) {
+ if (s->gzhead->hcrc) {
+ if (s->pending + 2 > s->pending_buf_size)
+ flush_pending(strm);
+ if (s->pending + 2 <= s->pending_buf_size) {
+ put_byte(s, (Byte)(strm->adler & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+ strm->adler = crc32(0L, Z_NULL, 0);
+ s->status = BUSY_STATE;
+ }
+ }
+ else
+ s->status = BUSY_STATE;
+ }
+#endif
+
+ /* Flush as much pending output as possible */
+ if (s->pending != 0) {
+ flush_pending(strm);
+ if (strm->avail_out == 0) {
+ /* Since avail_out is 0, deflate will be called again with
+ * more output space, but possibly with both pending and
+ * avail_in equal to zero. There won't be anything to do,
+ * but this is not an error situation so make sure we
+ * return OK instead of BUF_ERROR at next call of deflate:
+ */
+ s->last_flush = -1;
+ return Z_OK;
+ }
+
+ /* Make sure there is something to do and avoid duplicate consecutive
+ * flushes. For repeated and useless calls with Z_FINISH, we keep
+ * returning Z_STREAM_END instead of Z_BUF_ERROR.
+ */
+ } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
+ flush != Z_FINISH) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
+ /* User must not provide more input after the first FINISH: */
+ if (s->status == FINISH_STATE && strm->avail_in != 0) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
+ /* Start a new block or continue the current one.
+ */
+ if (strm->avail_in != 0 || s->lookahead != 0 ||
+ (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
+ block_state bstate;
+
+ bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+ (s->strategy == Z_RLE ? deflate_rle(s, flush) :
+ (*(configuration_table[s->level].func))(s, flush));
+
+ if (bstate == finish_started || bstate == finish_done) {
+ s->status = FINISH_STATE;
+ }
+ if (bstate == need_more || bstate == finish_started) {
+ if (strm->avail_out == 0) {
+ s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
+ }
+ return Z_OK;
+ /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+ * of deflate should use the same flush parameter to make sure
+ * that the flush is complete. So we don't have to output an
+ * empty block here, this will be done at next call. This also
+ * ensures that for a very small output buffer, we emit at most
+ * one empty block.
+ */
+ }
+ if (bstate == block_done) {
+ if (flush == Z_PARTIAL_FLUSH) {
+ _tr_align(s);
+ } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
+ _tr_stored_block(s, (char*)0, 0L, 0);
+ /* For a full flush, this empty block will be recognized
+ * as a special marker by inflate_sync().
+ */
+ if (flush == Z_FULL_FLUSH) {
+ CLEAR_HASH(s); /* forget history */
+ if (s->lookahead == 0) {
+ s->strstart = 0;
+ s->block_start = 0L;
+ s->insert = 0;
+ }
+ }
+ }
+ flush_pending(strm);
+ if (strm->avail_out == 0) {
+ s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+ return Z_OK;
+ }
+ }
+ }
+ Assert(strm->avail_out > 0, "bug2");
+
+ if (flush != Z_FINISH) return Z_OK;
+ if (s->wrap <= 0) return Z_STREAM_END;
+
+ /* Write the trailer */
+#ifdef GZIP
+ if (s->wrap == 2) {
+ put_byte(s, (Byte)(strm->adler & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
+ put_byte(s, (Byte)(strm->total_in & 0xff));
+ put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
+ put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
+ put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
+ }
+ else
+#endif
+ {
+ putShortMSB(s, (uInt)(strm->adler >> 16));
+ putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ }
+ flush_pending(strm);
+ /* If avail_out is zero, the application will call deflate again
+ * to flush the rest.
+ */
+ if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
+ return s->pending != 0 ? Z_OK : Z_STREAM_END;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateEnd (strm)
+ z_streamp strm;
+{
+ int status;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ status = strm->state->status;
+ if (status != INIT_STATE &&
+ status != EXTRA_STATE &&
+ status != NAME_STATE &&
+ status != COMMENT_STATE &&
+ status != HCRC_STATE &&
+ status != BUSY_STATE &&
+ status != FINISH_STATE) {
+ return Z_STREAM_ERROR;
+ }
+
+ /* Deallocate in reverse order of allocations: */
+ TRY_FREE(strm, strm->state->pending_buf);
+ TRY_FREE(strm, strm->state->head);
+ TRY_FREE(strm, strm->state->prev);
+ TRY_FREE(strm, strm->state->window);
+
+ ZFREE(strm, strm->state);
+ strm->state = Z_NULL;
+
+ return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
+}
+
+/* =========================================================================
+ * Copy the source state to the destination state.
+ * To simplify the source, this is not supported for 16-bit MSDOS (which
+ * doesn't have enough memory anyway to duplicate compression states).
+ */
+int ZEXPORT deflateCopy (dest, source)
+ z_streamp dest;
+ z_streamp source;
+{
+#ifdef MAXSEG_64K
+ return Z_STREAM_ERROR;
+#else
+ deflate_state *ds;
+ deflate_state *ss;
+ ushf *overlay;
+
+
+ if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+ return Z_STREAM_ERROR;
+ }
+
+ ss = source->state;
+
+ zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+
+ ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
+ if (ds == Z_NULL) return Z_MEM_ERROR;
+ dest->state = (struct internal_state FAR *) ds;
+ zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
+ ds->strm = dest;
+
+ ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
+ ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
+ ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
+ overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
+ ds->pending_buf = (uchf *) overlay;
+
+ if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
+ ds->pending_buf == Z_NULL) {
+ deflateEnd (dest);
+ return Z_MEM_ERROR;
+ }
+ /* following zmemcpy do not work for 16-bit MSDOS */
+ zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
+ zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
+ zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
+ zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
+
+ ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
+ ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
+ ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+
+ ds->l_desc.dyn_tree = ds->dyn_ltree;
+ ds->d_desc.dyn_tree = ds->dyn_dtree;
+ ds->bl_desc.dyn_tree = ds->bl_tree;
+
+ return Z_OK;
+#endif /* MAXSEG_64K */
+}
+
+/* ===========================================================================
+ * Read a new buffer from the current input stream, update the adler32
+ * and total number of bytes read. All deflate() input goes through
+ * this function so some applications may wish to modify it to avoid
+ * allocating a large strm->next_in buffer and copying from it.
+ * (See also flush_pending()).
+ */
+local int read_buf(strm, buf, size)
+ z_streamp strm;
+ Bytef *buf;
+ unsigned size;
+{
+ unsigned len = strm->avail_in;
+
+ if (len > size) len = size;
+ if (len == 0) return 0;
+
+ strm->avail_in -= len;
+
+ zmemcpy(buf, strm->next_in, len);
+ if (strm->state->wrap == 1) {
+ strm->adler = adler32(strm->adler, buf, len);
+ }
+#ifdef GZIP
+ else if (strm->state->wrap == 2) {
+ strm->adler = crc32(strm->adler, buf, len);
+ }
+#endif
+ strm->next_in += len;
+ strm->total_in += len;
+
+ return (int)len;
+}
+
+/* ===========================================================================
+ * Initialize the "longest match" routines for a new zlib stream
+ */
+local void lm_init (s)
+ deflate_state *s;
+{
+ s->window_size = (ulg)2L*s->w_size;
+
+ CLEAR_HASH(s);
+
+ /* Set the default configuration parameters:
+ */
+ s->max_lazy_match = configuration_table[s->level].max_lazy;
+ s->good_match = configuration_table[s->level].good_length;
+ s->nice_match = configuration_table[s->level].nice_length;
+ s->max_chain_length = configuration_table[s->level].max_chain;
+
+ s->strstart = 0;
+ s->block_start = 0L;
+ s->lookahead = 0;
+ s->insert = 0;
+ s->match_length = s->prev_length = MIN_MATCH-1;
+ s->match_available = 0;
+ s->ins_h = 0;
+#ifndef FASTEST
+#ifdef ASMV
+ match_init(); /* initialize the asm code */
+#endif
+#endif
+}
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ * OUT assertion: the match length is not greater than s->lookahead.
+ */
+#ifndef ASMV
+/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
+ * match.S. The code will be functionally equivalent.
+ */
+local uInt longest_match(s, cur_match)
+ deflate_state *s;
+ IPos cur_match; /* current match */
+{
+ unsigned chain_length = s->max_chain_length;/* max hash chain length */
+ register Bytef *scan = s->window + s->strstart; /* current string */
+ register Bytef *match; /* matched string */
+ register int len; /* length of current match */
+ int best_len = s->prev_length; /* best match length so far */
+ int nice_match = s->nice_match; /* stop if match long enough */
+ IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+ s->strstart - (IPos)MAX_DIST(s) : NIL;
+ /* Stop when cur_match becomes <= limit. To simplify the code,
+ * we prevent matches with the string of window index 0.
+ */
+ Posf *prev = s->prev;
+ uInt wmask = s->w_mask;
+
+#ifdef UNALIGNED_OK
+ /* Compare two bytes at a time. Note: this is not always beneficial.
+ * Try with and without -DUNALIGNED_OK to check.
+ */
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
+ register ush scan_start = *(ushf*)scan;
+ register ush scan_end = *(ushf*)(scan+best_len-1);
+#else
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+ register Byte scan_end1 = scan[best_len-1];
+ register Byte scan_end = scan[best_len];
+#endif
+
+ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+ * It is easy to get rid of this optimization if necessary.
+ */
+ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+ /* Do not waste too much time if we already have a good match: */
+ if (s->prev_length >= s->good_match) {
+ chain_length >>= 2;
+ }
+ /* Do not look for matches beyond the end of the input. This is necessary
+ * to make deflate deterministic.
+ */
+ if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+ Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+ do {
+ Assert(cur_match < s->strstart, "no future");
+ match = s->window + cur_match;
+
+ /* Skip to next match if the match length cannot increase
+ * or if the match length is less than 2. Note that the checks below
+ * for insufficient lookahead only occur occasionally for performance
+ * reasons. Therefore uninitialized memory will be accessed, and
+ * conditional jumps will be made that depend on those values.
+ * However the length of the match is limited to the lookahead, so
+ * the output of deflate is not affected by the uninitialized values.
+ */
+#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
+ /* This code assumes sizeof(unsigned short) == 2. Do not use
+ * UNALIGNED_OK if your compiler uses a different size.
+ */
+ if (*(ushf*)(match+best_len-1) != scan_end ||
+ *(ushf*)match != scan_start) continue;
+
+ /* It is not necessary to compare scan[2] and match[2] since they are
+ * always equal when the other bytes match, given that the hash keys
+ * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
+ * strstart+3, +5, ... up to strstart+257. We check for insufficient
+ * lookahead only every 4th comparison; the 128th check will be made
+ * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
+ * necessary to put more guard bytes at the end of the window, or
+ * to check more often for insufficient lookahead.
+ */
+ Assert(scan[2] == match[2], "scan[2]?");
+ scan++, match++;
+ do {
+ } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ scan < strend);
+ /* The funny "do {}" generates better code on most compilers */
+
+ /* Here, scan <= window+strstart+257 */
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+ if (*scan == *match) scan++;
+
+ len = (MAX_MATCH - 1) - (int)(strend-scan);
+ scan = strend - (MAX_MATCH-1);
+
+#else /* UNALIGNED_OK */
+
+ if (match[best_len] != scan_end ||
+ match[best_len-1] != scan_end1 ||
+ *match != *scan ||
+ *++match != scan[1]) continue;
+
+ /* The check at best_len-1 can be removed because it will be made
+ * again later. (This heuristic is not always a win.)
+ * It is not necessary to compare scan[2] and match[2] since they
+ * are always equal when the other bytes match, given that
+ * the hash keys are equal and that HASH_BITS >= 8.
+ */
+ scan += 2, match++;
+ Assert(*scan == *match, "match[2]?");
+
+ /* We check for insufficient lookahead only every 8th comparison;
+ * the 256th check will be made at strstart+258.
+ */
+ do {
+ } while (*++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ scan < strend);
+
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+ len = MAX_MATCH - (int)(strend - scan);
+ scan = strend - MAX_MATCH;
+
+#endif /* UNALIGNED_OK */
+
+ if (len > best_len) {
+ s->match_start = cur_match;
+ best_len = len;
+ if (len >= nice_match) break;
+#ifdef UNALIGNED_OK
+ scan_end = *(ushf*)(scan+best_len-1);
+#else
+ scan_end1 = scan[best_len-1];
+ scan_end = scan[best_len];
+#endif
+ }
+ } while ((cur_match = prev[cur_match & wmask]) > limit
+ && --chain_length != 0);
+
+ if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+ return s->lookahead;
+}
+#endif /* ASMV */
+
+#else /* FASTEST */
+
+/* ---------------------------------------------------------------------------
+ * Optimized version for FASTEST only
+ */
+local uInt longest_match(s, cur_match)
+ deflate_state *s;
+ IPos cur_match; /* current match */
+{
+ register Bytef *scan = s->window + s->strstart; /* current string */
+ register Bytef *match; /* matched string */
+ register int len; /* length of current match */
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+
+ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+ * It is easy to get rid of this optimization if necessary.
+ */
+ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+ Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+ Assert(cur_match < s->strstart, "no future");
+
+ match = s->window + cur_match;
+
+ /* Return failure if the match length is less than 2:
+ */
+ if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
+
+ /* The check at best_len-1 can be removed because it will be made
+ * again later. (This heuristic is not always a win.)
+ * It is not necessary to compare scan[2] and match[2] since they
+ * are always equal when the other bytes match, given that
+ * the hash keys are equal and that HASH_BITS >= 8.
+ */
+ scan += 2, match += 2;
+ Assert(*scan == *match, "match[2]?");
+
+ /* We check for insufficient lookahead only every 8th comparison;
+ * the 256th check will be made at strstart+258.
+ */
+ do {
+ } while (*++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ scan < strend);
+
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+ len = MAX_MATCH - (int)(strend - scan);
+
+ if (len < MIN_MATCH) return MIN_MATCH - 1;
+
+ s->match_start = cur_match;
+ return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
+}
+
+#endif /* FASTEST */
+
+#ifdef DEBUG
+/* ===========================================================================
+ * Check that the match at match_start is indeed a match.
+ */
+local void check_match(s, start, match, length)
+ deflate_state *s;
+ IPos start, match;
+ int length;
+{
+ /* check that the match is indeed a match */
+ if (zmemcmp(s->window + match,
+ s->window + start, length) != EQUAL) {
+ fprintf(stderr, " start %u, match %u, length %d\n",
+ start, match, length);
+ do {
+ fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
+ } while (--length != 0);
+ z_error("invalid match");
+ }
+ if (z_verbose > 1) {
+ fprintf(stderr,"\\[%d,%d]", start-match, length);
+ do { putc(s->window[start++], stderr); } while (--length != 0);
+ }
+}
+#else
+# define check_match(s, start, match, length)
+#endif /* DEBUG */
+
+/* ===========================================================================
+ * Fill the window when the lookahead becomes insufficient.
+ * Updates strstart and lookahead.
+ *
+ * IN assertion: lookahead < MIN_LOOKAHEAD
+ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+ * At least one byte has been read, or avail_in == 0; reads are
+ * performed for at least two bytes (required for the zip translate_eol
+ * option -- not supported here).
+ */
+local void fill_window(s)
+ deflate_state *s;
+{
+ register unsigned n, m;
+ register Posf *p;
+ unsigned more; /* Amount of free space at the end of the window. */
+ uInt wsize = s->w_size;
+
+ Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
+ do {
+ more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
+
+ /* Deal with !@#$% 64K limit: */
+ if (sizeof(int) <= 2) {
+ if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+ more = wsize;
+
+ } else if (more == (unsigned)(-1)) {
+ /* Very unlikely, but possible on 16 bit machine if
+ * strstart == 0 && lookahead == 1 (input done a byte at time)
+ */
+ more--;
+ }
+ }
+
+ /* If the window is almost full and there is insufficient lookahead,
+ * move the upper half to the lower one to make room in the upper half.
+ */
+ if (s->strstart >= wsize+MAX_DIST(s)) {
+
+ zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+ s->match_start -= wsize;
+ s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
+ s->block_start -= (long) wsize;
+
+ /* Slide the hash table (could be avoided with 32 bit values
+ at the expense of memory usage). We slide even when level == 0
+ to keep the hash table consistent if we switch back to level > 0
+ later. (Using level 0 permanently is not an optimal usage of
+ zlib, so we don't care about this pathological case.)
+ */
+ n = s->hash_size;
+ p = &s->head[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m-wsize : NIL);
+ } while (--n);
+
+ n = wsize;
+#ifndef FASTEST
+ p = &s->prev[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m-wsize : NIL);
+ /* If n is not on any hash chain, prev[n] is garbage but
+ * its value will never be used.
+ */
+ } while (--n);
+#endif
+ more += wsize;
+ }
+ if (s->strm->avail_in == 0) break;
+
+ /* If there was no sliding:
+ * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+ * more == window_size - lookahead - strstart
+ * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+ * => more >= window_size - 2*WSIZE + 2
+ * In the BIG_MEM or MMAP case (not yet supported),
+ * window_size == input_size + MIN_LOOKAHEAD &&
+ * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+ * Otherwise, window_size == 2*WSIZE so more >= 2.
+ * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+ */
+ Assert(more >= 2, "more < 2");
+
+ n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
+ s->lookahead += n;
+
+ /* Initialize the hash value now that we have some input: */
+ if (s->lookahead + s->insert >= MIN_MATCH) {
+ uInt str = s->strstart - s->insert;
+ s->ins_h = s->window[str];
+ UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
+#if MIN_MATCH != 3
+ Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+ while (s->insert) {
+ UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+ s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+ s->head[s->ins_h] = (Pos)str;
+ str++;
+ s->insert--;
+ if (s->lookahead + s->insert < MIN_MATCH)
+ break;
+ }
+ }
+ /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+ * but this is not important since only literal bytes will be emitted.
+ */
+
+ } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
+
+ /* If the WIN_INIT bytes after the end of the current data have never been
+ * written, then zero those bytes in order to avoid memory check reports of
+ * the use of uninitialized (or uninitialised as Julian writes) bytes by
+ * the longest match routines. Update the high water mark for the next
+ * time through here. WIN_INIT is set to MAX_MATCH since the longest match
+ * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+ */
+ if (s->high_water < s->window_size) {
+ ulg curr = s->strstart + (ulg)(s->lookahead);
+ ulg init;
+
+ if (s->high_water < curr) {
+ /* Previous high water mark below current data -- zero WIN_INIT
+ * bytes or up to end of window, whichever is less.
+ */
+ init = s->window_size - curr;
+ if (init > WIN_INIT)
+ init = WIN_INIT;
+ zmemzero(s->window + curr, (unsigned)init);
+ s->high_water = curr + init;
+ }
+ else if (s->high_water < (ulg)curr + WIN_INIT) {
+ /* High water mark at or above current data, but below current data
+ * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+ * to end of window, whichever is less.
+ */
+ init = (ulg)curr + WIN_INIT - s->high_water;
+ if (init > s->window_size - s->high_water)
+ init = s->window_size - s->high_water;
+ zmemzero(s->window + s->high_water, (unsigned)init);
+ s->high_water += init;
+ }
+ }
+
+ Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+ "not enough room for search");
+}
+
+/* ===========================================================================
+ * Flush the current block, with given end-of-file flag.
+ * IN assertion: strstart is set to the end of the current match.
+ */
+#define FLUSH_BLOCK_ONLY(s, last) { \
+ _tr_flush_block(s, (s->block_start >= 0L ? \
+ (charf *)&s->window[(unsigned)s->block_start] : \
+ (charf *)Z_NULL), \
+ (ulg)((long)s->strstart - s->block_start), \
+ (last)); \
+ s->block_start = s->strstart; \
+ flush_pending(s->strm); \
+ Tracev((stderr,"[FLUSH]")); \
+}
+
+/* Same but force premature exit if necessary. */
+#define FLUSH_BLOCK(s, last) { \
+ FLUSH_BLOCK_ONLY(s, last); \
+ if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
+}
+
+/* ===========================================================================
+ * Copy without compression as much as possible from the input stream, return
+ * the current block state.
+ * This function does not insert new strings in the dictionary since
+ * uncompressible data is probably not useful. This function is used
+ * only for the level=0 compression option.
+ * NOTE: this function should be optimized to avoid extra copying from
+ * window to pending_buf.
+ */
+local block_state deflate_stored(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+ * to pending_buf_size, and each stored block has a 5 byte header:
+ */
+ ulg max_block_size = 0xffff;
+ ulg max_start;
+
+ if (max_block_size > s->pending_buf_size - 5) {
+ max_block_size = s->pending_buf_size - 5;
+ }
+
+ /* Copy as much as possible from input to output: */
+ for (;;) {
+ /* Fill the window as much as possible: */
+ if (s->lookahead <= 1) {
+
+ Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+ s->block_start >= (long)s->w_size, "slide too late");
+
+ fill_window(s);
+ if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+ Assert(s->block_start >= 0L, "block gone");
+
+ s->strstart += s->lookahead;
+ s->lookahead = 0;
+
+ /* Emit a stored block if pending_buf will be full: */
+ max_start = s->block_start + max_block_size;
+ if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
+ /* strstart == 0 is possible when wraparound on 16-bit machine */
+ s->lookahead = (uInt)(s->strstart - max_start);
+ s->strstart = (uInt)max_start;
+ FLUSH_BLOCK(s, 0);
+ }
+ /* Flush if we may have to slide, otherwise block_start may become
+ * negative and the data will be gone:
+ */
+ if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
+ FLUSH_BLOCK(s, 0);
+ }
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if ((long)s->strstart > s->block_start)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+/* ===========================================================================
+ * Compress as much as possible from the input stream, return the current
+ * block state.
+ * This function does not perform lazy evaluation of matches and inserts
+ * new strings in the dictionary only for unmatched strings or for short
+ * matches. It is used only for the fast compression options.
+ */
+local block_state deflate_fast(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ IPos hash_head; /* head of the hash chain */
+ int bflush; /* set if current block must be flushed */
+
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the next match, plus MIN_MATCH bytes to insert the
+ * string following the next match.
+ */
+ if (s->lookahead < MIN_LOOKAHEAD) {
+ fill_window(s);
+ if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+ return need_more;
+ }
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+
+ /* Insert the string window[strstart .. strstart+2] in the
+ * dictionary, and set hash_head to the head of the hash chain:
+ */
+ hash_head = NIL;
+ if (s->lookahead >= MIN_MATCH) {
+ INSERT_STRING(s, s->strstart, hash_head);
+ }
+
+ /* Find the longest match, discarding those <= prev_length.
+ * At this point we have always match_length < MIN_MATCH
+ */
+ if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
+ /* To simplify the code, we prevent matches with the string
+ * of window index 0 (in particular we have to avoid a match
+ * of the string with itself at the start of the input file).
+ */
+ s->match_length = longest_match (s, hash_head);
+ /* longest_match() sets match_start */
+ }
+ if (s->match_length >= MIN_MATCH) {
+ check_match(s, s->strstart, s->match_start, s->match_length);
+
+ _tr_tally_dist(s, s->strstart - s->match_start,
+ s->match_length - MIN_MATCH, bflush);
+
+ s->lookahead -= s->match_length;
+
+ /* Insert new strings in the hash table only if the match length
+ * is not too large. This saves time but degrades compression.
+ */
+#ifndef FASTEST
+ if (s->match_length <= s->max_insert_length &&
+ s->lookahead >= MIN_MATCH) {
+ s->match_length--; /* string at strstart already in table */
+ do {
+ s->strstart++;
+ INSERT_STRING(s, s->strstart, hash_head);
+ /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+ * always MIN_MATCH bytes ahead.
+ */
+ } while (--s->match_length != 0);
+ s->strstart++;
+ } else
+#endif
+ {
+ s->strstart += s->match_length;
+ s->match_length = 0;
+ s->ins_h = s->window[s->strstart];
+ UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
+#if MIN_MATCH != 3
+ Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+ /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+ * matter since it will be recomputed at next deflate call.
+ */
+ }
+ } else {
+ /* No match, output a literal byte */
+ Tracevv((stderr,"%c", s->window[s->strstart]));
+ _tr_tally_lit (s, s->window[s->strstart], bflush);
+ s->lookahead--;
+ s->strstart++;
+ }
+ if (bflush) FLUSH_BLOCK(s, 0);
+ }
+ s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Same as above, but achieves better compression. We use a lazy
+ * evaluation for matches: a match is finally adopted only if there is
+ * no better match at the next window position.
+ */
+local block_state deflate_slow(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ IPos hash_head; /* head of hash chain */
+ int bflush; /* set if current block must be flushed */
+
+ /* Process the input block. */
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the next match, plus MIN_MATCH bytes to insert the
+ * string following the next match.
+ */
+ if (s->lookahead < MIN_LOOKAHEAD) {
+ fill_window(s);
+ if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+ return need_more;
+ }
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+
+ /* Insert the string window[strstart .. strstart+2] in the
+ * dictionary, and set hash_head to the head of the hash chain:
+ */
+ hash_head = NIL;
+ if (s->lookahead >= MIN_MATCH) {
+ INSERT_STRING(s, s->strstart, hash_head);
+ }
+
+ /* Find the longest match, discarding those <= prev_length.
+ */
+ s->prev_length = s->match_length, s->prev_match = s->match_start;
+ s->match_length = MIN_MATCH-1;
+
+ if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
+ s->strstart - hash_head <= MAX_DIST(s)) {
+ /* To simplify the code, we prevent matches with the string
+ * of window index 0 (in particular we have to avoid a match
+ * of the string with itself at the start of the input file).
+ */
+ s->match_length = longest_match (s, hash_head);
+ /* longest_match() sets match_start */
+
+ if (s->match_length <= 5 && (s->strategy == Z_FILTERED
+#if TOO_FAR <= 32767
+ || (s->match_length == MIN_MATCH &&
+ s->strstart - s->match_start > TOO_FAR)
+#endif
+ )) {
+
+ /* If prev_match is also MIN_MATCH, match_start is garbage
+ * but we will ignore the current match anyway.
+ */
+ s->match_length = MIN_MATCH-1;
+ }
+ }
+ /* If there was a match at the previous step and the current
+ * match is not better, output the previous match:
+ */
+ if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
+ uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
+ /* Do not insert strings in hash table beyond this. */
+
+ check_match(s, s->strstart-1, s->prev_match, s->prev_length);
+
+ _tr_tally_dist(s, s->strstart -1 - s->prev_match,
+ s->prev_length - MIN_MATCH, bflush);
+
+ /* Insert in hash table all strings up to the end of the match.
+ * strstart-1 and strstart are already inserted. If there is not
+ * enough lookahead, the last two strings are not inserted in
+ * the hash table.
+ */
+ s->lookahead -= s->prev_length-1;
+ s->prev_length -= 2;
+ do {
+ if (++s->strstart <= max_insert) {
+ INSERT_STRING(s, s->strstart, hash_head);
+ }
+ } while (--s->prev_length != 0);
+ s->match_available = 0;
+ s->match_length = MIN_MATCH-1;
+ s->strstart++;
+
+ if (bflush) FLUSH_BLOCK(s, 0);
+
+ } else if (s->match_available) {
+ /* If there was no match at the previous position, output a
+ * single literal. If there was a match but the current match
+ * is longer, truncate the previous match to a single literal.
+ */
+ Tracevv((stderr,"%c", s->window[s->strstart-1]));
+ _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+ if (bflush) {
+ FLUSH_BLOCK_ONLY(s, 0);
+ }
+ s->strstart++;
+ s->lookahead--;
+ if (s->strm->avail_out == 0) return need_more;
+ } else {
+ /* There is no previous match to compare with, wait for
+ * the next step to decide.
+ */
+ s->match_available = 1;
+ s->strstart++;
+ s->lookahead--;
+ }
+ }
+ Assert (flush != Z_NO_FLUSH, "no flush?");
+ if (s->match_available) {
+ Tracevv((stderr,"%c", s->window[s->strstart-1]));
+ _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+ s->match_available = 0;
+ }
+ s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+#endif /* FASTEST */
+
+/* ===========================================================================
+ * For Z_RLE, simply look for runs of bytes, generate matches only of distance
+ * one. Do not maintain a hash table. (It will be regenerated if this run of
+ * deflate switches away from Z_RLE.)
+ */
+local block_state deflate_rle(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ int bflush; /* set if current block must be flushed */
+ uInt prev; /* byte at distance one to match */
+ Bytef *scan, *strend; /* scan goes up to strend for length of run */
+
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the longest run, plus one for the unrolled loop.
+ */
+ if (s->lookahead <= MAX_MATCH) {
+ fill_window(s);
+ if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
+ return need_more;
+ }
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+
+ /* See how many times the previous byte repeats */
+ s->match_length = 0;
+ if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
+ scan = s->window + s->strstart - 1;
+ prev = *scan;
+ if (prev == *++scan && prev == *++scan && prev == *++scan) {
+ strend = s->window + s->strstart + MAX_MATCH;
+ do {
+ } while (prev == *++scan && prev == *++scan &&
+ prev == *++scan && prev == *++scan &&
+ prev == *++scan && prev == *++scan &&
+ prev == *++scan && prev == *++scan &&
+ scan < strend);
+ s->match_length = MAX_MATCH - (int)(strend - scan);
+ if (s->match_length > s->lookahead)
+ s->match_length = s->lookahead;
+ }
+ Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+ }
+
+ /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+ if (s->match_length >= MIN_MATCH) {
+ check_match(s, s->strstart, s->strstart - 1, s->match_length);
+
+ _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
+
+ s->lookahead -= s->match_length;
+ s->strstart += s->match_length;
+ s->match_length = 0;
+ } else {
+ /* No match, output a literal byte */
+ Tracevv((stderr,"%c", s->window[s->strstart]));
+ _tr_tally_lit (s, s->window[s->strstart], bflush);
+ s->lookahead--;
+ s->strstart++;
+ }
+ if (bflush) FLUSH_BLOCK(s, 0);
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+/* ===========================================================================
+ * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
+ * (It will be regenerated if this run of deflate switches away from Huffman.)
+ */
+local block_state deflate_huff(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ int bflush; /* set if current block must be flushed */
+
+ for (;;) {
+ /* Make sure that we have a literal to write. */
+ if (s->lookahead == 0) {
+ fill_window(s);
+ if (s->lookahead == 0) {
+ if (flush == Z_NO_FLUSH)
+ return need_more;
+ break; /* flush the current block */
+ }
+ }
+
+ /* Output a literal byte */
+ s->match_length = 0;
+ Tracevv((stderr,"%c", s->window[s->strstart]));
+ _tr_tally_lit (s, s->window[s->strstart], bflush);
+ s->lookahead--;
+ s->strstart++;
+ if (bflush) FLUSH_BLOCK(s, 0);
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
diff --git a/libs/ext/zlib/deflate.h b/libs/ext/zlib/deflate.h
new file mode 100644
index 0000000..fbac44d
--- /dev/null
+++ b/libs/ext/zlib/deflate.h
@@ -0,0 +1,346 @@
+/* deflate.h -- internal compression state
+ * Copyright (C) 1995-2012 Jean-loup Gailly
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+/* @(#) $Id$ */
+
+#ifndef DEFLATE_H
+#define DEFLATE_H
+
+#include "zutil.h"
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+ trailer creation by deflate(). NO_GZIP would be used to avoid linking in
+ the crc code when it is not needed. For shared libraries, gzip encoding
+ should be left enabled. */
+#ifndef NO_GZIP
+# define GZIP
+#endif
+
+/* ===========================================================================
+ * Internal compression state.
+ */
+
+#define LENGTH_CODES 29
+/* number of length codes, not counting the special END_BLOCK code */
+
+#define LITERALS 256
+/* number of literal bytes 0..255 */
+
+#define L_CODES (LITERALS+1+LENGTH_CODES)
+/* number of Literal or Length codes, including the END_BLOCK code */
+
+#define D_CODES 30
+/* number of distance codes */
+
+#define BL_CODES 19
+/* number of codes used to transfer the bit lengths */
+
+#define HEAP_SIZE (2*L_CODES+1)
+/* maximum heap size */
+
+#define MAX_BITS 15
+/* All codes must not exceed MAX_BITS bits */
+
+#define Buf_size 16
+/* size of bit buffer in bi_buf */
+
+#define INIT_STATE 42
+#define EXTRA_STATE 69
+#define NAME_STATE 73
+#define COMMENT_STATE 91
+#define HCRC_STATE 103
+#define BUSY_STATE 113
+#define FINISH_STATE 666
+/* Stream status */
+
+
+/* Data structure describing a single value and its code string. */
+typedef struct ct_data_s {
+ union {
+ ush freq; /* frequency count */
+ ush code; /* bit string */
+ } fc;
+ union {
+ ush dad; /* father node in Huffman tree */
+ ush len; /* length of bit string */
+ } dl;
+} FAR ct_data;
+
+#define Freq fc.freq
+#define Code fc.code
+#define Dad dl.dad
+#define Len dl.len
+
+typedef struct static_tree_desc_s static_tree_desc;
+
+typedef struct tree_desc_s {
+ ct_data *dyn_tree; /* the dynamic tree */
+ int max_code; /* largest code with non zero frequency */
+ static_tree_desc *stat_desc; /* the corresponding static tree */
+} FAR tree_desc;
+
+typedef ush Pos;
+typedef Pos FAR Posf;
+typedef unsigned IPos;
+
+/* A Pos is an index in the character window. We use short instead of int to
+ * save space in the various tables. IPos is used only for parameter passing.
+ */
+
+typedef struct internal_state {
+ z_streamp strm; /* pointer back to this zlib stream */
+ int status; /* as the name implies */
+ Bytef *pending_buf; /* output still pending */
+ ulg pending_buf_size; /* size of pending_buf */
+ Bytef *pending_out; /* next pending byte to output to the stream */
+ uInt pending; /* nb of bytes in the pending buffer */
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
+ gz_headerp gzhead; /* gzip header information to write */
+ uInt gzindex; /* where in extra, name, or comment */
+ Byte method; /* STORED (for zip only) or DEFLATED */
+ int last_flush; /* value of flush param for previous deflate call */
+
+ /* used by deflate.c: */
+
+ uInt w_size; /* LZ77 window size (32K by default) */
+ uInt w_bits; /* log2(w_size) (8..16) */
+ uInt w_mask; /* w_size - 1 */
+
+ Bytef *window;
+ /* Sliding window. Input bytes are read into the second half of the window,
+ * and move to the first half later to keep a dictionary of at least wSize
+ * bytes. With this organization, matches are limited to a distance of
+ * wSize-MAX_MATCH bytes, but this ensures that IO is always
+ * performed with a length multiple of the block size. Also, it limits
+ * the window size to 64K, which is quite useful on MSDOS.
+ * To do: use the user input buffer as sliding window.
+ */
+
+ ulg window_size;
+ /* Actual size of window: 2*wSize, except when the user input buffer
+ * is directly used as sliding window.
+ */
+
+ Posf *prev;
+ /* Link to older string with same hash index. To limit the size of this
+ * array to 64K, this link is maintained only for the last 32K strings.
+ * An index in this array is thus a window index modulo 32K.
+ */
+
+ Posf *head; /* Heads of the hash chains or NIL. */
+
+ uInt ins_h; /* hash index of string to be inserted */
+ uInt hash_size; /* number of elements in hash table */
+ uInt hash_bits; /* log2(hash_size) */
+ uInt hash_mask; /* hash_size-1 */
+
+ uInt hash_shift;
+ /* Number of bits by which ins_h must be shifted at each input
+ * step. It must be such that after MIN_MATCH steps, the oldest
+ * byte no longer takes part in the hash key, that is:
+ * hash_shift * MIN_MATCH >= hash_bits
+ */
+
+ long block_start;
+ /* Window position at the beginning of the current output block. Gets
+ * negative when the window is moved backwards.
+ */
+
+ uInt match_length; /* length of best match */
+ IPos prev_match; /* previous match */
+ int match_available; /* set if previous match exists */
+ uInt strstart; /* start of string to insert */
+ uInt match_start; /* start of matching string */
+ uInt lookahead; /* number of valid bytes ahead in window */
+
+ uInt prev_length;
+ /* Length of the best match at previous step. Matches not greater than this
+ * are discarded. This is used in the lazy match evaluation.
+ */
+
+ uInt max_chain_length;
+ /* To speed up deflation, hash chains are never searched beyond this
+ * length. A higher limit improves compression ratio but degrades the
+ * speed.
+ */
+
+ uInt max_lazy_match;
+ /* Attempt to find a better match only when the current match is strictly
+ * smaller than this value. This mechanism is used only for compression
+ * levels >= 4.
+ */
+# define max_insert_length max_lazy_match
+ /* Insert new strings in the hash table only if the match length is not
+ * greater than this length. This saves time but degrades compression.
+ * max_insert_length is used only for compression levels <= 3.
+ */
+
+ int level; /* compression level (1..9) */
+ int strategy; /* favor or force Huffman coding*/
+
+ uInt good_match;
+ /* Use a faster search when the previous match is longer than this */
+
+ int nice_match; /* Stop searching when current match exceeds this */
+
+ /* used by trees.c: */
+ /* Didn't use ct_data typedef below to suppress compiler warning */
+ struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
+ struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+ struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
+
+ struct tree_desc_s l_desc; /* desc. for literal tree */
+ struct tree_desc_s d_desc; /* desc. for distance tree */
+ struct tree_desc_s bl_desc; /* desc. for bit length tree */
+
+ ush bl_count[MAX_BITS+1];
+ /* number of codes at each bit length for an optimal tree */
+
+ int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
+ int heap_len; /* number of elements in the heap */
+ int heap_max; /* element of largest frequency */
+ /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+ * The same heap array is used to build all trees.
+ */
+
+ uch depth[2*L_CODES+1];
+ /* Depth of each subtree used as tie breaker for trees of equal frequency
+ */
+
+ uchf *l_buf; /* buffer for literals or lengths */
+
+ uInt lit_bufsize;
+ /* Size of match buffer for literals/lengths. There are 4 reasons for
+ * limiting lit_bufsize to 64K:
+ * - frequencies can be kept in 16 bit counters
+ * - if compression is not successful for the first block, all input
+ * data is still in the window so we can still emit a stored block even
+ * when input comes from standard input. (This can also be done for
+ * all blocks if lit_bufsize is not greater than 32K.)
+ * - if compression is not successful for a file smaller than 64K, we can
+ * even emit a stored file instead of a stored block (saving 5 bytes).
+ * This is applicable only for zip (not gzip or zlib).
+ * - creating new Huffman trees less frequently may not provide fast
+ * adaptation to changes in the input data statistics. (Take for
+ * example a binary file with poorly compressible code followed by
+ * a highly compressible string table.) Smaller buffer sizes give
+ * fast adaptation but have of course the overhead of transmitting
+ * trees more frequently.
+ * - I can't count above 4
+ */
+
+ uInt last_lit; /* running index in l_buf */
+
+ ushf *d_buf;
+ /* Buffer for distances. To simplify the code, d_buf and l_buf have
+ * the same number of elements. To use different lengths, an extra flag
+ * array would be necessary.
+ */
+
+ ulg opt_len; /* bit length of current block with optimal trees */
+ ulg static_len; /* bit length of current block with static trees */
+ uInt matches; /* number of string matches in current block */
+ uInt insert; /* bytes at end of window left to insert */
+
+#ifdef DEBUG
+ ulg compressed_len; /* total bit length of compressed file mod 2^32 */
+ ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
+#endif
+
+ ush bi_buf;
+ /* Output buffer. bits are inserted starting at the bottom (least
+ * significant bits).
+ */
+ int bi_valid;
+ /* Number of valid bits in bi_buf. All bits above the last valid bit
+ * are always zero.
+ */
+
+ ulg high_water;
+ /* High water mark offset in window for initialized bytes -- bytes above
+ * this are set to zero in order to avoid memory check warnings when
+ * longest match routines access bytes past the input. This is then
+ * updated to the new high water mark.
+ */
+
+} FAR deflate_state;
+
+/* Output a byte on the stream.
+ * IN assertion: there is enough room in pending_buf.
+ */
+#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+
+
+#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
+/* Minimum amount of lookahead, except at the end of the input file.
+ * See deflate.c for comments about the MIN_MATCH+1.
+ */
+
+#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
+/* In order to simplify the code, particularly on 16 bit machines, match
+ * distances are limited to MAX_DIST instead of WSIZE.
+ */
+
+#define WIN_INIT MAX_MATCH
+/* Number of bytes after end of data in window to initialize in order to avoid
+ memory checker errors from longest match routines */
+
+ /* in trees.c */
+void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
+int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
+void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
+ ulg stored_len, int last));
+void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
+ ulg stored_len, int last));
+
+#define d_code(dist) \
+ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
+/* Mapping from a distance to a distance code. dist is the distance - 1 and
+ * must not have side effects. _dist_code[256] and _dist_code[257] are never
+ * used.
+ */
+
+#ifndef DEBUG
+/* Inline versions of _tr_tally for speed: */
+
+#if defined(GEN_TREES_H) || !defined(STDC)
+ extern uch ZLIB_INTERNAL _length_code[];
+ extern uch ZLIB_INTERNAL _dist_code[];
+#else
+ extern const uch ZLIB_INTERNAL _length_code[];
+ extern const uch ZLIB_INTERNAL _dist_code[];
+#endif
+
+# define _tr_tally_lit(s, c, flush) \
+ { uch cc = (c); \
+ s->d_buf[s->last_lit] = 0; \
+ s->l_buf[s->last_lit++] = cc; \
+ s->dyn_ltree[cc].Freq++; \
+ flush = (s->last_lit == s->lit_bufsize-1); \
+ }
+# define _tr_tally_dist(s, distance, length, flush) \
+ { uch len = (length); \
+ ush dist = (distance); \
+ s->d_buf[s->last_lit] = dist; \
+ s->l_buf[s->last_lit++] = len; \
+ dist--; \
+ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
+ s->dyn_dtree[d_code(dist)].Freq++; \
+ flush = (s->last_lit == s->lit_bufsize-1); \
+ }
+#else
+# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
+# define _tr_tally_dist(s, distance, length, flush) \
+ flush = _tr_tally(s, distance, length)
+#endif
+
+#endif /* DEFLATE_H */
diff --git a/libs/ext/zlib/gzclose.c b/libs/ext/zlib/gzclose.c
new file mode 100644
index 0000000..caeb99a
--- /dev/null
+++ b/libs/ext/zlib/gzclose.c
@@ -0,0 +1,25 @@
+/* gzclose.c -- zlib gzclose() function
+ * Copyright (C) 2004, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* gzclose() is in a separate file so that it is linked in only if it is used.
+ That way the other gzclose functions can be used instead to avoid linking in
+ unneeded compression or decompression routines. */
+int ZEXPORT gzclose(file)
+ gzFile file;
+{
+#ifndef NO_GZCOMPRESS
+ gz_statep state;
+
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+
+ return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
+#else
+ return gzclose_r(file);
+#endif
+}
diff --git a/libs/ext/zlib/gzguts.h b/libs/ext/zlib/gzguts.h
new file mode 100644
index 0000000..ee3f281
--- /dev/null
+++ b/libs/ext/zlib/gzguts.h
@@ -0,0 +1,193 @@
+/* gzguts.h -- zlib internal header definitions for gz* operations
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifdef _LARGEFILE64_SOURCE
+# ifndef _LARGEFILE_SOURCE
+# define _LARGEFILE_SOURCE 1
+# endif
+# ifdef _FILE_OFFSET_BITS
+# undef _FILE_OFFSET_BITS
+# endif
+#endif
+
+#ifdef HAVE_HIDDEN
+# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+# define ZLIB_INTERNAL
+#endif
+
+#include <stdio.h>
+#include "zlib.h"
+#ifdef STDC
+# include <string.h>
+# include <stdlib.h>
+# include <limits.h>
+#endif
+#include <fcntl.h>
+
+#ifdef _WIN32
+# include <stddef.h>
+#endif
+
+#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
+# include <io.h>
+#endif
+
+#ifdef NO_DEFLATE /* for compatibility with old definition */
+# define NO_GZCOMPRESS
+#endif
+
+#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
+# ifndef HAVE_VSNPRINTF
+# define HAVE_VSNPRINTF
+# endif
+#endif
+
+#if defined(__CYGWIN__)
+# ifndef HAVE_VSNPRINTF
+# define HAVE_VSNPRINTF
+# endif
+#endif
+
+#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
+# ifndef HAVE_VSNPRINTF
+# define HAVE_VSNPRINTF
+# endif
+#endif
+
+#ifndef HAVE_VSNPRINTF
+# ifdef MSDOS
+/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
+ but for now we just assume it doesn't. */
+# define NO_vsnprintf
+# endif
+# ifdef __TURBOC__
+# define NO_vsnprintf
+# endif
+# ifdef WIN32
+/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
+# if !defined(vsnprintf) && !defined(NO_vsnprintf)
+# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
+# define vsnprintf _vsnprintf
+# endif
+# endif
+# endif
+# ifdef __SASC
+# define NO_vsnprintf
+# endif
+# ifdef VMS
+# define NO_vsnprintf
+# endif
+# ifdef __OS400__
+# define NO_vsnprintf
+# endif
+# ifdef __MVS__
+# define NO_vsnprintf
+# endif
+#endif
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+/* gz* functions always use library allocation functions */
+#ifndef STDC
+ extern voidp malloc OF((uInt size));
+ extern void free OF((voidpf ptr));
+#endif
+
+/* get errno and strerror definition */
+#if defined UNDER_CE
+# include <windows.h>
+# define zstrerror() gz_strwinerror((DWORD)GetLastError())
+#else
+# ifndef NO_STRERROR
+# include <errno.h>
+# define zstrerror() strerror(errno)
+# else
+# define zstrerror() "stdio error (consult errno)"
+# endif
+#endif
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+ ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+ ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+#endif
+
+/* default memLevel */
+#if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+#else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+#endif
+
+/* default i/o buffer size -- double this for output when reading */
+#define GZBUFSIZE 8192
+
+/* gzip modes, also provide a little integrity check on the passed structure */
+#define GZ_NONE 0
+#define GZ_READ 7247
+#define GZ_WRITE 31153
+#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */
+
+/* values for gz_state how */
+#define LOOK 0 /* look for a gzip header */
+#define COPY 1 /* copy input directly */
+#define GZIP 2 /* decompress a gzip stream */
+
+/* internal gzip file state data structure */
+typedef struct {
+ /* exposed contents for gzgetc() macro */
+ struct gzFile_s x; /* "x" for exposed */
+ /* x.have: number of bytes available at x.next */
+ /* x.next: next output data to deliver or write */
+ /* x.pos: current position in uncompressed data */
+ /* used for both reading and writing */
+ int mode; /* see gzip modes above */
+ int fd; /* file descriptor */
+ char *path; /* path or fd for error messages */
+ unsigned size; /* buffer size, zero if not allocated yet */
+ unsigned want; /* requested buffer size, default is GZBUFSIZE */
+ unsigned char *in; /* input buffer */
+ unsigned char *out; /* output buffer (double-sized when reading) */
+ int direct; /* 0 if processing gzip, 1 if transparent */
+ /* just for reading */
+ int how; /* 0: get header, 1: copy, 2: decompress */
+ z_off64_t start; /* where the gzip data started, for rewinding */
+ int eof; /* true if end of input file reached */
+ int past; /* true if read requested past end */
+ /* just for writing */
+ int level; /* compression level */
+ int strategy; /* compression strategy */
+ /* seek request */
+ z_off64_t skip; /* amount to skip (already rewound if backwards) */
+ int seek; /* true if seek request pending */
+ /* error information */
+ int err; /* error code */
+ char *msg; /* error message */
+ /* zlib inflate or deflate stream */
+ z_stream strm; /* stream structure in-place (not a pointer) */
+} gz_state;
+typedef gz_state FAR *gz_statep;
+
+/* shared functions */
+void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
+#if defined UNDER_CE
+char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
+#endif
+
+/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
+ value -- needed when comparing unsigned to z_off64_t, which is signed
+ (possible z_off64_t types off_t, off64_t, and long are all signed) */
+#ifdef INT_MAX
+# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
+#else
+unsigned ZLIB_INTERNAL gz_intmax OF((void));
+# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
+#endif
diff --git a/libs/ext/zlib/gzlib.c b/libs/ext/zlib/gzlib.c
new file mode 100644
index 0000000..ca55c6e
--- /dev/null
+++ b/libs/ext/zlib/gzlib.c
@@ -0,0 +1,620 @@
+/* gzlib.c -- zlib functions common to reading and writing gzip files
+ * Copyright (C) 2004, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+#if defined(_WIN32) && !defined(__BORLANDC__)
+# define LSEEK _lseeki64
+#else
+#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
+# define LSEEK lseek64
+#else
+# define LSEEK lseek
+#endif
+#endif
+
+/* Local functions */
+local void gz_reset OF((gz_statep));
+local gzFile gz_open OF((const void *, int, const char *));
+
+#if defined UNDER_CE
+
+/* Map the Windows error number in ERROR to a locale-dependent error message
+ string and return a pointer to it. Typically, the values for ERROR come
+ from GetLastError.
+
+ The string pointed to shall not be modified by the application, but may be
+ overwritten by a subsequent call to gz_strwinerror
+
+ The gz_strwinerror function does not change the current setting of
+ GetLastError. */
+char ZLIB_INTERNAL *gz_strwinerror (error)
+ DWORD error;
+{
+ static char buf[1024];
+
+ wchar_t *msgbuf;
+ DWORD lasterr = GetLastError();
+ DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
+ | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ NULL,
+ error,
+ 0, /* Default language */
+ (LPVOID)&msgbuf,
+ 0,
+ NULL);
+ if (chars != 0) {
+ /* If there is an \r\n appended, zap it. */
+ if (chars >= 2
+ && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') {
+ chars -= 2;
+ msgbuf[chars] = 0;
+ }
+
+ if (chars > sizeof (buf) - 1) {
+ chars = sizeof (buf) - 1;
+ msgbuf[chars] = 0;
+ }
+
+ wcstombs(buf, msgbuf, chars + 1);
+ LocalFree(msgbuf);
+ }
+ else {
+ sprintf(buf, "unknown win32 error (%ld)", error);
+ }
+
+ SetLastError(lasterr);
+ return buf;
+}
+
+#endif /* UNDER_CE */
+
+/* Reset gzip file state */
+local void gz_reset(state)
+ gz_statep state;
+{
+ state->x.have = 0; /* no output data available */
+ if (state->mode == GZ_READ) { /* for reading ... */
+ state->eof = 0; /* not at end of file */
+ state->past = 0; /* have not read past end yet */
+ state->how = LOOK; /* look for gzip header */
+ }
+ state->seek = 0; /* no seek request pending */
+ gz_error(state, Z_OK, NULL); /* clear error */
+ state->x.pos = 0; /* no uncompressed data yet */
+ state->strm.avail_in = 0; /* no input data yet */
+}
+
+/* Open a gzip file either by name or file descriptor. */
+local gzFile gz_open(path, fd, mode)
+ const void *path;
+ int fd;
+ const char *mode;
+{
+ gz_statep state;
+ size_t len;
+ int oflag;
+#ifdef O_CLOEXEC
+ int cloexec = 0;
+#endif
+#ifdef O_EXCL
+ int exclusive = 0;
+#endif
+
+ /* check input */
+ if (path == NULL)
+ return NULL;
+
+ /* allocate gzFile structure to return */
+ state = malloc(sizeof(gz_state));
+ if (state == NULL)
+ return NULL;
+ state->size = 0; /* no buffers allocated yet */
+ state->want = GZBUFSIZE; /* requested buffer size */
+ state->msg = NULL; /* no error message yet */
+
+ /* interpret mode */
+ state->mode = GZ_NONE;
+ state->level = Z_DEFAULT_COMPRESSION;
+ state->strategy = Z_DEFAULT_STRATEGY;
+ state->direct = 0;
+ while (*mode) {
+ if (*mode >= '0' && *mode <= '9')
+ state->level = *mode - '0';
+ else
+ switch (*mode) {
+ case 'r':
+ state->mode = GZ_READ;
+ break;
+#ifndef NO_GZCOMPRESS
+ case 'w':
+ state->mode = GZ_WRITE;
+ break;
+ case 'a':
+ state->mode = GZ_APPEND;
+ break;
+#endif
+ case '+': /* can't read and write at the same time */
+ free(state);
+ return NULL;
+ case 'b': /* ignore -- will request binary anyway */
+ break;
+#ifdef O_CLOEXEC
+ case 'e':
+ cloexec = 1;
+ break;
+#endif
+#ifdef O_EXCL
+ case 'x':
+ exclusive = 1;
+ break;
+#endif
+ case 'f':
+ state->strategy = Z_FILTERED;
+ break;
+ case 'h':
+ state->strategy = Z_HUFFMAN_ONLY;
+ break;
+ case 'R':
+ state->strategy = Z_RLE;
+ break;
+ case 'F':
+ state->strategy = Z_FIXED;
+ case 'T':
+ state->direct = 1;
+ default: /* could consider as an error, but just ignore */
+ ;
+ }
+ mode++;
+ }
+
+ /* must provide an "r", "w", or "a" */
+ if (state->mode == GZ_NONE) {
+ free(state);
+ return NULL;
+ }
+
+ /* can't force transparent read */
+ if (state->mode == GZ_READ) {
+ if (state->direct) {
+ free(state);
+ return NULL;
+ }
+ state->direct = 1; /* for empty file */
+ }
+
+ /* save the path name for error messages */
+#ifdef _WIN32
+ if (fd == -2) {
+ len = wcstombs(NULL, path, 0);
+ if (len == (size_t)-1)
+ len = 0;
+ }
+ else
+#endif
+ len = strlen(path);
+ state->path = malloc(len + 1);
+ if (state->path == NULL) {
+ free(state);
+ return NULL;
+ }
+#ifdef _WIN32
+ if (fd == -2)
+ if (len)
+ wcstombs(state->path, path, len + 1);
+ else
+ *(state->path) = 0;
+ else
+#endif
+ strcpy(state->path, path);
+
+ /* compute the flags for open() */
+ oflag =
+#ifdef O_LARGEFILE
+ O_LARGEFILE |
+#endif
+#ifdef O_BINARY
+ O_BINARY |
+#endif
+#ifdef O_CLOEXEC
+ (cloexec ? O_CLOEXEC : 0) |
+#endif
+ (state->mode == GZ_READ ?
+ O_RDONLY :
+ (O_WRONLY | O_CREAT |
+#ifdef O_EXCL
+ (exclusive ? O_EXCL : 0) |
+#endif
+ (state->mode == GZ_WRITE ?
+ O_TRUNC :
+ O_APPEND)));
+
+ /* open the file with the appropriate flags (or just use fd) */
+ state->fd = fd > -1 ? fd : (
+#ifdef _WIN32
+ fd == -2 ? _wopen(path, oflag, 0666) :
+#endif
+ open(path, oflag, 0666));
+ if (state->fd == -1) {
+ free(state->path);
+ free(state);
+ return NULL;
+ }
+ if (state->mode == GZ_APPEND)
+ state->mode = GZ_WRITE; /* simplify later checks */
+
+ /* save the current position for rewinding (only if reading) */
+ if (state->mode == GZ_READ) {
+ state->start = LSEEK(state->fd, 0, SEEK_CUR);
+ if (state->start == -1) state->start = 0;
+ }
+
+ /* initialize stream */
+ gz_reset(state);
+
+ /* return stream */
+ return (gzFile)state;
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzopen(path, mode)
+ const char *path;
+ const char *mode;
+{
+ return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzopen64(path, mode)
+ const char *path;
+ const char *mode;
+{
+ return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzdopen(fd, mode)
+ int fd;
+ const char *mode;
+{
+ char *path; /* identifier for error messages */
+ gzFile gz;
+
+ if (fd == -1 || (path = malloc(7 + 3 * sizeof(int))) == NULL)
+ return NULL;
+ sprintf(path, "<fd:%d>", fd); /* for debugging */
+ gz = gz_open(path, fd, mode);
+ free(path);
+ return gz;
+}
+
+/* -- see zlib.h -- */
+#ifdef _WIN32
+gzFile ZEXPORT gzopen_w(path, mode)
+ const wchar_t *path;
+ const char *mode;
+{
+ return gz_open(path, -2, mode);
+}
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzbuffer(file, size)
+ gzFile file;
+ unsigned size;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* make sure we haven't already allocated memory */
+ if (state->size != 0)
+ return -1;
+
+ /* check and set requested size */
+ if (size < 2)
+ size = 2; /* need two bytes to check magic header */
+ state->want = size;
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzrewind(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* back up and start over */
+ if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
+ return -1;
+ gz_reset(state);
+ return 0;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gzseek64(file, offset, whence)
+ gzFile file;
+ z_off64_t offset;
+ int whence;
+{
+ unsigned n;
+ z_off64_t ret;
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* check that there's no error */
+ if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+ return -1;
+
+ /* can only seek from start or relative to current position */
+ if (whence != SEEK_SET && whence != SEEK_CUR)
+ return -1;
+
+ /* normalize offset to a SEEK_CUR specification */
+ if (whence == SEEK_SET)
+ offset -= state->x.pos;
+ else if (state->seek)
+ offset += state->skip;
+ state->seek = 0;
+
+ /* if within raw area while reading, just go there */
+ if (state->mode == GZ_READ && state->how == COPY &&
+ state->x.pos + offset >= 0) {
+ ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
+ if (ret == -1)
+ return -1;
+ state->x.have = 0;
+ state->eof = 0;
+ state->past = 0;
+ state->seek = 0;
+ gz_error(state, Z_OK, NULL);
+ state->strm.avail_in = 0;
+ state->x.pos += offset;
+ return state->x.pos;
+ }
+
+ /* calculate skip amount, rewinding if needed for back seek when reading */
+ if (offset < 0) {
+ if (state->mode != GZ_READ) /* writing -- can't go backwards */
+ return -1;
+ offset += state->x.pos;
+ if (offset < 0) /* before start of file! */
+ return -1;
+ if (gzrewind(file) == -1) /* rewind, then skip to offset */
+ return -1;
+ }
+
+ /* if reading, skip what's in output buffer (one less gzgetc() check) */
+ if (state->mode == GZ_READ) {
+ n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
+ (unsigned)offset : state->x.have;
+ state->x.have -= n;
+ state->x.next += n;
+ state->x.pos += n;
+ offset -= n;
+ }
+
+ /* request skip (if not zero) */
+ if (offset) {
+ state->seek = 1;
+ state->skip = offset;
+ }
+ return state->x.pos + offset;
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gzseek(file, offset, whence)
+ gzFile file;
+ z_off_t offset;
+ int whence;
+{
+ z_off64_t ret;
+
+ ret = gzseek64(file, (z_off64_t)offset, whence);
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gztell64(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* return position */
+ return state->x.pos + (state->seek ? state->skip : 0);
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gztell(file)
+ gzFile file;
+{
+ z_off64_t ret;
+
+ ret = gztell64(file);
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gzoffset64(file)
+ gzFile file;
+{
+ z_off64_t offset;
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* compute and return effective offset in file */
+ offset = LSEEK(state->fd, 0, SEEK_CUR);
+ if (offset == -1)
+ return -1;
+ if (state->mode == GZ_READ) /* reading */
+ offset -= state->strm.avail_in; /* don't count buffered input */
+ return offset;
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gzoffset(file)
+ gzFile file;
+{
+ z_off64_t ret;
+
+ ret = gzoffset64(file);
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzeof(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return 0;
+
+ /* return end-of-file state */
+ return state->mode == GZ_READ ? state->past : 0;
+}
+
+/* -- see zlib.h -- */
+const char * ZEXPORT gzerror(file, errnum)
+ gzFile file;
+ int *errnum;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return NULL;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return NULL;
+
+ /* return error information */
+ if (errnum != NULL)
+ *errnum = state->err;
+ return state->msg == NULL ? "" : state->msg;
+}
+
+/* -- see zlib.h -- */
+void ZEXPORT gzclearerr(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return;
+
+ /* clear error and end-of-file */
+ if (state->mode == GZ_READ) {
+ state->eof = 0;
+ state->past = 0;
+ }
+ gz_error(state, Z_OK, NULL);
+}
+
+/* Create an error message in allocated memory and set state->err and
+ state->msg accordingly. Free any previous error message already there. Do
+ not try to free or allocate space if the error is Z_MEM_ERROR (out of
+ memory). Simply save the error message as a static string. If there is an
+ allocation failure constructing the error message, then convert the error to
+ out of memory. */
+void ZLIB_INTERNAL gz_error(state, err, msg)
+ gz_statep state;
+ int err;
+ const char *msg;
+{
+ /* free previously allocated message and clear */
+ if (state->msg != NULL) {
+ if (state->err != Z_MEM_ERROR)
+ free(state->msg);
+ state->msg = NULL;
+ }
+
+ /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */
+ if (err != Z_OK && err != Z_BUF_ERROR)
+ state->x.have = 0;
+
+ /* set error code, and if no message, then done */
+ state->err = err;
+ if (msg == NULL)
+ return;
+
+ /* for an out of memory error, save as static string */
+ if (err == Z_MEM_ERROR) {
+ state->msg = (char *)msg;
+ return;
+ }
+
+ /* construct error message with path */
+ if ((state->msg = malloc(strlen(state->path) + strlen(msg) + 3)) == NULL) {
+ state->err = Z_MEM_ERROR;
+ state->msg = (char *)"out of memory";
+ return;
+ }
+ strcpy(state->msg, state->path);
+ strcat(state->msg, ": ");
+ strcat(state->msg, msg);
+ return;
+}
+
+#ifndef INT_MAX
+/* portably return maximum value for an int (when limits.h presumed not
+ available) -- we need to do this to cover cases where 2's complement not
+ used, since C standard permits 1's complement and sign-bit representations,
+ otherwise we could just use ((unsigned)-1) >> 1 */
+unsigned ZLIB_INTERNAL gz_intmax()
+{
+ unsigned p, q;
+
+ p = 1;
+ do {
+ q = p;
+ p <<= 1;
+ p++;
+ } while (p > q);
+ return q >> 1;
+}
+#endif
diff --git a/libs/ext/zlib/gzread.c b/libs/ext/zlib/gzread.c
new file mode 100644
index 0000000..3493d34
--- /dev/null
+++ b/libs/ext/zlib/gzread.c
@@ -0,0 +1,589 @@
+/* gzread.c -- zlib functions for reading gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
+local int gz_avail OF((gz_statep));
+local int gz_look OF((gz_statep));
+local int gz_decomp OF((gz_statep));
+local int gz_fetch OF((gz_statep));
+local int gz_skip OF((gz_statep, z_off64_t));
+
+/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
+ state->fd, and update state->eof, state->err, and state->msg as appropriate.
+ This function needs to loop on read(), since read() is not guaranteed to
+ read the number of bytes requested, depending on the type of descriptor. */
+local int gz_load(state, buf, len, have)
+ gz_statep state;
+ unsigned char *buf;
+ unsigned len;
+ unsigned *have;
+{
+ int ret;
+
+ *have = 0;
+ do {
+ ret = read(state->fd, buf + *have, len - *have);
+ if (ret <= 0)
+ break;
+ *have += ret;
+ } while (*have < len);
+ if (ret < 0) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ if (ret == 0)
+ state->eof = 1;
+ return 0;
+}
+
+/* Load up input buffer and set eof flag if last data loaded -- return -1 on
+ error, 0 otherwise. Note that the eof flag is set when the end of the input
+ file is reached, even though there may be unused data in the buffer. Once
+ that data has been used, no more attempts will be made to read the file.
+ If strm->avail_in != 0, then the current data is moved to the beginning of
+ the input buffer, and then the remainder of the buffer is loaded with the
+ available data from the input file. */
+local int gz_avail(state)
+ gz_statep state;
+{
+ unsigned got;
+ z_streamp strm = &(state->strm);
+
+ if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+ return -1;
+ if (state->eof == 0) {
+ if (strm->avail_in) { /* copy what's there to the start */
+ unsigned char *p = state->in, *q = strm->next_in;
+ unsigned n = strm->avail_in;
+ do {
+ *p++ = *q++;
+ } while (--n);
+ }
+ if (gz_load(state, state->in + strm->avail_in,
+ state->size - strm->avail_in, &got) == -1)
+ return -1;
+ strm->avail_in += got;
+ strm->next_in = state->in;
+ }
+ return 0;
+}
+
+/* Look for gzip header, set up for inflate or copy. state->x.have must be 0.
+ If this is the first time in, allocate required memory. state->how will be
+ left unchanged if there is no more input data available, will be set to COPY
+ if there is no gzip header and direct copying will be performed, or it will
+ be set to GZIP for decompression. If direct copying, then leftover input
+ data from the input buffer will be copied to the output buffer. In that
+ case, all further file reads will be directly to either the output buffer or
+ a user buffer. If decompressing, the inflate state will be initialized.
+ gz_look() will return 0 on success or -1 on failure. */
+local int gz_look(state)
+ gz_statep state;
+{
+ z_streamp strm = &(state->strm);
+
+ /* allocate read buffers and inflate memory */
+ if (state->size == 0) {
+ /* allocate buffers */
+ state->in = malloc(state->want);
+ state->out = malloc(state->want << 1);
+ if (state->in == NULL || state->out == NULL) {
+ if (state->out != NULL)
+ free(state->out);
+ if (state->in != NULL)
+ free(state->in);
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ state->size = state->want;
+
+ /* allocate inflate memory */
+ state->strm.zalloc = Z_NULL;
+ state->strm.zfree = Z_NULL;
+ state->strm.opaque = Z_NULL;
+ state->strm.avail_in = 0;
+ state->strm.next_in = Z_NULL;
+ if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */
+ free(state->out);
+ free(state->in);
+ state->size = 0;
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ }
+
+ /* get at least the magic bytes in the input buffer */
+ if (strm->avail_in < 2) {
+ if (gz_avail(state) == -1)
+ return -1;
+ if (strm->avail_in == 0)
+ return 0;
+ }
+
+ /* look for gzip magic bytes -- if there, do gzip decoding (note: there is
+ a logical dilemma here when considering the case of a partially written
+ gzip file, to wit, if a single 31 byte is written, then we cannot tell
+ whether this is a single-byte file, or just a partially written gzip
+ file -- for here we assume that if a gzip file is being written, then
+ the header will be written in a single operation, so that reading a
+ single byte is sufficient indication that it is not a gzip file) */
+ if (strm->avail_in > 1 &&
+ strm->next_in[0] == 31 && strm->next_in[1] == 139) {
+ inflateReset(strm);
+ state->how = GZIP;
+ state->direct = 0;
+ return 0;
+ }
+
+ /* no gzip header -- if we were decoding gzip before, then this is trailing
+ garbage. Ignore the trailing garbage and finish. */
+ if (state->direct == 0) {
+ strm->avail_in = 0;
+ state->eof = 1;
+ state->x.have = 0;
+ return 0;
+ }
+
+ /* doing raw i/o, copy any leftover input to output -- this assumes that
+ the output buffer is larger than the input buffer, which also assures
+ space for gzungetc() */
+ state->x.next = state->out;
+ if (strm->avail_in) {
+ memcpy(state->x.next, strm->next_in, strm->avail_in);
+ state->x.have = strm->avail_in;
+ strm->avail_in = 0;
+ }
+ state->how = COPY;
+ state->direct = 1;
+ return 0;
+}
+
+/* Decompress from input to the provided next_out and avail_out in the state.
+ On return, state->x.have and state->x.next point to the just decompressed
+ data. If the gzip stream completes, state->how is reset to LOOK to look for
+ the next gzip stream or raw data, once state->x.have is depleted. Returns 0
+ on success, -1 on failure. */
+local int gz_decomp(state)
+ gz_statep state;
+{
+ int ret = Z_OK;
+ unsigned had;
+ z_streamp strm = &(state->strm);
+
+ /* fill output buffer up to end of deflate stream */
+ had = strm->avail_out;
+ do {
+ /* get more input for inflate() */
+ if (strm->avail_in == 0 && gz_avail(state) == -1)
+ return -1;
+ if (strm->avail_in == 0) {
+ gz_error(state, Z_BUF_ERROR, "unexpected end of file");
+ break;
+ }
+
+ /* decompress and handle errors */
+ ret = inflate(strm, Z_NO_FLUSH);
+ if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
+ gz_error(state, Z_STREAM_ERROR,
+ "internal error: inflate stream corrupt");
+ return -1;
+ }
+ if (ret == Z_MEM_ERROR) {
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ if (ret == Z_DATA_ERROR) { /* deflate stream invalid */
+ gz_error(state, Z_DATA_ERROR,
+ strm->msg == NULL ? "compressed data error" : strm->msg);
+ return -1;
+ }
+ } while (strm->avail_out && ret != Z_STREAM_END);
+
+ /* update available output */
+ state->x.have = had - strm->avail_out;
+ state->x.next = strm->next_out - state->x.have;
+
+ /* if the gzip stream completed successfully, look for another */
+ if (ret == Z_STREAM_END)
+ state->how = LOOK;
+
+ /* good decompression */
+ return 0;
+}
+
+/* Fetch data and put it in the output buffer. Assumes state->x.have is 0.
+ Data is either copied from the input file or decompressed from the input
+ file depending on state->how. If state->how is LOOK, then a gzip header is
+ looked for to determine whether to copy or decompress. Returns -1 on error,
+ otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the
+ end of the input file has been reached and all data has been processed. */
+local int gz_fetch(state)
+ gz_statep state;
+{
+ z_streamp strm = &(state->strm);
+
+ do {
+ switch(state->how) {
+ case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */
+ if (gz_look(state) == -1)
+ return -1;
+ if (state->how == LOOK)
+ return 0;
+ break;
+ case COPY: /* -> COPY */
+ if (gz_load(state, state->out, state->size << 1, &(state->x.have))
+ == -1)
+ return -1;
+ state->x.next = state->out;
+ return 0;
+ case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */
+ strm->avail_out = state->size << 1;
+ strm->next_out = state->out;
+ if (gz_decomp(state) == -1)
+ return -1;
+ }
+ } while (state->x.have == 0 && (!state->eof || strm->avail_in));
+ return 0;
+}
+
+/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */
+local int gz_skip(state, len)
+ gz_statep state;
+ z_off64_t len;
+{
+ unsigned n;
+
+ /* skip over len bytes or reach end-of-file, whichever comes first */
+ while (len)
+ /* skip over whatever is in output buffer */
+ if (state->x.have) {
+ n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
+ (unsigned)len : state->x.have;
+ state->x.have -= n;
+ state->x.next += n;
+ state->x.pos += n;
+ len -= n;
+ }
+
+ /* output buffer empty -- return if we're at the end of the input */
+ else if (state->eof && state->strm.avail_in == 0)
+ break;
+
+ /* need more data to skip -- load up output buffer */
+ else {
+ /* get more output, looking for header if required */
+ if (gz_fetch(state) == -1)
+ return -1;
+ }
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzread(file, buf, len)
+ gzFile file;
+ voidp buf;
+ unsigned len;
+{
+ unsigned got, n;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids the flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return -1;
+ }
+
+ /* if len is zero, avoid unnecessary operations */
+ if (len == 0)
+ return 0;
+
+ /* process a skip request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_skip(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* get len bytes to buf, or less than len if at the end */
+ got = 0;
+ do {
+ /* first just try copying data from the output buffer */
+ if (state->x.have) {
+ n = state->x.have > len ? len : state->x.have;
+ memcpy(buf, state->x.next, n);
+ state->x.next += n;
+ state->x.have -= n;
+ }
+
+ /* output buffer empty -- return if we're at the end of the input */
+ else if (state->eof && strm->avail_in == 0) {
+ state->past = 1; /* tried to read past end */
+ break;
+ }
+
+ /* need output data -- for small len or new stream load up our output
+ buffer */
+ else if (state->how == LOOK || len < (state->size << 1)) {
+ /* get more output, looking for header if required */
+ if (gz_fetch(state) == -1)
+ return -1;
+ continue; /* no progress yet -- go back to copy above */
+ /* the copy above assures that we will leave with space in the
+ output buffer, allowing at least one gzungetc() to succeed */
+ }
+
+ /* large len -- read directly into user buffer */
+ else if (state->how == COPY) { /* read directly */
+ if (gz_load(state, buf, len, &n) == -1)
+ return -1;
+ }
+
+ /* large len -- decompress directly into user buffer */
+ else { /* state->how == GZIP */
+ strm->avail_out = len;
+ strm->next_out = buf;
+ if (gz_decomp(state) == -1)
+ return -1;
+ n = state->x.have;
+ state->x.have = 0;
+ }
+
+ /* update progress */
+ len -= n;
+ buf = (char *)buf + n;
+ got += n;
+ state->x.pos += n;
+ } while (len);
+
+ /* return number of bytes read into user buffer (will fit in int) */
+ return (int)got;
+}
+
+/* -- see zlib.h -- */
+#undef gzgetc
+int ZEXPORT gzgetc(file)
+ gzFile file;
+{
+ int ret;
+ unsigned char buf[1];
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* try output buffer (no need to check for skip request) */
+ if (state->x.have) {
+ state->x.have--;
+ state->x.pos++;
+ return *(state->x.next)++;
+ }
+
+ /* nothing there -- try gzread() */
+ ret = gzread(file, buf, 1);
+ return ret < 1 ? -1 : buf[0];
+}
+
+int ZEXPORT gzgetc_(file)
+gzFile file;
+{
+ return gzgetc(file);
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzungetc(c, file)
+ int c;
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* process a skip request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_skip(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* can't push EOF */
+ if (c < 0)
+ return -1;
+
+ /* if output buffer empty, put byte at end (allows more pushing) */
+ if (state->x.have == 0) {
+ state->x.have = 1;
+ state->x.next = state->out + (state->size << 1) - 1;
+ state->x.next[0] = c;
+ state->x.pos--;
+ state->past = 0;
+ return c;
+ }
+
+ /* if no room, give up (must have already done a gzungetc()) */
+ if (state->x.have == (state->size << 1)) {
+ gz_error(state, Z_DATA_ERROR, "out of room to push characters");
+ return -1;
+ }
+
+ /* slide output data if needed and insert byte before existing data */
+ if (state->x.next == state->out) {
+ unsigned char *src = state->out + state->x.have;
+ unsigned char *dest = state->out + (state->size << 1);
+ while (src > state->out)
+ *--dest = *--src;
+ state->x.next = dest;
+ }
+ state->x.have++;
+ state->x.next--;
+ state->x.next[0] = c;
+ state->x.pos--;
+ state->past = 0;
+ return c;
+}
+
+/* -- see zlib.h -- */
+char * ZEXPORT gzgets(file, buf, len)
+ gzFile file;
+ char *buf;
+ int len;
+{
+ unsigned left, n;
+ char *str;
+ unsigned char *eol;
+ gz_statep state;
+
+ /* check parameters and get internal structure */
+ if (file == NULL || buf == NULL || len < 1)
+ return NULL;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return NULL;
+
+ /* process a skip request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_skip(state, state->skip) == -1)
+ return NULL;
+ }
+
+ /* copy output bytes up to new line or len - 1, whichever comes first --
+ append a terminating zero to the string (we don't check for a zero in
+ the contents, let the user worry about that) */
+ str = buf;
+ left = (unsigned)len - 1;
+ if (left) do {
+ /* assure that something is in the output buffer */
+ if (state->x.have == 0 && gz_fetch(state) == -1)
+ return NULL; /* error */
+ if (state->x.have == 0) { /* end of file */
+ state->past = 1; /* read past end */
+ break; /* return what we have */
+ }
+
+ /* look for end-of-line in current output buffer */
+ n = state->x.have > left ? left : state->x.have;
+ eol = memchr(state->x.next, '\n', n);
+ if (eol != NULL)
+ n = (unsigned)(eol - state->x.next) + 1;
+
+ /* copy through end-of-line, or remainder if not found */
+ memcpy(buf, state->x.next, n);
+ state->x.have -= n;
+ state->x.next += n;
+ state->x.pos += n;
+ left -= n;
+ buf += n;
+ } while (left && eol == NULL);
+
+ /* return terminated string, or if nothing, end of file */
+ if (buf == str)
+ return NULL;
+ buf[0] = 0;
+ return str;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzdirect(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* if the state is not known, but we can find out, then do so (this is
+ mainly for right after a gzopen() or gzdopen()) */
+ if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
+ (void)gz_look(state);
+
+ /* return 1 if transparent, 0 if processing a gzip stream */
+ return state->direct;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzclose_r(file)
+ gzFile file;
+{
+ int ret, err;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+
+ /* check that we're reading */
+ if (state->mode != GZ_READ)
+ return Z_STREAM_ERROR;
+
+ /* free memory and close file */
+ if (state->size) {
+ inflateEnd(&(state->strm));
+ free(state->out);
+ free(state->in);
+ }
+ err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
+ gz_error(state, Z_OK, NULL);
+ free(state->path);
+ ret = close(state->fd);
+ free(state);
+ return ret ? Z_ERRNO : err;
+}
diff --git a/libs/ext/zlib/gzwrite.c b/libs/ext/zlib/gzwrite.c
new file mode 100644
index 0000000..27cb342
--- /dev/null
+++ b/libs/ext/zlib/gzwrite.c
@@ -0,0 +1,565 @@
+/* gzwrite.c -- zlib functions for writing gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_init OF((gz_statep));
+local int gz_comp OF((gz_statep, int));
+local int gz_zero OF((gz_statep, z_off64_t));
+
+/* Initialize state for writing a gzip file. Mark initialization by setting
+ state->size to non-zero. Return -1 on failure or 0 on success. */
+local int gz_init(state)
+ gz_statep state;
+{
+ int ret;
+ z_streamp strm = &(state->strm);
+
+ /* allocate input buffer */
+ state->in = malloc(state->want);
+ if (state->in == NULL) {
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+
+ /* only need output buffer and deflate state if compressing */
+ if (!state->direct) {
+ /* allocate output buffer */
+ state->out = malloc(state->want);
+ if (state->out == NULL) {
+ free(state->in);
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+
+ /* allocate deflate memory, set up for gzip compression */
+ strm->zalloc = Z_NULL;
+ strm->zfree = Z_NULL;
+ strm->opaque = Z_NULL;
+ ret = deflateInit2(strm, state->level, Z_DEFLATED,
+ MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
+ if (ret != Z_OK) {
+ free(state->out);
+ free(state->in);
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ }
+
+ /* mark state as initialized */
+ state->size = state->want;
+
+ /* initialize write buffer if compressing */
+ if (!state->direct) {
+ strm->avail_out = state->size;
+ strm->next_out = state->out;
+ state->x.next = strm->next_out;
+ }
+ return 0;
+}
+
+/* Compress whatever is at avail_in and next_in and write to the output file.
+ Return -1 if there is an error writing to the output file, otherwise 0.
+ flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH,
+ then the deflate() state is reset to start a new gzip stream. If gz->direct
+ is true, then simply write to the output file without compressing, and
+ ignore flush. */
+local int gz_comp(state, flush)
+ gz_statep state;
+ int flush;
+{
+ int ret, got;
+ unsigned have;
+ z_streamp strm = &(state->strm);
+
+ /* allocate memory if this is the first time through */
+ if (state->size == 0 && gz_init(state) == -1)
+ return -1;
+
+ /* write directly if requested */
+ if (state->direct) {
+ got = write(state->fd, strm->next_in, strm->avail_in);
+ if (got < 0 || (unsigned)got != strm->avail_in) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ strm->avail_in = 0;
+ return 0;
+ }
+
+ /* run deflate() on provided input until it produces no more output */
+ ret = Z_OK;
+ do {
+ /* write out current buffer contents if full, or if flushing, but if
+ doing Z_FINISH then don't write until we get to Z_STREAM_END */
+ if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
+ (flush != Z_FINISH || ret == Z_STREAM_END))) {
+ have = (unsigned)(strm->next_out - state->x.next);
+ if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
+ (unsigned)got != have)) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ if (strm->avail_out == 0) {
+ strm->avail_out = state->size;
+ strm->next_out = state->out;
+ }
+ state->x.next = strm->next_out;
+ }
+
+ /* compress */
+ have = strm->avail_out;
+ ret = deflate(strm, flush);
+ if (ret == Z_STREAM_ERROR) {
+ gz_error(state, Z_STREAM_ERROR,
+ "internal error: deflate stream corrupt");
+ return -1;
+ }
+ have -= strm->avail_out;
+ } while (have);
+
+ /* if that completed a deflate stream, allow another to start */
+ if (flush == Z_FINISH)
+ deflateReset(strm);
+
+ /* all done, no errors */
+ return 0;
+}
+
+/* Compress len zeros to output. Return -1 on error, 0 on success. */
+local int gz_zero(state, len)
+ gz_statep state;
+ z_off64_t len;
+{
+ int first;
+ unsigned n;
+ z_streamp strm = &(state->strm);
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return -1;
+
+ /* compress len zeros (len guaranteed > 0) */
+ first = 1;
+ while (len) {
+ n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
+ (unsigned)len : state->size;
+ if (first) {
+ memset(state->in, 0, n);
+ first = 0;
+ }
+ strm->avail_in = n;
+ strm->next_in = state->in;
+ state->x.pos += n;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return -1;
+ len -= n;
+ }
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzwrite(file, buf, len)
+ gzFile file;
+ voidpc buf;
+ unsigned len;
+{
+ unsigned put = len;
+ unsigned n;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids the flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return 0;
+ }
+
+ /* if len is zero, avoid unnecessary operations */
+ if (len == 0)
+ return 0;
+
+ /* allocate memory if this is the first time through */
+ if (state->size == 0 && gz_init(state) == -1)
+ return 0;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return 0;
+ }
+
+ /* for small len, copy to input buffer, otherwise compress directly */
+ if (len < state->size) {
+ /* copy to input buffer, compress when full */
+ do {
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ n = state->size - strm->avail_in;
+ if (n > len)
+ n = len;
+ memcpy(strm->next_in + strm->avail_in, buf, n);
+ strm->avail_in += n;
+ state->x.pos += n;
+ buf = (char *)buf + n;
+ len -= n;
+ if (len && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ } while (len);
+ }
+ else {
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* directly compress user buffer to file */
+ strm->avail_in = len;
+ strm->next_in = (voidp)buf;
+ state->x.pos += len;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ }
+
+ /* input was all buffered or compressed (put will fit in int) */
+ return (int)put;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputc(file, c)
+ gzFile file;
+ int c;
+{
+ unsigned char buf[1];
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return -1;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* try writing to input buffer for speed (state->size == 0 if buffer not
+ initialized) */
+ if (strm->avail_in < state->size) {
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ strm->next_in[strm->avail_in++] = c;
+ state->x.pos++;
+ return c & 0xff;
+ }
+
+ /* no room in buffer or not initialized, use gz_write() */
+ buf[0] = c;
+ if (gzwrite(file, buf, 1) != 1)
+ return -1;
+ return c & 0xff;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputs(file, str)
+ gzFile file;
+ const char *str;
+{
+ int ret;
+ unsigned len;
+
+ /* write string */
+ len = (unsigned)strlen(str);
+ ret = gzwrite(file, str, len);
+ return ret == 0 && len != 0 ? -1 : ret;
+}
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#include <stdarg.h>
+
+/* -- see zlib.h -- */
+int ZEXPORTVA gzprintf (gzFile file, const char *format, ...)
+{
+ int size, len;
+ gz_statep state;
+ z_streamp strm;
+ va_list va;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* make sure we have some buffer space */
+ if (state->size == 0 && gz_init(state) == -1)
+ return 0;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return 0;
+ }
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* do the printf() into the input buffer, put length in len */
+ size = (int)(state->size);
+ state->in[size - 1] = 0;
+ va_start(va, format);
+#ifdef NO_vsnprintf
+# ifdef HAS_vsprintf_void
+ (void)vsprintf((char *)(state->in), format, va);
+ va_end(va);
+ for (len = 0; len < size; len++)
+ if (state->in[len] == 0) break;
+# else
+ len = vsprintf((char *)(state->in), format, va);
+ va_end(va);
+# endif
+#else
+# ifdef HAS_vsnprintf_void
+ (void)vsnprintf((char *)(state->in), size, format, va);
+ va_end(va);
+ len = strlen((char *)(state->in));
+# else
+ len = vsnprintf((char *)(state->in), size, format, va);
+ va_end(va);
+# endif
+#endif
+
+ /* check that printf() results fit in buffer */
+ if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ return 0;
+
+ /* update buffer and position, defer compression until needed */
+ strm->avail_in = (unsigned)len;
+ strm->next_in = state->in;
+ state->x.pos += len;
+ return len;
+}
+
+#else /* !STDC && !Z_HAVE_STDARG_H */
+
+/* -- see zlib.h -- */
+int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+ gzFile file;
+ const char *format;
+ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
+{
+ int size, len;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that can really pass pointer in ints */
+ if (sizeof(int) != sizeof(void *))
+ return 0;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* make sure we have some buffer space */
+ if (state->size == 0 && gz_init(state) == -1)
+ return 0;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return 0;
+ }
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* do the printf() into the input buffer, put length in len */
+ size = (int)(state->size);
+ state->in[size - 1] = 0;
+#ifdef NO_snprintf
+# ifdef HAS_sprintf_void
+ sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ for (len = 0; len < size; len++)
+ if (state->in[len] == 0) break;
+# else
+ len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+# endif
+#else
+# ifdef HAS_snprintf_void
+ snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = strlen((char *)(state->in));
+# else
+ len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
+ a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
+ a19, a20);
+# endif
+#endif
+
+ /* check that printf() results fit in buffer */
+ if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ return 0;
+
+ /* update buffer and position, defer compression until needed */
+ strm->avail_in = (unsigned)len;
+ strm->next_in = state->in;
+ state->x.pos += len;
+ return len;
+}
+
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzflush(file, flush)
+ gzFile file;
+ int flush;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return Z_STREAM_ERROR;
+
+ /* check flush parameter */
+ if (flush < 0 || flush > Z_FINISH)
+ return Z_STREAM_ERROR;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* compress remaining data with requested flush */
+ gz_comp(state, flush);
+ return state->err;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzsetparams(file, level, strategy)
+ gzFile file;
+ int level;
+ int strategy;
+{
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return Z_STREAM_ERROR;
+
+ /* if no change is requested, then do nothing */
+ if (level == state->level && strategy == state->strategy)
+ return Z_OK;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* change compression parameters for subsequent input */
+ if (state->size) {
+ /* flush previous input with previous parameters before changing */
+ if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
+ return state->err;
+ deflateParams(strm, level, strategy);
+ }
+ state->level = level;
+ state->strategy = strategy;
+ return Z_OK;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzclose_w(file)
+ gzFile file;
+{
+ int ret = Z_OK;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+
+ /* check that we're writing */
+ if (state->mode != GZ_WRITE)
+ return Z_STREAM_ERROR;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ ret = state->err;
+ }
+
+ /* flush, free memory, and close file */
+ if (state->size) {
+ if (gz_comp(state, Z_FINISH) == -1)
+ ret = state->err;
+ if (!state->direct) {
+ (void)deflateEnd(&(state->strm));
+ free(state->out);
+ }
+ free(state->in);
+ }
+ gz_error(state, Z_OK, NULL);
+ free(state->path);
+ if (close(state->fd) == -1)
+ ret = Z_ERRNO;
+ free(state);
+ return ret;
+}
diff --git a/libs/ext/zlib/infback.c b/libs/ext/zlib/infback.c
new file mode 100644
index 0000000..981aff1
--- /dev/null
+++ b/libs/ext/zlib/infback.c
@@ -0,0 +1,640 @@
+/* infback.c -- inflate using a call-back interface
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ This code is largely copied from inflate.c. Normally either infback.o or
+ inflate.o would be linked into an application--not both. The interface
+ with inffast.c is retained so that optimized assembler-coded versions of
+ inflate_fast() can be used with either inflate.c or infback.c.
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+
+/*
+ strm provides memory allocation functions in zalloc and zfree, or
+ Z_NULL to use the library memory allocation functions.
+
+ windowBits is in the range 8..15, and window is a user-supplied
+ window and output buffer that is 2**windowBits bytes.
+ */
+int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
+z_streamp strm;
+int windowBits;
+unsigned char FAR *window;
+const char *version;
+int stream_size;
+{
+ struct inflate_state FAR *state;
+
+ if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+ stream_size != (int)(sizeof(z_stream)))
+ return Z_VERSION_ERROR;
+ if (strm == Z_NULL || window == Z_NULL ||
+ windowBits < 8 || windowBits > 15)
+ return Z_STREAM_ERROR;
+ strm->msg = Z_NULL; /* in case we return an error */
+ if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zalloc = zcalloc;
+ strm->opaque = (voidpf)0;
+#endif
+ }
+ if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zfree = zcfree;
+#endif
+ state = (struct inflate_state FAR *)ZALLOC(strm, 1,
+ sizeof(struct inflate_state));
+ if (state == Z_NULL) return Z_MEM_ERROR;
+ Tracev((stderr, "inflate: allocated\n"));
+ strm->state = (struct internal_state FAR *)state;
+ state->dmax = 32768U;
+ state->wbits = windowBits;
+ state->wsize = 1U << windowBits;
+ state->window = window;
+ state->wnext = 0;
+ state->whave = 0;
+ return Z_OK;
+}
+
+/*
+ Return state with length and distance decoding tables and index sizes set to
+ fixed code decoding. Normally this returns fixed tables from inffixed.h.
+ If BUILDFIXED is defined, then instead this routine builds the tables the
+ first time it's called, and returns those tables the first time and
+ thereafter. This reduces the size of the code by about 2K bytes, in
+ exchange for a little execution time. However, BUILDFIXED should not be
+ used for threaded applications, since the rewriting of the tables and virgin
+ may not be thread-safe.
+ */
+local void fixedtables(state)
+struct inflate_state FAR *state;
+{
+#ifdef BUILDFIXED
+ static int virgin = 1;
+ static code *lenfix, *distfix;
+ static code fixed[544];
+
+ /* build fixed huffman tables if first call (may not be thread safe) */
+ if (virgin) {
+ unsigned sym, bits;
+ static code *next;
+
+ /* literal/length table */
+ sym = 0;
+ while (sym < 144) state->lens[sym++] = 8;
+ while (sym < 256) state->lens[sym++] = 9;
+ while (sym < 280) state->lens[sym++] = 7;
+ while (sym < 288) state->lens[sym++] = 8;
+ next = fixed;
+ lenfix = next;
+ bits = 9;
+ inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+ /* distance table */
+ sym = 0;
+ while (sym < 32) state->lens[sym++] = 5;
+ distfix = next;
+ bits = 5;
+ inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+ /* do this just once */
+ virgin = 0;
+ }
+#else /* !BUILDFIXED */
+# include "inffixed.h"
+#endif /* BUILDFIXED */
+ state->lencode = lenfix;
+ state->lenbits = 9;
+ state->distcode = distfix;
+ state->distbits = 5;
+}
+
+/* Macros for inflateBack(): */
+
+/* Load returned state from inflate_fast() */
+#define LOAD() \
+ do { \
+ put = strm->next_out; \
+ left = strm->avail_out; \
+ next = strm->next_in; \
+ have = strm->avail_in; \
+ hold = state->hold; \
+ bits = state->bits; \
+ } while (0)
+
+/* Set state from registers for inflate_fast() */
+#define RESTORE() \
+ do { \
+ strm->next_out = put; \
+ strm->avail_out = left; \
+ strm->next_in = next; \
+ strm->avail_in = have; \
+ state->hold = hold; \
+ state->bits = bits; \
+ } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+ do { \
+ hold = 0; \
+ bits = 0; \
+ } while (0)
+
+/* Assure that some input is available. If input is requested, but denied,
+ then return a Z_BUF_ERROR from inflateBack(). */
+#define PULL() \
+ do { \
+ if (have == 0) { \
+ have = in(in_desc, &next); \
+ if (have == 0) { \
+ next = Z_NULL; \
+ ret = Z_BUF_ERROR; \
+ goto inf_leave; \
+ } \
+ } \
+ } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflateBack()
+ with an error if there is no input available. */
+#define PULLBYTE() \
+ do { \
+ PULL(); \
+ have--; \
+ hold += (unsigned long)(*next++) << bits; \
+ bits += 8; \
+ } while (0)
+
+/* Assure that there are at least n bits in the bit accumulator. If there is
+ not enough available input to do that, then return from inflateBack() with
+ an error. */
+#define NEEDBITS(n) \
+ do { \
+ while (bits < (unsigned)(n)) \
+ PULLBYTE(); \
+ } while (0)
+
+/* Return the low n bits of the bit accumulator (n < 16) */
+#define BITS(n) \
+ ((unsigned)hold & ((1U << (n)) - 1))
+
+/* Remove n bits from the bit accumulator */
+#define DROPBITS(n) \
+ do { \
+ hold >>= (n); \
+ bits -= (unsigned)(n); \
+ } while (0)
+
+/* Remove zero to seven bits as needed to go to a byte boundary */
+#define BYTEBITS() \
+ do { \
+ hold >>= bits & 7; \
+ bits -= bits & 7; \
+ } while (0)
+
+/* Assure that some output space is available, by writing out the window
+ if it's full. If the write fails, return from inflateBack() with a
+ Z_BUF_ERROR. */
+#define ROOM() \
+ do { \
+ if (left == 0) { \
+ put = state->window; \
+ left = state->wsize; \
+ state->whave = left; \
+ if (out(out_desc, put, left)) { \
+ ret = Z_BUF_ERROR; \
+ goto inf_leave; \
+ } \
+ } \
+ } while (0)
+
+/*
+ strm provides the memory allocation functions and window buffer on input,
+ and provides information on the unused input on return. For Z_DATA_ERROR
+ returns, strm will also provide an error message.
+
+ in() and out() are the call-back input and output functions. When
+ inflateBack() needs more input, it calls in(). When inflateBack() has
+ filled the window with output, or when it completes with data in the
+ window, it calls out() to write out the data. The application must not
+ change the provided input until in() is called again or inflateBack()
+ returns. The application must not change the window/output buffer until
+ inflateBack() returns.
+
+ in() and out() are called with a descriptor parameter provided in the
+ inflateBack() call. This parameter can be a structure that provides the
+ information required to do the read or write, as well as accumulated
+ information on the input and output such as totals and check values.
+
+ in() should return zero on failure. out() should return non-zero on
+ failure. If either in() or out() fails, than inflateBack() returns a
+ Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it
+ was in() or out() that caused in the error. Otherwise, inflateBack()
+ returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
+ error, or Z_MEM_ERROR if it could not allocate memory for the state.
+ inflateBack() can also return Z_STREAM_ERROR if the input parameters
+ are not correct, i.e. strm is Z_NULL or the state was not initialized.
+ */
+int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)
+z_streamp strm;
+in_func in;
+void FAR *in_desc;
+out_func out;
+void FAR *out_desc;
+{
+ struct inflate_state FAR *state;
+ unsigned char FAR *next; /* next input */
+ unsigned char FAR *put; /* next output */
+ unsigned have, left; /* available input and output */
+ unsigned long hold; /* bit buffer */
+ unsigned bits; /* bits in bit buffer */
+ unsigned copy; /* number of stored or match bytes to copy */
+ unsigned char FAR *from; /* where to copy match bytes from */
+ code here; /* current decoding table entry */
+ code last; /* parent table entry */
+ unsigned len; /* length to copy for repeats, bits to drop */
+ int ret; /* return code */
+ static const unsigned short order[19] = /* permutation of code lengths */
+ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+ /* Check that the strm exists and that the state was initialized */
+ if (strm == Z_NULL || strm->state == Z_NULL)
+ return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* Reset the state */
+ strm->msg = Z_NULL;
+ state->mode = TYPE;
+ state->last = 0;
+ state->whave = 0;
+ next = strm->next_in;
+ have = next != Z_NULL ? strm->avail_in : 0;
+ hold = 0;
+ bits = 0;
+ put = state->window;
+ left = state->wsize;
+
+ /* Inflate until end of block marked as last */
+ for (;;)
+ switch (state->mode) {
+ case TYPE:
+ /* determine and dispatch block type */
+ if (state->last) {
+ BYTEBITS();
+ state->mode = DONE;
+ break;
+ }
+ NEEDBITS(3);
+ state->last = BITS(1);
+ DROPBITS(1);
+ switch (BITS(2)) {
+ case 0: /* stored block */
+ Tracev((stderr, "inflate: stored block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = STORED;
+ break;
+ case 1: /* fixed block */
+ fixedtables(state);
+ Tracev((stderr, "inflate: fixed codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = LEN; /* decode codes */
+ break;
+ case 2: /* dynamic block */
+ Tracev((stderr, "inflate: dynamic codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = TABLE;
+ break;
+ case 3:
+ strm->msg = (char *)"invalid block type";
+ state->mode = BAD;
+ }
+ DROPBITS(2);
+ break;
+
+ case STORED:
+ /* get and verify stored block length */
+ BYTEBITS(); /* go to byte boundary */
+ NEEDBITS(32);
+ if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+ strm->msg = (char *)"invalid stored block lengths";
+ state->mode = BAD;
+ break;
+ }
+ state->length = (unsigned)hold & 0xffff;
+ Tracev((stderr, "inflate: stored length %u\n",
+ state->length));
+ INITBITS();
+
+ /* copy stored block from input to output */
+ while (state->length != 0) {
+ copy = state->length;
+ PULL();
+ ROOM();
+ if (copy > have) copy = have;
+ if (copy > left) copy = left;
+ zmemcpy(put, next, copy);
+ have -= copy;
+ next += copy;
+ left -= copy;
+ put += copy;
+ state->length -= copy;
+ }
+ Tracev((stderr, "inflate: stored end\n"));
+ state->mode = TYPE;
+ break;
+
+ case TABLE:
+ /* get dynamic table entries descriptor */
+ NEEDBITS(14);
+ state->nlen = BITS(5) + 257;
+ DROPBITS(5);
+ state->ndist = BITS(5) + 1;
+ DROPBITS(5);
+ state->ncode = BITS(4) + 4;
+ DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+ if (state->nlen > 286 || state->ndist > 30) {
+ strm->msg = (char *)"too many length or distance symbols";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ Tracev((stderr, "inflate: table sizes ok\n"));
+
+ /* get code length code lengths (not a typo) */
+ state->have = 0;
+ while (state->have < state->ncode) {
+ NEEDBITS(3);
+ state->lens[order[state->have++]] = (unsigned short)BITS(3);
+ DROPBITS(3);
+ }
+ while (state->have < 19)
+ state->lens[order[state->have++]] = 0;
+ state->next = state->codes;
+ state->lencode = (code const FAR *)(state->next);
+ state->lenbits = 7;
+ ret = inflate_table(CODES, state->lens, 19, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid code lengths set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: code lengths ok\n"));
+
+ /* get length and distance code code lengths */
+ state->have = 0;
+ while (state->have < state->nlen + state->ndist) {
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.val < 16) {
+ DROPBITS(here.bits);
+ state->lens[state->have++] = here.val;
+ }
+ else {
+ if (here.val == 16) {
+ NEEDBITS(here.bits + 2);
+ DROPBITS(here.bits);
+ if (state->have == 0) {
+ strm->msg = (char *)"invalid bit length repeat";
+ state->mode = BAD;
+ break;
+ }
+ len = (unsigned)(state->lens[state->have - 1]);
+ copy = 3 + BITS(2);
+ DROPBITS(2);
+ }
+ else if (here.val == 17) {
+ NEEDBITS(here.bits + 3);
+ DROPBITS(here.bits);
+ len = 0;
+ copy = 3 + BITS(3);
+ DROPBITS(3);
+ }
+ else {
+ NEEDBITS(here.bits + 7);
+ DROPBITS(here.bits);
+ len = 0;
+ copy = 11 + BITS(7);
+ DROPBITS(7);
+ }
+ if (state->have + copy > state->nlen + state->ndist) {
+ strm->msg = (char *)"invalid bit length repeat";
+ state->mode = BAD;
+ break;
+ }
+ while (copy--)
+ state->lens[state->have++] = (unsigned short)len;
+ }
+ }
+
+ /* handle error breaks in while */
+ if (state->mode == BAD) break;
+
+ /* check for end-of-block code (better have one) */
+ if (state->lens[256] == 0) {
+ strm->msg = (char *)"invalid code -- missing end-of-block";
+ state->mode = BAD;
+ break;
+ }
+
+ /* build code tables -- note: do not change the lenbits or distbits
+ values here (9 and 6) without reading the comments in inftrees.h
+ concerning the ENOUGH constants, which depend on those values */
+ state->next = state->codes;
+ state->lencode = (code const FAR *)(state->next);
+ state->lenbits = 9;
+ ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid literal/lengths set";
+ state->mode = BAD;
+ break;
+ }
+ state->distcode = (code const FAR *)(state->next);
+ state->distbits = 6;
+ ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+ &(state->next), &(state->distbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid distances set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: codes ok\n"));
+ state->mode = LEN;
+
+ case LEN:
+ /* use inflate_fast() if we have enough input and output */
+ if (have >= 6 && left >= 258) {
+ RESTORE();
+ if (state->whave < state->wsize)
+ state->whave = state->wsize - left;
+ inflate_fast(strm, state->wsize);
+ LOAD();
+ break;
+ }
+
+ /* get a literal, length, or end-of-block code */
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.op && (here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->lencode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ }
+ DROPBITS(here.bits);
+ state->length = (unsigned)here.val;
+
+ /* process literal */
+ if (here.op == 0) {
+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ "inflate: literal '%c'\n" :
+ "inflate: literal 0x%02x\n", here.val));
+ ROOM();
+ *put++ = (unsigned char)(state->length);
+ left--;
+ state->mode = LEN;
+ break;
+ }
+
+ /* process end of block */
+ if (here.op & 32) {
+ Tracevv((stderr, "inflate: end of block\n"));
+ state->mode = TYPE;
+ break;
+ }
+
+ /* invalid code */
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid literal/length code";
+ state->mode = BAD;
+ break;
+ }
+
+ /* length code -- get extra bits, if any */
+ state->extra = (unsigned)(here.op) & 15;
+ if (state->extra != 0) {
+ NEEDBITS(state->extra);
+ state->length += BITS(state->extra);
+ DROPBITS(state->extra);
+ }
+ Tracevv((stderr, "inflate: length %u\n", state->length));
+
+ /* get distance code */
+ for (;;) {
+ here = state->distcode[BITS(state->distbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if ((here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->distcode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ }
+ DROPBITS(here.bits);
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid distance code";
+ state->mode = BAD;
+ break;
+ }
+ state->offset = (unsigned)here.val;
+
+ /* get distance extra bits, if any */
+ state->extra = (unsigned)(here.op) & 15;
+ if (state->extra != 0) {
+ NEEDBITS(state->extra);
+ state->offset += BITS(state->extra);
+ DROPBITS(state->extra);
+ }
+ if (state->offset > state->wsize - (state->whave < state->wsize ?
+ left : 0)) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+ Tracevv((stderr, "inflate: distance %u\n", state->offset));
+
+ /* copy match from window to output */
+ do {
+ ROOM();
+ copy = state->wsize - state->offset;
+ if (copy < left) {
+ from = put + copy;
+ copy = left - copy;
+ }
+ else {
+ from = put - state->offset;
+ copy = left;
+ }
+ if (copy > state->length) copy = state->length;
+ state->length -= copy;
+ left -= copy;
+ do {
+ *put++ = *from++;
+ } while (--copy);
+ } while (state->length != 0);
+ break;
+
+ case DONE:
+ /* inflate stream terminated properly -- write leftover output */
+ ret = Z_STREAM_END;
+ if (left < state->wsize) {
+ if (out(out_desc, state->window, state->wsize - left))
+ ret = Z_BUF_ERROR;
+ }
+ goto inf_leave;
+
+ case BAD:
+ ret = Z_DATA_ERROR;
+ goto inf_leave;
+
+ default: /* can't happen, but makes compilers happy */
+ ret = Z_STREAM_ERROR;
+ goto inf_leave;
+ }
+
+ /* Return unused input */
+ inf_leave:
+ strm->next_in = next;
+ strm->avail_in = have;
+ return ret;
+}
+
+int ZEXPORT inflateBackEnd(strm)
+z_streamp strm;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+ return Z_STREAM_ERROR;
+ ZFREE(strm, strm->state);
+ strm->state = Z_NULL;
+ Tracev((stderr, "inflate: end\n"));
+ return Z_OK;
+}
diff --git a/libs/ext/zlib/inffast.c b/libs/ext/zlib/inffast.c
new file mode 100644
index 0000000..2f1d60b
--- /dev/null
+++ b/libs/ext/zlib/inffast.c
@@ -0,0 +1,340 @@
+/* inffast.c -- fast decoding
+ * Copyright (C) 1995-2008, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifndef ASMINF
+
+/* Allow machine dependent optimization for post-increment or pre-increment.
+ Based on testing to date,
+ Pre-increment preferred for:
+ - PowerPC G3 (Adler)
+ - MIPS R5000 (Randers-Pehrson)
+ Post-increment preferred for:
+ - none
+ No measurable difference:
+ - Pentium III (Anderson)
+ - M68060 (Nikl)
+ */
+#ifdef POSTINC
+# define OFF 0
+# define PUP(a) *(a)++
+#else
+# define OFF 1
+# define PUP(a) *++(a)
+#endif
+
+/*
+ Decode literal, length, and distance codes and write out the resulting
+ literal and match bytes until either not enough input or output is
+ available, an end-of-block is encountered, or a data error is encountered.
+ When large enough input and output buffers are supplied to inflate(), for
+ example, a 16K input buffer and a 64K output buffer, more than 95% of the
+ inflate execution time is spent in this routine.
+
+ Entry assumptions:
+
+ state->mode == LEN
+ strm->avail_in >= 6
+ strm->avail_out >= 258
+ start >= strm->avail_out
+ state->bits < 8
+
+ On return, state->mode is one of:
+
+ LEN -- ran out of enough output space or enough available input
+ TYPE -- reached end of block code, inflate() to interpret next block
+ BAD -- error in block data
+
+ Notes:
+
+ - The maximum input bits used by a length/distance pair is 15 bits for the
+ length code, 5 bits for the length extra, 15 bits for the distance code,
+ and 13 bits for the distance extra. This totals 48 bits, or six bytes.
+ Therefore if strm->avail_in >= 6, then there is enough input to avoid
+ checking for available input while decoding.
+
+ - The maximum bytes that a single length/distance pair can output is 258
+ bytes, which is the maximum length that can be coded. inflate_fast()
+ requires strm->avail_out >= 258 for each loop to avoid checking for
+ output space.
+ */
+void ZLIB_INTERNAL inflate_fast(strm, start)
+z_streamp strm;
+unsigned start; /* inflate()'s starting value for strm->avail_out */
+{
+ struct inflate_state FAR *state;
+ unsigned char FAR *in; /* local strm->next_in */
+ unsigned char FAR *last; /* while in < last, enough input available */
+ unsigned char FAR *out; /* local strm->next_out */
+ unsigned char FAR *beg; /* inflate()'s initial strm->next_out */
+ unsigned char FAR *end; /* while out < end, enough space available */
+#ifdef INFLATE_STRICT
+ unsigned dmax; /* maximum distance from zlib header */
+#endif
+ unsigned wsize; /* window size or zero if not using window */
+ unsigned whave; /* valid bytes in the window */
+ unsigned wnext; /* window write index */
+ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */
+ unsigned long hold; /* local strm->hold */
+ unsigned bits; /* local strm->bits */
+ code const FAR *lcode; /* local strm->lencode */
+ code const FAR *dcode; /* local strm->distcode */
+ unsigned lmask; /* mask for first level of length codes */
+ unsigned dmask; /* mask for first level of distance codes */
+ code here; /* retrieved table entry */
+ unsigned op; /* code bits, operation, extra bits, or */
+ /* window position, window bytes to copy */
+ unsigned len; /* match length, unused bytes */
+ unsigned dist; /* match distance */
+ unsigned char FAR *from; /* where to copy match from */
+
+ /* copy state to local variables */
+ state = (struct inflate_state FAR *)strm->state;
+ in = strm->next_in - OFF;
+ last = in + (strm->avail_in - 5);
+ out = strm->next_out - OFF;
+ beg = out - (start - strm->avail_out);
+ end = out + (strm->avail_out - 257);
+#ifdef INFLATE_STRICT
+ dmax = state->dmax;
+#endif
+ wsize = state->wsize;
+ whave = state->whave;
+ wnext = state->wnext;
+ window = state->window;
+ hold = state->hold;
+ bits = state->bits;
+ lcode = state->lencode;
+ dcode = state->distcode;
+ lmask = (1U << state->lenbits) - 1;
+ dmask = (1U << state->distbits) - 1;
+
+ /* decode literals and length/distances until end-of-block or not enough
+ input data or output space */
+ do {
+ if (bits < 15) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ here = lcode[hold & lmask];
+ dolen:
+ op = (unsigned)(here.bits);
+ hold >>= op;
+ bits -= op;
+ op = (unsigned)(here.op);
+ if (op == 0) { /* literal */
+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ "inflate: literal '%c'\n" :
+ "inflate: literal 0x%02x\n", here.val));
+ PUP(out) = (unsigned char)(here.val);
+ }
+ else if (op & 16) { /* length base */
+ len = (unsigned)(here.val);
+ op &= 15; /* number of extra bits */
+ if (op) {
+ if (bits < op) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ len += (unsigned)hold & ((1U << op) - 1);
+ hold >>= op;
+ bits -= op;
+ }
+ Tracevv((stderr, "inflate: length %u\n", len));
+ if (bits < 15) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ here = dcode[hold & dmask];
+ dodist:
+ op = (unsigned)(here.bits);
+ hold >>= op;
+ bits -= op;
+ op = (unsigned)(here.op);
+ if (op & 16) { /* distance base */
+ dist = (unsigned)(here.val);
+ op &= 15; /* number of extra bits */
+ if (bits < op) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ if (bits < op) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ }
+ dist += (unsigned)hold & ((1U << op) - 1);
+#ifdef INFLATE_STRICT
+ if (dist > dmax) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ hold >>= op;
+ bits -= op;
+ Tracevv((stderr, "inflate: distance %u\n", dist));
+ op = (unsigned)(out - beg); /* max distance in output */
+ if (dist > op) { /* see if copy from window */
+ op = dist - op; /* distance back in window */
+ if (op > whave) {
+ if (state->sane) {
+ strm->msg =
+ (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ if (len <= op - whave) {
+ do {
+ PUP(out) = 0;
+ } while (--len);
+ continue;
+ }
+ len -= op - whave;
+ do {
+ PUP(out) = 0;
+ } while (--op > whave);
+ if (op == 0) {
+ from = out - dist;
+ do {
+ PUP(out) = PUP(from);
+ } while (--len);
+ continue;
+ }
+#endif
+ }
+ from = window - OFF;
+ if (wnext == 0) { /* very common case */
+ from += wsize - op;
+ if (op < len) { /* some from window */
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ else if (wnext < op) { /* wrap around window */
+ from += wsize + wnext - op;
+ op -= wnext;
+ if (op < len) { /* some from end of window */
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = window - OFF;
+ if (wnext < len) { /* some from start of window */
+ op = wnext;
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ }
+ else { /* contiguous in window */
+ from += wnext - op;
+ if (op < len) { /* some from window */
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ while (len > 2) {
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ len -= 3;
+ }
+ if (len) {
+ PUP(out) = PUP(from);
+ if (len > 1)
+ PUP(out) = PUP(from);
+ }
+ }
+ else {
+ from = out - dist; /* copy direct from output */
+ do { /* minimum length is three */
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ len -= 3;
+ } while (len > 2);
+ if (len) {
+ PUP(out) = PUP(from);
+ if (len > 1)
+ PUP(out) = PUP(from);
+ }
+ }
+ }
+ else if ((op & 64) == 0) { /* 2nd level distance code */
+ here = dcode[here.val + (hold & ((1U << op) - 1))];
+ goto dodist;
+ }
+ else {
+ strm->msg = (char *)"invalid distance code";
+ state->mode = BAD;
+ break;
+ }
+ }
+ else if ((op & 64) == 0) { /* 2nd level length code */
+ here = lcode[here.val + (hold & ((1U << op) - 1))];
+ goto dolen;
+ }
+ else if (op & 32) { /* end-of-block */
+ Tracevv((stderr, "inflate: end of block\n"));
+ state->mode = TYPE;
+ break;
+ }
+ else {
+ strm->msg = (char *)"invalid literal/length code";
+ state->mode = BAD;
+ break;
+ }
+ } while (in < last && out < end);
+
+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+ len = bits >> 3;
+ in -= len;
+ bits -= len << 3;
+ hold &= (1U << bits) - 1;
+
+ /* update state and return */
+ strm->next_in = in + OFF;
+ strm->next_out = out + OFF;
+ strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
+ strm->avail_out = (unsigned)(out < end ?
+ 257 + (end - out) : 257 - (out - end));
+ state->hold = hold;
+ state->bits = bits;
+ return;
+}
+
+/*
+ inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
+ - Using bit fields for code structure
+ - Different op definition to avoid & for extra bits (do & for table bits)
+ - Three separate decoding do-loops for direct, window, and wnext == 0
+ - Special case for distance > 1 copies to do overlapped load and store copy
+ - Explicit branch predictions (based on measured branch probabilities)
+ - Deferring match copy and interspersed it with decoding subsequent codes
+ - Swapping literal/length else
+ - Swapping window/direct else
+ - Larger unrolled copy loops (three is about right)
+ - Moving len -= 3 statement into middle of loop
+ */
+
+#endif /* !ASMINF */
diff --git a/libs/ext/zlib/inffast.h b/libs/ext/zlib/inffast.h
new file mode 100644
index 0000000..e5c1aa4
--- /dev/null
+++ b/libs/ext/zlib/inffast.h
@@ -0,0 +1,11 @@
+/* inffast.h -- header to use inffast.c
+ * Copyright (C) 1995-2003, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
diff --git a/libs/ext/zlib/inffixed.h b/libs/ext/zlib/inffixed.h
new file mode 100644
index 0000000..d628327
--- /dev/null
+++ b/libs/ext/zlib/inffixed.h
@@ -0,0 +1,94 @@
+ /* inffixed.h -- table for decoding fixed codes
+ * Generated automatically by makefixed().
+ */
+
+ /* WARNING: this file should *not* be used by applications.
+ It is part of the implementation of this library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+ static const code lenfix[512] = {
+ {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
+ {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
+ {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
+ {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
+ {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
+ {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
+ {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
+ {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
+ {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
+ {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
+ {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
+ {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
+ {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
+ {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
+ {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
+ {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
+ {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
+ {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
+ {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
+ {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
+ {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
+ {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
+ {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
+ {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
+ {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
+ {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
+ {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
+ {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
+ {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
+ {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
+ {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
+ {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
+ {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
+ {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
+ {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
+ {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
+ {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
+ {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
+ {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
+ {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
+ {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
+ {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
+ {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
+ {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
+ {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
+ {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
+ {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
+ {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
+ {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
+ {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
+ {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
+ {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
+ {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
+ {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
+ {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
+ {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
+ {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
+ {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
+ {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
+ {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
+ {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
+ {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
+ {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
+ {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
+ {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
+ {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
+ {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
+ {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
+ {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
+ {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
+ {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
+ {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
+ {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
+ {0,9,255}
+ };
+
+ static const code distfix[32] = {
+ {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
+ {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
+ {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
+ {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
+ {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
+ {22,5,193},{64,5,0}
+ };
diff --git a/libs/ext/zlib/inflate.c b/libs/ext/zlib/inflate.c
new file mode 100644
index 0000000..47418a1
--- /dev/null
+++ b/libs/ext/zlib/inflate.c
@@ -0,0 +1,1496 @@
+/* inflate.c -- zlib decompression
+ * Copyright (C) 1995-2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * Change history:
+ *
+ * 1.2.beta0 24 Nov 2002
+ * - First version -- complete rewrite of inflate to simplify code, avoid
+ * creation of window when not needed, minimize use of window when it is
+ * needed, make inffast.c even faster, implement gzip decoding, and to
+ * improve code readability and style over the previous zlib inflate code
+ *
+ * 1.2.beta1 25 Nov 2002
+ * - Use pointers for available input and output checking in inffast.c
+ * - Remove input and output counters in inffast.c
+ * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
+ * - Remove unnecessary second byte pull from length extra in inffast.c
+ * - Unroll direct copy to three copies per loop in inffast.c
+ *
+ * 1.2.beta2 4 Dec 2002
+ * - Change external routine names to reduce potential conflicts
+ * - Correct filename to inffixed.h for fixed tables in inflate.c
+ * - Make hbuf[] unsigned char to match parameter type in inflate.c
+ * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
+ * to avoid negation problem on Alphas (64 bit) in inflate.c
+ *
+ * 1.2.beta3 22 Dec 2002
+ * - Add comments on state->bits assertion in inffast.c
+ * - Add comments on op field in inftrees.h
+ * - Fix bug in reuse of allocated window after inflateReset()
+ * - Remove bit fields--back to byte structure for speed
+ * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
+ * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
+ * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
+ * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
+ * - Use local copies of stream next and avail values, as well as local bit
+ * buffer and bit count in inflate()--for speed when inflate_fast() not used
+ *
+ * 1.2.beta4 1 Jan 2003
+ * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
+ * - Move a comment on output buffer sizes from inffast.c to inflate.c
+ * - Add comments in inffast.c to introduce the inflate_fast() routine
+ * - Rearrange window copies in inflate_fast() for speed and simplification
+ * - Unroll last copy for window match in inflate_fast()
+ * - Use local copies of window variables in inflate_fast() for speed
+ * - Pull out common wnext == 0 case for speed in inflate_fast()
+ * - Make op and len in inflate_fast() unsigned for consistency
+ * - Add FAR to lcode and dcode declarations in inflate_fast()
+ * - Simplified bad distance check in inflate_fast()
+ * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
+ * source file infback.c to provide a call-back interface to inflate for
+ * programs like gzip and unzip -- uses window as output buffer to avoid
+ * window copying
+ *
+ * 1.2.beta5 1 Jan 2003
+ * - Improved inflateBack() interface to allow the caller to provide initial
+ * input in strm.
+ * - Fixed stored blocks bug in inflateBack()
+ *
+ * 1.2.beta6 4 Jan 2003
+ * - Added comments in inffast.c on effectiveness of POSTINC
+ * - Typecasting all around to reduce compiler warnings
+ * - Changed loops from while (1) or do {} while (1) to for (;;), again to
+ * make compilers happy
+ * - Changed type of window in inflateBackInit() to unsigned char *
+ *
+ * 1.2.beta7 27 Jan 2003
+ * - Changed many types to unsigned or unsigned short to avoid warnings
+ * - Added inflateCopy() function
+ *
+ * 1.2.0 9 Mar 2003
+ * - Changed inflateBack() interface to provide separate opaque descriptors
+ * for the in() and out() functions
+ * - Changed inflateBack() argument and in_func typedef to swap the length
+ * and buffer address return values for the input function
+ * - Check next_in and next_out for Z_NULL on entry to inflate()
+ *
+ * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifdef MAKEFIXED
+# ifndef BUILDFIXED
+# define BUILDFIXED
+# endif
+#endif
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+local int updatewindow OF((z_streamp strm, unsigned out));
+#ifdef BUILDFIXED
+ void makefixed OF((void));
+#endif
+local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
+ unsigned len));
+
+int ZEXPORT inflateResetKeep(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ strm->total_in = strm->total_out = state->total = 0;
+ strm->msg = Z_NULL;
+ if (state->wrap) /* to support ill-conceived Java test suite */
+ strm->adler = state->wrap & 1;
+ state->mode = HEAD;
+ state->last = 0;
+ state->havedict = 0;
+ state->dmax = 32768U;
+ state->head = Z_NULL;
+ state->hold = 0;
+ state->bits = 0;
+ state->lencode = state->distcode = state->next = state->codes;
+ state->sane = 1;
+ state->back = -1;
+ Tracev((stderr, "inflate: reset\n"));
+ return Z_OK;
+}
+
+int ZEXPORT inflateReset(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ state->wsize = 0;
+ state->whave = 0;
+ state->wnext = 0;
+ return inflateResetKeep(strm);
+}
+
+int ZEXPORT inflateReset2(strm, windowBits)
+z_streamp strm;
+int windowBits;
+{
+ int wrap;
+ struct inflate_state FAR *state;
+
+ /* get the state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* extract wrap request from windowBits parameter */
+ if (windowBits < 0) {
+ wrap = 0;
+ windowBits = -windowBits;
+ }
+ else {
+ wrap = (windowBits >> 4) + 1;
+#ifdef GUNZIP
+ if (windowBits < 48)
+ windowBits &= 15;
+#endif
+ }
+
+ /* set number of window bits, free window if different */
+ if (windowBits && (windowBits < 8 || windowBits > 15))
+ return Z_STREAM_ERROR;
+ if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
+ ZFREE(strm, state->window);
+ state->window = Z_NULL;
+ }
+
+ /* update state and reset the rest of it */
+ state->wrap = wrap;
+ state->wbits = (unsigned)windowBits;
+ return inflateReset(strm);
+}
+
+int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
+z_streamp strm;
+int windowBits;
+const char *version;
+int stream_size;
+{
+ int ret;
+ struct inflate_state FAR *state;
+
+ if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+ stream_size != (int)(sizeof(z_stream)))
+ return Z_VERSION_ERROR;
+ if (strm == Z_NULL) return Z_STREAM_ERROR;
+ strm->msg = Z_NULL; /* in case we return an error */
+ if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zalloc = zcalloc;
+ strm->opaque = (voidpf)0;
+#endif
+ }
+ if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zfree = zcfree;
+#endif
+ state = (struct inflate_state FAR *)
+ ZALLOC(strm, 1, sizeof(struct inflate_state));
+ if (state == Z_NULL) return Z_MEM_ERROR;
+ Tracev((stderr, "inflate: allocated\n"));
+ strm->state = (struct internal_state FAR *)state;
+ state->window = Z_NULL;
+ ret = inflateReset2(strm, windowBits);
+ if (ret != Z_OK) {
+ ZFREE(strm, state);
+ strm->state = Z_NULL;
+ }
+ return ret;
+}
+
+int ZEXPORT inflateInit_(strm, version, stream_size)
+z_streamp strm;
+const char *version;
+int stream_size;
+{
+ return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+}
+
+int ZEXPORT inflatePrime(strm, bits, value)
+z_streamp strm;
+int bits;
+int value;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (bits < 0) {
+ state->hold = 0;
+ state->bits = 0;
+ return Z_OK;
+ }
+ if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+ value &= (1L << bits) - 1;
+ state->hold += value << state->bits;
+ state->bits += bits;
+ return Z_OK;
+}
+
+/*
+ Return state with length and distance decoding tables and index sizes set to
+ fixed code decoding. Normally this returns fixed tables from inffixed.h.
+ If BUILDFIXED is defined, then instead this routine builds the tables the
+ first time it's called, and returns those tables the first time and
+ thereafter. This reduces the size of the code by about 2K bytes, in
+ exchange for a little execution time. However, BUILDFIXED should not be
+ used for threaded applications, since the rewriting of the tables and virgin
+ may not be thread-safe.
+ */
+local void fixedtables(state)
+struct inflate_state FAR *state;
+{
+#ifdef BUILDFIXED
+ static int virgin = 1;
+ static code *lenfix, *distfix;
+ static code fixed[544];
+
+ /* build fixed huffman tables if first call (may not be thread safe) */
+ if (virgin) {
+ unsigned sym, bits;
+ static code *next;
+
+ /* literal/length table */
+ sym = 0;
+ while (sym < 144) state->lens[sym++] = 8;
+ while (sym < 256) state->lens[sym++] = 9;
+ while (sym < 280) state->lens[sym++] = 7;
+ while (sym < 288) state->lens[sym++] = 8;
+ next = fixed;
+ lenfix = next;
+ bits = 9;
+ inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+ /* distance table */
+ sym = 0;
+ while (sym < 32) state->lens[sym++] = 5;
+ distfix = next;
+ bits = 5;
+ inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+ /* do this just once */
+ virgin = 0;
+ }
+#else /* !BUILDFIXED */
+# include "inffixed.h"
+#endif /* BUILDFIXED */
+ state->lencode = lenfix;
+ state->lenbits = 9;
+ state->distcode = distfix;
+ state->distbits = 5;
+}
+
+#ifdef MAKEFIXED
+#include <stdio.h>
+
+/*
+ Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also
+ defines BUILDFIXED, so the tables are built on the fly. makefixed() writes
+ those tables to stdout, which would be piped to inffixed.h. A small program
+ can simply call makefixed to do this:
+
+ void makefixed(void);
+
+ int main(void)
+ {
+ makefixed();
+ return 0;
+ }
+
+ Then that can be linked with zlib built with MAKEFIXED defined and run:
+
+ a.out > inffixed.h
+ */
+void makefixed()
+{
+ unsigned low, size;
+ struct inflate_state state;
+
+ fixedtables(&state);
+ puts(" /* inffixed.h -- table for decoding fixed codes");
+ puts(" * Generated automatically by makefixed().");
+ puts(" */");
+ puts("");
+ puts(" /* WARNING: this file should *not* be used by applications.");
+ puts(" It is part of the implementation of this library and is");
+ puts(" subject to change. Applications should only use zlib.h.");
+ puts(" */");
+ puts("");
+ size = 1U << 9;
+ printf(" static const code lenfix[%u] = {", size);
+ low = 0;
+ for (;;) {
+ if ((low % 7) == 0) printf("\n ");
+ printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
+ state.lencode[low].bits, state.lencode[low].val);
+ if (++low == size) break;
+ putchar(',');
+ }
+ puts("\n };");
+ size = 1U << 5;
+ printf("\n static const code distfix[%u] = {", size);
+ low = 0;
+ for (;;) {
+ if ((low % 6) == 0) printf("\n ");
+ printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
+ state.distcode[low].val);
+ if (++low == size) break;
+ putchar(',');
+ }
+ puts("\n };");
+}
+#endif /* MAKEFIXED */
+
+/*
+ Update the window with the last wsize (normally 32K) bytes written before
+ returning. If window does not exist yet, create it. This is only called
+ when a window is already in use, or when output has been written during this
+ inflate call, but the end of the deflate stream has not been reached yet.
+ It is also called to create a window for dictionary data when a dictionary
+ is loaded.
+
+ Providing output buffers larger than 32K to inflate() should provide a speed
+ advantage, since only the last 32K of output is copied to the sliding window
+ upon return from inflate(), and since all distances after the first 32K of
+ output will fall in the output data, making match copies simpler and faster.
+ The advantage may be dependent on the size of the processor's data caches.
+ */
+local int updatewindow(strm, out)
+z_streamp strm;
+unsigned out;
+{
+ struct inflate_state FAR *state;
+ unsigned copy, dist;
+
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* if it hasn't been done already, allocate space for the window */
+ if (state->window == Z_NULL) {
+ state->window = (unsigned char FAR *)
+ ZALLOC(strm, 1U << state->wbits,
+ sizeof(unsigned char));
+ if (state->window == Z_NULL) return 1;
+ }
+
+ /* if window not in use yet, initialize */
+ if (state->wsize == 0) {
+ state->wsize = 1U << state->wbits;
+ state->wnext = 0;
+ state->whave = 0;
+ }
+
+ /* copy state->wsize or less output bytes into the circular window */
+ copy = out - strm->avail_out;
+ if (copy >= state->wsize) {
+ zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
+ state->wnext = 0;
+ state->whave = state->wsize;
+ }
+ else {
+ dist = state->wsize - state->wnext;
+ if (dist > copy) dist = copy;
+ zmemcpy(state->window + state->wnext, strm->next_out - copy, dist);
+ copy -= dist;
+ if (copy) {
+ zmemcpy(state->window, strm->next_out - copy, copy);
+ state->wnext = copy;
+ state->whave = state->wsize;
+ }
+ else {
+ state->wnext += dist;
+ if (state->wnext == state->wsize) state->wnext = 0;
+ if (state->whave < state->wsize) state->whave += dist;
+ }
+ }
+ return 0;
+}
+
+/* Macros for inflate(): */
+
+/* check function to use adler32() for zlib or crc32() for gzip */
+#ifdef GUNZIP
+# define UPDATE(check, buf, len) \
+ (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
+#else
+# define UPDATE(check, buf, len) adler32(check, buf, len)
+#endif
+
+/* check macros for header crc */
+#ifdef GUNZIP
+# define CRC2(check, word) \
+ do { \
+ hbuf[0] = (unsigned char)(word); \
+ hbuf[1] = (unsigned char)((word) >> 8); \
+ check = crc32(check, hbuf, 2); \
+ } while (0)
+
+# define CRC4(check, word) \
+ do { \
+ hbuf[0] = (unsigned char)(word); \
+ hbuf[1] = (unsigned char)((word) >> 8); \
+ hbuf[2] = (unsigned char)((word) >> 16); \
+ hbuf[3] = (unsigned char)((word) >> 24); \
+ check = crc32(check, hbuf, 4); \
+ } while (0)
+#endif
+
+/* Load registers with state in inflate() for speed */
+#define LOAD() \
+ do { \
+ put = strm->next_out; \
+ left = strm->avail_out; \
+ next = strm->next_in; \
+ have = strm->avail_in; \
+ hold = state->hold; \
+ bits = state->bits; \
+ } while (0)
+
+/* Restore state from registers in inflate() */
+#define RESTORE() \
+ do { \
+ strm->next_out = put; \
+ strm->avail_out = left; \
+ strm->next_in = next; \
+ strm->avail_in = have; \
+ state->hold = hold; \
+ state->bits = bits; \
+ } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+ do { \
+ hold = 0; \
+ bits = 0; \
+ } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflate()
+ if there is no input available. */
+#define PULLBYTE() \
+ do { \
+ if (have == 0) goto inf_leave; \
+ have--; \
+ hold += (unsigned long)(*next++) << bits; \
+ bits += 8; \
+ } while (0)
+
+/* Assure that there are at least n bits in the bit accumulator. If there is
+ not enough available input to do that, then return from inflate(). */
+#define NEEDBITS(n) \
+ do { \
+ while (bits < (unsigned)(n)) \
+ PULLBYTE(); \
+ } while (0)
+
+/* Return the low n bits of the bit accumulator (n < 16) */
+#define BITS(n) \
+ ((unsigned)hold & ((1U << (n)) - 1))
+
+/* Remove n bits from the bit accumulator */
+#define DROPBITS(n) \
+ do { \
+ hold >>= (n); \
+ bits -= (unsigned)(n); \
+ } while (0)
+
+/* Remove zero to seven bits as needed to go to a byte boundary */
+#define BYTEBITS() \
+ do { \
+ hold >>= bits & 7; \
+ bits -= bits & 7; \
+ } while (0)
+
+/*
+ inflate() uses a state machine to process as much input data and generate as
+ much output data as possible before returning. The state machine is
+ structured roughly as follows:
+
+ for (;;) switch (state) {
+ ...
+ case STATEn:
+ if (not enough input data or output space to make progress)
+ return;
+ ... make progress ...
+ state = STATEm;
+ break;
+ ...
+ }
+
+ so when inflate() is called again, the same case is attempted again, and
+ if the appropriate resources are provided, the machine proceeds to the
+ next state. The NEEDBITS() macro is usually the way the state evaluates
+ whether it can proceed or should return. NEEDBITS() does the return if
+ the requested bits are not available. The typical use of the BITS macros
+ is:
+
+ NEEDBITS(n);
+ ... do something with BITS(n) ...
+ DROPBITS(n);
+
+ where NEEDBITS(n) either returns from inflate() if there isn't enough
+ input left to load n bits into the accumulator, or it continues. BITS(n)
+ gives the low n bits in the accumulator. When done, DROPBITS(n) drops
+ the low n bits off the accumulator. INITBITS() clears the accumulator
+ and sets the number of available bits to zero. BYTEBITS() discards just
+ enough bits to put the accumulator on a byte boundary. After BYTEBITS()
+ and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
+
+ NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
+ if there is no input available. The decoding of variable length codes uses
+ PULLBYTE() directly in order to pull just enough bytes to decode the next
+ code, and no more.
+
+ Some states loop until they get enough input, making sure that enough
+ state information is maintained to continue the loop where it left off
+ if NEEDBITS() returns in the loop. For example, want, need, and keep
+ would all have to actually be part of the saved state in case NEEDBITS()
+ returns:
+
+ case STATEw:
+ while (want < need) {
+ NEEDBITS(n);
+ keep[want++] = BITS(n);
+ DROPBITS(n);
+ }
+ state = STATEx;
+ case STATEx:
+
+ As shown above, if the next state is also the next case, then the break
+ is omitted.
+
+ A state may also return if there is not enough output space available to
+ complete that state. Those states are copying stored data, writing a
+ literal byte, and copying a matching string.
+
+ When returning, a "goto inf_leave" is used to update the total counters,
+ update the check value, and determine whether any progress has been made
+ during that inflate() call in order to return the proper return code.
+ Progress is defined as a change in either strm->avail_in or strm->avail_out.
+ When there is a window, goto inf_leave will update the window with the last
+ output written. If a goto inf_leave occurs in the middle of decompression
+ and there is no window currently, goto inf_leave will create one and copy
+ output to the window for the next call of inflate().
+
+ In this implementation, the flush parameter of inflate() only affects the
+ return code (per zlib.h). inflate() always writes as much as possible to
+ strm->next_out, given the space available and the provided input--the effect
+ documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers
+ the allocation of and copying into a sliding window until necessary, which
+ provides the effect documented in zlib.h for Z_FINISH when the entire input
+ stream available. So the only thing the flush parameter actually does is:
+ when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it
+ will return Z_BUF_ERROR if it has not reached the end of the stream.
+ */
+
+int ZEXPORT inflate(strm, flush)
+z_streamp strm;
+int flush;
+{
+ struct inflate_state FAR *state;
+ unsigned char FAR *next; /* next input */
+ unsigned char FAR *put; /* next output */
+ unsigned have, left; /* available input and output */
+ unsigned long hold; /* bit buffer */
+ unsigned bits; /* bits in bit buffer */
+ unsigned in, out; /* save starting available input and output */
+ unsigned copy; /* number of stored or match bytes to copy */
+ unsigned char FAR *from; /* where to copy match bytes from */
+ code here; /* current decoding table entry */
+ code last; /* parent table entry */
+ unsigned len; /* length to copy for repeats, bits to drop */
+ int ret; /* return code */
+#ifdef GUNZIP
+ unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
+#endif
+ static const unsigned short order[19] = /* permutation of code lengths */
+ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+ (strm->next_in == Z_NULL && strm->avail_in != 0))
+ return Z_STREAM_ERROR;
+
+ state = (struct inflate_state FAR *)strm->state;
+ if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
+ LOAD();
+ in = have;
+ out = left;
+ ret = Z_OK;
+ for (;;)
+ switch (state->mode) {
+ case HEAD:
+ if (state->wrap == 0) {
+ state->mode = TYPEDO;
+ break;
+ }
+ NEEDBITS(16);
+#ifdef GUNZIP
+ if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
+ state->check = crc32(0L, Z_NULL, 0);
+ CRC2(state->check, hold);
+ INITBITS();
+ state->mode = FLAGS;
+ break;
+ }
+ state->flags = 0; /* expect zlib header */
+ if (state->head != Z_NULL)
+ state->head->done = -1;
+ if (!(state->wrap & 1) || /* check if zlib header allowed */
+#else
+ if (
+#endif
+ ((BITS(8) << 8) + (hold >> 8)) % 31) {
+ strm->msg = (char *)"incorrect header check";
+ state->mode = BAD;
+ break;
+ }
+ if (BITS(4) != Z_DEFLATED) {
+ strm->msg = (char *)"unknown compression method";
+ state->mode = BAD;
+ break;
+ }
+ DROPBITS(4);
+ len = BITS(4) + 8;
+ if (state->wbits == 0)
+ state->wbits = len;
+ else if (len > state->wbits) {
+ strm->msg = (char *)"invalid window size";
+ state->mode = BAD;
+ break;
+ }
+ state->dmax = 1U << len;
+ Tracev((stderr, "inflate: zlib header ok\n"));
+ strm->adler = state->check = adler32(0L, Z_NULL, 0);
+ state->mode = hold & 0x200 ? DICTID : TYPE;
+ INITBITS();
+ break;
+#ifdef GUNZIP
+ case FLAGS:
+ NEEDBITS(16);
+ state->flags = (int)(hold);
+ if ((state->flags & 0xff) != Z_DEFLATED) {
+ strm->msg = (char *)"unknown compression method";
+ state->mode = BAD;
+ break;
+ }
+ if (state->flags & 0xe000) {
+ strm->msg = (char *)"unknown header flags set";
+ state->mode = BAD;
+ break;
+ }
+ if (state->head != Z_NULL)
+ state->head->text = (int)((hold >> 8) & 1);
+ if (state->flags & 0x0200) CRC2(state->check, hold);
+ INITBITS();
+ state->mode = TIME;
+ case TIME:
+ NEEDBITS(32);
+ if (state->head != Z_NULL)
+ state->head->time = hold;
+ if (state->flags & 0x0200) CRC4(state->check, hold);
+ INITBITS();
+ state->mode = OS;
+ case OS:
+ NEEDBITS(16);
+ if (state->head != Z_NULL) {
+ state->head->xflags = (int)(hold & 0xff);
+ state->head->os = (int)(hold >> 8);
+ }
+ if (state->flags & 0x0200) CRC2(state->check, hold);
+ INITBITS();
+ state->mode = EXLEN;
+ case EXLEN:
+ if (state->flags & 0x0400) {
+ NEEDBITS(16);
+ state->length = (unsigned)(hold);
+ if (state->head != Z_NULL)
+ state->head->extra_len = (unsigned)hold;
+ if (state->flags & 0x0200) CRC2(state->check, hold);
+ INITBITS();
+ }
+ else if (state->head != Z_NULL)
+ state->head->extra = Z_NULL;
+ state->mode = EXTRA;
+ case EXTRA:
+ if (state->flags & 0x0400) {
+ copy = state->length;
+ if (copy > have) copy = have;
+ if (copy) {
+ if (state->head != Z_NULL &&
+ state->head->extra != Z_NULL) {
+ len = state->head->extra_len - state->length;
+ zmemcpy(state->head->extra + len, next,
+ len + copy > state->head->extra_max ?
+ state->head->extra_max - len : copy);
+ }
+ if (state->flags & 0x0200)
+ state->check = crc32(state->check, next, copy);
+ have -= copy;
+ next += copy;
+ state->length -= copy;
+ }
+ if (state->length) goto inf_leave;
+ }
+ state->length = 0;
+ state->mode = NAME;
+ case NAME:
+ if (state->flags & 0x0800) {
+ if (have == 0) goto inf_leave;
+ copy = 0;
+ do {
+ len = (unsigned)(next[copy++]);
+ if (state->head != Z_NULL &&
+ state->head->name != Z_NULL &&
+ state->length < state->head->name_max)
+ state->head->name[state->length++] = len;
+ } while (len && copy < have);
+ if (state->flags & 0x0200)
+ state->check = crc32(state->check, next, copy);
+ have -= copy;
+ next += copy;
+ if (len) goto inf_leave;
+ }
+ else if (state->head != Z_NULL)
+ state->head->name = Z_NULL;
+ state->length = 0;
+ state->mode = COMMENT;
+ case COMMENT:
+ if (state->flags & 0x1000) {
+ if (have == 0) goto inf_leave;
+ copy = 0;
+ do {
+ len = (unsigned)(next[copy++]);
+ if (state->head != Z_NULL &&
+ state->head->comment != Z_NULL &&
+ state->length < state->head->comm_max)
+ state->head->comment[state->length++] = len;
+ } while (len && copy < have);
+ if (state->flags & 0x0200)
+ state->check = crc32(state->check, next, copy);
+ have -= copy;
+ next += copy;
+ if (len) goto inf_leave;
+ }
+ else if (state->head != Z_NULL)
+ state->head->comment = Z_NULL;
+ state->mode = HCRC;
+ case HCRC:
+ if (state->flags & 0x0200) {
+ NEEDBITS(16);
+ if (hold != (state->check & 0xffff)) {
+ strm->msg = (char *)"header crc mismatch";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ }
+ if (state->head != Z_NULL) {
+ state->head->hcrc = (int)((state->flags >> 9) & 1);
+ state->head->done = 1;
+ }
+ strm->adler = state->check = crc32(0L, Z_NULL, 0);
+ state->mode = TYPE;
+ break;
+#endif
+ case DICTID:
+ NEEDBITS(32);
+ strm->adler = state->check = ZSWAP32(hold);
+ INITBITS();
+ state->mode = DICT;
+ case DICT:
+ if (state->havedict == 0) {
+ RESTORE();
+ return Z_NEED_DICT;
+ }
+ strm->adler = state->check = adler32(0L, Z_NULL, 0);
+ state->mode = TYPE;
+ case TYPE:
+ if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+ case TYPEDO:
+ if (state->last) {
+ BYTEBITS();
+ state->mode = CHECK;
+ break;
+ }
+ NEEDBITS(3);
+ state->last = BITS(1);
+ DROPBITS(1);
+ switch (BITS(2)) {
+ case 0: /* stored block */
+ Tracev((stderr, "inflate: stored block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = STORED;
+ break;
+ case 1: /* fixed block */
+ fixedtables(state);
+ Tracev((stderr, "inflate: fixed codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = LEN_; /* decode codes */
+ if (flush == Z_TREES) {
+ DROPBITS(2);
+ goto inf_leave;
+ }
+ break;
+ case 2: /* dynamic block */
+ Tracev((stderr, "inflate: dynamic codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = TABLE;
+ break;
+ case 3:
+ strm->msg = (char *)"invalid block type";
+ state->mode = BAD;
+ }
+ DROPBITS(2);
+ break;
+ case STORED:
+ BYTEBITS(); /* go to byte boundary */
+ NEEDBITS(32);
+ if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+ strm->msg = (char *)"invalid stored block lengths";
+ state->mode = BAD;
+ break;
+ }
+ state->length = (unsigned)hold & 0xffff;
+ Tracev((stderr, "inflate: stored length %u\n",
+ state->length));
+ INITBITS();
+ state->mode = COPY_;
+ if (flush == Z_TREES) goto inf_leave;
+ case COPY_:
+ state->mode = COPY;
+ case COPY:
+ copy = state->length;
+ if (copy) {
+ if (copy > have) copy = have;
+ if (copy > left) copy = left;
+ if (copy == 0) goto inf_leave;
+ zmemcpy(put, next, copy);
+ have -= copy;
+ next += copy;
+ left -= copy;
+ put += copy;
+ state->length -= copy;
+ break;
+ }
+ Tracev((stderr, "inflate: stored end\n"));
+ state->mode = TYPE;
+ break;
+ case TABLE:
+ NEEDBITS(14);
+ state->nlen = BITS(5) + 257;
+ DROPBITS(5);
+ state->ndist = BITS(5) + 1;
+ DROPBITS(5);
+ state->ncode = BITS(4) + 4;
+ DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+ if (state->nlen > 286 || state->ndist > 30) {
+ strm->msg = (char *)"too many length or distance symbols";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ Tracev((stderr, "inflate: table sizes ok\n"));
+ state->have = 0;
+ state->mode = LENLENS;
+ case LENLENS:
+ while (state->have < state->ncode) {
+ NEEDBITS(3);
+ state->lens[order[state->have++]] = (unsigned short)BITS(3);
+ DROPBITS(3);
+ }
+ while (state->have < 19)
+ state->lens[order[state->have++]] = 0;
+ state->next = state->codes;
+ state->lencode = (code const FAR *)(state->next);
+ state->lenbits = 7;
+ ret = inflate_table(CODES, state->lens, 19, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid code lengths set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: code lengths ok\n"));
+ state->have = 0;
+ state->mode = CODELENS;
+ case CODELENS:
+ while (state->have < state->nlen + state->ndist) {
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.val < 16) {
+ DROPBITS(here.bits);
+ state->lens[state->have++] = here.val;
+ }
+ else {
+ if (here.val == 16) {
+ NEEDBITS(here.bits + 2);
+ DROPBITS(here.bits);
+ if (state->have == 0) {
+ strm->msg = (char *)"invalid bit length repeat";
+ state->mode = BAD;
+ break;
+ }
+ len = state->lens[state->have - 1];
+ copy = 3 + BITS(2);
+ DROPBITS(2);
+ }
+ else if (here.val == 17) {
+ NEEDBITS(here.bits + 3);
+ DROPBITS(here.bits);
+ len = 0;
+ copy = 3 + BITS(3);
+ DROPBITS(3);
+ }
+ else {
+ NEEDBITS(here.bits + 7);
+ DROPBITS(here.bits);
+ len = 0;
+ copy = 11 + BITS(7);
+ DROPBITS(7);
+ }
+ if (state->have + copy > state->nlen + state->ndist) {
+ strm->msg = (char *)"invalid bit length repeat";
+ state->mode = BAD;
+ break;
+ }
+ while (copy--)
+ state->lens[state->have++] = (unsigned short)len;
+ }
+ }
+
+ /* handle error breaks in while */
+ if (state->mode == BAD) break;
+
+ /* check for end-of-block code (better have one) */
+ if (state->lens[256] == 0) {
+ strm->msg = (char *)"invalid code -- missing end-of-block";
+ state->mode = BAD;
+ break;
+ }
+
+ /* build code tables -- note: do not change the lenbits or distbits
+ values here (9 and 6) without reading the comments in inftrees.h
+ concerning the ENOUGH constants, which depend on those values */
+ state->next = state->codes;
+ state->lencode = (code const FAR *)(state->next);
+ state->lenbits = 9;
+ ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid literal/lengths set";
+ state->mode = BAD;
+ break;
+ }
+ state->distcode = (code const FAR *)(state->next);
+ state->distbits = 6;
+ ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+ &(state->next), &(state->distbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid distances set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: codes ok\n"));
+ state->mode = LEN_;
+ if (flush == Z_TREES) goto inf_leave;
+ case LEN_:
+ state->mode = LEN;
+ case LEN:
+ if (have >= 6 && left >= 258) {
+ RESTORE();
+ inflate_fast(strm, out);
+ LOAD();
+ if (state->mode == TYPE)
+ state->back = -1;
+ break;
+ }
+ state->back = 0;
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.op && (here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->lencode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ state->back += last.bits;
+ }
+ DROPBITS(here.bits);
+ state->back += here.bits;
+ state->length = (unsigned)here.val;
+ if ((int)(here.op) == 0) {
+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ "inflate: literal '%c'\n" :
+ "inflate: literal 0x%02x\n", here.val));
+ state->mode = LIT;
+ break;
+ }
+ if (here.op & 32) {
+ Tracevv((stderr, "inflate: end of block\n"));
+ state->back = -1;
+ state->mode = TYPE;
+ break;
+ }
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid literal/length code";
+ state->mode = BAD;
+ break;
+ }
+ state->extra = (unsigned)(here.op) & 15;
+ state->mode = LENEXT;
+ case LENEXT:
+ if (state->extra) {
+ NEEDBITS(state->extra);
+ state->length += BITS(state->extra);
+ DROPBITS(state->extra);
+ state->back += state->extra;
+ }
+ Tracevv((stderr, "inflate: length %u\n", state->length));
+ state->was = state->length;
+ state->mode = DIST;
+ case DIST:
+ for (;;) {
+ here = state->distcode[BITS(state->distbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if ((here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->distcode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ state->back += last.bits;
+ }
+ DROPBITS(here.bits);
+ state->back += here.bits;
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid distance code";
+ state->mode = BAD;
+ break;
+ }
+ state->offset = (unsigned)here.val;
+ state->extra = (unsigned)(here.op) & 15;
+ state->mode = DISTEXT;
+ case DISTEXT:
+ if (state->extra) {
+ NEEDBITS(state->extra);
+ state->offset += BITS(state->extra);
+ DROPBITS(state->extra);
+ state->back += state->extra;
+ }
+#ifdef INFLATE_STRICT
+ if (state->offset > state->dmax) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ Tracevv((stderr, "inflate: distance %u\n", state->offset));
+ state->mode = MATCH;
+ case MATCH:
+ if (left == 0) goto inf_leave;
+ copy = out - left;
+ if (state->offset > copy) { /* copy from window */
+ copy = state->offset - copy;
+ if (copy > state->whave) {
+ if (state->sane) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ Trace((stderr, "inflate.c too far\n"));
+ copy -= state->whave;
+ if (copy > state->length) copy = state->length;
+ if (copy > left) copy = left;
+ left -= copy;
+ state->length -= copy;
+ do {
+ *put++ = 0;
+ } while (--copy);
+ if (state->length == 0) state->mode = LEN;
+ break;
+#endif
+ }
+ if (copy > state->wnext) {
+ copy -= state->wnext;
+ from = state->window + (state->wsize - copy);
+ }
+ else
+ from = state->window + (state->wnext - copy);
+ if (copy > state->length) copy = state->length;
+ }
+ else { /* copy from output */
+ from = put - state->offset;
+ copy = state->length;
+ }
+ if (copy > left) copy = left;
+ left -= copy;
+ state->length -= copy;
+ do {
+ *put++ = *from++;
+ } while (--copy);
+ if (state->length == 0) state->mode = LEN;
+ break;
+ case LIT:
+ if (left == 0) goto inf_leave;
+ *put++ = (unsigned char)(state->length);
+ left--;
+ state->mode = LEN;
+ break;
+ case CHECK:
+ if (state->wrap) {
+ NEEDBITS(32);
+ out -= left;
+ strm->total_out += out;
+ state->total += out;
+ if (out)
+ strm->adler = state->check =
+ UPDATE(state->check, put - out, out);
+ out = left;
+ if ((
+#ifdef GUNZIP
+ state->flags ? hold :
+#endif
+ ZSWAP32(hold)) != state->check) {
+ strm->msg = (char *)"incorrect data check";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ Tracev((stderr, "inflate: check matches trailer\n"));
+ }
+#ifdef GUNZIP
+ state->mode = LENGTH;
+ case LENGTH:
+ if (state->wrap && state->flags) {
+ NEEDBITS(32);
+ if (hold != (state->total & 0xffffffffUL)) {
+ strm->msg = (char *)"incorrect length check";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ Tracev((stderr, "inflate: length matches trailer\n"));
+ }
+#endif
+ state->mode = DONE;
+ case DONE:
+ ret = Z_STREAM_END;
+ goto inf_leave;
+ case BAD:
+ ret = Z_DATA_ERROR;
+ goto inf_leave;
+ case MEM:
+ return Z_MEM_ERROR;
+ case SYNC:
+ default:
+ return Z_STREAM_ERROR;
+ }
+
+ /*
+ Return from inflate(), updating the total counts and the check value.
+ If there was no progress during the inflate() call, return a buffer
+ error. Call updatewindow() to create and/or update the window state.
+ Note: a memory error from inflate() is non-recoverable.
+ */
+ inf_leave:
+ RESTORE();
+ if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
+ (state->mode < CHECK || flush != Z_FINISH)))
+ if (updatewindow(strm, out)) {
+ state->mode = MEM;
+ return Z_MEM_ERROR;
+ }
+ in -= strm->avail_in;
+ out -= strm->avail_out;
+ strm->total_in += in;
+ strm->total_out += out;
+ state->total += out;
+ if (state->wrap && out)
+ strm->adler = state->check =
+ UPDATE(state->check, strm->next_out - out, out);
+ strm->data_type = state->bits + (state->last ? 64 : 0) +
+ (state->mode == TYPE ? 128 : 0) +
+ (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
+ if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
+ ret = Z_BUF_ERROR;
+ return ret;
+}
+
+int ZEXPORT inflateEnd(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+ return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (state->window != Z_NULL) ZFREE(strm, state->window);
+ ZFREE(strm, strm->state);
+ strm->state = Z_NULL;
+ Tracev((stderr, "inflate: end\n"));
+ return Z_OK;
+}
+
+int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+const Bytef *dictionary;
+uInt dictLength;
+{
+ struct inflate_state FAR *state;
+ unsigned long dictid;
+ unsigned char *next;
+ unsigned avail;
+ int ret;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (state->wrap != 0 && state->mode != DICT)
+ return Z_STREAM_ERROR;
+
+ /* check for correct dictionary identifier */
+ if (state->mode == DICT) {
+ dictid = adler32(0L, Z_NULL, 0);
+ dictid = adler32(dictid, dictionary, dictLength);
+ if (dictid != state->check)
+ return Z_DATA_ERROR;
+ }
+
+ /* copy dictionary to window using updatewindow(), which will amend the
+ existing dictionary if appropriate */
+ next = strm->next_out;
+ avail = strm->avail_out;
+ strm->next_out = (Bytef *)dictionary + dictLength;
+ strm->avail_out = 0;
+ ret = updatewindow(strm, dictLength);
+ strm->avail_out = avail;
+ strm->next_out = next;
+ if (ret) {
+ state->mode = MEM;
+ return Z_MEM_ERROR;
+ }
+ state->havedict = 1;
+ Tracev((stderr, "inflate: dictionary set\n"));
+ return Z_OK;
+}
+
+int ZEXPORT inflateGetHeader(strm, head)
+z_streamp strm;
+gz_headerp head;
+{
+ struct inflate_state FAR *state;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
+
+ /* save header structure */
+ state->head = head;
+ head->done = 0;
+ return Z_OK;
+}
+
+/*
+ Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found
+ or when out of input. When called, *have is the number of pattern bytes
+ found in order so far, in 0..3. On return *have is updated to the new
+ state. If on return *have equals four, then the pattern was found and the
+ return value is how many bytes were read including the last byte of the
+ pattern. If *have is less than four, then the pattern has not been found
+ yet and the return value is len. In the latter case, syncsearch() can be
+ called again with more data and the *have state. *have is initialized to
+ zero for the first call.
+ */
+local unsigned syncsearch(have, buf, len)
+unsigned FAR *have;
+unsigned char FAR *buf;
+unsigned len;
+{
+ unsigned got;
+ unsigned next;
+
+ got = *have;
+ next = 0;
+ while (next < len && got < 4) {
+ if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
+ got++;
+ else if (buf[next])
+ got = 0;
+ else
+ got = 4 - got;
+ next++;
+ }
+ *have = got;
+ return next;
+}
+
+int ZEXPORT inflateSync(strm)
+z_streamp strm;
+{
+ unsigned len; /* number of bytes to look at or looked at */
+ unsigned long in, out; /* temporary to save total_in and total_out */
+ unsigned char buf[4]; /* to restore bit buffer to byte string */
+ struct inflate_state FAR *state;
+
+ /* check parameters */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
+
+ /* if first time, start search in bit buffer */
+ if (state->mode != SYNC) {
+ state->mode = SYNC;
+ state->hold <<= state->bits & 7;
+ state->bits -= state->bits & 7;
+ len = 0;
+ while (state->bits >= 8) {
+ buf[len++] = (unsigned char)(state->hold);
+ state->hold >>= 8;
+ state->bits -= 8;
+ }
+ state->have = 0;
+ syncsearch(&(state->have), buf, len);
+ }
+
+ /* search available input */
+ len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
+ strm->avail_in -= len;
+ strm->next_in += len;
+ strm->total_in += len;
+
+ /* return no joy or set up to restart inflate() on a new block */
+ if (state->have != 4) return Z_DATA_ERROR;
+ in = strm->total_in; out = strm->total_out;
+ inflateReset(strm);
+ strm->total_in = in; strm->total_out = out;
+ state->mode = TYPE;
+ return Z_OK;
+}
+
+/*
+ Returns true if inflate is currently at the end of a block generated by
+ Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
+ implementation to provide an additional safety check. PPP uses
+ Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
+ block. When decompressing, PPP checks that at the end of input packet,
+ inflate is waiting for these length bytes.
+ */
+int ZEXPORT inflateSyncPoint(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ return state->mode == STORED && state->bits == 0;
+}
+
+int ZEXPORT inflateCopy(dest, source)
+z_streamp dest;
+z_streamp source;
+{
+ struct inflate_state FAR *state;
+ struct inflate_state FAR *copy;
+ unsigned char FAR *window;
+ unsigned wsize;
+
+ /* check input */
+ if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
+ source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+ return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)source->state;
+
+ /* allocate space */
+ copy = (struct inflate_state FAR *)
+ ZALLOC(source, 1, sizeof(struct inflate_state));
+ if (copy == Z_NULL) return Z_MEM_ERROR;
+ window = Z_NULL;
+ if (state->window != Z_NULL) {
+ window = (unsigned char FAR *)
+ ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
+ if (window == Z_NULL) {
+ ZFREE(source, copy);
+ return Z_MEM_ERROR;
+ }
+ }
+
+ /* copy state */
+ zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+ zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+ if (state->lencode >= state->codes &&
+ state->lencode <= state->codes + ENOUGH - 1) {
+ copy->lencode = copy->codes + (state->lencode - state->codes);
+ copy->distcode = copy->codes + (state->distcode - state->codes);
+ }
+ copy->next = copy->codes + (state->next - state->codes);
+ if (window != Z_NULL) {
+ wsize = 1U << state->wbits;
+ zmemcpy(window, state->window, wsize);
+ }
+ copy->window = window;
+ dest->state = (struct internal_state FAR *)copy;
+ return Z_OK;
+}
+
+int ZEXPORT inflateUndermine(strm, subvert)
+z_streamp strm;
+int subvert;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ state->sane = !subvert;
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ return Z_OK;
+#else
+ state->sane = 1;
+ return Z_DATA_ERROR;
+#endif
+}
+
+long ZEXPORT inflateMark(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+ state = (struct inflate_state FAR *)strm->state;
+ return ((long)(state->back) << 16) +
+ (state->mode == COPY ? state->length :
+ (state->mode == MATCH ? state->was - state->length : 0));
+}
diff --git a/libs/ext/zlib/inflate.h b/libs/ext/zlib/inflate.h
new file mode 100644
index 0000000..95f4986
--- /dev/null
+++ b/libs/ext/zlib/inflate.h
@@ -0,0 +1,122 @@
+/* inflate.h -- internal inflate state definition
+ * Copyright (C) 1995-2009 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+ trailer decoding by inflate(). NO_GZIP would be used to avoid linking in
+ the crc code when it is not needed. For shared libraries, gzip decoding
+ should be left enabled. */
+#ifndef NO_GZIP
+# define GUNZIP
+#endif
+
+/* Possible inflate modes between inflate() calls */
+typedef enum {
+ HEAD, /* i: waiting for magic header */
+ FLAGS, /* i: waiting for method and flags (gzip) */
+ TIME, /* i: waiting for modification time (gzip) */
+ OS, /* i: waiting for extra flags and operating system (gzip) */
+ EXLEN, /* i: waiting for extra length (gzip) */
+ EXTRA, /* i: waiting for extra bytes (gzip) */
+ NAME, /* i: waiting for end of file name (gzip) */
+ COMMENT, /* i: waiting for end of comment (gzip) */
+ HCRC, /* i: waiting for header crc (gzip) */
+ DICTID, /* i: waiting for dictionary check value */
+ DICT, /* waiting for inflateSetDictionary() call */
+ TYPE, /* i: waiting for type bits, including last-flag bit */
+ TYPEDO, /* i: same, but skip check to exit inflate on new block */
+ STORED, /* i: waiting for stored size (length and complement) */
+ COPY_, /* i/o: same as COPY below, but only first time in */
+ COPY, /* i/o: waiting for input or output to copy stored block */
+ TABLE, /* i: waiting for dynamic block table lengths */
+ LENLENS, /* i: waiting for code length code lengths */
+ CODELENS, /* i: waiting for length/lit and distance code lengths */
+ LEN_, /* i: same as LEN below, but only first time in */
+ LEN, /* i: waiting for length/lit/eob code */
+ LENEXT, /* i: waiting for length extra bits */
+ DIST, /* i: waiting for distance code */
+ DISTEXT, /* i: waiting for distance extra bits */
+ MATCH, /* o: waiting for output space to copy string */
+ LIT, /* o: waiting for output space to write literal */
+ CHECK, /* i: waiting for 32-bit check value */
+ LENGTH, /* i: waiting for 32-bit length (gzip) */
+ DONE, /* finished check, done -- remain here until reset */
+ BAD, /* got a data error -- remain here until reset */
+ MEM, /* got an inflate() memory error -- remain here until reset */
+ SYNC /* looking for synchronization bytes to restart inflate() */
+} inflate_mode;
+
+/*
+ State transitions between above modes -
+
+ (most modes can go to BAD or MEM on error -- not shown for clarity)
+
+ Process header:
+ HEAD -> (gzip) or (zlib) or (raw)
+ (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
+ HCRC -> TYPE
+ (zlib) -> DICTID or TYPE
+ DICTID -> DICT -> TYPE
+ (raw) -> TYPEDO
+ Read deflate blocks:
+ TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
+ STORED -> COPY_ -> COPY -> TYPE
+ TABLE -> LENLENS -> CODELENS -> LEN_
+ LEN_ -> LEN
+ Read deflate codes in fixed or dynamic block:
+ LEN -> LENEXT or LIT or TYPE
+ LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
+ LIT -> LEN
+ Process trailer:
+ CHECK -> LENGTH -> DONE
+ */
+
+/* state maintained between inflate() calls. Approximately 10K bytes. */
+struct inflate_state {
+ inflate_mode mode; /* current inflate mode */
+ int last; /* true if processing last block */
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
+ int havedict; /* true if dictionary provided */
+ int flags; /* gzip header method and flags (0 if zlib) */
+ unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
+ unsigned long check; /* protected copy of check value */
+ unsigned long total; /* protected copy of output count */
+ gz_headerp head; /* where to save gzip header information */
+ /* sliding window */
+ unsigned wbits; /* log base 2 of requested window size */
+ unsigned wsize; /* window size or zero if not using window */
+ unsigned whave; /* valid bytes in the window */
+ unsigned wnext; /* window write index */
+ unsigned char FAR *window; /* allocated sliding window, if needed */
+ /* bit accumulator */
+ unsigned long hold; /* input bit accumulator */
+ unsigned bits; /* number of bits in "in" */
+ /* for string and stored block copying */
+ unsigned length; /* literal or length of data to copy */
+ unsigned offset; /* distance back to copy string from */
+ /* for table and code decoding */
+ unsigned extra; /* extra bits needed */
+ /* fixed and dynamic code tables */
+ code const FAR *lencode; /* starting table for length/literal codes */
+ code const FAR *distcode; /* starting table for distance codes */
+ unsigned lenbits; /* index bits for lencode */
+ unsigned distbits; /* index bits for distcode */
+ /* dynamic table building */
+ unsigned ncode; /* number of code length code lengths */
+ unsigned nlen; /* number of length code lengths */
+ unsigned ndist; /* number of distance code lengths */
+ unsigned have; /* number of code lengths in lens[] */
+ code FAR *next; /* next available space in codes[] */
+ unsigned short lens[320]; /* temporary storage for code lengths */
+ unsigned short work[288]; /* work area for code table building */
+ code codes[ENOUGH]; /* space for code tables */
+ int sane; /* if false, allow invalid distance too far */
+ int back; /* bits back of last unprocessed length/lit */
+ unsigned was; /* initial length of match */
+};
diff --git a/libs/ext/zlib/inftrees.c b/libs/ext/zlib/inftrees.c
new file mode 100644
index 0000000..abcd7c4
--- /dev/null
+++ b/libs/ext/zlib/inftrees.c
@@ -0,0 +1,306 @@
+/* inftrees.c -- generate Huffman trees for efficient decoding
+ * Copyright (C) 1995-2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+
+#define MAXBITS 15
+
+const char inflate_copyright[] =
+ " inflate 1.2.7 Copyright 1995-2012 Mark Adler ";
+/*
+ If you use the zlib library in a product, an acknowledgment is welcome
+ in the documentation of your product. If for some reason you cannot
+ include such an acknowledgment, I would appreciate that you keep this
+ copyright string in the executable of your product.
+ */
+
+/*
+ Build a set of tables to decode the provided canonical Huffman code.
+ The code lengths are lens[0..codes-1]. The result starts at *table,
+ whose indices are 0..2^bits-1. work is a writable array of at least
+ lens shorts, which is used as a work area. type is the type of code
+ to be generated, CODES, LENS, or DISTS. On return, zero is success,
+ -1 is an invalid code, and +1 means that ENOUGH isn't enough. table
+ on return points to the next available entry's address. bits is the
+ requested root table index bits, and on return it is the actual root
+ table index bits. It will differ if the request is greater than the
+ longest code or if it is less than the shortest code.
+ */
+int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
+codetype type;
+unsigned short FAR *lens;
+unsigned codes;
+code FAR * FAR *table;
+unsigned FAR *bits;
+unsigned short FAR *work;
+{
+ unsigned len; /* a code's length in bits */
+ unsigned sym; /* index of code symbols */
+ unsigned min, max; /* minimum and maximum code lengths */
+ unsigned root; /* number of index bits for root table */
+ unsigned curr; /* number of index bits for current table */
+ unsigned drop; /* code bits to drop for sub-table */
+ int left; /* number of prefix codes available */
+ unsigned used; /* code entries in table used */
+ unsigned huff; /* Huffman code */
+ unsigned incr; /* for incrementing code, index */
+ unsigned fill; /* index for replicating entries */
+ unsigned low; /* low bits for current root entry */
+ unsigned mask; /* mask for low root bits */
+ code here; /* table entry for duplication */
+ code FAR *next; /* next available space in table */
+ const unsigned short FAR *base; /* base value table to use */
+ const unsigned short FAR *extra; /* extra bits table to use */
+ int end; /* use base and extra for symbol > end */
+ unsigned short count[MAXBITS+1]; /* number of codes of each length */
+ unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
+ static const unsigned short lbase[31] = { /* Length codes 257..285 base */
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+ static const unsigned short lext[31] = { /* Length codes 257..285 extra */
+ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 78, 68};
+ static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
+ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+ 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+ 8193, 12289, 16385, 24577, 0, 0};
+ static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
+ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+ 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+ 28, 28, 29, 29, 64, 64};
+
+ /*
+ Process a set of code lengths to create a canonical Huffman code. The
+ code lengths are lens[0..codes-1]. Each length corresponds to the
+ symbols 0..codes-1. The Huffman code is generated by first sorting the
+ symbols by length from short to long, and retaining the symbol order
+ for codes with equal lengths. Then the code starts with all zero bits
+ for the first code of the shortest length, and the codes are integer
+ increments for the same length, and zeros are appended as the length
+ increases. For the deflate format, these bits are stored backwards
+ from their more natural integer increment ordering, and so when the
+ decoding tables are built in the large loop below, the integer codes
+ are incremented backwards.
+
+ This routine assumes, but does not check, that all of the entries in
+ lens[] are in the range 0..MAXBITS. The caller must assure this.
+ 1..MAXBITS is interpreted as that code length. zero means that that
+ symbol does not occur in this code.
+
+ The codes are sorted by computing a count of codes for each length,
+ creating from that a table of starting indices for each length in the
+ sorted table, and then entering the symbols in order in the sorted
+ table. The sorted table is work[], with that space being provided by
+ the caller.
+
+ The length counts are used for other purposes as well, i.e. finding
+ the minimum and maximum length codes, determining if there are any
+ codes at all, checking for a valid set of lengths, and looking ahead
+ at length counts to determine sub-table sizes when building the
+ decoding tables.
+ */
+
+ /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+ for (len = 0; len <= MAXBITS; len++)
+ count[len] = 0;
+ for (sym = 0; sym < codes; sym++)
+ count[lens[sym]]++;
+
+ /* bound code lengths, force root to be within code lengths */
+ root = *bits;
+ for (max = MAXBITS; max >= 1; max--)
+ if (count[max] != 0) break;
+ if (root > max) root = max;
+ if (max == 0) { /* no symbols to code at all */
+ here.op = (unsigned char)64; /* invalid code marker */
+ here.bits = (unsigned char)1;
+ here.val = (unsigned short)0;
+ *(*table)++ = here; /* make a table to force an error */
+ *(*table)++ = here;
+ *bits = 1;
+ return 0; /* no symbols, but wait for decoding to report error */
+ }
+ for (min = 1; min < max; min++)
+ if (count[min] != 0) break;
+ if (root < min) root = min;
+
+ /* check for an over-subscribed or incomplete set of lengths */
+ left = 1;
+ for (len = 1; len <= MAXBITS; len++) {
+ left <<= 1;
+ left -= count[len];
+ if (left < 0) return -1; /* over-subscribed */
+ }
+ if (left > 0 && (type == CODES || max != 1))
+ return -1; /* incomplete set */
+
+ /* generate offsets into symbol table for each length for sorting */
+ offs[1] = 0;
+ for (len = 1; len < MAXBITS; len++)
+ offs[len + 1] = offs[len] + count[len];
+
+ /* sort symbols by length, by symbol order within each length */
+ for (sym = 0; sym < codes; sym++)
+ if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
+
+ /*
+ Create and fill in decoding tables. In this loop, the table being
+ filled is at next and has curr index bits. The code being used is huff
+ with length len. That code is converted to an index by dropping drop
+ bits off of the bottom. For codes where len is less than drop + curr,
+ those top drop + curr - len bits are incremented through all values to
+ fill the table with replicated entries.
+
+ root is the number of index bits for the root table. When len exceeds
+ root, sub-tables are created pointed to by the root entry with an index
+ of the low root bits of huff. This is saved in low to check for when a
+ new sub-table should be started. drop is zero when the root table is
+ being filled, and drop is root when sub-tables are being filled.
+
+ When a new sub-table is needed, it is necessary to look ahead in the
+ code lengths to determine what size sub-table is needed. The length
+ counts are used for this, and so count[] is decremented as codes are
+ entered in the tables.
+
+ used keeps track of how many table entries have been allocated from the
+ provided *table space. It is checked for LENS and DIST tables against
+ the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+ the initial root table size constants. See the comments in inftrees.h
+ for more information.
+
+ sym increments through all symbols, and the loop terminates when
+ all codes of length max, i.e. all codes, have been processed. This
+ routine permits incomplete codes, so another loop after this one fills
+ in the rest of the decoding tables with invalid code markers.
+ */
+
+ /* set up for code type */
+ switch (type) {
+ case CODES:
+ base = extra = work; /* dummy value--not used */
+ end = 19;
+ break;
+ case LENS:
+ base = lbase;
+ base -= 257;
+ extra = lext;
+ extra -= 257;
+ end = 256;
+ break;
+ default: /* DISTS */
+ base = dbase;
+ extra = dext;
+ end = -1;
+ }
+
+ /* initialize state for loop */
+ huff = 0; /* starting code */
+ sym = 0; /* starting code symbol */
+ len = min; /* starting code length */
+ next = *table; /* current table to fill in */
+ curr = root; /* current table index bits */
+ drop = 0; /* current bits to drop from code for index */
+ low = (unsigned)(-1); /* trigger new sub-table when len > root */
+ used = 1U << root; /* use root table entries */
+ mask = used - 1; /* mask for comparing low */
+
+ /* check available table space */
+ if ((type == LENS && used >= ENOUGH_LENS) ||
+ (type == DISTS && used >= ENOUGH_DISTS))
+ return 1;
+
+ /* process all codes and make table entries */
+ for (;;) {
+ /* create table entry */
+ here.bits = (unsigned char)(len - drop);
+ if ((int)(work[sym]) < end) {
+ here.op = (unsigned char)0;
+ here.val = work[sym];
+ }
+ else if ((int)(work[sym]) > end) {
+ here.op = (unsigned char)(extra[work[sym]]);
+ here.val = base[work[sym]];
+ }
+ else {
+ here.op = (unsigned char)(32 + 64); /* end of block */
+ here.val = 0;
+ }
+
+ /* replicate for those indices with low len bits equal to huff */
+ incr = 1U << (len - drop);
+ fill = 1U << curr;
+ min = fill; /* save offset to next table */
+ do {
+ fill -= incr;
+ next[(huff >> drop) + fill] = here;
+ } while (fill != 0);
+
+ /* backwards increment the len-bit code huff */
+ incr = 1U << (len - 1);
+ while (huff & incr)
+ incr >>= 1;
+ if (incr != 0) {
+ huff &= incr - 1;
+ huff += incr;
+ }
+ else
+ huff = 0;
+
+ /* go to next symbol, update count, len */
+ sym++;
+ if (--(count[len]) == 0) {
+ if (len == max) break;
+ len = lens[work[sym]];
+ }
+
+ /* create new sub-table if needed */
+ if (len > root && (huff & mask) != low) {
+ /* if first time, transition to sub-tables */
+ if (drop == 0)
+ drop = root;
+
+ /* increment past last table */
+ next += min; /* here min is 1 << curr */
+
+ /* determine length of next table */
+ curr = len - drop;
+ left = (int)(1 << curr);
+ while (curr + drop < max) {
+ left -= count[curr + drop];
+ if (left <= 0) break;
+ curr++;
+ left <<= 1;
+ }
+
+ /* check for enough space */
+ used += 1U << curr;
+ if ((type == LENS && used >= ENOUGH_LENS) ||
+ (type == DISTS && used >= ENOUGH_DISTS))
+ return 1;
+
+ /* point entry in root table to sub-table */
+ low = huff & mask;
+ (*table)[low].op = (unsigned char)curr;
+ (*table)[low].bits = (unsigned char)root;
+ (*table)[low].val = (unsigned short)(next - *table);
+ }
+ }
+
+ /* fill in remaining table entry if code is incomplete (guaranteed to have
+ at most one remaining entry, since if the code is incomplete, the
+ maximum code length that was allowed to get this far is one bit) */
+ if (huff != 0) {
+ here.op = (unsigned char)64; /* invalid code marker */
+ here.bits = (unsigned char)(len - drop);
+ here.val = (unsigned short)0;
+ next[huff] = here;
+ }
+
+ /* set return parameters */
+ *table += used;
+ *bits = root;
+ return 0;
+}
diff --git a/libs/ext/zlib/inftrees.h b/libs/ext/zlib/inftrees.h
new file mode 100644
index 0000000..baa53a0
--- /dev/null
+++ b/libs/ext/zlib/inftrees.h
@@ -0,0 +1,62 @@
+/* inftrees.h -- header to use inftrees.c
+ * Copyright (C) 1995-2005, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+/* Structure for decoding tables. Each entry provides either the
+ information needed to do the operation requested by the code that
+ indexed that table entry, or it provides a pointer to another
+ table that indexes more bits of the code. op indicates whether
+ the entry is a pointer to another table, a literal, a length or
+ distance, an end-of-block, or an invalid code. For a table
+ pointer, the low four bits of op is the number of index bits of
+ that table. For a length or distance, the low four bits of op
+ is the number of extra bits to get after the code. bits is
+ the number of bits in this code or part of the code to drop off
+ of the bit buffer. val is the actual byte to output in the case
+ of a literal, the base length or distance, or the offset from
+ the current table to the next table. Each entry is four bytes. */
+typedef struct {
+ unsigned char op; /* operation, extra bits, table bits */
+ unsigned char bits; /* bits in this part of the code */
+ unsigned short val; /* offset in table or code value */
+} code;
+
+/* op values as set by inflate_table():
+ 00000000 - literal
+ 0000tttt - table link, tttt != 0 is the number of table index bits
+ 0001eeee - length or distance, eeee is the number of extra bits
+ 01100000 - end of block
+ 01000000 - invalid code
+ */
+
+/* Maximum size of the dynamic table. The maximum number of code structures is
+ 1444, which is the sum of 852 for literal/length codes and 592 for distance
+ codes. These values were found by exhaustive searches using the program
+ examples/enough.c found in the zlib distribtution. The arguments to that
+ program are the number of symbols, the initial root table size, and the
+ maximum bit length of a code. "enough 286 9 15" for literal/length codes
+ returns returns 852, and "enough 30 6 15" for distance codes returns 592.
+ The initial root table size (9 or 6) is found in the fifth argument of the
+ inflate_table() calls in inflate.c and infback.c. If the root table size is
+ changed, then these maximum sizes would be need to be recalculated and
+ updated. */
+#define ENOUGH_LENS 852
+#define ENOUGH_DISTS 592
+#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
+
+/* Type of code to build for inflate_table() */
+typedef enum {
+ CODES,
+ LENS,
+ DISTS
+} codetype;
+
+int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
+ unsigned codes, code FAR * FAR *table,
+ unsigned FAR *bits, unsigned short FAR *work));
diff --git a/libs/ext/zlib/libz.def b/libs/ext/zlib/libz.def
new file mode 100644
index 0000000..0489615
--- /dev/null
+++ b/libs/ext/zlib/libz.def
@@ -0,0 +1,84 @@
+; zlib data compression library
+EXPORTS
+; basic functions
+ zlibVersion
+ deflate
+ deflateEnd
+ inflate
+ inflateEnd
+; advanced functions
+ deflateSetDictionary
+ deflateCopy
+ deflateReset
+ deflateParams
+ deflateTune
+ deflateBound
+ deflatePending
+ deflatePrime
+ deflateSetHeader
+ inflateSetDictionary
+ inflateSync
+ inflateCopy
+ inflateReset
+ inflateReset2
+ inflatePrime
+ inflateMark
+ inflateGetHeader
+ inflateBack
+ inflateBackEnd
+ zlibCompileFlags
+; utility functions
+ compress
+ compress2
+ compressBound
+ uncompress
+ gzopen
+ gzdopen
+ gzbuffer
+ gzsetparams
+ gzread
+ gzwrite
+ gzprintf
+ gzputs
+ gzgets
+ gzputc
+ gzgetc
+ gzungetc
+ gzflush
+ gzseek
+ gzrewind
+ gztell
+ gzoffset
+ gzeof
+ gzdirect
+ gzclose
+ gzclose_r
+ gzclose_w
+ gzerror
+ gzclearerr
+; large file functions
+ gzopen64
+ gzseek64
+ gztell64
+ gzoffset64
+ adler32_combine64
+ crc32_combine64
+; checksum functions
+ adler32
+ crc32
+ adler32_combine
+ crc32_combine
+; various hacks, don't look :)
+ deflateInit_
+ deflateInit2_
+ inflateInit_
+ inflateInit2_
+ inflateBackInit_
+ gzgetc_
+ zError
+ inflateSyncPoint
+ get_crc_table
+ inflateUndermine
+ inflateResetKeep
+ deflateResetKeep
+ gzopen_w
diff --git a/libs/ext/zlib/libz.vers b/libs/ext/zlib/libz.vers
new file mode 100644
index 0000000..c04c650
--- /dev/null
+++ b/libs/ext/zlib/libz.vers
@@ -0,0 +1 @@
+1.2.7
diff --git a/libs/ext/zlib/trees.c b/libs/ext/zlib/trees.c
new file mode 100644
index 0000000..8c32b21
--- /dev/null
+++ b/libs/ext/zlib/trees.c
@@ -0,0 +1,1224 @@
+/* trees.c -- output deflated data using Huffman coding
+ * Copyright (C) 1995-2012 Jean-loup Gailly
+ * detect_data_type() function provided freely by Cosmin Truta, 2006
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * ALGORITHM
+ *
+ * The "deflation" process uses several Huffman trees. The more
+ * common source values are represented by shorter bit sequences.
+ *
+ * Each code tree is stored in a compressed form which is itself
+ * a Huffman encoding of the lengths of all the code strings (in
+ * ascending order by source values). The actual code strings are
+ * reconstructed from the lengths in the inflate process, as described
+ * in the deflate specification.
+ *
+ * REFERENCES
+ *
+ * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
+ * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
+ *
+ * Storer, James A.
+ * Data Compression: Methods and Theory, pp. 49-50.
+ * Computer Science Press, 1988. ISBN 0-7167-8156-5.
+ *
+ * Sedgewick, R.
+ * Algorithms, p290.
+ * Addison-Wesley, 1983. ISBN 0-201-06672-6.
+ */
+
+/* @(#) $Id$ */
+
+/* #define GEN_TREES_H */
+
+#include "deflate.h"
+
+#ifdef DEBUG
+# include <ctype.h>
+#endif
+
+/* ===========================================================================
+ * Constants
+ */
+
+#define MAX_BL_BITS 7
+/* Bit length codes must not exceed MAX_BL_BITS bits */
+
+#define END_BLOCK 256
+/* end of block literal code */
+
+#define REP_3_6 16
+/* repeat previous bit length 3-6 times (2 bits of repeat count) */
+
+#define REPZ_3_10 17
+/* repeat a zero length 3-10 times (3 bits of repeat count) */
+
+#define REPZ_11_138 18
+/* repeat a zero length 11-138 times (7 bits of repeat count) */
+
+local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
+ = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
+
+local const int extra_dbits[D_CODES] /* extra bits for each distance code */
+ = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
+
+local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
+ = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
+
+local const uch bl_order[BL_CODES]
+ = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
+/* The lengths of the bit length codes are sent in order of decreasing
+ * probability, to avoid transmitting the lengths for unused bit length codes.
+ */
+
+/* ===========================================================================
+ * Local data. These are initialized only once.
+ */
+
+#define DIST_CODE_LEN 512 /* see definition of array dist_code below */
+
+#if defined(GEN_TREES_H) || !defined(STDC)
+/* non ANSI compilers may not accept trees.h */
+
+local ct_data static_ltree[L_CODES+2];
+/* The static literal tree. Since the bit lengths are imposed, there is no
+ * need for the L_CODES extra codes used during heap construction. However
+ * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
+ * below).
+ */
+
+local ct_data static_dtree[D_CODES];
+/* The static distance tree. (Actually a trivial tree since all codes use
+ * 5 bits.)
+ */
+
+uch _dist_code[DIST_CODE_LEN];
+/* Distance codes. The first 256 values correspond to the distances
+ * 3 .. 258, the last 256 values correspond to the top 8 bits of
+ * the 15 bit distances.
+ */
+
+uch _length_code[MAX_MATCH-MIN_MATCH+1];
+/* length code for each normalized match length (0 == MIN_MATCH) */
+
+local int base_length[LENGTH_CODES];
+/* First normalized length for each code (0 = MIN_MATCH) */
+
+local int base_dist[D_CODES];
+/* First normalized distance for each code (0 = distance of 1) */
+
+#else
+# include "trees.h"
+#endif /* GEN_TREES_H */
+
+struct static_tree_desc_s {
+ const ct_data *static_tree; /* static tree or NULL */
+ const intf *extra_bits; /* extra bits for each code or NULL */
+ int extra_base; /* base index for extra_bits */
+ int elems; /* max number of elements in the tree */
+ int max_length; /* max bit length for the codes */
+};
+
+local static_tree_desc static_l_desc =
+{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
+
+local static_tree_desc static_d_desc =
+{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
+
+local static_tree_desc static_bl_desc =
+{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
+
+/* ===========================================================================
+ * Local (static) routines in this file.
+ */
+
+local void tr_static_init OF((void));
+local void init_block OF((deflate_state *s));
+local void pqdownheap OF((deflate_state *s, ct_data *tree, int k));
+local void gen_bitlen OF((deflate_state *s, tree_desc *desc));
+local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count));
+local void build_tree OF((deflate_state *s, tree_desc *desc));
+local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code));
+local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
+local int build_bl_tree OF((deflate_state *s));
+local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
+ int blcodes));
+local void compress_block OF((deflate_state *s, ct_data *ltree,
+ ct_data *dtree));
+local int detect_data_type OF((deflate_state *s));
+local unsigned bi_reverse OF((unsigned value, int length));
+local void bi_windup OF((deflate_state *s));
+local void bi_flush OF((deflate_state *s));
+local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
+ int header));
+
+#ifdef GEN_TREES_H
+local void gen_trees_header OF((void));
+#endif
+
+#ifndef DEBUG
+# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
+ /* Send a code of the given tree. c and tree must not have side effects */
+
+#else /* DEBUG */
+# define send_code(s, c, tree) \
+ { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
+ send_bits(s, tree[c].Code, tree[c].Len); }
+#endif
+
+/* ===========================================================================
+ * Output a short LSB first on the stream.
+ * IN assertion: there is enough room in pendingBuf.
+ */
+#define put_short(s, w) { \
+ put_byte(s, (uch)((w) & 0xff)); \
+ put_byte(s, (uch)((ush)(w) >> 8)); \
+}
+
+/* ===========================================================================
+ * Send a value on a given number of bits.
+ * IN assertion: length <= 16 and value fits in length bits.
+ */
+#ifdef DEBUG
+local void send_bits OF((deflate_state *s, int value, int length));
+
+local void send_bits(s, value, length)
+ deflate_state *s;
+ int value; /* value to send */
+ int length; /* number of bits */
+{
+ Tracevv((stderr," l %2d v %4x ", length, value));
+ Assert(length > 0 && length <= 15, "invalid length");
+ s->bits_sent += (ulg)length;
+
+ /* If not enough room in bi_buf, use (valid) bits from bi_buf and
+ * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
+ * unused bits in value.
+ */
+ if (s->bi_valid > (int)Buf_size - length) {
+ s->bi_buf |= (ush)value << s->bi_valid;
+ put_short(s, s->bi_buf);
+ s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
+ s->bi_valid += length - Buf_size;
+ } else {
+ s->bi_buf |= (ush)value << s->bi_valid;
+ s->bi_valid += length;
+ }
+}
+#else /* !DEBUG */
+
+#define send_bits(s, value, length) \
+{ int len = length;\
+ if (s->bi_valid > (int)Buf_size - len) {\
+ int val = value;\
+ s->bi_buf |= (ush)val << s->bi_valid;\
+ put_short(s, s->bi_buf);\
+ s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
+ s->bi_valid += len - Buf_size;\
+ } else {\
+ s->bi_buf |= (ush)(value) << s->bi_valid;\
+ s->bi_valid += len;\
+ }\
+}
+#endif /* DEBUG */
+
+
+/* the arguments must not have side effects */
+
+/* ===========================================================================
+ * Initialize the various 'constant' tables.
+ */
+local void tr_static_init()
+{
+#if defined(GEN_TREES_H) || !defined(STDC)
+ static int static_init_done = 0;
+ int n; /* iterates over tree elements */
+ int bits; /* bit counter */
+ int length; /* length value */
+ int code; /* code value */
+ int dist; /* distance index */
+ ush bl_count[MAX_BITS+1];
+ /* number of codes at each bit length for an optimal tree */
+
+ if (static_init_done) return;
+
+ /* For some embedded targets, global variables are not initialized: */
+#ifdef NO_INIT_GLOBAL_POINTERS
+ static_l_desc.static_tree = static_ltree;
+ static_l_desc.extra_bits = extra_lbits;
+ static_d_desc.static_tree = static_dtree;
+ static_d_desc.extra_bits = extra_dbits;
+ static_bl_desc.extra_bits = extra_blbits;
+#endif
+
+ /* Initialize the mapping length (0..255) -> length code (0..28) */
+ length = 0;
+ for (code = 0; code < LENGTH_CODES-1; code++) {
+ base_length[code] = length;
+ for (n = 0; n < (1<<extra_lbits[code]); n++) {
+ _length_code[length++] = (uch)code;
+ }
+ }
+ Assert (length == 256, "tr_static_init: length != 256");
+ /* Note that the length 255 (match length 258) can be represented
+ * in two different ways: code 284 + 5 bits or code 285, so we
+ * overwrite length_code[255] to use the best encoding:
+ */
+ _length_code[length-1] = (uch)code;
+
+ /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+ dist = 0;
+ for (code = 0 ; code < 16; code++) {
+ base_dist[code] = dist;
+ for (n = 0; n < (1<<extra_dbits[code]); n++) {
+ _dist_code[dist++] = (uch)code;
+ }
+ }
+ Assert (dist == 256, "tr_static_init: dist != 256");
+ dist >>= 7; /* from now on, all distances are divided by 128 */
+ for ( ; code < D_CODES; code++) {
+ base_dist[code] = dist << 7;
+ for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
+ _dist_code[256 + dist++] = (uch)code;
+ }
+ }
+ Assert (dist == 256, "tr_static_init: 256+dist != 512");
+
+ /* Construct the codes of the static literal tree */
+ for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
+ n = 0;
+ while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
+ while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
+ while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
+ while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
+ /* Codes 286 and 287 do not exist, but we must include them in the
+ * tree construction to get a canonical Huffman tree (longest code
+ * all ones)
+ */
+ gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
+
+ /* The static distance tree is trivial: */
+ for (n = 0; n < D_CODES; n++) {
+ static_dtree[n].Len = 5;
+ static_dtree[n].Code = bi_reverse((unsigned)n, 5);
+ }
+ static_init_done = 1;
+
+# ifdef GEN_TREES_H
+ gen_trees_header();
+# endif
+#endif /* defined(GEN_TREES_H) || !defined(STDC) */
+}
+
+/* ===========================================================================
+ * Genererate the file trees.h describing the static trees.
+ */
+#ifdef GEN_TREES_H
+# ifndef DEBUG
+# include <stdio.h>
+# endif
+
+# define SEPARATOR(i, last, width) \
+ ((i) == (last)? "\n};\n\n" : \
+ ((i) % (width) == (width)-1 ? ",\n" : ", "))
+
+void gen_trees_header()
+{
+ FILE *header = fopen("trees.h", "w");
+ int i;
+
+ Assert (header != NULL, "Can't open trees.h");
+ fprintf(header,
+ "/* header created automatically with -DGEN_TREES_H */\n\n");
+
+ fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
+ for (i = 0; i < L_CODES+2; i++) {
+ fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
+ static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
+ }
+
+ fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
+ for (i = 0; i < D_CODES; i++) {
+ fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
+ static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
+ }
+
+ fprintf(header, "const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n");
+ for (i = 0; i < DIST_CODE_LEN; i++) {
+ fprintf(header, "%2u%s", _dist_code[i],
+ SEPARATOR(i, DIST_CODE_LEN-1, 20));
+ }
+
+ fprintf(header,
+ "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
+ for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
+ fprintf(header, "%2u%s", _length_code[i],
+ SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
+ }
+
+ fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
+ for (i = 0; i < LENGTH_CODES; i++) {
+ fprintf(header, "%1u%s", base_length[i],
+ SEPARATOR(i, LENGTH_CODES-1, 20));
+ }
+
+ fprintf(header, "local const int base_dist[D_CODES] = {\n");
+ for (i = 0; i < D_CODES; i++) {
+ fprintf(header, "%5u%s", base_dist[i],
+ SEPARATOR(i, D_CODES-1, 10));
+ }
+
+ fclose(header);
+}
+#endif /* GEN_TREES_H */
+
+/* ===========================================================================
+ * Initialize the tree data structures for a new zlib stream.
+ */
+void ZLIB_INTERNAL _tr_init(s)
+ deflate_state *s;
+{
+ tr_static_init();
+
+ s->l_desc.dyn_tree = s->dyn_ltree;
+ s->l_desc.stat_desc = &static_l_desc;
+
+ s->d_desc.dyn_tree = s->dyn_dtree;
+ s->d_desc.stat_desc = &static_d_desc;
+
+ s->bl_desc.dyn_tree = s->bl_tree;
+ s->bl_desc.stat_desc = &static_bl_desc;
+
+ s->bi_buf = 0;
+ s->bi_valid = 0;
+#ifdef DEBUG
+ s->compressed_len = 0L;
+ s->bits_sent = 0L;
+#endif
+
+ /* Initialize the first block of the first file: */
+ init_block(s);
+}
+
+/* ===========================================================================
+ * Initialize a new block.
+ */
+local void init_block(s)
+ deflate_state *s;
+{
+ int n; /* iterates over tree elements */
+
+ /* Initialize the trees. */
+ for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
+ for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
+ for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
+
+ s->dyn_ltree[END_BLOCK].Freq = 1;
+ s->opt_len = s->static_len = 0L;
+ s->last_lit = s->matches = 0;
+}
+
+#define SMALLEST 1
+/* Index within the heap array of least frequent node in the Huffman tree */
+
+
+/* ===========================================================================
+ * Remove the smallest element from the heap and recreate the heap with
+ * one less element. Updates heap and heap_len.
+ */
+#define pqremove(s, tree, top) \
+{\
+ top = s->heap[SMALLEST]; \
+ s->heap[SMALLEST] = s->heap[s->heap_len--]; \
+ pqdownheap(s, tree, SMALLEST); \
+}
+
+/* ===========================================================================
+ * Compares to subtrees, using the tree depth as tie breaker when
+ * the subtrees have equal frequency. This minimizes the worst case length.
+ */
+#define smaller(tree, n, m, depth) \
+ (tree[n].Freq < tree[m].Freq || \
+ (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
+
+/* ===========================================================================
+ * Restore the heap property by moving down the tree starting at node k,
+ * exchanging a node with the smallest of its two sons if necessary, stopping
+ * when the heap property is re-established (each father smaller than its
+ * two sons).
+ */
+local void pqdownheap(s, tree, k)
+ deflate_state *s;
+ ct_data *tree; /* the tree to restore */
+ int k; /* node to move down */
+{
+ int v = s->heap[k];
+ int j = k << 1; /* left son of k */
+ while (j <= s->heap_len) {
+ /* Set j to the smallest of the two sons: */
+ if (j < s->heap_len &&
+ smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
+ j++;
+ }
+ /* Exit if v is smaller than both sons */
+ if (smaller(tree, v, s->heap[j], s->depth)) break;
+
+ /* Exchange v with the smallest son */
+ s->heap[k] = s->heap[j]; k = j;
+
+ /* And continue down the tree, setting j to the left son of k */
+ j <<= 1;
+ }
+ s->heap[k] = v;
+}
+
+/* ===========================================================================
+ * Compute the optimal bit lengths for a tree and update the total bit length
+ * for the current block.
+ * IN assertion: the fields freq and dad are set, heap[heap_max] and
+ * above are the tree nodes sorted by increasing frequency.
+ * OUT assertions: the field len is set to the optimal bit length, the
+ * array bl_count contains the frequencies for each bit length.
+ * The length opt_len is updated; static_len is also updated if stree is
+ * not null.
+ */
+local void gen_bitlen(s, desc)
+ deflate_state *s;
+ tree_desc *desc; /* the tree descriptor */
+{
+ ct_data *tree = desc->dyn_tree;
+ int max_code = desc->max_code;
+ const ct_data *stree = desc->stat_desc->static_tree;
+ const intf *extra = desc->stat_desc->extra_bits;
+ int base = desc->stat_desc->extra_base;
+ int max_length = desc->stat_desc->max_length;
+ int h; /* heap index */
+ int n, m; /* iterate over the tree elements */
+ int bits; /* bit length */
+ int xbits; /* extra bits */
+ ush f; /* frequency */
+ int overflow = 0; /* number of elements with bit length too large */
+
+ for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
+
+ /* In a first pass, compute the optimal bit lengths (which may
+ * overflow in the case of the bit length tree).
+ */
+ tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
+
+ for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
+ n = s->heap[h];
+ bits = tree[tree[n].Dad].Len + 1;
+ if (bits > max_length) bits = max_length, overflow++;
+ tree[n].Len = (ush)bits;
+ /* We overwrite tree[n].Dad which is no longer needed */
+
+ if (n > max_code) continue; /* not a leaf node */
+
+ s->bl_count[bits]++;
+ xbits = 0;
+ if (n >= base) xbits = extra[n-base];
+ f = tree[n].Freq;
+ s->opt_len += (ulg)f * (bits + xbits);
+ if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+ }
+ if (overflow == 0) return;
+
+ Trace((stderr,"\nbit length overflow\n"));
+ /* This happens for example on obj2 and pic of the Calgary corpus */
+
+ /* Find the first bit length which could increase: */
+ do {
+ bits = max_length-1;
+ while (s->bl_count[bits] == 0) bits--;
+ s->bl_count[bits]--; /* move one leaf down the tree */
+ s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
+ s->bl_count[max_length]--;
+ /* The brother of the overflow item also moves one step up,
+ * but this does not affect bl_count[max_length]
+ */
+ overflow -= 2;
+ } while (overflow > 0);
+
+ /* Now recompute all bit lengths, scanning in increasing frequency.
+ * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+ * lengths instead of fixing only the wrong ones. This idea is taken
+ * from 'ar' written by Haruhiko Okumura.)
+ */
+ for (bits = max_length; bits != 0; bits--) {
+ n = s->bl_count[bits];
+ while (n != 0) {
+ m = s->heap[--h];
+ if (m > max_code) continue;
+ if ((unsigned) tree[m].Len != (unsigned) bits) {
+ Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+ s->opt_len += ((long)bits - (long)tree[m].Len)
+ *(long)tree[m].Freq;
+ tree[m].Len = (ush)bits;
+ }
+ n--;
+ }
+ }
+}
+
+/* ===========================================================================
+ * Generate the codes for a given tree and bit counts (which need not be
+ * optimal).
+ * IN assertion: the array bl_count contains the bit length statistics for
+ * the given tree and the field len is set for all tree elements.
+ * OUT assertion: the field code is set for all tree elements of non
+ * zero code length.
+ */
+local void gen_codes (tree, max_code, bl_count)
+ ct_data *tree; /* the tree to decorate */
+ int max_code; /* largest code with non zero frequency */
+ ushf *bl_count; /* number of codes at each bit length */
+{
+ ush next_code[MAX_BITS+1]; /* next code value for each bit length */
+ ush code = 0; /* running code value */
+ int bits; /* bit index */
+ int n; /* code index */
+
+ /* The distribution counts are first used to generate the code values
+ * without bit reversal.
+ */
+ for (bits = 1; bits <= MAX_BITS; bits++) {
+ next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+ }
+ /* Check that the bit counts in bl_count are consistent. The last code
+ * must be all ones.
+ */
+ Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+ "inconsistent bit counts");
+ Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+
+ for (n = 0; n <= max_code; n++) {
+ int len = tree[n].Len;
+ if (len == 0) continue;
+ /* Now reverse the bits */
+ tree[n].Code = bi_reverse(next_code[len]++, len);
+
+ Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+ n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
+ }
+}
+
+/* ===========================================================================
+ * Construct one Huffman tree and assigns the code bit strings and lengths.
+ * Update the total bit length for the current block.
+ * IN assertion: the field freq is set for all tree elements.
+ * OUT assertions: the fields len and code are set to the optimal bit length
+ * and corresponding code. The length opt_len is updated; static_len is
+ * also updated if stree is not null. The field max_code is set.
+ */
+local void build_tree(s, desc)
+ deflate_state *s;
+ tree_desc *desc; /* the tree descriptor */
+{
+ ct_data *tree = desc->dyn_tree;
+ const ct_data *stree = desc->stat_desc->static_tree;
+ int elems = desc->stat_desc->elems;
+ int n, m; /* iterate over heap elements */
+ int max_code = -1; /* largest code with non zero frequency */
+ int node; /* new node being created */
+
+ /* Construct the initial heap, with least frequent element in
+ * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+ * heap[0] is not used.
+ */
+ s->heap_len = 0, s->heap_max = HEAP_SIZE;
+
+ for (n = 0; n < elems; n++) {
+ if (tree[n].Freq != 0) {
+ s->heap[++(s->heap_len)] = max_code = n;
+ s->depth[n] = 0;
+ } else {
+ tree[n].Len = 0;
+ }
+ }
+
+ /* The pkzip format requires that at least one distance code exists,
+ * and that at least one bit should be sent even if there is only one
+ * possible code. So to avoid special checks later on we force at least
+ * two codes of non zero frequency.
+ */
+ while (s->heap_len < 2) {
+ node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
+ tree[node].Freq = 1;
+ s->depth[node] = 0;
+ s->opt_len--; if (stree) s->static_len -= stree[node].Len;
+ /* node is 0 or 1 so it does not have extra bits */
+ }
+ desc->max_code = max_code;
+
+ /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+ * establish sub-heaps of increasing lengths:
+ */
+ for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
+
+ /* Construct the Huffman tree by repeatedly combining the least two
+ * frequent nodes.
+ */
+ node = elems; /* next internal node of the tree */
+ do {
+ pqremove(s, tree, n); /* n = node of least frequency */
+ m = s->heap[SMALLEST]; /* m = node of next least frequency */
+
+ s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
+ s->heap[--(s->heap_max)] = m;
+
+ /* Create a new node father of n and m */
+ tree[node].Freq = tree[n].Freq + tree[m].Freq;
+ s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?
+ s->depth[n] : s->depth[m]) + 1);
+ tree[n].Dad = tree[m].Dad = (ush)node;
+#ifdef DUMP_BL_TREE
+ if (tree == s->bl_tree) {
+ fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
+ node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
+ }
+#endif
+ /* and insert the new node in the heap */
+ s->heap[SMALLEST] = node++;
+ pqdownheap(s, tree, SMALLEST);
+
+ } while (s->heap_len >= 2);
+
+ s->heap[--(s->heap_max)] = s->heap[SMALLEST];
+
+ /* At this point, the fields freq and dad are set. We can now
+ * generate the bit lengths.
+ */
+ gen_bitlen(s, (tree_desc *)desc);
+
+ /* The field len is now set, we can generate the bit codes */
+ gen_codes ((ct_data *)tree, max_code, s->bl_count);
+}
+
+/* ===========================================================================
+ * Scan a literal or distance tree to determine the frequencies of the codes
+ * in the bit length tree.
+ */
+local void scan_tree (s, tree, max_code)
+ deflate_state *s;
+ ct_data *tree; /* the tree to be scanned */
+ int max_code; /* and its largest code of non zero frequency */
+{
+ int n; /* iterates over all tree elements */
+ int prevlen = -1; /* last emitted length */
+ int curlen; /* length of current code */
+ int nextlen = tree[0].Len; /* length of next code */
+ int count = 0; /* repeat count of the current code */
+ int max_count = 7; /* max repeat count */
+ int min_count = 4; /* min repeat count */
+
+ if (nextlen == 0) max_count = 138, min_count = 3;
+ tree[max_code+1].Len = (ush)0xffff; /* guard */
+
+ for (n = 0; n <= max_code; n++) {
+ curlen = nextlen; nextlen = tree[n+1].Len;
+ if (++count < max_count && curlen == nextlen) {
+ continue;
+ } else if (count < min_count) {
+ s->bl_tree[curlen].Freq += count;
+ } else if (curlen != 0) {
+ if (curlen != prevlen) s->bl_tree[curlen].Freq++;
+ s->bl_tree[REP_3_6].Freq++;
+ } else if (count <= 10) {
+ s->bl_tree[REPZ_3_10].Freq++;
+ } else {
+ s->bl_tree[REPZ_11_138].Freq++;
+ }
+ count = 0; prevlen = curlen;
+ if (nextlen == 0) {
+ max_count = 138, min_count = 3;
+ } else if (curlen == nextlen) {
+ max_count = 6, min_count = 3;
+ } else {
+ max_count = 7, min_count = 4;
+ }
+ }
+}
+
+/* ===========================================================================
+ * Send a literal or distance tree in compressed form, using the codes in
+ * bl_tree.
+ */
+local void send_tree (s, tree, max_code)
+ deflate_state *s;
+ ct_data *tree; /* the tree to be scanned */
+ int max_code; /* and its largest code of non zero frequency */
+{
+ int n; /* iterates over all tree elements */
+ int prevlen = -1; /* last emitted length */
+ int curlen; /* length of current code */
+ int nextlen = tree[0].Len; /* length of next code */
+ int count = 0; /* repeat count of the current code */
+ int max_count = 7; /* max repeat count */
+ int min_count = 4; /* min repeat count */
+
+ /* tree[max_code+1].Len = -1; */ /* guard already set */
+ if (nextlen == 0) max_count = 138, min_count = 3;
+
+ for (n = 0; n <= max_code; n++) {
+ curlen = nextlen; nextlen = tree[n+1].Len;
+ if (++count < max_count && curlen == nextlen) {
+ continue;
+ } else if (count < min_count) {
+ do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
+
+ } else if (curlen != 0) {
+ if (curlen != prevlen) {
+ send_code(s, curlen, s->bl_tree); count--;
+ }
+ Assert(count >= 3 && count <= 6, " 3_6?");
+ send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
+
+ } else if (count <= 10) {
+ send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
+
+ } else {
+ send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
+ }
+ count = 0; prevlen = curlen;
+ if (nextlen == 0) {
+ max_count = 138, min_count = 3;
+ } else if (curlen == nextlen) {
+ max_count = 6, min_count = 3;
+ } else {
+ max_count = 7, min_count = 4;
+ }
+ }
+}
+
+/* ===========================================================================
+ * Construct the Huffman tree for the bit lengths and return the index in
+ * bl_order of the last bit length code to send.
+ */
+local int build_bl_tree(s)
+ deflate_state *s;
+{
+ int max_blindex; /* index of last bit length code of non zero freq */
+
+ /* Determine the bit length frequencies for literal and distance trees */
+ scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
+ scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
+
+ /* Build the bit length tree: */
+ build_tree(s, (tree_desc *)(&(s->bl_desc)));
+ /* opt_len now includes the length of the tree representations, except
+ * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+ */
+
+ /* Determine the number of bit length codes to send. The pkzip format
+ * requires that at least 4 bit length codes be sent. (appnote.txt says
+ * 3 but the actual value used is 4.)
+ */
+ for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+ if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
+ }
+ /* Update opt_len to include the bit length tree and counts */
+ s->opt_len += 3*(max_blindex+1) + 5+5+4;
+ Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+ s->opt_len, s->static_len));
+
+ return max_blindex;
+}
+
+/* ===========================================================================
+ * Send the header for a block using dynamic Huffman trees: the counts, the
+ * lengths of the bit length codes, the literal tree and the distance tree.
+ * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+ */
+local void send_all_trees(s, lcodes, dcodes, blcodes)
+ deflate_state *s;
+ int lcodes, dcodes, blcodes; /* number of codes for each tree */
+{
+ int rank; /* index in bl_order */
+
+ Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+ Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+ "too many codes");
+ Tracev((stderr, "\nbl counts: "));
+ send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
+ send_bits(s, dcodes-1, 5);
+ send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */
+ for (rank = 0; rank < blcodes; rank++) {
+ Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+ send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
+ }
+ Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+
+ send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
+ Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+
+ send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
+ Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+}
+
+/* ===========================================================================
+ * Send a stored block
+ */
+void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
+ deflate_state *s;
+ charf *buf; /* input block */
+ ulg stored_len; /* length of input block */
+ int last; /* one if this is the last block for a file */
+{
+ send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
+#ifdef DEBUG
+ s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
+ s->compressed_len += (stored_len + 4) << 3;
+#endif
+ copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
+}
+
+/* ===========================================================================
+ * Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
+ */
+void ZLIB_INTERNAL _tr_flush_bits(s)
+ deflate_state *s;
+{
+ bi_flush(s);
+}
+
+/* ===========================================================================
+ * Send one empty static block to give enough lookahead for inflate.
+ * This takes 10 bits, of which 7 may remain in the bit buffer.
+ */
+void ZLIB_INTERNAL _tr_align(s)
+ deflate_state *s;
+{
+ send_bits(s, STATIC_TREES<<1, 3);
+ send_code(s, END_BLOCK, static_ltree);
+#ifdef DEBUG
+ s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
+#endif
+ bi_flush(s);
+}
+
+/* ===========================================================================
+ * Determine the best encoding for the current block: dynamic trees, static
+ * trees or store, and output the encoded block to the zip file.
+ */
+void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
+ deflate_state *s;
+ charf *buf; /* input block, or NULL if too old */
+ ulg stored_len; /* length of input block */
+ int last; /* one if this is the last block for a file */
+{
+ ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
+ int max_blindex = 0; /* index of last bit length code of non zero freq */
+
+ /* Build the Huffman trees unless a stored block is forced */
+ if (s->level > 0) {
+
+ /* Check if the file is binary or text */
+ if (s->strm->data_type == Z_UNKNOWN)
+ s->strm->data_type = detect_data_type(s);
+
+ /* Construct the literal and distance trees */
+ build_tree(s, (tree_desc *)(&(s->l_desc)));
+ Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+ s->static_len));
+
+ build_tree(s, (tree_desc *)(&(s->d_desc)));
+ Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+ s->static_len));
+ /* At this point, opt_len and static_len are the total bit lengths of
+ * the compressed block data, excluding the tree representations.
+ */
+
+ /* Build the bit length tree for the above two trees, and get the index
+ * in bl_order of the last bit length code to send.
+ */
+ max_blindex = build_bl_tree(s);
+
+ /* Determine the best encoding. Compute the block lengths in bytes. */
+ opt_lenb = (s->opt_len+3+7)>>3;
+ static_lenb = (s->static_len+3+7)>>3;
+
+ Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+ opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+ s->last_lit));
+
+ if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
+
+ } else {
+ Assert(buf != (char*)0, "lost buf");
+ opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+ }
+
+#ifdef FORCE_STORED
+ if (buf != (char*)0) { /* force stored block */
+#else
+ if (stored_len+4 <= opt_lenb && buf != (char*)0) {
+ /* 4: two words for the lengths */
+#endif
+ /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+ * Otherwise we can't have processed more than WSIZE input bytes since
+ * the last block flush, because compression would have been
+ * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+ * transform a block into a stored block.
+ */
+ _tr_stored_block(s, buf, stored_len, last);
+
+#ifdef FORCE_STATIC
+ } else if (static_lenb >= 0) { /* force static trees */
+#else
+ } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
+#endif
+ send_bits(s, (STATIC_TREES<<1)+last, 3);
+ compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
+#ifdef DEBUG
+ s->compressed_len += 3 + s->static_len;
+#endif
+ } else {
+ send_bits(s, (DYN_TREES<<1)+last, 3);
+ send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
+ max_blindex+1);
+ compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
+#ifdef DEBUG
+ s->compressed_len += 3 + s->opt_len;
+#endif
+ }
+ Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+ /* The above check is made mod 2^32, for files larger than 512 MB
+ * and uLong implemented on 32 bits.
+ */
+ init_block(s);
+
+ if (last) {
+ bi_windup(s);
+#ifdef DEBUG
+ s->compressed_len += 7; /* align on byte boundary */
+#endif
+ }
+ Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+ s->compressed_len-7*last));
+}
+
+/* ===========================================================================
+ * Save the match info and tally the frequency counts. Return true if
+ * the current block must be flushed.
+ */
+int ZLIB_INTERNAL _tr_tally (s, dist, lc)
+ deflate_state *s;
+ unsigned dist; /* distance of matched string */
+ unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
+{
+ s->d_buf[s->last_lit] = (ush)dist;
+ s->l_buf[s->last_lit++] = (uch)lc;
+ if (dist == 0) {
+ /* lc is the unmatched char */
+ s->dyn_ltree[lc].Freq++;
+ } else {
+ s->matches++;
+ /* Here, lc is the match length - MIN_MATCH */
+ dist--; /* dist = match distance - 1 */
+ Assert((ush)dist < (ush)MAX_DIST(s) &&
+ (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+ (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
+
+ s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
+ s->dyn_dtree[d_code(dist)].Freq++;
+ }
+
+#ifdef TRUNCATE_BLOCK
+ /* Try to guess if it is profitable to stop the current block here */
+ if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
+ /* Compute an upper bound for the compressed length */
+ ulg out_length = (ulg)s->last_lit*8L;
+ ulg in_length = (ulg)((long)s->strstart - s->block_start);
+ int dcode;
+ for (dcode = 0; dcode < D_CODES; dcode++) {
+ out_length += (ulg)s->dyn_dtree[dcode].Freq *
+ (5L+extra_dbits[dcode]);
+ }
+ out_length >>= 3;
+ Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+ s->last_lit, in_length, out_length,
+ 100L - out_length*100L/in_length));
+ if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
+ }
+#endif
+ return (s->last_lit == s->lit_bufsize-1);
+ /* We avoid equality with lit_bufsize because of wraparound at 64K
+ * on 16 bit machines and because stored blocks are restricted to
+ * 64K-1 bytes.
+ */
+}
+
+/* ===========================================================================
+ * Send the block data compressed using the given Huffman trees
+ */
+local void compress_block(s, ltree, dtree)
+ deflate_state *s;
+ ct_data *ltree; /* literal tree */
+ ct_data *dtree; /* distance tree */
+{
+ unsigned dist; /* distance of matched string */
+ int lc; /* match length or unmatched char (if dist == 0) */
+ unsigned lx = 0; /* running index in l_buf */
+ unsigned code; /* the code to send */
+ int extra; /* number of extra bits to send */
+
+ if (s->last_lit != 0) do {
+ dist = s->d_buf[lx];
+ lc = s->l_buf[lx++];
+ if (dist == 0) {
+ send_code(s, lc, ltree); /* send a literal byte */
+ Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+ } else {
+ /* Here, lc is the match length - MIN_MATCH */
+ code = _length_code[lc];
+ send_code(s, code+LITERALS+1, ltree); /* send the length code */
+ extra = extra_lbits[code];
+ if (extra != 0) {
+ lc -= base_length[code];
+ send_bits(s, lc, extra); /* send the extra length bits */
+ }
+ dist--; /* dist is now the match distance - 1 */
+ code = d_code(dist);
+ Assert (code < D_CODES, "bad d_code");
+
+ send_code(s, code, dtree); /* send the distance code */
+ extra = extra_dbits[code];
+ if (extra != 0) {
+ dist -= base_dist[code];
+ send_bits(s, dist, extra); /* send the extra distance bits */
+ }
+ } /* literal or match pair ? */
+
+ /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+ Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+ "pendingBuf overflow");
+
+ } while (lx < s->last_lit);
+
+ send_code(s, END_BLOCK, ltree);
+}
+
+/* ===========================================================================
+ * Check if the data type is TEXT or BINARY, using the following algorithm:
+ * - TEXT if the two conditions below are satisfied:
+ * a) There are no non-portable control characters belonging to the
+ * "black list" (0..6, 14..25, 28..31).
+ * b) There is at least one printable character belonging to the
+ * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+ * - BINARY otherwise.
+ * - The following partially-portable control characters form a
+ * "gray list" that is ignored in this detection algorithm:
+ * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
+ * IN assertion: the fields Freq of dyn_ltree are set.
+ */
+local int detect_data_type(s)
+ deflate_state *s;
+{
+ /* black_mask is the bit mask of black-listed bytes
+ * set bits 0..6, 14..25, and 28..31
+ * 0xf3ffc07f = binary 11110011111111111100000001111111
+ */
+ unsigned long black_mask = 0xf3ffc07fUL;
+ int n;
+
+ /* Check for non-textual ("black-listed") bytes. */
+ for (n = 0; n <= 31; n++, black_mask >>= 1)
+ if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
+ return Z_BINARY;
+
+ /* Check for textual ("white-listed") bytes. */
+ if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
+ || s->dyn_ltree[13].Freq != 0)
+ return Z_TEXT;
+ for (n = 32; n < LITERALS; n++)
+ if (s->dyn_ltree[n].Freq != 0)
+ return Z_TEXT;
+
+ /* There are no "black-listed" or "white-listed" bytes:
+ * this stream either is empty or has tolerated ("gray-listed") bytes only.
+ */
+ return Z_BINARY;
+}
+
+/* ===========================================================================
+ * Reverse the first len bits of a code, using straightforward code (a faster
+ * method would use a table)
+ * IN assertion: 1 <= len <= 15
+ */
+local unsigned bi_reverse(code, len)
+ unsigned code; /* the value to invert */
+ int len; /* its bit length */
+{
+ register unsigned res = 0;
+ do {
+ res |= code & 1;
+ code >>= 1, res <<= 1;
+ } while (--len > 0);
+ return res >> 1;
+}
+
+/* ===========================================================================
+ * Flush the bit buffer, keeping at most 7 bits in it.
+ */
+local void bi_flush(s)
+ deflate_state *s;
+{
+ if (s->bi_valid == 16) {
+ put_short(s, s->bi_buf);
+ s->bi_buf = 0;
+ s->bi_valid = 0;
+ } else if (s->bi_valid >= 8) {
+ put_byte(s, (Byte)s->bi_buf);
+ s->bi_buf >>= 8;
+ s->bi_valid -= 8;
+ }
+}
+
+/* ===========================================================================
+ * Flush the bit buffer and align the output on a byte boundary
+ */
+local void bi_windup(s)
+ deflate_state *s;
+{
+ if (s->bi_valid > 8) {
+ put_short(s, s->bi_buf);
+ } else if (s->bi_valid > 0) {
+ put_byte(s, (Byte)s->bi_buf);
+ }
+ s->bi_buf = 0;
+ s->bi_valid = 0;
+#ifdef DEBUG
+ s->bits_sent = (s->bits_sent+7) & ~7;
+#endif
+}
+
+/* ===========================================================================
+ * Copy a stored block, storing first the length and its
+ * one's complement if requested.
+ */
+local void copy_block(s, buf, len, header)
+ deflate_state *s;
+ charf *buf; /* the input data */
+ unsigned len; /* its length */
+ int header; /* true if block header must be written */
+{
+ bi_windup(s); /* align on byte boundary */
+
+ if (header) {
+ put_short(s, (ush)len);
+ put_short(s, (ush)~len);
+#ifdef DEBUG
+ s->bits_sent += 2*16;
+#endif
+ }
+#ifdef DEBUG
+ s->bits_sent += (ulg)len<<3;
+#endif
+ while (len--) {
+ put_byte(s, *buf++);
+ }
+}
diff --git a/libs/ext/zlib/trees.h b/libs/ext/zlib/trees.h
new file mode 100644
index 0000000..d35639d
--- /dev/null
+++ b/libs/ext/zlib/trees.h
@@ -0,0 +1,128 @@
+/* header created automatically with -DGEN_TREES_H */
+
+local const ct_data static_ltree[L_CODES+2] = {
+{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}},
+{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}},
+{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}},
+{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}},
+{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}},
+{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}},
+{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}},
+{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}},
+{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}},
+{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}},
+{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}},
+{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}},
+{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}},
+{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}},
+{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}},
+{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}},
+{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}},
+{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}},
+{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}},
+{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}},
+{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}},
+{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}},
+{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}},
+{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}},
+{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}},
+{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}},
+{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}},
+{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}},
+{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}},
+{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}},
+{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}},
+{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}},
+{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}},
+{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}},
+{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}},
+{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}},
+{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}},
+{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}},
+{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}},
+{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}},
+{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}},
+{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}},
+{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}},
+{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}},
+{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}},
+{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}},
+{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}},
+{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}},
+{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}},
+{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}},
+{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}},
+{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}},
+{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}},
+{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}},
+{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}},
+{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}},
+{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}},
+{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}}
+};
+
+local const ct_data static_dtree[D_CODES] = {
+{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
+{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
+{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
+{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
+{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
+{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
+};
+
+const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {
+ 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
+ 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
+10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17,
+18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
+23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
+};
+
+const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12,
+13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
+17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
+19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
+22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
+23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
+};
+
+local const int base_length[LENGTH_CODES] = {
+0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
+64, 80, 96, 112, 128, 160, 192, 224, 0
+};
+
+local const int base_dist[D_CODES] = {
+ 0, 1, 2, 3, 4, 6, 8, 12, 16, 24,
+ 32, 48, 64, 96, 128, 192, 256, 384, 512, 768,
+ 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576
+};
+
diff --git a/libs/ext/zlib/uncompr.c b/libs/ext/zlib/uncompr.c
new file mode 100644
index 0000000..ad98be3
--- /dev/null
+++ b/libs/ext/zlib/uncompr.c
@@ -0,0 +1,59 @@
+/* uncompr.c -- decompress a memory buffer
+ * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#define ZLIB_INTERNAL
+#include "zlib.h"
+
+/* ===========================================================================
+ Decompresses the source buffer into the destination buffer. sourceLen is
+ the byte length of the source buffer. Upon entry, destLen is the total
+ size of the destination buffer, which must be large enough to hold the
+ entire uncompressed data. (The size of the uncompressed data must have
+ been saved previously by the compressor and transmitted to the decompressor
+ by some mechanism outside the scope of this compression library.)
+ Upon exit, destLen is the actual size of the compressed buffer.
+
+ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_BUF_ERROR if there was not enough room in the output
+ buffer, or Z_DATA_ERROR if the input data was corrupted.
+*/
+int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+{
+ z_stream stream;
+ int err;
+
+ stream.next_in = (Bytef*)source;
+ stream.avail_in = (uInt)sourceLen;
+ /* Check for source > 64K on 16-bit machine: */
+ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+
+ stream.next_out = dest;
+ stream.avail_out = (uInt)*destLen;
+ if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+ stream.zalloc = (alloc_func)0;
+ stream.zfree = (free_func)0;
+
+ err = inflateInit(&stream);
+ if (err != Z_OK) return err;
+
+ err = inflate(&stream, Z_FINISH);
+ if (err != Z_STREAM_END) {
+ inflateEnd(&stream);
+ if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
+ return Z_DATA_ERROR;
+ return err;
+ }
+ *destLen = stream.total_out;
+
+ err = inflateEnd(&stream);
+ return err;
+}
diff --git a/libs/ext/zlib/zconf.h b/libs/ext/zlib/zconf.h
new file mode 100644
index 0000000..8a46a58
--- /dev/null
+++ b/libs/ext/zlib/zconf.h
@@ -0,0 +1,506 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2012 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
+# define Z_PREFIX_SET
+
+/* all linked symbols */
+# define _dist_code z__dist_code
+# define _length_code z__length_code
+# define _tr_align z__tr_align
+# define _tr_flush_block z__tr_flush_block
+# define _tr_init z__tr_init
+# define _tr_stored_block z__tr_stored_block
+# define _tr_tally z__tr_tally
+# define adler32 z_adler32
+# define adler32_combine z_adler32_combine
+# define adler32_combine64 z_adler32_combine64
+# ifndef Z_SOLO
+# define compress z_compress
+# define compress2 z_compress2
+# define compressBound z_compressBound
+# endif
+# define crc32 z_crc32
+# define crc32_combine z_crc32_combine
+# define crc32_combine64 z_crc32_combine64
+# define deflate z_deflate
+# define deflateBound z_deflateBound
+# define deflateCopy z_deflateCopy
+# define deflateEnd z_deflateEnd
+# define deflateInit2_ z_deflateInit2_
+# define deflateInit_ z_deflateInit_
+# define deflateParams z_deflateParams
+# define deflatePending z_deflatePending
+# define deflatePrime z_deflatePrime
+# define deflateReset z_deflateReset
+# define deflateResetKeep z_deflateResetKeep
+# define deflateSetDictionary z_deflateSetDictionary
+# define deflateSetHeader z_deflateSetHeader
+# define deflateTune z_deflateTune
+# define deflate_copyright z_deflate_copyright
+# define get_crc_table z_get_crc_table
+# ifndef Z_SOLO
+# define gz_error z_gz_error
+# define gz_intmax z_gz_intmax
+# define gz_strwinerror z_gz_strwinerror
+# define gzbuffer z_gzbuffer
+# define gzclearerr z_gzclearerr
+# define gzclose z_gzclose
+# define gzclose_r z_gzclose_r
+# define gzclose_w z_gzclose_w
+# define gzdirect z_gzdirect
+# define gzdopen z_gzdopen
+# define gzeof z_gzeof
+# define gzerror z_gzerror
+# define gzflush z_gzflush
+# define gzgetc z_gzgetc
+# define gzgetc_ z_gzgetc_
+# define gzgets z_gzgets
+# define gzoffset z_gzoffset
+# define gzoffset64 z_gzoffset64
+# define gzopen z_gzopen
+# define gzopen64 z_gzopen64
+# ifdef _WIN32
+# define gzopen_w z_gzopen_w
+# endif
+# define gzprintf z_gzprintf
+# define gzputc z_gzputc
+# define gzputs z_gzputs
+# define gzread z_gzread
+# define gzrewind z_gzrewind
+# define gzseek z_gzseek
+# define gzseek64 z_gzseek64
+# define gzsetparams z_gzsetparams
+# define gztell z_gztell
+# define gztell64 z_gztell64
+# define gzungetc z_gzungetc
+# define gzwrite z_gzwrite
+# endif
+# define inflate z_inflate
+# define inflateBack z_inflateBack
+# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit_ z_inflateBackInit_
+# define inflateCopy z_inflateCopy
+# define inflateEnd z_inflateEnd
+# define inflateGetHeader z_inflateGetHeader
+# define inflateInit2_ z_inflateInit2_
+# define inflateInit_ z_inflateInit_
+# define inflateMark z_inflateMark
+# define inflatePrime z_inflatePrime
+# define inflateReset z_inflateReset
+# define inflateReset2 z_inflateReset2
+# define inflateSetDictionary z_inflateSetDictionary
+# define inflateSync z_inflateSync
+# define inflateSyncPoint z_inflateSyncPoint
+# define inflateUndermine z_inflateUndermine
+# define inflateResetKeep z_inflateResetKeep
+# define inflate_copyright z_inflate_copyright
+# define inflate_fast z_inflate_fast
+# define inflate_table z_inflate_table
+# ifndef Z_SOLO
+# define uncompress z_uncompress
+# endif
+# define zError z_zError
+# ifndef Z_SOLO
+# define zcalloc z_zcalloc
+# define zcfree z_zcfree
+# endif
+# define zlibCompileFlags z_zlibCompileFlags
+# define zlibVersion z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+# define Byte z_Byte
+# define Bytef z_Bytef
+# define alloc_func z_alloc_func
+# define charf z_charf
+# define free_func z_free_func
+# ifndef Z_SOLO
+# define gzFile z_gzFile
+# endif
+# define gz_header z_gz_header
+# define gz_headerp z_gz_headerp
+# define in_func z_in_func
+# define intf z_intf
+# define out_func z_out_func
+# define uInt z_uInt
+# define uIntf z_uIntf
+# define uLong z_uLong
+# define uLongf z_uLongf
+# define voidp z_voidp
+# define voidpc z_voidpc
+# define voidpf z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+# define gz_header_s z_gz_header_s
+# define internal_state z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+# define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+# define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+# define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+# ifndef WIN32
+# define WIN32
+# endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+# ifndef SYS16BIT
+# define SYS16BIT
+# endif
+# endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+# define MAXSEG_64K
+#endif
+#ifdef MSDOS
+# define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+# ifndef STDC
+# define STDC
+# endif
+# if __STDC_VERSION__ >= 199901L
+# ifndef STDC99
+# define STDC99
+# endif
+# endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+# define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */
+# define STDC
+#endif
+
+#ifndef STDC
+# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+# define const /* note: need a more gentle solution here */
+# endif
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+# define z_const const
+#else
+# define z_const
+#endif
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+# define NO_DUMMY_DECL
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+# ifdef MAXSEG_64K
+# define MAX_MEM_LEVEL 8
+# else
+# define MAX_MEM_LEVEL 9
+# endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+# define MAX_WBITS 15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+ (1 << (windowBits+2)) + (1 << (memLevel+9))
+ that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+ make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+ The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+ /* Type declarations */
+
+#ifndef OF /* function prototypes */
+# ifdef STDC
+# define OF(args) args
+# else
+# define OF(args) ()
+# endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+# if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# define Z_ARG(args) args
+# else
+# define Z_ARG(args) ()
+# endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+# if defined(M_I86SM) || defined(M_I86MM)
+ /* MSC small or medium model */
+# define SMALL_MEDIUM
+# ifdef _MSC_VER
+# define FAR _far
+# else
+# define FAR far
+# endif
+# endif
+# if (defined(__SMALL__) || defined(__MEDIUM__))
+ /* Turbo C small or medium model */
+# define SMALL_MEDIUM
+# ifdef __BORLANDC__
+# define FAR _far
+# else
+# define FAR far
+# endif
+# endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+ /* If building or using zlib as a DLL, define ZLIB_DLL.
+ * This is not mandatory, but it offers a little performance increase.
+ */
+# ifdef ZLIB_DLL
+# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+# ifdef ZLIB_INTERNAL
+# define ZEXTERN extern __declspec(dllexport)
+# else
+# define ZEXTERN extern __declspec(dllimport)
+# endif
+# endif
+# endif /* ZLIB_DLL */
+ /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+ * define ZLIB_WINAPI.
+ * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+ */
+# ifdef ZLIB_WINAPI
+# ifdef FAR
+# undef FAR
+# endif
+# include <windows.h>
+ /* No need for _export, use ZLIB.DEF instead. */
+ /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+# define ZEXPORT WINAPI
+# ifdef WIN32
+# define ZEXPORTVA WINAPIV
+# else
+# define ZEXPORTVA FAR CDECL
+# endif
+# endif
+#endif
+
+#if defined (__BEOS__)
+# ifdef ZLIB_DLL
+# ifdef ZLIB_INTERNAL
+# define ZEXPORT __declspec(dllexport)
+# define ZEXPORTVA __declspec(dllexport)
+# else
+# define ZEXPORT __declspec(dllimport)
+# define ZEXPORTVA __declspec(dllimport)
+# endif
+# endif
+#endif
+
+#ifndef ZEXTERN
+# define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+# define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+# define ZEXPORTVA
+#endif
+
+#ifndef FAR
+# define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char Byte; /* 8 bits */
+#endif
+typedef unsigned int uInt; /* 16 bits or more */
+typedef unsigned long uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+ /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+# define Bytef Byte FAR
+#else
+ typedef Byte FAR Bytef;
+#endif
+typedef char FAR charf;
+typedef int FAR intf;
+typedef uInt FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+ typedef void const *voidpc;
+ typedef void FAR *voidpf;
+ typedef void *voidp;
+#else
+ typedef Byte const *voidpc;
+ typedef Byte FAR *voidpf;
+ typedef Byte *voidp;
+#endif
+
+/* ./configure may #define Z_U4 here */
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+# include <limits.h>
+# if (UINT_MAX == 0xffffffffUL)
+# define Z_U4 unsigned
+# else
+# if (ULONG_MAX == 0xffffffffUL)
+# define Z_U4 unsigned long
+# else
+# if (USHRT_MAX == 0xffffffffUL)
+# define Z_U4 unsigned short
+# endif
+# endif
+# endif
+#endif
+
+#ifdef Z_U4
+ typedef Z_U4 z_crc_t;
+#else
+ typedef unsigned long z_crc_t;
+#endif
+
+#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */
+# define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
+# define Z_HAVE_STDARG_H
+#endif
+
+#ifdef STDC
+# ifndef Z_SOLO
+# include <sys/types.h> /* for off_t */
+# endif
+#endif
+
+#ifdef _WIN32
+# include <stddef.h> /* for wchar_t */
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+# undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+# define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+# if defined(Z_HAVE_UNISTD_H) || defined(LARGEFILE64_SOURCE)
+# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+# ifdef VMS
+# include <unixio.h> /* for off_t */
+# endif
+# ifndef z_off_t
+# define z_off_t off_t
+# endif
+# endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+# define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+# define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+# define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
+# define SEEK_SET 0 /* Seek from beginning of file. */
+# define SEEK_CUR 1 /* Seek from current position. */
+# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+# define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+# define z_off64_t off64_t
+#else
+# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+# define z_off64_t __int64
+# else
+# define z_off64_t z_off_t
+# endif
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+ #pragma map(deflateInit_,"DEIN")
+ #pragma map(deflateInit2_,"DEIN2")
+ #pragma map(deflateEnd,"DEEND")
+ #pragma map(deflateBound,"DEBND")
+ #pragma map(inflateInit_,"ININ")
+ #pragma map(inflateInit2_,"ININ2")
+ #pragma map(inflateEnd,"INEND")
+ #pragma map(inflateSync,"INSY")
+ #pragma map(inflateSetDictionary,"INSEDI")
+ #pragma map(compressBound,"CMBND")
+ #pragma map(inflate_table,"INTABL")
+ #pragma map(inflate_fast,"INFA")
+ #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/libs/ext/zlib/zlib-1.2.7.tar.gz b/libs/ext/zlib/zlib-1.2.7.tar.gz
new file mode 100644
index 0000000..833e888
Binary files /dev/null and b/libs/ext/zlib/zlib-1.2.7.tar.gz differ
diff --git a/libs/ext/zlib/zlib.h b/libs/ext/zlib/zlib.h
new file mode 100644
index 0000000..3edf3ac
--- /dev/null
+++ b/libs/ext/zlib/zlib.h
@@ -0,0 +1,1744 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+ version 1.2.7, May 2nd, 2012
+
+ Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup at gzip.org madler at alumni.caltech.edu
+
+
+ The data format used by the zlib library is described by RFCs (Request for
+ Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+ (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
+*/
+
+#ifndef ZLIB_H
+#define ZLIB_H
+
+#include "zconf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ZLIB_VERSION "1.2.7"
+#define ZLIB_VERNUM 0x1270
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 2
+#define ZLIB_VER_REVISION 7
+#define ZLIB_VER_SUBREVISION 0
+
+/*
+ The 'zlib' compression library provides in-memory compression and
+ decompression functions, including integrity checks of the uncompressed data.
+ This version of the library supports only one compression method (deflation)
+ but other algorithms will be added later and will have the same stream
+ interface.
+
+ Compression can be done in a single step if the buffers are large enough,
+ or can be done by repeated calls of the compression function. In the latter
+ case, the application must provide more input and/or consume the output
+ (providing more output space) before each call.
+
+ The compressed data format used by default by the in-memory functions is
+ the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
+ around a deflate stream, which is itself documented in RFC 1951.
+
+ The library also supports reading and writing files in gzip (.gz) format
+ with an interface similar to that of stdio using the functions that start
+ with "gz". The gzip format is different from the zlib format. gzip is a
+ gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
+
+ This library can optionally read and write gzip streams in memory as well.
+
+ The zlib format was designed to be compact and fast for use in memory
+ and on communications channels. The gzip format was designed for single-
+ file compression on file systems, has a larger header than zlib to maintain
+ directory information, and uses a different, slower check method than zlib.
+
+ The library does not install any signal handler. The decoder checks
+ the consistency of the compressed data, so the library should never crash
+ even in case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+typedef void (*free_func) OF((voidpf opaque, voidpf address));
+
+struct internal_state;
+
+typedef struct z_stream_s {
+ z_const Bytef *next_in; /* next input byte */
+ uInt avail_in; /* number of bytes available at next_in */
+ uLong total_in; /* total number of input bytes read so far */
+
+ Bytef *next_out; /* next output byte should be put there */
+ uInt avail_out; /* remaining free space at next_out */
+ uLong total_out; /* total number of bytes output so far */
+
+ z_const char *msg; /* last error message, NULL if no error */
+ struct internal_state FAR *state; /* not visible by applications */
+
+ alloc_func zalloc; /* used to allocate the internal state */
+ free_func zfree; /* used to free the internal state */
+ voidpf opaque; /* private data object passed to zalloc and zfree */
+
+ int data_type; /* best guess about the data type: binary or text */
+ uLong adler; /* adler32 value of the uncompressed data */
+ uLong reserved; /* reserved for future use */
+} z_stream;
+
+typedef z_stream FAR *z_streamp;
+
+/*
+ gzip header information passed to and from zlib routines. See RFC 1952
+ for more details on the meanings of these fields.
+*/
+typedef struct gz_header_s {
+ int text; /* true if compressed data believed to be text */
+ uLong time; /* modification time */
+ int xflags; /* extra flags (not used when writing a gzip file) */
+ int os; /* operating system */
+ Bytef *extra; /* pointer to extra field or Z_NULL if none */
+ uInt extra_len; /* extra field length (valid if extra != Z_NULL) */
+ uInt extra_max; /* space at extra (only when reading header) */
+ Bytef *name; /* pointer to zero-terminated file name or Z_NULL */
+ uInt name_max; /* space at name (only when reading header) */
+ Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */
+ uInt comm_max; /* space at comment (only when reading header) */
+ int hcrc; /* true if there was or will be a header crc */
+ int done; /* true when done reading gzip header (not used
+ when writing a gzip file) */
+} gz_header;
+
+typedef gz_header FAR *gz_headerp;
+
+/*
+ The application must update next_in and avail_in when avail_in has dropped
+ to zero. It must update next_out and avail_out when avail_out has dropped
+ to zero. The application must initialize zalloc, zfree and opaque before
+ calling the init function. All other fields are set by the compression
+ library and must not be updated by the application.
+
+ The opaque value provided by the application will be passed as the first
+ parameter for calls of zalloc and zfree. This can be useful for custom
+ memory management. The compression library attaches no meaning to the
+ opaque value.
+
+ zalloc must return Z_NULL if there is not enough memory for the object.
+ If zlib is used in a multi-threaded application, zalloc and zfree must be
+ thread safe.
+
+ On 16-bit systems, the functions zalloc and zfree must be able to allocate
+ exactly 65536 bytes, but will not be required to allocate more than this if
+ the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers
+ returned by zalloc for objects of exactly 65536 bytes *must* have their
+ offset normalized to zero. The default allocation function provided by this
+ library ensures this (see zutil.c). To reduce memory requirements and avoid
+ any allocation of 64K objects, at the expense of compression ratio, compile
+ the library with -DMAX_WBITS=14 (see zconf.h).
+
+ The fields total_in and total_out can be used for statistics or progress
+ reports. After compression, total_in holds the total size of the
+ uncompressed data and may be saved for use in the decompressor (particularly
+ if the decompressor wants to decompress everything in a single step).
+*/
+
+ /* constants */
+
+#define Z_NO_FLUSH 0
+#define Z_PARTIAL_FLUSH 1
+#define Z_SYNC_FLUSH 2
+#define Z_FULL_FLUSH 3
+#define Z_FINISH 4
+#define Z_BLOCK 5
+#define Z_TREES 6
+/* Allowed flush values; see deflate() and inflate() below for details */
+
+#define Z_OK 0
+#define Z_STREAM_END 1
+#define Z_NEED_DICT 2
+#define Z_ERRNO (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR (-3)
+#define Z_MEM_ERROR (-4)
+#define Z_BUF_ERROR (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION 0
+#define Z_BEST_SPEED 1
+#define Z_BEST_COMPRESSION 9
+#define Z_DEFAULT_COMPRESSION (-1)
+/* compression levels */
+
+#define Z_FILTERED 1
+#define Z_HUFFMAN_ONLY 2
+#define Z_RLE 3
+#define Z_FIXED 4
+#define Z_DEFAULT_STRATEGY 0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY 0
+#define Z_TEXT 1
+#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */
+#define Z_UNKNOWN 2
+/* Possible values of the data_type field (though see inflate()) */
+
+#define Z_DEFLATED 8
+/* The deflate compression method (the only one supported in this version) */
+
+#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
+
+#define zlib_version zlibVersion()
+/* for compatibility with versions < 1.0.2 */
+
+
+ /* basic functions */
+
+ZEXTERN const char * ZEXPORT zlibVersion OF((void));
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+ If the first character differs, the library code actually used is not
+ compatible with the zlib.h header file used by the application. This check
+ is automatically made by deflateInit and inflateInit.
+ */
+
+/*
+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+
+ Initializes the internal stream state for compression. The fields
+ zalloc, zfree and opaque must be initialized before by the caller. If
+ zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
+ allocation functions.
+
+ The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+ 1 gives best speed, 9 gives best compression, 0 gives no compression at all
+ (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION
+ requests a default compromise between speed and compression (currently
+ equivalent to level 6).
+
+ deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_STREAM_ERROR if level is not a valid compression level, or
+ Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+ with the version assumed by the caller (ZLIB_VERSION). msg is set to null
+ if there is no error message. deflateInit does not perform any compression:
+ this will be done by deflate().
+*/
+
+
+ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
+/*
+ deflate compresses as much data as possible, and stops when the input
+ buffer becomes empty or the output buffer becomes full. It may introduce
+ some output latency (reading input without producing any output) except when
+ forced to flush.
+
+ The detailed semantics are as follows. deflate performs one or both of the
+ following actions:
+
+ - Compress more input starting at next_in and update next_in and avail_in
+ accordingly. If not all input can be processed (because there is not
+ enough room in the output buffer), next_in and avail_in are updated and
+ processing will resume at this point for the next call of deflate().
+
+ - Provide more output starting at next_out and update next_out and avail_out
+ accordingly. This action is forced if the parameter flush is non zero.
+ Forcing flush frequently degrades the compression ratio, so this parameter
+ should be set only when necessary (in interactive applications). Some
+ output may be provided even if flush is not set.
+
+ Before the call of deflate(), the application should ensure that at least
+ one of the actions is possible, by providing more input and/or consuming more
+ output, and updating avail_in or avail_out accordingly; avail_out should
+ never be zero before the call. The application can consume the compressed
+ output when it wants, for example when the output buffer is full (avail_out
+ == 0), or after each call of deflate(). If deflate returns Z_OK and with
+ zero avail_out, it must be called again after making room in the output
+ buffer because there might be more output pending.
+
+ Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
+ decide how much data to accumulate before producing output, in order to
+ maximize compression.
+
+ If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+ flushed to the output buffer and the output is aligned on a byte boundary, so
+ that the decompressor can get all input data available so far. (In
+ particular avail_in is zero after the call if enough output space has been
+ provided before the call.) Flushing may degrade compression for some
+ compression algorithms and so it should be used only when necessary. This
+ completes the current deflate block and follows it with an empty stored block
+ that is three bits plus filler bits to the next byte, followed by four bytes
+ (00 00 ff ff).
+
+ If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
+ output buffer, but the output is not aligned to a byte boundary. All of the
+ input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
+ This completes the current deflate block and follows it with an empty fixed
+ codes block that is 10 bits long. This assures that enough bytes are output
+ in order for the decompressor to finish the block before the empty fixed code
+ block.
+
+ If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
+ for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
+ seven bits of the current block are held to be written as the next byte after
+ the next deflate block is completed. In this case, the decompressor may not
+ be provided enough bits at this point in order to complete decompression of
+ the data provided so far to the compressor. It may need to wait for the next
+ block to be emitted. This is for advanced applications that need to control
+ the emission of deflate blocks.
+
+ If flush is set to Z_FULL_FLUSH, all output is flushed as with
+ Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+ restart from this point if previous compressed data has been damaged or if
+ random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
+ compression.
+
+ If deflate returns with avail_out == 0, this function must be called again
+ with the same value of the flush parameter and more output space (updated
+ avail_out), until the flush is complete (deflate returns with non-zero
+ avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
+ avail_out is greater than six to avoid repeated flush markers due to
+ avail_out == 0 on return.
+
+ If the parameter flush is set to Z_FINISH, pending input is processed,
+ pending output is flushed and deflate returns with Z_STREAM_END if there was
+ enough output space; if deflate returns with Z_OK, this function must be
+ called again with Z_FINISH and more output space (updated avail_out) but no
+ more input data, until it returns with Z_STREAM_END or an error. After
+ deflate has returned Z_STREAM_END, the only possible operations on the stream
+ are deflateReset or deflateEnd.
+
+ Z_FINISH can be used immediately after deflateInit if all the compression
+ is to be done in a single step. In this case, avail_out must be at least the
+ value returned by deflateBound (see below). Then deflate is guaranteed to
+ return Z_STREAM_END. If not enough output space is provided, deflate will
+ not return Z_STREAM_END, and it must be called again as described above.
+
+ deflate() sets strm->adler to the adler32 checksum of all input read
+ so far (that is, total_in bytes).
+
+ deflate() may update strm->data_type if it can make a good guess about
+ the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered
+ binary. This field is only for information purposes and does not affect the
+ compression algorithm in any manner.
+
+ deflate() returns Z_OK if some progress has been made (more input
+ processed or more output produced), Z_STREAM_END if all input has been
+ consumed and all output has been produced (only when flush is set to
+ Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+ if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
+ (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not
+ fatal, and deflate() can be called again with more input and more output
+ space to continue compressing.
+*/
+
+
+ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
+/*
+ All dynamically allocated data structures for this stream are freed.
+ This function discards any unprocessed input and does not flush any pending
+ output.
+
+ deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+ stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+ prematurely (some input or output was discarded). In the error case, msg
+ may be set but then points to a static string (which must not be
+ deallocated).
+*/
+
+
+/*
+ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
+
+ Initializes the internal stream state for decompression. The fields
+ next_in, avail_in, zalloc, zfree and opaque must be initialized before by
+ the caller. If next_in is not Z_NULL and avail_in is large enough (the
+ exact value depends on the compression method), inflateInit determines the
+ compression method from the zlib header and allocates all data structures
+ accordingly; otherwise the allocation will be deferred to the first call of
+ inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+ use default allocation functions.
+
+ inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+ version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+ invalid, such as a null pointer to the structure. msg is set to null if
+ there is no error message. inflateInit does not perform any decompression
+ apart from possibly reading the zlib header if present: actual decompression
+ will be done by inflate(). (So next_in and avail_in may be modified, but
+ next_out and avail_out are unused and unchanged.) The current implementation
+ of inflateInit() does not process any header information -- that is deferred
+ until inflate() is called.
+*/
+
+
+ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
+/*
+ inflate decompresses as much data as possible, and stops when the input
+ buffer becomes empty or the output buffer becomes full. It may introduce
+ some output latency (reading input without producing any output) except when
+ forced to flush.
+
+ The detailed semantics are as follows. inflate performs one or both of the
+ following actions:
+
+ - Decompress more input starting at next_in and update next_in and avail_in
+ accordingly. If not all input can be processed (because there is not
+ enough room in the output buffer), next_in is updated and processing will
+ resume at this point for the next call of inflate().
+
+ - Provide more output starting at next_out and update next_out and avail_out
+ accordingly. inflate() provides as much output as possible, until there is
+ no more input data or no more space in the output buffer (see below about
+ the flush parameter).
+
+ Before the call of inflate(), the application should ensure that at least
+ one of the actions is possible, by providing more input and/or consuming more
+ output, and updating the next_* and avail_* values accordingly. The
+ application can consume the uncompressed output when it wants, for example
+ when the output buffer is full (avail_out == 0), or after each call of
+ inflate(). If inflate returns Z_OK and with zero avail_out, it must be
+ called again after making room in the output buffer because there might be
+ more output pending.
+
+ The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
+ Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much
+ output as possible to the output buffer. Z_BLOCK requests that inflate()
+ stop if and when it gets to the next deflate block boundary. When decoding
+ the zlib or gzip format, this will cause inflate() to return immediately
+ after the header and before the first block. When doing a raw inflate,
+ inflate() will go ahead and process the first block, and will return when it
+ gets to the end of that block, or when it runs out of data.
+
+ The Z_BLOCK option assists in appending to or combining deflate streams.
+ Also to assist in this, on return inflate() will set strm->data_type to the
+ number of unused bits in the last byte taken from strm->next_in, plus 64 if
+ inflate() is currently decoding the last block in the deflate stream, plus
+ 128 if inflate() returned immediately after decoding an end-of-block code or
+ decoding the complete header up to just before the first byte of the deflate
+ stream. The end-of-block will not be indicated until all of the uncompressed
+ data from that block has been written to strm->next_out. The number of
+ unused bits may in general be greater than seven, except when bit 7 of
+ data_type is set, in which case the number of unused bits will be less than
+ eight. data_type is set as noted here every time inflate() returns for all
+ flush options, and so can be used to determine the amount of currently
+ consumed input in bits.
+
+ The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
+ end of each deflate block header is reached, before any actual data in that
+ block is decoded. This allows the caller to determine the length of the
+ deflate block header for later use in random access within a deflate block.
+ 256 is added to the value of strm->data_type when inflate() returns
+ immediately after reaching the end of the deflate block header.
+
+ inflate() should normally be called until it returns Z_STREAM_END or an
+ error. However if all decompression is to be performed in a single step (a
+ single call of inflate), the parameter flush should be set to Z_FINISH. In
+ this case all pending input is processed and all pending output is flushed;
+ avail_out must be large enough to hold all of the uncompressed data for the
+ operation to complete. (The size of the uncompressed data may have been
+ saved by the compressor for this purpose.) The use of Z_FINISH is not
+ required to perform an inflation in one step. However it may be used to
+ inform inflate that a faster approach can be used for the single inflate()
+ call. Z_FINISH also informs inflate to not maintain a sliding window if the
+ stream completes, which reduces inflate's memory footprint. If the stream
+ does not complete, either because not all of the stream is provided or not
+ enough output space is provided, then a sliding window will be allocated and
+ inflate() can be called again to continue the operation as if Z_NO_FLUSH had
+ been used.
+
+ In this implementation, inflate() always flushes as much output as
+ possible to the output buffer, and always uses the faster approach on the
+ first call. So the effects of the flush parameter in this implementation are
+ on the return value of inflate() as noted below, when inflate() returns early
+ when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
+ memory for a sliding window when Z_FINISH is used.
+
+ If a preset dictionary is needed after this call (see inflateSetDictionary
+ below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
+ chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
+ strm->adler to the Adler-32 checksum of all output produced so far (that is,
+ total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
+ below. At the end of the stream, inflate() checks that its computed adler32
+ checksum is equal to that saved by the compressor and returns Z_STREAM_END
+ only if the checksum is correct.
+
+ inflate() can decompress and check either zlib-wrapped or gzip-wrapped
+ deflate data. The header type is detected automatically, if requested when
+ initializing with inflateInit2(). Any information contained in the gzip
+ header is not retained, so applications that need that information should
+ instead use raw inflate, see inflateInit2() below, or inflateBack() and
+ perform their own processing of the gzip header and trailer. When processing
+ gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+ producted so far. The CRC-32 is checked against the gzip trailer.
+
+ inflate() returns Z_OK if some progress has been made (more input processed
+ or more output produced), Z_STREAM_END if the end of the compressed data has
+ been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+ preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+ corrupted (input stream not conforming to the zlib format or incorrect check
+ value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+ next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
+ Z_BUF_ERROR if no progress is possible or if there was not enough room in the
+ output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
+ inflate() can be called again with more input and more output space to
+ continue decompressing. If Z_DATA_ERROR is returned, the application may
+ then call inflateSync() to look for a good compression block if a partial
+ recovery of the data is desired.
+*/
+
+
+ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
+/*
+ All dynamically allocated data structures for this stream are freed.
+ This function discards any unprocessed input and does not flush any pending
+ output.
+
+ inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+ was inconsistent. In the error case, msg may be set but then points to a
+ static string (which must not be deallocated).
+*/
+
+
+ /* Advanced functions */
+
+/*
+ The following functions are needed only in some special applications.
+*/
+
+/*
+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+ int level,
+ int method,
+ int windowBits,
+ int memLevel,
+ int strategy));
+
+ This is another version of deflateInit with more compression options. The
+ fields next_in, zalloc, zfree and opaque must be initialized before by the
+ caller.
+
+ The method parameter is the compression method. It must be Z_DEFLATED in
+ this version of the library.
+
+ The windowBits parameter is the base two logarithm of the window size
+ (the size of the history buffer). It should be in the range 8..15 for this
+ version of the library. Larger values of this parameter result in better
+ compression at the expense of memory usage. The default value is 15 if
+ deflateInit is used instead.
+
+ windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
+ determines the window size. deflate() will then generate raw deflate data
+ with no zlib header or trailer, and will not compute an adler32 check value.
+
+ windowBits can also be greater than 15 for optional gzip encoding. Add
+ 16 to windowBits to write a simple gzip header and trailer around the
+ compressed data instead of a zlib wrapper. The gzip header will have no
+ file name, no extra data, no comment, no modification time (set to zero), no
+ header crc, and the operating system will be set to 255 (unknown). If a
+ gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+
+ The memLevel parameter specifies how much memory should be allocated
+ for the internal compression state. memLevel=1 uses minimum memory but is
+ slow and reduces compression ratio; memLevel=9 uses maximum memory for
+ optimal speed. The default value is 8. See zconf.h for total memory usage
+ as a function of windowBits and memLevel.
+
+ The strategy parameter is used to tune the compression algorithm. Use the
+ value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+ filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
+ string match), or Z_RLE to limit match distances to one (run-length
+ encoding). Filtered data consists mostly of small values with a somewhat
+ random distribution. In this case, the compression algorithm is tuned to
+ compress them better. The effect of Z_FILTERED is to force more Huffman
+ coding and less string matching; it is somewhat intermediate between
+ Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as
+ fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The
+ strategy parameter only affects the compression ratio but not the
+ correctness of the compressed output even if it is not set appropriately.
+ Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
+ decoder for special applications.
+
+ deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
+ method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
+ incompatible with the version assumed by the caller (ZLIB_VERSION). msg is
+ set to null if there is no error message. deflateInit2 does not perform any
+ compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
+ const Bytef *dictionary,
+ uInt dictLength));
+/*
+ Initializes the compression dictionary from the given byte sequence
+ without producing any compressed output. When using the zlib format, this
+ function must be called immediately after deflateInit, deflateInit2 or
+ deflateReset, and before any call of deflate. When doing raw deflate, this
+ function must be called either before any call of deflate, or immediately
+ after the completion of a deflate block, i.e. after all input has been
+ consumed and all output has been delivered when using any of the flush
+ options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The
+ compressor and decompressor must use exactly the same dictionary (see
+ inflateSetDictionary).
+
+ The dictionary should consist of strings (byte sequences) that are likely
+ to be encountered later in the data to be compressed, with the most commonly
+ used strings preferably put towards the end of the dictionary. Using a
+ dictionary is most useful when the data to be compressed is short and can be
+ predicted with good accuracy; the data can then be compressed better than
+ with the default empty dictionary.
+
+ Depending on the size of the compression data structures selected by
+ deflateInit or deflateInit2, a part of the dictionary may in effect be
+ discarded, for example if the dictionary is larger than the window size
+ provided in deflateInit or deflateInit2. Thus the strings most likely to be
+ useful should be put at the end of the dictionary, not at the front. In
+ addition, the current implementation of deflate will use at most the window
+ size minus 262 bytes of the provided dictionary.
+
+ Upon return of this function, strm->adler is set to the adler32 value
+ of the dictionary; the decompressor may later use this value to determine
+ which dictionary has been used by the compressor. (The adler32 value
+ applies to the whole dictionary even if only a subset of the dictionary is
+ actually used by the compressor.) If a raw deflate was requested, then the
+ adler32 value is not computed and strm->adler is not set.
+
+ deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+ parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
+ inconsistent (for example if deflate has already been called for this stream
+ or if not at a block boundary for raw deflate). deflateSetDictionary does
+ not perform any compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
+ z_streamp source));
+/*
+ Sets the destination stream as a complete copy of the source stream.
+
+ This function can be useful when several compression strategies will be
+ tried, for example when there are several ways of pre-processing the input
+ data with a filter. The streams that will be discarded should then be freed
+ by calling deflateEnd. Note that deflateCopy duplicates the internal
+ compression state which can be quite large, so this strategy is slow and can
+ consume lots of memory.
+
+ deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+ (such as zalloc being Z_NULL). msg is left unchanged in both source and
+ destination.
+*/
+
+ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
+/*
+ This function is equivalent to deflateEnd followed by deflateInit,
+ but does not free and reallocate all the internal compression state. The
+ stream will keep the same compression level and any other attributes that
+ may have been set by deflateInit2.
+
+ deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
+ int level,
+ int strategy));
+/*
+ Dynamically update the compression level and compression strategy. The
+ interpretation of level and strategy is as in deflateInit2. This can be
+ used to switch between compression and straight copy of the input data, or
+ to switch to a different kind of input data requiring a different strategy.
+ If the compression level is changed, the input available so far is
+ compressed with the old level (and may be flushed); the new level will take
+ effect only at the next call of deflate().
+
+ Before the call of deflateParams, the stream state must be set as for
+ a call of deflate(), since the currently available input may have to be
+ compressed and flushed. In particular, strm->avail_out must be non-zero.
+
+ deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+ stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
+ strm->avail_out was zero.
+*/
+
+ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
+ int good_length,
+ int max_lazy,
+ int nice_length,
+ int max_chain));
+/*
+ Fine tune deflate's internal compression parameters. This should only be
+ used by someone who understands the algorithm used by zlib's deflate for
+ searching for the best matching string, and even then only by the most
+ fanatic optimizer trying to squeeze out the last compressed bit for their
+ specific input data. Read the deflate.c source code for the meaning of the
+ max_lazy, good_length, nice_length, and max_chain parameters.
+
+ deflateTune() can be called after deflateInit() or deflateInit2(), and
+ returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
+ */
+
+ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
+ uLong sourceLen));
+/*
+ deflateBound() returns an upper bound on the compressed size after
+ deflation of sourceLen bytes. It must be called after deflateInit() or
+ deflateInit2(), and after deflateSetHeader(), if used. This would be used
+ to allocate an output buffer for deflation in a single pass, and so would be
+ called before deflate(). If that first deflate() call is provided the
+ sourceLen input bytes, an output buffer allocated to the size returned by
+ deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
+ to return Z_STREAM_END. Note that it is possible for the compressed size to
+ be larger than the value returned by deflateBound() if flush options other
+ than Z_FINISH or Z_NO_FLUSH are used.
+*/
+
+ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
+ unsigned *pending,
+ int *bits));
+/*
+ deflatePending() returns the number of bytes and bits of output that have
+ been generated, but not yet provided in the available output. The bytes not
+ provided would be due to the available output space having being consumed.
+ The number of bits of output not provided are between 0 and 7, where they
+ await more bits to join them in order to fill out a full byte. If pending
+ or bits are Z_NULL, then those values are not set.
+
+ deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+ */
+
+ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
+ int bits,
+ int value));
+/*
+ deflatePrime() inserts bits in the deflate output stream. The intent
+ is that this function is used to start off the deflate output with the bits
+ leftover from a previous deflate stream when appending to it. As such, this
+ function can only be used for raw deflate, and must be used before the first
+ deflate() call after a deflateInit2() or deflateReset(). bits must be less
+ than or equal to 16, and that many of the least significant bits of value
+ will be inserted in the output.
+
+ deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
+ room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
+ source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
+ gz_headerp head));
+/*
+ deflateSetHeader() provides gzip header information for when a gzip
+ stream is requested by deflateInit2(). deflateSetHeader() may be called
+ after deflateInit2() or deflateReset() and before the first call of
+ deflate(). The text, time, os, extra field, name, and comment information
+ in the provided gz_header structure are written to the gzip header (xflag is
+ ignored -- the extra flags are set according to the compression level). The
+ caller must assure that, if not Z_NULL, name and comment are terminated with
+ a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
+ available there. If hcrc is true, a gzip header crc is included. Note that
+ the current versions of the command-line version of gzip (up through version
+ 1.3.x) do not support header crc's, and will report that it is a "multi-part
+ gzip file" and give up.
+
+ If deflateSetHeader is not used, the default gzip header has text false,
+ the time set to zero, and os set to 255, with no extra, name, or comment
+ fields. The gzip header is returned to the default state by deflateReset().
+
+ deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
+ int windowBits));
+
+ This is another version of inflateInit with an extra parameter. The
+ fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+ before by the caller.
+
+ The windowBits parameter is the base two logarithm of the maximum window
+ size (the size of the history buffer). It should be in the range 8..15 for
+ this version of the library. The default value is 15 if inflateInit is used
+ instead. windowBits must be greater than or equal to the windowBits value
+ provided to deflateInit2() while compressing, or it must be equal to 15 if
+ deflateInit2() was not used. If a compressed stream with a larger window
+ size is given as input, inflate() will return with the error code
+ Z_DATA_ERROR instead of trying to allocate a larger window.
+
+ windowBits can also be zero to request that inflate use the window size in
+ the zlib header of the compressed stream.
+
+ windowBits can also be -8..-15 for raw inflate. In this case, -windowBits
+ determines the window size. inflate() will then process raw deflate data,
+ not looking for a zlib or gzip header, not generating a check value, and not
+ looking for any check values for comparison at the end of the stream. This
+ is for use with other formats that use the deflate compressed data format
+ such as zip. Those formats provide their own check values. If a custom
+ format is developed using the raw deflate format for compressed data, it is
+ recommended that a check value such as an adler32 or a crc32 be applied to
+ the uncompressed data as is done in the zlib, gzip, and zip formats. For
+ most applications, the zlib format should be used as is. Note that comments
+ above on the use in deflateInit2() applies to the magnitude of windowBits.
+
+ windowBits can also be greater than 15 for optional gzip decoding. Add
+ 32 to windowBits to enable zlib and gzip decoding with automatic header
+ detection, or add 16 to decode only the gzip format (the zlib format will
+ return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
+ crc32 instead of an adler32.
+
+ inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+ version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+ invalid, such as a null pointer to the structure. msg is set to null if
+ there is no error message. inflateInit2 does not perform any decompression
+ apart from possibly reading the zlib header if present: actual decompression
+ will be done by inflate(). (So next_in and avail_in may be modified, but
+ next_out and avail_out are unused and unchanged.) The current implementation
+ of inflateInit2() does not process any header information -- that is
+ deferred until inflate() is called.
+*/
+
+ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
+ const Bytef *dictionary,
+ uInt dictLength));
+/*
+ Initializes the decompression dictionary from the given uncompressed byte
+ sequence. This function must be called immediately after a call of inflate,
+ if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
+ can be determined from the adler32 value returned by that call of inflate.
+ The compressor and decompressor must use exactly the same dictionary (see
+ deflateSetDictionary). For raw inflate, this function can be called at any
+ time to set the dictionary. If the provided dictionary is smaller than the
+ window and there is already data in the window, then the provided dictionary
+ will amend what's there. The application must insure that the dictionary
+ that was used for compression is provided.
+
+ inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+ parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
+ inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+ expected one (incorrect adler32 value). inflateSetDictionary does not
+ perform any decompression: this will be done by subsequent calls of
+ inflate().
+*/
+
+ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
+/*
+ Skips invalid compressed data until a possible full flush point (see above
+ for the description of deflate with Z_FULL_FLUSH) can be found, or until all
+ available input is skipped. No output is provided.
+
+ inflateSync searches for a 00 00 FF FF pattern in the compressed data.
+ All full flush points have this pattern, but not all occurences of this
+ pattern are full flush points.
+
+ inflateSync returns Z_OK if a possible full flush point has been found,
+ Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
+ has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
+ In the success case, the application may save the current current value of
+ total_in which indicates where valid compressed data was found. In the
+ error case, the application may repeatedly call inflateSync, providing more
+ input each time, until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+ z_streamp source));
+/*
+ Sets the destination stream as a complete copy of the source stream.
+
+ This function can be useful when randomly accessing a large stream. The
+ first pass through the stream can periodically record the inflate state,
+ allowing restarting inflate at those points when randomly accessing the
+ stream.
+
+ inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+ (such as zalloc being Z_NULL). msg is left unchanged in both source and
+ destination.
+*/
+
+ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
+/*
+ This function is equivalent to inflateEnd followed by inflateInit,
+ but does not free and reallocate all the internal decompression state. The
+ stream will keep attributes that may have been set by inflateInit2.
+
+ inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
+ int windowBits));
+/*
+ This function is the same as inflateReset, but it also permits changing
+ the wrap and window size requests. The windowBits parameter is interpreted
+ the same as it is for inflateInit2.
+
+ inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent (such as zalloc or state being Z_NULL), or if
+ the windowBits parameter is invalid.
+*/
+
+ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
+ int bits,
+ int value));
+/*
+ This function inserts bits in the inflate input stream. The intent is
+ that this function is used to start inflating at a bit position in the
+ middle of a byte. The provided bits will be used before any bytes are used
+ from next_in. This function should only be used with raw inflate, and
+ should be used before the first inflate() call after inflateInit2() or
+ inflateReset(). bits must be less than or equal to 16, and that many of the
+ least significant bits of value will be inserted in the input.
+
+ If bits is negative, then the input stream bit buffer is emptied. Then
+ inflatePrime() can be called again to put bits in the buffer. This is used
+ to clear out bits leftover after feeding inflate a block description prior
+ to feeding inflate codes.
+
+ inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+*/
+
+ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
+/*
+ This function returns two values, one in the lower 16 bits of the return
+ value, and the other in the remaining upper bits, obtained by shifting the
+ return value down 16 bits. If the upper value is -1 and the lower value is
+ zero, then inflate() is currently decoding information outside of a block.
+ If the upper value is -1 and the lower value is non-zero, then inflate is in
+ the middle of a stored block, with the lower value equaling the number of
+ bytes from the input remaining to copy. If the upper value is not -1, then
+ it is the number of bits back from the current bit position in the input of
+ the code (literal or length/distance pair) currently being processed. In
+ that case the lower value is the number of bytes already emitted for that
+ code.
+
+ A code is being processed if inflate is waiting for more input to complete
+ decoding of the code, or if it has completed decoding but is waiting for
+ more output space to write the literal or match data.
+
+ inflateMark() is used to mark locations in the input data for random
+ access, which may be at bit positions, and to note those cases where the
+ output of a code may span boundaries of random access blocks. The current
+ location in the input stream can be determined from avail_in and data_type
+ as noted in the description for the Z_BLOCK flush parameter for inflate.
+
+ inflateMark returns the value noted above or -1 << 16 if the provided
+ source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
+ gz_headerp head));
+/*
+ inflateGetHeader() requests that gzip header information be stored in the
+ provided gz_header structure. inflateGetHeader() may be called after
+ inflateInit2() or inflateReset(), and before the first call of inflate().
+ As inflate() processes the gzip stream, head->done is zero until the header
+ is completed, at which time head->done is set to one. If a zlib stream is
+ being decoded, then head->done is set to -1 to indicate that there will be
+ no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be
+ used to force inflate() to return immediately after header processing is
+ complete and before any actual data is decompressed.
+
+ The text, time, xflags, and os fields are filled in with the gzip header
+ contents. hcrc is set to true if there is a header CRC. (The header CRC
+ was valid if done is set to one.) If extra is not Z_NULL, then extra_max
+ contains the maximum number of bytes to write to extra. Once done is true,
+ extra_len contains the actual extra field length, and extra contains the
+ extra field, or that field truncated if extra_max is less than extra_len.
+ If name is not Z_NULL, then up to name_max characters are written there,
+ terminated with a zero unless the length is greater than name_max. If
+ comment is not Z_NULL, then up to comm_max characters are written there,
+ terminated with a zero unless the length is greater than comm_max. When any
+ of extra, name, or comment are not Z_NULL and the respective field is not
+ present in the header, then that field is set to Z_NULL to signal its
+ absence. This allows the use of deflateSetHeader() with the returned
+ structure to duplicate the header. However if those fields are set to
+ allocated memory, then the application will need to save those pointers
+ elsewhere so that they can be eventually freed.
+
+ If inflateGetHeader is not used, then the header information is simply
+ discarded. The header is always checked for validity, including the header
+ CRC if present. inflateReset() will reset the process to discard the header
+ information. The application would need to call inflateGetHeader() again to
+ retrieve the header from the next gzip stream.
+
+ inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
+ unsigned char FAR *window));
+
+ Initialize the internal stream state for decompression using inflateBack()
+ calls. The fields zalloc, zfree and opaque in strm must be initialized
+ before the call. If zalloc and zfree are Z_NULL, then the default library-
+ derived memory allocation routines are used. windowBits is the base two
+ logarithm of the window size, in the range 8..15. window is a caller
+ supplied buffer of that size. Except for special applications where it is
+ assured that deflate was used with small window sizes, windowBits must be 15
+ and a 32K byte window must be supplied to be able to decompress general
+ deflate streams.
+
+ See inflateBack() for the usage of these routines.
+
+ inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
+ the parameters are invalid, Z_MEM_ERROR if the internal state could not be
+ allocated, or Z_VERSION_ERROR if the version of the library does not match
+ the version of the header file.
+*/
+
+typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *));
+typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
+
+ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
+ in_func in, void FAR *in_desc,
+ out_func out, void FAR *out_desc));
+/*
+ inflateBack() does a raw inflate with a single call using a call-back
+ interface for input and output. This is more efficient than inflate() for
+ file i/o applications in that it avoids copying between the output and the
+ sliding window by simply making the window itself the output buffer. This
+ function trusts the application to not change the output buffer passed by
+ the output function, at least until inflateBack() returns.
+
+ inflateBackInit() must be called first to allocate the internal state
+ and to initialize the state with the user-provided window buffer.
+ inflateBack() may then be used multiple times to inflate a complete, raw
+ deflate stream with each call. inflateBackEnd() is then called to free the
+ allocated state.
+
+ A raw deflate stream is one with no zlib or gzip header or trailer.
+ This routine would normally be used in a utility that reads zip or gzip
+ files and writes out uncompressed files. The utility would decode the
+ header and process the trailer on its own, hence this routine expects only
+ the raw deflate stream to decompress. This is different from the normal
+ behavior of inflate(), which expects either a zlib or gzip header and
+ trailer around the deflate stream.
+
+ inflateBack() uses two subroutines supplied by the caller that are then
+ called by inflateBack() for input and output. inflateBack() calls those
+ routines until it reads a complete deflate stream and writes out all of the
+ uncompressed data, or until it encounters an error. The function's
+ parameters and return types are defined above in the in_func and out_func
+ typedefs. inflateBack() will call in(in_desc, &buf) which should return the
+ number of bytes of provided input, and a pointer to that input in buf. If
+ there is no input available, in() must return zero--buf is ignored in that
+ case--and inflateBack() will return a buffer error. inflateBack() will call
+ out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out()
+ should return zero on success, or non-zero on failure. If out() returns
+ non-zero, inflateBack() will return with an error. Neither in() nor out()
+ are permitted to change the contents of the window provided to
+ inflateBackInit(), which is also the buffer that out() uses to write from.
+ The length written by out() will be at most the window size. Any non-zero
+ amount of input may be provided by in().
+
+ For convenience, inflateBack() can be provided input on the first call by
+ setting strm->next_in and strm->avail_in. If that input is exhausted, then
+ in() will be called. Therefore strm->next_in must be initialized before
+ calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called
+ immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in
+ must also be initialized, and then if strm->avail_in is not zero, input will
+ initially be taken from strm->next_in[0 .. strm->avail_in - 1].
+
+ The in_desc and out_desc parameters of inflateBack() is passed as the
+ first parameter of in() and out() respectively when they are called. These
+ descriptors can be optionally used to pass any information that the caller-
+ supplied in() and out() functions need to do their job.
+
+ On return, inflateBack() will set strm->next_in and strm->avail_in to
+ pass back any unused input that was provided by the last in() call. The
+ return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
+ if in() or out() returned an error, Z_DATA_ERROR if there was a format error
+ in the deflate stream (in which case strm->msg is set to indicate the nature
+ of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
+ In the case of Z_BUF_ERROR, an input or output error can be distinguished
+ using strm->next_in which will be Z_NULL only if in() returned an error. If
+ strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
+ non-zero. (in() will always be called before out(), so strm->next_in is
+ assured to be defined if out() returns non-zero.) Note that inflateBack()
+ cannot return Z_OK.
+*/
+
+ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
+/*
+ All memory allocated by inflateBackInit() is freed.
+
+ inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
+ state was inconsistent.
+*/
+
+ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+/* Return flags indicating compile-time options.
+
+ Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
+ 1.0: size of uInt
+ 3.2: size of uLong
+ 5.4: size of voidpf (pointer)
+ 7.6: size of z_off_t
+
+ Compiler, assembler, and debug options:
+ 8: DEBUG
+ 9: ASMV or ASMINF -- use ASM code
+ 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
+ 11: 0 (reserved)
+
+ One-time table building (smaller code, but not thread-safe if true):
+ 12: BUILDFIXED -- build static block decoding tables when needed
+ 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
+ 14,15: 0 (reserved)
+
+ Library content (indicates missing functionality):
+ 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
+ deflate code when not needed)
+ 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
+ and decode gzip streams (to avoid linking crc code)
+ 18-19: 0 (reserved)
+
+ Operation variations (changes in library functionality):
+ 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
+ 21: FASTEST -- deflate algorithm with only one, lowest compression level
+ 22,23: 0 (reserved)
+
+ The sprintf variant used by gzprintf (zero is best):
+ 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
+ 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+ 26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+
+ Remainder:
+ 27-31: 0 (reserved)
+ */
+
+#ifndef Z_SOLO
+
+ /* utility functions */
+
+/*
+ The following utility functions are implemented on top of the basic
+ stream-oriented functions. To simplify the interface, some default options
+ are assumed (compression level and memory usage, standard memory allocation
+ functions). The source code of these utility functions can be modified if
+ you need special options.
+*/
+
+ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong sourceLen));
+/*
+ Compresses the source buffer into the destination buffer. sourceLen is
+ the byte length of the source buffer. Upon entry, destLen is the total size
+ of the destination buffer, which must be at least the value returned by
+ compressBound(sourceLen). Upon exit, destLen is the actual size of the
+ compressed buffer.
+
+ compress returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_BUF_ERROR if there was not enough room in the output
+ buffer.
+*/
+
+ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong sourceLen,
+ int level));
+/*
+ Compresses the source buffer into the destination buffer. The level
+ parameter has the same meaning as in deflateInit. sourceLen is the byte
+ length of the source buffer. Upon entry, destLen is the total size of the
+ destination buffer, which must be at least the value returned by
+ compressBound(sourceLen). Upon exit, destLen is the actual size of the
+ compressed buffer.
+
+ compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+ Z_STREAM_ERROR if the level parameter is invalid.
+*/
+
+ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
+/*
+ compressBound() returns an upper bound on the compressed size after
+ compress() or compress2() on sourceLen bytes. It would be used before a
+ compress() or compress2() call to allocate the destination buffer.
+*/
+
+ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong sourceLen));
+/*
+ Decompresses the source buffer into the destination buffer. sourceLen is
+ the byte length of the source buffer. Upon entry, destLen is the total size
+ of the destination buffer, which must be large enough to hold the entire
+ uncompressed data. (The size of the uncompressed data must have been saved
+ previously by the compressor and transmitted to the decompressor by some
+ mechanism outside the scope of this compression library.) Upon exit, destLen
+ is the actual size of the uncompressed buffer.
+
+ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_BUF_ERROR if there was not enough room in the output
+ buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In
+ the case where there is not enough room, uncompress() will fill the output
+ buffer with the uncompressed data up to that point.
+*/
+
+ /* gzip file access functions */
+
+/*
+ This library supports reading and writing files in gzip (.gz) format with
+ an interface similar to that of stdio, using the functions that start with
+ "gz". The gzip format is different from the zlib format. gzip is a gzip
+ wrapper, documented in RFC 1952, wrapped around a deflate stream.
+*/
+
+typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */
+
+/*
+ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
+
+ Opens a gzip (.gz) file for reading or writing. The mode parameter is as
+ in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
+ a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
+ compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
+ for fixed code compression as in "wb9F". (See the description of
+ deflateInit2 for more information about the strategy parameter.) 'T' will
+ request transparent writing or appending with no compression and not using
+ the gzip format.
+
+ "a" can be used instead of "w" to request that the gzip stream that will
+ be written be appended to the file. "+" will result in an error, since
+ reading and writing to the same gzip file is not supported. The addition of
+ "x" when writing will create the file exclusively, which fails if the file
+ already exists. On systems that support it, the addition of "e" when
+ reading or writing will set the flag to close the file on an execve() call.
+
+ These functions, as well as gzip, will read and decode a sequence of gzip
+ streams in a file. The append function of gzopen() can be used to create
+ such a file. (Also see gzflush() for another way to do this.) When
+ appending, gzopen does not test whether the file begins with a gzip stream,
+ nor does it look for the end of the gzip streams to begin appending. gzopen
+ will simply append a gzip stream to the existing file.
+
+ gzopen can be used to read a file which is not in gzip format; in this
+ case gzread will directly read from the file without decompression. When
+ reading, this will be detected automatically by looking for the magic two-
+ byte gzip header.
+
+ gzopen returns NULL if the file could not be opened, if there was
+ insufficient memory to allocate the gzFile state, or if an invalid mode was
+ specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
+ errno can be checked to determine if the reason gzopen failed was that the
+ file could not be opened.
+*/
+
+ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
+/*
+ gzdopen associates a gzFile with the file descriptor fd. File descriptors
+ are obtained from calls like open, dup, creat, pipe or fileno (if the file
+ has been previously opened with fopen). The mode parameter is as in gzopen.
+
+ The next call of gzclose on the returned gzFile will also close the file
+ descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
+ fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
+ mode);. The duplicated descriptor should be saved to avoid a leak, since
+ gzdopen does not close fd if it fails. If you are using fileno() to get the
+ file descriptor from a FILE *, then you will have to use dup() to avoid
+ double-close()ing the file descriptor. Both gzclose() and fclose() will
+ close the associated file descriptor, so they need to have different file
+ descriptors.
+
+ gzdopen returns NULL if there was insufficient memory to allocate the
+ gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
+ provided, or '+' was provided), or if fd is -1. The file descriptor is not
+ used until the next gz* read, write, seek, or close operation, so gzdopen
+ will not detect if fd is invalid (unless fd is -1).
+*/
+
+ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
+/*
+ Set the internal buffer size used by this library's functions. The
+ default buffer size is 8192 bytes. This function must be called after
+ gzopen() or gzdopen(), and before any other calls that read or write the
+ file. The buffer memory allocation is always deferred to the first read or
+ write. Two buffers are allocated, either both of the specified size when
+ writing, or one of the specified size and the other twice that size when
+ reading. A larger buffer size of, for example, 64K or 128K bytes will
+ noticeably increase the speed of decompression (reading).
+
+ The new buffer size also affects the maximum length for gzprintf().
+
+ gzbuffer() returns 0 on success, or -1 on failure, such as being called
+ too late.
+*/
+
+ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
+/*
+ Dynamically update the compression level or strategy. See the description
+ of deflateInit2 for the meaning of these parameters.
+
+ gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
+ opened for writing.
+*/
+
+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
+/*
+ Reads the given number of uncompressed bytes from the compressed file. If
+ the input file is not in gzip format, gzread copies the given number of
+ bytes into the buffer directly from the file.
+
+ After reaching the end of a gzip stream in the input, gzread will continue
+ to read, looking for another gzip stream. Any number of gzip streams may be
+ concatenated in the input file, and will all be decompressed by gzread().
+ If something other than a gzip stream is encountered after a gzip stream,
+ that remaining trailing garbage is ignored (and no error is returned).
+
+ gzread can be used to read a gzip file that is being concurrently written.
+ Upon reaching the end of the input, gzread will return with the available
+ data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
+ gzclearerr can be used to clear the end of file indicator in order to permit
+ gzread to be tried again. Z_OK indicates that a gzip stream was completed
+ on the last gzread. Z_BUF_ERROR indicates that the input file ended in the
+ middle of a gzip stream. Note that gzread does not return -1 in the event
+ of an incomplete gzip stream. This error is deferred until gzclose(), which
+ will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
+ stream. Alternatively, gzerror can be used before gzclose to detect this
+ case.
+
+ gzread returns the number of uncompressed bytes actually read, less than
+ len for end of file, or -1 for error.
+*/
+
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
+ voidpc buf, unsigned len));
+/*
+ Writes the given number of uncompressed bytes into the compressed file.
+ gzwrite returns the number of uncompressed bytes written or 0 in case of
+ error.
+*/
+
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
+/*
+ Converts, formats, and writes the arguments to the compressed file under
+ control of the format string, as in fprintf. gzprintf returns the number of
+ uncompressed bytes actually written, or 0 in case of error. The number of
+ uncompressed bytes written is limited to 8191, or one less than the buffer
+ size given to gzbuffer(). The caller should assure that this limit is not
+ exceeded. If it is exceeded, then gzprintf() will return an error (0) with
+ nothing written. In this case, there may also be a buffer overflow with
+ unpredictable consequences, which is possible only if zlib was compiled with
+ the insecure functions sprintf() or vsprintf() because the secure snprintf()
+ or vsnprintf() functions were not available. This can be determined using
+ zlibCompileFlags().
+*/
+
+ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
+/*
+ Writes the given null-terminated string to the compressed file, excluding
+ the terminating null character.
+
+ gzputs returns the number of characters written, or -1 in case of error.
+*/
+
+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
+/*
+ Reads bytes from the compressed file until len-1 characters are read, or a
+ newline character is read and transferred to buf, or an end-of-file
+ condition is encountered. If any characters are read or if len == 1, the
+ string is terminated with a null character. If no characters are read due
+ to an end-of-file or len < 1, then the buffer is left untouched.
+
+ gzgets returns buf which is a null-terminated string, or it returns NULL
+ for end-of-file or in case of error. If there was an error, the contents at
+ buf are indeterminate.
+*/
+
+ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
+/*
+ Writes c, converted to an unsigned char, into the compressed file. gzputc
+ returns the value that was written, or -1 in case of error.
+*/
+
+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
+/*
+ Reads one byte from the compressed file. gzgetc returns this byte or -1
+ in case of end of file or error. This is implemented as a macro for speed.
+ As such, it does not do all of the checking the other functions do. I.e.
+ it does not check to see if file is NULL, nor whether the structure file
+ points to has been clobbered or not.
+*/
+
+ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
+/*
+ Push one character back onto the stream to be read as the first character
+ on the next read. At least one character of push-back is allowed.
+ gzungetc() returns the character pushed, or -1 on failure. gzungetc() will
+ fail if c is -1, and may fail if a character has been pushed but not read
+ yet. If gzungetc is used immediately after gzopen or gzdopen, at least the
+ output buffer size of pushed characters is allowed. (See gzbuffer above.)
+ The pushed character will be discarded if the stream is repositioned with
+ gzseek() or gzrewind().
+*/
+
+ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
+/*
+ Flushes all pending output into the compressed file. The parameter flush
+ is as in the deflate() function. The return value is the zlib error number
+ (see function gzerror below). gzflush is only permitted when writing.
+
+ If the flush parameter is Z_FINISH, the remaining data is written and the
+ gzip stream is completed in the output. If gzwrite() is called again, a new
+ gzip stream will be started in the output. gzread() is able to read such
+ concatented gzip streams.
+
+ gzflush should be called only when strictly necessary because it will
+ degrade compression if called too often.
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
+ z_off_t offset, int whence));
+
+ Sets the starting position for the next gzread or gzwrite on the given
+ compressed file. The offset represents a number of bytes in the
+ uncompressed data stream. The whence parameter is defined as in lseek(2);
+ the value SEEK_END is not supported.
+
+ If the file is opened for reading, this function is emulated but can be
+ extremely slow. If the file is opened for writing, only forward seeks are
+ supported; gzseek then compresses a sequence of zeroes up to the new
+ starting position.
+
+ gzseek returns the resulting offset location as measured in bytes from
+ the beginning of the uncompressed stream, or -1 in case of error, in
+ particular if the file is opened for writing and the new starting position
+ would be before the current position.
+*/
+
+ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
+/*
+ Rewinds the given file. This function is supported only for reading.
+
+ gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
+
+ Returns the starting position for the next gzread or gzwrite on the given
+ compressed file. This position represents a number of bytes in the
+ uncompressed data stream, and is zero when starting, even if appending or
+ reading a gzip stream from the middle of a file using gzdopen().
+
+ gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
+
+ Returns the current offset in the file being read or written. This offset
+ includes the count of bytes that precede the gzip stream, for example when
+ appending or when using gzdopen() for reading. When reading, the offset
+ does not include as yet unused buffered input. This information can be used
+ for a progress indicator. On error, gzoffset() returns -1.
+*/
+
+ZEXTERN int ZEXPORT gzeof OF((gzFile file));
+/*
+ Returns true (1) if the end-of-file indicator has been set while reading,
+ false (0) otherwise. Note that the end-of-file indicator is set only if the
+ read tried to go past the end of the input, but came up short. Therefore,
+ just like feof(), gzeof() may return false even if there is no more data to
+ read, in the event that the last read request was for the exact number of
+ bytes remaining in the input file. This will happen if the input file size
+ is an exact multiple of the buffer size.
+
+ If gzeof() returns true, then the read functions will return no more data,
+ unless the end-of-file indicator is reset by gzclearerr() and the input file
+ has grown since the previous end of file was detected.
+*/
+
+ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
+/*
+ Returns true (1) if file is being copied directly while reading, or false
+ (0) if file is a gzip stream being decompressed.
+
+ If the input file is empty, gzdirect() will return true, since the input
+ does not contain a gzip stream.
+
+ If gzdirect() is used immediately after gzopen() or gzdopen() it will
+ cause buffers to be allocated to allow reading the file to determine if it
+ is a gzip file. Therefore if gzbuffer() is used, it should be called before
+ gzdirect().
+
+ When writing, gzdirect() returns true (1) if transparent writing was
+ requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note:
+ gzdirect() is not needed when writing. Transparent writing must be
+ explicitly requested, so the application already knows the answer. When
+ linking statically, using gzdirect() will include all of the zlib code for
+ gzip file reading and decompression, which may not be desired.)
+*/
+
+ZEXTERN int ZEXPORT gzclose OF((gzFile file));
+/*
+ Flushes all pending output if necessary, closes the compressed file and
+ deallocates the (de)compression state. Note that once file is closed, you
+ cannot call gzerror with file, since its structures have been deallocated.
+ gzclose must not be called more than once on the same file, just as free
+ must not be called more than once on the same allocation.
+
+ gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
+ file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
+ last read ended in the middle of a gzip stream, or Z_OK on success.
+*/
+
+ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
+ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
+/*
+ Same as gzclose(), but gzclose_r() is only for use when reading, and
+ gzclose_w() is only for use when writing or appending. The advantage to
+ using these instead of gzclose() is that they avoid linking in zlib
+ compression or decompression code that is not used when only reading or only
+ writing respectively. If gzclose() is used, then both compression and
+ decompression code will be included the application when linking to a static
+ zlib library.
+*/
+
+ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
+/*
+ Returns the error message for the last error which occurred on the given
+ compressed file. errnum is set to zlib error number. If an error occurred
+ in the file system and not in the compression library, errnum is set to
+ Z_ERRNO and the application may consult errno to get the exact error code.
+
+ The application must not modify the returned string. Future calls to
+ this function may invalidate the previously returned string. If file is
+ closed, then the string previously returned by gzerror will no longer be
+ available.
+
+ gzerror() should be used to distinguish errors from end-of-file for those
+ functions above that do not distinguish those cases in their return values.
+*/
+
+ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
+/*
+ Clears the error and end-of-file flags for file. This is analogous to the
+ clearerr() function in stdio. This is useful for continuing to read a gzip
+ file that is being written concurrently.
+*/
+
+#endif /* !Z_SOLO */
+
+ /* checksum functions */
+
+/*
+ These functions are not related to compression but are exported
+ anyway because they might be useful in applications using the compression
+ library.
+*/
+
+ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
+/*
+ Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+ return the updated checksum. If buf is Z_NULL, this function returns the
+ required initial value for the checksum.
+
+ An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+ much faster.
+
+ Usage example:
+
+ uLong adler = adler32(0L, Z_NULL, 0);
+
+ while (read_buffer(buffer, length) != EOF) {
+ adler = adler32(adler, buffer, length);
+ }
+ if (adler != original_adler) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
+ z_off_t len2));
+
+ Combine two Adler-32 checksums into one. For two sequences of bytes, seq1
+ and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
+ each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of
+ seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note
+ that the z_off_t type (like off_t) is a signed integer. If len2 is
+ negative, the result has no meaning or utility.
+*/
+
+ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
+/*
+ Update a running CRC-32 with the bytes buf[0..len-1] and return the
+ updated CRC-32. If buf is Z_NULL, this function returns the required
+ initial value for the crc. Pre- and post-conditioning (one's complement) is
+ performed within this function so it shouldn't be done by the application.
+
+ Usage example:
+
+ uLong crc = crc32(0L, Z_NULL, 0);
+
+ while (read_buffer(buffer, length) != EOF) {
+ crc = crc32(crc, buffer, length);
+ }
+ if (crc != original_crc) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
+
+ Combine two CRC-32 check values into one. For two sequences of bytes,
+ seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
+ calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32
+ check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
+ len2.
+*/
+
+
+ /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
+ const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
+ const char *version, int stream_size));
+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
+ int windowBits, int memLevel,
+ int strategy, const char *version,
+ int stream_size));
+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
+ const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+ unsigned char FAR *window,
+ const char *version,
+ int stream_size));
+#define deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+#define inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+
+#ifndef Z_SOLO
+
+/* gzgetc() macro and its supporting function and exposed data structure. Note
+ * that the real internal state is much larger than the exposed structure.
+ * This abbreviated structure exposes just enough for the gzgetc() macro. The
+ * user should not mess with these exposed elements, since their names or
+ * behavior could change in the future, perhaps even capriciously. They can
+ * only be used by the gzgetc() macro. You have been warned.
+ */
+struct gzFile_s {
+ unsigned have;
+ unsigned char *next;
+ z_off64_t pos;
+};
+ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
+#ifdef Z_PREFIX_SET
+# undef z_gzgetc
+# define z_gzgetc(g) \
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#else
+# define gzgetc(g) \
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#endif
+
+/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
+ * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
+ * both are true, the application gets the *64 functions, and the regular
+ * functions are changed to 64 bits) -- in case these are set on systems
+ * without large file support, _LFS64_LARGEFILE must also be true
+ */
+#ifdef Z_LARGE64
+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+ ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+ ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+ ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+#endif
+
+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
+# ifdef Z_PREFIX_SET
+# define z_gzopen z_gzopen64
+# define z_gzseek z_gzseek64
+# define z_gztell z_gztell64
+# define z_gzoffset z_gzoffset64
+# define z_adler32_combine z_adler32_combine64
+# define z_crc32_combine z_crc32_combine64
+# else
+# define gzopen gzopen64
+# define gzseek gzseek64
+# define gztell gztell64
+# define gzoffset gzoffset64
+# define adler32_combine adler32_combine64
+# define crc32_combine crc32_combine64
+# endif
+# ifndef Z_LARGE64
+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+ ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
+ ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
+ ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+# endif
+#else
+ ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
+ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
+ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
+ ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
+ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+#endif
+
+#else /* Z_SOLO */
+
+ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+
+#endif /* !Z_SOLO */
+
+/* hack for buggy compilers */
+#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
+ struct internal_state {int dummy;};
+#endif
+
+/* undocumented functions */
+ZEXTERN const char * ZEXPORT zError OF((int));
+ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void));
+ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
+ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
+ const char *mode));
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ZLIB_H */
diff --git a/libs/ext/zlib/zutil.c b/libs/ext/zlib/zutil.c
new file mode 100644
index 0000000..65e0d3b
--- /dev/null
+++ b/libs/ext/zlib/zutil.c
@@ -0,0 +1,324 @@
+/* zutil.c -- target dependent utility functions for the compression library
+ * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+#ifndef Z_SOLO
+# include "gzguts.h"
+#endif
+
+#ifndef NO_DUMMY_DECL
+struct internal_state {int dummy;}; /* for buggy compilers */
+#endif
+
+const char * const z_errmsg[10] = {
+"need dictionary", /* Z_NEED_DICT 2 */
+"stream end", /* Z_STREAM_END 1 */
+"", /* Z_OK 0 */
+"file error", /* Z_ERRNO (-1) */
+"stream error", /* Z_STREAM_ERROR (-2) */
+"data error", /* Z_DATA_ERROR (-3) */
+"insufficient memory", /* Z_MEM_ERROR (-4) */
+"buffer error", /* Z_BUF_ERROR (-5) */
+"incompatible version",/* Z_VERSION_ERROR (-6) */
+""};
+
+
+const char * ZEXPORT zlibVersion()
+{
+ return ZLIB_VERSION;
+}
+
+uLong ZEXPORT zlibCompileFlags()
+{
+ uLong flags;
+
+ flags = 0;
+ switch ((int)(sizeof(uInt))) {
+ case 2: break;
+ case 4: flags += 1; break;
+ case 8: flags += 2; break;
+ default: flags += 3;
+ }
+ switch ((int)(sizeof(uLong))) {
+ case 2: break;
+ case 4: flags += 1 << 2; break;
+ case 8: flags += 2 << 2; break;
+ default: flags += 3 << 2;
+ }
+ switch ((int)(sizeof(voidpf))) {
+ case 2: break;
+ case 4: flags += 1 << 4; break;
+ case 8: flags += 2 << 4; break;
+ default: flags += 3 << 4;
+ }
+ switch ((int)(sizeof(z_off_t))) {
+ case 2: break;
+ case 4: flags += 1 << 6; break;
+ case 8: flags += 2 << 6; break;
+ default: flags += 3 << 6;
+ }
+#ifdef DEBUG
+ flags += 1 << 8;
+#endif
+#if defined(ASMV) || defined(ASMINF)
+ flags += 1 << 9;
+#endif
+#ifdef ZLIB_WINAPI
+ flags += 1 << 10;
+#endif
+#ifdef BUILDFIXED
+ flags += 1 << 12;
+#endif
+#ifdef DYNAMIC_CRC_TABLE
+ flags += 1 << 13;
+#endif
+#ifdef NO_GZCOMPRESS
+ flags += 1L << 16;
+#endif
+#ifdef NO_GZIP
+ flags += 1L << 17;
+#endif
+#ifdef PKZIP_BUG_WORKAROUND
+ flags += 1L << 20;
+#endif
+#ifdef FASTEST
+ flags += 1L << 21;
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifdef NO_vsnprintf
+ flags += 1L << 25;
+# ifdef HAS_vsprintf_void
+ flags += 1L << 26;
+# endif
+# else
+# ifdef HAS_vsnprintf_void
+ flags += 1L << 26;
+# endif
+# endif
+#else
+ flags += 1L << 24;
+# ifdef NO_snprintf
+ flags += 1L << 25;
+# ifdef HAS_sprintf_void
+ flags += 1L << 26;
+# endif
+# else
+# ifdef HAS_snprintf_void
+ flags += 1L << 26;
+# endif
+# endif
+#endif
+ return flags;
+}
+
+#ifdef DEBUG
+
+# ifndef verbose
+# define verbose 0
+# endif
+int ZLIB_INTERNAL z_verbose = verbose;
+
+void ZLIB_INTERNAL z_error (m)
+ char *m;
+{
+ fprintf(stderr, "%s\n", m);
+ exit(1);
+}
+#endif
+
+/* exported to allow conversion of error code to string for compress() and
+ * uncompress()
+ */
+const char * ZEXPORT zError(err)
+ int err;
+{
+ return ERR_MSG(err);
+}
+
+#if defined(_WIN32_WCE)
+ /* The Microsoft C Run-Time Library for Windows CE doesn't have
+ * errno. We define it as a global variable to simplify porting.
+ * Its value is always 0 and should not be used.
+ */
+ int errno = 0;
+#endif
+
+#ifndef HAVE_MEMCPY
+
+void ZLIB_INTERNAL zmemcpy(dest, source, len)
+ Bytef* dest;
+ const Bytef* source;
+ uInt len;
+{
+ if (len == 0) return;
+ do {
+ *dest++ = *source++; /* ??? to be unrolled */
+ } while (--len != 0);
+}
+
+int ZLIB_INTERNAL zmemcmp(s1, s2, len)
+ const Bytef* s1;
+ const Bytef* s2;
+ uInt len;
+{
+ uInt j;
+
+ for (j = 0; j < len; j++) {
+ if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
+ }
+ return 0;
+}
+
+void ZLIB_INTERNAL zmemzero(dest, len)
+ Bytef* dest;
+ uInt len;
+{
+ if (len == 0) return;
+ do {
+ *dest++ = 0; /* ??? to be unrolled */
+ } while (--len != 0);
+}
+#endif
+
+#ifndef Z_SOLO
+
+#ifdef SYS16BIT
+
+#ifdef __TURBOC__
+/* Turbo C in 16-bit mode */
+
+# define MY_ZCALLOC
+
+/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
+ * and farmalloc(64K) returns a pointer with an offset of 8, so we
+ * must fix the pointer. Warning: the pointer must be put back to its
+ * original form in order to free it, use zcfree().
+ */
+
+#define MAX_PTR 10
+/* 10*64K = 640K */
+
+local int next_ptr = 0;
+
+typedef struct ptr_table_s {
+ voidpf org_ptr;
+ voidpf new_ptr;
+} ptr_table;
+
+local ptr_table table[MAX_PTR];
+/* This table is used to remember the original form of pointers
+ * to large buffers (64K). Such pointers are normalized with a zero offset.
+ * Since MSDOS is not a preemptive multitasking OS, this table is not
+ * protected from concurrent access. This hack doesn't work anyway on
+ * a protected system like OS/2. Use Microsoft C instead.
+ */
+
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
+{
+ voidpf buf = opaque; /* just to make some compilers happy */
+ ulg bsize = (ulg)items*size;
+
+ /* If we allocate less than 65520 bytes, we assume that farmalloc
+ * will return a usable pointer which doesn't have to be normalized.
+ */
+ if (bsize < 65520L) {
+ buf = farmalloc(bsize);
+ if (*(ush*)&buf != 0) return buf;
+ } else {
+ buf = farmalloc(bsize + 16L);
+ }
+ if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
+ table[next_ptr].org_ptr = buf;
+
+ /* Normalize the pointer to seg:0 */
+ *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
+ *(ush*)&buf = 0;
+ table[next_ptr++].new_ptr = buf;
+ return buf;
+}
+
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+{
+ int n;
+ if (*(ush*)&ptr != 0) { /* object < 64K */
+ farfree(ptr);
+ return;
+ }
+ /* Find the original pointer */
+ for (n = 0; n < next_ptr; n++) {
+ if (ptr != table[n].new_ptr) continue;
+
+ farfree(table[n].org_ptr);
+ while (++n < next_ptr) {
+ table[n-1] = table[n];
+ }
+ next_ptr--;
+ return;
+ }
+ ptr = opaque; /* just to make some compilers happy */
+ Assert(0, "zcfree: ptr not found");
+}
+
+#endif /* __TURBOC__ */
+
+
+#ifdef M_I86
+/* Microsoft C in 16-bit mode */
+
+# define MY_ZCALLOC
+
+#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
+# define _halloc halloc
+# define _hfree hfree
+#endif
+
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
+{
+ if (opaque) opaque = 0; /* to make compiler happy */
+ return _halloc((long)items, size);
+}
+
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+{
+ if (opaque) opaque = 0; /* to make compiler happy */
+ _hfree(ptr);
+}
+
+#endif /* M_I86 */
+
+#endif /* SYS16BIT */
+
+
+#ifndef MY_ZCALLOC /* Any system without a special alloc function */
+
+#ifndef STDC
+extern voidp malloc OF((uInt size));
+extern voidp calloc OF((uInt items, uInt size));
+extern void free OF((voidpf ptr));
+#endif
+
+voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
+ voidpf opaque;
+ unsigned items;
+ unsigned size;
+{
+ if (opaque) items += size - size; /* make compiler happy */
+ return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
+ (voidpf)calloc(items, size);
+}
+
+void ZLIB_INTERNAL zcfree (opaque, ptr)
+ voidpf opaque;
+ voidpf ptr;
+{
+ free(ptr);
+ if (opaque) return; /* make compiler happy */
+}
+
+#endif /* MY_ZCALLOC */
+
+#endif /* !Z_SOLO */
diff --git a/libs/ext/zlib/zutil.h b/libs/ext/zlib/zutil.h
new file mode 100644
index 0000000..4e3dcc6
--- /dev/null
+++ b/libs/ext/zlib/zutil.h
@@ -0,0 +1,252 @@
+/* zutil.h -- internal interface and configuration of the compression library
+ * Copyright (C) 1995-2012 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZUTIL_H
+#define ZUTIL_H
+
+#ifdef HAVE_HIDDEN
+# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+# define ZLIB_INTERNAL
+#endif
+
+#include "zlib.h"
+
+#if defined(STDC) && !defined(Z_SOLO)
+# if !(defined(_WIN32_WCE) && defined(_MSC_VER))
+# include <stddef.h>
+# endif
+# include <string.h>
+# include <stdlib.h>
+#endif
+
+#ifdef Z_SOLO
+ typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
+#endif
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+typedef unsigned char uch;
+typedef uch FAR uchf;
+typedef unsigned short ush;
+typedef ush FAR ushf;
+typedef unsigned long ulg;
+
+extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+/* (size given to avoid silly warnings with Visual C++) */
+
+#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
+
+#define ERR_RETURN(strm,err) \
+ return (strm->msg = (char*)ERR_MSG(err), (err))
+/* To be used only when the state is known to be valid */
+
+ /* common constants */
+
+#ifndef DEF_WBITS
+# define DEF_WBITS MAX_WBITS
+#endif
+/* default windowBits for decompression. MAX_WBITS is for compression only */
+
+#if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+#else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+#endif
+/* default memLevel */
+
+#define STORED_BLOCK 0
+#define STATIC_TREES 1
+#define DYN_TREES 2
+/* The three kinds of block type */
+
+#define MIN_MATCH 3
+#define MAX_MATCH 258
+/* The minimum and maximum match lengths */
+
+#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
+
+ /* target dependencies */
+
+#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
+# define OS_CODE 0x00
+# ifndef Z_SOLO
+# if defined(__TURBOC__) || defined(__BORLANDC__)
+# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
+ /* Allow compilation with ANSI keywords only enabled */
+ void _Cdecl farfree( void *block );
+ void *_Cdecl farmalloc( unsigned long nbytes );
+# else
+# include <alloc.h>
+# endif
+# else /* MSC or DJGPP */
+# include <malloc.h>
+# endif
+# endif
+#endif
+
+#ifdef AMIGA
+# define OS_CODE 0x01
+#endif
+
+#if defined(VAXC) || defined(VMS)
+# define OS_CODE 0x02
+# define F_OPEN(name, mode) \
+ fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
+#endif
+
+#if defined(ATARI) || defined(atarist)
+# define OS_CODE 0x05
+#endif
+
+#ifdef OS2
+# define OS_CODE 0x06
+# if defined(M_I86) && !defined(Z_SOLO)
+# include <malloc.h>
+# endif
+#endif
+
+#if defined(MACOS) || defined(TARGET_OS_MAC)
+# define OS_CODE 0x07
+# ifndef Z_SOLO
+# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
+# include <unix.h> /* for fdopen */
+# else
+# ifndef fdopen
+# define fdopen(fd,mode) NULL /* No fdopen() */
+# endif
+# endif
+# endif
+#endif
+
+#ifdef TOPS20
+# define OS_CODE 0x0a
+#endif
+
+#ifdef WIN32
+# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */
+# define OS_CODE 0x0b
+# endif
+#endif
+
+#ifdef __50SERIES /* Prime/PRIMOS */
+# define OS_CODE 0x0f
+#endif
+
+#if defined(_BEOS_) || defined(RISCOS)
+# define fdopen(fd,mode) NULL /* No fdopen() */
+#endif
+
+#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
+# if defined(_WIN32_WCE)
+# define fdopen(fd,mode) NULL /* No fdopen() */
+# ifndef _PTRDIFF_T_DEFINED
+ typedef int ptrdiff_t;
+# define _PTRDIFF_T_DEFINED
+# endif
+# else
+# define fdopen(fd,type) _fdopen(fd,type)
+# endif
+#endif
+
+#if defined(__BORLANDC__) && !defined(MSDOS)
+ #pragma warn -8004
+ #pragma warn -8008
+ #pragma warn -8066
+#endif
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_WIN32) && (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
+ ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#endif
+
+ /* common defaults */
+
+#ifndef OS_CODE
+# define OS_CODE 0x03 /* assume Unix */
+#endif
+
+#ifndef F_OPEN
+# define F_OPEN(name, mode) fopen((name), (mode))
+#endif
+
+ /* functions */
+
+#if defined(pyr) || defined(Z_SOLO)
+# define NO_MEMCPY
+#endif
+#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
+ /* Use our own functions for small and medium model with MSC <= 5.0.
+ * You may have to use the same strategy for Borland C (untested).
+ * The __SC__ check is for Symantec.
+ */
+# define NO_MEMCPY
+#endif
+#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
+# define HAVE_MEMCPY
+#endif
+#ifdef HAVE_MEMCPY
+# ifdef SMALL_MEDIUM /* MSDOS small or medium model */
+# define zmemcpy _fmemcpy
+# define zmemcmp _fmemcmp
+# define zmemzero(dest, len) _fmemset(dest, 0, len)
+# else
+# define zmemcpy memcpy
+# define zmemcmp memcmp
+# define zmemzero(dest, len) memset(dest, 0, len)
+# endif
+#else
+ void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
+ int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
+ void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
+#endif
+
+/* Diagnostic functions */
+#ifdef DEBUG
+# include <stdio.h>
+ extern int ZLIB_INTERNAL z_verbose;
+ extern void ZLIB_INTERNAL z_error OF((char *m));
+# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
+# define Trace(x) {if (z_verbose>=0) fprintf x ;}
+# define Tracev(x) {if (z_verbose>0) fprintf x ;}
+# define Tracevv(x) {if (z_verbose>1) fprintf x ;}
+# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
+# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
+#else
+# define Assert(cond,msg)
+# define Trace(x)
+# define Tracev(x)
+# define Tracevv(x)
+# define Tracec(c,x)
+# define Tracecv(c,x)
+#endif
+
+#ifndef Z_SOLO
+ voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
+ unsigned size));
+ void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr));
+#endif
+
+#define ZALLOC(strm, items, size) \
+ (*((strm)->zalloc))((strm)->opaque, (items), (size))
+#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
+#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
+
+/* Reverse the bytes in a 32-bit value */
+#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
+ (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
+
+#endif /* ZUTIL_H */
diff --git a/libs/kapp/Makefile b/libs/kapp/Makefile
index 7fdc289..e71434e 100644
--- a/libs/kapp/Makefile
+++ b/libs/kapp/Makefile
@@ -87,12 +87,14 @@ $(ILIBDIR)/libkapp: $(addprefix $(ILIBDIR)/libkapp.,$(LIBX))
KAPP_SRC = \
main \
args \
+ tokenizer \
sysmain
KAPP_OBJ = \
$(addsuffix .$(OBJX),$(KAPP_SRC))
KAPP_LIB = \
+ -dvfs \
-dklib
$(ILIBDIR)/libkapp.$(LIBX): $(KAPP_OBJ)
@@ -113,6 +115,10 @@ LOADLIB_SRC = \
loader-meta \
log-xml
+ifneq (win,$(OS))
+ LOADLIB_SRC += queue-file
+endif
+
LOADLIB_OBJ = \
$(addsuffix .$(LOBX),$(LOADLIB_SRC))
@@ -120,6 +126,10 @@ LOADLIB_LIB = \
-dkfs \
-dklib
+ifneq (win,$(OS))
+ LOADLIB_LIB += -dkq
+endif
+
$(LIBDIR)/libload.$(LIBX): $(LOADLIB_OBJ)
$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(LOADLIB_LIB)
diff --git a/libs/kapp/args.c b/libs/kapp/args.c
index f4a9279..06ef91c 100644
--- a/libs/kapp/args.c
+++ b/libs/kapp/args.c
@@ -27,6 +27,7 @@
#include <kapp/extern.h>
#include <sysalloc.h>
+#include <klib/report.h>
#include <klib/rc.h>
#include <klib/container.h>
#include <klib/text.h>
@@ -36,9 +37,12 @@
#include <klib/out.h>
#include <klib/status.h>
#include <klib/debug.h>
+#include <kfg/config.h>
#include <kapp/main.h>
#include <kapp/args.h>
+#include "args_debug.h"
+
#include <assert.h>
#include <ctype.h>
#include <stdio.h>
@@ -46,9 +50,24 @@
#include <string.h>
#include <stdarg.h>
-#define USE_INLINING 0
+#define USE_INLINING 0
+#ifndef USE_OPTFILE
+#define USE_OPTFILE 0
+#endif
+#define USE_EARLY_HELP 1
+#define USE_EARLY_VERSION 1
+
+/* many tools acquired some usage for '-q'
+ other than the standard meaning of "be quiet".
+ while we phase this out, allow these tools
+ to replace the default usage. */
+#define HONOR_LEGACY_Q_ALIAS 1
+#if HONOR_LEGACY_Q_ALIAS
+#define LEGACY_Q_ALIAS_DEPRECATED 1
+#define LEGACY_Q_ALIAS_ERROR 0
+#endif
-KAPP_EXTERN bool CC is_valid_name (const char * string)
+bool CC is_valid_name (const char * string)
{
/* we do not allow leading - or empty names */
if ((*string == '\0') || (*string == '-'))
@@ -127,12 +146,14 @@ typedef struct Option
{
BSTNode n; /* BSTree node storage */
+ size_t size; /* name length (size if UTF-8) */
Vector values; /* Vector of set values */
uint32_t count; /* count of times option seen on the command line */
uint32_t max_count; /* if non-zero, how many times is it legal to be seen */
bool needs_value; /* does this option take/require a value? */
bool required;
- size_t size; /* name length (size if UTF-8) */
+ bool deprecated; /* a warning if used */
+ bool error; /* an error if used */
char name [1]; /* key value The 1 will be the NUL */
} Option;
@@ -140,6 +161,7 @@ static
rc_t CC OptionMake (Option ** pself, const char * name, size_t size, uint32_t max_count, bool needs_value, bool required)
{
Option * self;
+ rc_t rc;
assert (pself);
assert (name);
@@ -149,20 +171,23 @@ rc_t CC OptionMake (Option ** pself, const char * name, size_t size, uint32_t ma
self = malloc (sizeof (*self) + size);
if (self == NULL)
{
- *pself = NULL;
- return RC (rcRuntime, rcArgv, rcConstructing, rcMemory, rcExhausted);
+ rc = RC (rcRuntime, rcArgv, rcConstructing, rcMemory, rcExhausted);
+ PLOGERR (klogErr, (klogErr, rc, "Error adding option '$(O)'","O=--%s",name));
+ }
+ else
+ {
+ if ((self->needs_value = needs_value) != false)
+ VectorInit (&self->values,0,4);
+ else
+ memset (&self->values, sizeof(self->values), 0);
+
+ self->required = required;
+ self->deprecated = self->error = false;
+ self->count = 0;
+ self->max_count = max_count;
+ self->size = size;
+ string_copy (self->name, size+1, name, size);
}
-
- if ((self->needs_value = needs_value) != false)
- VectorInit (&self->values,0,4);
- else
- memset (&self->values, sizeof(self->values), 0);
- self->required = required;
-
- self->count = 0;
- self->max_count = max_count;
- self->size = size;
- string_copy (self->name, size+1, name, size);
*pself = self;
return 0;
}
@@ -247,19 +272,23 @@ rc_t CC OptionGetValue (const Option * self, uint32_t number, const char ** valu
static
rc_t CC OptionAddValue (Option * self, const char * value, size_t size)
{
- rc_t rc = 0;
ParamValue * pvalue;
+ rc_t rc = 0;
assert (self);
++self->count;
+
+/* KOutMsg ("%s: name %s count %u max_count %u value %s\n", __func__, self->name, self->count, self->max_count, value); */
if (self->max_count && (self->count > self->max_count))
{
--self->count;
- fprintf (stderr, "Too many occurances of %s option\n", self->name);
- return RC (rcRuntime, rcArgv, rcInserting, rcData, rcExcessive);
+ rc = RC (rcRuntime, rcArgv, rcInserting, rcData, rcExcessive);
+ PLOGERR (klogErr,
+ (klogErr, rc, "Too many occurrences of option '$(O)'",
+ "O=--%s", self->name));
}
- if (self->needs_value)
+ else if (self->needs_value)
{
assert (value); /* gotta have a value */
assert (size); /* value can't be a NUL string */
@@ -272,9 +301,15 @@ rc_t CC OptionAddValue (Option * self, const char * value, size_t size)
rc = VectorAppend (&self->values, NULL, pvalue);
if (rc)
{
- fprintf (stderr, "error capturing parameter %s\n", self->name);
+ PLOGERR (klogErr,
+ (klogErr, rc, "error capturing parameter '$(O)'",
+ "O=--%s", self->name));
ParamValueWhack (pvalue);
}
+ else
+ {
+ ARGS_DBG( "added option-value %s", self->name );
+ }
}
}
return rc;
@@ -309,8 +344,11 @@ int CC OptionSort (const BSTNode * item, const BSTNode * n)
typedef struct OptAlias
{
BSTNode n; /* BSTree Node storage */
- Option * option; /* full name node for which this is an alias */
+
+ Option * option; /* full name node for which this is an alias */
size_t size;
+ bool deprecated; /* warning if used */
+ bool error; /* error if used */
char name[1]; /* utf8 name */
} OptAlias;
@@ -327,11 +365,16 @@ rc_t CC OptAliasMake (OptAlias ** pself, const char * name, size_t size,
self = malloc (sizeof (*self) + size);
if (self == NULL)
{
+ rc_t rc = RC (rcRuntime, rcArgv, rcConstructing, rcMemory, rcExhausted);
+ PLOGERR (klogErr,
+ (klogErr, rc, "Error creating structure for alias '$(A)' for parameter '$(B)",
+ "A=%s,B=%s", name, option->name));
*pself = NULL;
- return RC (rcRuntime, rcArgv, rcConstructing, rcMemory, rcExhausted);
+ return rc;
}
self->option = option;
self->size = size;
+ self->deprecated = self->error = false;
string_copy (self->name, size + 1, name, size);
*pself = self;
return 0;
@@ -526,9 +569,12 @@ struct Args
#if NOT_USED_YET
HelpGroup * def_help;
#endif
+#if HONOR_LEGACY_Q_ALIAS
+ bool qalias_replaced;
+#endif
};
-KAPP_EXTERN rc_t CC ArgsMake (Args ** pself)
+rc_t CC ArgsMake (Args ** pself)
{
rc_t rc;
Args * self;
@@ -549,8 +595,11 @@ KAPP_EXTERN rc_t CC ArgsMake (Args ** pself)
BSTreeInit (&self->aliases);
VectorInit (&self->argv,0,8);
VectorInit (&self->params,0,8);
-#if NOT_USED_YET
VectorInit (&self->help,0,16);
+#if HONOR_LEGACY_Q_ALIAS
+ self -> qalias_replaced = false;
+#endif
+#if NOT_USED_YET
rc = HelpGroupMake (&help, "NCBI Options");
if (rc)
{
@@ -569,7 +618,7 @@ KAPP_EXTERN rc_t CC ArgsMake (Args ** pself)
return rc;
}
-KAPP_EXTERN rc_t CC ArgsWhack (Args * self)
+rc_t CC ArgsWhack (Args * self)
{
if (self)
{
@@ -596,27 +645,27 @@ rc_t CC ArgsAddOption (Args * self, const OptDef * option)
if (self == NULL)
{
- fprintf (stderr, "Error calling %s with NULL first parameter\n", __func__);
- return RC (rcRuntime, rcArgv, rcConstructing, rcSelf, rcNull);
+ rc = RC (rcRuntime, rcArgv, rcConstructing, rcSelf, rcNull);
+ LOGERR (klogInt, rc, "Error adding an opion with no object");
+ return rc;
}
if (option == NULL)
{
- fprintf (stderr, "Error calling %s with NULL second parameter\n", __func__);
- return RC (rcRuntime, rcArgv, rcConstructing, rcParam, rcNull);
+ rc = RC (rcRuntime, rcArgv, rcConstructing, rcParam, rcNull);
+ LOGERR (klogInt, rc, "Error adding an option with no option name");
+ return rc;
}
name = option->name;
if (! is_valid_name (name))
{
- fprintf (stderr, "Error using illegal option name %s\n", name);
- return RC (rcRuntime, rcArgv, rcConstructing, rcName, rcInvalid);
+ rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcInvalid);
+ PLOGERR (klogInt, (klogInt, rc, "Error using illegal option name '$(O)'", "O=--%s", name));
+ return rc;
}
size = string_size (name);
rc = OptionMake (&node, name, size, option->max_count, option->needs_value, option->required);
if (rc)
- {
- fprintf (stderr, "Error initializing structures to parase parameters\n");
return rc;
- }
size ++;
prev = NULL;
@@ -626,20 +675,21 @@ rc_t CC ArgsAddOption (Args * self, const OptDef * option)
if (GetRCState(rc) == rcBusy)
{
rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcBusy);
- fprintf (stderr, "duplicate option name %s\n", name);
+ PLOGERR (klogInt,
+ (klogInt, rc, "duplicate option name '$(O)'", "O=--%s", name));
}
else
- fprintf (stderr, "unknown error inserting %s\n", name);
+ PLOGERR (klogInt,
+ (klogInt, rc, "unknown error inserting option name '$(O)'", "O=--%s", name));
OptionWhack (node);
return rc;
-
}
if (option->aliases) /* any single character aliases? */
{
const char * startc;
const char * endc;
- size_t incr;
+ int incr;
for ((startc = option->aliases),(endc = startc + string_size (startc));
startc < endc; startc += incr)
@@ -653,54 +703,80 @@ rc_t CC ArgsAddOption (Args * self, const OptDef * option)
if (incr < 0)
{
rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcCorrupt);
- fprintf (stderr, "Error parsing alias string %s from %s for %s\n",
- startc, option->aliases, name);
+ PLOGERR (klogInt,
+ (klogInt, rc, "Error parsing alias string '$(A)' from '$(B)' for '$(C)'",
+ "A=%s,B=%s,C=%s", startc, option->aliases, name));
break;
}
if (incr > 4)
{
rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcCorrupt);
- fprintf (stderr, "Error parsing UTF-8 string %s\n", startc);
+ PLOGERR (klogInt,
+ (klogInt, rc,"Error parsing UTF-8 string '$(S)'",
+ "S=%s", startc));
break;
}
- string_copy (alias_name, sizeof (alias_name), startc, incr);
+ size = string_copy (alias_name, sizeof (alias_name), startc, incr);
if (! is_valid_name (alias_name))
{
rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcInvalid);
- fprintf (stderr, "Error using invalid alias name %s", alias_name);
+ PLOGERR (klogInt,
+ (klogInt, rc, "Error using invalid alias name '$(S)'",
+ "S=%s", alias_name));
break;
}
+#if 0
size += incr + 1;
+#endif
rc = OptAliasMake (&snode, alias_name, incr, node);
if (rc)
- {
- fprintf (stderr, "Error creating structure for alias %s for parameter %s\n",
- alias_name, node->name);
break;
- }
rc = BSTreeInsertUnique (&self->aliases, &snode->n, (BSTNode**)&sprev, OptAliasSort);
if (rc)
{
if (GetRCState(rc) == rcExists)
{
+#if HONOR_LEGACY_Q_ALIAS
+ if ( ! self -> qalias_replaced && size == 1 && alias_name [ 0 ] == 'q' )
+ {
+ BSTreeUnlink ( & self -> aliases, & sprev -> n );
+ rc = BSTreeInsertUnique ( & self -> aliases, & snode -> n, NULL, OptAliasSort );
+ if ( rc != 0 )
+ BSTreeInsert ( & self -> aliases, & sprev -> n, OptAliasSort );
+ else
+ {
+ OptAliasWhack ( sprev );
+ self -> qalias_replaced = true;
+#if LEGACY_Q_ALIAS_DEPRECATED
+ snode -> deprecated = true;
+#elif LEGACY_Q_ALIAS_ERROR
+ snode -> error = true;
+#endif
+ continue;
+ }
+ }
+#endif
rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcExists);
- fprintf (stderr, "duplicate alias name %s\n", alias_name);
+ PLOGERR (klogInt,
+ (klogInt, rc, "duplicate alias name '$(S)'",
+ "S=%s", alias_name));
}
else
- fprintf (stderr, "%d unknown error inserting alias %s\n", rc, alias_name);
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc, "unknown error inserting alias '$(S)'",
+ "S=%s", alias_name));
+ }
OptAliasWhack (snode);
break;
}
}
}
- if (rc == 0)
- {
- }
return rc;
}
-KAPP_EXTERN rc_t CC ArgsAddOptionArray (Args * self, const OptDef * option, uint32_t count /*,
+rc_t CC ArgsAddOptionArray (Args * self, const OptDef * option, uint32_t count /*,
rc_t (*header_fmt)(Args * args, const char * header),
const char * header */)
{
@@ -740,7 +816,7 @@ KAPP_EXTERN rc_t CC ArgsAddOptionArray (Args * self, const OptDef * option, uint
/*
*/
-KAPP_EXTERN rc_t CC next_arg (const Args * self, int * pix, int max, const char ** pvalue)
+rc_t CC next_arg (const Args * self, int * pix, int max, const char ** pvalue)
{
int ix;
@@ -757,32 +833,50 @@ KAPP_EXTERN rc_t CC next_arg (const Args * self, int * pix, int max, const char
typedef struct ArgsReqCheckData
{
Option * missing_option;
+ rc_t rc;
} ArgsReqCheckData;
static
-bool CC ArgsCheckRequired (BSTNode * n, void * _data)
+void CC ArgsCheckRequiredInt (BSTNode * n, void * _data)
{
-#if 0
-/* Need to rethink this. If help is asked for this shouldn't fail */
+#if 1
ArgsReqCheckData * data;
Option * opt;
+ rc_t rc;
data = _data;
opt = (Option*)n;
-
if (opt->required && ! opt->count)
{
- data->missing_option = opt;
- return true;
+ rc = RC( rcRuntime, rcArgv, rcParsing, rcParam, rcNotFound );
+ PLOGERR (klogWarn, (klogWarn, rc, "Error missing required parameter '$(P)'",
+ "P=%s", opt->name));
+ if (data->missing_option == NULL)
+ {
+ data->missing_option = opt;
+ data->rc = rc;
+ }
}
#endif
- return false;
}
-KAPP_EXTERN rc_t CC ArgsParse (Args * self, int argc, char *argv[])
+/* check for required parameters */
+rc_t CC ArgsCheckRequired (Args * self)
{
- rc_t rc = 0;
- int ix;
+ ArgsReqCheckData r = { NULL, false };
+
+ BSTreeForEach ( &self->names, false, ArgsCheckRequiredInt, &r );
+
+ return r.rc;
+}
+
+static
+rc_t ArgsParseInt (Args * self, int argc, char *argv[])
+{
+ rc_t rc = 0; /* hard fail - quit processing */
+ rc_t orc = 0; /* soft fail - keep processing but we'll fail in the end */
+ rc_t qrc = 0; /* transient - if set will move to a previously unset orc */
+ int ix, ix_from, ix_to;
size_t jx;
Option * node;
const char * parg;
@@ -792,83 +886,131 @@ KAPP_EXTERN rc_t CC ArgsParse (Args * self, int argc, char *argv[])
const char * value = NULL;
size_t value_len;
bool needs_value;
+ uint32_t n_in_argv_before;
+
+ n_in_argv_before = VectorLength( &self->argv );
/* first capture original argument list and store in our format */
- for (ix = 0; ix < argc; ++ix)
+ for ( ix = 0; ix < argc; ++ix )
{
size_t len;
parg = argv[ix];
- len = strlen (parg);
+ len = strlen ( parg );
- rc = ParamValueMake (&arg, parg, len);
- if (rc == 0)
- rc = VectorAppend (&self->argv, NULL, arg);
- if (rc)
+ rc = ParamValueMake ( &arg, parg, len );
+ if ( rc == 0 )
+ rc = VectorAppend ( &self->argv, NULL, arg );
+ if ( rc )
break;
+ else
+ ARGS_DBG( "ArgsParse: inserted '%s' into self->argv", parg );
}
- if (rc)
+ if ( rc )
return rc;
- for (ix = 1; ix < argc; ++ix)
+ if ( n_in_argv_before == 0 )
{
- parg = (const char *)VectorGet (&self->argv, ix);
- if (parg[0] != '-')
+ ix_from = 1;
+ ix_to = argc;
+ }
+ else
+ {
+ ix_from = n_in_argv_before;
+ ix_to = n_in_argv_before + argc;
+ }
+
+ for ( ix = ix_from; ix < ix_to; ++ix )
+ {
+ parg = ( const char * )VectorGet( &self->argv, ix );
+
+ ARGS_DBG( "ArgsParse: parsing '%s' from self->argv", parg );
+
+ if ( parg[ 0 ] != '-' )
{
/* we can do this because it is already a (const char *)
* and (ParamValue *) after the first loop */
- rc = VectorAppend (&self->params, NULL, parg);
- if (rc)
+ rc = VectorAppend ( &self->params, NULL, parg );
+ if ( rc )
break;
+ ARGS_DBG( "ArgsParse: appending to params '%s'", parg );
}
else
{
node = NULL;
- if (parg[1] == '-')
+ if ( parg[ 1 ] == '-' )
{
- size_t nlen=string_copy (name, sizeof (name), parg+2, string_size (parg+2));
- equal_sign = string_chr (name, nlen, '=');
- if (equal_sign)
+ size_t nlen = string_copy( name, sizeof( name ), parg + 2, string_size( parg + 2 ) );
+ ARGS_DBG( "ArgsParse: '%s' is a '--' parameter!", parg );
+ equal_sign = string_chr( name, nlen, '=' );
+ if ( equal_sign )
*equal_sign = '\0';
- node = (Option*)BSTreeFind (&self->names, name, OptionCmp);
- if (node == NULL)
+ node = ( Option* )BSTreeFind( &self->names, name, OptionCmp );
+ if ( node == NULL )
{
- rc = RC (rcApp, rcArgv, rcParsing, rcParam, rcUnknown);
- fprintf (stderr, "Unknown argument %s\n", name);
- break;
+ qrc = RC( rcApp, rcArgv, rcParsing, rcParam, rcUnknown );
+ PLOGERR (klogErr,
+ (klogErr, qrc,
+ "Unknown argument '$(O)'", "O=--%s", name ));
+/* break; */
+ if (orc == 0) /* non-fatal */
+ orc = qrc;
}
else
{
- needs_value = OptionNeedsValue (node);
- if (needs_value)
+ needs_value = OptionNeedsValue( node );
+ ARGS_DBG( "ArgsParse: found node for parameter '%s'", parg );
+ if ( needs_value )
{
- if (equal_sign != NULL)
- value = parg + 2 + ((equal_sign+1) - name);
- else
- rc = next_arg (self, &ix, argc, &value);
+ ARGS_DBG( "ArgsParse: parameter '%s' needs value", parg );
+ if ( equal_sign != NULL )
+ value = parg + 2 + ( ( equal_sign + 1 ) - name );
- if (rc)
- break;
+ else if ( ix + 1 >= ix_to )
+ {
+ rc = RC( rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted );
+ PLOGERR (klogErr,
+ (klogErr, qrc,"Option '$(O)' is missing a value", "O=--%s", node->name ));
+ }
+ else
+ {
+ ARGS_DBG( "ArgsParse: calling next_arg()", 0 );
+ rc = next_arg( self, &ix, ix_to, &value );
+ }
- assert (value != NULL);
+ if ( rc == 0 )
+ {
+ assert ( value != NULL );
- value_len = string_size (value);
+ value_len = string_size( value );
- rc = OptionAddValue (node, value, value_len);
- if (rc)
- {
- break;
+ rc = OptionAddValue( node, value, value_len );
}
}
else
{
- rc = OptionAddValue (node, NULL, 0);
- if (rc)
- {
- break;
- }
+ rc = OptionAddValue( node, NULL, 0 );
+ }
+
+ if ( rc != 0 )
+ break;
+
+ if ( node -> error )
+ {
+ rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcUnsupported );
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Deprecated argument '$(O)' is no longer supported.", "O=--%s", name ));
+ break;
+ }
+
+ if ( node -> deprecated )
+ {
+ PLOGMSG (klogWarn,
+ (klogWarn,
+ "Deprecated argument '$(O)' may not be supported in future releases.", "O=--%s", name ));
}
}
}
@@ -877,86 +1019,184 @@ KAPP_EXTERN rc_t CC ArgsParse (Args * self, int argc, char *argv[])
const char * end;
uint32_t name_len;
- end = parg + string_size (parg);
- for (jx = 1; parg[jx]; jx += name_len)
+ end = parg + string_size( parg );
+ ARGS_DBG( "ArgsParse: '%s' is a '-' parameter!", parg );
+ for ( jx = 1; parg[ jx ]; jx += name_len )
{
OptAlias *alias;
uint32_t c;
- name_len = utf8_utf32 ( &c, parg+jx, end);
- string_copy (name, sizeof (name), parg+jx, name_len);
+ name_len = utf8_utf32( &c, parg + jx, end );
+ string_copy( name, sizeof( name ), parg + jx, name_len );
- alias = (OptAlias*)BSTreeFind (&self->aliases, name, OptAliasCmp);
- if (alias == NULL)
+ alias = ( OptAlias* )BSTreeFind( &self->aliases, name, OptAliasCmp );
+ if ( alias == NULL )
{
- rc = RC (rcApp, rcArgv, rcParsing, rcParam, rcUnknown);
- fprintf (stderr, "Unknown argument %s\n", name);
+ qrc = RC( rcApp, rcArgv, rcParsing, rcParam, rcUnknown );
+ PLOGERR (klogErr,
+ (klogErr, qrc,
+ "Unknown argument '$(O)'", "O=-%s", name ));
+
+ if (orc == 0)
+ orc = qrc;
}
else
{
- node = OptAliasOption (alias);
- if (OptionNeedsValue(node))
+ bool break_loop = false;
+ node = OptAliasOption( alias );
+ if ( OptionNeedsValue( node ) )
{
- if (parg[jx+name_len] == '=')
+ if ( parg[ jx + name_len ] == '=' )
{
++jx;
- if (parg[jx+name_len])
+ if ( parg[ jx + name_len ] )
value = parg + jx + name_len;
else
{
- rc = RC (rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted);
- fprintf (stderr, "Value missing with alias followed by =\n");
+ qrc = RC( rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted );
+ LOGERR (klogErr, qrc,
+ "Value missing with alias followed by =" );
+ if (orc == 0)
+ orc = qrc;
+ break_loop = true;
}
}
- else if(parg[jx+name_len])
+ else if ( parg[ jx + name_len ] )
{
value = parg + jx + name_len;
}
- else if( ix + 1 >= argc ) {
- rc = RC (rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted);
- fprintf (stderr, "Option '%s' is missing a value\n", node->name);
+ else if ( ix + 1 >= ix_to )
+ {
+ rc = RC( rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted );
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Option '$(O)' ( alias for '$(N)' ) is missing a value",
+ "O=-%s,N=--%s", name, node->name ));
+ break;
}
else
- value = argv [++ix];
- if (rc == 0)
- rc = OptionAddValue (node, value, string_size (value));
- break;
+ {
+ value = ( const char * )VectorGet( &self->argv, ++ix );
+ }
+ ARGS_DBG( "ArgsParse: the value of '%s' is '%s'", name, value );
+
+ if ( rc == 0 )
+ rc = OptionAddValue( node, value, string_size( value ) );
+ break_loop = true;
}
else
{
- rc = OptionAddValue (node, NULL, 0);
- if (rc)
- break;
+ rc = OptionAddValue( node, NULL, 0 );
}
+
+ if ( rc != 0 )
+ break;
+
+ if ( node -> error )
+ {
+ rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcUnsupported );
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Deprecated argument '$(O)' ( alias for '$(N)' ) is no longer supported.",
+ "O=-%s,N=--%s"
+ , name
+ , node->name
+ ));
+ break;
+ }
+
+ if ( alias -> error )
+ {
+ rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcUnsupported );
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Deprecated argument '$(O)' is no longer supported. "
+ "Please use '$(N)' instead.",
+ "O=-%s,N=--%s"
+ , name
+ , node->name
+ ));
+ break;
+ }
+
+ if ( node -> error )
+ {
+ PLOGMSG (klogWarn,
+ (klogWarn,
+ "Deprecated argument '$(O)' ( alias for '$(N)' ) may not be supported in future releases.",
+ "O=-%s,N=--%s"
+ , name
+ , node->name
+ ));
+ }
+
+ else if ( alias -> deprecated )
+ {
+ PLOGMSG (klogWarn,
+ (klogWarn,
+ "Deprecated argument '$(O)' may not be supported in future releases. "
+ "Please use '$(N)' instead.",
+ "O=-%s,N=--%s"
+ , name
+ , node->name
+ ));
+ }
+
+ if ( break_loop )
+ break;
}
}
}
}
- if (rc)
+ if ( rc )
break;
}
- /* check for required parameters */
+#if _DEBUGGING
+ (void)ArgsHandleDebug (self);
+#endif
+#if USE_EARLY_HELP
if (rc == 0)
{
- bool b;
- ArgsReqCheckData r;
-
+ rc = ArgsHandleHelp (self);
+ /* if "help" wasn't found we aren't using standard arguments so don't
+ * call it an error: if OptionGout changes this might have to as well */
+ if (rc == SILENT_RC (rcRuntime, rcArgv, rcAccessing, rcName, rcNotFound))
+ rc = 0;
+ }
+#endif
+#if USE_EARLY_VERSION
+ if (rc == 0)
+ {
+ rc = ArgsHandleVersion (self);
+ if (rc == SILENT_RC (rcRuntime, rcArgv, rcAccessing, rcName, rcNotFound))
+ rc = 0;
+ }
+#endif
+ /* now recovery non-fatal errors into final rc */
+ if (rc == 0)
+ rc = orc;
- b = BSTreeDoUntil (&self->names, false, ArgsCheckRequired, &r);
- if (b)
- {
- fprintf (stderr, "Error missing required parameter %.*s\n",
- (int)r.missing_option->size, r.missing_option->name);
- rc = RC (rcRuntime, rcArgv, rcParsing, rcParam, rcNotFound);
- }
+ if ( rc )
+ {
+ ReportSilence();
}
+ return rc;
+}
+rc_t CC ArgsParse (Args * self, int argc, char *argv[])
+{
+ KLogLevel lvl = KLogLevelGet ();
+ rc_t rc = KLogLevelSet ( klogWarn );
+ rc = ArgsParseInt ( self, argc, argv );
+ KLogLevelSet ( lvl );
return rc;
}
-KAPP_EXTERN rc_t CC ArgsOptionCount (const Args * self, const char * option_name, uint32_t * count)
+rc_t CC ArgsOptionCount (const Args * self, const char * option_name, uint32_t * count)
{
+ rc_t rc;
+
if (self == NULL)
return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
else if (count == NULL)
@@ -967,14 +1207,20 @@ KAPP_EXTERN rc_t CC ArgsOptionCount (const Args * self, const char * option_name
node = (const Option*)BSTreeFind (&self->names, option_name, OptionCmp);
if (node == NULL)
- return RC (rcRuntime, rcArgv, rcAccessing, rcName, rcNotFound);
+ {
+ rc = RC (rcRuntime, rcArgv, rcAccessing, rcName, rcNotFound);
+/* this was removed to shut up about "help" not being found during tests
+ PLOGERR (klogWarn, (klogWarn, rc, "Option name not found '$(S)'", "S=%s", option_name));
+ */
+ return rc;
+ }
*count = OptionGetCount (node);
return 0;
}
}
-KAPP_EXTERN rc_t CC ArgsOptionValue (const Args * self, const char * option_name, uint32_t iteration,
+rc_t CC ArgsOptionValue (const Args * self, const char * option_name, uint32_t iteration,
const char ** value_string)
{
const Option * node;
@@ -994,7 +1240,7 @@ KAPP_EXTERN rc_t CC ArgsOptionValue (const Args * self, const char * option_name
return OptionGetValue (node, iteration, value_string);
}
-KAPP_EXTERN rc_t CC ArgsParamCount (const Args * self, uint32_t * count)
+rc_t CC ArgsParamCount (const Args * self, uint32_t * count)
{
if (self == NULL)
return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
@@ -1005,7 +1251,7 @@ KAPP_EXTERN rc_t CC ArgsParamCount (const Args * self, uint32_t * count)
return 0;
}
-KAPP_EXTERN rc_t CC ArgsParamValue (const Args * self, uint32_t iteration, const char ** value_string)
+rc_t CC ArgsParamValue (const Args * self, uint32_t iteration, const char ** value_string)
{
if (self == NULL)
return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
@@ -1023,7 +1269,7 @@ KAPP_EXTERN rc_t CC ArgsParamValue (const Args * self, uint32_t iteration, const
return 0;
}
-KAPP_EXTERN rc_t CC ArgsArgvCount (const Args * self, uint32_t * count)
+rc_t CC ArgsArgvCount (const Args * self, uint32_t * count)
{
if (self == NULL)
return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
@@ -1037,12 +1283,12 @@ KAPP_EXTERN rc_t CC ArgsArgvCount (const Args * self, uint32_t * count)
#undef ArgsArgc
#endif
-KAPP_EXTERN rc_t CC ArgsArgc (const Args * self, uint32_t * count)
+rc_t CC ArgsArgc (const Args * self, uint32_t * count)
{
return ArgsArgvCount (self, count);
}
-KAPP_EXTERN rc_t CC ArgsArgvValue (const Args * self, uint32_t iteration, const char ** value_string)
+rc_t CC ArgsArgvValue (const Args * self, uint32_t iteration, const char ** value_string)
{
if (self == NULL)
return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
@@ -1063,18 +1309,29 @@ KAPP_EXTERN rc_t CC ArgsArgvValue (const Args * self, uint32_t iteration, const
#define USAGE_MAX_SIZE 81
static
const char * verbose_usage[] =
-{ "Increase the verbosity level of the program.",
- "Use multiple times for more verbosity.", NULL };
+{ "Increase the verbosity of the program status messages.",
+ "Use multiple times for more verbosity.","Negates quiet.", NULL };
+static
+const char * quiet_usage[] =
+{ "Turn off all status messages for the program.",
+ "Negated by verbose.", NULL };
static
const char * debug_usage[] =
{ "Turn on debug output for module.",
"All flags if not specified.", NULL };
static
const char * help_usage[] =
-{ "Output a brief explantion for the program.", NULL };
+{ "Output a brief explanation for the program.", NULL };
+static
+const char * report_usage[] =
+{ "Control program execution environment report generation (if implemented).",
+ "One of (never|error|always). Default is error", NULL };
static
const char * version_usage[] =
{ "Display the version of the program then quit.", NULL };
+static
+const char * optfile_usage[] =
+{ "Read more options and parameters from the file.", NULL};
static
char log0 [USAGE_MAX_SIZE];
static
@@ -1082,6 +1339,9 @@ char log1 [USAGE_MAX_SIZE];
static
const char * log_usage[] =
{ "Logging level as number or enum string.", log0, log1, NULL };
+static
+const char * no_user_settings_usage[] =
+{ "Turn off user-specific configuration.", NULL };
static
void CC gen_log_usage (const char ** _buffers)
@@ -1160,17 +1420,17 @@ void CC gen_log_usage (const char ** _buffers)
OptDef StandardOptions[] =
{
{
- OPTION_HELP, ALIAS_HELP, NULL,
+ OPTION_HELP, ALIAS_HELP, NULL,
help_usage,
- OPT_UNLIM, false, false
+ OPT_UNLIM, false, false
},
{
- OPTION_VERSION, ALIAS_VERSION, NULL,
+ OPTION_VERSION, ALIAS_VERSION, NULL,
version_usage,
- OPT_UNLIM, false, false
+ OPT_UNLIM, false, false
},
{
- OPTION_LOG_LEVEL, ALIAS_LOG_LEVEL, gen_log_usage,
+ OPTION_LOG_LEVEL, ALIAS_LOG_LEVEL, gen_log_usage,
log_usage,
OPT_UNLIM, true, false
},
@@ -1180,20 +1440,42 @@ OptDef StandardOptions[] =
OPT_UNLIM, false, false
},
{
+ OPTION_QUIET, ALIAS_QUIET, NULL,
+ quiet_usage,
+ OPT_UNLIM, false, false
+ },
+#if USE_OPTFILE
+ {
+ OPTION_OPTFILE, ALIAS_OPTFILE, NULL,
+ optfile_usage,
+ OPT_UNLIM, true, false
+ },
+#endif
+ {
OPTION_DEBUG, ALIAS_DEBUG, NULL,
debug_usage,
OPT_UNLIM, true, false
+ },
+ {
+ OPTION_NO_USER_SETTINGS, NULL, NULL,
+ no_user_settings_usage,
+ OPT_UNLIM, false, false
+ },
+ { /* OPTION_REPORT is used in klib/report.c */
+ OPTION_REPORT, NULL, NULL,
+ report_usage,
+ OPT_UNLIM, true, false
}
};
-KAPP_EXTERN rc_t CC ArgsAddStandardOptions(Args * self)
+rc_t CC ArgsAddStandardOptions(Args * self)
{
return ArgsAddOptionArray (self, StandardOptions,
sizeof (StandardOptions) / sizeof (OptDef)
/*, NULL, NULL */ );
}
-KAPP_EXTERN rc_t CC ArgsMakeStandardOptions (Args** pself)
+rc_t CC ArgsMakeStandardOptions (Args** pself)
{
Args * self;
rc_t rc;
@@ -1209,7 +1491,7 @@ KAPP_EXTERN rc_t CC ArgsMakeStandardOptions (Args** pself)
return rc;
}
-KAPP_EXTERN rc_t CC ArgsHandleHelp (Args * self)
+rc_t CC ArgsHandleHelp (Args * self)
{
uint32_t count;
rc_t rc;
@@ -1229,7 +1511,7 @@ KAPP_EXTERN rc_t CC ArgsHandleHelp (Args * self)
}
-KAPP_EXTERN rc_t CC ArgsHandleVersion (Args * self)
+rc_t CC ArgsHandleVersion (Args * self)
{
uint32_t count;
rc_t rc;
@@ -1255,7 +1537,7 @@ KAPP_EXTERN rc_t CC ArgsHandleVersion (Args * self)
}
-KAPP_EXTERN rc_t CC ArgsHandleLogLevel (const Args * self)
+rc_t CC ArgsHandleLogLevel (const Args * self)
{
uint32_t count;
rc_t rc;
@@ -1285,17 +1567,62 @@ KAPP_EXTERN rc_t CC ArgsHandleLogLevel (const Args * self)
return rc;
}
-KAPP_EXTERN rc_t CC ArgsHandleStatusLevel (const Args * self)
+rc_t CC ArgsHandleStatusLevel (const Args * self)
{
- uint32_t count;
+ uint32_t vcount, qcount;
rc_t rc;
- rc = ArgsOptionCount (self, OPTION_VERBOSE, &count);
- if (rc == 0) {
- KStsLevelSet (count);
+ rc = ArgsOptionCount (self, OPTION_VERBOSE, &vcount);
+ if (rc == 0)
+ {
+ rc = ArgsOptionCount (self, OPTION_QUIET, &qcount);
+ if (rc == 0)
+ {
+ KStsLevel current;
+
+ current = KStsLevelGet();
+
+ if (vcount)
+ {
+ rc_t irc;
+
+ irc = SILENT_RC (rcRuntime, rcArgv, rcParsing, rcParam, rcIncorrect);
+ if (qcount)
+ {
+ PLOGERR (klogErr,
+ (klogErr, irc,
+ "$(V)($(v)) and $(Q)($(q)) should not be used together",
+ "V=%s,v=%s,Q=$s,q=%s",
+ OPTION_VERBOSE,ALIAS_VERBOSE,
+ OPTION_QUIET,ALIAS_QUIET));
+ }
+ KStsLevelSet (current + vcount);
+ }
+ else if (qcount)
+ KStsLevelSet (0);
+ }
}
return rc;
}
+
+rc_t CC ArgsHandleNoUserSettings (const Args * self)
+{
+ uint32_t count = 0;
+ rc_t rc = ArgsOptionCount (self, OPTION_NO_USER_SETTINGS, &count);
+ if (rc == 0 && count != 0)
+ KConfigDisableUserSettings ();
+ return rc;
+}
+
+
+#if USE_OPTFILE
+rc_t CC ArgsHandleOptfile (Args * self)
+{
+ return Args_parse_inf_file (self, OPTION_OPTFILE);
+}
+#endif
+
+
#if _DEBUGGING
rc_t CC ArgsHandleDebug (const Args * self)
{
@@ -1328,7 +1655,7 @@ rc_t CC ArgsHandleDebug (const Args * self)
}
#endif
-KAPP_EXTERN rc_t CC ArgsHandleStandardOptions (Args * self)
+rc_t CC ArgsHandleStandardOptions (Args * self)
{
rc_t rc;
@@ -1337,11 +1664,9 @@ KAPP_EXTERN rc_t CC ArgsHandleStandardOptions (Args * self)
rc = ArgsHandleHelp (self);
if (rc)
break;
-
rc = ArgsHandleVersion (self);
if (rc)
break;
-
rc = ArgsHandleLogLevel (self);
if (rc)
break;
@@ -1350,14 +1675,19 @@ KAPP_EXTERN rc_t CC ArgsHandleStandardOptions (Args * self)
if (rc)
break;
-#if _DEBUGGING
+ rc = ArgsHandleNoUserSettings (self);
+ if (rc)
+ break;
+
+#if _DEBUGGING
+ /* called a second time in case more symbols in in files */
rc = ArgsHandleDebug (self);
#endif
} while (0); /* not a real loop */
return rc;
}
-KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, uint32_t table_count, ...)
+rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, uint32_t table_count, ...)
{
rc_t rc;
Args * self;
@@ -1366,15 +1696,16 @@ KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, ui
rc = ArgsMakeStandardOptions (&self);
if (rc == 0)
{
- do
+ for (;;)
{
+ /* load added OptDef tables */
if (table_count)
{
va_list ap;
va_start (ap, table_count);
- while (table_count-- && (rc == 0))
+ while (table_count--)
{
OptDef * options;
uint32_t opt_count;
@@ -1383,8 +1714,12 @@ KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, ui
opt_count = va_arg (ap, uint32_t);
rc = ArgsAddOptionArray (self, options, opt_count /* , NULL, NULL */);
+ if (rc)
+ break;
}
+
va_end (ap);
+
if (rc)
break;
}
@@ -1393,15 +1728,35 @@ KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, ui
if (rc)
break;
+#if USE_OPTFILE
+ /*
+ * recursively check for files full of options
+ * we want this done before flagging missing arguments
+ */
+ rc = ArgsHandleOptfile (self);
+ if (rc)
+ break;
+#endif
+ /*
+ * now handle (maybe even rehandle except the optfile
+ * the standard arguments all applications/tools support
+ */
rc = ArgsHandleStandardOptions (self);
if (rc)
break;
- *pself = self;
+ rc = ArgsCheckRequired (self);
+ if (rc)
+ {
+ MiniUsage(self);
+ break;
+ }
+ *pself = self;
return 0;
- } while (0);
+ break;
+ }
ArgsWhack (self);
}
@@ -1416,7 +1771,7 @@ KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, ui
* and quite probably outside of args.
*/
-KAPP_EXTERN const char * CC trim_path (const char * full_name)
+const char * CC trim_path (const char * full_name)
{
const char * name;
@@ -1429,7 +1784,7 @@ KAPP_EXTERN const char * CC trim_path (const char * full_name)
}
-KAPP_EXTERN rc_t CC ArgsProgram (const Args * args, const char ** fullpath, const char ** progname)
+rc_t CC ArgsProgram (const Args * args, const char ** fullpath, const char ** progname)
{
const char * defaultname = UsageDefaultName;
const char * f;
@@ -1536,7 +1891,6 @@ static void print_indented( const size_t first_indent, const size_t indent,
void CC HelpOptionLine(const char * alias, const char * option, const char * param, const char ** msgs)
{
- int n, msgc;
/* const char * msg; */
#define INDENT 2
#define MSG_INDENT 35
@@ -1545,25 +1899,36 @@ void CC HelpOptionLine(const char * alias, const char * option, const char * par
bool has_alias = (alias != NULL && alias[0] != '\0');
bool has_opt = (option != NULL && option[0] != '\0');
- if( has_alias || has_opt ) {
- OUTMSG(("%*s%n", INDENT, " ", &n));
- msgc = n;
- if( has_alias ) {
+ if( has_alias || has_opt )
+ {
+ int n, msgc;
+
+ OUTMSG(("%*s%n", INDENT, " ", & msgc ));
+
+ if( has_alias )
+ {
OUTMSG(("-%s%n", alias, &n));
msgc += n;
}
- if( has_alias && has_opt ) {
+
+ if( has_alias && has_opt )
+ {
OUTMSG(("|"));
msgc++;
}
- if( has_opt ) {
+
+ if( has_opt )
+ {
OUTMSG(("--%s%n", option, &n));
msgc += n;
}
- if( param != NULL) {
+
+ if( param != NULL)
+ {
OUTMSG((" <%s>%n", param, &n));
msgc += n;
}
+
print_indented( msgc, MSG_INDENT, MSG_MAXLEN, msgs );
}
}
@@ -1600,12 +1965,22 @@ void CC HelpOptionsStandard (void)
HelpOptionLine (ALIAS_LOG_LEVEL, OPTION_LOG_LEVEL, "level", log_usage);
HelpOptionLine (ALIAS_VERBOSE, OPTION_VERBOSE, NULL, verbose_usage);
+ HelpOptionLine (ALIAS_QUIET, OPTION_QUIET, NULL, quiet_usage);
+#if USE_OPTFILE
+ HelpOptionLine (ALIAS_OPTFILE, OPTION_OPTFILE, "file", optfile_usage);
+#endif
#if _DEBUGGING
HelpOptionLine (ALIAS_DEBUG, OPTION_DEBUG, "Module[-Flag]", debug_usage);
#endif
}
+void CC HelpOptionsReport (void)
+{
+ HelpOptionLine (ALIAS_REPORT, OPTION_REPORT, "type", report_usage);
+}
+
+
rc_t CC MiniUsage (const Args * args)
{
KWrtWriter w;
diff --git a/libs/kapp/args_debug.h b/libs/kapp/args_debug.h
new file mode 100644
index 0000000..3221434
--- /dev/null
+++ b/libs/kapp/args_debug.h
@@ -0,0 +1,47 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_args_priv_libs_
+#define _h_args_priv_libs_
+
+#include <klib/debug.h>
+
+#if _DEBUGGING
+
+#define ARGS_DBGF(msg) DBGMSG(DBG_ARGS, DBG_FLAG(DBG_ARGS_WRITER), msg)
+#define ARGS_DBG(fmt, ...) ARGS_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
+#define ARGS_DBGERR(rc) if(rc != 0) {ARGS_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
+#define ARGS_DBGERRP(fmt, rc, ...) if(rc != 0) {ARGS_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
+#else
+
+#define ARGS_DBGF(msg) ((void)0)
+#define ARGS_DBG(fmt, ...) ((void)0)
+#define ARGS_DBGERR(rc) ((void)0)
+#define ARGS_DBGERRP(fmt, rc, ...) ((void)0)
+
+#endif
+
+#endif
\ No newline at end of file
diff --git a/libs/kapp/libload.vers b/libs/kapp/libload.vers
index 21e8796..66c4c22 100644
--- a/libs/kapp/libload.vers
+++ b/libs/kapp/libload.vers
@@ -1 +1 @@
-1.0.3
+1.0.9
diff --git a/libs/kapp/loader-file.c b/libs/kapp/loader-file.c
index 87a0cf8..26fc1b6 100644
--- a/libs/kapp/loader-file.c
+++ b/libs/kapp/loader-file.c
@@ -34,13 +34,16 @@
#include <kfs/bzip.h>
#include <kfs/gzip.h>
#include <kapp/progressbar.h>
+#include <kapp/queue-file.h>
#include <kapp/loader-file.h>
#define KFILE_IMPL KLoaderFile
#include <kfs/impl.h>
+#include <sysalloc.h>
#include <stdlib.h>
#include <string.h>
+#include <os-native.h> /* for strdup on Windows */
#define DBG(msg) DBGMSG(DBG_LOADLIB,DBG_FLAG(DBG_LOADLIB_FILE), msg)
@@ -66,6 +69,7 @@ struct KLoaderFile
char* filename;
char* realname;
bool has_md5;
+ bool ahead;
uint8_t md5_digest[16];
/* current file */
@@ -210,6 +214,16 @@ rc_t KLoaderFile_Open(KLoaderFile* self)
rc = RC(rcApp, rcFile, rcOpening, rcType, rcUnexpected);
break;
}
+#if ! WINDOWS
+ if( rc == 0 && self->ahead ) {
+ const KFile *z = NULL;
+ if( (rc = KQueueFileMakeRead(&z, self->pos, self->file,
+ self->buffer_size * 10, self->buffer_size, 0)) == 0 ) {
+ KFileRelease(self->file);
+ self->file = z;
+ }
+ }
+#endif
}
}
if( rc != 0 ) {
@@ -271,7 +285,7 @@ LIB_EXPORT rc_t CC KLoaderFile_IsEof(const KLoaderFile* cself, bool* eof)
return RC(rcApp, rcFile, rcConstructing, rcParam, rcNull);
}
/* end of file is when file is at eof and nothing in buffer or last readline returned the buffer */
- *eof = cself->eof && cself->avail == 0;
+ *eof = cself->eof && ((cself->avail - cself->eol) == 0);
return 0;
}
@@ -299,19 +313,16 @@ LIB_EXPORT rc_t CC KLoaderFile_Reset(const KLoaderFile* cself)
rc = RC(rcApp, rcFile, rcConstructing, rcParam, rcNull);
} else {
KLoaderFile* self = (KLoaderFile*)cself;
- if( cself->compress_type != compress_none ) {
- if( cself->pos != 0 ) {
- /* data in buffer is not first portion of the file */
- rc = KLoaderFile_Close(cself);
- self->avail = 0;
- self->buffer[0] = 0;
- }
- } else {
+ if( cself->pos != 0 && (cself->ahead || cself->compress_type != compress_none) ) {
+ /* threaded buffering || data in buffer is not first portion of the file */
+ rc = KLoaderFile_Close(cself);
self->avail = 0;
self->buffer[0] = 0;
+ self->eof = false;
+ } else {
+ self->avail += self->buffer_pos - self->buffer;
}
self->pos = 0;
- self->eof = false;
self->eol = 0;
self->line_no = 0;
self->buffer_pos = self->buffer;
@@ -319,6 +330,17 @@ LIB_EXPORT rc_t CC KLoaderFile_Reset(const KLoaderFile* cself)
return rc;
}
+LIB_EXPORT rc_t CC KLoaderFile_SetReadAhead(const KLoaderFile* cself, bool read_ahead)
+{
+ if( cself == NULL ) {
+ return RC(rcApp, rcFile, rcConstructing, rcParam, rcNull);
+ }
+#if ! WINDOWS
+ ((KLoaderFile*)cself)->ahead = read_ahead;
+#endif
+ return 0;
+}
+
LIB_EXPORT rc_t CC KLoaderFile_LOG(const KLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...)
{
va_list args;
@@ -330,39 +352,35 @@ LIB_EXPORT rc_t CC KLoaderFile_LOG(const KLoaderFile* cself, KLogLevel lvl, rc_t
LIB_EXPORT rc_t CC KLoaderFile_VLOG(const KLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, va_list args)
{
- if( cself == NULL || (msg == NULL && rc == 0) )
- {
+ if( cself == NULL || (msg == NULL && rc == 0) ) {
rc = RC(rcApp, rcFile, rcAccessing, rcParam, rcInvalid);
LOGERR(klogErr, rc, __func__);
- }
- else if( msg == NULL && rc != 0 )
- {
- if( cself->line_no == 0 )
- PLOGERR(lvl, (lvl, rc, NULL, PLOG_2(PLOG_S(file),PLOG_U64(line)), cself->filename, cself->pos));
- else
- PLOGERR(lvl, (lvl, rc, NULL, PLOG_2(PLOG_S(file),PLOG_U64(line)), cself->filename, cself->line_no));
- }
- else
- {
+ } else if( msg == NULL && rc != 0 ) {
+ if( cself->line_no == 0 ) {
+ PLOGERR(lvl, (lvl, rc, "$(file):$(offset)", "file=%s,offset=%lu", cself->filename, cself->pos));
+ } else {
+ PLOGERR(lvl, (lvl, rc, "$(file):$(line)", "file=%s,line=%lu", cself->filename, cself->line_no));
+ }
+ } else {
rc_t fmt_rc;
char xfmt[4096];
const char* f = fmt ? fmt : "";
const char* c = fmt ? "," : "";
- if( cself->line_no == 0 )
+ if( cself->line_no == 0 ) {
fmt_rc = string_printf(xfmt, sizeof xfmt, NULL, "file=%s,offset=%lu%s%s", cself->filename, cself->pos, c, f);
- else
+ } else {
fmt_rc = string_printf(xfmt, sizeof xfmt, NULL, "file=%s,line=%lu%s%s", cself->filename, cself->line_no, c, f);
-
- if ( fmt_rc == 0 )
+ }
+ if ( fmt_rc == 0 ) {
fmt = xfmt;
-
- if( rc == 0 )
+ }
+ if( rc == 0 ) {
VLOGMSG(lvl, (lvl, msg, fmt, args));
- else
+ } else {
VLOGERR(lvl, (lvl, rc, msg, fmt, args));
+ }
}
-
return rc;
}
@@ -406,7 +424,15 @@ LIB_EXPORT rc_t CC KLoaderFile_Readline(const KLoaderFile* cself, const void** b
} else {
KLoaderFile *self = (KLoaderFile*)cself;
uint8_t* nl;
- bool refill = true;
+ bool refilled = false;
+ bool eof;
+
+ rc = KLoaderFile_IsEof(cself, &eof);
+ if( rc == 0 && eof ) {
+ *buffer = NULL;
+ return 0;
+ }
+
while( rc == 0 ) {
bool CR_last = false;
int i, cnt = self->avail - self->eol;
@@ -418,10 +444,10 @@ LIB_EXPORT rc_t CC KLoaderFile_Readline(const KLoaderFile* cself, const void** b
nl = &buf[i];
}
}
- if( !(nl == NULL && refill) ) {
+ if( nl != NULL || refilled ) {
break;
}
- refill = false;
+ refilled = true;
/* none found we need to push out processed portion and load full buffer */
if( self->eol > 0 ) {
/* mark that line ended on buffer end and last char in buffer is \r */
@@ -445,10 +471,7 @@ LIB_EXPORT rc_t CC KLoaderFile_Readline(const KLoaderFile* cself, const void** b
if( self->buffer_size == self->avail ) {
/* buffer could be copied and next call will provide tail of line */
rc = RC( rcApp, rcFile, rcReading, rcString, rcTooLong);
- } else if( (rc = KLoaderFile_IsEof(cself, &refill)) == 0 && refill ) {
- /* EOF */
- *buffer = NULL;
- }
+ }
} else {
*length = nl - (uint8_t*)*buffer;
self->eol = nl - self->buffer_pos + 1;
@@ -515,11 +538,19 @@ LIB_EXPORT rc_t CC KLoaderFile_FullName(const KLoaderFile *self, const char **na
{
if( self == NULL || name == NULL ) {
return RC(rcApp, rcFile, rcAccessing, rcParam, rcNull);
+ } else {
+ *name = self->realname;
}
- *name = self->realname;
return 0;
}
+LIB_EXPORT rc_t CC KLoaderFile_ResolveName(const KLoaderFile *self, char *resolved, size_t rsize)
+{
+ if( self == NULL || resolved == NULL ) {
+ return RC(rcApp, rcFile, rcAccessing, rcParam, rcNull);
+ }
+ return KDirectoryResolvePath(self->dir, true, resolved, rsize, self->realname);
+}
LIB_EXPORT rc_t CC KLoaderFile_Release(const KLoaderFile* cself, bool exclude_from_progress)
{
@@ -544,7 +575,8 @@ LIB_EXPORT rc_t CC KLoaderFile_Release(const KLoaderFile* cself, bool exclude_fr
return rc;
}
-LIB_EXPORT rc_t CC KLoaderFile_Make(const KLoaderFile **file, const KDirectory* dir, const char* filename, const uint8_t* md5_digest)
+LIB_EXPORT rc_t CC KLoaderFile_Make(const KLoaderFile **file, const KDirectory* dir, const char* filename,
+ const uint8_t* md5_digest, bool read_ahead)
{
rc_t rc = 0;
KLoaderFile* obj = NULL;
@@ -585,8 +617,13 @@ LIB_EXPORT rc_t CC KLoaderFile_Make(const KLoaderFile **file, const KDirectory*
}
}
if( rc == 0 &&
- (rc = KFileInit(&obj->dad, (const KFile_vt*)&KLoaderFile_vtbl, true, false)) == 0 ) {
+ (rc = KFileInit(&obj->dad, (const KFile_vt*)&KLoaderFile_vtbl, "KLoaderFile", filename, true, false)) == 0 ) {
obj->file = &obj->dad;
+#if WINDOWS
+ obj->ahead = false;
+#else
+ obj->ahead = read_ahead;
+#endif
obj->realname = strdup(resolved);
if( obj->realname == NULL ) {
rc = RC(rcApp, rcFile, rcConstructing, rcMemory, rcExhausted);
diff --git a/libs/kapp/log-xml.c b/libs/kapp/log-xml.c
index 450a4c6..891dbfc 100644
--- a/libs/kapp/log-xml.c
+++ b/libs/kapp/log-xml.c
@@ -31,7 +31,7 @@
#include <klib/status.h>
#include <klib/text.h>
#include <klib/printf.h>
-#include <klib/xml.h>
+#include <kxml/xml.h>
#include <kfs/file.h>
#include <kfs/kfs-priv.h>
#include <kfs/directory.h>
@@ -86,20 +86,18 @@ struct XMLLogger {
XMLFormatterData stslib;
};
-static
+LIB_EXPORT
rc_t CC XMLLogger_Encode(const char* src, char *dst, size_t dst_sz, size_t *num_writ)
{
rc_t rc = 0;
- size_t bytes;
- const char* p;
-
- assert(src != NULL && num_writ != NULL);
- *num_writ = 0;
- if( *src == '\0' ) {
- *dst = *src;
+ if( src == NULL || dst == NULL || num_writ == NULL ) {
+ rc = RC(rcApp, rcArgv, rcParsing, rcParam, rcNull);
} else {
+ *num_writ = 0;
do {
+ size_t bytes;
+ const char* p;
switch(*src) {
case '\'':
bytes = 6;
@@ -128,12 +126,14 @@ rc_t CC XMLLogger_Encode(const char* src, char *dst, size_t dst_sz, size_t *num_
}
if( (*num_writ + bytes) > dst_sz ) {
rc = RC(rcApp, rcLog, rcEncoding, rcBuffer, rcInsufficient);
+ break;
} else {
memcpy(dst, p, bytes);
*num_writ = *num_writ + bytes;
dst += bytes;
}
- } while(rc == 0 && *++src != '\0');
+ } while(*src++ != '\0');
+ *num_writ = *num_writ - 1;
}
return rc;
}
@@ -310,6 +310,7 @@ LIB_EXPORT rc_t CC XMLLogger_Make2(const XMLLogger** self, KDirectory* dir, cons
{
rc_t rc = 0;
XMLLogger* obj;
+ KDirectory* my_dir = NULL;
const uint32_t lopt = klogFmtTimestamp | klogFmtSeverity |
klogFmtMessage | klogFmtAppName | klogFmtAppVersion | klogFmtReasonShort;
@@ -324,9 +325,9 @@ LIB_EXPORT rc_t CC XMLLogger_Make2(const XMLLogger** self, KDirectory* dir, cons
obj = calloc(1, sizeof(*obj));
if( obj == NULL ) {
rc = RC(rcApp, rcLog, rcAllocating, rcMemory, rcExhausted);
- } else if( fd < 0 && dir == NULL && (rc = KDirectoryNativeDir(&dir)) != 0 ) {
+ } else if( fd < 0 && dir == NULL && (rc = KDirectoryNativeDir(&my_dir)) != 0 ) {
} else if( fd >= 0 && (rc = KFileMakeFDFileWrite(&obj->file.file, false, fd)) != 0 ) {
- } else if( logpath != NULL && fd < 0 && (rc = KDirectoryCreateFile(dir, &obj->file.file, false, 0644, kcmInit, logpath)) != 0 ) {
+ } else if( logpath != NULL && fd < 0 && (rc = KDirectoryCreateFile(dir ? dir : my_dir, &obj->file.file, false, 0644, kcmInit, logpath)) != 0 ) {
} else {
obj->file.pos = 0;
@@ -366,6 +367,7 @@ LIB_EXPORT rc_t CC XMLLogger_Make2(const XMLLogger** self, KDirectory* dir, cons
}
}
}
+ KDirectoryRelease(my_dir);
if( rc == 0 ) {
*self = obj;
if( fd >= 0 ) {
diff --git a/libs/kapp/main.c b/libs/kapp/main.c
index 9906fdb..125a64d 100644
--- a/libs/kapp/main.c
+++ b/libs/kapp/main.c
@@ -29,6 +29,8 @@
#include <sysalloc.h>
#include <kapp/main.h>
#include <kfg/config.h>
+#include <kproc/procmgr.h>
+#include <klib/report.h>
#include <klib/writer.h>
#include <klib/log.h>
#include <klib/status.h>
@@ -354,12 +356,34 @@ void CC NextLogLevelh (int *ip,
* to be in the shell-native character set: ASCII or UTF-8
* element 0 is expected to be executable identity or path.
*/
+static
+void CC atexit_task ( void )
+{
+ KProcMgrWhack ();
+}
+
rc_t KMane ( int argc, char *argv [] )
{
+ rc_t rc;
+
/* get application version */
- uint32_t vers = KAppVersion ();
+ ver_t vers = KAppVersion ();
+
+ /* initialize cleanup tasks */
+ int status = atexit ( atexit_task );
+ if ( status != 0 )
+ return SILENT_RC ( rcApp, rcNoTarg, rcInitializing, rcFunction, rcNotAvailable );
- rc_t rc = KWrtInit(argv[0], vers);
+ /* initialize error reporting */
+ ReportInit ( argc, argv, vers );
+
+ /* initialize proc mgr */
+ rc = KProcMgrInit ();
+ if ( rc != 0 )
+ return rc;
+
+ /* initialize logging */
+ rc = KWrtInit(argv[0], vers);
if ( rc == 0 )
rc = KLogLibHandlerSetStdErr ();
if ( rc == 0 )
@@ -376,6 +400,8 @@ rc_t KMane ( int argc, char *argv [] )
rc = KMain ( argc, argv );
if ( rc != 0 )
{
+
+#if _DEBUGGING
rc_t rc2;
uint32_t lineno;
const char *filename, *function;
@@ -388,6 +414,8 @@ rc_t KMane ( int argc, char *argv [] )
, function
);
}
+#endif
+
}
#if KFG_COMMON_CREATION
KConfigRelease ( kfg );
@@ -395,5 +423,9 @@ rc_t KMane ( int argc, char *argv [] )
#endif
}
+ /* finalize error reporting */
+ ReportSilence ();
+ ReportFinalize ( rc );
+
return rc;
}
diff --git a/libs/kapp/queue-file.c b/libs/kapp/queue-file.c
new file mode 100644
index 0000000..e8dfd14
--- /dev/null
+++ b/libs/kapp/queue-file.c
@@ -0,0 +1,925 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+typedef struct KQueueFile KQueueFile;
+#define KFILE_IMPL KQueueFile
+
+#include <kapp/extern.h>
+#include <kapp/queue-file.h>
+#include <kfs/file.h>
+#include <kfs/impl.h>
+#include <kproc/timeout.h>
+#include <kproc/thread.h>
+#include <kproc/queue.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <os-native.h>
+#include <klib/out.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#if _DEBUGGING && 0
+#define DEFAULT_BLOCK_SIZE 4 * 1024
+#define QFMSG( msg, ... ) \
+ KOutMsg ( msg, __VA_ARGS__ )
+#else
+#define DEFAULT_BLOCK_SIZE 64 * 1024
+#define QFMSG( msg, ... ) \
+ ( void ) 0
+#endif
+
+#define DEFAULT_TIMEOUT_MS 150
+
+/*--------------------------------------------------------------------------
+ * KQueueFileBuffer
+ * a block that describes its valid bytes and position
+ */
+typedef struct KQueueFileBuffer KQueueFileBuffer;
+struct KQueueFileBuffer
+{
+ uint64_t pos;
+ size_t bytes;
+ rc_t rc;
+ uint32_t align;
+ uint8_t data [ 1 ];
+};
+
+static
+bool KQueueFileBufferContains ( const KQueueFileBuffer *self, uint64_t pos )
+{
+ if ( self != NULL )
+ {
+ if ( self -> pos <= pos && ( self -> pos + self -> bytes ) > pos )
+ return true;
+ }
+ return false;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KQueueFile
+ * an extension to KFile that runs on a background thread
+ */
+struct KQueueFile
+{
+ KFile dad;
+
+ /* the source file's size on open */
+ uint64_t apparent_size;
+
+ /* starting position for read-ahead */
+ uint64_t start_pos;
+
+ /* the file really being accessed */
+ KFile *f;
+
+ /* buffer info */
+ KQueueFileBuffer *b;
+ size_t bsize;
+
+ /* thread and buffer queue */
+ KThread *t;
+ KQueue *q;
+
+ /* captured upon open */
+ rc_t rc_from_size_on_open;
+
+ /* timeout when queue is not responding */
+ uint32_t timeout_ms;
+};
+
+/* Whack
+ */
+static
+rc_t KQueueFileWhackRead ( KQueueFile *self )
+{
+ void *b;
+
+ /* no more reading */
+ QFMSG ( "%s: sealing queue\n", __func__ );
+ KQueueSeal ( self -> q );
+
+ /* flush the queue */
+ QFMSG ( "%s: popping queue\n", __func__ );
+ while ( KQueuePop ( self -> q, & b, NULL ) == 0 )
+ {
+ QFMSG ( "%s: dousing a buffer\n", __func__ );
+ free ( b );
+ }
+
+ /* wait for thread to exit */
+ QFMSG ( "%s: waiting for bg thread to exit\n", __func__ );
+ KThreadWait ( self -> t, NULL );
+
+ /* tear it down */
+ QFMSG ( "%s: freeing object\n", __func__ );
+ free ( self -> b );
+ KThreadRelease ( self -> t );
+ KQueueRelease ( self -> q );
+ KFileRelease ( self -> f );
+ free ( self );
+
+ return 0;
+}
+
+static
+rc_t KQueueFileFlush ( KQueueFile *self, KQueueFileBuffer *b )
+{
+ rc_t rc;
+
+ /* timeout is in mS */
+ timeout_t tm;
+ QFMSG ( "%s: initializing timeout for %,umS\n", __func__, self->timeout_ms);
+ TimeoutInit ( & tm, self->timeout_ms );
+
+ /* push buffer */
+ QFMSG ( "%s: pushing buffer...\n", __func__ );
+ rc = KQueuePush ( self -> q, b, & tm );
+ QFMSG ( "%s: ...done: rc = %R\n", __func__, rc );
+ if ( rc != 0 )
+ {
+ /* see if the bg thread exited */
+ if ( GetRCState ( rc ) == rcReadonly )
+ {
+ rc = RC ( rcApp, rcFile, rcWriting, rcTransfer, rcIncomplete );
+ QFMSG ( "%s: resetting rc to %R\n", __func__, rc );
+ }
+ return rc;
+ }
+
+ QFMSG ( "%s: forgetting about buffer\n", __func__ );
+ self -> b = NULL;
+ return 0;
+}
+
+static
+rc_t KQueueFileWhackWrite ( KQueueFile *self )
+{
+ void *b;
+ rc_t rc = 0;
+
+ /* flush last buffer */
+ if ( self -> b != NULL )
+ {
+ QFMSG ( "%s: have non-null buffer\n", __func__ );
+ if ( self -> b -> bytes != 0 )
+ {
+ QFMSG ( "%s: buffer has %zu bytes\n", __func__, self -> b -> bytes );
+ rc = KQueueFileFlush ( self, self -> b );
+ }
+
+ free ( self -> b );
+ self -> b = NULL;
+ }
+
+ /* no more writing */
+ QFMSG ( "%s: sealing queue\n", __func__ );
+ KQueueSeal ( self -> q );
+
+ /* wait for thread to exit */
+ QFMSG ( "%s: waiting for bg thread to exit\n", __func__ );
+ KThreadWait ( self -> t, NULL );
+
+ /* the file should be written
+ but flush the queue if bg thread didn't */
+ QFMSG ( "%s: popping queue\n", __func__ );
+ while ( KQueuePop ( self -> q, & b, NULL ) == 0 )
+ {
+ QFMSG ( "%s: dousing a buffer\n", __func__ );
+ free ( b );
+ }
+
+ /* tear it down */
+ QFMSG ( "%s: freeing object\n", __func__ );
+ KThreadRelease ( self -> t );
+ KQueueRelease ( self -> q );
+ KFileRelease ( self -> f );
+ free ( self );
+
+ return rc;
+}
+
+/* GetSysFile
+ * returns an underlying system file object
+ * and starting offset to contiguous region
+ * suitable for memory mapping, or NULL if
+ * no such file is available.
+ */
+static
+struct KSysFile* CC KQueueFileGetSysFile ( const KQueueFile *self, uint64_t *offset )
+{
+ return NULL;
+}
+
+/* RandomAccess
+ * ALMOST by definition, the file is random access
+ *
+ * certain file types will refuse random access
+ * these include FIFO and socket based files, but also
+ * wrappers that require serial access ( e.g. compression )
+ *
+ * returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KQueueFileRandomAccess ( const KQueueFile *self )
+{
+ return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported );
+}
+
+/* Type
+ * returns a KQueueFileDesc
+ * not intended to be a content type,
+ * but rather an implementation class
+ */
+static
+uint32_t CC KQueueFileType ( const KQueueFile *self )
+{
+ return kptFIFO;
+}
+
+/* Size
+ * returns size in bytes of file
+ *
+ * "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KQueueFileSize ( const KQueueFile *self, uint64_t *size )
+{
+ * size = self -> apparent_size;
+ return self -> rc_from_size_on_open;
+}
+
+/* SetSize
+ * sets size in bytes of file
+ *
+ * "size" [ IN ] - new file size
+ */
+static
+rc_t CC KQueueFileSetSize ( KQueueFile *self, uint64_t size )
+{
+ return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported );
+}
+
+
+/* RunRead
+ * runs read loop on background thread
+ */
+static
+rc_t CC KQueueFileRunRead ( const KThread *t, void *data )
+{
+ KQueueFile *self = data;
+
+ rc_t rc;
+ bool loop;
+ uint64_t pos;
+ size_t num_read;
+
+ QFMSG ( "BG: %s: running read-ahead loop\n", __func__ );
+ for ( rc = 0, loop = true, pos = self -> start_pos; loop; pos += num_read )
+ {
+ timeout_t tm;
+
+ KQueueFileBuffer *b = malloc ( sizeof * b - sizeof b -> data + self -> bsize );
+ if ( b == NULL )
+ {
+ rc = RC ( rcApp, rcFile, rcReading, rcMemory, rcExhausted );
+ QFMSG ( "BG: %s: failed to allocate %zu byte buffer\n", __func__, self -> bsize );
+ b = malloc ( sizeof * b );
+ if ( b == NULL )
+ break;
+
+ num_read = 0;
+ b -> rc = rc;
+ QFMSG ( "BG: %s: created empty buffer with rc = %R.\n", __func__, b -> rc );
+ loop = false;
+ }
+ else
+ {
+ QFMSG ( "BG: %s: reading %zu byte buffer\n", __func__, self -> bsize );
+ b -> rc = KFileReadAll ( self -> f, pos, b -> data, self -> bsize, & num_read );
+ QFMSG ( "BG: %s: read %zu bytes, rc = %R\n", __func__, num_read, b -> rc );
+ if ( b -> rc != 0 || num_read == 0 )
+ loop = false;
+ }
+
+ /* update buffer data */
+ b -> pos = pos;
+ b -> bytes = num_read;
+#if _DEBUGGING
+ b -> align = 0;
+#endif
+
+PushAgain:
+ /* timeout is in mS */
+ QFMSG ( "BG: %s: initializing timeout for %,umS\n", __func__, self->timeout_ms );
+ TimeoutInit ( & tm, self->timeout_ms );
+
+ /* push buffer */
+ QFMSG ( "BG: %s: pushing buffer...\n", __func__ );
+ rc = KQueuePush ( self -> q, b, & tm );
+ QFMSG ( "BG: %s: ...done: rc = %R\n", __func__, rc );
+ if ( rc != 0 )
+ {
+ /* if queue has been sealed by fg */
+ if ( GetRCState ( rc ) == rcReadonly )
+ {
+ rc = 0;
+ QFMSG ( "BG: %s: clearing rc\n", __func__ );
+
+ } else if( GetRCObject(rc) == rcTimeout && GetRCState(rc) == rcExhausted ) {
+ goto PushAgain;
+ }
+ QFMSG ( "BG: %s: dousing buffer\n", __func__ );
+ free ( b );
+ break;
+ }
+ }
+
+ /* going to exit thread */
+ QFMSG ( "BG: %s: sealing thread\n", __func__ );
+ KQueueSeal ( self -> q );
+
+ QFMSG ( "BG: %s: exit with rc = %R\n", __func__, rc );
+ return rc;
+}
+
+/* Read
+ * read file from known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT ] - return parameter giving number of bytes
+ * actually read. when returned value is zero and return code is
+ * also zero, interpreted as end of file.
+ */
+static
+rc_t CC KQueueFileNoRead ( const KQueueFile *self, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ return RC ( rcFS, rcFile, rcReading, rcFile, rcWriteonly );
+}
+
+static
+rc_t CC KQueueFileRead ( const KQueueFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ rc_t rc;
+ size_t to_read;
+ KQueueFile *self = ( KQueueFile* ) cself;
+ KQueueFileBuffer *b = self -> b;
+
+ assert ( num_read != NULL );
+ assert ( * num_read == 0 );
+ assert ( buffer != NULL && bsize != 0 );
+
+ /* detect attempt to back up */
+ if ( b != NULL && pos < b -> pos )
+ {
+ QFMSG ( "%s: detected attempt to back up from %lu to %lu\n", __func__, b -> pos, pos );
+ return RC ( rcApp, rcFile, rcReading, rcConstraint, rcViolated );
+ }
+
+ QFMSG ( "%s: loop to read %zu bytes at offset %lu\n", __func__, bsize, pos );
+ while ( ! KQueueFileBufferContains ( b, pos ) )
+ {
+ /* fetch next buffer */
+ KQueueFileBuffer *tmp;
+
+ /* timeout is in mS */
+ timeout_t tm;
+ QFMSG ( "%s: initializing timeout for %,umS\n", __func__, self->timeout_ms );
+ TimeoutInit ( & tm, self->timeout_ms );
+
+ /* pop buffer */
+ QFMSG ( "%s: popping buffer...\n", __func__ );
+ rc = KQueuePop ( self -> q, ( void** ) & tmp, & tm );
+ QFMSG ( "%s: ...done: rc = %R\n", __func__, rc );
+ if ( rc != 0 )
+ {
+ /* see if the bg thread is done */
+ if ( GetRCState ( rc ) == rcDone && GetRCObject ( rc ) == rcData )
+ {
+ QFMSG ( "%s: BG thread has exited with end-of-input\n", __func__ );
+ return 0;
+ } else if( GetRCObject(rc) == rcTimeout && GetRCState(rc) == rcExhausted ) {
+ continue; /* timeout is not a problem, try again */
+ }
+
+ QFMSG ( "%s: read failed with rc = %R\n", __func__, rc );
+ return rc;
+ }
+
+ /* queue is not supposed to be able to contain NULL */
+ assert ( tmp != NULL );
+
+ /* buffer may indicate read error or end of input */
+ if ( tmp -> rc != 0 || tmp -> bytes == 0 )
+ {
+ rc = tmp -> rc;
+ QFMSG ( "%s: BG thread has delivered %zu size buffer with rc = %R\n", __func__, tmp -> bytes, rc );
+ free ( tmp );
+ return rc;
+ }
+
+ /* free existing buffer */
+ if ( b != NULL )
+ {
+ QFMSG ( "%s: freeing buffer of %zu bytes at position %lu\n", __func__, b -> bytes, b -> pos );
+ free ( b );
+ }
+
+ /* take new buffer */
+ self -> b = b = tmp;
+ QFMSG ( "%s: caching buffer of %zu bytes at position %lu\n", __func__, b -> bytes, b -> pos );
+ }
+
+ pos -= b -> pos;
+ to_read = b -> bytes - ( size_t ) pos;
+ if ( to_read > bsize )
+ to_read = bsize;
+
+ QFMSG ( "%s: copying %zu bytes from buffer at local offset %lu\n", __func__, to_read, pos );
+ memcpy ( buffer, & b -> data [ pos ], to_read );
+
+ QFMSG ( "%s: successful read\n", __func__ );
+ * num_read = to_read;
+ return 0;
+}
+
+
+/* RunWrite
+ * runs write loop on background thread
+ */
+static
+rc_t CC KQueueFileRunWrite ( const KThread *t, void *data )
+{
+ KQueueFile *self = data;
+
+ rc_t rc;
+ do
+ {
+ size_t num_writ;
+ KQueueFileBuffer *b;
+
+ /* timeout is in mS */
+ timeout_t tm;
+ TimeoutInit ( & tm, self->timeout_ms );
+
+ /* pop buffer */
+ rc = KQueuePop ( self -> q, ( void** ) & b, & tm );
+ if ( rc != 0 )
+ {
+ /* see if the fg thread is done */
+ if ( GetRCState ( rc ) == rcDone && GetRCObject ( rc ) == rcData )
+ {
+ rc = 0;
+ }
+ else if ( GetRCObject(rc) == rcTimeout && GetRCState(rc) == rcExhausted )
+ {
+ rc = 0;
+ continue;
+ }
+
+ break;
+ }
+
+ /* queue won't accept NULL object references */
+ assert ( b != NULL );
+
+ /* look at buffer for end of input */
+ if ( b -> rc != 0 || b -> bytes == 0 )
+ {
+ free ( b );
+ break;
+ }
+
+ /* write to file */
+ rc = KFileWriteAll ( self -> f, b -> pos, b -> data, b -> bytes, & num_writ );
+ assert ( num_writ == b -> bytes || rc != 0 );
+
+ /* TBD - need a better way to deal with this */
+ if ( rc != 0 )
+ {
+ PLOGERR ( klogSys, ( klogSys, rc, "$(func): wrote $(num_writ) of $(bytes) bytes to file",
+ "func=%s,num_writ=%zu,bytes=%zu", __func__, num_writ, b -> bytes ) );
+ }
+
+ /* done with buffer */
+ free ( b );
+ }
+ while ( rc == 0 );
+
+ /* going to exit thread */
+ KQueueSeal ( self -> q );
+
+ return rc;
+}
+
+/* Write
+ * write file at known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ */
+static
+rc_t CC KQueueFileNoWrite ( KQueueFile *self, uint64_t pos,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ return RC ( rcApp, rcFile, rcWriting, rcFile, rcReadonly );
+}
+
+static
+rc_t CC KQueueFileWrite ( KQueueFile *self, uint64_t pos,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ rc_t rc;
+ size_t total, to_write;
+
+ for ( rc = 0, total = 0; total < size; pos += to_write, total += to_write )
+ {
+ /* current buffer */
+ KQueueFileBuffer *b = self -> b;
+
+ /* if we have a buffer, test for a write within bounds */
+ if ( self -> b != NULL )
+ {
+ /* an attempt to write first byte BEFORE
+ current buffer or BEYOND current contents
+ or AT current end while being full provokes
+ a flush of the current buffer */
+ if ( pos < b -> pos ||
+ pos > b -> pos + b -> bytes ||
+ pos == b -> pos + self -> bsize )
+ {
+ rc = KQueueFileFlush ( self, b );
+ if ( rc != 0 )
+ { /* the background thread is probably gone */
+ break;
+ }
+ }
+ }
+
+ /* if by now we don't have a buffer, allocate one */
+ if ( self -> b == NULL )
+ {
+ b = malloc ( sizeof * b - sizeof b -> data + self -> bsize );
+ if ( b == NULL )
+ {
+ rc = RC ( rcApp, rcFile, rcWriting, rcMemory, rcExhausted );
+ break;
+ }
+
+ self -> b = b;
+ b -> pos = pos/* + total*/;
+ b -> bytes = 0;
+ b -> rc = 0;
+#if _DEBUGGING
+ b -> align = 0;
+#endif
+ }
+
+ assert ( b != NULL );
+ assert ( b == self -> b );
+/* assert ( pos >= b -> pos ); */
+ assert ( pos <= b -> pos + b -> bytes );
+ assert ( pos < b -> pos + self -> bsize );
+
+ /* write into the buffer */
+ to_write = size - total;
+ if ( b -> bytes + to_write > self -> bsize )
+ to_write = self -> bsize - b -> bytes;
+
+ memcpy ( & b -> data [ b -> bytes ], & ( ( const uint8_t* ) buffer ) [ total ], to_write );
+ b -> bytes += to_write;
+ }
+
+
+ * num_writ = total;
+ if ( total != 0 )
+ return 0;
+
+ return rc;
+}
+
+
+static KFile_vt_v1 KQueueFileRead_vt_v1 =
+{
+ /* version 1.1 */
+ 1, 1,
+
+ /* v1.0 */
+ KQueueFileWhackRead,
+ KQueueFileGetSysFile,
+ KQueueFileRandomAccess,
+ KQueueFileSize,
+ KQueueFileSetSize,
+ KQueueFileRead,
+ KQueueFileNoWrite,
+
+ /* v1.1 */
+ KQueueFileType
+};
+
+
+static KFile_vt_v1 KQueueFileWrite_vt_v1 =
+{
+ /* version 1.1 */
+ 1, 1,
+
+ /* v1.0 */
+ KQueueFileWhackWrite,
+ KQueueFileGetSysFile,
+ KQueueFileRandomAccess,
+ KQueueFileSize,
+ KQueueFileSetSize,
+ KQueueFileNoRead,
+ KQueueFileWrite,
+
+ /* v1.1 */
+ KQueueFileType
+};
+
+
+/* MakeRead
+ * make a queue file for reading-ahead on background thread
+ *
+ * when the file is created, a background thread is started
+ * that begins reading from "src" at position "pos", into
+ * buffers of size "buffer_size". each buffer is pushed into
+ * a cross-thread queue where it is consumed by the reading
+ * thread.
+ *
+ * the background thread is throttled by queue capacity - determined
+ * by "queue_bytes" and "block_size", such that if the queue is full,
+ * the thread will sleep. the consumer thread is also throttled by the
+ * queue in that it will sleep if the queue is empty with pending data.
+ *
+ * the background thread will exit upon reaching end of file,
+ * upon a permanent error, or if the queue is sealed by the consumer
+ * thread.
+ *
+ * when the file is collected in response to a release message,
+ * the queue will be sealed against further inserts, pending buffers
+ * will be discarded, the background thread will be joined, and
+ * the source file will be released.
+ *
+ * the intended usage is serial reading of the file. reads
+ * may only progress forward, i.e. backing up is not permitted.
+ *
+ * "qf" [ OUT ] - return parameter for queue file
+ *
+ * "pos" [ IN ] - starting position for reads from "src".
+ * NB - "src" must support being addressed at this position.
+ *
+ * "src" [ IN ] - source file for read-ahead on background thread.
+ * must have read permissions.
+ *
+ * "queue_bytes" [ IN ] - the read-ahead limit of the background
+ * thread, in bytes. this is the amount of data that will be queued
+ * for the consumer thread before the bg thread sleeps.
+ *
+ * "block_size" [ IN, DEFAULT ZERO ] - optional parameter giving
+ * desired block size when reading from "src". this may be used
+ * to tune reading for source data, e.g. 64K blocks for gzip.
+ */
+LIB_EXPORT rc_t CC KQueueFileMakeRead ( const KFile **qfp, uint64_t pos,
+ const KFile *src, size_t queue_bytes, size_t block_size, uint32_t timeout_ms )
+{
+ rc_t rc;
+
+ if ( qfp == NULL )
+ rc = RC ( rcApp, rcFile, rcConstructing, rcParam, rcNull );
+ else
+ {
+ if ( src == NULL )
+ rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcNull );
+ else if ( ! src -> read_enabled )
+ {
+ if ( src -> write_enabled )
+ rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcWriteonly );
+ else
+ rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcNoPerm );
+ }
+ else if ( pos == 0 || ( rc = KFileRandomAccess ( src ) ) == 0 )
+ {
+ KQueueFile *qf = malloc ( sizeof * qf );
+ if ( qf == NULL )
+ rc = RC ( rcApp, rcFile, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KFileInit ( & qf -> dad, ( const KFile_vt* ) & KQueueFileRead_vt_v1, "KQueueFile", "no-name", true, false );
+ if ( rc == 0 )
+ {
+ qf -> f = ( KFile* ) src;
+ rc = KFileAddRef ( src );
+ if ( rc == 0 )
+ {
+ uint32_t capacity;
+
+ /* zero block size means default */
+ if ( block_size == 0 )
+ block_size = DEFAULT_BLOCK_SIZE;
+
+ /* queue capacity is expressed in bytes originally
+ translate to buffer count */
+ capacity = ( queue_bytes + block_size - 1 ) / block_size;
+ if ( capacity == 0 )
+ capacity = 1;
+
+ /* actual capacity will be a power of 2 */
+ rc = KQueueMake ( & qf -> q, capacity );
+ if ( rc == 0 )
+ {
+ /* capture current size if supported */
+ qf -> rc_from_size_on_open = KFileSize ( src, & qf -> apparent_size );
+
+ /* starting position for read */
+ qf -> start_pos = pos;
+
+ /* requested buffer size */
+ qf -> b = NULL;
+ qf -> bsize = block_size;
+
+ /* timeout */
+ qf -> timeout_ms = timeout_ms == 0 ? DEFAULT_TIMEOUT_MS : timeout_ms;
+
+ /* finally, start the background thread */
+ rc = KThreadMake ( & qf -> t, KQueueFileRunRead, qf );
+ if ( rc == 0 )
+ {
+ * qfp = & qf -> dad;
+ return 0;
+ }
+
+ KQueueRelease ( qf -> q );
+ }
+
+ KFileRelease ( qf -> f );
+ }
+ }
+
+ free ( qf );
+ }
+ }
+
+ * qfp = NULL;
+ }
+
+ return rc;
+}
+
+
+/* MakeWrite
+ * make a queue file for writing-behind on background thread
+ *
+ * when the file is created, a background thread is started that
+ * waits for buffers to appear in the cross-thread queue. as the producer
+ * thread writes, data are accumulated into buffers which are pushed
+ * into the queue as they fill, and written in turn on the bg thread.
+ *
+ * the producer thread is throttled by queue capacity - determined by
+ * "queue_bytes" and "block_size", such that if the queue is full,
+ * the thread will sleep. the background thread is also throttled by
+ * the queue in that it will sleep if the queue is empty with pending
+ * data.
+ *
+ * the background thread will exit upon a permanent error, or if the
+ * queue is sealed by the producer thread.
+ *
+ * when the file is collected in response to a release message,
+ * the queue will be sealed against further inserts, pending buffers
+ * will be written, the background thread will be joined, and
+ * the source file will be released.
+ *
+ * the intended usage is serial writing of the file. random writes
+ * will be accepted, but may reduce the queue efficiency.
+ *
+ * "qf" [ OUT ] - return parameter for queue file
+ *
+ * "dst" [ IN ] - destination file for write-behind on background thread.
+ * must have write permissions.
+ *
+ * "queue_bytes" [ IN ] - the write-behind limit of the producer
+ * thread, in bytes. this is the amount of data that will be queued
+ * for the background thread before the producer thread sleeps.
+ *
+ * "block_size" [ IN, DEFAULT ZERO ] - optional parameter giving
+ * desired block size when writing to "dst". this may be used
+ * to tune writing for source data, e.g. 64K blocks for gzip.
+ */
+LIB_EXPORT rc_t CC KQueueFileMakeWrite ( KFile **qfp,
+ KFile *dst, size_t queue_bytes, size_t block_size, uint32_t timeout_ms )
+{
+ rc_t rc;
+
+ if ( qfp == NULL )
+ rc = RC ( rcApp, rcFile, rcConstructing, rcParam, rcNull );
+ else
+ {
+ if ( dst == NULL )
+ rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcNull );
+ else if ( ! dst -> write_enabled )
+ {
+ if ( dst -> read_enabled )
+ rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcReadonly );
+ else
+ rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcNoPerm );
+ }
+ else
+ {
+ KQueueFile *qf = malloc ( sizeof * qf );
+ if ( qf == NULL )
+ rc = RC ( rcApp, rcFile, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KFileInit ( & qf -> dad, ( const KFile_vt* ) & KQueueFileWrite_vt_v1, "KQueueFile", "no-name", false, true );
+ if ( rc == 0 )
+ {
+ qf -> f = dst;
+ rc = KFileAddRef ( dst );
+ if ( rc == 0 )
+ {
+ uint32_t capacity;
+
+ /* zero block size means default */
+ if ( block_size == 0 )
+ block_size = DEFAULT_BLOCK_SIZE;
+
+ /* queue capacity is expressed in bytes originally
+ translate to buffer count */
+ capacity = ( queue_bytes + block_size - 1 ) / block_size;
+ if ( capacity == 0 )
+ capacity = 1;
+
+ /* actual capacity will be a power of 2 */
+ rc = KQueueMake ( & qf -> q, capacity );
+ if ( rc == 0 )
+ {
+ /* capture current size if supported */
+ qf -> rc_from_size_on_open = KFileSize ( dst, & qf -> apparent_size );
+
+ /* starting position not used */
+ qf -> start_pos = 0;
+
+ /* requested buffer size */
+ qf -> b = NULL;
+ qf -> bsize = block_size;
+
+ /* timeout */
+ qf -> timeout_ms = timeout_ms == 0 ? DEFAULT_TIMEOUT_MS : timeout_ms;
+
+ /* finally, start the background thread */
+ rc = KThreadMake ( & qf -> t, KQueueFileRunWrite, qf );
+ if ( rc == 0 )
+ {
+ * qfp = & qf -> dad;
+ return 0;
+ }
+
+ KQueueRelease ( qf -> q );
+ }
+
+ KFileRelease ( qf -> f );
+ }
+ }
+
+ free ( qf );
+ }
+ }
+
+ * qfp = NULL;
+ }
+
+ return rc;
+}
diff --git a/libs/kapp/tokenizer.c b/libs/kapp/tokenizer.c
new file mode 100644
index 0000000..6bee3ed
--- /dev/null
+++ b/libs/kapp/tokenizer.c
@@ -0,0 +1,525 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/extern.h>
+#include <sysalloc.h>
+
+#include <kapp/args.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/text.h>
+
+#include <vfs/path.h>
+#include <vfs/manager.h>
+#include <kfs/file.h>
+
+#include <os-native.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+
+#define ARGV_INC 10
+#define TOKEN_INC 512
+
+/*
+ strtok() not used, because we tokenize the content of a file!
+ we do that in chunks of 4096 char's
+ a token can span multiple chunks!
+ we also support quoting and escaping ( a la bash )
+*/
+
+typedef struct tokenzr
+{
+ int * argc;
+ char *** argv;
+ char *token;
+ size_t allocated;
+ size_t used;
+ uint32_t state;
+ uint32_t nargs;
+ char escape[ 3 ];
+ char n_escape;
+ char m_escape;
+} tokenzr;
+
+
+static rc_t make_tokenzr( tokenzr **t, int * argc, char *** argv )
+{
+ rc_t rc = 0;
+ if ( t == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcSelf, rcNull );
+ }
+ else
+ {
+ tokenzr *t1 = malloc( sizeof *t1 );
+ if ( t1 == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ t1->token = malloc( TOKEN_INC );
+ if ( t1->token == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ t1->allocated = TOKEN_INC;
+ t1->used = 0;
+ t1->state = 0;
+ t1->nargs = 0;
+ t1->argc = argc;
+ t1->argv = argv;
+ t1->n_escape = 0;
+ t1->m_escape = 0;
+ }
+ }
+ if ( rc == 0 )
+ {
+ *t = t1;
+ }
+ }
+ return rc;
+}
+
+
+static void free_tokenzr( tokenzr *t )
+{
+ if ( t != NULL )
+ {
+ if ( t->token != NULL )
+ free( t->token );
+ free( t );
+ }
+}
+
+
+static rc_t expand_argv( tokenzr *t )
+{
+ rc_t rc = 0;
+ char ** pargv = *(t->argv);
+
+ if ( pargv == NULL )
+ {
+ pargv = malloc( ARGV_INC * ( sizeof pargv[ 0 ] ) );
+ if ( pargv != NULL )
+ {
+ t->nargs = ARGV_INC;
+ ( *(t->argc) ) = 0;
+ }
+ else
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ if ( ( *(t->argc) ) >= t->nargs )
+ {
+ char ** pargv1 = realloc( pargv, ( ( t->nargs + ARGV_INC ) * ( sizeof pargv[ 0 ] ) ) );
+ if ( pargv1 != NULL )
+ {
+ t->nargs += ARGV_INC;
+ pargv = pargv1;
+ }
+ else
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ free( pargv );
+ pargv = NULL;
+ }
+ }
+ }
+ if ( rc == 0 )
+ {
+ *(t->argv) = pargv;
+ }
+ return rc;
+}
+
+
+static rc_t add_string_to_argv( tokenzr *t, const char * str, size_t len )
+{
+ rc_t rc = expand_argv( t );
+ if ( rc == 0 )
+ {
+ int argc = *(t->argc);
+ char ** pargv = *(t->argv);
+
+ pargv[ argc ] = string_dup ( str, len );
+ if ( pargv[ argc ] == NULL )
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ ( *(t->argc) )++;
+ *(t->argv) = pargv;
+ t->used = 0;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t add_token_to_argv( tokenzr *t )
+{
+ return add_string_to_argv( t, t->token, t->used );
+}
+
+
+static rc_t add_buffer_to_token( tokenzr *t, const char *buffer, size_t buflen )
+{
+ rc_t rc = 0;
+ if ( t->used + buflen > t->allocated )
+ {
+ size_t new_size = t->used + buflen + TOKEN_INC;
+ char * temp = realloc( t->token, new_size );
+ if ( temp == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ }
+ else
+ {
+ t->token = temp;
+ t->allocated = new_size;
+ }
+ }
+ if ( rc == 0 )
+ {
+ memcpy( t->token + t->used, buffer, buflen );
+ t->used += buflen;
+ }
+ return rc;
+}
+
+
+/* this is the 'normal' state, that the buffer is divided into tokens by white-space */
+const static char delim0[] = " \r\n\f\t\v\\\"";
+static rc_t tokenize_state0( tokenzr *t, bool *done, char ** ptr, const char *buffer, size_t buflen )
+{
+ rc_t rc;
+ char * s = strpbrk ( *ptr, delim0 );
+ if ( s == NULL )
+ {
+ /* delimiting char not found!
+ ---> add everything to the tokenbuffer */
+ size_t to_add = buflen - ( *ptr - buffer );
+ rc = add_buffer_to_token( t, *ptr, to_add );
+ *done = true;
+ }
+ else
+ {
+ /* delimiting char found!
+ ---> add everything from ptr to s to the tokenbuffer
+ ---> then add token to argv
+ ---> then clear token */
+ rc = add_buffer_to_token( t, *ptr, s - *ptr );
+ if ( rc == 0 )
+ {
+ if ( t->used > 0 && *s != '\\' )
+ rc = add_token_to_argv( t );
+ *ptr = s + 1;
+ *done = ( *ptr >= buffer + buflen );
+ switch( *s )
+ {
+ case '"' : t->state = 1; break;
+ case '\\' : t->state = 2; break;
+ }
+ }
+ }
+ return rc;
+}
+
+
+/* this state, provides 'quoting' ( prevents tokenizing by putting quotes "" around strings
+ which would be otherwise separated by whitespace ) */
+const static char delim1[] = "\"";
+static rc_t tokenize_state1( tokenzr *t, bool *done, char ** ptr, const char *buffer, size_t buflen )
+{
+ rc_t rc;
+ char * s = strpbrk ( *ptr, delim1 );
+ if ( s == NULL )
+ {
+ /* delimiting char not found!
+ ---> add everything to the tokenbuffer */
+ size_t to_add = buflen - ( *ptr - buffer );
+ rc = add_buffer_to_token( t, *ptr, to_add );
+ *done = true;
+ }
+ else
+ {
+ /* delimiting char found!
+ ---> add everything from ptr to s to the tokenbuffer
+ ---> then add token to argv
+ ---> then clear token */
+ rc = add_buffer_to_token( t, *ptr, s - *ptr );
+ if ( rc == 0 )
+ {
+ if ( t->used > 0 )
+ rc = add_token_to_argv( t );
+ *ptr = s + 1;
+ *done = ( *ptr >= buffer + buflen );
+ if ( *s == '"' )
+ t->state = 0;
+ }
+ }
+ return rc;
+}
+
+
+/* this state, provides 'escaping' ( \nnn or \xHH or \' or \" ) */
+static rc_t tokenize_state2( tokenzr *t, bool *done, char ** ptr, const char *buffer, size_t buflen )
+{
+ rc_t rc = 0;
+ char c = **ptr;
+ switch( c )
+ {
+ case '\\' : /* no break intended ! */
+ case '\'' :
+ case '\"' : rc = add_buffer_to_token( t, (*ptr)++, 1 );
+ break;
+
+ case 't' : rc = add_buffer_to_token( t, "\t", 1 );
+ (*ptr)++;
+ break;
+ case 'n' : rc = add_buffer_to_token( t, "\n", 1 );
+ (*ptr)++;
+ break;
+ case 'r' : rc = add_buffer_to_token( t, "\r", 1 );
+ (*ptr)++;
+ break;
+
+ }
+ t->state = 0;
+ *done = ( *ptr >= buffer + buflen );
+ return rc;
+}
+
+
+static rc_t tokenize_buffer( tokenzr *t, const char *buffer, size_t buflen )
+{
+ rc_t rc = 0;
+ char * ptr = ( char * ) buffer;
+ bool done = false;
+ while ( rc == 0 && !done )
+ switch( t->state )
+ {
+ case 0 : rc = tokenize_state0( t, &done, &ptr, buffer, buflen ); break;
+ case 1 : rc = tokenize_state1( t, &done, &ptr, buffer, buflen ); break;
+ case 2 : rc = tokenize_state2( t, &done, &ptr, buffer, buflen ); break;
+ }
+ return rc;
+}
+
+
+static rc_t tokenize_file_and_progname_into_argv( const char * filename, const char * progname,
+ int * argc, char *** argv )
+{
+ rc_t rc2, rc = 0;
+ VFSManager *vfs_mgr;
+
+ ( *argv ) = NULL;
+ ( *argc ) = 0;
+ rc = VFSManagerMake ( &vfs_mgr );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "VFSManagerMake() failed" );
+ else
+ {
+ VPath * vfs_path;
+ rc = VPathMake ( &vfs_path, filename );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "VPathMake() failed" );
+ else
+ {
+ struct KFile const *my_file;
+ rc = VFSManagerOpenFileRead ( vfs_mgr, &my_file, vfs_path );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "VFSManagerOpenFileRead() failed" );
+ else
+ {
+ tokenzr *t;
+ uint64_t pos = 0;
+ char buffer[ 4096 + 1 ];
+ size_t num_read;
+
+ rc = make_tokenzr( &t, argc, argv );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "make_tokenzr() failed" );
+ else
+ {
+ if ( progname != NULL )
+ rc = add_string_to_argv( t, progname, string_size( progname ) );
+
+ if ( rc == 0 )
+ {
+ do
+ {
+ rc = KFileRead ( my_file, pos, buffer, ( sizeof buffer ) - 1, &num_read );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "KFileRead() failed" );
+ else if ( num_read > 0 )
+ {
+ buffer[ num_read ] = 0;
+ rc = tokenize_buffer( t, buffer, num_read );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "tokenize_buffer() failed" );
+ pos += num_read;
+ }
+ } while ( rc == 0 && num_read > 0 );
+ }
+
+ if ( rc == 0 && t->used > 0 )
+ {
+ rc = add_token_to_argv( t );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "add_token_to_argv() failed" );
+ }
+ free_tokenzr( t );
+ }
+ rc2 = KFileRelease ( my_file );
+ if ( rc2 != 0 )
+ LOGERR( klogInt, rc2, "KFileRelease() failed" );
+ }
+ rc2 = VPathRelease ( vfs_path );
+ if ( rc2 != 0 )
+ LOGERR( klogInt, rc2, "VPathRelease() failed" );
+ }
+ rc2 = VFSManagerRelease ( vfs_mgr );
+ if ( rc2 != 0 )
+ LOGERR( klogInt, rc2, "VFSManagerRelease() failed" );
+ }
+ return rc;
+}
+
+
+rc_t CC Args_tokenize_file_into_argv( const char * filename, int * argc, char *** argv )
+{
+ return tokenize_file_and_progname_into_argv( filename, NULL, argc, argv );
+}
+
+
+rc_t CC Args_tokenize_file_and_progname_into_argv( const char * filename, const char * progname,
+ int * argc, char *** argv )
+{
+ return tokenize_file_and_progname_into_argv( filename, progname, argc, argv );
+}
+
+
+void CC Args_free_token_argv( int argc, char * argv[] )
+{
+ if ( argv != NULL )
+ {
+ int i;
+ for ( i = 0; i < argc; ++i )
+ free( argv[ i ] );
+ free( argv );
+ }
+}
+
+
+static int sized_str_cmp( const char *a, const char *b )
+{
+ size_t asize = string_size ( a );
+ size_t bsize = string_size ( b );
+ return strcase_cmp ( a, asize, b, bsize, ( asize > bsize ) ? asize : bsize );
+}
+
+
+/* get's the filename following a file_option - parameter into the file-name-buffer */
+rc_t CC Args_find_option_in_argv( int argc, char * argv[],
+ const char * option_name,
+ char * option, size_t option_len )
+{
+ rc_t rc = 0;
+ int i, opt_idx;
+
+ if ( option == NULL )
+ return RC( rcRuntime, rcArgv, rcConstructing, rcParam, rcNull );
+
+ option[ 0 ] = 0;
+
+ if ( argv == NULL || argc < 1 )
+ return RC( rcRuntime, rcArgv, rcConstructing, rcSelf, rcNull );
+ if ( option_name == NULL || option_len == 0 )
+ return RC( rcRuntime, rcArgv, rcConstructing, rcParam, rcNull );
+
+ opt_idx = -1;
+ for ( i = 0; i < argc && ( option[ 0 ] == 0 ); ++i )
+ {
+ if ( sized_str_cmp( (const char *)argv[i], option_name ) == 0 )
+ {
+ opt_idx = ( i + 1 );
+ }
+ else if ( i == opt_idx )
+ {
+ string_copy( option, option_len, argv[i], string_size( argv[i] ) );
+ }
+ }
+ if ( option[ 0 ] == 0 )
+ rc = RC( rcRuntime, rcArgv, rcConstructing, rcParam, rcNotFound );
+ return rc;
+}
+
+
+rc_t CC Args_parse_inf_file( Args * args, const char * file_option )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, file_option, &count );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+ else if ( count > 0 )
+ {
+ uint32_t count2 = 0;
+ do
+ {
+ uint32_t idx;
+ for ( idx = count2; idx < count && rc == 0; ++idx )
+ {
+ const char *filename;
+ rc = ArgsOptionValue( args, file_option, idx, &filename );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+ else if ( filename != NULL )
+ {
+ int argc;
+ char ** argv;
+ rc = Args_tokenize_file_into_argv( filename, &argc, &argv );
+ if ( rc == 0 && argv != NULL && argc > 0 )
+ {
+ rc = ArgsParse ( args, argc, argv );
+ Args_free_token_argv( argc, argv );
+ }
+ }
+ }
+ count2 = count;
+ rc = ArgsOptionCount( args, file_option, &count );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+ } while ( rc == 0 && count > count2 );
+ }
+ return rc;
+}
diff --git a/libs/kapp/unix/sysmain.c b/libs/kapp/unix/sysmain.c
index fb247f1..cbeb87e 100644
--- a/libs/kapp/unix/sysmain.c
+++ b/libs/kapp/unix/sysmain.c
@@ -30,6 +30,7 @@
#include <klib/log.h>
#include <klib/debug.h>
#include <klib/status.h>
+#include <klib/report.h>
#include <klib/rc.h>
#include <atomic32.h>
@@ -42,6 +43,10 @@
#include <errno.h>
#include <assert.h>
+#if ! _DEBUGGING && ! defined CATCH_SIGSEGV
+#define CATCH_SIGSEGV 1
+#endif
+
/*--------------------------------------------------------------------------
* Main
*/
@@ -66,6 +71,8 @@ rc_t Quitting ( void )
*/
rc_t SignalQuit ( void )
{
+ ReportSilence ();
+
if ( kill ( 0, SIGTERM ) != 0 ) switch ( errno )
{
case EINVAL:
@@ -134,6 +141,8 @@ void SigQuitHandler ( int sig )
{
const char *msg;
+ ReportSilence ();
+
atomic32_inc ( & quitting );
switch ( sig )
{
@@ -156,6 +165,7 @@ void SigQuitHandler ( int sig )
/* SigSegvHandler
*/
+#if CATCH_SIGSEGV
static
void SigSegvHandler ( int sig )
{
@@ -164,6 +174,7 @@ void SigSegvHandler ( int sig )
abort ();
exit ( 1 );
}
+#endif
/* main
* Unix specific main entrypoint
@@ -179,7 +190,9 @@ int main ( int argc, char *argv [] )
{ SigHupHandler, SIGHUP },
{ SigQuitHandler, SIGINT },
{ SigQuitHandler, SIGQUIT },
+#if CATCH_SIGSEGV
{ SigSegvHandler, SIGSEGV },
+#endif
{ SigQuitHandler, SIGTERM }
};
diff --git a/libs/kapp/win/sysmain.c b/libs/kapp/win/sysmain.c
index 3d48b67..e8f3bcc 100644
--- a/libs/kapp/win/sysmain.c
+++ b/libs/kapp/win/sysmain.c
@@ -107,6 +107,21 @@ rc_t CC SignalNoHup ( void )
return 0;
}
+
+BOOL CC Our_HandlerRoutine( DWORD dwCtrlType )
+{
+ BOOL res = FALSE;
+ switch( dwCtrlType )
+ {
+ case CTRL_C_EVENT : ReportSilence ();
+ atomic32_inc ( & quitting );
+ res = TRUE;
+ break;
+ }
+ return res;
+}
+
+
/* main
* Windows specific main entrypoint
*/
@@ -115,6 +130,8 @@ int main2 ( int argc, char *argv [] )
{
rc_t rc;
+ SetConsoleCtrlHandler( ( PHANDLER_ROUTINE ) Our_HandlerRoutine, TRUE );
+
/* run this guy */
rc = KMane ( argc, argv );
@@ -212,6 +229,7 @@ char *rewrite_arg ( const wchar_t *arg )
return utf8;
}
+
int __cdecl wmain ( int argc, wchar_t *wargv [], wchar_t *envp [] )
{
char **argv;
diff --git a/libs/kdb/Makefile b/libs/kdb/Makefile
index 03f51b2..2b941a9 100644
--- a/libs/kdb/Makefile
+++ b/libs/kdb/Makefile
@@ -43,19 +43,18 @@ include $(TOP)/build/Makefile.env
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(ALL_LIBS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): vers-includes
@ $(MAKE_CMD) $(ILIBDIR)/$@
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): vers-includes
@ $(MAKE_CMD) $(LIBDIR)/$@
.PHONY: all std $(ALL_LIBS) $(ALL_DEFS)
+
#-------------------------------------------------------------------------------
# std
#
@@ -66,6 +65,13 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
@@ -122,6 +128,8 @@ KDB_OBJ = \
$(addsuffix .$(LOBX),$(KDB_SRC))
KDB_LIB = \
+ -dvfs \
+ -dkrypto \
-dkfs \
-dklib
@@ -164,6 +172,8 @@ WKDB_OBJ = \
$(addsuffix .$(LOBX),$(WKDB_SRC))
WKDB_LIB = \
+ -dvfs \
+ -dkrypto \
-dkfs \
-dklib
diff --git a/libs/kdb/btree.c b/libs/kdb/btree.c
index bfaf1f0..f3a11f0 100644
--- a/libs/kdb/btree.c
+++ b/libs/kdb/btree.c
@@ -805,7 +805,9 @@ rc_t KBTreeReadHeader ( KBTreeHdr *hdr, const KFile *f )
if ( eof < sizeof * hdr )
return RC ( rcDB, rcTree, rcConstructing, rcData, rcCorrupt );
- rc = KFileRead ( f, eof - sizeof * hdr, hdr, sizeof * hdr, & num_read );
+ rc = KFileReadAll ( f, eof - sizeof * hdr, hdr, sizeof * hdr, & num_read );
+ if ( rc == 0 && num_read != sizeof * hdr )
+ rc = RC ( rcDB, rcTree, rcConstructing, rcData, rcInsufficient );
if ( rc == 0 )
{
if ( hdr -> endian != eByteOrderTag )
@@ -937,6 +939,8 @@ typedef struct KBTreeBranchNode_v2 KBTreeBranchNode;
#if _DEBUGGING
#define VALIDATE_SEARCH_WINDOW 0
+#endif
+
#if VALIDATE_SEARCH_WINDOW
static
bool validate_search_window(KBTreeSrchWindow *win)
@@ -951,7 +955,7 @@ bool validate_search_window(KBTreeSrchWindow *win)
#else
#define validate_search_window(A) true
#endif
-#endif
+
/* Whack
*/
static
@@ -1092,7 +1096,7 @@ LIB_EXPORT rc_t CC KBTreeMakeRead ( const KBTree **btp,
#if BTREE_KEY2ID
LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
size_t climit, bool write_through, KBTreeKeyType type,
- size_t min_key_size, size_t max_key_size,
+ size_t min_key_size, size_t max_key_size, size_t id_size,
KBTreeCompareFunc cmp )
#else
LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
@@ -1109,9 +1113,7 @@ LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcNull );
else
{
- if ( backing == NULL )
- rc = RC ( rcDB, rcTree, rcConstructing, rcFile, rcNull );
- else if ( type >= kbtLastDefined )
+ if ( type >= kbtLastDefined )
rc = RC ( rcDB, rcTree, rcConstructing, rcType, rcUnrecognized );
else if ( min_key_size == 0 )
rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcInvalid );
@@ -1119,15 +1121,18 @@ LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcExcessive );
else if ( min_key_size > max_key_size )
rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcInconsistent );
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+ else if ( id_size != sizeof ( uint32_t ) )
+ rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcInvalid );
+#endif
else
{
- KBTree *bt = malloc ( sizeof * bt );
+ KBTree *bt = calloc ( 1,sizeof * bt );
if ( bt == NULL )
rc = RC ( rcDB, rcTree, rcConstructing, rcMemory, rcExhausted );
else
{
- rc = KBTreeReadHeader ( & bt -> hdr, backing );
- if ( rc == 0 || GetRCState ( rc ) == rcNotFound )
+ if ( backing == NULL || ( rc = KBTreeReadHeader ( & bt -> hdr, backing )) == 0 || GetRCState ( rc ) == rcNotFound )
{
/* detect empty file */
if ( bt -> hdr . version == 0 )
@@ -1170,7 +1175,7 @@ LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
if ( rc == 0 )
{
- rc = KFileAddRef ( backing );
+ if(backing) rc = KFileAddRef ( backing );
if ( rc == 0 )
{
/* create page file */
@@ -1190,7 +1195,7 @@ LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
return 0;
}
- KFileRelease ( backing );
+ if(backing) KFileRelease ( backing );
}
}
}
@@ -1458,7 +1463,7 @@ rc_t branch_find ( const KBTree *self, const KPage *page,
#if BTREE_KEY2ID
-LIB_EXPORT rc_t CC KBTreeFind ( const KBTree *self, uint32_t *id,
+LIB_EXPORT rc_t CC KBTreeFind ( const KBTree *self, uint64_t *id,
const void *key, size_t key_size )
#else
LIB_EXPORT rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
@@ -1490,12 +1495,20 @@ LIB_EXPORT rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
rc = KPageFileGet ( self -> pgfile, & page, self -> hdr . root >> 1 );
if ( rc == 0 )
{
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+ uint32_t id32;
+#endif
rc = ( ( ( self -> hdr . root & 1 ) == 0 ) ? leaf_find : branch_find )
-#if BTREE_KEY2ID
+#if BTREE_KEY2ID64
( self, page, id, key, key_size );
+#elif BTREE_KEY2ID
+ ( self, page, & id32, key, key_size );
#else
( self, page, val, key, key_size );
#endif
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+ * id = id32;
+#endif
KPageRelease ( page );
}
@@ -2704,7 +2717,7 @@ rc_t branch_entry ( KBTree *self, KBTreeEntryData *pb, KPage *page, KBTreeSplit
#if BTREE_KEY2ID
-LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self, uint32_t *id,
+LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self, uint64_t *id,
bool *was_inserted, const void *key, size_t key_size )
#else
LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
@@ -2741,11 +2754,20 @@ LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
bool leaf;
KPage *page;
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+ /* TEMPORARY
+ until full 64-bit ids are supported
+ */
+ uint32_t id32 = ( uint32_t ) * id;
+#endif
+
/* package the entry params into a block */
KBTreeEntryData pb;
pb . self = self;
-#if BTREE_KEY2ID
+#if BTREE_KEY2ID64
pb . id = id;
+#elif BTREE_KEY2ID
+ pb . id = & id32;
#else
pb . val = val;
pb . alloc_size = alloc_size;
@@ -2779,6 +2801,9 @@ LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
leaf_entry ( self, & pb, page, & split ):
branch_entry ( self, & pb, page, & split );
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+ * id = id32;
+#endif
if ( rc != 0 )
{
/* detect split */
@@ -2806,7 +2831,7 @@ LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
node -> ltrans = split . left;
node -> ord [ 0 ] . trans = split . right;
node -> count = 1;
- assert ( split . left < 10000 && split . right < 10000);
+/* assert ( split . left < 10000 && split . right < 10000); */
/*** init search windows ***/
q=(split.ksize>0)? *(uint8_t*)split.key:0;
node -> win[q].lower = 0;
@@ -2867,7 +2892,7 @@ LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
#if BTREE_KEY2ID
static
rc_t invoke_foreach_func ( const KBTree *self, const void *cnode, const void *ordp,
- void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data )
+ void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data )
#else
static
rc_t invoke_foreach_func ( const KBTree *self, const void *cnode, const void *ordp,
@@ -2903,8 +2928,8 @@ rc_t invoke_foreach_func ( const KBTree *self, const void *cnode, const void *or
#if BTREE_KEY2ID
static
-rc_t leaf_foreach ( const KBTree *self, bool reverse, uint32_t nid,
- void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data )
+rc_t leaf_foreach ( const KBTree *self, bool reverse, uint64_t nid,
+ void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data )
#else
static
rc_t leaf_foreach ( const KBTree *self, bool reverse, uint32_t nid,
@@ -2942,8 +2967,8 @@ rc_t leaf_foreach ( const KBTree *self, bool reverse, uint32_t nid,
#if BTREE_KEY2ID
static
-rc_t branch_foreach ( const KBTree *self, bool reverse, uint32_t nid,
- void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data )
+rc_t branch_foreach ( const KBTree *self, bool reverse, uint64_t nid,
+ void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data )
#else
static
rc_t branch_foreach ( const KBTree *self, bool reverse, uint32_t nid,
@@ -3007,7 +3032,7 @@ rc_t branch_foreach ( const KBTree *self, bool reverse, uint32_t nid,
#if BTREE_KEY2ID
LIB_EXPORT rc_t CC KBTreeForEach ( const KBTree *self, bool reverse,
- void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data )
+ void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data )
#else
LIB_EXPORT rc_t CC KBTreeForEach ( const KBTree *self, bool reverse,
void ( CC * f ) ( const void *key, size_t key_size, KBTreeValue *val, void *data ), void *data )
diff --git a/libs/kdb/coldata.c b/libs/kdb/coldata.c
index 427cfc3..8434b7f 100644
--- a/libs/kdb/coldata.c
+++ b/libs/kdb/coldata.c
@@ -39,7 +39,7 @@
#include <errno.h>
-#define DATA_READ_FILE_BUFFER 32 * 1024
+#define DATA_READ_FILE_BUFFER 32* 1024
/*--------------------------------------------------------------------------
diff --git a/libs/kdb/colidx0.c b/libs/kdb/colidx0.c
index b0caf74..b0f2653 100644
--- a/libs/kdb/colidx0.c
+++ b/libs/kdb/colidx0.c
@@ -171,7 +171,7 @@ rc_t KColumnIdx0Init_v1 ( KColumnIdx0 *self, const KFile *f, bool bswap )
{
uint32_t count;
- rc = KFileRead ( f, pos,
+ rc = KFileReadAll ( f, pos,
buffer, 2048 * sizeof * buffer, & num_read );
if ( rc != 0 )
break;
@@ -217,7 +217,7 @@ rc_t KColumnIdx0Init ( KColumnIdx0 *self, const KFile *f, uint32_t total, bool b
if ( count > 2048 )
count = 2048;
- rc = KFileRead ( f, i * sizeof * buffer,
+ rc = KFileReadAll ( f, i * sizeof * buffer,
buffer, count * sizeof * buffer, & num_read );
if ( rc != 0 )
break;
diff --git a/libs/kdb/colidx1.c b/libs/kdb/colidx1.c
index 66edaef..83439de 100644
--- a/libs/kdb/colidx1.c
+++ b/libs/kdb/colidx1.c
@@ -145,13 +145,13 @@ rc_t KColumnIdx1Init ( KColumnIdx1 *self, uint32_t off, uint32_t count )
{
size_t num_read;
uint32_t i, cnt;
- for ( rc = 0, i = 0; i < count; off += (uint32_t)num_read, i += cnt )
+ for ( rc = 0, i = 0; i < count; off += ( uint32_t ) num_read, i += cnt )
{
cnt = count - i;
if ( cnt > 2048 )
cnt = 2048;
- rc = KFileRead ( self -> f, off,
+ rc = KFileReadAll ( self -> f, off,
buffer, cnt * sizeof * buffer, & num_read );
if ( rc != 0 )
break;
@@ -195,7 +195,7 @@ rc_t KColumnIdx1OpenRead ( KColumnIdx1 *self, const KDirectory *dir,
{
KColumnHdr hdr;
size_t num_bytes;
- rc = KFileRead ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
+ rc = KFileReadAll ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
if ( rc == 0 )
{
if ( num_bytes == 0 )
@@ -248,7 +248,7 @@ rc_t KColumnIdx1OpenRead ( KColumnIdx1 *self, const KDirectory *dir,
if ( rc == 0 )
{
off = sizeof hdr . dad;
- rc = KFileRead ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
+ rc = KFileReadAll ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
if ( rc == 0 )
{
if ( num_bytes < KColumnHdrOffset ( hdr, v2 ) )
diff --git a/libs/kdb/colidx2-priv.h b/libs/kdb/colidx2-priv.h
index 2319306..2e28a65 100644
--- a/libs/kdb/colidx2-priv.h
+++ b/libs/kdb/colidx2-priv.h
@@ -39,13 +39,8 @@
#include <klib/container.h>
#endif
-#ifndef IDX2_SINGLE_PAGE_CACHE
-#define IDX2_SINGLE_PAGE_CACHE 1
-#endif
-
-#if IDX2_SINGLE_PAGE_CACHE
+#include <klib/data-buffer.h>
#include "idxblk-priv.h"
-#endif
#ifdef __cplusplus
extern "C" {
@@ -56,6 +51,16 @@ extern "C" {
* KColumnIdx2
* level 2 index
*/
+
+typedef struct KColumnIdx2BlockCache
+{
+ /* single page cache */
+ void *block;
+ int64_t start_id;
+ size_t count;
+ KColIdxBlock iblk;
+} KColumnIdx2BlockCache;
+
typedef struct KColumnIdx2 KColumnIdx2;
struct KColumnIdx2
{
@@ -65,15 +70,9 @@ struct KColumnIdx2
/* idx2 itself */
struct KFile const *f;
-#if ! IDX2_SINGLE_PAGE_CACHE
- size_t align1;
-#else
- /* single page cache */
- void *block;
- int64_t start_id;
- size_t count;
- KColIdxBlock iblk;
-#endif
+ /* full caching mechanism */
+ KDataBuffer cstorage;
+ uint32_t last;
};
/* Open
diff --git a/libs/kdb/colidx2.c b/libs/kdb/colidx2.c
index e5cf946..59743c3 100644
--- a/libs/kdb/colidx2.c
+++ b/libs/kdb/colidx2.c
@@ -39,7 +39,7 @@
#include <byteswap.h>
-#define IDX2_READ_FILE_BUFFER 32 * 1024
+#define IDX2_READ_FILE_BUFFER 64 * 1024
/*--------------------------------------------------------------------------
@@ -54,10 +54,11 @@ rc_t KColumnIdx2Init ( KColumnIdx2 *self, uint64_t idx2_eof )
{
rc_t rc;
-#if IDX2_SINGLE_PAGE_CACHE
- self -> block = NULL;
+#if 0
+ memset(&self->cstorage,0,sizeof(self->cstorage));
+ self->cstorage.elem_bits = sizeof(KColumnIdx2BlockCache)*8;
+ self->last = 0;
#endif
-
rc = KFileSize ( self -> f, & self -> eof );
if ( rc == 0 )
{
@@ -69,8 +70,9 @@ rc_t KColumnIdx2Init ( KColumnIdx2 *self, uint64_t idx2_eof )
return 0;
}
}
-
+
KFileRelease ( self -> f );
+
self -> f = NULL;
return rc;
}
@@ -82,10 +84,20 @@ rc_t KColumnIdx2OpenRead ( KColumnIdx2 *self,
{
rc_t rc;
+ rc = KDataBufferMake ( & self -> cstorage, sizeof ( KColumnIdx2BlockCache ) * 8, 0 );
+ if ( rc != 0 )
+ {
+ memset ( self, 0, sizeof * self );
+ return rc;
+ }
+
+ self -> last = 0;
+
if ( eof == 0 )
{
-#if IDX2_SINGLE_PAGE_CACHE
- self -> block = NULL;
+#if 0
+ KDataBufferResize(&self->cstorage,0);
+ self -> last = 0;
#endif
self -> eof = 0;
self -> f = NULL;
@@ -122,11 +134,13 @@ rc_t KColumnIdx2Whack ( KColumnIdx2 *self )
rc_t rc = KFileRelease ( self -> f );
if ( rc == 0 )
{
+ int i;
+ KColumnIdx2BlockCache * cache=(KColumnIdx2BlockCache *)self -> cstorage.base;
self -> f = NULL;
-#if IDX2_SINGLE_PAGE_CACHE
- free ( self -> block );
- self -> block = NULL;
-#endif
+ for(i=0;i<self->cstorage.elem_count;i++){
+ free(cache[i].block);
+ }
+ KDataBufferWhack(&self->cstorage);
}
return rc;
}
@@ -162,25 +176,47 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
int64_t first, int64_t upper, bool bswap )
{
rc_t rc;
-
uint32_t count;
size_t block_size, orig;
+ uint32_t slot=0;
-#if ! IDX2_SINGLE_PAGE_CACHE
- char buffer [ 1024 ];
- void *block = buffer;
-#else
void *block;
- /* check within single page cache */
- if ( self -> block != NULL && self -> start_id == bloc -> start_id )
- {
- rc = KColIdxBlockLocateBlob ( & self -> iblk,
- loc, bloc, ( uint32_t ) self -> count, first, upper );
- if ( rc == 0 )
- return 0;
+ /* check within page cache */
+ if(self -> cstorage.elem_count > 0){
+ KColumnIdx2BlockCache * cache=(KColumnIdx2BlockCache *)self -> cstorage.base;
+ assert(self->last < self->cstorage.elem_count);
+ if(bloc -> start_id == cache[self->last].start_id){
+ rc = KColIdxBlockLocateBlob ( & cache[self->last].iblk, loc, bloc, ( uint32_t ) cache[self->last].count, first, upper );
+ if ( rc == 0) return 0;
+ } else {
+ uint32_t lower,upper,pivot;
+ if(bloc -> start_id > cache[self->last].start_id){
+ lower=self->last+1;
+ upper=self->cstorage.elem_count;
+ } else {
+ lower=0;
+ upper = self->last;
+ }
+ while(lower < upper){
+ pivot = (lower + upper) / 2;
+ if(bloc -> start_id == cache[pivot].start_id){
+ KColumnIdx2 * nc_self=(KColumnIdx2 *)self;
+ nc_self->last = pivot;
+ rc = KColIdxBlockLocateBlob ( & cache[self->last].iblk, loc, bloc, ( uint32_t ) cache[self->last].count, first, upper );
+ if ( rc == 0) return 0;
+ goto BSEARCH_DONE;
+ } else if(bloc -> start_id < cache[pivot].start_id){
+ upper=pivot;
+ } else {
+ lower =pivot+1;
+ }
+ }
+ assert(lower == upper );
+ slot = upper;
+ }
}
-#endif
+BSEARCH_DONE:
/* file may be empty or non-existent */
if ( self -> eof == 0 )
@@ -198,16 +234,13 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
block_size = KColBlockLocAllocSize ( bloc, orig, count );
/* allocate a block */
-#if ! IDX2_SINGLE_PAGE_CACHE
- if ( block_size > sizeof buffer )
-#endif
block = malloc ( block_size );
if ( block == NULL )
rc = RC ( rcDB, rcColumn, rcSelecting, rcMemory, rcExhausted );
else
{
size_t num_read;
- rc = KFileRead ( self -> f, bloc -> pg, block, orig, & num_read );
+ rc = KFileReadAll ( self -> f, bloc -> pg, block, orig, & num_read );
if ( rc == 0 )
{
if ( num_read != orig )
@@ -219,25 +252,26 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
if ( rc == 0 )
{
rc = KColIdxBlockLocateBlob ( & iblk,
- loc, bloc, count, first, upper );
-#if IDX2_SINGLE_PAGE_CACHE
+ loc, bloc, count, first, upper );
if ( rc == 0 )
{
- free ( self -> block );
- ( ( KColumnIdx2* ) self ) -> block = block;
- ( ( KColumnIdx2* ) self ) -> start_id = bloc -> start_id;
- ( ( KColumnIdx2* ) self ) -> count = count;
- ( ( KColumnIdx2* ) self ) -> iblk = iblk;
+ KColumnIdx2BlockCache * cache;
+ KDataBufferResize(&((KColumnIdx2 *)self)->cstorage,self->cstorage.elem_count+1);
+ cache=(KColumnIdx2BlockCache *)self -> cstorage.base;
+ if(slot < self->cstorage.elem_count -1){ /** not adding to the end **/
+ memmove(cache+slot+1,cache+slot,sizeof(*cache)*(self->cstorage.elem_count - slot - 1));
+ }
+ cache += slot;
+ cache -> block = block;
+ cache -> start_id = bloc -> start_id;
+ cache -> count = count;
+ cache -> iblk = iblk;
return 0;
}
-#endif
}
}
}
-
-#if ! IDX2_SINGLE_PAGE_CACHE
- if ( block != buffer )
-#endif
+
free ( block );
}
diff --git a/libs/kdb/column-cc.c b/libs/kdb/column-cc.c
index 5abc732..c283d4b 100644
--- a/libs/kdb/column-cc.c
+++ b/libs/kdb/column-cc.c
@@ -75,6 +75,24 @@ rc_t CC col_check_report(const CCReportInfoBlock *nfo, void *Ctx)
}
static
+rc_t CC CheckExists(const KDirectory *dir, uint32_t type, const char *name, void *Ctx)
+{
+ struct col_check_ctx *ctx = Ctx;
+
+ if ((type & ~kptAlias) == kptFile) {
+ if (strcmp(name, "data") == 0)
+ ctx->found |= 1;
+ else if (strcmp(name, "idx0") == 0)
+ ctx->found |= 2;
+ else if (strcmp(name, "idx1") == 0)
+ ctx->found |= 4;
+ else if (strcmp(name, "idx2") == 0)
+ ctx->found |= 8;
+ }
+ return 0;
+}
+
+static
rc_t KColumnCheckMD5(const KColumn *self,
CCReportInfoBlock *nfo,
CCReportFunc report, void *ctx)
@@ -90,11 +108,30 @@ rc_t KColumnCheckMD5(const KColumn *self,
rc = DirectoryCheckMD5(self->dir, "md5", nfo, col_check_report, &local_ctx);
if (rc == 0 && !local_ctx.failed && local_ctx.found != 0x0F) {
+ local_ctx.found = 0;
+ KDirectoryVisit(self->dir, false, CheckExists, &local_ctx, NULL);
nfo->type = ccrpt_Done;
- nfo->info.done.rc = RC(rcDB, rcColumn, rcValidating, rcFile, rcNotFound);
- nfo->info.done.mesg = "Some files are missing";
+ if (local_ctx.found == 0x0F) {
+ nfo->info.done.rc = RC(rcDB, rcColumn, rcValidating, rcChecksum, rcNotFound);
+ nfo->info.done.mesg = "Some files are missing checksums";
+ }
+ else {
+ nfo->info.done.rc = RC(rcDB, rcColumn, rcValidating, rcFile, rcNotFound);
+ nfo->info.done.mesg = "Some files are missing";
+ }
rc = report(nfo, ctx);
}
+ else if (rc == 0) {
+ nfo->type = ccrpt_Done;
+ nfo->info.done.rc = 0;
+ nfo->info.done.mesg = "md5 ok";
+ rc = report(nfo, ctx);
+ }
+ else {
+ nfo->type = ccrpt_Done;
+ rc = report(nfo, ctx);
+ }
+
return rc;
}
@@ -151,8 +188,9 @@ rc_t KColumnCheckBlobs(const KColumn *self,
row += count;
}
nfo->info.done.rc = 0;
- nfo->info.done.mesg = NULL;
+ nfo->info.done.mesg = "checksums ok";
nfo->type = ccrpt_Done;
+ rc = report(nfo, ctx);
return rc;
}
@@ -161,15 +199,26 @@ rc_t CC KColumnConsistencyCheck(const KColumn *self,
uint32_t level, CCReportInfoBlock *nfo, CCReportFunc report, void *ctx )
{
rc_t rc = 0;
-
+
+ bool indexOnly = level & CC_INDEX_ONLY;
+ if (indexOnly) {
+ level &= ~CC_INDEX_ONLY;
+ }
+
if (KDirectoryPathType(self->dir, "md5") != kptNotFound)
- rc = KColumnCheckMD5(self, nfo, report, ctx);
- else if (level == 0)
- level = 1;
+ rc = level == 0 ? KColumnCheckMD5(self, nfo, report, ctx) : 0;
+ else {
+ nfo->type = ccrpt_Done;
+ nfo->info.done.mesg = "missing md5 file";
+ nfo->info.done.rc = 0; /* RC(rcDB, rcColumn, rcValidating, rcFile, rcNotFound); */
+
+ rc = report(nfo, ctx);
+
+ if (level == 0)
+ level = 1;
+ }
if (rc == 0 && level > 0)
rc = KColumnCheckBlobs(self, nfo, report, ctx);
- if (rc == 0 && nfo->info.done.rc != 0)
- rc = report(nfo, ctx);
return rc;
}
diff --git a/libs/kdb/column.c b/libs/kdb/column.c
index f3dd247..c5c0192 100644
--- a/libs/kdb/column.c
+++ b/libs/kdb/column.c
@@ -33,6 +33,7 @@
#include <kdb/kdb-priv.h>
#include <klib/checksum.h>
#include <klib/rc.h>
+#include <klib/printf.h>
#include <atomic32.h>
#include <sysalloc.h>
#undef KONST
@@ -235,36 +236,41 @@ rc_t KColumnMakeRead ( KColumn **colp, const KDirectory *dir, const char *path )
*/
static
rc_t KDBManagerVOpenColumnReadInt ( const KDBManager *self,
- const KColumn **colp, const KDirectory *wd,
+ const KColumn **colp, const KDirectory *wd, bool try_srapath,
const char *path, va_list args )
{
char colpath [ 4096 ];
- rc_t rc = KDirectoryVResolvePath ( wd, 1,
- colpath, sizeof colpath, path, args );
+ rc_t rc;
+ size_t z;
+
+/* rc = KDirectoryVResolvePath ( wd, 1,
+ colpath, sizeof colpath, path, args ); */
+ rc = string_vprintf( colpath, sizeof colpath, &z, path, args );
if ( rc == 0 )
{
KColumn *col;
const KDirectory *dir;
/* open table directory */
- rc = KDBOpenPathTypeRead ( wd, colpath, &dir, kptColumn, NULL );
+ rc = KDBOpenPathTypeRead ( self, wd, colpath, &dir, kptColumn, NULL, try_srapath );
if ( rc == 0 )
{
rc = KColumnMakeRead ( & col, dir, colpath );
- if ( rc != 0 )
- KDirectoryRelease ( dir );
- else
+ if ( rc == 0 )
{
col -> mgr = KDBManagerAttach ( self );
* colp = col;
return 0;
}
+
+ KDirectoryRelease ( dir );
}
}
return rc;
}
+
LIB_EXPORT rc_t CC KDBManagerOpenColumnRead ( const KDBManager *self,
const KColumn **col, const char *path, ... )
{
@@ -278,6 +284,7 @@ LIB_EXPORT rc_t CC KDBManagerOpenColumnRead ( const KDBManager *self,
return rc;
}
+
LIB_EXPORT rc_t CC KDBManagerVOpenColumnRead ( const KDBManager *self,
const KColumn **col, const char *path, va_list args )
{
@@ -290,9 +297,10 @@ LIB_EXPORT rc_t CC KDBManagerVOpenColumnRead ( const KDBManager *self,
return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
return KDBManagerVOpenColumnReadInt
- ( self, col, self -> wd, path, args );
+ ( self, col, self -> wd, true, path, args );
}
+
LIB_EXPORT rc_t CC KTableOpenColumnRead ( const KTable *self,
const KColumn **col, const char *path, ... )
{
@@ -325,7 +333,7 @@ LIB_EXPORT rc_t CC KTableVOpenColumnRead ( const KTable *self,
if ( rc == 0 )
{
rc = KDBManagerVOpenColumnReadInt ( self -> mgr,
- colp, self -> dir, path, NULL );
+ colp, self -> dir, false, path, NULL );
if ( rc == 0 )
{
KColumn *col = ( KColumn* ) * colp;
diff --git a/libs/kdb/database-cc.c b/libs/kdb/database-cc.c
index 35cbd9e..a0e0b1c 100644
--- a/libs/kdb/database-cc.c
+++ b/libs/kdb/database-cc.c
@@ -57,119 +57,136 @@
#undef index
-static
-rc_t KDatabaseCheckMD5 ( const KDatabase *self, CCReportFunc report, void *ctx )
+static void KDatabaseGetName(KDatabase const *self, char const **rslt)
{
char *sep;
+
+ *rslt = self->path;
+ sep = strrchr(self->path, '/');
+ if (sep != NULL)
+ *rslt = sep + 1;
+}
+static
+rc_t KDatabaseCheckMD5 (const KDatabase *self, CCReportFunc report, void *ctx)
+{
CCReportInfoBlock info;
- memset ( & info, 0, sizeof info );
+ memset (& info, 0, sizeof info);
- info . objType = kptDatabase;
- info . objName = self -> path;
- sep = strrchr ( self -> path, '/' );
- if ( sep != NULL )
- info.objName = sep + 1;
+ info.objType = kptDatabase;
+ KDatabaseGetName(self, &info.objName);
- return DirectoryCheckMD5 ( self -> dir, "md5", & info, report, ctx );
+ return DirectoryCheckMD5 (self -> dir, "md5", & info, report, ctx);
}
static
-rc_t KDatabaseCheckTables ( const KDatabase *self, int level, CCReportFunc report, void *ctx )
+rc_t KDatabaseCheckTables (const KDatabase *self, uint32_t depth, int level, CCReportFunc report, void *ctx)
{
uint32_t n;
-
+
KNamelist *list;
- rc_t rc = KDatabaseListTbl ( self, & list );
- if ( rc != 0 )
+ rc_t rc = KDatabaseListTbl (self, & list);
+ if (rc != 0)
return rc;
-
- rc = KNamelistCount ( list, & n );
- if ( rc == 0 )
+
+ rc = KNamelistCount (list, & n);
+ if (rc == 0)
{
- uint32_t idx;
- for ( idx = 0; idx < n && rc == 0; ++ idx )
+ CCReportInfoBlock nfo;
+ memset (& nfo, 0, sizeof nfo);
+ nfo.objType = kptTable;
+
+ for (nfo.objId = 0; rc == 0 && nfo.objId != (int) n; ++ nfo.objId)
{
- const char *tblname;
- rc = KNamelistGet ( list, idx, & tblname );
- if ( rc == 0 )
+ rc = KNamelistGet (list, nfo.objId, &nfo.objName);
+ if (rc == 0)
{
const KTable *tbl;
- rc = KDatabaseOpenTableRead ( self, & tbl, tblname );
- if ( rc == 0 )
+ nfo.type = ccrpt_Visit;
+ nfo.info.visit.depth = depth + 1;
+ rc = report(&nfo, ctx); if (rc) break;
+
+ rc = KDatabaseOpenTableRead (self, & tbl, nfo.objName);
+ if (rc == 0)
{
- rc = KTableConsistencyCheck ( tbl, level, report, ctx );
- KTableRelease ( tbl );
+ rc = KTableConsistencyCheck (tbl, depth + 1, level, report,
+ ctx, SRA_PLATFORM_UNDEFINED);
+ KTableRelease (tbl);
}
}
}
}
- KNamelistRelease(list);
+ KNamelistRelease (list);
return rc;
}
static
-rc_t KDatabaseCheckIndexMD5 ( const KDirectory *dir,
- CCReportInfoBlock *nfo, CCReportFunc report, void *ctx )
+rc_t KDatabaseCheckIndexMD5 (const KDirectory *dir,
+ CCReportInfoBlock *nfo, CCReportFunc report, void *ctx)
{
char md5 [ 4100 ];
- snprintf ( md5, sizeof md5, "%s.md5", nfo -> objName );
- return DirectoryCheckMD5 ( dir, md5, nfo, report, ctx );
+ snprintf (md5, sizeof md5, "%s.md5", nfo -> objName);
+ return DirectoryCheckMD5 (dir, md5, nfo, report, ctx);
}
static
-const KDirectory *KDatabaseFindIndexDir ( const KDatabase *self )
+const KDirectory *KDatabaseFindIndexDir (const KDatabase *self)
{
const KDirectory *idxDir;
- rc_t rc = KDirectoryOpenDirRead ( self -> dir, & idxDir, false, "idx" );
- if ( rc == 0 )
+ rc_t rc = KDirectoryOpenDirRead (self -> dir, & idxDir, false, "idx");
+ if (rc == 0)
return idxDir;
return NULL;
}
static
-rc_t KDatabaseCheckIndices ( const KDatabase *self, uint32_t level, CCReportFunc report, void *ctx)
+rc_t KDatabaseCheckIndices (const KDatabase *self, uint32_t depth, uint32_t level, CCReportFunc report, void *ctx)
{
uint32_t n;
KNamelist *list;
- rc_t rc = KDatabaseListIdx ( self, & list );
- if ( rc != 0 )
+ rc_t rc = KDatabaseListIdx (self, & list);
+ if (rc != 0)
{
- if ( GetRCState ( rc ) == rcNotFound )
+ if (GetRCState (rc) == rcNotFound)
return 0;
return rc;
}
- rc = KNamelistCount ( list, & n );
- if ( rc == 0 )
+/* TEST assert(0); */
+ rc = KNamelistCount (list, & n);
+ if (rc == 0)
{
- const KDirectory *idxDir = KDatabaseFindIndexDir ( self );
- if ( idxDir == NULL )
- rc = RC ( rcDB, rcDatabase, rcValidating, rcDirectory, rcNull );
+ const KDirectory *idxDir = KDatabaseFindIndexDir (self);
+ if (idxDir == NULL)
+ rc = RC (rcDB, rcDatabase, rcValidating, rcDirectory, rcNull);
else
{
CCReportInfoBlock nfo;
- memset ( & nfo, 0, sizeof nfo );
- nfo . objType = kptIndex;
+ memset (& nfo, 0, sizeof nfo);
+ nfo.objType = kptIndex;
- for ( nfo . objId = 0; rc == 0 && nfo . objId != (int) n; ++ nfo . objId )
+ for (nfo.objId = 0; rc == 0 && nfo.objId != (int) n; ++ nfo.objId)
{
rc = KNamelistGet(list, nfo.objId, &nfo.objName);
- if ( rc != 0 )
+ if (rc != 0)
break;
- rc = KDatabaseCheckIndexMD5 ( idxDir, &nfo, report, ctx );
- if ( rc == 0 && level > 0 )
+ nfo.type = ccrpt_Visit;
+ nfo.info.visit.depth = depth + 1;
+ rc = report(&nfo, ctx); if (rc) break;
+
+ rc = KDatabaseCheckIndexMD5 (idxDir, &nfo, report, ctx);
+ if (rc == 0 && level > 0)
{
const KIndex *idx;
- rc = KDatabaseOpenIndexRead ( self, &idx, nfo . objName );
- if ( rc != 0 )
+ rc = KDatabaseOpenIndexRead (self, &idx, nfo.objName);
+ if (rc != 0)
{
nfo.type = ccrpt_Done;
nfo.info.done.rc = rc;
@@ -185,7 +202,7 @@ rc_t KDatabaseCheckIndices ( const KDatabase *self, uint32_t level, CCReportFunc
&nfo.info.index.num_rows,
&nfo.info.index.num_holes);
KIndexRelease(idx);
- if ( rc != 0 )
+ if (rc != 0)
{
nfo.type = ccrpt_Done;
nfo.info.done.rc = rc;
@@ -193,78 +210,129 @@ rc_t KDatabaseCheckIndices ( const KDatabase *self, uint32_t level, CCReportFunc
}
}
- rc = report ( & nfo, ctx );
+ rc = report (& nfo, ctx);
}
}
- KDirectoryRelease ( idxDir );
+ KDirectoryRelease (idxDir);
}
}
- KNamelistRelease ( list );
+ KNamelistRelease (list);
return rc;
}
static
-rc_t KDatabaseCheckDatabases ( const KDatabase *self, int level, CCReportFunc report, void *ctx )
+rc_t KDatabaseCheckDatabases (const KDatabase *self, uint32_t depth, int level, CCReportFunc report, void *ctx)
{
uint32_t n;
KNamelist *list;
- rc_t rc = KDatabaseListDB ( self, & list );
- if ( rc != 0 )
+ rc_t rc = KDatabaseListDB (self, & list);
+ if (rc != 0)
{
- if ( GetRCState ( rc ) == rcNotFound )
+ if (GetRCState (rc) == rcNotFound)
return 0;
return rc;
}
- rc = KNamelistCount ( list, & n );
- if ( rc == 0 )
+ rc = KNamelistCount (list, & n);
+ if (rc == 0)
{
- uint32_t idx;
+ CCReportInfoBlock nfo;
+ memset (& nfo, 0, sizeof nfo);
+ nfo.objType = kptDatabase;
- for ( idx = 0; idx < n && rc == 0; ++ idx )
+ for (nfo.objId = 0; rc == 0 && nfo.objId != (int) n; ++ nfo.objId)
{
- const char *dbname;
- rc = KNamelistGet ( list, idx, & dbname );
- if ( rc == 0 )
+ rc = KNamelistGet (list, nfo.objId, &nfo.objName);
+ if (rc == 0)
{
const KDatabase *db;
- rc = KDatabaseOpenDBRead ( self, & db, dbname );
- if ( rc == 0 )
+
+ nfo.type = ccrpt_Visit;
+ nfo.info.visit.depth = depth + 1;
+ rc = report(&nfo, ctx); if (rc) break;
+
+ rc = KDatabaseOpenDBRead (self, & db, nfo.objName);
+ if (rc == 0)
{
- rc = KDatabaseConsistencyCheck ( db, level, report, ctx );
- KDatabaseRelease ( db );
+ rc = KDatabaseConsistencyCheck (db, depth + 1, level, report, ctx);
+ KDatabaseRelease (db);
}
}
}
}
- KNamelistRelease ( list );
+ KNamelistRelease (list);
return rc;
}
LIB_EXPORT
-rc_t CC KDatabaseConsistencyCheck ( const KDatabase *self,
- uint32_t level, CCReportFunc report, void *ctx )
+rc_t CC KDatabaseConsistencyCheck (const KDatabase *self,
+ uint32_t depth, uint32_t level, CCReportFunc report, void *ctx)
{
rc_t rc = 0;
+ uint32_t type;
+
+ bool indexOnly = level & CC_INDEX_ONLY;
+ if (indexOnly) {
+ level &= ~CC_INDEX_ONLY;
+ }
+
+ if (self == NULL)
+ return RC (rcDB, rcDatabase, rcValidating, rcSelf, rcNull);
+
+ if (depth == 0) {
+ CCReportInfoBlock info;
+
+ KDatabaseGetName(self, &info.objName);
+ info.objId = 0;
+ info.objType = kptDatabase;
+ info.type = ccrpt_Visit;
+ info.info.visit.depth = 0;
+
+ rc = report(&info, ctx);
+ if (rc) return rc;
+ }
- if ( self == NULL )
- return RC ( rcDB, rcDatabase, rcValidating, rcSelf, rcNull );
+ type = KDirectoryPathType(self->dir, "md5");
+ if (type == kptZombieFile) {
+ CCReportInfoBlock info;
+
+ KDatabaseGetName(self, &info.objName);
+ info.objId = 0;
+ info.objType = kptTable;
+ info.type = ccrpt_Done;
+ info.info.done.mesg = "Database may be truncated";
+ info.info.done.rc = 0;
+
+ rc = report(&info, ctx);
+ }
+ else if (type != kptNotFound)
+ rc = KDatabaseCheckMD5 (self, report, ctx);
+ else {
+ CCReportInfoBlock info;
+
+ KDatabaseGetName(self, &info.objName);
+ info.objId = 0;
+ info.objType = kptDatabase;
+ info.type = ccrpt_Done;
+ info.info.done.mesg = "no md5 file";
+ info.info.done.rc = 0;
+
+ rc = report(&info, ctx);
+ }
- if (KDirectoryPathType(self->dir, "md5") != kptNotFound)
- rc = KDatabaseCheckMD5 ( self, report, ctx );
- if ( rc == 0 )
- rc = KDatabaseCheckTables ( self, level, report, ctx );
+ if (rc == 0)
+ rc = KDatabaseCheckTables (self, depth, level, report, ctx);
- if ( rc == 0 )
- rc = KDatabaseCheckIndices ( self, level, report, ctx );
+ if (rc == 0)
+ rc = KDatabaseCheckIndices (self, depth, level, report, ctx);
- if ( rc == 0 )
- rc = KDatabaseCheckDatabases ( self, level, report, ctx );
+ if (rc == 0)
+ rc = KDatabaseCheckDatabases (self, depth, level, report, ctx);
return rc;
}
diff --git a/libs/kdb/database-cmn.c b/libs/kdb/database-cmn.c
index 82d71ea..b99e497 100644
--- a/libs/kdb/database-cmn.c
+++ b/libs/kdb/database-cmn.c
@@ -214,7 +214,7 @@ rc_t KDBManagerVOpenDBReadInt ( const KDBManager *self,
const KDirectory *dir;
/* open the directory if its a database */
- rc = KDBOpenPathTypeRead ( wd, dbpath, &dir, kptDatabase, NULL );
+ rc = KDBOpenPathTypeRead ( wd, dbpath, &dir, kptDatabase, NULL );
if ( rc == 0 )
{
/* allocate a new guy */
diff --git a/libs/kdb/database.c b/libs/kdb/database.c
index 721e0e1..275baa1 100644
--- a/libs/kdb/database.c
+++ b/libs/kdb/database.c
@@ -32,11 +32,15 @@
#undef KONST
#include <klib/namelist.h>
+#include <klib/log.h>
#include <klib/rc.h>
+#include <klib/printf.h>
+#include <os-native.h>
#include <sysalloc.h>
#include <limits.h>
#include <stdlib.h>
+#include <stdio.h>
#include <string.h>
#include <assert.h>
@@ -46,6 +50,22 @@
* connection to a database within file system
*/
+/* GetPath
+ * return the absolute path to DB
+ */
+LIB_EXPORT rc_t CC KDatabaseGetPath ( KDatabase const *self,
+ const char **path )
+{
+ if ( self == NULL )
+ return RC ( rcDB, rcDatabase, rcAccessing, rcSelf, rcNull );
+ if ( path == NULL )
+ return RC ( rcDB, rcDatabase, rcAccessing, rcParam, rcNull );
+
+ *path = self->path;
+
+ return 0;
+}
+
/* Whack
*/
static
@@ -186,23 +206,30 @@ rc_t KDatabaseMake ( KDatabase **dbp, const KDirectory *dir, const char *path )
* wd-native character set giving path to database
*/
static
-rc_t KDBManagerVOpenDBReadInt ( const KDBManager *self,
- const KDatabase **dbp, const KDirectory *wd,
- const char *path, va_list args )
+rc_t KDBManagerVOpenDBReadInt ( const KDBManager *self, const KDatabase **dbp,
+ const KDirectory *wd, bool try_srapath,
+ const char *path, va_list args )
{
- /* generate absolute path to db */
+ rc_t rc;
+
+ /* MUST use vsnprintf because the documented behavior of "path"
+ is that of stdc library's printf, not vdb printf */
char dbpath [ 4096 ];
- rc_t rc = KDirectoryVResolvePath ( wd, true,
- dbpath, sizeof dbpath, path, args );
- if ( rc == 0 )
+ int z = ( args == NULL ) ?
+ snprintf ( dbpath, sizeof dbpath, path ):
+ vsnprintf ( dbpath, sizeof dbpath, path, args );
+ if ( z < 0 || ( size_t ) z >= sizeof dbpath )
+ rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcExcessive );
+ else
{
- KDatabase *db;
const KDirectory *dir;
/* open the directory if its a database */
- rc = KDBOpenPathTypeRead ( wd, dbpath, &dir, kptDatabase, NULL );
+ rc = KDBOpenPathTypeRead ( self, wd, dbpath, &dir, kptDatabase, NULL, try_srapath );
if ( rc == 0 )
{
+ KDatabase *db;
+
/* allocate a new guy */
rc = KDatabaseMake ( & db, dir, dbpath );
if ( rc == 0 )
@@ -215,7 +242,6 @@ rc_t KDBManagerVOpenDBReadInt ( const KDBManager *self,
KDirectoryRelease ( dir );
}
}
-
return rc;
}
@@ -256,7 +282,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenDBRead ( const KDBManager *self,
if ( self == NULL )
return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
- return KDBManagerVOpenDBReadInt ( self, db, self -> wd, path, args );
+ return KDBManagerVOpenDBReadInt ( self, db, self -> wd, true, path, args );
}
LIB_EXPORT rc_t CC KDatabaseVOpenDBRead ( const KDatabase *self,
@@ -278,7 +304,7 @@ LIB_EXPORT rc_t CC KDatabaseVOpenDBRead ( const KDatabase *self,
if ( rc == 0 )
{
rc = KDBManagerVOpenDBReadInt ( self -> mgr, dbp,
- self -> dir, path, NULL );
+ self -> dir, false, path, NULL );
if ( rc == 0 )
{
KDatabase *db = ( KDatabase* ) * dbp;
@@ -314,7 +340,47 @@ LIB_EXPORT bool CC KDatabaseLocked ( const KDatabase *self )
*/
LIB_EXPORT bool CC KDatabaseVExists ( const KDatabase *self, uint32_t type, const char *name, va_list args )
{
- /* TBD */
+ if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+ {
+ rc_t rc;
+ size_t len;
+ const char *ns;
+ char path [ 256 ];
+
+ switch ( type )
+ {
+ case kptDatabase:
+ ns = "db";
+ len = 2;
+ break;
+
+ case kptTable:
+ ns = "tbl";
+ len = 3;
+ break;
+
+ case kptIndex:
+ ns = "idx";
+ len = 3;
+ break;
+
+ default:
+ return false;
+ }
+
+ rc = KDBVMakeSubPath ( self -> dir, path, sizeof path, ns, len, name, args );
+ if ( rc == 0 )
+ {
+ switch ( KDirectoryPathType ( self -> dir, path ) )
+ {
+ case kptFile:
+ case kptDir:
+ case kptFile | kptAlias:
+ case kptDir | kptAlias:
+ return true;
+ }
+ }
+ }
return false;
}
@@ -333,6 +399,83 @@ LIB_EXPORT bool CC KDatabaseExists ( const KDatabase *self, uint32_t type, const
}
+/* IsAlias
+ * returns true if object name is an alias
+ * returns path to fundamental name if it was aliased
+ *
+ * "type" [ IN ] - a KDBPathType
+ * valid values are kptDatabase, kptTable and kptIndex
+ *
+ * "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ * for fundamenta object name if "alias" is not a fundamental name,
+ *
+ * "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC KDatabaseIsAlias ( const KDatabase *self, uint32_t type,
+ char *resolved, size_t rsize, const char *name )
+{
+ if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+ {
+ rc_t rc;
+ size_t len;
+ const char *ns;
+ char path [ 256 ];
+
+ switch ( type )
+ {
+ case kptDatabase:
+ ns = "db";
+ len = 2;
+ break;
+
+ case kptTable:
+ ns = "tbl";
+ len = 3;
+ break;
+
+ case kptIndex:
+ ns = "idx";
+ len = 3;
+ break;
+
+ default:
+ return false;
+ }
+
+ rc = KDBMakeSubPath ( self -> dir, path, sizeof path, ns, len, name );
+ if ( rc == 0 )
+ {
+ switch ( KDirectoryPathType ( self -> dir, path ) )
+ {
+ case kptFile | kptAlias:
+ case kptDir | kptAlias:
+ if ( resolved != NULL && rsize != 0 )
+ {
+ const KDirectory *sub;
+ rc = KDirectoryOpenDirRead ( self -> dir, & sub, false, ns );
+ * resolved = 0;
+ if ( rc != 0 )
+ PLOGERR ( klogWarn, ( klogWarn, rc, "failed to open subdirectory '$(sub)'", "sub=%s", ns ) );
+ else
+ {
+ rc = KDirectoryResolveAlias ( sub, false, resolved, rsize, name );
+ KDirectoryRelease ( sub );
+ if ( rc != 0 )
+ PLOGERR ( klogWarn, ( klogWarn, rc, "failed to resolve alias '$(alias)'", "alias=%s", name ) );
+ }
+ }
+ return true;
+ }
+ }
+ }
+
+ if ( resolved != NULL && rsize != 0 )
+ * resolved = 0;
+
+ return false;
+}
+
+
/* Writable
* returns 0 if object is writable
* or a reason why if not
@@ -495,18 +638,29 @@ LIB_EXPORT rc_t CC KDatabaseModDate ( const KDatabase *self, KTime_t *mtime )
/* List
* create database listings
*/
+struct FilterData
+{
+ const KDBManager * mgr;
+ int type;
+};
+
static
-bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data )
+bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data_ )
{
- return ( KDBOpenPathTypeRead ( dir, name, NULL, (( long int ) data ), NULL ) == 0 );
+ struct FilterData * data = data_;
+ return ( KDBOpenPathTypeRead ( data->mgr, dir, name, NULL, data->type, NULL, false ) == 0 );
}
LIB_EXPORT rc_t CC KDatabaseListDB ( const KDatabase *self, KNamelist **names )
{
if ( self != NULL )
{
+ struct FilterData data;
+ data.mgr = self->mgr;
+ data.type = kptDatabase;
+
return KDirectoryVList ( self -> dir,
- names, KDatabaseListFilter, ( void* ) kptDatabase, "db", NULL );
+ names, KDatabaseListFilter, &data, "db", NULL );
}
if ( names != NULL )
@@ -519,8 +673,12 @@ LIB_EXPORT rc_t CC KDatabaseListTbl ( struct KDatabase const *self, KNamelist **
{
if ( self != NULL )
{
+ struct FilterData data;
+ data.mgr = self->mgr;
+ data.type = kptTable;
+
return KDirectoryVList ( self -> dir,
- names, KDatabaseListFilter, ( void* ) kptTable, "tbl", NULL );
+ names, KDatabaseListFilter, &data, "tbl", NULL );
}
if ( names != NULL )
@@ -533,8 +691,12 @@ LIB_EXPORT rc_t CC KDatabaseListIdx ( struct KDatabase const *self, KNamelist **
{
if ( self != NULL )
{
+ struct FilterData data;
+ data.mgr = self->mgr;
+ data.type = kptIndex;
+
return KDirectoryVList ( self -> dir,
- names, KDatabaseListFilter, ( void* ) kptIndex, "idx", NULL );
+ names, KDatabaseListFilter, &data, "idx", NULL );
}
if ( names != NULL )
diff --git a/libs/kdb/dbcc-cmn.c b/libs/kdb/dbcc-cmn.c
index 90a94d2..09d287c 100644
--- a/libs/kdb/dbcc-cmn.c
+++ b/libs/kdb/dbcc-cmn.c
@@ -134,7 +134,7 @@ rc_t DirectoryCheckMD5(const KDirectory *dir, const char name[],
nfo->info.done.rc = rc2;
}
else {
- nfo->info.done.mesg = NULL;
+ nfo->info.done.mesg = "md5 ok";
nfo->info.done.rc = 0;
}
return report(nfo, ctx);
diff --git a/libs/kdb/dbmgr-cmn.c b/libs/kdb/dbmgr-cmn.c
index ec56046..c21e008 100644
--- a/libs/kdb/dbmgr-cmn.c
+++ b/libs/kdb/dbmgr-cmn.c
@@ -34,6 +34,8 @@
#include "kdb-priv.h"
#undef KONST
+#include <vfs/manager.h>
+#include <kfs/directory.h>
#include <klib/symbol.h>
#include <klib/checksum.h>
#include <klib/rc.h>
@@ -63,6 +65,8 @@ rc_t KDBManagerWhack ( KDBManager *self )
/* everything should be closed */
assert ( self -> open_objs . root == NULL );
+ rc = VFSManagerRelease ( self -> vfsmgr );
+
rc = KDirectoryRelease ( self -> wd );
if ( rc == 0 )
{
@@ -167,14 +171,19 @@ rc_t KDBManagerMake ( KDBManager **mgrp, const KDirectory *wd, const char *op )
if ( rc == 0 )
{
- CRC32Init ();
+ rc = VFSManagerMake ( & mgr -> vfsmgr );
+
+ if ( rc == 0 )
+ {
+ CRC32Init ();
- BSTreeInit ( & mgr -> open_objs );
+ BSTreeInit ( & mgr -> open_objs );
- KRefcountInit ( & mgr -> refcount, 1, "KDBManager", op, "kmgr" );
+ KRefcountInit ( & mgr -> refcount, 1, "KDBManager", op, "kmgr" );
- * mgrp = mgr;
- return 0;
+ * mgrp = mgr;
+ return 0;
+ }
}
free ( mgr );
@@ -211,35 +220,24 @@ LIB_EXPORT rc_t CC KDBManagerVersion ( const KDBManager *self, uint32_t *version
*/
LIB_EXPORT bool CC KDBManagerVExists ( const KDBManager *self, uint32_t requested, const char *name, va_list args )
{
- char full [ 4096 ];
- rc_t rc = KDirectoryVResolvePath ( self -> wd, false, full, sizeof full, name, args );
- if ( rc == 0 )
- {
- int type = KDBPathType ( self -> wd, full ) & ~ kptAlias;
- switch ( type )
- {
- case kptDatabase:
- case kptTable:
- case kptIndex:
- case kptColumn:
- case kptMetadata:
- break;
- case kptPrereleaseTbl:
- type = kptTable;
- break;
-#if 0
- /*TBD - eventually we need to check for an archive here */
- case kptFile:
- /* check if this is an archive .tar or .sra and return rcReadonly if it is */
-#endif
- default:
- return false;
- }
+ int type;
- return requested == ( uint32_t ) type;
+ type = KDBManagerVPathType (self, name, args);
+ switch ( type )
+ {
+ case kptDatabase:
+ case kptTable:
+ case kptIndex:
+ case kptColumn:
+ case kptMetadata:
+ break;
+ case kptPrereleaseTbl:
+ type = kptTable;
+ break;
+ default:
+ return false;
}
-
- return false;
+ return requested == ( uint32_t ) type;
}
bool KDBManagerExists ( const KDBManager *self, uint32_t type, const char *name, ... )
diff --git a/libs/kdb/dbmgr-priv.h b/libs/kdb/dbmgr-priv.h
index 48f4b60..4ee0356 100644
--- a/libs/kdb/dbmgr-priv.h
+++ b/libs/kdb/dbmgr-priv.h
@@ -53,7 +53,7 @@ extern "C" {
*/
struct KSymbol;
struct KDirectory;
-
+struct VFSManager;
/*--------------------------------------------------------------------------
* KDBManager
@@ -69,6 +69,9 @@ struct KDBManager
/* open references */
KRefcount refcount;
+
+ /* other managers needed by the KDB manager */
+ struct VFSManager * vfsmgr;
};
diff --git a/libs/kdb/dbmgr.c b/libs/kdb/dbmgr.c
index 00ff9a7..a0d2039 100644
--- a/libs/kdb/dbmgr.c
+++ b/libs/kdb/dbmgr.c
@@ -29,13 +29,22 @@
#include <kdb/extern.h>
#include "libkdb.vers.h"
+#include <vfs/manager.h>
+#include <vfs/resolver.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <kfs/directory.h>
+
#define KONST const
#include "dbmgr-priv.h"
#include "kdb-priv.h"
+#include "kdbfmt-priv.h"
#include <klib/checksum.h>
#include <klib/rc.h>
#undef KONST
+#include <klib/text.h>
+
#include <sysalloc.h>
#include <limits.h>
@@ -63,6 +72,161 @@ LIB_EXPORT rc_t CC KDBManagerMakeRead ( const KDBManager **mgrp, const KDirector
}
+/*
+ * Resolve using manager, possibly against this directory, using or not uri
+ * accession resolution of those dangerous formatted path thingies
+ *
+
+
+
+ * 1. If naked accession or uri accession resolve to local,
+
+
+ * self = a kdbmanager
+ * disable_accession_resolution = turn off VResolver usage for accessions
+ * read versus create/upate
+ * resolved+path = a vpath created based on text path
+ * fmt = our scary interface that is 'sprintf'ish
+ * args = goes with the fmt
+ *
+ * NOTE: as usual a path with a '%' becomes broken at unsuspected times
+ */
+rc_t KDBManagerResolveVPathInt (const KDBManager * self,
+ bool disable_accession_resolution,
+ VPath ** resolved_path,
+ const VPath * path)
+{
+ uint32_t flags;
+
+ assert (self != NULL);
+ assert (resolved_path != NULL);
+ assert (path != NULL);
+
+ flags = disable_accession_resolution
+ ? vfsmgr_rflag_no_acc
+ : vfsmgr_rflag_kdb_acc;
+
+ return VFSManagerResolvePath (self->vfsmgr,
+ flags,
+ path, resolved_path);
+}
+
+
+rc_t KDBManagerVResolveVPath (const KDBManager * self,
+ bool disable_accession_resolution,
+ VPath ** resolved_path,
+ const VPath * path)
+{
+ return KDBManagerResolveVPathInt (self, disable_accession_resolution,
+ resolved_path, path);
+}
+
+
+rc_t KDBManagerVResolvePath (const KDBManager * self,
+ bool disable_accession_resolution,
+ VPath ** resolved_path,
+ const char * fmt, va_list args)
+{
+ VPath * p;
+ rc_t rc;
+
+ if (resolved_path == NULL)
+ return RC (rcDB, rcMgr, rcResolving, rcParam, rcNull);
+
+ *resolved_path = NULL;
+
+ if (self == NULL)
+ return RC (rcDB, rcMgr, rcResolving, rcSelf, rcNull);
+
+ if ((fmt == NULL) || (fmt[0] == '\0'))
+ return RC (rcDB, rcMgr, rcResolving, rcParam, rcNull);
+
+ rc = VPathMakeFmt (&p, fmt, args);
+ if (rc == 0)
+ {
+ rc = KDBManagerVResolveVPath (self, disable_accession_resolution,
+ resolved_path, p);
+ VPathRelease (p);
+ }
+ return rc;
+}
+
+rc_t KDBManagerVResolvePathRelativeDir (const KDBManager * self, const KDirectory * dir,
+ bool disable_accession_resolution,
+ VPath ** resolved_path,
+ const char * fmt, va_list args)
+{
+ VPath * p;
+ rc_t rc;
+
+ if (resolved_path == NULL)
+ return RC (rcDB, rcMgr, rcResolving, rcParam, rcNull);
+
+ *resolved_path = NULL;
+
+ if (self == NULL)
+ return RC (rcDB, rcMgr, rcResolving, rcSelf, rcNull);
+
+ if ((fmt == NULL) || (fmt[0] == '\0'))
+ return RC (rcDB, rcMgr, rcResolving, rcParam, rcNull);
+
+ rc = VPathMakeFmt (&p, fmt, args);
+ if (rc == 0)
+ {
+ rc = KDBManagerVResolveVPath (self, disable_accession_resolution,
+ resolved_path, p);
+ VPathRelease (p);
+ }
+ return rc;
+}
+
+
+rc_t KDBManagerResolvePathRelativeDir (const KDBManager * self,
+ const KDirectory * dir,
+ bool disable_accession_resolution,
+ VPath ** resolved_path, const char * fmt, ...)
+{
+ va_list args;
+ rc_t rc;
+
+ va_start (args, fmt);
+
+ rc = KDBManagerVResolvePathRelativeDir (self, dir,
+ disable_accession_resolution,
+ resolved_path, fmt, args);
+ va_end (args);
+ return rc;
+}
+
+
+
+/* KDBHdrValidate
+ * validates that a header sports a supported byte order
+ * and that the version is within range
+ */
+rc_t KDBHdrValidate ( const KDBHdr *hdr, size_t size,
+ uint32_t min_vers, uint32_t max_vers )
+{
+ assert ( hdr != NULL );
+
+ if ( size < sizeof * hdr )
+ return RC ( rcDB, rcHeader, rcValidating, rcData, rcCorrupt );
+
+ if ( hdr -> endian != eByteOrderTag )
+ {
+ if ( hdr -> endian == eByteOrderReverse )
+ return RC ( rcDB, rcHeader, rcValidating, rcByteOrder, rcIncorrect );
+ return RC ( rcDB, rcHeader, rcValidating, rcData, rcCorrupt );
+ }
+
+ if ( hdr -> version < min_vers || hdr -> version > max_vers )
+ return RC ( rcDB, rcHeader, rcValidating, rcHeader, rcBadVersion );
+
+ return 0;
+}
+
+
+
/* Writable
* returns 0 if object is writable
* or a reason why if not
@@ -83,7 +247,7 @@ LIB_EXPORT rc_t CC KDBManagerVWritable ( const KDBManager *self, const char * pa
rc = KDirectoryVResolvePath ( self -> wd, true, dbpath, sizeof dbpath, path, args );
if ( rc == 0 )
{
- int type = KDBPathType ( self -> wd, path ) & ~ kptAlias;
+ int type = KDBPathType ( self -> wd, NULL, path ) & ~ kptAlias;
switch ( type )
{
case kptDatabase:
@@ -134,23 +298,92 @@ LIB_EXPORT rc_t CC KDBManagerRunPeriodicTasks ( const KDBManager *self )
/* PathType
- * check the path type of an object/directory path.
- * this is an extension of the KDirectoryPathType and will return
- * the KDirectory values if a path type is not specifically a
- * kdb object
+ * check the path type of an object/directory path.
+ * this is an extension of the KDirectoryPathType and will return
+ * the KDirectory values if a path type is not specifically a
+ * kdb object
*/
+LIB_EXPORT int CC KDBManagerPathTypeVP ( const KDBManager * self, const VPath * path )
+{
+ VPath * rpath;
+ int path_type;
+ rc_t rc;
+
+ path_type = kptBadPath;
+ if ((self != NULL) && (path != NULL))
+ {
+ /*
+ * resolve the possible relative path or accession into
+ * a final path we can open directly
+ */
+ rc = KDBManagerResolveVPathInt (self, false, &rpath, path);
+ if (rc == 0)
+ {
+ const KDirectory * dir;
+
+ /*
+ * Most KDBPathType values are based on 'directories'
+ * so try to open the resolved path as a directory
+ */
+ rc = VFSManagerOpenDirectoryReadDecrypt (self->vfsmgr, &dir, rpath);
+ if (rc == 0)
+ {
+ path_type = KDBPathTypeDir (dir, kptDir, NULL, ".");
+ KDirectoryRelease (dir);
+ }
+ /*
+ * If we couldn't open the path as a directory we 'might'
+ * have a KDB idx but we will only try that for a limitted
+ * set of uri schemes.
+ */
+ else
+ {
+ VPUri_t t;
+
+ rc = VPathGetScheme_t (rpath, &t);
+ if (rc == 0)
+ {
+ switch (t)
+ {
+ default:
+ break;
+ case vpuri_ncbi_vfs:
+ case vpuri_file:
+ case vpuri_none:
+ {
+ char b [4 * 1024];
+ size_t z;
+ rc = VPathReadPath (path, b, sizeof b, &z);
+ if (rc == 0)
+ path_type = KDBPathType (self->wd, false, b);
+ break;
+ }}
+ }
+ }
+ VPathRelease (rpath);
+ }
+ }
+ return path_type;
+}
+
LIB_EXPORT int CC KDBManagerVPathType ( const KDBManager * self, const char *path, va_list args )
{
- rc_t rc;
- char full [ 8192 ];
+ int path_type = kptBadPath;
- rc = KDirectoryVResolvePath ( self->wd, true, full, sizeof full, path, args );
- if (rc == 0)
+ if ((self != NULL) && (path != NULL))
{
- return KDBPathType ( self->wd, full );
+ VPath * vp;
+ rc_t rc;
+
+ rc = VPathMakeVFmt (&vp, path, args);
+ if (rc == 0)
+ {
+ path_type = KDBManagerPathTypeVP (self, vp);
+ VPathRelease (vp);
+ }
}
- return kptBadPath;
+ return path_type;
}
diff --git a/libs/kdb/idxblk.c b/libs/kdb/idxblk.c
index 6f7bb84..e5c14cf 100644
--- a/libs/kdb/idxblk.c
+++ b/libs/kdb/idxblk.c
@@ -54,8 +54,8 @@ void KColConstBlockMapSwap ( KColConstBlockMap *self, uint32_t count, int type )
( ( uint64_t* ) self -> h . first ) [ 0 ] = bswap_64 ( self -> h . first [ 0 ] );
break;
case btypePredictable:
- * ( ( uint64_t* ) & ( self -> h . pred ) -> pg ) = bswap_64 ( self -> h . pred -> pg );
- * ( ( uint32_t* ) & ( self -> h . pred ) -> sz ) = bswap_32 ( self -> h . pred -> sz );
+ * ( uint64_t* ) & ( self -> h . pred -> pg ) = bswap_64 ( self -> h . pred -> pg );
+ * ( uint32_t* ) & ( self -> h . pred -> sz ) = bswap_32 ( self -> h . pred -> sz );
break;
}
@@ -293,7 +293,7 @@ void KColIdxBlockGet3 ( const KColIdxBlock *self,
{
* sz = self -> pg . h . pred [ 0 ] . sz;
* pg = self -> pg . h . pred [ 0 ] . pg +
- ( self -> pg . h . pred [ 0 ] . sz * idx );
+ ( (uint64_t) self -> pg . h . pred [ 0 ] . sz * idx );
}
/* RewriteColumns
@@ -509,7 +509,8 @@ rc_t KColIdxBlockInit ( KColIdxBlock *self,
if ( bswap )
{
KColConstBlockMapSwap ( & self -> id, count, bloc -> u . blk . id_type );
- KColConstBlockMapSwap ( & self -> pg, count, bloc -> u . blk . pg_type );
+ if ( self -> pg . h . p != self -> id . h . p )
+ KColConstBlockMapSwap ( & self -> pg, count, bloc -> u . blk . pg_type );
}
/* check for need to rewrite columns */
diff --git a/libs/kdb/index-cmn.h b/libs/kdb/index-cmn.h
index b7b5357..ff2dc6f 100644
--- a/libs/kdb/index-cmn.h
+++ b/libs/kdb/index-cmn.h
@@ -223,7 +223,7 @@ uint32_t KPTrieIndexID2Ord_v2 ( const KPTrieIndex_v2 *self, int64_t id );
rc_t KPTrieIndexCheckConsistency_v2 ( const KPTrieIndex_v2 *self,
int64_t *start_id, uint64_t *id_range, uint64_t *num_keys,
uint64_t *num_rows, uint64_t *num_holes,
- struct KIndex const *outer, bool key2id, bool id2key, bool all_ids );
+ struct KIndex const *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1 );
/*--------------------------------------------------------------------------
@@ -244,7 +244,8 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
uint32_t *span,
#endif
int ( CC * custom_cmp ) ( const void *item, struct PBSTNode const *n, void *data ),
- void * data );
+ void * data,
+ bool convertFromV1);
/* projection index id to key-string */
#if V2FIND_RETURNS_SPAN
@@ -260,7 +261,7 @@ rc_t KTrieIndexProject_v2 ( const KTrieIndex_v2 *self,
rc_t KTrieIndexCheckConsistency_v2 ( const KTrieIndex_v2 *self,
int64_t *start_id, uint64_t *id_range, uint64_t *num_keys,
uint64_t *num_rows, uint64_t *num_holes,
- struct KIndex const *outer, bool key2id, bool id2key, bool all_ids );
+ struct KIndex const *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1 );
/*--------------------------------------------------------------------------
diff --git a/libs/kdb/index.c b/libs/kdb/index.c
index 24fc6bd..2dbb325 100644
--- a/libs/kdb/index.c
+++ b/libs/kdb/index.c
@@ -66,6 +66,7 @@ struct KIndex
KTrieIndex_v2 txt234;
KU64Index_v3 u64_3;
} u;
+ bool converted_from_v1;
uint8_t type;
char path [ 1 ];
};
@@ -102,7 +103,7 @@ rc_t KIndexWhack ( KIndex *self )
self -> mgr = NULL;
/* complete */
- rc = RC ( rcDB, rcIndex, rcDestroying, rcIndex, rcBadVersion );
+ rc = SILENT_RC ( rcDB, rcIndex, rcDestroying, rcIndex, rcBadVersion );
switch ( self -> type )
{
@@ -270,6 +271,9 @@ rc_t KIndexAttach ( KIndex *self, const KMMap *mm, bool *byteswap )
switch ( hdr -> version )
{
case 1:
+#if KDBINDEXVERS != 1
+ self -> converted_from_v1 = true;
+#endif
case 2:
self -> type = kitText;
break;
@@ -638,7 +642,7 @@ LIB_EXPORT rc_t CC KIndexConsistencyCheck ( const KIndex *self, uint32_t level,
case 4:
rc = KTrieIndexCheckConsistency_v2 ( & self -> u . txt234,
start_id, id_range, num_keys, num_rows, num_holes,
- self, key2id, id2key, all_ids );
+ self, key2id, id2key, all_ids, self -> converted_from_v1 );
break;
default:
return RC ( rcDB, rcIndex, rcValidating, rcIndex, rcBadVersion );
@@ -697,9 +701,9 @@ LIB_EXPORT rc_t CC KIndexFindText ( const KIndex *self, const char *key, int64_t
case 3:
case 4:
#if V2FIND_RETURNS_SPAN
- rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, start_id, & span, custom_cmp, data );
+ rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, start_id, & span, custom_cmp, data, self -> converted_from_v1 );
#else
- rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, start_id, custom_cmp, data );
+ rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, start_id, custom_cmp, data, self -> converted_from_v1 );
#endif
break;
default:
@@ -755,9 +759,9 @@ LIB_EXPORT rc_t CC KIndexFindAllText ( const KIndex *self, const char *key,
case 3:
case 4:
#if V2FIND_RETURNS_SPAN
- rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, & id64, & span, NULL, NULL );
+ rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, & id64, & span, NULL, NULL, self -> converted_from_v1 );
#else
- rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, & id64, NULL, NULL );
+ rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, & id64, NULL, NULL, self -> converted_from_v1 );
#endif
if ( rc == 0 )
rc = ( * f ) ( id64, span, data );
diff --git a/libs/kdb/kdb-priv.h b/libs/kdb/kdb-priv.h
index f23fa3e..f9440f1 100644
--- a/libs/kdb/kdb-priv.h
+++ b/libs/kdb/kdb-priv.h
@@ -39,15 +39,16 @@
extern "C" {
#endif
-/*--------------------------------------------------------------------------
- * KDBPathType
+struct KDirectory;
+struct KDBManager;
+
+/*
+ * This symbol is inserted where the KDB is being tweaked to allow
+ * VFS URI syntax in opening KDB database objects initially to support
+ * krypto passwords more fully. By specifying the password source
+ * individually for opens two KDB objects with different passwords can be opened.
*/
-enum
-{
- kptMetadata = kptColumn + 1,
- kptPrereleaseTbl
-};
-
+#define SUPPORT_VFS_URI 1
/*--------------------------------------------------------------------------
* KDB utility
@@ -57,7 +58,8 @@ enum
/* PathType
* checks type of path
*/
-int KDBPathType ( const KDirectory *dir, const char *path );
+int KDBPathTypeDir ( const struct KDirectory *dir, int type,bool *zombies, const char *path );
+int KDBPathType ( const struct KDirectory *dir, bool *zombies, const char *path );
/* OpenPathType
* Opens a path if it is of the specified type. Even if it is an archive file
@@ -73,33 +75,46 @@ int KDBPathType ( const KDirectory *dir, const char *path );
* archive that is of the requested type. An archive will have been opened
* but reshut if dpdir is NULL.
*/
-rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path,
- const KDirectory ** dpdir, int pathtype, int * realpathtype );
+rc_t KDBOpenPathTypeRead ( const struct KDBManager * mgr, const struct KDirectory * dir, const char * path,
+ const struct KDirectory ** dpdir, int pathtype, int * realpathtype, bool try_srapath );
/* Writable
* examines a directory structure for any "lock" files
* examines a file for ( any ) write permission
*/
-rc_t KDBWritable ( const KDirectory *dir, const char *path );
+rc_t KDBWritable ( const struct KDirectory *dir, const char *path );
/* GetObjModDate
* extract mod date from a path
*/
-rc_t KDBGetObjModDate ( const KDirectory *dir, KTime_t *mtime );
+rc_t KDBGetObjModDate ( const struct KDirectory *dir, KTime_t *mtime );
/* GetPathModDate
* extract mod date from a path
*/
-rc_t KDBVGetPathModDate ( const KDirectory *dir,
+rc_t KDBVGetPathModDate ( const struct KDirectory *dir,
KTime_t *mtime, const char *path, va_list args );
+/* KDBMakeSubPath
+ * adds a namespace to path spec
+ */
+rc_t KDBMakeSubPath ( struct KDirectory const *dir,
+ char *subpath, size_t subpath_max, const char *ns,
+ uint32_t ns_size, const char *path, ... );
/* VMakeSubPath
* adds a namespace to path spec
*/
-rc_t KDBVMakeSubPath ( const KDirectory *dir,
+rc_t KDBVMakeSubPath ( const struct KDirectory *dir,
char *subpath, size_t subpath_max, const char *ns,
uint32_t ns_size, const char *path, va_list args );
+
+/* KDBIsPathUri
+ * A hack to get some of VFS into KDB that is too tightly bound to KFS
+ */
+bool KDBIsPathUri (const char * path);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/libs/kdb/kdb.c b/libs/kdb/kdb.c
index 2efc91f..db307e3 100644
--- a/libs/kdb/kdb.c
+++ b/libs/kdb/kdb.c
@@ -25,29 +25,48 @@
*/
#include <kdb/extern.h>
-#include <va_copy.h>
#include "kdb-priv.h"
#include "kdbfmt-priv.h"
+#include "dbmgr-priv.h"
+
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+#include <vfs/manager-priv.h>
+#include <sra/srapath.h>
#include <kfs/kfs-priv.h>
#include <kfs/directory.h>
#include <kfs/file.h>
-#include <kfs/tar.h>
#include <kfs/arc.h>
+#include <kfs/tar.h>
+#include <kfs/sra.h>
#include <kfs/kfs-priv.h>
#include <klib/container.h>
#include <klib/text.h>
#include <klib/rc.h>
#include <sysalloc.h>
+#include <va_copy.h>
+
#include <limits.h>
#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include <errno.h>
+#ifndef SUPPORT_VFS_URI
+#define SUPPORT_VFS_URI 0
+#endif
/*--------------------------------------------------------------------------
* KDB utility
@@ -57,6 +76,8 @@
* validates that a header sports a supported byte order
* and that the version is within range
*/
+/* this is included to make kdb.c vs. wkdb.c file comparisons easier in [x]emacs.*/
+#if NOT_USED_IN_READ_ONLY_SIDE
rc_t KDBHdrValidate ( const KDBHdr *hdr, size_t size,
uint32_t min_vers, uint32_t max_vers )
{
@@ -77,6 +98,7 @@ rc_t KDBHdrValidate ( const KDBHdr *hdr, size_t size,
return 0;
}
+#endif
/* KDBPathType
* checks type of path
@@ -98,13 +120,14 @@ enum ScanBits
scan_ofile = ( 1 << 12 ),
scan_meta = ( 1 << 13 ),
scan_skey = ( 1 << 14 ),
- scan_sealed = ( 1 << 15 )
+ scan_sealed = ( 1 << 15 ),
+ scan_zombie = ( 1 << 16 )
};
static
rc_t CC scan_dbdir ( const KDirectory *dir, uint32_t type, const char *name, void *data )
{
- int *bits = data;
+ uint32_t *bits = data;
type &= kptAlias - 1;
@@ -182,112 +205,139 @@ rc_t CC scan_dbdir ( const KDirectory *dir, uint32_t type, const char *name, voi
* bits |= scan_ofile;
}
-
+ else if (type == kptZombieFile )
+ {
+ * bits |= scan_zombie;
+ }
+
return 0;
}
-int KDBPathType ( const KDirectory *dir, const char *path )
-{
- const char *leaf, *parent;
+int KDBPathTypeDir (const KDirectory * dir, int type, bool * pHasZombies, const char * path)
+{
+ const char * leaf, * parent;
+ uint32_t bits;
rc_t rc;
- int bits;
- int type = KDirectoryVPathType ( dir, path, NULL );
- switch ( type )
+
+ bits = 0;
+
+ assert ((type == kptDir) || (type == (kptDir|kptAlias)));
+
+ rc = KDirectoryVVisit ( dir, false, scan_dbdir, & bits, path, NULL );
+ if ( rc == 0 ) do
{
- case kptDir:
- case kptDir | kptAlias:
- bits = 0;
- rc = KDirectoryVVisit ( dir, false, scan_dbdir, & bits, path, NULL );
- if ( rc == 0 )
+ if ( ( bits & scan_zombie ) != 0 ) {
+ bits &= ~scan_zombie;
+ if (pHasZombies)
+ *pHasZombies = true;
+ }
+ /* look for a column */
+ if ( ( bits & scan_idxN ) != 0 &&
+ ( bits & ( scan_data | scan_dataN ) ) != 0 )
{
- /* look for a column */
- if ( ( bits & scan_idxN ) != 0 &&
- ( bits & ( scan_data | scan_dataN ) ) != 0 )
- {
- if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
- type += kptColumn - kptDir;
- break;
- }
+ if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+ type += kptColumn - kptDir;
+ break;
+ }
- /* look for a table */
- if ( ( bits & scan_col ) != 0 )
+ /* look for a table */
+ if ( ( bits & scan_col ) != 0 )
+ {
+ /* can't have sub-tables or a db */
+ if ( ( bits & ( scan_db | scan_tbl ) ) == 0 )
{
- /* can't have sub-tables or a db */
- if ( ( bits & ( scan_db | scan_tbl ) ) == 0 )
- {
- /* look for an old-structure table */
- if ( ( bits & ( scan_meta | scan_md ) ) == scan_meta ||
- ( bits & ( scan_skey | scan_idx ) ) == scan_skey )
- type += kptPrereleaseTbl - kptDir;
- else
- type += kptTable - kptDir;
- }
- break;
+ /* look for an old-structure table */
+ if ( ( bits & ( scan_meta | scan_md ) ) == scan_meta ||
+ ( bits & ( scan_skey | scan_idx ) ) == scan_skey )
+ type += kptPrereleaseTbl - kptDir;
+ else
+ type += kptTable - kptDir;
}
+ break;
+ }
- /* look for metadata */
- if ( ( bits & ( scan_cur | scan_rNNN ) ) != 0 )
- {
- if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
- type += kptMetadata - kptDir;
- break;
- }
+ /* look for metadata */
+ if ( ( bits & ( scan_cur | scan_rNNN ) ) != 0 )
+ {
+ if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+ type += kptMetadata - kptDir;
+ break;
+ }
- /* look for a database */
- if ( ( bits & scan_tbl ) != 0 )
- {
- if ( ( bits & scan_col ) == 0 )
- type += kptDatabase - kptDir;
- break;
- }
+ /* look for a database */
+ if ( ( bits & scan_tbl ) != 0 )
+ {
+ if ( ( bits & scan_col ) == 0 )
+ type += kptDatabase - kptDir;
+ break;
+ }
- /* look for a structured column */
- if ( ( bits & scan_odir ) != 0 )
+ /* look for a structured column */
+ if ( ( bits & scan_odir ) != 0 )
+ {
+ leaf = strrchr ( path, '/' );
+ if ( leaf != NULL )
{
- leaf = strrchr ( path, '/' );
- if ( leaf != NULL )
- {
- parent = string_rchr ( path, leaf - path, '/' );
- if ( parent ++ == NULL )
- parent = path;
- if ( memcmp ( parent, "col/", 4 ) != 0 )
- break;
+ parent = string_rchr ( path, leaf - path, '/' );
+ if ( parent ++ == NULL )
+ parent = path;
+ if ( memcmp ( parent, "col/", 4 ) != 0 )
+ break;
- bits = 0;
- if ( KDirectoryVVisit ( dir, 1, scan_dbdir, & bits, path, NULL ) == 0 )
+ bits = 0;
+ if ( KDirectoryVVisit ( dir, 1, scan_dbdir, & bits, path, NULL ) == 0 )
+ {
+ if ( ( bits & scan_idxN ) != 0 &&
+ ( bits & ( scan_data | scan_dataN ) ) != 0 )
{
- if ( ( bits & scan_idxN ) != 0 &&
- ( bits & ( scan_data | scan_dataN ) ) != 0 )
- {
- if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
- type += kptColumn - kptDir;
- break;
- }
+ if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+ type += kptColumn - kptDir;
+ break;
}
}
}
}
+ } while (0);
+
+ return type;
+}
+
+
+int KDBPathType ( const KDirectory *dir, bool *pHasZombies, const char *path )
+{
+ const char *leaf, *parent;
+
+
+ rc_t rc;
+ int type = KDirectoryVPathType ( dir, path, NULL );
+
+ if (pHasZombies)
+ *pHasZombies = false;
+
+ switch ( type )
+ {
+ case kptDir:
+ case kptDir | kptAlias:
+ type = KDBPathTypeDir (dir, type, pHasZombies, path);
break;
case kptFile:
case kptFile | kptAlias:
{
/* if we hit a file first try it as an archive */
- rc_t rc;
const KDirectory * ldir;
rc = KDirectoryOpenSraArchiveRead_silent ( dir, &ldir, false, path );
if ( rc != 0 )
rc = KDirectoryOpenTarArchiveRead_silent ( dir, &ldir, false, path );
-
/* it was an archive so recur */
- if (rc == 0)
+ if ( rc == 0 )
{
/* recheck this newly opened directory for KDB/KFS type */
int type2;
- type2 = KDBPathType ( ldir, "." );
+ type2 = KDBPathType ( ldir, NULL, "." );
if ((type2 != kptDir) || (type != (kptDir|kptAlias)))
type = type2;
@@ -313,106 +363,335 @@ int KDBPathType ( const KDirectory *dir, const char *path )
}
-rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path,
- const KDirectory ** pdir, int pathtype, int * ppathtype )
+
+#if SUPPORT_VFS_URI
+#else
+/* return configured password as ASCIZ
+ * opertates on vfs/kfs/kfg objects, not kdb objects */
+static
+rc_t KDBOpenFileGetPassword (char * pw, size_t pwz)
{
+ VFSManager * mgr;
rc_t rc;
- uint32_t dtype;
- int type;
- const KDirectory * ldir;
- /* set local directory pointer to error state NULL */
- ldir = NULL;
- rc = 0;
+ assert (pw);
+ assert (pwz);
- type = dtype = KDirectoryPathType (dir, path);
+ pw[0] = '\0';
- switch (dtype)
+ rc = VFSManagerMake (&mgr);
+ if (rc)
+ ; /* failure to make VFS manager: pass along rc */
+ else
{
- case kptDir:
- case kptDir | kptAlias:
- type = KDBPathType ( dir, path );
+ size_t pwfz;
+ char pwf [4096 + 1];
- if (( type == pathtype ) || (type == (pathtype|kptAlias)))
+ rc = VFSManagerGetConfigPWFile (mgr, pwf, sizeof (pwf) - 1, &pwfz);
+ if (rc)
+ /* failure to get password file path: tweak rc */
+ rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcNotFound);
+
+ else
{
- rc = KDirectoryVOpenDirUpdate ( ( KDirectory * ) dir, ( KDirectory ** ) & ldir, false, path, NULL );
- if ( rc != 0)
+ VPath * pwp;
+
+ pwf [pwfz] = '\0'; /* force to ASCIZ */
+
+ rc = VPathMakeSysPath (&pwp, pwf);
+
+ if (rc)
+ ; /* failure to construct a path from the string */
+
+ else
{
- rc = KDirectoryVOpenDirRead ( dir, &ldir, false, path, NULL );
+ const KFile * pwf;
+
+ rc = VFSManagerOpenFileRead (mgr, &pwf, pwp);
+ if (rc)
+ /* failure to open password file */
+ rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcNotOpen);
+
+ else
+ {
+ size_t z;
+ char pwb [4098]; /* arbitrarily using 4096 as maximum
+ allowed length */
+
+ /* at this point we are only getting the password from a
+ * file but in the future if we can get it from a pipe of
+ * some sort we can't count on the ReadAll to really know
+ * if we hit end of file and not just a pause in the
+ * streaming. VFS/KFS 2 will have to fix this somehow
+ */
+
+ rc = KFileReadAll (pwf, 0, pwb, sizeof pwb, &z);
+ if (rc)
+ ; /* failure to read password file: pass along rc */
+ else
+ {
+ /* trim off EOL if present */
+ char * pc;
+
+ pwb[z] = '\0'; /* force ASCIZ */
+
+ pc = string_chr (pwb, z, '\r');
+ if (pc)
+ {
+ *pc = '\0';
+ z = 1 + pc - pwb;
+ }
+ pc = string_chr (pwb, z, '\n');
+ if (pc)
+ {
+ *pc = '\0';
+ z = 1 + pc - pwb;
+ }
+ if (z == 0)
+ rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcTooShort);
+
+ else if (pwz < z) /* pwz came in as 4096 */
+ rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcTooLong);
+
+ else
+ {
+ memmove (pw, pwb, z+1);
+ }
+ }
+ KFileRelease (pwf);
+ }
+ VPathRelease (pwp);
}
}
- break;
+ VFSManagerRelease (mgr);
+ }
+ return rc;
+}
- case kptFile:
- case kptFile | kptAlias:
- rc = KDirectoryOpenSraArchiveRead_silent ( dir, &ldir, false, path );
- if ( rc != 0 )
- rc = KDirectoryOpenTarArchiveRead_silent ( dir, &ldir, false, path );
- if ( rc == 0 )
+
+/* not KDB specific - just uses vfs/krypto/kfs objects */
+static
+rc_t KDBOpenFileAsDirectory (const KDirectory * dir,
+ const char * path,
+ const KDirectory ** pdir,
+ uint32_t rcobj)
+{
+ const KFile * file;
+ const KFile * f;
+ const KDirectory * ldir;
+ bool encrypted = false;
+
+ rc_t rc;
+
+ *pdir = NULL;
+
+ rc = KDirectoryOpenFileRead (dir, &file, path);
+ if (rc == 0)
+ {
+ rc = KFileRandomAccess(file);
+ if (rc)
+ rc = RC (rcDB, rcMgr, rcOpening, rcobj, rcUnsupported);
+ else
{
- /* recheck this newly opened directory for KDB/KFS type */
- type = KDBPathType ( ldir, "." );
+ size_t tz;
+ char tbuff [4096];
+ char pbuff [4096 + 1];
- /* it its not the KDB type we wanted fail */
- if (( type != pathtype ) && (type != (pathtype | kptAlias )))
+ rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+ if (rc == 0)
{
- KDirectoryRelease (ldir);
- ldir = NULL;
- rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
+ if (KFileIsEnc (tbuff, tz) == 0)
+ {
+ encrypted = true;
+
+ rc = KDBOpenFileGetPassword (pbuff, sizeof (pbuff) - 1);
+ if (rc == 0)
+ {
+ KKey key;
+
+ rc = KKeyInitRead (&key, kkeyAES128, pbuff, string_size (pbuff));
+ if (rc == 0)
+ {
+ rc = KEncFileMakeRead (&f, file, &key);
+ if (rc == 0)
+ {
+ /* KEncFileMakeRead adds a reference */
+ KFileRelease (file);
+ file = f;
+ rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+ }
+ }
+ }
+ }
+ else if (KFileIsWGAEnc (tbuff, tz) == 0)
+ {
+ encrypted = true;
+
+ rc = KDBOpenFileGetPassword (pbuff, sizeof (pbuff) - 1);
+ if (rc == 0)
+ {
+ rc = KFileMakeWGAEncRead (&f, file, pbuff, string_size (pbuff));
+ if (rc == 0)
+ {
+ /* KFileMakeWGAEncRead adds a reference */
+ KFileRelease (file);
+ file = f;
+ rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+ }
+ }
+ }
+ /* else not a handled encryption or unencrypted: we can't distinguish too much */
+
+ if (rc == 0)
+ {
+ if (KFileIsSRA (tbuff, tz) == 0)
+ {
+ rc = KDirectoryOpenSraArchiveReadUnbounded_silent_preopened (dir,
+ &ldir,
+ false,
+ file,
+ path);
+ }
+ else
+ {
+ rc = KDirectoryOpenTarArchiveRead_silent_preopened (dir, &ldir, false,
+ file, path);
+ }
+
+ /* not an archive type we handle or a bad archive */
+ if (rc)
+ {
+ if (encrypted)
+ rc = RC ( rcDB, rcMgr, rcOpening, rcEncryptionKey, rcIncorrect );
+ else
+ rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
+ }
+ else
+ {
+ /*
+ * release our ownership of the KFile that but archive will
+ * keep theirs
+ */
+ KFileRelease (file);
+ *pdir = ldir;
+ return 0;
+ }
+ }
}
}
- else if ( rc != 0 )
- {
- rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
- }
- break;
+ KFileRelease (file);
}
+ return rc;
+}
+#endif
+
- if (( rc != 0 ) || (( type != pathtype ) && (type != (pathtype|kptAlias))))
+static rc_t KDBOpenPathTypeReadInt ( const KDBManager * mgr, const KDirectory * dir, const char * path,
+ const KDirectory ** pdir, int * type,
+ int pathtype, uint32_t rcobj, bool try_srapath )
+{
+ VFSManager * vmgr = mgr->vfsmgr;
+ const KDirectory * ldir = NULL;
+ rc_t rc = 0;
+
+ /* object relative opens can be done using KFS - we hacked in VFS after all */
+ if (! try_srapath)
{
- /* tune the error message based on path type */
- uint32_t obj;
- switch ( pathtype )
- {
- default:
- obj = rcType;
- break;
- case kptTable:
- case kptTable | kptAlias:
- case kptPrereleaseTbl:
- case kptPrereleaseTbl | kptAlias:
- obj = rcTable;
- break;
- case kptColumn:
- case kptColumn | kptAlias:
- obj = rcColumn;
- break;
- case kptDatabase:
- case kptDatabase | kptAlias:
- obj = rcDatabase;
- break;
- }
- switch ( type )
+ rc = KDirectoryOpenDirUpdate ((KDirectory*)dir, (KDirectory**)pdir, false, path);
+ if ((rc) && (GetRCState(rc) != rcNotFound))
+ rc = KDirectoryOpenDirRead (dir, pdir, false, path);
+ }
+ else
+ {
+ VPath * vpath;
+
+ /*
+ * We've got to decide if the path coming in is a full or relative
+ * path and if relative make it relative to dir or possibly its a srapath
+ * accession
+ *
+ */
+ rc = VPathMakeDirectoryRelative ( &vpath, dir, path, NULL );
+ if ( rc == 0 )
{
- case kptNotFound:
- rc = RC ( rcDB, rcMgr, rcOpening, obj, rcNotFound );
- break;
- case kptBadPath:
- rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcInvalid );
- break;
- default:
- rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
- break;
+ rc = VFSManagerOpenDirectoryReadDirectoryRelativeDecrypt ( vmgr, dir, &ldir, vpath );
+
+ if ( rc == 0 )
+ {
+ *type = (~kptAlias) & KDBPathType ( ldir, NULL, "." );
+
+ /* just a directory, not a kdb type */
+ if ( *type == kptDir )
+ rc = RC (rcDB, rcMgr, rcOpening, rcPath, rcIncorrect);
+
+ else if ( *type != pathtype )
+ {
+ KDirectoryRelease( ldir );
+ rc = RC ( rcDB, rcMgr, rcOpening, rcobj, rcIncorrect );
+ }
+ else
+ {
+ if ( pdir != NULL )
+ *pdir = ldir;
+ else
+ KDirectoryRelease( ldir );
+ }
+ }
+ VPathRelease ( vpath );
}
}
- if ((rc != 0) || ((ldir != NULL) && (pdir == NULL)))
+ return rc;
+}
+
+rc_t KDBOpenPathTypeRead ( const KDBManager * mgr, const KDirectory * dir, const char * path,
+ const KDirectory ** pdir, int pathtype, int * ppathtype, bool try_srapath )
+{
+ const KDirectory *ldir;
+ rc_t rc = 0;
+ uint32_t rcobj;
+ int type = kptNotFound; /* bogus? */
+
+/* KOutMsg ("%s: %s\n", __func__, path); */
+
+ if ( pdir != NULL )
+ *pdir = NULL;
+ if ( ppathtype != NULL )
+ *ppathtype = type;
+
+ switch (pathtype & ~ kptAlias) /* tune the error message based on path type */
{
- KDirectoryRelease ( ldir );
- ldir = NULL;
+ /* we'll hit this if we don't track defines in kdb/manager.h */
+ default:
+ rc = RC (rcDB, rcMgr, rcOpening, rcType, rcInvalid);
+ return rc;
+
+ case kptTable:
+ case kptPrereleaseTbl:
+ rcobj = rcTable;
+ break;
+
+ case kptColumn:
+ rcobj = rcColumn;
+ break;
+
+ case kptDatabase:
+ case kptDatabase | kptAlias:
+ rcobj = rcDatabase;
+ break;
}
- if (pdir != NULL)
- *pdir = ldir;
+ rc = KDBOpenPathTypeReadInt( mgr, dir, path, &ldir, &type, pathtype, rcobj, try_srapath );
+
+ if (rc == 0)
+ {
+ if ( ppathtype != NULL )
+ *ppathtype = type;
+
+ if (pdir != NULL)
+ *pdir = ldir;
+ else
+ KDirectoryRelease (ldir);
+ }
return rc;
}
@@ -426,6 +705,12 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
uint32_t access;
rc_t rc;
+ /* protect us from bad parameters */
+ if (dir == NULL)
+ return RC (rcDB, rcPath, rcAccessing, rcDirectory, rcNull);
+ if (path == NULL)
+ return RC (rcDB, rcPath, rcAccessing, rcPath, rcNull);
+
/* we have to be able to check the access if it is to be writable */
rc = KDirectoryVAccess ( dir, & access, path, NULL );
if ( rc == 0 )
@@ -463,12 +748,11 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
rc = RC ( rcDB, rcPath, rcAccessing, rcPath, rcIncorrect );
}
}
-
return rc;
}
-LIB_EXPORT bool CC KDBIsLocked ( const KDirectory *dir, const char *path )
+bool KDBIsLocked ( const KDirectory *dir, const char *path )
{
return ( KDBWritable (dir, path) != 0 );
}
@@ -555,10 +839,24 @@ rc_t KDBVMakeSubPath ( struct KDirectory const *dir,
subpath_max -= ns_size + 1;
}
+#if CRUFTY_USE_OF_RESOLVE_PATH
/* because this call only builds a path instead of resolving anything
* is is okay that we are using the wrong directory */
rc = KDirectoryVResolvePath ( dir, false,
subpath, subpath_max, path, args );
+#else
+ {
+ int sz = vsnprintf ( subpath, subpath_max, path, args );
+ if ( sz < 0 || ( size_t ) sz >= subpath_max )
+ rc = RC ( rcDB, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+ else if ( sz == 0 )
+ rc = RC ( rcDB, rcDirectory, rcResolving, rcPath, rcEmpty );
+ else
+ {
+ rc = 0;
+ }
+ }
+#endif
switch ( GetRCState ( rc ) )
{
case 0:
@@ -580,3 +878,57 @@ rc_t KDBVMakeSubPath ( struct KDirectory const *dir,
}
return rc;
}
+
+/* KDBMakeSubPath
+ * adds a namespace to path spec
+ */
+rc_t KDBMakeSubPath ( struct KDirectory const *dir,
+ char *subpath, size_t subpath_max, const char *ns,
+ uint32_t ns_size, const char *path, ... )
+{
+ rc_t rc = 0;
+ va_list args;
+ va_start(args, path);
+ rc = KDBVMakeSubPath(dir, subpath, subpath_max, ns, ns_size, path, args);
+ va_end(args);
+ return rc;
+}
+
+/* this is included to make kdb.c vs. wkdb.c file comparisons easier in [x]emacs.*/
+#if NOT_USED_IN_READ_ONLY_SIDE
+/* VDrop
+ */
+static
+rc_t KDBDropInt ( KDirectory * dir, const KDBManager * mgr,
+ const char * path )
+{
+}
+
+rc_t KDBMgrVDrop ( KDirectory * dir, const KDBManager * mgr, uint32_t obj_type,
+ const char * path, va_list args )
+{
+}
+#endif
+
+/* KDBIsPathUri
+ * A hack to get some of VFS into KDB that is too tightly bound to KFS
+ */
+
+bool KDBIsPathUri (const char * path)
+{
+ const char * pc;
+ size_t z;
+
+ z = string_size (path);
+
+ if (NULL != (pc = string_chr (path, z, ':')))
+ return true;
+
+ if (NULL != (pc = string_chr (path, z, '?')))
+ return true;
+
+ if (NULL != (pc = string_chr (path, z, '#')))
+ return true;
+
+ return false;
+}
diff --git a/libs/kdb/libkdb.vers b/libs/kdb/libkdb.vers
index 0495c4a..0b1f1ed 100644
--- a/libs/kdb/libkdb.vers
+++ b/libs/kdb/libkdb.vers
@@ -1 +1 @@
-1.2.3
+1.2.13
diff --git a/libs/kdb/libkdb.vers.h b/libs/kdb/libkdb.vers.h
deleted file mode 100644
index 1a165ff..0000000
--- a/libs/kdb/libkdb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBKDB_VERS 0x01020003
diff --git a/libs/kdb/libwkdb.vers b/libs/kdb/libwkdb.vers
index 0495c4a..0b1f1ed 100644
--- a/libs/kdb/libwkdb.vers
+++ b/libs/kdb/libwkdb.vers
@@ -1 +1 @@
-1.2.3
+1.2.13
diff --git a/libs/kdb/libwkdb.vers.h b/libs/kdb/libwkdb.vers.h
deleted file mode 100644
index 7e02097..0000000
--- a/libs/kdb/libwkdb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWKDB_VERS 0x01020003
diff --git a/libs/kdb/meta.c b/libs/kdb/meta.c
index 22fb7bf..dd39d85 100644
--- a/libs/kdb/meta.c
+++ b/libs/kdb/meta.c
@@ -41,6 +41,7 @@ struct KMDataNodeNamelist;
#undef KONST
#include <kdb/meta.h>
+#include <kdb/namelist.h>
#include <klib/container.h>
#include <klib/pbstree.h>
#include <klib/namelist.h>
@@ -49,6 +50,7 @@ struct KMDataNodeNamelist;
#include <kfs/mmap.h>
#include <klib/refcount.h>
#include <klib/debug.h>
+#include <klib/log.h>
#include <klib/rc.h>
#include <strtol.h>
#include <os-native.h>
@@ -63,6 +65,8 @@ struct KMDataNodeNamelist;
#include <assert.h>
#define KMETADATAVERS 2
+#define NODE_SIZE_LIMIT ( 25 * 1024 * 1024 )
+#define NODE_CHILD_LIMIT ( 100 * 1024 )
typedef struct KMDataNodeInflateData KMDataNodeInflateData;
@@ -71,6 +75,8 @@ struct KMDataNodeInflateData
const KMetadata *meta;
const KMDataNode *par;
BSTree *bst;
+ size_t node_size_limit;
+ uint32_t node_child_limit;
rc_t rc;
bool byteswap;
};
@@ -339,7 +345,7 @@ bool CC KMDataNodeInflate_v1 ( PBSTNode *n, void *data )
}
pb -> rc = RC ( rcDB, rcMetadata, rcConstructing, rcMemory, rcExhausted );
- free ( n );
+ free ( b );
return true;
}
@@ -358,6 +364,8 @@ rc_t KMDataNodeInflateAttr ( KMDataNode *n, bool byteswap )
pb . meta = n -> meta;
pb . par = n;
pb . bst = & n -> attr;
+ pb . node_size_limit = NODE_SIZE_LIMIT;
+ pb . node_child_limit = NODE_CHILD_LIMIT;
pb . rc = 0;
pb . byteswap = byteswap;
PBSTreeDoUntil ( bst, 0, KMAttrNodeInflate, & pb );
@@ -375,7 +383,8 @@ static
bool CC KMDataNodeInflate ( PBSTNode *n, void *data );
static
-rc_t KMDataNodeInflateChild ( KMDataNode *n, bool byteswap )
+rc_t KMDataNodeInflateChild ( KMDataNode *n,
+ size_t node_size_limit, uint32_t node_child_limit, bool byteswap )
{
PBSTree *bst;
rc_t rc = PBSTreeMake ( & bst, n -> value, n -> vsize, byteswap );
@@ -383,16 +392,45 @@ rc_t KMDataNodeInflateChild ( KMDataNode *n, bool byteswap )
rc = RC ( rcDB, rcMetadata, rcConstructing, rcData, rcCorrupt );
else
{
- KMDataNodeInflateData pb;
+ uint32_t bst_count = PBSTreeCount ( bst );
size_t bst_size = PBSTreeSize ( bst );
-
- pb . meta = n -> meta;
- pb . par = n;
- pb . bst = & n -> child;
- pb . rc = 0;
- pb . byteswap = byteswap;
- PBSTreeDoUntil ( bst, 0, KMDataNodeInflate, & pb );
- rc = pb . rc;
+ if ( bst_count > node_child_limit )
+ {
+ PLOGMSG ( klogWarn, ( klogWarn,
+ "refusing to inflate metadata node '$(node)' within file '$(path)': "
+ "number of children ($(num_children)) exceeds limit ($(limit))."
+ , "node=%s,path=%s,num_children=%u,limit=%u"
+ , n -> name
+ , n -> meta -> path
+ , bst_count
+ , node_child_limit )
+ );
+ }
+ else if ( bst_size > node_size_limit )
+ {
+ PLOGMSG ( klogWarn, ( klogWarn,
+ "refusing to inflate metadata node '$(node)' within file '$(path)': "
+ "node size ($(node_size)) exceeds limit ($(limit))."
+ , "node=%s,path=%s,node_size=%zu,limit=%zu"
+ , n -> name
+ , n -> meta -> path
+ , bst_size
+ , node_size_limit )
+ );
+ }
+ else
+ {
+ KMDataNodeInflateData pb;
+ pb . meta = n -> meta;
+ pb . par = n;
+ pb . bst = & n -> child;
+ pb . node_size_limit = node_size_limit;
+ pb . node_child_limit = node_child_limit;
+ pb . rc = 0;
+ pb . byteswap = byteswap;
+ PBSTreeDoUntil ( bst, 0, KMDataNodeInflate, & pb );
+ rc = pb . rc;
+ }
PBSTreeWhack ( bst );
@@ -440,7 +478,8 @@ bool CC KMDataNodeInflate ( PBSTNode *n, void *data )
pb -> rc = ( bits & 1 ) != 0 ? KMDataNodeInflateAttr ( b, pb -> byteswap ) : 0;
if ( pb -> rc == 0 )
{
- pb -> rc = ( bits & 2 ) != 0 ? KMDataNodeInflateChild ( b, pb -> byteswap ) : 0;
+ pb -> rc = ( bits & 2 ) != 0 ?
+ KMDataNodeInflateChild ( b, pb -> node_size_limit, pb -> node_child_limit, pb -> byteswap ) : 0;
if ( pb -> rc == 0 )
{
void *value;
@@ -468,7 +507,7 @@ bool CC KMDataNodeInflate ( PBSTNode *n, void *data )
BSTreeWhack ( & b -> attr, KMAttrNodeWhack, NULL );
}
- free ( n );
+ free ( b );
return true;
}
@@ -1567,6 +1606,8 @@ rc_t KMetadataPopulate ( KMetadata *self, const KDirectory *dir, const char *pat
pb . meta = self;
pb . par = self -> root;
pb . bst = & self -> root -> child;
+ pb . node_size_limit = NODE_SIZE_LIMIT;
+ pb . node_child_limit = NODE_CHILD_LIMIT;
pb . rc = 0;
pb . byteswap = self -> byteswap;
@@ -2082,7 +2123,7 @@ void CC KMDataNodeGrabName ( BSTNode *n, void *data )
list -> namelist [ list -> count ++ ] = ( ( const KMDataNode* ) n ) -> name;
}
-LIB_EXPORT rc_t CC KMDataNodeListChild ( const KMDataNode *self, KNamelist **names )
+LIB_EXPORT rc_t CC KMDataNodeListChildren ( const KMDataNode *self, KNamelist **names )
{
if ( names == NULL )
return RC ( rcDB, rcMetadata, rcListing, rcParam, rcNull );
diff --git a/libs/kdb/ptrieval-v2.c b/libs/kdb/ptrieval-v2.c
index c1ff270..7a8b939 100644
--- a/libs/kdb/ptrieval-v2.c
+++ b/libs/kdb/ptrieval-v2.c
@@ -61,6 +61,7 @@ struct KPTrieIndexCCParms_v2
bool key2id;
bool id2key;
bool all_ids;
+ bool convertFromV1;
bool failed;
};
@@ -68,7 +69,7 @@ struct KPTrieIndexCCParms_v2
*/
static
void KPTrieIndexCCParmsInit_v2 ( KPTrieIndexCCParms_v2 *pb,
- const KPTrieIndex_v2 *self, const KIndex *outer, bool key2id, bool id2key, bool all_ids )
+ const KPTrieIndex_v2 *self, const KIndex *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1 )
{
KIdStatsInit ( & pb -> stats );
pb -> rc = 0;
@@ -77,6 +78,7 @@ void KPTrieIndexCCParmsInit_v2 ( KPTrieIndexCCParms_v2 *pb,
pb -> key2id = key2id;
pb -> id2key = self -> ord2node ? id2key : false;
pb -> all_ids = all_ids;
+ pb -> convertFromV1 = convertFromV1;
pb -> failed = false;
}
@@ -111,7 +113,7 @@ void KPTrieIndexCCParmsWhack_v2 ( KPTrieIndexCCParms_v2 *pb )
static
bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
{
- KPTrieIndexCCParms_v2 *pb = data;
+ KPTrieIndexCCParms_v2 *pb = (KPTrieIndexCCParms_v2 *)data;
const KPTrieIndex_v2 *self = pb -> self;
rc_t rc;
@@ -121,48 +123,71 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
uint32_t i, ord;
/* detect conversion from v1 */
- if ( self -> id_bits == 0 )
+ if ( pb -> convertFromV1 && self -> id_bits == 0 )
{
- /* payload of v1 PTNode is a 32-bit spot id */
uint32_t id32;
+
+ /* payload of v1 PTNode is a 32-bit spot id */
assert ( n -> data . size == sizeof id32 );
memcpy ( & id32, n -> data . addr, sizeof id32 );
id = self -> byteswap ? bswap_32 ( id32 ) : id32;
- span = 1;
- ord = ( uint32_t ) ( id - self -> first + 1 );
}
else
{
/* native v2 */
/* TBD - should this pass n -> data . size * 8 ??? */
- rc = Unpack ( self -> id_bits, sizeof id * 8,
- n -> data . addr, 0, self -> id_bits, NULL,
- & id, sizeof id, & usize );
- if ( rc != 0 )
+ if ( self -> id_bits != 0 )
{
- PLOGMSG ( klogWarn, ( klogWarn, "could not determine row id of v2 node $(nid)",
+ rc = Unpack ( self -> id_bits, sizeof id * 8,
+ n -> data . addr, 0, self -> id_bits, NULL,
+ & id, sizeof id, & usize );
+ if ( rc != 0 )
+ {
+ PLOGMSG ( klogWarn, ( klogWarn, "could not determine row id of v2 node $(nid)",
"nid=0x%08x", n -> id ));
- pb -> failed = true;
- return false;
+ pb -> failed = true;
+ return false;
+ }
}
- id += self -> first;
-
- ord = KPTrieIndexID2Ord_v2 ( self, id );
- if ( ord == 0 )
+ else
{
- PLOGMSG ( klogWarn, ( klogWarn, "v2 node $(nid): row id $(rid) not found in trie",
- "nid=0x%08x,rid=%ld", n -> id, id ));
- pb -> failed = true;
- return false;
+ id = 0;
}
- if ( self -> ord2node != NULL )
+ id += self -> first;
+ }
+
+ /* convert from row-id to 1-based ordinal index */
+ ord = KPTrieIndexID2Ord_v2 ( self, id );
+ if ( ord == 0 )
+ {
+ /* 0 means not found */
+ PLOGMSG ( klogWarn, ( klogWarn, "v2 node $(nid): row id $(rid) not found in trie",
+ "nid=0x%08x,rid=%ld", n -> id, id ));
+ pb -> failed = true;
+ return false;
+ }
+
+ if ( self -> ord2node != NULL )
+ {
+ /* to calculate span of last entry, where
+ 1-based "ord" == the number of nodes,
+ just find the distance between the last row-id
+ in index ( self->maxid ) and the current row-id */
+ if ( ord == self -> count )
+ span = self -> maxid - id + 1;
+ else
{
- if ( ord == self -> count )
- span = self -> maxid - id + 1;
- else switch ( self -> variant )
+ /* from here on, we will use "ord" to be the
+ ZERO-BASED index of the slot FOLLOWING the
+ one corresponding to id. we want to find the
+ row-id AFTER the current one and calculate distance */
+ switch ( self -> variant )
{
+ /* linear array */
case 0:
+ /* starting with the FOLLOWING slot,
+ count duplicate entries */
for ( i = ord; i < self -> count; ++ i )
{
if ( n -> id != self -> ord2node [ i ] )
@@ -170,6 +195,10 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
}
span = self -> first + i - id;
break;
+
+ /* packed ordered array of sparse row-ids from here on
+ we already have "id" for this node, so the span will
+ be the distance from NEXT id - 1-based ord is 0-based next */
case 1:
span = self -> first + self -> id2ord . v8 [ ord ] - id;
break;
@@ -189,22 +218,22 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
return true;
}
}
- else if ( self -> span_bits == 0 )
- span = 1;
- else
+ }
+ else if ( self -> span_bits == 0 )
+ span = 1;
+ else
+ {
+ /* TBD - this case is never used in practice.
+ it would be an skey without a projection index */
+ rc = Unpack ( self -> span_bits, sizeof span * 8,
+ n -> data . addr, 0, self -> id_bits, NULL,
+ & span, sizeof span, & usize );
+ if ( rc != 0 )
{
- /* TBD - this case is never used in practice.
- it would be an skey without a projection index */
- rc = Unpack ( self -> span_bits, sizeof span * 8,
- n -> data . addr, 0, self -> id_bits, NULL,
- & span, sizeof span, & usize );
- if ( rc != 0 )
- {
- PLOGMSG ( klogWarn, ( klogWarn, "could not determine span of v2 node $(nid), row id $(rid)",
- "nid=0x%08x,rid=%ld", n -> id, id ));
- pb -> failed = true;
- return false;
- }
+ PLOGMSG ( klogWarn, ( klogWarn, "could not determine span of v2 node $(nid), row id $(rid)",
+ "nid=0x%08x,rid=%ld", n -> id, id ));
+ pb -> failed = true;
+ return false;
}
}
@@ -283,7 +312,7 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
size_t key_size, bsize = sizeof buffer;
if ( sizeof buffer <= orig -> size )
{
- key = malloc ( bsize = orig -> size + 1 );
+ key = (char *)malloc ( bsize = orig -> size + 1 );
if ( key == 0 )
{
pb -> rc = RC ( rcDB, rcIndex, rcValidating, rcMemory, rcExhausted );
@@ -334,7 +363,7 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
rc_t KPTrieIndexCheckConsistency_v2 ( const KPTrieIndex_v2 *self,
int64_t *start_id, uint64_t *id_range, uint64_t *num_keys,
uint64_t *num_rows, uint64_t *num_holes,
- const KIndex *outer, bool key2id, bool id2key, bool all_ids )
+ const KIndex *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1 )
{
rc_t rc = 0;
KPTrieIndexCCParms_v2 pb;
@@ -345,7 +374,7 @@ rc_t KPTrieIndexCheckConsistency_v2 ( const KPTrieIndex_v2 *self,
if ( ( key2id || id2key ) && outer == NULL )
return RC ( rcDB, rcIndex, rcValidating, rcSelf, rcNull );
- KPTrieIndexCCParmsInit_v2 ( & pb, self, outer, key2id, id2key, all_ids );
+ KPTrieIndexCCParmsInit_v2 ( & pb, self, outer, key2id, id2key, all_ids, convertFromV1 );
if ( PTrieDoUntil ( self -> key2id, KPTrieIndexCCVisit_v2, & pb ) )
rc = pb . rc;
else if ( pb . failed )
diff --git a/libs/kdb/table-cc.c b/libs/kdb/table-cc.c
index 38dbf3c..17bcb4a 100644
--- a/libs/kdb/table-cc.c
+++ b/libs/kdb/table-cc.c
@@ -38,13 +38,17 @@
#include "cc-priv.h"
#include <kdb/index.h>
+#include <kdb/meta.h>
+#include <kdb/kdb-priv.h>
#include <kfs/file.h>
#include <kfs/md5.h>
#include <klib/refcount.h>
+#include <klib/log.h> /* PLOGMSG */
#include <klib/rc.h>
#include <klib/namelist.h>
#include <kdb/namelist.h>
+
#include <os-native.h>
#include <sysalloc.h>
@@ -57,59 +61,127 @@
#undef index
-static
-rc_t KTableCheckMD5 ( const KTable *self, CCReportFunc report, void *ctx )
+static void KTableGetName(KTable const *self, char const **rslt)
{
char *sep;
+
+ *rslt = self->path;
+ sep = strrchr(self->path, '/');
+ if (sep != NULL)
+ *rslt = sep + 1;
+}
+static
+rc_t KTableCheckMD5 ( const KTable *self, CCReportFunc report, void *ctx )
+{
CCReportInfoBlock info;
memset ( & info, 0, sizeof info );
info.objType = kptTable;
- info.objName = self->path;
- sep = strrchr(self->path, '/');
- if (sep != NULL )
- info.objName = sep + 1;
+ KTableGetName(self, &info.objName);
return DirectoryCheckMD5 ( self->dir, "md5", & info, report, ctx );
}
-static
-rc_t KTableCheckColumns ( const KTable *self, int level, CCReportFunc report, void *ctx )
+#if 0
+static bool KTableCheckColumnsFilter(const KDirectory *dir, const char *name, void *data)
{
- uint32_t n;
- KNamelist *list;
- rc_t rc = KTableListCol(self, &list);
-
- if (rc)
- return rc;
+ return (KDirectoryPathType(dir, name) & ~kptAlias) == kptDir;
+}
+#endif
- rc = KNamelistCount(list, &n);
- if (rc == 0) {
- CCReportInfoBlock nfo;
+typedef struct KTableCheckColumn_pb_s {
+ KTable const *self;
+ CCReportFunc report;
+ void *rpt_ctx;
+ unsigned n;
+ int level;
+ uint32_t depth;
+ INSDC_SRA_platform_id platform;
+} KTableCheckColumn_pb_t;
+
+static rc_t CC KTableCheckColumn(const KDirectory *dir, uint32_t type, const char *name, void *data)
+{
+ KTableCheckColumn_pb_t *pb = (KTableCheckColumn_pb_t *)data;
+ CCReportInfoBlock info;
+
+ memset(&info, 0, sizeof(info));
+
+ if ((type & ~kptAlias) != kptDir) {
+ char mesg[4096];
- memset(&nfo, 0, sizeof(nfo));
- nfo.objType = kptColumn;
+ snprintf(mesg, sizeof(mesg), "unexpected object '%s'", name);
+ KTableGetName(pb->self, &info.objName);
+ info.objId = 0;
+ info.objType = kptTable;
+ info.type = ccrpt_Done;
+ info.info.done.mesg = mesg;
+ info.info.done.rc = 0;
+ return pb->report(&info, pb->rpt_ctx);
+ }
+ else {
+ bool hasZombies;
+ INSDC_SRA_platform_id platform = pb->platform;
+ uint32_t ktype = KDBPathType(dir, &hasZombies, name);
+ rc_t rc;
- for ( nfo . objId = 0; nfo . objId != n && rc == 0; ++ nfo . objId )
- {
- rc = KNamelistGet ( list, nfo . objId, & nfo . objName );
- if ( rc == 0 )
- {
- const KColumn *col;
-
- rc = KTableOpenColumnRead ( self, & col, nfo . objName );
- if ( rc == 0 )
- {
- rc = KColumnConsistencyCheck ( col, level, &nfo, report, ctx );
- KColumnRelease ( col );
- }
+ info.objType = kptColumn;
+ info.objId = pb->n++;
+ info.objName = name;
+ info.type = ccrpt_Visit;
+ info.info.visit.depth = pb->depth + 1;
+ rc = pb->report(&info, pb->rpt_ctx);
+ if (rc) return rc;
+
+ info.type = ccrpt_Done;
+
+ if (hasZombies) {
+#if 0
+ info.info.done.rc = RC(rcDB, rcTable, rcValidating, rcFile, rcTooShort);
+#else
+ info.info.done.rc = 0;
+#endif
+ info.info.done.mesg = "Column may be truncated";
+ rc = pb->report(&info, pb->rpt_ctx);
+ if (rc) return rc;
+ }
+ info.info.done.rc = RC(rcDB, rcTable, rcValidating, rcType, rcIncorrect);
+ if ((ktype & ~kptAlias) == kptColumn) {
+ const KColumn *col;
+
+ info.info.done.rc = KTableOpenColumnRead(pb->self, &col, name);
+ if (info.info.done.rc == 0) {
+ info.info.done.rc = KColumnConsistencyCheck(col, pb->level, &info, pb->report, pb->rpt_ctx);
+ KColumnRelease(col);
+ return info.info.done.rc;
}
}
+ if (platform != SRA_PLATFORM_UNDEFINED && platform != SRA_PLATFORM_454
+ && name != NULL && name[0] != '\0' && strcmp(name, "SIGNAL") == 0)
+ {
+ (void)PLOGMSG(klogWarn, (klogWarn, "COLUMN '$(name)' IS INCOMPLETE",
+ "name=%s", name));
+ return 0;
+ }
+ info.info.done.mesg = "Failed to open column";
+ return pb->report(&info, pb->rpt_ctx);
}
+}
+
+static
+rc_t KTableCheckColumns ( const KTable *self, uint32_t depth, int level,
+ CCReportFunc report, void *ctx, INSDC_SRA_platform_id platform )
+{
+ KTableCheckColumn_pb_t pb;
- KNamelistRelease(list);
- return rc;
+ pb.self = self;
+ pb.report = report;
+ pb.rpt_ctx = ctx;
+ pb.n = 0;
+ pb.level = level;
+ pb.depth = depth;
+ pb.platform = platform;
+ return KDirectoryVVisit(self->dir, false, KTableCheckColumn, &pb, "col", NULL);
}
static
@@ -139,9 +211,11 @@ static const KDirectory *KTableFindIndexDir(const KTable *self)
}
static
-rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void *ctx)
+rc_t KTableCheckIndices(const KTable *self, uint32_t depth, int level, CCReportFunc report, void *ctx)
{
uint32_t n;
+ const KMetadata *meta;
+ int64_t max_row_id = 0;
KNamelist *list;
rc_t rc = KTableListIdx(self, &list);
@@ -152,6 +226,22 @@ rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void
return rc;
}
+ rc = KTableOpenMetadataRead ( self, & meta );
+ if ( rc == 0 )
+ {
+ const KMDataNode *seq;
+ rc = KMetadataOpenNodeRead ( meta, & seq, "/.seq/spot" );
+ if ( rc == 0 )
+ {
+ rc = KMDataNodeReadAsI64 ( seq, & max_row_id );
+ if ( rc != 0 )
+ max_row_id = 0;
+ KMDataNodeRelease ( seq );
+ }
+
+ KMetadataRelease ( meta );
+ }
+
rc = KNamelistCount(list, &n);
if ( rc == 0 )
{
@@ -169,7 +259,11 @@ rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void
rc = KNamelistGet(list, nfo.objId, &nfo.objName);
if ( rc != 0 )
break;
-
+
+ nfo.type = ccrpt_Visit;
+ nfo.info.visit.depth = depth + 1;
+ rc = report(&nfo, ctx); if (rc) break;
+
rc = KTableCheckIndexMD5(idxDir, &nfo, report, ctx);
if (rc == 0 && level > 0)
{
@@ -184,6 +278,8 @@ rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void
}
else
{
+ KIndexSetMaxRowId ( idx, max_row_id );
+
nfo.type = ccrpt_Index;
rc = KIndexConsistencyCheck(idx, level < 3 ? 1 : 3,
&nfo.info.index.start_id,
@@ -214,22 +310,69 @@ rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void
}
LIB_EXPORT
-rc_t CC KTableConsistencyCheck(const KTable *self, uint32_t level,
- CCReportFunc report, void *ctx)
+rc_t CC KTableConsistencyCheck(const KTable *self, uint32_t depth, uint32_t level,
+ CCReportFunc report, void *ctx, INSDC_SRA_platform_id platform)
{
rc_t rc = 0;
+ uint32_t type;
+ bool indexOnly = level & CC_INDEX_ONLY;
+ if (indexOnly) {
+ level &= ~CC_INDEX_ONLY;
+ }
+
if (self == NULL)
return RC(rcDB, rcTable, rcValidating, rcSelf, rcNull);
- if (KDirectoryPathType(self->dir, "md5") != kptNotFound)
- rc = KTableCheckMD5(self, report, ctx);
+ if (depth == 0) {
+ CCReportInfoBlock info;
+
+ KTableGetName(self, &info.objName);
+ info.objId = 0;
+ info.objType = kptTable;
+ info.type = ccrpt_Visit;
+ info.info.visit.depth = 0;
+
+ rc = report(&info, ctx);
+ if (rc) return rc;
+ }
+
+ type = KDirectoryPathType(self->dir, "md5");
+ if (type == kptZombieFile) {
+ CCReportInfoBlock info;
+
+ KTableGetName(self, &info.objName);
+ info.objId = 0;
+ info.objType = kptTable;
+ info.type = ccrpt_Done;
+ info.info.done.mesg = "Table may be truncated";
+ info.info.done.rc = 0;
+
+ rc = report(&info, ctx);
+ }
+ else if (type != kptNotFound) {
+ if (!indexOnly) {
+ rc = KTableCheckMD5(self, report, ctx);
+ }
+ }
+ else {
+ CCReportInfoBlock info;
+
+ KTableGetName(self, &info.objName);
+ info.objId = 0;
+ info.objType = kptTable;
+ info.type = ccrpt_Done;
+ info.info.done.mesg = "missing md5 file";
+ info.info.done.rc = 0;
+
+ rc = report(&info, ctx);
+ }
- if ( rc == 0 )
- rc = KTableCheckColumns(self, level, report, ctx);
+ if ( rc == 0 && ! indexOnly )
+ rc = KTableCheckColumns(self, depth, level, report, ctx, platform);
if ( rc == 0 )
- rc = KTableCheckIndices(self, level, report, ctx);
+ rc = KTableCheckIndices(self, depth, level, report, ctx);
return rc;
}
diff --git a/libs/kdb/table.c b/libs/kdb/table.c
index 6f6477c..7a0ea75 100644
--- a/libs/kdb/table.c
+++ b/libs/kdb/table.c
@@ -35,11 +35,15 @@
#include <kdb/extern.h>
#include <klib/namelist.h>
+#include <klib/log.h>
#include <klib/rc.h>
+#include <klib/printf.h>
+#include <os-native.h>
#include <sysalloc.h>
#include <limits.h>
#include <stdlib.h>
+#include <stdio.h>
#include <string.h>
#include <assert.h>
@@ -49,6 +53,22 @@
* a collection of columns indexed by row id, metadata, indices
*/
+/* GetPath
+ * return the absolute path to table
+ */
+LIB_EXPORT rc_t CC KTableGetPath ( const KTable *self,
+ const char **path )
+{
+ if ( self == NULL )
+ return RC ( rcDB, rcTable, rcAccessing, rcSelf, rcNull );
+ if ( path == NULL )
+ return RC ( rcDB, rcTable, rcAccessing, rcParam, rcNull );
+
+ *path = self->path;
+
+ return 0;
+}
+
/* Whack
*/
static
@@ -191,24 +211,30 @@ rc_t KTableMake ( KTable **tblp, const KDirectory *dir, const char *path )
*/
static
rc_t KDBManagerVOpenTableReadInt ( const KDBManager *self,
- const KTable **tblp, const KDirectory *wd,
+ const KTable **tblp, const KDirectory *wd, bool try_srapath,
const char *path, va_list args )
{
+ rc_t rc;
+
char tblpath [ 4096 ];
- rc_t rc = KDirectoryVResolvePath ( wd, 1,
- tblpath, sizeof tblpath, path, args );
- if ( rc == 0 )
+ int z = ( args == NULL ) ?
+ snprintf ( tblpath, sizeof tblpath, path ):
+ vsnprintf ( tblpath, sizeof tblpath, path, args );
+ if ( z < 0 || ( size_t ) z >= sizeof tblpath )
+ rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcExcessive );
+ else
{
KTable *tbl;
const KDirectory *dir;
bool prerelease = false;
- rc = KDBOpenPathTypeRead ( wd, tblpath, &dir, kptTable, NULL );
+ rc = KDBOpenPathTypeRead ( self, wd, tblpath, &dir, kptTable, NULL, try_srapath );
if ( rc != 0 )
{
prerelease = true;
- rc = KDBOpenPathTypeRead ( wd, tblpath, &dir, kptPrereleaseTbl, NULL );
+ rc = KDBOpenPathTypeRead ( self, wd, tblpath, &dir, kptPrereleaseTbl, NULL, try_srapath );
}
+
if ( rc == 0 )
{
rc = KTableMake ( & tbl, dir, tblpath );
@@ -219,14 +245,13 @@ rc_t KDBManagerVOpenTableReadInt ( const KDBManager *self,
* tblp = tbl;
return 0;
}
-
KDirectoryRelease ( dir );
}
}
-
return rc;
}
+
LIB_EXPORT rc_t CC KDBManagerOpenTableRead ( const KDBManager *self,
const KTable **tbl, const char *path, ... )
{
@@ -240,6 +265,7 @@ LIB_EXPORT rc_t CC KDBManagerOpenTableRead ( const KDBManager *self,
return rc;
}
+
LIB_EXPORT rc_t CC KDBManagerVOpenTableRead ( const KDBManager *self,
const KTable **tbl, const char *path, va_list args )
{
@@ -251,7 +277,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenTableRead ( const KDBManager *self,
if ( self == NULL )
return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
- return KDBManagerVOpenTableReadInt ( self, tbl, self -> wd, path, args );
+ return KDBManagerVOpenTableReadInt ( self, tbl, self -> wd, true, path, args);
}
LIB_EXPORT rc_t CC KDatabaseOpenTableRead ( const KDatabase *self,
@@ -286,7 +312,7 @@ LIB_EXPORT rc_t CC KDatabaseVOpenTableRead ( const KDatabase *self,
if ( rc == 0 )
{
rc = KDBManagerVOpenTableReadInt ( self -> mgr, tblp,
- self -> dir, path, NULL );
+ self -> dir, false, path, NULL );
if ( rc == 0 )
{
KTable *tbl = ( KTable* ) * tblp;
@@ -373,6 +399,75 @@ LIB_EXPORT bool CC KTableExists ( const KTable *self, uint32_t type, const char
}
+/* IsAlias
+ * returns true if object name is an alias
+ * returns path to fundamental name if it was aliased
+ *
+ * "type" [ IN ] - a KDBPathType
+ * valid values are kptIndex and kptColumn
+ *
+ * "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ * for fundamenta object name if "alias" is not a fundamental name,
+ *
+ * "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC KTableIsAlias ( const KTable *self, uint32_t type,
+ char *resolved, size_t rsize, const char *name )
+{
+ if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+ {
+ rc_t rc;
+ const char *ns;
+ char path [ 256 ];
+
+ switch ( type )
+ {
+ case kptIndex:
+ ns = "idx";
+ break;
+
+ case kptColumn:
+ ns = "col";
+ break;
+
+ default:
+ return false;
+ }
+
+ rc = KDBMakeSubPath ( self -> dir, path, sizeof path, ns, 3, name );
+ if ( rc == 0 )
+ {
+ switch ( KDirectoryPathType ( self -> dir, path ) )
+ {
+ case kptFile | kptAlias:
+ case kptDir | kptAlias:
+ if ( resolved != NULL && rsize != 0 )
+ {
+ const KDirectory *sub;
+ rc = KDirectoryOpenDirRead ( self -> dir, & sub, false, ns );
+ * resolved = 0;
+ if ( rc != 0 )
+ PLOGERR ( klogWarn, ( klogWarn, rc, "failed to open subdirectory '$(sub)'", "sub=%s", ns ) );
+ else
+ {
+ rc = KDirectoryResolveAlias ( sub, false, resolved, rsize, name );
+ KDirectoryRelease ( sub );
+ if ( rc != 0 )
+ PLOGERR ( klogWarn, ( klogWarn, rc, "failed to resolve alias '$(alias)'", "alias=%s", name ) );
+ }
+ }
+ return true;
+ }
+ }
+ }
+
+ if ( resolved != NULL && rsize != 0 )
+ * resolved = 0;
+
+ return false;
+}
+
+
/* Writable
* returns 0 if object is writable
* or a reason why if not
@@ -542,18 +637,30 @@ LIB_EXPORT rc_t CC KTableModDate ( const KTable *self, KTime_t *mtime )
/* List
* create table listings
*/
+struct FilterData
+{
+ const KDBManager * mgr;
+ int type;
+};
+
static
-bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data )
+bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data_ )
{
- return KDBOpenPathTypeRead(dir, name, NULL, (intptr_t)data, NULL) == 0;
+ struct FilterData * data = data_;
+ return ( KDBOpenPathTypeRead ( data->mgr, dir, name, NULL, data->type, NULL, false ) == 0 );
}
LIB_EXPORT rc_t CC KTableListCol ( const KTable *self, KNamelist **names )
{
if ( self != NULL )
{
+ struct FilterData data;
+
+ data.mgr = self->mgr;
+ data.type = kptColumn;
+
return KDirectoryVList ( self -> dir,
- names, KDatabaseListFilter, ( void* ) kptColumn, "col", NULL );
+ names, KDatabaseListFilter, &data, "col", NULL );
}
if ( names != NULL )
diff --git a/libs/kdb/trieidx-v2.c b/libs/kdb/trieidx-v2.c
index befe35d..c0eeaa4 100644
--- a/libs/kdb/trieidx-v2.c
+++ b/libs/kdb/trieidx-v2.c
@@ -808,7 +808,7 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
#if V2FIND_RETURNS_SPAN
uint32_t *span,
#endif
- int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data )
+ int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data, bool convertFromV1 )
{
rc_t rc;
@@ -831,7 +831,7 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
size_t usize;
/* detect conversion from v1 */
- if ( self -> id_bits == 0 )
+ if ( convertFromV1 && self -> id_bits == 0 )
{
/* v1 stored tree will have just a 32-bit spot id as data */
uint32_t id;
@@ -843,9 +843,16 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
else
{
/* should be native v2 */
- rc = Unpack ( self -> id_bits, sizeof * start_id * 8,
- pnode . data . addr, 0, self -> id_bits, NULL,
- start_id, sizeof * start_id, & usize );
+ if ( self -> id_bits > 0 )
+ {
+ rc = Unpack ( self -> id_bits, sizeof * start_id * 8,
+ pnode . data . addr, 0, self -> id_bits, NULL,
+ start_id, sizeof * start_id, & usize );
+ }
+ else
+ {
+ rc = 0;
+ }
* start_id += self -> first;
}
@@ -981,7 +988,7 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
#if V2FIND_RETURNS_SPAN
uint32_t *span,
#endif
- int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data )
+ int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data, bool convertFromV1 )
{
/* search within persisted index */
if ( self -> pt . key2id != NULL )
@@ -990,7 +997,7 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
#if V2FIND_RETURNS_SPAN
span,
#endif
- custom_cmp, data );
+ custom_cmp, data, convertFromV1 );
}
return RC ( rcDB, rcIndex, rcSelecting, rcString, rcNotFound );
diff --git a/libs/kdb/trieval-v2.c b/libs/kdb/trieval-v2.c
index 6e07d23..e3e095b 100644
--- a/libs/kdb/trieval-v2.c
+++ b/libs/kdb/trieval-v2.c
@@ -38,12 +38,12 @@
rc_t KTrieIndexCheckConsistency_v2 ( const KTrieIndex_v2 *self,
int64_t *start_id, uint64_t *id_range, uint64_t *num_keys,
uint64_t *num_rows, uint64_t *num_holes,
- struct KIndex const *outer, bool key2id, bool id2key, bool all_ids )
+ struct KIndex const *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1 )
{
if ( self == NULL )
return RC ( rcDB, rcIndex, rcValidating, rcParam, rcNull );
return KPTrieIndexCheckConsistency_v2 ( & self -> pt,
start_id, id_range, num_keys, num_rows, num_holes,
- outer, key2id, id2key, all_ids );
+ outer, key2id, id2key, all_ids, convertFromV1 );
}
diff --git a/libs/kdb/wcolidx0.c b/libs/kdb/wcolidx0.c
index 070efc4..b16973a 100644
--- a/libs/kdb/wcolidx0.c
+++ b/libs/kdb/wcolidx0.c
@@ -198,7 +198,7 @@ rc_t KColumnIdx0Init_v1 ( KColumnIdx0 *self, bool bswap )
{
uint32_t count;
- rc = KFileRead ( self -> f, self -> eof,
+ rc = KFileReadAll ( self -> f, self -> eof,
buffer, 2048 * sizeof * buffer, & num_read );
if ( rc != 0 )
break;
@@ -247,7 +247,7 @@ rc_t KColumnIdx0Init ( KColumnIdx0 *self, uint32_t total, bool bswap )
if ( count > 2048 )
count = 2048;
- rc = KFileRead ( self -> f, i * sizeof * buffer,
+ rc = KFileReadAll ( self -> f, i * sizeof * buffer,
buffer, count * sizeof * buffer, & num_read );
if ( rc != 0 )
break;
diff --git a/libs/kdb/wcolidx1.c b/libs/kdb/wcolidx1.c
index 5fedfa7..a1f897e 100644
--- a/libs/kdb/wcolidx1.c
+++ b/libs/kdb/wcolidx1.c
@@ -155,7 +155,7 @@ rc_t KColumnIdx1Init ( KColumnIdx1 *self, uint32_t off, uint32_t count )
cnt = 2048;
/* read into buffer an even number of blocks */
- rc = KFileRead ( self -> f, off,
+ rc = KFileReadAll ( self -> f, off,
buffer, cnt * sizeof * buffer, & num_read );
if ( rc != 0 )
break;
@@ -314,7 +314,7 @@ rc_t KColumnIdx1OpenRead ( KColumnIdx1 *self, const KDirectory *dir,
{
KColumnHdr hdr;
size_t num_bytes;
- rc = KFileRead ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
+ rc = KFileReadAll ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
if ( rc == 0 )
{
if ( num_bytes == 0 )
@@ -367,7 +367,7 @@ rc_t KColumnIdx1OpenRead ( KColumnIdx1 *self, const KDirectory *dir,
if ( rc == 0 )
{
off = sizeof hdr . dad;
- rc = KFileRead ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
+ rc = KFileReadAll ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
if ( rc == 0 )
{
if ( num_bytes < KColumnHdrOffset ( hdr, v2 ) )
@@ -477,7 +477,7 @@ rc_t KColumnIdx1OpenUpdate ( KColumnIdx1 *self, KDirectory *dir,
{
KColumnHdr hdr;
size_t num_bytes;
- rc = KFileRead ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
+ rc = KFileReadAll ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
if ( rc == 0 )
{
/* if file was there, open will pass but if empty should be
@@ -533,7 +533,7 @@ rc_t KColumnIdx1OpenUpdate ( KColumnIdx1 *self, KDirectory *dir,
{
self -> convert = CONVERT_ON_SAVE_NONE;
off = sizeof hdr . dad; /* where to read in idx1 */
- rc = KFileRead ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
+ rc = KFileReadAll ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
if ( rc == 0 )
{
if ( num_bytes < KColumnHdrOffset ( hdr, v2 ) )
diff --git a/libs/kdb/wcolidx2.c b/libs/kdb/wcolidx2.c
index 667cc6b..563aa44 100644
--- a/libs/kdb/wcolidx2.c
+++ b/libs/kdb/wcolidx2.c
@@ -39,7 +39,7 @@
#include <string.h>
#include <assert.h>
-#define IDX2_READ_FILE_BUFFER 32 * 1024
+#define IDX2_READ_FILE_BUFFER 1024 * 1024
/*--------------------------------------------------------------------------
@@ -135,7 +135,7 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
rc = RC ( rcDB, rcIndex, rcSelecting, rcNoObj, rcUnsupported );
else
{
- char buffer [ 1024 ];
+ uint64_t buffer [ 1024 / 8 ]; /* make sure is uint64_t aligned */
void *block = buffer;
/* determine the number of entries in block */
@@ -153,7 +153,7 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
else
{
size_t num_read;
- rc = KFileRead ( self -> f, bloc -> pg, block, orig, & num_read );
+ rc = KFileReadAll ( self -> f, bloc -> pg, block, orig, & num_read );
if ( rc == 0 )
{
if ( num_read != orig )
diff --git a/libs/kdb/wcolumn.c b/libs/kdb/wcolumn.c
index eeaae12..d259b29 100644
--- a/libs/kdb/wcolumn.c
+++ b/libs/kdb/wcolumn.c
@@ -37,6 +37,7 @@
#include <kfs/md5.h>
#include <kfs/impl.h>
#include <klib/checksum.h>
+#include <klib/printf.h>
#include <klib/log.h>
#include <sysalloc.h>
@@ -554,7 +555,7 @@ rc_t KDBManagerVCreateColumnInt ( KDBManager *self,
{
KDirectory *dir;
- switch ( KDBPathType ( wd, colpath ) )
+ switch ( KDBPathType ( /*NULL,*/ wd, NULL, colpath ) )
{
case kptNotFound:
/* first good path */
@@ -614,7 +615,7 @@ rc_t KDBManagerVCreateColumnInt ( KDBManager *self,
case kptFile | kptAlias:
/* if we find a file, vary the failure if it is an archive that is a column
* or a non related file */
- if ( KDBOpenPathTypeRead ( wd, colpath, NULL, kptColumn, NULL ) == 0 )
+ if ( KDBOpenPathTypeRead ( self, wd, colpath, NULL, kptColumn, NULL, false ) == 0 )
return RC ( rcDB, rcMgr, rcCreating, rcDirectory, rcUnauthorized );
/* fall through */
default:
@@ -774,16 +775,14 @@ LIB_EXPORT rc_t CC KTableVCreateColumn ( KTable *self, KColumn **colp,
static
rc_t KDBManagerVOpenColumnReadInt ( const KDBManager *cself,
const KColumn **colp, const KDirectory *wd,
- const char *path, va_list args, bool *cached )
+ const char *path, va_list args, bool *cached, bool try_srapath )
{
char colpath [ 4096 ];
rc_t rc = KDirectoryVResolvePath ( wd, true,
colpath, sizeof colpath, path, args );
- if(cached != NULL ) *cached = false;
if ( rc == 0 )
{
KSymbol *sym;
- const KDirectory *dir;
/* if already open */
sym = KDBManagerOpenObjectFind (cself, colpath);
@@ -792,7 +791,8 @@ rc_t KDBManagerVOpenColumnReadInt ( const KDBManager *cself,
const KColumn *ccol;
rc_t obj;
- if(cached != NULL ) *cached = true;
+ if(cached != NULL ) *cached = true;
+
switch (sym->type)
{
case kptColumn:
@@ -824,32 +824,39 @@ rc_t KDBManagerVOpenColumnReadInt ( const KDBManager *cself,
obj = rcMetadata;
break;
}
- return RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
+ rc = RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
}
+ else
+ {
+ const KDirectory *dir;
- rc = KDBOpenPathTypeRead ( wd, colpath, &dir, kptColumn, NULL );
- if ( rc == 0 )
- {
- KColumn *col;
+ if ( cached != NULL )
+ *cached = false;
- rc = KColumnMakeRead ( & col, dir, colpath, NULL );
+ rc = KDBOpenPathTypeRead ( cself, wd, path, &dir, kptColumn, NULL, try_srapath );
if ( rc == 0 )
- {
- rc = KDBManagerInsertColumn ( (KDBManager*)cself, col );
+ {
+ KColumn *col;
+
+ rc = KColumnMakeRead ( & col, dir, colpath, NULL );
+
if ( rc == 0 )
{
- * colp = col;
- return 0;
+ rc = KDBManagerInsertColumn ( (KDBManager*)cself, col );
+ if ( rc == 0 )
+ {
+ * colp = col;
+ return 0;
+ }
+
+ KColumnRelease ( col );
}
- KColumnRelease ( col );
+ KDirectoryRelease ( dir );
}
-
- KDirectoryRelease ( dir );
}
}
-
return rc;
}
@@ -877,7 +884,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenColumnRead ( const KDBManager *self,
if ( self == NULL )
return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
- return KDBManagerVOpenColumnReadInt ( self, col, self -> wd, path, args , NULL);
+ return KDBManagerVOpenColumnReadInt ( self, col, self -> wd, path, args , NULL, true);
}
LIB_EXPORT rc_t CC KTableOpenColumnRead ( const KTable *self,
@@ -913,7 +920,7 @@ LIB_EXPORT rc_t CC KTableVOpenColumnRead ( const KTable *self,
{
bool col_is_cached;
rc = KDBManagerVOpenColumnReadInt ( self -> mgr,
- colp, self -> dir, path, NULL, &col_is_cached );
+ colp, self -> dir, path, NULL, &col_is_cached, false );
if ( rc == 0 )
{
KColumn *col = ( KColumn* ) * colp;
@@ -935,11 +942,16 @@ LIB_EXPORT rc_t CC KTableVOpenColumnRead ( const KTable *self,
*/
static
rc_t KDBManagerVOpenColumnUpdateInt ( KDBManager *self,
- KColumn **colp, KDirectory *wd, const char *path, va_list args )
+ KColumn **colp, KDirectory *wd, bool try_srapath,
+ const char *path, va_list args )
{
char colpath [ 4096 ];
- rc_t rc = KDirectoryVResolvePath ( wd, true,
- colpath, sizeof colpath, path, args );
+ rc_t rc;
+ size_t z;
+
+/* rc = KDirectoryVResolvePath ( wd, 1,
+ colpath, sizeof colpath, path, args ); */
+ rc = string_vprintf( colpath, sizeof colpath, &z, path, args );
if ( rc == 0 )
{
KSymbol * sym;
@@ -976,7 +988,7 @@ rc_t KDBManagerVOpenColumnUpdateInt ( KDBManager *self,
return RC ( rcDB, rcMgr, rcOpening, obj, rcBusy );
}
/* only open existing dbs */
- switch (KDBPathType ( wd, colpath ) )
+ switch (KDBPathType ( /*NULL,*/ wd, NULL, colpath ) )
{
case kptNotFound:
return RC ( rcDB, rcMgr, rcOpening, rcColumn, rcNotFound );
@@ -989,7 +1001,7 @@ rc_t KDBManagerVOpenColumnUpdateInt ( KDBManager *self,
* this should be changed to a readonly as it is not possible not
* disallowed. rcReadonly not rcUnauthorized
*/
- if ( KDBOpenPathTypeRead ( wd, colpath, NULL, kptColumn, NULL ) == 0 )
+ if ( KDBOpenPathTypeRead ( self, wd, colpath, NULL, kptColumn, NULL, try_srapath ) == 0 )
return RC ( rcDB, rcMgr, rcOpening, rcDirectory, rcUnauthorized );
/* fall through */
default:
@@ -1081,7 +1093,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenColumnUpdate ( KDBManager *self,
return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
return KDBManagerVOpenColumnUpdateInt
- ( self, col, self -> wd, path, args );
+ ( self, col, self -> wd, true, path, args );
}
LIB_EXPORT rc_t CC KTableOpenColumnUpdate ( KTable *self,
@@ -1119,7 +1131,7 @@ LIB_EXPORT rc_t CC KTableVOpenColumnUpdate ( KTable *self,
if ( rc == 0 )
{
rc = KDBManagerVOpenColumnUpdateInt ( self -> mgr,
- colp, self -> dir, path, NULL );
+ colp, self -> dir, false, path, NULL );
if ( rc == 0 )
{
KColumn *col = * colp;
@@ -1134,8 +1146,8 @@ bool KTableColumnNeedsReindex ( KTable *self, const char *colname )
if ( self != NULL )
{
char path [ 256 ];
- rc_t rc = KDBVMakeSubPath ( self -> dir,
- path, sizeof path, "col", 3, colname, NULL );
+ rc_t rc = KDBMakeSubPath ( self -> dir,
+ path, sizeof path, "col", 3, colname );
if ( rc == 0 )
{
uint64_t idx0_size;
diff --git a/libs/kdb/wdatabase.c b/libs/kdb/wdatabase.c
index 8b90916..1aa18e8 100644
--- a/libs/kdb/wdatabase.c
+++ b/libs/kdb/wdatabase.c
@@ -32,6 +32,8 @@
#include "wkdb-priv.h"
#include <klib/namelist.h>
#include <klib/symbol.h>
+#include <klib/log.h>
+#include <klib/printf.h>
#include <klib/rc.h>
#include <kfs/directory.h>
#include <kfs/file.h>
@@ -50,6 +52,20 @@
* connection to a database within file system
*/
+/* GetPath
+ * return the absolute path to DB
+ */
+LIB_EXPORT rc_t CC KDatabaseGetPath ( struct KDatabase const *self,
+ const char **path )
+{
+ if ( self == NULL )
+ return RC ( rcDB, rcDatabase, rcAccessing, rcSelf, rcNull );
+ if ( path == NULL )
+ return RC ( rcDB, rcDatabase, rcAccessing, rcParam, rcNull );
+ *path = self->path;
+ return 0;
+}
+
/* Whack
*/
static
@@ -286,7 +302,8 @@ rc_t KDBManagerVCreateDBInt ( KDBManager *self,
dbpath, sizeof dbpath, path, args );
if ( rc == 0 )
{
- int type = KDBPathType ( wd, dbpath );
+ /* we won't try accession resolution here */
+ int type = KDBPathType ( /*NULL,*/ wd, NULL, dbpath );
switch ( type )
{
case kptNotFound:
@@ -348,7 +365,7 @@ rc_t KDBManagerVCreateDBInt ( KDBManager *self,
case kptFile | kptAlias:
/* if we find a file, vary the failure if it is an archive that is a database
* or a non related file */
- if ( KDBOpenPathTypeRead ( wd, dbpath, NULL, kptDatabase, NULL ) == 0 )
+ if ( KDBOpenPathTypeRead ( self, wd, dbpath, NULL, kptDatabase, NULL, false ) == 0 )
return RC ( rcDB, rcMgr, rcCreating, rcDirectory, rcUnauthorized );
/* fall through */
default:
@@ -490,20 +507,16 @@ LIB_EXPORT rc_t CC KDatabaseVCreateDB ( KDatabase *self,
static
rc_t KDBManagerVOpenDBReadInt ( const KDBManager *cself,
const KDatabase **dbp, KDirectory *wd,
- const char *path, va_list args, bool *cached )
+ const char *path, va_list args, bool *cached, bool try_srapath )
{
- /* generate absolute path to db */
- char dbpath [ 4096 ];
- rc_t rc = KDirectoryVResolvePath ( wd, true,
- dbpath, sizeof dbpath, path, args );
-
- if ( cached != NULL )
- * cached = false;
+ rc_t rc;
+ char dbpath [4096];
+ size_t z;
+ rc = string_vprintf (dbpath, sizeof dbpath, &z, path, args);
if ( rc == 0 )
{
KSymbol *sym;
- const KDirectory *dir;
/* if already open */
sym = KDBManagerOpenObjectFind (cself, dbpath);
@@ -547,39 +560,42 @@ rc_t KDBManagerVOpenDBReadInt ( const KDBManager *cself,
obj = rcMetadata;
break;
}
- return RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
+ rc = RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
}
- rc = KDBOpenPathTypeRead ( wd, dbpath, &dir, kptDatabase, NULL );
-
- if ( rc == 0 )
- {
- KDatabase *db;
+ else
+ {
+ const KDirectory *dir;
- rc = KDatabaseMake ( &db, dir, dbpath, NULL, true );
+ if ( cached != NULL )
+ * cached = false;
+ /* open the directory if its a database */
+ rc = KDBOpenPathTypeRead ( cself, wd, dbpath, &dir, kptDatabase, NULL, try_srapath );
if ( rc == 0 )
{
- KDBManager *self = ( KDBManager* ) cself;
+ KDatabase *db;
- rc = KDBManagerInsertDatabase ( self, db );
+ rc = KDatabaseMake ( &db, dir, dbpath, NULL, true );
if ( rc == 0 )
{
- * dbp = db;
- return 0;
- }
+ KDBManager *self = ( KDBManager* ) cself;
-/* rc = RC ( rcDB, rcMgr, rcOpening, rcDatabase, rcBusy ); */
-
- free ( db );
+ rc = KDBManagerInsertDatabase ( self, db );
+ if ( rc == 0 )
+ {
+ * dbp = db;
+ return 0;
+ }
+ free (db);
+ }
+ KDirectoryRelease (dir);
}
-
- KDirectoryRelease ( dir );
}
}
-
return rc;
}
+
LIB_EXPORT rc_t CC KDBManagerOpenDBRead ( const KDBManager *self,
const KDatabase **db, const char *path, ... )
{
@@ -604,7 +620,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenDBRead ( const KDBManager *self,
if ( self == NULL )
return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
- return KDBManagerVOpenDBReadInt ( self, db, self -> wd, path, args, NULL );
+ return KDBManagerVOpenDBReadInt ( self, db, self -> wd, path, args, NULL, true );
}
LIB_EXPORT rc_t CC KDatabaseOpenDBRead ( const KDatabase *self,
@@ -640,7 +656,7 @@ LIB_EXPORT rc_t CC KDatabaseVOpenDBRead ( const KDatabase *self,
{
bool is_cached;
rc = KDBManagerVOpenDBReadInt ( self -> mgr, dbp,
- self -> dir, path, NULL, & is_cached );
+ self -> dir, path, NULL, & is_cached, false );
if ( rc == 0 && ! is_cached )
{
KDatabase *db = ( KDatabase* ) * dbp;
@@ -703,7 +719,7 @@ rc_t KDBManagerVOpenDBUpdateInt ( KDBManager *self,
return RC ( rcDB, rcMgr, rcOpening, obj, rcBusy );
}
/* only open existing dbs */
- switch (KDBPathType ( wd, dbpath ) )
+ switch (KDBPathType ( /*self,*/ wd, NULL, dbpath ) )
{
case kptNotFound:
return RC ( rcDB, rcMgr, rcOpening, rcDatabase, rcNotFound );
@@ -713,7 +729,7 @@ rc_t KDBManagerVOpenDBUpdateInt ( KDBManager *self,
case kptFile | kptAlias:
/* if we find a file, vary the failure if it is an archive that is a database
* or a non related file */
- if ( KDBOpenPathTypeRead ( wd, dbpath, NULL, kptDatabase, NULL ) == 0 )
+ if ( KDBOpenPathTypeRead ( self, wd, dbpath, NULL, kptDatabase, NULL, false ) == 0 )
return RC ( rcDB, rcMgr, rcOpening, rcDirectory, rcUnauthorized );
/* fall through */
default:
@@ -856,13 +872,53 @@ LIB_EXPORT bool CC KDatabaseLocked ( const KDatabase *self )
* returns true if requested object exists
*
* "type" [ IN ] - a KDBPathType
- * valid values are kptIndex and kptColumn
+ * valid values are kptTable
*
* "path" [ IN ] - NUL terminated path
*/
LIB_EXPORT bool CC KDatabaseVExists ( const KDatabase *self, uint32_t type, const char *name, va_list args )
{
- /* TBD */
+ if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+ {
+ rc_t rc;
+ size_t len;
+ const char *ns;
+ char path [ 256 ];
+
+ switch ( type )
+ {
+ case kptDatabase:
+ ns = "db";
+ len = 2;
+ break;
+
+ case kptTable:
+ ns = "tbl";
+ len = 3;
+ break;
+
+ case kptIndex:
+ ns = "idx";
+ len = 3;
+ break;
+
+ default:
+ return false;
+ }
+
+ rc = KDBVMakeSubPath ( self -> dir, path, sizeof path, ns, len, name, args );
+ if ( rc == 0 )
+ {
+ switch ( KDirectoryPathType ( self -> dir, path ) )
+ {
+ case kptFile:
+ case kptDir:
+ case kptFile | kptAlias:
+ case kptDir | kptAlias:
+ return true;
+ }
+ }
+ }
return false;
}
@@ -881,6 +937,83 @@ LIB_EXPORT bool CC KDatabaseExists ( const KDatabase *self, uint32_t type, const
}
+/* IsAlias
+ * returns true if object name is an alias
+ * returns path to fundamental name if it was aliased
+ *
+ * "type" [ IN ] - a KDBPathType
+ * valid values are kptDatabase, kptTable and kptIndex
+ *
+ * "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ * for fundamenta object name if "alias" is not a fundamental name,
+ *
+ * "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC KDatabaseIsAlias ( const KDatabase *self, uint32_t type,
+ char *resolved, size_t rsize, const char *name )
+{
+ if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+ {
+ rc_t rc;
+ size_t len;
+ const char *ns;
+ char path [ 256 ];
+
+ switch ( type )
+ {
+ case kptDatabase:
+ ns = "db";
+ len = 2;
+ break;
+
+ case kptTable:
+ ns = "tbl";
+ len = 3;
+ break;
+
+ case kptIndex:
+ ns = "idx";
+ len = 3;
+ break;
+
+ default:
+ return false;
+ }
+
+ rc = KDBMakeSubPath ( self -> dir, path, sizeof path, ns, len, name );
+ if ( rc == 0 )
+ {
+ switch ( KDirectoryPathType ( self -> dir, path ) )
+ {
+ case kptFile | kptAlias:
+ case kptDir | kptAlias:
+ if ( resolved != NULL && rsize != 0 )
+ {
+ const KDirectory *sub;
+ rc = KDirectoryOpenDirRead ( self -> dir, & sub, false, ns );
+ * resolved = 0;
+ if ( rc != 0 )
+ PLOGERR ( klogWarn, ( klogWarn, rc, "failed to open subdirectory '$(sub)'", "sub=%s", ns ) );
+ else
+ {
+ rc = KDirectoryResolveAlias ( sub, false, resolved, rsize, name );
+ KDirectoryRelease ( sub );
+ if ( rc != 0 )
+ PLOGERR ( klogWarn, ( klogWarn, rc, "failed to resolve alias '$(alias)'", "alias=%s", name ) );
+ }
+ }
+ return true;
+ }
+ }
+ }
+
+ if ( resolved != NULL && rsize != 0 )
+ * resolved = 0;
+
+ return false;
+}
+
+
/* Writable
* returns 0 if object is writable
* or a reason why if not
@@ -1303,19 +1436,29 @@ LIB_EXPORT rc_t CC KDatabaseModDate ( const KDatabase *self, KTime_t *mtime )
/* List
* create database listings
*/
+struct FilterData
+{
+ const KDBManager * mgr;
+ int type;
+};
+
static
-bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data )
+bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data_ )
{
- /* contains a pointer truncation from void* to long !!! on 64-bit-systems */
- return ( KDBOpenPathTypeRead ( dir, name, NULL, ( long int ) data, NULL ) == 0 );
+ struct FilterData * data = data_;
+ return ( KDBOpenPathTypeRead ( data->mgr, dir, name, NULL, data->type, NULL, false ) == 0 );
}
LIB_EXPORT rc_t CC KDatabaseListDB ( const KDatabase *self, KNamelist **names )
{
if ( self != NULL )
{
+ struct FilterData data;
+ data.mgr = self->mgr;
+ data.type = kptDatabase;
+
return KDirectoryVList ( self -> dir,
- names, KDatabaseListFilter, ( void* ) kptDatabase, "db", NULL );
+ names, KDatabaseListFilter, &data, "db", NULL );
}
if ( names != NULL )
@@ -1328,8 +1471,12 @@ LIB_EXPORT rc_t CC KDatabaseListTbl ( struct KDatabase const *self, KNamelist **
{
if ( self != NULL )
{
+ struct FilterData data;
+ data.mgr = self->mgr;
+ data.type = kptTable;
+
return KDirectoryVList ( self -> dir,
- names, KDatabaseListFilter, ( void* ) kptTable, "tbl", NULL );
+ names, KDatabaseListFilter, &data, "tbl", NULL );
}
if ( names != NULL )
@@ -1342,8 +1489,12 @@ LIB_EXPORT rc_t CC KDatabaseListIdx ( struct KDatabase const *self, KNamelist **
{
if ( self != NULL )
{
+ struct FilterData data;
+ data.mgr = self->mgr;
+ data.type = kptIndex;
+
return KDirectoryVList ( self -> dir,
- names, KDatabaseListFilter, ( void* ) kptIndex, "idx", NULL );
+ names, KDatabaseListFilter, &data, "idx", NULL );
}
if ( names != NULL )
diff --git a/libs/kdb/wdbmgr.c b/libs/kdb/wdbmgr.c
index 0896b48..7a5e70b 100644
--- a/libs/kdb/wdbmgr.c
+++ b/libs/kdb/wdbmgr.c
@@ -69,13 +69,15 @@ LIB_EXPORT rc_t CC KDBManagerMakeUpdate ( KDBManager **mgrp, KDirectory *wd )
* or a reason why if not
*
* "path" [ IN ] - NUL terminated path
+ *
+ * TBD: Better reasons for non local paths
*/
static
rc_t KDBManagerWritableInt ( const KDirectory * dir, const char * path )
{
rc_t rc;
- int type = KDBPathType ( dir, path ) & ~ kptAlias;
+ int type = KDBPathType ( /*NULL,*/ dir, NULL, path ) & ~ kptAlias;
switch ( type )
{
case kptDatabase:
@@ -321,13 +323,12 @@ LIB_EXPORT rc_t CC KDBManagerRunPeriodicTasks ( const KDBManager *self )
LIB_EXPORT int CC KDBManagerVPathType ( const KDBManager * self, const char *path, va_list args )
{
- rc_t rc;
- char full [ 8192 ];
-
- rc = KDirectoryVResolvePath ( self->wd, false, full, sizeof full, path, args );
- if (rc == 0)
+ if ( self != NULL )
{
- return KDBPathType ( self->wd, full );
+ char full [ 4096 ];
+ rc_t rc = KDirectoryVResolvePath ( self -> wd, false, full, sizeof full, path, args );
+ if ( rc == 0 )
+ return KDBPathType ( /*self,*/ self -> wd, NULL, full );
}
return kptBadPath;
}
diff --git a/libs/kdb/windex.c b/libs/kdb/windex.c
index ee75eee..7a3b317 100644
--- a/libs/kdb/windex.c
+++ b/libs/kdb/windex.c
@@ -71,6 +71,7 @@ struct KIndex
KTrieIndex_v2 txt2;
KU64Index_v3 u64_3;
} u;
+ bool converted_from_v1;
uint8_t type;
uint8_t read_only;
uint8_t dirty;
@@ -129,7 +130,7 @@ rc_t KIndexWhack ( KIndex *self )
{
self -> mgr = NULL;
- rc = RC ( rcDB, rcIndex, rcDestroying, rcIndex, rcBadVersion );
+ rc = SILENT_RC ( rcDB, rcIndex, rcDestroying, rcIndex, rcBadVersion );
/* complete */
switch ( self -> type )
@@ -270,6 +271,9 @@ rc_t KIndexAttach ( KIndex *self, const KMMap *mm, bool *byteswap )
switch ( hdr -> version )
{
case 1:
+#if KDBINDEXVERS != 1
+ self -> converted_from_v1 = true;
+#endif
case 2:
self -> type = kitText;
break;
@@ -673,7 +677,7 @@ rc_t KDBManagerCreateIndexInt ( KDBManager *self, KIndex **idxp,
if ( rc == 0 )
{
KIndex *idx;
- switch ( ptype = KDBPathType ( wd, idxpath ) )
+ switch ( ptype = KDBPathType ( wd, NULL, idxpath ) )
{
case kptNotFound:
/* first good path */
@@ -1504,10 +1508,10 @@ LIB_EXPORT rc_t CC KIndexFindText ( const KIndex *self, const char *key, int64_t
case 3:
case 4:
#if V2FIND_RETURNS_SPAN
- rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, start_id, & span, custom_cmp, data );
+ rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, start_id, & span, custom_cmp, data, self -> converted_from_v1 );
#else
( void ) ( span = 0 );
- rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, start_id, custom_cmp, data );
+ rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, start_id, custom_cmp, data, self -> converted_from_v1 );
#endif
break;
default:
@@ -1561,9 +1565,9 @@ LIB_EXPORT rc_t CC KIndexFindAllText ( const KIndex *self, const char *key,
case 3:
case 4:
#if V2FIND_RETURNS_SPAN
- rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, & id64, & span, NULL, NULL );
+ rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, & id64, & span, NULL, NULL, self -> converted_from_v1 );
#else
- rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, & id64, NULL, NULL );
+ rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, & id64, NULL, NULL, self -> converted_from_v1 );
#endif
if ( rc == 0 )
rc = ( * f ) ( id64, span, data );
diff --git a/libs/kdb/wkdb-priv.h b/libs/kdb/wkdb-priv.h
index b30d696..5f18aba 100644
--- a/libs/kdb/wkdb-priv.h
+++ b/libs/kdb/wkdb-priv.h
@@ -39,23 +39,22 @@
extern "C" {
#endif
+/*
+ * This symbol is inserted where the KDB is being tweaked to allow
+ * VFS URI syntax in opening KDB database objects initially to support
+ * krypto passwords more fully. By specifying the password source
+ * individually for opens two KDB objects with different passwords can be opened.
+ */
+#define SUPPORT_VFS_URI 1
+
/*--------------------------------------------------------------------------
* forwards
*/
struct BSTree;
struct BSTNode;
-
-
-/*--------------------------------------------------------------------------
- * KDBPathType
- */
-enum
-{
- kptMetadata = kptColumn + 1,
- kptPrereleaseTbl
-};
-
+struct KDirectory;
+struct KDBManager;
/*--------------------------------------------------------------------------
* KDB utility
@@ -64,8 +63,11 @@ enum
/* PathType
* checks type of path
+ *
+ * if mgr != NULL we will try accession and uri resolution on path
*/
-int KDBPathType ( const KDirectory *dir, const char *path );
+int KDBPathTypeDir ( const struct KDirectory *dir, int type,bool *zombies, const char *path );
+int KDBPathType ( const struct KDirectory *dir, bool *zombies, const char *path );
/* OpenPathType
* Opens a path if it is of the specified type. Even if it is an archive file
@@ -81,37 +83,37 @@ int KDBPathType ( const KDirectory *dir, const char *path );
* archive that is of the requested type. An archive will have been opened
* but reshut if dpdir is NULL.
*/
-rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path,
- const KDirectory ** dpdir, int pathtype, int * realpathtype );
+rc_t KDBOpenPathTypeRead ( const struct KDBManager * mgr, const struct KDirectory * dir, const char * path,
+ const struct KDirectory ** dpdir, int pathtype, int * realpathtype, bool try_srapath );
/* Writable
* examines a directory structure for any "lock" files
* examines a file for ( any ) write permission
*/
-bool KDBIsLocked ( const KDirectory *dir, const char *path );
-rc_t KDBWritable ( const KDirectory *dir, const char *path );
+bool KDBIsLocked ( const struct KDirectory *dir, const char *path );
+rc_t KDBWritable ( const struct KDirectory *dir, const char *path );
/* Lock
* performs directory locking
*/
-rc_t KDBLockDir ( KDirectory *dir, const char *path );
-rc_t KDBLockFile ( KDirectory *dir, const char *path );
+rc_t KDBLockDir ( struct KDirectory *dir, const char *path );
+rc_t KDBLockFile ( struct KDirectory *dir, const char *path );
/* Unlock
* performs directory unlocking
*/
-rc_t KDBUnlockDir ( KDirectory *dir, const char *path );
-rc_t KDBUnlockFile ( KDirectory *dir, const char *path );
+rc_t KDBUnlockDir ( struct KDirectory *dir, const char *path );
+rc_t KDBUnlockFile ( struct KDirectory *dir, const char *path );
/* GetObjModDate
* extract mod date from a path
*/
-rc_t KDBGetObjModDate ( const KDirectory *dir, KTime_t *mtime );
+rc_t KDBGetObjModDate ( const struct KDirectory *dir, KTime_t *mtime );
/* GetPathModDate
* extract mod date from a path
*/
-rc_t KDBVGetPathModDate ( const KDirectory *dir,
+rc_t KDBVGetPathModDate ( const struct KDirectory *dir,
KTime_t *mtime, const char *path, va_list args );
/* GetNamespaceString
@@ -120,28 +122,34 @@ rc_t KDBVGetPathModDate ( const KDirectory *dir,
*/
const char * KDBGetNamespaceString ( int namespace );
+/* KDBMakeSubPath
+ * adds a namespace to path spec
+ */
+rc_t KDBMakeSubPath ( struct KDirectory const *dir,
+ char *subpath, size_t subpath_max, const char *ns,
+ uint32_t ns_size, const char *path, ... );
/* VMakeSubPath
* adds a namespace to path spec
*/
-rc_t KDBVMakeSubPath ( const KDirectory *dir,
+rc_t KDBVMakeSubPath ( const struct KDirectory *dir,
char *subpath, size_t subpath_max, const char *ns,
uint32_t ns_size, const char *path, va_list args );
/* VDrop
*/
-rc_t KDBMgrVDrop ( KDirectory * dir, const KDBManager * mgr, uint32_t obj_type,
+rc_t KDBMgrVDrop ( struct KDirectory * dir, const struct KDBManager * mgr, uint32_t obj_type,
const char * path, va_list args );
-rc_t KDBVDrop ( KDirectory *dir, const KDBManager * mgr,
+rc_t KDBVDrop ( struct KDirectory *dir, const struct KDBManager * mgr,
uint32_t type, const char *name, va_list args );
/* Rename
*/
-rc_t KDBRename ( KDirectory *dir, KDBManager *mgr,
+rc_t KDBRename ( struct KDirectory *dir, struct KDBManager *mgr,
uint32_t type, bool force, const char *from, const char *to );
/* Alias
*/
-rc_t KDBAlias ( KDirectory *dir, uint32_t type,
+rc_t KDBAlias ( struct KDirectory *dir, uint32_t type,
const char *targ, const char *alias );
diff --git a/libs/kdb/wkdb.c b/libs/kdb/wkdb.c
index 102658b..cafad55 100644
--- a/libs/kdb/wkdb.c
+++ b/libs/kdb/wkdb.c
@@ -30,6 +30,16 @@
#include "kdbfmt-priv.h"
#include "dbmgr-priv.h"
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+#include <vfs/manager-priv.h>
+#include <sra/srapath.h>
+
#include <kfs/kfs-priv.h>
#include <kfs/directory.h>
#include <kfs/file.h>
@@ -46,12 +56,16 @@
#include <limits.h>
#include <stdlib.h>
+#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include <errno.h>
+#ifndef SUPPORT_VFS_URI
+#define SUPPORT_VFS_URI 0
+#endif
/*--------------------------------------------------------------------------
* (W)KDB utility
@@ -102,13 +116,14 @@ enum ScanBits
scan_ofile = ( 1 << 12 ),
scan_meta = ( 1 << 13 ),
scan_skey = ( 1 << 14 ),
- scan_sealed = ( 1 << 15 )
+ scan_sealed = ( 1 << 15 ),
+ scan_zombie = ( 1 << 16 )
};
static
rc_t CC scan_dbdir ( const KDirectory *dir, uint32_t type, const char *name, void *data )
{
- int *bits = data;
+ uint32_t *bits = data;
type &= kptAlias - 1;
@@ -186,7 +201,11 @@ rc_t CC scan_dbdir ( const KDirectory *dir, uint32_t type, const char *name, voi
* bits |= scan_ofile;
}
-
+ else if (type == kptZombieFile )
+ {
+ * bits |= scan_zombie;
+ }
+
return 0;
}
@@ -211,95 +230,119 @@ const char *KDBGetNamespaceString ( int namespace )
}
}
-int KDBPathType ( const KDirectory *dir, const char *path )
-{
- const char *leaf, *parent;
+int KDBPathTypeDir (const KDirectory * dir, int type, bool * pHasZombies, const char * path)
+{
+ const char * leaf, * parent;
+ uint32_t bits;
rc_t rc;
- int bits;
- int type = KDirectoryVPathType ( dir, path, NULL );
- switch ( type )
+
+ bits = 0;
+
+ assert ((type == kptDir) || (type == (kptDir|kptAlias)));
+
+ rc = KDirectoryVVisit ( dir, false, scan_dbdir, & bits, path, NULL );
+ if ( rc == 0 ) do
{
- case kptDir:
- case kptDir | kptAlias:
- bits = 0;
- rc = KDirectoryVVisit ( dir, false, scan_dbdir, & bits, path, NULL );
- if ( rc == 0 )
+ if ( ( bits & scan_zombie ) != 0 ) {
+ bits &= ~scan_zombie;
+ if (pHasZombies)
+ *pHasZombies = true;
+ }
+ /* look for a column */
+ if ( ( bits & scan_idxN ) != 0 &&
+ ( bits & ( scan_data | scan_dataN ) ) != 0 )
{
- /* look for a column */
- if ( ( bits & scan_idxN ) != 0 &&
- ( bits & ( scan_data | scan_dataN ) ) != 0 )
- {
- if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
- type += kptColumn - kptDir;
- break;
- }
+ if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+ type += kptColumn - kptDir;
+ break;
+ }
- /* look for a table */
- if ( ( bits & scan_col ) != 0 )
+ /* look for a table */
+ if ( ( bits & scan_col ) != 0 )
+ {
+ /* can't have sub-tables or a db */
+ if ( ( bits & ( scan_db | scan_tbl ) ) == 0 )
{
- /* can't have sub-tables or a db */
- if ( ( bits & ( scan_db | scan_tbl ) ) == 0 )
- {
- /* look for an old-structure table */
- if ( ( bits & ( scan_meta | scan_md ) ) == scan_meta ||
- ( bits & ( scan_skey | scan_idx ) ) == scan_skey )
- type += kptPrereleaseTbl - kptDir;
- else
- type += kptTable - kptDir;
- }
- break;
+ /* look for an old-structure table */
+ if ( ( bits & ( scan_meta | scan_md ) ) == scan_meta ||
+ ( bits & ( scan_skey | scan_idx ) ) == scan_skey )
+ type += kptPrereleaseTbl - kptDir;
+ else
+ type += kptTable - kptDir;
}
+ break;
+ }
- /* look for metadata */
- if ( ( bits & ( scan_cur | scan_rNNN ) ) != 0 )
- {
- if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
- type += kptMetadata - kptDir;
- break;
- }
+ /* look for metadata */
+ if ( ( bits & ( scan_cur | scan_rNNN ) ) != 0 )
+ {
+ if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+ type += kptMetadata - kptDir;
+ break;
+ }
- /* look for a database */
- if ( ( bits & scan_tbl ) != 0 )
- {
- if ( ( bits & scan_col ) == 0 )
- type += kptDatabase - kptDir;
- break;
- }
+ /* look for a database */
+ if ( ( bits & scan_tbl ) != 0 )
+ {
+ if ( ( bits & scan_col ) == 0 )
+ type += kptDatabase - kptDir;
+ break;
+ }
- /* look for a structured column */
- if ( ( bits & scan_odir ) != 0 )
+ /* look for a structured column */
+ if ( ( bits & scan_odir ) != 0 )
+ {
+ leaf = strrchr ( path, '/' );
+ if ( leaf != NULL )
{
- leaf = strrchr ( path, '/' );
- if ( leaf != NULL )
- {
- parent = string_rchr ( path, leaf - path, '/' );
- if ( parent ++ == NULL )
- parent = path;
- if ( memcmp ( parent, "col/", 4 ) != 0 )
- break;
+ parent = string_rchr ( path, leaf - path, '/' );
+ if ( parent ++ == NULL )
+ parent = path;
+ if ( memcmp ( parent, "col/", 4 ) != 0 )
+ break;
- bits = 0;
- if ( KDirectoryVVisit ( dir, 1, scan_dbdir, & bits, path, NULL ) == 0 )
+ bits = 0;
+ if ( KDirectoryVVisit ( dir, 1, scan_dbdir, & bits, path, NULL ) == 0 )
+ {
+ if ( ( bits & scan_idxN ) != 0 &&
+ ( bits & ( scan_data | scan_dataN ) ) != 0 )
{
- if ( ( bits & scan_idxN ) != 0 &&
- ( bits & ( scan_data | scan_dataN ) ) != 0 )
- {
- if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
- type += kptColumn - kptDir;
- break;
- }
+ if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+ type += kptColumn - kptDir;
+ break;
}
}
}
}
+ } while (0);
+
+ return type;
+}
+
+
+int KDBPathType ( const KDirectory *dir, bool *pHasZombies, const char *path )
+{
+ const char *leaf, *parent;
+
+
+ rc_t rc;
+ int type = KDirectoryVPathType ( dir, path, NULL );
+
+ if (pHasZombies)
+ *pHasZombies = false;
+
+ switch ( type )
+ {
+ case kptDir:
+ case kptDir | kptAlias:
+ type = KDBPathTypeDir (dir, type, pHasZombies, path);
break;
case kptFile:
case kptFile | kptAlias:
{
/* if we hit a file first try it as an archive */
- rc_t rc;
const KDirectory * ldir;
rc = KDirectoryOpenSraArchiveRead_silent ( dir, &ldir, false, path );
@@ -311,7 +354,7 @@ int KDBPathType ( const KDirectory *dir, const char *path )
/* recheck this newly opened directory for KDB/KFS type */
int type2;
- type2 = KDBPathType ( ldir, "." );
+ type2 = KDBPathType ( ldir, NULL, "." );
if ((type2 != kptDir) || (type != (kptDir|kptAlias)))
type = type2;
@@ -333,111 +376,341 @@ int KDBPathType ( const KDirectory *dir, const char *path )
break;
}
}
-
return type;
}
-rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path,
- const KDirectory ** pdir, int pathtype, int * ppathtype )
+
+#if SUPPORT_VFS_URI
+#else
+/* return configured password as ASCIZ
+ * opertates on vfs/kfs/kfg objects, not kdb objects */
+static
+rc_t KDBOpenFileGetPassword (char * pw, size_t pwz)
{
- rc_t rc = 0;
- uint32_t dtype;
- int type;
- const KDirectory * ldir;
+ VFSManager * mgr;
+ rc_t rc;
- /* set local directory pointer to error state NULL */
- ldir = NULL;
- rc = 0;
+ assert (pw);
+ assert (pwz);
- type = dtype = KDirectoryPathType (dir, path);
+ pw[0] = '\0';
- switch (dtype)
+ rc = VFSManagerMake (&mgr);
+ if (rc)
+ ; /* failure to make VFS manager: pass along rc */
+ else
{
- case kptDir:
- case kptDir | kptAlias:
- type = KDBPathType ( dir, path );
+ size_t pwfz;
+ char pwf [4096 + 1];
- if (( type == pathtype ) || (type == (pathtype|kptAlias)))
+ rc = VFSManagerGetConfigPWFile (mgr, pwf, sizeof (pwf) - 1, &pwfz);
+ if (rc)
+ /* failure to get password file path: tweak rc */
+ rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcNotFound);
+
+ else
{
- rc = KDirectoryVOpenDirUpdate ( ( KDirectory * ) dir, ( KDirectory ** ) & ldir, false, path, NULL );
- if ( rc != 0)
+ VPath * pwp;
+
+ pwf [pwfz] = '\0'; /* force to ASCIZ */
+
+ rc = VPathMakeSysPath (&pwp, pwf);
+
+ if (rc)
+ ; /* failure to construct a path from the string */
+
+ else
{
- rc = KDirectoryVOpenDirRead ( dir, &ldir, false, path, NULL );
+ const KFile * pwf;
+
+ rc = VFSManagerOpenFileRead (mgr, &pwf, pwp);
+ if (rc)
+ /* failure to open password file */
+ rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcNotOpen);
+
+ else
+ {
+ size_t z;
+ char pwb [4098]; /* arbitrarily using 4096 as maximum
+ allowed length */
+
+ /* at this point we are only getting the password from a
+ * file but in the future if we can get it from a pipe of
+ * some sort we can't count on the ReadAll to really know
+ * if we hit end of file and not just a pause in the
+ * streaming. VFS/KFS 2 will have to fix this somehow
+ */
+
+ rc = KFileReadAll (pwf, 0, pwb, sizeof pwb, &z);
+ if (rc)
+ ; /* failure to read password file: pass along rc */
+ else
+ {
+ /* trim off EOL if present */
+ char * pc;
+
+ pwb[z] = '\0'; /* force ASCIZ */
+
+ pc = string_chr (pwb, z, '\r');
+ if (pc)
+ {
+ *pc = '\0';
+ z = 1 + pc - pwb;
+ }
+ pc = string_chr (pwb, z, '\n');
+ if (pc)
+ {
+ *pc = '\0';
+ z = 1 + pc - pwb;
+ }
+ if (z == 0)
+ rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcTooShort);
+
+ else if (pwz < z) /* pwz came in as 4096 */
+ rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcTooLong);
+
+ else
+ {
+ memmove (pw, pwb, z+1);
+ }
+ }
+ KFileRelease (pwf);
+ }
+ VPathRelease (pwp);
}
}
- break;
+ VFSManagerRelease (mgr);
+ }
+ return rc;
+}
- case kptFile:
- case kptFile | kptAlias:
- rc = KDirectoryOpenSraArchiveRead_silent ( dir, &ldir, false, path );
- if ( rc != 0 )
- rc = KDirectoryOpenTarArchiveRead_silent ( dir, &ldir, false, path );
- if ( rc == 0 )
+
+/* not KDB specific - just uses vfs/krypto/kfs objects */
+static
+rc_t KDBOpenFileAsDirectory (const KDirectory * dir,
+ const char * path,
+ const KDirectory ** pdir,
+ uint32_t rcobj)
+{
+ const KFile * file;
+ const KFile * f;
+ const KDirectory * ldir;
+ bool encrypted = false;
+
+ rc_t rc;
+
+ *pdir = NULL;
+
+ rc = KDirectoryOpenFileRead (dir, &file, path);
+ if (rc == 0)
+ {
+ rc = KFileRandomAccess(file);
+ if (rc)
+ rc = RC (rcDB, rcMgr, rcOpening, rcobj, rcUnsupported);
+ else
{
- /* recheck this newly opened directory for KDB/KFS type */
- type = KDBPathType ( ldir, "." );
+ size_t tz;
+ char tbuff [4096];
+ char pbuff [4096 + 1];
- /* it its not the KDB type we wanted fail */
- if (( type != pathtype ) && (type != (pathtype | kptAlias )))
+ rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+ if (rc == 0)
{
- KDirectoryRelease (ldir);
- ldir = NULL;
- rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
+ if (KFileIsEnc (tbuff, tz) == 0)
+ {
+ encrypted = true;
+
+ rc = KDBOpenFileGetPassword (pbuff, sizeof (pbuff) - 1);
+ if (rc == 0)
+ {
+ KKey key;
+
+ rc = KKeyInitRead (&key, kkeyAES128, pbuff, string_size (pbuff));
+ if (rc == 0)
+ {
+ rc = KEncFileMakeRead (&f, file, &key);
+ if (rc == 0)
+ {
+ /* KEncFileMakeRead adds a reference */
+ KFileRelease (file);
+ file = f;
+ rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+ }
+ }
+ }
+ }
+ else if (KFileIsWGAEnc (tbuff, tz) == 0)
+ {
+ encrypted = true;
+
+ rc = KDBOpenFileGetPassword (pbuff, sizeof (pbuff) - 1);
+ if (rc == 0)
+ {
+ rc = KFileMakeWGAEncRead (&f, file, pbuff, string_size (pbuff));
+ if (rc == 0)
+ {
+ /* KFileMakeWGAEncRead adds a reference */
+ KFileRelease (file);
+ file = f;
+ rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+ }
+ }
+ }
+ /* else not a handled encryption or unencrypted: we can't distinguish too much */
+
+ if (rc == 0)
+ {
+ if (KFileIsSRA (tbuff, tz) == 0)
+ {
+ rc = KDirectoryOpenSraArchiveReadUnbounded_silent_preopened (dir,
+ &ldir,
+ false,
+ file,
+ path);
+ }
+ else
+ {
+ rc = KDirectoryOpenTarArchiveRead_silent_preopened (dir, &ldir, false,
+ file, path);
+ if (rc == 0)
+ KFileRelease (file);
+ }
+
+ /* not an archive type we handle or a bad archive */
+ if (rc)
+ {
+ if (encrypted)
+ rc = RC ( rcDB, rcMgr, rcOpening, rcEncryptionKey, rcIncorrect );
+ else
+ rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
+ }
+ else
+ {
+ /*
+ * release our ownership of the KFile that but archive will
+ * keep theirs
+ */
+ KFileRelease (file);
+ *pdir = ldir;
+ return 0;
+ }
+ }
}
}
- else if ( rc != 0 )
- {
- rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
- }
- break;
+ KFileRelease (file);
}
+ return rc;
+}
+#endif
+
- if (( rc != 0 ) || (( type != pathtype ) && (type != (pathtype|kptAlias))))
+static rc_t KDBOpenPathTypeReadInt ( const KDBManager * mgr, const KDirectory * dir, const char * path,
+ const KDirectory ** pdir, int * type,
+ int pathtype, uint32_t rcobj, bool try_srapath )
+{
+ VFSManager * vmgr = mgr->vfsmgr;
+ const KDirectory * ldir = NULL;
+ rc_t rc = 0;
+
+ /* object relative opens can be done using KFS - we hacked in VFS after all */
+ if (! try_srapath)
{
- /* tune the error message based on path type */
- uint32_t obj;
- switch ( pathtype )
- {
- default:
- obj = rcType;
- break;
- case kptTable:
- case kptTable | kptAlias:
- case kptPrereleaseTbl:
- case kptPrereleaseTbl | kptAlias:
- obj = rcTable;
- break;
- case kptColumn:
- case kptColumn | kptAlias:
- obj = rcColumn;
- break;
- case kptDatabase:
- case kptDatabase | kptAlias:
- obj = rcDatabase;
- break;
- }
- switch ( type )
+ rc = KDirectoryOpenDirUpdate ((KDirectory*)dir, (KDirectory**)pdir, false, path);
+ if ((rc) && (GetRCState(rc) != rcNotFound))
+ rc = KDirectoryOpenDirRead (dir, pdir, false, path);
+ }
+ else
+ {
+ VPath * vpath;
+
+ /*
+ * We've got to decide if the path coming in is a full or relative
+ * path and if relative make it relative to dir or possibly its a srapath
+ * accession
+ *
+ */
+ rc = VPathMakeDirectoryRelative ( &vpath, dir, path, NULL );
+ if ( rc == 0 )
{
- case kptNotFound:
- rc = RC ( rcDB, rcMgr, rcOpening, obj, rcNotFound );
- break;
- case kptBadPath:
- rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcInvalid );
- break;
- default:
- rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
- break;
+ rc = VFSManagerOpenDirectoryReadDirectoryRelativeDecrypt ( vmgr, dir, &ldir, vpath );
+
+ if ( rc == 0 )
+ {
+ *type = (~kptAlias) & KDBPathType ( ldir, NULL, "." );
+
+ /* just a directory, not a kdb type */
+ if ( *type == kptDir )
+ rc = RC (rcDB, rcMgr, rcOpening, rcPath, rcIncorrect);
+
+ else if ( *type != pathtype )
+ {
+ KDirectoryRelease( ldir );
+ rc = RC ( rcDB, rcMgr, rcOpening, rcobj, rcIncorrect );
+ }
+ else
+ {
+ if ( pdir != NULL )
+ *pdir = ldir;
+ else
+ KDirectoryRelease( ldir );
+ }
+ }
+ VPathRelease ( vpath );
}
}
- if ((rc != 0) || ((ldir != NULL) && (pdir == NULL)))
+ return rc;
+}
+
+rc_t KDBOpenPathTypeRead ( const KDBManager * mgr, const KDirectory * dir, const char * path,
+ const KDirectory ** pdir, int pathtype, int * ppathtype, bool try_srapath )
+{
+ const KDirectory *ldir;
+ rc_t rc = 0;
+ uint32_t rcobj;
+ int type = kptNotFound; /* bogus? */
+
+/* KOutMsg ("%s: %s\n", __func__, path); */
+
+ if ( pdir != NULL )
+ *pdir = NULL;
+ if ( ppathtype != NULL )
+ *ppathtype = type;
+
+ switch (pathtype & ~ kptAlias) /* tune the error message based on path type */
{
- KDirectoryRelease ( ldir );
- ldir = NULL;
+ /* we'll hit this if we don't track defines in kdb/manager.h */
+ default:
+ rc = RC (rcDB, rcMgr, rcOpening, rcType, rcInvalid);
+ return rc;
+
+ case kptTable:
+ case kptPrereleaseTbl:
+ rcobj = rcTable;
+ break;
+
+ case kptColumn:
+ rcobj = rcColumn;
+ break;
+
+ case kptDatabase:
+ case kptDatabase | kptAlias:
+ rcobj = rcDatabase;
+ break;
}
- if (pdir != NULL)
- *pdir = ldir;
+ rc = KDBOpenPathTypeReadInt( mgr, dir, path, &ldir, &type, pathtype, rcobj, try_srapath );
+
+ if (rc == 0)
+ {
+ if ( ppathtype != NULL )
+ *ppathtype = type;
+
+ if (pdir != NULL)
+ *pdir = ldir;
+ else
+ KDirectoryRelease (ldir);
+ }
return rc;
}
@@ -449,7 +722,6 @@ rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path,
*/
rc_t KDBWritable ( const KDirectory *dir, const char *path )
{
- /* we have to be able to check the access if it is to be writable */
uint32_t access;
rc_t rc;
@@ -508,7 +780,7 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
{
case kptFile:
case kptFile | kptAlias:
- rc = RC (rcDB, rcPath, rcAccessing, rcLock, rcLocked );
+ rc = RC ( rcDB, rcPath, rcAccessing, rcLock, rcLocked );
break;
case kptNotFound:
break;
@@ -528,7 +800,8 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
rc = RC ( rcDB, rcPath, rcAccessing, rcPath, rcInvalid);
break;
default:
- /* a bad "file" type with the name of our object
+ /* an illegal type of object named "lock" is in this directory
+ * which will block the ability to lock it
*/
rc = RC (rcDB, rcPath, rcAccessing, rcPath, rcUnexpected);
}
@@ -536,6 +809,7 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
return rc;
}
+
bool KDBIsLocked ( const KDirectory *dir, const char *path )
{
@@ -753,10 +1027,24 @@ rc_t KDBVMakeSubPath ( struct KDirectory const *dir,
subpath_max -= ns_size + 1;
}
+#if CRUFTY_USE_OF_RESOLVE_PATH
/* because this call only builds a path instead of resolving anything
* is is okay that we are using the wrong directory */
rc = KDirectoryVResolvePath ( dir, false,
subpath, subpath_max, path, args );
+#else
+ {
+ int sz = vsnprintf ( subpath, subpath_max, path, args );
+ if ( sz < 0 || ( size_t ) sz >= subpath_max )
+ rc = RC ( rcDB, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+ else if ( sz == 0 )
+ rc = RC ( rcDB, rcDirectory, rcResolving, rcPath, rcEmpty );
+ else
+ {
+ rc = 0;
+ }
+ }
+#endif
switch ( GetRCState ( rc ) )
{
case 0:
@@ -779,6 +1067,21 @@ rc_t KDBVMakeSubPath ( struct KDirectory const *dir,
return 0;
}
+/* KDBMakeSubPath
+ * adds a namespace to path spec
+ */
+rc_t KDBMakeSubPath ( struct KDirectory const *dir,
+ char *subpath, size_t subpath_max, const char *ns,
+ uint32_t ns_size, const char *path, ... )
+{
+ rc_t rc = 0;
+ va_list args;
+ va_start(args, path);
+ rc = KDBVMakeSubPath(dir, subpath, subpath_max, ns, ns_size, path, args);
+ va_end(args);
+ return rc;
+}
+
/* VDrop
*/
static
@@ -801,7 +1104,7 @@ rc_t KDBMgrVDrop ( KDirectory * dir, const KDBManager * mgr, uint32_t obj_type,
path, args );
if (rc == 0)
{
- int pt = KDBPathType ( dir, full_path );
+ int pt = KDBPathType ( /*mgr,*/ dir, NULL, full_path );
switch ( pt )
{
case kptNotFound:
@@ -868,7 +1171,7 @@ rc_t KDBVDrop ( KDirectory *dir, const KDBManager * mgr,
path, sizeof path, ns, ns_size, name, args );
if ( rc == 0 )
{
- int pt = KDBPathType ( dir, path );
+ int pt = KDBPathType ( /*mgr,*/ dir, NULL, path );
switch ( pt )
{
case kptNotFound:
@@ -892,7 +1195,7 @@ rc_t KDBVDrop ( KDirectory *dir, const KDBManager * mgr,
case kptFile | kptAlias:
case kptFile:
/* can we get here? Will we have needed to open for update to get here? */
- rc = KDBOpenPathTypeRead ( dir, path, NULL, type, NULL );
+ rc = KDBOpenPathTypeRead ( mgr, dir, path, NULL, type, NULL, false );
if ( rc == 0 )
return RC ( rcDB, rcDirectory, rcRemoving, rcPath, rcReadonly );
/* fall through */
@@ -950,12 +1253,12 @@ rc_t KDBRename ( KDirectory *dir, KDBManager *mgr, uint32_t type, bool force,
return RC ( rcDB, rcDirectory, rcRenaming, rcType, rcIncorrect );
}
- rc = KDBVMakeSubPath ( dir,
- src, sizeof src, ns, ns_size, from, NULL );
+ rc = KDBMakeSubPath ( dir,
+ src, sizeof src, ns, ns_size, from);
if ( rc == 0 )
{
char dst [ 256 ];
- int pt = KDBPathType ( dir, src );
+ int pt = KDBPathType ( /*mgr,*/ dir, NULL, src );
switch ( pt )
{
case kptNotFound:
@@ -980,8 +1283,8 @@ rc_t KDBRename ( KDirectory *dir, KDBManager *mgr, uint32_t type, bool force,
return RC ( rcDB, rcDirectory, rcRenaming, rcPath, rcIncorrect );
}
- rc = KDBVMakeSubPath ( dir,
- dst, sizeof dst, ns, ns_size, to, NULL );
+ rc = KDBMakeSubPath ( dir,
+ dst, sizeof dst, ns, ns_size, to );
if ( rc == 0 )
{
if ( KDirectoryVPathType ( dir, dst, NULL ) != kptNotFound )
@@ -1043,12 +1346,12 @@ rc_t KDBAlias ( KDirectory *dir, uint32_t type,
return RC ( rcDB, rcDirectory, rcAliasing, rcType, rcIncorrect );
}
- rc = KDBVMakeSubPath ( dir,
- src, sizeof src, ns, ns_size, targ, NULL );
+ rc = KDBMakeSubPath ( dir,
+ src, sizeof src, ns, ns_size, targ );
if ( rc == 0 )
{
char dst [ 256 ];
- int pt = KDBPathType ( dir, src );
+ int pt = KDBPathType ( /*NULL,*/ dir, NULL, src );
switch ( pt )
{
case kptNotFound:
@@ -1060,7 +1363,7 @@ rc_t KDBAlias ( KDirectory *dir, uint32_t type,
case kptTable | kptAlias:
case kptIndex | kptAlias:
case kptColumn | kptAlias:
- pt -= kptAlias;
+ pt &= ~ kptAlias;
case kptDatabase:
case kptTable:
@@ -1073,8 +1376,8 @@ rc_t KDBAlias ( KDirectory *dir, uint32_t type,
return RC ( rcDB, rcDirectory, rcAliasing, rcPath, rcIncorrect );
}
- rc = KDBVMakeSubPath ( dir,
- dst, sizeof dst, ns, ns_size, alias, NULL );
+ rc = KDBMakeSubPath ( dir,
+ dst, sizeof dst, ns, ns_size, alias );
if ( rc == 0 )
{
rc = KDirectoryCreateAlias ( dir,
@@ -1084,3 +1387,27 @@ rc_t KDBAlias ( KDirectory *dir, uint32_t type,
return rc;
}
+
+
+/* KDBIsPathUri
+ * A hack to get some of VFS into KDB that is too tightly bound to KFS
+ */
+
+bool KDBIsPathUri (const char * path)
+{
+ const char * pc;
+ size_t z;
+
+ z = string_size (path);
+
+ if (NULL != (pc = string_chr (path, z, ':')))
+ return true;
+
+ if (NULL != (pc = string_chr (path, z, '?')))
+ return true;
+
+ if (NULL != (pc = string_chr (path, z, '#')))
+ return true;
+
+ return false;
+}
diff --git a/libs/kdb/wmeta.c b/libs/kdb/wmeta.c
index 55ea58c..4a55b07 100644
--- a/libs/kdb/wmeta.c
+++ b/libs/kdb/wmeta.c
@@ -38,6 +38,7 @@ struct KMDataNodeNamelist;
#include "kdbfmt-priv.h"
#include <kdb/meta.h>
+#include <kdb/namelist.h>
#include <klib/container.h>
#include <klib/pbstree.h>
#include <klib/namelist.h>
@@ -47,12 +48,13 @@ struct KMDataNodeNamelist;
#include <kfs/md5.h>
#include <klib/symbol.h>
#include <klib/refcount.h>
-#include <klib/rc.h>
#include <klib/debug.h>
+#include <klib/log.h>
+#include <klib/rc.h>
#include <atomic.h>
-#include <strtol.h>
#include <os-native.h>
#include <sysalloc.h>
+#include <strtol.h>
#ifndef TRACK_REFERENCES
#define TRACK_REFERENCES 0
@@ -66,6 +68,8 @@ struct KMDataNodeNamelist;
#include <assert.h>
#define KMETADATAVERS 2
+#define NODE_SIZE_LIMIT ( 25 * 1024 * 1024 )
+#define NODE_CHILD_LIMIT ( 100 * 1024 )
typedef struct KMDataNodeInflateData KMDataNodeInflateData;
@@ -74,6 +78,8 @@ struct KMDataNodeInflateData
KMetadata *meta;
KMDataNode *par;
BSTree *bst;
+ size_t node_size_limit;
+ uint32_t node_child_limit;
rc_t rc;
bool byteswap;
};
@@ -392,7 +398,7 @@ bool CC KMDataNodeInflate_v1 ( PBSTNode *n, void *data )
}
pb -> rc = RC ( rcDB, rcMetadata, rcConstructing, rcMemory, rcExhausted );
- free ( n );
+ free ( b );
return true;
}
@@ -411,6 +417,8 @@ rc_t KMDataNodeInflateAttr ( KMDataNode *n, bool byteswap )
pb . meta = n -> meta;
pb . par = n;
pb . bst = & n -> attr;
+ pb . node_size_limit = 0;
+ pb . node_child_limit = 0;
pb . rc = 0;
pb . byteswap = byteswap;
PBSTreeDoUntil ( bst, 0, KMAttrNodeInflate, & pb );
@@ -428,7 +436,8 @@ static
bool CC KMDataNodeInflate ( PBSTNode *n, void *data );
static
-rc_t KMDataNodeInflateChild ( KMDataNode *n, bool byteswap )
+rc_t KMDataNodeInflateChild ( KMDataNode *n,
+ size_t node_size_limit, uint32_t node_child_limit, bool byteswap )
{
PBSTree *bst;
rc_t rc = PBSTreeMake ( & bst, n -> value, n -> vsize, byteswap );
@@ -436,16 +445,55 @@ rc_t KMDataNodeInflateChild ( KMDataNode *n, bool byteswap )
rc = RC ( rcDB, rcMetadata, rcConstructing, rcData, rcCorrupt );
else
{
- KMDataNodeInflateData pb;
+ uint32_t bst_count = PBSTreeCount ( bst );
size_t bst_size = PBSTreeSize ( bst );
+ bool inflate = node_child_limit == 0;
+ if ( ! inflate ) {
+ if ( bst_count > node_child_limit )
+ {
+ PLOGMSG ( klogWarn, ( klogWarn,
+ "refusing to inflate metadata node '$(node)' "
+ "within file '$(path)': "
+ "number of children ($(num_children)) "
+ "exceeds limit ($(limit))."
+ , "node=%s,path=%s,num_children=%u,limit=%u"
+ , n -> name
+ , n -> meta -> path
+ , bst_count
+ , node_child_limit )
+ );
+ }
+ else if ( bst_size > node_size_limit )
+ {
+ PLOGMSG ( klogWarn, ( klogWarn,
+ "refusing to inflate metadata node '$(node)' "
+ "within file '$(path)': "
+ "node size ($(node_size)) exceeds limit ($(limit))."
+ , "node=%s,path=%s,node_size=%zu,limit=%zu"
+ , n -> name
+ , n -> meta -> path
+ , bst_size
+ , node_size_limit )
+ );
+ }
+ else {
+ inflate = true;
+ }
+ }
- pb . meta = n -> meta;
- pb . par = n;
- pb . bst = & n -> child;
- pb . rc = 0;
- pb . byteswap = byteswap;
- PBSTreeDoUntil ( bst, 0, KMDataNodeInflate, & pb );
- rc = pb . rc;
+ if ( inflate ) {
+ KMDataNodeInflateData pb;
+
+ pb . meta = n -> meta;
+ pb . par = n;
+ pb . bst = & n -> child;
+ pb . node_size_limit = node_size_limit;
+ pb . node_child_limit = node_child_limit;
+ pb . rc = 0;
+ pb . byteswap = byteswap;
+ PBSTreeDoUntil ( bst, 0, KMDataNodeInflate, & pb );
+ rc = pb . rc;
+ }
PBSTreeWhack ( bst );
@@ -494,7 +542,8 @@ bool CC KMDataNodeInflate ( PBSTNode *n, void *data )
pb -> rc = ( bits & 1 ) != 0 ? KMDataNodeInflateAttr ( b, pb -> byteswap ) : 0;
if ( pb -> rc == 0 )
{
- pb -> rc = ( bits & 2 ) != 0 ? KMDataNodeInflateChild ( b, pb -> byteswap ) : 0;
+ pb -> rc = ( bits & 2 ) != 0 ?
+ KMDataNodeInflateChild ( b, pb -> node_size_limit, pb -> node_child_limit, pb -> byteswap ) : 0;
if ( pb -> rc == 0 )
{
void *value;
@@ -522,7 +571,7 @@ bool CC KMDataNodeInflate ( PBSTNode *n, void *data )
BSTreeWhack ( & b -> attr, KMAttrNodeWhack, NULL );
}
- free ( n );
+ free ( b );
return true;
}
@@ -2464,7 +2513,7 @@ rc_t KMetadataSever ( const KMetadata *self )
*/
static
-rc_t KMetadataPopulate ( KMetadata *self, const KDirectory *dir, const char *path )
+rc_t KMetadataPopulate ( KMetadata *self, const KDirectory *dir, const char *path, bool read_only )
{
const KFile *f;
rc_t rc = KDirectoryVOpenFileRead ( dir, & f, path, NULL );
@@ -2524,6 +2573,8 @@ rc_t KMetadataPopulate ( KMetadata *self, const KDirectory *dir, const char *pat
pb . meta = self;
pb . par = self -> root;
pb . bst = & self -> root -> child;
+ pb . node_size_limit = read_only ? NODE_SIZE_LIMIT : 0;
+ pb . node_child_limit = read_only ? NODE_CHILD_LIMIT : 0;
pb . rc = 0;
pb . byteswap = self -> byteswap;
@@ -2608,7 +2659,7 @@ rc_t KMetadataMake ( KMetadata **metap,
return 0;
}
- rc = KMetadataPopulate ( meta, dir, path );
+ rc = KMetadataPopulate ( meta, dir, path, read_only );
if ( rc == 0 )
{
KDirectoryAddRef ( dir );
@@ -2621,6 +2672,7 @@ rc_t KMetadataMake ( KMetadata **metap,
free ( meta );
}
+ * metap = NULL;
return rc;
}
@@ -2731,11 +2783,11 @@ rc_t KDBManagerOpenMetadataReadInt ( KDBManager *self,
* metap = meta;
return 0;
}
+
+ KMetadataRelease ( meta );
}
/* rc = RC ( rcDB, rcMgr, rcOpening, rcMetadata, rcExists ); */
-
- KMetadataRelease ( meta );
}
}
@@ -3462,7 +3514,7 @@ void CC KMDataNodeGrabName ( BSTNode *n, void *data )
list -> namelist [ list -> count ++ ] = ( ( const KMDataNode* ) n ) -> name;
}
-LIB_EXPORT rc_t CC KMDataNodeListChild ( const KMDataNode *self, KNamelist **names )
+LIB_EXPORT rc_t CC KMDataNodeListChildren ( const KMDataNode *self, KNamelist **names )
{
rc_t rc;
unsigned int count;
diff --git a/libs/kdb/wtable.c b/libs/kdb/wtable.c
index 5a463e1..9fe225a 100644
--- a/libs/kdb/wtable.c
+++ b/libs/kdb/wtable.c
@@ -37,6 +37,8 @@
#include <klib/namelist.h>
#include <klib/symbol.h>
#include <kdb/namelist.h>
+#include <klib/log.h>
+#include <klib/printf.h>
#include <klib/rc.h>
#include <kfs/directory.h>
#include <kfs/file.h>
@@ -58,6 +60,22 @@
* a collection of columns indexed by row id, metadata, indices
*/
+/* GetPath
+ * return the absolute path to table
+ */
+LIB_EXPORT rc_t CC KTableGetPath ( const KTable *self,
+ const char **path )
+{
+ if ( self == NULL )
+ return RC ( rcDB, rcTable, rcAccessing, rcSelf, rcNull );
+ if ( path == NULL )
+ return RC ( rcDB, rcTable, rcAccessing, rcParam, rcNull );
+
+ *path = self->path;
+
+ return 0;
+}
+
/* Whack
*/
static
@@ -365,7 +383,7 @@ rc_t KDBManagerVCreateTableInt ( KDBManager *self,
bool convert = false;
bool not_found = false;
- switch ( KDBPathType ( wd, tblpath ) )
+ switch ( KDBPathType ( /*NULL,*/ wd, NULL, tblpath ) )
{
case kptNotFound:
not_found = true;
@@ -404,8 +422,8 @@ rc_t KDBManagerVCreateTableInt ( KDBManager *self,
case kptFile | kptAlias:
/* if we find a file, vary the failure if it is an archive that is a table
* or a non related file */
- if (( KDBOpenPathTypeRead ( wd, tblpath, NULL, kptTable, NULL ) == 0 ) ||
- ( KDBOpenPathTypeRead ( wd, tblpath, NULL, kptPrereleaseTbl, NULL ) == 0 ) )
+ if (( KDBOpenPathTypeRead ( self, wd, tblpath, NULL, kptTable, NULL, false ) == 0 ) ||
+ ( KDBOpenPathTypeRead ( self, wd, tblpath, NULL, kptPrereleaseTbl, NULL, false ) == 0 ) )
return RC ( rcDB, rcMgr, rcCreating, rcTable, rcReadonly );
/* fall through */
default:
@@ -561,24 +579,27 @@ LIB_EXPORT rc_t CC KDatabaseVCreateTable ( KDatabase *self,
*/
static
rc_t KDBManagerVOpenTableReadInt ( const KDBManager *cself,
- const KTable **tblp, const KDirectory *wd,
+ const KTable **tblp, const KDirectory *wd, bool try_srapath,
const char *path, va_list args )
{
+ rc_t rc;
char tblpath [ 4096 ];
- rc_t rc = KDirectoryVResolvePath ( wd, true,
- tblpath, sizeof tblpath, path, args );
+ size_t z;
+
+/* rc = KDirectoryVResolvePath ( wd, 1,
+ tblpath, sizeof tblpath, path, args ); */
+ rc = string_vprintf( tblpath, sizeof tblpath, &z, path, args );
if ( rc == 0 )
{
KSymbol *sym;
- const KDirectory *dir;
- bool prerelease = false;
-
+
/* if already open */
sym = KDBManagerOpenObjectFind (cself, tblpath);
if (sym != NULL)
{
const KTable * ctbl;
rc_t obj;
+
switch (sym->type)
{
case kptTable:
@@ -594,7 +615,7 @@ rc_t KDBManagerVOpenTableReadInt ( const KDBManager *cself,
}
obj = rcTable;
break;
-
+
default:
obj = rcPath;
break;
@@ -611,39 +632,41 @@ rc_t KDBManagerVOpenTableReadInt ( const KDBManager *cself,
obj = rcMetadata;
break;
}
- return RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
+ rc = RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
}
- rc = KDBOpenPathTypeRead ( wd, tblpath, &dir, kptTable, NULL );
- if ( rc != 0 )
- {
- prerelease = true;
- rc = KDBOpenPathTypeRead ( wd, tblpath, &dir, kptPrereleaseTbl, NULL );
- }
-
- if ( rc == 0 )
+ else
{
- KTable *tbl;
+ KTable * tbl;
+ const KDirectory *dir;
+ bool prerelease = false;
- rc = KTableMake ( & tbl, dir, tblpath, NULL, true );
+ rc = KDBOpenPathTypeRead ( cself, wd, tblpath, &dir, kptTable, NULL, try_srapath );
+ if ( rc != 0 )
+ {
+ prerelease = true;
+ rc = KDBOpenPathTypeRead ( cself, wd, tblpath, &dir, kptPrereleaseTbl, NULL, try_srapath );
+ }
if ( rc == 0 )
{
- KDBManager *self = ( KDBManager* ) cself;
-
- rc = KDBManagerInsertTable ( self, tbl );
+ rc = KTableMake ( & tbl, dir, tblpath, NULL, true );
if ( rc == 0 )
{
- tbl -> prerelease = prerelease;
- * tblp = tbl;
- return 0;
- }
+ KDBManager * self = (KDBManager *)cself;
- free ( tbl );
- }
+ rc = KDBManagerInsertTable (self, tbl );
- KDirectoryRelease ( dir );
+ if (rc == 0)
+ {
+ tbl -> prerelease = prerelease;
+ * tblp = tbl;
+ return 0;
+ }
+ free ( tbl );
+ }
+ KDirectoryRelease ( dir );
+ }
}
}
-
return rc;
}
@@ -671,7 +694,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenTableRead ( const KDBManager *self,
if ( self == NULL )
return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
- return KDBManagerVOpenTableReadInt ( self, tbl, self -> wd, path, args );
+ return KDBManagerVOpenTableReadInt ( self, tbl, self -> wd, true, path, args );
}
LIB_EXPORT rc_t CC KDatabaseOpenTableRead ( const KDatabase *self,
@@ -706,7 +729,7 @@ LIB_EXPORT rc_t CC KDatabaseVOpenTableRead ( const KDatabase *self,
if ( rc == 0 )
{
rc = KDBManagerVOpenTableReadInt ( self -> mgr, tblp,
- self -> dir, path, NULL );
+ self -> dir, false, path, NULL );
if ( rc == 0 )
{
KTable *tbl = ( KTable* ) * tblp;
@@ -769,7 +792,7 @@ rc_t KDBManagerVOpenTableUpdateInt ( KDBManager *self,
return RC ( rcDB, rcMgr, rcOpening, obj, rcBusy );
}
/* only open existing tbls */
- switch ( KDBPathType ( wd, tblpath ) )
+ switch ( KDBPathType ( /*NULL,*/ wd, NULL, tblpath ) )
{
case kptNotFound:
return RC ( rcDB, rcMgr, rcOpening, rcTable, rcNotFound );
@@ -781,8 +804,8 @@ rc_t KDBManagerVOpenTableUpdateInt ( KDBManager *self,
case kptFile | kptAlias:
/* if we find a file, vary the failure if it is an archive that is a table
* or a non related file */
- if (( KDBOpenPathTypeRead ( wd, tblpath, NULL, kptTable, NULL ) == 0 ) ||
- ( KDBOpenPathTypeRead ( wd, tblpath, NULL, kptPrereleaseTbl, NULL ) == 0 ) )
+ if (( KDBOpenPathTypeRead ( self, wd, tblpath, NULL, kptTable, NULL, false ) == 0 ) ||
+ ( KDBOpenPathTypeRead ( self, wd, tblpath, NULL, kptPrereleaseTbl, NULL, false ) == 0 ) )
return RC ( rcDB, rcMgr, rcCreating, rcTable, rcUnauthorized );
/* fall through */
default:
@@ -987,6 +1010,75 @@ LIB_EXPORT bool CC KTableExists ( const KTable *self, uint32_t type, const char
}
+/* IsAlias
+ * returns true if object name is an alias
+ * returns path to fundamental name if it was aliased
+ *
+ * "type" [ IN ] - a KDBPathType
+ * valid values are kptIndex and kptColumn
+ *
+ * "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ * for fundamenta object name if "alias" is not a fundamental name,
+ *
+ * "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC KTableIsAlias ( const KTable *self, uint32_t type,
+ char *resolved, size_t rsize, const char *name )
+{
+ if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+ {
+ rc_t rc;
+ const char *ns;
+ char path [ 256 ];
+
+ switch ( type )
+ {
+ case kptIndex:
+ ns = "idx";
+ break;
+
+ case kptColumn:
+ ns = "col";
+ break;
+
+ default:
+ return false;
+ }
+
+ rc = KDBMakeSubPath ( self -> dir, path, sizeof path, ns, 3, name );
+ if ( rc == 0 )
+ {
+ switch ( KDirectoryPathType ( self -> dir, path ) )
+ {
+ case kptFile | kptAlias:
+ case kptDir | kptAlias:
+ if ( resolved != NULL && rsize != 0 )
+ {
+ const KDirectory *sub;
+ rc = KDirectoryOpenDirRead ( self -> dir, & sub, false, ns );
+ * resolved = 0;
+ if ( rc != 0 )
+ PLOGERR ( klogWarn, ( klogWarn, rc, "failed to open subdirectory '$(sub)'", "sub=%s", ns ) );
+ else
+ {
+ rc = KDirectoryResolveAlias ( sub, false, resolved, rsize, name );
+ KDirectoryRelease ( sub );
+ if ( rc != 0 )
+ PLOGERR ( klogWarn, ( klogWarn, rc, "failed to resolve alias '$(alias)'", "alias=%s", name ) );
+ }
+ }
+ return true;
+ }
+ }
+ }
+
+ if ( resolved != NULL && rsize != 0 )
+ * resolved = 0;
+
+ return false;
+}
+
+
/* Writable
* returns 0 if object is writable
* or a reason why if not
@@ -1211,7 +1303,7 @@ LIB_EXPORT rc_t CC KTableReindex ( KTable *self )
idx0 is used for cursor sessions */
if ( KTableColumnNeedsReindex ( self, name ) )
{
- rc = KTableVOpenColumnUpdate ( self, & col, name, NULL );
+ rc = KTableOpenColumnUpdate ( self, & col, name );
if ( rc != 0 )
{
if ( GetRCState ( rc ) == rcBusy )
@@ -1430,18 +1522,30 @@ LIB_EXPORT rc_t CC KTableModDate ( const KTable *self, KTime_t *mtime )
/* List
* create table listings
*/
+struct FilterData
+{
+ const KDBManager * mgr;
+ int type;
+};
+
static
-bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data )
+bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data_ )
{
- return KDBOpenPathTypeRead(dir, name, NULL, (intptr_t)data, NULL) == 0;
+ struct FilterData * data = data_;
+
+ return KDBOpenPathTypeRead(data->mgr, dir, name, NULL, data->type, NULL, false) == 0;
}
LIB_EXPORT rc_t CC KTableListCol ( const KTable *self, KNamelist **names )
{
if ( self != NULL )
{
+ struct FilterData data;
+ data.mgr = self->mgr;
+ data.type = kptColumn;
+
return KDirectoryVList ( self -> dir,
- names, KDatabaseListFilter, ( void* ) kptColumn, "col", NULL );
+ names, KDatabaseListFilter, &data, "col", NULL );
}
if ( names != NULL )
diff --git a/libs/kdb/wtrieidx-v1.c b/libs/kdb/wtrieidx-v1.c
index 095a71a..b5073c3 100644
--- a/libs/kdb/wtrieidx-v1.c
+++ b/libs/kdb/wtrieidx-v1.c
@@ -414,7 +414,7 @@ rc_t KTrieIndexPersistProj_v1 ( const KTrieIndex_v1 *self, PersistTrieData *pb )
{
size_t num_read;
num_to_read = file_size - sizeof ( KDBHdr );
- rc = KFileRead ( pb -> f, sizeof ( KDBHdr ),
+ rc = KFileReadAll ( pb -> f, sizeof ( KDBHdr ),
addr, num_to_read, & num_read );
if ( rc != 0 )
free ( addr );
diff --git a/libs/kdb/wtrieidx-v2.c b/libs/kdb/wtrieidx-v2.c
index 1d70e28..b3dd8ab 100644
--- a/libs/kdb/wtrieidx-v2.c
+++ b/libs/kdb/wtrieidx-v2.c
@@ -799,7 +799,7 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
#if V2FIND_RETURNS_SPAN
uint32_t *span,
#endif
- int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data )
+ int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data, bool convertFromV1 )
{
rc_t rc;
@@ -823,7 +823,7 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
size_t usize;
/* detect conversion from v1 */
- if ( self -> id_bits == 0 )
+ if ( convertFromV1 && self -> id_bits == 0 )
{
/* v1 stored tree will have just a 32-bit spot id as data */
uint32_t id;
@@ -1514,7 +1514,7 @@ rc_t KTrieIndexPersistProj_v2 ( const KTrieIndex_v2 *self, PersistTrieData *pb )
num_to_read = file_size - sizeof ( KPTrieIndexHdr_v2 );
if ( rc == 0 )
{
- rc = KFileRead ( pb -> f, sizeof ( KPTrieIndexHdr_v2 ), addr,
+ rc = KFileReadAll ( pb -> f, sizeof ( KPTrieIndexHdr_v2 ), addr,
num_to_read, & num_read );
if ( rc == 0 )
{
@@ -1641,7 +1641,7 @@ rc_t KTrieIndexPersistProj_v3 ( const KTrieIndex_v2 *self, PersistTrieData *pb )
{
size_t num_read;
num_to_read = file_size - sizeof ( KPTrieIndexHdr_v3 );
- rc = KFileRead ( pb -> f, sizeof ( KPTrieIndexHdr_v3 ),
+ rc = KFileReadAll ( pb -> f, sizeof ( KPTrieIndexHdr_v3 ),
addr, num_to_read, & num_read );
if ( rc != 0 )
free ( addr );
@@ -2420,7 +2420,7 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
#if V2FIND_RETURNS_SPAN
uint32_t *span,
#endif
- int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data )
+ int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data, bool convertFromV1 )
{
/* search within in-core index */
if ( self -> count != 0 )
@@ -2468,7 +2468,7 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
#if V2FIND_RETURNS_SPAN
span,
#endif
- custom_cmp, data );
+ custom_cmp, data, convertFromV1 );
}
return RC ( rcDB, rcIndex, rcSelecting, rcString, rcNotFound );
@@ -2485,7 +2485,7 @@ struct KTrieIndexProjectData_v2
static
bool CC KTrieIndexProjectScan_v2 ( TNode *n, void *data )
{
- KTrieIndexProjectData_v2 *pb = data;
+ KTrieIndexProjectData_v2 *pb = (KTrieIndexProjectData_v2 *)data;
const KTrieIdxNode_v2_s2 *node = ( const KTrieIdxNode_v2_s2* ) n;
if ( pb -> id >= node -> start_id &&
diff --git a/libs/kfg/Makefile b/libs/kfg/Makefile
index 85344d1..0d3fcb4 100644
--- a/libs/kfg/Makefile
+++ b/libs/kfg/Makefile
@@ -36,6 +36,9 @@ ALL_LIBS = \
$(INT_LIBS) \
$(EXT_LIBS)
+TEST_TOOLS = \
+ wb-test-kfg
+
include $(TOP)/build/Makefile.env
#-------------------------------------------------------------------------------
@@ -50,7 +53,10 @@ $(INT_LIBS): makedirs
$(EXT_LIBS): makedirs
@ $(MAKE_CMD) $(LIBDIR)/$@
-.PHONY: all std $(ALL_LIBS)
+$(TEST_TOOLS): makedirs
+ @ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
#-------------------------------------------------------------------------------
# std
@@ -65,6 +71,7 @@ $(TARGDIR)/std: \
# clean
#
clean: stdclean
+ @ rm -f $(addsuffix *,$(addprefix $(TEST_BINDIR)/,$(TEST_TOOLS)))
.PHONY: clean
@@ -79,10 +86,18 @@ tag: \
#-------------------------------------------------------------------------------
# kfg
#
-$(LIBDIR)/libkfg: $(addprefix $(LIBDIR)/libkfg.,$(LIBEXT))
+$(LIBDIR)/libkfg: $(NCBIDIR)/default.kfg $(addprefix $(LIBDIR)/libkfg.,$(LIBEXT))
+
+$(NCBIDIR)/default.kfg: $(SRCDIR)/default.kfg
+ rm -f $(NCBIDIR)/config.kfg
+ cp $^ $@
KFG_SRC = \
- config
+ config-grammar \
+ config-lex \
+ config \
+ repository \
+ report-kfg
KFG_OBJ = \
$(addsuffix .$(LOBX),$(KFG_SRC))
@@ -99,3 +114,25 @@ $(LIBDIR)/libkfg.$(LIBX): $(KFG_OBJ)
libkfg_tag:
@ $(TOP)/build/tag-module.sh $(MODULE) libkfg $(KFG_OBJ)
+
+#-------------------------------------------------------------------------------
+# white-box test
+#
+TEST_SRC = \
+ wb-test-kfg
+
+TEST_OBJ = \
+ $(addsuffix .$(OBJX),$(TEST_SRC))
+
+TEST_LIB = \
+ -sktst \
+ -skapp \
+ -svfs \
+ -skurl \
+ -skrypto \
+ -skfg \
+ -skfs \
+ -sklib
+
+$(TEST_BINDIR)/wb-test-kfg: $(TEST_OBJ)
+ $(LP) --exe -o $@ $^ $(TEST_LIB)
diff --git a/libs/kfg/config-grammar.c b/libs/kfg/config-grammar.c
new file mode 100644
index 0000000..60c9a8a
--- /dev/null
+++ b/libs/kfg/config-grammar.c
@@ -0,0 +1,1725 @@
+/* A Bison parser, made by GNU Bison 2.5. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.5"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 1
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names. */
+#define yyparse KFG_parse
+#define yylex KFG_lex
+#define yyerror KFG_error
+#define yylval KFG_lval
+#define yychar KFG_char
+#define yydebug KFG_debug
+#define yynerrs KFG_nerrs
+
+
+/* Copy the first part of user declarations. */
+
+
+ #include <sysalloc.h>
+
+ #include "kfg-parse.h"
+
+ #define YYSTYPE KFGSymbol
+ #include "config-tokens.h"
+
+ #define KFG_lex KFGScan_yylex
+
+ /* required parameter to VNamelistMake */
+ #define NAMELIST_ALLOC_BLKSIZE 10
+
+ static void ReportRc(KFGParseBlock* pb, KFGScanBlock* sb, rc_t rc);
+ static void AppendName(KFGScanBlock* sb, VNamelist*, const KFGParseBlock*);
+
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ kfgEND_INPUT = 0,
+ kfgEND_LINE = 258,
+ kfgUNTERM_STRING = 259,
+ kfgUNTERM_ESCAPED_STRING = 260,
+ kfgUNRECOGNIZED = 261,
+ kfgVAR_REF = 262,
+ kfgUNTERM_VAR_REF = 263,
+ kfgASSIGN = 264,
+ kfgSTRING = 265,
+ kfgESCAPED_STRING = 266,
+ kfgABS_PATH = 267,
+ kfgREL_PATH = 268
+ };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+
+ KFGParseBlock pb;
+ const VNamelist* namelist;
+
+
+
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations. */
+
+
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 13
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 21
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 14
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 8
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 17
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 23
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 268
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint8 yyprhs[] =
+{
+ 0, 0, 3, 5, 7, 9, 12, 17, 19, 22,
+ 24, 26, 28, 30, 32, 35, 38, 40
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 15, 0, -1, 16, -1, 0, -1, 17, -1, 16,
+ 17, -1, 18, 19, 20, 21, -1, 3, -1, 1,
+ 21, -1, 12, -1, 13, -1, 9, -1, 10, -1,
+ 11, -1, 20, 10, -1, 20, 11, -1, 3, -1,
+ 0, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint8 yyrline[] =
+{
+ 0, 82, 82, 83, 87, 88, 92, 101, 102, 106,
+ 107, 111, 115, 116, 117, 118, 122, 123
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "kfgEND_INPUT", "error", "$undefined", "kfgEND_LINE",
+ "kfgUNTERM_STRING", "kfgUNTERM_ESCAPED_STRING", "kfgUNRECOGNIZED",
+ "kfgVAR_REF", "kfgUNTERM_VAR_REF", "kfgASSIGN", "kfgSTRING",
+ "kfgESCAPED_STRING", "kfgABS_PATH", "kfgREL_PATH", "$accept", "config",
+ "name_value_pairs", "name_value_pair", "pathname", "assign_op", "value",
+ "line_end", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 14, 15, 15, 16, 16, 17, 17, 17, 18,
+ 18, 19, 20, 20, 20, 20, 21, 21
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 1, 1, 1, 2, 4, 1, 2, 1,
+ 1, 1, 1, 1, 2, 2, 1, 1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 0, 3, 0, 7, 9, 10, 0, 0, 4, 0,
+ 17, 16, 8, 1, 5, 11, 0, 12, 13, 0,
+ 14, 15, 6
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ -1, 6, 7, 8, 9, 16, 19, 12
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -5
+static const yytype_int8 yypact[] =
+{
+ 0, -5, 6, -5, -5, -5, 2, 4, -5, 1,
+ -5, -5, -5, -5, -5, -5, 10, -5, -5, 8,
+ -5, -5, -5
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -5, -5, -5, 7, -5, -5, -5, -4
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -3
+static const yytype_int8 yytable[] =
+{
+ 1, 2, 13, 3, -2, 2, 10, 3, 10, 11,
+ 15, 11, 4, 5, 14, 22, 4, 5, 20, 21,
+ 17, 18
+};
+
+#define yypact_value_is_default(yystate) \
+ ((yystate) == (-5))
+
+#define yytable_value_is_error(yytable_value) \
+ YYID (0)
+
+static const yytype_uint8 yycheck[] =
+{
+ 0, 1, 0, 3, 0, 1, 0, 3, 0, 3,
+ 9, 3, 12, 13, 7, 19, 12, 13, 10, 11,
+ 10, 11
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 0, 1, 3, 12, 13, 15, 16, 17, 18,
+ 0, 3, 21, 0, 17, 9, 19, 10, 11, 20,
+ 10, 11, 21
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (pb, sb, YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* This macro is provided for backward compatibility. */
+
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, sb)
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value, pb, sb); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb, sb)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+ KFGParseBlock* pb;
+ KFGScanBlock* sb;
+#endif
+{
+ if (!yyvaluep)
+ return;
+ YYUSE (pb);
+ YYUSE (sb);
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, pb, sb)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+ KFGParseBlock* pb;
+ KFGScanBlock* sb;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb, sb);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, pb, sb)
+ YYSTYPE *yyvsp;
+ int yyrule;
+ KFGParseBlock* pb;
+ KFGScanBlock* sb;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ , pb, sb);
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule, pb, sb); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = 0;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
+ {
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
+ }
+
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, pb, sb)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+ KFGParseBlock* pb;
+ KFGScanBlock* sb;
+#endif
+{
+ YYUSE (yyvaluep);
+ YYUSE (pb);
+ YYUSE (sb);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+ case 20: /* "value" */
+
+ {
+ VNamelistRelease((yyvaluep->namelist));
+};
+
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (KFGParseBlock* pb, KFGScanBlock* sb);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+int
+yyparse (pb, sb)
+ KFGParseBlock* pb;
+ KFGScanBlock* sb;
+#endif
+#endif
+{
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+
+ /* Number of syntax errors so far. */
+ int yynerrs;
+
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yytoken = 0;
+ yyss = yyssa;
+ yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 6:
+
+ {
+ rc_t rc=sb->write_nvp(sb->self, (yyvsp[(1) - (4)].pb).tokenText, (yyvsp[(1) - (4)].pb).tokenLength, (yyvsp[(3) - (4)].namelist));
+ if (rc != 0)
+ {
+ ReportRc(pb, sb, rc);
+ }
+ VNamelistRelease((yyvsp[(3) - (4)].namelist));
+ }
+ break;
+
+ case 12:
+
+ { VNamelistMake(&(yyval.namelist), NAMELIST_ALLOC_BLKSIZE); AppendName(sb, (yyval.namelist), &(yyvsp[(1) - (1)].pb)); }
+ break;
+
+ case 13:
+
+ { VNamelistMake(&(yyval.namelist), NAMELIST_ALLOC_BLKSIZE); AppendName(sb, (yyval.namelist), &(yyvsp[(1) - (1)].pb)); }
+ break;
+
+ case 14:
+
+ { AppendName(sb, (yyvsp[(1) - (2)].namelist), &(yyvsp[(2) - (2)].pb)); (yyval.namelist)=(yyvsp[(1) - (2)].namelist); }
+ break;
+
+ case 15:
+
+ { AppendName(sb, (yyvsp[(1) - (2)].namelist), &(yyvsp[(2) - (2)].pb)); (yyval.namelist)=(yyvsp[(1) - (2)].namelist); }
+ break;
+
+
+
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (pb, sb, YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (pb, sb, yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval, pb, sb);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp, pb, sb);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (pb, sb, YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval, pb, sb);
+ }
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp, pb, sb);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+
+
+
+#include <assert.h>
+#include <klib/token.h>
+#include <klib/log.h>
+#include <klib/writer.h>
+
+void KFG_error(KFGParseBlock* pb, KFGScanBlock* sb, const char* msg)
+{
+ sb->report_error(sb, msg);
+}
+
+void ReportRc(KFGParseBlock* pb, KFGScanBlock* sb, rc_t rc)
+{
+ char buf[1025];
+ size_t num_writ;
+ RCExplain(rc, buf, 1024, &num_writ);
+ buf[1024]=0;
+ yyerror(0, sb, buf);
+}
+
+void AppendName(KFGScanBlock* sb, VNamelist* nl, const KFGParseBlock* pb)
+{ /* pb represents either a kfgSTRING or a kfgESCAPED_STRING with opening and closed quotes clipped */
+ rc_t rc;
+ KToken t;
+ size_t value_size;
+ char* buf;
+
+ if (pb->tokenLength == 0)
+ {
+ return;
+ }
+
+ t.id= pb->tokenId == kfgESCAPED_STRING ? eEscapedString : eString;
+ StringInit(&t.str, pb->tokenText-1, pb->tokenLength+2, pb->tokenLength+2); /* compensate for clipped quotes in order to use KTokenToString */
+ buf=(char*)malloc(t.str.size);
+
+ /* KTokenToString removes opening and closing quotes and handles escapes if present */
+ rc = KTokenToString (&t, buf, t.str.size, &value_size);
+ if (rc != 0)
+ {
+ ReportRc(0, sb, rc);
+ }
+ else
+ {
+ assert(value_size < t.str.size);
+ buf[value_size]=0;
+ rc = VNamelistAppend(nl, buf);
+ if (rc != 0)
+ {
+ ReportRc(0, sb, rc);
+ }
+ }
+ free(buf);
+}
+
+
+
+
diff --git a/libs/kfg/config-lex.c b/libs/kfg/config-lex.c
new file mode 100644
index 0000000..55543c2
--- /dev/null
+++ b/libs/kfg/config-lex.c
@@ -0,0 +1,2511 @@
+
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* An opaque pointer. */
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
+
+/* For convenience, these vars (plus the bison vars far below)
+ are macros in the reentrant scanner. */
+#define yyin yyg->yyin_r
+#define yyout yyg->yyout_r
+#define yyextra yyg->yyextra_r
+#define yyleng yyg->yyleng_r
+#define yytext yyg->yytext_r
+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
+#define yy_flex_debug yyg->yy_flex_debug_r
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yyg->yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yyg->yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin ,yyscanner )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+ * access to the local variable yy_act. Since yyless() is a macro, it would break
+ * existing scanners that call yyless() from OUTSIDE yylex.
+ * One obvious solution it to make yy_act a global. I tried that, and saw
+ * a 5% performance hit in a non-yylineno scanner, because yy_act is
+ * normally declared as a register variable-- so it is not worth it.
+ */
+ #define YY_LESS_LINENO(n) \
+ do { \
+ int yyl;\
+ for ( yyl = n; yyl < yyleng; ++yyl )\
+ if ( yytext[yyl] == '\n' )\
+ --yylineno;\
+ }while(0)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = yyg->yy_hold_char; \
+ YY_RESTORE_YY_MORE_OFFSET \
+ yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
+ ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
+
+void yyrestart (FILE *input_file ,yyscan_t yyscanner );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+void yypop_buffer_state (yyscan_t yyscanner );
+
+static void yyensure_buffer_stack (yyscan_t yyscanner );
+static void yy_load_buffer_state (yyscan_t yyscanner );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
+
+void *yyalloc (yy_size_t ,yyscan_t yyscanner );
+void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
+void yyfree (void * ,yyscan_t yyscanner );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (yyscanner); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (yyscanner); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define yywrap(n) 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+typedef int yy_state_type;
+
+#define yytext_ptr yytext_r
+
+static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner);
+static int yy_get_next_buffer (yyscan_t yyscanner );
+static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ yyg->yytext_ptr = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ yyg->yy_hold_char = *yy_cp; \
+ *yy_cp = '\0'; \
+ yyg->yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 35
+#define YY_END_OF_BUFFER 36
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[135] =
+ { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 36, 34, 8, 9, 24, 7, 34, 15,
+ 34, 11, 32, 2, 4, 35, 35, 35, 35, 31,
+ 35, 35, 35, 22, 13, 13, 24, 23, 0, 0,
+ 7, 0, 15, 0, 14, 0, 1, 10, 11, 0,
+ 2, 3, 4, 0, 5, 0, 6, 0, 31, 0,
+ 29, 0, 0, 22, 20, 13, 13, 23, 0, 27,
+ 26, 26, 0, 0, 14, 18, 17, 17, 10, 0,
+ 11, 30, 21, 13, 27, 26, 25, 26, 0, 26,
+ 0, 33, 0, 0, 18, 17, 17, 16, 0, 17,
+
+ 0, 10, 11, 12, 13, 13, 0, 26, 25, 26,
+ 26, 26, 28, 0, 0, 17, 17, 16, 17, 17,
+ 19, 10, 13, 26, 25, 26, 26, 0, 17, 17,
+ 16, 17, 13, 0
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 2, 4, 4, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 1, 5, 6, 7, 1, 1, 8, 9,
+ 10, 11, 1, 1, 12, 12, 13, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 1, 1, 1,
+ 15, 1, 1, 1, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 1, 16, 1, 1, 14, 1, 14, 14, 14, 14,
+
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int32_t yy_meta[17] =
+ { 0,
+ 1, 1, 2, 3, 1, 1, 1, 1, 1, 4,
+ 5, 6, 6, 6, 1, 7
+ } ;
+
+static yyconst flex_int16_t yy_base[163] =
+ { 0,
+ 0, 0, 14, 15, 16, 17, 26, 40, 54, 68,
+ 82, 90, 86, 670, 670, 670, 96, 0, 74, 106,
+ 10, 69, 670, 0, 670, 120, 131, 27, 670, 670,
+ 142, 15, 149, 670, 0, 72, 154, 670, 168, 0,
+ 0, 66, 178, 192, 670, 0, 670, 66, 65, 63,
+ 0, 206, 670, 217, 670, 228, 670, 30, 670, 65,
+ 670, 31, 64, 670, 670, 0, 55, 670, 59, 670,
+ 237, 249, 256, 58, 670, 670, 264, 274, 53, 51,
+ 51, 670, 670, 281, 670, 291, 670, 305, 0, 317,
+ 331, 670, 0, 49, 670, 341, 355, 670, 0, 365,
+
+ 379, 47, 46, 670, 0, 41, 393, 0, 0, 407,
+ 420, 0, 670, 34, 434, 0, 448, 0, 461, 0,
+ 670, 41, 37, 0, 0, 0, 474, 0, 0, 0,
+ 0, 487, 38, 670, 503, 510, 517, 524, 531, 538,
+ 545, 47, 552, 559, 566, 572, 578, 585, 592, 35,
+ 599, 606, 613, 620, 34, 627, 634, 641, 648, 30,
+ 655, 662
+ } ;
+
+static yyconst flex_int16_t yy_def[163] =
+ { 0,
+ 134, 1, 135, 135, 135, 135, 136, 136, 137, 137,
+ 138, 138, 134, 134, 134, 134, 139, 140, 134, 141,
+ 134, 142, 134, 143, 134, 144, 144, 145, 134, 134,
+ 145, 146, 146, 134, 147, 147, 139, 134, 139, 148,
+ 140, 134, 141, 141, 134, 149, 134, 150, 142, 134,
+ 143, 144, 134, 144, 134, 144, 134, 145, 134, 31,
+ 134, 146, 33, 134, 134, 147, 147, 134, 39, 134,
+ 151, 152, 134, 44, 134, 134, 153, 154, 150, 134,
+ 155, 134, 134, 147, 134, 151, 134, 156, 157, 152,
+ 152, 134, 73, 134, 134, 153, 158, 134, 159, 154,
+
+ 154, 160, 155, 134, 84, 147, 151, 86, 86, 156,
+ 161, 86, 134, 73, 153, 96, 158, 96, 162, 96,
+ 134, 160, 84, 86, 86, 110, 161, 114, 96, 117,
+ 96, 162, 84, 0, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134
+ } ;
+
+static yyconst flex_int16_t yy_nxt[687] =
+ { 0,
+ 14, 15, 16, 15, 17, 18, 19, 20, 14, 14,
+ 14, 14, 21, 22, 23, 14, 25, 25, 25, 25,
+ 47, 63, 64, 48, 26, 26, 27, 27, 29, 29,
+ 30, 59, 31, 60, 59, 122, 60, 63, 64, 103,
+ 79, 29, 29, 29, 30, 128, 31, 128, 133, 133,
+ 133, 133, 49, 80, 123, 29, 29, 29, 50, 80,
+ 33, 34, 114, 50, 102, 80, 95, 85, 84, 29,
+ 29, 29, 83, 82, 33, 34, 81, 50, 80, 73,
+ 67, 50, 42, 29, 29, 134, 134, 134, 36, 134,
+ 134, 29, 29, 134, 134, 134, 36, 134, 134, 29,
+
+ 38, 134, 39, 134, 134, 134, 134, 134, 134, 134,
+ 134, 40, 44, 45, 134, 134, 134, 134, 134, 134,
+ 134, 46, 53, 134, 134, 134, 134, 134, 134, 134,
+ 54, 134, 55, 53, 134, 134, 134, 134, 134, 134,
+ 134, 56, 134, 57, 58, 58, 134, 134, 134, 134,
+ 61, 62, 62, 134, 134, 134, 134, 65, 68, 134,
+ 69, 134, 134, 134, 134, 134, 134, 134, 134, 40,
+ 37, 37, 134, 134, 134, 134, 70, 134, 134, 134,
+ 134, 134, 134, 71, 74, 75, 134, 134, 134, 134,
+ 134, 134, 134, 46, 43, 43, 134, 134, 134, 134,
+
+ 76, 134, 134, 134, 134, 134, 134, 77, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 53,
+ 134, 134, 134, 134, 134, 134, 134, 54, 134, 55,
+ 53, 134, 134, 134, 134, 134, 134, 134, 56, 134,
+ 57, 87, 134, 88, 134, 134, 134, 134, 134, 134,
+ 134, 134, 89, 87, 134, 91, 134, 134, 134, 134,
+ 134, 134, 134, 134, 40, 92, 134, 93, 94, 93,
+ 97, 98, 134, 134, 134, 134, 134, 134, 134, 99,
+ 101, 98, 134, 134, 134, 134, 134, 134, 134, 46,
+ 104, 134, 105, 106, 105, 87, 134, 107, 134, 134,
+
+ 134, 134, 134, 134, 134, 134, 89, 86, 86, 109,
+ 134, 110, 134, 86, 134, 134, 134, 134, 134, 134,
+ 111, 87, 134, 91, 134, 134, 134, 134, 134, 134,
+ 134, 134, 40, 90, 90, 134, 134, 134, 134, 113,
+ 134, 134, 134, 134, 134, 134, 71, 115, 98, 134,
+ 134, 134, 134, 134, 134, 134, 99, 96, 96, 134,
+ 134, 117, 118, 96, 134, 134, 134, 134, 134, 134,
+ 119, 101, 98, 134, 134, 134, 134, 134, 134, 134,
+ 46, 100, 100, 134, 134, 134, 134, 121, 134, 134,
+ 134, 134, 134, 134, 77, 86, 86, 134, 134, 134,
+
+ 134, 134, 134, 134, 134, 134, 134, 134, 71, 86,
+ 86, 109, 134, 110, 134, 86, 134, 134, 134, 134,
+ 134, 134, 111, 112, 125, 134, 126, 134, 134, 134,
+ 134, 134, 134, 134, 134, 127, 96, 96, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 77,
+ 96, 96, 134, 134, 117, 118, 96, 134, 134, 134,
+ 134, 134, 134, 119, 120, 134, 134, 130, 131, 134,
+ 134, 134, 134, 134, 134, 134, 132, 112, 125, 134,
+ 88, 134, 134, 134, 134, 134, 134, 134, 134, 127,
+ 120, 134, 134, 97, 131, 134, 134, 134, 134, 134,
+
+ 134, 134, 132, 24, 24, 24, 24, 24, 24, 24,
+ 28, 28, 28, 28, 28, 28, 28, 32, 32, 32,
+ 32, 32, 32, 32, 35, 35, 35, 35, 35, 35,
+ 35, 37, 134, 134, 37, 37, 37, 37, 41, 134,
+ 41, 41, 41, 41, 41, 43, 134, 134, 43, 43,
+ 43, 43, 51, 134, 51, 51, 134, 51, 51, 52,
+ 52, 52, 52, 52, 52, 52, 58, 134, 134, 58,
+ 58, 58, 62, 134, 134, 62, 62, 62, 66, 134,
+ 66, 134, 66, 66, 66, 72, 134, 72, 72, 72,
+ 72, 72, 78, 134, 78, 78, 78, 78, 78, 86,
+
+ 134, 134, 86, 86, 86, 86, 90, 134, 134, 90,
+ 90, 90, 90, 96, 134, 134, 96, 96, 96, 96,
+ 100, 134, 134, 100, 100, 100, 100, 108, 108, 108,
+ 108, 108, 108, 108, 112, 134, 112, 112, 112, 112,
+ 112, 116, 116, 116, 116, 116, 116, 116, 120, 134,
+ 120, 120, 120, 120, 120, 124, 134, 124, 124, 124,
+ 124, 124, 129, 134, 129, 129, 129, 129, 129, 13,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134
+ } ;
+
+static yyconst flex_int16_t yy_chk[687] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 3, 4, 5, 6,
+ 21, 32, 32, 21, 3, 4, 5, 6, 7, 7,
+ 7, 28, 7, 28, 58, 160, 58, 62, 62, 155,
+ 150, 7, 8, 8, 8, 114, 8, 114, 123, 133,
+ 123, 133, 142, 122, 106, 8, 9, 9, 103, 102,
+ 9, 9, 94, 81, 80, 79, 74, 69, 67, 9,
+ 10, 10, 63, 60, 10, 10, 50, 49, 48, 42,
+ 36, 22, 19, 10, 11, 13, 0, 0, 11, 0,
+ 0, 11, 12, 0, 0, 0, 12, 0, 0, 12,
+
+ 17, 0, 17, 0, 0, 0, 0, 0, 0, 0,
+ 0, 17, 20, 20, 0, 0, 0, 0, 0, 0,
+ 0, 20, 26, 0, 0, 0, 0, 0, 0, 0,
+ 26, 0, 26, 27, 0, 0, 0, 0, 0, 0,
+ 0, 27, 0, 27, 31, 31, 0, 0, 0, 0,
+ 31, 33, 33, 0, 0, 0, 0, 33, 37, 0,
+ 37, 0, 0, 0, 0, 0, 0, 0, 0, 37,
+ 39, 39, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 0, 0, 39, 43, 43, 0, 0, 0, 0,
+ 0, 0, 0, 43, 44, 44, 0, 0, 0, 0,
+
+ 44, 0, 0, 0, 0, 0, 0, 44, 52, 0,
+ 0, 0, 0, 0, 0, 0, 52, 0, 52, 54,
+ 0, 0, 0, 0, 0, 0, 0, 54, 0, 54,
+ 56, 0, 0, 0, 0, 0, 0, 0, 56, 0,
+ 56, 71, 0, 71, 0, 0, 0, 0, 0, 0,
+ 0, 0, 71, 72, 0, 72, 0, 0, 0, 0,
+ 0, 0, 0, 0, 72, 73, 0, 73, 73, 73,
+ 77, 77, 0, 0, 0, 0, 0, 0, 0, 77,
+ 78, 78, 0, 0, 0, 0, 0, 0, 0, 78,
+ 84, 0, 84, 84, 84, 86, 0, 86, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 86, 88, 88, 88,
+ 0, 88, 0, 88, 0, 0, 0, 0, 0, 0,
+ 88, 90, 0, 90, 0, 0, 0, 0, 0, 0,
+ 0, 0, 90, 91, 91, 0, 0, 0, 0, 91,
+ 0, 0, 0, 0, 0, 0, 91, 96, 96, 0,
+ 0, 0, 0, 0, 0, 0, 96, 97, 97, 0,
+ 0, 97, 97, 97, 0, 0, 0, 0, 0, 0,
+ 97, 100, 100, 0, 0, 0, 0, 0, 0, 0,
+ 100, 101, 101, 0, 0, 0, 0, 101, 0, 0,
+ 0, 0, 0, 0, 101, 107, 107, 0, 0, 0,
+
+ 0, 107, 0, 0, 0, 0, 0, 0, 107, 110,
+ 110, 110, 0, 110, 0, 110, 0, 0, 0, 0,
+ 0, 0, 110, 111, 111, 0, 111, 0, 0, 0,
+ 0, 0, 0, 0, 0, 111, 115, 115, 0, 0,
+ 0, 0, 115, 0, 0, 0, 0, 0, 0, 115,
+ 117, 117, 0, 0, 117, 117, 117, 0, 0, 0,
+ 0, 0, 0, 117, 119, 0, 0, 119, 119, 0,
+ 0, 0, 0, 0, 0, 0, 119, 127, 127, 0,
+ 127, 0, 0, 0, 0, 0, 0, 0, 0, 127,
+ 132, 0, 0, 132, 132, 0, 0, 0, 0, 0,
+
+ 0, 0, 132, 135, 135, 135, 135, 135, 135, 135,
+ 136, 136, 136, 136, 136, 136, 136, 137, 137, 137,
+ 137, 137, 137, 137, 138, 138, 138, 138, 138, 138,
+ 138, 139, 0, 0, 139, 139, 139, 139, 140, 0,
+ 140, 140, 140, 140, 140, 141, 0, 0, 141, 141,
+ 141, 141, 143, 0, 143, 143, 0, 143, 143, 144,
+ 144, 144, 144, 144, 144, 144, 145, 0, 0, 145,
+ 145, 145, 146, 0, 0, 146, 146, 146, 147, 0,
+ 147, 0, 147, 147, 147, 148, 0, 148, 148, 148,
+ 148, 148, 149, 0, 149, 149, 149, 149, 149, 151,
+
+ 0, 0, 151, 151, 151, 151, 152, 0, 0, 152,
+ 152, 152, 152, 153, 0, 0, 153, 153, 153, 153,
+ 154, 0, 0, 154, 154, 154, 154, 156, 156, 156,
+ 156, 156, 156, 156, 157, 0, 157, 157, 157, 157,
+ 157, 158, 158, 158, 158, 158, 158, 158, 159, 0,
+ 159, 159, 159, 159, 159, 161, 0, 161, 161, 161,
+ 161, 161, 162, 0, 162, 162, 162, 162, 162, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134
+ } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[36] =
+ { 0,
+0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, };
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ #include <sysalloc.h>
+
+ #include "kfg-parse.h"
+ #include "config-tokens.h"
+
+ #define YYSTYPE KFGParseBlock
+
+ /* code to populate token with internal values */
+ #define YY_USER_ACTION \
+ yylval -> tokenText = yytext; \
+ yylval -> tokenLength = yyleng; \
+ yylval -> line_no = yylineno; \
+ yylval -> column_no = yycolumn; \
+ yycolumn += yyleng;
+
+ #define REM_LQUOTE \
+ ++ yylval -> tokenText; \
+ -- yylval -> tokenLength; \
+ ++ yylval -> column_no;
+
+ #define REM_RQUOTE \
+ -- yylval -> tokenLength;
+#define YY_NO_UNISTD_H 1
+/* re-entrant scanner */
+/* bison options */
+/* maintain state stack */
+/* let parser handle EOF */
+/* start-state for slash-star comments */
+
+/* states for strings */
+
+/* in-string variable reference */
+
+/* node/name in a path */
+
+#define INITIAL 0
+#define CMT_SLASH_STAR 1
+#define CMT_MULTI_LINE 2
+#define IN_DBL_STRING 3
+#define IN_SNG_STRING 4
+#define IN_VAR_REF 5
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+/* Holds the entire state of the reentrant scanner. */
+struct yyguts_t
+ {
+
+ /* User-defined. Not touched by flex. */
+ YY_EXTRA_TYPE yyextra_r;
+
+ /* The rest are the same as the globals declared in the non-reentrant scanner. */
+ FILE *yyin_r, *yyout_r;
+ size_t yy_buffer_stack_top; /**< index of top of stack. */
+ size_t yy_buffer_stack_max; /**< capacity of stack. */
+ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
+ char yy_hold_char;
+ int yy_n_chars;
+ int yyleng_r;
+ char *yy_c_buf_p;
+ int yy_init;
+ int yy_start;
+ int yy_did_buffer_switch_on_eof;
+ int yy_start_stack_ptr;
+ int yy_start_stack_depth;
+ int *yy_start_stack;
+ yy_state_type yy_last_accepting_state;
+ char* yy_last_accepting_cpos;
+
+ int yylineno_r;
+ int yy_flex_debug_r;
+
+ char *yytext_r;
+ int yy_more_flag;
+ int yy_more_len;
+
+ YYSTYPE * yylval_r;
+
+ }; /* end struct yyguts_t */
+
+static int yy_init_globals (yyscan_t yyscanner );
+
+ /* This must go here because YYSTYPE and YYLTYPE are included
+ * from bison output in section 1.*/
+ # define yylval yyg->yylval_r
+
+int yylex_init (yyscan_t* scanner);
+
+int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (yyscan_t yyscanner );
+
+int yyget_debug (yyscan_t yyscanner );
+
+void yyset_debug (int debug_flag ,yyscan_t yyscanner );
+
+YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
+
+FILE *yyget_in (yyscan_t yyscanner );
+
+void yyset_in (FILE * in_str ,yyscan_t yyscanner );
+
+FILE *yyget_out (yyscan_t yyscanner );
+
+void yyset_out (FILE * out_str ,yyscan_t yyscanner );
+
+int yyget_leng (yyscan_t yyscanner );
+
+char *yyget_text (yyscan_t yyscanner );
+
+int yyget_lineno (yyscan_t yyscanner );
+
+void yyset_lineno (int line_number ,yyscan_t yyscanner );
+
+YYSTYPE * yyget_lval (yyscan_t yyscanner );
+
+void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (yyscan_t yyscanner );
+#else
+extern int yywrap (yyscan_t yyscanner );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr ,yyscan_t yyscanner);
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (yyscan_t yyscanner );
+#else
+static int input (yyscan_t yyscanner );
+#endif
+
+#endif
+
+ static void yy_push_state (int new_state ,yyscan_t yyscanner);
+
+ static void yy_pop_state (yyscan_t yyscanner );
+
+ static int yy_top_state (yyscan_t yyscanner );
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ int n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex \
+ (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+
+#define YY_DECL int yylex \
+ (YYSTYPE * yylval_param , yyscan_t yyscanner)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* multi-line comments */
+
+ yylval = yylval_param;
+
+ if ( !yyg->yy_init )
+ {
+ yyg->yy_init = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! yyg->yy_start )
+ yyg->yy_start = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack (yyscanner);
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+ }
+
+ yy_load_buffer_state(yyscanner );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = yyg->yy_c_buf_p;
+
+ /* Support of yytext. */
+ *yy_cp = yyg->yy_hold_char;
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = yyg->yy_start;
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ yyg->yy_last_accepting_state = yy_current_state;
+ yyg->yy_last_accepting_cpos = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 135 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_current_state != 134 );
+ yy_cp = yyg->yy_last_accepting_cpos;
+ yy_current_state = yyg->yy_last_accepting_state;
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+
+ YY_DO_BEFORE_ACTION;
+
+ if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+ {
+ int yyl;
+ for ( yyl = 0; yyl < yyleng; ++yyl )
+ if ( yytext[yyl] == '\n' )
+
+ do{ yylineno++;
+ yycolumn=0;
+ }while(0)
+;
+ }
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = yyg->yy_hold_char;
+ yy_cp = yyg->yy_last_accepting_cpos;
+ yy_current_state = yyg->yy_last_accepting_state;
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+{ yy_push_state ( CMT_SLASH_STAR, yyscanner ); }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+/* ignore */
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+/* ignore */
+ YY_BREAK
+case 4:
+/* rule 4 can match eol */
+YY_RULE_SETUP
+{ BEGIN CMT_MULTI_LINE; }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+{ yy_pop_state ( yyscanner ); }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+{ yy_pop_state ( yyscanner ); return kfgEND_LINE; }
+ YY_BREAK
+/* line comments */
+case 7:
+YY_RULE_SETUP
+/* ignore */
+ YY_BREAK
+/* ignored tokens */
+case 8:
+YY_RULE_SETUP
+/* ignore */
+ YY_BREAK
+/* end of line is significant */
+case 9:
+/* rule 9 can match eol */
+YY_RULE_SETUP
+{ return kfgEND_LINE; }
+ YY_BREAK
+/* normal, POSIX-style paths */
+case 10:
+YY_RULE_SETUP
+{ return kfgABS_PATH; }
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+{ return kfgREL_PATH; }
+ YY_BREAK
+/* variable references inside strings */
+case 12:
+YY_RULE_SETUP
+{ yy_pop_state ( yyscanner ); return kfgVAR_REF; }
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+{ yy_pop_state ( yyscanner ); return kfgUNTERM_VAR_REF; }
+ YY_BREAK
+case YY_STATE_EOF(IN_VAR_REF):
+{ yy_pop_state ( yyscanner ); return kfgUNTERM_VAR_REF; }
+ YY_BREAK
+/* single quoted strings */
+case 14:
+/* rule 14 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; REM_RQUOTE; return kfgSTRING; }
+ YY_BREAK
+case 15:
+/* rule 15 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; return kfgUNTERM_STRING; }
+ YY_BREAK
+case 16:
+/* rule 16 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; REM_RQUOTE; return kfgESCAPED_STRING; }
+ YY_BREAK
+case 17:
+/* rule 17 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; return kfgUNTERM_ESCAPED_STRING; }
+ YY_BREAK
+/* single quoted strings with variable references*/
+case 18:
+/* rule 18 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ REM_LQUOTE; yy_push_state ( IN_SNG_STRING, yyscanner ); yy_push_state ( IN_VAR_REF, yyscanner ); return kfgSTRING; }
+ YY_BREAK
+case 19:
+/* rule 19 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ REM_LQUOTE; yy_push_state ( IN_SNG_STRING, yyscanner ); yy_push_state ( IN_VAR_REF, yyscanner ); return kfgESCAPED_STRING; }
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+{ yy_push_state ( IN_VAR_REF, yyscanner ); yyless(0); }
+ YY_BREAK
+case 21:
+/* rule 21 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ yy_push_state ( IN_VAR_REF, yyscanner ); return kfgSTRING; }
+ YY_BREAK
+case 22:
+/* rule 22 can match eol */
+YY_RULE_SETUP
+{ REM_RQUOTE; yy_pop_state ( yyscanner ); return kfgSTRING; }
+ YY_BREAK
+/* double quoted strings */
+case 23:
+/* rule 23 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; REM_RQUOTE; return kfgSTRING; }
+ YY_BREAK
+case 24:
+/* rule 24 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; return kfgUNTERM_STRING; }
+ YY_BREAK
+case 25:
+/* rule 25 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; REM_RQUOTE; return kfgESCAPED_STRING; }
+ YY_BREAK
+case 26:
+/* rule 26 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; return kfgUNTERM_ESCAPED_STRING; }
+ YY_BREAK
+/* double quoted strings with variable references*/
+case 27:
+/* rule 27 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ REM_LQUOTE; yy_push_state ( IN_DBL_STRING, yyscanner ); yy_push_state ( IN_VAR_REF, yyscanner ); return kfgSTRING; }
+ YY_BREAK
+case 28:
+/* rule 28 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ REM_LQUOTE; yy_push_state ( IN_DBL_STRING, yyscanner ); yy_push_state ( IN_VAR_REF, yyscanner ); return kfgESCAPED_STRING; }
+ YY_BREAK
+case 29:
+YY_RULE_SETUP
+{ yy_push_state ( IN_VAR_REF, yyscanner ); yyless(0); }
+ YY_BREAK
+case 30:
+/* rule 30 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ yy_push_state ( IN_VAR_REF, yyscanner ); return kfgSTRING; }
+ YY_BREAK
+case 31:
+/* rule 31 can match eol */
+YY_RULE_SETUP
+{ REM_RQUOTE; yy_pop_state ( yyscanner ); return kfgSTRING; }
+ YY_BREAK
+/* literals */
+case 32:
+YY_RULE_SETUP
+{ return kfgASSIGN; }
+ YY_BREAK
+case 33:
+YY_RULE_SETUP
+{ return kfgVAR_REF; }
+ YY_BREAK
+/* unrecognized input */
+case 34:
+YY_RULE_SETUP
+{ return kfgUNRECOGNIZED; }
+ YY_BREAK
+case 35:
+YY_RULE_SETUP
+ECHO;
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(CMT_SLASH_STAR):
+case YY_STATE_EOF(CMT_MULTI_LINE):
+case YY_STATE_EOF(IN_DBL_STRING):
+case YY_STATE_EOF(IN_SNG_STRING):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = yyg->yy_hold_char;
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( yyscanner );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
+
+ yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++yyg->yy_c_buf_p;
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = yyg->yy_last_accepting_cpos;
+ yy_current_state = yyg->yy_last_accepting_state;
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( yyscanner ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ yyg->yy_did_buffer_switch_on_eof = 0;
+
+ if ( yywrap(yyscanner ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! yyg->yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yyg->yy_c_buf_p =
+ yyg->yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( yyscanner );
+
+ yy_cp = yyg->yy_c_buf_p;
+ yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ yyg->yy_c_buf_p =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
+
+ yy_current_state = yy_get_previous_state( yyscanner );
+
+ yy_cp = yyg->yy_c_buf_p;
+ yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = yyg->yytext_ptr;
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
+
+ else
+ {
+ int num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+ int yy_c_buf_p_offset =
+ (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ int new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ yyg->yy_n_chars, (size_t) num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+ }
+
+ if ( yyg->yy_n_chars == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart(yyin ,yyscanner);
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ yyg->yy_n_chars += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+ yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ yy_current_state = yyg->yy_start;
+
+ for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ yyg->yy_last_accepting_state = yy_current_state;
+ yyg->yy_last_accepting_cpos = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 135 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner)
+{
+ register int yy_is_jam;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
+ register char *yy_cp = yyg->yy_c_buf_p;
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ yyg->yy_last_accepting_state = yy_current_state;
+ yyg->yy_last_accepting_cpos = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 135 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 134);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
+{
+ register char *yy_cp;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ yy_cp = yyg->yy_c_buf_p;
+
+ /* undo effects of setting up yytext */
+ *yy_cp = yyg->yy_hold_char;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register int number_to_move = yyg->yy_n_chars + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ if ( c == '\n' ){
+ --yylineno;
+ }
+
+ yyg->yytext_ptr = yy_bp;
+ yyg->yy_hold_char = *yy_cp;
+ yyg->yy_c_buf_p = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (yyscan_t yyscanner)
+#else
+ static int input (yyscan_t yyscanner)
+#endif
+
+{
+ int c;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ *yyg->yy_c_buf_p = yyg->yy_hold_char;
+
+ if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+ /* This was really a NUL. */
+ *yyg->yy_c_buf_p = '\0';
+
+ else
+ { /* need more input */
+ int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+ ++yyg->yy_c_buf_p;
+
+ switch ( yy_get_next_buffer( yyscanner ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart(yyin ,yyscanner);
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap(yyscanner ) )
+ return EOF;
+
+ if ( ! yyg->yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput(yyscanner);
+#else
+ return input(yyscanner);
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
+ *yyg->yy_c_buf_p = '\0'; /* preserve yytext */
+ yyg->yy_hold_char = *++yyg->yy_c_buf_p;
+
+ if ( c == '\n' )
+
+ do{ yylineno++;
+ yycolumn=0;
+ }while(0)
+;
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * @param yyscanner The scanner object.
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack (yyscanner);
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+ }
+
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
+ yy_load_buffer_state(yyscanner );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * @param yyscanner The scanner object.
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack (yyscanner);
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *yyg->yy_c_buf_p = yyg->yy_hold_char;
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state(yyscanner );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+static void yy_load_buffer_state (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ yyg->yy_hold_char = *yyg->yy_c_buf_p;
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * @param yyscanner The scanner object.
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner)
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ,yyscanner );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer(b,file ,yyscanner);
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ * @param yyscanner The scanner object.
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree((void *) b->yy_ch_buf ,yyscanner );
+
+ yyfree((void *) b ,yyscanner );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
+
+{
+ int oerrno = errno;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ yy_flush_buffer(b ,yyscanner);
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * @param yyscanner The scanner object.
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state(yyscanner );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ * @param yyscanner The scanner object.
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack(yyscanner);
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *yyg->yy_c_buf_p = yyg->yy_hold_char;
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ yyg->yy_buffer_stack_top++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state(yyscanner );
+ yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ * @param yyscanner The scanner object.
+ */
+void yypop_buffer_state (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if (yyg->yy_buffer_stack_top > 0)
+ --yyg->yy_buffer_stack_top;
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state(yyscanner );
+ yyg->yy_did_buffer_switch_on_eof = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (yyscan_t yyscanner)
+{
+ int num_to_alloc;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if (!yyg->yy_buffer_stack) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ , yyscanner);
+ if ( ! yyg->yy_buffer_stack )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ yyg->yy_buffer_stack_max = num_to_alloc;
+ yyg->yy_buffer_stack_top = 0;
+ return;
+ }
+
+ if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
+ yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
+ (yyg->yy_buffer_stack,
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ , yyscanner);
+ if ( ! yyg->yy_buffer_stack )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
+ yyg->yy_buffer_stack_max = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer(b ,yyscanner );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner)
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n ,yyscanner );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer(buf,n ,yyscanner);
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+ static void yy_push_state (int new_state , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth )
+ {
+ yy_size_t new_size;
+
+ yyg->yy_start_stack_depth += YY_START_STACK_INCR;
+ new_size = yyg->yy_start_stack_depth * sizeof( int );
+
+ if ( ! yyg->yy_start_stack )
+ yyg->yy_start_stack = (int *) yyalloc(new_size ,yyscanner );
+
+ else
+ yyg->yy_start_stack = (int *) yyrealloc((void *) yyg->yy_start_stack,new_size ,yyscanner );
+
+ if ( ! yyg->yy_start_stack )
+ YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+ }
+
+ yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START;
+
+ BEGIN(new_state);
+}
+
+ static void yy_pop_state (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if ( --yyg->yy_start_stack_ptr < 0 )
+ YY_FATAL_ERROR( "start-condition stack underflow" );
+
+ BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]);
+}
+
+ static int yy_top_state (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1];
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = yyg->yy_hold_char; \
+ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
+ yyg->yy_hold_char = *yyg->yy_c_buf_p; \
+ *yyg->yy_c_buf_p = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the user-defined data for this scanner.
+ * @param yyscanner The scanner object.
+ */
+YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyextra;
+}
+
+/** Get the current line number.
+ * @param yyscanner The scanner object.
+ */
+int yyget_lineno (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if (! YY_CURRENT_BUFFER)
+ return 0;
+
+ return yylineno;
+}
+
+/** Get the current column number.
+ * @param yyscanner The scanner object.
+ */
+int yyget_column (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if (! YY_CURRENT_BUFFER)
+ return 0;
+
+ return yycolumn;
+}
+
+/** Get the input stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *yyget_in (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyin;
+}
+
+/** Get the output stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *yyget_out (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyout;
+}
+
+/** Get the length of the current token.
+ * @param yyscanner The scanner object.
+ */
+int yyget_leng (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyleng;
+}
+
+/** Get the current token.
+ * @param yyscanner The scanner object.
+ */
+
+char *yyget_text (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yytext;
+}
+
+/** Set the user-defined data. This data is never touched by the scanner.
+ * @param user_defined The data to be associated with this scanner.
+ * @param yyscanner The scanner object.
+ */
+void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yyextra = user_defined ;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void yyset_lineno (int line_number , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* lineno is only valid if an input buffer exists. */
+ if (! YY_CURRENT_BUFFER )
+ yy_fatal_error( "yyset_lineno called with no buffer" , yyscanner);
+
+ yylineno = line_number;
+}
+
+/** Set the current column.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void yyset_column (int column_no , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* column is only valid if an input buffer exists. */
+ if (! YY_CURRENT_BUFFER )
+ yy_fatal_error( "yyset_column called with no buffer" , yyscanner);
+
+ yycolumn = column_no;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * @param yyscanner The scanner object.
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yyout = out_str ;
+}
+
+int yyget_debug (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yy_flex_debug = bdebug ;
+}
+
+/* Accessor methods for yylval and yylloc */
+
+YYSTYPE * yyget_lval (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yylval;
+}
+
+void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yylval = yylval_param;
+}
+
+/* User-visible API */
+
+/* yylex_init is special because it creates the scanner itself, so it is
+ * the ONLY reentrant function that doesn't take the scanner as the last argument.
+ * That's why we explicitly handle the declaration, instead of using our macros.
+ */
+
+int yylex_init(yyscan_t* ptr_yy_globals)
+
+{
+ if (ptr_yy_globals == NULL){
+ errno = EINVAL;
+ return 1;
+ }
+
+ *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
+
+ if (*ptr_yy_globals == NULL){
+ errno = ENOMEM;
+ return 1;
+ }
+
+ /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
+ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+ return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* yylex_init_extra has the same functionality as yylex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to yyalloc in
+ * the yyextra field.
+ */
+
+int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+
+{
+ struct yyguts_t dummy_yyguts;
+
+ yyset_extra (yy_user_defined, &dummy_yyguts);
+
+ if (ptr_yy_globals == NULL){
+ errno = EINVAL;
+ return 1;
+ }
+
+ *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+
+ if (*ptr_yy_globals == NULL){
+ errno = ENOMEM;
+ return 1;
+ }
+
+ /* By setting to 0xAA, we expose bugs in
+ yy_init_globals. Leave at 0x00 for releases. */
+ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+ yyset_extra (yy_user_defined, *ptr_yy_globals);
+
+ return yy_init_globals ( *ptr_yy_globals );
+}
+
+static int yy_init_globals (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ yyg->yy_buffer_stack = 0;
+ yyg->yy_buffer_stack_top = 0;
+ yyg->yy_buffer_stack_max = 0;
+ yyg->yy_c_buf_p = (char *) 0;
+ yyg->yy_init = 0;
+ yyg->yy_start = 0;
+
+ yyg->yy_start_stack_ptr = 0;
+ yyg->yy_start_stack_depth = 0;
+ yyg->yy_start_stack = NULL;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state(yyscanner);
+ }
+
+ /* Destroy the stack itself. */
+ yyfree(yyg->yy_buffer_stack ,yyscanner);
+ yyg->yy_buffer_stack = NULL;
+
+ /* Destroy the start condition stack. */
+ yyfree(yyg->yy_start_stack ,yyscanner );
+ yyg->yy_start_stack = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( yyscanner);
+
+ /* Destroy the main struct (reentrant only). */
+ yyfree ( yyscanner , yyscanner );
+ yyscanner = NULL;
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size , yyscan_t yyscanner)
+{
+ return (void *) malloc( size );
+}
+
+void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr , yyscan_t yyscanner)
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+rc_t CC KFGScan_yylex_init(KFGScanBlock* sb, const char *str)
+{
+ if (yylex_init(&sb->scanner) != 0)
+ {
+ return RC ( rcKFG, rcMgr, rcParsing, rcMemory, rcExhausted );
+ }
+ sb->buffer=yy_scan_string(str,sb->scanner);
+
+ { /* initialize line/col counters */
+ /* yylineno and yycolumn are macros using variable yyg, so we have to prepare it for them */
+ struct yyguts_t * yyg = (struct yyguts_t*)sb->scanner;
+ yylineno=1;
+ yycolumn=1;
+ }
+
+ return 0;
+}
+
+void CC KFGScan_yylex_destroy(KFGScanBlock* sb)
+{
+ yy_delete_buffer(sb->buffer,sb->scanner);
+ if (sb->scanner)
+ {
+ yylex_destroy(sb->scanner);
+ }
+ sb->scanner=0;
+ sb->buffer=0;
+}
+
+void CC KFGScan_set_debug(bool on, KFGScanBlock* sb)
+{
+ yyset_debug(on ? 1 : 0,sb->scanner);
+}
+
+int CC KFGScan_yylex(KFGSymbol* sym, KFGScanBlock* sb)
+{
+ sym->pb.tokenId=yylex(&sym->pb,sb->scanner);
+ sb->lastToken= &sym->pb;
+
+ switch (sym->pb.tokenId)
+ {
+ case kfgVAR_REF:
+ if (!sb->look_up_var(sb->self, &sym->pb))
+ {
+ /* undefined variable reference is handled silently, to behave like a shell script */
+ /* KFG_error(&sym->pb, sb, "variable not found");*/
+ sym->pb.tokenLength = 0;
+ }
+ sym->pb.tokenId = kfgSTRING;
+ break;
+ case kfgUNTERM_VAR_REF: /* convert bad var ref into a string */
+ KFG_error(&sym->pb, sb, "unterminated variable reference inside a string (use '\\$(' to avoid this message)");
+ sym->pb.tokenId = kfgSTRING;
+ break;
+ case kfgUNTERM_STRING:
+ case kfgUNTERM_ESCAPED_STRING:
+ KFG_error(&sym->pb, sb, "unterminated string");
+ break;
+ default:
+ break;
+ }
+
+ return sym->pb.tokenId;
+}
+
diff --git a/libs/kfg/config-tokens.h b/libs/kfg/config-tokens.h
new file mode 100644
index 0000000..2090822
--- /dev/null
+++ b/libs/kfg/config-tokens.h
@@ -0,0 +1,75 @@
+/* A Bison parser, made by GNU Bison 2.5. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ kfgEND_INPUT = 0,
+ kfgEND_LINE = 258,
+ kfgUNTERM_STRING = 259,
+ kfgUNTERM_ESCAPED_STRING = 260,
+ kfgUNRECOGNIZED = 261,
+ kfgVAR_REF = 262,
+ kfgUNTERM_VAR_REF = 263,
+ kfgASSIGN = 264,
+ kfgSTRING = 265,
+ kfgESCAPED_STRING = 266,
+ kfgABS_PATH = 267,
+ kfgREL_PATH = 268
+ };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+
+ KFGParseBlock pb;
+ const VNamelist* namelist;
+
+
+
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+
+
diff --git a/libs/kfg/config.c b/libs/kfg/config.c
index f211290..faadfe2 100644
--- a/libs/kfg/config.c
+++ b/libs/kfg/config.c
@@ -33,26 +33,51 @@ struct KfgConfigNamelist;
#include <klib/token.h>
#include <klib/container.h>
+#include <klib/data-buffer.h> /* KDataBuffer */
#include <klib/refcount.h>
#include <klib/text.h>
#include <klib/printf.h>
#include <klib/rc.h>
#include <klib/debug.h>
-#include <klib/log.h>
+#include <klib/log.h>
+#include <klib/out.h> /* OUTMSG */
+#include <klib/klib-priv.h>
#include <kfs/directory.h>
+#include <kfs/gzip.h> /* KFileMakeGzipForRead */
+#include <kfs/subfile.h> /* KFileMakeSubRead */
#include <kfs/file.h>
#include <kfs/dyload.h>
#include <kfs/mmap.h>
+#include <os-native.h>
+#include <vfs/path.h>
+#include <strtol.h>
#include <sysalloc.h>
+#include <os-native.h>
#include <string.h>
+#include <ctype.h>
#include <stdlib.h>
#include <assert.h>
+#include <va_copy.h>
+
+#if !WINDOWS
+ #include <sys/utsname.h>
+#endif
+
+#include "kfg-parse.h"
+#include "config-tokens.h"
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
+/* the leaf name of the user's modifiable settings,
+ must reside in the user's $HOME/.ncbi directory */
+#define MAGIC_LEAF_NAME "user-settings.mkfg"
+
+static bool s_disable_user_settings = false;
+
+
/*--------------------------------------------------------------------------
* KConfig
*/
@@ -61,6 +86,34 @@ rc_t KConfigSever ( const KConfig *self );
/*--------------------------------------------------------------------------
+ * KConfigIncluded
+ * node within configuration tree
+ */
+
+typedef struct KConfigIncluded KConfigIncluded;
+struct KConfigIncluded
+{
+ BSTNode n;
+ bool is_magic_file;
+ char path [ 1 ];
+};
+
+
+static
+void CC KConfigIncludedWhack ( BSTNode *n, void *ignore )
+{
+ free ( n );
+}
+
+static
+int CC KConfigIncludedSort ( const BSTNode *item, const BSTNode *n )
+{
+ const KConfigIncluded *a = ( const KConfigIncluded* ) item;
+ const KConfigIncluded *b = ( const KConfigIncluded* ) n;
+ return strcmp ( a -> path, b -> path );
+}
+
+/*--------------------------------------------------------------------------
* KConfigNode
* node within configuration tree
*/
@@ -74,6 +127,9 @@ struct KConfigNode
/* uncounted reference to parent node */
KConfigNode *dad;
+ /* File node came from; null if created during runtime*/
+ KConfigIncluded *came_from;
+
/* named children - always unique */
BSTree children;
@@ -89,7 +145,9 @@ struct KConfigNode
KRefcount refcount;
+ bool internal;
bool read_only;
+ bool dirty;
};
/* replace this once we introduce attributes */
@@ -126,19 +184,14 @@ void CC KConfigNodeWhack ( BSTNode *n, void * data )
static
void KConfigNodeInit ( KConfigNode *self, const String *name )
{
+ /* clear out here, ignoring the string space */
+ memset ( self, 0, sizeof * self );
+
/* initialize name early for the sake of KRefcountInit */
string_copy ( ( char* ) ( self + 1 ), name -> size + 1, name -> addr, name -> size );
StringInit ( & self -> name, ( char* ) ( self + 1 ), name -> size, name -> len );
-
- KRefcountInit ( & self -> refcount, 0, "KConfigNode", "init", self -> name . addr );
-
- self -> mgr = NULL;
- self -> dad = NULL;
- BSTreeInit ( & self -> children );
- BSTreeInit ( & self -> attr );
- self -> val_buffer = NULL;
StringInit ( & self -> value, "", 0, 0 );
- self -> read_only = false;
+ KRefcountInit ( & self -> refcount, 0, "KConfigNode", "init", self -> name . addr );
}
/* Make
@@ -146,6 +199,7 @@ void KConfigNodeInit ( KConfigNode *self, const String *name )
static
rc_t KConfigNodeMake ( KConfigNode **n, const String *name )
{
+ /* don't use calloc, because of string space */
KConfigNode *cn = malloc ( sizeof * cn + name -> size + 1 );
if ( cn == NULL )
{
@@ -206,7 +260,7 @@ LIB_EXPORT rc_t CC KConfigNodeRelease ( const KConfigNode *self )
{
case krefWhack:
KConfigNodeWhack ( & ( ( KConfigNode* ) self ) -> n, NULL );
- break;
+ break;
case krefLimit:
return RC ( rcKFG, rcNode, rcReleasing, rcRange, rcExcessive );
}
@@ -224,95 +278,85 @@ struct KConfig
BSTree tree;
BSTree included;
KDualRef refcount;
-};
-
-static KConfig *G_kfg = NULL;
-
-typedef struct KConfigIncluded KConfigIncluded;
-struct KConfigIncluded
-{
- BSTNode n;
- char path [ 1 ];
-};
+ KConfigIncluded *current_file;
+ char * load_path;
+ size_t load_path_sz_tmp;
-static
-void CC KConfigIncludedWhack ( BSTNode *n, void *ignore )
-{
- free ( n );
-}
-
-static
-int CC KConfigIncludedSort ( const BSTNode *item, const BSTNode *n )
-{
- const KConfigIncluded *a = ( const KConfigIncluded* ) item;
- const KConfigIncluded *b = ( const KConfigIncluded* ) n;
- return strcmp ( a -> path, b -> path );
-}
+ const char *magic_file_path;
+ size_t magic_file_path_size;
+ bool dirty;
+ bool initialized;
+};
-static char * G_load_path = NULL;
-static size_t G_load_path_sz_tmp = 0;
-static char* append_to_load_path(char* src, size_t* sz,
- const char* chunk)
+rc_t KConfigAppendToLoadPath(KConfig *self, const char* chunk)
{
+ rc_t rc = 0;
size_t new_sz = 0;
- if (sz == NULL) {
- return NULL;
- }
+ assert(self);
+
if (chunk == NULL || chunk[0] == '\0') {
- return src;
+ return rc;
}
- if (src == NULL) {
- *sz = PATH_MAX;
- src = malloc(*sz);
- if (src == NULL) {
- return NULL;
+ if (self->load_path == NULL) {
+ self->load_path_sz_tmp = PATH_MAX;
+ self->load_path = malloc(self->load_path_sz_tmp);
+ if (self->load_path == NULL) {
+ return RC ( rcKFG, rcMgr, rcCreating, rcMemory, rcExhausted );
}
- src[0] = '\0';
+ self->load_path[0] = '\0';
}
- new_sz = strlen(src) + 1 + strlen(chunk) + 1;
- if (*sz < new_sz) {
- *sz = 2 * new_sz;
- src = realloc(src, *sz);
- if (src == NULL) {
- return NULL;
+ new_sz = string_size(self->load_path) + 1 + string_size(chunk) + 1;
+ if (self->load_path_sz_tmp < new_sz) {
+ self->load_path_sz_tmp = 2 * new_sz;
+ self->load_path = realloc(self->load_path, self->load_path_sz_tmp);
+ if (self->load_path == NULL) {
+ return RC ( rcKFG, rcMgr, rcCreating, rcMemory, rcExhausted );
}
}
- if (src[0] != '\0') {
- strcat(src, ":");
+ if (self->load_path[0] != '\0') {
+ strcat(self->load_path, ":");
}
- strcat(src, chunk);
+ strcat(self->load_path, chunk);
- return src;
+ return rc;
}
/* Whack
*/
static
+rc_t KConfigEmpty ( KConfig * self)
+{
+ if (self)
+ {
+ BSTreeWhack ( & self -> tree, KConfigNodeWhack, self );
+ BSTreeWhack ( & self -> included, KConfigIncludedWhack, NULL );
+
+ self -> magic_file_path_size = 0;
+ free ( ( void* ) self -> magic_file_path );
+ self -> magic_file_path = NULL;
+
+ self->load_path_sz_tmp = 0;
+ free ( self->load_path );
+ self->load_path = NULL;
+ }
+ return 0;
+}
+
+static
rc_t KConfigWhack ( KConfig *self )
{
- if ( self == G_kfg )
-#if KFG_COMMON_CREATION
- return 0;
-#else
- G_kfg = NULL;
-#endif
+ KConfigEmpty (self);
- BSTreeWhack ( & self -> tree, KConfigNodeWhack, self );
- BSTreeWhack ( & self -> included, KConfigIncludedWhack, NULL );
free ( self );
- free ( G_load_path );
- G_load_path = NULL;
- G_load_path_sz_tmp = 0;
-
return 0;
}
@@ -323,8 +367,11 @@ void KConfigInit ( KConfig *self, KConfigNode * root )
{
KDualRefInit ( & self -> refcount, 1, 0, "KConfig", "init", "kfg" );
BSTreeInit ( & self -> tree );
+ self -> dirty = false;
+ self -> initialized = false;
BSTreeInit ( & self -> included );
BSTreeInsert ( & self -> tree, & root -> n, KConfigNodeSort );
+ self -> magic_file_path = NULL;
}
@@ -460,8 +507,10 @@ KToken *KConfigNodeFind ( const KConfigNode *self, const KConfigNode **n, KToken
/* Create
*/
static
-KToken *KConfigNodeCreate ( KConfigNode *self, KConfigNode **n, KTokenSource *src, KToken *t )
+KToken *KConfigNodeCreate ( KConfigNode *self, KConfigNode **n, KTokenSource *src, KToken *t,
+ KConfigIncluded *current_file )
{
+ bool created = false;
KConfigNode * nself;
* n = NULL;
@@ -492,6 +541,7 @@ KToken *KConfigNodeCreate ( KConfigNode *self, KConfigNode **n, KTokenSource *sr
BSTreeInsert ( & self -> children, & child -> n, KConfigNodeSort );
child -> dad = self;
self = child;
+ created = true;
}
else
{
@@ -509,6 +559,9 @@ KToken *KConfigNodeCreate ( KConfigNode *self, KConfigNode **n, KTokenSource *sr
KTokenizerNext ( kPOSIXPathTokenizer, src, t );
}
+ if ( created )
+ self -> came_from = current_file;
+
* n = self;
return t;
}
@@ -727,7 +780,8 @@ rc_t KConfigNodeVOpenNodeUpdateInt ( KConfigNode *self, KConfig *mgr,
while ( t.id == eFwdSlash);
/* follow path */
- if ( KConfigNodeCreate ( self, node, & src, & t ) == NULL )
+ assert ( mgr != NULL );
+ if ( KConfigNodeCreate ( self, node, & src, & t, mgr -> current_file ) == NULL )
return RC ( rcKFG, rcNode, rcOpening, rcPath, rcInvalid );
if ( ( self = * node ) == NULL )
rc = RC ( rcKFG, rcNode, rcOpening, rcMemory, rcExhausted );
@@ -738,15 +792,21 @@ rc_t KConfigNodeVOpenNodeUpdateInt ( KConfigNode *self, KConfig *mgr,
if ( rc == 0 )
{
- /* check to see if open */
- if ( atomic32_read ( & self -> refcount ) == 0 )
+ /* check to see if internal */
+ if ( self -> internal )
+ rc = RC ( rcKFG, rcNode, rcOpening, rcNode, rcReadonly );
+ else
{
- self -> mgr = KConfigAttach ( mgr );
- assert ( ! self -> read_only );
- return KConfigNodeAddRef ( self );
- }
+ /* check to see if open */
+ if ( atomic32_read ( & self -> refcount ) == 0 )
+ {
+ self -> mgr = KConfigAttach ( mgr );
+ assert ( ! self -> read_only );
+ return KConfigNodeAddRef ( self );
+ }
- rc = RC ( rcKFG, rcNode, rcOpening, rcNode, rcBusy );
+ rc = RC ( rcKFG, rcNode, rcOpening, rcNode, rcBusy );
+ }
}
}
@@ -874,6 +934,16 @@ LIB_EXPORT rc_t CC KConfigNodeRead ( const KConfigNode *self,
return rc;
}
+static
+void KConfigNodeSetDirty ( KConfigNode *self )
+{
+ KConfig *mgr = self -> mgr;
+
+ if ( mgr == NULL )
+ self -> dirty = true;
+ else if ( mgr -> initialized )
+ self -> dirty = mgr -> dirty = true;
+}
/* Write
* write a node value or attribute
@@ -887,7 +957,7 @@ LIB_EXPORT rc_t CC KConfigNodeWrite ( KConfigNode *self, const char *buffer, siz
if ( self == NULL )
rc = RC ( rcKFG, rcNode, rcWriting, rcSelf, rcNull );
- else if ( self -> read_only )
+ else if ( self -> read_only || self -> internal )
rc = RC ( rcKFG, rcNode, rcWriting, rcSelf, rcReadonly );
else if ( size == 0 )
{
@@ -912,6 +982,9 @@ LIB_EXPORT rc_t CC KConfigNodeWrite ( KConfigNode *self, const char *buffer, siz
assert ( self -> val_buffer != NULL );
string_copy ( self -> val_buffer, self -> value . size + 1, buffer, size );
self -> value . len = string_len ( self -> val_buffer, size );
+
+ KConfigNodeSetDirty ( self );
+
rc = 0;
}
@@ -930,7 +1003,7 @@ LIB_EXPORT rc_t CC KConfigNodeAppend ( KConfigNode *self, const char *buffer, si
if ( self == NULL )
rc = RC ( rcKFG, rcNode, rcWriting, rcSelf, rcNull );
- else if ( self -> read_only )
+ else if ( self -> read_only || self -> internal )
rc = RC ( rcKFG, rcNode, rcWriting, rcSelf, rcReadonly );
else if ( size == 0 )
rc = 0;
@@ -945,6 +1018,9 @@ LIB_EXPORT rc_t CC KConfigNodeAppend ( KConfigNode *self, const char *buffer, si
string_copy ( & self -> val_buffer [ self -> value . size ], self -> value . size + size + 1, buffer, size );
self -> value . size += size;
self -> value . len = string_len ( self -> val_buffer, self -> value . size );
+
+ KConfigNodeSetDirty ( self );
+
rc = 0;
}
@@ -966,7 +1042,7 @@ LIB_EXPORT rc_t CC KConfigNodeAppend ( KConfigNode *self, const char *buffer, si
LIB_EXPORT rc_t CC KConfigNodeReadAttr ( const KConfigNode *self, const char *name,
char *buffer, size_t bsize, size_t *size )
{
- PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+ PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
return -1;
}
@@ -981,7 +1057,7 @@ LIB_EXPORT rc_t CC KConfigNodeReadAttr ( const KConfigNode *self, const char *na
LIB_EXPORT rc_t CC KConfigNodeWriteAttr ( KConfigNode *self,
const char *name, const char *value )
{
- PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+ PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
return -1;
}
@@ -992,25 +1068,25 @@ LIB_EXPORT rc_t CC KConfigNodeWriteAttr ( KConfigNode *self,
*/
LIB_EXPORT rc_t CC KConfigNodeDropAll ( KConfigNode *self )
{
- PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+ PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
return -1;
}
LIB_EXPORT rc_t CC KConfigNodeDropAttr ( KConfigNode *self, const char *attr )
{
- PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+ PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
return -1;
}
LIB_EXPORT rc_t CC KConfigNodeVDropChild ( KConfigNode *self, const char *path, va_list args )
{
- PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+ PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
return -1;
}
LIB_EXPORT rc_t CC KConfigNodeDropChild ( KConfigNode *self, const char *path, ... )
{
- PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+ PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
return -1;
}
@@ -1026,13 +1102,13 @@ LIB_EXPORT rc_t CC KConfigNodeDropChild ( KConfigNode *self, const char *path, .
*/
LIB_EXPORT rc_t CC KConfigNodeRenameAttr ( KConfigNode *self, const char *from, const char *to )
{
- PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+ PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
return -1;
}
LIB_EXPORT rc_t CC KConfigNodeRenameChild ( KConfigNode *self, const char *from, const char *to )
{
- PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+ PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
return -1;
}
@@ -1041,225 +1117,140 @@ LIB_EXPORT rc_t CC KConfigNodeRenameChild ( KConfigNode *self, const char *from,
* KConfig
*/
-
-/*
- Grammar:
- EOL = "\n";
- lower = [a-z]
- alpha = [A-Za-z]
- file = <line>*;
- line = comment | path-value;
- comment = script-comment | cpp-comment;
- script-comment = "#", not_pound , EOL;
- cpp-comment = "//", any, EOL;
-
-*/
-
-typedef struct parse_block
-{
- KConfig * self;
- const KTokenizer * tz;
- KTokenSource * src;
- KToken t;
- const String * symbol;
- const String * value;
-} parse_block;
-
static
-rc_t write_nvp (parse_block * pb)
+rc_t
+update_node ( KConfig* self, const char* key, const char* value, bool internal )
{
- rc_t rc;
KConfigNode * node;
-
- rc = KConfigVOpenNodeUpdate ( pb->self, &node, pb->symbol->addr, NULL);
-
+ rc_t rc = KConfigVOpenNodeUpdate ( self, &node, key, NULL);
if (rc == 0)
{
- /* +1 and -2 get rid of containing quote marks */
- rc = KConfigNodeWrite (node, pb->value->addr + 1, StringSize (pb->value) - 2);
-
+/* pLogMsg(klogInfo, "updating config key $(KEY) with '$(VALUE)'",
+ "KEY=%s,VALUE=%s",
+ key, value);*/
+ rc = KConfigNodeWrite (node, value, string_size(value));
+ node -> internal = internal;
KConfigNodeRelease ( node );
}
-
return rc;
}
static
-rc_t parse_value (parse_block * pb)
-{
- rc_t rc;
- size_t value_size;
- char value_buffer [4096];
-
-
- switch ((KTokenizerNext (pb->tz, pb->src, &pb->t))->id)
+rc_t write_nvp(void * self, const char* name, size_t nameLen, VNamelist* values)
+{ /* concatenate all values from the namelist and put the result into config under the given name */
+ uint32_t count;
+ uint32_t size=0;
+ uint32_t concatTo=0;
+ uint32_t i;
+ const String* nameStr;
+
+ char* buf;
+ rc_t rc=VNameListCount(values, &count);
+ if (rc != 0)
{
- default:
- rc = RC (rcKFG, rcMgr, rcParsing, rcString, rcUnexpected);
- break;
- case eString:
- case eEscapedString:
- rc = KTokenToString (&pb->t, value_buffer, sizeof value_buffer, &value_size);
- if (rc == 0)
+ return rc;
+ }
+ for (i=0; i < count; ++i)
+ {
+ const char* val;
+ rc=VNameListGet(values, i, &val);
+ if (rc != 0)
{
- StringCopy (&pb->value, &pb->t.str);
- rc = write_nvp (pb);
- free ((void*)pb->value);
+ return rc;
}
- break;
+ size+=string_size(val);
}
- return rc;
-}
-static
-rc_t validate_symbol (parse_block * pb)
-{
- /* yeah this should do something eventually */
- return 0;
-}
-static
-rc_t parse_name (parse_block * pb)
-{
- const String * concat;
- rc_t rc;
+ buf=(char*)malloc(size+1);
+ if (buf == 0)
+ {
+ return RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
+ }
- switch ( KTokenizerNext ( pb -> tz, pb -> src, & pb -> t ) -> id )
+ concatTo=0;
+ for (i=0; i < count; ++i)
{
- default:
- rc = RC (rcKFG, rcMgr, rcParsing, rcName, rcUnexpected);
- break;
- /* any of these can be part of a path -- but not yet */
- case eDecimal:
- /* case eHex: */
- /* case eOctal: */
- /* case eFloat: */
- /* case eExpFloat: */
- /* case eMajMinRel: */
- case eIdent:
- case eName:
- /* case ePeriod: */
- /* case eTilde: */
- /* case eMinus: */
- case eFwdSlash:
- /* case eDblPeriod: */
- /* case eEllipses: */
- rc = StringConcat (&concat, pb->symbol, &pb->t.str);
- if (rc == 0)
- {
- pb->symbol = concat;
- rc = parse_name (pb);
- free ((void*)concat);
- }
- break;
- case eAssign:
- rc = validate_symbol (pb);
- if (rc == 0)
+ const char* val;
+ rc=VNameListGet(values, i, &val);
+ if (rc != 0)
{
- rc = parse_value (pb);
+ free(buf);
+ return rc;
}
- break;
+ string_copy(buf+concatTo, size+1-concatTo, val, string_size(val));
+ concatTo+=string_size(val);
+ }
+ buf[size]=0;
+
+ {
+ String tmp;
+ StringInit(&tmp, name, nameLen, nameLen);
+ StringCopy(&nameStr, &tmp);
}
+ rc = update_node((KConfig *)self, nameStr->addr, buf, false);
+ StringWhack(nameStr);
+ free(buf);
return rc;
}
static
-rc_t parse_nvp (parse_block * pb)
+bool look_up_var(void * self, struct KFGParseBlock* pb)
{
- const String * symbol;
- rc_t rc;
-
-redo:
- switch ((KTokenizerNext (pb->tz, pb->src, &pb->t))->id)
+ const KConfigNode* node;
+ rc_t rc = KConfigOpenNodeRead((KConfig*)self, &node, "%.*s", pb->tokenLength-3, pb->tokenText+2);
+ if (rc == 0)
{
- case eEndOfInput:
- rc = 0;
- break;
-
- case eEndOfLine:
- LOGMSG (klogInfo, "End Of Line");
- goto redo;
-
- default:
- rc = RC (rcKFG, rcMgr, rcParsing, rcToken, rcUnexpected);
- break;
-
- /* a symbol must look like a legal posix path
- * thetokenizer eats things awkwardly for us so we'll muddle through
- *
- * We aren't getting whitespace and we aren't getting all legal path
- * characters as a path at this point so we'll just face it.
- * Gather up all legal symbols and concatenate them.
- *
- * this currently allows the bad syntax of
- *
- * path/name = "value";
- *
- * to be the same as
- *
- * path
- * /
- * # woo hoo
- * name
- * =
- * "value"
- *
- * ;
- */
- /* any of these can be the first part of a path -- but not yet */
- /* case eDecimal: */
- /* case eHex: */
- /* case eOctal: */
- /* case eFloat: */
- /* case eExpFloat: */
- /* case eMajMinRel: */
- case eIdent:
- case eName:
- /* case ePeriod: */
- /* case eTilde: */
- /* case eMinus: */
- case eFwdSlash:
- /* case eDblPeriod: */
- /* case eEllipses: */
-
- rc = StringCopy (&symbol, &pb->t.str);
- if (rc == 0)
- {
- pb->symbol = symbol;
- rc = parse_name (pb);
- free ((void*)symbol);
- }
- break;
+ pb->tokenText = node->value.addr;
+ pb->tokenLength = node->value.len;
+ pb->tokenId = kfgVAR_REF;
}
- return rc;
+ KConfigNodeRelease(node);
+ return rc == 0;
}
+static
+void CC report_error(KFGScanBlock* sb, const char* msg)
+{
+ pLogMsg(klogErr, "$(file):$(line):$(column): error: token='$(token)', msg='$(msg)'",
+ "file=%s,line=%d,column=%d,token=%.*s,msg=%s",
+ sb->file,
+ sb->lastToken->line_no,
+ sb->lastToken->column_no,
+ sb->lastToken->tokenLength,
+ sb->lastToken->tokenText,
+ msg);
+}
/*
- * Set up the parameter block and start prasing lines
+ * Set up the parameter block and start parsing lines
*/
static
-rc_t parse_file ( KConfig * self, KTokenSource * src )
+rc_t parse_file ( KConfig * self, const char* path, const char * src )
{
- parse_block pb;
+ KFGParseBlock pb;
+ KFGScanBlock sb;
rc_t rc;
- pb.self = self;
- pb.tz = kPOSIXPathTokenizer;
- pb.src = src;
- memset (&pb.t, 0, sizeof pb.t);
- pb.symbol = NULL;
- pb.value = NULL;
- do
+ pb.tokenLength = 0;
+ pb.line_no = 0;
+ pb.column_no = 0;
+
+ sb.self = self;
+ sb.file = path;
+ sb.write_nvp = write_nvp;
+ sb.look_up_var = look_up_var;
+ sb.report_error = report_error;
+
+ rc = KFGScan_yylex_init(&sb, src);
+ if (rc == 0)
{
- rc = parse_nvp (&pb);
- if (rc)
- break;
+ KFG_parse(&pb, &sb); /* may have reported parse errors into log, but we should have been able to extract enough data to proceed regardless */
+ KFGScan_yylex_destroy(&sb);
}
- while (pb.t.id != eEndOfInput);
+
return rc;
}
-
/* LoadFile
* loads a configuration file
*/
@@ -1274,9 +1265,52 @@ LIB_EXPORT rc_t CC KConfigLoadFile ( KConfig * self, const char * path, const KF
else
{
const KMMap * mm;
+ bool entry_initialized = self -> initialized;
+ self -> initialized = false;
+
+ /* populate file-specific predefined nodes */
+#define UPDATE_NODES(dir, file) \
+ rc = update_node(self, "kfg/dir", dir, false ); \
+ if (rc == 0) \
+ rc = update_node(self, "kfg/name", file, false )
- if ( path == NULL || path [ 0 ] == 0 )
+ if ( path == NULL || path [ 0 ] == 0)
+ {
path = "UNSPECIFIED";
+ UPDATE_NODES ( "", "" );
+ }
+ else
+ {
+ KDirectory* dir;
+ rc = KDirectoryNativeDir(&dir);
+ if (rc == 0 )
+ {
+ char buff [ 4096 ];
+ rc = KDirectoryResolvePath ( dir, true, buff, sizeof buff,
+ "%.*s", string_size(path), path );
+ if ( rc == 0 )
+ {
+ char* name = strrchr (buff, '/');
+ if (name == NULL)
+ { /* no dir name */
+ UPDATE_NODES("", buff);
+ }
+ else
+ {
+ *name=0; /* nul-terminate dir name; file name follows the 0 */
+ UPDATE_NODES(buff, name+1);
+ }
+ }
+ KDirectoryRelease ( dir );
+ }
+ else
+ {
+ update_node(self, "kfg/dir", "", false);
+ update_node(self, "kfg/name", "", false);
+ }
+ }
+#undef UPDATE_NODES
+
rc = KMMapMakeRead ( & mm, file );
if ( rc == 0 )
@@ -1288,96 +1322,414 @@ LIB_EXPORT rc_t CC KConfigLoadFile ( KConfig * self, const char * path, const KF
rc = KMMapSize ( mm, & size );
if ( rc == 0 )
{
- String str;
- String spath;
- KTokenText tt;
- KTokenSource src;
-
- /* create a String from file path */
- StringInitCString ( & spath, path );
-
- /* create a String from file source */
- StringInit ( & str, ptr, size, string_len ( ptr, size ) );
-
- /* initialize token-text */
- KTokenTextInit ( & tt, & str, & spath );
+ /* make a 0-terminated copy for parsing */
+ char* buf=malloc(size+1);
+ if (buf == 0)
+ {
+ rc = RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
+ }
+ else
+ {
+ string_copy(buf, size+1, ptr, size);
+ buf[size]=0;
- /* initialize token source */
- KTokenSourceInit ( & src, & tt );
+ /* Parse the path to populate: */
+ /* update_node(self, "kfg/dir", dir, false);*/
+ /* update_node(self, "kfg/name", name, false);*/
- /* parse config file */
- parse_file ( self, & src );
+ /* parse config file */
+ rc = parse_file ( self, path, buf );
+ free(buf);
+ }
}
KMMapRelease ( mm );
}
+ self -> initialized = entry_initialized;
}
return rc;
}
+
+typedef struct PrintBuff PrintBuff;
+struct PrintBuff
+{
+ KFile *f;
+ /* total bytes flushed to the file*/
+ size_t flushed;
+ /* total bytes in buffer */
+ size_t buffered;
+
+ rc_t rc;
+
+ /* buffer */
+ char buffer [ 32 * 1024 ];
+
+};
+
+/* Init
+ * initialize your structure
+ */
static
-rc_t make_include_path ( KConfigIncluded **p, const KDirectory *dir, const char *path, size_t sz )
+void PrintBuffInit ( PrintBuff *pb, KFile *f )
{
- char buff [ 4096 ];
- rc_t rc = KDirectoryResolvePath ( dir, true, buff, sizeof buff, "%.*s", ( int ) sz, path );
- if ( rc == 0 )
+ assert ( pb != NULL );
+ pb -> f = f;
+ pb -> flushed = 0;
+ pb -> buffered = 0;
+ pb -> rc = 0;
+}
+
+/* Flush
+ * Write buffer out to file
+ */
+static rc_t PrintBuffFlush ( PrintBuff *self )
+{
+ rc_t rc = 0;
+
+ assert ( self != NULL );
+ if ( self -> buffered != 0 )
{
- KConfigIncluded *include;
- sz = strlen ( buff );
- include = malloc ( sizeof * include + sz );
- if ( include == NULL )
- rc = RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
- else
+ size_t num_writ;
+ rc = KFileWriteAll ( self -> f, self -> flushed, self -> buffer, self -> buffered, & num_writ );
+
+ if ( rc == 0 )
{
- string_copy ( include -> path, sz + sizeof include -> path, buff, sz );
- * p = include;
- return 0;
+ if ( num_writ != self -> buffered )
+ rc = RC ( rcKFG, rcBuffer, rcFlushing, rcTransfer, rcIncomplete );
+ else
+ {
+ self -> flushed += num_writ;
+ self -> buffered = 0;
+ }
}
}
- * p = NULL;
- return rc;
+ return self -> rc = rc;
}
-
+/* Print
+ * printf style writing to the buffer
+ */
static
-bool load_from_file_path ( KConfig *self, const KDirectory *dir, const char *path, size_t sz )
+rc_t PrintBuffPrint ( PrintBuff *self, const char *fmt, ... )
{
- const KFile *cfg_file;
rc_t rc;
-
- DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from file '%.*s'\n", (int)sz, path ) );
- rc = KDirectoryOpenFileRead ( dir, & cfg_file, "%.*s", ( int ) sz, path );
+ size_t num_writ;
+ va_list args1, args2;
+
+ assert ( self != NULL );
+ assert ( fmt != NULL );
+ assert ( fmt [ 0 ] != 0 );
+
+ va_start ( args1, fmt );
+ va_copy ( args2, args1 );
+
+ rc = string_vprintf ( & self -> buffer [ self -> buffered ],
+ sizeof self -> buffer - self -> buffered, & num_writ, fmt, args1 );
if ( rc == 0 )
+ self -> buffered += num_writ;
+ else if ( GetRCObject ( rc ) == rcBuffer && GetRCState ( rc ) == rcInsufficient )
{
- KConfigIncluded *include;
- rc = make_include_path ( & include, dir, path, sz );
+ rc = PrintBuffFlush ( self );
if ( rc == 0 )
{
- BSTNode *existing;
- if ( BSTreeInsertUnique ( & self -> included, & include -> n, & existing, KConfigIncludedSort ) != 0 )
- free ( include );
- else
- {
- rc = KConfigLoadFile ( self, include -> path, cfg_file );
- if ( rc != 0 )
- {
- BSTreeUnlink ( & self -> included, & include -> n );
- free ( include );
- }
- }
+ rc = string_vprintf ( & self -> buffer [ self -> buffered ],
+ sizeof self -> buffer - self -> buffered, & num_writ, fmt, args2 );
+ if ( rc == 0 )
+ self -> buffered += num_writ;
}
-
- KFileRelease ( cfg_file );
}
- return ( rc == 0 ) ? true : false;
+
+ va_end ( args2 );
+ va_end ( args1 );
+
+ return self -> rc = rc;
+
}
-typedef struct scan_config_path_data scan_config_path_data;
-struct scan_config_path_data
+char ToHex(uint32_t i)
{
- KConfig *self;
- bool loaded;
+ if (i <= 9)
+ return '0' + i;
+ return 'A' + (i - 10);
+}
+
+static
+rc_t CC PrintBuffPrintQuoted ( PrintBuff *self, const String* data )
+{
+ rc_t rc = PrintBuffPrint(self, "\"");
+ const char* str = (const char*)(data->addr);
+ uint32_t i;
+ for ( i = 0; i < StringLength(data); ++i )
+ {
+ if (rc != 0)
+ break;
+ if (str[i] < ' ')
+ {
+ rc = PrintBuffPrint(self, "\\x%c%c", ToHex(str[i]/16), ToHex(str[i]%16) );
+ }
+ else
+ {
+ switch (str[i])
+ {
+ case '"':
+ rc = PrintBuffPrint(self, "\\\"");
+ break;
+ default:
+ rc = PrintBuffPrint(self, "%c", str[i]);
+ }
+ }
+ }
+ if (rc == 0)
+ rc = PrintBuffPrint(self, "\"");
+ return rc;
+}
+
+static
+bool KConfigNodePrintPath ( KConfigNode *self, PrintBuff *pb )
+{
+ if ( self -> dad == NULL )
+ PrintBuffPrint ( pb, "%S", & self -> name );
+ else
+ {
+ if ( KConfigNodePrintPath ( self -> dad, pb ) )
+ return true;
+
+ PrintBuffPrint ( pb, "/%S", & self -> name );
+ }
+ return pb -> rc != 0;
+}
+
+static
+bool CC WriteDirtyNode ( BSTNode *n, void *data )
+{
+ KConfigNode *self = ( KConfigNode * ) n;
+ PrintBuff *pb = data;
+
+ if ( self -> dirty || ( self -> came_from != NULL && self -> came_from -> is_magic_file ) )
+ {
+ if ( KConfigNodePrintPath ( self, pb ) )
+ return true;
+
+ if ( PrintBuffPrint ( pb, " = " ) != 0 )
+ return true;
+
+ if ( PrintBuffPrintQuoted ( pb, &self->value ) != 0 )
+ return true;
+
+ if ( PrintBuffPrint ( pb, "\n" ) != 0 )
+ return true;
+ }
+
+ return BSTreeDoUntil ( & self -> children, false, WriteDirtyNode, pb );
+}
+
+static
+void CC UnsetDirtyNode ( BSTNode *n, void *data )
+{
+ KConfigNode *self = ( KConfigNode * ) n;
+
+ if ( self -> dirty )
+ self -> dirty = false;
+
+ BSTreeForEach ( & self -> children, false, UnsetDirtyNode, data );
+}
+
+static
+rc_t path_to_magic_file ( const KConfig *self, char *path, size_t buffer_size, size_t *path_size )
+{
+ const KConfigNode *node;
+ rc_t rc = KConfigOpenNodeRead ( self, & node, "NCBI_SETTINGS" );
+
+ if ( rc == 0 )
+ {
+ size_t num_read, remaining;
+ rc = KConfigNodeRead ( node, 0, path, buffer_size - 1, & num_read, & remaining );
+
+ if ( rc == 0 && remaining != 0 )
+ rc = RC ( rcKFG, rcNode, rcReading, rcBuffer, rcInsufficient );
+
+ path[num_read] = '\0';
+
+ KConfigNodeRelease ( node );
+ }
+ return rc;
+}
+
+/* Commit
+ * commits changes to user's private configuration file
+ */
+LIB_EXPORT rc_t CC KConfigCommit ( KConfig *self )
+{
+ rc_t rc;
+ size_t path_size;
+ char magic_file_path [ 4096 ];
+
+ if ( self == NULL )
+ return RC ( rcKFG, rcData, rcCommitting, rcSelf, rcNull );
+
+ /* Must only commit dirty nodes*/
+ if ( ! self -> dirty )
+ return 0;
+
+ rc = path_to_magic_file ( self, magic_file_path, sizeof magic_file_path, & path_size );
+ if ( rc == 0 )
+ {
+ char tmp_file_path [ 4096 ];
+ rc = string_printf ( tmp_file_path, sizeof tmp_file_path, NULL, "%s.tmp", magic_file_path );
+ if ( rc == 0 )
+ {
+ KDirectory *dir;
+
+ /* get current directory */
+ rc = KDirectoryNativeDir ( & dir );
+ if ( rc == 0 )
+ {
+ KFile *tmp;
+
+ /* create temp magic file */
+ rc = KDirectoryCreateFile ( dir, & tmp, false, 0600, kcmInit | kcmParents, tmp_file_path );
+
+ if ( rc == 0 )
+ {
+ PrintBuff pb;
+ PrintBuffInit ( & pb, tmp );
+
+ /* issue warning */
+ rc = PrintBuffPrint ( & pb, "## auto-generated configuration file - DO NOT EDIT ##\n\n" );
+ if ( rc == 0 )
+ {
+ /* flush nodes to file */
+ if ( BSTreeDoUntil ( & self -> tree, false, WriteDirtyNode, & pb ) )
+ /* failure */
+ rc = pb . rc;
+ else
+ rc = PrintBuffFlush ( & pb );
+ }
+
+ KFileRelease ( tmp );
+
+ if ( rc == 0 )
+ {
+ /* Rename file */
+ rc = KDirectoryRename ( dir, true, tmp_file_path, magic_file_path );
+ if ( rc == 0 )
+ {
+ /* clear dirty flags */
+ BSTreeForEach ( & self -> tree, false, UnsetDirtyNode, & pb);
+
+ self -> dirty = false;
+ }
+ }
+
+ if ( rc != 0 )
+ KDirectoryRemove ( dir, true, tmp_file_path );
+ }
+
+ /* release dir */
+ KDirectoryRelease ( dir );
+ }
+ }
+ }
+ return rc;
+}
+
+
+static
+rc_t record_magic_path ( KConfig *self, const KDirectory *dir, const char *path, size_t sz )
+{
+ char buff [ 4096 ];
+ rc_t rc = KDirectoryResolvePath ( dir, true, buff, sizeof buff, "%.*s", ( int ) sz, path );
+ if ( rc == 0 )
+ {
+ char *magic_file_path;
+ sz = string_size ( buff );
+ magic_file_path = malloc ( sz + 1 );
+ if ( magic_file_path == NULL )
+ rc = RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
+ else
+ {
+ free ( (void*) self -> magic_file_path );
+ self -> magic_file_path = magic_file_path;
+ self -> magic_file_path_size = sz;
+ memcpy ( magic_file_path, buff, sz + 1 );
+ }
+ }
+
+ return rc;
+}
+
+
+static
+rc_t make_include_path ( KConfigIncluded **p, const KDirectory *dir, const char *path, size_t sz, bool is_magic )
+{
+ char buff [ 4096 ];
+ rc_t rc = KDirectoryResolvePath ( dir, true, buff, sizeof buff, "%.*s", ( int ) sz, path );
+ if ( rc == 0 )
+ {
+ KConfigIncluded *include;
+ sz = string_size ( buff );
+ include = malloc ( sizeof * include + sz );
+ if ( include == NULL )
+ rc = RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
+ else
+ {
+ include -> is_magic_file = is_magic;
+ string_copy ( include -> path, sz + sizeof include -> path, buff, sz );
+ * p = include;
+ return 0;
+ }
+ }
+ * p = NULL;
+ return rc;
+}
+
+
+static
+bool load_from_file_path ( KConfig *self, const KDirectory *dir, const char *path, size_t sz, bool is_magic )
+{
+ rc_t rc;
+ const KFile *cfg_file;
+
+ /* record magic file path, regardless of whether it exists as a file */
+ if ( is_magic )
+ record_magic_path ( self, dir, path, sz );
+
+ DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from file '%.*s'\n", (int)sz, path ) );
+ rc = KDirectoryOpenFileRead ( dir, & cfg_file, "%.*s", ( int ) sz, path );
+ if ( rc == 0 )
+ {
+ KConfigIncluded *include;
+ rc = make_include_path ( & include, dir, path, sz, is_magic );
+ if ( rc == 0 )
+ {
+ BSTNode *existing;
+ if ( BSTreeInsertUnique ( & self -> included, & include -> n, & existing, KConfigIncludedSort ) != 0 )
+ free ( include );
+ else
+ {
+ self -> current_file = include;
+ rc = KConfigLoadFile ( self, include -> path, cfg_file );
+ self -> current_file = NULL;
+ if ( rc != 0 )
+ {
+ BSTreeUnlink ( & self -> included, & include -> n );
+ free ( include );
+ }
+ }
+ }
+
+ KFileRelease ( cfg_file );
+ }
+ return ( rc == 0 ) ? true : false;
+}
+
+typedef struct scan_config_path_data scan_config_path_data;
+struct scan_config_path_data
+{
+ KConfig *self;
+ bool loaded;
};
static
@@ -1389,9 +1741,10 @@ rc_t CC scan_config_path ( const KDirectory *dir, uint32_t type, const char *nam
case kptFile:
case kptFile | kptAlias:
{
- size_t sz = strlen ( name );
+ size_t sz = string_size ( name );
if ( sz >= 5 && strcase_cmp ( & name [ sz - 4 ], 4, ".kfg", 4, 4 ) == 0 )
- pb -> loaded |= load_from_file_path ( pb -> self, dir, name, sz );
+ pb -> loaded |= load_from_file_path ( pb -> self, dir, name, sz, false );
+
break;
}}
@@ -1416,7 +1769,7 @@ bool load_from_dir_path ( KConfig *self, const KDirectory *dir, const char *path
{
bool loaded = false;
const KDirectory *cfg_dir;
- rc_t rc = KDirectoryOpenDirRead ( dir, & cfg_dir, false, "%.*s", ( int ) sz, path );
+ rc_t rc = KDirectoryOpenDirRead ( dir, & cfg_dir, false, "%.*s", ( uint32_t ) sz, path );
if ( rc == 0 )
{
DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from directory '%.*s'\n", (int)sz, path ) );
@@ -1437,7 +1790,7 @@ bool load_from_path ( KConfig *self, const KDirectory * dir, const char *path, s
switch ( KDirectoryPathType ( dir, "%.*s", ( int ) sz, path ) & ~ kptAlias )
{
case kptFile:
- loaded = load_from_file_path ( self, dir, path, sz );
+ loaded = load_from_file_path ( self, dir, path, sz, false );
break;
case kptDir:
loaded = load_from_dir_path ( self, dir, path, sz );
@@ -1451,7 +1804,7 @@ static
bool load_from_path_list ( KConfig *self, const KDirectory *dir, const char *path )
{
bool loaded = false;
- const char *end = path + strlen ( path );
+ const char *end = path + string_size ( path );
while ( path < end )
{
const char *sep = string_chr ( path, end - path, ':' );
@@ -1482,9 +1835,9 @@ bool load_from_env_variable ( KConfig *self, const KDirectory *dir )
DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from env. var '%s'\n", env_list[ i ] ) );
if ( eval != NULL && eval [ 0 ] != 0 )
{
+ rc_t rc = 0;
DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from env. var '%s'\n", eval ) );
- G_load_path
- = append_to_load_path(G_load_path, &G_load_path_sz_tmp, eval);
+ rc = KConfigAppendToLoadPath(self, eval);
loaded = load_from_path_list ( self, dir, eval );
if ( loaded )
DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: found from env. var '%s'\n", eval ) );
@@ -1499,17 +1852,23 @@ bool load_from_std_location ( KConfig *self, const KDirectory *dir )
{
const char * std_locs [] =
{
- "/etc/ncbi"
+#if ! WINDOWS
+ "/etc/ncbi",
+#else
+ "/c/ncbi",
+#endif
};
-
+
+ rc_t rc = 0;
+
int i;
bool loaded = false;
for ( i = 0; ! loaded && i < sizeof std_locs / sizeof std_locs [ 0 ]; ++ i )
{
DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from std. location '%s'\n", std_locs[ i ] ) );
- G_load_path = append_to_load_path
- (G_load_path, &G_load_path_sz_tmp, std_locs [ i ]);
- loaded = load_from_path ( self, dir, std_locs [ i ], strlen ( std_locs [ i ] ) );
+ rc = KConfigAppendToLoadPath(self, std_locs [ i ]);
+ loaded = load_from_path ( self, dir,
+ std_locs [ i ], string_size ( std_locs [ i ] ));
}
if ( loaded )
DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: found from std. location\n" ) );
@@ -1517,7 +1876,7 @@ bool load_from_std_location ( KConfig *self, const KDirectory *dir )
}
static
-void load_from_fs_location ( KConfig *self )
+rc_t load_from_fs_location ( KConfig *self )
{
KDyld *dyld;
rc_t rc = KDyldMake ( & dyld );
@@ -1534,8 +1893,7 @@ void load_from_fs_location ( KConfig *self )
if (KDirectoryResolvePath
(dir, true, resolved, sizeof resolved, "ncbi") == 0)
{
- G_load_path = append_to_load_path
- (G_load_path, &G_load_path_sz_tmp, resolved);
+ rc = KConfigAppendToLoadPath(self, resolved);
}
if ( load_from_dir_path ( self, dir, "ncbi", 4 ) )
DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: found from dyn. loader\n" ) );
@@ -1543,6 +1901,7 @@ void load_from_fs_location ( KConfig *self )
}
KDyldRelease ( dyld );
}
+ return rc;
}
LIB_EXPORT rc_t CC KConfigGetLoadPath ( const KConfig *self,
@@ -1556,10 +1915,56 @@ LIB_EXPORT rc_t CC KConfigGetLoadPath ( const KConfig *self,
return RC ( rcKFG, rcPath, rcListing, rcParam, rcNull );
}
- *path = G_load_path;
+ *path = self->load_path;
return 0;
}
+
+static
+bool load_from_home(KConfig *self, const KDirectory *dir)
+{
+ const char *home = getenv("HOME");
+ DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: checking HOME\n" ) );
+
+ if (home == NULL) {
+ home = getenv("USERPROFILE");
+ }
+
+ if (home != NULL)
+ {
+ bool loaded;
+ size_t num_writ, path_size;
+ char path[PATH_MAX];
+ rc_t rc = string_printf(path, sizeof path, &num_writ, "%s/.ncbi", home);
+ if (rc != 0)
+ return false;
+
+ assert(num_writ < sizeof path);
+
+ loaded = load_from_path ( self, dir, path, num_writ );
+ if ( loaded )
+ {
+ DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG),
+ ( "KFG: found from '%s'\n", path ) );
+ }
+
+ path_size = num_writ;
+ rc = string_printf ( & path [ path_size ], sizeof path - path_size, & num_writ, "/%s", MAGIC_LEAF_NAME );
+ if ( rc == 0 )
+ {
+ if ( load_from_file_path ( self, dir, path, path_size + num_writ, true ) )
+ loaded = true;
+ }
+ return loaded;
+ }
+ else {
+ DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG),
+ ( "KFG: none of env{HOME}, env{USERPROFILE} is defined\n" ) );
+ }
+
+ return false;
+}
+
static
void load_config_files ( KConfig *self, const KDirectory *dir )
{
@@ -1571,11 +1976,16 @@ void load_config_files ( KConfig *self, const KDirectory *dir )
if ( dir != NULL )
{
DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try load from supplied directory\n" ) );
- if ( scan_config_dir ( self, dir ) )
- {
+
+ loaded = scan_config_dir ( self, dir );
+ if ( loaded )
DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: found from supplied directory\n" ) );
+
+ if ( load_from_file_path ( self, dir, MAGIC_LEAF_NAME, sizeof MAGIC_LEAF_NAME - 1, true ) )
+ loaded = true;
+
+ if ( loaded )
return;
- }
}
/* open up the native directory */
@@ -1595,74 +2005,251 @@ void load_config_files ( KConfig *self, const KDirectory *dir )
if ( ! loaded )
load_from_fs_location ( self );
+ if ( ! s_disable_user_settings )
+ loaded |= load_from_home ( self, wd );
+
KDirectoryRelease ( wd );
- if (G_load_path) {
+ if (self->load_path) {
char* tmp = NULL;
- G_load_path_sz_tmp = strlen(G_load_path) + 1;
- tmp = realloc(G_load_path, G_load_path_sz_tmp);
+ self->load_path_sz_tmp = string_size(self->load_path) + 1;
+ tmp = realloc(self->load_path, self->load_path_sz_tmp);
if (tmp) {
- G_load_path = tmp;
+ self->load_path = tmp;
}
}
}
-
-/* Make
- * create a process-global configuration manager
- *
- * "cfg" [ OUT ] - return parameter for mgr
- */
-LIB_EXPORT rc_t CC KConfigMake ( KConfig **cfg, const KDirectory * cfgdir )
+static
+void add_predefined_nodes ( KConfig * self, const char *appname )
{
- rc_t rc;
- if ( cfg == NULL )
- rc = RC ( rcKFG, rcMgr, rcCreating, rcParam, rcNull );
- else
+ size_t bytes;
+ char buf [ 4096 ];
+ const char *value;
+
+ KDirectory *cwd;
+ const KDirectory *dir;
+
+#if ! WINDOWS
+ struct utsname name;
+#endif
+
+ /* Path to libkfg.so */
+ KDyld *dyld;
+ rc_t rc = KDyldMake ( & dyld );
+ if ( rc == 0 )
{
- KConfig *mgr = G_kfg;
- if ( mgr != NULL ) /* if already made, just attach */
+ rc = KDyldHomeDirectory ( dyld, & dir, ( fptr_t ) KConfigMake );
+ if ( rc == 0 )
{
- KConfigAddRef ( mgr );
- * cfg = mgr;
- return 0;
+ KDirectoryResolvePath ( dir, true, buf, sizeof buf, "." );
+ KDirectoryRelease ( dir );
}
+ KDyldRelease ( dyld );
+ }
+ update_node ( self, "vdb/lib/paths/kfg", rc == 0 ? buf : "", true );
- mgr = malloc ( sizeof * mgr );
- if ( mgr == NULL )
- rc = RC ( rcKFG, rcMgr, rcCreating, rcMemory, rcExhausted );
- else
- {
- KConfigNode * root;
+ /* Architecture */
+#if ! WINDOWS
+ if (uname(&name) >= 0)
+ update_node(self, "kfg/arch/name", name.nodename, true);
+ else
+#endif
+ update_node ( self, "kfg/arch/name", "", true);
+
+ string_printf(buf, sizeof(buf), &bytes, "%u", _ARCH_BITS);
+ update_node ( self, "kfg/arch/bits", buf, true );
+
+ /* *OS */
+#if LINUX
+ #define OS "linux"
+#elif MAC
+ #define OS "mac"
+#elif WINDOWS
+ #define OS "win"
+#elif SUN
+ #define OS "sun"
+#else
+ #error unrecognized OS
+#endif
+ update_node ( self, "OS", OS, true );
+#undef OS
- String slash;
- CONST_STRING ( & slash, "/" );
+ /* BUILD_LINKAGE */
+#if _STATIC
+ #define BUILD_LINKAGE "STATIC"
+#else
+ #define BUILD_LINKAGE "DYNAMIC"
+#endif
+ update_node ( self, "BUILD_LINKAGE", BUILD_LINKAGE, true );
+#undef BUILD_LINKAGE
+
+ /* BUILD */
+#if _PROFILING
+ #define BUILD "PROFILE"
+#elif _DEBUGGING
+ #define BUILD "DEBUG"
+#else
+ #define BUILD "RELEASE"
+#endif
+ update_node(self, "BUILD", BUILD, true );
+#undef BUILD
- rc = KConfigNodeMake ( & root, & slash );
- if ( rc == 0 )
- {
- KConfigInit ( mgr, root );
+ cwd = NULL;
- load_config_files ( mgr, cfgdir );
+ /* PWD */
+ rc = KDirectoryNativeDir ( & cwd );
+ if ( rc == 0 )
+ rc = KDirectoryResolvePath ( cwd, true, buf, sizeof buf, "." );
+ update_node(self, "PWD", rc == 0 ? buf : "", true );
- G_kfg = mgr;
- * cfg = mgr;
- return 0;
- }
+ /* APPPATH */
+ if ( appname != NULL && rc == 0 )
+ {
+ bytes = string_size ( appname );
+ value = string_rchr ( appname, bytes, '/' );
+ if ( value == NULL )
+ value = string_rchr ( appname, bytes, '\\' );
+ if ( value != NULL )
+ bytes = appname + bytes - value;
+ rc = KDirectoryResolvePath ( cwd, true, buf, sizeof buf, "%s", appname);
+ if ( rc == 0 && bytes != 0 )
+ buf [ string_size(buf) - bytes ] = 0;
+ update_node(self, "APPPATH", rc == 0 ? buf : "", true );
+ }
- KConfigWhack ( mgr );
+ /* APPNAME */
+ rc = LogAppName(buf, sizeof(buf), &bytes);
+ if ( rc == 0 )
+ buf [ bytes ] = 0;
+ update_node(self, "APPNAME", rc == 0 ? buf : "", true );
+
+ /* Environment variables */
+ /* some of the variables may be undefined, create nodes with empty values for them */
+#define DEFINE_ENV(name) \
+ value=getenv(name); \
+ update_node(self, name, value == NULL ? "" : value, true )
+
+ DEFINE_ENV("HOST");
+ DEFINE_ENV("USER");
+ value = getenv("HOME");
+ if (value == NULL)
+ { /* apparently on Windows, use USERPROFILE */
+ value = getenv("USERPROFILE");
+ }
+ if (value == NULL)
+ {
+ update_node(self, "HOME", "", true );
+ update_node(self, "NCBI_HOME", "", false );
+ update_node(self, "NCBI_SETTINGS", "", false );
+ }
+ else
+ {
+ rc = KDirectoryResolvePath(cwd, true, buf, sizeof(buf), value);
+ if (rc == 0)
+ {
+ size_t bytes2;
+ char buf2 [ 4096 ];
+
+ update_node(self, "HOME", buf, true );
+
+ string_printf(buf2, sizeof(buf2), &bytes2, "%s/.ncbi", buf);
+ update_node(self, "NCBI_HOME", buf2, false ); /* can be overridden by the user */
+
+ string_printf(buf2, sizeof(buf2), &bytes2, "%s/.ncbi/%s", buf, MAGIC_LEAF_NAME);
+ update_node(self, "NCBI_SETTINGS", buf2, false ); /* can be overridden by the user */
}
-
- * cfg = NULL;
+ else
+ LOGERR (klogErr, rc, "Unable to create a config item for $HOME");
}
- return rc;
+ DEFINE_ENV("VDB_ROOT");
+ DEFINE_ENV("VDB_CONFIG");
+#undef DEFINE_ENV
+
+ KDirectoryRelease ( cwd );
}
-/*--------------------------------------------------------------------------
- * KNamelist
- */
-typedef struct KfgConfigNamelist KfgConfigNamelist;
+static
+rc_t KConfigFill ( KConfig * self, const KDirectory * cfgdir, const char *appname, bool local)
+{
+ KConfigNode * root;
+ String empty;
+ rc_t rc;
+
+ CONST_STRING ( & empty, "" );
+
+ rc = KConfigNodeMake ( & root, & empty );
+ if (rc == 0)
+ {
+ KConfigInit ( self, root );
+ add_predefined_nodes ( self, appname );
+ load_config_files ( self, cfgdir );
+ }
+ return rc;
+}
+
+
+extern rc_t ReportKfg ( const ReportFuncs *f, uint32_t indent );
+
+/* "cfg" [ OUT ] - return parameter for mgr
+ if ("local" == true) do not initialize G_kfg */
+static
+rc_t KConfigMakeImpl ( KConfig **cfg, const KDirectory * cfgdir, bool local )
+{
+ rc_t rc;
+ const char *appname = NULL;
+
+ static bool latch;
+ if ( ! latch )
+ {
+ appname = ReportInitConfig ( ReportKfg );
+ latch = true;
+ }
+
+ if ( cfg == NULL )
+ rc = RC ( rcKFG, rcMgr, rcCreating, rcParam, rcNull );
+ else
+ {
+ KConfig *mgr = calloc ( 1, sizeof * mgr );
+ if ( mgr == NULL )
+ rc = RC ( rcKFG, rcMgr, rcCreating, rcMemory, rcExhausted );
+ else
+ {
+ rc = KConfigFill (mgr, cfgdir, appname, local);
+
+ mgr -> initialized = true;
+ if ( rc == 0 )
+ {
+ * cfg = mgr;
+ return 0;
+ }
+
+ KConfigWhack ( mgr );
+ }
+
+ * cfg = NULL;
+ }
+
+ return rc;
+}
+
+/* call KConfigMake; do not initialize G_kfg */
+LIB_EXPORT rc_t CC KConfigMakeLocal ( KConfig **cfg, const KDirectory * cfgdir )
+{ return KConfigMakeImpl(cfg, cfgdir, true); }
+
+/* Make
+ * create a process-global configuration manager
+ *
+ * "cfg" [ OUT ] - return parameter for mgr
+ */
+LIB_EXPORT rc_t CC KConfigMake ( KConfig **cfg, const KDirectory * cfgdir )
+{ return KConfigMakeImpl(cfg, cfgdir, false); }
+
+/*--------------------------------------------------------------------------
+ * KNamelist
+ */
+typedef struct KfgConfigNamelist KfgConfigNamelist;
struct KfgConfigNamelist
{
KNamelist dad;
@@ -1758,10 +2345,10 @@ void CC KConfigNodeGrabName ( BSTNode *n, void *data )
= ( ( const KConfigNode* ) n ) -> name . addr;
}
-/* ListChild
+/* ListChildren
* list all named children
*/
-LIB_EXPORT rc_t CC KConfigNodeListChild ( const KConfigNode *self,
+LIB_EXPORT rc_t CC KConfigNodeListChildren ( const KConfigNode *self,
KNamelist **names )
{
if ( names == NULL )
@@ -1823,3 +2410,941 @@ LIB_EXPORT rc_t CC KConfigListIncluded ( const KConfig *self,
return RC ( rcKFG, rcMgr, rcListing, rcSelf, rcNull );
}
+
+/************** Internal node-reading helpers *************/
+
+/* ReadNodeValueFixed
+ * copy the node's value into the caller's fixed size buffer and 0-terminate
+ */
+static rc_t ReadNodeValueFixed ( const KConfigNode* self, char *buf, size_t bsize )
+{
+ size_t num_read, remaining;
+ rc_t rc = KConfigNodeRead ( self, 0, buf, bsize - 1, &num_read, &remaining);
+ if (rc == 0)
+ {
+ if (remaining != 0)
+ rc = RC ( rcKFG, rcNode, rcReading, rcBuffer, rcInsufficient );
+ else
+ buf[num_read] = '\0';
+ }
+ return rc;
+}
+
+/**********************************************************/
+
+/* ReadBool
+ * read a boolean node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (true if "TRUE", false if "FALSE"; rc != 0 if neither)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadBool ( const KConfigNode *self, bool *result )
+{
+ rc_t rc;
+
+ if ( result == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+ else
+ {
+ * result = false;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+ else
+ {
+ char buf [ 6 ];
+ rc = ReadNodeValueFixed ( self, buf, sizeof buf );
+ if ( rc == 0 )
+ {
+ switch ( tolower ( buf [ 0 ] ) )
+ {
+ case 'f':
+ if ( buf [ 1 ] == 0 )
+ return 0;
+ if ( strncasecmp ( buf, "false", sizeof buf ) == 0 )
+ return 0;
+ break;
+
+ case 'n':
+ if ( buf [ 1 ] == 0 )
+ return 0;
+ if ( strncasecmp ( buf, "no", sizeof buf ) == 0 )
+ return 0;
+ break;
+
+ case 't':
+ * result = true;
+ if ( buf [ 1 ] == 0 )
+ return 0;
+ if ( strncasecmp ( buf, "true", sizeof buf ) == 0 )
+ return 0;
+ break;
+
+ case 'y':
+ * result = true;
+ if ( buf [ 1 ] == 0 )
+ return 0;
+ if ( strncasecmp ( buf, "yes", sizeof buf ) == 0 )
+ return 0;
+ break;
+ }
+
+ * result = false;
+ rc = RC ( rcKFG, rcNode, rcReading, rcFormat, rcIncorrect );
+ }
+ }
+ }
+
+ return rc;
+}
+
+/* ReadI64
+ * read an integer node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadI64 ( const KConfigNode *self, int64_t *result )
+{
+ rc_t rc;
+
+ if ( result == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+ else
+ {
+ * result = 0;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+ else
+ {
+ /* allow for leading zeros */
+ char buf [ 256 ];
+
+ rc = ReadNodeValueFixed(self, buf, sizeof(buf));
+ if (rc == 0)
+ {
+ char* endptr;
+ int64_t res = strtoi64(buf, &endptr, 0);
+ if ( *endptr == '\0' )
+ *result = res;
+ else
+ rc = RC(rcKFG, rcNode, rcReading, rcFormat, rcIncorrect);
+ }
+ }
+ }
+ return rc;
+}
+
+/* ReadU64
+ * read an unsiged node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadU64 ( const KConfigNode *self, uint64_t* result )
+{
+ rc_t rc;
+
+ if ( result == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+ else
+ {
+ * result = 0;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+ else
+ {
+ /* allow for leading zeros */
+ char buf [ 256 ];
+
+ rc = ReadNodeValueFixed(self, buf, sizeof(buf));
+ if (rc == 0)
+ {
+ char* endptr;
+ int64_t res = strtou64(buf, &endptr, 0);
+ if ( *endptr == '\0' )
+ *result = res;
+ else
+ rc = RC(rcKFG, rcNode, rcReading, rcFormat, rcIncorrect);
+ }
+ }
+ }
+ return rc;
+}
+
+/* ReadF64
+ * read a floating point node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadF64( const KConfigNode *self, double* result )
+{
+ rc_t rc;
+
+ if ( result == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+ else
+ {
+ * result = 0.0;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+ else
+ {
+ /* allow for leading zeros, trailing digits */
+ char buf [ 256 ];
+
+ rc = ReadNodeValueFixed(self, buf, sizeof(buf));
+ if (rc == 0)
+ {
+ char* endptr;
+ double res = strtod(buf, &endptr);
+ if ( *endptr == '\0' )
+ *result = res;
+ else
+ rc = RC(rcKFG, rcNode, rcReading, rcFormat, rcIncorrect);
+ }
+ }
+ }
+ return rc;
+}
+
+#if 0
+/*** NB - code needs to be located in VFS ***/
+/* ReadNodeValueFixed
+ * Allocate a character buffer of sufficient size, copy the node's value into it, 0-terminate. Caller deallocates.
+ */
+static rc_t ReadNodeValueVariable( const KConfigNode* self, char** buf )
+{
+ size_t num_read, to_read;
+ /* first we ask about the size to be read */
+ rc_t rc = KConfigNodeRead ( self, 0, NULL, 0, &num_read, &to_read );
+ if ( rc == 0 )
+ {
+ char* value = malloc( to_read + 1 );
+ if ( value )
+ {
+ rc = ReadNodeValueFixed( self, value, to_read + 1 );
+ if ( rc == 0 )
+ *buf = value;
+ else
+ free (value);
+ }
+ else
+ rc = RC( rcKFG, rcNode, rcReading, rcMemory, rcExhausted );
+ }
+ return rc;
+}
+
+/* ReadFloat
+ * read a VPath node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadVPath ( const KConfigNode *self, struct VPath** result )
+{
+ rc_t rc;
+
+ if ( result == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+ else
+ {
+ * result = NULL;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+ else
+ {
+ char* buf;
+ rc = ReadNodeValueVariable ( self, &buf );
+ if ( rc == 0)
+ {
+ rc = VPathMake(result, buf);
+ free(buf);
+ }
+ }
+ }
+ return rc;
+}
+#endif
+
+/* ReadString
+ * read a String node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadString ( const KConfigNode *self, String** result )
+{
+ rc_t rc;
+
+ if ( result == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+ else
+ {
+ * result = NULL;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+ else
+ {
+ size_t num_read, to_read;
+
+ /* first we ask about the size to be read */
+ rc = KConfigNodeRead ( self, 0, NULL, 0, &num_read, &to_read );
+ if ( rc == 0 )
+ {
+ String *value = malloc ( sizeof * value + to_read + 1 );
+ if ( value == NULL )
+ rc = RC( rcKFG, rcNode, rcReading, rcMemory, rcExhausted );
+ else
+ {
+ /* TBD - this is broken for non-ascii strings
+ much better to be WITHIN the config.c implementation
+ and reach into the node value directly! */
+ StringInit ( value, (char*)( value + 1 ), to_read, to_read + 1 );
+ rc = ReadNodeValueFixed(self, (char*)value->addr, to_read + 1);
+ if ( rc == 0 )
+ *result = value;
+ else
+ {
+ rc = RC(rcKFG, rcNode, rcReading, rcFormat, rcIncorrect);
+ free ( value );
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+/* this macro wraps a call to KConfigNodeGetXXX in a node-accessing
+ code to implement the corresponding KConfigGetXXX function */
+#define NODE_TO_CONFIG_ACCESSOR(fn) \
+ const KConfigNode* node; \
+ rc_t rc = KConfigOpenNodeRead ( self, &node, path ); \
+ if ( rc == 0) \
+ { \
+ rc_t rc2; \
+ rc = fn(node, result); \
+ rc2 = KConfigNodeRelease(node); \
+ if (rc == 0) \
+ rc = rc2; \
+ } \
+ return rc;
+
+/* THESE FUNCTIONS ARE PROTECTED AGAINST BAD "self" AND "path"
+ BY KConfigOpenNodeRead, BUT THE CONVERSION FUNCTIONS ARE NOT */
+LIB_EXPORT rc_t CC KConfigReadBool ( const KConfig* self, const char* path, bool* result )
+{
+ NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadBool);
+}
+LIB_EXPORT rc_t CC KConfigReadI64 ( const KConfig* self, const char* path, int64_t* result )
+{
+ NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadI64);
+}
+LIB_EXPORT rc_t CC KConfigReadU64 ( const KConfig* self, const char* path, uint64_t* result )
+{
+ NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadU64);
+}
+LIB_EXPORT rc_t CC KConfigReadF64 ( const KConfig* self, const char* path, double* result )
+{
+ NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadF64);
+}
+#if 0
+LIB_EXPORT rc_t CC KConfigReadVPath ( const KConfig* self, const char* path, struct VPath** result )
+{
+ NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadVPath);
+}
+#endif
+LIB_EXPORT rc_t CC KConfigReadString ( const KConfig* self, const char* path, struct String** result )
+{
+ NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadString);
+}
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
+ PLOGERR(klogInt, (klogInt, rc, \
+ "$(name): $(msg)", "name=%s,msg=%s", name, msg)))
+
+static rc_t KConfigNodeReadData(const KConfigNode* self,
+ char* buf, size_t blen, size_t* num_read)
+{
+ rc_t rc = 0;
+ size_t remaining = 0;
+
+ assert(buf && blen && num_read);
+
+ rc = KConfigNodeRead(self, 0, buf, blen, num_read, &remaining);
+
+ assert(remaining == 0); /* TODO overflow check */
+ assert(*num_read <= blen);
+
+ return rc;
+}
+
+static rc_t printIndent(int indent) {
+ rc_t rc = 0;
+
+ int i = 0;
+ for (i = 0; i < indent * 2; ++i) {
+ rc_t rc2 = OUTMSG((" "));
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ return rc;
+}
+
+static
+rc_t KConfigNodePrint(const KConfigNode* self,
+ int indent, const char* root)
+{
+ rc_t rc = 0;
+ KNamelist* names = NULL;
+ uint32_t count = 0;
+ uint32_t i = 0;
+ char data[512] = "";
+ size_t num_data = 0;
+ assert(self);
+
+ printIndent(indent);
+ OUTMSG(("<%s>", root));
+
+ if (rc == 0) {
+ rc_t rc = KConfigNodeReadData(self, data, sizeof data, &num_data);
+ DISP_RC2(rc, "KConfigNodeReadData()", root);
+ if (rc == 0 && num_data > 0) {
+ OUTMSG(("%.*s", (int)num_data, data));
+ }
+ }
+
+ if (rc == 0) {
+ rc = KConfigNodeListChild(self, &names);
+ DISP_RC2(rc, "KConfigNodeListChild()", root);
+ }
+ if (rc == 0) {
+ rc = KNamelistCount(names, &count);
+ DISP_RC2(rc, "KNamelistCount()", root);
+ }
+
+
+ if (rc == 0) {
+ if (count > 0) {
+ OUTMSG(("\n"));
+ }
+ for (i = 0; i < count; ++i) {
+ const char* name = NULL;
+ const KConfigNode* node = NULL;
+ if (rc == 0) {
+ rc = KNamelistGet(names, i, &name);
+ DISP_RC2(rc, "KNamelistGet()", root);
+ }
+ if (rc == 0) {
+ rc = KConfigNodeOpenNodeRead(self, &node, name);
+ DISP_RC2(rc, "KConfigNodeOpenNodeRead()", name);
+ }
+ if (rc == 0) {
+ KConfigNodePrint(node, indent + 1, name);
+ }
+ KConfigNodeRelease(node);
+ }
+ }
+
+ if (count > 0) {
+ printIndent(indent);
+ }
+ OUTMSG(("</%s>\n", root));
+
+ KNamelistRelease(names);
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KConfigPrint(const KConfig* self, int indent) {
+ rc_t rc = 0;
+
+ const char root[] = "Config";
+
+ if (self == NULL) {
+ OUTMSG(("<%s>", root));
+ OUTMSG(("KConfigPrint(const KConfig* self = NULL)\n"));
+ OUTMSG(("</%s>\n", root));
+ }
+ else {
+ const KConfigNode* node = NULL;
+ if (rc == 0) {
+ rc = KConfigOpenNodeRead(self, &node, "/");
+ DISP_RC2(rc, "KConfigOpenNodeRead()", "/");
+ }
+ if (rc == 0) {
+ KConfigNodePrint(node, indent, "Config");
+ }
+ KConfigNodeRelease(node);
+ }
+
+ return rc;
+}
+
+LIB_EXPORT void CC KConfigDisableUserSettings ( void )
+{
+ s_disable_user_settings = true;
+}
+
+static
+rc_t open_file ( const KFile **f, const char *path )
+{
+ /* get current directory */
+ KDirectory *wd;
+ rc_t rc = KDirectoryNativeDir ( & wd );
+ if ( rc == 0 )
+ {
+ rc = KDirectoryOpenFileRead ( wd, f, path );
+ KDirectoryRelease ( wd );
+ }
+
+ return rc;
+}
+
+static
+rc_t decode_file ( KDataBuffer *mem, const KFile *orig )
+{
+ char hdr [ 8 ];
+ size_t num_read;
+ rc_t rc = KFileReadAll ( orig, 0, hdr, sizeof hdr, & num_read );
+ if ( rc == 0 && num_read == sizeof hdr )
+ {
+ if ( memcmp ( hdr, "ncbi_gap", sizeof hdr ) == 0 )
+ {
+ uint64_t eof;
+ rc = KFileSize ( orig, & eof );
+ if ( rc == 0 )
+ {
+ const KFile *sub;
+ rc = KFileMakeSubRead ( & sub, orig, sizeof hdr,
+ eof - sizeof hdr );
+ if ( rc == 0 )
+ {
+ const KFile *gzip;
+ rc = KFileMakeGzipForRead ( & gzip, sub );
+ if ( rc == 0 )
+ {
+ rc = KDataBufferMakeBytes ( mem, 0 );
+ if ( rc == 0 )
+ {
+ size_t total, to_read;
+
+ /* after all of that, we're ready to decompress */
+ for ( total = 0; ; )
+ {
+ char *buff;
+
+ rc = KDataBufferResize ( mem,
+ total + 32 * 1024 );
+ if ( rc != 0 )
+ break;
+
+ buff = mem -> base;
+ to_read = ( size_t ) mem -> elem_count - total;
+
+ rc = KFileReadAll ( gzip, total,
+ & buff [ total ], to_read, & num_read );
+ if ( rc != 0 )
+ break;
+
+ total += num_read;
+
+ if ( num_read < to_read )
+ {
+ buff [ total ] = 0;
+ mem -> elem_count = total;
+ break;
+ }
+ }
+ }
+
+ KFileRelease ( gzip );
+ }
+
+ KFileRelease ( sub );
+ }
+ }
+ }
+ }
+
+ return rc;
+}
+
+typedef struct {
+ const char *projectId;
+ const char *encryptionKey;
+ const char *downloadTicket;
+ const char *description;
+} KGapConfig;
+
+static
+rc_t _KConfigNncToKGapConfig(const KConfig *self, char *text, KGapConfig *kgc)
+{
+ size_t len = 0;
+ int i = 0;
+
+ assert(self && text && kgc);
+
+ memset(kgc, 0, sizeof *kgc);
+ len = string_size(text);
+
+ {
+ const char version[] = "version ";
+ size_t l = sizeof version - 1;
+ if (string_cmp(version, l, text, len, l) != 0) {
+ return RC(rcKFG, rcMgr, rcUpdating, rcFormat, rcUnrecognized);
+ }
+ text += l;
+ len -= l;
+ }
+
+ {
+ const char version[] = "1.0";
+ size_t l = sizeof version - 1;
+ if (string_cmp(version, l, text, l, l) != 0) {
+ return RC(rcKFG, rcMgr, rcUpdating, rcFormat, rcUnsupported);
+ }
+ text += l;
+ len -= l;
+ }
+
+ while (len > 0 && (text[0] == '\r' || text[0] == '\n')) {
+ ++text;
+ --len;
+ }
+
+ for (i = 0; ; ++i) {
+ const char *p = NULL;
+ if (i == 0) {
+ p = strtok(text, "|");
+ }
+ else {
+ p = strtok (NULL, "|");
+ }
+ if (p == NULL) {
+ break;
+ }
+ switch (i) {
+ case 0:
+ kgc->projectId = p;
+ break;
+ case 1:
+ kgc->encryptionKey = p;
+ break;
+ case 2:
+ kgc->downloadTicket = p;
+ break;
+ case 3:
+ kgc->description = p;
+ break;
+ }
+ }
+
+ if (!kgc->projectId || !kgc->encryptionKey || !kgc->downloadTicket ||
+ !kgc->description)
+ {
+ return RC(rcKFG, rcMgr, rcUpdating, rcFile, rcInvalid);
+ }
+
+ return 0;
+}
+
+static rc_t _KConfigFixResolverCgiNode(KConfig *self) {
+ rc_t rc = 0;
+
+ KConfigNode *node = NULL;
+ struct String *result = NULL;
+
+ assert(self);
+
+ if (rc == 0) {
+ rc = KConfigOpenNodeUpdate(self, &node,
+ "/repository/remote/protected/CGI/resolver-cgi");
+ }
+
+ if (rc == 0) {
+ rc = KConfigNodeReadString(node, &result);
+ }
+
+ if (rc == 0) {
+ assert(result);
+ if (result->size == 0) {
+ const char buffer[]
+ = "http://www.ncbi.nlm.nih.gov/Traces/names/names.cgi";
+ rc = KConfigNodeWrite(node, buffer, sizeof buffer);
+ }
+ }
+
+ free(result);
+
+ KConfigNodeRelease(node);
+
+ return rc;
+}
+
+static rc_t _KConfigNodeUpdateChild(KConfigNode *self,
+ const char *name, const char *val)
+{
+ rc_t rc = 0;
+
+ KConfigNode *node = NULL;
+
+ assert(self && name && val);
+
+ if (rc == 0) {
+ rc = KConfigNodeOpenNodeUpdate(self, &node, name);
+ }
+
+ if (rc == 0) {
+ rc = KConfigNodeWrite(node, val, string_size(val));
+ }
+
+ {
+ rc_t rc2 = KConfigNodeRelease(node);
+ if (rc2 != 0 && rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ return rc;
+}
+
+static rc_t _KConfigMkPwdFileAndNode(KConfig *self,
+ KConfigNode *rep, const KGapConfig *kgc)
+{
+ rc_t rc = 0;
+ const KConfigNode *ncbiHome = NULL;
+ KConfigNode *node = NULL;
+ struct String *result = NULL;
+ char encryptionKeyPath[PATH_MAX];
+ KDirectory *dir = NULL;
+ KFile *encryptionKeyFile = NULL;
+ size_t num_writ = 0;
+
+ assert(self && kgc && rep);
+
+ if (rc == 0) {
+ rc = KConfigOpenNodeRead(self, &ncbiHome, "NCBI_HOME");
+ }
+ if (rc == 0) {
+ rc = KConfigNodeReadString(ncbiHome, &result);
+ }
+ KConfigNodeRelease(ncbiHome);
+ ncbiHome = NULL;
+
+ if (rc == 0) {
+ size_t num_writ = 0;
+ assert(result && result->addr);
+ rc = string_printf(encryptionKeyPath, sizeof encryptionKeyPath,
+ &num_writ, "%s/dbGap-%s.enc_key", result->addr, kgc->projectId);
+ if (rc == 0) {
+ assert(num_writ < sizeof encryptionKeyPath);
+ }
+ }
+ free(result);
+ result = NULL;
+
+ if (rc == 0) {
+ rc = KDirectoryNativeDir(&dir);
+ }
+
+ if (rc == 0) {
+ rc = KDirectoryCreateFile(dir, &encryptionKeyFile,
+ false, 0600, kcmInit | kcmParents, encryptionKeyPath);
+ }
+
+ KDirectoryRelease(dir);
+
+ if (rc == 0) {
+ assert(kgc->encryptionKey);
+ rc = KFileWrite(encryptionKeyFile, 0,
+ kgc->encryptionKey, string_size(kgc->encryptionKey), &num_writ);
+ if (rc == 0) {
+ assert(num_writ == string_size(kgc->encryptionKey));
+ }
+ }
+
+ if (rc == 0) {
+ rc = KFileWrite(encryptionKeyFile, string_size(kgc->encryptionKey),
+ "\n", 1, &num_writ);
+ if (rc == 0) {
+ assert(num_writ == 1);
+ }
+ }
+
+ {
+ rc_t rc2 = KFileRelease(encryptionKeyFile);
+ if (rc2 != 0 && rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ if (rc == 0) {
+ rc = _KConfigNodeUpdateChild(rep,
+ "encryption-key-path", encryptionKeyPath);
+ }
+
+ KConfigNodeRelease(node);
+
+ return rc;
+}
+
+static rc_t _KConfigDBGapRepositoryNodes(KConfig *self,
+ KConfigNode *rep, const KGapConfig *kgc, const char *repoParentPath)
+{
+ rc_t rc = 0;
+
+ assert(self && rep && kgc);
+
+ if (rc == 0) {
+ rc = _KConfigMkPwdFileAndNode(self, rep, kgc);
+ }
+
+ if (rc == 0) {
+ assert(kgc->downloadTicket);
+ rc = _KConfigNodeUpdateChild(rep,
+ "download-ticket", kgc->downloadTicket);
+ }
+
+ if (rc == 0) {
+ rc = _KConfigNodeUpdateChild(rep, "description", kgc->description);
+ }
+
+ if (rc == 0) {
+ rc = _KConfigNodeUpdateChild(rep, "apps/sra/volumes/sraFlat", "sra");
+ }
+
+ if (rc == 0) {
+ rc = _KConfigNodeUpdateChild(rep, "cache-enabled", "true");
+ }
+
+ if (rc == 0) {
+ char rootPath[PATH_MAX] = "";
+ if (repoParentPath == NULL) {
+ size_t num_writ = 0;
+ const KConfigNode *home = NULL;
+ String *result = NULL;
+
+ if (rc == 0) {
+ rc = KConfigOpenNodeRead(self, &home, "HOME");
+ }
+
+ if (rc == 0) {
+ rc = KConfigNodeReadString(home, &result);
+ }
+
+ if (rc == 0) {
+ assert(result && result->addr);
+ rc = string_printf(rootPath, sizeof rootPath, &num_writ,
+ "%s/ncbi/dbGap-%s", result->addr, kgc->projectId);
+ }
+
+ if (rc == 0) {
+ repoParentPath = rootPath;
+ }
+
+ free(result);
+ KConfigNodeRelease(home);
+ }
+
+ if (rc == 0) {
+ rc = _KConfigNodeUpdateChild(rep, "root", repoParentPath);
+ }
+ }
+
+ return rc;
+}
+
+static rc_t _KConfigAddDBGapRepository(KConfig *self,
+ const KGapConfig *kgc, const char *repoParentPath)
+{
+ rc_t rc = 0;
+
+ KConfigNode *rep = NULL;
+
+ char repNodeName[512] = "";
+
+ assert(self && kgc);
+
+ if (rc == 0) {
+ size_t num_writ = 0;
+ rc = string_printf(repNodeName, sizeof repNodeName, &num_writ,
+ "/repository/user/protected/dbGap-%s", kgc->projectId);
+ if (rc == 0) {
+ assert(num_writ < sizeof repNodeName);
+ }
+ }
+
+ if (rc == 0) {
+ rc = KConfigOpenNodeUpdate(self, &rep, repNodeName);
+ }
+
+ if (rc == 0) {
+ rc = _KConfigDBGapRepositoryNodes(self, rep, kgc, repoParentPath);
+ }
+
+ KConfigNodeRelease(rep);
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KConfigImportNgc(KConfig *self,
+ const char *ngcPath, const char *repoParentPath)
+{
+ if (self == NULL) {
+ return RC(rcKFG, rcMgr, rcUpdating, rcSelf, rcNull);
+ }
+
+ if (ngcPath == NULL) {
+ return RC(rcKFG, rcMgr, rcUpdating, rcParam, rcNull);
+ }
+ else {
+ const KFile *orig = NULL;
+ rc_t rc = open_file ( & orig, ngcPath );
+ if (rc != 0) {
+ return rc;
+ }
+ else {
+ KGapConfig kgc;
+
+ KDataBuffer mem;
+ memset ( & mem, 0, sizeof mem );
+
+ rc = decode_file ( & mem, orig );
+ KFileRelease ( orig );
+ orig = NULL;
+
+ if (rc == 0) {
+ rc = _KConfigNncToKGapConfig(self, mem.base, &kgc);
+ }
+
+ KDataBufferWhack ( & mem );
+
+ if (rc == 0) {
+ rc = _KConfigFixResolverCgiNode(self);
+ }
+
+ if (rc == 0) {
+ rc = _KConfigAddDBGapRepository(self, &kgc, repoParentPath);
+ }
+ }
+
+ return rc;
+ }
+}
diff --git a/libs/kfg/config.linux.kfg b/libs/kfg/config.linux.kfg
deleted file mode 100644
index a5164c7..0000000
--- a/libs/kfg/config.linux.kfg
+++ /dev/null
@@ -1,29 +0,0 @@
-# ===========================================================================
-#
-# PUBLIC DOMAIN NOTICE
-# National Center for Biotechnology Information
-#
-# This software/database is a "United States Government Work" under the
-# terms of the United States Copyright Act. It was written as part of
-# the author's official duties as a United States Government employee and
-# thus cannot be copyrighted. This software/database is freely available
-# to the public for use. The National Library of Medicine and the U.S.
-# Government have not placed any restriction on its use or reproduction.
-#
-# Although all reasonable efforts have been taken to ensure the accuracy
-# and reliability of the software and data, the NLM and the U.S.
-# Government do not and cannot warrant the performance or results that
-# may be obtained by using this software or data. The NLM and the U.S.
-# Government disclaim all warranties, express or implied, including
-# warranties of performance, merchantability or fitness for any particular
-# purpose.
-#
-# Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-# this is the most basic type of configuration
-
-# vdb/module/paths = "path-to-modules"
-# vdb/schema/paths = "path-to-schema"
-# refseq/paths = "path-to-references"
diff --git a/libs/kfg/config.mac.kfg b/libs/kfg/config.mac.kfg
deleted file mode 100644
index a5164c7..0000000
--- a/libs/kfg/config.mac.kfg
+++ /dev/null
@@ -1,29 +0,0 @@
-# ===========================================================================
-#
-# PUBLIC DOMAIN NOTICE
-# National Center for Biotechnology Information
-#
-# This software/database is a "United States Government Work" under the
-# terms of the United States Copyright Act. It was written as part of
-# the author's official duties as a United States Government employee and
-# thus cannot be copyrighted. This software/database is freely available
-# to the public for use. The National Library of Medicine and the U.S.
-# Government have not placed any restriction on its use or reproduction.
-#
-# Although all reasonable efforts have been taken to ensure the accuracy
-# and reliability of the software and data, the NLM and the U.S.
-# Government do not and cannot warrant the performance or results that
-# may be obtained by using this software or data. The NLM and the U.S.
-# Government disclaim all warranties, express or implied, including
-# warranties of performance, merchantability or fitness for any particular
-# purpose.
-#
-# Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-# this is the most basic type of configuration
-
-# vdb/module/paths = "path-to-modules"
-# vdb/schema/paths = "path-to-schema"
-# refseq/paths = "path-to-references"
diff --git a/libs/kfg/config.win.kfg b/libs/kfg/config.win.kfg
deleted file mode 100644
index a5164c7..0000000
--- a/libs/kfg/config.win.kfg
+++ /dev/null
@@ -1,29 +0,0 @@
-# ===========================================================================
-#
-# PUBLIC DOMAIN NOTICE
-# National Center for Biotechnology Information
-#
-# This software/database is a "United States Government Work" under the
-# terms of the United States Copyright Act. It was written as part of
-# the author's official duties as a United States Government employee and
-# thus cannot be copyrighted. This software/database is freely available
-# to the public for use. The National Library of Medicine and the U.S.
-# Government have not placed any restriction on its use or reproduction.
-#
-# Although all reasonable efforts have been taken to ensure the accuracy
-# and reliability of the software and data, the NLM and the U.S.
-# Government do not and cannot warrant the performance or results that
-# may be obtained by using this software or data. The NLM and the U.S.
-# Government disclaim all warranties, express or implied, including
-# warranties of performance, merchantability or fitness for any particular
-# purpose.
-#
-# Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-# this is the most basic type of configuration
-
-# vdb/module/paths = "path-to-modules"
-# vdb/schema/paths = "path-to-schema"
-# refseq/paths = "path-to-references"
diff --git a/libs/kfg/default.kfg b/libs/kfg/default.kfg
new file mode 100644
index 0000000..14f8ac9
--- /dev/null
+++ b/libs/kfg/default.kfg
@@ -0,0 +1,45 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+## DEFAULT CONFIGURATION FOR SRA-TOOLKIT
+#
+# These settings are intended to allow the tools to work under conditions
+# when the user has not yet performed any configuration.
+/config/default = "true"
+
+# The user's default public repository
+/repository/user/main/public/apps/refseq/volumes/refseq = "refseq"
+/repository/user/main/public/apps/sra/volumes/sraFlat = "sra"
+/repository/user/main/public/apps/wgs/volumes/wgsFlat = "wgs"
+/repository/user/main/public/cache-enabled = "true"
+/repository/user/main/public/root = "$(HOME)/ncbi/public"
+
+# Remote access to NCBI's public repository
+/repository/remote/main/NCBI/apps/refseq/volumes/refseq = "refseq"
+/repository/remote/main/NCBI/apps/sra/volumes/fuse1000 = "sra-instant/reads/ByRun/sra"
+/repository/remote/main/NCBI/apps/wgs/volumes/fuseWGS = "wgs"
+/repository/remote/main/NCBI/root = "http://ftp-trace.ncbi.nlm.nih.gov/sra"
+
+# Remote access to NCBI's protected repository
+/repository/remote/protected/CGI/resolver-cgi = "http://www.ncbi.nlm.nih.gov/Traces/names/names.cgi"
diff --git a/libs/kfg/kfg-parse.h b/libs/kfg/kfg-parse.h
new file mode 100644
index 0000000..c271b98
--- /dev/null
+++ b/libs/kfg/kfg-parse.h
@@ -0,0 +1,81 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_kfg_scan_
+#define _h_kfg_scan_
+
+#include <kfg/extern.h>
+#include <klib/rc.h>
+#include <klib/namelist.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct KFGParseBlock
+{
+ const char* tokenText;
+ size_t tokenLength;
+ int tokenId;
+ size_t line_no;
+ size_t column_no;
+} KFGParseBlock;
+
+typedef struct KFGScanBlock
+{
+ void* scanner;
+ void* buffer;
+ void* self;
+ const char* file;
+ KFGParseBlock* lastToken; /* used for error reporting */
+ rc_t (*write_nvp)(void * self, const char* name, size_t nameLen, VNamelist*);
+ bool (*look_up_var)(void * self, struct KFGParseBlock*);
+ void (*report_error)(struct KFGScanBlock* sb, const char* msg);
+} KFGScanBlock;
+
+#define YYSTYPE_IS_DECLARED
+typedef union
+{
+ KFGParseBlock pb;
+ VNamelist* namelist;
+} KFGSymbol;
+
+/* Exposed for the sake of wb-test-kfg. */
+KFG_EXTERN rc_t CC KFGScan_yylex_init(KFGScanBlock* sb, const char *str);
+KFG_EXTERN void CC KFGScan_yylex_destroy(KFGScanBlock* sb);
+
+KFG_EXTERN void CC KFGScan_set_debug(bool on, KFGScanBlock* scannerContext);
+
+KFG_EXTERN int CC KFGScan_yylex(KFGSymbol* pb, KFGScanBlock* scannerContext);
+
+KFG_EXTERN int CC KFG_parse(KFGParseBlock* pb, KFGScanBlock* scannerContext);
+void CC KFG_error(KFGParseBlock* pb, KFGScanBlock* sb, const char* msg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfg_scan_ */
diff --git a/libs/kfg/libkfg.vers b/libs/kfg/libkfg.vers
index 90a27f9..a970716 100644
--- a/libs/kfg/libkfg.vers
+++ b/libs/kfg/libkfg.vers
@@ -1 +1 @@
-1.0.5
+1.0.15
diff --git a/libs/kfg/report-kfg.c b/libs/kfg/report-kfg.c
new file mode 100644
index 0000000..a0e45e0
--- /dev/null
+++ b/libs/kfg/report-kfg.c
@@ -0,0 +1,505 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kfg/extern.h>
+
+#include <kfg/config.h>
+#include <kfg/repository.h> /* KRepositoryMgr */
+#include <kfg/kfg-priv.h>
+
+#include <klib/namelist.h> /* KNamelistRelease */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/klib-priv.h>
+#include <klib/rc.h>
+
+#include <kfs/directory.h>
+#include <kfs/dyload.h> /* KDyld */
+#include <kfs/file.h> /* KFileRead */
+#include <kfs/nullfile.h> /* KFileMakeNullUpdate */
+#include <kfs/md5.h> /* KMD5SumFmt */
+
+#include <sysalloc.h>
+
+#include <stdarg.h> /* va_start */
+#include <stdio.h> /* sprintf */
+#include <stdlib.h> /* malloc */
+#include <string.h> /* memset */
+#include <limits.h> /* PATH_MAX */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+#define report ( * f -> report )
+#define reportData ( * f -> reportData )
+#define reportData1 ( * f -> reportData1 )
+#define reportOpen ( * f -> reportOpen )
+#define reportOpen1 ( * f -> reportOpen1 )
+#define reportClose ( * f -> reportClose )
+#define reportClose1 ( * f -> reportClose1 )
+#define reportError ( * f -> reportError )
+#define reportErrorStr ( * f -> reportErrorStr )
+#define reportErrorStrImpl ( * f -> reportErrorStrImpl )
+#define reportErrorStrInt ( * f -> reportErrorStrInt )
+#define reportError3Str ( * f -> reportError3Str )
+
+static rc_t ReportKfgFiles(const ReportFuncs *f,
+ int indent, const KConfig* cfg)
+{
+ rc_t rc = 0;
+
+ uint32_t count = 0;
+ KNamelist* names = NULL;
+
+ rc = KConfigListIncluded(cfg, &names);
+
+ if (rc != 0) {
+ reportOpen(indent, "Files", 0);
+ reportError(indent + 1, rc, "KConfigListIncluded");
+ }
+ else {
+ rc = KNamelistCount(names, &count);
+ if (rc != 0) {
+ reportOpen(indent, "Files", 0);
+ reportErrorStr(indent + 1,
+ rc, "KNamelistCount", "origin", "KConfigListIncluded");
+ }
+ else {
+ int i = 0;
+ reportOpen(indent, "Files", 1, "count", 'd', count);
+ for (i = 0; i < count && rc == 0; ++i) {
+ const char* name = NULL;
+ rc = KNamelistGet(names, i, &name);
+ if (rc != 0) {
+ reportErrorStrInt(indent + 1, rc, "KNamelistGet",
+ "origin", "KConfigListIncluded", "idx", i);
+ }
+ else
+ { report(indent + 1, "File", 1, "name", 's', name); }
+ }
+ }
+ }
+ reportClose(indent, "Files");
+
+ RELEASE(KNamelist, names);
+
+ return rc;
+}
+
+static
+rc_t sKConfigNode_Read(const KConfigNode* node, char* buffer, size_t buf_sz,
+ char** overflow_buf, bool* cant_allocate)
+{
+ rc_t rc = 0;
+ size_t num_read = 0;
+ size_t remaining = 0;
+ assert(overflow_buf && cant_allocate);
+ *cant_allocate = false;
+ *overflow_buf = NULL;
+ rc = KConfigNodeRead(node, 0, buffer, buf_sz, &num_read, &remaining);
+ if (rc != 0)
+ { return rc; }
+ if (num_read < buf_sz)
+ { buffer[num_read] = '\0'; }
+ else {
+ size_t new_buf_sz = num_read + remaining + 1;
+ char* overflow = malloc(new_buf_sz);
+ if (overflow == NULL) {
+ int i = 0;
+ for (i = 2; i < 5 && buf_sz - i > 0; ++i)
+ { buffer[buf_sz - i] = '.'; }
+ buffer[buf_sz - 1] = '\0';
+ *cant_allocate = true;
+ }
+ else {
+ buffer = *overflow_buf = overflow;
+ buf_sz =
+ rc = KConfigNodeRead
+ (node, 0, buffer, new_buf_sz, &num_read, &remaining);
+ if (rc != 0)
+ { return rc; }
+ assert(num_read < new_buf_sz && remaining == 0);
+ buffer[num_read] = '\0';
+ }
+ }
+ return rc;
+}
+
+static rc_t ReportChildNode(const ReportFuncs *f, int indent,
+ const KNamelist* names, const KConfigNode* node, const char* root, uint32_t idx);
+
+static
+rc_t ReportConfigNodeChildren(const ReportFuncs *f, int indent,
+ const KConfigNode* node, const char* nodeName)
+{
+ KNamelist* names = NULL;
+ rc_t rc = KConfigNodeListChild(node, &names);
+ if (rc != 0) {
+ reportErrorStrImpl(indent,
+ rc, "KConfigNodeListChild", "node", nodeName, false);
+ }
+ else {
+ uint32_t count = 0;
+ rc = KNamelistCount(names, &count);
+ if (rc != 0) {
+ reportErrorStrImpl
+ (indent, rc, "KNamelistCount", "node", nodeName, false);
+ }
+ else {
+ if (count) {
+ int i = 0;
+ OUTMSG(("\n"));
+ for (i = 0; i < count && rc == 0; ++i) {
+ rc = ReportChildNode
+ (f, indent + 1, names, node, nodeName, i);
+ }
+ for (i = 0; i < indent; ++i)
+ { OUTMSG((" ")); }
+ }
+ }
+ }
+ RELEASE(KNamelist, names);
+ return rc;
+}
+
+static rc_t ReportConfigNode(const ReportFuncs *f, int indent, const char* root,
+ const char* name, const KConfigNode* node, const char* node_name)
+{
+ rc_t rc = 0;
+
+ char local[PATH_MAX + 1] = "";
+ const char* nodeName = node_name ? node_name : name;
+ char* overflow = NULL;
+ bool cantallocate = false;
+
+ reportOpen1(indent, nodeName);
+ rc = sKConfigNode_Read(node, local, sizeof local, &overflow, &cantallocate);
+ if (rc == 0) {
+ char* buf = overflow ? overflow : local;
+ rc = reportData1(buf);
+ free(overflow);
+ overflow = NULL;
+ if (rc == 0)
+ { rc = ReportConfigNodeChildren(f, indent, node, nodeName); }
+ }
+ else {
+ reportError3Str
+ (indent + 1, rc, "KConfigNodeRead", "node", root, "/", name, false);
+ }
+ reportClose1(nodeName);
+
+ return rc;
+}
+
+static rc_t ReportConfigNode_File(const ReportFuncs *f, int indent,
+ const char* root,
+ const char* name, const KConfigNode* node, const char* node_name)
+{
+ rc_t rc = 0;
+ char local[PATH_MAX + 1] = "";
+ const char* nodeName = node_name ? node_name : name;
+ char* overflow = NULL;
+ bool cantallocate = false;
+ rc = sKConfigNode_Read(node, local, sizeof local, &overflow, &cantallocate);
+ if (rc) {
+ reportError3Str
+ (indent, rc, "KConfigNodeRead", "node", root, "/", name, false);
+ }
+ else {
+ const char* buf = overflow ? overflow : local;
+ KPathType file_type = kptNotFound;
+ const char* type = NULL;
+ if (!cantallocate) {
+ KDirectory* dir = NULL;
+ rc = KDirectoryNativeDir(&dir);
+ if (rc == 0) {
+ file_type = KDirectoryPathType(dir, buf);
+ file_type &= ~kptAlias;
+ type = file_type == kptFile ? "exists" :
+ file_type == kptNotFound ? "not found" : "unexpected";
+ }
+ RELEASE(KDirectory, dir);
+ }
+ else
+ { type = "noo long"; }
+ if (rc == 0)
+ { reportData(indent, nodeName, buf, 1, "file", 's', type); }
+ }
+ free(overflow);
+ overflow = NULL;
+ return rc;
+}
+
+static rc_t ReportChildNode(const ReportFuncs *f, int indent,
+ const KNamelist* names,
+ const KConfigNode* node, const char* root, uint32_t idx)
+{
+ rc_t rc = 0;
+
+ const char* name = NULL;
+ rc = KNamelistGet(names, idx, &name);
+ if (rc != 0) {
+ reportErrorStrInt
+ (indent + 1, rc, "KNamelistGet", "node", root, "idx", idx);
+ }
+ else {
+ const KConfigNode* child = NULL;
+ rc = KConfigNodeOpenNodeRead(node, &child, name);
+ if (rc != 0) {
+ reportOpen(indent, name, 0);
+ reportError3Str(indent + 1, rc, "KConfigNodeOpenNodeRead",
+ "node", root, "/", name, true);
+ reportClose(indent, name);
+ }
+ else
+ { rc = ReportConfigNode(f, indent, root, name, child, NULL); }
+ }
+
+ return rc;
+}
+
+static
+rc_t ReportRefseq(const ReportFuncs *f, int indent, const KConfig* cfg)
+{
+ rc_t rc = 0;
+
+ const char root[] = "refseq";
+
+ const KConfigNode* node = NULL;
+ rc = KConfigOpenNodeRead(cfg, &node, root);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ report(indent, root, 1, "state", 's', "not found");
+ rc = 0;
+ }
+ else
+ { reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+ }
+ else {
+ KNamelist* names = NULL;
+ rc = KConfigNodeListChild(node, &names);
+ if (rc != 0)
+ { reportErrorStr(indent, rc, "KConfigNodeListChild", "node", root); }
+ else {
+ uint32_t count = 0;
+ rc = KNamelistCount(names, &count);
+ if (rc != 0)
+ { reportErrorStr(indent, rc, "KNamelistCount", "node", root); }
+ else {
+ uint32_t i = 0;
+ reportOpen(indent, root, 0);
+ for (i = 0; i < count && rc == 0; ++i)
+ { rc = ReportChildNode(f, indent + 1, names, node, root, i); }
+ reportClose(indent, root);
+ }
+ }
+ RELEASE(KNamelist, names);
+ }
+
+ RELEASE(KConfigNode, node);
+
+ return rc;
+}
+
+static
+rc_t ReportSra(const ReportFuncs *f, int indent, const KConfig* cfg)
+{
+ rc_t rc = 0;
+ const char root[] = "sra";
+ const KConfigNode* node = NULL;
+ assert(cfg);
+ rc = KConfigOpenNodeRead(cfg, &node, root);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ report(indent, root, 1, "state", 's', "not found");
+ rc = 0;
+ }
+ else
+ { reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+ }
+ else {
+ KNamelist* names = NULL;
+ rc = KConfigNodeListChild(node, &names);
+ if (rc != 0)
+ { reportErrorStr(indent, rc, "KConfigNodeListChild", "node", root); }
+ else {
+ uint32_t count = 0;
+ rc = KNamelistCount(names, &count);
+ if (rc != 0)
+ { reportErrorStr(indent, rc, "KNamelistCount", "node", root); }
+ else {
+ uint32_t i = 0;
+ reportOpen(indent, root, 0);
+ for (i = 0; i < count && rc == 0; ++i)
+ { rc = ReportChildNode(f, indent + 1, names, node, root, i); }
+ reportClose(indent, root);
+ }
+ }
+ RELEASE(KNamelist, names);
+ }
+ RELEASE(KConfigNode, node);
+ return rc;
+}
+
+static
+rc_t ReportKrypto(const ReportFuncs *f, int indent, const KConfig* cfg)
+{
+ rc_t rc = 0;
+
+ const char root[] = "krypto/pwfile";
+ const char name[] = "krypto";
+
+ const KConfigNode* node = NULL;
+ rc = KConfigOpenNodeRead(cfg, &node, root);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ report(indent, name, 1, "state", 's', "pwfile: not found");
+ rc = 0;
+ }
+ else
+ { reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+ }
+ else {
+ rc = ReportConfigNode_File(f, indent, "krypto", "pwfile", node, "krypto");
+ }
+
+ RELEASE(KConfigNode, node);
+
+ return rc;
+}
+
+static
+rc_t ReportCrntRepository(const ReportFuncs *f, int indent, const KConfig *cfg)
+{
+ rc_t rc = 0;
+ const KRepositoryMgr *mgr = NULL;
+ const KRepository *protectd = NULL;
+ const char root[] = "CurrentProtectedRepository";
+ bool open = false;
+ rc = KConfigMakeRepositoryMgrRead(cfg, &mgr);
+ if (rc != 0) {
+ reportError(indent, rc, "KConfigMakeRepositoryMgrRead");
+ }
+ if (rc == 0) {
+ rc = KRepositoryMgrCurrentProtectedRepository(mgr, &protectd);
+ if (rc != 0) {
+ if (rc == SILENT_RC(
+ rcKFG, rcMgr, rcAccessing, rcNode, rcNotFound))
+ {
+ report(indent, root, 1, "found", 's', "false");
+ }
+ else {
+ reportOpen(indent, root, 0);
+ open = true;
+ reportErrorStr(indent + 1, rc,
+ "KRepositoryMgrCurrentProtectedRepository", NULL, NULL);
+ }
+ }
+ }
+ if (rc == 0) {
+ char buffer[256];
+ size_t name_size = 0;
+ reportOpen(indent, root, 1, "found", 's', "true");
+ open = true;
+ rc = KRepositoryName(protectd, buffer, sizeof buffer, &name_size);
+ if (rc != 0) {
+ reportErrorStr(indent + 1, rc, "KRepositoryName",
+ "origin", "KRepositoryMgrCurrentProtectedRepository");
+ }
+ else {
+ reportData(indent + 1, "name", buffer, 0);
+ }
+ }
+ RELEASE(KRepository, protectd);
+ RELEASE(KRepositoryMgr, mgr);
+ if (open) {
+ reportClose(indent, root);
+ }
+ return rc;
+}
+
+rc_t ReportKfg ( const ReportFuncs *f, uint32_t indent )
+{
+ rc_t rc = 0;
+
+ KConfig* cfg = NULL;
+
+ const char tag[] = "Configuration";
+ reportOpen(indent, tag, 0);
+
+ rc = KConfigMake(&cfg, NULL);
+ if (rc != 0) {
+ reportError(indent + 1, rc, "KConfigMake");
+ }
+ else {
+ {
+ rc_t rc2 = ReportKfgFiles(f, indent + 1, cfg);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ {
+ rc_t rc2 = ReportRefseq(f, indent + 1, cfg);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ {
+ rc_t rc2 = ReportKrypto(f, indent + 1, cfg);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ {
+ rc_t rc2 = ReportSra(f, indent + 1, cfg);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ {
+ rc_t rc2 = KConfigPrint(cfg, indent);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ {
+ rc_t rc2 = ReportCrntRepository(f, indent + 1, cfg);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ }
+
+ reportClose(indent, tag);
+
+ RELEASE(KConfig, cfg);
+
+ return rc;
+}
diff --git a/libs/kfg/report.c b/libs/kfg/report.c
new file mode 100644
index 0000000..01a7353
--- /dev/null
+++ b/libs/kfg/report.c
@@ -0,0 +1,433 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kfg/extern.h>
+
+#include <kfg/config.h>
+#include <kfg/kfg-priv.h>
+
+#include <klib/namelist.h> /* KNamelistRelease */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/klib-priv.h>
+#include <klib/rc.h>
+
+#include <kfs/directory.h>
+#include <kfs/dyload.h> /* KDyld */
+#include <kfs/file.h> /* KFileRead */
+#include <kfs/nullfile.h> /* KFileMakeNullUpdate */
+#include <kfs/md5.h> /* KMD5SumFmt */
+
+#include <stdarg.h> /* va_start */
+#include <stdio.h> /* sprintf */
+#include <stdlib.h> /* malloc */
+#include <string.h> /* memset */
+#include <limits.h> /* PATH_MAX */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+#define report ( * f -> report )
+#define reportData ( * f -> reportData )
+#define reportData1 ( * f -> reportData1 )
+#define reportOpen ( * f -> reportOpen )
+#define reportOpen1 ( * f -> reportOpen1 )
+#define reportClose ( * f -> reportClose )
+#define reportClose1 ( * f -> reportClose1 )
+#define reportError ( * f -> reportError )
+#define reportErrorStr ( * f -> reportErrorStr )
+#define reportErrorStrImpl ( * f -> reportErrorStrImpl )
+#define reportErrorStrInt ( * f -> reportErrorStrInt )
+#define reportError3Str ( * f -> reportError3Str )
+
+static rc_t ReportKfgFiles(const ReportFuncs *f, int indent, const KConfig* cfg) {
+ rc_t rc = 0;
+
+ uint32_t count = 0;
+ KNamelist* names = NULL;
+
+ rc = KConfigListIncluded(cfg, &names);
+
+ if (rc != 0) {
+ reportOpen(indent, "Files", 0);
+ reportError(indent + 1, rc, "KConfigListIncluded");
+ }
+ else {
+ rc = KNamelistCount(names, &count);
+ if (rc != 0) {
+ reportOpen(indent, "Files", 0);
+ reportErrorStr(indent + 1,
+ rc, "KNamelistCount", "origin", "KConfigListIncluded");
+ }
+ else {
+ int i = 0;
+ reportOpen(indent, "Files", 1, "count", 'd', count);
+ for (i = 0; i < count && rc == 0; ++i) {
+ const char* name = NULL;
+ rc = KNamelistGet(names, i, &name);
+ if (rc != 0) {
+ reportErrorStrInt(indent + 1, rc, "KNamelistGet",
+ "origin", "KConfigListIncluded", "idx", i);
+ }
+ else
+ { report(indent + 1, "File", 1, "name", 's', name); }
+ }
+ }
+ }
+ reportClose(indent, "Files");
+
+ RELEASE(KNamelist, names);
+
+ return rc;
+}
+
+static
+rc_t sKConfigNode_Read(const KConfigNode* node, char* buffer, size_t buf_sz,
+ char** overflow_buf, bool* cant_allocate)
+{
+ rc_t rc = 0;
+ size_t num_read = 0;
+ size_t remaining = 0;
+ assert(overflow_buf && cant_allocate);
+ *cant_allocate = false;
+ *overflow_buf = NULL;
+ rc = KConfigNodeRead(node, 0, buffer, buf_sz, &num_read, &remaining);
+ if (rc != 0)
+ { return rc; }
+ if (num_read < buf_sz)
+ { buffer[num_read] = '\0'; }
+ else {
+ size_t new_buf_sz = num_read + remaining + 1;
+ char* overflow = malloc(new_buf_sz);
+ if (overflow == NULL) {
+ int i = 0;
+ for (i = 2; i < 5 && buf_sz - i > 0; ++i)
+ { buffer[buf_sz - i] = '.'; }
+ buffer[buf_sz - 1] = '\0';
+ *cant_allocate = true;
+ }
+ else {
+ buffer = *overflow_buf = overflow;
+ buf_sz =
+ rc = KConfigNodeRead
+ (node, 0, buffer, new_buf_sz, &num_read, &remaining);
+ if (rc != 0)
+ { return rc; }
+ assert(num_read < new_buf_sz && remaining == 0);
+ buffer[num_read] = '\0';
+ }
+ }
+ return rc;
+}
+
+static rc_t ReportChildNode(const ReportFuncs *f, int indent,
+ const KNamelist* names, const KConfigNode* node, const char* root, uint32_t idx);
+
+static
+rc_t ReportConfigNodeChildren(const ReportFuncs *f, int indent,
+ const KConfigNode* node, const char* nodeName)
+{
+ KNamelist* names = NULL;
+ rc_t rc = KConfigNodeListChild(node, &names);
+ if (rc != 0) {
+ reportErrorStrImpl(indent,
+ rc, "KConfigNodeListChild", "node", nodeName, false);
+ }
+ else {
+ uint32_t count = 0;
+ rc = KNamelistCount(names, &count);
+ if (rc != 0) {
+ reportErrorStrImpl
+ (indent, rc, "KNamelistCount", "node", nodeName, false);
+ }
+ else {
+ if (count) {
+ int i = 0;
+ OUTMSG(("\n"));
+ for (i = 0; i < count && rc == 0; ++i) {
+ rc = ReportChildNode
+ (f, indent + 1, names, node, nodeName, i);
+ }
+ for (i = 0; i < indent; ++i)
+ { OUTMSG((" ")); }
+ }
+ }
+ }
+ RELEASE(KNamelist, names);
+ return rc;
+}
+
+static
+rc_t ReportConfigNode(const ReportFuncs *f, int indent, const char* root, const char* name,
+ const KConfigNode* node, const char* node_name)
+{
+ rc_t rc = 0;
+
+ char local[PATH_MAX + 1] = "";
+ const char* nodeName = node_name ? node_name : name;
+ char* overflow = NULL;
+ bool cantallocate = false;
+
+ reportOpen1(indent, nodeName);
+ rc = sKConfigNode_Read(node, local, sizeof local, &overflow, &cantallocate);
+ if (rc == 0) {
+ char* buf = overflow ? overflow : local;
+ rc = reportData1(buf);
+ free(overflow);
+ overflow = NULL;
+ if (rc == 0)
+ { rc = ReportConfigNodeChildren(f, indent, node, nodeName); }
+ }
+ else {
+ reportError3Str
+ (indent + 1, rc, "KConfigNodeRead", "node", root, "/", name, false);
+ }
+ reportClose1(nodeName);
+
+ return rc;
+}
+
+static
+rc_t ReportConfigNode_File(const ReportFuncs *f, int indent, const char* root, const char* name,
+ const KConfigNode* node, const char* node_name)
+{
+ rc_t rc = 0;
+ char local[PATH_MAX + 1] = "";
+ const char* nodeName = node_name ? node_name : name;
+ char* overflow = NULL;
+ bool cantallocate = false;
+ rc = sKConfigNode_Read(node, local, sizeof local, &overflow, &cantallocate);
+ if (rc) {
+ reportError3Str
+ (indent, rc, "KConfigNodeRead", "node", root, "/", name, false);
+ }
+ else {
+ const char* buf = overflow ? overflow : local;
+ KPathType file_type = kptNotFound;
+ const char* type = NULL;
+ if (!cantallocate) {
+ KDirectory* dir = NULL;
+ rc = KDirectoryNativeDir(&dir);
+ if (rc == 0) {
+ file_type = KDirectoryPathType(dir, buf);
+ file_type &= ~kptAlias;
+ type = file_type == kptFile ? "exists" :
+ file_type == kptNotFound ? "not found" : "unexpected";
+ }
+ RELEASE(KDirectory, dir);
+ }
+ else
+ { type = "noo long"; }
+ if (rc == 0)
+ { reportData(indent, nodeName, buf, 1, "file", 's', type); }
+ }
+ free(overflow);
+ overflow = NULL;
+ return rc;
+}
+
+static rc_t ReportChildNode(const ReportFuncs *f, int indent, const KNamelist* names,
+ const KConfigNode* node, const char* root, uint32_t idx)
+{
+ rc_t rc = 0;
+
+ const char* name = NULL;
+ rc = KNamelistGet(names, idx, &name);
+ if (rc != 0) {
+ reportErrorStrInt
+ (indent + 1, rc, "KNamelistGet", "node", root, "idx", idx);
+ }
+ else {
+ const KConfigNode* child = NULL;
+ rc = KConfigNodeOpenNodeRead(node, &child, name);
+ if (rc != 0) {
+ reportOpen(indent, name, 0);
+ reportError3Str(indent + 1, rc, "KConfigNodeOpenNodeRead",
+ "node", root, "/", name, true);
+ reportClose(indent, name);
+ }
+ else
+ { rc = ReportConfigNode(f, indent, root, name, child, NULL); }
+ }
+
+ return rc;
+}
+
+static rc_t ReportRefseq(const ReportFuncs *f, int indent, const KConfig* cfg) {
+ rc_t rc = 0;
+
+ const char root[] = "refseq";
+
+ const KConfigNode* node = NULL;
+ rc = KConfigOpenNodeRead(cfg, &node, root);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ report(indent, root, 1, "state", 's', "not found");
+ rc = 0;
+ }
+ else
+ { reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+ }
+ else {
+ KNamelist* names = NULL;
+ rc = KConfigNodeListChild(node, &names);
+ if (rc != 0)
+ { reportErrorStr(indent, rc, "KConfigNodeListChild", "node", root); }
+ else {
+ uint32_t count = 0;
+ rc = KNamelistCount(names, &count);
+ if (rc != 0)
+ { reportErrorStr(indent, rc, "KNamelistCount", "node", root); }
+ else {
+ uint32_t i = 0;
+ reportOpen(indent, root, 0);
+ for (i = 0; i < count && rc == 0; ++i)
+ { rc = ReportChildNode(f, indent + 1, names, node, root, i); }
+ reportClose(indent, root);
+ }
+ }
+ RELEASE(KNamelist, names);
+ }
+
+ RELEASE(KConfigNode, node);
+
+ return rc;
+}
+
+static rc_t ReportSra(const ReportFuncs *f, int indent, const KConfig* cfg) {
+ rc_t rc = 0;
+ const char root[] = "sra";
+ const KConfigNode* node = NULL;
+ assert(cfg);
+ rc = KConfigOpenNodeRead(cfg, &node, root);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ report(indent, root, 1, "state", 's', "not found");
+ rc = 0;
+ }
+ else
+ { reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+ }
+ else {
+ KNamelist* names = NULL;
+ rc = KConfigNodeListChild(node, &names);
+ if (rc != 0)
+ { reportErrorStr(indent, rc, "KConfigNodeListChild", "node", root); }
+ else {
+ uint32_t count = 0;
+ rc = KNamelistCount(names, &count);
+ if (rc != 0)
+ { reportErrorStr(indent, rc, "KNamelistCount", "node", root); }
+ else {
+ uint32_t i = 0;
+ reportOpen(indent, root, 0);
+ for (i = 0; i < count && rc == 0; ++i)
+ { rc = ReportChildNode(f, indent + 1, names, node, root, i); }
+ reportClose(indent, root);
+ }
+ }
+ RELEASE(KNamelist, names);
+ }
+ RELEASE(KConfigNode, node);
+ return rc;
+}
+
+static rc_t ReportKrypto(const ReportFuncs *f, int indent, const KConfig* cfg) {
+ rc_t rc = 0;
+
+ const char root[] = "krypto/pwfile";
+ const char name[] = "krypto";
+
+ const KConfigNode* node = NULL;
+ rc = KConfigOpenNodeRead(cfg, &node, root);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ report(indent, name, 1, "state", 's', "pwfile: not found");
+ rc = 0;
+ }
+ else
+ { reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+ }
+ else {
+ rc = ReportConfigNode_File(f, indent, "krypto", "pwfile", node, "krypto");
+ }
+
+ RELEASE(KConfigNode, node);
+
+ return rc;
+}
+
+rc_t ReportKfg ( const ReportFuncs *f, uint32_t indent )
+{
+ rc_t rc = 0;
+
+ KConfig* cfg = NULL;
+
+ const char tag[] = "Configuration";
+ reportOpen(indent, tag, 0);
+
+ rc = KConfigMake(&cfg, NULL);
+ if (rc != 0)
+ { reportError(indent + 1, rc, "KConfigMake"); }
+ else {
+ {
+ rc_t rc2 = ReportKfgFiles(f, indent + 1, cfg);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ {
+ rc_t rc2 = ReportRefseq(f, indent + 1, cfg);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ {
+ rc_t rc2 = ReportKrypto(f, indent + 1, cfg);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ {
+ rc_t rc2 = ReportSra(f, indent + 1, cfg);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ }
+
+ reportClose(indent, tag);
+
+ RELEASE(KConfig, cfg);
+
+ return rc;
+}
diff --git a/libs/kfg/repository.c b/libs/kfg/repository.c
new file mode 100644
index 0000000..d1b2af2
--- /dev/null
+++ b/libs/kfg/repository.c
@@ -0,0 +1,1087 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <kfg/extern.h>
+
+#include <kfg/repository.h>
+#include <kfg/config.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/impl.h>
+#include <klib/refcount.h>
+#include <klib/text.h>
+#include <klib/vector.h>
+#include <klib/namelist.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/*--------------------------------------------------------------------------
+ * KRepository
+ * presents structured access to a storage repository
+ * as modeled in KConfig.
+ *
+ * all objects are obtained via KRepositoryMgr ( see below )
+ */
+struct KRepository
+{
+ const KConfigNode *node;
+ String name;
+ KRefcount refcount;
+ KRepCategory category;
+ KRepSubCategory subcategory;
+};
+
+
+/* Whack
+ */
+static
+rc_t KRepositoryWhack ( KRepository *self )
+{
+ KConfigNodeRelease ( self -> node );
+ free ( self );
+ return 0;
+}
+
+/* Sort
+ */
+static
+int CC KRepositorySort ( const void **a, const void **b, void *ignore )
+{
+ const KRepository *left = * a;
+ const KRepository *right = * b;
+
+ if ( left -> category < right -> category )
+ return -1;
+ if ( left -> category > right -> category )
+ return 1;
+ if ( left -> subcategory < right -> subcategory )
+ return -1;
+ if ( left -> subcategory > right -> subcategory )
+ return 1;
+ return StringCompare ( & left -> name, & right -> name );
+}
+
+/* Make
+ */
+static
+rc_t KRepositoryMake ( KRepository **rp, const KConfigNode *node,
+ const char *name, KRepCategory category, KRepSubCategory subcategory )
+{
+ rc_t rc;
+ KRepository *r;
+ String name_str;
+
+ /* measure string */
+ StringInitCString ( & name_str, name );
+
+ /* create object */
+ r = malloc ( sizeof * r + name_str . size + 1 );
+ if ( r == NULL )
+ return RC ( rcKFG, rcNode, rcConstructing, rcMemory, rcExhausted );
+
+ rc = KConfigNodeAddRef ( node );
+ if ( rc != 0 )
+ {
+ free ( r );
+ return rc;
+ }
+
+ r -> node = node;
+ r -> name = name_str;
+ r -> name . addr = ( char* ) ( r + 1 );
+ KRefcountInit ( & r -> refcount, 1, "KRepository", "make", name );
+ r -> category = category;
+ r -> subcategory = subcategory;
+ memcpy ( r + 1, name, name_str . size );
+ ( ( char* ) ( r + 1 ) ) [ name_str . size ] = 0;
+
+ * rp = r;
+
+ return 0;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KRepositoryAddRef ( const KRepository *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "KRepository" ) )
+ {
+ case krefLimit:
+ return RC ( rcKFG, rcNode, rcAttaching, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+LIB_EXPORT rc_t CC KRepositoryRelease ( const KRepository *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "KRepository" ) )
+ {
+ case krefWhack:
+ return KRepositoryWhack ( ( KRepository* ) self );
+ case krefLimit:
+ return RC ( rcKFG, rcNode, rcReleasing, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+
+/* WhackEntry
+ * for cleaning up these vectors
+ */
+static
+void CC KRepositoryWhackEntry ( void *item, void *ignore )
+{
+ KRepository *self = item;
+ KRepositoryRelease ( self );
+}
+
+
+/* Category
+ * SubCategory
+ * tells what the repository category or sub-category are
+ * or returns "bad" if the repository object is not usable.
+ */
+LIB_EXPORT KRepCategory CC KRepositoryCategory ( const KRepository *self )
+{
+ if ( self != NULL )
+ return self -> category;
+ return krepBadCategory;
+}
+
+LIB_EXPORT KRepSubCategory CC KRepositorySubCategory ( const KRepository *self )
+{
+ if ( self != NULL )
+ return self -> subcategory;
+ return krepBadSubCategory;
+}
+
+
+/* Name
+ * get the repository name
+ * attempts to copy NUL-terminated name into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - name output parameter
+ *
+ * "name_size" [ OUT, NULL OKAY ] - returns the name size in
+ * bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryName ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *name_size )
+{
+ if ( self == NULL )
+ return RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+
+ if ( name_size != NULL )
+ * name_size = self -> name . size;
+
+ if ( bsize < self -> name . size )
+ return RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+
+ if ( buffer == NULL )
+ return RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcNull );
+
+ memcpy ( buffer, self -> name . addr, self -> name . size );
+
+ if ( bsize > self -> name . size )
+ buffer [ self -> name . size ] = 0;
+
+ return 0;
+}
+
+
+/* DisplayName
+ * get the repository display name,
+ * if different from its actual name
+ *
+ * attempts to copy NUL-terminated name into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - name output parameter
+ *
+ * "name_size" [ OUT, NULL OKAY ] - returns the name size in
+ * bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryDisplayName ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *name_size )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ const KConfigNode *node;
+
+ if ( name_size != NULL )
+ * name_size = 0;
+
+ rc = KConfigNodeOpenNodeRead ( self -> node, & node, "display-name" );
+ if ( rc != 0 )
+ rc = KRepositoryName ( self, buffer, bsize, name_size );
+ else
+ {
+ size_t num_read, remaining;
+ rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+ KConfigNodeRelease ( node );
+
+ if ( rc == 0 )
+ {
+ if ( name_size != NULL )
+ * name_size = num_read + remaining;
+
+ if ( remaining != 0 )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+ else if ( num_read < bsize )
+ buffer [ num_read ] = 0;
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* Root
+ * read the root path as a POSIX path or URL
+ *
+ * attempts to copy NUL-terminated path into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - path output parameter
+ *
+ * "root_size" [ OUT, NULL OKAY ] - returns the path size in
+ * bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryRoot ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *root_size )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ const KConfigNode *node;
+
+ if ( root_size != NULL )
+ * root_size = 0;
+
+ rc = KConfigNodeOpenNodeRead ( self -> node, & node, "root" );
+ if ( rc == 0 )
+ {
+ size_t num_read, remaining;
+ rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+ KConfigNodeRelease ( node );
+
+ if ( rc == 0 )
+ {
+ if ( root_size != NULL )
+ * root_size = num_read + remaining;
+
+ if ( remaining != 0 )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+ else if ( num_read < bsize )
+ buffer [ num_read ] = 0;
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* Disabled
+ * discover whether the repository is enabled
+ */
+LIB_EXPORT bool CC KRepositoryDisabled ( const KRepository *self )
+{
+ if ( self != NULL )
+ {
+ const KConfigNode *node;
+ rc_t rc = KConfigNodeOpenNodeRead ( self -> node, & node, "disabled" );
+ if ( rc == 0 )
+ {
+ bool disabled = false;
+ rc = KConfigNodeReadBool ( node, & disabled );
+ KConfigNodeRelease ( node );
+ if ( rc == 0 )
+ return disabled;
+ }
+ }
+
+ return false;
+}
+
+/* CacheEnabled
+ * discover whether the repository supports caching
+ */
+LIB_EXPORT bool CC KRepositoryCacheEnabled ( const KRepository *self )
+{
+ if ( self != NULL )
+ {
+ const KConfigNode *node;
+ rc_t rc = KConfigNodeOpenNodeRead ( self -> node, & node, "cache-enabled" );
+ if ( rc == 0 )
+ {
+ bool enabled = false;
+ rc = KConfigNodeReadBool ( node, & enabled );
+ KConfigNodeRelease ( node );
+ if ( rc == 0 )
+ return enabled;
+ }
+ }
+
+ return false;
+}
+
+
+/* DownloadTicket
+ * return any associated download ticket
+ *
+ * attempts to copy NUL-terminated ticket into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - ticket output parameter
+ *
+ * "ticket_size" [ OUT, NULL OKAY ] - returns the ticket size in
+ * bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryDownloadTicket ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *ticket_size )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ const KConfigNode *node;
+
+ if ( ticket_size != NULL )
+ * ticket_size = 0;
+
+ rc = KConfigNodeOpenNodeRead ( self -> node, & node, "download-ticket" );
+ if ( rc == 0 )
+ {
+ size_t num_read, remaining;
+ rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+ KConfigNodeRelease ( node );
+
+ if ( rc == 0 )
+ {
+ if ( ticket_size != NULL )
+ * ticket_size = num_read + remaining;
+
+ if ( remaining != 0 )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+ else if ( num_read < bsize )
+ buffer [ num_read ] = 0;
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* EncryptionKey
+ * return any associated encryption key
+ *
+ * attempts to copy NUL-terminated key into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - encryption key output parameter
+ *
+ * "key_size" [ OUT, NULL OKAY ] - returns the key size in
+ * bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryEncryptionKey ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *key_size )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ const KConfigNode *node;
+
+ if ( key_size != NULL )
+ * key_size = 0;
+
+ rc = KConfigNodeOpenNodeRead ( self -> node, & node, "encryption-key" );
+ if ( rc == 0 )
+ {
+ size_t num_read, remaining;
+ rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+ KConfigNodeRelease ( node );
+
+ if ( rc == 0 )
+ {
+ if ( key_size != NULL )
+ * key_size = num_read + remaining;
+
+ if ( remaining != 0 )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+ else if ( num_read < bsize )
+ memset ( & buffer [ num_read ], 0, bsize - num_read );
+ }
+ }
+ else if ( GetRCState ( rc ) == rcNotFound )
+ {
+ char path [ 4096 ];
+ rc_t rc2 = KRepositoryEncryptionKeyFile ( self, path, sizeof path, NULL );
+ if ( rc2 == 0 )
+ {
+ KDirectory *wd;
+ rc2 = KDirectoryNativeDir ( & wd );
+ if ( rc2 == 0 )
+ {
+ const KFile *keyFile;
+ rc2 = KDirectoryOpenFileRead ( wd, & keyFile, path );
+ KDirectoryRelease ( wd );
+ if ( rc2 == 0 )
+ {
+ size_t num_read;
+ rc = KFileReadAll ( keyFile, 0, buffer, bsize, & num_read );
+ if ( rc == 0 )
+ {
+ if ( num_read == bsize )
+ {
+ uint64_t eof;
+ rc = KFileSize ( keyFile, & eof );
+ if ( rc == 0 )
+ num_read = ( size_t ) eof;
+ else
+ num_read = 0;
+
+ rc = RC ( rcKFG, rcFile, rcReading, rcBuffer, rcInsufficient );
+ memset ( buffer, 0, bsize );
+ }
+ else if ( num_read == 0 )
+ {
+ rc = RC ( rcKFG, rcFile, rcReading, rcFile, rcEmpty );
+ memset ( buffer, 0, bsize );
+ }
+ else
+ {
+ char *eoln = string_chr ( buffer, num_read, '\n' );
+ if ( eoln != NULL )
+ {
+ if ( eoln == buffer )
+ num_read = 0;
+ else if ( eoln [ -1 ] == '\r' )
+ num_read = eoln - buffer - 1;
+ else
+ num_read = eoln - buffer;
+ }
+
+ if ( key_size != NULL )
+ * key_size = num_read;
+
+ memset ( & buffer [ num_read ], 0, bsize - num_read );
+ }
+ }
+
+ KFileRelease ( keyFile );
+ }
+ }
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* EncryptionKeyFile
+ * return path to any associated encryption key file
+ *
+ * attempts to copy NUL-terminated path into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - key file path output parameter
+ *
+ * "path_size" [ OUT, NULL OKAY ] - returns the path size in
+ * bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryEncryptionKeyFile ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *path_size )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ const KConfigNode *node;
+
+ if ( path_size != NULL )
+ * path_size = 0;
+
+ rc = KConfigNodeOpenNodeRead ( self -> node, & node, "encryption-key-path" );
+ if ( rc == 0 )
+ {
+ size_t num_read, remaining;
+ rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+ KConfigNodeRelease ( node );
+
+ if ( rc == 0 )
+ {
+ if ( path_size != NULL )
+ * path_size = num_read + remaining;
+
+ if ( remaining != 0 )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+ else if ( num_read < bsize )
+ buffer [ num_read ] = 0;
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* Description
+ * return any associated descriptive text
+ *
+ * attempts to copy NUL-terminated description into provided buffer
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - description text output parameter
+ *
+ * "desc_size" [ OUT, NULL OKAY ] - returns the text size in
+ * bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryDescription ( const KRepository *self,
+ char *buffer, size_t bsize, size_t *desc_size )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ const KConfigNode *node;
+
+ if ( desc_size != NULL )
+ * desc_size = 0;
+
+ rc = KConfigNodeOpenNodeRead ( self -> node, & node, "description" );
+ if ( rc == 0 )
+ {
+ size_t num_read, remaining;
+ rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+ KConfigNodeRelease ( node );
+
+ if ( rc == 0 )
+ {
+ if ( desc_size != NULL )
+ * desc_size = num_read + remaining;
+
+ if ( remaining != 0 )
+ rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+ else if ( num_read < bsize )
+ buffer [ num_read ] = 0;
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KRepositoryVector
+ * uses Vector API
+ * holds zero or more KRepository objects
+ */
+
+
+/* Whack
+ * destroy your vector
+ */
+LIB_EXPORT rc_t CC KRepositoryVectorWhack ( KRepositoryVector *self )
+{
+ if ( self == NULL )
+ return RC ( rcKFG, rcVector, rcDestroying, rcSelf, rcNull );
+
+ VectorWhack ( self, KRepositoryWhackEntry, NULL );
+ return 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KRepositoryMgr
+ * manages structured access to repositories
+ */
+struct KRepositoryMgr
+{
+ const KConfig *ro_cfg;
+ KConfig *rw_cfg;
+ KRefcount refcount;
+};
+
+
+/* Whack
+ */
+static
+rc_t KRepositoryMgrWhack ( KRepositoryMgr *self )
+{
+ if ( self -> ro_cfg )
+ KConfigRelease ( self -> ro_cfg );
+ if ( self -> rw_cfg )
+ KConfigRelease ( self -> rw_cfg );
+ free ( self );
+ return 0;
+}
+
+
+/* Make
+ * create a repository manager
+ * uses values from "self"
+ */
+LIB_EXPORT rc_t CC KConfigMakeRepositoryMgrRead ( const KConfig *self, const KRepositoryMgr **mgrp )
+{
+ rc_t rc;
+
+ if ( mgrp == NULL )
+ rc = RC ( rcKFG, rcMgr, rcConstructing, rcParam, rcNull );
+ else
+ {
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcMgr, rcConstructing, rcSelf, rcNull );
+ else
+ {
+ KRepositoryMgr *mgr = calloc ( 1, sizeof * mgr );
+ if ( mgr == NULL )
+ rc = RC ( rcKFG, rcMgr, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KConfigAddRef ( self );
+ if ( rc == 0 )
+ {
+ mgr -> ro_cfg = self;
+ KRefcountInit ( & mgr -> refcount, 1, "KRepositoryMgr", "make-read", "mgr" );
+ * mgrp = mgr;
+ return 0;
+ }
+
+ free ( mgr );
+ }
+ }
+
+ * mgrp = NULL;
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KConfigMakeRepositoryMgrUpdate ( KConfig *self, KRepositoryMgr **mgrp )
+{
+ rc_t rc;
+
+ if ( mgrp == NULL )
+ rc = RC ( rcKFG, rcMgr, rcConstructing, rcParam, rcNull );
+ else
+ {
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcMgr, rcConstructing, rcSelf, rcNull );
+ else
+ {
+ KRepositoryMgr *mgr = calloc ( 1, sizeof * mgr );
+ if ( mgr == NULL )
+ rc = RC ( rcKFG, rcMgr, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KConfigAddRef ( self );
+ if ( rc == 0 )
+ {
+ mgr -> rw_cfg = self;
+ KRefcountInit ( & mgr -> refcount, 1, "KRepositoryMgr", "make-update", "mgr" );
+ * mgrp = mgr;
+ return 0;
+ }
+
+ free ( mgr );
+ }
+ }
+
+ * mgrp = NULL;
+ }
+
+ return rc;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrAddRef ( const KRepositoryMgr *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "KRepositoryMgr" ) )
+ {
+ case krefLimit:
+ return RC ( rcKFG, rcMgr, rcAttaching, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+LIB_EXPORT rc_t CC KRepositoryMgrRelease ( const KRepositoryMgr *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "KRepositoryMgr" ) )
+ {
+ case krefWhack:
+ return KRepositoryMgrWhack ( ( KRepositoryMgr* ) self );
+ case krefLimit:
+ return RC ( rcKFG, rcMgr, rcReleasing, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+
+static
+const KConfig *KRepositoryMgrGetROKConfig ( const KRepositoryMgr *self )
+{
+ return self -> ro_cfg ? self -> ro_cfg : self -> rw_cfg;
+}
+
+static
+rc_t KRepositoryMgrSubCategoryRepositories ( const KConfigNode *sub,
+ KRepCategory category, KRepSubCategory subcategory, KRepositoryVector *repositories )
+{
+ KNamelist *repo_names;
+ rc_t rc = KConfigNodeListChildren ( sub, & repo_names );
+ if ( rc == 0 )
+ {
+ uint32_t i, count;
+ rc = KNamelistCount ( repo_names, & count );
+ for ( i = 0; i < count && rc == 0; ++ i )
+ {
+ const char *repo_name;
+ rc = KNamelistGet ( repo_names, i, & repo_name );
+ if ( rc == 0 )
+ {
+ const KConfigNode *node;
+ rc = KConfigNodeOpenNodeRead ( sub, & node, repo_name );
+ if ( rc == 0 )
+ {
+ KRepository *repo;
+ rc = KRepositoryMake ( & repo, node, repo_name, category, subcategory );
+ if ( rc == 0 )
+ {
+ rc = VectorAppend ( repositories, NULL, repo );
+ if ( rc != 0 )
+ KRepositoryWhack ( repo );
+ }
+
+ KConfigNodeRelease ( node );
+ }
+ }
+ }
+
+ KNamelistRelease ( repo_names );
+ }
+
+ return rc;
+}
+
+static
+rc_t KRepositoryMgrCategoryRepositories ( const KConfigNode *cat,
+ KRepCategory category, KRepositoryVector *repositories )
+{
+ KNamelist *sub_names;
+ rc_t rc = KConfigNodeListChildren ( cat, & sub_names );
+ if ( rc == 0 )
+ {
+ uint32_t i, count;
+ rc = KNamelistCount ( sub_names, & count );
+ for ( i = 0; i < count && rc == 0; ++ i )
+ {
+ const char *sub_name;
+ rc = KNamelistGet ( sub_names, i, & sub_name );
+ if ( rc == 0 )
+ {
+ KRepSubCategory subcategory = krepBadSubCategory;
+ if ( strcmp ( "main", sub_name ) == 0 )
+ subcategory = krepMainSubCategory;
+ else if ( strcmp ( "aux", sub_name ) == 0 )
+ subcategory = krepAuxSubCategory;
+ else if ( strcmp ( "protected", sub_name ) == 0 )
+ subcategory = krepProtectedSubCategory;
+
+ if ( subcategory != krepBadSubCategory )
+ {
+ const KConfigNode *sub;
+ rc = KConfigNodeOpenNodeRead ( cat, & sub, sub_name );
+ if ( rc == 0 )
+ {
+ rc = KRepositoryMgrSubCategoryRepositories ( sub, category, subcategory, repositories );
+ KConfigNodeRelease ( sub );
+ }
+ }
+ }
+ }
+
+ KNamelistRelease ( sub_names );
+ }
+
+ return rc;
+}
+
+
+/* UserRepositories
+ * retrieve all user repositories in a Vector
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrUserRepositories ( const KRepositoryMgr *self,
+ KRepositoryVector *user_repositories )
+{
+ rc_t rc;
+
+ if ( user_repositories == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcParam, rcNull );
+ else
+ {
+ VectorInit ( user_repositories, 0, 8 );
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ const KConfig *kfg = KRepositoryMgrGetROKConfig ( self );
+
+ const KConfigNode *user;
+ rc = KConfigOpenNodeRead ( kfg, & user, "/repository/user" );
+ if ( rc == 0 )
+ {
+ rc = KRepositoryMgrCategoryRepositories ( user, krepUserCategory, user_repositories );
+ KConfigNodeRelease ( user );
+ if ( rc == 0 )
+ VectorReorder ( user_repositories, KRepositorySort, NULL );
+ }
+
+ if ( rc != 0 )
+ KRepositoryVectorWhack ( user_repositories );
+ }
+ }
+
+ return rc;
+}
+
+
+/* SiteRepositories
+ * retrieve all site repositories in a Vector
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrSiteRepositories ( const KRepositoryMgr *self,
+ KRepositoryVector *site_repositories )
+{
+ rc_t rc;
+
+ if ( site_repositories == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcParam, rcNull );
+ else
+ {
+ VectorInit ( site_repositories, 0, 8 );
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ const KConfig *kfg = KRepositoryMgrGetROKConfig ( self );
+
+ const KConfigNode *site;
+ rc = KConfigOpenNodeRead ( kfg, & site, "/repository/site" );
+ if ( rc == 0 )
+ {
+ rc = KRepositoryMgrCategoryRepositories ( site, krepSiteCategory, site_repositories );
+ KConfigNodeRelease ( site );
+ if ( rc == 0 )
+ VectorReorder ( site_repositories, KRepositorySort, NULL );
+ }
+
+ if ( rc != 0 )
+ KRepositoryVectorWhack ( site_repositories );
+ }
+ }
+
+ return rc;
+}
+
+
+/* RemoteRepositories
+ * retrieve all remote repositories in a Vector
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrRemoteRepositories ( const KRepositoryMgr *self,
+ KRepositoryVector *remote_repositories )
+{
+ rc_t rc;
+
+ if ( remote_repositories == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcParam, rcNull );
+ else
+ {
+ VectorInit ( remote_repositories, 0, 8 );
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ const KConfig *kfg = KRepositoryMgrGetROKConfig ( self );
+
+ const KConfigNode *remote;
+ rc = KConfigOpenNodeRead ( kfg, & remote, "/repository/remote" );
+ if ( rc == 0 )
+ {
+ rc = KRepositoryMgrCategoryRepositories ( remote, krepRemoteCategory, remote_repositories );
+ KConfigNodeRelease ( remote );
+ if ( rc == 0 )
+ VectorReorder ( remote_repositories, KRepositorySort, NULL );
+ }
+
+ if ( rc != 0 )
+ KRepositoryVectorWhack ( remote_repositories );
+ }
+ }
+
+ return rc;
+}
+
+
+/* CurrentProtectedRepository
+ * returns the currently active user protected repository
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrCurrentProtectedRepository ( const KRepositoryMgr *self, const KRepository **protected )
+{
+ rc_t rc;
+
+ if ( protected == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcParam, rcNull );
+ else
+ {
+ * protected = NULL;
+
+ if ( self == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ KRepositoryVector v;
+ rc = KRepositoryMgrUserRepositories ( self, & v );
+ if ( rc == 0 )
+ {
+ KDirectory *wd;
+ rc = KDirectoryNativeDir ( & wd );
+ if ( rc == 0 )
+ {
+ /* we need services of system directory */
+ struct KSysDir *sysDir = KDirectoryGetSysDir ( wd );
+
+ /* allocate buffer space for 3 paths */
+ const size_t path_size = 4096;
+ char *wd_path = malloc ( path_size * 3 );
+ if ( wd_path == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcMemory, rcExhausted );
+ else
+ {
+ /* the working directory already has a canonical path */
+ rc = KDirectoryResolvePath ( wd, true, wd_path, path_size, "." );
+ if ( rc == 0 )
+ {
+ size_t wd_size = string_size ( wd_path );
+
+ /* look for all protected user repositories */
+ uint32_t i, count = VectorLength ( & v );
+ for ( i = 0; i < count; ++ i )
+ {
+ const KRepository *r = ( const void* ) VectorGet ( & v, i );
+ if ( r -> subcategory == krepProtectedSubCategory )
+ {
+ size_t resolved_size;
+ char *resolved = wd_path + path_size;
+
+ /* get stated root path to repository */
+ char *root = resolved + path_size;
+ rc = KRepositoryRoot ( r, root, path_size, NULL );
+ if ( rc != 0 )
+ break;
+
+ /* get its canonical path */
+ rc = KSysDirRealPath ( sysDir, resolved, path_size, root );
+ if ( rc != 0 )
+ break;
+
+ /* we know the current directory's canonical path size
+ and we know the repository's canonical path size.
+ to be "within" the repository, the current directory's
+ size must be >= repository path size, and must match
+ exactly the repository path itself over those bytes. */
+ resolved_size = string_size ( resolved );
+ if ( resolved_size <= wd_size && memcmp ( wd_path, resolved, resolved_size ) == 0 )
+ {
+ /* still have a little more to check */
+ if ( resolved_size == wd_size ||
+ wd_path [ resolved_size ] == '/' )
+ {
+ /* we are in the repository */
+ rc = KRepositoryAddRef ( r );
+ if ( rc == 0 )
+ * protected = r;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ free ( wd_path );
+ }
+
+ KDirectoryRelease ( wd );
+ }
+
+ KRepositoryVectorWhack ( & v );
+ }
+
+ if ( rc == 0 && * protected == NULL )
+ rc = RC ( rcKFG, rcMgr, rcAccessing, rcNode, rcNotFound );
+ }
+ }
+
+ return rc;
+}
diff --git a/libs/kfs/Makefile b/libs/kfs/Makefile
index 3d83284..87421b3 100644
--- a/libs/kfs/Makefile
+++ b/libs/kfs/Makefile
@@ -81,16 +81,14 @@ tag: \
#
$(LIBDIR)/libkfs: $(addprefix $(LIBDIR)/libkfs.,$(LIBEXT))
-KFS_SRC = \
- path \
- syspath \
+KFS_CMN = \
directory \
arrayfile \
file \
sysdir \
sysfile \
- mmap \
sysmmap \
+ syslockfile \
sysdll \
gzip \
bzip \
@@ -105,19 +103,32 @@ KFS_SRC = \
tar \
teefile \
buffile \
+ buffile-read \
buffile-write \
subfile \
nullfile \
countfile \
dir_test \
pagefile \
- pmem
+ pmem \
+ readheadfile \
+ ramfile \
+ quickmount \
+ report \
+ lockfile \
+ syslockfile \
+ cacheteefile
+
+KFS_SRC = \
+ mmap \
+ $(KFS_CMN)
KFS_OBJ = \
$(addsuffix .$(LOBX),$(KFS_SRC))
KFS_LIB = \
+ -dkproc \
-dklib \
-ddl \
-dz \
@@ -156,7 +167,8 @@ KFF_OBJ = \
$(addsuffix .$(LOBX),$(KFF_SRC))
KFF_LIB = \
- -dklib
+ -dkfg \
+ -dklib
ifneq (win,$(OS))
KFF_LIB += -lmagic
diff --git a/libs/kfs/arc.c b/libs/kfs/arc.c
index 1d7c993..1779673 100644
--- a/libs/kfs/arc.c
+++ b/libs/kfs/arc.c
@@ -28,6 +28,7 @@
#include "toc-priv.h"
#include <kfs/arc.h>
+
#include <klib/debug.h>
#include <klib/log.h>
#include <klib/status.h>
@@ -38,6 +39,9 @@
#include <klib/pbstree.h>
#include <klib/text.h>
#include <klib/sort.h>
+#include <klib/printf.h>
+#include <klib/klib-priv.h> /* ReportRecordZombieFile */
+
#include <kfs/directory.h>
#include <kfs/file.h>
#include <kfs/toc.h>
@@ -1121,43 +1125,47 @@ uint32_t KArcDirFullPathType (const KArcDir *self, const char * path)
for (loopcount = 0; loopcount < KARC_LINK_RESOLVE_LOOPMAX; ++loopcount)
{
- rc = KArcDirResolvePathNode (self, rcConstructing, local_path, false, &node, &type);
- if (rc != 0)
- {
- /* TODO: filter rc into kptBadPath or kptNotFound... */
- return (tt | kptNotFound);
- }
- switch (type)
- {
- default:
- return kptBadPath;
+ rc = KArcDirResolvePathNode (self,
+ rcConstructing, local_path, false, &node, &type);
+ if (rc != 0)
+ {
+ /* TODO: filter rc into kptBadPath or kptNotFound... */
+ return (tt | kptNotFound);
+ }
+ switch (type)
+ {
+ default:
+ return kptBadPath;
- case ktocentrytype_unknown:
- return kptBadPath;
+ case ktocentrytype_unknown:
+ return kptBadPath;
- case ktocentrytype_hardlink:
- return kptDir;
+ case ktocentrytype_hardlink:
+ return kptDir;
- case ktocentrytype_dir:
- return tt | kptDir;
+ case ktocentrytype_dir:
+ return tt | kptDir;
- case ktocentrytype_file:
- case ktocentrytype_emptyfile:
- return tt | kptFile;
+ case ktocentrytype_file:
+ case ktocentrytype_emptyfile:
+ return tt | kptFile;
- case ktocentrytype_chunked:
- return tt | kptFile;
+ case ktocentrytype_chunked:
+ return tt | kptFile;
- case ktocentrytype_softlink:
- tt = kptAlias;
- if (KTocEntryGetSoftTarget(node,&local_path) != 0)
- return kptAlias|kptNotFound;
- break;
+ case ktocentrytype_softlink:
+ tt = kptAlias;
+ if (KTocEntryGetSoftTarget(node,&local_path) != 0)
+ return kptAlias|kptNotFound;
+ break;
case ktocentrytype_zombiefile:
+ PLOGMSG (klogWarn, (klogWarn,
+ "zombie file detected: '$(P)'", "P=%s", path));
+ ReportRecordZombieFile();
return tt | kptZombieFile;
- }
+ }
}
return kptBadPath;
}
@@ -2172,6 +2180,12 @@ rc_t KArcFileMake (KArcFile ** self,
* Proceed with non-NULL parameters
*/
rc = KFileSize (archive, &size);
+ if (GetRCState(rc) == rcUnsupported)
+ {
+ size = ~(uint64_t)0;
+ rc = 0;
+ }
+
if (rc == 0)
{
/* we need to check chunked files here as well */
@@ -2197,6 +2211,7 @@ rc_t KArcFileMake (KArcFile ** self,
{
rc = KFileInit (&pF->dad, /* initialize base class */
(const KFile_vt*)&vtKArcFile, /* VTable for KArcFile */
+ "KArcFile", "no-name",
true, /* read allowed */
false); /* write disallowed */
if (rc == 0)
@@ -3432,12 +3447,18 @@ LIB_EXPORT rc_t CC KDirectoryToKArcDir (const KDirectory * self, const KArcDir *
static
rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
- const KDirectory ** pdir, bool chroot, bool silent,
- const char * path, KArcFSType baseType,
- rc_t ( CC * parse )( KToc *, const void *,
- bool( CC* )( const KDirectory*, const char *, void*), void * ),
- bool( CC* filter )( const KDirectory*, const char *, void * ),
- void * filterparam )
+ const KDirectory ** pdir,
+ bool chroot,
+ bool silent,
+ const char * path,
+ KArcFSType baseType,
+ void * _archive,
+ rc_t ( CC * parse )( KToc *, const void *,
+ bool( CC* )( const KDirectory*,
+ const char *, void*),
+ void * ),
+ bool( CC* filter )( const KDirectory*, const char *, void * ),
+ void * filterparam )
{
union
{
@@ -3454,7 +3475,7 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
char cpath [ 4096 ];
uint32_t type;
- archive.v = NULL;
+ archive.v = _archive;
/* -----
* sanity check parameters The first bunch is from the base class KDirectory.
*/
@@ -3499,77 +3520,110 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
return RC ( rcFS, rcDirectory, rcAccessing, rcPath, rcInvalid );
}
- /* -----
- * we got a local String type mixed in along with ASCIZ cstrings
- */
- rc = KDirectoryResolvePath ( self, true, cpath, sizeof (cpath), path );
- if ( rc == 0 )
+ if (_archive == NULL)
+ {
+ /* -----
+ * we got a local String type mixed in along with ASCIZ cstrings
+ */
+ rc = KDirectoryResolvePath ( self, true, cpath, sizeof (cpath), path );
+ if ( rc == 0 )
+ {
+ size_t ln;
+ ln = strlen (cpath);
+ if ((cpath[ln-1] == '.')&&(cpath[ln-2] == '/'))
+ cpath[ln-2] = '\0';
+ }
+ else
+ return rc;
+ }
+ else
{
size_t ln;
- ln = strlen (cpath);
- if ((cpath[ln-1] == '.')&&(cpath[ln-2] == '/'))
- cpath[ln-2] = '\0';
+
+ rc = string_printf (cpath, sizeof cpath, &ln, path);
+ if ((rc == 0) && (ln > sizeof cpath))
+ rc = RC (rcFS, rcArc, rcOpening, rcBuffer, rcInsufficient);
}
- if ( rc != 0 )
- return rc;
+
StringInitCString ( &spath, cpath );
pathlen = strlen ( cpath );
- type = KDirectoryVPathType ( self, cpath, NULL );
- switch ( type & ~kptAlias )
- {
- default:
- rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcUnexpected );
- if ( !silent )
- LOGERR (klogErr, rc, "Unusable file type" );
- break;
- case kptNotFound:
- case kptBadPath:
- rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcNotFound );
- break;
-
- case kptFile:
- /* -----
- * Open the archive file as a KFILE for internal use
- *
- * Fail / quit if we couldn't
- */
- if ( baseType != tocKFile )
+ if (_archive != NULL)
{
- rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcIncorrect );
- if ( !silent )
- LOGERR ( klogErr, rc, "Mismatch of file type and expected type" );
- return rc;
+ switch (baseType)
+ {
+ case tocKFile:
+ rc = KFileAddRef (_archive);
+ break;
+ case tocKDirectory:
+ rc = KDirectoryAddRef (_archive);
+ break;
+ default:
+ /* i dunno */
+ break;
+ }
+ if (rc)
+ return rc;
}
-
- rc = KDirectoryVOpenFileRead ( self, &archive.f, cpath, NULL );
- if ( rc != 0 && !silent )
+ else
{
- PLOGERR ( klogErr, ( klogErr, rc,
- "Failed to open archive file $(file)",
- PLOG_S (file),
- path ) );
- }
- break;
-
- case kptDir:
- if ( baseType != tocKDirectory )
+ type = KDirectoryVPathType ( self, cpath, NULL );
+ switch ( type & ~kptAlias )
{
- rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcInconsistent );
+ default:
+ rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcUnexpected );
if ( !silent )
- LOGERR ( klogErr, rc, "Mismatch of file type and expected type" );
- return rc;
- }
- rc = KDirectoryVOpenDirRead ( self, &archive.d, false, cpath, NULL );
- if ( rc != 0 && !silent )
- {
- PLOGMSG ( klogErr,
- ( klogErr, "Failed to open archive directory $(file)",
- PLOG_S ( file ), path ) );
- }
- break;
- } /* switch ( type & ~kptAlias ) */
+ LOGERR (klogErr, rc, "Unusable file type" );
+ break;
+ case kptNotFound:
+ case kptBadPath:
+ rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcNotFound );
+ break;
+
+ case kptFile:
+ /* -----
+ * Open the archive file as a KFILE for internal use
+ *
+ * Fail / quit if we couldn't
+ */
+ if ( baseType != tocKFile )
+ {
+ rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcIncorrect );
+ if ( !silent )
+ LOGERR ( klogErr, rc, "Mismatch of file type and expected type" );
+ return rc;
+ }
+
+ rc = KDirectoryVOpenFileRead ( self, &archive.f, cpath, NULL );
+ if ( rc != 0 && !silent )
+ {
+ PLOGERR ( klogErr, ( klogErr, rc,
+ "Failed to open archive file $(file)",
+ PLOG_S (file),
+ path ) );
+ }
+
+ break;
+ case kptDir:
+ if ( baseType != tocKDirectory )
+ {
+ rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcInconsistent );
+ if ( !silent )
+ LOGERR ( klogErr, rc, "Mismatch of file type and expected type" );
+ return rc;
+ }
+
+ rc = KDirectoryVOpenDirRead ( self, &archive.d, false, cpath, NULL );
+ if ( rc != 0 && !silent )
+ {
+ PLOGMSG ( klogErr,
+ ( klogErr, "Failed to open archive directory $(file)",
+ PLOG_S ( file ), path ) );
+ }
+ break;
+ } /* switch ( type & ~kptAlias ) */
+ }
if ( rc == 0 )
{
/* -----
@@ -3635,7 +3689,6 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
* if rc is non-zero we failed somewhere above.
* Release allocated memory and exit with that error code.
*/
-
if ( archive.v != NULL )
{
switch ( baseType )
@@ -3652,6 +3705,8 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
}
}
+ rc = rc | rcaux;
+
if ( rc != 0 )
{
if ( arcdir != NULL )
@@ -3661,7 +3716,8 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
if ( toc != NULL )
KTocRelease ( toc );
- return rc | rcaux;
+
+ return rc;
}
@@ -3712,8 +3768,9 @@ LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead( const KDirectory * self,
pdir,
chroot,
false,
- path,
+ path,
baseType,
+ NULL,
parse,
filter,
filterparam );
@@ -3736,10 +3793,34 @@ LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead_silent( const KDirectory * self,
true,
path,
baseType,
+ NULL,
parse,
filter,
filterparam );
}
+LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead_silent_preopened( const KDirectory * self,
+ const KDirectory ** pdir,
+ bool chroot,
+ const char * path,
+ KArcFSType baseType,
+ void * archive,
+ rc_t ( CC * parse )( KToc *, const void *,
+ bool( CC * )( const KDirectory *, const char *, void * ), void * ),
+ bool ( CC * filter )( const KDirectory*, const char *, void *),
+ void * filterparam )
+{
+ return KDirectoryOpenArcDirRead_intern( self,
+ pdir,
+ chroot,
+ true,
+ path,
+ baseType,
+ archive,
+ parse,
+ filter,
+ filterparam );
+}
+
/* ======================================================================
*
diff --git a/libs/kfs/buffile-read.c b/libs/kfs/buffile-read.c
new file mode 100644
index 0000000..7635568
--- /dev/null
+++ b/libs/kfs/buffile-read.c
@@ -0,0 +1,265 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+typedef struct KBufReadFile KBufReadFile;
+#define KFILE_IMPL KBufReadFile
+
+#include <kfs/extern.h>
+
+#include <kfs/file.h>
+#include <kfs/impl.h>
+#include <klib/debug.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+
+/*-----------------------------------------------------------------------
+ * KBufReadFile
+ */
+struct KBufReadFile
+{
+ KFile dad;
+
+ uint64_t pos; /* position of buff within the original file */
+
+ const KFile *f; /* original file being buffered */
+
+ size_t bsize; /* size of the buffer */
+ size_t num_valid; /* how much of the buffer is actually valid */
+
+ uint8_t buff [ 1 ];
+};
+
+static
+rc_t CC KBufReadFileDestroy ( KBufReadFile *self )
+{
+ rc_t rc = KFileRelease ( self -> f );
+ if ( rc == 0 )
+ free ( self );
+ return rc;
+}
+
+static
+struct KSysFile* CC KBufReadFileSysFile ( const KBufReadFile *self, uint64_t *offset )
+{
+ /* does not support SysFile */
+ * offset = 0;
+ return NULL;
+}
+
+static
+rc_t CC KBufReadFileRandomAccess ( const KBufReadFile *self )
+{
+ return KFileRandomAccess ( self -> f );
+}
+
+static
+rc_t CC KBufReadFileSize ( const KBufReadFile *self, uint64_t *size )
+{
+ return KFileSize ( self -> f, size );
+}
+
+static
+rc_t CC KBufReadFileSetSize ( KBufReadFile *self, uint64_t size )
+{
+ return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported );
+}
+
+static
+rc_t CC KBufReadFileRead ( const KBufReadFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ rc_t rc = 0;
+
+ assert (cself);
+ assert (buffer);
+ assert (num_read);
+
+ /* start assuming nothing will be read */
+ *num_read = 0;
+
+ if (bsize != 0)
+ {
+ KBufReadFile * self = (KBufReadFile *)cself;
+ uint64_t new_pos;
+ size_t new_offset;
+
+ /* cast might be a no-op */
+ new_offset = (size_t)(pos % cself->bsize);
+ new_pos = pos - new_offset;
+
+ /* we need to read if we are on the wrong 'sector page'
+ * or the current 'sector page' isn't long enough.
+ *
+ * If on the wrong page just kill the contents
+ */
+ if (new_pos != cself->pos)
+ {
+ self->num_valid = 0;
+ self->pos = new_pos;
+ }
+
+ /* new we agree on the 'sector page' even if we have nothing
+ * valid in it */
+ if ((self->num_valid == 0) || (self->num_valid <= (size_t)new_offset))
+ {
+ size_t new_num_read;
+ rc = KFileReadAll (self->f, self->pos + self->num_valid,
+ self->buff + self->num_valid,
+ self->bsize - self->num_valid,
+ &new_num_read);
+ if (rc == 0)
+ self->num_valid += new_num_read;
+ }
+
+ /* now we have all we're gonna get this time */
+ if (new_offset < self->num_valid)
+ {
+ size_t to_copy;
+
+ to_copy = self->num_valid - new_offset;
+ if (to_copy > bsize)
+ to_copy = bsize;
+
+ memmove (buffer, self->buff + new_offset, to_copy);
+ *num_read = to_copy;
+ }
+ }
+ return rc;
+}
+
+static
+rc_t CC KBufReadFileWrite ( KBufReadFile *self, uint64_t pos,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ return RC ( rcFS, rcFile, rcWriting, rcFunction, rcUnsupported );
+}
+
+static
+uint32_t CC KBufReadFileType ( const KBufReadFile * self )
+{
+ return KFileType ( self -> f );
+}
+
+static
+rc_t KBufReadFileMake ( KBufReadFile ** bp, const KFile *f, size_t bsize,
+ const KFile_vt *vt, bool read_enabled, bool write_enabled )
+{
+ rc_t rc;
+
+ KBufReadFile *buf = calloc ( sizeof * buf - 1 + bsize, 1 );
+ if ( buf == NULL )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KFileInit ( & buf -> dad, vt, "KBufReadFile", "no-name", read_enabled, write_enabled );
+ if ( rc == 0 )
+ {
+ rc = KFileAddRef ( f );
+ if ( rc == 0 )
+ {
+ buf -> f = ( KFile* ) f;
+ buf -> bsize = bsize;
+ * bp = buf;
+ return 0;
+ }
+ }
+
+ free ( buf );
+ }
+
+ return rc;
+}
+
+/* MakeBufferedWrite
+ * make a writable file buffer
+ *
+ * "buf" [ OUT ] - return parameter for new buffered file
+ *
+ * "original" [ IN ] - source file to be buffered. must have read access
+ *
+ * "bsize" [ IN ] - buffer size
+ */
+
+static
+const KFile_vt_v1 vtKBufReadFileRandWR_v1 =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KBufReadFileDestroy,
+ KBufReadFileSysFile,
+ KBufReadFileRandomAccess,
+ KBufReadFileSize,
+ KBufReadFileSetSize,
+ KBufReadFileRead,
+ KBufReadFileWrite,
+
+ /* 1.1 */
+ KBufReadFileType
+};
+
+LIB_EXPORT
+rc_t CC KBufReadFileMakeRead ( const KFile ** bp, const KFile * original, size_t bsize )
+{
+ rc_t rc;
+
+ if ( bp == NULL )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcNull );
+ else
+ {
+ if ( original == NULL )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNull );
+ else if ( ! original -> read_enabled )
+ {
+ if ( original -> write_enabled )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcWriteonly );
+ else
+ rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNoPerm );
+ }
+ else
+ {
+ KBufReadFile *buf;
+ rc = KBufReadFileMake ( & buf, original, bsize,
+ ( const KFile_vt* ) & vtKBufReadFileRandWR_v1, true, false );
+ if ( rc == 0 )
+ {
+ * bp = & buf -> dad;
+ return 0;
+ }
+ }
+
+ * bp = NULL;
+ }
+
+ return rc;
+}
diff --git a/libs/kfs/buffile-write.c b/libs/kfs/buffile-write.c
index a22dd5f..1d46ce9 100644
--- a/libs/kfs/buffile-write.c
+++ b/libs/kfs/buffile-write.c
@@ -284,7 +284,7 @@ rc_t KBufWriteFileMake ( KBufWriteFile ** bp, const KFile *f, size_t bsize,
else
{
memset ( buf, 0, sizeof * buf );
- rc = KFileInit ( & buf -> dad, vt, read_enabled, write_enabled );
+ rc = KFileInit ( & buf -> dad, vt, "KBufWriteFile", "no-name", read_enabled, write_enabled );
if ( rc == 0 )
{
rc = KFileAddRef ( f );
@@ -332,7 +332,7 @@ const KFile_vt_v1 vtKBufWriteFileRandWR_v1 =
KBufWriteFileType
};
-rc_t KBufWriteFileMakeWrite ( KFile ** bp, KFile * original, size_t bsize )
+LIB_EXPORT rc_t KBufWriteFileMakeWrite ( KFile ** bp, KFile * original, size_t bsize )
{
rc_t rc;
diff --git a/libs/kfs/buffile.c b/libs/kfs/buffile.c
index 220ee04..ecff70c 100644
--- a/libs/kfs/buffile.c
+++ b/libs/kfs/buffile.c
@@ -396,7 +396,7 @@ rc_t KBufFileMake ( KBufFile ** bp, const KFile_vt *vt,
rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
else
{
- rc = KFileInit ( & buf -> dad, vt, read_enabled, write_enabled );
+ rc = KFileInit ( & buf -> dad, vt, "KBufFile", "no-name", read_enabled, write_enabled );
if ( rc == 0 )
{
rc = KFileAddRef ( f );
diff --git a/libs/kfs/bzip.c b/libs/kfs/bzip.c
index 2adacf7..4fe4362 100644
--- a/libs/kfs/bzip.c
+++ b/libs/kfs/bzip.c
@@ -48,8 +48,8 @@ struct KBZipFile;
#endif
#define BZIP_DBGSTREAM(strm,msg) \
- BZIP_DEBUG(("%s: bz_stream (%p) %.35s\nnext_in %14zu " \
- "avail_in %6u total_in %10lu next_out %14zu " \
+ BZIP_DEBUG(("%s: bz_stream (%p) %.35s\nnext_in %p " \
+ "avail_in %6u total_in %10lu next_out %p " \
"avail_out %6u total_out %10lu\n", \
__func__, strm, msg, \
strm->next_in, strm->avail_in, \
@@ -213,7 +213,7 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
size_t tot_read = 0;
rc_t rc = 0;
- BZIP_DEBUG (("%s: Enter requesting bsize %lu\n", __func__, bsize));
+ BZIP_DEBUG (("---------------\n%s: Enter requesting bsize %lu\n", __func__, bsize));
strm = &self->strm;
@@ -222,6 +222,11 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
char * this_out;
size_t src_read;
int zret;
+ bool bin;
+ bool bout;
+ bool end;
+
+ bin = (strm->avail_in != 0);
BZIP_DEBUG (("%s: loop start tot_read %zu\n", __func__, tot_read));
@@ -283,7 +288,9 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
case BZ_STREAM_END:
BZIP_DEBUG (("%s: BZ_STREAM_END\n", __func__));
+ end = true;
num_read = strm->next_out - this_out;
+ bout = (num_read != 0);
BZIP_DEBUG (("%s: num_read %zu\n", __func__, num_read));
self->completed = true;
BZIP_DBGSTREAM (strm, "before BZ2_bzDecompressEnd");
@@ -316,7 +323,9 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
case BZ_OK:
BZIP_DEBUG (("%s: BZ_OK\n", __func__));
+ end = false;
num_read = strm->next_out - this_out;
+ bout = (num_read != 0);
BZIP_DEBUG (("%s: num_read %zu\n", __func__, num_read));
read_more:
@@ -328,9 +337,17 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
sizeof self->buff, &src_read);
if (rc)
return rc;
+
+ BZIP_DEBUG (("%s: KFileRead read %u\n", __func__, src_read));
+
if (src_read == 0)
+ {
+ BZIP_DEBUG (("%s: end %u in %u out %u\n", __func__, end, bin, bout));
+
+ if (!end && bin && !bout)
+ rc = RC (rcFS, rcFile, rcReading, rcData, rcInsufficient);
goto done;
-
+ }
strm->avail_in = src_read;
self->filePosition += src_read;
strm->next_in = self->buff;
@@ -348,7 +365,7 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
BZIP_DEBUG (("%s: loop end tot_read %zu\n", __func__, tot_read));
}
done:
- BZIP_DEBUG (("%s: returning tot_read %zu\n", __func__, tot_read));
+ BZIP_DEBUG (("%s: returning tot_read %zu\n\n\n", __func__, tot_read));
*pnumread = tot_read;
return rc;
}
@@ -368,7 +385,7 @@ static rc_t KBZipFileReadSeek (KBZipFile *self, uint64_t pos)
BZIP_DEBUG(("%s: call KBZipFileReadInt to_read %zu \n",__func__));
- rc = KBZipFileReadInt ( self, buff, to_read, &num_read );
+ rc = KBZipFileReadInt ( self, buff, to_read, &num_read);
BZIP_DEBUG(("%s: return KBZipFileReadInt num_read %zu \n",__func__));
@@ -377,7 +394,6 @@ static rc_t KBZipFileReadSeek (KBZipFile *self, uint64_t pos)
if (num_read == 0)
break;
-
}
return rc;
}
@@ -681,7 +697,7 @@ LIB_EXPORT rc_t CC KFileMakeBzip2ForRead (const struct KFile **pnew_obj,
else
{
rc = KFileInit(&obj->dad, (const KFile_vt*) &KBZipFile_vt_v1,
- true, false);
+ "KBZipFile", "no-name", true, false);
if (rc == 0)
{
bz_stream * strm;
@@ -762,7 +778,7 @@ LIB_EXPORT rc_t CC KFileMakeBzip2ForWrite (struct KFile **pnew_obj,
else
{
rc = KFileInit(&obj->dad, (const KFile_vt*)&KBZipFile_vt_v1,
- false, true);
+ "KBZipFile", "no-name", false, true);
if (rc == 0)
{
bz_stream* strm;
diff --git a/libs/kfs/cacheteefile.c b/libs/kfs/cacheteefile.c
new file mode 100644
index 0000000..791e7ca
--- /dev/null
+++ b/libs/kfs/cacheteefile.c
@@ -0,0 +1,1689 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <kfs/extern.h>
+
+struct KCacheTeeFile;
+#define KFILE_IMPL struct KCacheTeeFile
+#include <kfs/impl.h>
+#include <kfs/lockfile.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/checksum.h>
+
+#include <kfs/cacheteefile.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------
+ layout of local file:
+
+ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MMMMMMMMMMMMMM SS BB
+
+ C ... file content in valid/invalid blocks
+ M ... bitmap of blocks bytes = ( ( ( content-size / block-size ) + 1 ) / 8 ) + 1 )
+ S ... size of content ( uint64_t ) 8 bytes
+ B ... used blocksize ( uint32_t ) 4 bytes
+ */
+
+
+/*--------------------------------------------------------------------------
+ * KCacheTeeFile
+ */
+
+#define CACHE_TEE_DEFAULT_BLOCKSIZE ( 32 * 1024 )
+#define CACHE_TEE_REPORT 0
+
+typedef struct KCacheTeeFile
+{
+ KFile dad;
+ const KFile * remote;
+ KFile * local;
+ KFile * logger;
+ KDirectory * dir;
+ KLockFile * lock;
+
+ uint8_t * bitmap;
+ uint8_t * scratch_buffer;
+
+ uint64_t remote_size;
+ uint64_t local_size;
+ uint64_t block_count;
+ uint64_t log_file_pos;
+ uint64_t first_block_in_scratch;
+
+ /* size_t */ uint64_t bitmap_bytes;
+ /* size_t */ uint64_t scratch_size;
+ /* size_t */ uint64_t valid_scratch_bytes;
+ uint32_t block_size;
+ uint32_t cluster_factor;
+ bool fully_in_cache;
+ bool report;
+ bool local_read_only;
+ char local_path [ 1 ];
+} KCacheTeeFile;
+
+
+const uint8_t BitNr2Mask[ 8 ] =
+{
+ /* 0 1 2 3 4 5 6 7 */
+ 1, 2, 4, 8, 16, 32, 64, 128
+};
+
+#define IS_CACHE_BIT( CacheFile, Block_Nr ) ( CacheFile->bitmap[ (Block_Nr) >> 3 ] & BitNr2Mask[ (Block_Nr) & 7 ] ) > 0
+
+#define IS_BITMAP_BIT( BitMap, Block_Nr ) ( BitMap[ (Block_Nr) >> 3 ] & BitNr2Mask[ (Block_Nr) & 7 ] ) > 0
+
+#define BITS_2_BYTES( BitCount ) ( ( ( BitCount ) + 7 ) >> 3 )
+
+#define SIZE_2_BLOCK_COUNT( Number_Of_Bytes, Block_Size ) ( ( ( Number_Of_Bytes ) + ( Block_Size ) - 1 ) / ( Block_Size ) )
+
+
+static rc_t calculate_local_size_from_remote_size( KCacheTeeFile *self )
+{
+ rc_t rc = 0;
+ if ( self->block_size > 0 )
+ {
+ self->block_count = SIZE_2_BLOCK_COUNT( self->remote_size, self->block_size );
+ self->bitmap_bytes = BITS_2_BYTES( self->block_count );
+ self->local_size = ( self->remote_size +
+ self->bitmap_bytes +
+ sizeof self->remote_size +
+ sizeof self->block_size );
+ }
+ else
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+ LOGERR( klogErr, rc, "div by zero attempt in calculating local size" );
+ }
+ return rc;
+}
+
+
+static rc_t create_bitmap_buffer( uint8_t ** bitmap, /* size_t */ uint64_t bitmap_bytes )
+{
+ rc_t rc = 0;
+ *bitmap = calloc ( sizeof **bitmap, bitmap_bytes );
+ if ( *bitmap == NULL )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+ LOGERR( klogErr, rc, "init local bitmap-area" );
+ }
+ return rc;
+}
+
+static rc_t create_bitmap( KCacheTeeFile *self )
+{
+ return create_bitmap_buffer( &self->bitmap, self->bitmap_bytes );
+}
+
+
+static bool is_bitmap_full( const uint8_t * bitmap, /* size_t */ uint64_t bitmap_bytes, uint64_t block_count )
+{
+ /* size_t */ uint64_t bitmap_byte = 0;
+ while( bitmap_byte < ( bitmap_bytes - 1 ) )
+ {
+ if ( bitmap[ bitmap_byte++ ] != 0xFF )
+ return false;
+ }
+ {
+ uint64_t block_id = ( bitmap_byte << 3 );
+ while ( block_id < block_count )
+ {
+ bool block_cached = IS_BITMAP_BIT( bitmap, block_id );
+ if ( !block_cached )
+ return false;
+ ++block_id;
+ }
+ }
+ return true;
+}
+
+
+static void report( const KCacheTeeFile * cf )
+{
+ OUTMSG(( "log : %s\n", cf -> logger != NULL ? "YES" : "NO" ));
+ OUTMSG(( "size : local=%,lu remote=%,lu\n", cf -> local_size, cf -> remote_size ));
+ OUTMSG(( "block: size=%,u count=%,u\n", cf -> block_size, cf -> block_count ));
+ OUTMSG(( "bitmp: bytes=%,u\n", cf -> bitmap_bytes ));
+ OUTMSG(( "fully: %s\n", cf -> fully_in_cache ? "YES" : "NO" ));
+}
+
+
+static rc_t init_new_local_file( KCacheTeeFile * cf )
+{
+ rc_t rc = create_bitmap( cf );
+ cf->fully_in_cache = false;
+ if ( rc == 0 )
+ {
+ size_t written;
+ uint64_t pos = cf -> remote_size;
+ /* write the bitmap ( zero'd out ) into the local file */
+ rc = KFileWriteAll ( cf -> local, pos,
+ cf -> bitmap, cf -> bitmap_bytes, &written );
+ if ( rc == 0 && written != cf -> bitmap_bytes )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+ LOGERR( klogErr, rc, "no full initialization of local file bitmap" );
+ }
+ if ( rc == 0 && cf->report )
+ {
+ OUTMSG(( "init new cachefile: %u bytes of bitmaps written at pos %lu\n", written, pos ));
+ }
+
+ /* write the remote-file-size into the local file ( uint64_t = 8 bytes )*/
+ if ( rc == 0 )
+ {
+ pos += cf -> bitmap_bytes;
+ rc = KFileWriteAll ( cf -> local, pos,
+ &cf -> remote_size, sizeof( cf -> remote_size ), &written );
+ if ( rc == 0 && written != sizeof( cf -> remote_size ) )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+ LOGERR( klogErr, rc, "cannot write remote-filesize into local file" );
+ }
+ }
+ if ( rc == 0 && cf->report )
+ {
+ OUTMSG(( "init new cachefile: %u bytes of remote size written at pos %lu ( remote-size = %lu )\n", written, pos, cf->remote_size ));
+ }
+
+ /* write the block-size into the local file ( size_t = 4 bytes )*/
+ if ( rc == 0 )
+ {
+ pos += sizeof( cf -> remote_size );
+ rc = KFileWriteAll ( cf -> local, pos,
+ &cf -> block_size, sizeof( cf -> block_size ), &written );
+ if ( rc == 0 && written != sizeof( cf -> block_size ) )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+ LOGERR( klogErr, rc, "cannot write block-size into local file" );
+ }
+ }
+ if ( rc == 0 && cf->report )
+ {
+ OUTMSG(( "init new cachefile: %u bytes of block_size written at pos %lu ( block-size = %lu )\n", written, pos, cf->block_size ));
+ }
+
+ }
+ if ( rc == 0 && cf -> report )
+ report( cf );
+ return rc;
+}
+
+
+static rc_t read_block_size( const struct KFile * self, uint64_t local_size, uint32_t *block_size, bool silent )
+{
+ size_t num_read;
+ uint64_t pos = local_size - ( sizeof *block_size );
+ /* read the block-size, compare to the requested block-size */
+ rc_t rc = KFileRead( self, pos, block_size, sizeof *block_size, &num_read );
+ if ( rc != 0 )
+ {
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "cannot read block-size from local file" );
+ }
+ }
+ else if ( num_read != sizeof *block_size )
+ {
+ rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "cannot read block-size from local file" );
+ }
+ }
+ if ( rc == 0 && *block_size == 0 )
+ {
+ rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "block-size read from local file is zero" );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t read_content_size( const struct KFile * self, uint64_t local_size, uint64_t *content_size, bool silent )
+{
+ size_t num_read;
+ uint64_t pos = ( local_size - 4 ) - sizeof( *content_size );
+ rc_t rc = KFileRead ( self, pos, content_size, sizeof *content_size, &num_read );
+ if ( rc != 0 )
+ {
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "cannot read content-size from local file" );
+ }
+ }
+ else if ( num_read != sizeof *content_size )
+ {
+ rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "cannot read content-size from local file" );
+ }
+ }
+ if ( rc == 0 && *content_size == 0 )
+ {
+ rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "content-size read from local file is zero" );
+ }
+ }
+ if ( rc == 0 && *content_size >= local_size )
+ {
+ rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "content-size read from local file is invalid" );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t verify_file_structure( const uint64_t local_size, const uint32_t block_size, const uint64_t content_size,
+ uint64_t * block_count, /* size_t */ uint64_t * bitmap_bytes, bool silent )
+{
+ rc_t rc = 0;
+ uint64_t expected_size;
+
+ *block_count = SIZE_2_BLOCK_COUNT( content_size, block_size );
+ *bitmap_bytes = BITS_2_BYTES( *block_count );
+
+ /* check if the values 'content-size' and 'block_size' result in the currect real file size */
+ expected_size = content_size + *bitmap_bytes + sizeof ( local_size ) + sizeof ( block_size );
+ if ( expected_size != local_size )
+ {
+ rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "content-size/blocksize do not make sense for this file" );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t verify_existing_local_file( KCacheTeeFile * cf, bool silent )
+{
+ /* size_t */ uint64_t bitmap_bytes;
+ uint32_t block_size;
+ uint64_t content_size, block_count;
+
+ rc_t rc = read_block_size ( cf -> local, cf -> local_size, &block_size, silent );
+ /* read content-size, compare to the content-size of the remote file */
+ if ( rc == 0 )
+ rc = read_content_size ( cf -> local, cf -> local_size, &content_size, silent );
+
+ if ( rc == 0 && content_size != cf -> remote_size )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+ PLOGERR( klogErr, ( klogErr, rc, "content-size in local file $(ls) does not match size of remote file $(rs)",
+ "ls=%lu,rs=%lu", content_size, cf -> remote_size ) );
+ }
+
+ /* check if the local file has the right size ( content + bitmap + content_size + block_size )*/
+ if ( rc == 0 )
+ rc = verify_file_structure ( cf -> local_size, block_size, content_size, &block_count, &bitmap_bytes, silent );
+
+ /* check if the requested block-size equals the stored block-size */
+ if ( rc == 0 )
+ {
+ if ( cf -> block_size == 0 )
+ cf -> block_size = CACHE_TEE_DEFAULT_BLOCKSIZE;
+ if ( cf -> block_size != block_size )
+ {
+ PLOGMSG( klogWarn, ( klogWarn, "block-size in local file $(ls) does not match requested value $(rv)",
+ "ls=%u,rv=%u", block_size, cf -> block_size ) );
+ }
+ /* use the block-size as stored in the file */
+ cf -> block_size = block_size;
+ cf -> block_count = block_count;
+ cf -> bitmap_bytes = bitmap_bytes;
+ rc = create_bitmap( cf );
+ }
+
+ /* read the bitmap into the memory ... */
+ if ( rc == 0 )
+ {
+ size_t num_read;
+ /* read the bitmap from the local file */
+ rc = KFileReadAll ( cf -> local, content_size,
+ cf -> bitmap, cf -> bitmap_bytes, &num_read );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "cannot read bitmap from local file" );
+ }
+ else if ( num_read != cf -> bitmap_bytes )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+ PLOGERR( klogErr, ( klogErr, rc, "cannot read $(ls) bitmap-bytes from local file, read $(rs) instead",
+ "ls=%lu,rs=%lu", cf -> bitmap_bytes, num_read ));
+ }
+ }
+
+ /* check if we have the whole remote file in cache */
+ if ( rc == 0 )
+ cf -> fully_in_cache = is_bitmap_full( cf -> bitmap, cf -> bitmap_bytes, cf -> block_count );
+
+ if ( rc == 0 && cf -> report )
+ report( cf );
+
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC IsCacheFileComplete( const struct KFile * self, bool * is_complete, bool silent )
+{
+ rc_t rc;
+ if ( self == NULL )
+ rc = RC( rcFS, rcFile, rcValidating, rcSelf, rcNull );
+ else if ( is_complete == NULL )
+ rc = RC( rcFS, rcFile, rcValidating, rcParam, rcNull );
+ else
+ {
+ uint64_t local_size;
+ *is_complete = false;
+ rc = KFileSize( self, &local_size );
+ if ( rc != 0 )
+ {
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "cannot detect filesize when checking if cached file is complete" );
+ }
+ }
+ /* TODO: need to do a better constant tha a magic number */
+ else if (local_size < 13)
+ {
+ rc = RC ( rcFS, rcFile, rcValidating, rcSize, rcInsufficient );
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "cannot use filesize of zero when checking if cached file is complete" );
+ }
+ }
+ else
+ {
+ uint32_t block_size;
+ rc = read_block_size( self, local_size, &block_size, silent );
+ if ( rc == 0 )
+ {
+ uint64_t content_size;
+
+ rc = read_content_size( self, local_size, &content_size, silent );
+ /* create bitmap buffer */
+ if ( rc == 0 )
+ {
+ uint64_t block_count;
+ /* size_t */ uint64_t bitmap_bytes;
+ rc = verify_file_structure( local_size, block_size, content_size, &block_count, &bitmap_bytes, silent );
+ if ( rc == 0 )
+ {
+ uint8_t * bitmap = NULL;
+ rc = create_bitmap_buffer( &bitmap, bitmap_bytes );
+ if ( rc == 0 )
+ {
+ size_t num_read;
+ /* read the bitmap into the memory ... */
+ rc = KFileReadAll ( self, content_size, bitmap, bitmap_bytes, &num_read );
+ if ( rc != 0 )
+ {
+ if ( !silent )
+ LOGERR( klogErr, rc, "cannot read bitmap from local file" );
+ }
+ else if ( num_read != bitmap_bytes )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+ if ( !silent )
+ {
+ PLOGERR( klogErr, ( klogErr, rc, "cannot read $(ls) bitmap-bytes from local file, read $(rs) instead",
+ "ls=%lu,rs=%lu", bitmap_bytes, num_read ));
+ }
+ }
+ }
+ if ( rc == 0 )
+ *is_complete = is_bitmap_full( bitmap, bitmap_bytes, block_count );
+
+ if ( bitmap != NULL )
+ free( bitmap );
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC TruncateCacheFile( struct KFile * self )
+{
+ rc_t rc;
+ if ( self == NULL )
+ rc = RC( rcFS, rcFile, rcResizing, rcSelf, rcNull );
+ else
+ {
+ uint64_t local_size;
+ rc = KFileSize( self, &local_size );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "cannot detect filesize when truncating cached file" );
+ }
+ else
+ {
+ uint32_t block_size;
+ rc = read_block_size( self, local_size, &block_size, false );
+ if ( rc == 0 )
+ {
+ uint64_t content_size;
+ rc = read_content_size( self, local_size, &content_size, false );
+ if ( rc == 0 )
+ {
+ uint64_t block_count;
+ /* size_t */ uint64_t bitmap_bytes;
+ rc = verify_file_structure( local_size, block_size, content_size, &block_count, &bitmap_bytes, false );
+
+ /* truncate the file by setting the new (shorter) filesize */
+ if ( rc == 0 )
+ rc = KFileSetSize( self, content_size );
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t promote_cache( KCacheTeeFile * cf )
+{
+ char cache_file_name [ 4096 ];
+ char temp_file_name [ 4096 ];
+ size_t num_writ;
+ rc_t rc = string_printf ( cache_file_name, sizeof cache_file_name, &num_writ, "%s.cache", cf -> local_path );
+ if ( rc == 0 )
+ rc = string_printf ( temp_file_name, sizeof temp_file_name, &num_writ, "%s.cache.temp", cf -> local_path );
+
+ /* (1) releaes open cache file ( windows cannot rename open files ) */
+ if ( rc == 0 )
+ rc = KFileRelease( cf -> local );
+
+ /* (2) rename to temporary name */
+ if ( rc == 0 )
+ {
+ cf -> local = NULL;
+ rc = KDirectoryRename ( cf -> dir, true, cache_file_name, temp_file_name );
+ }
+
+ /* (3) open from temporary name */
+ if ( rc == 0 )
+ rc = KDirectoryOpenFileWrite( cf -> dir, &cf -> local, true, "%s", temp_file_name );
+
+ /* (4) perform truncation */
+ if ( rc == 0 )
+ rc = TruncateCacheFile( cf -> local );
+
+ /* (5) releaes open temp. cache file ( windows cannot rename open files ) */
+ if ( rc == 0 )
+ rc = KFileRelease( cf -> local );
+
+ /* (6) rename to final filename ( windows cannot rename open files ) */
+ if ( rc == 0 )
+ {
+ cf -> local = NULL;
+ rc = KDirectoryRename ( cf -> dir, true, temp_file_name, cf -> local_path );
+ }
+
+ /* (6) open from final filename */
+ if ( rc == 0 )
+ rc = KDirectoryOpenFileWrite( cf -> dir, &cf -> local, true, "%s", cf -> local_path );
+
+ return rc;
+}
+
+
+/* Destroy
+ */
+static rc_t CC KCacheTeeFileDestroy( KCacheTeeFile *self )
+{
+ if ( self->report )
+ {
+ OUTMSG(( "\nDESTROY cacheteefile '%s'\n\n", self -> local_path ));
+ }
+
+ if ( !self -> local_read_only && self -> lock != NULL )
+ {
+ rc_t rc = IsCacheFileComplete ( self -> local, &self -> fully_in_cache, false );
+ if ( rc == 0 && self -> fully_in_cache )
+ {
+ if ( self->report )
+ {
+ OUTMSG(( "\nPROMOTING cacheteefile '%s'\n\n", self -> local_path ));
+ }
+ promote_cache( self );
+ }
+ }
+
+ if ( self->bitmap != NULL )
+ free( self->bitmap );
+ if ( self->scratch_buffer != NULL )
+ free( self->scratch_buffer );
+
+ KDirectoryRelease ( self->dir );
+ KFileRelease ( self -> remote );
+ KFileRelease ( self -> local );
+ KLockFileRelease ( self -> lock );
+ KFileRelease ( self -> logger );
+
+ free ( self );
+ return 0;
+}
+
+
+
+static rc_t log_to_file( KFile *log, uint64_t *log_file_pos,
+ uint64_t pos, size_t bsize, size_t num_read )
+{
+ char buffer[ 1024 ];
+ size_t printf_written;
+ rc_t rc = string_printf( buffer, sizeof buffer, &printf_written,
+ "READ at %lu.%u read = %u\n",
+ pos, bsize, num_read );
+ if ( rc == 0 )
+ {
+ size_t log_written;
+ rc = KFileWriteAll ( log, *log_file_pos, buffer, printf_written, &log_written );
+ if ( rc == 0 )
+ *log_file_pos += log_written;
+ }
+ return rc;
+}
+
+
+static void set_bitmap( const KCacheTeeFile *cself, uint64_t start_block, uint64_t block_count )
+{
+ uint64_t block_idx, block_nr;
+ for ( block_idx = 0, block_nr = start_block;
+ block_idx < block_count;
+ ++block_idx, ++block_nr )
+ {
+ cself->bitmap[ block_nr >> 3 ] |= BitNr2Mask[ block_nr & 0x07 ];
+ }
+}
+
+
+static rc_t write_bitmap( const KCacheTeeFile *cself, uint64_t start_block, uint64_t block_count )
+{
+ size_t written;
+ uint32_t start_block_byte = ( start_block >> 3 );
+ uint32_t end_block_byte = ( ( start_block + block_count - 1 ) >> 3 );
+ uint64_t pos = cself->remote_size + start_block_byte;
+ size_t to_write = ( end_block_byte - start_block_byte ) + 1;
+ rc_t rc = KFileWriteAll( cself->local, pos, &cself->bitmap[ start_block_byte ], to_write, &written );
+ if ( rc != 0 )
+ {
+ PLOGERR( klogErr, ( klogErr, rc, "cannot write local-file-bitmap block $(sb).$(cn)",
+ "sb=%lu,cn=%lu", start_block, block_count ) );
+ }
+ if ( rc == 0 && cself->report )
+ {
+ OUTMSG(( "writing bitmap: %u bytes written at pos %lu\n", written, pos ));
+ }
+
+ return rc;
+}
+
+
+static rc_t resize_scratch_buffer( const KCacheTeeFile *cself, /* size_t */ uint64_t new_size )
+{
+ rc_t rc = 0;
+ KCacheTeeFile *self = ( KCacheTeeFile * )cself;
+
+ /* create scratch-buffer or resize it if needed */
+ if ( self->scratch_size == 0 )
+ {
+ self->scratch_buffer = malloc( new_size );
+ if ( self->scratch_buffer == NULL )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+ else
+ self->scratch_size = new_size;
+ }
+ else if ( self->scratch_size < new_size )
+ {
+ uint8_t * tmp = realloc( self->scratch_buffer, new_size );
+ if ( tmp == NULL )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ self->scratch_buffer = tmp;
+ self->scratch_size = new_size;
+ }
+ }
+ return rc;
+}
+
+
+size_t check_rd_len( const KCacheTeeFile *cself, uint64_t pos, size_t bsize )
+{
+ size_t res = bsize;
+ uint64_t last_pos = pos;
+ last_pos += bsize;
+ if ( last_pos >= cself->remote_size )
+ {
+ if ( pos >= cself->remote_size )
+ res = 0;
+ else
+ res = ( cself->remote_size - pos );
+ }
+ return res;
+}
+
+
+static rc_t rd_remote_wr_local( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ rc_t rc = 0;
+ if ( bsize > 0 )
+ {
+ size_t bytes_read;
+ *num_read = 0;
+ rc = KFileReadAll( cself->remote, pos, buffer, bsize, &bytes_read );
+ if ( rc == 0 )
+ {
+ if ( cself->report )
+ {
+ OUTMSG(( "reading remote data: %u bytes read at pos %lu\n", bytes_read, pos ));
+ }
+
+ if ( cself->local_read_only )
+ {
+ *num_read = bytes_read;
+ }
+ else
+ {
+ rc = KFileWriteAll( cself->local, pos, buffer, bytes_read, num_read );
+ if ( rc == 0 && cself->report )
+ {
+ OUTMSG(( "writing local data: %u bytes written at pos %lu\n", *num_read, pos ));
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+#if 0
+static rc_t KCacheTeeFileRead_Starting_with_Cache_Hit( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read, uint64_t first_requested_block )
+{
+ rc_t rc = 0;
+ uint64_t t_pos, end_block, last_block = first_requested_block;
+ size_t to_read = check_rd_len( cself, pos, bsize );
+
+ if ( to_read == 0 )
+ return rc;
+
+ t_pos = pos + to_read - 1;
+ end_block = ( t_pos / cself->block_size );
+
+ /* the requested range starts with a cache-hit :
+ - detect the last block after this first hit, that is still in cache */
+ if ( end_block > first_requested_block )
+ {
+ while( ( last_block <= end_block ) && ( IS_CACHE_BIT( cself, last_block + 1 ) ) )
+ ++last_block;
+ }
+
+ /* if not the whole requested range is a cache-hit: reduce to_read */
+ if ( last_block < end_block )
+/* to_read = ( ( ( ( last_block + 1 ) * cself->block_size ) - 1 ) - pos ); */
+ to_read = ( ( ( last_block + 1 ) * cself->block_size ) - pos );
+ assert( to_read <= bsize );
+
+ if ( cself->report )
+ OUTMSG(( "RD LOCAL: %,lu.%,lu\n", pos, to_read ));
+
+ /* now read it from the local file into the user-supplied buffer */
+ if ( to_read > 0 )
+ rc = KFileReadAll( cself->local, pos, buffer, to_read, num_read );
+
+ return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_Block_Aligned_Cache_Miss( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read, uint64_t first_requested_block )
+{
+ rc_t rc;
+ /* we are block-aligned ! */
+ uint64_t block_count = ( bsize / cself->block_size );
+ if ( cself->report )
+ OUTMSG(( "RD REMOTE (block aligned): %,lu.%,lu (%,lu blocks)\n", pos, bsize, block_count ));
+ rc = rd_remote_wr_local( cself, pos, buffer, bsize, num_read );
+ if ( rc == 0 && !cself->local_read_only )
+ {
+ set_bitmap( cself, first_requested_block, block_count );
+ rc = write_bitmap( cself, first_requested_block, block_count );
+ }
+ if ( rc == 0 && cself->cluster_factor > 1 )
+ {
+ size_t over_read_size = cself->cluster_factor * cself->block_size;
+ rc = resize_scratch_buffer( cself, over_read_size );
+ if ( rc == 0 )
+ {
+ size_t tmp_read;
+ uint64_t r_pos = pos + bsize;
+ rc = rd_remote_wr_local( cself, r_pos, cself->scratch_buffer, over_read_size, &tmp_read );
+ if ( rc == 0 && !cself->local_read_only )
+ {
+ set_bitmap( cself, first_requested_block + block_count, cself->cluster_factor );
+ rc = write_bitmap( cself, first_requested_block + block_count, cself->cluster_factor );
+ }
+ }
+ }
+ return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_Starting_with_Cache_Miss_small( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t to_read, size_t *num_read,
+ uint64_t first_requested_block, uint64_t last_cache_miss_block )
+{
+ rc_t rc = 0;
+ uint64_t t_pos, block_count;
+ size_t t_len, processed;
+
+ /* we are not block-aligned, and the request is smaller than 1 block in size ! */
+ if ( cself->report )
+ OUTMSG(( "RD REMOTE (small) : %,lu.%,lu\n", pos, to_read ));
+
+ /* that means we request 1 or 2 blocks of memory from our scratch-buffer ... */
+ t_pos = ( first_requested_block * cself->block_size );
+ block_count = ( ( last_cache_miss_block - first_requested_block ) + 1 );
+ t_len = ( block_count * cself->block_size );
+ rc = resize_scratch_buffer( cself, t_len );
+
+ if ( cself->report )
+ OUTMSG(( "RD REMOTE (small) : from <%,lu> %,lu blocks\n", t_pos, block_count ));
+
+ assert( to_read <= t_len );
+
+ /* we read that from remote, write it local and set the bitmap */
+ if ( rc == 0 )
+ {
+ rc = rd_remote_wr_local( cself, t_pos, cself->scratch_buffer, t_len, &processed );
+ if ( rc == 0 && !cself->local_read_only )
+ {
+ set_bitmap( cself, first_requested_block, block_count );
+ rc = write_bitmap( cself, first_requested_block, block_count );
+ }
+ }
+
+ /* then we copy the requested amount out of the scratch-buffer */
+ if ( rc == 0 )
+ {
+ memcpy( buffer, &( cself->scratch_buffer[ pos - t_pos ] ), to_read );
+ *num_read = to_read;
+ }
+ return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_Starting_with_Cache_Miss_large( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t to_read, size_t *num_read,
+ uint64_t first_requested_block, uint64_t last_cache_miss_block )
+{
+ rc_t rc = 0;
+ uint64_t t_pos;
+ int64_t t_len;
+ size_t processed;
+
+ /* we are not block-aligned ! */
+ if ( cself->report )
+ OUTMSG(( "RD REMOTE (large) : %,lu.%,lu\n", pos, to_read ));
+
+ /* THERE IS AN EVENTUAL PRE-READ if pos is not block-aligned, using the user-supplied buffer */
+ t_pos = ( first_requested_block * cself->block_size );
+ if ( t_pos < pos )
+ {
+ t_len = ( pos - t_pos );
+ if ( cself->report )
+ OUTMSG(( "PRE : %,lu.%,lu\n", t_pos, t_len ));
+
+ assert( t_len < bsize );
+ rc = rd_remote_wr_local( cself, t_pos, buffer, t_len, &processed );
+ }
+
+ if ( rc == 0 )
+ {
+ /* THERE IS AN EVENTUAL POST-READ if pos + to_read is not block-aligned */
+ uint64_t last_pos = ( last_cache_miss_block + 1 ) * cself->block_size;
+ t_pos = pos + processed;
+ if ( last_pos > t_pos )
+ {
+ t_len = ( last_pos - t_pos );
+ if ( cself->report )
+ OUTMSG(( "POST: %,lu.%,lu\n", t_pos, t_len ));
+ if ( t_len <= bsize )
+ rc = rd_remote_wr_local( cself, t_pos, buffer, t_len, &processed );
+ }
+
+ if ( rc == 0 )
+ {
+ /* finally we read what was requested, into the user-supplied buffer */
+ if ( cself->report )
+ OUTMSG(( "MAIN: %,lu.%,lu\n", pos, to_read ));
+
+ rc = rd_remote_wr_local( cself, pos, buffer, to_read, num_read );
+ if ( rc == 0 && !cself->local_read_only )
+ {
+ uint64_t block_count = ( last_cache_miss_block - first_requested_block ) + 1;
+ set_bitmap( cself, first_requested_block, block_count );
+ rc = write_bitmap( cself, first_requested_block, block_count );
+ }
+ }
+ }
+ return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_Starting_with_Cache_Miss( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read, uint64_t first_requested_block )
+{
+ rc_t rc = 0;
+ size_t to_read = check_rd_len( cself, pos, bsize );
+ uint64_t end_pos = pos + to_read;
+ uint64_t last_requested_block = ( end_pos / cself->block_size );
+ uint64_t last_cache_miss_block = first_requested_block;
+
+ if ( to_read == 0 )
+ return rc;
+
+ assert( to_read <= bsize );
+
+ /* detect the last block after this first miss, that is still not in cache */
+ while( last_cache_miss_block <= last_requested_block &&
+ !( IS_CACHE_BIT( cself, last_cache_miss_block ) ) )
+ {
+ ++last_cache_miss_block;
+ }
+
+ if ( cself->report )
+ OUTMSG(( "CACHE-MISS from block #%,lu to #%,lu (end-block #%,lu)\n",
+ first_requested_block, last_cache_miss_block, last_requested_block ));
+
+ /* check if the request is aligned to our block */
+ if ( ( pos == ( first_requested_block * cself->block_size ) ) &&
+ ( ( to_read % cself->block_size ) == 0 ) )
+ {
+ /* we are block-aligned ! */
+ rc = KCacheTeeFileRead_Block_Aligned_Cache_Miss( cself, pos, buffer, to_read, num_read, first_requested_block );
+ }
+ else
+ {
+ if ( to_read < cself->block_size )
+ {
+ rc = KCacheTeeFileRead_Starting_with_Cache_Miss_small( cself, pos, buffer, bsize, to_read, num_read,
+ first_requested_block, last_cache_miss_block );
+ }
+ else
+ {
+ rc = KCacheTeeFileRead_Starting_with_Cache_Miss_large( cself, pos, buffer, bsize, to_read, num_read,
+ first_requested_block, last_cache_miss_block );
+ }
+ }
+ return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_clustered( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ rc_t rc;
+ size_t l_num_read = 0;
+ uint64_t first_requested_block = ( pos / cself->block_size );
+
+ if ( num_read != NULL )
+ *num_read = 0;
+
+ if ( cself->report )
+ OUTMSG(( "\nREQUEST: %,lu .[ %,lu ] ( first_requested_block=%,lu )\n", pos, bsize, first_requested_block ));
+
+ if ( IS_CACHE_BIT( cself, first_requested_block ) )
+ {
+ rc = KCacheTeeFileRead_Starting_with_Cache_Hit( cself, pos, buffer, bsize, &l_num_read, first_requested_block );
+ }
+ else
+ {
+ rc = KCacheTeeFileRead_Starting_with_Cache_Miss( cself, pos, buffer, bsize, &l_num_read, first_requested_block );
+ }
+
+ if ( rc == 0 && num_read != NULL )
+ *num_read = l_num_read;
+
+ if ( cself->logger != NULL )
+ {
+ KCacheTeeFile * self = ( KCacheTeeFile * ) cself;
+ log_to_file( self->logger, &self->log_file_pos, pos, bsize, l_num_read );
+ }
+ return rc;
+}
+#endif
+
+static uint64_t calc_req_blocks( uint64_t pos, uint64_t first_req_block, size_t bsize, uint32_t block_size )
+{
+ uint64_t res, temp;
+
+ res = pos;
+ res += bsize;
+ temp = first_req_block;
+ temp *= block_size;
+ res -= temp;
+ res += block_size;
+ res--;
+ res /= block_size;
+
+/* res = ( ( ( pos + bsize ) - ( first_req_block * block_size ) + ( block_size - 1 ) ) / block_size ); */
+/* uint64_t req_blocks = ( ( ( pos + bsize - 1 ) / block_size ) - first_req_block ) + 1; */
+ return res;
+}
+
+static rc_t KCacheTeeFileRead_simple_cached( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read, uint64_t first_req_block )
+{
+ rc_t rc = 0;
+ bool found_in_scratch = false;
+ size_t to_read;
+ size_t block_count = 1;
+ uint64_t req_blocks = calc_req_blocks( pos, first_req_block, bsize, cself->block_size );
+
+ /* we read as much as we have from the local cache, forcing the caller
+ to eventually make another request ( the non-cached part of it ) afterwards */
+ if ( req_blocks > 1 )
+ {
+ /* detect how many blocks are in cache after the first_req_block */
+ uint64_t block = first_req_block;
+ block_count = 0;
+ do
+ {
+ block++;
+ block_count++;
+ }
+ while ( ( block_count < req_blocks ) && ( IS_CACHE_BIT( cself, block ) ) );
+ }
+
+ /* check if we eventually have the requested bytes in the scratch-buffer */
+ if ( cself -> first_block_in_scratch == first_req_block )
+ {
+ uint64_t first_pos_in_scratch = first_req_block;
+ first_pos_in_scratch *= cself->block_size;
+ if ( pos >= first_pos_in_scratch )
+ {
+ uint64_t last_pos_in_scratch = first_pos_in_scratch;
+ last_pos_in_scratch += cself -> valid_scratch_bytes;
+ found_in_scratch = ( pos < last_pos_in_scratch );
+ if ( found_in_scratch )
+ {
+ uint64_t available_in_scratch = ( last_pos_in_scratch - pos );
+ if ( bsize > available_in_scratch )
+ to_read = available_in_scratch;
+ else
+ to_read = bsize;
+
+ memmove ( buffer, &( cself->scratch_buffer[ pos - first_pos_in_scratch ] ), to_read );
+ *num_read = to_read;
+ }
+ }
+ }
+
+ if ( !found_in_scratch )
+ {
+ /* now we have to check how much of the request can be satisfied from the local file */
+ uint64_t reachable = first_req_block;
+ reachable += block_count;
+ reachable *= cself->block_size;
+ reachable -= pos;
+
+ /* are we requesting beyond the end of file? */
+ if ( reachable >= bsize )
+ to_read = check_rd_len( cself, pos, bsize );
+ else
+ to_read = check_rd_len( cself, pos, reachable );
+
+ rc = KFileReadAll( cself->local, pos, buffer, to_read, num_read );
+ }
+
+ return rc;
+}
+
+
+static rc_t KCacheTeeFileRead_simple_not_cached( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read, uint64_t first_req_block )
+{
+ rc_t rc;
+ size_t to_read_remote;
+ size_t block_count = 1;
+ uint64_t req_blocks = calc_req_blocks( pos, first_req_block, bsize, cself->block_size );
+
+ if ( req_blocks > 1 )
+ {
+ uint64_t block = first_req_block;
+ block_count = 0;
+ do
+ {
+ block++;
+ block_count++;
+ }
+ while ( ( block_count < req_blocks ) && ( !( IS_CACHE_BIT( cself, block ) ) ) );
+ }
+
+ to_read_remote = ( block_count * cself->block_size );
+ rc = resize_scratch_buffer( cself, to_read_remote );
+ if ( rc == 0 )
+ {
+ size_t l_num_read;
+ uint64_t block_start = first_req_block;
+ block_start *= cself->block_size;
+ to_read_remote = check_rd_len( cself, block_start, to_read_remote );
+ rc = rd_remote_wr_local( cself, block_start, cself->scratch_buffer, to_read_remote, &l_num_read );
+ if ( rc == 0 )
+ {
+ ( ( KCacheTeeFile * )cself ) -> first_block_in_scratch = first_req_block;
+ ( ( KCacheTeeFile * )cself ) -> valid_scratch_bytes = l_num_read;
+ if ( !cself->local_read_only )
+ {
+ set_bitmap( cself, first_req_block, block_count );
+ rc = write_bitmap( cself, first_req_block, block_count );
+ }
+ }
+ if ( rc == 0 )
+ {
+ /* what we have to return to the caller is somewhere in the scratch_buffer */
+ uint64_t offset = pos;
+ offset -= block_start;
+
+ /* how much we can copy depends on how much was not in cache,
+ and how much was requested in the first place... */
+ if ( l_num_read >= offset )
+ {
+ l_num_read -= offset;
+ if ( l_num_read > bsize )
+ l_num_read = bsize;
+ memmove ( buffer, &( cself->scratch_buffer[ offset ] ), l_num_read );
+ }
+ else
+ {
+ l_num_read = 0;
+ }
+ *num_read = l_num_read;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t KCacheTeeFileRead_simple( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ rc_t rc;
+ uint64_t first_req_block = pos;
+ first_req_block /= cself->block_size;
+
+ *num_read = 0;
+ if ( cself->report )
+ OUTMSG(( "\nREQUEST '%s': %,lu .[%,lu] ( first_req_block=%,lu )\n",
+ cself->local_path, pos, bsize, first_req_block ));
+
+ /* "simple" strategy, read only that much as requested... */
+ if ( IS_CACHE_BIT( cself, first_req_block ) )
+ {
+ rc = KCacheTeeFileRead_simple_cached( cself, pos, buffer, bsize, num_read, first_req_block );
+ }
+ else
+ {
+ rc = KCacheTeeFileRead_simple_not_cached( cself, pos, buffer, bsize, num_read, first_req_block );
+ }
+
+ if ( cself->logger != NULL )
+ {
+ KCacheTeeFile * self = ( KCacheTeeFile * ) cself;
+ log_to_file( self->logger, &self->log_file_pos, pos, bsize, *num_read );
+ }
+
+ return rc;
+}
+
+
+/**********************************************************************************************
+ START vt-functions
+**********************************************************************************************/
+
+static struct KSysFile* KCacheTeeFileGetSysFile( const KCacheTeeFile *self, uint64_t *offset )
+{
+ * offset = 0;
+ return NULL;
+}
+
+
+static rc_t KCacheTeeFileRandomAccess( const KCacheTeeFile *self )
+{
+ return 0;
+}
+
+
+static rc_t KCacheTeeFileSize( const KCacheTeeFile *self, uint64_t *size )
+{
+ *size = self->remote_size;
+ return 0;
+}
+
+
+static rc_t KCacheTeeFileSetSize( KCacheTeeFile *self, uint64_t size )
+{
+ return RC ( rcFS, rcFile, rcUpdating, rcFile, rcReadonly );
+}
+
+static rc_t KCacheTeeFileRead( const KCacheTeeFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ /*
+ if ( cself -> cluster_factor != 0 )
+ return KCacheTeeFileRead_clustered( cself, pos, buffer, bsize, num_read );
+ else
+ return KCacheTeeFileRead_simple( cself, pos, buffer, bsize, num_read );
+ */
+
+ return KCacheTeeFileRead_simple( cself, pos, buffer, bsize, num_read );
+}
+
+
+static rc_t KCacheTeeFileWrite( KCacheTeeFile *self, uint64_t pos,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ return RC ( rcFS, rcFile, rcUpdating, rcInterface, rcUnsupported );
+}
+
+/**********************************************************************************************
+ END vt-functions
+**********************************************************************************************/
+
+
+static KFile_vt_v1 vtKCacheTeeFile =
+{
+ /* version 1.0 */
+ 1, 0,
+
+ /* start minor version 0 methods */
+ KCacheTeeFileDestroy,
+ KCacheTeeFileGetSysFile,
+ KCacheTeeFileRandomAccess,
+ KCacheTeeFileSize,
+ KCacheTeeFileSetSize,
+ KCacheTeeFileRead,
+ KCacheTeeFileWrite
+ /* end minor version 0 methods */
+};
+
+
+static rc_t make_cache_tee( struct KDirectory *self, struct KFile const **tee,
+ struct KFile const *remote, struct KFile *local, struct KFile *logger, KLockFile *lock,
+ uint32_t blocksize, uint32_t cluster, bool report, const char *path )
+{
+ rc_t rc;
+ size_t path_size = string_size ( path );
+ KCacheTeeFile * cf = malloc ( sizeof * cf + path_size + 1 );
+ if ( cf == NULL )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ cf -> dir = self;
+ string_copy( cf -> local_path, path_size + 1, path, path_size );
+ cf -> remote = remote; /* store the file-objects but no AddRef()'s yet! */
+ cf -> local = local;
+ cf -> logger = logger;
+ cf -> lock = lock;
+ cf -> report = report;
+ cf -> cluster_factor = cluster;
+ cf -> local_read_only = !( local -> write_enabled );
+ cf -> block_size = ( blocksize > 0 ) ? blocksize : CACHE_TEE_DEFAULT_BLOCKSIZE;
+ cf -> bitmap = NULL;
+ cf -> scratch_buffer = NULL;
+ cf -> scratch_size = 0;
+ cf -> first_block_in_scratch = 0;
+ cf -> valid_scratch_bytes = 0;
+
+ rc = KFileSize( local, &cf -> local_size );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "cannot detect size of local file" );
+ }
+ else
+ {
+ rc = KFileSize( cf -> remote, &cf -> remote_size );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "cannot detect size of remote file" );
+ }
+ else
+ {
+ if ( cf -> local_size == 0 )
+ {
+ /* the local file was just created... */
+ if ( cf -> remote_size == 0 )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+ LOGERR( klogErr, rc, "size of remote file is zero" );
+ }
+ else
+ {
+ rc = calculate_local_size_from_remote_size( cf );
+ if ( rc == 0 )
+ {
+ rc = KFileSetSize ( cf -> local, cf -> local_size );
+ if ( rc == 0 )
+ {
+ rc = init_new_local_file( cf );
+ }
+ else
+ {
+ PLOGERR( klogInt, ( klogInt, rc, "cannot size local file to $(l) bytes", "l=%lu", cf->local_size ) );
+ }
+ }
+ }
+ }
+ else
+ rc = verify_existing_local_file( cf, false );
+ }
+
+ if ( rc == 0 && cf -> fully_in_cache && ! cf -> local_read_only && cf -> lock != NULL )
+ {
+ /* here is the up-front-test: the cache is complete and we have write access! */
+ rc = promote_cache( cf );
+ /*
+ if ( rc == 0 )
+ rc = KFileAddRef( cf -> local );
+ */
+ if ( rc == 0 )
+ {
+ *tee = cf -> local;
+ KLockFileRelease ( cf -> lock );
+ free ( cf );
+ return rc; /* here we return the truncated, promoted cache as tee-file ! */
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ if ( cf -> remote_size == 0 )
+ cf -> remote_size = cf -> local_size;
+
+ /* now we have to AddRef() everything we hang on until the final release! */
+ rc = KDirectoryAddRef ( cf -> dir );
+ if ( rc == 0 )
+ {
+ rc = KFileAddRef( cf -> remote );
+ if ( rc == 0 )
+ {
+ /* rc = KFileAddRef( cf -> local ); */
+ if ( rc == 0 )
+ {
+ if ( cf -> logger != NULL )
+ rc = KFileAddRef( cf -> logger );
+ if ( rc == 0 )
+ {
+ rc = KFileInit( &cf -> dad, (const union KFile_vt *)&vtKCacheTeeFile, "KCacheTeeFile", path, true, false );
+ if ( rc == 0 )
+ {
+ /* the wrapper is ready to use now! */
+ *tee = ( const KFile * ) &cf -> dad;
+ return 0;
+ }
+ else
+ {
+ LOGERR( klogErr, rc, "cannot initialize KFile-structure" );
+ KFileRelease( cf -> logger );
+ KFileRelease( cf -> local );
+ KFileRelease( cf -> remote );
+ KDirectoryRelease ( cf -> dir );
+ }
+ }
+ else
+ {
+ KFileRelease( cf -> local );
+ KFileRelease( cf -> remote );
+ KDirectoryRelease ( cf -> dir );
+ }
+ }
+ else
+ {
+ KFileRelease( cf -> remote );
+ KDirectoryRelease ( cf -> dir );
+ }
+ }
+ else
+ KDirectoryRelease ( cf -> dir );
+ }
+ }
+ }
+ free ( cf );
+ }
+ return rc;
+}
+
+
+static rc_t make_read_only_cache_tee( struct KDirectory *self,
+ struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+ uint32_t blocksize, uint32_t cluster, bool report, const char *path )
+{
+ const struct KFile * local;
+ rc_t rc = KDirectoryOpenFileRead( self, &local, "%s.cache", path );
+ if ( rc == 0 )
+ {
+ if ( report )
+ KOutMsg( "successfuly opened cache file '%s.cache' in read/only-mode\n",
+ path );
+ rc = make_cache_tee( self, tee, remote, ( struct KFile * )local, logger, NULL,
+ blocksize, cluster, report, path );
+ }
+ else
+ {
+ /* we cannot even open the local cache in read-only mode,
+ we give up - and return a reference to the remote file... */
+ rc = KFileAddRef( remote );
+ if ( rc == 0 )
+ {
+ if ( report )
+ KOutMsg( "cannot open cache file '%s.cache' in read/only-mode ( returning remote-file )\n",
+ path );
+ *tee = remote;
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryVMakeCacheTee ( struct KDirectory *self,
+ struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+ uint32_t blocksize, uint32_t cluster, bool report, const char *path, va_list args )
+{
+ rc_t rc;
+ if ( tee == NULL || remote == NULL )
+ rc = RC ( rcFS, rcFile, rcAllocating, rcParam, rcNull );
+ else
+ {
+ if ( self == NULL )
+ rc = RC ( rcFS, rcFile, rcAllocating, rcSelf, rcNull );
+ else if ( path == NULL )
+ rc = RC ( rcFS, rcFile, rcAllocating, rcPath, rcNull );
+ else if ( path [ 0 ] == 0 )
+ rc = RC ( rcFS, rcFile, rcAllocating, rcPath, rcEmpty );
+ else
+ {
+ char full [ 4096 ];
+
+#if CACHE_TEE_REPORT == 1
+ report = true;
+#endif
+
+ rc = KDirectoryVResolvePath ( self, false, full, sizeof full, path, args );
+ if ( rc != 0 )
+ {
+ PLOGERR( klogErr, ( klogErr, rc, "cannot resolve path of cache file '$(path)'",
+ "path=%s", full ) );
+ }
+ else
+ {
+ KLockFile *lock = NULL;
+
+ if ( report )
+ KOutMsg( "CREATE CacheTeeFile for '%s'\n", full );
+
+ rc = KDirectoryCreateLockFile ( self, &lock, "%s.cache.lock", full );
+ if ( rc == 0 )
+ {
+ /* it was possible to aquire the lock on the cache-file */
+ struct KFile * local;
+
+ if ( report )
+ KOutMsg( "successfuly aquired lockfile '%s.cache.lock'\n", full );
+
+
+ rc = KDirectoryOpenFileWrite( self, &local, true, "%s.cache", full );
+ if ( rc == 0 )
+ {
+ if ( report )
+ KOutMsg( "successfuly opened '%s.cache'\n", full );
+
+ /* we have the exclusive rd/wr access to the cache file !*/
+ rc = make_cache_tee( self, tee, remote, local, logger, lock,
+ blocksize, cluster, report, full );
+ }
+ else if ( GetRCState( rc ) == rcNotFound )
+ {
+ rc = KDirectoryCreateFile( self, &local, true, 0664, kcmOpen, "%s.cache", full );
+ if ( rc == 0 )
+ {
+ if ( report )
+ KOutMsg( "cache-file '%s.cache' created with rd/wr-access\n", full );
+ /* we have the exclusive rd/wr access to the cache file !*/
+ rc = make_cache_tee( self, tee, remote, local, logger, lock,
+ blocksize, cluster, report, full );
+ }
+ }
+ else
+ {
+ if ( report )
+ KOutMsg( "no rd/wr access to cache-file '%s.cache' rc=%R\n", full, rc );
+
+ /* we do not have the exclusive rd/wr access to the cache file !*/
+ rc = KLockFileRelease ( lock );
+ if ( rc == 0 )
+ rc = make_read_only_cache_tee( self, tee, remote, logger,
+ blocksize, cluster, report, full );
+ }
+ }
+ else if ( GetRCState ( rc ) == rcBusy )
+ {
+ if ( report )
+ KOutMsg( "failed to aquired lockfile '%s.cache.lock'\n", full );
+
+ /* it was NOT possible to aquire the lock on the cache-file */
+ rc = make_read_only_cache_tee( self, tee, remote, logger,
+ blocksize, cluster, report, full );
+ }
+ else
+ {
+ PLOGERR( klogErr, ( klogErr, rc, "cannot create lock-file '$(path).cache.lock'",
+ "path=%s", full ) );
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryMakeCacheTee ( struct KDirectory *self,
+ struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+ uint32_t blocksize, uint32_t cluster, bool report, const char *path, ... )
+{
+ rc_t rc;
+ va_list args;
+ va_start ( args, path );
+
+ rc = KDirectoryVMakeCacheTee ( self, tee, remote, logger, blocksize, cluster, report, path, args );
+
+ va_end ( args );
+
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC GetCacheCompleteness( const struct KFile * self, float * percent )
+{
+ rc_t rc;
+ if ( self == NULL )
+ rc = RC( rcFS, rcFile, rcValidating, rcSelf, rcNull );
+ else if ( percent == NULL )
+ rc = RC( rcFS, rcFile, rcValidating, rcParam, rcNull );
+ else
+ {
+ uint64_t local_size;
+ *percent = 0;
+ rc = KFileSize( self, &local_size );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "cannot detect filesize when checking if cached file is complete" );
+ }
+ else
+ {
+ uint32_t block_size;
+ rc = read_block_size( self, local_size, &block_size, false );
+ if ( rc == 0 )
+ {
+ uint64_t content_size;
+ rc = read_content_size( self, local_size, &content_size, false );
+ /* create bitmap buffer */
+ if ( rc == 0 )
+ {
+ uint64_t block_count;
+ /* size_t */ uint64_t bitmap_bytes;
+ rc = verify_file_structure( local_size, block_size, content_size, &block_count, &bitmap_bytes, false );
+ if ( rc == 0 )
+ {
+ uint8_t * bitmap = NULL;
+ rc = create_bitmap_buffer( &bitmap, bitmap_bytes );
+ if ( rc == 0 )
+ {
+ size_t num_read;
+ /* read the bitmap into the memory ... */
+ rc = KFileReadAll ( self, content_size, bitmap, bitmap_bytes, &num_read );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "cannot read bitmap from local file" );
+ }
+ else if ( num_read != bitmap_bytes )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+ PLOGERR( klogErr, ( klogErr, rc, "cannot read $(ls) bitmap-bytes from local file, read $(rs) instead",
+ "ls=%lu,rs=%lu", bitmap_bytes, num_read ));
+ }
+ }
+ if ( rc == 0 )
+ {
+ uint64_t idx, in_cache = 0;
+ for ( idx = 0; idx < block_count; ++idx )
+ {
+ if ( IS_BITMAP_BIT( bitmap, idx ) )
+ in_cache++;
+ }
+ if ( in_cache > 0 && block_count > 0 )
+ {
+ float res = in_cache;
+ res *= 100;
+ res /= block_count;
+ * percent = res;
+ }
+ }
+ if ( bitmap != NULL )
+ free( bitmap );
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+/* -----
+ * examens the file, and reports the size of the original file ( without the cachefile-footer )
+ *
+ */
+LIB_EXPORT rc_t CC GetCacheTruncatedSize( const struct KFile * self, uint64_t * truncated_size, bool silent )
+{
+ rc_t rc;
+ if ( self == NULL )
+ rc = RC( rcFS, rcFile, rcValidating, rcSelf, rcNull );
+ else if ( truncated_size == NULL )
+ rc = RC( rcFS, rcFile, rcValidating, rcParam, rcNull );
+ else
+ {
+ uint64_t local_size;
+ *truncated_size = 0;
+ rc = KFileSize( self, &local_size );
+ if ( rc != 0 )
+ {
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "cannot detect filesize when checking if cached file is complete" );
+ }
+ }
+ /* TODO: need to do a better constant tha a magic number */
+ else if (local_size < 13)
+ {
+ rc = RC ( rcFS, rcFile, rcValidating, rcSize, rcInsufficient );
+ if ( !silent )
+ {
+ LOGERR( klogErr, rc, "cannot use filesize of zero when checking if cached file is complete" );
+ }
+ }
+ else
+ {
+ uint32_t block_size;
+ rc = read_block_size( self, local_size, &block_size, true );
+ if ( rc == 0 )
+ {
+ uint64_t content_size;
+ rc = read_content_size( self, local_size, &content_size, true );
+ if ( rc == 0 )
+ {
+ uint64_t block_count;
+ /* size_t */ uint64_t bitmap_bytes;
+ rc = verify_file_structure( local_size, block_size, content_size, &block_count, &bitmap_bytes, true );
+ if ( rc == 0 )
+ {
+ *truncated_size = content_size;
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
diff --git a/libs/kfs/countfile.c b/libs/kfs/countfile.c
index 565855a..d34c5e9 100644
--- a/libs/kfs/countfile.c
+++ b/libs/kfs/countfile.c
@@ -45,6 +45,16 @@
#define KFILE_IMPL struct KCounterFile
#include <kfs/impl.h>
+/* clear out possible macro definitions of FS and GS,
+ * which show up on Solaris/x86 when building with GCC (per sys/ucontext.h)
+ */
+#ifdef FS
+# undef FS
+#endif
+#ifdef GS
+# undef GS
+#endif
+
static rc_t CC KCounterFileDestroy (KCounterFile *self);
static struct KSysFile *CC KCounterFileGetSysFile (const KCounterFile *self,
uint64_t *offset);
@@ -138,6 +148,7 @@ rc_t KCounterFileMake (KCounterFile ** pself,
{
rc = KFileInit (&self->dad, /* initialize base class */
(const KFile_vt*)&vtKCounterFile,/* VTable for KCounterFile */
+ "KCounterFile", "no-name",
original->read_enabled,
original->write_enabled);
if (rc == 0)
diff --git a/libs/kfs/crc32.c b/libs/kfs/crc32.c
index 944b819..a2a38a0 100644
--- a/libs/kfs/crc32.c
+++ b/libs/kfs/crc32.c
@@ -706,11 +706,14 @@ LIB_EXPORT rc_t CC KCRC32SumFmtUpdate ( KCRC32SumFmt *self, const char *path, ui
}
/* if existing, perform update */
- else if ( exist -> crc32 != entry -> crc32 || exist -> bin != entry -> bin )
+ else
{
- exist -> crc32 = entry -> crc32;
- exist -> bin = entry -> bin;
- self -> dirty = true;
+ if ( exist -> crc32 != entry -> crc32 || exist -> bin != entry -> bin )
+ {
+ exist -> crc32 = entry -> crc32;
+ exist -> bin = entry -> bin;
+ self -> dirty = true;
+ }
KCRC32SumEntryWhack ( & entry -> n, NULL );
}
}
@@ -1383,7 +1386,7 @@ LIB_EXPORT rc_t CC KFileMakeCRC32Read ( const KFile **fp,
else
{
rc = KFileInit ( & f -> dad,
- ( const KFile_vt* ) & KCRC32FileRead_vt, true, false );
+ ( const KFile_vt* ) & KCRC32FileRead_vt, "KCRC32File", "no-name", true, false );
if ( rc == 0 )
{
f -> position = 0;
@@ -1477,7 +1480,7 @@ LIB_EXPORT rc_t CC KCRC32FileMakeWrite ( KCRC32File **fp,
else
{
rc = KFileInit ( & f -> dad,
- ( const KFile_vt* ) & sKCRC32FileWrite_vt, out -> read_enabled, true );
+ ( const KFile_vt* ) & sKCRC32FileWrite_vt, "KCRC32File", path, out -> read_enabled, true );
if ( rc == 0 )
{
f -> position = 0;
@@ -1587,7 +1590,7 @@ LIB_EXPORT rc_t CC KCRC32FileMakeAppend ( KCRC32File **fp, KFile *out, KCRC32Sum
else
{
rc = KFileInit ( & f -> dad,
- ( const KFile_vt* ) & sKCRC32FileAppend_vt, out -> read_enabled, true );
+ ( const KFile_vt* ) & sKCRC32FileAppend_vt, "KCRC32File", path, out -> read_enabled, true );
if ( rc == 0 )
{
f -> crc32 = 0;
@@ -1734,7 +1737,7 @@ LIB_EXPORT rc_t CC KFileMakeNewCRC32Read ( const KFile **fp,
else
{
rc = KFileInit ( & f -> dad,
- ( const KFile_vt* ) & sKCRC32FileReadCreate_vt, in -> read_enabled, false );
+ ( const KFile_vt* ) & sKCRC32FileReadCreate_vt, "KCRC32File", path, in -> read_enabled, false );
if ( rc == 0 )
{
f -> position = 0;
diff --git a/libs/kfs/directory.c b/libs/kfs/directory.c
index 4786669..f3ba147 100644
--- a/libs/kfs/directory.c
+++ b/libs/kfs/directory.c
@@ -30,8 +30,11 @@
#include <kfs/impl.h>
#include <klib/refcount.h>
#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/printf.h>
#include <sysalloc.h>
+#include <stdlib.h>
/*--------------------------------------------------------------------------
* KDirectory
@@ -1151,10 +1154,8 @@ LIB_EXPORT rc_t CC KDirectoryVOpenDirRead ( const KDirectory *self,
if ( self == NULL )
return RC ( rcFS, rcDirectory, rcOpening, rcSelf, rcNull );
- if ( path == NULL )
- return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcNull );
- if ( path [ 0 ] == 0 )
- return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcInvalid );
+ if ( path == NULL || path [ 0 ] == 0 )
+ path = ".";
switch ( self -> vt -> v1 . maj )
{
@@ -1190,14 +1191,12 @@ LIB_EXPORT rc_t CC KDirectoryVOpenDirUpdate ( KDirectory *self,
if ( self == NULL )
return RC ( rcFS, rcDirectory, rcOpening, rcSelf, rcNull );
- if ( path == NULL )
- return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcNull );
- if ( path [ 0 ] == 0 )
- return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcInvalid );
-
if ( self -> read_only )
return RC ( rcFS, rcDirectory, rcOpening, rcDirectory, rcReadonly );
+ if ( path == NULL || path [ 0 ] == 0 )
+ path = ".";
+
switch ( self -> vt -> v1 . maj )
{
case 1:
@@ -1371,3 +1370,169 @@ LIB_EXPORT struct KSysDir* CC KDirectoryGetSysDir ( const KDirectory *self )
return NULL;
}
+
+static rc_t copy_loop( const KFile *src, KFile *dst, size_t bsize )
+{
+ rc_t rc = 0;
+ uint64_t pos = 0;
+ size_t num_read = 1;
+
+ char * buffer = malloc( bsize );
+ if ( buffer == NULL )
+ return RC( rcFS, rcDirectory, rcCopying, rcMemory, rcExhausted );
+
+ while ( rc == 0 && num_read > 0 )
+ {
+ rc = KFileRead ( src, pos, buffer, bsize, &num_read );
+ if ( rc == 0 && num_read > 0 )
+ {
+ size_t num_writ;
+ rc = KFileWrite ( dst, pos, buffer, num_read, &num_writ );
+ pos += num_read;
+ }
+ }
+ free( buffer );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryCopyPath ( const KDirectory *src_dir,
+ KDirectory *dst_dir, const char *src_path, const char * dst_path )
+{
+ rc_t rc;
+ struct KFile const *f_src;
+
+ if ( src_dir == NULL || dst_dir == NULL )
+ return RC ( rcFS, rcDirectory, rcCopying, rcSelf, rcNull );
+ if ( src_path == NULL || dst_path == NULL )
+ return RC ( rcFS, rcDirectory, rcCopying, rcParam, rcNull );
+
+ rc = KDirectoryOpenFileRead ( src_dir, &f_src, "%s", src_path );
+ if ( rc == 0 )
+ {
+ uint32_t pt = KDirectoryPathType ( dst_dir, "%s", dst_path );
+ switch( pt )
+ {
+ case kptFile : ; /* intentional fall through! */
+ case kptDir : rc = KDirectoryRemove ( dst_dir, true, "%s", dst_path ); break;
+ }
+ if ( rc == 0 )
+ {
+ struct KFile *f_dst;
+ uint32_t access = 0664;
+ rc = KDirectoryCreateFile ( dst_dir, &f_dst, false, access, kcmCreate, "%s", dst_path );
+ if ( rc == 0 )
+ {
+ rc = copy_loop( f_src, f_dst, 1024 * 16 );
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t build_obj_path( char **s, const char *path, const char * objname )
+{
+ rc_t rc;
+ size_t lp = string_size( path );
+ size_t l = lp + string_size( objname ) + 2;
+ *s = malloc( l );
+ if ( *s == NULL )
+ rc = RC( rcFS, rcDirectory, rcCopying, rcMemory, rcExhausted );
+ else
+ {
+ size_t written;
+ const char * concat = ( ( path[ lp - 1 ] == '/' ) ? "%s%s" : "%s/%s" );
+ rc = string_printf( *s, l, &written, concat, path, objname );
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryCopyPaths( const KDirectory * src_dir,
+ KDirectory * dst_dir, bool recursive, const char *src, const char *dst )
+{
+ rc_t rc;
+ struct KNamelist *list;
+
+ if ( src_dir == NULL || dst_dir == NULL )
+ return RC ( rcFS, rcDirectory, rcCopying, rcSelf, rcNull );
+ if ( src == NULL || dst == NULL )
+ return RC ( rcFS, rcDirectory, rcCopying, rcParam, rcNull );
+
+ rc = KDirectoryList ( src_dir, &list, NULL, NULL, "%s", src );
+ if ( rc == 0 )
+ {
+ uint32_t pt = KDirectoryPathType ( dst_dir, "%s", dst );
+ /* if the output-directory does not exist: create it! */
+ switch( pt )
+ {
+ case kptFile : rc = KDirectoryRemove ( dst_dir, true, "%s", dst );
+ /* intentially no break ! */
+
+ case kptNotFound : if ( rc == 0 )
+ rc = KDirectoryCreateDir ( dst_dir, 0775, kcmCreate | kcmParents, "%s", dst );
+ break;
+ }
+ if ( rc == 0 )
+ {
+ uint32_t i, n;
+ rc = KNamelistCount ( list, &n );
+ for ( i = 0; i < n && rc == 0; ++i )
+ {
+ const char *name;
+ rc = KNamelistGet ( list, i, &name );
+ if ( rc == 0 )
+ {
+ char *src_obj;
+ rc = build_obj_path( &src_obj, src, name );
+ if ( rc == 0 )
+ {
+ char *dst_obj;
+ rc = build_obj_path( &dst_obj, dst, name );
+ if ( rc == 0 )
+ {
+ pt = KDirectoryPathType ( src_dir, "%s", src_obj );
+ switch( pt )
+ {
+ case kptFile : rc = KDirectoryCopyPath ( src_dir, dst_dir, src_obj, dst_obj );
+ break;
+
+ case kptDir : if ( recursive )
+ rc = KDirectoryCopyPaths( src_dir, dst_dir, true, src_obj, dst_obj );
+ break;
+ }
+ free( dst_obj );
+ }
+ free( src_obj );
+ }
+ }
+ }
+ }
+ KNamelistRelease ( list );
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryCopy( const KDirectory * src_dir,
+ KDirectory * dst_dir, bool recursive, const char *src, const char *dst )
+{
+ rc_t rc = 0;
+ uint32_t pt;
+
+ if ( src_dir == NULL || dst_dir == NULL )
+ return RC ( rcFS, rcDirectory, rcCopying, rcSelf, rcNull );
+ if ( src == NULL || dst == NULL )
+ return RC ( rcFS, rcDirectory, rcCopying, rcParam, rcNull );
+
+ pt = KDirectoryPathType ( src_dir, "%s", src );
+ switch( pt )
+ {
+ case kptFile : rc = KDirectoryCopyPath ( src_dir, dst_dir, src, dst );
+ break;
+ case kptDir : rc = KDirectoryCopyPaths ( src_dir, dst_dir, recursive, src, dst );
+ break;
+ }
+ return rc;
+}
diff --git a/libs/kfs/ffext.c b/libs/kfs/ffext.c
index 39dde22..390fa28 100644
--- a/libs/kfs/ffext.c
+++ b/libs/kfs/ffext.c
@@ -27,6 +27,7 @@
#include <kfs/extern.h>
#include <klib/rc.h>
#include <kfs/file.h>
+#include <klib/text.h>
#include <klib/log.h>
#include <klib/container.h>
#include <kfs/fileformat.h>
@@ -681,6 +682,7 @@ rc_t CC KExtFileFormatGetTypePath (const KExtFileFormat *self,
rc_t rc = 0;
const char * b;
const char * s;
+ size_t size;
FUNC_ENTRY();
@@ -698,7 +700,7 @@ rc_t CC KExtFileFormatGetTypePath (const KExtFileFormat *self,
b = strrchr (s, '.');
if (b == NULL)
- b = path + strlen(path) - 1; /* will be an empty string when calls KExtTableFind */
+ b = path + string_measure(path, &size) - 1; /* will be an empty string when calls KExtTableFind */
{
KExtNode * node;
size_t c;
@@ -720,7 +722,7 @@ rc_t CC KExtFileFormatGetTypePath (const KExtFileFormat *self,
if (c > descr_max)
c = descr_max-1;
if (descr)
- strncpy (descr, node->kffdescr, c);
+ string_copy (descr, descr_max, node->kffdescr, c);
descr[c] = '\0';
if (descr_len)
*descr_len = c;
@@ -742,15 +744,15 @@ rc_t CC KExtFileFormatGetTypePath (const KExtFileFormat *self,
#else
- size_t l = strlen (b);
+ size_t l = string_measure (b, &size);
if (desc != NULL)
{
- strncpy (desc, b, desc_max);
+ string_copy (desc, desc_max, b, l);
if (desc_max < l)
desc[desc_max-1] = 0;
}
if (descr_len != NULL)
- *descr_len = strlen (b);
+ *descr_len = l;
if (type != NULL)
*type = kfftUnknown;
if (class != NULL)
diff --git a/libs/kfs/ffmagic.c b/libs/kfs/ffmagic.c
index b4e100d..f572a04 100644
--- a/libs/kfs/ffmagic.c
+++ b/libs/kfs/ffmagic.c
@@ -28,10 +28,13 @@
#include <magic.h>
#include <klib/rc.h>
#include <kfs/file.h>
+#include <klib/text.h>
#include <klib/log.h>
+#include <klib/debug.h>
#include <klib/container.h>
#include <kfs/directory.h>
#include <kfs/fileformat.h>
+#include <kfg/config.h>
#include <sysalloc.h>
#include "fileformat-priv.h"
struct KMagicFileFormat;
@@ -731,7 +734,7 @@ rc_t KMagicFileFormatGetTypeBuff (const KMagicFileFormat *self, const void * buf
if (c > descr_max)
c = descr_max-1;
if (descr)
- strncpy (descr, node->kffdescr, c);
+ string_copy(descr, descr_max, node->kffdescr, c);
descr[c] = '\0';
if (descr_len)
*descr_len = c;
@@ -753,12 +756,13 @@ rc_t KMagicFileFormatGetTypeBuff (const KMagicFileFormat *self, const void * buf
#else
- size_t l = strlen (b);
- if (desc != NULL)
+ size_t size;
+ size_t l = string_measure(b, &size);
+ if (descr != NULL)
{
- strncpy (desc, b, desc_max);
- if (desc_max < l)
- desc[desc_max-1] = 0;
+ string_copy (descr, descr_max, b, l);
+ if (descr_max < l)
+ descr[descr_max-1] = 0;
}
if (descr_len != NULL)
*descr_len = strlen (b);
@@ -781,6 +785,9 @@ LIB_EXPORT rc_t CC KMagicFileFormatMake (KFileFormat ** pft, const char * magic_
FUNC_ENTRY();
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: load path as called %s\n", __func__, magic_path));
+
self = malloc (sizeof * self);
if (self == NULL)
{
@@ -788,6 +795,8 @@ LIB_EXPORT rc_t CC KMagicFileFormatMake (KFileFormat ** pft, const char * magic_
LOGERR (klogFatal, rc, "Failed to allocate for KMagicFileFormat");
}
else
+
+
{
rc = KFileFormatInit (&self->dad, (const KFileFormat_vt *)&vt_v1, typeAndClass, tclen);
if (rc == 0)
@@ -798,7 +807,8 @@ LIB_EXPORT rc_t CC KMagicFileFormatMake (KFileFormat ** pft, const char * magic_
rc = KMagicTableInit (self->table, self->dad.tables, magic, magiclen);
if (rc == 0)
{
- self->cookie = magic_open (MAGIC_PRESERVE_ATIME);
+ self->cookie = magic_open (MAGIC_PRESERVE_ATIME);
+/* self->cookie = magic_open (MAGIC_PRESERVE_ATIME|MAGIC_DEBUG|MAGIC_CHECK); */
if (self->cookie == NULL)
{
rc = RC (rcFF, rcFileFormat, rcConstructing, rcResources, rcNull);
@@ -806,17 +816,111 @@ LIB_EXPORT rc_t CC KMagicFileFormatMake (KFileFormat ** pft, const char * magic_
}
else
{
+ KDirectory * pwd;
+ KConfig * kfg;
+ static const char unix_magic_path[] = "/usr/share/file/magic";
+ static const char kfg_magic_path[] = "kfs/kff/magic";
+ char * magic_path_cursor;
+ char kfg_magic_path_buff [1024];
+ char magic_path_buff [4096];
+ size_t z;
int load_code;
+
+
+ magic_path_cursor = magic_path_buff;
+
+ if (magic_path)
+ {
+ z = strlen (magic_path);
+ if (magic_path_cursor != magic_path_buff)
+ *magic_path_cursor++ = ':';
+ memcpy (magic_path_cursor, magic_path, z);
+ magic_path_cursor += z;
+ *magic_path_cursor = '\0';
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: 1 magic_path_buff %s\n", __func__, magic_path_buff));
+ }
+
+ /* see if we have a configured alternate magic path */
+ rc = KConfigMake (&kfg, NULL);
+ if (rc == 0)
+ {
+ const KConfigNode * node;
+ rc = KConfigOpenNodeRead (kfg, &node, kfg_magic_path);
+ if (rc == 0)
+ {
+ size_t remaining;
+ rc = KConfigNodeRead (node, 0, kfg_magic_path_buff,
+ sizeof kfg_magic_path_buff-1,
+ &z, &remaining);
+ if (rc == 0)
+ {
+ if (remaining != 0)
+ {
+ rc = RC (rcFF, rcFileFormat, rcLoading,
+ rcString, rcExcessive);
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: failed KConfigOpenNodeRead remaining %zu %R\n",
+ __func__, remaining, rc));
+ }
+ else if (z)
+ {
+ kfg_magic_path_buff[z] = '\0';
+ if (magic_path_cursor != magic_path_buff)
+ *magic_path_cursor++ = ':';
+ memcpy (magic_path_cursor,kfg_magic_path_buff, z);
+ magic_path_cursor += z;
+ *magic_path_cursor = '\0';
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: 3 magic_path_buff %s\n", __func__, magic_path_buff));
+ }
+ }
+ else
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: failed KConfigNodeRead %R\n", __func__, rc));
+ }
+ else
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: failed KConfigOpenNodeRead %R\n", __func__, rc));
+ }
+ else
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: failed KConfigMake %R\n", __func__, rc));
- load_code = magic_load (self->cookie, magic_path); /* figger out how to do an over-ride correctly ? */
+ rc = KDirectoryNativeDir (&pwd);
+ if (rc == 0)
+ {
+ KPathType kpt = KDirectoryPathType (pwd, unix_magic_path);
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: %s %x\n", __func__, unix_magic_path, kpt));
+ if ((kpt & ~ kptAlias) == kptFile)
+ {
+ z = strlen (unix_magic_path);
+ if (magic_path_cursor != magic_path_buff)
+ *magic_path_cursor++ = ':';
+ memcpy (magic_path_cursor, unix_magic_path, z);
+ magic_path_cursor += z;
+ *magic_path_cursor = '\0';
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: 2 magic_path_buff %s\n", __func__, magic_path_buff));
+ }
+ }
+ else
+ LOGERR (klogErr, rc, "Failed to open NativeDir for Magic");
+
+ DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+ ("%s: loading path %s\n", __func__, magic_path_buff));
+
+ load_code = magic_load (self->cookie, magic_path_buff);
if (load_code != 0) /* defined as 0 success and -1 as fail */
{
+ KFF_DEBUG (("%s: magic_load() failed with load code %d\n", __func__, load_code));
rc = RC (rcFF, rcFileFormat, rcLoading, rcLibrary, rcUnexpected);
}
else
{
*pft = &self->dad;
- KFF_DEBUG (("%s Success", __func__));
+ KFF_DEBUG (("%s Success\n", __func__));
return 0;
}
magic_close (self->cookie);
diff --git a/libs/kfs/file.c b/libs/kfs/file.c
index 42063e4..65408c2 100644
--- a/libs/kfs/file.c
+++ b/libs/kfs/file.c
@@ -82,7 +82,17 @@ LIB_EXPORT struct KSysFile* CC KFileGetSysFile ( const KFile *self, uint64_t *of
LIB_EXPORT rc_t CC KFileAddRef ( const KFile *self )
{
if ( self != NULL )
- atomic32_inc ( & ( ( KFile* ) self ) -> refcount );
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "KFile" ) )
+ {
+ case krefLimit:
+ return RC ( rcFS, rcFile, rcAttaching, rcRange, rcExcessive );
+ case krefNegative:
+ return RC ( rcFS, rcFile, rcAttaching, rcSelf, rcInvalid );
+ default:
+ break;
+ }
+ }
return 0;
}
@@ -90,25 +100,23 @@ LIB_EXPORT rc_t CC KFileAddRef ( const KFile *self )
* discard reference to file
* ignores NULL references
*/
-LIB_EXPORT rc_t CC KFileRelease ( const KFile *cself )
+LIB_EXPORT rc_t CC KFileRelease ( const KFile *self )
{
- KFile *self = ( KFile* ) cself;
- if ( cself != NULL )
+ if ( self != NULL )
{
- if ( atomic32_dec_and_test ( & self -> refcount ) )
+ switch ( KRefcountDrop ( & self -> refcount, "KFile" ) )
{
- rc_t rc;
-
+ case krefWhack:
if ( self -> dir != NULL )
- rc = KDirectoryDestroyFile ( self -> dir, self );
- else
- rc = KFileDestroy ( self );
-
- if ( rc != 0 )
- atomic32_set ( & self -> refcount, 1 );
- return rc;
+ return KDirectoryDestroyFile ( self -> dir, ( KFile* ) self );
+ return KFileDestroy ( ( KFile* ) self );
+ case krefLimit:
+ return RC ( rcFS, rcFile, rcReleasing, rcRange, rcExcessive );
+ default:
+ break;
}
}
+
return 0;
}
@@ -236,6 +244,67 @@ LIB_EXPORT rc_t CC KFileRead ( const KFile *self, uint64_t pos,
return RC ( rcFS, rcFile, rcReading, rcInterface, rcBadVersion );
}
+/* ReadAll
+ * read from file until "bsize" bytes have been retrieved
+ * or until end-of-input
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT ] - return parameter giving number of bytes
+ * actually read. when returned value is zero and return code is
+ * also zero, interpreted as end of file.
+ */
+LIB_EXPORT rc_t CC KFileReadAll ( const KFile *self, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ rc_t rc;
+ uint8_t *b;
+ size_t total, count;
+
+ if ( num_read == NULL )
+ return RC ( rcFS, rcFile, rcReading, rcParam, rcNull );
+
+ * num_read = 0;
+
+ if ( self == NULL )
+ return RC ( rcFS, rcFile, rcReading, rcSelf, rcNull );
+
+ if ( ! self -> read_enabled )
+ return RC ( rcFS, rcFile, rcReading, rcFile, rcNoPerm );
+
+ if ( buffer == NULL )
+ return RC ( rcFS, rcFile, rcReading, rcBuffer, rcNull );
+ if ( bsize == 0 )
+ return RC ( rcFS, rcFile, rcReading, rcBuffer, rcInsufficient );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ for ( rc = 0, b = buffer, total = 0; total < bsize; total += count )
+ {
+ count = 0;
+ rc = ( * self -> vt -> v1 . read ) ( self, pos + total, b + total, bsize - total, & count );
+ if ( rc != 0 )
+ break;
+ if ( count == 0 )
+ break;
+ }
+ break;
+ default:
+ return RC ( rcFS, rcFile, rcReading, rcInterface, rcBadVersion );
+ }
+
+ if ( total != 0 )
+ {
+ * num_read = total;
+ return 0;
+ }
+
+ return rc;
+}
+
/* Write
* write file at known position
*
@@ -274,10 +343,71 @@ LIB_EXPORT rc_t CC KFileWrite ( KFile *self, uint64_t pos,
return RC ( rcFS, rcFile, rcWriting, rcInterface, rcBadVersion );
}
+/* WriteAll
+ * write from file until "size" bytes have been transferred
+ * or until no further progress can be made
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ */
+LIB_EXPORT rc_t CC KFileWriteAll ( KFile *self, uint64_t pos,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ rc_t rc;
+ const uint8_t *b;
+ size_t total, count;
+
+ size_t ignore;
+ if ( num_writ == NULL )
+ num_writ = & ignore;
+
+ * num_writ = 0;
+
+ if ( self == NULL )
+ return RC ( rcFS, rcFile, rcWriting, rcSelf, rcNull );
+
+ if ( ! self -> write_enabled )
+ return RC ( rcFS, rcFile, rcWriting, rcFile, rcNoPerm );
+
+ if ( size == 0 )
+ return 0;
+ if ( buffer == NULL )
+ return RC ( rcFS, rcFile, rcWriting, rcBuffer, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ for ( rc = 0, b = buffer, total = 0; total < size; total += count )
+ {
+ count = 0;
+ rc = ( * self -> vt -> v1 . write ) ( self, pos + total, b + total, size - total, & count );
+ if ( rc != 0 )
+ break;
+ if ( count == 0 )
+ break;
+ }
+ break;
+ default:
+ return RC ( rcFS, rcFile, rcWriting, rcInterface, rcBadVersion );
+ }
+
+ * num_writ = total;
+ if ( total == size )
+ return 0;
+ if ( rc == 0 )
+ return RC ( rcFS, rcFile, rcWriting, rcTransfer, rcIncomplete );
+ return rc;
+}
+
/* Init
* initialize a newly allocated file object
*/
LIB_EXPORT rc_t CC KFileInit ( KFile *self, const KFile_vt *vt,
+ const char *classname, const char *fname,
bool read_enabled, bool write_enabled )
{
if ( self == NULL )
@@ -322,7 +452,7 @@ LIB_EXPORT rc_t CC KFileInit ( KFile *self, const KFile_vt *vt,
self -> vt = vt;
self -> dir = NULL;
- atomic32_set ( & self -> refcount, 1 );
+ KRefcountInit ( & self -> refcount, 1, classname, "init", fname );
self -> read_enabled = ( uint8_t ) ( read_enabled != 0 );
self -> write_enabled = ( uint8_t ) ( write_enabled != 0 );
diff --git a/libs/kfs/fileformat-priv.h b/libs/kfs/fileformat-priv.h
index 5737a35..4f19e62 100644
--- a/libs/kfs/fileformat-priv.h
+++ b/libs/kfs/fileformat-priv.h
@@ -43,7 +43,7 @@ extern "C" {
#endif
#ifdef _DEBUGGING
-#define FUNC_ENTRY() DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFFENTRY), ("Enter: %s\n", __func__))
+#define FUNC_ENTRY() /* DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFFENTRY), ("Enter: %s\n", __func__)) */
#define KFF_DEBUG(msg) DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF), msg)
#else
#define FUNC_ENTRY()
diff --git a/libs/kfs/gzip.c b/libs/kfs/gzip.c
index 333113a..ebf088f 100644
--- a/libs/kfs/gzip.c
+++ b/libs/kfs/gzip.c
@@ -134,7 +134,7 @@ LIB_EXPORT rc_t CC KFileMakeGzipForRead( const struct KFile **result,
if (!obj)
return RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
- rc = KFileInit(&obj->dad, (const KFile_vt*) &s_vtKFile_InGz, true, false);
+ rc = KFileInit(&obj->dad, (const KFile_vt*) &s_vtKFile_InGz, "KGZipFile", "no-name", true, false);
if (rc != 0) {
free(obj);
return rc;
@@ -289,7 +289,6 @@ static rc_t z_read ( KGZipFile * self, void * buffer, size_t bsize, size_t * _nu
GZIP_DEBUG(("%s: data error %d\n",__func__, zret));
return RC (rcFS, rcFile, rcReading, rcData, rcCorrupt);
- /* don't handle these yet */
case Z_STREAM_END:
GZIP_DEBUG(("%s: stream end %d\n",__func__, zret));
self->completed = true;
@@ -426,7 +425,7 @@ LIB_EXPORT rc_t CC KFileMakeGzipForWrite( struct KFile **result,
if (!obj)
return RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
- rc = KFileInit(&obj->dad, (const KFile_vt*) &s_vtKFile_OutGz, false, true);
+ rc = KFileInit(&obj->dad, (const KFile_vt*) &s_vtKFile_OutGz, "KGZipFile", "no-name", false, true);
if (rc != 0) {
free(obj);
return rc;
diff --git a/libs/kfs/libkfs.vers b/libs/kfs/libkfs.vers
index c813fe1..1892b92 100644
--- a/libs/kfs/libkfs.vers
+++ b/libs/kfs/libkfs.vers
@@ -1 +1 @@
-1.2.5
+1.3.2
diff --git a/libs/kfs/lockfile.c b/libs/kfs/lockfile.c
new file mode 100644
index 0000000..85b36e2
--- /dev/null
+++ b/libs/kfs/lockfile.c
@@ -0,0 +1,350 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+struct KRemoveLockFileTask;
+#define KTASK_IMPL struct KRemoveLockFileTask
+
+#include <kfs/extern.h>
+#include <kfs/lockfile.h>
+#include <kfs/impl.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kproc/task.h>
+#include <kproc/impl.h>
+#include <kproc/procmgr.h>
+#include <klib/text.h>
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#if _DEBUGGING
+#define CRIPPLE_CLEANUP 0
+#define DISABLE_CLEANUP 0
+#endif
+
+/*--------------------------------------------------------------------------
+ * KRemoveLockFileTask
+ */
+typedef struct KRemoveLockFileTask KRemoveLockFileTask;
+struct KRemoveLockFileTask
+{
+ KTask dad;
+ KDirectory *dir;
+ char path [ 1 ];
+};
+
+static
+rc_t CC KRemoveLockFileTaskWhack ( KRemoveLockFileTask *self )
+{
+ rc_t rc = KDirectoryRelease ( self -> dir );
+ KTaskDestroy ( & self -> dad, "KRemoveLockFileTask" );
+ free ( self );
+ return rc;
+}
+
+static
+rc_t CC KRemoveLockFileTaskExecute ( KRemoveLockFileTask *self )
+{
+ return KDirectoryRemove ( self -> dir, true, self -> path );
+}
+
+static
+KTask_vt_v1 KRemoveLockFileTask_vt =
+{
+ 1, 0,
+ KRemoveLockFileTaskWhack,
+ KRemoveLockFileTaskExecute
+};
+
+static
+rc_t KRemoveLockFileTaskMake ( KTask **task, KDirectory *dir, const char *path )
+{
+ rc_t rc;
+ size_t path_size = string_size ( path );
+ KRemoveLockFileTask *t = malloc ( sizeof * t + path_size );
+ if ( t == NULL )
+ rc = RC ( rcFS, rcLock, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KTaskInit ( & t -> dad, ( const KTask_vt* ) & KRemoveLockFileTask_vt, "KRemoveLockFileTask", path );
+ if ( rc == 0 )
+ {
+ rc = KDirectoryAddRef ( t -> dir = dir );
+ if ( rc == 0 )
+ {
+ strcpy ( t -> path, path );
+ * task = & t -> dad;
+ return 0;
+ }
+ }
+
+ free ( t );
+ }
+
+ return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KLockFile
+ * a mutual exclusion lock on a file
+ * the lock is acquired upon creation
+ * and released upon destruction
+ *
+ * NB - only guaranteed to work when used from a single host
+ */
+struct KLockFile
+{
+ KProcMgr *pmgr;
+ KTask *cleanup;
+ KTaskTicket ticket;
+ KRefcount refcount;
+};
+
+static
+rc_t KLockFileWhack ( KLockFile *self )
+{
+ rc_t rc;
+
+ /* remove task from cleanup queue */
+ if ( self -> pmgr != NULL )
+ {
+ rc = KProcMgrRemoveCleanupTask ( self -> pmgr, & self -> ticket );
+ KProcMgrRelease ( self -> pmgr );
+ }
+
+#if ! CRIPPLE_CLEANUP && ! DISABLE_CLEANUP
+ /* remove the lock file from file system */
+ rc = KTaskExecute ( self -> cleanup );
+#endif
+ KTaskRelease ( self -> cleanup );
+
+ free ( self );
+ return 0;
+}
+
+
+/* AddRef
+ */
+LIB_EXPORT rc_t CC KLockFileAddRef ( const KLockFile *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "KLockFile" ) )
+ {
+ case krefLimit:
+ return RC ( rcFS, rcLock, rcAttaching, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+/* Release
+ */
+LIB_EXPORT rc_t CC KLockFileRelease ( const KLockFile *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "KLockFile" ) )
+ {
+ case krefWhack:
+ return KLockFileWhack ( ( KLockFile* ) self );
+ case krefLimit:
+ return RC ( rcFS, rcLock, rcReleasing, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+/* Make
+ */
+static
+rc_t KLockFileMake ( KLockFile **lock, KDirectory *dir, const char *path )
+{
+ rc_t rc;
+ KLockFile *f = malloc ( sizeof * f );
+ if ( f == NULL )
+ rc = RC ( rcFS, rcLock, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KRemoveLockFileTaskMake ( & f -> cleanup, dir, path );
+ if ( rc == 0 )
+ {
+#if ! DISABLE_CLEANUP
+ /* register cleanup task with proc mgr */
+ rc = KProcMgrMakeSingleton ( & f -> pmgr );
+ if ( rc == 0 )
+ rc = KProcMgrAddCleanupTask ( f -> pmgr, & f -> ticket, f -> cleanup );
+ else
+#else
+ f -> pmgr = NULL;
+#endif
+ {
+ /* this is allowed to fail if mgr has not been initialized */
+ memset ( & f -> ticket, 0, sizeof f -> ticket );
+ rc = 0;
+ }
+
+ if ( rc == 0 )
+ {
+ KRefcountInit ( & f -> refcount, 1, "KLockFile", "make", path );
+ * lock = f;
+ return 0;
+ }
+
+ if ( f -> pmgr != NULL )
+ KProcMgrRelease ( f -> pmgr );
+ }
+
+ free ( f );
+ }
+
+ return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ * interface extensions
+ */
+
+
+/* CreateLockFile
+ * attempts to create a KLockFile
+ *
+ * "lock" [ OUT ] - return parameter for newly created lock file
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting lock file
+ */
+LIB_EXPORT rc_t CC KDirectoryVCreateLockFile ( KDirectory *self,
+ KLockFile **lock, const char *path, va_list args )
+{
+ rc_t rc;
+
+ if ( lock == NULL )
+ rc = RC ( rcFS, rcFile, rcLocking, rcParam, rcNull );
+ else
+ {
+ if ( self == NULL )
+ rc = RC ( rcFS, rcFile, rcLocking, rcSelf, rcNull );
+ else if ( path == NULL )
+ rc = RC ( rcFS, rcFile, rcLocking, rcPath, rcNull );
+ else if ( path [ 0 ] == 0 )
+ rc = RC ( rcFS, rcFile, rcLocking, rcPath, rcEmpty );
+ else
+ {
+ char full [ 4096 ];
+ rc = KDirectoryVResolvePath ( self, false, full, sizeof full, path, args );
+ if ( rc == 0 )
+ {
+ KFile *lock_file;
+ rc = KDirectoryCreateFile ( self, & lock_file, false, 0600, kcmCreate | kcmParents, full );
+ if ( rc == 0 )
+ {
+ rc_t rc2;
+
+ /* no longer need the file - not going to write to it anyway */
+ KFileRelease ( lock_file );
+
+ /* we have the lock */
+ rc = KLockFileMake ( lock, self, full );
+ if ( rc == 0 )
+ return 0;
+
+ /* must unlink lockfile */
+ rc2 = KDirectoryRemove ( self, true, full );
+ if ( rc2 != 0 )
+ /* issue a report */;
+ }
+ else if ( GetRCState ( rc ) == rcExists )
+ {
+ /* map the rc to kproc type values */
+ rc = RC ( rcFS, rcFile, rcLocking, rcLocking, rcBusy );
+ }
+ else
+ {
+ rc = ResetRCContext ( rc, rcFS, rcFile, rcLocking );
+ }
+ }
+ }
+
+ * lock = NULL;
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KDirectoryCreateLockFile ( KDirectory *self,
+ KLockFile **lock, const char *path, ... )
+{
+ rc_t rc;
+
+ va_list args;
+ va_start ( args, path );
+
+ rc = KDirectoryVCreateLockFile ( self, lock, path, args );
+
+ va_end ( args );
+
+ return rc;
+}
+
+
+/* CreateExclusiveAccessFile
+ * opens a file with exclusive write access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "update" [ IN ] - if true, open in read/write mode
+ * otherwise, open in write-only mode
+ *
+ * "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ * "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ */
+
+LIB_EXPORT rc_t CC KDirectoryCreateExclusiveAccessFile ( KDirectory *self, KFile **f,
+ bool update, uint32_t access, KCreateMode mode, const char *path, ... )
+{
+ rc_t rc;
+
+ va_list args;
+ va_start ( args, path );
+
+ rc = KDirectoryVCreateExclusiveAccessFile ( self, f, update, access, mode, path, args );
+
+ va_end ( args );
+
+ return rc;
+}
diff --git a/libs/kfs/md5.c b/libs/kfs/md5.c
index 57d74c5..e172b0c 100644
--- a/libs/kfs/md5.c
+++ b/libs/kfs/md5.c
@@ -399,6 +399,7 @@ rc_t KMD5SumFmtPopulate ( KMD5SumFmt *self, const KFile *in )
/* Make
* creates a formatted accessor to textual checksum file
+ * takes over ownership of "in"/"out" file reference
*/
LIB_EXPORT rc_t CC KMD5SumFmtMakeRead ( const KMD5SumFmt **fp, const KFile *in )
{
@@ -443,6 +444,10 @@ LIB_EXPORT rc_t CC KMD5SumFmtMakeRead ( const KMD5SumFmt **fp, const KFile *in )
return rc;
}
+/* Make
+ * creates a formatted accessor to textual checksum file
+ * takes over ownership of "in"/"out" file reference
+ */
LIB_EXPORT rc_t CC KMD5SumFmtMakeUpdate ( KMD5SumFmt **fp, KFile *out )
{
rc_t rc;
@@ -762,14 +767,16 @@ LIB_EXPORT rc_t CC KMD5SumFmtUpdate ( KMD5SumFmt *self, const char *path,
self -> dirty = true;
++ self -> count;
}
-
- /* if existing, perform update */
- else if ( memcmp ( exist -> digest, entry -> digest, sizeof exist -> digest ) != 0 ||
- exist -> bin != entry -> bin )
+ else
{
- memcpy ( exist -> digest, entry -> digest, sizeof exist -> digest );
- exist -> bin = entry -> bin;
- self -> dirty = true;
+ /* if existing, perform update */
+ if ( memcmp ( exist -> digest, entry -> digest, sizeof exist -> digest ) != 0 ||
+ exist -> bin != entry -> bin )
+ {
+ memcpy ( exist -> digest, entry -> digest, sizeof exist -> digest );
+ exist -> bin = entry -> bin;
+ self -> dirty = true;
+ }
KMD5SumEntryWhack ( & entry -> n, NULL );
}
}
@@ -1491,7 +1498,7 @@ LIB_EXPORT rc_t CC KFileMakeMD5Read ( const KFile **fp,
else
{
rc = KFileInit ( & f -> dad,
- ( const KFile_vt* ) & KMD5FileRead_vt, true, false );
+ ( const KFile_vt* ) & KMD5FileRead_vt, "KMD5File", "no-name", true, false );
if ( rc == 0 )
{
f -> position = 0;
@@ -1585,7 +1592,7 @@ LIB_EXPORT rc_t CC KMD5FileMakeWrite ( KMD5File **fp,
else
{
rc = KFileInit ( & f -> dad,
- ( const KFile_vt* ) & sKMD5FileWrite_vt, out -> read_enabled, true );
+ ( const KFile_vt* ) & sKMD5FileWrite_vt, "KMD5File", path, out -> read_enabled, true );
if ( rc == 0 )
{
f -> position = 0;
@@ -1695,7 +1702,7 @@ LIB_EXPORT rc_t CC KMD5FileMakeAppend ( KMD5File **fp, KFile *out, KMD5SumFmt *m
else
{
rc = KFileInit ( & f -> dad,
- ( const KFile_vt* ) & sKMD5FileAppend_vt, out -> read_enabled, true );
+ ( const KFile_vt* ) & sKMD5FileAppend_vt, "KMD5File", path, out -> read_enabled, true );
if ( rc == 0 )
{
MD5StateInit ( & f -> md5 );
@@ -1818,6 +1825,13 @@ static KFile_vt_v1 sKMD5FileReadCreate_vt =
KMD5FileType
};
+/* MakeReadNew
+ * creates an adapter to create MD5 checksum for a file
+ *
+ * "in" [ IN ] - input file
+ * since this file is being wrapped by "f", ownership of
+ * the provided reference is transferred to "f"
+ */
LIB_EXPORT rc_t CC KFileMakeNewMD5Read ( const KFile **fp,
const struct KFile *in, KMD5SumFmt *md5, const char *path )
{
@@ -1841,14 +1855,14 @@ LIB_EXPORT rc_t CC KFileMakeNewMD5Read ( const KFile **fp,
rc = RC ( rcFS, rcFile, rcConstructing, rcPath, rcEmpty );
else
{
- KMD5File *f = malloc ( sizeof * f - sizeof f -> u +
- sizeof f -> u . wr + strlen ( path ) );
+ size_t path_size = string_size ( path );
+ KMD5File *f = malloc ( sizeof * f + path_size );
if ( f == NULL )
rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
else
{
rc = KFileInit ( & f -> dad,
- ( const KFile_vt* ) & sKMD5FileReadCreate_vt, in -> read_enabled, false );
+ ( const KFile_vt* ) & sKMD5FileReadCreate_vt, "KMD5File", path, in -> read_enabled, false );
if ( rc == 0 )
{
f -> position = 0;
@@ -1857,7 +1871,7 @@ LIB_EXPORT rc_t CC KFileMakeNewMD5Read ( const KFile **fp,
f -> fmt = md5;
f -> type = KMD5FileTypeWrite;
memset ( & f -> u . wr, 0, sizeof f -> u . wr );
- strcpy ( f -> u . wr . path, path );
+ string_copy ( f -> u . wr . path, path_size + 1, path, path_size );
#if 0
/* KFileSize can't always be used */
rc = KFileSize ( in, & f -> u . wr . max_position );
diff --git a/libs/kfs/mmap.c b/libs/kfs/mmap.c
index bde5286..32a7887 100644
--- a/libs/kfs/mmap.c
+++ b/libs/kfs/mmap.c
@@ -39,9 +39,13 @@
#define USE_MALLOC_MMAP 1
#if USE_MALLOC_MMAP
+
+#ifndef FORCE_MALLOC_MMAP
#define FORCE_MALLOC_MMAP 0
#endif
+#endif
+
/*--------------------------------------------------------------------------
* KMMap
@@ -273,7 +277,7 @@ rc_t KMMapMallocRgn ( KMMap *self, uint64_t pos, size_t size, bool read_only )
}
/* crop for readonly case */
- if ( read_only && pos + size > eof )
+ if ( read_only && (( size == 0 ) || ( pos + size > eof )))
size = ( size_t ) ( eof - pos );
}
@@ -654,7 +658,7 @@ LIB_EXPORT rc_t CC KMMapMakeMaxRead ( const KMMap **mm, const KFile *f )
return KMMapMakeRgnRead ( mm, f, 0, 1500 * 1024 * 1024 );
/* 64-bit or beyond */
- return KMMapMakeRgnRead ( mm, f, 0, ( ( size_t ) 8 ) * 1024 * 1024 * 1024 );
+ return KMMapMakeRgnRead ( mm, f, 0, ( ( size_t ) 48 ) * 1024 * 1024 * 1024 );
}
LIB_EXPORT rc_t CC KMMapMakeMaxUpdate ( KMMap **mm, KFile *f )
@@ -668,8 +672,8 @@ LIB_EXPORT rc_t CC KMMapMakeMaxUpdate ( KMMap **mm, KFile *f )
eof = 1500 * 1024 * 1024;
/* 64-bit or beyond */
- if ( sizeof mm == 8 && eof > ( ( size_t ) 8 ) * 1024 * 1024 * 1024 )
- eof = ( ( size_t ) 8 ) * 1024 * 1024 * 1024;
+ if ( sizeof mm == 8 && eof > ( ( size_t ) 48 ) * 1024 * 1024 * 1024 )
+ eof = ( ( size_t ) 48 ) * 1024 * 1024 * 1024;
rc = KMMapMakeRgnUpdate ( mm, f, 0, ( size_t ) eof );
}
diff --git a/libs/kfs/nullfile.c b/libs/kfs/nullfile.c
index 2694ded..22eab36 100644
--- a/libs/kfs/nullfile.c
+++ b/libs/kfs/nullfile.c
@@ -111,6 +111,7 @@ rc_t KNullFileMake (KNullFile ** self, bool write_allowed)
{
rc = KFileInit (&pF->dad, /* initialize base class */
(const KFile_vt*)&vtKNullFile, /* VTable for KNullFile */
+ "KNullFile", "no-name",
true, /* read allowed */
write_allowed);
if (rc == 0)
diff --git a/libs/kfs/pagefile.c b/libs/kfs/pagefile.c
index 38c6c7f..bf0f05f 100644
--- a/libs/kfs/pagefile.c
+++ b/libs/kfs/pagefile.c
@@ -96,7 +96,7 @@ struct KPageBacking
static
void KPageBackingWhack ( KPageBacking *self )
{
- KFileRelease ( self -> backing );
+ if(self -> backing) KFileRelease ( self -> backing );
free ( self );
}
@@ -184,6 +184,7 @@ rc_t KPageBackingSetSize ( KPageBacking *self, uint32_t pg_count )
/* Read
* read a page from backing
*/
+#if 0
static
rc_t KFileReadAll ( const KFile *self, uint64_t pos, uint8_t *buff, size_t bsize, size_t *num_read )
{
@@ -208,6 +209,7 @@ rc_t KFileReadAll ( const KFile *self, uint64_t pos, uint8_t *buff, size_t bsize
* num_read = 0;
return rc;
}
+#endif
static
rc_t KPageBackingRead ( const KPageBacking *self, void **ppage, uint32_t pg_id )
@@ -267,6 +269,7 @@ rc_t KPageBackingRead ( const KPageBacking *self, void **ppage, uint32_t pg_id )
/* Write
* write a page to backing store
*/
+#if 0
static
rc_t KFileWriteAll ( KFile *self, uint64_t pos, const uint8_t *buff, size_t size, size_t *num_writ )
{
@@ -294,6 +297,7 @@ rc_t KFileWriteAll ( KFile *self, uint64_t pos, const uint8_t *buff, size_t size
* num_writ = 0;
return rc;
}
+#endif
static
rc_t KPageBackingWrite ( KPageBacking *self, const void *page, uint32_t pg_id )
@@ -363,10 +367,12 @@ struct KPage
static
rc_t KPageWhack ( KPage *self )
{
- if ( self -> dirty )
- KPageBackingWrite ( self -> backing, self -> page, self -> page_id );
+ if ( self -> backing ) {
+ if ( self -> dirty )
+ KPageBackingWrite ( self -> backing, self -> page, self -> page_id );
+ KPageBackingSever ( self -> backing );
+ }
KPageMemWhack ( self -> page );
- KPageBackingSever ( self -> backing );
free ( self );
return 0;
}
@@ -387,7 +393,8 @@ rc_t KPageNew ( KPage **ppage, KPageBacking *backing, uint32_t page_id )
rc = KPageMemNew ( & page -> page );
if ( rc == 0 )
{
- page -> backing = KPageBackingAttach ( backing );
+ if(backing)page -> backing = KPageBackingAttach ( backing );
+ else page -> backing=NULL;
KRefcountInit ( & page -> refcount, 1, "KPage", "new", "page" );
page -> page_id = page_id;
page -> read_only = false;
@@ -460,7 +467,7 @@ LIB_EXPORT rc_t CC KPageRelease ( const KPage *self )
if ( self != NULL ) switch ( KRefcountDrop ( & self -> refcount, "KPage" ) )
{
case krefOkay:
- if ( self -> dirty && self -> backing -> write_through )
+ if ( self -> dirty && self -> backing && self -> backing -> write_through )
{
rc_t rc = KPageBackingWrite ( self -> backing, self -> page, self -> page_id );
if ( rc != 0 )
@@ -696,7 +703,11 @@ rc_t KPageFileSetPageCount(KPageFile *self,uint32_t count)
}
self->count=count;
if( self -> read_only) return 0;
- return KPageBackingSetSize ( self -> backing, count );
+ if( self -> backing ) return KPageBackingSetSize ( self -> backing, count );
+ else if ( self->count > self->climit ){
+ return RC ( rcFS, rcFile, rcProcessing, rcBuffer, rcExhausted );
+ }
+ return 0;
}
/* Whack
*/
@@ -707,7 +718,7 @@ rc_t KPageFileWhack ( KPageFile *self )
/* first, visit each cached page in flush order */
self->page_idx=KPageFile_whack_recursive(self->page_idx,self->page_idx_depth,0,&self->by_access,&self->ccount);
/* release the backing file */
- KPageBackingRelease ( self -> backing );
+ if(self -> backing) KPageBackingRelease ( self -> backing );
/* delete the object */
free ( self );
return 0;
@@ -800,53 +811,54 @@ LIB_EXPORT rc_t CC KPageFileMakeRead ( const KPageFile **pf,
LIB_EXPORT rc_t CC KPageFileMakeUpdate ( KPageFile **pf,
KFile *backing, size_t climit, bool write_through )
{
- rc_t rc;
+ rc_t rc=0;
if ( pf == NULL )
rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcNull );
else
{
- if ( backing == NULL )
- rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNull );
- else if ( ! backing -> read_enabled )
- {
- if ( backing -> write_enabled )
- rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcWriteonly );
- else
- rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNoPerm );
- }
- else if ( ! backing -> write_enabled )
- rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcReadonly );
- else
+ if ( backing != NULL ){
+ if ( ! backing -> read_enabled )
+ {
+ if ( backing -> write_enabled )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcWriteonly );
+ else
+ rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNoPerm );
+ }
+ else if ( ! backing -> write_enabled )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcReadonly );
+ }
+ if(rc == 0)
{
- KPageBacking *bf = calloc ( 1, sizeof * bf );
- if ( bf == NULL )
- rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
- else
- {
- KPageFile *f = malloc ( sizeof * f );
- if ( f == NULL )
+ KPageFile *f = malloc ( sizeof * f );
+ if ( f == NULL )
rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ f->page_idx=NULL;
+ f->page_idx_depth=0;
+ DLListInit ( & f -> by_access );
+ KRefcountInit ( & f -> refcount, 1, "KPageFile", "make", "pgfile" );
+ f -> count = 0;
+ f -> ccount = 0;
+ f -> climit = ( uint32_t ) ( climit >> PGBITS );
+ if(f -> climit < MIN_CACHE_PAGE) f -> climit = MIN_CACHE_PAGE;
+ f -> read_only = false;
+ f -> backing = NULL; /** for now **/
+ }
+ if(rc == 0 && backing)
+ {
+ KPageBacking *bf = calloc ( 1, sizeof * bf );
+ if ( bf == NULL )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
else
{
rc = KFileAddRef ( backing );
- if ( rc == 0 )
- {
- f->page_idx=NULL;
- f->page_idx_depth=0;
- DLListInit ( & f -> by_access );
- KRefcountInit ( & f -> refcount, 1, "KPageFile", "make", "pgfile" );
- f -> count = 0;
- f -> ccount = 0;
- f -> climit = ( uint32_t ) ( climit >> PGBITS );
- if(f -> climit < MIN_CACHE_PAGE) f -> climit = MIN_CACHE_PAGE;
- f -> read_only = false;
-
+ if(rc == 0)
+ {
/* finish the backing file */
KRefcountInit ( & bf -> refcount, 1, "KPageBacking", "make", "backing" );
- f -> backing = bf;
bf -> write_through = write_through;
-
/* attached reference */
bf -> backing = backing;
@@ -855,23 +867,24 @@ LIB_EXPORT rc_t CC KPageFileMakeUpdate ( KPageFile **pf,
if ( rc == 0 )
{
bf -> have_eof = true;
- rc=KPageFileSetPageCount(f,( uint32_t ) ( ( bf -> eof + PGSIZE - 1 ) >> PGBITS ));
- if(rc!=0) return rc;
}
- * pf = f;
- return 0;
}
-
- free ( f );
}
-
- free ( bf );
+ if (rc == 0){
+ f -> backing = bf;
+ rc=KPageFileSetPageCount(f,( uint32_t ) ( ( bf -> eof + PGSIZE - 1 ) >> PGBITS ));
+ } else if ( bf ){
+ free ( bf );
+ }
}
+ if(rc == 0){
+ * pf = f;
+ } else if (f) {
+ free(f);
+ }
}
-
- * pf = NULL;
+ if(rc != 0) *pf = NULL;
}
-
return rc;
}
@@ -1266,5 +1279,5 @@ LIB_EXPORT rc_t CC KPageFileDropBacking ( KPageFile *self )
if ( self == NULL )
return RC ( rcFS, rcFile, rcDetaching, rcSelf, rcNull );
- return KPageBackingDrop ( self -> backing );
+ return self -> backing?KPageBackingDrop ( self -> backing ):0;
}
diff --git a/libs/kfs/path-priv.h b/libs/kfs/path-priv.h
deleted file mode 100644
index 6f7ef9b..0000000
--- a/libs/kfs/path-priv.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*===========================================================================
-*
-* Public Domain Notice
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_kfs_path_priv_libs_
-#define _h_kfs_path_priv_libs_
-
-#ifndef _h_kfs_extern_
-#include <kfs/extern.h>
-#endif
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#include <kfs/path.h>
-#include <kfs/path-priv.h>
-
-#include <klib/text.h>
-#include <klib/refcount.h>
-#include <klib/container.h>
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {}
-#endif
-
-#ifndef SUPPORT_FILE_URL
-#define SUPPORT_FILE_URL 1
-#endif
-
-#ifndef USE_EXPERIMENTAL_CODE
-#define USE_EXPERIMENTAL_CODE 1
-#endif
-
-#ifdef _DEBUGGING
-#define PATH_DEBUG(msg) DBGMSG(DBG_KFS,DBG_FLAG(DBG_KFS_PATH), msg)
-#else
-#define PATH_DEBUG(msg)
-#endif
-#define OFF_PATH_DEBUG(msg)
-
-#define NCBI_FILE_SCHEME "ncbi-file"
-
-typedef int32_t KPUri_t;
-enum eKPUri_t
-{
- kpuri_invalid = -1,
- kpuri_not_supported,
- kpuri_ncbi_kfs,
-#if SUPPORT_FILE_URL
- kpuri_file,
-#endif
- kpuri_count
-};
-
-typedef struct KPOption KPOption;
-struct KPOption
-{
- BSTNode node;
- KPOption_t name;
- String value;
-/* const char * value; */
-};
-
-struct KPath
-{
- const KPath * root;
- KRefcount refcount;
- String path;
- BSTree options; /* query section of an uri; maybe set other ways as well. */
- char * query;
- char * fragment;
- size_t alloc_size; /* how much extra space allocated for a path too long for the built in buffer */
- size_t asciz_size; /* doubles as allocated size -1 if less than the size of the buffer below */
- char * storage;
-};
-
-
-/* not externally callable */
-rc_t CC KPathTransformSysPath (KPath * self);
-rc_t KPathTransformPathHier (char ** uri_path);
-
-rc_t KPathInitAuthority (KPath * self, char ** next);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_kfs_path_priv_ */
diff --git a/libs/kfs/path.c b/libs/kfs/path.c
deleted file mode 100644
index a39be78..0000000
--- a/libs/kfs/path.c
+++ /dev/null
@@ -1,1669 +0,0 @@
-/*===========================================================================
- *
- * PUBLIC DOMAIN NOTICE
- * National Center for Biotechnology Information
- *
- * This software/database is a "United States Government Work" under the
- * terms of the United States Copyright Act. It was written as part of
- * the author's official duties as a United States Government employee and
- * thus cannot be copyrighted. This software/database is freely available
- * to the public for use. The National Library of Medicine and the U.S.
- * Government have not placed any restriction on its use or reproduction.
- *
- * Although all reasonable efforts have been taken to ensure the accuracy
- * and reliability of the software and data, the NLM and the U.S.
- * Government do not and cannot warrant the performance or results that
- * may be obtained by using this software or data. The NLM and the U.S.
- * Government disclaim all warranties, express or implied, including
- * warranties of performance, merchantability or fitness for any particular
- * purpose.
- *
- * Please cite the author in any work or product based on this material.
- *
- * ===========================================================================
- *
- */
-
-#include <kfs/extern.h>
-#include <os-native.h>
-#include <kfs/path.h>
-#include "path-priv.h"
-#include <kfs/kfs-priv.h>
-
-#include <klib/refcount.h>
-#include <klib/text.h>
-#include <klib/printf.h>
-#include <klib/log.h>
-#include <klib/debug.h>
-#include <klib/rc.h>
-
-#include <stdlib.h>
-#include <string.h>
-/* #include <sysalloc.h> */
-#include <ctype.h>
-#include <assert.h>
-
-rc_t KPOptionMake (KPOption ** new_obj, KPOption_t name, const char * value, size_t size)
-{
- KPOption * obj;
-
- assert (new_obj);
-
- obj = malloc (sizeof (*obj));
- if (obj == NULL)
- return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
-
- obj->name = name;
- StringInit (&obj->value, value, size, string_len (value, size));
- *new_obj = obj;
- return 0;
-}
-
-void CC KPOptionWhack (BSTNode * self, void * ignored)
-{
- free (self);
-}
-
-int CC KPOptionCmp ( const void * item, const BSTNode * n )
-{
- KPOption_t o = (KPOption_t)(size_t)item;
- const KPOption * b = (const KPOption *)n;
-
- return o - b->name;
-}
-
-int CC KPOptionSort ( const BSTNode * item, const BSTNode * n )
-{
- const KPOption * a = (const KPOption *)item;
- const KPOption * b = (const KPOption *)n;
-
- return a->name - b->name;
-}
-
-
-#if 0
-static
-rc_t KPathMakeCanon (KPath * self)
-{
- char * low; /* 'root' location in path */
- char * dst; /* target reference for removing . and .. nodes */
- char * last; /* '/' at end of previous node */
- char * lim; /* '\0' at end of the path string coming in */
-
-
- end = self->path.addr + self->path.size;
- low = self->path.addr;
- if (low[1] == '/') /* path starts with // which we allow in windows */
- ++low;
- dst = last = low;
-
- for (;;)
- {
- char * src; /* '/' or '\0' at end of this path node */
-
- src = strchr (prev + 1, '/');
- if (src == NULL)
- src = lim;
-
- /* detect special sequences based on length of node */
- switch (src-last)
- {
- case 1: /* an empty node name - only allowed in the beginning */
- last = src; /* skip over */
- if (src != lim)
- continue;
- break;
- case 2:
- if (last[1] == '.')
- {
- last = src; /* skip over */
- if (src != lim)
- continue;
- }
- break;
-
- case 3:
- if ((last[1] == '.') && (last[2] == '.'))
- {
- /* remove previous node name */
- dst[0] = '\0';
- dst = strrchr (low, '/');
- if ((dst == NULL) || (dst < low))
- return RC (rcFS, rcPath, rcAccessing, rcPath, rcInvalid);
-
- last = src;
- if (src != lim)
- continue;
- }
- break;
- }
-
- assert (src >= last);
- if (dst != last)
- memmove (dst, last, src-last);
- }
-}
-#endif
-/* Destroy
- */
-rc_t KPathDestroy (const KPath * cself)
-{
- if (cself)
- {
- KPath * self = (KPath*)cself;
- PATH_DEBUG (("-----\n%s: %p %p\n\n", __func__, cself, cself->storage ));
- BSTreeWhack (&self->options, KPOptionWhack, NULL);
- free (self->storage);
- free (self);
- }
- return 0;
-}
-
-
-static const char class_name[] = "KPath";
-
-/* AddRef
- * creates a new reference
- * ignores NULL references
- */
-LIB_EXPORT rc_t CC KPathAddRef ( const KPath *self )
-{
- if ( self != NULL )
- {
- switch (KRefcountAdd (&self->refcount, class_name))
- {
- case krefLimit:
- case krefNegative:
- return RC (rcFS, rcPath, rcAttaching, rcRange, rcInvalid);
- }
- }
- return 0;
-}
-
-
-/* Release
- * discard reference to file
- * ignores NULL references
- */
-LIB_EXPORT rc_t CC KPathRelease ( const KPath *self )
-{
- if ( self != NULL )
- {
- switch (KRefcountDrop (&self->refcount, class_name))
- {
- case krefWhack:
- KPathDestroy (self);
- break;
- case krefLimit:
- case krefNegative:
- return RC (rcFS, rcPath, rcReleasing, rcRange, rcInvalid);
- }
- }
- return 0;
-}
-
-
-#if USE_EXPERIMENTAL_CODE
-/* not fully reselient to bad input */
-static
-char decode_nibble (char c)
-{
- if ((c >= '0') && (c <= '9'))
- return (c - '0');
- if ((c >= 'a') && (c <= 'z'))
- return (c - 'a');
- if ((c >= 'A') && (c <= 'Z'))
- return (c - 'A');
- return (0);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool string_decode (char * p)
-{
- char * q;
- size_t limit;
- size_t ix;
-
- q = p;
- limit = string_size (p);
-
- for (ix = 0; ix < limit; ++ix)
- {
- if (p[0] == '%')
- {
- if ((ix + 2 > limit) || ! isxdigit (p[1]) || ! isxdigit (p[2]))
- return false;
- *q = decode_nibble (p[1]) << 4;
- *q += decode_nibble (p[2]);
- }
- else if (q != p)
- *q = *p;
- ++p;
- ++q;
- }
- if (p != q)
- *q = '\0';
- return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-rc_t StringDecode (String * self)
-{
- size_t limit;
- size_t ix;
- char * p;
- char * q;
-
- p = q = (char *)self->addr;
- limit = self->size;
- for (ix = 0; ix < limit; ++ix)
- {
- if (p[0] == '%')
- {
- if ((ix + 2 > limit) || ! isxdigit (p[1]) || ! isxdigit (p[2]))
- return RC (rcFS, rcPath, rcDecoding, rcPath, rcInvalid);
- *q = decode_nibble (p[1]) << 4;
- *q += decode_nibble (p[2]);
- }
- else if (q != p)
- *q = *p;
- ++p;
- ++q;
- }
- if (p != q)
- {
- *q = '\0';
- self->size = q - self->addr;
- self->len = string_len (self->addr, self->size);
- }
- return 0;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_sub_delim (int ch)
-{
- switch (ch)
- {
- case '!': case '$': case '&': case '\'': case '(': case ')': case '*':
- case '+': case ',': case ';': case '=':
- return true;
- default:
- return false;
- }
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_gen_delim (int ch)
-{
- switch (ch)
- {
- case '"': case '/': case '?': case '#': case '[': case ']': case '@':
- return true;
- default:
- return false;
- }
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_reserved (int ch)
-{
- return is_gen_delim (ch) || is_sub_delim (ch);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_unreserved (int ch)
-{
- return (isalnum (ch) ||
- (ch == '-') ||
- (ch == '.') ||
- (ch == '_') ||
- (ch == '~'));
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_scheme_char (int ch)
-{
- return (isalnum (ch) ||
- (ch == '+') ||
- (ch == '-') ||
- (ch == ','));
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_scheme (const char * str)
-{
- if ( !isalpha (*str++))
- return false;
- while (*str)
- if ( ! is_scheme_char (*str++))
- return false;
- return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_iprivate (int ch )
-{
- return (((ch >= 0x00E000) && (ch <= 0x00F8FF)) ||
- ((ch >= 0x0F0000) && (ch <= 0x0FFFFD)) ||
- ((ch >= 0x100000) && (ch <= 0x10FFFD)));
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ucschar (int ch)
-{
- return (((ch >= 0xA0) && (ch <= 0xD7FF)) ||
- ((ch >= 0xF900) && (ch <= 0xFDCF)) ||
- ((ch >= 0xFDF0) && (ch <= 0xFFEF)) ||
- ((ch >= 0x10000) && (ch <= 0x1FFFD)) ||
- ((ch >= 0x20000) && (ch <= 0x2FFFD)) ||
- ((ch >= 0x30000) && (ch <= 0x3FFFD)) ||
- ((ch >= 0x40000) && (ch <= 0x4FFFD)) ||
- ((ch >= 0x50000) && (ch <= 0x5FFFD)) ||
- ((ch >= 0x60000) && (ch <= 0x6FFFD)) ||
- ((ch >= 0x70000) && (ch <= 0x7FFFD)) ||
- ((ch >= 0x80000) && (ch <= 0x8FFFD)) ||
- ((ch >= 0x90000) && (ch <= 0x9FFFD)) ||
- ((ch >= 0xA0000) && (ch <= 0xAFFFD)) ||
- ((ch >= 0xB0000) && (ch <= 0xBFFFD)) ||
- ((ch >= 0xC0000) && (ch <= 0xCFFFD)) ||
- ((ch >= 0xD0000) && (ch <= 0xDFFFD)) ||
- ((ch >= 0xE0000) && (ch <= 0xEFFFD)));
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_iunreserved (int ch)
-{
- return is_unreserved (ch) || is_ucschar (ch);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipchar (int ch)
-{
- return is_iunreserved (ch) || is_sub_delim (ch) ||
- (ch == ':') || (ch == '@');
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_query (const char * str)
-{
- for ( ; *str; ++str)
- {
- if (! is_ipchar (*str) &&
- ! is_iprivate (*str) &&
- (*str != '/') &&
- (*str != '?'))
- {
- return false;
- }
- }
- return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_fragment (const char * str)
-{
- for ( ; *str; ++str)
- {
- if (! is_ipchar (*str) &&
- ! is_sub_delim (*str) &&
- (*str != '/') &&
- (*str != '?'))
- {
- return false;
- }
- }
- return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_isegment (const char * str, size_t sz)
-{
- const char * end = str + sz;
- size_t ix;
- int cnt;
-
- for (ix = 0; ix < sz; ix += cnt)
- {
- uint32_t ch;
- cnt = utf8_utf32 (&ch, str + ix, end);
- if (cnt <= 0)
- return false;
- if ( ! is_ipchar (ch))
- return false;
- }
- return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_iuserinfo (const char * str)
-{
- for (;;++str)
- {
- if (is_iunreserved (*str))
- ;
- else if (is_sub_delim (*str))
- ;
- else if (*str != ':')
- break;
- }
- return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_ireg_name (const char * str)
-{
- for (;;++str)
- {
- if (is_iunreserved (*str))
- ;
- else if (is_sub_delim (*str))
- ;
- else
- break;
- }
- return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_port (const char * str)
-{
- while (isdigit (*str))
- ++str;
- return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_ihost (const char * str)
-{
- /* not doing ip addresses yet */
-
- return eat_ireg_name (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_iuserinfo_at (const char * str)
-{
- const char * temp = eat_iuserinfo (str);
- if (temp == NULL)
- return temp;
- if (*++temp != '@')
- return NULL;
- return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_iauthority (const char * str)
-{
- const char * temp;
-
- temp = eat_iuserinfo_at (str);
-
- if (temp != NULL)
- str = temp;
-
- temp = eat_ihost (str);
- if (temp == NULL)
- return false;
- str = temp;
-
- if (*str == ':')
- return eat_port (str+1);
-
- return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_file_iauthority (const char * str)
-{
- const char * temp;
-
- temp = eat_ihost (str);
- if (temp == NULL)
- return false;
- return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_isegment (const char * str)
-{
- while (is_ipchar (*str))
- ++str;
- return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_isegment_nz (const char * str)
-{
- const char * temp = eat_isegment (str);
- if (temp == str)
- return NULL;
- return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-const char * eat_isegment_nz_nc (const char * str)
-{
- const char * temp = str;
-
- while (is_iunreserved (*str) ||
- is_sub_delim (*str) ||
- (*str == '@'))
- ++str;
- if (temp == str)
- return false;
- return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_isegment_nz (const char * str, size_t sz)
-{
- if (sz == 0)
- return false;
- return is_isegment (str, sz);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_isegment_nz_nc (const char * str, size_t sz)
-{
- if (sz == 0)
- return false;
- if (string_chr (str, sz, ':') != NULL)
- return false;
- return is_isegment (str, sz);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_ireg_name (const char * str, size_t sz)
-{
- const char * end = str + sz;
- size_t ix;
- int cnt;
-
- for (ix = 0; ix < sz; ix += cnt)
- {
- uint32_t ch;
- cnt = utf8_utf32 (&ch, str + ix, end);
- if (cnt <= 0)
- return false;
- if ( ! is_iunreserved (ch) &&
- ! is_sub_delim (ch))
- return false;
- }
- return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipath_rootless (const char * str);
-static
-bool is_ipath_absolute (const char * str)
-{
- if (*str++ != '/')
- return false;
- return is_ipath_rootless (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipath_empty (const char * str)
-{
- return (*str == '\0');
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipath_abempty (const char * str)
-{
- for (;;)
- {
- if (is_ipath_empty (str))
- return true;
-
- else if (*str++ != '/')
- return false;
-
- else
- {
- const char * temp = eat_isegment (str);
- if (temp == NULL)
- return false;
- str = temp;
- }
- }
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipath_rootless (const char * str)
-{
- str = eat_isegment_nz (str);
- if (str == NULL)
- return false;
-
- return is_ipath_abempty (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_ipath_noscheme (const char * str)
-{
- str = eat_isegment_nz_nc (str);
-
- if (str == NULL)
- return false;
-
- return is_ipath_abempty (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_hier (const char * str)
-{
- if ((str[0] == '/') && (str[1] == '/'))
- {
- const char * temp = eat_iauthority (str);
- if (temp != NULL)
- if (is_ipath_abempty (temp))
- return true;
- }
- if (is_ipath_absolute (str))
- return true;
-
- if (is_ipath_rootless (str))
- return true;
-
- if (is_ipath_empty (str))
- return true;
-
- return false;
-}
-#endif
-
-
-
-#if USE_EXPERIMENTAL_CODE && 0
-/*
- * confusion and ambiguity in the world of RFCs...
- * We're gonna go with the RFC-3987 definition of ihost as ireg-name
- */
-static
-const char * eat_hostname (const char * str)
-{
- /* -----
- * hostname = ireg_name
- * ireg_name = *(iunreserved / pct_encoded / sub_delim
- *
- * legal terminators are NUL or '/'
- */
- while (is_iunreserved (*str) &&
- is_sub_delim (*str))
- ++str;
- switch (*str)
- {
- case '\0':
- case '/':
- return str;
- default:
- return NULL;
- }
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-/* -----
- * number.number.number.numer
- * does not range check number
- * sigh...
- */
-static
-const char * eat_ipv6 (const char * str)
-{
-#if 1
- return NULL; /* not gonna do them yet */
-#else
- const char * temp;
- int digits;
- int colons;
- int doublecolons = 0;
-
- /* non empty first part */
- for (digits = 0; isxdigit (*str); ++str)
- ;
- if ((digits == 0) || (digits > 4))
- return NULL;
-
- if (*str++ != ':')
- return NULL;
-
- for (digits = 0; isxdigit (*str); ++str)
- ;
- if (digits == 0)
- doublecolons = 1;
- else if (digits > 4)
- return NULL;
-
- for (digits = 0; isxdigit (*str); ++str)
- ;
- if (digits == 0)
- {
- if (doublecolons > 0)
- return NULL;
- doublecolons = 1;
- }
- else if (digits > 4)
- return NULL;
-
- for (digits = 0; isxdigit (*str); ++str)
- ;
- if (digits == 0)
- {
- if (doublecolons > 0)
- return NULL;
- doublecolons = 1;
- }
- else if (digits > 4)
- return NULL;
-
-/* ... eeek! */
- return NULL;
-#endif
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-/* -----
- * number.number.number.numer
- * does not range check number
- */
-static
-const char * eat_ipv4 (const char * str)
-{
- do
- if (! isdigit(*str++))
- return NULL;
- while (*str != '.');
- ++str;
- do
- if (! isdigit(*str++))
- return NULL;
- while (*str != '.');
- ++str;
- do
- if (! isdigit(*str++))
- return NULL;
- while (*str != '.');
- ++str;
- do
- if (! isdigit(*str++))
- return NULL;
- while (isdigit (*str));
- return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-const char * eat_hostnumber (const char * str)
-{
- const char * temp;
-
- temp = eat_ipv4 (str);
- if (temp == NULL)
- temp = eat_ipv6 (str);
- return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-const char * eat_host (const char * str)
-{
- const char * temp;
-
- temp = eat_hostnumber (str);
- if (temp == NULL)
- temp = eat_hostname (str);
- return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-const char * eat_fsegment (const char * str)
-{
- for (;;++str)
- {
- if ((*str == '/') ||
- (*str == '\0'))
- {
- break;
- }
- else if ( ! is_ipchar (*str))
- return NULL;
- }
- return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-/* fpath = fsegment *[ "/" fsegment ] */
-static
-bool is_fpath (const char * str)
-{
- for (;;)
- {
- str = eat_fsegment (str);
- if (str == NULL)
- return false;
- if (*str == '\0')
- return true;
- if (*str != '/')
- return false;
- ++str;
- }
- return false; /* unreachable really */
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_file_hier (const char * str)
-{
-#if 0
- const char * temp;
- /*
- * we'll expect the "file://host/fpath"
- * but also accept the inccorect "file:/fpath"
- */
- if (*str++ != '/')
- return false;
-
- if (*str == '/') /* must be correct version */
- {
- ++str;
- temp = eat_host (str);
- if (temp == NULL)
- return false;
- str = temp;
- if (*str++ != '/')
- return false;
- }
- return is_fpath (str);
-#else
- if ((str[0] == '/') && (str[1] == '/'))
- {
- const char * temp = eat_file_iauthority (str);
- if (temp != NULL)
- if (is_ipath_abempty (temp))
- return true;
- }
- if (is_ipath_absolute (str))
- return true;
-
- if (is_ipath_rootless (str))
- return true;
-
- if (is_ipath_empty (str))
- return true;
-
- return false;
-#endif
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_file_query (const char * str)
-{
- return (*str == '\0');
-
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_file_fragment (const char * str)
-{
- return (*str == '\0');
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_kfs_hier (const char * str)
-{
- return is_file_hier (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_kfs_query (const char * str, KPOption ** opt)
-{
- /*
- * query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
- */
- assert (str);
- assert (opt);
-
- switch (tolower (str[0]))
- {
- case 'e':
- if (strncasecmp ("nc", str+1, 2) == 0)
- {
- const char * temp = NULL;
-
- if ((str[3] == '\0') || (str[3] == '&'))
- temp = str + 3;
-
- if ((strncasecmp ("rypt", str+3, 4) == 0) &&
- ((str[7] == '\0') || (str[7] == '&')))
- temp = str + 7;
- if (temp)
- {
- KPOption * o;
- rc_t rc;
-
- rc = KPOptionMake (&o, kpopt_encrypted, temp, 0);
- if (rc)
- return false;
- *opt = o;
- return temp;
- }
- }
- break;
-
- case 'p':
- if (strncasecmp ("wfile=", str + 1, sizeof ("wfile=") - 1) == 0)
- {
- const char * temp1 = str + 1 + sizeof ("wfile=") - 1;
- const char * temp2 = temp1;
-
- while ((*temp1 != '\0') && (*temp1 != '&'))
- ++temp1;
- if (temp1 != temp2)
- {
- KPOption * o;
- rc_t rc;
-
- rc = KPOptionMake (&o, kpopt_pwpath, temp2, temp1-temp2);
- if (rc)
- return false;
- *opt = o;
- return temp1;
- }
- break;
- }
- if (strncasecmp ("wfd=", str + 1, sizeof ("wfd=") - 1) == 0)
- {
- const char * temp1 = str + 1 + sizeof ("wfd=") - 1;
- const char * temp2 = temp1;
- while (isdigit(*temp1))
- ++temp1;
- if (temp1 == temp2)
- break;
- if ((*temp1 == '\0') || (*temp1 == '&'))
- {
- KPOption * o;
- rc_t rc;
-
- rc = KPOptionMake (&o, kpopt_pwfd, temp2, temp1-temp2);
- if (rc)
- return false;
- *opt = o;
- return temp1;
- }
- }
- break;
-
- }
- PATH_DEBUG (("%s: failed '%s'\n",__func__,str));
- return NULL;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_kfs_query (const char * str, BSTree * tree)
-{
- /*
- * query = query_entry [ * ( "&" query_entry ) ]
- *
- * query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
- */
- const char * temp;
-
- if (*str == '\0')
- return true;
-
- for (;;)
- {
- KPOption * o = NULL;
-
- temp = eat_kfs_query (str, &o);
- if ((temp == NULL) || (o == NULL))
- return false;
-
- /* can only have one of these two */
- if ((o->name == kpopt_pwpath) || (o->name == kpopt_pwfd))
- {
- BSTNode * n;
-
- n = BSTreeFind ( tree, (void*)kpopt_pwpath, KPOptionCmp );
- if (n)
- return false;
-
- n = BSTreeFind ( tree, (void*)kpopt_pwfd, KPOptionCmp );
- if (n)
- return false;
-
- if ( BSTreeInsert ( tree, &o->node, KPOptionSort ) != 0)
- return false;
- }
- else if ( o->name == kpopt_encrypted )
- {
- BSTNode * n;
-
- n = BSTreeFind ( tree, (void*)kpopt_pwpath, KPOptionCmp );
- if (n == NULL)
- if ( BSTreeInsert ( tree, &o->node, KPOptionSort ) != 0)
- return false;
- }
- str = temp;
- if (*str == '\0')
- break;
- if (*str == '&')
- /**(char *)str = '\0'*/;
- else
- return false;
- ++str;
- }
- return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_kfs_fragment (const char * str)
-{
- return (*str == '\0');
-}
-#endif
-
-
-#if USE_EXPERIMENTAL_CODE
-#if SUPPORT_FILE_URL
-/*
- * file://host/path bue we allow file:/path
- *
- * RFC-1738
- *
- * fileurl = "file://" [host / "localhost" ] "/" fpath
- */
-static
-rc_t KPathMakeUriFile (KPath * self, char * new_allocation,
- size_t sz, char * hier, char * query,
- char * fragment)
-{
- rc_t rc;
- assert (self);
- assert (new_allocation);
- assert (sz);
- assert (hier);
- assert (query);
- assert (fragment);
-
- if ((!is_file_hier (hier)) ||
- (!is_file_query (query)) ||
- (!is_file_fragment (fragment)))
- {
- return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
- }
-
- free (self->storage);
- self->storage = new_allocation;
- self->alloc_size = sz;
-
- PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
- hier, query, fragment));
- rc = KPathTransformPathHier (&hier);
- PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
- hier, query, fragment));
- if (rc)
- return rc;
- StringInitCString (&self->path, hier);
- self->query = query;
- self->fragment = fragment;
- PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
- &self->path, self->fragment));
- return 0;
-}
-#endif
-#endif
-#if USE_EXPERIMENTAL_CODE
-#if SUPPORT_FILE_URL
-static
-rc_t KPathMakeUriKfs (KPath * self, char * new_allocation,
- size_t sz, char * hier,
- char * query, char * fragment)
-{
- rc_t rc;
- assert (self);
- assert (new_allocation);
- assert (sz);
- assert (hier);
- assert (query);
- assert (fragment);
-
- if (!is_kfs_hier (hier))
- {
- PATH_DEBUG (("%s: failed is_kfs_hier '%s'\n",__func__, hier));
- return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
- }
-
- if (!is_kfs_query (query, &self->options))
- {
- PATH_DEBUG (("%s: failed is_kfs_query '%s'\n",__func__, query));
- return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
- }
-
- if (!is_kfs_fragment (fragment))
- {
- PATH_DEBUG (("%s: failed is_kfs_fragment '%s'\n",__func__, fragment));
- return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
- }
-
- free (self->storage);
- self->storage = new_allocation;
- self->alloc_size = sz;
-
- PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
- hier, query, fragment));
- rc = KPathTransformPathHier (&hier);
- PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
- hier, query, fragment));
- if (rc)
- return rc;
- StringInitCString (&self->path, hier);
- self->fragment = fragment;
- PATH_DEBUG (("%s: path '%S' fragment '%S'\n", __func__,
- &self->path, self->fragment));
- return 0;
-}
-#endif
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-KPUri_t scheme_type (const char * scheme)
-{
- /* We have a "legal" scheme name. We'll only look for specific schemes we
- * support and mark all others as merely unsupported rather than
- * differentiate types we don't care about.
- */
-#if SUPPORT_FILE_URL
- if (strcasecmp ("file", scheme) == 0)
- {
- PATH_DEBUG (("%s: file scheme\n",__func__));
- return kpuri_file;
- }
-#endif
-
- if (strcasecmp (NCBI_FILE_SCHEME, scheme) == 0)
- {
- PATH_DEBUG (("%s: " NCBI_FILE_SCHEME " scheme\n",__func__));
- return kpuri_ncbi_kfs;
- }
-
- return kpuri_not_supported;
-}
-#endif
-
-
-/*
- * See RFC 3986 / RFC 3987
- * We will allow utf-8 in our URI with the extended Unicode characters not
- * required to be %-encoded. We would have to do this encoding if we wish
- * to pass this uri out of our environment.
- *
- * we demand a valid set of characters for the scheme but do no validation
- * of the other parts waiting for a scheme specific parsing
- */
-
-#if USE_EXPERIMENTAL_CODE
-/* pcopy and scheme point to the same place - seems redundant */
-static
-rc_t KPathSplitUri (KPath * self, char ** pcopy, size_t * psiz, char ** scheme, char ** hier,
- char ** query, char ** fragment)
-{
- char * copy;
- size_t z;
-
- assert (self && pcopy && psiz && scheme && hier && query && fragment);
-
- *pcopy = *scheme = *hier = *query = *fragment = NULL;
- *psiz = 0;
-
- z = self->asciz_size + 1;
- copy = malloc (z);
- if (copy == NULL)
- return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
- strcpy (copy, self->storage);
- for (;;)
- {
- char * s; /* start/scheme */
- char * h; /* hier-part */
- char * q; /* query */
- char * f; /* fragment */
- char * e; /* EOS (terminating NUL */
-
- s = copy;
-
- /* point at NUL at end */
- f = q = e = s + strlen (self->storage);
-
- /* find the scheme - terminated by first ':' from the beginning (left) */
- h = strchr (s, ':');
-
- /* scheme must be present as must the ':' and not % encoded
- * and must have some size
- * the character set for scheme is very limited - ASCII Alphanumeric
- * with "-", ",", "_", and "~"
- */
- if ((h == NULL) || (h == s))
- break;
-
- *h++ = '\0';
- if (! is_scheme (s))
- break;
-
- if (h != e)
- {
- f = strchr (h, '#');
-
- if (f == NULL)
- f = e;
- else
- *f++ = '\0';
-
- q = strchr (h, '?');
-
- if (q == NULL)
- q = e;
- else
- *q++ = '\0';
- }
-
- if (! string_decode (h))
- break;
-
- if (! string_decode (q))
- break;
-
- if (! string_decode (f))
- break;
-
- if (! is_hier (h))
- break;
-
- if (! is_query (q))
- break;
-
- if (! is_fragment (f))
- break;
-
- *scheme = s;
- *hier = h;
- *query = q;
- *fragment = f;
- *psiz = z; /* WHAT???? */
- *pcopy = copy;
- return 0;
- }
-
- free (copy);
- return RC (rcFS, rcPath, rcParsing, rcUri, rcInvalid);
-}
-#endif
-
-
-#if USE_EXPERIMENTAL_CODE
-static
-rc_t KPathParseURI (KPath * self)
-{
- char * parsed_uri;
- char * scheme;
- char * hier;
- char * query;
- char * fragment;
- size_t allocated;
- rc_t rc;
-
- rc = KPathSplitUri (self, &parsed_uri, &allocated, &scheme, &hier, &query, &fragment);
- PATH_DEBUG (("%s: allocated %p '%zu'\n",__func__,parsed_uri,allocated));
- if (rc == 0)
- {
- switch (scheme_type (scheme))
- {
- case kpuri_invalid:
- rc = RC (rcFS, rcPath, rcParsing, rcUri, rcInvalid);
- break;
-
- case kpuri_not_supported:
- rc = RC (rcFS, rcPath, rcParsing, rcUri, rcIncorrect);
- break;
-
-#if SUPPORT_FILE_URL
- case kpuri_file:
- PATH_DEBUG (("%s: call KPathMakeUriFile\n",__func__));
- rc = KPathMakeUriFile (self, parsed_uri, allocated, hier, query,
- fragment);
- break;
-#endif
-
- case kpuri_ncbi_kfs:
- PATH_DEBUG (("%s: call KPathMakeUriKfs\n",__func__));
- rc = KPathMakeUriKfs (self, parsed_uri, allocated, hier, query,
- fragment);
- break;
-
- default:
- rc = RC (rcFS, rcPath, rcParsing, rcUri, rcCorrupt);
- break;
- }
- if (rc)
- free (parsed_uri);
- }
- return rc;
-}
-#endif
-
-static
-rc_t KPathAlloc (KPath ** pself, const char * path_string)
-{
- rc_t rc;
- size_t z, zz;
- KPath * self;
-
-
- zz = 1 + (z = string_size (path_string));
-
- OFF_PATH_DEBUG(("%s: %s 'z' '%zu' zz '%zu'\n",__func__,path_string,z,zz));
-
- self = calloc (sizeof (*self), 1);
- if (self == NULL)
- rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
- else
- {
- self->storage = malloc (zz);
- if (self->storage == NULL)
- rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
- else
- {
-
- PATH_DEBUG (("-----\n%s: %p %zu %p %zu\n\n", __func__, self, sizeof (*self),
- self->storage, zz));
- self->alloc_size = zz;
-
- memcpy (self->storage, path_string, zz);
-
- KRefcountInit (&self->refcount, 1, class_name, "init", self->storage);
-
- self->asciz_size = z;
-
- StringInit (&self->path, self->storage, z, string_len(self->storage, z));
-
- BSTreeInit (&self->options);
-
- self->fragment = self->storage + z;
-
- *pself = self;
-
- OFF_PATH_DEBUG (("%s: path '%S'\n", __func__, &self->path));
-
- return 0;
- }
-
- free (self);
- }
- return rc;
-}
-
-
-static
-rc_t KPathMakeValidateParams (KPath ** new_path, const char * path)
-{
- if (new_path == NULL)
- return RC (rcFS, rcPath, rcConstructing, rcSelf, rcNull);
- *new_path = NULL;
- if (path == NULL)
- return RC (rcFS, rcPath, rcConstructing, rcParam, rcNull);
- return 0;
-}
-
-
-LIB_EXPORT rc_t CC KPathMake ( KPath ** new_path, const char * posix_path)
-{
- KPath * self;
- rc_t rc;
-
- rc = KPathMakeValidateParams (new_path, posix_path);
- if (rc == 0)
- {
- rc = KPathAlloc (&self, posix_path);
- if (rc == 0)
- {
-#if USE_EXPERIMENTAL_CODE
- rc = KPathParseURI (self);
-#endif
-
- /* ignore return - if its bad just leave the path alone even if
- * it turns out to be bad later */
- *new_path = self;
- return 0;
- }
- }
- return rc;
-}
-
-
-LIB_EXPORT rc_t CC KPathMakeSysPath ( KPath ** new_path, const char * sys_path)
-{
- KPath * self;
- rc_t rc;
-
- rc = KPathMakeValidateParams (new_path, sys_path);
- if (rc)
- {
- LOGERR (klogErr, rc, "error with KPathMakeValidateParams");
- return rc;
- }
-
- rc = KPathAlloc (&self, sys_path);
- if (rc)
- return rc;
-#if USE_EXPERIMENTAL_CODE
- /* first try as URI then as a system specific path */
- rc = KPathParseURI (self);
- if (rc)
-#endif
- rc = KPathTransformSysPath(self);
-
- if (rc)
- KPathDestroy (self);
- else
- *new_path = self;
- return rc;
-}
-
-
-LIB_EXPORT rc_t CC KPathMakeVFmt ( KPath ** new_path, const char * fmt, va_list args )
-{
- size_t len;
- rc_t rc;
- char buffer [32*1024]; /* okay we really don't want any larger than this I suppose */
-
- rc = KPathMakeValidateParams (new_path, fmt);
- if (rc)
- return rc;
-
- rc = string_printf (buffer, sizeof (buffer), &len, fmt, args);
- if (rc)
- return rc;
-
- if (len >= sizeof buffer)
- return RC (rcFS, rcPath, rcConstructing, rcBuffer, rcInsufficient);
-
- return KPathMake (new_path, buffer);
-}
-
-
-LIB_EXPORT rc_t CC KPathMakeFmt ( KPath ** new_path, const char * fmt, ... )
-{
- rc_t rc;
- va_list args;
-
- va_start (args, fmt);
- rc = KPathMakeVFmt (new_path, fmt, args);
- va_end (args);
-
- return rc;
-}
-
-LIB_EXPORT rc_t CC KPathMakeRelative ( KPath ** new_path, const KPath * base_path,
- const char * relative_path )
-{
- rc_t rc = RC (rcFS, rcPath, rcConstructing, rcFunction, rcUnsupported);
-
-
-
- return rc;
-}
-
-
-LIB_EXPORT rc_t CC KPathMakeCurrentPath ( KPath ** new_path )
-{
- char buff [4096];
- char * a = NULL;
- char * b = buff;
- size_t z;
- rc_t rc;
-
- rc = KPathGetCWD (b, sizeof buff);
- if (rc)
- {
- for (z = 2 * sizeof buff; rc; z += sizeof buff)
- {
- b = realloc (a, z);
- if (b == NULL)
- {
- free (a);
- return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
- }
- rc = KPathGetCWD (b, z);
- }
- }
- rc = KPathMakeSysPath (new_path, b);
- if (b != buff)
- free (b);
- return rc;
-}
-
-/* ----------
- * KPathReadPath
- *
- * Copy the path as a ASCIZ string to the buffer. The form will be the KFS
- * internal "posix-path" form.
- */
-LIB_EXPORT rc_t CC KPathReadPath (const KPath * self, char * buffer, size_t buffer_size,
- size_t * num_read)
-{
- size_t z = StringSize (&self->path);
-
- if (buffer_size < z)
- return RC (rcFS, rcPath, rcReading, rcBuffer, rcInsufficient);
-
-
- PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
- &self->path, self->fragment));
-
- PATH_DEBUG (("%s: should copy '%*.*s' length '%zu'\n", __func__, z, z,
- self->path.addr, z));
- memcpy (buffer, self->path.addr, z);
- if (buffer_size > z)
- buffer[z] = '\0';
- *num_read = z;
-
- PATH_DEBUG (("%s: copied '%*.*s' length '%zu'\n", __func__, z, z,
- buffer, z));
- return 0;
-}
-
-LIB_EXPORT rc_t CC KPathReadQuery (const KPath * self, char * buffer, size_t buffer_size,
- size_t * num_read)
-{
- if (num_read == NULL)
- return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
- *num_read = 0;
-
- if (buffer == NULL)
- return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
-
- if (self == NULL)
- return RC (rcFS, rcPath, rcAccessing, rcSelf, rcNull);
-
- *num_read = string_copy (buffer, buffer_size, self->query,
- self->alloc_size);
- return 0;
-}
-
-LIB_EXPORT rc_t CC KPathReadFragment (const KPath * self, char * buffer, size_t buffer_size,
- size_t * num_read)
-{
- if (num_read == NULL)
- return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
- *num_read = 0;
-
- if (buffer == NULL)
- return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
-
- if (self == NULL)
- return RC (rcFS, rcPath, rcAccessing, rcSelf, rcNull);
-
-
-
- *num_read = string_copy (buffer, buffer_size, self->fragment,
- self->alloc_size);
- return 0;
-}
-
-/* ----------
- */
-LIB_EXPORT rc_t CC KPathOption (const KPath * self, KPOption_t option,
- char * buffer, size_t buffer_size,
- size_t * num_read)
-{
- size_t o = (size_t)option;
- BSTNode * n = BSTreeFind (&self->options, (void*)o, KPOptionCmp);
- KPOption * opt;
-
- if (n == NULL)
- return RC (rcFS, rcPath, rcAccessing, rcParam, rcNotFound);
- opt = (KPOption*)n;
- *num_read = string_copy (buffer, buffer_size, opt->value.addr, opt->value.size);
- return 0;
-}
diff --git a/libs/kfs/quickmount.c b/libs/kfs/quickmount.c
new file mode 100644
index 0000000..83e2297
--- /dev/null
+++ b/libs/kfs/quickmount.c
@@ -0,0 +1,967 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <kfs/extern.h>
+#include <kfs/quickmount.h>
+#include <kfs/directory.h>
+
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+#include <sysalloc.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+/* ----------------------------------------------------------------------
+ *
+ */
+
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+#define KDIR_IMPL struct KQuickMountDir
+#define KNAMELIST_IMPL struct KQuickMountListing
+#include <kfs/impl.h>
+
+/* ======================================================================
+ */
+/*--------------------------------------------------------------------------
+ * KQuickMountDir
+ * a directory inside an archive (tar or SRA for example)
+ *
+ * This type is being engineered to mimic KQuickMountDir.
+ */
+struct KQuickMountDir
+{
+ KDirectory dad;
+ int root;
+ const KFile* file;
+ char * mount;
+ char path[1];
+ /* actual allocation is based on actual string length */
+};
+
+
+
+/* KQuickMountDirCanonPath
+ */
+static
+rc_t KQuickMountDirCanonPath ( const KQuickMountDir *self, enum RCContext ctx, char *path, size_t psize )
+{
+ char *low, *dst, *last, *end = path + psize;
+ low = dst = last = path + self -> root;
+
+ while ( 1 )
+ {
+ char *src = strchr ( last + 1, '/' );
+ if ( src == NULL )
+ src = end;
+
+ /* detect special sequences */
+ switch ( src - last )
+ {
+ case 2:
+ if ( last [ 1 ] == '.' )
+ {
+ /* skip over */
+ last = src;
+ if ( src != end )
+ continue;
+ }
+ break;
+
+ case 3:
+ if ( last [ 1 ] == '.' && last [ 2 ] == '.' )
+ {
+ /* remove previous leaf in path */
+ dst [ 0 ] = 0;
+ dst = strrchr ( path, '/' );
+ if ( dst == NULL || dst < low )
+ return RC ( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
+
+ last = src;
+ if ( src != end )
+ continue;
+ }
+ break;
+ }
+
+ /* if rewriting, copy leaf */
+ assert ( src >= last );
+
+ if ( dst != last )
+ memmove ( dst, last, src - last );
+
+ /* move destination ahead */
+ dst += src - last;
+
+ /* if we're done, go */
+ if ( src == end )
+ break;
+
+ /* find next separator */
+ last = src;
+ }
+
+ /* NUL terminate if modified */
+ if ( dst != end )
+ * dst = 0;
+
+ return 0;
+}
+
+/* KQuickMountDirRelativePath
+ * makes "path" relative to "root"
+ * both "root" and "path" MUST be absolute
+ * both "root" and "path" MUST be canonical, i.e. have no "./" or "../" sequences
+ */
+static
+rc_t KQuickMountDirRelativePath (const KQuickMountDir *self, enum RCContext ctx,
+ const char *root, char *path, size_t path_max)
+{
+ int backup;
+ size_t bsize, psize;
+
+ const char *r = root + self -> root;
+ const char *p = path + self -> root;
+
+ assert ( r != NULL && r [ 0 ] == '/' );
+ assert ( p != NULL && p [ 0 ] == '/' );
+
+ for ( ; * r == * p; ++ r, ++ p )
+ {
+ /* disallow identical paths */
+ if ( * r == 0 )
+ return RC ( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
+ }
+
+ /* paths are identical up to "r","p"
+ if "r" is within a leaf name, then no backup is needed
+ by counting every '/' from "r" to end, obtain backup count */
+ for ( backup = 0; * r != 0; ++ r )
+ {
+ if ( * r == '/' )
+ ++ backup;
+ }
+
+ /* the number of bytes to be inserted */
+ bsize = backup * 3;
+
+ /* align "p" to last directory separator */
+ while ( p [ -1 ] != '/' ) -- p;
+
+ /* the size of the remaining relative path */
+ psize = strlen ( p );
+
+ /* open up space if needed */
+ if ( p - path < bsize )
+ {
+ /* prevent overflow */
+ if ( bsize + psize >= path_max )
+ return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+ memmove ( path + bsize, p, psize + 1 /* 1 for '\0'*/ );
+ }
+
+ /* insert backup sequences */
+ for ( bsize = 0; backup > 0; bsize += 3, -- backup )
+ memcpy ( & path [ bsize ], "../", 3 );
+
+ /* close gap */
+ if ( p - path > bsize )
+ memmove ( & path [ bsize ], p, strlen ( p ) + 1 );
+
+ return 0;
+}
+
+
+
+static __inline__
+rc_t KQuickMountDirVMakePath (const KQuickMountDir * self, enum RCContext ctx,
+ bool canon, char * buffer, size_t path_max,
+ const char * path, va_list args)
+{
+ size_t psize;
+ size_t bsize;
+ rc_t rc;
+
+ if ( path == NULL )
+ return RC ( rcFS, rcDirectory, ctx, rcPath, rcNull );
+ if ( path [ 0 ] == 0 )
+ return RC ( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
+
+ if ( args != NULL && path [ 0 ] == '%' )
+ {
+ rc = string_vprintf (buffer, path_max, &psize, path, args);
+
+ if (psize > path_max)
+ return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+ if (rc)
+ return rc;
+ if ( buffer [ 0 ] != '/' )
+ {
+ bsize = (self->mount - self->path) - 1;
+ if ( bsize + psize >= path_max )
+ return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+ memmove ( buffer + bsize, buffer, psize + 1 );
+ assert ( self -> path [ bsize - 1 ] == '/' );
+ memcpy ( buffer, self -> path, bsize );
+ }
+ else if ( ( bsize = self -> root ) != 0 )
+ {
+ if ( bsize + psize >= path_max )
+ return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+ memmove ( buffer + bsize, buffer, psize + 1 );
+ assert ( self -> path [ bsize - 1 ] != '/' );
+ memcpy ( buffer, self -> path, bsize );
+ }
+ }
+ else
+ {
+ if ( path [ 0 ] != '/' )
+ {
+/* assert ( self -> path [ self -> size - 1 ] == '/' ); */
+ memcpy ( buffer, self -> path, bsize = (self->mount - self->path) - 1 );
+ }
+ else if ( ( bsize = self -> root ) != 0 )
+ {
+ assert ( self -> path [ bsize - 1 ] != '/' );
+ memcpy ( buffer, self -> path, bsize );
+ }
+
+
+ rc = string_vprintf ( buffer + bsize, path_max - bsize, &psize, path, args );
+ if (bsize + psize >= path_max)
+ return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+ if (rc)
+ return rc;
+ }
+
+ if ( buffer [ bsize + psize ] == '/' )
+ buffer [ bsize + -- psize ] = 0;
+
+ if ( psize > 0 && ( canon || self -> root != 0 ) )
+ return KQuickMountDirCanonPath ( self, ctx, buffer, bsize + psize );
+
+ return 0;
+}
+
+
+static __inline__
+rc_t KQuickMountDirMakePath (const KQuickMountDir * self, enum RCContext ctx,
+ bool canon, char * buffer, size_t path_max,
+ const char * path, ...)
+{
+ va_list args;
+ rc_t rc;
+
+ va_start (args, path);
+ rc = KQuickMountDirVMakePath (self, ctx, canon, buffer,
+ path_max, path, args);
+ va_end (args);
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirDestroy
+ */
+static rc_t CC KQuickMountDirDestroy (KQuickMountDir *self)
+{
+ rc_t rc;
+
+ rc = KFileRelease (self->file);
+
+ free (self);
+
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirList
+ * create a directory listing
+ *
+ * "list" [ OUT ] - return parameter for list object
+ *
+ * "path" [ IN, NULL OKAY ] - optional parameter for target
+ * directory. if NULL, interpreted to mean "."
+ *
+ * [RET] rc_t 0 for success; anything else for a failure
+ * see itf/klib/rc.h for general details
+ * [IN] const KQuickMountDir * self Object oriented C; KQuickMountDir object for this method
+ * [OUT] KNamelist ** listp,
+ * [IN] bool (* f )(const KDirectory*,const char *, void *)
+ * [IN] void * data
+ * [IN] const char * path
+ * [IN] va_list args
+ */
+static
+rc_t CC KQuickMountDirList (const KQuickMountDir *self,
+ KNamelist **listp,
+ bool (CC* f) (const KDirectory *dir, const char *name, void *data),
+ void *data,
+ const char *path,
+ va_list args)
+{
+ return RC (rcFS, rcDirectory, rcAccessing, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirVisit
+ * visit each path under designated directory,
+ * recursively if so indicated
+ *
+ * "recurse" [ IN ] - if non-zero, recursively visit sub-directories
+ *
+ * "f" [ IN ] and "data" [ IN, OPAQUE ] - function to execute
+ * on each path. receives a base directory and relative path
+ * for each entry, where each path is also given the leaf name
+ * for convenience. if "f" returns non-zero, the iteration will
+ * terminate and that value will be returned. NB - "dir" will not
+ * be the same as "self".
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native character set
+ */
+static
+rc_t CC KQuickMountDirVisit (const KQuickMountDir *self,
+ bool recurse,
+ rc_t (CC* f) (const KDirectory *, uint32_t, const char *, void *),
+ void *data,
+ const char *path,
+ va_list args)
+{
+ return RC (rcFS, rcDirectory, rcAccessing, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirVisitUpdate
+ */
+static rc_t CC KQuickMountDirVisitUpdate (KQuickMountDir *self,
+ bool recurse,
+ rc_t (CC*f) (KDirectory *,uint32_t,const char *,void *),
+ void *data,
+ const char *path,
+ va_list args)
+{
+ return RC (rcFS, rcDirectory, rcUpdating, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirPathType
+ * returns a KPathType
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native character set
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ *
+ * [RET] uint32_t
+ * [IN] const KQuickMountDir * self Object oriented C; KQuickMountDir object for this method
+ * [IN] const char * path
+ * [IN] va_list args
+ */
+static uint32_t CC KQuickMountDirPathType (const KQuickMountDir *self, const char *path, va_list args)
+{
+ char buff [8192];
+ rc_t rc;
+
+ rc = KQuickMountDirVMakePath (self, rcAccessing, true, buff, sizeof buff, path, args);
+ if (rc)
+ return kptBadPath;
+
+ if (strcmp (buff, self->path) == 0)
+ return kptFile;
+
+ return kptNotFound;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirResolvePath
+ *
+ * resolves path to an absolute or directory-relative path
+ *
+ * [IN] const KQuickMountDir *self Objected oriented self
+ * [IN] bool absolute if non-zero, always give a path starting
+ * with '/'. NB - if the directory is
+ * chroot'd, the absolute path
+ * will still be relative to directory root.
+ * [OUT] char * resolved buffer for NUL terminated result path in
+ * directory-native character set
+ * [IN] size_t rsize limiting size of resolved buffer
+ * [IN] const char * path NUL terminated string in directory-native
+ * character set denoting target path.
+ * NB - need not exist.
+ *
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static rc_t CC KQuickMountDirResolvePath (const KQuickMountDir *self,
+ bool absolute,
+ char *resolved,
+ size_t rsize,
+ const char *path,
+ va_list args)
+{
+ char full [ 8192 ];
+ rc_t rc = KQuickMountDirVMakePath ( self, rcResolving, true, full, sizeof full, path, args );
+ if ( rc == 0 )
+ {
+ uint32_t path_size = strlen ( full );
+
+ if ( absolute )
+ {
+ /* test buffer capacity */
+ if ( path_size - self -> root >= rsize )
+ return RC ( rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+
+ /* ready to go */
+ strcpy ( resolved, & full [ self -> root ] );
+/* assert ( resolved [ 0 ] == '/' ); */
+ }
+ else
+ {
+ rc = KQuickMountDirRelativePath ( self, rcResolving, self -> path, full, sizeof full /*path_size*/ );
+ if ( rc == 0 )
+ {
+ path_size = strlen ( full );
+ if ( path_size >= rsize )
+ return RC ( rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+ strcpy ( resolved, full );
+ }
+ }
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirResolveAlias
+ * resolves an alias path to its immediate target
+ * NB - the resolved path may be yet another alias
+ *
+ * "alias" [ IN ] - NUL terminated string in directory-native
+ * character set denoting an object presumed to be an alias.
+ *
+ * "resolved" [ OUT ] and "rsize" [ IN ] - buffer for
+ * NUL terminated result path in directory-native character set
+ *
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static rc_t CC KQuickMountDirResolveAlias (const KQuickMountDir * self,
+ bool absolute,
+ char * resolved,
+ size_t rsize,
+ const char *alias,
+ va_list args)
+{
+ return RC (rcFS, rcDirectory, rcAccessing, rcFunction, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirRename
+ * rename an object accessible from directory, replacing
+ * any existing target object of the same type
+ *
+ * "from" [ IN ] - NUL terminated string in directory-native
+ * character set denoting existing object
+ *
+ * "to" [ IN ] - NUL terminated string in directory-native
+ * character set denoting existing object
+ */
+static
+rc_t CC KQuickMountDirRename (KQuickMountDir *self, bool force, const char *from, const char *to)
+{
+ assert (self != NULL);
+ assert (from != NULL);
+ assert (to != NULL);
+
+ return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirRemove
+ * remove an accessible object from its directory
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target object
+ *
+ * "force" [ IN ] - if non-zero and target is a directory,
+ * remove recursively
+ */
+static
+rc_t CC KQuickMountDirRemove (KQuickMountDir *self, bool force, const char *path, va_list args)
+{
+ assert (self != NULL);
+ assert (path != NULL);
+
+ return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirClearDir
+ * remove all directory contents
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target directory
+ *
+ * "force" [ IN ] - if non-zero and directory entry is a
+ * sub-directory, remove recursively
+ */
+static
+rc_t CC KQuickMountDirClearDir (KQuickMountDir *self, bool force, const char *path, va_list args)
+{
+ assert (self != NULL);
+ assert (path != NULL);
+
+ return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirAccess
+ * get access to object
+ *
+ * "access" [ OUT ] - return parameter for Unix access mode
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target object
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static rc_t CC KQuickMountDirVAccess (const KQuickMountDir *self,
+ uint32_t *access,
+ const char *path,
+ va_list args)
+{
+ return RC (rcFS, rcDirectory, rcAccessing, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirSetAccess
+ * set access to object a la Unix "chmod"
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target object
+ *
+ * "access" [ IN ] and "mask" [ IN ] - definition of change
+ * where "access" contains new bit values and "mask defines
+ * which bits should be changed.
+ *
+ * "recurse" [ IN ] - if non zero and "path" is a directory,
+ * apply changes recursively.
+ */
+static rc_t CC KQuickMountDirSetAccess (KQuickMountDir *self,
+ bool recurse,
+ uint32_t access,
+ uint32_t mask,
+ const char *path,
+ va_list args)
+{
+ assert (self != NULL);
+ assert (path != NULL);
+
+ return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirCreateAlias
+ * creates a path alias according to create mode
+ *
+ * "targ" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target object
+ *
+ * "alias" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target alias
+ *
+ * "access" [ IN ] - standard Unix directory access mode
+ * used when "mode" has kcmParents set and alias path does
+ * not exist.
+ *
+ * "mode" [ IN ] - a creation mode (see explanation above).
+ */
+static
+rc_t CC KQuickMountDirCreateAlias (KQuickMountDir *self,
+ uint32_t access,
+ KCreateMode mode,
+ const char *targ,
+ const char *alias)
+{
+ assert (self != NULL);
+ assert (targ != NULL);
+ assert (alias != NULL);
+
+ return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirOpenFileRead
+ * opens an existing file with read-only access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static
+rc_t CC KQuickMountDirOpenFileRead (const KQuickMountDir *self,
+ const KFile **f,
+ const char *path,
+ va_list args)
+{
+ return RC (rcFS, rcDirectory, rcOpening, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirOpenFileWrite
+ * opens an existing file with write access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ *
+ * "update" [ IN ] - if non-zero, open in read/write mode
+ * otherwise, open in write-only mode
+ */
+static
+rc_t CC KQuickMountDirOpenFileWrite (KQuickMountDir *self,
+ KFile **f,
+ bool update,
+ const char *path,
+ va_list args)
+{
+ assert (self != NULL);
+ assert (f != NULL);
+ assert (path != NULL);
+
+ return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirCreateFile
+ * opens a file with write access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ *
+ * "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ * "update" [ IN ] - if non-zero, open in read/write mode
+ * otherwise, open in write-only mode
+ *
+ * "mode" [ IN ] - a creation mode (see explanation above).
+ */
+static
+rc_t CC KQuickMountDirCreateFile (KQuickMountDir *self,
+ KFile **f,
+ bool update,
+ uint32_t access,
+ KCreateMode cmode,
+ const char *path,
+ va_list args)
+{
+ assert (self != NULL);
+ assert (f != NULL);
+ assert (path != NULL);
+
+ return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirFileSize
+ * returns size in bytes of target file
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ *
+ * "size" [ OUT ] - return parameter for file size
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static
+rc_t CC KQuickMountDirFileSize (const KQuickMountDir *self,
+ uint64_t *size,
+ const char *path,
+ va_list args)
+{
+ return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirSetFileSize
+ * sets size in bytes of target file
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ *
+ * "size" [ IN ] - new file size
+ */
+static
+rc_t CC KQuickMountDirSetFileSize (KQuickMountDir *self,
+ uint64_t size,
+ const char *path,
+ va_list args)
+{
+ assert (self != NULL);
+ assert (path != NULL);
+
+ return RC (rcFS, rcDirectory, rcWriting, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirOpenDirRead
+ *
+ * opens a sub-directory
+ *
+ * [IN] const KQuickMountDir * self Object Oriented C KQuickMountDir self
+ * [OUT] const KDirectory ** subp Where to put the new KDirectory/KQuickMountDir
+ * [IN] bool chroot Create a chroot cage for this new subdirectory
+ * [IN] const char * path Path to the directory to open
+ * [IN] va_list args So far the only use of args is possible additions to path
+ */
+static
+rc_t CC KQuickMountDirOpenDirRead (const KQuickMountDir *self,
+ const KDirectory **subp,
+ bool chroot,
+ const char *path,
+ va_list args)
+{
+ return RC (rcFS, rcDirectory, rcOpening, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirOpenDirUpdate
+ * opens a sub-directory
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target directory
+ *
+ * "chroot" [ IN ] - if non-zero, the new directory becomes
+ * chroot'd and will interpret paths beginning with '/'
+ * relative to itself.
+ */
+static
+rc_t CC KQuickMountDirOpenDirUpdate (KQuickMountDir *self,
+ KDirectory ** subp,
+ bool chroot,
+ const char *path,
+ va_list args)
+{
+ assert (self != NULL);
+ assert (subp != NULL);
+ assert (path != NULL);
+
+ return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirCreateDir
+ * create a sub-directory
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target directory
+ *
+ * "access" [ IN ] - standard Unix directory permissions
+ *
+ * "mode" [ IN ] - a creation mode (see explanation above).
+ */
+static
+rc_t CC KQuickMountDirCreateDir (KQuickMountDir *self,
+ uint32_t access,
+ KCreateMode mode,
+ const char *path,
+ va_list args)
+{
+ assert (self != NULL);
+ assert (path != NULL);
+
+ return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirDestroyFile
+ */
+#if 0
+static
+rc_t CC KQuickMountDirDestroyFile (KQuickMountDir *self,
+ KFile * f)
+{
+ assert (self != NULL);
+ assert (f != NULL);
+
+ return RC (rcFS, rcDirectory, rcDestroying, rcSelf, rcUnsupported);
+}
+
+
+static rc_t CC KQuickMountDirDate (const KQuickMountDir *self,
+ KTime_t *date,
+ const char *path,
+ va_list args)
+{
+ return RC (rcFS, rcDirectory, rcAccessing, rcSelf, rcUnsupported);
+
+}
+
+
+static rc_t CC KQuickMountDirSetDate (KQuickMountDir *self,
+ bool recurse,
+ KTime_t date,
+ const char *path,
+ va_list args)
+{
+ assert (self != NULL);
+ assert (path != NULL);
+
+ return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+#endif
+
+/* ----------------------------------------------------------------------
+ *
+ */
+static KDirectory_vt_v1 vtKQuickMountDir =
+{
+ /* version 1.0 */
+ 1, 0,
+
+ /* start minor version 0 methods*/
+ KQuickMountDirDestroy,
+ KQuickMountDirList,
+ KQuickMountDirVisit,
+ KQuickMountDirVisitUpdate,
+ KQuickMountDirPathType,
+ KQuickMountDirResolvePath,
+ KQuickMountDirResolveAlias,
+ KQuickMountDirRename,
+ KQuickMountDirRemove,
+ KQuickMountDirClearDir,
+ KQuickMountDirVAccess,
+ KQuickMountDirSetAccess,
+ KQuickMountDirCreateAlias,
+ KQuickMountDirOpenFileRead,
+ KQuickMountDirOpenFileWrite,
+ KQuickMountDirCreateFile,
+ KQuickMountDirFileSize,
+ KQuickMountDirSetFileSize,
+ KQuickMountDirOpenDirRead,
+ KQuickMountDirOpenDirUpdate,
+ KQuickMountDirCreateDir,
+ NULL,
+ /* end minor version 0 methods*/
+ /* start minor version 1 methods*/
+ NULL,
+ NULL,
+ NULL,
+ /* end minor version 2 methods*/
+ NULL,
+ /* end minor version 2 methods*/
+ /* end minor version 3 methods*/
+ NULL,
+ NULL
+ /* end minor version 3 methods*/
+};
+
+
+static KQuickMountDir * KQuickMountDirAlloc (size_t path_size, size_t mount_size)
+{
+ return calloc (sizeof (KQuickMountDir) + path_size + mount_size + 1, 1);
+}
+
+
+KFS_EXTERN rc_t KQuickMountDirMake (const KDirectory * self,
+ const KDirectory ** pnewdir,
+ const KFile * file,
+ const char * path, size_t path_size,
+ const char * mount, size_t mount_size)
+{
+ KQuickMountDir * newdir;
+ char * pc;
+ rc_t rc;
+ bool endslash;
+ char tbuff [8193];
+
+ endslash = path[path_size-1] == '/';
+
+ if (sizeof tbuff - 1 < mount_size)
+ return RC (rcFS, rcDirectory, rcCreating, rcBuffer, rcInsufficient);
+
+ memcpy (tbuff, mount, mount_size);
+ tbuff[mount_size] = '\0';
+
+ while ((pc = strpbrk (tbuff, "\"\\/")) != NULL)
+ *pc = '_';
+
+ rc = KFileAddRef (file);
+ if (rc == 0)
+ {
+ newdir = KQuickMountDirAlloc (path_size, mount_size);
+ if (newdir == NULL)
+ rc = RC (rcFS, rcDirectory, rcAllocating, rcMemory, rcExhausted);
+ else
+ {
+ newdir->file = file;
+ newdir->mount = newdir->path + path_size;
+ rc = KQuickMountDirMakePath (newdir, rcCreating, true, newdir->path,
+ path_size + 1 + mount_size + 1,
+ endslash?"%s%s":"%s/%s", path, tbuff);
+ if (rc == 0)
+ {
+ rc = KDirectoryInit (&newdir->dad, (const KDirectory_vt*) &vtKQuickMountDir,
+ "KQuickMountDir", path?path:"(null)", false);
+ if (rc == 0)
+ {
+ newdir->mount = newdir->path + path_size + 1;
+ newdir->root = 0;
+ *pnewdir = &newdir->dad;
+ return 0;
+ }
+/* rc = RC (rcFS, rcDirectory, rcInitializing, rcObject, rcInvalid); */
+ }
+ KQuickMountDirDestroy (newdir);
+ }
+ KFileRelease (file);
+ }
+ return rc;
+}
+
+
+
+/* end of file quickmount.c */
+
diff --git a/libs/kfs/ramfile.c b/libs/kfs/ramfile.c
new file mode 100644
index 0000000..588ec2e
--- /dev/null
+++ b/libs/kfs/ramfile.c
@@ -0,0 +1,415 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <kfs/extern.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <sysalloc.h>
+#include <kfs/ramfile.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* ======================================================================
+ * KRamFile
+ */
+
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+#define KFILE_IMPL struct KRamFile
+#include <kfs/impl.h>
+
+/*-----------------------------------------------------------------------
+ * KRamFile
+ * A KFile that puts reads and writes into a buffer. The buffer is passed
+ * in so the creator will know where the buffer is.
+ */
+struct KRamFile
+{
+ KFile dad;
+
+ uint64_t pos;
+ uint64_t max_pos;
+ size_t bsize;
+ size_t max;
+ char * buffer;
+};
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *
+ */
+static
+rc_t CC KRamFileDestroy (KRamFile *self)
+{
+ free (self);
+ return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ * returns an underlying system file object
+ * and starting offset to contiguous region
+ * suitable for memory mapping, or RAM if
+ * no such file is available.
+ *
+ * We cant allow memory mapping a tee file as the read?writes ar needed
+ * to trigger the writes to the copy KFile
+ */
+
+static
+struct KSysFile *CC KRamFileGetSysFile (const KRamFile *self, uint64_t *offset)
+{
+ /* parameters must be non-RAM */
+ assert (self != NULL);
+ assert (offset != NULL);
+
+ return NULL;
+}
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ * returns 0 if random access, error code otherwise
+ *
+ * Update needs to be able to seek both original and copy while read
+ * only needs to be able to seek the original.
+ */
+static
+rc_t CC KRamFileRandomAccess (const KRamFile *self)
+{
+ assert (self != NULL);
+ return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * Type
+ * returns a KFileDesc
+ * not intended to be a content type,
+ * but rather an implementation class
+ */
+static
+uint32_t CC KRamFileType (const KRamFile *self)
+{
+ return kfdNull;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ * returns size in bytes of file
+ *
+ * "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KRamFileSize (const KRamFile *self, uint64_t *size)
+{
+ assert (self != NULL);
+ assert (size != NULL);
+
+/* return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported ); */
+ *size = self->max_pos;
+ return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ * sets size in bytes of file
+ *
+ * "size" [ IN ] - new file size
+ */
+static
+rc_t CC KRamFileSetSize (KRamFile *self, uint64_t size)
+{
+/* return RC (rcFS, rcFile, rcUpdating, rcSelf, rcUnsupported); */
+ self->max_pos = size;
+ return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * Read
+ * read file from known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT, RAM OKAY ] - optional return parameter
+ * giving number of bytes actually read
+ *
+ * NOTE: Can not seek;
+ *
+ */
+static
+rc_t CC KRamFileRead (const KRamFile *self,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ assert (self);
+ assert (buffer);
+ assert (num_read);
+ /* no restrictions on pos or bsize */
+
+ if (pos >= self->max_pos)
+ {
+ *num_read = 0;
+ return 0;
+ }
+ else if (pos + bsize > self->max_pos)
+ bsize = self->max_pos - pos;
+
+ /* if we are trying to read outside the current window */
+ else if (self->pos > pos)
+ {
+ /* get some zeros */
+ size_t left_zeroes;
+
+ left_zeroes = self->pos - pos;
+
+ if (left_zeroes >= bsize)
+ left_zeroes = bsize;
+
+ memset (buffer, 0, bsize);
+ }
+ else if (self->pos + self->bsize < pos)
+ memset (buffer, 0, bsize);
+
+ /* so we are inside the current window */
+ else
+ {
+ /* are we trying to go past the window? */
+ if (pos + bsize > self->pos + self->bsize)
+ bsize = (self->pos + self->bsize) - pos;
+
+ memcpy (buffer, self->buffer + (pos - self->pos), bsize);
+ }
+ *num_read = bsize;
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ * write file at known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, RAM OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ *
+ * Always accepts writes and can seek.
+ */
+static
+rc_t CC KRamFileWrite (KRamFile *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *num_writ)
+{
+ char * to;
+
+ /* can't really fail */
+
+ assert (self);
+ assert (buffer);
+ assert (num_writ);
+
+ /* does the write fill the buffer? */
+ if (bsize >= self->max)
+ {
+ /* we can never allow a write larger than the internal buffer */
+ self->pos = pos;
+ self->bsize = bsize = self->max;
+ to = self->buffer;
+ if (self->max_pos < pos + bsize)
+ self->max_pos = pos + bsize;
+ }
+
+ /* else are we seeking forward or backward to completely new or completely
+ * over writing what is there */
+ else if ((self->bsize == 0) || /* currently no buffer */
+ (pos >= (self->pos + self->max)) || /* past current */
+ (pos + self->max <= self->pos) || /* behind current */
+ ((pos <= self->pos) && (pos + bsize >= self->pos + self->bsize)))
+ {
+ /* reset the buffer parameters */
+ self->pos = pos;
+ self->bsize = bsize;
+ if (self->max_pos < pos + bsize)
+ self->max_pos = pos + bsize;
+
+ to = self->buffer;
+ /* clear any unused portion of the buffer */
+ if (self->max > bsize)
+ memset (self->buffer + bsize, 0, self->max - bsize);
+ }
+ else if (pos >= self->pos)
+ {
+ /* if we are reading something at or after what we have now
+ * where the right edge was doesn't matter since we zero fill
+ * in the previous condition and at construction */
+ /* how far into the buffer will we start */
+ size_t poff = pos - self->pos;
+
+ /* do we have to slide the window? This is not optimized */
+ if ((poff != 0) && (poff + bsize > self->max))
+ {
+ size_t m = poff + bsize - self->max;
+ if (self->bsize < self->max)
+ memset (self->buffer + bsize, 0, self->max = self->bsize);
+ /* must use memmove not memcpy */
+ memmove (self->buffer, self->buffer + poff, self->max - pos);
+
+ poff -= m;
+ self->pos -= m;
+ }
+
+ /* check for a new self->bsize */
+ if (poff + bsize > self->bsize)
+ self->bsize = poff + bsize;
+
+ /* check for a new max position */
+ if (self->max_pos < self->pos + self->bsize)
+ self->max_pos = self->pos + self->bsize;
+
+ to = self->buffer + poff;
+ }
+ else
+ {
+ size_t poff = self->pos - pos;
+
+ /* non optimized slide */
+ memmove (self->buffer + poff, self->buffer, self->max - poff);
+ self->pos = pos;
+ self->bsize += poff;
+ if (self->bsize > self->max)
+ self->bsize = self->max;
+ to = self->buffer;
+ }
+ memcpy (to, buffer, bsize);
+ *num_writ = bsize;
+
+ return 0;
+}
+
+
+static const KFile_vt_v1 vtKRamFile =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KRamFileDestroy,
+ KRamFileGetSysFile,
+ KRamFileRandomAccess,
+ KRamFileSize,
+ KRamFileSetSize,
+ KRamFileRead,
+ KRamFileWrite,
+
+ /* 1.1 */
+ KRamFileType
+};
+
+/* ----------------------------------------------------------------------
+ * KRamFileMake
+ * create a new file object
+ */
+static
+rc_t KRamFileMake (KRamFile ** pself, char * buffer, size_t buffer_size, bool r, bool w)
+{
+ rc_t rc;
+ KRamFile * self;
+
+ /* -----
+ */
+ if (pself == NULL)
+ return RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+
+ if (buffer == NULL)
+ return RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+
+ /* we only deny size 0 buffer just to avoid the too weird corner cases */
+ if (buffer_size == 0)
+ return RC (rcFS, rcFile, rcConstructing, rcParam, rcTooShort);
+
+ if (((r != true) && (r != false)) || ((w != true) && (w != false)))
+ return RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+
+ /* -----
+ * get space for the object
+ */
+ self = malloc (sizeof (*self));
+ if (self == NULL) /* allocation failed */
+ {
+ /* fail */
+ rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+ }
+ else
+ {
+ rc = KFileInit (&self->dad, /* initialize base class */
+ (const KFile_vt*)&vtKRamFile, /* VTable for KRamFile */
+ "KRamFile", "ram",
+ r,w);
+ if (rc == 0)
+ {
+ self->pos = self->max_pos = 0;
+ self->max = buffer_size;
+ self->bsize = 0;
+ self->buffer = buffer;
+ *pself = self;
+ return 0;
+ }
+ /* fail */
+ free (self);
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KRamFileMakeRead (const KFile ** self,char * buffer, size_t buffer_size)
+{
+ return KRamFileMake ((KRamFile **)self, buffer, buffer_size, true, false);
+}
+
+LIB_EXPORT rc_t CC KRamFileMakeWrite (KFile ** self, char * buffer, size_t buffer_size)
+{
+ return KRamFileMake ((KRamFile **)self, buffer, buffer_size, false, true);
+}
+
+LIB_EXPORT rc_t CC KRamFileMakeUpdate (KFile ** self, char * buffer, size_t buffer_size)
+{
+ return KRamFileMake ((KRamFile **)self, buffer, buffer_size, true, true);
+}
+
+
+/* end of file ramfile.c */
+
diff --git a/libs/kfs/readheadfile.c b/libs/kfs/readheadfile.c
new file mode 100644
index 0000000..59ab0a5
--- /dev/null
+++ b/libs/kfs/readheadfile.c
@@ -0,0 +1,294 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <kfs/extern.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <kfs/readheadfile.h>
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+/* ======================================================================
+ * KReadHeadFile
+ */
+
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+struct KReadHeadFile;
+#define KFILE_IMPL struct KReadHeadFile
+#include <kfs/impl.h>
+
+
+/*-----------------------------------------------------------------------
+ * KReadHeadFile
+ */
+typedef struct KReadHeadFile
+{
+ KFile dad;
+ uint64_t max_position;
+ const KFile * original;
+ size_t buffer_size;
+ uint8_t buffer [1];
+} KReadHeadFile;
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *
+ */
+static
+rc_t CC KReadHeadFileDestroy (KReadHeadFile *self)
+{
+ rc_t rc;
+
+ rc = KFileRelease (self->original);
+
+ free (self);
+ return rc;
+}
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ * returns an underlying system file object
+ * and starting offset to contiguous region
+ * suitable for memory mapping, or NULL if
+ * no such file is available.
+ *
+ * bytes could not be counted if memory mapped so this is disallowed
+ */
+
+static
+struct KSysFile *CC KReadHeadFileGetSysFile (const KReadHeadFile *self, uint64_t *offset)
+{
+ /* parameters must be non-NULL */
+ assert (self != NULL);
+ assert (offset != NULL);
+
+ return KFileGetSysFile (self->original, offset);
+}
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ * returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KReadHeadFileRandomAccess (const KReadHeadFile *self)
+{
+ return KFileRandomAccess (self->original);
+}
+
+/* ----------------------------------------------------------------------
+ * Type
+ * returns a KFileDesc
+ * not intended to be a content type,
+ * but rather an implementation class
+ */
+static
+uint32_t CC KReadHeadFileType (const KReadHeadFile *self)
+{
+ return KFileType (self->original);
+}
+
+/* ----------------------------------------------------------------------
+ * Size
+ * returns size in bytes of file
+ *
+ * "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KReadHeadFileSize (const KReadHeadFile *self, uint64_t *size)
+{
+ return KFileSize (self->original, size);
+}
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ * sets size in bytes of file
+ *
+ * "size" [ IN ] - new file size
+ */
+static
+rc_t CC KReadHeadFileSetSize (KReadHeadFile *self, uint64_t size)
+{
+ return RC (rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * Read
+ * read file from known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually read
+ */
+static
+rc_t CC KReadHeadFileRead (const KReadHeadFile *cself,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ rc_t rc;
+ size_t valid = 0;
+ size_t this_read;
+ KReadHeadFile *self = (KReadHeadFile *)cself;
+ *num_read = 0;
+
+ /* are we re-reading? */
+ if (pos < self->max_position)
+ {
+ size_t valid = self->max_position - pos;
+
+ if (bsize <= valid)
+ {
+ memmove (buffer, self->buffer + pos, bsize);
+ return 0;
+ }
+
+ memmove (buffer, self->buffer + pos, valid);
+ }
+ rc = KFileRead (self->original, pos + valid, (char *)buffer + valid,
+ bsize - valid, &this_read);
+
+ *num_read = (rc) ? 0 : valid + this_read;
+ return rc;
+}
+
+/* ----------------------------------------------------------------------
+ * Write
+ * write file at known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ *
+ * Unsupported as we now treat archives as READ ONLY
+ */
+static
+rc_t CC KReadHeadFileWrite (KReadHeadFile *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *num_writ)
+{
+ assert ( self != NULL );
+ return RC (rcFS, rcFile, rcWriting, rcFunction, rcUnsupported);
+}
+
+static const KFile_vt_v1 vtKReadHeadFile =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KReadHeadFileDestroy,
+ KReadHeadFileGetSysFile,
+ KReadHeadFileRandomAccess,
+ KReadHeadFileSize,
+ KReadHeadFileSetSize,
+ KReadHeadFileRead,
+ KReadHeadFileWrite,
+
+ /* 1.1 */
+ KReadHeadFileType
+};
+
+
+
+/* ----------------------------------------------------------------------
+ * KReadHeadFileMake
+ * create a new file object
+ */
+
+LIB_EXPORT rc_t CC KFileMakeReadHead (const KFile ** pself,
+ const KFile * original,
+ size_t buffer_size)
+{
+ rc_t rc;
+
+ if (pself == NULL)
+ return RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+
+ *pself = NULL;
+
+ if (original == NULL)
+ return RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+
+ rc = KFileAddRef (original);
+ if (rc)
+ return rc;
+
+ rc = KFileRandomAccess (original);
+
+ /* buffering not needed as existing file is random access */
+ if (rc == 0)
+ {
+ *pself = original;
+ return 0;
+ }
+
+ /* some other failure we'll have to bail on */
+ else if (GetRCState(rc) != rcUnsupported)
+ return rc;
+
+ else
+ {
+ KReadHeadFile * self;
+
+ self = malloc (sizeof (*self) + buffer_size); /* really too much but too hard to tune down accurately */
+ if (self == NULL)
+ return RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+
+ rc = KFileInit (&self->dad, /* initialize base class */
+ (const KFile_vt*)&vtKReadHeadFile,/* VTable for KReadHeadFile */
+ "KReadHeadFile", "no-name",
+ original->read_enabled,
+ false);
+ if (rc == 0)
+ {
+ self->max_position = 0;
+ self->original = original;
+ self->buffer_size = buffer_size;
+ *pself = &self->dad;
+ return 0;
+ }
+ /* fail */
+ free (self);
+ }
+ return rc;
+}
+
+/* end of file countfile.c */
+
diff --git a/libs/kfs/report.c b/libs/kfs/report.c
new file mode 100644
index 0000000..94c6600
--- /dev/null
+++ b/libs/kfs/report.c
@@ -0,0 +1,169 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kfs/extern.h>
+
+#include <klib/klib-priv.h>
+#include <klib/out.h> /* KOutHandlerSet */
+#include <klib/rc.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h> /* KFileWrite */
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h> /* calloc */
+#include <string.h> /* memset */
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+#define report ( * f -> report )
+#define reportData ( * f -> reportData )
+#define reportData1 ( * f -> reportData1 )
+#define reportOpen ( * f -> reportOpen )
+#define reportOpen1 ( * f -> reportOpen1 )
+#define reportClose ( * f -> reportClose )
+#define reportClose1 ( * f -> reportClose1 )
+#define reportError ( * f -> reportError )
+#define reportErrorStr ( * f -> reportErrorStr )
+#define reportErrorStrImpl ( * f -> reportErrorStrImpl )
+#define reportErrorStrInt ( * f -> reportErrorStrInt )
+#define reportError3Str ( * f -> reportError3Str )
+
+#define MAGIC 0x6521
+
+typedef struct SFile {
+ uint64_t magic;
+ KFile* f;
+ uint64_t pos;
+} SFile;
+
+static rc_t CC fileWriter
+(void* data, const char* buffer, size_t bytes, size_t* num_writ)
+{
+ rc_t rc = 0;
+
+ SFile* self = (SFile*)data;
+ size_t dummy;
+ if (num_writ == NULL)
+ { num_writ = &dummy; }
+ *num_writ = 0;
+
+ assert(self);
+ if (self->magic != MAGIC) {
+ return rc;
+ }
+
+ rc = KFileWrite(self->f, self->pos, buffer, bytes, num_writ);
+ self->pos += *num_writ;
+
+ return rc;
+}
+
+rc_t CC ReportRedirect
+( KWrtHandler* handler, const char* filename, bool* to_file, bool finalize )
+{
+ rc_t rc = 0;
+ if (!finalize) {
+ if (handler) {
+ handler->writer = KOutWriterGet();
+ handler->data = KOutDataGet();
+ }
+ if (filename) {
+ KDirectory* dir = NULL;
+ SFile* data = calloc(1, sizeof *data);
+ if (data == NULL) {
+ return RC(rcFS, rcMemory, rcAllocating, rcMemory, rcExhausted);
+ }
+ data->magic = MAGIC;
+ rc = KDirectoryNativeDir(&dir);
+ if (rc == 0) {
+ rc = KDirectoryCreateFile
+ (dir, &data->f, false, 0664, kcmInit, filename);
+ }
+ if (rc == 0) {
+ rc = KOutHandlerSet(fileWriter, data);
+ }
+ RELEASE(KDirectory, dir);
+ }
+ if (rc != 0 || filename == NULL) {
+ KOutHandlerSetStdErr();
+ if (to_file)
+ { *to_file = false; }
+ }
+ else if (to_file)
+ { *to_file = true; }
+
+ }
+ else {
+ void* data = KOutDataGet();
+ SFile* self = (SFile*)data;
+ if (self) {
+ if (self->magic == MAGIC) {
+ RELEASE(KFile, self->f);;
+ }
+ memset(self, 0, sizeof *self);
+ free(self);
+ }
+ if (handler) {
+ KOutHandlerSet(handler->writer, handler->data);
+ }
+ }
+ return rc;
+}
+
+rc_t CC ReportCWD ( const ReportFuncs *f, uint32_t indent )
+{
+ KDirectory *wd;
+ rc_t rc = KDirectoryNativeDir ( & wd );
+ if ( rc != 0 )
+ reportError(indent, rc, "KDirectoryNativeDir");
+ else
+ {
+ char cwd [ PATH_MAX + 1 ];
+ rc = KDirectoryResolvePath ( wd, true, cwd, sizeof cwd, "." );
+ KDirectoryRelease ( wd );
+
+ if ( rc != 0 )
+ reportError(indent, rc, "KDirectoryResolvePath");
+ else
+ reportData(indent, "Cwd", cwd, 0);
+ }
+
+ return rc;
+}
diff --git a/libs/kfs/sra.c b/libs/kfs/sra.c
index 793111c..bb7fb09 100644
--- a/libs/kfs/sra.c
+++ b/libs/kfs/sra.c
@@ -78,7 +78,7 @@ static void SraHeaderInit (KSraHeader * self, size_t treesize, KSRAFileAlignment
self->u.v1.file_offset = add_filler (sizeof * self + treesize, alignment);
}
-LIB_EXPORT rc_t CC SraHeaderMake (KSraHeader ** pself, size_t treesize, KSRAFileAlignment alignment)
+rc_t SraHeaderMake (KSraHeader ** pself, size_t treesize, KSRAFileAlignment alignment)
{
KSraHeader * self = malloc (sizeof (KSraHeader));
if (self == NULL)
@@ -89,7 +89,7 @@ LIB_EXPORT rc_t CC SraHeaderMake (KSraHeader ** pself, size_t treesize, KSRAFile
}
-LIB_EXPORT rc_t CC SraHeaderValidate ( const KSraHeader * self, bool * reverse, uint32_t * _version )
+static rc_t SraHeaderValidate ( const KSraHeader * self, bool * reverse, uint32_t * _version, size_t bytes_available )
{
uint64_t offset;
rc_t rc;
@@ -100,11 +100,17 @@ LIB_EXPORT rc_t CC SraHeaderValidate ( const KSraHeader * self, bool * reverse,
*reverse = false;
if (_version != NULL)
*_version = 0;
+
+ if (bytes_available < 8)
+ return RC (rcFS, rcArc, rcParsing, rcHeader, rcInsufficient);
+
if (memcmp ((void*)self, &ksraheader_v1,
sizeof (ksraheader_v1.ncbi) + sizeof (ksraheader_v1.sra)) != 0)
- {
return RC (rcFS, rcArc, rcParsing, rcHeader, rcInvalid);
- }
+
+ if (bytes_available < 12)
+ return 0;
+
switch (self->byte_order)
{
default:
@@ -118,6 +124,9 @@ LIB_EXPORT rc_t CC SraHeaderValidate ( const KSraHeader * self, bool * reverse,
}
rc = 0;
+ if (bytes_available < 16)
+ return 0;
+
version = rev ? bswap_32 (self->version) : self->version;
offset = rev ? bswap_64 (self->u.v1.file_offset) : self->u.v1.file_offset;
@@ -138,6 +147,8 @@ LIB_EXPORT rc_t CC SraHeaderValidate ( const KSraHeader * self, bool * reverse,
LIB_EXPORT uint64_t CC SraHeaderGetFileOffset ( const KSraHeader * self )
{
+ if ( self -> byte_order == eSraByteOrderReverse )
+ return bswap_64 ( self->u.v1.file_offset );
return self->u.v1.file_offset;
}
@@ -262,7 +273,7 @@ rc_t CC KArcParseSRAInt ( struct KToc * self,
}
/* version is ignored at this point as there is only one version */
- rc = SraHeaderValidate ( &header, &reverse, &version );
+ rc = SraHeaderValidate ( &header, &reverse, &version, sizeof header );
if ( rc != 0 )
{
if ( !silent )
@@ -336,6 +347,14 @@ LIB_EXPORT rc_t CC KArcParseSRAUnbounded ( struct KToc * self,
return KArcParseSRAInt ( self, kvoid, ignored, ignored_data, true, false );
}
+LIB_EXPORT rc_t CC KArcParseSRAUnbounded_silent ( struct KToc * self,
+ const void * kvoid,
+ bool (CC*ignored) (const struct KDirectory*, const char*, void*),
+ void *ignored_data )
+{
+ return KArcParseSRAInt ( self, kvoid, ignored, ignored_data, true, false );
+}
+
LIB_EXPORT rc_t CC KDirectoryVOpenSraArchiveRead ( struct KDirectory const *self,
struct KDirectory const **sra_dir, int chroot, const char *path, va_list args )
@@ -366,17 +385,6 @@ LIB_EXPORT rc_t CC KDirectoryOpenSraArchiveRead ( struct KDirectory const *self,
}
-/* instead of including... source is in arc.c */
-LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead_silent( const KDirectory * self,
- const KDirectory ** pdir,
- bool chroot,
- const char * path,
- KArcFSType baseType,
- rc_t ( CC * parse )( KToc *, const void *,
- bool( CC * )( const KDirectory *, const char *, void * ), void * ),
- bool ( CC * filter )( const KDirectory*, const char *, void *),
- void * filterparam );
-
LIB_EXPORT rc_t CC KDirectoryVOpenSraArchiveRead_silent ( struct KDirectory const *self,
struct KDirectory const **sra_dir, int chroot, const char *path, va_list args )
{
@@ -406,6 +414,35 @@ LIB_EXPORT rc_t CC KDirectoryOpenSraArchiveRead_silent ( struct KDirectory const
}
+LIB_EXPORT rc_t CC KDirectoryVOpenSraArchiveReadUnbounded_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, va_list args )
+{
+ /* respond properly to va_list */
+ char full [ 4096 ];
+ int len = vsnprintf ( full, sizeof full, path, args );
+ if ( len < 0 || len >= sizeof full )
+ return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcExcessive );
+
+ /* putting off parameter validation into this call */
+ return KDirectoryOpenArcDirRead_silent_preopened ( self, sra_dir, false, full, tocKFile,
+ ( void* ) f, KArcParseSRAUnbounded_silent, NULL, NULL );
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryOpenSraArchiveReadUnbounded_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, ... )
+{
+ rc_t rc;
+ va_list args;
+
+ va_start ( args, path );
+ rc = KDirectoryVOpenSraArchiveReadUnbounded_silent_preopened ( self, sra_dir, chroot, f, path, args );
+ va_end ( args );
+
+ return rc;
+}
+
+
LIB_EXPORT rc_t CC KDirectoryVOpenSraArchiveReadUnbounded ( struct KDirectory const *self,
struct KDirectory const **sra_dir, int chroot, const char *path, va_list args )
{
@@ -435,4 +472,14 @@ LIB_EXPORT rc_t CC KDirectoryOpenSraArchiveReadUnbounded ( struct KDirectory con
}
+LIB_EXPORT rc_t CC KFileIsSRA (const char * b, size_t z)
+{
+ const KSraHeader * h = (const KSraHeader *)b;
+
+ if (SraHeaderValidate (h, NULL, NULL, z) == 0)
+ return 0;
+
+ return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcWrongType);
+}
+
/* end of file */
diff --git a/libs/kfs/subfile.c b/libs/kfs/subfile.c
index 969e430..4a3525d 100644
--- a/libs/kfs/subfile.c
+++ b/libs/kfs/subfile.c
@@ -129,6 +129,7 @@ rc_t KSubFileMake (KSubFile ** self,
{
rc = KFileInit (&pF->dad, /* initialize base class */
(const KFile_vt*)&vtKSubFile, /* VTable for KSubFile */
+ "KSubFile", "no-name",
read_enabled, /* read allowed */
write_enabled); /* write disallowed */
if (rc == 0)
@@ -315,22 +316,21 @@ rc_t CC KSubFileWrite (KSubFile *self, uint64_t pos,
const void *buffer, size_t bsize,
size_t *num_writ)
{
- rc_t rc;
+ size_t to_write;
assert (self != NULL);
assert (buffer != NULL);
assert (num_writ != NULL);
*num_writ = 0;
- if (pos > self->size)
- {
- return 0;
- }
+ if (pos >= ( uint64_t ) self->size)
+ return 0;
+
+ to_write = bsize;
if ((pos + bsize) > self->size)
- rc = RC (rcFS, rcFile, rcWriting, rcOffset, rcTooBig);
- else
- rc = KFileWrite (self->original, self->start + pos, buffer, bsize, num_writ);
- return rc;
+ to_write = ( uint64_t ) self -> size - pos;
+
+ return KFileWrite (self->original, self->start + pos, buffer, to_write, num_writ);
}
/* end of file subfile.c */
diff --git a/libs/kfs/tar.c b/libs/kfs/tar.c
index e1307f9..a13da1e 100644
--- a/libs/kfs/tar.c
+++ b/libs/kfs/tar.c
@@ -67,9 +67,8 @@
* Hide any definition of sun that might have come from sun compilers
* or the like
*/
-#ifdef sun
#undef sun
-#endif
+#undef SUN
#define PASTE_2(a,b) a##b
@@ -1024,7 +1023,7 @@ static tar_header_type what_header_type(const tar_header* header)
*/
char temp_str [9];
memset(temp_str,0,sizeof(temp_str));
- strncpy(temp_str,header->posix.magic,8);
+ string_copy(temp_str, sizeof(temp_str), header->posix.magic, 8);
TAR_DEBUG(("%s: unknown header type magic [%s]\n",
__func__, temp_str));
type = TAR_UNDEFINED;
@@ -1397,13 +1396,14 @@ static rc_t pax_xhdr_set_general_string (char ** str, const char * val)
}
else
{
- len = strlen (val) + 1;
+ size_t size;
+ len = string_measure(val, &size) + 1;
}
*str = malloc (len);
if (*str)
{
- strncpy (*str, val, len-1);
- (*str)[len-1] = '\0'; /* if it was a '\n' terminated value this is needed not worth the check if needed */
+ string_copy(*str, len, val, len-1);
+ (*str)[len-1] = '\0'; /* if it was a '\n' terminated value this is needed not worth the check if needed */
}
else
{
@@ -1446,11 +1446,12 @@ LIB_EXPORT rc_t CC pax_xhdr_set_gname(pax_xheader * self, char * new_name)
LIB_EXPORT bool CC pax_xhdr_get_general_string (char**src, char**dst, size_t max)
{
- if (strlen(*src) > max-1) /* fail if too big for target */
+ size_t size;
+ if (string_measure(*src, &size) > max-1) /* fail if too big for target */
{
- return false;
+ return false;
}
- strcpy(*dst,*src);
+ string_copy(*dst, max, *src, size);
return true;
}
@@ -1629,7 +1630,7 @@ rc_t release_map (KTarState * self)
* have to be made to support all manner of extensions.
*/
static
-uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_limit)
+uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_limit, bool silent)
{
/* -----
* full_path will store the full path of an element which can be longer than
@@ -1836,10 +1837,11 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
/* break; */
default:
- PLOGMSG (klogErr,(klogErr,
- "unsupported header type $(type) $(string)",
- "type=%d,string=%s",
- type, get_type_string(type)));
+ if ( ! silent )
+ PLOGMSG (klogErr,(klogErr,
+ "unsupported header type $(type) $(string)",
+ "type=%d,string=%s",
+ type, get_type_string(type)));
done = true;
break;
@@ -1885,7 +1887,7 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
*/
if (full_path[0] == 0) /* if full_path wasn't filled in by an 'L' long name */
{
- size_t len;
+ size_t len, size;
/* -----
* if there is a prefix (POSIX style) use it
* copy the prefix and then concatenate the name field
@@ -1899,12 +1901,12 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
/* -----
* copy in the prefix, force a NUL just in case. then add a directory divider
*/
- strncpy(full_path,current_header.h->posix.prefix,TAR_PREFIX_LEN);
+ string_copy(full_path, sizeof(full_path), current_header.h->posix.prefix, TAR_PREFIX_LEN);
full_path[TAR_PREFIX_LEN] = 0x00;
strcat(full_path,"/");
}
strncat(full_path,current_header.h->tar.name,TAR_NAME_LEN);
- len = strlen (full_path);
+ len = string_measure(full_path, &size);
while (len > 1)
{
if (full_path[len-1] == '/')
@@ -1977,10 +1979,13 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
* If the type is file but the last character in the path is "/"
* treat it as a directory instead
*/
- if (full_path[strlen(full_path)-1] == '/')
- {
- link = LINK_DIRECTORY;
- }
+ {
+ size_t size;
+ if (full_path[string_measure(full_path, &size)-1] == '/')
+ {
+ link = LINK_DIRECTORY;
+ }
+ }
/* fall through */
case LINK_NORMAL_FILE:
case LINK_CONTIGUOUS_FILE:
@@ -1995,7 +2000,7 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
case LINK_SYMBOLIC_LINK:
if (full_link[0] == 0)
{
- strncpy(full_link,current_header.h->tar.linkname,TAR_NAME_LEN);
+ string_copy(full_link, sizeof(full_link), current_header.h->tar.linkname, TAR_NAME_LEN);
}
done = true;
break;
@@ -2072,7 +2077,7 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
if ( (uint64_t)( offset + sizeof( tar_header ) + data_size ) > hard_limit )
return 0;
- strncpy(full_link, (char*)(current_header.b + sizeof(tar_header)), data_size);
+ string_copy(full_link, sizeof(full_link), (char*)(current_header.b + sizeof(tar_header)), data_size);
break;
case LINK_NEXT_LONG_NAME: /* long path name */
/* -----
@@ -2084,7 +2089,7 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
return 0;
}
- strncpy(full_path, (char*)(current_header.b + sizeof(tar_header)), data_size);
+ string_copy(full_path, sizeof(full_path), (char*)(current_header.b + sizeof(tar_header)), data_size);
break;
}
@@ -2119,7 +2124,10 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
switch (type)
{
default:
- PLOGMSG (klogErr,(klogErr,"Unhandled Header Block Type $(type):$(typeint)","type=%c,typeint=%d",type ? type : '0',type));
+ if ( ! silent )
+ {
+ PLOGMSG (klogErr,(klogErr,"Unhandled Header Block Type $(type):$(typeint)","type=%c,typeint=%d",type ? type : '0',type));
+ }
return RC (rcFS, rcArc, rcParsing, rcData, rcUnsupported);
case TAR_ZERO_BLOCK:
/* LOGMSG (klogDebug1, "Zero Block"); */
@@ -2314,7 +2322,7 @@ rc_t KArcParseTAR_intern ( KToc * self,
* OR a negative on a file parse error
* OR zero for a file that would exceed the current window
*/
- used = process_one_entry ( &state, offset, state.buffer_limit );
+ used = process_one_entry ( &state, offset, state.buffer_limit, silent );
if ( used == 0 )
stalled ++;
@@ -2398,17 +2406,6 @@ LIB_EXPORT int CC KDirectoryVOpenTarArchiveRead ( struct KDirectory const *self,
KArcParseTAR, NULL, NULL );
}
-/* instead of including... source is in arc.c */
-LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead_silent( const KDirectory * self,
- const KDirectory ** pdir,
- bool chroot,
- const char * path,
- KArcFSType baseType,
- rc_t ( CC * parse )( KToc *, const void *,
- bool( CC * )( const KDirectory *, const char *, void * ), void * ),
- bool ( CC * filter )( const KDirectory*, const char *, void *),
- void * filterparam );
-
LIB_EXPORT int CC KDirectoryVOpenTarArchiveRead_silent ( struct KDirectory const *self,
struct KDirectory const **tar_dir, int chroot, const char *path, va_list args )
{
@@ -2418,6 +2415,15 @@ LIB_EXPORT int CC KDirectoryVOpenTarArchiveRead_silent ( struct KDirectory const
}
+LIB_EXPORT int CC KDirectoryVOpenTarArchiveRead_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **tar_dir, int chroot, const struct KFile * f, const char *path, va_list args )
+{
+ /* putting off parameter validation into this call */
+ return KDirectoryOpenArcDirRead_silent_preopened ( self, tar_dir, false, path, tocKFile,
+ (void*)f, KArcParseTAR_silent, NULL, NULL );
+}
+
+
LIB_EXPORT int CC KDirectoryOpenTarArchiveRead ( struct KDirectory const *self,
struct KDirectory const **tar_dir, int chroot, const char *path, ... )
{
@@ -2446,6 +2452,20 @@ LIB_EXPORT int CC KDirectoryOpenTarArchiveRead_silent ( struct KDirectory const
}
+LIB_EXPORT int CC KDirectoryOpenTarArchiveRead_silent_preopened ( struct KDirectory const *self,
+ struct KDirectory const **tar_dir, int chroot, const KFile * f, const char *path, ... )
+{
+ rc_t rc;
+ va_list args;
+
+ va_start ( args, path );
+ rc = KDirectoryVOpenTarArchiveRead_silent_preopened ( self, tar_dir, chroot, f, path, args );
+ va_end ( args );
+
+ return rc;
+}
+
+
/* ----------
* Validate that the compiler packed all the character arrays into the correct sizes
* to use the header.
diff --git a/libs/kfs/teefile.c b/libs/kfs/teefile.c
index 3552b1e..17f9d2a 100644
--- a/libs/kfs/teefile.c
+++ b/libs/kfs/teefile.c
@@ -203,6 +203,7 @@ rc_t KTeeFileMake (KTeeFile ** self,
{
rc = KFileInit (&pF->dad, /* initialize base class */
vt, /* VTable for KTeeFile */
+ "KTeeFile", "no-name",
read_enabled, /* read allowed */
write_enabled); /* write disallowed */
if (rc == 0)
diff --git a/libs/kfs/tocentry.c b/libs/kfs/tocentry.c
index 1359501..b2de16b 100644
--- a/libs/kfs/tocentry.c
+++ b/libs/kfs/tocentry.c
@@ -371,7 +371,7 @@ rc_t KTocEntryNewChunked ( KTocEntry ** new_entry,
*
* Then add to that the size in bytes of the chunked data (all 64 bit numbers).
*/
- nsize = ~(sizeof(uint64_t)-1) &
+ nsize = ~( ( size_t ) sizeof(uint64_t)-1) &
(sizeof(KTocEntry)
- sizeof(union KTocEntryUnion)
+ sizeof(struct KTocEntryChunkFile)
@@ -1378,10 +1378,14 @@ bool check_limit (const void * ptr, const void * limit, size_t size)
ptr = *_ptr; \
\
if (rev) \
- *pout = S (*ptr++); \
+ { \
+ T t; \
+ memcpy (&t, ptr, sizeof (T)); \
+ *pout = S (t); \
+ } \
else \
- *pout = *ptr++; \
- *_ptr = ptr; \
+ memcpy (pout, ptr, sizeof (T)); \
+ *_ptr = ++ptr; \
return 0; \
}
@@ -1445,6 +1449,7 @@ rc_t KTocEntryInflateNodeCommon (const void ** ptr,
memcpy (common->name+plen+1, *ptr, nlen);
common->name[plen + nlen + 1] = '\0';
}
+
*ptr = ((uint8_t*)*ptr) + nlen;
rc = read_i64 (ptr, limit, rev, &common->mtime);
@@ -1717,27 +1722,23 @@ rc_t KTocInflatePBSTree ( KToc * self, uint64_t arcsize, const void * treestart,
rc_t rc;
PBSTree * pbst;
- /* TBD - need to make this know about byte-swapping */
- bool byteswap = false;
-
- rc = PBSTreeMake (&pbst, treestart, maxsize, byteswap);
+ rc = PBSTreeMake (&pbst, treestart, maxsize, rev);
if (rc == 0)
{
- KTocEntryInflateData data;
+ KTocEntryInflateData data;
- data.toc = self;
- data.path = path;
+ data.toc = self;
+ data.path = path;
data.arcsize = arcsize;
- data.rc = 0;
- data.rev = rev;
- data.offset = offset;
-
- PBSTreeForEach (pbst, false, KTocEntryInflate, &data);
-
- rc = data.rc;
+ data.rc = 0;
+ data.rev = rev;
+ data.offset = offset;
+
+ PBSTreeForEach (pbst, false, KTocEntryInflate, &data);
+ rc = data.rc;
- free (pbst);
+ PBSTreeWhack (pbst);
}
return rc;
}
diff --git a/libs/kfs/tocfile.c b/libs/kfs/tocfile.c
index c1bc0ee..66cbcda 100644
--- a/libs/kfs/tocfile.c
+++ b/libs/kfs/tocfile.c
@@ -531,7 +531,7 @@ LIB_EXPORT rc_t CC KTocFileMake ( const KFile ** pself,
}
else
{
- rc = KFileInit (&self->dad, (const KFile_vt*)&vtKTocFile, true, false);
+ rc = KFileInit (&self->dad, (const KFile_vt*)&vtKTocFile, "KTocFile", "no-name", true, false);
if (rc != 0)
{
LOGERR (klogErr, rc, "Init failure in KTocFileMake");
diff --git a/libs/kfs/unix/sysdir-priv.h b/libs/kfs/unix/sysdir-priv.h
index ae0cac0..ceebc8e 100644
--- a/libs/kfs/unix/sysdir-priv.h
+++ b/libs/kfs/unix/sysdir-priv.h
@@ -61,15 +61,6 @@ typedef struct KSysDir KSysDir;
rc_t KSysDirMakePath ( struct KSysDir const *self, enum RCContext ctx, bool canon,
char *buffer, size_t path_max, const char *path, va_list args );
-
-/* RealPath
- * returns a real OS path
- */
-rc_t KSysDirRealPath ( const KSysDir *self,
- char *real, size_t bsize, const char *path, ... );
-rc_t KSysDirVRealPath ( const KSysDir *self,
- char *real, size_t bsize, const char *path, va_list args );
-
#ifdef __cplusplus
}
#endif
diff --git a/libs/kfs/unix/sysdir.c b/libs/kfs/unix/sysdir.c
index 9442e6f..fb450fa 100644
--- a/libs/kfs/unix/sysdir.c
+++ b/libs/kfs/unix/sysdir.c
@@ -43,8 +43,11 @@ struct KSysDirListing;
#include <klib/log.h>
#include <klib/out.h>
#include <klib/rc.h>
+#include <klib/klib-priv.h>
#include <sysalloc.h>
+#include "os-native.h"
+
#ifndef __USE_UNIX98
#define __USE_UNIX98 1
#endif
@@ -474,7 +477,8 @@ rc_t KSysDirMakePath ( const KSysDir *self, enum RCContext ctx, bool canon,
return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
}
- if ( buffer [ bsize + psize ] == '/' )
+ /* remove trailing slashes; keep the leading slash */
+ while ( bsize + psize > 1 && buffer [ bsize + psize - 1] == '/' )
buffer [ bsize + -- psize ] = 0;
if ( psize > 0 && ( canon || self -> root != 0 ) )
@@ -848,7 +852,7 @@ rc_t KSysDirResolvePath ( const KSysDir *self, bool absolute,
/* ready to go */
strcpy ( resolved, & full [ self -> root ] );
- assert ( resolved [ 0 ] == '/' );
+/* assert ( resolved [ 0 ] == '/' ); */
}
else
{
@@ -1011,6 +1015,9 @@ rc_t KSysDirRename ( KSysDir *self, bool force, const char *from, const char *to
case ENOMEM:
rc = RC ( rcFS, rcDirectory, rcRenaming, rcMemory, rcExhausted );
break;
+ case ENOENT:
+ rc = RC ( rcFS, rcDirectory, rcRenaming, rcPath, rcNotFound );
+ break;
default:
rc = RC ( rcFS, rcDirectory, rcRenaming, rcNoObj, rcUnknown );
break;
@@ -1175,6 +1182,7 @@ rc_t KSysDirRemoveEntry ( char *path, size_t path_max, bool force )
while ( rmdir ( path ) != 0 ) switch ( errno )
{
+ case EEXIST:
case ENOTEMPTY:
if ( force )
{
@@ -1695,39 +1703,47 @@ rc_t KSysDirCreateParents ( const KSysDir *self,
return rc;
}
-/* KSysDirCreateAlias
+/* CreateAlias
* creates a path alias according to create mode
- *
- * "targ" [ IN ] - NUL terminated string in directory-native
- * character set denoting target object
- *
- * "alias" [ IN ] - NUL terminated string in directory-native
- * character set denoting target alias
+ * such that "alias" => "targ"
*
* "access" [ IN ] - standard Unix directory access mode
* used when "mode" has kcmParents set and alias path does
* not exist.
*
* "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ * "targ" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target object, i.e. the object which
+ * is designated by symlink "alias".
+ *
+ * "alias" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target alias, i.e. the symlink that
+ * designates a target "targ".
*/
static
rc_t KSysDirCreateAlias ( KSysDir *self,
uint32_t access, KCreateMode mode,
const char *targ, const char *alias )
{
- char ftarg [ PATH_MAX ];
- rc_t rc = KSysDirMakePath ( self, rcCreating, true, ftarg, sizeof ftarg, targ, NULL );
+ /* create full path to symlink */
+ char falias [ PATH_MAX ];
+ rc_t rc = KSysDirMakePath ( self, rcCreating, true, falias, sizeof falias, alias, NULL );
if ( rc == 0 )
{
- char falias [ PATH_MAX ];
- rc = KSysDirMakePath ( self, rcCreating, true, falias, sizeof falias, alias, NULL );
+ /* the full path to target RELATIVE TO self */
+ char ftarg [ PATH_MAX ];
+ rc = KSysDirMakePath ( self, rcCreating, true, ftarg, sizeof ftarg, targ, NULL );
if ( rc == 0 )
{
- /* if "alias" is relative or "self" is chroot'd,
- "falias" must be made relative */
- if ( alias [ 0 ] != '/' || self -> root != 0 )
+ /* if "targ" is relative or "self" is chroot'd,
+ "ftarg" must be made relative */
+ if ( targ [ 0 ] != '/' || self -> root != 0 )
{
- rc = KSysDirRelativePath ( self, rcCreating, falias, ftarg, sizeof ftarg /*strlen ( ftarg )*/ );
+ /* take path to alias as root.
+ generate a path RELATIVE TO alias */
+ rc = KSysDirRelativePath ( self, rcCreating, falias,
+ ftarg, sizeof ftarg /*strlen ( ftarg )*/ );
if ( rc != 0 )
return rc;
}
@@ -1742,9 +1758,12 @@ rc_t KSysDirCreateAlias ( KSysDir *self,
create-only, force creation by removing old */
if ( ( mode & kcmValueMask ) != kcmCreate )
{
+ /* refuse to drop if not an alias */
if ( ( KSysDirFullPathType ( falias ) & kptAlias ) == 0 )
return RC ( rcFS, rcDirectory, rcCreating, rcPath, rcIncorrect );
- rc = KSysDirRemoveEntry ( falias, sizeof falias, 0 );
+
+ /* drop existing alias */
+ rc = KSysDirRemoveEntry ( falias, sizeof falias, false );
if ( rc == 0 )
break;
}
@@ -1835,7 +1854,7 @@ rc_t KSysDirOpenFileRead ( const KSysDir *self,
return RC ( rcFS, rcDirectory, rcOpening, rcNoObj, rcUnknown );
}
- rc = KSysFileMake ( ( KSysFile** ) f, fd, true, false );
+ rc = KSysFileMake ( ( KSysFile** ) f, fd, full, true, false );
if ( rc != 0 )
close ( fd );
}
@@ -1885,7 +1904,7 @@ rc_t KSysDirOpenFileWrite ( KSysDir *self,
return RC ( rcFS, rcDirectory, rcOpening, rcNoObj, rcUnknown );
}
- rc = KSysFileMake ( ( KSysFile** ) f, fd, update, 1 );
+ rc = KSysFileMake ( ( KSysFile** ) f, fd, full, update, 1 );
if ( rc != 0 )
close ( fd );
}
@@ -1938,6 +1957,8 @@ rc_t KSysDirCreateFile ( KSysDir *self, KFile **f, bool update,
wherever there is read or write on file */
uint32_t dir_access = access |
( ( access & 0444 ) >> 2 ) | ( ( access & 0222 ) >> 1 );
+ /* NEW 2/15/2013 - also force read */
+ dir_access |= ( dir_access & 0111 ) << 2;
KSysDirCreateParents ( self, full, dir_access, true );
/* try again */
@@ -1994,11 +2015,16 @@ rc_t KSysDirCreateFile ( KSysDir *self, KFile **f, bool update,
rc = RC ( rcFS, rcDirectory, rcCreating, rcNoObj, rcUnknown );
break;
}
- PLOGERR (klogErr, (klogErr, rc, "failed to create '$(F)'", "F=%s", full));
+
+ /* disabled 12/12/2012 : it prints an error message, if vdb tries to open
+ the same reference-object twice via http. The lock-file for the 2nd try
+ does already exist. This is not an error, just a condition. */
+
+ /* PLOGERR (klogErr, (klogErr, rc, "failed to create '$(F)'", "F=%s", full)); */
return rc;
}
- rc = KSysFileMake ( ( KSysFile** ) f, fd, update, true );
+ rc = KSysFileMake ( ( KSysFile** ) f, fd, full, update, true );
if ( rc != 0 )
close ( fd );
}
@@ -2117,10 +2143,15 @@ rc_t KSysDirOpenDirRead ( const KSysDir *self,
size_t path_size = strlen ( full );
while ( path_size > 1 && full [ path_size - 1 ] == '/' )
full [ -- path_size ] = 0;
-
- if ( ( KSysDirFullPathType ( full ) & ( kptAlias - 1 ) ) != kptDir )
- return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcIncorrect );
-
+
+ {
+ int t = KSysDirFullPathType ( full ) & ( kptAlias - 1 );
+ if ( t == kptNotFound )
+ return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcNotFound );
+ if ( t != kptDir )
+ return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcIncorrect );
+ }
+
sub = KSysDirMake ( path_size );
if ( sub == NULL )
rc = RC ( rcFS, rcDirectory, rcOpening, rcMemory, rcExhausted );
@@ -2317,6 +2348,10 @@ rc_t KSysDirInit ( KSysDir *self, enum RCContext ctx, uint32_t dad_root,
return 0;
}
+extern rc_t CC ReportCWD ( const ReportFuncs *f, uint32_t indent );
+extern rc_t CC ReportRedirect ( KWrtHandler* handler,
+ const char* filename, bool* to_file, bool finalize );
+
LIB_EXPORT rc_t CC KDirectoryNativeDir ( KDirectory **dirp )
{
rc_t rc;
@@ -2324,6 +2359,13 @@ LIB_EXPORT rc_t CC KDirectoryNativeDir ( KDirectory **dirp )
uint32_t size;
char wd [ PATH_MAX ];
+ static bool latch;
+ if ( ! latch )
+ {
+ ReportInitKFS ( ReportCWD, ReportRedirect );
+ latch = true;
+ }
+
if ( dirp == NULL )
return RC ( rcFS, rcDirectory, rcAccessing, rcParam, rcNull );
diff --git a/libs/kfs/unix/sysdll.c b/libs/kfs/unix/sysdll.c
index 3aa13cc..802a324 100644
--- a/libs/kfs/unix/sysdll.c
+++ b/libs/kfs/unix/sysdll.c
@@ -43,6 +43,8 @@
#include <klib/rc.h>
#include <sysalloc.h>
+#include "os-native.h"
+
/* old Sun includes won't define PATH_MAX */
#ifndef __XOPEN_OR_POSIX
@@ -59,11 +61,6 @@
#include <errno.h>
#include <assert.h>
-/* turn on dladdr for GNU and Darwin */
-#if ! defined _GNU_SOURCE && ! defined _DARWIN_C_SOURCE
-#define _GNU_SOURCE
-#define _DARWIN_C_SOURCE
-#endif
#include <dlfcn.h>
@@ -293,7 +290,7 @@ LIB_EXPORT rc_t CC KDyldHomeDirectory ( const KDyld *self, const KDirectory **di
{
Dl_info info;
memset ( & info, 0, sizeof info );
- if ( dladdr ( ( const void* ) func, & info ) == 0 )
+ if ( dladdr ( ( void* ) func, & info ) == 0 )
rc = RC ( rcFS, rcDylib, rcSearching, rcFunction, rcNotFound );
else
{
@@ -355,11 +352,21 @@ LIB_EXPORT rc_t CC KDyldHomeDirectory ( const KDyld *self, const KDirectory **di
path_type = KDirectoryPathType ( wd, thanks_for_brilliant_APIs );
if ( ( path_type & ~ kptAlias ) == kptFile )
{
- /* this is a file, which can be assumed to be an executable */
- dli_fname = thanks_for_brilliant_APIs;
- last_slash = & thanks_for_brilliant_APIs [ last_slash - path_start ];
- rc = 0;
- break;
+ uint32_t access = 0;
+ rc = KDirectoryAccess ( wd, & access, thanks_for_brilliant_APIs );
+ if ( rc != 0 )
+ break;
+
+ /* try to do a quick check that the file can be executed.
+ but it could fail to do the right guess. */
+ if ( access & 0100 || access & 0010 || access & 0001 ) {
+ /* this is a file, which can be assumed to be an executable */
+ dli_fname = thanks_for_brilliant_APIs;
+ last_slash
+ = & thanks_for_brilliant_APIs [ last_slash - path_start ];
+ rc = 0;
+ break;
+ }
}
}
@@ -414,7 +421,7 @@ rc_t KDylibWhack ( KDylib *self )
/* Darwin, especially before 10.5 doesn't/didn't do this well */
-#if MAC
+#if ! MAC
/* try to close library */
if ( dlclose ( self -> handle ) )
{
@@ -458,9 +465,10 @@ rc_t KDylibSetLogging ( const KDylib *self )
{
rc_t ( CC * set_formatter ) ( KFmtWriter writer, KLogFmtFlags flags, void *data );
rc_t ( CC * set_writer ) ( KWrtWriter writer, void *data );
+ rc_t ( CC * set_level ) ( KLogLevel lvl );
/* set the current logging level */
- rc_t ( CC * set_level ) ( KLogLevel lvl ) = dlsym ( self -> handle, "KLogLevelSet" );
+ set_level = ( rc_t ( * ) ( KLogLevel ) ) dlsym ( self -> handle, "KLogLevelSet" );
if ( set_level != NULL )
{
KLogLevel lvl = KLogLevelGet ();
@@ -468,37 +476,37 @@ rc_t KDylibSetLogging ( const KDylib *self )
}
/* determine current library logging */
- set_writer = dlsym ( self -> handle, "KOutHandlerSet" );
+ set_writer = ( rc_t ( * ) ( KWrtWriter, void* ) ) dlsym ( self -> handle, "KOutHandlerSet" );
if ( set_writer != NULL ) {
const KWrtHandler* handler = KOutHandlerGet ();
( * set_writer ) ( handler -> writer, handler -> data );
}
- set_formatter = dlsym ( self -> handle, "KLogLibFmtHandlerSet" );
+ set_formatter = ( rc_t ( * ) ( KFmtWriter, KLogFmtFlags, void* ) ) dlsym ( self -> handle, "KLogLibFmtHandlerSet" );
if ( set_formatter != NULL ) {
KLogFmtFlags flags = KLogLibFmtFlagsGet ();
const KFmtHandler* fmt_handler = KLogFmtHandlerGet ();
( * set_formatter ) ( fmt_handler -> formatter, flags, fmt_handler -> data );
}
- set_writer = dlsym ( self -> handle, "KLogLibHandlerSet" );
+ set_writer = ( rc_t ( * ) ( KWrtWriter, void* ) ) dlsym ( self -> handle, "KLogLibHandlerSet" );
if ( set_writer != NULL ) {
const KWrtHandler* handler = KLogLibHandlerGet ();
( * set_writer ) ( handler -> writer, handler -> data );
}
- set_formatter = dlsym ( self -> handle, "KStsLibFmtHandlerSet" );
+ set_formatter = ( rc_t ( * ) ( KFmtWriter, KLogFmtFlags, void* ) ) dlsym ( self -> handle, "KStsLibFmtHandlerSet" );
if ( set_formatter != NULL ) {
KStsFmtFlags flags = KStsLibFmtFlagsGet ();
const KFmtHandler* fmt_handler = KStsFmtHandlerGet ();
( * set_formatter ) ( fmt_handler -> formatter, flags, fmt_handler -> data );
}
- set_writer = dlsym ( self -> handle, "KStsLibHandlerSet" );
+ set_writer = ( rc_t ( * ) ( KWrtWriter, void* ) ) dlsym ( self -> handle, "KStsLibHandlerSet" );
if ( set_writer != NULL ) {
const KWrtHandler* handler = KStsLibHandlerGet ();
( * set_writer ) ( handler -> writer, handler -> data );
}
#if _DEBUGGING
- set_writer = dlsym ( self -> handle, "KDbgHandlerSet" );
+ set_writer = ( rc_t ( * ) ( KWrtWriter, void* ) ) dlsym ( self -> handle, "KDbgHandlerSet" );
if ( set_writer != NULL ) {
const KWrtHandler* handler = KDbgHandlerGet ();
( * set_writer ) ( handler -> writer, handler -> data );
@@ -839,7 +847,8 @@ rc_t KDlsetWhack ( KDlset *self )
return 0;
}
-
+#define STRINGIZE(s) #s
+#define LIBNAME(pref, name, suff) STRINGIZE(pref) name STRINGIZE(suff)
/* MakeSet
* load a dynamic library
*
@@ -847,7 +856,7 @@ rc_t KDlsetWhack ( KDlset *self )
*/
LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
{
- rc_t rc;
+ rc_t rc = 0;
if ( setp == NULL )
rc = RC ( rcFS, rcDylib, rcConstructing, rcParam, rcNull );
@@ -867,8 +876,20 @@ LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
VectorInit ( & set -> ord, 0, 16 );
KRefcountInit ( & set -> refcount, 1, "KDlset", "make", "dlset" );
#if ! ALWAYS_ADD_EXE
- * setp = set;
- return 0;
+ {
+ KDylib *jni;
+ const char* libname = LIBNAME(LIBPREFIX, "vdb_jni.", SHLIBEXT);
+ if ( KDyldLoadLib ( ( KDyld* ) self, & jni, libname ) == 0 )
+ {
+ rc = KDlsetAddLib ( set, jni );
+ KDylibRelease ( jni );
+ }
+ if (rc == 0)
+ {
+ * setp = set;
+ return 0;
+ }
+ }
#else
{
KDylib *exe;
@@ -884,9 +905,8 @@ LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
}
}
}
-
- KDlsetRelease ( set );
#endif
+ KDlsetRelease ( set );
}
}
@@ -1332,6 +1352,56 @@ LIB_EXPORT rc_t CC KDlsetLastSymbol ( const KDlset *self, KSymAddr **sym, const
}
+/* List - PRIVATE
+ * list the paths to the libraries in the set
+ */
+typedef struct list_dylib_param list_dylib_param;
+struct list_dylib_param
+{
+ VNamelist *list;
+ rc_t rc;
+};
+
+static
+bool CC list_dylib ( void *item, void *data )
+{
+ list_dylib_param *pb = data;
+ const KDylib *lib = ( const void* ) item;
+
+ /* "lib" was created with KDylibMake
+ which creates a NUL terminated path.
+ of course, this could seg-fault if bad... */
+ assert ( lib -> path . addr [ lib -> path . size ] == 0 );
+
+ pb -> rc = VNamelistAppend ( pb -> list, lib -> path . addr );
+ return pb -> rc != 0;
+}
+
+LIB_EXPORT rc_t CC KDlsetList ( const KDlset *self, KNamelist **listp )
+{
+ list_dylib_param pb;
+
+ assert ( listp != NULL );
+
+ if ( self == NULL )
+ pb . rc = RC ( rcFS, rcDylib, rcListing, rcSelf, rcNull );
+ else
+ {
+ pb . rc = VNamelistMake ( & pb . list, VectorLength ( & self -> name ) );
+ if ( pb . rc == 0 )
+ {
+ bool fail = VectorDoUntil ( & self -> name, false, list_dylib, & pb );
+ if ( ! fail )
+ pb . rc = VNamelistToNamelist ( pb . list, listp );
+
+ VNamelistRelease ( pb . list );
+ }
+ }
+
+ return pb . rc;
+}
+
+
/* AsObj
* AsFunc
* retrieve symbol address as pointer to object
diff --git a/libs/kfs/unix/sysfile-priv.h b/libs/kfs/unix/sysfile-priv.h
index f6db460..34d2a40 100644
--- a/libs/kfs/unix/sysfile-priv.h
+++ b/libs/kfs/unix/sysfile-priv.h
@@ -65,7 +65,7 @@ struct KSysFile
* create a new file object
* from file descriptor
*/
-rc_t KSysFileMake ( KSysFile **fp, int fd, bool read_enabled, bool write_enabled );
+rc_t KSysFileMake ( KSysFile **fp, int fd, const char *path, bool read_enabled, bool write_enabled );
#ifdef __cplusplus
diff --git a/libs/kfs/unix/sysfile.c b/libs/kfs/unix/sysfile.c
index 9a3383a..5b98275 100644
--- a/libs/kfs/unix/sysfile.c
+++ b/libs/kfs/unix/sysfile.c
@@ -466,29 +466,29 @@ rc_t KSysFileWrite ( KSysFile *self, uint64_t pos,
return rc;
case EIO:
- rc = RC ( rcFS, rcFile, rcReading, rcTransfer, rcUnknown );
+ rc = RC ( rcFS, rcFile, rcWriting, rcTransfer, rcUnknown );
LOGERR (klogErr, rc, "system I/O error");
return rc;
case EBADF:
- rc = RC ( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+ rc = RC ( rcFS, rcFile, rcWriting, rcFileDesc, rcInvalid );
PLOGERR (klogErr,
(klogErr, rc, "system bad file descriptor error fd='$(E)'",
"E=%d", self->fd));
return rc;
case EISDIR:
- rc = RC ( rcFS, rcFile, rcReading, rcFileDesc, rcIncorrect );
+ rc = RC ( rcFS, rcFile, rcWriting, rcFileDesc, rcIncorrect );
LOGERR (klogErr, rc, "system misuse of a directory error");
return rc;
case EINVAL:
- rc = RC ( rcFS, rcFile, rcReading, rcParam, rcInvalid );
+ rc = RC ( rcFS, rcFile, rcWriting, rcParam, rcInvalid );
LOGERR (klogErr, rc, "system invalid argument error");
return rc;
default:
- rc = RC ( rcFS, rcFile, rcReading, rcNoObj, rcUnknown );
+ rc = RC ( rcFS, rcFile, rcWriting, rcNoObj, rcUnknown );
PLOGERR (klogErr,
(klogErr, rc, "unknown system error errno='$(S)($(E))'",
"S=%!,E=%d", lerrno, lerrno));
@@ -530,7 +530,7 @@ static KFile_vt_v1 vtKSysFile =
static
rc_t KSysFileMakeVT ( KSysFile **fp, int fd, const KFile_vt *vt,
- bool read_enabled, bool write_enabled )
+ const char *path, bool read_enabled, bool write_enabled )
{
rc_t rc;
KSysFile *f;
@@ -564,7 +564,7 @@ rc_t KSysFileMakeVT ( KSysFile **fp, int fd, const KFile_vt *vt,
}
#endif
- rc = KFileInit ( & f -> dad, vt, read_enabled, write_enabled );
+ rc = KFileInit ( & f -> dad, vt, "KSysFile", path, read_enabled, write_enabled );
if ( rc == 0 )
{
f -> fd = fd;
@@ -577,10 +577,10 @@ rc_t KSysFileMakeVT ( KSysFile **fp, int fd, const KFile_vt *vt,
return rc;
}
-LIB_EXPORT rc_t CC KSysFileMake ( KSysFile **fp, int fd, bool read_enabled, bool write_enabled )
+LIB_EXPORT rc_t CC KSysFileMake ( KSysFile **fp, int fd, const char *path, bool read_enabled, bool write_enabled )
{
return KSysFileMakeVT ( fp, fd, ( const KFile_vt* ) & vtKSysFile,
- read_enabled, write_enabled );
+ path, read_enabled, write_enabled );
}
/*--------------------------------------------------------------------------
@@ -804,7 +804,7 @@ rc_t KStdIOFileWrite ( KSysFile *dad, uint64_t pos,
case EBADF:
rc = RC ( rcFS, rcFile, rcWriting, rcFileDesc, rcInvalid );
PLOGERR (klogInt,
- (klogInt, rc, "systembad file descriptor error fd=$(F)",
+ (klogInt, rc, "system bad file descriptor error fd=$(F)",
"F=%d", lerrno, self->dad.fd));
return rc;
@@ -917,7 +917,7 @@ rc_t KStdIOFileMake ( KFile **fp, int fd,
if ( seekable )
{
return KSysFileMakeVT ( ( KSysFile** ) fp, fd,
- ( const KFile_vt* ) & vtKStdIOFile, read_enabled, write_enabled );
+ ( const KFile_vt* ) & vtKStdIOFile, "stdio-file", read_enabled, write_enabled );
}
if ( fd < 0 )
@@ -955,7 +955,7 @@ rc_t KStdIOFileMake ( KFile **fp, int fd,
}
#endif
rc = KFileInit ( &f->dad.dad, (const KFile_vt*) &vtKStdIOStream,
- read_enabled, write_enabled );
+ "KStdIOFile", "fd", read_enabled, write_enabled );
if ( rc == 0 )
{
f -> dad . fd = fd;
diff --git a/libs/kfs/unix/syslockfile.c b/libs/kfs/unix/syslockfile.c
new file mode 100644
index 0000000..57aaa4c
--- /dev/null
+++ b/libs/kfs/unix/syslockfile.c
@@ -0,0 +1,215 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+typedef struct KExclAccessFile KExclAccessFile;
+#define KFILE_IMPL KExclAccessFile
+
+#include <kfs/extern.h>
+#include <kfs/lockfile.h>
+#include <kfs/impl.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <assert.h>
+
+/*--------------------------------------------------------------------------
+ * KExclAccessFile
+ */
+struct KExclAccessFile
+{
+ KFile dad;
+ KLockFile *lock;
+ KFile *f;
+};
+
+static
+rc_t KExclAccessFileDestroy ( KExclAccessFile *self )
+{
+ rc_t rc = KFileRelease ( self -> f );
+ if ( rc == 0 )
+ {
+ KLockFileRelease ( self -> lock );
+ free ( self );
+ }
+ return rc;
+}
+
+static
+struct KSysFile *KExclAccessFileGetSysFile ( const KExclAccessFile *self, uint64_t *offset )
+{
+ return KFileGetSysFile ( self -> f, offset );
+}
+
+static
+rc_t KExclAccessFileRandomAccess ( const KExclAccessFile *self )
+{
+ return KFileRandomAccess ( self -> f );
+}
+
+static
+rc_t KExclAccessFileSize ( const KExclAccessFile *self, uint64_t *size )
+{
+ return KFileSize ( self -> f, size );
+}
+
+static
+rc_t KExclAccessFileSetSize ( KExclAccessFile *self, uint64_t size )
+{
+ return KFileSetSize ( self -> f, size );
+}
+
+static
+rc_t KExclAccessFileRead ( const KExclAccessFile *self, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ return KFileRead ( self -> f, pos, buffer, bsize, num_read );
+}
+
+static
+rc_t KExclAccessFileWrite ( KExclAccessFile *self, uint64_t pos,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ return KFileWrite ( self -> f, pos, buffer, size, num_writ );
+}
+
+static
+uint32_t KExclAccessFileType ( const KExclAccessFile * self )
+{
+ return KFileType ( self -> f );
+}
+
+static KFile_vt_v1 KExclAccessFile_vt =
+{
+ 1, 1,
+
+ KExclAccessFileDestroy,
+ KExclAccessFileGetSysFile,
+ KExclAccessFileRandomAccess,
+ KExclAccessFileSize,
+ KExclAccessFileSetSize,
+ KExclAccessFileRead,
+ KExclAccessFileWrite,
+ KExclAccessFileType
+};
+
+static
+rc_t KExclAccessFileMake ( KExclAccessFile **fp, KLockFile *lock, KFile *f )
+{
+ rc_t rc;
+ KExclAccessFile *xf = malloc ( sizeof * xf );
+ if ( xf == NULL )
+ rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KFileInit ( & xf -> dad, ( const KFile_vt* ) & KExclAccessFile_vt,
+ "KExclAccessFile", "no-name", f -> read_enabled, f -> write_enabled );
+ if ( rc == 0 )
+ {
+ xf -> lock = lock;
+ xf -> f = f;
+ * fp = xf;
+ return 0;
+ }
+
+ free ( xf );
+ }
+
+ return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ * interface extensions
+ */
+
+
+/* CreateExclusiveAccessFile
+ * opens a file with exclusive write access
+ *
+ * "fp" [ OUT ] - return parameter for newly opened file
+ *
+ * "update" [ IN ] - if true, open in read/write mode
+ * otherwise, open in write-only mode
+ *
+ * "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ * "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ */
+LIB_EXPORT rc_t CC KDirectoryVCreateExclusiveAccessFile ( KDirectory *self, KFile **fp,
+ bool update, uint32_t access, KCreateMode mode, const char *path, va_list args )
+{
+ rc_t rc;
+
+ if ( fp == NULL )
+ rc = RC ( rcFS, rcFile, rcLocking, rcParam, rcNull );
+ else
+ {
+ /* create the path */
+ char full [ 4096 ];
+ rc = KDirectoryVResolvePath ( self, true, full, sizeof full, path, args );
+ if ( rc == 0 )
+ {
+ KLockFile *lock;
+
+ /* acquire the lock */
+ rc = KDirectoryCreateLockFile ( self, & lock, "%s.lock", full );
+ if ( rc == 0 )
+ {
+ KFile *f;
+
+ /* create the file */
+ rc = KDirectoryCreateFile ( self, & f, update, access, mode, full );
+ if ( rc == 0 )
+ {
+ KExclAccessFile *xf;
+
+ /* wrap the file */
+ rc = KExclAccessFileMake ( & xf, lock, f );
+ if ( rc == 0 )
+ {
+ * fp = & xf -> dad;
+ return 0;
+ }
+
+ KFileRelease ( f );
+ }
+
+ KLockFileRelease ( lock );
+ }
+ }
+
+ * fp = NULL;
+ }
+
+ return rc;
+}
diff --git a/libs/kfs/unix/syspath.c b/libs/kfs/unix/syspath.c
deleted file mode 100644
index 625f22d..0000000
--- a/libs/kfs/unix/syspath.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#include <kfs/extern.h>
-
-#include <kfs/path.h>
-#include "path-priv.h"
-
-#include <klib/rc.h>
-#include <klib/log.h>
-#include <klib/debug.h>
-
-#include <stdlib.h>
-
-#include <string.h>
-#include <unistd.h>
-
-rc_t KPathTransformSysPath (KPath * self)
-{
-#if 1
- return 0;
-#else
- size_t path_size = strlen (sys_path) + 1; /* includes NUL */
- rc_t rc = 0;
- void * temp = self->storage;
-
- if (self->storage == self->buffer)
- {
- if (path_size > sizeof (self->buffer))
- temp = self->storage = NULL;
- }
- else if (self->alloc_size < path_size)
- {
- temp = NULL;
- }
-
- if (temp == NULL)
- {
- temp = realloc (self->storage, path_size);
- if (temp == NULL)
- {
- rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
- if (self->alloc_size == 0)
- self->storage = self->buffer;
- }
- else
- {
- self->alloc_size = path_size;
- self->storage = temp;
- }
- }
- if (rc == 0)
- {
- /* replace this with a minimal path validator */
- strcpy (self->storage, sys_path);
- self->asciz_size = path_size-1;
- }
- return rc;
-#endif
-}
-
-
-rc_t KPathGetCWD (char * buffer, size_t buffer_size)
-{
- char * temp = getcwd (buffer, buffer_size);
- if (temp == NULL)
- return RC (rcFS, rcPath, rcAccessing, rcBuffer, rcInsufficient);
- return 0;
-}
-
-
-#if USE_EXPERIMENTAL_CODE
-rc_t KPathTransformPathHier (char ** ppath)
-{
- char * pc;
-
- pc = *ppath;
- PATH_DEBUG (("%s: incoming path '%s'\n",__func__, *ppath));
-
- if ((pc[0] == '/') && (pc[1] == '/'))
- {
- pc += 2;
-
- if (pc[0] != '/')
- {
- static const char localhost[] = "localhost";
- size_t z = strlen (localhost);
-
- if (strncmp (localhost, pc, z ) == 0)
- pc += z;
- else
- {
- rc_t rc = RC (rcFS, rcPath, rcConstructing, rcUri, rcIncorrect);
- LOGERR (klogErr, rc, "illegal host in kfs/path url");
- return rc;
- }
- }
- *ppath = pc;
- }
- PATH_DEBUG (("%s: outgoing path '%s'\n",__func__, *ppath));
- return 0;
-}
-#endif
diff --git a/libs/kfs/win/lnk_tools.c b/libs/kfs/win/lnk_tools.c
index a85f31c..853d441 100644
--- a/libs/kfs/win/lnk_tools.c
+++ b/libs/kfs/win/lnk_tools.c
@@ -23,6 +23,9 @@
* ===========================================================================
*
*/
+
+#include <sysalloc.h>
+
#include <Shlobj.h>
#define LNK_RES_ERROR 0
@@ -375,7 +378,8 @@ static wchar_t * win_assemble_lnk( const wchar_t *path, const size_t exists, siz
*remaining = 0;
path_len = wcslen( path );
- buff_len = ( path_len + 5 ) * sizeof( * path );
+ #define ExtraChars 5
+ buff_len = ( path_len + ExtraChars ) * sizeof( * path );
res = (wchar_t *)malloc( buff_len );
if ( res != NULL )
{
@@ -392,13 +396,14 @@ static wchar_t * win_assemble_lnk( const wchar_t *path, const size_t exists, siz
/* if the string to be copied does not fit into the buffer
wcsncpy_s will terminate the application instead of returning
an error !!! */
- wcsncpy_s( res, buff_len, path, term );
+ wcsncpy_s( res, path_len + ExtraChars, path, term ); /* 2nd argument is in elements, not bytes */
res[ term + 0 ] = L'.';
res[ term + 1 ] = L'l';
res[ term + 2 ] = L'n';
res[ term + 3 ] = L'k';
res[ term + 4 ] = 0;
}
+ #undef ExtraChars
}
return res;
}
diff --git a/libs/kfs/win/sysdir-priv.h b/libs/kfs/win/sysdir-priv.h
index 4568d15..1ae8cc7 100644
--- a/libs/kfs/win/sysdir-priv.h
+++ b/libs/kfs/win/sysdir-priv.h
@@ -78,10 +78,10 @@ rc_t KSysDirMakePath ( const KSysDir* self, enum RCContext ctx, bool canon,
#endif
-/* RealPath
+/* OSPath
* returns a real OS path
*/
-rc_t KSysDirRealPath ( const KSysDir *self,
+rc_t KSysDirOSPath ( const KSysDir *self,
wchar_t *real, size_t bsize, const char *path, va_list args );
diff --git a/libs/kfs/win/sysdir.c b/libs/kfs/win/sysdir.c
index a97177f..fc9a333 100644
--- a/libs/kfs/win/sysdir.c
+++ b/libs/kfs/win/sysdir.c
@@ -43,10 +43,12 @@ struct KSysDir;
#include <klib/log.h>
#include <klib/out.h>
#include <klib/debug.h>
+#include <klib/klib-priv.h>
#include <sysalloc.h>
#include <stdio.h>
+#include <wchar.h>
#include <stdarg.h>
#include <assert.h>
#include <WINDOWS.H>
@@ -107,8 +109,8 @@ rc_t KSysDirEnumInit ( KSysDirEnum *self, const wchar_t *path )
rc = RC ( rcFS, rcDirectory, rcListing, rcNoObj, rcUnknown );
}
- PLOGERR ( klogErr,
- ( klogErr, rc, "error FindWirstFileW - $(E) - $(C)",
+ PLOGERR ( klogInfo,
+ ( klogInfo, rc, "error FindFirstFileW - $(E) - $(C)",
"E=%!,C=%u", err, err ) );
return rc;
@@ -279,6 +281,35 @@ rc_t translate_file_error( DWORD error, enum RCContext ctx )
}
+/* helper */
+
+static rc_t print_error_for( const wchar_t * path, const char * function, enum RCContext ctx, KLogLevel level )
+{
+ DWORD error = GetLastError();
+ rc_t rc = translate_file_error( error, ctx );
+#if _DEBUGGING
+ char buffer[ 4096 ];
+ size_t src_size, dst_size, len;
+ wchar_cvt_string_measure ( path, &src_size, &dst_size );
+ len = wchar_cvt_string_copy ( buffer, sizeof buffer, path, src_size );
+ buffer[ len ] = 0;
+ PLOGERR ( level,
+ ( level, rc, "error $(F) - $(E) - $(C) for $(D)",
+ "F=%s,E=%!,C=%u,D=%s", function, error, error, buffer ) );
+#endif
+ return rc;
+}
+
+
+static void wchar_2_char( const wchar_t * path, char * buffer, size_t buflen )
+{
+ size_t src_size, dst_size, len;
+ wchar_cvt_string_measure ( path, &src_size, &dst_size );
+ len = wchar_cvt_string_copy ( buffer, buflen, path, src_size );
+ buffer[ len ] = 0;
+}
+
+
static
uint32_t KSysDirPathTypeFromFindData ( WIN32_FIND_DATA *find_data,
const wchar_t * path,
@@ -381,9 +412,7 @@ uint32_t KSysDirFullPathType ( const wchar_t *path )
return KSysDirResolvePathAndDetectPathType ( path );
default:
DBGMSG ( DBG_KFS, DBG_FLAG_ANY, ( "FindFirstFileW: WARNING - unrecognized return code - %u.\n", status ) );
- PLOGERR ( klogErr,
- ( klogErr, 0, "error FindWirstFileW - $(E) - $(C)",
- "E=%!,C=%u", status, status ) );
+ print_error_for( path, "FindFirstFileW", rcResolving, klogErr );
return kptBadPath;
}
}
@@ -559,7 +588,7 @@ rc_t KSysDirMakePath ( const KSysDir* self, enum RCContext ctx, bool canon,
return RC ( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
/* rewrite drive letter */
- temp_utf8_buffer [ 0 ] = toupper ( temp_utf8_buffer [ 1 ] );
+ temp_utf8_buffer [ 0 ] = tolower ( temp_utf8_buffer [ 1 ] );
temp_utf8_buffer [ 1 ] = ':';
}
}
@@ -616,7 +645,7 @@ rc_t KSysDirMakePath ( const KSysDir* self, enum RCContext ctx, bool canon,
return 0;
}
-rc_t KSysDirRealPath ( const KSysDir *self,
+rc_t KSysDirOSPath ( const KSysDir *self,
wchar_t *real, size_t real_size, const char *path, va_list args )
{
return KSysDirMakePath ( self, rcLoading, true, real, real_size, path, args );
@@ -871,27 +900,18 @@ rc_t KSysDirRelativePath ( const KSysDir *self, enum RCContext ctx,
const wchar_t *root, wchar_t *path, size_t path_max )
{
size_t psize;
- uint32_t backup, blength_in_chars;
+ uint32_t backup, blength_in_chars, dst, diff_from_here;
const wchar_t *r = root + self->root;
const wchar_t *p = path + self->root;
- for ( ; * r == * p; ++ r, ++ p )
+ for ( ; towlower ( * r ) == towlower ( * p ); ++ r, ++ p )
{
/* disallow identical paths */
if ( * r == 0 )
return RC( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
}
- /* special case for windows: a network path like "\\panfs\traces01\"
- cannot be made relative to a working directory ! */
-
- /* NB - THE BUG HERE IS THAT THE TWO PATHS MUST BE ON DIFFERENT FILE SYSTEMS */
- if ( ( path[0] == '\\' ) && ( path[1] == '\\' ) )
- {
-/* return 0; */
- }
-
/* paths are identical up to "r","p"
if "r" is within a leaf name, then no backup is needed
by counting every '\\' from "r" to end, obtain backup count */
@@ -905,31 +925,35 @@ rc_t KSysDirRelativePath ( const KSysDir *self, enum RCContext ctx,
blength_in_chars = backup * 3;
/* align "p" to last directory separator */
- while ( p [ -1 ] != '\\' ) -- p;
+ if ( p > path ) {
+ while ( p [ -1 ] != '\\' ) -- p;
+ }
/* the size of the remaining relative path */
psize = wcslen ( p );
+ diff_from_here = ( uint32_t )( p - path );
/* open up space if needed */
- if ( (uint32_t)( p - path ) < blength_in_chars )
+ if ( diff_from_here < blength_in_chars )
{
/* prevent overflow */
if ( ( blength_in_chars + psize ) * sizeof( *path ) >= path_max )
return RC( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
- memmove ( path + blength_in_chars, p, psize * sizeof *p );
+ memmove ( & path[ blength_in_chars ], p, psize * ( sizeof *p ) );
}
/* insert backup sequences */
- for ( blength_in_chars = 0; backup > 0; blength_in_chars += 3, -- backup )
+ for ( dst = 0; backup > 0; -- backup )
{
- path [ blength_in_chars + 0 ] = '.';
- path [ blength_in_chars + 1 ] = '.';
- path [ blength_in_chars + 2 ] = '\\';
+ path [ dst++ ] = '.';
+ path [ dst++ ] = '.';
+ path [ dst++ ] = '\\';
}
/* close gap */
- if ( ( uint32_t) ( p - path ) > blength_in_chars )
+ if ( diff_from_here > blength_in_chars )
wcscpy ( & path [ blength_in_chars ], p );
+ path[ blength_in_chars + psize ] = 0;
return 0;
}
@@ -957,10 +981,15 @@ rc_t CC KSysDirResolvePath ( const KSysDir *self, bool absolute,
uint32_t temp_length;
/* convert the utf8-input-parameter path into wchar_t */
- rc_t rc = KSysDirMakePath( self, rcResolving, true, temp, sizeof temp, path, args);
+ rc_t rc = KSysDirMakePath ( self, rcResolving, true, temp, sizeof temp, path, args );
if ( rc != 0 )
return rc;
+ temp[ 0 ] = tolower( temp[ 0 ] ); /* this is important:
+ otherwise the comparison for is_on_same_drive_letter fails
+ AND
+ KSysDirRelativePath() fails too! */
+
temp_length = wchar_string_measure ( temp, &temp_size );
if ( absolute )
{
@@ -970,11 +999,26 @@ rc_t CC KSysDirResolvePath ( const KSysDir *self, bool absolute,
}
else
{
- rc = KSysDirRelativePath( self, rcResolving, self->path, temp, sizeof temp /* temp_size */ );
- if ( rc == 0 )
+ /* we are on windows, only if the path has a drive letter and it is the same
+ one as in KSysDir itself, we should try to create a relative path */
+ wchar_t colon = ':';
+ bool is_on_same_drive_letter = ( iswascii ( temp[ 0 ] ) && iswascii ( self->path[ 0 ] ) &&
+ ( temp[ 1 ] == colon ) && ( self->path[ 1 ] == colon ) &&
+ ( towlower ( temp[ 0 ] ) == towlower ( self->path[ 0 ] ) ) );
+ if ( is_on_same_drive_letter )
{
- uint32_t temp_length = wchar_string_measure ( temp, &temp_size );
- if ( temp_length >= rsize )
+ rc = KSysDirRelativePath( self, rcResolving, self->path, temp, sizeof temp );
+ if ( rc == 0 )
+ {
+ uint32_t temp_length = wchar_string_measure ( temp, &temp_size );
+ if ( temp_length >= rsize )
+ return RC ( rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+ }
+ }
+ else
+ {
+ /* treat it as if absolute were requested ( see above ) */
+ if ( temp_length - self->root >= rsize )
return RC ( rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
}
}
@@ -1222,15 +1266,25 @@ rc_t CC KSysDirRename ( KSysDir *self, bool force, const char *from, const char
rc_t rc = KSysDirMakePath ( self, rcRenaming, false, current_name, sizeof current_name, from, NULL );
if ( rc == 0 )
{
+
wchar_t new_name[ MAX_PATH ];
rc = KSysDirMakePath ( self, rcRenaming, false, new_name, sizeof new_name, to, NULL );
if ( rc == 0 )
{
DWORD err = 0;
uint32_t try = 0;
+
do
{
- if ( MoveFileW( current_name, new_name ) )
+ BOOL success = false;
+ if ( force ) {
+ DWORD dwFlags = MOVEFILE_REPLACE_EXISTING;
+ success = MoveFileEx ( current_name, new_name, dwFlags );
+ }
+ else {
+ success = MoveFileW ( current_name, new_name );
+ }
+ if ( success )
{
rc = 0;
}
@@ -1248,6 +1302,8 @@ rc_t CC KSysDirRename ( KSysDir *self, bool force, const char *from, const char
Sleep( 500 ); /* sleep for a half a second */
rc = RC ( rcFS, rcDirectory, rcRenaming, rcFile, rcUnauthorized );
break;
+ case ERROR_SHARING_VIOLATION:
+ return RC ( rcFS, rcDirectory, rcRenaming, rcFile, rcBusy );
default:
return RC ( rcFS, rcDirectory, rcRenaming, rcNoObj, rcUnknown );
}
@@ -1432,9 +1488,7 @@ rc_t KSysDirRemoveEntry ( wchar_t *path, size_t path_max, bool force )
if ( !RemoveDirectoryW( path ) )
{
rc = RC ( rcFS, rcDirectory, rcRemoving, rcDirectory, rcUnauthorized );
- PLOGERR ( klogErr,
- ( klogErr, rc, "error RemoveDirectoryW - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
+ print_error_for( path, "RemoveDirectoryW", rcRemoving, klogErr );
}
}
return rc;
@@ -1448,9 +1502,8 @@ rc_t KSysDirRemoveEntry ( wchar_t *path, size_t path_max, bool force )
default :
rc = RC ( rcFS, rcDirectory, rcCreating, rcNoObj, rcUnknown );
}
- PLOGERR ( klogErr,
- ( klogErr, rc, "error RemoveDirectoryW - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
+
+ print_error_for( path, "RemoveDirectoryW", rcRemoving, klogInfo);
return rc;
}
}
@@ -1534,11 +1587,8 @@ rc_t get_attributes ( const wchar_t * wpath, uint32_t * access, KTime_t * date )
*access = 0;
if ( date != NULL )
*date = 0;
- error = GetLastError();
- rc = translate_file_error( error, rcAccessing );
- PLOGERR ( klogErr,
- ( klogErr, rc, "error FindFirstFile - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
+
+ rc = print_error_for( wpath, "FindFirstFile", rcAccessing, klogErr );
return rc;
}
@@ -1751,12 +1801,10 @@ rc_t make_dir ( const wchar_t *path, uint32_t access )
{
DWORD error = GetLastError();
rc = translate_file_error( error, rcCreating );
- if ( error != ERROR_ALREADY_EXISTS )
- {
- PLOGERR ( klogErr,
- ( klogErr, rc, "error CreateDirectoryW - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
- }
+/*
+ Do not print an error code here, it is valid that this can happen!
+ rc = print_error_for( path, "CreateDirectoryW", rcCreating, klogErr );
+*/
}
return rc;
}
@@ -1960,19 +2008,17 @@ rc_t CC KSysDirOpenFileRead ( const KSysDir *self,
rc_t rc = KSysDirMakePath( self, rcOpening, false, file_name, sizeof file_name, path, args );
if ( rc == 0 )
{
- HANDLE file_handle = CreateFileW( file_name, GENERIC_READ, FILE_SHARE_READ, NULL,
+ HANDLE file_handle = CreateFileW( file_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if ( file_handle == INVALID_HANDLE_VALUE )
{
- DWORD error = GetLastError();
- rc = translate_file_error( error, rcOpening );
- PLOGERR ( klogErr,
- ( klogErr, rc, "error CreateFileW - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
+ rc = print_error_for( file_name, "CreateFileW", rcOpening, klogInfo );
}
else
{
- rc = KSysFileMake ( ( KSysFile** ) f, file_handle, true, false );
+ char buffer[ MAX_PATH ];
+ wchar_2_char( file_name, buffer, sizeof buffer );
+ rc = KSysFileMake ( ( KSysFile** ) f, file_handle, buffer, true, false );
if ( rc != 0 )
CloseHandle ( file_handle );
}
@@ -2000,20 +2046,19 @@ rc_t CC KSysDirOpenFileWrite ( KSysDir *self,
if ( rc == 0 )
{
DWORD dwDesiredAccess = update ? GENERIC_READ | GENERIC_WRITE : GENERIC_WRITE;
- HANDLE file_handle = CreateFileW( file_name, dwDesiredAccess, 0, NULL,
- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
+ HANDLE file_handle = CreateFileW( file_name, dwDesiredAccess, FILE_SHARE_READ, NULL,
+ OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
if ( file_handle == INVALID_HANDLE_VALUE )
{
- DWORD error = GetLastError();
- rc = translate_file_error( error, rcAccessing );
- PLOGERR ( klogErr,
- ( klogErr, rc, "error CreateFileW - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
+ rc = print_error_for( file_name, "CreateFileW", rcAccessing, klogErr );
+
}
else
{
- rc = KSysFileMake ( ( KSysFile** ) f, file_handle, update, true );
+ char buffer[ MAX_PATH ];
+ wchar_2_char( file_name, buffer, sizeof buffer );
+ rc = KSysFileMake ( ( KSysFile** ) f, file_handle, buffer, update, true );
if ( rc != 0 )
CloseHandle ( file_handle );
}
@@ -2085,17 +2130,29 @@ rc_t CC KSysDirCreateFile ( KSysDir *self, KFile **f, bool update,
error = GetLastError();
rc = translate_file_error( error, rcCreating );
+
+ /* disabled 12/12/2012 : it prints an error message, if vdb tries to open
+ the same reference-object twice via http. The lock-file for the 2nd try
+ does already exist. This is not an error, just a condition. */
+
+ /*
PLOGERR ( klogErr,
( klogErr, rc, "error CreateFileW - $(E) - $(C)",
"E=%!,C=%u", error, error ) );
+ */
+
/* Unix code has a special case when creating an empty file, which is
to say, creating a directory entry without needing to write to file */
return rc;
}
- rc = KSysFileMake ( ( KSysFile** ) f, file_handle, update, true );
- if ( rc != 0 )
- CloseHandle ( file_handle );
+ {
+ char buffer[ MAX_PATH ];
+ wchar_2_char( file_name, buffer, sizeof buffer );
+ rc = KSysFileMake ( ( KSysFile** ) f, file_handle, path, update, true );
+ if ( rc != 0 )
+ CloseHandle ( file_handle );
+ }
}
return rc;
}
@@ -2125,11 +2182,7 @@ rc_t CC KSysDirFileSize ( const KSysDir *self,
}
else
{
- DWORD error = GetLastError();
- rc = translate_file_error( error, rcAccessing );
- PLOGERR ( klogErr,
- ( klogErr, rc, "error GetFileAttributesEx - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
+ rc = print_error_for( file_name, "GetFileAttributesEx", rcAccessing, klogErr );
}
}
return rc;
@@ -2172,11 +2225,7 @@ rc_t CC KSysDirSetFileSize ( KSysDir *self,
}
else
{
- DWORD error = GetLastError();
- rc = translate_file_error( error, rcUpdating );
- PLOGERR ( klogErr,
- ( klogErr, rc, "error CreateFileW - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
+ rc = print_error_for( file_name, "CreateFileW", rcUpdating, klogErr );
}
}
return rc;
@@ -2371,11 +2420,7 @@ rc_t change_item_date( wchar_t *path, LPFILETIME win_time, bool dir_flag )
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
if ( file_handle == INVALID_HANDLE_VALUE )
{
- DWORD error = GetLastError();
- rc = translate_file_error( error, rcUpdating );
- PLOGERR ( klogErr,
- ( klogErr, rc, "error CreateFileW - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
+ rc = print_error_for( path, "CreateFileW", rcUpdating, klogErr );
}
else
{
@@ -2385,11 +2430,7 @@ rc_t change_item_date( wchar_t *path, LPFILETIME win_time, bool dir_flag )
}
else
{
- DWORD error = GetLastError();
- rc = translate_file_error( error, rcUpdating );
- PLOGERR ( klogErr,
- ( klogErr, rc, "error SetFileTime - $(E) - $(C)",
- "E=%!,C=%u", error, error ) );
+ rc = print_error_for( path, "SetFileTime", rcUpdating, klogErr );
}
CloseHandle ( file_handle );
}
@@ -2678,10 +2719,21 @@ rc_t KDirectoryMakeFromRealPath ( KDirectory **dirp, const wchar_t *real, bool u
*
* "dir" [ OUT ] - return parameter for native directory
*/
+extern rc_t CC ReportCWD ( const ReportFuncs *f, uint32_t indent );
+extern rc_t CC ReportRedirect ( KWrtHandler* handler,
+ const char* filename, bool* to_file, bool finalize );
+
LIB_EXPORT rc_t CC KDirectoryNativeDir ( KDirectory **dirp )
{
rc_t rc;
+ static bool latch;
+ if ( ! latch )
+ {
+ ReportInitKFS ( ReportCWD, ReportRedirect );
+ latch = true;
+ }
+
if ( dirp == NULL )
rc = RC ( rcFS, rcDirectory, rcAccessing, rcParam, rcNull );
else
@@ -2710,3 +2762,31 @@ LIB_EXPORT rc_t CC KDirectoryNativeDir ( KDirectory **dirp )
return rc;
}
+
+
+/* RealPath
+ * exposes functionality of system directory
+ */
+LIB_EXPORT rc_t CC KSysDirRealPath ( struct KSysDir const *self,
+ char *real, size_t bsize, const char *path, ... )
+{
+ rc_t rc;
+ va_list args;
+
+ va_start ( args, path );
+ rc = KSysDirVRealPath ( self, real, bsize, path, args );
+ va_end ( args );
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KSysDirVRealPath ( struct KSysDir const *self,
+ char *real, size_t bsize, const char *path, va_list args )
+{
+ /* Windows is ... challenged when it comes to answering
+ this question. What is needed is to 1) convert the path
+ to a Windows-style wchar path, then 2) resolve each of
+ its components, etc. to come up with a real path, then
+ 3) rewrite the path as a UTF-8 POSIX path */
+ return KSysDirResolvePath ( self, true, real, bsize, path, args );
+}
diff --git a/libs/kfs/win/sysdll.c b/libs/kfs/win/sysdll.c
index 0a6a849..4dd3439 100644
--- a/libs/kfs/win/sysdll.c
+++ b/libs/kfs/win/sysdll.c
@@ -24,6 +24,10 @@
*
*/
+#ifndef _WIN32_WINNT /* This file requires OS newer than Windows 2000 */
+# define _WIN32_WINNT 0x0501
+#endif
+
#include <kfs/extern.h>
#define TRACK_REFERENCES 0
@@ -33,6 +37,7 @@
#include <kfs/dyload.h>
#include <kfs/directory.h>
+#include <kfs/kfs-priv.h>
#include <klib/refcount.h>
#include <klib/vector.h>
#include <klib/text.h>
@@ -311,7 +316,7 @@ LIB_EXPORT rc_t CC KDyldHomeDirectory ( const KDyld *self, const KDirectory **di
* a type safe way to do this */
BOOL success = GetModuleHandleEx ( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
| GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
- (LPCSTR)func, & h );
+ ( const TCHAR * )func, & h );
if ( success )
{
wchar_t fname [ MAX_PATH ];
@@ -474,6 +479,9 @@ static
rc_t KDyldLoad ( KDyld *self, KDylib *lib, const wchar_t *path )
{
DWORD err;
+#if WE_WERE_BUILDING_FOR_WINDOWS_7_ALONE
+ UINT errMode = GetErrorMode();
+#endif
if ( path == NULL )
{
@@ -483,15 +491,21 @@ rc_t KDyldLoad ( KDyld *self, KDylib *lib, const wchar_t *path )
return RC ( rcFS, rcDylib, rcLoading, rcNoObj, rcUnknown );
}
+ SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); /* suppress the message box in case of an error */
lib -> handle = LoadLibraryW ( path );
+#if WE_WERE_BUILDING_FOR_WINDOWS_7_ALONE
+ SetErrorMode(errMode);
+#endif
if ( lib -> handle != NULL )
return KDylibSetLogging ( lib );
err = GetLastError ();
switch ( err )
{
- case ERROR_MOD_NOT_FOUND:
+ case ERROR_MOD_NOT_FOUND :
return RC ( rcFS, rcDylib, rcLoading, rcPath, rcNotFound );
+ case ERROR_BAD_EXE_FORMAT :
+ return RC ( rcFS, rcDylib, rcLoading, rcFormat, rcInvalid );
}
return RC ( rcFS, rcDylib, rcLoading, rcNoObj, rcUnknown );
@@ -510,7 +524,7 @@ rc_t KDyldVTryLoadLib ( KDyld *self, KDylib **lib,
{
wchar_t real [ MAX_PATH ];
- rc = KSysDirRealPath ( sdir, real, sizeof real, path, args );
+ rc = KSysDirOSPath ( sdir, real, sizeof real, path, args );
if ( rc == 0 )
{
WString pstr;
@@ -797,7 +811,8 @@ rc_t KDlsetWhack ( KDlset *self )
return 0;
}
-
+#define STRINGIZE(s) #s
+#define LIBNAME(pref, name, suff) STRINGIZE(pref) name STRINGIZE(suff)
/* MakeSet
* load a dynamic library
*
@@ -805,7 +820,7 @@ rc_t KDlsetWhack ( KDlset *self )
*/
LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
{
- rc_t rc;
+ rc_t rc = 0;
if ( setp == NULL )
rc = RC ( rcFS, rcDylib, rcConstructing, rcParam, rcNull );
@@ -825,8 +840,20 @@ LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
VectorInit ( & set -> ord, 0, 16 );
KRefcountInit ( & set -> refcount, 1, "KDlset", "make", "dlset" );
#if ! ALWAYS_ADD_EXE
- * setp = set;
- return 0;
+ {
+ KDylib *jni;
+ const char* libname = LIBNAME(LIBPREFIX, "vdb_jni.", SHLIBEXT);
+ if ( KDyldLoadLib ( ( KDyld* ) self, & jni, libname ) == 0 )
+ {
+ rc = KDlsetAddLib ( set, jni );
+ KDylibRelease ( jni );
+ }
+ if (rc == 0)
+ {
+ * setp = set;
+ return 0;
+ }
+ }
#else
{
KDylib *exe;
@@ -1288,6 +1315,80 @@ LIB_EXPORT rc_t CC KDlsetLastSymbol ( const KDlset *self, KSymAddr **sym, const
}
+/* List - PRIVATE
+ * list the paths to the libraries in the set
+ */
+typedef struct list_dylib_param list_dylib_param;
+struct list_dylib_param
+{
+ VNamelist *list;
+ rc_t rc;
+};
+
+static
+bool CC list_dylib ( void *item, void *data )
+{
+ size_t bytes;
+ char utf8 [ 4096 ], *p;
+
+ list_dylib_param *pb = data;
+ const KDylib *lib = ( const void* ) item;
+
+ /* "lib" was created with KDylibMake
+ which creates a NUL terminated path.
+ of course, this could seg-fault if bad... */
+ assert ( lib -> path . addr [ lib -> path . len ] == 0 );
+
+ /* convert wide-character to UTF-8 */
+ bytes = wchar_cvt_string_copy ( utf8, sizeof utf8, lib -> path . addr, lib -> path . size );
+ if ( bytes < sizeof utf8 )
+ {
+ pb -> rc = VNamelistAppend ( pb -> list, utf8 );
+ return pb -> rc != 0;
+ }
+
+ p = malloc ( 16 * 1024 );
+ if ( p == NULL )
+ {
+ pb -> rc = RC ( rcFS, rcDylib, rcListing, rcMemory, rcExhausted );
+ return true;
+ }
+
+ bytes = wchar_cvt_string_copy ( p, 16 * 1024, lib -> path . addr, lib -> path . size );
+ if ( bytes >= 16 * 1024 )
+ pb -> rc = RC ( rcFS, rcDylib, rcListing, rcPath, rcTooLong );
+ else
+ pb -> rc = VNamelistAppend ( pb -> list, p );
+
+ free ( p );
+ return pb -> rc != 0;
+}
+
+LIB_EXPORT rc_t CC KDlsetList ( const KDlset *self, KNamelist **listp )
+{
+ list_dylib_param pb;
+
+ assert ( listp != NULL );
+
+ if ( self == NULL )
+ pb . rc = RC ( rcFS, rcDylib, rcListing, rcSelf, rcNull );
+ else
+ {
+ pb . rc = VNamelistMake ( & pb . list, VectorLength ( & self -> name ) );
+ if ( pb . rc == 0 )
+ {
+ bool fail = VectorDoUntil ( & self -> name, false, list_dylib, & pb );
+ if ( ! fail )
+ pb . rc = VNamelistToNamelist ( pb . list, listp );
+
+ VNamelistRelease ( pb . list );
+ }
+ }
+
+ return pb . rc;
+}
+
+
/* AsObj
* AsFunc
* retrieve symbol address as pointer to object
diff --git a/libs/kfs/win/sysfile-priv.h b/libs/kfs/win/sysfile-priv.h
index 3306be8..f0d4ebe 100644
--- a/libs/kfs/win/sysfile-priv.h
+++ b/libs/kfs/win/sysfile-priv.h
@@ -49,13 +49,16 @@ struct KSysFile
KFile dad;
HANDLE handle;
uint64_t pos;
+ bool failed_set_sparse;
+ bool is_sparse; /* throws off size dang it */
+
};
/* KSysFileMake
* create a new file object
* from file descriptor
*/
-rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_enabled );
+rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, const char *path, bool read_enabled, bool write_enabled );
#ifdef __cplusplus
diff --git a/libs/kfs/win/sysfile.c b/libs/kfs/win/sysfile.c
index e8a34be..681b0cc 100644
--- a/libs/kfs/win/sysfile.c
+++ b/libs/kfs/win/sysfile.c
@@ -26,6 +26,7 @@
#include <kfs/extern.h>
+
/*--------------------------------------------------------------------------
* forwards
*/
@@ -38,13 +39,223 @@ struct KSysFile;
#include <klib/text.h>
#include <sysalloc.h>
+/* temporary */
+/* #include <klib/out.h> */
+
+
+
#include <Windows.h>
+/* #include <WinIoCtl.h> nested include in Windows.h? */
/*--------------------------------------------------------------------------
* KSysFile
* a Windows file
*/
+/* minimum set size or write beyond size difference to trigger setting sparse */
+/* tune this if too many or too few sparse files */
+#define MIN_SET_SPARSE_DIFF (16*1024)
+#define MIN_SPARSE_BLOCK_DIFF (4*1024)
+
+
+/* ----------
+ * Some functions to isolate the calls to Windows functions as I feel dirty
+ * just using them.
+ * really its to isolate some calls the very different style of parmaters
+ * for the calls from the usualy project approach.
+ *
+ * if the compiler inlines them it's all good.
+ */
+
+/*
+ * Get file size
+ */
+static rc_t get_file_size (const KSysFile * self, uint64_t * size)
+{
+ LARGE_INTEGER sz;
+
+ if ( GetFileSizeEx ( self -> handle, & sz ) == 0 )
+ {
+ rc_t rc;
+ DWORD last_error;
+
+ last_error = GetLastError ();
+ switch ( last_error )
+ {
+ case ERROR_INVALID_HANDLE:
+ rc = RC ( rcFS, rcFile, rcAccessing, rcFileDesc, rcInvalid );
+ break;
+ default:
+ rc = RC ( rcFS, rcFile, rcAccessing, rcNoObj, rcUnknown );
+ break;
+ }
+ PLOGERR (klogErr,
+ (klogErr, rc, "error accessing file system status - $(E)($(C))",
+ "E=%!,C=%u", last_error, last_error));
+ return rc;
+ }
+ *size = sz.QuadPart;
+
+ return 0;
+}
+
+
+/* returns (and side effect sets in structure)
+ * if the file is already a sparse file
+ */
+static bool check_if_sparse (KSysFile * self)
+{
+ BY_HANDLE_FILE_INFORMATION info;
+ BOOL worked;
+
+ if (self->is_sparse)
+ return true;
+
+ /*
+ * we don't use the GetFileInformationBy HandleEx as we don't want to
+ * exclude Win XP yet.
+ */
+ worked = GetFileInformationByHandle (self->handle, &info);
+
+ self->is_sparse =
+ ((info.dwFileAttributes & FILE_ATTRIBUTE_SPARSE_FILE)
+ == FILE_ATTRIBUTE_SPARSE_FILE);
+
+ return self->is_sparse;
+}
+
+/*
+ * make a file sparse set_it == true
+ * return is like Windows funcs with true being good
+ *
+ * we can't set if the Windows Volume doesn't allow it
+ * but we'll let the function fail rather than try to get the value at
+ * CREATE (open) time because we'd be then checking at all file CREATE
+ * whether we'd ever make it sparse or not
+ */
+static
+bool set_sparse (KSysFile * self)
+{
+ FILE_SET_SPARSE_BUFFER b = { true };
+ DWORD ret;
+ BOOL worked;
+ bool rreett = false;
+
+ /* don't duplicate effort */
+ if (self->is_sparse)
+ rreett = true;
+
+ else if (self->failed_set_sparse)
+ rreett = false;
+
+ else
+ {
+ worked = DeviceIoControl (self->handle, FSCTL_SET_SPARSE, &b, sizeof b,
+ NULL, 0, &ret, NULL);
+/* KOutMsg ("%s: %u\n",__func__,worked); */
+
+ /* not trusting bool is BOOL cause I don't trust Microsoft */
+ self->failed_set_sparse = (worked == 0);
+ self->is_sparse = !self->failed_set_sparse;
+ rreett = self->is_sparse;
+ }
+/* KOutMsg ("%s: %d\n",__func__,rreett); */
+ return rreett;
+}
+
+
+static bool set_not_sparse (KSysFile * self)
+{
+ FILE_SET_SPARSE_BUFFER b = { false };
+ DWORD ret;
+ BOOL worked;
+
+ /* don't duplicate effort */
+ if (!check_if_sparse (self))
+ return true;
+
+ if (self->failed_set_sparse)
+ return false;
+
+ worked = DeviceIoControl (self->handle, FSCTL_SET_SPARSE, &b, sizeof b,
+ NULL, 0, &ret, NULL);
+
+ /* not trusting bool is BOOL cause I don't trust Microsoft */
+ self->failed_set_sparse = (worked == 0);
+ self->is_sparse = self->failed_set_sparse;
+ return ! self->is_sparse;
+}
+
+/*
+ * this one works for non-sparse files too but what evs.
+ */
+static rc_t set_zero_region (KSysFile * self, uint64_t start, uint64_t size)
+{
+ FILE_ZERO_DATA_INFORMATION b = { start, start + size };
+ DWORD ret;
+ BOOL worked;
+
+ worked = DeviceIoControl (self->handle, FSCTL_SET_ZERO_DATA,
+ &b, sizeof b,
+ NULL, 0,
+ &ret, NULL);
+
+ /* TODO: check error codes with GetLastError and better rc values */
+ return (worked != 0) ? 0 : RC (rcFS, rcFile, rcWriting, rcBuffer, rcUnexpected);
+}
+
+
+/*
+ * returns true if we can convert this file into a non-sparse file
+ *
+ * We went simple and fast. We ask about zero regions.
+ * if we specifically get back that there are none we say true
+ * otherwise we say false.
+ *
+ * self can be modified so it can not be const
+ */
+static bool can_be_made_not_sparse (KSysFile * self )
+{
+#if 1
+ return false;
+#else
+ /* this is backwards - the list of os non-zero regions not zero regions */
+ LARGE_INTEGER fo;
+ LARGE_INTEGER l;
+ uint64_t size;
+ FILE_ALLOCATED_RANGE_BUFFER i;
+ FILE_ALLOCATED_RANGE_BUFFER o [16]; /* some none 0 number */
+ uint64_t count;
+ DWORD ret;
+ BOOL worked;
+ rc_t rc;
+
+ /* if is isn't sparse we can't make it not sparse */
+ /* first might be not yet set */
+ if (!check_if_sparse (self))
+ return true;
+
+ /* we can't scan for zero regions if we can't get a size */
+ rc = get_file_size (self, &size);
+ if (rc)
+ return false;
+
+ /* Microsoft APIs can be fairly odd */
+ fo.QuadPart = 0;
+ l.QuadPart = size;
+ i.FileOffset = fo;
+ i.Length = l;
+
+ worked = DeviceIoControl (self->handle, FSCTL_QUERY_ALLOCATED_RANGES,
+ &i, sizeof i, o, sizeof o, & ret, NULL);
+ /* we can't change to non-sparse if we can't scan for zero regions */
+ if (worked == 0)
+ return false;
+
+ return (ret == 0);
+#endif
+}
+
/* Destroy
*/
@@ -142,6 +353,11 @@ uint32_t CC KSysFileType ( const KSysFile *self )
static
rc_t CC KSysDiskFileSize ( const KSysFile *self, uint64_t *size )
{
+#if 1
+/* KOutMsg ("%s:\n",__func__); */
+ return get_file_size (self, size);
+#else
+
LARGE_INTEGER sz;
if ( GetFileSizeEx ( self -> handle, & sz ) == 0 )
@@ -167,6 +383,7 @@ rc_t CC KSysDiskFileSize ( const KSysFile *self, uint64_t *size )
*size = sz . QuadPart;
return 0;
+#endif
}
@@ -189,17 +406,27 @@ rc_t CC KSysDiskFileSetSize ( KSysFile *self, uint64_t size )
{
rc_t rc = 1;
LARGE_INTEGER p;
+ uint64_t prev_size;
+
+/* KOutMsg ("%s:\n",__func__); */
+ /* get previous size for setting or clearing sparse */
+ rc = get_file_size ( self, &prev_size);
+ if (rc)
+ return rc;
+/* KOutMsg ("%s: %lu\n",__func__, prev_size); */
p . QuadPart = size;
if ( SetFilePointerEx ( self -> handle, p, & p, FILE_BEGIN ) )
{
+ self -> pos = size;
if ( SetEndOfFile( self -> handle ) )
{
rc = 0;
}
}
+ /* failure to set size*/
if ( rc != 0 )
{
DWORD last_error;
@@ -212,10 +439,44 @@ rc_t CC KSysDiskFileSetSize ( KSysFile *self, uint64_t size )
default:
rc = RC ( rcFS, rcFile, rcUpdating, rcNoObj, rcUnknown );
}
- PLOGERR (klogErr,
- (klogErr, rc, "error accessing file system status - $(E)($(C))",
- "E=%!,C=%u", last_error, last_error));
+ PLOGERR ( klogErr,
+ ( klogErr, rc, "error setting filesize - $(E) - $(C) to $(D)",
+ "E=%!,C=%u,D=%lu", last_error, last_error, size ) );
+ }
+
+ /* check for wanting to be sparse file */
+ if (size > prev_size)
+ {
+ uint64_t diff;
+
+/* KOutMsg ("%s: size(%lu) larger than prev_size(%lu)\n",__func__, size, prev_size); */
+
+ diff = size - prev_size;
+
+ /* if block size if big enough we'll try to make it a sparse block */
+ if (diff >= MIN_SPARSE_BLOCK_DIFF)
+ {
+/* KOutMsg ("%s: diff(%lu) larger than block constant(%lu)\n",__func__, diff, MIN_SPARSE_BLOCK_DIFF); */
+ /* set sparse? */
+ if (!check_if_sparse(self)) /* isn't sparse now */
+ {
+ if (diff >= MIN_SET_SPARSE_DIFF)
+ {
+/* KOutMsg ("%s: diff(%lu) larger than sparse constant(%lu)\n",__func__, diff, MIN_SET_SPARSE_DIFF); */
+ (void)set_sparse (self);
+ }
+ }
+ /* ordered to try to set before looking to set the zero region */
+ if (self->is_sparse)
+ {
+ /* set sparse region at end */
+ set_zero_region (self, prev_size, diff);
+ }
+ }
}
+ else if (can_be_made_not_sparse (self))
+ (void)set_not_sparse (self);
+
return rc;
}
@@ -300,16 +561,17 @@ rc_t CC KSysDiskFileRead ( const KSysFile *cself, uint64_t pos,
rc = RC ( rcFS, rcFile, rcPositioning, rcNoObj, rcUnknown );
break;
}
- PLOGERR (klogErr,
- (klogErr, rc, "error positioning system file - $(E)($(C))",
- "E=%!,C=%u", last_error, last_error));
+ PLOGERR ( klogErr,
+ ( klogErr, rc, "error positioning system file - $(E)($(C)) to $(D)",
+ "E=%!,C=%u,D=%u", last_error, last_error, pos ) );
return rc;
}
- /* if we try to read behind the end of the file... */
- if ( pos > p . QuadPart )
- {
- return RC ( rcFS, rcFile, rcPositioning, rcFileDesc, rcInvalid );
+ /* if we try to read beyond the end of the file... */
+ if ( pos >= p . QuadPart )
+ { /* We've defined reading beyond EOF as return RC of 0 but bytes read as 0 */
+ /*return RC ( rcFS, rcFile, rcPositioning, rcFileDesc, rcInvalid );*/
+ return 0;
}
p . QuadPart = pos;
@@ -329,9 +591,9 @@ rc_t CC KSysDiskFileRead ( const KSysFile *cself, uint64_t pos,
return rc;
default:
rc = RC ( rcFS, rcFile, rcPositioning, rcNoObj, rcUnknown );
- PLOGERR (klogErr,
- (klogErr, rc, "error positioning system file - $(E)($(C))",
- "E=%!,C=%u", last_error, last_error));
+ PLOGERR ( klogErr,
+ ( klogErr, rc, "error positioning system file - $(E)($(C)) to $(D)",
+ "E=%!,C=%u,D=%lu", last_error, last_error, pos ) );
return rc;
}
}
@@ -431,7 +693,7 @@ rc_t KSysFileWriteCommon ( KSysFile *self,
case ERROR_NOT_ENOUGH_MEMORY:
rc = RC (rcFS, rcFile, rcWriting, rcMemory, rcExhausted);
- fmt = "error out of memory for WindoowsWriteFile - $(E)($(C))";
+ fmt = "error out of memory for WindowsWriteFile - $(E)($(C))";
break;
default:
@@ -460,15 +722,28 @@ static
rc_t CC KSysDiskFileWrite ( KSysFile *self, uint64_t pos,
const void *buffer, size_t size, size_t *num_writ)
{
+ rc_t rc;
if ( self -> pos != pos )
{
LARGE_INTEGER p;
+ uint64_t curr_size;
+
+ rc = get_file_size ( self, &curr_size );
+ if ( rc != 0 )
+ return rc;
+
+ if ( curr_size < pos )
+ {
+ rc = KSysDiskFileSetSize (self, pos);
+ if (rc)
+ return rc;
+ }
+
p . QuadPart = pos;
if ( SetFilePointerEx ( self -> handle, p, & p, FILE_BEGIN ) == 0 )
{
- rc_t rc;
DWORD last_error;
last_error = GetLastError ();
@@ -596,7 +871,7 @@ static const KFile_vt_v1 vtKSysStdIOOtherFile =
static
-rc_t KSysFileMakeVT ( KSysFile **fp, HANDLE fd, const KFile_vt *vt,
+rc_t KSysFileMakeVT ( KSysFile **fp, HANDLE fd, const KFile_vt *vt, const char *path,
uint64_t initial_pos, bool read_enabled, bool write_enabled )
{
rc_t rc;
@@ -610,11 +885,13 @@ rc_t KSysFileMakeVT ( KSysFile **fp, HANDLE fd, const KFile_vt *vt,
rc = RC(rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
else
{
- rc = KFileInit ( & f -> dad, vt, read_enabled, write_enabled );
+ rc = KFileInit ( & f -> dad, vt, "KSysFile", path, read_enabled, write_enabled );
if ( rc == 0 )
{
f -> handle = fd;
- f -> pos = initial_pos;
+ f -> pos = initial_pos;
+ f -> failed_set_sparse = f->is_sparse = false;
+ check_if_sparse (f);
*fp = f;
return 0;
}
@@ -629,7 +906,7 @@ rc_t KSysFileMakeVT ( KSysFile **fp, HANDLE fd, const KFile_vt *vt,
#define ISSTDIO 2
static
-rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_enabled, unsigned flags )
+rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, const char *path, bool read_enabled, bool write_enabled, unsigned flags )
{
DWORD ret;
const KFile_vt * vt;
@@ -646,7 +923,7 @@ rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_e
{
case FILE_TYPE_DISK:
flags |= ISDISK;
- initial_pos = -1;
+ initial_pos = -1;
break;
case FILE_TYPE_UNKNOWN:
@@ -662,12 +939,12 @@ rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_e
break;
}
- initial_pos = 0;
+ initial_pos = 0;
flags &= ~ISDISK;
break;
default:
- initial_pos = 0;
+ initial_pos = 0;
flags &= ~ISDISK;
break;
}
@@ -691,13 +968,13 @@ rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_e
break;
}
- return KSysFileMakeVT ( fp, fd, vt, initial_pos, read_enabled, write_enabled );
+ return KSysFileMakeVT ( fp, fd, vt, path, initial_pos, read_enabled, write_enabled );
}
/* extern, but internal to libkfs */
-rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_enabled )
+rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, const char *path, bool read_enabled, bool write_enabled )
{
- return KSysFileMakeInt ( fp, fd, read_enabled, write_enabled, 0 );
+ return KSysFileMakeInt ( fp, fd, path, read_enabled, write_enabled, 0 );
}
@@ -707,7 +984,7 @@ rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_enab
LIB_EXPORT rc_t CC KFileMakeStdIn ( const KFile **fp )
{
HANDLE fd = GetStdHandle ( STD_INPUT_HANDLE );
- return KSysFileMakeInt ( (KSysFile**)fp, fd, true, false, ISSTDIO );
+ return KSysFileMakeInt ( (KSysFile**)fp, fd, "stdin", true, false, ISSTDIO );
}
/* MakeStdOut
@@ -717,11 +994,25 @@ LIB_EXPORT rc_t CC KFileMakeStdIn ( const KFile **fp )
LIB_EXPORT rc_t CC KFileMakeStdOut ( KFile **fp )
{
HANDLE fd = GetStdHandle ( STD_OUTPUT_HANDLE );
- return KSysFileMakeInt ( (KSysFile**)fp, fd, false, true, ISSTDIO );
+ return KSysFileMakeInt ( (KSysFile**)fp, fd, "stdout", false, true, ISSTDIO );
}
LIB_EXPORT rc_t CC KFileMakeStdErr ( KFile **fp )
{
HANDLE fd = GetStdHandle ( STD_ERROR_HANDLE );
- return KSysFileMakeInt ( (KSysFile**)fp, fd, false, true, ISSTDIO );
+ return KSysFileMakeInt ( (KSysFile**)fp, fd, "stderr", false, true, ISSTDIO );
+}
+
+/* MakeFDFile
+ * creates a file from a file-descriptor
+ * not supported under Windows
+ */
+LIB_EXPORT rc_t CC KFileMakeFDFileRead ( const KFile **f, int fd )
+{
+ return RC (rcFS, rcFile, rcConstructing, rcFunction, rcUnsupported);
+}
+
+LIB_EXPORT rc_t CC KFileMakeFDFileWrite ( KFile **f, bool update, int fd )
+{
+ return RC (rcFS, rcFile, rcConstructing, rcFunction, rcUnsupported);
}
diff --git a/libs/kfs/win/syslockfile.c b/libs/kfs/win/syslockfile.c
new file mode 100644
index 0000000..9b09f8d
--- /dev/null
+++ b/libs/kfs/win/syslockfile.c
@@ -0,0 +1,67 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kfs/extern.h>
+#include <kfs/lockfile.h>
+#include <kfs/directory.h>
+#include <klib/rc.h>
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ * interface extensions
+ */
+
+
+/* CreateExclusiveAccessFile
+ * opens a file with exclusive write access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "update" [ IN ] - if true, open in read/write mode
+ * otherwise, open in write-only mode
+ *
+ * "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ * "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ */
+LIB_EXPORT rc_t CC KDirectoryVCreateExclusiveAccessFile ( KDirectory *self, struct KFile **f,
+ bool update, uint32_t access, KCreateMode mode, const char *path, va_list args )
+{
+ /* Windows should naturally behave as we want here... */
+ rc_t rc = KDirectoryVCreateFile ( self, f, update, access, mode, path, args );
+ if ( rc != 0 )
+ {
+ if ( GetRCState ( rc ) == rcExists )
+ rc = RC ( rcFS, rcFile, rcLocking, rcLocking, rcBusy );
+ else
+ rc = ResetRCContext ( rc, rcFS, rcFile, rcLocking );
+ }
+ return rc;
+}
diff --git a/libs/kfs/win/sysmmap.c b/libs/kfs/win/sysmmap.c
index ebfa70b..28c9873 100644
--- a/libs/kfs/win/sysmmap.c
+++ b/libs/kfs/win/sysmmap.c
@@ -126,6 +126,8 @@ rc_t KMMapUnmap ( KMMap *self )
{
if ( ! CloseHandle ( self -> handle ) )
return RC ( rcFS, rcMemMap, rcDestroying, rcNoObj, rcUnknown );
+ if ( ! UnmapViewOfFile( self -> addr ) )
+ return RC ( rcFS, rcMemMap, rcDestroying, rcNoObj, rcUnknown );
self -> addr = NULL;
self -> size = 0;
diff --git a/libs/kfs/win/syspath.c b/libs/kfs/win/syspath.c
deleted file mode 100644
index d74ffaa..0000000
--- a/libs/kfs/win/syspath.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-#define CHECK_WINDOWS_PATH_LENGTH 0
-#include <kfs/extern.h>
-
-#include <kfs/path.h>
-#include "path-priv.h"
-#include <klib/defs.h>
-#include <klib/rc.h>
-#include <klib/log.h>
-#include <klib/out.h>
-#include <windows.h>
-#include <direct.h>
-
-static const
-char * reserved_device_names [] =
-{
- "CON:",
- "PRN:",
- "AUX:",
- "NUL:",
- "COM1:",
- "COM2:",
- "COM3:",
- "COM4:",
- "COM5:",
- "COM6:",
- "COM7:",
- "COM8:",
- "COM9:",
- "LPT1:",
- "LPT2:",
- "LPT3:",
- "LPT4:",
- "LPT5;",
- "LPT6:",
- "LPT7:",
- "LPT8:",
- "LPT9:",
- NULL
-};
-
-rc_t CC KPathTransformSysPath (KPath * self)
-{
- char * pc;
- size_t lim;
- size_t ix;
- rc_t rc = 0;
-
- pc = (char *)(self->path.addr);
- lim = StringSize (&self->path);
-
- if (lim == 0)
- return 0;
-
- /* -----
- * toss out windows/dos device names
- */
- for (ix = 0; reserved_device_names[ix] != NULL; ++ix)
- if (strcmp (reserved_device_names[ix], pc) == 0)
- return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
-
- /* -----
- * look for for mingw and cygwin full paths and make them windowish
- * NOTE we could screw things up here with bad strings like
- * /cygdrive/haha/fooled-you
- */
-
- if (pc[0] == '/')
- {
- static const char cygdrive [] = "/cygdrive/";
-
- if (strncmp (pc, cygdrive, sizeof cygdrive - 1) == 0)
- {
- pc += sizeof cygdrive - 2;
- lim -= sizeof cygdrive - 2;
- /* NOTE: if the macro changes this could fail! */
- StringInit (&self->path, pc,
- StringSize(&self->path) - sizeof cygdrive - 2,
- StringLength(&self->path) - sizeof cygdrive - 2);
- }
-
- /* if here we had a mingw or cygwin specification */
- if (isalpha (pc[1]) && (pc[2] == '/'))
- {
- /* change it back to a windows specification */
- pc[0] = pc[1];
- pc[1] = ':';
- }
- }
-
- /* change from Windows '/' to posix '/' segment dividers */
- for (ix = 0; ix < lim; ++ix)
- if (pc [ix] == '\\')
- pc [ix] = '/';
-
- /* look for stray ':' characters */
- for (ix = 0; ix < lim; ++ix)
- {
- if (pc[ix] == ':')
- {
- rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
- PLOGERR (klogErr,
- (klogErr, rc, "incorrect use of ':' in path '$(path)'",
- "path=%s", pc));
- return rc;
- }
- if (ix == 0)
- ++ix;
- }
-
- if ((lim > 1) && (pc[1] == ':'))
- {
- if (!isalpha (pc[0]))
- {
- rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
- PLOGERR (klogErr,
- (klogErr, rc, "invalid character as drive letter '$(c)' ($(d)) in path '$(S)'",
- "c=%c,d=%d,s=%s",pc[0],pc[0],pc));
- return rc;
- }
- /* we don't support drive relative addressing at this point
- * we should correct this in the future */
- if (pc[2] != '/')
- {
- rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
- PLOGERR (klogErr,
- (klogErr, rc, "drive relative addressing not currently supported '$(path)'",
- "path=%s", pc));
- return rc;
- }
- }
-
- if ((pc[0] == '/') && (pc[1] == '/')) /* UNC form */
- {
- if (pc[2] == '.') /* device space name - we don't handle these */
- return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
-
- if (pc[2] == '?') /* special space name - we don't handle these */
- return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
- }
-
-/* possible future stuff? */
-#if DO_MORE_STUFF_TO_VALIDATE_PATH
- /* -----
- * this size thing is turned off to allow paths into archives
- */
- ix = string_size (ipc = inpath);
- if (ix > MAX_PATH)
- return RC (rcFS, rcPath, rcConstructing, rcPath, rcTooLong);
- {
- DWORD insize = ilen;
- DWORD outlen;
-
- outlen = GetFullPathNameA (ipc, (DWORD)sizeof (temp), temp, NULL);
-
- if (outlen == 0)
- return RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
- if (outlen > sizeof temp)
- return RC (rcFS, rcPath, rcConstructing, rcPath, rcTooShort);
-
- ipc = temp;
-
- opc[0] = '/';
- opc[1] = ipc [0];
-
- ix = jx = 2;
- }
-
- do
- {
- switch (ipc[ix])
- {
- case '\0':
- normalize_done = true;
- /* fall through */
- default:
- opc[jx++] = ipc[ix++];
- break;
-
- case '\\':
- opc[jx++] = '/';
- ++ix;
- break;
-
- case '\x1': /* never allowed */
- case '\x2':
- case '\x3':
- case '\x4':
- case '\x5':
- case '\x6':
- case '\x7':
- case '\x8':
- case '\x9':
- case '\xA':
- case '\xB':
- case '\xC':
- case '\xD':
- case '\xE':
- case '\xF':
- case '\x10':
- case '\x11':
- case '\x12':
- case '\x13':
- case '\x14':
- case '\x15':
- case '\x16':
- case '\x17':
- case '\x18':
- case '\x19':
- case '\x1A':
- case '\x1B':
- case '\x1C':
- case '\x1D':
- case '\x1E':
- case '\x1F':
- case ':':
- case '<':
- case '>':
- case '"':
- case '|':
- case '*':
- case '?':
- rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
- PLOGERR (klogErr,
- (klogErr, rc, "invalid character '$(c)' ($(d)) in path '$(s)'",
- "c=%c,d=%d,s=%s",ipc[ix],ipc[ix],ipc));
- return rc;
- }
- } while (!normalize_done);
-
- self->asciz_size = ix - 1;
-
-#endif
- /* put drive based paths (back?) into our form */
- if ((lim > 1) && (pc[1] == ':'))
- {
- pc[1] = pc[0];
- pc[0] = '/';
- }
- return 0;
-}
-
-rc_t KPathTransformPathHier (char ** uri_path)
-{
- return 0;
-}
-
-LIB_EXPORT rc_t CC KPathGetCWD (char * buffer, size_t buffer_size)
-{
- char * temp = _getcwd (buffer, (int)buffer_size);
- if (temp == NULL)
- return RC (rcFS, rcPath, rcAccessing, rcBuffer, rcInsufficient);
- return 0;
-}
-
-#if USE_EXPERIMENTAL_CODE
-rc_t KPathInitAuthority (struct KPath * self, char ** next)
-{
-/* static const char null_string[] = ""; */
-/* CONST_STRING (&self->authority, null_string); */
- return 0;
-}
-#endif
diff --git a/libs/klib/Judy.h b/libs/klib/Judy.h
new file mode 100644
index 0000000..0b2c518
--- /dev/null
+++ b/libs/klib/Judy.h
@@ -0,0 +1,629 @@
+#ifndef _JUDY_INCLUDED
+#define _JUDY_INCLUDED
+/*
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+//
+// HEADER FILE FOR EXPORTED FEATURES IN JUDY LIBRARY, libJudy.*
+//
+// See the manual entries for details.
+//
+// Note: This header file uses old-style comments on #-directive lines and
+// avoids "()" on macro names in comments for compatibility with older cc -Aa
+// and some tools on some platforms.
+
+
+// PLATFORM-SPECIFIC
+*/
+
+#if ! JUST_DEFINE_YOUR_STUFF
+
+#ifdef JU_WIN /* =============================================== */
+
+typedef __int8 int8_t;
+typedef __int16 int16_t;
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+
+typedef unsigned __int8 uint8_t;
+typedef unsigned __int16 uint16_t;
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
+
+#else /* ================ ! JU_WIN ============================= */
+
+/* ISO C99: 7.8 Format conversion of integer types <inttypes.h> */
+/*#include <inttypes.h> if this FAILS, try #include <stdint.h> */
+
+/* ISO C99: 7.18 Integer types uint*_t */
+#include <stdint.h>
+
+#endif /* ================ ! JU_WIN ============================= */
+
+/* ISO C99 Standard: 7.20 General utilities */
+#include <stdlib.h>
+
+/* ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types */
+#include <limits.h>
+
+#endif /* JUST_DEFINE_YOUR_STUFF */
+
+#ifdef __cplusplus /* support use by C++ code */
+extern "C" {
+#endif
+
+
+/* ****************************************************************************
+// DECLARE SOME BASE TYPES IN CASE THEY ARE MISSING:
+//
+// These base types include "const" where appropriate, but only where of
+// interest to the caller. For example, a caller cares that a variable passed
+// by reference will not be modified, such as, "const void * Pindex", but not
+// that the called function internally does not modify the pointer itself, such
+// as, "void * const Pindex".
+//
+// Note that its OK to pass a Pvoid_t to a Pcvoid_t; the latter is the same,
+// only constant. Callers need to do this so they can also pass & Pvoid_t to
+// PPvoid_t (non-constant).
+*/
+
+#ifndef _PCVOID_T
+#define _PCVOID_T
+typedef const void * Pcvoid_t;
+#endif
+
+#ifndef _PVOID_T
+#define _PVOID_T
+typedef void * Pvoid_t;
+typedef void ** PPvoid_t;
+#endif
+
+#ifndef _WORD_T
+#define _WORD_T
+ typedef size_t Word_t, * PWord_t; /* expect 32-bit or 64-bit words. */
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+
+/* ****************************************************************************
+// SUPPORT FOR ERROR HANDLING:
+//
+// Judy error numbers:
+//
+// Note: These are an enum so theres a related typedef, but the numbers are
+// spelled out so you can map a number back to its name.
+*/
+typedef enum /* uint8_t -- but C does not support this type of enum.
+ -- nor does it support // comments!! */
+{
+
+/* Note: JU_ERRNO_NONE and JU_ERRNO_FULL are not real errors. They specify
+// conditions which are otherwise impossible return values from 32-bit
+// Judy1Count, which has 2^32 + 1 valid returns (0..2^32) plus one error
+// return. These pseudo-errors support the return values that cannot otherwise
+// be unambiguously represented in a 32-bit word, and will never occur on a
+// 64-bit system. */
+
+ JU_ERRNO_NONE = 0,
+ JU_ERRNO_FULL = 1,
+ JU_ERRNO_NFMAX = JU_ERRNO_FULL,
+
+/* JU_ERRNO_NOMEM comes from malloc(3C) when Judy cannot obtain needed memory.
+// The system errno value is also set to ENOMEM. This error can be recoverable
+// if the calling application frees other memory.
+//
+// TBD: Currently there is no guarantee the Judy array has no memory leaks
+// upon JU_ERRNO_NOMEM. */
+
+ JU_ERRNO_NOMEM = 2,
+
+/* Problems with parameters from the calling program:
+//
+// JU_ERRNO_NULLPPARRAY means PPArray was null; perhaps PArray was passed where
+// &PArray was intended. Similarly, JU_ERRNO_NULLPINDEX means PIndex was null;
+// perhaps &Index was intended. Also, JU_ERRNO_NONNULLPARRAY,
+// JU_ERRNO_NULLPVALUE, and JU_ERRNO_UNSORTED, all added later (hence with
+// higher numbers), mean: A non-null array was passed in where a null pointer
+// was required; PValue was null; and unsorted indexes were detected. */
+
+ JU_ERRNO_NULLPPARRAY = 3, /* see above. */
+ JU_ERRNO_NONNULLPARRAY = 10, /* see above. */
+ JU_ERRNO_NULLPINDEX = 4, /* see above. */
+ JU_ERRNO_NULLPVALUE = 11, /* see above. */
+ JU_ERRNO_NOTJUDY1 = 5, /* PArray is not to a Judy1 array. */
+ JU_ERRNO_NOTJUDYL = 6, /* PArray is not to a JudyL array. */
+ JU_ERRNO_NOTJUDYSL = 7, /* PArray is not to a JudySL array. */
+ JU_ERRNO_UNSORTED = 12, /* see above. */
+
+/* Errors below this point are not recoverable; further tries to access the
+// Judy array might result in EFAULT and a core dump:
+//
+// JU_ERRNO_OVERRUN occurs when Judy detects, upon reallocation, that a block
+// of memory in its own freelist was modified since being freed. */
+
+ JU_ERRNO_OVERRUN = 8,
+
+/* JU_ERRNO_CORRUPT occurs when Judy detects an impossible value in a Judy data
+// structure:
+//
+// Note: The Judy data structure contains some redundant elements that support
+// this type of checking. */
+
+ JU_ERRNO_CORRUPT = 9
+
+/* Warning: At least some C or C++ compilers do not tolerate a trailing comma
+// above here. At least we know of one case, in aCC; see JAGad58928. */
+
+} JU_Errno_t;
+
+
+/* Judy errno structure:
+//
+// WARNING: For compatibility with possible future changes, the fields of this
+// struct should not be referenced directly. Instead use the macros supplied
+// below.
+
+// This structure should be declared on the stack in a threaded process. */
+
+typedef struct J_UDY_ERROR_STRUCT
+{
+ JU_Errno_t je_Errno; /* one of the enums above. */
+ int je_ErrID; /* often an internal source line number. */
+ Word_t je_reserved[4]; /* for future backward compatibility. */
+
+} JError_t, * PJError_t;
+
+
+/* Related macros:
+//
+// Fields from error struct: */
+
+#define JU_ERRNO(PJError) ((PJError)->je_Errno)
+#define JU_ERRID(PJError) ((PJError)->je_ErrID)
+
+/* For checking return values from various Judy functions:
+//
+// Note: Define JERR as -1, not as the seemingly more portable (Word_t)
+// (~0UL), to avoid a compiler "overflow in implicit constant conversion"
+// warning. */
+
+#define JERR (-1) /* functions returning int or Word_t */
+#define PJERR ((Pvoid_t) (~0UL)) /* mainly for use here, see below */
+#define PPJERR ((PPvoid_t) (~0UL)) /* functions that return PPvoid_t */
+
+/* Convenience macro for when detailed error information (PJError_t) is not
+// desired by the caller; a purposely short name: */
+
+#define PJE0 ((PJError_t) NULL)
+
+
+/* ****************************************************************************
+// JUDY FUNCTIONS:
+//
+// P_JE is a shorthand for use below:
+*/
+#define P_JE PJError_t PJError
+
+/* ****************************************************************************
+// JUDY1 FUNCTIONS:
+*/
+extern int Judy1Test( Pcvoid_t PArray, Word_t Index, P_JE);
+extern int Judy1Set( PPvoid_t PPArray, Word_t Index, P_JE);
+extern int Judy1SetArray( PPvoid_t PPArray, Word_t Count,
+ const Word_t * const PIndex,
+ P_JE);
+extern int Judy1Unset( PPvoid_t PPArray, Word_t Index, P_JE);
+extern Word_t Judy1Count( Pcvoid_t PArray, Word_t Index1,
+ Word_t Index2, P_JE);
+extern int Judy1ByCount( Pcvoid_t PArray, Word_t Count,
+ Word_t * PIndex, P_JE);
+extern Word_t Judy1FreeArray( PPvoid_t PPArray, P_JE);
+extern Word_t Judy1MemUsed( Pcvoid_t PArray);
+extern Word_t Judy1MemActive( Pcvoid_t PArray);
+extern int Judy1First( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int Judy1Next( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int Judy1Last( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int Judy1Prev( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int Judy1FirstEmpty( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int Judy1NextEmpty( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int Judy1LastEmpty( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int Judy1PrevEmpty( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+
+/* ****************************************************************************
+// JUDYL FUNCTIONS:
+*/
+extern PPvoid_t JudyLGet( Pcvoid_t PArray, Word_t Index, P_JE);
+extern PPvoid_t JudyLIns( PPvoid_t PPArray, Word_t Index, P_JE);
+extern int JudyLInsArray( PPvoid_t PPArray, Word_t Count,
+ const Word_t * const PIndex,
+ const Word_t * const PValue,
+ P_JE);
+
+extern int JudyLDel( PPvoid_t PPArray, Word_t Index, P_JE);
+extern Word_t JudyLCount( Pcvoid_t PArray, Word_t Index1,
+ Word_t Index2, P_JE);
+extern PPvoid_t JudyLByCount( Pcvoid_t PArray, Word_t Count,
+ Word_t * PIndex, P_JE);
+extern Word_t JudyLFreeArray( PPvoid_t PPArray, P_JE);
+extern Word_t JudyLMemUsed( Pcvoid_t PArray);
+extern Word_t JudyLMemActive( Pcvoid_t PArray);
+extern PPvoid_t JudyLFirst( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern PPvoid_t JudyLNext( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern PPvoid_t JudyLLast( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern PPvoid_t JudyLPrev( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int JudyLFirstEmpty( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int JudyLNextEmpty( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int JudyLLastEmpty( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+extern int JudyLPrevEmpty( Pcvoid_t PArray, Word_t * PIndex, P_JE);
+
+/* ****************************************************************************
+// JUDYSL FUNCTIONS:
+*/
+extern PPvoid_t JudySLGet( Pcvoid_t, const uint8_t * Index, P_JE);
+extern PPvoid_t JudySLIns( PPvoid_t, const uint8_t * Index, P_JE);
+extern int JudySLDel( PPvoid_t, const uint8_t * Index, P_JE);
+extern Word_t JudySLFreeArray( PPvoid_t, P_JE);
+extern PPvoid_t JudySLFirst( Pcvoid_t, uint8_t * Index, P_JE);
+extern PPvoid_t JudySLNext( Pcvoid_t, uint8_t * Index, P_JE);
+extern PPvoid_t JudySLLast( Pcvoid_t, uint8_t * Index, P_JE);
+extern PPvoid_t JudySLPrev( Pcvoid_t, uint8_t * Index, P_JE);
+
+/* ****************************************************************************
+// JUDYHSL FUNCTIONS:
+*/
+extern PPvoid_t JudyHSGet( Pcvoid_t, void *, Word_t);
+extern PPvoid_t JudyHSIns( PPvoid_t, void *, Word_t, P_JE);
+extern int JudyHSDel( PPvoid_t, void *, Word_t, P_JE);
+extern Word_t JudyHSFreeArray( PPvoid_t, P_JE);
+
+extern const char *Judy1MallocSizes;
+extern const char *JudyLMallocSizes;
+
+/* ****************************************************************************
+// JUDY memory interface to malloc() FUNCTIONS:
+*/
+extern Word_t JudyMalloc(Word_t); /* words reqd => words allocd. */
+extern Word_t JudyMallocVirtual(Word_t); /* words reqd => words allocd. */
+extern void JudyFree(Pvoid_t, Word_t); /* free, size in words. */
+extern void JudyFreeVirtual(Pvoid_t, Word_t); /* free, size in words. */
+
+#define JLAP_INVALID 0x1 /* flag to mark pointer "not a Judy array" */
+
+/* ****************************************************************************
+// MACRO EQUIVALENTS FOR JUDY FUNCTIONS:
+//
+// The following macros, such as J1T, are shorthands for calling Judy functions
+// with parameter address-of and detailed error checking included. Since they
+// are macros, the error checking code is replicated each time the macro is
+// used, but it runs fast in the normal case of no error.
+//
+// If the caller does not like the way the default JUDYERROR macro handles
+// errors (such as an exit(1) call when out of memory), they may define their
+// own before the "#include <Judy.h>". A routine such as HandleJudyError
+// could do checking on specific error numbers and print a different message
+// dependent on the error. The following is one example:
+//
+// Note: the back-slashes are removed because some compilers will not accept
+// them in comments.
+//
+// void HandleJudyError(uint8_t *, int, uint8_t *, int, int);
+// #define JUDYERROR(CallerFile, CallerLine, JudyFunc, JudyErrno, JudyErrID)
+// {
+// HandleJudyError(CallerFile, CallerLine, JudyFunc, JudyErrno, JudyErrID);
+// }
+//
+// The routine HandleJudyError could do checking on specific error numbers and
+// print a different message dependent on the error.
+//
+// The macro receives five parameters that are:
+//
+// 1. CallerFile: Source filename where a Judy call returned a serious error.
+// 2. CallerLine: Line number in that source file.
+// 3. JudyFunc: Name of Judy function reporting the error.
+// 4. JudyErrno: One of the JU_ERRNO* values enumerated above.
+// 5. JudyErrID: The je_ErrID field described above.
+*/
+#ifndef JUDYERROR_NOTEST
+#ifndef JUDYERROR /* supply a default error macro */
+#include <stdio.h>
+
+#define JUDYERROR(CallerFile, CallerLine, JudyFunc, JudyErrno, JudyErrID) \
+ { \
+ (void) fprintf(stderr, "File '%s', line %d: %s(), " \
+ "JU_ERRNO_* == %d, ID == %d\n", \
+ CallerFile, CallerLine, \
+ JudyFunc, JudyErrno, JudyErrID); \
+ exit(1); \
+ }
+
+#endif /* JUDYERROR */
+#endif /* JUDYERROR_NOTEST */
+
+/* If the JUDYERROR macro is not desired at all, then the following eliminates
+// it. However, the return code from each Judy function (that is, the first
+// parameter of each macro) must be checked by the caller to assure that an
+// error did not occur.
+//
+// Example:
+//
+// #define JUDYERROR_NOTEST 1
+// #include <Judy.h>
+//
+// or use this cc option at compile time:
+//
+// cc -DJUDYERROR_NOTEST ...
+//
+// Example code:
+//
+// J1S(Rc, PArray, Index);
+// if (Rc == JERR) goto ...error
+//
+// or:
+//
+// JLI(PValue, PArray, Index);
+// if (PValue == PJERR) goto ...error
+
+
+// Internal shorthand macros for writing the J1S, etc. macros:
+*/
+#ifdef JUDYERROR_NOTEST /* ============================================ */
+
+/* "Judy Set Error": */
+
+#define J_SE(FuncName,Errno) ((void) 0)
+
+/* Note: In each J_*() case below, the digit is the number of key parameters
+// to the Judy*() call. Just assign the Func result to the callers Rc value
+// without a cast because none is required, and this keeps the API simpler.
+// However, a family of different J_*() macros is needed to support the
+// different numbers of key parameters (0,1,2) and the Func return type.
+//
+// In the names below, "I" = integer result; "P" = pointer result. Note, the
+// Funcs for J_*P() return PPvoid_t, but cast this to a Pvoid_t for flexible,
+// error-free assignment, and then compare to PJERR.
+*/
+#define J_0I(Rc,PArray,Func,FuncName) \
+ { (Rc) = Func(PArray, PJE0); }
+
+#define J_1I(Rc,PArray,Index,Func,FuncName) \
+ { (Rc) = Func(PArray, Index, PJE0); }
+
+#define J_1P(PV,PArray,Index,Func,FuncName) \
+ { (PV) = (Pvoid_t) Func(PArray, Index, PJE0); }
+
+#define J_2I(Rc,PArray,Index,Arg2,Func,FuncName) \
+ { (Rc) = Func(PArray, Index, Arg2, PJE0); }
+
+#define J_2C(Rc,PArray,Index1,Index2,Func,FuncName) \
+ { (Rc) = Func(PArray, Index1, Index2, PJE0); }
+
+#define J_2P(PV,PArray,Index,Arg2,Func,FuncName) \
+ { (PV) = (Pvoid_t) Func(PArray, Index, Arg2, PJE0); }
+
+/* Variations for Judy*Set/InsArray functions: */
+
+#define J_2AI(Rc,PArray,Count,PIndex,Func,FuncName) \
+ { (Rc) = Func(PArray, Count, PIndex, PJE0); }
+#define J_3AI(Rc,PArray,Count,PIndex,PValue,Func,FuncName) \
+ { (Rc) = Func(PArray, Count, PIndex, PValue, PJE0); }
+
+#else /* ================ ! JUDYERROR_NOTEST ============================= */
+
+#define J_E(FuncName,PJE) \
+ JUDYERROR(__FILE__, __LINE__, FuncName, JU_ERRNO(PJE), JU_ERRID(PJE))
+
+#define J_SE(FuncName,Errno) \
+ { \
+ JError_t J_Error; \
+ JU_ERRNO(&J_Error) = (Errno); \
+ JU_ERRID(&J_Error) = __LINE__; \
+ J_E(FuncName, &J_Error); \
+ }
+
+/* Note: In each J_*() case below, the digit is the number of key parameters
+// to the Judy*() call. Just assign the Func result to the callers Rc value
+// without a cast because none is required, and this keeps the API simpler.
+// However, a family of different J_*() macros is needed to support the
+// different numbers of key parameters (0,1,2) and the Func return type.
+//
+// In the names below, "I" = integer result; "P" = pointer result. Note, the
+// Funcs for J_*P() return PPvoid_t, but cast this to a Pvoid_t for flexible,
+// error-free assignment, and then compare to PJERR.
+*/
+#define J_0I(Rc,PArray,Func,FuncName) \
+ { \
+ JError_t J_Error; \
+ if (((Rc) = Func(PArray, &J_Error)) == JERR) \
+ J_E(FuncName, &J_Error); \
+ }
+
+#define J_1I(Rc,PArray,Index,Func,FuncName) \
+ { \
+ JError_t J_Error; \
+ if (((Rc) = Func(PArray, Index, &J_Error)) == JERR) \
+ J_E(FuncName, &J_Error); \
+ }
+
+#define J_1P(Rc,PArray,Index,Func,FuncName) \
+ { \
+ JError_t J_Error; \
+ if (((Rc) = (Pvoid_t) Func(PArray, Index, &J_Error)) == PJERR) \
+ J_E(FuncName, &J_Error); \
+ }
+
+#define J_2I(Rc,PArray,Index,Arg2,Func,FuncName) \
+ { \
+ JError_t J_Error; \
+ if (((Rc) = Func(PArray, Index, Arg2, &J_Error)) == JERR) \
+ J_E(FuncName, &J_Error); \
+ }
+
+/* Variation for Judy*Count functions, which return 0, not JERR, for error (and
+// also for other non-error cases):
+//
+// Note: JU_ERRNO_NFMAX should only apply to 32-bit Judy1, but this header
+// file lacks the necessary ifdefs to make it go away otherwise, so always
+// check against it.
+*/
+#define J_2C(Rc,PArray,Index1,Index2,Func,FuncName) \
+ { \
+ JError_t J_Error; \
+ if ((((Rc) = Func(PArray, Index1, Index2, &J_Error)) == 0) \
+ && (JU_ERRNO(&J_Error) > JU_ERRNO_NFMAX)) \
+ { \
+ J_E(FuncName, &J_Error); \
+ } \
+ }
+
+#define J_2P(PV,PArray,Index,Arg2,Func,FuncName) \
+ { \
+ JError_t J_Error; \
+ if (((PV) = (Pvoid_t) Func(PArray, Index, Arg2, &J_Error)) \
+ == PJERR) J_E(FuncName, &J_Error); \
+ }
+
+/* Variations for Judy*Set/InsArray functions: */
+
+#define J_2AI(Rc,PArray,Count,PIndex,Func,FuncName) \
+ { \
+ JError_t J_Error; \
+ if (((Rc) = Func(PArray, Count, PIndex, &J_Error)) == JERR) \
+ J_E(FuncName, &J_Error); \
+ }
+
+#define J_3AI(Rc,PArray,Count,PIndex,PValue,Func,FuncName) \
+ { \
+ JError_t J_Error; \
+ if (((Rc) = Func(PArray, Count, PIndex, PValue, &J_Error)) \
+ == JERR) J_E(FuncName, &J_Error); \
+ }
+
+#endif /* ================ ! JUDYERROR_NOTEST ============================= */
+
+/* Some of the macros are special cases that use inlined shortcuts for speed
+// with root-level leaves:
+
+// This is a slower version with current processors, but in the future...
+*/
+#define J1T(Rc,PArray,Index) \
+ (Rc) = Judy1Test((Pvoid_t)(PArray), Index, PJE0)
+
+#define J1S( Rc, PArray, Index) \
+ J_1I(Rc, (&(PArray)), Index, Judy1Set, "Judy1Set")
+#define J1SA(Rc, PArray, Count, PIndex) \
+ J_2AI(Rc,(&(PArray)), Count, PIndex, Judy1SetArray, "Judy1SetArray")
+#define J1U( Rc, PArray, Index) \
+ J_1I(Rc, (&(PArray)), Index, Judy1Unset, "Judy1Unset")
+#define J1F( Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), Judy1First, "Judy1First")
+#define J1N( Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), Judy1Next, "Judy1Next")
+#define J1L( Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), Judy1Last, "Judy1Last")
+#define J1P( Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), Judy1Prev, "Judy1Prev")
+#define J1FE(Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), Judy1FirstEmpty, "Judy1FirstEmpty")
+#define J1NE(Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), Judy1NextEmpty, "Judy1NextEmpty")
+#define J1LE(Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), Judy1LastEmpty, "Judy1LastEmpty")
+#define J1PE(Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), Judy1PrevEmpty, "Judy1PrevEmpty")
+#define J1C( Rc, PArray, Index1, Index2) \
+ J_2C(Rc, PArray, Index1, Index2, Judy1Count, "Judy1Count")
+#define J1BC(Rc, PArray, Count, Index) \
+ J_2I(Rc, PArray, Count, &(Index), Judy1ByCount, "Judy1ByCount")
+#define J1FA(Rc, PArray) \
+ J_0I(Rc, (&(PArray)), Judy1FreeArray, "Judy1FreeArray")
+#define J1MU(Rc, PArray) \
+ (Rc) = Judy1MemUsed(PArray)
+
+#define JLG(PV,PArray,Index) \
+ (PV) = (Pvoid_t)JudyLGet((Pvoid_t)PArray, Index, PJE0)
+
+#define JLI( PV, PArray, Index) \
+ J_1P(PV, (&(PArray)), Index, JudyLIns, "JudyLIns")
+
+#define JLIA(Rc, PArray, Count, PIndex, PValue) \
+ J_3AI(Rc,(&(PArray)), Count, PIndex, PValue, JudyLInsArray, \
+ "JudyLInsArray")
+#define JLD( Rc, PArray, Index) \
+ J_1I(Rc, (&(PArray)), Index, JudyLDel, "JudyLDel")
+
+#define JLF( PV, PArray, Index) \
+ J_1P(PV, PArray, &(Index), JudyLFirst, "JudyLFirst")
+
+#define JLN( PV, PArray, Index) \
+ J_1P(PV, PArray, &(Index), JudyLNext, "JudyLNext")
+
+#define JLL( PV, PArray, Index) \
+ J_1P(PV, PArray, &(Index), JudyLLast, "JudyLLast")
+#define JLP( PV, PArray, Index) \
+ J_1P(PV, PArray, &(Index), JudyLPrev, "JudyLPrev")
+#define JLFE(Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), JudyLFirstEmpty, "JudyLFirstEmpty")
+#define JLNE(Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), JudyLNextEmpty, "JudyLNextEmpty")
+#define JLLE(Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), JudyLLastEmpty, "JudyLLastEmpty")
+#define JLPE(Rc, PArray, Index) \
+ J_1I(Rc, PArray, &(Index), JudyLPrevEmpty, "JudyLPrevEmpty")
+#define JLC( Rc, PArray, Index1, Index2) \
+ J_2C(Rc, PArray, Index1, Index2, JudyLCount, "JudyLCount")
+#define JLBC(PV, PArray, Count, Index) \
+ J_2P(PV, PArray, Count, &(Index), JudyLByCount, "JudyLByCount")
+#define JLFA(Rc, PArray) \
+ J_0I(Rc, (&(PArray)), JudyLFreeArray, "JudyLFreeArray")
+#define JLMU(Rc, PArray) \
+ (Rc) = JudyLMemUsed(PArray)
+
+#define JHSI(PV, PArray, PIndex, Count) \
+ J_2P(PV, (&(PArray)), PIndex, Count, JudyHSIns, "JudyHSIns")
+#define JHSG(PV, PArray, PIndex, Count) \
+ (PV) = (Pvoid_t) JudyHSGet(PArray, PIndex, Count)
+#define JHSD(Rc, PArray, PIndex, Count) \
+ J_2I(Rc, (&(PArray)), PIndex, Count, JudyHSDel, "JudyHSDel")
+#define JHSFA(Rc, PArray) \
+ J_0I(Rc, (&(PArray)), JudyHSFreeArray, "JudyHSFreeArray")
+
+#define JSLG( PV, PArray, Index) \
+ J_1P( PV, PArray, Index, JudySLGet, "JudySLGet")
+#define JSLI( PV, PArray, Index) \
+ J_1P( PV, (&(PArray)), Index, JudySLIns, "JudySLIns")
+#define JSLD( Rc, PArray, Index) \
+ J_1I( Rc, (&(PArray)), Index, JudySLDel, "JudySLDel")
+#define JSLF( PV, PArray, Index) \
+ J_1P( PV, PArray, Index, JudySLFirst, "JudySLFirst")
+#define JSLN( PV, PArray, Index) \
+ J_1P( PV, PArray, Index, JudySLNext, "JudySLNext")
+#define JSLL( PV, PArray, Index) \
+ J_1P( PV, PArray, Index, JudySLLast, "JudySLLast")
+#define JSLP( PV, PArray, Index) \
+ J_1P( PV, PArray, Index, JudySLPrev, "JudySLPrev")
+#define JSLFA(Rc, PArray) \
+ J_0I( Rc, (&(PArray)), JudySLFreeArray, "JudySLFreeArray")
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! _JUDY_INCLUDED */
diff --git a/libs/klib/Makefile b/libs/klib/Makefile
index 7e1aca4..199c362 100644
--- a/libs/klib/Makefile
+++ b/libs/klib/Makefile
@@ -42,44 +42,42 @@ include $(TOP)/build/Makefile.env
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+all: makedirs
+ @ $(MAKE) -C $(SRCDIR)/judy all
+ @ $(MAKE_CMD) $(TARGDIR)/all
-all std: makedirs vers-includes
+std: makedirs
+ @ $(MAKE) -C $(SRCDIR)/judy std
@ $(MAKE_CMD) $(TARGDIR)/std
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): makedirs
+ @ $(MAKE) -C $(SRCDIR)/judy std
@ $(MAKE_CMD) $(ILIBDIR)/$@
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): makedirs
+ @ $(MAKE) -C $(SRCDIR)/judy std
@ $(MAKE_CMD) $(LIBDIR)/$@
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
#-------------------------------------------------------------------------------
-# std
+# all, std
#
-$(TARGDIR)/std: \
+$(TARGDIR)/all $(TARGDIR)/std: \
$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
$(addprefix $(LIBDIR)/,$(EXT_LIBS))
-.PHONY: $(TARGDIR)/std
+.PHONY: $(TARGDIR)/all $(TARGDIR)/std
#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
+ @ $(MAKE) -C $(SRCDIR)/judy clean
.PHONY: clean
#-------------------------------------------------------------------------------
-# tag
-#
-tag: \
- $(addsuffix _tag,$(ALL_LIBS))
-
-.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
-
-#-------------------------------------------------------------------------------
# klib
#
$(LIBDIR)/libklib: $(addprefix $(LIBDIR)/libklib.,$(LIBEXT))
@@ -108,6 +106,7 @@ KLIB_SRC = \
SHA-32bit \
SHA-64bit \
qsort \
+ ksort \
bsearch \
pack \
unpack \
@@ -126,7 +125,9 @@ KLIB_SRC = \
syslog \
systime \
rc-tbl \
- rc-idx-tbl
+ rc-idx-tbl \
+ judy-vector \
+ report
ifeq (win,$(OS))
KLIB_SRC += sysalloc
@@ -140,6 +141,7 @@ KLIB_OBJ = \
$(addsuffix .$(LOBX),$(KLIB_SRC))
KLIB_LIB = \
+ -sjudy \
-lm
$(LIBDIR)/libklib.$(SHLX): $(KLIB_OBJ)
diff --git a/libs/klib/SHA-32bit.c b/libs/klib/SHA-32bit.c
old mode 100755
new mode 100644
index 4747430..3b4bbfc
--- a/libs/klib/SHA-32bit.c
+++ b/libs/klib/SHA-32bit.c
@@ -200,7 +200,7 @@ static __inline__ void SHA_32b_Append(struct SHA32bitState *ctx, int which, cons
memcpy(&ctx->W[ctx->cur], &data[i], n);
ctx->cur += n;
if (ctx->cur == 64) {
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
uint32_t W[16];
for (j = 0; j != 16; ++j)
@@ -223,7 +223,7 @@ static __inline__ void SHA_32b_Finish(const struct SHA32bitState *ctx, int which
memset(W, 0, sizeof(W));
for (j = 0; j != n; ++j) {
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
W[j] = bswap_32(((const uint32_t *)ctx->W)[j]);
#else
W[j] = ((const uint32_t *)ctx->W)[j];
@@ -264,7 +264,7 @@ void CC SHA1StateFinish(SHA1State *ctx, uint8_t hash[20])
uint32_t H[8];
SHA_32b_Finish(ctx, 0, H);
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
{
H[0] = bswap_32(H[0]);
H[1] = bswap_32(H[1]);
@@ -291,7 +291,7 @@ void CC SHA256StateFinish(SHA256State *ctx, uint8_t hash[32])
uint32_t H[8];
SHA_32b_Finish(ctx, 1, H);
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
{
H[0] = bswap_32(H[0]);
H[1] = bswap_32(H[1]);
diff --git a/libs/klib/SHA-64bit.c b/libs/klib/SHA-64bit.c
old mode 100755
new mode 100644
index 2e9a69a..1fc1914
--- a/libs/klib/SHA-64bit.c
+++ b/libs/klib/SHA-64bit.c
@@ -162,7 +162,7 @@ static __inline__ void SHA_64b_Append(struct SHA64bitState *ctx, const uint8_t d
memcpy(&ctx->W[ctx->cur], &data[i], n);
ctx->cur += n;
if (ctx->cur == 128) {
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
uint64_t W[16];
for (j = 0; j != 16; ++j)
@@ -185,7 +185,7 @@ static __inline__ void SHA_64b_Finish(const struct SHA64bitState *ctx, uint64_t
memset(W, 0, sizeof(W));
for (j = 0; j != n; ++j) {
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
W[j] = bswap_64(((const uint64_t *)ctx->W)[j]);
#else
W[j] = ((const uint64_t *)ctx->W)[j];
@@ -226,7 +226,7 @@ void CC SHA384StateFinish(SHA384State *ctx, uint8_t hash[48])
uint64_t H[8];
SHA_64b_Finish(ctx, H);
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
{
H[0] = bswap_64(H[0]);
H[1] = bswap_64(H[1]);
@@ -254,7 +254,7 @@ void CC SHA512StateFinish(SHA512State *ctx, uint8_t hash[64])
uint64_t H[8];
SHA_64b_Finish(ctx, H);
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
{
H[0] = bswap_64(H[0]);
H[1] = bswap_64(H[1]);
diff --git a/libs/klib/data-buffer.c b/libs/klib/data-buffer.c
index 0761b0c..dcf0ee7 100644
--- a/libs/klib/data-buffer.c
+++ b/libs/klib/data-buffer.c
@@ -50,24 +50,22 @@ struct buffer_impl_t {
#if DEBUG_MALLOC_FREE
uint32_t foo;
#endif
- uint8_t data [ 8 ];
};
-
-static
-size_t alloc_size(size_t capacity) {
- const size_t mask = ( 1U << 12 ) - 1;
- return ( capacity + mask + sizeof(buffer_impl_t) - 8 ) & ~ mask;
+static size_t roundup(size_t value, unsigned bits)
+{
+ size_t const mask = (((size_t)1u) << bits) - 1;
+ return (value + mask) & (~mask);
}
static
rc_t allocate(buffer_impl_t **target, size_t capacity) {
- buffer_impl_t *y = malloc(capacity = alloc_size(capacity));
+ buffer_impl_t *y = malloc(capacity + sizeof(*y));
if (y == NULL)
return RC(rcRuntime, rcBuffer, rcAllocating, rcMemory, rcExhausted);
- y -> allocated = capacity;
+ y->allocated = capacity;
atomic32_set(&y->refcount, 1);
#if DEBUG_MALLOC_FREE
@@ -84,8 +82,7 @@ static buffer_impl_t *add_ref(buffer_impl_t *self) {
}
static buffer_impl_t *test_add_ref(buffer_impl_t *self) {
- if ( self != NULL )
- atomic32_inc ( & self -> refcount );
+ if (self) add_ref(self);
return self;
}
@@ -112,34 +109,49 @@ static void release(buffer_impl_t *self) {
static rc_t reallocate(buffer_impl_t **target, size_t capacity) {
buffer_impl_t *temp;
buffer_impl_t *self = *target;
- size_t new_capacity = alloc_size(capacity);
- if (new_capacity <= self->allocated)
+ if (capacity <= self->allocated)
return 0;
/* check reference count for copies */
- if ( atomic32_read ( & self -> refcount ) <= 1 )
+ if (atomic32_read(&self->refcount) <= 1)
{
- temp = realloc ( self, new_capacity );
- if ( temp == NULL )
- return RC ( rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted );
+ temp = realloc(self, capacity + sizeof(*temp));
+ if (temp == NULL)
+ return RC(rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted);
}
else
{
- temp = malloc ( new_capacity );
- if ( temp == NULL )
- return RC ( rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted );
- memcpy(temp, self, self->allocated);
+ temp = malloc(capacity + sizeof(*temp));
+ if (temp == NULL)
+ return RC(rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted);
+ memcpy(temp, self, self->allocated + sizeof(*temp));
release(self);
}
self = temp;
- self->allocated = new_capacity;
+ self->allocated = capacity;
atomic32_set(&self->refcount, 1);
*target = self;
return 0;
}
+static rc_t shrink(buffer_impl_t **target, size_t capacity)
+{
+ buffer_impl_t *self = *target;
+
+ if (capacity < self->allocated && atomic32_read(&self->refcount) == 1) {
+ buffer_impl_t *temp = realloc(self, capacity + sizeof(*temp));
+
+ if (temp == NULL)
+ return RC(rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted);
+
+ temp->allocated = capacity;
+ *target = temp;
+ }
+ return 0;
+}
+
/*
either returns original with refcount == 2
or returns new copy with refcount == 1
@@ -148,32 +160,44 @@ static buffer_impl_t* make_copy(buffer_impl_t *self) {
if (atomic32_read_and_add_eq(&self->refcount, 1, 1)==1)
return self;
else {
- buffer_impl_t *copy = malloc(self->allocated);
+ buffer_impl_t *copy = malloc(self->allocated + sizeof(*self));
if (copy) {
- memcpy(copy, self, self->allocated);
+ memcpy(copy, self, self->allocated + sizeof(*copy));
atomic32_set(©->refcount, 1);
}
return copy;
}
}
+static void const *get_data(buffer_impl_t const *self)
+{
+ return &self[1];
+}
+
+static void const *get_data_endp(buffer_impl_t const *self)
+{
+ return (uint8_t const *)get_data(self) + self->allocated;
+}
+
static
-rc_t buffer_impl_check_integrity ( const buffer_impl_t *self, const uint8_t *base, size_t offset, size_t size )
+rc_t buffer_impl_check_integrity (buffer_impl_t const *self, uint8_t const *base, size_t offset, size_t size)
{
- if ( self == NULL )
+ void const *const endp = &base[size+offset];
+
+ if (self == NULL)
return 0;
/* refcount is of major importance */
- if ( atomic32_read ( & self -> refcount ) <= 0 )
- return RC ( rcRuntime, rcBuffer, rcValidating, rcBuffer, rcDestroyed );
+ if (atomic32_read (& self->refcount) <= 0)
+ return RC (rcRuntime, rcBuffer, rcValidating, rcBuffer, rcDestroyed);
#if DEBUG_MALLOC_FREE
- if ( self -> foo != 0 )
- return RC ( rcRuntime, rcBuffer, rcValidating, rcBuffer, rcDestroyed );
+ if (self->foo != 0)
+ return RC (rcRuntime, rcBuffer, rcValidating, rcBuffer, rcDestroyed);
#endif
- if ( base < self -> data || & base [ offset + size ] > & self -> data [ self -> allocated ] )
- return RC ( rcRuntime, rcBuffer, rcValidating, rcData, rcCorrupt );
+ if ((void const *)base < get_data(self) || get_data_endp(self) < endp)
+ return RC (rcRuntime, rcBuffer, rcValidating, rcData, rcCorrupt);
return 0;
}
@@ -185,30 +209,30 @@ rc_t buffer_impl_check_integrity ( const buffer_impl_t *self, const uint8_t *bas
*
* "capacity" [ IN ] - the number of bytes to be allocated
*/
-LIB_EXPORT rc_t CC KDataBufferMake( KDataBuffer *target, uint64_t elem_bits, uint64_t elem_count ) {
+LIB_EXPORT rc_t CC KDataBufferMake(KDataBuffer *target, uint64_t elem_bits, uint64_t elem_count) {
rc_t rc;
- uint64_t bytes;
+ size_t bytes;
buffer_impl_t **impp = (buffer_impl_t **)&target->ignore;
if (target == NULL)
return RC(rcRuntime, rcBuffer, rcConstructing, rcParam, rcNull);
- bytes = ( elem_bits * elem_count + 7 ) >> 3;
- if ( ( bytes >> 32 ) != 0 )
+ bytes = roundup((elem_bits * elem_count + 7) / 8, 12);
+ if (8 * (uint64_t)bytes < elem_bits * elem_count)
return RC(rcRuntime, rcBuffer, rcConstructing, rcParam, rcTooBig);
- memset ( target, 0, sizeof * target );
+ memset (target, 0, sizeof(*target));
- rc = allocate ( impp, ( size_t ) bytes );
- if ( rc == 0 ) {
- target->base = (**impp).data;
+ rc = allocate(impp, bytes);
+ if (rc == 0) {
+ target->base = (void *)get_data(*impp);
target->elem_bits = elem_bits;
target->elem_count = elem_count;
}
return rc;
}
-LIB_EXPORT rc_t CC KDataBufferResize( KDataBuffer *self, uint64_t new_count) {
+LIB_EXPORT rc_t CC KDataBufferResize(KDataBuffer *self, uint64_t new_count) {
rc_t rc;
buffer_impl_t *imp;
buffer_impl_t *new_imp;
@@ -226,22 +250,22 @@ LIB_EXPORT rc_t CC KDataBufferResize( KDataBuffer *self, uint64_t new_count) {
}
bits = self->elem_bits * new_count;
- if ( ( ( bits + 7 ) >> 35 ) != 0 )
+ if (((bits + 7) >> 35) != 0)
return RC(rcRuntime, rcBuffer, rcConstructing, rcParam, rcTooBig);
imp = (buffer_impl_t *)self->ignore;
if (imp == NULL) {
/* new buffer */
- rc = allocate(&imp, ( size_t ) ( ( bits + 7 ) >> 3 ) );
+ rc = allocate(&imp, roundup((bits + 7) / 8, 12));
if (rc == 0) {
self->ignore = imp;
- self->base = imp->data;
+ self->base = (void *)get_data(imp);
self->elem_count = new_count;
}
return rc;
}
- cur_end = &((const uint8_t *)imp)[imp->allocated];
+ cur_end = &((const uint8_t *)imp)[imp->allocated + sizeof *imp];
new_end = &((const uint8_t *)self->base)[(bits + self->bit_offset + 7) >> 3];
if (cur_end >= new_end) {
/* requested end-of-buffer is within current allocation; realloc not required */
@@ -252,31 +276,31 @@ LIB_EXPORT rc_t CC KDataBufferResize( KDataBuffer *self, uint64_t new_count) {
if (!KDataBufferWritable(self))
return RC(rcRuntime, rcBuffer, rcResizing, rcSelf, rcReadonly);
- new_size = (bits + 7) >> 3;
- if (self->base == imp->data && self->bit_offset == 0) {
+ new_size = roundup((bits + 7) / 8, 12);
+ if (self->base == get_data(imp) && self->bit_offset == 0) {
rc = reallocate(&imp, new_size);
if (rc == 0) {
self->ignore = imp;
- self->base = imp->data;
+ self->base = (void *)get_data(imp);
self->elem_count = new_count;
}
return rc;
}
/* is sub-buffer but is sole reference */
- rc = allocate(&new_imp, new_size);
+ rc = allocate(&new_imp, roundup(new_size, 12));
if (rc == 0) {
- memcpy(new_imp->data, self->base, new_size);
+ memcpy((void *)get_data(new_imp), self->base, new_size);
release(imp);
+ self->base = (void *)get_data(new_imp);
self->ignore = new_imp;
- self->base = new_imp->data;
self->elem_count = new_count;
}
return rc;
}
-LIB_EXPORT rc_t CC KDataBufferSub ( const KDataBuffer *self,
- KDataBuffer *target, uint64_t start, uint64_t count )
+LIB_EXPORT rc_t CC KDataBufferSub (const KDataBuffer *self,
+ KDataBuffer *target, uint64_t start, uint64_t count)
{
if (self == NULL || target == NULL)
return RC(rcRuntime, rcBuffer, rcConstructing, rcParam, rcNull);
@@ -293,36 +317,37 @@ LIB_EXPORT rc_t CC KDataBufferSub ( const KDataBuffer *self,
}
{
buffer_impl_t *imp = (buffer_impl_t *)self->ignore;
- bitsz_t offset = self->bit_offset + (((bitsz_t)((const uint8_t *)self->base - (const uint8_t *)imp->data)) << 3);
+ bitsz_t offset = self->bit_offset + (((bitsz_t)((uint8_t const *)self->base - (uint8_t const *)get_data(imp))) << 3);
if (start > self->elem_count){
start = self->elem_count;
- count = 0;
- } else if (count > self->elem_count) {
- count = self->elem_count;
- }
- if ( start + count > self->elem_count) {
- count = self->elem_count - start;
- }
+ count = 0;
+ }
+ else if (count > self->elem_count) {
+ count = self->elem_count;
+ }
+ if (start + count > self->elem_count) {
+ count = self->elem_count - start;
+ }
target->elem_count = count;
offset += (bitsz_t)start * self->elem_bits;
- target->base = &imp->data[offset >> 3];
+ target->base = &((uint8_t *)get_data(imp))[offset >> 3];
target->bit_offset = (uint8_t)offset & 0x07;
}
return 0;
}
-LIB_EXPORT rc_t CC KDataBufferCast( const KDataBuffer *self, KDataBuffer *target, uint64_t new_elem_bits, bool can_shrink) {
+LIB_EXPORT rc_t CC KDataBufferCast(const KDataBuffer *self, KDataBuffer *target, uint64_t new_elem_bits, bool can_shrink) {
bitsz_t bits;
size_t new_elem_count;
bitsz_t new_bits;
- if ( self == NULL )
- return RC ( rcRuntime, rcBuffer, rcCasting, rcSelf, rcNull );
- if ( target == NULL )
- return RC ( rcRuntime, rcBuffer, rcCasting, rcParam, rcNull );
- if ( new_elem_bits == 0 )
- return RC ( rcRuntime, rcBuffer, rcCasting, rcParam, rcInvalid );
+ if (self == NULL)
+ return RC (rcRuntime, rcBuffer, rcCasting, rcSelf, rcNull);
+ if (target == NULL)
+ return RC (rcRuntime, rcBuffer, rcCasting, rcParam, rcNull);
+ if (new_elem_bits == 0)
+ return RC (rcRuntime, rcBuffer, rcCasting, rcParam, rcInvalid);
bits = KDataBufferBits(self);
new_elem_count = bits / new_elem_bits;
@@ -340,7 +365,7 @@ LIB_EXPORT rc_t CC KDataBufferCast( const KDataBuffer *self, KDataBuffer *target
return RC(rcRuntime, rcBuffer, rcCasting, rcParam, rcInvalid);
}
-LIB_EXPORT rc_t CC KDataBufferMakeWritable ( const KDataBuffer *cself, KDataBuffer *target )
+LIB_EXPORT rc_t CC KDataBufferMakeWritable (const KDataBuffer *cself, KDataBuffer *target)
{
if (cself == NULL || target == NULL)
@@ -352,16 +377,16 @@ LIB_EXPORT rc_t CC KDataBufferMakeWritable ( const KDataBuffer *cself, KDataBuff
buffer_impl_t *self = (buffer_impl_t *)cself->ignore;
buffer_impl_t *copy;
- if (cself->base == self->data && cself->bit_offset == 0) {
+ if (cself->base == get_data(self) && cself->bit_offset == 0) {
/* not a sub-buffer */
copy = make_copy(self);
if (copy) {
- if ((const KDataBuffer *)target == cself)
+ if ((KDataBuffer const *)target == cself)
release(self);
else
*target = *cself;
target->ignore = copy;
- target->base = copy->data;
+ target->base = (uint8_t *)get_data(copy);
return 0;
}
@@ -375,15 +400,15 @@ LIB_EXPORT rc_t CC KDataBufferMakeWritable ( const KDataBuffer *cself, KDataBuff
/* sub-buffer so make new and copy */
rc_t rc;
- rc = allocate(©, KDataBufferBytes(cself));
+ rc = allocate(©, roundup(KDataBufferBytes(cself), 12));
if (rc == 0) {
- bitcpy(copy->data, 0, cself->base, cself->bit_offset, KDataBufferBits(cself));
+ bitcpy((void *)get_data(copy), 0, cself->base, cself->bit_offset, KDataBufferBits(cself));
if ((const KDataBuffer *)target == cself)
release(self);
else
*target = *cself;
target->ignore = copy;
- target->base = copy->data;
+ target->base = (uint8_t *)get_data(copy);
target->bit_offset = 0;
return 0;
}
@@ -392,54 +417,70 @@ LIB_EXPORT rc_t CC KDataBufferMakeWritable ( const KDataBuffer *cself, KDataBuff
}
}
-LIB_EXPORT rc_t CC KDataBufferWhack ( KDataBuffer *self )
+LIB_EXPORT rc_t CC KDataBufferWhack (KDataBuffer *self)
{
- if ( self )
+ if (self)
{
- if ( self->ignore )
- release( (buffer_impl_t *)self->ignore );
+ if (self->ignore)
+ release((buffer_impl_t *)self->ignore);
memset(self, 0, sizeof(*self));
}
return 0;
}
-LIB_EXPORT bool CC KDataBufferWritable( const KDataBuffer *cself )
+LIB_EXPORT bool CC KDataBufferWritable(const KDataBuffer *cself)
{
return (cself != NULL && cself->ignore != NULL &&
atomic32_read(&((buffer_impl_t *)cself->ignore)->refcount) == 1) ? true : false;
}
+LIB_EXPORT rc_t CC KDataBufferShrink(KDataBuffer *self)
+{
+ if (self && self->ignore) {
+ return shrink((buffer_impl_t **)&self->ignore,
+ (self->elem_bits * self->elem_count + self->bit_offset + 7) / 8);
+ }
+ return 0;
+}
+
+LIB_EXPORT size_t CC KDataBufferMemorySize(KDataBuffer const *self)
+{
+ if (self && self->ignore) {
+ return ((buffer_impl_t const *)self->ignore)->allocated + sizeof(buffer_impl_t);
+ }
+ return 0;
+}
/* CheckIntegrity
* performs some level of integrity checking on buffer structure
*/
-LIB_EXPORT rc_t CC KDataBufferCheckIntegrity ( const KDataBuffer *self )
+LIB_EXPORT rc_t CC KDataBufferCheckIntegrity (const KDataBuffer *self)
{
/* whether NULL is allowed is determined by caller */
- if ( self == NULL )
- return RC ( rcRuntime, rcBuffer, rcValidating, rcSelf, rcNull );
+ if (self == NULL)
+ return RC (rcRuntime, rcBuffer, rcValidating, rcSelf, rcNull);
/* elem-bits must not be 0, unless there is no allocation */
- if ( self -> elem_bits == 0 )
+ if (self->elem_bits == 0)
{
- if ( self -> elem_count == 0 && self -> bit_offset == 0 && self -> ignore == NULL ) {
+ if (self->elem_count == 0 && self->bit_offset == 0 && self->ignore == NULL) {
/* no allocation */
return 0;
}
- return RC ( rcRuntime, rcBuffer, rcValidating, rcSelf, rcCorrupt );
+ return RC (rcRuntime, rcBuffer, rcValidating, rcSelf, rcCorrupt);
}
/* if there is no allocation, check self */
- if ( self -> ignore == NULL )
+ if (self->ignore == NULL)
{
- if ( self -> elem_count != 0 || self -> bit_offset != 0 )
- return RC ( rcRuntime, rcBuffer, rcValidating, rcSelf, rcCorrupt );
+ if (self->elem_count != 0 || self->bit_offset != 0)
+ return RC (rcRuntime, rcBuffer, rcValidating, rcSelf, rcCorrupt);
}
/* test self against allocated buffer */
- return buffer_impl_check_integrity ( self -> ignore, ( const void* ) self -> base,
- self -> bit_offset / self -> elem_bits, KDataBufferBytes ( self ) );
+ return buffer_impl_check_integrity (self->ignore, (const void*) self->base,
+ self->bit_offset / self->elem_bits, KDataBufferBytes (self));
}
/* 0x101e9b000 */
diff --git a/libs/klib/judy-vector.c b/libs/klib/judy-vector.c
new file mode 100644
index 0000000..3030d8e
--- /dev/null
+++ b/libs/klib/judy-vector.c
@@ -0,0 +1,892 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/extern.h>
+#include <klib/vector.h>
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#define JUST_DEFINE_YOUR_STUFF 1
+#include "Judy.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------
+ * KVector
+ * encapsulated vector interface
+ *
+ * a vector obeys a particular set of messages
+ * it may be implemented as an array, but not necessarily.
+ *
+ * the principal property of a vector is that it acts as a map
+ * between an integer key and a value of some type. in this case,
+ * we only accept unsigned integers as keys.
+ */
+struct KVector
+{
+ void *nancy;
+ KRefcount refcount;
+ uint32_t fixed_size;
+ bool nancy_bool;
+};
+
+
+/* Make
+ * create an empty vector
+ */
+LIB_EXPORT rc_t CC KVectorMake ( KVector **vp )
+{
+ rc_t rc;
+
+ if ( vp == NULL )
+ rc = RC ( rcCont, rcVector, rcConstructing, rcParam, rcNull );
+ else
+ {
+ KVector *v = calloc ( 1, sizeof * v );
+ if ( v == NULL )
+ rc = RC ( rcCont, rcVector, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ KRefcountInit ( & v -> refcount, 1, "KVector", "make", "v" );
+ * vp = v;
+ return 0;
+ }
+
+ * vp = NULL;
+ }
+
+ return rc;
+}
+
+
+/* Whack
+ */
+static
+rc_t KVectorWhack ( KVector *self )
+{
+ if ( self -> nancy != NULL )
+ {
+ JError_t err;
+ Word_t whee =
+ ( self -> nancy_bool ? Judy1FreeArray : JudyLFreeArray )
+ ( & self -> nancy, & err );
+ ( void ) whee;
+ }
+
+ free ( self );
+ return 0;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KVectorAddRef ( const KVector *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "KVector" ) )
+ {
+ case krefOkay:
+ break;
+ case krefLimit:
+ return RC ( rcCont, rcVector, rcAttaching, rcRange, rcExcessive );
+ default:
+ return RC ( rcCont, rcVector, rcAttaching, rcRefcount, rcDestroyed );
+ }
+ }
+ return 0;
+}
+
+LIB_EXPORT rc_t CC KVectorRelease ( const KVector *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "KVector" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ case krefZero:
+ return KVectorWhack ( ( KVector* ) self );
+ default:
+ return RC ( rcCont, rcVector, rcReleasing, rcRefcount, rcDestroyed );
+ }
+ }
+ return 0;
+}
+
+
+/* NancyError
+ * translate a JError_t to an rc_t
+ */
+static
+rc_t NancyError ( const JError_t *err, enum RCContext ctx )
+{
+ switch ( JU_ERRNO ( err ) )
+ {
+ case JU_ERRNO_NONE:
+ break;
+ case JU_ERRNO_FULL:
+ return RC ( rcCont, rcVector, ctx, rcRange, rcExcessive );
+ case JU_ERRNO_NOMEM:
+ return RC ( rcCont, rcVector, ctx, rcMemory, rcExhausted );
+ case JU_ERRNO_NULLPPARRAY:
+ case JU_ERRNO_NULLPINDEX:
+ return RC ( rcCont, rcVector, ctx, rcParam, rcNull );
+ case JU_ERRNO_NOTJUDY1:
+ case JU_ERRNO_NOTJUDYL:
+ case JU_ERRNO_NOTJUDYSL:
+ return RC ( rcCont, rcVector, ctx, rcType, rcIncorrect );
+ case JU_ERRNO_OVERRUN:
+ case JU_ERRNO_CORRUPT:
+ return RC ( rcCont, rcVector, ctx, rcVector, rcCorrupt );
+ case JU_ERRNO_NONNULLPARRAY:
+ case JU_ERRNO_NULLPVALUE:
+ case JU_ERRNO_UNSORTED:
+ return RC ( rcCont, rcVector, ctx, rcParam, rcInvalid );
+ }
+
+ return 0;
+}
+
+
+/* Get
+ * get an untyped value
+ * returns rc_t state of rcNull if index is not set
+ *
+ * "key" [ IN ] - vector index
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for value
+ *
+ * "bytes" [ OUT ] - return parameter for bytes in value
+ *
+ * NB - if rc_t state is rcInsufficient, "bytes" will contain
+ * the number of bytes required to access the indexed value
+ */
+static
+rc_t Nancy1Test ( const void *nancy, uint64_t idx, bool *value )
+{
+ JError_t err;
+ int data = Judy1Test ( nancy, ( Word_t ) idx, & err );
+ if ( data == JERR )
+ return NancyError ( & err, rcAccessing );
+ * value = data != 0;
+ return 0;
+}
+
+static
+rc_t NancyLGet ( const void *nancy, uint64_t idx, Word_t *value )
+{
+ JError_t err;
+ PPvoid_t datap = JudyLGet ( nancy, ( Word_t ) idx, & err );
+ if ( datap == NULL )
+ return RC ( rcCont, rcVector, rcAccessing, rcItem, rcNotFound );
+ if ( datap == PPJERR )
+ return NancyError ( & err, rcAccessing );
+
+ * value = * ( const Word_t* ) datap;
+ return 0;
+}
+
+LIB_EXPORT rc_t CC KVectorGet ( const KVector *self, uint64_t key,
+ void *buffer, size_t bsize, size_t *bytes )
+{
+ rc_t rc;
+
+ if ( bytes == NULL )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcParam, rcNull );
+ else
+ {
+ if ( self == NULL )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcSelf, rcNull );
+ else if ( buffer == NULL && bsize != 0 )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcParam, rcNull );
+ else if ( sizeof key > sizeof ( Word_t ) && ( key >> 32 ) != 0 )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcRange, rcExcessive );
+ else
+ {
+ if ( self -> nancy_bool )
+ {
+ bool data;
+ rc = Nancy1Test ( self -> nancy, key, & data );
+ if ( rc == 0 )
+ {
+ * bytes = sizeof data;
+ if ( bsize < sizeof data )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcBuffer, rcInsufficient );
+ else
+ * ( bool* ) buffer = data;
+ return rc;
+ }
+ }
+ else
+ {
+ Word_t data;
+ rc = NancyLGet ( self -> nancy, key, & data );
+ if ( rc == 0 )
+ {
+ if ( self -> fixed_size == 0 )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcFunction, rcUnsupported );
+ else
+ {
+ * bytes = self -> fixed_size;
+ if ( bsize < self -> fixed_size )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcBuffer, rcInsufficient );
+ else switch ( self -> fixed_size )
+ {
+ case 1:
+ if ( data >= 0x100 )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcData, rcCorrupt );
+ * ( uint8_t* ) buffer = ( uint8_t ) data;
+ break;
+ case 2:
+ if ( data >= 0x10000 )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcData, rcCorrupt );
+ * ( uint16_t* ) buffer = ( uint16_t ) data;
+ break;
+ case 4:
+ if ( sizeof data > 4 && ( data >> 32 ) != 0 )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcData, rcCorrupt );
+ * ( uint32_t* ) buffer = ( uint32_t ) data;
+ break;
+ case 8:
+ * ( uint64_t* ) buffer = ( uint64_t ) data;
+ break;
+ default:
+ rc = RC ( rcCont, rcVector, rcAccessing, rcType, rcUnsupported );
+ }
+ return rc;
+ }
+ }
+ }
+ }
+
+ * bytes = 0;
+ }
+
+ return rc;
+}
+
+/* Get
+ * get typed values
+ * returns rc_t state of rcNull if index is not set
+ *
+ * "key" [ IN ] - vector index
+ *
+ * "data" [ OUT ] - return parameter for value
+ */
+LIB_EXPORT rc_t CC KVectorGetBool ( const KVector *self, uint64_t key, bool *data )
+{
+ size_t bytes;
+ return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetI8 ( const KVector *self, uint64_t key, int8_t *data )
+{
+ size_t bytes;
+ return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetI16 ( const KVector *self, uint64_t key, int16_t *data )
+{
+ size_t bytes;
+ return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetI32 ( const KVector *self, uint64_t key, int32_t *data )
+{
+ size_t bytes;
+ return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetI64 ( const KVector *self, uint64_t key, int64_t *data )
+{
+ size_t bytes;
+ return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetU8 ( const KVector *self, uint64_t key, uint8_t *data )
+{
+ size_t bytes;
+ return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetU16 ( const KVector *self, uint64_t key, uint16_t *data )
+{
+ size_t bytes;
+ return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetU32 ( const KVector *self, uint64_t key, uint32_t *data )
+{
+ size_t bytes;
+ return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetU64 ( const KVector *self, uint64_t key, uint64_t *data )
+{
+ size_t bytes;
+ return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetF32 ( const KVector *self, uint64_t key, float *data )
+{
+ size_t bytes;
+ rc_t rc = KVectorGet ( self, key, data, sizeof * data, & bytes );
+ if ( rc == 0 && bytes != sizeof * data )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcType, rcUnsupported );
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KVectorGetF64 ( const KVector *self, uint64_t key, double *data )
+{
+ size_t bytes;
+ rc_t rc = KVectorGet ( self, key, data, sizeof * data, & bytes );
+ if ( rc == 0 && bytes != sizeof * data )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcType, rcUnsupported );
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KVectorGetPtr ( const KVector *self, uint64_t key, void **data )
+{
+ size_t bytes;
+ rc_t rc = KVectorGet ( self, key, data, sizeof * data, & bytes );
+ if ( rc == 0 && bytes != sizeof * data )
+ rc = RC ( rcCont, rcVector, rcAccessing, rcType, rcUnsupported );
+ return rc;
+}
+
+
+/* Set
+ * set an untyped value
+ *
+ * "key" [ IN ] - vector index
+ *
+ * "data" [ IN ] and "bytes" [ IN ] - value buffer
+ */
+static
+rc_t Nancy1Set ( void **nancy, uint64_t idx, bool value )
+{
+ JError_t err;
+ int status = ( value ? Judy1Set : Judy1Unset ) ( nancy, ( Word_t ) idx, & err );
+ if ( status == JERR )
+ return NancyError ( & err, rcWriting );
+ return 0;
+}
+
+static
+rc_t NancyLSet ( void **nancy, uint64_t idx, Word_t value )
+{
+ JError_t err;
+ PPvoid_t datap = JudyLIns ( nancy, ( Word_t ) idx, & err );
+ if ( datap == NULL )
+ return RC ( rcCont, rcVector, rcWriting, rcMemory, rcExhausted );
+ if ( datap == PPJERR )
+ return NancyError ( & err, rcWriting );
+ * ( Word_t* ) datap = value;
+ return 0;
+}
+
+LIB_EXPORT rc_t CC KVectorSet ( KVector *self, uint64_t key,
+ const void *data, size_t bytes )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcCont, rcVector, rcWriting, rcSelf, rcNull );
+ else if ( data == NULL )
+ rc = RC ( rcCont, rcVector, rcWriting, rcParam, rcNull );
+ else if ( bytes == 0 )
+ rc = RC ( rcCont, rcVector, rcWriting, rcParam, rcEmpty );
+ else
+ {
+ Word_t value;
+
+ /* detect first set */
+ if ( self -> nancy == NULL )
+ {
+ switch ( bytes )
+ {
+ case 1:
+ case 2:
+ case 4:
+ break;
+ case 8:
+ if ( sizeof value < 8 )
+ return RC ( rcCont, rcVector, rcWriting, rcParam, rcExcessive );
+ }
+
+ self -> fixed_size = ( uint32_t ) bytes;
+ }
+ else if ( bytes != ( size_t ) self -> fixed_size )
+ {
+ return RC ( rcCont, rcVector, rcWriting, rcParam, rcInconsistent );
+ }
+ else if ( self -> nancy_bool )
+ {
+ switch ( * ( const bool* ) data )
+ {
+ case 0:
+ case 1:
+ break;
+ default:
+ return RC ( rcCont, rcVector, rcWriting, rcParam, rcInvalid );
+ }
+ return Nancy1Set ( & self -> nancy, key, * ( const bool* ) data );
+ }
+
+ switch ( bytes )
+ {
+ case 1:
+ value = * ( const uint8_t* ) data;
+ break;
+ case 2:
+ value = * ( const uint16_t* ) data;
+ break;
+ case 4:
+ value = * ( const uint32_t* ) data;
+ break;
+ case 8:
+ value = * ( const uint64_t* ) data;
+ break;
+ }
+
+ rc = NancyLSet ( & self -> nancy, key, value );
+ }
+
+ return rc;
+}
+
+/* Set
+ * set typed values
+ *
+ * "key" [ IN ] - vector index
+ *
+ * "data" [ IN ] - value
+ */
+LIB_EXPORT rc_t CC KVectorSetBool ( KVector *self, uint64_t key, bool data )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcCont, rcVector, rcWriting, rcSelf, rcNull );
+ else
+ {
+ /* detect first set */
+ if ( self -> nancy == NULL )
+ {
+ self -> fixed_size = sizeof data;
+ self -> nancy_bool = true;
+ }
+ else if ( ! self -> nancy_bool )
+ {
+ return RC ( rcCont, rcVector, rcWriting, rcParam, rcInvalid );
+ }
+
+ rc = Nancy1Set ( & self -> nancy, key, data );
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KVectorSetI8 ( KVector *self, uint64_t key, int8_t value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetI16 ( KVector *self, uint64_t key, int16_t value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetI32 ( KVector *self, uint64_t key, int32_t value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetI64 ( KVector *self, uint64_t key, int64_t value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetU8 ( KVector *self, uint64_t key, uint8_t value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetU16 ( KVector *self, uint64_t key, uint16_t value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetU32 ( KVector *self, uint64_t key, uint32_t value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetU64 ( KVector *self, uint64_t key, uint64_t value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetF32 ( KVector *self, uint64_t key, float value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetF64 ( KVector *self, uint64_t key, double value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetPtr ( KVector *self, uint64_t key, const void *value )
+{
+ return KVectorSet ( self, key, & value, sizeof value );
+}
+
+
+/* Unset
+ * unset an entry
+ * returns rc_t state rcNull if index is not set
+ *
+ * "key" [ IN ] - vector index
+ */
+LIB_EXPORT rc_t CC KVectorUnset ( KVector *self, uint64_t key )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcCont, rcVector, rcRemoving, rcSelf, rcNull );
+ else
+ {
+ int status;
+ JError_t err;
+
+ if ( self -> nancy_bool )
+ return Nancy1Set ( & self -> nancy, key, false );
+
+ status = JudyLDel ( & self -> nancy, key, & err );
+ if ( status == JERR )
+ return NancyError ( & err, rcRemoving );
+
+ rc = 0;
+ }
+
+ return rc;
+}
+
+
+/* Visit
+ * executes a function on each key/value pair
+ * returns early if "f" returns non-zero rc_t
+ *
+ * "reverse" [ IN ] - if true, execute in reverse order
+ *
+ * "f" [ IN ] and "user_data" [ IN, OPAQUE ] - function to be
+ * executed on each vector element or until the function
+ * returns true.
+ */
+LIB_EXPORT rc_t CC KVectorVisit ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, const void *value, size_t bytes, void *user_data ),
+ void *user_data )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcCont, rcVector, rcVisiting, rcSelf, rcNull );
+ else if ( f == NULL )
+ rc = RC ( rcCont, rcVector, rcVisiting, rcFunction, rcNull );
+ else
+ {
+ rc = 0;
+
+ if ( self -> nancy != NULL )
+ {
+ JError_t err;
+ Word_t first, last, idx;
+
+ /** Judy1First searches for first value higher then first**/
+ first = 0;
+ /** Judy1Last searches for first value lower then last **/
+ last = (Word_t)-1;
+
+ if ( self -> nancy_bool )
+ {
+ bool value = true;
+ int status = Judy1First ( self -> nancy, & first, & err );
+ if ( status != JERR )
+ status = Judy1Last ( self -> nancy, & last, & err );
+ if ( status == JERR )
+ rc = NancyError ( & err, rcVisiting );
+ else if ( reverse )
+ {
+ for ( idx = last; ; )
+ {
+ rc = ( * f ) ( idx, & value, sizeof value, user_data );
+ if ( rc != 0 )
+ break;
+ if ( idx == first )
+ break;
+ status = Judy1Prev ( self -> nancy, & idx, & err );
+ if ( status == JERR )
+ {
+ rc = NancyError ( & err, rcVisiting );
+ break;
+ }
+ }
+ }
+ else
+ {
+ for ( idx = first; ; )
+ {
+ rc = ( * f ) ( idx, & value, sizeof value, user_data );
+ if ( rc != 0 )
+ break;
+ if ( idx == last )
+ break;
+ status = Judy1Next ( self -> nancy, & idx, & err );
+ if ( status == JERR )
+ {
+ rc = NancyError ( & err, rcVisiting );
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ Word_t value;
+ PPvoid_t lastp, datap = JudyLFirst ( self -> nancy, & first, & err );
+ if ( datap != PPJERR )
+ lastp = JudyLLast ( self -> nancy, & last, & err );
+ if ( datap == PPJERR || lastp == PPJERR )
+ rc = NancyError ( & err, rcVisiting );
+ else if ( reverse )
+ {
+ for ( rc = 0, idx = last, datap = lastp; ; )
+ {
+ if ( datap == NULL )
+ break;
+ value = * ( const Word_t* ) datap;
+ rc = ( * f ) ( idx, & value, sizeof value, user_data );
+ if ( rc != 0 )
+ break;
+ if ( idx == first )
+ break;
+ datap = JudyLPrev ( self -> nancy, & idx, & err );
+ if ( datap == PPJERR )
+ {
+ rc = NancyError ( & err, rcVisiting );
+ break;
+ }
+ }
+ }
+ else
+ {
+ for ( rc = 0, idx = first; ; )
+ {
+ if ( datap == NULL )
+ break;
+ value = * ( const Word_t* ) datap;
+ rc = ( * f ) ( idx, & value, sizeof value, user_data );
+ if ( rc != 0 )
+ break;
+ if ( idx == last )
+ break;
+ datap = JudyLNext ( self -> nancy, & idx, & err );
+ if ( datap == PPJERR )
+ {
+ rc = NancyError ( & err, rcVisiting );
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return rc;
+}
+
+/* Visit
+ * visit typed values
+ * returns early if "f" returns non-zero rc_t
+ *
+ * "reverse" [ IN ] - if true, execute in reverse order
+ *
+ * "f" [ IN ] and "user_data" [ IN, OPAQUE ] - function to be
+ * executed on each vector element or until the function
+ * returns true.
+ */
+typedef struct KVectorVisitTypedData KVectorVisitTypedData;
+struct KVectorVisitTypedData
+{
+ union
+ {
+ rc_t ( CC * b ) ( uint64_t key, bool value, void *user_data );
+ rc_t ( CC * i ) ( uint64_t key, int64_t value, void *user_data );
+ rc_t ( CC * u ) ( uint64_t key, uint64_t value, void *user_data );
+ rc_t ( CC * f ) ( uint64_t key, double value, void *user_data );
+ rc_t ( CC * p ) ( uint64_t key, const void *value, void *user_data );
+ } f;
+ void *user_data;
+};
+
+static
+rc_t CC KVectorVisitBoolFunc ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+ rc_t rc;
+ bool value;
+ if ( bytes != sizeof value )
+ rc = RC ( rcCont, rcVector, rcVisiting, rcType, rcInvalid );
+ else if ( * ( const uint8_t* ) ptr > 1 )
+ rc = RC ( rcCont, rcVector, rcVisiting, rcData, rcInvalid );
+ else
+ {
+ KVectorVisitTypedData *pb = user_data;
+ rc = ( * pb -> f . b ) ( key, * ( const bool* ) ptr, pb -> user_data );
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KVectorVisitBool ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, bool value, void *user_data ),
+ void *user_data )
+{
+ KVectorVisitTypedData pb;
+ pb . f . b = f;
+ pb . user_data = user_data;
+
+ return KVectorVisit ( self, reverse, KVectorVisitBoolFunc, & pb );
+}
+
+static
+rc_t CC KVectorVisitI64Func ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+ int64_t value;
+ KVectorVisitTypedData *pb = user_data;
+
+ switch ( bytes )
+ {
+ case 1:
+ value = ( int8_t ) * ( const Word_t* ) ptr;
+ break;
+ case 2:
+ value = ( int16_t ) * ( const Word_t* ) ptr;
+ break;
+ case 4:
+ value = ( int32_t ) * ( const Word_t* ) ptr;
+ break;
+ default:
+ value = ( int64_t ) * ( const Word_t* ) ptr;
+ }
+
+ return ( * pb -> f . i ) ( key, value, pb -> user_data );
+}
+
+LIB_EXPORT rc_t CC KVectorVisitI64 ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, int64_t value, void *user_data ),
+ void *user_data )
+{
+ KVectorVisitTypedData pb;
+ pb . f . i = f;
+ pb . user_data = user_data;
+
+ return KVectorVisit ( self, reverse, KVectorVisitI64Func, & pb );
+}
+
+static
+rc_t CC KVectorVisitU64Func ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+ KVectorVisitTypedData *pb = user_data;
+ return ( * pb -> f . u ) ( key, * ( const Word_t* ) ptr, pb -> user_data );
+}
+
+LIB_EXPORT rc_t CC KVectorVisitU64 ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, uint64_t value, void *user_data ),
+ void *user_data )
+{
+ KVectorVisitTypedData pb;
+ pb . f . u = f;
+ pb . user_data = user_data;
+
+ return KVectorVisit ( self, reverse, KVectorVisitU64Func, & pb );
+}
+
+static
+rc_t CC KVectorVisitF64Func ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+ uint32_t u32;
+ double value;
+ KVectorVisitTypedData *pb = user_data;
+
+ switch ( bytes )
+ {
+ case 4:
+ u32 = ( uint32_t ) * ( const Word_t* ) ptr;
+ value = * ( const float* ) & u32;
+ break;
+ default:
+ value = * ( const double* ) ptr;
+ }
+
+ return ( * pb -> f . f ) ( key, value, pb -> user_data );
+}
+
+LIB_EXPORT rc_t CC KVectorVisitF64 ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, double value, void *user_data ),
+ void *user_data )
+{
+ KVectorVisitTypedData pb;
+ pb . f . f = f;
+ pb . user_data = user_data;
+
+ return KVectorVisit ( self, reverse, KVectorVisitF64Func, & pb );
+}
+
+static
+rc_t CC KVectorVisitPtrFunc ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+ KVectorVisitTypedData *pb = user_data;
+ return ( * pb -> f . p ) ( key, * ( const void** ) ptr, pb -> user_data );
+}
+
+LIB_EXPORT rc_t CC KVectorVisitPtr ( const KVector *self, bool reverse,
+ rc_t ( CC * f ) ( uint64_t key, const void *value, void *user_data ),
+ void *user_data )
+{
+ KVectorVisitTypedData pb;
+ pb . f . p = f;
+ pb . user_data = user_data;
+
+ return KVectorVisit ( self, reverse, KVectorVisitPtrFunc, & pb );
+}
diff --git a/libs/klib/judy/Judy1.h b/libs/klib/judy/Judy1.h
new file mode 100644
index 0000000..5eeb6fd
--- /dev/null
+++ b/libs/klib/judy/Judy1.h
@@ -0,0 +1,549 @@
+#ifndef _JUDY1_INCLUDED
+#define _JUDY1_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// ****************************************************************************
+// JUDY1 -- SMALL/LARGE AND/OR CLUSTERED/SPARSE BIT ARRAYS
+//
+// -by-
+//
+// Douglas L. Baskins
+// doug at sourcejudy.com
+//
+// Judy arrays are designed to be used instead of arrays. The performance
+// suggests the reason why Judy arrays are thought of as arrays, instead of
+// trees. They are remarkably memory efficient at all populations.
+// Implemented as a hybrid digital tree (but really a state machine, see
+// below), Judy arrays feature fast insert/retrievals, fast near neighbor
+// searching, and contain a population tree for extremely fast ordinal related
+// retrievals.
+//
+// CONVENTIONS:
+//
+// - The comments here refer to 32-bit [64-bit] systems.
+//
+// - BranchL, LeafL refer to linear branches and leaves (small populations),
+// except LeafL does not actually appear as such; rather, Leaf1..3 [Leaf1..7]
+// is used to represent leaf Index sizes, and LeafW refers to a Leaf with
+// full (long) word Indexes, which is also a type of linear leaf. Note that
+// root-level LeafW (Leaf4 [Leaf8]) leaves are also called LEAFW.
+//
+// - BranchB, LeafB1 refer to bitmap branches and leaves (intermediate
+// populations).
+//
+// - BranchU refers to uncompressed branches. An uncompressed branch has 256
+// JPs, some of which could be null. Note: All leaves are compressed (and
+// sorted), or else an expanse is full (FullPopu), so there is no LeafU
+// equivalent to BranchU.
+//
+// - "Popu" is short for "Population".
+// - "Pop1" refers to actual population (base 1).
+// - "Pop0" refers to Pop1 - 1 (base 0), the way populations are stored in data
+// structures.
+//
+// - Branches and Leaves are both named by the number of bytes in their Pop0
+// field. In the case of Leaves, the same number applies to the Index sizes.
+//
+// - The representation of many numbers as hex is a relatively safe and
+// portable way to get desired bitpatterns as unsigned longs.
+//
+// - Some preprocessors cant handle single apostrophe characters within
+// #ifndef code, so here, use delete all instead.
+
+#include "JudyPrivate.h" // includes Judy.h in turn.
+#include "JudyPrivateBranch.h"
+
+
+// ****************************************************************************
+// JUDY1 ROOT POINTER (JRP) AND JUDY1 POINTER (JP) TYPE FIELDS
+// ****************************************************************************
+//
+// The following enum lists all possible JP Type fields.
+
+typedef enum // uint8_t -- but C does not support this type of enum.
+{
+
+// JP NULL TYPES:
+//
+// There is a series of cJ1_JPNULL* Types because each one pre-records a
+// different Index Size for when the first Index is inserted in the previously
+// null JP. They must start >= 8 (three bits).
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+
+ cJ1_JPNULL1 = 1,
+ // Index Size 1[1] byte when 1 Index inserted.
+ cJ1_JPNULL2, // Index Size 2[2] bytes when 1 Index inserted.
+ cJ1_JPNULL3, // Index Size 3[3] bytes when 1 Index inserted.
+
+#ifndef JU_64BIT
+#define cJ1_JPNULLMAX cJ1_JPNULL3
+#else
+ cJ1_JPNULL4, // Index Size 4[4] bytes when 1 Index inserted.
+ cJ1_JPNULL5, // Index Size 5[5] bytes when 1 Index inserted.
+ cJ1_JPNULL6, // Index Size 6[6] bytes when 1 Index inserted.
+ cJ1_JPNULL7, // Index Size 7[7] bytes when 1 Index inserted.
+#define cJ1_JPNULLMAX cJ1_JPNULL7
+#endif
+
+
+// JP BRANCH TYPES:
+//
+// Note: There are no state-1 branches; only leaves reside at state 1.
+
+// Linear branches:
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+
+ cJ1_JPBRANCH_L2, // 2[2] bytes Pop0, 1[5] bytes Dcd.
+ cJ1_JPBRANCH_L3, // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+ cJ1_JPBRANCH_L4, // [4] bytes Pop0, [3] bytes Dcd.
+ cJ1_JPBRANCH_L5, // [5] bytes Pop0, [2] bytes Dcd.
+ cJ1_JPBRANCH_L6, // [6] bytes Pop0, [1] byte Dcd.
+ cJ1_JPBRANCH_L7, // [7] bytes Pop0, [0] bytes Dcd.
+#endif
+
+ cJ1_JPBRANCH_L, // note: DcdPopO field not used.
+
+// Bitmap branches:
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+
+ cJ1_JPBRANCH_B2, // 2[2] bytes Pop0, 1[5] bytes Dcd.
+ cJ1_JPBRANCH_B3, // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+ cJ1_JPBRANCH_B4, // [4] bytes Pop0, [3] bytes Dcd.
+ cJ1_JPBRANCH_B5, // [5] bytes Pop0, [2] bytes Dcd.
+ cJ1_JPBRANCH_B6, // [6] bytes Pop0, [1] byte Dcd.
+ cJ1_JPBRANCH_B7, // [7] bytes Pop0, [0] bytes Dcd.
+#endif
+
+ cJ1_JPBRANCH_B, // note: DcdPopO field not used.
+
+// Uncompressed branches:
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+
+ cJ1_JPBRANCH_U2, // 2[2] bytes Pop0, 1[5] bytes Dcd.
+ cJ1_JPBRANCH_U3, // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+ cJ1_JPBRANCH_U4, // [4] bytes Pop0, [3] bytes Dcd.
+ cJ1_JPBRANCH_U5, // [5] bytes Pop0, [2] bytes Dcd.
+ cJ1_JPBRANCH_U6, // [6] bytes Pop0, [1] byte Dcd.
+ cJ1_JPBRANCH_U7, // [7] bytes Pop0, [0] bytes Dcd.
+#endif
+
+ cJ1_JPBRANCH_U, // note: DcdPopO field not used.
+
+
+// JP LEAF TYPES:
+
+// Linear leaves:
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+//
+// Note: There is no cJ1_JPLEAF1 for 64-bit for a subtle reason. An immediate
+// JP can hold 15 1-byte Indexes, and a bitmap leaf would be used for 17
+// Indexes, so rather than support a linear leaf for only the case of exactly
+// 16 Indexes, a bitmap leaf is used in that case. See also below regarding
+// cJ1_LEAF1_MAXPOP1 on 64-bit systems.
+//
+// Note: There is no full-word (4-byte [8-byte]) Index leaf under a JP because
+// non-root-state leaves only occur under branches that decode at least one
+// byte. Full-word, root-state leaves are under a JRP, not a JP. However, in
+// the code a "fake" JP can be created temporarily above a root-state leaf.
+
+#ifndef JU_64BIT // 32-bit only; see above.
+ cJ1_JPLEAF1, // 1 byte Pop0, 2 bytes Dcd.
+#endif
+
+ cJ1_JPLEAF2, // 2[2] bytes Pop0, 1[5] bytes Dcd.
+ cJ1_JPLEAF3, // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+ cJ1_JPLEAF4, // [4] bytes Pop0, [3] bytes Dcd.
+ cJ1_JPLEAF5, // [5] bytes Pop0, [2] bytes Dcd.
+ cJ1_JPLEAF6, // [6] bytes Pop0, [1] byte Dcd.
+ cJ1_JPLEAF7, // [7] bytes Pop0, [0] bytes Dcd.
+#endif
+
+// Bitmap leaf; Index Size == 1:
+//
+// Note: These are currently only supported at state 1. At other states the
+// bitmap would grow from 256 to 256^2, 256^3, ... bits, which would not be
+// efficient..
+
+ cJ1_JPLEAF_B1, // 1[1] byte Pop0, 2[6] bytes Dcd.
+
+
+// Full population; Index Size == 1 virtual leaf:
+//
+// Note: These are currently only supported at state 1. At other states they
+// could be used, but they would be rare and the savings are dubious.
+
+ cJ1_JPFULLPOPU1, // 1[1] byte Pop0, 2[6] bytes Dcd.
+
+#ifdef notdef // for future enhancements
+ cJ1_JPFULLPOPU1m1, // Full Population - 1
+ cJ1_JPFULLPOPU1m2, // Full Population - 2
+ cJ1_JPFULLPOPU1m3, // Full Population - 3
+ cJ1_JPFULLPOPU1m4, // Full Population - 4
+ cJ1_JPFULLPOPU1m5, // Full Population - 5
+ cJ1_JPFULLPOPU1m6, // Full Population - 6
+ cJ1_JPFULLPOPU1m7, // Full Population - 7
+
+#ifdef JU_64BIT
+ cJ1_JPFULLPOPU1m8, // Full Population - 8
+ cJ1_JPFULLPOPU1m9, // Full Population - 9
+ cJ1_JPFULLPOPU1m10, // Full Population - 10
+ cJ1_JPFULLPOPU1m11, // Full Population - 11
+ cJ1_JPFULLPOPU1m12, // Full Population - 12
+ cJ1_JPFULLPOPU1m13, // Full Population - 13
+ cJ1_JPFULLPOPU1m14, // Full Population - 14
+ cJ1_JPFULLPOPU1m15, // Full Population - 15
+#endif
+#endif // notdef -- for future enhancements
+
+
+// JP IMMEDIATES; leaves (Indexes) stored inside a JP:
+//
+// The second numeric suffix is the Pop1 for each type. As the Index Size
+// increases, the maximum possible population decreases.
+//
+// Note: These Types must be in sequential order in each group (Index Size),
+// and the groups in correct order too, for doing relative calculations between
+// them. For example, since these Types enumerate the Pop1 values (unlike
+// other JP Types where there is a Pop0 value in the JP), the maximum Pop1 for
+// each Index Size is computable.
+
+ cJ1_JPIMMED_1_01, // Index Size = 1, Pop1 = 1.
+ cJ1_JPIMMED_2_01, // Index Size = 2, Pop1 = 1.
+ cJ1_JPIMMED_3_01, // Index Size = 3, Pop1 = 1.
+#ifdef JU_64BIT
+ cJ1_JPIMMED_4_01, // Index Size = 4, Pop1 = 1.
+ cJ1_JPIMMED_5_01, // Index Size = 5, Pop1 = 1.
+ cJ1_JPIMMED_6_01, // Index Size = 6, Pop1 = 1.
+ cJ1_JPIMMED_7_01, // Index Size = 7, Pop1 = 1.
+#endif
+
+ cJ1_JPIMMED_1_02, // Index Size = 1, Pop1 = 2.
+ cJ1_JPIMMED_1_03, // Index Size = 1, Pop1 = 3.
+ cJ1_JPIMMED_1_04, // Index Size = 1, Pop1 = 4.
+ cJ1_JPIMMED_1_05, // Index Size = 1, Pop1 = 5.
+ cJ1_JPIMMED_1_06, // Index Size = 1, Pop1 = 6.
+ cJ1_JPIMMED_1_07, // Index Size = 1, Pop1 = 7.
+
+#ifdef JU_64BIT
+ cJ1_JPIMMED_1_08, // Index Size = 1, Pop1 = 8.
+ cJ1_JPIMMED_1_09, // Index Size = 1, Pop1 = 9.
+ cJ1_JPIMMED_1_10, // Index Size = 1, Pop1 = 10.
+ cJ1_JPIMMED_1_11, // Index Size = 1, Pop1 = 11.
+ cJ1_JPIMMED_1_12, // Index Size = 1, Pop1 = 12.
+ cJ1_JPIMMED_1_13, // Index Size = 1, Pop1 = 13.
+ cJ1_JPIMMED_1_14, // Index Size = 1, Pop1 = 14.
+ cJ1_JPIMMED_1_15, // Index Size = 1, Pop1 = 15.
+#endif
+
+ cJ1_JPIMMED_2_02, // Index Size = 2, Pop1 = 2.
+ cJ1_JPIMMED_2_03, // Index Size = 2, Pop1 = 3.
+
+#ifdef JU_64BIT
+ cJ1_JPIMMED_2_04, // Index Size = 2, Pop1 = 4.
+ cJ1_JPIMMED_2_05, // Index Size = 2, Pop1 = 5.
+ cJ1_JPIMMED_2_06, // Index Size = 2, Pop1 = 6.
+ cJ1_JPIMMED_2_07, // Index Size = 2, Pop1 = 7.
+#endif
+
+ cJ1_JPIMMED_3_02, // Index Size = 3, Pop1 = 2.
+
+#ifdef JU_64BIT
+ cJ1_JPIMMED_3_03, // Index Size = 3, Pop1 = 3.
+ cJ1_JPIMMED_3_04, // Index Size = 3, Pop1 = 4.
+ cJ1_JPIMMED_3_05, // Index Size = 3, Pop1 = 5.
+
+ cJ1_JPIMMED_4_02, // Index Size = 4, Pop1 = 2.
+ cJ1_JPIMMED_4_03, // Index Size = 4, Pop1 = 3.
+
+ cJ1_JPIMMED_5_02, // Index Size = 5, Pop1 = 2.
+ cJ1_JPIMMED_5_03, // Index Size = 3, Pop1 = 3.
+
+ cJ1_JPIMMED_6_02, // Index Size = 6, Pop1 = 2.
+
+ cJ1_JPIMMED_7_02, // Index Size = 7, Pop1 = 2.
+#endif
+
+// This special Type is merely a sentinel for doing relative calculations.
+// This value should not be used in switch statements (to avoid allocating code
+// for it), which is also why it appears at the end of the enum list.
+
+ cJ1_JPIMMED_CAP
+
+} jp1_Type_t;
+
+
+// RELATED VALUES:
+//
+// Index Size (state) for leaf JP, and JP type based on Index Size (state):
+
+#ifndef JU_64BIT // 32-bit
+#define J1_LEAFINDEXSIZE(jpType) ((jpType) - cJ1_JPLEAF1 + 1)
+#define J1_LEAFTYPE(IndexSize) ((IndexSize) + cJ1_JPLEAF1 - 1)
+#else
+#define J1_LEAFINDEXSIZE(jpType) ((jpType) - cJ1_JPLEAF2 + 2)
+#define J1_LEAFTYPE(IndexSize) ((IndexSize) + cJ1_JPLEAF2 - 2)
+#endif
+
+
+// ****************************************************************************
+// JUDY1 POINTER (JP) -- RELATED MACROS AND CONSTANTS
+// ****************************************************************************
+
+// MAXIMUM POPULATIONS OF LINEAR LEAVES:
+//
+// Allow up to 2 cache lines per leaf, with N bytes per index.
+//
+// J_1_MAXB is the maximum number of bytes (sort of) to allocate per leaf.
+// ALLOCSIZES is defined here, not there, for single-point control of these key
+// definitions. See JudyTables.c for "TERMINATOR".
+
+#define J_1_MAXB (sizeof(Word_t) * 32)
+#define ALLOCSIZES { 3, 5, 7, 11, 15, 23, 32, 47, 64, TERMINATOR } // in words.
+#define cJ1_LEAF1_MAXWORDS 5 // Leaf1 max alloc size in words.
+
+// Under JRP (root-state leaves):
+//
+// Includes a count (Population) word.
+//
+// Under JP (non-root-state leaves), which have no count (Population) words:
+//
+// When a 1-byte index leaf grows above cJ1_LEAF1_MAXPOP1 Indexes (bytes),
+// the memory chunk required grows to a size where a bitmap is just as
+// efficient, so use a bitmap instead for all greater Populations, on both
+// 32-bit and 64-bit systems. However, on a 32-bit system this occurs upon
+// going from 6 to 8 words (24 to 32 bytes) in the memory chunk, but on a
+// 64-bit system this occurs upon going from 2 to 4 words (16 to 32 bytes). It
+// would be silly to go from a 15-Index Immediate JP to a 16-Index linear leaf
+// to a 17-Index bitmap leaf, so just use a bitmap leaf for 16+ Indexes, which
+// means set cJ1_LEAF1_MAXPOP1 to cJ1_IMMED1_MAXPOP1 (15) to cause the
+// transition at that point.
+//
+// Note: cJ1_LEAF1_MAXPOP1 is not used on 64-bit systems.
+
+#ifndef JU_64BIT // 32-bit
+
+#define cJ1_LEAF1_MAXPOP1 (cJ1_LEAF1_MAXWORDS * cJU_BYTESPERWORD)
+#define cJ1_LEAF2_MAXPOP1 (J_1_MAXB / 2)
+#define cJ1_LEAF3_MAXPOP1 (J_1_MAXB / 3)
+#define cJ1_LEAFW_MAXPOP1 ((J_1_MAXB - cJU_BYTESPERWORD) / cJU_BYTESPERWORD)
+
+#else // 64-bit
+
+// #define cJ1_LEAF1_MAXPOP1 // no LEAF1 in 64-bit.
+#define cJ1_LEAF2_MAXPOP1 (J_1_MAXB / 2)
+#define cJ1_LEAF3_MAXPOP1 (J_1_MAXB / 3)
+#define cJ1_LEAF4_MAXPOP1 (J_1_MAXB / 4)
+#define cJ1_LEAF5_MAXPOP1 (J_1_MAXB / 5)
+#define cJ1_LEAF6_MAXPOP1 (J_1_MAXB / 6)
+#define cJ1_LEAF7_MAXPOP1 (J_1_MAXB / 7)
+#define cJ1_LEAFW_MAXPOP1 ((J_1_MAXB - cJU_BYTESPERWORD) / cJU_BYTESPERWORD)
+
+#endif
+
+
+// MAXIMUM POPULATIONS OF IMMEDIATE JPs:
+//
+// These specify the maximum Population of immediate JPs with various Index
+// Sizes (== sizes of remaining undecoded Index bits).
+
+#define cJ1_IMMED1_MAXPOP1 ((sizeof(jp_t) - 1) / 1) // 7 [15].
+#define cJ1_IMMED2_MAXPOP1 ((sizeof(jp_t) - 1) / 2) // 3 [7].
+#define cJ1_IMMED3_MAXPOP1 ((sizeof(jp_t) - 1) / 3) // 2 [5].
+
+#ifdef JU_64BIT
+#define cJ1_IMMED4_MAXPOP1 ((sizeof(jp_t) - 1) / 4) // [3].
+#define cJ1_IMMED5_MAXPOP1 ((sizeof(jp_t) - 1) / 5) // [3].
+#define cJ1_IMMED6_MAXPOP1 ((sizeof(jp_t) - 1) / 6) // [2].
+#define cJ1_IMMED7_MAXPOP1 ((sizeof(jp_t) - 1) / 7) // [2].
+#endif
+
+
+// ****************************************************************************
+// JUDY1 BITMAP LEAF (J1LB) SUPPORT
+// ****************************************************************************
+
+#define J1_JLB_BITMAP(Pjlb,Subexp) ((Pjlb)->j1lb_Bitmap[Subexp])
+
+typedef struct J__UDY1_BITMAP_LEAF
+{
+ BITMAPL_t j1lb_Bitmap[cJU_NUMSUBEXPL];
+
+} j1lb_t, * Pj1lb_t;
+
+
+// ****************************************************************************
+// MEMORY ALLOCATION SUPPORT
+// ****************************************************************************
+
+// ARRAY-GLOBAL INFORMATION:
+//
+// At the cost of an occasional additional cache fill, this object, which is
+// pointed at by a JRP and in turn points to a JP_BRANCH*, carries array-global
+// information about a Judy1 array that has sufficient population to amortize
+// the cost. The jpm_Pop0 field prevents having to add up the total population
+// for the array in insert, delete, and count code. The jpm_JP field prevents
+// having to build a fake JP for entry to a state machine; however, the
+// jp_DcdPopO field in jpm_JP, being one byte too small, is not used.
+//
+// Note: Struct fields are ordered to keep "hot" data in the first 8 words
+// (see left-margin comments) for machines with 8-word cache lines, and to keep
+// sub-word fields together for efficient packing.
+
+typedef struct J_UDY1_POPULATION_AND_MEMORY
+{
+/* 1 */ Word_t jpm_Pop0; // total population-1 in array.
+/* 2 */ jp_t jpm_JP; // JP to first branch; see above.
+/* 4 */ Word_t jpm_LastUPop0; // last jpm_Pop0 when convert to BranchU
+// Note: Field names match PJError_t for convenience in macros:
+/* 7 */ char je_Errno; // one of the enums in Judy.h.
+/* 7/8 */ int je_ErrID; // often an internal source line number.
+/* 8/9 */ Word_t jpm_TotalMemWords; // words allocated in array.
+} j1pm_t, *Pj1pm_t;
+
+
+// TABLES FOR DETERMINING IF LEAVES HAVE ROOM TO GROW:
+//
+// These tables indicate if a given memory chunk can support growth of a given
+// object into wasted (rounded-up) memory in the chunk. This violates the
+// hiddenness of the JudyMalloc code.
+//
+// Also define macros to hide the details in the code using these tables.
+
+#ifndef JU_64BIT
+extern const uint8_t j__1_Leaf1PopToWords[cJ1_LEAF1_MAXPOP1 + 1];
+#endif
+extern const uint8_t j__1_Leaf2PopToWords[cJ1_LEAF2_MAXPOP1 + 1];
+extern const uint8_t j__1_Leaf3PopToWords[cJ1_LEAF3_MAXPOP1 + 1];
+#ifdef JU_64BIT
+extern const uint8_t j__1_Leaf4PopToWords[cJ1_LEAF4_MAXPOP1 + 1];
+extern const uint8_t j__1_Leaf5PopToWords[cJ1_LEAF5_MAXPOP1 + 1];
+extern const uint8_t j__1_Leaf6PopToWords[cJ1_LEAF6_MAXPOP1 + 1];
+extern const uint8_t j__1_Leaf7PopToWords[cJ1_LEAF7_MAXPOP1 + 1];
+#endif
+extern const uint8_t j__1_LeafWPopToWords[cJ1_LEAFW_MAXPOP1 + 1];
+
+// Check if increase of population will fit in same leaf:
+
+#ifndef JU_64BIT
+#define J1_LEAF1GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJ1_LEAF1_MAXPOP1, j__1_Leaf1PopToWords)
+#endif
+#define J1_LEAF2GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJ1_LEAF2_MAXPOP1, j__1_Leaf2PopToWords)
+#define J1_LEAF3GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJ1_LEAF3_MAXPOP1, j__1_Leaf3PopToWords)
+#ifdef JU_64BIT
+#define J1_LEAF4GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJ1_LEAF4_MAXPOP1, j__1_Leaf4PopToWords)
+#define J1_LEAF5GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJ1_LEAF5_MAXPOP1, j__1_Leaf5PopToWords)
+#define J1_LEAF6GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJ1_LEAF6_MAXPOP1, j__1_Leaf6PopToWords)
+#define J1_LEAF7GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJ1_LEAF7_MAXPOP1, j__1_Leaf7PopToWords)
+#endif
+#define J1_LEAFWGROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJ1_LEAFW_MAXPOP1, j__1_LeafWPopToWords)
+
+#ifndef JU_64BIT
+#define J1_LEAF1POPTOWORDS(Pop1) (j__1_Leaf1PopToWords[Pop1])
+#endif
+#define J1_LEAF2POPTOWORDS(Pop1) (j__1_Leaf2PopToWords[Pop1])
+#define J1_LEAF3POPTOWORDS(Pop1) (j__1_Leaf3PopToWords[Pop1])
+#ifdef JU_64BIT
+#define J1_LEAF4POPTOWORDS(Pop1) (j__1_Leaf4PopToWords[Pop1])
+#define J1_LEAF5POPTOWORDS(Pop1) (j__1_Leaf5PopToWords[Pop1])
+#define J1_LEAF6POPTOWORDS(Pop1) (j__1_Leaf6PopToWords[Pop1])
+#define J1_LEAF7POPTOWORDS(Pop1) (j__1_Leaf7PopToWords[Pop1])
+#endif
+#define J1_LEAFWPOPTOWORDS(Pop1) (j__1_LeafWPopToWords[Pop1])
+
+
+// FUNCTIONS TO ALLOCATE OBJECTS:
+
+Pj1pm_t j__udy1AllocJ1PM(void); // constant size.
+
+Pjbl_t j__udy1AllocJBL( Pj1pm_t); // constant size.
+Pjbb_t j__udy1AllocJBB( Pj1pm_t); // constant size.
+Pjp_t j__udy1AllocJBBJP(Word_t, Pj1pm_t);
+Pjbu_t j__udy1AllocJBU( Pj1pm_t); // constant size.
+
+#ifndef JU_64BIT
+Pjll_t j__udy1AllocJLL1( Word_t, Pj1pm_t);
+#endif
+Pjll_t j__udy1AllocJLL2( Word_t, Pj1pm_t);
+Pjll_t j__udy1AllocJLL3( Word_t, Pj1pm_t);
+
+#ifdef JU_64BIT
+Pjll_t j__udy1AllocJLL4( Word_t, Pj1pm_t);
+Pjll_t j__udy1AllocJLL5( Word_t, Pj1pm_t);
+Pjll_t j__udy1AllocJLL6( Word_t, Pj1pm_t);
+Pjll_t j__udy1AllocJLL7( Word_t, Pj1pm_t);
+#endif
+
+Pjlw_t j__udy1AllocJLW( Word_t ); // no Pj1pm needed.
+Pj1lb_t j__udy1AllocJLB1( Pj1pm_t); // constant size.
+
+
+// FUNCTIONS TO FREE OBJECTS:
+
+void j__udy1FreeJ1PM( Pj1pm_t, Pj1pm_t); // constant size.
+
+void j__udy1FreeJBL( Pjbl_t, Pj1pm_t); // constant size.
+void j__udy1FreeJBB( Pjbb_t, Pj1pm_t); // constant size.
+void j__udy1FreeJBBJP(Pjp_t, Word_t, Pj1pm_t);
+void j__udy1FreeJBU( Pjbu_t, Pj1pm_t); // constant size.
+
+#ifndef JU_64BIT
+void j__udy1FreeJLL1( Pjll_t, Word_t, Pj1pm_t);
+#endif
+void j__udy1FreeJLL2( Pjll_t, Word_t, Pj1pm_t);
+void j__udy1FreeJLL3( Pjll_t, Word_t, Pj1pm_t);
+
+#ifdef JU_64BIT
+void j__udy1FreeJLL4( Pjll_t, Word_t, Pj1pm_t);
+void j__udy1FreeJLL5( Pjll_t, Word_t, Pj1pm_t);
+void j__udy1FreeJLL6( Pjll_t, Word_t, Pj1pm_t);
+void j__udy1FreeJLL7( Pjll_t, Word_t, Pj1pm_t);
+#endif
+
+void j__udy1FreeJLW( Pjlw_t, Word_t, Pj1pm_t);
+void j__udy1FreeJLB1( Pj1lb_t, Pj1pm_t); // constant size.
+void j__udy1FreeSM( Pjp_t, Pj1pm_t); // everything below Pjp.
+
+#endif // ! _JUDY1_INCLUDED
diff --git a/libs/klib/judy/JudyByCount.c b/libs/klib/judy/JudyByCount.c
new file mode 100644
index 0000000..f6efea0
--- /dev/null
+++ b/libs/klib/judy/JudyByCount.c
@@ -0,0 +1,952 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy*ByCount() function for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DNOSMARTJBB, -DNOSMARTJBU, and/or -DNOSMARTJLB to build a
+// version with cache line optimizations deleted, for testing.
+//
+// Judy*ByCount() is a conceptual although not literal inverse of Judy*Count().
+// Judy*Count() takes a pair of Indexes, and allows finding the ordinal of a
+// given Index (that is, its position in the list of valid indexes from the
+// beginning) as a degenerate case, because in general the count between two
+// Indexes, inclusive, is not always just the difference in their ordinals.
+// However, it suffices for Judy*ByCount() to simply be an ordinal-to-Index
+// mapper.
+//
+// Note: Like Judy*Count(), this code must "count sideways" in branches, which
+// can result in a lot of cache line fills. However, unlike Judy*Count(), this
+// code does not receive a specific Index, hence digit, where to start in each
+// branch, so it cant accurately calculate cache line fills required in each
+// direction. The best it can do is an approximation based on the total
+// population of the expanse (pop1 from Pjp) and the ordinal of the target
+// Index (see SETOFFSET()) within the expanse.
+//
+// Compile with -DSMARTMETRICS to obtain global variables containing smart
+// cache line metrics. Note: Dont turn this on simultaneously for this file
+// and JudyCount.c because they export the same globals.
+// ****************************************************************************
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+// These are imported from JudyCount.c:
+//
+// TBD: Should this be in common code? Exported from a header file?
+
+#ifdef JUDY1
+extern Word_t j__udy1JPPop1(const Pjp_t Pjp);
+#define j__udyJPPop1 j__udy1JPPop1
+#else
+extern Word_t j__udyLJPPop1(const Pjp_t Pjp);
+#define j__udyJPPop1 j__udyLJPPop1
+#endif
+
+// Avoid duplicate symbols since this file is multi-compiled:
+
+#ifdef SMARTMETRICS
+#ifdef JUDY1
+Word_t jbb_upward = 0; // counts of directions taken:
+Word_t jbb_downward = 0;
+Word_t jbu_upward = 0;
+Word_t jbu_downward = 0;
+Word_t jlb_upward = 0;
+Word_t jlb_downward = 0;
+#else
+extern Word_t jbb_upward;
+extern Word_t jbb_downward;
+extern Word_t jbu_upward;
+extern Word_t jbu_downward;
+extern Word_t jlb_upward;
+extern Word_t jlb_downward;
+#endif
+#endif
+
+
+// ****************************************************************************
+// J U D Y 1 B Y C O U N T
+// J U D Y L B Y C O U N T
+//
+// See the manual entry.
+
+#ifdef JUDY1
+FUNCTION int Judy1ByCount
+#else
+FUNCTION PPvoid_t JudyLByCount
+#endif
+ (
+ Pcvoid_t PArray, // root pointer to first branch/leaf in SM.
+ Word_t Count, // ordinal of Index to find, 1..MAX.
+ Word_t * PIndex, // to return found Index.
+ PJError_t PJError // optional, for returning error info.
+ )
+{
+ Word_t Count0; // Count, base-0, to match pop0.
+ Word_t state; // current state in SM.
+ Word_t pop1; // of current branch or leaf, or of expanse.
+ Word_t pop1lower; // pop1 of expanses (JPs) below that for Count.
+ Word_t digit; // current word in branch.
+ Word_t jpcount; // JPs in a BranchB subexpanse.
+ long jpnum; // JP number in a branch (base 0).
+ long subexp; // for stepping through layer 1 (subexpanses).
+ int offset; // index ordinal within a leaf, base 0.
+
+ Pjp_t Pjp; // current JP in branch.
+ Pjll_t Pjll; // current Judy linear leaf.
+
+
+// CHECK FOR EMPTY ARRAY OR NULL PINDEX:
+
+ if (PArray == (Pvoid_t) NULL) JU_RET_NOTFOUND;
+
+ if (PIndex == (PWord_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+// Convert Count to Count0; assume special case of Count = 0 maps to ~0, as
+// desired, to represent the last index in a full array:
+//
+// Note: Think of Count0 as a reliable "number of Indexes below the target."
+
+ Count0 = Count - 1;
+ assert((Count || Count0 == ~0)); // ensure CPU is sane about 0 - 1.
+ pop1lower = 0;
+
+ if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ Pjlw_t Pjlw = P_JLW(PArray); // first word of leaf.
+
+ if (Count0 > Pjlw[0]) JU_RET_NOTFOUND; // too high.
+
+ *PIndex = Pjlw[Count]; // Index, base 1.
+
+ JU_RET_FOUND_LEAFW(Pjlw, Pjlw[0] + 1, Count0);
+ }
+ else
+ {
+ Pjpm_t Pjpm = P_JPM(PArray);
+
+ if (Count0 > (Pjpm->jpm_Pop0)) JU_RET_NOTFOUND; // too high.
+
+ Pjp = &(Pjpm->jpm_JP);
+ pop1 = (Pjpm->jpm_Pop0) + 1;
+
+// goto SMByCount;
+ }
+
+// COMMON CODE:
+//
+// Prepare to handle a root-level or lower-level branch: Save the current
+// state, obtain the total population for the branch in a state-dependent way,
+// and then branch to common code for multiple cases.
+//
+// For root-level branches, the state is always cJU_ROOTSTATE, and the array
+// population must already be set in pop1; it is not available in jp_DcdPopO.
+//
+// Note: The total population is only needed in cases where the common code
+// "counts down" instead of up to minimize cache line fills. However, its
+// available cheaply, and its better to do it with a constant shift (constant
+// state value) instead of a variable shift later "when needed".
+
+#define PREPB_ROOT(Next) \
+ state = cJU_ROOTSTATE; \
+ goto Next
+
+// Use PREPB_DCD() to first copy the Dcd bytes to *PIndex if there are any
+// (only if state < cJU_ROOTSTATE - 1):
+
+#define PREPB_DCD(Pjp,cState,Next) \
+ JU_SETDCD(*PIndex, Pjp, cState); \
+ PREPB((Pjp), cState, Next)
+
+#define PREPB(Pjp,cState,Next) \
+ state = (cState); \
+ pop1 = JU_JPBRANCH_POP0(Pjp, (cState)) + 1; \
+ goto Next
+
+// Calculate whether the ordinal of an Index within a given expanse falls in
+// the lower or upper half of the expanses population, taking care with
+// unsigned math and boundary conditions:
+//
+// Note: Assume the ordinal falls within the expanses population, that is,
+// 0 < (Count - Pop1lower) <= Pop1exp (assuming infinite math).
+//
+// Note: If the ordinal is the middle element, it doesnt matter whether
+// LOWERHALF() is TRUE or FALSE.
+
+#define LOWERHALF(Count0,Pop1lower,Pop1exp) \
+ (((Count0) - (Pop1lower)) < ((Pop1exp) / 2))
+
+// Calculate the (signed) offset within a leaf to the desired ordinal (Count -
+// Pop1lower; offset is one less), and optionally ensure its in range:
+
+#define SETOFFSET(Offset,Count0,Pop1lower,Pjp) \
+ (Offset) = (Count0) - (Pop1lower); \
+ assert((Offset) >= 0); \
+ assert((Offset) <= JU_JPLEAF_POP0(Pjp))
+
+// Variations for immediate indexes, with and without pop1-specific assertions:
+
+#define SETOFFSET_IMM_CK(Offset,Count0,Pop1lower,cPop1) \
+ (Offset) = (Count0) - (Pop1lower); \
+ assert((Offset) >= 0); \
+ assert((Offset) < (cPop1))
+
+#define SETOFFSET_IMM(Offset,Count0,Pop1lower) \
+ (Offset) = (Count0) - (Pop1lower)
+
+
+// STATE MACHINE -- TRAVERSE TREE:
+//
+// In branches, look for the expanse (digit), if any, where the total pop1
+// below or at that expanse would meet or exceed Count, meaning the Index must
+// be in this expanse.
+
+SMByCount: // return here for next branch/leaf.
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH; count populations in JPs in the JBL upwards until finding the
+// expanse (digit) containing Count, and "recurse".
+//
+// Note: There are no null JPs in a JBL; watch out for pop1 == 0.
+//
+// Note: A JBL should always fit in one cache line => no need to count up
+// versus down to save cache line fills.
+//
+// TBD: The previous is no longer true. Consider enhancing this code to count
+// up/down, but it can wait for a later tuning phase. In the meantime, PREPB()
+// sets pop1 for the whole array, but that value is not used here. 001215:
+// Maybe its true again?
+
+ case cJU_JPBRANCH_L2: PREPB_DCD(Pjp, 2, BranchL);
+#ifndef JU_64BIT
+ case cJU_JPBRANCH_L3: PREPB( Pjp, 3, BranchL);
+#else
+ case cJU_JPBRANCH_L3: PREPB_DCD(Pjp, 3, BranchL);
+ case cJU_JPBRANCH_L4: PREPB_DCD(Pjp, 4, BranchL);
+ case cJU_JPBRANCH_L5: PREPB_DCD(Pjp, 5, BranchL);
+ case cJU_JPBRANCH_L6: PREPB_DCD(Pjp, 6, BranchL);
+ case cJU_JPBRANCH_L7: PREPB( Pjp, 7, BranchL);
+#endif
+ case cJU_JPBRANCH_L: PREPB_ROOT( BranchL);
+ {
+ Pjbl_t Pjbl;
+
+// Common code (state-independent) for all cases of linear branches:
+
+BranchL:
+ Pjbl = P_JBL(Pjp->jp_Addr);
+
+ for (jpnum = 0; jpnum < (Pjbl->jbl_NumJPs); ++jpnum)
+ {
+ if ((pop1 = j__udyJPPop1((Pjbl->jbl_jp) + jpnum))
+ == cJU_ALLONES)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+ assert(pop1 != 0);
+
+// Warning: pop1lower and pop1 are unsigned, so do not subtract 1 and compare
+// >=, but instead use the following expression:
+
+ if (pop1lower + pop1 > Count0) // Index is in this expanse.
+ {
+ JU_SETDIGIT(*PIndex, Pjbl->jbl_Expanse[jpnum], state);
+ Pjp = (Pjbl->jbl_jp) + jpnum;
+ goto SMByCount; // look under this expanse.
+ }
+
+ pop1lower += pop1; // add this JPs pop1.
+ }
+
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); // should never get here.
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+ } // case cJU_JPBRANCH_L
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH; count populations in JPs in the JBB upwards or downwards
+// until finding the expanse (digit) containing Count, and "recurse".
+//
+// Note: There are no null JPs in a JBB; watch out for pop1 == 0.
+
+ case cJU_JPBRANCH_B2: PREPB_DCD(Pjp, 2, BranchB);
+#ifndef JU_64BIT
+ case cJU_JPBRANCH_B3: PREPB( Pjp, 3, BranchB);
+#else
+ case cJU_JPBRANCH_B3: PREPB_DCD(Pjp, 3, BranchB);
+ case cJU_JPBRANCH_B4: PREPB_DCD(Pjp, 4, BranchB);
+ case cJU_JPBRANCH_B5: PREPB_DCD(Pjp, 5, BranchB);
+ case cJU_JPBRANCH_B6: PREPB_DCD(Pjp, 6, BranchB);
+ case cJU_JPBRANCH_B7: PREPB( Pjp, 7, BranchB);
+#endif
+ case cJU_JPBRANCH_B: PREPB_ROOT( BranchB);
+ {
+ Pjbb_t Pjbb;
+
+// Common code (state-independent) for all cases of bitmap branches:
+
+BranchB:
+ Pjbb = P_JBB(Pjp->jp_Addr);
+
+// Shorthand for one subexpanse in a bitmap and for one JP in a bitmap branch:
+//
+// Note: BMPJP0 exists separately to support assertions.
+
+#define BMPJP0(Subexp) (P_JP(JU_JBB_PJP(Pjbb, Subexp)))
+#define BMPJP(Subexp,JPnum) (BMPJP0(Subexp) + (JPnum))
+
+
+// Common code for descending through a JP:
+//
+// Determine the digit for the expanse and save it in *PIndex; then "recurse".
+
+#define JBB_FOUNDEXPANSE \
+ { \
+ JU_BITMAPDIGITB(digit, subexp, JU_JBB_BITMAP(Pjbb,subexp), jpnum); \
+ JU_SETDIGIT(*PIndex, digit, state); \
+ Pjp = BMPJP(subexp, jpnum); \
+ goto SMByCount; \
+ }
+
+
+#ifndef NOSMARTJBB // enable to turn off smart code for comparison purposes.
+
+// FIGURE OUT WHICH DIRECTION CAUSES FEWER CACHE LINE FILLS; adding the pop1s
+// in JPs upwards, or subtracting the pop1s in JPs downwards:
+//
+// See header comments about limitations of this for Judy*ByCount().
+
+#endif
+
+// COUNT UPWARD, adding each "below" JPs pop1:
+
+#ifndef NOSMARTJBB // enable to turn off smart code for comparison purposes.
+
+ if (LOWERHALF(Count0, pop1lower, pop1))
+ {
+#endif
+#ifdef SMARTMETRICS
+ ++jbb_upward;
+#endif
+ for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+ {
+ if ((jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb,subexp)))
+ && (BMPJP0(subexp) == (Pjp_t) NULL))
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); // null ptr.
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+// Note: An empty subexpanse (jpcount == 0) is handled "for free":
+
+ for (jpnum = 0; jpnum < jpcount; ++jpnum)
+ {
+ if ((pop1 = j__udyJPPop1(BMPJP(subexp, jpnum)))
+ == cJU_ALLONES)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+ assert(pop1 != 0);
+
+// Warning: pop1lower and pop1 are unsigned, see earlier comment:
+
+ if (pop1lower + pop1 > Count0)
+ JBB_FOUNDEXPANSE; // Index is in this expanse.
+
+ pop1lower += pop1; // add this JPs pop1.
+ }
+ }
+#ifndef NOSMARTJBB // enable to turn off smart code for comparison purposes.
+ }
+
+
+// COUNT DOWNWARD, subtracting each "above" JPs pop1 from the whole expanses
+// pop1:
+
+ else
+ {
+#ifdef SMARTMETRICS
+ ++jbb_downward;
+#endif
+ pop1lower += pop1; // add whole branch to start.
+
+ for (subexp = cJU_NUMSUBEXPB - 1; subexp >= 0; --subexp)
+ {
+ if ((jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp)))
+ && (BMPJP0(subexp) == (Pjp_t) NULL))
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); // null ptr.
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+// Note: An empty subexpanse (jpcount == 0) is handled "for free":
+
+ for (jpnum = jpcount - 1; jpnum >= 0; --jpnum)
+ {
+ if ((pop1 = j__udyJPPop1(BMPJP(subexp, jpnum)))
+ == cJU_ALLONES)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+ assert(pop1 != 0);
+
+// Warning: pop1lower and pop1 are unsigned, see earlier comment:
+
+ pop1lower -= pop1;
+
+// Beware unsigned math problems:
+
+ if ((pop1lower == 0) || (pop1lower - 1 < Count0))
+ JBB_FOUNDEXPANSE; // Index is in this expanse.
+ }
+ }
+ }
+#endif // NOSMARTJBB
+
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); // should never get here.
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+ } // case cJU_JPBRANCH_B
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH; count populations in JPs in the JBU upwards or
+// downwards until finding the expanse (digit) containing Count, and "recurse".
+
+ case cJU_JPBRANCH_U2: PREPB_DCD(Pjp, 2, BranchU);
+#ifndef JU_64BIT
+ case cJU_JPBRANCH_U3: PREPB( Pjp, 3, BranchU);
+#else
+ case cJU_JPBRANCH_U3: PREPB_DCD(Pjp, 3, BranchU);
+ case cJU_JPBRANCH_U4: PREPB_DCD(Pjp, 4, BranchU);
+ case cJU_JPBRANCH_U5: PREPB_DCD(Pjp, 5, BranchU);
+ case cJU_JPBRANCH_U6: PREPB_DCD(Pjp, 6, BranchU);
+ case cJU_JPBRANCH_U7: PREPB( Pjp, 7, BranchU);
+#endif
+ case cJU_JPBRANCH_U: PREPB_ROOT( BranchU);
+ {
+ Pjbu_t Pjbu;
+
+// Common code (state-independent) for all cases of uncompressed branches:
+
+BranchU:
+ Pjbu = P_JBU(Pjp->jp_Addr);
+
+// Common code for descending through a JP:
+//
+// Save the digit for the expanse in *PIndex, then "recurse".
+
+#define JBU_FOUNDEXPANSE \
+ { \
+ JU_SETDIGIT(*PIndex, jpnum, state); \
+ Pjp = (Pjbu->jbu_jp) + jpnum; \
+ goto SMByCount; \
+ }
+
+
+#ifndef NOSMARTJBU // enable to turn off smart code for comparison purposes.
+
+// FIGURE OUT WHICH DIRECTION CAUSES FEWER CACHE LINE FILLS; adding the pop1s
+// in JPs upwards, or subtracting the pop1s in JPs downwards:
+//
+// See header comments about limitations of this for Judy*ByCount().
+
+#endif
+
+// COUNT UPWARD, simply adding the pop1 of each JP:
+
+#ifndef NOSMARTJBU // enable to turn off smart code for comparison purposes.
+
+ if (LOWERHALF(Count0, pop1lower, pop1))
+ {
+#endif
+#ifdef SMARTMETRICS
+ ++jbu_upward;
+#endif
+
+ for (jpnum = 0; jpnum < cJU_BRANCHUNUMJPS; ++jpnum)
+ {
+ // shortcut, save a function call:
+
+ if ((Pjbu->jbu_jp[jpnum].jp_Type) <= cJU_JPNULLMAX)
+ continue;
+
+ if ((pop1 = j__udyJPPop1((Pjbu->jbu_jp) + jpnum))
+ == cJU_ALLONES)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+ assert(pop1 != 0);
+
+// Warning: pop1lower and pop1 are unsigned, see earlier comment:
+
+ if (pop1lower + pop1 > Count0)
+ JBU_FOUNDEXPANSE; // Index is in this expanse.
+
+ pop1lower += pop1; // add this JPs pop1.
+ }
+#ifndef NOSMARTJBU // enable to turn off smart code for comparison purposes.
+ }
+
+
+// COUNT DOWNWARD, subtracting the pop1 of each JP above from the whole
+// expanses pop1:
+
+ else
+ {
+#ifdef SMARTMETRICS
+ ++jbu_downward;
+#endif
+ pop1lower += pop1; // add whole branch to start.
+
+ for (jpnum = cJU_BRANCHUNUMJPS - 1; jpnum >= 0; --jpnum)
+ {
+ // shortcut, save a function call:
+
+ if ((Pjbu->jbu_jp[jpnum].jp_Type) <= cJU_JPNULLMAX)
+ continue;
+
+ if ((pop1 = j__udyJPPop1(Pjbu->jbu_jp + jpnum))
+ == cJU_ALLONES)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+ assert(pop1 != 0);
+
+// Warning: pop1lower and pop1 are unsigned, see earlier comment:
+
+ pop1lower -= pop1;
+
+// Beware unsigned math problems:
+
+ if ((pop1lower == 0) || (pop1lower - 1 < Count0))
+ JBU_FOUNDEXPANSE; // Index is in this expanse.
+ }
+ }
+#endif // NOSMARTJBU
+
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); // should never get here.
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+ } // case cJU_JPBRANCH_U
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF:
+//
+// Return the Index at the proper ordinal (see SETOFFSET()) in the leaf. First
+// copy Dcd bytes, if there are any (only if state < cJU_ROOTSTATE - 1), to
+// *PIndex.
+//
+// Note: The preceding branch traversal code MIGHT set pop1 for this expanse
+// (linear leaf) as a side-effect, but dont depend on that (for JUDYL, which
+// is the only cases that need it anyway).
+
+#define PREPL_DCD(cState) \
+ JU_SETDCD(*PIndex, Pjp, cState); \
+ PREPL
+
+#ifdef JUDY1
+#define PREPL_SETPOP1 // not needed in any cases.
+#else
+#define PREPL_SETPOP1 pop1 = JU_JPLEAF_POP0(Pjp) + 1
+#endif
+
+#define PREPL \
+ Pjll = P_JLL(Pjp->jp_Addr); \
+ PREPL_SETPOP1; \
+ SETOFFSET(offset, Count0, pop1lower, Pjp)
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1:
+
+ PREPL_DCD(1);
+ JU_SETDIGIT1(*PIndex, ((uint8_t *) Pjll)[offset]);
+ JU_RET_FOUND_LEAF1(Pjll, pop1, offset);
+#endif
+
+ case cJU_JPLEAF2:
+
+ PREPL_DCD(2);
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+ | ((uint16_t *) Pjll)[offset];
+ JU_RET_FOUND_LEAF2(Pjll, pop1, offset);
+
+#ifndef JU_64BIT
+ case cJU_JPLEAF3:
+ {
+ Word_t lsb;
+ PREPL;
+ JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+ JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+ }
+
+#else
+ case cJU_JPLEAF3:
+ {
+ Word_t lsb;
+ PREPL_DCD(3);
+ JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+ JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+ }
+
+ case cJU_JPLEAF4:
+
+ PREPL_DCD(4);
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+ | ((uint32_t *) Pjll)[offset];
+ JU_RET_FOUND_LEAF4(Pjll, pop1, offset);
+
+ case cJU_JPLEAF5:
+ {
+ Word_t lsb;
+ PREPL_DCD(5);
+ JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (5 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+ JU_RET_FOUND_LEAF5(Pjll, pop1, offset);
+ }
+
+ case cJU_JPLEAF6:
+ {
+ Word_t lsb;
+ PREPL_DCD(6);
+ JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (6 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+ JU_RET_FOUND_LEAF6(Pjll, pop1, offset);
+ }
+
+ case cJU_JPLEAF7:
+ {
+ Word_t lsb;
+ PREPL;
+ JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (7 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+ JU_RET_FOUND_LEAF7(Pjll, pop1, offset);
+ }
+#endif
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF:
+//
+// Return the Index at the proper ordinal (see SETOFFSET()) in the leaf by
+// counting bits. First copy Dcd bytes (always present since state 1 <
+// cJU_ROOTSTATE) to *PIndex.
+//
+// Note: The preceding branch traversal code MIGHT set pop1 for this expanse
+// (bitmap leaf) as a side-effect, but dont depend on that.
+
+ case cJU_JPLEAF_B1:
+ {
+ Pjlb_t Pjlb;
+
+ JU_SETDCD(*PIndex, Pjp, 1);
+ Pjlb = P_JLB(Pjp->jp_Addr);
+ pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+
+// COUNT UPWARD, adding the pop1 of each subexpanse:
+//
+// The entire bitmap should fit in one cache line, but still try to save some
+// CPU time by counting the fewest possible number of subexpanses from the
+// bitmap.
+//
+// See header comments about limitations of this for Judy*ByCount().
+
+#ifndef NOSMARTJLB // enable to turn off smart code for comparison purposes.
+
+ if (LOWERHALF(Count0, pop1lower, pop1))
+ {
+#endif
+#ifdef SMARTMETRICS
+ ++jlb_upward;
+#endif
+ for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+ {
+ pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+// Warning: pop1lower and pop1 are unsigned, see earlier comment:
+
+ if (pop1lower + pop1 > Count0)
+ goto LeafB1; // Index is in this subexpanse.
+
+ pop1lower += pop1; // add this subexpanses pop1.
+ }
+#ifndef NOSMARTJLB // enable to turn off smart code for comparison purposes.
+ }
+
+
+// COUNT DOWNWARD, subtracting each "above" subexpanses pop1 from the whole
+// expanses pop1:
+
+ else
+ {
+#ifdef SMARTMETRICS
+ ++jlb_downward;
+#endif
+ pop1lower += pop1; // add whole leaf to start.
+
+ for (subexp = cJU_NUMSUBEXPL - 1; subexp >= 0; --subexp)
+ {
+ pop1lower -= j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+// Beware unsigned math problems:
+
+ if ((pop1lower == 0) || (pop1lower - 1 < Count0))
+ goto LeafB1; // Index is in this subexpanse.
+ }
+ }
+#endif // NOSMARTJLB
+
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); // should never get here.
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+
+// RETURN INDEX FOUND:
+//
+// Come here with subexp set to the correct subexpanse, and pop1lower set to
+// the sum for all lower expanses and subexpanses in the Judy tree. Calculate
+// and save in *PIndex the digit corresponding to the ordinal in this
+// subexpanse.
+
+LeafB1:
+ SETOFFSET(offset, Count0, pop1lower, Pjp);
+ JU_BITMAPDIGITL(digit, subexp, JU_JLB_BITMAP(Pjlb, subexp), offset);
+ JU_SETDIGIT1(*PIndex, digit);
+ JU_RET_FOUND_LEAF_B1(Pjlb, subexp, offset);
+// == return((PPvoid_t) (P_JV(JL_JLB_PVALUE(Pjlb, subexp)) + offset))
+
+ } // case cJU_JPLEAF_B1
+
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// Copy Dcd bytes (always present since state 1 < cJU_ROOTSTATE) to *PIndex,
+// then set the appropriate digit for the ordinal (see SETOFFSET()) in the leaf
+// as the LSB in *PIndex.
+
+ case cJ1_JPFULLPOPU1:
+
+ JU_SETDCD(*PIndex, Pjp, 1);
+ SETOFFSET(offset, Count0, pop1lower, Pjp);
+ assert(offset >= 0);
+ assert(offset <= cJU_JPFULLPOPU1_POP0);
+ JU_SETDIGIT1(*PIndex, offset);
+ JU_RET_FOUND_FULLPOPU1;
+#endif
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+//
+// Locate the Index with the proper ordinal (see SETOFFSET()) in the Immediate,
+// depending on leaf Index Size and pop1. Note: There are no Dcd bytes in an
+// Immediate JP, but in a cJU_JPIMMED_*_01 JP, the field holds the least bytes
+// of the immediate Index.
+
+#define SET_01(cState) JU_SETDIGITS(*PIndex, JU_JPDCDPOP0(Pjp), cState)
+
+ case cJU_JPIMMED_1_01: SET_01(1); goto Imm_01;
+ case cJU_JPIMMED_2_01: SET_01(2); goto Imm_01;
+ case cJU_JPIMMED_3_01: SET_01(3); goto Imm_01;
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01: SET_01(4); goto Imm_01;
+ case cJU_JPIMMED_5_01: SET_01(5); goto Imm_01;
+ case cJU_JPIMMED_6_01: SET_01(6); goto Imm_01;
+ case cJU_JPIMMED_7_01: SET_01(7); goto Imm_01;
+#endif
+
+Imm_01:
+
+ DBGCODE(SETOFFSET_IMM_CK(offset, Count0, pop1lower, 1);)
+ JU_RET_FOUND_IMM_01(Pjp);
+
+// Shorthand for where to find start of Index bytes array:
+
+#ifdef JUDY1
+#define PJI (Pjp->jp_1Index)
+#else
+#define PJI (Pjp->jp_LIndex)
+#endif
+
+// Optional code to check the remaining ordinal (see SETOFFSET_IMM()) against
+// the Index Size of the Immediate:
+
+#ifndef DEBUG // simple placeholder:
+#define IMM(cPop1,Next) \
+ goto Next
+#else // extra pop1-specific checking:
+#define IMM(cPop1,Next) \
+ SETOFFSET_IMM_CK(offset, Count0, pop1lower, cPop1); \
+ goto Next
+#endif
+
+ case cJU_JPIMMED_1_02: IMM( 2, Imm1);
+ case cJU_JPIMMED_1_03: IMM( 3, Imm1);
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04: IMM( 4, Imm1);
+ case cJU_JPIMMED_1_05: IMM( 5, Imm1);
+ case cJU_JPIMMED_1_06: IMM( 6, Imm1);
+ case cJU_JPIMMED_1_07: IMM( 7, Imm1);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08: IMM( 8, Imm1);
+ case cJ1_JPIMMED_1_09: IMM( 9, Imm1);
+ case cJ1_JPIMMED_1_10: IMM(10, Imm1);
+ case cJ1_JPIMMED_1_11: IMM(11, Imm1);
+ case cJ1_JPIMMED_1_12: IMM(12, Imm1);
+ case cJ1_JPIMMED_1_13: IMM(13, Imm1);
+ case cJ1_JPIMMED_1_14: IMM(14, Imm1);
+ case cJ1_JPIMMED_1_15: IMM(15, Imm1);
+#endif
+
+Imm1: SETOFFSET_IMM(offset, Count0, pop1lower);
+ JU_SETDIGIT1(*PIndex, ((uint8_t *) PJI)[offset]);
+ JU_RET_FOUND_IMM(Pjp, offset);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02: IMM(2, Imm2);
+ case cJU_JPIMMED_2_03: IMM(3, Imm2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04: IMM(4, Imm2);
+ case cJ1_JPIMMED_2_05: IMM(5, Imm2);
+ case cJ1_JPIMMED_2_06: IMM(6, Imm2);
+ case cJ1_JPIMMED_2_07: IMM(7, Imm2);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+Imm2: SETOFFSET_IMM(offset, Count0, pop1lower);
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+ | ((uint16_t *) PJI)[offset];
+ JU_RET_FOUND_IMM(Pjp, offset);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02: IMM(2, Imm3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03: IMM(3, Imm3);
+ case cJ1_JPIMMED_3_04: IMM(4, Imm3);
+ case cJ1_JPIMMED_3_05: IMM(5, Imm3);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+Imm3:
+ {
+ Word_t lsb;
+ SETOFFSET_IMM(offset, Count0, pop1lower);
+ JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (3 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_4_02: IMM(2, Imm4);
+ case cJ1_JPIMMED_4_03: IMM(3, Imm4);
+
+Imm4: SETOFFSET_IMM(offset, Count0, pop1lower);
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+ | ((uint32_t *) PJI)[offset];
+ JU_RET_FOUND_IMM(Pjp, offset);
+
+ case cJ1_JPIMMED_5_02: IMM(2, Imm5);
+ case cJ1_JPIMMED_5_03: IMM(3, Imm5);
+
+Imm5:
+ {
+ Word_t lsb;
+ SETOFFSET_IMM(offset, Count0, pop1lower);
+ JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (5 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+
+ case cJ1_JPIMMED_6_02: IMM(2, Imm6);
+
+Imm6:
+ {
+ Word_t lsb;
+ SETOFFSET_IMM(offset, Count0, pop1lower);
+ JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (6 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+
+ case cJ1_JPIMMED_7_02: IMM(2, Imm7);
+
+Imm7:
+ {
+ Word_t lsb;
+ SETOFFSET_IMM(offset, Count0, pop1lower);
+ JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (7 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ----------------------------------------------------------------------------
+// UNEXPECTED JP TYPES:
+
+ default: JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+ } // SMByCount switch.
+
+ /*NOTREACHED*/
+
+} // Judy1ByCount() / JudyLByCount()
diff --git a/libs/klib/judy/JudyByCountWithDefs.c b/libs/klib/judy/JudyByCountWithDefs.c
new file mode 100644
index 0000000..b4ad243
--- /dev/null
+++ b/libs/klib/judy/JudyByCountWithDefs.c
@@ -0,0 +1,4 @@
+#define NOSMARTJBB 1
+#define NOSMARTJBU 1
+#define NOSMARTJLB 1
+#include "JudyByCount.c"
diff --git a/libs/klib/judy/JudyCascade.c b/libs/klib/judy/JudyCascade.c
new file mode 100644
index 0000000..fccb747
--- /dev/null
+++ b/libs/klib/judy/JudyCascade.c
@@ -0,0 +1,1940 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+extern int j__udyCreateBranchL(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+extern int j__udyCreateBranchB(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+
+DBGCODE(extern void JudyCheckSorted(Pjll_t Pjll, Word_t Pop1, long IndexSize);)
+
+static const jbb_t StageJBBZero; // zeroed versions of namesake struct.
+
+// TBD: There are multiple copies of (some of) these CopyWto3, Copy3toW,
+// CopyWto7 and Copy7toW functions in Judy1Cascade.c, JudyLCascade.c, and
+// JudyDecascade.c. These static functions should probably be moved to a
+// common place, made macros, or something to avoid having four copies.
+
+
+// ****************************************************************************
+// __ J U D Y C O P Y X T O W
+
+
+FUNCTION static void j__udyCopy3toW(
+ PWord_t PDest,
+ uint8_t * PSrc,
+ Word_t LeafIndexes)
+{
+ do
+ {
+ JU_COPY3_PINDEX_TO_LONG(*PDest, PSrc);
+ PSrc += 3;
+ PDest += 1;
+
+ } while(--LeafIndexes);
+
+} //j__udyCopy3toW()
+
+
+#ifdef JU_64BIT
+
+FUNCTION static void j__udyCopy4toW(
+ PWord_t PDest,
+ uint32_t * PSrc,
+ Word_t LeafIndexes)
+{
+ do { *PDest++ = *PSrc++;
+ } while(--LeafIndexes);
+
+} // j__udyCopy4toW()
+
+
+FUNCTION static void j__udyCopy5toW(
+ PWord_t PDest,
+ uint8_t * PSrc,
+ Word_t LeafIndexes)
+{
+ do
+ {
+ JU_COPY5_PINDEX_TO_LONG(*PDest, PSrc);
+ PSrc += 5;
+ PDest += 1;
+
+ } while(--LeafIndexes);
+
+} // j__udyCopy5toW()
+
+
+FUNCTION static void j__udyCopy6toW(
+ PWord_t PDest,
+ uint8_t * PSrc,
+ Word_t LeafIndexes)
+{
+ do
+ {
+ JU_COPY6_PINDEX_TO_LONG(*PDest, PSrc);
+ PSrc += 6;
+ PDest += 1;
+
+ } while(--LeafIndexes);
+
+} // j__udyCopy6toW()
+
+
+FUNCTION static void j__udyCopy7toW(
+ PWord_t PDest,
+ uint8_t * PSrc,
+ Word_t LeafIndexes)
+{
+ do
+ {
+ JU_COPY7_PINDEX_TO_LONG(*PDest, PSrc);
+ PSrc += 7;
+ PDest += 1;
+
+ } while(--LeafIndexes);
+
+} // j__udyCopy7toW()
+
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// __ J U D Y C O P Y W T O X
+
+
+FUNCTION static void j__udyCopyWto3(
+ uint8_t * PDest,
+ PWord_t PSrc,
+ Word_t LeafIndexes)
+{
+ do
+ {
+ JU_COPY3_LONG_TO_PINDEX(PDest, *PSrc);
+ PSrc += 1;
+ PDest += 3;
+
+ } while(--LeafIndexes);
+
+} // j__udyCopyWto3()
+
+
+#ifdef JU_64BIT
+
+FUNCTION static void j__udyCopyWto4(
+ uint8_t * PDest,
+ PWord_t PSrc,
+ Word_t LeafIndexes)
+{
+ uint32_t *PDest32 = (uint32_t *)PDest;
+
+ do
+ {
+ *PDest32 = *PSrc;
+ PSrc += 1;
+ PDest32 += 1;
+ } while(--LeafIndexes);
+
+} // j__udyCopyWto4()
+
+
+FUNCTION static void j__udyCopyWto5(
+ uint8_t * PDest,
+ PWord_t PSrc,
+ Word_t LeafIndexes)
+{
+ do
+ {
+ JU_COPY5_LONG_TO_PINDEX(PDest, *PSrc);
+ PSrc += 1;
+ PDest += 5;
+
+ } while(--LeafIndexes);
+
+} // j__udyCopyWto5()
+
+
+FUNCTION static void j__udyCopyWto6(
+ uint8_t * PDest,
+ PWord_t PSrc,
+ Word_t LeafIndexes)
+{
+ do
+ {
+ JU_COPY6_LONG_TO_PINDEX(PDest, *PSrc);
+ PSrc += 1;
+ PDest += 6;
+
+ } while(--LeafIndexes);
+
+} // j__udyCopyWto6()
+
+
+FUNCTION static void j__udyCopyWto7(
+ uint8_t * PDest,
+ PWord_t PSrc,
+ Word_t LeafIndexes)
+{
+ do
+ {
+ JU_COPY7_LONG_TO_PINDEX(PDest, *PSrc);
+ PSrc += 1;
+ PDest += 7;
+
+ } while(--LeafIndexes);
+
+} // j__udyCopyWto7()
+
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// COMMON CODE (MACROS):
+//
+// Free objects in an array of valid JPs, StageJP[ExpCnt] == last one may
+// include Immeds, which are ignored.
+
+#define FREEALLEXIT(ExpCnt,StageJP,Pjpm) \
+ { \
+ Word_t _expct = (ExpCnt); \
+ while (_expct--) j__udyFreeSM(&((StageJP)[_expct]), Pjpm); \
+ return(-1); \
+ }
+
+// Clear the array that keeps track of the number of JPs in a subexpanse:
+
+#define ZEROJP(SubJPCount) \
+ { \
+ int ii; \
+ for (ii = 0; ii < cJU_NUMSUBEXPB; ii++) (SubJPCount[ii]) = 0; \
+ }
+
+// ****************************************************************************
+// __ J U D Y S T A G E J B B T O J B B
+//
+// Create a mallocd BranchB (jbb_t) from a staged BranchB while "splaying" a
+// single old leaf. Return -1 if out of memory, otherwise 1.
+
+static int j__udyStageJBBtoJBB(
+ Pjp_t PjpLeaf, // JP of leaf being splayed.
+ Pjbb_t PStageJBB, // temp jbb_t on stack.
+ Pjp_t PjpArray, // array of JPs to splayed new leaves.
+ uint8_t * PSubCount, // count of JPs for each subexpanse.
+ Pjpm_t Pjpm) // the jpm_t for JudyAlloc*().
+{
+ Pjbb_t PjbbRaw; // pointer to new bitmap branch.
+ Pjbb_t Pjbb;
+ Word_t subexp;
+
+// Get memory for new BranchB:
+
+ if ((PjbbRaw = j__udyAllocJBB(Pjpm)) == (Pjbb_t) NULL) return(-1);
+ Pjbb = P_JBB(PjbbRaw);
+
+// Copy staged BranchB into just-allocated BranchB:
+
+ *Pjbb = *PStageJBB;
+
+// Allocate the JP subarrays (BJP) for the new BranchB:
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPB; subexp++)
+ {
+ Pjp_t PjpRaw;
+ Pjp_t Pjp;
+ Word_t NumJP; // number of JPs in each subexpanse.
+
+ if ((NumJP = PSubCount[subexp]) == 0) continue; // empty.
+
+// Out of memory, back out previous allocations:
+
+ if ((PjpRaw = j__udyAllocJBBJP(NumJP, Pjpm)) == (Pjp_t) NULL)
+ {
+ while(subexp--)
+ {
+ if ((NumJP = PSubCount[subexp]) == 0) continue;
+
+ PjpRaw = JU_JBB_PJP(Pjbb, subexp);
+ j__udyFreeJBBJP(PjpRaw, NumJP, Pjpm);
+ }
+ j__udyFreeJBB(PjbbRaw, Pjpm);
+ return(-1); // out of memory.
+ }
+ Pjp = P_JP(PjpRaw);
+
+// Place the JP subarray pointer in the new BranchB, copy subarray JPs, and
+// advance to the next subexpanse:
+
+ JU_JBB_PJP(Pjbb, subexp) = PjpRaw;
+ JU_COPYMEM(Pjp, PjpArray, NumJP);
+ PjpArray += NumJP;
+
+ } // for each subexpanse.
+
+// Change the PjpLeaf from Leaf to BranchB:
+
+ PjpLeaf->jp_Addr = (Word_t) PjbbRaw;
+ PjpLeaf->jp_Type += cJU_JPBRANCH_B2 - cJU_JPLEAF2; // Leaf to BranchB.
+
+ return(1);
+
+} // j__udyStageJBBtoJBB()
+
+
+// ****************************************************************************
+// __ J U D Y J L L 2 T O J L B 1
+//
+// Create a LeafB1 (jlb_t = JLB1) from a Leaf2 (2-byte Indexes and for JudyL,
+// Word_t Values). Return NULL if out of memory, else a pointer to the new
+// LeafB1.
+//
+// NOTE: Caller must release the Leaf2 that was passed in.
+
+FUNCTION static Pjlb_t j__udyJLL2toJLB1(
+ uint16_t * Pjll, // array of 16-bit indexes.
+#ifdef JUDYL
+ Pjv_t Pjv, // array of associated values.
+#endif
+ Word_t LeafPop1, // number of indexes/values.
+ Pvoid_t Pjpm) // jpm_t for JudyAlloc*()/JudyFree*().
+{
+ Pjlb_t PjlbRaw;
+ Pjlb_t Pjlb;
+ int offset;
+JUDYLCODE(int subexp;)
+
+// Allocate the LeafB1:
+
+ if ((PjlbRaw = j__udyAllocJLB1(Pjpm)) == (Pjlb_t) NULL)
+ return((Pjlb_t) NULL);
+ Pjlb = P_JLB(PjlbRaw);
+
+// Copy Leaf2 indexes to LeafB1:
+
+ for (offset = 0; offset < LeafPop1; ++offset)
+ JU_BITMAPSETL(Pjlb, Pjll[offset]);
+
+#ifdef JUDYL
+
+// Build LeafVs from bitmap:
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+ {
+ struct _POINTER_VALUES
+ {
+ Word_t pv_Pop1; // size of value area.
+ Pjv_t pv_Pjv; // raw pointer to value area.
+ } pv[cJU_NUMSUBEXPL];
+
+// Get the population of the subexpanse, and if any, allocate a LeafV:
+
+ pv[subexp].pv_Pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+ if (pv[subexp].pv_Pop1)
+ {
+ Pjv_t Pjvnew;
+
+// TBD: There is an opportunity to put pop == 1 value in pointer:
+
+ pv[subexp].pv_Pjv = j__udyLAllocJV(pv[subexp].pv_Pop1, Pjpm);
+
+// Upon out of memory, free all previously allocated:
+
+ if (pv[subexp].pv_Pjv == (Pjv_t) NULL)
+ {
+ while(subexp--)
+ {
+ if (pv[subexp].pv_Pop1)
+ {
+ j__udyLFreeJV(pv[subexp].pv_Pjv, pv[subexp].pv_Pop1,
+ Pjpm);
+ }
+ }
+ j__udyFreeJLB1(PjlbRaw, Pjpm);
+ return((Pjlb_t) NULL);
+ }
+
+ Pjvnew = P_JV(pv[subexp].pv_Pjv);
+ JU_COPYMEM(Pjvnew, Pjv, pv[subexp].pv_Pop1);
+ Pjv += pv[subexp].pv_Pop1; // advance value pointer.
+
+// Place raw pointer to value array in bitmap subexpanse:
+
+ JL_JLB_PVALUE(Pjlb, subexp) = pv[subexp].pv_Pjv;
+
+ } // populated subexpanse.
+ } // each subexpanse.
+
+#endif // JUDYL
+
+ return(PjlbRaw); // pointer to LeafB1.
+
+} // j__udyJLL2toJLB1()
+
+
+// ****************************************************************************
+// __ J U D Y C A S C A D E 1
+//
+// Create bitmap leaf from 1-byte Indexes and Word_t Values.
+//
+// TBD: There must be a better way.
+//
+// Only for JudyL 32 bit: (note, unifdef disallows comment on next line)
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+FUNCTION int j__udyCascade1(
+ Pjp_t Pjp,
+ Pvoid_t Pjpm)
+{
+ Word_t DcdP0;
+ uint8_t * PLeaf;
+ Pjlb_t PjlbRaw;
+ Pjlb_t Pjlb;
+ Word_t Pop1;
+ Word_t ii; // temp for loop counter
+JUDYLCODE(Pjv_t Pjv;)
+
+ assert(JU_JPTYPE(Pjp) == cJU_JPLEAF1);
+ assert((JU_JPDCDPOP0(Pjp) & 0xFF) == (cJU_LEAF1_MAXPOP1-1));
+
+ PjlbRaw = j__udyAllocJLB1(Pjpm);
+ if (PjlbRaw == (Pjlb_t) NULL) return(-1);
+
+ Pjlb = P_JLB(PjlbRaw);
+ PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+
+ JUDYLCODE(Pjv = JL_LEAF1VALUEAREA(PLeaf, Pop1);)
+
+// Copy 1 byte index Leaf to bitmap Leaf
+ for (ii = 0; ii < Pop1; ii++) JU_BITMAPSETL(Pjlb, PLeaf[ii]);
+
+#ifdef JUDYL
+// Build 8 subexpanse Value leaves from bitmap
+ for (ii = 0; ii < cJU_NUMSUBEXPL; ii++)
+ {
+// Get number of Indexes in subexpanse
+ if ((Pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, ii))))
+ {
+ Pjv_t PjvnewRaw; // value area of new leaf.
+ Pjv_t Pjvnew;
+
+ PjvnewRaw = j__udyLAllocJV(Pop1, Pjpm);
+ if (PjvnewRaw == (Pjv_t) NULL) // out of memory.
+ {
+// Free prevously allocated LeafVs:
+ while(ii--)
+ {
+ if ((Pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, ii))))
+ {
+ PjvnewRaw = JL_JLB_PVALUE(Pjlb, ii);
+ j__udyLFreeJV(PjvnewRaw, Pop1, Pjpm);
+ }
+ }
+// Free the bitmap leaf
+ j__udyLFreeJLB1(PjlbRaw,Pjpm);
+ return(-1);
+ }
+ Pjvnew = P_JV(PjvnewRaw);
+ JU_COPYMEM(Pjvnew, Pjv, Pop1);
+
+ Pjv += Pop1;
+ JL_JLB_PVALUE(Pjlb, ii) = PjvnewRaw;
+ }
+ }
+#endif // JUDYL
+
+ DcdP0 = JU_JPDCDPOP0(Pjp) | (PLeaf[0] & cJU_DCDMASK(1));
+ JU_JPSETADT(Pjp, (Word_t)PjlbRaw, DcdP0, cJU_JPLEAF_B1);
+
+ return(1); // return success
+
+} // j__udyCascade1()
+
+#endif // (!(JUDY1 && JU_64BIT))
+
+
+// ****************************************************************************
+// __ J U D Y C A S C A D E 2
+//
+// Entry PLeaf of size LeafPop1 is either compressed or splayed with pointer
+// returned in Pjp. Entry Levels sizeof(Word_t) down to level 2.
+//
+// Splay or compress the 2-byte Index Leaf that Pjp point to. Return *Pjp as a
+// (compressed) cJU_LEAFB1 or a cJU_BRANCH_*2
+
+FUNCTION int j__udyCascade2(
+ Pjp_t Pjp,
+ Pvoid_t Pjpm)
+{
+ uint16_t * PLeaf; // pointer to leaf, explicit type.
+ Word_t End, Start; // temporaries.
+ Word_t ExpCnt; // count of expanses of splay.
+ Word_t CIndex; // current Index word.
+JUDYLCODE(Pjv_t Pjv;) // value area of leaf.
+
+// Temp staging for parts(Leaves) of newly splayed leaf
+ jp_t StageJP [cJU_LEAF2_MAXPOP1]; // JPs of new leaves
+ uint8_t StageExp [cJU_LEAF2_MAXPOP1]; // Expanses of new leaves
+ uint8_t SubJPCount[cJU_NUMSUBEXPB]; // JPs in each subexpanse
+ jbb_t StageJBB; // staged bitmap branch
+
+ assert(JU_JPTYPE(Pjp) == cJU_JPLEAF2);
+ assert((JU_JPDCDPOP0(Pjp) & 0xFFFF) == (cJU_LEAF2_MAXPOP1-1));
+
+// Get the address of the Leaf
+ PLeaf = (uint16_t *) P_JLL(Pjp->jp_Addr);
+
+// And its Value area
+ JUDYLCODE(Pjv = JL_LEAF2VALUEAREA(PLeaf, cJU_LEAF2_MAXPOP1);)
+
+// If Leaf is in 1 expanse -- just compress it to a Bitmap Leaf
+
+ CIndex = PLeaf[0];
+ if (!JU_DIGITATSTATE(CIndex ^ PLeaf[cJU_LEAF2_MAXPOP1-1], 2))
+ {
+// cJU_JPLEAF_B1
+ Word_t DcdP0;
+ Pjlb_t PjlbRaw;
+ PjlbRaw = j__udyJLL2toJLB1(PLeaf,
+#ifdef JUDYL
+ Pjv,
+#endif
+ cJU_LEAF2_MAXPOP1, Pjpm);
+ if (PjlbRaw == (Pjlb_t)NULL) return(-1); // out of memory
+
+// Merge in another Dcd byte because compressing
+ DcdP0 = (CIndex & cJU_DCDMASK(1)) | JU_JPDCDPOP0(Pjp);
+ JU_JPSETADT(Pjp, (Word_t)PjlbRaw, DcdP0, cJU_JPLEAF_B1);
+
+ return(1);
+ }
+
+// Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+ StageJBB = StageJBBZero; // zero staged bitmap branch
+ ZEROJP(SubJPCount);
+
+// Splay the 2 byte index Leaf to 1 byte Index Leaves
+ for (ExpCnt = Start = 0, End = 1; ; End++)
+ {
+// Check if new expanse or last one
+ if ( (End == cJU_LEAF2_MAXPOP1)
+ ||
+ (JU_DIGITATSTATE(CIndex ^ PLeaf[End], 2))
+ )
+ {
+// Build a leaf below the previous expanse
+//
+ Pjp_t PjpJP = StageJP + ExpCnt;
+ Word_t Pop1 = End - Start;
+ Word_t expanse = JU_DIGITATSTATE(CIndex, 2);
+ Word_t subexp = expanse / cJU_BITSPERSUBEXPB;
+//
+// set the bit that is the current expanse
+ JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+ StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+// count number of expanses in each subexpanse
+ SubJPCount[subexp]++;
+
+// Save byte expanse of leaf
+ StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 2);
+
+ if (Pop1 == 1) // cJU_JPIMMED_1_01
+ {
+ Word_t DcdP0;
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(1)) |
+ CIndex;
+#ifdef JUDY1
+ JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_1_01);
+#else // JUDYL
+ JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+ cJL_JPIMMED_1_01);
+#endif // JUDYL
+ }
+ else if (Pop1 <= cJU_IMMED1_MAXPOP1) // bigger
+ {
+// cJL_JPIMMED_1_02..3: JudyL 32
+// cJ1_JPIMMED_1_02..7: Judy1 32
+// cJL_JPIMMED_1_02..7: JudyL 64
+// cJ1_JPIMMED_1_02..15: Judy1 64
+#ifdef JUDYL
+ Pjv_t PjvnewRaw; // value area of leaf.
+ Pjv_t Pjvnew;
+
+// Allocate Value area for Immediate Leaf
+ PjvnewRaw = j__udyLAllocJV(Pop1, Pjpm);
+ if (PjvnewRaw == (Pjv_t) NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjvnew = P_JV(PjvnewRaw);
+
+// Copy to Values to Value Leaf
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+ PjpJP->jp_Addr = (Word_t) PjvnewRaw;
+
+// Copy to JP as an immediate Leaf
+ JU_COPYMEM(PjpJP->jp_LIndex, PLeaf + Start,
+ Pop1);
+#else
+ JU_COPYMEM(PjpJP->jp_1Index, PLeaf + Start,
+ Pop1);
+#endif
+// Set Type, Population and Index size
+ PjpJP->jp_Type = cJU_JPIMMED_1_02 + Pop1 - 2;
+ }
+
+// 64Bit Judy1 does not have Leaf1: (note, unifdef disallows comment on next
+// line)
+
+#if (! (defined(JUDY1) && defined(JU_64BIT)))
+ else if (Pop1 <= cJU_LEAF1_MAXPOP1) // still bigger
+ {
+// cJU_JPLEAF1
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+// Get a new Leaf
+ PjllRaw = j__udyAllocJLL1(Pop1, Pjpm);
+ if (PjllRaw == (Pjll_t)NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjll = P_JLL(PjllRaw);
+#ifdef JUDYL
+// Copy to Values to new Leaf
+ Pjvnew = JL_LEAF1VALUEAREA(Pjll, Pop1);
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+// Copy Indexes to new Leaf
+ JU_COPYMEM((uint8_t *)Pjll, PLeaf+Start, Pop1);
+
+ DBGCODE(JudyCheckSorted(Pjll, Pop1, 1);)
+
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(2))
+ |
+ (CIndex & cJU_DCDMASK(2-1))
+ |
+ (Pop1 - 1);
+
+ JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+ cJU_JPLEAF1);
+ }
+#endif // (!(JUDY1 && JU_64BIT)) // Not 64Bit Judy1
+
+ else // biggest
+ {
+// cJU_JPLEAF_B1
+ Word_t DcdP0;
+ Pjlb_t PjlbRaw;
+ PjlbRaw = j__udyJLL2toJLB1(
+ PLeaf + Start,
+#ifdef JUDYL
+ Pjv + Start,
+#endif
+ Pop1, Pjpm);
+ if (PjlbRaw == (Pjlb_t)NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(2))
+ |
+ (CIndex & cJU_DCDMASK(2-1))
+ |
+ (Pop1 - 1);
+
+ JU_JPSETADT(PjpJP, (Word_t)PjlbRaw, DcdP0,
+ cJU_JPLEAF_B1);
+ }
+ ExpCnt++;
+// Done?
+ if (End == cJU_LEAF2_MAXPOP1) break;
+
+// New Expanse, Start and Count
+ CIndex = PLeaf[End];
+ Start = End;
+ }
+ }
+
+// Now put all the Leaves below a BranchL or BranchB:
+ if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+ {
+ if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+ Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjp->jp_Type = cJU_JPBRANCH_L2;
+ }
+ else
+ {
+ if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+ == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+ }
+ return(1);
+
+} // j__udyCascade2()
+
+
+// ****************************************************************************
+// __ J U D Y C A S C A D E 3
+//
+// Return *Pjp as a (compressed) cJU_LEAF2, cJU_BRANCH_L3, cJU_BRANCH_B3.
+
+FUNCTION int j__udyCascade3(
+ Pjp_t Pjp,
+ Pvoid_t Pjpm)
+{
+ uint8_t * PLeaf; // pointer to leaf, explicit type.
+ Word_t End, Start; // temporaries.
+ Word_t ExpCnt; // count of expanses of splay.
+ Word_t CIndex; // current Index word.
+JUDYLCODE(Pjv_t Pjv;) // value area of leaf.
+
+// Temp staging for parts(Leaves) of newly splayed leaf
+ jp_t StageJP [cJU_LEAF3_MAXPOP1]; // JPs of new leaves
+ Word_t StageA [cJU_LEAF3_MAXPOP1];
+ uint8_t StageExp [cJU_LEAF3_MAXPOP1]; // Expanses of new leaves
+ uint8_t SubJPCount[cJU_NUMSUBEXPB]; // JPs in each subexpanse
+ jbb_t StageJBB; // staged bitmap branch
+
+ assert(JU_JPTYPE(Pjp) == cJU_JPLEAF3);
+ assert((JU_JPDCDPOP0(Pjp) & 0xFFFFFF) == (cJU_LEAF3_MAXPOP1-1));
+
+// Get the address of the Leaf
+ PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+// Extract leaf to Word_t and insert-sort Index into it
+ j__udyCopy3toW(StageA, PLeaf, cJU_LEAF3_MAXPOP1);
+
+// Get the address of the Leaf and Value area
+ JUDYLCODE(Pjv = JL_LEAF3VALUEAREA(PLeaf, cJU_LEAF3_MAXPOP1);)
+
+// If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+ CIndex = StageA[0];
+ if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF3_MAXPOP1-1], 3))
+ {
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+// Alloc a 2 byte Index Leaf
+ PjllRaw = j__udyAllocJLL2(cJU_LEAF3_MAXPOP1, Pjpm);
+ if (PjllRaw == (Pjlb_t)NULL) return(-1); // out of memory
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy just 2 bytes Indexes to new Leaf
+// j__udyCopyWto2((uint16_t *) Pjll, StageA, cJU_LEAF3_MAXPOP1);
+ JU_COPYMEM ((uint16_t *) Pjll, StageA, cJU_LEAF3_MAXPOP1);
+#ifdef JUDYL
+// Copy Value area into new Leaf
+ Pjvnew = JL_LEAF2VALUEAREA(Pjll, cJU_LEAF3_MAXPOP1);
+ JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF3_MAXPOP1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF3_MAXPOP1, 2);)
+
+// Form new JP, Pop0 field is unchanged
+// Add in another Dcd byte because compressing
+ DcdP0 = (CIndex & cJU_DCDMASK(2)) | JU_JPDCDPOP0(Pjp);
+
+ JU_JPSETADT(Pjp, (Word_t) PjllRaw, DcdP0, cJU_JPLEAF2);
+
+ return(1); // Success
+ }
+
+// Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+ StageJBB = StageJBBZero; // zero staged bitmap branch
+ ZEROJP(SubJPCount);
+
+// Splay the 3 byte index Leaf to 2 byte Index Leaves
+ for (ExpCnt = Start = 0, End = 1; ; End++)
+ {
+// Check if new expanse or last one
+ if ( (End == cJU_LEAF3_MAXPOP1)
+ ||
+ (JU_DIGITATSTATE(CIndex ^ StageA[End], 3))
+ )
+ {
+// Build a leaf below the previous expanse
+
+ Pjp_t PjpJP = StageJP + ExpCnt;
+ Word_t Pop1 = End - Start;
+ Word_t expanse = JU_DIGITATSTATE(CIndex, 3);
+ Word_t subexp = expanse / cJU_BITSPERSUBEXPB;
+//
+// set the bit that is the current expanse
+ JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+ StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+// count number of expanses in each subexpanse
+ SubJPCount[subexp]++;
+
+// Save byte expanse of leaf
+ StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 3);
+
+ if (Pop1 == 1) // cJU_JPIMMED_2_01
+ {
+ Word_t DcdP0;
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(2)) |
+ CIndex;
+#ifdef JUDY1
+ JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_2_01);
+#else // JUDYL
+ JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+ cJL_JPIMMED_2_01);
+#endif // JUDYL
+ }
+#if (defined(JUDY1) || defined(JU_64BIT))
+ else if (Pop1 <= cJU_IMMED2_MAXPOP1)
+ {
+// cJ1_JPIMMED_2_02..3: Judy1 32
+// cJL_JPIMMED_2_02..3: JudyL 64
+// cJ1_JPIMMED_2_02..7: Judy1 64
+#ifdef JUDYL
+// Alloc is 1st in case of malloc fail
+ Pjv_t PjvnewRaw; // value area of new leaf.
+ Pjv_t Pjvnew;
+
+// Allocate Value area for Immediate Leaf
+ PjvnewRaw = j__udyLAllocJV(Pop1, Pjpm);
+ if (PjvnewRaw == (Pjv_t) NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjvnew = P_JV(PjvnewRaw);
+
+// Copy to Values to Value Leaf
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+
+ PjpJP->jp_Addr = (Word_t) PjvnewRaw;
+
+// Copy to Index to JP as an immediate Leaf
+ JU_COPYMEM((uint16_t *) (PjpJP->jp_LIndex),
+ StageA + Start, Pop1);
+#else // JUDY1
+ JU_COPYMEM((uint16_t *) (PjpJP->jp_1Index),
+ StageA + Start, Pop1);
+#endif // JUDY1
+// Set Type, Population and Index size
+ PjpJP->jp_Type = cJU_JPIMMED_2_02 + Pop1 - 2;
+ }
+#endif // (JUDY1 || JU_64BIT)
+
+ else // Make a linear leaf2
+ {
+// cJU_JPLEAF2
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+ PjllRaw = j__udyAllocJLL2(Pop1, Pjpm);
+ if (PjllRaw == (Pjll_t) NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjll = P_JLL(PjllRaw);
+#ifdef JUDYL
+// Copy to Values to new Leaf
+ Pjvnew = JL_LEAF2VALUEAREA(Pjll, Pop1);
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+// Copy least 2 bytes per Index of Leaf to new Leaf
+ JU_COPYMEM((uint16_t *) Pjll, StageA+Start,
+ Pop1);
+
+ DBGCODE(JudyCheckSorted(Pjll, Pop1, 2);)
+
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(3))
+ |
+ (CIndex & cJU_DCDMASK(3-1))
+ |
+ (Pop1 - 1);
+
+ JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+ cJU_JPLEAF2);
+ }
+ ExpCnt++;
+// Done?
+ if (End == cJU_LEAF3_MAXPOP1) break;
+
+// New Expanse, Start and Count
+ CIndex = StageA[End];
+ Start = End;
+ }
+ }
+
+// Now put all the Leaves below a BranchL or BranchB:
+ if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+ {
+ if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+ Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjp->jp_Type = cJU_JPBRANCH_L3;
+ }
+ else
+ {
+ if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+ == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+ }
+ return(1);
+
+} // j__udyCascade3()
+
+
+#ifdef JU_64BIT // JudyCascade[4567]
+
+// ****************************************************************************
+// __ J U D Y C A S C A D E 4
+//
+// Cascade from a cJU_JPLEAF4 to one of the following:
+// 1. if leaf is in 1 expanse:
+// compress it into a JPLEAF3
+// 2. if leaf contains multiple expanses:
+// create linear or bitmap branch containing
+// each new expanse is either a:
+// JPIMMED_3_01 branch
+// JPIMMED_3_02 branch
+// JPLEAF3
+
+FUNCTION int j__udyCascade4(
+ Pjp_t Pjp,
+ Pvoid_t Pjpm)
+{
+ uint32_t * PLeaf; // pointer to leaf, explicit type.
+ Word_t End, Start; // temporaries.
+ Word_t ExpCnt; // count of expanses of splay.
+ Word_t CIndex; // current Index word.
+JUDYLCODE(Pjv_t Pjv;) // value area of leaf.
+
+// Temp staging for parts(Leaves) of newly splayed leaf
+ jp_t StageJP [cJU_LEAF4_MAXPOP1]; // JPs of new leaves
+ Word_t StageA [cJU_LEAF4_MAXPOP1];
+ uint8_t StageExp [cJU_LEAF4_MAXPOP1]; // Expanses of new leaves
+ uint8_t SubJPCount[cJU_NUMSUBEXPB]; // JPs in each subexpanse
+ jbb_t StageJBB; // staged bitmap branch
+
+ assert(JU_JPTYPE(Pjp) == cJU_JPLEAF4);
+ assert((JU_JPDCDPOP0(Pjp) & 0xFFFFFFFF) == (cJU_LEAF4_MAXPOP1-1));
+
+// Get the address of the Leaf
+ PLeaf = (uint32_t *) P_JLL(Pjp->jp_Addr);
+
+// Extract 4 byte index Leaf to Word_t
+ j__udyCopy4toW(StageA, PLeaf, cJU_LEAF4_MAXPOP1);
+
+// Get the address of the Leaf and Value area
+ JUDYLCODE(Pjv = JL_LEAF4VALUEAREA(PLeaf, cJU_LEAF4_MAXPOP1);)
+
+// If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+ CIndex = StageA[0];
+ if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF4_MAXPOP1-1], 4))
+ {
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new Leaf.
+
+// Alloc a 3 byte Index Leaf
+ PjllRaw = j__udyAllocJLL3(cJU_LEAF4_MAXPOP1, Pjpm);
+ if (PjllRaw == (Pjlb_t)NULL) return(-1); // out of memory
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy Index area into new Leaf
+ j__udyCopyWto3((uint8_t *) Pjll, StageA, cJU_LEAF4_MAXPOP1);
+#ifdef JUDYL
+// Copy Value area into new Leaf
+ Pjvnew = JL_LEAF3VALUEAREA(Pjll, cJU_LEAF4_MAXPOP1);
+ JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF4_MAXPOP1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF4_MAXPOP1, 3);)
+
+ DcdP0 = JU_JPDCDPOP0(Pjp) | (CIndex & cJU_DCDMASK(3));
+ JU_JPSETADT(Pjp, (Word_t)PjllRaw, DcdP0, cJU_JPLEAF3);
+
+ return(1);
+ }
+
+// Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+ StageJBB = StageJBBZero; // zero staged bitmap branch
+ ZEROJP(SubJPCount);
+
+// Splay the 4 byte index Leaf to 3 byte Index Leaves
+ for (ExpCnt = Start = 0, End = 1; ; End++)
+ {
+// Check if new expanse or last one
+ if ( (End == cJU_LEAF4_MAXPOP1)
+ ||
+ (JU_DIGITATSTATE(CIndex ^ StageA[End], 4))
+ )
+ {
+// Build a leaf below the previous expanse
+
+ Pjp_t PjpJP = StageJP + ExpCnt;
+ Word_t Pop1 = End - Start;
+ Word_t expanse = JU_DIGITATSTATE(CIndex, 4);
+ Word_t subexp = expanse / cJU_BITSPERSUBEXPB;
+//
+// set the bit that is the current expanse
+ JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+ StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+// count number of expanses in each subexpanse
+ SubJPCount[subexp]++;
+
+// Save byte expanse of leaf
+ StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 4);
+
+ if (Pop1 == 1) // cJU_JPIMMED_3_01
+ {
+ Word_t DcdP0;
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(3)) |
+ CIndex;
+#ifdef JUDY1
+ JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_3_01);
+#else // JUDYL
+ JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+ cJL_JPIMMED_3_01);
+#endif // JUDYL
+ }
+ else if (Pop1 <= cJU_IMMED3_MAXPOP1)
+ {
+// cJ1_JPIMMED_3_02 : Judy1 32
+// cJL_JPIMMED_3_02 : JudyL 64
+// cJ1_JPIMMED_3_02..5: Judy1 64
+
+#ifdef JUDYL
+// Alloc is 1st in case of malloc fail
+ Pjv_t PjvnewRaw; // value area of new leaf.
+ Pjv_t Pjvnew;
+
+// Allocate Value area for Immediate Leaf
+ PjvnewRaw = j__udyLAllocJV(Pop1, Pjpm);
+ if (PjvnewRaw == (Pjv_t) NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjvnew = P_JV(PjvnewRaw);
+
+// Copy to Values to Value Leaf
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+ PjpJP->jp_Addr = (Word_t) PjvnewRaw;
+
+// Copy to Index to JP as an immediate Leaf
+ j__udyCopyWto3(PjpJP->jp_LIndex,
+ StageA + Start, Pop1);
+#else
+ j__udyCopyWto3(PjpJP->jp_1Index,
+ StageA + Start, Pop1);
+#endif
+// Set type, population and Index size
+ PjpJP->jp_Type = cJU_JPIMMED_3_02 + Pop1 - 2;
+ }
+ else
+ {
+// cJU_JPLEAF3
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+ PjllRaw = j__udyAllocJLL3(Pop1, Pjpm);
+ if (PjllRaw == (Pjll_t)NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy Indexes to new Leaf
+ j__udyCopyWto3((uint8_t *) Pjll, StageA + Start,
+ Pop1);
+#ifdef JUDYL
+// Copy to Values to new Leaf
+ Pjvnew = JL_LEAF3VALUEAREA(Pjll, Pop1);
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, Pop1, 3);)
+
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(4))
+ |
+ (CIndex & cJU_DCDMASK(4-1))
+ |
+ (Pop1 - 1);
+
+ JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+ cJU_JPLEAF3);
+ }
+ ExpCnt++;
+// Done?
+ if (End == cJU_LEAF4_MAXPOP1) break;
+
+// New Expanse, Start and Count
+ CIndex = StageA[End];
+ Start = End;
+ }
+ }
+
+// Now put all the Leaves below a BranchL or BranchB:
+ if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+ {
+ if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+ Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjp->jp_Type = cJU_JPBRANCH_L4;
+ }
+ else
+ {
+ if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+ == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+ }
+ return(1);
+
+} // j__udyCascade4()
+
+
+// ****************************************************************************
+// __ J U D Y C A S C A D E 5
+//
+// Cascade from a cJU_JPLEAF5 to one of the following:
+// 1. if leaf is in 1 expanse:
+// compress it into a JPLEAF4
+// 2. if leaf contains multiple expanses:
+// create linear or bitmap branch containing
+// each new expanse is either a:
+// JPIMMED_4_01 branch
+// JPLEAF4
+
+FUNCTION int j__udyCascade5(
+ Pjp_t Pjp,
+ Pvoid_t Pjpm)
+{
+ uint8_t * PLeaf; // pointer to leaf, explicit type.
+ Word_t End, Start; // temporaries.
+ Word_t ExpCnt; // count of expanses of splay.
+ Word_t CIndex; // current Index word.
+JUDYLCODE(Pjv_t Pjv;) // value area of leaf.
+
+// Temp staging for parts(Leaves) of newly splayed leaf
+ jp_t StageJP [cJU_LEAF5_MAXPOP1]; // JPs of new leaves
+ Word_t StageA [cJU_LEAF5_MAXPOP1];
+ uint8_t StageExp [cJU_LEAF5_MAXPOP1]; // Expanses of new leaves
+ uint8_t SubJPCount[cJU_NUMSUBEXPB]; // JPs in each subexpanse
+ jbb_t StageJBB; // staged bitmap branch
+
+ assert(JU_JPTYPE(Pjp) == cJU_JPLEAF5);
+ assert((JU_JPDCDPOP0(Pjp) & 0xFFFFFFFFFF) == (cJU_LEAF5_MAXPOP1-1));
+
+// Get the address of the Leaf
+ PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+// Extract 5 byte index Leaf to Word_t
+ j__udyCopy5toW(StageA, PLeaf, cJU_LEAF5_MAXPOP1);
+
+// Get the address of the Leaf and Value area
+ JUDYLCODE(Pjv = JL_LEAF5VALUEAREA(PLeaf, cJU_LEAF5_MAXPOP1);)
+
+// If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+ CIndex = StageA[0];
+ if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF5_MAXPOP1-1], 5))
+ {
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+// Alloc a 4 byte Index Leaf
+ PjllRaw = j__udyAllocJLL4(cJU_LEAF5_MAXPOP1, Pjpm);
+ if (PjllRaw == (Pjlb_t)NULL) return(-1); // out of memory
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy Index area into new Leaf
+ j__udyCopyWto4((uint8_t *) Pjll, StageA, cJU_LEAF5_MAXPOP1);
+#ifdef JUDYL
+// Copy Value area into new Leaf
+ Pjvnew = JL_LEAF4VALUEAREA(Pjll, cJU_LEAF5_MAXPOP1);
+ JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF5_MAXPOP1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF5_MAXPOP1, 4);)
+
+ DcdP0 = JU_JPDCDPOP0(Pjp) | (CIndex & cJU_DCDMASK(4));
+ JU_JPSETADT(Pjp, (Word_t)PjllRaw, DcdP0, cJU_JPLEAF4);
+
+ return(1);
+ }
+
+// Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+ StageJBB = StageJBBZero; // zero staged bitmap branch
+ ZEROJP(SubJPCount);
+
+// Splay the 5 byte index Leaf to 4 byte Index Leaves
+ for (ExpCnt = Start = 0, End = 1; ; End++)
+ {
+// Check if new expanse or last one
+ if ( (End == cJU_LEAF5_MAXPOP1)
+ ||
+ (JU_DIGITATSTATE(CIndex ^ StageA[End], 5))
+ )
+ {
+// Build a leaf below the previous expanse
+
+ Pjp_t PjpJP = StageJP + ExpCnt;
+ Word_t Pop1 = End - Start;
+ Word_t expanse = JU_DIGITATSTATE(CIndex, 5);
+ Word_t subexp = expanse / cJU_BITSPERSUBEXPB;
+//
+// set the bit that is the current expanse
+ JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+ StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+// count number of expanses in each subexpanse
+ SubJPCount[subexp]++;
+
+// Save byte expanse of leaf
+ StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 5);
+
+ if (Pop1 == 1) // cJU_JPIMMED_4_01
+ {
+ Word_t DcdP0;
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(4)) |
+ CIndex;
+#ifdef JUDY1
+ JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_4_01);
+#else // JUDYL
+ JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+ cJL_JPIMMED_4_01);
+#endif // JUDYL
+ }
+#ifdef JUDY1
+ else if (Pop1 <= cJ1_IMMED4_MAXPOP1)
+ {
+// cJ1_JPIMMED_4_02..3: Judy1 64
+
+// Copy to Index to JP as an immediate Leaf
+ j__udyCopyWto4(PjpJP->jp_1Index,
+ StageA + Start, Pop1);
+
+// Set pointer, type, population and Index size
+ PjpJP->jp_Type = cJ1_JPIMMED_4_02 + Pop1 - 2;
+ }
+#endif
+ else
+ {
+// cJU_JPLEAF4
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+// Get a new Leaf
+ PjllRaw = j__udyAllocJLL4(Pop1, Pjpm);
+ if (PjllRaw == (Pjll_t)NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy Indexes to new Leaf
+ j__udyCopyWto4((uint8_t *) Pjll, StageA + Start,
+ Pop1);
+#ifdef JUDYL
+// Copy to Values to new Leaf
+ Pjvnew = JL_LEAF4VALUEAREA(Pjll, Pop1);
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, Pop1, 4);)
+
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(5))
+ |
+ (CIndex & cJU_DCDMASK(5-1))
+ |
+ (Pop1 - 1);
+
+ JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+ cJU_JPLEAF4);
+ }
+ ExpCnt++;
+// Done?
+ if (End == cJU_LEAF5_MAXPOP1) break;
+
+// New Expanse, Start and Count
+ CIndex = StageA[End];
+ Start = End;
+ }
+ }
+
+// Now put all the Leaves below a BranchL or BranchB:
+ if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+ {
+ if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+ Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjp->jp_Type = cJU_JPBRANCH_L5;
+ }
+ else
+ {
+ if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+ == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+ }
+ return(1);
+
+} // j__udyCascade5()
+
+
+// ****************************************************************************
+// __ J U D Y C A S C A D E 6
+//
+// Cascade from a cJU_JPLEAF6 to one of the following:
+// 1. if leaf is in 1 expanse:
+// compress it into a JPLEAF5
+// 2. if leaf contains multiple expanses:
+// create linear or bitmap branch containing
+// each new expanse is either a:
+// JPIMMED_5_01 ... JPIMMED_5_03 branch
+// JPIMMED_5_01 branch
+// JPLEAF5
+
+FUNCTION int j__udyCascade6(
+ Pjp_t Pjp,
+ Pvoid_t Pjpm)
+{
+ uint8_t * PLeaf; // pointer to leaf, explicit type.
+ Word_t End, Start; // temporaries.
+ Word_t ExpCnt; // count of expanses of splay.
+ Word_t CIndex; // current Index word.
+JUDYLCODE(Pjv_t Pjv;) // value area of leaf.
+
+// Temp staging for parts(Leaves) of newly splayed leaf
+ jp_t StageJP [cJU_LEAF6_MAXPOP1]; // JPs of new leaves
+ Word_t StageA [cJU_LEAF6_MAXPOP1];
+ uint8_t StageExp [cJU_LEAF6_MAXPOP1]; // Expanses of new leaves
+ uint8_t SubJPCount[cJU_NUMSUBEXPB]; // JPs in each subexpanse
+ jbb_t StageJBB; // staged bitmap branch
+
+ assert(JU_JPTYPE(Pjp) == cJU_JPLEAF6);
+ assert((JU_JPDCDPOP0(Pjp) & 0xFFFFFFFFFFFF) == (cJU_LEAF6_MAXPOP1-1));
+
+// Get the address of the Leaf
+ PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+// Extract 6 byte index Leaf to Word_t
+ j__udyCopy6toW(StageA, PLeaf, cJU_LEAF6_MAXPOP1);
+
+// Get the address of the Leaf and Value area
+ JUDYLCODE(Pjv = JL_LEAF6VALUEAREA(PLeaf, cJU_LEAF6_MAXPOP1);)
+
+// If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+ CIndex = StageA[0];
+ if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF6_MAXPOP1-1], 6))
+ {
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+// Alloc a 5 byte Index Leaf
+ PjllRaw = j__udyAllocJLL5(cJU_LEAF6_MAXPOP1, Pjpm);
+ if (PjllRaw == (Pjlb_t)NULL) return(-1); // out of memory
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy Index area into new Leaf
+ j__udyCopyWto5((uint8_t *) Pjll, StageA, cJU_LEAF6_MAXPOP1);
+#ifdef JUDYL
+// Copy Value area into new Leaf
+ Pjvnew = JL_LEAF5VALUEAREA(Pjll, cJU_LEAF6_MAXPOP1);
+ JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF6_MAXPOP1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF6_MAXPOP1, 5);)
+
+ DcdP0 = JU_JPDCDPOP0(Pjp) | (CIndex & cJU_DCDMASK(5));
+ JU_JPSETADT(Pjp, (Word_t)PjllRaw, DcdP0, cJU_JPLEAF5);
+
+ return(1);
+ }
+
+// Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+ StageJBB = StageJBBZero; // zero staged bitmap branch
+ ZEROJP(SubJPCount);
+
+// Splay the 6 byte index Leaf to 5 byte Index Leaves
+ for (ExpCnt = Start = 0, End = 1; ; End++)
+ {
+// Check if new expanse or last one
+ if ( (End == cJU_LEAF6_MAXPOP1)
+ ||
+ (JU_DIGITATSTATE(CIndex ^ StageA[End], 6))
+ )
+ {
+// Build a leaf below the previous expanse
+
+ Pjp_t PjpJP = StageJP + ExpCnt;
+ Word_t Pop1 = End - Start;
+ Word_t expanse = JU_DIGITATSTATE(CIndex, 6);
+ Word_t subexp = expanse / cJU_BITSPERSUBEXPB;
+//
+// set the bit that is the current expanse
+ JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+ StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+// count number of expanses in each subexpanse
+ SubJPCount[subexp]++;
+
+// Save byte expanse of leaf
+ StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 6);
+
+ if (Pop1 == 1) // cJU_JPIMMED_5_01
+ {
+ Word_t DcdP0;
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(5)) |
+ CIndex;
+#ifdef JUDY1
+ JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_5_01);
+#else // JUDYL
+ JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+ cJL_JPIMMED_5_01);
+#endif // JUDYL
+ }
+#ifdef JUDY1
+ else if (Pop1 <= cJ1_IMMED5_MAXPOP1)
+ {
+// cJ1_JPIMMED_5_02..3: Judy1 64
+
+// Copy to Index to JP as an immediate Leaf
+ j__udyCopyWto5(PjpJP->jp_1Index,
+ StageA + Start, Pop1);
+
+// Set pointer, type, population and Index size
+ PjpJP->jp_Type = cJ1_JPIMMED_5_02 + Pop1 - 2;
+ }
+#endif
+ else
+ {
+// cJU_JPLEAF5
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+// Get a new Leaf
+ PjllRaw = j__udyAllocJLL5(Pop1, Pjpm);
+ if (PjllRaw == (Pjll_t)NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy Indexes to new Leaf
+ j__udyCopyWto5((uint8_t *) Pjll, StageA + Start,
+ Pop1);
+
+// Copy to Values to new Leaf
+#ifdef JUDYL
+ Pjvnew = JL_LEAF5VALUEAREA(Pjll, Pop1);
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, Pop1, 5);)
+
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(6))
+ |
+ (CIndex & cJU_DCDMASK(6-1))
+ |
+ (Pop1 - 1);
+
+ JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+ cJU_JPLEAF5);
+ }
+ ExpCnt++;
+// Done?
+ if (End == cJU_LEAF6_MAXPOP1) break;
+
+// New Expanse, Start and Count
+ CIndex = StageA[End];
+ Start = End;
+ }
+ }
+
+// Now put all the Leaves below a BranchL or BranchB:
+ if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+ {
+ if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+ Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjp->jp_Type = cJU_JPBRANCH_L6;
+ }
+ else
+ {
+ if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+ == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+ }
+ return(1);
+
+} // j__udyCascade6()
+
+
+// ****************************************************************************
+// __ J U D Y C A S C A D E 7
+//
+// Cascade from a cJU_JPLEAF7 to one of the following:
+// 1. if leaf is in 1 expanse:
+// compress it into a JPLEAF6
+// 2. if leaf contains multiple expanses:
+// create linear or bitmap branch containing
+// each new expanse is either a:
+// JPIMMED_6_01 ... JPIMMED_6_02 branch
+// JPIMMED_6_01 branch
+// JPLEAF6
+
+FUNCTION int j__udyCascade7(
+ Pjp_t Pjp,
+ Pvoid_t Pjpm)
+{
+ uint8_t * PLeaf; // pointer to leaf, explicit type.
+ Word_t End, Start; // temporaries.
+ Word_t ExpCnt; // count of expanses of splay.
+ Word_t CIndex; // current Index word.
+JUDYLCODE(Pjv_t Pjv;) // value area of leaf.
+
+// Temp staging for parts(Leaves) of newly splayed leaf
+ jp_t StageJP [cJU_LEAF7_MAXPOP1]; // JPs of new leaves
+ Word_t StageA [cJU_LEAF7_MAXPOP1];
+ uint8_t StageExp [cJU_LEAF7_MAXPOP1]; // Expanses of new leaves
+ uint8_t SubJPCount[cJU_NUMSUBEXPB]; // JPs in each subexpanse
+ jbb_t StageJBB; // staged bitmap branch
+
+ assert(JU_JPTYPE(Pjp) == cJU_JPLEAF7);
+ assert(JU_JPDCDPOP0(Pjp) == (cJU_LEAF7_MAXPOP1-1));
+
+// Get the address of the Leaf
+ PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+// Extract 7 byte index Leaf to Word_t
+ j__udyCopy7toW(StageA, PLeaf, cJU_LEAF7_MAXPOP1);
+
+// Get the address of the Leaf and Value area
+ JUDYLCODE(Pjv = JL_LEAF7VALUEAREA(PLeaf, cJU_LEAF7_MAXPOP1);)
+
+// If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+ CIndex = StageA[0];
+ if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF7_MAXPOP1-1], 7))
+ {
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+// Alloc a 6 byte Index Leaf
+ PjllRaw = j__udyAllocJLL6(cJU_LEAF7_MAXPOP1, Pjpm);
+ if (PjllRaw == (Pjlb_t)NULL) return(-1); // out of memory
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy Index area into new Leaf
+ j__udyCopyWto6((uint8_t *) Pjll, StageA, cJU_LEAF7_MAXPOP1);
+#ifdef JUDYL
+// Copy Value area into new Leaf
+ Pjvnew = JL_LEAF6VALUEAREA(Pjll, cJU_LEAF7_MAXPOP1);
+ JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF7_MAXPOP1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF7_MAXPOP1, 6);)
+
+ DcdP0 = JU_JPDCDPOP0(Pjp) | (CIndex & cJU_DCDMASK(6));
+ JU_JPSETADT(Pjp, (Word_t)PjllRaw, DcdP0, cJU_JPLEAF6);
+
+ return(1);
+ }
+
+// Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+ StageJBB = StageJBBZero; // zero staged bitmap branch
+ ZEROJP(SubJPCount);
+
+// Splay the 7 byte index Leaf to 6 byte Index Leaves
+ for (ExpCnt = Start = 0, End = 1; ; End++)
+ {
+// Check if new expanse or last one
+ if ( (End == cJU_LEAF7_MAXPOP1)
+ ||
+ (JU_DIGITATSTATE(CIndex ^ StageA[End], 7))
+ )
+ {
+// Build a leaf below the previous expanse
+
+ Pjp_t PjpJP = StageJP + ExpCnt;
+ Word_t Pop1 = End - Start;
+ Word_t expanse = JU_DIGITATSTATE(CIndex, 7);
+ Word_t subexp = expanse / cJU_BITSPERSUBEXPB;
+//
+// set the bit that is the current expanse
+ JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+ StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+// count number of expanses in each subexpanse
+ SubJPCount[subexp]++;
+
+// Save byte expanse of leaf
+ StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 7);
+
+ if (Pop1 == 1) // cJU_JPIMMED_6_01
+ {
+ Word_t DcdP0;
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(6)) |
+ CIndex;
+#ifdef JUDY1
+ JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_6_01);
+#else // JUDYL
+ JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+ cJL_JPIMMED_6_01);
+#endif // JUDYL
+ }
+#ifdef JUDY1
+ else if (Pop1 == cJ1_IMMED6_MAXPOP1)
+ {
+// cJ1_JPIMMED_6_02: Judy1 64
+
+// Copy to Index to JP as an immediate Leaf
+ j__udyCopyWto6(PjpJP->jp_1Index,
+ StageA + Start, 2);
+
+// Set pointer, type, population and Index size
+ PjpJP->jp_Type = cJ1_JPIMMED_6_02;
+ }
+#endif
+ else
+ {
+// cJU_JPLEAF6
+ Word_t DcdP0;
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+// Get a new Leaf
+ PjllRaw = j__udyAllocJLL6(Pop1, Pjpm);
+ if (PjllRaw == (Pjll_t)NULL)
+ FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+ Pjll = P_JLL(PjllRaw);
+
+// Copy Indexes to new Leaf
+ j__udyCopyWto6((uint8_t *) Pjll, StageA + Start,
+ Pop1);
+#ifdef JUDYL
+// Copy to Values to new Leaf
+ Pjvnew = JL_LEAF6VALUEAREA(Pjll, Pop1);
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, Pop1, 6);)
+
+ DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(7))
+ |
+ (CIndex & cJU_DCDMASK(7-1))
+ |
+ (Pop1 - 1);
+
+ JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+ cJU_JPLEAF6);
+ }
+ ExpCnt++;
+// Done?
+ if (End == cJU_LEAF7_MAXPOP1) break;
+
+// New Expanse, Start and Count
+ CIndex = StageA[End];
+ Start = End;
+ }
+ }
+
+// Now put all the Leaves below a BranchL or BranchB:
+ if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+ {
+ if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+ Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjp->jp_Type = cJU_JPBRANCH_L7;
+ }
+ else
+ {
+ if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+ == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+ }
+ return(1);
+
+} // j__udyCascade7()
+
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// __ J U D Y C A S C A D E L
+//
+// (Compressed) cJU_LEAF3[7], cJ1_JPBRANCH_L.
+//
+// Cascade from a LEAFW (under Pjp) to one of the following:
+// 1. if LEAFW is in 1 expanse:
+// create linear branch with a JPLEAF3[7] under it
+// 2. LEAFW contains multiple expanses:
+// create linear or bitmap branch containing new expanses
+// each new expanse is either a: 32 64
+// JPIMMED_3_01 branch Y N
+// JPIMMED_7_01 branch N Y
+// JPLEAF3 Y N
+// JPLEAF7 N Y
+
+FUNCTION int j__udyCascadeL(
+ Pjp_t Pjp,
+ Pvoid_t Pjpm)
+{
+ Pjlw_t Pjlw; // leaf to work on.
+ Word_t End, Start; // temporaries.
+ Word_t ExpCnt; // count of expanses of splay.
+ Word_t CIndex; // current Index word.
+JUDYLCODE(Pjv_t Pjv;) // value area of leaf.
+
+// Temp staging for parts(Leaves) of newly splayed leaf
+ jp_t StageJP [cJU_LEAFW_MAXPOP1];
+ uint8_t StageExp[cJU_LEAFW_MAXPOP1];
+ uint8_t SubJPCount[cJU_NUMSUBEXPB]; // JPs in each subexpanse
+ jbb_t StageJBB; // staged bitmap branch
+
+// Get the address of the Leaf
+ Pjlw = P_JLW(Pjp->jp_Addr);
+
+ assert(Pjlw[0] == (cJU_LEAFW_MAXPOP1 - 1));
+
+// Get pointer to Value area of old Leaf
+ JUDYLCODE(Pjv = JL_LEAFWVALUEAREA(Pjlw, cJU_LEAFW_MAXPOP1);)
+
+ Pjlw++; // Now point to Index area
+
+// If Leaf is in 1 expanse -- first compress it (compare 1st, last & Index):
+
+ CIndex = Pjlw[0]; // also used far below
+ if (!JU_DIGITATSTATE(CIndex ^ Pjlw[cJU_LEAFW_MAXPOP1 - 1],
+ cJU_ROOTSTATE))
+ {
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+
+// Get the common expanse to all elements in Leaf
+ StageExp[0] = JU_DIGITATSTATE(CIndex, cJU_ROOTSTATE);
+
+// Alloc a 3[7] byte Index Leaf
+#ifdef JU_64BIT
+ PjllRaw = j__udyAllocJLL7(cJU_LEAFW_MAXPOP1, Pjpm);
+ if (PjllRaw == (Pjlb_t)NULL) return(-1); // out of memory
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy LEAFW to a cJU_JPLEAF7
+ j__udyCopyWto7((uint8_t *) Pjll, Pjlw, cJU_LEAFW_MAXPOP1);
+#ifdef JUDYL
+// Get the Value area of new Leaf
+ Pjvnew = JL_LEAF7VALUEAREA(Pjll, cJU_LEAFW_MAXPOP1);
+ JU_COPYMEM(Pjvnew, Pjv, cJU_LEAFW_MAXPOP1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, cJU_LEAFW_MAXPOP1, 7);)
+#else // 32 Bit
+ PjllRaw = j__udyAllocJLL3(cJU_LEAFW_MAXPOP1, Pjpm);
+ if (PjllRaw == (Pjll_t) NULL) return(-1);
+
+ Pjll = P_JLL(PjllRaw);
+
+// Copy LEAFW to a cJU_JPLEAF3
+ j__udyCopyWto3((uint8_t *) Pjll, Pjlw, cJU_LEAFW_MAXPOP1);
+#ifdef JUDYL
+// Get the Value area of new Leaf
+ Pjvnew = JL_LEAF3VALUEAREA(Pjll, cJU_LEAFW_MAXPOP1);
+ JU_COPYMEM(Pjvnew, Pjv, cJU_LEAFW_MAXPOP1);
+#endif
+ DBGCODE(JudyCheckSorted(Pjll, cJU_LEAFW_MAXPOP1, 3);)
+#endif // 32 Bit
+
+// Following not needed because cJU_DCDMASK(3[7]) is == 0
+////// StageJP[0].jp_DcdPopO |= (CIndex & cJU_DCDMASK(3[7]));
+#ifdef JU_64BIT
+ JU_JPSETADT(&(StageJP[0]), (Word_t)PjllRaw, cJU_LEAFW_MAXPOP1-1,
+ cJU_JPLEAF7);
+#else // 32BIT
+ JU_JPSETADT(&(StageJP[0]), (Word_t)PjllRaw, cJU_LEAFW_MAXPOP1-1,
+ cJU_JPLEAF3);
+#endif // 32BIT
+// Create a 1 element Linear branch
+ if (j__udyCreateBranchL(Pjp, StageJP, StageExp, 1, Pjpm) == -1)
+ return(-1);
+
+// Change the type of callers JP
+ Pjp->jp_Type = cJU_JPBRANCH_L;
+
+ return(1);
+ }
+
+// Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+ StageJBB = StageJBBZero; // zero staged bitmap branch
+ ZEROJP(SubJPCount);
+
+// Splay the 4[8] byte Index Leaf to 3[7] byte Index Leaves
+ for (ExpCnt = Start = 0, End = 1; ; End++)
+ {
+// Check if new expanse or last one
+ if ( (End == cJU_LEAFW_MAXPOP1)
+ ||
+ (JU_DIGITATSTATE(CIndex ^ Pjlw[End], cJU_ROOTSTATE))
+ )
+ {
+// Build a leaf below the previous expanse
+
+ Pjp_t PjpJP = StageJP + ExpCnt;
+ Word_t Pop1 = End - Start;
+ Word_t expanse = JU_DIGITATSTATE(CIndex, cJU_ROOTSTATE);
+ Word_t subexp = expanse / cJU_BITSPERSUBEXPB;
+//
+// set the bit that is the current expanse
+ JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+ StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+// count number of expanses in each subexpanse
+ SubJPCount[subexp]++;
+
+// Save byte expanse of leaf
+ StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex,
+ cJU_ROOTSTATE);
+
+ if (Pop1 == 1) // cJU_JPIMMED_3[7]_01
+ {
+#ifdef JU_64BIT
+#ifdef JUDY1
+ JU_JPSETADT(PjpJP, 0, CIndex, cJ1_JPIMMED_7_01);
+#else // JUDYL
+ JU_JPSETADT(PjpJP, Pjv[Start], CIndex,
+ cJL_JPIMMED_7_01);
+#endif // JUDYL
+
+#else // JU_32BIT
+#ifdef JUDY1
+ JU_JPSETADT(PjpJP, 0, CIndex, cJ1_JPIMMED_3_01);
+#else // JUDYL
+ JU_JPSETADT(PjpJP, Pjv[Start], CIndex,
+ cJL_JPIMMED_3_01);
+#endif // JUDYL
+#endif // JU_32BIT
+ }
+#ifdef JUDY1
+#ifdef JU_64BIT
+ else if (Pop1 <= cJ1_IMMED7_MAXPOP1)
+#else
+ else if (Pop1 <= cJ1_IMMED3_MAXPOP1)
+#endif
+ {
+// cJ1_JPIMMED_3_02 : Judy1 32
+// cJ1_JPIMMED_7_02 : Judy1 64
+// Copy to JP as an immediate Leaf
+#ifdef JU_64BIT
+ j__udyCopyWto7(PjpJP->jp_1Index, Pjlw+Start, 2);
+ PjpJP->jp_Type = cJ1_JPIMMED_7_02;
+#else
+ j__udyCopyWto3(PjpJP->jp_1Index, Pjlw+Start, 2);
+ PjpJP->jp_Type = cJ1_JPIMMED_3_02;
+#endif // 32 Bit
+ }
+#endif // JUDY1
+ else // Linear Leaf JPLEAF3[7]
+ {
+// cJU_JPLEAF3[7]
+ Pjll_t PjllRaw; // pointer to new leaf.
+ Pjll_t Pjll;
+ JUDYLCODE(Pjv_t Pjvnew;) // value area of new leaf.
+#ifdef JU_64BIT
+ PjllRaw = j__udyAllocJLL7(Pop1, Pjpm);
+ if (PjllRaw == (Pjll_t) NULL) return(-1);
+ Pjll = P_JLL(PjllRaw);
+
+ j__udyCopyWto7((uint8_t *) Pjll, Pjlw + Start,
+ Pop1);
+#ifdef JUDYL
+ Pjvnew = JL_LEAF7VALUEAREA(Pjll, Pop1);
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif // JUDYL
+ DBGCODE(JudyCheckSorted(Pjll, Pop1, 7);)
+#else // JU_64BIT - 32 Bit
+ PjllRaw = j__udyAllocJLL3(Pop1, Pjpm);
+ if (PjllRaw == (Pjll_t) NULL) return(-1);
+ Pjll = P_JLL(PjllRaw);
+
+ j__udyCopyWto3((uint8_t *) Pjll, Pjlw + Start,
+ Pop1);
+#ifdef JUDYL
+ Pjvnew = JL_LEAF3VALUEAREA(Pjll, Pop1);
+ JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif // JUDYL
+ DBGCODE(JudyCheckSorted(Pjll, Pop1, 3);)
+#endif // 32 Bit
+
+#ifdef JU_64BIT
+ JU_JPSETADT(PjpJP, (Word_t)PjllRaw, Pop1 - 1,
+ cJU_JPLEAF7);
+#else // JU_64BIT - 32 Bit
+ JU_JPSETADT(PjpJP, (Word_t)PjllRaw, Pop1 - 1,
+ cJU_JPLEAF3);
+#endif // 32 Bit
+ }
+ ExpCnt++;
+// Done?
+ if (End == cJU_LEAFW_MAXPOP1) break;
+
+// New Expanse, Start and Count
+ CIndex = Pjlw[End];
+ Start = End;
+ }
+ }
+
+// Now put all the Leaves below a BranchL or BranchB:
+ if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+ {
+ if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+ Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjp->jp_Type = cJU_JPBRANCH_L;
+ }
+ else
+ {
+ if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+ == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+ Pjp->jp_Type = cJU_JPBRANCH_B; // cJU_LEAFW is out of sequence
+ }
+ return(1);
+
+} // j__udyCascadeL()
diff --git a/libs/klib/judy/JudyCount.c b/libs/klib/judy/JudyCount.c
new file mode 100644
index 0000000..a8a6eb1
--- /dev/null
+++ b/libs/klib/judy/JudyCount.c
@@ -0,0 +1,1193 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy*Count() function for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DNOSMARTJBB, -DNOSMARTJBU, and/or -DNOSMARTJLB to build a
+// version with cache line optimizations deleted, for testing.
+//
+// Compile with -DSMARTMETRICS to obtain global variables containing smart
+// cache line metrics. Note: Dont turn this on simultaneously for this file
+// and JudyByCount.c because they export the same globals.
+//
+// Judy*Count() returns the "count of Indexes" (inclusive) between the two
+// specified limits (Indexes). This code is remarkably fast. It traverses the
+// "Judy array" data structure.
+//
+// This count code is the GENERIC untuned version (minimum code size). It
+// might be possible to tuned to a specific architecture to be faster.
+// However, in real applications, with a modern machine, it is expected that
+// the instruction times will be swamped by cache line fills.
+// ****************************************************************************
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+
+// define a phoney that is for sure
+
+#define cJU_LEAFW cJU_JPIMMED_CAP
+
+// Avoid duplicate symbols since this file is multi-compiled:
+
+#ifdef SMARTMETRICS
+#ifdef JUDY1
+Word_t jbb_upward = 0; // counts of directions taken:
+Word_t jbb_downward = 0;
+Word_t jbu_upward = 0;
+Word_t jbu_downward = 0;
+Word_t jlb_upward = 0;
+Word_t jlb_downward = 0;
+#else
+extern Word_t jbb_upward;
+extern Word_t jbb_downward;
+extern Word_t jbu_upward;
+extern Word_t jbu_downward;
+extern Word_t jlb_upward;
+extern Word_t jlb_downward;
+#endif
+#endif
+
+
+// FORWARD DECLARATIONS (prototypes):
+
+static Word_t j__udy1LCountSM(const Pjp_t Pjp, const Word_t Index,
+ const Pjpm_t Pjpm);
+
+// Each of Judy1 and JudyL get their own private (static) version of this
+// function:
+
+static int j__udyCountLeafB1(const Pjll_t Pjll, const Word_t Pop1,
+ const Word_t Index);
+
+// These functions are not static because they are exported to Judy*ByCount():
+//
+// TBD: Should be made static for performance reasons? And thus duplicated?
+//
+// Note: There really are two different functions, but for convenience they
+// are referred to here with a generic name.
+
+#ifdef JUDY1
+#define j__udyJPPop1 j__udy1JPPop1
+#else
+#define j__udyJPPop1 j__udyLJPPop1
+#endif
+
+Word_t j__udyJPPop1(const Pjp_t Pjp);
+
+
+// LOCAL ERROR HANDLING:
+//
+// The Judy*Count() functions are unusual because they return 0 instead of JERR
+// for an error. In this source file, define C_JERR for clarity.
+
+#define C_JERR 0
+
+
+// ****************************************************************************
+// J U D Y 1 C O U N T
+// J U D Y L C O U N T
+//
+// See the manual entry for details.
+//
+// This code is written recursively, at least at first, because thats much
+// simpler; hope its fast enough.
+
+#ifdef JUDY1
+FUNCTION Word_t Judy1Count
+#else
+FUNCTION Word_t JudyLCount
+#endif
+ (
+ Pcvoid_t PArray, // JRP to first branch/leaf in SM.
+ Word_t Index1, // starting Index.
+ Word_t Index2, // ending Index.
+ PJError_t PJError // optional, for returning error info.
+ )
+{
+ jpm_t fakejpm; // local temporary for small arrays.
+ Pjpm_t Pjpm; // top JPM or local temporary for error info.
+ jp_t fakejp; // constructed for calling j__udy1LCountSM().
+ Pjp_t Pjp; // JP to pass to j__udy1LCountSM().
+ Word_t pop1; // total for the array.
+ Word_t pop1above1; // indexes at or above Index1, inclusive.
+ Word_t pop1above2; // indexes at or above Index2, exclusive.
+ int retcode; // from Judy*First() calls.
+JUDYLCODE(PPvoid_t PPvalue); // from JudyLFirst() calls.
+
+
+// CHECK FOR SHORTCUTS:
+//
+// As documented, return C_JERR if the Judy array is empty or Index1 > Index2.
+
+ if ((PArray == (Pvoid_t) NULL) || (Index1 > Index2))
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+ return(C_JERR);
+ }
+
+// If Index1 == Index2, simply check if the specified Index is set; pass
+// through the return value from Judy1Test() or JudyLGet() with appropriate
+// translations.
+
+ if (Index1 == Index2)
+ {
+#ifdef JUDY1
+ retcode = Judy1Test(PArray, Index1, PJError);
+
+ if (retcode == JERRI) return(C_JERR); // pass through error.
+
+ if (retcode == 0)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+ return(C_JERR);
+ }
+#else
+ PPvalue = JudyLGet(PArray, Index1, PJError);
+
+ if (PPvalue == PPJERR) return(C_JERR); // pass through error.
+
+ if (PPvalue == (PPvoid_t) NULL) // Index is not set.
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+ return(C_JERR);
+ }
+#endif
+ return(1); // single index is set.
+ }
+
+
+// CHECK JRP TYPE:
+//
+// Use an if/then for speed rather than a switch, and put the most common cases
+// first.
+//
+// Note: Since even cJU_LEAFW types require counting between two Indexes,
+// prepare them here for common code below that calls j__udy1LCountSM(), rather
+// than handling them even more specially here.
+
+ if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ Pjlw_t Pjlw = P_JLW(PArray); // first word of leaf.
+ Pjpm = & fakejpm;
+ Pjp = & fakejp;
+ Pjp->jp_Addr = (Word_t) Pjlw;
+ Pjp->jp_Type = cJU_LEAFW;
+ Pjpm->jpm_Pop0 = Pjlw[0]; // from first word of leaf.
+ pop1 = Pjpm->jpm_Pop0 + 1;
+ }
+ else
+ {
+ Pjpm = P_JPM(PArray);
+ Pjp = &(Pjpm->jpm_JP);
+ pop1 = (Pjpm->jpm_Pop0) + 1; // note: can roll over to 0.
+
+#if (defined(JUDY1) && (! defined(JU_64BIT)))
+ if (pop1 == 0) // rare special case of full array:
+ {
+ Word_t count = Index2 - Index1 + 1; // can roll over again.
+
+ if (count == 0)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_FULL);
+ return(C_JERR);
+ }
+ return(count);
+ }
+#else
+ assert(pop1); // JudyL or 64-bit cannot create a full array!
+#endif
+ }
+
+
+// COUNT POP1 ABOVE INDEX1, INCLUSIVE:
+
+ assert(pop1); // just to be safe.
+
+ if (Index1 == 0) // shortcut, pop1above1 is entire population:
+ {
+ pop1above1 = pop1;
+ }
+ else // find first valid Index above Index1, if any:
+ {
+#ifdef JUDY1
+ if ((retcode = Judy1First(PArray, & Index1, PJError)) == JERRI)
+ return(C_JERR); // pass through error.
+#else
+ if ((PPvalue = JudyLFirst(PArray, & Index1, PJError)) == PPJERR)
+ return(C_JERR); // pass through error.
+
+ retcode = (PPvalue != (PPvoid_t) NULL); // found a next Index.
+#endif
+
+// If theres no Index at or above Index1, just return C_JERR (early exit):
+
+ if (retcode == 0)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+ return(C_JERR);
+ }
+
+// If a first/next Index was found, call the counting motor starting with that
+// known valid Index, meaning the return should be positive, not C_JERR except
+// in case of a real error:
+
+ if ((pop1above1 = j__udy1LCountSM(Pjp, Index1, Pjpm)) == C_JERR)
+ {
+ JU_COPY_ERRNO(PJError, Pjpm); // pass through error.
+ return(C_JERR);
+ }
+ }
+
+
+// COUNT POP1 ABOVE INDEX2, EXCLUSIVE, AND RETURN THE DIFFERENCE:
+//
+// In principle, calculate the ordinal of each Index and take the difference,
+// with caution about off-by-one errors due to the specified Indexes being set
+// or unset. In practice:
+//
+// - The ordinals computed here are inverse ordinals, that is, the populations
+// ABOVE the specified Indexes (Index1 inclusive, Index2 exclusive), so
+// subtract pop1above2 from pop1above1, rather than vice-versa.
+//
+// - Index1s result already includes a count for Index1 and/or Index2 if
+// either is set, so calculate pop1above2 exclusive of Index2.
+//
+// TBD: If Index1 and Index2 fall in the same expanse in the top-state
+// branch(es), would it be faster to walk the SM only once, to their divergence
+// point, before calling j__udy1LCountSM() or equivalent? Possibly a non-issue
+// if a top-state pop1 becomes stored with each Judy1 array. Also, consider
+// whether the first call of j__udy1LCountSM() fills the cache, for common tree
+// branches, for the second call.
+//
+// As for pop1above1, look for shortcuts for special cases when pop1above2 is
+// zero. Otherwise call the counting "motor".
+
+ assert(pop1above1); // just to be safe.
+
+ if (Index2++ == cJU_ALLONES) return(pop1above1); // Index2 at limit.
+
+#ifdef JUDY1
+ if ((retcode = Judy1First(PArray, & Index2, PJError)) == JERRI)
+ return(C_JERR);
+#else
+ if ((PPvalue = JudyLFirst(PArray, & Index2, PJError)) == PPJERR)
+ return(C_JERR);
+
+ retcode = (PPvalue != (PPvoid_t) NULL); // found a next Index.
+#endif
+ if (retcode == 0) return(pop1above1); // no Index above Index2.
+
+// Just as for Index1, j__udy1LCountSM() cannot return 0 (locally == C_JERR)
+// except in case of a real error:
+
+ if ((pop1above2 = j__udy1LCountSM(Pjp, Index2, Pjpm)) == C_JERR)
+ {
+ JU_COPY_ERRNO(PJError, Pjpm); // pass through error.
+ return(C_JERR);
+ }
+
+ if (pop1above1 == pop1above2)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+ return(C_JERR);
+ }
+
+ return(pop1above1 - pop1above2);
+
+} // Judy1Count() / JudyLCount()
+
+
+// ****************************************************************************
+// __ J U D Y 1 L C O U N T S M
+//
+// Given a pointer to a JP (with invalid jp_DcdPopO at cJU_ROOTSTATE), a known
+// valid Index, and a Pjpm for returning error info, recursively visit a Judy
+// array state machine (SM) and return the count of Indexes, including Index,
+// through the end of the Judy array at this state or below. In case of error
+// or a count of 0 (should never happen), return C_JERR with appropriate
+// JU_ERRNO in the Pjpm.
+//
+// Note: This function is not told the current state because its encoded in
+// the JP Type.
+//
+// Method: To minimize cache line fills, while studying each branch, if Index
+// resides above the midpoint of the branch (which often consists of multiple
+// cache lines), ADD the populations at or above Index; otherwise, SUBTRACT
+// from the population of the WHOLE branch (available from the JP) the
+// populations at or above Index. This is especially tricky for bitmap
+// branches.
+//
+// Note: Unlike, say, the Ins and Del walk routines, this function returns the
+// same type of returns as Judy*Count(), so it can use *_SET_ERRNO*() macros
+// the same way.
+
+FUNCTION static Word_t j__udy1LCountSM(
+const Pjp_t Pjp, // top of Judy (sub)SM.
+const Word_t Index, // count at or above this Index.
+const Pjpm_t Pjpm) // for returning error info.
+{
+ Pjbl_t Pjbl; // Pjp->jp_Addr masked and cast to types:
+ Pjbb_t Pjbb;
+ Pjbu_t Pjbu;
+ Pjll_t Pjll; // a Judy lower-level linear leaf.
+
+ Word_t digit; // next digit to decode from Index.
+ long jpnum; // JP number in a branch (base 0).
+ int offset; // index ordinal within a leaf, base 0.
+ Word_t pop1; // total population of an expanse.
+ Word_t pop1above; // to return.
+
+// Common code to check Decode bits in a JP against the equivalent portion of
+// Index; XOR together, then mask bits of interest; must be all 0:
+//
+// Note: Why does this code only assert() compliance rather than actively
+// checking for outliers? Its because Index is supposed to be valid, hence
+// always match any Dcd bits traversed.
+//
+// Note: This assertion turns out to be always true for cState = 3 on 32-bit
+// and 7 on 64-bit, but its harmless, probably removed by the compiler.
+
+#define CHECKDCD(Pjp,cState) \
+ assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cState))
+
+// Common code to prepare to handle a root-level or lower-level branch:
+// Extract a state-dependent digit from Index in a "constant" way, obtain the
+// total population for the branch in a state-dependent way, and then branch to
+// common code for multiple cases:
+//
+// For root-level branches, the state is always cJU_ROOTSTATE, and the
+// population is received in Pjpm->jpm_Pop0.
+//
+// Note: The total population is only needed in cases where the common code
+// "counts up" instead of down to minimize cache line fills. However, its
+// available cheaply, and its better to do it with a constant shift (constant
+// state value) instead of a variable shift later "when needed".
+
+#define PREPB_ROOT(Pjp,Next) \
+ digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE); \
+ pop1 = (Pjpm->jpm_Pop0) + 1; \
+ goto Next
+
+#define PREPB(Pjp,cState,Next) \
+ digit = JU_DIGITATSTATE(Index, cState); \
+ pop1 = JU_JPBRANCH_POP0(Pjp, (cState)) + 1; \
+ goto Next
+
+
+// SWITCH ON JP TYPE:
+//
+// WARNING: For run-time efficiency the following cases replicate code with
+// varying constants, rather than using common code with variable values!
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// ----------------------------------------------------------------------------
+// ROOT-STATE LEAF that starts with a Pop0 word; just count within the leaf:
+
+ case cJU_LEAFW:
+ {
+ Pjlw_t Pjlw = P_JLW(Pjp->jp_Addr); // first word of leaf.
+
+ assert((Pjpm->jpm_Pop0) + 1 == Pjlw[0] + 1); // sent correctly.
+ offset = j__udySearchLeafW(Pjlw + 1, Pjpm->jpm_Pop0 + 1, Index);
+ assert(offset >= 0); // Index must exist.
+ assert(offset < (Pjpm->jpm_Pop0) + 1); // Index be in range.
+ return((Pjpm->jpm_Pop0) + 1 - offset); // INCLUSIVE of Index.
+ }
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH; count populations in JPs in the JBL ABOVE the next digit in
+// Index, and recurse for the next digit in Index:
+//
+// Note: There are no null JPs in a JBL; watch out for pop1 == 0.
+//
+// Note: A JBL should always fit in one cache line => no need to count up
+// versus down to save cache line fills. (PREPB() sets pop1 for no reason.)
+
+ case cJU_JPBRANCH_L2: CHECKDCD(Pjp, 2); PREPB(Pjp, 2, BranchL);
+ case cJU_JPBRANCH_L3: CHECKDCD(Pjp, 3); PREPB(Pjp, 3, BranchL);
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4: CHECKDCD(Pjp, 4); PREPB(Pjp, 4, BranchL);
+ case cJU_JPBRANCH_L5: CHECKDCD(Pjp, 5); PREPB(Pjp, 5, BranchL);
+ case cJU_JPBRANCH_L6: CHECKDCD(Pjp, 6); PREPB(Pjp, 6, BranchL);
+ case cJU_JPBRANCH_L7: CHECKDCD(Pjp, 7); PREPB(Pjp, 7, BranchL);
+#endif
+ case cJU_JPBRANCH_L: PREPB_ROOT(Pjp, BranchL);
+
+// Common code (state-independent) for all cases of linear branches:
+
+BranchL:
+
+ Pjbl = P_JBL(Pjp->jp_Addr);
+ jpnum = Pjbl->jbl_NumJPs; // above last JP.
+ pop1above = 0;
+
+ while (digit < (Pjbl->jbl_Expanse[--jpnum])) // still ABOVE digit.
+ {
+ if ((pop1 = j__udyJPPop1((Pjbl->jbl_jp) + jpnum)) == cJU_ALLONES)
+ {
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+ return(C_JERR);
+ }
+
+ pop1above += pop1;
+ assert(jpnum > 0); // should find digit.
+ }
+
+ assert(digit == (Pjbl->jbl_Expanse[jpnum])); // should find digit.
+
+ pop1 = j__udy1LCountSM((Pjbl->jbl_jp) + jpnum, Index, Pjpm);
+ if (pop1 == C_JERR) return(C_JERR); // pass error up.
+
+ assert(pop1above + pop1);
+ return(pop1above + pop1);
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH; count populations in JPs in the JBB ABOVE the next digit in
+// Index, and recurse for the next digit in Index:
+//
+// Note: There are no null JPs in a JBB; watch out for pop1 == 0.
+
+ case cJU_JPBRANCH_B2: CHECKDCD(Pjp, 2); PREPB(Pjp, 2, BranchB);
+ case cJU_JPBRANCH_B3: CHECKDCD(Pjp, 3); PREPB(Pjp, 3, BranchB);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4: CHECKDCD(Pjp, 4); PREPB(Pjp, 4, BranchB);
+ case cJU_JPBRANCH_B5: CHECKDCD(Pjp, 5); PREPB(Pjp, 5, BranchB);
+ case cJU_JPBRANCH_B6: CHECKDCD(Pjp, 6); PREPB(Pjp, 6, BranchB);
+ case cJU_JPBRANCH_B7: CHECKDCD(Pjp, 7); PREPB(Pjp, 7, BranchB);
+#endif
+ case cJU_JPBRANCH_B: PREPB_ROOT(Pjp, BranchB);
+
+// Common code (state-independent) for all cases of bitmap branches:
+
+BranchB:
+ {
+ long subexp; // for stepping through layer 1 (subexpanses).
+ long findsub; // subexpanse containing Index (digit).
+ Word_t findbit; // bit representing Index (digit).
+ Word_t lowermask; // bits for indexes at or below Index.
+ Word_t jpcount; // JPs in a subexpanse.
+ Word_t clbelow; // cache lines below digits cache line.
+ Word_t clabove; // cache lines above digits cache line.
+
+ Pjbb = P_JBB(Pjp->jp_Addr);
+ findsub = digit / cJU_BITSPERSUBEXPB;
+ findbit = digit % cJU_BITSPERSUBEXPB;
+ lowermask = JU_MASKLOWERINC(JU_BITPOSMASKB(findbit));
+ clbelow = clabove = 0; // initial/default => always downward.
+
+ assert(JU_BITMAPTESTB(Pjbb, digit)); // digit must have a JP.
+ assert(findsub < cJU_NUMSUBEXPB); // falls in expected range.
+
+// Shorthand for one subexpanse in a bitmap and for one JP in a bitmap branch:
+//
+// Note: BMPJP0 exists separately to support assertions.
+
+#define BMPJP0(Subexp) (P_JP(JU_JBB_PJP(Pjbb, Subexp)))
+#define BMPJP(Subexp,JPnum) (BMPJP0(Subexp) + (JPnum))
+
+#ifndef NOSMARTJBB // enable to turn off smart code for comparison purposes.
+
+// FIGURE OUT WHICH DIRECTION CAUSES FEWER CACHE LINE FILLS; adding the pop1s
+// in JPs above Indexs JP, or subtracting the pop1s in JPs below Indexs JP.
+//
+// This is tricky because, while each set bit in the bitmap represents a JP,
+// the JPs are scattered over cJU_NUMSUBEXPB subexpanses, each of which can
+// contain JPs packed into multiple cache lines, and this code must visit every
+// JP either BELOW or ABOVE the JP for Index.
+//
+// Number of cache lines required to hold a linear list of the given number of
+// JPs, assuming the first JP is at the start of a cache line or the JPs in
+// jpcount fit wholly within a single cache line, which is ensured by
+// JudyMalloc():
+
+#define CLPERJPS(jpcount) \
+ ((((jpcount) * cJU_WORDSPERJP) + cJU_WORDSPERCL - 1) / cJU_WORDSPERCL)
+
+// Count cache lines below/above for each subexpanse:
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+ {
+ jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+
+// When at the subexpanse containing Index (digit), add cache lines
+// below/above appropriately, excluding the cache line containing the JP for
+// Index itself:
+
+ if (subexp < findsub) clbelow += CLPERJPS(jpcount);
+ else if (subexp > findsub) clabove += CLPERJPS(jpcount);
+ else // (subexp == findsub)
+ {
+ Word_t clfind; // cache line containing Index (digit).
+
+ clfind = CLPERJPS(j__udyCountBitsB(
+ JU_JBB_BITMAP(Pjbb, subexp) & lowermask));
+
+ assert(clfind > 0); // digit itself should have 1 CL.
+ clbelow += clfind - 1;
+ clabove += CLPERJPS(jpcount) - clfind;
+ }
+ }
+#endif // ! NOSMARTJBB
+
+// Note: Its impossible to get through the following "if" without setting
+// jpnum -- see some of the assertions below -- but gcc -Wall doesnt know
+// this, so preset jpnum to make it happy:
+
+ jpnum = 0;
+
+
+// COUNT POPULATION FOR A BITMAP BRANCH, in whichever direction should result
+// in fewer cache line fills:
+//
+// Note: If the remainder of Index is zero, pop1above is the pop1 of the
+// entire expanse and theres no point in recursing to lower levels; but this
+// should be so rare that its not worth checking for;
+// Judy1Count()/JudyLCount() never even calls the motor for Index == 0 (all
+// bytes).
+
+
+// COUNT UPWARD, subtracting each "below or at" JPs pop1 from the whole
+// expanses pop1:
+//
+// Note: If this causes clbelow + 1 cache line fills including JPs cache
+// line, thats OK; at worst this is the same as clabove.
+
+ if (clbelow < clabove)
+ {
+#ifdef SMARTMETRICS
+ ++jbb_upward;
+#endif
+ pop1above = pop1; // subtract JPs at/below Index.
+
+// Count JPs for which to accrue pop1s in this subexpanse:
+//
+// TBD: If JU_JBB_BITMAP is cJU_FULLBITMAPB, dont bother counting.
+
+ for (subexp = 0; subexp <= findsub; ++subexp)
+ {
+ jpcount = j__udyCountBitsB((subexp < findsub) ?
+ JU_JBB_BITMAP(Pjbb, subexp) :
+ JU_JBB_BITMAP(Pjbb, subexp) & lowermask);
+
+ // should always find findbit:
+ assert((subexp < findsub) || jpcount);
+
+// Subtract pop1s from JPs BELOW OR AT Index (digit):
+//
+// Note: The pop1 for Indexs JP itself is partially added back later at a
+// lower state.
+//
+// Note: An empty subexpanse (jpcount == 0) is handled "for free".
+//
+// Note: Must be null JP subexp pointer in empty subexpanse and non-empty in
+// non-empty subexpanse:
+
+ assert( jpcount || (BMPJP0(subexp) == (Pjp_t) NULL));
+ assert((! jpcount) || (BMPJP0(subexp) != (Pjp_t) NULL));
+
+ for (jpnum = 0; jpnum < jpcount; ++jpnum)
+ {
+ if ((pop1 = j__udyJPPop1(BMPJP(subexp, jpnum)))
+ == cJU_ALLONES)
+ {
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+ return(C_JERR);
+ }
+
+ pop1above -= pop1;
+ }
+
+ jpnum = jpcount - 1; // make correct for digit.
+ }
+ }
+
+// COUNT DOWNWARD, adding each "above" JPs pop1:
+
+ else
+ {
+ long jpcountbf; // below findbit, inclusive.
+#ifdef SMARTMETRICS
+ ++jbb_downward;
+#endif
+ pop1above = 0; // add JPs above Index.
+ jpcountbf = 0; // until subexp == findsub.
+
+// Count JPs for which to accrue pop1s in this subexpanse:
+//
+// This is more complicated than counting upward because the scan of digits
+// subexpanse must count ALL JPs, to know where to START counting down, and
+// ALSO note the offset of digits JP to know where to STOP counting down.
+
+ for (subexp = cJU_NUMSUBEXPB - 1; subexp >= findsub; --subexp)
+ {
+ jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+
+ // should always find findbit:
+ assert((subexp > findsub) || jpcount);
+
+ if (! jpcount) continue; // empty subexpanse, save time.
+
+// Count JPs below digit, inclusive:
+
+ if (subexp == findsub)
+ {
+ jpcountbf = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp)
+ & lowermask);
+ }
+
+ // should always find findbit:
+ assert((subexp > findsub) || jpcountbf);
+ assert(jpcount >= jpcountbf); // proper relationship.
+
+// Add pop1s from JPs ABOVE Index (digit):
+
+ // no null JP subexp pointers:
+ assert(BMPJP0(subexp) != (Pjp_t) NULL);
+
+ for (jpnum = jpcount - 1; jpnum >= jpcountbf; --jpnum)
+ {
+ if ((pop1 = j__udyJPPop1(BMPJP(subexp, jpnum)))
+ == cJU_ALLONES)
+ {
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+ return(C_JERR);
+ }
+
+ pop1above += pop1;
+ }
+ // jpnum is now correct for digit.
+ }
+ } // else.
+
+// Return the net population ABOVE the digits JP at this state (in this JBB)
+// plus the population AT OR ABOVE Index in the SM under the digits JP:
+
+ pop1 = j__udy1LCountSM(BMPJP(findsub, jpnum), Index, Pjpm);
+ if (pop1 == C_JERR) return(C_JERR); // pass error up.
+
+ assert(pop1above + pop1);
+ return(pop1above + pop1);
+
+ } // case.
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH; count populations in JPs in the JBU ABOVE the next
+// digit in Index, and recurse for the next digit in Index:
+//
+// Note: If the remainder of Index is zero, pop1above is the pop1 of the
+// entire expanse and theres no point in recursing to lower levels; but this
+// should be so rare that its not worth checking for;
+// Judy1Count()/JudyLCount() never even calls the motor for Index == 0 (all
+// bytes).
+
+ case cJU_JPBRANCH_U2: CHECKDCD(Pjp, 2); PREPB(Pjp, 2, BranchU);
+ case cJU_JPBRANCH_U3: CHECKDCD(Pjp, 3); PREPB(Pjp, 3, BranchU);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U4: CHECKDCD(Pjp, 4); PREPB(Pjp, 4, BranchU);
+ case cJU_JPBRANCH_U5: CHECKDCD(Pjp, 5); PREPB(Pjp, 5, BranchU);
+ case cJU_JPBRANCH_U6: CHECKDCD(Pjp, 6); PREPB(Pjp, 6, BranchU);
+ case cJU_JPBRANCH_U7: CHECKDCD(Pjp, 7); PREPB(Pjp, 7, BranchU);
+#endif
+ case cJU_JPBRANCH_U: PREPB_ROOT(Pjp, BranchU);
+
+// Common code (state-independent) for all cases of uncompressed branches:
+
+BranchU:
+ Pjbu = P_JBU(Pjp->jp_Addr);
+
+#ifndef NOSMARTJBU // enable to turn off smart code for comparison purposes.
+
+// FIGURE OUT WHICH WAY CAUSES FEWER CACHE LINE FILLS; adding the JPs above
+// Indexs JP, or subtracting the JPs below Indexs JP.
+//
+// COUNT UPWARD, subtracting the pop1 of each JP BELOW OR AT Index, from the
+// whole expanses pop1:
+
+ if (digit < (cJU_BRANCHUNUMJPS / 2))
+ {
+ pop1above = pop1; // subtract JPs below Index.
+#ifdef SMARTMETRICS
+ ++jbu_upward;
+#endif
+ for (jpnum = 0; jpnum <= digit; ++jpnum)
+ {
+ if ((Pjbu->jbu_jp[jpnum].jp_Type) <= cJU_JPNULLMAX)
+ continue; // shortcut, save a function call.
+
+ if ((pop1 = j__udyJPPop1(Pjbu->jbu_jp + jpnum))
+ == cJU_ALLONES)
+ {
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+ return(C_JERR);
+ }
+
+ pop1above -= pop1;
+ }
+ }
+
+// COUNT DOWNWARD, simply adding the pop1 of each JP ABOVE Index:
+
+ else
+#endif // NOSMARTJBU
+ {
+ assert(digit < cJU_BRANCHUNUMJPS);
+#ifdef SMARTMETRICS
+ ++jbu_downward;
+#endif
+ pop1above = 0; // add JPs above Index.
+
+ for (jpnum = cJU_BRANCHUNUMJPS - 1; jpnum > digit; --jpnum)
+ {
+ if ((Pjbu->jbu_jp[jpnum].jp_Type) <= cJU_JPNULLMAX)
+ continue; // shortcut, save a function call.
+
+ if ((pop1 = j__udyJPPop1(Pjbu->jbu_jp + jpnum))
+ == cJU_ALLONES)
+ {
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+ return(C_JERR);
+ }
+
+ pop1above += pop1;
+ }
+ }
+
+ if ((pop1 = j__udy1LCountSM(Pjbu->jbu_jp + digit, Index, Pjpm))
+ == C_JERR) return(C_JERR); // pass error up.
+
+ assert(pop1above + pop1);
+ return(pop1above + pop1);
+
+
+// ----------------------------------------------------------------------------
+// LEAF COUNT MACROS:
+//
+// LEAF*ABOVE() are common code for different JP types (linear leaves, bitmap
+// leaves, and immediates) and different leaf Index Sizes, which result in
+// calling different leaf search functions. Linear leaves get the leaf address
+// from jp_Addr and the Population from jp_DcdPopO, while immediates use Pjp
+// itself as the leaf address and get Population from jp_Type.
+
+#define LEAFLABOVE(Func) \
+ Pjll = P_JLL(Pjp->jp_Addr); \
+ pop1 = JU_JPLEAF_POP0(Pjp) + 1; \
+ LEAFABOVE(Func, Pjll, pop1)
+
+#define LEAFB1ABOVE(Func) LEAFLABOVE(Func) // different Func, otherwise same.
+
+#ifdef JUDY1
+#define IMMABOVE(Func,Pop1) \
+ Pjll = (Pjll_t) Pjp; \
+ LEAFABOVE(Func, Pjll, Pop1)
+#else
+// Note: For JudyL immediates with >= 2 Indexes, the index bytes are in a
+// different place than for Judy1:
+
+#define IMMABOVE(Func,Pop1) \
+ LEAFABOVE(Func, (Pjll_t) (Pjp->jp_LIndex), Pop1)
+#endif
+
+// For all leaf types, the population AT OR ABOVE is the total pop1 less the
+// offset of Index; and Index should always be found:
+
+#define LEAFABOVE(Func,Pjll,Pop1) \
+ offset = Func(Pjll, Pop1, Index); \
+ assert(offset >= 0); \
+ assert(offset < (Pop1)); \
+ return((Pop1) - offset)
+
+// IMMABOVE_01 handles the special case of an immediate JP with 1 index, which
+// the search functions arent used for anyway:
+//
+// The target Index should be the one in this Immediate, in which case the
+// count above (inclusive) is always 1.
+
+#define IMMABOVE_01 \
+ assert((JU_JPDCDPOP0(Pjp)) == JU_TRIMTODCDSIZE(Index)); \
+ return(1)
+
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF; search the leaf for Index; size is computed from jp_Type:
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1: LEAFLABOVE(j__udySearchLeaf1);
+#endif
+ case cJU_JPLEAF2: LEAFLABOVE(j__udySearchLeaf2);
+ case cJU_JPLEAF3: LEAFLABOVE(j__udySearchLeaf3);
+
+#ifdef JU_64BIT
+ case cJU_JPLEAF4: LEAFLABOVE(j__udySearchLeaf4);
+ case cJU_JPLEAF5: LEAFLABOVE(j__udySearchLeaf5);
+ case cJU_JPLEAF6: LEAFLABOVE(j__udySearchLeaf6);
+ case cJU_JPLEAF7: LEAFLABOVE(j__udySearchLeaf7);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF; search the leaf for Index:
+//
+// Since the bitmap describes Indexes digitally rather than linearly, this is
+// not really a search, but just a count.
+
+ case cJU_JPLEAF_B1: LEAFB1ABOVE(j__udyCountLeafB1);
+
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// Return the count of Indexes AT OR ABOVE Index, which is the total population
+// of the expanse (a constant) less the value of the undecoded digit remaining
+// in Index (its base-0 offset in the expanse), which yields an inclusive count
+// above.
+//
+// TBD: This only supports a 1-byte full expanse. Should this extract a
+// stored value for pop0 and possibly more LSBs of Index, to handle larger full
+// expanses?
+
+ case cJ1_JPFULLPOPU1:
+ return(cJU_JPFULLPOPU1_POP0 + 1 - JU_DIGITATSTATE(Index, 1));
+#endif
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+
+ case cJU_JPIMMED_1_01: IMMABOVE_01;
+ case cJU_JPIMMED_2_01: IMMABOVE_01;
+ case cJU_JPIMMED_3_01: IMMABOVE_01;
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01: IMMABOVE_01;
+ case cJU_JPIMMED_5_01: IMMABOVE_01;
+ case cJU_JPIMMED_6_01: IMMABOVE_01;
+ case cJU_JPIMMED_7_01: IMMABOVE_01;
+#endif
+
+ case cJU_JPIMMED_1_02: IMMABOVE(j__udySearchLeaf1, 2);
+ case cJU_JPIMMED_1_03: IMMABOVE(j__udySearchLeaf1, 3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04: IMMABOVE(j__udySearchLeaf1, 4);
+ case cJU_JPIMMED_1_05: IMMABOVE(j__udySearchLeaf1, 5);
+ case cJU_JPIMMED_1_06: IMMABOVE(j__udySearchLeaf1, 6);
+ case cJU_JPIMMED_1_07: IMMABOVE(j__udySearchLeaf1, 7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08: IMMABOVE(j__udySearchLeaf1, 8);
+ case cJ1_JPIMMED_1_09: IMMABOVE(j__udySearchLeaf1, 9);
+ case cJ1_JPIMMED_1_10: IMMABOVE(j__udySearchLeaf1, 10);
+ case cJ1_JPIMMED_1_11: IMMABOVE(j__udySearchLeaf1, 11);
+ case cJ1_JPIMMED_1_12: IMMABOVE(j__udySearchLeaf1, 12);
+ case cJ1_JPIMMED_1_13: IMMABOVE(j__udySearchLeaf1, 13);
+ case cJ1_JPIMMED_1_14: IMMABOVE(j__udySearchLeaf1, 14);
+ case cJ1_JPIMMED_1_15: IMMABOVE(j__udySearchLeaf1, 15);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02: IMMABOVE(j__udySearchLeaf2, 2);
+ case cJU_JPIMMED_2_03: IMMABOVE(j__udySearchLeaf2, 3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04: IMMABOVE(j__udySearchLeaf2, 4);
+ case cJ1_JPIMMED_2_05: IMMABOVE(j__udySearchLeaf2, 5);
+ case cJ1_JPIMMED_2_06: IMMABOVE(j__udySearchLeaf2, 6);
+ case cJ1_JPIMMED_2_07: IMMABOVE(j__udySearchLeaf2, 7);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02: IMMABOVE(j__udySearchLeaf3, 2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03: IMMABOVE(j__udySearchLeaf3, 3);
+ case cJ1_JPIMMED_3_04: IMMABOVE(j__udySearchLeaf3, 4);
+ case cJ1_JPIMMED_3_05: IMMABOVE(j__udySearchLeaf3, 5);
+
+ case cJ1_JPIMMED_4_02: IMMABOVE(j__udySearchLeaf4, 2);
+ case cJ1_JPIMMED_4_03: IMMABOVE(j__udySearchLeaf4, 3);
+
+ case cJ1_JPIMMED_5_02: IMMABOVE(j__udySearchLeaf5, 2);
+ case cJ1_JPIMMED_5_03: IMMABOVE(j__udySearchLeaf5, 3);
+
+ case cJ1_JPIMMED_6_02: IMMABOVE(j__udySearchLeaf6, 2);
+
+ case cJ1_JPIMMED_7_02: IMMABOVE(j__udySearchLeaf7, 2);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// OTHER CASES:
+
+ default: JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT); return(C_JERR);
+
+ } // switch on JP type
+
+ /*NOTREACHED*/
+
+} // j__udy1LCountSM()
+
+
+// ****************************************************************************
+// J U D Y C O U N T L E A F B 1
+//
+// This is a private analog of the j__udySearchLeaf*() functions for counting
+// in bitmap 1-byte leaves. Since a bitmap leaf describes Indexes digitally
+// rather than linearly, this is not really a search, but just a count of the
+// valid Indexes == set bits below or including Index, which should be valid.
+// Return the "offset" (really the ordinal), 0 .. Pop1 - 1, of Index in Pjll;
+// if Indexs bit is not set (which should never happen, so this is DEBUG-mode
+// only), return the 1s-complement equivalent (== negative offset minus 1).
+//
+// Note: The source code for this function looks identical for both Judy1 and
+// JudyL, but the JU_JLB_BITMAP macro varies.
+//
+// Note: For simpler calling, the first arg is of type Pjll_t but then cast to
+// Pjlb_t.
+
+FUNCTION static int j__udyCountLeafB1(
+const Pjll_t Pjll, // bitmap leaf, as Pjll_t for consistency.
+const Word_t Pop1, // Population of whole leaf.
+const Word_t Index) // to which to count.
+{
+ Pjlb_t Pjlb = (Pjlb_t) Pjll; // to proper type.
+ Word_t digit = Index & cJU_MASKATSTATE(1);
+ Word_t findsub = digit / cJU_BITSPERSUBEXPL;
+ Word_t findbit = digit % cJU_BITSPERSUBEXPL;
+ int count; // in leaf through Index.
+ long subexp; // for stepping through subexpanses.
+
+
+// COUNT UPWARD:
+//
+// The entire bitmap should fit in one cache line, but still try to save some
+// CPU time by counting the fewest possible number of subexpanses from the
+// bitmap.
+
+#ifndef NOSMARTJLB // enable to turn off smart code for comparison purposes.
+
+ if (findsub < (cJU_NUMSUBEXPL / 2))
+ {
+#ifdef SMARTMETRICS
+ ++jlb_upward;
+#endif
+ count = 0;
+
+ for (subexp = 0; subexp < findsub; ++subexp)
+ {
+ count += ((JU_JLB_BITMAP(Pjlb, subexp) == cJU_FULLBITMAPL) ?
+ cJU_BITSPERSUBEXPL :
+ j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp)));
+ }
+
+// This count includes findbit, which should be set, resulting in a base-1
+// offset:
+
+ count += j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, findsub)
+ & JU_MASKLOWERINC(JU_BITPOSMASKL(findbit)));
+
+ DBGCODE(if (! JU_BITMAPTESTL(Pjlb, digit)) return(~count);)
+ assert(count >= 1);
+ return(count - 1); // convert to base-0 offset.
+ }
+#endif // NOSMARTJLB
+
+
+// COUNT DOWNWARD:
+//
+// Count the valid Indexes above or at Index, and subtract from Pop1.
+
+#ifdef SMARTMETRICS
+ ++jlb_downward;
+#endif
+ count = Pop1; // base-1 for now.
+
+ for (subexp = cJU_NUMSUBEXPL - 1; subexp > findsub; --subexp)
+ {
+ count -= ((JU_JLB_BITMAP(Pjlb, subexp) == cJU_FULLBITMAPL) ?
+ cJU_BITSPERSUBEXPL :
+ j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp)));
+ }
+
+// This count includes findbit, which should be set, resulting in a base-0
+// offset:
+
+ count -= j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, findsub)
+ & JU_MASKHIGHERINC(JU_BITPOSMASKL(findbit)));
+
+ DBGCODE(if (! JU_BITMAPTESTL(Pjlb, digit)) return(~count);)
+ assert(count >= 0); // should find Index itself.
+ return(count); // is already a base-0 offset.
+
+} // j__udyCountLeafB1()
+
+
+// ****************************************************************************
+// J U D Y J P P O P 1
+//
+// This function takes any type of JP other than a root-level JP (cJU_LEAFW* or
+// cJU_JPBRANCH* with no number suffix) and extracts the Pop1 from it. In some
+// sense this is a wrapper around the JU_JP*_POP0 macros. Why write it as a
+// function instead of a complex macro containing a trinary? (See version
+// Judy1.h version 4.17.) We think its cheaper to call a function containing
+// a switch statement with "constant" cases than to do the variable
+// calculations in a trinary.
+//
+// For invalid JP Types return cJU_ALLONES. Note that this is an impossibly
+// high Pop1 for any JP below a top level branch.
+
+FUNCTION Word_t j__udyJPPop1(
+const Pjp_t Pjp) // JP to count.
+{
+ switch (JU_JPTYPE(Pjp))
+ {
+#ifdef notdef // caller should shortcut and not even call with these:
+
+ case cJU_JPNULL1:
+ case cJU_JPNULL2:
+ case cJU_JPNULL3: return(0);
+#ifdef JU_64BIT
+ case cJU_JPNULL4:
+ case cJU_JPNULL5:
+ case cJU_JPNULL6:
+ case cJU_JPNULL7: return(0);
+#endif
+#endif // notdef
+
+ case cJU_JPBRANCH_L2:
+ case cJU_JPBRANCH_B2:
+ case cJU_JPBRANCH_U2: return(JU_JPBRANCH_POP0(Pjp,2) + 1);
+
+ case cJU_JPBRANCH_L3:
+ case cJU_JPBRANCH_B3:
+ case cJU_JPBRANCH_U3: return(JU_JPBRANCH_POP0(Pjp,3) + 1);
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4:
+ case cJU_JPBRANCH_B4:
+ case cJU_JPBRANCH_U4: return(JU_JPBRANCH_POP0(Pjp,4) + 1);
+
+ case cJU_JPBRANCH_L5:
+ case cJU_JPBRANCH_B5:
+ case cJU_JPBRANCH_U5: return(JU_JPBRANCH_POP0(Pjp,5) + 1);
+
+ case cJU_JPBRANCH_L6:
+ case cJU_JPBRANCH_B6:
+ case cJU_JPBRANCH_U6: return(JU_JPBRANCH_POP0(Pjp,6) + 1);
+
+ case cJU_JPBRANCH_L7:
+ case cJU_JPBRANCH_B7:
+ case cJU_JPBRANCH_U7: return(JU_JPBRANCH_POP0(Pjp,7) + 1);
+#endif
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1:
+#endif
+ case cJU_JPLEAF2:
+ case cJU_JPLEAF3:
+#ifdef JU_64BIT
+ case cJU_JPLEAF4:
+ case cJU_JPLEAF5:
+ case cJU_JPLEAF6:
+ case cJU_JPLEAF7:
+#endif
+ case cJU_JPLEAF_B1: return(JU_JPLEAF_POP0(Pjp) + 1);
+
+#ifdef JUDY1
+ case cJ1_JPFULLPOPU1: return(cJU_JPFULLPOPU1_POP0 + 1);
+#endif
+
+ case cJU_JPIMMED_1_01:
+ case cJU_JPIMMED_2_01:
+ case cJU_JPIMMED_3_01: return(1);
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01:
+ case cJU_JPIMMED_5_01:
+ case cJU_JPIMMED_6_01:
+ case cJU_JPIMMED_7_01: return(1);
+#endif
+
+ case cJU_JPIMMED_1_02: return(2);
+ case cJU_JPIMMED_1_03: return(3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04: return(4);
+ case cJU_JPIMMED_1_05: return(5);
+ case cJU_JPIMMED_1_06: return(6);
+ case cJU_JPIMMED_1_07: return(7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08: return(8);
+ case cJ1_JPIMMED_1_09: return(9);
+ case cJ1_JPIMMED_1_10: return(10);
+ case cJ1_JPIMMED_1_11: return(11);
+ case cJ1_JPIMMED_1_12: return(12);
+ case cJ1_JPIMMED_1_13: return(13);
+ case cJ1_JPIMMED_1_14: return(14);
+ case cJ1_JPIMMED_1_15: return(15);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02: return(2);
+ case cJU_JPIMMED_2_03: return(3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04: return(4);
+ case cJ1_JPIMMED_2_05: return(5);
+ case cJ1_JPIMMED_2_06: return(6);
+ case cJ1_JPIMMED_2_07: return(7);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02: return(2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03: return(3);
+ case cJ1_JPIMMED_3_04: return(4);
+ case cJ1_JPIMMED_3_05: return(5);
+
+ case cJ1_JPIMMED_4_02: return(2);
+ case cJ1_JPIMMED_4_03: return(3);
+
+ case cJ1_JPIMMED_5_02: return(2);
+ case cJ1_JPIMMED_5_03: return(3);
+
+ case cJ1_JPIMMED_6_02: return(2);
+
+ case cJ1_JPIMMED_7_02: return(2);
+#endif
+
+ default: return(cJU_ALLONES);
+ }
+
+ /*NOTREACHED*/
+
+} // j__udyJPPop1()
diff --git a/libs/klib/judy/JudyCreateBranch.c b/libs/klib/judy/JudyCreateBranch.c
new file mode 100644
index 0000000..1234c31
--- /dev/null
+++ b/libs/klib/judy/JudyCreateBranch.c
@@ -0,0 +1,312 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Branch creation functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+
+// ****************************************************************************
+// J U D Y C R E A T E B R A N C H L
+//
+// Build a BranchL from an array of JPs and associated 1 byte digits
+// (expanses). Return with Pjp pointing to the BranchL. Caller must
+// deallocate passed arrays, if necessary.
+//
+// We have no idea what kind of BranchL it is, so caller must set the jp_Type.
+//
+// Return -1 if error (details in Pjpm), otherwise return 1.
+
+FUNCTION int j__udyCreateBranchL(
+ Pjp_t Pjp, // Build JPs from this place
+ Pjp_t PJPs, // Array of JPs to put into Bitmap branch
+ uint8_t Exp[], // Array of expanses to put into bitmap
+ Word_t ExpCnt, // Number of above JPs and Expanses
+ Pvoid_t Pjpm)
+{
+ Pjbl_t PjblRaw; // pointer to linear branch.
+ Pjbl_t Pjbl;
+
+ assert(ExpCnt <= cJU_BRANCHLMAXJPS);
+
+ PjblRaw = j__udyAllocJBL(Pjpm);
+ if (PjblRaw == (Pjbl_t) NULL) return(-1);
+ Pjbl = P_JBL(PjblRaw);
+
+// Build a Linear Branch
+ Pjbl->jbl_NumJPs = ExpCnt;
+
+// Copy from the Linear branch from splayed leaves
+ JU_COPYMEM(Pjbl->jbl_Expanse, Exp, ExpCnt);
+ JU_COPYMEM(Pjbl->jbl_jp, PJPs, ExpCnt);
+
+// Pass back new pointer to the Linear branch in JP
+ Pjp->jp_Addr = (Word_t) PjblRaw;
+
+ return(1);
+
+} // j__udyCreateBranchL()
+
+
+// ****************************************************************************
+// J U D Y C R E A T E B R A N C H B
+//
+// Build a BranchB from an array of JPs and associated 1 byte digits
+// (expanses). Return with Pjp pointing to the BranchB. Caller must
+// deallocate passed arrays, if necessary.
+//
+// We have no idea what kind of BranchB it is, so caller must set the jp_Type.
+//
+// Return -1 if error (details in Pjpm), otherwise return 1.
+
+FUNCTION int j__udyCreateBranchB(
+ Pjp_t Pjp, // Build JPs from this place
+ Pjp_t PJPs, // Array of JPs to put into Bitmap branch
+ uint8_t Exp[], // Array of expanses to put into bitmap
+ Word_t ExpCnt, // Number of above JPs and Expanses
+ Pvoid_t Pjpm)
+{
+ Pjbb_t PjbbRaw; // pointer to bitmap branch.
+ Pjbb_t Pjbb;
+ Word_t ii, jj; // Temps
+ uint8_t CurrSubExp; // Current sub expanse for BM
+
+// This assertion says the number of populated subexpanses is not too large.
+// This function is only called when a BranchL overflows to a BranchB or when a
+// cascade occurs, meaning a leaf overflows. Either way ExpCnt cant be very
+// large, in fact a lot smaller than cJU_BRANCHBMAXJPS. (Otherwise a BranchU
+// would be used.) Popping this assertion means something (unspecified) has
+// gone very wrong, or else Judys design criteria have changed, although in
+// fact there should be no HARM in creating a BranchB with higher actual
+// fanout.
+
+ assert(ExpCnt <= cJU_BRANCHBMAXJPS);
+
+// Get memory for a Bitmap branch
+ PjbbRaw = j__udyAllocJBB(Pjpm);
+ if (PjbbRaw == (Pjbb_t) NULL) return(-1);
+ Pjbb = P_JBB(PjbbRaw);
+
+// Get 1st "sub" expanse (0..7) of bitmap branch
+ CurrSubExp = Exp[0] / cJU_BITSPERSUBEXPB;
+
+// Index thru all 1 byte sized expanses:
+
+ for (jj = ii = 0; ii <= ExpCnt; ii++)
+ {
+ Word_t SubExp; // Cannot be a uint8_t
+
+// Make sure we cover the last one
+ if (ii == ExpCnt)
+ {
+ SubExp = cJU_ALLONES; // Force last one
+ }
+ else
+ {
+// Calculate the "sub" expanse of the byte expanse
+ SubExp = Exp[ii] / cJU_BITSPERSUBEXPB; // Bits 5..7.
+
+// Set the bit that represents the expanse in Exp[]
+ JU_JBB_BITMAP(Pjbb, SubExp) |= JU_BITPOSMASKB(Exp[ii]);
+ }
+// Check if a new "sub" expanse range needed
+ if (SubExp != CurrSubExp)
+ {
+// Get number of JPs in this sub expanse
+ Word_t NumJP = ii - jj;
+ Pjp_t PjpRaw;
+ Pjp_t Pjp;
+
+ PjpRaw = j__udyAllocJBBJP(NumJP, Pjpm);
+ Pjp = P_JP(PjpRaw);
+
+ if (PjpRaw == (Pjp_t) NULL) // out of memory.
+ {
+
+// Free any previous allocations:
+
+ while(CurrSubExp--)
+ {
+ NumJP = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb,
+ CurrSubExp));
+ if (NumJP)
+ {
+ j__udyFreeJBBJP(JU_JBB_PJP(Pjbb,
+ CurrSubExp), NumJP, Pjpm);
+ }
+ }
+ j__udyFreeJBB(PjbbRaw, Pjpm);
+ return(-1);
+ }
+
+// Place the array of JPs in bitmap branch:
+
+ JU_JBB_PJP(Pjbb, CurrSubExp) = PjpRaw;
+
+// Copy the JPs to new leaf:
+
+ JU_COPYMEM(Pjp, PJPs + jj, NumJP);
+
+// On to the next bitmap branch "sub" expanse:
+
+ jj = ii;
+ CurrSubExp = SubExp;
+ }
+ } // for each 1-byte expanse
+
+// Pass back some of the JP to the new Bitmap branch:
+
+ Pjp->jp_Addr = (Word_t) PjbbRaw;
+
+ return(1);
+
+} // j__udyCreateBranchB()
+
+
+// ****************************************************************************
+// J U D Y C R E A T E B R A N C H U
+//
+// Build a BranchU from a BranchB. Return with Pjp pointing to the BranchU.
+// Free the BranchB and its JP subarrays.
+//
+// Return -1 if error (details in Pjpm), otherwise return 1.
+
+FUNCTION int j__udyCreateBranchU(
+ Pjp_t Pjp,
+ Pvoid_t Pjpm)
+{
+ jp_t JPNull;
+ Pjbu_t PjbuRaw;
+ Pjbu_t Pjbu;
+ Pjbb_t PjbbRaw;
+ Pjbb_t Pjbb;
+ Word_t ii, jj;
+ BITMAPB_t BitMap;
+ Pjp_t PDstJP;
+#ifdef JU_STAGED_EXP
+ jbu_t BranchU; // Staged uncompressed branch
+#else
+
+// Allocate memory for a BranchU:
+
+ PjbuRaw = j__udyAllocJBU(Pjpm);
+ if (PjbuRaw == (Pjbu_t) NULL) return(-1);
+ Pjbu = P_JBU(PjbuRaw);
+#endif
+ JU_JPSETADT(&JPNull, 0, 0, JU_JPTYPE(Pjp) - cJU_JPBRANCH_B2 + cJU_JPNULL1);
+
+// Get the pointer to the BranchB:
+
+ PjbbRaw = (Pjbb_t) (Pjp->jp_Addr);
+ Pjbb = P_JBB(PjbbRaw);
+
+// Set the pointer to the Uncompressed branch
+#ifdef JU_STAGED_EXP
+ PDstJP = BranchU.jbu_jp;
+#else
+ PDstJP = Pjbu->jbu_jp;
+#endif
+ for (ii = 0; ii < cJU_NUMSUBEXPB; ii++)
+ {
+ Pjp_t PjpA;
+ Pjp_t PjpB;
+
+ PjpB = PjpA = P_JP(JU_JBB_PJP(Pjbb, ii));
+
+// Get the bitmap for this subexpanse
+ BitMap = JU_JBB_BITMAP(Pjbb, ii);
+
+// NULL empty subexpanses
+ if (BitMap == 0)
+ {
+// But, fill with NULLs
+ for (jj = 0; jj < cJU_BITSPERSUBEXPB; jj++)
+ {
+ PDstJP[jj] = JPNull;
+ }
+ PDstJP += cJU_BITSPERSUBEXPB;
+ continue;
+ }
+// Check if Uncompressed subexpanse
+ if (BitMap == cJU_FULLBITMAPB)
+ {
+// Copy subexpanse to the Uncompressed branch intact
+ JU_COPYMEM(PDstJP, PjpA, cJU_BITSPERSUBEXPB);
+
+// Bump to next subexpanse
+ PDstJP += cJU_BITSPERSUBEXPB;
+
+// Set length of subexpanse
+ jj = cJU_BITSPERSUBEXPB;
+ }
+ else
+ {
+ for (jj = 0; jj < cJU_BITSPERSUBEXPB; jj++)
+ {
+// Copy JP or NULLJP depending on bit
+ if (BitMap & 1) { *PDstJP = *PjpA++; }
+ else { *PDstJP = JPNull; }
+
+ PDstJP++; // advance to next JP
+ BitMap >>= 1;
+ }
+ jj = PjpA - PjpB;
+ }
+
+// Free the subexpanse:
+
+ j__udyFreeJBBJP(JU_JBB_PJP(Pjbb, ii), jj, Pjpm);
+
+ } // for each JP in BranchU
+
+#ifdef JU_STAGED_EXP
+
+// Allocate memory for a BranchU:
+
+ PjbuRaw = j__udyAllocJBU(Pjpm);
+ if (PjbuRaw == (Pjbu_t) NULL) return(-1);
+ Pjbu = P_JBU(PjbuRaw);
+
+// Copy staged branch to newly allocated branch:
+//
+// TBD: I think this code is broken.
+
+ *Pjbu = BranchU;
+
+#endif // JU_STAGED_EXP
+
+// Finally free the BranchB and put the BranchU in its place:
+
+ j__udyFreeJBB(PjbbRaw, Pjpm);
+
+ Pjp->jp_Addr = (Word_t) PjbuRaw;
+ Pjp->jp_Type += cJU_JPBRANCH_U - cJU_JPBRANCH_B;
+
+ return(1);
+
+} // j__udyCreateBranchU()
diff --git a/libs/klib/judy/JudyDecascade.c b/libs/klib/judy/JudyDecascade.c
new file mode 100644
index 0000000..da625bc
--- /dev/null
+++ b/libs/klib/judy/JudyDecascade.c
@@ -0,0 +1,1204 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// "Decascade" support functions for JudyDel.c: These functions convert
+// smaller-index-size leaves to larger-index-size leaves, and also, bitmap
+// leaves (LeafB1s) to Leaf1s, and some types of branches to smaller branches
+// at the same index size. Some "decascading" occurs explicitly in JudyDel.c,
+// but rare or large subroutines appear as functions here, and the overhead to
+// call them is negligible.
+//
+// Compile with one of -DJUDY1 or -DJUDYL. Note: Function names are converted
+// to Judy1 or JudyL specific values by external #defines.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#endif
+#ifdef JUDYL
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+DBGCODE(extern void JudyCheckSorted(Pjll_t Pjll, Word_t Pop1, long IndexSize);)
+
+
+// ****************************************************************************
+// __ J U D Y C O P Y 2 T O 3
+//
+// Copy one or more 2-byte Indexes to a series of 3-byte Indexes.
+
+FUNCTION static void j__udyCopy2to3(
+ uint8_t * PDest, // to where to copy 3-byte Indexes.
+ uint16_t * PSrc, // from where to copy 2-byte indexes.
+ Word_t Pop1, // number of Indexes to copy.
+ Word_t MSByte) // most-significant byte, prefix to each Index.
+{
+ Word_t Temp; // for building 3-byte Index.
+
+ assert(Pop1);
+
+ do {
+ Temp = MSByte | *PSrc++;
+ JU_COPY3_LONG_TO_PINDEX(PDest, Temp);
+ PDest += 3;
+ } while (--Pop1);
+
+} // j__udyCopy2to3()
+
+
+#ifdef JU_64BIT
+
+// ****************************************************************************
+// __ J U D Y C O P Y 3 T O 4
+//
+// Copy one or more 3-byte Indexes to a series of 4-byte Indexes.
+
+FUNCTION static void j__udyCopy3to4(
+ uint32_t * PDest, // to where to copy 4-byte Indexes.
+ uint8_t * PSrc, // from where to copy 3-byte indexes.
+ Word_t Pop1, // number of Indexes to copy.
+ Word_t MSByte) // most-significant byte, prefix to each Index.
+{
+ Word_t Temp; // for building 4-byte Index.
+
+ assert(Pop1);
+
+ do {
+ JU_COPY3_PINDEX_TO_LONG(Temp, PSrc);
+ Temp |= MSByte;
+ PSrc += 3;
+ *PDest++ = Temp; // truncates to uint32_t.
+ } while (--Pop1);
+
+} // j__udyCopy3to4()
+
+
+// ****************************************************************************
+// __ J U D Y C O P Y 4 T O 5
+//
+// Copy one or more 4-byte Indexes to a series of 5-byte Indexes.
+
+FUNCTION static void j__udyCopy4to5(
+ uint8_t * PDest, // to where to copy 4-byte Indexes.
+ uint32_t * PSrc, // from where to copy 4-byte indexes.
+ Word_t Pop1, // number of Indexes to copy.
+ Word_t MSByte) // most-significant byte, prefix to each Index.
+{
+ Word_t Temp; // for building 5-byte Index.
+
+ assert(Pop1);
+
+ do {
+ Temp = MSByte | *PSrc++;
+ JU_COPY5_LONG_TO_PINDEX(PDest, Temp);
+ PDest += 5;
+ } while (--Pop1);
+
+} // j__udyCopy4to5()
+
+
+// ****************************************************************************
+// __ J U D Y C O P Y 5 T O 6
+//
+// Copy one or more 5-byte Indexes to a series of 6-byte Indexes.
+
+FUNCTION static void j__udyCopy5to6(
+ uint8_t * PDest, // to where to copy 6-byte Indexes.
+ uint8_t * PSrc, // from where to copy 5-byte indexes.
+ Word_t Pop1, // number of Indexes to copy.
+ Word_t MSByte) // most-significant byte, prefix to each Index.
+{
+ Word_t Temp; // for building 6-byte Index.
+
+ assert(Pop1);
+
+ do {
+ JU_COPY5_PINDEX_TO_LONG(Temp, PSrc);
+ Temp |= MSByte;
+ JU_COPY6_LONG_TO_PINDEX(PDest, Temp);
+ PSrc += 5;
+ PDest += 6;
+ } while (--Pop1);
+
+} // j__udyCopy5to6()
+
+
+// ****************************************************************************
+// __ J U D Y C O P Y 6 T O 7
+//
+// Copy one or more 6-byte Indexes to a series of 7-byte Indexes.
+
+FUNCTION static void j__udyCopy6to7(
+ uint8_t * PDest, // to where to copy 6-byte Indexes.
+ uint8_t * PSrc, // from where to copy 5-byte indexes.
+ Word_t Pop1, // number of Indexes to copy.
+ Word_t MSByte) // most-significant byte, prefix to each Index.
+{
+ Word_t Temp; // for building 6-byte Index.
+
+ assert(Pop1);
+
+ do {
+ JU_COPY6_PINDEX_TO_LONG(Temp, PSrc);
+ Temp |= MSByte;
+ JU_COPY7_LONG_TO_PINDEX(PDest, Temp);
+ PSrc += 6;
+ PDest += 7;
+ } while (--Pop1);
+
+} // j__udyCopy6to7()
+
+#endif // JU_64BIT
+
+
+#ifndef JU_64BIT // 32-bit
+
+// ****************************************************************************
+// __ J U D Y C O P Y 3 T O W
+//
+// Copy one or more 3-byte Indexes to a series of longs (words, always 4-byte).
+
+FUNCTION static void j__udyCopy3toW(
+ PWord_t PDest, // to where to copy full-word Indexes.
+ uint8_t * PSrc, // from where to copy 3-byte indexes.
+ Word_t Pop1, // number of Indexes to copy.
+ Word_t MSByte) // most-significant byte, prefix to each Index.
+{
+ assert(Pop1);
+
+ do {
+ JU_COPY3_PINDEX_TO_LONG(*PDest, PSrc);
+ *PDest++ |= MSByte;
+ PSrc += 3;
+ } while (--Pop1);
+
+} // j__udyCopy3toW()
+
+
+#else // JU_64BIT
+
+// ****************************************************************************
+// __ J U D Y C O P Y 7 T O W
+//
+// Copy one or more 7-byte Indexes to a series of longs (words, always 8-byte).
+
+FUNCTION static void j__udyCopy7toW(
+ PWord_t PDest, // to where to copy full-word Indexes.
+ uint8_t * PSrc, // from where to copy 7-byte indexes.
+ Word_t Pop1, // number of Indexes to copy.
+ Word_t MSByte) // most-significant byte, prefix to each Index.
+{
+ assert(Pop1);
+
+ do {
+ JU_COPY7_PINDEX_TO_LONG(*PDest, PSrc);
+ *PDest++ |= MSByte;
+ PSrc += 7;
+ } while (--Pop1);
+
+} // j__udyCopy7toW()
+
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// __ J U D Y B R A N C H B T O B R A N C H L
+//
+// When a BranchB shrinks to have few enough JPs, call this function to convert
+// it to a BranchL. Return 1 for success, or -1 for failure (with details in
+// Pjpm).
+
+FUNCTION int j__udyBranchBToBranchL(
+ Pjp_t Pjp, // points to BranchB to shrink.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Pjbb_t PjbbRaw; // old BranchB to shrink.
+ Pjbb_t Pjbb;
+ Pjbl_t PjblRaw; // new BranchL to create.
+ Pjbl_t Pjbl;
+ Word_t Digit; // in BranchB.
+ Word_t NumJPs; // non-null JPs in BranchB.
+ uint8_t Expanse[cJU_BRANCHLMAXJPS]; // for building jbl_Expanse[].
+ Pjp_t Pjpjbl; // current JP in BranchL.
+ Word_t SubExp; // in BranchB.
+
+ assert(JU_JPTYPE(Pjp) >= cJU_JPBRANCH_B2);
+ assert(JU_JPTYPE(Pjp) <= cJU_JPBRANCH_B);
+
+ PjbbRaw = (Pjbb_t) (Pjp->jp_Addr);
+ Pjbb = P_JBB(PjbbRaw);
+
+// Copy 1-byte subexpanse digits from BranchB to temporary buffer for BranchL,
+// for each bit set in the BranchB:
+//
+// TBD: The following supports variable-sized linear branches, but they are no
+// longer variable; this could be simplified to save the copying.
+//
+// TBD: Since cJU_BRANCHLMAXJP == 7 now, and cJU_BRANCHUNUMJPS == 256, the
+// following might be inefficient; is there a faster way to do it? At least
+// skip wholly empty subexpanses?
+
+ for (NumJPs = Digit = 0; Digit < cJU_BRANCHUNUMJPS; ++Digit)
+ {
+ if (JU_BITMAPTESTB(Pjbb, Digit))
+ {
+ Expanse[NumJPs++] = Digit;
+ assert(NumJPs <= cJU_BRANCHLMAXJPS); // required of caller.
+ }
+ }
+
+// Allocate and populate the BranchL:
+
+ if ((PjblRaw = j__udyAllocJBL(Pjpm)) == (Pjbl_t) NULL) return(-1);
+ Pjbl = P_JBL(PjblRaw);
+
+ JU_COPYMEM(Pjbl->jbl_Expanse, Expanse, NumJPs);
+
+ Pjbl->jbl_NumJPs = NumJPs;
+ DBGCODE(JudyCheckSorted((Pjll_t) (Pjbl->jbl_Expanse), NumJPs, 1);)
+
+// Copy JPs from each BranchB subexpanse subarray:
+
+ Pjpjbl = P_JP(Pjbl->jbl_jp); // start at first JP in array.
+
+ for (SubExp = 0; SubExp < cJU_NUMSUBEXPB; ++SubExp)
+ {
+ Pjp_t PjpRaw = JU_JBB_PJP(Pjbb, SubExp); // current Pjp.
+ Pjp_t Pjp;
+
+ if (PjpRaw == (Pjp_t) NULL) continue; // skip empty subexpanse.
+ Pjp = P_JP(PjpRaw);
+
+ NumJPs = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, SubExp));
+ assert(NumJPs);
+ JU_COPYMEM(Pjpjbl, Pjp, NumJPs); // one subarray at a time.
+
+ Pjpjbl += NumJPs;
+ j__udyFreeJBBJP(PjpRaw, NumJPs, Pjpm); // subarray.
+ }
+ j__udyFreeJBB(PjbbRaw, Pjpm); // BranchB itself.
+
+// Finish up: Calculate new JP type (same index size = level in new class),
+// and tie new BranchB into parent JP:
+
+ Pjp->jp_Type += cJU_JPBRANCH_L - cJU_JPBRANCH_B;
+ Pjp->jp_Addr = (Word_t) PjblRaw;
+
+ return(1);
+
+} // j__udyBranchBToBranchL()
+
+
+#ifdef notdef
+
+// ****************************************************************************
+// __ J U D Y B R A N C H U T O B R A N C H B
+//
+// When a BranchU shrinks to need little enough memory, call this function to
+// convert it to a BranchB to save memory (at the cost of some speed). Return
+// 1 for success, or -1 for failure (with details in Pjpm).
+//
+// TBD: Fill out if/when needed. Not currently used in JudyDel.c for reasons
+// explained there.
+
+FUNCTION int j__udyBranchUToBranchB(
+ Pjp_t Pjp, // points to BranchU to shrink.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ assert(FALSE);
+ return(1);
+}
+#endif // notdef
+
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+// ****************************************************************************
+// __ J U D Y L E A F B 1 T O L E A F 1
+//
+// Shrink a bitmap leaf (cJU_LEAFB1) to linear leaf (cJU_JPLEAF1).
+// Return 1 for success, or -1 for failure (with details in Pjpm).
+//
+// Note: This function is different than the other JudyLeaf*ToLeaf*()
+// functions because it receives a Pjp, not just a leaf, and handles its own
+// allocation and free, in order to allow the caller to continue with a LeafB1
+// if allocation fails.
+
+FUNCTION int j__udyLeafB1ToLeaf1(
+ Pjp_t Pjp, // points to LeafB1 to shrink.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Pjlb_t PjlbRaw; // bitmap in old leaf.
+ Pjlb_t Pjlb;
+ Pjll_t PjllRaw; // new Leaf1.
+ uint8_t * Pleaf1; // Leaf1 pointer type.
+ Word_t Digit; // in LeafB1 bitmap.
+#ifdef JUDYL
+ Pjv_t PjvNew; // value area in new Leaf1.
+ Word_t Pop1;
+ Word_t SubExp;
+#endif
+
+ assert(JU_JPTYPE(Pjp) == cJU_JPLEAF_B1);
+ assert(((JU_JPDCDPOP0(Pjp) & 0xFF) + 1) == cJU_LEAF1_MAXPOP1);
+
+// Allocate JPLEAF1 and prepare pointers:
+
+ if ((PjllRaw = j__udyAllocJLL1(cJU_LEAF1_MAXPOP1, Pjpm)) == 0)
+ return(-1);
+
+ Pleaf1 = (uint8_t *) P_JLL(PjllRaw);
+ PjlbRaw = (Pjlb_t) (Pjp->jp_Addr);
+ Pjlb = P_JLB(PjlbRaw);
+ JUDYLCODE(PjvNew = JL_LEAF1VALUEAREA(Pleaf1, cJL_LEAF1_MAXPOP1);)
+
+// Copy 1-byte indexes from old LeafB1 to new Leaf1:
+
+ for (Digit = 0; Digit < cJU_BRANCHUNUMJPS; ++Digit)
+ if (JU_BITMAPTESTL(Pjlb, Digit))
+ *Pleaf1++ = Digit;
+
+#ifdef JUDYL
+
+// Copy all old-LeafB1 value areas from value subarrays to new Leaf1:
+
+ for (SubExp = 0; SubExp < cJU_NUMSUBEXPL; ++SubExp)
+ {
+ Pjv_t PjvRaw = JL_JLB_PVALUE(Pjlb, SubExp);
+ Pjv_t Pjv = P_JV(PjvRaw);
+
+ if (Pjv == (Pjv_t) NULL) continue; // skip empty subarray.
+
+ Pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, SubExp)); // subarray.
+ assert(Pop1);
+
+ JU_COPYMEM(PjvNew, Pjv, Pop1); // copy value areas.
+ j__udyLFreeJV(PjvRaw, Pop1, Pjpm);
+ PjvNew += Pop1; // advance through new.
+ }
+
+ assert((((Word_t) Pleaf1) - (Word_t) P_JLL(PjllRaw))
+ == (PjvNew - JL_LEAF1VALUEAREA(P_JLL(PjllRaw), cJL_LEAF1_MAXPOP1)));
+#endif // JUDYL
+
+ DBGCODE(JudyCheckSorted((Pjll_t) P_JLL(PjllRaw),
+ (((Word_t) Pleaf1) - (Word_t) P_JLL(PjllRaw)), 1);)
+
+// Finish up: Free the old LeafB1 and plug the new Leaf1 into the JP:
+//
+// Note: jp_DcdPopO does not change here.
+
+ j__udyFreeJLB1(PjlbRaw, Pjpm);
+
+ Pjp->jp_Addr = (Word_t) PjllRaw;
+ Pjp->jp_Type = cJU_JPLEAF1;
+
+ return(1);
+
+} // j__udyLeafB1ToLeaf1()
+
+#endif // (JUDYL || (! JU_64BIT))
+
+
+// ****************************************************************************
+// __ J U D Y L E A F 1 T O L E A F 2
+//
+// Copy 1-byte Indexes from a LeafB1 or Leaf1 to 2-byte Indexes in a Leaf2.
+// Pjp MUST be one of: cJU_JPLEAF_B1, cJU_JPLEAF1, or cJU_JPIMMED_1_*.
+// Return number of Indexes copied.
+//
+// TBD: In this and all following functions, the caller should already be able
+// to compute the Pop1 return value, so why return it?
+
+FUNCTION Word_t j__udyLeaf1ToLeaf2(
+ uint16_t * PLeaf2, // destination uint16_t * Index portion of leaf.
+#ifdef JUDYL
+ Pjv_t Pjv2, // destination value part of leaf.
+#endif
+ Pjp_t Pjp, // 1-byte-index object from which to copy.
+ Word_t MSByte, // most-significant byte, prefix to each Index.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Word_t Pop1; // Indexes in leaf.
+ Word_t Offset; // in linear leaf list.
+JUDYLCODE(Pjv_t Pjv1Raw;) // source object value area.
+JUDYLCODE(Pjv_t Pjv1;)
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// JPLEAF_B1:
+
+ case cJU_JPLEAF_B1:
+ {
+ Pjlb_t Pjlb = P_JLB(Pjp->jp_Addr);
+ Word_t Digit; // in LeafB1 bitmap.
+ JUDYLCODE(Word_t SubExp;) // in LeafB1.
+
+ Pop1 = JU_JPBRANCH_POP0(Pjp, 1) + 1; assert(Pop1);
+
+// Copy 1-byte indexes from old LeafB1 to new Leaf2, including splicing in
+// the missing MSByte needed in the Leaf2:
+
+ for (Digit = 0; Digit < cJU_BRANCHUNUMJPS; ++Digit)
+ if (JU_BITMAPTESTL(Pjlb, Digit))
+ *PLeaf2++ = MSByte | Digit;
+
+#ifdef JUDYL
+
+// Copy all old-LeafB1 value areas from value subarrays to new Leaf2:
+
+ for (SubExp = 0; SubExp < cJU_NUMSUBEXPL; ++SubExp)
+ {
+ Word_t SubExpPop1;
+
+ Pjv1Raw = JL_JLB_PVALUE(Pjlb, SubExp);
+ if (Pjv1Raw == (Pjv_t) NULL) continue; // skip empty.
+ Pjv1 = P_JV(Pjv1Raw);
+
+ SubExpPop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, SubExp));
+ assert(SubExpPop1);
+
+ JU_COPYMEM(Pjv2, Pjv1, SubExpPop1); // copy value areas.
+ j__udyLFreeJV(Pjv1Raw, SubExpPop1, Pjpm);
+ Pjv2 += SubExpPop1; // advance through new.
+ }
+#endif // JUDYL
+
+ j__udyFreeJLB1((Pjlb_t) (Pjp->jp_Addr), Pjpm); // LeafB1 itself.
+ return(Pop1);
+
+ } // case cJU_JPLEAF_B1
+
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+// JPLEAF1:
+
+ case cJU_JPLEAF1:
+ {
+ uint8_t * PLeaf1 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+ Pop1 = JU_JPBRANCH_POP0(Pjp, 1) + 1; assert(Pop1);
+ JUDYLCODE(Pjv1 = JL_LEAF1VALUEAREA(PLeaf1, Pop1);)
+
+// Copy all Index bytes including splicing in missing MSByte needed in Leaf2
+// (plus, for JudyL, value areas):
+
+ for (Offset = 0; Offset < Pop1; ++Offset)
+ {
+ PLeaf2[Offset] = MSByte | PLeaf1[Offset];
+ JUDYLCODE(Pjv2[Offset] = Pjv1[Offset];)
+ }
+ j__udyFreeJLL1((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ return(Pop1);
+ }
+#endif // (JUDYL || (! JU_64BIT))
+
+
+// JPIMMED_1_01:
+//
+// Note: jp_DcdPopO has 3 [7] bytes of Index (all but most significant byte),
+// so the assignment to PLeaf2[] truncates and MSByte is not needed.
+
+ case cJU_JPIMMED_1_01:
+ {
+ PLeaf2[0] = JU_JPDCDPOP0(Pjp); // see above.
+ JUDYLCODE(Pjv2[0] = Pjp->jp_Addr;)
+ return(1);
+ }
+
+
+// JPIMMED_1_0[2+]:
+
+ case cJU_JPIMMED_1_02:
+ case cJU_JPIMMED_1_03:
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04:
+ case cJU_JPIMMED_1_05:
+ case cJU_JPIMMED_1_06:
+ case cJU_JPIMMED_1_07:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08:
+ case cJ1_JPIMMED_1_09:
+ case cJ1_JPIMMED_1_10:
+ case cJ1_JPIMMED_1_11:
+ case cJ1_JPIMMED_1_12:
+ case cJ1_JPIMMED_1_13:
+ case cJ1_JPIMMED_1_14:
+ case cJ1_JPIMMED_1_15:
+#endif
+ {
+ Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_1_02 + 2; assert(Pop1);
+ JUDYLCODE(Pjv1Raw = (Pjv_t) (Pjp->jp_Addr);)
+ JUDYLCODE(Pjv1 = P_JV(Pjv1Raw);)
+
+ for (Offset = 0; Offset < Pop1; ++Offset)
+ {
+#ifdef JUDY1
+ PLeaf2[Offset] = MSByte | Pjp->jp_1Index[Offset];
+#else
+ PLeaf2[Offset] = MSByte | Pjp->jp_LIndex[Offset];
+ Pjv2 [Offset] = Pjv1[Offset];
+#endif
+ }
+ JUDYLCODE(j__udyLFreeJV(Pjv1Raw, Pop1, Pjpm);)
+ return(Pop1);
+ }
+
+
+// UNEXPECTED CASES, including JPNULL1, should be handled by caller:
+
+ default: assert(FALSE); break;
+
+ } // switch
+
+ return(0);
+
+} // j__udyLeaf1ToLeaf2()
+
+
+// *****************************************************************************
+// __ J U D Y L E A F 2 T O L E A F 3
+//
+// Copy 2-byte Indexes from a Leaf2 to 3-byte Indexes in a Leaf3.
+// Pjp MUST be one of: cJU_JPLEAF2 or cJU_JPIMMED_2_*.
+// Return number of Indexes copied.
+//
+// Note: By the time this function is called to compress a level-3 branch to a
+// Leaf3, the branch has no narrow pointers under it, meaning only level-2
+// objects are below it and must be handled here.
+
+FUNCTION Word_t j__udyLeaf2ToLeaf3(
+ uint8_t * PLeaf3, // destination "uint24_t *" Index part of leaf.
+#ifdef JUDYL
+ Pjv_t Pjv3, // destination value part of leaf.
+#endif
+ Pjp_t Pjp, // 2-byte-index object from which to copy.
+ Word_t MSByte, // most-significant byte, prefix to each Index.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Word_t Pop1; // Indexes in leaf.
+#if (defined(JUDYL) && defined(JU_64BIT))
+ Pjv_t Pjv2Raw; // source object value area.
+#endif
+JUDYLCODE(Pjv_t Pjv2;)
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// JPLEAF2:
+
+ case cJU_JPLEAF2:
+ {
+ uint16_t * PLeaf2 = (uint16_t *) P_JLL(Pjp->jp_Addr);
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1; assert(Pop1);
+ j__udyCopy2to3(PLeaf3, PLeaf2, Pop1, MSByte);
+#ifdef JUDYL
+ Pjv2 = JL_LEAF2VALUEAREA(PLeaf2, Pop1);
+ JU_COPYMEM(Pjv3, Pjv2, Pop1);
+#endif
+ j__udyFreeJLL2((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ return(Pop1);
+ }
+
+
+// JPIMMED_2_01:
+//
+// Note: jp_DcdPopO has 3 [7] bytes of Index (all but most significant byte),
+// so the "assignment" to PLeaf3[] is exact [truncates] and MSByte is not
+// needed.
+
+ case cJU_JPIMMED_2_01:
+ {
+ JU_COPY3_LONG_TO_PINDEX(PLeaf3, JU_JPDCDPOP0(Pjp)); // see above.
+ JUDYLCODE(Pjv3[0] = Pjp->jp_Addr;)
+ return(1);
+ }
+
+
+// JPIMMED_2_0[2+]:
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02:
+ case cJU_JPIMMED_2_03:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04:
+ case cJ1_JPIMMED_2_05:
+ case cJ1_JPIMMED_2_06:
+ case cJ1_JPIMMED_2_07:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ {
+ JUDY1CODE(uint16_t * PLeaf2 = (uint16_t *) (Pjp->jp_1Index);)
+ JUDYLCODE(uint16_t * PLeaf2 = (uint16_t *) (Pjp->jp_LIndex);)
+
+ Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_2_02 + 2; assert(Pop1);
+ j__udyCopy2to3(PLeaf3, PLeaf2, Pop1, MSByte);
+#ifdef JUDYL
+ Pjv2Raw = (Pjv_t) (Pjp->jp_Addr);
+ Pjv2 = P_JV(Pjv2Raw);
+ JU_COPYMEM(Pjv3, Pjv2, Pop1);
+ j__udyLFreeJV(Pjv2Raw, Pop1, Pjpm);
+#endif
+ return(Pop1);
+ }
+#endif // (JUDY1 || JU_64BIT)
+
+
+// UNEXPECTED CASES, including JPNULL2, should be handled by caller:
+
+ default: assert(FALSE); break;
+
+ } // switch
+
+ return(0);
+
+} // j__udyLeaf2ToLeaf3()
+
+
+#ifdef JU_64BIT
+
+// ****************************************************************************
+// __ J U D Y L E A F 3 T O L E A F 4
+//
+// Copy 3-byte Indexes from a Leaf3 to 4-byte Indexes in a Leaf4.
+// Pjp MUST be one of: cJU_JPLEAF3 or cJU_JPIMMED_3_*.
+// Return number of Indexes copied.
+//
+// Note: By the time this function is called to compress a level-4 branch to a
+// Leaf4, the branch has no narrow pointers under it, meaning only level-3
+// objects are below it and must be handled here.
+
+FUNCTION Word_t j__udyLeaf3ToLeaf4(
+ uint32_t * PLeaf4, // destination uint32_t * Index part of leaf.
+#ifdef JUDYL
+ Pjv_t Pjv4, // destination value part of leaf.
+#endif
+ Pjp_t Pjp, // 3-byte-index object from which to copy.
+ Word_t MSByte, // most-significant byte, prefix to each Index.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Word_t Pop1; // Indexes in leaf.
+JUDYLCODE(Pjv_t Pjv3Raw;) // source object value area.
+JUDYLCODE(Pjv_t Pjv3;)
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// JPLEAF3:
+
+ case cJU_JPLEAF3:
+ {
+ uint8_t * PLeaf3 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1; assert(Pop1);
+ j__udyCopy3to4(PLeaf4, (uint8_t *) PLeaf3, Pop1, MSByte);
+#ifdef JUDYL
+ Pjv3 = JL_LEAF3VALUEAREA(PLeaf3, Pop1);
+ JU_COPYMEM(Pjv4, Pjv3, Pop1);
+#endif
+ j__udyFreeJLL3((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ return(Pop1);
+ }
+
+
+// JPIMMED_3_01:
+//
+// Note: jp_DcdPopO has 7 bytes of Index (all but most significant byte), so
+// the assignment to PLeaf4[] truncates and MSByte is not needed.
+
+ case cJU_JPIMMED_3_01:
+ {
+ PLeaf4[0] = JU_JPDCDPOP0(Pjp); // see above.
+ JUDYLCODE(Pjv4[0] = Pjp->jp_Addr;)
+ return(1);
+ }
+
+
+// JPIMMED_3_0[2+]:
+
+ case cJU_JPIMMED_3_02:
+#ifdef JUDY1
+ case cJ1_JPIMMED_3_03:
+ case cJ1_JPIMMED_3_04:
+ case cJ1_JPIMMED_3_05:
+#endif
+ {
+ JUDY1CODE(uint8_t * PLeaf3 = (uint8_t *) (Pjp->jp_1Index);)
+ JUDYLCODE(uint8_t * PLeaf3 = (uint8_t *) (Pjp->jp_LIndex);)
+
+ JUDY1CODE(Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_3_02 + 2;)
+ JUDYLCODE(Pop1 = 2;)
+
+ j__udyCopy3to4(PLeaf4, PLeaf3, Pop1, MSByte);
+#ifdef JUDYL
+ Pjv3Raw = (Pjv_t) (Pjp->jp_Addr);
+ Pjv3 = P_JV(Pjv3Raw);
+ JU_COPYMEM(Pjv4, Pjv3, Pop1);
+ j__udyLFreeJV(Pjv3Raw, Pop1, Pjpm);
+#endif
+ return(Pop1);
+ }
+
+
+// UNEXPECTED CASES, including JPNULL3, should be handled by caller:
+
+ default: assert(FALSE); break;
+
+ } // switch
+
+ return(0);
+
+} // j__udyLeaf3ToLeaf4()
+
+
+// Note: In all following j__udyLeaf*ToLeaf*() functions, JPIMMED_*_0[2+]
+// cases exist for Judy1 (&& 64-bit) only. JudyL has no equivalent Immeds.
+
+
+// *****************************************************************************
+// __ J U D Y L E A F 4 T O L E A F 5
+//
+// Copy 4-byte Indexes from a Leaf4 to 5-byte Indexes in a Leaf5.
+// Pjp MUST be one of: cJU_JPLEAF4 or cJU_JPIMMED_4_*.
+// Return number of Indexes copied.
+//
+// Note: By the time this function is called to compress a level-5 branch to a
+// Leaf5, the branch has no narrow pointers under it, meaning only level-4
+// objects are below it and must be handled here.
+
+FUNCTION Word_t j__udyLeaf4ToLeaf5(
+ uint8_t * PLeaf5, // destination "uint40_t *" Index part of leaf.
+#ifdef JUDYL
+ Pjv_t Pjv5, // destination value part of leaf.
+#endif
+ Pjp_t Pjp, // 4-byte-index object from which to copy.
+ Word_t MSByte, // most-significant byte, prefix to each Index.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Word_t Pop1; // Indexes in leaf.
+JUDYLCODE(Pjv_t Pjv4;) // source object value area.
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// JPLEAF4:
+
+ case cJU_JPLEAF4:
+ {
+ uint32_t * PLeaf4 = (uint32_t *) P_JLL(Pjp->jp_Addr);
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1; assert(Pop1);
+ j__udyCopy4to5(PLeaf5, PLeaf4, Pop1, MSByte);
+#ifdef JUDYL
+ Pjv4 = JL_LEAF4VALUEAREA(PLeaf4, Pop1);
+ JU_COPYMEM(Pjv5, Pjv4, Pop1);
+#endif
+ j__udyFreeJLL4((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ return(Pop1);
+ }
+
+
+// JPIMMED_4_01:
+//
+// Note: jp_DcdPopO has 7 bytes of Index (all but most significant byte), so
+// the assignment to PLeaf5[] truncates and MSByte is not needed.
+
+ case cJU_JPIMMED_4_01:
+ {
+ JU_COPY5_LONG_TO_PINDEX(PLeaf5, JU_JPDCDPOP0(Pjp)); // see above.
+ JUDYLCODE(Pjv5[0] = Pjp->jp_Addr;)
+ return(1);
+ }
+
+
+#ifdef JUDY1
+
+// JPIMMED_4_0[4+]:
+
+ case cJ1_JPIMMED_4_02:
+ case cJ1_JPIMMED_4_03:
+ {
+ uint32_t * PLeaf4 = (uint32_t *) (Pjp->jp_1Index);
+
+ Pop1 = JU_JPTYPE(Pjp) - cJ1_JPIMMED_4_02 + 2;
+ j__udyCopy4to5(PLeaf5, PLeaf4, Pop1, MSByte);
+ return(Pop1);
+ }
+#endif // JUDY1
+
+
+// UNEXPECTED CASES, including JPNULL4, should be handled by caller:
+
+ default: assert(FALSE); break;
+
+ } // switch
+
+ return(0);
+
+} // j__udyLeaf4ToLeaf5()
+
+
+// ****************************************************************************
+// __ J U D Y L E A F 5 T O L E A F 6
+//
+// Copy 5-byte Indexes from a Leaf5 to 6-byte Indexes in a Leaf6.
+// Pjp MUST be one of: cJU_JPLEAF5 or cJU_JPIMMED_5_*.
+// Return number of Indexes copied.
+//
+// Note: By the time this function is called to compress a level-6 branch to a
+// Leaf6, the branch has no narrow pointers under it, meaning only level-5
+// objects are below it and must be handled here.
+
+FUNCTION Word_t j__udyLeaf5ToLeaf6(
+ uint8_t * PLeaf6, // destination uint8_t * Index part of leaf.
+#ifdef JUDYL
+ Pjv_t Pjv6, // destination value part of leaf.
+#endif
+ Pjp_t Pjp, // 5-byte-index object from which to copy.
+ Word_t MSByte, // most-significant byte, prefix to each Index.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Word_t Pop1; // Indexes in leaf.
+JUDYLCODE(Pjv_t Pjv5;) // source object value area.
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// JPLEAF5:
+
+ case cJU_JPLEAF5:
+ {
+ uint8_t * PLeaf5 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1; assert(Pop1);
+ j__udyCopy5to6(PLeaf6, PLeaf5, Pop1, MSByte);
+#ifdef JUDYL
+ Pjv5 = JL_LEAF5VALUEAREA(PLeaf5, Pop1);
+ JU_COPYMEM(Pjv6, Pjv5, Pop1);
+#endif
+ j__udyFreeJLL5((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ return(Pop1);
+ }
+
+
+// JPIMMED_5_01:
+//
+// Note: jp_DcdPopO has 7 bytes of Index (all but most significant byte), so
+// the assignment to PLeaf6[] truncates and MSByte is not needed.
+
+ case cJU_JPIMMED_5_01:
+ {
+ JU_COPY6_LONG_TO_PINDEX(PLeaf6, JU_JPDCDPOP0(Pjp)); // see above.
+ JUDYLCODE(Pjv6[0] = Pjp->jp_Addr;)
+ return(1);
+ }
+
+
+#ifdef JUDY1
+
+// JPIMMED_5_0[2+]:
+
+ case cJ1_JPIMMED_5_02:
+ case cJ1_JPIMMED_5_03:
+ {
+ uint8_t * PLeaf5 = (uint8_t *) (Pjp->jp_1Index);
+
+ Pop1 = JU_JPTYPE(Pjp) - cJ1_JPIMMED_5_02 + 2;
+ j__udyCopy5to6(PLeaf6, PLeaf5, Pop1, MSByte);
+ return(Pop1);
+ }
+#endif // JUDY1
+
+
+// UNEXPECTED CASES, including JPNULL5, should be handled by caller:
+
+ default: assert(FALSE); break;
+
+ } // switch
+
+ return(0);
+
+} // j__udyLeaf5ToLeaf6()
+
+
+// *****************************************************************************
+// __ J U D Y L E A F 6 T O L E A F 7
+//
+// Copy 6-byte Indexes from a Leaf2 to 7-byte Indexes in a Leaf7.
+// Pjp MUST be one of: cJU_JPLEAF6 or cJU_JPIMMED_6_*.
+// Return number of Indexes copied.
+//
+// Note: By the time this function is called to compress a level-7 branch to a
+// Leaf7, the branch has no narrow pointers under it, meaning only level-6
+// objects are below it and must be handled here.
+
+FUNCTION Word_t j__udyLeaf6ToLeaf7(
+ uint8_t * PLeaf7, // destination "uint24_t *" Index part of leaf.
+#ifdef JUDYL
+ Pjv_t Pjv7, // destination value part of leaf.
+#endif
+ Pjp_t Pjp, // 6-byte-index object from which to copy.
+ Word_t MSByte, // most-significant byte, prefix to each Index.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Word_t Pop1; // Indexes in leaf.
+JUDYLCODE(Pjv_t Pjv6;) // source object value area.
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// JPLEAF6:
+
+ case cJU_JPLEAF6:
+ {
+ uint8_t * PLeaf6 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyCopy6to7(PLeaf7, PLeaf6, Pop1, MSByte);
+#ifdef JUDYL
+ Pjv6 = JL_LEAF6VALUEAREA(PLeaf6, Pop1);
+ JU_COPYMEM(Pjv7, Pjv6, Pop1);
+#endif
+ j__udyFreeJLL6((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ return(Pop1);
+ }
+
+
+// JPIMMED_6_01:
+//
+// Note: jp_DcdPopO has 7 bytes of Index (all but most significant byte), so
+// the "assignment" to PLeaf7[] is exact and MSByte is not needed.
+
+ case cJU_JPIMMED_6_01:
+ {
+ JU_COPY7_LONG_TO_PINDEX(PLeaf7, JU_JPDCDPOP0(Pjp)); // see above.
+ JUDYLCODE(Pjv7[0] = Pjp->jp_Addr;)
+ return(1);
+ }
+
+
+#ifdef JUDY1
+
+// JPIMMED_6_02:
+
+ case cJ1_JPIMMED_6_02:
+ {
+ uint8_t * PLeaf6 = (uint8_t *) (Pjp->jp_1Index);
+
+ j__udyCopy6to7(PLeaf7, PLeaf6, /* Pop1 = */ 2, MSByte);
+ return(2);
+ }
+#endif // JUDY1
+
+
+// UNEXPECTED CASES, including JPNULL6, should be handled by caller:
+
+ default: assert(FALSE); break;
+
+ } // switch
+
+ return(0);
+
+} // j__udyLeaf6ToLeaf7()
+
+#endif // JU_64BIT
+
+
+#ifndef JU_64BIT // 32-bit version first
+
+// ****************************************************************************
+// __ J U D Y L E A F 3 T O L E A F W
+//
+// Copy 3-byte Indexes from a Leaf3 to 4-byte Indexes in a LeafW. Pjp MUST be
+// one of: cJU_JPLEAF3 or cJU_JPIMMED_3_*. Return number of Indexes copied.
+//
+// Note: By the time this function is called to compress a level-L branch to a
+// LeafW, the branch has no narrow pointers under it, meaning only level-3
+// objects are below it and must be handled here.
+
+FUNCTION Word_t j__udyLeaf3ToLeafW(
+ Pjlw_t Pjlw, // destination Index part of leaf.
+#ifdef JUDYL
+ Pjv_t PjvW, // destination value part of leaf.
+#endif
+ Pjp_t Pjp, // 3-byte-index object from which to copy.
+ Word_t MSByte, // most-significant byte, prefix to each Index.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Word_t Pop1; // Indexes in leaf.
+JUDYLCODE(Pjv_t Pjv3;) // source object value area.
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// JPLEAF3:
+
+ case cJU_JPLEAF3:
+ {
+ uint8_t * PLeaf3 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyCopy3toW((PWord_t) Pjlw, PLeaf3, Pop1, MSByte);
+#ifdef JUDYL
+ Pjv3 = JL_LEAF3VALUEAREA(PLeaf3, Pop1);
+ JU_COPYMEM(PjvW, Pjv3, Pop1);
+#endif
+ j__udyFreeJLL3((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ return(Pop1);
+ }
+
+
+// JPIMMED_3_01:
+//
+// Note: jp_DcdPopO has 3 bytes of Index (all but most significant byte), and
+// MSByte must be ord in.
+
+ case cJU_JPIMMED_3_01:
+ {
+ Pjlw[0] = MSByte | JU_JPDCDPOP0(Pjp); // see above.
+ JUDYLCODE(PjvW[0] = Pjp->jp_Addr;)
+ return(1);
+ }
+
+
+#ifdef JUDY1
+
+// JPIMMED_3_02:
+
+ case cJU_JPIMMED_3_02:
+ {
+ uint8_t * PLeaf3 = (uint8_t *) (Pjp->jp_1Index);
+
+ j__udyCopy3toW((PWord_t) Pjlw, PLeaf3, /* Pop1 = */ 2, MSByte);
+ return(2);
+ }
+#endif // JUDY1
+
+
+// UNEXPECTED CASES, including JPNULL3, should be handled by caller:
+
+ default: assert(FALSE); break;
+
+ } // switch
+
+ return(0);
+
+} // j__udyLeaf3ToLeafW()
+
+
+#else // JU_64BIT
+
+
+// ****************************************************************************
+// __ J U D Y L E A F 7 T O L E A F W
+//
+// Copy 7-byte Indexes from a Leaf7 to 8-byte Indexes in a LeafW.
+// Pjp MUST be one of: cJU_JPLEAF7 or cJU_JPIMMED_7_*.
+// Return number of Indexes copied.
+//
+// Note: By the time this function is called to compress a level-L branch to a
+// LeafW, the branch has no narrow pointers under it, meaning only level-7
+// objects are below it and must be handled here.
+
+FUNCTION Word_t j__udyLeaf7ToLeafW(
+ Pjlw_t Pjlw, // destination Index part of leaf.
+#ifdef JUDYL
+ Pjv_t PjvW, // destination value part of leaf.
+#endif
+ Pjp_t Pjp, // 7-byte-index object from which to copy.
+ Word_t MSByte, // most-significant byte, prefix to each Index.
+ Pvoid_t Pjpm) // for global accounting.
+{
+ Word_t Pop1; // Indexes in leaf.
+JUDYLCODE(Pjv_t Pjv7;) // source object value area.
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// JPLEAF7:
+
+ case cJU_JPLEAF7:
+ {
+ uint8_t * PLeaf7 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyCopy7toW((PWord_t) Pjlw, PLeaf7, Pop1, MSByte);
+#ifdef JUDYL
+ Pjv7 = JL_LEAF7VALUEAREA(PLeaf7, Pop1);
+ JU_COPYMEM(PjvW, Pjv7, Pop1);
+#endif
+ j__udyFreeJLL7((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ return(Pop1);
+ }
+
+
+// JPIMMED_7_01:
+//
+// Note: jp_DcdPopO has 7 bytes of Index (all but most significant byte), and
+// MSByte must be ord in.
+
+ case cJU_JPIMMED_7_01:
+ {
+ Pjlw[0] = MSByte | JU_JPDCDPOP0(Pjp); // see above.
+ JUDYLCODE(PjvW[0] = Pjp->jp_Addr;)
+ return(1);
+ }
+
+
+#ifdef JUDY1
+
+// JPIMMED_7_02:
+
+ case cJ1_JPIMMED_7_02:
+ {
+ uint8_t * PLeaf7 = (uint8_t *) (Pjp->jp_1Index);
+
+ j__udyCopy7toW((PWord_t) Pjlw, PLeaf7, /* Pop1 = */ 2, MSByte);
+ return(2);
+ }
+#endif
+
+
+// UNEXPECTED CASES, including JPNULL7, should be handled by caller:
+
+ default: assert(FALSE); break;
+
+ } // switch
+
+ return(0);
+
+} // j__udyLeaf7ToLeafW()
+
+#endif // JU_64BIT
diff --git a/libs/klib/judy/JudyDel.c b/libs/klib/judy/JudyDel.c
new file mode 100644
index 0000000..4291da6
--- /dev/null
+++ b/libs/klib/judy/JudyDel.c
@@ -0,0 +1,2144 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy1Unset() and JudyLDel() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// About HYSTERESIS: In the Judy code, hysteresis means leaving around a
+// nominally suboptimal (not maximally compressed) data structure after a
+// deletion. As a result, the shape of the tree for two identical index sets
+// can differ depending on the insert/delete path taken to arrive at the index
+// sets. The purpose is to minimize worst-case behavior (thrashing) that could
+// result from a series of intermixed insertions and deletions. It also makes
+// for MUCH simpler code, because instead of performing, "delete and then
+// compress," it can say, "compress and then delete," where due to hysteresis,
+// compression is not even attempted until the object IS compressible.
+//
+// In some cases the code has no choice and it must "ungrow" a data structure
+// across a "phase transition" boundary without hysteresis. In other cases the
+// amount (such as "hysteresis = 1") is indicated by the number of JP deletions
+// (in branches) or index deletions (in leaves) that can occur in succession
+// before compressing the data structure. (It appears that hysteresis <= 1 in
+// all cases.)
+//
+// In general no hysteresis occurs when the data structure type remains the
+// same but the allocated memory chunk for the node must shrink, because the
+// relationship is hardwired and theres no way to know how much memory is
+// allocated to a given data structure. Hysteresis = 0 in all these cases.
+//
+// TBD: Could this code be faster if memory chunk hysteresis were supported
+// somehow along with data structure type hysteresis?
+//
+// TBD: Should some of the assertions here be converted to product code that
+// returns JU_ERRNO_CORRUPT?
+//
+// TBD: Dougs code had an odd mix of function-wide and limited-scope
+// variables. Should some of the function-wide variables appear only in
+// limited scopes, or more likely, vice-versa?
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+DBGCODE(extern void JudyCheckPop(Pvoid_t PArray);)
+DBGCODE(extern void JudyCheckSorted(Pjll_t Pjll, Word_t Pop1, long IndexSize);)
+
+#ifdef TRACEJP
+#include "JudyPrintJP.c"
+#endif
+
+// These are defined to generic values in JudyCommon/JudyPrivateTypes.h:
+//
+// TBD: These should be exported from a header file, but perhaps not, as they
+// are only used here, and exported from JudyDecascade.c, which is a separate
+// file for profiling reasons (to prevent inlining), but which potentially
+// could be merged with this file, either in SoftCM or at compile-time:
+
+#ifdef JUDY1
+
+extern int j__udy1BranchBToBranchL(Pjp_t Pjp, Pvoid_t Pjpm);
+#ifndef JU_64BIT
+extern int j__udy1LeafB1ToLeaf1(Pjp_t, Pvoid_t);
+#endif
+extern Word_t j__udy1Leaf1ToLeaf2(uint16_t *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udy1Leaf2ToLeaf3(uint8_t *, Pjp_t, Word_t, Pvoid_t);
+#ifndef JU_64BIT
+extern Word_t j__udy1Leaf3ToLeafW(Pjlw_t, Pjp_t, Word_t, Pvoid_t);
+#else
+extern Word_t j__udy1Leaf3ToLeaf4(uint32_t *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udy1Leaf4ToLeaf5(uint8_t *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udy1Leaf5ToLeaf6(uint8_t *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udy1Leaf6ToLeaf7(uint8_t *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udy1Leaf7ToLeafW(Pjlw_t, Pjp_t, Word_t, Pvoid_t);
+#endif
+
+#else // JUDYL
+
+extern int j__udyLBranchBToBranchL(Pjp_t Pjp, Pvoid_t Pjpm);
+extern int j__udyLLeafB1ToLeaf1(Pjp_t, Pvoid_t);
+extern Word_t j__udyLLeaf1ToLeaf2(uint16_t *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udyLLeaf2ToLeaf3(uint8_t *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+#ifndef JU_64BIT
+extern Word_t j__udyLLeaf3ToLeafW(Pjlw_t, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+#else
+extern Word_t j__udyLLeaf3ToLeaf4(uint32_t *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udyLLeaf4ToLeaf5(uint8_t *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udyLLeaf5ToLeaf6(uint8_t *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udyLLeaf6ToLeaf7(uint8_t *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t j__udyLLeaf7ToLeafW(Pjlw_t, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+#endif
+
+#endif // JUDYL
+
+// For convenience in the calling code; "M1" means "minus one":
+
+#ifndef JU_64BIT
+#define j__udyLeafM1ToLeafW j__udyLeaf3ToLeafW
+#else
+#define j__udyLeafM1ToLeafW j__udyLeaf7ToLeafW
+#endif
+
+
+// ****************************************************************************
+// __ J U D Y D E L W A L K
+//
+// Given a pointer to a JP, an Index known to be valid, the number of bytes
+// left to decode (== level in the tree), and a pointer to a global JPM, walk a
+// Judy (sub)tree to do an unset/delete of that index, and possibly modify the
+// JPM. This function is only called internally, and recursively. Unlike
+// Judy1Test() and JudyLGet(), the extra time required for recursion should be
+// negligible compared with the total.
+//
+// Return values:
+//
+// -1 error; details in JPM
+//
+// 0 Index already deleted (should never happen, Index is known to be valid)
+//
+// 1 previously valid Index deleted
+//
+// 2 same as 1, but in addition the JP now points to a BranchL containing a
+// single JP, which should be compressed into the parent branch (if there
+// is one, which is not the case for a top-level branch under a JPM)
+
+DBGCODE(uint8_t parentJPtype;) // parent branch JP type.
+
+FUNCTION static int j__udyDelWalk(
+ Pjp_t Pjp, // current JP under which to delete.
+ Word_t Index, // to delete.
+ Word_t ParentLevel, // of parent branch.
+ Pjpm_t Pjpm) // for returning info to top level.
+{
+ Word_t pop1; // of a leaf.
+ Word_t level; // of a leaf.
+ uint8_t digit; // from Index, in current branch.
+ Pjll_t PjllnewRaw; // address of newly allocated leaf.
+ Pjll_t Pjllnew;
+ int offset; // within a branch.
+ int retcode; // return code: -1, 0, 1, 2.
+JUDYLCODE(Pjv_t PjvRaw;) // value area.
+JUDYLCODE(Pjv_t Pjv;)
+
+ DBGCODE(level = 0;)
+
+ContinueDelWalk: // for modifying state without recursing.
+
+#ifdef TRACEJP
+ JudyPrintJP(Pjp, "d", __LINE__);
+#endif
+
+ switch (JU_JPTYPE(Pjp)) // entry: Pjp, Index.
+ {
+
+
+// ****************************************************************************
+// LINEAR BRANCH:
+//
+// MACROS FOR COMMON CODE:
+//
+// Check for population too high to compress a branch to a leaf, meaning just
+// descend through the branch, with a purposeful off-by-one error that
+// constitutes hysteresis = 1. In other words, do not compress until the
+// branchs CURRENT population fits in the leaf, even BEFORE deleting one
+// index.
+//
+// Next is a label for branch-type-specific common code. Variables pop1,
+// level, digit, and Index are in the context.
+
+#define JU_BRANCH_KEEP(cLevel,MaxPop1,Next) \
+ if (pop1 > (MaxPop1)) /* hysteresis = 1 */ \
+ { \
+ assert((cLevel) >= 2); \
+ level = (cLevel); \
+ digit = JU_DIGITATSTATE(Index, cLevel); \
+ goto Next; \
+ }
+
+// Support for generic calling of JudyLeaf*ToLeaf*() functions:
+//
+// Note: Cannot use JUDYLCODE() because this contains a comma.
+
+#ifdef JUDY1
+#define JU_PVALUEPASS // null.
+#else
+#define JU_PVALUEPASS Pjv,
+#endif
+
+// During compression to a leaf, check if a JP contains nothing but a
+// cJU_JPIMMED_*_01, in which case shortcut calling j__udyLeaf*ToLeaf*():
+//
+// Copy the index bytes from the jp_DcdPopO field (with possible truncation),
+// and continue the branch-JP-walk loop. Variables Pjp and Pleaf are in the
+// context.
+
+#define JU_BRANCH_COPY_IMMED_EVEN(cLevel,Pjp,ignore) \
+ if (JU_JPTYPE(Pjp) == cJU_JPIMMED_1_01 + (cLevel) - 2) \
+ { \
+ *Pleaf++ = JU_JPDCDPOP0(Pjp); \
+ JUDYLCODE(*Pjv++ = (Pjp)->jp_Addr;) \
+ continue; /* for-loop */ \
+ }
+
+#define JU_BRANCH_COPY_IMMED_ODD(cLevel,Pjp,CopyIndex) \
+ if (JU_JPTYPE(Pjp) == cJU_JPIMMED_1_01 + (cLevel) - 2) \
+ { \
+ CopyIndex(Pleaf, (Word_t) (JU_JPDCDPOP0(Pjp))); \
+ Pleaf += (cLevel); /* index size = level */ \
+ JUDYLCODE(*Pjv++ = (Pjp)->jp_Addr;) \
+ continue; /* for-loop */ \
+ }
+
+// Compress a BranchL into a leaf one index size larger:
+//
+// Allocate a new leaf, walk the JPs in the old BranchL and pack their contents
+// into the new leaf (of type NewJPType), free the old BranchL, and finally
+// restart the switch to delete Index from the new leaf. (Note that all
+// BranchLs are the same size.) Variables Pjp, Pjpm, Pleaf, digit, and pop1
+// are in the context.
+
+#define JU_BRANCHL_COMPRESS(cLevel,LeafType,MaxPop1,NewJPType, \
+ LeafToLeaf,Alloc,ValueArea, \
+ CopyImmed,CopyIndex) \
+ { \
+ LeafType Pleaf; \
+ Pjbl_t PjblRaw; \
+ Pjbl_t Pjbl; \
+ Word_t numJPs; \
+ \
+ if ((PjllnewRaw = Alloc(MaxPop1, Pjpm)) == 0) return(-1); \
+ Pjllnew = P_JLL(PjllnewRaw); \
+ Pleaf = (LeafType) Pjllnew; \
+ JUDYLCODE(Pjv = ValueArea(Pleaf, MaxPop1);) \
+ \
+ PjblRaw = (Pjbl_t) (Pjp->jp_Addr); \
+ Pjbl = P_JBL(PjblRaw); \
+ numJPs = Pjbl->jbl_NumJPs; \
+ \
+ for (offset = 0; offset < numJPs; ++offset) \
+ { \
+ CopyImmed(cLevel, (Pjbl->jbl_jp) + offset, CopyIndex); \
+ \
+ pop1 = LeafToLeaf(Pleaf, JU_PVALUEPASS \
+ (Pjbl->jbl_jp) + offset, \
+ JU_DIGITTOSTATE(Pjbl->jbl_Expanse[offset], \
+ cLevel), (Pvoid_t) Pjpm); \
+ Pleaf = (LeafType) (((Word_t) Pleaf) + ((cLevel) * pop1)); \
+ JUDYLCODE(Pjv += pop1;) \
+ } \
+ assert(((((Word_t) Pleaf) - ((Word_t) Pjllnew)) / (cLevel)) == (MaxPop1)); \
+ JUDYLCODE(assert((Pjv - ValueArea(Pjllnew, MaxPop1)) == (MaxPop1));) \
+ DBGCODE(JudyCheckSorted(Pjllnew, MaxPop1, cLevel);) \
+ \
+ j__udyFreeJBL(PjblRaw, Pjpm); \
+ \
+ Pjp->jp_Type = (NewJPType); \
+ Pjp->jp_Addr = (Word_t) PjllnewRaw; \
+ goto ContinueDelWalk; /* delete from new leaf */ \
+ }
+
+// Overall common code for initial BranchL deletion handling:
+//
+// Assert that Index is in the branch, then see if the BranchL should be kept
+// or else compressed to a leaf. Variables Index, Pjp, and pop1 are in the
+// context.
+
+#define JU_BRANCHL(cLevel,MaxPop1,LeafType,NewJPType, \
+ LeafToLeaf,Alloc,ValueArea,CopyImmed,CopyIndex) \
+ \
+ assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cLevel)); \
+ assert(ParentLevel > (cLevel)); \
+ \
+ pop1 = JU_JPBRANCH_POP0(Pjp, cLevel) + 1; \
+ JU_BRANCH_KEEP(cLevel, MaxPop1, BranchLKeep); \
+ assert(pop1 == (MaxPop1)); \
+ \
+ JU_BRANCHL_COMPRESS(cLevel, LeafType, MaxPop1, NewJPType, \
+ LeafToLeaf, Alloc, ValueArea, CopyImmed, CopyIndex)
+
+
+// END OF MACROS, START OF CASES:
+
+ case cJU_JPBRANCH_L2:
+
+ JU_BRANCHL(2, cJU_LEAF2_MAXPOP1, uint16_t *, cJU_JPLEAF2,
+ j__udyLeaf1ToLeaf2, j__udyAllocJLL2, JL_LEAF2VALUEAREA,
+ JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+ case cJU_JPBRANCH_L3:
+
+ JU_BRANCHL(3, cJU_LEAF3_MAXPOP1, uint8_t *, cJU_JPLEAF3,
+ j__udyLeaf2ToLeaf3, j__udyAllocJLL3, JL_LEAF3VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY3_LONG_TO_PINDEX);
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4:
+
+ JU_BRANCHL(4, cJU_LEAF4_MAXPOP1, uint32_t *, cJU_JPLEAF4,
+ j__udyLeaf3ToLeaf4, j__udyAllocJLL4, JL_LEAF4VALUEAREA,
+ JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+ case cJU_JPBRANCH_L5:
+
+ JU_BRANCHL(5, cJU_LEAF5_MAXPOP1, uint8_t *, cJU_JPLEAF5,
+ j__udyLeaf4ToLeaf5, j__udyAllocJLL5, JL_LEAF5VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY5_LONG_TO_PINDEX);
+
+ case cJU_JPBRANCH_L6:
+
+ JU_BRANCHL(6, cJU_LEAF6_MAXPOP1, uint8_t *, cJU_JPLEAF6,
+ j__udyLeaf5ToLeaf6, j__udyAllocJLL6, JL_LEAF6VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY6_LONG_TO_PINDEX);
+
+ case cJU_JPBRANCH_L7:
+
+ JU_BRANCHL(7, cJU_LEAF7_MAXPOP1, uint8_t *, cJU_JPLEAF7,
+ j__udyLeaf6ToLeaf7, j__udyAllocJLL7, JL_LEAF7VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY7_LONG_TO_PINDEX);
+#endif // JU_64BIT
+
+// A top-level BranchL is different and cannot use JU_BRANCHL(): Dont try to
+// compress to a (LEAFW) leaf yet, but leave this for a later deletion
+// (hysteresis > 0); and the next JP type depends on the system word size; so
+// dont use JU_BRANCH_KEEP():
+
+ case cJU_JPBRANCH_L:
+ {
+ Pjbl_t Pjbl;
+ Word_t numJPs;
+
+ level = cJU_ROOTSTATE;
+ digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+
+ // fall through:
+
+
+// COMMON CODE FOR KEEPING AND DESCENDING THROUGH A BRANCHL:
+//
+// Come here with level and digit set.
+
+BranchLKeep:
+ Pjbl = P_JBL(Pjp->jp_Addr);
+ numJPs = Pjbl->jbl_NumJPs;
+ assert(numJPs > 0);
+ DBGCODE(parentJPtype = JU_JPTYPE(Pjp);)
+
+// Search for a match to the digit (valid Index => must find digit):
+
+ for (offset = 0; (Pjbl->jbl_Expanse[offset]) != digit; ++offset)
+ assert(offset < numJPs - 1);
+
+ Pjp = (Pjbl->jbl_jp) + offset;
+
+// If not at a (deletable) JPIMMED_*_01, continue the walk (to descend through
+// the BranchL):
+
+ assert(level >= 2);
+ if ((JU_JPTYPE(Pjp)) != cJU_JPIMMED_1_01 + level - 2) break;
+
+// At JPIMMED_*_01: Ensure the index is in the right expanse, then delete the
+// Immed from the BranchL:
+//
+// Note: A BranchL has a fixed size and format regardless of numJPs.
+
+ assert(JU_JPDCDPOP0(Pjp) == JU_TRIMTODCDSIZE(Index));
+
+ JU_DELETEINPLACE(Pjbl->jbl_Expanse, numJPs, offset, ignore);
+ JU_DELETEINPLACE(Pjbl->jbl_jp, numJPs, offset, ignore);
+
+ DBGCODE(JudyCheckSorted((Pjll_t) (Pjbl->jbl_Expanse),
+ numJPs - 1, 1);)
+
+// If only one index left in the BranchL, indicate this to the caller:
+
+ return ((--(Pjbl->jbl_NumJPs) <= 1) ? 2 : 1);
+
+ } // case cJU_JPBRANCH_L.
+
+
+// ****************************************************************************
+// BITMAP BRANCH:
+//
+// MACROS FOR COMMON CODE:
+//
+// Note the reuse of common macros here, defined earlier: JU_BRANCH_KEEP(),
+// JU_PVALUE*.
+//
+// Compress a BranchB into a leaf one index size larger:
+//
+// Allocate a new leaf, walk the JPs in the old BranchB (one bitmap subexpanse
+// at a time) and pack their contents into the new leaf (of type NewJPType),
+// free the old BranchB, and finally restart the switch to delete Index from
+// the new leaf. Variables Pjp, Pjpm, Pleaf, digit, and pop1 are in the
+// context.
+//
+// Note: Its no accident that the interface to JU_BRANCHB_COMPRESS() is
+// identical to JU_BRANCHL_COMPRESS(). Only the details differ in how to
+// traverse the branchs JPs.
+
+#define JU_BRANCHB_COMPRESS(cLevel,LeafType,MaxPop1,NewJPType, \
+ LeafToLeaf,Alloc,ValueArea, \
+ CopyImmed,CopyIndex) \
+ { \
+ LeafType Pleaf; \
+ Pjbb_t PjbbRaw; /* BranchB to compress */ \
+ Pjbb_t Pjbb; \
+ Word_t subexp; /* current subexpanse number */ \
+ BITMAPB_t bitmap; /* portion for this subexpanse */ \
+ Pjp_t Pjp2Raw; /* one subexpanses subarray */ \
+ Pjp_t Pjp2; \
+ \
+ if ((PjllnewRaw = Alloc(MaxPop1, Pjpm)) == 0) return(-1); \
+ Pjllnew = P_JLL(PjllnewRaw); \
+ Pleaf = (LeafType) Pjllnew; \
+ JUDYLCODE(Pjv = ValueArea(Pleaf, MaxPop1);) \
+ \
+ PjbbRaw = (Pjbb_t) (Pjp->jp_Addr); \
+ Pjbb = P_JBB(PjbbRaw); \
+ \
+ for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp) \
+ { \
+ if ((bitmap = JU_JBB_BITMAP(Pjbb, subexp)) == 0) \
+ continue; /* empty subexpanse */ \
+ \
+ digit = subexp * cJU_BITSPERSUBEXPB; \
+ Pjp2Raw = JU_JBB_PJP(Pjbb, subexp); \
+ Pjp2 = P_JP(Pjp2Raw); \
+ assert(Pjp2 != (Pjp_t) NULL); \
+ \
+ for (offset = 0; bitmap != 0; bitmap >>= 1, ++digit) \
+ { \
+ if (! (bitmap & 1)) \
+ continue; /* empty sub-subexpanse */ \
+ \
+ ++offset; /* before any continue */ \
+ \
+ CopyImmed(cLevel, Pjp2 + offset - 1, CopyIndex); \
+ \
+ pop1 = LeafToLeaf(Pleaf, JU_PVALUEPASS \
+ Pjp2 + offset - 1, \
+ JU_DIGITTOSTATE(digit, cLevel), \
+ (Pvoid_t) Pjpm); \
+ Pleaf = (LeafType) (((Word_t) Pleaf) + ((cLevel) * pop1)); \
+ JUDYLCODE(Pjv += pop1;) \
+ } \
+ j__udyFreeJBBJP(Pjp2Raw, /* pop1 = */ offset, Pjpm); \
+ } \
+ assert(((((Word_t) Pleaf) - ((Word_t) Pjllnew)) / (cLevel)) == (MaxPop1)); \
+ JUDYLCODE(assert((Pjv - ValueArea(Pjllnew, MaxPop1)) == (MaxPop1));) \
+ DBGCODE(JudyCheckSorted(Pjllnew, MaxPop1, cLevel);) \
+ \
+ j__udyFreeJBB(PjbbRaw, Pjpm); \
+ \
+ Pjp->jp_Type = (NewJPType); \
+ Pjp->jp_Addr = (Word_t) PjllnewRaw; \
+ goto ContinueDelWalk; /* delete from new leaf */ \
+ }
+
+// Overall common code for initial BranchB deletion handling:
+//
+// Assert that Index is in the branch, then see if the BranchB should be kept
+// or else compressed to a leaf. Variables Index, Pjp, and pop1 are in the
+// context.
+
+#define JU_BRANCHB(cLevel,MaxPop1,LeafType,NewJPType, \
+ LeafToLeaf,Alloc,ValueArea,CopyImmed,CopyIndex) \
+ \
+ assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cLevel)); \
+ assert(ParentLevel > (cLevel)); \
+ \
+ pop1 = JU_JPBRANCH_POP0(Pjp, cLevel) + 1; \
+ JU_BRANCH_KEEP(cLevel, MaxPop1, BranchBKeep); \
+ assert(pop1 == (MaxPop1)); \
+ \
+ JU_BRANCHB_COMPRESS(cLevel, LeafType, MaxPop1, NewJPType, \
+ LeafToLeaf, Alloc, ValueArea, CopyImmed, CopyIndex)
+
+
+// END OF MACROS, START OF CASES:
+//
+// Note: Its no accident that the macro calls for these cases is nearly
+// identical to the code for BranchLs.
+
+ case cJU_JPBRANCH_B2:
+
+ JU_BRANCHB(2, cJU_LEAF2_MAXPOP1, uint16_t *, cJU_JPLEAF2,
+ j__udyLeaf1ToLeaf2, j__udyAllocJLL2, JL_LEAF2VALUEAREA,
+ JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+ case cJU_JPBRANCH_B3:
+
+ JU_BRANCHB(3, cJU_LEAF3_MAXPOP1, uint8_t *, cJU_JPLEAF3,
+ j__udyLeaf2ToLeaf3, j__udyAllocJLL3, JL_LEAF3VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY3_LONG_TO_PINDEX);
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4:
+
+ JU_BRANCHB(4, cJU_LEAF4_MAXPOP1, uint32_t *, cJU_JPLEAF4,
+ j__udyLeaf3ToLeaf4, j__udyAllocJLL4, JL_LEAF4VALUEAREA,
+ JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+ case cJU_JPBRANCH_B5:
+
+ JU_BRANCHB(5, cJU_LEAF5_MAXPOP1, uint8_t *, cJU_JPLEAF5,
+ j__udyLeaf4ToLeaf5, j__udyAllocJLL5, JL_LEAF5VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY5_LONG_TO_PINDEX);
+
+ case cJU_JPBRANCH_B6:
+
+ JU_BRANCHB(6, cJU_LEAF6_MAXPOP1, uint8_t *, cJU_JPLEAF6,
+ j__udyLeaf5ToLeaf6, j__udyAllocJLL6, JL_LEAF6VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY6_LONG_TO_PINDEX);
+
+ case cJU_JPBRANCH_B7:
+
+ JU_BRANCHB(7, cJU_LEAF7_MAXPOP1, uint8_t *, cJU_JPLEAF7,
+ j__udyLeaf6ToLeaf7, j__udyAllocJLL7, JL_LEAF7VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY7_LONG_TO_PINDEX);
+#endif // JU_64BIT
+
+// A top-level BranchB is different and cannot use JU_BRANCHB(): Dont try to
+// compress to a (LEAFW) leaf yet, but leave this for a later deletion
+// (hysteresis > 0); and the next JP type depends on the system word size; so
+// dont use JU_BRANCH_KEEP():
+
+ case cJU_JPBRANCH_B:
+ {
+ Pjbb_t Pjbb; // BranchB to modify.
+ Word_t subexp; // current subexpanse number.
+ Word_t subexp2; // in second-level loop.
+ BITMAPB_t bitmap; // portion for this subexpanse.
+ BITMAPB_t bitmask; // with digits bit set.
+ Pjp_t Pjp2Raw; // one subexpanses subarray.
+ Pjp_t Pjp2;
+ Word_t numJPs; // in one subexpanse.
+
+ level = cJU_ROOTSTATE;
+ digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+
+ // fall through:
+
+
+// COMMON CODE FOR KEEPING AND DESCENDING THROUGH A BRANCHB:
+//
+// Come here with level and digit set.
+
+BranchBKeep:
+ Pjbb = P_JBB(Pjp->jp_Addr);
+ subexp = digit / cJU_BITSPERSUBEXPB;
+ bitmap = JU_JBB_BITMAP(Pjbb, subexp);
+ bitmask = JU_BITPOSMASKB(digit);
+ assert(bitmap & bitmask); // Index valid => digits bit is set.
+ DBGCODE(parentJPtype = JU_JPTYPE(Pjp);)
+
+// Compute digits offset into the bitmap, with a fast method if all bits are
+// set:
+
+ offset = ((bitmap == (cJU_FULLBITMAPB)) ?
+ digit % cJU_BITSPERSUBEXPB :
+ j__udyCountBitsB(bitmap & JU_MASKLOWEREXC(bitmask)));
+
+ Pjp2Raw = JU_JBB_PJP(Pjbb, subexp);
+ Pjp2 = P_JP(Pjp2Raw);
+ assert(Pjp2 != (Pjp_t) NULL); // valid subexpanse pointer.
+
+// If not at a (deletable) JPIMMED_*_01, continue the walk (to descend through
+// the BranchB):
+
+ if (JU_JPTYPE(Pjp2 + offset) != cJU_JPIMMED_1_01 + level - 2)
+ {
+ Pjp = Pjp2 + offset;
+ break;
+ }
+
+// At JPIMMED_*_01: Ensure the index is in the right expanse, then delete the
+// Immed from the BranchB:
+
+ assert(JU_JPDCDPOP0(Pjp2 + offset)
+ == JU_TRIMTODCDSIZE(Index));
+
+// If only one index is left in the subexpanse, free the JP array:
+
+ if ((numJPs = j__udyCountBitsB(bitmap)) == 1)
+ {
+ j__udyFreeJBBJP(Pjp2Raw, /* pop1 = */ 1, Pjpm);
+ JU_JBB_PJP(Pjbb, subexp) = (Pjp_t) NULL;
+ }
+
+// Shrink JP array in-place:
+
+ else if (JU_BRANCHBJPGROWINPLACE(numJPs - 1))
+ {
+ assert(numJPs > 0);
+ JU_DELETEINPLACE(Pjp2, numJPs, offset, ignore);
+ }
+
+// JP array would end up too large; compress it to a smaller one:
+
+ else
+ {
+ Pjp_t PjpnewRaw;
+ Pjp_t Pjpnew;
+
+ if ((PjpnewRaw = j__udyAllocJBBJP(numJPs - 1, Pjpm))
+ == (Pjp_t) NULL) return(-1);
+ Pjpnew = P_JP(PjpnewRaw);
+
+ JU_DELETECOPY(Pjpnew, Pjp2, numJPs, offset, ignore);
+ j__udyFreeJBBJP(Pjp2Raw, numJPs, Pjpm); // old.
+
+ JU_JBB_PJP(Pjbb, subexp) = PjpnewRaw;
+ }
+
+// Clear digits bit in the bitmap:
+
+ JU_JBB_BITMAP(Pjbb, subexp) ^= bitmask;
+
+// If the current subexpanse alone is still too large for a BranchL (with
+// hysteresis = 1), the delete is all done:
+
+ if (numJPs > cJU_BRANCHLMAXJPS) return(1);
+
+// Consider shrinking the current BranchB to a BranchL:
+//
+// Check the numbers of JPs in other subexpanses in the BranchL. Upon reaching
+// the critical number of numJPs (which could be right at the start; again,
+// with hysteresis = 1), its faster to just watch for any non-empty subexpanse
+// than to count bits in each subexpanse. Upon finding too many JPs, give up
+// on shrinking the BranchB.
+
+ for (subexp2 = 0; subexp2 < cJU_NUMSUBEXPB; ++subexp2)
+ {
+ if (subexp2 == subexp) continue; // skip current subexpanse.
+
+ if ((numJPs == cJU_BRANCHLMAXJPS) ?
+ JU_JBB_BITMAP(Pjbb, subexp2) :
+ ((numJPs += j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp2)))
+ > cJU_BRANCHLMAXJPS))
+ {
+ return(1); // too many JPs, cannot shrink.
+ }
+ }
+
+// Shrink current BranchB to a BranchL:
+//
+// Note: In this rare case, ignore the return value, do not pass it to the
+// caller, because the deletion is already successfully completed and the
+// caller(s) must decrement population counts. The only errors expected from
+// this call are JU_ERRNO_NOMEM and JU_ERRNO_OVERRUN, neither of which is worth
+// forwarding from this point. See also 4.1, 4.8, and 4.15 of this file.
+
+ (void) j__udyBranchBToBranchL(Pjp, Pjpm);
+ return(1);
+
+ } // case.
+
+
+// ****************************************************************************
+// UNCOMPRESSED BRANCH:
+//
+// MACROS FOR COMMON CODE:
+//
+// Note the reuse of common macros here, defined earlier: JU_PVALUE*.
+//
+// Compress a BranchU into a leaf one index size larger:
+//
+// Allocate a new leaf, walk the JPs in the old BranchU and pack their contents
+// into the new leaf (of type NewJPType), free the old BranchU, and finally
+// restart the switch to delete Index from the new leaf. Variables Pjp, Pjpm,
+// digit, and pop1 are in the context.
+//
+// Note: Its no accident that the interface to JU_BRANCHU_COMPRESS() is
+// nearly identical to JU_BRANCHL_COMPRESS(); just NullJPType is added. The
+// details differ in how to traverse the branchs JPs --
+//
+// -- and also, what to do upon encountering a cJU_JPIMMED_*_01 JP. In
+// BranchLs and BranchBs the JP must be deleted, but in a BranchU its merely
+// converted to a null JP, and this is done by other switch cases, so the "keep
+// branch" situation is simpler here and JU_BRANCH_KEEP() is not used. Also,
+// theres no code to convert a BranchU to a BranchB since counting the JPs in
+// a BranchU is (at least presently) expensive, and besides, keeping around a
+// BranchU is form of hysteresis.
+
+#define JU_BRANCHU_COMPRESS(cLevel,LeafType,MaxPop1,NullJPType,NewJPType, \
+ LeafToLeaf,Alloc,ValueArea,CopyImmed,CopyIndex) \
+ { \
+ LeafType Pleaf; \
+ Pjbu_t PjbuRaw = (Pjbu_t) (Pjp->jp_Addr); \
+ Pjp_t Pjp2 = JU_JBU_PJP0(Pjp); \
+ Word_t ldigit; /* larger than uint8_t */ \
+ \
+ if ((PjllnewRaw = Alloc(MaxPop1, Pjpm)) == 0) return(-1); \
+ Pjllnew = P_JLL(PjllnewRaw); \
+ Pleaf = (LeafType) Pjllnew; \
+ JUDYLCODE(Pjv = ValueArea(Pleaf, MaxPop1);) \
+ \
+ for (ldigit = 0; ldigit < cJU_BRANCHUNUMJPS; ++ldigit, ++Pjp2) \
+ { \
+ /* fast-process common types: */ \
+ if (JU_JPTYPE(Pjp2) == (NullJPType)) continue; \
+ CopyImmed(cLevel, Pjp2, CopyIndex); \
+ \
+ pop1 = LeafToLeaf(Pleaf, JU_PVALUEPASS Pjp2, \
+ JU_DIGITTOSTATE(ldigit, cLevel), \
+ (Pvoid_t) Pjpm); \
+ Pleaf = (LeafType) (((Word_t) Pleaf) + ((cLevel) * pop1)); \
+ JUDYLCODE(Pjv += pop1;) \
+ } \
+ assert(((((Word_t) Pleaf) - ((Word_t) Pjllnew)) / (cLevel)) == (MaxPop1)); \
+ JUDYLCODE(assert((Pjv - ValueArea(Pjllnew, MaxPop1)) == (MaxPop1));) \
+ DBGCODE(JudyCheckSorted(Pjllnew, MaxPop1, cLevel);) \
+ \
+ j__udyFreeJBU(PjbuRaw, Pjpm); \
+ \
+ Pjp->jp_Type = (NewJPType); \
+ Pjp->jp_Addr = (Word_t) PjllnewRaw; \
+ goto ContinueDelWalk; /* delete from new leaf */ \
+ }
+
+// Overall common code for initial BranchU deletion handling:
+//
+// Assert that Index is in the branch, then see if a BranchU should be kept or
+// else compressed to a leaf. Variables level, Index, Pjp, and pop1 are in the
+// context.
+//
+// Note: BranchU handling differs from BranchL and BranchB as described above.
+
+#define JU_BRANCHU(cLevel,MaxPop1,LeafType,NullJPType,NewJPType, \
+ LeafToLeaf,Alloc,ValueArea,CopyImmed,CopyIndex) \
+ \
+ assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cLevel)); \
+ assert(ParentLevel > (cLevel)); \
+ DBGCODE(parentJPtype = JU_JPTYPE(Pjp);) \
+ \
+ pop1 = JU_JPBRANCH_POP0(Pjp, cLevel) + 1; \
+ \
+ if (pop1 > (MaxPop1)) /* hysteresis = 1 */ \
+ { \
+ level = (cLevel); \
+ Pjp = P_JP(Pjp->jp_Addr) + JU_DIGITATSTATE(Index, cLevel);\
+ break; /* descend to next level */ \
+ } \
+ assert(pop1 == (MaxPop1)); \
+ \
+ JU_BRANCHU_COMPRESS(cLevel, LeafType, MaxPop1, NullJPType, NewJPType, \
+ LeafToLeaf, Alloc, ValueArea, CopyImmed, CopyIndex)
+
+
+// END OF MACROS, START OF CASES:
+//
+// Note: Its no accident that the macro calls for these cases is nearly
+// identical to the code for BranchLs, with the addition of cJU_JPNULL*
+// parameters only needed for BranchUs.
+
+ case cJU_JPBRANCH_U2:
+
+ JU_BRANCHU(2, cJU_LEAF2_MAXPOP1, uint16_t *,
+ cJU_JPNULL1, cJU_JPLEAF2,
+ j__udyLeaf1ToLeaf2, j__udyAllocJLL2, JL_LEAF2VALUEAREA,
+ JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+ case cJU_JPBRANCH_U3:
+
+ JU_BRANCHU(3, cJU_LEAF3_MAXPOP1, uint8_t *,
+ cJU_JPNULL2, cJU_JPLEAF3,
+ j__udyLeaf2ToLeaf3, j__udyAllocJLL3, JL_LEAF3VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY3_LONG_TO_PINDEX);
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U4:
+
+ JU_BRANCHU(4, cJU_LEAF4_MAXPOP1, uint32_t *,
+ cJU_JPNULL3, cJU_JPLEAF4,
+ j__udyLeaf3ToLeaf4, j__udyAllocJLL4, JL_LEAF4VALUEAREA,
+ JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+ case cJU_JPBRANCH_U5:
+
+ JU_BRANCHU(5, cJU_LEAF5_MAXPOP1, uint8_t *,
+ cJU_JPNULL4, cJU_JPLEAF5,
+ j__udyLeaf4ToLeaf5, j__udyAllocJLL5, JL_LEAF5VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY5_LONG_TO_PINDEX);
+
+ case cJU_JPBRANCH_U6:
+
+ JU_BRANCHU(6, cJU_LEAF6_MAXPOP1, uint8_t *,
+ cJU_JPNULL5, cJU_JPLEAF6,
+ j__udyLeaf5ToLeaf6, j__udyAllocJLL6, JL_LEAF6VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY6_LONG_TO_PINDEX);
+
+ case cJU_JPBRANCH_U7:
+
+ JU_BRANCHU(7, cJU_LEAF7_MAXPOP1, uint8_t *,
+ cJU_JPNULL6, cJU_JPLEAF7,
+ j__udyLeaf6ToLeaf7, j__udyAllocJLL7, JL_LEAF7VALUEAREA,
+ JU_BRANCH_COPY_IMMED_ODD, JU_COPY7_LONG_TO_PINDEX);
+#endif // JU_64BIT
+
+// A top-level BranchU is different and cannot use JU_BRANCHU(): Dont try to
+// compress to a (LEAFW) leaf yet, but leave this for a later deletion
+// (hysteresis > 0); just descend through the BranchU:
+
+ case cJU_JPBRANCH_U:
+
+ DBGCODE(parentJPtype = JU_JPTYPE(Pjp);)
+
+ level = cJU_ROOTSTATE;
+ Pjp = P_JP(Pjp->jp_Addr) + JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+ break;
+
+
+// ****************************************************************************
+// LINEAR LEAF:
+//
+// State transitions while deleting an Index, the inverse of the similar table
+// that appears in JudyIns.c:
+//
+// Note: In JudyIns.c this table is not needed and does not appear until the
+// Immed handling code; because once a Leaf is reached upon growing the tree,
+// the situation remains simpler, but for deleting indexes, the complexity
+// arises when leaves must compress to Immeds.
+//
+// Note: There are other transitions possible too, not shown here, such as to
+// a leaf one level higher.
+//
+// (Yes, this is very terse... Study it and it will make sense.)
+// (Note, parts of this diagram are repeated below for quick reference.)
+//
+// reformat JP here for Judy1 only, from word-1 to word-2
+// |
+// JUDY1 && JU_64BIT JUDY1 || JU_64BIT |
+// V
+// (*) Leaf1 [[ => 1_15..08 ] => 1_07 => ... => 1_04 ] => 1_03 => 1_02 => 1_01
+// Leaf2 [[ => 2_07..04 ] => 2_03 => 2_02 ] => 2_01
+// Leaf3 [[ => 3_05..03 ] => 3_02 ] => 3_01
+// JU_64BIT only:
+// Leaf4 [[ => 4_03..02 ]] => 4_01
+// Leaf5 [[ => 5_03..02 ]] => 5_01
+// Leaf6 [[ => 6_02 ]] => 6_01
+// Leaf7 [[ => 7_02 ]] => 7_01
+//
+// (*) For Judy1 & 64-bit, go directly from a LeafB1 to cJU_JPIMMED_1_15; skip
+// Leaf1, as described in Judy1.h regarding cJ1_JPLEAF1.
+//
+// MACROS FOR COMMON CODE:
+//
+// (De)compress a LeafX into a LeafY one index size (cIS) larger (X+1 = Y):
+//
+// This is only possible when the current leaf is under a narrow pointer
+// ((ParentLevel - 1) > cIS) and its population fits in a higher-level leaf.
+// Variables ParentLevel, pop1, PjllnewRaw, Pjllnew, Pjpm, and Index are in the
+// context.
+//
+// Note: Doing an "uplevel" doesnt occur until the old leaf can be compressed
+// up one level BEFORE deleting an index; that is, hysteresis = 1.
+//
+// Note: LeafType, MaxPop1, NewJPType, and Alloc refer to the up-level leaf,
+// not the current leaf.
+//
+// Note: 010327: Fixed bug where the jp_DcdPopO next-uplevel digit (byte)
+// above the current Pop0 value was not being cleared. When upleveling, one
+// digit in jp_DcdPopO "moves" from being part of the Dcd subfield to the Pop0
+// subfield, but since a leaf maxpop1 is known to be <= 1 byte in size, the new
+// Pop0 byte should always be zero. This is easy to overlook because
+// JU_JPLEAF_POP0() "knows" to only use the LSB of Pop0 (for efficiency) and
+// ignore the other bytes... Until someone uses cJU_POP0MASK() instead of
+// JU_JPLEAF_POP0(), such as in JudyInsertBranch.c.
+//
+// TBD: Should JudyInsertBranch.c use JU_JPLEAF_POP0() rather than
+// cJU_POP0MASK(), for efficiency? Does it know for sure its a narrow pointer
+// under the leaf? Not necessarily.
+
+#define JU_LEAF_UPLEVEL(cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf, \
+ Alloc,ValueArea) \
+ \
+ assert(((ParentLevel - 1) == (cIS)) || (pop1 >= (MaxPop1))); \
+ \
+ if (((ParentLevel - 1) > (cIS)) /* under narrow pointer */ \
+ && (pop1 == (MaxPop1))) /* hysteresis = 1 */ \
+ { \
+ Word_t D_cdP0; \
+ if ((PjllnewRaw = Alloc(MaxPop1, Pjpm)) == 0) return(-1); \
+ Pjllnew = P_JLL(PjllnewRaw); \
+ JUDYLCODE(Pjv = ValueArea((LeafType) Pjllnew, MaxPop1);) \
+ \
+ (void) LeafToLeaf((LeafType) Pjllnew, JU_PVALUEPASS Pjp, \
+ Index & cJU_DCDMASK(cIS), /* TBD, Doug says */ \
+ (Pvoid_t) Pjpm); \
+ DBGCODE(JudyCheckSorted(Pjllnew, MaxPop1, cIS + 1);) \
+ \
+ D_cdP0 = (~cJU_MASKATSTATE((cIS) + 1)) & JU_JPDCDPOP0(Pjp); \
+ JU_JPSETADT(Pjp, (Word_t)PjllnewRaw, D_cdP0, NewJPType); \
+ goto ContinueDelWalk; /* delete from new leaf */ \
+ }
+
+
+// For Leaf3, only support JU_LEAF_UPLEVEL on a 64-bit system, and for Leaf7,
+// there is no JU_LEAF_UPLEVEL:
+//
+// Note: Theres no way here to go from Leaf3 [Leaf7] to LEAFW on a 32-bit
+// [64-bit] system. Thats handled in the main code, because its different in
+// that a JPM is involved.
+
+#ifndef JU_64BIT // 32-bit.
+#define JU_LEAF_UPLEVEL64(cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf, \
+ Alloc,ValueArea) // null.
+#else
+#define JU_LEAF_UPLEVEL64(cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf, \
+ Alloc,ValueArea) \
+ JU_LEAF_UPLEVEL (cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf, \
+ Alloc,ValueArea)
+#define JU_LEAF_UPLEVEL_NONE(cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf, \
+ Alloc,ValueArea) // null.
+#endif
+
+// Compress a Leaf* with pop1 = 2, or a JPIMMED_*_02, into a JPIMMED_*_01:
+//
+// Copy whichever Index is NOT being deleted (and assert that the other one is
+// found; Index must be valid). This requires special handling of the Index
+// bytes (and value area). Variables Pjp, Index, offset, and Pleaf are in the
+// context, offset is modified to the undeleted Index, and Pjp is modified
+// including jp_Addr.
+
+
+#define JU_TOIMMED_01_EVEN(cIS,ignore1,ignore2) \
+{ \
+ Word_t D_cdP0; \
+ Word_t A_ddr = 0; \
+ uint8_t T_ype = JU_JPTYPE(Pjp); \
+ offset = (Pleaf[0] == JU_LEASTBYTES(Index, cIS)); /* undeleted Ind */ \
+ assert(Pleaf[offset ? 0 : 1] == JU_LEASTBYTES(Index, cIS)); \
+ D_cdP0 = (Index & cJU_DCDMASK(cIS)) | Pleaf[offset]; \
+JUDYLCODE(A_ddr = Pjv[offset];) \
+ JU_JPSETADT(Pjp, A_ddr, D_cdP0, T_ype); \
+}
+
+#define JU_TOIMMED_01_ODD(cIS,SearchLeaf,CopyPIndex) \
+ { \
+ Word_t D_cdP0; \
+ Word_t A_ddr = 0; \
+ uint8_t T_ype = JU_JPTYPE(Pjp); \
+ \
+ offset = SearchLeaf(Pleaf, 2, Index); \
+ assert(offset >= 0); /* Index must be valid */ \
+ CopyPIndex(D_cdP0, & (Pleaf[offset ? 0 : cIS])); \
+ D_cdP0 |= Index & cJU_DCDMASK(cIS); \
+ JUDYLCODE(A_ddr = Pjv[offset ? 0 : 1];) \
+ JU_JPSETADT(Pjp, A_ddr, D_cdP0, T_ype); \
+ }
+
+
+// Compress a Leaf* into a JPIMMED_*_0[2+]:
+//
+// This occurs as soon as its possible, with hysteresis = 0. Variables pop1,
+// Pleaf, offset, and Pjpm are in the context.
+//
+// TBD: Explain why hysteresis = 0 here, rather than > 0. Probably because
+// the insert code assumes if the population is small enough, an Immed is used,
+// not a leaf.
+//
+// The differences between Judy1 and JudyL with respect to value area handling
+// are just too large for completely common code between them... Oh well, some
+// big ifdefs follow.
+
+#ifdef JUDY1
+
+#define JU_LEAF_TOIMMED(cIS,LeafType,MaxPop1,BaseJPType,ignore1,\
+ ignore2,ignore3,ignore4, \
+ DeleteCopy,FreeLeaf) \
+ \
+ assert(pop1 > (MaxPop1)); \
+ \
+ if ((pop1 - 1) == (MaxPop1)) /* hysteresis = 0 */ \
+ { \
+ Pjll_t PjllRaw = (Pjll_t) (Pjp->jp_Addr); \
+ DeleteCopy((LeafType) (Pjp->jp_1Index), Pleaf, pop1, offset, cIS); \
+ DBGCODE(JudyCheckSorted((Pjll_t) (Pjp->jp_1Index), pop1-1, cIS);) \
+ Pjp->jp_Type = (BaseJPType) - 1 + (MaxPop1) - 1; \
+ FreeLeaf(PjllRaw, pop1, Pjpm); \
+ return(1); \
+ }
+
+#else // JUDYL
+
+// Pjv is also in the context.
+
+#define JU_LEAF_TOIMMED(cIS,LeafType,MaxPop1,BaseJPType,ignore1,\
+ ignore2,ignore3,ignore4, \
+ DeleteCopy,FreeLeaf) \
+ \
+ assert(pop1 > (MaxPop1)); \
+ \
+ if ((pop1 - 1) == (MaxPop1)) /* hysteresis = 0 */ \
+ { \
+ Pjll_t PjllRaw = (Pjll_t) (Pjp->jp_Addr); \
+ Pjv_t PjvnewRaw; \
+ Pjv_t Pjvnew; \
+ \
+ if ((PjvnewRaw = j__udyLAllocJV(pop1 - 1, Pjpm)) \
+ == (Pjv_t) NULL) return(-1); \
+ JUDYLCODE(Pjvnew = P_JV(PjvnewRaw);) \
+ \
+ DeleteCopy((LeafType) (Pjp->jp_LIndex), Pleaf, pop1, offset, cIS); \
+ JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, cIS); \
+ DBGCODE(JudyCheckSorted((Pjll_t) (Pjp->jp_LIndex), pop1-1, cIS);) \
+ FreeLeaf(PjllRaw, pop1, Pjpm); \
+ Pjp->jp_Addr = (Word_t) PjvnewRaw; \
+ Pjp->jp_Type = (BaseJPType) - 2 + (MaxPop1); \
+ return(1); \
+ }
+
+// A complicating factor for JudyL & 32-bit is that Leaf2..3, and for JudyL &
+// 64-bit Leaf 4..7, go directly to an Immed*_01, where the value is stored in
+// jp_Addr and not in a separate LeafV. For efficiency, use the following
+// macro in cases where it can apply; it is rigged to do the right thing.
+// Unfortunately, this requires the calling code to "know" the transition table
+// and call the right macro.
+//
+// This variant compresses a Leaf* with pop1 = 2 into a JPIMMED_*_01:
+
+#define JU_LEAF_TOIMMED_01(cIS,LeafType,MaxPop1,ignore,Immed01JPType, \
+ ToImmed,SearchLeaf,CopyPIndex, \
+ DeleteCopy,FreeLeaf) \
+ \
+ assert(pop1 > (MaxPop1)); \
+ \
+ if ((pop1 - 1) == (MaxPop1)) /* hysteresis = 0 */ \
+ { \
+ Pjll_t PjllRaw = (Pjll_t) (Pjp->jp_Addr); \
+ ToImmed(cIS, SearchLeaf, CopyPIndex); \
+ FreeLeaf(PjllRaw, pop1, Pjpm); \
+ Pjp->jp_Type = (Immed01JPType); \
+ return(1); \
+ }
+#endif // JUDYL
+
+// See comments above about these:
+//
+// Note: Here "23" means index size 2 or 3, and "47" means 4..7.
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+#define JU_LEAF_TOIMMED_23(cIS,LeafType,MaxPop1,BaseJPType,Immed01JPType, \
+ ToImmed,SearchLeaf,CopyPIndex, \
+ DeleteCopy,FreeLeaf) \
+ JU_LEAF_TOIMMED( cIS,LeafType,MaxPop1,BaseJPType,ignore1, \
+ ignore2,ignore3,ignore4, \
+ DeleteCopy,FreeLeaf)
+#else // JUDYL && 32-bit
+#define JU_LEAF_TOIMMED_23(cIS,LeafType,MaxPop1,BaseJPType,Immed01JPType, \
+ ToImmed,SearchLeaf,CopyPIndex, \
+ DeleteCopy,FreeLeaf) \
+ JU_LEAF_TOIMMED_01(cIS,LeafType,MaxPop1,ignore,Immed01JPType, \
+ ToImmed,SearchLeaf,CopyPIndex, \
+ DeleteCopy,FreeLeaf)
+#endif
+
+#ifdef JU_64BIT
+#ifdef JUDY1
+#define JU_LEAF_TOIMMED_47(cIS,LeafType,MaxPop1,BaseJPType,Immed01JPType, \
+ ToImmed,SearchLeaf,CopyPIndex, \
+ DeleteCopy,FreeLeaf) \
+ JU_LEAF_TOIMMED( cIS,LeafType,MaxPop1,BaseJPType,ignore1, \
+ ignore2,ignore3,ignore4, \
+ DeleteCopy,FreeLeaf)
+#else // JUDYL && 64-bit
+#define JU_LEAF_TOIMMED_47(cIS,LeafType,MaxPop1,BaseJPType,Immed01JPType, \
+ ToImmed,SearchLeaf,CopyPIndex, \
+ DeleteCopy,FreeLeaf) \
+ JU_LEAF_TOIMMED_01(cIS,LeafType,MaxPop1,ignore,Immed01JPType, \
+ ToImmed,SearchLeaf,CopyPIndex, \
+ DeleteCopy,FreeLeaf)
+#endif // JUDYL
+#endif // JU_64BIT
+
+// Compress a Leaf* in place:
+//
+// Here hysteresis = 0 (no memory is wasted). Variables pop1, Pleaf, and
+// offset, and for JudyL, Pjv, are in the context.
+
+#ifdef JUDY1
+#define JU_LEAF_INPLACE(cIS,GrowInPlace,DeleteInPlace) \
+ if (GrowInPlace(pop1 - 1)) /* hysteresis = 0 */ \
+ { \
+ DeleteInPlace(Pleaf, pop1, offset, cIS); \
+ DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);) \
+ return(1); \
+ }
+#else
+#define JU_LEAF_INPLACE(cIS,GrowInPlace,DeleteInPlace) \
+ if (GrowInPlace(pop1 - 1)) /* hysteresis = 0 */ \
+ { \
+ DeleteInPlace(Pleaf, pop1, offset, cIS); \
+/**/ JU_DELETEINPLACE(Pjv, pop1, offset, ignore); \
+ DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);) \
+ return(1); \
+ }
+#endif
+
+// Compress a Leaf* into a smaller memory object of the same JP type:
+//
+// Variables PjllnewRaw, Pjllnew, Pleafpop1, Pjpm, PleafRaw, Pleaf, and offset
+// are in the context.
+
+#ifdef JUDY1
+
+#define JU_LEAF_SHRINK(cIS,LeafType,DeleteCopy,Alloc,FreeLeaf,ValueArea) \
+ if ((PjllnewRaw = Alloc(pop1 - 1, Pjpm)) == 0) return(-1); \
+ Pjllnew = P_JLL(PjllnewRaw); \
+ DeleteCopy((LeafType) Pjllnew, Pleaf, pop1, offset, cIS); \
+ DBGCODE(JudyCheckSorted(Pjllnew, pop1 - 1, cIS);) \
+ FreeLeaf(PleafRaw, pop1, Pjpm); \
+ Pjp->jp_Addr = (Word_t) PjllnewRaw; \
+ return(1)
+
+#else // JUDYL
+
+#define JU_LEAF_SHRINK(cIS,LeafType,DeleteCopy,Alloc,FreeLeaf,ValueArea) \
+ { \
+/**/ Pjv_t Pjvnew; \
+ \
+ if ((PjllnewRaw = Alloc(pop1 - 1, Pjpm)) == 0) return(-1); \
+ Pjllnew = P_JLL(PjllnewRaw); \
+/**/ Pjvnew = ValueArea(Pjllnew, pop1 - 1); \
+ DeleteCopy((LeafType) Pjllnew, Pleaf, pop1, offset, cIS); \
+/**/ JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, cIS); \
+ DBGCODE(JudyCheckSorted(Pjllnew, pop1 - 1, cIS);) \
+ FreeLeaf(PleafRaw, pop1, Pjpm); \
+ Pjp->jp_Addr = (Word_t) PjllnewRaw; \
+ return(1); \
+ }
+#endif // JUDYL
+
+// Overall common code for Leaf* deletion handling:
+//
+// See if the leaf can be:
+// - (de)compressed to one a level higher (JU_LEAF_UPLEVEL()), or if not,
+// - compressed to an Immediate JP (JU_LEAF_TOIMMED()), or if not,
+// - shrunk in place (JU_LEAF_INPLACE()), or if none of those, then
+// - shrink the leaf to a smaller chunk of memory (JU_LEAF_SHRINK()).
+//
+// Variables Pjp, pop1, Index, and offset are in the context.
+// The *Up parameters refer to a leaf one level up, if there is any.
+
+#define JU_LEAF(cIS, \
+ UpLevel, \
+ LeafTypeUp,MaxPop1Up,LeafJPTypeUp,LeafToLeaf, \
+ AllocUp,ValueAreaUp, \
+ LeafToImmed,ToImmed,CopyPIndex, \
+ LeafType,ImmedMaxPop1,ImmedBaseJPType,Immed01JPType, \
+ SearchLeaf,GrowInPlace,DeleteInPlace,DeleteCopy, \
+ Alloc,FreeLeaf,ValueArea) \
+ { \
+ Pjll_t PleafRaw; \
+ LeafType Pleaf; \
+ \
+ assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cIS)); \
+ assert(ParentLevel > (cIS)); \
+ \
+ PleafRaw = (Pjll_t) (Pjp->jp_Addr); \
+ Pleaf = (LeafType) P_JLL(PleafRaw); \
+ pop1 = JU_JPLEAF_POP0(Pjp) + 1; \
+ \
+ UpLevel(cIS, LeafTypeUp, MaxPop1Up, LeafJPTypeUp, \
+ LeafToLeaf, AllocUp, ValueAreaUp); \
+ \
+ offset = SearchLeaf(Pleaf, pop1, Index); \
+ assert(offset >= 0); /* Index must be valid */ \
+ JUDYLCODE(Pjv = ValueArea(Pleaf, pop1);) \
+ \
+ LeafToImmed(cIS, LeafType, ImmedMaxPop1, \
+ ImmedBaseJPType, Immed01JPType, \
+ ToImmed, SearchLeaf, CopyPIndex, \
+ DeleteCopy, FreeLeaf); \
+ \
+ JU_LEAF_INPLACE(cIS, GrowInPlace, DeleteInPlace); \
+ \
+ JU_LEAF_SHRINK(cIS, LeafType, DeleteCopy, Alloc, FreeLeaf, \
+ ValueArea); \
+ }
+
+// END OF MACROS, START OF CASES:
+//
+// (*) Leaf1 [[ => 1_15..08 ] => 1_07 => ... => 1_04 ] => 1_03 => 1_02 => 1_01
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1:
+
+ JU_LEAF(1,
+ JU_LEAF_UPLEVEL, uint16_t *, cJU_LEAF2_MAXPOP1, cJU_JPLEAF2,
+ j__udyLeaf1ToLeaf2, j__udyAllocJLL2, JL_LEAF2VALUEAREA,
+ JU_LEAF_TOIMMED, ignore, ignore,
+ uint8_t *, cJU_IMMED1_MAXPOP1,
+ cJU_JPIMMED_1_02, cJU_JPIMMED_1_01, j__udySearchLeaf1,
+ JU_LEAF1GROWINPLACE, JU_DELETEINPLACE, JU_DELETECOPY,
+ j__udyAllocJLL1, j__udyFreeJLL1, JL_LEAF1VALUEAREA);
+#endif
+
+// A complicating factor is that for JudyL & 32-bit, a Leaf2 must go directly
+// to an Immed 2_01 and a Leaf3 must go directly to an Immed 3_01:
+//
+// Leaf2 [[ => 2_07..04 ] => 2_03 => 2_02 ] => 2_01
+// Leaf3 [[ => 3_05..03 ] => 3_02 ] => 3_01
+//
+// Hence use JU_LEAF_TOIMMED_23 instead of JU_LEAF_TOIMMED in the cases below,
+// and also the parameters ToImmed and, for odd index sizes, CopyPIndex, are
+// required.
+
+ case cJU_JPLEAF2:
+
+ JU_LEAF(2,
+ JU_LEAF_UPLEVEL, uint8_t *, cJU_LEAF3_MAXPOP1, cJU_JPLEAF3,
+ j__udyLeaf2ToLeaf3, j__udyAllocJLL3, JL_LEAF3VALUEAREA,
+ JU_LEAF_TOIMMED_23, JU_TOIMMED_01_EVEN, ignore,
+ uint16_t *, cJU_IMMED2_MAXPOP1,
+ cJU_JPIMMED_2_02, cJU_JPIMMED_2_01, j__udySearchLeaf2,
+ JU_LEAF2GROWINPLACE, JU_DELETEINPLACE, JU_DELETECOPY,
+ j__udyAllocJLL2, j__udyFreeJLL2, JL_LEAF2VALUEAREA);
+
+// On 32-bit there is no transition to "uplevel" for a Leaf3, so use
+// JU_LEAF_UPLEVEL64 instead of JU_LEAF_UPLEVEL:
+
+ case cJU_JPLEAF3:
+
+ JU_LEAF(3,
+ JU_LEAF_UPLEVEL64, uint32_t *, cJU_LEAF4_MAXPOP1,
+ cJU_JPLEAF4,
+ j__udyLeaf3ToLeaf4, j__udyAllocJLL4, JL_LEAF4VALUEAREA,
+ JU_LEAF_TOIMMED_23,
+ JU_TOIMMED_01_ODD, JU_COPY3_PINDEX_TO_LONG,
+ uint8_t *, cJU_IMMED3_MAXPOP1,
+ cJU_JPIMMED_3_02, cJU_JPIMMED_3_01, j__udySearchLeaf3,
+ JU_LEAF3GROWINPLACE, JU_DELETEINPLACE_ODD,
+ JU_DELETECOPY_ODD,
+ j__udyAllocJLL3, j__udyFreeJLL3, JL_LEAF3VALUEAREA);
+
+#ifdef JU_64BIT
+
+// A complicating factor is that for JudyL & 64-bit, a Leaf[4-7] must go
+// directly to an Immed [4-7]_01:
+//
+// Leaf4 [[ => 4_03..02 ]] => 4_01
+// Leaf5 [[ => 5_03..02 ]] => 5_01
+// Leaf6 [[ => 6_02 ]] => 6_01
+// Leaf7 [[ => 7_02 ]] => 7_01
+//
+// Hence use JU_LEAF_TOIMMED_47 instead of JU_LEAF_TOIMMED in the cases below.
+
+ case cJU_JPLEAF4:
+
+ JU_LEAF(4,
+ JU_LEAF_UPLEVEL, uint8_t *, cJU_LEAF5_MAXPOP1, cJU_JPLEAF5,
+ j__udyLeaf4ToLeaf5, j__udyAllocJLL5, JL_LEAF5VALUEAREA,
+ JU_LEAF_TOIMMED_47, JU_TOIMMED_01_EVEN, ignore,
+ uint32_t *, cJU_IMMED4_MAXPOP1,
+ cJ1_JPIMMED_4_02, cJU_JPIMMED_4_01, j__udySearchLeaf4,
+ JU_LEAF4GROWINPLACE, JU_DELETEINPLACE, JU_DELETECOPY,
+ j__udyAllocJLL4, j__udyFreeJLL4, JL_LEAF4VALUEAREA);
+
+ case cJU_JPLEAF5:
+
+ JU_LEAF(5,
+ JU_LEAF_UPLEVEL, uint8_t *, cJU_LEAF6_MAXPOP1, cJU_JPLEAF6,
+ j__udyLeaf5ToLeaf6, j__udyAllocJLL6, JL_LEAF6VALUEAREA,
+ JU_LEAF_TOIMMED_47,
+ JU_TOIMMED_01_ODD, JU_COPY5_PINDEX_TO_LONG,
+ uint8_t *, cJU_IMMED5_MAXPOP1,
+ cJ1_JPIMMED_5_02, cJU_JPIMMED_5_01, j__udySearchLeaf5,
+ JU_LEAF5GROWINPLACE, JU_DELETEINPLACE_ODD,
+ JU_DELETECOPY_ODD,
+ j__udyAllocJLL5, j__udyFreeJLL5, JL_LEAF5VALUEAREA);
+
+ case cJU_JPLEAF6:
+
+ JU_LEAF(6,
+ JU_LEAF_UPLEVEL, uint8_t *, cJU_LEAF7_MAXPOP1, cJU_JPLEAF7,
+ j__udyLeaf6ToLeaf7, j__udyAllocJLL7, JL_LEAF7VALUEAREA,
+ JU_LEAF_TOIMMED_47,
+ JU_TOIMMED_01_ODD, JU_COPY6_PINDEX_TO_LONG,
+ uint8_t *, cJU_IMMED6_MAXPOP1,
+ cJ1_JPIMMED_6_02, cJU_JPIMMED_6_01, j__udySearchLeaf6,
+ JU_LEAF6GROWINPLACE, JU_DELETEINPLACE_ODD,
+ JU_DELETECOPY_ODD,
+ j__udyAllocJLL6, j__udyFreeJLL6, JL_LEAF6VALUEAREA);
+
+// There is no transition to "uplevel" for a Leaf7, so use JU_LEAF_UPLEVEL_NONE
+// instead of JU_LEAF_UPLEVEL, and ignore all of the parameters to that macro:
+
+ case cJU_JPLEAF7:
+
+ JU_LEAF(7,
+ JU_LEAF_UPLEVEL_NONE, ignore1, ignore2, ignore3, ignore4,
+ ignore5, ignore6,
+ JU_LEAF_TOIMMED_47,
+ JU_TOIMMED_01_ODD, JU_COPY7_PINDEX_TO_LONG,
+ uint8_t *, cJU_IMMED7_MAXPOP1,
+ cJ1_JPIMMED_7_02, cJU_JPIMMED_7_01, j__udySearchLeaf7,
+ JU_LEAF7GROWINPLACE, JU_DELETEINPLACE_ODD,
+ JU_DELETECOPY_ODD,
+ j__udyAllocJLL7, j__udyFreeJLL7, JL_LEAF7VALUEAREA);
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// BITMAP LEAF:
+
+ case cJU_JPLEAF_B1:
+ {
+#ifdef JUDYL
+ Pjv_t PjvnewRaw; // new value area.
+ Pjv_t Pjvnew;
+ Word_t subexp; // 1 of 8 subexpanses in bitmap.
+ Pjlb_t Pjlb; // pointer to bitmap part of the leaf.
+ BITMAPL_t bitmap; // for one subexpanse.
+ BITMAPL_t bitmask; // bit set for Indexs digit.
+#endif
+ assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, 1));
+ assert(ParentLevel > 1);
+ // valid Index:
+ assert(JU_BITMAPTESTL(P_JLB(Pjp->jp_Addr), Index));
+
+ pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+
+// Like a Leaf1, see if its under a narrow pointer and can become a Leaf2
+// (hysteresis = 1):
+
+ JU_LEAF_UPLEVEL(1, uint16_t *, cJU_LEAF2_MAXPOP1, cJU_JPLEAF2,
+ j__udyLeaf1ToLeaf2, j__udyAllocJLL2,
+ JL_LEAF2VALUEAREA);
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+
+// Handle the unusual special case, on Judy1 64-bit only, where a LeafB1 goes
+// directly to a JPIMMED_1_15; as described in comments in Judy1.h and
+// JudyIns.c. Copy 1-byte indexes from old LeafB1 to the Immed:
+
+ if ((pop1 - 1) == cJU_IMMED1_MAXPOP1) // hysteresis = 0.
+ {
+ Pjlb_t PjlbRaw; // bitmap in old leaf.
+ Pjlb_t Pjlb;
+ uint8_t * Pleafnew; // JPIMMED as a pointer.
+ Word_t ldigit; // larger than uint8_t.
+
+ PjlbRaw = (Pjlb_t) (Pjp->jp_Addr);
+ Pjlb = P_JLB(PjlbRaw);
+ Pleafnew = Pjp->jp_1Index;
+
+ JU_BITMAPCLEARL(Pjlb, Index); // unset Indexs bit.
+
+// TBD: This is very slow, there must be a better way:
+
+ for (ldigit = 0; ldigit < cJU_BRANCHUNUMJPS; ++ldigit)
+ {
+ if (JU_BITMAPTESTL(Pjlb, ldigit))
+ {
+ *Pleafnew++ = ldigit;
+ assert(Pleafnew - (Pjp->jp_1Index)
+ <= cJU_IMMED1_MAXPOP1);
+ }
+ }
+
+ DBGCODE(JudyCheckSorted((Pjll_t) (Pjp->jp_1Index),
+ cJU_IMMED1_MAXPOP1, 1);)
+ j__udyFreeJLB1(PjlbRaw, Pjpm);
+
+ Pjp->jp_Type = cJ1_JPIMMED_1_15;
+ return(1);
+ }
+
+#else // (JUDYL || (! JU_64BIT))
+
+// Compress LeafB1 to a Leaf1:
+//
+// Note: 4.37 of this file contained alternate code for Judy1 only that simply
+// cleared the bit and allowed the LeafB1 to go below cJU_LEAF1_MAXPOP1. This
+// was the ONLY case where a malloc failure was not fatal; however, it violated
+// the critical assumption that the tree is always kept in least-compressed
+// form.
+
+ if (pop1 == cJU_LEAF1_MAXPOP1) // hysteresis = 1.
+ {
+ if (j__udyLeafB1ToLeaf1(Pjp, Pjpm) == -1) return(-1);
+ goto ContinueDelWalk; // delete Index in new Leaf1.
+ }
+#endif // (JUDYL || (! JU_64BIT))
+
+#ifdef JUDY1
+ // unset Indexs bit:
+
+ JU_BITMAPCLEARL(P_JLB(Pjp->jp_Addr), Index);
+#else // JUDYL
+
+// This is very different from Judy1 because of the need to manage the value
+// area:
+//
+// Get last byte to decode from Index, and pointer to bitmap leaf:
+
+ digit = JU_DIGITATSTATE(Index, 1);
+ Pjlb = P_JLB(Pjp->jp_Addr);
+
+// Prepare additional values:
+
+ subexp = digit / cJU_BITSPERSUBEXPL; // which subexpanse.
+ bitmap = JU_JLB_BITMAP(Pjlb, subexp); // subexps 32-bit map.
+ PjvRaw = JL_JLB_PVALUE(Pjlb, subexp); // corresponding values.
+ Pjv = P_JV(PjvRaw);
+ bitmask = JU_BITPOSMASKL(digit); // mask for Index.
+
+ assert(bitmap & bitmask); // Index must be valid.
+
+ if (bitmap == cJU_FULLBITMAPL) // full bitmap, take shortcut:
+ {
+ pop1 = cJU_BITSPERSUBEXPL;
+ offset = digit % cJU_BITSPERSUBEXPL;
+ }
+ else // compute subexpanse pop1 and value area offset:
+ {
+ pop1 = j__udyCountBitsL(bitmap);
+ offset = j__udyCountBitsL(bitmap & (bitmask - 1));
+ }
+
+// Handle solitary Index remaining in subexpanse:
+
+ if (pop1 == 1)
+ {
+ j__udyLFreeJV(PjvRaw, 1, Pjpm);
+
+ JL_JLB_PVALUE(Pjlb, subexp) = (Pjv_t) NULL;
+ JU_JLB_BITMAP(Pjlb, subexp) = 0;
+
+ return(1);
+ }
+
+// Shrink value area in place or move to a smaller value area:
+
+ if (JL_LEAFVGROWINPLACE(pop1 - 1)) // hysteresis = 0.
+ {
+ JU_DELETEINPLACE(Pjv, pop1, offset, ignore);
+ }
+ else
+ {
+ if ((PjvnewRaw = j__udyLAllocJV(pop1 - 1, Pjpm))
+ == (Pjv_t) NULL) return(-1);
+ Pjvnew = P_JV(PjvnewRaw);
+
+ JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, ignore);
+ j__udyLFreeJV(PjvRaw, pop1, Pjpm);
+ JL_JLB_PVALUE(Pjlb, subexp) = (Pjv_t) PjvnewRaw;
+ }
+
+ JU_JLB_BITMAP(Pjlb, subexp) ^= bitmask; // clear Indexs bit.
+
+#endif // JUDYL
+
+ return(1);
+
+ } // case.
+
+
+#ifdef JUDY1
+
+// ****************************************************************************
+// FULL POPULATION LEAF:
+//
+// Convert to a LeafB1 and delete the index. Hysteresis = 0; none is possible.
+//
+// Note: Earlier the second assertion below said, "== 2", but in fact the
+// parent could be at a higher level if a fullpop is under a narrow pointer.
+
+ case cJ1_JPFULLPOPU1:
+ {
+ Pjlb_t PjlbRaw;
+ Pjlb_t Pjlb;
+ Word_t subexp;
+
+ assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, 2));
+ assert(ParentLevel > 1); // see above.
+
+ if ((PjlbRaw = j__udyAllocJLB1(Pjpm)) == (Pjlb_t) NULL)
+ return(-1);
+ Pjlb = P_JLB(PjlbRaw);
+
+// Fully populate the leaf, then unset Indexs bit:
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+ JU_JLB_BITMAP(Pjlb, subexp) = cJU_FULLBITMAPL;
+
+ JU_BITMAPCLEARL(Pjlb, Index);
+
+ Pjp->jp_Addr = (Word_t) PjlbRaw;
+ Pjp->jp_Type = cJU_JPLEAF_B1;
+
+ return(1);
+ }
+#endif // JUDY1
+
+
+// ****************************************************************************
+// IMMEDIATE JP:
+//
+// If theres just the one Index in the Immed, convert the JP to a JPNULL*
+// (should only happen in a BranchU); otherwise delete the Index from the
+// Immed. See the state transitions table elsewhere in this file for a summary
+// of which Immed types must be handled. Hysteresis = 0; none is possible with
+// Immeds.
+//
+// MACROS FOR COMMON CODE:
+//
+// Single Index remains in cJU_JPIMMED_*_01; convert JP to null:
+//
+// Variables Pjp and parentJPtype are in the context.
+//
+// Note: cJU_JPIMMED_*_01 should only be encountered in BranchUs, not in
+// BranchLs or BranchBs (where its improper to merely modify the JP to be a
+// null JP); that is, BranchL and BranchB code should have already handled
+// any cJU_JPIMMED_*_01 by different means.
+
+#define JU_IMMED_01(NewJPType,ParentJPType) \
+ \
+ assert(parentJPtype == (ParentJPType)); \
+ assert(JU_JPDCDPOP0(Pjp) == JU_TRIMTODCDSIZE(Index)); \
+ JU_JPSETADT(Pjp, 0, 0, NewJPType); \
+ return(1)
+
+// Convert cJ*_JPIMMED_*_02 to cJU_JPIMMED_*_01:
+//
+// Move the undeleted Index, whichever does not match the least bytes of Index,
+// from undecoded-bytes-only (in jp_1Index or jp_LIndex as appropriate) to
+// jp_DcdPopO (full-field). Pjp, Index, and offset are in the context.
+
+#define JU_IMMED_02(cIS,LeafType,NewJPType) \
+ { \
+ LeafType Pleaf; \
+ \
+ assert((ParentLevel - 1) == (cIS)); \
+ JUDY1CODE(Pleaf = (LeafType) (Pjp->jp_1Index);) \
+ JUDYLCODE(Pleaf = (LeafType) (Pjp->jp_LIndex);) \
+ JUDYLCODE(PjvRaw = (Pjv_t) (Pjp->jp_Addr);) \
+ JUDYLCODE(Pjv = P_JV(PjvRaw);) \
+ JU_TOIMMED_01_EVEN(cIS, ignore, ignore); \
+ JUDYLCODE(j__udyLFreeJV(PjvRaw, 2, Pjpm);) \
+ Pjp->jp_Type = (NewJPType); \
+ return(1); \
+ }
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+
+// Variation for "odd" cJ*_JPIMMED_*_02 JP types, which are very different from
+// "even" types because they use leaf search code and odd-copy macros:
+//
+// Note: JudyL 32-bit has no "odd" JPIMMED_*_02 types.
+
+#define JU_IMMED_02_ODD(cIS,NewJPType,SearchLeaf,CopyPIndex) \
+ { \
+ uint8_t * Pleaf; \
+ \
+ assert((ParentLevel - 1) == (cIS)); \
+ JUDY1CODE(Pleaf = (uint8_t *) (Pjp->jp_1Index);) \
+ JUDYLCODE(Pleaf = (uint8_t *) (Pjp->jp_LIndex);) \
+ JUDYLCODE(PjvRaw = (Pjv_t) (Pjp->jp_Addr);) \
+ JUDYLCODE(Pjv = P_JV(PjvRaw);) \
+ JU_TOIMMED_01_ODD(cIS, SearchLeaf, CopyPIndex); \
+ JUDYLCODE(j__udyLFreeJV(PjvRaw, 2, Pjpm);) \
+ Pjp->jp_Type = (NewJPType); \
+ return(1); \
+ }
+#endif // (JUDY1 || JU_64BIT)
+
+// Core code for deleting one Index (and for JudyL, its value area) from a
+// larger Immed:
+//
+// Variables Pleaf, pop1, and offset are in the context.
+
+#ifdef JUDY1
+#define JU_IMMED_DEL(cIS,DeleteInPlace) \
+ DeleteInPlace(Pleaf, pop1, offset, cIS); \
+ DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);)
+
+#else // JUDYL
+
+// For JudyL the value area might need to be shrunk:
+
+#define JU_IMMED_DEL(cIS,DeleteInPlace) \
+ \
+ if (JL_LEAFVGROWINPLACE(pop1 - 1)) /* hysteresis = 0 */ \
+ { \
+ DeleteInPlace( Pleaf, pop1, offset, cIS); \
+ JU_DELETEINPLACE(Pjv, pop1, offset, ignore); \
+ DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);) \
+ } \
+ else \
+ { \
+ Pjv_t PjvnewRaw; \
+ Pjv_t Pjvnew; \
+ \
+ if ((PjvnewRaw = j__udyLAllocJV(pop1 - 1, Pjpm)) \
+ == (Pjv_t) NULL) return(-1); \
+ Pjvnew = P_JV(PjvnewRaw); \
+ \
+ DeleteInPlace(Pleaf, pop1, offset, cIS); \
+ JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, ignore); \
+ DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);) \
+ j__udyLFreeJV(PjvRaw, pop1, Pjpm); \
+ \
+ (Pjp->jp_Addr) = (Word_t) PjvnewRaw; \
+ }
+#endif // JUDYL
+
+// Delete one Index from a larger Immed where no restructuring is required:
+//
+// Variables pop1, Pjp, offset, and Index are in the context.
+
+#define JU_IMMED(cIS,LeafType,BaseJPType,SearchLeaf,DeleteInPlace) \
+ { \
+ LeafType Pleaf; \
+ \
+ assert((ParentLevel - 1) == (cIS)); \
+ JUDY1CODE(Pleaf = (LeafType) (Pjp->jp_1Index);) \
+ JUDYLCODE(Pleaf = (LeafType) (Pjp->jp_LIndex);) \
+ JUDYLCODE(PjvRaw = (Pjv_t) (Pjp->jp_Addr);) \
+ JUDYLCODE(Pjv = P_JV(PjvRaw);) \
+ pop1 = (JU_JPTYPE(Pjp)) - (BaseJPType) + 2; \
+ offset = SearchLeaf(Pleaf, pop1, Index); \
+ assert(offset >= 0); /* Index must be valid */ \
+ \
+ JU_IMMED_DEL(cIS, DeleteInPlace); \
+ --(Pjp->jp_Type); \
+ return(1); \
+ }
+
+
+// END OF MACROS, START OF CASES:
+
+// Single Index remains in Immed; convert JP to null:
+
+ case cJU_JPIMMED_1_01: JU_IMMED_01(cJU_JPNULL1, cJU_JPBRANCH_U2);
+ case cJU_JPIMMED_2_01: JU_IMMED_01(cJU_JPNULL2, cJU_JPBRANCH_U3);
+#ifndef JU_64BIT
+ case cJU_JPIMMED_3_01: JU_IMMED_01(cJU_JPNULL3, cJU_JPBRANCH_U);
+#else
+ case cJU_JPIMMED_3_01: JU_IMMED_01(cJU_JPNULL3, cJU_JPBRANCH_U4);
+ case cJU_JPIMMED_4_01: JU_IMMED_01(cJU_JPNULL4, cJU_JPBRANCH_U5);
+ case cJU_JPIMMED_5_01: JU_IMMED_01(cJU_JPNULL5, cJU_JPBRANCH_U6);
+ case cJU_JPIMMED_6_01: JU_IMMED_01(cJU_JPNULL6, cJU_JPBRANCH_U7);
+ case cJU_JPIMMED_7_01: JU_IMMED_01(cJU_JPNULL7, cJU_JPBRANCH_U);
+#endif
+
+// Multiple Indexes remain in the Immed JP; delete the specified Index:
+
+ case cJU_JPIMMED_1_02:
+
+ JU_IMMED_02(1, uint8_t *, cJU_JPIMMED_1_01);
+
+ case cJU_JPIMMED_1_03:
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04:
+ case cJU_JPIMMED_1_05:
+ case cJU_JPIMMED_1_06:
+ case cJU_JPIMMED_1_07:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08:
+ case cJ1_JPIMMED_1_09:
+ case cJ1_JPIMMED_1_10:
+ case cJ1_JPIMMED_1_11:
+ case cJ1_JPIMMED_1_12:
+ case cJ1_JPIMMED_1_13:
+ case cJ1_JPIMMED_1_14:
+ case cJ1_JPIMMED_1_15:
+#endif
+ JU_IMMED(1, uint8_t *, cJU_JPIMMED_1_02,
+ j__udySearchLeaf1, JU_DELETEINPLACE);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02:
+
+ JU_IMMED_02(2, uint16_t *, cJU_JPIMMED_2_01);
+
+ case cJU_JPIMMED_2_03:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04:
+ case cJ1_JPIMMED_2_05:
+ case cJ1_JPIMMED_2_06:
+ case cJ1_JPIMMED_2_07:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ JU_IMMED(2, uint16_t *, cJU_JPIMMED_2_02,
+ j__udySearchLeaf2, JU_DELETEINPLACE);
+
+ case cJU_JPIMMED_3_02:
+
+ JU_IMMED_02_ODD(3, cJU_JPIMMED_3_01,
+ j__udySearchLeaf3, JU_COPY3_PINDEX_TO_LONG);
+
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03:
+ case cJ1_JPIMMED_3_04:
+ case cJ1_JPIMMED_3_05:
+
+ JU_IMMED(3, uint8_t *, cJU_JPIMMED_3_02,
+ j__udySearchLeaf3, JU_DELETEINPLACE_ODD);
+
+ case cJ1_JPIMMED_4_02:
+
+ JU_IMMED_02(4, uint32_t *, cJU_JPIMMED_4_01);
+
+ case cJ1_JPIMMED_4_03:
+
+ JU_IMMED(4, uint32_t *, cJ1_JPIMMED_4_02,
+ j__udySearchLeaf4, JU_DELETEINPLACE);
+
+ case cJ1_JPIMMED_5_02:
+
+ JU_IMMED_02_ODD(5, cJU_JPIMMED_5_01,
+ j__udySearchLeaf5, JU_COPY5_PINDEX_TO_LONG);
+
+ case cJ1_JPIMMED_5_03:
+
+ JU_IMMED(5, uint8_t *, cJ1_JPIMMED_5_02,
+ j__udySearchLeaf5, JU_DELETEINPLACE_ODD);
+
+ case cJ1_JPIMMED_6_02:
+
+ JU_IMMED_02_ODD(6, cJU_JPIMMED_6_01,
+ j__udySearchLeaf6, JU_COPY6_PINDEX_TO_LONG);
+
+ case cJ1_JPIMMED_7_02:
+
+ JU_IMMED_02_ODD(7, cJU_JPIMMED_7_01,
+ j__udySearchLeaf7, JU_COPY7_PINDEX_TO_LONG);
+
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ****************************************************************************
+// INVALID JP TYPE:
+
+ default: JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT); return(-1);
+
+ } // switch
+
+
+// PROCESS JP -- RECURSIVELY:
+//
+// For non-Immed JP types, if successful, post-decrement the population count
+// at this level, or collapse a BranchL if necessary by copying the remaining
+// JP in the BranchL to the parent (hysteresis = 0), which implicitly creates a
+// narrow pointer if there was not already one in the hierarchy.
+
+ assert(level);
+ retcode = j__udyDelWalk(Pjp, Index, level, Pjpm);
+ assert(retcode != 0); // should never happen.
+
+ if ((JU_JPTYPE(Pjp)) < cJU_JPIMMED_1_01) // not an Immed.
+ {
+ switch (retcode)
+ {
+ case 1:
+ {
+ jp_t JP = *Pjp;
+ Word_t DcdP0;
+
+ DcdP0 = JU_JPDCDPOP0(Pjp) - 1; // decrement count.
+ JU_JPSETADT(Pjp, JP.jp_Addr, DcdP0, JU_JPTYPE(&JP));
+ break;
+ }
+ case 2: // collapse BranchL to single JP; see above:
+ {
+ Pjbl_t PjblRaw = (Pjbl_t) (Pjp->jp_Addr);
+ Pjbl_t Pjbl = P_JBL(PjblRaw);
+
+ *Pjp = Pjbl->jbl_jp[0];
+ j__udyFreeJBL(PjblRaw, Pjpm);
+ retcode = 1;
+ }
+ }
+ }
+
+ return(retcode);
+
+} // j__udyDelWalk()
+
+
+// ****************************************************************************
+// J U D Y 1 U N S E T
+// J U D Y L D E L
+//
+// Main entry point. See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1Unset
+#else
+FUNCTION int JudyLDel
+#endif
+ (
+ PPvoid_t PPArray, // in which to delete.
+ Word_t Index, // to delete.
+ PJError_t PJError // optional, for returning error info.
+ )
+{
+ Word_t pop1; // population of leaf.
+ int offset; // at which to delete Index.
+ JUDY1CODE(int retcode;) // return code from Judy1Test().
+JUDYLCODE(PPvoid_t PPvalue;) // pointer from JudyLGet().
+
+
+// CHECK FOR NULL ARRAY POINTER (error by caller):
+
+ if (PPArray == (PPvoid_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+ return(JERRI);
+ }
+
+
+// CHECK IF INDEX IS INVALID:
+//
+// If so, theres nothing to do. This saves a lot of time. Pass through
+// PJError, if any, from the "get" function.
+
+#ifdef JUDY1
+ if ((retcode = Judy1Test(*PPArray, Index, PJError)) == JERRI)
+ return (JERRI);
+
+ if (retcode == 0) return(0);
+#else
+ if ((PPvalue = JudyLGet(*PPArray, Index, PJError)) == PPJERR)
+ return (JERRI);
+
+ if (PPvalue == (PPvoid_t) NULL) return(0);
+#endif
+
+
+// ****************************************************************************
+// PROCESS TOP LEVEL (LEAFW) BRANCHES AND LEAVES:
+
+// ****************************************************************************
+// LEAFW LEAF, OTHER SIZE:
+//
+// Shrink or convert the leaf as necessary. Hysteresis = 0; none is possible.
+
+ if (JU_LEAFW_POP0(*PPArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ JUDYLCODE(Pjv_t Pjv;) // current value area.
+ JUDYLCODE(Pjv_t Pjvnew;) // value area in new leaf.
+ Pjlw_t Pjlw = P_JLW(*PPArray); // first word of leaf.
+ Pjlw_t Pjlwnew; // replacement leaf.
+ pop1 = Pjlw[0] + 1; // first word of leaf is pop0.
+
+// Delete single (last) Index from array:
+
+ if (pop1 == 1)
+ {
+ j__udyFreeJLW(Pjlw, /* pop1 = */ 1, (Pjpm_t) NULL);
+ *PPArray = (Pvoid_t) NULL;
+ return(1);
+ }
+
+// Locate Index in compressible leaf:
+
+ offset = j__udySearchLeafW(Pjlw + 1, pop1, Index);
+ assert(offset >= 0); // Index must be valid.
+
+ JUDYLCODE(Pjv = JL_LEAFWVALUEAREA(Pjlw, pop1);)
+
+// Delete Index in-place:
+//
+// Note: "Grow in place from pop1 - 1" is the logical inverse of, "shrink in
+// place from pop1." Also, Pjlw points to the count word, so skip that for
+// doing the deletion.
+
+ if (JU_LEAFWGROWINPLACE(pop1 - 1))
+ {
+ JU_DELETEINPLACE(Pjlw + 1, pop1, offset, ignore);
+#ifdef JUDYL // also delete from value area:
+ JU_DELETEINPLACE(Pjv, pop1, offset, ignore);
+#endif
+ DBGCODE(JudyCheckSorted((Pjll_t) (Pjlw + 1), pop1 - 1,
+ cJU_ROOTSTATE);)
+ --(Pjlw[0]); // decrement population.
+ DBGCODE(JudyCheckPop(*PPArray);)
+ return(1);
+ }
+
+// Allocate new leaf for use in either case below:
+
+ Pjlwnew = j__udyAllocJLW(pop1 - 1);
+ JU_CHECKALLOC(Pjlw_t, Pjlwnew, JERRI);
+
+// Shrink to smaller LEAFW:
+//
+// Note: Skip the first word = pop0 in each leaf.
+
+ Pjlwnew[0] = (pop1 - 1) - 1;
+ JU_DELETECOPY(Pjlwnew + 1, Pjlw + 1, pop1, offset, ignore);
+
+#ifdef JUDYL // also delete from value area:
+ Pjvnew = JL_LEAFWVALUEAREA(Pjlwnew, pop1 - 1);
+ JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, ignore);
+#endif
+ DBGCODE(JudyCheckSorted(Pjlwnew + 1, pop1 - 1, cJU_ROOTSTATE);)
+
+ j__udyFreeJLW(Pjlw, pop1, (Pjpm_t) NULL);
+
+//// *PPArray = (Pvoid_t) Pjlwnew | cJU_LEAFW);
+ *PPArray = (Pvoid_t) Pjlwnew;
+ DBGCODE(JudyCheckPop(*PPArray);)
+ return(1);
+
+ }
+ else
+
+
+// ****************************************************************************
+// JRP BRANCH:
+//
+// Traverse through the JPM to do the deletion unless the population is small
+// enough to convert immediately to a LEAFW.
+
+ {
+ Pjpm_t Pjpm;
+ Pjp_t Pjp; // top-level JP to process.
+ Word_t digit; // in a branch.
+ JUDYLCODE(Pjv_t Pjv;) // to value area.
+ Pjlw_t Pjlwnew; // replacement leaf.
+ DBGCODE(Pjlw_t Pjlwnew_orig;)
+
+ Pjpm = P_JPM(*PPArray); // top object in array (tree).
+ Pjp = &(Pjpm->jpm_JP); // next object (first branch or leaf).
+
+ assert(((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_L)
+ || ((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_B)
+ || ((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_U));
+
+// WALK THE TREE
+//
+// Note: Recursive code in j__udyDelWalk() knows how to collapse a lower-level
+// BranchL containing a single JP into the parent JP as a narrow pointer, but
+// the code here cant do that for a top-level BranchL. The result can be
+// PArray -> JPM -> BranchL containing a single JP. This situation is
+// unavoidable because a JPM cannot contain a narrow pointer; the BranchL is
+// required in order to hold the top digit decoded, and it does not collapse to
+// a LEAFW until the population is low enough.
+//
+// TBD: Should we add a topdigit field to JPMs so they can hold narrow
+// pointers?
+
+ if (j__udyDelWalk(Pjp, Index, cJU_ROOTSTATE, Pjpm) == -1)
+ {
+ JU_COPY_ERRNO(PJError, Pjpm);
+ return(JERRI);
+ }
+
+ --(Pjpm->jpm_Pop0); // success; decrement total population.
+
+ if ((Pjpm->jpm_Pop0 + 1) != cJU_LEAFW_MAXPOP1)
+ {
+ DBGCODE(JudyCheckPop(*PPArray);)
+ return(1);
+ }
+
+// COMPRESS A BRANCH[LBU] TO A LEAFW:
+//
+ Pjlwnew = j__udyAllocJLW(cJU_LEAFW_MAXPOP1);
+ JU_CHECKALLOC(Pjlw_t, Pjlwnew, JERRI);
+
+// Plug leaf into root pointer and set population count:
+
+//// *PPArray = (Pvoid_t) ((Word_t) Pjlwnew | cJU_LEAFW);
+ *PPArray = (Pvoid_t) Pjlwnew;
+#ifdef JUDYL // prepare value area:
+ Pjv = JL_LEAFWVALUEAREA(Pjlwnew, cJU_LEAFW_MAXPOP1);
+#endif
+ *Pjlwnew++ = cJU_LEAFW_MAXPOP1 - 1; // set pop0.
+ DBGCODE(Pjlwnew_orig = Pjlwnew;)
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+// JPBRANCH_L: Copy each JPs indexes to the new LEAFW and free the old
+// branch:
+
+ case cJU_JPBRANCH_L:
+ {
+ Pjbl_t PjblRaw = (Pjbl_t) (Pjp->jp_Addr);
+ Pjbl_t Pjbl = P_JBL(PjblRaw);
+
+ for (offset = 0; offset < Pjbl->jbl_NumJPs; ++offset)
+ {
+ pop1 = j__udyLeafM1ToLeafW(Pjlwnew, JU_PVALUEPASS
+ (Pjbl->jbl_jp) + offset,
+ JU_DIGITTOSTATE(Pjbl->jbl_Expanse[offset],
+ cJU_BYTESPERWORD),
+ (Pvoid_t) Pjpm);
+ Pjlwnew += pop1; // advance through indexes.
+ JUDYLCODE(Pjv += pop1;) // advance through values.
+ }
+ j__udyFreeJBL(PjblRaw, Pjpm);
+
+ assert(Pjlwnew == Pjlwnew_orig + cJU_LEAFW_MAXPOP1);
+ break; // delete Index from new LEAFW.
+ }
+
+// JPBRANCH_B: Copy each JPs indexes to the new LEAFW and free the old
+// branch, including each JP subarray:
+
+ case cJU_JPBRANCH_B:
+ {
+ Pjbb_t PjbbRaw = (Pjbb_t) (Pjp->jp_Addr);
+ Pjbb_t Pjbb = P_JBB(PjbbRaw);
+ Word_t subexp; // current subexpanse number.
+ BITMAPB_t bitmap; // portion for this subexpanse.
+ Pjp_t Pjp2Raw; // one subexpanses subarray.
+ Pjp_t Pjp2;
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+ {
+ if ((bitmap = JU_JBB_BITMAP(Pjbb, subexp)) == 0)
+ continue; // skip empty subexpanse.
+
+ digit = subexp * cJU_BITSPERSUBEXPB;
+ Pjp2Raw = JU_JBB_PJP(Pjbb, subexp);
+ Pjp2 = P_JP(Pjp2Raw);
+ assert(Pjp2 != (Pjp_t) NULL);
+
+// Walk through bits for all possible sub-subexpanses (digits); increment
+// offset for each populated subexpanse; until no more set bits:
+
+ for (offset = 0; bitmap != 0; bitmap >>= 1, ++digit)
+ {
+ if (! (bitmap & 1)) // skip empty sub-subexpanse.
+ continue;
+
+ pop1 = j__udyLeafM1ToLeafW(Pjlwnew, JU_PVALUEPASS
+ Pjp2 + offset,
+ JU_DIGITTOSTATE(digit, cJU_BYTESPERWORD),
+ (Pvoid_t) Pjpm);
+ Pjlwnew += pop1; // advance through indexes.
+ JUDYLCODE(Pjv += pop1;) // advance through values.
+ ++offset;
+ }
+ j__udyFreeJBBJP(Pjp2Raw, /* pop1 = */ offset, Pjpm);
+ }
+ j__udyFreeJBB(PjbbRaw, Pjpm);
+
+ assert(Pjlwnew == Pjlwnew_orig + cJU_LEAFW_MAXPOP1);
+ break; // delete Index from new LEAFW.
+
+ } // case cJU_JPBRANCH_B.
+
+
+// JPBRANCH_U: Copy each JPs indexes to the new LEAFW and free the old
+// branch:
+
+ case cJU_JPBRANCH_U:
+ {
+ Pjbu_t PjbuRaw = (Pjbu_t) (Pjp->jp_Addr);
+ Pjbu_t Pjbu = P_JBU(PjbuRaw);
+ Word_t ldigit; // larger than uint8_t.
+
+ for (Pjp = Pjbu->jbu_jp, ldigit = 0;
+ ldigit < cJU_BRANCHUNUMJPS;
+ ++Pjp, ++ldigit)
+ {
+
+// Shortcuts, to save a little time for possibly big branches:
+
+ if ((JU_JPTYPE(Pjp)) == cJU_JPNULLMAX) // skip null JP.
+ continue;
+
+// TBD: Should the following shortcut also be used in BranchL and BranchB
+// code?
+
+#ifndef JU_64BIT
+ if ((JU_JPTYPE(Pjp)) == cJU_JPIMMED_3_01)
+#else
+ if ((JU_JPTYPE(Pjp)) == cJU_JPIMMED_7_01)
+#endif
+ { // single Immed:
+ *Pjlwnew++ = JU_DIGITTOSTATE(ldigit, cJU_BYTESPERWORD)
+ | JU_JPDCDPOP0(Pjp); // rebuild Index.
+#ifdef JUDYL
+ *Pjv++ = Pjp->jp_Addr; // copy value area.
+#endif
+ continue;
+ }
+
+ pop1 = j__udyLeafM1ToLeafW(Pjlwnew, JU_PVALUEPASS
+ Pjp, JU_DIGITTOSTATE(ldigit, cJU_BYTESPERWORD),
+ (Pvoid_t) Pjpm);
+ Pjlwnew += pop1; // advance through indexes.
+ JUDYLCODE(Pjv += pop1;) // advance through values.
+ }
+ j__udyFreeJBU(PjbuRaw, Pjpm);
+
+ assert(Pjlwnew == Pjlwnew_orig + cJU_LEAFW_MAXPOP1);
+ break; // delete Index from new LEAFW.
+
+ } // case cJU_JPBRANCH_U.
+
+
+// INVALID JP TYPE in jpm_t struct
+
+ default: JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+ return(JERRI);
+
+ } // end switch on sub-JP type.
+
+ DBGCODE(JudyCheckSorted((Pjll_t) Pjlwnew_orig, cJU_LEAFW_MAXPOP1,
+ cJU_ROOTSTATE);)
+
+// FREE JPM (no longer needed):
+
+ j__udyFreeJPM(Pjpm, (Pjpm_t) NULL);
+ DBGCODE(JudyCheckPop(*PPArray);)
+ return(1);
+
+ }
+ /*NOTREACHED*/
+
+} // Judy1Unset() / JudyLDel()
diff --git a/libs/klib/judy/JudyFirst.c b/libs/klib/judy/JudyFirst.c
new file mode 100644
index 0000000..91533a9
--- /dev/null
+++ b/libs/klib/judy/JudyFirst.c
@@ -0,0 +1,211 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy*First[Empty]() and Judy*Last[Empty]() routines for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// These are inclusive versions of Judy*Next[Empty]() and Judy*Prev[Empty]().
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+
+// ****************************************************************************
+// J U D Y 1 F I R S T
+// J U D Y L F I R S T
+//
+// See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1First
+#else
+FUNCTION PPvoid_t JudyLFirst
+#endif
+ (
+ Pcvoid_t PArray, // Judy array to search.
+ Word_t * PIndex, // starting point and result.
+ PJError_t PJError // optional, for returning error info.
+ )
+{
+ if (PIndex == (PWord_t) NULL) // caller error:
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+#ifdef JUDY1
+ switch (Judy1Test(PArray, *PIndex, PJError))
+ {
+ case 1: return(1); // found *PIndex itself.
+ case 0: return(Judy1Next(PArray, PIndex, PJError));
+ default: return(JERRI);
+ }
+#else
+ {
+ PPvoid_t PValue;
+
+ if ((PValue = JudyLGet(PArray, *PIndex, PJError)) == PPJERR)
+ return(PPJERR);
+
+ if (PValue != (PPvoid_t) NULL) return(PValue); // found *PIndex.
+
+ return(JudyLNext(PArray, PIndex, PJError));
+ }
+#endif
+
+} // Judy1First() / JudyLFirst()
+
+
+// ****************************************************************************
+// J U D Y 1 L A S T
+// J U D Y L L A S T
+//
+// See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1Last(
+#else
+FUNCTION PPvoid_t JudyLLast(
+#endif
+ Pcvoid_t PArray, // Judy array to search.
+ Word_t * PIndex, // starting point and result.
+ PJError_t PJError) // optional, for returning error info.
+{
+ if (PIndex == (PWord_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX); // caller error.
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+#ifdef JUDY1
+ switch (Judy1Test(PArray, *PIndex, PJError))
+ {
+ case 1: return(1); // found *PIndex itself.
+ case 0: return(Judy1Prev(PArray, PIndex, PJError));
+ default: return(JERRI);
+ }
+#else
+ {
+ PPvoid_t PValue;
+
+ if ((PValue = JudyLGet(PArray, *PIndex, PJError)) == PPJERR)
+ return(PPJERR);
+
+ if (PValue != (PPvoid_t) NULL) return(PValue); // found *PIndex.
+
+ return(JudyLPrev(PArray, PIndex, PJError));
+ }
+#endif
+
+} // Judy1Last() / JudyLLast()
+
+
+// ****************************************************************************
+// J U D Y 1 F I R S T E M P T Y
+// J U D Y L F I R S T E M P T Y
+//
+// See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1FirstEmpty(
+#else
+FUNCTION int JudyLFirstEmpty(
+#endif
+ Pcvoid_t PArray, // Judy array to search.
+ Word_t * PIndex, // starting point and result.
+ PJError_t PJError) // optional, for returning error info.
+{
+ if (PIndex == (PWord_t) NULL) // caller error:
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return(JERRI);
+ }
+
+#ifdef JUDY1
+ switch (Judy1Test(PArray, *PIndex, PJError))
+ {
+ case 0: return(1); // found *PIndex itself.
+ case 1: return(Judy1NextEmpty(PArray, PIndex, PJError));
+ default: return(JERRI);
+ }
+#else
+ {
+ PPvoid_t PValue;
+
+ if ((PValue = JudyLGet(PArray, *PIndex, PJError)) == PPJERR)
+ return(JERRI);
+
+ if (PValue == (PPvoid_t) NULL) return(1); // found *PIndex.
+
+ return(JudyLNextEmpty(PArray, PIndex, PJError));
+ }
+#endif
+
+} // Judy1FirstEmpty() / JudyLFirstEmpty()
+
+
+// ****************************************************************************
+// J U D Y 1 L A S T E M P T Y
+// J U D Y L L A S T E M P T Y
+//
+// See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1LastEmpty(
+#else
+FUNCTION int JudyLLastEmpty(
+#endif
+ Pcvoid_t PArray, // Judy array to search.
+ Word_t * PIndex, // starting point and result.
+ PJError_t PJError) // optional, for returning error info.
+{
+ if (PIndex == (PWord_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX); // caller error.
+ return(JERRI);
+ }
+
+#ifdef JUDY1
+ switch (Judy1Test(PArray, *PIndex, PJError))
+ {
+ case 0: return(1); // found *PIndex itself.
+ case 1: return(Judy1PrevEmpty(PArray, PIndex, PJError));
+ default: return(JERRI);
+ }
+#else
+ {
+ PPvoid_t PValue;
+
+ if ((PValue = JudyLGet(PArray, *PIndex, PJError)) == PPJERR)
+ return(JERRI);
+
+ if (PValue == (PPvoid_t) NULL) return(1); // found *PIndex.
+
+ return(JudyLPrevEmpty(PArray, PIndex, PJError));
+ }
+#endif
+
+} // Judy1LastEmpty() / JudyLLastEmpty()
diff --git a/libs/klib/judy/JudyFreeArray.c b/libs/klib/judy/JudyFreeArray.c
new file mode 100644
index 0000000..0145479
--- /dev/null
+++ b/libs/klib/judy/JudyFreeArray.c
@@ -0,0 +1,361 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy1FreeArray() and JudyLFreeArray() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+// Return the number of bytes freed from the array.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+DBGCODE(extern void JudyCheckPop(Pvoid_t PArray);)
+
+
+// ****************************************************************************
+// J U D Y 1 F R E E A R R A Y
+// J U D Y L F R E E A R R A Y
+//
+// See the Judy*(3C) manual entry for details.
+//
+// This code is written recursively, at least at first, because thats much
+// simpler. Hope its fast enough.
+
+#ifdef JUDY1
+FUNCTION Word_t Judy1FreeArray
+#else
+FUNCTION Word_t JudyLFreeArray
+#endif
+ (
+ PPvoid_t PPArray, // array to free.
+ PJError_t PJError // optional, for returning error info.
+ )
+{
+ jpm_t jpm; // local to accumulate free statistics.
+
+// CHECK FOR NULL POINTER (error by caller):
+
+ if (PPArray == (PPvoid_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+ return(JERR);
+ }
+
+ DBGCODE(JudyCheckPop(*PPArray);)
+
+// Zero jpm.jpm_Pop0 (meaning the array will be empty in a moment) for accurate
+// logging in TRACEMI2.
+
+ jpm.jpm_Pop0 = 0; // see above.
+ jpm.jpm_TotalMemWords = 0; // initialize memory freed.
+
+// Empty array:
+
+ if (P_JLW(*PPArray) == (Pjlw_t) NULL) return(0);
+
+// PROCESS TOP LEVEL "JRP" BRANCHES AND LEAF:
+
+ if (JU_LEAFW_POP0(*PPArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ Pjlw_t Pjlw = P_JLW(*PPArray); // first word of leaf.
+
+ j__udyFreeJLW(Pjlw, Pjlw[0] + 1, &jpm);
+ *PPArray = (Pvoid_t) NULL; // make an empty array.
+ return (-(jpm.jpm_TotalMemWords * cJU_BYTESPERWORD)); // see above.
+ }
+ else
+
+// Rootstate leaves: just free the leaf:
+
+// Common code for returning the amount of memory freed.
+//
+// Note: In a an ordinary LEAFW, pop0 = *PPArray[0].
+//
+// Accumulate (negative) words freed, while freeing objects.
+// Return the positive bytes freed.
+
+ {
+ Pjpm_t Pjpm = P_JPM(*PPArray);
+ Word_t TotalMem = Pjpm->jpm_TotalMemWords;
+
+ j__udyFreeSM(&(Pjpm->jpm_JP), &jpm); // recurse through tree.
+ j__udyFreeJPM(Pjpm, &jpm);
+
+// Verify the array was not corrupt. This means that amount of memory freed
+// (which is negative) is equal to the initial amount:
+
+ if (TotalMem + jpm.jpm_TotalMemWords)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ return(JERR);
+ }
+
+ *PPArray = (Pvoid_t) NULL; // make an empty array.
+ return (TotalMem * cJU_BYTESPERWORD);
+ }
+
+} // Judy1FreeArray() / JudyLFreeArray()
+
+
+// ****************************************************************************
+// __ J U D Y F R E E S M
+//
+// Given a pointer to a JP, recursively visit and free (depth first) all nodes
+// in a Judy array BELOW the JP, but not the JP itself. Accumulate in *Pjpm
+// the total words freed (as a negative value). "SM" = State Machine.
+//
+// Note: Corruption is not detected at this level because during a FreeArray,
+// if the code hasnt already core dumped, its better to remain silent, even
+// if some memory has not been freed, than to bother the caller about the
+// corruption. TBD: Is this true? If not, must list all legitimate JPNULL
+// and JPIMMED above first, and revert to returning bool_t (see 4.34).
+
+FUNCTION void j__udyFreeSM(
+ Pjp_t Pjp, // top of Judy (top-state).
+ Pjpm_t Pjpm) // to return words freed.
+{
+ Word_t Pop1;
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+#ifdef JUDY1
+
+// FULL EXPANSE -- nothing to free for this jp_Type.
+
+ case cJ1_JPFULLPOPU1:
+ break;
+#endif
+
+// JUDY BRANCH -- free the sub-tree depth first:
+
+// LINEAR BRANCH -- visit each JP in the JBLs list, then free the JBL:
+//
+// Note: There are no null JPs in a JBL.
+
+ case cJU_JPBRANCH_L:
+ case cJU_JPBRANCH_L2:
+ case cJU_JPBRANCH_L3:
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4:
+ case cJU_JPBRANCH_L5:
+ case cJU_JPBRANCH_L6:
+ case cJU_JPBRANCH_L7:
+#endif // JU_64BIT
+ {
+ Pjbl_t Pjbl = P_JBL(Pjp->jp_Addr);
+ Word_t offset;
+
+ for (offset = 0; offset < Pjbl->jbl_NumJPs; ++offset)
+ j__udyFreeSM((Pjbl->jbl_jp) + offset, Pjpm);
+
+ j__udyFreeJBL((Pjbl_t) (Pjp->jp_Addr), Pjpm);
+ break;
+ }
+
+
+// BITMAP BRANCH -- visit each JP in the JBBs list based on the bitmap, also
+//
+// Note: There are no null JPs in a JBB.
+
+ case cJU_JPBRANCH_B:
+ case cJU_JPBRANCH_B2:
+ case cJU_JPBRANCH_B3:
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4:
+ case cJU_JPBRANCH_B5:
+ case cJU_JPBRANCH_B6:
+ case cJU_JPBRANCH_B7:
+#endif // JU_64BIT
+ {
+ Word_t subexp;
+ Word_t offset;
+ Word_t jpcount;
+
+ Pjbb_t Pjbb = P_JBB(Pjp->jp_Addr);
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+ {
+ jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+
+ if (jpcount)
+ {
+ for (offset = 0; offset < jpcount; ++offset)
+ {
+ j__udyFreeSM(P_JP(JU_JBB_PJP(Pjbb, subexp)) + offset,
+ Pjpm);
+ }
+ j__udyFreeJBBJP(JU_JBB_PJP(Pjbb, subexp), jpcount, Pjpm);
+ }
+ }
+ j__udyFreeJBB((Pjbb_t) (Pjp->jp_Addr), Pjpm);
+
+ break;
+ }
+
+
+// UNCOMPRESSED BRANCH -- visit each JP in the JBU array, then free the JBU
+// itself:
+//
+// Note: Null JPs are handled during recursion at a lower state.
+
+ case cJU_JPBRANCH_U:
+ case cJU_JPBRANCH_U2:
+ case cJU_JPBRANCH_U3:
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U4:
+ case cJU_JPBRANCH_U5:
+ case cJU_JPBRANCH_U6:
+ case cJU_JPBRANCH_U7:
+#endif // JU_64BIT
+ {
+ Word_t offset;
+ Pjbu_t Pjbu = P_JBU(Pjp->jp_Addr);
+
+ for (offset = 0; offset < cJU_BRANCHUNUMJPS; ++offset)
+ j__udyFreeSM((Pjbu->jbu_jp) + offset, Pjpm);
+
+ j__udyFreeJBU((Pjbu_t) (Pjp->jp_Addr), Pjpm);
+ break;
+ }
+
+
+// -- Cases below here terminate and do not recurse. --
+
+
+// LINEAR LEAF -- just free the leaf; size is computed from jp_Type:
+//
+// Note: cJU_JPLEAF1 is a special case, see discussion in ../Judy1/Judy1.h
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1:
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyFreeJLL1((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ break;
+#endif
+
+ case cJU_JPLEAF2:
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyFreeJLL2((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ break;
+
+ case cJU_JPLEAF3:
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyFreeJLL3((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ break;
+
+#ifdef JU_64BIT
+ case cJU_JPLEAF4:
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyFreeJLL4((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ break;
+
+ case cJU_JPLEAF5:
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyFreeJLL5((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ break;
+
+ case cJU_JPLEAF6:
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyFreeJLL6((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ break;
+
+ case cJU_JPLEAF7:
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ j__udyFreeJLL7((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ break;
+#endif // JU_64BIT
+
+
+// BITMAP LEAF -- free sub-expanse arrays of JPs, then free the JBB.
+
+ case cJU_JPLEAF_B1:
+ {
+#ifdef JUDYL
+ Word_t subexp;
+ Word_t jpcount;
+ Pjlb_t Pjlb = P_JLB(Pjp->jp_Addr);
+
+// Free the value areas in the bitmap leaf:
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+ {
+ jpcount = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+ if (jpcount)
+ j__udyLFreeJV(JL_JLB_PVALUE(Pjlb, subexp), jpcount, Pjpm);
+ }
+#endif // JUDYL
+
+ j__udyFreeJLB1((Pjlb_t) (Pjp->jp_Addr), Pjpm);
+ break;
+
+ } // case cJU_JPLEAF_B1
+
+#ifdef JUDYL
+
+
+// IMMED*:
+//
+// For JUDYL, all non JPIMMED_*_01s have a LeafV which must be freed:
+
+ case cJU_JPIMMED_1_02:
+ case cJU_JPIMMED_1_03:
+#ifdef JU_64BIT
+ case cJU_JPIMMED_1_04:
+ case cJU_JPIMMED_1_05:
+ case cJU_JPIMMED_1_06:
+ case cJU_JPIMMED_1_07:
+#endif
+ Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_1_02 + 2;
+ j__udyLFreeJV((Pjv_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ break;
+
+#ifdef JU_64BIT
+ case cJU_JPIMMED_2_02:
+ case cJU_JPIMMED_2_03:
+
+ Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_2_02 + 2;
+ j__udyLFreeJV((Pjv_t) (Pjp->jp_Addr), Pop1, Pjpm);
+ break;
+
+ case cJU_JPIMMED_3_02:
+ j__udyLFreeJV((Pjv_t) (Pjp->jp_Addr), 2, Pjpm);
+ break;
+
+#endif // JU_64BIT
+#endif // JUDYL
+
+
+// OTHER JPNULL, JPIMMED, OR UNEXPECTED TYPE -- nothing to free for this type:
+//
+// Note: Lump together no-op and invalid JP types; see function header
+// comments.
+
+ default: break;
+
+ } // switch (JU_JPTYPE(Pjp))
+
+} // j__udyFreeSM()
diff --git a/libs/klib/judy/JudyGet.c b/libs/klib/judy/JudyGet.c
new file mode 100644
index 0000000..5071a3f
--- /dev/null
+++ b/libs/klib/judy/JudyGet.c
@@ -0,0 +1,1092 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy1Test() and JudyLGet() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+#ifdef TRACEJPR // different macro name, for "retrieval" only.
+#include "JudyPrintJP.c"
+#endif
+
+
+// ****************************************************************************
+// J U D Y 1 T E S T
+// J U D Y L G E T
+//
+// See the manual entry for details. Note support for "shortcut" entries to
+// trees known to start with a JPM.
+
+#ifdef JUDY1
+
+#ifdef JUDYGETINLINE
+FUNCTION int j__udy1Test
+#else
+FUNCTION int Judy1Test
+#endif
+
+#else // JUDYL
+
+#ifdef JUDYGETINLINE
+FUNCTION PPvoid_t j__udyLGet
+#else
+FUNCTION PPvoid_t JudyLGet
+#endif
+
+#endif // JUDYL
+ (
+#ifdef JUDYGETINLINE
+ Pvoid_t PArray, // from which to retrieve.
+ Word_t Index // to retrieve.
+#else
+ Pcvoid_t PArray, // from which to retrieve.
+ Word_t Index, // to retrieve.
+ PJError_t PJError // optional, for returning error info.
+#endif
+ )
+{
+ Pjp_t Pjp; // current JP while walking the tree.
+ Pjpm_t Pjpm; // for global accounting.
+ uint8_t Digit; // byte just decoded from Index.
+ Word_t Pop1; // leaf population (number of indexes).
+ Pjll_t Pjll; // pointer to LeafL.
+ DBGCODE(uint8_t ParentJPType;)
+
+#ifndef JUDYGETINLINE
+
+ if (PArray == (Pcvoid_t) NULL) // empty array.
+ {
+ JUDY1CODE(return(0);)
+ JUDYLCODE(return((PPvoid_t) NULL);)
+ }
+
+// ****************************************************************************
+// PROCESS TOP LEVEL BRANCHES AND LEAF:
+
+ if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ Pjlw_t Pjlw = P_JLW(PArray); // first word of leaf.
+ int posidx; // signed offset in leaf.
+
+ Pop1 = Pjlw[0] + 1;
+ posidx = j__udySearchLeafW(Pjlw + 1, Pop1, Index);
+
+ if (posidx >= 0)
+ {
+ JUDY1CODE(return(1);)
+ JUDYLCODE(return((PPvoid_t) (JL_LEAFWVALUEAREA(Pjlw, Pop1) + posidx));)
+ }
+ JUDY1CODE(return(0);)
+ JUDYLCODE(return((PPvoid_t) NULL);)
+ }
+
+#endif // ! JUDYGETINLINE
+
+ Pjpm = P_JPM(PArray);
+ Pjp = &(Pjpm->jpm_JP); // top branch is below JPM.
+
+// ****************************************************************************
+// WALK THE JUDY TREE USING A STATE MACHINE:
+
+ContinueWalk: // for going down one level; come here with Pjp set.
+
+#ifdef TRACEJPR
+ JudyPrintJP(Pjp, "g", __LINE__);
+#endif
+ switch (JU_JPTYPE(Pjp))
+ {
+
+// Ensure the switch table starts at 0 for speed; otherwise more code is
+// executed:
+
+ case 0: goto ReturnCorrupt; // save a little code.
+
+
+// ****************************************************************************
+// JPNULL*:
+//
+// Note: These are legitimate in a BranchU (only) and do not constitute a
+// fault.
+
+ case cJU_JPNULL1:
+ case cJU_JPNULL2:
+ case cJU_JPNULL3:
+#ifdef JU_64BIT
+ case cJU_JPNULL4:
+ case cJU_JPNULL5:
+ case cJU_JPNULL6:
+ case cJU_JPNULL7:
+#endif
+ assert(ParentJPType >= cJU_JPBRANCH_U2);
+ assert(ParentJPType <= cJU_JPBRANCH_U);
+ JUDY1CODE(return(0);)
+ JUDYLCODE(return((PPvoid_t) NULL);)
+
+
+// ****************************************************************************
+// JPBRANCH_L*:
+//
+// Note: The use of JU_DCDNOTMATCHINDEX() in branches is not strictly
+// required,since this can be done at leaf level, but it costs nothing to do it
+// sooner, and it aborts an unnecessary traversal sooner.
+
+ case cJU_JPBRANCH_L2:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 2)) break;
+ Digit = JU_DIGITATSTATE(Index, 2);
+ goto JudyBranchL;
+
+ case cJU_JPBRANCH_L3:
+
+#ifdef JU_64BIT // otherwise its a no-op:
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 3)) break;
+#endif
+ Digit = JU_DIGITATSTATE(Index, 3);
+ goto JudyBranchL;
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 4)) break;
+ Digit = JU_DIGITATSTATE(Index, 4);
+ goto JudyBranchL;
+
+ case cJU_JPBRANCH_L5:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 5)) break;
+ Digit = JU_DIGITATSTATE(Index, 5);
+ goto JudyBranchL;
+
+ case cJU_JPBRANCH_L6:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 6)) break;
+ Digit = JU_DIGITATSTATE(Index, 6);
+ goto JudyBranchL;
+
+ case cJU_JPBRANCH_L7:
+
+ // JU_DCDNOTMATCHINDEX() would be a no-op.
+ Digit = JU_DIGITATSTATE(Index, 7);
+ goto JudyBranchL;
+
+#endif // JU_64BIT
+
+ case cJU_JPBRANCH_L:
+ {
+ Pjbl_t Pjbl;
+ int posidx;
+
+ Digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+
+// Common code for all BranchLs; come here with Digit set:
+
+JudyBranchL:
+ Pjbl = P_JBL(Pjp->jp_Addr);
+
+ posidx = 0;
+
+ do {
+ if (Pjbl->jbl_Expanse[posidx] == Digit)
+ { // found Digit; continue traversal:
+ DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+ Pjp = Pjbl->jbl_jp + posidx;
+ goto ContinueWalk;
+ }
+ } while (++posidx != Pjbl->jbl_NumJPs);
+
+ break;
+ }
+
+
+// ****************************************************************************
+// JPBRANCH_B*:
+
+ case cJU_JPBRANCH_B2:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 2)) break;
+ Digit = JU_DIGITATSTATE(Index, 2);
+ goto JudyBranchB;
+
+ case cJU_JPBRANCH_B3:
+
+#ifdef JU_64BIT // otherwise its a no-op:
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 3)) break;
+#endif
+ Digit = JU_DIGITATSTATE(Index, 3);
+ goto JudyBranchB;
+
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 4)) break;
+ Digit = JU_DIGITATSTATE(Index, 4);
+ goto JudyBranchB;
+
+ case cJU_JPBRANCH_B5:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 5)) break;
+ Digit = JU_DIGITATSTATE(Index, 5);
+ goto JudyBranchB;
+
+ case cJU_JPBRANCH_B6:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 6)) break;
+ Digit = JU_DIGITATSTATE(Index, 6);
+ goto JudyBranchB;
+
+ case cJU_JPBRANCH_B7:
+
+ // JU_DCDNOTMATCHINDEX() would be a no-op.
+ Digit = JU_DIGITATSTATE(Index, 7);
+ goto JudyBranchB;
+
+#endif // JU_64BIT
+
+ case cJU_JPBRANCH_B:
+ {
+ Pjbb_t Pjbb;
+ Word_t subexp; // in bitmap, 0..7.
+ BITMAPB_t BitMap; // for one subexpanse.
+ BITMAPB_t BitMask; // bit in BitMap for Indexs Digit.
+
+ Digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+
+// Common code for all BranchBs; come here with Digit set:
+
+JudyBranchB:
+ DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+ Pjbb = P_JBB(Pjp->jp_Addr);
+ subexp = Digit / cJU_BITSPERSUBEXPB;
+
+ BitMap = JU_JBB_BITMAP(Pjbb, subexp);
+ Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp));
+
+ BitMask = JU_BITPOSMASKB(Digit);
+
+// No JP in subexpanse for Index => Index not found:
+
+ if (! (BitMap & BitMask)) break;
+
+// Count JPs in the subexpanse below the one for Index:
+
+ Pjp += j__udyCountBitsB(BitMap & (BitMask - 1));
+
+ goto ContinueWalk;
+
+ } // case cJU_JPBRANCH_B*
+
+
+// ****************************************************************************
+// JPBRANCH_U*:
+//
+// Notice the reverse order of the cases, and falling through to the next case,
+// for performance.
+
+ case cJU_JPBRANCH_U:
+
+ DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+ Pjp = JU_JBU_PJP(Pjp, Index, cJU_ROOTSTATE);
+
+// If not a BranchU, traverse; otherwise fall into the next case, which makes
+// this very fast code for a large Judy array (mainly BranchUs), especially
+// when branches are already in the cache, such as for prev/next:
+
+#ifndef JU_64BIT
+ if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U3) goto ContinueWalk;
+#else
+ if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U7) goto ContinueWalk;
+#endif
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U7:
+
+ // JU_DCDNOTMATCHINDEX() would be a no-op.
+ DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+ Pjp = JU_JBU_PJP(Pjp, Index, 7);
+
+ if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U6) goto ContinueWalk;
+ // and fall through.
+
+ case cJU_JPBRANCH_U6:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 6)) break;
+ DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+ Pjp = JU_JBU_PJP(Pjp, Index, 6);
+
+ if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U5) goto ContinueWalk;
+ // and fall through.
+
+ case cJU_JPBRANCH_U5:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 5)) break;
+ DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+ Pjp = JU_JBU_PJP(Pjp, Index, 5);
+
+ if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U4) goto ContinueWalk;
+ // and fall through.
+
+ case cJU_JPBRANCH_U4:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 4)) break;
+ DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+ Pjp = JU_JBU_PJP(Pjp, Index, 4);
+
+ if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U3) goto ContinueWalk;
+ // and fall through.
+
+#endif // JU_64BIT
+
+ case cJU_JPBRANCH_U3:
+
+#ifdef JU_64BIT // otherwise its a no-op:
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 3)) break;
+#endif
+ DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+ Pjp = JU_JBU_PJP(Pjp, Index, 3);
+
+ if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U2) goto ContinueWalk;
+ // and fall through.
+
+ case cJU_JPBRANCH_U2:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 2)) break;
+ DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+ Pjp = JU_JBU_PJP(Pjp, Index, 2);
+
+// Note: BranchU2 is a special case that must continue traversal to a leaf,
+// immed, full, or null type:
+
+ goto ContinueWalk;
+
+
+// ****************************************************************************
+// JPLEAF*:
+//
+// Note: Here the calls of JU_DCDNOTMATCHINDEX() are necessary and check
+// whether Index is out of the expanse of a narrow pointer.
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+ case cJU_JPLEAF1:
+ {
+ int posidx; // signed offset in leaf.
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 1)) break;
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ Pjll = P_JLL(Pjp->jp_Addr);
+
+ if ((posidx = j__udySearchLeaf1(Pjll, Pop1, Index)) < 0) break;
+
+ JUDY1CODE(return(1);)
+ JUDYLCODE(return((PPvoid_t) (JL_LEAF1VALUEAREA(Pjll, Pop1) + posidx));)
+ }
+
+#endif // (JUDYL || (! JU_64BIT))
+
+ case cJU_JPLEAF2:
+ {
+ int posidx; // signed offset in leaf.
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 2)) break;
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ Pjll = P_JLL(Pjp->jp_Addr);
+
+ if ((posidx = j__udySearchLeaf2(Pjll, Pop1, Index)) < 0) break;
+
+ JUDY1CODE(return(1);)
+ JUDYLCODE(return((PPvoid_t) (JL_LEAF2VALUEAREA(Pjll, Pop1) + posidx));)
+ }
+ case cJU_JPLEAF3:
+ {
+ int posidx; // signed offset in leaf.
+
+#ifdef JU_64BIT // otherwise its a no-op:
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 3)) break;
+#endif
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ Pjll = P_JLL(Pjp->jp_Addr);
+
+ if ((posidx = j__udySearchLeaf3(Pjll, Pop1, Index)) < 0) break;
+
+ JUDY1CODE(return(1);)
+ JUDYLCODE(return((PPvoid_t) (JL_LEAF3VALUEAREA(Pjll, Pop1) + posidx));)
+ }
+#ifdef JU_64BIT
+ case cJU_JPLEAF4:
+ {
+ int posidx; // signed offset in leaf.
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 4)) break;
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ Pjll = P_JLL(Pjp->jp_Addr);
+
+ if ((posidx = j__udySearchLeaf4(Pjll, Pop1, Index)) < 0) break;
+
+ JUDY1CODE(return(1);)
+ JUDYLCODE(return((PPvoid_t) (JL_LEAF4VALUEAREA(Pjll, Pop1) + posidx));)
+ }
+ case cJU_JPLEAF5:
+ {
+ int posidx; // signed offset in leaf.
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 5)) break;
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ Pjll = P_JLL(Pjp->jp_Addr);
+
+ if ((posidx = j__udySearchLeaf5(Pjll, Pop1, Index)) < 0) break;
+
+ JUDY1CODE(return(1);)
+ JUDYLCODE(return((PPvoid_t) (JL_LEAF5VALUEAREA(Pjll, Pop1) + posidx));)
+ }
+
+ case cJU_JPLEAF6:
+ {
+ int posidx; // signed offset in leaf.
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 6)) break;
+
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ Pjll = P_JLL(Pjp->jp_Addr);
+
+ if ((posidx = j__udySearchLeaf6(Pjll, Pop1, Index)) < 0) break;
+
+ JUDY1CODE(return(1);)
+ JUDYLCODE(return((PPvoid_t) (JL_LEAF6VALUEAREA(Pjll, Pop1) + posidx));)
+ }
+ case cJU_JPLEAF7:
+ {
+ int posidx; // signed offset in leaf.
+
+ // JU_DCDNOTMATCHINDEX() would be a no-op.
+ Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+ Pjll = P_JLL(Pjp->jp_Addr);
+
+ if ((posidx = j__udySearchLeaf7(Pjll, Pop1, Index)) < 0) break;
+
+ JUDY1CODE(return(1);)
+ JUDYLCODE(return((PPvoid_t) (JL_LEAF7VALUEAREA(Pjll, Pop1) + posidx));)
+ }
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// JPLEAF_B1:
+
+ case cJU_JPLEAF_B1:
+ {
+ Pjlb_t Pjlb;
+#ifdef JUDYL
+ int posidx;
+ Word_t subexp; // in bitmap, 0..7.
+ BITMAPL_t BitMap; // for one subexpanse.
+ BITMAPL_t BitMask; // bit in BitMap for Indexs Digit.
+ Pjv_t Pjv;
+#endif
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 1)) break;
+
+ Pjlb = P_JLB(Pjp->jp_Addr);
+
+#ifdef JUDY1
+
+// Simply check if Indexs bit is set in the bitmap:
+
+ if (JU_BITMAPTESTL(Pjlb, Index)) return(1);
+ break;
+
+#else // JUDYL
+
+// JudyL is much more complicated because of value area subarrays:
+
+ Digit = JU_DIGITATSTATE(Index, 1);
+ subexp = Digit / cJU_BITSPERSUBEXPL;
+ BitMap = JU_JLB_BITMAP(Pjlb, subexp);
+ BitMask = JU_BITPOSMASKL(Digit);
+
+// No value in subexpanse for Index => Index not found:
+
+ if (! (BitMap & BitMask)) break;
+
+// Count value areas in the subexpanse below the one for Index:
+
+ Pjv = P_JV(JL_JLB_PVALUE(Pjlb, subexp));
+ assert(Pjv != (Pjv_t) NULL);
+ posidx = j__udyCountBitsL(BitMap & (BitMask - 1));
+
+ return((PPvoid_t) (Pjv + posidx));
+
+#endif // JUDYL
+
+ } // case cJU_JPLEAF_B1
+
+#ifdef JUDY1
+
+// ****************************************************************************
+// JPFULLPOPU1:
+//
+// If the Index is in the expanse, it is necessarily valid (found).
+
+ case cJ1_JPFULLPOPU1:
+
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, 1)) break;
+ return(1);
+
+#ifdef notdef // for future enhancements
+#ifdef JU_64BIT
+
+// Note: Need ? if (JU_DCDNOTMATCHINDEX(Index, Pjp, 1)) break;
+
+ case cJ1_JPFULLPOPU1m15:
+ if (Pjp->jp_1Index[14] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m14:
+ if (Pjp->jp_1Index[13] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m13:
+ if (Pjp->jp_1Index[12] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m12:
+ if (Pjp->jp_1Index[11] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m11:
+ if (Pjp->jp_1Index[10] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m10:
+ if (Pjp->jp_1Index[9] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m9:
+ if (Pjp->jp_1Index[8] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m8:
+ if (Pjp->jp_1Index[7] == (uint8_t)Index) break;
+#endif
+ case cJ1_JPFULLPOPU1m7:
+ if (Pjp->jp_1Index[6] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m6:
+ if (Pjp->jp_1Index[5] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m5:
+ if (Pjp->jp_1Index[4] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m4:
+ if (Pjp->jp_1Index[3] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m3:
+ if (Pjp->jp_1Index[2] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m2:
+ if (Pjp->jp_1Index[1] == (uint8_t)Index) break;
+ case cJ1_JPFULLPOPU1m1:
+ if (Pjp->jp_1Index[0] == (uint8_t)Index) break;
+
+ return(1); // found, not in exclusion list
+
+#endif // JUDY1
+#endif // notdef
+
+// ****************************************************************************
+// JPIMMED*:
+//
+// Note that the contents of jp_DcdPopO are different for cJU_JPIMMED_*_01:
+
+ case cJU_JPIMMED_1_01:
+ case cJU_JPIMMED_2_01:
+ case cJU_JPIMMED_3_01:
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01:
+ case cJU_JPIMMED_5_01:
+ case cJU_JPIMMED_6_01:
+ case cJU_JPIMMED_7_01:
+#endif
+ if (JU_JPDCDPOP0(Pjp) != JU_TRIMTODCDSIZE(Index)) break;
+
+ JUDY1CODE(return(1);)
+ JUDYLCODE(return((PPvoid_t) &(Pjp->jp_Addr));) // immediate value area.
+
+
+// Macros to make code more readable and avoid dup errors
+
+#ifdef JUDY1
+
+#define CHECKINDEXNATIVE(LEAF_T, PJP, IDX, INDEX) \
+if (((LEAF_T *)((PJP)->jp_1Index))[(IDX) - 1] == (LEAF_T)(INDEX)) \
+ return(1)
+
+#define CHECKLEAFNONNAT(LFBTS, PJP, INDEX, IDX, COPY) \
+{ \
+ Word_t i_ndex; \
+ uint8_t *a_ddr; \
+ a_ddr = (PJP)->jp_1Index + (((IDX) - 1) * (LFBTS)); \
+ COPY(i_ndex, a_ddr); \
+ if (i_ndex == JU_LEASTBYTES((INDEX), (LFBTS))) \
+ return(1); \
+}
+#endif
+
+#ifdef JUDYL
+
+#define CHECKINDEXNATIVE(LEAF_T, PJP, IDX, INDEX) \
+if (((LEAF_T *)((PJP)->jp_LIndex))[(IDX) - 1] == (LEAF_T)(INDEX)) \
+ return((PPvoid_t)(P_JV((PJP)->jp_Addr) + (IDX) - 1))
+
+#define CHECKLEAFNONNAT(LFBTS, PJP, INDEX, IDX, COPY) \
+{ \
+ Word_t i_ndex; \
+ uint8_t *a_ddr; \
+ a_ddr = (PJP)->jp_LIndex + (((IDX) - 1) * (LFBTS)); \
+ COPY(i_ndex, a_ddr); \
+ if (i_ndex == JU_LEASTBYTES((INDEX), (LFBTS))) \
+ return((PPvoid_t)(P_JV((PJP)->jp_Addr) + (IDX) - 1)); \
+}
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_15: CHECKINDEXNATIVE(uint8_t, Pjp, 15, Index);
+ case cJ1_JPIMMED_1_14: CHECKINDEXNATIVE(uint8_t, Pjp, 14, Index);
+ case cJ1_JPIMMED_1_13: CHECKINDEXNATIVE(uint8_t, Pjp, 13, Index);
+ case cJ1_JPIMMED_1_12: CHECKINDEXNATIVE(uint8_t, Pjp, 12, Index);
+ case cJ1_JPIMMED_1_11: CHECKINDEXNATIVE(uint8_t, Pjp, 11, Index);
+ case cJ1_JPIMMED_1_10: CHECKINDEXNATIVE(uint8_t, Pjp, 10, Index);
+ case cJ1_JPIMMED_1_09: CHECKINDEXNATIVE(uint8_t, Pjp, 9, Index);
+ case cJ1_JPIMMED_1_08: CHECKINDEXNATIVE(uint8_t, Pjp, 8, Index);
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_07: CHECKINDEXNATIVE(uint8_t, Pjp, 7, Index);
+ case cJU_JPIMMED_1_06: CHECKINDEXNATIVE(uint8_t, Pjp, 6, Index);
+ case cJU_JPIMMED_1_05: CHECKINDEXNATIVE(uint8_t, Pjp, 5, Index);
+ case cJU_JPIMMED_1_04: CHECKINDEXNATIVE(uint8_t, Pjp, 4, Index);
+#endif
+ case cJU_JPIMMED_1_03: CHECKINDEXNATIVE(uint8_t, Pjp, 3, Index);
+ case cJU_JPIMMED_1_02: CHECKINDEXNATIVE(uint8_t, Pjp, 2, Index);
+ CHECKINDEXNATIVE(uint8_t, Pjp, 1, Index);
+ break;
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_07: CHECKINDEXNATIVE(uint16_t, Pjp, 7, Index);
+ case cJ1_JPIMMED_2_06: CHECKINDEXNATIVE(uint16_t, Pjp, 6, Index);
+ case cJ1_JPIMMED_2_05: CHECKINDEXNATIVE(uint16_t, Pjp, 5, Index);
+ case cJ1_JPIMMED_2_04: CHECKINDEXNATIVE(uint16_t, Pjp, 4, Index);
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_03: CHECKINDEXNATIVE(uint16_t, Pjp, 3, Index);
+ case cJU_JPIMMED_2_02: CHECKINDEXNATIVE(uint16_t, Pjp, 2, Index);
+ CHECKINDEXNATIVE(uint16_t, Pjp, 1, Index);
+ break;
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_05:
+ CHECKLEAFNONNAT(3, Pjp, Index, 5, JU_COPY3_PINDEX_TO_LONG);
+ case cJ1_JPIMMED_3_04:
+ CHECKLEAFNONNAT(3, Pjp, Index, 4, JU_COPY3_PINDEX_TO_LONG);
+ case cJ1_JPIMMED_3_03:
+ CHECKLEAFNONNAT(3, Pjp, Index, 3, JU_COPY3_PINDEX_TO_LONG);
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02:
+ CHECKLEAFNONNAT(3, Pjp, Index, 2, JU_COPY3_PINDEX_TO_LONG);
+ CHECKLEAFNONNAT(3, Pjp, Index, 1, JU_COPY3_PINDEX_TO_LONG);
+ break;
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+
+ case cJ1_JPIMMED_4_03: CHECKINDEXNATIVE(uint32_t, Pjp, 3, Index);
+ case cJ1_JPIMMED_4_02: CHECKINDEXNATIVE(uint32_t, Pjp, 2, Index);
+ CHECKINDEXNATIVE(uint32_t, Pjp, 1, Index);
+ break;
+
+ case cJ1_JPIMMED_5_03:
+ CHECKLEAFNONNAT(5, Pjp, Index, 3, JU_COPY5_PINDEX_TO_LONG);
+ case cJ1_JPIMMED_5_02:
+ CHECKLEAFNONNAT(5, Pjp, Index, 2, JU_COPY5_PINDEX_TO_LONG);
+ CHECKLEAFNONNAT(5, Pjp, Index, 1, JU_COPY5_PINDEX_TO_LONG);
+ break;
+
+ case cJ1_JPIMMED_6_02:
+ CHECKLEAFNONNAT(6, Pjp, Index, 2, JU_COPY6_PINDEX_TO_LONG);
+ CHECKLEAFNONNAT(6, Pjp, Index, 1, JU_COPY6_PINDEX_TO_LONG);
+ break;
+
+ case cJ1_JPIMMED_7_02:
+ CHECKLEAFNONNAT(7, Pjp, Index, 2, JU_COPY7_PINDEX_TO_LONG);
+ CHECKLEAFNONNAT(7, Pjp, Index, 1, JU_COPY7_PINDEX_TO_LONG);
+ break;
+
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ****************************************************************************
+// INVALID JP TYPE:
+
+ default:
+
+ReturnCorrupt:
+
+#ifdef JUDYGETINLINE // Pjpm is known to be non-null:
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+#else
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+#endif
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+ } // switch on JP type
+
+JUDY1CODE(return(0);)
+JUDYLCODE(return((PPvoid_t) NULL);)
+
+} // Judy1Test() / JudyLGet()
+
+
+#ifndef JUDYGETINLINE // only compile the following function once:
+#ifdef DEBUG
+
+// ****************************************************************************
+// J U D Y C H E C K P O P
+//
+// Given a pointer to a Judy array, traverse the entire array to ensure
+// population counts add up correctly. This can catch various coding errors.
+//
+// Since walking the entire tree is probably time-consuming, enable this
+// function by setting env parameter $CHECKPOP to first call at which to start
+// checking. Note: This function is called both from insert and delete code.
+//
+// Note: Even though this function does nothing useful for LEAFW leaves, its
+// good practice to call it anyway, and cheap too.
+//
+// TBD: This is a debug-only check function similar to JudyCheckSorted(), but
+// since it walks the tree it is Judy1/JudyL-specific and must live in a source
+// file that is built both ways.
+//
+// TBD: As feared, enabling this code for every insert/delete makes Judy
+// deathly slow, even for a small tree (10K indexes). Its not so bad if
+// present but disabled (<1% slowdown measured). Still, should it be ifdefd
+// other than DEBUG and/or called less often?
+//
+// TBD: Should this "population checker" be expanded to a comprehensive tree
+// checker? It currently detects invalid LEAFW/JP types as well as inconsistent
+// pop1s. Other possible checks, all based on essentially redundant data in
+// the Judy tree, include:
+//
+// - Zero LS bits in jp_Addr field.
+//
+// - Correct Dcd bits.
+//
+// - Consistent JP types (always descending down the tree).
+//
+// - Sorted linear lists in BranchLs and leaves (using JudyCheckSorted(), but
+// ideally that function is already called wherever appropriate after any
+// linear list is modified).
+//
+// - Any others possible?
+
+#include <stdlib.h> // for getenv() and atol().
+
+static Word_t JudyCheckPopSM(Pjp_t Pjp, Word_t RootPop1);
+
+FUNCTION void JudyCheckPop(
+ Pvoid_t PArray)
+{
+static bool_t checked = FALSE; // already checked env parameter.
+static bool_t enabled = FALSE; // env parameter set.
+static bool_t active = FALSE; // calls >= callsmin.
+static Word_t callsmin; // start point from $CHECKPOP.
+static Word_t calls = 0; // times called so far.
+
+
+// CHECK FOR EXTERNAL ENABLING:
+
+ if (! checked) // only check once.
+ {
+ char * value; // for getenv().
+
+ checked = TRUE;
+
+ if ((value = getenv("CHECKPOP")) == (char *) NULL)
+ {
+#ifdef notdef
+// Take this out because nightly tests want to be flavor-independent; its not
+// OK to emit special non-error output from the debug flavor:
+
+ (void) puts("JudyCheckPop() present but not enabled by "
+ "$CHECKPOP env parameter; set it to the number of "
+ "calls at which to begin checking");
+#endif
+ return;
+ }
+
+ callsmin = atol(value); // note: non-number evaluates to 0.
+ enabled = TRUE;
+
+ (void) printf("JudyCheckPop() present and enabled; callsmin = "
+ "%lu\n", callsmin);
+ }
+ else if (! enabled) return;
+
+// Previously or just now enabled; check if non-active or newly active:
+
+ if (! active)
+ {
+ if (++calls < callsmin) return;
+
+ (void) printf("JudyCheckPop() activated at call %lu\n", calls);
+ active = TRUE;
+ }
+
+// IGNORE LEAFW AT TOP OF TREE:
+
+ if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ return;
+
+// Check JPM pop0 against tree, recursively:
+//
+// Note: The traversal code in JudyCheckPopSM() is simplest when the case
+// statement for each JP type compares the pop1 for that JP to its subtree (if
+// any) after traversing the subtree (thats the hard part) and adding up
+// actual pop1s. A top branchs JP in the JPM does not have room for a
+// full-word pop1, so pass it in as a special case.
+
+ {
+ Pjpm_t Pjpm = P_JPM(PArray);
+ (void) JudyCheckPopSM(&(Pjpm->jpm_JP), Pjpm->jpm_Pop0 + 1);
+ return;
+ }
+
+} // JudyCheckPop()
+
+
+// ****************************************************************************
+// J U D Y C H E C K P O P S M
+//
+// Recursive state machine (subroutine) for JudyCheckPop(): Given a Pjp (other
+// than JPNULL*; caller should shortcut) and the root population for top-level
+// branches, check the subtrees actual pop1 against its nominal value, and
+// return the total pop1 for the subtree.
+//
+// Note: Expect RootPop1 to be ignored at lower levels, so pass down 0, which
+// should pop an assertion if this expectation is violated.
+
+FUNCTION static Word_t JudyCheckPopSM(
+ Pjp_t Pjp, // top of subtree.
+ Word_t RootPop1) // whole array, for top-level branches only.
+{
+ Word_t pop1_jp; // nominal population from the JP.
+ Word_t pop1 = 0; // actual population at this level.
+ Word_t offset; // in a branch.
+
+#define PREPBRANCH(cPopBytes,Next) \
+ pop1_jp = JU_JPBRANCH_POP0(Pjp, cPopBytes) + 1; goto Next
+
+assert((((Word_t) (Pjp->jp_Addr)) & 7) == 3);
+ switch (JU_JPTYPE(Pjp))
+ {
+
+ case cJU_JPBRANCH_L2: PREPBRANCH(2, BranchL);
+ case cJU_JPBRANCH_L3: PREPBRANCH(3, BranchL);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4: PREPBRANCH(4, BranchL);
+ case cJU_JPBRANCH_L5: PREPBRANCH(5, BranchL);
+ case cJU_JPBRANCH_L6: PREPBRANCH(6, BranchL);
+ case cJU_JPBRANCH_L7: PREPBRANCH(7, BranchL);
+#endif
+ case cJU_JPBRANCH_L: pop1_jp = RootPop1;
+ {
+ Pjbl_t Pjbl;
+BranchL:
+ Pjbl = P_JBL(Pjp->jp_Addr);
+
+ for (offset = 0; offset < (Pjbl->jbl_NumJPs); ++offset)
+ pop1 += JudyCheckPopSM((Pjbl->jbl_jp) + offset, 0);
+
+ assert(pop1_jp == pop1);
+ return(pop1);
+ }
+
+ case cJU_JPBRANCH_B2: PREPBRANCH(2, BranchB);
+ case cJU_JPBRANCH_B3: PREPBRANCH(3, BranchB);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4: PREPBRANCH(4, BranchB);
+ case cJU_JPBRANCH_B5: PREPBRANCH(5, BranchB);
+ case cJU_JPBRANCH_B6: PREPBRANCH(6, BranchB);
+ case cJU_JPBRANCH_B7: PREPBRANCH(7, BranchB);
+#endif
+ case cJU_JPBRANCH_B: pop1_jp = RootPop1;
+ {
+ Word_t subexp;
+ Word_t jpcount;
+ Pjbb_t Pjbb;
+BranchB:
+ Pjbb = P_JBB(Pjp->jp_Addr);
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+ {
+ jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+
+ for (offset = 0; offset < jpcount; ++offset)
+ {
+ pop1 += JudyCheckPopSM(P_JP(JU_JBB_PJP(Pjbb, subexp))
+ + offset, 0);
+ }
+ }
+
+ assert(pop1_jp == pop1);
+ return(pop1);
+ }
+
+ case cJU_JPBRANCH_U2: PREPBRANCH(2, BranchU);
+ case cJU_JPBRANCH_U3: PREPBRANCH(3, BranchU);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U4: PREPBRANCH(4, BranchU);
+ case cJU_JPBRANCH_U5: PREPBRANCH(5, BranchU);
+ case cJU_JPBRANCH_U6: PREPBRANCH(6, BranchU);
+ case cJU_JPBRANCH_U7: PREPBRANCH(7, BranchU);
+#endif
+ case cJU_JPBRANCH_U: pop1_jp = RootPop1;
+ {
+ Pjbu_t Pjbu;
+BranchU:
+ Pjbu = P_JBU(Pjp->jp_Addr);
+
+ for (offset = 0; offset < cJU_BRANCHUNUMJPS; ++offset)
+ {
+ if (((Pjbu->jbu_jp[offset].jp_Type) >= cJU_JPNULL1)
+ && ((Pjbu->jbu_jp[offset].jp_Type) <= cJU_JPNULLMAX))
+ {
+ continue; // skip null JP to save time.
+ }
+
+ pop1 += JudyCheckPopSM((Pjbu->jbu_jp) + offset, 0);
+ }
+
+ assert(pop1_jp == pop1);
+ return(pop1);
+ }
+
+
+// -- Cases below here terminate and do not recurse. --
+//
+// For all of these cases except JPLEAF_B1, there is no way to check the JPs
+// pop1 against the object itself; just return the pop1; but for linear leaves,
+// a bounds check is possible.
+
+#define CHECKLEAF(MaxPop1) \
+ pop1 = JU_JPLEAF_POP0(Pjp) + 1; \
+ assert(pop1 >= 1); \
+ assert(pop1 <= (MaxPop1)); \
+ return(pop1)
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1: CHECKLEAF(cJU_LEAF1_MAXPOP1);
+#endif
+ case cJU_JPLEAF2: CHECKLEAF(cJU_LEAF2_MAXPOP1);
+ case cJU_JPLEAF3: CHECKLEAF(cJU_LEAF3_MAXPOP1);
+#ifdef JU_64BIT
+ case cJU_JPLEAF4: CHECKLEAF(cJU_LEAF4_MAXPOP1);
+ case cJU_JPLEAF5: CHECKLEAF(cJU_LEAF5_MAXPOP1);
+ case cJU_JPLEAF6: CHECKLEAF(cJU_LEAF6_MAXPOP1);
+ case cJU_JPLEAF7: CHECKLEAF(cJU_LEAF7_MAXPOP1);
+#endif
+
+ case cJU_JPLEAF_B1:
+ {
+ Word_t subexp;
+ Pjlb_t Pjlb;
+
+ pop1_jp = JU_JPLEAF_POP0(Pjp) + 1;
+
+ Pjlb = P_JLB(Pjp->jp_Addr);
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+ pop1 += j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+ assert(pop1_jp == pop1);
+ return(pop1);
+ }
+
+ JUDY1CODE(case cJ1_JPFULLPOPU1: return(cJU_JPFULLPOPU1_POP0);)
+
+ case cJU_JPIMMED_1_01: return(1);
+ case cJU_JPIMMED_2_01: return(1);
+ case cJU_JPIMMED_3_01: return(1);
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01: return(1);
+ case cJU_JPIMMED_5_01: return(1);
+ case cJU_JPIMMED_6_01: return(1);
+ case cJU_JPIMMED_7_01: return(1);
+#endif
+
+ case cJU_JPIMMED_1_02: return(2);
+ case cJU_JPIMMED_1_03: return(3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04: return(4);
+ case cJU_JPIMMED_1_05: return(5);
+ case cJU_JPIMMED_1_06: return(6);
+ case cJU_JPIMMED_1_07: return(7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08: return(8);
+ case cJ1_JPIMMED_1_09: return(9);
+ case cJ1_JPIMMED_1_10: return(10);
+ case cJ1_JPIMMED_1_11: return(11);
+ case cJ1_JPIMMED_1_12: return(12);
+ case cJ1_JPIMMED_1_13: return(13);
+ case cJ1_JPIMMED_1_14: return(14);
+ case cJ1_JPIMMED_1_15: return(15);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02: return(2);
+ case cJU_JPIMMED_2_03: return(3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04: return(4);
+ case cJ1_JPIMMED_2_05: return(5);
+ case cJ1_JPIMMED_2_06: return(6);
+ case cJ1_JPIMMED_2_07: return(7);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02: return(2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03: return(3);
+ case cJ1_JPIMMED_3_04: return(4);
+ case cJ1_JPIMMED_3_05: return(5);
+
+ case cJ1_JPIMMED_4_02: return(2);
+ case cJ1_JPIMMED_4_03: return(3);
+ case cJ1_JPIMMED_5_02: return(2);
+ case cJ1_JPIMMED_5_03: return(3);
+ case cJ1_JPIMMED_6_02: return(2);
+ case cJ1_JPIMMED_7_02: return(2);
+#endif
+
+ } // switch (JU_JPTYPE(Pjp))
+
+ assert(FALSE); // unrecognized JP type => corruption.
+ return(0); // to make some compilers happy.
+
+} // JudyCheckPopSM()
+
+#endif // DEBUG
+#endif // ! JUDYGETINLINE
diff --git a/libs/klib/judy/JudyHS.c b/libs/klib/judy/JudyHS.c
new file mode 100644
index 0000000..aa9fbfa
--- /dev/null
+++ b/libs/klib/judy/JudyHS.c
@@ -0,0 +1,770 @@
+//=======================================================================
+// Author Douglas L. Baskins, Dec 2003.
+// Permission to use this code is freely granted, provided that this
+// statement is retained.
+// email - doug at sourcejudy.com -or- dougbaskins at yahoo.com
+//=======================================================================
+
+#include <string.h> // for memcmp(), memcpy()
+
+#include <Judy.h> // for JudyL* routines/macros
+
+/*
+ This routine is a very fast "string" version of an ADT that stores
+ (JudyHSIns()), retrieves (JudyHSGet()), deletes (JudyHSDel()) and
+ frees the entire ADT (JudyHSFreeArray()) strings. It uses the "Judy
+ arrays" JudyL() API as the main workhorse. The length of the string
+ is included in the calling parameters so that strings with embedded
+ \0s can be used. The string lengths can be from 0 bytes to whatever
+ malloc() can handle (~2GB).
+
+ Compile:
+
+ cc -O JudyHS.c -c needs to link with -lJudy (libJudy.a)
+
+ Note: in gcc version 3.3.1, -O2 generates faster code than -O
+ Note: in gcc version 3.3.2, -O3 generates faster code than -O2
+
+ NOTES:
+
+1) There may be some performance issues with 64 bit machines, because I
+ have not characterized that it yet.
+
+2) It appears that a modern CPU (>2Ghz) that the instruction times are
+ much faster that a RAM access, so building up a word from bytes takes
+ no longer that a whole word access. I am taking advantage of this to
+ make this code endian neutral. A side effect of this is strings do
+ not need to be aligned, nor tested to be on to a word boundry. In
+ older and in slow (RISC) machines, this may be a performance issue.
+ I have given up trying to optimize for machines that have very slow
+ mpy, mod, variable shifts and call returns.
+
+3) JudyHS is very scalable from 1 string to billions (with enough RAM).
+ The memory usage is also scales with population. I have attempted to
+ combine the best characteristics of JudyL arrays with Hashing methods
+ and well designed modern processors (such as the 1.3Ghz Intel
+ Centrino this is being written on).
+
+ HOW JudyHS WORKS: ( 4[8] means 4 bytes in 32 bit machine and 8 in 64)
+
+ A) A JudyL array is used to separate strings of equal lengths into
+ their own structures (a different hash table is used for each length
+ of string). The additional time overhead is very near zero because
+ of the CPU cache. The space efficiency is improved because the
+ length need not be stored with the string (ls_t). The "JLHash" ADT
+ in the test program "StringCompare" is verification of both these
+ assumptions.
+
+ B) A 32 bit hash value is produced from the string. Many thanks to
+ the Internet and the author (Bob Jenkins) for coming up with a very
+ good and fast universal string hash. Next the 32 bit hash number is
+ used as an Index to another JudyL array. Notice that one (1) JudyL
+ array is used as a hash table per each string length. If there are
+ no hash collisions (normally) then the string is copied to a
+ structure (ls_t) along with room for storing a Value. A flag is
+ added to the pointer to note it is pointing to a ls_t structure.
+ Since the lengths of the strings are the same, there is no need to
+ stored length of string in the ls_t structure. This saves about a
+ word per string of memory.
+
+ C) When there is a hashing collision (very rare), a JudyL array is
+ used to decode the next 4[8] bytes of the string. That is, the next
+ 4[8] bytes of the string are used as the Index. This process is
+ repeated until the remaining string is unique. The remaining string
+ (if any) is stored in a (now smaller) ls_t structure. If the
+ remaining string is less or equal to 4[8] bytes, then the ls_t
+ structure is not needed and the Value area in the JudyL array is
+ used. A compile option -DDONOTUSEHASH is available to test this
+ structure without using hashing (only the JudyL tree is used). This
+ is equivalent to having all strings hashed to the same bucket. The
+ speed is still better than all other tree based ADTs I have tested.
+ An added benefit of this is a very fast "hash collision" resolving.
+ It could foil hackers that exploit the slow synonym (linked-list)
+ collision handling property used with most hashing algorithms. If
+ this is not a necessary property, then a simpler ADT "JLHash" that is
+ documented the the test program "StringCompare.c" may be used with a
+ little loss of memory efficiency (because it includes the string
+ length with the ls_t structure). JudyHS was written to be the
+ fastest, very scalable, memory efficient, general purpose string ADT
+ possible. (However, I would like to eat those words someday). (dlb)
+
+*/
+
+#ifdef EXAMPLE_CODE
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <Judy.h>
+
+//#include "JudyHS.h" // for Judy.h without JudyHS*()
+
+// By Doug Baskins Apr 2004 - for JudyHS man page
+
+#define MAXLINE 1000000 /* max length of line */
+char Index[MAXLINE]; // string to check
+
+int // Usage: CheckDupLines < file
+main()
+{
+ Pvoid_t PJArray = (PWord_t)NULL; // Judy array.
+ PWord_t PValue; // ^ Judy array element.
+ Word_t Bytes; // size of JudyHS array.
+ Word_t LineNumb = 0; // current line number
+ Word_t Dups = 0; // number of duplicate lines
+
+ while (fgets(Index, MAXLINE, stdin) != (char *)NULL)
+ {
+ LineNumb++; // line number
+
+// store string into array
+ JHSI(PValue, PJArray, Index, strlen(Index));
+ if (*PValue) // check if duplicate
+ {
+ Dups++; // count duplicates
+ printf("Duplicate lines %lu:%lu:%s", *PValue, LineNumb, Index);
+ }
+ else
+ {
+ *PValue = LineNumb; // store Line number
+ }
+ }
+ printf("%lu Duplicates, free JudyHS array of %lu Lines\n",
+ Dups, LineNumb - Dups);
+ JHSFA(Bytes, PJArray); // free array
+ printf("The JudyHS array allocated %lu bytes of memory\n", Bytes);
+ return (0);
+}
+#endif // EXAMPLE_CODE
+
+// Note: Use JLAP_INVALID, which is non-zero, to mark pointers to a ls_t
+// This makes it compatable with previous versions of JudyL()
+
+#define IS_PLS(PLS) (((Word_t) (PLS)) & JLAP_INVALID)
+#define CLEAR_PLS(PLS) (((Word_t) (PLS)) & (~JLAP_INVALID))
+#define SET_PLS(PLS) (((Word_t) (PLS)) | JLAP_INVALID)
+
+#define WORDSIZE (sizeof(Word_t))
+
+// this is the struct used for "leaf" strings. Note that
+// the Value is followed by a "variable" length ls_String array.
+//
+typedef struct L_EAFSTRING
+{
+ Word_t ls_Value; // Value area (cannot change size)
+ uint8_t ls_String[WORDSIZE]; // to fill out to a Word_t size
+} ls_t , *Pls_t;
+
+#define LS_STRUCTOVD (sizeof(ls_t) - WORDSIZE)
+
+// Calculate size of ls_t including the string of length of LEN.
+//
+#define LS_WORDLEN(LEN) (((LEN) + LS_STRUCTOVD + WORDSIZE - 1) / WORDSIZE)
+
+// Copy from 0..4[8] bytes from string to a Word_t
+// NOTE: the copy in in little-endian order to take advantage of improved
+// memory efficiency of JudyLIns() with smaller numbers
+//
+#define COPYSTRING4toWORD(WORD,STR,LEN) \
+{ \
+ WORD = 0; \
+ switch(LEN) \
+ { \
+ default: /* four and greater */ \
+ case 4: \
+ WORD += (Word_t)(((uint8_t *)(STR))[3] << 24); \
+ case 3: \
+ WORD += (Word_t)(((uint8_t *)(STR))[2] << 16); \
+ case 2: \
+ WORD += (Word_t)(((uint8_t *)(STR))[1] << 8); \
+ case 1: \
+ WORD += (Word_t)(((uint8_t *)(STR))[0]); \
+ case 0: break; \
+ } \
+}
+
+#ifdef JU_64BIT
+
+// copy from 0..8 bytes from string to Word_t
+//
+#define COPYSTRING8toWORD(WORD,STR,LEN) \
+{ \
+ WORD = 0UL; \
+ switch(LEN) \
+ { \
+ default: /* eight and greater */ \
+ case 8: \
+ WORD += ((Word_t)((uint8_t *)(STR))[7] << 56); \
+ case 7: \
+ WORD += ((Word_t)((uint8_t *)(STR))[6] << 48); \
+ case 6: \
+ WORD += ((Word_t)((uint8_t *)(STR))[5] << 40); \
+ case 5: \
+ WORD += ((Word_t)((uint8_t *)(STR))[4] << 32); \
+ case 4: \
+ WORD += ((Word_t)((uint8_t *)(STR))[3] << 24); \
+ case 3: \
+ WORD += ((Word_t)((uint8_t *)(STR))[2] << 16); \
+ case 2: \
+ WORD += ((Word_t)((uint8_t *)(STR))[1] << 8); \
+ case 1: \
+ WORD += ((Word_t)((uint8_t *)(STR))[0]); \
+ case 0: break; \
+ } \
+}
+
+#define COPYSTRINGtoWORD COPYSTRING8toWORD
+
+#else // JU_32BIT
+
+#define COPYSTRINGtoWORD COPYSTRING4toWORD
+
+#endif // JU_32BIT
+
+// set JError_t locally
+
+#define JU_SET_ERRNO(PJERROR, JERRNO) \
+{ \
+ if (PJERROR != (PJError_t) NULL) \
+ { \
+ if (JERRNO) \
+ JU_ERRNO(PJError) = (JERRNO); \
+ JU_ERRID(PJERROR) = __LINE__; \
+ } \
+}
+
+//=======================================================================
+// This routine must hash string to 24..32 bits. The "goodness" of
+// the hash is not as important as its speed.
+//=======================================================================
+
+// hash to no more than 32 bits
+
+// extern Word_t gHmask; for hash bits experiments
+
+#define JUDYHASHSTR(HVALUE,STRING,LENGTH) \
+{ \
+ uint8_t *p_ = (uint8_t *)(STRING); \
+ uint8_t *q_ = p_ + (LENGTH); \
+ uint32_t c_ = 0; \
+ for (; p_ != q_; ++p_) \
+ { \
+ c_ = (c_ * 31) + *p_; \
+ } \
+/* c_ &= gHmask; see above */ \
+ (HVALUE) = c_; \
+}
+
+// Find String of Len in JudyHS structure, return pointer to associated Value
+
+PPvoid_t
+JudyHSGet(Pcvoid_t PArray, // pointer (^) to structure
+ void * Str, // pointer to string
+ Word_t Len // length of string
+ )
+{
+ uint8_t *String = (uint8_t *)Str;
+ PPvoid_t PPValue; // pointer to Value
+ Word_t Index; // 4[8] bytes of String
+
+ JLG(PPValue, PArray, Len); // find hash table for strings of Len
+ if (PPValue == (PPvoid_t) NULL)
+ return ((PPvoid_t) NULL); // no strings of this Len
+
+// check for caller error (null pointer)
+//
+ if ((String == (void *) NULL) && (Len != 0))
+ return ((PPvoid_t) NULL); // avoid null-pointer dereference
+
+#ifndef DONOTUSEHASH
+ if (Len > WORDSIZE) // Hash table not necessary with short
+ {
+ uint32_t HValue; // hash of input string
+ JUDYHASHSTR(HValue, String, Len); // hash to no more than 32 bits
+ JLG(PPValue, *PPValue, (Word_t)HValue); // get ^ to hash bucket
+ if (PPValue == (PPvoid_t) NULL)
+ return ((PPvoid_t) NULL); // no entry in Hash table
+ }
+#endif // DONOTUSEHASH
+
+/*
+ Each JudyL array decodes 4[8] bytes of the string. Since the hash
+ collisions occur very infrequently, the performance is not important.
+ However, even if the Hash code is not used this method still is
+ significantly faster than common tree methods (AVL, Red-Black, Splay,
+ b-tree, etc..). You can compare it yourself with #define DONOTUSEHASH
+ 1 or putting -DDONOTUSEHASH in the cc line. Use the "StringCompare.c"
+ code to compare (9Dec2003 dlb).
+*/
+ while (Len > WORDSIZE) // traverse tree of JudyL arrays
+ {
+ if (IS_PLS(*PPValue)) // ^ to JudyL array or ls_t struct?
+ {
+ Pls_t Pls; // ls_t struct, termination of tree
+ Pls = (Pls_t) CLEAR_PLS(*PPValue); // remove flag from ^
+
+// if remaining string matches, return ^ to Value, else NULL
+
+ if (memcmp(String, Pls->ls_String, Len) == 0)
+ return ((PPvoid_t) (&(Pls->ls_Value)));
+ else
+ return ((PPvoid_t) NULL); // string does not match
+ }
+ else
+ {
+ COPYSTRINGtoWORD(Index, String, WORDSIZE);
+
+ JLG(PPValue, *PPValue, Index); // decode next 4[8] bytes
+ if (PPValue == (PPvoid_t) NULL) // if NULL array, bail out
+ return ((PPvoid_t) NULL); // string does not match
+
+ String += WORDSIZE; // advance
+ Len -= WORDSIZE;
+ }
+ }
+
+// Get remaining 1..4[8] bytes left in string
+
+ COPYSTRINGtoWORD(Index, String, Len);
+ JLG(PPValue, *PPValue, Index); // decode last 1-4[8] bytes
+ return (PPValue);
+}
+
+// Add string to a tree of JudyL arrays (all lengths must be same)
+
+static PPvoid_t
+insStrJudyLTree(uint8_t * String, // string to add to tree of JudyL arrays
+ Word_t Len, // length of string
+ PPvoid_t PPValue, // pointer to root pointer
+ PJError_t PJError // for returning error info
+ )
+{
+ Word_t Index; // next 4[8] bytes of String
+
+ while (Len > WORDSIZE) // add to JudyL tree
+ {
+// CASE 1, pointer is to a NULL, make a new ls_t leaf
+
+ if (*PPValue == (Pvoid_t)NULL)
+ {
+ Pls_t Pls; // memory for a ls_t
+ Pls = (Pls_t) JudyMalloc(LS_WORDLEN(Len));
+ if (Pls == NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NOMEM);
+ return (PPJERR);
+ }
+ Pls->ls_Value = 0; // clear Value word
+ memcpy(Pls->ls_String, String, Len); // copy to new struct
+ *PPValue = (Pvoid_t)SET_PLS(Pls); // mark pointer
+ return ((PPvoid_t) (&Pls->ls_Value)); // return ^ to Value
+ } // no exit here
+// CASE 2: is a ls_t, free (and shorten), then decode into JudyL tree
+
+ if (IS_PLS(*PPValue)) // pointer to a ls_t? (leaf)
+ {
+ Pls_t Pls; // ^ to ls_t
+ uint8_t *String0; // ^ to string in ls_t
+ Word_t Index0; // 4[8] bytes in string
+ Word_t FreeLen; // length of ls_t
+ PPvoid_t PPsplit;
+
+ FreeLen = LS_WORDLEN(Len); // length of ls_t
+
+ Pls = (Pls_t) CLEAR_PLS(*PPValue); // demangle ^ to ls_t
+ String0 = Pls->ls_String;
+ if (memcmp(String, String0, Len) == 0) // check if match?
+ {
+ return ((PPvoid_t) (&Pls->ls_Value)); // yes, duplicate
+ }
+
+ *PPValue = NULL; // clear ^ to ls_t and make JudyL
+
+// This do loop is technically not required, saves multiple JudyFree()
+// when storing already sorted strings into structure
+
+ do // decode next 4[8] bytes of string
+ { // with a JudyL array
+// Note: string0 is always aligned
+
+ COPYSTRINGtoWORD(Index0, String0, WORDSIZE);
+ String0 += WORDSIZE;
+ COPYSTRINGtoWORD(Index, String, WORDSIZE);
+ String += WORDSIZE;
+ Len -= WORDSIZE;
+ PPsplit = PPValue; // save for split below
+ PPValue = JudyLIns(PPValue, Index0, PJError);
+ if (PPValue == PPJERR)
+ {
+ JU_SET_ERRNO(PJError, 0);
+ return (PPJERR);
+ }
+
+ } while ((Index0 == Index) && (Len > WORDSIZE));
+
+// finish storing remainder of string that was in the ls_t
+
+ PPValue = insStrJudyLTree(String0, Len, PPValue, PJError);
+ if (PPValue == PPJERR)
+ {
+ return (PPJERR);
+ }
+// copy old Value to Value in new struct
+
+ *(PWord_t)PPValue = Pls->ls_Value;
+
+// free the string buffer (ls_t)
+
+ JudyFree((Pvoid_t)Pls, FreeLen);
+ PPValue = JudyLIns(PPsplit, Index, PJError);
+ if (PPValue == PPJERR)
+ {
+ JU_SET_ERRNO(PJError, 0);
+ return (PPValue);
+ }
+
+// finish remainder of newly inserted string
+
+ PPValue = insStrJudyLTree(String, Len, PPValue, PJError);
+ return (PPValue);
+ } // no exit here
+// CASE 3, more JudyL arrays, decode to next tree
+
+ COPYSTRINGtoWORD(Index, String, WORDSIZE);
+ Len -= WORDSIZE;
+ String += WORDSIZE;
+
+ PPValue = JudyLIns(PPValue, Index, PJError); // next 4[8] bytes
+ if (PPValue == PPJERR)
+ {
+ JU_SET_ERRNO(PJError, 0);
+ return (PPValue);
+ }
+ }
+// this is done outside of loop so "Len" can be an unsigned number
+
+ COPYSTRINGtoWORD(Index, String, Len);
+ PPValue = JudyLIns(PPValue, Index, PJError); // remaining 4[8] bytes
+
+ return (PPValue);
+}
+
+
+// Insert string to JudyHS structure, return pointer to associated Value
+
+PPvoid_t
+JudyHSIns(PPvoid_t PPArray, // ^ to JudyHashArray name
+ void * Str, // pointer to string
+ Word_t Len, // length of string
+ PJError_t PJError // optional, for returning error info
+ )
+{
+ uint8_t * String = (uint8_t *)Str;
+ PPvoid_t PPValue;
+
+// string can only be NULL if Len is 0.
+
+ if ((String == (uint8_t *) NULL) && (Len != 0UL))
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return (PPJERR);
+ }
+ JLG(PPValue, *PPArray, Len); // JudyL hash table for strings of Len
+ if (PPValue == (PPvoid_t) NULL) // make new if missing, (very rare)
+ {
+ PPValue = JudyLIns(PPArray, Len, PJError);
+ if (PPValue == PPJERR)
+ {
+ JU_SET_ERRNO(PJError, 0);
+ return (PPJERR);
+ }
+ }
+#ifndef DONOTUSEHASH
+ if (Len > WORDSIZE)
+ {
+ uint32_t HValue; // hash of input string
+ JUDYHASHSTR(HValue, String, Len); // hash to no more than 32 bits
+ PPValue = JudyLIns(PPValue, (Word_t)HValue, PJError);
+ if (PPValue == PPJERR)
+ {
+ JU_SET_ERRNO(PJError, 0);
+ return (PPJERR);
+ }
+ }
+#endif // DONOTUSEHASH
+
+ PPValue = insStrJudyLTree(String, Len, PPValue, PJError); // add string
+ return (PPValue); // ^ to Value
+}
+
+// Delete string from tree of JudyL arrays (all Lens must be same)
+
+static int
+delStrJudyLTree(uint8_t * String, // delete from tree of JudyL arrays
+ Word_t Len, // length of string
+ PPvoid_t PPValue, // ^ to hash bucket
+ PJError_t PJError // for returning error info
+ )
+{
+ PPvoid_t PPValueN; // next pointer
+ Word_t Index;
+ int Ret; // -1=failed, 1=success, 2=quit del
+
+ if (IS_PLS(*PPValue)) // is pointer to ls_t?
+ {
+ Pls_t Pls;
+ Pls = (Pls_t) CLEAR_PLS(*PPValue); // demangle pointer
+ JudyFree((Pvoid_t)Pls, LS_WORDLEN(Len)); // free the ls_t
+
+ *PPValue = (Pvoid_t)NULL; // clean pointer
+ return (1); // successfully deleted
+ }
+
+ if (Len > WORDSIZE) // delete from JudyL tree, not leaf
+ {
+ COPYSTRINGtoWORD(Index, String, WORDSIZE); // get Index
+ JLG(PPValueN, *PPValue, Index); // get pointer to next JudyL array
+
+ String += WORDSIZE; // advance to next 4[8] bytes
+ Len -= WORDSIZE;
+
+ Ret = delStrJudyLTree(String, Len, PPValueN, PJError);
+ if (Ret != 1) return(Ret);
+
+ if (*PPValueN == (PPvoid_t) NULL)
+ {
+// delete JudyL element from tree
+
+ Ret = JudyLDel(PPValue, Index, PJError);
+ }
+ }
+ else
+ {
+ COPYSTRINGtoWORD(Index, String, Len); // get leaf element
+
+// delete last 1-4[8] bytes from leaf element
+
+ Ret = JudyLDel(PPValue, Index, PJError);
+ }
+ return (Ret);
+}
+
+// Delete string from JHS structure
+
+int
+JudyHSDel(PPvoid_t PPArray, // ^ to JudyHashArray struct
+ void * Str, // pointer to string
+ Word_t Len, // length of string
+ PJError_t PJError // optional, for returning error info
+ )
+{
+ uint8_t * String = (uint8_t *)Str;
+ PPvoid_t PPBucket, PPHtble;
+ int Ret; // return bool from Delete routine
+#ifndef DONOTUSEHASH
+ uint32_t HValue = 0; // hash value of input string
+#endif // DONOTUSEHASH
+
+ if (PPArray == NULL)
+ return (0); // no pointer, return not found
+
+// This is a little slower than optimum method, but not much in new CPU
+// Verify that string is in the structure -- simplifies future assumptions
+
+ if (JudyHSGet(*PPArray, String, Len) == (PPvoid_t) NULL)
+ return (0); // string not found, return
+
+// string is in structure, so testing for absence is not necessary
+
+ JLG(PPHtble, *PPArray, Len); // JudyL hash table for strings of Len
+
+#ifdef DONOTUSEHASH
+ PPBucket = PPHtble; // simulate below code
+#else // USEHASH
+ if (Len > WORDSIZE)
+ {
+ JUDYHASHSTR(HValue, String, Len); // hash to no more than 32 bits
+
+// get pointer to hash bucket
+
+ JLG(PPBucket, *PPHtble, (Word_t)HValue);
+ }
+ else
+ {
+ PPBucket = PPHtble; // no bucket to JLGet
+ }
+#endif // USEHASH
+
+// delete from JudyL tree
+//
+ Ret = delStrJudyLTree(String, Len, PPBucket, PJError);
+ if (Ret != 1)
+ {
+ JU_SET_ERRNO(PJError, 0);
+ return(-1);
+ }
+// handle case of missing JudyL array from hash table and length table
+
+ if (*PPBucket == (Pvoid_t)NULL) // if JudyL tree gone
+ {
+#ifndef DONOTUSEHASH
+ if (Len > WORDSIZE)
+ {
+// delete entry in Hash table
+
+ Ret = JudyLDel(PPHtble, (Word_t)HValue, PJError);
+ if (Ret != 1)
+ {
+ JU_SET_ERRNO(PJError, 0);
+ return(-1);
+ }
+ }
+#endif // USEHASH
+ if (*PPHtble == (PPvoid_t) NULL) // if Hash table gone
+ {
+// delete entry from the String length table
+
+ Ret = JudyLDel(PPArray, Len, PJError);
+ if (Ret != 1)
+ {
+ JU_SET_ERRNO(PJError, 0);
+ return(-1);
+ }
+ }
+ }
+ return (1); // success
+}
+
+static Word_t
+delJudyLTree(PPvoid_t PPValue, // ^ to JudyL root pointer
+ Word_t Len, // length of string
+ PJError_t PJError) // for returning error info
+{
+ Word_t bytes_freed = 0; // bytes freed at point
+ Word_t bytes_total = 0; // accumulated bytes freed
+ PPvoid_t PPValueN;
+
+// Pointer is to another tree of JudyL arrays or ls_t struct
+
+ if (Len > WORDSIZE) // more depth to tree
+ {
+ Word_t NEntry;
+
+// Pointer is to a ls_t struct
+
+ if (IS_PLS(*PPValue))
+ {
+ Pls_t Pls;
+ Word_t freewords;
+
+ freewords = LS_WORDLEN(Len); // calculate length
+ Pls = (Pls_t)CLEAR_PLS(*PPValue); // demangle pointer
+
+// *PPValue = (Pvoid_t)NULL; // clean pointer
+ JudyFree((Pvoid_t)Pls, freewords); // free the ls_t
+
+ return(freewords * WORDSIZE);
+ }
+// else
+// Walk all the entrys in the JudyL array
+
+ NEntry = 0; // start at beginning
+ for (PPValueN = JudyLFirst(*PPValue, &NEntry, PJError);
+ (PPValueN != (PPvoid_t) NULL) && (PPValueN != PPJERR);
+ PPValueN = JudyLNext(*PPValue, &NEntry, PJError))
+ {
+// recurse to the next level in the tree of arrays
+
+ bytes_freed = delJudyLTree(PPValueN, Len - WORDSIZE, PJError);
+ if (bytes_freed == JERR) return(JERR);
+ bytes_total += bytes_freed;
+ }
+ if (PPValueN == PPJERR) return(JERR);
+
+// now free this JudyL array
+
+ bytes_freed = JudyLFreeArray(PPValue, PJError);
+ if (bytes_freed == JERR) return(JERR);
+ bytes_total += bytes_freed;
+
+ return(bytes_total); // return amount freed
+ }
+// else
+
+// Pointer to simple JudyL array
+
+ bytes_freed = JudyLFreeArray(PPValue, PJError);
+
+ return(bytes_freed);
+}
+
+
+Word_t // bytes freed
+JudyHSFreeArray(PPvoid_t PPArray, // ^ to JudyHashArray struct
+ PJError_t PJError // optional, for returning error info
+ )
+{
+ Word_t Len; // start at beginning
+ Word_t bytes_freed; // bytes freed at this level.
+ Word_t bytes_total; // bytes total at all levels.
+ PPvoid_t PPHtble;
+
+ if (PPArray == NULL)
+ return (0); // no pointer, return none
+
+// Walk the string length table for subsidary hash structs
+// NOTE: This is necessary to determine the depth of the tree
+
+ bytes_freed = 0;
+ bytes_total = 0;
+ Len = 0; // walk to length table
+
+ for (PPHtble = JudyLFirst(*PPArray, &Len, PJError);
+ (PPHtble != (PPvoid_t) NULL) && (PPHtble != PPJERR);
+ PPHtble = JudyLNext(*PPArray, &Len, PJError))
+ {
+ PPvoid_t PPValueH;
+
+#ifndef DONOTUSEHASH
+ if (Len > WORDSIZE)
+ {
+ Word_t HEntry = 0; // walk the hash tables
+
+ for (PPValueH = JudyLFirst(*PPHtble, &HEntry, PJError);
+ (PPValueH != (PPvoid_t) NULL) && (PPValueH != PPJERR);
+ PPValueH = JudyLNext(*PPHtble, &HEntry, PJError))
+ {
+ bytes_freed = delJudyLTree(PPValueH, Len, PJError);
+ if (bytes_freed == JERR) return(JERR);
+ bytes_total += bytes_freed;
+ }
+
+ if (PPValueH == PPJERR) return(JERR);
+
+// free the Hash table for this length of string
+
+ bytes_freed = JudyLFreeArray(PPHtble, PJError);
+ if (bytes_freed == JERR) return(JERR);
+ bytes_total += bytes_freed;
+ }
+ else
+#endif // DONOTUSEHASH
+ {
+ PPValueH = PPHtble; // simulate hash table
+
+ bytes_freed = delJudyLTree(PPValueH, Len, PJError);
+ if (bytes_freed == JERR) return(JERR);
+ bytes_total += bytes_freed;
+ }
+ }
+ if (PPHtble == PPJERR) return(JERR);
+
+// free the length table
+
+ bytes_freed = JudyLFreeArray(PPArray, PJError);
+ if (bytes_freed == JERR) return(JERR);
+
+ bytes_total += bytes_freed;
+
+ return(bytes_total); // return bytes freed
+}
diff --git a/libs/klib/judy/JudyHS.h b/libs/klib/judy/JudyHS.h
new file mode 100644
index 0000000..b403501
--- /dev/null
+++ b/libs/klib/judy/JudyHS.h
@@ -0,0 +1,35 @@
+// ****************************************************************************
+// Quick and dirty header file for use with old Judy.h without JudyHS defs
+// May 2004 (dlb) - No copyright or license -- it is free period.
+
+#include <stdint.h>
+
+// ****************************************************************************
+// JUDYHSL MACROS:
+
+#define JHSI(PV, PArray, PIndex, Count) \
+ J_2P(PV, (&(PArray)), PIndex, Count, JudyHSIns, "JudyHSIns")
+#define JHSG(PV, PArray, PIndex, Count) \
+ (PV) = (Pvoid_t) JudyHSGet(PArray, PIndex, Count)
+#define JHSD(Rc, PArray, PIndex, Count) \
+ J_2I(Rc, (&(PArray)), PIndex, Count, JudyHSDel, "JudyHSDel")
+#define JHSFA(Rc, PArray) \
+ J_0I(Rc, (&(PArray)), JudyHSFreeArray, "JudyHSFreeArray")
+
+// ****************************************************************************
+// JUDY memory interface to malloc() FUNCTIONS:
+
+extern Word_t JudyMalloc(Word_t); // words reqd => words allocd.
+extern Word_t JudyMallocVirtual(Word_t); // words reqd => words allocd.
+extern void JudyFree(Pvoid_t, Word_t); // block to free and its size in words.
+extern void JudyFreeVirtual(Pvoid_t, Word_t); // block to free and its size in words.
+
+// ****************************************************************************
+// JUDYHS FUNCTIONS:
+
+extern PPvoid_t JudyHSGet( Pcvoid_t, void *, Word_t);
+extern PPvoid_t JudyHSIns( PPvoid_t, void *, Word_t, P_JE);
+extern int JudyHSDel( PPvoid_t, void *, Word_t, P_JE);
+extern Word_t JudyHSFreeArray( PPvoid_t, P_JE);
+
+extern uint32_t JudyHashStr( void *, Word_t);
diff --git a/libs/klib/judy/JudyIns.c b/libs/klib/judy/JudyIns.c
new file mode 100644
index 0000000..d90820b
--- /dev/null
+++ b/libs/klib/judy/JudyIns.c
@@ -0,0 +1,1871 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy1Set() and JudyLIns() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// TBD: Should some of the assertions here be converted to product code that
+// returns JU_ERRNO_CORRUPT?
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+// Note: Call JudyCheckPop() even before "already inserted" returns, to catch
+// population errors; see fix in 4.84:
+
+DBGCODE(extern void JudyCheckPop(Pvoid_t PArray);)
+DBGCODE(extern void JudyCheckSorted(Pjll_t Pjll, Word_t Pop1, long IndexSize);)
+
+#ifdef TRACEJP
+#include "JudyPrintJP.c"
+#endif
+
+
+// These are defined to generic values in JudyCommon/JudyPrivateTypes.h:
+//
+// TBD: These should be exported from a header file, but perhaps not, as they
+// are only used here, and exported from Judy*Decascade, which is a separate
+// file for profiling reasons (to prevent inlining), but which potentially
+// could be merged with this file, either in SoftCM or at compile-time.
+
+#ifdef JUDY1
+extern int j__udy1CreateBranchB(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+extern int j__udy1CreateBranchU(Pjp_t, Pvoid_t);
+
+#ifndef JU_64BIT
+extern int j__udy1Cascade1(Pjp_t, Pvoid_t);
+#endif
+extern int j__udy1Cascade2(Pjp_t, Pvoid_t);
+extern int j__udy1Cascade3(Pjp_t, Pvoid_t);
+#ifdef JU_64BIT
+extern int j__udy1Cascade4(Pjp_t, Pvoid_t);
+extern int j__udy1Cascade5(Pjp_t, Pvoid_t);
+extern int j__udy1Cascade6(Pjp_t, Pvoid_t);
+extern int j__udy1Cascade7(Pjp_t, Pvoid_t);
+#endif
+extern int j__udy1CascadeL(Pjp_t, Pvoid_t);
+
+extern int j__udy1InsertBranch(Pjp_t Pjp, Word_t Index, Word_t Btype, Pjpm_t);
+
+#else // JUDYL
+
+extern int j__udyLCreateBranchB(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+extern int j__udyLCreateBranchU(Pjp_t, Pvoid_t);
+
+extern int j__udyLCascade1(Pjp_t, Pvoid_t);
+extern int j__udyLCascade2(Pjp_t, Pvoid_t);
+extern int j__udyLCascade3(Pjp_t, Pvoid_t);
+#ifdef JU_64BIT
+extern int j__udyLCascade4(Pjp_t, Pvoid_t);
+extern int j__udyLCascade5(Pjp_t, Pvoid_t);
+extern int j__udyLCascade6(Pjp_t, Pvoid_t);
+extern int j__udyLCascade7(Pjp_t, Pvoid_t);
+#endif
+extern int j__udyLCascadeL(Pjp_t, Pvoid_t);
+
+extern int j__udyLInsertBranch(Pjp_t Pjp, Word_t Index, Word_t Btype, Pjpm_t);
+#endif
+
+
+// ****************************************************************************
+// MACROS FOR COMMON CODE:
+//
+// Check if Index is an outlier to (that is, not a member of) this expanse:
+//
+// An outlier is an Index in-the-expanse of the slot containing the pointer,
+// but not-in-the-expanse of the "narrow" pointer in that slot. (This means
+// the Dcd part of the Index differs from the equivalent part of jp_DcdPopO.)
+// Therefore, the remedy is to put a cJU_JPBRANCH_L* between the narrow pointer
+// and the object to which it points, and add the outlier Index as an Immediate
+// in the cJU_JPBRANCH_L*. The "trick" is placing the cJU_JPBRANCH_L* at a
+// Level that is as low as possible. This is determined by counting the digits
+// in the existing narrow pointer that are the same as the digits in the new
+// Index (see j__udyInsertBranch()).
+//
+// Note: At some high Levels, cJU_DCDMASK() is all zeros => dead code; assume
+// the compiler optimizes this out.
+
+#define JU_CHECK_IF_OUTLIER(Pjp, Index, cLevel, Pjpm) \
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, cLevel)) \
+ return(j__udyInsertBranch(Pjp, Index, cLevel, Pjpm))
+
+// Check if an Index is already in a leaf or immediate, after calling
+// j__udySearchLeaf*() to set Offset:
+//
+// A non-negative Offset means the Index already exists, so return 0; otherwise
+// complement Offset to proceed.
+
+#ifdef JUDY1
+#define Pjv ignore // placeholder.
+#define JU_CHECK_IF_EXISTS(Offset,ignore,Pjpm) \
+ { \
+ if ((Offset) >= 0) return(0); \
+ (Offset) = ~(Offset); \
+ }
+#else
+// For JudyL, also set the value area pointer in the Pjpm:
+
+#define JU_CHECK_IF_EXISTS(Offset,Pjv,Pjpm) \
+ { \
+ if ((Offset) >= 0) \
+ { \
+ (Pjpm)->jpm_PValue = (Pjv) + (Offset); \
+ return(0); \
+ } \
+ (Offset) = ~(Offset); \
+ }
+#endif
+
+
+// ****************************************************************************
+// __ J U D Y I N S W A L K
+//
+// Walk the Judy tree to do a set/insert. This is only called internally, and
+// recursively. Unlike Judy1Test() and JudyLGet(), the extra time required for
+// recursion should be negligible compared with the total.
+//
+// Return -1 for error (details in JPM), 0 for Index already inserted, 1 for
+// new Index inserted.
+
+FUNCTION static int j__udyInsWalk(
+ Pjp_t Pjp, // current JP to descend.
+ Word_t Index, // to insert.
+ Pjpm_t Pjpm) // for returning info to top Level.
+{
+ uint8_t digit; // from Index, current offset into a branch.
+ jp_t newJP; // for creating a new Immed JP.
+ Word_t exppop1; // expanse (leaf) population.
+ int retcode; // return codes: -1, 0, 1.
+
+#ifdef SUBEXPCOUNTS
+// Pointer to BranchB/U subexpanse counter:
+//
+// Note: Very important for performance reasons (avoids cache fills).
+
+ PWord_t PSubExp = (PWord_t) NULL;
+#endif
+
+ContinueInsWalk: // for modifying state without recursing.
+
+#ifdef TRACEJP
+ JudyPrintJP(Pjp, "i", __LINE__);
+#endif
+
+ switch (JU_JPTYPE(Pjp)) // entry: Pjp, Index.
+ {
+
+
+// ****************************************************************************
+// JPNULL*:
+//
+// Convert JP in place from current null type to cJU_JPIMMED_*_01 by
+// calculating new JP type.
+
+ case cJU_JPNULL1:
+ case cJU_JPNULL2:
+ case cJU_JPNULL3:
+#ifdef JU_64BIT
+ case cJU_JPNULL4:
+ case cJU_JPNULL5:
+ case cJU_JPNULL6:
+ case cJU_JPNULL7:
+#endif
+ assert((Pjp->jp_Addr) == 0);
+ JU_JPSETADT(Pjp, 0, Index, JU_JPTYPE(Pjp) + cJU_JPIMMED_1_01 - cJU_JPNULL1);
+#ifdef JUDYL
+ // value area is first word of new Immed_01 JP:
+ Pjpm->jpm_PValue = (Pjv_t) (&(Pjp->jp_Addr));
+#endif
+ return(1);
+
+
+// ****************************************************************************
+// JPBRANCH_L*:
+//
+// If the new Index is not an outlier to the branchs expanse, and the branch
+// should not be converted to uncompressed, extract the digit and record the
+// Immediate type to create for a new Immed JP, before going to common code.
+//
+// Note: JU_CHECK_IF_OUTLIER() is a no-op for BranchB3[7] on 32[64]-bit.
+
+#define JU_BRANCH_OUTLIER(DIGIT,POP1,cLEVEL,PJP,INDEX,PJPM) \
+ JU_CHECK_IF_OUTLIER(PJP, INDEX, cLEVEL, PJPM); \
+ (DIGIT) = JU_DIGITATSTATE(INDEX, cLEVEL); \
+ (POP1) = JU_JPBRANCH_POP0(PJP, cLEVEL)
+
+ case cJU_JPBRANCH_L2:
+ JU_BRANCH_OUTLIER(digit, exppop1, 2, Pjp, Index, Pjpm);
+ goto JudyBranchL;
+
+ case cJU_JPBRANCH_L3:
+ JU_BRANCH_OUTLIER(digit, exppop1, 3, Pjp, Index, Pjpm);
+ goto JudyBranchL;
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4:
+ JU_BRANCH_OUTLIER(digit, exppop1, 4, Pjp, Index, Pjpm);
+ goto JudyBranchL;
+
+ case cJU_JPBRANCH_L5:
+ JU_BRANCH_OUTLIER(digit, exppop1, 5, Pjp, Index, Pjpm);
+ goto JudyBranchL;
+
+ case cJU_JPBRANCH_L6:
+ JU_BRANCH_OUTLIER(digit, exppop1, 6, Pjp, Index, Pjpm);
+ goto JudyBranchL;
+
+ case cJU_JPBRANCH_L7:
+ JU_BRANCH_OUTLIER(digit, exppop1, 7, Pjp, Index, Pjpm);
+ goto JudyBranchL;
+#endif
+
+// Similar to common code above, but no outlier check is needed, and the Immed
+// type depends on the word size:
+
+ case cJU_JPBRANCH_L:
+ {
+ Pjbl_t PjblRaw; // pointer to old linear branch.
+ Pjbl_t Pjbl;
+ Pjbu_t PjbuRaw; // pointer to new uncompressed branch.
+ Pjbu_t Pjbu;
+ Word_t numJPs; // number of JPs = populated expanses.
+ int offset; // in branch.
+
+ digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+ exppop1 = Pjpm->jpm_Pop0;
+
+ // fall through:
+
+// COMMON CODE FOR LINEAR BRANCHES:
+//
+// Come here with digit and exppop1 already set.
+
+JudyBranchL:
+ PjblRaw = (Pjbl_t) (Pjp->jp_Addr);
+ Pjbl = P_JBL(PjblRaw);
+
+// If population under this branch greater than:
+
+ if (exppop1 > JU_BRANCHL_MAX_POP)
+ goto ConvertBranchLtoU;
+
+ numJPs = Pjbl->jbl_NumJPs;
+
+ if ((numJPs == 0) || (numJPs > cJU_BRANCHLMAXJPS))
+ {
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+ return(-1);
+ }
+
+// Search for a match to the digit:
+
+ offset = j__udySearchLeaf1((Pjll_t) (Pjbl->jbl_Expanse), numJPs,
+ digit);
+
+// If Index is found, offset is into an array of 1..cJU_BRANCHLMAXJPS JPs:
+
+ if (offset >= 0)
+ {
+ Pjp = (Pjbl->jbl_jp) + offset; // address of next JP.
+ break; // continue walk.
+ }
+
+// Expanse is missing (not populated) for the passed Index, so insert an Immed
+// -- if theres room:
+
+ if (numJPs < cJU_BRANCHLMAXJPS)
+ {
+ offset = ~offset; // insertion offset.
+
+ JU_JPSETADT(&newJP, 0, Index,
+ JU_JPTYPE(Pjp) + cJU_JPIMMED_1_01-cJU_JPBRANCH_L2);
+
+ JU_INSERTINPLACE(Pjbl->jbl_Expanse, numJPs, offset, digit);
+ JU_INSERTINPLACE(Pjbl->jbl_jp, numJPs, offset, newJP);
+
+ DBGCODE(JudyCheckSorted((Pjll_t) (Pjbl->jbl_Expanse),
+ numJPs + 1, /* IndexSize = */ 1);)
+ ++(Pjbl->jbl_NumJPs);
+#ifdef JUDYL
+ // value area is first word of new Immed 01 JP:
+ Pjpm->jpm_PValue = (Pjv_t) ((Pjbl->jbl_jp) + offset);
+#endif
+ return(1);
+ }
+
+
+// MAXED OUT LINEAR BRANCH, CONVERT TO A BITMAP BRANCH, THEN INSERT:
+//
+// Copy the linear branch to a bitmap branch.
+//
+// TBD: Consider renaming j__udyCreateBranchB() to j__udyConvertBranchLtoB().
+
+ assert((numJPs) <= cJU_BRANCHLMAXJPS);
+
+ if (j__udyCreateBranchB(Pjp, Pjbl->jbl_jp, Pjbl->jbl_Expanse,
+ numJPs, Pjpm) == -1)
+ {
+ return(-1);
+ }
+
+// Convert jp_Type from linear branch to equivalent bitmap branch:
+
+ Pjp->jp_Type += cJU_JPBRANCH_B - cJU_JPBRANCH_L;
+
+ j__udyFreeJBL(PjblRaw, Pjpm); // free old BranchL.
+
+// Having changed branch types, now do the insert in the new branch type:
+
+ goto ContinueInsWalk;
+
+
+// OPPORTUNISTICALLY CONVERT FROM BRANCHL TO BRANCHU:
+//
+// Memory efficiency is no object because the branchs pop1 is large enough, so
+// speed up array access. Come here with PjblRaw set. Note: This is goto
+// code because the previous block used to fall through into it as well, but no
+// longer.
+
+ConvertBranchLtoU:
+
+// Allocate memory for an uncompressed branch:
+
+ if ((PjbuRaw = j__udyAllocJBU(Pjpm)) == (Pjbu_t) NULL)
+ return(-1);
+ Pjbu = P_JBU(PjbuRaw);
+
+// Set the proper NULL type for most of the uncompressed branchs JPs:
+
+ JU_JPSETADT(&newJP, 0, 0,
+ JU_JPTYPE(Pjp) - cJU_JPBRANCH_L2 + cJU_JPNULL1);
+
+// Initialize: Pre-set uncompressed branch to mostly JPNULL*s:
+
+ for (numJPs = 0; numJPs < cJU_BRANCHUNUMJPS; ++numJPs)
+ Pjbu->jbu_jp[numJPs] = newJP;
+
+// Copy JPs from linear branch to uncompressed branch:
+
+ {
+#ifdef SUBEXPCOUNTS
+ Word_t popmask = cJU_POP0MASK(JU_JPTYPE(Pjp))
+ - cJU_JPBRANCH_L2 - 2;
+
+ for (numJPs = 0; numJPs < cJU_NUMSUBEXPU; ++numJPs)
+ Pjbu->jbu_subPop1[numJPs] = 0;
+#endif
+ for (numJPs = 0; numJPs < Pjbl->jbl_NumJPs; ++numJPs)
+ {
+ Pjp_t Pjp1 = &(Pjbl->jbl_jp[numJPs]);
+ offset = Pjbl->jbl_Expanse[numJPs];
+ Pjbu->jbu_jp[offset] = *Pjp1;
+#ifdef SUBEXPCOUNTS
+ Pjbu->jbu_subPop1[offset/cJU_NUMSUBEXPU] +=
+ JU_JPDCDPOP0(Pjp1) & popmask + 1;
+#endif
+ }
+ }
+ j__udyFreeJBL(PjblRaw, Pjpm); // free old BranchL.
+
+// Plug new values into parent JP:
+
+ Pjp->jp_Addr = (Word_t) PjbuRaw;
+ Pjp->jp_Type += cJU_JPBRANCH_U - cJU_JPBRANCH_L; // to BranchU.
+
+// Save global population of last BranchU conversion:
+
+ Pjpm->jpm_LastUPop0 = Pjpm->jpm_Pop0;
+ goto ContinueInsWalk;
+
+ } // case cJU_JPBRANCH_L.
+
+
+// ****************************************************************************
+// JPBRANCH_B*:
+//
+// If the new Index is not an outlier to the branchs expanse, extract the
+// digit and record the Immediate type to create for a new Immed JP, before
+// going to common code.
+//
+// Note: JU_CHECK_IF_OUTLIER() is a no-op for BranchB3[7] on 32[64]-bit.
+
+ case cJU_JPBRANCH_B2:
+ JU_BRANCH_OUTLIER(digit, exppop1, 2, Pjp, Index, Pjpm);
+ goto JudyBranchB;
+
+ case cJU_JPBRANCH_B3:
+ JU_BRANCH_OUTLIER(digit, exppop1, 3, Pjp, Index, Pjpm);
+ goto JudyBranchB;
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4:
+ JU_BRANCH_OUTLIER(digit, exppop1, 4, Pjp, Index, Pjpm);
+ goto JudyBranchB;
+
+ case cJU_JPBRANCH_B5:
+ JU_BRANCH_OUTLIER(digit, exppop1, 5, Pjp, Index, Pjpm);
+ goto JudyBranchB;
+
+ case cJU_JPBRANCH_B6:
+ JU_BRANCH_OUTLIER(digit, exppop1, 6, Pjp, Index, Pjpm);
+ goto JudyBranchB;
+
+ case cJU_JPBRANCH_B7:
+ JU_BRANCH_OUTLIER(digit, exppop1, 7, Pjp, Index, Pjpm);
+ goto JudyBranchB;
+#endif
+
+ case cJU_JPBRANCH_B:
+ {
+ Pjbb_t Pjbb; // pointer to bitmap branch.
+ Pjbb_t PjbbRaw; // pointer to bitmap branch.
+ Pjp_t Pjp2Raw; // 1 of N arrays of JPs.
+ Pjp_t Pjp2; // 1 of N arrays of JPs.
+ Word_t subexp; // 1 of N subexpanses in bitmap.
+ BITMAPB_t bitmap; // for one subexpanse.
+ BITMAPB_t bitmask; // bit set for Indexs digit.
+ Word_t numJPs; // number of JPs = populated expanses.
+ int offset; // in bitmap branch.
+
+// Similar to common code above, but no outlier check is needed, and the Immed
+// type depends on the word size:
+
+ digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+ exppop1 = Pjpm->jpm_Pop0;
+
+ // fall through:
+
+
+// COMMON CODE FOR BITMAP BRANCHES:
+//
+// Come here with digit and exppop1 already set.
+
+JudyBranchB:
+
+// If population increment is greater than.. (300):
+
+ if ((Pjpm->jpm_Pop0 - Pjpm->jpm_LastUPop0) > JU_BTOU_POP_INCREMENT)
+ {
+
+// If total population of array is greater than.. (750):
+
+ if (Pjpm->jpm_Pop0 > JU_BRANCHB_MAX_POP)
+ {
+
+// If population under the branch is greater than.. (135):
+
+ if (exppop1 > JU_BRANCHB_MIN_POP)
+ {
+ if (j__udyCreateBranchU(Pjp, Pjpm) == -1) return(-1);
+
+// Save global population of last BranchU conversion:
+
+ Pjpm->jpm_LastUPop0 = Pjpm->jpm_Pop0;
+
+ goto ContinueInsWalk;
+ }
+ }
+ }
+
+// CONTINUE TO USE BRANCHB:
+//
+// Get pointer to bitmap branch (JBB):
+
+ PjbbRaw = (Pjbb_t) (Pjp->jp_Addr);
+ Pjbb = P_JBB(PjbbRaw);
+
+// Form the Int32 offset, and Bit offset values:
+//
+// 8 bit Decode | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+// |SubExpanse | Bit offset |
+//
+// Get the 1 of 8 expanses from digit, Bits 5..7 = 1 of 8, and get the 32-bit
+// word that may have a bit set:
+
+ subexp = digit / cJU_BITSPERSUBEXPB;
+ bitmap = JU_JBB_BITMAP(Pjbb, subexp);
+
+ Pjp2Raw = JU_JBB_PJP(Pjbb, subexp);
+ Pjp2 = P_JP(Pjp2Raw);
+
+// Get the bit position that represents the desired expanse, and get the offset
+// into the array of JPs for the JP that matches the bit.
+
+ bitmask = JU_BITPOSMASKB(digit);
+ offset = j__udyCountBitsB(bitmap & (bitmask - 1));
+
+// If JP is already in this expanse, get Pjp and continue the walk:
+
+ if (bitmap & bitmask)
+ {
+#ifdef SUBEXPCOUNTS
+ PSubExp = &(Pjbb->jbb_Counts[subexp]); // ptr to subexp counts.
+#endif
+ Pjp = Pjp2 + offset;
+ break; // continue walk.
+ }
+
+
+// ADD NEW EXPANSE FOR NEW INDEX:
+//
+// The new expanse always an cJU_JPIMMED_*_01 containing just the new Index, so
+// finish setting up an Immed JP.
+
+ JU_JPSETADT(&newJP, 0, Index,
+ JU_JPTYPE(Pjp) + cJU_JPIMMED_1_01-cJU_JPBRANCH_B2);
+
+// Get 1 of the 8 JP arrays and calculate number of JPs in subexpanse array:
+
+ Pjp2Raw = JU_JBB_PJP(Pjbb, subexp);
+ Pjp2 = P_JP(Pjp2Raw);
+ numJPs = j__udyCountBitsB(bitmap);
+
+// Expand branch JP subarray in-place:
+
+ if (JU_BRANCHBJPGROWINPLACE(numJPs))
+ {
+ assert(numJPs > 0);
+ JU_INSERTINPLACE(Pjp2, numJPs, offset, newJP);
+#ifdef JUDYL
+ // value area is first word of new Immed 01 JP:
+ Pjpm->jpm_PValue = (Pjv_t) (Pjp2 + offset);
+#endif
+ }
+
+// No room, allocate a bigger bitmap branch JP subarray:
+
+ else
+ {
+ Pjp_t PjpnewRaw;
+ Pjp_t Pjpnew;
+
+ if ((PjpnewRaw = j__udyAllocJBBJP(numJPs + 1, Pjpm)) == 0)
+ return(-1);
+ Pjpnew = P_JP(PjpnewRaw);
+
+// If there was an old JP array, then copy it, insert the new Immed JP, and
+// free the old array:
+
+ if (numJPs)
+ {
+ JU_INSERTCOPY(Pjpnew, Pjp2, numJPs, offset, newJP);
+ j__udyFreeJBBJP(Pjp2Raw, numJPs, Pjpm);
+#ifdef JUDYL
+ // value area is first word of new Immed 01 JP:
+ Pjpm->jpm_PValue = (Pjv_t) (Pjpnew + offset);
+#endif
+ }
+
+// New JP subarray; point to cJU_JPIMMED_*_01 and place it:
+
+ else
+ {
+ assert(JU_JBB_PJP(Pjbb, subexp) == (Pjp_t) NULL);
+ Pjp = Pjpnew;
+ *Pjp = newJP; // copy to new memory.
+#ifdef JUDYL
+ // value area is first word of new Immed 01 JP:
+ Pjpm->jpm_PValue = (Pjv_t) (&(Pjp->jp_Addr));
+#endif
+ }
+
+// Place new JP subarray in BranchB:
+
+ JU_JBB_PJP(Pjbb, subexp) = PjpnewRaw;
+
+ } // else
+
+// Set the new Indexs bit:
+
+ JU_JBB_BITMAP(Pjbb, subexp) |= bitmask;
+
+ return(1);
+
+ } // case
+
+
+// ****************************************************************************
+// JPBRANCH_U*:
+//
+// Just drop through the JP for the correct digit. If the JP turns out to be a
+// JPNULL*, thats OK, the memory is already allocated, and the next walk
+// simply places an Immed in it.
+//
+#ifdef SUBEXPCOUNTS
+#define JU_GETSUBEXP(PSubExp,Pjbu,Digit) \
+ (PSubExp) = &((Pjbu)->jbu_subPop1[(Digit) / cJU_NUMSUBEXPU])
+#else
+#define JU_GETSUBEXP(PSubExp,Pjbu,Digit) // null.
+#endif
+
+#define JU_JBU_PJP_SUBEXP(Pjp,PSubExp,Index,Level) \
+ { \
+ uint8_t digit = JU_DIGITATSTATE(Index, Level); \
+ Pjbu_t P_jbu = P_JBU((Pjp)->jp_Addr); \
+ (Pjp) = &(P_jbu->jbu_jp[digit]); \
+ JU_GETSUBEXP(PSubExp, P_jbu, digit); \
+ }
+
+ case cJU_JPBRANCH_U2:
+ JU_CHECK_IF_OUTLIER(Pjp, Index, 2, Pjpm);
+ JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 2);
+ break;
+
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U3:
+ JU_CHECK_IF_OUTLIER(Pjp, Index, 3, Pjpm);
+ JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 3);
+ break;
+
+ case cJU_JPBRANCH_U4:
+ JU_CHECK_IF_OUTLIER(Pjp, Index, 4, Pjpm);
+ JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 4);
+ break;
+
+ case cJU_JPBRANCH_U5:
+ JU_CHECK_IF_OUTLIER(Pjp, Index, 5, Pjpm);
+ JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 5);
+ break;
+
+ case cJU_JPBRANCH_U6:
+ JU_CHECK_IF_OUTLIER(Pjp, Index, 6, Pjpm);
+ JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 6);
+ break;
+
+ case cJU_JPBRANCH_U7:
+ JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 7);
+#else
+ case cJU_JPBRANCH_U3:
+ JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 3);
+#endif
+ break;
+
+ case cJU_JPBRANCH_U:
+ JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, cJU_ROOTSTATE);
+ break;
+
+
+// ****************************************************************************
+// JPLEAF*:
+//
+// COMMON CODE FRAGMENTS TO MINIMIZE REDUNDANCY BELOW:
+//
+// These are necessary to support performance by function and loop unrolling
+// while avoiding huge amounts of nearly identical code.
+//
+// Prepare to handle a linear leaf: Check for an outlier; set pop1 and pointer
+// to leaf:
+
+#ifdef JUDY1
+#define JU_LEAFVALUE(Pjv) // null.
+#define JU_LEAFPREPVALUE(Pjv, ValueArea) // null.
+#else
+#define JU_LEAFVALUE(Pjv) Pjv_t Pjv
+#define JU_LEAFPREPVALUE(Pjv, ValueArea) (Pjv) = ValueArea(Pleaf, exppop1)
+#endif
+
+#define JU_LEAFPREP(cIS,Type,MaxPop1,ValueArea) \
+ Pjll_t PjllRaw; \
+ Type Pleaf; /* specific type */ \
+ int offset; \
+ JU_LEAFVALUE(Pjv); \
+ \
+ JU_CHECK_IF_OUTLIER(Pjp, Index, cIS, Pjpm); \
+ \
+ exppop1 = JU_JPLEAF_POP0(Pjp) + 1; \
+ assert(exppop1 <= (MaxPop1)); \
+ PjllRaw = (Pjll_t) (Pjp->jp_Addr); \
+ Pleaf = (Type) P_JLL(PjllRaw); \
+ JU_LEAFPREPVALUE(Pjv, ValueArea)
+
+// Add to, or grow, a linear leaf: Find Index position; if the Index is
+// absent, if theres room in the leaf, insert the Index [and value of 0] in
+// place, otherwise grow the leaf:
+//
+// Note: These insertions always take place with whole words, using
+// JU_INSERTINPLACE() or JU_INSERTCOPY().
+
+#ifdef JUDY1
+#define JU_LEAFGROWVALUEADD(Pjv,ExpPop1,Offset) // null.
+#else
+#define JU_LEAFGROWVALUEADD(Pjv,ExpPop1,Offset) \
+ JU_INSERTINPLACE(Pjv, ExpPop1, Offset, 0); \
+ Pjpm->jpm_PValue = (Pjv) + (Offset)
+#endif
+
+#ifdef JUDY1
+#define JU_LEAFGROWVALUENEW(ValueArea,Pjv,ExpPop1,Offset) // null.
+#else
+#define JU_LEAFGROWVALUENEW(ValueArea,Pjv,ExpPop1,Offset) \
+ { \
+ Pjv_t Pjvnew = ValueArea(Pleafnew, (ExpPop1) + 1); \
+ JU_INSERTCOPY(Pjvnew, Pjv, ExpPop1, Offset, 0); \
+ Pjpm->jpm_PValue = (Pjvnew) + (Offset); \
+ }
+#endif
+
+#define JU_LEAFGROW(cIS,Type,MaxPop1,Search,ValueArea,GrowInPlace, \
+ InsertInPlace,InsertCopy,Alloc,Free) \
+ \
+ offset = Search(Pleaf, exppop1, Index); \
+ JU_CHECK_IF_EXISTS(offset, Pjv, Pjpm); \
+ \
+ if (GrowInPlace(exppop1)) /* add to current leaf */ \
+ { \
+ InsertInPlace(Pleaf, exppop1, offset, Index); \
+ JU_LEAFGROWVALUEADD(Pjv, exppop1, offset); \
+ DBGCODE(JudyCheckSorted((Pjll_t) Pleaf, exppop1 + 1, cIS);) \
+ return(1); \
+ } \
+ \
+ if (exppop1 < (MaxPop1)) /* grow to new leaf */ \
+ { \
+ Pjll_t PjllnewRaw; \
+ Type Pleafnew; \
+ if ((PjllnewRaw = Alloc(exppop1 + 1, Pjpm)) == 0) return(-1); \
+ Pleafnew = (Type) P_JLL(PjllnewRaw); \
+ InsertCopy(Pleafnew, Pleaf, exppop1, offset, Index); \
+ JU_LEAFGROWVALUENEW(ValueArea, Pjv, exppop1, offset); \
+ DBGCODE(JudyCheckSorted((Pjll_t) Pleafnew, exppop1 + 1, cIS);) \
+ Free(PjllRaw, exppop1, Pjpm); \
+ (Pjp->jp_Addr) = (Word_t) PjllnewRaw; \
+ return(1); \
+ } \
+ assert(exppop1 == (MaxPop1))
+
+// Handle linear leaf overflow (cascade): Splay or compress into smaller
+// leaves:
+
+#define JU_LEAFCASCADE(MaxPop1,Cascade,Free) \
+ if (Cascade(Pjp, Pjpm) == -1) return(-1); \
+ Free(PjllRaw, MaxPop1, Pjpm); \
+ goto ContinueInsWalk
+
+// Wrapper around all of the above:
+
+#define JU_LEAFSET(cIS,Type,MaxPop1,Search,GrowInPlace,InsertInPlace, \
+ InsertCopy,Cascade,Alloc,Free,ValueArea) \
+ { \
+ JU_LEAFPREP(cIS,Type,MaxPop1,ValueArea); \
+ JU_LEAFGROW(cIS,Type,MaxPop1,Search,ValueArea,GrowInPlace, \
+ InsertInPlace,InsertCopy,Alloc,Free); \
+ JU_LEAFCASCADE(MaxPop1,Cascade,Free); \
+ }
+
+// END OF MACROS; LEAFL CASES START HERE:
+//
+// 64-bit Judy1 does not have 1-byte leaves:
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+ case cJU_JPLEAF1:
+
+ JU_LEAFSET(1, uint8_t *, cJU_LEAF1_MAXPOP1, j__udySearchLeaf1,
+ JU_LEAF1GROWINPLACE, JU_INSERTINPLACE, JU_INSERTCOPY,
+ j__udyCascade1, j__udyAllocJLL1, j__udyFreeJLL1,
+ JL_LEAF1VALUEAREA);
+
+#endif // (JUDYL || ! JU_64BIT)
+
+ case cJU_JPLEAF2:
+
+ JU_LEAFSET(2, uint16_t *, cJU_LEAF2_MAXPOP1, j__udySearchLeaf2,
+ JU_LEAF2GROWINPLACE, JU_INSERTINPLACE, JU_INSERTCOPY,
+ j__udyCascade2, j__udyAllocJLL2, j__udyFreeJLL2,
+ JL_LEAF2VALUEAREA);
+
+ case cJU_JPLEAF3:
+
+ JU_LEAFSET(3, uint8_t *, cJU_LEAF3_MAXPOP1, j__udySearchLeaf3,
+ JU_LEAF3GROWINPLACE, JU_INSERTINPLACE3, JU_INSERTCOPY3,
+ j__udyCascade3, j__udyAllocJLL3, j__udyFreeJLL3,
+ JL_LEAF3VALUEAREA);
+
+#ifdef JU_64BIT
+ case cJU_JPLEAF4:
+
+ JU_LEAFSET(4, uint32_t *, cJU_LEAF4_MAXPOP1, j__udySearchLeaf4,
+ JU_LEAF4GROWINPLACE, JU_INSERTINPLACE, JU_INSERTCOPY,
+ j__udyCascade4, j__udyAllocJLL4, j__udyFreeJLL4,
+ JL_LEAF4VALUEAREA);
+
+ case cJU_JPLEAF5:
+
+ JU_LEAFSET(5, uint8_t *, cJU_LEAF5_MAXPOP1, j__udySearchLeaf5,
+ JU_LEAF5GROWINPLACE, JU_INSERTINPLACE5, JU_INSERTCOPY5,
+ j__udyCascade5, j__udyAllocJLL5, j__udyFreeJLL5,
+ JL_LEAF5VALUEAREA);
+
+ case cJU_JPLEAF6:
+
+ JU_LEAFSET(6, uint8_t *, cJU_LEAF6_MAXPOP1, j__udySearchLeaf6,
+ JU_LEAF6GROWINPLACE, JU_INSERTINPLACE6, JU_INSERTCOPY6,
+ j__udyCascade6, j__udyAllocJLL6, j__udyFreeJLL6,
+ JL_LEAF6VALUEAREA);
+
+ case cJU_JPLEAF7:
+
+ JU_LEAFSET(7, uint8_t *, cJU_LEAF7_MAXPOP1, j__udySearchLeaf7,
+ JU_LEAF7GROWINPLACE, JU_INSERTINPLACE7, JU_INSERTCOPY7,
+ j__udyCascade7, j__udyAllocJLL7, j__udyFreeJLL7,
+ JL_LEAF7VALUEAREA);
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// JPLEAF_B1:
+//
+// 8 bit Decode | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+// |SubExpanse | Bit offset |
+//
+// Note: For JudyL, values are stored in 8 subexpanses, each a linear word
+// array of up to 32 values each.
+
+ case cJU_JPLEAF_B1:
+ {
+#ifdef JUDYL
+ Pjv_t PjvRaw; // pointer to value part of the leaf.
+ Pjv_t Pjv; // pointer to value part of the leaf.
+ Pjv_t PjvnewRaw; // new value area.
+ Pjv_t Pjvnew; // new value area.
+ Word_t subexp; // 1 of 8 subexpanses in bitmap.
+ Pjlb_t Pjlb; // pointer to bitmap part of the leaf.
+ BITMAPL_t bitmap; // for one subexpanse.
+ BITMAPL_t bitmask; // bit set for Indexs digit.
+ int offset; // of index in value area.
+#endif
+
+ JU_CHECK_IF_OUTLIER(Pjp, Index, 1, Pjpm);
+
+#ifdef JUDY1
+
+// If Index (bit) is already set, return now:
+
+ if (JU_BITMAPTESTL(P_JLB(Pjp->jp_Addr), Index)) return(0);
+
+// If bitmap is not full, set the new Indexs bit; otherwise convert to a Full:
+
+ if ((exppop1 = JU_JPLEAF_POP0(Pjp) + 1)
+ < cJU_JPFULLPOPU1_POP0)
+ {
+ JU_BITMAPSETL(P_JLB(Pjp->jp_Addr), Index);
+ }
+ else
+ {
+ j__udyFreeJLB1((Pjlb_t) (Pjp->jp_Addr), Pjpm); // free LeafB1.
+ Pjp->jp_Type = cJ1_JPFULLPOPU1;
+ Pjp->jp_Addr = 0;
+ }
+
+#else // JUDYL
+
+// This is very different from Judy1 because of the need to return a value area
+// even for an existing Index, or manage the value area for a new Index, and
+// because JudyL has no Full type:
+
+// Get last byte to decode from Index, and pointer to bitmap leaf:
+
+ digit = JU_DIGITATSTATE(Index, 1);
+ Pjlb = P_JLB(Pjp->jp_Addr);
+
+// Prepare additional values:
+
+ subexp = digit / cJU_BITSPERSUBEXPL; // which subexpanse.
+ bitmap = JU_JLB_BITMAP(Pjlb, subexp); // subexps 32-bit map.
+ PjvRaw = JL_JLB_PVALUE(Pjlb, subexp); // corresponding values.
+ Pjv = P_JV(PjvRaw); // corresponding values.
+ bitmask = JU_BITPOSMASKL(digit); // mask for Index.
+ offset = j__udyCountBitsL(bitmap & (bitmask - 1)); // of Index.
+
+// If Index already exists, get value pointer and exit:
+
+ if (bitmap & bitmask)
+ {
+ assert(Pjv);
+ Pjpm->jpm_PValue = Pjv + offset; // existing value.
+ return(0);
+ }
+
+// Get the total bits set = expanse population of Value area:
+
+ exppop1 = j__udyCountBitsL(bitmap);
+
+// If the value area can grow in place, do it:
+
+ if (JL_LEAFVGROWINPLACE(exppop1))
+ {
+ JU_INSERTINPLACE(Pjv, exppop1, offset, 0);
+ JU_JLB_BITMAP(Pjlb, subexp) |= bitmask; // set Indexs bit.
+ Pjpm->jpm_PValue = Pjv + offset; // new value area.
+ return(1);
+ }
+
+// Increase size of value area:
+
+ if ((PjvnewRaw = j__udyLAllocJV(exppop1 + 1, Pjpm))
+ == (Pjv_t) NULL) return(-1);
+ Pjvnew = P_JV(PjvnewRaw);
+
+ if (exppop1) // have existing value area.
+ {
+ assert(Pjv);
+ JU_INSERTCOPY(Pjvnew, Pjv, exppop1, offset, 0);
+ Pjpm->jpm_PValue = Pjvnew + offset;
+ j__udyLFreeJV(PjvRaw, exppop1, Pjpm); // free old values.
+ }
+ else // first index, new value area:
+ {
+ Pjpm->jpm_PValue = Pjvnew;
+ *(Pjpm->jpm_PValue) = 0;
+ }
+
+// Set bit for new Index and place new leaf value area in bitmap:
+
+ JU_JLB_BITMAP(Pjlb, subexp) |= bitmask;
+ JL_JLB_PVALUE(Pjlb, subexp) = PjvnewRaw;
+
+#endif // JUDYL
+
+ return(1);
+
+ } // case
+
+
+#ifdef JUDY1
+// ****************************************************************************
+// JPFULLPOPU1:
+//
+// If Index is not an outlier, then by definition its already set.
+
+ case cJ1_JPFULLPOPU1:
+
+ JU_CHECK_IF_OUTLIER(Pjp, Index, 1, Pjpm);
+ return(0);
+#endif
+
+
+// ****************************************************************************
+// JPIMMED*:
+//
+// This is some of the most complex code in Judy considering Judy1 versus JudyL
+// and 32-bit versus 64-bit variations. The following comments attempt to make
+// this clearer.
+//
+// Of the 2 words in a JP, for immediate indexes Judy1 can use 2 words - 1 byte
+// = 7 [15] bytes, but JudyL can only use 1 word - 1 byte = 3 [7] bytes because
+// the other word is needed for a value area or a pointer to a value area.
+//
+// For both Judy1 and JudyL, cJU_JPIMMED_*_01 indexes are in word 2; otherwise
+// for Judy1 only, a list of 2 or more indexes starts in word 1. JudyL keeps
+// the list in word 2 because word 1 is a pointer (to a LeafV, that is, a leaf
+// containing only values). Furthermore, cJU_JPIMMED_*_01 indexes are stored
+// all-but-first-byte in jp_DcdPopO, not just the Index Sizes bytes.
+//
+// TBD: This can be confusing because Doug didnt use data structures for it.
+// Instead he often directly accesses Pjp for the first word and jp_DcdPopO for
+// the second word. It would be nice to use data structs, starting with
+// jp_1Index and jp_LIndex where possible.
+//
+// Maximum Immed JP types for Judy1/JudyL, depending on Index Size (cIS):
+//
+// 32-bit 64-bit
+//
+// bytes: 7/ 3 15/ 7 (Judy1/JudyL)
+//
+// cIS
+// 1_ 07/03 15/07 (as in: cJ1_JPIMMED_1_07)
+// 2_ 03/01 07/03
+// 3_ 02/01 05/02
+// 4_ 03/01
+// 5_ 03/01
+// 6_ 02/01
+// 7_ 02/01
+//
+// State transitions while inserting an Index, matching the above table:
+// (Yes, this is very terse... Study it and it will make sense.)
+// (Note, parts of this diagram are repeated below for quick reference.)
+//
+// +-- reformat JP here for Judy1 only, from word-2 to word-1
+// |
+// | JUDY1 || JU_64BIT JUDY1 && JU_64BIT
+// V
+// 1_01 => 1_02 => 1_03 => [ 1_04 => ... => 1_07 => [ 1_08..15 => ]] Leaf1 (*)
+// 2_01 => [ 2_02 => 2_03 => [ 2_04..07 => ]] Leaf2
+// 3_01 => [ 3_02 => [ 3_03..05 => ]] Leaf3
+// JU_64BIT only:
+// 4_01 => [[ 4_02..03 => ]] Leaf4
+// 5_01 => [[ 5_02..03 => ]] Leaf5
+// 6_01 => [[ 6_02 => ]] Leaf6
+// 7_01 => [[ 7_02 => ]] Leaf7
+//
+// (*) For Judy1 & 64-bit, go directly from cJU_JPIMMED_1_15 to a LeafB1; skip
+// Leaf1, as described in Judy1.h regarding cJ1_JPLEAF1.
+
+
+// COMMON CODE FRAGMENTS TO MINIMIZE REDUNDANCY BELOW:
+//
+// These are necessary to support performance by function and loop unrolling
+// while avoiding huge amounts of nearly identical code.
+//
+// The differences between Judy1 and JudyL with respect to value area handling
+// are just too large for completely common code between them... Oh well, some
+// big ifdefs follow. However, even in the following ifdefd code, use cJU_*,
+// JU_*, and Judy*() instead of cJ1_* / cJL_*, J1_* / JL_*, and
+// Judy1*()/JudyL*(), for minimum diffs.
+//
+// Handle growth of cJU_JPIMMED_*_01 to cJU_JPIMMED_*_02, for an even or odd
+// Index Size (cIS), given oldIndex, Index, and Pjll in the context:
+//
+// Put oldIndex and Index in their proper order. For odd indexes, must copy
+// bytes.
+
+#ifdef JUDY1
+
+#define JU_IMMSET_01_COPY_EVEN(ignore1,ignore2) \
+ if (oldIndex < Index) { Pjll[0] = oldIndex; Pjll[1] = Index; } \
+ else { Pjll[0] = Index; Pjll[1] = oldIndex; }
+
+#define JU_IMMSET_01_COPY_ODD(cIS,CopyWord) \
+ if (oldIndex < Index) \
+ { \
+ CopyWord(Pjll + 0, oldIndex); \
+ CopyWord(Pjll + (cIS), Index); \
+ } \
+ else \
+ { \
+ CopyWord(Pjll + 0, Index); \
+ CopyWord(Pjll + (cIS), oldIndex); \
+ }
+
+// The "real" *_01 Copy macro:
+//
+// Trim the high byte off Index, look for a match with the old Index, and if
+// none, insert the new Index in the leaf in the correct place, given Pjp and
+// Index in the context.
+//
+// Note: A single immediate index lives in the jp_DcdPopO field, but two or
+// more reside starting at Pjp->jp_1Index.
+
+#define JU_IMMSET_01_COPY(cIS,LeafType,NewJPType,Copy,CopyWord) \
+ { \
+ LeafType Pjll; \
+ Word_t oldIndex = JU_JPDCDPOP0(Pjp); \
+ \
+ Index = JU_TRIMTODCDSIZE(Index); \
+ if (oldIndex == Index) return(0); \
+ \
+ Pjll = (LeafType) (Pjp->jp_1Index); \
+ Copy(cIS,CopyWord); \
+ DBGCODE(JudyCheckSorted(Pjll, 2, cIS);) \
+ \
+ Pjp->jp_Type = (NewJPType); \
+ return(1); \
+ }
+
+#else // JUDYL
+
+// Variations to also handle value areas; see comments above:
+//
+// For JudyL, Pjv (start of value area) and oldValue are also in the context;
+// leave Pjv set to the value area for Index.
+
+#define JU_IMMSET_01_COPY_EVEN(cIS,CopyWord) \
+ if (oldIndex < Index) \
+ { \
+ Pjll[0] = oldIndex; \
+ Pjv [0] = oldValue; \
+ Pjll[1] = Index; \
+ ++Pjv; \
+ } \
+ else \
+ { \
+ Pjll[0] = Index; \
+ Pjll[1] = oldIndex; \
+ Pjv [1] = oldValue; \
+ }
+
+#define JU_IMMSET_01_COPY_ODD(cIS,CopyWord) \
+ if (oldIndex < Index) \
+ { \
+ CopyWord(Pjll + 0, oldIndex); \
+ CopyWord(Pjll + (cIS), Index); \
+ Pjv[0] = oldValue; \
+ ++Pjv; \
+ } \
+ else \
+ { \
+ CopyWord(Pjll + 0, Index); \
+ CopyWord(Pjll + (cIS), oldIndex); \
+ Pjv[1] = oldValue; \
+ }
+
+// The old value area is in the first word (*Pjp), and Pjv and Pjpm are also in
+// the context. Also, unlike Judy1, indexes remain in word 2 (jp_LIndex),
+// meaning insert-in-place rather than copy.
+//
+// Return jpm_PValue pointing to Indexs value area. If Index is new, allocate
+// a 2-value-leaf and attach it to the JP.
+
+#define JU_IMMSET_01_COPY(cIS,LeafType,NewJPType,Copy,CopyWord) \
+ { \
+ LeafType Pjll; \
+ Word_t oldIndex = JU_JPDCDPOP0(Pjp); \
+ Word_t oldValue; \
+ Pjv_t PjvRaw; \
+ Pjv_t Pjv; \
+ \
+ Index = JU_TRIMTODCDSIZE(Index); \
+ \
+ if (oldIndex == Index) \
+ { \
+ Pjpm->jpm_PValue = (Pjv_t) Pjp; \
+ return(0); \
+ } \
+ \
+ if ((PjvRaw = j__udyLAllocJV(2, Pjpm)) == (Pjv_t) NULL) \
+ return(-1); \
+ Pjv = P_JV(PjvRaw); \
+ \
+ oldValue = Pjp->jp_Addr; \
+ (Pjp->jp_Addr) = (Word_t) PjvRaw; \
+ Pjll = (LeafType) (Pjp->jp_LIndex); \
+ \
+ Copy(cIS,CopyWord); \
+ DBGCODE(JudyCheckSorted(Pjll, 2, cIS);) \
+ \
+ Pjp->jp_Type = (NewJPType); \
+ *Pjv = 0; \
+ Pjpm->jpm_PValue = Pjv; \
+ return(1); \
+ }
+
+// The following is a unique mix of JU_IMMSET_01() and JU_IMMSETCASCADE() for
+// going from cJU_JPIMMED_*_01 directly to a cJU_JPLEAF* for JudyL:
+//
+// If Index is not already set, allocate a leaf, copy the old and new indexes
+// into it, clear and return the new value area, and modify the current JP.
+// Note that jp_DcdPop is set to a pop0 of 0 for now, and incremented later.
+
+
+#define JU_IMMSET_01_CASCADE(cIS,LeafType,NewJPType,ValueArea, \
+ Copy,CopyWord,Alloc) \
+ { \
+ Word_t D_P0; \
+ LeafType PjllRaw; \
+ LeafType Pjll; \
+ Word_t oldIndex = JU_JPDCDPOP0(Pjp); \
+ Word_t oldValue; \
+ Pjv_t Pjv; \
+ \
+ Index = JU_TRIMTODCDSIZE(Index); \
+ \
+ if (oldIndex == Index) \
+ { \
+ Pjpm->jpm_PValue = (Pjv_t) (&(Pjp->jp_Addr)); \
+ return(0); \
+ } \
+ \
+ if ((PjllRaw = (LeafType) Alloc(2, Pjpm)) == (LeafType) NULL) \
+ return(-1); \
+ Pjll = (LeafType) P_JLL(PjllRaw); \
+ Pjv = ValueArea(Pjll, 2); \
+ \
+ oldValue = Pjp->jp_Addr; \
+ \
+ Copy(cIS,CopyWord); \
+ DBGCODE(JudyCheckSorted(Pjll, 2, cIS);) \
+ \
+ *Pjv = 0; \
+ Pjpm->jpm_PValue = Pjv; \
+ D_P0 = Index & cJU_DCDMASK(cIS); /* pop0 = 0 */ \
+ JU_JPSETADT(Pjp, (Word_t)PjllRaw, D_P0, NewJPType); \
+ \
+ return(1); \
+ }
+
+#endif // JUDYL
+
+// Handle growth of cJU_JPIMMED_*_[02..15]:
+
+#ifdef JUDY1
+
+// Insert an Index into an immediate JP that has room for more, if the Index is
+// not already present; given Pjp, Index, exppop1, Pjv, and Pjpm in the
+// context:
+//
+// Note: Use this only when the JP format doesnt change, that is, going from
+// cJU_JPIMMED_X_0Y to cJU_JPIMMED_X_0Z, where X >= 2 and Y+1 = Z.
+//
+// Note: Incrementing jp_Type is how to increase the Index population.
+
+#define JU_IMMSETINPLACE(cIS,LeafType,BaseJPType_02,Search,InsertInPlace) \
+ { \
+ LeafType Pjll; \
+ int offset; \
+ \
+ exppop1 = JU_JPTYPE(Pjp) - (BaseJPType_02) + 2; \
+ offset = Search((Pjll_t) (Pjp->jp_1Index), exppop1, Index); \
+ \
+ JU_CHECK_IF_EXISTS(offset, ignore, Pjpm); \
+ \
+ Pjll = (LeafType) (Pjp->jp_1Index); \
+ InsertInPlace(Pjll, exppop1, offset, Index); \
+ DBGCODE(JudyCheckSorted(Pjll, exppop1 + 1, cIS);) \
+ ++(Pjp->jp_Type); \
+ return(1); \
+ }
+
+// Insert an Index into an immediate JP that has no room for more:
+//
+// If the Index is not already present, do a cascade (to a leaf); given Pjp,
+// Index, Pjv, and Pjpm in the context.
+
+
+#define JU_IMMSETCASCADE(cIS,OldPop1,LeafType,NewJPType, \
+ ignore,Search,InsertCopy,Alloc) \
+ { \
+ Word_t D_P0; \
+ Pjll_t PjllRaw; \
+ Pjll_t Pjll; \
+ int offset; \
+ \
+ offset = Search((Pjll_t) (Pjp->jp_1Index), (OldPop1), Index); \
+ JU_CHECK_IF_EXISTS(offset, ignore, Pjpm); \
+ \
+ if ((PjllRaw = Alloc((OldPop1) + 1, Pjpm)) == 0) return(-1); \
+ Pjll = P_JLL(PjllRaw); \
+ \
+ InsertCopy((LeafType) Pjll, (LeafType) (Pjp->jp_1Index), \
+ OldPop1, offset, Index); \
+ DBGCODE(JudyCheckSorted(Pjll, (OldPop1) + 1, cIS);) \
+ \
+ D_P0 = (Index & cJU_DCDMASK(cIS)) + (OldPop1) - 1; \
+ JU_JPSETADT(Pjp, (Word_t)PjllRaw, D_P0, NewJPType); \
+ return(1); \
+ }
+
+#else // JUDYL
+
+// Variations to also handle value areas; see comments above:
+//
+// For JudyL, Pjv (start of value area) is also in the context.
+//
+// TBD: This code makes a true but weak assumption that a JudyL 32-bit 2-index
+// value area must be copied to a new 3-index value area. AND it doesnt know
+// anything about JudyL 64-bit cases (cJU_JPIMMED_1_0[3-7] only) where the
+// value area can grow in place! However, this should not break it, just slow
+// it down.
+
+#define JU_IMMSETINPLACE(cIS,LeafType,BaseJPType_02,Search,InsertInPlace) \
+ { \
+ LeafType Pleaf; \
+ int offset; \
+ Pjv_t PjvRaw; \
+ Pjv_t Pjv; \
+ Pjv_t PjvnewRaw; \
+ Pjv_t Pjvnew; \
+ \
+ exppop1 = JU_JPTYPE(Pjp) - (BaseJPType_02) + 2; \
+ offset = Search((Pjll_t) (Pjp->jp_LIndex), exppop1, Index); \
+ PjvRaw = (Pjv_t) (Pjp->jp_Addr); \
+ Pjv = P_JV(PjvRaw); \
+ \
+ JU_CHECK_IF_EXISTS(offset, Pjv, Pjpm); \
+ \
+ if ((PjvnewRaw = j__udyLAllocJV(exppop1 + 1, Pjpm)) \
+ == (Pjv_t) NULL) return(-1); \
+ Pjvnew = P_JV(PjvnewRaw); \
+ \
+ Pleaf = (LeafType) (Pjp->jp_LIndex); \
+ \
+ InsertInPlace(Pleaf, exppop1, offset, Index); \
+ /* see TBD above about this: */ \
+ JU_INSERTCOPY(Pjvnew, Pjv, exppop1, offset, 0); \
+ DBGCODE(JudyCheckSorted(Pleaf, exppop1 + 1, cIS);) \
+ j__udyLFreeJV(PjvRaw, exppop1, Pjpm); \
+ Pjp->jp_Addr = (Word_t) PjvnewRaw; \
+ Pjpm->jpm_PValue = Pjvnew + offset; \
+ \
+ ++(Pjp->jp_Type); \
+ return(1); \
+ }
+
+#define JU_IMMSETCASCADE(cIS,OldPop1,LeafType,NewJPType, \
+ ValueArea,Search,InsertCopy,Alloc) \
+ { \
+ Word_t D_P0; \
+ Pjll_t PjllRaw; \
+ Pjll_t Pjll; \
+ int offset; \
+ Pjv_t PjvRaw; \
+ Pjv_t Pjv; \
+ Pjv_t Pjvnew; \
+ \
+ PjvRaw = (Pjv_t) (Pjp->jp_Addr); \
+ Pjv = P_JV(PjvRaw); \
+ offset = Search((Pjll_t) (Pjp->jp_LIndex), (OldPop1), Index); \
+ JU_CHECK_IF_EXISTS(offset, Pjv, Pjpm); \
+ \
+ if ((PjllRaw = Alloc((OldPop1) + 1, Pjpm)) == 0) \
+ return(-1); \
+ Pjll = P_JLL(PjllRaw); \
+ InsertCopy((LeafType) Pjll, (LeafType) (Pjp->jp_LIndex), \
+ OldPop1, offset, Index); \
+ DBGCODE(JudyCheckSorted(Pjll, (OldPop1) + 1, cIS);) \
+ \
+ Pjvnew = ValueArea(Pjll, (OldPop1) + 1); \
+ JU_INSERTCOPY(Pjvnew, Pjv, OldPop1, offset, 0); \
+ j__udyLFreeJV(PjvRaw, (OldPop1), Pjpm); \
+ Pjpm->jpm_PValue = Pjvnew + offset; \
+ \
+ D_P0 = (Index & cJU_DCDMASK(cIS)) + (OldPop1) - 1; \
+ JU_JPSETADT(Pjp, (Word_t)PjllRaw, D_P0, NewJPType); \
+ return(1); \
+ }
+
+#endif // JUDYL
+
+// Common convenience/shorthand wrappers around JU_IMMSET_01_COPY() for
+// even/odd index sizes:
+
+#define JU_IMMSET_01( cIS, LeafType, NewJPType) \
+ JU_IMMSET_01_COPY(cIS, LeafType, NewJPType, JU_IMMSET_01_COPY_EVEN, \
+ ignore)
+
+#define JU_IMMSET_01_ODD( cIS, NewJPType, CopyWord) \
+ JU_IMMSET_01_COPY(cIS, uint8_t *, NewJPType, JU_IMMSET_01_COPY_ODD, \
+ CopyWord)
+
+
+// END OF MACROS; IMMED CASES START HERE:
+
+// cJU_JPIMMED_*_01 cases:
+//
+// 1_01 always leads to 1_02:
+//
+// (1_01 => 1_02 => 1_03 => [ 1_04 => ... => 1_07 => [ 1_08..15 => ]] LeafL)
+
+ case cJU_JPIMMED_1_01: JU_IMMSET_01(1, uint8_t *, cJU_JPIMMED_1_02);
+
+// 2_01 leads to 2_02, and 3_01 leads to 3_02, except for JudyL 32-bit, where
+// they lead to a leaf:
+//
+// (2_01 => [ 2_02 => 2_03 => [ 2_04..07 => ]] LeafL)
+// (3_01 => [ 3_02 => [ 3_03..05 => ]] LeafL)
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_01: JU_IMMSET_01(2, uint16_t *, cJU_JPIMMED_2_02);
+ case cJU_JPIMMED_3_01: JU_IMMSET_01_ODD (3, cJU_JPIMMED_3_02,
+ JU_COPY3_LONG_TO_PINDEX);
+#else
+ case cJU_JPIMMED_2_01:
+ JU_IMMSET_01_CASCADE(2, uint16_t *, cJU_JPLEAF2, JL_LEAF2VALUEAREA,
+ JU_IMMSET_01_COPY_EVEN, ignore,
+ j__udyAllocJLL2);
+ case cJU_JPIMMED_3_01:
+ JU_IMMSET_01_CASCADE(3, uint8_t *, cJU_JPLEAF3, JL_LEAF3VALUEAREA,
+ JU_IMMSET_01_COPY_ODD,
+ JU_COPY3_LONG_TO_PINDEX, j__udyAllocJLL3);
+#endif
+
+#ifdef JU_64BIT
+
+// [4-7]_01 lead to [4-7]_02 for Judy1, and to leaves for JudyL:
+//
+// (4_01 => [[ 4_02..03 => ]] LeafL)
+// (5_01 => [[ 5_02..03 => ]] LeafL)
+// (6_01 => [[ 6_02 => ]] LeafL)
+// (7_01 => [[ 7_02 => ]] LeafL)
+
+#ifdef JUDY1
+ case cJU_JPIMMED_4_01: JU_IMMSET_01(4, uint32_t *, cJ1_JPIMMED_4_02);
+ case cJU_JPIMMED_5_01: JU_IMMSET_01_ODD(5, cJ1_JPIMMED_5_02,
+ JU_COPY5_LONG_TO_PINDEX);
+ case cJU_JPIMMED_6_01: JU_IMMSET_01_ODD(6, cJ1_JPIMMED_6_02,
+ JU_COPY6_LONG_TO_PINDEX);
+ case cJU_JPIMMED_7_01: JU_IMMSET_01_ODD(7, cJ1_JPIMMED_7_02,
+ JU_COPY7_LONG_TO_PINDEX);
+#else // JUDYL
+ case cJU_JPIMMED_4_01:
+ JU_IMMSET_01_CASCADE(4, uint32_t *, cJU_JPLEAF4, JL_LEAF4VALUEAREA,
+ JU_IMMSET_01_COPY_EVEN, ignore,
+ j__udyAllocJLL4);
+ case cJU_JPIMMED_5_01:
+ JU_IMMSET_01_CASCADE(5, uint8_t *, cJU_JPLEAF5, JL_LEAF5VALUEAREA,
+ JU_IMMSET_01_COPY_ODD,
+ JU_COPY5_LONG_TO_PINDEX, j__udyAllocJLL5);
+ case cJU_JPIMMED_6_01:
+ JU_IMMSET_01_CASCADE(6, uint8_t *, cJU_JPLEAF6, JL_LEAF6VALUEAREA,
+ JU_IMMSET_01_COPY_ODD,
+ JU_COPY6_LONG_TO_PINDEX, j__udyAllocJLL6);
+ case cJU_JPIMMED_7_01:
+ JU_IMMSET_01_CASCADE(7, uint8_t *, cJU_JPLEAF7, JL_LEAF7VALUEAREA,
+ JU_IMMSET_01_COPY_ODD,
+ JU_COPY7_LONG_TO_PINDEX, j__udyAllocJLL7);
+#endif // JUDYL
+#endif // JU_64BIT
+
+// cJU_JPIMMED_1_* cases that can grow in place:
+//
+// (1_01 => 1_02 => 1_03 => [ 1_04 => ... => 1_07 => [ 1_08..15 => ]] LeafL)
+
+ case cJU_JPIMMED_1_02:
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_03:
+ case cJU_JPIMMED_1_04:
+ case cJU_JPIMMED_1_05:
+ case cJU_JPIMMED_1_06:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJU_JPIMMED_1_07:
+ case cJ1_JPIMMED_1_08:
+ case cJ1_JPIMMED_1_09:
+ case cJ1_JPIMMED_1_10:
+ case cJ1_JPIMMED_1_11:
+ case cJ1_JPIMMED_1_12:
+ case cJ1_JPIMMED_1_13:
+ case cJ1_JPIMMED_1_14:
+#endif
+ JU_IMMSETINPLACE(1, uint8_t *, cJU_JPIMMED_1_02, j__udySearchLeaf1,
+ JU_INSERTINPLACE);
+
+// cJU_JPIMMED_1_* cases that must cascade:
+//
+// (1_01 => 1_02 => 1_03 => [ 1_04 => ... => 1_07 => [ 1_08..15 => ]] LeafL)
+
+#if (defined(JUDYL) && (! defined(JU_64BIT)))
+ case cJU_JPIMMED_1_03:
+ JU_IMMSETCASCADE(1, 3, uint8_t *, cJU_JPLEAF1, JL_LEAF1VALUEAREA,
+ j__udySearchLeaf1, JU_INSERTCOPY,
+ j__udyAllocJLL1);
+#endif
+#if (defined(JUDY1) && (! defined(JU_64BIT)))
+ case cJU_JPIMMED_1_07:
+ JU_IMMSETCASCADE(1, 7, uint8_t *, cJU_JPLEAF1, ignore,
+ j__udySearchLeaf1, JU_INSERTCOPY,
+ j__udyAllocJLL1);
+
+#endif
+#if (defined(JUDYL) && defined(JU_64BIT))
+ case cJU_JPIMMED_1_07:
+ JU_IMMSETCASCADE(1, 7, uint8_t *, cJU_JPLEAF1, JL_LEAF1VALUEAREA,
+ j__udySearchLeaf1, JU_INSERTCOPY,
+ j__udyAllocJLL1);
+
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+// Special case, as described above, go directly from Immed to LeafB1:
+
+ case cJ1_JPIMMED_1_15:
+ {
+ Word_t DcdP0;
+ int offset;
+ Pjlb_t PjlbRaw;
+ Pjlb_t Pjlb;
+
+ offset = j__udySearchLeaf1((Pjll_t) Pjp->jp_1Index, 15, Index);
+
+ JU_CHECK_IF_EXISTS(offset, ignore, Pjpm);
+
+// Create a bitmap leaf (special case for Judy1 64-bit only, see usage): Set
+// new Index in bitmap, copy an Immed1_15 to the bitmap, and set the parent JP
+// EXCEPT jp_DcdPopO, leaving any followup to the caller:
+
+ if ((PjlbRaw = j__udyAllocJLB1(Pjpm)) == (Pjlb_t) NULL)
+ return(-1);
+ Pjlb = P_JLB(PjlbRaw);
+
+ JU_BITMAPSETL(Pjlb, Index);
+
+ for (offset = 0; offset < 15; ++offset)
+ JU_BITMAPSETL(Pjlb, Pjp->jp_1Index[offset]);
+
+// Set jp_DcdPopO including the current pop0; incremented later:
+ DcdP0 = (Index & cJU_DCDMASK(1)) + 15 - 1;
+ JU_JPSETADT(Pjp, (Word_t)PjlbRaw, DcdP0, cJU_JPLEAF_B1);
+
+ return(1);
+ }
+#endif
+
+// cJU_JPIMMED_[2..7]_[02..15] cases that grow in place or cascade:
+//
+// (2_01 => [ 2_02 => 2_03 => [ 2_04..07 => ]] LeafL)
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJU_JPIMMED_2_03:
+ case cJ1_JPIMMED_2_04:
+ case cJ1_JPIMMED_2_05:
+ case cJ1_JPIMMED_2_06:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ JU_IMMSETINPLACE(2, uint16_t *, cJU_JPIMMED_2_02, j__udySearchLeaf2,
+ JU_INSERTINPLACE);
+#endif
+
+#undef OLDPOP1
+#if ((defined(JUDY1) && (! defined(JU_64BIT))) || (defined(JUDYL) && defined(JU_64BIT)))
+ case cJU_JPIMMED_2_03:
+#define OLDPOP1 3
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_07:
+#define OLDPOP1 7
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ JU_IMMSETCASCADE(2, OLDPOP1, uint16_t *, cJU_JPLEAF2,
+ JL_LEAF2VALUEAREA, j__udySearchLeaf2,
+ JU_INSERTCOPY, j__udyAllocJLL2);
+#endif
+
+// (3_01 => [ 3_02 => [ 3_03..05 => ]] LeafL)
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJU_JPIMMED_3_02:
+ case cJ1_JPIMMED_3_03:
+ case cJ1_JPIMMED_3_04:
+
+ JU_IMMSETINPLACE(3, uint8_t *, cJU_JPIMMED_3_02, j__udySearchLeaf3,
+ JU_INSERTINPLACE3);
+#endif
+
+#undef OLDPOP1
+#if ((defined(JUDY1) && (! defined(JU_64BIT))) || (defined(JUDYL) && defined(JU_64BIT)))
+ case cJU_JPIMMED_3_02:
+#define OLDPOP1 2
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_05:
+#define OLDPOP1 5
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ JU_IMMSETCASCADE(3, OLDPOP1, uint8_t *, cJU_JPLEAF3,
+ JL_LEAF3VALUEAREA, j__udySearchLeaf3,
+ JU_INSERTCOPY3, j__udyAllocJLL3);
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+
+// (4_01 => [[ 4_02..03 => ]] LeafL)
+
+ case cJ1_JPIMMED_4_02:
+
+ JU_IMMSETINPLACE(4, uint32_t *, cJ1_JPIMMED_4_02, j__udySearchLeaf4,
+ JU_INSERTINPLACE);
+
+ case cJ1_JPIMMED_4_03:
+
+ JU_IMMSETCASCADE(4, 3, uint32_t *, cJU_JPLEAF4, ignore,
+ j__udySearchLeaf4, JU_INSERTCOPY,
+ j__udyAllocJLL4);
+
+// (5_01 => [[ 5_02..03 => ]] LeafL)
+
+ case cJ1_JPIMMED_5_02:
+
+ JU_IMMSETINPLACE(5, uint8_t *, cJ1_JPIMMED_5_02, j__udySearchLeaf5,
+ JU_INSERTINPLACE5);
+
+ case cJ1_JPIMMED_5_03:
+
+ JU_IMMSETCASCADE(5, 3, uint8_t *, cJU_JPLEAF5, ignore,
+ j__udySearchLeaf5, JU_INSERTCOPY5,
+ j__udyAllocJLL5);
+
+// (6_01 => [[ 6_02 => ]] LeafL)
+
+ case cJ1_JPIMMED_6_02:
+
+ JU_IMMSETCASCADE(6, 2, uint8_t *, cJU_JPLEAF6, ignore,
+ j__udySearchLeaf6, JU_INSERTCOPY6,
+ j__udyAllocJLL6);
+
+// (7_01 => [[ 7_02 => ]] LeafL)
+
+ case cJ1_JPIMMED_7_02:
+
+ JU_IMMSETCASCADE(7, 2, uint8_t *, cJU_JPLEAF7, ignore,
+ j__udySearchLeaf7, JU_INSERTCOPY7,
+ j__udyAllocJLL7);
+
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ****************************************************************************
+// INVALID JP TYPE:
+
+ default: JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT); return(-1);
+
+ } // switch on JP type
+
+ {
+
+#ifdef SUBEXPCOUNTS
+
+// This code might seem strange here. However it saves some memory read time
+// during insert (~70nS) because a pipelined processor does not need to "stall"
+// waiting for the memory read to complete. Hope the compiler is not too smart
+// or dumb and moves the code down to where it looks like it belongs (below a
+// few lines).
+
+ Word_t SubExpCount = 0; // current subexpanse counter.
+
+ if (PSubExp != (PWord_t) NULL) // only if BranchB/U.
+ SubExpCount = PSubExp[0];
+#endif
+
+// PROCESS JP -- RECURSIVELY:
+//
+// For non-Immed JP types, if successful, post-increment the population count
+// at this Level.
+
+ retcode = j__udyInsWalk(Pjp, Index, Pjpm);
+
+// Successful insert, increment JP and subexpanse count:
+
+ if ((JU_JPTYPE(Pjp) < cJU_JPIMMED_1_01) && (retcode == 1))
+ {
+ jp_t JP;
+ Word_t DcdP0;
+#ifdef SUBEXPCOUNTS
+
+// Note: Pjp must be a pointer to a BranchB/U:
+
+ if (PSubExp != (PWord_t) NULL) PSubExp[0] = SubExpCount + 1;
+#endif
+
+ JP = *Pjp;
+ DcdP0 = JU_JPDCDPOP0(Pjp) + 1;
+ JU_JPSETADT(Pjp, JP.jp_Addr, DcdP0, JU_JPTYPE(&JP));
+ }
+ }
+ return(retcode);
+
+} // j__udyInsWalk()
+
+
+// ****************************************************************************
+// J U D Y 1 S E T
+// J U D Y L I N S
+//
+// Main entry point. See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1Set
+#else
+FUNCTION PPvoid_t JudyLIns
+#endif
+ (
+ PPvoid_t PPArray, // in which to insert.
+ Word_t Index, // to insert.
+ PJError_t PJError // optional, for returning error info.
+ )
+{
+#ifdef JUDY1
+#define Pjv ignore // placeholders for macros.
+#define Pjvnew ignore
+#else
+ Pjv_t Pjv; // value area in old leaf.
+ Pjv_t Pjvnew; // value area in new leaf.
+#endif
+ Pjpm_t Pjpm; // array-global info.
+ int offset; // position in which to store new Index.
+ Pjlw_t Pjlw;
+
+
+// CHECK FOR NULL POINTER (error by caller):
+
+ if (PPArray == (PPvoid_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+ Pjlw = P_JLW(*PPArray); // first word of leaf.
+
+// ****************************************************************************
+// PROCESS TOP LEVEL "JRP" BRANCHES AND LEAVES:
+
+// ****************************************************************************
+// JRPNULL (EMPTY ARRAY): BUILD A LEAFW WITH ONE INDEX:
+
+// if a valid empty array (null pointer), so create an array of population == 1:
+
+ if (Pjlw == (Pjlw_t)NULL)
+ {
+ Pjlw_t Pjlwnew;
+
+ Pjlwnew = j__udyAllocJLW(1);
+ JUDY1CODE(JU_CHECKALLOC(Pjlw_t, Pjlwnew, JERRI );)
+ JUDYLCODE(JU_CHECKALLOC(Pjlw_t, Pjlwnew, PPJERR);)
+
+ Pjlwnew[0] = 1 - 1; // pop0 = 0.
+ Pjlwnew[1] = Index;
+
+ *PPArray = (Pvoid_t) Pjlwnew;
+ DBGCODE(JudyCheckPop(*PPArray);)
+
+ JUDY1CODE(return(1); )
+ JUDYLCODE(Pjlwnew[2] = 0; ) // value area.
+ JUDYLCODE(return((PPvoid_t) (Pjlwnew + 2)); )
+
+ } // NULL JRP
+
+// ****************************************************************************
+// LEAFW, OTHER SIZE:
+
+ if (JU_LEAFW_POP0(*PPArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ Pjlw_t Pjlwnew;
+ Word_t pop1;
+
+ Pjlw = P_JLW(*PPArray); // first word of leaf.
+ pop1 = Pjlw[0] + 1;
+
+#ifdef JUDYL
+ Pjv = JL_LEAFWVALUEAREA(Pjlw, pop1);
+#endif
+ offset = j__udySearchLeafW(Pjlw + 1, pop1, Index);
+
+ if (offset >= 0) // index is already valid:
+ {
+ DBGCODE(JudyCheckPop(*PPArray);)
+ JUDY1CODE(return(0); )
+ JUDYLCODE(return((PPvoid_t) (Pjv + offset)); )
+ }
+
+ offset = ~offset;
+
+// Insert index in cases where no new memory is needed:
+
+ if (JU_LEAFWGROWINPLACE(pop1))
+ {
+ ++Pjlw[0]; // increase population.
+
+ JU_INSERTINPLACE(Pjlw + 1, pop1, offset, Index);
+#ifdef JUDYL
+ JU_INSERTINPLACE(Pjv, pop1, offset, 0);
+#endif
+ DBGCODE(JudyCheckPop(*PPArray);)
+ DBGCODE(JudyCheckSorted(Pjlw + 1, pop1 + 1, cJU_ROOTSTATE);)
+
+ JUDY1CODE(return(1); )
+ JUDYLCODE(return((PPvoid_t) (Pjv + offset)); )
+ }
+
+// Insert index into a new, larger leaf:
+
+ if (pop1 < cJU_LEAFW_MAXPOP1) // can grow to a larger leaf.
+ {
+ Pjlwnew = j__udyAllocJLW(pop1 + 1);
+ JUDY1CODE(JU_CHECKALLOC(Pjlw_t, Pjlwnew, JERRI );)
+ JUDYLCODE(JU_CHECKALLOC(Pjlw_t, Pjlwnew, PPJERR);)
+
+ Pjlwnew[0] = pop1; // set pop0 in new leaf.
+
+ JU_INSERTCOPY(Pjlwnew + 1, Pjlw + 1, pop1, offset, Index);
+#ifdef JUDYL
+ Pjvnew = JL_LEAFWVALUEAREA(Pjlwnew, pop1 + 1);
+ JU_INSERTCOPY(Pjvnew, Pjv, pop1, offset, 0);
+#endif
+ DBGCODE(JudyCheckSorted(Pjlwnew + 1, pop1 + 1, cJU_ROOTSTATE);)
+
+ j__udyFreeJLW(Pjlw, pop1, NULL);
+
+ *PPArray = (Pvoid_t) Pjlwnew;
+ DBGCODE(JudyCheckPop(*PPArray);)
+
+ JUDY1CODE(return(1); )
+ JUDYLCODE(return((PPvoid_t) (Pjvnew + offset)); )
+ }
+
+ assert(pop1 == cJU_LEAFW_MAXPOP1);
+
+// Leaf at max size => cannot insert new index, so cascade instead:
+//
+// Upon cascading from a LEAFW leaf to the first branch, must allocate and
+// initialize a JPM.
+
+ Pjpm = j__udyAllocJPM();
+ JUDY1CODE(JU_CHECKALLOC(Pjpm_t, Pjpm, JERRI );)
+ JUDYLCODE(JU_CHECKALLOC(Pjpm_t, Pjpm, PPJERR);)
+
+ (Pjpm->jpm_Pop0) = cJU_LEAFW_MAXPOP1 - 1;
+ (Pjpm->jpm_JP.jp_Addr) = (Word_t) Pjlw;
+
+ if (j__udyCascadeL(&(Pjpm->jpm_JP), Pjpm) == -1)
+ {
+ JU_COPY_ERRNO(PJError, Pjpm);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+// Note: No need to pass Pjpm for memory decrement; LEAFW memory is never
+// counted in a JPM at all:
+
+ j__udyFreeJLW(Pjlw, cJU_LEAFW_MAXPOP1, NULL);
+ *PPArray = (Pvoid_t) Pjpm;
+
+ } // JU_LEAFW
+
+// ****************************************************************************
+// BRANCH:
+
+ {
+ int retcode; // really only needed for Judy1, but free for JudyL.
+
+ Pjpm = P_JPM(*PPArray);
+ retcode = j__udyInsWalk(&(Pjpm->jpm_JP), Index, Pjpm);
+
+ if (retcode == -1)
+ {
+ JU_COPY_ERRNO(PJError, Pjpm);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+ if (retcode == 1) ++(Pjpm->jpm_Pop0); // incr total array popu.
+
+ assert(((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_L)
+ || ((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_B)
+ || ((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_U));
+ DBGCODE(JudyCheckPop(*PPArray);)
+
+#ifdef JUDY1
+ assert((retcode == 0) || (retcode == 1));
+ return(retcode); // == JU_RET_*_JPM().
+#else
+ assert(Pjpm->jpm_PValue != (Pjv_t) NULL);
+ return((PPvoid_t) Pjpm->jpm_PValue);
+#endif
+ }
+ /*NOTREACHED*/
+
+} // Judy1Set() / JudyLIns()
diff --git a/libs/klib/judy/JudyInsArray.c b/libs/klib/judy/JudyInsArray.c
new file mode 100644
index 0000000..c647ea5
--- /dev/null
+++ b/libs/klib/judy/JudyInsArray.c
@@ -0,0 +1,1176 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// TBD: It would probably be faster for the caller if the JudyL version took
+// PIndex as an interleaved array of indexes and values rather than just
+// indexes with a separate values array (PValue), especially considering
+// indexes and values are copied here with for-loops anyway and not the
+// equivalent of memcpy(). All code could be revised to simply count by two
+// words for JudyL? Supports "streaming" the data to/from disk better later?
+// In which case get rid of JU_ERRNO_NULLPVALUE, no longer needed, and simplify
+// the API to this code.
+// _________________
+
+// Judy1SetArray() and JudyLInsArray() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+DBGCODE(extern void JudyCheckPop(Pvoid_t PArray);)
+
+
+// IMMED AND LEAF SIZE AND BRANCH TYPE ARRAYS:
+//
+// These support fast and easy lookup by level.
+
+static uint8_t immed_maxpop1[] = {
+ 0,
+ cJU_IMMED1_MAXPOP1,
+ cJU_IMMED2_MAXPOP1,
+ cJU_IMMED3_MAXPOP1,
+#ifdef JU_64BIT
+ cJU_IMMED4_MAXPOP1,
+ cJU_IMMED5_MAXPOP1,
+ cJU_IMMED6_MAXPOP1,
+ cJU_IMMED7_MAXPOP1,
+#endif
+ // note: There are no IMMEDs for whole words.
+};
+
+static uint8_t leaf_maxpop1[] = {
+ 0,
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ cJU_LEAF1_MAXPOP1,
+#else
+ 0, // 64-bit Judy1 has no Leaf1.
+#endif
+ cJU_LEAF2_MAXPOP1,
+ cJU_LEAF3_MAXPOP1,
+#ifdef JU_64BIT
+ cJU_LEAF4_MAXPOP1,
+ cJU_LEAF5_MAXPOP1,
+ cJU_LEAF6_MAXPOP1,
+ cJU_LEAF7_MAXPOP1,
+#endif
+ // note: Root-level leaves are handled differently.
+};
+
+static uint8_t branchL_JPtype[] = {
+ 0,
+ 0,
+ cJU_JPBRANCH_L2,
+ cJU_JPBRANCH_L3,
+#ifdef JU_64BIT
+ cJU_JPBRANCH_L4,
+ cJU_JPBRANCH_L5,
+ cJU_JPBRANCH_L6,
+ cJU_JPBRANCH_L7,
+#endif
+ cJU_JPBRANCH_L,
+};
+
+static uint8_t branchB_JPtype[] = {
+ 0,
+ 0,
+ cJU_JPBRANCH_B2,
+ cJU_JPBRANCH_B3,
+#ifdef JU_64BIT
+ cJU_JPBRANCH_B4,
+ cJU_JPBRANCH_B5,
+ cJU_JPBRANCH_B6,
+ cJU_JPBRANCH_B7,
+#endif
+ cJU_JPBRANCH_B,
+};
+
+static uint8_t branchU_JPtype[] = {
+ 0,
+ 0,
+ cJU_JPBRANCH_U2,
+ cJU_JPBRANCH_U3,
+#ifdef JU_64BIT
+ cJU_JPBRANCH_U4,
+ cJU_JPBRANCH_U5,
+ cJU_JPBRANCH_U6,
+ cJU_JPBRANCH_U7,
+#endif
+ cJU_JPBRANCH_U,
+};
+
+// Subexpanse masks are similer to JU_DCDMASK() but without the need to clear
+// the first digits bits. Avoid doing variable shifts by precomputing a
+// lookup array.
+
+static Word_t subexp_mask[] = {
+ 0,
+ ~cJU_POP0MASK(1),
+ ~cJU_POP0MASK(2),
+ ~cJU_POP0MASK(3),
+#ifdef JU_64BIT
+ ~cJU_POP0MASK(4),
+ ~cJU_POP0MASK(5),
+ ~cJU_POP0MASK(6),
+ ~cJU_POP0MASK(7),
+#endif
+};
+
+
+// FUNCTION PROTOTYPES:
+
+static bool_t j__udyInsArray(Pjp_t PjpParent, int Level, PWord_t PPop1,
+ PWord_t PIndex,
+#ifdef JUDYL
+ Pjv_t PValue,
+#endif
+ Pjpm_t Pjpm);
+
+
+// ****************************************************************************
+// J U D Y 1 S E T A R R A Y
+// J U D Y L I N S A R R A Y
+//
+// Main entry point. See the manual entry for external overview.
+//
+// TBD: Until thats written, note that the function returns 1 for success or
+// JERRI for serious error, including insufficient memory to build whole array;
+// use Judy*Count() to see how many were stored, the first N of the total
+// Count. Also, since it takes Count == Pop1, it cannot handle a full array.
+// Also, "sorted" means ascending without duplicates, otherwise you get the
+// "unsorted" error.
+//
+// The purpose of these functions is to allow rapid construction of a large
+// Judy array given a sorted list of indexes (and for JudyL, corresponding
+// values). At least one customer saw this as useful, and probably it would
+// also be useful as a sufficient workaround for fast(er) unload/reload to/from
+// disk.
+//
+// This code is written recursively for simplicity, until/unless someone
+// decides to make it faster and more complex. Hopefully recursion is fast
+// enough simply because the function is so much faster than a series of
+// Set/Ins calls.
+
+#ifdef JUDY1
+FUNCTION int Judy1SetArray
+#else
+FUNCTION int JudyLInsArray
+#endif
+ (
+ PPvoid_t PPArray, // in which to insert, initially empty.
+ Word_t Count, // number of indexes (and values) to insert.
+const Word_t * const PIndex, // list of indexes to insert.
+#ifdef JUDYL
+const Word_t * const PValue, // list of corresponding values.
+#endif
+ PJError_t PJError // optional, for returning error info.
+ )
+{
+ Pjlw_t Pjlw; // new root-level leaf.
+ Pjlw_t Pjlwindex; // first index in root-level leaf.
+ int offset; // in PIndex.
+
+
+// CHECK FOR NULL OR NON-NULL POINTER (error by caller):
+
+ if (PPArray == (PPvoid_t) NULL)
+ { JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY); return(JERRI); }
+
+ if (*PPArray != (Pvoid_t) NULL)
+ { JU_SET_ERRNO(PJError, JU_ERRNO_NONNULLPARRAY); return(JERRI); }
+
+ if (PIndex == (PWord_t) NULL)
+ { JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX); return(JERRI); }
+
+#ifdef JUDYL
+ if (PValue == (PWord_t) NULL)
+ { JU_SET_ERRNO(PJError, JU_ERRNO_NULLPVALUE); return(JERRI); }
+#endif
+
+
+// HANDLE LARGE COUNT (= POP1) (typical case):
+//
+// Allocate and initialize a JPM, set the root pointer to point to it, and then
+// build the tree underneath it.
+
+// Common code for unusual error handling when no JPM available:
+
+ if (Count > cJU_LEAFW_MAXPOP1) // too big for root-level leaf.
+ {
+ Pjpm_t Pjpm; // new, to allocate.
+
+// Allocate JPM:
+
+ Pjpm = j__udyAllocJPM();
+ JU_CHECKALLOC(Pjpm_t, Pjpm, JERRI);
+ *PPArray = (Pvoid_t) Pjpm;
+
+// Set some JPM fields:
+
+ (Pjpm->jpm_Pop0) = Count - 1;
+ // note: (Pjpm->jpm_TotalMemWords) is now initialized.
+
+// Build Judy tree:
+//
+// In case of error save the final Count, possibly modified, unless modified to
+// 0, in which case free the JPM itself:
+
+ if (! j__udyInsArray(&(Pjpm->jpm_JP), cJU_ROOTSTATE, &Count,
+ (PWord_t) PIndex,
+#ifdef JUDYL
+ (Pjv_t) PValue,
+#endif
+ Pjpm))
+ {
+ JU_COPY_ERRNO(PJError, Pjpm);
+
+ if (Count) // partial success, adjust pop0:
+ {
+ (Pjpm->jpm_Pop0) = Count - 1;
+ }
+ else // total failure, free JPM:
+ {
+ j__udyFreeJPM(Pjpm, (Pjpm_t) NULL);
+ *PPArray = (Pvoid_t) NULL;
+ }
+
+ DBGCODE(JudyCheckPop(*PPArray);)
+ return(JERRI);
+ }
+
+ DBGCODE(JudyCheckPop(*PPArray);)
+ return(1);
+
+ } // large count
+
+
+// HANDLE SMALL COUNT (= POP1):
+//
+// First ensure indexes are in sorted order:
+
+ for (offset = 1; offset < Count; ++offset)
+ {
+ if (PIndex[offset - 1] >= PIndex[offset])
+ { JU_SET_ERRNO(PJError, JU_ERRNO_UNSORTED); return(JERRI); }
+ }
+
+ if (Count == 0) return(1); // *PPArray remains null.
+
+ {
+ Pjlw = j__udyAllocJLW(Count + 1);
+ JU_CHECKALLOC(Pjlw_t, Pjlw, JERRI);
+ *PPArray = (Pvoid_t) Pjlw;
+ Pjlw[0] = Count - 1; // set pop0.
+ Pjlwindex = Pjlw + 1;
+ }
+
+// Copy whole-word indexes (and values) to the root-level leaf:
+
+ JU_COPYMEM(Pjlwindex, PIndex, Count);
+JUDYLCODE(JU_COPYMEM(JL_LEAFWVALUEAREA(Pjlw, Count), PValue, Count));
+
+ DBGCODE(JudyCheckPop(*PPArray);)
+ return(1);
+
+} // Judy1SetArray() / JudyLInsArray()
+
+
+// ****************************************************************************
+// __ J U D Y I N S A R R A Y
+//
+// Given:
+//
+// - a pointer to a JP
+//
+// - the JPs level in the tree, that is, the number of digits left to decode
+// in the indexes under the JP (one less than the level of the JPM or branch
+// in which the JP resides); cJU_ROOTSTATE on first entry (when JP is the one
+// in the JPM), down to 1 for a Leaf1, LeafB1, or FullPop
+//
+// - a pointer to the number of indexes (and corresponding values) to store in
+// this subtree, to modify in case of partial success
+//
+// - a list of indexes (and for JudyL, corresponding values) to store in this
+// subtree
+//
+// - a JPM for tracking memory usage and returning errors
+//
+// Recursively build a subtree (immediate indexes, leaf, or branch with
+// subtrees) and modify the JP accordingly. On the way down, build a BranchU
+// (only) for any expanse with *PPop1 too high for a leaf; on the way out,
+// convert the BranchU to a BranchL or BranchB if appropriate. Keep memory
+// statistics in the JPM.
+//
+// Return TRUE for success, or FALSE with error information set in the JPM in
+// case of error, in which case leave a partially constructed but healthy tree,
+// and modify parent population counts on the way out.
+//
+// Note: Each call of this function makes all modifications to the PjpParent
+// it receives; neither the parent nor child calls do this.
+
+FUNCTION static bool_t j__udyInsArray(
+ Pjp_t PjpParent, // parent JP in/under which to store.
+ int Level, // initial digits remaining to decode.
+ PWord_t PPop1, // number of indexes to store.
+ PWord_t PIndex, // list of indexes to store.
+#ifdef JUDYL
+ Pjv_t PValue, // list of corresponding values.
+#endif
+ Pjpm_t Pjpm) // for memory and errors.
+{
+ Pjp_t Pjp; // lower-level JP.
+ Word_t Pjbany; // any type of branch.
+ int levelsub; // actual, of Pjps node, <= Level.
+ Word_t pop1 = *PPop1; // fast local value.
+ Word_t pop1sub; // population of one subexpanse.
+ uint8_t JPtype; // current JP type.
+ uint8_t JPtype_null; // precomputed value for new branch.
+ jp_t JPnull; // precomputed for speed.
+ Pjbu_t PjbuRaw; // constructed BranchU.
+ Pjbu_t Pjbu;
+ int digit; // in BranchU.
+ Word_t digitmask; // for a digit in a BranchU.
+ Word_t digitshifted; // shifted to correct offset.
+ Word_t digitshincr; // increment for digitshifted.
+ int offset; // in PIndex, or a bitmap subexpanse.
+ int numJPs; // number non-null in a BranchU.
+ bool_t retval; // to return from this func.
+JUDYLCODE(Pjv_t PjvRaw); // destination value area.
+JUDYLCODE(Pjv_t Pjv);
+
+
+// MACROS FOR COMMON CODE:
+//
+// Note: These use function and local parameters from the context.
+// Note: Assume newly allocated memory is zeroed.
+
+// Indicate whether a sorted list of indexes in PIndex, based on the first and
+// last indexes in the list using pop1, are in the same subexpanse between
+// Level and L_evel:
+//
+// This can be confusing! Note that SAMESUBEXP(L) == TRUE means the indexes
+// are the same through level L + 1, and it says nothing about level L and
+// lower; they might be the same or they might differ.
+//
+// Note: In principle SAMESUBEXP needs a mask for the digits from Level,
+// inclusive, to L_evel, exclusive. But in practice, since the indexes are all
+// known to be identical above Level, it just uses a mask for the digits
+// through L_evel + 1; see subexp_mask[].
+
+#define SAMESUBEXP(L_evel) \
+ (! ((PIndex[0] ^ PIndex[pop1 - 1]) & subexp_mask[L_evel]))
+
+// Set PjpParent to a null JP appropriate for the level of the node to which it
+// points, which is 1 less than the level of the node in which the JP resides,
+// which is by definition Level:
+//
+// Note: This can set the JPMs JP to an invalid jp_Type, but it doesnt
+// matter because the JPM is deleted by the caller.
+
+#define SETJPNULL_PARENT \
+ JU_JPSETADT(PjpParent, 0, 0, cJU_JPNULL1 + Level - 1);
+
+// Variation to set a specified JP (in a branch being built) to a precomputed
+// null JP:
+
+#define SETJPNULL(Pjp) *(Pjp) = JPnull
+
+// Handle complete (as opposed to partial) memory allocation failure: Set the
+// parent JP to an appropriate null type (to leave a consistent tree), zero the
+// callers population count, and return FALSE:
+//
+// Note: At Level == cJU_ROOTSTATE this sets the JPMs JPs jp_Type to a bogus
+// value, but it doesnt matter because the JPM should be deleted by the
+// caller.
+
+#define NOMEM { SETJPNULL_PARENT; *PPop1 = 0; return(FALSE); }
+
+// Allocate a Leaf1-N and save the address in Pjll; in case of failure, NOMEM:
+
+#define ALLOCLEAF(AllocLeaf) \
+ if ((PjllRaw = AllocLeaf(pop1, Pjpm)) == (Pjll_t) NULL) NOMEM; \
+ Pjll = P_JLL(PjllRaw);
+
+// Copy indexes smaller than words (and values which are whole words) from
+// given arrays to immediate indexes or a leaf:
+//
+// TBD: These macros overlap with some of the code in JudyCascade.c; do some
+// merging? That file has functions while these are macros.
+
+#define COPYTOLEAF_EVEN_SUB(Pjll,LeafType) \
+ { \
+ LeafType * P_leaf = (LeafType *) (Pjll); \
+ Word_t p_op1 = pop1; \
+ PWord_t P_Index = PIndex; \
+ \
+ assert(pop1 > 0); \
+ \
+ do { *P_leaf++ = *P_Index++; /* truncates */\
+ } while (--(p_op1)); \
+ }
+
+#define COPYTOLEAF_ODD_SUB(cLevel,Pjll,Copy) \
+ { \
+ uint8_t * P_leaf = (uint8_t *) (Pjll); \
+ Word_t p_op1 = pop1; \
+ PWord_t P_Index = PIndex; \
+ \
+ assert(pop1 > 0); \
+ \
+ do { \
+ Copy(P_leaf, *P_Index); \
+ P_leaf += (cLevel); ++P_Index; \
+ } while (--(p_op1)); \
+ }
+
+#ifdef JUDY1
+
+#define COPYTOLEAF_EVEN(Pjll,LeafType) COPYTOLEAF_EVEN_SUB(Pjll,LeafType)
+#define COPYTOLEAF_ODD(cLevel,Pjll,Copy) COPYTOLEAF_ODD_SUB(cLevel,Pjll,Copy)
+
+#else // JUDYL adds copying of values:
+
+#define COPYTOLEAF_EVEN(Pjll,LeafType) \
+ { \
+ COPYTOLEAF_EVEN_SUB(Pjll,LeafType) \
+ JU_COPYMEM(Pjv, PValue, pop1); \
+ }
+
+#define COPYTOLEAF_ODD(cLevel,Pjll,Copy) \
+ { \
+ COPYTOLEAF_ODD_SUB( cLevel,Pjll,Copy) \
+ JU_COPYMEM(Pjv, PValue, pop1); \
+ }
+
+#endif
+
+// Set the JP type for an immediate index, where BaseJPType is JPIMMED_*_02:
+
+#define SETIMMTYPE(BaseJPType) (PjpParent->jp_Type) = (BaseJPType) + pop1 - 2
+
+// Allocate and populate a Leaf1-N:
+//
+// Build MAKELEAF_EVEN() and MAKELEAF_ODD() using macros for common code.
+
+#define MAKELEAF_SUB1(AllocLeaf,ValueArea,LeafType) \
+ ALLOCLEAF(AllocLeaf); \
+ JUDYLCODE(Pjv = ValueArea(Pjll, pop1))
+
+
+#define MAKELEAF_SUB2(cLevel,JPType) \
+{ \
+ Word_t D_cdP0; \
+ assert(pop1 - 1 <= cJU_POP0MASK(cLevel)); \
+ D_cdP0 = (*PIndex & cJU_DCDMASK(cLevel)) | (pop1 - 1); \
+ JU_JPSETADT(PjpParent, (Word_t)PjllRaw, D_cdP0, JPType); \
+}
+
+
+#define MAKELEAF_EVEN(cLevel,JPType,AllocLeaf,ValueArea,LeafType) \
+ MAKELEAF_SUB1(AllocLeaf,ValueArea,LeafType); \
+ COPYTOLEAF_EVEN(Pjll, LeafType); \
+ MAKELEAF_SUB2(cLevel, JPType)
+
+#define MAKELEAF_ODD(cLevel,JPType,AllocLeaf,ValueArea,Copy) \
+ MAKELEAF_SUB1(AllocLeaf,ValueArea,LeafType); \
+ COPYTOLEAF_ODD(cLevel, Pjll, Copy); \
+ MAKELEAF_SUB2(cLevel, JPType)
+
+// Ensure that the indexes to be stored in immediate indexes or a leaf are
+// sorted:
+//
+// This check is pure overhead, but required in order to protect the Judy array
+// against caller error, to avoid a later corruption or core dump from a
+// seemingly valid Judy array. Do this check piecemeal at the leaf level while
+// the indexes are already in the cache. Higher-level order-checking occurs
+// while building branches.
+//
+// Note: Any sorting error in the expanse of a single immediate indexes JP or
+// a leaf => save no indexes in that expanse.
+
+#define CHECKLEAFORDER \
+ { \
+ for (offset = 1; offset < pop1; ++offset) \
+ { \
+ if (PIndex[offset - 1] >= PIndex[offset]) \
+ { \
+ SETJPNULL_PARENT; \
+ *PPop1 = 0; \
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_UNSORTED); \
+ return(FALSE); \
+ } \
+ } \
+ }
+
+
+// ------ START OF CODE ------
+
+ assert( Level >= 1);
+ assert( Level <= cJU_ROOTSTATE);
+ assert((Level < cJU_ROOTSTATE) || (pop1 > cJU_LEAFW_MAXPOP1));
+
+
+// CHECK FOR TOP LEVEL:
+//
+// Special case: If at the top level (PjpParent is in the JPM), a top-level
+// branch must be created, even if its a BranchL with just one JP. (The JPM
+// cannot point to a leaf because the leaf would have to be a lower-level,
+// higher-capacity leaf under a narrow pointer (otherwise a root-level leaf
+// would suffice), and the JPMs JP cant handle a narrow pointer because the
+// jp_DcdPopO field isnt big enough.) Otherwise continue to check for a pop1
+// small enough to support immediate indexes or a leaf before giving up and
+// making a lower-level branch.
+
+ if (Level == cJU_ROOTSTATE)
+ {
+ levelsub = cJU_ROOTSTATE;
+ goto BuildBranch2;
+ }
+ assert(Level < cJU_ROOTSTATE);
+
+
+// SKIP JPIMMED_*_01:
+//
+// Immeds with pop1 == 1 should be handled in-line during branch construction.
+
+ assert(pop1 > 1);
+
+
+// BUILD JPIMMED_*_02+:
+//
+// The starting address of the indexes depends on Judy1 or JudyL; also, JudyL
+// includes a pointer to a values-only leaf.
+
+ if (pop1 <= immed_maxpop1[Level]) // note: always < root level.
+ {
+ JUDY1CODE(uint8_t * Pjll = (uint8_t *) (PjpParent->jp_1Index);)
+ JUDYLCODE(uint8_t * Pjll = (uint8_t *) (PjpParent->jp_LIndex);)
+
+ CHECKLEAFORDER; // indexes to be stored are sorted.
+
+#ifdef JUDYL
+ if ((PjvRaw = j__udyLAllocJV(pop1, Pjpm)) == (Pjv_t) NULL)
+ NOMEM;
+ (PjpParent->jp_Addr) = (Word_t) PjvRaw;
+ Pjv = P_JV(PjvRaw);
+#endif
+
+ switch (Level)
+ {
+ case 1: COPYTOLEAF_EVEN(Pjll, uint8_t);
+ SETIMMTYPE(cJU_JPIMMED_1_02);
+ break;
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case 2: COPYTOLEAF_EVEN(Pjll, uint16_t);
+ SETIMMTYPE(cJU_JPIMMED_2_02);
+ break;
+ case 3: COPYTOLEAF_ODD(3, Pjll, JU_COPY3_LONG_TO_PINDEX);
+ SETIMMTYPE(cJU_JPIMMED_3_02);
+ break;
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case 4: COPYTOLEAF_EVEN(Pjll, uint32_t);
+ SETIMMTYPE(cJ1_JPIMMED_4_02);
+ break;
+ case 5: COPYTOLEAF_ODD(5, Pjll, JU_COPY5_LONG_TO_PINDEX);
+ SETIMMTYPE(cJ1_JPIMMED_5_02);
+ break;
+ case 6: COPYTOLEAF_ODD(6, Pjll, JU_COPY6_LONG_TO_PINDEX);
+ SETIMMTYPE(cJ1_JPIMMED_6_02);
+ break;
+ case 7: COPYTOLEAF_ODD(7, Pjll, JU_COPY7_LONG_TO_PINDEX);
+ SETIMMTYPE(cJ1_JPIMMED_7_02);
+ break;
+#endif
+ default: assert(FALSE); // should be impossible.
+ }
+
+ return(TRUE); // note: no children => no *PPop1 mods.
+
+ } // JPIMMED_*_02+
+
+
+// BUILD JPLEAF*:
+//
+// This code is a little tricky. The method is: For each level starting at
+// the present Level down through levelsub = 1, and then as a special case for
+// LeafB1 and FullPop (which are also at levelsub = 1 but have different
+// capacity, see later), check if pop1 fits in a leaf (using leaf_maxpop1[])
+// at that level. If so, except for Level == levelsub, check if all of the
+// current indexes to be stored are in the same (narrow) subexpanse, that is,
+// the digits from Level to levelsub + 1, inclusive, are identical between the
+// first and last index in the (sorted) list (in PIndex). If this condition is
+// satisfied at any level, build a leaf at that level (under a narrow pointer
+// if Level > levelsub).
+//
+// Note: Doing the search in this order results in storing the indexes in
+// "least compressed form."
+
+ for (levelsub = Level; levelsub >= 1; --levelsub)
+ {
+ Pjll_t PjllRaw;
+ Pjll_t Pjll;
+
+// Check if pop1 is too large to fit in a leaf at levelsub; if so, try the next
+// lower level:
+
+ if (pop1 > leaf_maxpop1[levelsub]) continue;
+
+// If pop1 fits in a leaf at levelsub, but levelsub is lower than Level, must
+// also check whether all the indexes in the expanse to store can in fact be
+// placed under a narrow pointer; if not, a leaf cannot be used, at this or any
+// lower level (levelsub):
+
+ if ((levelsub < Level) && (! SAMESUBEXP(levelsub)))
+ goto BuildBranch; // cant use a narrow, need a branch.
+
+// Ensure valid pop1 and all indexes are in fact common through Level:
+
+ assert(pop1 <= cJU_POP0MASK(Level) + 1);
+ assert(! ((PIndex[0] ^ PIndex[pop1 - 1]) & cJU_DCDMASK(Level)));
+
+ CHECKLEAFORDER; // indexes to be stored are sorted.
+
+// Build correct type of leaf:
+//
+// Note: The jp_DcdPopO and jp_Type assignments in MAKELEAF_* happen correctly
+// for the levelsub (not Level) of the new leaf, even if its under a narrow
+// pointer.
+
+ switch (levelsub)
+ {
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case 1: MAKELEAF_EVEN(1, cJU_JPLEAF1, j__udyAllocJLL1,
+ JL_LEAF1VALUEAREA, uint8_t);
+ break;
+#endif
+ case 2: MAKELEAF_EVEN(2, cJU_JPLEAF2, j__udyAllocJLL2,
+ JL_LEAF2VALUEAREA, uint16_t);
+ break;
+ case 3: MAKELEAF_ODD( 3, cJU_JPLEAF3, j__udyAllocJLL3,
+ JL_LEAF3VALUEAREA, JU_COPY3_LONG_TO_PINDEX);
+ break;
+#ifdef JU_64BIT
+ case 4: MAKELEAF_EVEN(4, cJU_JPLEAF4, j__udyAllocJLL4,
+ JL_LEAF4VALUEAREA, uint32_t);
+ break;
+ case 5: MAKELEAF_ODD( 5, cJU_JPLEAF5, j__udyAllocJLL5,
+ JL_LEAF5VALUEAREA, JU_COPY5_LONG_TO_PINDEX);
+ break;
+ case 6: MAKELEAF_ODD( 6, cJU_JPLEAF6, j__udyAllocJLL6,
+ JL_LEAF6VALUEAREA, JU_COPY6_LONG_TO_PINDEX);
+ break;
+ case 7: MAKELEAF_ODD( 7, cJU_JPLEAF7, j__udyAllocJLL7,
+ JL_LEAF7VALUEAREA, JU_COPY7_LONG_TO_PINDEX);
+ break;
+#endif
+ default: assert(FALSE); // should be impossible.
+ }
+
+ return(TRUE); // note: no children => no *PPop1 mods.
+
+ } // JPLEAF*
+
+
+// BUILD JPLEAF_B1 OR JPFULLPOPU1:
+//
+// See above about JPLEAF*. If pop1 doesnt fit in any level of linear leaf,
+// it might still fit in a LeafB1 or FullPop, perhaps under a narrow pointer.
+
+ if ((Level == 1) || SAMESUBEXP(1)) // same until last digit.
+ {
+ Pjlb_t PjlbRaw; // for bitmap leaf.
+ Pjlb_t Pjlb;
+
+ assert(pop1 <= cJU_JPFULLPOPU1_POP0 + 1);
+ CHECKLEAFORDER; // indexes to be stored are sorted.
+
+#ifdef JUDY1
+
+// JPFULLPOPU1:
+
+ if (pop1 == cJU_JPFULLPOPU1_POP0 + 1)
+ {
+ Word_t Addr = PjpParent->jp_Addr;
+ Word_t DcdP0 = (*PIndex & cJU_DCDMASK(1))
+ | cJU_JPFULLPOPU1_POP0;
+ JU_JPSETADT(PjpParent, Addr, DcdP0, cJ1_JPFULLPOPU1);
+
+ return(TRUE);
+ }
+#endif
+
+// JPLEAF_B1:
+
+ if ((PjlbRaw = j__udyAllocJLB1(Pjpm)) == (Pjlb_t) NULL)
+ NOMEM;
+ Pjlb = P_JLB(PjlbRaw);
+
+ for (offset = 0; offset < pop1; ++offset)
+ JU_BITMAPSETL(Pjlb, PIndex[offset]);
+
+ retval = TRUE; // default.
+
+#ifdef JUDYL
+
+// Build subexpanse values-only leaves (LeafVs) under LeafB1:
+
+ for (offset = 0; offset < cJU_NUMSUBEXPL; ++offset)
+ {
+ if (! (pop1sub = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, offset))))
+ continue; // skip empty subexpanse.
+
+// Allocate one LeafV = JP subarray; if out of memory, clear bitmaps for higher
+// subexpanses and adjust *PPop1:
+
+ if ((PjvRaw = j__udyLAllocJV(pop1sub, Pjpm))
+ == (Pjv_t) NULL)
+ {
+ for (/* null */; offset < cJU_NUMSUBEXPL; ++offset)
+ {
+ *PPop1 -= j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, offset));
+ JU_JLB_BITMAP(Pjlb, offset) = 0;
+ }
+
+ retval = FALSE;
+ break;
+ }
+
+// Populate values-only leaf and save the pointer to it:
+
+ Pjv = P_JV(PjvRaw);
+ JU_COPYMEM(Pjv, PValue, pop1sub);
+ JL_JLB_PVALUE(Pjlb, offset) = PjvRaw; // first-tier pointer.
+ PValue += pop1sub;
+
+ } // for each subexpanse
+
+#endif // JUDYL
+
+// Attach new LeafB1 to parent JP; note use of *PPop1 possibly < pop1:
+
+ JU_JPSETADT(PjpParent, (Word_t) PjlbRaw,
+ (*PIndex & cJU_DCDMASK(1)) | (*PPop1 - 1), cJU_JPLEAF_B1);
+
+ return(retval);
+
+ } // JPLEAF_B1 or JPFULLPOPU1
+
+
+// BUILD JPBRANCH_U*:
+//
+// Arriving at BuildBranch means Level < top level but the pop1 is too large
+// for immediate indexes or a leaf, even under a narrow pointer, including a
+// LeafB1 or FullPop at level 1. This implies SAMESUBEXP(1) == FALSE, that is,
+// the indexes to be stored "branch" at level 2 or higher.
+
+BuildBranch: // come here directly if a leaf wont work.
+
+ assert(Level >= 2);
+ assert(Level < cJU_ROOTSTATE);
+ assert(! SAMESUBEXP(1)); // sanity check, see above.
+
+// Determine the appropriate level for a new branch node; see if a narrow
+// pointer can be used:
+//
+// This can be confusing. The branch is required at the lowest level L where
+// the indexes to store are not in the same subexpanse at level L-1. Work down
+// from Level to tree level 3, which is 1 above the lowest tree level = 2 at
+// which a branch can be used. Theres no need to check SAMESUBEXP at level 2
+// because its known to be false at level 2-1 = 1.
+//
+// Note: Unlike for a leaf node, a narrow pointer is always used for a branch
+// if possible, that is, maximum compression is always used, except at the top
+// level of the tree, where a JPM cannot support a narrow pointer, meaning a
+// top BranchL can have a single JP (fanout = 1); but that case jumps directly
+// to BuildBranch2.
+//
+// Note: For 32-bit systems the only usable values for a narrow pointer are
+// Level = 3 and levelsub = 2; 64-bit systems have many more choices; but
+// hopefully this for-loop is fast enough even on a 32-bit system.
+//
+// TBD: If not fast enough, #ifdef JU_64BIT and handle the 32-bit case faster.
+
+ for (levelsub = Level; levelsub >= 3; --levelsub) // see above.
+ if (! SAMESUBEXP(levelsub - 1)) // at limit of narrow pointer.
+ break; // put branch at levelsub.
+
+BuildBranch2: // come here directly for Level = levelsub = cJU_ROOTSTATE.
+
+ assert(levelsub >= 2);
+ assert(levelsub <= Level);
+
+// Initially build a BranchU:
+//
+// Always start with a BranchU because the number of populated subexpanses is
+// not yet known. Use digitmask, digitshifted, and digitshincr to avoid
+// expensive variable shifts within JU_DIGITATSTATE within the loop.
+//
+// TBD: The use of digitmask, etc. results in more increment operations per
+// loop, is there an even faster way?
+//
+// TBD: Would it pay to pre-count the populated JPs (subexpanses) and
+// pre-compress the branch, that is, build a BranchL or BranchB immediately,
+// also taking account of opportunistic uncompression rules? Probably not
+// because at high levels of the tree there might be huge numbers of indexes
+// (hence cache lines) to scan in the PIndex array to determine the fanout
+// (number of JPs) needed.
+
+ if ((PjbuRaw = j__udyAllocJBU(Pjpm)) == (Pjbu_t) NULL) NOMEM;
+ Pjbu = P_JBU(PjbuRaw);
+
+ JPtype_null = cJU_JPNULL1 + levelsub - 2; // in new BranchU.
+ JU_JPSETADT(&JPnull, 0, 0, JPtype_null);
+
+ Pjp = Pjbu->jbu_jp; // for convenience in loop.
+ numJPs = 0; // non-null in the BranchU.
+ digitmask = cJU_MASKATSTATE(levelsub); // see above.
+ digitshincr = 1UL << (cJU_BITSPERBYTE * (levelsub - 1));
+ retval = TRUE;
+
+// Scan and populate JPs (subexpanses):
+//
+// Look for all indexes matching each digit in the BranchU (at the correct
+// levelsub), and meanwhile notice any sorting error. Increment PIndex (and
+// PValue) and reduce pop1 for each subexpanse handled successfully.
+
+ for (digit = digitshifted = 0;
+ digit < cJU_BRANCHUNUMJPS;
+ ++digit, digitshifted += digitshincr, ++Pjp)
+ {
+ DBGCODE(Word_t pop1subprev;)
+ assert(pop1 != 0); // end of indexes is handled elsewhere.
+
+// Count indexes in digits subexpanse:
+
+ for (pop1sub = 0; pop1sub < pop1; ++pop1sub)
+ if (digitshifted != (PIndex[pop1sub] & digitmask)) break;
+
+// Empty subexpanse (typical, performance path) or sorting error (rare):
+
+ if (pop1sub == 0)
+ {
+ if (digitshifted < (PIndex[0] & digitmask))
+ { SETJPNULL(Pjp); continue; } // empty subexpanse.
+
+ assert(pop1 < *PPop1); // did save >= 1 index and decr pop1.
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_UNSORTED);
+ goto AbandonBranch;
+ }
+
+// Non-empty subexpanse:
+//
+// First shortcut by handling pop1sub == 1 (JPIMMED_*_01) inline locally.
+
+ if (pop1sub == 1) // note: can be at root level.
+ {
+ Word_t Addr = 0;
+ JUDYLCODE(Addr = (Word_t) (*PValue++);)
+ JU_JPSETADT(Pjp, Addr, *PIndex, cJU_JPIMMED_1_01 + levelsub -2);
+
+ ++numJPs;
+
+ if (--pop1) { ++PIndex; continue; } // more indexes to store.
+
+ ++digit; ++Pjp; // skip JP just saved.
+ goto ClearBranch; // save time.
+ }
+
+// Recurse to populate one digits (subexpanses) JP; if successful, skip
+// indexes (and values) just stored (performance path), except when expanse is
+// completely stored:
+
+ DBGCODE(pop1subprev = pop1sub;)
+
+ if (j__udyInsArray(Pjp, levelsub - 1, &pop1sub, (PWord_t) PIndex,
+#ifdef JUDYL
+ (Pjv_t) PValue,
+#endif
+ Pjpm))
+ { // complete success.
+ ++numJPs;
+ assert(pop1subprev == pop1sub);
+ assert(pop1 >= pop1sub);
+
+ if ((pop1 -= pop1sub) != 0) // more indexes to store:
+ {
+ PIndex += pop1sub; // skip indexes just stored.
+ JUDYLCODE(PValue += pop1sub;)
+ continue;
+ }
+ // else leave PIndex in BranchUs expanse.
+
+// No more indexes to store in BranchUs expanse:
+
+ ++digit; ++Pjp; // skip JP just saved.
+ goto ClearBranch; // save time.
+ }
+
+// Handle any error at a lower level of recursion:
+//
+// In case of partial success, pop1sub != 0, but it was reduced from the value
+// passed to j__udyInsArray(); skip this JP later during ClearBranch.
+
+ assert(pop1subprev > pop1sub); // check j__udyInsArray().
+ assert(pop1 > pop1sub); // check j__udyInsArray().
+
+ if (pop1sub) // partial success.
+ { ++digit; ++Pjp; ++numJPs; } // skip JP just saved.
+
+ pop1 -= pop1sub; // deduct saved indexes if any.
+
+// Same-level sorting error, or any lower-level error; abandon the rest of the
+// branch:
+//
+// Arrive here with pop1 = remaining unsaved indexes (always non-zero). Adjust
+// the *PPop1 value to record and return, modify retval, and use ClearBranch to
+// finish up.
+
+AbandonBranch:
+ assert(pop1 != 0); // more to store, see above.
+ assert(pop1 <= *PPop1); // sanity check.
+
+ *PPop1 -= pop1; // deduct unsaved indexes.
+ pop1 = 0; // to avoid error later.
+ retval = FALSE;
+
+// Error (rare), or end of indexes while traversing new BranchU (performance
+// path); either way, mark the remaining JPs, if any, in the BranchU as nulls
+// and exit the loop:
+//
+// Arrive here with digit and Pjp set to the first JP to set to null.
+
+ClearBranch:
+ for (/* null */; digit < cJU_BRANCHUNUMJPS; ++digit, ++Pjp)
+ SETJPNULL(Pjp);
+ break; // saves one more compare.
+
+ } // for each digit
+
+
+// FINISH JPBRANCH_U*:
+//
+// Arrive here with a BranchU built under Pjbu, numJPs set, and either: retval
+// == TRUE and *PPop1 unmodified, or else retval == FALSE, *PPop1 set to the
+// actual number of indexes saved (possibly 0 for complete failure at a lower
+// level upon the first call of j__udyInsArray()), and the Judy error set in
+// Pjpm. Either way, PIndex points to an index within the expanse just
+// handled.
+
+ Pjbany = (Word_t) PjbuRaw; // default = use this BranchU.
+ JPtype = branchU_JPtype[levelsub];
+
+// Check for complete failure above:
+
+ assert((! retval) || *PPop1); // sanity check.
+
+ if ((! retval) && (*PPop1 == 0)) // nothing stored, full failure.
+ {
+ j__udyFreeJBU(PjbuRaw, Pjpm);
+ SETJPNULL_PARENT;
+ return(FALSE);
+ }
+
+// Complete or partial success so far; watch for sorting error after the
+// maximum digit (255) in the BranchU, which is indicated by having more
+// indexes to store in the BranchUs expanse:
+//
+// For example, if an index to store has a digit of 255 at levelsub, followed
+// by an index with a digit of 254, the for-loop above runs out of digits
+// without reducing pop1 to 0.
+
+ if (pop1 != 0)
+ {
+ JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_UNSORTED);
+ *PPop1 -= pop1; // deduct unsaved indexes.
+ retval = FALSE;
+ }
+ assert(*PPop1 != 0); // branch (still) cannot be empty.
+
+
+// OPTIONALLY COMPRESS JPBRANCH_U*:
+//
+// See if the BranchU should be compressed to a BranchL or BranchB; if so, do
+// that and free the BranchU; otherwise just use the existing BranchU. Follow
+// the same rules as in JudyIns.c (version 4.95): Only check local population
+// (cJU_OPP_UNCOMP_POP0) for BranchL, and only check global memory efficiency
+// (JU_OPP_UNCOMPRESS) for BranchB. TBD: Have the rules changed?
+//
+// Note: Because of differing order of operations, the latter compression
+// might not result in the same set of branch nodes as a series of sequential
+// insertions.
+//
+// Note: Allocating a BranchU only to sometimes convert it to a BranchL or
+// BranchB is unfortunate, but attempting to work with a temporary BranchU on
+// the stack and then allocate and keep it as a BranchU in many cases is worse
+// in terms of error handling.
+
+
+// COMPRESS JPBRANCH_U* TO JPBRANCH_L*:
+
+ if (numJPs <= cJU_BRANCHLMAXJPS) // JPs fit in a BranchL.
+ {
+ Pjbl_t PjblRaw = (Pjbl_t) NULL; // new BranchL; init for cc.
+ Pjbl_t Pjbl;
+
+ if ((*PPop1 > JU_BRANCHL_MAX_POP) // pop too high.
+ || ((PjblRaw = j__udyAllocJBL(Pjpm)) == (Pjbl_t) NULL))
+ { // cant alloc BranchL.
+ goto SetParent; // just keep BranchU.
+ }
+
+ Pjbl = P_JBL(PjblRaw);
+
+// Copy BranchU JPs to BranchL:
+
+ (Pjbl->jbl_NumJPs) = numJPs;
+ offset = 0;
+
+ for (digit = 0; digit < cJU_BRANCHUNUMJPS; ++digit)
+ {
+ if ((((Pjbu->jbu_jp) + digit)->jp_Type) == JPtype_null)
+ continue;
+
+ (Pjbl->jbl_Expanse[offset ]) = digit;
+ (Pjbl->jbl_jp [offset++]) = Pjbu->jbu_jp[digit];
+ }
+ assert(offset == numJPs); // found same number.
+
+// Free the BranchU and prepare to use the new BranchL instead:
+
+ j__udyFreeJBU(PjbuRaw, Pjpm);
+
+ Pjbany = (Word_t) PjblRaw;
+ JPtype = branchL_JPtype[levelsub];
+
+ } // compress to BranchL
+
+
+// COMPRESS JPBRANCH_U* TO JPBRANCH_B*:
+//
+// If unable to allocate the BranchB or any JP subarray, free all related
+// memory and just keep the BranchU.
+//
+// Note: This use of JU_OPP_UNCOMPRESS is a bit conservative because the
+// BranchU is already allocated while the (presumably smaller) BranchB is not,
+// the opposite of how its used in single-insert code.
+
+ else
+ {
+ Pjbb_t PjbbRaw = (Pjbb_t) NULL; // new BranchB; init for cc.
+ Pjbb_t Pjbb;
+ Pjp_t Pjp2; // in BranchU.
+
+ if ((*PPop1 > JU_BRANCHB_MAX_POP) // pop too high.
+ || ((PjbbRaw = j__udyAllocJBB(Pjpm)) == (Pjbb_t) NULL))
+ { // cant alloc BranchB.
+ goto SetParent; // just keep BranchU.
+ }
+
+ Pjbb = P_JBB(PjbbRaw);
+
+// Set bits in bitmap for populated subexpanses:
+
+ Pjp2 = Pjbu->jbu_jp;
+
+ for (digit = 0; digit < cJU_BRANCHUNUMJPS; ++digit)
+ if ((((Pjbu->jbu_jp) + digit)->jp_Type) != JPtype_null)
+ JU_BITMAPSETB(Pjbb, digit);
+
+// Copy non-null JPs to BranchB JP subarrays:
+
+ for (offset = 0; offset < cJU_NUMSUBEXPB; ++offset)
+ {
+ Pjp_t PjparrayRaw;
+ Pjp_t Pjparray;
+
+ if (! (numJPs = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, offset))))
+ continue; // skip empty subexpanse.
+
+// If unable to allocate a JP subarray, free all BranchB memory so far and
+// continue to use the BranchU:
+
+ if ((PjparrayRaw = j__udyAllocJBBJP(numJPs, Pjpm))
+ == (Pjp_t) NULL)
+ {
+ while (offset-- > 0)
+ {
+ if (JU_JBB_PJP(Pjbb, offset) == (Pjp_t) NULL) continue;
+
+ j__udyFreeJBBJP(JU_JBB_PJP(Pjbb, offset),
+ j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, offset)),
+ Pjpm);
+ }
+ j__udyFreeJBB(PjbbRaw, Pjpm);
+ goto SetParent; // keep BranchU.
+ }
+
+// Set one JP subarray pointer and copy the subexpanses JPs to the subarray:
+//
+// Scan the BranchU for non-null JPs until numJPs JPs are copied.
+
+ JU_JBB_PJP(Pjbb, offset) = PjparrayRaw;
+ Pjparray = P_JP(PjparrayRaw);
+
+ while (numJPs-- > 0)
+ {
+ while ((Pjp2->jp_Type) == JPtype_null)
+ {
+ ++Pjp2;
+ assert(Pjp2 < (Pjbu->jbu_jp) + cJU_BRANCHUNUMJPS);
+ }
+ *Pjparray++ = *Pjp2++;
+ }
+ } // for each subexpanse
+
+// Free the BranchU and prepare to use the new BranchB instead:
+
+ j__udyFreeJBU(PjbuRaw, Pjpm);
+
+ Pjbany = (Word_t) PjbbRaw;
+ JPtype = branchB_JPtype[levelsub];
+
+ } // compress to BranchB
+
+
+// COMPLETE OR PARTIAL SUCCESS:
+//
+// Attach new branch (under Pjp, with JPtype) to parent JP; note use of *PPop1,
+// possibly reduced due to partial failure.
+
+SetParent:
+ (PjpParent->jp_Addr) = Pjbany;
+ (PjpParent->jp_Type) = JPtype;
+
+ if (Level < cJU_ROOTSTATE) // PjpParent not in JPM:
+ {
+ Word_t DcdP0 = (*PIndex & cJU_DCDMASK(levelsub)) | (*PPop1 - 1);
+
+ JU_JPSETADT(PjpParent ,Pjbany, DcdP0, JPtype);
+ }
+
+ return(retval);
+
+} // j__udyInsArray()
diff --git a/libs/klib/judy/JudyInsertBranch.c b/libs/klib/judy/JudyInsertBranch.c
new file mode 100644
index 0000000..307285c
--- /dev/null
+++ b/libs/klib/judy/JudyInsertBranch.c
@@ -0,0 +1,133 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// BranchL insertion functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+extern int j__udyCreateBranchL(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+
+
+// ****************************************************************************
+// __ J U D Y I N S E R T B R A N C H
+//
+// Insert 2-element BranchL in between Pjp and Pjp->jp_Addr.
+//
+// Return -1 if out of memory, otherwise return 1.
+
+FUNCTION int j__udyInsertBranch(
+ Pjp_t Pjp, // JP containing narrow pointer.
+ Word_t Index, // outlier to Pjp.
+ Word_t BranchLevel, // of what JP points to, mapped from JP type.
+ Pjpm_t Pjpm) // for global accounting.
+{
+ jp_t JP2 [2];
+ jp_t JP;
+ Pjp_t PjpNull;
+ Word_t XorExp;
+ Word_t Inew, Iold;
+ Word_t DCDMask; // initially for original BranchLevel.
+ int Ret;
+ uint8_t Exp2[2];
+ uint8_t DecodeByteN, DecodeByteO;
+
+// Get the current mask for the DCD digits:
+
+ DCDMask = cJU_DCDMASK(BranchLevel);
+
+// Obtain Dcd bits that differ between Index and JP, shifted so the
+// digit for BranchLevel is the LSB:
+
+ XorExp = ((Index ^ JU_JPDCDPOP0(Pjp)) & (cJU_ALLONES >> cJU_BITSPERBYTE))
+ >> (BranchLevel * cJU_BITSPERBYTE);
+ assert(XorExp); // Index must be an outlier.
+
+// Count levels between object under narrow pointer and the level at which
+// the outlier diverges from it, which is always at least initial
+// BranchLevel + 1, to end up with the level (JP type) at which to insert
+// the new intervening BranchL:
+
+ do { ++BranchLevel; } while ((XorExp >>= cJU_BITSPERBYTE));
+ assert((BranchLevel > 1) && (BranchLevel < cJU_ROOTSTATE));
+
+// Get the MSB (highest digit) that differs between the old expanse and
+// the new Index to insert:
+
+ DecodeByteO = JU_DIGITATSTATE(JU_JPDCDPOP0(Pjp), BranchLevel);
+ DecodeByteN = JU_DIGITATSTATE(Index, BranchLevel);
+
+ assert(DecodeByteO != DecodeByteN);
+
+// Determine sorted order for old expanse and new Index digits:
+
+ if (DecodeByteN > DecodeByteO) { Iold = 0; Inew = 1; }
+ else { Iold = 1; Inew = 0; }
+
+// Copy old JP into staging area for new Branch
+ JP2 [Iold] = *Pjp;
+ Exp2[Iold] = DecodeByteO;
+ Exp2[Inew] = DecodeByteN;
+
+// Create a 2 Expanse Linear branch
+//
+// Note: Pjp->jp_Addr is set by j__udyCreateBranchL()
+
+ Ret = j__udyCreateBranchL(Pjp, JP2, Exp2, 2, Pjpm);
+ if (Ret == -1) return(-1);
+
+// Get Pjp to the NULL of where to do insert
+ PjpNull = ((P_JBL(Pjp->jp_Addr))->jbl_jp) + Inew;
+
+// Convert to a cJU_JPIMMED_*_01 at the correct level:
+// Build JP and set type below to: cJU_JPIMMED_X_01
+ JU_JPSETADT(PjpNull, 0, Index, cJU_JPIMMED_1_01 - 2 + BranchLevel);
+
+// Return pointer to Value area in cJU_JPIMMED_X_01
+ JUDYLCODE(Pjpm->jpm_PValue = (Pjv_t) PjpNull;)
+
+// The old JP now points to a BranchL that is at higher level. Therefore
+// it contains excess DCD bits (in the least significant position) that
+// must be removed (zeroed); that is, they become part of the Pop0
+// subfield. Note that the remaining (lower) bytes in the Pop0 field do
+// not change.
+//
+// Take from the old DCDMask, which went "down" to a lower BranchLevel,
+// and zero any high bits that are still in the mask at the new, higher
+// BranchLevel; then use this mask to zero the bits in jp_DcdPopO:
+
+// Set old JP to a BranchL at correct level
+
+ Pjp->jp_Type = cJU_JPBRANCH_L2 - 2 + BranchLevel;
+ DCDMask ^= cJU_DCDMASK(BranchLevel);
+ DCDMask = ~DCDMask & JU_JPDCDPOP0(Pjp);
+ JP = *Pjp;
+ JU_JPSETADT(Pjp, JP.jp_Addr, DCDMask, JP.jp_Type);
+
+ return(1);
+
+} // j__udyInsertBranch()
diff --git a/libs/klib/judy/JudyL.h b/libs/klib/judy/JudyL.h
new file mode 100644
index 0000000..13c7d66
--- /dev/null
+++ b/libs/klib/judy/JudyL.h
@@ -0,0 +1,503 @@
+#ifndef _JUDYL_INCLUDED
+#define _JUDYL_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// ****************************************************************************
+// JUDYL -- SMALL/LARGE AND/OR CLUSTERED/SPARSE ARRAYS
+//
+// -by-
+//
+// Douglas L. Baskins
+// doug at sourcejudy.com
+//
+// Judy arrays are designed to be used instead of arrays. The performance
+// suggests the reason why Judy arrays are thought of as arrays, instead of
+// trees. They are remarkably memory efficient at all populations.
+// Implemented as a hybrid digital tree (but really a state machine, see
+// below), Judy arrays feature fast insert/retrievals, fast near neighbor
+// searching, and contain a population tree for extremely fast ordinal related
+// retrievals.
+//
+// CONVENTIONS:
+//
+// - The comments here refer to 32-bit [64-bit] systems.
+//
+// - BranchL, LeafL refer to linear branches and leaves (small populations),
+// except LeafL does not actually appear as such; rather, Leaf1..3 [Leaf1..7]
+// is used to represent leaf Index sizes, and LeafW refers to a Leaf with
+// full (Long) word Indexes, which is also a type of linear leaf. Note that
+// root-level LeafW (Leaf4 [Leaf8]) leaves are called LEAFW.
+//
+// - BranchB, LeafB1 refer to bitmap branches and leaves (intermediate
+// populations).
+//
+// - BranchU refers to uncompressed branches. An uncompressed branch has 256
+// JPs, some of which could be null. Note: All leaves are compressed (and
+// sorted), or else an expanse is full (FullPopu), so there is no LeafU
+// equivalent to BranchU.
+//
+// - "Popu" is short for "Population".
+// - "Pop1" refers to actual population (base 1).
+// - "Pop0" refers to Pop1 - 1 (base 0), the way populations are stored in data
+// structures.
+//
+// - Branches and Leaves are both named by the number of bytes in their Pop0
+// field. In the case of Leaves, the same number applies to the Index sizes.
+//
+// - The representation of many numbers as hex is a relatively safe and
+// portable way to get desired bitpatterns as unsigned longs.
+//
+// - Some preprocessors cant handle single apostrophe characters within
+// #ifndef code, so here, delete all instead.
+
+
+#include "JudyPrivate.h" // includes Judy.h in turn.
+#include "JudyPrivateBranch.h" // support for branches.
+
+
+// ****************************************************************************
+// JUDYL ROOT POINTER (JRP) AND JUDYL POINTER (JP) TYPE FIELDS
+// ****************************************************************************
+
+typedef enum // uint8_t -- but C does not support this type of enum.
+{
+
+// JP NULL TYPES:
+//
+// There is a series of cJL_JPNULL* Types because each one pre-records a
+// different Index Size for when the first Index is inserted in the previously
+// null JP. They must start >= 8 (three bits).
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+
+ cJL_JPNULL1 = 1,
+ // Index Size 1[1] byte when 1 Index inserted.
+ cJL_JPNULL2, // Index Size 2[2] bytes when 1 Index inserted.
+ cJL_JPNULL3, // Index Size 3[3] bytes when 1 Index inserted.
+
+#ifndef JU_64BIT
+#define cJL_JPNULLMAX cJL_JPNULL3
+#else
+ cJL_JPNULL4, // Index Size 4[4] bytes when 1 Index inserted.
+ cJL_JPNULL5, // Index Size 5[5] bytes when 1 Index inserted.
+ cJL_JPNULL6, // Index Size 6[6] bytes when 1 Index inserted.
+ cJL_JPNULL7, // Index Size 7[7] bytes when 1 Index inserted.
+#define cJL_JPNULLMAX cJL_JPNULL7
+#endif
+
+
+// JP BRANCH TYPES:
+//
+// Note: There are no state-1 branches; only leaves reside at state 1.
+
+// Linear branches:
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+
+ cJL_JPBRANCH_L2, // 2[2] bytes Pop0, 1[5] bytes Dcd.
+ cJL_JPBRANCH_L3, // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+ cJL_JPBRANCH_L4, // [4] bytes Pop0, [3] bytes Dcd.
+ cJL_JPBRANCH_L5, // [5] bytes Pop0, [2] bytes Dcd.
+ cJL_JPBRANCH_L6, // [6] bytes Pop0, [1] byte Dcd.
+ cJL_JPBRANCH_L7, // [7] bytes Pop0, [0] bytes Dcd.
+#endif
+
+ cJL_JPBRANCH_L, // note: DcdPopO field not used.
+
+// Bitmap branches:
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+
+ cJL_JPBRANCH_B2, // 2[2] bytes Pop0, 1[5] bytes Dcd.
+ cJL_JPBRANCH_B3, // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+ cJL_JPBRANCH_B4, // [4] bytes Pop0, [3] bytes Dcd.
+ cJL_JPBRANCH_B5, // [5] bytes Pop0, [2] bytes Dcd.
+ cJL_JPBRANCH_B6, // [6] bytes Pop0, [1] byte Dcd.
+ cJL_JPBRANCH_B7, // [7] bytes Pop0, [0] bytes Dcd.
+#endif
+
+ cJL_JPBRANCH_B, // note: DcdPopO field not used.
+
+// Uncompressed branches:
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+
+ cJL_JPBRANCH_U2, // 2[2] bytes Pop0, 1[5] bytes Dcd.
+ cJL_JPBRANCH_U3, // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+ cJL_JPBRANCH_U4, // [4] bytes Pop0, [3] bytes Dcd.
+ cJL_JPBRANCH_U5, // [5] bytes Pop0, [2] bytes Dcd.
+ cJL_JPBRANCH_U6, // [6] bytes Pop0, [1] byte Dcd.
+ cJL_JPBRANCH_U7, // [7] bytes Pop0, [0] bytes Dcd.
+#endif
+
+ cJL_JPBRANCH_U, // note: DcdPopO field not used.
+
+
+// JP LEAF TYPES:
+
+// Linear leaves:
+//
+// Note: These Types must be in sequential order for doing relative
+// calculations between them.
+//
+// Note: There is no full-word (4-byte [8-byte]) Index leaf under a JP because
+// non-root-state leaves only occur under branches that decode at least one
+// byte. Full-word, root-state leaves are under a JRP, not a JP. However, in
+// the code a "fake" JP can be created temporarily above a root-state leaf.
+
+ cJL_JPLEAF1, // 1[1] byte Pop0, 2 bytes Dcd.
+ cJL_JPLEAF2, // 2[2] bytes Pop0, 1[5] bytes Dcd.
+ cJL_JPLEAF3, // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+ cJL_JPLEAF4, // [4] bytes Pop0, [3] bytes Dcd.
+ cJL_JPLEAF5, // [5] bytes Pop0, [2] bytes Dcd.
+ cJL_JPLEAF6, // [6] bytes Pop0, [1] byte Dcd.
+ cJL_JPLEAF7, // [7] bytes Pop0, [0] bytes Dcd.
+#endif
+
+// Bitmap leaf; Index Size == 1:
+//
+// Note: These are currently only supported at state 1. At other states the
+// bitmap would grow from 256 to 256^2, 256^3, ... bits, which would not be
+// efficient..
+
+ cJL_JPLEAF_B1, // 1[1] byte Pop0, 2[6] bytes Dcd.
+
+// Full population; Index Size == 1 virtual leaf:
+//
+// Note: JudyL has no cJL_JPFULLPOPU1 equivalent to cJ1_JPFULLPOPU1, because
+// in the JudyL case this could result in a values-only leaf of up to 256 words
+// (value areas) that would be slow to insert/delete.
+
+
+// JP IMMEDIATES; leaves (Indexes) stored inside a JP:
+//
+// The second numeric suffix is the Pop1 for each type. As the Index Size
+// increases, the maximum possible population decreases.
+//
+// Note: These Types must be in sequential order in each group (Index Size),
+// and the groups in correct order too, for doing relative calculations between
+// them. For example, since these Types enumerate the Pop1 values (unlike
+// other JP Types where there is a Pop0 value in the JP), the maximum Pop1 for
+// each Index Size is computable.
+//
+// All enums equal or above this point are cJL_JPIMMEDs.
+
+ cJL_JPIMMED_1_01, // Index Size = 1, Pop1 = 1.
+ cJL_JPIMMED_2_01, // Index Size = 2, Pop1 = 1.
+ cJL_JPIMMED_3_01, // Index Size = 3, Pop1 = 1.
+
+#ifdef JU_64BIT
+ cJL_JPIMMED_4_01, // Index Size = 4, Pop1 = 1.
+ cJL_JPIMMED_5_01, // Index Size = 5, Pop1 = 1.
+ cJL_JPIMMED_6_01, // Index Size = 6, Pop1 = 1.
+ cJL_JPIMMED_7_01, // Index Size = 7, Pop1 = 1.
+#endif
+
+ cJL_JPIMMED_1_02, // Index Size = 1, Pop1 = 2.
+ cJL_JPIMMED_1_03, // Index Size = 1, Pop1 = 3.
+
+#ifdef JU_64BIT
+ cJL_JPIMMED_1_04, // Index Size = 1, Pop1 = 4.
+ cJL_JPIMMED_1_05, // Index Size = 1, Pop1 = 5.
+ cJL_JPIMMED_1_06, // Index Size = 1, Pop1 = 6.
+ cJL_JPIMMED_1_07, // Index Size = 1, Pop1 = 7.
+
+ cJL_JPIMMED_2_02, // Index Size = 2, Pop1 = 2.
+ cJL_JPIMMED_2_03, // Index Size = 2, Pop1 = 3.
+
+ cJL_JPIMMED_3_02, // Index Size = 3, Pop1 = 2.
+#endif
+
+// This special Type is merely a sentinel for doing relative calculations.
+// This value should not be used in switch statements (to avoid allocating code
+// for it), which is also why it appears at the end of the enum list.
+
+ cJL_JPIMMED_CAP
+
+} jpL_Type_t;
+
+
+// RELATED VALUES:
+
+// Index Size (state) for leaf JP, and JP type based on Index Size (state):
+
+#define JL_LEAFINDEXSIZE(jpType) ((jpType) - cJL_JPLEAF1 + 1)
+#define JL_LEAFTYPE(IndexSize) ((IndexSize) + cJL_JPLEAF1 - 1)
+
+
+// MAXIMUM POPULATIONS OF LINEAR LEAVES:
+
+#ifndef JU_64BIT // 32-bit
+
+#define J_L_MAXB (sizeof(Word_t) * 64)
+#define ALLOCSIZES { 3, 5, 7, 11, 15, 23, 32, 47, 64, TERMINATOR } // in words.
+#define cJL_LEAF1_MAXWORDS (32) // max Leaf1 size in words.
+
+// Note: cJL_LEAF1_MAXPOP1 is chosen such that the index portion is less than
+// 32 bytes -- the number of bytes the index takes in a bitmap leaf.
+
+#define cJL_LEAF1_MAXPOP1 \
+ ((cJL_LEAF1_MAXWORDS * cJU_BYTESPERWORD)/(1 + cJU_BYTESPERWORD))
+#define cJL_LEAF2_MAXPOP1 (J_L_MAXB / (2 + cJU_BYTESPERWORD))
+#define cJL_LEAF3_MAXPOP1 (J_L_MAXB / (3 + cJU_BYTESPERWORD))
+#define cJL_LEAFW_MAXPOP1 \
+ ((J_L_MAXB - cJU_BYTESPERWORD) / (2 * cJU_BYTESPERWORD))
+
+#else // 64-bit
+
+#define J_L_MAXB (sizeof(Word_t) * 64)
+#define ALLOCSIZES { 3, 5, 7, 11, 15, 23, 32, 47, 64, TERMINATOR } // in words.
+#define cJL_LEAF1_MAXWORDS (15) // max Leaf1 size in words.
+
+#define cJL_LEAF1_MAXPOP1 \
+ ((cJL_LEAF1_MAXWORDS * cJU_BYTESPERWORD)/(1 + cJU_BYTESPERWORD))
+#define cJL_LEAF2_MAXPOP1 (J_L_MAXB / (2 + cJU_BYTESPERWORD))
+#define cJL_LEAF3_MAXPOP1 (J_L_MAXB / (3 + cJU_BYTESPERWORD))
+#define cJL_LEAF4_MAXPOP1 (J_L_MAXB / (4 + cJU_BYTESPERWORD))
+#define cJL_LEAF5_MAXPOP1 (J_L_MAXB / (5 + cJU_BYTESPERWORD))
+#define cJL_LEAF6_MAXPOP1 (J_L_MAXB / (6 + cJU_BYTESPERWORD))
+#define cJL_LEAF7_MAXPOP1 (J_L_MAXB / (7 + cJU_BYTESPERWORD))
+#define cJL_LEAFW_MAXPOP1 \
+ ((J_L_MAXB - cJU_BYTESPERWORD) / (2 * cJU_BYTESPERWORD))
+
+#endif // 64-bit
+
+
+// MAXIMUM POPULATIONS OF IMMEDIATE JPs:
+//
+// These specify the maximum Population of immediate JPs with various Index
+// Sizes (== sizes of remaining undecoded Index bits). Since the JP Types enum
+// already lists all the immediates in order by state and size, calculate these
+// values from it to avoid redundancy.
+
+#define cJL_IMMED1_MAXPOP1 ((cJU_BYTESPERWORD - 1) / 1) // 3 [7].
+#define cJL_IMMED2_MAXPOP1 ((cJU_BYTESPERWORD - 1) / 2) // 1 [3].
+#define cJL_IMMED3_MAXPOP1 ((cJU_BYTESPERWORD - 1) / 3) // 1 [2].
+
+#ifdef JU_64BIT
+#define cJL_IMMED4_MAXPOP1 ((cJU_BYTESPERWORD - 1) / 4) // [1].
+#define cJL_IMMED5_MAXPOP1 ((cJU_BYTESPERWORD - 1) / 5) // [1].
+#define cJL_IMMED6_MAXPOP1 ((cJU_BYTESPERWORD - 1) / 6) // [1].
+#define cJL_IMMED7_MAXPOP1 ((cJU_BYTESPERWORD - 1) / 7) // [1].
+#endif
+
+
+// ****************************************************************************
+// JUDYL LEAF BITMAP (JLLB) SUPPORT
+// ****************************************************************************
+//
+// Assemble bitmap leaves out of smaller units that put bitmap subexpanses
+// close to their associated pointers. Why not just use a bitmap followed by a
+// series of pointers? (See 4.27.) Turns out this wastes a cache fill on
+// systems with smaller cache lines than the assumed value cJU_WORDSPERCL.
+
+#define JL_JLB_BITMAP(Pjlb, Subexp) ((Pjlb)->jLlb_jLlbs[Subexp].jLlbs_Bitmap)
+#define JL_JLB_PVALUE(Pjlb, Subexp) ((Pjlb)->jLlb_jLlbs[Subexp].jLlbs_PValue)
+
+typedef struct J__UDYL_LEAF_BITMAP_SUBEXPANSE
+{
+ BITMAPL_t jLlbs_Bitmap;
+ Pjv_t jLlbs_PValue;
+
+} jLlbs_t;
+
+typedef struct J__UDYL_LEAF_BITMAP
+{
+ jLlbs_t jLlb_jLlbs[cJU_NUMSUBEXPL];
+
+} jLlb_t, * PjLlb_t;
+
+// Words per bitmap leaf:
+
+#define cJL_WORDSPERLEAFB1 (sizeof(jLlb_t) / cJU_BYTESPERWORD)
+
+
+// ****************************************************************************
+// MEMORY ALLOCATION SUPPORT
+// ****************************************************************************
+
+// ARRAY-GLOBAL INFORMATION:
+//
+// At the cost of an occasional additional cache fill, this object, which is
+// pointed at by a JRP and in turn points to a JP_BRANCH*, carries array-global
+// information about a JudyL array that has sufficient population to amortize
+// the cost. The jpm_Pop0 field prevents having to add up the total population
+// for the array in insert, delete, and count code. The jpm_JP field prevents
+// having to build a fake JP for entry to a state machine; however, the
+// jp_DcdPopO field in jpm_JP, being one byte too small, is not used.
+//
+// Note: Struct fields are ordered to keep "hot" data in the first 8 words
+// (see left-margin comments) for machines with 8-word cache lines, and to keep
+// sub-word fields together for efficient packing.
+
+typedef struct J_UDYL_POPULATION_AND_MEMORY
+{
+/* 1 */ Word_t jpm_Pop0; // total population-1 in array.
+/* 2 */ jp_t jpm_JP; // JP to first branch; see above.
+/* 4 */ Word_t jpm_LastUPop0; // last jpm_Pop0 when convert to BranchU
+/* 7 */ Pjv_t jpm_PValue; // pointer to value to return.
+// Note: Field names match PJError_t for convenience in macros:
+/* 8 */ char je_Errno; // one of the enums in Judy.h.
+/* 8/9 */ int je_ErrID; // often an internal source line number.
+/* 9/10 */ Word_t jpm_TotalMemWords; // words allocated in array.
+} jLpm_t, *PjLpm_t;
+
+
+// TABLES FOR DETERMINING IF LEAVES HAVE ROOM TO GROW:
+//
+// These tables indicate if a given memory chunk can support growth of a given
+// object into wasted (rounded-up) memory in the chunk. Note: This violates
+// the hiddenness of the JudyMalloc code.
+
+extern const uint8_t j__L_Leaf1PopToWords[cJL_LEAF1_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf2PopToWords[cJL_LEAF2_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf3PopToWords[cJL_LEAF3_MAXPOP1 + 1];
+#ifdef JU_64BIT
+extern const uint8_t j__L_Leaf4PopToWords[cJL_LEAF4_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf5PopToWords[cJL_LEAF5_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf6PopToWords[cJL_LEAF6_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf7PopToWords[cJL_LEAF7_MAXPOP1 + 1];
+#endif
+extern const uint8_t j__L_LeafWPopToWords[cJL_LEAFW_MAXPOP1 + 1];
+extern const uint8_t j__L_LeafVPopToWords[];
+
+// These tables indicate where value areas start:
+
+extern const uint8_t j__L_Leaf1Offset [cJL_LEAF1_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf2Offset [cJL_LEAF2_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf3Offset [cJL_LEAF3_MAXPOP1 + 1];
+#ifdef JU_64BIT
+extern const uint8_t j__L_Leaf4Offset [cJL_LEAF4_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf5Offset [cJL_LEAF5_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf6Offset [cJL_LEAF6_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf7Offset [cJL_LEAF7_MAXPOP1 + 1];
+#endif
+extern const uint8_t j__L_LeafWOffset [cJL_LEAFW_MAXPOP1 + 1];
+
+// Also define macros to hide the details in the code using these tables.
+
+#define JL_LEAF1GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJL_LEAF1_MAXPOP1, j__L_Leaf1PopToWords)
+#define JL_LEAF2GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJL_LEAF2_MAXPOP1, j__L_Leaf2PopToWords)
+#define JL_LEAF3GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJL_LEAF3_MAXPOP1, j__L_Leaf3PopToWords)
+#ifdef JU_64BIT
+#define JL_LEAF4GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJL_LEAF4_MAXPOP1, j__L_Leaf4PopToWords)
+#define JL_LEAF5GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJL_LEAF5_MAXPOP1, j__L_Leaf5PopToWords)
+#define JL_LEAF6GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJL_LEAF6_MAXPOP1, j__L_Leaf6PopToWords)
+#define JL_LEAF7GROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJL_LEAF7_MAXPOP1, j__L_Leaf7PopToWords)
+#endif
+#define JL_LEAFWGROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJL_LEAFW_MAXPOP1, j__L_LeafWPopToWords)
+#define JL_LEAFVGROWINPLACE(Pop1) \
+ J__U_GROWCK(Pop1, cJU_BITSPERSUBEXPL, j__L_LeafVPopToWords)
+
+#define JL_LEAF1VALUEAREA(Pjv,Pop1) (((PWord_t)(Pjv)) + j__L_Leaf1Offset[Pop1])
+#define JL_LEAF2VALUEAREA(Pjv,Pop1) (((PWord_t)(Pjv)) + j__L_Leaf2Offset[Pop1])
+#define JL_LEAF3VALUEAREA(Pjv,Pop1) (((PWord_t)(Pjv)) + j__L_Leaf3Offset[Pop1])
+#ifdef JU_64BIT
+#define JL_LEAF4VALUEAREA(Pjv,Pop1) (((PWord_t)(Pjv)) + j__L_Leaf4Offset[Pop1])
+#define JL_LEAF5VALUEAREA(Pjv,Pop1) (((PWord_t)(Pjv)) + j__L_Leaf5Offset[Pop1])
+#define JL_LEAF6VALUEAREA(Pjv,Pop1) (((PWord_t)(Pjv)) + j__L_Leaf6Offset[Pop1])
+#define JL_LEAF7VALUEAREA(Pjv,Pop1) (((PWord_t)(Pjv)) + j__L_Leaf7Offset[Pop1])
+#endif
+#define JL_LEAFWVALUEAREA(Pjv,Pop1) (((PWord_t)(Pjv)) + j__L_LeafWOffset[Pop1])
+
+#define JL_LEAF1POPTOWORDS(Pop1) (j__L_Leaf1PopToWords[Pop1])
+#define JL_LEAF2POPTOWORDS(Pop1) (j__L_Leaf2PopToWords[Pop1])
+#define JL_LEAF3POPTOWORDS(Pop1) (j__L_Leaf3PopToWords[Pop1])
+#ifdef JU_64BIT
+#define JL_LEAF4POPTOWORDS(Pop1) (j__L_Leaf4PopToWords[Pop1])
+#define JL_LEAF5POPTOWORDS(Pop1) (j__L_Leaf5PopToWords[Pop1])
+#define JL_LEAF6POPTOWORDS(Pop1) (j__L_Leaf6PopToWords[Pop1])
+#define JL_LEAF7POPTOWORDS(Pop1) (j__L_Leaf7PopToWords[Pop1])
+#endif
+#define JL_LEAFWPOPTOWORDS(Pop1) (j__L_LeafWPopToWords[Pop1])
+#define JL_LEAFVPOPTOWORDS(Pop1) (j__L_LeafVPopToWords[Pop1])
+
+
+// FUNCTIONS TO ALLOCATE OBJECTS:
+
+PjLpm_t j__udyLAllocJLPM(void); // constant size.
+
+Pjbl_t j__udyLAllocJBL( PjLpm_t); // constant size.
+Pjbb_t j__udyLAllocJBB( PjLpm_t); // constant size.
+Pjp_t j__udyLAllocJBBJP(Word_t, PjLpm_t);
+Pjbu_t j__udyLAllocJBU( PjLpm_t); // constant size.
+
+Pjll_t j__udyLAllocJLL1( Word_t, PjLpm_t);
+Pjll_t j__udyLAllocJLL2( Word_t, PjLpm_t);
+Pjll_t j__udyLAllocJLL3( Word_t, PjLpm_t);
+
+#ifdef JU_64BIT
+Pjll_t j__udyLAllocJLL4( Word_t, PjLpm_t);
+Pjll_t j__udyLAllocJLL5( Word_t, PjLpm_t);
+Pjll_t j__udyLAllocJLL6( Word_t, PjLpm_t);
+Pjll_t j__udyLAllocJLL7( Word_t, PjLpm_t);
+#endif
+
+Pjlw_t j__udyLAllocJLW( Word_t ); // no PjLpm_t needed.
+PjLlb_t j__udyLAllocJLB1( PjLpm_t); // constant size.
+Pjv_t j__udyLAllocJV( Word_t, PjLpm_t);
+
+
+// FUNCTIONS TO FREE OBJECTS:
+
+void j__udyLFreeJLPM( PjLpm_t, PjLpm_t); // constant size.
+
+void j__udyLFreeJBL( Pjbl_t, PjLpm_t); // constant size.
+void j__udyLFreeJBB( Pjbb_t, PjLpm_t); // constant size.
+void j__udyLFreeJBBJP(Pjp_t, Word_t, PjLpm_t);
+void j__udyLFreeJBU( Pjbu_t, PjLpm_t); // constant size.
+
+void j__udyLFreeJLL1( Pjll_t, Word_t, PjLpm_t);
+void j__udyLFreeJLL2( Pjll_t, Word_t, PjLpm_t);
+void j__udyLFreeJLL3( Pjll_t, Word_t, PjLpm_t);
+
+#ifdef JU_64BIT
+void j__udyLFreeJLL4( Pjll_t, Word_t, PjLpm_t);
+void j__udyLFreeJLL5( Pjll_t, Word_t, PjLpm_t);
+void j__udyLFreeJLL6( Pjll_t, Word_t, PjLpm_t);
+void j__udyLFreeJLL7( Pjll_t, Word_t, PjLpm_t);
+#endif
+
+void j__udyLFreeJLW( Pjlw_t, Word_t, PjLpm_t);
+void j__udyLFreeJLB1( PjLlb_t, PjLpm_t); // constant size.
+void j__udyLFreeJV( Pjv_t, Word_t, PjLpm_t);
+void j__udyLFreeSM( Pjp_t, PjLpm_t); // everything below Pjp.
+
+#endif // ! _JUDYL_INCLUDED
diff --git a/libs/klib/judy/JudyMalloc.c b/libs/klib/judy/JudyMalloc.c
new file mode 100644
index 0000000..165521f
--- /dev/null
+++ b/libs/klib/judy/JudyMalloc.c
@@ -0,0 +1,86 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// ************************************************************************ //
+// JUDY - Memory Allocater //
+// -by- //
+// Douglas L. Baskins //
+// Hewlett Packard //
+// Fort Collins, Co //
+// (970) 229-2027 //
+// //
+// ************************************************************************ //
+
+// JUDY INCLUDE FILES
+#include "Judy.h"
+
+// ****************************************************************************
+// J U D Y M A L L O C
+//
+// Allocate RAM. This is the single location in Judy code that calls
+// malloc(3C). Note: JPM accounting occurs at a higher level.
+
+Word_t JudyMalloc(
+ Word_t Words)
+{
+ Word_t Addr;
+
+ Addr = (Word_t) malloc(Words * sizeof(Word_t));
+ return(Addr);
+
+} // JudyMalloc()
+
+
+// ****************************************************************************
+// J U D Y F R E E
+
+void JudyFree(
+ void * PWord,
+ Word_t Words)
+{
+ (void) Words;
+ free(PWord);
+
+} // JudyFree()
+
+
+// ****************************************************************************
+// J U D Y M A L L O C
+//
+// Higher-level "wrapper" for allocating objects that need not be in RAM,
+// although at this time they are in fact only in RAM. Later we hope that some
+// entire subtrees (at a JPM or branch) can be "virtual", so their allocations
+// and frees should go through this level.
+
+Word_t JudyMallocVirtual(
+ Word_t Words)
+{
+ return(JudyMalloc(Words));
+
+} // JudyMallocVirtual()
+
+
+// ****************************************************************************
+// J U D Y F R E E
+
+void JudyFreeVirtual(
+ void * PWord,
+ Word_t Words)
+{
+ JudyFree(PWord, Words);
+
+} // JudyFreeVirtual()
diff --git a/libs/klib/judy/JudyMallocIF.c b/libs/klib/judy/JudyMallocIF.c
new file mode 100644
index 0000000..fa91d80
--- /dev/null
+++ b/libs/klib/judy/JudyMallocIF.c
@@ -0,0 +1,780 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy malloc/free interface functions for Judy1 and JudyL.
+//
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DTRACEMI (Malloc Interface) to turn on tracing of malloc/free
+// calls at the interface level. (See also TRACEMF in lower-level code.)
+// Use -DTRACEMI2 for a terser format suitable for trace analysis.
+//
+// There can be malloc namespace bits in the LSBs of "raw" addresses from most,
+// but not all, of the j__udy*Alloc*() functions; see also JudyPrivate.h. To
+// test the Judy code, compile this file with -DMALLOCBITS and use debug flavor
+// only (for assertions). This test ensures that (a) all callers properly mask
+// the namespace bits out before dereferencing a pointer (or else a core dump
+// occurs), and (b) all callers send "raw" (unmasked) addresses to
+// j__udy*Free*() calls.
+//
+// Note: Currently -DDEBUG turns on MALLOCBITS automatically.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+// Set "hidden" global j__uMaxWords to the maximum number of words to allocate
+// to any one array (large enough to have a JPM, otherwise j__uMaxWords is
+// ignored), to trigger a fake malloc error when the number is exceeded. Note,
+// this code is always executed, not #ifdefd, because its virtually free.
+//
+// Note: To keep the MALLOC macro faster and simpler, set j__uMaxWords to
+// MAXINT, not zero, by default.
+
+Word_t j__uMaxWords = ~0UL;
+
+// This macro hides the faking of a malloc failure:
+//
+// Note: To keep this fast, just compare WordsPrev to j__uMaxWords without the
+// complexity of first adding WordsNow, meaning the trigger point is not
+// exactly where you might assume, but it shouldnt matter.
+
+#define MALLOC(MallocFunc,WordsPrev,WordsNow) \
+ (((WordsPrev) > j__uMaxWords) ? 0UL : MallocFunc(WordsNow))
+
+// Clear words starting at address:
+//
+// Note: Only use this for objects that care; in other cases, it doesnt
+// matter if the objects memory is pre-zeroed.
+
+#define ZEROWORDS(Addr,Words) \
+ { \
+ Word_t Words__ = (Words); \
+ PWord_t Addr__ = (PWord_t) (Addr); \
+ while (Words__--) *Addr__++ = 0UL; \
+ }
+
+#ifdef TRACEMI
+
+// TRACING SUPPORT:
+//
+// Note: For TRACEMI, use a format for address printing compatible with other
+// tracing facilities; in particular, %x not %lx, to truncate the "noisy" high
+// part on 64-bit systems.
+//
+// TBD: The trace macros need fixing for alternate address types.
+//
+// Note: TRACEMI2 supports trace analysis no matter the underlying malloc/free
+// engine used.
+
+#include <stdio.h>
+
+static Word_t j__udyMemSequence = 0L; // event sequence number.
+
+#define TRACE_ALLOC5(a,b,c,d,e) (void) printf(a, (b), c, d)
+#define TRACE_FREE5( a,b,c,d,e) (void) printf(a, (b), c, d)
+#define TRACE_ALLOC6(a,b,c,d,e,f) (void) printf(a, (b), c, d, e)
+#define TRACE_FREE6( a,b,c,d,e,f) (void) printf(a, (b), c, d, e)
+
+#else
+
+#ifdef TRACEMI2
+
+#include <stdio.h>
+
+#define b_pw cJU_BYTESPERWORD
+
+#define TRACE_ALLOC5(a,b,c,d,e) \
+ (void) printf("a %lx %lx %lx\n", (b), (d) * b_pw, e)
+#define TRACE_FREE5( a,b,c,d,e) \
+ (void) printf("f %lx %lx %lx\n", (b), (d) * b_pw, e)
+#define TRACE_ALLOC6(a,b,c,d,e,f) \
+ (void) printf("a %lx %lx %lx\n", (b), (e) * b_pw, f)
+#define TRACE_FREE6( a,b,c,d,e,f) \
+ (void) printf("f %lx %lx %lx\n", (b), (e) * b_pw, f)
+
+static Word_t j__udyMemSequence = 0L; // event sequence number.
+
+#else
+
+#define TRACE_ALLOC5(a,b,c,d,e) // null.
+#define TRACE_FREE5( a,b,c,d,e) // null.
+#define TRACE_ALLOC6(a,b,c,d,e,f) // null.
+#define TRACE_FREE6( a,b,c,d,e,f) // null.
+
+#endif // ! TRACEMI2
+#endif // ! TRACEMI
+
+
+// MALLOC NAMESPACE SUPPORT:
+
+#if (defined(DEBUG) && (! defined(MALLOCBITS))) // for now, DEBUG => MALLOCBITS:
+#define MALLOCBITS 1
+#endif
+
+#ifdef MALLOCBITS
+#define MALLOCBITS_VALUE 0x3 // bit pattern to use.
+#define MALLOCBITS_MASK 0x7 // note: matches mask__ in JudyPrivate.h.
+
+#define MALLOCBITS_SET( Type,Addr) \
+ ((Addr) = (Type) ((Word_t) (Addr) | MALLOCBITS_VALUE))
+#define MALLOCBITS_TEST(Type,Addr) \
+ assert((((Word_t) (Addr)) & MALLOCBITS_MASK) == MALLOCBITS_VALUE); \
+ ((Addr) = (Type) ((Word_t) (Addr) & ~MALLOCBITS_VALUE))
+#else
+#define MALLOCBITS_SET( Type,Addr) // null.
+#define MALLOCBITS_TEST(Type,Addr) // null.
+#endif
+
+
+// SAVE ERROR INFORMATION IN A Pjpm:
+//
+// "Small" (invalid) Addr values are used to distinguish overrun and no-mem
+// errors. (TBD, non-zero invalid values are no longer returned from
+// lower-level functions, that is, JU_ERRNO_OVERRUN is no longer detected.)
+
+#define J__UDYSETALLOCERROR(Addr) \
+ { \
+ JU_ERRID(Pjpm) = __LINE__; \
+ if ((Word_t) (Addr) > 0) JU_ERRNO(Pjpm) = JU_ERRNO_OVERRUN; \
+ else JU_ERRNO(Pjpm) = JU_ERRNO_NOMEM; \
+ return(0); \
+ }
+
+
+// ****************************************************************************
+// ALLOCATION FUNCTIONS:
+//
+// To help the compiler catch coding errors, each function returns a specific
+// object type.
+//
+// Note: Only j__udyAllocJPM() and j__udyAllocJLW() return multiple values <=
+// sizeof(Word_t) to indicate the type of memory allocation failure. Other
+// allocation functions convert this failure to a JU_ERRNO.
+
+
+// Note: Unlike other j__udyAlloc*() functions, Pjpms are returned non-raw,
+// that is, without malloc namespace or root pointer type bits:
+
+FUNCTION Pjpm_t j__udyAllocJPM(void)
+{
+ Word_t Words = (sizeof(jpm_t) + cJU_BYTESPERWORD - 1) / cJU_BYTESPERWORD;
+ Pjpm_t Pjpm = (Pjpm_t) MALLOC(JudyMalloc, Words, Words);
+
+ assert((Words * cJU_BYTESPERWORD) == sizeof(jpm_t));
+
+ if ((Word_t) Pjpm > sizeof(Word_t))
+ {
+ ZEROWORDS(Pjpm, Words);
+ Pjpm->jpm_TotalMemWords = Words;
+ }
+
+ TRACE_ALLOC5("0x%x %8lu = j__udyAllocJPM(), Words = %lu\n",
+ Pjpm, j__udyMemSequence++, Words, cJU_LEAFW_MAXPOP1 + 1);
+ // MALLOCBITS_SET(Pjpm_t, Pjpm); // see above.
+ return(Pjpm);
+
+} // j__udyAllocJPM()
+
+
+FUNCTION Pjbl_t j__udyAllocJBL(Pjpm_t Pjpm)
+{
+ Word_t Words = sizeof(jbl_t) / cJU_BYTESPERWORD;
+ Pjbl_t PjblRaw = (Pjbl_t) MALLOC(JudyMallocVirtual,
+ Pjpm->jpm_TotalMemWords, Words);
+
+ assert((Words * cJU_BYTESPERWORD) == sizeof(jbl_t));
+
+ if ((Word_t) PjblRaw > sizeof(Word_t))
+ {
+ ZEROWORDS(P_JBL(PjblRaw), Words);
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjblRaw); }
+
+ TRACE_ALLOC5("0x%x %8lu = j__udyAllocJBL(), Words = %lu\n", PjblRaw,
+ j__udyMemSequence++, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjbl_t, PjblRaw);
+ return(PjblRaw);
+
+} // j__udyAllocJBL()
+
+
+FUNCTION Pjbb_t j__udyAllocJBB(Pjpm_t Pjpm)
+{
+ Word_t Words = sizeof(jbb_t) / cJU_BYTESPERWORD;
+ Pjbb_t PjbbRaw = (Pjbb_t) MALLOC(JudyMallocVirtual,
+ Pjpm->jpm_TotalMemWords, Words);
+
+ assert((Words * cJU_BYTESPERWORD) == sizeof(jbb_t));
+
+ if ((Word_t) PjbbRaw > sizeof(Word_t))
+ {
+ ZEROWORDS(P_JBB(PjbbRaw), Words);
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjbbRaw); }
+
+ TRACE_ALLOC5("0x%x %8lu = j__udyAllocJBB(), Words = %lu\n", PjbbRaw,
+ j__udyMemSequence++, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjbb_t, PjbbRaw);
+ return(PjbbRaw);
+
+} // j__udyAllocJBB()
+
+
+FUNCTION Pjp_t j__udyAllocJBBJP(Word_t NumJPs, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_BRANCHJP_NUMJPSTOWORDS(NumJPs);
+ Pjp_t PjpRaw;
+
+ PjpRaw = (Pjp_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ if ((Word_t) PjpRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjpRaw); }
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyAllocJBBJP(%lu), Words = %lu\n", PjpRaw,
+ j__udyMemSequence++, NumJPs, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjp_t, PjpRaw);
+ return(PjpRaw);
+
+} // j__udyAllocJBBJP()
+
+
+FUNCTION Pjbu_t j__udyAllocJBU(Pjpm_t Pjpm)
+{
+ Word_t Words = sizeof(jbu_t) / cJU_BYTESPERWORD;
+ Pjbu_t PjbuRaw = (Pjbu_t) MALLOC(JudyMallocVirtual,
+ Pjpm->jpm_TotalMemWords, Words);
+
+ assert((Words * cJU_BYTESPERWORD) == sizeof(jbu_t));
+
+ if ((Word_t) PjbuRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjbuRaw); }
+
+ TRACE_ALLOC5("0x%x %8lu = j__udyAllocJBU(), Words = %lu\n", PjbuRaw,
+ j__udyMemSequence++, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjbu_t, PjbuRaw);
+ return(PjbuRaw);
+
+} // j__udyAllocJBU()
+
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+FUNCTION Pjll_t j__udyAllocJLL1(Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF1POPTOWORDS(Pop1);
+ Pjll_t PjllRaw;
+
+ PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ if ((Word_t) PjllRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjllRaw); }
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL1(%lu), Words = %lu\n", PjllRaw,
+ j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjll_t, PjllRaw);
+ return(PjllRaw);
+
+} // j__udyAllocJLL1()
+
+#endif // (JUDYL || (! JU_64BIT))
+
+
+FUNCTION Pjll_t j__udyAllocJLL2(Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF2POPTOWORDS(Pop1);
+ Pjll_t PjllRaw;
+
+ PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ if ((Word_t) PjllRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjllRaw); }
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL2(%lu), Words = %lu\n", PjllRaw,
+ j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjll_t, PjllRaw);
+ return(PjllRaw);
+
+} // j__udyAllocJLL2()
+
+
+FUNCTION Pjll_t j__udyAllocJLL3(Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF3POPTOWORDS(Pop1);
+ Pjll_t PjllRaw;
+
+ PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ if ((Word_t) PjllRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjllRaw); }
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL3(%lu), Words = %lu\n", PjllRaw,
+ j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjll_t, PjllRaw);
+ return(PjllRaw);
+
+} // j__udyAllocJLL3()
+
+
+#ifdef JU_64BIT
+
+FUNCTION Pjll_t j__udyAllocJLL4(Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF4POPTOWORDS(Pop1);
+ Pjll_t PjllRaw;
+
+ PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ if ((Word_t) PjllRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjllRaw); }
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL4(%lu), Words = %lu\n", PjllRaw,
+ j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjll_t, PjllRaw);
+ return(PjllRaw);
+
+} // j__udyAllocJLL4()
+
+
+FUNCTION Pjll_t j__udyAllocJLL5(Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF5POPTOWORDS(Pop1);
+ Pjll_t PjllRaw;
+
+ PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ if ((Word_t) PjllRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjllRaw); }
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL5(%lu), Words = %lu\n", PjllRaw,
+ j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjll_t, PjllRaw);
+ return(PjllRaw);
+
+} // j__udyAllocJLL5()
+
+
+FUNCTION Pjll_t j__udyAllocJLL6(Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF6POPTOWORDS(Pop1);
+ Pjll_t PjllRaw;
+
+ PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ if ((Word_t) PjllRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjllRaw); }
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL6(%lu), Words = %lu\n", PjllRaw,
+ j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjll_t, PjllRaw);
+ return(PjllRaw);
+
+} // j__udyAllocJLL6()
+
+
+FUNCTION Pjll_t j__udyAllocJLL7(Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF7POPTOWORDS(Pop1);
+ Pjll_t PjllRaw;
+
+ PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ if ((Word_t) PjllRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjllRaw); }
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL7(%lu), Words = %lu\n", PjllRaw,
+ j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjll_t, PjllRaw);
+ return(PjllRaw);
+
+} // j__udyAllocJLL7()
+
+#endif // JU_64BIT
+
+
+// Note: Root-level leaf addresses are always whole words (Pjlw_t), and unlike
+// other j__udyAlloc*() functions, they are returned non-raw, that is, without
+// malloc namespace or root pointer type bits (the latter are added later by
+// the caller):
+
+FUNCTION Pjlw_t j__udyAllocJLW(Word_t Pop1)
+{
+ Word_t Words = JU_LEAFWPOPTOWORDS(Pop1);
+ Pjlw_t Pjlw = (Pjlw_t) MALLOC(JudyMalloc, Words, Words);
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLW(%lu), Words = %lu\n", Pjlw,
+ j__udyMemSequence++, Pop1, Words, Pop1);
+ // MALLOCBITS_SET(Pjlw_t, Pjlw); // see above.
+ return(Pjlw);
+
+} // j__udyAllocJLW()
+
+
+FUNCTION Pjlb_t j__udyAllocJLB1(Pjpm_t Pjpm)
+{
+ Word_t Words = sizeof(jlb_t) / cJU_BYTESPERWORD;
+ Pjlb_t PjlbRaw;
+
+ PjlbRaw = (Pjlb_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ assert((Words * cJU_BYTESPERWORD) == sizeof(jlb_t));
+
+ if ((Word_t) PjlbRaw > sizeof(Word_t))
+ {
+ ZEROWORDS(P_JLB(PjlbRaw), Words);
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjlbRaw); }
+
+ TRACE_ALLOC5("0x%x %8lu = j__udyAllocJLB1(), Words = %lu\n", PjlbRaw,
+ j__udyMemSequence++, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjlb_t, PjlbRaw);
+ return(PjlbRaw);
+
+} // j__udyAllocJLB1()
+
+
+#ifdef JUDYL
+
+FUNCTION Pjv_t j__udyLAllocJV(Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JL_LEAFVPOPTOWORDS(Pop1);
+ Pjv_t PjvRaw;
+
+ PjvRaw = (Pjv_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+ if ((Word_t) PjvRaw > sizeof(Word_t))
+ {
+ Pjpm->jpm_TotalMemWords += Words;
+ }
+ else { J__UDYSETALLOCERROR(PjvRaw); }
+
+ TRACE_ALLOC6("0x%x %8lu = j__udyLAllocJV(%lu), Words = %lu\n", PjvRaw,
+ j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+ MALLOCBITS_SET(Pjv_t, PjvRaw);
+ return(PjvRaw);
+
+} // j__udyLAllocJV()
+
+#endif // JUDYL
+
+
+// ****************************************************************************
+// FREE FUNCTIONS:
+//
+// To help the compiler catch coding errors, each function takes a specific
+// object type to free.
+
+
+// Note: j__udyFreeJPM() receives a root pointer with NO root pointer type
+// bits present, that is, they must be stripped by the caller using P_JPM():
+
+FUNCTION void j__udyFreeJPM(Pjpm_t PjpmFree, Pjpm_t PjpmStats)
+{
+ Word_t Words = (sizeof(jpm_t) + cJU_BYTESPERWORD - 1) / cJU_BYTESPERWORD;
+
+ // MALLOCBITS_TEST(Pjpm_t, PjpmFree); // see above.
+ JudyFree((Pvoid_t) PjpmFree, Words);
+
+ if (PjpmStats != (Pjpm_t) NULL) PjpmStats->jpm_TotalMemWords -= Words;
+
+// Note: Log PjpmFree->jpm_Pop0, similar to other j__udyFree*() functions, not
+// an assumed value of cJU_LEAFW_MAXPOP1, for when the caller is
+// Judy*FreeArray(), jpm_Pop0 is set to 0, and the population after the free
+// really will be 0, not cJU_LEAFW_MAXPOP1.
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJPM(%lu), Words = %lu\n", PjpmFree,
+ j__udyMemSequence++, Words, Words, PjpmFree->jpm_Pop0);
+
+
+} // j__udyFreeJPM()
+
+
+FUNCTION void j__udyFreeJBL(Pjbl_t Pjbl, Pjpm_t Pjpm)
+{
+ Word_t Words = sizeof(jbl_t) / cJU_BYTESPERWORD;
+
+ MALLOCBITS_TEST(Pjbl_t, Pjbl);
+ JudyFreeVirtual((Pvoid_t) Pjbl, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE5("0x%x %8lu = j__udyFreeJBL(), Words = %lu\n", Pjbl,
+ j__udyMemSequence++, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJBL()
+
+
+FUNCTION void j__udyFreeJBB(Pjbb_t Pjbb, Pjpm_t Pjpm)
+{
+ Word_t Words = sizeof(jbb_t) / cJU_BYTESPERWORD;
+
+ MALLOCBITS_TEST(Pjbb_t, Pjbb);
+ JudyFreeVirtual((Pvoid_t) Pjbb, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE5("0x%x %8lu = j__udyFreeJBB(), Words = %lu\n", Pjbb,
+ j__udyMemSequence++, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJBB()
+
+
+FUNCTION void j__udyFreeJBBJP(Pjp_t Pjp, Word_t NumJPs, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_BRANCHJP_NUMJPSTOWORDS(NumJPs);
+
+ MALLOCBITS_TEST(Pjp_t, Pjp);
+ JudyFree((Pvoid_t) Pjp, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJBBJP(%lu), Words = %lu\n", Pjp,
+ j__udyMemSequence++, NumJPs, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJBBJP()
+
+
+FUNCTION void j__udyFreeJBU(Pjbu_t Pjbu, Pjpm_t Pjpm)
+{
+ Word_t Words = sizeof(jbu_t) / cJU_BYTESPERWORD;
+
+ MALLOCBITS_TEST(Pjbu_t, Pjbu);
+ JudyFreeVirtual((Pvoid_t) Pjbu, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE5("0x%x %8lu = j__udyFreeJBU(), Words = %lu\n", Pjbu,
+ j__udyMemSequence++, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJBU()
+
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+FUNCTION void j__udyFreeJLL1(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF1POPTOWORDS(Pop1);
+
+ MALLOCBITS_TEST(Pjll_t, Pjll);
+ JudyFree((Pvoid_t) Pjll, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJLL1(%lu), Words = %lu\n", Pjll,
+ j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL1()
+
+#endif // (JUDYL || (! JU_64BIT))
+
+
+FUNCTION void j__udyFreeJLL2(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF2POPTOWORDS(Pop1);
+
+ MALLOCBITS_TEST(Pjll_t, Pjll);
+ JudyFree((Pvoid_t) Pjll, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJLL2(%lu), Words = %lu\n", Pjll,
+ j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL2()
+
+
+FUNCTION void j__udyFreeJLL3(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF3POPTOWORDS(Pop1);
+
+ MALLOCBITS_TEST(Pjll_t, Pjll);
+ JudyFree((Pvoid_t) Pjll, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJLL3(%lu), Words = %lu\n", Pjll,
+ j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL3()
+
+
+#ifdef JU_64BIT
+
+FUNCTION void j__udyFreeJLL4(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF4POPTOWORDS(Pop1);
+
+ MALLOCBITS_TEST(Pjll_t, Pjll);
+ JudyFree((Pvoid_t) Pjll, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJLL4(%lu), Words = %lu\n", Pjll,
+ j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL4()
+
+
+FUNCTION void j__udyFreeJLL5(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF5POPTOWORDS(Pop1);
+
+ MALLOCBITS_TEST(Pjll_t, Pjll);
+ JudyFree((Pvoid_t) Pjll, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJLL5(%lu), Words = %lu\n", Pjll,
+ j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL5()
+
+
+FUNCTION void j__udyFreeJLL6(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF6POPTOWORDS(Pop1);
+
+ MALLOCBITS_TEST(Pjll_t, Pjll);
+ JudyFree((Pvoid_t) Pjll, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJLL6(%lu), Words = %lu\n", Pjll,
+ j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL6()
+
+
+FUNCTION void j__udyFreeJLL7(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAF7POPTOWORDS(Pop1);
+
+ MALLOCBITS_TEST(Pjll_t, Pjll);
+ JudyFree((Pvoid_t) Pjll, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJLL7(%lu), Words = %lu\n", Pjll,
+ j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL7()
+
+#endif // JU_64BIT
+
+
+// Note: j__udyFreeJLW() receives a root pointer with NO root pointer type
+// bits present, that is, they are stripped by P_JLW():
+
+FUNCTION void j__udyFreeJLW(Pjlw_t Pjlw, Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JU_LEAFWPOPTOWORDS(Pop1);
+
+ // MALLOCBITS_TEST(Pjlw_t, Pjlw); // see above.
+ JudyFree((Pvoid_t) Pjlw, Words);
+
+ if (Pjpm) Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyFreeJLW(%lu), Words = %lu\n", Pjlw,
+ j__udyMemSequence++, Pop1, Words, Pop1 - 1);
+
+
+} // j__udyFreeJLW()
+
+
+FUNCTION void j__udyFreeJLB1(Pjlb_t Pjlb, Pjpm_t Pjpm)
+{
+ Word_t Words = sizeof(jlb_t) / cJU_BYTESPERWORD;
+
+ MALLOCBITS_TEST(Pjlb_t, Pjlb);
+ JudyFree((Pvoid_t) Pjlb, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE5("0x%x %8lu = j__udyFreeJLB1(), Words = %lu\n", Pjlb,
+ j__udyMemSequence++, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLB1()
+
+
+#ifdef JUDYL
+
+FUNCTION void j__udyLFreeJV(Pjv_t Pjv, Word_t Pop1, Pjpm_t Pjpm)
+{
+ Word_t Words = JL_LEAFVPOPTOWORDS(Pop1);
+
+ MALLOCBITS_TEST(Pjv_t, Pjv);
+ JudyFree((Pvoid_t) Pjv, Words);
+
+ Pjpm->jpm_TotalMemWords -= Words;
+
+ TRACE_FREE6("0x%x %8lu = j__udyLFreeJV(%lu), Words = %lu\n", Pjv,
+ j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyLFreeJV()
+
+#endif // JUDYL
diff --git a/libs/klib/judy/JudyMemActive.c b/libs/klib/judy/JudyMemActive.c
new file mode 100644
index 0000000..d95a134
--- /dev/null
+++ b/libs/klib/judy/JudyMemActive.c
@@ -0,0 +1,257 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Return number of bytes of memory used to support a Judy1/L array.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+FUNCTION static Word_t j__udyGetMemActive(Pjp_t);
+
+
+// ****************************************************************************
+// J U D Y 1 M E M A C T I V E
+// J U D Y L M E M A C T I V E
+
+#ifdef JUDY1
+FUNCTION Word_t Judy1MemActive
+#else
+FUNCTION Word_t JudyLMemActive
+#endif
+ (
+ Pcvoid_t PArray // from which to retrieve.
+ )
+{
+ if (PArray == (Pcvoid_t)NULL) return(0);
+
+ if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ Pjlw_t Pjlw = P_JLW(PArray); // first word of leaf.
+ Word_t Words = Pjlw[0] + 1; // population.
+#ifdef JUDY1
+ return((Words + 1) * sizeof(Word_t));
+#else
+ return(((Words * 2) + 1) * sizeof(Word_t));
+#endif
+ }
+ else
+ {
+ Pjpm_t Pjpm = P_JPM(PArray);
+ return(j__udyGetMemActive(&Pjpm->jpm_JP) + sizeof(jpm_t));
+ }
+
+} // JudyMemActive()
+
+
+// ****************************************************************************
+// __ J U D Y G E T M E M A C T I V E
+
+FUNCTION static Word_t j__udyGetMemActive(
+ Pjp_t Pjp) // top of subtree.
+{
+ Word_t offset; // in a branch.
+ Word_t Bytes = 0; // actual bytes used at this level.
+ Word_t IdxSz; // bytes per index in leaves
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+ case cJU_JPBRANCH_L2:
+ case cJU_JPBRANCH_L3:
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4:
+ case cJU_JPBRANCH_L5:
+ case cJU_JPBRANCH_L6:
+ case cJU_JPBRANCH_L7:
+#endif
+ case cJU_JPBRANCH_L:
+ {
+ Pjbl_t Pjbl = P_JBL(Pjp->jp_Addr);
+
+ for (offset = 0; offset < (Pjbl->jbl_NumJPs); ++offset)
+ Bytes += j__udyGetMemActive((Pjbl->jbl_jp) + offset);
+
+ return(Bytes + sizeof(jbl_t));
+ }
+
+ case cJU_JPBRANCH_B2:
+ case cJU_JPBRANCH_B3:
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4:
+ case cJU_JPBRANCH_B5:
+ case cJU_JPBRANCH_B6:
+ case cJU_JPBRANCH_B7:
+#endif
+ case cJU_JPBRANCH_B:
+ {
+ Word_t subexp;
+ Word_t jpcount;
+ Pjbb_t Pjbb = P_JBB(Pjp->jp_Addr);
+
+ for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+ {
+ jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+ Bytes += jpcount * sizeof(jp_t);
+
+ for (offset = 0; offset < jpcount; ++offset)
+ {
+ Bytes += j__udyGetMemActive(P_JP(JU_JBB_PJP(Pjbb, subexp))
+ + offset);
+ }
+ }
+
+ return(Bytes + sizeof(jbb_t));
+ }
+
+ case cJU_JPBRANCH_U2:
+ case cJU_JPBRANCH_U3:
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U4:
+ case cJU_JPBRANCH_U5:
+ case cJU_JPBRANCH_U6:
+ case cJU_JPBRANCH_U7:
+#endif
+ case cJU_JPBRANCH_U:
+ {
+ Pjbu_t Pjbu = P_JBU(Pjp->jp_Addr);
+
+ for (offset = 0; offset < cJU_BRANCHUNUMJPS; ++offset)
+ {
+ if (((Pjbu->jbu_jp[offset].jp_Type) >= cJU_JPNULL1)
+ && ((Pjbu->jbu_jp[offset].jp_Type) <= cJU_JPNULLMAX))
+ {
+ continue; // skip null JP to save time.
+ }
+
+ Bytes += j__udyGetMemActive(Pjbu->jbu_jp + offset);
+ }
+
+ return(Bytes + sizeof(jbu_t));
+ }
+
+
+// -- Cases below here terminate and do not recurse. --
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1: IdxSz = 1; goto LeafWords;
+#endif
+ case cJU_JPLEAF2: IdxSz = 2; goto LeafWords;
+ case cJU_JPLEAF3: IdxSz = 3; goto LeafWords;
+#ifdef JU_64BIT
+ case cJU_JPLEAF4: IdxSz = 4; goto LeafWords;
+ case cJU_JPLEAF5: IdxSz = 5; goto LeafWords;
+ case cJU_JPLEAF6: IdxSz = 6; goto LeafWords;
+ case cJU_JPLEAF7: IdxSz = 7; goto LeafWords;
+#endif
+LeafWords:
+
+#ifdef JUDY1
+ return(IdxSz * (JU_JPLEAF_POP0(Pjp) + 1));
+#else
+ return((IdxSz + sizeof(Word_t))
+ * (JU_JPLEAF_POP0(Pjp) + 1));
+#endif
+ case cJU_JPLEAF_B1:
+ {
+#ifdef JUDY1
+ return(sizeof(jlb_t));
+#else
+ Bytes = (JU_JPLEAF_POP0(Pjp) + 1) * sizeof(Word_t);
+
+ return(Bytes + sizeof(jlb_t));
+#endif
+ }
+
+ JUDY1CODE(case cJ1_JPFULLPOPU1: return(0);)
+
+#ifdef JUDY1
+#define J__Mpy 0
+#else
+#define J__Mpy sizeof(Word_t)
+#endif
+
+ case cJU_JPIMMED_1_01: return(0);
+ case cJU_JPIMMED_2_01: return(0);
+ case cJU_JPIMMED_3_01: return(0);
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01: return(0);
+ case cJU_JPIMMED_5_01: return(0);
+ case cJU_JPIMMED_6_01: return(0);
+ case cJU_JPIMMED_7_01: return(0);
+#endif
+
+ case cJU_JPIMMED_1_02: return(J__Mpy * 2);
+ case cJU_JPIMMED_1_03: return(J__Mpy * 3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04: return(J__Mpy * 4);
+ case cJU_JPIMMED_1_05: return(J__Mpy * 5);
+ case cJU_JPIMMED_1_06: return(J__Mpy * 6);
+ case cJU_JPIMMED_1_07: return(J__Mpy * 7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08: return(0);
+ case cJ1_JPIMMED_1_09: return(0);
+ case cJ1_JPIMMED_1_10: return(0);
+ case cJ1_JPIMMED_1_11: return(0);
+ case cJ1_JPIMMED_1_12: return(0);
+ case cJ1_JPIMMED_1_13: return(0);
+ case cJ1_JPIMMED_1_14: return(0);
+ case cJ1_JPIMMED_1_15: return(0);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02: return(J__Mpy * 2);
+ case cJU_JPIMMED_2_03: return(J__Mpy * 3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04: return(0);
+ case cJ1_JPIMMED_2_05: return(0);
+ case cJ1_JPIMMED_2_06: return(0);
+ case cJ1_JPIMMED_2_07: return(0);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02: return(J__Mpy * 2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03: return(0);
+ case cJ1_JPIMMED_3_04: return(0);
+ case cJ1_JPIMMED_3_05: return(0);
+
+ case cJ1_JPIMMED_4_02: return(0);
+ case cJ1_JPIMMED_4_03: return(0);
+ case cJ1_JPIMMED_5_02: return(0);
+ case cJ1_JPIMMED_5_03: return(0);
+ case cJ1_JPIMMED_6_02: return(0);
+ case cJ1_JPIMMED_7_02: return(0);
+#endif
+
+ } // switch (JU_JPTYPE(Pjp))
+
+ return(0); // to make some compilers happy.
+
+} // j__udyGetMemActive()
diff --git a/libs/klib/judy/JudyMemUsed.c b/libs/klib/judy/JudyMemUsed.c
new file mode 100644
index 0000000..e25f65b
--- /dev/null
+++ b/libs/klib/judy/JudyMemUsed.c
@@ -0,0 +1,59 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Return number of bytes of memory used to support a Judy1/L array.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+#ifdef JUDY1
+FUNCTION Word_t Judy1MemUsed
+#else // JUDYL
+FUNCTION Word_t JudyLMemUsed
+#endif
+ (
+ Pcvoid_t PArray // from which to retrieve.
+ )
+{
+ Word_t Words = 0;
+
+ if (PArray == (Pcvoid_t) NULL) return(0);
+
+ if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ Pjlw_t Pjlw = P_JLW(PArray); // first word of leaf.
+ Words = JU_LEAFWPOPTOWORDS(Pjlw[0] + 1); // based on pop1.
+ }
+ else
+ {
+ Pjpm_t Pjpm = P_JPM(PArray);
+ Words = Pjpm->jpm_TotalMemWords;
+ }
+
+ return(Words * sizeof(Word_t)); // convert to bytes.
+
+} // Judy1MemUsed() / JudyLMemUsed()
diff --git a/libs/klib/judy/JudyNext.c b/libs/klib/judy/JudyNext.c
new file mode 100644
index 0000000..4af06e2
--- /dev/null
+++ b/libs/klib/judy/JudyNext.c
@@ -0,0 +1,2 @@
+#define JUDYNEXT 1
+#include "JudyPrevNext.c"
diff --git a/libs/klib/judy/JudyNextEmpty.c b/libs/klib/judy/JudyNextEmpty.c
new file mode 100644
index 0000000..73b0926
--- /dev/null
+++ b/libs/klib/judy/JudyNextEmpty.c
@@ -0,0 +1,2 @@
+#define JUDYNEXT 1
+#include "JudyPrevNextEmpty.c"
diff --git a/libs/klib/judy/JudyPrev.c b/libs/klib/judy/JudyPrev.c
new file mode 100644
index 0000000..3d9f484
--- /dev/null
+++ b/libs/klib/judy/JudyPrev.c
@@ -0,0 +1,2 @@
+#define JUDYPREV 1
+#include "JudyPrevNext.c"
diff --git a/libs/klib/judy/JudyPrevEmpty.c b/libs/klib/judy/JudyPrevEmpty.c
new file mode 100644
index 0000000..f9a182b
--- /dev/null
+++ b/libs/klib/judy/JudyPrevEmpty.c
@@ -0,0 +1,2 @@
+#define JUDYPREV 1
+#include "JudyPrevNextEmpty.c"
diff --git a/libs/klib/judy/JudyPrevNext.c b/libs/klib/judy/JudyPrevNext.c
new file mode 100644
index 0000000..1131eef
--- /dev/null
+++ b/libs/klib/judy/JudyPrevNext.c
@@ -0,0 +1,1888 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy*Prev() and Judy*Next() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DJUDYNEXT for the Judy*Next() function; otherwise defaults to
+// Judy*Prev().
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifndef JUDYNEXT
+#ifndef JUDYPREV
+#define JUDYPREV 1 // neither set => use default.
+#endif
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+
+// ****************************************************************************
+// J U D Y 1 P R E V
+// J U D Y 1 N E X T
+// J U D Y L P R E V
+// J U D Y L N E X T
+//
+// See the manual entry for the API.
+//
+// OVERVIEW OF Judy*Prev():
+//
+// Use a reentrant switch statement (state machine, SM1 = "get") to decode the
+// callers *PIndex-1, starting with the (PArray), through branches, if
+// any, down to an immediate or a leaf. Look for *PIndex-1 in that leaf, and
+// if found, return it.
+//
+// A dead end is either a branch that does not contain a JP for the appropriate
+// digit in *PIndex-1, or a leaf that does not contain the undecoded digits of
+// *PIndex-1. Upon reaching a dead end, backtrack through the leaf/branches
+// that were just traversed, using a list (history) of parent JPs that is built
+// while going forward in SM1Get. Start with the current leaf or branch. In a
+// backtracked leaf, look for an Index less than *PIndex-1. In each
+// backtracked branch, look "sideways" for the next JP, if any, lower than the
+// one for the digit (from *PIndex-1) that was previously decoded. While
+// backtracking, if a leaf has no previous Index or a branch has no lower JP,
+// go to its parent branch in turn. Upon reaching the JRP, return failure, "no
+// previous Index". The backtrack process is sufficiently different from
+// SM1Get to merit its own separate reentrant switch statement (SM2 =
+// "backtrack").
+//
+// While backtracking, upon finding a lower JP in a branch, there is certain to
+// be a "prev" Index under that JP (unless the Judy array is corrupt).
+// Traverse forward again, this time taking the last (highest, right-most) JP
+// in each branch, and the last (highest) Index upon reaching an immediate or a
+// leaf. This traversal is sufficiently different from SM1Get and SM2Backtrack
+// to merit its own separate reentrant switch statement (SM3 = "findlimit").
+//
+// "Decode" bytes in JPs complicate this process a little. In SM1Get, when a
+// JP is a narrow pointer, that is, when states are skipped (so the skipped
+// digits are stored in jp_DcdPopO), compare the relevant digits to the same
+// digits in *PIndex-1. If they are EQUAL, proceed in SM1Get as before. If
+// jp_DcdPopOs digits are GREATER, treat the JP as a dead end and proceed in
+// SM2Backtrack. If jp_DcdPopOs digits are LESS, treat the JP as if it had
+// just been found during a backtrack and proceed directly in SM3Findlimit.
+//
+// Note that Decode bytes can be ignored in SM3Findlimit; they dont matter.
+// Also note that in practice the Decode bytes are routinely compared with
+// *PIndex-1 because thats simpler and no slower than first testing for
+// narrowness.
+//
+// Decode bytes also make it unnecessary to construct the Index to return (the
+// revised *PIndex) during the search. This step is deferred until finding an
+// Index during backtrack or findlimit, before returning it. The first digit
+// of *PIndex is derived (saved) based on which JP is used in a JRP branch.
+// The remaining digits are obtained from the jp_DcdPopO field in the JP (if
+// any) above the immediate or leaf containing the found (prev) Index, plus the
+// remaining digit(s) in the immediate or leaf itself. In the case of a LEAFW,
+// the Index to return is found directly in the leaf.
+//
+// Note: Theoretically, as described above, upon reaching a dead end, SM1Get
+// passes control to SM2Backtrack to look sideways, even in a leaf. Actually
+// its a little more efficient for the SM1Get leaf cases to shortcut this and
+// take care of the sideways searches themselves. Hence the history list only
+// contains branch JPs, and SM2Backtrack only handles branches. In fact, even
+// the branch handling cases in SM1Get do some shortcutting (sideways
+// searching) to avoid pushing history and calling SM2Backtrack unnecessarily.
+//
+// Upon reaching an Index to return after backtracking, *PIndex must be
+// modified to the found Index. In principle this could be done by building
+// the Index from a saved rootdigit (in the top branch) plus the Dcd bytes from
+// the parent JP plus the appropriate Index bytes from the leaf. However,
+// Immediates are difficult because their parent JPs lack one (last) digit. So
+// instead just build the *PIndex to return "top down" while backtracking and
+// findlimiting.
+//
+// This function is written iteratively for speed, rather than recursively.
+//
+// CAVEATS:
+//
+// Why use a backtrack list (history stack), since it has finite size? The
+// size is small for Judy on both 32-bit and 64-bit systems, and a list (really
+// just an array) is fast to maintain and use. Other alternatives include
+// doing a lookahead (lookaside) in each branch while traversing forward
+// (decoding), and restarting from the top upon a dead end.
+//
+// A lookahead means noting the last branch traversed which contained a
+// non-null JP lower than the one specified by a digit in *PIndex-1, and
+// returning to that point for SM3Findlimit. This seems like a good idea, and
+// should be pretty cheap for linear and bitmap branches, but it could result
+// in up to 31 unnecessary additional cache line fills (in extreme cases) for
+// every uncompressed branch traversed. We have considered means of attaching
+// to or hiding within an uncompressed branch (in null JPs) a "cache line map"
+// or other structure, such as an offset to the next non-null JP, that would
+// speed this up, but it seems unnecessary merely to avoid having a
+// finite-length list (array). (If JudySL is ever made "native", the finite
+// list length will be an issue.)
+//
+// Restarting at the top of the Judy array after a dead end requires a careful
+// modification of *PIndex-1 to decrement the digit for the parent branch and
+// set the remaining lower digits to all 1s. This must be repeated each time a
+// parent branch contains another dead end, so even though it should all happen
+// in cache, the CPU time can be excessive. (For JudySL or an equivalent
+// "infinitely deep" Judy array, consider a hybrid of a large, finite,
+// "circular" list and a restart-at-top when the list is backtracked to
+// exhaustion.)
+//
+// Why search for *PIndex-1 instead of *PIndex during SM1Get? In rare
+// instances this prevents an unnecessary decode down the wrong path followed
+// by a backtrack; its pretty cheap to set up initially; and it means the
+// SM1Get machine can simply return if/when it finds that Index.
+//
+// TBD: Wed like to enhance this function to make successive searches faster.
+// This would require saving some previous state, including the previous Index
+// returned, and in which leaf it was found. If the next call is for the same
+// Index and the array has not been modified, start at the same leaf. This
+// should be much easier to implement since this is iterative rather than
+// recursive code.
+//
+// VARIATIONS FOR Judy*Next():
+//
+// The Judy*Next() code is nearly a perfect mirror of the Judy*Prev() code.
+// See the Judy*Prev() overview comments, and mentally switch the following:
+//
+// - "*PIndex-1" => "*PIndex+1"
+// - "less than" => "greater than"
+// - "lower" => "higher"
+// - "lowest" => "highest"
+// - "next-left" => "next-right"
+// - "right-most" => "left-most"
+//
+// Note: SM3Findlimit could be called SM3Findmax/SM3Findmin, but a common name
+// for both Prev and Next means many fewer ifdefs in this code.
+//
+// TBD: Currently this code traverses a JP whether its expanse is partially or
+// completely full (populated). For Judy1 (only), since there is no value area
+// needed, consider shortcutting to a "success" return upon encountering a full
+// JP in SM1Get (or even SM3Findlimit?) A full JP looks like this:
+//
+// (((JU_JPDCDPOP0(Pjp) ^ cJU_ALLONES) & cJU_POP0MASK(cLevel)) == 0)
+
+#ifdef JUDY1
+#ifdef JUDYPREV
+FUNCTION int Judy1Prev
+#else
+FUNCTION int Judy1Next
+#endif
+#else
+#ifdef JUDYPREV
+FUNCTION PPvoid_t JudyLPrev
+#else
+FUNCTION PPvoid_t JudyLNext
+#endif
+#endif
+ (
+ Pcvoid_t PArray, // Judy array to search.
+ Word_t * PIndex, // starting point and result.
+ PJError_t PJError // optional, for returning error info.
+ )
+{
+ Pjp_t Pjp, Pjp2; // current JPs.
+ Pjbl_t Pjbl; // Pjp->jp_Addr masked and cast to types:
+ Pjbb_t Pjbb;
+ Pjbu_t Pjbu;
+
+// Note: The following initialization is not strictly required but it makes
+// gcc -Wall happy because there is an "impossible" path from Immed handling to
+// SM1LeafLImm code that looks like Pjll might be used before set:
+
+ Pjll_t Pjll = (Pjll_t) NULL;
+ Word_t state; // current state in SM.
+ Word_t digit; // next digit to decode from Index.
+
+// Note: The following initialization is not strictly required but it makes
+// gcc -Wall happy because there is an "impossible" path from Immed handling to
+// SM1LeafLImm code (for JudyL & JudyPrev only) that looks like pop1 might be
+// used before set:
+
+#if (defined(JUDYL) && defined(JUDYPREV))
+ Word_t pop1 = 0; // in a leaf.
+#else
+ Word_t pop1; // in a leaf.
+#endif
+ int offset; // linear branch/leaf, from j__udySearchLeaf*().
+ int subexp; // subexpanse in a bitmap branch.
+ Word_t bitposmask; // bit in bitmap for Index.
+
+// History for SM2Backtrack:
+//
+// For a given histnum, APjphist[histnum] is a parent JP that points to a
+// branch, and Aoffhist[histnum] is the offset of the NEXT JP in the branch to
+// which the parent JP points. The meaning of Aoffhist[histnum] depends on the
+// type of branch to which the parent JP points:
+//
+// Linear: Offset of the next JP in the JP list.
+//
+// Bitmap: Which subexpanse, plus the offset of the next JP in the
+// subexpanses JP list (to avoid bit-counting again), plus for Judy*Next(),
+// hidden one byte to the left, which digit, because Judy*Next() also needs
+// this.
+//
+// Uncompressed: Digit, which is actually the offset of the JP in the branch.
+//
+// Note: Only branch JPs are stored in APjphist[] because, as explained
+// earlier, SM1Get shortcuts sideways searches in leaves (and even in branches
+// in some cases), so SM2Backtrack only handles branches.
+
+#define HISTNUMMAX cJU_ROOTSTATE // maximum branches traversable.
+ Pjp_t APjphist[HISTNUMMAX]; // list of branch JPs traversed.
+ int Aoffhist[HISTNUMMAX]; // list of next JP offsets; see above.
+ int histnum = 0; // number of JPs now in list.
+
+
+// ----------------------------------------------------------------------------
+// M A C R O S
+//
+// These are intended to make the code a bit more readable and less redundant.
+
+
+// "PUSH" AND "POP" Pjp AND offset ON HISTORY STACKS:
+//
+// Note: Ensure a corrupt Judy array does not overflow *hist[]. Meanwhile,
+// underflowing *hist[] simply means theres no more room to backtrack =>
+// "no previous/next Index".
+
+#define HISTPUSH(Pjp,Offset) \
+ APjphist[histnum] = (Pjp); \
+ Aoffhist[histnum] = (Offset); \
+ \
+ if (++histnum >= HISTNUMMAX) \
+ { \
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT) \
+ JUDY1CODE(return(JERRI );) \
+ JUDYLCODE(return(PPJERR);) \
+ }
+
+#define HISTPOP(Pjp,Offset) \
+ if ((histnum--) < 1) JU_RET_NOTFOUND; \
+ (Pjp) = APjphist[histnum]; \
+ (Offset) = Aoffhist[histnum]
+
+// How to pack/unpack Aoffhist[] values for bitmap branches:
+
+#ifdef JUDYPREV
+
+#define HISTPUSHBOFF(Subexp,Offset,Digit) \
+ (((Subexp) * cJU_BITSPERSUBEXPB) | (Offset))
+
+#define HISTPOPBOFF(Subexp,Offset,Digit) \
+ (Subexp) = (Offset) / cJU_BITSPERSUBEXPB; \
+ (Offset) %= cJU_BITSPERSUBEXPB
+#else
+
+#define HISTPUSHBOFF(Subexp,Offset,Digit) \
+ (((Digit) << cJU_BITSPERBYTE) \
+ | ((Subexp) * cJU_BITSPERSUBEXPB) | (Offset))
+
+#define HISTPOPBOFF(Subexp,Offset,Digit) \
+ (Digit) = (Offset) >> cJU_BITSPERBYTE; \
+ (Subexp) = ((Offset) & JU_LEASTBYTESMASK(1)) / cJU_BITSPERSUBEXPB; \
+ (Offset) %= cJU_BITSPERSUBEXPB
+#endif
+
+
+// CHECK FOR NULL JP:
+
+#define JPNULL(Type) (((Type) >= cJU_JPNULL1) && ((Type) <= cJU_JPNULLMAX))
+
+
+// SEARCH A BITMAP:
+//
+// This is a weak analog of j__udySearchLeaf*() for bitmaps. Return the actual
+// or next-left position, base 0, of Digit in the single uint32_t bitmap, also
+// given a Bitposmask for Digit.
+//
+// Unlike j__udySearchLeaf*(), the offset is not returned bit-complemented if
+// Digits bit is unset, because the caller can check the bitmap themselves to
+// determine that. Also, if Digits bit is unset, the returned offset is to
+// the next-left JP (including -1), not to the "ideal" position for the Index =
+// next-right JP.
+//
+// Shortcut and skip calling j__udyCountBits*() if the bitmap is full, in which
+// case (Digit % cJU_BITSPERSUBEXP*) itself is the base-0 offset.
+//
+// TBD for Judy*Next(): Should this return next-right instead of next-left?
+// That is, +1 from current value? Maybe not, if Digits bit IS set, +1 would
+// be wrong.
+
+#define SEARCHBITMAPB(Bitmap,Digit,Bitposmask) \
+ (((Bitmap) == cJU_FULLBITMAPB) ? (Digit % cJU_BITSPERSUBEXPB) : \
+ j__udyCountBitsB((Bitmap) & JU_MASKLOWERINC(Bitposmask)) - 1)
+
+#define SEARCHBITMAPL(Bitmap,Digit,Bitposmask) \
+ (((Bitmap) == cJU_FULLBITMAPL) ? (Digit % cJU_BITSPERSUBEXPL) : \
+ j__udyCountBitsL((Bitmap) & JU_MASKLOWERINC(Bitposmask)) - 1)
+
+#ifdef JUDYPREV
+// Equivalent to search for the highest offset in Bitmap:
+
+#define SEARCHBITMAPMAXB(Bitmap) \
+ (((Bitmap) == cJU_FULLBITMAPB) ? cJU_BITSPERSUBEXPB - 1 : \
+ j__udyCountBitsB(Bitmap) - 1)
+
+#define SEARCHBITMAPMAXL(Bitmap) \
+ (((Bitmap) == cJU_FULLBITMAPL) ? cJU_BITSPERSUBEXPL - 1 : \
+ j__udyCountBitsL(Bitmap) - 1)
+#endif
+
+
+// CHECK DECODE BYTES:
+//
+// Check Decode bytes in a JP against the equivalent portion of *PIndex. If
+// *PIndex is lower (for Judy*Prev()) or higher (for Judy*Next()), this JP is a
+// dead end (the same as if it had been absent in a linear or bitmap branch or
+// null in an uncompressed branch), enter SM2Backtrack; otherwise enter
+// SM3Findlimit to find the highest/lowest Index under this JP, as if the code
+// had already backtracked to this JP.
+
+#ifdef JUDYPREV
+#define CDcmp__ <
+#else
+#define CDcmp__ >
+#endif
+
+#define CHECKDCD(cState) \
+ if (JU_DCDNOTMATCHINDEX(*PIndex, Pjp, cState)) \
+ { \
+ if ((*PIndex & cJU_DCDMASK(cState)) \
+ CDcmp__(JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(cState))) \
+ { \
+ goto SM2Backtrack; \
+ } \
+ goto SM3Findlimit; \
+ }
+
+
+// PREPARE TO HANDLE A LEAFW OR JRP BRANCH IN SM1:
+//
+// Extract a state-dependent digit from Index in a "constant" way, then jump to
+// common code for multiple cases.
+
+#define SM1PREPB(cState,Next) \
+ state = (cState); \
+ digit = JU_DIGITATSTATE(*PIndex, cState); \
+ goto Next
+
+
+// PREPARE TO HANDLE A LEAFW OR JRP BRANCH IN SM3:
+//
+// Optionally save Dcd bytes into *PIndex, then save state and jump to common
+// code for multiple cases.
+
+#define SM3PREPB_DCD(cState,Next) \
+ JU_SETDCD(*PIndex, Pjp, cState); \
+ SM3PREPB(cState,Next)
+
+#define SM3PREPB(cState,Next) state = (cState); goto Next
+
+
+// ----------------------------------------------------------------------------
+// CHECK FOR SHORTCUTS:
+//
+// Error out if PIndex is null. Execute JU_RET_NOTFOUND if the Judy array is
+// empty or *PIndex is already the minimum/maximum Index possible.
+//
+// Note: As documented, in case of failure *PIndex may be modified.
+
+ if (PIndex == (PWord_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+#ifdef JUDYPREV
+ if ((PArray == (Pvoid_t) NULL) || ((*PIndex)-- == 0))
+#else
+ if ((PArray == (Pvoid_t) NULL) || ((*PIndex)++ == cJU_ALLONES))
+#endif
+ JU_RET_NOTFOUND;
+
+
+// HANDLE JRP:
+//
+// Before even entering SM1Get, check the JRP type. For JRP branches, traverse
+// the JPM; handle LEAFW leaves directly; but look for the most common cases
+// first.
+
+// ROOT-STATE LEAF that starts with a Pop0 word; just look within the leaf:
+//
+// If *PIndex is in the leaf, return it; otherwise return the Index, if any,
+// below where it would belong.
+
+ if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ Pjlw_t Pjlw = P_JLW(PArray); // first word of leaf.
+ pop1 = Pjlw[0] + 1;
+
+ if ((offset = j__udySearchLeafW(Pjlw + 1, pop1, *PIndex))
+ >= 0) // Index is present.
+ {
+ assert(offset < pop1); // in expected range.
+ JU_RET_FOUND_LEAFW(Pjlw, pop1, offset); // *PIndex is set.
+ }
+
+#ifdef JUDYPREV
+ if ((offset = ~offset) == 0) // no next-left Index.
+#else
+ if ((offset = ~offset) >= pop1) // no next-right Index.
+#endif
+ JU_RET_NOTFOUND;
+
+ assert(offset <= pop1); // valid result.
+
+#ifdef JUDYPREV
+ *PIndex = Pjlw[offset--]; // next-left Index, base 1.
+#else
+ *PIndex = Pjlw[offset + 1]; // next-right Index, base 1.
+#endif
+ JU_RET_FOUND_LEAFW(Pjlw, pop1, offset); // base 0.
+
+ }
+ else // JRP BRANCH
+ {
+ Pjpm_t Pjpm = P_JPM(PArray);
+ Pjp = &(Pjpm->jpm_JP);
+
+// goto SM1Get;
+ }
+
+// ============================================================================
+// STATE MACHINE 1 -- GET INDEX:
+//
+// Search for *PIndex (already decremented/incremented so as to be inclusive).
+// If found, return it. Otherwise in theory hand off to SM2Backtrack or
+// SM3Findlimit, but in practice "shortcut" by first sideways searching the
+// current branch or leaf upon hitting a dead end. During sideways search,
+// modify *PIndex to a new path taken.
+//
+// ENTRY: Pjp points to next JP to interpret, whose Decode bytes have not yet
+// been checked. This JP is not yet listed in history.
+//
+// Note: Check Decode bytes at the start of each loop, not after looking up a
+// new JP, so its easy to do constant shifts/masks, although this requires
+// cautious handling of Pjp, offset, and *hist[] for correct entry to
+// SM2Backtrack.
+//
+// EXIT: Return, or branch to SM2Backtrack or SM3Findlimit with correct
+// interface, as described elsewhere.
+//
+// WARNING: For run-time efficiency the following cases replicate code with
+// varying constants, rather than using common code with variable values!
+
+SM1Get: // return here for next branch/leaf.
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then search for a JP for the
+// next digit in *PIndex.
+
+ case cJU_JPBRANCH_L2: CHECKDCD(2); SM1PREPB(2, SM1BranchL);
+ case cJU_JPBRANCH_L3: CHECKDCD(3); SM1PREPB(3, SM1BranchL);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4: CHECKDCD(4); SM1PREPB(4, SM1BranchL);
+ case cJU_JPBRANCH_L5: CHECKDCD(5); SM1PREPB(5, SM1BranchL);
+ case cJU_JPBRANCH_L6: CHECKDCD(6); SM1PREPB(6, SM1BranchL);
+ case cJU_JPBRANCH_L7: CHECKDCD(7); SM1PREPB(7, SM1BranchL);
+#endif
+ case cJU_JPBRANCH_L: SM1PREPB(cJU_ROOTSTATE, SM1BranchL);
+
+// Common code (state-independent) for all cases of linear branches:
+
+SM1BranchL:
+ Pjbl = P_JBL(Pjp->jp_Addr);
+
+// Found JP matching current digit in *PIndex; record parent JP and the next
+// JPs offset, and iterate to the next JP:
+
+ if ((offset = j__udySearchLeaf1((Pjll_t) (Pjbl->jbl_Expanse),
+ Pjbl->jbl_NumJPs, digit)) >= 0)
+ {
+ HISTPUSH(Pjp, offset);
+ Pjp = (Pjbl->jbl_jp) + offset;
+ goto SM1Get;
+ }
+
+// Dead end, no JP in BranchL for next digit in *PIndex:
+//
+// Get the ideal location of digits JP, and if theres no next-left/right JP
+// in the BranchL, shortcut and start backtracking one level up; ignore the
+// current Pjp because it points to a BranchL with no next-left/right JP.
+
+#ifdef JUDYPREV
+ if ((offset = (~offset) - 1) < 0) // no next-left JP in BranchL.
+#else
+ if ((offset = (~offset)) >= Pjbl->jbl_NumJPs) // no next-right.
+#endif
+ goto SM2Backtrack;
+
+// Theres a next-left/right JP in the current BranchL; save its digit in
+// *PIndex and shortcut to SM3Findlimit:
+
+ JU_SETDIGIT(*PIndex, Pjbl->jbl_Expanse[offset], state);
+ Pjp = (Pjbl->jbl_jp) + offset;
+ goto SM3Findlimit;
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then look for a JP for the
+// next digit in *PIndex.
+
+ case cJU_JPBRANCH_B2: CHECKDCD(2); SM1PREPB(2, SM1BranchB);
+ case cJU_JPBRANCH_B3: CHECKDCD(3); SM1PREPB(3, SM1BranchB);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4: CHECKDCD(4); SM1PREPB(4, SM1BranchB);
+ case cJU_JPBRANCH_B5: CHECKDCD(5); SM1PREPB(5, SM1BranchB);
+ case cJU_JPBRANCH_B6: CHECKDCD(6); SM1PREPB(6, SM1BranchB);
+ case cJU_JPBRANCH_B7: CHECKDCD(7); SM1PREPB(7, SM1BranchB);
+#endif
+ case cJU_JPBRANCH_B: SM1PREPB(cJU_ROOTSTATE, SM1BranchB);
+
+// Common code (state-independent) for all cases of bitmap branches:
+
+SM1BranchB:
+ Pjbb = P_JBB(Pjp->jp_Addr);
+
+// Locate the digits JP in the subexpanse list, if present, otherwise the
+// offset of the next-left JP, if any:
+
+ subexp = digit / cJU_BITSPERSUBEXPB;
+ assert(subexp < cJU_NUMSUBEXPB); // falls in expected range.
+ bitposmask = JU_BITPOSMASKB(digit);
+ offset = SEARCHBITMAPB(JU_JBB_BITMAP(Pjbb, subexp), digit,
+ bitposmask);
+ // right range:
+ assert((offset >= -1) && (offset < (int) cJU_BITSPERSUBEXPB));
+
+// Found JP matching current digit in *PIndex:
+//
+// Record the parent JP and the next JPs offset; and iterate to the next JP.
+
+// if (JU_BITMAPTESTB(Pjbb, digit)) // slower.
+ if (JU_JBB_BITMAP(Pjbb, subexp) & bitposmask) // faster.
+ {
+ // not negative since at least one bit is set:
+ assert(offset >= 0);
+
+ HISTPUSH(Pjp, HISTPUSHBOFF(subexp, offset, digit));
+
+ if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+ Pjp += offset;
+ goto SM1Get; // iterate to next JP.
+ }
+
+// Dead end, no JP in BranchB for next digit in *PIndex:
+//
+// If theres a next-left/right JP in the current BranchB, shortcut to
+// SM3Findlimit. Note: offset is already set to the correct value for the
+// next-left/right JP.
+
+#ifdef JUDYPREV
+ if (offset >= 0) // next-left JP is in this subexpanse.
+ goto SM1BranchBFindlimit;
+
+ while (--subexp >= 0) // search next-left subexpanses.
+#else
+ if (JU_JBB_BITMAP(Pjbb, subexp) & JU_MASKHIGHEREXC(bitposmask))
+ {
+ ++offset; // next-left => next-right.
+ goto SM1BranchBFindlimit;
+ }
+
+ while (++subexp < cJU_NUMSUBEXPB) // search next-right subexps.
+#endif
+ {
+ if (! JU_JBB_PJP(Pjbb, subexp)) continue; // empty subexpanse.
+
+#ifdef JUDYPREV
+ offset = SEARCHBITMAPMAXB(JU_JBB_BITMAP(Pjbb, subexp));
+ // expected range:
+ assert((offset >= 0) && (offset < cJU_BITSPERSUBEXPB));
+#else
+ offset = 0;
+#endif
+
+// Save the next-left/right JPs digit in *PIndex:
+
+SM1BranchBFindlimit:
+ JU_BITMAPDIGITB(digit, subexp, JU_JBB_BITMAP(Pjbb, subexp),
+ offset);
+ JU_SETDIGIT(*PIndex, digit, state);
+
+ if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+ Pjp += offset;
+ goto SM3Findlimit;
+ }
+
+// Theres no next-left/right JP in the BranchB:
+//
+// Shortcut and start backtracking one level up; ignore the current Pjp because
+// it points to a BranchB with no next-left/right JP.
+
+ goto SM2Backtrack;
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then look for a JP for the
+// next digit in *PIndex.
+
+ case cJU_JPBRANCH_U2: CHECKDCD(2); SM1PREPB(2, SM1BranchU);
+ case cJU_JPBRANCH_U3: CHECKDCD(3); SM1PREPB(3, SM1BranchU);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U4: CHECKDCD(4); SM1PREPB(4, SM1BranchU);
+ case cJU_JPBRANCH_U5: CHECKDCD(5); SM1PREPB(5, SM1BranchU);
+ case cJU_JPBRANCH_U6: CHECKDCD(6); SM1PREPB(6, SM1BranchU);
+ case cJU_JPBRANCH_U7: CHECKDCD(7); SM1PREPB(7, SM1BranchU);
+#endif
+ case cJU_JPBRANCH_U: SM1PREPB(cJU_ROOTSTATE, SM1BranchU);
+
+// Common code (state-independent) for all cases of uncompressed branches:
+
+SM1BranchU:
+ Pjbu = P_JBU(Pjp->jp_Addr);
+ Pjp2 = (Pjbu->jbu_jp) + digit;
+
+// Found JP matching current digit in *PIndex:
+//
+// Record the parent JP and the next JPs digit, and iterate to the next JP.
+//
+// TBD: Instead of this, just goto SM1Get, and add cJU_JPNULL* cases to the
+// SM1Get state machine? Then backtrack? However, it means you cant detect
+// an inappropriate cJU_JPNULL*, when it occurs in other than a BranchU, and
+// return JU_RET_CORRUPT.
+
+ if (! JPNULL(JU_JPTYPE(Pjp2))) // digit has a JP.
+ {
+ HISTPUSH(Pjp, digit);
+ Pjp = Pjp2;
+ goto SM1Get;
+ }
+
+// Dead end, no JP in BranchU for next digit in *PIndex:
+//
+// Search for a next-left/right JP in the current BranchU, and if one is found,
+// save its digit in *PIndex and shortcut to SM3Findlimit:
+
+#ifdef JUDYPREV
+ while (digit >= 1)
+ {
+ Pjp = (Pjbu->jbu_jp) + (--digit);
+#else
+ while (digit < cJU_BRANCHUNUMJPS - 1)
+ {
+ Pjp = (Pjbu->jbu_jp) + (++digit);
+#endif
+ if (JPNULL(JU_JPTYPE(Pjp))) continue;
+
+ JU_SETDIGIT(*PIndex, digit, state);
+ goto SM3Findlimit;
+ }
+
+// Theres no next-left/right JP in the BranchU:
+//
+// Shortcut and start backtracking one level up; ignore the current Pjp because
+// it points to a BranchU with no next-left/right JP.
+
+ goto SM2Backtrack;
+
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF:
+//
+// Check Decode bytes, if any, in the current JP, then search the leaf for
+// *PIndex.
+
+#define SM1LEAFL(Func) \
+ Pjll = P_JLL(Pjp->jp_Addr); \
+ pop1 = JU_JPLEAF_POP0(Pjp) + 1; \
+ offset = Func(Pjll, pop1, *PIndex); \
+ goto SM1LeafLImm
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1: CHECKDCD(1); SM1LEAFL(j__udySearchLeaf1);
+#endif
+ case cJU_JPLEAF2: CHECKDCD(2); SM1LEAFL(j__udySearchLeaf2);
+ case cJU_JPLEAF3: CHECKDCD(3); SM1LEAFL(j__udySearchLeaf3);
+
+#ifdef JU_64BIT
+ case cJU_JPLEAF4: CHECKDCD(4); SM1LEAFL(j__udySearchLeaf4);
+ case cJU_JPLEAF5: CHECKDCD(5); SM1LEAFL(j__udySearchLeaf5);
+ case cJU_JPLEAF6: CHECKDCD(6); SM1LEAFL(j__udySearchLeaf6);
+ case cJU_JPLEAF7: CHECKDCD(7); SM1LEAFL(j__udySearchLeaf7);
+#endif
+
+// Common code (state-independent) for all cases of linear leaves and
+// immediates:
+
+SM1LeafLImm:
+ if (offset >= 0) // *PIndex is in LeafL / Immed.
+#ifdef JUDY1
+ JU_RET_FOUND;
+#else
+ { // JudyL is trickier...
+ switch (JU_JPTYPE(Pjp))
+ {
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1: JU_RET_FOUND_LEAF1(Pjll, pop1, offset);
+#endif
+ case cJU_JPLEAF2: JU_RET_FOUND_LEAF2(Pjll, pop1, offset);
+ case cJU_JPLEAF3: JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+#ifdef JU_64BIT
+ case cJU_JPLEAF4: JU_RET_FOUND_LEAF4(Pjll, pop1, offset);
+ case cJU_JPLEAF5: JU_RET_FOUND_LEAF5(Pjll, pop1, offset);
+ case cJU_JPLEAF6: JU_RET_FOUND_LEAF6(Pjll, pop1, offset);
+ case cJU_JPLEAF7: JU_RET_FOUND_LEAF7(Pjll, pop1, offset);
+#endif
+
+ case cJU_JPIMMED_1_01:
+ case cJU_JPIMMED_2_01:
+ case cJU_JPIMMED_3_01:
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01:
+ case cJU_JPIMMED_5_01:
+ case cJU_JPIMMED_6_01:
+ case cJU_JPIMMED_7_01:
+#endif
+ JU_RET_FOUND_IMM_01(Pjp);
+
+ case cJU_JPIMMED_1_02:
+ case cJU_JPIMMED_1_03:
+#ifdef JU_64BIT
+ case cJU_JPIMMED_1_04:
+ case cJU_JPIMMED_1_05:
+ case cJU_JPIMMED_1_06:
+ case cJU_JPIMMED_1_07:
+ case cJU_JPIMMED_2_02:
+ case cJU_JPIMMED_2_03:
+ case cJU_JPIMMED_3_02:
+#endif
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); // impossible?
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+ } // found *PIndex
+
+#endif // JUDYL
+
+// Dead end, no Index in LeafL / Immed for remaining digit(s) in *PIndex:
+//
+// Get the ideal location of Index, and if theres no next-left/right Index in
+// the LeafL / Immed, shortcut and start backtracking one level up; ignore the
+// current Pjp because it points to a LeafL / Immed with no next-left/right
+// Index.
+
+#ifdef JUDYPREV
+ if ((offset = (~offset) - 1) < 0) // no next-left Index.
+#else
+ if ((offset = (~offset)) >= pop1) // no next-right Index.
+#endif
+ goto SM2Backtrack;
+
+// Theres a next-left/right Index in the current LeafL / Immed; shortcut by
+// copying its digit(s) to *PIndex and returning it.
+//
+// Unfortunately this is pretty hairy, especially avoiding endian issues.
+//
+// The cJU_JPLEAF* cases are very similar to same-index-size cJU_JPIMMED* cases
+// for *_02 and above, but must return differently, at least for JudyL, so
+// spell them out separately here at the cost of a little redundant code for
+// Judy1.
+
+ switch (JU_JPTYPE(Pjp))
+ {
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1:
+
+ JU_SETDIGIT1(*PIndex, ((uint8_t *) Pjll)[offset]);
+ JU_RET_FOUND_LEAF1(Pjll, pop1, offset);
+#endif
+
+ case cJU_JPLEAF2:
+
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+ | ((uint16_t *) Pjll)[offset];
+ JU_RET_FOUND_LEAF2(Pjll, pop1, offset);
+
+ case cJU_JPLEAF3:
+ {
+ Word_t lsb;
+ JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+ JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+ }
+
+#ifdef JU_64BIT
+ case cJU_JPLEAF4:
+
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+ | ((uint32_t *) Pjll)[offset];
+ JU_RET_FOUND_LEAF4(Pjll, pop1, offset);
+
+ case cJU_JPLEAF5:
+ {
+ Word_t lsb;
+ JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (5 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+ JU_RET_FOUND_LEAF5(Pjll, pop1, offset);
+ }
+
+ case cJU_JPLEAF6:
+ {
+ Word_t lsb;
+ JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (6 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+ JU_RET_FOUND_LEAF6(Pjll, pop1, offset);
+ }
+
+ case cJU_JPLEAF7:
+ {
+ Word_t lsb;
+ JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (7 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+ JU_RET_FOUND_LEAF7(Pjll, pop1, offset);
+ }
+
+#endif // JU_64BIT
+
+#define SET_01(cState) JU_SETDIGITS(*PIndex, JU_JPDCDPOP0(Pjp), cState)
+
+ case cJU_JPIMMED_1_01: SET_01(1); goto SM1Imm_01;
+ case cJU_JPIMMED_2_01: SET_01(2); goto SM1Imm_01;
+ case cJU_JPIMMED_3_01: SET_01(3); goto SM1Imm_01;
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01: SET_01(4); goto SM1Imm_01;
+ case cJU_JPIMMED_5_01: SET_01(5); goto SM1Imm_01;
+ case cJU_JPIMMED_6_01: SET_01(6); goto SM1Imm_01;
+ case cJU_JPIMMED_7_01: SET_01(7); goto SM1Imm_01;
+#endif
+SM1Imm_01: JU_RET_FOUND_IMM_01(Pjp);
+
+// Shorthand for where to find start of Index bytes array:
+
+#ifdef JUDY1
+#define PJI (Pjp->jp_1Index)
+#else
+#define PJI (Pjp->jp_LIndex)
+#endif
+
+ case cJU_JPIMMED_1_02:
+ case cJU_JPIMMED_1_03:
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04:
+ case cJU_JPIMMED_1_05:
+ case cJU_JPIMMED_1_06:
+ case cJU_JPIMMED_1_07:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08:
+ case cJ1_JPIMMED_1_09:
+ case cJ1_JPIMMED_1_10:
+ case cJ1_JPIMMED_1_11:
+ case cJ1_JPIMMED_1_12:
+ case cJ1_JPIMMED_1_13:
+ case cJ1_JPIMMED_1_14:
+ case cJ1_JPIMMED_1_15:
+#endif
+ JU_SETDIGIT1(*PIndex, ((uint8_t *) PJI)[offset]);
+ JU_RET_FOUND_IMM(Pjp, offset);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02:
+ case cJU_JPIMMED_2_03:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04:
+ case cJ1_JPIMMED_2_05:
+ case cJ1_JPIMMED_2_06:
+ case cJ1_JPIMMED_2_07:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+ | ((uint16_t *) PJI)[offset];
+ JU_RET_FOUND_IMM(Pjp, offset);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03:
+ case cJ1_JPIMMED_3_04:
+ case cJ1_JPIMMED_3_05:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ {
+ Word_t lsb;
+ JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (3 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_4_02:
+ case cJ1_JPIMMED_4_03:
+
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+ | ((uint32_t *) PJI)[offset];
+ JU_RET_FOUND_IMM(Pjp, offset);
+
+ case cJ1_JPIMMED_5_02:
+ case cJ1_JPIMMED_5_03:
+ {
+ Word_t lsb;
+ JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (5 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+
+ case cJ1_JPIMMED_6_02:
+ {
+ Word_t lsb;
+ JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (6 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+
+ case cJ1_JPIMMED_7_02:
+ {
+ Word_t lsb;
+ JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (7 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+
+#endif // (JUDY1 && JU_64BIT)
+
+ } // switch for not-found *PIndex
+
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); // impossible?
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF:
+//
+// Check Decode bytes, if any, in the current JP, then look in the leaf for
+// *PIndex.
+
+ case cJU_JPLEAF_B1:
+ {
+ Pjlb_t Pjlb;
+ CHECKDCD(1);
+
+ Pjlb = P_JLB(Pjp->jp_Addr);
+ digit = JU_DIGITATSTATE(*PIndex, 1);
+ subexp = JU_SUBEXPL(digit);
+ bitposmask = JU_BITPOSMASKL(digit);
+ assert(subexp < cJU_NUMSUBEXPL); // falls in expected range.
+
+// *PIndex exists in LeafB1:
+
+// if (JU_BITMAPTESTL(Pjlb, digit)) // slower.
+ if (JU_JLB_BITMAP(Pjlb, subexp) & bitposmask) // faster.
+ {
+#ifdef JUDYL // needs offset at this point:
+ offset = SEARCHBITMAPL(JU_JLB_BITMAP(Pjlb, subexp), digit, bitposmask);
+#endif
+ JU_RET_FOUND_LEAF_B1(Pjlb, subexp, offset);
+// == return((PPvoid_t) (P_JV(JL_JLB_PVALUE(Pjlb, subexp)) + (offset)));
+ }
+
+// Dead end, no Index in LeafB1 for remaining digit in *PIndex:
+//
+// If theres a next-left/right Index in the current LeafB1, which for
+// Judy*Next() is true if any bits are set for higher Indexes, shortcut by
+// returning it. Note: For Judy*Prev(), offset is set here to the correct
+// value for the next-left JP.
+
+ offset = SEARCHBITMAPL(JU_JLB_BITMAP(Pjlb, subexp), digit,
+ bitposmask);
+ // right range:
+ assert((offset >= -1) && (offset < (int) cJU_BITSPERSUBEXPL));
+
+#ifdef JUDYPREV
+ if (offset >= 0) // next-left JP is in this subexpanse.
+ goto SM1LeafB1Findlimit;
+
+ while (--subexp >= 0) // search next-left subexpanses.
+#else
+ if (JU_JLB_BITMAP(Pjlb, subexp) & JU_MASKHIGHEREXC(bitposmask))
+ {
+ ++offset; // next-left => next-right.
+ goto SM1LeafB1Findlimit;
+ }
+
+ while (++subexp < cJU_NUMSUBEXPL) // search next-right subexps.
+#endif
+ {
+ if (! JU_JLB_BITMAP(Pjlb, subexp)) continue; // empty subexp.
+
+#ifdef JUDYPREV
+ offset = SEARCHBITMAPMAXL(JU_JLB_BITMAP(Pjlb, subexp));
+ // expected range:
+ assert((offset >= 0) && (offset < (int) cJU_BITSPERSUBEXPL));
+#else
+ offset = 0;
+#endif
+
+// Save the next-left/right Indexess digit in *PIndex:
+
+SM1LeafB1Findlimit:
+ JU_BITMAPDIGITL(digit, subexp, JU_JLB_BITMAP(Pjlb, subexp), offset);
+ JU_SETDIGIT1(*PIndex, digit);
+ JU_RET_FOUND_LEAF_B1(Pjlb, subexp, offset);
+// == return((PPvoid_t) (P_JV(JL_JLB_PVALUE(Pjlb, subexp)) + (offset)));
+ }
+
+// Theres no next-left/right Index in the LeafB1:
+//
+// Shortcut and start backtracking one level up; ignore the current Pjp because
+// it points to a LeafB1 with no next-left/right Index.
+
+ goto SM2Backtrack;
+
+ } // case cJU_JPLEAF_B1
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// If the Decode bytes match, *PIndex is found (without modification).
+
+ case cJ1_JPFULLPOPU1:
+
+ CHECKDCD(1);
+ JU_RET_FOUND_FULLPOPU1;
+#endif
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+
+#ifdef JUDYPREV
+#define SM1IMM_SETPOP1(cPop1)
+#else
+#define SM1IMM_SETPOP1(cPop1) pop1 = (cPop1)
+#endif
+
+#define SM1IMM(Func,cPop1) \
+ SM1IMM_SETPOP1(cPop1); \
+ offset = Func((Pjll_t) (PJI), cPop1, *PIndex); \
+ goto SM1LeafLImm
+
+// Special case for Pop1 = 1 Immediate JPs:
+//
+// If *PIndex is in the immediate, offset is 0, otherwise the binary NOT of the
+// offset where it belongs, 0 or 1, same as from the search functions.
+
+#ifdef JUDYPREV
+#define SM1IMM_01_SETPOP1
+#else
+#define SM1IMM_01_SETPOP1 pop1 = 1
+#endif
+
+#define SM1IMM_01 \
+ SM1IMM_01_SETPOP1; \
+ offset = ((JU_JPDCDPOP0(Pjp) < JU_TRIMTODCDSIZE(*PIndex)) ? ~1 : \
+ (JU_JPDCDPOP0(Pjp) == JU_TRIMTODCDSIZE(*PIndex)) ? 0 : \
+ ~0); \
+ goto SM1LeafLImm
+
+ case cJU_JPIMMED_1_01:
+ case cJU_JPIMMED_2_01:
+ case cJU_JPIMMED_3_01:
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01:
+ case cJU_JPIMMED_5_01:
+ case cJU_JPIMMED_6_01:
+ case cJU_JPIMMED_7_01:
+#endif
+ SM1IMM_01;
+
+// TBD: Doug says it would be OK to have fewer calls and calculate arg 2, here
+// and in Judy*Count() also.
+
+ case cJU_JPIMMED_1_02: SM1IMM(j__udySearchLeaf1, 2);
+ case cJU_JPIMMED_1_03: SM1IMM(j__udySearchLeaf1, 3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04: SM1IMM(j__udySearchLeaf1, 4);
+ case cJU_JPIMMED_1_05: SM1IMM(j__udySearchLeaf1, 5);
+ case cJU_JPIMMED_1_06: SM1IMM(j__udySearchLeaf1, 6);
+ case cJU_JPIMMED_1_07: SM1IMM(j__udySearchLeaf1, 7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08: SM1IMM(j__udySearchLeaf1, 8);
+ case cJ1_JPIMMED_1_09: SM1IMM(j__udySearchLeaf1, 9);
+ case cJ1_JPIMMED_1_10: SM1IMM(j__udySearchLeaf1, 10);
+ case cJ1_JPIMMED_1_11: SM1IMM(j__udySearchLeaf1, 11);
+ case cJ1_JPIMMED_1_12: SM1IMM(j__udySearchLeaf1, 12);
+ case cJ1_JPIMMED_1_13: SM1IMM(j__udySearchLeaf1, 13);
+ case cJ1_JPIMMED_1_14: SM1IMM(j__udySearchLeaf1, 14);
+ case cJ1_JPIMMED_1_15: SM1IMM(j__udySearchLeaf1, 15);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02: SM1IMM(j__udySearchLeaf2, 2);
+ case cJU_JPIMMED_2_03: SM1IMM(j__udySearchLeaf2, 3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04: SM1IMM(j__udySearchLeaf2, 4);
+ case cJ1_JPIMMED_2_05: SM1IMM(j__udySearchLeaf2, 5);
+ case cJ1_JPIMMED_2_06: SM1IMM(j__udySearchLeaf2, 6);
+ case cJ1_JPIMMED_2_07: SM1IMM(j__udySearchLeaf2, 7);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02: SM1IMM(j__udySearchLeaf3, 2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03: SM1IMM(j__udySearchLeaf3, 3);
+ case cJ1_JPIMMED_3_04: SM1IMM(j__udySearchLeaf3, 4);
+ case cJ1_JPIMMED_3_05: SM1IMM(j__udySearchLeaf3, 5);
+
+ case cJ1_JPIMMED_4_02: SM1IMM(j__udySearchLeaf4, 2);
+ case cJ1_JPIMMED_4_03: SM1IMM(j__udySearchLeaf4, 3);
+
+ case cJ1_JPIMMED_5_02: SM1IMM(j__udySearchLeaf5, 2);
+ case cJ1_JPIMMED_5_03: SM1IMM(j__udySearchLeaf5, 3);
+
+ case cJ1_JPIMMED_6_02: SM1IMM(j__udySearchLeaf6, 2);
+
+ case cJ1_JPIMMED_7_02: SM1IMM(j__udySearchLeaf7, 2);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// INVALID JP TYPE:
+
+ default: JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+ } // SM1Get switch.
+
+ /*NOTREACHED*/
+
+
+// ============================================================================
+// STATE MACHINE 2 -- BACKTRACK BRANCH TO PREVIOUS JP:
+//
+// Look for the next-left/right JP in a branch, backing up the history list as
+// necessary. Upon finding a next-left/right JP, modify the corresponding
+// digit in *PIndex before passing control to SM3Findlimit.
+//
+// Note: As described earlier, only branch JPs are expected here; other types
+// fall into the default case.
+//
+// Note: If a found JP contains needed Dcd bytes, thats OK, theyre copied to
+// *PIndex in SM3Findlimit.
+//
+// TBD: This code has a lot in common with similar code in the shortcut cases
+// in SM1Get. Can combine this code somehow?
+//
+// ENTRY: List, possibly empty, of JPs and offsets in APjphist[] and
+// Aoffhist[]; see earlier comments.
+//
+// EXIT: Execute JU_RET_NOTFOUND if no previous/next JP; otherwise jump to
+// SM3Findlimit to resume a new but different downward search.
+
+SM2Backtrack: // come or return here for first/next sideways search.
+
+ HISTPOP(Pjp, offset);
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH:
+
+ case cJU_JPBRANCH_L2: state = 2; goto SM2BranchL;
+ case cJU_JPBRANCH_L3: state = 3; goto SM2BranchL;
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4: state = 4; goto SM2BranchL;
+ case cJU_JPBRANCH_L5: state = 5; goto SM2BranchL;
+ case cJU_JPBRANCH_L6: state = 6; goto SM2BranchL;
+ case cJU_JPBRANCH_L7: state = 7; goto SM2BranchL;
+#endif
+ case cJU_JPBRANCH_L: state = cJU_ROOTSTATE; goto SM2BranchL;
+
+SM2BranchL:
+#ifdef JUDYPREV
+ if (--offset < 0) goto SM2Backtrack; // no next-left JP in BranchL.
+#endif
+ Pjbl = P_JBL(Pjp->jp_Addr);
+#ifdef JUDYNEXT
+ if (++offset >= (Pjbl->jbl_NumJPs)) goto SM2Backtrack;
+ // no next-right JP in BranchL.
+#endif
+
+// Theres a next-left/right JP in the current BranchL; save its digit in
+// *PIndex and continue with SM3Findlimit:
+
+ JU_SETDIGIT(*PIndex, Pjbl->jbl_Expanse[offset], state);
+ Pjp = (Pjbl->jbl_jp) + offset;
+ goto SM3Findlimit;
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH:
+
+ case cJU_JPBRANCH_B2: state = 2; goto SM2BranchB;
+ case cJU_JPBRANCH_B3: state = 3; goto SM2BranchB;
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4: state = 4; goto SM2BranchB;
+ case cJU_JPBRANCH_B5: state = 5; goto SM2BranchB;
+ case cJU_JPBRANCH_B6: state = 6; goto SM2BranchB;
+ case cJU_JPBRANCH_B7: state = 7; goto SM2BranchB;
+#endif
+ case cJU_JPBRANCH_B: state = cJU_ROOTSTATE; goto SM2BranchB;
+
+SM2BranchB:
+ Pjbb = P_JBB(Pjp->jp_Addr);
+ HISTPOPBOFF(subexp, offset, digit); // unpack values.
+
+// If theres a next-left/right JP in the current BranchB, which for
+// Judy*Next() is true if any bits are set for higher Indexes, continue to
+// SM3Findlimit:
+//
+// Note: offset is set to the JP previously traversed; go one to the
+// left/right.
+
+#ifdef JUDYPREV
+ if (offset > 0) // next-left JP is in this subexpanse.
+ {
+ --offset;
+ goto SM2BranchBFindlimit;
+ }
+
+ while (--subexp >= 0) // search next-left subexpanses.
+#else
+ if (JU_JBB_BITMAP(Pjbb, subexp)
+ & JU_MASKHIGHEREXC(JU_BITPOSMASKB(digit)))
+ {
+ ++offset; // next-left => next-right.
+ goto SM2BranchBFindlimit;
+ }
+
+ while (++subexp < cJU_NUMSUBEXPB) // search next-right subexps.
+#endif
+ {
+ if (! JU_JBB_PJP(Pjbb, subexp)) continue; // empty subexpanse.
+
+#ifdef JUDYPREV
+ offset = SEARCHBITMAPMAXB(JU_JBB_BITMAP(Pjbb, subexp));
+ // expected range:
+ assert((offset >= 0) && (offset < cJU_BITSPERSUBEXPB));
+#else
+ offset = 0;
+#endif
+
+// Save the next-left/right JPs digit in *PIndex:
+
+SM2BranchBFindlimit:
+ JU_BITMAPDIGITB(digit, subexp, JU_JBB_BITMAP(Pjbb, subexp),
+ offset);
+ JU_SETDIGIT(*PIndex, digit, state);
+
+ if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+ Pjp += offset;
+ goto SM3Findlimit;
+ }
+
+// Theres no next-left/right JP in the BranchB:
+
+ goto SM2Backtrack;
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH:
+
+ case cJU_JPBRANCH_U2: state = 2; goto SM2BranchU;
+ case cJU_JPBRANCH_U3: state = 3; goto SM2BranchU;
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U4: state = 4; goto SM2BranchU;
+ case cJU_JPBRANCH_U5: state = 5; goto SM2BranchU;
+ case cJU_JPBRANCH_U6: state = 6; goto SM2BranchU;
+ case cJU_JPBRANCH_U7: state = 7; goto SM2BranchU;
+#endif
+ case cJU_JPBRANCH_U: state = cJU_ROOTSTATE; goto SM2BranchU;
+
+SM2BranchU:
+
+// Search for a next-left/right JP in the current BranchU, and if one is found,
+// save its digit in *PIndex and continue to SM3Findlimit:
+
+ Pjbu = P_JBU(Pjp->jp_Addr);
+ digit = offset;
+
+#ifdef JUDYPREV
+ while (digit >= 1)
+ {
+ Pjp = (Pjbu->jbu_jp) + (--digit);
+#else
+ while (digit < cJU_BRANCHUNUMJPS - 1)
+ {
+ Pjp = (Pjbu->jbu_jp) + (++digit);
+#endif
+ if (JPNULL(JU_JPTYPE(Pjp))) continue;
+
+ JU_SETDIGIT(*PIndex, digit, state);
+ goto SM3Findlimit;
+ }
+
+// Theres no next-left/right JP in the BranchU:
+
+ goto SM2Backtrack;
+
+
+// ----------------------------------------------------------------------------
+// INVALID JP TYPE:
+
+ default: JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+ } // SM2Backtrack switch.
+
+ /*NOTREACHED*/
+
+
+// ============================================================================
+// STATE MACHINE 3 -- FIND LIMIT JP/INDEX:
+//
+// Look for the highest/lowest (right/left-most) JP in each branch and the
+// highest/lowest Index in a leaf or immediate, and return it. While
+// traversing, modify appropriate digit(s) in *PIndex to reflect the path
+// taken, including Dcd bytes in each JP (which could hold critical missing
+// digits for skipped branches).
+//
+// ENTRY: Pjp set to a JP under which to find max/min JPs (if a branch JP) or
+// a max/min Index and return (if a leaf or immediate JP).
+//
+// EXIT: Execute JU_RET_FOUND* upon reaching a leaf or immediate. Should be
+// impossible to fail, unless the Judy array is corrupt.
+
+SM3Findlimit: // come or return here for first/next branch/leaf.
+
+ switch (JU_JPTYPE(Pjp))
+ {
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH:
+//
+// Simply use the highest/lowest (right/left-most) JP in the BranchL, but first
+// copy the Dcd bytes to *PIndex if there are any (only if state <
+// cJU_ROOTSTATE - 1).
+
+ case cJU_JPBRANCH_L2: SM3PREPB_DCD(2, SM3BranchL);
+#ifndef JU_64BIT
+ case cJU_JPBRANCH_L3: SM3PREPB( 3, SM3BranchL);
+#else
+ case cJU_JPBRANCH_L3: SM3PREPB_DCD(3, SM3BranchL);
+ case cJU_JPBRANCH_L4: SM3PREPB_DCD(4, SM3BranchL);
+ case cJU_JPBRANCH_L5: SM3PREPB_DCD(5, SM3BranchL);
+ case cJU_JPBRANCH_L6: SM3PREPB_DCD(6, SM3BranchL);
+ case cJU_JPBRANCH_L7: SM3PREPB( 7, SM3BranchL);
+#endif
+ case cJU_JPBRANCH_L: SM3PREPB( cJU_ROOTSTATE, SM3BranchL);
+
+SM3BranchL:
+ Pjbl = P_JBL(Pjp->jp_Addr);
+
+#ifdef JUDYPREV
+ if ((offset = (Pjbl->jbl_NumJPs) - 1) < 0)
+#else
+ offset = 0; if ((Pjbl->jbl_NumJPs) == 0)
+#endif
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+ JU_SETDIGIT(*PIndex, Pjbl->jbl_Expanse[offset], state);
+ Pjp = (Pjbl->jbl_jp) + offset;
+ goto SM3Findlimit;
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH:
+//
+// Look for the highest/lowest (right/left-most) non-null subexpanse, then use
+// the highest/lowest JP in that subexpanse, but first copy Dcd bytes, if there
+// are any (only if state < cJU_ROOTSTATE - 1), to *PIndex.
+
+ case cJU_JPBRANCH_B2: SM3PREPB_DCD(2, SM3BranchB);
+#ifndef JU_64BIT
+ case cJU_JPBRANCH_B3: SM3PREPB( 3, SM3BranchB);
+#else
+ case cJU_JPBRANCH_B3: SM3PREPB_DCD(3, SM3BranchB);
+ case cJU_JPBRANCH_B4: SM3PREPB_DCD(4, SM3BranchB);
+ case cJU_JPBRANCH_B5: SM3PREPB_DCD(5, SM3BranchB);
+ case cJU_JPBRANCH_B6: SM3PREPB_DCD(6, SM3BranchB);
+ case cJU_JPBRANCH_B7: SM3PREPB( 7, SM3BranchB);
+#endif
+ case cJU_JPBRANCH_B: SM3PREPB( cJU_ROOTSTATE, SM3BranchB);
+
+SM3BranchB:
+ Pjbb = P_JBB(Pjp->jp_Addr);
+#ifdef JUDYPREV
+ subexp = cJU_NUMSUBEXPB;
+
+ while (! (JU_JBB_BITMAP(Pjbb, --subexp))) // find non-empty subexp.
+ {
+ if (subexp <= 0) // wholly empty bitmap.
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+ }
+
+ offset = SEARCHBITMAPMAXB(JU_JBB_BITMAP(Pjbb, subexp));
+ // expected range:
+ assert((offset >= 0) && (offset < cJU_BITSPERSUBEXPB));
+#else
+ subexp = -1;
+
+ while (! (JU_JBB_BITMAP(Pjbb, ++subexp))) // find non-empty subexp.
+ {
+ if (subexp >= cJU_NUMSUBEXPB - 1) // didnt find one.
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+ }
+
+ offset = 0;
+#endif
+
+ JU_BITMAPDIGITB(digit, subexp, JU_JBB_BITMAP(Pjbb, subexp), offset);
+ JU_SETDIGIT(*PIndex, digit, state);
+
+ if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+
+ Pjp += offset;
+ goto SM3Findlimit;
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH:
+//
+// Look for the highest/lowest (right/left-most) non-null JP, and use it, but
+// first copy Dcd bytes to *PIndex if there are any (only if state <
+// cJU_ROOTSTATE - 1).
+
+ case cJU_JPBRANCH_U2: SM3PREPB_DCD(2, SM3BranchU);
+#ifndef JU_64BIT
+ case cJU_JPBRANCH_U3: SM3PREPB( 3, SM3BranchU);
+#else
+ case cJU_JPBRANCH_U3: SM3PREPB_DCD(3, SM3BranchU);
+ case cJU_JPBRANCH_U4: SM3PREPB_DCD(4, SM3BranchU);
+ case cJU_JPBRANCH_U5: SM3PREPB_DCD(5, SM3BranchU);
+ case cJU_JPBRANCH_U6: SM3PREPB_DCD(6, SM3BranchU);
+ case cJU_JPBRANCH_U7: SM3PREPB( 7, SM3BranchU);
+#endif
+ case cJU_JPBRANCH_U: SM3PREPB( cJU_ROOTSTATE, SM3BranchU);
+
+SM3BranchU:
+ Pjbu = P_JBU(Pjp->jp_Addr);
+#ifdef JUDYPREV
+ digit = cJU_BRANCHUNUMJPS;
+
+ while (digit >= 1)
+ {
+ Pjp = (Pjbu->jbu_jp) + (--digit);
+#else
+
+ for (digit = 0; digit < cJU_BRANCHUNUMJPS; ++digit)
+ {
+ Pjp = (Pjbu->jbu_jp) + digit;
+#endif
+ if (JPNULL(JU_JPTYPE(Pjp))) continue;
+
+ JU_SETDIGIT(*PIndex, digit, state);
+ goto SM3Findlimit;
+ }
+
+// No non-null JPs in BranchU:
+
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF:
+//
+// Simply use the highest/lowest (right/left-most) Index in the LeafL, but the
+// details vary depending on leaf Index Size. First copy Dcd bytes, if there
+// are any (only if state < cJU_ROOTSTATE - 1), to *PIndex.
+
+#define SM3LEAFLDCD(cState) \
+ JU_SETDCD(*PIndex, Pjp, cState); \
+ SM3LEAFLNODCD
+
+#ifdef JUDY1
+#define SM3LEAFL_SETPOP1 // not needed in any cases.
+#else
+#define SM3LEAFL_SETPOP1 pop1 = JU_JPLEAF_POP0(Pjp) + 1
+#endif
+
+#ifdef JUDYPREV
+#define SM3LEAFLNODCD \
+ Pjll = P_JLL(Pjp->jp_Addr); \
+ SM3LEAFL_SETPOP1; \
+ offset = JU_JPLEAF_POP0(Pjp); assert(offset >= 0)
+#else
+#define SM3LEAFLNODCD \
+ Pjll = P_JLL(Pjp->jp_Addr); \
+ SM3LEAFL_SETPOP1; \
+ offset = 0; assert(JU_JPLEAF_POP0(Pjp) >= 0);
+#endif
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1:
+
+ SM3LEAFLDCD(1);
+ JU_SETDIGIT1(*PIndex, ((uint8_t *) Pjll)[offset]);
+ JU_RET_FOUND_LEAF1(Pjll, pop1, offset);
+#endif
+
+ case cJU_JPLEAF2:
+
+ SM3LEAFLDCD(2);
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+ | ((uint16_t *) Pjll)[offset];
+ JU_RET_FOUND_LEAF2(Pjll, pop1, offset);
+
+#ifndef JU_64BIT
+ case cJU_JPLEAF3:
+ {
+ Word_t lsb;
+ SM3LEAFLNODCD;
+ JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+ JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+ }
+
+#else
+ case cJU_JPLEAF3:
+ {
+ Word_t lsb;
+ SM3LEAFLDCD(3);
+ JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+ JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+ }
+
+ case cJU_JPLEAF4:
+
+ SM3LEAFLDCD(4);
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+ | ((uint32_t *) Pjll)[offset];
+ JU_RET_FOUND_LEAF4(Pjll, pop1, offset);
+
+ case cJU_JPLEAF5:
+ {
+ Word_t lsb;
+ SM3LEAFLDCD(5);
+ JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (5 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+ JU_RET_FOUND_LEAF5(Pjll, pop1, offset);
+ }
+
+ case cJU_JPLEAF6:
+ {
+ Word_t lsb;
+ SM3LEAFLDCD(6);
+ JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (6 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+ JU_RET_FOUND_LEAF6(Pjll, pop1, offset);
+ }
+
+ case cJU_JPLEAF7:
+ {
+ Word_t lsb;
+ SM3LEAFLNODCD;
+ JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (7 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+ JU_RET_FOUND_LEAF7(Pjll, pop1, offset);
+ }
+#endif
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF:
+//
+// Look for the highest/lowest (right/left-most) non-null subexpanse, then use
+// the highest/lowest Index in that subexpanse, but first copy Dcd bytes
+// (always present since state 1 < cJU_ROOTSTATE) to *PIndex.
+
+ case cJU_JPLEAF_B1:
+ {
+ Pjlb_t Pjlb;
+
+ JU_SETDCD(*PIndex, Pjp, 1);
+
+ Pjlb = P_JLB(Pjp->jp_Addr);
+#ifdef JUDYPREV
+ subexp = cJU_NUMSUBEXPL;
+
+ while (! JU_JLB_BITMAP(Pjlb, --subexp)) // find non-empty subexp.
+ {
+ if (subexp <= 0) // wholly empty bitmap.
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+ }
+
+// TBD: Might it be faster to just use a variant of BITMAPDIGIT*() that yields
+// the digit for the right-most Index with a bit set?
+
+ offset = SEARCHBITMAPMAXL(JU_JLB_BITMAP(Pjlb, subexp));
+ // expected range:
+ assert((offset >= 0) && (offset < cJU_BITSPERSUBEXPL));
+#else
+ subexp = -1;
+
+ while (! JU_JLB_BITMAP(Pjlb, ++subexp)) // find non-empty subexp.
+ {
+ if (subexp >= cJU_NUMSUBEXPL - 1) // didnt find one.
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+ }
+ }
+
+ offset = 0;
+#endif
+
+ JU_BITMAPDIGITL(digit, subexp, JU_JLB_BITMAP(Pjlb, subexp), offset);
+ JU_SETDIGIT1(*PIndex, digit);
+ JU_RET_FOUND_LEAF_B1(Pjlb, subexp, offset);
+// == return((PPvoid_t) (P_JV(JL_JLB_PVALUE(Pjlb, subexp)) + (offset)));
+
+ } // case cJU_JPLEAF_B1
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// Copy Dcd bytes to *PIndex (always present since state 1 < cJU_ROOTSTATE),
+// then set the highest/lowest possible digit as the LSB in *PIndex.
+
+ case cJ1_JPFULLPOPU1:
+
+ JU_SETDCD( *PIndex, Pjp, 1);
+#ifdef JUDYPREV
+ JU_SETDIGIT1(*PIndex, cJU_BITSPERBITMAP - 1);
+#else
+ JU_SETDIGIT1(*PIndex, 0);
+#endif
+ JU_RET_FOUND_FULLPOPU1;
+#endif // JUDY1
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+//
+// Simply use the highest/lowest (right/left-most) Index in the Imm, but the
+// details vary depending on leaf Index Size and pop1. Note: There are no Dcd
+// bytes in an Immediate JP, but in a cJU_JPIMMED_*_01 JP, the field holds the
+// least bytes of the immediate Index.
+
+ case cJU_JPIMMED_1_01: SET_01(1); goto SM3Imm_01;
+ case cJU_JPIMMED_2_01: SET_01(2); goto SM3Imm_01;
+ case cJU_JPIMMED_3_01: SET_01(3); goto SM3Imm_01;
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01: SET_01(4); goto SM3Imm_01;
+ case cJU_JPIMMED_5_01: SET_01(5); goto SM3Imm_01;
+ case cJU_JPIMMED_6_01: SET_01(6); goto SM3Imm_01;
+ case cJU_JPIMMED_7_01: SET_01(7); goto SM3Imm_01;
+#endif
+SM3Imm_01: JU_RET_FOUND_IMM_01(Pjp);
+
+#ifdef JUDYPREV
+#define SM3IMM_OFFSET(cPop1) (cPop1) - 1 // highest.
+#else
+#define SM3IMM_OFFSET(cPop1) 0 // lowest.
+#endif
+
+#define SM3IMM(cPop1,Next) \
+ offset = SM3IMM_OFFSET(cPop1); \
+ goto Next
+
+ case cJU_JPIMMED_1_02: SM3IMM( 2, SM3Imm1);
+ case cJU_JPIMMED_1_03: SM3IMM( 3, SM3Imm1);
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04: SM3IMM( 4, SM3Imm1);
+ case cJU_JPIMMED_1_05: SM3IMM( 5, SM3Imm1);
+ case cJU_JPIMMED_1_06: SM3IMM( 6, SM3Imm1);
+ case cJU_JPIMMED_1_07: SM3IMM( 7, SM3Imm1);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08: SM3IMM( 8, SM3Imm1);
+ case cJ1_JPIMMED_1_09: SM3IMM( 9, SM3Imm1);
+ case cJ1_JPIMMED_1_10: SM3IMM(10, SM3Imm1);
+ case cJ1_JPIMMED_1_11: SM3IMM(11, SM3Imm1);
+ case cJ1_JPIMMED_1_12: SM3IMM(12, SM3Imm1);
+ case cJ1_JPIMMED_1_13: SM3IMM(13, SM3Imm1);
+ case cJ1_JPIMMED_1_14: SM3IMM(14, SM3Imm1);
+ case cJ1_JPIMMED_1_15: SM3IMM(15, SM3Imm1);
+#endif
+
+SM3Imm1: JU_SETDIGIT1(*PIndex, ((uint8_t *) PJI)[offset]);
+ JU_RET_FOUND_IMM(Pjp, offset);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02: SM3IMM(2, SM3Imm2);
+ case cJU_JPIMMED_2_03: SM3IMM(3, SM3Imm2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04: SM3IMM(4, SM3Imm2);
+ case cJ1_JPIMMED_2_05: SM3IMM(5, SM3Imm2);
+ case cJ1_JPIMMED_2_06: SM3IMM(6, SM3Imm2);
+ case cJ1_JPIMMED_2_07: SM3IMM(7, SM3Imm2);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+SM3Imm2: *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+ | ((uint16_t *) PJI)[offset];
+ JU_RET_FOUND_IMM(Pjp, offset);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02: SM3IMM(2, SM3Imm3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03: SM3IMM(3, SM3Imm3);
+ case cJ1_JPIMMED_3_04: SM3IMM(4, SM3Imm3);
+ case cJ1_JPIMMED_3_05: SM3IMM(5, SM3Imm3);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+SM3Imm3:
+ {
+ Word_t lsb;
+ JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (3 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_4_02: SM3IMM(2, SM3Imm4);
+ case cJ1_JPIMMED_4_03: SM3IMM(3, SM3Imm4);
+
+SM3Imm4: *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+ | ((uint32_t *) PJI)[offset];
+ JU_RET_FOUND_IMM(Pjp, offset);
+
+ case cJ1_JPIMMED_5_02: SM3IMM(2, SM3Imm5);
+ case cJ1_JPIMMED_5_03: SM3IMM(3, SM3Imm5);
+
+SM3Imm5:
+ {
+ Word_t lsb;
+ JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (5 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+
+ case cJ1_JPIMMED_6_02: SM3IMM(2, SM3Imm6);
+
+SM3Imm6:
+ {
+ Word_t lsb;
+ JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (6 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+
+ case cJ1_JPIMMED_7_02: SM3IMM(2, SM3Imm7);
+
+SM3Imm7:
+ {
+ Word_t lsb;
+ JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (7 * offset));
+ *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+ JU_RET_FOUND_IMM(Pjp, offset);
+ }
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ----------------------------------------------------------------------------
+// OTHER CASES:
+
+ default: JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+ JUDY1CODE(return(JERRI );)
+ JUDYLCODE(return(PPJERR);)
+
+ } // SM3Findlimit switch.
+
+ /*NOTREACHED*/
+
+} // Judy1Prev() / Judy1Next() / JudyLPrev() / JudyLNext()
diff --git a/libs/klib/judy/JudyPrevNextEmpty.c b/libs/klib/judy/JudyPrevNextEmpty.c
new file mode 100644
index 0000000..7eef40d
--- /dev/null
+++ b/libs/klib/judy/JudyPrevNextEmpty.c
@@ -0,0 +1,1388 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Judy*PrevEmpty() and Judy*NextEmpty() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DJUDYNEXT for the Judy*NextEmpty() function; otherwise
+// defaults to Judy*PrevEmpty().
+//
+// Compile with -DTRACEJPSE to trace JP traversals.
+//
+// This file is separate from JudyPrevNext.c because it differs too greatly for
+// ifdefs. This might be a bit surprising, but there are two reasons:
+//
+// - First, down in the details, searching for an empty index (SearchEmpty) is
+// remarkably asymmetric with searching for a valid index (SearchValid),
+// mainly with respect to: No return of a value area for JudyL; partially-
+// full versus totally-full JPs; and handling of narrow pointers.
+//
+// - Second, we chose to implement SearchEmpty without a backtrack stack or
+// backtrack engine, partly as an experiment, and partly because we think
+// restarting from the top of the tree is less likely for SearchEmpty than
+// for SearchValid, because empty indexes are more likely than valid indexes.
+//
+// A word about naming: A prior version of this feature (see 4.13) was named
+// Judy*Free(), but there were concerns about that being read as a verb rather
+// than an adjective. After prolonged debate and based on user input, we
+// changed "Free" to "Empty".
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifndef JUDYNEXT
+#ifndef JUDYPREV
+#define JUDYPREV 1 // neither set => use default.
+#endif
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+#ifdef TRACEJPSE
+#include "JudyPrintJP.c"
+#endif
+
+
+// ****************************************************************************
+// J U D Y 1 P R E V E M P T Y
+// J U D Y 1 N E X T E M P T Y
+// J U D Y L P R E V E M P T Y
+// J U D Y L N E X T E M P T Y
+//
+// See the manual entry for the API.
+//
+// OVERVIEW OF Judy*PrevEmpty() / Judy*NextEmpty():
+//
+// See also for comparison the equivalent comments in JudyPrevNext.c.
+//
+// Take the callers *PIndex and subtract/add 1, but watch out for
+// underflow/overflow, which means "no previous/next empty index found." Use a
+// reentrant switch statement (state machine, see SMGetRestart and
+// SMGetContinue) to decode Index, starting with the JRP (PArray), through a
+// JPM and branches, if any, down to an immediate or a leaf. Look for Index in
+// that immediate or leaf, and if not found (invalid index), return success
+// (Index is empty).
+//
+// This search can result in a dead end where taking a different path is
+// required. There are four kinds of dead ends:
+//
+// BRANCH PRIMARY dead end: Encountering a fully-populated JP for the
+// appropriate digit in Index. Search sideways in the branch for the
+// previous/next absent/null/non-full JP, and if one is found, set Index to the
+// highest/lowest index possible in that JPs expanse. Then if the JP is an
+// absent or null JP, return success; otherwise for a non-full JP, traverse
+// through the partially populated JP.
+//
+// BRANCH SECONDARY dead end: Reaching the end of a branch during a sideways
+// search after a branch primary dead end. Set Index to the lowest/highest
+// index possible in the whole branchs expanse (one higher/lower than the
+// previous/next branchs expanse), then restart at the top of the tree, which
+// includes pre-decrementing/incrementing Index (again) and watching for
+// underflow/overflow (again).
+//
+// LEAF PRIMARY dead end: Finding a valid (non-empty) index in an immediate or
+// leaf matching Index. Search sideways in the immediate/leaf for the
+// previous/next empty index; if found, set *PIndex to match and return success.
+//
+// LEAF SECONDARY dead end: Reaching the end of an immediate or leaf during a
+// sideways search after a leaf primary dead end. Just as for a branch
+// secondary dead end, restart at the top of the tree with Index set to the
+// lowest/highest index possible in the whole immediate/leafs expanse.
+// TBD: If leaf secondary dead end occurs, could shortcut and treat it as a
+// branch primary dead end; but this would require remembering the parent
+// branchs type and offset (a "one-deep stack"), and also wrestling with
+// narrow pointers, at least for leaves (but not for immediates).
+//
+// Note some ASYMMETRIES between SearchValid and SearchEmpty:
+//
+// - The SearchValid code, upon descending through a narrow pointer, if Index
+// is outside the expanse of the subsidiary node (effectively a secondary
+// dead end), must decide whether to backtrack or findlimit. But the
+// SearchEmpty code simply returns success (Index is empty).
+//
+// - Similarly, the SearchValid code, upon finding no previous/next index in
+// the expanse of a narrow pointer (again, a secondary dead end), can simply
+// start to backtrack at the parent JP. But the SearchEmpty code would have
+// to first determine whether or not the parent JPs narrow expanse contains
+// a previous/next empty index outside the subexpanse. Rather than keeping a
+// parent state stack and backtracking this way, upon a secondary dead end,
+// the SearchEmpty code simply restarts at the top of the tree, whether or
+// not a narrow pointer is involved. Again, see the equivalent comments in
+// JudyPrevNext.c for comparison.
+//
+// This function is written iteratively for speed, rather than recursively.
+//
+// TBD: Wed like to enhance this function to make successive searches faster.
+// This would require saving some previous state, including the previous Index
+// returned, and in which leaf it was found. If the next call is for the same
+// Index and the array has not been modified, start at the same leaf. This
+// should be much easier to implement since this is iterative rather than
+// recursive code.
+
+#ifdef JUDY1
+#ifdef JUDYPREV
+FUNCTION int Judy1PrevEmpty
+#else
+FUNCTION int Judy1NextEmpty
+#endif
+#else
+#ifdef JUDYPREV
+FUNCTION int JudyLPrevEmpty
+#else
+FUNCTION int JudyLNextEmpty
+#endif
+#endif
+ (
+ Pcvoid_t PArray, // Judy array to search.
+ Word_t * PIndex, // starting point and result.
+ PJError_t PJError // optional, for returning error info.
+ )
+{
+ Word_t Index; // fast copy, in a register.
+ Pjp_t Pjp; // current JP.
+ Pjbl_t Pjbl; // Pjp->jp_Addr masked and cast to types:
+ Pjbb_t Pjbb;
+ Pjbu_t Pjbu;
+ Pjlb_t Pjlb;
+ PWord_t Pword; // alternate name for use by GET* macros.
+
+ Word_t digit; // next digit to decode from Index.
+ Word_t digits; // current state in SM = digits left to decode.
+ Word_t pop0; // in a leaf.
+ Word_t pop0mask; // precalculated to avoid variable shifts.
+ long offset; // within a branch or leaf (can be large).
+ int subexp; // subexpanse in a bitmap branch.
+ BITMAPB_t bitposmaskB; // bit in bitmap for bitmap branch.
+ BITMAPL_t bitposmaskL; // bit in bitmap for bitmap leaf.
+ Word_t possfullJP1; // JP types for possibly full subexpanses:
+ Word_t possfullJP2;
+ Word_t possfullJP3;
+
+
+// ----------------------------------------------------------------------------
+// M A C R O S
+//
+// These are intended to make the code a bit more readable and less redundant.
+
+
+// CHECK FOR NULL JP:
+//
+// TBD: In principle this can be reduced (here and in other *.c files) to just
+// the latter clause since no Type should ever be below cJU_JPNULL1, but in
+// fact some root pointer types can be lower, so for safety do both checks.
+
+#define JPNULL(Type) (((Type) >= cJU_JPNULL1) && ((Type) <= cJU_JPNULLMAX))
+
+
+// CHECK FOR A FULL JP:
+//
+// Given a JP, indicate if it is fully populated. Use digits, pop0mask, and
+// possfullJP1..3 in the context.
+//
+// This is a difficult problem because it requires checking the Pop0 bits for
+// all-ones, but the number of bytes depends on the JP type, which is not
+// directly related to the parent branchs type or level -- the JPs child
+// could be under a narrow pointer (hence not full). The simple answer
+// requires switching on or otherwise calculating the JP type, which could be
+// slow. Instead, in SMPREPB* precalculate pop0mask and also record in
+// possfullJP1..3 the child JP (branch) types that could possibly be full (one
+// level down), and use them here. For level-2 branches (with digits == 2),
+// the test for a full child depends on Judy1/JudyL.
+//
+// Note: This cannot be applied to the JP in a JPM because it doesnt have
+// enough pop0 digits.
+//
+// TBD: JPFULL_BRANCH diligently checks for BranchL or BranchB, where neither
+// of those can ever be full as it turns out. Could just check for a BranchU
+// at the right level. Also, pop0mask might be overkill, its not used much,
+// so perhaps just call cJU_POP0MASK(digits - 1) here?
+//
+// First, JPFULL_BRANCH checks for a full expanse for a JP whose child can be a
+// branch, that is, a JP in a branch at level 3 or higher:
+
+#define JPFULL_BRANCH(Pjp) \
+ ((((JU_JPDCDPOP0(Pjp) ^ cJU_ALLONES) & pop0mask) == 0) \
+ && ((JU_JPTYPE(Pjp) == possfullJP1) \
+ || (JU_JPTYPE(Pjp) == possfullJP2) \
+ || (JU_JPTYPE(Pjp) == possfullJP3)))
+
+#ifdef JUDY1
+#define JPFULL(Pjp) \
+ ((digits == 2) ? \
+ (JU_JPTYPE(Pjp) == cJ1_JPFULLPOPU1) : JPFULL_BRANCH(Pjp))
+#else
+#define JPFULL(Pjp) \
+ ((digits == 2) ? \
+ (JU_JPTYPE(Pjp) == cJU_JPLEAF_B1) \
+ && (((JU_JPDCDPOP0(Pjp) & cJU_POP0MASK(1)) == cJU_POP0MASK(1))) : \
+ JPFULL_BRANCH(Pjp))
+#endif
+
+
+// RETURN SUCCESS:
+//
+// This hides the need to set *PIndex back to the local value of Index -- use a
+// local value for faster operation. Note that the callers *PIndex is ALWAYS
+// modified upon success, at least decremented/incremented.
+
+#define RET_SUCCESS { *PIndex = Index; return(1); }
+
+
+// RETURN A CORRUPTION:
+
+#define RET_CORRUPT { JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); return(JERRI); }
+
+
+// SEARCH A BITMAP BRANCH:
+//
+// This is a weak analog of j__udySearchLeaf*() for bitmap branches. Return
+// the actual or next-left position, base 0, of Digit in a BITMAPB_t bitmap
+// (subexpanse of a full bitmap), also given a Bitposmask for Digit. The
+// position is the offset within the set bits.
+//
+// Unlike j__udySearchLeaf*(), the offset is not returned bit-complemented if
+// Digits bit is unset, because the caller can check the bitmap themselves to
+// determine that. Also, if Digits bit is unset, the returned offset is to
+// the next-left JP or index (including -1), not to the "ideal" position for
+// the index = next-right JP or index.
+//
+// Shortcut and skip calling j__udyCountBitsB() if the bitmap is full, in which
+// case (Digit % cJU_BITSPERSUBEXPB) itself is the base-0 offset.
+
+#define SEARCHBITMAPB(Bitmap,Digit,Bitposmask) \
+ (((Bitmap) == cJU_FULLBITMAPB) ? (Digit % cJU_BITSPERSUBEXPB) : \
+ j__udyCountBitsB((Bitmap) & JU_MASKLOWERINC(Bitposmask)) - 1)
+
+#ifdef JUDYPREV
+// Equivalent to search for the highest offset in Bitmap, that is, one less
+// than the number of bits set:
+
+#define SEARCHBITMAPMAXB(Bitmap) \
+ (((Bitmap) == cJU_FULLBITMAPB) ? cJU_BITSPERSUBEXPB - 1 : \
+ j__udyCountBitsB(Bitmap) - 1)
+#endif
+
+
+// CHECK DECODE BYTES:
+//
+// Check Decode bytes in a JP against the equivalent portion of Index. If they
+// dont match, Index is outside the subexpanse of a narrow pointer, hence is
+// empty.
+
+#define CHECKDCD(cDigits) \
+ if (JU_DCDNOTMATCHINDEX(Index, Pjp, cDigits)) RET_SUCCESS
+
+
+// REVISE REMAINDER OF INDEX:
+//
+// Put one digit in place in Index and clear/set the lower digits, if any, so
+// the resulting Index is at the start/end of an expanse, or just clear/set the
+// least digits.
+//
+// Actually, to make simple use of JU_LEASTBYTESMASK, first clear/set all least
+// digits of Index including the digit to be overridden, then set the value of
+// that one digit. If Digits == 1 the first operation is redundant, but either
+// very fast or even removed by the optimizer.
+
+#define CLEARLEASTDIGITS(Digits) Index &= ~JU_LEASTBYTESMASK(Digits)
+#define SETLEASTDIGITS( Digits) Index |= JU_LEASTBYTESMASK(Digits)
+
+#define CLEARLEASTDIGITS_D(Digit,Digits) \
+ { \
+ CLEARLEASTDIGITS(Digits); \
+ JU_SETDIGIT(Index, Digit, Digits); \
+ }
+
+#define SETLEASTDIGITS_D(Digit,Digits) \
+ { \
+ SETLEASTDIGITS(Digits); \
+ JU_SETDIGIT(Index, Digit, Digits); \
+ }
+
+
+// SET REMAINDER OF INDEX AND THEN RETURN OR CONTINUE:
+
+#define SET_AND_RETURN(OpLeastDigits,Digit,Digits) \
+ { \
+ OpLeastDigits(Digit, Digits); \
+ RET_SUCCESS; \
+ }
+
+#define SET_AND_CONTINUE(OpLeastDigits,Digit,Digits) \
+ { \
+ OpLeastDigits(Digit, Digits); \
+ goto SMGetContinue; \
+ }
+
+
+// PREPARE TO HANDLE A LEAFW OR JP BRANCH IN THE STATE MACHINE:
+//
+// Extract a state-dependent digit from Index in a "constant" way, then jump to
+// common code for multiple cases.
+//
+// TBD: Should this macro do more, such as preparing variable-shift masks for
+// use in CLEARLEASTDIGITS and SETLEASTDIGITS?
+
+#define SMPREPB(cDigits,Next,PossFullJP1,PossFullJP2,PossFullJP3) \
+ digits = (cDigits); \
+ digit = JU_DIGITATSTATE(Index, cDigits); \
+ pop0mask = cJU_POP0MASK((cDigits) - 1); /* for branchs JPs */ \
+ possfullJP1 = (PossFullJP1); \
+ possfullJP2 = (PossFullJP2); \
+ possfullJP3 = (PossFullJP3); \
+ goto Next
+
+// Variations for specific-level branches and for shorthands:
+//
+// Note: SMPREPB2 need not initialize possfullJP* because JPFULL does not use
+// them for digits == 2, but gcc -Wall isnt quite smart enough to see this, so
+// waste a bit of time and space to get rid of the warning:
+
+#define SMPREPB2(Next) \
+ digits = 2; \
+ digit = JU_DIGITATSTATE(Index, 2); \
+ pop0mask = cJU_POP0MASK(1); /* for branchs JPs */ \
+ possfullJP1 = possfullJP2 = possfullJP3 = 0; \
+ goto Next
+
+#define SMPREPB3(Next) SMPREPB(3, Next, cJU_JPBRANCH_L2, \
+ cJU_JPBRANCH_B2, \
+ cJU_JPBRANCH_U2)
+#ifndef JU_64BIT
+#define SMPREPBL(Next) SMPREPB(cJU_ROOTSTATE, Next, cJU_JPBRANCH_L3, \
+ cJU_JPBRANCH_B3, \
+ cJU_JPBRANCH_U3)
+#else
+#define SMPREPB4(Next) SMPREPB(4, Next, cJU_JPBRANCH_L3, \
+ cJU_JPBRANCH_B3, \
+ cJU_JPBRANCH_U3)
+#define SMPREPB5(Next) SMPREPB(5, Next, cJU_JPBRANCH_L4, \
+ cJU_JPBRANCH_B4, \
+ cJU_JPBRANCH_U4)
+#define SMPREPB6(Next) SMPREPB(6, Next, cJU_JPBRANCH_L5, \
+ cJU_JPBRANCH_B5, \
+ cJU_JPBRANCH_U5)
+#define SMPREPB7(Next) SMPREPB(7, Next, cJU_JPBRANCH_L6, \
+ cJU_JPBRANCH_B6, \
+ cJU_JPBRANCH_U6)
+#define SMPREPBL(Next) SMPREPB(cJU_ROOTSTATE, Next, cJU_JPBRANCH_L7, \
+ cJU_JPBRANCH_B7, \
+ cJU_JPBRANCH_U7)
+#endif
+
+
+// RESTART AFTER SECONDARY DEAD END:
+//
+// Set Index to the first/last index in the branch or leaf subexpanse and start
+// over at the top of the tree.
+
+#ifdef JUDYPREV
+#define SMRESTART(Digits) { CLEARLEASTDIGITS(Digits); goto SMGetRestart; }
+#else
+#define SMRESTART(Digits) { SETLEASTDIGITS( Digits); goto SMGetRestart; }
+#endif
+
+
+// CHECK EDGE OF LEAFS EXPANSE:
+//
+// Given the LSBs of the lowest/highest valid index in a leaf (or equivalently
+// in an immediate JP), the level (index size) of the leaf, and the full index
+// to return (as Index in the context) already set to the full index matching
+// the lowest/highest one, determine if there is an empty index in the leafs
+// expanse below/above the lowest/highest index, which is true if the
+// lowest/highest index is not at the "edge" of the leafs expanse based on its
+// LSBs. If so, return Index decremented/incremented; otherwise restart at the
+// top of the tree.
+//
+// Note: In many cases Index is already at the right spot and calling
+// SMRESTART instead of just going directly to SMGetRestart is a bit of
+// overkill.
+//
+// Note: Variable shift occurs if Digits is not a constant.
+
+#ifdef JUDYPREV
+#define LEAF_EDGE(MinIndex,Digits) \
+ { \
+ if (MinIndex) { --Index; RET_SUCCESS; } \
+ SMRESTART(Digits); \
+ }
+#else
+#define LEAF_EDGE(MaxIndex,Digits) \
+ { \
+ if ((MaxIndex) != JU_LEASTBYTES(cJU_ALLONES, Digits)) \
+ { ++Index; RET_SUCCESS; } \
+ SMRESTART(Digits); \
+ }
+#endif
+
+// Same as above except Index is not already set to match the lowest/highest
+// index, so do that before decrementing/incrementing it:
+
+#ifdef JUDYPREV
+#define LEAF_EDGE_SET(MinIndex,Digits) \
+ { \
+ if (MinIndex) \
+ { JU_SETDIGITS(Index, MinIndex, Digits); --Index; RET_SUCCESS; } \
+ SMRESTART(Digits); \
+ }
+#else
+#define LEAF_EDGE_SET(MaxIndex,Digits) \
+ { \
+ if ((MaxIndex) != JU_LEASTBYTES(cJU_ALLONES, Digits)) \
+ { JU_SETDIGITS(Index, MaxIndex, Digits); ++Index; RET_SUCCESS; } \
+ SMRESTART(Digits); \
+ }
+#endif
+
+
+// FIND A HOLE (EMPTY INDEX) IN AN IMMEDIATE OR LEAF:
+//
+// Given an index location in a leaf (or equivalently an immediate JP) known to
+// contain a usable hole (an empty index less/greater than Index), and the LSBs
+// of a minimum/maximum index to locate, find the previous/next empty index and
+// return it.
+//
+// Note: "Even" index sizes (1,2,4[,8] bytes) have corresponding native C
+// types; "odd" index sizes dont, but they are not represented here because
+// they are handled completely differently; see elsewhere.
+
+#ifdef JUDYPREV
+
+#define LEAF_HOLE_EVEN(cDigits,Pjll,IndexLSB) \
+ { \
+ while (*(Pjll) > (IndexLSB)) --(Pjll); /* too high */ \
+ if (*(Pjll) < (IndexLSB)) RET_SUCCESS /* Index is empty */ \
+ while (*(--(Pjll)) == --(IndexLSB)) /* null, find a hole */;\
+ JU_SETDIGITS(Index, IndexLSB, cDigits); \
+ RET_SUCCESS; \
+ }
+#else
+#define LEAF_HOLE_EVEN(cDigits,Pjll,IndexLSB) \
+ { \
+ while (*(Pjll) < (IndexLSB)) ++(Pjll); /* too low */ \
+ if (*(Pjll) > (IndexLSB)) RET_SUCCESS /* Index is empty */ \
+ while (*(++(Pjll)) == ++(IndexLSB)) /* null, find a hole */;\
+ JU_SETDIGITS(Index, IndexLSB, cDigits); \
+ RET_SUCCESS; \
+ }
+#endif
+
+
+// SEARCH FOR AN EMPTY INDEX IN AN IMMEDIATE OR LEAF:
+//
+// Given a pointer to the first index in a leaf (or equivalently an immediate
+// JP), the population of the leaf, and a first empty Index to find (inclusive,
+// as Index in the context), where Index is known to fall within the expanse of
+// the leaf to search, efficiently find the previous/next empty index in the
+// leaf, if any. For simplicity the following overview is stated in terms of
+// Judy*NextEmpty() only, but the same concepts apply symmetrically for
+// Judy*PrevEmpty(). Also, in each case the comparisons are for the LSBs of
+// Index and leaf indexes, according to the leafs level.
+//
+// 1. If Index is GREATER than the last (highest) index in the leaf
+// (maxindex), return success, Index is empty. (Remember, Index is known
+// to be in the leafs expanse.)
+//
+// 2. If Index is EQUAL to maxindex: If maxindex is not at the edge of the
+// leafs expanse, increment Index and return success, there is an empty
+// Index one higher than any in the leaf; otherwise restart with Index
+// reset to the upper edge of the leafs expanse. Note: This might cause
+// an extra cache line fill, but this is OK for repeatedly-called search
+// code, and it saves CPU time.
+//
+// 3. If Index is LESS than maxindex, check for "dense to end of leaf":
+// Subtract Index from maxindex, and back up that many slots in the leaf.
+// If the resulting offset is not before the start of the leaf then compare
+// the index at this offset (baseindex) with Index:
+//
+// 3a. If GREATER, the leaf must be corrupt, since indexes are sorted and
+// there are no duplicates.
+//
+// 3b. If EQUAL, the leaf is "dense" from Index to maxindex, meaning there is
+// no reason to search it. "Slide right" to the high end of the leaf
+// (modify Index to maxindex) and continue with step 2 above.
+//
+// 3c. If LESS, continue with step 4.
+//
+// 4. If the offset based on maxindex minus Index falls BEFORE the start of
+// the leaf, or if, per 3c above, baseindex is LESS than Index, the leaf is
+// guaranteed "not dense to the end" and a usable empty Index must exist.
+// This supports a more efficient search loop. Start at the FIRST index in
+// the leaf, or one BEYOND baseindex, respectively, and search the leaf as
+// follows, comparing each current index (currindex) with Index:
+//
+// 4a. If LESS, keep going to next index. Note: This is certain to terminate
+// because maxindex is known to be greater than Index, hence the loop can
+// be small and fast.
+//
+// 4b. If EQUAL, loop and increment Index until finding currindex greater than
+// Index, and return success with the modified Index.
+//
+// 4c. If GREATER, return success, Index (unmodified) is empty.
+//
+// Note: These are macros rather than functions for speed.
+
+#ifdef JUDYPREV
+
+#define JSLE_EVEN(Addr,Pop0,cDigits,LeafType) \
+ { \
+ LeafType * PjllLSB = (LeafType *) (Addr); \
+ LeafType IndexLSB = Index; /* auto-masking */ \
+ \
+ /* Index before or at start of leaf: */ \
+ \
+ if (*PjllLSB >= IndexLSB) /* no need to search */ \
+ { \
+ if (*PjllLSB > IndexLSB) RET_SUCCESS; /* Index empty */ \
+ LEAF_EDGE(*PjllLSB, cDigits); \
+ } \
+ \
+ /* Index in or after leaf: */ \
+ \
+ offset = IndexLSB - *PjllLSB; /* tentative offset */ \
+ if (offset <= (Pop0)) /* can check density */ \
+ { \
+ PjllLSB += offset; /* move to slot */ \
+ \
+ if (*PjllLSB <= IndexLSB) /* dense or corrupt */ \
+ { \
+ if (*PjllLSB == IndexLSB) /* dense, check edge */ \
+ LEAF_EDGE_SET(PjllLSB[-offset], cDigits); \
+ RET_CORRUPT; \
+ } \
+ --PjllLSB; /* not dense, start at previous */ \
+ } \
+ else PjllLSB = ((LeafType *) (Addr)) + (Pop0); /* start at max */ \
+ \
+ LEAF_HOLE_EVEN(cDigits, PjllLSB, IndexLSB); \
+ }
+
+// JSLE_ODD is completely different from JSLE_EVEN because its important to
+// minimize copying odd indexes to compare them (see 4.14). Furthermore, a
+// very complex version (4.17, but abandoned before fully debugged) that
+// avoided calling j__udySearchLeaf*() ran twice as fast as 4.14, but still
+// half as fast as SearchValid. Doug suggested that to minimize complexity and
+// share common code we should use j__udySearchLeaf*() for the initial search
+// to establish if Index is empty, which should be common. If Index is valid
+// in a leaf or immediate indexes, odds are good that an empty Index is nearby,
+// so for simplicity just use a *COPY* function to linearly search the
+// remainder.
+//
+// TBD: Pathological case? Average performance should be good, but worst-case
+// might suffer. When Search says the initial Index is valid, so a linear
+// copy-and-compare is begun, if the caller builds fairly large leaves with
+// dense clusters AND frequently does a SearchEmpty at one end of such a
+// cluster, performance wont be very good. Might a dense-check help? This
+// means checking offset against the index at offset, and then against the
+// first/last index in the leaf. We doubt the pathological case will appear
+// much in real applications because they will probably alternate SearchValid
+// and SearchEmpty calls.
+
+#define JSLE_ODD(cDigits,Pjll,Pop0,Search,Copy) \
+ { \
+ Word_t IndexLSB; /* least bytes only */ \
+ Word_t IndexFound; /* in leaf */ \
+ \
+ if ((offset = Search(Pjll, (Pop0) + 1, Index)) < 0) \
+ RET_SUCCESS; /* Index is empty */ \
+ \
+ IndexLSB = JU_LEASTBYTES(Index, cDigits); \
+ offset *= (cDigits); \
+ \
+ while ((offset -= (cDigits)) >= 0) \
+ { /* skip until empty or start */ \
+ Copy(IndexFound, ((uint8_t *) (Pjll)) + offset); \
+ if (IndexFound != (--IndexLSB)) /* found an empty */ \
+ { JU_SETDIGITS(Index, IndexLSB, cDigits); RET_SUCCESS; }\
+ } \
+ LEAF_EDGE_SET(IndexLSB, cDigits); \
+ }
+
+#else // JUDYNEXT
+
+#define JSLE_EVEN(Addr,Pop0,cDigits,LeafType) \
+ { \
+ LeafType * PjllLSB = ((LeafType *) (Addr)) + (Pop0); \
+ LeafType IndexLSB = Index; /* auto-masking */ \
+ \
+ /* Index at or after end of leaf: */ \
+ \
+ if (*PjllLSB <= IndexLSB) /* no need to search */ \
+ { \
+ if (*PjllLSB < IndexLSB) RET_SUCCESS; /* Index empty */\
+ LEAF_EDGE(*PjllLSB, cDigits); \
+ } \
+ \
+ /* Index before or in leaf: */ \
+ \
+ offset = *PjllLSB - IndexLSB; /* tentative offset */ \
+ if (offset <= (Pop0)) /* can check density */ \
+ { \
+ PjllLSB -= offset; /* move to slot */ \
+ \
+ if (*PjllLSB >= IndexLSB) /* dense or corrupt */ \
+ { \
+ if (*PjllLSB == IndexLSB) /* dense, check edge */ \
+ LEAF_EDGE_SET(PjllLSB[offset], cDigits); \
+ RET_CORRUPT; \
+ } \
+ ++PjllLSB; /* not dense, start at next */ \
+ } \
+ else PjllLSB = (LeafType *) (Addr); /* start at minimum */ \
+ \
+ LEAF_HOLE_EVEN(cDigits, PjllLSB, IndexLSB); \
+ }
+
+#define JSLE_ODD(cDigits,Pjll,Pop0,Search,Copy) \
+ { \
+ Word_t IndexLSB; /* least bytes only */ \
+ Word_t IndexFound; /* in leaf */ \
+ int offsetmax; /* in bytes */ \
+ \
+ if ((offset = Search(Pjll, (Pop0) + 1, Index)) < 0) \
+ RET_SUCCESS; /* Index is empty */ \
+ \
+ IndexLSB = JU_LEASTBYTES(Index, cDigits); \
+ offset *= (cDigits); \
+ offsetmax = (Pop0) * (cDigits); /* single multiply */ \
+ \
+ while ((offset += (cDigits)) <= offsetmax) \
+ { /* skip until empty or end */ \
+ Copy(IndexFound, ((uint8_t *) (Pjll)) + offset); \
+ if (IndexFound != (++IndexLSB)) /* found an empty */ \
+ { JU_SETDIGITS(Index, IndexLSB, cDigits); RET_SUCCESS; } \
+ } \
+ LEAF_EDGE_SET(IndexLSB, cDigits); \
+ }
+
+#endif // JUDYNEXT
+
+// Note: Immediate indexes never fill a single index group, so for odd index
+// sizes, save time by calling JSLE_ODD_IMM instead of JSLE_ODD.
+
+#define j__udySearchLeafEmpty1(Addr,Pop0) \
+ JSLE_EVEN(Addr, Pop0, 1, uint8_t)
+
+#define j__udySearchLeafEmpty2(Addr,Pop0) \
+ JSLE_EVEN(Addr, Pop0, 2, uint16_t)
+
+#define j__udySearchLeafEmpty3(Addr,Pop0) \
+ JSLE_ODD(3, Addr, Pop0, j__udySearchLeaf3, JU_COPY3_PINDEX_TO_LONG)
+
+#ifndef JU_64BIT
+
+#define j__udySearchLeafEmptyL(Addr,Pop0) \
+ JSLE_EVEN(Addr, Pop0, 4, Word_t)
+
+#else
+
+#define j__udySearchLeafEmpty4(Addr,Pop0) \
+ JSLE_EVEN(Addr, Pop0, 4, uint32_t)
+
+#define j__udySearchLeafEmpty5(Addr,Pop0) \
+ JSLE_ODD(5, Addr, Pop0, j__udySearchLeaf5, JU_COPY5_PINDEX_TO_LONG)
+
+#define j__udySearchLeafEmpty6(Addr,Pop0) \
+ JSLE_ODD(6, Addr, Pop0, j__udySearchLeaf6, JU_COPY6_PINDEX_TO_LONG)
+
+#define j__udySearchLeafEmpty7(Addr,Pop0) \
+ JSLE_ODD(7, Addr, Pop0, j__udySearchLeaf7, JU_COPY7_PINDEX_TO_LONG)
+
+#define j__udySearchLeafEmptyL(Addr,Pop0) \
+ JSLE_EVEN(Addr, Pop0, 8, Word_t)
+
+#endif // JU_64BIT
+
+
+// ----------------------------------------------------------------------------
+// START OF CODE:
+//
+// CHECK FOR SHORTCUTS:
+//
+// Error out if PIndex is null.
+
+ if (PIndex == (PWord_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return(JERRI);
+ }
+
+ Index = *PIndex; // fast local copy.
+
+// Set and pre-decrement/increment Index, watching for underflow/overflow:
+//
+// An out-of-bounds Index means failure: No previous/next empty index.
+
+SMGetRestart: // return here with revised Index.
+
+#ifdef JUDYPREV
+ if (Index-- == 0) return(0);
+#else
+ if (++Index == 0) return(0);
+#endif
+
+// An empty array with an in-bounds (not underflowed/overflowed) Index means
+// success:
+//
+// Note: This check is redundant after restarting at SMGetRestart, but should
+// take insignificant time.
+
+ if (PArray == (Pvoid_t) NULL) RET_SUCCESS;
+
+// ----------------------------------------------------------------------------
+// ROOT-LEVEL LEAF that starts with a Pop0 word; just look within the leaf:
+//
+// If Index is not in the leaf, return success; otherwise return the first
+// empty Index, if any, below/above where it would belong.
+
+ if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+ {
+ Pjlw_t Pjlw = P_JLW(PArray); // first word of leaf.
+ pop0 = Pjlw[0];
+
+#ifdef JUDY1
+ if (pop0 == 0) // special case.
+ {
+#ifdef JUDYPREV
+ if ((Index != Pjlw[1]) || (Index-- != 0)) RET_SUCCESS;
+#else
+ if ((Index != Pjlw[1]) || (++Index != 0)) RET_SUCCESS;
+#endif
+ return(0); // no previous/next empty index.
+ }
+#endif // JUDY1
+
+ j__udySearchLeafEmptyL(Pjlw + 1, pop0);
+
+// No return -- thanks ALAN
+
+ }
+ else
+
+// ----------------------------------------------------------------------------
+// HANDLE JRP Branch:
+//
+// For JRP branches, traverse the JPM; handle LEAFW
+// directly; but look for the most common cases first.
+
+ {
+ Pjpm_t Pjpm = P_JPM(PArray);
+ Pjp = &(Pjpm->jpm_JP);
+
+// goto SMGetContinue;
+ }
+
+
+// ============================================================================
+// STATE MACHINE -- GET INDEX:
+//
+// Search for Index (already decremented/incremented so as to be an inclusive
+// search). If not found (empty index), return success. Otherwise do a
+// previous/next search, and if successful modify Index to the empty index
+// found. See function header comments.
+//
+// ENTRY: Pjp points to next JP to interpret, whose Decode bytes have not yet
+// been checked.
+//
+// Note: Check Decode bytes at the start of each loop, not after looking up a
+// new JP, so its easy to do constant shifts/masks.
+//
+// EXIT: Return, or branch to SMGetRestart with modified Index, or branch to
+// SMGetContinue with a modified Pjp, as described elsewhere.
+//
+// WARNING: For run-time efficiency the following cases replicate code with
+// varying constants, rather than using common code with variable values!
+
+SMGetContinue: // return here for next branch/leaf.
+
+#ifdef TRACEJPSE
+ JudyPrintJP(Pjp, "sf", __LINE__);
+#endif
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then search for a JP for the
+// next digit in Index.
+
+ case cJU_JPBRANCH_L2: CHECKDCD(2); SMPREPB2(SMBranchL);
+ case cJU_JPBRANCH_L3: CHECKDCD(3); SMPREPB3(SMBranchL);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_L4: CHECKDCD(4); SMPREPB4(SMBranchL);
+ case cJU_JPBRANCH_L5: CHECKDCD(5); SMPREPB5(SMBranchL);
+ case cJU_JPBRANCH_L6: CHECKDCD(6); SMPREPB6(SMBranchL);
+ case cJU_JPBRANCH_L7: CHECKDCD(7); SMPREPB7(SMBranchL);
+#endif
+ case cJU_JPBRANCH_L: SMPREPBL(SMBranchL);
+
+// Common code (state-independent) for all cases of linear branches:
+
+SMBranchL:
+ Pjbl = P_JBL(Pjp->jp_Addr);
+
+// First, check if Indexs expanse (digit) is below/above the first/last
+// populated expanse in the BranchL, in which case Index is empty; otherwise
+// find the offset of the lowest/highest populated expanse at or above/below
+// digit, if any:
+//
+// Note: The for-loop is guaranteed to exit eventually because the first/last
+// expanse is known to be a terminator.
+//
+// Note: Cannot use j__udySearchLeaf*Empty1() here because it only applies to
+// leaves and does not know about partial versus full JPs, unlike the use of
+// j__udySearchLeaf1() for BranchLs in SearchValid code. Also, since linear
+// leaf expanse lists are small, dont waste time calling j__udySearchLeaf1(),
+// just scan the expanse list.
+
+#ifdef JUDYPREV
+ if ((Pjbl->jbl_Expanse[0]) > digit) RET_SUCCESS;
+
+ for (offset = (Pjbl->jbl_NumJPs) - 1; /* null */; --offset)
+#else
+ if ((Pjbl->jbl_Expanse[(Pjbl->jbl_NumJPs) - 1]) < digit)
+ RET_SUCCESS;
+
+ for (offset = 0; /* null */; ++offset)
+#endif
+ {
+
+// Too low/high, keep going; or too high/low, meaning the loop passed a hole
+// and the initial Index is empty:
+
+#ifdef JUDYPREV
+ if ((Pjbl->jbl_Expanse[offset]) > digit) continue;
+ if ((Pjbl->jbl_Expanse[offset]) < digit) RET_SUCCESS;
+#else
+ if ((Pjbl->jbl_Expanse[offset]) < digit) continue;
+ if ((Pjbl->jbl_Expanse[offset]) > digit) RET_SUCCESS;
+#endif
+
+// Found expanse matching digit; if its not full, traverse through it:
+
+ if (! JPFULL((Pjbl->jbl_jp) + offset))
+ {
+ Pjp = (Pjbl->jbl_jp) + offset;
+ goto SMGetContinue;
+ }
+
+// Common code: While searching for a lower/higher hole or a non-full JP, upon
+// finding a lower/higher hole, adjust Index using the revised digit and
+// return; or upon finding a consecutive lower/higher expanse, if the expanses
+// JP is non-full, modify Index and traverse through the JP:
+
+#define BRANCHL_CHECK(OpIncDec,OpLeastDigits,Digit,Digits) \
+ { \
+ if ((Pjbl->jbl_Expanse[offset]) != OpIncDec digit) \
+ SET_AND_RETURN(OpLeastDigits, Digit, Digits); \
+ \
+ if (! JPFULL((Pjbl->jbl_jp) + offset)) \
+ { \
+ Pjp = (Pjbl->jbl_jp) + offset; \
+ SET_AND_CONTINUE(OpLeastDigits, Digit, Digits); \
+ } \
+ }
+
+// BranchL primary dead end: Expanse matching Index/digit is full (rare except
+// for dense/sequential indexes):
+//
+// Search for a lower/higher hole, a non-full JP, or the end of the expanse
+// list, while decrementing/incrementing digit.
+
+#ifdef JUDYPREV
+ while (--offset >= 0)
+ BRANCHL_CHECK(--, SETLEASTDIGITS_D, digit, digits)
+#else
+ while (++offset < Pjbl->jbl_NumJPs)
+ BRANCHL_CHECK(++, CLEARLEASTDIGITS_D, digit, digits)
+#endif
+
+// Passed end of BranchL expanse list after finding a matching but full
+// expanse:
+//
+// Digit now matches the lowest/highest expanse, which is a full expanse; if
+// digit is at the end of BranchLs expanse (no hole before/after), break out
+// of the loop; otherwise modify Index to the next lower/higher digit and
+// return success:
+
+#ifdef JUDYPREV
+ if (digit == 0) break;
+ --digit; SET_AND_RETURN(SETLEASTDIGITS_D, digit, digits);
+#else
+ if (digit == JU_LEASTBYTES(cJU_ALLONES, 1)) break;
+ ++digit; SET_AND_RETURN(CLEARLEASTDIGITS_D, digit, digits);
+#endif
+ } // for-loop
+
+// BranchL secondary dead end, no non-full previous/next JP:
+
+ SMRESTART(digits);
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then search for a JP for the
+// next digit in Index.
+
+ case cJU_JPBRANCH_B2: CHECKDCD(2); SMPREPB2(SMBranchB);
+ case cJU_JPBRANCH_B3: CHECKDCD(3); SMPREPB3(SMBranchB);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_B4: CHECKDCD(4); SMPREPB4(SMBranchB);
+ case cJU_JPBRANCH_B5: CHECKDCD(5); SMPREPB5(SMBranchB);
+ case cJU_JPBRANCH_B6: CHECKDCD(6); SMPREPB6(SMBranchB);
+ case cJU_JPBRANCH_B7: CHECKDCD(7); SMPREPB7(SMBranchB);
+#endif
+ case cJU_JPBRANCH_B: SMPREPBL(SMBranchB);
+
+// Common code (state-independent) for all cases of bitmap branches:
+
+SMBranchB:
+ Pjbb = P_JBB(Pjp->jp_Addr);
+
+// Locate the digits JP in the subexpanse list, if present:
+
+ subexp = digit / cJU_BITSPERSUBEXPB;
+ assert(subexp < cJU_NUMSUBEXPB); // falls in expected range.
+ bitposmaskB = JU_BITPOSMASKB(digit);
+
+// Absent JP = no JP matches current digit in Index:
+
+// if (! JU_BITMAPTESTB(Pjbb, digit)) // slower.
+ if (! (JU_JBB_BITMAP(Pjbb, subexp) & bitposmaskB)) // faster.
+ RET_SUCCESS;
+
+// Non-full JP matches current digit in Index:
+//
+// Iterate to the subsidiary non-full JP.
+
+ offset = SEARCHBITMAPB(JU_JBB_BITMAP(Pjbb, subexp), digit,
+ bitposmaskB);
+ // not negative since at least one bit is set:
+ assert(offset >= 0);
+ assert(offset < (int) cJU_BITSPERSUBEXPB);
+
+// Watch for null JP subarray pointer with non-null bitmap (a corruption):
+
+ if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp)))
+ == (Pjp_t) NULL) RET_CORRUPT;
+
+ Pjp += offset;
+ if (! JPFULL(Pjp)) goto SMGetContinue;
+
+// BranchB primary dead end:
+//
+// Upon hitting a full JP in a BranchB for the next digit in Index, search
+// sideways for a previous/next absent JP (unset bit) or non-full JP (set bit
+// with non-full JP); first in the current bitmap subexpanse, then in
+// lower/higher subexpanses. Upon entry, Pjp points to a known-unusable JP,
+// ready to decrement/increment.
+//
+// Note: The preceding code is separate from this loop because Index does not
+// need revising (see SET_AND_*()) if the initial index is an empty index.
+//
+// TBD: For speed, shift bitposmaskB instead of using JU_BITMAPTESTB or
+// JU_BITPOSMASKB, but this shift has knowledge of bit order that really should
+// be encapsulated in a header file.
+
+#define BRANCHB_CHECKBIT(OpLeastDigits) \
+ if (! (JU_JBB_BITMAP(Pjbb, subexp) & bitposmaskB)) /* absent JP */ \
+ SET_AND_RETURN(OpLeastDigits, digit, digits)
+
+#define BRANCHB_CHECKJPFULL(OpLeastDigits) \
+ if (! JPFULL(Pjp)) \
+ SET_AND_CONTINUE(OpLeastDigits, digit, digits)
+
+#define BRANCHB_STARTSUBEXP(OpLeastDigits) \
+ if (! JU_JBB_BITMAP(Pjbb, subexp)) /* empty subexpanse, shortcut */ \
+ SET_AND_RETURN(OpLeastDigits, digit, digits) \
+ if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL) RET_CORRUPT
+
+#ifdef JUDYPREV
+
+ --digit; // skip initial digit.
+ bitposmaskB >>= 1; // see TBD above.
+
+BranchBNextSubexp: // return here to check next bitmap subexpanse.
+
+ while (bitposmaskB) // more bits to check in subexp.
+ {
+ BRANCHB_CHECKBIT(SETLEASTDIGITS_D);
+ --Pjp; // previous in subarray.
+ BRANCHB_CHECKJPFULL(SETLEASTDIGITS_D);
+ assert(digit >= 0);
+ --digit;
+ bitposmaskB >>= 1;
+ }
+
+ if (subexp-- > 0) // more subexpanses.
+ {
+ BRANCHB_STARTSUBEXP(SETLEASTDIGITS_D);
+ Pjp += SEARCHBITMAPMAXB(JU_JBB_BITMAP(Pjbb, subexp)) + 1;
+ bitposmaskB = (1U << (cJU_BITSPERSUBEXPB - 1));
+ goto BranchBNextSubexp;
+ }
+
+#else // JUDYNEXT
+
+ ++digit; // skip initial digit.
+ bitposmaskB <<= 1; // note: BITMAPB_t.
+
+BranchBNextSubexp: // return here to check next bitmap subexpanse.
+
+ while (bitposmaskB) // more bits to check in subexp.
+ {
+ BRANCHB_CHECKBIT(CLEARLEASTDIGITS_D);
+ ++Pjp; // previous in subarray.
+ BRANCHB_CHECKJPFULL(CLEARLEASTDIGITS_D);
+ assert(digit < cJU_SUBEXPPERSTATE);
+ ++digit;
+ bitposmaskB <<= 1; // note: BITMAPB_t.
+ }
+
+ if (++subexp < cJU_NUMSUBEXPB) // more subexpanses.
+ {
+ BRANCHB_STARTSUBEXP(CLEARLEASTDIGITS_D);
+ --Pjp; // pre-decrement.
+ bitposmaskB = 1;
+ goto BranchBNextSubexp;
+ }
+
+#endif // JUDYNEXT
+
+// BranchB secondary dead end, no non-full previous/next JP:
+
+ SMRESTART(digits);
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then search for a JP for the
+// next digit in Index.
+
+ case cJU_JPBRANCH_U2: CHECKDCD(2); SMPREPB2(SMBranchU);
+ case cJU_JPBRANCH_U3: CHECKDCD(3); SMPREPB3(SMBranchU);
+#ifdef JU_64BIT
+ case cJU_JPBRANCH_U4: CHECKDCD(4); SMPREPB4(SMBranchU);
+ case cJU_JPBRANCH_U5: CHECKDCD(5); SMPREPB5(SMBranchU);
+ case cJU_JPBRANCH_U6: CHECKDCD(6); SMPREPB6(SMBranchU);
+ case cJU_JPBRANCH_U7: CHECKDCD(7); SMPREPB7(SMBranchU);
+#endif
+ case cJU_JPBRANCH_U: SMPREPBL(SMBranchU);
+
+// Common code (state-independent) for all cases of uncompressed branches:
+
+SMBranchU:
+ Pjbu = P_JBU(Pjp->jp_Addr);
+ Pjp = (Pjbu->jbu_jp) + digit;
+
+// Absent JP = null JP for current digit in Index:
+
+ if (JPNULL(JU_JPTYPE(Pjp))) RET_SUCCESS;
+
+// Non-full JP matches current digit in Index:
+//
+// Iterate to the subsidiary JP.
+
+ if (! JPFULL(Pjp)) goto SMGetContinue;
+
+// BranchU primary dead end:
+//
+// Upon hitting a full JP in a BranchU for the next digit in Index, search
+// sideways for a previous/next null or non-full JP. BRANCHU_CHECKJP() is
+// shorthand for common code.
+//
+// Note: The preceding code is separate from this loop because Index does not
+// need revising (see SET_AND_*()) if the initial index is an empty index.
+
+#define BRANCHU_CHECKJP(OpIncDec,OpLeastDigits) \
+ { \
+ OpIncDec Pjp; \
+ \
+ if (JPNULL(JU_JPTYPE(Pjp))) \
+ SET_AND_RETURN(OpLeastDigits, digit, digits) \
+ \
+ if (! JPFULL(Pjp)) \
+ SET_AND_CONTINUE(OpLeastDigits, digit, digits) \
+ }
+
+#ifdef JUDYPREV
+ while (digit-- > 0)
+ BRANCHU_CHECKJP(--, SETLEASTDIGITS_D);
+#else
+ while (++digit < cJU_BRANCHUNUMJPS)
+ BRANCHU_CHECKJP(++, CLEARLEASTDIGITS_D);
+#endif
+
+// BranchU secondary dead end, no non-full previous/next JP:
+
+ SMRESTART(digits);
+
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF:
+//
+// Check Decode bytes, if any, in the current JP, then search the leaf for the
+// previous/next empty index starting at Index. Primary leaf dead end is
+// hidden within j__udySearchLeaf*Empty*(). In case of secondary leaf dead
+// end, restart at the top of the tree.
+//
+// Note: Pword is the name known to GET*; think of it as Pjlw.
+
+#define SMLEAFL(cDigits,Func) \
+ Pword = (PWord_t) P_JLW(Pjp->jp_Addr); \
+ pop0 = JU_JPLEAF_POP0(Pjp); \
+ Func(Pword, pop0)
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+ case cJU_JPLEAF1: CHECKDCD(1); SMLEAFL(1, j__udySearchLeafEmpty1);
+#endif
+ case cJU_JPLEAF2: CHECKDCD(2); SMLEAFL(2, j__udySearchLeafEmpty2);
+ case cJU_JPLEAF3: CHECKDCD(3); SMLEAFL(3, j__udySearchLeafEmpty3);
+
+#ifdef JU_64BIT
+ case cJU_JPLEAF4: CHECKDCD(4); SMLEAFL(4, j__udySearchLeafEmpty4);
+ case cJU_JPLEAF5: CHECKDCD(5); SMLEAFL(5, j__udySearchLeafEmpty5);
+ case cJU_JPLEAF6: CHECKDCD(6); SMLEAFL(6, j__udySearchLeafEmpty6);
+ case cJU_JPLEAF7: CHECKDCD(7); SMLEAFL(7, j__udySearchLeafEmpty7);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF:
+//
+// Check Decode bytes, if any, in the current JP, then search the leaf for the
+// previous/next empty index starting at Index.
+
+ case cJU_JPLEAF_B1:
+
+ CHECKDCD(1);
+
+ Pjlb = P_JLB(Pjp->jp_Addr);
+ digit = JU_DIGITATSTATE(Index, 1);
+ subexp = digit / cJU_BITSPERSUBEXPL;
+ bitposmaskL = JU_BITPOSMASKL(digit);
+ assert(subexp < cJU_NUMSUBEXPL); // falls in expected range.
+
+// Absent index = no index matches current digit in Index:
+
+// if (! JU_BITMAPTESTL(Pjlb, digit)) // slower.
+ if (! (JU_JLB_BITMAP(Pjlb, subexp) & bitposmaskL)) // faster.
+ RET_SUCCESS;
+
+// LeafB1 primary dead end:
+//
+// Upon hitting a valid (non-empty) index in a LeafB1 for the last digit in
+// Index, search sideways for a previous/next absent index, first in the
+// current bitmap subexpanse, then in lower/higher subexpanses.
+// LEAFB1_CHECKBIT() is shorthand for common code to handle one bit in one
+// bitmap subexpanse.
+//
+// Note: The preceding code is separate from this loop because Index does not
+// need revising (see SET_AND_*()) if the initial index is an empty index.
+//
+// TBD: For speed, shift bitposmaskL instead of using JU_BITMAPTESTL or
+// JU_BITPOSMASKL, but this shift has knowledge of bit order that really should
+// be encapsulated in a header file.
+
+#define LEAFB1_CHECKBIT(OpLeastDigits) \
+ if (! (JU_JLB_BITMAP(Pjlb, subexp) & bitposmaskL)) \
+ SET_AND_RETURN(OpLeastDigits, digit, 1)
+
+#define LEAFB1_STARTSUBEXP(OpLeastDigits) \
+ if (! JU_JLB_BITMAP(Pjlb, subexp)) /* empty subexp */ \
+ SET_AND_RETURN(OpLeastDigits, digit, 1)
+
+#ifdef JUDYPREV
+
+ --digit; // skip initial digit.
+ bitposmaskL >>= 1; // see TBD above.
+
+LeafB1NextSubexp: // return here to check next bitmap subexpanse.
+
+ while (bitposmaskL) // more bits to check in subexp.
+ {
+ LEAFB1_CHECKBIT(SETLEASTDIGITS_D);
+ assert(digit >= 0);
+ --digit;
+ bitposmaskL >>= 1;
+ }
+
+ if (subexp-- > 0) // more subexpanses.
+ {
+ LEAFB1_STARTSUBEXP(SETLEASTDIGITS_D);
+ bitposmaskL = ((Word_t)1U << (cJU_BITSPERSUBEXPL - 1));
+ goto LeafB1NextSubexp;
+ }
+
+#else // JUDYNEXT
+
+ ++digit; // skip initial digit.
+ bitposmaskL <<= 1; // note: BITMAPL_t.
+
+LeafB1NextSubexp: // return here to check next bitmap subexpanse.
+
+ while (bitposmaskL) // more bits to check in subexp.
+ {
+ LEAFB1_CHECKBIT(CLEARLEASTDIGITS_D);
+ assert(digit < cJU_SUBEXPPERSTATE);
+ ++digit;
+ bitposmaskL <<= 1; // note: BITMAPL_t.
+ }
+
+ if (++subexp < cJU_NUMSUBEXPL) // more subexpanses.
+ {
+ LEAFB1_STARTSUBEXP(CLEARLEASTDIGITS_D);
+ bitposmaskL = 1;
+ goto LeafB1NextSubexp;
+ }
+
+#endif // JUDYNEXT
+
+// LeafB1 secondary dead end, no empty index:
+
+ SMRESTART(1);
+
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// If the Decode bytes do not match, Index is empty (without modification);
+// otherwise restart.
+
+ case cJ1_JPFULLPOPU1:
+
+ CHECKDCD(1);
+ SMRESTART(1);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+//
+// Pop1 = 1 Immediate JPs:
+//
+// If Index is not in the immediate JP, return success; otherwise check if
+// there is an empty index below/above the immediate JPs index, and if so,
+// return success with modified Index, else restart.
+//
+// Note: Doug says its fast enough to calculate the index size (digits) in
+// the following; no need to set it separately for each case.
+
+ case cJU_JPIMMED_1_01:
+ case cJU_JPIMMED_2_01:
+ case cJU_JPIMMED_3_01:
+#ifdef JU_64BIT
+ case cJU_JPIMMED_4_01:
+ case cJU_JPIMMED_5_01:
+ case cJU_JPIMMED_6_01:
+ case cJU_JPIMMED_7_01:
+#endif
+ if (JU_JPDCDPOP0(Pjp) != JU_TRIMTODCDSIZE(Index)) RET_SUCCESS;
+ digits = JU_JPTYPE(Pjp) - cJU_JPIMMED_1_01 + 1;
+ LEAF_EDGE(JU_LEASTBYTES(JU_JPDCDPOP0(Pjp), digits), digits);
+
+// Immediate JPs with Pop1 > 1:
+
+#define IMM_MULTI(Func,BaseJPType) \
+ JUDY1CODE(Pword = (PWord_t) (Pjp->jp_1Index);) \
+ JUDYLCODE(Pword = (PWord_t) (Pjp->jp_LIndex);) \
+ Func(Pword, JU_JPTYPE(Pjp) - (BaseJPType) + 1)
+
+ case cJU_JPIMMED_1_02:
+ case cJU_JPIMMED_1_03:
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_1_04:
+ case cJU_JPIMMED_1_05:
+ case cJU_JPIMMED_1_06:
+ case cJU_JPIMMED_1_07:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_1_08:
+ case cJ1_JPIMMED_1_09:
+ case cJ1_JPIMMED_1_10:
+ case cJ1_JPIMMED_1_11:
+ case cJ1_JPIMMED_1_12:
+ case cJ1_JPIMMED_1_13:
+ case cJ1_JPIMMED_1_14:
+ case cJ1_JPIMMED_1_15:
+#endif
+ IMM_MULTI(j__udySearchLeafEmpty1, cJU_JPIMMED_1_02);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_2_02:
+ case cJU_JPIMMED_2_03:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_2_04:
+ case cJ1_JPIMMED_2_05:
+ case cJ1_JPIMMED_2_06:
+ case cJ1_JPIMMED_2_07:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ IMM_MULTI(j__udySearchLeafEmpty2, cJU_JPIMMED_2_02);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+ case cJU_JPIMMED_3_02:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_3_03:
+ case cJ1_JPIMMED_3_04:
+ case cJ1_JPIMMED_3_05:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+ IMM_MULTI(j__udySearchLeafEmpty3, cJU_JPIMMED_3_02);
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+ case cJ1_JPIMMED_4_02:
+ case cJ1_JPIMMED_4_03:
+ IMM_MULTI(j__udySearchLeafEmpty4, cJ1_JPIMMED_4_02);
+
+ case cJ1_JPIMMED_5_02:
+ case cJ1_JPIMMED_5_03:
+ IMM_MULTI(j__udySearchLeafEmpty5, cJ1_JPIMMED_5_02);
+
+ case cJ1_JPIMMED_6_02:
+ IMM_MULTI(j__udySearchLeafEmpty6, cJ1_JPIMMED_6_02);
+
+ case cJ1_JPIMMED_7_02:
+ IMM_MULTI(j__udySearchLeafEmpty7, cJ1_JPIMMED_7_02);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// INVALID JP TYPE:
+
+ default: RET_CORRUPT;
+
+ } // SMGet switch.
+
+} // Judy1PrevEmpty() / Judy1NextEmpty() / JudyLPrevEmpty() / JudyLNextEmpty()
diff --git a/libs/klib/judy/JudyPrintJP.c b/libs/klib/judy/JudyPrintJP.c
new file mode 100644
index 0000000..3764da1
--- /dev/null
+++ b/libs/klib/judy/JudyPrintJP.c
@@ -0,0 +1,399 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// JudyPrintJP() debugging/tracing function for Judy1 or JudyL code.
+// The caller should #include this file, with its static function (replicated
+// in each compilation unit), in another *.c file, and compile with one of
+// -DJUDY1 or -DJUDYL.
+//
+// The caller can set j__udyIndex and/or j__udyPopulation non-zero to have
+// those values reported, and also to control trace-enabling (see below).
+//
+// Tracing is disabled by default unless one or both of two env parameters is
+// set (regardless of value). If either value is set but null or evaluates to
+// zero, tracing is immediately enabled. To disable tracing until a particular
+// j__udy*Index value is seen, set STARTINDEX=<hex-index> in the env. To
+// disable it until a particular j__udy*Population value is seen, set
+// STARTPOP=<decimal-population> in the env. Once either condition is met,
+// tracing "latches on".
+//
+// Example:
+//
+// STARTPOP=0 // immediate tracing.
+// STARTINDEX=f35430a8 // not until one of these is met.
+// STARTPOP=1000000
+//
+// Note: Trace-enabling does nothing unless the caller sets the appropriate
+// global variable non-zero.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#include <stdlib.h> // for getenv() and strtoul().
+
+
+// GLOBALS FROM CALLER:
+//
+// Note: This storage is declared once in each compilation unit that includes
+// this file, but the linker should merge all cases into single locations, but
+// ONLY if these are uninitialized, so ASSUME they are 0 to start.
+
+Word_t j__udyIndex; // current Index itself, optional from caller.
+Word_t j__udyPopulation; // Indexes in array, optional from caller.
+
+// Other globals:
+
+static Word_t startindex = 0; // see usage below.
+static Word_t startpop = 0;
+static bool_t enabled = FALSE; // by default, unless env params set.
+
+// Shorthand for announcing JP addresses, Desc (in context), and JP types:
+//
+// Note: Width is at least one blank wider than any JP type name, and the line
+// is left unfinished.
+//
+// Note: Use a format for address printing compatible with other tracing
+// facilities; in particular, %x not %lx, to truncate the "noisy" high part on
+// 64-bit systems.
+
+#define JPTYPE(Type) printf("0x%lx %s %-17s", (Word_t) Pjp, Desc, Type)
+
+// Shorthands for announcing expanse populations from DcdPopO fields:
+
+#define POP0 printf("Pop1 = 0 ")
+#define POP1 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) & 0xff) + 1))
+#define POP2 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) & 0xffff) + 1))
+#define POP3 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) & 0xffffff) + 1))
+#ifdef JU_64BIT
+#define POP4 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) & 0xffffffff) + 1))
+#define POP5 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) & 0xffffffffff) + 1))
+#define POP6 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) & 0xffffffffffff) + 1))
+#define POP7 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) & 0xffffffffffffff) + 1))
+#endif
+
+// Shorthands for announcing populations of Immeds:
+//
+// Note: Line up the small populations that often occur together, but beyond
+// that, dont worry about it because populations can get arbitrarily large.
+
+#define POP_1 printf("Pop1 = 1 ")
+#define POP_2 printf("Pop1 = 2 ")
+#define POP_3 printf("Pop1 = 3 ")
+#define POP_4 printf("Pop1 = 4 ")
+#define POP_5 printf("Pop1 = 5 ")
+#define POP_6 printf("Pop1 = 6 ")
+#define POP_7 printf("Pop1 = 7 ")
+#define POP_8 printf("Pop1 = 8 ")
+#define POP_9 printf("Pop1 = 8 ")
+#define POP_10 printf("Pop1 = 10 ")
+#define POP_11 printf("Pop1 = 11 ")
+#define POP_12 printf("Pop1 = 12 ")
+#define POP_13 printf("Pop1 = 13 ")
+#define POP_14 printf("Pop1 = 14 ")
+#define POP_15 printf("Pop1 = 15 ")
+
+// Shorthands for other announcements:
+
+#define NUMJPSL printf("NumJPs = %d ", P_JBL(Pjp->jp_Addr)->jbl_NumJPs)
+#define OOPS printf("-- OOPS, invalid Type\n"); exit(1)
+
+// This is harder to compute:
+
+#define NUMJPSB \
+ { \
+ Pjbb_t Pjbb = P_JBB(Pjp->jp_Addr); \
+ Word_t subexp; \
+ int numJPs = 0; \
+ \
+ for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp) \
+ numJPs += j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));\
+ \
+ printf("NumJPs = %d ", numJPs); \
+ }
+
+
+// ****************************************************************************
+// J U D Y P R I N T J P
+//
+// Dump information about a JP, at least its address, type, population, and
+// number of JPs, as appropriate. Error out upon any unexpected JP type.
+//
+// TBD: Dump more detailed information about the JP?
+
+FUNCTION static void JudyPrintJP(
+ Pjp_t Pjp, // JP to describe.
+ char * Desc, // brief description of caller, such as "i".
+ int Line) // callers source line number.
+{
+static bool_t checked = FALSE; // set upon first entry and check for params.
+ char * value; // for getenv().
+
+
+// CHECK FOR EXTERNAL ENABLING:
+//
+// If a parameter is set, report the value, even if it is null or otherwise
+// evaluates to zero, in which case enable tracing immediately; otherwise wait
+// for the value to be hit.
+
+#define GETENV(Name,Value,Base) \
+ if ((value = getenv (Name)) != (char *) NULL) \
+ { \
+ (Value) = strtoul (value, (char **) NULL, Base); \
+ enabled |= ((Value) == 0); /* see above */ \
+ \
+ (void) printf ("JudyPrintJP(\"%s\"): $%s = %lu\n", \
+ Desc, Name, Value); \
+ }
+
+ if (! checked) // only check once.
+ {
+ checked = TRUE;
+
+ GETENV ("STARTINDEX", startindex, 16);
+ GETENV ("STARTPOP", startpop, 10);
+
+ (void) printf ("JudyPrintJP(\"%s\"): Tracing present %s\n", Desc,
+ enabled ? "and immediately enabled" :
+ (startindex || startpop) ?
+ "but disabled until start condition met" :
+ "but not enabled by env parameter");
+ }
+
+ if (! enabled) // check repeatedly until latched enabled:
+ {
+ if (startindex && (startindex == j__udyIndex))
+ {
+ (void) printf ("=== TRACING ENABLED (\"%s\"), "
+ "startindex = 0x%lx\n", Desc, startindex);
+ enabled = TRUE;
+ }
+ else if (startpop && (startpop == j__udyPopulation))
+ {
+ (void) printf ("=== TRACING ENABLED (\"%s\"), "
+ "startpop = %lu\n", Desc, startpop);
+ enabled = TRUE;
+ }
+ else
+ {
+ return; // print nothing this time.
+ }
+ }
+
+
+// SWITCH ON JP TYPE:
+
+ switch (JU_JPTYPE(Pjp))
+ {
+
+// Note: The following COULD be merged more tightly between Judy1 and JudyL,
+// but we decided that the output should say cJ1*/cJL*, not cJU*, to be more
+// specific.
+
+#ifdef JUDY1
+ case cJ1_JPNULL1: JPTYPE("cJ1_JPNULL1"); POP0; break;
+ case cJ1_JPNULL2: JPTYPE("cJ1_JPNULL2"); POP0; break;
+ case cJ1_JPNULL3: JPTYPE("cJ1_JPNULL3"); POP0; break;
+#ifdef JU_64BIT
+ case cJ1_JPNULL4: JPTYPE("cJ1_JPNULL4"); POP0; break;
+ case cJ1_JPNULL5: JPTYPE("cJ1_JPNULL5"); POP0; break;
+ case cJ1_JPNULL6: JPTYPE("cJ1_JPNULL6"); POP0; break;
+ case cJ1_JPNULL7: JPTYPE("cJ1_JPNULL7"); POP0; break;
+#endif
+
+ case cJ1_JPBRANCH_L2: JPTYPE("cJ1_JPBRANCH_L2"); POP2;NUMJPSL;break;
+ case cJ1_JPBRANCH_L3: JPTYPE("cJ1_JPBRANCH_L3"); POP3;NUMJPSL;break;
+#ifdef JU_64BIT
+ case cJ1_JPBRANCH_L4: JPTYPE("cJ1_JPBRANCH_L4"); POP4;NUMJPSL;break;
+ case cJ1_JPBRANCH_L5: JPTYPE("cJ1_JPBRANCH_L5"); POP5;NUMJPSL;break;
+ case cJ1_JPBRANCH_L6: JPTYPE("cJ1_JPBRANCH_L6"); POP6;NUMJPSL;break;
+ case cJ1_JPBRANCH_L7: JPTYPE("cJ1_JPBRANCH_L7"); POP7;NUMJPSL;break;
+#endif
+ case cJ1_JPBRANCH_L: JPTYPE("cJ1_JPBRANCH_L"); NUMJPSL;break;
+
+ case cJ1_JPBRANCH_B2: JPTYPE("cJ1_JPBRANCH_B2"); POP2;NUMJPSB;break;
+ case cJ1_JPBRANCH_B3: JPTYPE("cJ1_JPBRANCH_B3"); POP3;NUMJPSB;break;
+#ifdef JU_64BIT
+ case cJ1_JPBRANCH_B4: JPTYPE("cJ1_JPBRANCH_B4"); POP4;NUMJPSB;break;
+ case cJ1_JPBRANCH_B5: JPTYPE("cJ1_JPBRANCH_B5"); POP5;NUMJPSB;break;
+ case cJ1_JPBRANCH_B6: JPTYPE("cJ1_JPBRANCH_B6"); POP6;NUMJPSB;break;
+ case cJ1_JPBRANCH_B7: JPTYPE("cJ1_JPBRANCH_B7"); POP7;NUMJPSB;break;
+#endif
+ case cJ1_JPBRANCH_B: JPTYPE("cJ1_JPBRANCH_B"); NUMJPSB;break;
+
+ case cJ1_JPBRANCH_U2: JPTYPE("cJ1_JPBRANCH_U2"); POP2; break;
+ case cJ1_JPBRANCH_U3: JPTYPE("cJ1_JPBRANCH_U3"); POP3; break;
+#ifdef JU_64BIT
+ case cJ1_JPBRANCH_U4: JPTYPE("cJ1_JPBRANCH_U4"); POP4; break;
+ case cJ1_JPBRANCH_U5: JPTYPE("cJ1_JPBRANCH_U5"); POP5; break;
+ case cJ1_JPBRANCH_U6: JPTYPE("cJ1_JPBRANCH_U6"); POP6; break;
+ case cJ1_JPBRANCH_U7: JPTYPE("cJ1_JPBRANCH_U7"); POP7; break;
+#endif
+ case cJ1_JPBRANCH_U: JPTYPE("cJ1_JPBRANCH_U"); break;
+
+#ifndef JU_64BIT
+ case cJ1_JPLEAF1: JPTYPE("cJ1_JPLEAF1"); POP1; break;
+#endif
+ case cJ1_JPLEAF2: JPTYPE("cJ1_JPLEAF2"); POP2; break;
+ case cJ1_JPLEAF3: JPTYPE("cJ1_JPLEAF3"); POP3; break;
+#ifdef JU_64BIT
+ case cJ1_JPLEAF4: JPTYPE("cJ1_JPLEAF4"); POP4; break;
+ case cJ1_JPLEAF5: JPTYPE("cJ1_JPLEAF5"); POP5; break;
+ case cJ1_JPLEAF6: JPTYPE("cJ1_JPLEAF6"); POP6; break;
+ case cJ1_JPLEAF7: JPTYPE("cJ1_JPLEAF7"); POP7; break;
+#endif
+
+ case cJ1_JPLEAF_B1: JPTYPE("cJ1_JPLEAF_B1"); POP1; break;
+ case cJ1_JPFULLPOPU1: JPTYPE("cJ1_JPFULLPOPU1"); POP1; break;
+
+ case cJ1_JPIMMED_1_01: JPTYPE("cJ1_JPIMMED_1_01"); POP_1; break;
+ case cJ1_JPIMMED_2_01: JPTYPE("cJ1_JPIMMED_2_01"); POP_1; break;
+ case cJ1_JPIMMED_3_01: JPTYPE("cJ1_JPIMMED_3_01"); POP_1; break;
+#ifdef JU_64BIT
+ case cJ1_JPIMMED_4_01: JPTYPE("cJ1_JPIMMED_4_01"); POP_1; break;
+ case cJ1_JPIMMED_5_01: JPTYPE("cJ1_JPIMMED_5_01"); POP_1; break;
+ case cJ1_JPIMMED_6_01: JPTYPE("cJ1_JPIMMED_6_01"); POP_1; break;
+ case cJ1_JPIMMED_7_01: JPTYPE("cJ1_JPIMMED_7_01"); POP_1; break;
+#endif
+
+ case cJ1_JPIMMED_1_02: JPTYPE("cJ1_JPIMMED_1_02"); POP_2; break;
+ case cJ1_JPIMMED_1_03: JPTYPE("cJ1_JPIMMED_1_03"); POP_3; break;
+ case cJ1_JPIMMED_1_04: JPTYPE("cJ1_JPIMMED_1_04"); POP_4; break;
+ case cJ1_JPIMMED_1_05: JPTYPE("cJ1_JPIMMED_1_05"); POP_5; break;
+ case cJ1_JPIMMED_1_06: JPTYPE("cJ1_JPIMMED_1_06"); POP_6; break;
+ case cJ1_JPIMMED_1_07: JPTYPE("cJ1_JPIMMED_1_07"); POP_7; break;
+#ifdef JU_64BIT
+ case cJ1_JPIMMED_1_08: JPTYPE("cJ1_JPIMMED_1_08"); POP_8; break;
+ case cJ1_JPIMMED_1_09: JPTYPE("cJ1_JPIMMED_1_09"); POP_9; break;
+ case cJ1_JPIMMED_1_10: JPTYPE("cJ1_JPIMMED_1_10"); POP_10; break;
+ case cJ1_JPIMMED_1_11: JPTYPE("cJ1_JPIMMED_1_11"); POP_11; break;
+ case cJ1_JPIMMED_1_12: JPTYPE("cJ1_JPIMMED_1_12"); POP_12; break;
+ case cJ1_JPIMMED_1_13: JPTYPE("cJ1_JPIMMED_1_13"); POP_13; break;
+ case cJ1_JPIMMED_1_14: JPTYPE("cJ1_JPIMMED_1_14"); POP_14; break;
+ case cJ1_JPIMMED_1_15: JPTYPE("cJ1_JPIMMED_1_15"); POP_15; break;
+#endif
+ case cJ1_JPIMMED_2_02: JPTYPE("cJ1_JPIMMED_2_02"); POP_2; break;
+ case cJ1_JPIMMED_2_03: JPTYPE("cJ1_JPIMMED_2_03"); POP_3; break;
+#ifdef JU_64BIT
+ case cJ1_JPIMMED_2_04: JPTYPE("cJ1_JPIMMED_2_04"); POP_4; break;
+ case cJ1_JPIMMED_2_05: JPTYPE("cJ1_JPIMMED_2_05"); POP_5; break;
+ case cJ1_JPIMMED_2_06: JPTYPE("cJ1_JPIMMED_2_06"); POP_6; break;
+ case cJ1_JPIMMED_2_07: JPTYPE("cJ1_JPIMMED_2_07"); POP_7; break;
+#endif
+
+ case cJ1_JPIMMED_3_02: JPTYPE("cJ1_JPIMMED_3_02"); POP_2; break;
+#ifdef JU_64BIT
+ case cJ1_JPIMMED_3_03: JPTYPE("cJ1_JPIMMED_3_03"); POP_3; break;
+ case cJ1_JPIMMED_3_04: JPTYPE("cJ1_JPIMMED_3_04"); POP_4; break;
+ case cJ1_JPIMMED_3_05: JPTYPE("cJ1_JPIMMED_3_05"); POP_5; break;
+ case cJ1_JPIMMED_4_02: JPTYPE("cJ1_JPIMMED_4_02"); POP_2; break;
+ case cJ1_JPIMMED_4_03: JPTYPE("cJ1_JPIMMED_4_03"); POP_3; break;
+ case cJ1_JPIMMED_5_02: JPTYPE("cJ1_JPIMMED_5_02"); POP_2; break;
+ case cJ1_JPIMMED_5_03: JPTYPE("cJ1_JPIMMED_5_03"); POP_3; break;
+ case cJ1_JPIMMED_6_02: JPTYPE("cJ1_JPIMMED_6_02"); POP_2; break;
+ case cJ1_JPIMMED_7_02: JPTYPE("cJ1_JPIMMED_7_02"); POP_2; break;
+#endif
+ case cJ1_JPIMMED_CAP: JPTYPE("cJ1_JPIMMED_CAP"); OOPS;
+
+#else // JUDYL ===============================================================
+
+ case cJL_JPNULL1: JPTYPE("cJL_JPNULL1"); POP0; break;
+ case cJL_JPNULL2: JPTYPE("cJL_JPNULL2"); POP0; break;
+ case cJL_JPNULL3: JPTYPE("cJL_JPNULL3"); POP0; break;
+#ifdef JU_64BIT
+ case cJL_JPNULL4: JPTYPE("cJL_JPNULL4"); POP0; break;
+ case cJL_JPNULL5: JPTYPE("cJL_JPNULL5"); POP0; break;
+ case cJL_JPNULL6: JPTYPE("cJL_JPNULL6"); POP0; break;
+ case cJL_JPNULL7: JPTYPE("cJL_JPNULL7"); POP0; break;
+#endif
+
+ case cJL_JPBRANCH_L2: JPTYPE("cJL_JPBRANCH_L2"); POP2;NUMJPSL;break;
+ case cJL_JPBRANCH_L3: JPTYPE("cJL_JPBRANCH_L3"); POP3;NUMJPSL;break;
+#ifdef JU_64BIT
+ case cJL_JPBRANCH_L4: JPTYPE("cJL_JPBRANCH_L4"); POP4;NUMJPSL;break;
+ case cJL_JPBRANCH_L5: JPTYPE("cJL_JPBRANCH_L5"); POP5;NUMJPSL;break;
+ case cJL_JPBRANCH_L6: JPTYPE("cJL_JPBRANCH_L6"); POP6;NUMJPSL;break;
+ case cJL_JPBRANCH_L7: JPTYPE("cJL_JPBRANCH_L7"); POP7;NUMJPSL;break;
+#endif
+ case cJL_JPBRANCH_L: JPTYPE("cJL_JPBRANCH_L"); NUMJPSL;break;
+
+ case cJL_JPBRANCH_B2: JPTYPE("cJL_JPBRANCH_B2"); POP2;NUMJPSB;break;
+ case cJL_JPBRANCH_B3: JPTYPE("cJL_JPBRANCH_B3"); POP3;NUMJPSB;break;
+#ifdef JU_64BIT
+ case cJL_JPBRANCH_B4: JPTYPE("cJL_JPBRANCH_B4"); POP4;NUMJPSB;break;
+ case cJL_JPBRANCH_B5: JPTYPE("cJL_JPBRANCH_B5"); POP5;NUMJPSB;break;
+ case cJL_JPBRANCH_B6: JPTYPE("cJL_JPBRANCH_B6"); POP6;NUMJPSB;break;
+ case cJL_JPBRANCH_B7: JPTYPE("cJL_JPBRANCH_B7"); POP7;NUMJPSB;break;
+#endif
+ case cJL_JPBRANCH_B: JPTYPE("cJL_JPBRANCH_B"); NUMJPSB;break;
+
+ case cJL_JPBRANCH_U2: JPTYPE("cJL_JPBRANCH_U2"); POP2; break;
+ case cJL_JPBRANCH_U3: JPTYPE("cJL_JPBRANCH_U3"); POP3; break;
+#ifdef JU_64BIT
+ case cJL_JPBRANCH_U4: JPTYPE("cJL_JPBRANCH_U4"); POP4; break;
+ case cJL_JPBRANCH_U5: JPTYPE("cJL_JPBRANCH_U5"); POP5; break;
+ case cJL_JPBRANCH_U6: JPTYPE("cJL_JPBRANCH_U6"); POP6; break;
+ case cJL_JPBRANCH_U7: JPTYPE("cJL_JPBRANCH_U7"); POP7; break;
+#endif
+ case cJL_JPBRANCH_U: JPTYPE("cJL_JPBRANCH_U"); break;
+
+ case cJL_JPLEAF1: JPTYPE("cJL_JPLEAF1"); POP1; break;
+ case cJL_JPLEAF2: JPTYPE("cJL_JPLEAF2"); POP2; break;
+ case cJL_JPLEAF3: JPTYPE("cJL_JPLEAF3"); POP3; break;
+#ifdef JU_64BIT
+ case cJL_JPLEAF4: JPTYPE("cJL_JPLEAF4"); POP4; break;
+ case cJL_JPLEAF5: JPTYPE("cJL_JPLEAF5"); POP5; break;
+ case cJL_JPLEAF6: JPTYPE("cJL_JPLEAF6"); POP6; break;
+ case cJL_JPLEAF7: JPTYPE("cJL_JPLEAF7"); POP7; break;
+#endif
+
+ case cJL_JPLEAF_B1: JPTYPE("cJL_JPLEAF_B1"); POP1; break;
+
+ case cJL_JPIMMED_1_01: JPTYPE("cJL_JPIMMED_1_01"); POP_1; break;
+ case cJL_JPIMMED_2_01: JPTYPE("cJL_JPIMMED_2_01"); POP_1; break;
+ case cJL_JPIMMED_3_01: JPTYPE("cJL_JPIMMED_3_01"); POP_1; break;
+#ifdef JU_64BIT
+ case cJL_JPIMMED_4_01: JPTYPE("cJL_JPIMMED_4_01"); POP_1; break;
+ case cJL_JPIMMED_5_01: JPTYPE("cJL_JPIMMED_5_01"); POP_1; break;
+ case cJL_JPIMMED_6_01: JPTYPE("cJL_JPIMMED_6_01"); POP_1; break;
+ case cJL_JPIMMED_7_01: JPTYPE("cJL_JPIMMED_7_01"); POP_1; break;
+#endif
+
+ case cJL_JPIMMED_1_02: JPTYPE("cJL_JPIMMED_1_02"); POP_2; break;
+ case cJL_JPIMMED_1_03: JPTYPE("cJL_JPIMMED_1_03"); POP_3; break;
+#ifdef JU_64BIT
+ case cJL_JPIMMED_1_04: JPTYPE("cJL_JPIMMED_1_04"); POP_4; break;
+ case cJL_JPIMMED_1_05: JPTYPE("cJL_JPIMMED_1_05"); POP_5; break;
+ case cJL_JPIMMED_1_06: JPTYPE("cJL_JPIMMED_1_06"); POP_6; break;
+ case cJL_JPIMMED_1_07: JPTYPE("cJL_JPIMMED_1_07"); POP_7; break;
+ case cJL_JPIMMED_2_02: JPTYPE("cJL_JPIMMED_2_02"); POP_2; break;
+ case cJL_JPIMMED_2_03: JPTYPE("cJL_JPIMMED_2_03"); POP_3; break;
+ case cJL_JPIMMED_3_02: JPTYPE("cJL_JPIMMED_3_02"); POP_2; break;
+#endif
+ case cJL_JPIMMED_CAP: JPTYPE("cJL_JPIMMED_CAP"); OOPS;
+
+#endif // JUDYL
+
+ default: printf("Unknown Type = %d", JU_JPTYPE(Pjp)); OOPS;
+ }
+
+ if (j__udyIndex) printf("Index = 0x%lx", j__udyIndex);
+ if (j__udyPopulation) printf("Pop = %lu", j__udyPopulation);
+
+ printf("line = %d\n", Line);
+
+} // JudyPrintJP()
diff --git a/libs/klib/judy/JudyPrivate.h b/libs/klib/judy/JudyPrivate.h
new file mode 100644
index 0000000..0d0c5f3
--- /dev/null
+++ b/libs/klib/judy/JudyPrivate.h
@@ -0,0 +1,1610 @@
+#ifndef _JUDYPRIVATE_INCLUDED
+#define _JUDYPRIVATE_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Header file for all Judy sources, for global but private (non-exported)
+// declarations.
+
+#include "Judy.h"
+
+// ****************************************************************************
+// A VERY BRIEF EXPLANATION OF A JUDY ARRAY
+//
+// A Judy array is, effectively, a digital tree (or Trie) with 256 element
+// branches (nodes), and with "compression tricks" applied to low-population
+// branches or leaves to save a lot of memory at the cost of relatively little
+// CPU time or cache fills.
+//
+// In the actual implementation, a Judy array is level-less, and traversing the
+// "tree" actually means following the states in a state machine (SM) as
+// directed by the Index. A Judy array is referred to here as an "SM", rather
+// than as a "tree"; having "states", rather than "levels".
+//
+// Each branch or leaf in the SM decodes a portion ("digit") of the original
+// Index; with 256-way branches there are 8 bits per digit. There are 3 kinds
+// of branches, called: Linear, Bitmap and Uncompressed, of which the first 2
+// are compressed to contain no NULL entries.
+//
+// An Uncompressed branch has a 1.0 cache line fill cost to decode 8 bits of
+// (digit, part of an Index), but it might contain many NULL entries, and is
+// therefore inefficient with memory if lightly populated.
+//
+// A Linear branch has a ~1.75 cache line fill cost when at maximum population.
+// A Bitmap branch has ~2.0 cache line fills. Linear and Bitmap branches are
+// converted to Uncompressed branches when the additional memory can be
+// amortized with larger populations. Higher-state branches have higher
+// priority to be converted.
+//
+// Linear branches can hold 28 elements (based on detailed analysis) -- thus 28
+// expanses. A Linear branch is converted to a Bitmap branch when the 29th
+// expanse is required.
+//
+// A Bitmap branch could hold 256 expanses, but is forced to convert to an
+// Uncompressed branch when 185 expanses are required. Hopefully, it is
+// converted before that because of population growth (again, based on detailed
+// analysis and heuristics in the code).
+//
+// A path through the SM terminates to a leaf when the Index (or key)
+// population in the expanse below a pointer will fit into 1 or 2 cache lines
+// (~31..255 Indexes). A maximum-population Leaf has ~1.5 cache line fill
+// cost.
+//
+// Leaves are sorted arrays of Indexes, where the Index Sizes (IS) are: 0, 1,
+// 8, 16, 24, 32, [40, 48, 56, 64] bits. The IS depends on the "density"
+// (population/expanse) of the values in the Leaf. Zero bits are possible if
+// population == expanse in the SM (that is, a full small expanse).
+//
+// Elements of a branches are called Judy Pointers (JPs). Each JP object
+// points to the next object in the SM, plus, a JP can decode an additional
+// 2[6] bytes of an Index, but at the cost of "narrowing" the expanse
+// represented by the next object in the SM. A "narrow" JP (one which has
+// decode bytes/digits) is a way of skipping states in the SM.
+//
+// Although counterintuitive, we think a Judy SM is optimal when the Leaves are
+// stored at MINIMUM compression (narrowing, or use of Decode bytes). If more
+// aggressive compression was used, decompression of a leaf be required to
+// insert an index. Additional compression would save a little memory but not
+// help performance significantly.
+
+
+#ifdef A_PICTURE_IS_WORTH_1000_WORDS
+*******************************************************************************
+
+JUDY 32-BIT STATE MACHINE (SM) EXAMPLE, FOR INDEX = 0x02040103
+
+The Index used in this example is purposely chosen to allow small, simple
+examples below; each 1-byte "digit" from the Index has a small numeric value
+that fits in one column. In the drawing below:
+
+ JRP == Judy Root Pointer;
+
+ C == 1 byte of a 1..3 byte Population (count of Indexes) below this
+ pointer. Since this is shared with the Decode field, the combined
+ sizes must be 3[7], that is, 1 word less 1 byte for the JP Type.
+
+ The 1-byte field jp_Type is represented as:
+
+ 1..3 == Number of bytes in the population (Pop0) word of the Branch or Leaf
+ below the pointer (note: 1..7 on 64-bit); indicates:
+ - number of bytes in Decode field == 3 - this number;
+ - number of bytes remaining to decode.
+ Note: The maximum is 3, not 4, because the 1st byte of the Index is
+ always decoded digitally in the top branch.
+ -B- == JP points to a Branch (there are many kinds of Branches).
+ -L- == JP points to a Leaf (there are many kinds of Leaves).
+
+ (2) == Digit of Index decoded by position offset in branch (really
+ 0..0xff).
+
+ 4* == Digit of Index necessary for decoding a "narrow" pointer, in a
+ Decode field; replaces 1 missing branch (really 0..0xff).
+
+ 4+ == Digit of Index NOT necessary for decoding a "narrow" pointer, but
+ used for fast traversal of the SM by Judy1Test() and JudyLGet()
+ (see the code) (really 0..0xff).
+
+ 0 == Byte in a JPs Pop0 field that is always ignored, because a leaf
+ can never contain more than 256 Indexes (Pop0 <= 255).
+
+ +----- == A Branch or Leaf; drawn open-ended to remind you that it could
+ | have up to 256 columns.
+ +-----
+
+ |
+ | == Pointer to next Branch or Leaf.
+ V
+
+ |
+ O == A state is skipped by using a "narrow" pointer.
+ |
+
+ < 1 > == Digit (Index) shown as an example is not necessarily in the
+ position shown; is sorted in order with neighbor Indexes.
+ (Really 0..0xff.)
+
+Note that this example shows every possibly topology to reach a leaf in a
+32-bit Judy SM, although this is a very subtle point!
+
+ STATE or`
+ LEVEL
+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
+ |RJP| |RJP| |RJP| |RJP| |RJP| |RJP| |RJP| |RJP|
+ L---+ B---+ B---+ B---+ B---+ B---+ B---+ B---+
+ | | | | | | | |
+ | | | | | | | |
+ V V (2) V (2) V (2) V (2) V (2) V (2) V (2)
+ +------ +------ +------ +------ +------ +------ +------ +------
+Four |< 2 > | 0 | 4* | C | 4* | 4* | C | C
+byte |< 4 > | 0 | 0 | C | 1* | C | C | C 4
+Index|< 1 > | C | C | C | C | C | C | C
+Leaf |< 3 > | 3 | 2 | 3 | 1 | 2 | 3 | 3
+ +------ +--L--- +--L--- +--B--- +--L--- +--B--- +--B--- +--B---
+ | | | | | | |
+ / | / | | / /
+ / | / | | / /
+ | | | | | | |
+ V | V (4) | | V (4) V (4)
+ +------ | +------ | | +------ +------
+ Three |< 4 > | | 4+ | | | 4+ | 4+
+ byte Index|< 1 > O | 0 O O | 1* | C 3
+ Leaf |< 3 > | | C | | | C | C
+ +------ | | 2 | | | 1 | 2
+ / +----L- | | +----L- +----B-
+ / | | | | |
+ | / | / / /
+ | / | / / /
+ | / | | / /
+ | / | | / /
+ | | | | | |
+ V V | V(1) | V(1)
+ +------ +------ | +------ | +------
+ Two byte |< 1 > |< 1 > | | 4+ | | 4+
+ Index Leaf |< 3 > |< 3 > O | 1+ O | 1+ 2
+ +------ +------ / | C | | C
+ / | 1 | | 1
+ | +-L---- | +-L----
+ | | | |
+ | / | /
+ | | | |
+ V V V V
+ +------ +------ +------ +------
+ One byte Index Leaf |< 3 > |< 3 > |< 3 > |< 3 > 1
+ +------ +------ +------ +------
+
+
+#endif // A_PICTURE_IS_WORTH_1000_WORDS
+
+
+// ****************************************************************************
+// MISCELLANEOUS GLOBALS:
+//
+// PLATFORM-SPECIFIC CONVENIENCE MACROS:
+//
+// These are derived from context (set by cc or in system header files) or
+// based on JU_<PLATFORM> macros from make_includes/platform.*.mk. We decided
+// on 011018 that any macro reliably derivable from context (cc or headers) for
+// ALL platforms supported by Judy is based on that derivation, but ANY
+// exception means to stop using the external macro completely and derive from
+// JU_<PLATFORM> instead.
+
+// Other miscellaneous stuff:
+
+#ifndef _BOOL_T
+#define _BOOL_T
+typedef int bool_t;
+#endif
+
+#define FUNCTION // null; easy to find functions.
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifdef TRACE // turn on all other tracing in the code:
+#define TRACEJP 1 // JP traversals in JudyIns.c and JudyDel.c.
+#define TRACEJPR 1 // JP traversals in retrieval code, JudyGet.c.
+#define TRACECF 1 // cache fills in JudyGet.c.
+#define TRACEMI 1 // malloc calls in JudyMallocIF.c.
+#define TRACEMF 1 // malloc calls at a lower level in JudyMalloc.c.
+#endif
+
+#ifndef inline
+ #define inline __inline__
+#endif
+
+// SUPPORT FOR DEBUG-ONLY CODE:
+//
+// By convention, use -DDEBUG to enable both debug-only code AND assertions in
+// the Judy sources.
+//
+// Invert the sense of assertions, so they are off unless explicitly requested,
+// in a uniform way.
+//
+// Note: It is NOT appropriate to put this in Judy.h; it would mess up
+// application code.
+
+#ifndef DEBUG
+#define NDEBUG 1 // must be 1 for "#if".
+#endif
+
+// Shorthand notations to avoid #ifdefs for single-line conditional statements:
+//
+// Warning: These cannot be used around compiler directives, such as
+// "#include", nor in the case where Code contains a comma other than nested
+// within parentheses or quotes.
+
+#define DBGCODE(Code) /* nothing */
+
+#ifdef JUDY1
+#define JUDY1CODE(Code) Code
+#define JUDYLCODE(Code) // null.
+#endif
+
+#ifdef JUDYL
+#define JUDYLCODE(Code) Code
+#define JUDY1CODE(Code) // null.
+#endif
+
+#include <assert.h>
+
+// ****************************************************************************
+// FUNDAMENTAL CONSTANTS FOR MACHINE
+// ****************************************************************************
+
+// Machine (CPU) cache line size:
+//
+// NOTE: A leaf size of 2 cache lines maximum is the target (optimal) for
+// Judy. Its hard to obtain a machines cache line size at compile time, but
+// if the machine has an unexpected cache line size, its not devastating if
+// the following constants end up causing leaves that are 1 cache line in size,
+// or even 4 cache lines in size. The assumed 32-bit system has 16-word =
+// 64-byte cache lines, and the assumed 64-bit system has 16-word = 128-byte
+// cache lines.
+
+#ifdef JU_64BIT
+#define cJU_BYTESPERCL 128 // cache line size in bytes.
+#else
+#define cJU_BYTESPERCL 64 // cache line size in bytes.
+#endif
+
+// Bits Per Byte:
+
+#define cJU_BITSPERBYTE 0x8
+
+// Bytes Per Word and Bits Per Word, latter assuming sizeof(byte) is 8 bits:
+//
+// Expect 32 [64] bits per word.
+
+#define cJU_BYTESPERWORD (sizeof(Word_t))
+#define cJU_BITSPERWORD (sizeof(Word_t) * cJU_BITSPERBYTE)
+
+#define JU_BYTESTOWORDS(BYTES) \
+ (((BYTES) + cJU_BYTESPERWORD - 1) / cJU_BYTESPERWORD)
+
+// A word that is all-ones, normally equal to -1UL, but safer with ~0:
+
+#define cJU_ALLONES (~ ( Word_t ) 0UL)
+
+// Note, these are forward references, but thats OK:
+
+#define cJU_FULLBITMAPB ((BITMAPB_t) cJU_ALLONES)
+#define cJU_FULLBITMAPL ((BITMAPL_t) cJU_ALLONES)
+
+
+// ****************************************************************************
+// MISCELLANEOUS JUDY-SPECIFIC DECLARATIONS
+// ****************************************************************************
+
+// ROOT STATE:
+//
+// State at the start of the Judy SM, based on 1 byte decoded per state; equal
+// to the number of bytes per Index to decode.
+
+#define cJU_ROOTSTATE (sizeof(Word_t))
+
+
+// SUBEXPANSES PER STATE:
+//
+// Number of subexpanses per state traversed, which is the number of JPs in a
+// branch (actual or theoretical) and the number of bits in a bitmap.
+
+#define cJU_SUBEXPPERSTATE 256
+
+
+// LEAF AND VALUE POINTERS:
+//
+// Some other basic object types are in declared in JudyPrivateBranch.h
+// (Pjbl_t, Pjbb_t, Pjbu_t, Pjp_t) or are Judy1/L-specific (Pjlb_t). The
+// few remaining types are declared below.
+//
+// Note: Leaf pointers are cast to different-sized objects depending on the
+// leafs level, but are at least addresses (not just numbers), so use void *
+// (Pvoid_t), not PWord_t or Word_t for them, except use Pjlw_t for whole-word
+// (top-level, root-level) leaves. Value areas, however, are always whole
+// words.
+//
+// Furthermore, use Pjll_t only for generic leaf pointers (for various size
+// LeafLs). Use Pjlw_t for LeafWs. Use Pleaf (with type uint8_t *, uint16_t
+// *, etc) when the leaf index size is known.
+
+typedef PWord_t Pjlw_t; // pointer to root-level leaf (whole-word indexes).
+typedef Pvoid_t Pjll_t; // pointer to lower-level linear leaf.
+
+#ifdef JUDYL
+typedef PWord_t Pjv_t; // pointer to JudyL value area.
+#endif
+
+
+// POINTER PREPARATION MACROS:
+//
+// These macros are used to strip malloc-namespace-type bits from a pointer +
+// malloc-type word (which references any Judy mallocd object that might be
+// obtained from other than a direct call of malloc()), prior to dereferencing
+// the pointer as an address. The malloc-type bits allow Judy mallocd objects
+// to come from different "malloc() namespaces".
+//
+// (root pointer) (JRP, see above)
+// jp.jp_Addr generic pointer to next-level node, except when used
+// as a JudyL Immed01 value area
+// JU_JBB_PJP macro hides jbbs_Pjp (pointer to JP subarray)
+// JL_JLB_PVALUE macro hides jLlbs_PValue (pointer to value subarray)
+//
+// When setting one of these fields or passing an address to j__udyFree*(), the
+// "raw" memory address is used; otherwise the memory address must be passed
+// through one of the macros below before its dereferenced.
+//
+// Note: After much study, the typecasts below appear in the macros rather
+// than at the point of use, which is both simpler and allows the compiler to
+// do type-checking.
+
+
+#define P_JLW( ADDR) ((Pjlw_t) (ADDR)) // root leaf.
+#define P_JPM( ADDR) ((Pjpm_t) (ADDR)) // root JPM.
+#define P_JBL( ADDR) ((Pjbl_t) (ADDR)) // BranchL.
+#define P_JBB( ADDR) ((Pjbb_t) (ADDR)) // BranchB.
+#define P_JBU( ADDR) ((Pjbu_t) (ADDR)) // BranchU.
+#define P_JLL( ADDR) ((Pjll_t) (ADDR)) // LeafL.
+#define P_JLB( ADDR) ((Pjlb_t) (ADDR)) // LeafB1.
+#define P_JP( ADDR) ((Pjp_t) (ADDR)) // JP.
+
+#ifdef JUDYL
+#define P_JV( ADDR) ((Pjv_t) (ADDR)) // &value.
+#endif
+
+
+// LEAST BYTES:
+//
+// Mask for least bytes of a word, and a macro to perform this mask on an
+// Index.
+//
+// Note: This macro has been problematic in the past to get right and to make
+// portable. Its not OK on all systems to shift by the full word size. This
+// macro should allow shifting by 1..N bytes, where N is the word size, but
+// should produce a compiler warning if the macro is called with Bytes == 0.
+//
+// Warning: JU_LEASTBYTESMASK() is not a constant macro unless Bytes is a
+// constant; otherwise it is a variable shift, which is expensive on some
+// processors.
+
+#define JU_LEASTBYTESMASK(BYTES) \
+ (((Word_t)0x100 << (cJU_BITSPERBYTE * ((BYTES) - 1))) - 1)
+
+#define JU_LEASTBYTES(INDEX,BYTES) ((INDEX) & JU_LEASTBYTESMASK(BYTES))
+
+
+// BITS IN EACH BITMAP SUBEXPANSE FOR BITMAP BRANCH AND LEAF:
+//
+// The bits per bitmap subexpanse times the number of subexpanses equals a
+// constant (cJU_SUBEXPPERSTATE). You can also think of this as a compile-time
+// choice of "aspect ratio" for bitmap branches and leaves (which can be set
+// independently for each).
+//
+// A default aspect ratio is hardwired here if not overridden at compile time,
+// such as by "EXTCCOPTS=-DBITMAP_BRANCH16x16 make".
+
+#if (! (defined(BITMAP_BRANCH8x32) || defined(BITMAP_BRANCH16x16) || defined(BITMAP_BRANCH32x8)))
+#define BITMAP_BRANCH32x8 1 // 32 bits per subexpanse, 8 subexpanses.
+#endif
+
+#ifdef BITMAP_BRANCH8x32
+#define BITMAPB_t uint8_t
+#endif
+
+#ifdef BITMAP_BRANCH16x16
+#define BITMAPB_t uint16_t
+#endif
+
+#ifdef BITMAP_BRANCH32x8
+#define BITMAPB_t uint32_t
+#endif
+
+// Note: For bitmap leaves, BITMAP_LEAF64x4 is only valid for 64 bit:
+//
+// Note: Choice of aspect ratio mostly matters for JudyL bitmap leaves. For
+// Judy1 the choice doesnt matter much -- the code generated for different
+// BITMAP_LEAF* values choices varies, but correctness and performance are the
+// same.
+
+#ifndef JU_64BIT
+
+#if (! (defined(BITMAP_LEAF8x32) || defined(BITMAP_LEAF16x16) || defined(BITMAP_LEAF32x8)))
+#define BITMAP_LEAF32x8 // 32 bits per subexpanse, 8 subexpanses.
+#endif
+
+#else // 32BIT
+
+#if (! (defined(BITMAP_LEAF8x32) || defined(BITMAP_LEAF16x16) || defined(BITMAP_LEAF32x8) || defined(BITMAP_LEAF64x4)))
+#define BITMAP_LEAF64x4 // 64 bits per subexpanse, 4 subexpanses.
+
+#endif
+#endif // JU_64BIT
+
+#ifdef BITMAP_LEAF8x32
+#define BITMAPL_t uint8_t
+#endif
+
+#ifdef BITMAP_LEAF16x16
+#define BITMAPL_t uint16_t
+#endif
+
+#ifdef BITMAP_LEAF32x8
+#define BITMAPL_t uint32_t
+#endif
+
+#ifdef BITMAP_LEAF64x4
+#define BITMAPL_t uint64_t
+#endif
+
+
+// EXPORTED DATA AND FUNCTIONS:
+
+#ifdef JUDY1
+extern const uint8_t j__1_BranchBJPPopToWords[];
+#endif
+
+#ifdef JUDYL
+extern const uint8_t j__L_BranchBJPPopToWords[];
+#endif
+
+// Fast LeafL search routine used for inlined code:
+
+#if (! defined(SEARCH_BINARY)) || (! defined(SEARCH_LINEAR))
+// default a binary search leaf method
+#define SEARCH_BINARY 1
+//#define SEARCH_LINEAR 1
+#endif
+
+#ifdef SEARCH_LINEAR
+
+#define SEARCHLEAFNATIVE(LEAFTYPE,ADDR,POP1,INDEX) \
+ LEAFTYPE *P_leaf = (LEAFTYPE *)(ADDR); \
+ LEAFTYPE I_ndex = (INDEX); /* with masking */ \
+ if (I_ndex > P_leaf[(POP1) - 1]) return(~(POP1)); \
+ while(I_ndex > *P_leaf) P_leaf++; \
+ if (I_ndex == *P_leaf) return(P_leaf - (LEAFTYPE *)(ADDR)); \
+ return(~(P_leaf - (LEAFTYPE *)(ADDR)));
+
+
+#define SEARCHLEAFNONNAT(ADDR,POP1,INDEX,LFBTS,COPYINDEX) \
+{ \
+ uint8_t *P_leaf, *P_leafEnd; \
+ Word_t i_ndex; \
+ Word_t I_ndex = JU_LEASTBYTES((INDEX), (LFBTS)); \
+ Word_t p_op1; \
+ \
+ P_leaf = (uint8_t *)(ADDR); \
+ P_leafEnd = P_leaf + ((POP1) * (LFBTS)); \
+ \
+ do { \
+ JU_COPY3_PINDEX_TO_LONG(i_ndex, P_leaf); \
+ if (I_ndex <= i_ndex) break; \
+ P_leaf += (LFBTS); \
+ } while (P_leaf < P_leafEnd); \
+ \
+ p_op1 = (P_leaf - (uint8_t *) (ADDR)) / (LFBTS); \
+ if (I_ndex == i_ndex) return(p_op1); \
+ return(~p_op1); \
+}
+#endif // SEARCH_LINEAR
+
+#ifdef SEARCH_BINARY
+
+#define SEARCHLEAFNATIVE(LEAFTYPE,ADDR,POP1,INDEX) \
+ LEAFTYPE *P_leaf = (LEAFTYPE *)(ADDR); \
+ LEAFTYPE I_ndex = (LEAFTYPE)INDEX; /* truncate hi bits */ \
+ Word_t l_ow = cJU_ALLONES; \
+ Word_t m_id; \
+ Word_t h_igh = POP1; \
+ \
+ while ((h_igh - l_ow) > 1UL) \
+ { \
+ m_id = (h_igh + l_ow) / 2; \
+ if (P_leaf[m_id] > I_ndex) \
+ h_igh = m_id; \
+ else \
+ l_ow = m_id; \
+ } \
+ if (l_ow == cJU_ALLONES || P_leaf[l_ow] != I_ndex) \
+ return(~h_igh); \
+ return(l_ow)
+
+
+#define SEARCHLEAFNONNAT(ADDR,POP1,INDEX,LFBTS,COPYINDEX) \
+ uint8_t *P_leaf = (uint8_t *)(ADDR); \
+ Word_t l_ow = cJU_ALLONES; \
+ Word_t m_id; \
+ Word_t h_igh = POP1; \
+ Word_t I_ndex = JU_LEASTBYTES((INDEX), (LFBTS)); \
+ Word_t i_ndex; \
+ \
+ I_ndex = JU_LEASTBYTES((INDEX), (LFBTS)); \
+ \
+ while ((h_igh - l_ow) > 1UL) \
+ { \
+ m_id = (h_igh + l_ow) / 2; \
+ COPYINDEX(i_ndex, &P_leaf[m_id * (LFBTS)]); \
+ if (i_ndex > I_ndex) \
+ h_igh = m_id; \
+ else \
+ l_ow = m_id; \
+ } \
+ if (l_ow == cJU_ALLONES) return(~h_igh); \
+ \
+ COPYINDEX(i_ndex, &P_leaf[l_ow * (LFBTS)]); \
+ if (i_ndex != I_ndex) return(~h_igh); \
+ return(l_ow)
+
+#endif // SEARCH_BINARY
+
+// Fast way to count bits set in 8..32[64]-bit int:
+//
+// For performance, j__udyCountBits*() are written to take advantage of
+// platform-specific features where available.
+//
+
+#ifdef JU_NOINLINE
+
+extern BITMAPB_t j__udyCountBitsB(BITMAPB_t word);
+extern BITMAPL_t j__udyCountBitsL(BITMAPL_t word);
+
+// Compiler supports inline
+
+#elif defined(JU_HPUX_IPF)
+
+#define j__udyCountBitsB(WORD) _Asm_popcnt(WORD)
+#define j__udyCountBitsL(WORD) _Asm_popcnt(WORD)
+
+#elif defined(JU_LINUX_IPF)
+
+static inline BITMAPB_t j__udyCountBitsB(BITMAPB_t word)
+{
+ BITMAPB_t result;
+ __asm__ ("popcnt %0=%1" : "=r" (result) : "r" (word));
+ return(result);
+}
+
+static inline BITMAPL_t j__udyCountBitsL(BITMAPL_t word)
+{
+ BITMAPL_t result;
+ __asm__ ("popcnt %0=%1" : "=r" (result) : "r" (word));
+ return(result);
+}
+
+
+#else // No instructions available, use inline code
+
+// ****************************************************************************
+// __ J U D Y C O U N T B I T S B
+//
+// Return the number of bits set in "Word", for a bitmap branch.
+//
+// Note: Bitmap branches have maximum bitmap size = 32 bits.
+
+#ifdef JU_WIN
+static __inline BITMAPB_t j__udyCountBitsB(BITMAPB_t word)
+#else
+static inline BITMAPB_t j__udyCountBitsB(BITMAPB_t word)
+#endif
+{
+ word = (word & 0x55555555) + ((word & 0xAAAAAAAA) >> 1);
+ word = (word & 0x33333333) + ((word & 0xCCCCCCCC) >> 2);
+ word = (word & 0x0F0F0F0F) + ((word & 0xF0F0F0F0) >> 4); // >= 8 bits.
+#if defined(BITMAP_BRANCH16x16) || defined(BITMAP_BRANCH32x8)
+ word = (word & 0x00FF00FF) + ((word & 0xFF00FF00) >> 8); // >= 16 bits.
+#endif
+
+#ifdef BITMAP_BRANCH32x8
+ word = (word & 0x0000FFFF) + ((word & 0xFFFF0000) >> 16); // >= 32 bits.
+#endif
+ return(word);
+
+} // j__udyCountBitsB()
+
+
+// ****************************************************************************
+// __ J U D Y C O U N T B I T S L
+//
+// Return the number of bits set in "Word", for a bitmap leaf.
+//
+// Note: Bitmap branches have maximum bitmap size = 32 bits.
+
+// Note: Need both 32-bit and 64-bit versions of j__udyCountBitsL() because
+// bitmap leaves can have 64-bit bitmaps.
+
+#ifdef JU_WIN
+static __inline BITMAPL_t j__udyCountBitsL(BITMAPL_t word)
+#else
+static inline BITMAPL_t j__udyCountBitsL(BITMAPL_t word)
+#endif
+{
+#ifndef JU_64BIT
+
+ word = (word & 0x55555555) + ((word & 0xAAAAAAAA) >> 1);
+ word = (word & 0x33333333) + ((word & 0xCCCCCCCC) >> 2);
+ word = (word & 0x0F0F0F0F) + ((word & 0xF0F0F0F0) >> 4); // >= 8 bits.
+#if defined(BITMAP_LEAF16x16) || defined(BITMAP_LEAF32x8)
+ word = (word & 0x00FF00FF) + ((word & 0xFF00FF00) >> 8); // >= 16 bits.
+#endif
+#ifdef BITMAP_LEAF32x8
+ word = (word & 0x0000FFFF) + ((word & 0xFFFF0000) >> 16); // >= 32 bits.
+#endif
+
+#else // JU_64BIT
+
+ word = (word & 0x5555555555555555) + ((word & 0xAAAAAAAAAAAAAAAA) >> 1);
+ word = (word & 0x3333333333333333) + ((word & 0xCCCCCCCCCCCCCCCC) >> 2);
+ word = (word & 0x0F0F0F0F0F0F0F0F) + ((word & 0xF0F0F0F0F0F0F0F0) >> 4);
+#if defined(BITMAP_LEAF16x16) || defined(BITMAP_LEAF32x8) || defined(BITMAP_LEAF64x4)
+ word = (word & 0x00FF00FF00FF00FF) + ((word & 0xFF00FF00FF00FF00) >> 8);
+#endif
+#if defined(BITMAP_LEAF32x8) || defined(BITMAP_LEAF64x4)
+ word = (word & 0x0000FFFF0000FFFF) + ((word & 0xFFFF0000FFFF0000) >>16);
+#endif
+#ifdef BITMAP_LEAF64x4
+ word = (word & 0x00000000FFFFFFFF) + ((word & 0xFFFFFFFF00000000) >>32);
+#endif
+#endif // JU_64BIT
+
+ return(word);
+
+} // j__udyCountBitsL()
+
+#endif // Compiler supports inline
+
+// GET POP0:
+//
+// Get from jp_DcdPopO the Pop0 for various JP Types.
+//
+// Notes:
+//
+// - Different macros require different parameters...
+//
+// - There are no simple macros for cJU_BRANCH* Types because their
+// populations must be added up and dont reside in an already-calculated
+// place. (TBD: This is no longer true, now its in the JPM.)
+//
+// - cJU_JPIMM_POP0() is not defined because it would be redundant because the
+// Pop1 is already encoded in each enum name.
+//
+// - A linear or bitmap leaf Pop0 cannot exceed cJU_SUBEXPPERSTATE - 1 (Pop0 =
+// 0..255), so use a simpler, faster macro for it than for other JP Types.
+//
+// - Avoid any complex calculations that would slow down the compiled code.
+// Assume these macros are only called for the appropriate JP Types.
+// Unfortunately theres no way to trigger an assertion here if the JP type
+// is incorrect for the macro, because these are merely expressions, not
+// statements.
+
+#define JU_LEAFW_POP0(JRP) (*P_JLW(JRP))
+#define cJU_JPFULLPOPU1_POP0 (cJU_SUBEXPPERSTATE - 1)
+
+// GET JP Type:
+// Since bit fields greater than 32 bits are not supported in some compilers
+// the jp_DcdPopO field is expanded to include the jp_Type in the high 8 bits
+// of the Word_t.
+// First the read macro:
+
+#define JU_JPTYPE(PJP) ((PJP)->jp_Type)
+
+#define JU_JPLEAF_POP0(PJP) ((PJP)->jp_DcdP0[sizeof(Word_t) - 2])
+
+#ifdef JU_64BIT
+
+#define JU_JPDCDPOP0(PJP) \
+ ((Word_t)(PJP)->jp_DcdP0[0] << 48 | \
+ (Word_t)(PJP)->jp_DcdP0[1] << 40 | \
+ (Word_t)(PJP)->jp_DcdP0[2] << 32 | \
+ (Word_t)(PJP)->jp_DcdP0[3] << 24 | \
+ (Word_t)(PJP)->jp_DcdP0[4] << 16 | \
+ (Word_t)(PJP)->jp_DcdP0[5] << 8 | \
+ (Word_t)(PJP)->jp_DcdP0[6])
+
+
+#define JU_JPSETADT(PJP,ADDR,DCDPOP0,TYPE) \
+{ \
+ (PJP)->jp_Addr = (ADDR); \
+ (PJP)->jp_DcdP0[0] = (uint8_t)((Word_t)(DCDPOP0) >> 48); \
+ (PJP)->jp_DcdP0[1] = (uint8_t)((Word_t)(DCDPOP0) >> 40); \
+ (PJP)->jp_DcdP0[2] = (uint8_t)((Word_t)(DCDPOP0) >> 32); \
+ (PJP)->jp_DcdP0[3] = (uint8_t)((Word_t)(DCDPOP0) >> 24); \
+ (PJP)->jp_DcdP0[4] = (uint8_t)((Word_t)(DCDPOP0) >> 16); \
+ (PJP)->jp_DcdP0[5] = (uint8_t)((Word_t)(DCDPOP0) >> 8); \
+ (PJP)->jp_DcdP0[6] = (uint8_t)((Word_t)(DCDPOP0)); \
+ (PJP)->jp_Type = (TYPE); \
+}
+
+#else // 32 Bit
+
+#define JU_JPDCDPOP0(PJP) \
+ ((Word_t)(PJP)->jp_DcdP0[0] << 16 | \
+ (Word_t)(PJP)->jp_DcdP0[1] << 8 | \
+ (Word_t)(PJP)->jp_DcdP0[2])
+
+
+#define JU_JPSETADT(PJP,ADDR,DCDPOP0,TYPE) \
+{ \
+ (PJP)->jp_Addr = (ADDR); \
+ (PJP)->jp_DcdP0[0] = (uint8_t)((Word_t)(DCDPOP0) >> 16); \
+ (PJP)->jp_DcdP0[1] = (uint8_t)((Word_t)(DCDPOP0) >> 8); \
+ (PJP)->jp_DcdP0[2] = (uint8_t)((Word_t)(DCDPOP0)); \
+ (PJP)->jp_Type = (TYPE); \
+}
+
+#endif // 32 Bit
+
+// NUMBER OF BITS IN A BRANCH OR LEAF BITMAP AND SUBEXPANSE:
+//
+// Note: cJU_BITSPERBITMAP must be the same as the number of JPs in a branch.
+
+#define cJU_BITSPERBITMAP cJU_SUBEXPPERSTATE
+
+// Bitmaps are accessed in units of "subexpanses":
+
+#define cJU_BITSPERSUBEXPB (sizeof(BITMAPB_t) * cJU_BITSPERBYTE)
+#define cJU_NUMSUBEXPB (cJU_BITSPERBITMAP / cJU_BITSPERSUBEXPB)
+
+#define cJU_BITSPERSUBEXPL (sizeof(BITMAPL_t) * cJU_BITSPERBYTE)
+#define cJU_NUMSUBEXPL (cJU_BITSPERBITMAP / cJU_BITSPERSUBEXPL)
+
+
+// MASK FOR A SPECIFIED BIT IN A BITMAP:
+//
+// Warning: If BitNum is a variable, this results in a variable shift that is
+// expensive, at least on some processors. Use with caution.
+//
+// Warning: BitNum must be less than cJU_BITSPERWORD, that is, 0 ..
+// cJU_BITSPERWORD - 1, to avoid a truncated shift on some machines.
+//
+// TBD: Perhaps use an array[32] of masks instead of calculating them.
+
+#define JU_BITPOSMASKB(BITNUM) ((Word_t)1 << ((BITNUM) % cJU_BITSPERSUBEXPB))
+#define JU_BITPOSMASKL(BITNUM) ((Word_t)1 << ((BITNUM) % cJU_BITSPERSUBEXPL))
+
+
+// TEST/SET/CLEAR A BIT IN A BITMAP LEAF:
+//
+// Test if a byte-sized Digit (portion of Index) has a corresponding bit set in
+// a bitmap, or set a byte-sized Digits bit into a bitmap, by looking up the
+// correct subexpanse and then checking/setting the correct bit.
+//
+// Note: Mask higher bits, if any, for the convenience of the user of this
+// macro, in case they pass a full Index, not just a digit. If the caller has
+// a true 8-bit digit, make it of type uint8_t and the compiler should skip the
+// unnecessary mask step.
+
+#define JU_SUBEXPL(DIGIT) (((DIGIT) / cJU_BITSPERSUBEXPL) & (cJU_NUMSUBEXPL-1))
+
+#define JU_BITMAPTESTL(PJLB, INDEX) \
+ (JU_JLB_BITMAP(PJLB, JU_SUBEXPL(INDEX)) & JU_BITPOSMASKL(INDEX))
+
+#define JU_BITMAPSETL(PJLB, INDEX) \
+ (JU_JLB_BITMAP(PJLB, JU_SUBEXPL(INDEX)) |= JU_BITPOSMASKL(INDEX))
+
+#define JU_BITMAPCLEARL(PJLB, INDEX) \
+ (JU_JLB_BITMAP(PJLB, JU_SUBEXPL(INDEX)) ^= JU_BITPOSMASKL(INDEX))
+
+
+// MAP BITMAP BIT OFFSET TO DIGIT:
+//
+// Given a digit variable to set, a bitmap branch or leaf subexpanse (base 0),
+// the bitmap (BITMAP*_t) for that subexpanse, and an offset (Nth set bit in
+// the bitmap, base 0), compute the digit (also base 0) corresponding to the
+// subexpanse and offset by counting all bits in the bitmap until offset+1 set
+// bits are seen. Avoid expensive variable shifts. Offset should be less than
+// the number of set bits in the bitmap; assert this.
+//
+// If theres a better way to do this, I dont know what it is.
+
+#define JU_BITMAPDIGITB(DIGIT,SUBEXP,BITMAP,OFFSET) \
+ { \
+ BITMAPB_t bitmap = (BITMAP); int remain = (OFFSET); \
+ (DIGIT) = (SUBEXP) * cJU_BITSPERSUBEXPB; \
+ \
+ while ((remain -= (bitmap & 1)) >= 0) \
+ { \
+ bitmap >>= 1; ++(DIGIT); \
+ assert((DIGIT) < ((SUBEXP) + 1) * cJU_BITSPERSUBEXPB); \
+ } \
+ }
+
+#define JU_BITMAPDIGITL(DIGIT,SUBEXP,BITMAP,OFFSET) \
+ { \
+ BITMAPL_t bitmap = (BITMAP); int remain = (OFFSET); \
+ (DIGIT) = (SUBEXP) * cJU_BITSPERSUBEXPL; \
+ \
+ while ((remain -= (bitmap & 1)) >= 0) \
+ { \
+ bitmap >>= 1; ++(DIGIT); \
+ assert((DIGIT) < ((SUBEXP) + 1) * cJU_BITSPERSUBEXPL); \
+ } \
+ }
+
+
+// MASKS FOR PORTIONS OF 32-BIT WORDS:
+//
+// These are useful for bitmap subexpanses.
+//
+// "LOWER"/"HIGHER" means bits representing lower/higher-valued Indexes. The
+// exact order of bits in the word is explicit here but is hidden from the
+// caller.
+//
+// "EXC" means exclusive of the specified bit; "INC" means inclusive.
+//
+// In each case, BitPos is either "JU_BITPOSMASK*(BitNum)", or a variable saved
+// from an earlier call of that macro; either way, it must be a 32-bit word
+// with a single bit set. In the first case, assume the compiler is smart
+// enough to optimize out common subexpressions.
+//
+// The expressions depend on unsigned decimal math that should be universal.
+
+#define JU_MASKLOWEREXC( BITPOS) ((BITPOS) - 1)
+#define JU_MASKLOWERINC( BITPOS) (JU_MASKLOWEREXC(BITPOS) | (BITPOS))
+#define JU_MASKHIGHERINC(BITPOS) (-(BITPOS))
+#define JU_MASKHIGHEREXC(BITPOS) (JU_MASKHIGHERINC(BITPOS) ^ (BITPOS))
+
+
+// ****************************************************************************
+// SUPPORT FOR NATIVE INDEX SIZES
+// ****************************************************************************
+//
+// Copy a series of generic objects (uint8_t, uint16_t, uint32_t, Word_t) from
+// one place to another.
+
+#define JU_COPYMEM(PDST,PSRC,POP1) \
+ { \
+ Word_t i_ndex = 0; \
+ assert((POP1) > 0); \
+ do { (PDST)[i_ndex] = (PSRC)[i_ndex]; } \
+ while (++i_ndex < (POP1)); \
+ }
+
+
+// ****************************************************************************
+// SUPPORT FOR NON-NATIVE INDEX SIZES
+// ****************************************************************************
+//
+// Copy a 3-byte Index pointed by a uint8_t * to a Word_t:
+//
+#define JU_COPY3_PINDEX_TO_LONG(DESTLONG,PINDEX) \
+ DESTLONG = (Word_t)(PINDEX)[0] << 16; \
+ DESTLONG += (Word_t)(PINDEX)[1] << 8; \
+ DESTLONG += (Word_t)(PINDEX)[2]
+
+// Copy a Word_t to a 3-byte Index pointed at by a uint8_t *:
+
+#define JU_COPY3_LONG_TO_PINDEX(PINDEX,SOURCELONG) \
+ (PINDEX)[0] = (uint8_t)((SOURCELONG) >> 16); \
+ (PINDEX)[1] = (uint8_t)((SOURCELONG) >> 8); \
+ (PINDEX)[2] = (uint8_t)((SOURCELONG))
+
+#ifdef JU_64BIT
+
+// Copy a 5-byte Index pointed by a uint8_t * to a Word_t:
+//
+#define JU_COPY5_PINDEX_TO_LONG(DESTLONG,PINDEX) \
+ DESTLONG = (Word_t)(PINDEX)[0] << 32; \
+ DESTLONG += (Word_t)(PINDEX)[1] << 24; \
+ DESTLONG += (Word_t)(PINDEX)[2] << 16; \
+ DESTLONG += (Word_t)(PINDEX)[3] << 8; \
+ DESTLONG += (Word_t)(PINDEX)[4]
+
+// Copy a Word_t to a 5-byte Index pointed at by a uint8_t *:
+
+#define JU_COPY5_LONG_TO_PINDEX(PINDEX,SOURCELONG) \
+ (PINDEX)[0] = (uint8_t)((SOURCELONG) >> 32); \
+ (PINDEX)[1] = (uint8_t)((SOURCELONG) >> 24); \
+ (PINDEX)[2] = (uint8_t)((SOURCELONG) >> 16); \
+ (PINDEX)[3] = (uint8_t)((SOURCELONG) >> 8); \
+ (PINDEX)[4] = (uint8_t)((SOURCELONG))
+
+// Copy a 6-byte Index pointed by a uint8_t * to a Word_t:
+//
+#define JU_COPY6_PINDEX_TO_LONG(DESTLONG,PINDEX) \
+ DESTLONG = (Word_t)(PINDEX)[0] << 40; \
+ DESTLONG += (Word_t)(PINDEX)[1] << 32; \
+ DESTLONG += (Word_t)(PINDEX)[2] << 24; \
+ DESTLONG += (Word_t)(PINDEX)[3] << 16; \
+ DESTLONG += (Word_t)(PINDEX)[4] << 8; \
+ DESTLONG += (Word_t)(PINDEX)[5]
+
+// Copy a Word_t to a 6-byte Index pointed at by a uint8_t *:
+
+#define JU_COPY6_LONG_TO_PINDEX(PINDEX,SOURCELONG) \
+ (PINDEX)[0] = (uint8_t)((SOURCELONG) >> 40); \
+ (PINDEX)[1] = (uint8_t)((SOURCELONG) >> 32); \
+ (PINDEX)[2] = (uint8_t)((SOURCELONG) >> 24); \
+ (PINDEX)[3] = (uint8_t)((SOURCELONG) >> 16); \
+ (PINDEX)[4] = (uint8_t)((SOURCELONG) >> 8); \
+ (PINDEX)[5] = (uint8_t)((SOURCELONG))
+
+// Copy a 7-byte Index pointed by a uint8_t * to a Word_t:
+//
+#define JU_COPY7_PINDEX_TO_LONG(DESTLONG,PINDEX) \
+ DESTLONG = (Word_t)(PINDEX)[0] << 48; \
+ DESTLONG += (Word_t)(PINDEX)[1] << 40; \
+ DESTLONG += (Word_t)(PINDEX)[2] << 32; \
+ DESTLONG += (Word_t)(PINDEX)[3] << 24; \
+ DESTLONG += (Word_t)(PINDEX)[4] << 16; \
+ DESTLONG += (Word_t)(PINDEX)[5] << 8; \
+ DESTLONG += (Word_t)(PINDEX)[6]
+
+// Copy a Word_t to a 7-byte Index pointed at by a uint8_t *:
+
+#define JU_COPY7_LONG_TO_PINDEX(PINDEX,SOURCELONG) \
+ (PINDEX)[0] = (uint8_t)((SOURCELONG) >> 48); \
+ (PINDEX)[1] = (uint8_t)((SOURCELONG) >> 40); \
+ (PINDEX)[2] = (uint8_t)((SOURCELONG) >> 32); \
+ (PINDEX)[3] = (uint8_t)((SOURCELONG) >> 24); \
+ (PINDEX)[4] = (uint8_t)((SOURCELONG) >> 16); \
+ (PINDEX)[5] = (uint8_t)((SOURCELONG) >> 8); \
+ (PINDEX)[6] = (uint8_t)((SOURCELONG))
+
+#endif // JU_64BIT
+
+// ****************************************************************************
+// COMMON CODE FRAGMENTS (MACROS)
+// ****************************************************************************
+//
+// These code chunks are shared between various source files.
+
+
+// SET (REPLACE) ONE DIGIT IN AN INDEX:
+//
+// To avoid endian issues, use masking and ORing, which operates in a
+// big-endian register, rather than treating the Index as an array of bytes,
+// though that would be simpler, but would operate in endian-specific memory.
+//
+// TBD: This contains two variable shifts, is that bad?
+
+#define JU_SETDIGIT(INDEX,DIGIT,STATE) \
+ (INDEX) = ((INDEX) & (~cJU_MASKATSTATE(STATE))) \
+ | (((Word_t) (DIGIT)) \
+ << (((STATE) - 1) * cJU_BITSPERBYTE))
+
+// Fast version for single LSB:
+
+#define JU_SETDIGIT1(INDEX,DIGIT) (INDEX) = ((INDEX) & ~0xff) | (DIGIT)
+
+
+// SET (REPLACE) "N" LEAST DIGITS IN AN INDEX:
+
+#define JU_SETDIGITS(INDEX,INDEX2,cSTATE) \
+ (INDEX) = ((INDEX ) & (~JU_LEASTBYTESMASK(cSTATE))) \
+ | ((INDEX2) & ( JU_LEASTBYTESMASK(cSTATE)))
+
+// COPY DECODE BYTES FROM JP TO INDEX:
+//
+// Modify Index digit(s) to match the bytes in jp_DcdPopO in case one or more
+// branches are skipped and the digits are significant. Its probably faster
+// to just do this unconditionally than to check if its necessary.
+//
+// To avoid endian issues, use masking and ORing, which operates in a
+// big-endian register, rather than treating the Index as an array of bytes,
+// though that would be simpler, but would operate in endian-specific memory.
+//
+// WARNING: Must not call JU_LEASTBYTESMASK (via cJU_DCDMASK) with Bytes =
+// cJU_ROOTSTATE or a bad mask is generated, but there are no Dcd bytes to copy
+// in this case anyway. In fact there are no Dcd bytes unless State <
+// cJU_ROOTSTATE - 1, so dont call this macro except in those cases.
+//
+// TBD: It would be nice to validate jp_DcdPopO against known digits to ensure
+// no corruption, but this is non-trivial.
+
+#define JU_SETDCD(INDEX,PJP,cSTATE) \
+ (INDEX) = ((INDEX) & ~cJU_DCDMASK(cSTATE)) \
+ | (JU_JPDCDPOP0(PJP) & cJU_DCDMASK(cSTATE))
+
+// INSERT/DELETE AN INDEX IN-PLACE IN MEMORY:
+//
+// Given a pointer to an array of "even" (native), same-sized objects
+// (indexes), the current population of the array, an offset in the array, and
+// a new Index to insert, "shift up" the array elements (Indexes) above the
+// insertion point and insert the new Index. Assume there is sufficient memory
+// to do this.
+//
+// In these macros, "i_offset" is an index offset, and "b_off" is a byte
+// offset for odd Index sizes.
+//
+// Note: Endian issues only arise fro insertion, not deletion, and even for
+// insertion, they are transparent when native (even) objects are used, and
+// handled explicitly for odd (non-native) Index sizes.
+//
+// Note: The following macros are tricky enough that there is some test code
+// for them appended to this file.
+
+#define JU_INSERTINPLACE(PARRAY,POP1,OFFSET,INDEX) \
+ assert((long) (POP1) > 0); \
+ assert((Word_t) (OFFSET) <= (Word_t) (POP1)); \
+ { \
+ Word_t i_offset = (POP1); \
+ \
+ while (i_offset-- > (OFFSET)) \
+ (PARRAY)[i_offset + 1] = (PARRAY)[i_offset]; \
+ \
+ (PARRAY)[OFFSET] = (INDEX); \
+ }
+
+
+// Variation for non-native Indexes, where cIS = Index Size
+// and PByte must point to a uint8_t (byte); shift byte-by-byte:
+//
+
+#define JU_INSERTINPLACE3(PBYTE,POP1,OFFSET,INDEX) \
+{ \
+ Word_t i_off = POP1; \
+ \
+ while (i_off-- > (OFFSET)) \
+ { \
+ Word_t i_dx = i_off * 3; \
+ (PBYTE)[i_dx + 0 + 3] = (PBYTE)[i_dx + 0]; \
+ (PBYTE)[i_dx + 1 + 3] = (PBYTE)[i_dx + 1]; \
+ (PBYTE)[i_dx + 2 + 3] = (PBYTE)[i_dx + 2]; \
+ } \
+ JU_COPY3_LONG_TO_PINDEX(&((PBYTE)[(OFFSET) * 3]), INDEX); \
+}
+
+#ifdef JU_64BIT
+
+#define JU_INSERTINPLACE5(PBYTE,POP1,OFFSET,INDEX) \
+{ \
+ Word_t i_off = POP1; \
+ \
+ while (i_off-- > (OFFSET)) \
+ { \
+ Word_t i_dx = i_off * 5; \
+ (PBYTE)[i_dx + 0 + 5] = (PBYTE)[i_dx + 0]; \
+ (PBYTE)[i_dx + 1 + 5] = (PBYTE)[i_dx + 1]; \
+ (PBYTE)[i_dx + 2 + 5] = (PBYTE)[i_dx + 2]; \
+ (PBYTE)[i_dx + 3 + 5] = (PBYTE)[i_dx + 3]; \
+ (PBYTE)[i_dx + 4 + 5] = (PBYTE)[i_dx + 4]; \
+ } \
+ JU_COPY5_LONG_TO_PINDEX(&((PBYTE)[(OFFSET) * 5]), INDEX); \
+}
+
+#define JU_INSERTINPLACE6(PBYTE,POP1,OFFSET,INDEX) \
+{ \
+ Word_t i_off = POP1; \
+ \
+ while (i_off-- > (OFFSET)) \
+ { \
+ Word_t i_dx = i_off * 6; \
+ (PBYTE)[i_dx + 0 + 6] = (PBYTE)[i_dx + 0]; \
+ (PBYTE)[i_dx + 1 + 6] = (PBYTE)[i_dx + 1]; \
+ (PBYTE)[i_dx + 2 + 6] = (PBYTE)[i_dx + 2]; \
+ (PBYTE)[i_dx + 3 + 6] = (PBYTE)[i_dx + 3]; \
+ (PBYTE)[i_dx + 4 + 6] = (PBYTE)[i_dx + 4]; \
+ (PBYTE)[i_dx + 5 + 6] = (PBYTE)[i_dx + 5]; \
+ } \
+ JU_COPY6_LONG_TO_PINDEX(&((PBYTE)[(OFFSET) * 6]), INDEX); \
+}
+
+#define JU_INSERTINPLACE7(PBYTE,POP1,OFFSET,INDEX) \
+{ \
+ Word_t i_off = POP1; \
+ \
+ while (i_off-- > (OFFSET)) \
+ { \
+ Word_t i_dx = i_off * 7; \
+ (PBYTE)[i_dx + 0 + 7] = (PBYTE)[i_dx + 0]; \
+ (PBYTE)[i_dx + 1 + 7] = (PBYTE)[i_dx + 1]; \
+ (PBYTE)[i_dx + 2 + 7] = (PBYTE)[i_dx + 2]; \
+ (PBYTE)[i_dx + 3 + 7] = (PBYTE)[i_dx + 3]; \
+ (PBYTE)[i_dx + 4 + 7] = (PBYTE)[i_dx + 4]; \
+ (PBYTE)[i_dx + 5 + 7] = (PBYTE)[i_dx + 5]; \
+ (PBYTE)[i_dx + 6 + 7] = (PBYTE)[i_dx + 6]; \
+ } \
+ JU_COPY7_LONG_TO_PINDEX(&((PBYTE)[(OFFSET) * 7]), INDEX); \
+}
+#endif // JU_64BIT
+
+// Counterparts to the above for deleting an Index:
+//
+// "Shift down" the array elements starting at the Index to be deleted.
+
+#define JU_DELETEINPLACE(PARRAY,POP1,OFFSET,IGNORE) \
+ assert((long) (POP1) > 0); \
+ assert((Word_t) (OFFSET) < (Word_t) (POP1)); \
+ { \
+ Word_t i_offset = (OFFSET); \
+ \
+ while (++i_offset < (POP1)) \
+ (PARRAY)[i_offset - 1] = (PARRAY)[i_offset]; \
+ }
+
+// Variation for odd-byte-sized (non-native) Indexes, where cIS = Index Size
+// and PByte must point to a uint8_t (byte); copy byte-by-byte:
+//
+// Note: If cIS == 1, JU_DELETEINPLACE_ODD == JU_DELETEINPLACE.
+//
+// Note: There are no endian issues here because bytes are just shifted as-is,
+// not converted to/from an Index.
+
+#define JU_DELETEINPLACE_ODD(PBYTE,POP1,OFFSET,cIS) \
+ assert((long) (POP1) > 0); \
+ assert((Word_t) (OFFSET) < (Word_t) (POP1)); \
+ { \
+ Word_t b_off = (((OFFSET) + 1) * (cIS)) - 1; \
+ \
+ while (++b_off < ((POP1) * (cIS))) \
+ (PBYTE)[b_off - (cIS)] = (PBYTE)[b_off]; \
+ }
+
+
+// INSERT/DELETE AN INDEX WHILE COPYING OTHERS:
+//
+// Copy PSource[] to PDest[], where PSource[] has Pop1 elements (Indexes),
+// inserting Index at PDest[Offset]. Unlike JU_*INPLACE*() above, these macros
+// are used when moving Indexes from one memory object to another.
+
+#define JU_INSERTCOPY(PDEST,PSOURCE,POP1,OFFSET,INDEX) \
+ assert((long) (POP1) > 0); \
+ assert((Word_t) (OFFSET) <= (Word_t) (POP1)); \
+ { \
+ Word_t i_offset; \
+ \
+ for (i_offset = 0; i_offset < (OFFSET); ++i_offset) \
+ (PDEST)[i_offset] = (PSOURCE)[i_offset]; \
+ \
+ (PDEST)[i_offset] = (INDEX); \
+ \
+ for (/* null */; i_offset < (POP1); ++i_offset) \
+ (PDEST)[i_offset + 1] = (PSOURCE)[i_offset]; \
+ }
+
+#define JU_INSERTCOPY3(PDEST,PSOURCE,POP1,OFFSET,INDEX) \
+assert((long) (POP1) > 0); \
+assert((Word_t) (OFFSET) <= (Word_t) (POP1)); \
+{ \
+ Word_t o_ff; \
+ \
+ for (o_ff = 0; o_ff < (OFFSET); o_ff++) \
+ { \
+ Word_t i_dx = o_ff * 3; \
+ (PDEST)[i_dx + 0] = (PSOURCE)[i_dx + 0]; \
+ (PDEST)[i_dx + 1] = (PSOURCE)[i_dx + 1]; \
+ (PDEST)[i_dx + 2] = (PSOURCE)[i_dx + 2]; \
+ } \
+ JU_COPY3_LONG_TO_PINDEX(&((PDEST)[(OFFSET) * 3]), INDEX); \
+ \
+ for (/* null */; o_ff < (POP1); o_ff++) \
+ { \
+ Word_t i_dx = o_ff * 3; \
+ (PDEST)[i_dx + 0 + 3] = (PSOURCE)[i_dx + 0]; \
+ (PDEST)[i_dx + 1 + 3] = (PSOURCE)[i_dx + 1]; \
+ (PDEST)[i_dx + 2 + 3] = (PSOURCE)[i_dx + 2]; \
+ } \
+}
+
+#ifdef JU_64BIT
+
+#define JU_INSERTCOPY5(PDEST,PSOURCE,POP1,OFFSET,INDEX) \
+assert((long) (POP1) > 0); \
+assert((Word_t) (OFFSET) <= (Word_t) (POP1)); \
+{ \
+ Word_t o_ff; \
+ \
+ for (o_ff = 0; o_ff < (OFFSET); o_ff++) \
+ { \
+ Word_t i_dx = o_ff * 5; \
+ (PDEST)[i_dx + 0] = (PSOURCE)[i_dx + 0]; \
+ (PDEST)[i_dx + 1] = (PSOURCE)[i_dx + 1]; \
+ (PDEST)[i_dx + 2] = (PSOURCE)[i_dx + 2]; \
+ (PDEST)[i_dx + 3] = (PSOURCE)[i_dx + 3]; \
+ (PDEST)[i_dx + 4] = (PSOURCE)[i_dx + 4]; \
+ } \
+ JU_COPY5_LONG_TO_PINDEX(&((PDEST)[(OFFSET) * 5]), INDEX); \
+ \
+ for (/* null */; o_ff < (POP1); o_ff++) \
+ { \
+ Word_t i_dx = o_ff * 5; \
+ (PDEST)[i_dx + 0 + 5] = (PSOURCE)[i_dx + 0]; \
+ (PDEST)[i_dx + 1 + 5] = (PSOURCE)[i_dx + 1]; \
+ (PDEST)[i_dx + 2 + 5] = (PSOURCE)[i_dx + 2]; \
+ (PDEST)[i_dx + 3 + 5] = (PSOURCE)[i_dx + 3]; \
+ (PDEST)[i_dx + 4 + 5] = (PSOURCE)[i_dx + 4]; \
+ } \
+}
+
+#define JU_INSERTCOPY6(PDEST,PSOURCE,POP1,OFFSET,INDEX) \
+assert((long) (POP1) > 0); \
+assert((Word_t) (OFFSET) <= (Word_t) (POP1)); \
+{ \
+ Word_t o_ff; \
+ \
+ for (o_ff = 0; o_ff < (OFFSET); o_ff++) \
+ { \
+ Word_t i_dx = o_ff * 6; \
+ (PDEST)[i_dx + 0] = (PSOURCE)[i_dx + 0]; \
+ (PDEST)[i_dx + 1] = (PSOURCE)[i_dx + 1]; \
+ (PDEST)[i_dx + 2] = (PSOURCE)[i_dx + 2]; \
+ (PDEST)[i_dx + 3] = (PSOURCE)[i_dx + 3]; \
+ (PDEST)[i_dx + 4] = (PSOURCE)[i_dx + 4]; \
+ (PDEST)[i_dx + 5] = (PSOURCE)[i_dx + 5]; \
+ } \
+ JU_COPY6_LONG_TO_PINDEX(&((PDEST)[(OFFSET) * 6]), INDEX); \
+ \
+ for (/* null */; o_ff < (POP1); o_ff++) \
+ { \
+ Word_t i_dx = o_ff * 6; \
+ (PDEST)[i_dx + 0 + 6] = (PSOURCE)[i_dx + 0]; \
+ (PDEST)[i_dx + 1 + 6] = (PSOURCE)[i_dx + 1]; \
+ (PDEST)[i_dx + 2 + 6] = (PSOURCE)[i_dx + 2]; \
+ (PDEST)[i_dx + 3 + 6] = (PSOURCE)[i_dx + 3]; \
+ (PDEST)[i_dx + 4 + 6] = (PSOURCE)[i_dx + 4]; \
+ (PDEST)[i_dx + 5 + 6] = (PSOURCE)[i_dx + 5]; \
+ } \
+}
+
+#define JU_INSERTCOPY7(PDEST,PSOURCE,POP1,OFFSET,INDEX) \
+assert((long) (POP1) > 0); \
+assert((Word_t) (OFFSET) <= (Word_t) (POP1)); \
+{ \
+ Word_t o_ff; \
+ \
+ for (o_ff = 0; o_ff < (OFFSET); o_ff++) \
+ { \
+ Word_t i_dx = o_ff * 7; \
+ (PDEST)[i_dx + 0] = (PSOURCE)[i_dx + 0]; \
+ (PDEST)[i_dx + 1] = (PSOURCE)[i_dx + 1]; \
+ (PDEST)[i_dx + 2] = (PSOURCE)[i_dx + 2]; \
+ (PDEST)[i_dx + 3] = (PSOURCE)[i_dx + 3]; \
+ (PDEST)[i_dx + 4] = (PSOURCE)[i_dx + 4]; \
+ (PDEST)[i_dx + 5] = (PSOURCE)[i_dx + 5]; \
+ (PDEST)[i_dx + 6] = (PSOURCE)[i_dx + 6]; \
+ } \
+ JU_COPY7_LONG_TO_PINDEX(&((PDEST)[(OFFSET) * 7]), INDEX); \
+ \
+ for (/* null */; o_ff < (POP1); o_ff++) \
+ { \
+ Word_t i_dx = o_ff * 7; \
+ (PDEST)[i_dx + 0 + 7] = (PSOURCE)[i_dx + 0]; \
+ (PDEST)[i_dx + 1 + 7] = (PSOURCE)[i_dx + 1]; \
+ (PDEST)[i_dx + 2 + 7] = (PSOURCE)[i_dx + 2]; \
+ (PDEST)[i_dx + 3 + 7] = (PSOURCE)[i_dx + 3]; \
+ (PDEST)[i_dx + 4 + 7] = (PSOURCE)[i_dx + 4]; \
+ (PDEST)[i_dx + 5 + 7] = (PSOURCE)[i_dx + 5]; \
+ (PDEST)[i_dx + 6 + 7] = (PSOURCE)[i_dx + 6]; \
+ } \
+}
+
+#endif // JU_64BIT
+
+// Counterparts to the above for deleting an Index:
+
+#define JU_DELETECOPY(PDEST,PSOURCE,POP1,OFFSET,IGNORE) \
+ assert((long) (POP1) > 0); \
+ assert((Word_t) (OFFSET) < (Word_t) (POP1)); \
+ { \
+ Word_t i_offset; \
+ \
+ for (i_offset = 0; i_offset < (OFFSET); ++i_offset) \
+ (PDEST)[i_offset] = (PSOURCE)[i_offset]; \
+ \
+ for (++i_offset; i_offset < (POP1); ++i_offset) \
+ (PDEST)[i_offset - 1] = (PSOURCE)[i_offset]; \
+ }
+
+// Variation for odd-byte-sized (non-native) Indexes, where cIS = Index Size;
+// copy byte-by-byte:
+//
+// Note: There are no endian issues here because bytes are just shifted as-is,
+// not converted to/from an Index.
+//
+// Note: If cIS == 1, JU_DELETECOPY_ODD == JU_DELETECOPY, at least in concept.
+
+#define JU_DELETECOPY_ODD(PDEST,PSOURCE,POP1,OFFSET,cIS) \
+ assert((long) (POP1) > 0); \
+ assert((Word_t) (OFFSET) < (Word_t) (POP1)); \
+ { \
+ uint8_t *_Pdest = (uint8_t *) (PDEST); \
+ uint8_t *_Psource = (uint8_t *) (PSOURCE); \
+ Word_t b_off; \
+ \
+ for (b_off = 0; b_off < ((OFFSET) * (cIS)); ++b_off) \
+ *_Pdest++ = *_Psource++; \
+ \
+ _Psource += (cIS); \
+ \
+ for (b_off += (cIS); b_off < ((POP1) * (cIS)); ++b_off) \
+ *_Pdest++ = *_Psource++; \
+ }
+
+
+// GENERIC RETURN CODE HANDLING FOR JUDY1 (NO VALUE AREAS) AND JUDYL (VALUE
+// AREAS):
+//
+// This common code hides Judy1 versus JudyL details of how to return various
+// conditions, including a pointer to a value area for JudyL.
+//
+// First, define an internal variation of JERR called JERRI (I = int) to make
+// lint happy. We accidentally shipped to 11.11 OEUR with all functions that
+// return int or Word_t using JERR, which is type Word_t, for errors. Lint
+// complains about this for functions that return int. So, internally use
+// JERRI for error returns from the int functions. Experiments show that
+// callers which compare int Foo() to (Word_t) JERR (~0UL) are OK, since JERRI
+// sign-extends to match JERR.
+
+#define JERRI ((int) ~0) // see above.
+
+#ifdef JUDY1
+
+#define JU_RET_FOUND return(1)
+#define JU_RET_NOTFOUND return(0)
+
+// For Judy1, these all "fall through" to simply JU_RET_FOUND, since there is no
+// value area pointer to return:
+
+#define JU_RET_FOUND_LEAFW(PJLW,POP1,OFFSET) JU_RET_FOUND
+
+#define JU_RET_FOUND_JPM(Pjpm) JU_RET_FOUND
+#define JU_RET_FOUND_PVALUE(Pjv,OFFSET) JU_RET_FOUND
+#ifndef JU_64BIT
+#define JU_RET_FOUND_LEAF1(Pjll,POP1,OFFSET) JU_RET_FOUND
+#endif
+#define JU_RET_FOUND_LEAF2(Pjll,POP1,OFFSET) JU_RET_FOUND
+#define JU_RET_FOUND_LEAF3(Pjll,POP1,OFFSET) JU_RET_FOUND
+#ifdef JU_64BIT
+#define JU_RET_FOUND_LEAF4(Pjll,POP1,OFFSET) JU_RET_FOUND
+#define JU_RET_FOUND_LEAF5(Pjll,POP1,OFFSET) JU_RET_FOUND
+#define JU_RET_FOUND_LEAF6(Pjll,POP1,OFFSET) JU_RET_FOUND
+#define JU_RET_FOUND_LEAF7(Pjll,POP1,OFFSET) JU_RET_FOUND
+#endif
+#define JU_RET_FOUND_IMM_01(Pjp) JU_RET_FOUND
+#define JU_RET_FOUND_IMM(Pjp,OFFSET) JU_RET_FOUND
+
+// Note: No JudyL equivalent:
+
+#define JU_RET_FOUND_FULLPOPU1 JU_RET_FOUND
+#define JU_RET_FOUND_LEAF_B1(PJLB,SUBEXP,OFFSET) JU_RET_FOUND
+
+#else // JUDYL
+
+// JU_RET_FOUND // see below; must NOT be defined for JudyL.
+#define JU_RET_NOTFOUND return((PPvoid_t) NULL)
+
+// For JudyL, the location of the value area depends on the JP type and other
+// factors:
+//
+// TBD: The value areas should be accessed via data structures, here and in
+// Dougs code, not by hard-coded address calculations.
+//
+// This is useful in insert/delete code when the value area is returned from
+// lower levels in the JPM:
+
+#define JU_RET_FOUND_JPM(Pjpm) return((PPvoid_t) ((Pjpm)->jpm_PValue))
+
+// This is useful in insert/delete code when the value area location is already
+// computed:
+
+#define JU_RET_FOUND_PVALUE(Pjv,OFFSET) return((PPvoid_t) ((Pjv) + OFFSET))
+
+#define JU_RET_FOUND_LEAFW(PJLW,POP1,OFFSET) \
+ return((PPvoid_t) (JL_LEAFWVALUEAREA(PJLW, POP1) + (OFFSET)))
+
+#define JU_RET_FOUND_LEAF1(Pjll,POP1,OFFSET) \
+ return((PPvoid_t) (JL_LEAF1VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF2(Pjll,POP1,OFFSET) \
+ return((PPvoid_t) (JL_LEAF2VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF3(Pjll,POP1,OFFSET) \
+ return((PPvoid_t) (JL_LEAF3VALUEAREA(Pjll, POP1) + (OFFSET)))
+#ifdef JU_64BIT
+#define JU_RET_FOUND_LEAF4(Pjll,POP1,OFFSET) \
+ return((PPvoid_t) (JL_LEAF4VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF5(Pjll,POP1,OFFSET) \
+ return((PPvoid_t) (JL_LEAF5VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF6(Pjll,POP1,OFFSET) \
+ return((PPvoid_t) (JL_LEAF6VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF7(Pjll,POP1,OFFSET) \
+ return((PPvoid_t) (JL_LEAF7VALUEAREA(Pjll, POP1) + (OFFSET)))
+#endif
+
+// Note: Here jp_Addr is a value area itself and not an address, so P_JV() is
+// not needed:
+
+#define JU_RET_FOUND_IMM_01(PJP) return((PPvoid_t) (&((PJP)->jp_Addr)))
+
+// Note: Here jp_Addr is a pointer to a separately-mallocd value area, so
+// P_JV() is required; likewise for JL_JLB_PVALUE:
+
+#define JU_RET_FOUND_IMM(PJP,OFFSET) \
+ return((PPvoid_t) (P_JV((PJP)->jp_Addr) + (OFFSET)))
+
+#define JU_RET_FOUND_LEAF_B1(PJLB,SUBEXP,OFFSET) \
+ return((PPvoid_t) (P_JV(JL_JLB_PVALUE(PJLB, SUBEXP)) + (OFFSET)))
+
+#endif // JUDYL
+
+
+// GENERIC ERROR HANDLING:
+//
+// This is complicated by variations in the needs of the callers of these
+// macros. Only use JU_SET_ERRNO() for PJError, because it can be null; use
+// JU_SET_ERRNO_NONNULL() for Pjpm, which is never null, and also in other
+// cases where the pointer is known not to be null (to save dead branches).
+//
+// Note: Most cases of JU_ERRNO_OVERRUN or JU_ERRNO_CORRUPT should result in
+// an assertion failure in debug code, so they are more likely to be caught, so
+// do that here in each macro.
+
+#define JU_SET_ERRNO(PJError, JErrno) \
+ { \
+ assert((JErrno) != JU_ERRNO_OVERRUN); \
+ assert((JErrno) != JU_ERRNO_CORRUPT); \
+ \
+ if (PJError != (PJError_t) NULL) \
+ { \
+ JU_ERRNO(PJError) = (JErrno); \
+ JU_ERRID(PJError) = __LINE__; \
+ } \
+ }
+
+// Variation for callers who know already that PJError is non-null; and, it can
+// also be Pjpm (both PJError_t and Pjpm_t have je_* fields), so only assert it
+// for null, not cast to any specific pointer type:
+
+#define JU_SET_ERRNO_NONNULL(PJError, JErrno) \
+ { \
+ assert((JErrno) != JU_ERRNO_OVERRUN); \
+ assert((JErrno) != JU_ERRNO_CORRUPT); \
+ assert(PJError); \
+ \
+ JU_ERRNO(PJError) = (JErrno); \
+ JU_ERRID(PJError) = __LINE__; \
+ }
+
+// Variation to copy error info from a (required) JPM to an (optional)
+// PJError_t:
+//
+// Note: The assertions above about JU_ERRNO_OVERRUN and JU_ERRNO_CORRUPT
+// should have already popped, so they are not needed here.
+
+#define JU_COPY_ERRNO(PJError, Pjpm) \
+ { \
+ if (PJError) \
+ { \
+ JU_ERRNO(PJError) = (uint8_t)JU_ERRNO(Pjpm); \
+ JU_ERRID(PJError) = JU_ERRID(Pjpm); \
+ } \
+ }
+
+// For JErrno parameter to previous macros upon return from Judy*Alloc*():
+//
+// The memory allocator returns an address of 0 for out of memory,
+// 1..sizeof(Word_t)-1 for corruption (an invalid pointer), otherwise a valid
+// pointer.
+
+#define JU_ALLOC_ERRNO(ADDR) \
+ (((void *) (ADDR) != (void *) NULL) ? JU_ERRNO_OVERRUN : JU_ERRNO_NOMEM)
+
+#define JU_CHECKALLOC(Type,Ptr,Retval) \
+ if ((Ptr) < (Type) sizeof(Word_t)) \
+ { \
+ JU_SET_ERRNO(PJError, JU_ALLOC_ERRNO(Ptr)); \
+ return(Retval); \
+ }
+
+// Leaf search routines
+
+#ifdef JU_NOINLINE
+
+int j__udySearchLeaf1(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf2(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf3(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+
+#ifdef JU_64BIT
+
+int j__udySearchLeaf4(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf5(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf6(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf7(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+
+#endif // JU_64BIT
+
+int j__udySearchLeafW(Pjlw_t Pjlw, Word_t LeafPop1, Word_t Index);
+
+#else // complier support for inline
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf1(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf1(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNATIVE(uint8_t, Pjll, LeafPop1, Index); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf2(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf2(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNATIVE(uint16_t, Pjll, LeafPop1, Index); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf3(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf3(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNONNAT(Pjll, LeafPop1, Index, 3, JU_COPY3_PINDEX_TO_LONG); }
+
+#ifdef JU_64BIT
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf4(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf4(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNATIVE(uint32_t, Pjll, LeafPop1, Index); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf5(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf5(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNONNAT(Pjll, LeafPop1, Index, 5, JU_COPY5_PINDEX_TO_LONG); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf6(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf6(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNONNAT(Pjll, LeafPop1, Index, 6, JU_COPY6_PINDEX_TO_LONG); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf7(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf7(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNONNAT(Pjll, LeafPop1, Index, 7, JU_COPY7_PINDEX_TO_LONG); }
+
+#endif // JU_64BIT
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeafW(Pjlw_t Pjlw, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeafW(Pjlw_t Pjlw, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNATIVE(Word_t, Pjlw, LeafPop1, Index); }
+
+#endif // compiler support for inline
+
+#endif // ! _JUDYPRIVATE_INCLUDED
diff --git a/libs/klib/judy/JudyPrivate1L.h b/libs/klib/judy/JudyPrivate1L.h
new file mode 100644
index 0000000..5b9591f
--- /dev/null
+++ b/libs/klib/judy/JudyPrivate1L.h
@@ -0,0 +1,483 @@
+#ifndef _JUDYPRIVATE1L_INCLUDED
+#define _JUDYPRIVATE1L_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// ****************************************************************************
+// Declare common cJU_* names for JP Types that occur in both Judy1 and JudyL,
+// for use by code that ifdefs JUDY1 and JUDYL. Only JP Types common to both
+// Judy1 and JudyL are #defined here with equivalent cJU_* names. JP Types
+// unique to only Judy1 or JudyL are listed in comments, so the type lists
+// match the Judy1.h and JudyL.h files.
+//
+// This file also defines cJU_* for other JP-related constants and functions
+// that some shared JUDY1/JUDYL code finds handy.
+//
+// At least in principle this file should be included AFTER Judy1.h or JudyL.h.
+//
+// WARNING: This file must be kept consistent with the enums in Judy1.h and
+// JudyL.h.
+//
+// TBD: You might think, why not define common cJU_* enums in, say,
+// JudyPrivate.h, and then inherit them into superset enums in Judy1.h and
+// JudyL.h? The problem is that the enum lists for each class (cJ1_* and
+// cJL_*) must be numerically "packed" into the correct order, for two reasons:
+// (1) allow the compiler to generate "tight" switch statements with no wasted
+// slots (although this is not very big), and (2) allow calculations using the
+// enum values, although this is also not an issue if the calculations are only
+// within each cJ*_JPIMMED_*_* class and the members are packed within the
+// class.
+
+#ifdef JUDY1
+
+#define cJU_JRPNULL cJ1_JRPNULL
+#define cJU_JPNULL1 cJ1_JPNULL1
+#define cJU_JPNULL2 cJ1_JPNULL2
+#define cJU_JPNULL3 cJ1_JPNULL3
+#ifdef JU_64BIT
+#define cJU_JPNULL4 cJ1_JPNULL4
+#define cJU_JPNULL5 cJ1_JPNULL5
+#define cJU_JPNULL6 cJ1_JPNULL6
+#define cJU_JPNULL7 cJ1_JPNULL7
+#endif
+#define cJU_JPNULLMAX cJ1_JPNULLMAX
+#define cJU_JPBRANCH_L2 cJ1_JPBRANCH_L2
+#define cJU_JPBRANCH_L3 cJ1_JPBRANCH_L3
+#ifdef JU_64BIT
+#define cJU_JPBRANCH_L4 cJ1_JPBRANCH_L4
+#define cJU_JPBRANCH_L5 cJ1_JPBRANCH_L5
+#define cJU_JPBRANCH_L6 cJ1_JPBRANCH_L6
+#define cJU_JPBRANCH_L7 cJ1_JPBRANCH_L7
+#endif
+#define cJU_JPBRANCH_L cJ1_JPBRANCH_L
+#define j__U_BranchBJPPopToWords j__1_BranchBJPPopToWords
+#define cJU_JPBRANCH_B2 cJ1_JPBRANCH_B2
+#define cJU_JPBRANCH_B3 cJ1_JPBRANCH_B3
+#ifdef JU_64BIT
+#define cJU_JPBRANCH_B4 cJ1_JPBRANCH_B4
+#define cJU_JPBRANCH_B5 cJ1_JPBRANCH_B5
+#define cJU_JPBRANCH_B6 cJ1_JPBRANCH_B6
+#define cJU_JPBRANCH_B7 cJ1_JPBRANCH_B7
+#endif
+#define cJU_JPBRANCH_B cJ1_JPBRANCH_B
+#define cJU_JPBRANCH_U2 cJ1_JPBRANCH_U2
+#define cJU_JPBRANCH_U3 cJ1_JPBRANCH_U3
+#ifdef JU_64BIT
+#define cJU_JPBRANCH_U4 cJ1_JPBRANCH_U4
+#define cJU_JPBRANCH_U5 cJ1_JPBRANCH_U5
+#define cJU_JPBRANCH_U6 cJ1_JPBRANCH_U6
+#define cJU_JPBRANCH_U7 cJ1_JPBRANCH_U7
+#endif
+#define cJU_JPBRANCH_U cJ1_JPBRANCH_U
+#ifndef JU_64BIT
+#define cJU_JPLEAF1 cJ1_JPLEAF1
+#endif
+#define cJU_JPLEAF2 cJ1_JPLEAF2
+#define cJU_JPLEAF3 cJ1_JPLEAF3
+#ifdef JU_64BIT
+#define cJU_JPLEAF4 cJ1_JPLEAF4
+#define cJU_JPLEAF5 cJ1_JPLEAF5
+#define cJU_JPLEAF6 cJ1_JPLEAF6
+#define cJU_JPLEAF7 cJ1_JPLEAF7
+#endif
+#define cJU_JPLEAF_B1 cJ1_JPLEAF_B1
+// cJ1_JPFULLPOPU1
+#define cJU_JPIMMED_1_01 cJ1_JPIMMED_1_01
+#define cJU_JPIMMED_2_01 cJ1_JPIMMED_2_01
+#define cJU_JPIMMED_3_01 cJ1_JPIMMED_3_01
+#ifdef JU_64BIT
+#define cJU_JPIMMED_4_01 cJ1_JPIMMED_4_01
+#define cJU_JPIMMED_5_01 cJ1_JPIMMED_5_01
+#define cJU_JPIMMED_6_01 cJ1_JPIMMED_6_01
+#define cJU_JPIMMED_7_01 cJ1_JPIMMED_7_01
+#endif
+#define cJU_JPIMMED_1_02 cJ1_JPIMMED_1_02
+#define cJU_JPIMMED_1_03 cJ1_JPIMMED_1_03
+#define cJU_JPIMMED_1_04 cJ1_JPIMMED_1_04
+#define cJU_JPIMMED_1_05 cJ1_JPIMMED_1_05
+#define cJU_JPIMMED_1_06 cJ1_JPIMMED_1_06
+#define cJU_JPIMMED_1_07 cJ1_JPIMMED_1_07
+#ifdef JU_64BIT
+// cJ1_JPIMMED_1_08
+// cJ1_JPIMMED_1_09
+// cJ1_JPIMMED_1_10
+// cJ1_JPIMMED_1_11
+// cJ1_JPIMMED_1_12
+// cJ1_JPIMMED_1_13
+// cJ1_JPIMMED_1_14
+// cJ1_JPIMMED_1_15
+#endif
+#define cJU_JPIMMED_2_02 cJ1_JPIMMED_2_02
+#define cJU_JPIMMED_2_03 cJ1_JPIMMED_2_03
+#ifdef JU_64BIT
+// cJ1_JPIMMED_2_04
+// cJ1_JPIMMED_2_05
+// cJ1_JPIMMED_2_06
+// cJ1_JPIMMED_2_07
+#endif
+#define cJU_JPIMMED_3_02 cJ1_JPIMMED_3_02
+#ifdef JU_64BIT
+// cJ1_JPIMMED_3_03
+// cJ1_JPIMMED_3_04
+// cJ1_JPIMMED_3_05
+// cJ1_JPIMMED_4_02
+// cJ1_JPIMMED_4_03
+// cJ1_JPIMMED_5_02
+// cJ1_JPIMMED_5_03
+// cJ1_JPIMMED_6_02
+// cJ1_JPIMMED_7_02
+#endif
+#define cJU_JPIMMED_CAP cJ1_JPIMMED_CAP
+
+#else // JUDYL ****************************************************************
+
+#define cJU_JRPNULL cJL_JRPNULL
+#define cJU_JPNULL1 cJL_JPNULL1
+#define cJU_JPNULL2 cJL_JPNULL2
+#define cJU_JPNULL3 cJL_JPNULL3
+#ifdef JU_64BIT
+#define cJU_JPNULL4 cJL_JPNULL4
+#define cJU_JPNULL5 cJL_JPNULL5
+#define cJU_JPNULL6 cJL_JPNULL6
+#define cJU_JPNULL7 cJL_JPNULL7
+#endif
+#define cJU_JPNULLMAX cJL_JPNULLMAX
+#define cJU_JPBRANCH_L2 cJL_JPBRANCH_L2
+#define cJU_JPBRANCH_L3 cJL_JPBRANCH_L3
+#ifdef JU_64BIT
+#define cJU_JPBRANCH_L4 cJL_JPBRANCH_L4
+#define cJU_JPBRANCH_L5 cJL_JPBRANCH_L5
+#define cJU_JPBRANCH_L6 cJL_JPBRANCH_L6
+#define cJU_JPBRANCH_L7 cJL_JPBRANCH_L7
+#endif
+#define cJU_JPBRANCH_L cJL_JPBRANCH_L
+#define j__U_BranchBJPPopToWords j__L_BranchBJPPopToWords
+#define cJU_JPBRANCH_B2 cJL_JPBRANCH_B2
+#define cJU_JPBRANCH_B3 cJL_JPBRANCH_B3
+#ifdef JU_64BIT
+#define cJU_JPBRANCH_B4 cJL_JPBRANCH_B4
+#define cJU_JPBRANCH_B5 cJL_JPBRANCH_B5
+#define cJU_JPBRANCH_B6 cJL_JPBRANCH_B6
+#define cJU_JPBRANCH_B7 cJL_JPBRANCH_B7
+#endif
+#define cJU_JPBRANCH_B cJL_JPBRANCH_B
+#define cJU_JPBRANCH_U2 cJL_JPBRANCH_U2
+#define cJU_JPBRANCH_U3 cJL_JPBRANCH_U3
+#ifdef JU_64BIT
+#define cJU_JPBRANCH_U4 cJL_JPBRANCH_U4
+#define cJU_JPBRANCH_U5 cJL_JPBRANCH_U5
+#define cJU_JPBRANCH_U6 cJL_JPBRANCH_U6
+#define cJU_JPBRANCH_U7 cJL_JPBRANCH_U7
+#endif
+#define cJU_JPBRANCH_U cJL_JPBRANCH_U
+#define cJU_JPLEAF1 cJL_JPLEAF1
+#define cJU_JPLEAF2 cJL_JPLEAF2
+#define cJU_JPLEAF3 cJL_JPLEAF3
+#ifdef JU_64BIT
+#define cJU_JPLEAF4 cJL_JPLEAF4
+#define cJU_JPLEAF5 cJL_JPLEAF5
+#define cJU_JPLEAF6 cJL_JPLEAF6
+#define cJU_JPLEAF7 cJL_JPLEAF7
+#endif
+#define cJU_JPLEAF_B1 cJL_JPLEAF_B1
+#define cJU_JPIMMED_1_01 cJL_JPIMMED_1_01
+#define cJU_JPIMMED_2_01 cJL_JPIMMED_2_01
+#define cJU_JPIMMED_3_01 cJL_JPIMMED_3_01
+#ifdef JU_64BIT
+#define cJU_JPIMMED_4_01 cJL_JPIMMED_4_01
+#define cJU_JPIMMED_5_01 cJL_JPIMMED_5_01
+#define cJU_JPIMMED_6_01 cJL_JPIMMED_6_01
+#define cJU_JPIMMED_7_01 cJL_JPIMMED_7_01
+#endif
+#define cJU_JPIMMED_1_02 cJL_JPIMMED_1_02
+#define cJU_JPIMMED_1_03 cJL_JPIMMED_1_03
+#ifdef JU_64BIT
+#define cJU_JPIMMED_1_04 cJL_JPIMMED_1_04
+#define cJU_JPIMMED_1_05 cJL_JPIMMED_1_05
+#define cJU_JPIMMED_1_06 cJL_JPIMMED_1_06
+#define cJU_JPIMMED_1_07 cJL_JPIMMED_1_07
+#define cJU_JPIMMED_2_02 cJL_JPIMMED_2_02
+#define cJU_JPIMMED_2_03 cJL_JPIMMED_2_03
+#define cJU_JPIMMED_3_02 cJL_JPIMMED_3_02
+#endif
+#define cJU_JPIMMED_CAP cJL_JPIMMED_CAP
+
+#endif // JUDYL
+
+
+// ****************************************************************************
+// cJU*_ other than JP types:
+
+#ifdef JUDY1
+
+#define cJU_LEAFW_MAXPOP1 cJ1_LEAFW_MAXPOP1
+#ifndef JU_64BIT
+#define cJU_LEAF1_MAXPOP1 cJ1_LEAF1_MAXPOP1
+#endif
+#define cJU_LEAF2_MAXPOP1 cJ1_LEAF2_MAXPOP1
+#define cJU_LEAF3_MAXPOP1 cJ1_LEAF3_MAXPOP1
+#ifdef JU_64BIT
+#define cJU_LEAF4_MAXPOP1 cJ1_LEAF4_MAXPOP1
+#define cJU_LEAF5_MAXPOP1 cJ1_LEAF5_MAXPOP1
+#define cJU_LEAF6_MAXPOP1 cJ1_LEAF6_MAXPOP1
+#define cJU_LEAF7_MAXPOP1 cJ1_LEAF7_MAXPOP1
+#endif
+#define cJU_IMMED1_MAXPOP1 cJ1_IMMED1_MAXPOP1
+#define cJU_IMMED2_MAXPOP1 cJ1_IMMED2_MAXPOP1
+#define cJU_IMMED3_MAXPOP1 cJ1_IMMED3_MAXPOP1
+#ifdef JU_64BIT
+#define cJU_IMMED4_MAXPOP1 cJ1_IMMED4_MAXPOP1
+#define cJU_IMMED5_MAXPOP1 cJ1_IMMED5_MAXPOP1
+#define cJU_IMMED6_MAXPOP1 cJ1_IMMED6_MAXPOP1
+#define cJU_IMMED7_MAXPOP1 cJ1_IMMED7_MAXPOP1
+#endif
+
+#define JU_LEAF1POPTOWORDS(Pop1) J1_LEAF1POPTOWORDS(Pop1)
+#define JU_LEAF2POPTOWORDS(Pop1) J1_LEAF2POPTOWORDS(Pop1)
+#define JU_LEAF3POPTOWORDS(Pop1) J1_LEAF3POPTOWORDS(Pop1)
+#ifdef JU_64BIT
+#define JU_LEAF4POPTOWORDS(Pop1) J1_LEAF4POPTOWORDS(Pop1)
+#define JU_LEAF5POPTOWORDS(Pop1) J1_LEAF5POPTOWORDS(Pop1)
+#define JU_LEAF6POPTOWORDS(Pop1) J1_LEAF6POPTOWORDS(Pop1)
+#define JU_LEAF7POPTOWORDS(Pop1) J1_LEAF7POPTOWORDS(Pop1)
+#endif
+#define JU_LEAFWPOPTOWORDS(Pop1) J1_LEAFWPOPTOWORDS(Pop1)
+
+#ifndef JU_64BIT
+#define JU_LEAF1GROWINPLACE(Pop1) J1_LEAF1GROWINPLACE(Pop1)
+#endif
+#define JU_LEAF2GROWINPLACE(Pop1) J1_LEAF2GROWINPLACE(Pop1)
+#define JU_LEAF3GROWINPLACE(Pop1) J1_LEAF3GROWINPLACE(Pop1)
+#ifdef JU_64BIT
+#define JU_LEAF4GROWINPLACE(Pop1) J1_LEAF4GROWINPLACE(Pop1)
+#define JU_LEAF5GROWINPLACE(Pop1) J1_LEAF5GROWINPLACE(Pop1)
+#define JU_LEAF6GROWINPLACE(Pop1) J1_LEAF6GROWINPLACE(Pop1)
+#define JU_LEAF7GROWINPLACE(Pop1) J1_LEAF7GROWINPLACE(Pop1)
+#endif
+#define JU_LEAFWGROWINPLACE(Pop1) J1_LEAFWGROWINPLACE(Pop1)
+
+#define j__udyCreateBranchL j__udy1CreateBranchL
+#define j__udyCreateBranchB j__udy1CreateBranchB
+#define j__udyCreateBranchU j__udy1CreateBranchU
+#define j__udyCascade1 j__udy1Cascade1
+#define j__udyCascade2 j__udy1Cascade2
+#define j__udyCascade3 j__udy1Cascade3
+#ifdef JU_64BIT
+#define j__udyCascade4 j__udy1Cascade4
+#define j__udyCascade5 j__udy1Cascade5
+#define j__udyCascade6 j__udy1Cascade6
+#define j__udyCascade7 j__udy1Cascade7
+#endif
+#define j__udyCascadeL j__udy1CascadeL
+#define j__udyInsertBranch j__udy1InsertBranch
+
+#define j__udyBranchBToBranchL j__udy1BranchBToBranchL
+#ifndef JU_64BIT
+#define j__udyLeafB1ToLeaf1 j__udy1LeafB1ToLeaf1
+#endif
+#define j__udyLeaf1ToLeaf2 j__udy1Leaf1ToLeaf2
+#define j__udyLeaf2ToLeaf3 j__udy1Leaf2ToLeaf3
+#ifndef JU_64BIT
+#define j__udyLeaf3ToLeafW j__udy1Leaf3ToLeafW
+#else
+#define j__udyLeaf3ToLeaf4 j__udy1Leaf3ToLeaf4
+#define j__udyLeaf4ToLeaf5 j__udy1Leaf4ToLeaf5
+#define j__udyLeaf5ToLeaf6 j__udy1Leaf5ToLeaf6
+#define j__udyLeaf6ToLeaf7 j__udy1Leaf6ToLeaf7
+#define j__udyLeaf7ToLeafW j__udy1Leaf7ToLeafW
+#endif
+
+#define jpm_t j1pm_t
+#define Pjpm_t Pj1pm_t
+
+#define jlb_t j1lb_t
+#define Pjlb_t Pj1lb_t
+
+#define JU_JLB_BITMAP J1_JLB_BITMAP
+
+#define j__udyAllocJPM j__udy1AllocJ1PM
+#define j__udyAllocJBL j__udy1AllocJBL
+#define j__udyAllocJBB j__udy1AllocJBB
+#define j__udyAllocJBBJP j__udy1AllocJBBJP
+#define j__udyAllocJBU j__udy1AllocJBU
+#ifndef JU_64BIT
+#define j__udyAllocJLL1 j__udy1AllocJLL1
+#endif
+#define j__udyAllocJLL2 j__udy1AllocJLL2
+#define j__udyAllocJLL3 j__udy1AllocJLL3
+#ifdef JU_64BIT
+#define j__udyAllocJLL4 j__udy1AllocJLL4
+#define j__udyAllocJLL5 j__udy1AllocJLL5
+#define j__udyAllocJLL6 j__udy1AllocJLL6
+#define j__udyAllocJLL7 j__udy1AllocJLL7
+#endif
+#define j__udyAllocJLW j__udy1AllocJLW
+#define j__udyAllocJLB1 j__udy1AllocJLB1
+#define j__udyFreeJPM j__udy1FreeJ1PM
+#define j__udyFreeJBL j__udy1FreeJBL
+#define j__udyFreeJBB j__udy1FreeJBB
+#define j__udyFreeJBBJP j__udy1FreeJBBJP
+#define j__udyFreeJBU j__udy1FreeJBU
+#ifndef JU_64BIT
+#define j__udyFreeJLL1 j__udy1FreeJLL1
+#endif
+#define j__udyFreeJLL2 j__udy1FreeJLL2
+#define j__udyFreeJLL3 j__udy1FreeJLL3
+#ifdef JU_64BIT
+#define j__udyFreeJLL4 j__udy1FreeJLL4
+#define j__udyFreeJLL5 j__udy1FreeJLL5
+#define j__udyFreeJLL6 j__udy1FreeJLL6
+#define j__udyFreeJLL7 j__udy1FreeJLL7
+#endif
+#define j__udyFreeJLW j__udy1FreeJLW
+#define j__udyFreeJLB1 j__udy1FreeJLB1
+#define j__udyFreeSM j__udy1FreeSM
+
+#define j__uMaxWords j__u1MaxWords
+
+#ifdef DEBUG
+#define JudyCheckPop Judy1CheckPop
+#endif
+
+#else // JUDYL ****************************************************************
+
+#define cJU_LEAFW_MAXPOP1 cJL_LEAFW_MAXPOP1
+#define cJU_LEAF1_MAXPOP1 cJL_LEAF1_MAXPOP1
+#define cJU_LEAF2_MAXPOP1 cJL_LEAF2_MAXPOP1
+#define cJU_LEAF3_MAXPOP1 cJL_LEAF3_MAXPOP1
+#ifdef JU_64BIT
+#define cJU_LEAF4_MAXPOP1 cJL_LEAF4_MAXPOP1
+#define cJU_LEAF5_MAXPOP1 cJL_LEAF5_MAXPOP1
+#define cJU_LEAF6_MAXPOP1 cJL_LEAF6_MAXPOP1
+#define cJU_LEAF7_MAXPOP1 cJL_LEAF7_MAXPOP1
+#endif
+#define cJU_IMMED1_MAXPOP1 cJL_IMMED1_MAXPOP1
+#define cJU_IMMED2_MAXPOP1 cJL_IMMED2_MAXPOP1
+#define cJU_IMMED3_MAXPOP1 cJL_IMMED3_MAXPOP1
+#ifdef JU_64BIT
+#define cJU_IMMED4_MAXPOP1 cJL_IMMED4_MAXPOP1
+#define cJU_IMMED5_MAXPOP1 cJL_IMMED5_MAXPOP1
+#define cJU_IMMED6_MAXPOP1 cJL_IMMED6_MAXPOP1
+#define cJU_IMMED7_MAXPOP1 cJL_IMMED7_MAXPOP1
+#endif
+
+#define JU_LEAF1POPTOWORDS(Pop1) JL_LEAF1POPTOWORDS(Pop1)
+#define JU_LEAF2POPTOWORDS(Pop1) JL_LEAF2POPTOWORDS(Pop1)
+#define JU_LEAF3POPTOWORDS(Pop1) JL_LEAF3POPTOWORDS(Pop1)
+#ifdef JU_64BIT
+#define JU_LEAF4POPTOWORDS(Pop1) JL_LEAF4POPTOWORDS(Pop1)
+#define JU_LEAF5POPTOWORDS(Pop1) JL_LEAF5POPTOWORDS(Pop1)
+#define JU_LEAF6POPTOWORDS(Pop1) JL_LEAF6POPTOWORDS(Pop1)
+#define JU_LEAF7POPTOWORDS(Pop1) JL_LEAF7POPTOWORDS(Pop1)
+#endif
+#define JU_LEAFWPOPTOWORDS(Pop1) JL_LEAFWPOPTOWORDS(Pop1)
+
+#define JU_LEAF1GROWINPLACE(Pop1) JL_LEAF1GROWINPLACE(Pop1)
+#define JU_LEAF2GROWINPLACE(Pop1) JL_LEAF2GROWINPLACE(Pop1)
+#define JU_LEAF3GROWINPLACE(Pop1) JL_LEAF3GROWINPLACE(Pop1)
+#ifdef JU_64BIT
+#define JU_LEAF4GROWINPLACE(Pop1) JL_LEAF4GROWINPLACE(Pop1)
+#define JU_LEAF5GROWINPLACE(Pop1) JL_LEAF5GROWINPLACE(Pop1)
+#define JU_LEAF6GROWINPLACE(Pop1) JL_LEAF6GROWINPLACE(Pop1)
+#define JU_LEAF7GROWINPLACE(Pop1) JL_LEAF7GROWINPLACE(Pop1)
+#endif
+#define JU_LEAFWGROWINPLACE(Pop1) JL_LEAFWGROWINPLACE(Pop1)
+
+#define j__udyCreateBranchL j__udyLCreateBranchL
+#define j__udyCreateBranchB j__udyLCreateBranchB
+#define j__udyCreateBranchU j__udyLCreateBranchU
+#define j__udyCascade1 j__udyLCascade1
+#define j__udyCascade2 j__udyLCascade2
+#define j__udyCascade3 j__udyLCascade3
+#ifdef JU_64BIT
+#define j__udyCascade4 j__udyLCascade4
+#define j__udyCascade5 j__udyLCascade5
+#define j__udyCascade6 j__udyLCascade6
+#define j__udyCascade7 j__udyLCascade7
+#endif
+#define j__udyCascadeL j__udyLCascadeL
+#define j__udyInsertBranch j__udyLInsertBranch
+
+#define j__udyBranchBToBranchL j__udyLBranchBToBranchL
+#define j__udyLeafB1ToLeaf1 j__udyLLeafB1ToLeaf1
+#define j__udyLeaf1ToLeaf2 j__udyLLeaf1ToLeaf2
+#define j__udyLeaf2ToLeaf3 j__udyLLeaf2ToLeaf3
+#ifndef JU_64BIT
+#define j__udyLeaf3ToLeafW j__udyLLeaf3ToLeafW
+#else
+#define j__udyLeaf3ToLeaf4 j__udyLLeaf3ToLeaf4
+#define j__udyLeaf4ToLeaf5 j__udyLLeaf4ToLeaf5
+#define j__udyLeaf5ToLeaf6 j__udyLLeaf5ToLeaf6
+#define j__udyLeaf6ToLeaf7 j__udyLLeaf6ToLeaf7
+#define j__udyLeaf7ToLeafW j__udyLLeaf7ToLeafW
+#endif
+
+#define jpm_t jLpm_t
+#define Pjpm_t PjLpm_t
+
+#define jlb_t jLlb_t
+#define Pjlb_t PjLlb_t
+
+#define JU_JLB_BITMAP JL_JLB_BITMAP
+
+#define j__udyAllocJPM j__udyLAllocJLPM
+#define j__udyAllocJBL j__udyLAllocJBL
+#define j__udyAllocJBB j__udyLAllocJBB
+#define j__udyAllocJBBJP j__udyLAllocJBBJP
+#define j__udyAllocJBU j__udyLAllocJBU
+#define j__udyAllocJLL1 j__udyLAllocJLL1
+#define j__udyAllocJLL2 j__udyLAllocJLL2
+#define j__udyAllocJLL3 j__udyLAllocJLL3
+#ifdef JU_64BIT
+#define j__udyAllocJLL4 j__udyLAllocJLL4
+#define j__udyAllocJLL5 j__udyLAllocJLL5
+#define j__udyAllocJLL6 j__udyLAllocJLL6
+#define j__udyAllocJLL7 j__udyLAllocJLL7
+#endif
+#define j__udyAllocJLW j__udyLAllocJLW
+#define j__udyAllocJLB1 j__udyLAllocJLB1
+// j__udyLAllocJV
+#define j__udyFreeJPM j__udyLFreeJLPM
+#define j__udyFreeJBL j__udyLFreeJBL
+#define j__udyFreeJBB j__udyLFreeJBB
+#define j__udyFreeJBBJP j__udyLFreeJBBJP
+#define j__udyFreeJBU j__udyLFreeJBU
+#define j__udyFreeJLL1 j__udyLFreeJLL1
+#define j__udyFreeJLL2 j__udyLFreeJLL2
+#define j__udyFreeJLL3 j__udyLFreeJLL3
+#ifdef JU_64BIT
+#define j__udyFreeJLL4 j__udyLFreeJLL4
+#define j__udyFreeJLL5 j__udyLFreeJLL5
+#define j__udyFreeJLL6 j__udyLFreeJLL6
+#define j__udyFreeJLL7 j__udyLFreeJLL7
+#endif
+#define j__udyFreeJLW j__udyLFreeJLW
+#define j__udyFreeJLB1 j__udyLFreeJLB1
+#define j__udyFreeSM j__udyLFreeSM
+// j__udyLFreeJV
+
+#define j__uMaxWords j__uLMaxWords
+
+#ifdef DEBUG
+#define JudyCheckPop JudyLCheckPop
+#endif
+
+#endif // JUDYL
+
+#endif // _JUDYPRIVATE1L_INCLUDED
diff --git a/libs/klib/judy/JudyPrivateBranch.h b/libs/klib/judy/JudyPrivateBranch.h
new file mode 100644
index 0000000..4e0dda4
--- /dev/null
+++ b/libs/klib/judy/JudyPrivateBranch.h
@@ -0,0 +1,777 @@
+#ifndef _JUDY_PRIVATE_BRANCH_INCLUDED
+#define _JUDY_PRIVATE_BRANCH_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// Header file for all Judy sources, for global but private (non-exported)
+// declarations specific to branch support.
+//
+// See also the "Judy Shop Manual" (try judy/doc/int/JudyShopManual.*).
+
+
+// ****************************************************************************
+// JUDY POINTER (JP) SUPPORT
+// ****************************************************************************
+//
+// This "rich pointer" object is pivotal to Judy execution.
+//
+// JP CONTAINING OTHER THAN IMMEDIATE INDEXES:
+//
+// If the JP points to a linear or bitmap leaf, jp_DcdPopO contains the
+// Population-1 in LSbs and Decode (Dcd) bytes in the MSBs. (In practice the
+// Decode bits are masked off while accessing the Pop0 bits.)
+//
+// The Decode Size, the number of Dcd bytes available, is encoded in jpo_Type.
+// It can also be thought of as the number of states "skipped" in the SM, where
+// each state decodes 8 bits = 1 byte.
+//
+// TBD: Dont need two structures, except possibly to force jp_Type to highest
+// address!
+//
+// Note: The jpo_u union is not required by HP-UX or Linux but Win32 because
+// the cl.exe compiler otherwise refuses to pack a bitfield (DcdPopO) with
+// anything else, even with the -Zp option. This is pretty ugly, but
+// fortunately portable, and its all hide-able by macros (see below).
+
+typedef struct J_UDY_POINTER_OTHERS // JPO.
+ {
+ Word_t j_po_Addr; // first word: Pjp_t, Word_t, etc.
+ union {
+// Word_t j_po_DcdPop0:cJU_BITSPERWORD-cJU_BITSPERBYTE;
+ uint8_t j_po_DcdP0[sizeof(Word_t) - 1];
+ uint8_t j_po_Bytes[sizeof(Word_t)]; // last byte = jp_Type.
+ } jpo_u;
+ } jpo_t;
+
+
+// JP CONTAINING IMMEDIATE INDEXES:
+//
+// j_pi_1Index[] plus j_pi_LIndex[] together hold as many N-byte (1..3-byte
+// [1..7-byte]) Indexes as will fit in sizeof(jpi_t) less 1 byte for j_pi_Type
+// (that is, 7..1 [15..1] Indexes).
+//
+// For Judy1, j_pi_1Index[] is used and j_pi_LIndex[] is not used.
+// For JudyL, j_pi_LIndex[] is used and j_pi_1Index[] is not used.
+//
+// Note: Actually when Pop1 = 1, jpi_t is not used, and the least bytes of the
+// single Index are stored in j_po_DcdPopO, for both Judy1 and JudyL, so for
+// JudyL the j_po_Addr field can hold the target value.
+//
+// TBD: Revise this structure to not overload j_po_DcdPopO this way? The
+// current arrangement works, its just confusing.
+
+typedef struct _JUDY_POINTER_IMMED // JPI.
+ {
+ uint8_t j_pi_1Index[sizeof(Word_t)]; // see above.
+ uint8_t j_pi_LIndex[sizeof(Word_t) - 1]; // see above.
+ uint8_t j_pi_Type; // JP type, 1 of cJ*_JPIMMED*.
+ } jpi_t;
+
+
+// UNION OF JP TYPES:
+//
+// A branch is an array of cJU_BRANCHUNUMJPS (256) of this object, or an
+// alternate data type such as: A linear branch which is a list of 2..7 JPs,
+// or a bitmap branch which contains 8 lists of 0..32 JPs. JPs reside only in
+// branches of a Judy SM.
+
+typedef union J_UDY_POINTER // JP.
+ {
+ jpo_t j_po; // other than immediate indexes.
+ jpi_t j_pi; // immediate indexes.
+ } jp_t, *Pjp_t;
+
+// For coding convenience:
+//
+// Note, jp_Type has the same bits in jpo_t and jpi_t.
+
+#define jp_1Index j_pi.j_pi_1Index // for storing Indexes in first word.
+#define jp_LIndex j_pi.j_pi_LIndex // for storing Indexes in second word.
+#define jp_Addr j_po.j_po_Addr
+//#define jp_DcdPop0 j_po.jpo_u.j_po_DcdPop0
+#define jp_Type j_po.jpo_u.j_po_Bytes[sizeof(Word_t) - 1]
+#define jp_DcdP0 j_po.jpo_u.j_po_DcdP0
+
+
+// ****************************************************************************
+// JUDY POINTER (JP) -- RELATED MACROS AND CONSTANTS
+// ****************************************************************************
+
+// EXTRACT VALUES FROM JP:
+//
+// Masks for the bytes in the Dcd and Pop0 parts of jp_DcdPopO:
+//
+// cJU_DCDMASK() consists of a mask that excludes the (LSb) Pop0 bytes and
+// also, just to be safe, the top byte of the word, since jp_DcdPopO is 1 byte
+// less than a full word.
+//
+// Note: These are constant macros (cJU) because cPopBytes should be a
+// constant. Also note cPopBytes == state in the SM.
+
+#define cJU_POP0MASK(cPopBytes) JU_LEASTBYTESMASK(cPopBytes)
+
+#define cJU_DCDMASK(cPopBytes) \
+ ((cJU_ALLONES >> cJU_BITSPERBYTE) & (~cJU_POP0MASK(cPopBytes)))
+
+// Mask off the high byte from INDEX to it can be compared to DcdPopO:
+
+#define JU_TRIMTODCDSIZE(INDEX) ((cJU_ALLONES >> cJU_BITSPERBYTE) & (INDEX))
+
+// Get from jp_DcdPopO the Pop0 for various branch JP Types:
+//
+// Note: There are no simple macros for cJU_BRANCH* Types because their
+// populations must be added up and dont reside in an already-calculated
+// place.
+
+#define JU_JPBRANCH_POP0(PJP,cPopBytes) \
+ (JU_JPDCDPOP0(PJP) & cJU_POP0MASK(cPopBytes))
+
+// METHOD FOR DETERMINING IF OBJECTS HAVE ROOM TO GROW:
+//
+// J__U_GROWCK() is a generic method to determine if an object can grow in
+// place, based on whether the next population size (one more) would use the
+// same space.
+
+#define J__U_GROWCK(POP1,MAXPOP1,POPTOWORDS) \
+ (((POP1) != (MAXPOP1)) && (POPTOWORDS[POP1] == POPTOWORDS[(POP1) + 1]))
+
+#define JU_BRANCHBJPGROWINPLACE(NumJPs) \
+ J__U_GROWCK(NumJPs, cJU_BITSPERSUBEXPB, j__U_BranchBJPPopToWords)
+
+
+// DETERMINE IF AN INDEX IS (NOT) IN A JPS EXPANSE:
+
+#define JU_DCDNOTMATCHINDEX(INDEX,PJP,POP0BYTES) \
+ (((INDEX) ^ JU_JPDCDPOP0(PJP)) & cJU_DCDMASK(POP0BYTES))
+
+
+// NUMBER OF JPs IN AN UNCOMPRESSED BRANCH:
+//
+// An uncompressed branch is simply an array of 256 Judy Pointers (JPs). It is
+// a minimum cacheline fill object. Define it here before its first needed.
+
+#define cJU_BRANCHUNUMJPS cJU_SUBEXPPERSTATE
+
+
+// ****************************************************************************
+// JUDY BRANCH LINEAR (JBL) SUPPORT
+// ****************************************************************************
+//
+// A linear branch is a way of compressing empty expanses (null JPs) out of an
+// uncompressed 256-way branch, when the number of populated expanses is so
+// small that even a bitmap branch is excessive.
+//
+// The maximum number of JPs in a Judy linear branch:
+//
+// Note: This number results in a 1-cacheline sized structure. Previous
+// versions had a larger struct so a linear branch didnt become a bitmap
+// branch until the memory consumed was even, but for speed, its better to
+// switch "sooner" and keep a linear branch fast.
+
+#define cJU_BRANCHLMAXJPS 7
+
+
+// LINEAR BRANCH STRUCT:
+//
+// 1-byte count, followed by array of byte-sized expanses, followed by JPs.
+
+typedef struct J__UDY_BRANCH_LINEAR
+ {
+ uint8_t jbl_NumJPs; // num of JPs (Pjp_t), 1..N.
+ uint8_t jbl_Expanse[cJU_BRANCHLMAXJPS]; // 1..7 MSbs of pop exps.
+ jp_t jbl_jp [cJU_BRANCHLMAXJPS]; // JPs for populated exps.
+ } jbl_t, * Pjbl_t;
+
+
+// ****************************************************************************
+// JUDY BRANCH BITMAP (JBB) SUPPORT
+// ****************************************************************************
+//
+// A bitmap branch is a way of compressing empty expanses (null JPs) out of
+// uncompressed 256-way branch. This costs 1 additional cache line fill, but
+// can save a lot of memory when it matters most, near the leaves, and
+// typically there will be only one at most in the path to any Index (leaf).
+//
+// The bitmap indicates which of the cJU_BRANCHUNUMJPS (256) JPs in the branch
+// are NOT null, that is, their expanses are populated. The jbb_t also
+// contains N pointers to "mini" Judy branches ("subexpanses") of up to M JPs
+// each (see BITMAP_BRANCHMxN, for example, BITMAP_BRANCH32x8), where M x N =
+// cJU_BRANCHUNUMJPS. These are dynamically allocated and never contain
+// cJ*_JPNULL* jp_Types. An empty subexpanse is represented by no bit sets in
+// the corresponding subexpanse bitmap, in which case the corresponding
+// jbbs_Pjp pointers value is unused.
+//
+// Note that the number of valid JPs in each 1-of-N subexpanses is determined
+// by POPULATION rather than by EXPANSE -- the desired outcome to save memory
+// when near the leaves. Note that the memory required for 185 JPs is about as
+// much as an uncompressed 256-way branch, therefore 184 is set as the maximum.
+// However, it is expected that a conversion to an uncompressed 256-way branch
+// will normally take place before this limit is reached for other reasons,
+// such as improving performance when the "wasted" memory is well amortized by
+// the population under the branch, preserving an acceptable overall
+// bytes/Index in the Judy array.
+//
+// The number of pointers to arrays of JPs in the Judy bitmap branch:
+//
+// Note: The numbers below are the same in both 32 and 64 bit systems.
+
+#define cJU_BRANCHBMAXJPS 184 // maximum JPs for bitmap branches.
+
+// Convenience wrappers for referencing BranchB bitmaps or JP subarray
+// pointers:
+//
+// Note: JU_JBB_PJP produces a "raw" memory address that must pass through
+// P_JP before use, except when freeing memory:
+
+#define JU_JBB_BITMAP(Pjbb, SubExp) ((Pjbb)->jbb_jbbs[SubExp].jbbs_Bitmap)
+#define JU_JBB_PJP( Pjbb, SubExp) ((Pjbb)->jbb_jbbs[SubExp].jbbs_Pjp)
+
+#define JU_SUBEXPB(Digit) (((Digit) / cJU_BITSPERSUBEXPB) & (cJU_NUMSUBEXPB-1))
+
+#define JU_BITMAPTESTB(Pjbb, Index) \
+ (JU_JBB_BITMAP(Pjbb, JU_SUBEXPB(Index)) & JU_BITPOSMASKB(Index))
+
+#define JU_BITMAPSETB(Pjbb, Index) \
+ (JU_JBB_BITMAP(Pjbb, JU_SUBEXPB(Index)) |= JU_BITPOSMASKB(Index))
+
+// Note: JU_BITMAPCLEARB is not defined because the code does it a faster way.
+
+typedef struct J__UDY_BRANCH_BITMAP_SUBEXPANSE
+ {
+ BITMAPB_t jbbs_Bitmap;
+ Pjp_t jbbs_Pjp;
+
+ } jbbs_t;
+
+typedef struct J__UDY_BRANCH_BITMAP
+ {
+ jbbs_t jbb_jbbs [cJU_NUMSUBEXPB];
+#ifdef SUBEXPCOUNTS
+ Word_t jbb_subPop1[cJU_NUMSUBEXPB];
+#endif
+ } jbb_t, * Pjbb_t;
+
+#define JU_BRANCHJP_NUMJPSTOWORDS(NumJPs) (j__U_BranchBJPPopToWords[NumJPs])
+
+#ifdef SUBEXPCOUNTS
+#define cJU_NUMSUBEXPU 16 // number of subexpanse counts.
+#endif
+
+
+// ****************************************************************************
+// JUDY BRANCH UNCOMPRESSED (JBU) SUPPORT
+// ****************************************************************************
+
+// Convenience wrapper for referencing BranchU JPs:
+//
+// Note: This produces a non-"raw" address already passed through P_JBU().
+
+#define JU_JBU_PJP(Pjp,Index,Level) \
+ (&((P_JBU((Pjp)->jp_Addr))->jbu_jp[JU_DIGITATSTATE(Index, Level)]))
+#define JU_JBU_PJP0(Pjp) \
+ (&((P_JBU((Pjp)->jp_Addr))->jbu_jp[0]))
+
+typedef struct J__UDY_BRANCH_UNCOMPRESSED
+ {
+ jp_t jbu_jp [cJU_BRANCHUNUMJPS]; // JPs for populated exp.
+#ifdef SUBEXPCOUNTS
+ Word_t jbu_subPop1[cJU_NUMSUBEXPU];
+#endif
+ } jbu_t, * Pjbu_t;
+
+
+// ****************************************************************************
+// OTHER SUPPORT FOR JUDY STATE MACHINES (SMs)
+// ****************************************************************************
+
+// OBJECT SIZES IN WORDS:
+//
+// Word_ts per various JudyL structures that have constant sizes.
+// cJU_WORDSPERJP should always be 2; this is fundamental to the Judy
+// structures.
+
+#define cJU_WORDSPERJP (sizeof(jp_t) / cJU_BYTESPERWORD)
+#define cJU_WORDSPERCL (cJU_BYTESPERCL / cJU_BYTESPERWORD)
+
+
+// OPPORTUNISTIC UNCOMPRESSION:
+//
+// Define populations at which a BranchL or BranchB must convert to BranchU.
+// Earlier conversion is possible with good memory efficiency -- see below.
+
+#ifndef NO_BRANCHU
+
+// Max population below BranchL, then convert to BranchU:
+
+#define JU_BRANCHL_MAX_POP 1000
+
+// Minimum global population increment before next conversion of a BranchB to a
+// BranchU:
+//
+// This is was done to allow malloc() to coalesce memory before the next big
+// (~512 words) allocation.
+
+#define JU_BTOU_POP_INCREMENT 300
+
+// Min/max population below BranchB, then convert to BranchU:
+
+#define JU_BRANCHB_MIN_POP 135
+#define JU_BRANCHB_MAX_POP 750
+
+#else // NO_BRANCHU
+
+// These are set up to have conservative conversion schedules to BranchU:
+
+#define JU_BRANCHL_MAX_POP (-1UL)
+#define JU_BTOU_POP_INCREMENT 300
+#define JU_BRANCHB_MIN_POP 1000
+#define JU_BRANCHB_MAX_POP (-1UL)
+
+#endif // NO_BRANCHU
+
+
+// MISCELLANEOUS MACROS:
+
+// Get N most significant bits from the shifted Index word:
+//
+// As Index words are decoded, they are shifted left so only relevant,
+// undecoded Index bits remain.
+
+#define JU_BITSFROMSFTIDX(SFTIDX, N) ((SFTIDX) >> (cJU_BITSPERWORD - (N)))
+
+// TBD: I have my doubts about the necessity of these macros (dlb):
+
+// Produce 1-digit mask at specified state:
+
+#define cJU_MASKATSTATE(State) ((Word_t)0xff << (((State) - 1) * cJU_BITSPERBYTE))
+
+// Get byte (digit) from Index at the specified state, right justified:
+//
+// Note: State must be 1..cJU_ROOTSTATE, and Digits must be 1..(cJU_ROOTSTATE
+// - 1), but theres no way to assert these within an expression.
+
+#define JU_DIGITATSTATE(Index,cState) \
+ ((uint8_t)((Index) >> (((cState) - 1) * cJU_BITSPERBYTE)))
+
+// Similarly, place byte (digit) at correct position for the specified state:
+//
+// Note: Cast digit to a Word_t first so there are no complaints or problems
+// about shifting it more than 32 bits on a 64-bit system, say, when it is a
+// uint8_t from jbl_Expanse[]. (Believe it or not, the C standard says to
+// promote an unsigned char to a signed int; -Ac does not do this, but -Ae
+// does.)
+//
+// Also, to make lint happy, cast the whole result again because apparently
+// shifting a Word_t does not result in a Word_t!
+
+#define JU_DIGITTOSTATE(Digit,cState) \
+ ((Word_t) (((Word_t) (Digit)) << (((cState) - 1) * cJU_BITSPERBYTE)))
+
+#endif // ! _JUDY_PRIVATE_BRANCH_INCLUDED
+
+
+#ifdef TEST_INSDEL
+
+// ****************************************************************************
+// TEST CODE FOR INSERT/DELETE MACROS
+// ****************************************************************************
+//
+// To use this, compile a temporary *.c file containing:
+//
+// #define DEBUG
+// #define JUDY_ASSERT
+// #define TEST_INSDEL
+// #include "JudyPrivate.h"
+// #include "JudyPrivateBranch.h"
+//
+// Use a command like this: cc -Ae +DD64 -I. -I JudyCommon -o t t.c
+// For best results, include +DD64 on a 64-bit system.
+//
+// This test code exercises some tricky macros, but the output must be studied
+// manually to verify it. Assume that for even-index testing, whole words
+// (Word_t) suffices.
+
+#include <stdio.h>
+
+#define INDEXES 3 // in each array.
+
+
+// ****************************************************************************
+// I N I T
+//
+// Set up variables for next test. See usage.
+
+FUNCTION void Init (
+ int base,
+ PWord_t PeIndex,
+ PWord_t PoIndex,
+ PWord_t Peleaf, // always whole words.
+#ifndef JU_64BIT
+ uint8_t * Poleaf3)
+#else
+ uint8_t * Poleaf3,
+ uint8_t * Poleaf5,
+ uint8_t * Poleaf6,
+ uint8_t * Poleaf7)
+#endif
+{
+ int offset;
+
+ *PeIndex = 99;
+
+ for (offset = 0; offset <= INDEXES; ++offset)
+ Peleaf[offset] = base + offset;
+
+ for (offset = 0; offset < (INDEXES + 1) * 3; ++offset)
+ Poleaf3[offset] = base + offset;
+
+#ifndef JU_64BIT
+ *PoIndex = (91 << 24) | (92 << 16) | (93 << 8) | 94;
+#else
+
+ *PoIndex = (91L << 56) | (92L << 48) | (93L << 40) | (94L << 32)
+ | (95L << 24) | (96L << 16) | (97L << 8) | 98L;
+
+ for (offset = 0; offset < (INDEXES + 1) * 5; ++offset)
+ Poleaf5[offset] = base + offset;
+
+ for (offset = 0; offset < (INDEXES + 1) * 6; ++offset)
+ Poleaf6[offset] = base + offset;
+
+ for (offset = 0; offset < (INDEXES + 1) * 7; ++offset)
+ Poleaf7[offset] = base + offset;
+#endif
+
+} // Init()
+
+
+// ****************************************************************************
+// P R I N T L E A F
+//
+// Print the byte values in a leaf.
+
+FUNCTION void PrintLeaf (
+ char * Label, // for output.
+ int IOffset, // insertion offset in array.
+ int Indsize, // index size in bytes.
+ uint8_t * PLeaf) // array of Index bytes.
+{
+ int offset; // in PLeaf.
+ int byte; // in one word.
+
+ (void) printf("%s %u: ", Label, IOffset);
+
+ for (offset = 0; offset <= INDEXES; ++offset)
+ {
+ for (byte = 0; byte < Indsize; ++byte)
+ (void) printf("%2d", PLeaf[(offset * Indsize) + byte]);
+
+ (void) printf(" ");
+ }
+
+ (void) printf("\n");
+
+} // PrintLeaf()
+
+
+// ****************************************************************************
+// M A I N
+//
+// Test program.
+
+FUNCTION main()
+{
+ Word_t eIndex; // even, to insert.
+ Word_t oIndex; // odd, to insert.
+ Word_t eleaf [ INDEXES + 1]; // even leaf, index size 4.
+ uint8_t oleaf3[(INDEXES + 1) * 3]; // odd leaf, index size 3.
+#ifdef JU_64BIT
+ uint8_t oleaf5[(INDEXES + 1) * 5]; // odd leaf, index size 5.
+ uint8_t oleaf6[(INDEXES + 1) * 6]; // odd leaf, index size 6.
+ uint8_t oleaf7[(INDEXES + 1) * 7]; // odd leaf, index size 7.
+#endif
+ Word_t eleaf_2 [ INDEXES + 1]; // same, but second arrays:
+ uint8_t oleaf3_2[(INDEXES + 1) * 3];
+#ifdef JU_64BIT
+ uint8_t oleaf5_2[(INDEXES + 1) * 5];
+ uint8_t oleaf6_2[(INDEXES + 1) * 6];
+ uint8_t oleaf7_2[(INDEXES + 1) * 7];
+#endif
+ int ioffset; // index insertion offset.
+
+#ifndef JU_64BIT
+#define INIT Init( 0, & eIndex, & oIndex, eleaf, oleaf3)
+#define INIT2 INIT; Init(50, & eIndex, & oIndex, eleaf_2, oleaf3_2)
+#else
+#define INIT Init( 0, & eIndex, & oIndex, eleaf, oleaf3, \
+ oleaf5, oleaf6, oleaf7)
+#define INIT2 INIT; Init(50, & eIndex, & oIndex, eleaf_2, oleaf3_2, \
+ oleaf5_2, oleaf6_2, oleaf7_2)
+#endif
+
+#define WSIZE sizeof (Word_t) // shorthand.
+
+#ifdef PRINTALL // to turn on "noisy" printouts.
+#define PRINTLEAF(Label,IOffset,Indsize,PLeaf) \
+ PrintLeaf(Label,IOffset,Indsize,PLeaf)
+#else
+#define PRINTLEAF(Label,IOffset,Indsize,PLeaf) \
+ if (ioffset == 0) \
+ PrintLeaf(Label,IOffset,Indsize,PLeaf)
+#endif
+
+ (void) printf(
+"In each case, tests operate on an initial array of %d indexes. Even-index\n"
+"tests set index values to 0,1,2...; odd-index tests set byte values to\n"
+"0,1,2... Inserted indexes have a value of 99 or else byte values 91,92,...\n",
+ INDEXES);
+
+ (void) puts("\nJU_INSERTINPLACE():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, WSIZE, (uint8_t *) eleaf);
+ JU_INSERTINPLACE(eleaf, INDEXES, ioffset, eIndex);
+ PrintLeaf("After ", ioffset, WSIZE, (uint8_t *) eleaf);
+ }
+
+ (void) puts("\nJU_INSERTINPLACE3():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, 3, oleaf3);
+ JU_INSERTINPLACE3(oleaf3, INDEXES, ioffset, oIndex);
+ PrintLeaf("After ", ioffset, 3, oleaf3);
+ }
+
+#ifdef JU_64BIT
+ (void) puts("\nJU_INSERTINPLACE5():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, 5, oleaf5);
+ JU_INSERTINPLACE5(oleaf5, INDEXES, ioffset, oIndex);
+ PrintLeaf("After ", ioffset, 5, oleaf5);
+ }
+
+ (void) puts("\nJU_INSERTINPLACE6():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, 6, oleaf6);
+ JU_INSERTINPLACE6(oleaf6, INDEXES, ioffset, oIndex);
+ PrintLeaf("After ", ioffset, 6, oleaf6);
+ }
+
+ (void) puts("\nJU_INSERTINPLACE7():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, 7, oleaf7);
+ JU_INSERTINPLACE7(oleaf7, INDEXES, ioffset, oIndex);
+ PrintLeaf("After ", ioffset, 7, oleaf7);
+ }
+#endif // JU_64BIT
+
+ (void) puts("\nJU_DELETEINPLACE():");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, WSIZE, (uint8_t *) eleaf);
+ JU_DELETEINPLACE(eleaf, INDEXES, ioffset);
+ PrintLeaf("After ", ioffset, WSIZE, (uint8_t *) eleaf);
+ }
+
+ (void) puts("\nJU_DELETEINPLACE_ODD(3):");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, 3, oleaf3);
+ JU_DELETEINPLACE_ODD(oleaf3, INDEXES, ioffset, 3);
+ PrintLeaf("After ", ioffset, 3, oleaf3);
+ }
+
+#ifdef JU_64BIT
+ (void) puts("\nJU_DELETEINPLACE_ODD(5):");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, 5, oleaf5);
+ JU_DELETEINPLACE_ODD(oleaf5, INDEXES, ioffset, 5);
+ PrintLeaf("After ", ioffset, 5, oleaf5);
+ }
+
+ (void) puts("\nJU_DELETEINPLACE_ODD(6):");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, 6, oleaf6);
+ JU_DELETEINPLACE_ODD(oleaf6, INDEXES, ioffset, 6);
+ PrintLeaf("After ", ioffset, 6, oleaf6);
+ }
+
+ (void) puts("\nJU_DELETEINPLACE_ODD(7):");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT;
+ PRINTLEAF("Before", ioffset, 7, oleaf7);
+ JU_DELETEINPLACE_ODD(oleaf7, INDEXES, ioffset, 7);
+ PrintLeaf("After ", ioffset, 7, oleaf7);
+ }
+#endif // JU_64BIT
+
+ (void) puts("\nJU_INSERTCOPY():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, WSIZE, (uint8_t *) eleaf);
+ PRINTLEAF("Before, dest", ioffset, WSIZE, (uint8_t *) eleaf_2);
+ JU_INSERTCOPY(eleaf_2, eleaf, INDEXES, ioffset, eIndex);
+ PRINTLEAF("After, src ", ioffset, WSIZE, (uint8_t *) eleaf);
+ PrintLeaf("After, dest", ioffset, WSIZE, (uint8_t *) eleaf_2);
+ }
+
+ (void) puts("\nJU_INSERTCOPY3():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, 3, oleaf3);
+ PRINTLEAF("Before, dest", ioffset, 3, oleaf3_2);
+ JU_INSERTCOPY3(oleaf3_2, oleaf3, INDEXES, ioffset, oIndex);
+ PRINTLEAF("After, src ", ioffset, 3, oleaf3);
+ PrintLeaf("After, dest", ioffset, 3, oleaf3_2);
+ }
+
+#ifdef JU_64BIT
+ (void) puts("\nJU_INSERTCOPY5():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, 5, oleaf5);
+ PRINTLEAF("Before, dest", ioffset, 5, oleaf5_2);
+ JU_INSERTCOPY5(oleaf5_2, oleaf5, INDEXES, ioffset, oIndex);
+ PRINTLEAF("After, src ", ioffset, 5, oleaf5);
+ PrintLeaf("After, dest", ioffset, 5, oleaf5_2);
+ }
+
+ (void) puts("\nJU_INSERTCOPY6():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, 6, oleaf6);
+ PRINTLEAF("Before, dest", ioffset, 6, oleaf6_2);
+ JU_INSERTCOPY6(oleaf6_2, oleaf6, INDEXES, ioffset, oIndex);
+ PRINTLEAF("After, src ", ioffset, 6, oleaf6);
+ PrintLeaf("After, dest", ioffset, 6, oleaf6_2);
+ }
+
+ (void) puts("\nJU_INSERTCOPY7():");
+
+ for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, 7, oleaf7);
+ PRINTLEAF("Before, dest", ioffset, 7, oleaf7_2);
+ JU_INSERTCOPY7(oleaf7_2, oleaf7, INDEXES, ioffset, oIndex);
+ PRINTLEAF("After, src ", ioffset, 7, oleaf7);
+ PrintLeaf("After, dest", ioffset, 7, oleaf7_2);
+ }
+#endif // JU_64BIT
+
+ (void) puts("\nJU_DELETECOPY():");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, WSIZE, (uint8_t *) eleaf);
+ PRINTLEAF("Before, dest", ioffset, WSIZE, (uint8_t *) eleaf_2);
+ JU_DELETECOPY(eleaf_2, eleaf, INDEXES, ioffset, ignore);
+ PRINTLEAF("After, src ", ioffset, WSIZE, (uint8_t *) eleaf);
+ PrintLeaf("After, dest", ioffset, WSIZE, (uint8_t *) eleaf_2);
+ }
+
+ (void) puts("\nJU_DELETECOPY_ODD(3):");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, 3, oleaf3);
+ PRINTLEAF("Before, dest", ioffset, 3, oleaf3_2);
+ JU_DELETECOPY_ODD(oleaf3_2, oleaf3, INDEXES, ioffset, 3);
+ PRINTLEAF("After, src ", ioffset, 3, oleaf3);
+ PrintLeaf("After, dest", ioffset, 3, oleaf3_2);
+ }
+
+#ifdef JU_64BIT
+ (void) puts("\nJU_DELETECOPY_ODD(5):");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, 5, oleaf5);
+ PRINTLEAF("Before, dest", ioffset, 5, oleaf5_2);
+ JU_DELETECOPY_ODD(oleaf5_2, oleaf5, INDEXES, ioffset, 5);
+ PRINTLEAF("After, src ", ioffset, 5, oleaf5);
+ PrintLeaf("After, dest", ioffset, 5, oleaf5_2);
+ }
+
+ (void) puts("\nJU_DELETECOPY_ODD(6):");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, 6, oleaf6);
+ PRINTLEAF("Before, dest", ioffset, 6, oleaf6_2);
+ JU_DELETECOPY_ODD(oleaf6_2, oleaf6, INDEXES, ioffset, 6);
+ PRINTLEAF("After, src ", ioffset, 6, oleaf6);
+ PrintLeaf("After, dest", ioffset, 6, oleaf6_2);
+ }
+
+ (void) puts("\nJU_DELETECOPY_ODD(7):");
+
+ for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+ {
+ INIT2;
+ PRINTLEAF("Before, src ", ioffset, 7, oleaf7);
+ PRINTLEAF("Before, dest", ioffset, 7, oleaf7_2);
+ JU_DELETECOPY_ODD(oleaf7_2, oleaf7, INDEXES, ioffset, 7);
+ PRINTLEAF("After, src ", ioffset, 7, oleaf7);
+ PrintLeaf("After, dest", ioffset, 7, oleaf7_2);
+ }
+#endif // JU_64BIT
+
+ return(0);
+
+} // main()
+
+#endif // TEST_INSDEL
diff --git a/libs/klib/judy/JudySL.c b/libs/klib/judy/JudySL.c
new file mode 100644
index 0000000..637782d
--- /dev/null
+++ b/libs/klib/judy/JudySL.c
@@ -0,0 +1,1125 @@
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+// JUDY FUNCTIONS FOR STRING INDEXES, where associated values are longs. One
+// JudySL*() corresponds to each JudyL*() function (with exceptions).
+//
+// See the manual entry for details.
+//
+// METHOD: Break up each null-terminated Index (string) into chunks of W
+// bytes, where W is the machines word size, with null-padding in the last
+// word if necessary. Store strings as a tree of JudyL arrays, that is, array
+// of array of array... where each level consumes W bytes (one word) as an
+// index to the JudyL array at that level. Since strings can begin on
+// arbitrary byte boundaries, copy each chunk of W bytes from Index into a
+// word-aligned object before using it as a Judy index.
+//
+// The JudySL tree also supports "single-index shortcut leaves". A simple
+// JudySL array (tree of JudyL arrays) would go as many levels deep as the
+// Index (string) is long, which wastes time and memory when an Index is unique
+// beyond a certain point. When theres just one Index under a pointer, given
+// a reliable way to tell that the pointer is not a root pointer to another
+// JudyL array, it should save a lot of time to instead point to a "leaf"
+// object, similar to leaves in JudyL arrays.
+//
+// TBD: Multi-index leaves, like those in JudyL, are also worth considering,
+// but their payback for JudySL is less certain. Likewise, shortcut branches
+// are worth considering too.
+//
+// This code uses the Judy.h definitions and Doug Baskins convention of a "P"
+// prefix for pointers, except no "P" for the first level of char * (strings).
+
+// IMPORTS:
+
+#include <string.h> // for strcmp(), strlen(), strcpy()
+#include <Judy.h>
+
+#ifndef NDEDUG
+#define NDEBUG 1
+#endif
+#include <assert.h>
+
+//=======================================================================
+// Compile:
+//
+// cc -O JudyHS.c -c
+//
+// Notes:
+// 1) use -DJU_64BIT for 64 bit compiles (HP, Sun, IPF, Motorola/IBM? etc..)
+// 2) In gcc version 3.3.1 for a Centrino, -O2 is faster than -O
+// 3) In gcc version 3.3.2 for a Centrino, -O3 is faster than -O2
+//=======================================================================
+
+#define JU_SET_ERRNO(PJERROR, JERRNO) \
+{ \
+ if (PJERROR != (PJError_t)NULL) \
+ { \
+ JU_ERRNO(PJERROR) = (JERRNO); \
+ JU_ERRID(PJERROR) = __LINE__; \
+ } \
+}
+
+#define JU_SET_ERRNO_NONNULL(PJERROR, JERRNO) \
+{ \
+ JU_ERRNO(PJERROR) = (JERRNO); \
+ JU_ERRID(PJERROR) = __LINE__; \
+}
+
+// SUPPORT FOR HANDLING WORDS:
+
+#define WORDSIZE (sizeof (Word_t)) // bytes in word = JudyL index.
+#define WORDS(BYTES) (((BYTES) + WORDSIZE - 1) / WORDSIZE) // round up.
+
+// To mark a pointer is to a "short cut leaf", set least bit
+
+#define IS_PSCL(PSCL) (((Word_t) (PSCL)) & JLAP_INVALID)
+#define CLEAR_PSCL(PSCL) ((Pscl_t)(((Word_t) (PSCL)) & (~JLAP_INVALID)))
+#define SET_PSCL(PSCL) (((Word_t) (PSCL)) | JLAP_INVALID)
+
+// MISCELLANEOUS GLOBALS:
+
+// Get the Index (string) length in bytes, including the trailing \0, which
+// is an integral part of the string:
+
+// A string is "in the last word" if a previously-set byte count is at or below
+// the system word size, or in some cases if the last byte in the (null-padded)
+// word is null (assume big-endian, including in a register on a little-endian
+// machine):
+
+#define LASTWORD_BY_VALUE(WORD) (! ((WORD) & 0xffL))
+
+#ifdef JU_64BIT
+
+// copy from 1..7 bytes from string to Word_t and test if \0 bytes
+//
+#define COPYSTRINGtoWORD(WORD,STR) \
+{ \
+ do \
+ { \
+ uint8_t chr; \
+ WORD = (Word_t)(STR)[0] << 56; \
+ if (!(WORD)) break; \
+ if (!(chr = (STR)[1])) break; \
+ WORD += ((Word_t)(chr) << 48); \
+ if (!(chr = (STR)[2])) break; \
+ WORD += ((Word_t)(chr) << 40); \
+ if (!(chr = (STR)[3])) break; \
+ WORD += ((Word_t)(chr) << 32); \
+ if (!(chr = (STR)[4])) break; \
+ WORD += ((Word_t)(chr) << 24); \
+ if (!(chr = (STR)[5])) break; \
+ WORD += ((Word_t)(chr) << 16); \
+ if (!(chr = (STR)[6])) break; \
+ WORD += ((Word_t)(chr) << 8) + (STR)[7]; \
+ } while(0); \
+}
+
+// copy Word_t from 1..8 bytes to string and test of \0 bytes
+//
+#define COPYWORDtoSTRING(STR,WORD) \
+{ \
+ do \
+ { \
+ if (!((STR)[0] = (uint8_t)((WORD) >> 56))) break; \
+ if (!((STR)[1] = (uint8_t)((WORD) >> 48))) break; \
+ if (!((STR)[2] = (uint8_t)((WORD) >> 40))) break; \
+ if (!((STR)[3] = (uint8_t)((WORD) >> 32))) break; \
+ if (!((STR)[4] = (uint8_t)((WORD) >> 24))) break; \
+ if (!((STR)[5] = (uint8_t)((WORD) >> 16))) break; \
+ if (!((STR)[6] = (uint8_t)((WORD) >> 8))) break; \
+ (STR)[7] = (uint8_t)(WORD); \
+ } while(0); \
+}
+
+#else // JU_32BIT
+
+// copy from 1..4 bytes from string to Word_t and test if \0 bytes
+
+#define COPYSTRINGtoWORD(WORD,STR) \
+{ \
+ do \
+ { \
+ uint8_t chr; \
+ WORD = (STR)[0] << 24; \
+ if (WORD == 0) break; \
+ if (!(chr = (STR)[1])) break; \
+ WORD += (Word_t)(chr << 16); \
+ if (!(chr = (STR)[2])) break; \
+ WORD += (Word_t)(chr << 8) + (STR)[3]; \
+ } while(0); \
+}
+
+// copy Word_t from 1..4 bytes to string and test of \0 bytes
+
+#define COPYWORDtoSTRING(STR,WORD) \
+{ \
+ do \
+ { \
+ if (!((STR)[0] = (uint8_t)((WORD) >> 24))) break; \
+ if (!((STR)[1] = (uint8_t)((WORD) >> 16))) break; \
+ if (!((STR)[2] = (uint8_t)((WORD) >> 8))) break; \
+ (STR)[3] = (uint8_t)(WORD); \
+ } while(0); \
+}
+#endif // JU_32BIT
+
+
+// SUPPORT FOR SINGLE-INDEX SHORTCUT LEAVES:
+
+typedef struct SHORCUTLEAF
+{
+ Pvoid_t scl_Pvalue; // callers value area.
+ uint8_t scl_Index[WORDSIZE]; // base Index string.
+} scl_t , *Pscl_t;
+
+// overhead of the scl_Pvalue only, the scl_Index is calculate elsewhere
+
+#define STRUCTOVD (sizeof(scl_t) - WORDSIZE)
+
+// How big to malloc a shortcut leaf; stringlen should already include the
+// trailing null char:
+
+#define SCLSIZE(LEN) (((LEN) + STRUCTOVD + WORDSIZE - 1) / WORDSIZE)
+
+// string routines, may replace with your own
+//
+#define STRCMP(S1,S2) strcmp((void *)(S1), (void *)(S2))
+#define STRCPY(S1,S2) strcpy((void *)(S1), (void *)(S2))
+#define STRLEN(S1) (strlen((void *)(S1)) + 1)
+
+
+// Index and value area for a shortcut leaf, depending on how it matches the
+// undecoded remainder of the Index, given a Pscl_t that includes type bits
+// that must be cleared:
+//
+// PSCLINDEX() and PSCLVALUE() are also useful when Pscl contains uncleared
+// TYPE bits.
+//
+// Note: SCLCMP() cannot take advantage of knowing the Index length because
+// the scl_Index length is not pre-known when these macros are used.
+
+#define PSCLINDEX(PSCL) ((CLEAR_PSCL(PSCL))->scl_Index)
+#define PSCLVALUE(PSCL) ((CLEAR_PSCL(PSCL))->scl_Pvalue)
+
+#define SCLCMP(INDEX,PSCL) STRCMP(INDEX, PSCLINDEX(PSCL))
+
+#define PPSCLVALUE_EQ(INDEX,PSCL) \
+ ((SCLCMP(INDEX, PSCL) == 0) ? &PSCLVALUE(PSCL) : (PPvoid_t)NULL)
+
+#define PPSCLVALUE_LT(INDEX,PSCL) \
+ ((SCLCMP(INDEX, PSCL) < 0) ? &PSCLVALUE(PSCL) : (PPvoid_t)NULL)
+
+#define PPSCLVALUE_GT(INDEX,PSCL) \
+ ((SCLCMP(INDEX, PSCL) > 0) ? &PSCLVALUE(PSCL) : (PPvoid_t)NULL)
+
+// Common in-lined code to append or free a shortcut leaf:
+//
+// See header comments about premature return(). Note that malloc() does not
+// pre-zero the memory, so ensure scl_Pvalue is zeroed, just like a value area
+// in a JudyL array. Hope strcpy() is fast enough in this context.
+
+#define APPEND_SCL(PSCL,PPARRAY,INDEX,LEN,PJERROR) \
+{ \
+ if (((PSCL) = (Pscl_t) JudyMalloc(SCLSIZE(LEN))) == (Pscl_t)NULL) \
+ { \
+ JU_SET_ERRNO(PJERROR, JU_ERRNO_NOMEM); \
+ return (PPJERR); \
+ } \
+ *(PPARRAY) = (Pvoid_t)SET_PSCL(PSCL); \
+ ((PSCL)->scl_Pvalue) = (Pvoid_t)NULL; \
+ (void)STRCPY((PSCL)->scl_Index, INDEX); \
+}
+
+// "FORWARD" DECLARATIONS:
+
+static void JudySLModifyErrno(PJError_t PJError,
+ Pcvoid_t PArray, Pcvoid_t PArrayOrig);
+static int JudySLDelSub(PPvoid_t PPArray, PPvoid_t PPArrayOrig,
+ const uint8_t * Index, Word_t len, PJError_t PJError);
+static PPvoid_t JudySLPrevSub(Pcvoid_t PArray, uint8_t * Index, int orig,
+ Word_t len, PJError_t PJError);
+static PPvoid_t JudySLNextSub(Pcvoid_t PArray, uint8_t * Index, int orig,
+ Word_t len, PJError_t PJError);
+
+// ****************************************************************************
+// J U D Y S L M O D I F Y E R R N O
+//
+// Common code for error translation: When a caller passes an invalid JAP
+// ("not a JudyL pointer"), OR if the JudySL array is corrupted at a lower
+// level, various JudyL*() calls return JU_ERRNO_NOTJUDYL. If the caller wants
+// detailed error info, convert this particular error to JU_ERRNO_NOTJUDYSL if
+// at the top of the tree, otherwise convert it to JU_ERRNO_CORRUPT, meaning
+// there was a corruption (the only one even detectable outside JudyL) in the
+// JudySL tree; but pass through any other errors unaltered.
+
+static void
+JudySLModifyErrno(PJError_t PJError, // to modify if non-null.
+ Pcvoid_t PArray, // current JudyL array.
+ Pcvoid_t PArrayOrig // top-of-tree JudyL array.
+ )
+{ // map this Judy errno.
+ if ((PJError != PJE0) && (JU_ERRNO(PJError) == JU_ERRNO_NOTJUDYL))
+ {
+ if (PArray == PArrayOrig) // callers fault.
+ {
+ JU_SET_ERRNO_NONNULL(PJError, JU_ERRNO_NOTJUDYSL);
+ }
+ else // lower level.
+ {
+ JU_SET_ERRNO_NONNULL(PJError, JU_ERRNO_CORRUPT);
+ }
+ }
+} // JudySLModifyErrno()
+
+// ****************************************************************************
+// J U D Y S L G E T
+//
+// See comments in file header and below.
+
+PPvoid_t
+JudySLGet(Pcvoid_t PArray, const uint8_t * Index, PJError_t PJError)
+{
+ const uint8_t *pos = Index; // place in Index.
+ Word_t indexword; // buffer for aligned copy.
+ PPvoid_t PPValue; // from JudyL array.
+
+// CHECK FOR CALLER ERROR (NULL POINTER):
+
+ if (Index == (uint8_t *) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return (PPJERR);
+ }
+
+// SEARCH NEXT LEVEL JUDYL ARRAY IN TREE:
+//
+// Use or copy each word from the Index string and check for it in the next
+// level JudyL array in the array tree, but first watch for shortcut leaves.
+// Upon invalid Index or end of Index (string) in current word, return.
+
+ do // until return.
+ {
+ if (IS_PSCL(PArray)) // a shortcut leaf.
+ return (PPSCLVALUE_EQ(pos, PArray));
+
+ COPYSTRINGtoWORD(indexword, pos); // copy next 4[8] bytes.
+
+ JLG(PPValue, PArray, indexword);
+
+ if ((PPValue == (PPvoid_t) NULL) || LASTWORD_BY_VALUE(indexword))
+ return (PPValue);
+
+// CONTINUE TO NEXT LEVEL DOWN JUDYL ARRAY TREE:
+//
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated here as a dead-end (not a core
+// dump or assertion; see version 1.25).
+
+ pos += WORDSIZE;
+ PArray = *PPValue; // each value -> next array.
+ } while(1); // forever
+// NOTREACHED JudySLGet()
+}
+
+// ****************************************************************************
+// J U D Y S L I N S
+//
+// See also the comments in JudySLGet(), which is somewhat similar, though
+// simpler.
+//
+// Theory of operation:
+//
+// Upon encountering a null pointer in the tree of JudyL arrays, insert a
+// shortcut leaf -- including directly under a null root pointer for the first
+// Index in the JudySL array.
+//
+// Upon encountering a pre-existing shortcut leaf, if the old Index is equal to
+// the new one, return the old value area. Otherwise, "carry down" the old
+// Index until the old and new Indexes diverge, at which point each Index
+// either terminates in the last JudyL array or a new shortcut leaf is inserted
+// under it for the Indexs remainder.
+//
+// TBD: Running out of memory below the starting point causes a premature
+// return below (in several places) and leaves a dead-end in the JudySL tree.
+// Ideally the code here would back this out rather than wasting a little
+// memory, but in lieu of that, the get, delete, and search functions
+// understand dead-ends and handle them appropriately.
+
+PPvoid_t
+JudySLIns(PPvoid_t PPArray, const uint8_t * Index, PJError_t PJError)
+{
+ PPvoid_t PPArrayOrig = PPArray; // for error reporting.
+ const uint8_t *pos = Index; // place in Index.
+ const uint8_t *pos2 = (uint8_t *) NULL; // old Index (SCL being moved).
+ Word_t len; // bytes remaining.
+
+// Note: len2 is set when needed and only used when valid, but this is not
+// clear to gcc -Wall, so initialize it here to avoid a warning:
+
+ Word_t len2 = 0; // for old Index (SCL being moved).
+ Word_t scl2 = 0; // size in words of SCL
+ Word_t indexword; // buffer for aligned copy.
+ Word_t indexword2; // for old Index (SCL being moved).
+ PPvoid_t PPValue; // from JudyL array.
+ PPvoid_t PPValue2; // for old Index (SCL being moved).
+ Pscl_t Pscl = (Pscl_t) NULL; // shortcut leaf.
+ Pscl_t Pscl2; // for old Index (SCL being moved).
+
+// CHECK FOR CALLER ERROR (NULL POINTERS):
+
+ if (PPArray == (PPvoid_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+ return (PPJERR);
+ }
+ if (Index == (uint8_t *) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return (PPJERR);
+ }
+
+ len = STRLEN(Index); // bytes remaining.
+
+// APPEND SHORTCUT LEAF:
+//
+// If PPArray, which is the root pointer to the first or next JudyL array in
+// the tree, points to null (no next JudyL array), AND there is no shortcut
+// leaf being carried down, append a shortcut leaf here for the new Index, no
+// matter how much of the Index string remains (one or more bytes, including
+// the trailing \0).
+
+ while (1) // until return.
+ {
+ if (*PPArray == (Pvoid_t)NULL) // no next JudyL array.
+ {
+ if (Pscl == (Pscl_t) NULL) // no SCL being carried down.
+ {
+ APPEND_SCL(Pscl, PPArray, pos, len, PJError); // returns if error.
+ return (&(Pscl->scl_Pvalue));
+ }
+ // else do nothing here; see below.
+ }
+
+// CARRY DOWN PRE-EXISTING SHORTCUT LEAF:
+//
+// When PPArray points to a pre-existing shortcut leaf, if its Index is equal
+// to the Index to be inserted, meaning no insertion is required, return its
+// value area; otherwise, "move it aside" and "carry it down" -- replace it
+// (see below) with one or more levels of JudyL arrays. Moving it aside
+// initially just means setting Pscl non-null, both as a flag and for later
+// use, and clearing the pointer to the SCL in the JudyL array.
+
+ else if (IS_PSCL(*PPArray))
+ {
+ assert(Pscl == (Pscl_t) NULL); // no nested SCLs.
+
+ Pscl = CLEAR_PSCL(*PPArray);
+
+ pos2 = Pscl->scl_Index; // note: pos2 is always word-aligned.
+ len2 = STRLEN(pos2); // bytes remaining.
+
+// first check if string is already inserted
+
+ if ((len == len2) && (STRCMP(pos, pos2) == 0))
+ return (&(Pscl->scl_Pvalue));
+
+ *PPArray = (Pvoid_t)NULL; // disconnect SCL.
+
+ scl2 = SCLSIZE(len2); // save for JudyFree
+
+ // continue with *PPArray now clear, and Pscl, pos2, len2 set.
+ }
+
+// CHECK IF OLD AND NEW INDEXES DIVERGE IN THE CURRENT INDEX WORD:
+//
+// If a shortcut leaf is being carried down and its remaining Index chars now
+// diverge from the remaining chars of the Index being inserted, that is, if
+// the next words of each Index differ, "plug in" the old Index here, in a new
+// JudyL array, before proceeding.
+//
+// Note: Call JudyLIns() for the SCL Index word before calling it for the new
+// Index word, so PPValue remains correct for the latter. (JudyLIns() return
+// values are not stable across multiple calls.)
+//
+// Note: Although pos2 is word-aligned, and a Pscl_t is a whole number of
+// words in size, pos2 is not certain to be null-padded through a whole word,
+// so copy it first to an index word for later use.
+//
+// See header comments about premature return().
+
+ COPYSTRINGtoWORD(indexword, pos); // copy next 4[8] bytes.
+
+ if (Pscl != (Pscl_t) NULL)
+ {
+ COPYSTRINGtoWORD(indexword2, pos2); // copy next 4[8] bytes.
+
+ if (indexword != indexword2) // SCL and new Indexes diverge.
+ {
+ assert(*PPArray == (Pvoid_t)NULL); // should be new JudyL array.
+
+// Note: If JudyLIns() returns JU_ERRNO_NOTJUDYL here, *PPArray should not be
+// modified, so JudySLModifyErrno() can do the right thing.
+
+ if ((PPValue2 = JudyLIns(PPArray, indexword2, PJError))
+ == PPJERR)
+ {
+ JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+ return (PPJERR);
+ }
+
+ assert(PPValue2 != (PPvoid_t) NULL);
+
+// If the old (SCL) Index terminates here, copy its value directly into the
+// JudyL value area; otherwise create a new shortcut leaf for it, under
+// *PPValue2 (skipping the word just inserted), and copy its value to the new
+// SCL:
+
+ if (len2 <= WORDSIZE)
+ {
+ *((PWord_t)PPValue2) = (Word_t)(Pscl->scl_Pvalue);
+ }
+ else
+ {
+ APPEND_SCL(Pscl2, PPValue2, pos2 + WORDSIZE,
+ len2 - WORDSIZE, PJError);
+ (Pscl2->scl_Pvalue) = Pscl->scl_Pvalue;
+ }
+// old SCL no longer needed.
+
+ JudyFree((void *)Pscl, scl2);
+
+ Pscl = (Pscl_t) NULL;
+ }
+ }
+
+// APPEND NEXT LEVEL JUDYL ARRAY TO TREE:
+//
+// If a shortcut leaf was carried down and diverged at this level, the code
+// above already appended the new JudyL array, but the next word of the new
+// Index still must be inserted in it.
+//
+// See header comments about premature return().
+//
+// Note: If JudyLIns() returns JU_ERRNO_NOTJUDYL here, *PPArray should not be
+// modified, so JudySLModifyErrno() can do the right thing.
+
+ if ((PPValue = JudyLIns(PPArray, indexword, PJError)) == PPJERR)
+ {
+ JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+ return (PPJERR);
+ }
+
+ assert(PPValue != (PPvoid_t) NULL);
+
+// CHECK IF NEW INDEX TERMINATES:
+//
+// Note that if it does, and an old SCL was being carried down, it must have
+// diverged by this point, and is already handled.
+
+ if (len <= WORDSIZE)
+ {
+ assert(Pscl == (Pscl_t) NULL);
+ return (PPValue); // is value for whole Index string.
+ }
+
+ pos += WORDSIZE;
+ len -= WORDSIZE;
+ pos2 += WORDSIZE; // useless unless Pscl is set.
+ len2 -= WORDSIZE;
+
+ PPArray = PPValue; // each value -> next array.
+ } // while.
+} // NOTREACHED, JudySLIns()
+
+// ****************************************************************************
+// J U D Y S L D E L
+//
+// See the comments in JudySLGet(), which is somewhat similar.
+//
+// Unlike JudySLGet() and JudySLIns(), recurse downward through the tree of
+// JudyL arrays to find and delete the given Index, if present, and then on the
+// way back up, any of its parent arrays which ends up empty.
+//
+// TECHNICAL NOTES:
+//
+// Recursion seems bad, but this allows for an arbitrary-length Index. Also, a
+// more clever iterative solution that used JudyLCount() (see below) would
+// still require a function call per tree level, so why not just recurse?
+//
+// An earlier version (1.20) used a fixed-size stack, which limited the Index
+// size. We were going to replace this with using JudyLCount(), in order to
+// note and return to (read this carefully) the highest level JudyL array with
+// a count of 1, all of whose descendant JudyL arrays also have a count of 1,
+// and delete from that point downwards. This solution would traverse the
+// array tree downward looking to see if the given Index is in the tree, then
+// if so, delete layers downwards starting below the last one that contains
+// other Indexes than the one being deleted.
+//
+// TBD: To save time coding, and to very likely save time overall during
+// execution, this function does "lazy deletions", or putting it more nicely,
+// it allows "hysteresis" in the JudySL tree, when shortcut leafs are present.
+// It only removes the specified Index, and recursively any empty JudyL arrays
+// above it, without fully reversing the effects of JudySLIns(). This is
+// probably OK because any application that calls JudySLDel() is likely to call
+// JudySLIns() again with the same or a neighbor Index.
+
+int
+JudySLDel(PPvoid_t PPArray, const uint8_t * Index, PJError_t PJError) // optional, for returning error info.
+{
+
+// Check for caller error (null pointer):
+
+ if (PPArray == (PPvoid_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+ return (JERR);
+ }
+ if (Index == (uint8_t *) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return (JERR);
+ }
+
+// Do the deletion:
+
+ return (JudySLDelSub(PPArray, PPArray, Index, STRLEN(Index), PJError));
+
+} // JudySLDel()
+
+// ****************************************************************************
+// J U D Y S L D E L S U B
+//
+// This is the "engine" for JudySLDel() that expects aligned and len to already
+// be computed (only once). See the header comments for JudySLDel().
+
+static int
+JudySLDelSub(PPvoid_t PPArray, // in which to delete.
+ PPvoid_t PPArrayOrig, // for error reporting.
+ const uint8_t * Index, // to delete.
+ Word_t len, // bytes remaining.
+ PJError_t PJError) // optional, for returning error info.
+{
+ Word_t indexword; // next word to find.
+ PPvoid_t PPValue; // from JudyL array.
+ int retcode; // from lower-level call.
+
+ assert(PPArray != (PPvoid_t) NULL);
+ assert(Index != (uint8_t *) NULL);
+
+// DELETE SHORTCUT LEAF:
+//
+// As described above, this can leave an empty JudyL array, or one containing
+// only a single other Index word -- which could be, but is not, condensed into
+// a higher-level shortcut leaf. More precisely, at this level it leaves a
+// temporary "dead end" in the JudySL tree, similar to when running out of
+// memory during JudySLIns(), and this is somewhat cleaned up by higher
+// recursions of the same function (see below); but remaining shortcut leaves
+// for other Indexes are not coalesced.
+
+ if (IS_PSCL(*PPArray))
+ {
+ Pscl_t Pscll = CLEAR_PSCL(*PPArray);
+ Word_t words;
+
+ if (STRCMP(Index, Pscll->scl_Index))
+ return (0); // incorrect index.
+
+ words = SCLSIZE(STRLEN(Pscll->scl_Index));
+ JudyFree((void *)Pscll, words);
+
+ *PPArray = (Pvoid_t)NULL;
+ return (1); // correct index deleted.
+ }
+
+// DELETE LAST INDEX WORD, FROM CURRENT JUDYL ARRAY:
+//
+// When at the end of the full Index, delete the last word, if present, from
+// the current JudyL array, and return the result all the way up.
+
+ COPYSTRINGtoWORD(indexword, Index); // copy next 4[8] bytes.
+
+ if (len <= WORDSIZE)
+ {
+ if ((retcode = JudyLDel(PPArray, indexword, PJError)) == JERR)
+ {
+ JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+ return (JERR);
+ }
+ return (retcode);
+ }
+
+// DELETE BELOW NON-LAST INDEX WORD IN CURRENT JUDYL ARRAY:
+//
+// If a word before the end of the full Index is present in the current JudyL
+// array, recurse through its value, which must be a pointer to another JudyL
+// array, to continue the deletion at the next level. Return the JudyLGet()
+// return if the Indexs current word is not in the JudyL array, or if no
+// delete occurs below this level, both of which mean the whole Index is not
+// currently valid.
+//
+
+ JLG(PPValue, *PPArray, indexword);
+ if (PPValue == (PPvoid_t) NULL)
+ return (0); // Index not in JudySL array.
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25).
+ if ((retcode =
+ JudySLDelSub(PPValue, PPArrayOrig, Index + WORDSIZE,
+ len - WORDSIZE, PJError)) != 1)
+ {
+ return (retcode); // no lower-level delete, or error.
+ }
+
+// DELETE EMPTY JUDYL ARRAY:
+//
+// A delete occurred below in the tree. If the child JudyL array became empty,
+// delete the current Index word from the current JudyL array, which could
+// empty the current array and null out *PPArray in turn (or pass through an
+// error). Otherwise simply indicate that a deletion did occur.
+
+ if (*PPValue == (Pvoid_t)NULL)
+ {
+ if ((retcode = JudyLDel(PPArray, indexword, PJError)) == JERR)
+ {
+ JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+ return (JERR);
+ }
+
+ return (retcode);
+ }
+
+ return (1);
+} // JudySLDelSub()
+
+// ****************************************************************************
+// J U D Y S L P R E V
+//
+// Recursively traverse the JudySL tree downward using JudyLGet() to look for
+// each successive index word from Index in the JudyL array at each level. At
+// the last level for the Index (LASTWORD_BY_LEN()), use JudyLPrev() instead of
+// JudyLGet(), to exclude the initial Index. If this doesnt result in finding
+// a previous Index, work back up the tree using JudyLPrev() at each higher
+// level to search for a previous index word. Upon finding a previous index
+// word, descend again if/as necessary, this time inclusively, to find and
+// return the full previous Index.
+//
+// Also support shortcut leaves.
+//
+// Since this function is recursive and it also needs to know if its still
+// looking for the original Index (to exclude it at the LASTWORD_BY_LEN()
+// level) or for the remaining words of the previous Index (inclusive),
+// actually call a subroutine that takes an additional parameter.
+//
+// See also the technical notes in JudySLDel() regarding the use of recursion
+// rather than iteration.
+
+PPvoid_t
+JudySLPrev(Pcvoid_t PArray, uint8_t * Index, PJError_t PJError) // optional, for returning error info.
+{
+// Check for caller error (null pointer), or empty JudySL array:
+
+ if (Index == (uint8_t *) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return (PPJERR);
+ }
+
+ if (PArray == (Pvoid_t)NULL)
+ return ((PPvoid_t) NULL);
+// Do the search:
+ return (JudySLPrevSub(PArray, Index, /* original = */ 1,
+ STRLEN(Index), PJError));
+} // JudySLPrev()
+
+// ****************************************************************************
+// J U D Y S L P R E V S U B
+//
+// This is the "engine" for JudySLPrev() that knows whether its still looking
+// for the original Index (exclusive) or a neighbor index (inclusive), and that
+// expects aligned and len to already be computed (only once). See the header
+// comments for JudySLPrev().
+
+static PPvoid_t
+JudySLPrevSub(Pcvoid_t PArray, uint8_t * Index, int orig,
+ Word_t len, // bytes remaining.
+ PJError_t PJError) // optional, for returning error info.
+{
+ Word_t indexword; // next word to find.
+ PPvoid_t PPValue; // from JudyL array.
+// ORIGINAL SEARCH:
+//
+// When at a shortcut leaf, copy its remaining Index (string) chars into Index
+// and return its value area if the current Index is after (greater than) the
+// SCLs index; otherwise return null.
+ if (orig)
+ {
+ if (IS_PSCL(PArray))
+ {
+ if ((PPValue = PPSCLVALUE_GT(Index, PArray)) != (PPvoid_t) NULL)
+ (void)STRCPY(Index, PSCLINDEX(PArray));
+ return (PPValue);
+ }
+
+// If the current Index word:
+// - is not the last word in Index (end of string),
+// - exists in the current JudyL array, and,
+// - a previous Index is found below it, return that Indexs value area.
+
+ COPYSTRINGtoWORD(indexword, Index); // copy next 4[8] bytes.
+ if (len > WORDSIZE) // not at end of Index.
+ {
+ JLG(PPValue, PArray, indexword);
+ if (PPValue != (PPvoid_t) NULL)
+ {
+
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+
+ PPValue = JudySLPrevSub(*PPValue, Index + WORDSIZE,
+ /* original = */ 1,
+ len - WORDSIZE, PJError);
+ if (PPValue == PPJERR)
+ return (PPJERR); // propagate error.
+ if (PPValue != (PPvoid_t) NULL)
+ return (PPValue); // see above.
+ }
+ }
+
+// Search for previous index word:
+//
+// One of the above conditions is false. Search the current JudyL array for
+// the Index word, if any, prior to the current index word. If none is found,
+// return null; otherwise fall through to common later code.
+
+ if ((PPValue = JudyLPrev(PArray, &indexword, PJError)) == PPJERR)
+ {
+ JudySLModifyErrno(PJError, PArray, orig ? PArray : (Pvoid_t)NULL);
+ return (PPJERR);
+ }
+
+ if (PPValue == (PPvoid_t) NULL)
+ return ((PPvoid_t) NULL); // no previous index word.
+ } // if.
+
+// SUBSEQUENT SEARCH:
+//
+// A higher level search already excluded the initial Index, then found a
+// previous index word, and is now traversing down to determine the rest of the
+// Index and to obtain its value area. If at a shortcut leaf, return its value
+// area. Otherwise search the current JudyL array backward from the upper
+// limit for its last index word. If no index word is found, return null --
+// should never happen unless the JudySL tree is corrupt; otherwise fall
+// through to common later code.
+
+ else
+ {
+ if (IS_PSCL(PArray)) // at shortcut leaf.
+ {
+ (void)STRCPY(Index, PSCLINDEX(PArray));
+ return (&PSCLVALUE(PArray));
+ }
+
+ indexword = ~0UL;
+ if ((PPValue = JudyLLast(PArray, &indexword, PJError)) == PPJERR)
+ {
+ JudySLModifyErrno(PJError, PArray, orig ? PArray : (Pvoid_t)NULL);
+ return (PPJERR);
+ }
+
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+
+ if (PPValue == (PPvoid_t) NULL)
+ return ((PPvoid_t) NULL); // no previous index word.
+ }
+
+// FOUND PREVIOUS INDEX WORD:
+//
+// A previous (if original) or last (if subsequent) index word was located in
+// the current JudyL array. Store it into the callers Index (string). Then
+// if the found (previous) Index ends here, return its value area; otherwise do
+// a subsequent search below this point, which should never fail unless the
+// JudySL tree is corrupt, but this is detected at a lower level by the above
+// assertion.
+//
+// Note: Treat Index as unaligned, even if it is aligned, to avoid writing
+// past the end of allocated memory (in case its less than a whole number of
+// words).
+
+ COPYWORDtoSTRING(Index, indexword); // copy next 4[8] bytes.
+ if (LASTWORD_BY_VALUE(indexword))
+ return (PPValue);
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+ return (JudySLPrevSub(*PPValue, Index + WORDSIZE, /* original = */ 0,
+ len - WORDSIZE, PJError));
+} // JudySLPrevSub()
+
+// ****************************************************************************
+// J U D Y S L N E X T
+//
+// See the comments in JudySLPrev(), which is very similar.
+//
+// TBD: Could the two functions call a common engine function with various
+// subfunctions and other constants specified?
+
+PPvoid_t
+JudySLNext(Pcvoid_t PArray, uint8_t * Index, PJError_t PJError) // optional, for returning error info.
+{
+// Check for caller error (null pointer), or empty JudySL array:
+
+ if (Index == (uint8_t *) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return (PPJERR);
+ }
+
+ if (PArray == (Pvoid_t)NULL)
+ return ((PPvoid_t) NULL);
+// Do the search:
+ return (JudySLNextSub(PArray, Index, /* original = */ 1,
+ STRLEN(Index), PJError));
+} // JudySLNext()
+
+// ****************************************************************************
+// J U D Y S L N E X T S U B
+//
+// See the comments in JudySLPrevSub(), which is very similar.
+
+static PPvoid_t
+JudySLNextSub(Pcvoid_t PArray, uint8_t * Index, int orig,
+ Word_t len, // bytes remaining.
+ PJError_t PJError) // optional, for returning error info.
+{
+ Word_t indexword; // next word to find.
+ PPvoid_t PPValue; // from JudyL array.
+ if (orig)
+ {
+ if (IS_PSCL(PArray))
+ {
+ if ((PPValue = PPSCLVALUE_LT(Index, PArray)) != (PPvoid_t) NULL)
+ (void)STRCPY(Index, PSCLINDEX(PArray));
+ return (PPValue);
+ }
+
+ COPYSTRINGtoWORD(indexword, Index); // copy next 4[8] bytes.
+
+ if (len > WORDSIZE) // not at end of Index.
+ {
+ JLG(PPValue, PArray, indexword);
+ if (PPValue != (PPvoid_t) NULL)
+ {
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+
+ PPValue = JudySLNextSub(*PPValue, Index + WORDSIZE,
+ /* original = */ 1,
+ len - WORDSIZE, PJError);
+ if (PPValue == PPJERR)
+ return (PPJERR); // propagate error.
+ if (PPValue != (PPvoid_t) NULL)
+ return (PPValue); // see above.
+ }
+ }
+
+ if ((PPValue = JudyLNext(PArray, &indexword, PJError)) == PPJERR)
+ {
+ JudySLModifyErrno(PJError, PArray, orig ? PArray : (Pvoid_t)NULL);
+ return (PPJERR);
+ }
+
+ if (PPValue == (PPvoid_t) NULL)
+ return ((PPvoid_t) NULL); // no next index word.
+ }
+ else
+ {
+ if (IS_PSCL(PArray)) // at shortcut leaf.
+ {
+ (void)STRCPY(Index, PSCLINDEX(PArray));
+ return (&PSCLVALUE(PArray));
+ }
+
+ indexword = 0;
+ if ((PPValue = JudyLFirst(PArray, &indexword, PJError)) == PPJERR)
+ {
+ JudySLModifyErrno(PJError, PArray, orig ? PArray : (Pvoid_t)NULL);
+ return (PPJERR);
+ }
+
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+
+ if (PPValue == (PPvoid_t) NULL)
+ return ((PPvoid_t) NULL); // no next index word.
+ }
+
+ COPYWORDtoSTRING(Index, indexword); // copy next 4[8] bytes
+ if (LASTWORD_BY_VALUE(indexword))
+ return (PPValue);
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+ return (JudySLNextSub(*PPValue, Index + WORDSIZE, /* original = */ 0,
+ len - WORDSIZE, PJError));
+} // JudySLNextSub()
+
+// ****************************************************************************
+// J U D Y S L F I R S T
+//
+// Like JudyLFirst(), do a JudySLGet(), then if necessary a JudySLNext().
+
+PPvoid_t
+JudySLFirst(Pcvoid_t PArray, uint8_t * Index, PJError_t PJError) // optional, for returning error info.
+{
+ PPvoid_t PPValue; // from JudyL array.
+ if (Index == (uint8_t *) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return (PPJERR);
+ }
+
+ if ((PPValue = JudySLGet(PArray, Index, PJError)) == PPJERR)
+ return (PPJERR); // propagate serious error.
+ if ((PPValue == (PPvoid_t) NULL) // first try failed.
+ && ((PPValue = JudySLNext(PArray, Index, PJError)) == PPJERR))
+ {
+ return (PPJERR); // propagate serious error.
+ }
+
+ return (PPValue);
+} // JudySLFirst()
+
+// ****************************************************************************
+// J U D Y S L L A S T
+//
+// Like JudyLLast(), do a JudySLGet(), then if necessary a JudySLPrev().
+
+PPvoid_t
+JudySLLast(Pcvoid_t PArray, uint8_t * Index, PJError_t PJError) // optional, for returning error info.
+{
+ PPvoid_t PPValue; // from JudyL array.
+ if (Index == (uint8_t *) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+ return (PPJERR);
+ }
+
+ if ((PPValue = JudySLGet(PArray, Index, PJError)) == PPJERR)
+ return (PPJERR); // propagate serious error.
+ if ((PPValue == (PPvoid_t) NULL) // first try failed.
+ && ((PPValue = JudySLPrev(PArray, Index, PJError)) == PPJERR))
+ {
+ return (PPJERR); // propagate serious error.
+ }
+
+ return (PPValue);
+} // JudySLLast()
+
+// ****************************************************************************
+// J U D Y S L F R E E A R R A Y
+//
+// Walk the JudySL tree of JudyL arrays to free each JudyL array, depth-first.
+// During the walk, ignore indexes (strings) that end in the current JudyL
+// array to be freed. Just recurse through those indexes which do not end,
+// that is, those whose associated value areas point to subsidiary JudyL
+// arrays, except for those which point to shortcut leaves. Return the total
+// bytes freed in all of the JudyL arrays at or below the current level.
+//
+// Like the JudyLFreeArray() and Judy1FreeArray() code, this is written
+// recursively, which is probably fast enough, to allow indexes (strings) of
+// arbitrary size. If recursion turns out to be a problem, consider instead
+// doing some large, fixed number of iterative descents (like 100) using a
+// fixed-size "stack" (array), then recursing upon overflow (relatively
+// rarely).
+
+Word_t
+JudySLFreeArray(PPvoid_t PPArray, PJError_t PJError) // optional, for returning error info.
+{
+ PPvoid_t PPArrayOrig = PPArray; // for error reporting.
+ Word_t indexword = 0; // word just found.
+ PPvoid_t PPValue; // from Judy array.
+ Word_t bytes_freed = 0; // bytes freed at this level.
+ Word_t bytes_total = 0; // bytes freed at all levels.
+ if (PPArray == (PPvoid_t) NULL)
+ {
+ JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+ return (JERR);
+ }
+
+// FREE SHORTCUT LEAF:
+
+ if (IS_PSCL(*PPArray))
+ {
+ Word_t freewords;
+ Pscl_t Pscl;
+
+ Pscl = CLEAR_PSCL(*PPArray);
+
+ freewords = SCLSIZE(STRLEN(Pscl->scl_Index));
+
+ JudyFree((void *)Pscl, freewords);
+
+ *PPArray = (Pvoid_t)NULL;
+
+ return (freewords * WORDSIZE);
+ }
+
+// FREE EACH SUB-ARRAY (DEPTH-FIRST):
+//
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue. This is automatically treated correctly here as a dead-end.
+//
+// An Index (string) ends in the current word iff the last byte of the
+// (null-padded) word is null.
+
+ for (PPValue = JudyLFirst(*PPArray, &indexword, PJError);
+ (PPValue != (PPvoid_t) NULL) && (PPValue != PPJERR);
+ PPValue = JudyLNext(*PPArray, &indexword, PJError))
+ {
+ if (!LASTWORD_BY_VALUE(indexword))
+ {
+ if ((bytes_freed = JudySLFreeArray(PPValue, PJError)) == JERR)
+ return (JERR); // propagate serious error.
+ bytes_total += bytes_freed;
+ }
+ }
+
+// Check for a serious error in a JudyL*() call:
+
+ if (PPValue == PPJERR)
+ {
+ JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+ return (JERR);
+ }
+
+// Now free the current array, which also nulls the pointer:
+//
+// Note: *PPArray can be null here for a totally null JudySL array =>
+// JudyLFreeArray() returns zero.
+
+ if ((bytes_freed = JudyLFreeArray(PPArray, PJError)) == JERR)
+ {
+ JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+ return (JERR);
+ }
+ return (bytes_total + bytes_freed);
+} // JudySLFreeArray()
diff --git a/libs/klib/judy/JudyTablesGen.c b/libs/klib/judy/JudyTablesGen.c
new file mode 100644
index 0000000..a5fcb85
--- /dev/null
+++ b/libs/klib/judy/JudyTablesGen.c
@@ -0,0 +1,294 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// _________________
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error: One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#define TERMINATOR 999 // terminator for Alloc tables
+
+#define BPW sizeof(Word_t) // define bytes per word
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+FILE *fd;
+
+// Definitions come from header files Judy1.h and JudyL.h:
+
+int AllocSizes[] = ALLOCSIZES;
+
+#define ROUNDUP(BYTES,BPW,OFFSETW) \
+ ((((BYTES) + (BPW) - 1) / (BPW)) + (OFFSETW))
+
+
+// ****************************************************************************
+// G E N T A B L E
+//
+// Note: "const" is required for newer compilers.
+
+FUNCTION void GenTable(
+ const char * TableName, // name of table string
+ const char * TableSize, // dimentioned size string
+ int IndexBytes, // bytes per Index
+ int LeafSize, // number elements in object
+ int ValueBytes, // bytes per Value
+ int OffsetWords) // 1 for LEAFW
+{
+ int * PAllocSizes = AllocSizes;
+ int OWord;
+ int CurWord;
+ int IWord;
+ int ii;
+ int BytesOfIndex;
+ int BytesOfObject;
+ int Index;
+ int LastWords;
+ int Words [1000] = { 0 };
+ int Offset[1000] = { 0 };
+ int MaxWords;
+
+ MaxWords = ROUNDUP((IndexBytes + ValueBytes) * LeafSize, BPW, OffsetWords);
+ Words[0] = 0;
+ Offset[0] = 0;
+ CurWord = TERMINATOR;
+
+// Walk through all number of Indexes in table:
+
+ for (Index = 1; /* null */; ++Index)
+ {
+
+// Calculate byte required for next size:
+
+ BytesOfIndex = IndexBytes * Index;
+ BytesOfObject = (IndexBytes + ValueBytes) * Index;
+
+// Round up and calculate words required for next size:
+
+ OWord = ROUNDUP(BytesOfObject, BPW, OffsetWords);
+ IWord = ROUNDUP(BytesOfIndex, BPW, OffsetWords);
+
+// Root-level leaves of population of 1 and 2 do not have the 1 word offset:
+
+// Save minimum value of offset:
+
+ Offset[Index] = IWord;
+
+// Round up to next available size of words:
+
+ while (OWord > *PAllocSizes) PAllocSizes++;
+
+ if (Index == LeafSize)
+ {
+ CurWord = Words[Index] = OWord;
+ break;
+ }
+// end of available sizes ?
+
+ if (*PAllocSizes == TERMINATOR)
+ {
+ fprintf(stderr, "BUG, in %sPopToWords, sizes not big enough for object\n", TableName);
+ exit(1);
+ }
+
+// Save words required and last word:
+
+ if (*PAllocSizes < MaxWords) { CurWord = Words[Index] = *PAllocSizes; }
+ else { CurWord = Words[Index] = MaxWords; }
+
+ } // for each index
+
+ LastWords = TERMINATOR;
+
+// Round up to largest size in each group of malloc sizes:
+
+ for (ii = LeafSize; ii > 0; ii--)
+ {
+ if (LastWords > (Words[ii] - ii)) LastWords = Offset[ii];
+ else Offset[ii] = LastWords;
+ }
+
+// Print the PopToWords[] table:
+
+ fprintf(fd,"\n//\tobject uses %d words\n", CurWord);
+ fprintf(fd,"//\t%s = %d\n", TableSize, LeafSize);
+
+ fprintf(fd,"const uint8_t\n");
+ fprintf(fd,"%sPopToWords[%s + 1] =\n", TableName, TableSize);
+ fprintf(fd,"{\n\t 0,");
+
+ for (ii = 1; ii <= LeafSize; ii++)
+ {
+
+// 8 columns per line, starting with 1:
+
+ if ((ii % 8) == 1) fprintf(fd,"\n\t");
+
+ fprintf(fd,"%2d", Words[ii]);
+
+// If not last number place comma:
+
+ if (ii != LeafSize) fprintf(fd,", ");
+ }
+ fprintf(fd,"\n};\n");
+
+// Print the Offset table if needed:
+
+ if (! ValueBytes) return;
+
+ fprintf(fd,"const uint8_t\n");
+ fprintf(fd,"%sOffset[%s + 1] =\n", TableName, TableSize);
+ fprintf(fd,"{\n");
+ fprintf(fd,"\t 0,");
+
+ for (ii = 1; ii <= LeafSize; ii++)
+ {
+ if ((ii % 8) == 1) fprintf(fd,"\n\t");
+
+ fprintf(fd,"%2d", Offset[ii]);
+
+ if (ii != LeafSize) fprintf(fd,", ");
+ }
+ fprintf(fd,"\n};\n");
+
+} // GenTable()
+
+
+// ****************************************************************************
+// M A I N
+
+#ifdef JU_WMAIN
+FUNCTION int wmain()
+#else
+FUNCTION int main()
+#endif
+{
+ int ii;
+
+#ifdef JUDY1
+ char *fname = "Judy1Tables.c";
+#else
+ char *fname = "JudyLTables.c";
+#endif
+
+ if ((fd = fopen(fname, "w")) == NULL){
+ perror("FATAL ERROR: could not write to Judy[1L]Tables.c file\n");
+ return (-1);
+ }
+
+
+ fprintf(fd,"// @(#) From generation tool: JudyTablesGen.c\n");
+ fprintf(fd,"//\n\n");
+
+
+// ================================ Judy1 =================================
+#ifdef JUDY1
+
+ fprintf(fd,"#include \"Judy1.h\"\n");
+
+ fprintf(fd,"// Leave the malloc() sizes readable in the binary (via "
+ "strings(1)):\n");
+ fprintf(fd,"const char * Judy1MallocSizes = \"Judy1MallocSizes =");
+
+ for (ii = 0; AllocSizes[ii] != TERMINATOR; ii++)
+ fprintf(fd," %d,", AllocSizes[ii]);
+
+#ifndef JU_64BIT
+ fprintf(fd," Leaf1 = %d\";\n\n", cJ1_LEAF1_MAXPOP1);
+#else
+ fprintf(fd,"\";\n\n"); // no Leaf1 in this case.
+#endif
+
+// ================================ 32 bit ================================
+#ifndef JU_64BIT
+
+ GenTable("j__1_BranchBJP","cJU_BITSPERSUBEXPB", 8, cJU_BITSPERSUBEXPB,0,0);
+
+ GenTable("j__1_Leaf1", "cJ1_LEAF1_MAXPOP1", 1, cJ1_LEAF1_MAXPOP1, 0, 0);
+ GenTable("j__1_Leaf2", "cJ1_LEAF2_MAXPOP1", 2, cJ1_LEAF2_MAXPOP1, 0, 0);
+ GenTable("j__1_Leaf3", "cJ1_LEAF3_MAXPOP1", 3, cJ1_LEAF3_MAXPOP1, 0, 0);
+ GenTable("j__1_LeafW", "cJ1_LEAFW_MAXPOP1", 4, cJ1_LEAFW_MAXPOP1, 0, 1);
+
+#endif
+
+// ================================ 64 bit ================================
+#ifdef JU_64BIT
+ GenTable("j__1_BranchBJP","cJU_BITSPERSUBEXPB",16, cJU_BITSPERSUBEXPB,0,0);
+
+ GenTable("j__1_Leaf2", "cJ1_LEAF2_MAXPOP1", 2, cJ1_LEAF2_MAXPOP1, 0, 0);
+ GenTable("j__1_Leaf3", "cJ1_LEAF3_MAXPOP1", 3, cJ1_LEAF3_MAXPOP1, 0, 0);
+ GenTable("j__1_Leaf4", "cJ1_LEAF4_MAXPOP1", 4, cJ1_LEAF4_MAXPOP1, 0, 0);
+ GenTable("j__1_Leaf5", "cJ1_LEAF5_MAXPOP1", 5, cJ1_LEAF5_MAXPOP1, 0, 0);
+ GenTable("j__1_Leaf6", "cJ1_LEAF6_MAXPOP1", 6, cJ1_LEAF6_MAXPOP1, 0, 0);
+ GenTable("j__1_Leaf7", "cJ1_LEAF7_MAXPOP1", 7, cJ1_LEAF7_MAXPOP1, 0, 0);
+ GenTable("j__1_LeafW", "cJ1_LEAFW_MAXPOP1", 8, cJ1_LEAFW_MAXPOP1, 0, 1);
+#endif
+#endif // JUDY1
+
+
+// ================================ JudyL =================================
+#ifdef JUDYL
+
+ fprintf(fd,"#include \"JudyL.h\"\n");
+
+ fprintf(fd,"// Leave the malloc() sizes readable in the binary (via "
+ "strings(1)):\n");
+ fprintf(fd,"const char * JudyLMallocSizes = \"JudyLMallocSizes =");
+
+ for (ii = 0; AllocSizes[ii] != TERMINATOR; ii++)
+ fprintf(fd," %d,", AllocSizes[ii]);
+
+ fprintf(fd," Leaf1 = %ld\";\n\n", (Word_t)cJL_LEAF1_MAXPOP1);
+
+#ifndef JU_64BIT
+// ================================ 32 bit ================================
+ GenTable("j__L_BranchBJP","cJU_BITSPERSUBEXPB", 8, cJU_BITSPERSUBEXPB, 0,0);
+
+ GenTable("j__L_Leaf1", "cJL_LEAF1_MAXPOP1", 1, cJL_LEAF1_MAXPOP1, BPW,0);
+ GenTable("j__L_Leaf2", "cJL_LEAF2_MAXPOP1", 2, cJL_LEAF2_MAXPOP1, BPW,0);
+ GenTable("j__L_Leaf3", "cJL_LEAF3_MAXPOP1", 3, cJL_LEAF3_MAXPOP1, BPW,0);
+ GenTable("j__L_LeafW", "cJL_LEAFW_MAXPOP1", 4, cJL_LEAFW_MAXPOP1, BPW,1);
+ GenTable("j__L_LeafV", "cJU_BITSPERSUBEXPL", 4, cJU_BITSPERSUBEXPL, 0,0);
+#endif // 32 BIT
+
+#ifdef JU_64BIT
+// ================================ 64 bit ================================
+ GenTable("j__L_BranchBJP","cJU_BITSPERSUBEXPB",16, cJU_BITSPERSUBEXPB, 0,0);
+
+ GenTable("j__L_Leaf1", "cJL_LEAF1_MAXPOP1", 1, cJL_LEAF1_MAXPOP1, BPW,0);
+ GenTable("j__L_Leaf2", "cJL_LEAF2_MAXPOP1", 2, cJL_LEAF2_MAXPOP1, BPW,0);
+ GenTable("j__L_Leaf3", "cJL_LEAF3_MAXPOP1", 3, cJL_LEAF3_MAXPOP1, BPW,0);
+ GenTable("j__L_Leaf4", "cJL_LEAF4_MAXPOP1", 4, cJL_LEAF4_MAXPOP1, BPW,0);
+ GenTable("j__L_Leaf5", "cJL_LEAF5_MAXPOP1", 5, cJL_LEAF5_MAXPOP1, BPW,0);
+ GenTable("j__L_Leaf6", "cJL_LEAF6_MAXPOP1", 6, cJL_LEAF6_MAXPOP1, BPW,0);
+ GenTable("j__L_Leaf7", "cJL_LEAF7_MAXPOP1", 7, cJL_LEAF7_MAXPOP1, BPW,0);
+ GenTable("j__L_LeafW", "cJL_LEAFW_MAXPOP1", 8, cJL_LEAFW_MAXPOP1, BPW,1);
+ GenTable("j__L_LeafV", "cJU_BITSPERSUBEXPL", 8, cJU_BITSPERSUBEXPL, 0,0);
+#endif // 64 BIT
+
+#endif // JUDYL
+ fclose(fd);
+
+ return(0);
+
+} // main()
diff --git a/libs/klib/judy/Makefile b/libs/klib/judy/Makefile
new file mode 100644
index 0000000..2d4d13a
--- /dev/null
+++ b/libs/klib/judy/Makefile
@@ -0,0 +1,207 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: all
+
+TOP ?= $(shell ../../../build/abspath.sh ../../..)
+MODULE = libs/klib/judy
+
+INT_LIBS = \
+ libjudy
+
+EXT_LIBS = \
+
+ALL_LIBS = \
+ $(INT_LIBS) \
+ $(EXT_LIBS)
+
+include $(TOP)/build/Makefile.env
+
+
+#-------------------------------------------------------------------------------
+# special rules
+# for some reason these guys use the same source and load it up with
+# ifdefs, so we have general rules to produce two sets of object files
+# from a single set of sources
+#
+%.n.32.$(OBJX): %.c
+ $(CC) -o $@ $(OPT) $(CFLAGS) -DJU_32BIT $<
+%.n.64.$(OBJX): %.c
+ $(CC) -o $@ $(OPT) $(CFLAGS) -DJU_64BIT $<
+%.n.32.$(LOBX): %.c
+ $(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJU_32BIT $<
+%.n.64.$(LOBX): %.c
+ $(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJU_64BIT $<
+
+%.b.32.$(OBJX): %.c
+ $(CC) -o $@ $(OPT) $(CFLAGS) -DJUDY1 -DJU_32BIT $<
+%.b.64.$(OBJX): %.c
+ $(CC) -o $@ $(OPT) $(CFLAGS) -DJUDY1 -DJU_64BIT $<
+%.b.32.$(LOBX): %.c
+ $(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJUDY1 -DJU_32BIT $<
+%.b.64.$(LOBX): %.c
+ $(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJUDY1 -DJU_64BIT $<
+
+%.w.32.$(OBJX): %.c
+ $(CC) -o $@ $(OPT) $(CFLAGS) -DJUDYL -DJU_32BIT $<
+%.w.64.$(OBJX): %.c
+ $(CC) -o $@ $(OPT) $(CFLAGS) -DJUDYL -DJU_64BIT $<
+%.w.32.$(LOBX): %.c
+ $(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJUDYL -DJU_32BIT $<
+%.w.64.$(LOBX): %.c
+ $(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJUDYL -DJU_64BIT $<
+
+ifeq (win,$(OS))
+#JUDY_WIN = -DJU_WIN
+JUDY_WIN = -DJU_WMAIN -I$(TOP)/interfaces/cc/vc++
+endif
+
+#ifeq (dbg, $(BUILD))
+#DEBUG := -DDEBUG
+#endif
+
+CFLAGS = $(DEBUG) $(NO_ARRAY_BOUNDS_WARNING) $(DBG) $(CARCH) $(PROF) $(JUDY_WIN) -I$(SRCDIR) -I$(SRCDIR)/..
+
+VPATH += $(OBJDIR)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): makedirs
+ @ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+ @ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+ $(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+ $(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
+
+#-------------------------------------------------------------------------------
+# judy tables - whee!
+#
+JUDY_TABLES_SRC = \
+ JudyTablesGen
+
+JUDY_TABLES_BOBJ = \
+ $(addsuffix .b.$(BITS).$(OBJX),$(JUDY_TABLES_SRC))
+
+JUDY_TABLES_WOBJ = \
+ $(addsuffix .w.$(BITS).$(OBJX),$(JUDY_TABLES_SRC))
+
+$(OBJDIR)/Judy1TablesGen: $(JUDY_TABLES_BOBJ)
+ $(LD) --exe -o $@ $^
+
+$(OBJDIR)/JudyLTablesGen: $(JUDY_TABLES_WOBJ)
+ $(LD) --exe -o $@ $^
+
+$(OBJDIR)/Judy1Tables.c: $(OBJDIR)/Judy1TablesGen
+ $(RUN_REMOTELY) $^
+
+$(OBJDIR)/JudyLTables.c: $(OBJDIR)/JudyLTablesGen
+ $(RUN_REMOTELY) $^
+
+$(ILIBDIR)/judy-tables: \
+ $(OBJDIR)/JudyLTables.c \
+ $(OBJDIR)/Judy1Tables.c
+
+#-------------------------------------------------------------------------------
+# judy whee!
+#
+
+$(ILIBDIR)/libjudy: $(addprefix $(ILIBDIR)/libjudy.,$(LIBX))
+
+JUDY_NEUTRAL = \
+ JudyMalloc \
+ JudySL \
+ JudyHS
+
+JUDY_CMN = \
+ JudyGet \
+ JudyIns \
+ JudyInsArray \
+ JudyDel \
+ JudyCascade \
+ JudyCount \
+ JudyCreateBranch \
+ JudyDecascade \
+ JudyFirst \
+ JudyFreeArray \
+ JudyInsertBranch \
+ JudyMallocIF \
+ JudyMemActive \
+ JudyMemUsed \
+ JudyNext \
+ JudyNextEmpty \
+ JudyPrev \
+ JudyPrevEmpty \
+ JudyByCountWithDefs \
+ j__udyGet
+
+JUDY_WORD = \
+ JudyLTables
+
+JUDY_BIT = \
+ Judy1Tables
+
+JUDY_SRC = \
+ $(addsuffix .n,$(JUDY_NEUTRAL)) \
+ $(addsuffix .w,$(JUDY_CMN) $(JUDY_WORD)) \
+ $(addsuffix .b,$(JUDY_CMN) $(JUDY_BIT))
+
+JUDY_OBJ = \
+ $(addsuffix .$(BITS).$(LOBX),$(JUDY_SRC))
+
+$(ILIBDIR)/libjudy.$(LIBX): $(JUDY_OBJ)
+ $(LD) --slib -o $@ $^
+
+libjudy_tag:
+ @ true
diff --git a/libs/klib/judy/j__udyGet.c b/libs/klib/judy/j__udyGet.c
new file mode 100644
index 0000000..478c0f1
--- /dev/null
+++ b/libs/klib/judy/j__udyGet.c
@@ -0,0 +1,2 @@
+#define JUDYGETINLINE 1
+#include "JudyGet.c"
diff --git a/libs/klib/ksort.c b/libs/klib/ksort.c
new file mode 100644
index 0000000..88ff088
--- /dev/null
+++ b/libs/klib/ksort.c
@@ -0,0 +1,97 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/extern.h>
+#include <klib/sort.h>
+
+
+/*--------------------------------------------------------------------------
+ * ksort
+ * qsort with a function data pointer
+ */
+
+#define TSWAP( T, a, b ) \
+ do \
+ { \
+ T tmp = * ( const T* ) ( a ); \
+ * ( T* ) ( a ) = * ( const T* ) ( b ); \
+ * ( T* ) ( b ) = tmp; \
+ } \
+ while ( 0 )
+
+#define TCMP( T, a, b ) \
+ ( ( * ( const T* ) ( a ) < * ( const T* ) ( b ) ) ? -1 : \
+ ( * ( const T* ) ( a ) > * ( const T* ) ( b ) ) )
+
+
+/* various custom ksort operations
+ * structures will generally want their own functions
+ * these fundamental types can be standardized
+ */
+LIB_EXPORT void CC ksort_int32_t ( int32_t *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size ) TSWAP ( int32_t, a, b )
+#define CMP( a, b ) \
+ ( * ( const int32_t* ) ( a ) - * ( const int32_t* ) ( b ) )
+
+ KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+}
+
+LIB_EXPORT void CC ksort_uint32_t ( uint32_t *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size ) TSWAP ( uint32_t, a, b )
+#define CMP( a, b ) TCMP ( uint32_t, a, b )
+
+ KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+}
+
+LIB_EXPORT void CC ksort_int64_t ( int64_t *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size ) TSWAP ( int64_t, a, b )
+#define CMP( a, b ) TCMP ( int64_t, a, b )
+
+ KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+}
+
+LIB_EXPORT void CC ksort_uint64_t ( uint64_t *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size ) TSWAP ( uint64_t, a, b )
+#define CMP( a, b ) TCMP ( uint64_t, a, b )
+
+ KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+}
diff --git a/libs/klib/libklib.vers b/libs/klib/libklib.vers
index 23aa839..0b1f1ed 100644
--- a/libs/klib/libklib.vers
+++ b/libs/klib/libklib.vers
@@ -1 +1 @@
-1.2.2
+1.2.13
diff --git a/libs/klib/libklib.vers.h b/libs/klib/libklib.vers.h
deleted file mode 100644
index 2689092..0000000
--- a/libs/klib/libklib.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBKLIB_VERS 0x01020002
diff --git a/libs/klib/log.c b/libs/klib/log.c
index eb8571d..28aa7ea 100644
--- a/libs/klib/log.c
+++ b/libs/klib/log.c
@@ -117,7 +117,8 @@ LIB_EXPORT const char ** CC KLogGetParamStrings ( void )
LIB_EXPORT rc_t CC KLogLevelExplain ( KLogLevel lvl, char *buffer, size_t bsize, size_t *num_writ )
{
static const char undefined[] = "undefined";
- size_t len;
+ size_t size;
+ uint32_t len;
const char *t;
/* catch unaccounted for or bad changes in log.h
@@ -138,7 +139,7 @@ LIB_EXPORT rc_t CC KLogLevelExplain ( KLogLevel lvl, char *buffer, size_t bsize,
t = logLevelParamStrings[lvl];
}
- len = strlen (t);
+ len = string_measure (t, &size);
if(len > bsize) {
if (num_writ) {
*num_writ = 0;
@@ -146,9 +147,9 @@ LIB_EXPORT rc_t CC KLogLevelExplain ( KLogLevel lvl, char *buffer, size_t bsize,
return RC ( rcRuntime, rcLog, rcLogging, rcBuffer, rcInsufficient );
}
if(num_writ) {
- *num_writ = strlen (t);
+ *num_writ = len;
}
- strncpy (buffer, t, bsize);
+ string_copy (buffer, bsize, t, len);
return 0;
}
@@ -157,7 +158,7 @@ rc_t CC KLogDefaultFormatter( void* self, KWrtHandler* writer,
size_t envc, const wrt_nvp_t envs[] )
{
rc_t rc = 0;
- size_t num_writ, nsize;
+ size_t num_writ, nsize, msize;
uint32_t mlen;
char buffer[8192], *nbuffer;
const char* msg, *rc_msg;
@@ -169,7 +170,7 @@ rc_t CC KLogDefaultFormatter( void* self, KWrtHandler* writer,
msg = wrt_nvp_find_value(envc, envs, "message");
rc_msg = wrt_nvp_find_value(envc, envs, "reason");
if( msg != NULL ) {
- const char* mend = msg + strlen(msg);
+ const char* mend = msg + string_measure(msg, &msize);
/* strip trailing newlines */
while( mend != msg && (*mend == '\n' || *mend == '\r') ) {
--mend;
@@ -338,6 +339,7 @@ rc_t logsubstituteparams ( const char* msg, uint32_t argc, const wrt_nvp_t argv[
if ( msg [ i ] == '$' && msg [ i + 1 ] == '(' )
{
const char *value;
+ size_t size;
/* find param by name */
const wrt_nvp_t *arg = wrt_nvp_find(argc, argv, &msg[ i + 2 ]);
@@ -357,7 +359,7 @@ rc_t logsubstituteparams ( const char* msg, uint32_t argc, const wrt_nvp_t argv[
/* compensate for outer loop's increment */
--sz;
/* advance past param token */
- i += strlen(arg->name) + 2;
+ i += string_measure(arg->name, &size) + 2;
assert( msg[i] == ')' );
}
}
@@ -485,11 +487,11 @@ rc_t log_print( KFmtHandler* formatter, const KLogFmtFlags flags, KWrtHandler* w
uint32_t envc = 0;
wrt_nvp_t envs[20];
- const char ebuffer[2048];
+ char ebuffer[2048];
uint32_t argc = 0;
wrt_nvp_t argv[32];
char pbuffer[4096];
- const char abuffer[4096];
+ char abuffer[4096];
KFmtWriter fmtwrt;
assert(formatter != NULL);
@@ -650,19 +652,23 @@ rc_t log_print( KFmtHandler* formatter, const KLogFmtFlags flags, KWrtHandler* w
}
if( rc != 0 ) {
/* print reason for failure */
- rc = string_printf((char*)abuffer, sizeof(abuffer), &num_writ, "log failure: %R in '%s'", rc, msg);
+ string_printf((char*)abuffer, sizeof(abuffer), &num_writ, "log failure: %R in '%s'", rc, msg);
envs[envc].name = "message";
envs[envc++].value = abuffer;
}
+
wrt_nvp_sort(envc, envs);
- rc = fmtwrt(formatter->data, writer, argc, argv, envc, envs);
- if( (rc == 0) && use_rc ) {
- KLogLastErrorCodeSet(lvl, status);
- }
- if(nbuffer != abuffer) {
- free(nbuffer);
+
+ {
+ rc_t rc2 = fmtwrt(formatter->data, writer, argc, argv, envc, envs);
+ if( (rc2 == 0) && use_rc ) {
+ KLogLastErrorCodeSet(lvl, status);
+ }
+ if(nbuffer != abuffer) {
+ free(nbuffer);
+ }
+ return rc != 0 ? rc : rc2;
}
- return rc;
}
/* LogMsg
diff --git a/libs/klib/pbstree-impl.c b/libs/klib/pbstree-impl.c
index 27d307d..c6ebf19 100644
--- a/libs/klib/pbstree-impl.c
+++ b/libs/klib/pbstree-impl.c
@@ -503,46 +503,46 @@ bool CC PBSTreeImplDoUntil8 ( const PBSTree *self, bool reverse,
end = GET32( pt -> data_size );
- data_start = & pt -> data_idx . v8 [ num_nodes ];
+ data_start = & pt -> data_idx . v8 [ num_nodes ];
- if ( ! reverse )
- {
- for ( off = pt -> data_idx . v8 [ 0 ],
- id = 1; id < num_nodes; off = end, ++ id )
- {
- end = pt -> data_idx . v8 [ id ];
- n . internal = pt;
- n . id = id;
- n . data . addr = & data_start [ off ];
- n . data . size = end - off;
- if ( ( * f ) ( & n, data ) )
- return 1;
- }
+ if ( ! reverse )
+ {
+ for ( off = pt -> data_idx . v8 [ 0 ],
+ id = 1; id < num_nodes; off = end, ++ id )
+ {
+ end = pt -> data_idx . v8 [ id ];
+ n . internal = pt;
+ n . id = id;
+ n . data . addr = & data_start [ off ];
+ n . data . size = end - off;
+ if ( ( * f ) ( & n, data ) )
+ return true;
+ }
- end = GET32( pt -> data_size );
- }
+ end = GET32( pt -> data_size );
+ }
- off = pt -> data_idx . v8 [ num_nodes - 1 ];
- n . internal = pt;
- n . id = num_nodes;
- n . data . addr = & data_start [ off ];
- n . data . size = end - off;
- if ( ( * f ) ( & n, data ) )
- return 1;
+ off = pt -> data_idx . v8 [ num_nodes - 1 ];
+ n . internal = pt;
+ n . id = num_nodes;
+ n . data . addr = & data_start [ off ];
+ n . data . size = end - off;
+ if ( ( * f ) ( & n, data ) )
+ return true;
- if ( reverse )
- {
- for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
- {
- off = pt -> data_idx . v8 [ id - 1 ];
- n . internal = pt;
- n . id = id;
- n . data . addr = & data_start [ off ];
- n . data . size = end - off;
- if ( ( * f ) ( & n, data ) )
- return 1;
- }
- }
+ if ( reverse )
+ {
+ for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
+ {
+ off = pt -> data_idx . v8 [ id - 1 ];
+ n . internal = pt;
+ n . id = id;
+ n . data . addr = & data_start [ off ];
+ n . data . size = end - off;
+ if ( ( * f ) ( & n, data ) )
+ return true;
+ }
+ }
}
return 0;
@@ -563,47 +563,47 @@ bool CC PBSTreeImplDoUntil16 ( const PBSTree *self, bool reverse,
end = GET32( pt -> data_size );
- data_start = ( const uint8_t* )
- & pt -> data_idx . v16 [ num_nodes ];
+ data_start = ( const uint8_t* )
+ & pt -> data_idx . v16 [ num_nodes ];
- if ( ! reverse )
- {
- for ( off = GET16( pt -> data_idx . v16 [ 0 ] ),
- id = 1; id < num_nodes; off = end, ++ id )
- {
- end = GET16( pt -> data_idx . v16 [ id ] );
- n . internal = pt;
- n . id = id;
- n . data . addr = & data_start [ off ];
- n . data . size = end - off;
- if ( ( * f ) ( & n, data ) )
- return 1;
- }
+ if ( ! reverse )
+ {
+ for ( off = GET16( pt -> data_idx . v16 [ 0 ] ),
+ id = 1; id < num_nodes; off = end, ++ id )
+ {
+ end = GET16( pt -> data_idx . v16 [ id ] );
+ n . internal = pt;
+ n . id = id;
+ n . data . addr = & data_start [ off ];
+ n . data . size = end - off;
+ if ( ( * f ) ( & n, data ) )
+ return true;
+ }
- end = GET32( pt -> data_size );
- }
+ end = GET32( pt -> data_size );
+ }
- off = GET16( pt -> data_idx . v16 [ num_nodes - 1 ] );
- n . internal = pt;
- n . id = num_nodes;
- n . data . addr = & data_start [ off ];
- n . data . size = end - off;
- if ( ( * f ) ( & n, data ) )
- return 1;
+ off = GET16( pt -> data_idx . v16 [ num_nodes - 1 ] );
+ n . internal = pt;
+ n . id = num_nodes;
+ n . data . addr = & data_start [ off ];
+ n . data . size = end - off;
+ if ( ( * f ) ( & n, data ) )
+ return true;
- if ( reverse )
- {
- for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
- {
- off = GET16( pt -> data_idx . v16 [ id - 1 ] );
- n . internal = pt;
- n . id = id;
- n . data . addr = & data_start [ off ];
- n . data . size = end - off;
- if ( ( * f ) ( & n, data ) )
- return 1;
- }
- }
+ if ( reverse )
+ {
+ for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
+ {
+ off = GET16( pt -> data_idx . v16 [ id - 1 ] );
+ n . internal = pt;
+ n . id = id;
+ n . data . addr = & data_start [ off ];
+ n . data . size = end - off;
+ if ( ( * f ) ( & n, data ) )
+ return true;
+ }
+ }
}
return 0;
}
@@ -623,47 +623,47 @@ bool CC PBSTreeImplDoUntil32 ( const PBSTree *self, bool reverse,
end = GET32( pt -> data_size );
- data_start = ( const uint8_t* )
- & pt -> data_idx . v32 [ num_nodes ];
+ data_start = ( const uint8_t* )
+ & pt -> data_idx . v32 [ num_nodes ];
- if ( ! reverse )
- {
- for ( off = GET32( pt -> data_idx . v32 [ 0 ] ),
- id = 1; id < num_nodes; off = end, ++ id )
- {
- end = GET32( pt -> data_idx . v32 [ id ] );
- n . internal = pt;
- n . id = id;
- n . data . addr = & data_start [ off ];
- n . data . size = end - off;
- if ( ( * f ) ( & n, data ) )
- return 1;
- }
+ if ( ! reverse )
+ {
+ for ( off = GET32( pt -> data_idx . v32 [ 0 ] ),
+ id = 1; id < num_nodes; off = end, ++ id )
+ {
+ end = GET32( pt -> data_idx . v32 [ id ] );
+ n . internal = pt;
+ n . id = id;
+ n . data . addr = & data_start [ off ];
+ n . data . size = end - off;
+ if ( ( * f ) ( & n, data ) )
+ return true;
+ }
- end = GET32( pt -> data_size );
- }
+ end = GET32( pt -> data_size );
+ }
- off = GET32( pt -> data_idx . v32 [ num_nodes - 1 ] );
- n . internal = pt;
- n . id = num_nodes;
- n . data . addr = & data_start [ off ];
- n . data . size = end - off;
- if ( ( * f ) ( & n, data ) )
- return 1;
+ off = GET32( pt -> data_idx . v32 [ num_nodes - 1 ] );
+ n . internal = pt;
+ n . id = num_nodes;
+ n . data . addr = & data_start [ off ];
+ n . data . size = end - off;
+ if ( ( * f ) ( & n, data ) )
+ return true;
- if ( reverse )
- {
- for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
- {
- off = GET32( pt -> data_idx . v32 [ id - 1 ] );
- n . internal = pt;
- n . id = id;
- n . data . addr = & data_start [ off ];
- n . data . size = end - off;
- if ( ( * f ) ( & n, data ) )
- return 1;
- }
- }
+ if ( reverse )
+ {
+ for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
+ {
+ off = GET32( pt -> data_idx . v32 [ id - 1 ] );
+ n . internal = pt;
+ n . id = id;
+ n . data . addr = & data_start [ off ];
+ n . data . size = end - off;
+ if ( ( * f ) ( & n, data ) )
+ return true;
+ }
+ }
}
return 0;
diff --git a/libs/klib/printf.c b/libs/klib/printf.c
index f1f92d5..017ab92 100644
--- a/libs/klib/printf.c
+++ b/libs/klib/printf.c
@@ -41,6 +41,58 @@
#include <stdio.h>
#include <assert.h>
+/* the number of PrintFmt, PrintArg and String
+ elements to allocate in function-local storage */
+#define LOCAL_FMT_COUNT 64
+
+
+/* for testing purposes - temporarily define this guy */
+#define STDC_COMPATIBILITY 1
+
+/***********************************
+ * OLD PRINTF CODE IS NOW INACTIVE *
+ ***********************************/
+#define USE_OLD_PRINTF 0
+
+/***********************************
+ * OUR OLD BUDDY *
+ ***********************************/
+#if WINDOWS
+#undef snprintf
+#define snprintf _snprintf
+#endif
+
+/**************************************
+ * NAMING TRICKS TO HAVE BOTH ON HAND *
+ **************************************/
+#if USE_OLD_PRINTF
+#define old_string_vprintf string_vprintf
+#define old_string_printf string_printf
+#define old_vkfprintf vkfprintf
+#define old_kfprintf kfprintf
+#else
+#define new_string_vprintf string_vprintf
+#define new_string_printf string_printf
+#define new_vkfprintf vkfprintf
+#define new_kfprintf kfprintf
+#endif
+
+/************************************
+ * BEHAVIORS SENSITIVE TO STDC MODE *
+ ************************************/
+#if STDC_COMPATIBILITY
+#define NULL_STRING_TEXT "(null)"
+#else
+#define NULL_STRING_TEXT "NULL"
+#endif
+#define DOUSE_NUM_PREFIX_IF_ZERO STDC_COMPATIBILITY
+#define KEEP_OCT_PREFIX_IF_ZERO STDC_COMPATIBILITY
+#define OCTAL_PREFIX_COUNTS_TOWARD_PRECISION STDC_COMPATIBILITY
+#define HEX_PREFIX_FOLLOWS_CASE STDC_COMPATIBILITY
+/* Present in 2.3.3 (from SLES 9.3), absent in 2.5 (from CentOS 5.6) */
+#define EMULATE_SMALLINT_EXTENSION_BUG ( STDC_COMPATIBILITY && defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 5) ) )
+#define ZERO_PAD_ONLY_NUMBERS ( !STDC_COMPATIBILITY || defined(__GLIBC__) )
+
#define USE_LIB_FLOAT 1
static
@@ -95,7 +147,7 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
char buff [ 256 ];
char use_sign, padding;
const char *hex_digits;
- uint32_t i, j, len, min_field_width, max_field_width, precision;
+ uint32_t i, j, len, digits, min_field_width, max_field_width, precision;
bool left_align, comma_separate, have_precision, byte_size, half_size, long_size;
bool alternate, trim_trailing_zeros, date_time_zone;
@@ -149,6 +201,8 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
continue;
}
+ digits = 0;
+
/* process flags */
use_sign = 0;
left_align = comma_separate = alternate = false;
@@ -225,6 +279,10 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
byte_size = half_size = long_size = date_time_zone = false;
switch ( fmt [ sidx ] )
{
+ case 't':
+ byte_size = true;
+ ++ sidx;
+ break;
case 'h':
/* this should not be necessary */
if ( fmt [ ++ sidx ] != 'h' )
@@ -264,12 +322,14 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
else
i64 = va_arg ( args, int32_t );
+#if ! STDC_COMPATIBILITY
/* detect zero */
if ( i64 == 0 )
use_sign = 0;
-
+ else
+#endif
/* detect negative */
- else if ( i64 < 0 )
+ if ( i64 < 0 )
{
use_sign = '-';
i64 = - i64;
@@ -281,20 +341,22 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
make_signed_integer:
#endif
/* convert to numeral */
- if ( comma_separate ) for ( -- i, j = 0; ; -- i )
+ if ( comma_separate ) for ( -- i, j = 0; ; -- i, ++ j )
{
- buff [ i ] = ( i64 % 10 ) + '0';
- if ( ( i64 /= 10 ) == 0 )
- break;
- if ( ++ j == 3 )
+ if ( j == 3 )
{
buff [ -- i ] = ',';
j = 0;
}
+ buff [ i ] = ( i64 % 10 ) + '0';
+ ++ digits;
+ if ( ( i64 /= 10 ) == 0 )
+ break;
}
- else for ( -- i; ; -- i )
+ else for ( -- i, digits = 0; ; -- i )
{
buff [ i ] = ( i64 % 10 ) + '0';
+ ++ digits;
if ( ( i64 /= 10 ) == 0 )
break;
}
@@ -330,10 +392,11 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
if ( didx < bsize )
dst [ didx ] = use_sign;
++ didx;
+ ++ len;
}
/* precision */
- for ( ; len < precision; ++ didx, ++ len )
+ for ( ; digits < precision; ++ didx, ++ len, ++ digits )
{
if ( didx < bsize )
dst [ didx ] = '0';
@@ -347,7 +410,7 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
}
/* padding */
- for ( len += ( use_sign != 0 ); len < min_field_width; ++ didx, ++ len )
+ for ( ; len < min_field_width; ++ didx, ++ len )
{
if ( didx < bsize )
dst [ didx ] = ' ';
@@ -356,28 +419,32 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
/* insert right-aligned */
else
{
+ /* remove sign from field width */
+ if ( use_sign != 0 && min_field_width != 0 )
+ -- min_field_width;
+
/* zero padding means issue sign first */
if ( use_sign != 0 && padding == '0' )
{
if ( didx < bsize )
dst [ didx ] = use_sign;
++ didx;
- ++ len;
+ use_sign = 0;
}
- /* precision from length */
- if ( precision < len )
- precision = len;
+ /* adjust length for precision */
+ if ( precision > digits )
+ len += precision - digits;
/* apply padding */
- for ( ; precision < min_field_width; ++ didx, -- min_field_width )
+ for ( ; len < min_field_width; ++ didx, -- min_field_width )
{
if ( didx < bsize )
dst [ didx ] = padding;
}
/* sign */
- if ( use_sign != 0 && padding != '0' )
+ if ( use_sign != 0 )
{
if ( didx < bsize )
dst [ didx ] = use_sign;
@@ -385,7 +452,7 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
}
/* precision */
- for ( ; len < precision; ++ didx, ++ len )
+ for ( ; digits < precision; ++ didx, ++ digits )
{
if ( didx < bsize )
dst [ didx ] = '0';
@@ -416,10 +483,25 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
/* no sign */
use_sign = 0;
+ i = sizeof buff - 1;
+
/* convert to numeral */
- for ( i = sizeof buff - 1; ; -- i )
+ if ( comma_separate ) for ( j = digits = 0; ; -- i, ++ j )
+ {
+ if ( j == 3 )
+ {
+ buff [ -- i ] = ',';
+ j = 0;
+ }
+ buff [ i ] = ( u64 % 10 ) + '0';
+ ++ digits;
+ if ( ( u64 /= 10 ) == 0 )
+ break;
+ }
+ else for ( digits = 0; ; -- i )
{
buff [ i ] = ( u64 % 10 ) + '0';
+ ++ digits;
if ( ( u64 /= 10 ) == 0 )
break;
}
@@ -458,10 +540,25 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
/* no sign */
use_sign = 0;
+ i = sizeof buff - 1;
+
/* convert to numeral */
- for ( i = sizeof buff - 1; ; -- i )
+ if ( comma_separate ) for ( j = digits = 0; ; -- i, ++ j )
+ {
+ if ( j == 3 )
+ {
+ buff [ -- i ] = ',';
+ j = 0;
+ }
+ buff [ i ] = hex_digits [ u64 & 15 ];
+ ++ digits;
+ if ( ( u64 >>= 4 ) == 0 )
+ break;
+ }
+ else for ( digits = 0; ; -- i )
{
buff [ i ] = hex_digits [ u64 & 15 ];
+ ++ digits;
if ( ( u64 >>= 4 ) == 0 )
break;
}
@@ -489,16 +586,36 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
/* no sign */
use_sign = 0;
+ i = sizeof buff - 1;
+
/* convert to numeral */
- for ( i = sizeof buff - 1; ; -- i )
+ if ( comma_separate ) for ( j = digits = 0; ; -- i, ++ j )
+ {
+ if ( j == 3 )
+ {
+ buff [ -- i ] = ',';
+ j = 0;
+ }
+ buff [ i ] = ( u64 & 7 ) + '0';
+ ++ digits;
+ if ( ( u64 >>= 3 ) == 0 )
+ break;
+ }
+ else for ( digits = 0; ; -- i )
{
buff [ i ] = ( u64 & 7 ) + '0';
+ ++ digits;
if ( ( u64 >>= 3 ) == 0 )
break;
}
if ( alternate )
+ {
buff [ -- i ] = '0';
+#if STDC_COMPATIBILITY
+ ++ digits;
+#endif
+ }
goto insert_integer;
@@ -517,10 +634,25 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
/* no sign */
use_sign = 0;
+ i = sizeof buff - 1;
+
/* convert to numeral */
- for ( i = sizeof buff - 1; ; -- i )
+ if ( comma_separate ) for ( j = digits = 0; ; -- i, ++ j )
+ {
+ if ( j == 3 )
+ {
+ buff [ -- i ] = ',';
+ j = 0;
+ }
+ buff [ i ] = ( u64 & 1 ) + '0';
+ ++ digits;
+ if ( ( u64 >>= 1 ) == 0 )
+ break;
+ }
+ else for ( i = sizeof buff - 1; ; -- i )
{
buff [ i ] = ( u64 & 1 ) + '0';
+ ++ digits;
if ( ( u64 >>= 1 ) == 0 )
break;
}
@@ -743,8 +875,10 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
/* sign makes no sense */
use_sign = 0;
+#if ZERO_PAD_ONLY_NUMBERS
/* padding is always with spaces */
padding = ' ';
+#endif
/* other than that, we can treat it as an integer */
goto insert_integer;
@@ -762,6 +896,10 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
if ( ! have_precision )
precision = -1;
+#if ZERO_PAD_ONLY_NUMBERS
+ /* padding is always with spaces */
+ padding = ' ';
+#endif
/* test for buffer flush */
if ( flush != NULL && didx < bsize )
{
@@ -787,7 +925,7 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
for ( ; len < min_field_width; ++ didx, ++ len )
{
if ( didx < bsize )
- dst [ didx ] = ' ';
+ dst [ didx ] = padding;
}
}
@@ -1123,13 +1261,13 @@ rc_t CC string_flush_printf ( char *dst, size_t bsize,
return rc;
}
-LIB_EXPORT rc_t CC string_vprintf ( char *dst, size_t bsize,
+LIB_EXPORT rc_t CC old_string_vprintf ( char *dst, size_t bsize,
size_t *num_writ, const char *fmt, va_list args )
{
return string_flush_vprintf ( dst, bsize, NULL, num_writ, fmt, args );
}
-LIB_EXPORT rc_t CC string_printf ( char *dst, size_t bsize, size_t *num_writ, const char *fmt, ... )
+LIB_EXPORT rc_t CC old_string_printf ( char *dst, size_t bsize, size_t *num_writ, const char *fmt, ... )
{
rc_t rc;
@@ -1143,7 +1281,7 @@ LIB_EXPORT rc_t CC string_printf ( char *dst, size_t bsize, size_t *num_writ, co
return rc;
}
-LIB_EXPORT size_t CC vkfprintf ( const KWrtHandler *out,
+LIB_EXPORT size_t CC old_vkfprintf ( const KWrtHandler *out,
size_t *num_writ, const char * fmt, va_list args )
{
rc_t rc;
@@ -1165,7 +1303,7 @@ LIB_EXPORT size_t CC vkfprintf ( const KWrtHandler *out,
return rc;
}
-LIB_EXPORT size_t CC kfprintf ( const KWrtHandler *out,
+LIB_EXPORT size_t CC old_kfprintf ( const KWrtHandler *out,
size_t *num_writ, const char * fmt, ... )
{
rc_t rc;
@@ -1173,7 +1311,2142 @@ LIB_EXPORT size_t CC kfprintf ( const KWrtHandler *out,
va_list args;
va_start ( args, fmt );
- rc = vkfprintf ( out, num_writ, fmt, args );
+ rc = old_vkfprintf ( out, num_writ, fmt, args );
+
+ va_end ( args );
+
+ return rc;
+}
+
+/****************************
+ * NEW PRINTF IS NOW ACTIVE *
+ ****************************/
+
+/* create_overflow
+ * create a buffer so large that it cannot overflow again
+ * copy in existing structures
+ * map self-referential pointers
+ */
+static
+rc_t create_overflow ( KDataBuffer *overflow, const char *fmt_str,
+ String **strp, PrintFmt **fmtp, PrintArg **argp,
+ uint32_t str_idx, uint32_t fmt_idx, uint32_t arg_idx )
+{
+ /* measure the format string and infer that
+ we can never have more format items than
+ characters in the string... */
+ size_t fmt_str_size = strlen ( fmt_str );
+
+ /* our size will create a format and argument
+ for every byte. this should be a total overkill. */
+ size_t buff_size = ( sizeof ** strp + sizeof ** fmtp + sizeof **argp ) * fmt_str_size;
+
+ /* make the buffer */
+ rc_t rc = KDataBufferMakeBytes ( overflow, buff_size );
+ if ( rc == 0 )
+ {
+ /* capture pointers to stack structures */
+ const String *str = * strp;
+ const PrintFmt *fmt = * fmtp;
+ const PrintArg *args = * argp;
+
+ /* destination pointers */
+ String *dstr = overflow -> base;
+ PrintFmt *dfmt = ( void* ) ( dstr + fmt_str_size );
+ PrintArg *dargs = ( void* ) ( dfmt + fmt_str_size );
+
+ /* copy existing data */
+ memcpy ( dstr, str, str_idx * sizeof * dstr );
+ memcpy ( dfmt, fmt, fmt_idx * sizeof * dfmt );
+ memcpy ( dargs, args, arg_idx * sizeof * dargs );
+
+ /* if there are any pointers into "str", relocate them */
+ if ( str_idx != 0 )
+ {
+ uint32_t i, j;
+ for ( i = j = 0; i < fmt_idx && j < str_idx; ++ i )
+ {
+ switch ( dfmt [ i ] . type )
+ {
+ case sptString:
+ case sptUCS2String:
+ case sptUTF32String:
+ if ( dargs [ i ] . S == & str [ j ] )
+ dargs [ i ] . S = & dstr [ j ++ ];
+ break;
+ }
+ }
+ }
+
+ /* replace pointers */
+ * strp = dstr;
+ * fmtp = dfmt;
+ * argp = dargs;
+ }
+
+ return rc;
+}
+
+
+/* parse_format_string
+ * parse format string and args into structured format
+ */
+static
+rc_t parse_format_string ( const char *fmt_str, va_list vargs,
+ String **strp, PrintFmt **fmtp, PrintArg **argp, KDataBuffer *overflow )
+{
+ rc_t rc;
+ uint32_t i, str_idx, fmt_idx, arg_idx;
+
+ String *str = * strp;
+ PrintFmt *fmt = * fmtp;
+ PrintArg *args = * argp;
+
+ /* loop over format string */
+ for ( rc = 0, i = str_idx = fmt_idx = arg_idx = 0; fmt_str [ i ] != 0; ++ i )
+ {
+ bool alternate, numeric;
+ char size_modifier, time_modifier;
+ bool has_width, has_precision;
+ bool has_index, infinite_first;
+
+ /* loop to gather literal portions */
+ uint32_t start;
+ for ( start = i; ; ++ i )
+ {
+ /* run until we hit start of substitution token
+ or until we hit end of format string */
+ if ( fmt_str [ i ] != 0 && fmt_str [ i ] != '%' )
+ continue;
+
+ /* detect a literal string */
+ if ( i != start )
+ {
+ /* expand into overflow */
+ if ( fmt_idx == LOCAL_FMT_COUNT )
+ {
+ rc = create_overflow ( overflow, fmt_str,
+ strp, fmtp, argp, str_idx, fmt_idx, arg_idx );
+ if ( rc != 0 )
+ return rc;
+
+ str = * strp;
+ fmt = * fmtp;
+ args = * argp;
+ }
+
+ /* create a text-literal format */
+ memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+ fmt [ fmt_idx ] . u . l . text = & fmt_str [ start ];
+ fmt [ fmt_idx ] . u . l . size = i - start;
+ fmt [ fmt_idx ] . fmt = spfText;
+ fmt [ fmt_idx ] . type = sptLiteral;
+
+ /* increment counter */
+ ++ fmt_idx;
+ }
+
+ /* detect escape sequence */
+ if ( fmt_str [ i ] == 0 || fmt_str [ i + 1 ] != '%' )
+ break;
+
+ /* skip over escape */
+ start = ++ i;
+ }
+
+ /* done when NUL byte is seen */
+ if ( fmt_str [ i ] == 0 )
+ break;
+
+ /* detect overflow */
+ if ( fmt_idx == LOCAL_FMT_COUNT )
+ {
+ rc = create_overflow ( overflow, fmt_str,
+ strp, fmtp, argp, str_idx, fmt_idx, arg_idx );
+ if ( rc != 0 )
+ return rc;
+
+ str = * strp;
+ fmt = * fmtp;
+ args = * argp;
+ }
+
+ /* initial format
+ * thousands_separate = false
+ * add_prefix = false
+ * force_decimal_point = false
+ * leave_trailing_zeros = false
+ * print_time = false
+ * print_date = false
+ * print_weekday = false
+ * print_timezone = false
+ * hour_24 = false
+ * sign = 0
+ * left_fill = space
+ */
+ memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+ fmt [ fmt_idx ] . left_fill = ' ';
+
+ /* scan flags */
+ alternate = false;
+ while ( 1 )
+ {
+ switch ( fmt_str [ ++ i ] )
+ {
+ /* plus and space modify application of sign
+ to signed integer and floating point conversions.
+ plus overrides space. */
+ case ' ':
+ if ( fmt [ fmt_idx ] . sign == 0 )
+ case '+':
+ fmt [ fmt_idx ] . sign = fmt_str [ i ];
+ continue;
+
+ /* dash indicates left-alignment. indicate this
+ by setting "left_fill" to NUL. */
+ case '-':
+ fmt [ fmt_idx ] . left_fill = 0;
+ continue;
+
+ /* zero indicates an alternate left-fill for
+ numeric conversions. the zero is inserted before
+ any sign character in { '+', '-' or ' ' }.
+ since "left_fill" is also used to indicate
+ alignment, only store when right aligning. */
+ case '0':
+ if ( fmt [ fmt_idx ] . left_fill != 0 )
+ fmt [ fmt_idx ] . left_fill = '0';
+ continue;
+
+ /* hash indicates that the formatter should use an
+ "alternate" approach. that approach is specific
+ to the format. */
+ case '#':
+ alternate = true;
+ continue;
+
+ /* comma ( or apostrophe outside of US ) indicates
+ that the integer portion of a numeral should use
+ a comma as a thousands separator for legibility. */
+ case ',':
+ case '\'':
+ fmt [ fmt_idx ] . thousands_separate = 1;
+ continue;
+ }
+
+ /* we've hit a non-flag character */
+ break;
+ }
+
+ /* minimum field width */
+ has_width = false;
+ if ( isdigit ( fmt_str [ i ] ) )
+ {
+ /* literal */
+ has_width = true;
+ fmt [ fmt_idx ] . u . f . min_field_width = fmt_str [ i ] - '0';
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ fmt [ fmt_idx ] . u . f . min_field_width *= 10;
+ fmt [ fmt_idx ] . u . f . min_field_width += fmt_str [ i ] - '0';
+ }
+ }
+ else if ( fmt_str [ i ] == '*' )
+ {
+ /* external - we populate the structure directly
+ rather than marking the value as external */
+ has_width = true;
+ fmt [ fmt_idx ] . u . f . min_field_width = va_arg ( vargs, uint32_t );
+ ++ i;
+ }
+
+ /* precision */
+ has_precision = false;
+ if ( fmt_str [ i ] == '.' )
+ {
+ /* a single dot implies a precision value of 0 */
+ has_precision = true;
+
+ if ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ /* a literal precision */
+ fmt [ fmt_idx ] . u . f . precision = fmt_str [ i ] - '0';
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ fmt [ fmt_idx ] . u . f . precision *= 10;
+ fmt [ fmt_idx ] . u . f . precision += fmt_str [ i ] - '0';
+ }
+ }
+ else if ( fmt_str [ i ] == '*' )
+ {
+ /* external - again populate directly */
+ fmt [ fmt_idx ] . u . f . precision = va_arg ( vargs, uint32_t );
+ ++ i;
+ }
+ else if ( fmt_str [ i ] == '-' )
+ {
+ /* eat a negative precision - treat as 0 */
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ ( void ) 0;
+ }
+ }
+
+ /* index - given when parameter is a vector */
+ has_index = infinite_first = false;
+ if ( fmt_str [ i ] == ':' )
+ {
+ bool has_start, has_len, has_end, end_is_stop;
+ has_start = has_len = has_end = end_is_stop = false;
+
+ /* parameter is taken as a vector,
+ with a default index starting at 0 */
+ has_index = true;
+
+ if ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ /* literal index */
+ fmt [ fmt_idx ] . u . f . start_idx = fmt_str [ i ] - '0';
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ fmt [ fmt_idx ] . u . f . start_idx *= 10;
+ fmt [ fmt_idx ] . u . f . start_idx += fmt_str [ i ] - '0';
+ }
+ has_start = true;
+ }
+ else switch ( fmt_str [ i ] )
+ {
+ case '*':
+ /* external index, captured directly */
+ fmt [ fmt_idx ] . u . f . start_idx = va_arg ( vargs, uint32_t );
+ ++ i;
+ has_start = true;
+ break;
+ case '$':
+ ++ i;
+ has_start = infinite_first = true;
+ break;
+ }
+
+ /* detect range */
+ switch ( fmt_str [ i ] )
+ {
+ /* given as start-stop */
+ case '-':
+ end_is_stop = true;
+
+ /* given as start/len */
+ case '/':
+
+ has_len = true;
+
+ if ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ /* literal selection length or end */
+ fmt [ fmt_idx ] . u . f . select_len = fmt_str [ i ] - '0';
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ fmt [ fmt_idx ] . u . f . select_len *= 10;
+ fmt [ fmt_idx ] . u . f . select_len += fmt_str [ i ] - '0';
+ }
+ has_end = true;
+ }
+ else switch ( fmt_str [ i ] )
+ {
+ case '*':
+ /* external selection length or end */
+ fmt [ fmt_idx ] . u . f . select_len = va_arg ( vargs, uint32_t );
+ ++ i;
+ has_end = true;
+ break;
+ case '$':
+ ++ i;
+ end_is_stop = false;
+ break;
+ case '-':
+ /* negatives are garbage */
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ ( void ) 0;
+ break;
+ default:
+ end_is_stop = false;
+ }
+ break;
+ }
+
+ /* massage values */
+ if ( infinite_first )
+ {
+ /* having an infinite first forces length of 1 */
+ fmt [ fmt_idx ] . u . f . select_len = 1;
+ }
+ else if ( has_len )
+ {
+ /* if either a number or an external value was given */
+ if ( has_end && end_is_stop )
+ {
+ /* end <= start is translated to length 1 */
+ if ( fmt [ fmt_idx ] . u . f . select_len <= fmt [ fmt_idx ] . u . f . start_idx )
+ fmt [ fmt_idx ] . u . f . select_len = 1;
+
+ /* end > start is translated to stated length */
+ else
+ fmt [ fmt_idx ] . u . f . select_len -= fmt [ fmt_idx ] . u . f . start_idx - 1;
+ }
+ }
+ else if ( has_start )
+ {
+ /* with no end specified, selection length is 1 */
+ fmt [ fmt_idx ] . u . f . select_len = 1;
+ }
+ }
+
+ /* size - one of the greatest leg-irons in the C legacy,
+ guess at the parameter size so that va_arg can extract
+ it properly. rather than using predictable parameter sizes,
+ they are fuzzy. we have ( mostly ) kept them for tradition...
+ if no modifier is given, 32-bit is assumed for integer and
+ 64-bit for floating point. */
+ size_modifier = time_modifier = 0;
+ switch ( fmt_str [ i ] )
+ {
+ /* "Tiny" modifier - like "hh" in C format */
+ case 't':
+ /* "Half" modifier - same as C format */
+ case 'h':
+ /* "Long" modifier - means 64-bit for integers, otherwise like C */
+ case 'l':
+ size_modifier = time_modifier = fmt_str [ i ++ ];
+ break;
+ /* "siZe" modifier - whatever the size of size_t is */
+ case 'z':
+ ++ i;
+ time_modifier = 'z';
+ if ( sizeof ( size_t ) == sizeof ( uint64_t ) )
+ size_modifier = 'l';
+ break;
+ }
+
+ /* output format
+ describes the formatting to apply on output
+ if precision has not been set, give it a default value */
+ numeric = false;
+ fmt [ fmt_idx ] . pointer_arg = has_index;
+ switch ( fmt_str [ i ] )
+ {
+ /* decimal signed integer */
+ case 'd':
+ case 'i':
+ fmt [ fmt_idx ] . radix = 10;
+ fmt [ fmt_idx ] . fmt = spfSignedInt;
+ numeric = true;
+ if ( ! has_precision )
+ fmt [ fmt_idx ] . u . f . precision = 1;
+ else if ( fmt [ fmt_idx ] . left_fill == '0' )
+ fmt [ fmt_idx ] . left_fill = ' ';
+ break;
+
+ /* decimal unsigned integer */
+ case 'u':
+ fmt [ fmt_idx ] . radix = 10;
+ unsigned_int:
+ fmt [ fmt_idx ] . fmt = spfUnsigned;
+ fmt [ fmt_idx ] . sign = 0;
+ numeric = true;
+ if ( ! has_precision )
+ fmt [ fmt_idx ] . u . f . precision = 1;
+ else if ( fmt [ fmt_idx ] . left_fill == '0' )
+ fmt [ fmt_idx ] . left_fill = ' ';
+ break;
+
+ /* hex unsigned integer */
+ case 'x':
+ fmt [ fmt_idx ] . add_prefix = alternate;
+ fmt [ fmt_idx ] . radix = 16;
+ goto unsigned_int;
+
+ /* upper-case hex unsigned integer or pointer value */
+ case 'X':
+ case 'p':
+ fmt [ fmt_idx ] . upper_case_num = 1;
+ fmt [ fmt_idx ] . add_prefix = alternate;
+ fmt [ fmt_idx ] . radix = 16;
+ goto unsigned_int;
+
+ /* octal unsigned integer */
+ case 'o':
+ fmt [ fmt_idx ] . add_prefix = alternate;
+ fmt [ fmt_idx ] . radix = 8;
+ goto unsigned_int;
+
+ /* binary unsigned integer */
+ case 'b':
+ fmt [ fmt_idx ] . add_prefix = alternate;
+ fmt [ fmt_idx ] . radix = 2;
+ goto unsigned_int;
+
+ /* decimal signed floating point */
+ case 'f':
+ fmt [ fmt_idx ] . fmt = spfStdFloat;
+ fmt_float:
+ fmt [ fmt_idx ] . radix = 10;
+ fmt [ fmt_idx ] . force_decimal_point = alternate;
+ numeric = true;
+ if ( ! has_precision )
+ fmt [ fmt_idx ] . u . f . precision = 6;
+ break;
+
+ /* scientific notation floating point */
+ case 'e':
+ fmt [ fmt_idx ] . fmt = spfSciFloat;
+ goto fmt_float;
+
+ /* "general" floating point */
+ case 'g':
+ fmt [ fmt_idx ] . leave_trailing_zeros = alternate;
+ fmt [ fmt_idx ] . fmt = spfGenFloat;
+ goto fmt_float;
+
+ /* character data */
+ case 's':
+ case 'S':
+ fmt [ fmt_idx ] . pointer_arg = 1;
+ if ( ! has_precision )
+ /* no break */
+ case 'c':
+ fmt [ fmt_idx ] . u . f . precision = -1;
+ fmt [ fmt_idx ] . fmt = spfText;
+ break;
+
+ /* KSymbol* */
+ case 'N':
+ fmt [ fmt_idx ] . pointer_arg = 1;
+ fmt [ fmt_idx ] . fmt = spfSymbol;
+ break;
+
+ /* ver_t */
+ case 'V':
+ size_modifier = ( sizeof ( ver_t ) == sizeof ( uint32_t ) ) ? 0 : 'l';
+ fmt [ fmt_idx ] . min_vers_components = ! has_precision;
+ fmt [ fmt_idx ] . fmt = spfVersion;
+ break;
+
+ /* rc_t */
+ case 'R':
+ size_modifier = ( sizeof ( rc_t ) == sizeof ( uint32_t ) ) ? 0 : 'l';
+ fmt [ fmt_idx ] . explain_rc = alternate;
+ fmt [ fmt_idx ] . fmt = spfRC;
+ break;
+
+ /* KTime* */
+ case 'T':
+ fmt [ fmt_idx ] . pointer_arg = 1;
+ fmt [ fmt_idx ] . fmt = spfTime;
+ numeric = true;
+
+ /* here, the "size" modifier is interpreted
+ as a selector for the output format. perhaps
+ it could have been a precision thing, but... */
+ switch ( time_modifier )
+ {
+ /* by itself, 'T' implies print the time */
+ case 0:
+ fmt [ fmt_idx ] . print_time = 1;
+ break;
+
+ /* "half" 'T' means the date */
+ case 'h':
+ fmt [ fmt_idx ] . print_date = 1;
+ break;
+
+ /* "zone" 'T' means long date with time zone */
+ case 'z':
+ fmt [ fmt_idx ] . print_timezone = 1;
+ /* no break */
+
+ /* "long" 'T' means date and time */
+ case 'l':
+ fmt [ fmt_idx ] . print_time = 1;
+ fmt [ fmt_idx ] . print_date = 1;
+ fmt [ fmt_idx ] . print_weekday = 1;
+ break;
+ }
+ break;
+
+ /* OS-specific error code:
+ int on Unix-like systems
+ DWORD on Windows */
+ case '!':
+ size_modifier = 0;
+ fmt [ fmt_idx ] . fmt = spfOSErr;
+ break;
+
+#if SUPPORT_PERCENT_N
+ /* awful out parameter giving characters printed so far */
+ case 'n':
+ fmt [ fmt_idx ] . fmt = spfNone;
+ break;
+#endif
+ default:
+ return RC ( rcText, rcString, rcFormatting, rcFormat, rcUnrecognized );
+ }
+
+#if ZERO_PAD_ONLY_NUMBERS
+ /* handle zero padding for non-numeric cases */
+ if ( ! numeric && fmt [ fmt_idx ] . left_fill == '0' )
+ fmt [ fmt_idx ] . left_fill = ' ';
+#endif
+
+ /* argument format */
+ if ( has_index )
+ {
+ /* all arguments MUST be vectors. */
+ args [ arg_idx ] . p = va_arg ( vargs, const void* );
+
+ /* discriminate on vector type */
+ switch ( fmt_str [ i ] )
+ {
+ /* signed integer */
+ case 'd':
+ case 'i':
+ case '!':
+
+ if ( infinite_first )
+ return RC ( rcText, rcString, rcFormatting, rcIndex, rcIncorrect );
+
+ /* select from 4 possibilities */
+ switch ( size_modifier )
+ {
+ case 0:
+ fmt [ fmt_idx ] . type = sptSignedInt32Vect;
+ break;
+ case 'l':
+ fmt [ fmt_idx ] . type = sptSignedInt64Vect;
+ break;
+ case 'h':
+ fmt [ fmt_idx ] . type = sptSignedInt16Vect;
+ break;
+ case 't':
+ fmt [ fmt_idx ] . type = sptSignedInt8Vect;
+ break;
+ }
+ break;
+
+ /* pointer value - cast to 32 or 64-bit unsigned integer */
+ case 'p':
+ size_modifier = ( sizeof ( void* ) == sizeof ( uint64_t ) ) ? 'l' : 0;
+ /* no break */
+
+ /* unsigned integer */
+ case 'u':
+ case 'x':
+ case 'X':
+ case 'o':
+ case 'b':
+ case 'V':
+ case 'R':
+
+ if ( infinite_first )
+ return RC ( rcText, rcString, rcFormatting, rcIndex, rcIncorrect );
+
+ switch ( size_modifier )
+ {
+ case 0:
+ fmt [ fmt_idx ] . type = sptUnsignedInt32Vect;
+ break;
+ case 'l':
+ fmt [ fmt_idx ] . type = sptUnsignedInt64Vect;
+ break;
+ case 'h':
+ fmt [ fmt_idx ] . type = sptUnsignedInt16Vect;
+ break;
+ case 't':
+ fmt [ fmt_idx ] . type = sptUnsignedInt8Vect;
+ break;
+ }
+ break;
+
+ /* floating point */
+ case 'e':
+ case 'f':
+ case 'g':
+
+ if ( infinite_first )
+ return RC ( rcText, rcString, rcFormatting, rcIndex, rcIncorrect );
+
+ switch ( size_modifier )
+ {
+ case 0:
+ fmt [ fmt_idx ] . type = sptFloat64Vect;
+ break;
+ case 'h':
+ fmt [ fmt_idx ] . type = sptFloat32Vect;
+ break;
+ case 'l':
+ fmt [ fmt_idx ] . type = sptFloatLongVect;
+ break;
+ }
+ break;
+
+ /* character array */
+ case 'c':
+
+ /* can't determine last */
+ if ( infinite_first )
+ return RC ( rcText, rcString, rcFormatting, rcIndex, rcIncorrect );
+
+ /* length must be bounded */
+ if ( fmt [ fmt_idx ] . u . f . select_len == 0 )
+ fmt [ fmt_idx ] . u . f . select_len = 1;
+
+ fmt [ fmt_idx ] . type = sptNulTermString;
+ break;
+
+ case 's':
+#if STDC_COMPATIBILITY
+ if ( args [ arg_idx ] . p == NULL ) {
+ args [ arg_idx ] . p = NULL_STRING_TEXT;
+ }
+#endif
+ /* NUL-terminated string issues */
+ if ( args [ arg_idx ] . p != NULL && infinite_first )
+ {
+ const char *cp = args [ arg_idx ] . p;
+
+ /* handle selection of last element */
+ size_t len = strlen ( cp );
+ if ( len != 0 )
+ {
+ fmt [ fmt_idx ] . u . f . start_idx = len - 1;
+ fmt [ fmt_idx ] . u . f . select_len = 1;
+ }
+ }
+
+ fmt [ fmt_idx ] . type = sptNulTermString;
+ break;
+
+ /* character string */
+ case 'S':
+
+ /* if the index starts with last element */
+ if ( args [ arg_idx ] . p != NULL && infinite_first )
+ {
+ const String *s = args [ arg_idx ] . p;
+ if ( s -> size != 0 )
+ {
+ fmt [ fmt_idx ] . u . f . start_idx = s -> size - 1;
+ fmt [ fmt_idx ] . u . f . select_len = 1;
+ }
+ }
+
+ fmt [ fmt_idx ] . type = sptString;
+ break;
+
+ /* no other type supports vectors */
+ default:
+ return RC ( rcText, rcString, rcFormatting, rcFormat, rcIncorrect );
+ }
+ }
+ else
+ {
+ /* scalar or string arguments */
+ switch ( fmt_str [ i ] )
+ {
+ /* signed integer */
+ case 'd':
+ case 'i':
+ case '!':
+ fmt [ fmt_idx ] . type = sptSignedInt;
+ switch ( size_modifier )
+ {
+ case 0:
+ args [ arg_idx ] . d = va_arg ( vargs, int32_t );
+ break;
+ case 'l':
+ args [ arg_idx ] . d = va_arg ( vargs, int64_t );
+ break;
+#if EMULATE_SMALLINT_EXTENSION_BUG
+ case 'h':
+ case 't':
+ args [ arg_idx ] . d = va_arg ( vargs, int );
+ break;
+#else
+ case 'h':
+ args [ arg_idx ] . d = ( int16_t ) va_arg ( vargs, int );
+ break;
+ case 't':
+ args [ arg_idx ] . d = ( int8_t ) va_arg ( vargs, int );
+ break;
+#endif
+ }
+ break;
+
+ /* pointer cast to uint64_t */
+ case 'p':
+ size_modifier = ( sizeof ( void* ) == sizeof ( uint64_t ) ) ? 'l' : 0;
+ /* no break */
+
+ /* unsigned integer */
+ case 'u':
+ case 'x':
+ case 'X':
+ case 'o':
+ case 'b':
+ case 'V':
+ case 'R':
+ fmt [ fmt_idx ] . type = sptUnsignedInt;
+ switch ( size_modifier )
+ {
+ case 0:
+ args [ arg_idx ] . u = va_arg ( vargs, uint32_t );
+ break;
+ case 'l':
+ args [ arg_idx ] . u = va_arg ( vargs, uint64_t );
+ break;
+ case 'h':
+ args [ arg_idx ] . u = ( uint16_t ) va_arg ( vargs, unsigned int );
+ break;
+ case 't':
+ args [ arg_idx ] . u = ( uint8_t ) va_arg ( vargs, unsigned int );
+ break;
+ }
+ break;
+
+ /* floating point */
+ case 'e':
+ case 'f':
+ case 'g':
+ fmt [ fmt_idx ] . type = sptFloat;
+ switch ( size_modifier )
+ {
+ case 0:
+ case 'h':
+ args [ arg_idx ] . f = va_arg ( vargs, double );
+ break;
+ case 'l':
+ args [ arg_idx ] . f = ( double ) va_arg ( vargs, long double );
+ break;
+ default:
+ return RC ( rcText, rcString, rcFormatting, rcFormat, rcIncorrect );
+ }
+ break;
+
+ /* single character */
+ case 'c':
+ fmt [ fmt_idx ] . type = sptChar;
+ args [ arg_idx ] . c = va_arg ( vargs, uint32_t );
+ break;
+
+ /* NUL-terminated string */
+ case 's':
+ fmt [ fmt_idx ] . type = sptNulTermString;
+ args [ arg_idx ] . s = va_arg ( vargs, const char* );
+ break;
+
+ /* String object */
+ case 'S':
+ fmt [ fmt_idx ] . type = sptString;
+ args [ arg_idx ] . S = va_arg ( vargs, const String* );
+ break;
+
+ /* KSymbol or KTime object */
+ case 'N':
+ case 'T':
+ fmt [ fmt_idx ] . type = sptPointer;
+ args [ arg_idx ] . p = va_arg ( vargs, const void* );
+ break;
+
+#if SUPPORT_PERCENT_N
+ case 'n':
+ fmt [ fmt_idx ] . type = sptBytesPrinted;
+ args [ arg_idx ] . n = va_arg ( vargs, uint32_t* );
+ break;
+#endif
+ }
+ }
+
+ /* account for format and argument */
+ ++ fmt_idx;
+ ++ arg_idx;
+ }
+
+ /* record final fmt */
+ if ( rc == 0 )
+ {
+ if ( fmt_idx == LOCAL_FMT_COUNT )
+ {
+ rc = create_overflow ( overflow, fmt_str,
+ strp, fmtp, argp, str_idx, fmt_idx, arg_idx );
+ if ( rc != 0 )
+ return rc;
+
+ fmt = * fmtp;
+ }
+
+ memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+ }
+
+ return rc;
+}
+
+
+/* KBufferedWrtHandler
+ * combines buffer and possibly NULL handler
+ * handles flushing, counting, etc.
+ */
+typedef struct KBufferedWrtHandler KBufferedWrtHandler;
+struct KBufferedWrtHandler
+{
+ const KWrtHandler *handler;
+ char *buff;
+ size_t bsize;
+ size_t cur;
+ size_t flushed;
+ bool overflow;
+};
+
+
+/* flush_buffer
+ * writes data to handler
+ * or NUL-terminates buffer
+ */
+static
+rc_t flush_buffer ( KBufferedWrtHandler *out )
+{
+ const KWrtHandler *flush = out -> handler;
+ if ( out -> handler != NULL )
+ {
+ rc_t rc = 0;
+ size_t num_writ, flushed;
+
+/* assert ( out -> cur != 0 ); */
+
+ for ( flushed = 0; flushed < out -> cur; flushed += num_writ )
+ {
+ rc = ( * flush -> writer ) ( flush -> data,
+ & out -> buff [ flushed ], out -> cur - flushed, & num_writ );
+ if ( rc != 0 )
+ break;
+ if ( num_writ == 0 )
+ break;
+ }
+
+ if ( flushed == 0 )
+ return rc;
+
+ out -> flushed += flushed;
+ if ( flushed < out -> cur )
+ memmove ( out -> buff, & out -> buff [ flushed ], out -> cur - flushed );
+ out -> cur -= flushed;
+
+ return 0;
+ }
+
+ /* NB - header file states that space for NUL byte
+ is REQUIRED, so this test will declare overflow
+ whenever there is not space for the NUL termination */
+ if ( out -> cur >= out -> bsize )
+ out -> overflow = true;
+ else
+ out -> buff [ out -> cur ] = 0;
+
+ return 0;
+}
+
+static
+rc_t write_buffer ( KBufferedWrtHandler *out, const char *data, size_t bytes )
+{
+ size_t total, num_writ;
+ for ( total = 0; total < bytes; out -> cur += num_writ, total += num_writ )
+ {
+ if ( ! out -> overflow && out -> cur == out -> bsize )
+ {
+ rc_t rc = flush_buffer ( out );
+ if ( rc != 0 )
+ return rc;
+ }
+ if ( out -> overflow )
+ num_writ = bytes - total;
+ else
+ {
+ num_writ = out -> bsize - out -> cur;
+ if ( total + num_writ > bytes )
+ num_writ = bytes - total;
+ memcpy ( & out -> buff [ out -> cur ], & data [ total ], num_writ );
+ }
+ }
+ return 0;
+}
+
+
+/* print_padding
+ * issue padding characters
+ */
+static
+rc_t print_padding ( KBufferedWrtHandler *out, size_t count, char pad_char )
+{
+ size_t total, num_writ;
+ for ( total = 0; total < count; out -> cur += num_writ, total += num_writ )
+ {
+ if ( ! out -> overflow && out -> cur == out -> bsize )
+ {
+ rc_t rc = flush_buffer ( out );
+ if ( rc != 0 )
+ return rc;
+ }
+ if ( out -> overflow )
+ num_writ = count - total;
+ else
+ {
+ uint32_t i = out -> cur;
+ uint32_t lim = out -> cur + count - total;
+ if ( lim > out -> bsize )
+ lim = out -> bsize;
+ for ( num_writ = lim - i; i < lim; ++ i )
+ out -> buff [ i ] = pad_char;
+ }
+ }
+ return 0;
+}
+
+/* print_nul_term_string
+ */
+static
+rc_t print_nul_term_string ( KBufferedWrtHandler *out, String *S, size_t precision )
+{
+ size_t total, num_writ;
+ const char *s = S -> addr;
+
+ for ( S -> len = 0, total = 0; total < precision && s [ 0 ] != 0;
+ s += num_writ, out -> cur += num_writ, total += num_writ )
+ {
+ char *buff;
+ size_t lim;
+
+ if ( ! out -> overflow && out -> cur == out -> bsize )
+ {
+ rc_t rc = flush_buffer ( out );
+ if ( rc != 0 )
+ return rc;
+ }
+
+ if ( out -> overflow )
+ {
+ lim = precision - total;
+
+ for ( num_writ = 0; num_writ < lim; ++ num_writ )
+ {
+ if ( s [ num_writ ] == 0 )
+ break;
+
+ /* count characters as well as bytes */
+ if ( ( s [ num_writ ] & 0xC0 ) != 0x80 )
+ ++ S -> len;
+ }
+ }
+ else
+ {
+ buff = out -> buff + out -> cur;
+ lim = out -> bsize - out -> cur;
+
+ if ( total + lim > precision )
+ lim = precision - total;
+
+ for ( num_writ = 0; num_writ < lim; ++ num_writ )
+ {
+ if ( s [ num_writ ] == 0 )
+ break;
+
+ /* count characters as well as bytes */
+ if ( ( ( buff [ num_writ ] = s [ num_writ ] ) & 0xC0 ) != 0x80 )
+ ++ S -> len;
+ }
+ }
+ }
+
+ S -> size = total;
+
+ return 0;
+}
+
+/* print_string
+ */
+static
+rc_t print_string ( KBufferedWrtHandler *out, const String *s, size_t precision )
+{
+ /* TBD - this is only correct for ASCII */
+ if ( s -> size < precision )
+ precision = s -> size;
+
+ return write_buffer ( out, s -> addr, precision );
+}
+
+static
+rc_t print_symbol ( KBufferedWrtHandler *out, const KSymbol *sym )
+{
+ if ( sym -> dad != NULL )
+ {
+ rc_t rc = print_symbol ( out, sym -> dad );
+ if ( rc == 0 )
+ rc = print_padding ( out, 1, ':' );
+ if ( rc != 0 )
+ return rc;
+ }
+ return print_string ( out, & sym -> name, sym -> name . size );
+}
+
+static
+rc_t print_literal ( KBufferedWrtHandler *out, const char *text, size_t size )
+{
+ return write_buffer ( out, text, size );
+}
+
+
+/* structured_print_engine
+ * prints into a buffer
+ * if an output handler is provided, the buffer will be flushed to it as needed
+ * returns the number of BYTES written, but not the number of characters.
+ */
+static const char* alnum_set [ 2 ] [ 2 ] =
+{
+ /* "normal" alpha-numeric ordering for rendering numerals */
+ {
+ "0123456789abcdefghijklmnopqrstuvwxyz",
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ },
+ /* "abnormal" alpha-numeric ordering used by SFF format */
+ {
+ "abcdefghijklmnopqrstuvwxyz0123456789",
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+ }
+};
+
+static
+rc_t structured_print_engine ( KBufferedWrtHandler *out,
+ const PrintFmt *fmt, const PrintArg *args )
+{
+ rc_t rc;
+ uint32_t fmt_idx, arg_idx;
+
+ /* declare these here to stifle the compiler
+ they should most naturally be declared within the loop,
+ but since they are conditionally initialized by the switch,
+ the compiler warns they may be used before initialization.
+ rather than quiet the complaint within the loop, they have
+ been manually hoisted outside and initialized once. */
+ uint32_t i = 0;
+ int64_t i64 = 0;
+ uint64_t u64 = 0;
+ double f64 = 0;
+ const void *p = NULL;
+
+ /* most of the arguments are going to be pulled into "S" */
+ String S;
+ StringInit ( & S, NULL, 0, 0 );
+
+ /* mark no overflow */
+ out -> overflow = false;
+
+ /* loop across all format structures */
+ for ( rc = 0, out -> cur = out -> flushed = 0, fmt_idx = arg_idx = 0;
+ fmt [ fmt_idx ] . type != sptTerm; ++ fmt_idx )
+ {
+ /* copy entry - we're going to modify it */
+ PrintFmt f = fmt [ fmt_idx ];
+
+ /* ENGINE PARAMETERS */
+
+ /* padding to left side of field */
+ uint32_t left_pad;
+
+ /* sign character if not NUL */
+ char sign_char;
+
+ /* prefix for unsigned int */
+ char prefix [ 4 ];
+ uint32_t prefix_len;
+
+ /* true if performing comma separation */
+ bool comma_sep;
+
+ /* zero-fill, from either integer precision or min-field-width */
+ uint32_t zero_fill;
+
+ /* length of integer portion of numeral, prefix contribution */
+ uint32_t int_len, prefix_contribution;
+
+ /* string index, from index and text precision */
+ bool text_index;
+ uint64_t text_start, text_lim;
+
+ /* END ENGINE PARAMETERS */
+
+ int cvt_len;
+ uint32_t c, *n;
+
+ const KTime *tm;
+ const KSymbol *N;
+
+ char text [ 1024 ];
+ uint32_t dst_len;
+
+ char ffmt [ 16 ];
+ const char *to_numeral, *cfmt;
+
+ /* detect literal */
+ if ( f . type == sptLiteral )
+ {
+ rc = print_literal ( out, f . u . l . text, f . u . l . size );
+ if ( rc != 0 )
+ break;
+
+ continue;
+ }
+
+ /* gather external parameters */
+ if ( f . ext_field_width )
+ f . u . f . min_field_width = args [ arg_idx ++ ] . u;
+ if ( f . ext_precision )
+ f . u . f . precision = args [ arg_idx ++ ] . u;
+ if ( f . ext_start_index )
+ f . u . f . start_idx = args [ arg_idx ++ ] . u;
+ if ( f . ext_select_len )
+ f . u . f . select_len = args [ arg_idx ++ ] . u;
+ else if ( f . ext_stop_index )
+ {
+ f . u . f . select_len = args [ arg_idx ++ ] . u;
+ if ( f . u . f . select_len <= f . u . f . start_idx )
+ f . u . f . select_len = 1;
+ else
+ f . u . f . select_len -= f . u . f . start_idx - 1;
+ }
+
+ /* early initialization */
+ text_index = false;
+ text_start = 0;
+ text_lim = -1;
+
+ /* vector parameters may have NULL pointers under certain
+ circumstances, e.g. pre-calculated format with out-of-bounds
+ index coordinates, when this is detectable. */
+ if ( f . pointer_arg && args [ arg_idx ] . p == NULL )
+ {
+ if ( f . fmt == spfText )
+ {
+ CONST_STRING ( & S, NULL_STRING_TEXT );
+ f . type_cast = 0;
+ f . type = sptString;
+ if ( f . u . f . precision < S . len )
+#if STDC_COMPATIBILITY && !defined(__GLIBC__)
+ S . size = S . len = f . u . f . precision;
+#else
+ StringInit ( & S, "", 0, 0 );
+#endif
+ }
+ else
+ {
+ memset ( & f, 0, sizeof f );
+ f . u . f . precision = 1;
+ f . radix = 10;
+ f . fmt = spfUnsigned;
+ f . type = sptUnsignedInt;
+ u64 = 0;
+ }
+ }
+
+ /* get source */
+ else switch ( f . type )
+ {
+ /* scalar or vector signed integer */
+ case sptSignedInt:
+ i64 = args [ arg_idx ] . d;
+ break;
+ case sptSignedInt8Vect:
+ i64 = args [ arg_idx ] . d8 [ f . u . f . start_idx ];
+ break;
+ case sptSignedInt16Vect:
+ i64 = args [ arg_idx ] . d16 [ f . u . f . start_idx ];
+ break;
+ case sptSignedInt32Vect:
+ i64 = args [ arg_idx ] . d32 [ f . u . f . start_idx ];
+ break;
+ case sptSignedInt64Vect:
+ i64 = args [ arg_idx ] . d64 [ f . u . f . start_idx ];
+ break;
+
+ /* scalar or vector unsigned integer */
+ case sptUnsignedInt:
+ u64 = args [ arg_idx ] . u;
+ break;
+ case sptUnsignedInt8Vect:
+ u64 = args [ arg_idx ] . u8 [ f . u . f . start_idx ];
+ break;
+ case sptUnsignedInt16Vect:
+ u64 = args [ arg_idx ] . u16 [ f . u . f . start_idx ];
+ break;
+ case sptUnsignedInt32Vect:
+ u64 = args [ arg_idx ] . u32 [ f . u . f . start_idx ];
+ break;
+ case sptUnsignedInt64Vect:
+ u64 = args [ arg_idx ] . u64 [ f . u . f . start_idx ];
+ break;
+
+ /* scalar or vector float */
+ case sptFloat:
+ f64 = args [ arg_idx ] . f;
+ break;
+ case sptFloat32Vect:
+ f64 = args [ arg_idx ] . f32 [ f . u . f . start_idx ];
+ break;
+ case sptFloat64Vect:
+ f64 = args [ arg_idx ] . f64 [ f . u . f . start_idx ];
+ break;
+ case sptFloatLongVect:
+ f64 = ( double ) args [ arg_idx ] . flong [ f . u . f . start_idx ];
+ break;
+
+ /* utf-8 character */
+ case sptChar:
+ c = args [ arg_idx ] . c;
+ cvt_len = utf32_utf8 ( text, & text [ sizeof text ], c );
+ if ( cvt_len < 0 )
+ {
+ text [ 0 ] = '?';
+ cvt_len = 1;
+ }
+ StringInit ( & S, text, cvt_len, 1 );
+ break;
+
+ /* NUL-terminated string */
+ case sptNulTermString:
+
+ /* special initialization to flag size/length unknown */
+ StringInit ( & S, args [ arg_idx ] . s, 0, -1 );
+
+ /* IF THE STRING IS INDEXED OR MAY NEED LEFT ALIGNMENT */
+ if ( f . u . f . start_idx != 0 || f . u . f . select_len != 0 ||
+ ( f . u . f . min_field_width != 0 && f . left_fill ) )
+ {
+ /* precision limits upper bounds
+ if the index range is more restrictive than precision,
+ take this as precision for text case */
+ if ( f . u . f . select_len != 0 && f . u . f . select_len < f . u . f . precision )
+ f . u . f . precision = f . u . f . select_len;
+
+ /* scan to start location */
+ for ( S . len = 0; S . len < f . u . f . start_idx; ++ S . size )
+ {
+ /* if end of NUL-terminated string is reached before start,
+ then create EMPTY string */
+ if ( S . addr [ S . size ] == 0 )
+ {
+ f . u . f . start_idx = 0;
+ f . u . f . select_len = 0;
+ f . u . f . precision = 0;
+ break;
+ }
+ /* walk across utf-8 multi-byte character */
+ if ( ( S . addr [ S . size ] & 0xC0 ) != 0x80 )
+ ++ S . len;
+ }
+
+ /* create sub-string
+ limit scan to required precision for efficiency */
+ for ( S . addr += S . size, S . size = 0, S . len = 0;
+ S . len < f . u . f . precision; ++ S . size )
+ {
+ if ( S . addr [ S . size ] == 0 )
+ break;
+ if ( ( S . addr [ S . size ] & 0xC0 ) != 0x80 )
+ ++ S . len;
+ }
+ }
+
+ /* precision limits text length */
+ if ( text_lim > f . u . f . precision )
+ text_lim = f . u . f . precision;
+
+ break;
+
+ /* String object */
+ case sptString:
+
+ /* the String may be indexed */
+ if ( f . u . f . start_idx != 0 || f . u . f . select_len != 0 )
+ {
+ text_index = true;
+ text_start = f . u . f . start_idx;
+ if ( f . u . f . select_len != 0 )
+ text_lim = f . u . f . select_len;
+ }
+
+ /* precision limits text length */
+ if ( text_lim > f . u . f . precision )
+ text_lim = f . u . f . precision;
+
+ S = * args [ arg_idx ] . S;
+ break;
+
+ /* UCS-2 or UTF-32 String object */
+ case sptUCS2String:
+ case sptUTF32String:
+ return RC ( rcText, rcString, rcConverting, rcType, rcUnsupported );
+
+ /* an object pointer */
+ case sptPointer:
+ p = args [ arg_idx ] . p;
+ break;
+
+ case sptRowId:
+ i64 = args [ arg_idx ] . d;
+ break;
+ case sptRowLen:
+ u64 = args [ arg_idx ] . u;
+ break;
+
+#if SUPPORT_PERCENT_N
+ case sptBytesPrinted:
+ n = args [ arg_idx ] . n;
+ if ( n != NULL )
+ * n = out -> cur + out -> flushed;
+ ++ arg_idx;
+ continue;
+#endif
+ default:
+ return RC ( rcText, rcString, rcConverting, rcType, rcUnrecognized );
+ }
+
+ if ( f . type_cast ) switch ( f . type )
+ {
+ case sptSignedInt:
+ case sptSignedInt8Vect:
+ case sptSignedInt16Vect:
+ case sptSignedInt32Vect:
+ case sptSignedInt64Vect:
+ f64 = i64;
+ break;
+
+ case sptUnsignedInt:
+ case sptUnsignedInt8Vect:
+ case sptUnsignedInt16Vect:
+ case sptUnsignedInt32Vect:
+ case sptUnsignedInt64Vect:
+ f64 = u64;
+ break;
+
+ case sptFloat:
+ case sptFloat32Vect:
+ case sptFloat64Vect:
+ case sptFloatLongVect:
+ i64 = f64;
+ break;
+
+ case sptChar:
+ case sptNulTermString:
+ case sptString:
+ break;
+
+ /* UCS-2 or UTF-32 String object */
+ case sptUCS2String:
+ case sptUTF32String:
+ case sptPointer:
+ return RC ( rcText, rcString, rcConverting, rcType, rcUnsupported );
+
+ case sptRowId:
+ f64 = i64;
+ break;
+ case sptRowLen:
+ f64 = u64;
+ break;
+
+#if SUPPORT_PERCENT_N
+ case sptBytesPrinted:
+ break;
+#endif
+ default:
+ return RC ( rcText, rcString, rcConverting, rcType, rcUnrecognized );
+ }
+
+ /* advance arg count */
+ ++ arg_idx;
+
+ /* initialize engine params */
+ sign_char = 0;
+ comma_sep = false;
+ left_pad = prefix_len = prefix_contribution = zero_fill = 0;
+
+ /* format */
+ switch ( f . fmt )
+ {
+ case spfNone:
+ case spfText:
+ break;
+
+ case spfSignedInt:
+ if ( i64 < 0 )
+ {
+ sign_char = '-';
+ u64 = - i64;
+ }
+ else
+ {
+ sign_char = f . sign;
+ u64 = i64;
+ }
+ f . add_prefix = 0;
+ /* no break */
+ case spfUnsigned:
+ to_numeral = alnum_set [ f . reverse_alnum ] [ f . upper_case_num ];
+
+ if ( f . radix > 36 )
+ f . radix = 10;
+
+ i = sizeof text;
+#if _DEBUGGING
+ text [ -- i ] = 0;
+#endif
+ /* record if we are comma separating below */
+ comma_sep = f . thousands_separate;
+
+#if DOUSE_NUM_PREFIX_IF_ZERO
+ if ( u64 == 0 && f . add_prefix )
+ {
+#if KEEP_OCT_PREFIX_IF_ZERO
+ if ( f . u . f . precision == 0 && f . radix == 8 )
+ f . u . f . precision = 1;
+#endif
+ f . add_prefix = 0;
+ }
+#endif
+ /* special case for value 0 and precision 0 */
+ if ( u64 != 0 || f . u . f . precision != 0 )
+ {
+ /* convert numeral */
+ do
+ text [ -- i ] = to_numeral [ u64 % f . radix ];
+ while ( ( u64 /= f . radix ) != 0 );
+
+ /* add prefix to unsigned numeral */
+ if ( f . add_prefix )
+ {
+ switch ( f . radix )
+ {
+ case 2:
+ memcpy ( prefix, "0b", prefix_len = 2 );
+ break;
+ case 8:
+ memcpy ( prefix, "0", prefix_len = prefix_contribution = 1 );
+#if OCTAL_PREFIX_COUNTS_TOWARD_PRECISION
+ if ( f . add_prefix && f . u . f . precision != 0 )
+ -- f . u . f . precision;
+#endif
+ break;
+ case 16:
+#if HEX_PREFIX_FOLLOWS_CASE
+ if ( to_numeral [ 10 ] == 'A' )
+ memcpy ( prefix, "0X", prefix_len = 2 );
+ else
+#endif
+ memcpy ( prefix, "0x", prefix_len = 2 );
+ break;
+ }
+ }
+ }
+
+ /* determine length in characters, also size in bytes */
+#if _DEBUGGING
+ int_len = sizeof text - i - 1;
+#else
+ int_len = sizeof text - i;
+#endif
+ /* create text string */
+ StringInit ( & S, & text [ i ], int_len, int_len );
+
+ /* zero-fill amount */
+ if ( f . u . f . precision > ( uint64_t ) int_len )
+ zero_fill = ( uint32_t ) ( f . u . f . precision - ( uint64_t ) int_len );
+ else if ( f . left_fill == '0' )
+ {
+ /* the known characters associated with integer */
+ dst_len = int_len + prefix_len + ( sign_char != 0 );
+ if ( comma_sep && int_len != 0 )
+ dst_len += ( int_len + prefix_contribution - 1 ) / 3;
+ if ( ( uint64_t ) dst_len < f . u . f . min_field_width )
+ {
+ /* determine the numeric width, including zero padding */
+ dst_len = ( uint32_t ) f . u . f . min_field_width -
+ prefix_len + prefix_contribution - ( sign_char != 0 );
+ if ( comma_sep && int_len != 0 )
+ {
+ /* desired numeric-only portion of field is "dst_len"
+ it will be extended not only by some number of '0's,
+ but will be sprinkled with commas.
+
+ if "x" were our number of numerals, then:
+ x + ( x - 1 ) / 3 = dst_len
+ with allowances for integer math. solving for x:
+ x = ( 3 * dst_len + 3 ) / 4
+
+ for example: given int_len = 1, value = 0:
+ dst_len = 1 : x = 1
+ dst_len = 2 : x = 2
+ dst_len = 3 : x = 3
+ dst_len = 4 : x = 3 [ requires special compensation ]
+ dst_len = 5 : x = 4
+ dst_len = 6 : x = 5
+ dst_len = 7 : x = 6
+ dst_len = 8 : x = 6 [ requires special compensation ]
+ . . .
+ dst_len = 19 : x = 15
+ dst_len = 20 : x = 15
+ dst_len = 21 : x = 16
+ dst_len = 22 : x = 17
+ */
+
+ /* apply compensation for impossible width */
+ if ( ( dst_len & 3 ) == 0 )
+ ++ left_pad;
+
+ /* dst_len now becomes the number of numerals */
+ dst_len = ( dst_len * 3 + 3 ) >> 2;
+ }
+
+ /* number of zeros to add */
+ zero_fill = dst_len - int_len;
+ prefix_len -= prefix_contribution;
+ }
+ }
+
+ break;
+
+ /* TEMPORARY - cheat by calling through to runtime sprintf
+ this needs to be implemented to handle thousands separation */
+ case spfStdFloat:
+ c = 'f';
+ fmt_float:
+ sign_char = f . sign;
+ if ( f64 < 0 )
+ {
+ sign_char = '-';
+ f64 = - f64;
+ }
+
+ ffmt [ i = 0 ] = '%';
+ if ( f . force_decimal_point )
+ ffmt [ ++ i ] = '#';
+ if ( f . u . f . precision > 20 )
+ f . u . f . precision = 20;
+ sprintf ( & ffmt [ ++ i ], ".%u%c"
+ , ( uint32_t ) f . u . f . precision
+ , ( char ) c );
+ cvt_len = snprintf ( text, sizeof text, ffmt, f64 );
+ assert ( cvt_len >= 0 && ( size_t ) cvt_len < sizeof text );
+ StringInit ( & S, text, cvt_len, cvt_len );
+
+ /* record if we are comma separating below and capture length of integer portion */
+ int_len = 0;
+ comma_sep = f . thousands_separate;
+ /* if ( comma_sep ) */
+ {
+ for ( ; isdigit ( text [ int_len ] ); ++ int_len )
+ ( void ) 0;
+ }
+
+ /* zero-fill amount */
+ if ( f . left_fill == '0' )
+ {
+ /* the known characters associated with numeral */
+ dst_len = cvt_len + ( sign_char != 0 );
+ if ( comma_sep && int_len != 0 )
+ dst_len += ( int_len - 1 ) / 3;
+ if ( ( uint64_t ) dst_len < f . u . f . min_field_width )
+ {
+ /* determine the integer width, including zero padding */
+ dst_len = ( uint32_t ) f . u . f . min_field_width -
+ cvt_len + int_len - ( sign_char != 0 );
+ if ( comma_sep && int_len != 0 )
+ {
+ /* SEE COMMENTS IN INTEGER SECTION */
+
+ /* apply compensation for impossible width */
+ if ( ( dst_len & 3 ) == 0 )
+ ++ left_pad;
+
+ /* dst_len now becomes the number of numerals */
+ dst_len = ( dst_len * 3 + 3 ) >> 2;
+ }
+
+ /* number of zeros to add */
+ zero_fill = dst_len - int_len;
+ }
+ }
+ break;
+
+ case spfGenFloat:
+ c = 'g';
+ goto fmt_float;
+
+ case spfSciFloat:
+ c = 'e';
+ goto fmt_float;
+
+ /* version */
+ case spfVersion:
+
+ if ( f . min_vers_components )
+ {
+ if ( ( u64 & 0xFFFF ) != 0 )
+ f . u . f . precision = 3;
+ else if ( ( u64 & 0xFF0000 ) != 0 )
+ f . u . f . precision = 2;
+ else
+ f . u . f . precision = 1;
+ }
+
+ switch ( f . u . f . precision )
+ {
+ case 0:
+ cfmt = "";
+ break;
+ case 1:
+ cfmt = "%u";
+ break;
+ case 2:
+ cfmt = "%u.%u";
+ break;
+ default:
+ cfmt = "%u.%u.%u";
+ }
+
+ dst_len = sprintf ( text, cfmt
+ , VersionGetMajor ( ( uint32_t ) u64 )
+ , VersionGetMinor ( ( uint32_t ) u64 )
+ , VersionGetRelease ( ( uint32_t ) u64 )
+ );
+ StringInit ( & S, & text [ i ], dst_len, dst_len );
+ f . u . f . precision = dst_len;
+ break;
+
+ case spfSymbol:
+
+ /* calculate total size of symbol */
+ for ( N = p, S = N -> name, N = N -> dad; N != NULL; N = N -> dad )
+ {
+ S . len += N -> name . len + 1;
+ S . size += N -> name . size + 1;
+ }
+
+ /* mark need to recheck format */
+ S . addr = NULL;
+ break;
+
+
+ case spfTime:
+
+ tm = p;
+
+ dst_len = 0;
+ if ( f . print_date )
+ {
+ static char const *months [ 12 ] =
+ { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+ if ( f . print_weekday )
+ {
+ static char const *weekdays [ 7 ] =
+ { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+ dst_len = sprintf ( text, "%s %s %u %u"
+ , weekdays [ tm -> weekday ]
+ , months [ tm -> month ]
+ , tm -> day + 1
+ , tm -> year
+ );
+ }
+ else
+ {
+ dst_len = sprintf ( text, "%s %u %u"
+ , months [ tm -> month ]
+ , tm -> day + 1
+ , tm -> year
+ );
+ }
+ }
+
+ if ( f . print_time )
+ {
+ if ( dst_len != 0 )
+ text [ dst_len ++ ] = ' ';
+
+ if ( f . hour_24 )
+ {
+ dst_len += sprintf ( & text [ dst_len ]
+ , f . left_fill == '0' ? "%02u:%02u:%02u" : "%u:%02u:%02u"
+ , tm -> hour
+ , tm -> minute
+ , tm -> second
+ );
+ }
+ else
+ {
+ dst_len += sprintf ( & text [ dst_len ]
+ , f . left_fill == '0' ? "%02u:%02u:%02u %cM" : "%u:%02u:%02u %cM"
+ , ( tm -> hour + 11 ) % 12 + 1
+ , tm -> minute
+ , tm -> second
+ , ( tm -> hour < 12 ) ? 'A' : 'P'
+ );
+ }
+
+ if ( f . print_timezone )
+ {
+ dst_len += sprintf ( & text [ dst_len ]
+ , " %+02d"
+ , tm -> tzoff / 60
+ );
+ }
+ }
+
+ StringInit ( & S, text, dst_len, dst_len );
+ break;
+
+ case spfRC:
+ dst_len = KWrtFmt_rc_t ( text, sizeof text, f . explain_rc ? "#" : "", ( rc_t ) u64 );
+ StringInit ( & S, text, dst_len, dst_len );
+ break;
+
+ case spfOSErr:
+ dst_len = KWrtFmt_error_code ( text, sizeof text, ( int ) i64 );
+ StringInit ( & S, text, dst_len, dst_len );
+ break;
+
+ default:
+ return RC ( rcText, rcString, rcConverting, rcFormat, rcUnrecognized );
+ }
+
+ /* at this point, we have text in "S".
+ if the text pointer is NULL, it will need to be further processed.
+ if the text size is 0 but the length is not, then we may need to measure string.
+ */
+
+ /* apply index limitation */
+ if ( text_index )
+ {
+ assert ( S . addr != NULL );
+ assert ( S . size != 0 || S . len == 0 );
+ if ( StringSubstr ( & S, & S, text_start, text_lim ) == NULL )
+ StringInit ( & S, "", 0, 0 );
+ }
+
+ /* determine overall width of substitution so far */
+ dst_len = left_pad + ( sign_char != 0 ) + prefix_len + zero_fill + S . len;
+
+ /* if there are comma insertions, get those, too */
+ if ( comma_sep && ( int_len != 0 || zero_fill != 0 ) )
+ dst_len += ( int_len + zero_fill - 1 ) / 3;
+
+ /* calculate remaining left padding */
+ if ( f . left_fill != 0 && f . u . f . min_field_width > dst_len )
+ {
+ assert ( S . size != 0 || S . len == 0 );
+ left_pad += f . u . f . min_field_width - dst_len;
+ dst_len = ( uint32_t ) f . u . f . min_field_width;
+ }
+
+ /* left padding */
+ if ( left_pad != 0 )
+ {
+ rc = print_padding ( out, left_pad, f . left_fill );
+ if ( rc != 0 )
+ return rc;
+ }
+
+ /* output sign or prefix */
+ if ( sign_char != 0 )
+ {
+ rc = print_padding ( out, 1, sign_char );
+ if ( rc != 0 )
+ return rc;
+ }
+ else if ( prefix_len != 0 )
+ {
+ rc = write_buffer ( out, prefix, prefix_len );
+ if ( rc != 0 )
+ return rc;
+ }
+
+ /* output comma-separated numeral */
+ if ( comma_sep && ( zero_fill != 0 || int_len != 0 ) )
+ {
+ uint32_t pos = zero_fill + int_len;
+ uint32_t chunk = ( pos - 1 ) % 3 + 1;
+
+ for ( i = 0, pos -= chunk; chunk > 0; -- chunk )
+ {
+ if ( zero_fill != 0 )
+ {
+ rc = print_padding ( out, 1, '0' );
+ -- zero_fill;
+ }
+ else
+ {
+ rc = print_padding ( out, 1, S . addr [ i ] );
+ ++ i;
+ }
+ if ( rc != 0 )
+ return rc;
+ }
+
+ assert ( pos % 3 == 0 );
+ for ( pos /= 3; pos != 0; -- pos )
+ {
+ rc = print_padding ( out, 1, ',' );
+ if ( rc != 0 )
+ return rc;
+
+ if ( zero_fill != 0 )
+ {
+ if ( zero_fill >= 3 )
+ {
+ rc = print_padding ( out, 3, '0' );
+ zero_fill -= 3;
+ }
+ else
+ {
+ rc = print_padding ( out, zero_fill, '0' );
+ if ( rc == 0 )
+ rc = write_buffer ( out, S . addr, 3 - zero_fill );
+ i += 3 - zero_fill;
+ zero_fill = 0;
+ }
+ }
+ else
+ {
+ rc = write_buffer ( out, & S . addr [ i ], 3 );
+ i += 3;
+ }
+
+ if ( rc != 0 )
+ return rc;
+ }
+
+ rc = write_buffer ( out, & S . addr [ i ], S . len - i );
+ if ( rc != 0 )
+ return rc;
+ }
+
+ /* output numeral with zero fill */
+ else if ( zero_fill != 0 )
+ {
+ rc = print_padding ( out, zero_fill, '0' );
+ if ( rc == 0 )
+ rc = print_string ( out, & S, text_lim );
+ }
+
+ /* output NUL-terminated string */
+ else if ( S . size == 0 && S . len != 0 )
+ {
+ assert ( f . left_fill == 0 || f . u . f . min_field_width == 0 );
+ rc = print_nul_term_string ( out, & S, text_lim );
+ dst_len = S . len;
+ }
+
+ /* output KSymbol */
+ else if ( S . addr == NULL )
+ {
+ rc = print_symbol ( out, p );
+ }
+
+ /* output anything else in a String */
+ else
+ {
+ rc = print_string ( out, & S, text_lim );
+ }
+
+ /* recover from error */
+ if ( rc != 0 )
+ return rc;
+
+ /* apply right padding */
+ if ( f . u . f . min_field_width > dst_len )
+ {
+ rc = print_padding ( out, f . u . f . min_field_width - dst_len, ' ' );
+ if ( rc != 0 )
+ return rc;
+ }
+ }
+
+ rc = flush_buffer ( out );
+
+ if ( rc == 0 && out -> overflow )
+ rc = RC ( rcText, rcString, rcConverting, rcBuffer, rcInsufficient );
+
+ return rc;
+}
+
+
+/* structured_printf
+ * uses constant format descriptors and argument block
+ * prints to "out" handler
+ */
+LIB_EXPORT rc_t CC structured_printf ( const KWrtHandler *handler,
+ size_t *num_writ, const PrintFmt *fmt, const PrintArg *args )
+{
+ if ( handler != NULL )
+ {
+ rc_t rc;
+ char buff [ 4096 ];
+
+ KBufferedWrtHandler out;
+ out . handler = handler;
+ out . buff = buff;
+ out . bsize = sizeof buff;
+
+ rc = structured_print_engine ( & out, fmt, args );
+
+ if ( num_writ != NULL )
+ * num_writ = out . cur + out . flushed;
+
+ return rc;
+ }
+
+ if ( num_writ != NULL )
+ * num_writ = 0;
+
+ return RC ( rcRuntime, rcString, rcConverting, rcFile, rcNull );
+}
+
+
+/* structured_sprintf
+ * uses constant format descriptors and argument block
+ * prints to UTF-8 character buffer "dst"
+ */
+LIB_EXPORT rc_t CC structured_sprintf ( char *dst, size_t bsize,
+ size_t *num_writ, const PrintFmt *fmt, const PrintArg *args )
+{
+ if ( dst != NULL || bsize == 0 )
+ {
+ rc_t rc;
+
+ KBufferedWrtHandler out;
+ out . handler = NULL;
+ out . buff = dst;
+ out . bsize = bsize;
+
+ rc = structured_print_engine ( & out, fmt, args );
+
+ if ( num_writ != NULL )
+ * num_writ = out . cur + out . flushed;
+
+ return rc;
+ }
+
+ if ( num_writ != NULL )
+ * num_writ = 0;
+
+ return RC ( rcRuntime, rcString, rcConverting, rcBuffer, rcNull );
+}
+
+
+/* string_printf
+ * provides a facility similar to snprintf
+ *
+ * "dst" [ OUT ] and "bsize" [ IN ] - output buffer for string
+ * will be NUL-terminated if possible
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - returns the number of non-NUL bytes
+ * written to "dst" or the required "bsize" to complete successfully,
+ * not including the NUL termination.
+ *
+ * "fmt" [ IN ] and "args" [ IN, OPTIONAL ] - data to write
+ *
+ * returns 0 if all bytes were successfully written and a NUL-byte was
+ * written into the buffer.
+ *
+ * returns rcBuffer, rcInsufficient if the buffer was too small. in this
+ * case, it is possible that the only missing byte would be the NUL
+ * termination, and the output string may still be usable since "num_writ"
+ * indicates the actual number of text bytes.
+ */
+LIB_EXPORT rc_t CC new_string_vprintf ( char *dst, size_t bsize,
+ size_t *num_writ, const char *fmt_str, va_list vargs )
+{
+ rc_t rc;
+
+ String str [ 64 ], * strp = str;
+ PrintFmt fmt [ 64 ], * fmtp = fmt;
+ PrintArg args [ 64 ], * argp = args;
+
+ KDataBuffer overflow;
+
+ size_t dummy;
+ if ( num_writ == NULL )
+ num_writ = & dummy;
+
+ * num_writ = 0;
+
+ rc = parse_format_string ( fmt_str, vargs,
+ & strp, & fmtp, & argp, & overflow );
+
+ if ( rc == 0 )
+ rc = structured_sprintf ( dst, bsize, num_writ, fmtp, argp );
+
+ if ( strp != str )
+ KDataBufferWhack ( & overflow );
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC new_string_printf ( char *dst, size_t bsize,
+ size_t *num_writ, const char *fmt, ... )
+{
+ rc_t rc;
+
+ va_list args;
+ va_start ( args, fmt );
+
+ rc = new_string_vprintf ( dst, bsize, num_writ, fmt, args );
+
+ va_end ( args );
+
+ return rc;
+}
+
+LIB_EXPORT size_t CC new_vkfprintf ( const KWrtHandler *out,
+ size_t *num_writ, const char *fmt_str, va_list vargs )
+{
+ rc_t rc;
+
+ String str [ 64 ], * strp = str;
+ PrintFmt fmt [ 64 ], * fmtp = fmt;
+ PrintArg args [ 64 ], * argp = args;
+
+ KDataBuffer overflow;
+
+ size_t dummy;
+ if ( num_writ == NULL )
+ num_writ = & dummy;
+
+ * num_writ = 0;
+
+ rc = parse_format_string ( fmt_str, vargs,
+ & strp, & fmtp, & argp, & overflow );
+
+ if ( rc == 0 )
+ rc = structured_printf ( out, num_writ, fmtp, argp );
+
+ if ( strp != str )
+ KDataBufferWhack ( & overflow );
+
+ return rc;
+}
+
+LIB_EXPORT size_t CC new_kfprintf ( const KWrtHandler *out,
+ size_t *num_writ, const char *fmt, ... )
+{
+ rc_t rc;
+
+ va_list args;
+ va_start ( args, fmt );
+
+ rc = new_vkfprintf ( out, num_writ, fmt, args );
va_end ( args );
diff --git a/libs/klib/qsort.c b/libs/klib/qsort.c
index d00d0b6..2945818 100644
--- a/libs/klib/qsort.c
+++ b/libs/klib/qsort.c
@@ -122,7 +122,8 @@ LIB_EXPORT void CC ksort ( void *pbase, size_t total_elems, size_t size,
const size_t max_thresh = MAX_THRESH * size;
- if (total_elems == 0)
+ /* NEW - NCBI ... avoid sorting a single element */
+ if (total_elems < 2)
/* Avoid lossage with unsigned arithmetic below. */
return;
@@ -251,6 +252,36 @@ LIB_EXPORT void CC ksort ( void *pbase, size_t total_elems, size_t size,
/* Insertion sort, running from left-hand-side up to right-hand-side. */
+#if 1
+ /* NEW - NCBI */
+ tmp_ptr = base_ptr + size;
+ for ( run_ptr = base_ptr + size + size; run_ptr <= end_ptr; tmp_ptr = run_ptr, run_ptr += size )
+ {
+ for ( ; tmp_ptr >= base_ptr; tmp_ptr -= size )
+ {
+ if ( ( * cmp ) ( run_ptr, tmp_ptr, data ) >= 0 )
+ break;
+ }
+
+ tmp_ptr += size;
+ if ( tmp_ptr != run_ptr )
+ {
+ char *trav;
+
+ trav = run_ptr + size;
+ while (--trav >= run_ptr)
+ {
+ char c = *trav;
+ char *hi, *lo;
+
+ for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo)
+ *hi = *lo;
+ *hi = c;
+ }
+ }
+ }
+
+#else
run_ptr = base_ptr + size;
while ((run_ptr += size) <= end_ptr)
{
@@ -275,5 +306,6 @@ LIB_EXPORT void CC ksort ( void *pbase, size_t total_elems, size_t size,
}
}
}
+#endif
}
}
diff --git a/libs/klib/refcount.c b/libs/klib/refcount.c
index e6632f6..55590d9 100644
--- a/libs/klib/refcount.c
+++ b/libs/klib/refcount.c
@@ -37,7 +37,6 @@
#include <klib/refcount.h>
#include <klib/log.h>
#include <atomic32.h>
-#include <fmtdef.h>
#include <limits.h>
#include <stdlib.h>
diff --git a/libs/klib/report.c b/libs/klib/report.c
new file mode 100644
index 0000000..94d6078
--- /dev/null
+++ b/libs/klib/report.c
@@ -0,0 +1,816 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/extern.h> /* MUST BE FIRST */
+
+#include <kapp/args.h> /* OPTION_REPORT */
+
+#include <kfs/directory.h> /* KDirectoryNativeDir */
+
+#include <klib/report.h> /* ReportInit */
+#include <klib/namelist.h> /* KNamelistRelease */
+#include <klib/time.h> /* KTime */
+#include <klib/text.h> /* string_printf */
+#include <klib/printf.h> /* string_printf */
+#include <klib/log.h> /* LOGERR */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/rc.h>
+#include <klib/klib-priv.h>
+#include <atomic.h> /* atomic_test_and_set_ptr */
+
+#include <stdarg.h> /* va_start */
+#include <stdio.h> /* sprintf */
+#include <stdlib.h> /* malloc */
+#include <string.h> /* memset */
+#include <limits.h> /* PATH_MAX */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+static
+rc_t XMLLogger_Encode(const char* src, char *dst,
+ size_t dst_sz, size_t *num_writ)
+{
+ rc_t rc = 0;
+ if( src == NULL || dst == NULL || num_writ == NULL ) {
+ rc = RC(rcApp, rcArgv, rcParsing, rcParam, rcNull);
+ } else {
+ *num_writ = 0;
+ do {
+ size_t bytes;
+ const char* p;
+ switch(*src) {
+ case '\'':
+ bytes = 6;
+ p = "'";
+ break;
+ case '"':
+ bytes = 6;
+ p = """;
+ break;
+ case '&':
+ bytes = 5;
+ p = "&";
+ break;
+ case '<':
+ bytes = 4;
+ p = "<";
+ break;
+ case '>':
+ bytes = 4;
+ p = ">";
+ break;
+ default:
+ bytes = 1;
+ p = src;
+ break;
+ }
+ if( (*num_writ + bytes) > dst_sz ) {
+ rc = RC(rcApp, rcLog, rcEncoding, rcBuffer, rcInsufficient);
+ break;
+ } else {
+ memcpy(dst, p, bytes);
+ *num_writ = *num_writ + bytes;
+ dst += bytes;
+ }
+ } while(*src++ != '\0');
+ *num_writ = *num_writ - 1;
+ }
+ return rc;
+}
+
+typedef rc_t (CC ReportObj)(const ReportFuncs *f, uint32_t indent,
+ const char *path, bool *wasDbOrTableSet);
+typedef rc_t (CC ReportSoftware)(const ReportFuncs *f, uint32_t indent,
+ const char *argv_0, const char *date, ver_t tool_ver);
+typedef rc_t (CC Whack )(void);
+typedef struct Report {
+ rc_t ( CC * report_redirect ) ( KWrtHandler* handler,
+ const char* filename, bool* to_file, bool finalize );
+ rc_t ( CC * report_cwd ) ( const ReportFuncs *f, uint32_t indent );
+ rc_t ( CC * report_config ) ( const ReportFuncs *f, uint32_t indent );
+ ReportObj *report_vdb;
+ ReportSoftware *report_software;
+ Whack *whack_vdb;
+ char* volatile object; /* path: to free */
+ const char* date;
+ char** argv;
+ int argc;
+ KTime_t start;
+ ver_t tool_ver;
+ bool hasZombies;
+ bool silence;
+} Report;
+
+static rc_t ReportReplaceObjectPtr(Report* self, const char* path) {
+ char *copy, *prev_ptr, *cur_ptr;
+
+ assert(self);
+
+ copy = string_dup_measure(path, NULL);
+ if (copy == NULL)
+ return RC(rcExe, rcMemory, rcAllocating, rcMemory, rcExhausted);
+
+ cur_ptr = self -> object;
+ do
+ {
+ prev_ptr = cur_ptr;
+ cur_ptr = atomic_test_and_set_ptr ( ( void* volatile* ) & self -> object, copy, prev_ptr );
+ }
+ while ( cur_ptr != prev_ptr );
+
+ if ( cur_ptr != NULL )
+ free ( cur_ptr );
+
+ return 0;
+}
+
+static rc_t ReportFreeObject(Report* self) {
+ rc_t rc = 0;
+ char *prev_ptr, *cur_ptr;
+
+ assert(self);
+
+ cur_ptr = self -> object;
+ do
+ {
+ prev_ptr = cur_ptr;
+ cur_ptr = atomic_test_and_set_ptr ( ( void* volatile* ) & self -> object, NULL, prev_ptr );
+ }
+ while ( cur_ptr != prev_ptr );
+
+ if ( cur_ptr != NULL )
+ free(cur_ptr);
+
+ return rc;
+}
+
+static Report * volatile report_singleton;
+
+static rc_t ReportGet(Report** self)
+{
+ if ( report_singleton == NULL )
+ return RC ( rcRuntime, rcStorage, rcAccessing, rcSelf, rcNull );
+
+ * self = ( Report* ) report_singleton;
+ return 0;
+}
+static rc_t ReportRelease(void)
+{
+ rc_t rc = 0;
+ Report *prev_report, *cur_report;
+
+ cur_report = report_singleton;
+ do
+ {
+ prev_report = cur_report;
+ cur_report = atomic_test_and_set_ptr ( ( void* volatile* ) & report_singleton, NULL, prev_report );
+ }
+ while ( cur_report != prev_report );
+
+ if ( cur_report != NULL )
+ {
+
+ /* cleanup */
+ ReportFreeObject( cur_report );
+ if ( cur_report -> whack_vdb != NULL )
+ rc = ( * cur_report -> whack_vdb ) ();
+
+ if ( cur_report -> argv != NULL )
+ {
+ int i;
+ for ( i = 0; i < cur_report -> argc; ++ i )
+ free ( cur_report -> argv [ i ] );
+ free ( cur_report -> argv );
+ cur_report -> argv = NULL;
+ }
+
+ memset ( cur_report, 0, sizeof * cur_report );
+ }
+
+ return rc;
+}
+
+static void reportOpen1(uint32_t indent, const char* name) {
+ OUTMSG(("%*c%s>", indent + 1, '<', name));
+}
+
+static rc_t reportData1(const char* data) {
+ rc_t rc = 0;
+
+ char dummy[PATH_MAX * 2 + 1] = "";
+ const char* p = data;
+
+ assert(data);
+
+ if (data[0] == 0) {
+ return rc;
+ }
+
+ if (strpbrk(data, "'\"&<>")) {
+ size_t num_writ = 0;
+ rc = XMLLogger_Encode(data, dummy, sizeof dummy, &num_writ);
+ if (rc == 0)
+ { p = dummy; }
+ }
+
+ OUTMSG(("%s", p));
+
+ return rc;
+}
+
+static void reportClose1(const char* name) { OUTMSG(("</%s>\n", name)); }
+
+static rc_t reportImpl(int indent, bool open, bool close, bool eol,
+ const char* name, const char* data, int count, va_list args)
+{
+ rc_t rc = 0;
+ int i = 0;
+
+ if (count < 0) {
+ eol = false;
+ count = -count;
+ }
+
+ OUTMSG(("%*c", eol ? ( indent + 1 ) : 1, '<'));
+ OUTMSG(("%s%s", ( ! open && close ) ? "/" : "", name));
+
+ for (i = 0; i < count; ++i) {
+ const char* name = va_arg(args, const char*);
+ int format = va_arg(args, int);
+ union {
+ const char* s;
+ int i;
+ int64_t i64;
+ KTime* t;
+ rc_t rc;
+ const uint8_t* digest;
+ uint64_t u64;
+ ver_t vers;
+ } u;
+ OUTMSG((" %s=\"", name));
+ u.i64 = 0;
+ switch(format) {
+ case 'M':
+ u.digest = va_arg(args, const uint8_t*);
+ {
+ int i = 0;
+ for (i = 0; i < 16; ++i)
+ { OUTMSG(("%02x", *(u.digest + i))); }
+ }
+ break;
+ case 'l':
+ u.i64 = va_arg(args, int64_t);
+ OUTMSG(("%ld", u.i64));
+ break;
+ case 'u':
+ u.u64 = va_arg(args, uint64_t);
+ OUTMSG(("%lu", u.u64));
+ break;
+ case 'R':
+ u.rc = va_arg(args, rc_t);
+ OUTMSG(("%R", u.rc));
+ break;
+ case 'T':
+ u.t = va_arg(args, KTime*);
+ OUTMSG(("%lT", u.t));
+ break;
+ case 's':
+ u.s = va_arg(args, const char*);
+ OUTMSG(("%s", u.s));
+ break;
+ case 'V':
+ u.vers = va_arg(args, ver_t);
+ OUTMSG(("%V", u.vers));
+ break;
+ case 'd':
+ default:
+ u.i = va_arg(args, int);
+ OUTMSG(("%d", u.i));
+ break;
+ }
+ OUTMSG(("\""));
+ }
+
+ if (data) {
+ OUTMSG((">"));
+ rc = reportData1(data);
+ if (close)
+ { OUTMSG(("</%s", name)); }
+ }
+ else if (open && close)
+ { OUTMSG(("/")); }
+
+ OUTMSG((">"));
+ if (eol)
+ { OUTMSG(("\n")); }
+
+ return rc;
+}
+
+static void CC report(uint32_t indent, const char* name, uint32_t count, ...) {
+ va_list args;
+ va_start(args, count);
+ reportImpl(indent, true, true, true, name, NULL, count, args);
+ va_end(args);
+}
+
+static
+void CC reportData(uint32_t indent, const char* name, const char* data, uint32_t count, ...)
+{
+ va_list args;
+ va_start(args, count);
+ reportImpl(indent, true, true, true, name, data, count, args);
+ va_end(args);
+}
+
+static void CC reportOpen(uint32_t indent, const char* name, uint32_t count, ...) {
+ va_list args;
+ va_start(args, count);
+ reportImpl(indent, true, false, true, name, NULL, count, args);
+ va_end(args);
+}
+
+static void CC reportClose(uint32_t indent, const char* name)
+{ reportImpl(indent, false, true, true, name, NULL, 0, NULL); }
+
+static void CC reportError(uint32_t indent, rc_t rc, const char* function) {
+ report(indent, "Error", 2,
+ "rc" , 'R', rc,
+ "function", 's', function);
+}
+
+static void CC reportErrorStrImpl(uint32_t indent, rc_t rc,
+ const char* function, const char* name, const char* val, bool eol)
+{
+ int sign = eol ? 1 : -1;
+ if (rc || function) {
+ report(indent, "Error", sign * 3,
+ "rc", 'R', rc,
+ "function", 's', function,
+ name, 's', val);
+ }
+ else {
+ report(indent, "Error", sign,
+ name, 's', val);
+ }
+}
+
+static void CC reportErrorStr(uint32_t indent, rc_t rc, const char* function,
+ const char* name, const char* val)
+{ reportErrorStrImpl(indent, rc, function, name, val, true); }
+
+static void CC reportErrorStrInt(uint32_t indent, rc_t rc, const char* function,
+ const char* names, const char* vals, const char* namei, uint32_t vali)
+{
+ report(indent, "Error", 4,
+ "rc" , 'd', rc,
+ "function", 's', function,
+ names , 's', vals,
+ namei , 'd', vali);
+}
+
+static void CC reportError3Str(uint32_t indent, rc_t rc, const char* function,
+ const char* name, const char* v1, const char* v2, const char* v3,
+ bool eol)
+{
+ char* buffer = malloc(strlen(v1) + strlen(v2) + strlen(v3) + 1);
+ if (buffer) {
+ sprintf(buffer, "%s%s%s", v1, v2, v3);
+ reportErrorStrImpl(indent, rc, function, name, buffer, eol);
+ free(buffer);
+ }
+}
+
+static ReportFuncs report_funcs =
+{
+ report,
+ reportData,
+ reportData1,
+ reportOpen,
+ reportOpen1,
+ reportClose,
+ reportClose1,
+ reportError,
+ reportErrorStr,
+ reportErrorStrImpl,
+ reportErrorStrInt,
+ reportError3Str
+};
+
+static rc_t ReportRun(int indent, rc_t rc_in) {
+ rc_t rc = 0;
+
+ const char tag[] = "Run";
+
+ Report* self = NULL;
+ ReportGet(&self);
+ if (self == NULL) {
+ return rc;
+ }
+
+ reportOpen(indent, tag, 0);
+
+ {
+ KTime kt;
+ const char tag[] = "Date";
+ reportOpen(indent + 1, tag, 0);
+ KTimeLocal(&kt, self->start);
+ report(indent + 2, "Start", 1, "value", 'T', &kt);
+ KTimeLocal(&kt, KTimeStamp());
+ report(indent + 2, "End" , 1, "value", 'T', &kt);
+ reportClose(indent + 1, tag);
+ }
+
+ {
+ const char* name = "HOME";
+ const char* val = getenv(name);
+ if (val == NULL) {
+ name = "USERPROFILE";
+ val = getenv(name);
+ }
+ if (val == NULL)
+ { name = val = "not found"; }
+ report(indent + 1, "Home", 2, "name", 's', name, "value", 's', val);
+ }
+
+ if ( self -> report_cwd != NULL )
+ rc = ( * self -> report_cwd ) ( & report_funcs, indent + 1 );
+
+ {
+ const char tag[] = "CommandLine";
+ int i = 0;
+ reportOpen(indent + 1, tag, 1, "argc", 'd', self->argc);
+ for (i = 0; i < self->argc; ++i) {
+ if (self->argv && self->argv[i]) {
+ report(indent + 2, "Arg", 2, "index", 'd', i,
+ "value", 's', self->argv[i]);
+ }
+ }
+ reportClose(indent + 1, tag);
+ }
+
+ report(indent + 1, "Result", 1, "rc", 'R', rc_in);
+
+ reportClose(indent, tag);
+
+ return rc;
+}
+
+
+/* Silence
+ * tell report to be silent at exit
+ * useful especially in response to ^C
+ */
+LIB_EXPORT void CC ReportSilence ( void )
+{
+ Report* self = NULL;
+ ReportGet(&self);
+ if ( self != NULL )
+ self -> silence = true;
+}
+
+static rc_t reportToFileSet(const Report* self,
+ KWrtHandler* old_handler, const char* name, bool* to_file)
+{
+ rc_t rc = 0;
+ assert(self && to_file);
+ if (self->report_redirect) {
+ rc = (*self->report_redirect)(old_handler, name, to_file, false);
+ }
+ return rc;
+}
+
+static rc_t reportToStdErrSet(const Report* self, KWrtHandler* old_handler) {
+ rc_t rc = 0;
+ assert(self);
+ if (self->report_redirect) {
+ rc = (*self->report_redirect)(old_handler, NULL, NULL, false);
+ }
+ return rc;
+}
+
+/* Finalize:
+ * If (rc_in != 0) then report environment information.
+ * Then clean itself.
+ */
+LIB_EXPORT rc_t CC ReportFinalize(rc_t rc_in) {
+ rc_t rc = 0;
+
+ const char* report_arg = NULL;
+
+ bool force = rc_in != 0;
+
+ Report* self = NULL;
+ ReportGet(&self);
+
+ if (self == NULL) {
+ return rc;
+ }
+
+ if (GetRCTarget(rc_in) == rcArgv) {
+ force = false;
+ }
+ else {
+ bool wasDbOrTableSet = true;
+ if (self->report_vdb != NULL) {
+ (*self->report_vdb)(&report_funcs, 0, NULL, &wasDbOrTableSet);
+ if (!wasDbOrTableSet) {
+ force = false;
+ }
+ }
+ }
+
+ if (self->argv) {
+ int i = 0;
+ for (i = 1; i < self->argc; ++i) {
+ if (strcmp("--" OPTION_REPORT, self->argv[i]) == 0) {
+ if (i + 1 < self->argc) {
+ report_arg = self->argv[i + 1];
+ }
+ break;
+ }
+ }
+ }
+
+ if (report_arg && strcmp("always", report_arg) == 0) {
+ force = true;
+ self -> silence = false;
+ }
+
+ if (!self -> silence) {
+ if (force) {
+ if (report_arg && strcmp("never", report_arg) == 0) {
+ force = false;
+ }
+ }
+/* PLOGERR(klogErr, (klogErr,
+ RC(rcApp, rcArgv, rcParsing, rcRange, rcInvalid),
+ "report type '$(type)' is unrecognized",
+ "type=%s", self->argv[i + 1]));*/
+
+ if (force) {
+ if (self->hasZombies) {
+ KOutHandlerSetStdErr();
+ if (self->object != NULL) {
+ OUTMSG(("\nThe archive '%s' may be truncated: "
+ "Please download it again.\n", self->object));
+ }
+ else {
+ OUTMSG(("\nThe archive may be truncated: "
+ "Please download it again.\n"));
+ }
+ }
+ else {
+ int indent = 0;
+ const char tag[] = "Report";
+
+ char path[PATH_MAX + 1] = "";
+ bool to_file = false;
+ KWrtHandler old_handler;
+ if (rc_in == 0) {
+ reportToStdErrSet(self, &old_handler);
+ }
+ else {
+ rc_t rc2 = 0;
+ const char name[] = "ncbi_error_report.xml";
+ const char* home = getenv("HOME");
+ if (home == NULL) {
+ home = getenv("USERPROFILE");
+ }
+ if (home) {
+ size_t num_writ = 0;
+ rc2 = string_printf
+ (path, sizeof path, &num_writ, "%s/%s", home, name);
+ assert(num_writ < sizeof path);
+ }
+ if (rc2 != 0 || home == NULL) {
+ size_t num_writ = 0;
+ rc2 = string_printf
+ (path, sizeof path, &num_writ, "%s", name);
+ assert(num_writ < sizeof path);
+ assert(rc2 == 0);
+ }
+ reportToFileSet(self, &old_handler, path, &to_file);
+ }
+ if (!to_file && rc_in) {
+ OUTMSG((
+"\n"
+"=============================================================\n"
+"An error occurred during processing.\n"
+"If the problem persists, you may consider sending the following XML document\n"
+"to 'sra at ncbi.nlm.nih.gov' for assistance.\n"
+"=============================================================\n\n"));
+ }
+
+ reportOpen(indent, tag, 0);
+
+ {
+ rc_t rc2 = ReportRun(indent + 1, rc_in);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+
+ if ( self -> report_config != NULL )
+ {
+ rc_t rc2 = ( * self -> report_config ) ( & report_funcs, indent + 1);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+
+ if (self -> report_vdb != NULL) {
+ rc_t rc2 = (*self->report_vdb)
+ (&report_funcs, indent + 1, self -> object, NULL);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ if ( self -> report_software != NULL )
+ {
+ const char *argv_0 = self -> argv ? self -> argv [ 0 ] : "";
+ rc_t rc2 = ( * self -> report_software ) ( & report_funcs, indent + 1, argv_0, self -> date, self -> tool_ver );
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+
+ reportClose(indent, tag);
+ reportData1("\n");
+
+ if (to_file) {
+ KOutHandlerSetStdErr();
+ OUTMSG((
+"\n"
+"=============================================================\n"
+"An error occurred during processing.\n"
+"A report was generated into the file '%s'.\n"
+"If the problem persists, you may consider sending the file\n"
+"to 'sra at ncbi.nlm.nih.gov' for assistance.\n"
+"=============================================================\n\n", path));
+ }
+ }
+ }
+ }
+
+ ReportRelease();
+
+ return rc;
+}
+
+static
+char **copy_argv ( int argc, char **argv )
+{
+ char **argv2 = calloc ( argc, sizeof * argv2 );
+ if (argv2 != NULL) {
+ int i = 0;
+ for (i = 0; i < argc; ++i) {
+ argv2[i] = string_dup_measure(argv[i], NULL);
+ }
+ }
+ return argv2;
+}
+
+/* Init: initialize with common information */
+LIB_EXPORT void CC ReportInit(int argc, char* argv[], ver_t tool_version)
+{
+ static bool latch;
+ if ( ! latch )
+ {
+ /* comes pre-zeroed by runtime */
+ static Report self;
+
+ /* initialize with non-zero parameters */
+ self.start = KTimeStamp();
+ self.argc = argc;
+ self.argv = copy_argv ( argc, argv );
+ self.date = __DATE__;
+ self.tool_ver = tool_version;
+ self.silence = false;
+
+ /* export to the remainder of the source */
+ report_singleton = & self;
+
+ latch = true;
+ }
+}
+
+
+/* BuildDate
+ * set the build date of the tool
+ *
+ * "date" [ IN ] - pre-processor __DATE__
+ */
+LIB_EXPORT void CC ReportBuildDate ( const char *date )
+{
+ Report* self = NULL;
+ ReportGet(&self);
+ if ( self != NULL )
+ self -> date = date;
+}
+
+
+/* InitCWD
+ */
+LIB_EXPORT void CC ReportInitKFS (
+ rc_t ( CC * report_cwd ) ( const ReportFuncs *f, uint32_t indent ),
+ rc_t ( CC * report_redirect ) ( KWrtHandler* handler,
+ const char* filename, bool* to_file, bool finalize ) )
+{
+ Report* self = NULL;
+ ReportGet(&self);
+ if ( self != NULL ) {
+ self -> report_redirect = report_redirect;
+ self -> report_cwd = report_cwd;
+ }
+}
+
+
+/* InitConfig
+ */
+LIB_EXPORT const char* CC ReportInitConfig ( rc_t ( CC * report ) ( const ReportFuncs *f, uint32_t indent ) )
+{
+ Report* self = NULL;
+ ReportGet(&self);
+ if ( self != NULL )
+ {
+ self -> report_config = report;
+ return self -> argv [ 0 ];
+ }
+ return NULL;
+}
+
+/* InitVDB
+ */
+LIB_EXPORT rc_t CC ReportInitVDB(
+ ReportObj *report_obj, ReportSoftware *report_software, Whack *whack)
+{
+ Report* self = NULL;
+ rc_t rc = ReportGet(&self);
+ if ( rc == 0 && self)
+ {
+ self -> report_vdb = report_obj;
+ self -> report_software = report_software;
+ self -> whack_vdb = whack;
+ }
+ return rc;
+}
+
+LIB_EXPORT rc_t CC ReportResetObject(const char* path)
+{
+ Report* self = NULL;
+
+ if ( path == NULL )
+ path = "NULL";
+ else if ( path [ 0 ] == 0 )
+ path = "EMPTY";
+
+ ReportGet(&self);
+ if (self == NULL) {
+ return 0;
+ }
+
+ return ReportReplaceObjectPtr(self, path);
+}
+
+LIB_EXPORT void CC ReportRecordZombieFile(void)
+{
+ Report* self = NULL;
+ ReportGet(&self);
+ if (self == NULL)
+ { return; }
+ self->hasZombies = true;
+}
diff --git a/libs/klib/status.c b/libs/klib/status.c
index d8d0d6f..be03c98 100644
--- a/libs/klib/status.c
+++ b/libs/klib/status.c
@@ -135,8 +135,8 @@ rc_t CC sts_print(KFmtHandler* formatter, const KStsFmtFlags flags, KWrtHandler*
uint32_t envc = 0;
wrt_nvp_t envs[5];
- const char ebuffer[2048];
- const char mbuffer[2048];
+ char ebuffer[2048];
+ char mbuffer[2048];
KFmtWriter fmtwrt;
assert(formatter != NULL);
diff --git a/libs/klib/symtab.c b/libs/klib/symtab.c
index 7dc8897..d30df64 100644
--- a/libs/klib/symtab.c
+++ b/libs/klib/symtab.c
@@ -103,7 +103,7 @@ LIB_EXPORT rc_t CC KSymbolMake ( KSymbol **symp,
rc = KSymbolInit (sym, name, type, obj);
if (rc == 0)
{
- * symp = NULL;
+ * symp = sym;
return 0;
}
free (sym);
diff --git a/libs/klib/token.c b/libs/klib/token.c
index d8ec211..9e4f0f5 100644
--- a/libs/klib/token.c
+++ b/libs/klib/token.c
@@ -1236,7 +1236,6 @@ comment_restart:
#if CHECK_TOKENIZER
#include <stdio.h>
-#include <fmtdef.h>
static
void CC examine_src ( const KTokenSource *src, bool before )
{
@@ -1259,12 +1258,12 @@ void CC examine_src ( const KTokenSource *src, bool before )
}
else
{
- fprintf ( stderr, "KTokenizerNext: bad src size ( %" LUSZ " ) %s scan "
- "at file \"%.*s\" offset %" LUSZ "\n"
- , src -> str . size
+ fprintf ( stderr, "KTokenizerNext: bad src size ( %lu ) %s scan "
+ "at file \"%.*s\" offset %lu\n"
+ , ( long unsigned ) src -> str . size
, stage
, ( int ) tt -> path . size, tt -> path . addr
- , src -> str . addr - tt -> str . addr );
+ , ( long unsigned ) ( src -> str . addr - tt -> str . addr ) );
}
}
diff --git a/libs/klib/unix/systime.c b/libs/klib/unix/systime.c
index 1774fcf..09b9b90 100644
--- a/libs/klib/unix/systime.c
+++ b/libs/klib/unix/systime.c
@@ -64,9 +64,11 @@ void KTimeMake ( KTime *kt, struct tm const *t )
{
kt -> year = t -> tm_year + 1900;
kt -> month = t -> tm_mon;
- kt -> day = t -> tm_mday;
+ kt -> day = t -> tm_mday - 1;
kt -> weekday = t -> tm_wday;
+#if !defined(__SunOS) && !defined(__sun__)
kt -> tzoff = ( int16_t ) ( t -> tm_gmtoff / 60 );
+#endif
kt -> hour = ( uint8_t ) t -> tm_hour;
kt -> minute = ( uint8_t ) t -> tm_min;
kt -> second = ( uint8_t ) t -> tm_sec;
diff --git a/libs/klib/unpack.c b/libs/klib/unpack.c
index a49902b..73b343b 100644
--- a/libs/klib/unpack.c
+++ b/libs/klib/unpack.c
@@ -75,6 +75,167 @@
#define WRITE_UNPACKED8( out, dst, idx ) \
( ( uint64_t* ) ( dst ) ) [ idx ] = bswap_64 ( out )
#endif
+uint8_t unpack_8_from_2_arr[256][4]={
+{0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,0,3},
+{0,0,1,0},{0,0,1,1},{0,0,1,2},{0,0,1,3},
+{0,0,2,0},{0,0,2,1},{0,0,2,2},{0,0,2,3},
+{0,0,3,0},{0,0,3,1},{0,0,3,2},{0,0,3,3},
+{0,1,0,0},{0,1,0,1},{0,1,0,2},{0,1,0,3},
+{0,1,1,0},{0,1,1,1},{0,1,1,2},{0,1,1,3},
+{0,1,2,0},{0,1,2,1},{0,1,2,2},{0,1,2,3},
+{0,1,3,0},{0,1,3,1},{0,1,3,2},{0,1,3,3},
+{0,2,0,0},{0,2,0,1},{0,2,0,2},{0,2,0,3},
+{0,2,1,0},{0,2,1,1},{0,2,1,2},{0,2,1,3},
+{0,2,2,0},{0,2,2,1},{0,2,2,2},{0,2,2,3},
+{0,2,3,0},{0,2,3,1},{0,2,3,2},{0,2,3,3},
+{0,3,0,0},{0,3,0,1},{0,3,0,2},{0,3,0,3},
+{0,3,1,0},{0,3,1,1},{0,3,1,2},{0,3,1,3},
+{0,3,2,0},{0,3,2,1},{0,3,2,2},{0,3,2,3},
+{0,3,3,0},{0,3,3,1},{0,3,3,2},{0,3,3,3},
+{1,0,0,0},{1,0,0,1},{1,0,0,2},{1,0,0,3},
+{1,0,1,0},{1,0,1,1},{1,0,1,2},{1,0,1,3},
+{1,0,2,0},{1,0,2,1},{1,0,2,2},{1,0,2,3},
+{1,0,3,0},{1,0,3,1},{1,0,3,2},{1,0,3,3},
+{1,1,0,0},{1,1,0,1},{1,1,0,2},{1,1,0,3},
+{1,1,1,0},{1,1,1,1},{1,1,1,2},{1,1,1,3},
+{1,1,2,0},{1,1,2,1},{1,1,2,2},{1,1,2,3},
+{1,1,3,0},{1,1,3,1},{1,1,3,2},{1,1,3,3},
+{1,2,0,0},{1,2,0,1},{1,2,0,2},{1,2,0,3},
+{1,2,1,0},{1,2,1,1},{1,2,1,2},{1,2,1,3},
+{1,2,2,0},{1,2,2,1},{1,2,2,2},{1,2,2,3},
+{1,2,3,0},{1,2,3,1},{1,2,3,2},{1,2,3,3},
+{1,3,0,0},{1,3,0,1},{1,3,0,2},{1,3,0,3},
+{1,3,1,0},{1,3,1,1},{1,3,1,2},{1,3,1,3},
+{1,3,2,0},{1,3,2,1},{1,3,2,2},{1,3,2,3},
+{1,3,3,0},{1,3,3,1},{1,3,3,2},{1,3,3,3},
+{2,0,0,0},{2,0,0,1},{2,0,0,2},{2,0,0,3},
+{2,0,1,0},{2,0,1,1},{2,0,1,2},{2,0,1,3},
+{2,0,2,0},{2,0,2,1},{2,0,2,2},{2,0,2,3},
+{2,0,3,0},{2,0,3,1},{2,0,3,2},{2,0,3,3},
+{2,1,0,0},{2,1,0,1},{2,1,0,2},{2,1,0,3},
+{2,1,1,0},{2,1,1,1},{2,1,1,2},{2,1,1,3},
+{2,1,2,0},{2,1,2,1},{2,1,2,2},{2,1,2,3},
+{2,1,3,0},{2,1,3,1},{2,1,3,2},{2,1,3,3},
+{2,2,0,0},{2,2,0,1},{2,2,0,2},{2,2,0,3},
+{2,2,1,0},{2,2,1,1},{2,2,1,2},{2,2,1,3},
+{2,2,2,0},{2,2,2,1},{2,2,2,2},{2,2,2,3},
+{2,2,3,0},{2,2,3,1},{2,2,3,2},{2,2,3,3},
+{2,3,0,0},{2,3,0,1},{2,3,0,2},{2,3,0,3},
+{2,3,1,0},{2,3,1,1},{2,3,1,2},{2,3,1,3},
+{2,3,2,0},{2,3,2,1},{2,3,2,2},{2,3,2,3},
+{2,3,3,0},{2,3,3,1},{2,3,3,2},{2,3,3,3},
+{3,0,0,0},{3,0,0,1},{3,0,0,2},{3,0,0,3},
+{3,0,1,0},{3,0,1,1},{3,0,1,2},{3,0,1,3},
+{3,0,2,0},{3,0,2,1},{3,0,2,2},{3,0,2,3},
+{3,0,3,0},{3,0,3,1},{3,0,3,2},{3,0,3,3},
+{3,1,0,0},{3,1,0,1},{3,1,0,2},{3,1,0,3},
+{3,1,1,0},{3,1,1,1},{3,1,1,2},{3,1,1,3},
+{3,1,2,0},{3,1,2,1},{3,1,2,2},{3,1,2,3},
+{3,1,3,0},{3,1,3,1},{3,1,3,2},{3,1,3,3},
+{3,2,0,0},{3,2,0,1},{3,2,0,2},{3,2,0,3},
+{3,2,1,0},{3,2,1,1},{3,2,1,2},{3,2,1,3},
+{3,2,2,0},{3,2,2,1},{3,2,2,2},{3,2,2,3},
+{3,2,3,0},{3,2,3,1},{3,2,3,2},{3,2,3,3},
+{3,3,0,0},{3,3,0,1},{3,3,0,2},{3,3,0,3},
+{3,3,1,0},{3,3,1,1},{3,3,1,2},{3,3,1,3},
+{3,3,2,0},{3,3,2,1},{3,3,2,2},{3,3,2,3},
+{3,3,3,0},{3,3,3,1},{3,3,3,2},{3,3,3,3},
+};
+uint8_t unpack_8_from_1_arr[256][8]={
+{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,1},{0,0,0,0,0,0,1,0},{0,0,0,0,0,0,1,1},
+{0,0,0,0,0,1,0,0},{0,0,0,0,0,1,0,1},{0,0,0,0,0,1,1,0},{0,0,0,0,0,1,1,1},
+{0,0,0,0,1,0,0,0},{0,0,0,0,1,0,0,1},{0,0,0,0,1,0,1,0},{0,0,0,0,1,0,1,1},
+{0,0,0,0,1,1,0,0},{0,0,0,0,1,1,0,1},{0,0,0,0,1,1,1,0},{0,0,0,0,1,1,1,1},
+{0,0,0,1,0,0,0,0},{0,0,0,1,0,0,0,1},{0,0,0,1,0,0,1,0},{0,0,0,1,0,0,1,1},
+{0,0,0,1,0,1,0,0},{0,0,0,1,0,1,0,1},{0,0,0,1,0,1,1,0},{0,0,0,1,0,1,1,1},
+{0,0,0,1,1,0,0,0},{0,0,0,1,1,0,0,1},{0,0,0,1,1,0,1,0},{0,0,0,1,1,0,1,1},
+{0,0,0,1,1,1,0,0},{0,0,0,1,1,1,0,1},{0,0,0,1,1,1,1,0},{0,0,0,1,1,1,1,1},
+{0,0,1,0,0,0,0,0},{0,0,1,0,0,0,0,1},{0,0,1,0,0,0,1,0},{0,0,1,0,0,0,1,1},
+{0,0,1,0,0,1,0,0},{0,0,1,0,0,1,0,1},{0,0,1,0,0,1,1,0},{0,0,1,0,0,1,1,1},
+{0,0,1,0,1,0,0,0},{0,0,1,0,1,0,0,1},{0,0,1,0,1,0,1,0},{0,0,1,0,1,0,1,1},
+{0,0,1,0,1,1,0,0},{0,0,1,0,1,1,0,1},{0,0,1,0,1,1,1,0},{0,0,1,0,1,1,1,1},
+{0,0,1,1,0,0,0,0},{0,0,1,1,0,0,0,1},{0,0,1,1,0,0,1,0},{0,0,1,1,0,0,1,1},
+{0,0,1,1,0,1,0,0},{0,0,1,1,0,1,0,1},{0,0,1,1,0,1,1,0},{0,0,1,1,0,1,1,1},
+{0,0,1,1,1,0,0,0},{0,0,1,1,1,0,0,1},{0,0,1,1,1,0,1,0},{0,0,1,1,1,0,1,1},
+{0,0,1,1,1,1,0,0},{0,0,1,1,1,1,0,1},{0,0,1,1,1,1,1,0},{0,0,1,1,1,1,1,1},
+{0,1,0,0,0,0,0,0},{0,1,0,0,0,0,0,1},{0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,1},
+{0,1,0,0,0,1,0,0},{0,1,0,0,0,1,0,1},{0,1,0,0,0,1,1,0},{0,1,0,0,0,1,1,1},
+{0,1,0,0,1,0,0,0},{0,1,0,0,1,0,0,1},{0,1,0,0,1,0,1,0},{0,1,0,0,1,0,1,1},
+{0,1,0,0,1,1,0,0},{0,1,0,0,1,1,0,1},{0,1,0,0,1,1,1,0},{0,1,0,0,1,1,1,1},
+{0,1,0,1,0,0,0,0},{0,1,0,1,0,0,0,1},{0,1,0,1,0,0,1,0},{0,1,0,1,0,0,1,1},
+{0,1,0,1,0,1,0,0},{0,1,0,1,0,1,0,1},{0,1,0,1,0,1,1,0},{0,1,0,1,0,1,1,1},
+{0,1,0,1,1,0,0,0},{0,1,0,1,1,0,0,1},{0,1,0,1,1,0,1,0},{0,1,0,1,1,0,1,1},
+{0,1,0,1,1,1,0,0},{0,1,0,1,1,1,0,1},{0,1,0,1,1,1,1,0},{0,1,0,1,1,1,1,1},
+{0,1,1,0,0,0,0,0},{0,1,1,0,0,0,0,1},{0,1,1,0,0,0,1,0},{0,1,1,0,0,0,1,1},
+{0,1,1,0,0,1,0,0},{0,1,1,0,0,1,0,1},{0,1,1,0,0,1,1,0},{0,1,1,0,0,1,1,1},
+{0,1,1,0,1,0,0,0},{0,1,1,0,1,0,0,1},{0,1,1,0,1,0,1,0},{0,1,1,0,1,0,1,1},
+{0,1,1,0,1,1,0,0},{0,1,1,0,1,1,0,1},{0,1,1,0,1,1,1,0},{0,1,1,0,1,1,1,1},
+{0,1,1,1,0,0,0,0},{0,1,1,1,0,0,0,1},{0,1,1,1,0,0,1,0},{0,1,1,1,0,0,1,1},
+{0,1,1,1,0,1,0,0},{0,1,1,1,0,1,0,1},{0,1,1,1,0,1,1,0},{0,1,1,1,0,1,1,1},
+{0,1,1,1,1,0,0,0},{0,1,1,1,1,0,0,1},{0,1,1,1,1,0,1,0},{0,1,1,1,1,0,1,1},
+{0,1,1,1,1,1,0,0},{0,1,1,1,1,1,0,1},{0,1,1,1,1,1,1,0},{0,1,1,1,1,1,1,1},
+{1,0,0,0,0,0,0,0},{1,0,0,0,0,0,0,1},{1,0,0,0,0,0,1,0},{1,0,0,0,0,0,1,1},
+{1,0,0,0,0,1,0,0},{1,0,0,0,0,1,0,1},{1,0,0,0,0,1,1,0},{1,0,0,0,0,1,1,1},
+{1,0,0,0,1,0,0,0},{1,0,0,0,1,0,0,1},{1,0,0,0,1,0,1,0},{1,0,0,0,1,0,1,1},
+{1,0,0,0,1,1,0,0},{1,0,0,0,1,1,0,1},{1,0,0,0,1,1,1,0},{1,0,0,0,1,1,1,1},
+{1,0,0,1,0,0,0,0},{1,0,0,1,0,0,0,1},{1,0,0,1,0,0,1,0},{1,0,0,1,0,0,1,1},
+{1,0,0,1,0,1,0,0},{1,0,0,1,0,1,0,1},{1,0,0,1,0,1,1,0},{1,0,0,1,0,1,1,1},
+{1,0,0,1,1,0,0,0},{1,0,0,1,1,0,0,1},{1,0,0,1,1,0,1,0},{1,0,0,1,1,0,1,1},
+{1,0,0,1,1,1,0,0},{1,0,0,1,1,1,0,1},{1,0,0,1,1,1,1,0},{1,0,0,1,1,1,1,1},
+{1,0,1,0,0,0,0,0},{1,0,1,0,0,0,0,1},{1,0,1,0,0,0,1,0},{1,0,1,0,0,0,1,1},
+{1,0,1,0,0,1,0,0},{1,0,1,0,0,1,0,1},{1,0,1,0,0,1,1,0},{1,0,1,0,0,1,1,1},
+{1,0,1,0,1,0,0,0},{1,0,1,0,1,0,0,1},{1,0,1,0,1,0,1,0},{1,0,1,0,1,0,1,1},
+{1,0,1,0,1,1,0,0},{1,0,1,0,1,1,0,1},{1,0,1,0,1,1,1,0},{1,0,1,0,1,1,1,1},
+{1,0,1,1,0,0,0,0},{1,0,1,1,0,0,0,1},{1,0,1,1,0,0,1,0},{1,0,1,1,0,0,1,1},
+{1,0,1,1,0,1,0,0},{1,0,1,1,0,1,0,1},{1,0,1,1,0,1,1,0},{1,0,1,1,0,1,1,1},
+{1,0,1,1,1,0,0,0},{1,0,1,1,1,0,0,1},{1,0,1,1,1,0,1,0},{1,0,1,1,1,0,1,1},
+{1,0,1,1,1,1,0,0},{1,0,1,1,1,1,0,1},{1,0,1,1,1,1,1,0},{1,0,1,1,1,1,1,1},
+{1,1,0,0,0,0,0,0},{1,1,0,0,0,0,0,1},{1,1,0,0,0,0,1,0},{1,1,0,0,0,0,1,1},
+{1,1,0,0,0,1,0,0},{1,1,0,0,0,1,0,1},{1,1,0,0,0,1,1,0},{1,1,0,0,0,1,1,1},
+{1,1,0,0,1,0,0,0},{1,1,0,0,1,0,0,1},{1,1,0,0,1,0,1,0},{1,1,0,0,1,0,1,1},
+{1,1,0,0,1,1,0,0},{1,1,0,0,1,1,0,1},{1,1,0,0,1,1,1,0},{1,1,0,0,1,1,1,1},
+{1,1,0,1,0,0,0,0},{1,1,0,1,0,0,0,1},{1,1,0,1,0,0,1,0},{1,1,0,1,0,0,1,1},
+{1,1,0,1,0,1,0,0},{1,1,0,1,0,1,0,1},{1,1,0,1,0,1,1,0},{1,1,0,1,0,1,1,1},
+{1,1,0,1,1,0,0,0},{1,1,0,1,1,0,0,1},{1,1,0,1,1,0,1,0},{1,1,0,1,1,0,1,1},
+{1,1,0,1,1,1,0,0},{1,1,0,1,1,1,0,1},{1,1,0,1,1,1,1,0},{1,1,0,1,1,1,1,1},
+{1,1,1,0,0,0,0,0},{1,1,1,0,0,0,0,1},{1,1,1,0,0,0,1,0},{1,1,1,0,0,0,1,1},
+{1,1,1,0,0,1,0,0},{1,1,1,0,0,1,0,1},{1,1,1,0,0,1,1,0},{1,1,1,0,0,1,1,1},
+{1,1,1,0,1,0,0,0},{1,1,1,0,1,0,0,1},{1,1,1,0,1,0,1,0},{1,1,1,0,1,0,1,1},
+{1,1,1,0,1,1,0,0},{1,1,1,0,1,1,0,1},{1,1,1,0,1,1,1,0},{1,1,1,0,1,1,1,1},
+{1,1,1,1,0,0,0,0},{1,1,1,1,0,0,0,1},{1,1,1,1,0,0,1,0},{1,1,1,1,0,0,1,1},
+{1,1,1,1,0,1,0,0},{1,1,1,1,0,1,0,1},{1,1,1,1,0,1,1,0},{1,1,1,1,0,1,1,1},
+{1,1,1,1,1,0,0,0},{1,1,1,1,1,0,0,1},{1,1,1,1,1,0,1,0},{1,1,1,1,1,0,1,1},
+{1,1,1,1,1,1,0,0},{1,1,1,1,1,1,0,1},{1,1,1,1,1,1,1,0},{1,1,1,1,1,1,1,1},
+};
+
+static
+void CC Unpack8From2(uint8_t *dst,const uint8_t *src,int32_t count)
+{
+ if(count > 0){
+ int i;
+ for(i=0;i<count/4;i++,dst+=4,src++){
+ memcpy(dst,unpack_8_from_2_arr[*src],4);
+ }
+ for(i=0;i< (count&3);i++){
+ dst[i] = unpack_8_from_2_arr[*src][i];
+ }
+ }
+}
+static
+void CC Unpack8From1(uint8_t *dst,const uint8_t *src,int32_t count)
+{
+ if(count > 0){
+ int i;
+ for(i=0;i<count/8;i++,dst+=8,src++){
+ memcpy(dst,unpack_8_from_1_arr[*src],8);
+ }
+ for(i=0;i< (count&7);i++){
+ dst[i] = unpack_8_from_1_arr[*src][i];
+ }
+ }
+}
+
+
/* Unpack8
@@ -87,10 +248,23 @@ void CC Unpack8 ( uint32_t packed, uint32_t count, void *dst,
uint64_t out;
uint32_t abits;
uint64_t src_mask;
-
/* keep track of trailing bits */
uint32_t discard = (uint32_t)( ( 0 - ( ssize += src_off ) ) & 7 );
+
+ if(src_off == 0){
+ switch(packed){
+ case 1:
+ Unpack8From1(dst,src,count);
+ return;
+ case 2:
+ Unpack8From2(dst,src,count);
+ return;
+ }
+ }
+
+
+
/* convert to bytes */
ssize = ( ssize + 7 ) >> 3;
diff --git a/libs/klib/vector_namelist.c b/libs/klib/vector_namelist.c
index 75e6373..95dfdb8 100644
--- a/libs/klib/vector_namelist.c
+++ b/libs/klib/vector_namelist.c
@@ -38,6 +38,7 @@
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
#include <assert.h>
/*--------------------------------------------------------------------------
@@ -242,3 +243,59 @@ LIB_EXPORT rc_t CC VNamelistRemove( VNamelist *self, const char* s )
}
return rc;
}
+
+
+
+/* Reorder
+ * sort the names according to case sensitivity
+ * and UNICODE character code ordering
+ *
+ * "case_insensitive" [ IN ] - when true, perform "tolower" on
+ * each character before compare
+ */
+static
+int CC vect_string_cmp ( const void **a, const void **b, void *ignore )
+{
+ return strcmp ( * a, * b );
+}
+
+static
+int CC vect_string_cmp_case ( const void **a, const void **b, void *ignore )
+{
+ uint32_t i;
+
+ const char *ap = * a;
+ const char *bp = * b;
+
+ if ( ap == NULL )
+ return bp != NULL;
+ if ( bp == NULL )
+ return -1;
+
+ for ( i = 0; ; ++ i )
+ {
+ if ( ap [ i ] != bp [ i ] )
+ {
+ /* TBD - this should perform UTF-8 to UNICODE conversion
+ but for that, create a function in text module */
+ int diff = tolower ( ap [ i ] ) - tolower ( bp [ i ] );
+ if ( diff == 0 )
+ continue;
+
+ return diff;
+ }
+
+ if ( ap [ i ] == 0 )
+ break;
+ }
+
+ return 0;
+}
+
+LIB_EXPORT void CC VNamelistReorder ( VNamelist *self, bool case_insensitive )
+{
+ if ( self != NULL )
+ {
+ VectorReorder ( & self -> name_vector, case_insensitive ? vect_string_cmp_case : vect_string_cmp, NULL );
+ }
+}
diff --git a/libs/klib/vlen-encode.c b/libs/klib/vlen-encode.c
index 9f5961b..f8e4349 100644
--- a/libs/klib/vlen-encode.c
+++ b/libs/klib/vlen-encode.c
@@ -31,6 +31,7 @@
#include <byteswap.h>
#include <endian.h>
+#include <string.h>
LIB_EXPORT rc_t CC vlen_encode1(void *Dst, uint64_t dsize, uint64_t *psize, int64_t X) {
int sgn = 0;
@@ -324,7 +325,7 @@ LIB_EXPORT rc_t CC vlen_decode ( int64_t *Y, uint64_t ycount,
#endif
XTYPE x;
- x = *(const XTYPE *)(src + i);
+ memcpy (& x, src + i, sizeof x); /* may be misaligned */
#if __BYTE_ORDER == __BIG_ENDIAN
#if XTYPE_SIZE == 32
x = bswap_32(x);
diff --git a/libs/klib/win/syserrcode.c b/libs/klib/win/syserrcode.c
index fe85768..9176d92 100644
--- a/libs/klib/win/syserrcode.c
+++ b/libs/klib/win/syserrcode.c
@@ -73,7 +73,7 @@ size_t KWrtFmt_error_code ( char * buffer, size_t buffer_size, uint32_t error_co
{
if (*pc == '\r')
{
- *pc = '\0';
+ tbuffer_size = pc - tbuffer;
break;
}
}
diff --git a/libs/klib/win/systime.c b/libs/klib/win/systime.c
old mode 100755
new mode 100644
diff --git a/libs/klib/win/syswriter.c b/libs/klib/win/syswriter.c
index 6440fbc..b204afc 100644
--- a/libs/klib/win/syswriter.c
+++ b/libs/klib/win/syswriter.c
@@ -29,6 +29,7 @@
#include <windows.h>
#include <klib/writer.h>
#include <klib/text.h>
+#include <klib/printf.h>
#include "writer-priv.h"
#include <stdio.h>
#include <errno.h>
@@ -54,10 +55,24 @@ rc_t KWrtSysInit(void** h_stdout, void** h_stderr)
LIB_EXPORT int CC snprintf ( char * buffer, size_t bufsize, const char * format, ... )
{
int ret;
+ size_t size;
+ rc_t rc;
va_list args;
va_start (args, format);
- ret = _vsnprintf (buffer, bufsize, format, args);
+ rc = string_vprintf ( buffer, bufsize, &size, format, args );
+ if ( rc == 0 )
+ {
+ ret = size;
+ }
+ else
+ {
+ if ( ( GetRCState( rc ) == rcInsufficient )&&( GetRCObject( rc ) == rcBuffer ) )
+ ret = size;
+ else
+ ret = -1;
+ }
+/* ret = _vsnprintf (buffer, bufsize, format, args); */
va_end (args);
return ret;
}
diff --git a/libs/klib/writer.c b/libs/klib/writer.c
index 2e510fe..8bc592b 100644
--- a/libs/klib/writer.c
+++ b/libs/klib/writer.c
@@ -110,7 +110,7 @@ LIB_EXPORT rc_t CC KWrtInit( const char* appname, uint32_t vers )
ext = string_chr(appname, progname_z, '.');
- if( appname != NULL ) {
+ if( ext != NULL ) {
wrt_app_length = ext - appname;
} else {
wrt_app_length = progname_z;
@@ -207,8 +207,8 @@ rc_t RCLiteral ( rc_t self, char *buffer, size_t bsize, size_t *num_writ )
#endif
return string_printf ( buffer, bsize, num_writ
#if _DEBUGGING
- , "rc = %s:$s:%u:%u.%u.%u.%u.%u"
- , GetRCFilename(), GetRCFunction (), GetRCLineno ()
+ , "rc = %s:%u:$s:%u.%u.%u.%u.%u"
+ , GetRCFilename(), GetRCLineno (), GetRCFunction ()
#else
, "rc = %u.%u.%u.%u.%u"
#endif
@@ -255,7 +255,7 @@ LIB_EXPORT rc_t CC RCExplain2 ( rc_t rc, char *buffer, size_t bsize, size_t *num
const char *function = GetRCFunction ();
if ( function != NULL )
{
- len = snprintf(buffer + total, bsize - total, "%s:%s:%u: ", GetRCFilename(), function, GetRCLineno () );
+ len = snprintf(buffer + total, bsize - total, "%s:%u:%s: ", GetRCFilename(), GetRCLineno (), function );
if( len < 0 || ( total + len ) >= bsize ) {
return RCLiteral ( rc, buffer, bsize, num_writ );
}
diff --git a/libs/kns/KCurlFile.c b/libs/kns/KCurlFile.c
new file mode 100644
index 0000000..18ff995
--- /dev/null
+++ b/libs/kns/KCurlFile.c
@@ -0,0 +1,716 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/* NOTE: uses VFS not KNS extern.h */
+#include <vfs/extern.h>
+
+struct KCurlFile;
+#define KFILE_IMPL struct KCurlFile
+#include <kfs/impl.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kns/manager.h>
+
+#include "kns_mgr_priv.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define HTTP_RESPONSE_CODE_0_VALID false
+
+/*--------------------------------------------------------------------------
+ * KCurFile
+ */
+
+typedef struct KCurlFile
+{
+ KFile dad;
+ uint64_t file_size;
+ struct KNSManager *kns_mgr;
+ CURL *curl_handle;
+ bool file_size_valid;
+ bool verbose;
+ bool is_ftp;
+ char url[ 1 ];
+} KCurlFile;
+
+
+typedef struct ReadContext
+{
+ CURL *curl_handle;
+ uint8_t * buffer;
+ size_t buffer_size;
+ size_t num_read;
+ bool curl_handle_prepared;
+} ReadContext;
+
+static
+const char *curly_errstr ( CURLcode code )
+{
+ switch ( ( int ) code )
+ {
+#define CURL_CASE( c ) \
+ case c: return # c
+#define CURL_CASE2( c, old ) \
+ case old: return # c "(" #old ")"
+
+ CURL_CASE ( CURLE_OK );
+ CURL_CASE ( CURLE_UNSUPPORTED_PROTOCOL );
+ CURL_CASE ( CURLE_FAILED_INIT );
+ CURL_CASE ( CURLE_URL_MALFORMAT );
+ CURL_CASE2 ( CURLE_OBSOLETE4, CURLE_URL_MALFORMAT_USER );
+ CURL_CASE ( CURLE_COULDNT_RESOLVE_PROXY );
+ CURL_CASE ( CURLE_COULDNT_RESOLVE_HOST );
+ CURL_CASE ( CURLE_COULDNT_CONNECT );
+ CURL_CASE ( CURLE_FTP_WEIRD_SERVER_REPLY );
+ CURL_CASE2 ( CURLE_REMOTE_ACCESS_DENIED, CURLE_FTP_ACCESS_DENIED );
+ CURL_CASE2 ( CURLE_OBSOLETE10, CURLE_FTP_USER_PASSWORD_INCORRECT );
+ CURL_CASE ( CURLE_FTP_WEIRD_PASS_REPLY );
+ CURL_CASE2 ( CURLE_OBSOLETE12, CURLE_FTP_WEIRD_USER_REPLY );
+ CURL_CASE ( CURLE_FTP_WEIRD_PASV_REPLY );
+ CURL_CASE ( CURLE_FTP_WEIRD_227_FORMAT );
+ CURL_CASE ( CURLE_FTP_CANT_GET_HOST );
+ CURL_CASE2 ( CURLE_OBSOLETE16, CURLE_FTP_CANT_RECONNECT );
+ CURL_CASE2 ( CURLE_FTP_COULDNT_SET_TYPE, CURLE_FTP_COULDNT_SET_BINARY );
+ CURL_CASE ( CURLE_PARTIAL_FILE );
+ CURL_CASE ( CURLE_FTP_COULDNT_RETR_FILE );
+ CURL_CASE2 ( CURLE_OBSOLETE20, CURLE_FTP_WRITE_ERROR );
+ CURL_CASE2 ( CURLE_QUOTE_ERROR, CURLE_FTP_QUOTE_ERROR );
+ CURL_CASE ( CURLE_HTTP_RETURNED_ERROR );
+ CURL_CASE ( CURLE_WRITE_ERROR );
+ CURL_CASE2 ( CURLE_OBSOLETE24, CURLE_MALFORMAT_USER );
+ CURL_CASE2 ( CURLE_UPLOAD_FAILED, CURLE_FTP_COULDNT_STOR_FILE );
+ CURL_CASE ( CURLE_READ_ERROR );
+ CURL_CASE ( CURLE_OUT_OF_MEMORY );
+ CURL_CASE ( CURLE_OPERATION_TIMEDOUT );
+ CURL_CASE2 ( CURLE_OBSOLETE29, CURLE_FTP_COULDNT_SET_ASCII );
+ CURL_CASE ( CURLE_FTP_PORT_FAILED );
+ CURL_CASE ( CURLE_FTP_COULDNT_USE_REST );
+ CURL_CASE2 ( CURLE_OBSOLETE32, CURLE_FTP_COULDNT_GET_SIZE );
+ CURL_CASE2 ( CURLE_RANGE_ERROR, CURLE_HTTP_RANGE_ERROR );
+ CURL_CASE ( CURLE_HTTP_POST_ERROR );
+ CURL_CASE ( CURLE_SSL_CONNECT_ERROR );
+ CURL_CASE ( CURLE_BAD_DOWNLOAD_RESUME );
+ CURL_CASE ( CURLE_FILE_COULDNT_READ_FILE );
+ CURL_CASE ( CURLE_LDAP_CANNOT_BIND );
+ CURL_CASE ( CURLE_LDAP_SEARCH_FAILED );
+ CURL_CASE2 ( CURLE_OBSOLETE40, CURLE_LIBRARY_NOT_FOUND );
+ CURL_CASE ( CURLE_FUNCTION_NOT_FOUND );
+ CURL_CASE ( CURLE_ABORTED_BY_CALLBACK );
+ CURL_CASE ( CURLE_BAD_FUNCTION_ARGUMENT );
+ CURL_CASE2 ( CURLE_OBSOLETE44, CURLE_BAD_CALLING_ORDER );
+ CURL_CASE ( CURLE_INTERFACE_FAILED );
+ CURL_CASE2 ( CURLE_OBSOLETE46, CURLE_BAD_PASSWORD_ENTERED );
+ CURL_CASE ( CURLE_TOO_MANY_REDIRECTS );
+ CURL_CASE ( CURLE_UNKNOWN_TELNET_OPTION );
+ CURL_CASE ( CURLE_TELNET_OPTION_SYNTAX );
+ CURL_CASE2 ( CURLE_OBSOLETE50, CURLE_OBSOLETE );
+ CURL_CASE2 ( CURLE_PEER_FAILED_VERIFICATION, CURLE_SSL_PEER_CERTIFICATE );
+ CURL_CASE ( CURLE_GOT_NOTHING );
+ CURL_CASE ( CURLE_SSL_ENGINE_NOTFOUND );
+ CURL_CASE ( CURLE_SSL_ENGINE_SETFAILED );
+ CURL_CASE ( CURLE_SEND_ERROR );
+ CURL_CASE ( CURLE_RECV_ERROR );
+ CURL_CASE2 ( CURLE_OBSOLETE57, CURLE_SHARE_IN_USE );
+ CURL_CASE ( CURLE_SSL_CERTPROBLEM );
+ CURL_CASE ( CURLE_SSL_CIPHER );
+ CURL_CASE ( CURLE_SSL_CACERT );
+ CURL_CASE ( CURLE_BAD_CONTENT_ENCODING );
+ CURL_CASE ( CURLE_LDAP_INVALID_URL );
+ CURL_CASE ( CURLE_FILESIZE_EXCEEDED );
+ CURL_CASE2 ( CURLE_USE_SSL_FAILED, CURLE_FTP_SSL_FAILED );
+ CURL_CASE ( CURLE_SEND_FAIL_REWIND );
+ CURL_CASE ( CURLE_SSL_ENGINE_INITFAILED );
+ CURL_CASE ( CURLE_LOGIN_DENIED );
+ CURL_CASE ( CURLE_TFTP_NOTFOUND );
+ CURL_CASE ( CURLE_TFTP_PERM );
+ CURL_CASE2 ( CURLE_REMOTE_DISK_FULL, CURLE_TFTP_DISKFULL );
+ CURL_CASE ( CURLE_TFTP_ILLEGAL );
+ CURL_CASE ( CURLE_TFTP_UNKNOWNID );
+ CURL_CASE2 ( CURLE_REMOTE_FILE_EXISTS, CURLE_TFTP_EXISTS );
+ CURL_CASE ( CURLE_TFTP_NOSUCHUSER );
+ CURL_CASE ( CURLE_CONV_FAILED );
+ CURL_CASE ( CURLE_CONV_REQD );
+ CURL_CASE2 ( CURLE_SSL_CACERT_BADFILE, 77 );
+ CURL_CASE2 ( CURLE_REMOTE_FILE_NOT_FOUND, 78 );
+ CURL_CASE2 ( CURLE_SSH, 79 );
+ CURL_CASE2 ( CURLE_SSL_SHUTDOWN_FAILED, 80 );
+ CURL_CASE2 ( CURLE_AGAIN, 81 );
+ CURL_CASE ( CURLE_SSL_CRL_BADFILE );
+ CURL_CASE2 ( CURLE_SSL_ISSUER_ERROR, 83 );
+ }
+
+ return "<UNKNOWN>";
+}
+
+
+/* Destroy
+ */
+static rc_t CC KCurlFileDestroy( KCurlFile *self )
+{
+ self->kns_mgr->curl_easy_cleanup_fkt( self->curl_handle );
+ KNSManagerRelease( self->kns_mgr );
+ free ( self );
+ return 0;
+}
+
+
+static struct KSysFile* KCurlFileGetSysFile( const KCurlFile *self, uint64_t *offset )
+{
+ * offset = 0;
+ return NULL;
+}
+
+
+static rc_t KCurlFileRandomAccess( const KCurlFile *self )
+{
+ return 0;
+}
+
+
+static size_t CC dummy_callback( void *ptr, size_t size, size_t nmemb, void *data )
+{
+ ( void )ptr;
+ ( void )data;
+ return (size_t)( size * nmemb );
+}
+
+
+static size_t CC KCurlFileCallback( void *ptr, size_t size, size_t nmemb, void *data )
+{
+ size_t given_bytes = size * nmemb; /* calculate the size given in ptr */
+ ReadContext *ctx = ( ReadContext * )data;
+ if ( ctx != NULL && ctx->buffer != NULL && ctx->buffer_size > 0 )
+ {
+ if ( ( ctx->num_read + given_bytes ) > ctx->buffer_size )
+ {
+ /* the caller-provided buffer IS NOT enough... */
+ size_t to_copy = ( ctx->buffer_size - ctx->num_read );
+ if ( to_copy > 0 )
+ {
+ /* the caller-provided buffer can hold a part of it... */
+ if ( ctx->buffer )
+ {
+ memcpy( &( ctx->buffer[ ctx->num_read ] ), ptr, to_copy );
+ ctx->num_read += to_copy;
+ }
+ }
+ }
+ else
+ {
+ /* the caller-provided buffer IS enough... */
+ if ( ctx->buffer )
+ {
+ memcpy( &( ctx->buffer[ ctx->num_read ] ), ptr, given_bytes );
+ ctx->num_read += given_bytes;
+ }
+ }
+ }
+ return given_bytes;
+}
+
+
+/* helper to set a curl-option which is a long int */
+static rc_t set_curl_long_option( struct KNSManager *kns_mgr, CURL *curl,
+ CURLoption option, long int value, const char *err_txt )
+{
+ rc_t rc = 0;
+ CURLcode rcc = kns_mgr->curl_easy_setopt_fkt( curl, option, value );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t), $(v) ) failed with curl-error $(e)",
+ "t=%s,v=%d,e=%d", err_txt, value, rcc ) );
+ }
+ return rc;
+}
+
+
+/* helper to set a curl-option which is a void pointert */
+static rc_t set_curl_void_ptr( struct KNSManager *kns_mgr, CURL *curl,
+ CURLoption option, void * value, const char *err_txt )
+{
+ rc_t rc = 0;
+ CURLcode rcc = kns_mgr->curl_easy_setopt_fkt( curl, option, value );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t) ... void * ptr ) failed with curl-error $(e)",
+ "t=%s,e=%d", err_txt, rcc ) );
+ }
+ return rc;
+}
+
+
+static rc_t perform( struct KNSManager *kns_mgr, CURL *curl, const char * action, uint64_t pos, size_t len )
+{
+ rc_t rc = 0;
+ CURLcode rcc = kns_mgr->curl_easy_perform_fkt( curl );
+ if ( rcc != CURLE_OK && rcc != CURLE_PARTIAL_FILE )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc,
+ "curl_easy_perform( $(a), $(b).$(c) ) failed with curl-error '$(d)' ($(e))",
+ "a=%s,b=%lu,c=%zu,d=%s,e=%d", action, pos, len, curly_errstr ( rcc ), rcc ) );
+ }
+ return rc;
+}
+
+
+static rc_t check_response_code( struct KNSManager *kns_mgr, CURL *curl, const char * action )
+{
+ rc_t rc = 0;
+ long response_code;
+
+ CURLcode rcc = kns_mgr->curl_easy_getinfo_fkt( curl, CURLINFO_RESPONSE_CODE, &response_code );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcAccessing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc,
+ "curl_easy_getinfo( $(a) ) failed with curl-error $(c)",
+ "a=%s,c=%d", action, rcc ) );
+ }
+ else
+ {
+ switch ( response_code )
+ {
+
+ case 0 : if ( !HTTP_RESPONSE_CODE_0_VALID ) /* no response code available */
+ {
+ rc = RC( rcFS, rcFile, rcAccessing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+ }
+ break;
+
+ case 200 : /* OK */
+ case 206 : /* Partial Content */
+ case 416 : break; /* Requested Range Not Satisfiable */
+
+ case 404 : rc = RC( rcFS, rcFile, rcAccessing, rcFileDesc, rcNotFound );
+ break;
+
+ default : rc = RC( rcFS, rcFile, rcAccessing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t prepare_curl( const KCurlFile *cself, ReadContext *ctx )
+{
+ rc_t rc = 0;
+
+ if ( !ctx->curl_handle_prepared )
+ {
+ ctx->curl_handle = cself->kns_mgr->curl_easy_init_fkt();
+ if ( ctx->curl_handle == NULL )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcParam, rcNull );
+ LOGERR( klogErr, rc, "cannot init curl" );
+ }
+ else
+ ctx->curl_handle_prepared = true;
+ }
+
+ if ( rc == 0 && cself->verbose )
+ rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_VERBOSE, 1, "CURLOPT_VERBOSE" );
+
+ if ( rc == 0 )
+ {
+ CURLcode rcc = cself->kns_mgr->curl_easy_setopt_fkt( ctx->curl_handle, CURLOPT_WRITEFUNCTION, KCurlFileCallback );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t) ... ptr ) failed", "t=%s", "CURLOPT_WRITEFUNCTION" ) );
+ }
+ }
+
+ if ( rc == 0 )
+ rc = set_curl_void_ptr( cself->kns_mgr, ctx->curl_handle, CURLOPT_URL, ( void * )cself->url, "CURLOPT_URL" );
+
+ if ( rc == 0 )
+ {
+ ctx->buffer = NULL;
+ ctx->buffer_size = 0;
+ ctx->num_read = 0;
+ }
+ return rc;
+}
+
+
+static rc_t get_content_length( struct KNSManager *kns_mgr, CURL *curl, uint64_t *size )
+{
+ rc_t rc = 0;
+ double double_size;
+ CURLcode rcc = kns_mgr->curl_easy_getinfo_fkt( curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &double_size );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ LOGERR( klogErr, rc, "curl_easy_getinfo( CURLINFO_CONTENT_LENGTH_DOWNLOAD ) failed" );
+ }
+ else
+ {
+ *size = double_size;
+ }
+ return rc;
+}
+
+
+static rc_t DiscoverFileSize_HTTP( const KCurlFile *cself, ReadContext *ctx, uint64_t *size )
+{
+ rc_t rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_HEADER, 1, "CURLOPT_HEADER" );
+
+ if ( rc == 0 )
+ rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_NOBODY, 1, "CURLOPT_NOBODY" );
+
+ if ( rc == 0 )
+ rc = set_curl_void_ptr( cself->kns_mgr, ctx->curl_handle, CURLOPT_WRITEDATA, ctx, "CURLOPT_WRITEDATA" );
+
+ if ( rc == 0 )
+ rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_FOLLOWLOCATION, 1, "CURLOPT_FOLLOWLOCATION" );
+
+ if ( rc == 0 )
+ rc = perform( cself->kns_mgr, ctx->curl_handle, "filesize http", 0, 0 );
+
+ if ( rc == 0 )
+ rc = check_response_code( cself->kns_mgr, ctx->curl_handle, "filesize http" );
+
+ if ( rc == 0 )
+ rc = get_content_length( cself->kns_mgr, ctx->curl_handle, size );
+
+ return rc;
+}
+
+static rc_t DiscoverFileSize_FTP( const KCurlFile *cself, ReadContext *ctx, uint64_t *size )
+{
+ rc_t rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_NOBODY, 1, "CURLOPT_NOBODY" );
+
+ if ( rc == 0 )
+ rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_FILETIME, 1, "CURLOPT_FILETIME" );
+
+ if ( rc == 0 )
+ rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_FOLLOWLOCATION, 1, "CURLOPT_FOLLOWLOCATION" );
+
+ if ( rc == 0 )
+ {
+ CURLcode rcc = cself->kns_mgr->curl_easy_setopt_fkt( ctx->curl_handle, CURLOPT_HEADERFUNCTION, dummy_callback );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t) ... ptr ) failed", "t=%s", "CURLOPT_HEADERFUNCTION" ) );
+ }
+ }
+
+ if ( rc == 0 )
+ rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_HEADER, 0, "CURLOPT_HEADER" );
+
+ if ( rc == 0 )
+ rc = perform( cself->kns_mgr, ctx->curl_handle, "filesize ftp", 0, 0 );
+
+ if ( rc == 0 )
+ rc = get_content_length( cself->kns_mgr, ctx->curl_handle, size );
+
+ return rc;
+}
+
+
+static rc_t KCurlFileDiscoverSize( const KCurlFile *cself, uint64_t *size )
+{
+ ReadContext ctx;
+ rc_t rc;
+
+ memset( &ctx, 0, sizeof ctx );
+ rc = prepare_curl( cself, &ctx );
+ if ( rc == 0 )
+ {
+ if ( cself->is_ftp )
+ rc = DiscoverFileSize_FTP( cself, &ctx, size );
+ else
+ rc = DiscoverFileSize_HTTP( cself, &ctx, size );
+
+ if ( rc == 0 )
+ {
+ KCurlFile *self = ( KCurlFile * )cself;
+
+ self->file_size = *size;
+ self->file_size_valid = true;
+ /* OUTMSG(( ">>>>>>>>>>>>>> and the file size is: %lu\n", self->file_size )); */
+ }
+
+ if ( ctx.curl_handle_prepared )
+ cself->kns_mgr->curl_easy_cleanup_fkt( ctx.curl_handle );
+ }
+ return rc;
+}
+
+
+static rc_t KCurlFileSize( const KCurlFile *self, uint64_t *size )
+{
+ rc_t rc = 0;
+ if ( self->file_size_valid )
+ *size = self->file_size;
+ else
+ rc = KCurlFileDiscoverSize( self, size );
+ return rc;
+}
+
+
+static rc_t KCurlFileSetSize( KCurlFile *self, uint64_t size )
+{
+ return RC ( rcFS, rcFile, rcUpdating, rcFile, rcReadonly );
+}
+
+
+static rc_t KCurlFileRead( const KCurlFile *cself, uint64_t pos,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ ReadContext ctx;
+ rc_t rc;
+
+ if ( cself->file_size_valid && cself->file_size > 0 )
+ {
+ /* we know the size of the remote file */
+ if ( pos >= cself->file_size )
+ {
+ /* the caller requested to read beyond the end of the file */
+ *num_read = 0;
+ return 0;
+ }
+ else if ( pos + bsize > cself->file_size )
+ {
+ /* the caller requested to start reading inside the file, but bsize reaches beyond the end of the file */
+ bsize = ( cself->file_size - pos );
+ }
+ }
+
+ ctx.curl_handle = cself->curl_handle;
+ ctx.curl_handle_prepared = true;
+ rc = prepare_curl( cself, &ctx );
+ if ( rc == 0 )
+ {
+ char s_range[ 64 ];
+ size_t s_range_writ;
+ uint64_t to = pos;
+ to += bsize;
+ to --;
+
+ /* perform range-read... */
+ rc = string_printf( s_range, sizeof s_range, &s_range_writ, "%lu-%lu", pos, to );
+ if ( rc == 0 )
+ {
+ ReadContext ctx;
+ CURLcode rcc;
+
+ ctx.buffer = buffer;
+ ctx.buffer_size = bsize;
+ ctx.num_read = 0;
+
+ rcc = cself->kns_mgr->curl_easy_setopt_fkt( cself->curl_handle, CURLOPT_WRITEDATA, (void *)&ctx );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+ LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_WRITEDATA ) failed" );
+ }
+
+ if ( rc == 0 )
+ rc = set_curl_long_option( cself->kns_mgr, cself->curl_handle, CURLOPT_CONNECTTIMEOUT, 10, "CURLOPT_CONNECTTIMEOUT" );
+ if ( rc == 0 )
+ rc = set_curl_long_option( cself->kns_mgr, cself->curl_handle, CURLOPT_TIMEOUT, 10, "CURLOPT_TIMEOUT" );
+ if ( rc == 0 )
+ rc = set_curl_long_option( cself->kns_mgr, cself->curl_handle, CURLOPT_FOLLOWLOCATION, 1, "CURLOPT_FOLLOWLOCATION" );
+
+ if ( rc == 0 )
+ {
+ rcc = cself->kns_mgr->curl_easy_setopt_fkt( cself->curl_handle, CURLOPT_RANGE, (void*)s_range );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+ LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_RANGE ) failed" );
+ }
+ }
+
+ if ( rc == 0 )
+ rc = perform( cself->kns_mgr, cself->curl_handle, "FileRead", pos, bsize );
+
+ if ( rc == 0 )
+ {
+ long response_code;
+ rcc = cself->kns_mgr->curl_easy_getinfo_fkt( cself->curl_handle, CURLINFO_RESPONSE_CODE, &response_code );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+ LOGERR( klogErr, rc, "curl_easy_getinfo( RESPONSE_CODE ) failed" );
+ }
+ else
+ {
+ if ( cself->is_ftp )
+ {
+ switch ( response_code )
+ {
+ case 0 : if ( !HTTP_RESPONSE_CODE_0_VALID ) /* no response code available */
+ {
+ rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+ }
+ break;
+
+ case 226 :
+ case 213 :
+ case 450 : /* Transfer aborted */
+ case 451 : break;
+
+ default : rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+ }
+ }
+ else
+ {
+ switch ( response_code )
+ {
+ case 0 : if ( !HTTP_RESPONSE_CODE_0_VALID ) /* no response code available */
+ {
+ rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+ }
+ break;
+
+ case 416 : /* Requested Range Not Satisfiable */
+ ctx.num_read = 0;
+ case 200 : /* OK */
+ case 206 : /* Partial Content */
+ break;
+
+ case 404 : rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcNotFound );
+ break;
+
+ default : rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+ }
+ }
+ }
+ }
+ if ( rc == 0 )
+ *num_read = ctx.num_read;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t KCurlFileWrite( KCurlFile *self, uint64_t pos,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ return RC ( rcFS, rcFile, rcUpdating, rcInterface, rcUnsupported );
+}
+
+
+static KFile_vt_v1 vtKCurlFile =
+{
+ /* version 1.0 */
+ 1, 0,
+
+ /* start minor version 0 methods */
+ KCurlFileDestroy,
+ KCurlFileGetSysFile,
+ KCurlFileRandomAccess,
+ KCurlFileSize,
+ KCurlFileSetSize,
+ KCurlFileRead,
+ KCurlFileWrite
+ /* end minor version 0 methods */
+};
+
+
+LIB_EXPORT rc_t CC KCurlFileMake( const KFile **fp, const char * url, bool verbose )
+{
+ rc_t rc = 0;
+ KCurlFile *f;
+
+ if ( url == NULL || url[ 0 ] == 0 )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ PLOGERR( klogInt, ( klogInt, rc, "invalid url >$(URL)<", "URL=%s", url ) );
+ }
+ else
+ {
+ size_t url_len = string_size( url ) + 1;
+ f = calloc ( ( sizeof *f ) + url_len, 1 );
+ if ( f == NULL )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+ LOGERR( klogErr, rc, "out of memory" );
+ }
+ else
+ {
+ rc = KNSManagerMake( &f->kns_mgr );
+ if ( rc == 0 )
+ {
+ rc = KNSManagerAvail( f->kns_mgr );
+ if ( rc == 0 )
+ {
+ rc = KFileInit( &f ->dad, (const union KFile_vt *)&vtKCurlFile, "KCurlFile", url, true, false );
+ if ( rc == 0 )
+ {
+ ReadContext ctx;
+ uint64_t file_size;
+
+ memset( &ctx, 0, sizeof( ctx ) ); /* zero-out the content */
+
+ string_copy( f->url, url_len, url, url_len );
+ f->verbose = verbose;
+ f->is_ftp = ( url_len >= 4 ) ? ( strcase_cmp ( f->url, url_len, "ftp:", 4, 4 ) == 0 ) : false;
+
+ rc = KCurlFileDiscoverSize( f, &file_size );
+
+ if ( rc == 0 )
+ {
+ rc = prepare_curl( f, &ctx );
+ if ( rc == 0 )
+ {
+ f->curl_handle = ctx.curl_handle;
+ *fp = & f -> dad;
+ return rc;
+ }
+ else
+ {
+ KCurlFileDestroy( f );
+ f = NULL;
+ }
+ }
+ }
+ }
+ }
+ free( f );
+ }
+ }
+ return rc;
+}
diff --git a/libs/kns/KCurlRequest.c b/libs/kns/KCurlRequest.c
new file mode 100644
index 0000000..58b6a3c
--- /dev/null
+++ b/libs/kns/KCurlRequest.c
@@ -0,0 +1,438 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/data-buffer.h>
+#include <kns/manager.h>
+#include <kns/KCurlRequest.h>
+
+#include "kns_mgr_priv.h"
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+
+static const char kcurlrequest_classname [] = "KCurlRequest";
+
+
+typedef struct KCurlRequest
+{
+ KRefcount refcount;
+ const struct KNSManager * kns_mgr;
+ CURL * curl_handle;
+ KDataBuffer fields;
+ uint64_t fields_chars;
+} KCurlRequest;
+
+
+static rc_t KCurlRequestSetUrl( struct KCurlRequest *self, const char * url )
+{
+ rc_t rc = 0;
+ CURLcode rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, CURLOPT_URL, (void *)url );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_URL ) failed" );
+ }
+ return rc;
+}
+
+
+static rc_t set_curl_long_option( struct KCurlRequest *self, CURLoption option, long int value, const char *err_txt )
+{
+ rc_t rc = 0;
+ CURLcode rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, option, value );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t), $(v) ) failed with curl-error $(e)",
+ "t=%s,v=%d,e=%d", err_txt, value, rcc ) );
+ }
+ return rc;
+}
+
+
+static rc_t set_verbose( struct KCurlRequest *self )
+{
+ return set_curl_long_option( self, CURLOPT_VERBOSE, 1, "CURLOPT_VERBOSE" );
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerMakeRequest( const struct KNSManager *kns_mgr, struct KCurlRequest **self, const char * url, bool verbose )
+{
+ rc_t rc = 0;
+ struct KCurlRequest *tmp = calloc ( sizeof *tmp, 1 );
+ if ( tmp == NULL )
+ {
+ rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+ LOGERR( klogErr, rc, "out of memory" );
+ }
+ else
+ {
+ rc = KNSManagerAvail( kns_mgr );
+ if ( rc == 0 )
+ {
+ tmp->kns_mgr = kns_mgr;
+ rc = KNSManagerAddRef ( kns_mgr );
+ if ( rc == 0 )
+ {
+ tmp->curl_handle = tmp->kns_mgr->curl_easy_init_fkt();
+ if ( tmp->curl_handle == NULL )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcParam, rcNull );
+ LOGERR( klogErr, rc, "cannot init curl" );
+ }
+ else
+ {
+ rc = KCurlRequestSetUrl( tmp, url );
+ if ( rc == 0 )
+ {
+ if ( verbose )
+ rc = set_verbose( tmp );
+ memset( &tmp->fields, 0, sizeof tmp->fields );
+ tmp->fields.elem_bits = 8;
+ if ( rc == 0 )
+ {
+ KRefcountInit( &tmp->refcount, 1, "KNS", "make", kcurlrequest_classname );
+ *self = tmp;
+ return rc; /* !!!! */
+ }
+ }
+ }
+ KNSManagerRelease( kns_mgr );
+ }
+ }
+ free( tmp );
+ }
+ return rc;
+}
+
+
+static rc_t KCurlRequestDestroy( struct KCurlRequest *self )
+{
+ rc_t rc;
+ self->kns_mgr->curl_easy_cleanup_fkt( self->curl_handle );
+ rc = KNSManagerRelease( self->kns_mgr );
+ KDataBufferWhack( &self->fields );
+ free ( self );
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddRef ( const struct KCurlRequest *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd( &self->refcount, kcurlrequest_classname ) )
+ {
+ case krefOkay:
+ break;
+ case krefZero:
+ return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcIncorrect);
+ case krefLimit:
+ return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcExhausted);
+ case krefNegative:
+ return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcInvalid);
+ default:
+ return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcUnknown);
+ }
+ }
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestRelease( const struct KCurlRequest *self )
+{
+ rc_t rc = 0;
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop( &self->refcount, kcurlrequest_classname ) )
+ {
+ case krefOkay:
+ case krefZero:
+ break;
+ case krefWhack:
+ rc = KCurlRequestDestroy( ( struct KCurlRequest * )self );
+ break;
+ case krefNegative:
+ return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcInvalid );
+ default:
+ rc = RC( rcNS, rcFile, rcAttaching, rcRefcount, rcUnknown );
+ break;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t perform( const struct KNSManager *kns_mgr, CURL *curl, const char * action )
+{
+ rc_t rc = 0;
+ CURLcode rcc = kns_mgr->curl_easy_perform_fkt( curl );
+ if ( rcc != CURLE_OK && rcc != CURLE_PARTIAL_FILE )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc,
+ "curl_easy_perform( $(a) ) failed with curl-error $(c)",
+ "a=%s,b=%d", action, rcc ) );
+ }
+ return rc;
+}
+
+
+static rc_t check_response_code( const struct KNSManager *kns_mgr, CURL *curl, const char * action )
+{
+ rc_t rc = 0;
+ long response_code;
+
+ CURLcode rcc = kns_mgr->curl_easy_getinfo_fkt( curl, CURLINFO_RESPONSE_CODE, &response_code );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc,
+ "curl_easy_getinfo( $(a) ) failed with curl-error $(c)",
+ "a=%s,c=%d", action, rcc ) );
+ }
+ else
+ {
+ switch ( response_code )
+ {
+ case 0 : /* no response code available */
+ case 200 : break; /* OK */
+
+ case 404 : rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcNotFound );
+ break;
+
+ default : rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddSFields( struct KCurlRequest *self, const String * fields )
+{
+ rc_t rc = 0;
+
+ if ( self == NULL )
+ return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+ if ( fields == NULL || fields->size == 0 )
+ return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+ if ( self->fields_chars == 0 )
+ {
+ rc = KDataBufferResize ( &self->fields, fields->size + 1 );
+ if ( rc == 0 )
+ {
+ memcpy( self->fields.base, fields->addr, fields->size );
+ ( (uint8_t *)self->fields.base)[ fields->size ] = 0;
+ self->fields_chars = fields->size;
+ }
+ }
+ else
+ {
+ rc = KDataBufferResize ( &self->fields, self->fields_chars + fields->size + 1 );
+ if ( rc == 0 )
+ {
+ ( (uint8_t *)self->fields.base)[ self->fields_chars ] = '&';
+ memcpy( &( ( (uint8_t *)self->fields.base)[ self->fields_chars + 1 ] ), fields->addr, fields->size );
+ self->fields_chars += ( fields->size + 1 );
+ ( (uint8_t *)self->fields.base)[ self->fields_chars ] = 0;
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddFields( struct KCurlRequest *self, const char * fields )
+{
+ String s;
+
+ if ( self == NULL )
+ return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+ if ( fields == NULL || fields[ 0 ] == 0 )
+ return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+ StringInitCString( &s, fields );
+ return KCurlRequestAddSFields( self, &s );
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddSField( struct KCurlRequest *self, const String * name, const String * value )
+{
+ rc_t rc = 0;
+ size_t needed;
+
+ if ( self == NULL )
+ return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+ if ( name == NULL || name->size == 0 || value == NULL || value->size == 0 )
+ return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+ needed = ( self->fields_chars + name->size + value->size + 3 );
+ rc = KDataBufferResize ( &self->fields, needed );
+ if ( rc == 0 )
+ {
+ size_t num_writ;
+ if ( self->fields_chars == 0 )
+ {
+ rc = string_printf ( ( char * )self->fields.base, needed, &num_writ,
+ "%S=%S", name, value );
+ }
+ else
+ {
+ uint8_t * dst = ( uint8_t * )self->fields.base;
+ rc = string_printf ( ( char * )( &dst[ self->fields_chars ] ), needed - self->fields_chars, &num_writ,
+ "&%S=%S", name, value );
+ }
+ if ( rc == 0 )
+ self->fields_chars += num_writ;
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddField( struct KCurlRequest *self, const char * name, const char * value )
+{
+ String s_name, s_value;
+
+ if ( self == NULL )
+ return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+ if ( name == NULL || name[ 0 ] == 0 || value == NULL || value[ 0 ] == 0 )
+ return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+ StringInitCString( &s_name, name );
+ StringInitCString( &s_value, value );
+ return KCurlRequestAddSField( self, &s_name, &s_value );
+}
+
+
+static rc_t KCurlRequestSetFields( struct KCurlRequest *self )
+{
+ rc_t rc = 0;
+ CURLcode rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, CURLOPT_POSTFIELDS, (void *)(self->fields.base) );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_POSTFIELDS ) failed" );
+ }
+ return rc;
+}
+
+
+typedef struct ReadContext
+{
+ KDataBuffer * buffer;
+ size_t num_read;
+} ReadContext;
+
+
+static size_t CC KCurlFileCallback( void *ptr, size_t size, size_t nmemb, void *data )
+{
+ rc_t rc = 0;
+ size_t given_bytes = size * nmemb; /* calculate the size given in ptr */
+ ReadContext *ctx = ( ReadContext * )data;
+ if ( ctx != NULL && ctx->buffer != NULL )
+ {
+ rc = KDataBufferResize ( ctx->buffer, ctx->num_read + given_bytes + 2 );
+ if ( rc == 0 )
+ {
+ memcpy( &( ( (uint8_t *)ctx->buffer->base )[ ctx->num_read ] ), ptr, given_bytes );
+ ctx->num_read += given_bytes;
+ }
+ }
+ return given_bytes;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestPerform( struct KCurlRequest *self, KDataBuffer * buffer )
+{
+ CURLcode rcc;
+ ReadContext ctx;
+ rc_t rc = 0;
+
+ if ( buffer == NULL )
+ return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+ memset ( buffer, 0, sizeof * buffer );
+
+ if ( self == NULL )
+ return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+
+ rc = KDataBufferMakeBytes ( buffer, 0 );
+ if ( rc != 0 )
+ return rc;
+
+ ctx.buffer = buffer;
+ ctx.num_read = 0;
+
+ rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, CURLOPT_WRITEDATA, (void *)&ctx );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_WRITEDATA ) failed" );
+ }
+
+ if ( rc == 0 )
+ {
+ CURLcode rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, CURLOPT_WRITEFUNCTION, KCurlFileCallback );
+ if ( rcc != CURLE_OK )
+ {
+ rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+ LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_WRITEFUNCTION ) failed" );
+ }
+ }
+
+ if ( rc == 0 )
+ rc = set_curl_long_option( self, CURLOPT_FOLLOWLOCATION, 1, "CURLOPT_FOLLOWLOCATION" );
+
+ if ( rc == 0 )
+ rc = KCurlRequestSetFields( self );
+
+ if ( rc == 0 )
+ rc = perform( self->kns_mgr, self->curl_handle, "POST request" );
+
+ if ( rc == 0 )
+ rc = check_response_code( self->kns_mgr, self->curl_handle, "POST request" );
+
+ if ( rc == 0 )
+ {
+ buffer->elem_count = ctx.num_read;
+ ( ( uint8_t * )buffer->base )[ ctx.num_read ] = 0;
+ }
+
+ return rc;
+}
diff --git a/libs/kns/Makefile b/libs/kns/Makefile
new file mode 100644
index 0000000..5000851
--- /dev/null
+++ b/libs/kns/Makefile
@@ -0,0 +1,125 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: all
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/kns
+
+INT_LIBS = \
+
+EXT_LIBS = \
+ libkns \
+ libkurl
+
+ALL_LIBS = \
+ $(INT_LIBS) \
+ $(EXT_LIBS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+
+# we are building it on all platforms now, because dependency on libcurl is removed
+all std: makedirs
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): makedirs
+ @ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+ @ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+ $(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# kns
+#
+$(LIBDIR)/libkns: $(addprefix $(LIBDIR)/libkns.,$(LIBEXT))
+
+KNS_SRC = \
+ kns_manager \
+ stream \
+ stream-from-files \
+ stream-from-streams \
+# sysstream \
+
+KNS_OBJ = \
+ $(addsuffix .$(LOBX),$(KNS_SRC))
+
+KNS_LIB = \
+ -lkfs \
+ -dklib
+
+$(LIBDIR)/libkns.$(SHLX): $(KNS_OBJ)
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(KNS_LIB)
+
+$(LIBDIR)/libkns.$(LIBX): $(KNS_OBJ)
+ $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(KNS_LIB)
+
+
+#-------------------------------------------------------------------------------
+# kurl
+#
+$(LIBDIR)/libkurl: $(addprefix $(LIBDIR)/libkurl.,$(LIBEXT))
+
+KURL_SRC = \
+ KCurlFile \
+ KCurlRequest \
+ url-fetcher \
+ url-fetcher-curl \
+ entrez-fetcher
+
+KURL_OBJ = \
+ $(addsuffix .$(LOBX),$(KURL_SRC))
+
+KURL_LIB = \
+ -skns \
+ -dkfs \
+ -dklib \
+ -dz
+
+$(LIBDIR)/libkurl.$(SHLX): $(KURL_OBJ)
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(KURL_LIB)
+
+$(LIBDIR)/libkurl.$(LIBX): $(KURL_OBJ)
+ $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(KURL_LIB)
diff --git a/libs/kns/curlhdr/curl.h b/libs/kns/curlhdr/curl.h
new file mode 100644
index 0000000..1cfc7fa
--- /dev/null
+++ b/libs/kns/curlhdr/curl.h
@@ -0,0 +1,1600 @@
+#ifndef __CURL_CURL_H
+#define __CURL_CURL_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel at haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: curl.h,v 1.1 2012/11/09 17:54:52 rodarmer Exp $
+ ***************************************************************************/
+
+/* If you have problems, all libcurl docs and details are found here:
+ http://curl.haxx.se/libcurl/
+*/
+
+#include "curlver.h" /* the libcurl version defines */
+
+#include <stdio.h>
+#include <limits.h>
+
+/* The include stuff here below is mainly for time_t! */
+#ifdef vms
+# include <types.h>
+# include <time.h>
+#else
+# include <sys/types.h>
+# include <time.h>
+#endif /* defined (vms) */
+
+typedef void CURL;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Decorate exportable functions for Win32 DLL linking.
+ * This avoids using a .def file for building libcurl.dll.
+ */
+#if (defined(WIN32) || defined(_WIN32)) && !defined(CURL_STATICLIB)
+#if defined(BUILDING_LIBCURL)
+#define CURL_EXTERN __declspec(dllexport)
+#else
+#define CURL_EXTERN __declspec(dllimport)
+#endif
+#else
+
+#ifdef CURL_HIDDEN_SYMBOLS
+/*
+ * This definition is used to make external definitions visibile in the
+ * shared library when symbols are hidden by default. It makes no
+ * difference when compiling applications whether this is set or not,
+ * only when compiling the library.
+ */
+#define CURL_EXTERN CURL_EXTERN_SYMBOL
+#else
+#define CURL_EXTERN
+#endif
+#endif
+
+/*
+ * We want the typedef curl_off_t setup for large file support on all
+ * platforms. We also provide a CURL_FORMAT_OFF_T define to use in *printf
+ * format strings when outputting a variable of type curl_off_t.
+ *
+ * Note: "pocc -Ze" is MSVC compatibily mode and this sets _MSC_VER!
+ */
+
+#if (defined(_MSC_VER) && !defined(__POCC__)) || (defined(__LCC__) && defined(WIN32))
+/* MSVC */
+#ifdef _WIN32_WCE
+ typedef long curl_off_t;
+#define CURL_FORMAT_OFF_T "%ld"
+#else
+ typedef signed __int64 curl_off_t;
+#define CURL_FORMAT_OFF_T "%I64d"
+#endif
+#else /* (_MSC_VER && !__POCC__) || (__LCC__ && WIN32) */
+#if (defined(__GNUC__) && defined(WIN32)) || defined(__WATCOMC__)
+/* gcc on windows or Watcom */
+ typedef long long curl_off_t;
+#define CURL_FORMAT_OFF_T "%I64d"
+#else /* GCC or Watcom on Windows */
+
+/* "normal" POSIX approach, do note that this does not necessarily mean that
+ the type is >32 bits, see the SIZEOF_CURL_OFF_T define for that! */
+ typedef off_t curl_off_t;
+
+/* Check a range of defines to detect large file support. On Linux it seems
+ none of these are set by default, so if you don't explicitly switches on
+ large file support, this define will be made for "small file" support. */
+#ifndef _FILE_OFFSET_BITS
+#define _FILE_OFFSET_BITS 0 /* to prevent warnings in the check below */
+#define UNDEF_FILE_OFFSET_BITS
+#endif
+#ifndef FILESIZEBITS
+#define FILESIZEBITS 0 /* to prevent warnings in the check below */
+#define UNDEF_FILESIZEBITS
+#endif
+
+#if defined(_LARGE_FILES) || (_FILE_OFFSET_BITS > 32) || (FILESIZEBITS > 32) \
+ || defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE)
+ /* For now, we assume at least one of these to be set for large files to
+ work! */
+#define CURL_FORMAT_OFF_T "%lld"
+#else /* LARGE_FILE support */
+#define CURL_FORMAT_OFF_T "%ld"
+#endif
+#endif /* GCC or Watcom on Windows */
+#endif /* (_MSC_VER && !__POCC__) || (__LCC__ && WIN32) */
+
+#ifdef UNDEF_FILE_OFFSET_BITS
+/* this was defined above for our checks, undefine it again */
+#undef _FILE_OFFSET_BITS
+#endif
+
+#ifdef UNDEF_FILESIZEBITS
+/* this was defined above for our checks, undefine it again */
+#undef FILESIZEBITS
+#endif
+
+struct curl_httppost {
+ struct curl_httppost *next; /* next entry in the list */
+ char *name; /* pointer to allocated name */
+ long namelength; /* length of name length */
+ char *contents; /* pointer to allocated data contents */
+ long contentslength; /* length of contents field */
+ char *buffer; /* pointer to allocated buffer contents */
+ long bufferlength; /* length of buffer field */
+ char *contenttype; /* Content-Type */
+ struct curl_slist* contentheader; /* list of extra headers for this form */
+ struct curl_httppost *more; /* if one field name has more than one
+ file, this link should link to following
+ files */
+ long flags; /* as defined below */
+#define HTTPPOST_FILENAME (1<<0) /* specified content is a file name */
+#define HTTPPOST_READFILE (1<<1) /* specified content is a file name */
+#define HTTPPOST_PTRNAME (1<<2) /* name is only stored pointer
+ do not free in formfree */
+#define HTTPPOST_PTRCONTENTS (1<<3) /* contents is only stored pointer
+ do not free in formfree */
+#define HTTPPOST_BUFFER (1<<4) /* upload file from buffer */
+#define HTTPPOST_PTRBUFFER (1<<5) /* upload file from pointer contents */
+
+ char *showfilename; /* The file name to show. If not set, the
+ actual file name will be used (if this
+ is a file part) */
+};
+
+typedef int (*curl_progress_callback)(void *clientp,
+ double dltotal,
+ double dlnow,
+ double ultotal,
+ double ulnow);
+
+ /* Tests have proven that 20K is a very bad buffer size for uploads on
+ Windows, while 16K for some odd reason performed a lot better. */
+#define CURL_MAX_WRITE_SIZE 16384
+
+typedef size_t (*curl_write_callback)(char *buffer,
+ size_t size,
+ size_t nitems,
+ void *outstream);
+
+/* This is a return code for the read callback that, when returned, will
+ signal libcurl to immediately abort the current transfer. */
+#define CURL_READFUNC_ABORT 0x10000000
+typedef size_t (*curl_read_callback)(char *buffer,
+ size_t size,
+ size_t nitems,
+ void *instream);
+
+
+#ifndef CURL_NO_OLDIES
+ /* not used since 7.10.8, will be removed in a future release */
+typedef int (*curl_passwd_callback)(void *clientp,
+ const char *prompt,
+ char *buffer,
+ int buflen);
+#endif
+
+typedef enum {
+ CURLIOE_OK, /* I/O operation successful */
+ CURLIOE_UNKNOWNCMD, /* command was unknown to callback */
+ CURLIOE_FAILRESTART, /* failed to restart the read */
+ CURLIOE_LAST /* never use */
+} curlioerr;
+
+typedef enum {
+ CURLIOCMD_NOP, /* no operation */
+ CURLIOCMD_RESTARTREAD, /* restart the read stream from start */
+ CURLIOCMD_LAST /* never use */
+} curliocmd;
+
+typedef curlioerr (*curl_ioctl_callback)(CURL *handle,
+ int cmd,
+ void *clientp);
+
+/*
+ * The following typedef's are signatures of malloc, free, realloc, strdup and
+ * calloc respectively. Function pointers of these types can be passed to the
+ * curl_global_init_mem() function to set user defined memory management
+ * callback routines.
+ */
+typedef void *(*curl_malloc_callback)(size_t size);
+typedef void (*curl_free_callback)(void *ptr);
+typedef void *(*curl_realloc_callback)(void *ptr, size_t size);
+typedef char *(*curl_strdup_callback)(const char *str);
+typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size);
+
+/* the kind of data that is passed to information_callback*/
+typedef enum {
+ CURLINFO_TEXT = 0,
+ CURLINFO_HEADER_IN, /* 1 */
+ CURLINFO_HEADER_OUT, /* 2 */
+ CURLINFO_DATA_IN, /* 3 */
+ CURLINFO_DATA_OUT, /* 4 */
+ CURLINFO_SSL_DATA_IN, /* 5 */
+ CURLINFO_SSL_DATA_OUT, /* 6 */
+ CURLINFO_END
+} curl_infotype;
+
+typedef int (*curl_debug_callback)
+ (CURL *handle, /* the handle/transfer this concerns */
+ curl_infotype type, /* what kind of data */
+ char *data, /* points to the data */
+ size_t size, /* size of the data pointed to */
+ void *userptr); /* whatever the user please */
+
+/* All possible error codes from all sorts of curl functions. Future versions
+ may return other values, stay prepared.
+
+ Always add new return codes last. Never *EVER* remove any. The return
+ codes must remain the same!
+ */
+
+typedef enum {
+ CURLE_OK = 0,
+ CURLE_UNSUPPORTED_PROTOCOL, /* 1 */
+ CURLE_FAILED_INIT, /* 2 */
+ CURLE_URL_MALFORMAT, /* 3 */
+ CURLE_URL_MALFORMAT_USER, /* 4 - NOT USED */
+ CURLE_COULDNT_RESOLVE_PROXY, /* 5 */
+ CURLE_COULDNT_RESOLVE_HOST, /* 6 */
+ CURLE_COULDNT_CONNECT, /* 7 */
+ CURLE_FTP_WEIRD_SERVER_REPLY, /* 8 */
+ CURLE_FTP_ACCESS_DENIED, /* 9 a service was denied by the FTP server
+ due to lack of access - when login fails
+ this is not returned. */
+ CURLE_FTP_USER_PASSWORD_INCORRECT, /* 10 - NOT USED */
+ CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */
+ CURLE_FTP_WEIRD_USER_REPLY, /* 12 */
+ CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */
+ CURLE_FTP_WEIRD_227_FORMAT, /* 14 */
+ CURLE_FTP_CANT_GET_HOST, /* 15 */
+ CURLE_FTP_CANT_RECONNECT, /* 16 */
+ CURLE_FTP_COULDNT_SET_BINARY, /* 17 */
+ CURLE_PARTIAL_FILE, /* 18 */
+ CURLE_FTP_COULDNT_RETR_FILE, /* 19 */
+ CURLE_FTP_WRITE_ERROR, /* 20 */
+ CURLE_FTP_QUOTE_ERROR, /* 21 */
+ CURLE_HTTP_RETURNED_ERROR, /* 22 */
+ CURLE_WRITE_ERROR, /* 23 */
+ CURLE_MALFORMAT_USER, /* 24 - NOT USED */
+ CURLE_FTP_COULDNT_STOR_FILE, /* 25 - failed FTP upload */
+ CURLE_READ_ERROR, /* 26 - could open/read from file */
+ CURLE_OUT_OF_MEMORY, /* 27 */
+ /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error
+ instead of a memory allocation error if CURL_DOES_CONVERSIONS
+ is defined
+ */
+ CURLE_OPERATION_TIMEOUTED, /* 28 - the timeout time was reached */
+ CURLE_FTP_COULDNT_SET_ASCII, /* 29 - TYPE A failed */
+ CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */
+ CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */
+ CURLE_FTP_COULDNT_GET_SIZE, /* 32 - the SIZE command failed */
+ CURLE_HTTP_RANGE_ERROR, /* 33 - RANGE "command" didn't work */
+ CURLE_HTTP_POST_ERROR, /* 34 */
+ CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */
+ CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */
+ CURLE_FILE_COULDNT_READ_FILE, /* 37 */
+ CURLE_LDAP_CANNOT_BIND, /* 38 */
+ CURLE_LDAP_SEARCH_FAILED, /* 39 */
+ CURLE_LIBRARY_NOT_FOUND, /* 40 */
+ CURLE_FUNCTION_NOT_FOUND, /* 41 */
+ CURLE_ABORTED_BY_CALLBACK, /* 42 */
+ CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */
+ CURLE_BAD_CALLING_ORDER, /* 44 - NOT USED */
+ CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */
+ CURLE_BAD_PASSWORD_ENTERED, /* 46 - NOT USED */
+ CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */
+ CURLE_UNKNOWN_TELNET_OPTION, /* 48 - User specified an unknown option */
+ CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */
+ CURLE_OBSOLETE, /* 50 - NOT USED */
+ CURLE_SSL_PEER_CERTIFICATE, /* 51 - peer's certificate wasn't ok */
+ CURLE_GOT_NOTHING, /* 52 - when this is a specific error */
+ CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */
+ CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as
+ default */
+ CURLE_SEND_ERROR, /* 55 - failed sending network data */
+ CURLE_RECV_ERROR, /* 56 - failure in receiving network data */
+ CURLE_SHARE_IN_USE, /* 57 - share is in use */
+ CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */
+ CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */
+ CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */
+ CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized transfer encoding */
+ CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */
+ CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */
+ CURLE_FTP_SSL_FAILED, /* 64 - Requested FTP SSL level failed */
+ CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind
+ that failed */
+ CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */
+ CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not
+ accepted and we failed to login */
+ CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */
+ CURLE_TFTP_PERM, /* 69 - permission problem on server */
+ CURLE_TFTP_DISKFULL, /* 70 - out of disk space on server */
+ CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */
+ CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */
+ CURLE_TFTP_EXISTS, /* 73 - File already exists */
+ CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */
+ CURLE_CONV_FAILED, /* 75 - conversion failed */
+ CURLE_CONV_REQD, /* 76 - caller must register conversion
+ callbacks using curl_easy_setopt options
+ CURLOPT_CONV_FROM_NETWORK_FUNCTION,
+ CURLOPT_CONV_TO_NETWORK_FUNCTION, and
+ CURLOPT_CONV_FROM_UTF8_FUNCTION */
+ CURLE_SSL_CRL_BADFILE = 82, /* 82 - could not load CRL file, missing or
+ wrong format (Added in 7.19.0) */
+ CURL_LAST /* never use! */
+} CURLcode;
+
+/* This prototype applies to all conversion callbacks */
+typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length);
+
+typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */
+ void *ssl_ctx, /* actually an
+ OpenSSL SSL_CTX */
+ void *userptr);
+
+/* Make a spelling correction for the operation timed-out define */
+#define CURLE_OPERATION_TIMEDOUT CURLE_OPERATION_TIMEOUTED
+
+#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
+ the obsolete stuff removed! */
+/* backwards compatibility with older names */
+#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR
+#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED
+#endif
+
+typedef enum {
+ CURLPROXY_HTTP = 0,
+ CURLPROXY_SOCKS4 = 4,
+ CURLPROXY_SOCKS5 = 5
+} curl_proxytype;
+
+#define CURLAUTH_NONE 0 /* nothing */
+#define CURLAUTH_BASIC (1<<0) /* Basic (default) */
+#define CURLAUTH_DIGEST (1<<1) /* Digest */
+#define CURLAUTH_GSSNEGOTIATE (1<<2) /* GSS-Negotiate */
+#define CURLAUTH_NTLM (1<<3) /* NTLM */
+#define CURLAUTH_ANY ~0 /* all types set */
+#define CURLAUTH_ANYSAFE (~CURLAUTH_BASIC)
+
+#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
+ the obsolete stuff removed! */
+/* this was the error code 50 in 7.7.3 and a few earlier versions, this
+ is no longer used by libcurl but is instead #defined here only to not
+ make programs break */
+#define CURLE_ALREADY_COMPLETE 99999
+
+/* These are just to make older programs not break: */
+#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE
+#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME
+#endif
+
+#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */
+#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */
+#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */
+
+#define CURL_ERROR_SIZE 256
+
+/* parameter for the CURLOPT_FTP_SSL option */
+typedef enum {
+ CURLFTPSSL_NONE, /* do not attempt to use SSL */
+ CURLFTPSSL_TRY, /* try using SSL, proceed anyway otherwise */
+ CURLFTPSSL_CONTROL, /* SSL for the control connection or fail */
+ CURLFTPSSL_ALL, /* SSL for all communication or fail */
+ CURLFTPSSL_LAST /* not an option, never use */
+} curl_ftpssl;
+
+/* parameter for the CURLOPT_FTPSSLAUTH option */
+typedef enum {
+ CURLFTPAUTH_DEFAULT, /* let libcurl decide */
+ CURLFTPAUTH_SSL, /* use "AUTH SSL" */
+ CURLFTPAUTH_TLS, /* use "AUTH TLS" */
+ CURLFTPAUTH_LAST /* not an option, never use */
+} curl_ftpauth;
+
+/* parameter for the CURLOPT_FTP_FILEMETHOD option */
+typedef enum {
+ CURLFTPMETHOD_DEFAULT, /* let libcurl pick */
+ CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */
+ CURLFTPMETHOD_NOCWD, /* no CWD at all */
+ CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */
+ CURLFTPMETHOD_LAST /* not an option, never use */
+} curl_ftpmethod;
+
+/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */
+#define CURLPROTO_HTTP (1<<0)
+#define CURLPROTO_HTTPS (1<<1)
+#define CURLPROTO_FTP (1<<2)
+#define CURLPROTO_FTPS (1<<3)
+#define CURLPROTO_TELNET (1<<6)
+#define CURLPROTO_LDAP (1<<7)
+#define CURLPROTO_LDAPS (1<<8)
+#define CURLPROTO_DICT (1<<9)
+#define CURLPROTO_FILE (1<<10)
+#define CURLPROTO_TFTP (1<<11)
+#define CURLPROTO_ALL (~0) /* enable everything */
+
+/* long may be 32 or 64 bits, but we should never depend on anything else
+ but 32 */
+#define CURLOPTTYPE_LONG 0
+#define CURLOPTTYPE_OBJECTPOINT 10000
+#define CURLOPTTYPE_FUNCTIONPOINT 20000
+#define CURLOPTTYPE_OFF_T 30000
+
+/* name is uppercase CURLOPT_<name>,
+ type is one of the defined CURLOPTTYPE_<type>
+ number is unique identifier */
+#ifdef CINIT
+#undef CINIT
+#endif
+/*
+ * Figure out if we can use the ## operator, which is supported by ISO/ANSI C
+ * and C++. Some compilers support it without setting __STDC__ or __cplusplus
+ * so we need to carefully check for them too. We don't use configure-checks
+ * for these since we want these headers to remain generic and working for all
+ * platforms.
+ */
+#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
+ defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
+ defined(__POCC__) || defined(__SALFORDC__)
+ /* This compiler is believed to have an ISO compatible preprocessor */
+#define CURL_ISOCPP
+#else
+ /* This compiler is believed NOT to have an ISO compatible preprocessor */
+#undef CURL_ISOCPP
+#endif
+
+#ifdef CURL_ISOCPP
+#define CINIT(name,type,number) CURLOPT_ ## name = CURLOPTTYPE_ ## type + number
+#else
+/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
+#define LONG CURLOPTTYPE_LONG
+#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT
+#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
+#define OFF_T CURLOPTTYPE_OFF_T
+#define CINIT(name,type,number) CURLOPT_/**/name = type + number
+#endif
+
+/*
+ * This macro-mania below setups the CURLOPT_[what] enum, to be used with
+ * curl_easy_setopt(). The first argument in the CINIT() macro is the [what]
+ * word.
+ */
+
+typedef enum {
+ /* This is the FILE * or void * the regular output should be written to. */
+ CINIT(FILE, OBJECTPOINT, 1),
+
+ /* The full URL to get/put */
+ CINIT(URL, OBJECTPOINT, 2),
+
+ /* Port number to connect to, if other than default. */
+ CINIT(PORT, LONG, 3),
+
+ /* Name of proxy to use. */
+ CINIT(PROXY, OBJECTPOINT, 4),
+
+ /* "name:password" to use when fetching. */
+ CINIT(USERPWD, OBJECTPOINT, 5),
+
+ /* "name:password" to use with proxy. */
+ CINIT(PROXYUSERPWD, OBJECTPOINT, 6),
+
+ /* Range to get, specified as an ASCII string. */
+ CINIT(RANGE, OBJECTPOINT, 7),
+
+ /* not used */
+
+ /* Specified file stream to upload from (use as input): */
+ CINIT(INFILE, OBJECTPOINT, 9),
+
+ /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE
+ * bytes big. If this is not used, error messages go to stderr instead: */
+ CINIT(ERRORBUFFER, OBJECTPOINT, 10),
+
+ /* Function that will be called to store the output (instead of fwrite). The
+ * parameters will use fwrite() syntax, make sure to follow them. */
+ CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),
+
+ /* Function that will be called to read the input (instead of fread). The
+ * parameters will use fread() syntax, make sure to follow them. */
+ CINIT(READFUNCTION, FUNCTIONPOINT, 12),
+
+ /* Time-out the read operation after this amount of seconds */
+ CINIT(TIMEOUT, LONG, 13),
+
+ /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about
+ * how large the file being sent really is. That allows better error
+ * checking and better verifies that the upload was succcessful. -1 means
+ * unknown size.
+ *
+ * For large file support, there is also a _LARGE version of the key
+ * which takes an off_t type, allowing platforms with larger off_t
+ * sizes to handle larger files. See below for INFILESIZE_LARGE.
+ */
+ CINIT(INFILESIZE, LONG, 14),
+
+ /* POST input fields. */
+ CINIT(POSTFIELDS, OBJECTPOINT, 15),
+
+ /* Set the referer page (needed by some CGIs) */
+ CINIT(REFERER, OBJECTPOINT, 16),
+
+ /* Set the FTP PORT string (interface name, named or numerical IP address)
+ Use i.e '-' to use default address. */
+ CINIT(FTPPORT, OBJECTPOINT, 17),
+
+ /* Set the User-Agent string (examined by some CGIs) */
+ CINIT(USERAGENT, OBJECTPOINT, 18),
+
+ /* If the download receives less than "low speed limit" bytes/second
+ * during "low speed time" seconds, the operations is aborted.
+ * You could i.e if you have a pretty high speed connection, abort if
+ * it is less than 2000 bytes/sec during 20 seconds.
+ */
+
+ /* Set the "low speed limit" */
+ CINIT(LOW_SPEED_LIMIT, LONG , 19),
+
+ /* Set the "low speed time" */
+ CINIT(LOW_SPEED_TIME, LONG, 20),
+
+ /* Set the continuation offset.
+ *
+ * Note there is also a _LARGE version of this key which uses
+ * off_t types, allowing for large file offsets on platforms which
+ * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE.
+ */
+ CINIT(RESUME_FROM, LONG, 21),
+
+ /* Set cookie in request: */
+ CINIT(COOKIE, OBJECTPOINT, 22),
+
+ /* This points to a linked list of headers, struct curl_slist kind */
+ CINIT(HTTPHEADER, OBJECTPOINT, 23),
+
+ /* This points to a linked list of post entries, struct HttpPost */
+ CINIT(HTTPPOST, OBJECTPOINT, 24),
+
+ /* name of the file keeping your private SSL-certificate */
+ CINIT(SSLCERT, OBJECTPOINT, 25),
+
+ /* password for the SSL-private key, keep this for compatibility */
+ CINIT(SSLCERTPASSWD, OBJECTPOINT, 26),
+ /* password for the SSL private key */
+ CINIT(SSLKEYPASSWD, OBJECTPOINT, 26),
+
+ /* send TYPE parameter? */
+ CINIT(CRLF, LONG, 27),
+
+ /* send linked-list of QUOTE commands */
+ CINIT(QUOTE, OBJECTPOINT, 28),
+
+ /* send FILE * or void * to store headers to, if you use a callback it
+ is simply passed to the callback unmodified */
+ CINIT(WRITEHEADER, OBJECTPOINT, 29),
+
+ /* point to a file to read the initial cookies from, also enables
+ "cookie awareness" */
+ CINIT(COOKIEFILE, OBJECTPOINT, 31),
+
+ /* What version to specifly try to use.
+ See CURL_SSLVERSION defines below. */
+ CINIT(SSLVERSION, LONG, 32),
+
+ /* What kind of HTTP time condition to use, see defines */
+ CINIT(TIMECONDITION, LONG, 33),
+
+ /* Time to use with the above condition. Specified in number of seconds
+ since 1 Jan 1970 */
+ CINIT(TIMEVALUE, LONG, 34),
+
+ /* 35 = OBSOLETE */
+
+ /* Custom request, for customizing the get command like
+ HTTP: DELETE, TRACE and others
+ FTP: to use a different list command
+ */
+ CINIT(CUSTOMREQUEST, OBJECTPOINT, 36),
+
+ /* HTTP request, for odd commands like DELETE, TRACE and others */
+ CINIT(STDERR, OBJECTPOINT, 37),
+
+ /* 38 is not used */
+
+ /* send linked-list of post-transfer QUOTE commands */
+ CINIT(POSTQUOTE, OBJECTPOINT, 39),
+
+ /* Pass a pointer to string of the output using full variable-replacement
+ as described elsewhere. */
+ CINIT(WRITEINFO, OBJECTPOINT, 40),
+
+ CINIT(VERBOSE, LONG, 41), /* talk a lot */
+ CINIT(HEADER, LONG, 42), /* throw the header out too */
+ CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */
+ CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */
+ CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 300 */
+ CINIT(UPLOAD, LONG, 46), /* this is an upload */
+ CINIT(POST, LONG, 47), /* HTTP POST method */
+ CINIT(FTPLISTONLY, LONG, 48), /* Use NLST when listing ftp dir */
+
+ CINIT(FTPAPPEND, LONG, 50), /* Append instead of overwrite on upload! */
+
+ /* Specify whether to read the user+password from the .netrc or the URL.
+ * This must be one of the CURL_NETRC_* enums below. */
+ CINIT(NETRC, LONG, 51),
+
+ CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */
+
+ CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */
+ CINIT(PUT, LONG, 54), /* HTTP PUT */
+
+ /* 55 = OBSOLETE */
+
+ /* Function that will be called instead of the internal progress display
+ * function. This function should be defined as the curl_progress_callback
+ * prototype defines. */
+ CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),
+
+ /* Data passed to the progress callback */
+ CINIT(PROGRESSDATA, OBJECTPOINT, 57),
+
+ /* We want the referer field set automatically when following locations */
+ CINIT(AUTOREFERER, LONG, 58),
+
+ /* Port of the proxy, can be set in the proxy string as well with:
+ "[host]:[port]" */
+ CINIT(PROXYPORT, LONG, 59),
+
+ /* size of the POST input data, if strlen() is not good to use */
+ CINIT(POSTFIELDSIZE, LONG, 60),
+
+ /* tunnel non-http operations through a HTTP proxy */
+ CINIT(HTTPPROXYTUNNEL, LONG, 61),
+
+ /* Set the interface string to use as outgoing network interface */
+ CINIT(INTERFACE, OBJECTPOINT, 62),
+
+ /* Set the krb4 security level, this also enables krb4 awareness. This is a
+ * string, 'clear', 'safe', 'confidential' or 'private'. If the string is
+ * set but doesn't match one of these, 'private' will be used. */
+ CINIT(KRB4LEVEL, OBJECTPOINT, 63),
+
+ /* Set if we should verify the peer in ssl handshake, set 1 to verify. */
+ CINIT(SSL_VERIFYPEER, LONG, 64),
+
+ /* The CApath or CAfile used to validate the peer certificate
+ this option is used only if SSL_VERIFYPEER is true */
+ CINIT(CAINFO, OBJECTPOINT, 65),
+
+ /* 66 = OBSOLETE */
+ /* 67 = OBSOLETE */
+
+ /* Maximum number of http redirects to follow */
+ CINIT(MAXREDIRS, LONG, 68),
+
+ /* Pass a long set to 1 to get the date of the requested document (if
+ possible)! Pass a zero to shut it off. */
+ CINIT(FILETIME, LONG, 69),
+
+ /* This points to a linked list of telnet options */
+ CINIT(TELNETOPTIONS, OBJECTPOINT, 70),
+
+ /* Max amount of cached alive connections */
+ CINIT(MAXCONNECTS, LONG, 71),
+
+ /* What policy to use when closing connections when the cache is filled
+ up */
+ CINIT(CLOSEPOLICY, LONG, 72),
+
+ /* 73 = OBSOLETE */
+
+ /* Set to explicitly use a new connection for the upcoming transfer.
+ Do not use this unless you're absolutely sure of this, as it makes the
+ operation slower and is less friendly for the network. */
+ CINIT(FRESH_CONNECT, LONG, 74),
+
+ /* Set to explicitly forbid the upcoming transfer's connection to be re-used
+ when done. Do not use this unless you're absolutely sure of this, as it
+ makes the operation slower and is less friendly for the network. */
+ CINIT(FORBID_REUSE, LONG, 75),
+
+ /* Set to a file name that contains random data for libcurl to use to
+ seed the random engine when doing SSL connects. */
+ CINIT(RANDOM_FILE, OBJECTPOINT, 76),
+
+ /* Set to the Entropy Gathering Daemon socket pathname */
+ CINIT(EGDSOCKET, OBJECTPOINT, 77),
+
+ /* Time-out connect operations after this amount of seconds, if connects
+ are OK within this time, then fine... This only aborts the connect
+ phase. [Only works on unix-style/SIGALRM operating systems] */
+ CINIT(CONNECTTIMEOUT, LONG, 78),
+
+ /* Function that will be called to store headers (instead of fwrite). The
+ * parameters will use fwrite() syntax, make sure to follow them. */
+ CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
+
+ /* Set this to force the HTTP request to get back to GET. Only really usable
+ if POST, PUT or a custom request have been used first.
+ */
+ CINIT(HTTPGET, LONG, 80),
+
+ /* Set if we should verify the Common name from the peer certificate in ssl
+ * handshake, set 1 to check existence, 2 to ensure that it matches the
+ * provided hostname. */
+ CINIT(SSL_VERIFYHOST, LONG, 81),
+
+ /* Specify which file name to write all known cookies in after completed
+ operation. Set file name to "-" (dash) to make it go to stdout. */
+ CINIT(COOKIEJAR, OBJECTPOINT, 82),
+
+ /* Specify which SSL ciphers to use */
+ CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83),
+
+ /* Specify which HTTP version to use! This must be set to one of the
+ CURL_HTTP_VERSION* enums set below. */
+ CINIT(HTTP_VERSION, LONG, 84),
+
+ /* Specificly switch on or off the FTP engine's use of the EPSV command. By
+ default, that one will always be attempted before the more traditional
+ PASV command. */
+ CINIT(FTP_USE_EPSV, LONG, 85),
+
+ /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
+ CINIT(SSLCERTTYPE, OBJECTPOINT, 86),
+
+ /* name of the file keeping your private SSL-key */
+ CINIT(SSLKEY, OBJECTPOINT, 87),
+
+ /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
+ CINIT(SSLKEYTYPE, OBJECTPOINT, 88),
+
+ /* crypto engine for the SSL-sub system */
+ CINIT(SSLENGINE, OBJECTPOINT, 89),
+
+ /* set the crypto engine for the SSL-sub system as default
+ the param has no meaning...
+ */
+ CINIT(SSLENGINE_DEFAULT, LONG, 90),
+
+ /* Non-zero value means to use the global dns cache */
+ CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* To becomeO BSOLETE soon */
+
+ /* DNS cache timeout */
+ CINIT(DNS_CACHE_TIMEOUT, LONG, 92),
+
+ /* send linked-list of pre-transfer QUOTE commands (Wesley Laxton)*/
+ CINIT(PREQUOTE, OBJECTPOINT, 93),
+
+ /* set the debug function */
+ CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94),
+
+ /* set the data for the debug function */
+ CINIT(DEBUGDATA, OBJECTPOINT, 95),
+
+ /* mark this as start of a cookie session */
+ CINIT(COOKIESESSION, LONG, 96),
+
+ /* The CApath directory used to validate the peer certificate
+ this option is used only if SSL_VERIFYPEER is true */
+ CINIT(CAPATH, OBJECTPOINT, 97),
+
+ /* Instruct libcurl to use a smaller receive buffer */
+ CINIT(BUFFERSIZE, LONG, 98),
+
+ /* Instruct libcurl to not use any signal/alarm handlers, even when using
+ timeouts. This option is useful for multi-threaded applications.
+ See libcurl-the-guide for more background information. */
+ CINIT(NOSIGNAL, LONG, 99),
+
+ /* Provide a CURLShare for mutexing non-ts data */
+ CINIT(SHARE, OBJECTPOINT, 100),
+
+ /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default),
+ CURLPROXY_SOCKS4 and CURLPROXY_SOCKS5. */
+ CINIT(PROXYTYPE, LONG, 101),
+
+ /* Set the Accept-Encoding string. Use this to tell a server you would like
+ the response to be compressed. */
+ CINIT(ENCODING, OBJECTPOINT, 102),
+
+ /* Set pointer to private data */
+ CINIT(PRIVATE, OBJECTPOINT, 103),
+
+ /* Set aliases for HTTP 200 in the HTTP Response header */
+ CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
+
+ /* Continue to send authentication (user+password) when following locations,
+ even when hostname changed. This can potentionally send off the name
+ and password to whatever host the server decides. */
+ CINIT(UNRESTRICTED_AUTH, LONG, 105),
+
+ /* Specificly switch on or off the FTP engine's use of the EPRT command ( it
+ also disables the LPRT attempt). By default, those ones will always be
+ attempted before the good old traditional PORT command. */
+ CINIT(FTP_USE_EPRT, LONG, 106),
+
+ /* Set this to a bitmask value to enable the particular authentications
+ methods you like. Use this in combination with CURLOPT_USERPWD.
+ Note that setting multiple bits may cause extra network round-trips. */
+ CINIT(HTTPAUTH, LONG, 107),
+
+ /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx
+ in second argument. The function must be matching the
+ curl_ssl_ctx_callback proto. */
+ CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108),
+
+ /* Set the userdata for the ssl context callback function's third
+ argument */
+ CINIT(SSL_CTX_DATA, OBJECTPOINT, 109),
+
+ /* FTP Option that causes missing dirs to be created on the remote server */
+ CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110),
+
+ /* Set this to a bitmask value to enable the particular authentications
+ methods you like. Use this in combination with CURLOPT_PROXYUSERPWD.
+ Note that setting multiple bits may cause extra network round-trips. */
+ CINIT(PROXYAUTH, LONG, 111),
+
+ /* FTP option that changes the timeout, in seconds, associated with
+ getting a response. This is different from transfer timeout time and
+ essentially places a demand on the FTP server to acknowledge commands
+ in a timely manner. */
+ CINIT(FTP_RESPONSE_TIMEOUT, LONG , 112),
+
+ /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to
+ tell libcurl to resolve names to those IP versions only. This only has
+ affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
+ CINIT(IPRESOLVE, LONG, 113),
+
+ /* Set this option to limit the size of a file that will be downloaded from
+ an HTTP or FTP server.
+
+ Note there is also _LARGE version which adds large file support for
+ platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */
+ CINIT(MAXFILESIZE, LONG, 114),
+
+ /* See the comment for INFILESIZE above, but in short, specifies
+ * the size of the file being uploaded. -1 means unknown.
+ */
+ CINIT(INFILESIZE_LARGE, OFF_T, 115),
+
+ /* Sets the continuation offset. There is also a LONG version of this;
+ * look above for RESUME_FROM.
+ */
+ CINIT(RESUME_FROM_LARGE, OFF_T, 116),
+
+ /* Sets the maximum size of data that will be downloaded from
+ * an HTTP or FTP server. See MAXFILESIZE above for the LONG version.
+ */
+ CINIT(MAXFILESIZE_LARGE, OFF_T, 117),
+
+ /* Set this option to the file name of your .netrc file you want libcurl
+ to parse (using the CURLOPT_NETRC option). If not set, libcurl will do
+ a poor attempt to find the user's home directory and check for a .netrc
+ file in there. */
+ CINIT(NETRC_FILE, OBJECTPOINT, 118),
+
+ /* Enable SSL/TLS for FTP, pick one of:
+ CURLFTPSSL_TRY - try using SSL, proceed anyway otherwise
+ CURLFTPSSL_CONTROL - SSL for the control connection or fail
+ CURLFTPSSL_ALL - SSL for all communication or fail
+ */
+ CINIT(FTP_SSL, LONG, 119),
+
+ /* The _LARGE version of the standard POSTFIELDSIZE option */
+ CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120),
+
+ /* Enable/disable the TCP Nagle algorithm */
+ CINIT(TCP_NODELAY, LONG, 121),
+
+ /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+
+ /* When doing 3rd party transfer, set the source user and password with
+ this */
+ CINIT(SOURCE_USERPWD, OBJECTPOINT, 123),
+
+ /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+ /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+ /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+
+ /* When doing 3rd party transfer, set the source pre-quote linked list
+ of commands with this */
+ CINIT(SOURCE_PREQUOTE, OBJECTPOINT, 127),
+
+ /* When doing 3rd party transfer, set the source post-quote linked list
+ of commands with this */
+ CINIT(SOURCE_POSTQUOTE, OBJECTPOINT, 128),
+
+ /* When FTP over SSL/TLS is selected (with CURLOPT_FTP_SSL), this option
+ can be used to change libcurl's default action which is to first try
+ "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK
+ response has been received.
+
+ Available parameters are:
+ CURLFTPAUTH_DEFAULT - let libcurl decide
+ CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS
+ CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL
+ */
+ CINIT(FTPSSLAUTH, LONG, 129),
+
+ CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130),
+ CINIT(IOCTLDATA, OBJECTPOINT, 131),
+
+ /* To make a 3rd party transfer, set the source URL with this */
+ CINIT(SOURCE_URL, OBJECTPOINT, 132),
+
+ /* When doing 3rd party transfer, set the source quote linked list of
+ commands with this */
+ CINIT(SOURCE_QUOTE, OBJECTPOINT, 133),
+
+ /* zero terminated string for pass on to the FTP server when asked for
+ "account" info */
+ CINIT(FTP_ACCOUNT, OBJECTPOINT, 134),
+
+ /* feed cookies into cookie engine */
+ CINIT(COOKIELIST, OBJECTPOINT, 135),
+
+ /* ignore Content-Length */
+ CINIT(IGNORE_CONTENT_LENGTH, LONG, 136),
+
+ /* Set to non-zero to skip the IP address received in a 227 PASV FTP server
+ response. Typically used for FTP-SSL purposes but is not restricted to
+ that. libcurl will then instead use the same IP address it used for the
+ control connection. */
+ CINIT(FTP_SKIP_PASV_IP, LONG, 137),
+
+ /* Select "file method" to use when doing FTP, see the curl_ftpmethod
+ above. */
+ CINIT(FTP_FILEMETHOD, LONG, 138),
+
+ /* Local port number to bind the socket to */
+ CINIT(LOCALPORT, LONG, 139),
+
+ /* Number of ports to try, including the first one set with LOCALPORT.
+ Thus, setting it to 1 will make no additional attempts but the first.
+ */
+ CINIT(LOCALPORTRANGE, LONG, 140),
+
+ /* no transfer, set up connection and let application use the socket by
+ extracting it with CURLINFO_LASTSOCKET */
+ CINIT(CONNECT_ONLY, LONG, 141),
+
+ /* Function that will be called to convert from the
+ network encoding (instead of using the iconv calls in libcurl) */
+ CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142),
+
+ /* Function that will be called to convert to the
+ network encoding (instead of using the iconv calls in libcurl) */
+ CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143),
+
+ /* Function that will be called to convert from UTF8
+ (instead of using the iconv calls in libcurl)
+ Note that this is used only for SSL certificate processing */
+ CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144),
+
+ /* if the connection proceeds too quickly then need to slow it down */
+ /* limit-rate: maximum number of bytes per second to send or receive */
+ CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145),
+ CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146),
+
+ /* Pointer to command string to send if USER/PASS fails. */
+ CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147),
+
+ /* CRL file */
+ CINIT(CRLFILE, OBJECTPOINT, 169),
+
+ /* set the bitmask for the protocols that are allowed to be used for the
+ transfer, which thus helps the app which takes URLs from users or other
+ external inputs and want to restrict what protocol(s) to deal
+ with. Defaults to CURLPROTO_ALL. */
+ CINIT(PROTOCOLS, LONG, 181),
+
+ /* set the bitmask for the protocols that libcurl is allowed to follow to,
+ as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
+ to be set in both bitmasks to be allowed to get redirected to. Defaults
+ to CURLPROTO_ALL & ~CURLPROTO_FILE. */
+ CINIT(REDIR_PROTOCOLS, LONG, 182),
+
+ /* allow GSSAPI credential delegation */
+ CINIT(GSSAPI_DELEGATION, LONG, 210),
+
+ CURLOPT_LASTENTRY /* the last unused */
+} CURLoption;
+
+ /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host
+ name resolves addresses using more than one IP protocol version, this
+ option might be handy to force libcurl to use a specific IP version. */
+#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP
+ versions that your system allows */
+#define CURL_IPRESOLVE_V4 1 /* resolve to ipv4 addresses */
+#define CURL_IPRESOLVE_V6 2 /* resolve to ipv6 addresses */
+
+ /* three convenient "aliases" that follow the name scheme better */
+#define CURLOPT_WRITEDATA CURLOPT_FILE
+#define CURLOPT_READDATA CURLOPT_INFILE
+#define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER
+
+#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
+ the obsolete stuff removed! */
+#define CURLOPT_HTTPREQUEST -1
+#define CURLOPT_FTPASCII CURLOPT_TRANSFERTEXT
+#define CURLOPT_MUTE -2
+#define CURLOPT_PASSWDFUNCTION -3
+#define CURLOPT_PASSWDDATA -4
+#define CURLOPT_CLOSEFUNCTION -5
+
+#define CURLOPT_SOURCE_HOST -6
+#define CURLOPT_SOURCE_PATH -7
+#define CURLOPT_SOURCE_PORT -8
+#define CURLOPT_PASV_HOST -9
+
+#else
+/* This is set if CURL_NO_OLDIES is defined at compile-time */
+#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */
+#endif
+
+
+ /* These enums are for use with the CURLOPT_HTTP_VERSION option. */
+enum {
+ CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd
+ like the library to choose the best possible
+ for us! */
+ CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */
+ CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */
+
+ CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */
+};
+
+ /* These enums are for use with the CURLOPT_NETRC option. */
+enum CURL_NETRC_OPTION {
+ CURL_NETRC_IGNORED, /* The .netrc will never be read.
+ * This is the default. */
+ CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred
+ * to one in the .netrc. */
+ CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored.
+ * Unless one is set programmatically, the .netrc
+ * will be queried. */
+ CURL_NETRC_LAST
+};
+
+enum {
+ CURL_SSLVERSION_DEFAULT,
+ CURL_SSLVERSION_TLSv1,
+ CURL_SSLVERSION_SSLv2,
+ CURL_SSLVERSION_SSLv3,
+
+ CURL_SSLVERSION_LAST /* never use, keep last */
+};
+
+
+typedef enum {
+ CURL_TIMECOND_NONE,
+
+ CURL_TIMECOND_IFMODSINCE,
+ CURL_TIMECOND_IFUNMODSINCE,
+ CURL_TIMECOND_LASTMOD,
+
+ CURL_TIMECOND_LAST
+} curl_TimeCond;
+
+#ifdef __BEOS__
+#include <support/SupportDefs.h>
+#endif
+
+
+/* curl_strequal() and curl_strnequal() are subject for removal in a future
+ libcurl, see lib/README.curlx for details */
+CURL_EXTERN int (curl_strequal)(const char *s1, const char *s2);
+CURL_EXTERN int (curl_strnequal)(const char *s1, const char *s2, size_t n);
+
+/* name is uppercase CURLFORM_<name> */
+#ifdef CFINIT
+#undef CFINIT
+#endif
+
+#ifdef CURL_ISOCPP
+#define CFINIT(name) CURLFORM_ ## name
+#else
+/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
+#define CFINIT(name) CURLFORM_/**/name
+#endif
+
+typedef enum {
+ CFINIT(NOTHING), /********* the first one is unused ************/
+
+ /* */
+ CFINIT(COPYNAME),
+ CFINIT(PTRNAME),
+ CFINIT(NAMELENGTH),
+ CFINIT(COPYCONTENTS),
+ CFINIT(PTRCONTENTS),
+ CFINIT(CONTENTSLENGTH),
+ CFINIT(FILECONTENT),
+ CFINIT(ARRAY),
+ CFINIT(OBSOLETE),
+ CFINIT(FILE),
+
+ CFINIT(BUFFER),
+ CFINIT(BUFFERPTR),
+ CFINIT(BUFFERLENGTH),
+
+ CFINIT(CONTENTTYPE),
+ CFINIT(CONTENTHEADER),
+ CFINIT(FILENAME),
+ CFINIT(END),
+ CFINIT(OBSOLETE2),
+
+ CURLFORM_LASTENTRY /* the last unusued */
+} CURLformoption;
+
+#undef CFINIT /* done */
+
+/* structure to be used as parameter for CURLFORM_ARRAY */
+struct curl_forms {
+ CURLformoption option;
+ const char *value;
+};
+
+/* use this for multipart formpost building */
+/* Returns code for curl_formadd()
+ *
+ * Returns:
+ * CURL_FORMADD_OK on success
+ * CURL_FORMADD_MEMORY if the FormInfo allocation fails
+ * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form
+ * CURL_FORMADD_NULL if a null pointer was given for a char
+ * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed
+ * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used
+ * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error)
+ * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated
+ * CURL_FORMADD_MEMORY if some allocation for string copying failed.
+ * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array
+ *
+ ***************************************************************************/
+typedef enum {
+ CURL_FORMADD_OK, /* first, no error */
+
+ CURL_FORMADD_MEMORY,
+ CURL_FORMADD_OPTION_TWICE,
+ CURL_FORMADD_NULL,
+ CURL_FORMADD_UNKNOWN_OPTION,
+ CURL_FORMADD_INCOMPLETE,
+ CURL_FORMADD_ILLEGAL_ARRAY,
+ CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */
+
+ CURL_FORMADD_LAST /* last */
+} CURLFORMcode;
+
+/*
+ * NAME curl_formadd()
+ *
+ * DESCRIPTION
+ *
+ * Pretty advanved function for building multi-part formposts. Each invoke
+ * adds one part that together construct a full post. Then use
+ * CURLOPT_HTTPPOST to send it off to libcurl.
+ */
+CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost,
+ struct curl_httppost **last_post,
+ ...);
+
+/*
+ * callback function for curl_formget()
+ * The void *arg pointer will be the one passed as second argument to curl_formget().
+ * The character buffer passed to it must not be freed.
+ * Should return the buffer length passed to it as the argument "len" on success.
+ */
+typedef size_t (*curl_formget_callback)(void *arg, const char *buf, size_t len);
+
+/*
+ * NAME curl_formget()
+ *
+ * DESCRIPTION
+ *
+ * Serialize a curl_httppost struct built with curl_formadd().
+ * Accepts a void pointer as second argument which will be passed to
+ * the curl_formget_callback function.
+ * Returns 0 on success.
+ */
+CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg,
+ curl_formget_callback append);
+/*
+ * NAME curl_formfree()
+ *
+ * DESCRIPTION
+ *
+ * Free a multipart formpost previously built with curl_formadd().
+ */
+CURL_EXTERN void curl_formfree(struct curl_httppost *form);
+
+/*
+ * NAME curl_getenv()
+ *
+ * DESCRIPTION
+ *
+ * Returns a malloc()'ed string that MUST be curl_free()ed after usage is
+ * complete. DEPRECATED - see lib/README.curlx
+ */
+CURL_EXTERN char *curl_getenv(const char *variable);
+
+/*
+ * NAME curl_version()
+ *
+ * DESCRIPTION
+ *
+ * Returns a static ascii string of the libcurl version.
+ */
+CURL_EXTERN char *curl_version(void);
+
+/*
+ * NAME curl_easy_escape()
+ *
+ * DESCRIPTION
+ *
+ * Escapes URL strings (converts all letters consider illegal in URLs to their
+ * %XX versions). This function returns a new allocated string or NULL if an
+ * error occurred.
+ */
+CURL_EXTERN char *curl_easy_escape(CURL *handle,
+ const char *string,
+ int length);
+
+/* the previous version: */
+CURL_EXTERN char *curl_escape(const char *string,
+ int length);
+
+
+/*
+ * NAME curl_easy_unescape()
+ *
+ * DESCRIPTION
+ *
+ * Unescapes URL encoding in strings (converts all %XX codes to their 8bit
+ * versions). This function returns a new allocated string or NULL if an error
+ * occurred.
+ * Conversion Note: On non-ASCII platforms the ASCII %XX codes are
+ * converted into the host encoding.
+ */
+CURL_EXTERN char *curl_easy_unescape(CURL *handle,
+ const char *string,
+ int length,
+ int *outlength);
+
+/* the previous version */
+CURL_EXTERN char *curl_unescape(const char *string,
+ int length);
+
+/*
+ * NAME curl_free()
+ *
+ * DESCRIPTION
+ *
+ * Provided for de-allocation in the same translation unit that did the
+ * allocation. Added in libcurl 7.10
+ */
+CURL_EXTERN void curl_free(void *p);
+
+/*
+ * NAME curl_global_init()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_init() should be invoked exactly once for each application that
+ * uses libcurl
+ */
+CURL_EXTERN CURLcode curl_global_init(long flags);
+
+/*
+ * NAME curl_global_init_mem()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_init() or curl_global_init_mem() should be invoked exactly once
+ * for each application that uses libcurl. This function can be used to
+ * initialize libcurl and set user defined memory management callback
+ * functions. Users can implement memory management routines to check for
+ * memory leaks, check for mis-use of the curl library etc. User registered
+ * callback routines with be invoked by this library instead of the system
+ * memory management routines like malloc, free etc.
+ */
+CURL_EXTERN CURLcode curl_global_init_mem(long flags,
+ curl_malloc_callback m,
+ curl_free_callback f,
+ curl_realloc_callback r,
+ curl_strdup_callback s,
+ curl_calloc_callback c);
+
+/*
+ * NAME curl_global_cleanup()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_cleanup() should be invoked exactly once for each application
+ * that uses libcurl
+ */
+CURL_EXTERN void curl_global_cleanup(void);
+
+/* linked-list structure for the CURLOPT_QUOTE option (and other) */
+struct curl_slist {
+ char *data;
+ struct curl_slist *next;
+};
+
+/*
+ * NAME curl_slist_append()
+ *
+ * DESCRIPTION
+ *
+ * Appends a string to a linked list. If no list exists, it will be created
+ * first. Returns the new list, after appending.
+ */
+CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *,
+ const char *);
+
+/*
+ * NAME curl_slist_free_all()
+ *
+ * DESCRIPTION
+ *
+ * free a previously built curl_slist.
+ */
+CURL_EXTERN void curl_slist_free_all(struct curl_slist *);
+
+/*
+ * NAME curl_getdate()
+ *
+ * DESCRIPTION
+ *
+ * Returns the time, in seconds since 1 Jan 1970 of the time string given in
+ * the first argument. The time argument in the second parameter is unused
+ * and should be set to NULL.
+ */
+CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused);
+
+#define CURLINFO_STRING 0x100000
+#define CURLINFO_LONG 0x200000
+#define CURLINFO_DOUBLE 0x300000
+#define CURLINFO_SLIST 0x400000
+#define CURLINFO_MASK 0x0fffff
+#define CURLINFO_TYPEMASK 0xf00000
+
+typedef enum {
+ CURLINFO_NONE, /* first, never use this */
+ CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1,
+ CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2,
+ CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3,
+ CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4,
+ CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5,
+ CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6,
+ CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7,
+ CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8,
+ CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9,
+ CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10,
+ CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11,
+ CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12,
+ CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13,
+ CURLINFO_FILETIME = CURLINFO_LONG + 14,
+ CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15,
+ CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16,
+ CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
+ CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18,
+ CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19,
+ CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20,
+ CURLINFO_PRIVATE = CURLINFO_STRING + 21,
+ CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22,
+ CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23,
+ CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24,
+ CURLINFO_OS_ERRNO = CURLINFO_LONG + 25,
+ CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26,
+ CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27,
+ CURLINFO_COOKIELIST = CURLINFO_SLIST + 28,
+ CURLINFO_LASTSOCKET = CURLINFO_LONG + 29,
+ CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30,
+ /* Fill in new entries below here! */
+
+ CURLINFO_LASTONE = 30
+} CURLINFO;
+
+/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
+ CURLINFO_HTTP_CODE */
+#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE
+
+typedef enum {
+ CURLCLOSEPOLICY_NONE, /* first, never use this */
+
+ CURLCLOSEPOLICY_OLDEST,
+ CURLCLOSEPOLICY_LEAST_RECENTLY_USED,
+ CURLCLOSEPOLICY_LEAST_TRAFFIC,
+ CURLCLOSEPOLICY_SLOWEST,
+ CURLCLOSEPOLICY_CALLBACK,
+
+ CURLCLOSEPOLICY_LAST /* last, never use this */
+} curl_closepolicy;
+
+#define CURL_GLOBAL_SSL (1<<0)
+#define CURL_GLOBAL_WIN32 (1<<1)
+#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
+#define CURL_GLOBAL_NOTHING 0
+#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
+
+
+/*****************************************************************************
+ * Setup defines, protos etc for the sharing stuff.
+ */
+
+/* Different data locks for a single share */
+typedef enum {
+ CURL_LOCK_DATA_NONE = 0,
+ /* CURL_LOCK_DATA_SHARE is used internaly to say that
+ * the locking is just made to change the internal state of the share
+ * itself.
+ */
+ CURL_LOCK_DATA_SHARE,
+ CURL_LOCK_DATA_COOKIE,
+ CURL_LOCK_DATA_DNS,
+ CURL_LOCK_DATA_SSL_SESSION,
+ CURL_LOCK_DATA_CONNECT,
+ CURL_LOCK_DATA_LAST
+} curl_lock_data;
+
+/* Different lock access types */
+typedef enum {
+ CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */
+ CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */
+ CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */
+ CURL_LOCK_ACCESS_LAST /* never use */
+} curl_lock_access;
+
+typedef void (*curl_lock_function)(CURL *handle,
+ curl_lock_data data,
+ curl_lock_access locktype,
+ void *userptr);
+typedef void (*curl_unlock_function)(CURL *handle,
+ curl_lock_data data,
+ void *userptr);
+
+typedef void CURLSH;
+
+typedef enum {
+ CURLSHE_OK, /* all is fine */
+ CURLSHE_BAD_OPTION, /* 1 */
+ CURLSHE_IN_USE, /* 2 */
+ CURLSHE_INVALID, /* 3 */
+ CURLSHE_NOMEM, /* out of memory */
+ CURLSHE_LAST /* never use */
+} CURLSHcode;
+
+typedef enum {
+ CURLSHOPT_NONE, /* don't use */
+ CURLSHOPT_SHARE, /* specify a data type to share */
+ CURLSHOPT_UNSHARE, /* specify shich data type to stop sharing */
+ CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */
+ CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */
+ CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock
+ callback functions */
+ CURLSHOPT_LAST /* never use */
+} CURLSHoption;
+
+CURL_EXTERN CURLSH *curl_share_init(void);
+CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...);
+CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *);
+
+/****************************************************************************
+ * Structures for querying information about the curl library at runtime.
+ */
+
+typedef enum {
+ CURLVERSION_FIRST,
+ CURLVERSION_SECOND,
+ CURLVERSION_THIRD,
+ CURLVERSION_LAST /* never actually use this */
+} CURLversion;
+
+/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by
+ basicly all programs ever, that want to get version information. It is
+ meant to be a built-in version number for what kind of struct the caller
+ expects. If the struct ever changes, we redefine the NOW to another enum
+ from above. */
+#define CURLVERSION_NOW CURLVERSION_THIRD
+
+typedef struct {
+ CURLversion age; /* age of the returned struct */
+ const char *version; /* LIBCURL_VERSION */
+ unsigned int version_num; /* LIBCURL_VERSION_NUM */
+ const char *host; /* OS/host/cpu/machine when configured */
+ int features; /* bitmask, see defines below */
+ const char *ssl_version; /* human readable string */
+ long ssl_version_num; /* not used anymore, always 0 */
+ const char *libz_version; /* human readable string */
+ /* protocols is terminated by an entry with a NULL protoname */
+ const char * const *protocols;
+
+ /* The fields below this were added in CURLVERSION_SECOND */
+ const char *ares;
+ int ares_num;
+
+ /* This field was added in CURLVERSION_THIRD */
+ const char *libidn;
+
+ /* Same as '_libiconv_version' if built with HAVE_ICONV */
+ int iconv_ver_num;
+} curl_version_info_data;
+
+#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */
+#define CURL_VERSION_KERBEROS4 (1<<1) /* kerberos auth is supported */
+#define CURL_VERSION_SSL (1<<2) /* SSL options are present */
+#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */
+#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */
+#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth support */
+#define CURL_VERSION_DEBUG (1<<6) /* built with debug capabilities */
+#define CURL_VERSION_ASYNCHDNS (1<<7) /* asynchronous dns resolves */
+#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth */
+#define CURL_VERSION_LARGEFILE (1<<9) /* supports files bigger than 2GB */
+#define CURL_VERSION_IDN (1<<10) /* International Domain Names support */
+#define CURL_VERSION_SSPI (1<<11) /* SSPI is supported */
+#define CURL_VERSION_CONV (1<<12) /* character conversions are
+ supported */
+
+/*
+ * NAME curl_version_info()
+ *
+ * DESCRIPTION
+ *
+ * This function returns a pointer to a static copy of the version info
+ * struct. See above.
+ */
+CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion);
+
+/*
+ * NAME curl_easy_strerror()
+ *
+ * DESCRIPTION
+ *
+ * The curl_easy_strerror function may be used to turn a CURLcode value
+ * into the equivalent human readable error string. This is useful
+ * for printing meaningful error messages.
+ */
+CURL_EXTERN const char *curl_easy_strerror(CURLcode);
+
+/*
+ * NAME curl_share_strerror()
+ *
+ * DESCRIPTION
+ *
+ * The curl_share_strerror function may be used to turn a CURLSHcode value
+ * into the equivalent human readable error string. This is useful
+ * for printing meaningful error messages.
+ */
+CURL_EXTERN const char *curl_share_strerror(CURLSHcode);
+
+#ifdef __cplusplus
+}
+#endif
+
+/* unfortunately, the easy.h and multi.h include files need options and info
+ stuff before they can be included! */
+#include "easy.h" /* nothing in curl is fun without the easy stuff */
+#include "multi.h"
+
+#endif /* __CURL_CURL_H */
diff --git a/libs/kns/curlhdr/curlver.h b/libs/kns/curlhdr/curlver.h
new file mode 100644
index 0000000..46fc5d8
--- /dev/null
+++ b/libs/kns/curlhdr/curlver.h
@@ -0,0 +1,56 @@
+#ifndef __CURL_CURLVER_H
+#define __CURL_CURLVER_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel at haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: curlver.h,v 1.1 2012/11/09 17:54:52 rodarmer Exp $
+ ***************************************************************************/
+
+/* This header file contains nothing but libcurl version info, generated by
+ a script at release-time. This was made its own header file in 7.11.2 */
+
+/* This is the version number of the libcurl package from which this header
+ file origins: */
+#define LIBCURL_VERSION "7.15.5"
+
+/* The numeric version number is also available "in parts" by using these
+ defines: */
+#define LIBCURL_VERSION_MAJOR 7
+#define LIBCURL_VERSION_MINOR 15
+#define LIBCURL_VERSION_PATCH 5
+
+/* This is the numeric version of the libcurl version number, meant for easier
+ parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
+ always follow this syntax:
+
+ 0xXXYYZZ
+
+ Where XX, YY and ZZ are the main version, release and patch numbers in
+ hexadecimal (using 8 bits each). All three numbers are always represented
+ using two digits. 1.2 would appear as "0x010200" while version 9.11.7
+ appears as "0x090b07".
+
+ This 6-digit (24 bits) hexadecimal number does not show pre-release number,
+ and it is always a greater number in a more recent release. It makes
+ comparisons with greater than and less than work.
+*/
+#define LIBCURL_VERSION_NUM 0x070f05
+
+#endif /* __CURL_CURLVER_H */
diff --git a/libs/kns/curlhdr/easy.h b/libs/kns/curlhdr/easy.h
new file mode 100644
index 0000000..2f96c9a
--- /dev/null
+++ b/libs/kns/curlhdr/easy.h
@@ -0,0 +1,81 @@
+#ifndef __CURL_EASY_H
+#define __CURL_EASY_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel at haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: easy.h,v 1.1 2012/11/09 17:54:52 rodarmer Exp $
+ ***************************************************************************/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+CURL_EXTERN CURL *curl_easy_init(void);
+CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
+CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
+CURL_EXTERN void curl_easy_cleanup(CURL *curl);
+
+/*
+ * NAME curl_easy_getinfo()
+ *
+ * DESCRIPTION
+ *
+ * Request internal information from the curl session with this function. The
+ * third argument MUST be a pointer to a long, a pointer to a char * or a
+ * pointer to a double (as the documentation describes elsewhere). The data
+ * pointed to will be filled in accordingly and can be relied upon only if the
+ * function returns CURLE_OK. This function is intended to get used *AFTER* a
+ * performed transfer, all results from this function are undefined until the
+ * transfer is completed.
+ */
+CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
+
+
+/*
+ * NAME curl_easy_duphandle()
+ *
+ * DESCRIPTION
+ *
+ * Creates a new curl session handle with the same options set for the handle
+ * passed in. Duplicating a handle could only be a matter of cloning data and
+ * options, internal state info and things like persistant connections cannot
+ * be transfered. It is useful in multithreaded applications when you can run
+ * curl_easy_duphandle() for each new thread to avoid a series of identical
+ * curl_easy_setopt() invokes in every thread.
+ */
+CURL_EXTERN CURL* curl_easy_duphandle(CURL *curl);
+
+/*
+ * NAME curl_easy_reset()
+ *
+ * DESCRIPTION
+ *
+ * Re-initializes a CURL handle to the default values. This puts back the
+ * handle to the same state as it was in when it was just created.
+ *
+ * It does keep: live connections, the Session ID cache, the DNS cache and the
+ * cookies.
+ */
+CURL_EXTERN void curl_easy_reset(CURL *curl);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libs/kns/curlhdr/multi.h b/libs/kns/curlhdr/multi.h
new file mode 100644
index 0000000..bbddc13
--- /dev/null
+++ b/libs/kns/curlhdr/multi.h
@@ -0,0 +1,344 @@
+#ifndef __CURL_MULTI_H
+#define __CURL_MULTI_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel at haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: multi.h,v 1.1 2012/11/09 17:54:52 rodarmer Exp $
+ ***************************************************************************/
+/*
+ This is an "external" header file. Don't give away any internals here!
+
+ GOALS
+
+ o Enable a "pull" interface. The application that uses libcurl decides where
+ and when to ask libcurl to get/send data.
+
+ o Enable multiple simultaneous transfers in the same thread without making it
+ complicated for the application.
+
+ o Enable the application to select() on its own file descriptors and curl's
+ file descriptors simultaneous easily.
+
+*/
+#if defined(_WIN32) && !defined(WIN32)
+/* Chris Lewis mentioned that he doesn't get WIN32 defined, only _WIN32 so we
+ make this adjustment to catch this. */
+#define WIN32 1
+#endif
+
+#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) && \
+ !defined(__CYGWIN__) || defined(__MINGW32__)
+#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H))
+/* The check above prevents the winsock2 inclusion if winsock.h already was
+ included, since they can't co-exist without problems */
+#include <winsock2.h>
+#endif
+#else
+
+/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
+ libc5-based Linux systems. Only include it on system that are known to
+ require it! */
+#if defined(_AIX) || defined(NETWARE) || defined(__NetBSD__) || defined(_MINIX)
+#include <sys/select.h>
+#endif
+
+#ifndef _WIN32_WCE
+#include <sys/socket.h>
+#endif
+#include <sys/time.h>
+#include <sys/types.h>
+#endif
+
+/*
+ * This header file should not really need to include "curl.h" since curl.h
+ * itself includes this file and we expect user applications to do #include
+ * <curl/curl.h> without the need for especially including multi.h.
+ *
+ * For some reason we added this include here at one point, and rather than to
+ * break existing (wrongly written) libcurl applications, we leave it as-is
+ * but with this warning attached.
+ */
+#include "curl.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void CURLM;
+
+#ifndef curl_socket_typedef
+/* Public socket typedef */
+#ifdef WIN32
+typedef SOCKET curl_socket_t;
+#define CURL_SOCKET_BAD INVALID_SOCKET
+#else
+typedef int curl_socket_t;
+#define CURL_SOCKET_BAD -1
+#endif
+#define curl_socket_typedef
+#endif /* curl_socket_typedef */
+
+typedef enum {
+ CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
+ curl_multi_socket*() soon */
+ CURLM_OK,
+ CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */
+ CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
+ CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */
+ CURLM_INTERNAL_ERROR, /* this is a libcurl bug */
+ CURLM_BAD_SOCKET, /* the passed in socket argument did not match */
+ CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */
+ CURLM_LAST
+} CURLMcode;
+
+/* just to make code nicer when using curl_multi_socket() you can now check
+ for CURLM_CALL_MULTI_SOCKET too in the same style it works for
+ curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
+#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
+
+typedef enum {
+ CURLMSG_NONE, /* first, not used */
+ CURLMSG_DONE, /* This easy handle has completed. 'result' contains
+ the CURLcode of the transfer */
+ CURLMSG_LAST /* last, not used */
+} CURLMSG;
+
+struct CURLMsg {
+ CURLMSG msg; /* what this message means */
+ CURL *easy_handle; /* the handle it concerns */
+ union {
+ void *whatever; /* message-specific data */
+ CURLcode result; /* return code for transfer */
+ } data;
+};
+typedef struct CURLMsg CURLMsg;
+
+/*
+ * Name: curl_multi_init()
+ *
+ * Desc: inititalize multi-style curl usage
+ *
+ * Returns: a new CURLM handle to use in all 'curl_multi' functions.
+ */
+CURL_EXTERN CURLM *curl_multi_init(void);
+
+/*
+ * Name: curl_multi_add_handle()
+ *
+ * Desc: add a standard curl handle to the multi stack
+ *
+ * Returns: CURLMcode type, general multi error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
+ CURL *curl_handle);
+
+ /*
+ * Name: curl_multi_remove_handle()
+ *
+ * Desc: removes a curl handle from the multi stack again
+ *
+ * Returns: CURLMcode type, general multi error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
+ CURL *curl_handle);
+
+ /*
+ * Name: curl_multi_fdset()
+ *
+ * Desc: Ask curl for its fd_set sets. The app can use these to select() or
+ * poll() on. We want curl_multi_perform() called as soon as one of
+ * them are ready.
+ *
+ * Returns: CURLMcode type, general multi error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
+ fd_set *read_fd_set,
+ fd_set *write_fd_set,
+ fd_set *exc_fd_set,
+ int *max_fd);
+
+ /*
+ * Name: curl_multi_perform()
+ *
+ * Desc: When the app thinks there's data available for curl it calls this
+ * function to read/write whatever there is right now. This returns
+ * as soon as the reads and writes are done. This function does not
+ * require that there actually is data available for reading or that
+ * data can be written, it can be called just in case. It returns
+ * the number of handles that still transfer data in the second
+ * argument's integer-pointer.
+ *
+ * Returns: CURLMcode type, general multi error code. *NOTE* that this only
+ * returns errors etc regarding the whole multi stack. There might
+ * still have occurred problems on invidual transfers even when this
+ * returns OK.
+ */
+CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
+ int *running_handles);
+
+ /*
+ * Name: curl_multi_cleanup()
+ *
+ * Desc: Cleans up and removes a whole multi stack. It does not free or
+ * touch any individual easy handles in any way. We need to define
+ * in what state those handles will be if this function is called
+ * in the middle of a transfer.
+ *
+ * Returns: CURLMcode type, general multi error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
+
+/*
+ * Name: curl_multi_info_read()
+ *
+ * Desc: Ask the multi handle if there's any messages/informationals from
+ * the individual transfers. Messages include informationals such as
+ * error code from the transfer or just the fact that a transfer is
+ * completed. More details on these should be written down as well.
+ *
+ * Repeated calls to this function will return a new struct each
+ * time, until a special "end of msgs" struct is returned as a signal
+ * that there is no more to get at this point.
+ *
+ * The data the returned pointer points to will not survive calling
+ * curl_multi_cleanup().
+ *
+ * The 'CURLMsg' struct is meant to be very simple and only contain
+ * very basic informations. If more involved information is wanted,
+ * we will provide the particular "transfer handle" in that struct
+ * and that should/could/would be used in subsequent
+ * curl_easy_getinfo() calls (or similar). The point being that we
+ * must never expose complex structs to applications, as then we'll
+ * undoubtably get backwards compatibility problems in the future.
+ *
+ * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
+ * of structs. It also writes the number of messages left in the
+ * queue (after this read) in the integer the second argument points
+ * to.
+ */
+CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
+ int *msgs_in_queue);
+
+/*
+ * Name: curl_multi_strerror()
+ *
+ * Desc: The curl_multi_strerror function may be used to turn a CURLMcode
+ * value into the equivalent human readable error string. This is
+ * useful for printing meaningful error messages.
+ *
+ * Returns: A pointer to a zero-terminated error message.
+ */
+CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
+
+/*
+ * Name: curl_multi_socket() and
+ * curl_multi_socket_all()
+ *
+ * Desc: An alternative version of curl_multi_perform() that allows the
+ * application to pass in one of the file descriptors that have been
+ * detected to have "action" on them and let libcurl perform.
+ * See man page for details.
+ */
+#define CURL_POLL_NONE 0
+#define CURL_POLL_IN 1
+#define CURL_POLL_OUT 2
+#define CURL_POLL_INOUT 3
+#define CURL_POLL_REMOVE 4
+
+#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
+
+typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */
+ curl_socket_t s, /* socket */
+ int what, /* see above */
+ void *userp, /* private callback
+ pointer */
+ void *socketp); /* private socket
+ pointer */
+
+CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
+ int *running_handles);
+
+CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
+ int *running_handles);
+
+/*
+ * Name: curl_multi_timeout()
+ *
+ * Desc: Returns the maximum number of milliseconds the app is allowed to
+ * wait before curl_multi_socket() or curl_multi_perform() must be
+ * called (to allow libcurl's timed events to take place).
+ *
+ * Returns: CURLM error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
+ long *milliseconds);
+
+#undef CINIT /* re-using the same name as in curl.h */
+
+#ifdef CURL_ISOCPP
+#define CINIT(name,type,number) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + number
+#else
+/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
+#define LONG CURLOPTTYPE_LONG
+#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT
+#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
+#define OFF_T CURLOPTTYPE_OFF_T
+#define CINIT(name,type,number) CURLMOPT_/**/name = type + number
+#endif
+
+typedef enum {
+ /* This is the socket callback function pointer */
+ CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1),
+
+ /* This is the argument passed to the socket callback */
+ CINIT(SOCKETDATA, OBJECTPOINT, 2),
+
+ CURLMOPT_LASTENTRY /* the last unused */
+} CURLMoption;
+
+
+/*
+ * Name: curl_multi_setopt()
+ *
+ * Desc: Sets options for the multi handle.
+ *
+ * Returns: CURLM error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
+ CURLMoption option, ...);
+
+
+/*
+ * Name: curl_multi_assign()
+ *
+ * Desc: This function sets an association in the multi handle between the
+ * given socket and a private pointer of the application. This is
+ * (only) useful for curl_multi_socket uses.
+ *
+ * Returns: CURLM error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
+ curl_socket_t sockfd, void *sockp);
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif
diff --git a/libs/kns/curlhdr/types.h b/libs/kns/curlhdr/types.h
new file mode 100644
index 0000000..d37d6ae
--- /dev/null
+++ b/libs/kns/curlhdr/types.h
@@ -0,0 +1 @@
+/* not used */
diff --git a/libs/kns/entrez-fetcher.c b/libs/kns/entrez-fetcher.c
new file mode 100644
index 0000000..fb3f004
--- /dev/null
+++ b/libs/kns/entrez-fetcher.c
@@ -0,0 +1,221 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/refcount.h>
+#include <kns/entrez-fetcher.h>
+#include <kns/url-fetcher.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#define URI_PARAM_LEN 70
+#define ENTREZ_FIRST_LINE_LEN 120
+#define ENTREZ_NEWLINE_DIV 80
+
+struct KEntrezFetcher
+{
+ KRefcount refcount;
+
+ KUrlFetcher * url_fetcher;
+ char * uri;
+};
+
+static const char classname[] = "KSraFetcher";
+
+rc_t KEntrezFetcherAddRef ( const KEntrezFetcher *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, classname ) )
+ {
+ case krefLimit:
+ return RC ( rcApp, rcFunction, rcAttaching, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+
+rc_t KEntrezFetcherRelease ( const KEntrezFetcher *cself )
+{
+ KEntrezFetcher *self = ( KEntrezFetcher* ) cself;
+ if ( cself != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, classname ) )
+ {
+ case krefWhack:
+ {
+ KUrlFetcherRelease ( self -> url_fetcher );
+ if ( self -> uri ) free( self -> uri );
+ free( self );
+ return 0;
+ }
+ case krefLimit:
+ return RC ( rcApp, rcFunction, rcReleasing, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+
+rc_t KEntrezFetcherSetupUri ( KEntrezFetcher *self, const char * uri )
+{
+ if ( uri == NULL || uri[0] == 0 )
+ return RC ( rcApp, rcFunction, rcAccessing, rcParam, rcNull );
+ if ( self == NULL )
+ return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+
+ if ( self -> uri ) free( self -> uri );
+ self -> uri = string_dup_measure ( uri, NULL );
+ return 0;
+}
+
+
+/* composes the internal uri from the parameters and returns an estimated buffersize */
+rc_t KEntrezFetcherSetup ( KEntrezFetcher *self,
+ const char * server, const char * seq_id,
+ const size_t max_seq_len, const uint64_t row_id, const size_t row_count,
+ size_t * buffsize )
+{
+ rc_t rc;
+ size_t uri_len;
+
+ if ( server == NULL || seq_id == NULL || buffsize == NULL )
+ return RC ( rcApp, rcFunction, rcAccessing, rcParam, rcNull );
+ if ( self == NULL )
+ return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+
+ if ( self -> uri ) free( self -> uri );
+ uri_len = string_size( server ) + string_size( seq_id ) + URI_PARAM_LEN;
+ self -> uri = malloc( uri_len );
+ if ( self -> uri != NULL )
+ {
+ size_t num_written;
+ uint64_t seq_start, seq_stop;
+
+ seq_start = max_seq_len * ( row_id - 1 ) + 1;
+ seq_stop = max_seq_len * ( row_id + row_count - 1 );
+
+ if ( seq_stop <= seq_start )
+ return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+
+ *buffsize = ( seq_stop - seq_start );
+ *buffsize += ( *buffsize / ENTREZ_NEWLINE_DIV );
+ *buffsize += ENTREZ_FIRST_LINE_LEN;
+
+ rc = string_printf ( self->uri, uri_len, &num_written,
+ "%s?db=nucleotide&id=%s&rettype=fasta&seq_start=%lu&seq_stop=%lu",
+ server, seq_id, seq_start, seq_stop );
+ }
+ else
+ rc = RC( rcExe, rcString, rcAllocating, rcMemory, rcExhausted );
+
+ return rc;
+}
+
+
+/* remove the first line, including it's line-feed */
+static void remove_first_line( char * s, size_t * len )
+{
+ char * p = string_chr ( s, *len, '\n' );
+ if ( p )
+ {
+ *len -= ( p - s ) + 1;
+ memmove( s, p + 1, *len );
+ }
+}
+
+
+/* filters out all char's c by using a filtered temp-buffer... */
+static void filter_char( char * s, size_t * len, const char c )
+{
+ size_t src, dst;
+
+ if ( s == NULL || len == NULL || *len == 0 )
+ return;
+
+ dst = 0;
+ for ( src = 0; src < *len; ++src )
+ {
+ char ch = s[ src ];
+ if ( ch != c )
+ {
+ if ( src != dst )
+ s[ dst ] = ch;
+ ++dst;
+ }
+ }
+ *len = dst;
+}
+
+
+rc_t KEntrezFetcherRead ( KEntrezFetcher *self,
+ void *dst, size_t dst_size, size_t *num_read )
+{
+ rc_t rc;
+
+ if ( dst == NULL || dst_size == 0 || num_read == NULL )
+ return RC ( rcApp, rcFunction, rcAccessing, rcParam, rcNull );
+ if ( self == NULL )
+ return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+ if ( self -> url_fetcher == NULL || self -> uri == NULL )
+ return RC ( rcApp, rcFunction, rcAccessing, rcParam, rcNull );
+
+ rc = KUrlFetcherRead( self -> url_fetcher, self -> uri, dst, dst_size, num_read );
+ if ( rc == 0 )
+ {
+ remove_first_line( dst, num_read );
+ filter_char( dst, num_read, '\n' );
+ }
+ return rc;
+}
+
+
+rc_t KEntrezFetcherMake ( KEntrezFetcher **fetcher, KUrlFetcher * url_fetcher )
+{
+ rc_t rc;
+
+ if ( fetcher == NULL || url_fetcher == NULL )
+ rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+ else
+ {
+ *fetcher = malloc( sizeof( *fetcher ) );
+ if ( *fetcher != NULL )
+ {
+ (*fetcher) -> url_fetcher = url_fetcher;
+ KUrlFetcherAddRef ( url_fetcher );
+ (*fetcher) -> uri = NULL;
+ rc = 0;
+ }
+ else
+ rc = RC( rcApp, rcFunction, rcListing, rcParam, rcNull );
+ }
+ return rc;
+}
diff --git a/libs/kns/kns_manager.c b/libs/kns/kns_manager.c
new file mode 100644
index 0000000..c38fa47
--- /dev/null
+++ b/libs/kns/kns_manager.c
@@ -0,0 +1,263 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <kfs/dyload.h>
+
+#include "kns_mgr_priv.h"
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+
+static const char knsmanager_classname [] = "KNSManager";
+static struct KNSManager * kns_mgr_singleton = NULL;
+static KDylib *lib_curl_handle = NULL;
+
+
+LIB_EXPORT rc_t CC KNSManagerAddRef ( const struct KNSManager *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd( &self->refcount, knsmanager_classname ) )
+ {
+ case krefOkay:
+ break;
+ case krefZero:
+ return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcIncorrect);
+ case krefLimit:
+ return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcExhausted);
+ case krefNegative:
+ return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+ default:
+ return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+ }
+ }
+ return 0;
+}
+
+
+static rc_t KNSManagerLoadLib( struct KNSManager *self )
+{
+ KDyld *dl;
+ /* make a dynamic-library loader */
+ rc_t rc = KDyldMake ( &dl );
+ if ( rc == 0 )
+ {
+ /* load the curl-library */
+ rc = KDyldLoadLib( dl, &lib_curl_handle, LPFX "curl" SHLX );
+ if ( rc == 0 )
+ {
+ KSymAddr *sym;
+
+ /* resolve symbols */
+
+ /* curl_easy_init() */
+ rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_init" );
+ if ( rc == 0 )
+ {
+ KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_init_fkt) );
+ KSymAddrRelease( sym );
+ }
+
+ /* curl_easy_cleanup() */
+ if ( rc == 0 )
+ {
+ rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_cleanup" );
+ KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_cleanup_fkt) );
+ KSymAddrRelease( sym );
+ }
+
+ /* curl_easy_setopt() */
+ if ( rc == 0 )
+ {
+ rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_setopt" );
+ KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_setopt_fkt) );
+ KSymAddrRelease( sym );
+ }
+
+ /* curl_easy_perform() */
+ if ( rc == 0 )
+ {
+ rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_perform" );
+ KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_perform_fkt) );
+ KSymAddrRelease( sym );
+ }
+
+ /* curl_easy_getinfo() */
+ if ( rc == 0 )
+ {
+ rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_getinfo" );
+ KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_getinfo_fkt) );
+ KSymAddrRelease( sym );
+ }
+
+ /* curl_slist_append() */
+ if ( rc == 0 )
+ {
+ rc = KDylibSymbol( lib_curl_handle, &sym, "curl_slist_append" );
+ KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_slist_append_fkt) );
+ KSymAddrRelease( sym );
+ }
+
+ /* curl_version() */
+ if ( rc == 0 )
+ {
+ rc = KDylibSymbol( lib_curl_handle, &sym, "curl_version" );
+ KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_version_fkt) );
+ KSymAddrRelease( sym );
+ }
+
+ /* curl_slist_free_all() */
+ if ( rc == 0 )
+ {
+ rc = KDylibSymbol( lib_curl_handle, &sym, "curl_slist_free_all" );
+ KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_slist_free_all_fkt) );
+ KSymAddrRelease( sym );
+ }
+
+ /* bail on error */
+ if ( rc != 0 )
+ {
+ KDylibRelease ( lib_curl_handle );
+ lib_curl_handle = NULL;
+ self->curl_easy_init_fkt = NULL;
+ self->curl_easy_cleanup_fkt = NULL;
+ self->curl_easy_setopt_fkt = NULL;
+ self->curl_easy_perform_fkt = NULL;
+ self->curl_slist_append_fkt = NULL;
+ self->curl_version_fkt = NULL;
+ self->curl_easy_getinfo_fkt = NULL;
+ }
+ }
+ KDyldRelease ( dl );
+ }
+
+ return rc;
+
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerMake( struct KNSManager **self )
+{
+ rc_t rc = 0;
+
+ if ( self == NULL )
+ return RC( rcNS, rcMgr, rcConstructing, rcSelf, rcNull );
+
+ *self = kns_mgr_singleton;
+ if ( kns_mgr_singleton != NULL )
+ {
+ rc = KNSManagerAddRef( kns_mgr_singleton );
+ if ( rc != 0 )
+ *self = NULL;
+ }
+ else
+ {
+ struct KNSManager *tmp;
+ tmp = calloc( 1, sizeof * tmp );
+ if ( tmp == NULL )
+ rc = RC( rcNS, rcMgr, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ tmp->create_rc = KNSManagerLoadLib( tmp );
+ KRefcountInit( &tmp->refcount, 1, "KNS", "make", knsmanager_classname );
+ }
+ *self = tmp;
+ kns_mgr_singleton = tmp;
+ }
+
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerAvail( const struct KNSManager *self )
+{
+ if ( self == NULL )
+ return RC( rcNS, rcMgr, rcReading, rcSelf, rcNull );
+ return self->create_rc;
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerCurlVersion( const struct KNSManager *self, const char ** version_string )
+{
+ if ( self == NULL )
+ return RC( rcNS, rcMgr, rcReading, rcSelf, rcNull );
+ if ( version_string == NULL )
+ return RC( rcNS, rcMgr, rcReading, rcParam, rcNull );
+ if ( self->create_rc != 0 )
+ return self->create_rc;
+ *version_string = self->curl_version_fkt();
+ return 0;
+}
+
+
+static rc_t KNSManagerDestroy( struct KNSManager *self )
+{
+ if ( self == NULL )
+ return RC( rcNS, rcFile, rcDestroying, rcSelf, rcNull );
+
+ KRefcountWhack( &self->refcount, knsmanager_classname );
+
+ free( self );
+ kns_mgr_singleton = NULL;
+
+ KDylibRelease ( lib_curl_handle );
+ lib_curl_handle = NULL;
+
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerRelease( const struct KNSManager *self )
+{
+ rc_t rc = 0;
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop( &self->refcount, knsmanager_classname ) )
+ {
+ case krefOkay:
+ case krefZero:
+ break;
+ case krefWhack:
+ rc = KNSManagerDestroy( ( struct KNSManager * )self );
+ break;
+ case krefNegative:
+ return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcInvalid );
+ default:
+ rc = RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcUnknown );
+ break;
+ }
+ }
+ return rc;
+}
diff --git a/libs/kns/kns_mgr_priv.h b/libs/kns/kns_mgr_priv.h
new file mode 100644
index 0000000..eb52829
--- /dev/null
+++ b/libs/kns/kns_mgr_priv.h
@@ -0,0 +1,59 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_kns_mgr_priv_
+#define _h_kns_mgr_priv_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "curlhdr/curl.h"
+#include "curlhdr/easy.h"
+
+/* this is the hidden manager-struct: a refcount with some function-pointer's */
+struct KNSManager
+{
+ KRefcount refcount;
+
+ rc_t create_rc;
+
+ /* curl-easy-function-pointers... */
+ CURL* ( CC * curl_easy_init_fkt ) ( void );
+ void ( CC * curl_easy_cleanup_fkt ) ( CURL * handle );
+ CURLcode ( CC * curl_easy_setopt_fkt ) ( CURL *handle, CURLoption option, ... );
+ CURLcode ( CC * curl_easy_perform_fkt ) ( CURL * handle );
+ CURLcode ( CC * curl_easy_getinfo_fkt ) ( CURL *curl, CURLINFO info, ... );
+ char * ( CC * curl_version_fkt ) ( void );
+ struct curl_slist* ( CC * curl_slist_append_fkt ) ( struct curl_slist * list, const char * string );
+ void ( CC * curl_slist_free_all_fkt ) ( struct curl_slist * list );
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libs/align/libalign-writer.vers b/libs/kns/libkns.vers
similarity index 100%
copy from libs/align/libalign-writer.vers
copy to libs/kns/libkns.vers
diff --git a/libs/kns/libkurl.vers b/libs/kns/libkurl.vers
new file mode 100644
index 0000000..7ee7020
--- /dev/null
+++ b/libs/kns/libkurl.vers
@@ -0,0 +1 @@
+1.0.10
diff --git a/libs/kns/stream-from-files.c b/libs/kns/stream-from-files.c
new file mode 100644
index 0000000..2ac4e0b
--- /dev/null
+++ b/libs/kns/stream-from-files.c
@@ -0,0 +1,168 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+typedef struct KStreamFromFiles KStreamFromFiles;
+#define KSTREAM_IMPL KStreamFromFiles
+
+#include <kns/extern.h>
+#include <kns/stream.h>
+#include <kns/impl.h>
+#include <kfs/file.h>
+#include <kfs/impl.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include "stream-priv.h"
+
+
+/* the object structure for THIS implementation */
+struct KStreamFromFiles
+{
+ /* THIS MUST COME FIRST */
+ KStream dad;
+
+ uint64_t in_pos;
+ uint64_t out_pos;
+
+ const KFile *in;
+ KFile *out;
+};
+
+
+/* the required methods */
+
+static
+rc_t CC KStreamFromFilesWhack ( KStreamFromFiles *self )
+{
+ KFileRelease ( self -> in );
+ KFileRelease ( self -> out );
+ free ( self );
+ return 0;
+}
+
+static
+rc_t CC KStreamFromFilesRead ( const KStreamFromFiles *cself,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ rc_t rc = KFileRead ( cself -> in, cself -> in_pos, buffer, bsize, num_read );
+ if ( rc == 0 )
+ {
+ KStreamFromFiles *self = ( KStreamFromFiles* ) cself;
+ self -> in_pos += * num_read;
+ }
+
+ return rc;
+}
+
+static
+rc_t CC KStreamFromFilesWrite ( KStreamFromFiles *self,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ rc_t rc = KFileWrite ( self -> out, self -> out_pos, buffer, size, num_writ );
+ if ( rc == 0 )
+ self -> out_pos += * num_writ;
+
+ return rc;
+}
+
+/* the vtable */
+static KStream_vt_v1 vtKStreamFromFiles =
+{
+ 1, 0,
+ KStreamFromFilesWhack,
+ KStreamFromFilesRead,
+ KStreamFromFilesWrite
+};
+
+
+/* FromKFilePair
+ * create a KStream from a pair of KFiles
+ * maintains a "pos" marker for input and output files
+ *
+ * "strm" [ OUT ] - resultant KStream
+ *
+ * "read" [ IN, NULL OKAY ] - file to use for stream reading
+ *
+ * "write" [ IN, NULL OKAY ] - file to use for stream writing
+ *
+ * NB - EITHER "read" or "write" may be NULL, but not both.
+ */
+LIB_EXPORT rc_t CC KStreamFromKFilePair ( KStream **strm,
+ const KFile *read, KFile *write )
+{
+ rc_t rc;
+
+ if ( strm == NULL )
+ rc = RC ( rcNS, rcStream, rcConstructing, rcParam, rcNull );
+ else
+ {
+ bool can_read = ( read == NULL ) ? false : read -> read_enabled;
+ bool can_write = ( write == NULL ) ? false : write -> write_enabled;
+
+ if ( ! can_read && ! can_write )
+ rc = RC ( rcNS, rcStream, rcConstructing, rcFile, rcNoPerm );
+ else
+ {
+ KStreamFromFiles *sff = calloc ( 1, sizeof *sff );
+ if ( sff == NULL )
+ rc = RC ( rcNS, rcStream, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KStreamInit ( & sff -> dad, ( const KStream_vt* ) & vtKStreamFromFiles,
+ "KStreamFromFilePair", "adapter", can_read, can_write );
+ if ( rc == 0 )
+ {
+ rc = KFileAddRef ( read );
+ if ( rc == 0 )
+ {
+ rc = KFileAddRef ( write );
+ if ( rc == 0 )
+ {
+ sff -> in = read;
+ sff -> out = write;
+ *strm = & sff -> dad;
+
+ return 0;
+ }
+
+ KFileRelease ( read );
+ }
+ }
+
+ free ( sff );
+ }
+ }
+
+ *strm = NULL;
+ }
+
+ return rc;
+}
diff --git a/libs/kns/stream-from-streams.c b/libs/kns/stream-from-streams.c
new file mode 100644
index 0000000..a788403
--- /dev/null
+++ b/libs/kns/stream-from-streams.c
@@ -0,0 +1,150 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+typedef struct KStreamFromStreams KStreamFromStreams;
+#define KSTREAM_IMPL KStreamFromStreams
+
+#include <kns/extern.h>
+#include <kns/stream.h>
+#include <kns/impl.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include "stream-priv.h"
+
+/* the object structure for THIS implementation */
+struct KStreamFromStreams
+{
+ /* THIS MUST COME FIRST */
+ KStream dad;
+
+ const KStream *in;
+ KStream *out;
+};
+
+
+/* the required methods */
+
+static
+rc_t CC KStreamFromStreamsWhack ( KStreamFromStreams *self )
+{
+ KStreamRelease ( self -> in );
+ KStreamRelease ( self -> out );
+ free ( self );
+ return 0;
+}
+
+static
+rc_t CC KStreamFromStreamsRead ( const KStreamFromStreams *self,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ return KStreamRead ( self -> in, buffer, bsize, num_read );
+}
+
+static
+rc_t CC KStreamFromStreamsWrite ( KStreamFromStreams *self,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ return KStreamWrite ( self -> out, buffer, size, num_writ );
+}
+
+/* the vtable */
+static KStream_vt_v1 vtKStreamFromStreams =
+{
+ 1, 0,
+ KStreamFromStreamsWhack,
+ KStreamFromStreamsRead,
+ KStreamFromStreamsWrite
+};
+
+
+/* FromKStreamPair
+ * create a KStream from a pair of KStreams
+ *
+ * "strm" [ OUT ] - resultant KStream
+ *
+ * "read" [ IN, NULL OKAY ] - stream to use for input
+ *
+ * "write" [ IN, NULL OKAY ] - stream to use for output
+ *
+ * NB - EITHER "read" or "write" may be NULL, but not both.
+ */
+LIB_EXPORT rc_t CC KStreamFromKStreamPair ( KStream **strm,
+ const KStream *read, KStream *write )
+{
+ rc_t rc;
+
+ if ( strm == NULL )
+ rc = RC ( rcNS, rcStream, rcConstructing, rcParam, rcNull );
+ else
+ {
+ bool can_read = ( read == NULL ) ? false : read -> read_enabled;
+ bool can_write = ( write == NULL ) ? false : write -> write_enabled;
+
+ if ( ! can_read && ! can_write )
+ rc = RC ( rcNS, rcStream, rcConstructing, rcStream, rcNoPerm );
+ else
+ {
+ KStreamFromStreams *sfs = calloc ( 1, sizeof *sfs );
+ if ( sfs == NULL )
+ rc = RC ( rcNS, rcStream, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KStreamInit ( & sfs -> dad, ( const KStream_vt* ) & vtKStreamFromStreams,
+ "KStreamFromStreamPair", "adapter", can_read, can_write );
+ if ( rc == 0 )
+ {
+ rc = KStreamAddRef ( read );
+ if ( rc == 0 )
+ {
+ rc = KStreamAddRef ( write );
+ if ( rc == 0 )
+ {
+ sfs -> in = read;
+ sfs -> out = write;
+ *strm = & sfs -> dad;
+
+ return 0;
+ }
+
+ KStreamRelease ( read );
+ }
+ }
+
+ free ( sfs );
+ }
+ }
+
+ *strm = NULL;
+ }
+
+ return rc;
+}
diff --git a/libs/kns/stream-priv.h b/libs/kns/stream-priv.h
new file mode 100644
index 0000000..0b6a4b0
--- /dev/null
+++ b/libs/kns/stream-priv.h
@@ -0,0 +1,32 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+/* VDB.v2 is end of life, and introducing new object types is
+ dangerous. For our purposes, just call a stream a file */
+#ifndef rcStream
+#define rcStream rcFile
+#endif
diff --git a/libs/kns/stream.c b/libs/kns/stream.c
new file mode 100644
index 0000000..2b67caf
--- /dev/null
+++ b/libs/kns/stream.c
@@ -0,0 +1,336 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+#include <kns/impl.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include "stream-priv.h"
+
+
+/*--------------------------------------------------------------------------
+ * KStream
+ * a file
+ */
+
+/* Destroy
+ * destroy stream
+ */
+static
+rc_t KStreamDestroy ( KStream *self )
+{
+ if ( self == NULL )
+ return RC ( rcNS, rcStream, rcDestroying, rcSelf, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ return ( * self -> vt -> v1 . destroy ) ( self );
+ }
+
+ return RC ( rcNS, rcStream, rcDestroying, rcInterface, rcBadVersion );
+}
+
+/* AddRef
+ * creates a new reference
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC KStreamAddRef ( const KStream *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "KStream" ) )
+ {
+ case krefLimit:
+ return RC ( rcNS, rcStream, rcAttaching, rcRange, rcExcessive );
+ case krefNegative:
+ return RC ( rcNS, rcStream, rcAttaching, rcSelf, rcInvalid );
+ default:
+ break;
+ }
+ }
+ return 0;
+}
+
+/* Release
+ * discard reference to file
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC KStreamRelease ( const KStream *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "KStream" ) )
+ {
+ case krefWhack:
+ return KStreamDestroy ( ( KStream* ) self );
+ case krefLimit:
+ return RC ( rcNS, rcStream, rcReleasing, rcRange, rcExcessive );
+ default:
+ break;
+ }
+ }
+
+ return 0;
+}
+
+/* Read
+ * read data from stream
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT ] - return parameter giving number of bytes
+ * actually read. when returned value is zero and return code is
+ * also zero, interpreted as end of stream.
+ */
+LIB_EXPORT rc_t CC KStreamRead ( const KStream *self,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ if ( num_read == NULL )
+ return RC ( rcNS, rcStream, rcReading, rcParam, rcNull );
+
+ * num_read = 0;
+
+ if ( self == NULL )
+ return RC ( rcNS, rcStream, rcReading, rcSelf, rcNull );
+
+ if ( ! self -> read_enabled )
+ return RC ( rcNS, rcStream, rcReading, rcStream, rcNoPerm );
+
+ if ( buffer == NULL )
+ return RC ( rcNS, rcStream, rcReading, rcBuffer, rcNull );
+ if ( bsize == 0 )
+ return RC ( rcNS, rcStream, rcReading, rcBuffer, rcInsufficient );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ return ( * self -> vt -> v1 . read ) ( self, buffer, bsize, num_read );
+ }
+
+ return RC ( rcNS, rcStream, rcReading, rcInterface, rcBadVersion );
+}
+
+/* ReadAll
+ * read from stream until "bsize" bytes have been retrieved
+ * or until end-of-input
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT ] - return parameter giving number of bytes
+ * actually read. when returned value is zero and return code is
+ * also zero, interpreted as end of stream.
+ */
+LIB_EXPORT rc_t CC KStreamReadAll ( const KStream *self,
+ void *buffer, size_t bsize, size_t *num_read )
+{
+ rc_t rc;
+ uint8_t *b;
+ size_t total, count;
+
+ if ( num_read == NULL )
+ return RC ( rcNS, rcStream, rcReading, rcParam, rcNull );
+
+ * num_read = 0;
+
+ if ( self == NULL )
+ return RC ( rcNS, rcStream, rcReading, rcSelf, rcNull );
+
+ if ( ! self -> read_enabled )
+ return RC ( rcNS, rcStream, rcReading, rcStream, rcNoPerm );
+
+ if ( buffer == NULL )
+ return RC ( rcNS, rcStream, rcReading, rcBuffer, rcNull );
+ if ( bsize == 0 )
+ return RC ( rcNS, rcStream, rcReading, rcBuffer, rcInsufficient );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ for ( rc = 0, b = buffer, total = 0; total < bsize; total += count )
+ {
+ count = 0;
+ rc = ( * self -> vt -> v1 . read ) ( self, b + total, bsize - total, & count );
+ if ( rc != 0 )
+ break;
+ if ( count == 0 )
+ break;
+ }
+ break;
+ default:
+ return RC ( rcNS, rcStream, rcReading, rcInterface, rcBadVersion );
+ }
+
+ if ( total != 0 )
+ {
+ * num_read = total;
+ return 0;
+ }
+
+ return rc;
+}
+
+/* Write
+ * send data to stream
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ */
+LIB_EXPORT rc_t CC KStreamWrite ( KStream *self,
+ const void *buffer, size_t size, size_t *num_writ)
+{
+ size_t ignore;
+ if ( num_writ == NULL )
+ num_writ = & ignore;
+
+ * num_writ = 0;
+
+ if ( self == NULL )
+ return RC ( rcNS, rcStream, rcWriting, rcSelf, rcNull );
+
+ if ( ! self -> write_enabled )
+ return RC ( rcNS, rcStream, rcWriting, rcStream, rcNoPerm );
+
+ if ( size == 0 )
+ return 0;
+ if ( buffer == NULL )
+ return RC ( rcNS, rcStream, rcWriting, rcBuffer, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ return ( * self -> vt -> v1 . write ) ( self, buffer, size, num_writ );
+ }
+
+ return RC ( rcNS, rcStream, rcWriting, rcInterface, rcBadVersion );
+}
+
+/* WriteAll
+ * write to stream until "size" bytes have been transferred
+ * or until no further progress can be made
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ */
+LIB_EXPORT rc_t CC KStreamWriteAll ( KStream *self,
+ const void *buffer, size_t size, size_t *num_writ )
+{
+ rc_t rc;
+ const uint8_t *b;
+ size_t total, count;
+
+ size_t ignore;
+ if ( num_writ == NULL )
+ num_writ = & ignore;
+
+ * num_writ = 0;
+
+ if ( self == NULL )
+ return RC ( rcNS, rcStream, rcWriting, rcSelf, rcNull );
+
+ if ( ! self -> write_enabled )
+ return RC ( rcNS, rcStream, rcWriting, rcStream, rcNoPerm );
+
+ if ( size == 0 )
+ return 0;
+ if ( buffer == NULL )
+ return RC ( rcNS, rcStream, rcWriting, rcBuffer, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ for ( rc = 0, b = buffer, total = 0; total < size; total += count )
+ {
+ count = 0;
+ rc = ( * self -> vt -> v1 . write ) ( self, b + total, size - total, & count );
+ if ( rc != 0 )
+ break;
+ if ( count == 0 )
+ break;
+ }
+ break;
+ default:
+ return RC ( rcNS, rcStream, rcWriting, rcInterface, rcBadVersion );
+ }
+
+ * num_writ = total;
+ if ( total == size )
+ return 0;
+ if ( rc == 0 )
+ return RC ( rcNS, rcStream, rcWriting, rcTransfer, rcIncomplete );
+ return rc;
+}
+
+
+/* Init
+ * initialize a newly allocated stream object
+ */
+LIB_EXPORT rc_t CC KStreamInit ( KStream *self, const KStream_vt *vt,
+ const char *classname, const char *strname,
+ bool read_enabled, bool write_enabled )
+{
+ if ( self == NULL )
+ return RC ( rcNS, rcStream, rcConstructing, rcSelf, rcNull );
+ if ( vt == NULL )
+ return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcNull );
+ switch ( vt -> v1 . maj )
+ {
+ case 0:
+ return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcInvalid );
+
+ case 1:
+ switch ( vt -> v1 . min )
+ {
+ /* ADD NEW MINOR VERSION CASES HERE */
+ case 0:
+#if _DEBUGGING
+ if ( vt -> v1 . write == NULL ||
+ vt -> v1 . read == NULL ||
+ vt -> v1 . destroy == NULL )
+ return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcNull );
+#endif
+ break;
+ default:
+ return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcBadVersion );
+ }
+ break;
+
+ default:
+ return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcBadVersion );
+ }
+
+ self -> vt = vt;
+ KRefcountInit ( & self -> refcount, 1, classname, "init", strname );
+ self -> read_enabled = ( uint8_t ) ( read_enabled != 0 );
+ self -> write_enabled = ( uint8_t ) ( write_enabled != 0 );
+
+ return 0;
+}
diff --git a/libs/kns/url-fetcher-curl.c b/libs/kns/url-fetcher-curl.c
new file mode 100644
index 0000000..12c7073
--- /dev/null
+++ b/libs/kns/url-fetcher-curl.c
@@ -0,0 +1,255 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+#include <klib/rc.h>
+#include <kns/manager.h>
+#include <kns/url-fetcher.h>
+
+/* IMPORTANT define this before including the *-impl.h !!!! */
+#define KURL_FETCHER_IMPL KUrlFetcherCurl
+#include "url-fetcher-impl.h"
+
+#include "kns_mgr_priv.h"
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+/*
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+*/
+
+/*--------------------------------------------------------------------------
+ * KVectorNamelist ... a generic Namelist based on a Vector
+ */
+struct KUrlFetcherCurl
+{
+ KUrlFetcher dad;
+
+ struct KNSManager *kns_mgr;
+ CURL *curl_handle;
+
+ /* this buffer is passed in from read() to the callback
+ it is owned by the caller not this class */
+ char *buff;
+ size_t buffsize;
+ size_t in_buff;
+
+ /* this is the spill-over buffer, used by the callback
+ if the caller-provided buffer is too small */
+ char *spill_over_buff;
+ size_t spill_over_buffsize;
+};
+
+/* implementation of the the virtual KUrlFetcher-Interface for curl */
+
+static
+rc_t CC KUrlFetcherCurlDestroy ( KUrlFetcherCurl *self )
+{
+ self->kns_mgr->curl_easy_cleanup_fkt( self -> curl_handle );
+ KNSManagerRelease( self->kns_mgr );
+
+ if ( self -> spill_over_buff != NULL )
+ free( self -> spill_over_buff );
+ free ( self );
+ return 0;
+}
+
+static
+size_t CC KUrlFetcherCurlCallback( void *ptr, size_t size, size_t nmemb, void *data )
+{
+ size_t given_bytes = size * nmemb; /* calculate the size given in ptr */
+ KUrlFetcherCurl *self = ( KUrlFetcherCurl * )data;
+ if ( self != NULL )
+ {
+ if ( ( self -> in_buff + given_bytes ) > self -> buffsize )
+ {
+ /* the caller-provided buffer IS NOT enough... */
+ size_t to_copy = ( self -> buffsize - self -> in_buff );
+ if ( to_copy > 0 )
+ {
+ /* the caller-provided buffer can hold a part of it... */
+ if ( self -> buff )
+ {
+ memcpy( &( self -> buff [ self -> in_buff ] ), ptr, given_bytes );
+ self -> in_buff += given_bytes;
+ }
+ }
+ else
+ {
+ /* the spill-over-buffer has to take care of the rest... */
+ size_t remaining = ( given_bytes - to_copy );
+ if ( self -> spill_over_buff == NULL )
+ self -> spill_over_buff = malloc( remaining );
+ else
+ self -> spill_over_buff = realloc( self -> spill_over_buff,
+ self -> spill_over_buffsize + remaining );
+ if ( self -> spill_over_buff != NULL )
+ {
+ memcpy( &( self -> spill_over_buff [ self -> spill_over_buffsize ] ), ptr, remaining );
+ self -> spill_over_buffsize += remaining;
+ }
+ }
+ }
+ else
+ {
+ /* the caller-provided buffer IS enough... */
+ if ( self -> buff )
+ {
+ memcpy( &( self -> buff [ self -> in_buff ] ), ptr, given_bytes );
+ self -> in_buff += given_bytes;
+ }
+ }
+ }
+ return given_bytes;
+}
+
+
+static
+rc_t CC KUrlFetcherCurlRead( KUrlFetcherCurl *self, const char * uri,
+ void *dst, size_t to_read, size_t *num_read )
+{
+ CURLcode rcc;
+
+ /* the virtual interface has already checked that self is not NULL */
+ if ( uri == NULL || dst == NULL || to_read == 0 )
+ return RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+
+ self -> buff = dst;
+ self -> buffsize = to_read;
+ self -> in_buff = 0;
+
+ if ( self -> spill_over_buff != NULL )
+ free( self -> spill_over_buff );
+ self -> spill_over_buff = NULL;
+ self -> spill_over_buffsize = 0;
+
+ if ( self -> curl_handle == NULL )
+ return RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+
+ rcc = self->kns_mgr->curl_easy_setopt_fkt( self -> curl_handle, CURLOPT_URL, uri );
+ if ( rcc != CURLE_OK )
+ {
+ if ( num_read ) *num_read = 0;
+ return RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rcc = self->kns_mgr->curl_easy_perform_fkt( self-> curl_handle );
+ if ( rcc != CURLE_OK )
+ {
+ if ( num_read ) *num_read = 0;
+ return RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+ }
+ }
+
+ if ( num_read )
+ *num_read = self -> in_buff;
+
+ return 0;
+}
+
+static KUrlFetcher_vt_v1 sKUrlFetcherCurl_vt =
+{
+ 1, 0,
+ KUrlFetcherCurlDestroy,
+ KUrlFetcherCurlRead,
+};
+
+LIB_EXPORT rc_t CC KUrlFetcherCurlMake( KUrlFetcher **fetcher, const bool verbose )
+{
+ rc_t rc;
+
+ if ( fetcher == NULL )
+ rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+ else
+ {
+ KUrlFetcherCurl * tmp;
+ *fetcher = NULL;
+ tmp = malloc( sizeof( * tmp ) );
+ if ( tmp != NULL )
+ {
+ rc = KUrlFetcherInit ( &(tmp)->dad, (const KUrlFetcher_vt*)&sKUrlFetcherCurl_vt );
+ if ( rc != 0 )
+ free( tmp );
+ else
+ {
+ tmp -> buff = NULL;
+ tmp -> buffsize = 0;
+ tmp -> in_buff = 0;
+
+ tmp -> spill_over_buff = NULL;
+ tmp -> spill_over_buffsize = 0;
+
+ rc = KNSManagerMake( &tmp->kns_mgr );
+ if ( rc == 0 )
+ {
+ tmp -> curl_handle = tmp -> kns_mgr -> curl_easy_init_fkt();
+ if ( tmp -> curl_handle == NULL )
+ {
+ KNSManagerRelease( tmp->kns_mgr );
+ free( tmp );
+ rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ CURLcode rcc;
+
+ if ( verbose )
+ tmp -> kns_mgr -> curl_easy_setopt_fkt( tmp -> curl_handle, CURLOPT_VERBOSE , 1 );
+
+ rcc = tmp -> kns_mgr -> curl_easy_setopt_fkt( tmp -> curl_handle, CURLOPT_WRITEFUNCTION, KUrlFetcherCurlCallback );
+ if ( rcc != CURLE_OK )
+ {
+ KNSManagerRelease( tmp -> kns_mgr );
+ free( tmp );
+ rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rcc = tmp -> kns_mgr -> curl_easy_setopt_fkt( tmp -> curl_handle, CURLOPT_WRITEDATA, (void *)tmp );
+ if ( rcc != CURLE_OK )
+ {
+ KNSManagerRelease( tmp -> kns_mgr );
+ free( tmp );
+ rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+ }
+ else
+ *fetcher = & tmp -> dad;
+ }
+ }
+ }
+ }
+ }
+ else
+ rc = RC( rcApp, rcFunction, rcListing, rcParam, rcNull );
+ }
+ return rc;
+}
diff --git a/libs/kns/url-fetcher-impl.h b/libs/kns/url-fetcher-impl.h
new file mode 100644
index 0000000..0965bfa
--- /dev/null
+++ b/libs/kns/url-fetcher-impl.h
@@ -0,0 +1,109 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*--------------------------------------------------------------------------
+ * this file contains the private parts (v-table) of a generic url-fetcher
+ the user has to provide 3 things to the fetcher:
+ (1) the url to fetch via vt->set_url()
+ (2) eventually a context pointer via vt->set_context()
+ (3) a callback function via vt->set_callback()
+ before the user can "start" the fetcher:
+ via vt->fetch()
+ */
+
+#ifndef _h_url_fetcher_impl_
+#define _h_url_fetcher_impl_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_kfs_file_
+#include <kfs/file.h>
+#endif
+
+#ifndef _h_url_fetcher_
+#include <kns/url-fetcher.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef union KUrlFetcher_vt KUrlFetcher_vt;
+
+/*--------------------------------------------------------------------------
+ * KUrl_fetcher
+ * a virtual url-fetcher
+ */
+struct KUrlFetcher
+{
+ const KUrlFetcher_vt *vt;
+ KRefcount refcount;
+};
+
+
+#ifndef KURL_FETCHER_IMPL
+#define KURL_FETCHER_IMPL KUrlFetcher
+#endif
+
+
+typedef struct KUrlFetcher_vt_v1 KUrlFetcher_vt_v1;
+struct KUrlFetcher_vt_v1
+{
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+ rc_t ( CC * destroy ) ( KURL_FETCHER_IMPL *self );
+ rc_t ( CC * read ) ( KURL_FETCHER_IMPL *self, const char * uri,
+ void *dst, size_t to_read, size_t *num_read );
+ rc_t ( CC * get_size ) ( KURL_FETCHER_IMPL *self, size_t *num_size );
+ /* end minor version == 0 */
+};
+
+union KUrlFetcher_vt
+{
+ KUrlFetcher_vt_v1 v1;
+};
+
+/* Init
+ */
+KNS_EXTERN rc_t CC KUrlFetcherInit ( KUrlFetcher *self, const KUrlFetcher_vt *vt );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libs/kns/url-fetcher.c b/libs/kns/url-fetcher.c
new file mode 100644
index 0000000..ff9e16b
--- /dev/null
+++ b/libs/kns/url-fetcher.c
@@ -0,0 +1,129 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include "url-fetcher-impl.h"
+#include <sysalloc.h>
+
+#include <stdlib.h>
+
+/* to define the latest version of the url-fetcher in the vt */
+#define KURLFETCHER_LATEST 1
+
+static const char classname[] = "KUrlFetcher";
+
+/* AddRef
+ * creates a new reference
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC KUrlFetcherAddRef ( const KUrlFetcher *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, classname ) )
+ {
+ case krefLimit:
+ return RC ( rcApp, rcFunction, rcAttaching, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+/* Release
+ * discard reference to list
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC KUrlFetcherRelease ( const KUrlFetcher *cself )
+{
+ KUrlFetcher *self = ( KUrlFetcher* ) cself;
+ if ( cself != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, classname ) )
+ {
+ case krefWhack:
+ {
+ rc_t rc;
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ rc = ( * self -> vt -> v1 . destroy ) ( self );
+ break;
+
+ default:
+ rc = RC ( rcApp, rcFunction, rcReleasing, rcInterface, rcBadVersion );
+ }
+
+ if ( rc != 0 )
+ KRefcountInit ( & self -> refcount, 1, classname, "failed-release", "orphan" );
+ return rc;
+ }
+ case krefLimit:
+ return RC ( rcApp, rcFunction, rcReleasing, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+
+/* Read
+ * reads data from the internal buffer ...
+ */
+LIB_EXPORT rc_t CC KUrlFetcherRead( KUrlFetcher *self, const char * uri,
+ void *dst, size_t to_read, size_t *num_read )
+{
+ if ( self == NULL )
+ return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ return ( * self -> vt -> v1 . read ) ( self, uri, dst, to_read, num_read );
+ }
+
+ return RC ( rcApp, rcFunction, rcAccessing, rcInterface, rcBadVersion );
+}
+
+
+/* Init
+ * polymorphic parent constructor
+ */
+LIB_EXPORT rc_t CC KUrlFetcherInit ( KUrlFetcher *self, const KUrlFetcher_vt *vt )
+{
+ if ( self == NULL || vt == NULL )
+ return RC ( rcApp, rcFunction, rcConstructing, rcSelf, rcNull );
+
+ if ( vt -> v1 . maj == 0 )
+ return RC ( rcApp, rcFunction, rcConstructing, rcInterface, rcInvalid );
+
+ if ( vt -> v1 . maj > KURLFETCHER_LATEST )
+ return RC ( rcApp, rcFunction, rcConstructing, rcInterface, rcBadVersion );
+
+ self -> vt = vt;
+ KRefcountInit ( & self -> refcount, 1, classname, "initialized", "regular" );
+ return 0;
+}
diff --git a/libs/kproc/Makefile b/libs/kproc/Makefile
index 00d6281..5234c2e 100644
--- a/libs/kproc/Makefile
+++ b/libs/kproc/Makefile
@@ -28,27 +28,26 @@ default: std
TOP ?= $(shell ../../build/abspath.sh ../..)
MODULE = libs/kproc
-EXT_LIBS = \
- libkproc \
- libksproc \
- libkq
-
ALL_LIBS = \
$(INT_LIBS) \
$(EXT_LIBS)
include $(TOP)/build/Makefile.env
+EXT_LIBS = \
+ libksproc \
+ libkproc
+
+ifneq (win,$(OS))
+EXT_LIBS += \
+ libkq
+endif
+
#-------------------------------------------------------------------------------
# outer targets
#
-ifeq (win,$(OS))
-all std:
- @ true
-else
all std: makedirs
@ $(MAKE_CMD) $(TARGDIR)/std
-endif
$(INT_LIBS): makedirs
@ $(MAKE_CMD) $(ILIBDIR)/$@
@@ -87,18 +86,38 @@ tag: \
#
$(LIBDIR)/libkproc: $(addprefix $(LIBDIR)/libkproc.,$(LIBEXT))
+PROC_CMN = \
+ task \
+ procmgr
+
PROC_SRC = \
+ $(PROC_CMN)
+
+ifneq (win,$(OS))
+PROC_SRC += \
systimeout \
syslock \
+ systhread \
syscond \
- sem \
- systhread
+ sem
+else
+PROC_SRC += \
+ systimeout \
+ syslock \
+ systhread \
+ syscond
+endif
PROC_OBJ = \
$(addsuffix .$(LOBX),$(PROC_SRC))
+ifneq (win,$(OS))
PROC_LIB = \
-dpthread
+else
+PROC_LIB = \
+ -dklib
+endif
$(LIBDIR)/libkproc.$(SHLX): $(PROC_OBJ)
$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(PROC_LIB)
@@ -116,6 +135,7 @@ libkproc_tag:
$(LIBDIR)/libksproc: $(addprefix $(LIBDIR)/libksproc.,$(LIBEXT))
SPROC_SRC = \
+ $(PROC_CMN) \
sttimeout \
stlock \
stcond \
@@ -126,11 +146,14 @@ SPROC_SRC = \
SPROC_OBJ = \
$(addsuffix .$(LOBX),$(SPROC_SRC))
+SPROC_LIB = \
+ -dklib
+
$(LIBDIR)/libksproc.$(SHLX): $(SPROC_OBJ)
- $(LD) --dlib --vers $(SRCDIR) -o $@ $^
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(SPROC_LIB)
$(LIBDIR)/libksproc.$(LIBX): $(SPROC_OBJ)
- $(LD) --slib --vers $(SRCDIR) -o $@ $^
+ $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(SPROC_LIB)
libksproc_tag:
@ $(TOP)/build/tag-module.sh $(MODULE) libksproc $(SPROC_OBJ)
@@ -148,8 +171,8 @@ Q_OBJ = \
$(addsuffix .$(LOBX),$(Q_SRC))
Q_LIB = \
- -dklib \
- -dkproc
+ -dkproc \
+ -dklib
$(LIBDIR)/libkq.$(SHLX): $(Q_OBJ)
$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(Q_LIB)
diff --git a/libs/kproc/bsd/syslock.c b/libs/kproc/bsd/syslock.c
index ebd71e1..5cfada0 100644
--- a/libs/kproc/bsd/syslock.c
+++ b/libs/kproc/bsd/syslock.c
@@ -27,6 +27,7 @@
#include <kproc/extern.h>
#include "syslock-priv.h"
#include "syscond-priv.h"
+#include <kproc/timeout.h>
#include <kproc/lock.h>
#include <kproc/cond.h>
#include <os-native.h>
diff --git a/libs/kproc/libkproc.vers b/libs/kproc/libkproc.vers
index ee90284..66c4c22 100644
--- a/libs/kproc/libkproc.vers
+++ b/libs/kproc/libkproc.vers
@@ -1 +1 @@
-1.0.4
+1.0.9
diff --git a/libs/kproc/libkq.vers b/libs/kproc/libkq.vers
index ee90284..238d6e8 100644
--- a/libs/kproc/libkq.vers
+++ b/libs/kproc/libkq.vers
@@ -1 +1 @@
-1.0.4
+1.0.7
diff --git a/libs/kproc/libksproc.vers b/libs/kproc/libksproc.vers
index ee90284..238d6e8 100644
--- a/libs/kproc/libksproc.vers
+++ b/libs/kproc/libksproc.vers
@@ -1 +1 @@
-1.0.4
+1.0.7
diff --git a/libs/kproc/linux/syslock.c b/libs/kproc/linux/syslock.c
index 27a841b..aa86628 100644
--- a/libs/kproc/linux/syslock.c
+++ b/libs/kproc/linux/syslock.c
@@ -27,6 +27,7 @@
#include <kproc/extern.h>
#include "syslock-priv.h"
#include <os-native.h>
+#include <kproc/timeout.h>
#include <kproc/lock.h>
#include <klib/rc.h>
#include <sysalloc.h>
diff --git a/libs/kproc/procmgr.c b/libs/kproc/procmgr.c
new file mode 100644
index 0000000..c9cd221
--- /dev/null
+++ b/libs/kproc/procmgr.c
@@ -0,0 +1,412 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kproc/extern.h>
+
+#include <kproc/procmgr.h>
+#include <kproc/task.h>
+#include <kproc/lock.h>
+#include <klib/refcount.h>
+#include <klib/rc.h>
+
+#define rcTask rcCmd
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------
+ * KCleanupTaskQueue
+ */
+typedef struct KCleanupTaskQueue KCleanupTaskQueue;
+struct KCleanupTaskQueue
+{
+ uint64_t count;
+ uint64_t capacity;
+ uint64_t start;
+ KTask *q [ 1 ];
+};
+
+
+/*--------------------------------------------------------------------------
+ * KProcMgr
+ */
+struct KProcMgr
+{
+ KLock *cleanup_lock;
+ KCleanupTaskQueue *cleanup;
+ KRefcount refcount;
+};
+
+static KProcMgr * s_proc_mgr;
+
+
+/* Whack
+ * tear down proc mgr
+ * runs any outstanding cleanup tasks
+ * deletes the singleton object
+ * intended to be called from an "atexit()" or similar task
+ */
+LIB_EXPORT rc_t CC KProcMgrWhack ( void )
+{
+ rc_t rc = 0;
+
+ KProcMgr *self = s_proc_mgr;
+ if ( s_proc_mgr != NULL )
+ {
+ s_proc_mgr = NULL;
+
+ rc = KLockAcquire ( self -> cleanup_lock );
+ if ( rc == 0 )
+ {
+ uint64_t i;
+
+ KCleanupTaskQueue *cleanup = self -> cleanup;
+ self -> cleanup = NULL;
+ KLockUnlock ( self -> cleanup_lock );
+
+ if ( cleanup != NULL )
+ {
+ for ( i = 0; i < cleanup -> count; ++ i )
+ {
+ KTask *task = cleanup -> q [ i ];
+ if ( task != NULL )
+ {
+ rc_t task_rc = KTaskExecute ( task );
+ if ( rc == 0 )
+ rc = task_rc;
+
+ cleanup -> q [ i ] = NULL;
+ KTaskRelease ( task );
+ }
+ }
+
+ free ( cleanup );
+ }
+ }
+
+ KLockRelease ( self -> cleanup_lock );
+ free ( self );
+ }
+
+ return rc;
+}
+
+
+/* Init
+ * initialize the proc mgr
+ * creates the singleton object
+ */
+LIB_EXPORT rc_t CC KProcMgrInit ( void )
+{
+ rc_t rc = 0;
+
+ if ( s_proc_mgr == NULL )
+ {
+ KProcMgr *mgr = malloc ( sizeof * s_proc_mgr );
+ if ( mgr == NULL )
+ rc = RC ( rcPS, rcMgr, rcInitializing, rcMemory, rcExhausted );
+ else
+ {
+ rc = KLockMake ( & mgr -> cleanup_lock );
+ if ( rc == 0 )
+ {
+ mgr -> cleanup = NULL;
+ KRefcountInit ( & mgr -> refcount, 0, "KProcMgr", "init", "process mgr" );
+
+ s_proc_mgr = mgr;
+ return 0;
+ }
+
+ free ( mgr );
+ }
+ }
+
+ return rc;
+}
+
+
+/* MakeSingleton
+ * make or access singleton process manager
+ * VDB-2 ONLY
+ */
+LIB_EXPORT rc_t CC KProcMgrMakeSingleton ( KProcMgr ** mgrp )
+{
+ rc_t rc;
+
+ if ( mgrp == NULL )
+ rc = RC ( rcPS, rcMgr, rcConstructing, rcParam, rcNull );
+ else
+ {
+ * mgrp = s_proc_mgr;
+
+ if ( s_proc_mgr == NULL )
+ rc = RC ( rcPS, rcMgr, rcConstructing, rcMgr, rcNull );
+ else
+ rc = KProcMgrAddRef ( s_proc_mgr );
+ }
+
+ return rc;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KProcMgrAddRef ( const KProcMgr *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "KProcMgr" ) )
+ {
+ case krefLimit:
+ return RC ( rcPS, rcMgr, rcAttaching, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+LIB_EXPORT rc_t CC KProcMgrRelease ( const KProcMgr *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "KProcMgr" ) )
+ {
+ case krefWhack:
+ return 0;
+ case krefLimit:
+ return RC ( rcPS, rcMgr, rcReleasing, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+
+/* AddCleanupTask
+ * add a task to be performed at process exit time
+ *
+ * "ticket" [ OUT ] - an id that can be used later to remove task
+ *
+ * "task" [ IN ] - task object that will be executed at process
+ * exit, unless previously removed ( see RemoveCleanupTask ).
+ * NB - a new reference to "task" will be created
+ */
+LIB_EXPORT rc_t CC KProcMgrAddCleanupTask ( KProcMgr *self, KTaskTicket *ticket, KTask *task )
+{
+ rc_t rc;
+
+ if ( ticket == NULL )
+ rc = RC ( rcPS, rcQueue, rcInserting, rcId, rcNull );
+ else
+ {
+ memset ( ticket, 0, sizeof * ticket );
+
+ if ( self == NULL )
+ rc = RC ( rcPS, rcQueue, rcInserting, rcSelf, rcNull );
+ else if ( self != s_proc_mgr )
+ rc = RC ( rcPS, rcQueue, rcInserting, rcSelf, rcIncorrect );
+ else if ( task == NULL )
+ rc = RC ( rcPS, rcQueue, rcInserting, rcTask, rcNull );
+ else
+ {
+ rc = KTaskAddRef ( task );
+ if ( rc == 0 )
+ {
+ rc = KLockAcquire ( self -> cleanup_lock );
+ if ( rc == 0 )
+ {
+ const uint64_t extend = 1024;
+ KCleanupTaskQueue *cleanup = self -> cleanup;
+
+ /* on first insert, allocate queue */
+ if ( self -> cleanup == NULL )
+ {
+ cleanup = malloc ( sizeof * cleanup - sizeof cleanup -> q
+ + sizeof cleanup -> q [ 0 ] * extend );
+ if ( cleanup == NULL )
+ rc = RC ( rcPS, rcQueue, rcInserting, rcMemory, rcExhausted );
+ else
+ {
+ cleanup -> count = 0;
+ cleanup -> capacity = extend;
+ cleanup -> start = 0;
+
+ self -> cleanup = cleanup;
+ }
+ }
+
+ /* if queue is full */
+ else if ( cleanup -> count == cleanup -> capacity )
+ {
+ uint64_t empty;
+
+ /* determine number of empty slots at start */
+ for ( empty = 0; empty < cleanup -> count; ++ empty )
+ {
+ if ( cleanup -> q [ empty ] != NULL )
+ break;
+ }
+
+ /* if none are empty, simply reallocate - probably bad... */
+ if ( empty == 0 )
+ {
+ cleanup = realloc ( cleanup, sizeof * cleanup - sizeof cleanup -> q
+ + sizeof cleanup -> q [ 0 ] * ( cleanup -> capacity + extend ) );
+ if ( cleanup == NULL )
+ rc = RC ( rcPS, rcQueue, rcInserting, rcMemory, rcExhausted );
+ else
+ {
+ cleanup -> capacity += extend;
+ self -> cleanup = cleanup;
+ }
+ }
+
+ /* otherwise, rewrite to remove empty slots */
+ else
+ {
+ uint64_t i;
+ const KCleanupTaskQueue *orig = cleanup;
+
+ /* only bother with resize if there are enough to recover */
+ if ( empty >= 4096 )
+ {
+ cleanup = malloc ( sizeof * cleanup - sizeof cleanup -> q
+ + sizeof cleanup -> q [ 0 ] * ( orig -> capacity - empty + extend ) );
+ if ( cleanup == NULL )
+ rc = RC ( rcPS, rcQueue, rcInserting, rcMemory, rcExhausted );
+ else
+ {
+ cleanup -> capacity = orig -> capacity - empty + extend;
+ }
+ }
+
+ /* rewrite count to remove leading NULL entries */
+ cleanup -> count = orig -> count - empty;
+
+ /* accumulate NULL entries into the start offset */
+ cleanup -> start = orig -> start + empty;
+
+ /* copy the tasks */
+ for ( i = 0; i < cleanup -> count; ++ i )
+ cleanup -> q [ i ] = orig -> q [ empty + i ];
+
+ if ( ( const KCleanupTaskQueue* ) cleanup != orig )
+ {
+ self -> cleanup = cleanup;
+ free ( ( void* ) orig );
+ }
+ }
+ }
+
+ /* detect valid queue for insertion */
+ if ( rc == 0 )
+ {
+ /* assert that there is space for a task */
+ assert ( cleanup -> count < cleanup -> capacity );
+
+ /* record reference to task */
+ cleanup -> q [ cleanup -> count ] = task;
+
+ /* fill out the ticket information */
+ ticket -> info [ 0 ] = cleanup -> start + cleanup -> count;
+ ticket -> info [ 1 ] = ( size_t ) task;
+ ticket -> info [ 0 ] ^= ( size_t ) self;
+ ticket -> info [ 1 ] ^= ( size_t ) self;
+ ticket -> info [ 0 ] ^= ( size_t ) task;
+
+ /* account for insertion */
+ ++ cleanup -> count;
+ }
+
+ KLockUnlock ( self -> cleanup_lock );
+ }
+
+ if ( rc != 0 )
+ KTaskRelease ( task );
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* RemoveCleanupTask
+ * remove a task from exit queue
+ * releases reference to task object
+ * returns an rcNotFound code if task no longer exists
+ */
+LIB_EXPORT rc_t CC KProcMgrRemoveCleanupTask ( KProcMgr *self, const KTaskTicket *ticket )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcPS, rcQueue, rcRemoving, rcSelf, rcNull );
+ else if ( self != s_proc_mgr )
+ rc = RC ( rcPS, rcQueue, rcRemoving, rcSelf, rcIncorrect );
+ else if ( ticket == NULL )
+ rc = RC ( rcPS, rcQueue, rcRemoving, rcId, rcNull );
+ else
+ {
+ /* recover task* and idx */
+ KTask *task = ( KTask* ) ( ( size_t ) ticket -> info [ 1 ] ^ ( size_t ) self );
+ uint64_t idx = ticket -> info [ 0 ] ^ ( size_t ) task;
+ idx ^= ( size_t ) self;
+
+ /* go into queue */
+ rc = KLockAcquire ( self -> cleanup_lock );
+ if ( rc == 0 )
+ {
+ KCleanupTaskQueue *cleanup = self -> cleanup;
+ if ( self -> cleanup == NULL )
+ rc = RC ( rcPS, rcQueue, rcRemoving, rcItem, rcNotFound );
+ else if ( idx < cleanup -> start )
+ rc = RC ( rcPS, rcQueue, rcRemoving, rcItem, rcNotFound );
+ else
+ {
+ idx -= cleanup -> start;
+ if ( idx >= cleanup -> count )
+ rc = RC ( rcPS, rcQueue, rcRemoving, rcItem, rcNotFound );
+ else if ( cleanup -> q [ idx ] != task )
+ rc = RC ( rcPS, rcQueue, rcRemoving, rcItem, rcNotFound );
+ else
+ {
+ cleanup -> q [ idx ] = NULL;
+ }
+ }
+
+ KLockUnlock ( self -> cleanup_lock );
+ }
+
+ if ( rc == 0 )
+ KTaskRelease ( task );
+ }
+
+ return rc;
+}
diff --git a/libs/kproc/queue.c b/libs/kproc/queue.c
index bb2b0c7..5b30d2e 100644
--- a/libs/kproc/queue.c
+++ b/libs/kproc/queue.c
@@ -26,8 +26,10 @@
#include <kproc/q-extern.h>
#include <kproc/queue.h>
+#include <kproc/timeout.h>
#include <kproc/lock.h>
#include <kproc/sem.h>
+#include <klib/out.h>
#include <klib/rc.h>
#include <atomic32.h>
#include <os-native.h>
@@ -36,6 +38,14 @@
#include <stdlib.h>
#include <assert.h>
+#if _DEBUGGING && 0
+#define QMSG( msg, ... ) \
+ KOutMsg ( msg, __VA_ARGS__ )
+#else
+#define QMSG( msg, ... ) \
+ ( void ) 0
+#endif
+
/*--------------------------------------------------------------------------
* KQueue
* a simple thread-safe queue structure supporting push/pop operation
@@ -64,13 +74,19 @@ struct KQueue
static
rc_t KQueueWhack ( KQueue *self )
{
- rc_t rc = KSemaphoreRelease ( self -> wc );
+ rc_t rc;
+ QMSG ( "%s: releasing write semaphore\n", __func__ );
+ rc = KSemaphoreRelease ( self -> wc );
if ( rc == 0 )
{
+ QMSG ( "%s: releasing read semaphore\n", __func__ );
KSemaphoreRelease ( self -> rc );
+ QMSG ( "%s: releasing write lock\n", __func__ );
KLockRelease ( self -> wl );
+ QMSG ( "%s: releasing read lock\n", __func__ );
KLockRelease ( self -> rl );
free ( self );
+ QMSG ( "%s: done\n", __func__ );
}
return rc;
}
@@ -141,6 +157,11 @@ LIB_EXPORT rc_t CC KQueueMake ( KQueue **qp, uint32_t capacity )
atomic32_set ( & q -> refcount, 1 );
q -> sealed = false;
+ QMSG ( "%s: created queue with capacity %u, "
+ "bmask %#032b, imask %#032b.\n"
+ , __func__, q -> capacity, q -> bmask, q -> imask
+ );
+
* qp = q;
return 0;
}
@@ -178,14 +199,21 @@ LIB_EXPORT rc_t CC KQueuePush ( KQueue *self, const void *item, timeout_t *tm )
if ( self == NULL )
return RC ( rcCont, rcQueue, rcInserting, rcSelf, rcNull );
if ( self -> sealed )
+ {
+ QMSG ( "%s: failed to insert into queue due to seal\n", __func__ );
return RC ( rcCont, rcQueue, rcInserting, rcQueue, rcReadonly );
+ }
if ( item == NULL )
return RC ( rcCont, rcQueue, rcInserting, rcTimeout, rcNull );
+ QMSG ( "%s: acquiring write lock ( %p )...\n", __func__, self -> wl );
rc = KLockAcquire ( self -> wl );
+ QMSG ( "%s: ...done, rc = %R\n", __func__, rc );
if ( rc == 0 )
{
+ QMSG ( "%s: waiting on write semaphore...\n", __func__ );
rc = KSemaphoreTimedWait ( self -> wc, self -> wl, tm );
+ QMSG ( "%s: ...done, rc = %R. unlocking write lock ( %p ).\n", __func__, rc, self -> wl );
KLockUnlock ( self -> wl );
if ( rc == 0 )
@@ -195,24 +223,36 @@ LIB_EXPORT rc_t CC KQueuePush ( KQueue *self, const void *item, timeout_t *tm )
/* re-check the seal */
if ( self -> sealed )
{
+ QMSG ( "%s: queue has been sealed\n", __func__ );
+
/* not a disaster if semaphore not signaled */
+ QMSG ( "%s: acquiring write lock\n", __func__ );
if ( ! KLockAcquire ( self -> wl ) )
{
+ QMSG ( "%s: signaling write semaphore\n", __func__ );
KSemaphoreSignal ( self -> wc );
+ QMSG ( "%s: unlocking write lock\n", __func__ );
KLockUnlock ( self -> wl );
}
+
+ QMSG ( "%s: failed to insert into queue due to seal\n", __func__ );
return RC ( rcCont, rcQueue, rcInserting, rcQueue, rcReadonly );
}
/* insert item */
w = self -> write & self -> imask;
+ QMSG ( "%s: write index is %u, masked against 0x%x\n", __func__, w, self -> imask );
self -> buffer [ w & self -> bmask ] = ( void* ) item;
+ QMSG ( "%s: inserted item into buffer [ %u ], using mask 0x%x\n", __func__, w & self -> bmask, self -> bmask );
self -> write = w + 1;
/* let listeners know about item */
+ QMSG ( "%s: acquiring read lock ( %p )\n", __func__, self -> rl );
if ( KLockAcquire ( self -> rl ) == 0 )
{
+ QMSG ( "%s: signaling read semaphore\n", __func__ );
KSemaphoreSignal ( self -> rc );
+ QMSG ( "%s: unlocking read lock ( %p )\n", __func__, self -> rl );
KLockUnlock ( self -> rl );
}
}
@@ -246,10 +286,13 @@ LIB_EXPORT rc_t CC KQueuePop ( KQueue *self, void **item, timeout_t *tm )
rc = RC ( rcCont, rcQueue, rcRemoving, rcSelf, rcNull );
else
{
+ QMSG ( "%s: acquiring read lock ( %p )\n", __func__, self -> rl );
rc = KLockAcquire ( self -> rl );
if ( rc == 0 )
{
+ QMSG ( "%s: waiting on read semaphore...\n", __func__ );
rc = KSemaphoreTimedWait ( self -> rc, self -> rl, self -> sealed ? NULL : tm );
+ QMSG ( "%s: ...done, rc = %R. unlocking read lock. ( %p )\n", __func__, rc, self -> rl );
KLockUnlock ( self -> rl );
if ( rc == 0 )
@@ -257,24 +300,35 @@ LIB_EXPORT rc_t CC KQueuePop ( KQueue *self, void **item, timeout_t *tm )
uint32_t r, idx;
/* got an element */
+ QMSG ( "%s: asserting self -> read ( %u ) != self -> write ( %u )\n",
+ __func__, self -> read, self -> write
+ );
assert ( self -> read != self -> write );
/* read element */
r = self -> read & self -> imask;
+ QMSG ( "%s: read index is %u, masked against 0x%x\n", __func__, r, self -> imask );
idx = r & self -> bmask;
* item = self -> buffer [ idx ];
+ QMSG ( "%s: read item from buffer [ %u ], using mask 0x%x\n", __func__, idx, self -> bmask );
self -> buffer [ idx ] = NULL;
self -> read = r + 1;
/* let write know there's a free slot available */
+ QMSG ( "%s: acquiring write lock ( %p )\n", __func__, self -> wl );
if ( KLockAcquire ( self -> wl ) == 0 )
{
+ QMSG ( "%s: signaling write semaphore\n", __func__ );
KSemaphoreSignal ( self -> wc );
+ QMSG ( "%s: unlocking write lock ( %p )\n", __func__, self -> wl );
KLockUnlock ( self -> wl );
}
}
- else if ( self -> sealed && GetRCState ( rc ) == rcTimeout )
+ else if ( self -> sealed && GetRCObject ( rc ) == rcTimeout )
+ {
rc = RC ( rcCont, rcQueue, rcRemoving, rcData, rcDone );
+ QMSG ( "%s: resetting rc to %R\n", __func__, rc );
+ }
}
}
}
@@ -291,6 +345,7 @@ LIB_EXPORT rc_t CC KQueuePop ( KQueue *self, void **item, timeout_t *tm )
*/
LIB_EXPORT bool CC KQueueSealed ( const KQueue *self )
{
+ QMSG ( "%s called\n", __func__ );
if ( self != NULL )
return self -> sealed;
return false;
@@ -300,12 +355,44 @@ LIB_EXPORT bool CC KQueueSealed ( const KQueue *self )
/* Seal
* indicate that the queue has been closed off
* meaning there will be no further push operations
+ * if "writes" is true, and no further pop operations
+ * otherwise.
*/
LIB_EXPORT rc_t CC KQueueSeal ( KQueue *self )
{
+ rc_t rc = 0;
+
+ QMSG ( "%s called\n", __func__ );
+
if ( self == NULL )
return RC ( rcCont, rcQueue, rcFreezing, rcSelf, rcNull );
self -> sealed = true;
- return 0;
+
+#if 0
+ QMSG ( "%s: acquiring write lock ( %p )\n", __func__, self -> wl );
+ rc = KLockAcquire ( self -> wl );
+ if ( rc == 0 )
+ {
+ QMSG ( "%s: canceling write semaphore...\n", __func__ );
+ rc = KSemaphoreCancel ( self -> wc );
+ QMSG ( "%s: ...done, rc = %R.\n", __func__, rc );
+ KLockUnlock ( self -> wl );
+
+ if ( rc == 0 )
+ {
+ QMSG ( "%s: acquiring read lock ( %p )\n", __func__, self -> rl );
+ rc = KLockAcquire ( self -> rl );
+ if ( rc == 0 )
+ {
+ QMSG ( "%s: canceling read semaphore...\n", __func__ );
+ rc = KSemaphoreCancel ( self -> rc );
+ QMSG ( "%s: ...done, rc = %R.\n", __func__, rc );
+ KLockUnlock ( self -> rl );
+ }
+ }
+ }
+#endif
+
+ return rc;
}
diff --git a/libs/kproc/sem.c b/libs/kproc/sem.c
index 84d52c7..822f8cb 100644
--- a/libs/kproc/sem.c
+++ b/libs/kproc/sem.c
@@ -28,12 +28,21 @@
#include <kproc/extern.h>
#include <kproc/sem.h>
#include <kproc/cond.h>
+#include <klib/out.h>
#include <klib/rc.h>
#include <sysalloc.h>
#include <atomic32.h>
#include <stdlib.h>
+#if _DEBUGGING && 0
+#define SMSG( msg, ... ) \
+ KOutMsg ( msg, __VA_ARGS__ )
+#else
+#define SMSG( msg, ... ) \
+ ( void ) 0
+#endif
+
/*--------------------------------------------------------------------------
* KSemaphore
@@ -41,12 +50,12 @@
*/
struct KSemaphore
{
- uint64_t avail;
- uint64_t requested;
- uint64_t min_requested;
- KCondition cond;
- uint32_t waiting;
- bool uniform;
+ volatile uint64_t avail;
+ volatile uint64_t requested;
+ volatile uint64_t min_requested;
+ KCondition* cond;
+ volatile uint32_t waiting;
+ volatile bool uniform;
};
@@ -60,7 +69,7 @@ rc_t KSemaphoreWhack ( KSemaphore *self )
if ( self -> waiting != 0 )
return RC ( rcPS, rcSemaphore, rcDestroying, rcSemaphore, rcBusy );
- rc = KConditionDestroy ( & self -> cond );
+ rc = KConditionRelease ( self -> cond );
if ( rc != 0 )
return ResetRCContext ( rc, rcPS, rcSemaphore, rcDestroying );
@@ -85,7 +94,7 @@ LIB_EXPORT rc_t CC KSemaphoreMake ( KSemaphore **semp, uint64_t count )
rc = RC ( rcPS, rcSemaphore, rcConstructing, rcMemory, rcExhausted );
else
{
- rc = KConditionInit ( & sem -> cond );
+ rc = KConditionMake( & sem -> cond );
if ( rc == 0 )
{
sem -> avail = count;
@@ -113,7 +122,7 @@ LIB_EXPORT rc_t CC KSemaphoreMake ( KSemaphore **semp, uint64_t count )
LIB_EXPORT rc_t CC KSemaphoreAddRef ( const KSemaphore *cself )
{
if ( cself != NULL )
- return KConditionAddRef ( & cself -> cond );
+ return KConditionAddRef ( cself -> cond );
return 0;
}
@@ -121,7 +130,7 @@ LIB_EXPORT rc_t CC KSemaphoreRelease ( const KSemaphore *cself )
{
if ( cself != NULL )
{
- if ( KConditionDropRef ( & cself -> cond ) )
+ if ( KConditionDropRef ( cself -> cond ) )
return KSemaphoreWhack ( ( KSemaphore* ) cself );
}
return 0;
@@ -153,7 +162,7 @@ LIB_EXPORT rc_t CC KSemaphoreWait ( KSemaphore *self, struct KLock *lock )
do
{
- rc_t rc = KConditionWait ( & self -> cond, lock );
+ rc_t rc = KConditionWait ( self -> cond, lock );
if ( rc != 0 )
{
-- self -> waiting;
@@ -185,39 +194,73 @@ LIB_EXPORT rc_t CC KSemaphoreTimedWait ( KSemaphore *self,
if ( self -> avail == 0 )
{
+ SMSG ( "%s[%p]: avail == 0\n", __func__, self );
if ( tm == NULL )
+ {
+ SMSG ( "%s[%p]: non-blocking mode - return timeout exhausted\n", __func__, self );
return RC ( rcPS, rcSemaphore, rcWaiting, rcTimeout, rcExhausted );
+ }
if ( ++ self -> waiting == 1 )
{
+ SMSG ( "%s[%p]: first waiter\n", __func__, self );
self -> requested = self -> min_requested = 1;
self -> uniform = true;
}
else if ( self -> requested != 1 )
{
+ SMSG ( "%s[%p]: multiple waiters ( %u )\n", __func__, self, self -> waiting );
self -> min_requested = 1;
self -> uniform = false;
}
do
{
- rc_t rc = KConditionTimedWait ( & self -> cond, lock, tm );
+ rc_t rc;
+
+ SMSG ( "%s[%p]: wait on condition...\n", __func__, self );
+ rc = KConditionTimedWait ( self -> cond, lock, tm );
+ SMSG ( "%s[%p]:...done, rc = %R\n", __func__, self, rc );
if ( rc != 0 )
{
+ SMSG ( "%s[%p]: timed out - decrementing wait count\n", __func__, self );
-- self -> waiting;
return ResetRCContext ( rc, rcPS, rcSemaphore, rcWaiting );
}
+
+ SMSG ( "%s[%p]: condition signaled - avail = %lu\n", __func__, self, self -> avail );
}
while ( self -> avail == 0 );
+ SMSG ( "%s[%p]: finished waiting\n", __func__, self );
-- self -> waiting;
}
+ SMSG ( "%s[%p]: decrementing count from %lu\n", __func__, self, self -> avail );
-- self -> avail;
return 0;
}
+/* Cancel
+ * signal that the count will never increase
+ */
+LIB_EXPORT rc_t CC KSemaphoreCancel ( KSemaphore *self )
+{
+ if ( self == NULL )
+ return RC ( rcPS, rcSemaphore, rcSignaling, rcSelf, rcNull );
+
+ if ( self -> waiting != 0 )
+ {
+ SMSG ( "%s[%p]: canceling %u waiters\n", __func__, self, self -> waiting );
+ return KConditionBroadcast ( self -> cond );
+ }
+
+ SMSG ( "%s[%p]: cancel request ( no waiters )\n", __func__, self );
+ return 0;
+}
+
+
/* Signal
* signal that a count has become available
*/
@@ -234,8 +277,8 @@ LIB_EXPORT rc_t CC KSemaphoreSignal ( KSemaphore *self )
- and only one request can be satisfied
- then signal. otherwise, broadcast */
if ( self -> uniform && self -> avail / self -> min_requested == 1 )
- return KConditionSignal ( & self -> cond );
- return KConditionBroadcast ( & self -> cond );
+ return KConditionSignal ( self -> cond );
+ return KConditionBroadcast ( self -> cond );
}
return 0;
@@ -272,7 +315,7 @@ LIB_EXPORT rc_t CC KSemaphoreAlloc ( KSemaphore *self,
do
{
- rc_t rc = KConditionWait ( & self -> cond, lock );
+ rc_t rc = KConditionWait ( self -> cond, lock );
if ( rc != 0 )
{
-- self -> waiting;
@@ -324,7 +367,7 @@ LIB_EXPORT rc_t CC KSemaphoreTimedAlloc ( KSemaphore *self,
do
{
- rc_t rc = KConditionTimedWait ( & self -> cond, lock, tm );
+ rc_t rc = KConditionTimedWait ( self -> cond, lock, tm );
if ( rc != 0 )
{
-- self -> waiting;
@@ -357,8 +400,8 @@ LIB_EXPORT rc_t CC KSemaphoreFree ( KSemaphore *self, uint64_t count )
- and only one request can be satisfied
- then signal. otherwise, broadcast */
if ( self -> uniform && self -> avail / self -> min_requested == 1 )
- return KConditionSignal ( & self -> cond );
- return KConditionBroadcast ( & self -> cond );
+ return KConditionSignal ( self -> cond );
+ return KConditionBroadcast ( self -> cond );
}
return 0;
diff --git a/libs/kproc/sttimeout.c b/libs/kproc/sttimeout.c
index 6ac1b3c..47ba6cc 100644
--- a/libs/kproc/sttimeout.c
+++ b/libs/kproc/sttimeout.c
@@ -25,6 +25,7 @@
*/
#include <kproc/extern.h>
+#include <kproc/timeout.h>
#include <os-native.h>
#include <klib/log.h>
#include <klib/rc.h>
diff --git a/libs/kproc/task.c b/libs/kproc/task.c
new file mode 100644
index 0000000..61df4aa
--- /dev/null
+++ b/libs/kproc/task.c
@@ -0,0 +1,156 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kproc/extern.h>
+
+#include <kproc/task.h>
+#include <kproc/impl.h>
+#include <klib/rc.h>
+
+#define rcTask rcCmd
+
+
+/*--------------------------------------------------------------------------
+ * KTask
+ * a deferred task abstraction
+ * specific task objects are constructed with required parameters
+ * and implement the Execute method to perform their operation
+ */
+
+
+/* Whack
+ */
+static
+rc_t KTaskWhack ( KTask * self )
+{
+ if ( self == NULL )
+ return RC ( rcPS, rcTask, rcDestroying, rcSelf, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ return ( * self -> vt -> v1 . destroy ) ( self );
+ }
+
+ return RC ( rcPS, rcTask, rcDestroying, rcInterface, rcBadVersion );
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KTaskAddRef ( const KTask *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "KTask" ) )
+ {
+ case krefLimit:
+ return RC ( rcPS, rcTask, rcAttaching, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+LIB_EXPORT rc_t CC KTaskRelease ( const KTask *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "KTask" ) )
+ {
+ case krefWhack:
+ return KTaskWhack ( ( KTask* ) self );
+ case krefLimit:
+ return RC ( rcPS, rcTask, rcReleasing, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+
+/* Execute
+ * perform deferred operation
+ */
+LIB_EXPORT rc_t CC KTaskExecute ( KTask *self )
+{
+ if ( self == NULL )
+ return RC ( rcPS, rcTask, rcExecuting, rcSelf, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ return ( * self -> vt -> v1 . execute ) ( self );
+ }
+
+ return RC ( rcPS, rcTask, rcExecuting, rcInterface, rcBadVersion );
+}
+
+
+/* Init
+ * initialize a newly allocated task object
+ */
+LIB_EXPORT rc_t CC KTaskInit ( KTask *self, const KTask_vt *vt, const char *clsname, const char *name )
+{
+ if ( self == NULL )
+ return RC ( rcFS, rcTask, rcConstructing, rcSelf, rcNull );
+ if ( vt == NULL )
+ return RC ( rcFS, rcTask, rcConstructing, rcInterface, rcNull );
+ switch ( vt -> v1 . maj )
+ {
+ case 1:
+ switch ( vt -> v1 . min )
+ {
+ /* insert new minor versions in reverse order */
+ case 0:
+#if _DEBUGGING
+ if ( vt -> v1 . destroy == NULL ||
+ vt -> v1 . execute == NULL )
+ return RC ( rcFS, rcTask, rcConstructing, rcInterface, rcNull );
+#endif
+ break;
+ default:
+ return RC ( rcFS, rcTask, rcConstructing, rcInterface, rcInvalid );
+ }
+ break;
+ default:
+ return RC ( rcFS, rcTask, rcConstructing, rcInterface, rcInvalid );
+ }
+
+ self -> vt = vt;
+ KRefcountInit ( & self -> refcount, 1, clsname, "init", name );
+ return 0;
+}
+
+
+/* Destroy
+ * destroy task
+ */
+LIB_EXPORT rc_t CC KTaskDestroy ( KTask *self, const char *clsname )
+{
+ if ( self != NULL )
+ KRefcountWhack ( & self -> refcount, clsname );
+ return 0;
+}
diff --git a/libs/kproc/unix/syscond.c b/libs/kproc/unix/syscond.c
index ad1dc26..cebf31a 100644
--- a/libs/kproc/unix/syscond.c
+++ b/libs/kproc/unix/syscond.c
@@ -29,7 +29,9 @@
#include <kproc/extern.h>
#include <os-native.h>
+#include <kproc/timeout.h>
#include <kproc/cond.h>
+#include <klib/out.h>
#include <klib/rc.h>
#include <sysalloc.h>
#include <atomic32.h>
@@ -38,6 +40,14 @@
#include <errno.h>
#include <assert.h>
+#if _DEBUGGING && 0
+#define CMSG( msg, ... ) \
+ KOutMsg ( msg, __VA_ARGS__ )
+#else
+#define CMSG( msg, ... ) \
+ ( void ) 0
+#endif
+
/*--------------------------------------------------------------------------
* KCondition
@@ -156,7 +166,7 @@ LIB_EXPORT rc_t CC KConditionRelease ( const KCondition *cself )
KCondition *self = ( KCondition* ) cself;
if ( cself != NULL )
{
- if ( atomic32_dec_and_test ( & self -> refcount ) )
+ if ( atomic32_read_and_add ( & self -> refcount, -1 ) <= 1 )
return KConditionWhack ( self );
}
return 0;
@@ -208,16 +218,50 @@ LIB_EXPORT rc_t CC KConditionTimedWait ( KCondition *self, struct KLock *lock, t
if ( tm == NULL )
return RC ( rcPS, rcCondition, rcWaiting, rcTimeout, rcNull );
+ CMSG ( "%s[%p]: testing timeout structure\n", __func__, self );
if ( ! tm -> prepared )
+ {
+ CMSG ( "%s[%p]: preparing timeout...\n", __func__, self );
TimeoutPrepare ( tm );
+ CMSG ( "%s[%p]: ...done preparing timeout\n", __func__, self );
+ }
+#if 1
+ CMSG ( "%s[%p]: calling 'pthread_cond_timedwait ( cond = %p, mutex = %p, ts = %p )'...\n"
+ , __func__, self, & self -> cond, & lock -> mutex, & tm -> ts
+ );
status = pthread_cond_timedwait ( & self -> cond, & lock -> mutex, & tm -> ts );
+#else
+ CMSG ( "%s[%p]: calling 'pthread_cond_wait ( cond = %p, mutex = %p )'...\n"
+ , __func__, self, & self -> cond, & lock -> mutex, & tm -> ts
+ );
+ status = pthread_cond_wait ( & self -> cond, & lock -> mutex );
+#endif
+ CMSG ( "%s[%p]: ...done, OS status = %!\n", __func__, self, status );
switch ( status )
{
case 0:
break;
case ETIMEDOUT:
return RC ( rcPS, rcCondition, rcWaiting, rcTimeout, rcExhausted );
+/*
+ The pthread_cond_timedwait() function shall fail if:
+
+ ETIMEDOUT
+ The time specified by abstime to pthread_cond_timedwait() has passed.
+
+ The pthread_cond_timedwait() and pthread_cond_wait() functions may fail if:
+
+ EINVAL The value specified by cond, mutex, or abstime is invalid.
+
+ EINVAL Different mutexes were supplied for concurrent pthread_cond_timedwait()
+ or pthread_cond_wait() operations on the same condition variable.
+
+ EPERM The mutex was not owned by the current thread at the time of the call.
+
+ *** These functions shall not return an error code of [EINTR]. ***
+
+ */
case EINTR:
return RC ( rcPS, rcCondition, rcWaiting, rcThread, rcInterrupted );
default:
diff --git a/libs/kproc/unix/systimeout.c b/libs/kproc/unix/systimeout.c
index 6be8361..9dbb97b 100644
--- a/libs/kproc/unix/systimeout.c
+++ b/libs/kproc/unix/systimeout.c
@@ -25,6 +25,7 @@
*/
#include <sysalloc.h>
+#include <kproc/timeout.h>
#include <os-native.h>
#include <klib/log.h>
#include <klib/rc.h>
diff --git a/libs/kproc/win/syscond-priv.h b/libs/kproc/win/syscond-priv.h
index 32f58e3..509a913 100644
--- a/libs/kproc/win/syscond-priv.h
+++ b/libs/kproc/win/syscond-priv.h
@@ -41,6 +41,7 @@
extern "C" {
#endif
+
/*--------------------------------------------------------------------------
* KCondition
* a POSIX-style condition object
@@ -51,13 +52,8 @@ extern "C" {
* the former involves the potential to wait for a signal and the latter
* to generate a signal using the external lock for blocking.
*/
-struct KCondition
-{
-#if 0
- pthread_cond_t cond;
-#endif
- atomic32_t refcount;
-};
+struct KCondition;
+
/* Init
* initialize an inline KCondition
diff --git a/libs/kproc/win/syscond.c b/libs/kproc/win/syscond.c
index ad1dc26..8777f2f 100644
--- a/libs/kproc/win/syscond.c
+++ b/libs/kproc/win/syscond.c
@@ -24,11 +24,13 @@
*
*/
+#include <kproc/extern.h>
+
#include "syslock-priv.h"
#include "syscond-priv.h"
-#include <kproc/extern.h>
#include <os-native.h>
+#include <kproc/timeout.h>
#include <kproc/cond.h>
#include <klib/rc.h>
#include <sysalloc.h>
@@ -38,6 +40,54 @@
#include <errno.h>
#include <assert.h>
+#include <time.h> /* struct timespec */
+
+/* #include <stdio.h> */
+
+
+/*
+
+This Windows condition implementation is taken from
+"Strategies for Implementing POSIX Condition Variables on Win32"
+by Douglas C. Schmidt
+( http://www.cs.wustl.edu/~schmidt/win32-cv-1.html ) :
+
+3.4. The SignalObjectAndWait Solution
+The implementation relies on the Windows NT 4.0 SignalObjectAndWait function,
+thus it is not available in Windows CE, Windows '95, or Windows NT 3.51.
+
+The code was taken from the article.
+
+The C++ source code for POSIX condition variable on Win32
+described in the article is freely available with the ACE framework
+at //www.cs.wustl.edu/~schmidt/ACE.html.
+It is possible that the latter is better.
+
+*/
+
+
+typedef struct
+{
+ int waiters_count_;
+ // Number of waiting threads.
+
+ CRITICAL_SECTION waiters_count_lock_;
+ // Serialize access to <waiters_count_>.
+
+ HANDLE sema_;
+ // Semaphore used to queue up threads waiting for the condition to
+ // become signaled.
+
+ HANDLE waiters_done_;
+ // An auto-reset event used by the broadcast/signal thread to wait
+ // for all the waiting thread(s) to wake up and be released from the
+ // semaphore.
+
+ size_t was_broadcast_;
+ // Keeps track of whether we were broadcasting or signaling. This
+ // allows us to optimize the code if we're just signaling.
+} pthread_cond_t;
+
/*--------------------------------------------------------------------------
* KCondition
@@ -49,11 +99,180 @@
* the former involves the potential to wait for a signal and the latter
* to generate a signal using the external lock for blocking.
*/
+struct KCondition
+{
+ pthread_cond_t cond;
+
+ atomic32_t refcount;
+};
+
+typedef HANDLE pthread_mutex_t;
+typedef struct pthread_condattr_t { char dummy; } pthread_condattr_t;
+
+int
+pthread_cond_init (pthread_cond_t *cv,
+ const pthread_condattr_t *dummy)
+{
+ cv->waiters_count_ = 0;
+ cv->was_broadcast_ = 0;
+ cv->sema_ = CreateSemaphore (NULL, // no security
+ 0, // initially 0
+ 0x7fffffff, // max count
+ NULL); // unnamed
+ InitializeCriticalSection (&cv->waiters_count_lock_);
+ cv->waiters_done_ = CreateEvent (NULL, // no security
+ FALSE, // auto-reset
+ FALSE, // non-signaled initially
+ NULL); // unnamed
+ return 0;
+}
+
+int pthread_cond_destroy (pthread_cond_t *cv) {
+ CloseHandle(cv->sema_);
+ DeleteCriticalSection(&cv->waiters_count_lock_);
+ CloseHandle(cv->waiters_done_);
+ memset(cv, 0, sizeof *cv);
+ return 0;
+}
+
+#ifndef timespec
+typedef struct timespec
+ {
+ time_t tv_sec; /* Seconds. */
+ long int tv_nsec; /* Nanoseconds. */
+ } timespec;
+#endif
+
+int pthread_cond_waitImpl (pthread_cond_t *cv,
+ pthread_mutex_t *external_mutex,
+ const struct timespec *abstime,
+ bool infinite)
+{
+ int last_waiter;
+ DWORD dwMilliseconds = INFINITE;
+
+ // Avoid race conditions.
+ EnterCriticalSection (&cv->waiters_count_lock_);
+ cv->waiters_count_++;
+ LeaveCriticalSection (&cv->waiters_count_lock_);
+
+ // This call atomically releases the mutex and waits on the
+ // semaphore until <pthread_cond_signal> or <pthread_cond_broadcast>
+ // are called by another thread.
+ if (!infinite && abstime != NULL)
+ { dwMilliseconds = abstime->tv_sec * 1000 + abstime->tv_nsec / 1000000; }
+ SignalObjectAndWait (*external_mutex, cv->sema_, dwMilliseconds, FALSE);
+
+ // Reacquire lock to avoid race conditions.
+ EnterCriticalSection (&cv->waiters_count_lock_);
+
+ // We're no longer waiting...
+ cv->waiters_count_--;
+
+ // Check to see if we're the last waiter after <pthread_cond_broadcast>.
+ last_waiter = cv->was_broadcast_ && cv->waiters_count_ == 0;
+
+ LeaveCriticalSection (&cv->waiters_count_lock_);
+
+ // If we're the last waiter thread during this particular broadcast
+ // then let all the other threads proceed.
+ if (last_waiter)
+ // This call atomically signals the <waiters_done_> event and waits until
+ // it can acquire the <external_mutex>.
+ // This is required to ensure fairness.
+ SignalObjectAndWait (cv->waiters_done_, *external_mutex, INFINITE, FALSE);
+ else {
+ // Always regain the external mutex since that's the guarantee we
+ // give to our callers.
+/* fprintf(stderr, "%s: WaitForSingleObject...\n", __func__); */
+ WaitForSingleObject (*external_mutex, INFINITE);
+/* fprintf(stderr, "... %s: WaitForSingleObject\n", __func__); */
+ }
+
+ return 0;
+}
+
+int pthread_cond_timedwait(pthread_cond_t *cv,
+ pthread_mutex_t *external_mutex,
+ const struct timespec *abstime)
+{
+ return pthread_cond_waitImpl(cv, external_mutex, abstime, false);
+}
+
+int
+pthread_cond_wait (pthread_cond_t *cv,
+ pthread_mutex_t *external_mutex)
+{
+ return pthread_cond_waitImpl(cv, external_mutex, NULL, true);
+}
+
+int
+pthread_cond_signal (pthread_cond_t *cv)
+{
+ int have_waiters;
+
+ EnterCriticalSection (&cv->waiters_count_lock_);
+ have_waiters = cv->waiters_count_ > 0;
+ LeaveCriticalSection (&cv->waiters_count_lock_);
+
+ // If there aren't any waiters, then this is a no-op.
+ if (have_waiters)
+ ReleaseSemaphore (cv->sema_, 1, 0);
+
+ return 0;
+}
+
+int
+pthread_cond_broadcast (pthread_cond_t *cv)
+{
+ int have_waiters = 0;
+
+ // This is needed to ensure that <waiters_count_> and <was_broadcast_> are
+ // consistent relative to each other.
+ EnterCriticalSection (&cv->waiters_count_lock_);
+
+ if (cv->waiters_count_ > 0) {
+ // We are broadcasting, even if there is just one waiter...
+ // Record that we are broadcasting, which helps optimize
+ // <pthread_cond_wait> for the non-broadcast case.
+ cv->was_broadcast_ = 1;
+ have_waiters = 1;
+ }
+
+ if (have_waiters) {
+ // Wake up all the waiters atomically.
+ ReleaseSemaphore (cv->sema_, cv->waiters_count_, 0);
+
+ LeaveCriticalSection (&cv->waiters_count_lock_);
+
+ // Wait for all the awakened threads to acquire the counting
+ // semaphore.
+ WaitForSingleObject (cv->waiters_done_, INFINITE);
+ // This assignment is okay, even without the <waiters_count_lock_> held
+ // because no other waiter threads can wake up to access it.
+ cv->was_broadcast_ = 0;
+ }
+ else
+ LeaveCriticalSection (&cv->waiters_count_lock_);
+
+ return 0;
+}
+
+/*--------------------------------------------------------------------------
+ * KCondition
+ * a POSIX-style condition object
+ * ( requires an external lock object )
+ *
+ * usage: the user first acquires an external lock. then, depending upon
+ * the operation, will either test for a condition or establish it, where
+ * the former involves the potential to wait for a signal and the latter
+ * to generate a signal using the external lock for blocking.
+ */
/* Destroy
*/
-LIB_EXPORT rc_t CC KConditionDestroy ( KCondition *self )
+rc_t KConditionDestroy ( KCondition *self )
{
int status = pthread_cond_destroy ( & self -> cond );
switch ( status )
@@ -83,7 +302,7 @@ rc_t KConditionWhack ( KCondition *self )
/* Init
*/
-LIB_EXPORT rc_t CC KConditionInit ( KCondition *self )
+rc_t KConditionInit ( KCondition *self )
{
int status;
@@ -166,7 +385,7 @@ LIB_EXPORT rc_t CC KConditionRelease ( const KCondition *cself )
* manipulates reference counter
* returns true if last ref
*/
-LIB_EXPORT int CC KConditionDropRef ( const KCondition *cself )
+int KConditionDropRef ( const KCondition *cself )
{
assert ( cself != NULL );
return atomic32_dec_and_test ( & ( ( KCondition* ) cself ) -> refcount );
@@ -200,6 +419,7 @@ LIB_EXPORT rc_t CC KConditionWait ( KCondition *self, struct KLock *lock )
LIB_EXPORT rc_t CC KConditionTimedWait ( KCondition *self, struct KLock *lock, timeout_t *tm )
{
int status;
+ timespec ts;
if ( self == NULL )
return RC ( rcPS, rcCondition, rcWaiting, rcSelf, rcNull );
@@ -211,13 +431,17 @@ LIB_EXPORT rc_t CC KConditionTimedWait ( KCondition *self, struct KLock *lock, t
if ( ! tm -> prepared )
TimeoutPrepare ( tm );
- status = pthread_cond_timedwait ( & self -> cond, & lock -> mutex, & tm -> ts );
+ memset(&ts, 0, sizeof ts);
+ ts.tv_sec = tm -> mS / 1000;
+ ts.tv_nsec = (tm -> mS - ts.tv_sec * 1000) * 1000000;
+
+ status = pthread_cond_timedwait ( & self -> cond, & lock -> mutex, & ts );
switch ( status )
{
case 0:
break;
- case ETIMEDOUT:
- return RC ( rcPS, rcCondition, rcWaiting, rcTimeout, rcExhausted );
+/* case ETIMEDOUT:
+ return RC ( rcPS, rcCondition, rcWaiting, rcTimeout, rcExhausted ); */
case EINTR:
return RC ( rcPS, rcCondition, rcWaiting, rcThread, rcInterrupted );
default:
diff --git a/libs/kproc/win/syslock.c b/libs/kproc/win/syslock.c
index c099270..5159eef 100644
--- a/libs/kproc/win/syslock.c
+++ b/libs/kproc/win/syslock.c
@@ -27,6 +27,7 @@
#include <kproc/extern.h>
#include "syslock-priv.h"
+#include <kproc/timeout.h>
#include <kproc/lock.h>
#include <klib/rc.h>
#include <sysalloc.h>
@@ -110,6 +111,7 @@ LIB_EXPORT rc_t CC KLockAddRef ( const KLock *cself )
return 0;
}
+
LIB_EXPORT rc_t CC KLockRelease ( const KLock *cself )
{
KLock *self = ( KLock* ) cself;
@@ -151,12 +153,13 @@ LIB_EXPORT rc_t CC KLockAcquire ( KLock *self )
return RC ( rcPS, rcLock, rcLocking, rcNoObj, rcUnknown );
}
+
LIB_EXPORT rc_t CC KLockTimedAcquire ( KLock *self, timeout_t *tm )
{
if ( self == NULL )
return RC ( rcPS, rcLock, rcLocking, rcSelf, rcNull );
- switch ( WaitForSingleObject ( self -> mutex, tm != NULL ? tm -> mS : 0 ) )
+ switch ( WaitForSingleObject( self -> mutex, tm != NULL ? tm -> mS : 0 ) )
{
case WAIT_ABANDONED:
case WAIT_OBJECT_0:
@@ -176,6 +179,7 @@ LIB_EXPORT rc_t CC KLockTimedAcquire ( KLock *self, timeout_t *tm )
return RC ( rcPS, rcLock, rcLocking, rcNoObj, rcUnknown );
}
+
/* Unlock
* releases lock
*/
diff --git a/libs/krypto/Makefile b/libs/krypto/Makefile
new file mode 100644
index 0000000..27cb6c3
--- /dev/null
+++ b/libs/krypto/Makefile
@@ -0,0 +1,336 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: all
+
+USE_GCC_IF_ICC = 1
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/krypto
+
+INT_LIBS =
+
+EXT_LIBS = \
+ libkrypto
+
+ALL_LIBS = \
+ $(INT_LIBS) \
+ $(EXT_LIBS)
+
+include $(TOP)/build/Makefile.env
+
+ifeq ($(OS),linux)
+INT_LIBS += libkryptotest
+endif
+
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+# This differs from other sister Makefiles in needing three other symbols defined
+# VEC_SUPPORTED, VECREG_SUPPORTED and AESNI_SUPPORTED
+# The successive symbols are additive
+# In order they are the compiler supports the vector 'container' type,
+# the preocessor has supported vector registers
+# the processor supports the Intel AES-NI instruction set
+#
+# The prerequisite call to make compiler-test will have tried to compile objects
+# that show such support if the objec can be made
+all std: makedirs compiler-test
+ @ $(MAKE_CMD) \
+ VEC_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vec.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+ VECREG_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vecreg.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+ AESNI_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.aes-ni.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+ $(TARGDIR)/std || \
+ ( echo "reattempting without AES-NI instructions"; \
+ $(MAKE_CMD) \
+ VEC_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vec.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+ VECREG_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vecreg.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+ AESNI_SUPPORTED=false \
+ $(TARGDIR)/std ) || \
+ ( echo "reattempting without vector register instructions"; \
+ $(MAKE_CMD) \
+ VEC_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vec.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+ VECREG_SUPPORTED=false \
+ AESNI_SUPPORTED=false \
+ $(TARGDIR)/std ) || \
+ ( echo "reattempting without vector instructions"; \
+ $(MAKE_CMD) \
+ VEC_SUPPORTED=false \
+ VECREG_SUPPORTED=false \
+ AESNI_SUPPORTED=false \
+ $(TARGDIR)/std )
+
+$(INT_LIBS): makedirs
+ @ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+ @ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+ $(addprefix $(LIBDIR)/,$(EXT_LIBS))
+# @echo VEC_SUPPORTED $(VEC_SUPPORTED)
+# @echo VECREG_SUPPORTED $(VECREG_SUPPORTED)
+# @echo AESNI_SUPPORTED $(AESNI_SUPPORTED)
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+ $(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
+
+#-------------------------------------------------------------------------------
+# compiler-test
+#
+.PHONY: compiler-test $(TARGDIR)/compiler-test
+
+# Silently try to compile three objects
+compiler-test : makedirs
+ @ $(MAKE_CMD) -i $(TARGDIR)/compiler-test >/dev/null 2>/dev/null
+
+
+COMPILE_TEST_SRC = \
+ compile-test.vec \
+ compile-test.vecreg \
+ compile-test.aes-ni
+
+COMPILE_TEST_OBJ = \
+ $(addsuffix .$(LOBX),$(COMPILE_TEST_SRC))
+
+$(TARGDIR)/compiler-test : $(COMPILE_TEST_OBJ)
+ @echo VEC_SUPPORTED $(VEC_SUPPORTED)
+ @echo VECREG_SUPPORTED $(VECREG_SUPPORTED)
+ @echo AESNI_SUPPORTED $(AESNI_SUPPORTED)
+
+#-------------------------------------------------------------------------------
+# define some additional compiler flags for special object file types
+# currently only gcc is supported and it turns out only with 4.4.0 and up
+# though other compilers could also be supported
+ifeq ($(COMP),gcc)
+CC_LISTING = -Wa,-ahlms=$(<D)/$(@F).list
+_CC_AES_NI = -funsafe-math-optimizations -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -maes -Wa,-march=generic64+aes $(CC_LISTING)
+_CC_VECREG = -funsafe-math-optimizations -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -Wa,-march=generic64+sse4 $(CC_LISTING)
+_CC_VEC = $(CC_LISTING)
+else
+_CC_LISTING =
+_CC_AES_NI =
+_CC_VECREG =
+_CC_VEC =
+endif
+
+ifeq ($(VEC_SUPPORTED),true)
+CC_VEC = $(_CC_VEC)
+else
+CC_VEC =
+endif
+
+ifeq ($(VECREG_SUPPORTED),true)
+CC_VECREG = $(_CC_VECREG)
+else
+CC_VECREG =
+endif
+
+ifeq ($(AESNI_SUPPORTED),true)
+CC_AES_NI = $(_CC_AES_NI)
+else
+CC_AES_NI =
+endif
+
+# Rules for making objects using compiler vectors
+compile-test.vec.pic.o : compile-test.c
+ @ echo +++++ Making $@ using its own rule
+ @ echo $@ $(_CC_VEC)
+ $(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC $(_CC_VEC) $<
+
+
+%.vec.$(LOBX): %.c
+ $(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC $(CC_VEC) $<
+
+
+# Rules for making objects using vectors in registers
+compile-test.vecreg.pic.o : compile-test.c
+ @ echo +++++ Making $@ using its own rule
+ @ echo $@ $(_CC_VECREG)
+ $(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC -DUSEVECREG $(_CC_VECREG) $<
+
+%.vecreg.$(LOBX): %.c
+ $(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC -DUSEVECREG $(CC_VECREG) $<
+
+
+# Rules for making objects using AES-NI extensions vectors in registers
+compile-test.aes-ni.pic.o : compile-test.c
+ @ echo +++++ Making $@ using its own rule
+ @ echo $@ $(_CC_AES_NI)
+ $(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC -DUSEVECREG -DUSEAESNI $(_CC_AES_NI) $<
+
+%.aes-ni.$(LOBX): %.c
+ $(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC -DUSEVECREG -DUSEAESNI $(CC_AES_NI) $<
+
+
+
+#-------------------------------------------------------------------------------
+# krypto
+#
+$(LIBDIR)/libkrypto: $(addprefix $(LIBDIR)/libkrypto.,$(LIBEXT))
+
+ALL_LIB_SRC = \
+ ciphermgr \
+ wgaencrypt \
+ encfile \
+ encfilev2 \
+ cipher \
+ aes_core \
+ aes-byte \
+ cipher-byte \
+ key \
+ reencfile
+
+LIB_SRC = \
+ no-null-ncbi
+
+TEST_LIB_SRC = \
+ null-ncbi \
+ testcipher
+
+ifeq ($(VEC_SUPPORTED),true)
+ALL_LIB_SRC += \
+ cipher-vec.vec \
+ aes-ncbi.vec
+LIB_SRC += \
+ no-null-ncbi.vec
+TEST_LIB_SRC += \
+ null-ncbi.vec
+else
+ALL_LIB_SRC += \
+ cipher-no-vec.vec
+LIB_SRC += \
+ no-null-ncbi.vec
+TEST_LIB_SRC += \
+ no-null-ncbi.vec
+endif
+
+ifeq ($(VECREG_SUPPORTED),true)
+ALL_LIB_SRC += \
+ cipher-vec.vecreg \
+ aes-ncbi.vecreg
+LIB_SRC += \
+ no-null-ncbi.vecreg
+TEST_LIB_SRC += \
+ null-ncbi.vecreg
+else
+ALL_LIB_SRC += \
+ cipher-no-vec.vecreg
+LIB_SRC += \
+ no-null-ncbi.vecreg
+TEST_LIB_SRC += \
+ no-null-ncbi.vecreg
+endif
+
+ifeq ($(AESNI_SUPPORTED),true)
+ALL_LIB_SRC += \
+ cipher-vec.aes-ni \
+ aes-ncbi.aes-ni
+LIB_SRC += \
+ no-null-ncbi.aes-ni
+TEST_LIB_SRC += \
+ no-null-ncbi.aes-ni
+else
+ALL_LIB_SRC += \
+ cipher-no-vec.aes-ni
+LIB_SRC += \
+ no-null-ncbi.aes-ni
+TEST_LIB_SRC += \
+ no-null-ncbi.aes-ni
+endif
+
+
+KRYPTO_SRC = $(ALL_LIB_SRC) $(LIB_SRC)
+
+KRYPTO_OBJ = \
+ $(addsuffix .$(LOBX),$(KRYPTO_SRC))
+
+KRYPTO_LIB = \
+ -dkfg \
+ -dkfs \
+ -dkproc \
+ -dklib
+
+$(LIBDIR)/libkrypto.$(SHLX): $(KRYPTO_OBJ)
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(KRYPTO_LIB)
+
+$(LIBDIR)/libkrypto.$(LIBX): $(KRYPTO_OBJ)
+ $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(KRYPTO_LIB)
+
+libkrypto_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) libkrypto $(KRYPTO_OBJ)
+
+
+#-------------------------------------------------------------------------------
+# kryptotest
+#
+
+$(ILIBDIR)/libkryptotest: $(addprefix $(ILIBDIR)/libkryptotest.,$(ILIBEXT))
+
+
+KRYPTOTEST_SRC = $(ALL_LIB_SRC) $(TEST_LIB_SRC)
+
+KRYPTOTEST_OBJ = \
+ $(addsuffix .$(LOBX),$(KRYPTOTEST_SRC))
+
+KRYPTOTEST_LIB = \
+ -dkfg \
+ -dkfs \
+ -dkproc \
+ -dklib
+
+
+$(ILIBDIR)/libkryptotest.$(SHLX): $(KRYPTOTEST_OBJ)
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(KRYPTOTEST_LIB)
+
+$(ILIBDIR)/libkryptotest.$(LIBX): $(KRYPTOTEST_OBJ)
+ $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(KRYPTOTEST_LIB)
+
+libkryptotest_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) libkryptotest $(KRYPTOTEST_OBJ)
+
+
+
diff --git a/libs/krypto/aes-byte.c b/libs/krypto/aes-byte.c
new file mode 100644
index 0000000..29e104b
--- /dev/null
+++ b/libs/krypto/aes-byte.c
@@ -0,0 +1,236 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include "aes-priv.h"
+#include "cipher-priv.h"
+
+#include <klib/rc.h>
+
+#include <string.h>
+#include <assert.h>
+
+
+/* instantiate for class functions that use the VT */
+#define BLOCKCIPHER_BYTE_IMPL KAESBlockCipherByte
+#include "blockcipher-impl.h"
+
+static const char KAESByteBlockCipherClassName[] = "KAESCipherByte";
+
+static
+void KAESBlockCipherByteDestroy (const KAESBlockCipherByte * self)
+{
+ /* we use a constant object */
+}
+
+
+static
+uint32_t KAESBlockCipherByteBlockSize ()
+{
+ return AES_BLOCK_SIZE;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KeySize
+ * How large is the stored key for this cipher? Not the user key used
+ * to create this key (key schedule)
+ *
+ * This is needed by KCipher to know how large the KCipher objecr is at
+ * allocation and to know how much of a buffer each decryption/encryption is
+ */
+static
+uint32_t KAESBlockCipherByteKeySize ()
+{
+ return (uint32_t)sizeof (AES_KEY);
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetEncryptKey
+ * The KCipher calls this to have the block cipher build an encryption
+ * key in the KCipher object
+ *
+ */
+static
+rc_t KAESBlockCipherByteSetEncryptKey (void * encrypt_key,
+ const char * user_key,
+ uint32_t user_key_size)
+{
+ int iii;
+ rc_t rc;
+
+ assert (encrypt_key);
+ assert (user_key);
+ assert (user_key_size != 0);
+
+ iii = AES_set_encrypt_key((const unsigned char *)user_key,
+ (int)user_key_size * 8,
+ encrypt_key);
+ if (iii == 0)
+ rc = 0;
+ else
+ {
+ switch (iii)
+ {
+ default: /* not in the code when this was written */
+ rc = RC (rcKrypto, rcCipher, rcUpdating, rcEncryptionKey, rcUnknown);
+ break;
+
+ case -1: /* bad parameters */
+ rc = RC (rcKrypto, rcCipher, rcUpdating, rcParam, rcInvalid);
+ break;
+
+ case -2: /* bad bit count */
+ rc = RC (rcKrypto, rcCipher, rcUpdating, rcParam, rcIncorrect);
+ break;
+ }
+ memset (encrypt_key, 0, sizeof (AES_KEY));
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetDecryptKey
+ * The KCipher calls this to have the block cipher build an decryption
+ * key in the KCipher object
+ *
+ */
+static
+rc_t KAESBlockCipherByteSetDecryptKey (void * decrypt_key,
+ const char * user_key,
+ uint32_t user_key_size)
+{
+ int iii;
+ rc_t rc;
+
+ assert (decrypt_key);
+ assert (user_key);
+ assert (user_key_size != 0);
+
+ iii = AES_set_decrypt_key((const unsigned char *)user_key, (int)user_key_size * 8,
+ decrypt_key);
+ if (iii == 0)
+ rc = 0;
+ else
+ {
+ switch (iii)
+ {
+ default: /* not in the code when this was written */
+ rc = RC (rcKrypto, rcCipher, rcUpdating, rcEncryptionKey, rcUnknown);
+ break;
+
+ case -1: /* bad parameters */
+ rc = RC (rcKrypto, rcCipher, rcUpdating, rcParam, rcInvalid);
+ break;
+
+ case -2: /* bad bit count */
+ rc = RC (rcKrypto, rcCipher, rcUpdating, rcParam, rcIncorrect);
+ break;
+ }
+ memset (decrypt_key, 0, sizeof (AES_KEY));
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Encrypt
+ *
+ * Perform an encryption of a single block. Chained modes and stream
+ * cipher modes will call this multiple times.
+ *
+ */
+static
+void KAESBlockCipherByteEncrypt (const CipherBlock in,
+ CipherBlock out,
+ const void * key)
+{
+ assert (in);
+ assert (out);
+ assert (key);
+
+ AES_encrypt ((const uint8_t*)in, (uint8_t*)out, key);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Decrypt
+ *
+ * Perform a decryption of a single block. Chained modes and stream
+ * cipher modes will call this multiple times.
+ *
+ */
+static
+void KAESBlockCipherByteDecrypt (const CipherBlock in,
+ CipherBlock out,
+ const void * key)
+{
+ assert (in);
+ assert (out);
+ assert (key);
+
+ AES_decrypt ((const uint8_t*)in, (uint8_t*)out, key);
+}
+
+
+static const struct
+KBlockCipherByte_vt_v1 aes_vt =
+{
+ /* .version */
+ { 1, 0 },
+
+ KAESBlockCipherByteDestroy,
+
+ KAESBlockCipherByteBlockSize,
+ KAESBlockCipherByteKeySize,
+
+ KAESBlockCipherByteSetEncryptKey,
+ KAESBlockCipherByteSetDecryptKey,
+
+ KAESBlockCipherByteEncrypt,
+ KAESBlockCipherByteDecrypt
+};
+
+
+rc_t KAESBlockCipherByteMake (KBlockCipherByte ** pobj)
+{
+ rc_t rc;
+
+ if (pobj == NULL)
+ rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+
+ else
+ {
+ rc = 0;
+ *pobj = (KBlockCipherByte*)&aes_vt;
+ }
+ return rc;
+}
+
+/* EOF */
+
diff --git a/libs/krypto/aes-ncbi-priv.h b/libs/krypto/aes-ncbi-priv.h
new file mode 100644
index 0000000..5738029
--- /dev/null
+++ b/libs/krypto/aes-ncbi-priv.h
@@ -0,0 +1,227 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_aes_ncbi_priv_libs_
+#define _h_krypto_aes_ncbi_priv_libs_
+
+#include <klib/defs.h>
+#include <v128.h>
+
+#include "ncbi-priv.h"
+#include "cipher-impl.h"
+#include "blockcipher-impl.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* ======================================================================
+ * FIPS-197 2.1
+ */
+#define AES_BLOCK_BITS (128)
+#define AES_BLOCK_BYTES (AES_BLOCK_BITS/8)
+
+
+/* ======================================================================
+ * FIPS-197 3,4 - 3.5
+ *
+ * FIPS-197 defines Nk as number of 32-bit words in the user key
+ */
+#define AES_Nk_128 (4)
+#define AES_Nk_192 (6)
+#define AES_Nk_256 (8)
+
+
+/*
+ * FIPS-197 defines Nb as number of 32-bit words in the cipher block
+ *
+ * There is much odd naming in the document from the perspective of a software
+ * engineer.
+ */
+#define AES_Nb (4)
+#define AES_Nb_128 (AES_Nb)
+#define AES_Nb_192 (AES_Nb)
+#define AES_Nb_256 (AES_Nb)
+
+
+/*
+ * FIPS-197 defines Nr as the number of rounds for a cipher of a given original
+ * user key length.
+ *
+ * Another odd naming as it is really the zero based highest round offset
+ * as 1 first round + Nr-1 middle rounds + 1 last round are performed for
+ * each encrypt or decrypt block. There are thus Nr + 1 round keys needed
+ * in the encryption and decryption key schedules
+ */
+#define AES_Nr_128 (10)
+#define AES_Nr_192 (12)
+#define AES_Nr_256 (14)
+#define AES_Nr_MAX (15)
+
+/* Most useful for testingg against Appendix A-C of the FIPS-197 document */
+#define DEBUG_OBJECT(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_OBJECT), msg)
+#define DEBUG_KEYEXP(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_KEYEXP), msg)
+#define DEBUG_CIPHER(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_CIPHER), msg)
+#define DEBUG_INVKEYEXP(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_INVKEYEXP), msg)
+#define DEBUG_INVCIPHER(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_INVCIPHER), msg)
+
+#define DEBUG_CIPHER_MVECTOR(M,v) \
+ DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_CIPHER), \
+ ("%s:\t%0.8x %0.8x %0.8x %0.8x\n",M, \
+ v.columns[0],v.columns[1],v.columns[2],v.columns[3]))
+#define DEBUG_INVCIPHER_MVECTOR(M,v) \
+ DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_INVCIPHER), \
+ ("%s:\t%0.8x %0.8x %0.8x %0.8x\n",M, \
+ v.columns[0],v.columns[1],v.columns[2],v.columns[3]))
+
+#if _DEBUGGING
+#if 1
+#define DEBUG_CIPHER_VECTOR(M,V) \
+ { \
+ CipherVec_AES_u v; v.state = V; \
+ DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_CIPHER), \
+ ("%s:\t%0.8x %0.8x %0.8x %0.8x\n", M, \
+ bswap_32(v.columns[0]), \
+ bswap_32(v.columns[1]), \
+ bswap_32(v.columns[2]), \
+ bswap_32(v.columns[3]))); \
+ }
+#define DEBUG_INVCIPHER_VECTOR(M,V) \
+ { \
+ CipherVec_AES_u v; v.state = V; \
+ DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_INVCIPHER), \
+ ("%s:\t%0.8x %0.8x %0.8x %0.8x\n", M, \
+ bswap_32(v.columns[0]), \
+ bswap_32(v.columns[1]), \
+ bswap_32(v.columns[2]), \
+ bswap_32(v.columns[3]))); \
+ }
+#else
+#define DEBUG_CIPHER_VECTOR(M,v) \
+ KOutMsg ( "%s:\t%0.8x %0.8x %0.8x %0.8x\n", M, \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[0]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[1]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[2]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[3]))
+#define DEBUG_INVCIPHER_VECTOR(M,v) \
+ KOutMsg ( "%s:\t%0.8x %0.8x %0.8x %0.8x\n", M, \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[0]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[1]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[2]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[3]))
+#endif
+#define DDEBUG_CIPHER_VECTOR(M,v) \
+ KOutMsg ( "%s:\t%0.8x %0.8x %0.8x %0.8x\n", M, \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[0]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[1]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[2]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[3]))
+#define DDEBUG_INVCIPHER_VECTOR(M,v) \
+ KOutMsg ( "%s:\t%0.8x %0.8x %0.8x %0.8x\n", M, \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[0]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[1]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[2]), \
+ bswap_32(((CipherVec_AES_u*)&(v))->columns[3]))
+
+#else
+#define DEBUG_CIPHER_VECTOR(M,V)
+#define DEBUG_INVCIPHER_VECTOR(M,V)
+#endif
+
+/* -----
+ * 8 and 32 bit unsigned integers
+ */
+typedef uint8_t AESByte;
+typedef uint32_t AESWord;
+typedef union AESColumn AESColumn;
+union AESColumn
+{
+ AESWord word;
+ AESByte bytes [sizeof(AESWord)];
+};
+
+
+/* -----
+ * 128 byte block in various forms
+ */
+typedef AESByte AESBlock [AES_Nb*sizeof(AESWord)];
+
+typedef v128_u8_t CipherVecByte;
+typedef v128_u32_t CipherVecWord;
+
+
+typedef struct AESKeySchedule AESKeySchedule;
+struct AESKeySchedule
+{
+ CipherVec round_keys [AES_Nr_MAX];
+ uint32_t number_of_rounds;
+};
+
+/* ======================================================================
+ * FIPS-197 3,4 - 3.5
+ *
+ * An AES State is the same size as the cipher block size.
+ * They are eaither 4 columns of 32 bits or 16 individual bytes.
+ * The columns can be accessed by their individual bytes s0
+ * there are 4X32, 4X4X8 or 16X8 bits in a state.
+ */
+typedef union
+{
+ CipherVec state;
+ uint64_t u64 [AES_Nb/2];
+ AESWord columns [AES_Nb];
+ AESByte bytes [AES_Nb * sizeof (AESWord)];
+ AESByte grid [AES_Nb][sizeof (AESWord)];
+} CipherVec_AES_u;
+
+
+typedef union
+{
+ CipherVec state;
+ v128_u32_t columns;
+} CipherVec_uu __attribute__ ((aligned(16)));
+
+/*
+ * KCipher with 128 bit alignment.
+ */
+typedef struct CipherAes CipherAes;
+struct CipherAes
+{
+ KCipher dad;
+ AESKeySchedule e_key;
+ AESKeySchedule d_key;
+ CipherVec e_ivec;
+ CipherVec d_ivec;
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_aes_ncbi_priv_libs_ */
+
+
diff --git a/libs/krypto/aes-ncbi.aes-ni.pic.o.list b/libs/krypto/aes-ncbi.aes-ni.pic.o.list
new file mode 100644
index 0000000..11d112b
--- /dev/null
+++ b/libs/krypto/aes-ncbi.aes-ni.pic.o.list
@@ -0,0 +1,38295 @@
+GAS LISTING /tmp/ccPaCTqg.s page 1
+
+
+ 1 .file "aes-ncbi.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 11140000 .text
+ 8 02007101
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .type op_AESENC, @function
+ 11 op_AESENC:
+ 12 .LFB580:
+ 13 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifndef _h_v128_
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #define _h_v128_
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #include <stdint.h>
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #include <x86intrin.h>
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __cplusplus
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** extern "C" {
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int8_t v128_i8_t __attribute__ ((vector_size (16),__may_alias__));
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint8_t v128_u8_t __attribute__ ((vector_size (16),__may_alias__));
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int16_t v128_i16_t __attribute__ ((vector_size (16),__may_alias__));
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int32_t v128_i32_t __attribute__ ((vector_size (16),__may_alias__));
+
GAS LISTING /tmp/ccPaCTqg.s page 2
+
+
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int64_t v128_i64_t __attribute__ ((vector_size (16),__may_alias__));
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint16_t v128_u16_t __attribute__ ((vector_size (16),__may_alias__));
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint32_t v128_u32_t __attribute__ ((vector_size (16),__may_alias__));
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint64_t v128_u64_t __attribute__ ((vector_size (16),__may_alias__));
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef float v128_f_t __attribute__ ((vector_size (16),__may_alias__));
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef double v128_d_t __attribute__ ((vector_size (16),__may_alias__));
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* NOTE:
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * these types are to hide perceived flaws in the Intel/GCC code
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * don't use them outside of this file. uint8_t, int8_t and int64_t all
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * fail to compile so the above types can't be used within this file in some
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * places.
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef char v128_c_t __attribute__ ((vector_size (16),__may_alias__));
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef long long int v128_lli_t __attribute__ ((vector_size (16),__may_alias__));
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #if USE_VEC_REG
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* SSE
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movss
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movaps
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movups
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movlps
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movhps
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movlhps
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movhlps
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __MMX__
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* MMX
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_paddb (v8qi, v8qi)
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_paddw (v4hi, v4hi)
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_paddd (v2si, v2si)
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_psubb (v8qi, v8qi)
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psubw (v4hi, v4hi)
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psubd (v2si, v2si)
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_paddsb (v8qi, v8qi)
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_paddsw (v4hi, v4hi)
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_psubsb (v8qi, v8qi)
+ 81:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psubsw (v4hi, v4hi)
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_paddusb (v8qi, v8qi)
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_paddusw (v4hi, v4hi)
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_psubusb (v8qi, v8qi)
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psubusw (v4hi, v4hi)
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmullw (v4hi, v4hi)
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** di __builtin_ia32_pand (di, di)
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** di __builtin_ia32_pandn (di,di)
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** di __builtin_ia32_por (di, di)
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** di __builtin_ia32_pxor (di, di)
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pcmpeqd (v2si, v2si)
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pcmpgtd (v2si, v2si)
+
GAS LISTING /tmp/ccPaCTqg.s page 3
+
+
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_punpckhdq (v2si, v2si)
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_punpckldq (v2si, v2si)
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_packsswb (v4hi, v4hi)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_packssdw (v2si, v2si)
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_packuswb (v4hi, v4hi)
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psllw (v4hi, v4hi)
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pslld (v2si, v2si)
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psllq (v1di, v1di)
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psrlw (v4hi, v4hi)
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psrld (v2si, v2si)
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psrlq (v1di, v1di)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psraw (v4hi, v4hi)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psrad (v2si, v2si)
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psllwi (v4hi, int)
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pslldi (v2si, int)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psllqi (v1di, int)
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psrlwi (v4hi, int)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psrldi (v2si, int)
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psrlqi (v1di, int)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psrawi (v4hi, int)
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psradi (v2si, int)
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE__
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* SSE
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pavgb (v8qi, v8qi)
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pavgw (v4hi, v4hi)
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psadbw (v8qi, v8qi)
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pminub (v8qi, v8qi)
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pminsw (v4hi, v4hi)
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pextrw (v4hi, int)
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pinsrw (v4hi, int, int)
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pmovmskb (v8qi)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movntq (di *, di)
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_sfence (void)
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comieq (v4sf, v4sf)
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comineq (v4sf, v4sf)
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comilt (v4sf, v4sf)
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comile (v4sf, v4sf)
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comigt (v4sf, v4sf)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comige (v4sf, v4sf)
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomieq (v4sf, v4sf)
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomineq (v4sf, v4sf)
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomilt (v4sf, v4sf)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomile (v4sf, v4sf)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomigt (v4sf, v4sf)
+
GAS LISTING /tmp/ccPaCTqg.s page 4
+
+
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomige (v4sf, v4sf)
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_addps (v4sf, v4sf)
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_subps (v4sf, v4sf)
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_mulps (v4sf, v4sf)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_divps (v4sf, v4sf)
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_addss (v4sf, v4sf)
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_subss (v4sf, v4sf)
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_mulss (v4sf, v4sf)
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_divss (v4sf, v4sf)
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpltps (v4sf, v4sf)
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpleps (v4sf, v4sf)
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpordps (v4sf, v4sf)
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpltss (v4sf, v4sf)
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpless (v4sf, v4sf)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpnless (v4sf, v4sf)
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpordss (v4sf, v4sf)
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_maxps (v4sf, v4sf)
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_maxss (v4sf, v4sf)
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_minps (v4sf, v4sf)
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_minss (v4sf, v4sf)
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_andps (v4sf, v4sf)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_andnps (v4sf, v4sf)
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_orps (v4sf, v4sf)
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_xorps (v4sf, v4sf)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movss (v4sf, v4sf)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movhlps (v4sf, v4sf)
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movlhps (v4sf, v4sf)
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_cvtps2pi (v4sf)
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_cvtss2si (v4sf)
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_cvttps2pi (v4sf)
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_cvttss2si (v4sf)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_rcpps (v4sf)
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_rsqrtps (v4sf)
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_sqrtps (v4sf)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_rcpss (v4sf)
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_rsqrtss (v4sf)
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_sqrtss (v4sf)
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+
GAS LISTING /tmp/ccPaCTqg.s page 5
+
+
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPS ( v128_u8_t vin1, v128_u8_t vin2, const int mask )
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPS (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufps ((v128_f_t)vin1, (v128_f_t)vin2, mask);
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movntps (float *, v4sf)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_movmskps (v4sf)
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadaps (float *)
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movaps machine instruction as a load from memory.
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeaps (float *, v4sf)
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movaps machine instruction as a store to memory.
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadups (float *)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movups machine instruction as a load from memory.
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeups (float *, v4sf)
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movups machine instruction as a store to memory.
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadsss (float *)
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movss machine instruction as a load from memory.
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storess (float *, v4sf)
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movss machine instruction as a store to memory.
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movhps machine instruction as a load from memory.
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movlps machine instruction as a load from memory
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storehps (v2sf *, v4sf)
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movhps machine instruction as a store to memory.
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storelps (v2sf *, v4sf)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movlps machine instruction as a store to memory.
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE2__
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse2
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdeq (v2df, v2df)
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdlt (v2df, v2df)
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdle (v2df, v2df)
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdgt (v2df, v2df)
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdge (v2df, v2df)
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdneq (v2df, v2df)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdeq (v2df, v2df)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdlt (v2df, v2df)
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdle (v2df, v2df)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdgt (v2df, v2df)
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdge (v2df, v2df)
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdneq (v2df, v2df)
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpeqpd (v2df, v2df)
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpltpd (v2df, v2df)
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmplepd (v2df, v2df)
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpgtpd (v2df, v2df)
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpgepd (v2df, v2df)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpunordpd (v2df, v2df)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpneqpd (v2df, v2df)
+
GAS LISTING /tmp/ccPaCTqg.s page 6
+
+
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpnltpd (v2df, v2df)
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpnlepd (v2df, v2df)
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpngtpd (v2df, v2df)
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpngepd (v2df, v2df)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpordpd (v2df, v2df)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpeqsd (v2df, v2df)
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpltsd (v2df, v2df)
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmplesd (v2df, v2df)
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpunordsd (v2df, v2df)
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpneqsd (v2df, v2df)
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpnltsd (v2df, v2df)
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpnlesd (v2df, v2df)
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpordsd (v2df, v2df)
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_paddq (v2di, v2di)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psubq (v2di, v2di)
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_addpd (v2df, v2df)
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_subpd (v2df, v2df)
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_mulpd (v2df, v2df)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_divpd (v2df, v2df)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_addsd (v2df, v2df)
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_subsd (v2df, v2df)
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_mulsd (v2df, v2df)
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_divsd (v2df, v2df)
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_minpd (v2df, v2df)
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_maxpd (v2df, v2df)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_minsd (v2df, v2df)
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_maxsd (v2df, v2df)
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_andpd (v2df, v2df)
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_andnpd (v2df, v2df)
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_orpd (v2df, v2df)
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_xorpd (v2df, v2df)
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_movsd (v2df, v2df)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_unpckhpd (v2df, v2df)
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_unpcklpd (v2df, v2df)
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_paddd128 (v4si, v4si)
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_paddq128 (v2di, v2di)
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psubd128 (v4si, v4si)
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psubq128 (v2di, v2di)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pand128 (v2di, v2di)
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pandn128 (v2di, v2di)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_por128 (v2di, v2di)
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pxor128 (v2di, v2di)
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
+
GAS LISTING /tmp/ccPaCTqg.s page 7
+
+
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_punpckldq128 (v4si, v4si)
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_packssdw128 (v4si, v4si)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_maskmovdqu (v16qi, v16qi)
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadupd (double *)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeupd (double *, v2df)
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadhpd (v2df, double const *)
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadlpd (v2df, double const *)
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_movmskpd (v2df)
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pmovmskb128 (v16qi)
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movnti (int *, int)
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movntpd (double *, v2df)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movntdq (v2df *, v2df)
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pshufd (v4si, int)
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pshuflw (v8hi, int)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pshufhw (v8hi, int)
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_sqrtpd (v2df)
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_sqrtsd (v2df)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_shufpd (v2df, v2df, int)
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtdq2pd (v4si)
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtdq2ps (v4si)
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvtpd2dq (v2df)
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_cvtpd2pi (v2df)
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtpd2ps (v2df)
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvttpd2dq (v2df)
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_cvttpd2pi (v2df)
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtpi2pd (v2si)
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_cvtsd2si (v2df)
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_cvttsd2si (v2df)
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** long long __builtin_ia32_cvtsd2si64 (v2df)
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** long long __builtin_ia32_cvttsd2si64 (v2df)
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvtps2dq (v4sf)
+
GAS LISTING /tmp/ccPaCTqg.s page 8
+
+
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtps2pd (v4sf)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvttps2dq (v4sf)
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtsi2sd (v2df, int)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtsi642sd (v2df, long long)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_clflush (const void *)
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_lfence (void)
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_mfence (void)
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_loaddqu (const char *)
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storedqu (char *, v16qi)
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_pmuludq (v2si, v2si)
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmuludq128 (v4si, v4si)
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pslld128 (v4si, v4si)
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psllq128 (v2di, v2di)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psrld128 (v4si, v4si)
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psrlq128 (v2di, v2di)
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psrad128 (v4si, v4si)
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pslldqi128 (v2di, int)
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psllwi128 (v8hi, int)
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pslldi128 (v4si, int)
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSLLDI128 ( v128_u8_t vin, const int bit_count )
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSLLDI128 (v128_u8_t vin, const int bit_count)
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psllqi128 (v2di, int)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psrldqi128 (v2di, int)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psrlwi128 (v8hi, int)
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psrldi128 (v4si, int)
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSRLDI128 ( v128_u8_t vin, const int bit_count )
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSRLDI128 (v128_u8_t vin, const int bit_count)
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psrlqi128 (v2di, int)
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psrawi128 (v8hi, int)
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psradi128 (v4si, int)
+
GAS LISTING /tmp/ccPaCTqg.s page 9
+
+
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_movq128 (v2di)
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFD128 ( v128_u8_t vin, const int mask )
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFD128 (v128_u8_t vin, const int mask)
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE3__
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse3
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_addsubpd (v2df, v2df)
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_addsubps (v4sf, v4sf)
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_haddpd (v2df, v2df)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_haddps (v4sf, v4sf)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_hsubpd (v2df, v2df)
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_hsubps (v4sf, v4sf)
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_lddqu (char const *)
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_movddup (v2df)
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movshdup (v4sf)
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movsldup (v4sf)
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_mwait (unsigned int, unsigned int)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadddup (double const *)
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSSE3__
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* ssse3
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * The following built-in functions are available when -mssse3 is used. All of
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * them generate the machine instruction that is part of the name with MMX
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * registers.
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_phaddd (v2si, v2si)
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_phaddw (v4hi, v4hi)
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_phsubd (v2si, v2si)
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_phsubw (v4hi, v4hi)
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pshufb (v8qi, v8qi)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_psignb (v8qi, v8qi)
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psignd (v2si, v2si)
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psignw (v4hi, v4hi)
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_palignr (v1di, v1di, int)
+
GAS LISTING /tmp/ccPaCTqg.s page 10
+
+
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pabsb (v8qi)
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pabsd (v2si)
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pabsw (v4hi)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -mssse3 is used.
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** with SSE registers.
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_phaddd128 (v4si, v4si)
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_phsubd128 (v4si, v4si)
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** + v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psignd128 (v4si, v4si)
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_palignr128 (v2di, v2di, int)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pabsb128 (v16qi)
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pabsd128 (v4si)
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pabsw128 (v8hi)
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE4_1__
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse4.1
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.1 is used.
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name.
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_blendpd (v2df, v2df, const int)
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_dppd (v2df, v2df, const int)
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_movntdqa (v2di *);
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_packusdw128 (v4si, v4si)
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pcmpeqq (v2di, v2di)
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phminposuw128 (v8hi)
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
+
GAS LISTING /tmp/ccPaCTqg.s page 11
+
+
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmaxud128 (v4si, v4si)
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pminsd128 (v4si, v4si)
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pminud128 (v4si, v4si)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmovsxbd128 (v16qi)
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovsxbq128 (v16qi)
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmovsxbw128 (v16qi)
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovsxdq128 (v4si)
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmovsxwd128 (v8hi)
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovsxwq128 (v8hi)
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmovzxbd128 (v16qi)
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovzxbq128 (v16qi)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmovzxbw128 (v16qi)
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovzxdq128 (v4si)
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmovzxwd128 (v8hi)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovzxwq128 (v8hi)
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmuldq128 (v4si, v4si)
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmulld128 (v4si, v4si)
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ptestc128 (v2di, v2di)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ptestnzc128 (v2di, v2di)
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ptestz128 (v2di, v2di)
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_roundpd (v2df, const int)
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_roundps (v4sf, const int)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_roundsd (v2df, v2df, const int)
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.1 is used.
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the insertps machine instruction.
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vec_ext_v16qi (v16qi, const int)
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pextrb machine instruction.
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrb machine instruction.
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrd machine instruction.
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_vec_set_v4si ((v128_i32_t)vin, ii, off);
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrq machine instruction in 64bit mode.
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are changed to generate new SSE4.1 instructions when -msse4.1 is u
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** float __builtin_ia32_vec_ext_v4sf (v4sf, const int)
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the extractps machine instruction.
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vec_ext_v4si (v4si, const int)
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pextrd machine instruction.
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** long long __builtin_ia32_vec_ext_v2di (v2di, const int)
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pextrq machine instruction in 64bit mode.
+
GAS LISTING /tmp/ccPaCTqg.s page 12
+
+
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE4_2__
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse4.2
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.2 is used.
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name.
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pcmpgtq (v2di, v2di)
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.2 is used.
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the crc32b machine instruction.
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the crc32w machine instruction.
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the crc32l machine instruction.
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the crc32q machine instruction.
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are changed to generate new SSE4.2 instructions when -msse4.2 is u
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_popcount (unsigned int)
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the popcntl machine instruction.
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_popcountl (unsigned long)
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the popcntl or popcntq machine instruction, depending on the size of unsigned long.
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_popcountll (unsigned long long)
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the popcntq machine instruction.
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* avx
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -mavx is used.
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name.
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_addpd256 (v4df,v4df)
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_addps256 (v8sf,v8sf)
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_addsubpd256 (v4df,v4df)
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_andnpd256 (v4df,v4df)
+
GAS LISTING /tmp/ccPaCTqg.s page 13
+
+
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_andpd256 (v4df,v4df)
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_andps256 (v8sf,v8sf)
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmppd (v2df,v2df,int)
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpsd (v2df,v2df,int)
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_cvtdq2pd256 (v4si)
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_cvtdq2ps256 (v8si)
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvtpd2dq256 (v4df)
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtpd2ps256 (v4df)
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8si __builtin_ia32_cvtps2dq256 (v8sf)
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_cvtps2pd256 (v4sf)
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvttpd2dq256 (v4df)
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8si __builtin_ia32_cvttps2dq256 (v8sf)
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_divpd256 (v4df,v4df)
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_divps256 (v8sf,v8sf)
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_haddpd256 (v4df,v4df)
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_hsubpd256 (v4df,v4df)
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v32qi __builtin_ia32_lddqu256 (pcchar)
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v32qi __builtin_ia32_loaddqu256 (pcchar)
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_loadupd256 (pcdouble)
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_loadups256 (pcfloat)
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_maxpd256 (v4df,v4df)
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_minpd256 (v4df,v4df)
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_minps256 (v8sf,v8sf)
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_movddup256 (v4df)
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_movmskpd256 (v4df)
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_movmskps256 (v8sf)
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_movshdup256 (v8sf)
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_movsldup256 (v8sf)
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_mulpd256 (v4df,v4df)
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_orpd256 (v4df,v4df)
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_orps256 (v8sf,v8sf)
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_pd_pd256 (v4df)
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_pd256_pd (v2df)
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_ps_ps256 (v8sf)
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_ps256_ps (v4sf)
+
GAS LISTING /tmp/ccPaCTqg.s page 14
+
+
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_rcpps256 (v8sf)
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_roundpd256 (v4df,int)
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_roundps256 (v8sf,int)
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_rsqrtps256 (v8sf)
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_si_si256 (v8si)
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8si __builtin_ia32_si256_si (v4si)
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_sqrtpd256 (v4df)
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_sqrtps256 (v8sf)
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storedqu256 (pchar,v32qi)
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeupd256 (pdouble,v4df)
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeups256 (pfloat,v8sf)
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_subpd256 (v4df,v4df)
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_subps256 (v8sf,v8sf)
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_vbroadcastss (pcfloat)
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_vextractf128_si256 (v8si,int)
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_vpermilpd (v2df,int)
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_vpermilpd256 (v4df,int)
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_vpermilps (v4sf,int)
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_vpermilps256 (v8sf,int)
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
+
GAS LISTING /tmp/ccPaCTqg.s page 15
+
+
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_vzeroall (void)
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_vzeroupper (void)
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4df __builtin_ia32_xorpd256 (v4df,v4df)
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __AES__
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * AES-NI instruction set
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * includes PCMUL
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* AES-NI aes
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 806:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesenc128 (v2di, v2di) */
+ 807:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 808:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESENC (register v128_u8_t state, register const v128_u8_t round_key)
+ 809:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 14 .loc 1 809 0
+ 15 .cfi_startproc
+ 16 0000 55 pushq %rbp
+ 17 .LCFI0:
+ 18 .cfi_def_cfa_offset 16
+ 19 0001 4889E5 movq %rsp, %rbp
+ 20 .cfi_offset 6, -16
+ 21 .LCFI1:
+ 22 .cfi_def_cfa_register 6
+ 810:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aesenc128 ((v128_lli_t)state,
+ 23 .loc 1 810 0
+ 24 0004 660F38DC aesenc %xmm1, %xmm0
+ 24 C1
+ 811:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** (v128_lli_t)round_key);
+ 812:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 25 .loc 1 812 0
+ 26 0009 C9 leave
+ 27 000a C3 ret
+ 28 .cfi_endproc
+ 29 .LFE580:
+ 30 .size op_AESENC, .-op_AESENC
+ 31 .type op_AESENCLAST, @function
+ 32 op_AESENCLAST:
+ 33 .LFB581:
+ 813:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 814:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 815:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesenclast128 (v2di, v2di) */
+ 816:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 817:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESENCLAST (register v128_u8_t state,
+
GAS LISTING /tmp/ccPaCTqg.s page 16
+
+
+ 818:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** register const v128_u8_t round_key)
+ 819:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 34 .loc 1 819 0
+ 35 .cfi_startproc
+ 36 000b 55 pushq %rbp
+ 37 .LCFI2:
+ 38 .cfi_def_cfa_offset 16
+ 39 000c 4889E5 movq %rsp, %rbp
+ 40 .cfi_offset 6, -16
+ 41 .LCFI3:
+ 42 .cfi_def_cfa_register 6
+ 820:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aesenclast128 ((v128_lli_t)state,
+ 43 .loc 1 820 0
+ 44 000f 660F38DD aesenclast %xmm1, %xmm0
+ 44 C1
+ 821:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** (v128_lli_t)round_key);
+ 822:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 45 .loc 1 822 0
+ 46 0014 C9 leave
+ 47 0015 C3 ret
+ 48 .cfi_endproc
+ 49 .LFE581:
+ 50 .size op_AESENCLAST, .-op_AESENCLAST
+ 51 .type op_AESDEC, @function
+ 52 op_AESDEC:
+ 53 .LFB582:
+ 823:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 824:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 825:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesdec128 (v2di, v2di) */
+ 826:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 827:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESDEC (register v128_u8_t state, register const v128_u8_t round_key)
+ 828:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 54 .loc 1 828 0
+ 55 .cfi_startproc
+ 56 0016 55 pushq %rbp
+ 57 .LCFI4:
+ 58 .cfi_def_cfa_offset 16
+ 59 0017 4889E5 movq %rsp, %rbp
+ 60 .cfi_offset 6, -16
+ 61 .LCFI5:
+ 62 .cfi_def_cfa_register 6
+ 829:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aesdec128 ((v128_lli_t)state,
+ 63 .loc 1 829 0
+ 64 001a 660F38DE aesdec %xmm1, %xmm0
+ 64 C1
+ 830:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** (v128_lli_t)round_key);
+ 831:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 65 .loc 1 831 0
+ 66 001f C9 leave
+ 67 0020 C3 ret
+ 68 .cfi_endproc
+ 69 .LFE582:
+ 70 .size op_AESDEC, .-op_AESDEC
+ 71 .type op_AESDECLAST, @function
+ 72 op_AESDECLAST:
+ 73 .LFB583:
+ 832:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+
GAS LISTING /tmp/ccPaCTqg.s page 17
+
+
+ 833:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 834:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesdeclast128 (v2di, v2di) */
+ 835:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 836:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESDECLAST (register v128_u8_t state,
+ 837:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** register const v128_u8_t round_key)
+ 838:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 74 .loc 1 838 0
+ 75 .cfi_startproc
+ 76 0021 55 pushq %rbp
+ 77 .LCFI6:
+ 78 .cfi_def_cfa_offset 16
+ 79 0022 4889E5 movq %rsp, %rbp
+ 80 .cfi_offset 6, -16
+ 81 .LCFI7:
+ 82 .cfi_def_cfa_register 6
+ 839:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aesdeclast128 ((v128_lli_t)state,
+ 83 .loc 1 839 0
+ 84 0025 660F38DF aesdeclast %xmm1, %xmm0
+ 84 C1
+ 840:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** (v128_lli_t)round_key);
+ 841:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 85 .loc 1 841 0
+ 86 002a C9 leave
+ 87 002b C3 ret
+ 88 .cfi_endproc
+ 89 .LFE583:
+ 90 .size op_AESDECLAST, .-op_AESDECLAST
+ 91 .type op_AESIMC, @function
+ 92 op_AESIMC:
+ 93 .LFB585:
+ 842:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 843:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 844:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) */
+ 845:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 846:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESKEYGENASSIST (register const v128_u8_t round_key,
+ 847:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** const int rcon ) __attribute__ ((always_inline));
+ 848:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 849:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESKEYGENASSIST (register const v128_u8_t round_key,
+ 850:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** const int rcon )
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 853:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** rcon);
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 855:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 856:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesimc128 (v2di) */
+ 858:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESIMC (register const v128_u8_t round_key)
+ 860:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 94 .loc 1 860 0
+ 95 .cfi_startproc
+ 96 002c 55 pushq %rbp
+ 97 .LCFI8:
+ 98 .cfi_def_cfa_offset 16
+ 99 002d 4889E5 movq %rsp, %rbp
+ 100 .cfi_offset 6, -16
+ 101 .LCFI9:
+
GAS LISTING /tmp/ccPaCTqg.s page 18
+
+
+ 102 .cfi_def_cfa_register 6
+ 861:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aesimc128 ((v128_lli_t)round_key);
+ 103 .loc 1 861 0
+ 104 0030 660F38DB aesimc %xmm0, %xmm0
+ 104 C0
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 105 .loc 1 862 0
+ 106 0035 C9 leave
+ 107 0036 C3 ret
+ 108 .cfi_endproc
+ 109 .LFE585:
+ 110 .size op_AESIMC, .-op_AESIMC
+ 111 .type bswap_32, @function
+ 112 bswap_32:
+ 113 .LFB602:
+ 114 .file 2 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** */
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifndef _h_byteswap_
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _h_byteswap_
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef _BYTESWAP_H
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #warning "GNU byteswap.h being used"
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #else
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _BYTESWAP_H 1234
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #include <stdint.h>
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef __cplusplus
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** extern "C" {
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #endif
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+
GAS LISTING /tmp/ccPaCTqg.s page 19
+
+
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint16_t bswap_16 ( uint16_t i )
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** register uint16_t rtn;
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** __asm__
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** (
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** "rorw $8, %w0"
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "=r" ( rtn )
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "0" ( i )
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "cc"
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** );
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** return rtn;
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint32_t bswap_32 ( uint32_t i )
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+ 115 .loc 2 57 0
+ 116 .cfi_startproc
+ 117 0037 55 pushq %rbp
+ 118 .LCFI10:
+ 119 .cfi_def_cfa_offset 16
+ 120 0038 4889E5 movq %rsp, %rbp
+ 121 .cfi_offset 6, -16
+ 122 .LCFI11:
+ 123 .cfi_def_cfa_register 6
+ 124 003b 53 pushq %rbx
+ 125 003c 897DF4 movl %edi, -12(%rbp)
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** register uint32_t rtn;
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** __asm__
+ 126 .loc 2 59 0
+ 127 003f 8B45F4 movl -12(%rbp), %eax
+ 128 0042 89C3 movl %eax, %ebx
+ 129 .cfi_offset 3, -24
+ 130 #APP
+ 131 # 59 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h" 1
+ 60 (
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** "bswap %0"
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "=r" ( rtn )
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "0" ( i )
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "cc"
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** );
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** return rtn;
+ 132 bswap %ebx
+ 133 # 0 "" 2
+ 134 .loc 2 66 0
+ 135 #NO_APP
+ 136 0046 89D8 movl %ebx, %eax
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+ 137 .loc 2 67 0
+ 138 0048 5B popq %rbx
+ 139 0049 C9 leave
+ 140 004a C3 ret
+ 141 .cfi_endproc
+ 142 .LFE602:
+ 143 .size bswap_32, .-bswap_32
+ 144 .section .rodata
+ 145 .align 16
+
GAS LISTING /tmp/ccPaCTqg.s page 20
+
+
+ 146 .type vec_00, @object
+ 147 .size vec_00, 16
+ 148 vec_00:
+ 149 0000 00000000 .zero 16
+ 149 00000000
+ 149 00000000
+ 149 00000000
+ 150 .align 16
+ 151 .type vec_01, @object
+ 152 .size vec_01, 16
+ 153 vec_01:
+ 154 0010 01 .byte 1
+ 155 0011 01 .byte 1
+ 156 0012 01 .byte 1
+ 157 0013 01 .byte 1
+ 158 0014 01 .byte 1
+ 159 0015 01 .byte 1
+ 160 0016 01 .byte 1
+ 161 0017 01 .byte 1
+ 162 0018 01 .byte 1
+ 163 0019 01 .byte 1
+ 164 001a 01 .byte 1
+ 165 001b 01 .byte 1
+ 166 001c 01 .byte 1
+ 167 001d 01 .byte 1
+ 168 001e 01 .byte 1
+ 169 001f 01 .byte 1
+ 170 .align 16
+ 171 .type vec_0F, @object
+ 172 .size vec_0F, 16
+ 173 vec_0F:
+ 174 0020 0F .byte 15
+ 175 0021 0F .byte 15
+ 176 0022 0F .byte 15
+ 177 0023 0F .byte 15
+ 178 0024 0F .byte 15
+ 179 0025 0F .byte 15
+ 180 0026 0F .byte 15
+ 181 0027 0F .byte 15
+ 182 0028 0F .byte 15
+ 183 0029 0F .byte 15
+ 184 002a 0F .byte 15
+ 185 002b 0F .byte 15
+ 186 002c 0F .byte 15
+ 187 002d 0F .byte 15
+ 188 002e 0F .byte 15
+ 189 002f 0F .byte 15
+ 190 .align 16
+ 191 .type vec_10, @object
+ 192 .size vec_10, 16
+ 193 vec_10:
+ 194 0030 10 .byte 16
+ 195 0031 10 .byte 16
+ 196 0032 10 .byte 16
+ 197 0033 10 .byte 16
+ 198 0034 10 .byte 16
+ 199 0035 10 .byte 16
+
GAS LISTING /tmp/ccPaCTqg.s page 21
+
+
+ 200 0036 10 .byte 16
+ 201 0037 10 .byte 16
+ 202 0038 10 .byte 16
+ 203 0039 10 .byte 16
+ 204 003a 10 .byte 16
+ 205 003b 10 .byte 16
+ 206 003c 10 .byte 16
+ 207 003d 10 .byte 16
+ 208 003e 10 .byte 16
+ 209 003f 10 .byte 16
+ 210 .align 32
+ 211 .type KAESBlockCipherVecAesNiRijndaelSBox, @object
+ 212 .size KAESBlockCipherVecAesNiRijndaelSBox, 256
+ 213 KAESBlockCipherVecAesNiRijndaelSBox:
+ 214 0040 63 .byte 99
+ 215 0041 7C .byte 124
+ 216 0042 77 .byte 119
+ 217 0043 7B .byte 123
+ 218 0044 F2 .byte -14
+ 219 0045 6B .byte 107
+ 220 0046 6F .byte 111
+ 221 0047 C5 .byte -59
+ 222 0048 30 .byte 48
+ 223 0049 01 .byte 1
+ 224 004a 67 .byte 103
+ 225 004b 2B .byte 43
+ 226 004c FE .byte -2
+ 227 004d D7 .byte -41
+ 228 004e AB .byte -85
+ 229 004f 76 .byte 118
+ 230 0050 CA .byte -54
+ 231 0051 82 .byte -126
+ 232 0052 C9 .byte -55
+ 233 0053 7D .byte 125
+ 234 0054 FA .byte -6
+ 235 0055 59 .byte 89
+ 236 0056 47 .byte 71
+ 237 0057 F0 .byte -16
+ 238 0058 AD .byte -83
+ 239 0059 D4 .byte -44
+ 240 005a A2 .byte -94
+ 241 005b AF .byte -81
+ 242 005c 9C .byte -100
+ 243 005d A4 .byte -92
+ 244 005e 72 .byte 114
+ 245 005f C0 .byte -64
+ 246 0060 B7 .byte -73
+ 247 0061 FD .byte -3
+ 248 0062 93 .byte -109
+ 249 0063 26 .byte 38
+ 250 0064 36 .byte 54
+ 251 0065 3F .byte 63
+ 252 0066 F7 .byte -9
+ 253 0067 CC .byte -52
+ 254 0068 34 .byte 52
+ 255 0069 A5 .byte -91
+ 256 006a E5 .byte -27
+
GAS LISTING /tmp/ccPaCTqg.s page 22
+
+
+ 257 006b F1 .byte -15
+ 258 006c 71 .byte 113
+ 259 006d D8 .byte -40
+ 260 006e 31 .byte 49
+ 261 006f 15 .byte 21
+ 262 0070 04 .byte 4
+ 263 0071 C7 .byte -57
+ 264 0072 23 .byte 35
+ 265 0073 C3 .byte -61
+ 266 0074 18 .byte 24
+ 267 0075 96 .byte -106
+ 268 0076 05 .byte 5
+ 269 0077 9A .byte -102
+ 270 0078 07 .byte 7
+ 271 0079 12 .byte 18
+ 272 007a 80 .byte -128
+ 273 007b E2 .byte -30
+ 274 007c EB .byte -21
+ 275 007d 27 .byte 39
+ 276 007e B2 .byte -78
+ 277 007f 75 .byte 117
+ 278 0080 09 .byte 9
+ 279 0081 83 .byte -125
+ 280 0082 2C .byte 44
+ 281 0083 1A .byte 26
+ 282 0084 1B .byte 27
+ 283 0085 6E .byte 110
+ 284 0086 5A .byte 90
+ 285 0087 A0 .byte -96
+ 286 0088 52 .byte 82
+ 287 0089 3B .byte 59
+ 288 008a D6 .byte -42
+ 289 008b B3 .byte -77
+ 290 008c 29 .byte 41
+ 291 008d E3 .byte -29
+ 292 008e 2F .byte 47
+ 293 008f 84 .byte -124
+ 294 0090 53 .byte 83
+ 295 0091 D1 .byte -47
+ 296 0092 00 .byte 0
+ 297 0093 ED .byte -19
+ 298 0094 20 .byte 32
+ 299 0095 FC .byte -4
+ 300 0096 B1 .byte -79
+ 301 0097 5B .byte 91
+ 302 0098 6A .byte 106
+ 303 0099 CB .byte -53
+ 304 009a BE .byte -66
+ 305 009b 39 .byte 57
+ 306 009c 4A .byte 74
+ 307 009d 4C .byte 76
+ 308 009e 58 .byte 88
+ 309 009f CF .byte -49
+ 310 00a0 D0 .byte -48
+ 311 00a1 EF .byte -17
+ 312 00a2 AA .byte -86
+ 313 00a3 FB .byte -5
+
GAS LISTING /tmp/ccPaCTqg.s page 23
+
+
+ 314 00a4 43 .byte 67
+ 315 00a5 4D .byte 77
+ 316 00a6 33 .byte 51
+ 317 00a7 85 .byte -123
+ 318 00a8 45 .byte 69
+ 319 00a9 F9 .byte -7
+ 320 00aa 02 .byte 2
+ 321 00ab 7F .byte 127
+ 322 00ac 50 .byte 80
+ 323 00ad 3C .byte 60
+ 324 00ae 9F .byte -97
+ 325 00af A8 .byte -88
+ 326 00b0 51 .byte 81
+ 327 00b1 A3 .byte -93
+ 328 00b2 40 .byte 64
+ 329 00b3 8F .byte -113
+ 330 00b4 92 .byte -110
+ 331 00b5 9D .byte -99
+ 332 00b6 38 .byte 56
+ 333 00b7 F5 .byte -11
+ 334 00b8 BC .byte -68
+ 335 00b9 B6 .byte -74
+ 336 00ba DA .byte -38
+ 337 00bb 21 .byte 33
+ 338 00bc 10 .byte 16
+ 339 00bd FF .byte -1
+ 340 00be F3 .byte -13
+ 341 00bf D2 .byte -46
+ 342 00c0 CD .byte -51
+ 343 00c1 0C .byte 12
+ 344 00c2 13 .byte 19
+ 345 00c3 EC .byte -20
+ 346 00c4 5F .byte 95
+ 347 00c5 97 .byte -105
+ 348 00c6 44 .byte 68
+ 349 00c7 17 .byte 23
+ 350 00c8 C4 .byte -60
+ 351 00c9 A7 .byte -89
+ 352 00ca 7E .byte 126
+ 353 00cb 3D .byte 61
+ 354 00cc 64 .byte 100
+ 355 00cd 5D .byte 93
+ 356 00ce 19 .byte 25
+ 357 00cf 73 .byte 115
+ 358 00d0 60 .byte 96
+ 359 00d1 81 .byte -127
+ 360 00d2 4F .byte 79
+ 361 00d3 DC .byte -36
+ 362 00d4 22 .byte 34
+ 363 00d5 2A .byte 42
+ 364 00d6 90 .byte -112
+ 365 00d7 88 .byte -120
+ 366 00d8 46 .byte 70
+ 367 00d9 EE .byte -18
+ 368 00da B8 .byte -72
+ 369 00db 14 .byte 20
+ 370 00dc DE .byte -34
+
GAS LISTING /tmp/ccPaCTqg.s page 24
+
+
+ 371 00dd 5E .byte 94
+ 372 00de 0B .byte 11
+ 373 00df DB .byte -37
+ 374 00e0 E0 .byte -32
+ 375 00e1 32 .byte 50
+ 376 00e2 3A .byte 58
+ 377 00e3 0A .byte 10
+ 378 00e4 49 .byte 73
+ 379 00e5 06 .byte 6
+ 380 00e6 24 .byte 36
+ 381 00e7 5C .byte 92
+ 382 00e8 C2 .byte -62
+ 383 00e9 D3 .byte -45
+ 384 00ea AC .byte -84
+ 385 00eb 62 .byte 98
+ 386 00ec 91 .byte -111
+ 387 00ed 95 .byte -107
+ 388 00ee E4 .byte -28
+ 389 00ef 79 .byte 121
+ 390 00f0 E7 .byte -25
+ 391 00f1 C8 .byte -56
+ 392 00f2 37 .byte 55
+ 393 00f3 6D .byte 109
+ 394 00f4 8D .byte -115
+ 395 00f5 D5 .byte -43
+ 396 00f6 4E .byte 78
+ 397 00f7 A9 .byte -87
+ 398 00f8 6C .byte 108
+ 399 00f9 56 .byte 86
+ 400 00fa F4 .byte -12
+ 401 00fb EA .byte -22
+ 402 00fc 65 .byte 101
+ 403 00fd 7A .byte 122
+ 404 00fe AE .byte -82
+ 405 00ff 08 .byte 8
+ 406 0100 BA .byte -70
+ 407 0101 78 .byte 120
+ 408 0102 25 .byte 37
+ 409 0103 2E .byte 46
+ 410 0104 1C .byte 28
+ 411 0105 A6 .byte -90
+ 412 0106 B4 .byte -76
+ 413 0107 C6 .byte -58
+ 414 0108 E8 .byte -24
+ 415 0109 DD .byte -35
+ 416 010a 74 .byte 116
+ 417 010b 1F .byte 31
+ 418 010c 4B .byte 75
+ 419 010d BD .byte -67
+ 420 010e 8B .byte -117
+ 421 010f 8A .byte -118
+ 422 0110 70 .byte 112
+ 423 0111 3E .byte 62
+ 424 0112 B5 .byte -75
+ 425 0113 66 .byte 102
+ 426 0114 48 .byte 72
+ 427 0115 03 .byte 3
+
GAS LISTING /tmp/ccPaCTqg.s page 25
+
+
+ 428 0116 F6 .byte -10
+ 429 0117 0E .byte 14
+ 430 0118 61 .byte 97
+ 431 0119 35 .byte 53
+ 432 011a 57 .byte 87
+ 433 011b B9 .byte -71
+ 434 011c 86 .byte -122
+ 435 011d C1 .byte -63
+ 436 011e 1D .byte 29
+ 437 011f 9E .byte -98
+ 438 0120 E1 .byte -31
+ 439 0121 F8 .byte -8
+ 440 0122 98 .byte -104
+ 441 0123 11 .byte 17
+ 442 0124 69 .byte 105
+ 443 0125 D9 .byte -39
+ 444 0126 8E .byte -114
+ 445 0127 94 .byte -108
+ 446 0128 9B .byte -101
+ 447 0129 1E .byte 30
+ 448 012a 87 .byte -121
+ 449 012b E9 .byte -23
+ 450 012c CE .byte -50
+ 451 012d 55 .byte 85
+ 452 012e 28 .byte 40
+ 453 012f DF .byte -33
+ 454 0130 8C .byte -116
+ 455 0131 A1 .byte -95
+ 456 0132 89 .byte -119
+ 457 0133 0D .byte 13
+ 458 0134 BF .byte -65
+ 459 0135 E6 .byte -26
+ 460 0136 42 .byte 66
+ 461 0137 68 .byte 104
+ 462 0138 41 .byte 65
+ 463 0139 99 .byte -103
+ 464 013a 2D .byte 45
+ 465 013b 0F .byte 15
+ 466 013c B0 .byte -80
+ 467 013d 54 .byte 84
+ 468 013e BB .byte -69
+ 469 013f 16 .byte 22
+ 470 .align 32
+ 471 .type KAESBlockCipherVecAesNiRijndaelSBoxV, @object
+ 472 .size KAESBlockCipherVecAesNiRijndaelSBoxV, 256
+ 473 KAESBlockCipherVecAesNiRijndaelSBoxV:
+ 474 0140 63 .byte 99
+ 475 0141 7C .byte 124
+ 476 0142 77 .byte 119
+ 477 0143 7B .byte 123
+ 478 0144 F2 .byte -14
+ 479 0145 6B .byte 107
+ 480 0146 6F .byte 111
+ 481 0147 C5 .byte -59
+ 482 0148 30 .byte 48
+ 483 0149 01 .byte 1
+ 484 014a 67 .byte 103
+
GAS LISTING /tmp/ccPaCTqg.s page 26
+
+
+ 485 014b 2B .byte 43
+ 486 014c FE .byte -2
+ 487 014d D7 .byte -41
+ 488 014e AB .byte -85
+ 489 014f 76 .byte 118
+ 490 0150 CA .byte -54
+ 491 0151 82 .byte -126
+ 492 0152 C9 .byte -55
+ 493 0153 7D .byte 125
+ 494 0154 FA .byte -6
+ 495 0155 59 .byte 89
+ 496 0156 47 .byte 71
+ 497 0157 F0 .byte -16
+ 498 0158 AD .byte -83
+ 499 0159 D4 .byte -44
+ 500 015a A2 .byte -94
+ 501 015b AF .byte -81
+ 502 015c 9C .byte -100
+ 503 015d A4 .byte -92
+ 504 015e 72 .byte 114
+ 505 015f C0 .byte -64
+ 506 0160 B7 .byte -73
+ 507 0161 FD .byte -3
+ 508 0162 93 .byte -109
+ 509 0163 26 .byte 38
+ 510 0164 36 .byte 54
+ 511 0165 3F .byte 63
+ 512 0166 F7 .byte -9
+ 513 0167 CC .byte -52
+ 514 0168 34 .byte 52
+ 515 0169 A5 .byte -91
+ 516 016a E5 .byte -27
+ 517 016b F1 .byte -15
+ 518 016c 71 .byte 113
+ 519 016d D8 .byte -40
+ 520 016e 31 .byte 49
+ 521 016f 15 .byte 21
+ 522 0170 04 .byte 4
+ 523 0171 C7 .byte -57
+ 524 0172 23 .byte 35
+ 525 0173 C3 .byte -61
+ 526 0174 18 .byte 24
+ 527 0175 96 .byte -106
+ 528 0176 05 .byte 5
+ 529 0177 9A .byte -102
+ 530 0178 07 .byte 7
+ 531 0179 12 .byte 18
+ 532 017a 80 .byte -128
+ 533 017b E2 .byte -30
+ 534 017c EB .byte -21
+ 535 017d 27 .byte 39
+ 536 017e B2 .byte -78
+ 537 017f 75 .byte 117
+ 538 0180 09 .byte 9
+ 539 0181 83 .byte -125
+ 540 0182 2C .byte 44
+ 541 0183 1A .byte 26
+
GAS LISTING /tmp/ccPaCTqg.s page 27
+
+
+ 542 0184 1B .byte 27
+ 543 0185 6E .byte 110
+ 544 0186 5A .byte 90
+ 545 0187 A0 .byte -96
+ 546 0188 52 .byte 82
+ 547 0189 3B .byte 59
+ 548 018a D6 .byte -42
+ 549 018b B3 .byte -77
+ 550 018c 29 .byte 41
+ 551 018d E3 .byte -29
+ 552 018e 2F .byte 47
+ 553 018f 84 .byte -124
+ 554 0190 53 .byte 83
+ 555 0191 D1 .byte -47
+ 556 0192 00 .byte 0
+ 557 0193 ED .byte -19
+ 558 0194 20 .byte 32
+ 559 0195 FC .byte -4
+ 560 0196 B1 .byte -79
+ 561 0197 5B .byte 91
+ 562 0198 6A .byte 106
+ 563 0199 CB .byte -53
+ 564 019a BE .byte -66
+ 565 019b 39 .byte 57
+ 566 019c 4A .byte 74
+ 567 019d 4C .byte 76
+ 568 019e 58 .byte 88
+ 569 019f CF .byte -49
+ 570 01a0 D0 .byte -48
+ 571 01a1 EF .byte -17
+ 572 01a2 AA .byte -86
+ 573 01a3 FB .byte -5
+ 574 01a4 43 .byte 67
+ 575 01a5 4D .byte 77
+ 576 01a6 33 .byte 51
+ 577 01a7 85 .byte -123
+ 578 01a8 45 .byte 69
+ 579 01a9 F9 .byte -7
+ 580 01aa 02 .byte 2
+ 581 01ab 7F .byte 127
+ 582 01ac 50 .byte 80
+ 583 01ad 3C .byte 60
+ 584 01ae 9F .byte -97
+ 585 01af A8 .byte -88
+ 586 01b0 51 .byte 81
+ 587 01b1 A3 .byte -93
+ 588 01b2 40 .byte 64
+ 589 01b3 8F .byte -113
+ 590 01b4 92 .byte -110
+ 591 01b5 9D .byte -99
+ 592 01b6 38 .byte 56
+ 593 01b7 F5 .byte -11
+ 594 01b8 BC .byte -68
+ 595 01b9 B6 .byte -74
+ 596 01ba DA .byte -38
+ 597 01bb 21 .byte 33
+ 598 01bc 10 .byte 16
+
GAS LISTING /tmp/ccPaCTqg.s page 28
+
+
+ 599 01bd FF .byte -1
+ 600 01be F3 .byte -13
+ 601 01bf D2 .byte -46
+ 602 01c0 CD .byte -51
+ 603 01c1 0C .byte 12
+ 604 01c2 13 .byte 19
+ 605 01c3 EC .byte -20
+ 606 01c4 5F .byte 95
+ 607 01c5 97 .byte -105
+ 608 01c6 44 .byte 68
+ 609 01c7 17 .byte 23
+ 610 01c8 C4 .byte -60
+ 611 01c9 A7 .byte -89
+ 612 01ca 7E .byte 126
+ 613 01cb 3D .byte 61
+ 614 01cc 64 .byte 100
+ 615 01cd 5D .byte 93
+ 616 01ce 19 .byte 25
+ 617 01cf 73 .byte 115
+ 618 01d0 60 .byte 96
+ 619 01d1 81 .byte -127
+ 620 01d2 4F .byte 79
+ 621 01d3 DC .byte -36
+ 622 01d4 22 .byte 34
+ 623 01d5 2A .byte 42
+ 624 01d6 90 .byte -112
+ 625 01d7 88 .byte -120
+ 626 01d8 46 .byte 70
+ 627 01d9 EE .byte -18
+ 628 01da B8 .byte -72
+ 629 01db 14 .byte 20
+ 630 01dc DE .byte -34
+ 631 01dd 5E .byte 94
+ 632 01de 0B .byte 11
+ 633 01df DB .byte -37
+ 634 01e0 E0 .byte -32
+ 635 01e1 32 .byte 50
+ 636 01e2 3A .byte 58
+ 637 01e3 0A .byte 10
+ 638 01e4 49 .byte 73
+ 639 01e5 06 .byte 6
+ 640 01e6 24 .byte 36
+ 641 01e7 5C .byte 92
+ 642 01e8 C2 .byte -62
+ 643 01e9 D3 .byte -45
+ 644 01ea AC .byte -84
+ 645 01eb 62 .byte 98
+ 646 01ec 91 .byte -111
+ 647 01ed 95 .byte -107
+ 648 01ee E4 .byte -28
+ 649 01ef 79 .byte 121
+ 650 01f0 E7 .byte -25
+ 651 01f1 C8 .byte -56
+ 652 01f2 37 .byte 55
+ 653 01f3 6D .byte 109
+ 654 01f4 8D .byte -115
+ 655 01f5 D5 .byte -43
+
GAS LISTING /tmp/ccPaCTqg.s page 29
+
+
+ 656 01f6 4E .byte 78
+ 657 01f7 A9 .byte -87
+ 658 01f8 6C .byte 108
+ 659 01f9 56 .byte 86
+ 660 01fa F4 .byte -12
+ 661 01fb EA .byte -22
+ 662 01fc 65 .byte 101
+ 663 01fd 7A .byte 122
+ 664 01fe AE .byte -82
+ 665 01ff 08 .byte 8
+ 666 0200 BA .byte -70
+ 667 0201 78 .byte 120
+ 668 0202 25 .byte 37
+ 669 0203 2E .byte 46
+ 670 0204 1C .byte 28
+ 671 0205 A6 .byte -90
+ 672 0206 B4 .byte -76
+ 673 0207 C6 .byte -58
+ 674 0208 E8 .byte -24
+ 675 0209 DD .byte -35
+ 676 020a 74 .byte 116
+ 677 020b 1F .byte 31
+ 678 020c 4B .byte 75
+ 679 020d BD .byte -67
+ 680 020e 8B .byte -117
+ 681 020f 8A .byte -118
+ 682 0210 70 .byte 112
+ 683 0211 3E .byte 62
+ 684 0212 B5 .byte -75
+ 685 0213 66 .byte 102
+ 686 0214 48 .byte 72
+ 687 0215 03 .byte 3
+ 688 0216 F6 .byte -10
+ 689 0217 0E .byte 14
+ 690 0218 61 .byte 97
+ 691 0219 35 .byte 53
+ 692 021a 57 .byte 87
+ 693 021b B9 .byte -71
+ 694 021c 86 .byte -122
+ 695 021d C1 .byte -63
+ 696 021e 1D .byte 29
+ 697 021f 9E .byte -98
+ 698 0220 E1 .byte -31
+ 699 0221 F8 .byte -8
+ 700 0222 98 .byte -104
+ 701 0223 11 .byte 17
+ 702 0224 69 .byte 105
+ 703 0225 D9 .byte -39
+ 704 0226 8E .byte -114
+ 705 0227 94 .byte -108
+ 706 0228 9B .byte -101
+ 707 0229 1E .byte 30
+ 708 022a 87 .byte -121
+ 709 022b E9 .byte -23
+ 710 022c CE .byte -50
+ 711 022d 55 .byte 85
+ 712 022e 28 .byte 40
+
GAS LISTING /tmp/ccPaCTqg.s page 30
+
+
+ 713 022f DF .byte -33
+ 714 0230 8C .byte -116
+ 715 0231 A1 .byte -95
+ 716 0232 89 .byte -119
+ 717 0233 0D .byte 13
+ 718 0234 BF .byte -65
+ 719 0235 E6 .byte -26
+ 720 0236 42 .byte 66
+ 721 0237 68 .byte 104
+ 722 0238 41 .byte 65
+ 723 0239 99 .byte -103
+ 724 023a 2D .byte 45
+ 725 023b 0F .byte 15
+ 726 023c B0 .byte -80
+ 727 023d 54 .byte 84
+ 728 023e BB .byte -69
+ 729 023f 16 .byte 22
+ 730 .align 32
+ 731 .type KAESBlockCipherVecAesNiRijndaelInvSBoxV, @object
+ 732 .size KAESBlockCipherVecAesNiRijndaelInvSBoxV, 256
+ 733 KAESBlockCipherVecAesNiRijndaelInvSBoxV:
+ 734 0240 52 .byte 82
+ 735 0241 09 .byte 9
+ 736 0242 6A .byte 106
+ 737 0243 D5 .byte -43
+ 738 0244 30 .byte 48
+ 739 0245 36 .byte 54
+ 740 0246 A5 .byte -91
+ 741 0247 38 .byte 56
+ 742 0248 BF .byte -65
+ 743 0249 40 .byte 64
+ 744 024a A3 .byte -93
+ 745 024b 9E .byte -98
+ 746 024c 81 .byte -127
+ 747 024d F3 .byte -13
+ 748 024e D7 .byte -41
+ 749 024f FB .byte -5
+ 750 0250 7C .byte 124
+ 751 0251 E3 .byte -29
+ 752 0252 39 .byte 57
+ 753 0253 82 .byte -126
+ 754 0254 9B .byte -101
+ 755 0255 2F .byte 47
+ 756 0256 FF .byte -1
+ 757 0257 87 .byte -121
+ 758 0258 34 .byte 52
+ 759 0259 8E .byte -114
+ 760 025a 43 .byte 67
+ 761 025b 44 .byte 68
+ 762 025c C4 .byte -60
+ 763 025d DE .byte -34
+ 764 025e E9 .byte -23
+ 765 025f CB .byte -53
+ 766 0260 54 .byte 84
+ 767 0261 7B .byte 123
+ 768 0262 94 .byte -108
+ 769 0263 32 .byte 50
+
GAS LISTING /tmp/ccPaCTqg.s page 31
+
+
+ 770 0264 A6 .byte -90
+ 771 0265 C2 .byte -62
+ 772 0266 23 .byte 35
+ 773 0267 3D .byte 61
+ 774 0268 EE .byte -18
+ 775 0269 4C .byte 76
+ 776 026a 95 .byte -107
+ 777 026b 0B .byte 11
+ 778 026c 42 .byte 66
+ 779 026d FA .byte -6
+ 780 026e C3 .byte -61
+ 781 026f 4E .byte 78
+ 782 0270 08 .byte 8
+ 783 0271 2E .byte 46
+ 784 0272 A1 .byte -95
+ 785 0273 66 .byte 102
+ 786 0274 28 .byte 40
+ 787 0275 D9 .byte -39
+ 788 0276 24 .byte 36
+ 789 0277 B2 .byte -78
+ 790 0278 76 .byte 118
+ 791 0279 5B .byte 91
+ 792 027a A2 .byte -94
+ 793 027b 49 .byte 73
+ 794 027c 6D .byte 109
+ 795 027d 8B .byte -117
+ 796 027e D1 .byte -47
+ 797 027f 25 .byte 37
+ 798 0280 72 .byte 114
+ 799 0281 F8 .byte -8
+ 800 0282 F6 .byte -10
+ 801 0283 64 .byte 100
+ 802 0284 86 .byte -122
+ 803 0285 68 .byte 104
+ 804 0286 98 .byte -104
+ 805 0287 16 .byte 22
+ 806 0288 D4 .byte -44
+ 807 0289 A4 .byte -92
+ 808 028a 5C .byte 92
+ 809 028b CC .byte -52
+ 810 028c 5D .byte 93
+ 811 028d 65 .byte 101
+ 812 028e B6 .byte -74
+ 813 028f 92 .byte -110
+ 814 0290 6C .byte 108
+ 815 0291 70 .byte 112
+ 816 0292 48 .byte 72
+ 817 0293 50 .byte 80
+ 818 0294 FD .byte -3
+ 819 0295 ED .byte -19
+ 820 0296 B9 .byte -71
+ 821 0297 DA .byte -38
+ 822 0298 5E .byte 94
+ 823 0299 15 .byte 21
+ 824 029a 46 .byte 70
+ 825 029b 57 .byte 87
+ 826 029c A7 .byte -89
+
GAS LISTING /tmp/ccPaCTqg.s page 32
+
+
+ 827 029d 8D .byte -115
+ 828 029e 9D .byte -99
+ 829 029f 84 .byte -124
+ 830 02a0 90 .byte -112
+ 831 02a1 D8 .byte -40
+ 832 02a2 AB .byte -85
+ 833 02a3 00 .byte 0
+ 834 02a4 8C .byte -116
+ 835 02a5 BC .byte -68
+ 836 02a6 D3 .byte -45
+ 837 02a7 0A .byte 10
+ 838 02a8 F7 .byte -9
+ 839 02a9 E4 .byte -28
+ 840 02aa 58 .byte 88
+ 841 02ab 05 .byte 5
+ 842 02ac B8 .byte -72
+ 843 02ad B3 .byte -77
+ 844 02ae 45 .byte 69
+ 845 02af 06 .byte 6
+ 846 02b0 D0 .byte -48
+ 847 02b1 2C .byte 44
+ 848 02b2 1E .byte 30
+ 849 02b3 8F .byte -113
+ 850 02b4 CA .byte -54
+ 851 02b5 3F .byte 63
+ 852 02b6 0F .byte 15
+ 853 02b7 02 .byte 2
+ 854 02b8 C1 .byte -63
+ 855 02b9 AF .byte -81
+ 856 02ba BD .byte -67
+ 857 02bb 03 .byte 3
+ 858 02bc 01 .byte 1
+ 859 02bd 13 .byte 19
+ 860 02be 8A .byte -118
+ 861 02bf 6B .byte 107
+ 862 02c0 3A .byte 58
+ 863 02c1 91 .byte -111
+ 864 02c2 11 .byte 17
+ 865 02c3 41 .byte 65
+ 866 02c4 4F .byte 79
+ 867 02c5 67 .byte 103
+ 868 02c6 DC .byte -36
+ 869 02c7 EA .byte -22
+ 870 02c8 97 .byte -105
+ 871 02c9 F2 .byte -14
+ 872 02ca CF .byte -49
+ 873 02cb CE .byte -50
+ 874 02cc F0 .byte -16
+ 875 02cd B4 .byte -76
+ 876 02ce E6 .byte -26
+ 877 02cf 73 .byte 115
+ 878 02d0 96 .byte -106
+ 879 02d1 AC .byte -84
+ 880 02d2 74 .byte 116
+ 881 02d3 22 .byte 34
+ 882 02d4 E7 .byte -25
+ 883 02d5 AD .byte -83
+
GAS LISTING /tmp/ccPaCTqg.s page 33
+
+
+ 884 02d6 35 .byte 53
+ 885 02d7 85 .byte -123
+ 886 02d8 E2 .byte -30
+ 887 02d9 F9 .byte -7
+ 888 02da 37 .byte 55
+ 889 02db E8 .byte -24
+ 890 02dc 1C .byte 28
+ 891 02dd 75 .byte 117
+ 892 02de DF .byte -33
+ 893 02df 6E .byte 110
+ 894 02e0 47 .byte 71
+ 895 02e1 F1 .byte -15
+ 896 02e2 1A .byte 26
+ 897 02e3 71 .byte 113
+ 898 02e4 1D .byte 29
+ 899 02e5 29 .byte 41
+ 900 02e6 C5 .byte -59
+ 901 02e7 89 .byte -119
+ 902 02e8 6F .byte 111
+ 903 02e9 B7 .byte -73
+ 904 02ea 62 .byte 98
+ 905 02eb 0E .byte 14
+ 906 02ec AA .byte -86
+ 907 02ed 18 .byte 24
+ 908 02ee BE .byte -66
+ 909 02ef 1B .byte 27
+ 910 02f0 FC .byte -4
+ 911 02f1 56 .byte 86
+ 912 02f2 3E .byte 62
+ 913 02f3 4B .byte 75
+ 914 02f4 C6 .byte -58
+ 915 02f5 D2 .byte -46
+ 916 02f6 79 .byte 121
+ 917 02f7 20 .byte 32
+ 918 02f8 9A .byte -102
+ 919 02f9 DB .byte -37
+ 920 02fa C0 .byte -64
+ 921 02fb FE .byte -2
+ 922 02fc 78 .byte 120
+ 923 02fd CD .byte -51
+ 924 02fe 5A .byte 90
+ 925 02ff F4 .byte -12
+ 926 0300 1F .byte 31
+ 927 0301 DD .byte -35
+ 928 0302 A8 .byte -88
+ 929 0303 33 .byte 51
+ 930 0304 88 .byte -120
+ 931 0305 07 .byte 7
+ 932 0306 C7 .byte -57
+ 933 0307 31 .byte 49
+ 934 0308 B1 .byte -79
+ 935 0309 12 .byte 18
+ 936 030a 10 .byte 16
+ 937 030b 59 .byte 89
+ 938 030c 27 .byte 39
+ 939 030d 80 .byte -128
+ 940 030e EC .byte -20
+
GAS LISTING /tmp/ccPaCTqg.s page 34
+
+
+ 941 030f 5F .byte 95
+ 942 0310 60 .byte 96
+ 943 0311 51 .byte 81
+ 944 0312 7F .byte 127
+ 945 0313 A9 .byte -87
+ 946 0314 19 .byte 25
+ 947 0315 B5 .byte -75
+ 948 0316 4A .byte 74
+ 949 0317 0D .byte 13
+ 950 0318 2D .byte 45
+ 951 0319 E5 .byte -27
+ 952 031a 7A .byte 122
+ 953 031b 9F .byte -97
+ 954 031c 93 .byte -109
+ 955 031d C9 .byte -55
+ 956 031e 9C .byte -100
+ 957 031f EF .byte -17
+ 958 0320 A0 .byte -96
+ 959 0321 E0 .byte -32
+ 960 0322 3B .byte 59
+ 961 0323 4D .byte 77
+ 962 0324 AE .byte -82
+ 963 0325 2A .byte 42
+ 964 0326 F5 .byte -11
+ 965 0327 B0 .byte -80
+ 966 0328 C8 .byte -56
+ 967 0329 EB .byte -21
+ 968 032a BB .byte -69
+ 969 032b 3C .byte 60
+ 970 032c 83 .byte -125
+ 971 032d 53 .byte 83
+ 972 032e 99 .byte -103
+ 973 032f 61 .byte 97
+ 974 0330 17 .byte 23
+ 975 0331 2B .byte 43
+ 976 0332 04 .byte 4
+ 977 0333 7E .byte 126
+ 978 0334 BA .byte -70
+ 979 0335 77 .byte 119
+ 980 0336 D6 .byte -42
+ 981 0337 26 .byte 38
+ 982 0338 E1 .byte -31
+ 983 0339 69 .byte 105
+ 984 033a 14 .byte 20
+ 985 033b 63 .byte 99
+ 986 033c 55 .byte 85
+ 987 033d 21 .byte 33
+ 988 033e 0C .byte 12
+ 989 033f 7D .byte 125
+ 990 .align 16
+ 991 .type lo_filter, @object
+ 992 .size lo_filter, 16
+ 993 lo_filter:
+ 994 0340 00 .byte 0
+ 995 0341 FF .byte -1
+ 996 0342 FF .byte -1
+ 997 0343 FF .byte -1
+
GAS LISTING /tmp/ccPaCTqg.s page 35
+
+
+ 998 0344 FF .byte -1
+ 999 0345 FF .byte -1
+ 1000 0346 FF .byte -1
+ 1001 0347 FF .byte -1
+ 1002 0348 FF .byte -1
+ 1003 0349 FF .byte -1
+ 1004 034a FF .byte -1
+ 1005 034b FF .byte -1
+ 1006 034c FF .byte -1
+ 1007 034d FF .byte -1
+ 1008 034e FF .byte -1
+ 1009 034f FF .byte -1
+ 1010 .align 16
+ 1011 .type FF_tab, @object
+ 1012 .size FF_tab, 16
+ 1013 FF_tab:
+ 1014 0350 00 .byte 0
+ 1015 0351 1B .byte 27
+ 1016 0352 36 .byte 54
+ 1017 0353 2D .byte 45
+ 1018 0354 6C .byte 108
+ 1019 0355 77 .byte 119
+ 1020 0356 5A .byte 90
+ 1021 0357 41 .byte 65
+ 1022 0358 00 .byte 0
+ 1023 0359 00 .byte 0
+ 1024 035a 00 .byte 0
+ 1025 035b 00 .byte 0
+ 1026 035c 00 .byte 0
+ 1027 035d 00 .byte 0
+ 1028 035e 00 .byte 0
+ 1029 035f 00 .byte 0
+ 1030 .data
+ 1031 .type KAESBlockCipherVecAesNiFFtable, @object
+ 1032 .size KAESBlockCipherVecAesNiFFtable, 8
+ 1033 KAESBlockCipherVecAesNiFFtable:
+ 1034 0000 00 .byte 0
+ 1035 0001 1B .byte 27
+ 1036 0002 36 .byte 54
+ 1037 0003 2D .byte 45
+ 1038 0004 6C .byte 108
+ 1039 0005 77 .byte 119
+ 1040 0006 5A .byte 90
+ 1041 0007 41 .byte 65
+ 1042 .section .rodata
+ 1043 .align 32
+ 1044 .type KAESBlockCipherVecAesNiRcon, @object
+ 1045 .size KAESBlockCipherVecAesNiRcon, 40
+ 1046 KAESBlockCipherVecAesNiRcon:
+ 1047 0360 01000000 .long 1
+ 1048 0364 02000000 .long 2
+ 1049 0368 04000000 .long 4
+ 1050 036c 08000000 .long 8
+ 1051 0370 10000000 .long 16
+ 1052 0374 20000000 .long 32
+ 1053 0378 40000000 .long 64
+ 1054 037c 80000000 .long 128
+
GAS LISTING /tmp/ccPaCTqg.s page 36
+
+
+ 1055 0380 1B000000 .long 27
+ 1056 0384 36000000 .long 54
+ 1057 .text
+ 1058 .type KAESBlockCipherVecAesNiKeyExpansion128, @function
+ 1059 KAESBlockCipherVecAesNiKeyExpansion128:
+ 1060 .LFB656:
+ 1061 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <krypto/extern.h>
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "ncbi-priv.h"
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "aes-ncbi-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "cipher-priv.h"
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-priv.h"
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/debug.h>
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/out.h>
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/rc.h>
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <byteswap.h>
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <string.h>
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdint.h>
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdlib.h>
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <assert.h>
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <sysalloc.h>
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <cpuid.h>
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VECREG
+
GAS LISTING /tmp/ccPaCTqg.s page 37
+
+
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <v128.h>
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This implements the AES cipher as defined by FIPS-197 from NIST
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Notes on implmentation:
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Byte ordering in AES is not critical but unllike the original implmentation
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * bytes are not re-ordered to a big endian order upon reading them in and this
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * code will expect to run on an Intel/AMD type processor and might have issues
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * on some big endian processors.
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Many functions are written as static inline functions to
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * facilitate GCC type assembly language optimization on various processors
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This implements the Equivalent Inverse Cipher not the Inverse Cipher. In
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * general functions will match those defined in the FIPS-197 document where they
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * do not get optimized away for Intel/AMD XMM registers and AES-NI instructions.
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * C-99 types are used for specific sized types. An unaddornded unsigned type
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * is used for many index type variables to allow the compiler choice in
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * size where size does not matter very much. As these index variables do
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * not go above 16 any size would do but the compiler can choose the size most
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * suited for array subscripting.
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_00 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_01 = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_0F = { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_10 = { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * These functions implment the Advanced Encryption Standard AES as defined
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * in the FIPS (Federal Information Processing Standars Publication 197
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Of Nevember 26, 2001.
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1
+
GAS LISTING /tmp/ccPaCTqg.s page 38
+
+
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Read a blocks worth of bytes into an CipherVec
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * With vector registers it is a single instruction, without them it
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * is a memmove call
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec vec;
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** "movdqu (%[a]),%[s]" : [s] "=x" (vec) : [a] "D" (ain)
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** );
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (&u.bytes, ain, sizeof (u));
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Write a block's worth of bytes out from an CipherVec
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * With vector registers it is a single instruction, without them it
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * is a memmove call
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec rvec = vec;
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** "movdqu %[s],(%[a])" : : [s] "x" (rvec), [a] "D" (rout)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** );
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (rout, &vec, sizeof (vec));
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 39
+
+
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] ^= u2.columns[ix];
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] &= u2.columns[ix];
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+
GAS LISTING /tmp/ccPaCTqg.s page 40
+
+
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] |= u2.columns[ix];
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 + v2;
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] += u2.columns[ix];
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccPaCTqg.s page 41
+
+
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] -= u2.columns[ix];
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 * v2;
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] *= u2.columns[ix];
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 42
+
+
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] /= u2.columns[ix];
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFB128 (dest, mask);
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u out, in, gate;
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 43
+
+
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec sl_mask [9] =
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC },
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8 },
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 },
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0 },
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0 },
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (k <= 8);
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("mask", sl_mask[k]); */
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("v 1", vv); */
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("v 2", vv); */
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("v 3", vv); */
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u vv; /* state and key not countries :) */
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.state = v;
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (v); ++ix)
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("SLLBI %d %x ", k, vv.bytes[ix]);
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.bytes[ix] <<= k;
+
GAS LISTING /tmp/ccPaCTqg.s page 44
+
+
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("%x\n", vv.bytes[ix]);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv.state;
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec sr_mask [9] =
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F },
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F },
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F },
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F },
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 },
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u vv; /* state and key not countries :) */
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.state = v;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (v); ++ix)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("SRLBI %d %x ", k, vv.bytes[ix]);
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.bytes[ix] >>= k;
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("%x\n", vv.bytes[ix]);
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv.state;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 45
+
+
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.4
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The AddRoundKey transformation is a sinple exclusive or of all 128 bits
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * in the current block against a round key. This operation is used in all
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Cipher and EqInvCipher rounds
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * With vector types it is a single operation that with vector registers is
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * a single op-code.
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(VecXor) (state, round_key);
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.2
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS 197 describes the state in column major format
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * while C and assembly programmers tend to think in row major
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The byte order is 0,1,2,3,,...F as shown in the first diagram.
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * ShiftRows() is defined as leaving this state
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 0 | 4 | 8 | C |
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | 5 | 9 | D | 1 |
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+
GAS LISTING /tmp/ccPaCTqg.s page 46
+
+
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | A | E | 2 | 6 |
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | F | 3 | 7 | B |
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec ShiftRowTable
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11 };
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.3.1
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvShiftRows() is defined as leaving this state
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 0 | 4 | 8 | C |
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | D | 1 | 5 | 9 |
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | A | E | 2 | 6 |
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | 7 | B | F | 3 |
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVecByte InvShiftRowTable
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3 };
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 3 | 7 | B | F |
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+
GAS LISTING /tmp/ccPaCTqg.s page 47
+
+
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | 0 | 4 | 8 | C |
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | 1 | 5 | 9 | D |
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | 2 | 6 | A | E |
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec ShiftRowTable
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 3, 0, 1, 2, 7, 4, 5, 6, 11, 8, 9, 10, 15, 12, 13, 14 };
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 1 | 5 | B | D |
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | 2 | 6 | 8 | E |
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | 3 | 7 | 9 | F |
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | 0 | 4 | 8 | C |
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec ShiftRowTable
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12 };
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.1
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+
GAS LISTING /tmp/ccPaCTqg.s page 48
+
+
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SubBytes replaces each byte in a state with a specific byte value from
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * A Rijndael Substitution box
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(RijndaelSBox)[256] =
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB,
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72,
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31,
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2,
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F,
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58,
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F,
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3,
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19,
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B,
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4,
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE,
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B,
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D,
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28,
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB,
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.bytes[ix] = AESBCMEMBER(RijndaelSBox)[u.bytes[ix]];
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SubWord performs the same operation as SubBytes but on
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the four bytes of a column and not a whole state
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+
GAS LISTING /tmp/ccPaCTqg.s page 49
+
+
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESColumn col;
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvSubBytes replaces each byte in a state with a specific byte value from
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * an Inversze Rijndael Substitution box. That is InvSubBytes undoes SubBytes
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint8_t AESBCMEMBER(RijndaelInvSBox)[256] =
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7,
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9,
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3,
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1,
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6,
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D,
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45,
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A,
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6,
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF,
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE,
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A,
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC,
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C,
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99,
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C,
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.bytes[ix] = AESBCMEMBER(RijndaelInvSBox)[u.bytes[ix]];
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 50
+
+
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelSBoxV)[16] =
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x7
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x1
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x7
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x8
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xC
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x7
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xD
+ 806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x7
+ 807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x0
+ 808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8
+ 809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9
+ 810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xD
+ 811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x1
+ 812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelInvSBoxV)[16] =
+ 816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
+ 818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xF
+ 819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xC
+ 820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4
+ 821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x2
+ 822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x9
+ 823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x8
+ 824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x0
+ 825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6
+ 826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x7
+ 827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6
+ 828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1
+ 829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF
+ 830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5
+ 831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xE
+ 832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x6
+ 833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7
+ 834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec lo_filter = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ 840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec lo, hi, tmp, out;
+
GAS LISTING /tmp/ccPaCTqg.s page 51
+
+
+ 849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("state", state); */
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("lo", lo); */
+ 856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("out", out); */
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("out", out); */
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelSBoxV));
+ 894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelInvSBoxV));
+ 905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccPaCTqg.s page 52
+
+
+ 906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.3
+ 910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * there are no psllb or psrlb instructions so shift words not bytes
+ 914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * and then cut off bits that would have been zeroed if there were
+ 915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * such instructions
+ 916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec FF_tab =
+ 920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x1B, 0x36, 0x2D, 0x6C, 0x77, 0x5A, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec sl, sr;
+ 930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (bits <= 8);
+ 932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(VecXor)(sl, sr);
+ 940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (CipherVec state)
+ 945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (register CipherVec state)
+ 949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 1);
+ 953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 53
+
+
+ 963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 2);
+ 969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 3);
+ 985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static AESByte AESBCMEMBER(FFtable)[] = { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41 };
+ 992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+ 996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+1000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+1002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+1013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 54
+
+
+1020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+1024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+1035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec c0, c1, c2, c3;
+1046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(RotBytesLeft) (state);
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c2 = AESBCMEMBER(RotBytesLeft) (c1);
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c3 = AESBCMEMBER(RotBytesLeft) (c2);
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = AESBCMEMBER(VecXor) (state, c1);
+1051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = AESBCMEMBER(FF_mul_02) (c0);
+1055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u tmp;
+1058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp.state = c0;
+1061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof tmp; ++ix)
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+1064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = tmp.state;
+1065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c2);
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c3);
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c0);
+1070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return c1;
+1072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* obsoleted
+1073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u in, out;
+1074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = state;
+
GAS LISTING /tmp/ccPaCTqg.s page 55
+
+
+1077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (out.bytes); ix += 4)
+1079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s0 = in.bytes[ix + 0];
+1081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s1 = in.bytes[ix + 1];
+1082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s2 = in.bytes[ix + 2];
+1083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s3 = in.bytes[ix + 3];
+1084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 0] = s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1);
+1086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 1] = s0 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2);
+1087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 2] = s0 ^ s1 ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3);
+1088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 3] = s0 ^ s1 ^ s2 ^ AESBCMEMBER(FFmul02)(s3 ^ s0);
+1089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+1091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+1102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESIMC (state);
+1103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec r1, r2, r3, f2, f4, f8;
+1105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r1 = AESBCMEMBER(RotBytesLeft) (state);
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r2 = AESBCMEMBER(RotBytesLeft) (r1);
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r3 = AESBCMEMBER(RotBytesLeft) (r2);
+1109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(VecXor) (state, r2);
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(VecXor) (state, r1);
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (r2, r3);
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (f8, r1);
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (f8, f2);
+1115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(FF_mul) (f2,1);
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(FF_mul) (f4,2);
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(FF_mul) (f8,3);
+1121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u fu2, fu4, fu8;
+1124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.state = f2;
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.state = f4;
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.state = f8;
+1129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof fu2; ++ix)
+1131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+
GAS LISTING /tmp/ccPaCTqg.s page 56
+
+
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+1135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = fu2.state;
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = fu4.state;
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = fu8.state;
+1139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f2);
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f4);
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f8);
+1145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+1149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u in, out;
+1151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = state;
+1154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (out.bytes); ix += AES_Nb)
+1156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s0 = in.bytes[ix + 0];
+1158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s1 = in.bytes[ix + 1];
+1159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s2 = in.bytes[ix + 2];
+1160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s3 = in.bytes[ix + 3];
+1161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord p, q;
+1162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** q = AESBCMEMBER(FFmul08)(s0 ^ s1 ^ s2 ^ s3);
+1164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** p = q ^ AESBCMEMBER(FFmul04)(s0 ^ s2);
+1165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** q = q ^ AESBCMEMBER(FFmul04)(s1 ^ s3);
+1166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 0] = s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1) ^ p;
+1168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 1] = s0 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2) ^ q;
+1169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 2] = s0 ^ s1 ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3) ^ p;
+1170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 3] = s0 ^ s1 ^ s2 ^ AESBCMEMBER(FFmul02)(s3 ^ s0) ^ q;
+1171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+1174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+1179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.2
+1180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+1182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(Rcon)[] = {
+1183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00000001, 0x00000002, 0x00000004, 0x00000008,
+1184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00000010, 0x00000020, 0x00000040, 0x00000080,
+1185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x0000001B, 0x00000036
+1186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+1187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+
GAS LISTING /tmp/ccPaCTqg.s page 57
+
+
+1191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+1197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * not portable to architectures which require aligned multibyte reads
+1209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but as this only runs on Intel at this point it is fine for now
+1210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return *(AESWord*)pointer;
+1212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion) (CipherVec * r, const AESByte * key, unsigned Nr, unsigned Nk)
+1218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord * w = (AESWord*)r;
+1220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESWord * pRcon;
+1221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix, limit;
+1222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("%s (w (%p), key (%p), Nr (%u) Nk (%u))\n", __func__, w, key, Nr, Nk));
+1226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < Nk; ++ix)
+1228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("i (dec): %u\n", ix));
+1230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(GetWord) (key+(ix*4));
+1231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** w[ix] = temp;
+1232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("kw[%i]: %0.8x\n", ix, temp));
+1233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** limit = AES_Nb * (Nr + 1);
+1236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** pRcon = AESBCMEMBER(Rcon);
+1237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("Nk (%u) Nr (%u) limit (%u)\n", Nk, Nr, limit));
+1238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (; ix < limit; ++ix)
+1240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("i (dec): %u %u\n", ix, limit));
+1243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* temp should already be set */
+1245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("temp: %0.8x\n", temp));
+1246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ((ix % Nk) == 0)
+1247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+
GAS LISTING /tmp/ccPaCTqg.s page 58
+
+
+1248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+1249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after RotWord: %0.8x \n", temp));
+1250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord) (temp);
+1251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("Rcon [i/Nk]: %0.8x\n", *pRcon));
+1253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= *pRcon++;
+1254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after XOR with Rcon: %0.8x \n", temp));
+1255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ((Nk > 6) && ((ix % Nk) == 4))
+1257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord) (temp);
+1259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("w[i-Nk]: %0.8x\n", w[ix-Nk]));
+1262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= w [ix - Nk];
+1263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("kw[ix]: %0.8x\n", temp));
+1264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** w [ix] = temp;
+1265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec mask = { 8, 9, 10, 11, 12, 13, 14, 15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 59
+
+
+1305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[2];
+1307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+1308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = 0;
+1309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = 0;
+1310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4,
+1324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+1330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+1331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+1332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+1333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W3:W3:W3:W3
+1344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0xFF);
+1354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+
GAS LISTING /tmp/ccPaCTqg.s page 60
+
+
+1362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W2:W2:W2:W2
+1372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0xAA);
+1382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+1387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[2];
+1388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[2];
+1389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W2:W2:W2:W2
+1400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0x55);
+1410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[1];
+1415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+1416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[1];
+1417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+
GAS LISTING /tmp/ccPaCTqg.s page 61
+
+
+1419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W0:W0:W0
+1428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0x00);
+1438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[0];
+1443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[0];
+1444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+1445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X0:X1:X2:X3
+1454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:X0:X1
+1457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_SHUFPD (w, x, 0x00);
+1467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u ww;
+1469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u xx;
+1470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+1473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+
GAS LISTING /tmp/ccPaCTqg.s page 62
+
+
+1476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+1478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X0:X1:X2:X3
+1486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X2:X3:W0:W1
+1489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_SHUFPD (w, x, 0x01);
+1499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u ww;
+1501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u xx;
+1502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+1505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[0] = ww.columns[2];
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[1] = ww.columns[3];
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+1510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+1512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X0:X1:X2:X3
+1520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X2:X3:W0:W1
+1523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_SHUFPD (v0, v1, 0x02);
+
GAS LISTING /tmp/ccPaCTqg.s page 63
+
+
+1533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u t0;
+1535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u t1;
+1536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.state = v0;
+1538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t1.state = v1;
+1539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[2] = t0.columns[0];
+1541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[3] = t0.columns[1];
+1542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[0] = t1.columns[2];
+1543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[1] = t1.columns[3];
+1544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return t0.state;
+1546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W0^W1:W0^W1^W2:W0^W1^W2^W3
+1556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+1566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+1572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] ^= temp.columns[0];
+1578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] ^= temp.columns[1];
+1579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] ^= temp.columns[2];
+1580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 64
+
+
+1590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_AESKEYGENASSIST (state, rcon);
+1595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u in;
+1597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u out;
+1598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord rconw;
+1599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+1601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = state;
+1602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[0] = AESBCMEMBER(SubWord)(in.columns[1]);
+1604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[1] = AESBCMEMBER(RotWord)(out.columns[0]) ^ rconw;
+1605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[2] = AESBCMEMBER(SubWord)(in.columns[3]);
+1606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[3] = AESBCMEMBER(RotWord)(out.columns[2]) ^ rconw;
+1607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+1609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+1623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(StateDupColumn1) (tmp);
+1624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord rconw;
+1627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+1634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+1637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+
GAS LISTING /tmp/ccPaCTqg.s page 65
+
+
+1647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, 0);
+1651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(StateDupColumn2) (tmp);
+1652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+1658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+1661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+1675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(StateDupColumn3) (tmp);
+1676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec vrcon;
+1679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp;
+1680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+1691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #elif USE_VEC && 1
+1695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp;
+1696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [3] = rcon;
+1699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+1701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+
GAS LISTING /tmp/ccPaCTqg.s page 66
+
+
+1704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, u.state);
+1705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+1709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord rconw;
+1713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+1716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+1717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+1718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+1719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+1720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+1723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * round_keys, const AESByte * key)
+1731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 1062 .loc 3 1731 0
+ 1063 .cfi_startproc
+ 1064 004b 55 pushq %rbp
+ 1065 .LCFI12:
+ 1066 .cfi_def_cfa_offset 16
+ 1067 004c 4889E5 movq %rsp, %rbp
+ 1068 .cfi_offset 6, -16
+ 1069 .LCFI13:
+ 1070 .cfi_def_cfa_register 6
+ 1071 004f 4881EC68 subq $3944, %rsp
+ 1071 0F0000
+ 1072 0056 4889BD78 movq %rdi, -3720(%rbp)
+ 1072 F1FFFF
+ 1073 005d 4889B570 movq %rsi, -3728(%rbp)
+ 1073 F1FFFF
+ 1074 .loc 3 1731 0
+ 1075 0064 488B8570 movq -3728(%rbp), %rax
+ 1075 F1FFFF
+ 1076 006b 488985A0 movq %rax, -3680(%rbp)
+ 1076 F1FFFF
+ 1077 .LBB284:
+ 1078 .LBB285:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 1079 .loc 3 126 0
+ 1080 0072 488B85A0 movq -3680(%rbp), %rax
+ 1080 F1FFFF
+ 1081 0079 4889C7 movq %rax, %rdi
+ 1082 #APP
+ 1083 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+
GAS LISTING /tmp/ccPaCTqg.s page 67
+
+
+ 1084 movdqu (%rdi),%xmm0
+ 1085 # 0 "" 2
+ 1086 #NO_APP
+ 1087 0080 660F7F85 movdqa %xmm0, -4064(%rbp)
+ 1087 20F0FFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 1088 .loc 3 129 0
+ 1089 0088 660F6F85 movdqa -4064(%rbp), %xmm0
+ 1089 20F0FFFF
+ 1090 .LBE285:
+ 1091 .LBE284:
+1732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec state;
+1733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec kgastate;
+1734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(StateIn) (key);
+ 1092 .loc 3 1735 0
+ 1093 0090 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1093 80F1FFFF
+1736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = state;
+ 1094 .loc 3 1736 0
+ 1095 0098 488B8578 movq -3720(%rbp), %rax
+ 1095 F1FFFF
+ 1096 009f F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1096 80F1FFFF
+ 1097 00a7 F30F7F00 movdqu %xmm0, (%rax)
+ 1098 00ab F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1098 80F1FFFF
+ 1099 00b3 F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 1099 B0F1FFFF
+ 1100 .LBB286:
+ 1101 .LBB287:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 1102 .loc 3 1673 0
+ 1103 00bb F30F6F85 movdqu -3664(%rbp), %xmm0
+ 1103 B0F1FFFF
+ 1104 00c3 660F7F85 movdqa %xmm0, -4048(%rbp)
+ 1104 30F0FFFF
+ 1105 00cb 660F6F85 movdqa -4048(%rbp), %xmm0
+ 1105 30F0FFFF
+ 1106 00d3 F30F7F85 movdqu %xmm0, -3632(%rbp)
+ 1106 D0F1FFFF
+ 1107 .LBB288:
+ 1108 .LBB289:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1109 .loc 1 852 0
+ 1110 00db F30F6F85 movdqu -3632(%rbp), %xmm0
+ 1110 D0F1FFFF
+ 1111 00e3 660F3ADF aeskeygenassist $1, %xmm0, %xmm0
+ 1111 C001
+ 1112 .LBE289:
+ 1113 .LBE288:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1114 .loc 3 1674 0
+ 1115 00e9 660F7F85 movdqa %xmm0, -4048(%rbp)
+ 1115 30F0FFFF
+ 1116 00f1 660F6F85 movdqa -4048(%rbp), %xmm0
+ 1116 30F0FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 68
+
+
+ 1117 00f9 F30F7F85 movdqu %xmm0, -3616(%rbp)
+ 1117 E0F1FFFF
+ 1118 0101 F30F6F85 movdqu -3616(%rbp), %xmm0
+ 1118 E0F1FFFF
+ 1119 0109 F30F7F85 movdqu %xmm0, -3584(%rbp)
+ 1119 00F2FFFF
+ 1120 .LBB290:
+ 1121 .LBB291:
+ 1122 .LBB292:
+ 1123 .LBB293:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1124 .loc 1 450 0
+ 1125 0111 F30F6F85 movdqu -3584(%rbp), %xmm0
+ 1125 00F2FFFF
+ 1126 0119 660F70C0 pshufd $255, %xmm0, %xmm0
+ 1126 FF
+ 1127 .LBE293:
+ 1128 .LBE292:
+ 1129 .LBE291:
+ 1130 .LBE290:
+ 1131 .LBE287:
+ 1132 .LBE286:
+1737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE128(rcon,offset) \
+1739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** kgastate = AESBCMEMBER(AesKeyGenAssistColumn3) (state, rcon); \
+1740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftXorColumns) (state); \
+1741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= kgastate; \
+1742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[offset] = state
+1743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x01,1);
+ 1133 .loc 3 1744 0
+ 1134 011e F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 1134 90F1FFFF
+ 1135 0126 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1135 80F1FFFF
+ 1136 012e F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 1136 10F2FFFF
+ 1137 .LBB294:
+ 1138 .LBB295:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 1139 .loc 3 1565 0
+ 1140 0136 F30F6F85 movdqu -3568(%rbp), %xmm0
+ 1140 10F2FFFF
+ 1141 013e 660F7F85 movdqa %xmm0, -4032(%rbp)
+ 1141 40F0FFFF
+ 1142 0146 660F6F85 movdqa -4032(%rbp), %xmm0
+ 1142 40F0FFFF
+ 1143 014e F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 1143 20F2FFFF
+ 1144 .LBB296:
+ 1145 .LBB297:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1146 .loc 3 1278 0
+ 1147 0156 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1147 00000000
+ 1148 015e F30F6F8D movdqu -3552(%rbp), %xmm1
+ 1148 20F2FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 69
+
+
+ 1149 0166 F30F7F8D movdqu %xmm1, -3520(%rbp)
+ 1149 40F2FFFF
+ 1150 016e F30F7F85 movdqu %xmm0, -3536(%rbp)
+ 1150 30F2FFFF
+ 1151 0176 F30F6F85 movdqu -3520(%rbp), %xmm0
+ 1151 40F2FFFF
+ 1152 017e F30F7F85 movdqu %xmm0, -3488(%rbp)
+ 1152 60F2FFFF
+ 1153 0186 F30F6F85 movdqu -3536(%rbp), %xmm0
+ 1153 30F2FFFF
+ 1154 018e F30F7F85 movdqu %xmm0, -3504(%rbp)
+ 1154 50F2FFFF
+ 1155 .LBB298:
+ 1156 .LBB299:
+ 1157 .LBB300:
+ 1158 .LBB301:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1159 .loc 1 529 0
+ 1160 0196 F30F6F8D movdqu -3504(%rbp), %xmm1
+ 1160 50F2FFFF
+ 1161 019e F30F6F85 movdqu -3488(%rbp), %xmm0
+ 1161 60F2FFFF
+ 1162 01a6 660F3800 pshufb %xmm1, %xmm0
+ 1162 C1
+ 1163 .LBE301:
+ 1164 .LBE300:
+ 1165 .LBE299:
+ 1166 .LBE298:
+ 1167 .LBE297:
+ 1168 .LBE296:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1169 .loc 3 1567 0
+ 1170 01ab 660F7F85 movdqa %xmm0, -4032(%rbp)
+ 1170 40F0FFFF
+ 1171 01b3 660F6F85 movdqa -4032(%rbp), %xmm0
+ 1171 40F0FFFF
+ 1172 01bb 660FEF85 pxor -3568(%rbp), %xmm0
+ 1172 10F2FFFF
+ 1173 01c3 F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 1173 10F2FFFF
+ 1174 01cb 660F6F85 movdqa -4032(%rbp), %xmm0
+ 1174 40F0FFFF
+ 1175 01d3 F30F7F85 movdqu %xmm0, -3472(%rbp)
+ 1175 70F2FFFF
+ 1176 .LBB302:
+ 1177 .LBB303:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1178 .loc 3 1278 0
+ 1179 01db 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1179 00000000
+ 1180 01e3 F30F6F8D movdqu -3472(%rbp), %xmm1
+ 1180 70F2FFFF
+ 1181 01eb F30F7F8D movdqu %xmm1, -3440(%rbp)
+ 1181 90F2FFFF
+ 1182 01f3 F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 1182 80F2FFFF
+ 1183 01fb F30F6F85 movdqu -3440(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 70
+
+
+ 1183 90F2FFFF
+ 1184 0203 F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 1184 B0F2FFFF
+ 1185 020b F30F6F85 movdqu -3456(%rbp), %xmm0
+ 1185 80F2FFFF
+ 1186 0213 F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 1186 A0F2FFFF
+ 1187 .LBB304:
+ 1188 .LBB305:
+ 1189 .LBB306:
+ 1190 .LBB307:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1191 .loc 1 529 0
+ 1192 021b F30F6F8D movdqu -3424(%rbp), %xmm1
+ 1192 A0F2FFFF
+ 1193 0223 F30F6F85 movdqu -3408(%rbp), %xmm0
+ 1193 B0F2FFFF
+ 1194 022b 660F3800 pshufb %xmm1, %xmm0
+ 1194 C1
+ 1195 .LBE307:
+ 1196 .LBE306:
+ 1197 .LBE305:
+ 1198 .LBE304:
+ 1199 .LBE303:
+ 1200 .LBE302:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1201 .loc 3 1568 0
+ 1202 0230 660F7F85 movdqa %xmm0, -4032(%rbp)
+ 1202 40F0FFFF
+ 1203 0238 660F6F85 movdqa -4032(%rbp), %xmm0
+ 1203 40F0FFFF
+ 1204 0240 660FEF85 pxor -3568(%rbp), %xmm0
+ 1204 10F2FFFF
+ 1205 0248 F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 1205 10F2FFFF
+ 1206 0250 660F6F85 movdqa -4032(%rbp), %xmm0
+ 1206 40F0FFFF
+ 1207 0258 F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 1207 C0F2FFFF
+ 1208 .LBB308:
+ 1209 .LBB309:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1210 .loc 3 1278 0
+ 1211 0260 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1211 00000000
+ 1212 0268 F30F6F8D movdqu -3392(%rbp), %xmm1
+ 1212 C0F2FFFF
+ 1213 0270 F30F7F8D movdqu %xmm1, -3360(%rbp)
+ 1213 E0F2FFFF
+ 1214 0278 F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 1214 D0F2FFFF
+ 1215 0280 F30F6F85 movdqu -3360(%rbp), %xmm0
+ 1215 E0F2FFFF
+ 1216 0288 F30F7F85 movdqu %xmm0, -3328(%rbp)
+ 1216 00F3FFFF
+ 1217 0290 F30F6F85 movdqu -3376(%rbp), %xmm0
+ 1217 D0F2FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 71
+
+
+ 1218 0298 F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 1218 F0F2FFFF
+ 1219 .LBB310:
+ 1220 .LBB311:
+ 1221 .LBB312:
+ 1222 .LBB313:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1223 .loc 1 529 0
+ 1224 02a0 F30F6F8D movdqu -3344(%rbp), %xmm1
+ 1224 F0F2FFFF
+ 1225 02a8 F30F6F85 movdqu -3328(%rbp), %xmm0
+ 1225 00F3FFFF
+ 1226 02b0 660F3800 pshufb %xmm1, %xmm0
+ 1226 C1
+ 1227 .LBE313:
+ 1228 .LBE312:
+ 1229 .LBE311:
+ 1230 .LBE310:
+ 1231 .LBE309:
+ 1232 .LBE308:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1233 .loc 3 1569 0
+ 1234 02b5 660F7F85 movdqa %xmm0, -4032(%rbp)
+ 1234 40F0FFFF
+ 1235 02bd 660F6F85 movdqa -4032(%rbp), %xmm0
+ 1235 40F0FFFF
+ 1236 02c5 660FEF85 pxor -3568(%rbp), %xmm0
+ 1236 10F2FFFF
+ 1237 02cd F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 1237 10F2FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1238 .loc 3 1571 0
+ 1239 02d5 F30F6F85 movdqu -3568(%rbp), %xmm0
+ 1239 10F2FFFF
+ 1240 .LBE295:
+ 1241 .LBE294:
+ 1242 .loc 3 1744 0
+ 1243 02dd F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1243 80F1FFFF
+ 1244 02e5 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 1244 90F1FFFF
+ 1245 02ed F30F6F8D movdqu -3712(%rbp), %xmm1
+ 1245 80F1FFFF
+ 1246 02f5 660FEFC1 pxor %xmm1, %xmm0
+ 1247 02f9 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1247 80F1FFFF
+ 1248 0301 488B8578 movq -3720(%rbp), %rax
+ 1248 F1FFFF
+ 1249 0308 4883C010 addq $16, %rax
+ 1250 030c F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1250 80F1FFFF
+ 1251 0314 F30F7F00 movdqu %xmm0, (%rax)
+ 1252 0318 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1252 80F1FFFF
+ 1253 0320 F30F7F85 movdqu %xmm0, -3296(%rbp)
+ 1253 20F3FFFF
+ 1254 .LBB314:
+
GAS LISTING /tmp/ccPaCTqg.s page 72
+
+
+ 1255 .LBB315:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 1256 .loc 3 1673 0
+ 1257 0328 F30F6F85 movdqu -3296(%rbp), %xmm0
+ 1257 20F3FFFF
+ 1258 0330 660F7F85 movdqa %xmm0, -4016(%rbp)
+ 1258 50F0FFFF
+ 1259 0338 660F6F85 movdqa -4016(%rbp), %xmm0
+ 1259 50F0FFFF
+ 1260 0340 F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 1260 40F3FFFF
+ 1261 .LBB316:
+ 1262 .LBB317:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1263 .loc 1 852 0
+ 1264 0348 F30F6F85 movdqu -3264(%rbp), %xmm0
+ 1264 40F3FFFF
+ 1265 0350 660F3ADF aeskeygenassist $2, %xmm0, %xmm0
+ 1265 C002
+ 1266 .LBE317:
+ 1267 .LBE316:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1268 .loc 3 1674 0
+ 1269 0356 660F7F85 movdqa %xmm0, -4016(%rbp)
+ 1269 50F0FFFF
+ 1270 035e 660F6F85 movdqa -4016(%rbp), %xmm0
+ 1270 50F0FFFF
+ 1271 0366 F30F7F85 movdqu %xmm0, -3248(%rbp)
+ 1271 50F3FFFF
+ 1272 036e F30F6F85 movdqu -3248(%rbp), %xmm0
+ 1272 50F3FFFF
+ 1273 0376 F30F7F85 movdqu %xmm0, -3216(%rbp)
+ 1273 70F3FFFF
+ 1274 .LBB318:
+ 1275 .LBB319:
+ 1276 .LBB320:
+ 1277 .LBB321:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1278 .loc 1 450 0
+ 1279 037e F30F6F85 movdqu -3216(%rbp), %xmm0
+ 1279 70F3FFFF
+ 1280 0386 660F70C0 pshufd $255, %xmm0, %xmm0
+ 1280 FF
+ 1281 .LBE321:
+ 1282 .LBE320:
+ 1283 .LBE319:
+ 1284 .LBE318:
+ 1285 .LBE315:
+ 1286 .LBE314:
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x02,2);
+ 1287 .loc 3 1745 0
+ 1288 038b F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 1288 90F1FFFF
+ 1289 0393 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1289 80F1FFFF
+ 1290 039b F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 1290 80F3FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 73
+
+
+ 1291 .LBB322:
+ 1292 .LBB323:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 1293 .loc 3 1565 0
+ 1294 03a3 F30F6F85 movdqu -3200(%rbp), %xmm0
+ 1294 80F3FFFF
+ 1295 03ab 660F7F85 movdqa %xmm0, -4000(%rbp)
+ 1295 60F0FFFF
+ 1296 03b3 660F6F85 movdqa -4000(%rbp), %xmm0
+ 1296 60F0FFFF
+ 1297 03bb F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 1297 90F3FFFF
+ 1298 .LBB324:
+ 1299 .LBB325:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1300 .loc 3 1278 0
+ 1301 03c3 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1301 00000000
+ 1302 03cb F30F6F8D movdqu -3184(%rbp), %xmm1
+ 1302 90F3FFFF
+ 1303 03d3 F30F7F8D movdqu %xmm1, -3152(%rbp)
+ 1303 B0F3FFFF
+ 1304 03db F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 1304 A0F3FFFF
+ 1305 03e3 F30F6F85 movdqu -3152(%rbp), %xmm0
+ 1305 B0F3FFFF
+ 1306 03eb F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 1306 D0F3FFFF
+ 1307 03f3 F30F6F85 movdqu -3168(%rbp), %xmm0
+ 1307 A0F3FFFF
+ 1308 03fb F30F7F85 movdqu %xmm0, -3136(%rbp)
+ 1308 C0F3FFFF
+ 1309 .LBB326:
+ 1310 .LBB327:
+ 1311 .LBB328:
+ 1312 .LBB329:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1313 .loc 1 529 0
+ 1314 0403 F30F6F8D movdqu -3136(%rbp), %xmm1
+ 1314 C0F3FFFF
+ 1315 040b F30F6F85 movdqu -3120(%rbp), %xmm0
+ 1315 D0F3FFFF
+ 1316 0413 660F3800 pshufb %xmm1, %xmm0
+ 1316 C1
+ 1317 .LBE329:
+ 1318 .LBE328:
+ 1319 .LBE327:
+ 1320 .LBE326:
+ 1321 .LBE325:
+ 1322 .LBE324:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1323 .loc 3 1567 0
+ 1324 0418 660F7F85 movdqa %xmm0, -4000(%rbp)
+ 1324 60F0FFFF
+ 1325 0420 660F6F85 movdqa -4000(%rbp), %xmm0
+ 1325 60F0FFFF
+ 1326 0428 660FEF85 pxor -3200(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 74
+
+
+ 1326 80F3FFFF
+ 1327 0430 F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 1327 80F3FFFF
+ 1328 0438 660F6F85 movdqa -4000(%rbp), %xmm0
+ 1328 60F0FFFF
+ 1329 0440 F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 1329 E0F3FFFF
+ 1330 .LBB330:
+ 1331 .LBB331:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1332 .loc 3 1278 0
+ 1333 0448 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1333 00000000
+ 1334 0450 F30F6F8D movdqu -3104(%rbp), %xmm1
+ 1334 E0F3FFFF
+ 1335 0458 F30F7F8D movdqu %xmm1, -3072(%rbp)
+ 1335 00F4FFFF
+ 1336 0460 F30F7F85 movdqu %xmm0, -3088(%rbp)
+ 1336 F0F3FFFF
+ 1337 0468 F30F6F85 movdqu -3072(%rbp), %xmm0
+ 1337 00F4FFFF
+ 1338 0470 F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 1338 20F4FFFF
+ 1339 0478 F30F6F85 movdqu -3088(%rbp), %xmm0
+ 1339 F0F3FFFF
+ 1340 0480 F30F7F85 movdqu %xmm0, -3056(%rbp)
+ 1340 10F4FFFF
+ 1341 .LBB332:
+ 1342 .LBB333:
+ 1343 .LBB334:
+ 1344 .LBB335:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1345 .loc 1 529 0
+ 1346 0488 F30F6F8D movdqu -3056(%rbp), %xmm1
+ 1346 10F4FFFF
+ 1347 0490 F30F6F85 movdqu -3040(%rbp), %xmm0
+ 1347 20F4FFFF
+ 1348 0498 660F3800 pshufb %xmm1, %xmm0
+ 1348 C1
+ 1349 .LBE335:
+ 1350 .LBE334:
+ 1351 .LBE333:
+ 1352 .LBE332:
+ 1353 .LBE331:
+ 1354 .LBE330:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1355 .loc 3 1568 0
+ 1356 049d 660F7F85 movdqa %xmm0, -4000(%rbp)
+ 1356 60F0FFFF
+ 1357 04a5 660F6F85 movdqa -4000(%rbp), %xmm0
+ 1357 60F0FFFF
+ 1358 04ad 660FEF85 pxor -3200(%rbp), %xmm0
+ 1358 80F3FFFF
+ 1359 04b5 F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 1359 80F3FFFF
+ 1360 04bd 660F6F85 movdqa -4000(%rbp), %xmm0
+ 1360 60F0FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 75
+
+
+ 1361 04c5 F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 1361 30F4FFFF
+ 1362 .LBB336:
+ 1363 .LBB337:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1364 .loc 3 1278 0
+ 1365 04cd 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1365 00000000
+ 1366 04d5 F30F6F8D movdqu -3024(%rbp), %xmm1
+ 1366 30F4FFFF
+ 1367 04dd F30F7F8D movdqu %xmm1, -2992(%rbp)
+ 1367 50F4FFFF
+ 1368 04e5 F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 1368 40F4FFFF
+ 1369 04ed F30F6F85 movdqu -2992(%rbp), %xmm0
+ 1369 50F4FFFF
+ 1370 04f5 F30F7F85 movdqu %xmm0, -2960(%rbp)
+ 1370 70F4FFFF
+ 1371 04fd F30F6F85 movdqu -3008(%rbp), %xmm0
+ 1371 40F4FFFF
+ 1372 0505 F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 1372 60F4FFFF
+ 1373 .LBB338:
+ 1374 .LBB339:
+ 1375 .LBB340:
+ 1376 .LBB341:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1377 .loc 1 529 0
+ 1378 050d F30F6F8D movdqu -2976(%rbp), %xmm1
+ 1378 60F4FFFF
+ 1379 0515 F30F6F85 movdqu -2960(%rbp), %xmm0
+ 1379 70F4FFFF
+ 1380 051d 660F3800 pshufb %xmm1, %xmm0
+ 1380 C1
+ 1381 .LBE341:
+ 1382 .LBE340:
+ 1383 .LBE339:
+ 1384 .LBE338:
+ 1385 .LBE337:
+ 1386 .LBE336:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1387 .loc 3 1569 0
+ 1388 0522 660F7F85 movdqa %xmm0, -4000(%rbp)
+ 1388 60F0FFFF
+ 1389 052a 660F6F85 movdqa -4000(%rbp), %xmm0
+ 1389 60F0FFFF
+ 1390 0532 660FEF85 pxor -3200(%rbp), %xmm0
+ 1390 80F3FFFF
+ 1391 053a F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 1391 80F3FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1392 .loc 3 1571 0
+ 1393 0542 F30F6F85 movdqu -3200(%rbp), %xmm0
+ 1393 80F3FFFF
+ 1394 .LBE323:
+ 1395 .LBE322:
+ 1396 .loc 3 1745 0
+
GAS LISTING /tmp/ccPaCTqg.s page 76
+
+
+ 1397 054a F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1397 80F1FFFF
+ 1398 0552 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 1398 90F1FFFF
+ 1399 055a F30F6F8D movdqu -3712(%rbp), %xmm1
+ 1399 80F1FFFF
+ 1400 0562 660FEFC1 pxor %xmm1, %xmm0
+ 1401 0566 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1401 80F1FFFF
+ 1402 056e 488B8578 movq -3720(%rbp), %rax
+ 1402 F1FFFF
+ 1403 0575 4883C020 addq $32, %rax
+ 1404 0579 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1404 80F1FFFF
+ 1405 0581 F30F7F00 movdqu %xmm0, (%rax)
+ 1406 0585 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1406 80F1FFFF
+ 1407 058d F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 1407 90F4FFFF
+ 1408 .LBB342:
+ 1409 .LBB343:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 1410 .loc 3 1673 0
+ 1411 0595 F30F6F85 movdqu -2928(%rbp), %xmm0
+ 1411 90F4FFFF
+ 1412 059d 660F7F85 movdqa %xmm0, -3984(%rbp)
+ 1412 70F0FFFF
+ 1413 05a5 660F6F85 movdqa -3984(%rbp), %xmm0
+ 1413 70F0FFFF
+ 1414 05ad F30F7F85 movdqu %xmm0, -2896(%rbp)
+ 1414 B0F4FFFF
+ 1415 .LBB344:
+ 1416 .LBB345:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1417 .loc 1 852 0
+ 1418 05b5 F30F6F85 movdqu -2896(%rbp), %xmm0
+ 1418 B0F4FFFF
+ 1419 05bd 660F3ADF aeskeygenassist $4, %xmm0, %xmm0
+ 1419 C004
+ 1420 .LBE345:
+ 1421 .LBE344:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1422 .loc 3 1674 0
+ 1423 05c3 660F7F85 movdqa %xmm0, -3984(%rbp)
+ 1423 70F0FFFF
+ 1424 05cb 660F6F85 movdqa -3984(%rbp), %xmm0
+ 1424 70F0FFFF
+ 1425 05d3 F30F7F85 movdqu %xmm0, -2880(%rbp)
+ 1425 C0F4FFFF
+ 1426 05db F30F6F85 movdqu -2880(%rbp), %xmm0
+ 1426 C0F4FFFF
+ 1427 05e3 F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 1427 E0F4FFFF
+ 1428 .LBB346:
+ 1429 .LBB347:
+ 1430 .LBB348:
+ 1431 .LBB349:
+
GAS LISTING /tmp/ccPaCTqg.s page 77
+
+
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1432 .loc 1 450 0
+ 1433 05eb F30F6F85 movdqu -2848(%rbp), %xmm0
+ 1433 E0F4FFFF
+ 1434 05f3 660F70C0 pshufd $255, %xmm0, %xmm0
+ 1434 FF
+ 1435 .LBE349:
+ 1436 .LBE348:
+ 1437 .LBE347:
+ 1438 .LBE346:
+ 1439 .LBE343:
+ 1440 .LBE342:
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x04,3);
+ 1441 .loc 3 1746 0
+ 1442 05f8 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 1442 90F1FFFF
+ 1443 0600 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1443 80F1FFFF
+ 1444 0608 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 1444 F0F4FFFF
+ 1445 .LBB350:
+ 1446 .LBB351:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 1447 .loc 3 1565 0
+ 1448 0610 F30F6F85 movdqu -2832(%rbp), %xmm0
+ 1448 F0F4FFFF
+ 1449 0618 660F7F85 movdqa %xmm0, -3968(%rbp)
+ 1449 80F0FFFF
+ 1450 0620 660F6F85 movdqa -3968(%rbp), %xmm0
+ 1450 80F0FFFF
+ 1451 0628 F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 1451 00F5FFFF
+ 1452 .LBB352:
+ 1453 .LBB353:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1454 .loc 3 1278 0
+ 1455 0630 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1455 00000000
+ 1456 0638 F30F6F8D movdqu -2816(%rbp), %xmm1
+ 1456 00F5FFFF
+ 1457 0640 F30F7F8D movdqu %xmm1, -2784(%rbp)
+ 1457 20F5FFFF
+ 1458 0648 F30F7F85 movdqu %xmm0, -2800(%rbp)
+ 1458 10F5FFFF
+ 1459 0650 F30F6F85 movdqu -2784(%rbp), %xmm0
+ 1459 20F5FFFF
+ 1460 0658 F30F7F85 movdqu %xmm0, -2752(%rbp)
+ 1460 40F5FFFF
+ 1461 0660 F30F6F85 movdqu -2800(%rbp), %xmm0
+ 1461 10F5FFFF
+ 1462 0668 F30F7F85 movdqu %xmm0, -2768(%rbp)
+ 1462 30F5FFFF
+ 1463 .LBB354:
+ 1464 .LBB355:
+ 1465 .LBB356:
+ 1466 .LBB357:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccPaCTqg.s page 78
+
+
+ 1467 .loc 1 529 0
+ 1468 0670 F30F6F8D movdqu -2768(%rbp), %xmm1
+ 1468 30F5FFFF
+ 1469 0678 F30F6F85 movdqu -2752(%rbp), %xmm0
+ 1469 40F5FFFF
+ 1470 0680 660F3800 pshufb %xmm1, %xmm0
+ 1470 C1
+ 1471 .LBE357:
+ 1472 .LBE356:
+ 1473 .LBE355:
+ 1474 .LBE354:
+ 1475 .LBE353:
+ 1476 .LBE352:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1477 .loc 3 1567 0
+ 1478 0685 660F7F85 movdqa %xmm0, -3968(%rbp)
+ 1478 80F0FFFF
+ 1479 068d 660F6F85 movdqa -3968(%rbp), %xmm0
+ 1479 80F0FFFF
+ 1480 0695 660FEF85 pxor -2832(%rbp), %xmm0
+ 1480 F0F4FFFF
+ 1481 069d F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 1481 F0F4FFFF
+ 1482 06a5 660F6F85 movdqa -3968(%rbp), %xmm0
+ 1482 80F0FFFF
+ 1483 06ad F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 1483 50F5FFFF
+ 1484 .LBB358:
+ 1485 .LBB359:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1486 .loc 3 1278 0
+ 1487 06b5 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1487 00000000
+ 1488 06bd F30F6F8D movdqu -2736(%rbp), %xmm1
+ 1488 50F5FFFF
+ 1489 06c5 F30F7F8D movdqu %xmm1, -2704(%rbp)
+ 1489 70F5FFFF
+ 1490 06cd F30F7F85 movdqu %xmm0, -2720(%rbp)
+ 1490 60F5FFFF
+ 1491 06d5 F30F6F85 movdqu -2704(%rbp), %xmm0
+ 1491 70F5FFFF
+ 1492 06dd F30F7F85 movdqu %xmm0, -2672(%rbp)
+ 1492 90F5FFFF
+ 1493 06e5 F30F6F85 movdqu -2720(%rbp), %xmm0
+ 1493 60F5FFFF
+ 1494 06ed F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 1494 80F5FFFF
+ 1495 .LBB360:
+ 1496 .LBB361:
+ 1497 .LBB362:
+ 1498 .LBB363:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1499 .loc 1 529 0
+ 1500 06f5 F30F6F8D movdqu -2688(%rbp), %xmm1
+ 1500 80F5FFFF
+ 1501 06fd F30F6F85 movdqu -2672(%rbp), %xmm0
+ 1501 90F5FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 79
+
+
+ 1502 0705 660F3800 pshufb %xmm1, %xmm0
+ 1502 C1
+ 1503 .LBE363:
+ 1504 .LBE362:
+ 1505 .LBE361:
+ 1506 .LBE360:
+ 1507 .LBE359:
+ 1508 .LBE358:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1509 .loc 3 1568 0
+ 1510 070a 660F7F85 movdqa %xmm0, -3968(%rbp)
+ 1510 80F0FFFF
+ 1511 0712 660F6F85 movdqa -3968(%rbp), %xmm0
+ 1511 80F0FFFF
+ 1512 071a 660FEF85 pxor -2832(%rbp), %xmm0
+ 1512 F0F4FFFF
+ 1513 0722 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 1513 F0F4FFFF
+ 1514 072a 660F6F85 movdqa -3968(%rbp), %xmm0
+ 1514 80F0FFFF
+ 1515 0732 F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 1515 A0F5FFFF
+ 1516 .LBB364:
+ 1517 .LBB365:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1518 .loc 3 1278 0
+ 1519 073a 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1519 00000000
+ 1520 0742 F30F6F8D movdqu -2656(%rbp), %xmm1
+ 1520 A0F5FFFF
+ 1521 074a F30F7F8D movdqu %xmm1, -2624(%rbp)
+ 1521 C0F5FFFF
+ 1522 0752 F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 1522 B0F5FFFF
+ 1523 075a F30F6F85 movdqu -2624(%rbp), %xmm0
+ 1523 C0F5FFFF
+ 1524 0762 F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 1524 E0F5FFFF
+ 1525 076a F30F6F85 movdqu -2640(%rbp), %xmm0
+ 1525 B0F5FFFF
+ 1526 0772 F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 1526 D0F5FFFF
+ 1527 .LBB366:
+ 1528 .LBB367:
+ 1529 .LBB368:
+ 1530 .LBB369:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1531 .loc 1 529 0
+ 1532 077a F30F6F8D movdqu -2608(%rbp), %xmm1
+ 1532 D0F5FFFF
+ 1533 0782 F30F6F85 movdqu -2592(%rbp), %xmm0
+ 1533 E0F5FFFF
+ 1534 078a 660F3800 pshufb %xmm1, %xmm0
+ 1534 C1
+ 1535 .LBE369:
+ 1536 .LBE368:
+ 1537 .LBE367:
+
GAS LISTING /tmp/ccPaCTqg.s page 80
+
+
+ 1538 .LBE366:
+ 1539 .LBE365:
+ 1540 .LBE364:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1541 .loc 3 1569 0
+ 1542 078f 660F7F85 movdqa %xmm0, -3968(%rbp)
+ 1542 80F0FFFF
+ 1543 0797 660F6F85 movdqa -3968(%rbp), %xmm0
+ 1543 80F0FFFF
+ 1544 079f 660FEF85 pxor -2832(%rbp), %xmm0
+ 1544 F0F4FFFF
+ 1545 07a7 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 1545 F0F4FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1546 .loc 3 1571 0
+ 1547 07af F30F6F85 movdqu -2832(%rbp), %xmm0
+ 1547 F0F4FFFF
+ 1548 .LBE351:
+ 1549 .LBE350:
+ 1550 .loc 3 1746 0
+ 1551 07b7 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1551 80F1FFFF
+ 1552 07bf F30F6F85 movdqu -3696(%rbp), %xmm0
+ 1552 90F1FFFF
+ 1553 07c7 F30F6F8D movdqu -3712(%rbp), %xmm1
+ 1553 80F1FFFF
+ 1554 07cf 660FEFC1 pxor %xmm1, %xmm0
+ 1555 07d3 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1555 80F1FFFF
+ 1556 07db 488B8578 movq -3720(%rbp), %rax
+ 1556 F1FFFF
+ 1557 07e2 4883C030 addq $48, %rax
+ 1558 07e6 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1558 80F1FFFF
+ 1559 07ee F30F7F00 movdqu %xmm0, (%rax)
+ 1560 07f2 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1560 80F1FFFF
+ 1561 07fa F30F7F85 movdqu %xmm0, -2560(%rbp)
+ 1561 00F6FFFF
+ 1562 .LBB370:
+ 1563 .LBB371:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 1564 .loc 3 1673 0
+ 1565 0802 F30F6F85 movdqu -2560(%rbp), %xmm0
+ 1565 00F6FFFF
+ 1566 080a 660F7F85 movdqa %xmm0, -3952(%rbp)
+ 1566 90F0FFFF
+ 1567 0812 660F6F85 movdqa -3952(%rbp), %xmm0
+ 1567 90F0FFFF
+ 1568 081a F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 1568 20F6FFFF
+ 1569 .LBB372:
+ 1570 .LBB373:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1571 .loc 1 852 0
+ 1572 0822 F30F6F85 movdqu -2528(%rbp), %xmm0
+ 1572 20F6FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 81
+
+
+ 1573 082a 660F3ADF aeskeygenassist $8, %xmm0, %xmm0
+ 1573 C008
+ 1574 .LBE373:
+ 1575 .LBE372:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1576 .loc 3 1674 0
+ 1577 0830 660F7F85 movdqa %xmm0, -3952(%rbp)
+ 1577 90F0FFFF
+ 1578 0838 660F6F85 movdqa -3952(%rbp), %xmm0
+ 1578 90F0FFFF
+ 1579 0840 F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 1579 30F6FFFF
+ 1580 0848 F30F6F85 movdqu -2512(%rbp), %xmm0
+ 1580 30F6FFFF
+ 1581 0850 F30F7F85 movdqu %xmm0, -2480(%rbp)
+ 1581 50F6FFFF
+ 1582 .LBB374:
+ 1583 .LBB375:
+ 1584 .LBB376:
+ 1585 .LBB377:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1586 .loc 1 450 0
+ 1587 0858 F30F6F85 movdqu -2480(%rbp), %xmm0
+ 1587 50F6FFFF
+ 1588 0860 660F70C0 pshufd $255, %xmm0, %xmm0
+ 1588 FF
+ 1589 .LBE377:
+ 1590 .LBE376:
+ 1591 .LBE375:
+ 1592 .LBE374:
+ 1593 .LBE371:
+ 1594 .LBE370:
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x08,4);
+ 1595 .loc 3 1747 0
+ 1596 0865 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 1596 90F1FFFF
+ 1597 086d F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1597 80F1FFFF
+ 1598 0875 F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 1598 60F6FFFF
+ 1599 .LBB378:
+ 1600 .LBB379:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 1601 .loc 3 1565 0
+ 1602 087d F30F6F85 movdqu -2464(%rbp), %xmm0
+ 1602 60F6FFFF
+ 1603 0885 660F7F85 movdqa %xmm0, -3936(%rbp)
+ 1603 A0F0FFFF
+ 1604 088d 660F6F85 movdqa -3936(%rbp), %xmm0
+ 1604 A0F0FFFF
+ 1605 0895 F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 1605 70F6FFFF
+ 1606 .LBB380:
+ 1607 .LBB381:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1608 .loc 3 1278 0
+ 1609 089d 660F6F05 movdqa mask.8002(%rip), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 82
+
+
+ 1609 00000000
+ 1610 08a5 F30F6F8D movdqu -2448(%rbp), %xmm1
+ 1610 70F6FFFF
+ 1611 08ad F30F7F8D movdqu %xmm1, -2416(%rbp)
+ 1611 90F6FFFF
+ 1612 08b5 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 1612 80F6FFFF
+ 1613 08bd F30F6F85 movdqu -2416(%rbp), %xmm0
+ 1613 90F6FFFF
+ 1614 08c5 F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 1614 B0F6FFFF
+ 1615 08cd F30F6F85 movdqu -2432(%rbp), %xmm0
+ 1615 80F6FFFF
+ 1616 08d5 F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 1616 A0F6FFFF
+ 1617 .LBB382:
+ 1618 .LBB383:
+ 1619 .LBB384:
+ 1620 .LBB385:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1621 .loc 1 529 0
+ 1622 08dd F30F6F8D movdqu -2400(%rbp), %xmm1
+ 1622 A0F6FFFF
+ 1623 08e5 F30F6F85 movdqu -2384(%rbp), %xmm0
+ 1623 B0F6FFFF
+ 1624 08ed 660F3800 pshufb %xmm1, %xmm0
+ 1624 C1
+ 1625 .LBE385:
+ 1626 .LBE384:
+ 1627 .LBE383:
+ 1628 .LBE382:
+ 1629 .LBE381:
+ 1630 .LBE380:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1631 .loc 3 1567 0
+ 1632 08f2 660F7F85 movdqa %xmm0, -3936(%rbp)
+ 1632 A0F0FFFF
+ 1633 08fa 660F6F85 movdqa -3936(%rbp), %xmm0
+ 1633 A0F0FFFF
+ 1634 0902 660FEF85 pxor -2464(%rbp), %xmm0
+ 1634 60F6FFFF
+ 1635 090a F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 1635 60F6FFFF
+ 1636 0912 660F6F85 movdqa -3936(%rbp), %xmm0
+ 1636 A0F0FFFF
+ 1637 091a F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 1637 C0F6FFFF
+ 1638 .LBB386:
+ 1639 .LBB387:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1640 .loc 3 1278 0
+ 1641 0922 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1641 00000000
+ 1642 092a F30F6F8D movdqu -2368(%rbp), %xmm1
+ 1642 C0F6FFFF
+ 1643 0932 F30F7F8D movdqu %xmm1, -2336(%rbp)
+ 1643 E0F6FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 83
+
+
+ 1644 093a F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 1644 D0F6FFFF
+ 1645 0942 F30F6F85 movdqu -2336(%rbp), %xmm0
+ 1645 E0F6FFFF
+ 1646 094a F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 1646 00F7FFFF
+ 1647 0952 F30F6F85 movdqu -2352(%rbp), %xmm0
+ 1647 D0F6FFFF
+ 1648 095a F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 1648 F0F6FFFF
+ 1649 .LBB388:
+ 1650 .LBB389:
+ 1651 .LBB390:
+ 1652 .LBB391:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1653 .loc 1 529 0
+ 1654 0962 F30F6F8D movdqu -2320(%rbp), %xmm1
+ 1654 F0F6FFFF
+ 1655 096a F30F6F85 movdqu -2304(%rbp), %xmm0
+ 1655 00F7FFFF
+ 1656 0972 660F3800 pshufb %xmm1, %xmm0
+ 1656 C1
+ 1657 .LBE391:
+ 1658 .LBE390:
+ 1659 .LBE389:
+ 1660 .LBE388:
+ 1661 .LBE387:
+ 1662 .LBE386:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1663 .loc 3 1568 0
+ 1664 0977 660F7F85 movdqa %xmm0, -3936(%rbp)
+ 1664 A0F0FFFF
+ 1665 097f 660F6F85 movdqa -3936(%rbp), %xmm0
+ 1665 A0F0FFFF
+ 1666 0987 660FEF85 pxor -2464(%rbp), %xmm0
+ 1666 60F6FFFF
+ 1667 098f F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 1667 60F6FFFF
+ 1668 0997 660F6F85 movdqa -3936(%rbp), %xmm0
+ 1668 A0F0FFFF
+ 1669 099f F30F7F85 movdqu %xmm0, -2288(%rbp)
+ 1669 10F7FFFF
+ 1670 .LBB392:
+ 1671 .LBB393:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1672 .loc 3 1278 0
+ 1673 09a7 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1673 00000000
+ 1674 09af F30F6F8D movdqu -2288(%rbp), %xmm1
+ 1674 10F7FFFF
+ 1675 09b7 F30F7F8D movdqu %xmm1, -2256(%rbp)
+ 1675 30F7FFFF
+ 1676 09bf F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 1676 20F7FFFF
+ 1677 09c7 F30F6F85 movdqu -2256(%rbp), %xmm0
+ 1677 30F7FFFF
+ 1678 09cf F30F7F85 movdqu %xmm0, -2224(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 84
+
+
+ 1678 50F7FFFF
+ 1679 09d7 F30F6F85 movdqu -2272(%rbp), %xmm0
+ 1679 20F7FFFF
+ 1680 09df F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 1680 40F7FFFF
+ 1681 .LBB394:
+ 1682 .LBB395:
+ 1683 .LBB396:
+ 1684 .LBB397:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1685 .loc 1 529 0
+ 1686 09e7 F30F6F8D movdqu -2240(%rbp), %xmm1
+ 1686 40F7FFFF
+ 1687 09ef F30F6F85 movdqu -2224(%rbp), %xmm0
+ 1687 50F7FFFF
+ 1688 09f7 660F3800 pshufb %xmm1, %xmm0
+ 1688 C1
+ 1689 .LBE397:
+ 1690 .LBE396:
+ 1691 .LBE395:
+ 1692 .LBE394:
+ 1693 .LBE393:
+ 1694 .LBE392:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1695 .loc 3 1569 0
+ 1696 09fc 660F7F85 movdqa %xmm0, -3936(%rbp)
+ 1696 A0F0FFFF
+ 1697 0a04 660F6F85 movdqa -3936(%rbp), %xmm0
+ 1697 A0F0FFFF
+ 1698 0a0c 660FEF85 pxor -2464(%rbp), %xmm0
+ 1698 60F6FFFF
+ 1699 0a14 F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 1699 60F6FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1700 .loc 3 1571 0
+ 1701 0a1c F30F6F85 movdqu -2464(%rbp), %xmm0
+ 1701 60F6FFFF
+ 1702 .LBE379:
+ 1703 .LBE378:
+ 1704 .loc 3 1747 0
+ 1705 0a24 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1705 80F1FFFF
+ 1706 0a2c F30F6F85 movdqu -3696(%rbp), %xmm0
+ 1706 90F1FFFF
+ 1707 0a34 F30F6F8D movdqu -3712(%rbp), %xmm1
+ 1707 80F1FFFF
+ 1708 0a3c 660FEFC1 pxor %xmm1, %xmm0
+ 1709 0a40 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1709 80F1FFFF
+ 1710 0a48 488B8578 movq -3720(%rbp), %rax
+ 1710 F1FFFF
+ 1711 0a4f 4883C040 addq $64, %rax
+ 1712 0a53 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1712 80F1FFFF
+ 1713 0a5b F30F7F00 movdqu %xmm0, (%rax)
+ 1714 0a5f F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1714 80F1FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 85
+
+
+ 1715 0a67 F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 1715 70F7FFFF
+ 1716 .LBB398:
+ 1717 .LBB399:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 1718 .loc 3 1673 0
+ 1719 0a6f F30F6F85 movdqu -2192(%rbp), %xmm0
+ 1719 70F7FFFF
+ 1720 0a77 660F7F85 movdqa %xmm0, -3920(%rbp)
+ 1720 B0F0FFFF
+ 1721 0a7f 660F6F85 movdqa -3920(%rbp), %xmm0
+ 1721 B0F0FFFF
+ 1722 0a87 F30F7F85 movdqu %xmm0, -2160(%rbp)
+ 1722 90F7FFFF
+ 1723 .LBB400:
+ 1724 .LBB401:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1725 .loc 1 852 0
+ 1726 0a8f F30F6F85 movdqu -2160(%rbp), %xmm0
+ 1726 90F7FFFF
+ 1727 0a97 660F3ADF aeskeygenassist $16, %xmm0, %xmm0
+ 1727 C010
+ 1728 .LBE401:
+ 1729 .LBE400:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1730 .loc 3 1674 0
+ 1731 0a9d 660F7F85 movdqa %xmm0, -3920(%rbp)
+ 1731 B0F0FFFF
+ 1732 0aa5 660F6F85 movdqa -3920(%rbp), %xmm0
+ 1732 B0F0FFFF
+ 1733 0aad F30F7F85 movdqu %xmm0, -2144(%rbp)
+ 1733 A0F7FFFF
+ 1734 0ab5 F30F6F85 movdqu -2144(%rbp), %xmm0
+ 1734 A0F7FFFF
+ 1735 0abd F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 1735 C0F7FFFF
+ 1736 .LBB402:
+ 1737 .LBB403:
+ 1738 .LBB404:
+ 1739 .LBB405:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1740 .loc 1 450 0
+ 1741 0ac5 F30F6F85 movdqu -2112(%rbp), %xmm0
+ 1741 C0F7FFFF
+ 1742 0acd 660F70C0 pshufd $255, %xmm0, %xmm0
+ 1742 FF
+ 1743 .LBE405:
+ 1744 .LBE404:
+ 1745 .LBE403:
+ 1746 .LBE402:
+ 1747 .LBE399:
+ 1748 .LBE398:
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x10,5);
+ 1749 .loc 3 1748 0
+ 1750 0ad2 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 1750 90F1FFFF
+ 1751 0ada F30F6F85 movdqu -3712(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 86
+
+
+ 1751 80F1FFFF
+ 1752 0ae2 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 1752 D0F7FFFF
+ 1753 .LBB406:
+ 1754 .LBB407:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 1755 .loc 3 1565 0
+ 1756 0aea F30F6F85 movdqu -2096(%rbp), %xmm0
+ 1756 D0F7FFFF
+ 1757 0af2 660F7F85 movdqa %xmm0, -3904(%rbp)
+ 1757 C0F0FFFF
+ 1758 0afa 660F6F85 movdqa -3904(%rbp), %xmm0
+ 1758 C0F0FFFF
+ 1759 0b02 F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 1759 E0F7FFFF
+ 1760 .LBB408:
+ 1761 .LBB409:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1762 .loc 3 1278 0
+ 1763 0b0a 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1763 00000000
+ 1764 0b12 F30F6F8D movdqu -2080(%rbp), %xmm1
+ 1764 E0F7FFFF
+ 1765 0b1a F30F7F8D movdqu %xmm1, -2048(%rbp)
+ 1765 00F8FFFF
+ 1766 0b22 F30F7F85 movdqu %xmm0, -2064(%rbp)
+ 1766 F0F7FFFF
+ 1767 0b2a F30F6F85 movdqu -2048(%rbp), %xmm0
+ 1767 00F8FFFF
+ 1768 0b32 F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 1768 20F8FFFF
+ 1769 0b3a F30F6F85 movdqu -2064(%rbp), %xmm0
+ 1769 F0F7FFFF
+ 1770 0b42 F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 1770 10F8FFFF
+ 1771 .LBB410:
+ 1772 .LBB411:
+ 1773 .LBB412:
+ 1774 .LBB413:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1775 .loc 1 529 0
+ 1776 0b4a F30F6F8D movdqu -2032(%rbp), %xmm1
+ 1776 10F8FFFF
+ 1777 0b52 F30F6F85 movdqu -2016(%rbp), %xmm0
+ 1777 20F8FFFF
+ 1778 0b5a 660F3800 pshufb %xmm1, %xmm0
+ 1778 C1
+ 1779 .LBE413:
+ 1780 .LBE412:
+ 1781 .LBE411:
+ 1782 .LBE410:
+ 1783 .LBE409:
+ 1784 .LBE408:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1785 .loc 3 1567 0
+ 1786 0b5f 660F7F85 movdqa %xmm0, -3904(%rbp)
+ 1786 C0F0FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 87
+
+
+ 1787 0b67 660F6F85 movdqa -3904(%rbp), %xmm0
+ 1787 C0F0FFFF
+ 1788 0b6f 660FEF85 pxor -2096(%rbp), %xmm0
+ 1788 D0F7FFFF
+ 1789 0b77 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 1789 D0F7FFFF
+ 1790 0b7f 660F6F85 movdqa -3904(%rbp), %xmm0
+ 1790 C0F0FFFF
+ 1791 0b87 F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 1791 30F8FFFF
+ 1792 .LBB414:
+ 1793 .LBB415:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1794 .loc 3 1278 0
+ 1795 0b8f 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1795 00000000
+ 1796 0b97 F30F6F8D movdqu -2000(%rbp), %xmm1
+ 1796 30F8FFFF
+ 1797 0b9f F30F7F8D movdqu %xmm1, -1968(%rbp)
+ 1797 50F8FFFF
+ 1798 0ba7 F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 1798 40F8FFFF
+ 1799 0baf F30F6F85 movdqu -1968(%rbp), %xmm0
+ 1799 50F8FFFF
+ 1800 0bb7 F30F7F85 movdqu %xmm0, -1936(%rbp)
+ 1800 70F8FFFF
+ 1801 0bbf F30F6F85 movdqu -1984(%rbp), %xmm0
+ 1801 40F8FFFF
+ 1802 0bc7 F30F7F85 movdqu %xmm0, -1952(%rbp)
+ 1802 60F8FFFF
+ 1803 .LBB416:
+ 1804 .LBB417:
+ 1805 .LBB418:
+ 1806 .LBB419:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1807 .loc 1 529 0
+ 1808 0bcf F30F6F8D movdqu -1952(%rbp), %xmm1
+ 1808 60F8FFFF
+ 1809 0bd7 F30F6F85 movdqu -1936(%rbp), %xmm0
+ 1809 70F8FFFF
+ 1810 0bdf 660F3800 pshufb %xmm1, %xmm0
+ 1810 C1
+ 1811 .LBE419:
+ 1812 .LBE418:
+ 1813 .LBE417:
+ 1814 .LBE416:
+ 1815 .LBE415:
+ 1816 .LBE414:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1817 .loc 3 1568 0
+ 1818 0be4 660F7F85 movdqa %xmm0, -3904(%rbp)
+ 1818 C0F0FFFF
+ 1819 0bec 660F6F85 movdqa -3904(%rbp), %xmm0
+ 1819 C0F0FFFF
+ 1820 0bf4 660FEF85 pxor -2096(%rbp), %xmm0
+ 1820 D0F7FFFF
+ 1821 0bfc F30F7F85 movdqu %xmm0, -2096(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 88
+
+
+ 1821 D0F7FFFF
+ 1822 0c04 660F6F85 movdqa -3904(%rbp), %xmm0
+ 1822 C0F0FFFF
+ 1823 0c0c F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 1823 80F8FFFF
+ 1824 .LBB420:
+ 1825 .LBB421:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1826 .loc 3 1278 0
+ 1827 0c14 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1827 00000000
+ 1828 0c1c F30F6F8D movdqu -1920(%rbp), %xmm1
+ 1828 80F8FFFF
+ 1829 0c24 F30F7F8D movdqu %xmm1, -1888(%rbp)
+ 1829 A0F8FFFF
+ 1830 0c2c F30F7F85 movdqu %xmm0, -1904(%rbp)
+ 1830 90F8FFFF
+ 1831 0c34 F30F6F85 movdqu -1888(%rbp), %xmm0
+ 1831 A0F8FFFF
+ 1832 0c3c F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 1832 C0F8FFFF
+ 1833 0c44 F30F6F85 movdqu -1904(%rbp), %xmm0
+ 1833 90F8FFFF
+ 1834 0c4c F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 1834 B0F8FFFF
+ 1835 .LBB422:
+ 1836 .LBB423:
+ 1837 .LBB424:
+ 1838 .LBB425:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1839 .loc 1 529 0
+ 1840 0c54 F30F6F8D movdqu -1872(%rbp), %xmm1
+ 1840 B0F8FFFF
+ 1841 0c5c F30F6F85 movdqu -1856(%rbp), %xmm0
+ 1841 C0F8FFFF
+ 1842 0c64 660F3800 pshufb %xmm1, %xmm0
+ 1842 C1
+ 1843 .LBE425:
+ 1844 .LBE424:
+ 1845 .LBE423:
+ 1846 .LBE422:
+ 1847 .LBE421:
+ 1848 .LBE420:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1849 .loc 3 1569 0
+ 1850 0c69 660F7F85 movdqa %xmm0, -3904(%rbp)
+ 1850 C0F0FFFF
+ 1851 0c71 660F6F85 movdqa -3904(%rbp), %xmm0
+ 1851 C0F0FFFF
+ 1852 0c79 660FEF85 pxor -2096(%rbp), %xmm0
+ 1852 D0F7FFFF
+ 1853 0c81 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 1853 D0F7FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1854 .loc 3 1571 0
+ 1855 0c89 F30F6F85 movdqu -2096(%rbp), %xmm0
+ 1855 D0F7FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 89
+
+
+ 1856 .LBE407:
+ 1857 .LBE406:
+ 1858 .loc 3 1748 0
+ 1859 0c91 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1859 80F1FFFF
+ 1860 0c99 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 1860 90F1FFFF
+ 1861 0ca1 F30F6F8D movdqu -3712(%rbp), %xmm1
+ 1861 80F1FFFF
+ 1862 0ca9 660FEFC1 pxor %xmm1, %xmm0
+ 1863 0cad F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 1863 80F1FFFF
+ 1864 0cb5 488B8578 movq -3720(%rbp), %rax
+ 1864 F1FFFF
+ 1865 0cbc 4883C050 addq $80, %rax
+ 1866 0cc0 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1866 80F1FFFF
+ 1867 0cc8 F30F7F00 movdqu %xmm0, (%rax)
+ 1868 0ccc F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1868 80F1FFFF
+ 1869 0cd4 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 1869 E0F8FFFF
+ 1870 .LBB426:
+ 1871 .LBB427:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 1872 .loc 3 1673 0
+ 1873 0cdc F30F6F85 movdqu -1824(%rbp), %xmm0
+ 1873 E0F8FFFF
+ 1874 0ce4 660F7F85 movdqa %xmm0, -3888(%rbp)
+ 1874 D0F0FFFF
+ 1875 0cec 660F6F85 movdqa -3888(%rbp), %xmm0
+ 1875 D0F0FFFF
+ 1876 0cf4 F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 1876 00F9FFFF
+ 1877 .LBB428:
+ 1878 .LBB429:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1879 .loc 1 852 0
+ 1880 0cfc F30F6F85 movdqu -1792(%rbp), %xmm0
+ 1880 00F9FFFF
+ 1881 0d04 660F3ADF aeskeygenassist $32, %xmm0, %xmm0
+ 1881 C020
+ 1882 .LBE429:
+ 1883 .LBE428:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1884 .loc 3 1674 0
+ 1885 0d0a 660F7F85 movdqa %xmm0, -3888(%rbp)
+ 1885 D0F0FFFF
+ 1886 0d12 660F6F85 movdqa -3888(%rbp), %xmm0
+ 1886 D0F0FFFF
+ 1887 0d1a F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 1887 10F9FFFF
+ 1888 0d22 F30F6F85 movdqu -1776(%rbp), %xmm0
+ 1888 10F9FFFF
+ 1889 0d2a F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 1889 30F9FFFF
+ 1890 .LBB430:
+
GAS LISTING /tmp/ccPaCTqg.s page 90
+
+
+ 1891 .LBB431:
+ 1892 .LBB432:
+ 1893 .LBB433:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1894 .loc 1 450 0
+ 1895 0d32 F30F6F85 movdqu -1744(%rbp), %xmm0
+ 1895 30F9FFFF
+ 1896 0d3a 660F70C0 pshufd $255, %xmm0, %xmm0
+ 1896 FF
+ 1897 .LBE433:
+ 1898 .LBE432:
+ 1899 .LBE431:
+ 1900 .LBE430:
+ 1901 .LBE427:
+ 1902 .LBE426:
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x20,6);
+ 1903 .loc 3 1749 0
+ 1904 0d3f F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 1904 90F1FFFF
+ 1905 0d47 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 1905 80F1FFFF
+ 1906 0d4f F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 1906 40F9FFFF
+ 1907 .LBB434:
+ 1908 .LBB435:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 1909 .loc 3 1565 0
+ 1910 0d57 F30F6F85 movdqu -1728(%rbp), %xmm0
+ 1910 40F9FFFF
+ 1911 0d5f 660F7F85 movdqa %xmm0, -3872(%rbp)
+ 1911 E0F0FFFF
+ 1912 0d67 660F6F85 movdqa -3872(%rbp), %xmm0
+ 1912 E0F0FFFF
+ 1913 0d6f F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 1913 50F9FFFF
+ 1914 .LBB436:
+ 1915 .LBB437:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1916 .loc 3 1278 0
+ 1917 0d77 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1917 00000000
+ 1918 0d7f F30F6F8D movdqu -1712(%rbp), %xmm1
+ 1918 50F9FFFF
+ 1919 0d87 F30F7F8D movdqu %xmm1, -1680(%rbp)
+ 1919 70F9FFFF
+ 1920 0d8f F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 1920 60F9FFFF
+ 1921 0d97 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 1921 70F9FFFF
+ 1922 0d9f F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 1922 90F9FFFF
+ 1923 0da7 F30F6F85 movdqu -1696(%rbp), %xmm0
+ 1923 60F9FFFF
+ 1924 0daf F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 1924 80F9FFFF
+ 1925 .LBB438:
+ 1926 .LBB439:
+
GAS LISTING /tmp/ccPaCTqg.s page 91
+
+
+ 1927 .LBB440:
+ 1928 .LBB441:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1929 .loc 1 529 0
+ 1930 0db7 F30F6F8D movdqu -1664(%rbp), %xmm1
+ 1930 80F9FFFF
+ 1931 0dbf F30F6F85 movdqu -1648(%rbp), %xmm0
+ 1931 90F9FFFF
+ 1932 0dc7 660F3800 pshufb %xmm1, %xmm0
+ 1932 C1
+ 1933 .LBE441:
+ 1934 .LBE440:
+ 1935 .LBE439:
+ 1936 .LBE438:
+ 1937 .LBE437:
+ 1938 .LBE436:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1939 .loc 3 1567 0
+ 1940 0dcc 660F7F85 movdqa %xmm0, -3872(%rbp)
+ 1940 E0F0FFFF
+ 1941 0dd4 660F6F85 movdqa -3872(%rbp), %xmm0
+ 1941 E0F0FFFF
+ 1942 0ddc 660FEF85 pxor -1728(%rbp), %xmm0
+ 1942 40F9FFFF
+ 1943 0de4 F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 1943 40F9FFFF
+ 1944 0dec 660F6F85 movdqa -3872(%rbp), %xmm0
+ 1944 E0F0FFFF
+ 1945 0df4 F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 1945 A0F9FFFF
+ 1946 .LBB442:
+ 1947 .LBB443:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1948 .loc 3 1278 0
+ 1949 0dfc 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1949 00000000
+ 1950 0e04 F30F6F8D movdqu -1632(%rbp), %xmm1
+ 1950 A0F9FFFF
+ 1951 0e0c F30F7F8D movdqu %xmm1, -1600(%rbp)
+ 1951 C0F9FFFF
+ 1952 0e14 F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 1952 B0F9FFFF
+ 1953 0e1c F30F6F85 movdqu -1600(%rbp), %xmm0
+ 1953 C0F9FFFF
+ 1954 0e24 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 1954 E0F9FFFF
+ 1955 0e2c F30F6F85 movdqu -1616(%rbp), %xmm0
+ 1955 B0F9FFFF
+ 1956 0e34 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 1956 D0F9FFFF
+ 1957 .LBB444:
+ 1958 .LBB445:
+ 1959 .LBB446:
+ 1960 .LBB447:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1961 .loc 1 529 0
+ 1962 0e3c F30F6F8D movdqu -1584(%rbp), %xmm1
+
GAS LISTING /tmp/ccPaCTqg.s page 92
+
+
+ 1962 D0F9FFFF
+ 1963 0e44 F30F6F85 movdqu -1568(%rbp), %xmm0
+ 1963 E0F9FFFF
+ 1964 0e4c 660F3800 pshufb %xmm1, %xmm0
+ 1964 C1
+ 1965 .LBE447:
+ 1966 .LBE446:
+ 1967 .LBE445:
+ 1968 .LBE444:
+ 1969 .LBE443:
+ 1970 .LBE442:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1971 .loc 3 1568 0
+ 1972 0e51 660F7F85 movdqa %xmm0, -3872(%rbp)
+ 1972 E0F0FFFF
+ 1973 0e59 660F6F85 movdqa -3872(%rbp), %xmm0
+ 1973 E0F0FFFF
+ 1974 0e61 660FEF85 pxor -1728(%rbp), %xmm0
+ 1974 40F9FFFF
+ 1975 0e69 F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 1975 40F9FFFF
+ 1976 0e71 660F6F85 movdqa -3872(%rbp), %xmm0
+ 1976 E0F0FFFF
+ 1977 0e79 F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 1977 F0F9FFFF
+ 1978 .LBB448:
+ 1979 .LBB449:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1980 .loc 3 1278 0
+ 1981 0e81 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 1981 00000000
+ 1982 0e89 F30F6F8D movdqu -1552(%rbp), %xmm1
+ 1982 F0F9FFFF
+ 1983 0e91 F30F7F8D movdqu %xmm1, -1520(%rbp)
+ 1983 10FAFFFF
+ 1984 0e99 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 1984 00FAFFFF
+ 1985 0ea1 F30F6F85 movdqu -1520(%rbp), %xmm0
+ 1985 10FAFFFF
+ 1986 0ea9 F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 1986 30FAFFFF
+ 1987 0eb1 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 1987 00FAFFFF
+ 1988 0eb9 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 1988 20FAFFFF
+ 1989 .LBB450:
+ 1990 .LBB451:
+ 1991 .LBB452:
+ 1992 .LBB453:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1993 .loc 1 529 0
+ 1994 0ec1 F30F6F8D movdqu -1504(%rbp), %xmm1
+ 1994 20FAFFFF
+ 1995 0ec9 F30F6F85 movdqu -1488(%rbp), %xmm0
+ 1995 30FAFFFF
+ 1996 0ed1 660F3800 pshufb %xmm1, %xmm0
+ 1996 C1
+
GAS LISTING /tmp/ccPaCTqg.s page 93
+
+
+ 1997 .LBE453:
+ 1998 .LBE452:
+ 1999 .LBE451:
+ 2000 .LBE450:
+ 2001 .LBE449:
+ 2002 .LBE448:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2003 .loc 3 1569 0
+ 2004 0ed6 660F7F85 movdqa %xmm0, -3872(%rbp)
+ 2004 E0F0FFFF
+ 2005 0ede 660F6F85 movdqa -3872(%rbp), %xmm0
+ 2005 E0F0FFFF
+ 2006 0ee6 660FEF85 pxor -1728(%rbp), %xmm0
+ 2006 40F9FFFF
+ 2007 0eee F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 2007 40F9FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2008 .loc 3 1571 0
+ 2009 0ef6 F30F6F85 movdqu -1728(%rbp), %xmm0
+ 2009 40F9FFFF
+ 2010 .LBE435:
+ 2011 .LBE434:
+ 2012 .loc 3 1749 0
+ 2013 0efe F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2013 80F1FFFF
+ 2014 0f06 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 2014 90F1FFFF
+ 2015 0f0e F30F6F8D movdqu -3712(%rbp), %xmm1
+ 2015 80F1FFFF
+ 2016 0f16 660FEFC1 pxor %xmm1, %xmm0
+ 2017 0f1a F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2017 80F1FFFF
+ 2018 0f22 488B8578 movq -3720(%rbp), %rax
+ 2018 F1FFFF
+ 2019 0f29 4883C060 addq $96, %rax
+ 2020 0f2d F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2020 80F1FFFF
+ 2021 0f35 F30F7F00 movdqu %xmm0, (%rax)
+ 2022 0f39 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2022 80F1FFFF
+ 2023 0f41 F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 2023 50FAFFFF
+ 2024 .LBB454:
+ 2025 .LBB455:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 2026 .loc 3 1673 0
+ 2027 0f49 F30F6F85 movdqu -1456(%rbp), %xmm0
+ 2027 50FAFFFF
+ 2028 0f51 660F7F85 movdqa %xmm0, -3856(%rbp)
+ 2028 F0F0FFFF
+ 2029 0f59 660F6F85 movdqa -3856(%rbp), %xmm0
+ 2029 F0F0FFFF
+ 2030 0f61 F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 2030 70FAFFFF
+ 2031 .LBB456:
+ 2032 .LBB457:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+
GAS LISTING /tmp/ccPaCTqg.s page 94
+
+
+ 2033 .loc 1 852 0
+ 2034 0f69 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 2034 70FAFFFF
+ 2035 0f71 660F3ADF aeskeygenassist $64, %xmm0, %xmm0
+ 2035 C040
+ 2036 .LBE457:
+ 2037 .LBE456:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2038 .loc 3 1674 0
+ 2039 0f77 660F7F85 movdqa %xmm0, -3856(%rbp)
+ 2039 F0F0FFFF
+ 2040 0f7f 660F6F85 movdqa -3856(%rbp), %xmm0
+ 2040 F0F0FFFF
+ 2041 0f87 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 2041 80FAFFFF
+ 2042 0f8f F30F6F85 movdqu -1408(%rbp), %xmm0
+ 2042 80FAFFFF
+ 2043 0f97 F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 2043 A0FAFFFF
+ 2044 .LBB458:
+ 2045 .LBB459:
+ 2046 .LBB460:
+ 2047 .LBB461:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2048 .loc 1 450 0
+ 2049 0f9f F30F6F85 movdqu -1376(%rbp), %xmm0
+ 2049 A0FAFFFF
+ 2050 0fa7 660F70C0 pshufd $255, %xmm0, %xmm0
+ 2050 FF
+ 2051 .LBE461:
+ 2052 .LBE460:
+ 2053 .LBE459:
+ 2054 .LBE458:
+ 2055 .LBE455:
+ 2056 .LBE454:
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x40,7);
+ 2057 .loc 3 1750 0
+ 2058 0fac F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 2058 90F1FFFF
+ 2059 0fb4 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2059 80F1FFFF
+ 2060 0fbc F30F7F85 movdqu %xmm0, -1360(%rbp)
+ 2060 B0FAFFFF
+ 2061 .LBB462:
+ 2062 .LBB463:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 2063 .loc 3 1565 0
+ 2064 0fc4 F30F6F85 movdqu -1360(%rbp), %xmm0
+ 2064 B0FAFFFF
+ 2065 0fcc 660F7F85 movdqa %xmm0, -3840(%rbp)
+ 2065 00F1FFFF
+ 2066 0fd4 660F6F85 movdqa -3840(%rbp), %xmm0
+ 2066 00F1FFFF
+ 2067 0fdc F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 2067 C0FAFFFF
+ 2068 .LBB464:
+ 2069 .LBB465:
+
GAS LISTING /tmp/ccPaCTqg.s page 95
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2070 .loc 3 1278 0
+ 2071 0fe4 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2071 00000000
+ 2072 0fec F30F6F8D movdqu -1344(%rbp), %xmm1
+ 2072 C0FAFFFF
+ 2073 0ff4 F30F7F8D movdqu %xmm1, -1312(%rbp)
+ 2073 E0FAFFFF
+ 2074 0ffc F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 2074 D0FAFFFF
+ 2075 1004 F30F6F85 movdqu -1312(%rbp), %xmm0
+ 2075 E0FAFFFF
+ 2076 100c F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 2076 00FBFFFF
+ 2077 1014 F30F6F85 movdqu -1328(%rbp), %xmm0
+ 2077 D0FAFFFF
+ 2078 101c F30F7F85 movdqu %xmm0, -1296(%rbp)
+ 2078 F0FAFFFF
+ 2079 .LBB466:
+ 2080 .LBB467:
+ 2081 .LBB468:
+ 2082 .LBB469:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2083 .loc 1 529 0
+ 2084 1024 F30F6F8D movdqu -1296(%rbp), %xmm1
+ 2084 F0FAFFFF
+ 2085 102c F30F6F85 movdqu -1280(%rbp), %xmm0
+ 2085 00FBFFFF
+ 2086 1034 660F3800 pshufb %xmm1, %xmm0
+ 2086 C1
+ 2087 .LBE469:
+ 2088 .LBE468:
+ 2089 .LBE467:
+ 2090 .LBE466:
+ 2091 .LBE465:
+ 2092 .LBE464:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2093 .loc 3 1567 0
+ 2094 1039 660F7F85 movdqa %xmm0, -3840(%rbp)
+ 2094 00F1FFFF
+ 2095 1041 660F6F85 movdqa -3840(%rbp), %xmm0
+ 2095 00F1FFFF
+ 2096 1049 660FEF85 pxor -1360(%rbp), %xmm0
+ 2096 B0FAFFFF
+ 2097 1051 F30F7F85 movdqu %xmm0, -1360(%rbp)
+ 2097 B0FAFFFF
+ 2098 1059 660F6F85 movdqa -3840(%rbp), %xmm0
+ 2098 00F1FFFF
+ 2099 1061 F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 2099 10FBFFFF
+ 2100 .LBB470:
+ 2101 .LBB471:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2102 .loc 3 1278 0
+ 2103 1069 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2103 00000000
+ 2104 1071 F30F6F8D movdqu -1264(%rbp), %xmm1
+
GAS LISTING /tmp/ccPaCTqg.s page 96
+
+
+ 2104 10FBFFFF
+ 2105 1079 F30F7F8D movdqu %xmm1, -1232(%rbp)
+ 2105 30FBFFFF
+ 2106 1081 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 2106 20FBFFFF
+ 2107 1089 F30F6F85 movdqu -1232(%rbp), %xmm0
+ 2107 30FBFFFF
+ 2108 1091 F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 2108 50FBFFFF
+ 2109 1099 F30F6F85 movdqu -1248(%rbp), %xmm0
+ 2109 20FBFFFF
+ 2110 10a1 F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 2110 40FBFFFF
+ 2111 .LBB472:
+ 2112 .LBB473:
+ 2113 .LBB474:
+ 2114 .LBB475:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2115 .loc 1 529 0
+ 2116 10a9 F30F6F8D movdqu -1216(%rbp), %xmm1
+ 2116 40FBFFFF
+ 2117 10b1 F30F6F85 movdqu -1200(%rbp), %xmm0
+ 2117 50FBFFFF
+ 2118 10b9 660F3800 pshufb %xmm1, %xmm0
+ 2118 C1
+ 2119 .LBE475:
+ 2120 .LBE474:
+ 2121 .LBE473:
+ 2122 .LBE472:
+ 2123 .LBE471:
+ 2124 .LBE470:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2125 .loc 3 1568 0
+ 2126 10be 660F7F85 movdqa %xmm0, -3840(%rbp)
+ 2126 00F1FFFF
+ 2127 10c6 660F6F85 movdqa -3840(%rbp), %xmm0
+ 2127 00F1FFFF
+ 2128 10ce 660FEF85 pxor -1360(%rbp), %xmm0
+ 2128 B0FAFFFF
+ 2129 10d6 F30F7F85 movdqu %xmm0, -1360(%rbp)
+ 2129 B0FAFFFF
+ 2130 10de 660F6F85 movdqa -3840(%rbp), %xmm0
+ 2130 00F1FFFF
+ 2131 10e6 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 2131 60FBFFFF
+ 2132 .LBB476:
+ 2133 .LBB477:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2134 .loc 3 1278 0
+ 2135 10ee 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2135 00000000
+ 2136 10f6 F30F6F8D movdqu -1184(%rbp), %xmm1
+ 2136 60FBFFFF
+ 2137 10fe F30F7F8D movdqu %xmm1, -1152(%rbp)
+ 2137 80FBFFFF
+ 2138 1106 F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 2138 70FBFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 97
+
+
+ 2139 110e F30F6F85 movdqu -1152(%rbp), %xmm0
+ 2139 80FBFFFF
+ 2140 1116 F30F7F85 movdqu %xmm0, -1120(%rbp)
+ 2140 A0FBFFFF
+ 2141 111e F30F6F85 movdqu -1168(%rbp), %xmm0
+ 2141 70FBFFFF
+ 2142 1126 F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 2142 90FBFFFF
+ 2143 .LBB478:
+ 2144 .LBB479:
+ 2145 .LBB480:
+ 2146 .LBB481:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2147 .loc 1 529 0
+ 2148 112e F30F6F8D movdqu -1136(%rbp), %xmm1
+ 2148 90FBFFFF
+ 2149 1136 F30F6F85 movdqu -1120(%rbp), %xmm0
+ 2149 A0FBFFFF
+ 2150 113e 660F3800 pshufb %xmm1, %xmm0
+ 2150 C1
+ 2151 .LBE481:
+ 2152 .LBE480:
+ 2153 .LBE479:
+ 2154 .LBE478:
+ 2155 .LBE477:
+ 2156 .LBE476:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2157 .loc 3 1569 0
+ 2158 1143 660F7F85 movdqa %xmm0, -3840(%rbp)
+ 2158 00F1FFFF
+ 2159 114b 660F6F85 movdqa -3840(%rbp), %xmm0
+ 2159 00F1FFFF
+ 2160 1153 660FEF85 pxor -1360(%rbp), %xmm0
+ 2160 B0FAFFFF
+ 2161 115b F30F7F85 movdqu %xmm0, -1360(%rbp)
+ 2161 B0FAFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2162 .loc 3 1571 0
+ 2163 1163 F30F6F85 movdqu -1360(%rbp), %xmm0
+ 2163 B0FAFFFF
+ 2164 .LBE463:
+ 2165 .LBE462:
+ 2166 .loc 3 1750 0
+ 2167 116b F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2167 80F1FFFF
+ 2168 1173 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 2168 90F1FFFF
+ 2169 117b F30F6F8D movdqu -3712(%rbp), %xmm1
+ 2169 80F1FFFF
+ 2170 1183 660FEFC1 pxor %xmm1, %xmm0
+ 2171 1187 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2171 80F1FFFF
+ 2172 118f 488B8578 movq -3720(%rbp), %rax
+ 2172 F1FFFF
+ 2173 1196 4883C070 addq $112, %rax
+ 2174 119a F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2174 80F1FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 98
+
+
+ 2175 11a2 F30F7F00 movdqu %xmm0, (%rax)
+ 2176 11a6 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2176 80F1FFFF
+ 2177 11ae F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 2177 C0FBFFFF
+ 2178 .LBB482:
+ 2179 .LBB483:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 2180 .loc 3 1673 0
+ 2181 11b6 F30F6F85 movdqu -1088(%rbp), %xmm0
+ 2181 C0FBFFFF
+ 2182 11be 660F7F85 movdqa %xmm0, -3824(%rbp)
+ 2182 10F1FFFF
+ 2183 11c6 660F6F85 movdqa -3824(%rbp), %xmm0
+ 2183 10F1FFFF
+ 2184 11ce F30F7F85 movdqu %xmm0, -1056(%rbp)
+ 2184 E0FBFFFF
+ 2185 .LBB484:
+ 2186 .LBB485:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 2187 .loc 1 852 0
+ 2188 11d6 F30F6F85 movdqu -1056(%rbp), %xmm0
+ 2188 E0FBFFFF
+ 2189 11de 660F3ADF aeskeygenassist $128, %xmm0, %xmm0
+ 2189 C080
+ 2190 .LBE485:
+ 2191 .LBE484:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2192 .loc 3 1674 0
+ 2193 11e4 660F7F85 movdqa %xmm0, -3824(%rbp)
+ 2193 10F1FFFF
+ 2194 11ec 660F6F85 movdqa -3824(%rbp), %xmm0
+ 2194 10F1FFFF
+ 2195 11f4 F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 2195 F0FBFFFF
+ 2196 11fc F30F6F85 movdqu -1040(%rbp), %xmm0
+ 2196 F0FBFFFF
+ 2197 1204 F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 2197 10FCFFFF
+ 2198 .LBB486:
+ 2199 .LBB487:
+ 2200 .LBB488:
+ 2201 .LBB489:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2202 .loc 1 450 0
+ 2203 120c F30F6F85 movdqu -1008(%rbp), %xmm0
+ 2203 10FCFFFF
+ 2204 1214 660F70C0 pshufd $255, %xmm0, %xmm0
+ 2204 FF
+ 2205 .LBE489:
+ 2206 .LBE488:
+ 2207 .LBE487:
+ 2208 .LBE486:
+ 2209 .LBE483:
+ 2210 .LBE482:
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x80,8);
+ 2211 .loc 3 1751 0
+
GAS LISTING /tmp/ccPaCTqg.s page 99
+
+
+ 2212 1219 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 2212 90F1FFFF
+ 2213 1221 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2213 80F1FFFF
+ 2214 1229 F30F7F85 movdqu %xmm0, -992(%rbp)
+ 2214 20FCFFFF
+ 2215 .LBB490:
+ 2216 .LBB491:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 2217 .loc 3 1565 0
+ 2218 1231 F30F6F85 movdqu -992(%rbp), %xmm0
+ 2218 20FCFFFF
+ 2219 1239 660F7F85 movdqa %xmm0, -3808(%rbp)
+ 2219 20F1FFFF
+ 2220 1241 660F6F85 movdqa -3808(%rbp), %xmm0
+ 2220 20F1FFFF
+ 2221 1249 F30F7F85 movdqu %xmm0, -976(%rbp)
+ 2221 30FCFFFF
+ 2222 .LBB492:
+ 2223 .LBB493:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2224 .loc 3 1278 0
+ 2225 1251 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2225 00000000
+ 2226 1259 F30F6F8D movdqu -976(%rbp), %xmm1
+ 2226 30FCFFFF
+ 2227 1261 F30F7F8D movdqu %xmm1, -944(%rbp)
+ 2227 50FCFFFF
+ 2228 1269 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 2228 40FCFFFF
+ 2229 1271 F30F6F85 movdqu -944(%rbp), %xmm0
+ 2229 50FCFFFF
+ 2230 1279 F30F7F85 movdqu %xmm0, -912(%rbp)
+ 2230 70FCFFFF
+ 2231 1281 F30F6F85 movdqu -960(%rbp), %xmm0
+ 2231 40FCFFFF
+ 2232 1289 F30F7F85 movdqu %xmm0, -928(%rbp)
+ 2232 60FCFFFF
+ 2233 .LBB494:
+ 2234 .LBB495:
+ 2235 .LBB496:
+ 2236 .LBB497:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2237 .loc 1 529 0
+ 2238 1291 F30F6F8D movdqu -928(%rbp), %xmm1
+ 2238 60FCFFFF
+ 2239 1299 F30F6F85 movdqu -912(%rbp), %xmm0
+ 2239 70FCFFFF
+ 2240 12a1 660F3800 pshufb %xmm1, %xmm0
+ 2240 C1
+ 2241 .LBE497:
+ 2242 .LBE496:
+ 2243 .LBE495:
+ 2244 .LBE494:
+ 2245 .LBE493:
+ 2246 .LBE492:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccPaCTqg.s page 100
+
+
+ 2247 .loc 3 1567 0
+ 2248 12a6 660F7F85 movdqa %xmm0, -3808(%rbp)
+ 2248 20F1FFFF
+ 2249 12ae 660F6F85 movdqa -3808(%rbp), %xmm0
+ 2249 20F1FFFF
+ 2250 12b6 660FEF85 pxor -992(%rbp), %xmm0
+ 2250 20FCFFFF
+ 2251 12be F30F7F85 movdqu %xmm0, -992(%rbp)
+ 2251 20FCFFFF
+ 2252 12c6 660F6F85 movdqa -3808(%rbp), %xmm0
+ 2252 20F1FFFF
+ 2253 12ce F30F7F85 movdqu %xmm0, -896(%rbp)
+ 2253 80FCFFFF
+ 2254 .LBB498:
+ 2255 .LBB499:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2256 .loc 3 1278 0
+ 2257 12d6 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2257 00000000
+ 2258 12de F30F6F8D movdqu -896(%rbp), %xmm1
+ 2258 80FCFFFF
+ 2259 12e6 F30F7F8D movdqu %xmm1, -864(%rbp)
+ 2259 A0FCFFFF
+ 2260 12ee F30F7F85 movdqu %xmm0, -880(%rbp)
+ 2260 90FCFFFF
+ 2261 12f6 F30F6F85 movdqu -864(%rbp), %xmm0
+ 2261 A0FCFFFF
+ 2262 12fe F30F7F85 movdqu %xmm0, -832(%rbp)
+ 2262 C0FCFFFF
+ 2263 1306 F30F6F85 movdqu -880(%rbp), %xmm0
+ 2263 90FCFFFF
+ 2264 130e F30F7F85 movdqu %xmm0, -848(%rbp)
+ 2264 B0FCFFFF
+ 2265 .LBB500:
+ 2266 .LBB501:
+ 2267 .LBB502:
+ 2268 .LBB503:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2269 .loc 1 529 0
+ 2270 1316 F30F6F8D movdqu -848(%rbp), %xmm1
+ 2270 B0FCFFFF
+ 2271 131e F30F6F85 movdqu -832(%rbp), %xmm0
+ 2271 C0FCFFFF
+ 2272 1326 660F3800 pshufb %xmm1, %xmm0
+ 2272 C1
+ 2273 .LBE503:
+ 2274 .LBE502:
+ 2275 .LBE501:
+ 2276 .LBE500:
+ 2277 .LBE499:
+ 2278 .LBE498:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2279 .loc 3 1568 0
+ 2280 132b 660F7F85 movdqa %xmm0, -3808(%rbp)
+ 2280 20F1FFFF
+ 2281 1333 660F6F85 movdqa -3808(%rbp), %xmm0
+ 2281 20F1FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 101
+
+
+ 2282 133b 660FEF85 pxor -992(%rbp), %xmm0
+ 2282 20FCFFFF
+ 2283 1343 F30F7F85 movdqu %xmm0, -992(%rbp)
+ 2283 20FCFFFF
+ 2284 134b 660F6F85 movdqa -3808(%rbp), %xmm0
+ 2284 20F1FFFF
+ 2285 1353 F30F7F85 movdqu %xmm0, -816(%rbp)
+ 2285 D0FCFFFF
+ 2286 .LBB504:
+ 2287 .LBB505:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2288 .loc 3 1278 0
+ 2289 135b 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2289 00000000
+ 2290 1363 F30F6F8D movdqu -816(%rbp), %xmm1
+ 2290 D0FCFFFF
+ 2291 136b F30F7F8D movdqu %xmm1, -784(%rbp)
+ 2291 F0FCFFFF
+ 2292 1373 F30F7F85 movdqu %xmm0, -800(%rbp)
+ 2292 E0FCFFFF
+ 2293 137b F30F6F85 movdqu -784(%rbp), %xmm0
+ 2293 F0FCFFFF
+ 2294 1383 F30F7F85 movdqu %xmm0, -752(%rbp)
+ 2294 10FDFFFF
+ 2295 138b F30F6F85 movdqu -800(%rbp), %xmm0
+ 2295 E0FCFFFF
+ 2296 1393 F30F7F85 movdqu %xmm0, -768(%rbp)
+ 2296 00FDFFFF
+ 2297 .LBB506:
+ 2298 .LBB507:
+ 2299 .LBB508:
+ 2300 .LBB509:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2301 .loc 1 529 0
+ 2302 139b F30F6F8D movdqu -768(%rbp), %xmm1
+ 2302 00FDFFFF
+ 2303 13a3 F30F6F85 movdqu -752(%rbp), %xmm0
+ 2303 10FDFFFF
+ 2304 13ab 660F3800 pshufb %xmm1, %xmm0
+ 2304 C1
+ 2305 .LBE509:
+ 2306 .LBE508:
+ 2307 .LBE507:
+ 2308 .LBE506:
+ 2309 .LBE505:
+ 2310 .LBE504:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2311 .loc 3 1569 0
+ 2312 13b0 660F7F85 movdqa %xmm0, -3808(%rbp)
+ 2312 20F1FFFF
+ 2313 13b8 660F6F85 movdqa -3808(%rbp), %xmm0
+ 2313 20F1FFFF
+ 2314 13c0 660FEF85 pxor -992(%rbp), %xmm0
+ 2314 20FCFFFF
+ 2315 13c8 F30F7F85 movdqu %xmm0, -992(%rbp)
+ 2315 20FCFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+
GAS LISTING /tmp/ccPaCTqg.s page 102
+
+
+ 2316 .loc 3 1571 0
+ 2317 13d0 F30F6F85 movdqu -992(%rbp), %xmm0
+ 2317 20FCFFFF
+ 2318 .LBE491:
+ 2319 .LBE490:
+ 2320 .loc 3 1751 0
+ 2321 13d8 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2321 80F1FFFF
+ 2322 13e0 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 2322 90F1FFFF
+ 2323 13e8 F30F6F8D movdqu -3712(%rbp), %xmm1
+ 2323 80F1FFFF
+ 2324 13f0 660FEFC1 pxor %xmm1, %xmm0
+ 2325 13f4 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2325 80F1FFFF
+ 2326 13fc 488B8578 movq -3720(%rbp), %rax
+ 2326 F1FFFF
+ 2327 1403 4883E880 subq $-128, %rax
+ 2328 1407 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2328 80F1FFFF
+ 2329 140f F30F7F00 movdqu %xmm0, (%rax)
+ 2330 1413 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2330 80F1FFFF
+ 2331 141b F30F7F85 movdqu %xmm0, -720(%rbp)
+ 2331 30FDFFFF
+ 2332 .LBB510:
+ 2333 .LBB511:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 2334 .loc 3 1673 0
+ 2335 1423 F30F6F85 movdqu -720(%rbp), %xmm0
+ 2335 30FDFFFF
+ 2336 142b 660F7F85 movdqa %xmm0, -3792(%rbp)
+ 2336 30F1FFFF
+ 2337 1433 660F6F85 movdqa -3792(%rbp), %xmm0
+ 2337 30F1FFFF
+ 2338 143b F30F7F85 movdqu %xmm0, -688(%rbp)
+ 2338 50FDFFFF
+ 2339 .LBB512:
+ 2340 .LBB513:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 2341 .loc 1 852 0
+ 2342 1443 F30F6F85 movdqu -688(%rbp), %xmm0
+ 2342 50FDFFFF
+ 2343 144b 660F3ADF aeskeygenassist $27, %xmm0, %xmm0
+ 2343 C01B
+ 2344 .LBE513:
+ 2345 .LBE512:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2346 .loc 3 1674 0
+ 2347 1451 660F7F85 movdqa %xmm0, -3792(%rbp)
+ 2347 30F1FFFF
+ 2348 1459 660F6F85 movdqa -3792(%rbp), %xmm0
+ 2348 30F1FFFF
+ 2349 1461 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 2349 60FDFFFF
+ 2350 1469 F30F6F85 movdqu -672(%rbp), %xmm0
+ 2350 60FDFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 103
+
+
+ 2351 1471 F30F7F85 movdqu %xmm0, -640(%rbp)
+ 2351 80FDFFFF
+ 2352 .LBB514:
+ 2353 .LBB515:
+ 2354 .LBB516:
+ 2355 .LBB517:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2356 .loc 1 450 0
+ 2357 1479 F30F6F85 movdqu -640(%rbp), %xmm0
+ 2357 80FDFFFF
+ 2358 1481 660F70C0 pshufd $255, %xmm0, %xmm0
+ 2358 FF
+ 2359 .LBE517:
+ 2360 .LBE516:
+ 2361 .LBE515:
+ 2362 .LBE514:
+ 2363 .LBE511:
+ 2364 .LBE510:
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x1B,9);
+ 2365 .loc 3 1752 0
+ 2366 1486 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 2366 90F1FFFF
+ 2367 148e F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2367 80F1FFFF
+ 2368 1496 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 2368 90FDFFFF
+ 2369 .LBB518:
+ 2370 .LBB519:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 2371 .loc 3 1565 0
+ 2372 149e F30F6F85 movdqu -624(%rbp), %xmm0
+ 2372 90FDFFFF
+ 2373 14a6 660F7F85 movdqa %xmm0, -3776(%rbp)
+ 2373 40F1FFFF
+ 2374 14ae 660F6F85 movdqa -3776(%rbp), %xmm0
+ 2374 40F1FFFF
+ 2375 14b6 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 2375 A0FDFFFF
+ 2376 .LBB520:
+ 2377 .LBB521:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2378 .loc 3 1278 0
+ 2379 14be 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2379 00000000
+ 2380 14c6 F30F6F8D movdqu -608(%rbp), %xmm1
+ 2380 A0FDFFFF
+ 2381 14ce F30F7F8D movdqu %xmm1, -576(%rbp)
+ 2381 C0FDFFFF
+ 2382 14d6 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 2382 B0FDFFFF
+ 2383 14de F30F6F85 movdqu -576(%rbp), %xmm0
+ 2383 C0FDFFFF
+ 2384 14e6 F30F7F85 movdqu %xmm0, -544(%rbp)
+ 2384 E0FDFFFF
+ 2385 14ee F30F6F85 movdqu -592(%rbp), %xmm0
+ 2385 B0FDFFFF
+ 2386 14f6 F30F7F85 movdqu %xmm0, -560(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 104
+
+
+ 2386 D0FDFFFF
+ 2387 .LBB522:
+ 2388 .LBB523:
+ 2389 .LBB524:
+ 2390 .LBB525:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2391 .loc 1 529 0
+ 2392 14fe F30F6F8D movdqu -560(%rbp), %xmm1
+ 2392 D0FDFFFF
+ 2393 1506 F30F6F85 movdqu -544(%rbp), %xmm0
+ 2393 E0FDFFFF
+ 2394 150e 660F3800 pshufb %xmm1, %xmm0
+ 2394 C1
+ 2395 .LBE525:
+ 2396 .LBE524:
+ 2397 .LBE523:
+ 2398 .LBE522:
+ 2399 .LBE521:
+ 2400 .LBE520:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2401 .loc 3 1567 0
+ 2402 1513 660F7F85 movdqa %xmm0, -3776(%rbp)
+ 2402 40F1FFFF
+ 2403 151b 660F6F85 movdqa -3776(%rbp), %xmm0
+ 2403 40F1FFFF
+ 2404 1523 660FEF85 pxor -624(%rbp), %xmm0
+ 2404 90FDFFFF
+ 2405 152b F30F7F85 movdqu %xmm0, -624(%rbp)
+ 2405 90FDFFFF
+ 2406 1533 660F6F85 movdqa -3776(%rbp), %xmm0
+ 2406 40F1FFFF
+ 2407 153b F30F7F85 movdqu %xmm0, -528(%rbp)
+ 2407 F0FDFFFF
+ 2408 .LBB526:
+ 2409 .LBB527:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2410 .loc 3 1278 0
+ 2411 1543 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2411 00000000
+ 2412 154b F30F6F8D movdqu -528(%rbp), %xmm1
+ 2412 F0FDFFFF
+ 2413 1553 F30F7F8D movdqu %xmm1, -496(%rbp)
+ 2413 10FEFFFF
+ 2414 155b F30F7F85 movdqu %xmm0, -512(%rbp)
+ 2414 00FEFFFF
+ 2415 1563 F30F6F85 movdqu -496(%rbp), %xmm0
+ 2415 10FEFFFF
+ 2416 156b F30F7F85 movdqu %xmm0, -464(%rbp)
+ 2416 30FEFFFF
+ 2417 1573 F30F6F85 movdqu -512(%rbp), %xmm0
+ 2417 00FEFFFF
+ 2418 157b F30F7F85 movdqu %xmm0, -480(%rbp)
+ 2418 20FEFFFF
+ 2419 .LBB528:
+ 2420 .LBB529:
+ 2421 .LBB530:
+ 2422 .LBB531:
+
GAS LISTING /tmp/ccPaCTqg.s page 105
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2423 .loc 1 529 0
+ 2424 1583 F30F6F8D movdqu -480(%rbp), %xmm1
+ 2424 20FEFFFF
+ 2425 158b F30F6F85 movdqu -464(%rbp), %xmm0
+ 2425 30FEFFFF
+ 2426 1593 660F3800 pshufb %xmm1, %xmm0
+ 2426 C1
+ 2427 .LBE531:
+ 2428 .LBE530:
+ 2429 .LBE529:
+ 2430 .LBE528:
+ 2431 .LBE527:
+ 2432 .LBE526:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2433 .loc 3 1568 0
+ 2434 1598 660F7F85 movdqa %xmm0, -3776(%rbp)
+ 2434 40F1FFFF
+ 2435 15a0 660F6F85 movdqa -3776(%rbp), %xmm0
+ 2435 40F1FFFF
+ 2436 15a8 660FEF85 pxor -624(%rbp), %xmm0
+ 2436 90FDFFFF
+ 2437 15b0 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 2437 90FDFFFF
+ 2438 15b8 660F6F85 movdqa -3776(%rbp), %xmm0
+ 2438 40F1FFFF
+ 2439 15c0 F30F7F85 movdqu %xmm0, -448(%rbp)
+ 2439 40FEFFFF
+ 2440 .LBB532:
+ 2441 .LBB533:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2442 .loc 3 1278 0
+ 2443 15c8 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2443 00000000
+ 2444 15d0 F30F6F8D movdqu -448(%rbp), %xmm1
+ 2444 40FEFFFF
+ 2445 15d8 F30F7F8D movdqu %xmm1, -416(%rbp)
+ 2445 60FEFFFF
+ 2446 15e0 F30F7F85 movdqu %xmm0, -432(%rbp)
+ 2446 50FEFFFF
+ 2447 15e8 F30F6F85 movdqu -416(%rbp), %xmm0
+ 2447 60FEFFFF
+ 2448 15f0 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 2448 80FEFFFF
+ 2449 15f8 F30F6F85 movdqu -432(%rbp), %xmm0
+ 2449 50FEFFFF
+ 2450 1600 F30F7F85 movdqu %xmm0, -400(%rbp)
+ 2450 70FEFFFF
+ 2451 .LBB534:
+ 2452 .LBB535:
+ 2453 .LBB536:
+ 2454 .LBB537:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2455 .loc 1 529 0
+ 2456 1608 F30F6F8D movdqu -400(%rbp), %xmm1
+ 2456 70FEFFFF
+ 2457 1610 F30F6F85 movdqu -384(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 106
+
+
+ 2457 80FEFFFF
+ 2458 1618 660F3800 pshufb %xmm1, %xmm0
+ 2458 C1
+ 2459 .LBE537:
+ 2460 .LBE536:
+ 2461 .LBE535:
+ 2462 .LBE534:
+ 2463 .LBE533:
+ 2464 .LBE532:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2465 .loc 3 1569 0
+ 2466 161d 660F7F85 movdqa %xmm0, -3776(%rbp)
+ 2466 40F1FFFF
+ 2467 1625 660F6F85 movdqa -3776(%rbp), %xmm0
+ 2467 40F1FFFF
+ 2468 162d 660FEF85 pxor -624(%rbp), %xmm0
+ 2468 90FDFFFF
+ 2469 1635 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 2469 90FDFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2470 .loc 3 1571 0
+ 2471 163d F30F6F85 movdqu -624(%rbp), %xmm0
+ 2471 90FDFFFF
+ 2472 .LBE519:
+ 2473 .LBE518:
+ 2474 .loc 3 1752 0
+ 2475 1645 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2475 80F1FFFF
+ 2476 164d F30F6F85 movdqu -3696(%rbp), %xmm0
+ 2476 90F1FFFF
+ 2477 1655 F30F6F8D movdqu -3712(%rbp), %xmm1
+ 2477 80F1FFFF
+ 2478 165d 660FEFC1 pxor %xmm1, %xmm0
+ 2479 1661 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2479 80F1FFFF
+ 2480 1669 488B8578 movq -3720(%rbp), %rax
+ 2480 F1FFFF
+ 2481 1670 48059000 addq $144, %rax
+ 2481 0000
+ 2482 1676 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2482 80F1FFFF
+ 2483 167e F30F7F00 movdqu %xmm0, (%rax)
+ 2484 1682 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2484 80F1FFFF
+ 2485 168a F30F7F85 movdqu %xmm0, -352(%rbp)
+ 2485 A0FEFFFF
+ 2486 .LBB538:
+ 2487 .LBB539:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 2488 .loc 3 1673 0
+ 2489 1692 F30F6F85 movdqu -352(%rbp), %xmm0
+ 2489 A0FEFFFF
+ 2490 169a 660F7F85 movdqa %xmm0, -3760(%rbp)
+ 2490 50F1FFFF
+ 2491 16a2 660F6F85 movdqa -3760(%rbp), %xmm0
+ 2491 50F1FFFF
+ 2492 16aa F30F7F85 movdqu %xmm0, -320(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 107
+
+
+ 2492 C0FEFFFF
+ 2493 .LBB540:
+ 2494 .LBB541:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 2495 .loc 1 852 0
+ 2496 16b2 F30F6F85 movdqu -320(%rbp), %xmm0
+ 2496 C0FEFFFF
+ 2497 16ba 660F3ADF aeskeygenassist $54, %xmm0, %xmm0
+ 2497 C036
+ 2498 .LBE541:
+ 2499 .LBE540:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2500 .loc 3 1674 0
+ 2501 16c0 660F7F85 movdqa %xmm0, -3760(%rbp)
+ 2501 50F1FFFF
+ 2502 16c8 660F6F85 movdqa -3760(%rbp), %xmm0
+ 2502 50F1FFFF
+ 2503 16d0 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 2503 D0FEFFFF
+ 2504 16d8 F30F6F85 movdqu -304(%rbp), %xmm0
+ 2504 D0FEFFFF
+ 2505 16e0 F30F7F85 movdqu %xmm0, -272(%rbp)
+ 2505 F0FEFFFF
+ 2506 .LBB542:
+ 2507 .LBB543:
+ 2508 .LBB544:
+ 2509 .LBB545:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2510 .loc 1 450 0
+ 2511 16e8 F30F6F85 movdqu -272(%rbp), %xmm0
+ 2511 F0FEFFFF
+ 2512 16f0 660F70C0 pshufd $255, %xmm0, %xmm0
+ 2512 FF
+ 2513 .LBE545:
+ 2514 .LBE544:
+ 2515 .LBE543:
+ 2516 .LBE542:
+ 2517 .LBE539:
+ 2518 .LBE538:
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x36,10);
+ 2519 .loc 3 1753 0
+ 2520 16f5 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 2520 90F1FFFF
+ 2521 16fd F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2521 80F1FFFF
+ 2522 1705 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 2522 00FFFFFF
+ 2523 .LBB546:
+ 2524 .LBB547:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 2525 .loc 3 1565 0
+ 2526 170d F30F6F85 movdqu -256(%rbp), %xmm0
+ 2526 00FFFFFF
+ 2527 1715 660F7F85 movdqa %xmm0, -3744(%rbp)
+ 2527 60F1FFFF
+ 2528 171d 660F6F85 movdqa -3744(%rbp), %xmm0
+ 2528 60F1FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 108
+
+
+ 2529 1725 F30F7F85 movdqu %xmm0, -240(%rbp)
+ 2529 10FFFFFF
+ 2530 .LBB548:
+ 2531 .LBB549:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2532 .loc 3 1278 0
+ 2533 172d 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2533 00000000
+ 2534 1735 F30F6F8D movdqu -240(%rbp), %xmm1
+ 2534 10FFFFFF
+ 2535 173d F30F7F8D movdqu %xmm1, -208(%rbp)
+ 2535 30FFFFFF
+ 2536 1745 F30F7F85 movdqu %xmm0, -224(%rbp)
+ 2536 20FFFFFF
+ 2537 174d F30F6F85 movdqu -208(%rbp), %xmm0
+ 2537 30FFFFFF
+ 2538 1755 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 2538 50FFFFFF
+ 2539 175d F30F6F85 movdqu -224(%rbp), %xmm0
+ 2539 20FFFFFF
+ 2540 1765 F30F7F85 movdqu %xmm0, -192(%rbp)
+ 2540 40FFFFFF
+ 2541 .LBB550:
+ 2542 .LBB551:
+ 2543 .LBB552:
+ 2544 .LBB553:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2545 .loc 1 529 0
+ 2546 176d F30F6F8D movdqu -192(%rbp), %xmm1
+ 2546 40FFFFFF
+ 2547 1775 F30F6F85 movdqu -176(%rbp), %xmm0
+ 2547 50FFFFFF
+ 2548 177d 660F3800 pshufb %xmm1, %xmm0
+ 2548 C1
+ 2549 .LBE553:
+ 2550 .LBE552:
+ 2551 .LBE551:
+ 2552 .LBE550:
+ 2553 .LBE549:
+ 2554 .LBE548:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2555 .loc 3 1567 0
+ 2556 1782 660F7F85 movdqa %xmm0, -3744(%rbp)
+ 2556 60F1FFFF
+ 2557 178a 660F6F85 movdqa -3744(%rbp), %xmm0
+ 2557 60F1FFFF
+ 2558 1792 660FEF85 pxor -256(%rbp), %xmm0
+ 2558 00FFFFFF
+ 2559 179a F30F7F85 movdqu %xmm0, -256(%rbp)
+ 2559 00FFFFFF
+ 2560 17a2 660F6F85 movdqa -3744(%rbp), %xmm0
+ 2560 60F1FFFF
+ 2561 17aa F30F7F85 movdqu %xmm0, -160(%rbp)
+ 2561 60FFFFFF
+ 2562 .LBB554:
+ 2563 .LBB555:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccPaCTqg.s page 109
+
+
+ 2564 .loc 3 1278 0
+ 2565 17b2 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2565 00000000
+ 2566 17ba F30F6F8D movdqu -160(%rbp), %xmm1
+ 2566 60FFFFFF
+ 2567 17c2 F30F7F4D movdqu %xmm1, -128(%rbp)
+ 2567 80
+ 2568 17c7 F30F7F85 movdqu %xmm0, -144(%rbp)
+ 2568 70FFFFFF
+ 2569 17cf F30F6F45 movdqu -128(%rbp), %xmm0
+ 2569 80
+ 2570 17d4 F30F7F45 movdqu %xmm0, -96(%rbp)
+ 2570 A0
+ 2571 17d9 F30F6F85 movdqu -144(%rbp), %xmm0
+ 2571 70FFFFFF
+ 2572 17e1 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 2572 90
+ 2573 .LBB556:
+ 2574 .LBB557:
+ 2575 .LBB558:
+ 2576 .LBB559:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2577 .loc 1 529 0
+ 2578 17e6 F30F6F4D movdqu -112(%rbp), %xmm1
+ 2578 90
+ 2579 17eb F30F6F45 movdqu -96(%rbp), %xmm0
+ 2579 A0
+ 2580 17f0 660F3800 pshufb %xmm1, %xmm0
+ 2580 C1
+ 2581 .LBE559:
+ 2582 .LBE558:
+ 2583 .LBE557:
+ 2584 .LBE556:
+ 2585 .LBE555:
+ 2586 .LBE554:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2587 .loc 3 1568 0
+ 2588 17f5 660F7F85 movdqa %xmm0, -3744(%rbp)
+ 2588 60F1FFFF
+ 2589 17fd 660F6F85 movdqa -3744(%rbp), %xmm0
+ 2589 60F1FFFF
+ 2590 1805 660FEF85 pxor -256(%rbp), %xmm0
+ 2590 00FFFFFF
+ 2591 180d F30F7F85 movdqu %xmm0, -256(%rbp)
+ 2591 00FFFFFF
+ 2592 1815 660F6F85 movdqa -3744(%rbp), %xmm0
+ 2592 60F1FFFF
+ 2593 181d F30F7F45 movdqu %xmm0, -80(%rbp)
+ 2593 B0
+ 2594 .LBB560:
+ 2595 .LBB561:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2596 .loc 3 1278 0
+ 2597 1822 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2597 00000000
+ 2598 182a F30F6F4D movdqu -80(%rbp), %xmm1
+ 2598 B0
+
GAS LISTING /tmp/ccPaCTqg.s page 110
+
+
+ 2599 182f F30F7F4D movdqu %xmm1, -48(%rbp)
+ 2599 D0
+ 2600 1834 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 2600 C0
+ 2601 1839 F30F6F45 movdqu -48(%rbp), %xmm0
+ 2601 D0
+ 2602 183e F30F7F45 movdqu %xmm0, -16(%rbp)
+ 2602 F0
+ 2603 1843 F30F6F45 movdqu -64(%rbp), %xmm0
+ 2603 C0
+ 2604 1848 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 2604 E0
+ 2605 .LBB562:
+ 2606 .LBB563:
+ 2607 .LBB564:
+ 2608 .LBB565:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2609 .loc 1 529 0
+ 2610 184d F30F6F4D movdqu -32(%rbp), %xmm1
+ 2610 E0
+ 2611 1852 F30F6F45 movdqu -16(%rbp), %xmm0
+ 2611 F0
+ 2612 1857 660F3800 pshufb %xmm1, %xmm0
+ 2612 C1
+ 2613 .LBE565:
+ 2614 .LBE564:
+ 2615 .LBE563:
+ 2616 .LBE562:
+ 2617 .LBE561:
+ 2618 .LBE560:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2619 .loc 3 1569 0
+ 2620 185c 660F7F85 movdqa %xmm0, -3744(%rbp)
+ 2620 60F1FFFF
+ 2621 1864 660F6F85 movdqa -3744(%rbp), %xmm0
+ 2621 60F1FFFF
+ 2622 186c 660FEF85 pxor -256(%rbp), %xmm0
+ 2622 00FFFFFF
+ 2623 1874 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 2623 00FFFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2624 .loc 3 1571 0
+ 2625 187c F30F6F85 movdqu -256(%rbp), %xmm0
+ 2625 00FFFFFF
+ 2626 .LBE547:
+ 2627 .LBE546:
+ 2628 .loc 3 1753 0
+ 2629 1884 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2629 80F1FFFF
+ 2630 188c F30F6F85 movdqu -3696(%rbp), %xmm0
+ 2630 90F1FFFF
+ 2631 1894 F30F6F8D movdqu -3712(%rbp), %xmm1
+ 2631 80F1FFFF
+ 2632 189c 660FEFC1 pxor %xmm1, %xmm0
+ 2633 18a0 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 2633 80F1FFFF
+ 2634 18a8 488B8578 movq -3720(%rbp), %rax
+
GAS LISTING /tmp/ccPaCTqg.s page 111
+
+
+ 2634 F1FFFF
+ 2635 18af 4805A000 addq $160, %rax
+ 2635 0000
+ 2636 18b5 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 2636 80F1FFFF
+ 2637 18bd F30F7F00 movdqu %xmm0, (%rax)
+1754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 2638 .loc 3 1754 0
+ 2639 18c1 C9 leave
+ 2640 18c2 C3 ret
+ 2641 .cfi_endproc
+ 2642 .LFE656:
+ 2643 .size KAESBlockCipherVecAesNiKeyExpansion128, .-KAESBlockCipherVecAesNiKeyExpansion128
+ 2644 .type KAESBlockCipherVecAesNiKeyExpansion192, @function
+ 2645 KAESBlockCipherVecAesNiKeyExpansion192:
+ 2646 .LFB657:
+1755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * w, const AESByte * key)
+1758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** OUTMSG(("\n\n\n%s: Not my code\n\n\n",__func__));
+1760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_128, AES_Nk_128);
+1761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * round_keys, const AESByte * key)
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 2647 .loc 3 1768 0
+ 2648 .cfi_startproc
+ 2649 18c3 55 pushq %rbp
+ 2650 .LCFI14:
+ 2651 .cfi_def_cfa_offset 16
+ 2652 18c4 4889E5 movq %rsp, %rbp
+ 2653 .cfi_offset 6, -16
+ 2654 .LCFI15:
+ 2655 .cfi_def_cfa_register 6
+ 2656 18c7 4881EC38 subq $6200, %rsp
+ 2656 180000
+ 2657 18ce 4889BD48 movq %rdi, -5816(%rbp)
+ 2657 E9FFFF
+ 2658 18d5 4889B540 movq %rsi, -5824(%rbp)
+ 2658 E9FFFF
+ 2659 .loc 3 1768 0
+ 2660 18dc 488B8540 movq -5824(%rbp), %rax
+ 2660 E9FFFF
+ 2661 18e3 48898550 movq %rax, -5808(%rbp)
+ 2661 E9FFFF
+ 2662 .LBB1000:
+ 2663 .LBB1001:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 2664 .loc 3 126 0
+ 2665 18ea 488B8550 movq -5808(%rbp), %rax
+ 2665 E9FFFF
+ 2666 18f1 4889C7 movq %rax, %rdi
+
GAS LISTING /tmp/ccPaCTqg.s page 112
+
+
+ 2667 #APP
+ 2668 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 2669 movdqu (%rdi),%xmm0
+ 2670 # 0 "" 2
+ 2671 #NO_APP
+ 2672 18f8 660F7F85 movdqa %xmm0, -6224(%rbp)
+ 2672 B0E7FFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 2673 .loc 3 129 0
+ 2674 1900 660F6F85 movdqa -6224(%rbp), %xmm0
+ 2674 B0E7FFFF
+ 2675 .LBE1001:
+ 2676 .LBE1000:
+1769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* work on three blocks at a time which is two Nr worth
+1770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * we'll build it with 6 words in v0:v1 and 6 words in w0:w1
+1771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but move them them into v0:v1:v2 before writing them to
+1772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the key schedule
+1773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec v0, v1, v2, v3, v4;
+1776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec k; /* we'll only need one of the key gen assist blocks at a time */
+1777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 0 */
+1779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(StateIn) (key); /* k0 : k1 : k2 : k3 */
+ 2677 .loc 3 1779 0
+ 2678 1908 660F7F85 movdqa %xmm0, -6320(%rbp)
+ 2678 50E7FFFF
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateIn) (key+8); /* k2 : k3 : k4 : k5 */
+ 2679 .loc 3 1780 0
+ 2680 1910 488B8540 movq -5824(%rbp), %rax
+ 2680 E9FFFF
+ 2681 1917 4883C008 addq $8, %rax
+ 2682 191b 48898558 movq %rax, -5800(%rbp)
+ 2682 E9FFFF
+ 2683 .LBB1002:
+ 2684 .LBB1003:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 2685 .loc 3 126 0
+ 2686 1922 488B8558 movq -5800(%rbp), %rax
+ 2686 E9FFFF
+ 2687 1929 4889C7 movq %rax, %rdi
+ 2688 #APP
+ 2689 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 2690 movdqu (%rdi),%xmm0
+ 2691 # 0 "" 2
+ 2692 #NO_APP
+ 2693 1930 660F7F85 movdqa %xmm0, -6208(%rbp)
+ 2693 C0E7FFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 2694 .loc 3 129 0
+ 2695 1938 660F6F85 movdqa -6208(%rbp), %xmm0
+ 2695 C0E7FFFF
+ 2696 .LBE1003:
+ 2697 .LBE1002:
+ 2698 .loc 3 1780 0
+ 2699 1940 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 2699 60E7FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 113
+
+
+ 2700 1948 660F6F95 movdqa -6304(%rbp), %xmm2
+ 2700 60E7FFFF
+ 2701 1950 F30F7F95 movdqu %xmm2, -5792(%rbp)
+ 2701 60E9FFFF
+ 2702 .LBB1004:
+ 2703 .LBB1005:
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2704 .loc 3 1301 0
+ 2705 1958 660F6F05 movdqa mask.8011(%rip), %xmm0
+ 2705 00000000
+ 2706 1960 F30F6F8D movdqu -5792(%rbp), %xmm1
+ 2706 60E9FFFF
+ 2707 1968 F30F7F8D movdqu %xmm1, -5760(%rbp)
+ 2707 80E9FFFF
+ 2708 1970 F30F7F85 movdqu %xmm0, -5776(%rbp)
+ 2708 70E9FFFF
+ 2709 1978 F30F6F85 movdqu -5760(%rbp), %xmm0
+ 2709 80E9FFFF
+ 2710 1980 F30F7F85 movdqu %xmm0, -5728(%rbp)
+ 2710 A0E9FFFF
+ 2711 1988 F30F6F85 movdqu -5776(%rbp), %xmm0
+ 2711 70E9FFFF
+ 2712 1990 F30F7F85 movdqu %xmm0, -5744(%rbp)
+ 2712 90E9FFFF
+ 2713 .LBB1006:
+ 2714 .LBB1007:
+ 2715 .LBB1008:
+ 2716 .LBB1009:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2717 .loc 1 529 0
+ 2718 1998 F30F6F8D movdqu -5744(%rbp), %xmm1
+ 2718 90E9FFFF
+ 2719 19a0 F30F6F85 movdqu -5728(%rbp), %xmm0
+ 2719 A0E9FFFF
+ 2720 19a8 660F3800 pshufb %xmm1, %xmm0
+ 2720 C1
+ 2721 .LBE1009:
+ 2722 .LBE1008:
+ 2723 .LBE1007:
+ 2724 .LBE1006:
+ 2725 .LBE1005:
+ 2726 .LBE1004:
+1781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateShiftRight64) (v1); /* k4 : k5 : 0 : 0 */
+ 2727 .loc 3 1781 0
+ 2728 19ad 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 2728 60E7FFFF
+1782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = v0; /* K0:K1:K2:K3 */
+ 2729 .loc 3 1783 0
+ 2730 19b5 488B8548 movq -5816(%rbp), %rax
+ 2730 E9FFFF
+ 2731 19bc 660F6F85 movdqa -6320(%rbp), %xmm0
+ 2731 50E7FFFF
+ 2732 19c4 660F7F00 movdqa %xmm0, (%rax)
+1784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+
GAS LISTING /tmp/ccPaCTqg.s page 114
+
+
+1787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 2733 .loc 3 1788 0
+ 2734 19c8 660F6F95 movdqa -6304(%rbp), %xmm2
+ 2734 60E7FFFF
+ 2735 19d0 660F7F95 movdqa %xmm2, -6240(%rbp)
+ 2735 A0E7FFFF
+ 2736 19d8 660F6F85 movdqa -6240(%rbp), %xmm0
+ 2736 A0E7FFFF
+ 2737 19e0 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 2737 C0E9FFFF
+ 2738 .LBB1010:
+ 2739 .LBB1011:
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 2740 .loc 3 1621 0
+ 2741 19e8 F30F6F95 movdqu -5696(%rbp), %xmm2
+ 2741 C0E9FFFF
+ 2742 19f0 660F7F95 movdqa %xmm2, -6192(%rbp)
+ 2742 D0E7FFFF
+ 2743 19f8 660F6F85 movdqa -6192(%rbp), %xmm0
+ 2743 D0E7FFFF
+ 2744 1a00 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 2744 E0E9FFFF
+ 2745 .LBB1012:
+ 2746 .LBB1013:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 2747 .loc 1 852 0
+ 2748 1a08 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 2748 E0E9FFFF
+ 2749 1a10 660F3ADF aeskeygenassist $1, %xmm0, %xmm0
+ 2749 C001
+ 2750 .LBE1013:
+ 2751 .LBE1012:
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2752 .loc 3 1622 0
+ 2753 1a16 660F7F85 movdqa %xmm0, -6192(%rbp)
+ 2753 D0E7FFFF
+ 2754 1a1e 660F6F95 movdqa -6192(%rbp), %xmm2
+ 2754 D0E7FFFF
+ 2755 1a26 F30F7F95 movdqu %xmm2, -5648(%rbp)
+ 2755 F0E9FFFF
+ 2756 1a2e F30F6F85 movdqu -5648(%rbp), %xmm0
+ 2756 F0E9FFFF
+ 2757 1a36 F30F7F85 movdqu %xmm0, -5616(%rbp)
+ 2757 10EAFFFF
+ 2758 .LBB1014:
+ 2759 .LBB1015:
+ 2760 .LBB1016:
+ 2761 .LBB1017:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2762 .loc 1 450 0
+ 2763 1a3e F30F6F85 movdqu -5616(%rbp), %xmm0
+ 2763 10EAFFFF
+ 2764 1a46 660F70C0 pshufd $85, %xmm0, %xmm0
+ 2764 55
+ 2765 .LBE1017:
+ 2766 .LBE1016:
+
GAS LISTING /tmp/ccPaCTqg.s page 115
+
+
+ 2767 .LBE1015:
+ 2768 .LBE1014:
+ 2769 .LBE1011:
+ 2770 .LBE1010:
+ 2771 .loc 3 1788 0
+ 2772 1a4b 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 2772 A0E7FFFF
+ 2773 1a53 660F6F85 movdqa -6320(%rbp), %xmm0
+ 2773 50E7FFFF
+ 2774 1a5b F30F7F85 movdqu %xmm0, -5600(%rbp)
+ 2774 20EAFFFF
+ 2775 .LBB1018:
+ 2776 .LBB1019:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 2777 .loc 3 1565 0
+ 2778 1a63 F30F6F95 movdqu -5600(%rbp), %xmm2
+ 2778 20EAFFFF
+ 2779 1a6b 660F7F95 movdqa %xmm2, -6176(%rbp)
+ 2779 E0E7FFFF
+ 2780 1a73 660F6F85 movdqa -6176(%rbp), %xmm0
+ 2780 E0E7FFFF
+ 2781 1a7b F30F7F85 movdqu %xmm0, -5584(%rbp)
+ 2781 30EAFFFF
+ 2782 .LBB1020:
+ 2783 .LBB1021:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2784 .loc 3 1278 0
+ 2785 1a83 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2785 00000000
+ 2786 1a8b F30F6F8D movdqu -5584(%rbp), %xmm1
+ 2786 30EAFFFF
+ 2787 1a93 F30F7F8D movdqu %xmm1, -5552(%rbp)
+ 2787 50EAFFFF
+ 2788 1a9b F30F7F85 movdqu %xmm0, -5568(%rbp)
+ 2788 40EAFFFF
+ 2789 1aa3 F30F6F85 movdqu -5552(%rbp), %xmm0
+ 2789 50EAFFFF
+ 2790 1aab F30F7F85 movdqu %xmm0, -5520(%rbp)
+ 2790 70EAFFFF
+ 2791 1ab3 F30F6F85 movdqu -5568(%rbp), %xmm0
+ 2791 40EAFFFF
+ 2792 1abb F30F7F85 movdqu %xmm0, -5536(%rbp)
+ 2792 60EAFFFF
+ 2793 .LBB1022:
+ 2794 .LBB1023:
+ 2795 .LBB1024:
+ 2796 .LBB1025:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2797 .loc 1 529 0
+ 2798 1ac3 F30F6F8D movdqu -5536(%rbp), %xmm1
+ 2798 60EAFFFF
+ 2799 1acb F30F6F85 movdqu -5520(%rbp), %xmm0
+ 2799 70EAFFFF
+ 2800 1ad3 660F3800 pshufb %xmm1, %xmm0
+ 2800 C1
+ 2801 .LBE1025:
+ 2802 .LBE1024:
+
GAS LISTING /tmp/ccPaCTqg.s page 116
+
+
+ 2803 .LBE1023:
+ 2804 .LBE1022:
+ 2805 .LBE1021:
+ 2806 .LBE1020:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2807 .loc 3 1567 0
+ 2808 1ad8 660F7F85 movdqa %xmm0, -6176(%rbp)
+ 2808 E0E7FFFF
+ 2809 1ae0 660F6F85 movdqa -6176(%rbp), %xmm0
+ 2809 E0E7FFFF
+ 2810 1ae8 660FEF85 pxor -5600(%rbp), %xmm0
+ 2810 20EAFFFF
+ 2811 1af0 F30F7F85 movdqu %xmm0, -5600(%rbp)
+ 2811 20EAFFFF
+ 2812 1af8 660F6F95 movdqa -6176(%rbp), %xmm2
+ 2812 E0E7FFFF
+ 2813 1b00 F30F7F95 movdqu %xmm2, -5504(%rbp)
+ 2813 80EAFFFF
+ 2814 .LBB1026:
+ 2815 .LBB1027:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2816 .loc 3 1278 0
+ 2817 1b08 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2817 00000000
+ 2818 1b10 F30F6F8D movdqu -5504(%rbp), %xmm1
+ 2818 80EAFFFF
+ 2819 1b18 F30F7F8D movdqu %xmm1, -5472(%rbp)
+ 2819 A0EAFFFF
+ 2820 1b20 F30F7F85 movdqu %xmm0, -5488(%rbp)
+ 2820 90EAFFFF
+ 2821 1b28 F30F6F85 movdqu -5472(%rbp), %xmm0
+ 2821 A0EAFFFF
+ 2822 1b30 F30F7F85 movdqu %xmm0, -5440(%rbp)
+ 2822 C0EAFFFF
+ 2823 1b38 F30F6F85 movdqu -5488(%rbp), %xmm0
+ 2823 90EAFFFF
+ 2824 1b40 F30F7F85 movdqu %xmm0, -5456(%rbp)
+ 2824 B0EAFFFF
+ 2825 .LBB1028:
+ 2826 .LBB1029:
+ 2827 .LBB1030:
+ 2828 .LBB1031:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2829 .loc 1 529 0
+ 2830 1b48 F30F6F8D movdqu -5456(%rbp), %xmm1
+ 2830 B0EAFFFF
+ 2831 1b50 F30F6F85 movdqu -5440(%rbp), %xmm0
+ 2831 C0EAFFFF
+ 2832 1b58 660F3800 pshufb %xmm1, %xmm0
+ 2832 C1
+ 2833 .LBE1031:
+ 2834 .LBE1030:
+ 2835 .LBE1029:
+ 2836 .LBE1028:
+ 2837 .LBE1027:
+ 2838 .LBE1026:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccPaCTqg.s page 117
+
+
+ 2839 .loc 3 1568 0
+ 2840 1b5d 660F7F85 movdqa %xmm0, -6176(%rbp)
+ 2840 E0E7FFFF
+ 2841 1b65 660F6F85 movdqa -6176(%rbp), %xmm0
+ 2841 E0E7FFFF
+ 2842 1b6d 660FEF85 pxor -5600(%rbp), %xmm0
+ 2842 20EAFFFF
+ 2843 1b75 F30F7F85 movdqu %xmm0, -5600(%rbp)
+ 2843 20EAFFFF
+ 2844 1b7d 660F6F85 movdqa -6176(%rbp), %xmm0
+ 2844 E0E7FFFF
+ 2845 1b85 F30F7F85 movdqu %xmm0, -5424(%rbp)
+ 2845 D0EAFFFF
+ 2846 .LBB1032:
+ 2847 .LBB1033:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2848 .loc 3 1278 0
+ 2849 1b8d 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2849 00000000
+ 2850 1b95 F30F6F8D movdqu -5424(%rbp), %xmm1
+ 2850 D0EAFFFF
+ 2851 1b9d F30F7F8D movdqu %xmm1, -5392(%rbp)
+ 2851 F0EAFFFF
+ 2852 1ba5 F30F7F85 movdqu %xmm0, -5408(%rbp)
+ 2852 E0EAFFFF
+ 2853 1bad F30F6F85 movdqu -5392(%rbp), %xmm0
+ 2853 F0EAFFFF
+ 2854 1bb5 F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 2854 10EBFFFF
+ 2855 1bbd F30F6F85 movdqu -5408(%rbp), %xmm0
+ 2855 E0EAFFFF
+ 2856 1bc5 F30F7F85 movdqu %xmm0, -5376(%rbp)
+ 2856 00EBFFFF
+ 2857 .LBB1034:
+ 2858 .LBB1035:
+ 2859 .LBB1036:
+ 2860 .LBB1037:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2861 .loc 1 529 0
+ 2862 1bcd F30F6F8D movdqu -5376(%rbp), %xmm1
+ 2862 00EBFFFF
+ 2863 1bd5 F30F6F85 movdqu -5360(%rbp), %xmm0
+ 2863 10EBFFFF
+ 2864 1bdd 660F3800 pshufb %xmm1, %xmm0
+ 2864 C1
+ 2865 .LBE1037:
+ 2866 .LBE1036:
+ 2867 .LBE1035:
+ 2868 .LBE1034:
+ 2869 .LBE1033:
+ 2870 .LBE1032:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2871 .loc 3 1569 0
+ 2872 1be2 660F7F85 movdqa %xmm0, -6176(%rbp)
+ 2872 E0E7FFFF
+ 2873 1bea 660F6F85 movdqa -6176(%rbp), %xmm0
+ 2873 E0E7FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 118
+
+
+ 2874 1bf2 660FEF85 pxor -5600(%rbp), %xmm0
+ 2874 20EAFFFF
+ 2875 1bfa F30F7F85 movdqu %xmm0, -5600(%rbp)
+ 2875 20EAFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2876 .loc 3 1571 0
+ 2877 1c02 F30F6F85 movdqu -5600(%rbp), %xmm0
+ 2877 20EAFFFF
+ 2878 .LBE1019:
+ 2879 .LBE1018:
+1789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1, 0x01); /* F(k5) : F(k5) : F(k5) : F(k5) */
+1790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k0 : k0^k1 :k0^k1^k2:k0^k1^k2^k3 */
+ 2880 .loc 3 1790 0
+ 2881 1c0a 660F7F85 movdqa %xmm0, -6272(%rbp)
+ 2881 80E7FFFF
+1791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k6 : k7 : k8 : k9 */
+ 2882 .loc 3 1791 0
+ 2883 1c12 660F6F95 movdqa -6272(%rbp), %xmm2
+ 2883 80E7FFFF
+ 2884 1c1a 660FEF95 pxor -6240(%rbp), %xmm2
+ 2884 A0E7FFFF
+ 2885 1c22 660F7F95 movdqa %xmm2, -6272(%rbp)
+ 2885 80E7FFFF
+ 2886 1c2a 660F6F85 movdqa -6304(%rbp), %xmm0
+ 2886 60E7FFFF
+ 2887 1c32 F30F7F85 movdqu %xmm0, -5344(%rbp)
+ 2887 20EBFFFF
+ 2888 .LBB1038:
+ 2889 .LBB1039:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 2890 .loc 3 1565 0
+ 2891 1c3a F30F6F95 movdqu -5344(%rbp), %xmm2
+ 2891 20EBFFFF
+ 2892 1c42 660F7F95 movdqa %xmm2, -6160(%rbp)
+ 2892 F0E7FFFF
+ 2893 1c4a 660F6F85 movdqa -6160(%rbp), %xmm0
+ 2893 F0E7FFFF
+ 2894 1c52 F30F7F85 movdqu %xmm0, -5328(%rbp)
+ 2894 30EBFFFF
+ 2895 .LBB1040:
+ 2896 .LBB1041:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2897 .loc 3 1278 0
+ 2898 1c5a 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2898 00000000
+ 2899 1c62 F30F6F8D movdqu -5328(%rbp), %xmm1
+ 2899 30EBFFFF
+ 2900 1c6a F30F7F8D movdqu %xmm1, -5296(%rbp)
+ 2900 50EBFFFF
+ 2901 1c72 F30F7F85 movdqu %xmm0, -5312(%rbp)
+ 2901 40EBFFFF
+ 2902 1c7a F30F6F85 movdqu -5296(%rbp), %xmm0
+ 2902 50EBFFFF
+ 2903 1c82 F30F7F85 movdqu %xmm0, -5264(%rbp)
+ 2903 70EBFFFF
+ 2904 1c8a F30F6F85 movdqu -5312(%rbp), %xmm0
+ 2904 40EBFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 119
+
+
+ 2905 1c92 F30F7F85 movdqu %xmm0, -5280(%rbp)
+ 2905 60EBFFFF
+ 2906 .LBB1042:
+ 2907 .LBB1043:
+ 2908 .LBB1044:
+ 2909 .LBB1045:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2910 .loc 1 529 0
+ 2911 1c9a F30F6F8D movdqu -5280(%rbp), %xmm1
+ 2911 60EBFFFF
+ 2912 1ca2 F30F6F85 movdqu -5264(%rbp), %xmm0
+ 2912 70EBFFFF
+ 2913 1caa 660F3800 pshufb %xmm1, %xmm0
+ 2913 C1
+ 2914 .LBE1045:
+ 2915 .LBE1044:
+ 2916 .LBE1043:
+ 2917 .LBE1042:
+ 2918 .LBE1041:
+ 2919 .LBE1040:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2920 .loc 3 1567 0
+ 2921 1caf 660F7F85 movdqa %xmm0, -6160(%rbp)
+ 2921 F0E7FFFF
+ 2922 1cb7 660F6F85 movdqa -6160(%rbp), %xmm0
+ 2922 F0E7FFFF
+ 2923 1cbf 660FEF85 pxor -5344(%rbp), %xmm0
+ 2923 20EBFFFF
+ 2924 1cc7 F30F7F85 movdqu %xmm0, -5344(%rbp)
+ 2924 20EBFFFF
+ 2925 1ccf 660F6F95 movdqa -6160(%rbp), %xmm2
+ 2925 F0E7FFFF
+ 2926 1cd7 F30F7F95 movdqu %xmm2, -5248(%rbp)
+ 2926 80EBFFFF
+ 2927 .LBB1046:
+ 2928 .LBB1047:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2929 .loc 3 1278 0
+ 2930 1cdf 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2930 00000000
+ 2931 1ce7 F30F6F8D movdqu -5248(%rbp), %xmm1
+ 2931 80EBFFFF
+ 2932 1cef F30F7F8D movdqu %xmm1, -5216(%rbp)
+ 2932 A0EBFFFF
+ 2933 1cf7 F30F7F85 movdqu %xmm0, -5232(%rbp)
+ 2933 90EBFFFF
+ 2934 1cff F30F6F85 movdqu -5216(%rbp), %xmm0
+ 2934 A0EBFFFF
+ 2935 1d07 F30F7F85 movdqu %xmm0, -5184(%rbp)
+ 2935 C0EBFFFF
+ 2936 1d0f F30F6F85 movdqu -5232(%rbp), %xmm0
+ 2936 90EBFFFF
+ 2937 1d17 F30F7F85 movdqu %xmm0, -5200(%rbp)
+ 2937 B0EBFFFF
+ 2938 .LBB1048:
+ 2939 .LBB1049:
+ 2940 .LBB1050:
+
GAS LISTING /tmp/ccPaCTqg.s page 120
+
+
+ 2941 .LBB1051:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2942 .loc 1 529 0
+ 2943 1d1f F30F6F8D movdqu -5200(%rbp), %xmm1
+ 2943 B0EBFFFF
+ 2944 1d27 F30F6F85 movdqu -5184(%rbp), %xmm0
+ 2944 C0EBFFFF
+ 2945 1d2f 660F3800 pshufb %xmm1, %xmm0
+ 2945 C1
+ 2946 .LBE1051:
+ 2947 .LBE1050:
+ 2948 .LBE1049:
+ 2949 .LBE1048:
+ 2950 .LBE1047:
+ 2951 .LBE1046:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2952 .loc 3 1568 0
+ 2953 1d34 660F7F85 movdqa %xmm0, -6160(%rbp)
+ 2953 F0E7FFFF
+ 2954 1d3c 660F6F85 movdqa -6160(%rbp), %xmm0
+ 2954 F0E7FFFF
+ 2955 1d44 660FEF85 pxor -5344(%rbp), %xmm0
+ 2955 20EBFFFF
+ 2956 1d4c F30F7F85 movdqu %xmm0, -5344(%rbp)
+ 2956 20EBFFFF
+ 2957 1d54 660F6F85 movdqa -6160(%rbp), %xmm0
+ 2957 F0E7FFFF
+ 2958 1d5c F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 2958 D0EBFFFF
+ 2959 .LBB1052:
+ 2960 .LBB1053:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2961 .loc 3 1278 0
+ 2962 1d64 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 2962 00000000
+ 2963 1d6c F30F6F8D movdqu -5168(%rbp), %xmm1
+ 2963 D0EBFFFF
+ 2964 1d74 F30F7F8D movdqu %xmm1, -5136(%rbp)
+ 2964 F0EBFFFF
+ 2965 1d7c F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 2965 E0EBFFFF
+ 2966 1d84 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 2966 F0EBFFFF
+ 2967 1d8c F30F7F85 movdqu %xmm0, -5104(%rbp)
+ 2967 10ECFFFF
+ 2968 1d94 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 2968 E0EBFFFF
+ 2969 1d9c F30F7F85 movdqu %xmm0, -5120(%rbp)
+ 2969 00ECFFFF
+ 2970 .LBB1054:
+ 2971 .LBB1055:
+ 2972 .LBB1056:
+ 2973 .LBB1057:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2974 .loc 1 529 0
+ 2975 1da4 F30F6F8D movdqu -5120(%rbp), %xmm1
+ 2975 00ECFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 121
+
+
+ 2976 1dac F30F6F85 movdqu -5104(%rbp), %xmm0
+ 2976 10ECFFFF
+ 2977 1db4 660F3800 pshufb %xmm1, %xmm0
+ 2977 C1
+ 2978 .LBE1057:
+ 2979 .LBE1056:
+ 2980 .LBE1055:
+ 2981 .LBE1054:
+ 2982 .LBE1053:
+ 2983 .LBE1052:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2984 .loc 3 1569 0
+ 2985 1db9 660F7F85 movdqa %xmm0, -6160(%rbp)
+ 2985 F0E7FFFF
+ 2986 1dc1 660F6F85 movdqa -6160(%rbp), %xmm0
+ 2986 F0E7FFFF
+ 2987 1dc9 660FEF85 pxor -5344(%rbp), %xmm0
+ 2987 20EBFFFF
+ 2988 1dd1 F30F7F85 movdqu %xmm0, -5344(%rbp)
+ 2988 20EBFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2989 .loc 3 1571 0
+ 2990 1dd9 F30F6F85 movdqu -5344(%rbp), %xmm0
+ 2990 20EBFFFF
+ 2991 .LBE1039:
+ 2992 .LBE1038:
+1792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k4 : k4^k5 : k4^k5 : k4^k5 */
+ 2993 .loc 3 1792 0
+ 2994 1de1 660F7F85 movdqa %xmm0, -6256(%rbp)
+ 2994 90E7FFFF
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k9 : k9 : k9 : k9 */
+ 2995 .loc 3 1793 0
+ 2996 1de9 660F6F95 movdqa -6272(%rbp), %xmm2
+ 2996 80E7FFFF
+ 2997 1df1 660F7F95 movdqa %xmm2, -6240(%rbp)
+ 2997 A0E7FFFF
+ 2998 1df9 660F6F85 movdqa -6240(%rbp), %xmm0
+ 2998 A0E7FFFF
+ 2999 1e01 F30F7F85 movdqu %xmm0, -5088(%rbp)
+ 2999 20ECFFFF
+ 3000 1e09 F30F6F85 movdqu -5088(%rbp), %xmm0
+ 3000 20ECFFFF
+ 3001 1e11 F30F7F85 movdqu %xmm0, -5056(%rbp)
+ 3001 40ECFFFF
+ 3002 .LBB1058:
+ 3003 .LBB1059:
+ 3004 .LBB1060:
+ 3005 .LBB1061:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3006 .loc 1 450 0
+ 3007 1e19 F30F6F85 movdqu -5056(%rbp), %xmm0
+ 3007 40ECFFFF
+ 3008 1e21 660F70C0 pshufd $255, %xmm0, %xmm0
+ 3008 FF
+ 3009 .LBE1061:
+ 3010 .LBE1060:
+ 3011 .LBE1059:
+
GAS LISTING /tmp/ccPaCTqg.s page 122
+
+
+ 3012 .LBE1058:
+ 3013 .loc 3 1793 0
+ 3014 1e26 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3014 A0E7FFFF
+1794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k10 : k11 : k10 : k11 */
+ 3015 .loc 3 1794 0
+ 3016 1e2e 660F6F95 movdqa -6256(%rbp), %xmm2
+ 3016 90E7FFFF
+ 3017 1e36 660FEF95 pxor -6240(%rbp), %xmm2
+ 3017 A0E7FFFF
+ 3018 1e3e 660F7F95 movdqa %xmm2, -6256(%rbp)
+ 3018 90E7FFFF
+ 3019 1e46 660F6F85 movdqa -6304(%rbp), %xmm0
+ 3019 60E7FFFF
+ 3020 1e4e F30F7F85 movdqu %xmm0, -5024(%rbp)
+ 3020 60ECFFFF
+ 3021 1e56 660F6F95 movdqa -6272(%rbp), %xmm2
+ 3021 80E7FFFF
+ 3022 1e5e F30F7F95 movdqu %xmm2, -5040(%rbp)
+ 3022 50ECFFFF
+ 3023 1e66 F30F6F85 movdqu -5024(%rbp), %xmm0
+ 3023 60ECFFFF
+ 3024 1e6e F30F7F85 movdqu %xmm0, -4976(%rbp)
+ 3024 90ECFFFF
+ 3025 1e76 F30F6F85 movdqu -5040(%rbp), %xmm0
+ 3025 50ECFFFF
+ 3026 1e7e F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 3026 80ECFFFF
+ 3027 .LBB1062:
+ 3028 .LBB1063:
+ 3029 .LBB1064:
+ 3030 .LBB1065:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 3031 .loc 1 366 0
+ 3032 1e86 F20F1085 movsd -4992(%rbp), %xmm0
+ 3032 80ECFFFF
+ 3033 1e8e 660F1685 movhpd -4984(%rbp), %xmm0
+ 3033 88ECFFFF
+ 3034 1e96 F20F108D movsd -4976(%rbp), %xmm1
+ 3034 90ECFFFF
+ 3035 1e9e 660F168D movhpd -4968(%rbp), %xmm1
+ 3035 98ECFFFF
+ 3036 1ea6 660F28D1 movapd %xmm1, %xmm2
+ 3037 1eaa 660F14D0 unpcklpd %xmm0, %xmm2
+ 3038 1eae 660F28C2 movapd %xmm2, %xmm0
+ 3039 .LBE1065:
+ 3040 .LBE1064:
+ 3041 .LBE1063:
+ 3042 .LBE1062:
+1795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k4 : k5 : k6 : k7 */
+ 3043 .loc 3 1795 0
+ 3044 1eb2 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 3044 60E7FFFF
+1796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[1] = v1; /* K4:K5:K6:K7 */
+ 3045 .loc 3 1796 0
+ 3046 1eba 488B8548 movq -5816(%rbp), %rax
+ 3046 E9FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 123
+
+
+ 3047 1ec1 4883C010 addq $16, %rax
+ 3048 1ec5 660F6F85 movdqa -6304(%rbp), %xmm0
+ 3048 60E7FFFF
+ 3049 1ecd 660F7F00 movdqa %xmm0, (%rax)
+ 3050 1ed1 660F6F95 movdqa -6272(%rbp), %xmm2
+ 3050 80E7FFFF
+ 3051 1ed9 F30F7F95 movdqu %xmm2, -4944(%rbp)
+ 3051 B0ECFFFF
+ 3052 1ee1 660F6F85 movdqa -6256(%rbp), %xmm0
+ 3052 90E7FFFF
+ 3053 1ee9 F30F7F85 movdqu %xmm0, -4960(%rbp)
+ 3053 A0ECFFFF
+ 3054 1ef1 F30F6F85 movdqu -4944(%rbp), %xmm0
+ 3054 B0ECFFFF
+ 3055 1ef9 F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 3055 E0ECFFFF
+ 3056 1f01 F30F6F85 movdqu -4960(%rbp), %xmm0
+ 3056 A0ECFFFF
+ 3057 1f09 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 3057 D0ECFFFF
+ 3058 .LBB1066:
+ 3059 .LBB1067:
+ 3060 .LBB1068:
+ 3061 .LBB1069:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 3062 .loc 1 366 0
+ 3063 1f11 F20F108D movsd -4912(%rbp), %xmm1
+ 3063 D0ECFFFF
+ 3064 1f19 660F168D movhpd -4904(%rbp), %xmm1
+ 3064 D8ECFFFF
+ 3065 1f21 F20F1085 movsd -4896(%rbp), %xmm0
+ 3065 E0ECFFFF
+ 3066 1f29 660F1685 movhpd -4888(%rbp), %xmm0
+ 3066 E8ECFFFF
+ 3067 1f31 660FC6C1 shufpd $1, %xmm1, %xmm0
+ 3067 01
+ 3068 .LBE1069:
+ 3069 .LBE1068:
+ 3070 .LBE1067:
+ 3071 .LBE1066:
+1797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k8 : k9 : k10 : k11 */
+ 3072 .loc 3 1798 0
+ 3073 1f36 660F7F85 movdqa %xmm0, -6288(%rbp)
+ 3073 70E7FFFF
+1799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[2] = v2; /* K8:K9:K10:K11 */
+ 3074 .loc 3 1799 0
+ 3075 1f3e 488B8548 movq -5816(%rbp), %rax
+ 3075 E9FFFF
+ 3076 1f45 4883C020 addq $32, %rax
+ 3077 1f49 660F6F95 movdqa -6288(%rbp), %xmm2
+ 3077 70E7FFFF
+ 3078 1f51 660F7F10 movdqa %xmm2, (%rax)
+ 3079 1f55 660F6F85 movdqa -6272(%rbp), %xmm0
+ 3079 80E7FFFF
+ 3080 1f5d F30F7F85 movdqu %xmm0, -4880(%rbp)
+ 3080 F0ECFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 124
+
+
+ 3081 .LBB1070:
+ 3082 .LBB1071:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 3083 .loc 3 1565 0
+ 3084 1f65 F30F6F95 movdqu -4880(%rbp), %xmm2
+ 3084 F0ECFFFF
+ 3085 1f6d 660F7F95 movdqa %xmm2, -6144(%rbp)
+ 3085 00E8FFFF
+ 3086 1f75 660F6F85 movdqa -6144(%rbp), %xmm0
+ 3086 00E8FFFF
+ 3087 1f7d F30F7F85 movdqu %xmm0, -4864(%rbp)
+ 3087 00EDFFFF
+ 3088 .LBB1072:
+ 3089 .LBB1073:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3090 .loc 3 1278 0
+ 3091 1f85 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3091 00000000
+ 3092 1f8d F30F6F8D movdqu -4864(%rbp), %xmm1
+ 3092 00EDFFFF
+ 3093 1f95 F30F7F8D movdqu %xmm1, -4832(%rbp)
+ 3093 20EDFFFF
+ 3094 1f9d F30F7F85 movdqu %xmm0, -4848(%rbp)
+ 3094 10EDFFFF
+ 3095 1fa5 F30F6F85 movdqu -4832(%rbp), %xmm0
+ 3095 20EDFFFF
+ 3096 1fad F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 3096 40EDFFFF
+ 3097 1fb5 F30F6F85 movdqu -4848(%rbp), %xmm0
+ 3097 10EDFFFF
+ 3098 1fbd F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 3098 30EDFFFF
+ 3099 .LBB1074:
+ 3100 .LBB1075:
+ 3101 .LBB1076:
+ 3102 .LBB1077:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3103 .loc 1 529 0
+ 3104 1fc5 F30F6F8D movdqu -4816(%rbp), %xmm1
+ 3104 30EDFFFF
+ 3105 1fcd F30F6F85 movdqu -4800(%rbp), %xmm0
+ 3105 40EDFFFF
+ 3106 1fd5 660F3800 pshufb %xmm1, %xmm0
+ 3106 C1
+ 3107 .LBE1077:
+ 3108 .LBE1076:
+ 3109 .LBE1075:
+ 3110 .LBE1074:
+ 3111 .LBE1073:
+ 3112 .LBE1072:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3113 .loc 3 1567 0
+ 3114 1fda 660F7F85 movdqa %xmm0, -6144(%rbp)
+ 3114 00E8FFFF
+ 3115 1fe2 660F6F85 movdqa -6144(%rbp), %xmm0
+ 3115 00E8FFFF
+ 3116 1fea 660FEF85 pxor -4880(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 125
+
+
+ 3116 F0ECFFFF
+ 3117 1ff2 F30F7F85 movdqu %xmm0, -4880(%rbp)
+ 3117 F0ECFFFF
+ 3118 1ffa 660F6F95 movdqa -6144(%rbp), %xmm2
+ 3118 00E8FFFF
+ 3119 2002 F30F7F95 movdqu %xmm2, -4784(%rbp)
+ 3119 50EDFFFF
+ 3120 .LBB1078:
+ 3121 .LBB1079:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3122 .loc 3 1278 0
+ 3123 200a 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3123 00000000
+ 3124 2012 F30F6F8D movdqu -4784(%rbp), %xmm1
+ 3124 50EDFFFF
+ 3125 201a F30F7F8D movdqu %xmm1, -4752(%rbp)
+ 3125 70EDFFFF
+ 3126 2022 F30F7F85 movdqu %xmm0, -4768(%rbp)
+ 3126 60EDFFFF
+ 3127 202a F30F6F85 movdqu -4752(%rbp), %xmm0
+ 3127 70EDFFFF
+ 3128 2032 F30F7F85 movdqu %xmm0, -4720(%rbp)
+ 3128 90EDFFFF
+ 3129 203a F30F6F85 movdqu -4768(%rbp), %xmm0
+ 3129 60EDFFFF
+ 3130 2042 F30F7F85 movdqu %xmm0, -4736(%rbp)
+ 3130 80EDFFFF
+ 3131 .LBB1080:
+ 3132 .LBB1081:
+ 3133 .LBB1082:
+ 3134 .LBB1083:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3135 .loc 1 529 0
+ 3136 204a F30F6F8D movdqu -4736(%rbp), %xmm1
+ 3136 80EDFFFF
+ 3137 2052 F30F6F85 movdqu -4720(%rbp), %xmm0
+ 3137 90EDFFFF
+ 3138 205a 660F3800 pshufb %xmm1, %xmm0
+ 3138 C1
+ 3139 .LBE1083:
+ 3140 .LBE1082:
+ 3141 .LBE1081:
+ 3142 .LBE1080:
+ 3143 .LBE1079:
+ 3144 .LBE1078:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3145 .loc 3 1568 0
+ 3146 205f 660F7F85 movdqa %xmm0, -6144(%rbp)
+ 3146 00E8FFFF
+ 3147 2067 660F6F85 movdqa -6144(%rbp), %xmm0
+ 3147 00E8FFFF
+ 3148 206f 660FEF85 pxor -4880(%rbp), %xmm0
+ 3148 F0ECFFFF
+ 3149 2077 F30F7F85 movdqu %xmm0, -4880(%rbp)
+ 3149 F0ECFFFF
+ 3150 207f 660F6F85 movdqa -6144(%rbp), %xmm0
+ 3150 00E8FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 126
+
+
+ 3151 2087 F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 3151 A0EDFFFF
+ 3152 .LBB1084:
+ 3153 .LBB1085:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3154 .loc 3 1278 0
+ 3155 208f 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3155 00000000
+ 3156 2097 F30F6F8D movdqu -4704(%rbp), %xmm1
+ 3156 A0EDFFFF
+ 3157 209f F30F7F8D movdqu %xmm1, -4672(%rbp)
+ 3157 C0EDFFFF
+ 3158 20a7 F30F7F85 movdqu %xmm0, -4688(%rbp)
+ 3158 B0EDFFFF
+ 3159 20af F30F6F85 movdqu -4672(%rbp), %xmm0
+ 3159 C0EDFFFF
+ 3160 20b7 F30F7F85 movdqu %xmm0, -4640(%rbp)
+ 3160 E0EDFFFF
+ 3161 20bf F30F6F85 movdqu -4688(%rbp), %xmm0
+ 3161 B0EDFFFF
+ 3162 20c7 F30F7F85 movdqu %xmm0, -4656(%rbp)
+ 3162 D0EDFFFF
+ 3163 .LBB1086:
+ 3164 .LBB1087:
+ 3165 .LBB1088:
+ 3166 .LBB1089:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3167 .loc 1 529 0
+ 3168 20cf F30F6F8D movdqu -4656(%rbp), %xmm1
+ 3168 D0EDFFFF
+ 3169 20d7 F30F6F85 movdqu -4640(%rbp), %xmm0
+ 3169 E0EDFFFF
+ 3170 20df 660F3800 pshufb %xmm1, %xmm0
+ 3170 C1
+ 3171 .LBE1089:
+ 3172 .LBE1088:
+ 3173 .LBE1087:
+ 3174 .LBE1086:
+ 3175 .LBE1085:
+ 3176 .LBE1084:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3177 .loc 3 1569 0
+ 3178 20e4 660F7F85 movdqa %xmm0, -6144(%rbp)
+ 3178 00E8FFFF
+ 3179 20ec 660F6F85 movdqa -6144(%rbp), %xmm0
+ 3179 00E8FFFF
+ 3180 20f4 660FEF85 pxor -4880(%rbp), %xmm0
+ 3180 F0ECFFFF
+ 3181 20fc F30F7F85 movdqu %xmm0, -4880(%rbp)
+ 3181 F0ECFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3182 .loc 3 1571 0
+ 3183 2104 F30F6F85 movdqu -4880(%rbp), %xmm0
+ 3183 F0ECFFFF
+ 3184 .LBE1071:
+ 3185 .LBE1070:
+1800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 127
+
+
+1801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k6 : k6^k7 :k6^k7^k8:k6^k7^k8^k9 */
+ 3186 .loc 3 1802 0
+ 3187 210c 660F7F85 movdqa %xmm0, -6320(%rbp)
+ 3187 50E7FFFF
+ 3188 2114 660F6F95 movdqa -6256(%rbp), %xmm2
+ 3188 90E7FFFF
+ 3189 211c F30F7F95 movdqu %xmm2, -4624(%rbp)
+ 3189 F0EDFFFF
+ 3190 .LBB1090:
+ 3191 .LBB1091:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 3192 .loc 3 1565 0
+ 3193 2124 F30F6F85 movdqu -4624(%rbp), %xmm0
+ 3193 F0EDFFFF
+ 3194 212c 660F7F85 movdqa %xmm0, -6128(%rbp)
+ 3194 10E8FFFF
+ 3195 2134 660F6F95 movdqa -6128(%rbp), %xmm2
+ 3195 10E8FFFF
+ 3196 213c F30F7F95 movdqu %xmm2, -4608(%rbp)
+ 3196 00EEFFFF
+ 3197 .LBB1092:
+ 3198 .LBB1093:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3199 .loc 3 1278 0
+ 3200 2144 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3200 00000000
+ 3201 214c F30F6F8D movdqu -4608(%rbp), %xmm1
+ 3201 00EEFFFF
+ 3202 2154 F30F7F8D movdqu %xmm1, -4576(%rbp)
+ 3202 20EEFFFF
+ 3203 215c F30F7F85 movdqu %xmm0, -4592(%rbp)
+ 3203 10EEFFFF
+ 3204 2164 F30F6F85 movdqu -4576(%rbp), %xmm0
+ 3204 20EEFFFF
+ 3205 216c F30F7F85 movdqu %xmm0, -4544(%rbp)
+ 3205 40EEFFFF
+ 3206 2174 F30F6F85 movdqu -4592(%rbp), %xmm0
+ 3206 10EEFFFF
+ 3207 217c F30F7F85 movdqu %xmm0, -4560(%rbp)
+ 3207 30EEFFFF
+ 3208 .LBB1094:
+ 3209 .LBB1095:
+ 3210 .LBB1096:
+ 3211 .LBB1097:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3212 .loc 1 529 0
+ 3213 2184 F30F6F8D movdqu -4560(%rbp), %xmm1
+ 3213 30EEFFFF
+ 3214 218c F30F6F85 movdqu -4544(%rbp), %xmm0
+ 3214 40EEFFFF
+ 3215 2194 660F3800 pshufb %xmm1, %xmm0
+ 3215 C1
+ 3216 .LBE1097:
+ 3217 .LBE1096:
+ 3218 .LBE1095:
+ 3219 .LBE1094:
+
GAS LISTING /tmp/ccPaCTqg.s page 128
+
+
+ 3220 .LBE1093:
+ 3221 .LBE1092:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3222 .loc 3 1567 0
+ 3223 2199 660F7F85 movdqa %xmm0, -6128(%rbp)
+ 3223 10E8FFFF
+ 3224 21a1 660F6F85 movdqa -6128(%rbp), %xmm0
+ 3224 10E8FFFF
+ 3225 21a9 660FEF85 pxor -4624(%rbp), %xmm0
+ 3225 F0EDFFFF
+ 3226 21b1 F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 3226 F0EDFFFF
+ 3227 21b9 660F6F85 movdqa -6128(%rbp), %xmm0
+ 3227 10E8FFFF
+ 3228 21c1 F30F7F85 movdqu %xmm0, -4528(%rbp)
+ 3228 50EEFFFF
+ 3229 .LBB1098:
+ 3230 .LBB1099:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3231 .loc 3 1278 0
+ 3232 21c9 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3232 00000000
+ 3233 21d1 F30F6F8D movdqu -4528(%rbp), %xmm1
+ 3233 50EEFFFF
+ 3234 21d9 F30F7F8D movdqu %xmm1, -4496(%rbp)
+ 3234 70EEFFFF
+ 3235 21e1 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 3235 60EEFFFF
+ 3236 21e9 F30F6F85 movdqu -4496(%rbp), %xmm0
+ 3236 70EEFFFF
+ 3237 21f1 F30F7F85 movdqu %xmm0, -4464(%rbp)
+ 3237 90EEFFFF
+ 3238 21f9 F30F6F85 movdqu -4512(%rbp), %xmm0
+ 3238 60EEFFFF
+ 3239 2201 F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 3239 80EEFFFF
+ 3240 .LBB1100:
+ 3241 .LBB1101:
+ 3242 .LBB1102:
+ 3243 .LBB1103:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3244 .loc 1 529 0
+ 3245 2209 F30F6F8D movdqu -4480(%rbp), %xmm1
+ 3245 80EEFFFF
+ 3246 2211 F30F6F85 movdqu -4464(%rbp), %xmm0
+ 3246 90EEFFFF
+ 3247 2219 660F3800 pshufb %xmm1, %xmm0
+ 3247 C1
+ 3248 .LBE1103:
+ 3249 .LBE1102:
+ 3250 .LBE1101:
+ 3251 .LBE1100:
+ 3252 .LBE1099:
+ 3253 .LBE1098:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3254 .loc 3 1568 0
+ 3255 221e 660F7F85 movdqa %xmm0, -6128(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 129
+
+
+ 3255 10E8FFFF
+ 3256 2226 660F6F85 movdqa -6128(%rbp), %xmm0
+ 3256 10E8FFFF
+ 3257 222e 660FEF85 pxor -4624(%rbp), %xmm0
+ 3257 F0EDFFFF
+ 3258 2236 F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 3258 F0EDFFFF
+ 3259 223e 660F6F95 movdqa -6128(%rbp), %xmm2
+ 3259 10E8FFFF
+ 3260 2246 F30F7F95 movdqu %xmm2, -4448(%rbp)
+ 3260 A0EEFFFF
+ 3261 .LBB1104:
+ 3262 .LBB1105:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3263 .loc 3 1278 0
+ 3264 224e 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3264 00000000
+ 3265 2256 F30F6F8D movdqu -4448(%rbp), %xmm1
+ 3265 A0EEFFFF
+ 3266 225e F30F7F8D movdqu %xmm1, -4416(%rbp)
+ 3266 C0EEFFFF
+ 3267 2266 F30F7F85 movdqu %xmm0, -4432(%rbp)
+ 3267 B0EEFFFF
+ 3268 226e F30F6F85 movdqu -4416(%rbp), %xmm0
+ 3268 C0EEFFFF
+ 3269 2276 F30F7F85 movdqu %xmm0, -4384(%rbp)
+ 3269 E0EEFFFF
+ 3270 227e F30F6F85 movdqu -4432(%rbp), %xmm0
+ 3270 B0EEFFFF
+ 3271 2286 F30F7F85 movdqu %xmm0, -4400(%rbp)
+ 3271 D0EEFFFF
+ 3272 .LBB1106:
+ 3273 .LBB1107:
+ 3274 .LBB1108:
+ 3275 .LBB1109:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3276 .loc 1 529 0
+ 3277 228e F30F6F8D movdqu -4400(%rbp), %xmm1
+ 3277 D0EEFFFF
+ 3278 2296 F30F6F85 movdqu -4384(%rbp), %xmm0
+ 3278 E0EEFFFF
+ 3279 229e 660F3800 pshufb %xmm1, %xmm0
+ 3279 C1
+ 3280 .LBE1109:
+ 3281 .LBE1108:
+ 3282 .LBE1107:
+ 3283 .LBE1106:
+ 3284 .LBE1105:
+ 3285 .LBE1104:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3286 .loc 3 1569 0
+ 3287 22a3 660F7F85 movdqa %xmm0, -6128(%rbp)
+ 3287 10E8FFFF
+ 3288 22ab 660F6F85 movdqa -6128(%rbp), %xmm0
+ 3288 10E8FFFF
+ 3289 22b3 660FEF85 pxor -4624(%rbp), %xmm0
+ 3289 F0EDFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 130
+
+
+ 3290 22bb F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 3290 F0EDFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3291 .loc 3 1571 0
+ 3292 22c3 F30F6F85 movdqu -4624(%rbp), %xmm0
+ 3292 F0EDFFFF
+ 3293 .LBE1091:
+ 3294 .LBE1090:
+1803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k10 :k10^k11: k10^k11: k10^k11 */
+ 3295 .loc 3 1803 0
+ 3296 22cb 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 3296 60E7FFFF
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 3297 .loc 3 1804 0
+ 3298 22d3 660F6F85 movdqa -6288(%rbp), %xmm0
+ 3298 70E7FFFF
+ 3299 22db 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3299 A0E7FFFF
+ 3300 22e3 660F6F95 movdqa -6240(%rbp), %xmm2
+ 3300 A0E7FFFF
+ 3301 22eb F30F7F95 movdqu %xmm2, -4352(%rbp)
+ 3301 00EFFFFF
+ 3302 .LBB1110:
+ 3303 .LBB1111:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 3304 .loc 3 1673 0
+ 3305 22f3 F30F6F85 movdqu -4352(%rbp), %xmm0
+ 3305 00EFFFFF
+ 3306 22fb 660F7F85 movdqa %xmm0, -6112(%rbp)
+ 3306 20E8FFFF
+ 3307 2303 660F6F95 movdqa -6112(%rbp), %xmm2
+ 3307 20E8FFFF
+ 3308 230b F30F7F95 movdqu %xmm2, -4320(%rbp)
+ 3308 20EFFFFF
+ 3309 .LBB1112:
+ 3310 .LBB1113:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 3311 .loc 1 852 0
+ 3312 2313 F30F6F85 movdqu -4320(%rbp), %xmm0
+ 3312 20EFFFFF
+ 3313 231b 660F3ADF aeskeygenassist $2, %xmm0, %xmm0
+ 3313 C002
+ 3314 .LBE1113:
+ 3315 .LBE1112:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 3316 .loc 3 1674 0
+ 3317 2321 660F7F85 movdqa %xmm0, -6112(%rbp)
+ 3317 20E8FFFF
+ 3318 2329 660F6F85 movdqa -6112(%rbp), %xmm0
+ 3318 20E8FFFF
+ 3319 2331 F30F7F85 movdqu %xmm0, -4304(%rbp)
+ 3319 30EFFFFF
+ 3320 2339 F30F6F85 movdqu -4304(%rbp), %xmm0
+ 3320 30EFFFFF
+ 3321 2341 F30F7F85 movdqu %xmm0, -4272(%rbp)
+ 3321 50EFFFFF
+ 3322 .LBB1114:
+
GAS LISTING /tmp/ccPaCTqg.s page 131
+
+
+ 3323 .LBB1115:
+ 3324 .LBB1116:
+ 3325 .LBB1117:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3326 .loc 1 450 0
+ 3327 2349 F30F6F85 movdqu -4272(%rbp), %xmm0
+ 3327 50EFFFFF
+ 3328 2351 660F70C0 pshufd $255, %xmm0, %xmm0
+ 3328 FF
+ 3329 .LBE1117:
+ 3330 .LBE1116:
+ 3331 .LBE1115:
+ 3332 .LBE1114:
+ 3333 .LBE1111:
+ 3334 .LBE1110:
+ 3335 .loc 3 1804 0
+ 3336 2356 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3336 A0E7FFFF
+1805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v2,0x02); /* F(k11): F(k11): F(k11) : F(k11) */
+1806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k12 : k13 : k14 : k15 */
+ 3337 .loc 3 1806 0
+ 3338 235e 660F6F95 movdqa -6320(%rbp), %xmm2
+ 3338 50E7FFFF
+ 3339 2366 660FEF95 pxor -6240(%rbp), %xmm2
+ 3339 A0E7FFFF
+ 3340 236e 660F7F95 movdqa %xmm2, -6320(%rbp)
+ 3340 50E7FFFF
+1807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[3] = v0; /* K12:K13:K14:K15 */
+ 3341 .loc 3 1807 0
+ 3342 2376 488B8548 movq -5816(%rbp), %rax
+ 3342 E9FFFF
+ 3343 237d 4883C030 addq $48, %rax
+ 3344 2381 660F6F85 movdqa -6320(%rbp), %xmm0
+ 3344 50E7FFFF
+ 3345 2389 660F7F00 movdqa %xmm0, (%rax)
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k15 : k15 : k15 : k15 */
+ 3346 .loc 3 1808 0
+ 3347 238d 660F6F95 movdqa -6320(%rbp), %xmm2
+ 3347 50E7FFFF
+ 3348 2395 660F7F95 movdqa %xmm2, -6240(%rbp)
+ 3348 A0E7FFFF
+ 3349 239d 660F6F85 movdqa -6240(%rbp), %xmm0
+ 3349 A0E7FFFF
+ 3350 23a5 F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 3350 60EFFFFF
+ 3351 23ad F30F6F85 movdqu -4256(%rbp), %xmm0
+ 3351 60EFFFFF
+ 3352 23b5 F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 3352 80EFFFFF
+ 3353 .LBB1118:
+ 3354 .LBB1119:
+ 3355 .LBB1120:
+ 3356 .LBB1121:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3357 .loc 1 450 0
+ 3358 23bd F30F6F85 movdqu -4224(%rbp), %xmm0
+ 3358 80EFFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 132
+
+
+ 3359 23c5 660F70C0 pshufd $255, %xmm0, %xmm0
+ 3359 FF
+ 3360 .LBE1121:
+ 3361 .LBE1120:
+ 3362 .LBE1119:
+ 3363 .LBE1118:
+ 3364 .loc 3 1808 0
+ 3365 23ca 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3365 A0E7FFFF
+1809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k16 : k17 : k16 : k17 */
+ 3366 .loc 3 1809 0
+ 3367 23d2 660F6F95 movdqa -6304(%rbp), %xmm2
+ 3367 60E7FFFF
+ 3368 23da 660FEF95 pxor -6240(%rbp), %xmm2
+ 3368 A0E7FFFF
+ 3369 23e2 660F7F95 movdqa %xmm2, -6304(%rbp)
+ 3369 60E7FFFF
+1810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 3370 .loc 3 1815 0
+ 3371 23ea 660F6F85 movdqa -6304(%rbp), %xmm0
+ 3371 60E7FFFF
+ 3372 23f2 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3372 A0E7FFFF
+ 3373 23fa 660F6F95 movdqa -6240(%rbp), %xmm2
+ 3373 A0E7FFFF
+ 3374 2402 F30F7F95 movdqu %xmm2, -4192(%rbp)
+ 3374 A0EFFFFF
+ 3375 .LBB1122:
+ 3376 .LBB1123:
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 3377 .loc 3 1621 0
+ 3378 240a F30F6F85 movdqu -4192(%rbp), %xmm0
+ 3378 A0EFFFFF
+ 3379 2412 660F7F85 movdqa %xmm0, -6096(%rbp)
+ 3379 30E8FFFF
+ 3380 241a 660F6F95 movdqa -6096(%rbp), %xmm2
+ 3380 30E8FFFF
+ 3381 2422 F30F7F95 movdqu %xmm2, -4160(%rbp)
+ 3381 C0EFFFFF
+ 3382 .LBB1124:
+ 3383 .LBB1125:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 3384 .loc 1 852 0
+ 3385 242a F30F6F85 movdqu -4160(%rbp), %xmm0
+ 3385 C0EFFFFF
+ 3386 2432 660F3ADF aeskeygenassist $4, %xmm0, %xmm0
+ 3386 C004
+ 3387 .LBE1125:
+ 3388 .LBE1124:
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 3389 .loc 3 1622 0
+ 3390 2438 660F7F85 movdqa %xmm0, -6096(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 133
+
+
+ 3390 30E8FFFF
+ 3391 2440 660F6F85 movdqa -6096(%rbp), %xmm0
+ 3391 30E8FFFF
+ 3392 2448 F30F7F85 movdqu %xmm0, -4144(%rbp)
+ 3392 D0EFFFFF
+ 3393 2450 F30F6F85 movdqu -4144(%rbp), %xmm0
+ 3393 D0EFFFFF
+ 3394 2458 F30F7F85 movdqu %xmm0, -4112(%rbp)
+ 3394 F0EFFFFF
+ 3395 .LBB1126:
+ 3396 .LBB1127:
+ 3397 .LBB1128:
+ 3398 .LBB1129:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3399 .loc 1 450 0
+ 3400 2460 F30F6F85 movdqu -4112(%rbp), %xmm0
+ 3400 F0EFFFFF
+ 3401 2468 660F70C0 pshufd $85, %xmm0, %xmm0
+ 3401 55
+ 3402 .LBE1129:
+ 3403 .LBE1128:
+ 3404 .LBE1127:
+ 3405 .LBE1126:
+ 3406 .LBE1123:
+ 3407 .LBE1122:
+ 3408 .loc 3 1815 0
+ 3409 246d 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3409 A0E7FFFF
+ 3410 2475 660F6F95 movdqa -6320(%rbp), %xmm2
+ 3410 50E7FFFF
+ 3411 247d F30F7F95 movdqu %xmm2, -4096(%rbp)
+ 3411 00F0FFFF
+ 3412 .LBB1130:
+ 3413 .LBB1131:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 3414 .loc 3 1565 0
+ 3415 2485 F30F6F85 movdqu -4096(%rbp), %xmm0
+ 3415 00F0FFFF
+ 3416 248d 660F7F85 movdqa %xmm0, -6080(%rbp)
+ 3416 40E8FFFF
+ 3417 2495 660F6F95 movdqa -6080(%rbp), %xmm2
+ 3417 40E8FFFF
+ 3418 249d F30F7F95 movdqu %xmm2, -4080(%rbp)
+ 3418 10F0FFFF
+ 3419 .LBB1132:
+ 3420 .LBB1133:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3421 .loc 3 1278 0
+ 3422 24a5 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3422 00000000
+ 3423 24ad F30F6F8D movdqu -4080(%rbp), %xmm1
+ 3423 10F0FFFF
+ 3424 24b5 F30F7F8D movdqu %xmm1, -4048(%rbp)
+ 3424 30F0FFFF
+ 3425 24bd F30F7F85 movdqu %xmm0, -4064(%rbp)
+ 3425 20F0FFFF
+ 3426 24c5 F30F6F85 movdqu -4048(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 134
+
+
+ 3426 30F0FFFF
+ 3427 24cd F30F7F85 movdqu %xmm0, -4016(%rbp)
+ 3427 50F0FFFF
+ 3428 24d5 F30F6F85 movdqu -4064(%rbp), %xmm0
+ 3428 20F0FFFF
+ 3429 24dd F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 3429 40F0FFFF
+ 3430 .LBB1134:
+ 3431 .LBB1135:
+ 3432 .LBB1136:
+ 3433 .LBB1137:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3434 .loc 1 529 0
+ 3435 24e5 F30F6F8D movdqu -4032(%rbp), %xmm1
+ 3435 40F0FFFF
+ 3436 24ed F30F6F85 movdqu -4016(%rbp), %xmm0
+ 3436 50F0FFFF
+ 3437 24f5 660F3800 pshufb %xmm1, %xmm0
+ 3437 C1
+ 3438 .LBE1137:
+ 3439 .LBE1136:
+ 3440 .LBE1135:
+ 3441 .LBE1134:
+ 3442 .LBE1133:
+ 3443 .LBE1132:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3444 .loc 3 1567 0
+ 3445 24fa 660F7F85 movdqa %xmm0, -6080(%rbp)
+ 3445 40E8FFFF
+ 3446 2502 660F6F85 movdqa -6080(%rbp), %xmm0
+ 3446 40E8FFFF
+ 3447 250a 660FEF85 pxor -4096(%rbp), %xmm0
+ 3447 00F0FFFF
+ 3448 2512 F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 3448 00F0FFFF
+ 3449 251a 660F6F85 movdqa -6080(%rbp), %xmm0
+ 3449 40E8FFFF
+ 3450 2522 F30F7F85 movdqu %xmm0, -4000(%rbp)
+ 3450 60F0FFFF
+ 3451 .LBB1138:
+ 3452 .LBB1139:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3453 .loc 3 1278 0
+ 3454 252a 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3454 00000000
+ 3455 2532 F30F6F8D movdqu -4000(%rbp), %xmm1
+ 3455 60F0FFFF
+ 3456 253a F30F7F8D movdqu %xmm1, -3968(%rbp)
+ 3456 80F0FFFF
+ 3457 2542 F30F7F85 movdqu %xmm0, -3984(%rbp)
+ 3457 70F0FFFF
+ 3458 254a F30F6F85 movdqu -3968(%rbp), %xmm0
+ 3458 80F0FFFF
+ 3459 2552 F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 3459 A0F0FFFF
+ 3460 255a F30F6F85 movdqu -3984(%rbp), %xmm0
+ 3460 70F0FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 135
+
+
+ 3461 2562 F30F7F85 movdqu %xmm0, -3952(%rbp)
+ 3461 90F0FFFF
+ 3462 .LBB1140:
+ 3463 .LBB1141:
+ 3464 .LBB1142:
+ 3465 .LBB1143:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3466 .loc 1 529 0
+ 3467 256a F30F6F8D movdqu -3952(%rbp), %xmm1
+ 3467 90F0FFFF
+ 3468 2572 F30F6F85 movdqu -3936(%rbp), %xmm0
+ 3468 A0F0FFFF
+ 3469 257a 660F3800 pshufb %xmm1, %xmm0
+ 3469 C1
+ 3470 .LBE1143:
+ 3471 .LBE1142:
+ 3472 .LBE1141:
+ 3473 .LBE1140:
+ 3474 .LBE1139:
+ 3475 .LBE1138:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3476 .loc 3 1568 0
+ 3477 257f 660F7F85 movdqa %xmm0, -6080(%rbp)
+ 3477 40E8FFFF
+ 3478 2587 660F6F85 movdqa -6080(%rbp), %xmm0
+ 3478 40E8FFFF
+ 3479 258f 660FEF85 pxor -4096(%rbp), %xmm0
+ 3479 00F0FFFF
+ 3480 2597 F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 3480 00F0FFFF
+ 3481 259f 660F6F95 movdqa -6080(%rbp), %xmm2
+ 3481 40E8FFFF
+ 3482 25a7 F30F7F95 movdqu %xmm2, -3920(%rbp)
+ 3482 B0F0FFFF
+ 3483 .LBB1144:
+ 3484 .LBB1145:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3485 .loc 3 1278 0
+ 3486 25af 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3486 00000000
+ 3487 25b7 F30F6F8D movdqu -3920(%rbp), %xmm1
+ 3487 B0F0FFFF
+ 3488 25bf F30F7F8D movdqu %xmm1, -3888(%rbp)
+ 3488 D0F0FFFF
+ 3489 25c7 F30F7F85 movdqu %xmm0, -3904(%rbp)
+ 3489 C0F0FFFF
+ 3490 25cf F30F6F85 movdqu -3888(%rbp), %xmm0
+ 3490 D0F0FFFF
+ 3491 25d7 F30F7F85 movdqu %xmm0, -3856(%rbp)
+ 3491 F0F0FFFF
+ 3492 25df F30F6F85 movdqu -3904(%rbp), %xmm0
+ 3492 C0F0FFFF
+ 3493 25e7 F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 3493 E0F0FFFF
+ 3494 .LBB1146:
+ 3495 .LBB1147:
+ 3496 .LBB1148:
+
GAS LISTING /tmp/ccPaCTqg.s page 136
+
+
+ 3497 .LBB1149:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3498 .loc 1 529 0
+ 3499 25ef F30F6F8D movdqu -3872(%rbp), %xmm1
+ 3499 E0F0FFFF
+ 3500 25f7 F30F6F85 movdqu -3856(%rbp), %xmm0
+ 3500 F0F0FFFF
+ 3501 25ff 660F3800 pshufb %xmm1, %xmm0
+ 3501 C1
+ 3502 .LBE1149:
+ 3503 .LBE1148:
+ 3504 .LBE1147:
+ 3505 .LBE1146:
+ 3506 .LBE1145:
+ 3507 .LBE1144:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3508 .loc 3 1569 0
+ 3509 2604 660F7F85 movdqa %xmm0, -6080(%rbp)
+ 3509 40E8FFFF
+ 3510 260c 660F6F85 movdqa -6080(%rbp), %xmm0
+ 3510 40E8FFFF
+ 3511 2614 660FEF85 pxor -4096(%rbp), %xmm0
+ 3511 00F0FFFF
+ 3512 261c F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 3512 00F0FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3513 .loc 3 1571 0
+ 3514 2624 F30F6F85 movdqu -4096(%rbp), %xmm0
+ 3514 00F0FFFF
+ 3515 .LBE1131:
+ 3516 .LBE1130:
+1816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1,0x04); /* F(k17): F(k17): F(k17) : F(k17) */
+1817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k12 :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+ 3517 .loc 3 1817 0
+ 3518 262c 660F7F85 movdqa %xmm0, -6272(%rbp)
+ 3518 80E7FFFF
+1818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k18 : k19 : k20 : k21 */
+ 3519 .loc 3 1818 0
+ 3520 2634 660F6F85 movdqa -6272(%rbp), %xmm0
+ 3520 80E7FFFF
+ 3521 263c 660FEF85 pxor -6240(%rbp), %xmm0
+ 3521 A0E7FFFF
+ 3522 2644 660F7F85 movdqa %xmm0, -6272(%rbp)
+ 3522 80E7FFFF
+ 3523 264c 660F6F95 movdqa -6304(%rbp), %xmm2
+ 3523 60E7FFFF
+ 3524 2654 F30F7F95 movdqu %xmm2, -3840(%rbp)
+ 3524 00F1FFFF
+ 3525 .LBB1150:
+ 3526 .LBB1151:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 3527 .loc 3 1565 0
+ 3528 265c F30F6F85 movdqu -3840(%rbp), %xmm0
+ 3528 00F1FFFF
+ 3529 2664 660F7F85 movdqa %xmm0, -6064(%rbp)
+ 3529 50E8FFFF
+ 3530 266c 660F6F95 movdqa -6064(%rbp), %xmm2
+
GAS LISTING /tmp/ccPaCTqg.s page 137
+
+
+ 3530 50E8FFFF
+ 3531 2674 F30F7F95 movdqu %xmm2, -3824(%rbp)
+ 3531 10F1FFFF
+ 3532 .LBB1152:
+ 3533 .LBB1153:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3534 .loc 3 1278 0
+ 3535 267c 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3535 00000000
+ 3536 2684 F30F6F8D movdqu -3824(%rbp), %xmm1
+ 3536 10F1FFFF
+ 3537 268c F30F7F8D movdqu %xmm1, -3792(%rbp)
+ 3537 30F1FFFF
+ 3538 2694 F30F7F85 movdqu %xmm0, -3808(%rbp)
+ 3538 20F1FFFF
+ 3539 269c F30F6F85 movdqu -3792(%rbp), %xmm0
+ 3539 30F1FFFF
+ 3540 26a4 F30F7F85 movdqu %xmm0, -3760(%rbp)
+ 3540 50F1FFFF
+ 3541 26ac F30F6F85 movdqu -3808(%rbp), %xmm0
+ 3541 20F1FFFF
+ 3542 26b4 F30F7F85 movdqu %xmm0, -3776(%rbp)
+ 3542 40F1FFFF
+ 3543 .LBB1154:
+ 3544 .LBB1155:
+ 3545 .LBB1156:
+ 3546 .LBB1157:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3547 .loc 1 529 0
+ 3548 26bc F30F6F8D movdqu -3776(%rbp), %xmm1
+ 3548 40F1FFFF
+ 3549 26c4 F30F6F85 movdqu -3760(%rbp), %xmm0
+ 3549 50F1FFFF
+ 3550 26cc 660F3800 pshufb %xmm1, %xmm0
+ 3550 C1
+ 3551 .LBE1157:
+ 3552 .LBE1156:
+ 3553 .LBE1155:
+ 3554 .LBE1154:
+ 3555 .LBE1153:
+ 3556 .LBE1152:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3557 .loc 3 1567 0
+ 3558 26d1 660F7F85 movdqa %xmm0, -6064(%rbp)
+ 3558 50E8FFFF
+ 3559 26d9 660F6F85 movdqa -6064(%rbp), %xmm0
+ 3559 50E8FFFF
+ 3560 26e1 660FEF85 pxor -3840(%rbp), %xmm0
+ 3560 00F1FFFF
+ 3561 26e9 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 3561 00F1FFFF
+ 3562 26f1 660F6F85 movdqa -6064(%rbp), %xmm0
+ 3562 50E8FFFF
+ 3563 26f9 F30F7F85 movdqu %xmm0, -3744(%rbp)
+ 3563 60F1FFFF
+ 3564 .LBB1158:
+ 3565 .LBB1159:
+
GAS LISTING /tmp/ccPaCTqg.s page 138
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3566 .loc 3 1278 0
+ 3567 2701 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3567 00000000
+ 3568 2709 F30F6F8D movdqu -3744(%rbp), %xmm1
+ 3568 60F1FFFF
+ 3569 2711 F30F7F8D movdqu %xmm1, -3712(%rbp)
+ 3569 80F1FFFF
+ 3570 2719 F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 3570 70F1FFFF
+ 3571 2721 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 3571 80F1FFFF
+ 3572 2729 F30F7F85 movdqu %xmm0, -3680(%rbp)
+ 3572 A0F1FFFF
+ 3573 2731 F30F6F85 movdqu -3728(%rbp), %xmm0
+ 3573 70F1FFFF
+ 3574 2739 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 3574 90F1FFFF
+ 3575 .LBB1160:
+ 3576 .LBB1161:
+ 3577 .LBB1162:
+ 3578 .LBB1163:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3579 .loc 1 529 0
+ 3580 2741 F30F6F8D movdqu -3696(%rbp), %xmm1
+ 3580 90F1FFFF
+ 3581 2749 F30F6F85 movdqu -3680(%rbp), %xmm0
+ 3581 A0F1FFFF
+ 3582 2751 660F3800 pshufb %xmm1, %xmm0
+ 3582 C1
+ 3583 .LBE1163:
+ 3584 .LBE1162:
+ 3585 .LBE1161:
+ 3586 .LBE1160:
+ 3587 .LBE1159:
+ 3588 .LBE1158:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3589 .loc 3 1568 0
+ 3590 2756 660F7F85 movdqa %xmm0, -6064(%rbp)
+ 3590 50E8FFFF
+ 3591 275e 660F6F85 movdqa -6064(%rbp), %xmm0
+ 3591 50E8FFFF
+ 3592 2766 660FEF85 pxor -3840(%rbp), %xmm0
+ 3592 00F1FFFF
+ 3593 276e F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 3593 00F1FFFF
+ 3594 2776 660F6F95 movdqa -6064(%rbp), %xmm2
+ 3594 50E8FFFF
+ 3595 277e F30F7F95 movdqu %xmm2, -3664(%rbp)
+ 3595 B0F1FFFF
+ 3596 .LBB1164:
+ 3597 .LBB1165:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3598 .loc 3 1278 0
+ 3599 2786 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3599 00000000
+ 3600 278e F30F6F8D movdqu -3664(%rbp), %xmm1
+
GAS LISTING /tmp/ccPaCTqg.s page 139
+
+
+ 3600 B0F1FFFF
+ 3601 2796 F30F7F8D movdqu %xmm1, -3632(%rbp)
+ 3601 D0F1FFFF
+ 3602 279e F30F7F85 movdqu %xmm0, -3648(%rbp)
+ 3602 C0F1FFFF
+ 3603 27a6 F30F6F85 movdqu -3632(%rbp), %xmm0
+ 3603 D0F1FFFF
+ 3604 27ae F30F7F85 movdqu %xmm0, -3600(%rbp)
+ 3604 F0F1FFFF
+ 3605 27b6 F30F6F85 movdqu -3648(%rbp), %xmm0
+ 3605 C0F1FFFF
+ 3606 27be F30F7F85 movdqu %xmm0, -3616(%rbp)
+ 3606 E0F1FFFF
+ 3607 .LBB1166:
+ 3608 .LBB1167:
+ 3609 .LBB1168:
+ 3610 .LBB1169:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3611 .loc 1 529 0
+ 3612 27c6 F30F6F8D movdqu -3616(%rbp), %xmm1
+ 3612 E0F1FFFF
+ 3613 27ce F30F6F85 movdqu -3600(%rbp), %xmm0
+ 3613 F0F1FFFF
+ 3614 27d6 660F3800 pshufb %xmm1, %xmm0
+ 3614 C1
+ 3615 .LBE1169:
+ 3616 .LBE1168:
+ 3617 .LBE1167:
+ 3618 .LBE1166:
+ 3619 .LBE1165:
+ 3620 .LBE1164:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3621 .loc 3 1569 0
+ 3622 27db 660F7F85 movdqa %xmm0, -6064(%rbp)
+ 3622 50E8FFFF
+ 3623 27e3 660F6F85 movdqa -6064(%rbp), %xmm0
+ 3623 50E8FFFF
+ 3624 27eb 660FEF85 pxor -3840(%rbp), %xmm0
+ 3624 00F1FFFF
+ 3625 27f3 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 3625 00F1FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3626 .loc 3 1571 0
+ 3627 27fb F30F6F85 movdqu -3840(%rbp), %xmm0
+ 3627 00F1FFFF
+ 3628 .LBE1151:
+ 3629 .LBE1150:
+1819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k16 :k16^k17: k17 : 0 */
+ 3630 .loc 3 1819 0
+ 3631 2803 660F7F85 movdqa %xmm0, -6256(%rbp)
+ 3631 90E7FFFF
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k21 : k21 : k21 : k21 */
+ 3632 .loc 3 1820 0
+ 3633 280b 660F6F85 movdqa -6272(%rbp), %xmm0
+ 3633 80E7FFFF
+ 3634 2813 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3634 A0E7FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 140
+
+
+ 3635 281b 660F6F95 movdqa -6240(%rbp), %xmm2
+ 3635 A0E7FFFF
+ 3636 2823 F30F7F95 movdqu %xmm2, -3584(%rbp)
+ 3636 00F2FFFF
+ 3637 282b F30F6F85 movdqu -3584(%rbp), %xmm0
+ 3637 00F2FFFF
+ 3638 2833 F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 3638 20F2FFFF
+ 3639 .LBB1170:
+ 3640 .LBB1171:
+ 3641 .LBB1172:
+ 3642 .LBB1173:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3643 .loc 1 450 0
+ 3644 283b F30F6F85 movdqu -3552(%rbp), %xmm0
+ 3644 20F2FFFF
+ 3645 2843 660F70C0 pshufd $255, %xmm0, %xmm0
+ 3645 FF
+ 3646 .LBE1173:
+ 3647 .LBE1172:
+ 3648 .LBE1171:
+ 3649 .LBE1170:
+ 3650 .loc 3 1820 0
+ 3651 2848 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3651 A0E7FFFF
+1821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k22 : k23 : x : x */
+ 3652 .loc 3 1821 0
+ 3653 2850 660F6F85 movdqa -6256(%rbp), %xmm0
+ 3653 90E7FFFF
+ 3654 2858 660FEF85 pxor -6240(%rbp), %xmm0
+ 3654 A0E7FFFF
+ 3655 2860 660F7F85 movdqa %xmm0, -6256(%rbp)
+ 3655 90E7FFFF
+ 3656 2868 660F6F95 movdqa -6304(%rbp), %xmm2
+ 3656 60E7FFFF
+ 3657 2870 F30F7F95 movdqu %xmm2, -3520(%rbp)
+ 3657 40F2FFFF
+ 3658 2878 660F6F85 movdqa -6272(%rbp), %xmm0
+ 3658 80E7FFFF
+ 3659 2880 F30F7F85 movdqu %xmm0, -3536(%rbp)
+ 3659 30F2FFFF
+ 3660 2888 F30F6F85 movdqu -3520(%rbp), %xmm0
+ 3660 40F2FFFF
+ 3661 2890 F30F7F85 movdqu %xmm0, -3472(%rbp)
+ 3661 70F2FFFF
+ 3662 2898 F30F6F85 movdqu -3536(%rbp), %xmm0
+ 3662 30F2FFFF
+ 3663 28a0 F30F7F85 movdqu %xmm0, -3488(%rbp)
+ 3663 60F2FFFF
+ 3664 .LBB1174:
+ 3665 .LBB1175:
+ 3666 .LBB1176:
+ 3667 .LBB1177:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 3668 .loc 1 366 0
+ 3669 28a8 F20F1085 movsd -3488(%rbp), %xmm0
+ 3669 60F2FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 141
+
+
+ 3670 28b0 660F1685 movhpd -3480(%rbp), %xmm0
+ 3670 68F2FFFF
+ 3671 28b8 F20F108D movsd -3472(%rbp), %xmm1
+ 3671 70F2FFFF
+ 3672 28c0 660F168D movhpd -3464(%rbp), %xmm1
+ 3672 78F2FFFF
+ 3673 28c8 660F28D1 movapd %xmm1, %xmm2
+ 3674 28cc 660F14D0 unpcklpd %xmm0, %xmm2
+ 3675 28d0 660F28C2 movapd %xmm2, %xmm0
+ 3676 .LBE1177:
+ 3677 .LBE1176:
+ 3678 .LBE1175:
+ 3679 .LBE1174:
+1822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k16 : k17 : k18 : k19 */
+ 3680 .loc 3 1822 0
+ 3681 28d4 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 3681 60E7FFFF
+1823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[4] = v1; /* K16:K17:K18:K19 */
+ 3682 .loc 3 1823 0
+ 3683 28dc 488B8548 movq -5816(%rbp), %rax
+ 3683 E9FFFF
+ 3684 28e3 4883C040 addq $64, %rax
+ 3685 28e7 660F6F85 movdqa -6304(%rbp), %xmm0
+ 3685 60E7FFFF
+ 3686 28ef 660F7F00 movdqa %xmm0, (%rax)
+ 3687 28f3 660F6F95 movdqa -6272(%rbp), %xmm2
+ 3687 80E7FFFF
+ 3688 28fb F30F7F95 movdqu %xmm2, -3440(%rbp)
+ 3688 90F2FFFF
+ 3689 2903 660F6F85 movdqa -6256(%rbp), %xmm0
+ 3689 90E7FFFF
+ 3690 290b F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 3690 80F2FFFF
+ 3691 2913 F30F6F85 movdqu -3440(%rbp), %xmm0
+ 3691 90F2FFFF
+ 3692 291b F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 3692 C0F2FFFF
+ 3693 2923 F30F6F85 movdqu -3456(%rbp), %xmm0
+ 3693 80F2FFFF
+ 3694 292b F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 3694 B0F2FFFF
+ 3695 .LBB1178:
+ 3696 .LBB1179:
+ 3697 .LBB1180:
+ 3698 .LBB1181:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 3699 .loc 1 366 0
+ 3700 2933 F20F108D movsd -3408(%rbp), %xmm1
+ 3700 B0F2FFFF
+ 3701 293b 660F168D movhpd -3400(%rbp), %xmm1
+ 3701 B8F2FFFF
+ 3702 2943 F20F1085 movsd -3392(%rbp), %xmm0
+ 3702 C0F2FFFF
+ 3703 294b 660F1685 movhpd -3384(%rbp), %xmm0
+ 3703 C8F2FFFF
+ 3704 2953 660FC6C1 shufpd $1, %xmm1, %xmm0
+ 3704 01
+
GAS LISTING /tmp/ccPaCTqg.s page 142
+
+
+ 3705 .LBE1181:
+ 3706 .LBE1180:
+ 3707 .LBE1179:
+ 3708 .LBE1178:
+1824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k20 : k21 : k22 : k23 */
+ 3709 .loc 3 1825 0
+ 3710 2958 660F7F85 movdqa %xmm0, -6288(%rbp)
+ 3710 70E7FFFF
+1826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[5] = v2; /* K20:K21:K22:K23 */
+ 3711 .loc 3 1826 0
+ 3712 2960 488B8548 movq -5816(%rbp), %rax
+ 3712 E9FFFF
+ 3713 2967 4883C050 addq $80, %rax
+ 3714 296b 660F6F95 movdqa -6288(%rbp), %xmm2
+ 3714 70E7FFFF
+ 3715 2973 660F7F10 movdqa %xmm2, (%rax)
+ 3716 2977 660F6F85 movdqa -6272(%rbp), %xmm0
+ 3716 80E7FFFF
+ 3717 297f F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 3717 D0F2FFFF
+ 3718 .LBB1182:
+ 3719 .LBB1183:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 3720 .loc 3 1565 0
+ 3721 2987 F30F6F95 movdqu -3376(%rbp), %xmm2
+ 3721 D0F2FFFF
+ 3722 298f 660F7F95 movdqa %xmm2, -6048(%rbp)
+ 3722 60E8FFFF
+ 3723 2997 660F6F85 movdqa -6048(%rbp), %xmm0
+ 3723 60E8FFFF
+ 3724 299f F30F7F85 movdqu %xmm0, -3360(%rbp)
+ 3724 E0F2FFFF
+ 3725 .LBB1184:
+ 3726 .LBB1185:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3727 .loc 3 1278 0
+ 3728 29a7 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3728 00000000
+ 3729 29af F30F6F8D movdqu -3360(%rbp), %xmm1
+ 3729 E0F2FFFF
+ 3730 29b7 F30F7F8D movdqu %xmm1, -3328(%rbp)
+ 3730 00F3FFFF
+ 3731 29bf F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 3731 F0F2FFFF
+ 3732 29c7 F30F6F85 movdqu -3328(%rbp), %xmm0
+ 3732 00F3FFFF
+ 3733 29cf F30F7F85 movdqu %xmm0, -3296(%rbp)
+ 3733 20F3FFFF
+ 3734 29d7 F30F6F85 movdqu -3344(%rbp), %xmm0
+ 3734 F0F2FFFF
+ 3735 29df F30F7F85 movdqu %xmm0, -3312(%rbp)
+ 3735 10F3FFFF
+ 3736 .LBB1186:
+ 3737 .LBB1187:
+ 3738 .LBB1188:
+ 3739 .LBB1189:
+
GAS LISTING /tmp/ccPaCTqg.s page 143
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3740 .loc 1 529 0
+ 3741 29e7 F30F6F8D movdqu -3312(%rbp), %xmm1
+ 3741 10F3FFFF
+ 3742 29ef F30F6F85 movdqu -3296(%rbp), %xmm0
+ 3742 20F3FFFF
+ 3743 29f7 660F3800 pshufb %xmm1, %xmm0
+ 3743 C1
+ 3744 .LBE1189:
+ 3745 .LBE1188:
+ 3746 .LBE1187:
+ 3747 .LBE1186:
+ 3748 .LBE1185:
+ 3749 .LBE1184:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3750 .loc 3 1567 0
+ 3751 29fc 660F7F85 movdqa %xmm0, -6048(%rbp)
+ 3751 60E8FFFF
+ 3752 2a04 660F6F85 movdqa -6048(%rbp), %xmm0
+ 3752 60E8FFFF
+ 3753 2a0c 660FEF85 pxor -3376(%rbp), %xmm0
+ 3753 D0F2FFFF
+ 3754 2a14 F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 3754 D0F2FFFF
+ 3755 2a1c 660F6F95 movdqa -6048(%rbp), %xmm2
+ 3755 60E8FFFF
+ 3756 2a24 F30F7F95 movdqu %xmm2, -3280(%rbp)
+ 3756 30F3FFFF
+ 3757 .LBB1190:
+ 3758 .LBB1191:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3759 .loc 3 1278 0
+ 3760 2a2c 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3760 00000000
+ 3761 2a34 F30F6F8D movdqu -3280(%rbp), %xmm1
+ 3761 30F3FFFF
+ 3762 2a3c F30F7F8D movdqu %xmm1, -3248(%rbp)
+ 3762 50F3FFFF
+ 3763 2a44 F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 3763 40F3FFFF
+ 3764 2a4c F30F6F85 movdqu -3248(%rbp), %xmm0
+ 3764 50F3FFFF
+ 3765 2a54 F30F7F85 movdqu %xmm0, -3216(%rbp)
+ 3765 70F3FFFF
+ 3766 2a5c F30F6F85 movdqu -3264(%rbp), %xmm0
+ 3766 40F3FFFF
+ 3767 2a64 F30F7F85 movdqu %xmm0, -3232(%rbp)
+ 3767 60F3FFFF
+ 3768 .LBB1192:
+ 3769 .LBB1193:
+ 3770 .LBB1194:
+ 3771 .LBB1195:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3772 .loc 1 529 0
+ 3773 2a6c F30F6F8D movdqu -3232(%rbp), %xmm1
+ 3773 60F3FFFF
+ 3774 2a74 F30F6F85 movdqu -3216(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 144
+
+
+ 3774 70F3FFFF
+ 3775 2a7c 660F3800 pshufb %xmm1, %xmm0
+ 3775 C1
+ 3776 .LBE1195:
+ 3777 .LBE1194:
+ 3778 .LBE1193:
+ 3779 .LBE1192:
+ 3780 .LBE1191:
+ 3781 .LBE1190:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3782 .loc 3 1568 0
+ 3783 2a81 660F7F85 movdqa %xmm0, -6048(%rbp)
+ 3783 60E8FFFF
+ 3784 2a89 660F6F85 movdqa -6048(%rbp), %xmm0
+ 3784 60E8FFFF
+ 3785 2a91 660FEF85 pxor -3376(%rbp), %xmm0
+ 3785 D0F2FFFF
+ 3786 2a99 F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 3786 D0F2FFFF
+ 3787 2aa1 660F6F85 movdqa -6048(%rbp), %xmm0
+ 3787 60E8FFFF
+ 3788 2aa9 F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 3788 80F3FFFF
+ 3789 .LBB1196:
+ 3790 .LBB1197:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3791 .loc 3 1278 0
+ 3792 2ab1 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3792 00000000
+ 3793 2ab9 F30F6F8D movdqu -3200(%rbp), %xmm1
+ 3793 80F3FFFF
+ 3794 2ac1 F30F7F8D movdqu %xmm1, -3168(%rbp)
+ 3794 A0F3FFFF
+ 3795 2ac9 F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 3795 90F3FFFF
+ 3796 2ad1 F30F6F85 movdqu -3168(%rbp), %xmm0
+ 3796 A0F3FFFF
+ 3797 2ad9 F30F7F85 movdqu %xmm0, -3136(%rbp)
+ 3797 C0F3FFFF
+ 3798 2ae1 F30F6F85 movdqu -3184(%rbp), %xmm0
+ 3798 90F3FFFF
+ 3799 2ae9 F30F7F85 movdqu %xmm0, -3152(%rbp)
+ 3799 B0F3FFFF
+ 3800 .LBB1198:
+ 3801 .LBB1199:
+ 3802 .LBB1200:
+ 3803 .LBB1201:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3804 .loc 1 529 0
+ 3805 2af1 F30F6F8D movdqu -3152(%rbp), %xmm1
+ 3805 B0F3FFFF
+ 3806 2af9 F30F6F85 movdqu -3136(%rbp), %xmm0
+ 3806 C0F3FFFF
+ 3807 2b01 660F3800 pshufb %xmm1, %xmm0
+ 3807 C1
+ 3808 .LBE1201:
+ 3809 .LBE1200:
+
GAS LISTING /tmp/ccPaCTqg.s page 145
+
+
+ 3810 .LBE1199:
+ 3811 .LBE1198:
+ 3812 .LBE1197:
+ 3813 .LBE1196:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3814 .loc 3 1569 0
+ 3815 2b06 660F7F85 movdqa %xmm0, -6048(%rbp)
+ 3815 60E8FFFF
+ 3816 2b0e 660F6F85 movdqa -6048(%rbp), %xmm0
+ 3816 60E8FFFF
+ 3817 2b16 660FEF85 pxor -3376(%rbp), %xmm0
+ 3817 D0F2FFFF
+ 3818 2b1e F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 3818 D0F2FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3819 .loc 3 1571 0
+ 3820 2b26 F30F6F85 movdqu -3376(%rbp), %xmm0
+ 3820 D0F2FFFF
+ 3821 .LBE1183:
+ 3822 .LBE1182:
+1827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k18 :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+ 3823 .loc 3 1829 0
+ 3824 2b2e 660F7F85 movdqa %xmm0, -6320(%rbp)
+ 3824 50E7FFFF
+ 3825 2b36 660F6F95 movdqa -6256(%rbp), %xmm2
+ 3825 90E7FFFF
+ 3826 2b3e F30F7F95 movdqu %xmm2, -3120(%rbp)
+ 3826 D0F3FFFF
+ 3827 .LBB1202:
+ 3828 .LBB1203:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 3829 .loc 3 1565 0
+ 3830 2b46 F30F6F85 movdqu -3120(%rbp), %xmm0
+ 3830 D0F3FFFF
+ 3831 2b4e 660F7F85 movdqa %xmm0, -6032(%rbp)
+ 3831 70E8FFFF
+ 3832 2b56 660F6F95 movdqa -6032(%rbp), %xmm2
+ 3832 70E8FFFF
+ 3833 2b5e F30F7F95 movdqu %xmm2, -3104(%rbp)
+ 3833 E0F3FFFF
+ 3834 .LBB1204:
+ 3835 .LBB1205:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3836 .loc 3 1278 0
+ 3837 2b66 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3837 00000000
+ 3838 2b6e F30F6F8D movdqu -3104(%rbp), %xmm1
+ 3838 E0F3FFFF
+ 3839 2b76 F30F7F8D movdqu %xmm1, -3072(%rbp)
+ 3839 00F4FFFF
+ 3840 2b7e F30F7F85 movdqu %xmm0, -3088(%rbp)
+ 3840 F0F3FFFF
+ 3841 2b86 F30F6F85 movdqu -3072(%rbp), %xmm0
+ 3841 00F4FFFF
+ 3842 2b8e F30F7F85 movdqu %xmm0, -3040(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 146
+
+
+ 3842 20F4FFFF
+ 3843 2b96 F30F6F85 movdqu -3088(%rbp), %xmm0
+ 3843 F0F3FFFF
+ 3844 2b9e F30F7F85 movdqu %xmm0, -3056(%rbp)
+ 3844 10F4FFFF
+ 3845 .LBB1206:
+ 3846 .LBB1207:
+ 3847 .LBB1208:
+ 3848 .LBB1209:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3849 .loc 1 529 0
+ 3850 2ba6 F30F6F8D movdqu -3056(%rbp), %xmm1
+ 3850 10F4FFFF
+ 3851 2bae F30F6F85 movdqu -3040(%rbp), %xmm0
+ 3851 20F4FFFF
+ 3852 2bb6 660F3800 pshufb %xmm1, %xmm0
+ 3852 C1
+ 3853 .LBE1209:
+ 3854 .LBE1208:
+ 3855 .LBE1207:
+ 3856 .LBE1206:
+ 3857 .LBE1205:
+ 3858 .LBE1204:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3859 .loc 3 1567 0
+ 3860 2bbb 660F7F85 movdqa %xmm0, -6032(%rbp)
+ 3860 70E8FFFF
+ 3861 2bc3 660F6F85 movdqa -6032(%rbp), %xmm0
+ 3861 70E8FFFF
+ 3862 2bcb 660FEF85 pxor -3120(%rbp), %xmm0
+ 3862 D0F3FFFF
+ 3863 2bd3 F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 3863 D0F3FFFF
+ 3864 2bdb 660F6F85 movdqa -6032(%rbp), %xmm0
+ 3864 70E8FFFF
+ 3865 2be3 F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 3865 30F4FFFF
+ 3866 .LBB1210:
+ 3867 .LBB1211:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3868 .loc 3 1278 0
+ 3869 2beb 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3869 00000000
+ 3870 2bf3 F30F6F8D movdqu -3024(%rbp), %xmm1
+ 3870 30F4FFFF
+ 3871 2bfb F30F7F8D movdqu %xmm1, -2992(%rbp)
+ 3871 50F4FFFF
+ 3872 2c03 F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 3872 40F4FFFF
+ 3873 2c0b F30F6F85 movdqu -2992(%rbp), %xmm0
+ 3873 50F4FFFF
+ 3874 2c13 F30F7F85 movdqu %xmm0, -2960(%rbp)
+ 3874 70F4FFFF
+ 3875 2c1b F30F6F85 movdqu -3008(%rbp), %xmm0
+ 3875 40F4FFFF
+ 3876 2c23 F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 3876 60F4FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 147
+
+
+ 3877 .LBB1212:
+ 3878 .LBB1213:
+ 3879 .LBB1214:
+ 3880 .LBB1215:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3881 .loc 1 529 0
+ 3882 2c2b F30F6F8D movdqu -2976(%rbp), %xmm1
+ 3882 60F4FFFF
+ 3883 2c33 F30F6F85 movdqu -2960(%rbp), %xmm0
+ 3883 70F4FFFF
+ 3884 2c3b 660F3800 pshufb %xmm1, %xmm0
+ 3884 C1
+ 3885 .LBE1215:
+ 3886 .LBE1214:
+ 3887 .LBE1213:
+ 3888 .LBE1212:
+ 3889 .LBE1211:
+ 3890 .LBE1210:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3891 .loc 3 1568 0
+ 3892 2c40 660F7F85 movdqa %xmm0, -6032(%rbp)
+ 3892 70E8FFFF
+ 3893 2c48 660F6F85 movdqa -6032(%rbp), %xmm0
+ 3893 70E8FFFF
+ 3894 2c50 660FEF85 pxor -3120(%rbp), %xmm0
+ 3894 D0F3FFFF
+ 3895 2c58 F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 3895 D0F3FFFF
+ 3896 2c60 660F6F95 movdqa -6032(%rbp), %xmm2
+ 3896 70E8FFFF
+ 3897 2c68 F30F7F95 movdqu %xmm2, -2944(%rbp)
+ 3897 80F4FFFF
+ 3898 .LBB1216:
+ 3899 .LBB1217:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3900 .loc 3 1278 0
+ 3901 2c70 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 3901 00000000
+ 3902 2c78 F30F6F8D movdqu -2944(%rbp), %xmm1
+ 3902 80F4FFFF
+ 3903 2c80 F30F7F8D movdqu %xmm1, -2912(%rbp)
+ 3903 A0F4FFFF
+ 3904 2c88 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 3904 90F4FFFF
+ 3905 2c90 F30F6F85 movdqu -2912(%rbp), %xmm0
+ 3905 A0F4FFFF
+ 3906 2c98 F30F7F85 movdqu %xmm0, -2880(%rbp)
+ 3906 C0F4FFFF
+ 3907 2ca0 F30F6F85 movdqu -2928(%rbp), %xmm0
+ 3907 90F4FFFF
+ 3908 2ca8 F30F7F85 movdqu %xmm0, -2896(%rbp)
+ 3908 B0F4FFFF
+ 3909 .LBB1218:
+ 3910 .LBB1219:
+ 3911 .LBB1220:
+ 3912 .LBB1221:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccPaCTqg.s page 148
+
+
+ 3913 .loc 1 529 0
+ 3914 2cb0 F30F6F8D movdqu -2896(%rbp), %xmm1
+ 3914 B0F4FFFF
+ 3915 2cb8 F30F6F85 movdqu -2880(%rbp), %xmm0
+ 3915 C0F4FFFF
+ 3916 2cc0 660F3800 pshufb %xmm1, %xmm0
+ 3916 C1
+ 3917 .LBE1221:
+ 3918 .LBE1220:
+ 3919 .LBE1219:
+ 3920 .LBE1218:
+ 3921 .LBE1217:
+ 3922 .LBE1216:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3923 .loc 3 1569 0
+ 3924 2cc5 660F7F85 movdqa %xmm0, -6032(%rbp)
+ 3924 70E8FFFF
+ 3925 2ccd 660F6F85 movdqa -6032(%rbp), %xmm0
+ 3925 70E8FFFF
+ 3926 2cd5 660FEF85 pxor -3120(%rbp), %xmm0
+ 3926 D0F3FFFF
+ 3927 2cdd F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 3927 D0F3FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3928 .loc 3 1571 0
+ 3929 2ce5 F30F6F85 movdqu -3120(%rbp), %xmm0
+ 3929 D0F3FFFF
+ 3930 .LBE1203:
+ 3931 .LBE1202:
+1830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k22 :k22^k23: k23 : 0 */
+ 3932 .loc 3 1830 0
+ 3933 2ced 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 3933 60E7FFFF
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 3934 .loc 3 1831 0
+ 3935 2cf5 660F6F85 movdqa -6288(%rbp), %xmm0
+ 3935 70E7FFFF
+ 3936 2cfd 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3936 A0E7FFFF
+ 3937 2d05 660F6F95 movdqa -6240(%rbp), %xmm2
+ 3937 A0E7FFFF
+ 3938 2d0d F30F7F95 movdqu %xmm2, -2848(%rbp)
+ 3938 E0F4FFFF
+ 3939 .LBB1222:
+ 3940 .LBB1223:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 3941 .loc 3 1673 0
+ 3942 2d15 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 3942 E0F4FFFF
+ 3943 2d1d 660F7F85 movdqa %xmm0, -6016(%rbp)
+ 3943 80E8FFFF
+ 3944 2d25 660F6F95 movdqa -6016(%rbp), %xmm2
+ 3944 80E8FFFF
+ 3945 2d2d F30F7F95 movdqu %xmm2, -2816(%rbp)
+ 3945 00F5FFFF
+ 3946 .LBB1224:
+ 3947 .LBB1225:
+
GAS LISTING /tmp/ccPaCTqg.s page 149
+
+
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 3948 .loc 1 852 0
+ 3949 2d35 F30F6F85 movdqu -2816(%rbp), %xmm0
+ 3949 00F5FFFF
+ 3950 2d3d 660F3ADF aeskeygenassist $8, %xmm0, %xmm0
+ 3950 C008
+ 3951 .LBE1225:
+ 3952 .LBE1224:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 3953 .loc 3 1674 0
+ 3954 2d43 660F7F85 movdqa %xmm0, -6016(%rbp)
+ 3954 80E8FFFF
+ 3955 2d4b 660F6F85 movdqa -6016(%rbp), %xmm0
+ 3955 80E8FFFF
+ 3956 2d53 F30F7F85 movdqu %xmm0, -2800(%rbp)
+ 3956 10F5FFFF
+ 3957 2d5b F30F6F85 movdqu -2800(%rbp), %xmm0
+ 3957 10F5FFFF
+ 3958 2d63 F30F7F85 movdqu %xmm0, -2768(%rbp)
+ 3958 30F5FFFF
+ 3959 .LBB1226:
+ 3960 .LBB1227:
+ 3961 .LBB1228:
+ 3962 .LBB1229:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3963 .loc 1 450 0
+ 3964 2d6b F30F6F85 movdqu -2768(%rbp), %xmm0
+ 3964 30F5FFFF
+ 3965 2d73 660F70C0 pshufd $255, %xmm0, %xmm0
+ 3965 FF
+ 3966 .LBE1229:
+ 3967 .LBE1228:
+ 3968 .LBE1227:
+ 3969 .LBE1226:
+ 3970 .LBE1223:
+ 3971 .LBE1222:
+ 3972 .loc 3 1831 0
+ 3973 2d78 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3973 A0E7FFFF
+1832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v2,0x08); /* F(k23): F(k23): F(k23) : F(k23) */
+1833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k24 : k25 : k26 : k27 */
+ 3974 .loc 3 1833 0
+ 3975 2d80 660F6F95 movdqa -6320(%rbp), %xmm2
+ 3975 50E7FFFF
+ 3976 2d88 660FEF95 pxor -6240(%rbp), %xmm2
+ 3976 A0E7FFFF
+ 3977 2d90 660F7F95 movdqa %xmm2, -6320(%rbp)
+ 3977 50E7FFFF
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k27 : k27 : k27 : k27 */
+ 3978 .loc 3 1834 0
+ 3979 2d98 660F6F85 movdqa -6320(%rbp), %xmm0
+ 3979 50E7FFFF
+ 3980 2da0 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3980 A0E7FFFF
+ 3981 2da8 660F6F95 movdqa -6240(%rbp), %xmm2
+ 3981 A0E7FFFF
+ 3982 2db0 F30F7F95 movdqu %xmm2, -2752(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 150
+
+
+ 3982 40F5FFFF
+ 3983 2db8 F30F6F85 movdqu -2752(%rbp), %xmm0
+ 3983 40F5FFFF
+ 3984 2dc0 F30F7F85 movdqu %xmm0, -2720(%rbp)
+ 3984 60F5FFFF
+ 3985 .LBB1230:
+ 3986 .LBB1231:
+ 3987 .LBB1232:
+ 3988 .LBB1233:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3989 .loc 1 450 0
+ 3990 2dc8 F30F6F85 movdqu -2720(%rbp), %xmm0
+ 3990 60F5FFFF
+ 3991 2dd0 660F70C0 pshufd $255, %xmm0, %xmm0
+ 3991 FF
+ 3992 .LBE1233:
+ 3993 .LBE1232:
+ 3994 .LBE1231:
+ 3995 .LBE1230:
+ 3996 .loc 3 1834 0
+ 3997 2dd5 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 3997 A0E7FFFF
+1835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k28 : k29 : x : x */
+ 3998 .loc 3 1835 0
+ 3999 2ddd 660F6F85 movdqa -6304(%rbp), %xmm0
+ 3999 60E7FFFF
+ 4000 2de5 660FEF85 pxor -6240(%rbp), %xmm0
+ 4000 A0E7FFFF
+ 4001 2ded 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 4001 60E7FFFF
+1836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[6] = v0; /* K24:K25:K26:K27 */
+ 4002 .loc 3 1837 0
+ 4003 2df5 488B8548 movq -5816(%rbp), %rax
+ 4003 E9FFFF
+ 4004 2dfc 4883C060 addq $96, %rax
+ 4005 2e00 660F6F95 movdqa -6320(%rbp), %xmm2
+ 4005 50E7FFFF
+ 4006 2e08 660F7F10 movdqa %xmm2, (%rax)
+1838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 28-39 */
+1840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 4007 .loc 3 1842 0
+ 4008 2e0c 660F6F85 movdqa -6304(%rbp), %xmm0
+ 4008 60E7FFFF
+ 4009 2e14 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 4009 A0E7FFFF
+ 4010 2e1c 660F6F95 movdqa -6240(%rbp), %xmm2
+ 4010 A0E7FFFF
+ 4011 2e24 F30F7F95 movdqu %xmm2, -2688(%rbp)
+ 4011 80F5FFFF
+ 4012 .LBB1234:
+ 4013 .LBB1235:
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 4014 .loc 3 1621 0
+
GAS LISTING /tmp/ccPaCTqg.s page 151
+
+
+ 4015 2e2c F30F6F85 movdqu -2688(%rbp), %xmm0
+ 4015 80F5FFFF
+ 4016 2e34 660F7F85 movdqa %xmm0, -6000(%rbp)
+ 4016 90E8FFFF
+ 4017 2e3c 660F6F95 movdqa -6000(%rbp), %xmm2
+ 4017 90E8FFFF
+ 4018 2e44 F30F7F95 movdqu %xmm2, -2656(%rbp)
+ 4018 A0F5FFFF
+ 4019 .LBB1236:
+ 4020 .LBB1237:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 4021 .loc 1 852 0
+ 4022 2e4c F30F6F85 movdqu -2656(%rbp), %xmm0
+ 4022 A0F5FFFF
+ 4023 2e54 660F3ADF aeskeygenassist $16, %xmm0, %xmm0
+ 4023 C010
+ 4024 .LBE1237:
+ 4025 .LBE1236:
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 4026 .loc 3 1622 0
+ 4027 2e5a 660F7F85 movdqa %xmm0, -6000(%rbp)
+ 4027 90E8FFFF
+ 4028 2e62 660F6F85 movdqa -6000(%rbp), %xmm0
+ 4028 90E8FFFF
+ 4029 2e6a F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 4029 B0F5FFFF
+ 4030 2e72 F30F6F85 movdqu -2640(%rbp), %xmm0
+ 4030 B0F5FFFF
+ 4031 2e7a F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 4031 D0F5FFFF
+ 4032 .LBB1238:
+ 4033 .LBB1239:
+ 4034 .LBB1240:
+ 4035 .LBB1241:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4036 .loc 1 450 0
+ 4037 2e82 F30F6F85 movdqu -2608(%rbp), %xmm0
+ 4037 D0F5FFFF
+ 4038 2e8a 660F70C0 pshufd $85, %xmm0, %xmm0
+ 4038 55
+ 4039 .LBE1241:
+ 4040 .LBE1240:
+ 4041 .LBE1239:
+ 4042 .LBE1238:
+ 4043 .LBE1235:
+ 4044 .LBE1234:
+ 4045 .loc 3 1842 0
+ 4046 2e8f 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 4046 A0E7FFFF
+ 4047 2e97 660F6F95 movdqa -6320(%rbp), %xmm2
+ 4047 50E7FFFF
+ 4048 2e9f F30F7F95 movdqu %xmm2, -2592(%rbp)
+ 4048 E0F5FFFF
+ 4049 .LBB1242:
+ 4050 .LBB1243:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4051 .loc 3 1565 0
+
GAS LISTING /tmp/ccPaCTqg.s page 152
+
+
+ 4052 2ea7 F30F6F85 movdqu -2592(%rbp), %xmm0
+ 4052 E0F5FFFF
+ 4053 2eaf 660F7F85 movdqa %xmm0, -5984(%rbp)
+ 4053 A0E8FFFF
+ 4054 2eb7 660F6F95 movdqa -5984(%rbp), %xmm2
+ 4054 A0E8FFFF
+ 4055 2ebf F30F7F95 movdqu %xmm2, -2576(%rbp)
+ 4055 F0F5FFFF
+ 4056 .LBB1244:
+ 4057 .LBB1245:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4058 .loc 3 1278 0
+ 4059 2ec7 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4059 00000000
+ 4060 2ecf F30F6F8D movdqu -2576(%rbp), %xmm1
+ 4060 F0F5FFFF
+ 4061 2ed7 F30F7F8D movdqu %xmm1, -2544(%rbp)
+ 4061 10F6FFFF
+ 4062 2edf F30F7F85 movdqu %xmm0, -2560(%rbp)
+ 4062 00F6FFFF
+ 4063 2ee7 F30F6F85 movdqu -2544(%rbp), %xmm0
+ 4063 10F6FFFF
+ 4064 2eef F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 4064 30F6FFFF
+ 4065 2ef7 F30F6F85 movdqu -2560(%rbp), %xmm0
+ 4065 00F6FFFF
+ 4066 2eff F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 4066 20F6FFFF
+ 4067 .LBB1246:
+ 4068 .LBB1247:
+ 4069 .LBB1248:
+ 4070 .LBB1249:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4071 .loc 1 529 0
+ 4072 2f07 F30F6F8D movdqu -2528(%rbp), %xmm1
+ 4072 20F6FFFF
+ 4073 2f0f F30F6F85 movdqu -2512(%rbp), %xmm0
+ 4073 30F6FFFF
+ 4074 2f17 660F3800 pshufb %xmm1, %xmm0
+ 4074 C1
+ 4075 .LBE1249:
+ 4076 .LBE1248:
+ 4077 .LBE1247:
+ 4078 .LBE1246:
+ 4079 .LBE1245:
+ 4080 .LBE1244:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4081 .loc 3 1567 0
+ 4082 2f1c 660F7F85 movdqa %xmm0, -5984(%rbp)
+ 4082 A0E8FFFF
+ 4083 2f24 660F6F85 movdqa -5984(%rbp), %xmm0
+ 4083 A0E8FFFF
+ 4084 2f2c 660FEF85 pxor -2592(%rbp), %xmm0
+ 4084 E0F5FFFF
+ 4085 2f34 F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 4085 E0F5FFFF
+ 4086 2f3c 660F6F85 movdqa -5984(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 153
+
+
+ 4086 A0E8FFFF
+ 4087 2f44 F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 4087 40F6FFFF
+ 4088 .LBB1250:
+ 4089 .LBB1251:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4090 .loc 3 1278 0
+ 4091 2f4c 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4091 00000000
+ 4092 2f54 F30F6F8D movdqu -2496(%rbp), %xmm1
+ 4092 40F6FFFF
+ 4093 2f5c F30F7F8D movdqu %xmm1, -2464(%rbp)
+ 4093 60F6FFFF
+ 4094 2f64 F30F7F85 movdqu %xmm0, -2480(%rbp)
+ 4094 50F6FFFF
+ 4095 2f6c F30F6F85 movdqu -2464(%rbp), %xmm0
+ 4095 60F6FFFF
+ 4096 2f74 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 4096 80F6FFFF
+ 4097 2f7c F30F6F85 movdqu -2480(%rbp), %xmm0
+ 4097 50F6FFFF
+ 4098 2f84 F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 4098 70F6FFFF
+ 4099 .LBB1252:
+ 4100 .LBB1253:
+ 4101 .LBB1254:
+ 4102 .LBB1255:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4103 .loc 1 529 0
+ 4104 2f8c F30F6F8D movdqu -2448(%rbp), %xmm1
+ 4104 70F6FFFF
+ 4105 2f94 F30F6F85 movdqu -2432(%rbp), %xmm0
+ 4105 80F6FFFF
+ 4106 2f9c 660F3800 pshufb %xmm1, %xmm0
+ 4106 C1
+ 4107 .LBE1255:
+ 4108 .LBE1254:
+ 4109 .LBE1253:
+ 4110 .LBE1252:
+ 4111 .LBE1251:
+ 4112 .LBE1250:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4113 .loc 3 1568 0
+ 4114 2fa1 660F7F85 movdqa %xmm0, -5984(%rbp)
+ 4114 A0E8FFFF
+ 4115 2fa9 660F6F85 movdqa -5984(%rbp), %xmm0
+ 4115 A0E8FFFF
+ 4116 2fb1 660FEF85 pxor -2592(%rbp), %xmm0
+ 4116 E0F5FFFF
+ 4117 2fb9 F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 4117 E0F5FFFF
+ 4118 2fc1 660F6F95 movdqa -5984(%rbp), %xmm2
+ 4118 A0E8FFFF
+ 4119 2fc9 F30F7F95 movdqu %xmm2, -2416(%rbp)
+ 4119 90F6FFFF
+ 4120 .LBB1256:
+ 4121 .LBB1257:
+
GAS LISTING /tmp/ccPaCTqg.s page 154
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4122 .loc 3 1278 0
+ 4123 2fd1 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4123 00000000
+ 4124 2fd9 F30F6F8D movdqu -2416(%rbp), %xmm1
+ 4124 90F6FFFF
+ 4125 2fe1 F30F7F8D movdqu %xmm1, -2384(%rbp)
+ 4125 B0F6FFFF
+ 4126 2fe9 F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 4126 A0F6FFFF
+ 4127 2ff1 F30F6F85 movdqu -2384(%rbp), %xmm0
+ 4127 B0F6FFFF
+ 4128 2ff9 F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 4128 D0F6FFFF
+ 4129 3001 F30F6F85 movdqu -2400(%rbp), %xmm0
+ 4129 A0F6FFFF
+ 4130 3009 F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 4130 C0F6FFFF
+ 4131 .LBB1258:
+ 4132 .LBB1259:
+ 4133 .LBB1260:
+ 4134 .LBB1261:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4135 .loc 1 529 0
+ 4136 3011 F30F6F8D movdqu -2368(%rbp), %xmm1
+ 4136 C0F6FFFF
+ 4137 3019 F30F6F85 movdqu -2352(%rbp), %xmm0
+ 4137 D0F6FFFF
+ 4138 3021 660F3800 pshufb %xmm1, %xmm0
+ 4138 C1
+ 4139 .LBE1261:
+ 4140 .LBE1260:
+ 4141 .LBE1259:
+ 4142 .LBE1258:
+ 4143 .LBE1257:
+ 4144 .LBE1256:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4145 .loc 3 1569 0
+ 4146 3026 660F7F85 movdqa %xmm0, -5984(%rbp)
+ 4146 A0E8FFFF
+ 4147 302e 660F6F85 movdqa -5984(%rbp), %xmm0
+ 4147 A0E8FFFF
+ 4148 3036 660FEF85 pxor -2592(%rbp), %xmm0
+ 4148 E0F5FFFF
+ 4149 303e F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 4149 E0F5FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4150 .loc 3 1571 0
+ 4151 3046 F30F6F85 movdqu -2592(%rbp), %xmm0
+ 4151 E0F5FFFF
+ 4152 .LBE1243:
+ 4153 .LBE1242:
+1843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1,0x10); /* F(k29): F(k29): F(k29) : F(k29) */
+1844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k24 :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+ 4154 .loc 3 1844 0
+ 4155 304e 660F7F85 movdqa %xmm0, -6272(%rbp)
+ 4155 80E7FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 155
+
+
+1845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k30 : k31 : k32 : k33 */
+ 4156 .loc 3 1845 0
+ 4157 3056 660F6F85 movdqa -6272(%rbp), %xmm0
+ 4157 80E7FFFF
+ 4158 305e 660FEF85 pxor -6240(%rbp), %xmm0
+ 4158 A0E7FFFF
+ 4159 3066 660F7F85 movdqa %xmm0, -6272(%rbp)
+ 4159 80E7FFFF
+ 4160 306e 660F6F95 movdqa -6304(%rbp), %xmm2
+ 4160 60E7FFFF
+ 4161 3076 F30F7F95 movdqu %xmm2, -2336(%rbp)
+ 4161 E0F6FFFF
+ 4162 .LBB1262:
+ 4163 .LBB1263:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4164 .loc 3 1565 0
+ 4165 307e F30F6F85 movdqu -2336(%rbp), %xmm0
+ 4165 E0F6FFFF
+ 4166 3086 660F7F85 movdqa %xmm0, -5968(%rbp)
+ 4166 B0E8FFFF
+ 4167 308e 660F6F95 movdqa -5968(%rbp), %xmm2
+ 4167 B0E8FFFF
+ 4168 3096 F30F7F95 movdqu %xmm2, -2320(%rbp)
+ 4168 F0F6FFFF
+ 4169 .LBB1264:
+ 4170 .LBB1265:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4171 .loc 3 1278 0
+ 4172 309e 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4172 00000000
+ 4173 30a6 F30F6F8D movdqu -2320(%rbp), %xmm1
+ 4173 F0F6FFFF
+ 4174 30ae F30F7F8D movdqu %xmm1, -2288(%rbp)
+ 4174 10F7FFFF
+ 4175 30b6 F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 4175 00F7FFFF
+ 4176 30be F30F6F85 movdqu -2288(%rbp), %xmm0
+ 4176 10F7FFFF
+ 4177 30c6 F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 4177 30F7FFFF
+ 4178 30ce F30F6F85 movdqu -2304(%rbp), %xmm0
+ 4178 00F7FFFF
+ 4179 30d6 F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 4179 20F7FFFF
+ 4180 .LBB1266:
+ 4181 .LBB1267:
+ 4182 .LBB1268:
+ 4183 .LBB1269:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4184 .loc 1 529 0
+ 4185 30de F30F6F8D movdqu -2272(%rbp), %xmm1
+ 4185 20F7FFFF
+ 4186 30e6 F30F6F85 movdqu -2256(%rbp), %xmm0
+ 4186 30F7FFFF
+ 4187 30ee 660F3800 pshufb %xmm1, %xmm0
+ 4187 C1
+ 4188 .LBE1269:
+
GAS LISTING /tmp/ccPaCTqg.s page 156
+
+
+ 4189 .LBE1268:
+ 4190 .LBE1267:
+ 4191 .LBE1266:
+ 4192 .LBE1265:
+ 4193 .LBE1264:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4194 .loc 3 1567 0
+ 4195 30f3 660F7F85 movdqa %xmm0, -5968(%rbp)
+ 4195 B0E8FFFF
+ 4196 30fb 660F6F85 movdqa -5968(%rbp), %xmm0
+ 4196 B0E8FFFF
+ 4197 3103 660FEF85 pxor -2336(%rbp), %xmm0
+ 4197 E0F6FFFF
+ 4198 310b F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 4198 E0F6FFFF
+ 4199 3113 660F6F85 movdqa -5968(%rbp), %xmm0
+ 4199 B0E8FFFF
+ 4200 311b F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 4200 40F7FFFF
+ 4201 .LBB1270:
+ 4202 .LBB1271:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4203 .loc 3 1278 0
+ 4204 3123 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4204 00000000
+ 4205 312b F30F6F8D movdqu -2240(%rbp), %xmm1
+ 4205 40F7FFFF
+ 4206 3133 F30F7F8D movdqu %xmm1, -2208(%rbp)
+ 4206 60F7FFFF
+ 4207 313b F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 4207 50F7FFFF
+ 4208 3143 F30F6F85 movdqu -2208(%rbp), %xmm0
+ 4208 60F7FFFF
+ 4209 314b F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 4209 80F7FFFF
+ 4210 3153 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 4210 50F7FFFF
+ 4211 315b F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 4211 70F7FFFF
+ 4212 .LBB1272:
+ 4213 .LBB1273:
+ 4214 .LBB1274:
+ 4215 .LBB1275:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4216 .loc 1 529 0
+ 4217 3163 F30F6F8D movdqu -2192(%rbp), %xmm1
+ 4217 70F7FFFF
+ 4218 316b F30F6F85 movdqu -2176(%rbp), %xmm0
+ 4218 80F7FFFF
+ 4219 3173 660F3800 pshufb %xmm1, %xmm0
+ 4219 C1
+ 4220 .LBE1275:
+ 4221 .LBE1274:
+ 4222 .LBE1273:
+ 4223 .LBE1272:
+ 4224 .LBE1271:
+ 4225 .LBE1270:
+
GAS LISTING /tmp/ccPaCTqg.s page 157
+
+
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4226 .loc 3 1568 0
+ 4227 3178 660F7F85 movdqa %xmm0, -5968(%rbp)
+ 4227 B0E8FFFF
+ 4228 3180 660F6F85 movdqa -5968(%rbp), %xmm0
+ 4228 B0E8FFFF
+ 4229 3188 660FEF85 pxor -2336(%rbp), %xmm0
+ 4229 E0F6FFFF
+ 4230 3190 F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 4230 E0F6FFFF
+ 4231 3198 660F6F95 movdqa -5968(%rbp), %xmm2
+ 4231 B0E8FFFF
+ 4232 31a0 F30F7F95 movdqu %xmm2, -2160(%rbp)
+ 4232 90F7FFFF
+ 4233 .LBB1276:
+ 4234 .LBB1277:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4235 .loc 3 1278 0
+ 4236 31a8 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4236 00000000
+ 4237 31b0 F30F6F8D movdqu -2160(%rbp), %xmm1
+ 4237 90F7FFFF
+ 4238 31b8 F30F7F8D movdqu %xmm1, -2128(%rbp)
+ 4238 B0F7FFFF
+ 4239 31c0 F30F7F85 movdqu %xmm0, -2144(%rbp)
+ 4239 A0F7FFFF
+ 4240 31c8 F30F6F85 movdqu -2128(%rbp), %xmm0
+ 4240 B0F7FFFF
+ 4241 31d0 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 4241 D0F7FFFF
+ 4242 31d8 F30F6F85 movdqu -2144(%rbp), %xmm0
+ 4242 A0F7FFFF
+ 4243 31e0 F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 4243 C0F7FFFF
+ 4244 .LBB1278:
+ 4245 .LBB1279:
+ 4246 .LBB1280:
+ 4247 .LBB1281:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4248 .loc 1 529 0
+ 4249 31e8 F30F6F8D movdqu -2112(%rbp), %xmm1
+ 4249 C0F7FFFF
+ 4250 31f0 F30F6F85 movdqu -2096(%rbp), %xmm0
+ 4250 D0F7FFFF
+ 4251 31f8 660F3800 pshufb %xmm1, %xmm0
+ 4251 C1
+ 4252 .LBE1281:
+ 4253 .LBE1280:
+ 4254 .LBE1279:
+ 4255 .LBE1278:
+ 4256 .LBE1277:
+ 4257 .LBE1276:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4258 .loc 3 1569 0
+ 4259 31fd 660F7F85 movdqa %xmm0, -5968(%rbp)
+ 4259 B0E8FFFF
+ 4260 3205 660F6F85 movdqa -5968(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 158
+
+
+ 4260 B0E8FFFF
+ 4261 320d 660FEF85 pxor -2336(%rbp), %xmm0
+ 4261 E0F6FFFF
+ 4262 3215 F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 4262 E0F6FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4263 .loc 3 1571 0
+ 4264 321d F30F6F85 movdqu -2336(%rbp), %xmm0
+ 4264 E0F6FFFF
+ 4265 .LBE1263:
+ 4266 .LBE1262:
+1846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k26 :k28^k29: k29 : 0 */
+ 4267 .loc 3 1846 0
+ 4268 3225 660F7F85 movdqa %xmm0, -6256(%rbp)
+ 4268 90E7FFFF
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k33 : k33 : k33 : k33 */
+ 4269 .loc 3 1847 0
+ 4270 322d 660F6F85 movdqa -6272(%rbp), %xmm0
+ 4270 80E7FFFF
+ 4271 3235 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 4271 A0E7FFFF
+ 4272 323d 660F6F95 movdqa -6240(%rbp), %xmm2
+ 4272 A0E7FFFF
+ 4273 3245 F30F7F95 movdqu %xmm2, -2080(%rbp)
+ 4273 E0F7FFFF
+ 4274 324d F30F6F85 movdqu -2080(%rbp), %xmm0
+ 4274 E0F7FFFF
+ 4275 3255 F30F7F85 movdqu %xmm0, -2048(%rbp)
+ 4275 00F8FFFF
+ 4276 .LBB1282:
+ 4277 .LBB1283:
+ 4278 .LBB1284:
+ 4279 .LBB1285:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4280 .loc 1 450 0
+ 4281 325d F30F6F85 movdqu -2048(%rbp), %xmm0
+ 4281 00F8FFFF
+ 4282 3265 660F70C0 pshufd $255, %xmm0, %xmm0
+ 4282 FF
+ 4283 .LBE1285:
+ 4284 .LBE1284:
+ 4285 .LBE1283:
+ 4286 .LBE1282:
+ 4287 .loc 3 1847 0
+ 4288 326a 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 4288 A0E7FFFF
+1848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k34 : k35 : x : x */
+ 4289 .loc 3 1848 0
+ 4290 3272 660F6F85 movdqa -6256(%rbp), %xmm0
+ 4290 90E7FFFF
+ 4291 327a 660FEF85 pxor -6240(%rbp), %xmm0
+ 4291 A0E7FFFF
+ 4292 3282 660F7F85 movdqa %xmm0, -6256(%rbp)
+ 4292 90E7FFFF
+ 4293 328a 660F6F95 movdqa -6304(%rbp), %xmm2
+ 4293 60E7FFFF
+ 4294 3292 F30F7F95 movdqu %xmm2, -2016(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 159
+
+
+ 4294 20F8FFFF
+ 4295 329a 660F6F85 movdqa -6272(%rbp), %xmm0
+ 4295 80E7FFFF
+ 4296 32a2 F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 4296 10F8FFFF
+ 4297 32aa F30F6F85 movdqu -2016(%rbp), %xmm0
+ 4297 20F8FFFF
+ 4298 32b2 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 4298 50F8FFFF
+ 4299 32ba F30F6F85 movdqu -2032(%rbp), %xmm0
+ 4299 10F8FFFF
+ 4300 32c2 F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 4300 40F8FFFF
+ 4301 .LBB1286:
+ 4302 .LBB1287:
+ 4303 .LBB1288:
+ 4304 .LBB1289:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 4305 .loc 1 366 0
+ 4306 32ca F20F1085 movsd -1984(%rbp), %xmm0
+ 4306 40F8FFFF
+ 4307 32d2 660F1685 movhpd -1976(%rbp), %xmm0
+ 4307 48F8FFFF
+ 4308 32da F20F108D movsd -1968(%rbp), %xmm1
+ 4308 50F8FFFF
+ 4309 32e2 660F168D movhpd -1960(%rbp), %xmm1
+ 4309 58F8FFFF
+ 4310 32ea 660F28D1 movapd %xmm1, %xmm2
+ 4311 32ee 660F14D0 unpcklpd %xmm0, %xmm2
+ 4312 32f2 660F28C2 movapd %xmm2, %xmm0
+ 4313 .LBE1289:
+ 4314 .LBE1288:
+ 4315 .LBE1287:
+ 4316 .LBE1286:
+1849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k28 : k29 : k30 : k31 */
+ 4317 .loc 3 1849 0
+ 4318 32f6 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 4318 60E7FFFF
+1850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[7] = v1; /* K28:K29:K30:K31 */
+ 4319 .loc 3 1851 0
+ 4320 32fe 488B8548 movq -5816(%rbp), %rax
+ 4320 E9FFFF
+ 4321 3305 4883C070 addq $112, %rax
+ 4322 3309 660F6F85 movdqa -6304(%rbp), %xmm0
+ 4322 60E7FFFF
+ 4323 3311 660F7F00 movdqa %xmm0, (%rax)
+ 4324 3315 660F6F95 movdqa -6272(%rbp), %xmm2
+ 4324 80E7FFFF
+ 4325 331d F30F7F95 movdqu %xmm2, -1936(%rbp)
+ 4325 70F8FFFF
+ 4326 3325 660F6F85 movdqa -6256(%rbp), %xmm0
+ 4326 90E7FFFF
+ 4327 332d F30F7F85 movdqu %xmm0, -1952(%rbp)
+ 4327 60F8FFFF
+ 4328 3335 F30F6F85 movdqu -1936(%rbp), %xmm0
+ 4328 70F8FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 160
+
+
+ 4329 333d F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 4329 A0F8FFFF
+ 4330 3345 F30F6F85 movdqu -1952(%rbp), %xmm0
+ 4330 60F8FFFF
+ 4331 334d F30F7F85 movdqu %xmm0, -1904(%rbp)
+ 4331 90F8FFFF
+ 4332 .LBB1290:
+ 4333 .LBB1291:
+ 4334 .LBB1292:
+ 4335 .LBB1293:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 4336 .loc 1 366 0
+ 4337 3355 F20F108D movsd -1904(%rbp), %xmm1
+ 4337 90F8FFFF
+ 4338 335d 660F168D movhpd -1896(%rbp), %xmm1
+ 4338 98F8FFFF
+ 4339 3365 F20F1085 movsd -1888(%rbp), %xmm0
+ 4339 A0F8FFFF
+ 4340 336d 660F1685 movhpd -1880(%rbp), %xmm0
+ 4340 A8F8FFFF
+ 4341 3375 660FC6C1 shufpd $1, %xmm1, %xmm0
+ 4341 01
+ 4342 .LBE1293:
+ 4343 .LBE1292:
+ 4344 .LBE1291:
+ 4345 .LBE1290:
+1852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k32 : k33 : k34 : k35 */
+ 4346 .loc 3 1853 0
+ 4347 337a 660F7F85 movdqa %xmm0, -6288(%rbp)
+ 4347 70E7FFFF
+1854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[8] = v2; /* K32:K33:K34:K35 */
+ 4348 .loc 3 1854 0
+ 4349 3382 488B8548 movq -5816(%rbp), %rax
+ 4349 E9FFFF
+ 4350 3389 4883E880 subq $-128, %rax
+ 4351 338d 660F6F95 movdqa -6288(%rbp), %xmm2
+ 4351 70E7FFFF
+ 4352 3395 660F7F10 movdqa %xmm2, (%rax)
+ 4353 3399 660F6F85 movdqa -6272(%rbp), %xmm0
+ 4353 80E7FFFF
+ 4354 33a1 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 4354 B0F8FFFF
+ 4355 .LBB1294:
+ 4356 .LBB1295:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4357 .loc 3 1565 0
+ 4358 33a9 F30F6F95 movdqu -1872(%rbp), %xmm2
+ 4358 B0F8FFFF
+ 4359 33b1 660F7F95 movdqa %xmm2, -5952(%rbp)
+ 4359 C0E8FFFF
+ 4360 33b9 660F6F85 movdqa -5952(%rbp), %xmm0
+ 4360 C0E8FFFF
+ 4361 33c1 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 4361 C0F8FFFF
+ 4362 .LBB1296:
+ 4363 .LBB1297:
+
GAS LISTING /tmp/ccPaCTqg.s page 161
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4364 .loc 3 1278 0
+ 4365 33c9 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4365 00000000
+ 4366 33d1 F30F6F8D movdqu -1856(%rbp), %xmm1
+ 4366 C0F8FFFF
+ 4367 33d9 F30F7F8D movdqu %xmm1, -1824(%rbp)
+ 4367 E0F8FFFF
+ 4368 33e1 F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 4368 D0F8FFFF
+ 4369 33e9 F30F6F85 movdqu -1824(%rbp), %xmm0
+ 4369 E0F8FFFF
+ 4370 33f1 F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 4370 00F9FFFF
+ 4371 33f9 F30F6F85 movdqu -1840(%rbp), %xmm0
+ 4371 D0F8FFFF
+ 4372 3401 F30F7F85 movdqu %xmm0, -1808(%rbp)
+ 4372 F0F8FFFF
+ 4373 .LBB1298:
+ 4374 .LBB1299:
+ 4375 .LBB1300:
+ 4376 .LBB1301:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4377 .loc 1 529 0
+ 4378 3409 F30F6F8D movdqu -1808(%rbp), %xmm1
+ 4378 F0F8FFFF
+ 4379 3411 F30F6F85 movdqu -1792(%rbp), %xmm0
+ 4379 00F9FFFF
+ 4380 3419 660F3800 pshufb %xmm1, %xmm0
+ 4380 C1
+ 4381 .LBE1301:
+ 4382 .LBE1300:
+ 4383 .LBE1299:
+ 4384 .LBE1298:
+ 4385 .LBE1297:
+ 4386 .LBE1296:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4387 .loc 3 1567 0
+ 4388 341e 660F7F85 movdqa %xmm0, -5952(%rbp)
+ 4388 C0E8FFFF
+ 4389 3426 660F6F85 movdqa -5952(%rbp), %xmm0
+ 4389 C0E8FFFF
+ 4390 342e 660FEF85 pxor -1872(%rbp), %xmm0
+ 4390 B0F8FFFF
+ 4391 3436 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 4391 B0F8FFFF
+ 4392 343e 660F6F95 movdqa -5952(%rbp), %xmm2
+ 4392 C0E8FFFF
+ 4393 3446 F30F7F95 movdqu %xmm2, -1776(%rbp)
+ 4393 10F9FFFF
+ 4394 .LBB1302:
+ 4395 .LBB1303:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4396 .loc 3 1278 0
+ 4397 344e 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4397 00000000
+ 4398 3456 F30F6F8D movdqu -1776(%rbp), %xmm1
+
GAS LISTING /tmp/ccPaCTqg.s page 162
+
+
+ 4398 10F9FFFF
+ 4399 345e F30F7F8D movdqu %xmm1, -1744(%rbp)
+ 4399 30F9FFFF
+ 4400 3466 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 4400 20F9FFFF
+ 4401 346e F30F6F85 movdqu -1744(%rbp), %xmm0
+ 4401 30F9FFFF
+ 4402 3476 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 4402 50F9FFFF
+ 4403 347e F30F6F85 movdqu -1760(%rbp), %xmm0
+ 4403 20F9FFFF
+ 4404 3486 F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 4404 40F9FFFF
+ 4405 .LBB1304:
+ 4406 .LBB1305:
+ 4407 .LBB1306:
+ 4408 .LBB1307:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4409 .loc 1 529 0
+ 4410 348e F30F6F8D movdqu -1728(%rbp), %xmm1
+ 4410 40F9FFFF
+ 4411 3496 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 4411 50F9FFFF
+ 4412 349e 660F3800 pshufb %xmm1, %xmm0
+ 4412 C1
+ 4413 .LBE1307:
+ 4414 .LBE1306:
+ 4415 .LBE1305:
+ 4416 .LBE1304:
+ 4417 .LBE1303:
+ 4418 .LBE1302:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4419 .loc 3 1568 0
+ 4420 34a3 660F7F85 movdqa %xmm0, -5952(%rbp)
+ 4420 C0E8FFFF
+ 4421 34ab 660F6F85 movdqa -5952(%rbp), %xmm0
+ 4421 C0E8FFFF
+ 4422 34b3 660FEF85 pxor -1872(%rbp), %xmm0
+ 4422 B0F8FFFF
+ 4423 34bb F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 4423 B0F8FFFF
+ 4424 34c3 660F6F85 movdqa -5952(%rbp), %xmm0
+ 4424 C0E8FFFF
+ 4425 34cb F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 4425 60F9FFFF
+ 4426 .LBB1308:
+ 4427 .LBB1309:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4428 .loc 3 1278 0
+ 4429 34d3 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4429 00000000
+ 4430 34db F30F6F8D movdqu -1696(%rbp), %xmm1
+ 4430 60F9FFFF
+ 4431 34e3 F30F7F8D movdqu %xmm1, -1664(%rbp)
+ 4431 80F9FFFF
+ 4432 34eb F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 4432 70F9FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 163
+
+
+ 4433 34f3 F30F6F85 movdqu -1664(%rbp), %xmm0
+ 4433 80F9FFFF
+ 4434 34fb F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 4434 A0F9FFFF
+ 4435 3503 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 4435 70F9FFFF
+ 4436 350b F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 4436 90F9FFFF
+ 4437 .LBB1310:
+ 4438 .LBB1311:
+ 4439 .LBB1312:
+ 4440 .LBB1313:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4441 .loc 1 529 0
+ 4442 3513 F30F6F8D movdqu -1648(%rbp), %xmm1
+ 4442 90F9FFFF
+ 4443 351b F30F6F85 movdqu -1632(%rbp), %xmm0
+ 4443 A0F9FFFF
+ 4444 3523 660F3800 pshufb %xmm1, %xmm0
+ 4444 C1
+ 4445 .LBE1313:
+ 4446 .LBE1312:
+ 4447 .LBE1311:
+ 4448 .LBE1310:
+ 4449 .LBE1309:
+ 4450 .LBE1308:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4451 .loc 3 1569 0
+ 4452 3528 660F7F85 movdqa %xmm0, -5952(%rbp)
+ 4452 C0E8FFFF
+ 4453 3530 660F6F85 movdqa -5952(%rbp), %xmm0
+ 4453 C0E8FFFF
+ 4454 3538 660FEF85 pxor -1872(%rbp), %xmm0
+ 4454 B0F8FFFF
+ 4455 3540 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 4455 B0F8FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4456 .loc 3 1571 0
+ 4457 3548 F30F6F85 movdqu -1872(%rbp), %xmm0
+ 4457 B0F8FFFF
+ 4458 .LBE1295:
+ 4459 .LBE1294:
+1855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k30 :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+ 4460 .loc 3 1856 0
+ 4461 3550 660F7F85 movdqa %xmm0, -6320(%rbp)
+ 4461 50E7FFFF
+ 4462 3558 660F6F95 movdqa -6256(%rbp), %xmm2
+ 4462 90E7FFFF
+ 4463 3560 F30F7F95 movdqu %xmm2, -1616(%rbp)
+ 4463 B0F9FFFF
+ 4464 .LBB1314:
+ 4465 .LBB1315:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4466 .loc 3 1565 0
+ 4467 3568 F30F6F85 movdqu -1616(%rbp), %xmm0
+ 4467 B0F9FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 164
+
+
+ 4468 3570 660F7F85 movdqa %xmm0, -5936(%rbp)
+ 4468 D0E8FFFF
+ 4469 3578 660F6F95 movdqa -5936(%rbp), %xmm2
+ 4469 D0E8FFFF
+ 4470 3580 F30F7F95 movdqu %xmm2, -1600(%rbp)
+ 4470 C0F9FFFF
+ 4471 .LBB1316:
+ 4472 .LBB1317:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4473 .loc 3 1278 0
+ 4474 3588 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4474 00000000
+ 4475 3590 F30F6F8D movdqu -1600(%rbp), %xmm1
+ 4475 C0F9FFFF
+ 4476 3598 F30F7F8D movdqu %xmm1, -1568(%rbp)
+ 4476 E0F9FFFF
+ 4477 35a0 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 4477 D0F9FFFF
+ 4478 35a8 F30F6F85 movdqu -1568(%rbp), %xmm0
+ 4478 E0F9FFFF
+ 4479 35b0 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 4479 00FAFFFF
+ 4480 35b8 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 4480 D0F9FFFF
+ 4481 35c0 F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 4481 F0F9FFFF
+ 4482 .LBB1318:
+ 4483 .LBB1319:
+ 4484 .LBB1320:
+ 4485 .LBB1321:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4486 .loc 1 529 0
+ 4487 35c8 F30F6F8D movdqu -1552(%rbp), %xmm1
+ 4487 F0F9FFFF
+ 4488 35d0 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 4488 00FAFFFF
+ 4489 35d8 660F3800 pshufb %xmm1, %xmm0
+ 4489 C1
+ 4490 .LBE1321:
+ 4491 .LBE1320:
+ 4492 .LBE1319:
+ 4493 .LBE1318:
+ 4494 .LBE1317:
+ 4495 .LBE1316:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4496 .loc 3 1567 0
+ 4497 35dd 660F7F85 movdqa %xmm0, -5936(%rbp)
+ 4497 D0E8FFFF
+ 4498 35e5 660F6F85 movdqa -5936(%rbp), %xmm0
+ 4498 D0E8FFFF
+ 4499 35ed 660FEF85 pxor -1616(%rbp), %xmm0
+ 4499 B0F9FFFF
+ 4500 35f5 F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 4500 B0F9FFFF
+ 4501 35fd 660F6F85 movdqa -5936(%rbp), %xmm0
+ 4501 D0E8FFFF
+ 4502 3605 F30F7F85 movdqu %xmm0, -1520(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 165
+
+
+ 4502 10FAFFFF
+ 4503 .LBB1322:
+ 4504 .LBB1323:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4505 .loc 3 1278 0
+ 4506 360d 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4506 00000000
+ 4507 3615 F30F6F8D movdqu -1520(%rbp), %xmm1
+ 4507 10FAFFFF
+ 4508 361d F30F7F8D movdqu %xmm1, -1488(%rbp)
+ 4508 30FAFFFF
+ 4509 3625 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 4509 20FAFFFF
+ 4510 362d F30F6F85 movdqu -1488(%rbp), %xmm0
+ 4510 30FAFFFF
+ 4511 3635 F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 4511 50FAFFFF
+ 4512 363d F30F6F85 movdqu -1504(%rbp), %xmm0
+ 4512 20FAFFFF
+ 4513 3645 F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 4513 40FAFFFF
+ 4514 .LBB1324:
+ 4515 .LBB1325:
+ 4516 .LBB1326:
+ 4517 .LBB1327:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4518 .loc 1 529 0
+ 4519 364d F30F6F8D movdqu -1472(%rbp), %xmm1
+ 4519 40FAFFFF
+ 4520 3655 F30F6F85 movdqu -1456(%rbp), %xmm0
+ 4520 50FAFFFF
+ 4521 365d 660F3800 pshufb %xmm1, %xmm0
+ 4521 C1
+ 4522 .LBE1327:
+ 4523 .LBE1326:
+ 4524 .LBE1325:
+ 4525 .LBE1324:
+ 4526 .LBE1323:
+ 4527 .LBE1322:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4528 .loc 3 1568 0
+ 4529 3662 660F7F85 movdqa %xmm0, -5936(%rbp)
+ 4529 D0E8FFFF
+ 4530 366a 660F6F85 movdqa -5936(%rbp), %xmm0
+ 4530 D0E8FFFF
+ 4531 3672 660FEF85 pxor -1616(%rbp), %xmm0
+ 4531 B0F9FFFF
+ 4532 367a F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 4532 B0F9FFFF
+ 4533 3682 660F6F95 movdqa -5936(%rbp), %xmm2
+ 4533 D0E8FFFF
+ 4534 368a F30F7F95 movdqu %xmm2, -1440(%rbp)
+ 4534 60FAFFFF
+ 4535 .LBB1328:
+ 4536 .LBB1329:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4537 .loc 3 1278 0
+
GAS LISTING /tmp/ccPaCTqg.s page 166
+
+
+ 4538 3692 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4538 00000000
+ 4539 369a F30F6F8D movdqu -1440(%rbp), %xmm1
+ 4539 60FAFFFF
+ 4540 36a2 F30F7F8D movdqu %xmm1, -1408(%rbp)
+ 4540 80FAFFFF
+ 4541 36aa F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 4541 70FAFFFF
+ 4542 36b2 F30F6F85 movdqu -1408(%rbp), %xmm0
+ 4542 80FAFFFF
+ 4543 36ba F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 4543 A0FAFFFF
+ 4544 36c2 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 4544 70FAFFFF
+ 4545 36ca F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 4545 90FAFFFF
+ 4546 .LBB1330:
+ 4547 .LBB1331:
+ 4548 .LBB1332:
+ 4549 .LBB1333:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4550 .loc 1 529 0
+ 4551 36d2 F30F6F8D movdqu -1392(%rbp), %xmm1
+ 4551 90FAFFFF
+ 4552 36da F30F6F85 movdqu -1376(%rbp), %xmm0
+ 4552 A0FAFFFF
+ 4553 36e2 660F3800 pshufb %xmm1, %xmm0
+ 4553 C1
+ 4554 .LBE1333:
+ 4555 .LBE1332:
+ 4556 .LBE1331:
+ 4557 .LBE1330:
+ 4558 .LBE1329:
+ 4559 .LBE1328:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4560 .loc 3 1569 0
+ 4561 36e7 660F7F85 movdqa %xmm0, -5936(%rbp)
+ 4561 D0E8FFFF
+ 4562 36ef 660F6F85 movdqa -5936(%rbp), %xmm0
+ 4562 D0E8FFFF
+ 4563 36f7 660FEF85 pxor -1616(%rbp), %xmm0
+ 4563 B0F9FFFF
+ 4564 36ff F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 4564 B0F9FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4565 .loc 3 1571 0
+ 4566 3707 F30F6F85 movdqu -1616(%rbp), %xmm0
+ 4566 B0F9FFFF
+ 4567 .LBE1315:
+ 4568 .LBE1314:
+1857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k26 :k26^k27: k27 : 0 */
+ 4569 .loc 3 1857 0
+ 4570 370f 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 4570 60E7FFFF
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 4571 .loc 3 1858 0
+ 4572 3717 660F6F85 movdqa -6288(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 167
+
+
+ 4572 70E7FFFF
+ 4573 371f 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 4573 A0E7FFFF
+ 4574 3727 660F6F95 movdqa -6240(%rbp), %xmm2
+ 4574 A0E7FFFF
+ 4575 372f F30F7F95 movdqu %xmm2, -1344(%rbp)
+ 4575 C0FAFFFF
+ 4576 .LBB1334:
+ 4577 .LBB1335:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 4578 .loc 3 1673 0
+ 4579 3737 F30F6F85 movdqu -1344(%rbp), %xmm0
+ 4579 C0FAFFFF
+ 4580 373f 660F7F85 movdqa %xmm0, -5920(%rbp)
+ 4580 E0E8FFFF
+ 4581 3747 660F6F95 movdqa -5920(%rbp), %xmm2
+ 4581 E0E8FFFF
+ 4582 374f F30F7F95 movdqu %xmm2, -1312(%rbp)
+ 4582 E0FAFFFF
+ 4583 .LBB1336:
+ 4584 .LBB1337:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 4585 .loc 1 852 0
+ 4586 3757 F30F6F85 movdqu -1312(%rbp), %xmm0
+ 4586 E0FAFFFF
+ 4587 375f 660F3ADF aeskeygenassist $32, %xmm0, %xmm0
+ 4587 C020
+ 4588 .LBE1337:
+ 4589 .LBE1336:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 4590 .loc 3 1674 0
+ 4591 3765 660F7F85 movdqa %xmm0, -5920(%rbp)
+ 4591 E0E8FFFF
+ 4592 376d 660F6F85 movdqa -5920(%rbp), %xmm0
+ 4592 E0E8FFFF
+ 4593 3775 F30F7F85 movdqu %xmm0, -1296(%rbp)
+ 4593 F0FAFFFF
+ 4594 377d F30F6F85 movdqu -1296(%rbp), %xmm0
+ 4594 F0FAFFFF
+ 4595 3785 F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 4595 10FBFFFF
+ 4596 .LBB1338:
+ 4597 .LBB1339:
+ 4598 .LBB1340:
+ 4599 .LBB1341:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4600 .loc 1 450 0
+ 4601 378d F30F6F85 movdqu -1264(%rbp), %xmm0
+ 4601 10FBFFFF
+ 4602 3795 660F70C0 pshufd $255, %xmm0, %xmm0
+ 4602 FF
+ 4603 .LBE1341:
+ 4604 .LBE1340:
+ 4605 .LBE1339:
+ 4606 .LBE1338:
+ 4607 .LBE1335:
+ 4608 .LBE1334:
+
GAS LISTING /tmp/ccPaCTqg.s page 168
+
+
+ 4609 .loc 3 1858 0
+ 4610 379a 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 4610 A0E7FFFF
+1859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v2,0x20); /* F(k35): F(k35): F(k35) : F(k35) */
+1860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k36 : k37 : k38 : k39 */
+ 4611 .loc 3 1860 0
+ 4612 37a2 660F6F95 movdqa -6320(%rbp), %xmm2
+ 4612 50E7FFFF
+ 4613 37aa 660FEF95 pxor -6240(%rbp), %xmm2
+ 4613 A0E7FFFF
+ 4614 37b2 660F7F95 movdqa %xmm2, -6320(%rbp)
+ 4614 50E7FFFF
+ 4615 37ba 660F6F85 movdqa -6320(%rbp), %xmm0
+ 4615 50E7FFFF
+ 4616 37c2 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 4616 20FBFFFF
+ 4617 37ca F30F6F85 movdqu -1248(%rbp), %xmm0
+ 4617 20FBFFFF
+ 4618 37d2 F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 4618 40FBFFFF
+ 4619 .LBB1342:
+ 4620 .LBB1343:
+ 4621 .LBB1344:
+ 4622 .LBB1345:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4623 .loc 1 450 0
+ 4624 37da F30F6F85 movdqu -1216(%rbp), %xmm0
+ 4624 40FBFFFF
+ 4625 37e2 660F70C0 pshufd $255, %xmm0, %xmm0
+ 4625 FF
+ 4626 .LBE1345:
+ 4627 .LBE1344:
+ 4628 .LBE1343:
+ 4629 .LBE1342:
+1861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (v0); /* k39 : k39 : k39 : k39 */
+ 4630 .loc 3 1861 0
+ 4631 37e7 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 4631 A0E7FFFF
+1862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k40 : k41 : x : x */
+ 4632 .loc 3 1862 0
+ 4633 37ef 660F6F95 movdqa -6304(%rbp), %xmm2
+ 4633 60E7FFFF
+ 4634 37f7 660FEF95 pxor -6240(%rbp), %xmm2
+ 4634 A0E7FFFF
+ 4635 37ff 660F7F95 movdqa %xmm2, -6304(%rbp)
+ 4635 60E7FFFF
+1863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[9] = v0; /* K36:K37:K38:K39 */
+ 4636 .loc 3 1864 0
+ 4637 3807 488B8548 movq -5816(%rbp), %rax
+ 4637 E9FFFF
+ 4638 380e 48059000 addq $144, %rax
+ 4638 0000
+ 4639 3814 660F6F85 movdqa -6320(%rbp), %xmm0
+ 4639 50E7FFFF
+ 4640 381c 660F7F00 movdqa %xmm0, (%rax)
+1865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 169
+
+
+1866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 40-55 but we only need through 51 so we change from pattern 2 to pattern 3 */
+1867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 4641 .loc 3 1869 0
+ 4642 3820 660F6F95 movdqa -6304(%rbp), %xmm2
+ 4642 60E7FFFF
+ 4643 3828 660F7F95 movdqa %xmm2, -6240(%rbp)
+ 4643 A0E7FFFF
+ 4644 3830 660F6F85 movdqa -6240(%rbp), %xmm0
+ 4644 A0E7FFFF
+ 4645 3838 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 4645 60FBFFFF
+ 4646 .LBB1346:
+ 4647 .LBB1347:
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 4648 .loc 3 1621 0
+ 4649 3840 F30F6F95 movdqu -1184(%rbp), %xmm2
+ 4649 60FBFFFF
+ 4650 3848 660F7F95 movdqa %xmm2, -5904(%rbp)
+ 4650 F0E8FFFF
+ 4651 3850 660F6F85 movdqa -5904(%rbp), %xmm0
+ 4651 F0E8FFFF
+ 4652 3858 F30F7F85 movdqu %xmm0, -1152(%rbp)
+ 4652 80FBFFFF
+ 4653 .LBB1348:
+ 4654 .LBB1349:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 4655 .loc 1 852 0
+ 4656 3860 F30F6F85 movdqu -1152(%rbp), %xmm0
+ 4656 80FBFFFF
+ 4657 3868 660F3ADF aeskeygenassist $64, %xmm0, %xmm0
+ 4657 C040
+ 4658 .LBE1349:
+ 4659 .LBE1348:
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 4660 .loc 3 1622 0
+ 4661 386e 660F7F85 movdqa %xmm0, -5904(%rbp)
+ 4661 F0E8FFFF
+ 4662 3876 660F6F95 movdqa -5904(%rbp), %xmm2
+ 4662 F0E8FFFF
+ 4663 387e F30F7F95 movdqu %xmm2, -1136(%rbp)
+ 4663 90FBFFFF
+ 4664 3886 F30F6F85 movdqu -1136(%rbp), %xmm0
+ 4664 90FBFFFF
+ 4665 388e F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 4665 B0FBFFFF
+ 4666 .LBB1350:
+ 4667 .LBB1351:
+ 4668 .LBB1352:
+ 4669 .LBB1353:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4670 .loc 1 450 0
+ 4671 3896 F30F6F85 movdqu -1104(%rbp), %xmm0
+ 4671 B0FBFFFF
+ 4672 389e 660F70C0 pshufd $85, %xmm0, %xmm0
+ 4672 55
+
GAS LISTING /tmp/ccPaCTqg.s page 170
+
+
+ 4673 .LBE1353:
+ 4674 .LBE1352:
+ 4675 .LBE1351:
+ 4676 .LBE1350:
+ 4677 .LBE1347:
+ 4678 .LBE1346:
+ 4679 .loc 3 1869 0
+ 4680 38a3 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 4680 A0E7FFFF
+ 4681 38ab 660F6F85 movdqa -6320(%rbp), %xmm0
+ 4681 50E7FFFF
+ 4682 38b3 F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 4682 C0FBFFFF
+ 4683 .LBB1354:
+ 4684 .LBB1355:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4685 .loc 3 1565 0
+ 4686 38bb F30F6F95 movdqu -1088(%rbp), %xmm2
+ 4686 C0FBFFFF
+ 4687 38c3 660F7F95 movdqa %xmm2, -5888(%rbp)
+ 4687 00E9FFFF
+ 4688 38cb 660F6F85 movdqa -5888(%rbp), %xmm0
+ 4688 00E9FFFF
+ 4689 38d3 F30F7F85 movdqu %xmm0, -1072(%rbp)
+ 4689 D0FBFFFF
+ 4690 .LBB1356:
+ 4691 .LBB1357:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4692 .loc 3 1278 0
+ 4693 38db 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4693 00000000
+ 4694 38e3 F30F6F8D movdqu -1072(%rbp), %xmm1
+ 4694 D0FBFFFF
+ 4695 38eb F30F7F8D movdqu %xmm1, -1040(%rbp)
+ 4695 F0FBFFFF
+ 4696 38f3 F30F7F85 movdqu %xmm0, -1056(%rbp)
+ 4696 E0FBFFFF
+ 4697 38fb F30F6F85 movdqu -1040(%rbp), %xmm0
+ 4697 F0FBFFFF
+ 4698 3903 F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 4698 10FCFFFF
+ 4699 390b F30F6F85 movdqu -1056(%rbp), %xmm0
+ 4699 E0FBFFFF
+ 4700 3913 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 4700 00FCFFFF
+ 4701 .LBB1358:
+ 4702 .LBB1359:
+ 4703 .LBB1360:
+ 4704 .LBB1361:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4705 .loc 1 529 0
+ 4706 391b F30F6F8D movdqu -1024(%rbp), %xmm1
+ 4706 00FCFFFF
+ 4707 3923 F30F6F85 movdqu -1008(%rbp), %xmm0
+ 4707 10FCFFFF
+ 4708 392b 660F3800 pshufb %xmm1, %xmm0
+ 4708 C1
+
GAS LISTING /tmp/ccPaCTqg.s page 171
+
+
+ 4709 .LBE1361:
+ 4710 .LBE1360:
+ 4711 .LBE1359:
+ 4712 .LBE1358:
+ 4713 .LBE1357:
+ 4714 .LBE1356:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4715 .loc 3 1567 0
+ 4716 3930 660F7F85 movdqa %xmm0, -5888(%rbp)
+ 4716 00E9FFFF
+ 4717 3938 660F6F85 movdqa -5888(%rbp), %xmm0
+ 4717 00E9FFFF
+ 4718 3940 660FEF85 pxor -1088(%rbp), %xmm0
+ 4718 C0FBFFFF
+ 4719 3948 F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 4719 C0FBFFFF
+ 4720 3950 660F6F95 movdqa -5888(%rbp), %xmm2
+ 4720 00E9FFFF
+ 4721 3958 F30F7F95 movdqu %xmm2, -992(%rbp)
+ 4721 20FCFFFF
+ 4722 .LBB1362:
+ 4723 .LBB1363:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4724 .loc 3 1278 0
+ 4725 3960 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4725 00000000
+ 4726 3968 F30F6F8D movdqu -992(%rbp), %xmm1
+ 4726 20FCFFFF
+ 4727 3970 F30F7F8D movdqu %xmm1, -960(%rbp)
+ 4727 40FCFFFF
+ 4728 3978 F30F7F85 movdqu %xmm0, -976(%rbp)
+ 4728 30FCFFFF
+ 4729 3980 F30F6F85 movdqu -960(%rbp), %xmm0
+ 4729 40FCFFFF
+ 4730 3988 F30F7F85 movdqu %xmm0, -928(%rbp)
+ 4730 60FCFFFF
+ 4731 3990 F30F6F85 movdqu -976(%rbp), %xmm0
+ 4731 30FCFFFF
+ 4732 3998 F30F7F85 movdqu %xmm0, -944(%rbp)
+ 4732 50FCFFFF
+ 4733 .LBB1364:
+ 4734 .LBB1365:
+ 4735 .LBB1366:
+ 4736 .LBB1367:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4737 .loc 1 529 0
+ 4738 39a0 F30F6F8D movdqu -944(%rbp), %xmm1
+ 4738 50FCFFFF
+ 4739 39a8 F30F6F85 movdqu -928(%rbp), %xmm0
+ 4739 60FCFFFF
+ 4740 39b0 660F3800 pshufb %xmm1, %xmm0
+ 4740 C1
+ 4741 .LBE1367:
+ 4742 .LBE1366:
+ 4743 .LBE1365:
+ 4744 .LBE1364:
+ 4745 .LBE1363:
+
GAS LISTING /tmp/ccPaCTqg.s page 172
+
+
+ 4746 .LBE1362:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4747 .loc 3 1568 0
+ 4748 39b5 660F7F85 movdqa %xmm0, -5888(%rbp)
+ 4748 00E9FFFF
+ 4749 39bd 660F6F85 movdqa -5888(%rbp), %xmm0
+ 4749 00E9FFFF
+ 4750 39c5 660FEF85 pxor -1088(%rbp), %xmm0
+ 4750 C0FBFFFF
+ 4751 39cd F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 4751 C0FBFFFF
+ 4752 39d5 660F6F85 movdqa -5888(%rbp), %xmm0
+ 4752 00E9FFFF
+ 4753 39dd F30F7F85 movdqu %xmm0, -912(%rbp)
+ 4753 70FCFFFF
+ 4754 .LBB1368:
+ 4755 .LBB1369:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4756 .loc 3 1278 0
+ 4757 39e5 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4757 00000000
+ 4758 39ed F30F6F8D movdqu -912(%rbp), %xmm1
+ 4758 70FCFFFF
+ 4759 39f5 F30F7F8D movdqu %xmm1, -880(%rbp)
+ 4759 90FCFFFF
+ 4760 39fd F30F7F85 movdqu %xmm0, -896(%rbp)
+ 4760 80FCFFFF
+ 4761 3a05 F30F6F85 movdqu -880(%rbp), %xmm0
+ 4761 90FCFFFF
+ 4762 3a0d F30F7F85 movdqu %xmm0, -848(%rbp)
+ 4762 B0FCFFFF
+ 4763 3a15 F30F6F85 movdqu -896(%rbp), %xmm0
+ 4763 80FCFFFF
+ 4764 3a1d F30F7F85 movdqu %xmm0, -864(%rbp)
+ 4764 A0FCFFFF
+ 4765 .LBB1370:
+ 4766 .LBB1371:
+ 4767 .LBB1372:
+ 4768 .LBB1373:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4769 .loc 1 529 0
+ 4770 3a25 F30F6F8D movdqu -864(%rbp), %xmm1
+ 4770 A0FCFFFF
+ 4771 3a2d F30F6F85 movdqu -848(%rbp), %xmm0
+ 4771 B0FCFFFF
+ 4772 3a35 660F3800 pshufb %xmm1, %xmm0
+ 4772 C1
+ 4773 .LBE1373:
+ 4774 .LBE1372:
+ 4775 .LBE1371:
+ 4776 .LBE1370:
+ 4777 .LBE1369:
+ 4778 .LBE1368:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4779 .loc 3 1569 0
+ 4780 3a3a 660F7F85 movdqa %xmm0, -5888(%rbp)
+ 4780 00E9FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 173
+
+
+ 4781 3a42 660F6F85 movdqa -5888(%rbp), %xmm0
+ 4781 00E9FFFF
+ 4782 3a4a 660FEF85 pxor -1088(%rbp), %xmm0
+ 4782 C0FBFFFF
+ 4783 3a52 F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 4783 C0FBFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4784 .loc 3 1571 0
+ 4785 3a5a F30F6F85 movdqu -1088(%rbp), %xmm0
+ 4785 C0FBFFFF
+ 4786 .LBE1355:
+ 4787 .LBE1354:
+1870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1,0x40); /* F(k41): F(k41): F(k41) : F(k41) */
+1871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k36 :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+ 4788 .loc 3 1871 0
+ 4789 3a62 660F7F85 movdqa %xmm0, -6272(%rbp)
+ 4789 80E7FFFF
+ 4790 3a6a 660F6F95 movdqa -6304(%rbp), %xmm2
+ 4790 60E7FFFF
+ 4791 3a72 F30F7F95 movdqu %xmm2, -832(%rbp)
+ 4791 C0FCFFFF
+ 4792 .LBB1374:
+ 4793 .LBB1375:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4794 .loc 3 1565 0
+ 4795 3a7a F30F6F85 movdqu -832(%rbp), %xmm0
+ 4795 C0FCFFFF
+ 4796 3a82 660F7F85 movdqa %xmm0, -5872(%rbp)
+ 4796 10E9FFFF
+ 4797 3a8a 660F6F95 movdqa -5872(%rbp), %xmm2
+ 4797 10E9FFFF
+ 4798 3a92 F30F7F95 movdqu %xmm2, -816(%rbp)
+ 4798 D0FCFFFF
+ 4799 .LBB1376:
+ 4800 .LBB1377:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4801 .loc 3 1278 0
+ 4802 3a9a 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4802 00000000
+ 4803 3aa2 F30F6F8D movdqu -816(%rbp), %xmm1
+ 4803 D0FCFFFF
+ 4804 3aaa F30F7F8D movdqu %xmm1, -784(%rbp)
+ 4804 F0FCFFFF
+ 4805 3ab2 F30F7F85 movdqu %xmm0, -800(%rbp)
+ 4805 E0FCFFFF
+ 4806 3aba F30F6F85 movdqu -784(%rbp), %xmm0
+ 4806 F0FCFFFF
+ 4807 3ac2 F30F7F85 movdqu %xmm0, -752(%rbp)
+ 4807 10FDFFFF
+ 4808 3aca F30F6F85 movdqu -800(%rbp), %xmm0
+ 4808 E0FCFFFF
+ 4809 3ad2 F30F7F85 movdqu %xmm0, -768(%rbp)
+ 4809 00FDFFFF
+ 4810 .LBB1378:
+ 4811 .LBB1379:
+ 4812 .LBB1380:
+ 4813 .LBB1381:
+
GAS LISTING /tmp/ccPaCTqg.s page 174
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4814 .loc 1 529 0
+ 4815 3ada F30F6F8D movdqu -768(%rbp), %xmm1
+ 4815 00FDFFFF
+ 4816 3ae2 F30F6F85 movdqu -752(%rbp), %xmm0
+ 4816 10FDFFFF
+ 4817 3aea 660F3800 pshufb %xmm1, %xmm0
+ 4817 C1
+ 4818 .LBE1381:
+ 4819 .LBE1380:
+ 4820 .LBE1379:
+ 4821 .LBE1378:
+ 4822 .LBE1377:
+ 4823 .LBE1376:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4824 .loc 3 1567 0
+ 4825 3aef 660F7F85 movdqa %xmm0, -5872(%rbp)
+ 4825 10E9FFFF
+ 4826 3af7 660F6F85 movdqa -5872(%rbp), %xmm0
+ 4826 10E9FFFF
+ 4827 3aff 660FEF85 pxor -832(%rbp), %xmm0
+ 4827 C0FCFFFF
+ 4828 3b07 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 4828 C0FCFFFF
+ 4829 3b0f 660F6F85 movdqa -5872(%rbp), %xmm0
+ 4829 10E9FFFF
+ 4830 3b17 F30F7F85 movdqu %xmm0, -736(%rbp)
+ 4830 20FDFFFF
+ 4831 .LBB1382:
+ 4832 .LBB1383:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4833 .loc 3 1278 0
+ 4834 3b1f 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4834 00000000
+ 4835 3b27 F30F6F8D movdqu -736(%rbp), %xmm1
+ 4835 20FDFFFF
+ 4836 3b2f F30F7F8D movdqu %xmm1, -704(%rbp)
+ 4836 40FDFFFF
+ 4837 3b37 F30F7F85 movdqu %xmm0, -720(%rbp)
+ 4837 30FDFFFF
+ 4838 3b3f F30F6F85 movdqu -704(%rbp), %xmm0
+ 4838 40FDFFFF
+ 4839 3b47 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 4839 60FDFFFF
+ 4840 3b4f F30F6F85 movdqu -720(%rbp), %xmm0
+ 4840 30FDFFFF
+ 4841 3b57 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 4841 50FDFFFF
+ 4842 .LBB1384:
+ 4843 .LBB1385:
+ 4844 .LBB1386:
+ 4845 .LBB1387:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4846 .loc 1 529 0
+ 4847 3b5f F30F6F8D movdqu -688(%rbp), %xmm1
+ 4847 50FDFFFF
+ 4848 3b67 F30F6F85 movdqu -672(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 175
+
+
+ 4848 60FDFFFF
+ 4849 3b6f 660F3800 pshufb %xmm1, %xmm0
+ 4849 C1
+ 4850 .LBE1387:
+ 4851 .LBE1386:
+ 4852 .LBE1385:
+ 4853 .LBE1384:
+ 4854 .LBE1383:
+ 4855 .LBE1382:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4856 .loc 3 1568 0
+ 4857 3b74 660F7F85 movdqa %xmm0, -5872(%rbp)
+ 4857 10E9FFFF
+ 4858 3b7c 660F6F85 movdqa -5872(%rbp), %xmm0
+ 4858 10E9FFFF
+ 4859 3b84 660FEF85 pxor -832(%rbp), %xmm0
+ 4859 C0FCFFFF
+ 4860 3b8c F30F7F85 movdqu %xmm0, -832(%rbp)
+ 4860 C0FCFFFF
+ 4861 3b94 660F6F95 movdqa -5872(%rbp), %xmm2
+ 4861 10E9FFFF
+ 4862 3b9c F30F7F95 movdqu %xmm2, -656(%rbp)
+ 4862 70FDFFFF
+ 4863 .LBB1388:
+ 4864 .LBB1389:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4865 .loc 3 1278 0
+ 4866 3ba4 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4866 00000000
+ 4867 3bac F30F6F8D movdqu -656(%rbp), %xmm1
+ 4867 70FDFFFF
+ 4868 3bb4 F30F7F8D movdqu %xmm1, -624(%rbp)
+ 4868 90FDFFFF
+ 4869 3bbc F30F7F85 movdqu %xmm0, -640(%rbp)
+ 4869 80FDFFFF
+ 4870 3bc4 F30F6F85 movdqu -624(%rbp), %xmm0
+ 4870 90FDFFFF
+ 4871 3bcc F30F7F85 movdqu %xmm0, -592(%rbp)
+ 4871 B0FDFFFF
+ 4872 3bd4 F30F6F85 movdqu -640(%rbp), %xmm0
+ 4872 80FDFFFF
+ 4873 3bdc F30F7F85 movdqu %xmm0, -608(%rbp)
+ 4873 A0FDFFFF
+ 4874 .LBB1390:
+ 4875 .LBB1391:
+ 4876 .LBB1392:
+ 4877 .LBB1393:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4878 .loc 1 529 0
+ 4879 3be4 F30F6F8D movdqu -608(%rbp), %xmm1
+ 4879 A0FDFFFF
+ 4880 3bec F30F6F85 movdqu -592(%rbp), %xmm0
+ 4880 B0FDFFFF
+ 4881 3bf4 660F3800 pshufb %xmm1, %xmm0
+ 4881 C1
+ 4882 .LBE1393:
+ 4883 .LBE1392:
+
GAS LISTING /tmp/ccPaCTqg.s page 176
+
+
+ 4884 .LBE1391:
+ 4885 .LBE1390:
+ 4886 .LBE1389:
+ 4887 .LBE1388:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4888 .loc 3 1569 0
+ 4889 3bf9 660F7F85 movdqa %xmm0, -5872(%rbp)
+ 4889 10E9FFFF
+ 4890 3c01 660F6F85 movdqa -5872(%rbp), %xmm0
+ 4890 10E9FFFF
+ 4891 3c09 660FEF85 pxor -832(%rbp), %xmm0
+ 4891 C0FCFFFF
+ 4892 3c11 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 4892 C0FCFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4893 .loc 3 1571 0
+ 4894 3c19 F30F6F85 movdqu -832(%rbp), %xmm0
+ 4894 C0FCFFFF
+ 4895 .LBE1375:
+ 4896 .LBE1374:
+1872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k40 :k40^k41: x 5 : x */
+ 4897 .loc 3 1872 0
+ 4898 3c21 660F7F85 movdqa %xmm0, -6256(%rbp)
+ 4898 90E7FFFF
+1873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k42 : k43 : k44 : k45 */
+ 4899 .loc 3 1873 0
+ 4900 3c29 660F6F85 movdqa -6272(%rbp), %xmm0
+ 4900 80E7FFFF
+ 4901 3c31 660FEF85 pxor -6240(%rbp), %xmm0
+ 4901 A0E7FFFF
+ 4902 3c39 660F7F85 movdqa %xmm0, -6272(%rbp)
+ 4902 80E7FFFF
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k45 : k45 : k45 : k45 */
+ 4903 .loc 3 1874 0
+ 4904 3c41 660F6F95 movdqa -6272(%rbp), %xmm2
+ 4904 80E7FFFF
+ 4905 3c49 660F7F95 movdqa %xmm2, -6240(%rbp)
+ 4905 A0E7FFFF
+ 4906 3c51 660F6F85 movdqa -6240(%rbp), %xmm0
+ 4906 A0E7FFFF
+ 4907 3c59 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 4907 C0FDFFFF
+ 4908 3c61 F30F6F85 movdqu -576(%rbp), %xmm0
+ 4908 C0FDFFFF
+ 4909 3c69 F30F7F85 movdqu %xmm0, -544(%rbp)
+ 4909 E0FDFFFF
+ 4910 .LBB1394:
+ 4911 .LBB1395:
+ 4912 .LBB1396:
+ 4913 .LBB1397:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4914 .loc 1 450 0
+ 4915 3c71 F30F6F85 movdqu -544(%rbp), %xmm0
+ 4915 E0FDFFFF
+ 4916 3c79 660F70C0 pshufd $255, %xmm0, %xmm0
+ 4916 FF
+ 4917 .LBE1397:
+
GAS LISTING /tmp/ccPaCTqg.s page 177
+
+
+ 4918 .LBE1396:
+ 4919 .LBE1395:
+ 4920 .LBE1394:
+ 4921 .loc 3 1874 0
+ 4922 3c7e 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 4922 A0E7FFFF
+1875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k46 : k47 : x : x */
+ 4923 .loc 3 1875 0
+ 4924 3c86 660F6F95 movdqa -6256(%rbp), %xmm2
+ 4924 90E7FFFF
+ 4925 3c8e 660FEF95 pxor -6240(%rbp), %xmm2
+ 4925 A0E7FFFF
+ 4926 3c96 660F7F95 movdqa %xmm2, -6256(%rbp)
+ 4926 90E7FFFF
+ 4927 3c9e 660F6F85 movdqa -6304(%rbp), %xmm0
+ 4927 60E7FFFF
+ 4928 3ca6 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 4928 00FEFFFF
+ 4929 3cae 660F6F95 movdqa -6272(%rbp), %xmm2
+ 4929 80E7FFFF
+ 4930 3cb6 F30F7F95 movdqu %xmm2, -528(%rbp)
+ 4930 F0FDFFFF
+ 4931 3cbe F30F6F85 movdqu -512(%rbp), %xmm0
+ 4931 00FEFFFF
+ 4932 3cc6 F30F7F85 movdqu %xmm0, -464(%rbp)
+ 4932 30FEFFFF
+ 4933 3cce F30F6F85 movdqu -528(%rbp), %xmm0
+ 4933 F0FDFFFF
+ 4934 3cd6 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 4934 20FEFFFF
+ 4935 .LBB1398:
+ 4936 .LBB1399:
+ 4937 .LBB1400:
+ 4938 .LBB1401:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 4939 .loc 1 366 0
+ 4940 3cde F20F1085 movsd -480(%rbp), %xmm0
+ 4940 20FEFFFF
+ 4941 3ce6 660F1685 movhpd -472(%rbp), %xmm0
+ 4941 28FEFFFF
+ 4942 3cee F20F108D movsd -464(%rbp), %xmm1
+ 4942 30FEFFFF
+ 4943 3cf6 660F168D movhpd -456(%rbp), %xmm1
+ 4943 38FEFFFF
+ 4944 3cfe 660F28D1 movapd %xmm1, %xmm2
+ 4945 3d02 660F14D0 unpcklpd %xmm0, %xmm2
+ 4946 3d06 660F28C2 movapd %xmm2, %xmm0
+ 4947 .LBE1401:
+ 4948 .LBE1400:
+ 4949 .LBE1399:
+ 4950 .LBE1398:
+1876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k40 : k41 : k42 : k43 */
+ 4951 .loc 3 1876 0
+ 4952 3d0a 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 4952 60E7FFFF
+1877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[10] = v1; /* K40:K41:K42:K43 */
+ 4953 .loc 3 1877 0
+
GAS LISTING /tmp/ccPaCTqg.s page 178
+
+
+ 4954 3d12 488B8548 movq -5816(%rbp), %rax
+ 4954 E9FFFF
+ 4955 3d19 4805A000 addq $160, %rax
+ 4955 0000
+ 4956 3d1f 660F6F85 movdqa -6304(%rbp), %xmm0
+ 4956 60E7FFFF
+ 4957 3d27 660F7F00 movdqa %xmm0, (%rax)
+ 4958 3d2b 660F6F95 movdqa -6272(%rbp), %xmm2
+ 4958 80E7FFFF
+ 4959 3d33 F30F7F95 movdqu %xmm2, -432(%rbp)
+ 4959 50FEFFFF
+ 4960 3d3b 660F6F85 movdqa -6256(%rbp), %xmm0
+ 4960 90E7FFFF
+ 4961 3d43 F30F7F85 movdqu %xmm0, -448(%rbp)
+ 4961 40FEFFFF
+ 4962 3d4b F30F6F85 movdqu -432(%rbp), %xmm0
+ 4962 50FEFFFF
+ 4963 3d53 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 4963 80FEFFFF
+ 4964 3d5b F30F6F85 movdqu -448(%rbp), %xmm0
+ 4964 40FEFFFF
+ 4965 3d63 F30F7F85 movdqu %xmm0, -400(%rbp)
+ 4965 70FEFFFF
+ 4966 .LBB1402:
+ 4967 .LBB1403:
+ 4968 .LBB1404:
+ 4969 .LBB1405:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 4970 .loc 1 366 0
+ 4971 3d6b F20F108D movsd -400(%rbp), %xmm1
+ 4971 70FEFFFF
+ 4972 3d73 660F168D movhpd -392(%rbp), %xmm1
+ 4972 78FEFFFF
+ 4973 3d7b F20F1085 movsd -384(%rbp), %xmm0
+ 4973 80FEFFFF
+ 4974 3d83 660F1685 movhpd -376(%rbp), %xmm0
+ 4974 88FEFFFF
+ 4975 3d8b 660FC6C1 shufpd $1, %xmm1, %xmm0
+ 4975 01
+ 4976 .LBE1405:
+ 4977 .LBE1404:
+ 4978 .LBE1403:
+ 4979 .LBE1402:
+1878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k44 : k45 : k46 : k47 */
+ 4980 .loc 3 1878 0
+ 4981 3d90 660F7F85 movdqa %xmm0, -6288(%rbp)
+ 4981 70E7FFFF
+1879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[11] = v2; /* K44:K45:K46:K47 */
+ 4982 .loc 3 1879 0
+ 4983 3d98 488B8548 movq -5816(%rbp), %rax
+ 4983 E9FFFF
+ 4984 3d9f 4805B000 addq $176, %rax
+ 4984 0000
+ 4985 3da5 660F6F95 movdqa -6288(%rbp), %xmm2
+ 4985 70E7FFFF
+ 4986 3dad 660F7F10 movdqa %xmm2, (%rax)
+ 4987 3db1 660F6F85 movdqa -6272(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 179
+
+
+ 4987 80E7FFFF
+ 4988 3db9 F30F7F85 movdqu %xmm0, -368(%rbp)
+ 4988 90FEFFFF
+ 4989 .LBB1406:
+ 4990 .LBB1407:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4991 .loc 3 1565 0
+ 4992 3dc1 F30F6F95 movdqu -368(%rbp), %xmm2
+ 4992 90FEFFFF
+ 4993 3dc9 660F7F95 movdqa %xmm2, -5856(%rbp)
+ 4993 20E9FFFF
+ 4994 3dd1 660F6F85 movdqa -5856(%rbp), %xmm0
+ 4994 20E9FFFF
+ 4995 3dd9 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 4995 A0FEFFFF
+ 4996 .LBB1408:
+ 4997 .LBB1409:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4998 .loc 3 1278 0
+ 4999 3de1 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 4999 00000000
+ 5000 3de9 F30F6F8D movdqu -352(%rbp), %xmm1
+ 5000 A0FEFFFF
+ 5001 3df1 F30F7F8D movdqu %xmm1, -320(%rbp)
+ 5001 C0FEFFFF
+ 5002 3df9 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 5002 B0FEFFFF
+ 5003 3e01 F30F6F85 movdqu -320(%rbp), %xmm0
+ 5003 C0FEFFFF
+ 5004 3e09 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 5004 E0FEFFFF
+ 5005 3e11 F30F6F85 movdqu -336(%rbp), %xmm0
+ 5005 B0FEFFFF
+ 5006 3e19 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 5006 D0FEFFFF
+ 5007 .LBB1410:
+ 5008 .LBB1411:
+ 5009 .LBB1412:
+ 5010 .LBB1413:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5011 .loc 1 529 0
+ 5012 3e21 F30F6F8D movdqu -304(%rbp), %xmm1
+ 5012 D0FEFFFF
+ 5013 3e29 F30F6F85 movdqu -288(%rbp), %xmm0
+ 5013 E0FEFFFF
+ 5014 3e31 660F3800 pshufb %xmm1, %xmm0
+ 5014 C1
+ 5015 .LBE1413:
+ 5016 .LBE1412:
+ 5017 .LBE1411:
+ 5018 .LBE1410:
+ 5019 .LBE1409:
+ 5020 .LBE1408:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5021 .loc 3 1567 0
+ 5022 3e36 660F7F85 movdqa %xmm0, -5856(%rbp)
+ 5022 20E9FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 180
+
+
+ 5023 3e3e 660F6F85 movdqa -5856(%rbp), %xmm0
+ 5023 20E9FFFF
+ 5024 3e46 660FEF85 pxor -368(%rbp), %xmm0
+ 5024 90FEFFFF
+ 5025 3e4e F30F7F85 movdqu %xmm0, -368(%rbp)
+ 5025 90FEFFFF
+ 5026 3e56 660F6F95 movdqa -5856(%rbp), %xmm2
+ 5026 20E9FFFF
+ 5027 3e5e F30F7F95 movdqu %xmm2, -272(%rbp)
+ 5027 F0FEFFFF
+ 5028 .LBB1414:
+ 5029 .LBB1415:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5030 .loc 3 1278 0
+ 5031 3e66 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5031 00000000
+ 5032 3e6e F30F6F8D movdqu -272(%rbp), %xmm1
+ 5032 F0FEFFFF
+ 5033 3e76 F30F7F8D movdqu %xmm1, -240(%rbp)
+ 5033 10FFFFFF
+ 5034 3e7e F30F7F85 movdqu %xmm0, -256(%rbp)
+ 5034 00FFFFFF
+ 5035 3e86 F30F6F85 movdqu -240(%rbp), %xmm0
+ 5035 10FFFFFF
+ 5036 3e8e F30F7F85 movdqu %xmm0, -208(%rbp)
+ 5036 30FFFFFF
+ 5037 3e96 F30F6F85 movdqu -256(%rbp), %xmm0
+ 5037 00FFFFFF
+ 5038 3e9e F30F7F85 movdqu %xmm0, -224(%rbp)
+ 5038 20FFFFFF
+ 5039 .LBB1416:
+ 5040 .LBB1417:
+ 5041 .LBB1418:
+ 5042 .LBB1419:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5043 .loc 1 529 0
+ 5044 3ea6 F30F6F8D movdqu -224(%rbp), %xmm1
+ 5044 20FFFFFF
+ 5045 3eae F30F6F85 movdqu -208(%rbp), %xmm0
+ 5045 30FFFFFF
+ 5046 3eb6 660F3800 pshufb %xmm1, %xmm0
+ 5046 C1
+ 5047 .LBE1419:
+ 5048 .LBE1418:
+ 5049 .LBE1417:
+ 5050 .LBE1416:
+ 5051 .LBE1415:
+ 5052 .LBE1414:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5053 .loc 3 1568 0
+ 5054 3ebb 660F7F85 movdqa %xmm0, -5856(%rbp)
+ 5054 20E9FFFF
+ 5055 3ec3 660F6F85 movdqa -5856(%rbp), %xmm0
+ 5055 20E9FFFF
+ 5056 3ecb 660FEF85 pxor -368(%rbp), %xmm0
+ 5056 90FEFFFF
+ 5057 3ed3 F30F7F85 movdqu %xmm0, -368(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 181
+
+
+ 5057 90FEFFFF
+ 5058 3edb 660F6F85 movdqa -5856(%rbp), %xmm0
+ 5058 20E9FFFF
+ 5059 3ee3 F30F7F85 movdqu %xmm0, -192(%rbp)
+ 5059 40FFFFFF
+ 5060 .LBB1420:
+ 5061 .LBB1421:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5062 .loc 3 1278 0
+ 5063 3eeb 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5063 00000000
+ 5064 3ef3 F30F6F8D movdqu -192(%rbp), %xmm1
+ 5064 40FFFFFF
+ 5065 3efb F30F7F8D movdqu %xmm1, -160(%rbp)
+ 5065 60FFFFFF
+ 5066 3f03 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 5066 50FFFFFF
+ 5067 3f0b F30F6F85 movdqu -160(%rbp), %xmm0
+ 5067 60FFFFFF
+ 5068 3f13 F30F7F45 movdqu %xmm0, -128(%rbp)
+ 5068 80
+ 5069 3f18 F30F6F85 movdqu -176(%rbp), %xmm0
+ 5069 50FFFFFF
+ 5070 3f20 F30F7F85 movdqu %xmm0, -144(%rbp)
+ 5070 70FFFFFF
+ 5071 .LBB1422:
+ 5072 .LBB1423:
+ 5073 .LBB1424:
+ 5074 .LBB1425:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5075 .loc 1 529 0
+ 5076 3f28 F30F6F8D movdqu -144(%rbp), %xmm1
+ 5076 70FFFFFF
+ 5077 3f30 F30F6F45 movdqu -128(%rbp), %xmm0
+ 5077 80
+ 5078 3f35 660F3800 pshufb %xmm1, %xmm0
+ 5078 C1
+ 5079 .LBE1425:
+ 5080 .LBE1424:
+ 5081 .LBE1423:
+ 5082 .LBE1422:
+ 5083 .LBE1421:
+ 5084 .LBE1420:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5085 .loc 3 1569 0
+ 5086 3f3a 660F7F85 movdqa %xmm0, -5856(%rbp)
+ 5086 20E9FFFF
+ 5087 3f42 660F6F85 movdqa -5856(%rbp), %xmm0
+ 5087 20E9FFFF
+ 5088 3f4a 660FEF85 pxor -368(%rbp), %xmm0
+ 5088 90FEFFFF
+ 5089 3f52 F30F7F85 movdqu %xmm0, -368(%rbp)
+ 5089 90FEFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5090 .loc 3 1571 0
+ 5091 3f5a F30F6F85 movdqu -368(%rbp), %xmm0
+ 5091 90FEFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 182
+
+
+ 5092 .LBE1407:
+ 5093 .LBE1406:
+1880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 3 */
+1882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k42 :k42^k43:k42^k43^k44:k42^k43^k44^k45 *
+ 5094 .loc 3 1882 0
+ 5095 3f62 660F7F85 movdqa %xmm0, -6320(%rbp)
+ 5095 50E7FFFF
+ 5096 3f6a 660F6F95 movdqa -6288(%rbp), %xmm2
+ 5096 70E7FFFF
+ 5097 3f72 F30F7F55 movdqu %xmm2, -96(%rbp)
+ 5097 A0
+ 5098 .LBB1426:
+ 5099 .LBB1427:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 5100 .loc 3 1673 0
+ 5101 3f77 F30F6F45 movdqu -96(%rbp), %xmm0
+ 5101 A0
+ 5102 3f7c 660F7F85 movdqa %xmm0, -5840(%rbp)
+ 5102 30E9FFFF
+ 5103 3f84 660F6F95 movdqa -5840(%rbp), %xmm2
+ 5103 30E9FFFF
+ 5104 3f8c F30F7F55 movdqu %xmm2, -64(%rbp)
+ 5104 C0
+ 5105 .LBB1428:
+ 5106 .LBB1429:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5107 .loc 1 852 0
+ 5108 3f91 F30F6F45 movdqu -64(%rbp), %xmm0
+ 5108 C0
+ 5109 3f96 660F3ADF aeskeygenassist $128, %xmm0, %xmm0
+ 5109 C080
+ 5110 .LBE1429:
+ 5111 .LBE1428:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 5112 .loc 3 1674 0
+ 5113 3f9c 660F7F85 movdqa %xmm0, -5840(%rbp)
+ 5113 30E9FFFF
+ 5114 3fa4 660F6F85 movdqa -5840(%rbp), %xmm0
+ 5114 30E9FFFF
+ 5115 3fac F30F7F45 movdqu %xmm0, -48(%rbp)
+ 5115 D0
+ 5116 3fb1 F30F6F45 movdqu -48(%rbp), %xmm0
+ 5116 D0
+ 5117 3fb6 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 5117 F0
+ 5118 .LBB1430:
+ 5119 .LBB1431:
+ 5120 .LBB1432:
+ 5121 .LBB1433:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5122 .loc 1 450 0
+ 5123 3fbb F30F6F45 movdqu -16(%rbp), %xmm0
+ 5123 F0
+ 5124 3fc0 660F70C0 pshufd $255, %xmm0, %xmm0
+ 5124 FF
+ 5125 .LBE1433:
+
GAS LISTING /tmp/ccPaCTqg.s page 183
+
+
+ 5126 .LBE1432:
+ 5127 .LBE1431:
+ 5128 .LBE1430:
+ 5129 .LBE1427:
+ 5130 .LBE1426:
+1883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 5131 .loc 3 1883 0
+ 5132 3fc5 660F7F85 movdqa %xmm0, -6240(%rbp)
+ 5132 A0E7FFFF
+1884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (v2,0x80); /* F(k47): F(k47): F(k47) : F(k47) */
+1885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k48 : k49 : k50 : k51 */
+ 5133 .loc 3 1885 0
+ 5134 3fcd 660F6F95 movdqa -6320(%rbp), %xmm2
+ 5134 50E7FFFF
+ 5135 3fd5 660FEF95 pxor -6240(%rbp), %xmm2
+ 5135 A0E7FFFF
+ 5136 3fdd 660F7F95 movdqa %xmm2, -6320(%rbp)
+ 5136 50E7FFFF
+1886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[12] = v0; /* K48:K49:K50:K51 */
+ 5137 .loc 3 1886 0
+ 5138 3fe5 488B8548 movq -5816(%rbp), %rax
+ 5138 E9FFFF
+ 5139 3fec 4805C000 addq $192, %rax
+ 5139 0000
+ 5140 3ff2 660F6F85 movdqa -6320(%rbp), %xmm0
+ 5140 50E7FFFF
+ 5141 3ffa 660F7F00 movdqa %xmm0, (%rax)
+1887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 5142 .loc 3 1887 0
+ 5143 3ffe C9 leave
+ 5144 3fff C3 ret
+ 5145 .cfi_endproc
+ 5146 .LFE657:
+ 5147 .size KAESBlockCipherVecAesNiKeyExpansion192, .-KAESBlockCipherVecAesNiKeyExpansion192
+ 5148 .type KAESBlockCipherVecAesNiKeyExpansion256, @function
+ 5149 KAESBlockCipherVecAesNiKeyExpansion256:
+ 5150 .LFB658:
+1888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * w, const AESByte * key)
+1891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_192, AES_Nk_192);
+1893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----- */
+1900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC || 1
+1902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * round_keys, const AESByte * key)
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 5151 .loc 3 1904 0
+ 5152 .cfi_startproc
+ 5153 4000 55 pushq %rbp
+
GAS LISTING /tmp/ccPaCTqg.s page 184
+
+
+ 5154 .LCFI16:
+ 5155 .cfi_def_cfa_offset 16
+ 5156 4001 4889E5 movq %rsp, %rbp
+ 5157 .cfi_offset 6, -16
+ 5158 .LCFI17:
+ 5159 .cfi_def_cfa_register 6
+ 5160 4004 4881EC88 subq $5512, %rsp
+ 5160 150000
+ 5161 400b 4889BDC8 movq %rdi, -5176(%rbp)
+ 5161 EBFFFF
+ 5162 4012 4889B5C0 movq %rsi, -5184(%rbp)
+ 5162 EBFFFF
+ 5163 .loc 3 1904 0
+ 5164 4019 488B85C0 movq -5184(%rbp), %rax
+ 5164 EBFFFF
+ 5165 4020 48898508 movq %rax, -5112(%rbp)
+ 5165 ECFFFF
+ 5166 .LBB1828:
+ 5167 .LBB1829:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 5168 .loc 3 126 0
+ 5169 4027 488B8508 movq -5112(%rbp), %rax
+ 5169 ECFFFF
+ 5170 402e 4889C7 movq %rax, %rdi
+ 5171 #APP
+ 5172 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 5173 movdqu (%rdi),%xmm0
+ 5174 # 0 "" 2
+ 5175 #NO_APP
+ 5176 4035 660F7F85 movdqa %xmm0, -5632(%rbp)
+ 5176 00EAFFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 5177 .loc 3 129 0
+ 5178 403d 660F6F85 movdqa -5632(%rbp), %xmm0
+ 5178 00EAFFFF
+ 5179 .LBE1829:
+ 5180 .LBE1828:
+1905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec v0, v1;
+1906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec k;
+1907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER (StateIn) (key);
+ 5181 .loc 3 1908 0
+ 5182 4045 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 5182 D0EBFFFF
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+ 5183 .loc 3 1909 0
+ 5184 404d 488B85C0 movq -5184(%rbp), %rax
+ 5184 EBFFFF
+ 5185 4054 4883C010 addq $16, %rax
+ 5186 4058 48898510 movq %rax, -5104(%rbp)
+ 5186 ECFFFF
+ 5187 .LBB1830:
+ 5188 .LBB1831:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 5189 .loc 3 126 0
+ 5190 405f 488B8510 movq -5104(%rbp), %rax
+ 5190 ECFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 185
+
+
+ 5191 4066 4889C7 movq %rax, %rdi
+ 5192 #APP
+ 5193 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 5194 movdqu (%rdi),%xmm0
+ 5195 # 0 "" 2
+ 5196 #NO_APP
+ 5197 406d 660F7F85 movdqa %xmm0, -5616(%rbp)
+ 5197 10EAFFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 5198 .loc 3 129 0
+ 5199 4075 660F6F85 movdqa -5616(%rbp), %xmm0
+ 5199 10EAFFFF
+ 5200 .LBE1831:
+ 5201 .LBE1830:
+ 5202 .loc 3 1909 0
+ 5203 407d F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 5203 E0EBFFFF
+1910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = v0; /* k0 : k1 : k2 : k3 */
+ 5204 .loc 3 1911 0
+ 5205 4085 488B85C8 movq -5176(%rbp), %rax
+ 5205 EBFFFF
+ 5206 408c F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5206 D0EBFFFF
+ 5207 4094 F30F7F00 movdqu %xmm0, (%rax)
+1912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[1] = v1; /* k4 : k5 : k6 : k7 */
+ 5208 .loc 3 1912 0
+ 5209 4098 488B85C8 movq -5176(%rbp), %rax
+ 5209 EBFFFF
+ 5210 409f 4883C010 addq $16, %rax
+ 5211 40a3 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 5211 E0EBFFFF
+ 5212 40ab F30F7F00 movdqu %xmm0, (%rax)
+ 5213 40af F30F6F85 movdqu -5152(%rbp), %xmm0
+ 5213 E0EBFFFF
+ 5214 40b7 F30F7F85 movdqu %xmm0, -5088(%rbp)
+ 5214 20ECFFFF
+ 5215 .LBB1832:
+ 5216 .LBB1833:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 5217 .loc 3 1673 0
+ 5218 40bf F30F6F85 movdqu -5088(%rbp), %xmm0
+ 5218 20ECFFFF
+ 5219 40c7 660F7F85 movdqa %xmm0, -5600(%rbp)
+ 5219 20EAFFFF
+ 5220 40cf 660F6F85 movdqa -5600(%rbp), %xmm0
+ 5220 20EAFFFF
+ 5221 40d7 F30F7F85 movdqu %xmm0, -5056(%rbp)
+ 5221 40ECFFFF
+ 5222 .LBB1834:
+ 5223 .LBB1835:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5224 .loc 1 852 0
+ 5225 40df F30F6F85 movdqu -5056(%rbp), %xmm0
+ 5225 40ECFFFF
+ 5226 40e7 660F3ADF aeskeygenassist $1, %xmm0, %xmm0
+ 5226 C001
+
GAS LISTING /tmp/ccPaCTqg.s page 186
+
+
+ 5227 .LBE1835:
+ 5228 .LBE1834:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 5229 .loc 3 1674 0
+ 5230 40ed 660F7F85 movdqa %xmm0, -5600(%rbp)
+ 5230 20EAFFFF
+ 5231 40f5 660F6F85 movdqa -5600(%rbp), %xmm0
+ 5231 20EAFFFF
+ 5232 40fd F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 5232 50ECFFFF
+ 5233 4105 F30F6F85 movdqu -5040(%rbp), %xmm0
+ 5233 50ECFFFF
+ 5234 410d F30F7F85 movdqu %xmm0, -5008(%rbp)
+ 5234 70ECFFFF
+ 5235 .LBB1836:
+ 5236 .LBB1837:
+ 5237 .LBB1838:
+ 5238 .LBB1839:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5239 .loc 1 450 0
+ 5240 4115 F30F6F85 movdqu -5008(%rbp), %xmm0
+ 5240 70ECFFFF
+ 5241 411d 660F70C0 pshufd $255, %xmm0, %xmm0
+ 5241 FF
+ 5242 .LBE1839:
+ 5243 .LBE1838:
+ 5244 .LBE1837:
+ 5245 .LBE1836:
+ 5246 .LBE1833:
+ 5247 .LBE1832:
+1913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_1(offset,rcon) \
+1915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)(v1,rcon); \
+1916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v0); \
+1917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(VecXor) (v0, k); \
+1918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[offset] = v0
+1919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_2(offset) \
+1921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn2)(v0); \
+1922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v1); \
+1923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(VecXor) (v1, k); \
+1924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[offset] = v1
+1925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(2,0x01); /* k8 : k9 : k10 : k11 */
+ 5248 .loc 3 1926 0
+ 5249 4122 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 5249 F0EBFFFF
+ 5250 412a F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5250 D0EBFFFF
+ 5251 4132 F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 5251 80ECFFFF
+ 5252 .LBB1840:
+ 5253 .LBB1841:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 5254 .loc 3 1565 0
+ 5255 413a F30F6F85 movdqu -4992(%rbp), %xmm0
+ 5255 80ECFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 187
+
+
+ 5256 4142 660F7F85 movdqa %xmm0, -5584(%rbp)
+ 5256 30EAFFFF
+ 5257 414a 660F6F85 movdqa -5584(%rbp), %xmm0
+ 5257 30EAFFFF
+ 5258 4152 F30F7F85 movdqu %xmm0, -4976(%rbp)
+ 5258 90ECFFFF
+ 5259 .LBB1842:
+ 5260 .LBB1843:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5261 .loc 3 1278 0
+ 5262 415a 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5262 00000000
+ 5263 4162 F30F6F8D movdqu -4976(%rbp), %xmm1
+ 5263 90ECFFFF
+ 5264 416a F30F7F8D movdqu %xmm1, -4944(%rbp)
+ 5264 B0ECFFFF
+ 5265 4172 F30F7F85 movdqu %xmm0, -4960(%rbp)
+ 5265 A0ECFFFF
+ 5266 417a F30F6F85 movdqu -4944(%rbp), %xmm0
+ 5266 B0ECFFFF
+ 5267 4182 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 5267 D0ECFFFF
+ 5268 418a F30F6F85 movdqu -4960(%rbp), %xmm0
+ 5268 A0ECFFFF
+ 5269 4192 F30F7F85 movdqu %xmm0, -4928(%rbp)
+ 5269 C0ECFFFF
+ 5270 .LBB1844:
+ 5271 .LBB1845:
+ 5272 .LBB1846:
+ 5273 .LBB1847:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5274 .loc 1 529 0
+ 5275 419a F30F6F8D movdqu -4928(%rbp), %xmm1
+ 5275 C0ECFFFF
+ 5276 41a2 F30F6F85 movdqu -4912(%rbp), %xmm0
+ 5276 D0ECFFFF
+ 5277 41aa 660F3800 pshufb %xmm1, %xmm0
+ 5277 C1
+ 5278 .LBE1847:
+ 5279 .LBE1846:
+ 5280 .LBE1845:
+ 5281 .LBE1844:
+ 5282 .LBE1843:
+ 5283 .LBE1842:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5284 .loc 3 1567 0
+ 5285 41af 660F7F85 movdqa %xmm0, -5584(%rbp)
+ 5285 30EAFFFF
+ 5286 41b7 660F6F85 movdqa -5584(%rbp), %xmm0
+ 5286 30EAFFFF
+ 5287 41bf 660FEF85 pxor -4992(%rbp), %xmm0
+ 5287 80ECFFFF
+ 5288 41c7 F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 5288 80ECFFFF
+ 5289 41cf 660F6F85 movdqa -5584(%rbp), %xmm0
+ 5289 30EAFFFF
+ 5290 41d7 F30F7F85 movdqu %xmm0, -4896(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 188
+
+
+ 5290 E0ECFFFF
+ 5291 .LBB1848:
+ 5292 .LBB1849:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5293 .loc 3 1278 0
+ 5294 41df 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5294 00000000
+ 5295 41e7 F30F6F8D movdqu -4896(%rbp), %xmm1
+ 5295 E0ECFFFF
+ 5296 41ef F30F7F8D movdqu %xmm1, -4864(%rbp)
+ 5296 00EDFFFF
+ 5297 41f7 F30F7F85 movdqu %xmm0, -4880(%rbp)
+ 5297 F0ECFFFF
+ 5298 41ff F30F6F85 movdqu -4864(%rbp), %xmm0
+ 5298 00EDFFFF
+ 5299 4207 F30F7F85 movdqu %xmm0, -4832(%rbp)
+ 5299 20EDFFFF
+ 5300 420f F30F6F85 movdqu -4880(%rbp), %xmm0
+ 5300 F0ECFFFF
+ 5301 4217 F30F7F85 movdqu %xmm0, -4848(%rbp)
+ 5301 10EDFFFF
+ 5302 .LBB1850:
+ 5303 .LBB1851:
+ 5304 .LBB1852:
+ 5305 .LBB1853:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5306 .loc 1 529 0
+ 5307 421f F30F6F8D movdqu -4848(%rbp), %xmm1
+ 5307 10EDFFFF
+ 5308 4227 F30F6F85 movdqu -4832(%rbp), %xmm0
+ 5308 20EDFFFF
+ 5309 422f 660F3800 pshufb %xmm1, %xmm0
+ 5309 C1
+ 5310 .LBE1853:
+ 5311 .LBE1852:
+ 5312 .LBE1851:
+ 5313 .LBE1850:
+ 5314 .LBE1849:
+ 5315 .LBE1848:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5316 .loc 3 1568 0
+ 5317 4234 660F7F85 movdqa %xmm0, -5584(%rbp)
+ 5317 30EAFFFF
+ 5318 423c 660F6F85 movdqa -5584(%rbp), %xmm0
+ 5318 30EAFFFF
+ 5319 4244 660FEF85 pxor -4992(%rbp), %xmm0
+ 5319 80ECFFFF
+ 5320 424c F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 5320 80ECFFFF
+ 5321 4254 660F6F85 movdqa -5584(%rbp), %xmm0
+ 5321 30EAFFFF
+ 5322 425c F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 5322 30EDFFFF
+ 5323 .LBB1854:
+ 5324 .LBB1855:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5325 .loc 3 1278 0
+
GAS LISTING /tmp/ccPaCTqg.s page 189
+
+
+ 5326 4264 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5326 00000000
+ 5327 426c F30F6F8D movdqu -4816(%rbp), %xmm1
+ 5327 30EDFFFF
+ 5328 4274 F30F7F8D movdqu %xmm1, -4784(%rbp)
+ 5328 50EDFFFF
+ 5329 427c F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 5329 40EDFFFF
+ 5330 4284 F30F6F85 movdqu -4784(%rbp), %xmm0
+ 5330 50EDFFFF
+ 5331 428c F30F7F85 movdqu %xmm0, -4752(%rbp)
+ 5331 70EDFFFF
+ 5332 4294 F30F6F85 movdqu -4800(%rbp), %xmm0
+ 5332 40EDFFFF
+ 5333 429c F30F7F85 movdqu %xmm0, -4768(%rbp)
+ 5333 60EDFFFF
+ 5334 .LBB1856:
+ 5335 .LBB1857:
+ 5336 .LBB1858:
+ 5337 .LBB1859:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5338 .loc 1 529 0
+ 5339 42a4 F30F6F8D movdqu -4768(%rbp), %xmm1
+ 5339 60EDFFFF
+ 5340 42ac F30F6F85 movdqu -4752(%rbp), %xmm0
+ 5340 70EDFFFF
+ 5341 42b4 660F3800 pshufb %xmm1, %xmm0
+ 5341 C1
+ 5342 .LBE1859:
+ 5343 .LBE1858:
+ 5344 .LBE1857:
+ 5345 .LBE1856:
+ 5346 .LBE1855:
+ 5347 .LBE1854:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5348 .loc 3 1569 0
+ 5349 42b9 660F7F85 movdqa %xmm0, -5584(%rbp)
+ 5349 30EAFFFF
+ 5350 42c1 660F6F85 movdqa -5584(%rbp), %xmm0
+ 5350 30EAFFFF
+ 5351 42c9 660FEF85 pxor -4992(%rbp), %xmm0
+ 5351 80ECFFFF
+ 5352 42d1 F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 5352 80ECFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5353 .loc 3 1571 0
+ 5354 42d9 F30F6F85 movdqu -4992(%rbp), %xmm0
+ 5354 80ECFFFF
+ 5355 .LBE1841:
+ 5356 .LBE1840:
+ 5357 .loc 3 1926 0
+ 5358 42e1 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 5358 D0EBFFFF
+ 5359 42e9 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5359 D0EBFFFF
+ 5360 42f1 F30F7F85 movdqu %xmm0, -4720(%rbp)
+ 5360 90EDFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 190
+
+
+ 5361 42f9 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 5361 F0EBFFFF
+ 5362 4301 F30F7F85 movdqu %xmm0, -4736(%rbp)
+ 5362 80EDFFFF
+ 5363 .LBB1860:
+ 5364 .LBB1861:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 5365 .loc 3 178 0
+ 5366 4309 F30F6F85 movdqu -4736(%rbp), %xmm0
+ 5366 80EDFFFF
+ 5367 4311 F30F6F8D movdqu -4720(%rbp), %xmm1
+ 5367 90EDFFFF
+ 5368 4319 660FEFC1 pxor %xmm1, %xmm0
+ 5369 .LBE1861:
+ 5370 .LBE1860:
+ 5371 .loc 3 1926 0
+ 5372 431d F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 5372 D0EBFFFF
+ 5373 4325 488B85C8 movq -5176(%rbp), %rax
+ 5373 EBFFFF
+ 5374 432c 4883C020 addq $32, %rax
+ 5375 4330 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5375 D0EBFFFF
+ 5376 4338 F30F7F00 movdqu %xmm0, (%rax)
+ 5377 433c F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5377 D0EBFFFF
+ 5378 4344 F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 5378 A0EDFFFF
+ 5379 .LBB1862:
+ 5380 .LBB1863:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 5381 .loc 3 1649 0
+ 5382 434c F30F6F85 movdqu -4704(%rbp), %xmm0
+ 5382 A0EDFFFF
+ 5383 4354 660F7F85 movdqa %xmm0, -5568(%rbp)
+ 5383 40EAFFFF
+ 5384 435c 660F6F85 movdqa -5568(%rbp), %xmm0
+ 5384 40EAFFFF
+ 5385 4364 F30F7F85 movdqu %xmm0, -4672(%rbp)
+ 5385 C0EDFFFF
+ 5386 .LBB1864:
+ 5387 .LBB1865:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5388 .loc 1 852 0
+ 5389 436c F30F6F85 movdqu -4672(%rbp), %xmm0
+ 5389 C0EDFFFF
+ 5390 4374 660F3ADF aeskeygenassist $0, %xmm0, %xmm0
+ 5390 C000
+ 5391 .LBE1865:
+ 5392 .LBE1864:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, 0);
+ 5393 .loc 3 1650 0
+ 5394 437a 660F7F85 movdqa %xmm0, -5568(%rbp)
+ 5394 40EAFFFF
+ 5395 4382 660F6F85 movdqa -5568(%rbp), %xmm0
+ 5395 40EAFFFF
+ 5396 438a F30F7F85 movdqu %xmm0, -4656(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 191
+
+
+ 5396 D0EDFFFF
+ 5397 4392 F30F6F85 movdqu -4656(%rbp), %xmm0
+ 5397 D0EDFFFF
+ 5398 439a F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 5398 F0EDFFFF
+ 5399 .LBB1866:
+ 5400 .LBB1867:
+ 5401 .LBB1868:
+ 5402 .LBB1869:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5403 .loc 1 450 0
+ 5404 43a2 F30F6F85 movdqu -4624(%rbp), %xmm0
+ 5404 F0EDFFFF
+ 5405 43aa 660F70C0 pshufd $170, %xmm0, %xmm0
+ 5405 AA
+ 5406 .LBE1869:
+ 5407 .LBE1868:
+ 5408 .LBE1867:
+ 5409 .LBE1866:
+ 5410 .LBE1863:
+ 5411 .LBE1862:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(3); /* k12 : k13 : k14 : k15 */
+ 5412 .loc 3 1927 0
+ 5413 43af F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 5413 F0EBFFFF
+ 5414 43b7 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 5414 E0EBFFFF
+ 5415 43bf F30F7F85 movdqu %xmm0, -4608(%rbp)
+ 5415 00EEFFFF
+ 5416 .LBB1870:
+ 5417 .LBB1871:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 5418 .loc 3 1565 0
+ 5419 43c7 F30F6F85 movdqu -4608(%rbp), %xmm0
+ 5419 00EEFFFF
+ 5420 43cf 660F7F85 movdqa %xmm0, -5552(%rbp)
+ 5420 50EAFFFF
+ 5421 43d7 660F6F85 movdqa -5552(%rbp), %xmm0
+ 5421 50EAFFFF
+ 5422 43df F30F7F85 movdqu %xmm0, -4592(%rbp)
+ 5422 10EEFFFF
+ 5423 .LBB1872:
+ 5424 .LBB1873:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5425 .loc 3 1278 0
+ 5426 43e7 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5426 00000000
+ 5427 43ef F30F6F8D movdqu -4592(%rbp), %xmm1
+ 5427 10EEFFFF
+ 5428 43f7 F30F7F8D movdqu %xmm1, -4560(%rbp)
+ 5428 30EEFFFF
+ 5429 43ff F30F7F85 movdqu %xmm0, -4576(%rbp)
+ 5429 20EEFFFF
+ 5430 4407 F30F6F85 movdqu -4560(%rbp), %xmm0
+ 5430 30EEFFFF
+ 5431 440f F30F7F85 movdqu %xmm0, -4528(%rbp)
+ 5431 50EEFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 192
+
+
+ 5432 4417 F30F6F85 movdqu -4576(%rbp), %xmm0
+ 5432 20EEFFFF
+ 5433 441f F30F7F85 movdqu %xmm0, -4544(%rbp)
+ 5433 40EEFFFF
+ 5434 .LBB1874:
+ 5435 .LBB1875:
+ 5436 .LBB1876:
+ 5437 .LBB1877:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5438 .loc 1 529 0
+ 5439 4427 F30F6F8D movdqu -4544(%rbp), %xmm1
+ 5439 40EEFFFF
+ 5440 442f F30F6F85 movdqu -4528(%rbp), %xmm0
+ 5440 50EEFFFF
+ 5441 4437 660F3800 pshufb %xmm1, %xmm0
+ 5441 C1
+ 5442 .LBE1877:
+ 5443 .LBE1876:
+ 5444 .LBE1875:
+ 5445 .LBE1874:
+ 5446 .LBE1873:
+ 5447 .LBE1872:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5448 .loc 3 1567 0
+ 5449 443c 660F7F85 movdqa %xmm0, -5552(%rbp)
+ 5449 50EAFFFF
+ 5450 4444 660F6F85 movdqa -5552(%rbp), %xmm0
+ 5450 50EAFFFF
+ 5451 444c 660FEF85 pxor -4608(%rbp), %xmm0
+ 5451 00EEFFFF
+ 5452 4454 F30F7F85 movdqu %xmm0, -4608(%rbp)
+ 5452 00EEFFFF
+ 5453 445c 660F6F85 movdqa -5552(%rbp), %xmm0
+ 5453 50EAFFFF
+ 5454 4464 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 5454 60EEFFFF
+ 5455 .LBB1878:
+ 5456 .LBB1879:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5457 .loc 3 1278 0
+ 5458 446c 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5458 00000000
+ 5459 4474 F30F6F8D movdqu -4512(%rbp), %xmm1
+ 5459 60EEFFFF
+ 5460 447c F30F7F8D movdqu %xmm1, -4480(%rbp)
+ 5460 80EEFFFF
+ 5461 4484 F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 5461 70EEFFFF
+ 5462 448c F30F6F85 movdqu -4480(%rbp), %xmm0
+ 5462 80EEFFFF
+ 5463 4494 F30F7F85 movdqu %xmm0, -4448(%rbp)
+ 5463 A0EEFFFF
+ 5464 449c F30F6F85 movdqu -4496(%rbp), %xmm0
+ 5464 70EEFFFF
+ 5465 44a4 F30F7F85 movdqu %xmm0, -4464(%rbp)
+ 5465 90EEFFFF
+ 5466 .LBB1880:
+
GAS LISTING /tmp/ccPaCTqg.s page 193
+
+
+ 5467 .LBB1881:
+ 5468 .LBB1882:
+ 5469 .LBB1883:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5470 .loc 1 529 0
+ 5471 44ac F30F6F8D movdqu -4464(%rbp), %xmm1
+ 5471 90EEFFFF
+ 5472 44b4 F30F6F85 movdqu -4448(%rbp), %xmm0
+ 5472 A0EEFFFF
+ 5473 44bc 660F3800 pshufb %xmm1, %xmm0
+ 5473 C1
+ 5474 .LBE1883:
+ 5475 .LBE1882:
+ 5476 .LBE1881:
+ 5477 .LBE1880:
+ 5478 .LBE1879:
+ 5479 .LBE1878:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5480 .loc 3 1568 0
+ 5481 44c1 660F7F85 movdqa %xmm0, -5552(%rbp)
+ 5481 50EAFFFF
+ 5482 44c9 660F6F85 movdqa -5552(%rbp), %xmm0
+ 5482 50EAFFFF
+ 5483 44d1 660FEF85 pxor -4608(%rbp), %xmm0
+ 5483 00EEFFFF
+ 5484 44d9 F30F7F85 movdqu %xmm0, -4608(%rbp)
+ 5484 00EEFFFF
+ 5485 44e1 660F6F85 movdqa -5552(%rbp), %xmm0
+ 5485 50EAFFFF
+ 5486 44e9 F30F7F85 movdqu %xmm0, -4432(%rbp)
+ 5486 B0EEFFFF
+ 5487 .LBB1884:
+ 5488 .LBB1885:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5489 .loc 3 1278 0
+ 5490 44f1 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5490 00000000
+ 5491 44f9 F30F6F8D movdqu -4432(%rbp), %xmm1
+ 5491 B0EEFFFF
+ 5492 4501 F30F7F8D movdqu %xmm1, -4400(%rbp)
+ 5492 D0EEFFFF
+ 5493 4509 F30F7F85 movdqu %xmm0, -4416(%rbp)
+ 5493 C0EEFFFF
+ 5494 4511 F30F6F85 movdqu -4400(%rbp), %xmm0
+ 5494 D0EEFFFF
+ 5495 4519 F30F7F85 movdqu %xmm0, -4368(%rbp)
+ 5495 F0EEFFFF
+ 5496 4521 F30F6F85 movdqu -4416(%rbp), %xmm0
+ 5496 C0EEFFFF
+ 5497 4529 F30F7F85 movdqu %xmm0, -4384(%rbp)
+ 5497 E0EEFFFF
+ 5498 .LBB1886:
+ 5499 .LBB1887:
+ 5500 .LBB1888:
+ 5501 .LBB1889:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5502 .loc 1 529 0
+
GAS LISTING /tmp/ccPaCTqg.s page 194
+
+
+ 5503 4531 F30F6F8D movdqu -4384(%rbp), %xmm1
+ 5503 E0EEFFFF
+ 5504 4539 F30F6F85 movdqu -4368(%rbp), %xmm0
+ 5504 F0EEFFFF
+ 5505 4541 660F3800 pshufb %xmm1, %xmm0
+ 5505 C1
+ 5506 .LBE1889:
+ 5507 .LBE1888:
+ 5508 .LBE1887:
+ 5509 .LBE1886:
+ 5510 .LBE1885:
+ 5511 .LBE1884:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5512 .loc 3 1569 0
+ 5513 4546 660F7F85 movdqa %xmm0, -5552(%rbp)
+ 5513 50EAFFFF
+ 5514 454e 660F6F85 movdqa -5552(%rbp), %xmm0
+ 5514 50EAFFFF
+ 5515 4556 660FEF85 pxor -4608(%rbp), %xmm0
+ 5515 00EEFFFF
+ 5516 455e F30F7F85 movdqu %xmm0, -4608(%rbp)
+ 5516 00EEFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5517 .loc 3 1571 0
+ 5518 4566 F30F6F85 movdqu -4608(%rbp), %xmm0
+ 5518 00EEFFFF
+ 5519 .LBE1871:
+ 5520 .LBE1870:
+ 5521 .loc 3 1927 0
+ 5522 456e F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 5522 E0EBFFFF
+ 5523 4576 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 5523 E0EBFFFF
+ 5524 457e F30F7F85 movdqu %xmm0, -4336(%rbp)
+ 5524 10EFFFFF
+ 5525 4586 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 5525 F0EBFFFF
+ 5526 458e F30F7F85 movdqu %xmm0, -4352(%rbp)
+ 5526 00EFFFFF
+ 5527 .LBB1890:
+ 5528 .LBB1891:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 5529 .loc 3 178 0
+ 5530 4596 F30F6F85 movdqu -4352(%rbp), %xmm0
+ 5530 00EFFFFF
+ 5531 459e F30F6F8D movdqu -4336(%rbp), %xmm1
+ 5531 10EFFFFF
+ 5532 45a6 660FEFC1 pxor %xmm1, %xmm0
+ 5533 .LBE1891:
+ 5534 .LBE1890:
+ 5535 .loc 3 1927 0
+ 5536 45aa F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 5536 E0EBFFFF
+ 5537 45b2 488B85C8 movq -5176(%rbp), %rax
+ 5537 EBFFFF
+ 5538 45b9 4883C030 addq $48, %rax
+ 5539 45bd F30F6F85 movdqu -5152(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 195
+
+
+ 5539 E0EBFFFF
+ 5540 45c5 F30F7F00 movdqu %xmm0, (%rax)
+ 5541 45c9 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 5541 E0EBFFFF
+ 5542 45d1 F30F7F85 movdqu %xmm0, -4304(%rbp)
+ 5542 30EFFFFF
+ 5543 .LBB1892:
+ 5544 .LBB1893:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 5545 .loc 3 1673 0
+ 5546 45d9 F30F6F85 movdqu -4304(%rbp), %xmm0
+ 5546 30EFFFFF
+ 5547 45e1 660F7F85 movdqa %xmm0, -5536(%rbp)
+ 5547 60EAFFFF
+ 5548 45e9 660F6F85 movdqa -5536(%rbp), %xmm0
+ 5548 60EAFFFF
+ 5549 45f1 F30F7F85 movdqu %xmm0, -4272(%rbp)
+ 5549 50EFFFFF
+ 5550 .LBB1894:
+ 5551 .LBB1895:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5552 .loc 1 852 0
+ 5553 45f9 F30F6F85 movdqu -4272(%rbp), %xmm0
+ 5553 50EFFFFF
+ 5554 4601 660F3ADF aeskeygenassist $2, %xmm0, %xmm0
+ 5554 C002
+ 5555 .LBE1895:
+ 5556 .LBE1894:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 5557 .loc 3 1674 0
+ 5558 4607 660F7F85 movdqa %xmm0, -5536(%rbp)
+ 5558 60EAFFFF
+ 5559 460f 660F6F85 movdqa -5536(%rbp), %xmm0
+ 5559 60EAFFFF
+ 5560 4617 F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 5560 60EFFFFF
+ 5561 461f F30F6F85 movdqu -4256(%rbp), %xmm0
+ 5561 60EFFFFF
+ 5562 4627 F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 5562 80EFFFFF
+ 5563 .LBB1896:
+ 5564 .LBB1897:
+ 5565 .LBB1898:
+ 5566 .LBB1899:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5567 .loc 1 450 0
+ 5568 462f F30F6F85 movdqu -4224(%rbp), %xmm0
+ 5568 80EFFFFF
+ 5569 4637 660F70C0 pshufd $255, %xmm0, %xmm0
+ 5569 FF
+ 5570 .LBE1899:
+ 5571 .LBE1898:
+ 5572 .LBE1897:
+ 5573 .LBE1896:
+ 5574 .LBE1893:
+ 5575 .LBE1892:
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(4,0x02); /* k16 : k17 : k18 : k19 */
+
GAS LISTING /tmp/ccPaCTqg.s page 196
+
+
+ 5576 .loc 3 1928 0
+ 5577 463c F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 5577 F0EBFFFF
+ 5578 4644 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5578 D0EBFFFF
+ 5579 464c F30F7F85 movdqu %xmm0, -4208(%rbp)
+ 5579 90EFFFFF
+ 5580 .LBB1900:
+ 5581 .LBB1901:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 5582 .loc 3 1565 0
+ 5583 4654 F30F6F85 movdqu -4208(%rbp), %xmm0
+ 5583 90EFFFFF
+ 5584 465c 660F7F85 movdqa %xmm0, -5520(%rbp)
+ 5584 70EAFFFF
+ 5585 4664 660F6F85 movdqa -5520(%rbp), %xmm0
+ 5585 70EAFFFF
+ 5586 466c F30F7F85 movdqu %xmm0, -4192(%rbp)
+ 5586 A0EFFFFF
+ 5587 .LBB1902:
+ 5588 .LBB1903:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5589 .loc 3 1278 0
+ 5590 4674 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5590 00000000
+ 5591 467c F30F6F8D movdqu -4192(%rbp), %xmm1
+ 5591 A0EFFFFF
+ 5592 4684 F30F7F8D movdqu %xmm1, -4160(%rbp)
+ 5592 C0EFFFFF
+ 5593 468c F30F7F85 movdqu %xmm0, -4176(%rbp)
+ 5593 B0EFFFFF
+ 5594 4694 F30F6F85 movdqu -4160(%rbp), %xmm0
+ 5594 C0EFFFFF
+ 5595 469c F30F7F85 movdqu %xmm0, -4128(%rbp)
+ 5595 E0EFFFFF
+ 5596 46a4 F30F6F85 movdqu -4176(%rbp), %xmm0
+ 5596 B0EFFFFF
+ 5597 46ac F30F7F85 movdqu %xmm0, -4144(%rbp)
+ 5597 D0EFFFFF
+ 5598 .LBB1904:
+ 5599 .LBB1905:
+ 5600 .LBB1906:
+ 5601 .LBB1907:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5602 .loc 1 529 0
+ 5603 46b4 F30F6F8D movdqu -4144(%rbp), %xmm1
+ 5603 D0EFFFFF
+ 5604 46bc F30F6F85 movdqu -4128(%rbp), %xmm0
+ 5604 E0EFFFFF
+ 5605 46c4 660F3800 pshufb %xmm1, %xmm0
+ 5605 C1
+ 5606 .LBE1907:
+ 5607 .LBE1906:
+ 5608 .LBE1905:
+ 5609 .LBE1904:
+ 5610 .LBE1903:
+ 5611 .LBE1902:
+
GAS LISTING /tmp/ccPaCTqg.s page 197
+
+
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5612 .loc 3 1567 0
+ 5613 46c9 660F7F85 movdqa %xmm0, -5520(%rbp)
+ 5613 70EAFFFF
+ 5614 46d1 660F6F85 movdqa -5520(%rbp), %xmm0
+ 5614 70EAFFFF
+ 5615 46d9 660FEF85 pxor -4208(%rbp), %xmm0
+ 5615 90EFFFFF
+ 5616 46e1 F30F7F85 movdqu %xmm0, -4208(%rbp)
+ 5616 90EFFFFF
+ 5617 46e9 660F6F85 movdqa -5520(%rbp), %xmm0
+ 5617 70EAFFFF
+ 5618 46f1 F30F7F85 movdqu %xmm0, -4112(%rbp)
+ 5618 F0EFFFFF
+ 5619 .LBB1908:
+ 5620 .LBB1909:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5621 .loc 3 1278 0
+ 5622 46f9 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5622 00000000
+ 5623 4701 F30F6F8D movdqu -4112(%rbp), %xmm1
+ 5623 F0EFFFFF
+ 5624 4709 F30F7F8D movdqu %xmm1, -4080(%rbp)
+ 5624 10F0FFFF
+ 5625 4711 F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 5625 00F0FFFF
+ 5626 4719 F30F6F85 movdqu -4080(%rbp), %xmm0
+ 5626 10F0FFFF
+ 5627 4721 F30F7F85 movdqu %xmm0, -4048(%rbp)
+ 5627 30F0FFFF
+ 5628 4729 F30F6F85 movdqu -4096(%rbp), %xmm0
+ 5628 00F0FFFF
+ 5629 4731 F30F7F85 movdqu %xmm0, -4064(%rbp)
+ 5629 20F0FFFF
+ 5630 .LBB1910:
+ 5631 .LBB1911:
+ 5632 .LBB1912:
+ 5633 .LBB1913:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5634 .loc 1 529 0
+ 5635 4739 F30F6F8D movdqu -4064(%rbp), %xmm1
+ 5635 20F0FFFF
+ 5636 4741 F30F6F85 movdqu -4048(%rbp), %xmm0
+ 5636 30F0FFFF
+ 5637 4749 660F3800 pshufb %xmm1, %xmm0
+ 5637 C1
+ 5638 .LBE1913:
+ 5639 .LBE1912:
+ 5640 .LBE1911:
+ 5641 .LBE1910:
+ 5642 .LBE1909:
+ 5643 .LBE1908:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5644 .loc 3 1568 0
+ 5645 474e 660F7F85 movdqa %xmm0, -5520(%rbp)
+ 5645 70EAFFFF
+ 5646 4756 660F6F85 movdqa -5520(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 198
+
+
+ 5646 70EAFFFF
+ 5647 475e 660FEF85 pxor -4208(%rbp), %xmm0
+ 5647 90EFFFFF
+ 5648 4766 F30F7F85 movdqu %xmm0, -4208(%rbp)
+ 5648 90EFFFFF
+ 5649 476e 660F6F85 movdqa -5520(%rbp), %xmm0
+ 5649 70EAFFFF
+ 5650 4776 F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 5650 40F0FFFF
+ 5651 .LBB1914:
+ 5652 .LBB1915:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5653 .loc 3 1278 0
+ 5654 477e 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5654 00000000
+ 5655 4786 F30F6F8D movdqu -4032(%rbp), %xmm1
+ 5655 40F0FFFF
+ 5656 478e F30F7F8D movdqu %xmm1, -4000(%rbp)
+ 5656 60F0FFFF
+ 5657 4796 F30F7F85 movdqu %xmm0, -4016(%rbp)
+ 5657 50F0FFFF
+ 5658 479e F30F6F85 movdqu -4000(%rbp), %xmm0
+ 5658 60F0FFFF
+ 5659 47a6 F30F7F85 movdqu %xmm0, -3968(%rbp)
+ 5659 80F0FFFF
+ 5660 47ae F30F6F85 movdqu -4016(%rbp), %xmm0
+ 5660 50F0FFFF
+ 5661 47b6 F30F7F85 movdqu %xmm0, -3984(%rbp)
+ 5661 70F0FFFF
+ 5662 .LBB1916:
+ 5663 .LBB1917:
+ 5664 .LBB1918:
+ 5665 .LBB1919:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5666 .loc 1 529 0
+ 5667 47be F30F6F8D movdqu -3984(%rbp), %xmm1
+ 5667 70F0FFFF
+ 5668 47c6 F30F6F85 movdqu -3968(%rbp), %xmm0
+ 5668 80F0FFFF
+ 5669 47ce 660F3800 pshufb %xmm1, %xmm0
+ 5669 C1
+ 5670 .LBE1919:
+ 5671 .LBE1918:
+ 5672 .LBE1917:
+ 5673 .LBE1916:
+ 5674 .LBE1915:
+ 5675 .LBE1914:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5676 .loc 3 1569 0
+ 5677 47d3 660F7F85 movdqa %xmm0, -5520(%rbp)
+ 5677 70EAFFFF
+ 5678 47db 660F6F85 movdqa -5520(%rbp), %xmm0
+ 5678 70EAFFFF
+ 5679 47e3 660FEF85 pxor -4208(%rbp), %xmm0
+ 5679 90EFFFFF
+ 5680 47eb F30F7F85 movdqu %xmm0, -4208(%rbp)
+ 5680 90EFFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 199
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5681 .loc 3 1571 0
+ 5682 47f3 F30F6F85 movdqu -4208(%rbp), %xmm0
+ 5682 90EFFFFF
+ 5683 .LBE1901:
+ 5684 .LBE1900:
+ 5685 .loc 3 1928 0
+ 5686 47fb F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 5686 D0EBFFFF
+ 5687 4803 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5687 D0EBFFFF
+ 5688 480b F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 5688 A0F0FFFF
+ 5689 4813 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 5689 F0EBFFFF
+ 5690 481b F30F7F85 movdqu %xmm0, -3952(%rbp)
+ 5690 90F0FFFF
+ 5691 .LBB1920:
+ 5692 .LBB1921:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 5693 .loc 3 178 0
+ 5694 4823 F30F6F85 movdqu -3952(%rbp), %xmm0
+ 5694 90F0FFFF
+ 5695 482b F30F6F8D movdqu -3936(%rbp), %xmm1
+ 5695 A0F0FFFF
+ 5696 4833 660FEFC1 pxor %xmm1, %xmm0
+ 5697 .LBE1921:
+ 5698 .LBE1920:
+ 5699 .loc 3 1928 0
+ 5700 4837 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 5700 D0EBFFFF
+ 5701 483f 488B85C8 movq -5176(%rbp), %rax
+ 5701 EBFFFF
+ 5702 4846 4883C040 addq $64, %rax
+ 5703 484a F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5703 D0EBFFFF
+ 5704 4852 F30F7F00 movdqu %xmm0, (%rax)
+ 5705 4856 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5705 D0EBFFFF
+ 5706 485e F30F7F85 movdqu %xmm0, -3920(%rbp)
+ 5706 B0F0FFFF
+ 5707 .LBB1922:
+ 5708 .LBB1923:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 5709 .loc 3 1649 0
+ 5710 4866 F30F6F85 movdqu -3920(%rbp), %xmm0
+ 5710 B0F0FFFF
+ 5711 486e 660F7F85 movdqa %xmm0, -5504(%rbp)
+ 5711 80EAFFFF
+ 5712 4876 660F6F85 movdqa -5504(%rbp), %xmm0
+ 5712 80EAFFFF
+ 5713 487e F30F7F85 movdqu %xmm0, -3888(%rbp)
+ 5713 D0F0FFFF
+ 5714 .LBB1924:
+ 5715 .LBB1925:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5716 .loc 1 852 0
+
GAS LISTING /tmp/ccPaCTqg.s page 200
+
+
+ 5717 4886 F30F6F85 movdqu -3888(%rbp), %xmm0
+ 5717 D0F0FFFF
+ 5718 488e 660F3ADF aeskeygenassist $0, %xmm0, %xmm0
+ 5718 C000
+ 5719 .LBE1925:
+ 5720 .LBE1924:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, 0);
+ 5721 .loc 3 1650 0
+ 5722 4894 660F7F85 movdqa %xmm0, -5504(%rbp)
+ 5722 80EAFFFF
+ 5723 489c 660F6F85 movdqa -5504(%rbp), %xmm0
+ 5723 80EAFFFF
+ 5724 48a4 F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 5724 E0F0FFFF
+ 5725 48ac F30F6F85 movdqu -3872(%rbp), %xmm0
+ 5725 E0F0FFFF
+ 5726 48b4 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 5726 00F1FFFF
+ 5727 .LBB1926:
+ 5728 .LBB1927:
+ 5729 .LBB1928:
+ 5730 .LBB1929:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5731 .loc 1 450 0
+ 5732 48bc F30F6F85 movdqu -3840(%rbp), %xmm0
+ 5732 00F1FFFF
+ 5733 48c4 660F70C0 pshufd $170, %xmm0, %xmm0
+ 5733 AA
+ 5734 .LBE1929:
+ 5735 .LBE1928:
+ 5736 .LBE1927:
+ 5737 .LBE1926:
+ 5738 .LBE1923:
+ 5739 .LBE1922:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(5); /* k20 : k21 : k22 : k23 */
+ 5740 .loc 3 1929 0
+ 5741 48c9 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 5741 F0EBFFFF
+ 5742 48d1 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 5742 E0EBFFFF
+ 5743 48d9 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 5743 10F1FFFF
+ 5744 .LBB1930:
+ 5745 .LBB1931:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 5746 .loc 3 1565 0
+ 5747 48e1 F30F6F85 movdqu -3824(%rbp), %xmm0
+ 5747 10F1FFFF
+ 5748 48e9 660F7F85 movdqa %xmm0, -5488(%rbp)
+ 5748 90EAFFFF
+ 5749 48f1 660F6F85 movdqa -5488(%rbp), %xmm0
+ 5749 90EAFFFF
+ 5750 48f9 F30F7F85 movdqu %xmm0, -3808(%rbp)
+ 5750 20F1FFFF
+ 5751 .LBB1932:
+ 5752 .LBB1933:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccPaCTqg.s page 201
+
+
+ 5753 .loc 3 1278 0
+ 5754 4901 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5754 00000000
+ 5755 4909 F30F6F8D movdqu -3808(%rbp), %xmm1
+ 5755 20F1FFFF
+ 5756 4911 F30F7F8D movdqu %xmm1, -3776(%rbp)
+ 5756 40F1FFFF
+ 5757 4919 F30F7F85 movdqu %xmm0, -3792(%rbp)
+ 5757 30F1FFFF
+ 5758 4921 F30F6F85 movdqu -3776(%rbp), %xmm0
+ 5758 40F1FFFF
+ 5759 4929 F30F7F85 movdqu %xmm0, -3744(%rbp)
+ 5759 60F1FFFF
+ 5760 4931 F30F6F85 movdqu -3792(%rbp), %xmm0
+ 5760 30F1FFFF
+ 5761 4939 F30F7F85 movdqu %xmm0, -3760(%rbp)
+ 5761 50F1FFFF
+ 5762 .LBB1934:
+ 5763 .LBB1935:
+ 5764 .LBB1936:
+ 5765 .LBB1937:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5766 .loc 1 529 0
+ 5767 4941 F30F6F8D movdqu -3760(%rbp), %xmm1
+ 5767 50F1FFFF
+ 5768 4949 F30F6F85 movdqu -3744(%rbp), %xmm0
+ 5768 60F1FFFF
+ 5769 4951 660F3800 pshufb %xmm1, %xmm0
+ 5769 C1
+ 5770 .LBE1937:
+ 5771 .LBE1936:
+ 5772 .LBE1935:
+ 5773 .LBE1934:
+ 5774 .LBE1933:
+ 5775 .LBE1932:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5776 .loc 3 1567 0
+ 5777 4956 660F7F85 movdqa %xmm0, -5488(%rbp)
+ 5777 90EAFFFF
+ 5778 495e 660F6F85 movdqa -5488(%rbp), %xmm0
+ 5778 90EAFFFF
+ 5779 4966 660FEF85 pxor -3824(%rbp), %xmm0
+ 5779 10F1FFFF
+ 5780 496e F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 5780 10F1FFFF
+ 5781 4976 660F6F85 movdqa -5488(%rbp), %xmm0
+ 5781 90EAFFFF
+ 5782 497e F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 5782 70F1FFFF
+ 5783 .LBB1938:
+ 5784 .LBB1939:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5785 .loc 3 1278 0
+ 5786 4986 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5786 00000000
+ 5787 498e F30F6F8D movdqu -3728(%rbp), %xmm1
+ 5787 70F1FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 202
+
+
+ 5788 4996 F30F7F8D movdqu %xmm1, -3696(%rbp)
+ 5788 90F1FFFF
+ 5789 499e F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 5789 80F1FFFF
+ 5790 49a6 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 5790 90F1FFFF
+ 5791 49ae F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 5791 B0F1FFFF
+ 5792 49b6 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 5792 80F1FFFF
+ 5793 49be F30F7F85 movdqu %xmm0, -3680(%rbp)
+ 5793 A0F1FFFF
+ 5794 .LBB1940:
+ 5795 .LBB1941:
+ 5796 .LBB1942:
+ 5797 .LBB1943:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5798 .loc 1 529 0
+ 5799 49c6 F30F6F8D movdqu -3680(%rbp), %xmm1
+ 5799 A0F1FFFF
+ 5800 49ce F30F6F85 movdqu -3664(%rbp), %xmm0
+ 5800 B0F1FFFF
+ 5801 49d6 660F3800 pshufb %xmm1, %xmm0
+ 5801 C1
+ 5802 .LBE1943:
+ 5803 .LBE1942:
+ 5804 .LBE1941:
+ 5805 .LBE1940:
+ 5806 .LBE1939:
+ 5807 .LBE1938:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5808 .loc 3 1568 0
+ 5809 49db 660F7F85 movdqa %xmm0, -5488(%rbp)
+ 5809 90EAFFFF
+ 5810 49e3 660F6F85 movdqa -5488(%rbp), %xmm0
+ 5810 90EAFFFF
+ 5811 49eb 660FEF85 pxor -3824(%rbp), %xmm0
+ 5811 10F1FFFF
+ 5812 49f3 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 5812 10F1FFFF
+ 5813 49fb 660F6F85 movdqa -5488(%rbp), %xmm0
+ 5813 90EAFFFF
+ 5814 4a03 F30F7F85 movdqu %xmm0, -3648(%rbp)
+ 5814 C0F1FFFF
+ 5815 .LBB1944:
+ 5816 .LBB1945:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5817 .loc 3 1278 0
+ 5818 4a0b 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5818 00000000
+ 5819 4a13 F30F6F8D movdqu -3648(%rbp), %xmm1
+ 5819 C0F1FFFF
+ 5820 4a1b F30F7F8D movdqu %xmm1, -3616(%rbp)
+ 5820 E0F1FFFF
+ 5821 4a23 F30F7F85 movdqu %xmm0, -3632(%rbp)
+ 5821 D0F1FFFF
+ 5822 4a2b F30F6F85 movdqu -3616(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 203
+
+
+ 5822 E0F1FFFF
+ 5823 4a33 F30F7F85 movdqu %xmm0, -3584(%rbp)
+ 5823 00F2FFFF
+ 5824 4a3b F30F6F85 movdqu -3632(%rbp), %xmm0
+ 5824 D0F1FFFF
+ 5825 4a43 F30F7F85 movdqu %xmm0, -3600(%rbp)
+ 5825 F0F1FFFF
+ 5826 .LBB1946:
+ 5827 .LBB1947:
+ 5828 .LBB1948:
+ 5829 .LBB1949:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5830 .loc 1 529 0
+ 5831 4a4b F30F6F8D movdqu -3600(%rbp), %xmm1
+ 5831 F0F1FFFF
+ 5832 4a53 F30F6F85 movdqu -3584(%rbp), %xmm0
+ 5832 00F2FFFF
+ 5833 4a5b 660F3800 pshufb %xmm1, %xmm0
+ 5833 C1
+ 5834 .LBE1949:
+ 5835 .LBE1948:
+ 5836 .LBE1947:
+ 5837 .LBE1946:
+ 5838 .LBE1945:
+ 5839 .LBE1944:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5840 .loc 3 1569 0
+ 5841 4a60 660F7F85 movdqa %xmm0, -5488(%rbp)
+ 5841 90EAFFFF
+ 5842 4a68 660F6F85 movdqa -5488(%rbp), %xmm0
+ 5842 90EAFFFF
+ 5843 4a70 660FEF85 pxor -3824(%rbp), %xmm0
+ 5843 10F1FFFF
+ 5844 4a78 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 5844 10F1FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5845 .loc 3 1571 0
+ 5846 4a80 F30F6F85 movdqu -3824(%rbp), %xmm0
+ 5846 10F1FFFF
+ 5847 .LBE1931:
+ 5848 .LBE1930:
+ 5849 .loc 3 1929 0
+ 5850 4a88 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 5850 E0EBFFFF
+ 5851 4a90 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 5851 E0EBFFFF
+ 5852 4a98 F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 5852 20F2FFFF
+ 5853 4aa0 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 5853 F0EBFFFF
+ 5854 4aa8 F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 5854 10F2FFFF
+ 5855 .LBB1950:
+ 5856 .LBB1951:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 5857 .loc 3 178 0
+ 5858 4ab0 F30F6F85 movdqu -3568(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 204
+
+
+ 5858 10F2FFFF
+ 5859 4ab8 F30F6F8D movdqu -3552(%rbp), %xmm1
+ 5859 20F2FFFF
+ 5860 4ac0 660FEFC1 pxor %xmm1, %xmm0
+ 5861 .LBE1951:
+ 5862 .LBE1950:
+ 5863 .loc 3 1929 0
+ 5864 4ac4 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 5864 E0EBFFFF
+ 5865 4acc 488B85C8 movq -5176(%rbp), %rax
+ 5865 EBFFFF
+ 5866 4ad3 4883C050 addq $80, %rax
+ 5867 4ad7 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 5867 E0EBFFFF
+ 5868 4adf F30F7F00 movdqu %xmm0, (%rax)
+ 5869 4ae3 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 5869 E0EBFFFF
+ 5870 4aeb F30F7F85 movdqu %xmm0, -3520(%rbp)
+ 5870 40F2FFFF
+ 5871 .LBB1952:
+ 5872 .LBB1953:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 5873 .loc 3 1673 0
+ 5874 4af3 F30F6F85 movdqu -3520(%rbp), %xmm0
+ 5874 40F2FFFF
+ 5875 4afb 660F7F85 movdqa %xmm0, -5472(%rbp)
+ 5875 A0EAFFFF
+ 5876 4b03 660F6F85 movdqa -5472(%rbp), %xmm0
+ 5876 A0EAFFFF
+ 5877 4b0b F30F7F85 movdqu %xmm0, -3488(%rbp)
+ 5877 60F2FFFF
+ 5878 .LBB1954:
+ 5879 .LBB1955:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5880 .loc 1 852 0
+ 5881 4b13 F30F6F85 movdqu -3488(%rbp), %xmm0
+ 5881 60F2FFFF
+ 5882 4b1b 660F3ADF aeskeygenassist $4, %xmm0, %xmm0
+ 5882 C004
+ 5883 .LBE1955:
+ 5884 .LBE1954:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 5885 .loc 3 1674 0
+ 5886 4b21 660F7F85 movdqa %xmm0, -5472(%rbp)
+ 5886 A0EAFFFF
+ 5887 4b29 660F6F85 movdqa -5472(%rbp), %xmm0
+ 5887 A0EAFFFF
+ 5888 4b31 F30F7F85 movdqu %xmm0, -3472(%rbp)
+ 5888 70F2FFFF
+ 5889 4b39 F30F6F85 movdqu -3472(%rbp), %xmm0
+ 5889 70F2FFFF
+ 5890 4b41 F30F7F85 movdqu %xmm0, -3440(%rbp)
+ 5890 90F2FFFF
+ 5891 .LBB1956:
+ 5892 .LBB1957:
+ 5893 .LBB1958:
+ 5894 .LBB1959:
+
GAS LISTING /tmp/ccPaCTqg.s page 205
+
+
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5895 .loc 1 450 0
+ 5896 4b49 F30F6F85 movdqu -3440(%rbp), %xmm0
+ 5896 90F2FFFF
+ 5897 4b51 660F70C0 pshufd $255, %xmm0, %xmm0
+ 5897 FF
+ 5898 .LBE1959:
+ 5899 .LBE1958:
+ 5900 .LBE1957:
+ 5901 .LBE1956:
+ 5902 .LBE1953:
+ 5903 .LBE1952:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(6,0x04); /* k24 : k25 : k26 : k27 */
+ 5904 .loc 3 1930 0
+ 5905 4b56 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 5905 F0EBFFFF
+ 5906 4b5e F30F6F85 movdqu -5168(%rbp), %xmm0
+ 5906 D0EBFFFF
+ 5907 4b66 F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 5907 A0F2FFFF
+ 5908 .LBB1960:
+ 5909 .LBB1961:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 5910 .loc 3 1565 0
+ 5911 4b6e F30F6F85 movdqu -3424(%rbp), %xmm0
+ 5911 A0F2FFFF
+ 5912 4b76 660F7F85 movdqa %xmm0, -5456(%rbp)
+ 5912 B0EAFFFF
+ 5913 4b7e 660F6F85 movdqa -5456(%rbp), %xmm0
+ 5913 B0EAFFFF
+ 5914 4b86 F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 5914 B0F2FFFF
+ 5915 .LBB1962:
+ 5916 .LBB1963:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5917 .loc 3 1278 0
+ 5918 4b8e 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5918 00000000
+ 5919 4b96 F30F6F8D movdqu -3408(%rbp), %xmm1
+ 5919 B0F2FFFF
+ 5920 4b9e F30F7F8D movdqu %xmm1, -3376(%rbp)
+ 5920 D0F2FFFF
+ 5921 4ba6 F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 5921 C0F2FFFF
+ 5922 4bae F30F6F85 movdqu -3376(%rbp), %xmm0
+ 5922 D0F2FFFF
+ 5923 4bb6 F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 5923 F0F2FFFF
+ 5924 4bbe F30F6F85 movdqu -3392(%rbp), %xmm0
+ 5924 C0F2FFFF
+ 5925 4bc6 F30F7F85 movdqu %xmm0, -3360(%rbp)
+ 5925 E0F2FFFF
+ 5926 .LBB1964:
+ 5927 .LBB1965:
+ 5928 .LBB1966:
+ 5929 .LBB1967:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccPaCTqg.s page 206
+
+
+ 5930 .loc 1 529 0
+ 5931 4bce F30F6F8D movdqu -3360(%rbp), %xmm1
+ 5931 E0F2FFFF
+ 5932 4bd6 F30F6F85 movdqu -3344(%rbp), %xmm0
+ 5932 F0F2FFFF
+ 5933 4bde 660F3800 pshufb %xmm1, %xmm0
+ 5933 C1
+ 5934 .LBE1967:
+ 5935 .LBE1966:
+ 5936 .LBE1965:
+ 5937 .LBE1964:
+ 5938 .LBE1963:
+ 5939 .LBE1962:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5940 .loc 3 1567 0
+ 5941 4be3 660F7F85 movdqa %xmm0, -5456(%rbp)
+ 5941 B0EAFFFF
+ 5942 4beb 660F6F85 movdqa -5456(%rbp), %xmm0
+ 5942 B0EAFFFF
+ 5943 4bf3 660FEF85 pxor -3424(%rbp), %xmm0
+ 5943 A0F2FFFF
+ 5944 4bfb F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 5944 A0F2FFFF
+ 5945 4c03 660F6F85 movdqa -5456(%rbp), %xmm0
+ 5945 B0EAFFFF
+ 5946 4c0b F30F7F85 movdqu %xmm0, -3328(%rbp)
+ 5946 00F3FFFF
+ 5947 .LBB1968:
+ 5948 .LBB1969:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5949 .loc 3 1278 0
+ 5950 4c13 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5950 00000000
+ 5951 4c1b F30F6F8D movdqu -3328(%rbp), %xmm1
+ 5951 00F3FFFF
+ 5952 4c23 F30F7F8D movdqu %xmm1, -3296(%rbp)
+ 5952 20F3FFFF
+ 5953 4c2b F30F7F85 movdqu %xmm0, -3312(%rbp)
+ 5953 10F3FFFF
+ 5954 4c33 F30F6F85 movdqu -3296(%rbp), %xmm0
+ 5954 20F3FFFF
+ 5955 4c3b F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 5955 40F3FFFF
+ 5956 4c43 F30F6F85 movdqu -3312(%rbp), %xmm0
+ 5956 10F3FFFF
+ 5957 4c4b F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 5957 30F3FFFF
+ 5958 .LBB1970:
+ 5959 .LBB1971:
+ 5960 .LBB1972:
+ 5961 .LBB1973:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5962 .loc 1 529 0
+ 5963 4c53 F30F6F8D movdqu -3280(%rbp), %xmm1
+ 5963 30F3FFFF
+ 5964 4c5b F30F6F85 movdqu -3264(%rbp), %xmm0
+ 5964 40F3FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 207
+
+
+ 5965 4c63 660F3800 pshufb %xmm1, %xmm0
+ 5965 C1
+ 5966 .LBE1973:
+ 5967 .LBE1972:
+ 5968 .LBE1971:
+ 5969 .LBE1970:
+ 5970 .LBE1969:
+ 5971 .LBE1968:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5972 .loc 3 1568 0
+ 5973 4c68 660F7F85 movdqa %xmm0, -5456(%rbp)
+ 5973 B0EAFFFF
+ 5974 4c70 660F6F85 movdqa -5456(%rbp), %xmm0
+ 5974 B0EAFFFF
+ 5975 4c78 660FEF85 pxor -3424(%rbp), %xmm0
+ 5975 A0F2FFFF
+ 5976 4c80 F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 5976 A0F2FFFF
+ 5977 4c88 660F6F85 movdqa -5456(%rbp), %xmm0
+ 5977 B0EAFFFF
+ 5978 4c90 F30F7F85 movdqu %xmm0, -3248(%rbp)
+ 5978 50F3FFFF
+ 5979 .LBB1974:
+ 5980 .LBB1975:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5981 .loc 3 1278 0
+ 5982 4c98 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 5982 00000000
+ 5983 4ca0 F30F6F8D movdqu -3248(%rbp), %xmm1
+ 5983 50F3FFFF
+ 5984 4ca8 F30F7F8D movdqu %xmm1, -3216(%rbp)
+ 5984 70F3FFFF
+ 5985 4cb0 F30F7F85 movdqu %xmm0, -3232(%rbp)
+ 5985 60F3FFFF
+ 5986 4cb8 F30F6F85 movdqu -3216(%rbp), %xmm0
+ 5986 70F3FFFF
+ 5987 4cc0 F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 5987 90F3FFFF
+ 5988 4cc8 F30F6F85 movdqu -3232(%rbp), %xmm0
+ 5988 60F3FFFF
+ 5989 4cd0 F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 5989 80F3FFFF
+ 5990 .LBB1976:
+ 5991 .LBB1977:
+ 5992 .LBB1978:
+ 5993 .LBB1979:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5994 .loc 1 529 0
+ 5995 4cd8 F30F6F8D movdqu -3200(%rbp), %xmm1
+ 5995 80F3FFFF
+ 5996 4ce0 F30F6F85 movdqu -3184(%rbp), %xmm0
+ 5996 90F3FFFF
+ 5997 4ce8 660F3800 pshufb %xmm1, %xmm0
+ 5997 C1
+ 5998 .LBE1979:
+ 5999 .LBE1978:
+ 6000 .LBE1977:
+
GAS LISTING /tmp/ccPaCTqg.s page 208
+
+
+ 6001 .LBE1976:
+ 6002 .LBE1975:
+ 6003 .LBE1974:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6004 .loc 3 1569 0
+ 6005 4ced 660F7F85 movdqa %xmm0, -5456(%rbp)
+ 6005 B0EAFFFF
+ 6006 4cf5 660F6F85 movdqa -5456(%rbp), %xmm0
+ 6006 B0EAFFFF
+ 6007 4cfd 660FEF85 pxor -3424(%rbp), %xmm0
+ 6007 A0F2FFFF
+ 6008 4d05 F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 6008 A0F2FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6009 .loc 3 1571 0
+ 6010 4d0d F30F6F85 movdqu -3424(%rbp), %xmm0
+ 6010 A0F2FFFF
+ 6011 .LBE1961:
+ 6012 .LBE1960:
+ 6013 .loc 3 1930 0
+ 6014 4d15 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 6014 D0EBFFFF
+ 6015 4d1d F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6015 D0EBFFFF
+ 6016 4d25 F30F7F85 movdqu %xmm0, -3152(%rbp)
+ 6016 B0F3FFFF
+ 6017 4d2d F30F6F85 movdqu -5136(%rbp), %xmm0
+ 6017 F0EBFFFF
+ 6018 4d35 F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 6018 A0F3FFFF
+ 6019 .LBB1980:
+ 6020 .LBB1981:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 6021 .loc 3 178 0
+ 6022 4d3d F30F6F85 movdqu -3168(%rbp), %xmm0
+ 6022 A0F3FFFF
+ 6023 4d45 F30F6F8D movdqu -3152(%rbp), %xmm1
+ 6023 B0F3FFFF
+ 6024 4d4d 660FEFC1 pxor %xmm1, %xmm0
+ 6025 .LBE1981:
+ 6026 .LBE1980:
+ 6027 .loc 3 1930 0
+ 6028 4d51 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 6028 D0EBFFFF
+ 6029 4d59 488B85C8 movq -5176(%rbp), %rax
+ 6029 EBFFFF
+ 6030 4d60 4883C060 addq $96, %rax
+ 6031 4d64 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6031 D0EBFFFF
+ 6032 4d6c F30F7F00 movdqu %xmm0, (%rax)
+ 6033 4d70 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6033 D0EBFFFF
+ 6034 4d78 F30F7F85 movdqu %xmm0, -3136(%rbp)
+ 6034 C0F3FFFF
+ 6035 .LBB1982:
+ 6036 .LBB1983:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+
GAS LISTING /tmp/ccPaCTqg.s page 209
+
+
+ 6037 .loc 3 1649 0
+ 6038 4d80 F30F6F85 movdqu -3136(%rbp), %xmm0
+ 6038 C0F3FFFF
+ 6039 4d88 660F7F85 movdqa %xmm0, -5440(%rbp)
+ 6039 C0EAFFFF
+ 6040 4d90 660F6F85 movdqa -5440(%rbp), %xmm0
+ 6040 C0EAFFFF
+ 6041 4d98 F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 6041 E0F3FFFF
+ 6042 .LBB1984:
+ 6043 .LBB1985:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6044 .loc 1 852 0
+ 6045 4da0 F30F6F85 movdqu -3104(%rbp), %xmm0
+ 6045 E0F3FFFF
+ 6046 4da8 660F3ADF aeskeygenassist $0, %xmm0, %xmm0
+ 6046 C000
+ 6047 .LBE1985:
+ 6048 .LBE1984:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, 0);
+ 6049 .loc 3 1650 0
+ 6050 4dae 660F7F85 movdqa %xmm0, -5440(%rbp)
+ 6050 C0EAFFFF
+ 6051 4db6 660F6F85 movdqa -5440(%rbp), %xmm0
+ 6051 C0EAFFFF
+ 6052 4dbe F30F7F85 movdqu %xmm0, -3088(%rbp)
+ 6052 F0F3FFFF
+ 6053 4dc6 F30F6F85 movdqu -3088(%rbp), %xmm0
+ 6053 F0F3FFFF
+ 6054 4dce F30F7F85 movdqu %xmm0, -3056(%rbp)
+ 6054 10F4FFFF
+ 6055 .LBB1986:
+ 6056 .LBB1987:
+ 6057 .LBB1988:
+ 6058 .LBB1989:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6059 .loc 1 450 0
+ 6060 4dd6 F30F6F85 movdqu -3056(%rbp), %xmm0
+ 6060 10F4FFFF
+ 6061 4dde 660F70C0 pshufd $170, %xmm0, %xmm0
+ 6061 AA
+ 6062 .LBE1989:
+ 6063 .LBE1988:
+ 6064 .LBE1987:
+ 6065 .LBE1986:
+ 6066 .LBE1983:
+ 6067 .LBE1982:
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(7); /* k28 : k29 : k30 : k31 */
+ 6068 .loc 3 1931 0
+ 6069 4de3 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 6069 F0EBFFFF
+ 6070 4deb F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6070 E0EBFFFF
+ 6071 4df3 F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 6071 20F4FFFF
+ 6072 .LBB1990:
+ 6073 .LBB1991:
+
GAS LISTING /tmp/ccPaCTqg.s page 210
+
+
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6074 .loc 3 1565 0
+ 6075 4dfb F30F6F85 movdqu -3040(%rbp), %xmm0
+ 6075 20F4FFFF
+ 6076 4e03 660F7F85 movdqa %xmm0, -5424(%rbp)
+ 6076 D0EAFFFF
+ 6077 4e0b 660F6F85 movdqa -5424(%rbp), %xmm0
+ 6077 D0EAFFFF
+ 6078 4e13 F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 6078 30F4FFFF
+ 6079 .LBB1992:
+ 6080 .LBB1993:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6081 .loc 3 1278 0
+ 6082 4e1b 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6082 00000000
+ 6083 4e23 F30F6F8D movdqu -3024(%rbp), %xmm1
+ 6083 30F4FFFF
+ 6084 4e2b F30F7F8D movdqu %xmm1, -2992(%rbp)
+ 6084 50F4FFFF
+ 6085 4e33 F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 6085 40F4FFFF
+ 6086 4e3b F30F6F85 movdqu -2992(%rbp), %xmm0
+ 6086 50F4FFFF
+ 6087 4e43 F30F7F85 movdqu %xmm0, -2960(%rbp)
+ 6087 70F4FFFF
+ 6088 4e4b F30F6F85 movdqu -3008(%rbp), %xmm0
+ 6088 40F4FFFF
+ 6089 4e53 F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 6089 60F4FFFF
+ 6090 .LBB1994:
+ 6091 .LBB1995:
+ 6092 .LBB1996:
+ 6093 .LBB1997:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6094 .loc 1 529 0
+ 6095 4e5b F30F6F8D movdqu -2976(%rbp), %xmm1
+ 6095 60F4FFFF
+ 6096 4e63 F30F6F85 movdqu -2960(%rbp), %xmm0
+ 6096 70F4FFFF
+ 6097 4e6b 660F3800 pshufb %xmm1, %xmm0
+ 6097 C1
+ 6098 .LBE1997:
+ 6099 .LBE1996:
+ 6100 .LBE1995:
+ 6101 .LBE1994:
+ 6102 .LBE1993:
+ 6103 .LBE1992:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6104 .loc 3 1567 0
+ 6105 4e70 660F7F85 movdqa %xmm0, -5424(%rbp)
+ 6105 D0EAFFFF
+ 6106 4e78 660F6F85 movdqa -5424(%rbp), %xmm0
+ 6106 D0EAFFFF
+ 6107 4e80 660FEF85 pxor -3040(%rbp), %xmm0
+ 6107 20F4FFFF
+ 6108 4e88 F30F7F85 movdqu %xmm0, -3040(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 211
+
+
+ 6108 20F4FFFF
+ 6109 4e90 660F6F85 movdqa -5424(%rbp), %xmm0
+ 6109 D0EAFFFF
+ 6110 4e98 F30F7F85 movdqu %xmm0, -2944(%rbp)
+ 6110 80F4FFFF
+ 6111 .LBB1998:
+ 6112 .LBB1999:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6113 .loc 3 1278 0
+ 6114 4ea0 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6114 00000000
+ 6115 4ea8 F30F6F8D movdqu -2944(%rbp), %xmm1
+ 6115 80F4FFFF
+ 6116 4eb0 F30F7F8D movdqu %xmm1, -2912(%rbp)
+ 6116 A0F4FFFF
+ 6117 4eb8 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 6117 90F4FFFF
+ 6118 4ec0 F30F6F85 movdqu -2912(%rbp), %xmm0
+ 6118 A0F4FFFF
+ 6119 4ec8 F30F7F85 movdqu %xmm0, -2880(%rbp)
+ 6119 C0F4FFFF
+ 6120 4ed0 F30F6F85 movdqu -2928(%rbp), %xmm0
+ 6120 90F4FFFF
+ 6121 4ed8 F30F7F85 movdqu %xmm0, -2896(%rbp)
+ 6121 B0F4FFFF
+ 6122 .LBB2000:
+ 6123 .LBB2001:
+ 6124 .LBB2002:
+ 6125 .LBB2003:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6126 .loc 1 529 0
+ 6127 4ee0 F30F6F8D movdqu -2896(%rbp), %xmm1
+ 6127 B0F4FFFF
+ 6128 4ee8 F30F6F85 movdqu -2880(%rbp), %xmm0
+ 6128 C0F4FFFF
+ 6129 4ef0 660F3800 pshufb %xmm1, %xmm0
+ 6129 C1
+ 6130 .LBE2003:
+ 6131 .LBE2002:
+ 6132 .LBE2001:
+ 6133 .LBE2000:
+ 6134 .LBE1999:
+ 6135 .LBE1998:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6136 .loc 3 1568 0
+ 6137 4ef5 660F7F85 movdqa %xmm0, -5424(%rbp)
+ 6137 D0EAFFFF
+ 6138 4efd 660F6F85 movdqa -5424(%rbp), %xmm0
+ 6138 D0EAFFFF
+ 6139 4f05 660FEF85 pxor -3040(%rbp), %xmm0
+ 6139 20F4FFFF
+ 6140 4f0d F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 6140 20F4FFFF
+ 6141 4f15 660F6F85 movdqa -5424(%rbp), %xmm0
+ 6141 D0EAFFFF
+ 6142 4f1d F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 6142 D0F4FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 212
+
+
+ 6143 .LBB2004:
+ 6144 .LBB2005:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6145 .loc 3 1278 0
+ 6146 4f25 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6146 00000000
+ 6147 4f2d F30F6F8D movdqu -2864(%rbp), %xmm1
+ 6147 D0F4FFFF
+ 6148 4f35 F30F7F8D movdqu %xmm1, -2832(%rbp)
+ 6148 F0F4FFFF
+ 6149 4f3d F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 6149 E0F4FFFF
+ 6150 4f45 F30F6F85 movdqu -2832(%rbp), %xmm0
+ 6150 F0F4FFFF
+ 6151 4f4d F30F7F85 movdqu %xmm0, -2800(%rbp)
+ 6151 10F5FFFF
+ 6152 4f55 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 6152 E0F4FFFF
+ 6153 4f5d F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 6153 00F5FFFF
+ 6154 .LBB2006:
+ 6155 .LBB2007:
+ 6156 .LBB2008:
+ 6157 .LBB2009:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6158 .loc 1 529 0
+ 6159 4f65 F30F6F8D movdqu -2816(%rbp), %xmm1
+ 6159 00F5FFFF
+ 6160 4f6d F30F6F85 movdqu -2800(%rbp), %xmm0
+ 6160 10F5FFFF
+ 6161 4f75 660F3800 pshufb %xmm1, %xmm0
+ 6161 C1
+ 6162 .LBE2009:
+ 6163 .LBE2008:
+ 6164 .LBE2007:
+ 6165 .LBE2006:
+ 6166 .LBE2005:
+ 6167 .LBE2004:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6168 .loc 3 1569 0
+ 6169 4f7a 660F7F85 movdqa %xmm0, -5424(%rbp)
+ 6169 D0EAFFFF
+ 6170 4f82 660F6F85 movdqa -5424(%rbp), %xmm0
+ 6170 D0EAFFFF
+ 6171 4f8a 660FEF85 pxor -3040(%rbp), %xmm0
+ 6171 20F4FFFF
+ 6172 4f92 F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 6172 20F4FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6173 .loc 3 1571 0
+ 6174 4f9a F30F6F85 movdqu -3040(%rbp), %xmm0
+ 6174 20F4FFFF
+ 6175 .LBE1991:
+ 6176 .LBE1990:
+ 6177 .loc 3 1931 0
+ 6178 4fa2 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 6178 E0EBFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 213
+
+
+ 6179 4faa F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6179 E0EBFFFF
+ 6180 4fb2 F30F7F85 movdqu %xmm0, -2768(%rbp)
+ 6180 30F5FFFF
+ 6181 4fba F30F6F85 movdqu -5136(%rbp), %xmm0
+ 6181 F0EBFFFF
+ 6182 4fc2 F30F7F85 movdqu %xmm0, -2784(%rbp)
+ 6182 20F5FFFF
+ 6183 .LBB2010:
+ 6184 .LBB2011:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 6185 .loc 3 178 0
+ 6186 4fca F30F6F85 movdqu -2784(%rbp), %xmm0
+ 6186 20F5FFFF
+ 6187 4fd2 F30F6F8D movdqu -2768(%rbp), %xmm1
+ 6187 30F5FFFF
+ 6188 4fda 660FEFC1 pxor %xmm1, %xmm0
+ 6189 .LBE2011:
+ 6190 .LBE2010:
+ 6191 .loc 3 1931 0
+ 6192 4fde F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 6192 E0EBFFFF
+ 6193 4fe6 488B85C8 movq -5176(%rbp), %rax
+ 6193 EBFFFF
+ 6194 4fed 4883C070 addq $112, %rax
+ 6195 4ff1 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6195 E0EBFFFF
+ 6196 4ff9 F30F7F00 movdqu %xmm0, (%rax)
+ 6197 4ffd F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6197 E0EBFFFF
+ 6198 5005 F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 6198 50F5FFFF
+ 6199 .LBB2012:
+ 6200 .LBB2013:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 6201 .loc 3 1673 0
+ 6202 500d F30F6F85 movdqu -2736(%rbp), %xmm0
+ 6202 50F5FFFF
+ 6203 5015 660F7F85 movdqa %xmm0, -5408(%rbp)
+ 6203 E0EAFFFF
+ 6204 501d 660F6F85 movdqa -5408(%rbp), %xmm0
+ 6204 E0EAFFFF
+ 6205 5025 F30F7F85 movdqu %xmm0, -2704(%rbp)
+ 6205 70F5FFFF
+ 6206 .LBB2014:
+ 6207 .LBB2015:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6208 .loc 1 852 0
+ 6209 502d F30F6F85 movdqu -2704(%rbp), %xmm0
+ 6209 70F5FFFF
+ 6210 5035 660F3ADF aeskeygenassist $8, %xmm0, %xmm0
+ 6210 C008
+ 6211 .LBE2015:
+ 6212 .LBE2014:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 6213 .loc 3 1674 0
+ 6214 503b 660F7F85 movdqa %xmm0, -5408(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 214
+
+
+ 6214 E0EAFFFF
+ 6215 5043 660F6F85 movdqa -5408(%rbp), %xmm0
+ 6215 E0EAFFFF
+ 6216 504b F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 6216 80F5FFFF
+ 6217 5053 F30F6F85 movdqu -2688(%rbp), %xmm0
+ 6217 80F5FFFF
+ 6218 505b F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 6218 A0F5FFFF
+ 6219 .LBB2016:
+ 6220 .LBB2017:
+ 6221 .LBB2018:
+ 6222 .LBB2019:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6223 .loc 1 450 0
+ 6224 5063 F30F6F85 movdqu -2656(%rbp), %xmm0
+ 6224 A0F5FFFF
+ 6225 506b 660F70C0 pshufd $255, %xmm0, %xmm0
+ 6225 FF
+ 6226 .LBE2019:
+ 6227 .LBE2018:
+ 6228 .LBE2017:
+ 6229 .LBE2016:
+ 6230 .LBE2013:
+ 6231 .LBE2012:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(8,0x08); /* k32 : k33 : k34 : k35 */
+ 6232 .loc 3 1932 0
+ 6233 5070 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 6233 F0EBFFFF
+ 6234 5078 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6234 D0EBFFFF
+ 6235 5080 F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 6235 B0F5FFFF
+ 6236 .LBB2020:
+ 6237 .LBB2021:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6238 .loc 3 1565 0
+ 6239 5088 F30F6F85 movdqu -2640(%rbp), %xmm0
+ 6239 B0F5FFFF
+ 6240 5090 660F7F85 movdqa %xmm0, -5392(%rbp)
+ 6240 F0EAFFFF
+ 6241 5098 660F6F85 movdqa -5392(%rbp), %xmm0
+ 6241 F0EAFFFF
+ 6242 50a0 F30F7F85 movdqu %xmm0, -2624(%rbp)
+ 6242 C0F5FFFF
+ 6243 .LBB2022:
+ 6244 .LBB2023:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6245 .loc 3 1278 0
+ 6246 50a8 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6246 00000000
+ 6247 50b0 F30F6F8D movdqu -2624(%rbp), %xmm1
+ 6247 C0F5FFFF
+ 6248 50b8 F30F7F8D movdqu %xmm1, -2592(%rbp)
+ 6248 E0F5FFFF
+ 6249 50c0 F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 6249 D0F5FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 215
+
+
+ 6250 50c8 F30F6F85 movdqu -2592(%rbp), %xmm0
+ 6250 E0F5FFFF
+ 6251 50d0 F30F7F85 movdqu %xmm0, -2560(%rbp)
+ 6251 00F6FFFF
+ 6252 50d8 F30F6F85 movdqu -2608(%rbp), %xmm0
+ 6252 D0F5FFFF
+ 6253 50e0 F30F7F85 movdqu %xmm0, -2576(%rbp)
+ 6253 F0F5FFFF
+ 6254 .LBB2024:
+ 6255 .LBB2025:
+ 6256 .LBB2026:
+ 6257 .LBB2027:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6258 .loc 1 529 0
+ 6259 50e8 F30F6F8D movdqu -2576(%rbp), %xmm1
+ 6259 F0F5FFFF
+ 6260 50f0 F30F6F85 movdqu -2560(%rbp), %xmm0
+ 6260 00F6FFFF
+ 6261 50f8 660F3800 pshufb %xmm1, %xmm0
+ 6261 C1
+ 6262 .LBE2027:
+ 6263 .LBE2026:
+ 6264 .LBE2025:
+ 6265 .LBE2024:
+ 6266 .LBE2023:
+ 6267 .LBE2022:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6268 .loc 3 1567 0
+ 6269 50fd 660F7F85 movdqa %xmm0, -5392(%rbp)
+ 6269 F0EAFFFF
+ 6270 5105 660F6F85 movdqa -5392(%rbp), %xmm0
+ 6270 F0EAFFFF
+ 6271 510d 660FEF85 pxor -2640(%rbp), %xmm0
+ 6271 B0F5FFFF
+ 6272 5115 F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 6272 B0F5FFFF
+ 6273 511d 660F6F85 movdqa -5392(%rbp), %xmm0
+ 6273 F0EAFFFF
+ 6274 5125 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 6274 10F6FFFF
+ 6275 .LBB2028:
+ 6276 .LBB2029:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6277 .loc 3 1278 0
+ 6278 512d 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6278 00000000
+ 6279 5135 F30F6F8D movdqu -2544(%rbp), %xmm1
+ 6279 10F6FFFF
+ 6280 513d F30F7F8D movdqu %xmm1, -2512(%rbp)
+ 6280 30F6FFFF
+ 6281 5145 F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 6281 20F6FFFF
+ 6282 514d F30F6F85 movdqu -2512(%rbp), %xmm0
+ 6282 30F6FFFF
+ 6283 5155 F30F7F85 movdqu %xmm0, -2480(%rbp)
+ 6283 50F6FFFF
+ 6284 515d F30F6F85 movdqu -2528(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 216
+
+
+ 6284 20F6FFFF
+ 6285 5165 F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 6285 40F6FFFF
+ 6286 .LBB2030:
+ 6287 .LBB2031:
+ 6288 .LBB2032:
+ 6289 .LBB2033:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6290 .loc 1 529 0
+ 6291 516d F30F6F8D movdqu -2496(%rbp), %xmm1
+ 6291 40F6FFFF
+ 6292 5175 F30F6F85 movdqu -2480(%rbp), %xmm0
+ 6292 50F6FFFF
+ 6293 517d 660F3800 pshufb %xmm1, %xmm0
+ 6293 C1
+ 6294 .LBE2033:
+ 6295 .LBE2032:
+ 6296 .LBE2031:
+ 6297 .LBE2030:
+ 6298 .LBE2029:
+ 6299 .LBE2028:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6300 .loc 3 1568 0
+ 6301 5182 660F7F85 movdqa %xmm0, -5392(%rbp)
+ 6301 F0EAFFFF
+ 6302 518a 660F6F85 movdqa -5392(%rbp), %xmm0
+ 6302 F0EAFFFF
+ 6303 5192 660FEF85 pxor -2640(%rbp), %xmm0
+ 6303 B0F5FFFF
+ 6304 519a F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 6304 B0F5FFFF
+ 6305 51a2 660F6F85 movdqa -5392(%rbp), %xmm0
+ 6305 F0EAFFFF
+ 6306 51aa F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 6306 60F6FFFF
+ 6307 .LBB2034:
+ 6308 .LBB2035:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6309 .loc 3 1278 0
+ 6310 51b2 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6310 00000000
+ 6311 51ba F30F6F8D movdqu -2464(%rbp), %xmm1
+ 6311 60F6FFFF
+ 6312 51c2 F30F7F8D movdqu %xmm1, -2432(%rbp)
+ 6312 80F6FFFF
+ 6313 51ca F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 6313 70F6FFFF
+ 6314 51d2 F30F6F85 movdqu -2432(%rbp), %xmm0
+ 6314 80F6FFFF
+ 6315 51da F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 6315 A0F6FFFF
+ 6316 51e2 F30F6F85 movdqu -2448(%rbp), %xmm0
+ 6316 70F6FFFF
+ 6317 51ea F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 6317 90F6FFFF
+ 6318 .LBB2036:
+ 6319 .LBB2037:
+
GAS LISTING /tmp/ccPaCTqg.s page 217
+
+
+ 6320 .LBB2038:
+ 6321 .LBB2039:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6322 .loc 1 529 0
+ 6323 51f2 F30F6F8D movdqu -2416(%rbp), %xmm1
+ 6323 90F6FFFF
+ 6324 51fa F30F6F85 movdqu -2400(%rbp), %xmm0
+ 6324 A0F6FFFF
+ 6325 5202 660F3800 pshufb %xmm1, %xmm0
+ 6325 C1
+ 6326 .LBE2039:
+ 6327 .LBE2038:
+ 6328 .LBE2037:
+ 6329 .LBE2036:
+ 6330 .LBE2035:
+ 6331 .LBE2034:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6332 .loc 3 1569 0
+ 6333 5207 660F7F85 movdqa %xmm0, -5392(%rbp)
+ 6333 F0EAFFFF
+ 6334 520f 660F6F85 movdqa -5392(%rbp), %xmm0
+ 6334 F0EAFFFF
+ 6335 5217 660FEF85 pxor -2640(%rbp), %xmm0
+ 6335 B0F5FFFF
+ 6336 521f F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 6336 B0F5FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6337 .loc 3 1571 0
+ 6338 5227 F30F6F85 movdqu -2640(%rbp), %xmm0
+ 6338 B0F5FFFF
+ 6339 .LBE2021:
+ 6340 .LBE2020:
+ 6341 .loc 3 1932 0
+ 6342 522f F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 6342 D0EBFFFF
+ 6343 5237 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6343 D0EBFFFF
+ 6344 523f F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 6344 C0F6FFFF
+ 6345 5247 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 6345 F0EBFFFF
+ 6346 524f F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 6346 B0F6FFFF
+ 6347 .LBB2040:
+ 6348 .LBB2041:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 6349 .loc 3 178 0
+ 6350 5257 F30F6F85 movdqu -2384(%rbp), %xmm0
+ 6350 B0F6FFFF
+ 6351 525f F30F6F8D movdqu -2368(%rbp), %xmm1
+ 6351 C0F6FFFF
+ 6352 5267 660FEFC1 pxor %xmm1, %xmm0
+ 6353 .LBE2041:
+ 6354 .LBE2040:
+ 6355 .loc 3 1932 0
+ 6356 526b F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 6356 D0EBFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 218
+
+
+ 6357 5273 488B85C8 movq -5176(%rbp), %rax
+ 6357 EBFFFF
+ 6358 527a 4883E880 subq $-128, %rax
+ 6359 527e F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6359 D0EBFFFF
+ 6360 5286 F30F7F00 movdqu %xmm0, (%rax)
+ 6361 528a F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6361 D0EBFFFF
+ 6362 5292 F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 6362 D0F6FFFF
+ 6363 .LBB2042:
+ 6364 .LBB2043:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 6365 .loc 3 1649 0
+ 6366 529a F30F6F85 movdqu -2352(%rbp), %xmm0
+ 6366 D0F6FFFF
+ 6367 52a2 660F7F85 movdqa %xmm0, -5376(%rbp)
+ 6367 00EBFFFF
+ 6368 52aa 660F6F85 movdqa -5376(%rbp), %xmm0
+ 6368 00EBFFFF
+ 6369 52b2 F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 6369 F0F6FFFF
+ 6370 .LBB2044:
+ 6371 .LBB2045:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6372 .loc 1 852 0
+ 6373 52ba F30F6F85 movdqu -2320(%rbp), %xmm0
+ 6373 F0F6FFFF
+ 6374 52c2 660F3ADF aeskeygenassist $0, %xmm0, %xmm0
+ 6374 C000
+ 6375 .LBE2045:
+ 6376 .LBE2044:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, 0);
+ 6377 .loc 3 1650 0
+ 6378 52c8 660F7F85 movdqa %xmm0, -5376(%rbp)
+ 6378 00EBFFFF
+ 6379 52d0 660F6F85 movdqa -5376(%rbp), %xmm0
+ 6379 00EBFFFF
+ 6380 52d8 F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 6380 00F7FFFF
+ 6381 52e0 F30F6F85 movdqu -2304(%rbp), %xmm0
+ 6381 00F7FFFF
+ 6382 52e8 F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 6382 20F7FFFF
+ 6383 .LBB2046:
+ 6384 .LBB2047:
+ 6385 .LBB2048:
+ 6386 .LBB2049:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6387 .loc 1 450 0
+ 6388 52f0 F30F6F85 movdqu -2272(%rbp), %xmm0
+ 6388 20F7FFFF
+ 6389 52f8 660F70C0 pshufd $170, %xmm0, %xmm0
+ 6389 AA
+ 6390 .LBE2049:
+ 6391 .LBE2048:
+ 6392 .LBE2047:
+
GAS LISTING /tmp/ccPaCTqg.s page 219
+
+
+ 6393 .LBE2046:
+ 6394 .LBE2043:
+ 6395 .LBE2042:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(9); /* k36 : k37 : k38 : k39 */
+ 6396 .loc 3 1933 0
+ 6397 52fd F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 6397 F0EBFFFF
+ 6398 5305 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6398 E0EBFFFF
+ 6399 530d F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 6399 30F7FFFF
+ 6400 .LBB2050:
+ 6401 .LBB2051:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6402 .loc 3 1565 0
+ 6403 5315 F30F6F85 movdqu -2256(%rbp), %xmm0
+ 6403 30F7FFFF
+ 6404 531d 660F7F85 movdqa %xmm0, -5360(%rbp)
+ 6404 10EBFFFF
+ 6405 5325 660F6F85 movdqa -5360(%rbp), %xmm0
+ 6405 10EBFFFF
+ 6406 532d F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 6406 40F7FFFF
+ 6407 .LBB2052:
+ 6408 .LBB2053:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6409 .loc 3 1278 0
+ 6410 5335 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6410 00000000
+ 6411 533d F30F6F8D movdqu -2240(%rbp), %xmm1
+ 6411 40F7FFFF
+ 6412 5345 F30F7F8D movdqu %xmm1, -2208(%rbp)
+ 6412 60F7FFFF
+ 6413 534d F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 6413 50F7FFFF
+ 6414 5355 F30F6F85 movdqu -2208(%rbp), %xmm0
+ 6414 60F7FFFF
+ 6415 535d F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 6415 80F7FFFF
+ 6416 5365 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 6416 50F7FFFF
+ 6417 536d F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 6417 70F7FFFF
+ 6418 .LBB2054:
+ 6419 .LBB2055:
+ 6420 .LBB2056:
+ 6421 .LBB2057:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6422 .loc 1 529 0
+ 6423 5375 F30F6F8D movdqu -2192(%rbp), %xmm1
+ 6423 70F7FFFF
+ 6424 537d F30F6F85 movdqu -2176(%rbp), %xmm0
+ 6424 80F7FFFF
+ 6425 5385 660F3800 pshufb %xmm1, %xmm0
+ 6425 C1
+ 6426 .LBE2057:
+ 6427 .LBE2056:
+
GAS LISTING /tmp/ccPaCTqg.s page 220
+
+
+ 6428 .LBE2055:
+ 6429 .LBE2054:
+ 6430 .LBE2053:
+ 6431 .LBE2052:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6432 .loc 3 1567 0
+ 6433 538a 660F7F85 movdqa %xmm0, -5360(%rbp)
+ 6433 10EBFFFF
+ 6434 5392 660F6F85 movdqa -5360(%rbp), %xmm0
+ 6434 10EBFFFF
+ 6435 539a 660FEF85 pxor -2256(%rbp), %xmm0
+ 6435 30F7FFFF
+ 6436 53a2 F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 6436 30F7FFFF
+ 6437 53aa 660F6F85 movdqa -5360(%rbp), %xmm0
+ 6437 10EBFFFF
+ 6438 53b2 F30F7F85 movdqu %xmm0, -2160(%rbp)
+ 6438 90F7FFFF
+ 6439 .LBB2058:
+ 6440 .LBB2059:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6441 .loc 3 1278 0
+ 6442 53ba 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6442 00000000
+ 6443 53c2 F30F6F8D movdqu -2160(%rbp), %xmm1
+ 6443 90F7FFFF
+ 6444 53ca F30F7F8D movdqu %xmm1, -2128(%rbp)
+ 6444 B0F7FFFF
+ 6445 53d2 F30F7F85 movdqu %xmm0, -2144(%rbp)
+ 6445 A0F7FFFF
+ 6446 53da F30F6F85 movdqu -2128(%rbp), %xmm0
+ 6446 B0F7FFFF
+ 6447 53e2 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 6447 D0F7FFFF
+ 6448 53ea F30F6F85 movdqu -2144(%rbp), %xmm0
+ 6448 A0F7FFFF
+ 6449 53f2 F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 6449 C0F7FFFF
+ 6450 .LBB2060:
+ 6451 .LBB2061:
+ 6452 .LBB2062:
+ 6453 .LBB2063:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6454 .loc 1 529 0
+ 6455 53fa F30F6F8D movdqu -2112(%rbp), %xmm1
+ 6455 C0F7FFFF
+ 6456 5402 F30F6F85 movdqu -2096(%rbp), %xmm0
+ 6456 D0F7FFFF
+ 6457 540a 660F3800 pshufb %xmm1, %xmm0
+ 6457 C1
+ 6458 .LBE2063:
+ 6459 .LBE2062:
+ 6460 .LBE2061:
+ 6461 .LBE2060:
+ 6462 .LBE2059:
+ 6463 .LBE2058:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccPaCTqg.s page 221
+
+
+ 6464 .loc 3 1568 0
+ 6465 540f 660F7F85 movdqa %xmm0, -5360(%rbp)
+ 6465 10EBFFFF
+ 6466 5417 660F6F85 movdqa -5360(%rbp), %xmm0
+ 6466 10EBFFFF
+ 6467 541f 660FEF85 pxor -2256(%rbp), %xmm0
+ 6467 30F7FFFF
+ 6468 5427 F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 6468 30F7FFFF
+ 6469 542f 660F6F85 movdqa -5360(%rbp), %xmm0
+ 6469 10EBFFFF
+ 6470 5437 F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 6470 E0F7FFFF
+ 6471 .LBB2064:
+ 6472 .LBB2065:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6473 .loc 3 1278 0
+ 6474 543f 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6474 00000000
+ 6475 5447 F30F6F8D movdqu -2080(%rbp), %xmm1
+ 6475 E0F7FFFF
+ 6476 544f F30F7F8D movdqu %xmm1, -2048(%rbp)
+ 6476 00F8FFFF
+ 6477 5457 F30F7F85 movdqu %xmm0, -2064(%rbp)
+ 6477 F0F7FFFF
+ 6478 545f F30F6F85 movdqu -2048(%rbp), %xmm0
+ 6478 00F8FFFF
+ 6479 5467 F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 6479 20F8FFFF
+ 6480 546f F30F6F85 movdqu -2064(%rbp), %xmm0
+ 6480 F0F7FFFF
+ 6481 5477 F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 6481 10F8FFFF
+ 6482 .LBB2066:
+ 6483 .LBB2067:
+ 6484 .LBB2068:
+ 6485 .LBB2069:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6486 .loc 1 529 0
+ 6487 547f F30F6F8D movdqu -2032(%rbp), %xmm1
+ 6487 10F8FFFF
+ 6488 5487 F30F6F85 movdqu -2016(%rbp), %xmm0
+ 6488 20F8FFFF
+ 6489 548f 660F3800 pshufb %xmm1, %xmm0
+ 6489 C1
+ 6490 .LBE2069:
+ 6491 .LBE2068:
+ 6492 .LBE2067:
+ 6493 .LBE2066:
+ 6494 .LBE2065:
+ 6495 .LBE2064:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6496 .loc 3 1569 0
+ 6497 5494 660F7F85 movdqa %xmm0, -5360(%rbp)
+ 6497 10EBFFFF
+ 6498 549c 660F6F85 movdqa -5360(%rbp), %xmm0
+ 6498 10EBFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 222
+
+
+ 6499 54a4 660FEF85 pxor -2256(%rbp), %xmm0
+ 6499 30F7FFFF
+ 6500 54ac F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 6500 30F7FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6501 .loc 3 1571 0
+ 6502 54b4 F30F6F85 movdqu -2256(%rbp), %xmm0
+ 6502 30F7FFFF
+ 6503 .LBE2051:
+ 6504 .LBE2050:
+ 6505 .loc 3 1933 0
+ 6506 54bc F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 6506 E0EBFFFF
+ 6507 54c4 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6507 E0EBFFFF
+ 6508 54cc F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 6508 40F8FFFF
+ 6509 54d4 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 6509 F0EBFFFF
+ 6510 54dc F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 6510 30F8FFFF
+ 6511 .LBB2070:
+ 6512 .LBB2071:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 6513 .loc 3 178 0
+ 6514 54e4 F30F6F85 movdqu -2000(%rbp), %xmm0
+ 6514 30F8FFFF
+ 6515 54ec F30F6F8D movdqu -1984(%rbp), %xmm1
+ 6515 40F8FFFF
+ 6516 54f4 660FEFC1 pxor %xmm1, %xmm0
+ 6517 .LBE2071:
+ 6518 .LBE2070:
+ 6519 .loc 3 1933 0
+ 6520 54f8 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 6520 E0EBFFFF
+ 6521 5500 488B85C8 movq -5176(%rbp), %rax
+ 6521 EBFFFF
+ 6522 5507 48059000 addq $144, %rax
+ 6522 0000
+ 6523 550d F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6523 E0EBFFFF
+ 6524 5515 F30F7F00 movdqu %xmm0, (%rax)
+ 6525 5519 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6525 E0EBFFFF
+ 6526 5521 F30F7F85 movdqu %xmm0, -1952(%rbp)
+ 6526 60F8FFFF
+ 6527 .LBB2072:
+ 6528 .LBB2073:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 6529 .loc 3 1673 0
+ 6530 5529 F30F6F85 movdqu -1952(%rbp), %xmm0
+ 6530 60F8FFFF
+ 6531 5531 660F7F85 movdqa %xmm0, -5344(%rbp)
+ 6531 20EBFFFF
+ 6532 5539 660F6F85 movdqa -5344(%rbp), %xmm0
+ 6532 20EBFFFF
+ 6533 5541 F30F7F85 movdqu %xmm0, -1920(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 223
+
+
+ 6533 80F8FFFF
+ 6534 .LBB2074:
+ 6535 .LBB2075:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6536 .loc 1 852 0
+ 6537 5549 F30F6F85 movdqu -1920(%rbp), %xmm0
+ 6537 80F8FFFF
+ 6538 5551 660F3ADF aeskeygenassist $16, %xmm0, %xmm0
+ 6538 C010
+ 6539 .LBE2075:
+ 6540 .LBE2074:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 6541 .loc 3 1674 0
+ 6542 5557 660F7F85 movdqa %xmm0, -5344(%rbp)
+ 6542 20EBFFFF
+ 6543 555f 660F6F85 movdqa -5344(%rbp), %xmm0
+ 6543 20EBFFFF
+ 6544 5567 F30F7F85 movdqu %xmm0, -1904(%rbp)
+ 6544 90F8FFFF
+ 6545 556f F30F6F85 movdqu -1904(%rbp), %xmm0
+ 6545 90F8FFFF
+ 6546 5577 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 6546 B0F8FFFF
+ 6547 .LBB2076:
+ 6548 .LBB2077:
+ 6549 .LBB2078:
+ 6550 .LBB2079:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6551 .loc 1 450 0
+ 6552 557f F30F6F85 movdqu -1872(%rbp), %xmm0
+ 6552 B0F8FFFF
+ 6553 5587 660F70C0 pshufd $255, %xmm0, %xmm0
+ 6553 FF
+ 6554 .LBE2079:
+ 6555 .LBE2078:
+ 6556 .LBE2077:
+ 6557 .LBE2076:
+ 6558 .LBE2073:
+ 6559 .LBE2072:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(10,0x10); /* k40 : k41 : k42 : k43 */
+ 6560 .loc 3 1934 0
+ 6561 558c F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 6561 F0EBFFFF
+ 6562 5594 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6562 D0EBFFFF
+ 6563 559c F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 6563 C0F8FFFF
+ 6564 .LBB2080:
+ 6565 .LBB2081:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6566 .loc 3 1565 0
+ 6567 55a4 F30F6F85 movdqu -1856(%rbp), %xmm0
+ 6567 C0F8FFFF
+ 6568 55ac 660F7F85 movdqa %xmm0, -5328(%rbp)
+ 6568 30EBFFFF
+ 6569 55b4 660F6F85 movdqa -5328(%rbp), %xmm0
+ 6569 30EBFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 224
+
+
+ 6570 55bc F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 6570 D0F8FFFF
+ 6571 .LBB2082:
+ 6572 .LBB2083:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6573 .loc 3 1278 0
+ 6574 55c4 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6574 00000000
+ 6575 55cc F30F6F8D movdqu -1840(%rbp), %xmm1
+ 6575 D0F8FFFF
+ 6576 55d4 F30F7F8D movdqu %xmm1, -1808(%rbp)
+ 6576 F0F8FFFF
+ 6577 55dc F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 6577 E0F8FFFF
+ 6578 55e4 F30F6F85 movdqu -1808(%rbp), %xmm0
+ 6578 F0F8FFFF
+ 6579 55ec F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 6579 10F9FFFF
+ 6580 55f4 F30F6F85 movdqu -1824(%rbp), %xmm0
+ 6580 E0F8FFFF
+ 6581 55fc F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 6581 00F9FFFF
+ 6582 .LBB2084:
+ 6583 .LBB2085:
+ 6584 .LBB2086:
+ 6585 .LBB2087:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6586 .loc 1 529 0
+ 6587 5604 F30F6F8D movdqu -1792(%rbp), %xmm1
+ 6587 00F9FFFF
+ 6588 560c F30F6F85 movdqu -1776(%rbp), %xmm0
+ 6588 10F9FFFF
+ 6589 5614 660F3800 pshufb %xmm1, %xmm0
+ 6589 C1
+ 6590 .LBE2087:
+ 6591 .LBE2086:
+ 6592 .LBE2085:
+ 6593 .LBE2084:
+ 6594 .LBE2083:
+ 6595 .LBE2082:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6596 .loc 3 1567 0
+ 6597 5619 660F7F85 movdqa %xmm0, -5328(%rbp)
+ 6597 30EBFFFF
+ 6598 5621 660F6F85 movdqa -5328(%rbp), %xmm0
+ 6598 30EBFFFF
+ 6599 5629 660FEF85 pxor -1856(%rbp), %xmm0
+ 6599 C0F8FFFF
+ 6600 5631 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 6600 C0F8FFFF
+ 6601 5639 660F6F85 movdqa -5328(%rbp), %xmm0
+ 6601 30EBFFFF
+ 6602 5641 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 6602 20F9FFFF
+ 6603 .LBB2088:
+ 6604 .LBB2089:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccPaCTqg.s page 225
+
+
+ 6605 .loc 3 1278 0
+ 6606 5649 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6606 00000000
+ 6607 5651 F30F6F8D movdqu -1760(%rbp), %xmm1
+ 6607 20F9FFFF
+ 6608 5659 F30F7F8D movdqu %xmm1, -1728(%rbp)
+ 6608 40F9FFFF
+ 6609 5661 F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 6609 30F9FFFF
+ 6610 5669 F30F6F85 movdqu -1728(%rbp), %xmm0
+ 6610 40F9FFFF
+ 6611 5671 F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 6611 60F9FFFF
+ 6612 5679 F30F6F85 movdqu -1744(%rbp), %xmm0
+ 6612 30F9FFFF
+ 6613 5681 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 6613 50F9FFFF
+ 6614 .LBB2090:
+ 6615 .LBB2091:
+ 6616 .LBB2092:
+ 6617 .LBB2093:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6618 .loc 1 529 0
+ 6619 5689 F30F6F8D movdqu -1712(%rbp), %xmm1
+ 6619 50F9FFFF
+ 6620 5691 F30F6F85 movdqu -1696(%rbp), %xmm0
+ 6620 60F9FFFF
+ 6621 5699 660F3800 pshufb %xmm1, %xmm0
+ 6621 C1
+ 6622 .LBE2093:
+ 6623 .LBE2092:
+ 6624 .LBE2091:
+ 6625 .LBE2090:
+ 6626 .LBE2089:
+ 6627 .LBE2088:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6628 .loc 3 1568 0
+ 6629 569e 660F7F85 movdqa %xmm0, -5328(%rbp)
+ 6629 30EBFFFF
+ 6630 56a6 660F6F85 movdqa -5328(%rbp), %xmm0
+ 6630 30EBFFFF
+ 6631 56ae 660FEF85 pxor -1856(%rbp), %xmm0
+ 6631 C0F8FFFF
+ 6632 56b6 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 6632 C0F8FFFF
+ 6633 56be 660F6F85 movdqa -5328(%rbp), %xmm0
+ 6633 30EBFFFF
+ 6634 56c6 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 6634 70F9FFFF
+ 6635 .LBB2094:
+ 6636 .LBB2095:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6637 .loc 3 1278 0
+ 6638 56ce 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6638 00000000
+ 6639 56d6 F30F6F8D movdqu -1680(%rbp), %xmm1
+ 6639 70F9FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 226
+
+
+ 6640 56de F30F7F8D movdqu %xmm1, -1648(%rbp)
+ 6640 90F9FFFF
+ 6641 56e6 F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 6641 80F9FFFF
+ 6642 56ee F30F6F85 movdqu -1648(%rbp), %xmm0
+ 6642 90F9FFFF
+ 6643 56f6 F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 6643 B0F9FFFF
+ 6644 56fe F30F6F85 movdqu -1664(%rbp), %xmm0
+ 6644 80F9FFFF
+ 6645 5706 F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 6645 A0F9FFFF
+ 6646 .LBB2096:
+ 6647 .LBB2097:
+ 6648 .LBB2098:
+ 6649 .LBB2099:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6650 .loc 1 529 0
+ 6651 570e F30F6F8D movdqu -1632(%rbp), %xmm1
+ 6651 A0F9FFFF
+ 6652 5716 F30F6F85 movdqu -1616(%rbp), %xmm0
+ 6652 B0F9FFFF
+ 6653 571e 660F3800 pshufb %xmm1, %xmm0
+ 6653 C1
+ 6654 .LBE2099:
+ 6655 .LBE2098:
+ 6656 .LBE2097:
+ 6657 .LBE2096:
+ 6658 .LBE2095:
+ 6659 .LBE2094:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6660 .loc 3 1569 0
+ 6661 5723 660F7F85 movdqa %xmm0, -5328(%rbp)
+ 6661 30EBFFFF
+ 6662 572b 660F6F85 movdqa -5328(%rbp), %xmm0
+ 6662 30EBFFFF
+ 6663 5733 660FEF85 pxor -1856(%rbp), %xmm0
+ 6663 C0F8FFFF
+ 6664 573b F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 6664 C0F8FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6665 .loc 3 1571 0
+ 6666 5743 F30F6F85 movdqu -1856(%rbp), %xmm0
+ 6666 C0F8FFFF
+ 6667 .LBE2081:
+ 6668 .LBE2080:
+ 6669 .loc 3 1934 0
+ 6670 574b F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 6670 D0EBFFFF
+ 6671 5753 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6671 D0EBFFFF
+ 6672 575b F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 6672 D0F9FFFF
+ 6673 5763 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 6673 F0EBFFFF
+ 6674 576b F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 6674 C0F9FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 227
+
+
+ 6675 .LBB2100:
+ 6676 .LBB2101:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 6677 .loc 3 178 0
+ 6678 5773 F30F6F85 movdqu -1600(%rbp), %xmm0
+ 6678 C0F9FFFF
+ 6679 577b F30F6F8D movdqu -1584(%rbp), %xmm1
+ 6679 D0F9FFFF
+ 6680 5783 660FEFC1 pxor %xmm1, %xmm0
+ 6681 .LBE2101:
+ 6682 .LBE2100:
+ 6683 .loc 3 1934 0
+ 6684 5787 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 6684 D0EBFFFF
+ 6685 578f 488B85C8 movq -5176(%rbp), %rax
+ 6685 EBFFFF
+ 6686 5796 4805A000 addq $160, %rax
+ 6686 0000
+ 6687 579c F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6687 D0EBFFFF
+ 6688 57a4 F30F7F00 movdqu %xmm0, (%rax)
+ 6689 57a8 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6689 D0EBFFFF
+ 6690 57b0 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 6690 E0F9FFFF
+ 6691 .LBB2102:
+ 6692 .LBB2103:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 6693 .loc 3 1649 0
+ 6694 57b8 F30F6F85 movdqu -1568(%rbp), %xmm0
+ 6694 E0F9FFFF
+ 6695 57c0 660F7F85 movdqa %xmm0, -5312(%rbp)
+ 6695 40EBFFFF
+ 6696 57c8 660F6F85 movdqa -5312(%rbp), %xmm0
+ 6696 40EBFFFF
+ 6697 57d0 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 6697 00FAFFFF
+ 6698 .LBB2104:
+ 6699 .LBB2105:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6700 .loc 1 852 0
+ 6701 57d8 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 6701 00FAFFFF
+ 6702 57e0 660F3ADF aeskeygenassist $0, %xmm0, %xmm0
+ 6702 C000
+ 6703 .LBE2105:
+ 6704 .LBE2104:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, 0);
+ 6705 .loc 3 1650 0
+ 6706 57e6 660F7F85 movdqa %xmm0, -5312(%rbp)
+ 6706 40EBFFFF
+ 6707 57ee 660F6F85 movdqa -5312(%rbp), %xmm0
+ 6707 40EBFFFF
+ 6708 57f6 F30F7F85 movdqu %xmm0, -1520(%rbp)
+ 6708 10FAFFFF
+ 6709 57fe F30F6F85 movdqu -1520(%rbp), %xmm0
+ 6709 10FAFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 228
+
+
+ 6710 5806 F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 6710 30FAFFFF
+ 6711 .LBB2106:
+ 6712 .LBB2107:
+ 6713 .LBB2108:
+ 6714 .LBB2109:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6715 .loc 1 450 0
+ 6716 580e F30F6F85 movdqu -1488(%rbp), %xmm0
+ 6716 30FAFFFF
+ 6717 5816 660F70C0 pshufd $170, %xmm0, %xmm0
+ 6717 AA
+ 6718 .LBE2109:
+ 6719 .LBE2108:
+ 6720 .LBE2107:
+ 6721 .LBE2106:
+ 6722 .LBE2103:
+ 6723 .LBE2102:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(11); /* k44 : k45 : k46 : k47 */
+ 6724 .loc 3 1935 0
+ 6725 581b F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 6725 F0EBFFFF
+ 6726 5823 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6726 E0EBFFFF
+ 6727 582b F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 6727 40FAFFFF
+ 6728 .LBB2110:
+ 6729 .LBB2111:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6730 .loc 3 1565 0
+ 6731 5833 F30F6F85 movdqu -1472(%rbp), %xmm0
+ 6731 40FAFFFF
+ 6732 583b 660F7F85 movdqa %xmm0, -5296(%rbp)
+ 6732 50EBFFFF
+ 6733 5843 660F6F85 movdqa -5296(%rbp), %xmm0
+ 6733 50EBFFFF
+ 6734 584b F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 6734 50FAFFFF
+ 6735 .LBB2112:
+ 6736 .LBB2113:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6737 .loc 3 1278 0
+ 6738 5853 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6738 00000000
+ 6739 585b F30F6F8D movdqu -1456(%rbp), %xmm1
+ 6739 50FAFFFF
+ 6740 5863 F30F7F8D movdqu %xmm1, -1424(%rbp)
+ 6740 70FAFFFF
+ 6741 586b F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 6741 60FAFFFF
+ 6742 5873 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 6742 70FAFFFF
+ 6743 587b F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 6743 90FAFFFF
+ 6744 5883 F30F6F85 movdqu -1440(%rbp), %xmm0
+ 6744 60FAFFFF
+ 6745 588b F30F7F85 movdqu %xmm0, -1408(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 229
+
+
+ 6745 80FAFFFF
+ 6746 .LBB2114:
+ 6747 .LBB2115:
+ 6748 .LBB2116:
+ 6749 .LBB2117:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6750 .loc 1 529 0
+ 6751 5893 F30F6F8D movdqu -1408(%rbp), %xmm1
+ 6751 80FAFFFF
+ 6752 589b F30F6F85 movdqu -1392(%rbp), %xmm0
+ 6752 90FAFFFF
+ 6753 58a3 660F3800 pshufb %xmm1, %xmm0
+ 6753 C1
+ 6754 .LBE2117:
+ 6755 .LBE2116:
+ 6756 .LBE2115:
+ 6757 .LBE2114:
+ 6758 .LBE2113:
+ 6759 .LBE2112:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6760 .loc 3 1567 0
+ 6761 58a8 660F7F85 movdqa %xmm0, -5296(%rbp)
+ 6761 50EBFFFF
+ 6762 58b0 660F6F85 movdqa -5296(%rbp), %xmm0
+ 6762 50EBFFFF
+ 6763 58b8 660FEF85 pxor -1472(%rbp), %xmm0
+ 6763 40FAFFFF
+ 6764 58c0 F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 6764 40FAFFFF
+ 6765 58c8 660F6F85 movdqa -5296(%rbp), %xmm0
+ 6765 50EBFFFF
+ 6766 58d0 F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 6766 A0FAFFFF
+ 6767 .LBB2118:
+ 6768 .LBB2119:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6769 .loc 3 1278 0
+ 6770 58d8 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6770 00000000
+ 6771 58e0 F30F6F8D movdqu -1376(%rbp), %xmm1
+ 6771 A0FAFFFF
+ 6772 58e8 F30F7F8D movdqu %xmm1, -1344(%rbp)
+ 6772 C0FAFFFF
+ 6773 58f0 F30F7F85 movdqu %xmm0, -1360(%rbp)
+ 6773 B0FAFFFF
+ 6774 58f8 F30F6F85 movdqu -1344(%rbp), %xmm0
+ 6774 C0FAFFFF
+ 6775 5900 F30F7F85 movdqu %xmm0, -1312(%rbp)
+ 6775 E0FAFFFF
+ 6776 5908 F30F6F85 movdqu -1360(%rbp), %xmm0
+ 6776 B0FAFFFF
+ 6777 5910 F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 6777 D0FAFFFF
+ 6778 .LBB2120:
+ 6779 .LBB2121:
+ 6780 .LBB2122:
+ 6781 .LBB2123:
+
GAS LISTING /tmp/ccPaCTqg.s page 230
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6782 .loc 1 529 0
+ 6783 5918 F30F6F8D movdqu -1328(%rbp), %xmm1
+ 6783 D0FAFFFF
+ 6784 5920 F30F6F85 movdqu -1312(%rbp), %xmm0
+ 6784 E0FAFFFF
+ 6785 5928 660F3800 pshufb %xmm1, %xmm0
+ 6785 C1
+ 6786 .LBE2123:
+ 6787 .LBE2122:
+ 6788 .LBE2121:
+ 6789 .LBE2120:
+ 6790 .LBE2119:
+ 6791 .LBE2118:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6792 .loc 3 1568 0
+ 6793 592d 660F7F85 movdqa %xmm0, -5296(%rbp)
+ 6793 50EBFFFF
+ 6794 5935 660F6F85 movdqa -5296(%rbp), %xmm0
+ 6794 50EBFFFF
+ 6795 593d 660FEF85 pxor -1472(%rbp), %xmm0
+ 6795 40FAFFFF
+ 6796 5945 F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 6796 40FAFFFF
+ 6797 594d 660F6F85 movdqa -5296(%rbp), %xmm0
+ 6797 50EBFFFF
+ 6798 5955 F30F7F85 movdqu %xmm0, -1296(%rbp)
+ 6798 F0FAFFFF
+ 6799 .LBB2124:
+ 6800 .LBB2125:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6801 .loc 3 1278 0
+ 6802 595d 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6802 00000000
+ 6803 5965 F30F6F8D movdqu -1296(%rbp), %xmm1
+ 6803 F0FAFFFF
+ 6804 596d F30F7F8D movdqu %xmm1, -1264(%rbp)
+ 6804 10FBFFFF
+ 6805 5975 F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 6805 00FBFFFF
+ 6806 597d F30F6F85 movdqu -1264(%rbp), %xmm0
+ 6806 10FBFFFF
+ 6807 5985 F30F7F85 movdqu %xmm0, -1232(%rbp)
+ 6807 30FBFFFF
+ 6808 598d F30F6F85 movdqu -1280(%rbp), %xmm0
+ 6808 00FBFFFF
+ 6809 5995 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 6809 20FBFFFF
+ 6810 .LBB2126:
+ 6811 .LBB2127:
+ 6812 .LBB2128:
+ 6813 .LBB2129:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6814 .loc 1 529 0
+ 6815 599d F30F6F8D movdqu -1248(%rbp), %xmm1
+ 6815 20FBFFFF
+ 6816 59a5 F30F6F85 movdqu -1232(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 231
+
+
+ 6816 30FBFFFF
+ 6817 59ad 660F3800 pshufb %xmm1, %xmm0
+ 6817 C1
+ 6818 .LBE2129:
+ 6819 .LBE2128:
+ 6820 .LBE2127:
+ 6821 .LBE2126:
+ 6822 .LBE2125:
+ 6823 .LBE2124:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6824 .loc 3 1569 0
+ 6825 59b2 660F7F85 movdqa %xmm0, -5296(%rbp)
+ 6825 50EBFFFF
+ 6826 59ba 660F6F85 movdqa -5296(%rbp), %xmm0
+ 6826 50EBFFFF
+ 6827 59c2 660FEF85 pxor -1472(%rbp), %xmm0
+ 6827 40FAFFFF
+ 6828 59ca F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 6828 40FAFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6829 .loc 3 1571 0
+ 6830 59d2 F30F6F85 movdqu -1472(%rbp), %xmm0
+ 6830 40FAFFFF
+ 6831 .LBE2111:
+ 6832 .LBE2110:
+ 6833 .loc 3 1935 0
+ 6834 59da F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 6834 E0EBFFFF
+ 6835 59e2 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6835 E0EBFFFF
+ 6836 59ea F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 6836 50FBFFFF
+ 6837 59f2 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 6837 F0EBFFFF
+ 6838 59fa F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 6838 40FBFFFF
+ 6839 .LBB2130:
+ 6840 .LBB2131:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 6841 .loc 3 178 0
+ 6842 5a02 F30F6F85 movdqu -1216(%rbp), %xmm0
+ 6842 40FBFFFF
+ 6843 5a0a F30F6F8D movdqu -1200(%rbp), %xmm1
+ 6843 50FBFFFF
+ 6844 5a12 660FEFC1 pxor %xmm1, %xmm0
+ 6845 .LBE2131:
+ 6846 .LBE2130:
+ 6847 .loc 3 1935 0
+ 6848 5a16 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 6848 E0EBFFFF
+ 6849 5a1e 488B85C8 movq -5176(%rbp), %rax
+ 6849 EBFFFF
+ 6850 5a25 4805B000 addq $176, %rax
+ 6850 0000
+ 6851 5a2b F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6851 E0EBFFFF
+ 6852 5a33 F30F7F00 movdqu %xmm0, (%rax)
+
GAS LISTING /tmp/ccPaCTqg.s page 232
+
+
+ 6853 5a37 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 6853 E0EBFFFF
+ 6854 5a3f F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 6854 70FBFFFF
+ 6855 .LBB2132:
+ 6856 .LBB2133:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 6857 .loc 3 1673 0
+ 6858 5a47 F30F6F85 movdqu -1168(%rbp), %xmm0
+ 6858 70FBFFFF
+ 6859 5a4f 660F7F85 movdqa %xmm0, -5280(%rbp)
+ 6859 60EBFFFF
+ 6860 5a57 660F6F85 movdqa -5280(%rbp), %xmm0
+ 6860 60EBFFFF
+ 6861 5a5f F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 6861 90FBFFFF
+ 6862 .LBB2134:
+ 6863 .LBB2135:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6864 .loc 1 852 0
+ 6865 5a67 F30F6F85 movdqu -1136(%rbp), %xmm0
+ 6865 90FBFFFF
+ 6866 5a6f 660F3ADF aeskeygenassist $32, %xmm0, %xmm0
+ 6866 C020
+ 6867 .LBE2135:
+ 6868 .LBE2134:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 6869 .loc 3 1674 0
+ 6870 5a75 660F7F85 movdqa %xmm0, -5280(%rbp)
+ 6870 60EBFFFF
+ 6871 5a7d 660F6F85 movdqa -5280(%rbp), %xmm0
+ 6871 60EBFFFF
+ 6872 5a85 F30F7F85 movdqu %xmm0, -1120(%rbp)
+ 6872 A0FBFFFF
+ 6873 5a8d F30F6F85 movdqu -1120(%rbp), %xmm0
+ 6873 A0FBFFFF
+ 6874 5a95 F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 6874 C0FBFFFF
+ 6875 .LBB2136:
+ 6876 .LBB2137:
+ 6877 .LBB2138:
+ 6878 .LBB2139:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6879 .loc 1 450 0
+ 6880 5a9d F30F6F85 movdqu -1088(%rbp), %xmm0
+ 6880 C0FBFFFF
+ 6881 5aa5 660F70C0 pshufd $255, %xmm0, %xmm0
+ 6881 FF
+ 6882 .LBE2139:
+ 6883 .LBE2138:
+ 6884 .LBE2137:
+ 6885 .LBE2136:
+ 6886 .LBE2133:
+ 6887 .LBE2132:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(12,0x20); /* k48 : k49 : k50 : k51 */
+ 6888 .loc 3 1936 0
+ 6889 5aaa F30F7F85 movdqu %xmm0, -5136(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 233
+
+
+ 6889 F0EBFFFF
+ 6890 5ab2 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6890 D0EBFFFF
+ 6891 5aba F30F7F85 movdqu %xmm0, -1072(%rbp)
+ 6891 D0FBFFFF
+ 6892 .LBB2140:
+ 6893 .LBB2141:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6894 .loc 3 1565 0
+ 6895 5ac2 F30F6F85 movdqu -1072(%rbp), %xmm0
+ 6895 D0FBFFFF
+ 6896 5aca 660F7F85 movdqa %xmm0, -5264(%rbp)
+ 6896 70EBFFFF
+ 6897 5ad2 660F6F85 movdqa -5264(%rbp), %xmm0
+ 6897 70EBFFFF
+ 6898 5ada F30F7F85 movdqu %xmm0, -1056(%rbp)
+ 6898 E0FBFFFF
+ 6899 .LBB2142:
+ 6900 .LBB2143:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6901 .loc 3 1278 0
+ 6902 5ae2 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6902 00000000
+ 6903 5aea F30F6F8D movdqu -1056(%rbp), %xmm1
+ 6903 E0FBFFFF
+ 6904 5af2 F30F7F8D movdqu %xmm1, -1024(%rbp)
+ 6904 00FCFFFF
+ 6905 5afa F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 6905 F0FBFFFF
+ 6906 5b02 F30F6F85 movdqu -1024(%rbp), %xmm0
+ 6906 00FCFFFF
+ 6907 5b0a F30F7F85 movdqu %xmm0, -992(%rbp)
+ 6907 20FCFFFF
+ 6908 5b12 F30F6F85 movdqu -1040(%rbp), %xmm0
+ 6908 F0FBFFFF
+ 6909 5b1a F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 6909 10FCFFFF
+ 6910 .LBB2144:
+ 6911 .LBB2145:
+ 6912 .LBB2146:
+ 6913 .LBB2147:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6914 .loc 1 529 0
+ 6915 5b22 F30F6F8D movdqu -1008(%rbp), %xmm1
+ 6915 10FCFFFF
+ 6916 5b2a F30F6F85 movdqu -992(%rbp), %xmm0
+ 6916 20FCFFFF
+ 6917 5b32 660F3800 pshufb %xmm1, %xmm0
+ 6917 C1
+ 6918 .LBE2147:
+ 6919 .LBE2146:
+ 6920 .LBE2145:
+ 6921 .LBE2144:
+ 6922 .LBE2143:
+ 6923 .LBE2142:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6924 .loc 3 1567 0
+
GAS LISTING /tmp/ccPaCTqg.s page 234
+
+
+ 6925 5b37 660F7F85 movdqa %xmm0, -5264(%rbp)
+ 6925 70EBFFFF
+ 6926 5b3f 660F6F85 movdqa -5264(%rbp), %xmm0
+ 6926 70EBFFFF
+ 6927 5b47 660FEF85 pxor -1072(%rbp), %xmm0
+ 6927 D0FBFFFF
+ 6928 5b4f F30F7F85 movdqu %xmm0, -1072(%rbp)
+ 6928 D0FBFFFF
+ 6929 5b57 660F6F85 movdqa -5264(%rbp), %xmm0
+ 6929 70EBFFFF
+ 6930 5b5f F30F7F85 movdqu %xmm0, -976(%rbp)
+ 6930 30FCFFFF
+ 6931 .LBB2148:
+ 6932 .LBB2149:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6933 .loc 3 1278 0
+ 6934 5b67 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6934 00000000
+ 6935 5b6f F30F6F8D movdqu -976(%rbp), %xmm1
+ 6935 30FCFFFF
+ 6936 5b77 F30F7F8D movdqu %xmm1, -944(%rbp)
+ 6936 50FCFFFF
+ 6937 5b7f F30F7F85 movdqu %xmm0, -960(%rbp)
+ 6937 40FCFFFF
+ 6938 5b87 F30F6F85 movdqu -944(%rbp), %xmm0
+ 6938 50FCFFFF
+ 6939 5b8f F30F7F85 movdqu %xmm0, -912(%rbp)
+ 6939 70FCFFFF
+ 6940 5b97 F30F6F85 movdqu -960(%rbp), %xmm0
+ 6940 40FCFFFF
+ 6941 5b9f F30F7F85 movdqu %xmm0, -928(%rbp)
+ 6941 60FCFFFF
+ 6942 .LBB2150:
+ 6943 .LBB2151:
+ 6944 .LBB2152:
+ 6945 .LBB2153:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6946 .loc 1 529 0
+ 6947 5ba7 F30F6F8D movdqu -928(%rbp), %xmm1
+ 6947 60FCFFFF
+ 6948 5baf F30F6F85 movdqu -912(%rbp), %xmm0
+ 6948 70FCFFFF
+ 6949 5bb7 660F3800 pshufb %xmm1, %xmm0
+ 6949 C1
+ 6950 .LBE2153:
+ 6951 .LBE2152:
+ 6952 .LBE2151:
+ 6953 .LBE2150:
+ 6954 .LBE2149:
+ 6955 .LBE2148:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6956 .loc 3 1568 0
+ 6957 5bbc 660F7F85 movdqa %xmm0, -5264(%rbp)
+ 6957 70EBFFFF
+ 6958 5bc4 660F6F85 movdqa -5264(%rbp), %xmm0
+ 6958 70EBFFFF
+ 6959 5bcc 660FEF85 pxor -1072(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 235
+
+
+ 6959 D0FBFFFF
+ 6960 5bd4 F30F7F85 movdqu %xmm0, -1072(%rbp)
+ 6960 D0FBFFFF
+ 6961 5bdc 660F6F85 movdqa -5264(%rbp), %xmm0
+ 6961 70EBFFFF
+ 6962 5be4 F30F7F85 movdqu %xmm0, -896(%rbp)
+ 6962 80FCFFFF
+ 6963 .LBB2154:
+ 6964 .LBB2155:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6965 .loc 3 1278 0
+ 6966 5bec 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 6966 00000000
+ 6967 5bf4 F30F6F8D movdqu -896(%rbp), %xmm1
+ 6967 80FCFFFF
+ 6968 5bfc F30F7F8D movdqu %xmm1, -864(%rbp)
+ 6968 A0FCFFFF
+ 6969 5c04 F30F7F85 movdqu %xmm0, -880(%rbp)
+ 6969 90FCFFFF
+ 6970 5c0c F30F6F85 movdqu -864(%rbp), %xmm0
+ 6970 A0FCFFFF
+ 6971 5c14 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 6971 C0FCFFFF
+ 6972 5c1c F30F6F85 movdqu -880(%rbp), %xmm0
+ 6972 90FCFFFF
+ 6973 5c24 F30F7F85 movdqu %xmm0, -848(%rbp)
+ 6973 B0FCFFFF
+ 6974 .LBB2156:
+ 6975 .LBB2157:
+ 6976 .LBB2158:
+ 6977 .LBB2159:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6978 .loc 1 529 0
+ 6979 5c2c F30F6F8D movdqu -848(%rbp), %xmm1
+ 6979 B0FCFFFF
+ 6980 5c34 F30F6F85 movdqu -832(%rbp), %xmm0
+ 6980 C0FCFFFF
+ 6981 5c3c 660F3800 pshufb %xmm1, %xmm0
+ 6981 C1
+ 6982 .LBE2159:
+ 6983 .LBE2158:
+ 6984 .LBE2157:
+ 6985 .LBE2156:
+ 6986 .LBE2155:
+ 6987 .LBE2154:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6988 .loc 3 1569 0
+ 6989 5c41 660F7F85 movdqa %xmm0, -5264(%rbp)
+ 6989 70EBFFFF
+ 6990 5c49 660F6F85 movdqa -5264(%rbp), %xmm0
+ 6990 70EBFFFF
+ 6991 5c51 660FEF85 pxor -1072(%rbp), %xmm0
+ 6991 D0FBFFFF
+ 6992 5c59 F30F7F85 movdqu %xmm0, -1072(%rbp)
+ 6992 D0FBFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6993 .loc 3 1571 0
+
GAS LISTING /tmp/ccPaCTqg.s page 236
+
+
+ 6994 5c61 F30F6F85 movdqu -1072(%rbp), %xmm0
+ 6994 D0FBFFFF
+ 6995 .LBE2141:
+ 6996 .LBE2140:
+ 6997 .loc 3 1936 0
+ 6998 5c69 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 6998 D0EBFFFF
+ 6999 5c71 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 6999 D0EBFFFF
+ 7000 5c79 F30F7F85 movdqu %xmm0, -800(%rbp)
+ 7000 E0FCFFFF
+ 7001 5c81 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 7001 F0EBFFFF
+ 7002 5c89 F30F7F85 movdqu %xmm0, -816(%rbp)
+ 7002 D0FCFFFF
+ 7003 .LBB2160:
+ 7004 .LBB2161:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 7005 .loc 3 178 0
+ 7006 5c91 F30F6F85 movdqu -816(%rbp), %xmm0
+ 7006 D0FCFFFF
+ 7007 5c99 F30F6F8D movdqu -800(%rbp), %xmm1
+ 7007 E0FCFFFF
+ 7008 5ca1 660FEFC1 pxor %xmm1, %xmm0
+ 7009 .LBE2161:
+ 7010 .LBE2160:
+ 7011 .loc 3 1936 0
+ 7012 5ca5 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 7012 D0EBFFFF
+ 7013 5cad 488B85C8 movq -5176(%rbp), %rax
+ 7013 EBFFFF
+ 7014 5cb4 4805C000 addq $192, %rax
+ 7014 0000
+ 7015 5cba F30F6F85 movdqu -5168(%rbp), %xmm0
+ 7015 D0EBFFFF
+ 7016 5cc2 F30F7F00 movdqu %xmm0, (%rax)
+ 7017 5cc6 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 7017 D0EBFFFF
+ 7018 5cce F30F7F85 movdqu %xmm0, -784(%rbp)
+ 7018 F0FCFFFF
+ 7019 .LBB2162:
+ 7020 .LBB2163:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 7021 .loc 3 1649 0
+ 7022 5cd6 F30F6F85 movdqu -784(%rbp), %xmm0
+ 7022 F0FCFFFF
+ 7023 5cde 660F7F85 movdqa %xmm0, -5248(%rbp)
+ 7023 80EBFFFF
+ 7024 5ce6 660F6F85 movdqa -5248(%rbp), %xmm0
+ 7024 80EBFFFF
+ 7025 5cee F30F7F85 movdqu %xmm0, -752(%rbp)
+ 7025 10FDFFFF
+ 7026 .LBB2164:
+ 7027 .LBB2165:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 7028 .loc 1 852 0
+ 7029 5cf6 F30F6F85 movdqu -752(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 237
+
+
+ 7029 10FDFFFF
+ 7030 5cfe 660F3ADF aeskeygenassist $0, %xmm0, %xmm0
+ 7030 C000
+ 7031 .LBE2165:
+ 7032 .LBE2164:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, 0);
+ 7033 .loc 3 1650 0
+ 7034 5d04 660F7F85 movdqa %xmm0, -5248(%rbp)
+ 7034 80EBFFFF
+ 7035 5d0c 660F6F85 movdqa -5248(%rbp), %xmm0
+ 7035 80EBFFFF
+ 7036 5d14 F30F7F85 movdqu %xmm0, -736(%rbp)
+ 7036 20FDFFFF
+ 7037 5d1c F30F6F85 movdqu -736(%rbp), %xmm0
+ 7037 20FDFFFF
+ 7038 5d24 F30F7F85 movdqu %xmm0, -704(%rbp)
+ 7038 40FDFFFF
+ 7039 .LBB2166:
+ 7040 .LBB2167:
+ 7041 .LBB2168:
+ 7042 .LBB2169:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 7043 .loc 1 450 0
+ 7044 5d2c F30F6F85 movdqu -704(%rbp), %xmm0
+ 7044 40FDFFFF
+ 7045 5d34 660F70C0 pshufd $170, %xmm0, %xmm0
+ 7045 AA
+ 7046 .LBE2169:
+ 7047 .LBE2168:
+ 7048 .LBE2167:
+ 7049 .LBE2166:
+ 7050 .LBE2163:
+ 7051 .LBE2162:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(13); /* k52 : k53 : k54 : k55 */
+ 7052 .loc 3 1937 0
+ 7053 5d39 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 7053 F0EBFFFF
+ 7054 5d41 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 7054 E0EBFFFF
+ 7055 5d49 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 7055 50FDFFFF
+ 7056 .LBB2170:
+ 7057 .LBB2171:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 7058 .loc 3 1565 0
+ 7059 5d51 F30F6F85 movdqu -688(%rbp), %xmm0
+ 7059 50FDFFFF
+ 7060 5d59 660F7F85 movdqa %xmm0, -5232(%rbp)
+ 7060 90EBFFFF
+ 7061 5d61 660F6F85 movdqa -5232(%rbp), %xmm0
+ 7061 90EBFFFF
+ 7062 5d69 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 7062 60FDFFFF
+ 7063 .LBB2172:
+ 7064 .LBB2173:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7065 .loc 3 1278 0
+
GAS LISTING /tmp/ccPaCTqg.s page 238
+
+
+ 7066 5d71 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 7066 00000000
+ 7067 5d79 F30F6F8D movdqu -672(%rbp), %xmm1
+ 7067 60FDFFFF
+ 7068 5d81 F30F7F8D movdqu %xmm1, -640(%rbp)
+ 7068 80FDFFFF
+ 7069 5d89 F30F7F85 movdqu %xmm0, -656(%rbp)
+ 7069 70FDFFFF
+ 7070 5d91 F30F6F85 movdqu -640(%rbp), %xmm0
+ 7070 80FDFFFF
+ 7071 5d99 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 7071 A0FDFFFF
+ 7072 5da1 F30F6F85 movdqu -656(%rbp), %xmm0
+ 7072 70FDFFFF
+ 7073 5da9 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 7073 90FDFFFF
+ 7074 .LBB2174:
+ 7075 .LBB2175:
+ 7076 .LBB2176:
+ 7077 .LBB2177:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7078 .loc 1 529 0
+ 7079 5db1 F30F6F8D movdqu -624(%rbp), %xmm1
+ 7079 90FDFFFF
+ 7080 5db9 F30F6F85 movdqu -608(%rbp), %xmm0
+ 7080 A0FDFFFF
+ 7081 5dc1 660F3800 pshufb %xmm1, %xmm0
+ 7081 C1
+ 7082 .LBE2177:
+ 7083 .LBE2176:
+ 7084 .LBE2175:
+ 7085 .LBE2174:
+ 7086 .LBE2173:
+ 7087 .LBE2172:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7088 .loc 3 1567 0
+ 7089 5dc6 660F7F85 movdqa %xmm0, -5232(%rbp)
+ 7089 90EBFFFF
+ 7090 5dce 660F6F85 movdqa -5232(%rbp), %xmm0
+ 7090 90EBFFFF
+ 7091 5dd6 660FEF85 pxor -688(%rbp), %xmm0
+ 7091 50FDFFFF
+ 7092 5dde F30F7F85 movdqu %xmm0, -688(%rbp)
+ 7092 50FDFFFF
+ 7093 5de6 660F6F85 movdqa -5232(%rbp), %xmm0
+ 7093 90EBFFFF
+ 7094 5dee F30F7F85 movdqu %xmm0, -592(%rbp)
+ 7094 B0FDFFFF
+ 7095 .LBB2178:
+ 7096 .LBB2179:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7097 .loc 3 1278 0
+ 7098 5df6 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 7098 00000000
+ 7099 5dfe F30F6F8D movdqu -592(%rbp), %xmm1
+ 7099 B0FDFFFF
+ 7100 5e06 F30F7F8D movdqu %xmm1, -560(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 239
+
+
+ 7100 D0FDFFFF
+ 7101 5e0e F30F7F85 movdqu %xmm0, -576(%rbp)
+ 7101 C0FDFFFF
+ 7102 5e16 F30F6F85 movdqu -560(%rbp), %xmm0
+ 7102 D0FDFFFF
+ 7103 5e1e F30F7F85 movdqu %xmm0, -528(%rbp)
+ 7103 F0FDFFFF
+ 7104 5e26 F30F6F85 movdqu -576(%rbp), %xmm0
+ 7104 C0FDFFFF
+ 7105 5e2e F30F7F85 movdqu %xmm0, -544(%rbp)
+ 7105 E0FDFFFF
+ 7106 .LBB2180:
+ 7107 .LBB2181:
+ 7108 .LBB2182:
+ 7109 .LBB2183:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7110 .loc 1 529 0
+ 7111 5e36 F30F6F8D movdqu -544(%rbp), %xmm1
+ 7111 E0FDFFFF
+ 7112 5e3e F30F6F85 movdqu -528(%rbp), %xmm0
+ 7112 F0FDFFFF
+ 7113 5e46 660F3800 pshufb %xmm1, %xmm0
+ 7113 C1
+ 7114 .LBE2183:
+ 7115 .LBE2182:
+ 7116 .LBE2181:
+ 7117 .LBE2180:
+ 7118 .LBE2179:
+ 7119 .LBE2178:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7120 .loc 3 1568 0
+ 7121 5e4b 660F7F85 movdqa %xmm0, -5232(%rbp)
+ 7121 90EBFFFF
+ 7122 5e53 660F6F85 movdqa -5232(%rbp), %xmm0
+ 7122 90EBFFFF
+ 7123 5e5b 660FEF85 pxor -688(%rbp), %xmm0
+ 7123 50FDFFFF
+ 7124 5e63 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 7124 50FDFFFF
+ 7125 5e6b 660F6F85 movdqa -5232(%rbp), %xmm0
+ 7125 90EBFFFF
+ 7126 5e73 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 7126 00FEFFFF
+ 7127 .LBB2184:
+ 7128 .LBB2185:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7129 .loc 3 1278 0
+ 7130 5e7b 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 7130 00000000
+ 7131 5e83 F30F6F8D movdqu -512(%rbp), %xmm1
+ 7131 00FEFFFF
+ 7132 5e8b F30F7F8D movdqu %xmm1, -480(%rbp)
+ 7132 20FEFFFF
+ 7133 5e93 F30F7F85 movdqu %xmm0, -496(%rbp)
+ 7133 10FEFFFF
+ 7134 5e9b F30F6F85 movdqu -480(%rbp), %xmm0
+ 7134 20FEFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 240
+
+
+ 7135 5ea3 F30F7F85 movdqu %xmm0, -448(%rbp)
+ 7135 40FEFFFF
+ 7136 5eab F30F6F85 movdqu -496(%rbp), %xmm0
+ 7136 10FEFFFF
+ 7137 5eb3 F30F7F85 movdqu %xmm0, -464(%rbp)
+ 7137 30FEFFFF
+ 7138 .LBB2186:
+ 7139 .LBB2187:
+ 7140 .LBB2188:
+ 7141 .LBB2189:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7142 .loc 1 529 0
+ 7143 5ebb F30F6F8D movdqu -464(%rbp), %xmm1
+ 7143 30FEFFFF
+ 7144 5ec3 F30F6F85 movdqu -448(%rbp), %xmm0
+ 7144 40FEFFFF
+ 7145 5ecb 660F3800 pshufb %xmm1, %xmm0
+ 7145 C1
+ 7146 .LBE2189:
+ 7147 .LBE2188:
+ 7148 .LBE2187:
+ 7149 .LBE2186:
+ 7150 .LBE2185:
+ 7151 .LBE2184:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7152 .loc 3 1569 0
+ 7153 5ed0 660F7F85 movdqa %xmm0, -5232(%rbp)
+ 7153 90EBFFFF
+ 7154 5ed8 660F6F85 movdqa -5232(%rbp), %xmm0
+ 7154 90EBFFFF
+ 7155 5ee0 660FEF85 pxor -688(%rbp), %xmm0
+ 7155 50FDFFFF
+ 7156 5ee8 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 7156 50FDFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7157 .loc 3 1571 0
+ 7158 5ef0 F30F6F85 movdqu -688(%rbp), %xmm0
+ 7158 50FDFFFF
+ 7159 .LBE2171:
+ 7160 .LBE2170:
+ 7161 .loc 3 1937 0
+ 7162 5ef8 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 7162 E0EBFFFF
+ 7163 5f00 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 7163 E0EBFFFF
+ 7164 5f08 F30F7F85 movdqu %xmm0, -416(%rbp)
+ 7164 60FEFFFF
+ 7165 5f10 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 7165 F0EBFFFF
+ 7166 5f18 F30F7F85 movdqu %xmm0, -432(%rbp)
+ 7166 50FEFFFF
+ 7167 .LBB2190:
+ 7168 .LBB2191:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 7169 .loc 3 178 0
+ 7170 5f20 F30F6F85 movdqu -432(%rbp), %xmm0
+ 7170 50FEFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 241
+
+
+ 7171 5f28 F30F6F8D movdqu -416(%rbp), %xmm1
+ 7171 60FEFFFF
+ 7172 5f30 660FEFC1 pxor %xmm1, %xmm0
+ 7173 .LBE2191:
+ 7174 .LBE2190:
+ 7175 .loc 3 1937 0
+ 7176 5f34 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 7176 E0EBFFFF
+ 7177 5f3c 488B85C8 movq -5176(%rbp), %rax
+ 7177 EBFFFF
+ 7178 5f43 4805D000 addq $208, %rax
+ 7178 0000
+ 7179 5f49 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 7179 E0EBFFFF
+ 7180 5f51 F30F7F00 movdqu %xmm0, (%rax)
+ 7181 5f55 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 7181 E0EBFFFF
+ 7182 5f5d F30F7F85 movdqu %xmm0, -384(%rbp)
+ 7182 80FEFFFF
+ 7183 .LBB2192:
+ 7184 .LBB2193:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+ 7185 .loc 3 1673 0
+ 7186 5f65 F30F6F85 movdqu -384(%rbp), %xmm0
+ 7186 80FEFFFF
+ 7187 5f6d 660F7F85 movdqa %xmm0, -5216(%rbp)
+ 7187 A0EBFFFF
+ 7188 5f75 660F6F85 movdqa -5216(%rbp), %xmm0
+ 7188 A0EBFFFF
+ 7189 5f7d F30F7F85 movdqu %xmm0, -352(%rbp)
+ 7189 A0FEFFFF
+ 7190 .LBB2194:
+ 7191 .LBB2195:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 7192 .loc 1 852 0
+ 7193 5f85 F30F6F85 movdqu -352(%rbp), %xmm0
+ 7193 A0FEFFFF
+ 7194 5f8d 660F3ADF aeskeygenassist $64, %xmm0, %xmm0
+ 7194 C040
+ 7195 .LBE2195:
+ 7196 .LBE2194:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 7197 .loc 3 1674 0
+ 7198 5f93 660F7F85 movdqa %xmm0, -5216(%rbp)
+ 7198 A0EBFFFF
+ 7199 5f9b 660F6F85 movdqa -5216(%rbp), %xmm0
+ 7199 A0EBFFFF
+ 7200 5fa3 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 7200 B0FEFFFF
+ 7201 5fab F30F6F85 movdqu -336(%rbp), %xmm0
+ 7201 B0FEFFFF
+ 7202 5fb3 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 7202 D0FEFFFF
+ 7203 .LBB2196:
+ 7204 .LBB2197:
+ 7205 .LBB2198:
+ 7206 .LBB2199:
+
GAS LISTING /tmp/ccPaCTqg.s page 242
+
+
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 7207 .loc 1 450 0
+ 7208 5fbb F30F6F85 movdqu -304(%rbp), %xmm0
+ 7208 D0FEFFFF
+ 7209 5fc3 660F70C0 pshufd $255, %xmm0, %xmm0
+ 7209 FF
+ 7210 .LBE2199:
+ 7211 .LBE2198:
+ 7212 .LBE2197:
+ 7213 .LBE2196:
+ 7214 .LBE2193:
+ 7215 .LBE2192:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(14,0x40); /* k56 : k57 : k58 : k59 */
+ 7216 .loc 3 1938 0
+ 7217 5fc8 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 7217 F0EBFFFF
+ 7218 5fd0 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 7218 D0EBFFFF
+ 7219 5fd8 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 7219 E0FEFFFF
+ 7220 .LBB2200:
+ 7221 .LBB2201:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 7222 .loc 3 1565 0
+ 7223 5fe0 F30F6F85 movdqu -288(%rbp), %xmm0
+ 7223 E0FEFFFF
+ 7224 5fe8 660F7F85 movdqa %xmm0, -5200(%rbp)
+ 7224 B0EBFFFF
+ 7225 5ff0 660F6F85 movdqa -5200(%rbp), %xmm0
+ 7225 B0EBFFFF
+ 7226 5ff8 F30F7F85 movdqu %xmm0, -272(%rbp)
+ 7226 F0FEFFFF
+ 7227 .LBB2202:
+ 7228 .LBB2203:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7229 .loc 3 1278 0
+ 7230 6000 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 7230 00000000
+ 7231 6008 F30F6F8D movdqu -272(%rbp), %xmm1
+ 7231 F0FEFFFF
+ 7232 6010 F30F7F8D movdqu %xmm1, -240(%rbp)
+ 7232 10FFFFFF
+ 7233 6018 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 7233 00FFFFFF
+ 7234 6020 F30F6F85 movdqu -240(%rbp), %xmm0
+ 7234 10FFFFFF
+ 7235 6028 F30F7F85 movdqu %xmm0, -208(%rbp)
+ 7235 30FFFFFF
+ 7236 6030 F30F6F85 movdqu -256(%rbp), %xmm0
+ 7236 00FFFFFF
+ 7237 6038 F30F7F85 movdqu %xmm0, -224(%rbp)
+ 7237 20FFFFFF
+ 7238 .LBB2204:
+ 7239 .LBB2205:
+ 7240 .LBB2206:
+ 7241 .LBB2207:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccPaCTqg.s page 243
+
+
+ 7242 .loc 1 529 0
+ 7243 6040 F30F6F8D movdqu -224(%rbp), %xmm1
+ 7243 20FFFFFF
+ 7244 6048 F30F6F85 movdqu -208(%rbp), %xmm0
+ 7244 30FFFFFF
+ 7245 6050 660F3800 pshufb %xmm1, %xmm0
+ 7245 C1
+ 7246 .LBE2207:
+ 7247 .LBE2206:
+ 7248 .LBE2205:
+ 7249 .LBE2204:
+ 7250 .LBE2203:
+ 7251 .LBE2202:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7252 .loc 3 1567 0
+ 7253 6055 660F7F85 movdqa %xmm0, -5200(%rbp)
+ 7253 B0EBFFFF
+ 7254 605d 660F6F85 movdqa -5200(%rbp), %xmm0
+ 7254 B0EBFFFF
+ 7255 6065 660FEF85 pxor -288(%rbp), %xmm0
+ 7255 E0FEFFFF
+ 7256 606d F30F7F85 movdqu %xmm0, -288(%rbp)
+ 7256 E0FEFFFF
+ 7257 6075 660F6F85 movdqa -5200(%rbp), %xmm0
+ 7257 B0EBFFFF
+ 7258 607d F30F7F85 movdqu %xmm0, -192(%rbp)
+ 7258 40FFFFFF
+ 7259 .LBB2208:
+ 7260 .LBB2209:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7261 .loc 3 1278 0
+ 7262 6085 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 7262 00000000
+ 7263 608d F30F6F8D movdqu -192(%rbp), %xmm1
+ 7263 40FFFFFF
+ 7264 6095 F30F7F8D movdqu %xmm1, -160(%rbp)
+ 7264 60FFFFFF
+ 7265 609d F30F7F85 movdqu %xmm0, -176(%rbp)
+ 7265 50FFFFFF
+ 7266 60a5 F30F6F85 movdqu -160(%rbp), %xmm0
+ 7266 60FFFFFF
+ 7267 60ad F30F7F45 movdqu %xmm0, -128(%rbp)
+ 7267 80
+ 7268 60b2 F30F6F85 movdqu -176(%rbp), %xmm0
+ 7268 50FFFFFF
+ 7269 60ba F30F7F85 movdqu %xmm0, -144(%rbp)
+ 7269 70FFFFFF
+ 7270 .LBB2210:
+ 7271 .LBB2211:
+ 7272 .LBB2212:
+ 7273 .LBB2213:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7274 .loc 1 529 0
+ 7275 60c2 F30F6F8D movdqu -144(%rbp), %xmm1
+ 7275 70FFFFFF
+ 7276 60ca F30F6F45 movdqu -128(%rbp), %xmm0
+ 7276 80
+
GAS LISTING /tmp/ccPaCTqg.s page 244
+
+
+ 7277 60cf 660F3800 pshufb %xmm1, %xmm0
+ 7277 C1
+ 7278 .LBE2213:
+ 7279 .LBE2212:
+ 7280 .LBE2211:
+ 7281 .LBE2210:
+ 7282 .LBE2209:
+ 7283 .LBE2208:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7284 .loc 3 1568 0
+ 7285 60d4 660F7F85 movdqa %xmm0, -5200(%rbp)
+ 7285 B0EBFFFF
+ 7286 60dc 660F6F85 movdqa -5200(%rbp), %xmm0
+ 7286 B0EBFFFF
+ 7287 60e4 660FEF85 pxor -288(%rbp), %xmm0
+ 7287 E0FEFFFF
+ 7288 60ec F30F7F85 movdqu %xmm0, -288(%rbp)
+ 7288 E0FEFFFF
+ 7289 60f4 660F6F85 movdqa -5200(%rbp), %xmm0
+ 7289 B0EBFFFF
+ 7290 60fc F30F7F45 movdqu %xmm0, -112(%rbp)
+ 7290 90
+ 7291 .LBB2214:
+ 7292 .LBB2215:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7293 .loc 3 1278 0
+ 7294 6101 660F6F05 movdqa mask.8002(%rip), %xmm0
+ 7294 00000000
+ 7295 6109 F30F6F4D movdqu -112(%rbp), %xmm1
+ 7295 90
+ 7296 610e F30F7F4D movdqu %xmm1, -80(%rbp)
+ 7296 B0
+ 7297 6113 F30F7F45 movdqu %xmm0, -96(%rbp)
+ 7297 A0
+ 7298 6118 F30F6F45 movdqu -80(%rbp), %xmm0
+ 7298 B0
+ 7299 611d F30F7F45 movdqu %xmm0, -48(%rbp)
+ 7299 D0
+ 7300 6122 F30F6F45 movdqu -96(%rbp), %xmm0
+ 7300 A0
+ 7301 6127 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 7301 C0
+ 7302 .LBB2216:
+ 7303 .LBB2217:
+ 7304 .LBB2218:
+ 7305 .LBB2219:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7306 .loc 1 529 0
+ 7307 612c F30F6F4D movdqu -64(%rbp), %xmm1
+ 7307 C0
+ 7308 6131 F30F6F45 movdqu -48(%rbp), %xmm0
+ 7308 D0
+ 7309 6136 660F3800 pshufb %xmm1, %xmm0
+ 7309 C1
+ 7310 .LBE2219:
+ 7311 .LBE2218:
+ 7312 .LBE2217:
+
GAS LISTING /tmp/ccPaCTqg.s page 245
+
+
+ 7313 .LBE2216:
+ 7314 .LBE2215:
+ 7315 .LBE2214:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7316 .loc 3 1569 0
+ 7317 613b 660F7F85 movdqa %xmm0, -5200(%rbp)
+ 7317 B0EBFFFF
+ 7318 6143 660F6F85 movdqa -5200(%rbp), %xmm0
+ 7318 B0EBFFFF
+ 7319 614b 660FEF85 pxor -288(%rbp), %xmm0
+ 7319 E0FEFFFF
+ 7320 6153 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 7320 E0FEFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7321 .loc 3 1571 0
+ 7322 615b F30F6F85 movdqu -288(%rbp), %xmm0
+ 7322 E0FEFFFF
+ 7323 .LBE2201:
+ 7324 .LBE2200:
+ 7325 .loc 3 1938 0
+ 7326 6163 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 7326 D0EBFFFF
+ 7327 616b F30F6F85 movdqu -5168(%rbp), %xmm0
+ 7327 D0EBFFFF
+ 7328 6173 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 7328 F0
+ 7329 6178 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 7329 F0EBFFFF
+ 7330 6180 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 7330 E0
+ 7331 .LBB2220:
+ 7332 .LBB2221:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 7333 .loc 3 178 0
+ 7334 6185 F30F6F45 movdqu -32(%rbp), %xmm0
+ 7334 E0
+ 7335 618a F30F6F4D movdqu -16(%rbp), %xmm1
+ 7335 F0
+ 7336 618f 660FEFC1 pxor %xmm1, %xmm0
+ 7337 .LBE2221:
+ 7338 .LBE2220:
+ 7339 .loc 3 1938 0
+ 7340 6193 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 7340 D0EBFFFF
+ 7341 619b 488B85C8 movq -5176(%rbp), %rax
+ 7341 EBFFFF
+ 7342 61a2 4805E000 addq $224, %rax
+ 7342 0000
+ 7343 61a8 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 7343 D0EBFFFF
+ 7344 61b0 F30F7F00 movdqu %xmm0, (%rax)
+1939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7345 .loc 3 1939 0
+ 7346 61b4 C9 leave
+ 7347 61b5 C3 ret
+ 7348 .cfi_endproc
+ 7349 .LFE658:
+
GAS LISTING /tmp/ccPaCTqg.s page 246
+
+
+ 7350 .size KAESBlockCipherVecAesNiKeyExpansion256, .-KAESBlockCipherVecAesNiKeyExpansion256
+ 7351 .type KAESBlockCipherVecAesNiEqInvKeyExpansion, @function
+ 7352 KAESBlockCipherVecAesNiEqInvKeyExpansion:
+ 7353 .LFB659:
+1940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * w, const AESByte * key)
+1943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_256, AES_Nk_256);
+1945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion) (CipherVec * r, const CipherVec * dr, unsigned Nr)
+1951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7354 .loc 3 1951 0
+ 7355 .cfi_startproc
+ 7356 61b6 55 pushq %rbp
+ 7357 .LCFI18:
+ 7358 .cfi_def_cfa_offset 16
+ 7359 61b7 4889E5 movq %rsp, %rbp
+ 7360 .cfi_offset 6, -16
+ 7361 .LCFI19:
+ 7362 .cfi_def_cfa_register 6
+ 7363 61ba 53 pushq %rbx
+ 7364 61bb 4883EC48 subq $72, %rsp
+ 7365 61bf 48897DC8 movq %rdi, -56(%rbp)
+ 7366 61c3 488975C0 movq %rsi, -64(%rbp)
+ 7367 61c7 8955BC movl %edx, -68(%rbp)
+1952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix, jx;
+1953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** jx = Nr;
+ 7368 .loc 3 1954 0
+ 7369 61ca 8B45BC movl -68(%rbp), %eax
+ 7370 61cd 8945DC movl %eax, -36(%rbp)
+1955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ix = 0;
+ 7371 .loc 3 1955 0
+ 7372 61d0 C745D800 movl $0, -40(%rbp)
+ 7372 000000
+1956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix++] = dr[jx--];
+ 7373 .loc 3 1956 0
+ 7374 61d7 8B45D8 mov -40(%rbp), %eax
+ 7375 61da 48C1E004 salq $4, %rax
+ 7376 61de 480345C8 addq -56(%rbp), %rax
+ 7377 61e2 8B55DC mov -36(%rbp), %edx
+ 7378 61e5 48C1E204 salq $4, %rdx
+ 7379 61e9 480355C0 addq -64(%rbp), %rdx
+ 7380 61ed 660F6F02 movdqa (%rdx), %xmm0
+ 7381 61f1 660F7F00 movdqa %xmm0, (%rax)
+ 7382 61f5 8345D801 addl $1, -40(%rbp)
+ 7383 61f9 836DDC01 subl $1, -36(%rbp)
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** while (jx)
+ 7384 .loc 3 1957 0
+ 7385 61fd EB42 jmp .L20
+ 7386 .cfi_offset 3, -24
+ 7387 .L21:
+
GAS LISTING /tmp/ccPaCTqg.s page 247
+
+
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+ 7388 .loc 3 1958 0
+ 7389 61ff 8B45D8 mov -40(%rbp), %eax
+ 7390 6202 48C1E004 salq $4, %rax
+ 7391 6206 4889C3 movq %rax, %rbx
+ 7392 6209 48035DC8 addq -56(%rbp), %rbx
+ 7393 620d 8B45DC mov -36(%rbp), %eax
+ 7394 6210 48C1E004 salq $4, %rax
+ 7395 6214 480345C0 addq -64(%rbp), %rax
+ 7396 6218 660F6F00 movdqa (%rax), %xmm0
+ 7397 621c 836DDC01 subl $1, -36(%rbp)
+ 7398 6220 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 7398 E0
+ 7399 .LBB2224:
+ 7400 .LBB2225:
+1102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESIMC (state);
+ 7401 .loc 3 1102 0
+ 7402 6225 F30F6F45 movdqu -32(%rbp), %xmm0
+ 7402 E0
+ 7403 622a E8FD9DFF call op_AESIMC
+ 7403 FF
+ 7404 622f F30F7F45 movdqu %xmm0, -32(%rbp)
+ 7404 E0
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7405 .loc 3 1148 0
+ 7406 6234 F30F6F45 movdqu -32(%rbp), %xmm0
+ 7406 E0
+ 7407 .LBE2225:
+ 7408 .LBE2224:
+ 7409 .loc 3 1958 0
+ 7410 6239 660F7F03 movdqa %xmm0, (%rbx)
+ 7411 623d 8345D801 addl $1, -40(%rbp)
+ 7412 .L20:
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** while (jx)
+ 7413 .loc 3 1957 0
+ 7414 6241 837DDC00 cmpl $0, -36(%rbp)
+ 7415 6245 75B8 jne .L21
+1959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix] = dr[jx];
+ 7416 .loc 3 1959 0
+ 7417 6247 8B45D8 mov -40(%rbp), %eax
+ 7418 624a 48C1E004 salq $4, %rax
+ 7419 624e 480345C8 addq -56(%rbp), %rax
+ 7420 6252 8B55DC mov -36(%rbp), %edx
+ 7421 6255 48C1E204 salq $4, %rdx
+ 7422 6259 480355C0 addq -64(%rbp), %rdx
+ 7423 625d 660F6F02 movdqa (%rdx), %xmm0
+ 7424 6261 660F7F00 movdqa %xmm0, (%rax)
+1960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7425 .loc 3 1960 0
+ 7426 6265 4883C448 addq $72, %rsp
+ 7427 6269 5B popq %rbx
+ 7428 626a C9 leave
+ 7429 626b C3 ret
+ 7430 .cfi_endproc
+ 7431 .LFE659:
+ 7432 .size KAESBlockCipherVecAesNiEqInvKeyExpansion, .-KAESBlockCipherVecAesNiEqInvKeyExpansion
+ 7433 .type KAESBlockCipherVecAesNiEqInvKeyExpansion128, @function
+
GAS LISTING /tmp/ccPaCTqg.s page 248
+
+
+ 7434 KAESBlockCipherVecAesNiEqInvKeyExpansion128:
+ 7435 .LFB660:
+1961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion128) (CipherVec * w, const CipherVec * kw)
+1965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7436 .loc 3 1965 0
+ 7437 .cfi_startproc
+ 7438 626c 55 pushq %rbp
+ 7439 .LCFI20:
+ 7440 .cfi_def_cfa_offset 16
+ 7441 626d 4889E5 movq %rsp, %rbp
+ 7442 .cfi_offset 6, -16
+ 7443 .LCFI21:
+ 7444 .cfi_def_cfa_register 6
+ 7445 6270 4883EC10 subq $16, %rsp
+ 7446 6274 48897DF8 movq %rdi, -8(%rbp)
+ 7447 6278 488975F0 movq %rsi, -16(%rbp)
+1966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+ 7448 .loc 3 1966 0
+ 7449 627c 488B4DF0 movq -16(%rbp), %rcx
+ 7450 6280 488B45F8 movq -8(%rbp), %rax
+ 7451 6284 BA0A0000 movl $10, %edx
+ 7451 00
+ 7452 6289 4889CE movq %rcx, %rsi
+ 7453 628c 4889C7 movq %rax, %rdi
+ 7454 628f E822FFFF call KAESBlockCipherVecAesNiEqInvKeyExpansion
+ 7454 FF
+1967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7455 .loc 3 1967 0
+ 7456 6294 C9 leave
+ 7457 6295 C3 ret
+ 7458 .cfi_endproc
+ 7459 .LFE660:
+ 7460 .size KAESBlockCipherVecAesNiEqInvKeyExpansion128, .-KAESBlockCipherVecAesNiEqInvKeyExpansion128
+ 7461 .type KAESBlockCipherVecAesNiEqInvKeyExpansion192, @function
+ 7462 KAESBlockCipherVecAesNiEqInvKeyExpansion192:
+ 7463 .LFB661:
+1968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion192) (CipherVec * w, const CipherVec * kw)
+1972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7464 .loc 3 1972 0
+ 7465 .cfi_startproc
+ 7466 6296 55 pushq %rbp
+ 7467 .LCFI22:
+ 7468 .cfi_def_cfa_offset 16
+ 7469 6297 4889E5 movq %rsp, %rbp
+ 7470 .cfi_offset 6, -16
+ 7471 .LCFI23:
+ 7472 .cfi_def_cfa_register 6
+ 7473 629a 4883EC10 subq $16, %rsp
+ 7474 629e 48897DF8 movq %rdi, -8(%rbp)
+ 7475 62a2 488975F0 movq %rsi, -16(%rbp)
+1973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+
GAS LISTING /tmp/ccPaCTqg.s page 249
+
+
+ 7476 .loc 3 1973 0
+ 7477 62a6 488B4DF0 movq -16(%rbp), %rcx
+ 7478 62aa 488B45F8 movq -8(%rbp), %rax
+ 7479 62ae BA0C0000 movl $12, %edx
+ 7479 00
+ 7480 62b3 4889CE movq %rcx, %rsi
+ 7481 62b6 4889C7 movq %rax, %rdi
+ 7482 62b9 E8F8FEFF call KAESBlockCipherVecAesNiEqInvKeyExpansion
+ 7482 FF
+1974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7483 .loc 3 1974 0
+ 7484 62be C9 leave
+ 7485 62bf C3 ret
+ 7486 .cfi_endproc
+ 7487 .LFE661:
+ 7488 .size KAESBlockCipherVecAesNiEqInvKeyExpansion192, .-KAESBlockCipherVecAesNiEqInvKeyExpansion192
+ 7489 .type KAESBlockCipherVecAesNiEqInvKeyExpansion256, @function
+ 7490 KAESBlockCipherVecAesNiEqInvKeyExpansion256:
+ 7491 .LFB662:
+1975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion256) (CipherVec * w, const CipherVec * kw)
+1979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7492 .loc 3 1979 0
+ 7493 .cfi_startproc
+ 7494 62c0 55 pushq %rbp
+ 7495 .LCFI24:
+ 7496 .cfi_def_cfa_offset 16
+ 7497 62c1 4889E5 movq %rsp, %rbp
+ 7498 .cfi_offset 6, -16
+ 7499 .LCFI25:
+ 7500 .cfi_def_cfa_register 6
+ 7501 62c4 4883EC10 subq $16, %rsp
+ 7502 62c8 48897DF8 movq %rdi, -8(%rbp)
+ 7503 62cc 488975F0 movq %rsi, -16(%rbp)
+1980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+ 7504 .loc 3 1980 0
+ 7505 62d0 488B4DF0 movq -16(%rbp), %rcx
+ 7506 62d4 488B45F8 movq -8(%rbp), %rax
+ 7507 62d8 BA0E0000 movl $14, %edx
+ 7507 00
+ 7508 62dd 4889CE movq %rcx, %rsi
+ 7509 62e0 4889C7 movq %rax, %rdi
+ 7510 62e3 E8CEFEFF call KAESBlockCipherVecAesNiEqInvKeyExpansion
+ 7510 FF
+1981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7511 .loc 3 1981 0
+ 7512 62e8 C9 leave
+ 7513 62e9 C3 ret
+ 7514 .cfi_endproc
+ 7515 .LFE662:
+ 7516 .size KAESBlockCipherVecAesNiEqInvKeyExpansion256, .-KAESBlockCipherVecAesNiEqInvKeyExpansion256
+ 7517 .section .rodata
+ 7518 .LC0:
+ 7519 0388 53746172 .string "Start of Round"
+ 7519 74206F66
+
GAS LISTING /tmp/ccPaCTqg.s page 250
+
+
+ 7519 20526F75
+ 7519 6E6400
+ 7520 .LC1:
+ 7521 0397 25733A09 .string "%s:\t%0.8x %0.8x %0.8x %0.8x\n"
+ 7521 25302E38
+ 7521 78202530
+ 7521 2E387820
+ 7521 25302E38
+ 7522 .LC2:
+ 7523 03b4 526F756E .string "Round Key"
+ 7523 64204B65
+ 7523 7900
+ 7524 .LC3:
+ 7525 03be 456E6420 .string "End 1st Round"
+ 7525 31737420
+ 7525 526F756E
+ 7525 6400
+ 7526 .LC4:
+ 7527 03cc 456E6420 .string "End of Round"
+ 7527 6F662052
+ 7527 6F756E64
+ 7527 00
+ 7528 .text
+ 7529 .type KAESBlockCipherVecAesNiCipher, @function
+ 7530 KAESBlockCipherVecAesNiCipher:
+ 7531 .LFB666:
+1982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Cipher First Round
+1986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+1995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+1997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+1999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End 1st Round", state);
+2001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register const CipherVec round_keys)
+2009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+
GAS LISTING /tmp/ccPaCTqg.s page 251
+
+
+2013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register const CipherVec round_keys)
+2014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mstate;
+2017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mround_keys;
+2018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+2021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+2023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESENC (state, round_keys);
+2028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+2030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+2034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MixColumns) (state);
+2038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ommited n on purpose */
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After MixColum", state);
+2041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+2046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+2059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESENCLAST (state, round_keys);
+2062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+2064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+2068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+
GAS LISTING /tmp/ccPaCTqg.s page 252
+
+
+2070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+2075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Cipher
+2082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** This implementation as stated
+2086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * above for simplifaction broke out the three types of rounds into
+2087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * first round, middle rounds, and last round. This approach was taken
+2088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * for ease of coding for optimization using smaller bytes of code
+2089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but inlining of the functions for efficiency
+2090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Cipher) (CipherVec state, const CipherVec * key,
+2093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned Nr)
+2094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7532 .loc 3 2094 0
+ 7533 .cfi_startproc
+ 7534 62ea 55 pushq %rbp
+ 7535 .LCFI26:
+ 7536 .cfi_def_cfa_offset 16
+ 7537 62eb 4889E5 movq %rsp, %rbp
+ 7538 .cfi_offset 6, -16
+ 7539 .LCFI27:
+ 7540 .cfi_def_cfa_register 6
+ 7541 62ee 4155 pushq %r13
+ 7542 62f0 4154 pushq %r12
+ 7543 62f2 53 pushq %rbx
+ 7544 62f3 4881EC88 subq $392, %rsp
+ 7544 010000
+ 7545 62fa 660F7F85 movdqa %xmm0, -400(%rbp)
+ 7545 70FEFFFF
+ 7546 6302 4889BD68 movq %rdi, -408(%rbp)
+ 7546 FEFFFF
+ 7547 6309 89B564FE movl %esi, -412(%rbp)
+ 7547 FFFF
+2095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix = 0;
+ 7548 .loc 3 2095 0
+ 7549 630f C7851CFF movl $0, -228(%rbp)
+ 7549 FFFF0000
+ 7549 0000
+2096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+ 7550 .loc 3 2097 0
+ 7551 6319 8B851CFF mov -228(%rbp), %eax
+ 7551 FFFF
+ 7552 631f 48C1E004 salq $4, %rax
+ 7553 6323 48038568 addq -408(%rbp), %rax
+
GAS LISTING /tmp/ccPaCTqg.s page 253
+
+
+ 7553 FEFFFF
+ 7554 632a 660F6F00 movdqa (%rax), %xmm0
+ 7555 632e 83851CFF addl $1, -228(%rbp)
+ 7555 FFFF01
+ 7556 6335 660F6F8D movdqa -400(%rbp), %xmm1
+ 7556 70FEFFFF
+ 7557 633d F30F7F8D movdqu %xmm1, -208(%rbp)
+ 7557 30FFFFFF
+ 7558 6345 F30F7F85 movdqu %xmm0, -224(%rbp)
+ 7558 20FFFFFF
+ 7559 .LBB2245:
+ 7560 .LBB2246:
+ 7561 .LBB2247:
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 7562 .loc 3 1994 0
+ 7563 634d F30F6F85 movdqu -208(%rbp), %xmm0
+ 7563 30FFFFFF
+ 7564 6355 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 7564 A0FEFFFF
+ 7565 .cfi_offset 3, -40
+ 7566 .cfi_offset 12, -32
+ 7567 .cfi_offset 13, -24
+ 7568 635d E8000000 call KDbgWriterGet at PLT
+ 7568 00
+ 7569 6362 4885C0 testq %rax, %rax
+ 7570 6365 7479 je .L31
+ 7571 6367 BF010000 movl $1, %edi
+ 7571 00
+ 7572 636c E8000000 call KDbgCondToFlag at PLT
+ 7572 00
+ 7573 6371 4889C6 movq %rax, %rsi
+ 7574 6374 BF100000 movl $16, %edi
+ 7574 00
+ 7575 6379 E8000000 call KDbgTestModConds at PLT
+ 7575 00
+ 7576 637e 84C0 testb %al, %al
+ 7577 6380 745E je .L31
+ 7578 6382 8B85ACFE movl -340(%rbp), %eax
+ 7578 FFFF
+ 7579 6388 89C7 movl %eax, %edi
+ 7580 638a E8A89CFF call bswap_32
+ 7580 FF
+ 7581 638f 4189C5 movl %eax, %r13d
+ 7582 6392 8B85A8FE movl -344(%rbp), %eax
+ 7582 FFFF
+ 7583 6398 89C7 movl %eax, %edi
+ 7584 639a E8989CFF call bswap_32
+ 7584 FF
+ 7585 639f 4189C4 movl %eax, %r12d
+ 7586 63a2 8B85A4FE movl -348(%rbp), %eax
+ 7586 FFFF
+ 7587 63a8 89C7 movl %eax, %edi
+ 7588 63aa E8889CFF call bswap_32
+ 7588 FF
+ 7589 63af 89C3 movl %eax, %ebx
+ 7590 63b1 8B85A0FE movl -352(%rbp), %eax
+ 7590 FFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 254
+
+
+ 7591 63b7 89C7 movl %eax, %edi
+ 7592 63b9 E8799CFF call bswap_32
+ 7592 FF
+ 7593 63be 4589E9 movl %r13d, %r9d
+ 7594 63c1 4589E0 movl %r12d, %r8d
+ 7595 63c4 89D9 movl %ebx, %ecx
+ 7596 63c6 89C2 movl %eax, %edx
+ 7597 63c8 488D3500 leaq .LC0(%rip), %rsi
+ 7597 000000
+ 7598 63cf 488D3D00 leaq .LC1(%rip), %rdi
+ 7598 000000
+ 7599 63d6 B8000000 movl $0, %eax
+ 7599 00
+ 7600 63db E8000000 call KDbgMsg at PLT
+ 7600 00
+ 7601 .L31:
+ 7602 .LBE2247:
+ 7603 .LBB2248:
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 7604 .loc 3 1996 0
+ 7605 63e0 F30F6F85 movdqu -224(%rbp), %xmm0
+ 7605 20FFFFFF
+ 7606 63e8 F30F7F85 movdqu %xmm0, -368(%rbp)
+ 7606 90FEFFFF
+ 7607 63f0 E8000000 call KDbgWriterGet at PLT
+ 7607 00
+ 7608 63f5 4885C0 testq %rax, %rax
+ 7609 63f8 7479 je .L33
+ 7610 63fa BF010000 movl $1, %edi
+ 7610 00
+ 7611 63ff E8000000 call KDbgCondToFlag at PLT
+ 7611 00
+ 7612 6404 4889C6 movq %rax, %rsi
+ 7613 6407 BF100000 movl $16, %edi
+ 7613 00
+ 7614 640c E8000000 call KDbgTestModConds at PLT
+ 7614 00
+ 7615 6411 84C0 testb %al, %al
+ 7616 6413 745E je .L33
+ 7617 6415 8B859CFE movl -356(%rbp), %eax
+ 7617 FFFF
+ 7618 641b 89C7 movl %eax, %edi
+ 7619 641d E8159CFF call bswap_32
+ 7619 FF
+ 7620 6422 4189C5 movl %eax, %r13d
+ 7621 6425 8B8598FE movl -360(%rbp), %eax
+ 7621 FFFF
+ 7622 642b 89C7 movl %eax, %edi
+ 7623 642d E8059CFF call bswap_32
+ 7623 FF
+ 7624 6432 4189C4 movl %eax, %r12d
+ 7625 6435 8B8594FE movl -364(%rbp), %eax
+ 7625 FFFF
+ 7626 643b 89C7 movl %eax, %edi
+ 7627 643d E8F59BFF call bswap_32
+ 7627 FF
+ 7628 6442 89C3 movl %eax, %ebx
+
GAS LISTING /tmp/ccPaCTqg.s page 255
+
+
+ 7629 6444 8B8590FE movl -368(%rbp), %eax
+ 7629 FFFF
+ 7630 644a 89C7 movl %eax, %edi
+ 7631 644c E8E69BFF call bswap_32
+ 7631 FF
+ 7632 6451 4589E9 movl %r13d, %r9d
+ 7633 6454 4589E0 movl %r12d, %r8d
+ 7634 6457 89D9 movl %ebx, %ecx
+ 7635 6459 89C2 movl %eax, %edx
+ 7636 645b 488D3500 leaq .LC2(%rip), %rsi
+ 7636 000000
+ 7637 6462 488D3D00 leaq .LC1(%rip), %rdi
+ 7637 000000
+ 7638 6469 B8000000 movl $0, %eax
+ 7638 00
+ 7639 646e E8000000 call KDbgMsg at PLT
+ 7639 00
+ 7640 .L33:
+ 7641 6473 F30F6F85 movdqu -208(%rbp), %xmm0
+ 7641 30FFFFFF
+ 7642 647b F30F7F85 movdqu %xmm0, -176(%rbp)
+ 7642 50FFFFFF
+ 7643 6483 F30F6F85 movdqu -224(%rbp), %xmm0
+ 7643 20FFFFFF
+ 7644 648b F30F7F85 movdqu %xmm0, -192(%rbp)
+ 7644 40FFFFFF
+ 7645 6493 F30F6F85 movdqu -176(%rbp), %xmm0
+ 7645 50FFFFFF
+ 7646 649b F30F7F85 movdqu %xmm0, -144(%rbp)
+ 7646 70FFFFFF
+ 7647 64a3 F30F6F85 movdqu -192(%rbp), %xmm0
+ 7647 40FFFFFF
+ 7648 64ab F30F7F85 movdqu %xmm0, -160(%rbp)
+ 7648 60FFFFFF
+ 7649 .LBE2248:
+ 7650 .LBB2249:
+ 7651 .LBB2250:
+ 7652 .LBB2251:
+ 7653 .LBB2252:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 7654 .loc 3 178 0
+ 7655 64b3 F30F6F85 movdqu -160(%rbp), %xmm0
+ 7655 60FFFFFF
+ 7656 64bb F30F6F8D movdqu -144(%rbp), %xmm1
+ 7656 70FFFFFF
+ 7657 64c3 660FEFC1 pxor %xmm1, %xmm0
+ 7658 .LBE2252:
+ 7659 .LBE2251:
+ 7660 .LBE2250:
+ 7661 .LBE2249:
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 7662 .loc 3 1998 0
+ 7663 64c7 F30F7F85 movdqu %xmm0, -208(%rbp)
+ 7663 30FFFFFF
+ 7664 .LBB2253:
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End 1st Round", state);
+ 7665 .loc 3 2000 0
+
GAS LISTING /tmp/ccPaCTqg.s page 256
+
+
+ 7666 64cf F30F6F85 movdqu -208(%rbp), %xmm0
+ 7666 30FFFFFF
+ 7667 64d7 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 7667 80FEFFFF
+ 7668 64df E8000000 call KDbgWriterGet at PLT
+ 7668 00
+ 7669 64e4 4885C0 testq %rax, %rax
+ 7670 64e7 7479 je .L35
+ 7671 64e9 BF010000 movl $1, %edi
+ 7671 00
+ 7672 64ee E8000000 call KDbgCondToFlag at PLT
+ 7672 00
+ 7673 64f3 4889C6 movq %rax, %rsi
+ 7674 64f6 BF100000 movl $16, %edi
+ 7674 00
+ 7675 64fb E8000000 call KDbgTestModConds at PLT
+ 7675 00
+ 7676 6500 84C0 testb %al, %al
+ 7677 6502 745E je .L35
+ 7678 6504 8B858CFE movl -372(%rbp), %eax
+ 7678 FFFF
+ 7679 650a 89C7 movl %eax, %edi
+ 7680 650c E8269BFF call bswap_32
+ 7680 FF
+ 7681 6511 4189C5 movl %eax, %r13d
+ 7682 6514 8B8588FE movl -376(%rbp), %eax
+ 7682 FFFF
+ 7683 651a 89C7 movl %eax, %edi
+ 7684 651c E8169BFF call bswap_32
+ 7684 FF
+ 7685 6521 4189C4 movl %eax, %r12d
+ 7686 6524 8B8584FE movl -380(%rbp), %eax
+ 7686 FFFF
+ 7687 652a 89C7 movl %eax, %edi
+ 7688 652c E8069BFF call bswap_32
+ 7688 FF
+ 7689 6531 89C3 movl %eax, %ebx
+ 7690 6533 8B8580FE movl -384(%rbp), %eax
+ 7690 FFFF
+ 7691 6539 89C7 movl %eax, %edi
+ 7692 653b E8F79AFF call bswap_32
+ 7692 FF
+ 7693 6540 4589E9 movl %r13d, %r9d
+ 7694 6543 4589E0 movl %r12d, %r8d
+ 7695 6546 89D9 movl %ebx, %ecx
+ 7696 6548 89C2 movl %eax, %edx
+ 7697 654a 488D3500 leaq .LC3(%rip), %rsi
+ 7697 000000
+ 7698 6551 488D3D00 leaq .LC1(%rip), %rdi
+ 7698 000000
+ 7699 6558 B8000000 movl $0, %eax
+ 7699 00
+ 7700 655d E8000000 call KDbgMsg at PLT
+ 7700 00
+ 7701 .L35:
+ 7702 .LBE2253:
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+
GAS LISTING /tmp/ccPaCTqg.s page 257
+
+
+ 7703 .loc 3 2002 0
+ 7704 6562 F30F6F85 movdqu -208(%rbp), %xmm0
+ 7704 30FFFFFF
+ 7705 .LBE2246:
+ 7706 .LBE2245:
+ 7707 .loc 3 2097 0
+ 7708 656a 660F7F85 movdqa %xmm0, -400(%rbp)
+ 7708 70FEFFFF
+2098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 7709 .loc 3 2099 0
+ 7710 6572 E9130200 jmp .L36
+ 7710 00
+ 7711 .L43:
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+ 7712 .loc 3 2100 0
+ 7713 6577 8B851CFF mov -228(%rbp), %eax
+ 7713 FFFF
+ 7714 657d 48C1E004 salq $4, %rax
+ 7715 6581 48038568 addq -408(%rbp), %rax
+ 7715 FEFFFF
+ 7716 6588 660F6F00 movdqa (%rax), %xmm0
+ 7717 658c 660F6F8D movdqa -400(%rbp), %xmm1
+ 7717 70FEFFFF
+ 7718 6594 F30F7F4D movdqu %xmm1, -112(%rbp)
+ 7718 90
+ 7719 6599 F30F7F45 movdqu %xmm0, -128(%rbp)
+ 7719 80
+ 7720 .LBB2254:
+ 7721 .LBB2255:
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 7722 .loc 3 2019 0
+ 7723 659e F30F6F45 movdqu -112(%rbp), %xmm0
+ 7723 90
+ 7724 65a3 F30F7F45 movdqu %xmm0, -80(%rbp)
+ 7724 B0
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+ 7725 .loc 3 2020 0
+ 7726 65a8 F30F6F45 movdqu -128(%rbp), %xmm0
+ 7726 80
+ 7727 65ad F30F7F45 movdqu %xmm0, -96(%rbp)
+ 7727 A0
+ 7728 .LBB2256:
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+ 7729 .loc 3 2022 0
+ 7730 65b2 F30F6F45 movdqu -80(%rbp), %xmm0
+ 7730 B0
+ 7731 65b7 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 7731 D0FEFFFF
+ 7732 65bf E8000000 call KDbgWriterGet at PLT
+ 7732 00
+ 7733 65c4 4885C0 testq %rax, %rax
+ 7734 65c7 7479 je .L38
+ 7735 65c9 BF010000 movl $1, %edi
+ 7735 00
+ 7736 65ce E8000000 call KDbgCondToFlag at PLT
+ 7736 00
+
GAS LISTING /tmp/ccPaCTqg.s page 258
+
+
+ 7737 65d3 4889C6 movq %rax, %rsi
+ 7738 65d6 BF100000 movl $16, %edi
+ 7738 00
+ 7739 65db E8000000 call KDbgTestModConds at PLT
+ 7739 00
+ 7740 65e0 84C0 testb %al, %al
+ 7741 65e2 745E je .L38
+ 7742 65e4 8B85DCFE movl -292(%rbp), %eax
+ 7742 FFFF
+ 7743 65ea 89C7 movl %eax, %edi
+ 7744 65ec E8469AFF call bswap_32
+ 7744 FF
+ 7745 65f1 4189C5 movl %eax, %r13d
+ 7746 65f4 8B85D8FE movl -296(%rbp), %eax
+ 7746 FFFF
+ 7747 65fa 89C7 movl %eax, %edi
+ 7748 65fc E8369AFF call bswap_32
+ 7748 FF
+ 7749 6601 4189C4 movl %eax, %r12d
+ 7750 6604 8B85D4FE movl -300(%rbp), %eax
+ 7750 FFFF
+ 7751 660a 89C7 movl %eax, %edi
+ 7752 660c E8269AFF call bswap_32
+ 7752 FF
+ 7753 6611 89C3 movl %eax, %ebx
+ 7754 6613 8B85D0FE movl -304(%rbp), %eax
+ 7754 FFFF
+ 7755 6619 89C7 movl %eax, %edi
+ 7756 661b E8179AFF call bswap_32
+ 7756 FF
+ 7757 6620 4589E9 movl %r13d, %r9d
+ 7758 6623 4589E0 movl %r12d, %r8d
+ 7759 6626 89D9 movl %ebx, %ecx
+ 7760 6628 89C2 movl %eax, %edx
+ 7761 662a 488D3500 leaq .LC0(%rip), %rsi
+ 7761 000000
+ 7762 6631 488D3D00 leaq .LC1(%rip), %rdi
+ 7762 000000
+ 7763 6638 B8000000 movl $0, %eax
+ 7763 00
+ 7764 663d E8000000 call KDbgMsg at PLT
+ 7764 00
+ 7765 .L38:
+ 7766 .LBE2256:
+2027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESENC (state, round_keys);
+ 7767 .loc 3 2027 0
+ 7768 6642 F30F6F4D movdqu -128(%rbp), %xmm1
+ 7768 80
+ 7769 6647 F30F6F45 movdqu -112(%rbp), %xmm0
+ 7769 90
+ 7770 664c E8AF99FF call op_AESENC
+ 7770 FF
+ 7771 6651 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 7771 90
+ 7772 .LBB2257:
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 7773 .loc 3 2044 0
+
GAS LISTING /tmp/ccPaCTqg.s page 259
+
+
+ 7774 6656 F30F6F45 movdqu -128(%rbp), %xmm0
+ 7774 80
+ 7775 665b F30F7F85 movdqu %xmm0, -320(%rbp)
+ 7775 C0FEFFFF
+ 7776 6663 E8000000 call KDbgWriterGet at PLT
+ 7776 00
+ 7777 6668 4885C0 testq %rax, %rax
+ 7778 666b 7479 je .L40
+ 7779 666d BF010000 movl $1, %edi
+ 7779 00
+ 7780 6672 E8000000 call KDbgCondToFlag at PLT
+ 7780 00
+ 7781 6677 4889C6 movq %rax, %rsi
+ 7782 667a BF100000 movl $16, %edi
+ 7782 00
+ 7783 667f E8000000 call KDbgTestModConds at PLT
+ 7783 00
+ 7784 6684 84C0 testb %al, %al
+ 7785 6686 745E je .L40
+ 7786 6688 8B85CCFE movl -308(%rbp), %eax
+ 7786 FFFF
+ 7787 668e 89C7 movl %eax, %edi
+ 7788 6690 E8A299FF call bswap_32
+ 7788 FF
+ 7789 6695 4189C5 movl %eax, %r13d
+ 7790 6698 8B85C8FE movl -312(%rbp), %eax
+ 7790 FFFF
+ 7791 669e 89C7 movl %eax, %edi
+ 7792 66a0 E89299FF call bswap_32
+ 7792 FF
+ 7793 66a5 4189C4 movl %eax, %r12d
+ 7794 66a8 8B85C4FE movl -316(%rbp), %eax
+ 7794 FFFF
+ 7795 66ae 89C7 movl %eax, %edi
+ 7796 66b0 E88299FF call bswap_32
+ 7796 FF
+ 7797 66b5 89C3 movl %eax, %ebx
+ 7798 66b7 8B85C0FE movl -320(%rbp), %eax
+ 7798 FFFF
+ 7799 66bd 89C7 movl %eax, %edi
+ 7800 66bf E87399FF call bswap_32
+ 7800 FF
+ 7801 66c4 4589E9 movl %r13d, %r9d
+ 7802 66c7 4589E0 movl %r12d, %r8d
+ 7803 66ca 89D9 movl %ebx, %ecx
+ 7804 66cc 89C2 movl %eax, %edx
+ 7805 66ce 488D3500 leaq .LC2(%rip), %rsi
+ 7805 000000
+ 7806 66d5 488D3D00 leaq .LC1(%rip), %rdi
+ 7806 000000
+ 7807 66dc B8000000 movl $0, %eax
+ 7807 00
+ 7808 66e1 E8000000 call KDbgMsg at PLT
+ 7808 00
+ 7809 .L40:
+ 7810 .LBE2257:
+ 7811 .LBB2258:
+
GAS LISTING /tmp/ccPaCTqg.s page 260
+
+
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+ 7812 .loc 3 2045 0
+ 7813 66e6 F30F6F45 movdqu -112(%rbp), %xmm0
+ 7813 90
+ 7814 66eb F30F7F85 movdqu %xmm0, -336(%rbp)
+ 7814 B0FEFFFF
+ 7815 66f3 E8000000 call KDbgWriterGet at PLT
+ 7815 00
+ 7816 66f8 4885C0 testq %rax, %rax
+ 7817 66fb 7479 je .L42
+ 7818 66fd BF010000 movl $1, %edi
+ 7818 00
+ 7819 6702 E8000000 call KDbgCondToFlag at PLT
+ 7819 00
+ 7820 6707 4889C6 movq %rax, %rsi
+ 7821 670a BF100000 movl $16, %edi
+ 7821 00
+ 7822 670f E8000000 call KDbgTestModConds at PLT
+ 7822 00
+ 7823 6714 84C0 testb %al, %al
+ 7824 6716 745E je .L42
+ 7825 6718 8B85BCFE movl -324(%rbp), %eax
+ 7825 FFFF
+ 7826 671e 89C7 movl %eax, %edi
+ 7827 6720 E81299FF call bswap_32
+ 7827 FF
+ 7828 6725 4189C5 movl %eax, %r13d
+ 7829 6728 8B85B8FE movl -328(%rbp), %eax
+ 7829 FFFF
+ 7830 672e 89C7 movl %eax, %edi
+ 7831 6730 E80299FF call bswap_32
+ 7831 FF
+ 7832 6735 4189C4 movl %eax, %r12d
+ 7833 6738 8B85B4FE movl -332(%rbp), %eax
+ 7833 FFFF
+ 7834 673e 89C7 movl %eax, %edi
+ 7835 6740 E8F298FF call bswap_32
+ 7835 FF
+ 7836 6745 89C3 movl %eax, %ebx
+ 7837 6747 8B85B0FE movl -336(%rbp), %eax
+ 7837 FFFF
+ 7838 674d 89C7 movl %eax, %edi
+ 7839 674f E8E398FF call bswap_32
+ 7839 FF
+ 7840 6754 4589E9 movl %r13d, %r9d
+ 7841 6757 4589E0 movl %r12d, %r8d
+ 7842 675a 89D9 movl %ebx, %ecx
+ 7843 675c 89C2 movl %eax, %edx
+ 7844 675e 488D3500 leaq .LC4(%rip), %rsi
+ 7844 000000
+ 7845 6765 488D3D00 leaq .LC1(%rip), %rdi
+ 7845 000000
+ 7846 676c B8000000 movl $0, %eax
+ 7846 00
+ 7847 6771 E8000000 call KDbgMsg at PLT
+ 7847 00
+ 7848 .L42:
+
GAS LISTING /tmp/ccPaCTqg.s page 261
+
+
+ 7849 .LBE2258:
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7850 .loc 3 2047 0
+ 7851 6776 F30F6F45 movdqu -112(%rbp), %xmm0
+ 7851 90
+ 7852 .LBE2255:
+ 7853 .LBE2254:
+ 7854 .loc 3 2100 0
+ 7855 677b 660F7F85 movdqa %xmm0, -400(%rbp)
+ 7855 70FEFFFF
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 7856 .loc 3 2099 0
+ 7857 6783 83851CFF addl $1, -228(%rbp)
+ 7857 FFFF01
+ 7858 .L36:
+ 7859 678a 8B851CFF movl -228(%rbp), %eax
+ 7859 FFFF
+ 7860 6790 3B8564FE cmpl -412(%rbp), %eax
+ 7860 FFFF
+ 7861 6796 0F82DBFD jb .L43
+ 7861 FFFF
+2101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(LastRound) (state, key[ix]);
+ 7862 .loc 3 2102 0
+ 7863 679c 8B851CFF mov -228(%rbp), %eax
+ 7863 FFFF
+ 7864 67a2 48C1E004 salq $4, %rax
+ 7865 67a6 48038568 addq -408(%rbp), %rax
+ 7865 FEFFFF
+ 7866 67ad 660F6F00 movdqa (%rax), %xmm0
+ 7867 67b1 660F6F8D movdqa -400(%rbp), %xmm1
+ 7867 70FEFFFF
+ 7868 67b9 F30F7F4D movdqu %xmm1, -48(%rbp)
+ 7868 D0
+ 7869 67be F30F7F45 movdqu %xmm0, -64(%rbp)
+ 7869 C0
+ 7870 .LBB2259:
+ 7871 .LBB2260:
+ 7872 .LBB2261:
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 7873 .loc 3 2058 0
+ 7874 67c3 F30F6F45 movdqu -48(%rbp), %xmm0
+ 7874 D0
+ 7875 67c8 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 7875 00FFFFFF
+ 7876 67d0 E8000000 call KDbgWriterGet at PLT
+ 7876 00
+ 7877 67d5 4885C0 testq %rax, %rax
+ 7878 67d8 7479 je .L45
+ 7879 67da BF010000 movl $1, %edi
+ 7879 00
+ 7880 67df E8000000 call KDbgCondToFlag at PLT
+ 7880 00
+ 7881 67e4 4889C6 movq %rax, %rsi
+ 7882 67e7 BF100000 movl $16, %edi
+ 7882 00
+ 7883 67ec E8000000 call KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccPaCTqg.s page 262
+
+
+ 7883 00
+ 7884 67f1 84C0 testb %al, %al
+ 7885 67f3 745E je .L45
+ 7886 67f5 8B850CFF movl -244(%rbp), %eax
+ 7886 FFFF
+ 7887 67fb 89C7 movl %eax, %edi
+ 7888 67fd E83598FF call bswap_32
+ 7888 FF
+ 7889 6802 4189C5 movl %eax, %r13d
+ 7890 6805 8B8508FF movl -248(%rbp), %eax
+ 7890 FFFF
+ 7891 680b 89C7 movl %eax, %edi
+ 7892 680d E82598FF call bswap_32
+ 7892 FF
+ 7893 6812 4189C4 movl %eax, %r12d
+ 7894 6815 8B8504FF movl -252(%rbp), %eax
+ 7894 FFFF
+ 7895 681b 89C7 movl %eax, %edi
+ 7896 681d E81598FF call bswap_32
+ 7896 FF
+ 7897 6822 89C3 movl %eax, %ebx
+ 7898 6824 8B8500FF movl -256(%rbp), %eax
+ 7898 FFFF
+ 7899 682a 89C7 movl %eax, %edi
+ 7900 682c E80698FF call bswap_32
+ 7900 FF
+ 7901 6831 4589E9 movl %r13d, %r9d
+ 7902 6834 4589E0 movl %r12d, %r8d
+ 7903 6837 89D9 movl %ebx, %ecx
+ 7904 6839 89C2 movl %eax, %edx
+ 7905 683b 488D3500 leaq .LC0(%rip), %rsi
+ 7905 000000
+ 7906 6842 488D3D00 leaq .LC1(%rip), %rdi
+ 7906 000000
+ 7907 6849 B8000000 movl $0, %eax
+ 7907 00
+ 7908 684e E8000000 call KDbgMsg at PLT
+ 7908 00
+ 7909 .L45:
+ 7910 .LBE2261:
+2061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESENCLAST (state, round_keys);
+ 7911 .loc 3 2061 0
+ 7912 6853 F30F6F4D movdqu -64(%rbp), %xmm1
+ 7912 C0
+ 7913 6858 F30F6F45 movdqu -48(%rbp), %xmm0
+ 7913 D0
+ 7914 685d E8A997FF call op_AESENCLAST
+ 7914 FF
+ 7915 6862 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 7915 D0
+ 7916 .LBB2262:
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 7917 .loc 3 2073 0
+ 7918 6867 F30F6F45 movdqu -64(%rbp), %xmm0
+ 7918 C0
+ 7919 686c F30F7F85 movdqu %xmm0, -272(%rbp)
+ 7919 F0FEFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 263
+
+
+ 7920 6874 E8000000 call KDbgWriterGet at PLT
+ 7920 00
+ 7921 6879 4885C0 testq %rax, %rax
+ 7922 687c 7479 je .L47
+ 7923 687e BF010000 movl $1, %edi
+ 7923 00
+ 7924 6883 E8000000 call KDbgCondToFlag at PLT
+ 7924 00
+ 7925 6888 4889C6 movq %rax, %rsi
+ 7926 688b BF100000 movl $16, %edi
+ 7926 00
+ 7927 6890 E8000000 call KDbgTestModConds at PLT
+ 7927 00
+ 7928 6895 84C0 testb %al, %al
+ 7929 6897 745E je .L47
+ 7930 6899 8B85FCFE movl -260(%rbp), %eax
+ 7930 FFFF
+ 7931 689f 89C7 movl %eax, %edi
+ 7932 68a1 E89197FF call bswap_32
+ 7932 FF
+ 7933 68a6 4189C5 movl %eax, %r13d
+ 7934 68a9 8B85F8FE movl -264(%rbp), %eax
+ 7934 FFFF
+ 7935 68af 89C7 movl %eax, %edi
+ 7936 68b1 E88197FF call bswap_32
+ 7936 FF
+ 7937 68b6 4189C4 movl %eax, %r12d
+ 7938 68b9 8B85F4FE movl -268(%rbp), %eax
+ 7938 FFFF
+ 7939 68bf 89C7 movl %eax, %edi
+ 7940 68c1 E87197FF call bswap_32
+ 7940 FF
+ 7941 68c6 89C3 movl %eax, %ebx
+ 7942 68c8 8B85F0FE movl -272(%rbp), %eax
+ 7942 FFFF
+ 7943 68ce 89C7 movl %eax, %edi
+ 7944 68d0 E86297FF call bswap_32
+ 7944 FF
+ 7945 68d5 4589E9 movl %r13d, %r9d
+ 7946 68d8 4589E0 movl %r12d, %r8d
+ 7947 68db 89D9 movl %ebx, %ecx
+ 7948 68dd 89C2 movl %eax, %edx
+ 7949 68df 488D3500 leaq .LC2(%rip), %rsi
+ 7949 000000
+ 7950 68e6 488D3D00 leaq .LC1(%rip), %rdi
+ 7950 000000
+ 7951 68ed B8000000 movl $0, %eax
+ 7951 00
+ 7952 68f2 E8000000 call KDbgMsg at PLT
+ 7952 00
+ 7953 .L47:
+ 7954 .LBE2262:
+ 7955 .LBB2263:
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+ 7956 .loc 3 2074 0
+ 7957 68f7 F30F6F45 movdqu -48(%rbp), %xmm0
+ 7957 D0
+
GAS LISTING /tmp/ccPaCTqg.s page 264
+
+
+ 7958 68fc F30F7F85 movdqu %xmm0, -288(%rbp)
+ 7958 E0FEFFFF
+ 7959 6904 E8000000 call KDbgWriterGet at PLT
+ 7959 00
+ 7960 6909 4885C0 testq %rax, %rax
+ 7961 690c 7479 je .L49
+ 7962 690e BF010000 movl $1, %edi
+ 7962 00
+ 7963 6913 E8000000 call KDbgCondToFlag at PLT
+ 7963 00
+ 7964 6918 4889C6 movq %rax, %rsi
+ 7965 691b BF100000 movl $16, %edi
+ 7965 00
+ 7966 6920 E8000000 call KDbgTestModConds at PLT
+ 7966 00
+ 7967 6925 84C0 testb %al, %al
+ 7968 6927 745E je .L49
+ 7969 6929 8B85ECFE movl -276(%rbp), %eax
+ 7969 FFFF
+ 7970 692f 89C7 movl %eax, %edi
+ 7971 6931 E80197FF call bswap_32
+ 7971 FF
+ 7972 6936 4189C5 movl %eax, %r13d
+ 7973 6939 8B85E8FE movl -280(%rbp), %eax
+ 7973 FFFF
+ 7974 693f 89C7 movl %eax, %edi
+ 7975 6941 E8F196FF call bswap_32
+ 7975 FF
+ 7976 6946 4189C4 movl %eax, %r12d
+ 7977 6949 8B85E4FE movl -284(%rbp), %eax
+ 7977 FFFF
+ 7978 694f 89C7 movl %eax, %edi
+ 7979 6951 E8E196FF call bswap_32
+ 7979 FF
+ 7980 6956 89C3 movl %eax, %ebx
+ 7981 6958 8B85E0FE movl -288(%rbp), %eax
+ 7981 FFFF
+ 7982 695e 89C7 movl %eax, %edi
+ 7983 6960 E8D296FF call bswap_32
+ 7983 FF
+ 7984 6965 4589E9 movl %r13d, %r9d
+ 7985 6968 4589E0 movl %r12d, %r8d
+ 7986 696b 89D9 movl %ebx, %ecx
+ 7987 696d 89C2 movl %eax, %edx
+ 7988 696f 488D3500 leaq .LC4(%rip), %rsi
+ 7988 000000
+ 7989 6976 488D3D00 leaq .LC1(%rip), %rdi
+ 7989 000000
+ 7990 697d B8000000 movl $0, %eax
+ 7990 00
+ 7991 6982 E8000000 call KDbgMsg at PLT
+ 7991 00
+ 7992 .L49:
+ 7993 .LBE2263:
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7994 .loc 3 2076 0
+ 7995 6987 F30F6F45 movdqu -48(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 265
+
+
+ 7995 D0
+ 7996 .LBE2260:
+ 7997 .LBE2259:
+2103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7998 .loc 3 2103 0
+ 7999 698c 4881C488 addq $392, %rsp
+ 7999 010000
+ 8000 6993 5B popq %rbx
+ 8001 6994 415C popq %r12
+ 8002 6996 415D popq %r13
+ 8003 6998 C9 leave
+ 8004 6999 C3 ret
+ 8005 .cfi_endproc
+ 8006 .LFE666:
+ 8007 .size KAESBlockCipherVecAesNiCipher, .-KAESBlockCipherVecAesNiCipher
+ 8008 .type KAESBlockCipherVecAesNiEqInvCipher, @function
+ 8009 KAESBlockCipherVecAesNiEqInvCipher:
+ 8010 .LFB670:
+2104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Section 5.1 of FIPS 197
+2108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This set of routines implements our structured wrapping of the
+2110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 Section 5.3.5 Equivalent Inverse Cipher. In particular
+2111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * figure 15 Pseudo Code for the Equivalent Inverse Cipher.
+2112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The FIPS pseudocode has a single function which we have broken out
+2114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * into three kinds of rounds - first round, middle rounds and last
+2115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * round as we have also done with the cipher rountine.
+2116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The EqInvCipher operates on whole cipher blocks so the Byte and Block
+2118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * code is the same here until subroutines of the round functions are
+2119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * called.
+2120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * First round of equivalent inverse cipher is merely an XOR against the
+2124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * round key.
+2125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 266
+
+
+2143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * middle rounds of the equivalent inverse cipher perform four steps
+2145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvSubBytes (inverse substitute bytes
+2146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvShiftRows (inverse shift rows
+2147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvMixColumns (inverse mix columns)
+2148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * AddRoundKey (xor against the round key)
+2149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the AES-NI instruction set from until implments all four steps with
+2151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * a single instruction
+2152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mstate;
+2165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mround_keys;
+2166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+2169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+2172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * AES-NI implmentation
+2175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESDEC (state, round_keys);
+2179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else /* #if USE_AES_NI */
+2181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * All other implementations
+2184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+2186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+2191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+2194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+2199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+
GAS LISTING /tmp/ccPaCTqg.s page 267
+
+
+2200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvMixColumns) (state);
+2202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+2207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+2216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+2218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif /* #if USE_AES_NI */
+2219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The final round of the equivalent inverse cipher is the same as
+2226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the middle rounds with the ommission of the InvMixColumns step.
+2227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESDECLAST (state, round_keys);
+2241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+2244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+2246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+2248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+2250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+
GAS LISTING /tmp/ccPaCTqg.s page 268
+
+
+2257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The EqInvCipher functions (is defined in Figure 15 'Pseudo Code for
+2262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * for the Equivalent Inverse Cipher. This implementation as stated
+2263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * above for simplifaction broke out the three types of rounds into
+2264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * first round, middle rounds, and last round. This approach was taken
+2265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * for ease of coding for optimization using smaller bytes of code
+2266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but inlining of the functions for efficiency
+2267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static /*__inline__*/
+2269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvCipher) (CipherVec state, const CipherVec * key,
+2270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned Nr)
+2271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8011 .loc 3 2271 0
+ 8012 .cfi_startproc
+ 8013 699a 55 pushq %rbp
+ 8014 .LCFI28:
+ 8015 .cfi_def_cfa_offset 16
+ 8016 699b 4889E5 movq %rsp, %rbp
+ 8017 .cfi_offset 6, -16
+ 8018 .LCFI29:
+ 8019 .cfi_def_cfa_register 6
+ 8020 699e 4155 pushq %r13
+ 8021 69a0 4154 pushq %r12
+ 8022 69a2 53 pushq %rbx
+ 8023 69a3 4881EC88 subq $392, %rsp
+ 8023 010000
+ 8024 69aa 660F7F85 movdqa %xmm0, -400(%rbp)
+ 8024 70FEFFFF
+ 8025 69b2 4889BD68 movq %rdi, -408(%rbp)
+ 8025 FEFFFF
+ 8026 69b9 89B564FE movl %esi, -412(%rbp)
+ 8026 FFFF
+2272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix = 0;
+ 8027 .loc 3 2272 0
+ 8028 69bf C7851CFF movl $0, -228(%rbp)
+ 8028 FFFF0000
+ 8028 0000
+2273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+ 8029 .loc 3 2274 0
+ 8030 69c9 8B851CFF mov -228(%rbp), %eax
+ 8030 FFFF
+ 8031 69cf 48C1E004 salq $4, %rax
+ 8032 69d3 48038568 addq -408(%rbp), %rax
+ 8032 FEFFFF
+ 8033 69da 660F6F00 movdqa (%rax), %xmm0
+ 8034 69de 83851CFF addl $1, -228(%rbp)
+ 8034 FFFF01
+ 8035 69e5 660F6F8D movdqa -400(%rbp), %xmm1
+ 8035 70FEFFFF
+ 8036 69ed F30F7F8D movdqu %xmm1, -208(%rbp)
+ 8036 30FFFFFF
+ 8037 69f5 F30F7F85 movdqu %xmm0, -224(%rbp)
+ 8037 20FFFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 269
+
+
+ 8038 .LBB2283:
+ 8039 .LBB2284:
+ 8040 .LBB2285:
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 8041 .loc 3 2133 0
+ 8042 69fd F30F6F85 movdqu -208(%rbp), %xmm0
+ 8042 30FFFFFF
+ 8043 6a05 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 8043 A0FEFFFF
+ 8044 .cfi_offset 3, -40
+ 8045 .cfi_offset 12, -32
+ 8046 .cfi_offset 13, -24
+ 8047 6a0d E8000000 call KDbgWriterGet at PLT
+ 8047 00
+ 8048 6a12 4885C0 testq %rax, %rax
+ 8049 6a15 7479 je .L53
+ 8050 6a17 BF030000 movl $3, %edi
+ 8050 00
+ 8051 6a1c E8000000 call KDbgCondToFlag at PLT
+ 8051 00
+ 8052 6a21 4889C6 movq %rax, %rsi
+ 8053 6a24 BF100000 movl $16, %edi
+ 8053 00
+ 8054 6a29 E8000000 call KDbgTestModConds at PLT
+ 8054 00
+ 8055 6a2e 84C0 testb %al, %al
+ 8056 6a30 745E je .L53
+ 8057 6a32 8B85ACFE movl -340(%rbp), %eax
+ 8057 FFFF
+ 8058 6a38 89C7 movl %eax, %edi
+ 8059 6a3a E8F895FF call bswap_32
+ 8059 FF
+ 8060 6a3f 4189C5 movl %eax, %r13d
+ 8061 6a42 8B85A8FE movl -344(%rbp), %eax
+ 8061 FFFF
+ 8062 6a48 89C7 movl %eax, %edi
+ 8063 6a4a E8E895FF call bswap_32
+ 8063 FF
+ 8064 6a4f 4189C4 movl %eax, %r12d
+ 8065 6a52 8B85A4FE movl -348(%rbp), %eax
+ 8065 FFFF
+ 8066 6a58 89C7 movl %eax, %edi
+ 8067 6a5a E8D895FF call bswap_32
+ 8067 FF
+ 8068 6a5f 89C3 movl %eax, %ebx
+ 8069 6a61 8B85A0FE movl -352(%rbp), %eax
+ 8069 FFFF
+ 8070 6a67 89C7 movl %eax, %edi
+ 8071 6a69 E8C995FF call bswap_32
+ 8071 FF
+ 8072 6a6e 4589E9 movl %r13d, %r9d
+ 8073 6a71 4589E0 movl %r12d, %r8d
+ 8074 6a74 89D9 movl %ebx, %ecx
+ 8075 6a76 89C2 movl %eax, %edx
+ 8076 6a78 488D3500 leaq .LC0(%rip), %rsi
+ 8076 000000
+ 8077 6a7f 488D3D00 leaq .LC1(%rip), %rdi
+
GAS LISTING /tmp/ccPaCTqg.s page 270
+
+
+ 8077 000000
+ 8078 6a86 B8000000 movl $0, %eax
+ 8078 00
+ 8079 6a8b E8000000 call KDbgMsg at PLT
+ 8079 00
+ 8080 .L53:
+ 8081 6a90 F30F6F85 movdqu -208(%rbp), %xmm0
+ 8081 30FFFFFF
+ 8082 6a98 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 8082 50FFFFFF
+ 8083 6aa0 F30F6F85 movdqu -224(%rbp), %xmm0
+ 8083 20FFFFFF
+ 8084 6aa8 F30F7F85 movdqu %xmm0, -192(%rbp)
+ 8084 40FFFFFF
+ 8085 6ab0 F30F6F85 movdqu -176(%rbp), %xmm0
+ 8085 50FFFFFF
+ 8086 6ab8 F30F7F85 movdqu %xmm0, -144(%rbp)
+ 8086 70FFFFFF
+ 8087 6ac0 F30F6F85 movdqu -192(%rbp), %xmm0
+ 8087 40FFFFFF
+ 8088 6ac8 F30F7F85 movdqu %xmm0, -160(%rbp)
+ 8088 60FFFFFF
+ 8089 .LBE2285:
+ 8090 .LBB2286:
+ 8091 .LBB2287:
+ 8092 .LBB2288:
+ 8093 .LBB2289:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 8094 .loc 3 178 0
+ 8095 6ad0 F30F6F85 movdqu -160(%rbp), %xmm0
+ 8095 60FFFFFF
+ 8096 6ad8 F30F6F8D movdqu -144(%rbp), %xmm1
+ 8096 70FFFFFF
+ 8097 6ae0 660FEFC1 pxor %xmm1, %xmm0
+ 8098 .LBE2289:
+ 8099 .LBE2288:
+ 8100 .LBE2287:
+ 8101 .LBE2286:
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 8102 .loc 3 2135 0
+ 8103 6ae4 F30F7F85 movdqu %xmm0, -208(%rbp)
+ 8103 30FFFFFF
+ 8104 .LBB2290:
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 8105 .loc 3 2137 0
+ 8106 6aec F30F6F85 movdqu -224(%rbp), %xmm0
+ 8106 20FFFFFF
+ 8107 6af4 F30F7F85 movdqu %xmm0, -368(%rbp)
+ 8107 90FEFFFF
+ 8108 6afc E8000000 call KDbgWriterGet at PLT
+ 8108 00
+ 8109 6b01 4885C0 testq %rax, %rax
+ 8110 6b04 7479 je .L55
+ 8111 6b06 BF030000 movl $3, %edi
+ 8111 00
+ 8112 6b0b E8000000 call KDbgCondToFlag at PLT
+ 8112 00
+
GAS LISTING /tmp/ccPaCTqg.s page 271
+
+
+ 8113 6b10 4889C6 movq %rax, %rsi
+ 8114 6b13 BF100000 movl $16, %edi
+ 8114 00
+ 8115 6b18 E8000000 call KDbgTestModConds at PLT
+ 8115 00
+ 8116 6b1d 84C0 testb %al, %al
+ 8117 6b1f 745E je .L55
+ 8118 6b21 8B859CFE movl -356(%rbp), %eax
+ 8118 FFFF
+ 8119 6b27 89C7 movl %eax, %edi
+ 8120 6b29 E80995FF call bswap_32
+ 8120 FF
+ 8121 6b2e 4189C5 movl %eax, %r13d
+ 8122 6b31 8B8598FE movl -360(%rbp), %eax
+ 8122 FFFF
+ 8123 6b37 89C7 movl %eax, %edi
+ 8124 6b39 E8F994FF call bswap_32
+ 8124 FF
+ 8125 6b3e 4189C4 movl %eax, %r12d
+ 8126 6b41 8B8594FE movl -364(%rbp), %eax
+ 8126 FFFF
+ 8127 6b47 89C7 movl %eax, %edi
+ 8128 6b49 E8E994FF call bswap_32
+ 8128 FF
+ 8129 6b4e 89C3 movl %eax, %ebx
+ 8130 6b50 8B8590FE movl -368(%rbp), %eax
+ 8130 FFFF
+ 8131 6b56 89C7 movl %eax, %edi
+ 8132 6b58 E8DA94FF call bswap_32
+ 8132 FF
+ 8133 6b5d 4589E9 movl %r13d, %r9d
+ 8134 6b60 4589E0 movl %r12d, %r8d
+ 8135 6b63 89D9 movl %ebx, %ecx
+ 8136 6b65 89C2 movl %eax, %edx
+ 8137 6b67 488D3500 leaq .LC2(%rip), %rsi
+ 8137 000000
+ 8138 6b6e 488D3D00 leaq .LC1(%rip), %rdi
+ 8138 000000
+ 8139 6b75 B8000000 movl $0, %eax
+ 8139 00
+ 8140 6b7a E8000000 call KDbgMsg at PLT
+ 8140 00
+ 8141 .L55:
+ 8142 .LBE2290:
+ 8143 .LBB2291:
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 8144 .loc 3 2138 0
+ 8145 6b7f F30F6F85 movdqu -208(%rbp), %xmm0
+ 8145 30FFFFFF
+ 8146 6b87 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 8146 80FEFFFF
+ 8147 6b8f E8000000 call KDbgWriterGet at PLT
+ 8147 00
+ 8148 6b94 4885C0 testq %rax, %rax
+ 8149 6b97 7479 je .L57
+ 8150 6b99 BF030000 movl $3, %edi
+ 8150 00
+
GAS LISTING /tmp/ccPaCTqg.s page 272
+
+
+ 8151 6b9e E8000000 call KDbgCondToFlag at PLT
+ 8151 00
+ 8152 6ba3 4889C6 movq %rax, %rsi
+ 8153 6ba6 BF100000 movl $16, %edi
+ 8153 00
+ 8154 6bab E8000000 call KDbgTestModConds at PLT
+ 8154 00
+ 8155 6bb0 84C0 testb %al, %al
+ 8156 6bb2 745E je .L57
+ 8157 6bb4 8B858CFE movl -372(%rbp), %eax
+ 8157 FFFF
+ 8158 6bba 89C7 movl %eax, %edi
+ 8159 6bbc E87694FF call bswap_32
+ 8159 FF
+ 8160 6bc1 4189C5 movl %eax, %r13d
+ 8161 6bc4 8B8588FE movl -376(%rbp), %eax
+ 8161 FFFF
+ 8162 6bca 89C7 movl %eax, %edi
+ 8163 6bcc E86694FF call bswap_32
+ 8163 FF
+ 8164 6bd1 4189C4 movl %eax, %r12d
+ 8165 6bd4 8B8584FE movl -380(%rbp), %eax
+ 8165 FFFF
+ 8166 6bda 89C7 movl %eax, %edi
+ 8167 6bdc E85694FF call bswap_32
+ 8167 FF
+ 8168 6be1 89C3 movl %eax, %ebx
+ 8169 6be3 8B8580FE movl -384(%rbp), %eax
+ 8169 FFFF
+ 8170 6be9 89C7 movl %eax, %edi
+ 8171 6beb E84794FF call bswap_32
+ 8171 FF
+ 8172 6bf0 4589E9 movl %r13d, %r9d
+ 8173 6bf3 4589E0 movl %r12d, %r8d
+ 8174 6bf6 89D9 movl %ebx, %ecx
+ 8175 6bf8 89C2 movl %eax, %edx
+ 8176 6bfa 488D3500 leaq .LC4(%rip), %rsi
+ 8176 000000
+ 8177 6c01 488D3D00 leaq .LC1(%rip), %rdi
+ 8177 000000
+ 8178 6c08 B8000000 movl $0, %eax
+ 8178 00
+ 8179 6c0d E8000000 call KDbgMsg at PLT
+ 8179 00
+ 8180 .L57:
+ 8181 .LBE2291:
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8182 .loc 3 2139 0
+ 8183 6c12 F30F6F85 movdqu -208(%rbp), %xmm0
+ 8183 30FFFFFF
+ 8184 .LBE2284:
+ 8185 .LBE2283:
+ 8186 .loc 3 2274 0
+ 8187 6c1a 660F7F85 movdqa %xmm0, -400(%rbp)
+ 8187 70FEFFFF
+2275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+
GAS LISTING /tmp/ccPaCTqg.s page 273
+
+
+ 8188 .loc 3 2276 0
+ 8189 6c22 E91D0200 jmp .L58
+ 8189 00
+ 8190 .L65:
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+ 8191 .loc 3 2277 0
+ 8192 6c27 8B851CFF mov -228(%rbp), %eax
+ 8192 FFFF
+ 8193 6c2d 48C1E004 salq $4, %rax
+ 8194 6c31 48038568 addq -408(%rbp), %rax
+ 8194 FEFFFF
+ 8195 6c38 660F6F00 movdqa (%rax), %xmm0
+ 8196 6c3c 660F6F8D movdqa -400(%rbp), %xmm1
+ 8196 70FEFFFF
+ 8197 6c44 F30F7F4D movdqu %xmm1, -112(%rbp)
+ 8197 90
+ 8198 6c49 F30F7F45 movdqu %xmm0, -128(%rbp)
+ 8198 80
+ 8199 .LBB2292:
+ 8200 .LBB2293:
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 8201 .loc 3 2167 0
+ 8202 6c4e F30F6F45 movdqu -112(%rbp), %xmm0
+ 8202 90
+ 8203 6c53 F30F7F45 movdqu %xmm0, -80(%rbp)
+ 8203 B0
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+ 8204 .loc 3 2168 0
+ 8205 6c58 F30F6F45 movdqu -128(%rbp), %xmm0
+ 8205 80
+ 8206 6c5d F30F7F45 movdqu %xmm0, -96(%rbp)
+ 8206 A0
+ 8207 .LBB2294:
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+ 8208 .loc 3 2171 0
+ 8209 6c62 F30F6F45 movdqu -80(%rbp), %xmm0
+ 8209 B0
+ 8210 6c67 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 8210 D0FEFFFF
+ 8211 6c6f E8000000 call KDbgWriterGet at PLT
+ 8211 00
+ 8212 6c74 4885C0 testq %rax, %rax
+ 8213 6c77 7479 je .L60
+ 8214 6c79 BF030000 movl $3, %edi
+ 8214 00
+ 8215 6c7e E8000000 call KDbgCondToFlag at PLT
+ 8215 00
+ 8216 6c83 4889C6 movq %rax, %rsi
+ 8217 6c86 BF100000 movl $16, %edi
+ 8217 00
+ 8218 6c8b E8000000 call KDbgTestModConds at PLT
+ 8218 00
+ 8219 6c90 84C0 testb %al, %al
+ 8220 6c92 745E je .L60
+ 8221 6c94 8B85DCFE movl -292(%rbp), %eax
+ 8221 FFFF
+ 8222 6c9a 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccPaCTqg.s page 274
+
+
+ 8223 6c9c E89693FF call bswap_32
+ 8223 FF
+ 8224 6ca1 4189C5 movl %eax, %r13d
+ 8225 6ca4 8B85D8FE movl -296(%rbp), %eax
+ 8225 FFFF
+ 8226 6caa 89C7 movl %eax, %edi
+ 8227 6cac E88693FF call bswap_32
+ 8227 FF
+ 8228 6cb1 4189C4 movl %eax, %r12d
+ 8229 6cb4 8B85D4FE movl -300(%rbp), %eax
+ 8229 FFFF
+ 8230 6cba 89C7 movl %eax, %edi
+ 8231 6cbc E87693FF call bswap_32
+ 8231 FF
+ 8232 6cc1 89C3 movl %eax, %ebx
+ 8233 6cc3 8B85D0FE movl -304(%rbp), %eax
+ 8233 FFFF
+ 8234 6cc9 89C7 movl %eax, %edi
+ 8235 6ccb E86793FF call bswap_32
+ 8235 FF
+ 8236 6cd0 4589E9 movl %r13d, %r9d
+ 8237 6cd3 4589E0 movl %r12d, %r8d
+ 8238 6cd6 89D9 movl %ebx, %ecx
+ 8239 6cd8 89C2 movl %eax, %edx
+ 8240 6cda 488D3500 leaq .LC0(%rip), %rsi
+ 8240 000000
+ 8241 6ce1 488D3D00 leaq .LC1(%rip), %rdi
+ 8241 000000
+ 8242 6ce8 B8000000 movl $0, %eax
+ 8242 00
+ 8243 6ced E8000000 call KDbgMsg at PLT
+ 8243 00
+ 8244 .L60:
+ 8245 .LBE2294:
+2178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESDEC (state, round_keys);
+ 8246 .loc 3 2178 0
+ 8247 6cf2 F30F6F4D movdqu -128(%rbp), %xmm1
+ 8247 80
+ 8248 6cf7 F30F6F45 movdqu -112(%rbp), %xmm0
+ 8248 90
+ 8249 6cfc E81593FF call op_AESDEC
+ 8249 FF
+ 8250 6d01 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 8250 90
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 8251 .loc 3 2213 0
+ 8252 6d06 F30F6F45 movdqu -112(%rbp), %xmm0
+ 8252 90
+ 8253 6d0b F30F7F45 movdqu %xmm0, -80(%rbp)
+ 8253 B0
+ 8254 .LBB2295:
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+ 8255 .loc 3 2215 0
+ 8256 6d10 F30F6F45 movdqu -96(%rbp), %xmm0
+ 8256 A0
+ 8257 6d15 F30F7F85 movdqu %xmm0, -320(%rbp)
+ 8257 C0FEFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 275
+
+
+ 8258 6d1d E8000000 call KDbgWriterGet at PLT
+ 8258 00
+ 8259 6d22 4885C0 testq %rax, %rax
+ 8260 6d25 7479 je .L62
+ 8261 6d27 BF030000 movl $3, %edi
+ 8261 00
+ 8262 6d2c E8000000 call KDbgCondToFlag at PLT
+ 8262 00
+ 8263 6d31 4889C6 movq %rax, %rsi
+ 8264 6d34 BF100000 movl $16, %edi
+ 8264 00
+ 8265 6d39 E8000000 call KDbgTestModConds at PLT
+ 8265 00
+ 8266 6d3e 84C0 testb %al, %al
+ 8267 6d40 745E je .L62
+ 8268 6d42 8B85CCFE movl -308(%rbp), %eax
+ 8268 FFFF
+ 8269 6d48 89C7 movl %eax, %edi
+ 8270 6d4a E8E892FF call bswap_32
+ 8270 FF
+ 8271 6d4f 4189C5 movl %eax, %r13d
+ 8272 6d52 8B85C8FE movl -312(%rbp), %eax
+ 8272 FFFF
+ 8273 6d58 89C7 movl %eax, %edi
+ 8274 6d5a E8D892FF call bswap_32
+ 8274 FF
+ 8275 6d5f 4189C4 movl %eax, %r12d
+ 8276 6d62 8B85C4FE movl -316(%rbp), %eax
+ 8276 FFFF
+ 8277 6d68 89C7 movl %eax, %edi
+ 8278 6d6a E8C892FF call bswap_32
+ 8278 FF
+ 8279 6d6f 89C3 movl %eax, %ebx
+ 8280 6d71 8B85C0FE movl -320(%rbp), %eax
+ 8280 FFFF
+ 8281 6d77 89C7 movl %eax, %edi
+ 8282 6d79 E8B992FF call bswap_32
+ 8282 FF
+ 8283 6d7e 4589E9 movl %r13d, %r9d
+ 8284 6d81 4589E0 movl %r12d, %r8d
+ 8285 6d84 89D9 movl %ebx, %ecx
+ 8286 6d86 89C2 movl %eax, %edx
+ 8287 6d88 488D3500 leaq .LC2(%rip), %rsi
+ 8287 000000
+ 8288 6d8f 488D3D00 leaq .LC1(%rip), %rdi
+ 8288 000000
+ 8289 6d96 B8000000 movl $0, %eax
+ 8289 00
+ 8290 6d9b E8000000 call KDbgMsg at PLT
+ 8290 00
+ 8291 .L62:
+ 8292 .LBE2295:
+ 8293 .LBB2296:
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+ 8294 .loc 3 2217 0
+ 8295 6da0 F30F6F45 movdqu -80(%rbp), %xmm0
+ 8295 B0
+
GAS LISTING /tmp/ccPaCTqg.s page 276
+
+
+ 8296 6da5 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 8296 B0FEFFFF
+ 8297 6dad E8000000 call KDbgWriterGet at PLT
+ 8297 00
+ 8298 6db2 4885C0 testq %rax, %rax
+ 8299 6db5 7479 je .L64
+ 8300 6db7 BF030000 movl $3, %edi
+ 8300 00
+ 8301 6dbc E8000000 call KDbgCondToFlag at PLT
+ 8301 00
+ 8302 6dc1 4889C6 movq %rax, %rsi
+ 8303 6dc4 BF100000 movl $16, %edi
+ 8303 00
+ 8304 6dc9 E8000000 call KDbgTestModConds at PLT
+ 8304 00
+ 8305 6dce 84C0 testb %al, %al
+ 8306 6dd0 745E je .L64
+ 8307 6dd2 8B85BCFE movl -324(%rbp), %eax
+ 8307 FFFF
+ 8308 6dd8 89C7 movl %eax, %edi
+ 8309 6dda E85892FF call bswap_32
+ 8309 FF
+ 8310 6ddf 4189C5 movl %eax, %r13d
+ 8311 6de2 8B85B8FE movl -328(%rbp), %eax
+ 8311 FFFF
+ 8312 6de8 89C7 movl %eax, %edi
+ 8313 6dea E84892FF call bswap_32
+ 8313 FF
+ 8314 6def 4189C4 movl %eax, %r12d
+ 8315 6df2 8B85B4FE movl -332(%rbp), %eax
+ 8315 FFFF
+ 8316 6df8 89C7 movl %eax, %edi
+ 8317 6dfa E83892FF call bswap_32
+ 8317 FF
+ 8318 6dff 89C3 movl %eax, %ebx
+ 8319 6e01 8B85B0FE movl -336(%rbp), %eax
+ 8319 FFFF
+ 8320 6e07 89C7 movl %eax, %edi
+ 8321 6e09 E82992FF call bswap_32
+ 8321 FF
+ 8322 6e0e 4589E9 movl %r13d, %r9d
+ 8323 6e11 4589E0 movl %r12d, %r8d
+ 8324 6e14 89D9 movl %ebx, %ecx
+ 8325 6e16 89C2 movl %eax, %edx
+ 8326 6e18 488D3500 leaq .LC4(%rip), %rsi
+ 8326 000000
+ 8327 6e1f 488D3D00 leaq .LC1(%rip), %rdi
+ 8327 000000
+ 8328 6e26 B8000000 movl $0, %eax
+ 8328 00
+ 8329 6e2b E8000000 call KDbgMsg at PLT
+ 8329 00
+ 8330 .L64:
+ 8331 .LBE2296:
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8332 .loc 3 2220 0
+ 8333 6e30 F30F6F45 movdqu -112(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s page 277
+
+
+ 8333 90
+ 8334 .LBE2293:
+ 8335 .LBE2292:
+ 8336 .loc 3 2277 0
+ 8337 6e35 660F7F85 movdqa %xmm0, -400(%rbp)
+ 8337 70FEFFFF
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 8338 .loc 3 2276 0
+ 8339 6e3d 83851CFF addl $1, -228(%rbp)
+ 8339 FFFF01
+ 8340 .L58:
+ 8341 6e44 8B851CFF movl -228(%rbp), %eax
+ 8341 FFFF
+ 8342 6e4a 3B8564FE cmpl -412(%rbp), %eax
+ 8342 FFFF
+ 8343 6e50 0F82D1FD jb .L65
+ 8343 FFFF
+2278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+ 8344 .loc 3 2279 0
+ 8345 6e56 8B851CFF mov -228(%rbp), %eax
+ 8345 FFFF
+ 8346 6e5c 48C1E004 salq $4, %rax
+ 8347 6e60 48038568 addq -408(%rbp), %rax
+ 8347 FEFFFF
+ 8348 6e67 660F6F00 movdqa (%rax), %xmm0
+ 8349 6e6b 660F6F8D movdqa -400(%rbp), %xmm1
+ 8349 70FEFFFF
+ 8350 6e73 F30F7F4D movdqu %xmm1, -48(%rbp)
+ 8350 D0
+ 8351 6e78 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 8351 C0
+ 8352 .LBB2297:
+ 8353 .LBB2298:
+ 8354 .LBB2299:
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 8355 .loc 3 2237 0
+ 8356 6e7d F30F6F45 movdqu -48(%rbp), %xmm0
+ 8356 D0
+ 8357 6e82 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 8357 00FFFFFF
+ 8358 6e8a E8000000 call KDbgWriterGet at PLT
+ 8358 00
+ 8359 6e8f 4885C0 testq %rax, %rax
+ 8360 6e92 7479 je .L67
+ 8361 6e94 BF030000 movl $3, %edi
+ 8361 00
+ 8362 6e99 E8000000 call KDbgCondToFlag at PLT
+ 8362 00
+ 8363 6e9e 4889C6 movq %rax, %rsi
+ 8364 6ea1 BF100000 movl $16, %edi
+ 8364 00
+ 8365 6ea6 E8000000 call KDbgTestModConds at PLT
+ 8365 00
+ 8366 6eab 84C0 testb %al, %al
+ 8367 6ead 745E je .L67
+ 8368 6eaf 8B850CFF movl -244(%rbp), %eax
+
GAS LISTING /tmp/ccPaCTqg.s page 278
+
+
+ 8368 FFFF
+ 8369 6eb5 89C7 movl %eax, %edi
+ 8370 6eb7 E87B91FF call bswap_32
+ 8370 FF
+ 8371 6ebc 4189C5 movl %eax, %r13d
+ 8372 6ebf 8B8508FF movl -248(%rbp), %eax
+ 8372 FFFF
+ 8373 6ec5 89C7 movl %eax, %edi
+ 8374 6ec7 E86B91FF call bswap_32
+ 8374 FF
+ 8375 6ecc 4189C4 movl %eax, %r12d
+ 8376 6ecf 8B8504FF movl -252(%rbp), %eax
+ 8376 FFFF
+ 8377 6ed5 89C7 movl %eax, %edi
+ 8378 6ed7 E85B91FF call bswap_32
+ 8378 FF
+ 8379 6edc 89C3 movl %eax, %ebx
+ 8380 6ede 8B8500FF movl -256(%rbp), %eax
+ 8380 FFFF
+ 8381 6ee4 89C7 movl %eax, %edi
+ 8382 6ee6 E84C91FF call bswap_32
+ 8382 FF
+ 8383 6eeb 4589E9 movl %r13d, %r9d
+ 8384 6eee 4589E0 movl %r12d, %r8d
+ 8385 6ef1 89D9 movl %ebx, %ecx
+ 8386 6ef3 89C2 movl %eax, %edx
+ 8387 6ef5 488D3500 leaq .LC0(%rip), %rsi
+ 8387 000000
+ 8388 6efc 488D3D00 leaq .LC1(%rip), %rdi
+ 8388 000000
+ 8389 6f03 B8000000 movl $0, %eax
+ 8389 00
+ 8390 6f08 E8000000 call KDbgMsg at PLT
+ 8390 00
+ 8391 .L67:
+ 8392 .LBE2299:
+2240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESDECLAST (state, round_keys);
+ 8393 .loc 3 2240 0
+ 8394 6f0d F30F6F4D movdqu -64(%rbp), %xmm1
+ 8394 C0
+ 8395 6f12 F30F6F45 movdqu -48(%rbp), %xmm0
+ 8395 D0
+ 8396 6f17 E80591FF call op_AESDECLAST
+ 8396 FF
+ 8397 6f1c F30F7F45 movdqu %xmm0, -48(%rbp)
+ 8397 D0
+ 8398 .LBB2300:
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 8399 .loc 3 2253 0
+ 8400 6f21 F30F6F45 movdqu -64(%rbp), %xmm0
+ 8400 C0
+ 8401 6f26 F30F7F85 movdqu %xmm0, -272(%rbp)
+ 8401 F0FEFFFF
+ 8402 6f2e E8000000 call KDbgWriterGet at PLT
+ 8402 00
+ 8403 6f33 4885C0 testq %rax, %rax
+ 8404 6f36 7479 je .L69
+
GAS LISTING /tmp/ccPaCTqg.s page 279
+
+
+ 8405 6f38 BF030000 movl $3, %edi
+ 8405 00
+ 8406 6f3d E8000000 call KDbgCondToFlag at PLT
+ 8406 00
+ 8407 6f42 4889C6 movq %rax, %rsi
+ 8408 6f45 BF100000 movl $16, %edi
+ 8408 00
+ 8409 6f4a E8000000 call KDbgTestModConds at PLT
+ 8409 00
+ 8410 6f4f 84C0 testb %al, %al
+ 8411 6f51 745E je .L69
+ 8412 6f53 8B85FCFE movl -260(%rbp), %eax
+ 8412 FFFF
+ 8413 6f59 89C7 movl %eax, %edi
+ 8414 6f5b E8D790FF call bswap_32
+ 8414 FF
+ 8415 6f60 4189C5 movl %eax, %r13d
+ 8416 6f63 8B85F8FE movl -264(%rbp), %eax
+ 8416 FFFF
+ 8417 6f69 89C7 movl %eax, %edi
+ 8418 6f6b E8C790FF call bswap_32
+ 8418 FF
+ 8419 6f70 4189C4 movl %eax, %r12d
+ 8420 6f73 8B85F4FE movl -268(%rbp), %eax
+ 8420 FFFF
+ 8421 6f79 89C7 movl %eax, %edi
+ 8422 6f7b E8B790FF call bswap_32
+ 8422 FF
+ 8423 6f80 89C3 movl %eax, %ebx
+ 8424 6f82 8B85F0FE movl -272(%rbp), %eax
+ 8424 FFFF
+ 8425 6f88 89C7 movl %eax, %edi
+ 8426 6f8a E8A890FF call bswap_32
+ 8426 FF
+ 8427 6f8f 4589E9 movl %r13d, %r9d
+ 8428 6f92 4589E0 movl %r12d, %r8d
+ 8429 6f95 89D9 movl %ebx, %ecx
+ 8430 6f97 89C2 movl %eax, %edx
+ 8431 6f99 488D3500 leaq .LC2(%rip), %rsi
+ 8431 000000
+ 8432 6fa0 488D3D00 leaq .LC1(%rip), %rdi
+ 8432 000000
+ 8433 6fa7 B8000000 movl $0, %eax
+ 8433 00
+ 8434 6fac E8000000 call KDbgMsg at PLT
+ 8434 00
+ 8435 .L69:
+ 8436 .LBE2300:
+ 8437 .LBB2301:
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 8438 .loc 3 2254 0
+ 8439 6fb1 F30F6F45 movdqu -48(%rbp), %xmm0
+ 8439 D0
+ 8440 6fb6 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 8440 E0FEFFFF
+ 8441 6fbe E8000000 call KDbgWriterGet at PLT
+ 8441 00
+
GAS LISTING /tmp/ccPaCTqg.s page 280
+
+
+ 8442 6fc3 4885C0 testq %rax, %rax
+ 8443 6fc6 7479 je .L71
+ 8444 6fc8 BF030000 movl $3, %edi
+ 8444 00
+ 8445 6fcd E8000000 call KDbgCondToFlag at PLT
+ 8445 00
+ 8446 6fd2 4889C6 movq %rax, %rsi
+ 8447 6fd5 BF100000 movl $16, %edi
+ 8447 00
+ 8448 6fda E8000000 call KDbgTestModConds at PLT
+ 8448 00
+ 8449 6fdf 84C0 testb %al, %al
+ 8450 6fe1 745E je .L71
+ 8451 6fe3 8B85ECFE movl -276(%rbp), %eax
+ 8451 FFFF
+ 8452 6fe9 89C7 movl %eax, %edi
+ 8453 6feb E84790FF call bswap_32
+ 8453 FF
+ 8454 6ff0 4189C5 movl %eax, %r13d
+ 8455 6ff3 8B85E8FE movl -280(%rbp), %eax
+ 8455 FFFF
+ 8456 6ff9 89C7 movl %eax, %edi
+ 8457 6ffb E83790FF call bswap_32
+ 8457 FF
+ 8458 7000 4189C4 movl %eax, %r12d
+ 8459 7003 8B85E4FE movl -284(%rbp), %eax
+ 8459 FFFF
+ 8460 7009 89C7 movl %eax, %edi
+ 8461 700b E82790FF call bswap_32
+ 8461 FF
+ 8462 7010 89C3 movl %eax, %ebx
+ 8463 7012 8B85E0FE movl -288(%rbp), %eax
+ 8463 FFFF
+ 8464 7018 89C7 movl %eax, %edi
+ 8465 701a E81890FF call bswap_32
+ 8465 FF
+ 8466 701f 4589E9 movl %r13d, %r9d
+ 8467 7022 4589E0 movl %r12d, %r8d
+ 8468 7025 89D9 movl %ebx, %ecx
+ 8469 7027 89C2 movl %eax, %edx
+ 8470 7029 488D3500 leaq .LC4(%rip), %rsi
+ 8470 000000
+ 8471 7030 488D3D00 leaq .LC1(%rip), %rdi
+ 8471 000000
+ 8472 7037 B8000000 movl $0, %eax
+ 8472 00
+ 8473 703c E8000000 call KDbgMsg at PLT
+ 8473 00
+ 8474 .L71:
+ 8475 .LBE2301:
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8476 .loc 3 2256 0
+ 8477 7041 F30F6F45 movdqu -48(%rbp), %xmm0
+ 8477 D0
+ 8478 .LBE2298:
+ 8479 .LBE2297:
+2280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccPaCTqg.s page 281
+
+
+ 8480 .loc 3 2280 0
+ 8481 7046 4881C488 addq $392, %rsp
+ 8481 010000
+ 8482 704d 5B popq %rbx
+ 8483 704e 415C popq %r12
+ 8484 7050 415D popq %r13
+ 8485 7052 C9 leave
+ 8486 7053 C3 ret
+ 8487 .cfi_endproc
+ 8488 .LFE670:
+ 8489 .size KAESBlockCipherVecAesNiEqInvCipher, .-KAESBlockCipherVecAesNiEqInvCipher
+ 8490 .section .rodata
+ 8491 .type KAESBlockCipherVecAesNiaes_ncbi_name, @object
+ 8492 .size KAESBlockCipherVecAesNiaes_ncbi_name, 10
+ 8493 KAESBlockCipherVecAesNiaes_ncbi_name:
+ 8494 03d9 4145535F .string "AES_CLASS"
+ 8494 434C4153
+ 8494 5300
+ 8495 .text
+ 8496 .type KAESBlockCipherVecAesNiDestroy, @function
+ 8497 KAESBlockCipherVecAesNiDestroy:
+ 8498 .LFB671:
+2281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+2284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This section of the file is the use of the cipher defined above within
+2285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * our BlockCipherObject.
+2286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * These are the functions that will be directly referenced in the vector
+2288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * table for the block cipher. These are not specifically derived from
+2289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the FIPS-197 document.
+2290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-impl.h"
+2292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** typedef struct AES_CLASS AES_CLASS;
+2294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const char AESBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+2296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Destroy
+2300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+2301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * to create this key (key schedule)
+2302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+2304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+2305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(Destroy) (const BLOCKCIPHER_VEC_IMPL * self)
+2308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8499 .loc 3 2308 0
+ 8500 .cfi_startproc
+ 8501 7054 55 pushq %rbp
+ 8502 .LCFI30:
+ 8503 .cfi_def_cfa_offset 16
+ 8504 7055 4889E5 movq %rsp, %rbp
+ 8505 .cfi_offset 6, -16
+
GAS LISTING /tmp/ccPaCTqg.s page 282
+
+
+ 8506 .LCFI31:
+ 8507 .cfi_def_cfa_register 6
+ 8508 7058 48897DF8 movq %rdi, -8(%rbp)
+2309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* we use a constant object so do nothing */
+2310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8509 .loc 3 2310 0
+ 8510 705c C9 leave
+ 8511 705d C3 ret
+ 8512 .cfi_endproc
+ 8513 .LFE671:
+ 8514 .size KAESBlockCipherVecAesNiDestroy, .-KAESBlockCipherVecAesNiDestroy
+ 8515 .type KAESBlockCipherVecAesNiBlockSize, @function
+ 8516 KAESBlockCipherVecAesNiBlockSize:
+ 8517 .LFB672:
+2311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * BlockSize
+2315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(BlockSize) ()
+2318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8518 .loc 3 2318 0
+ 8519 .cfi_startproc
+ 8520 705e 55 pushq %rbp
+ 8521 .LCFI32:
+ 8522 .cfi_def_cfa_offset 16
+ 8523 705f 4889E5 movq %rsp, %rbp
+ 8524 .cfi_offset 6, -16
+ 8525 .LCFI33:
+ 8526 .cfi_def_cfa_register 6
+2319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (uint32_t) sizeof (AESBlock);
+ 8527 .loc 3 2319 0
+ 8528 7062 B8100000 movl $16, %eax
+ 8528 00
+2320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8529 .loc 3 2320 0
+ 8530 7067 C9 leave
+ 8531 7068 C3 ret
+ 8532 .cfi_endproc
+ 8533 .LFE672:
+ 8534 .size KAESBlockCipherVecAesNiBlockSize, .-KAESBlockCipherVecAesNiBlockSize
+ 8535 .type KAESBlockCipherVecAesNiKeySize, @function
+ 8536 KAESBlockCipherVecAesNiKeySize:
+ 8537 .LFB673:
+2321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * KeySize
+2325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+2326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * to create this key (key schedule)
+2327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+2329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+2330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(KeySize) ()
+
GAS LISTING /tmp/ccPaCTqg.s page 283
+
+
+2333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8538 .loc 3 2333 0
+ 8539 .cfi_startproc
+ 8540 7069 55 pushq %rbp
+ 8541 .LCFI34:
+ 8542 .cfi_def_cfa_offset 16
+ 8543 706a 4889E5 movq %rsp, %rbp
+ 8544 .cfi_offset 6, -16
+ 8545 .LCFI35:
+ 8546 .cfi_def_cfa_register 6
+2334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (uint32_t) sizeof (AESKeySchedule);
+ 8547 .loc 3 2334 0
+ 8548 706d B8000100 movl $256, %eax
+ 8548 00
+2335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8549 .loc 3 2335 0
+ 8550 7072 C9 leave
+ 8551 7073 C3 ret
+ 8552 .cfi_endproc
+ 8553 .LFE673:
+ 8554 .size KAESBlockCipherVecAesNiKeySize, .-KAESBlockCipherVecAesNiKeySize
+ 8555 .section .rodata
+ 8556 03e3 00000000 .align 8
+ 8556 00
+ 8557 .LC5:
+ 8558 03e8 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 8558 652F726F
+ 8558 6461726D
+ 8558 65722F73
+ 8558 72615F73
+ 8559 .text
+ 8560 .type KAESBlockCipherVecAesNiSetEncryptKey, @function
+ 8561 KAESBlockCipherVecAesNiSetEncryptKey:
+ 8562 .LFB674:
+2336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SetEncryptKey
+2340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The KCipher calls this to have the block cipher build an encryption
+2341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * key in the KCipher object
+2342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+2346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t user_key_size)
+2347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8563 .loc 3 2347 0
+ 8564 .cfi_startproc
+ 8565 7074 55 pushq %rbp
+ 8566 .LCFI36:
+ 8567 .cfi_def_cfa_offset 16
+ 8568 7075 4889E5 movq %rsp, %rbp
+ 8569 .cfi_offset 6, -16
+ 8570 .LCFI37:
+ 8571 .cfi_def_cfa_register 6
+ 8572 7078 4883EC30 subq $48, %rsp
+ 8573 707c 48897DE8 movq %rdi, -24(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s page 284
+
+
+ 8574 7080 488975E0 movq %rsi, -32(%rbp)
+ 8575 7084 8955DC movl %edx, -36(%rbp)
+2348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t rc;
+2349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESKeySchedule * key;
+2350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = 0;
+ 8576 .loc 3 2351 0
+ 8577 7087 C745F400 movl $0, -12(%rbp)
+ 8577 000000
+2352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key = encrypt_key;
+ 8578 .loc 3 2352 0
+ 8579 708e 488B45E8 movq -24(%rbp), %rax
+ 8580 7092 488945F8 movq %rax, -8(%rbp)
+2353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (user_key_size)
+ 8581 .loc 3 2354 0
+ 8582 7096 8B45DC movl -36(%rbp), %eax
+ 8583 7099 83F818 cmpl $24, %eax
+ 8584 709c 7430 je .L82
+ 8585 709e 83F820 cmpl $32, %eax
+ 8586 70a1 744E je .L83
+ 8587 70a3 83F810 cmpl $16, %eax
+ 8588 70a6 756C jne .L86
+ 8589 .L81:
+2355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nk_128 * sizeof (AESWord):
+2357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_128;
+ 8590 .loc 3 2357 0
+ 8591 70a8 488B45F8 movq -8(%rbp), %rax
+ 8592 70ac C780F000 movl $10, 240(%rax)
+ 8592 00000A00
+ 8592 0000
+2358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+ 8593 .loc 3 2358 0
+ 8594 70b6 488B55E0 movq -32(%rbp), %rdx
+ 8595 70ba 488B45F8 movq -8(%rbp), %rax
+ 8596 70be 4889D6 movq %rdx, %rsi
+ 8597 70c1 4889C7 movq %rax, %rdi
+ 8598 70c4 E8828FFF call KAESBlockCipherVecAesNiKeyExpansion128
+ 8598 FF
+2359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8599 .loc 3 2359 0
+ 8600 70c9 E98A0000 jmp .L84
+ 8600 00
+ 8601 .L82:
+2360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nk_192 * sizeof (AESWord):
+2362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_192;
+ 8602 .loc 3 2362 0
+ 8603 70ce 488B45F8 movq -8(%rbp), %rax
+ 8604 70d2 C780F000 movl $12, 240(%rax)
+ 8604 00000C00
+ 8604 0000
+2363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+ 8605 .loc 3 2363 0
+ 8606 70dc 488B55E0 movq -32(%rbp), %rdx
+ 8607 70e0 488B45F8 movq -8(%rbp), %rax
+
GAS LISTING /tmp/ccPaCTqg.s page 285
+
+
+ 8608 70e4 4889D6 movq %rdx, %rsi
+ 8609 70e7 4889C7 movq %rax, %rdi
+ 8610 70ea E8D4A7FF call KAESBlockCipherVecAesNiKeyExpansion192
+ 8610 FF
+2364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8611 .loc 3 2364 0
+ 8612 70ef EB67 jmp .L84
+ 8613 .L83:
+2365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nk_256 * sizeof (AESWord):
+2367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_256;
+ 8614 .loc 3 2367 0
+ 8615 70f1 488B45F8 movq -8(%rbp), %rax
+ 8616 70f5 C780F000 movl $14, 240(%rax)
+ 8616 00000E00
+ 8616 0000
+2368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+ 8617 .loc 3 2368 0
+ 8618 70ff 488B55E0 movq -32(%rbp), %rdx
+ 8619 7103 488B45F8 movq -8(%rbp), %rax
+ 8620 7107 4889D6 movq %rdx, %rsi
+ 8621 710a 4889C7 movq %rax, %rdi
+ 8622 710d E8EECEFF call KAESBlockCipherVecAesNiKeyExpansion256
+ 8622 FF
+2369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8623 .loc 3 2369 0
+ 8624 7112 EB44 jmp .L84
+ 8625 .L86:
+2370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** default:
+2372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = 0;
+ 8626 .loc 3 2372 0
+ 8627 7114 488B45F8 movq -8(%rbp), %rax
+ 8628 7118 C780F000 movl $0, 240(%rax)
+ 8628 00000000
+ 8628 0000
+2373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memset (key, 0, sizeof (*key));
+ 8629 .loc 3 2373 0
+ 8630 7122 488B45F8 movq -8(%rbp), %rax
+ 8631 7126 BA000100 movl $256, %edx
+ 8631 00
+ 8632 712b BE000000 movl $0, %esi
+ 8632 00
+ 8633 7130 4889C7 movq %rax, %rdi
+ 8634 7133 E8000000 call memset at PLT
+ 8634 00
+2374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+ 8635 .loc 3 2374 0
+ 8636 7138 B9460900 movl $2374, %ecx
+ 8636 00
+ 8637 713d 488D1500 leaq __func__.8794(%rip), %rdx
+ 8637 000000
+ 8638 7144 488D3500 leaq .LC5(%rip), %rsi
+ 8638 000000
+ 8639 714b BFCA8F04 movl $-2029744182, %edi
+ 8639 87
+ 8640 7150 E8000000 call SetRCFileFuncLine at PLT
+
GAS LISTING /tmp/ccPaCTqg.s page 286
+
+
+ 8640 00
+ 8641 7155 8945F4 movl %eax, -12(%rbp)
+ 8642 .L84:
+2375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+ 8643 .loc 3 2377 0
+ 8644 7158 8B45F4 movl -12(%rbp), %eax
+2378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8645 .loc 3 2378 0
+ 8646 715b C9 leave
+ 8647 715c C3 ret
+ 8648 .cfi_endproc
+ 8649 .LFE674:
+ 8650 .size KAESBlockCipherVecAesNiSetEncryptKey, .-KAESBlockCipherVecAesNiSetEncryptKey
+ 8651 .type KAESBlockCipherVecAesNiSetDecryptKey, @function
+ 8652 KAESBlockCipherVecAesNiSetDecryptKey:
+ 8653 .LFB675:
+2379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SetDecryptKey
+2383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The KCipher calls this to have the block cipher build an decryption
+2384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * key in the KCipher object
+2385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetDecryptKey) (void * decrypt_key,
+2389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const char * user_key,
+2390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t user_key_size)
+2391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8654 .loc 3 2391 0
+ 8655 .cfi_startproc
+ 8656 715d 55 pushq %rbp
+ 8657 .LCFI38:
+ 8658 .cfi_def_cfa_offset 16
+ 8659 715e 4889E5 movq %rsp, %rbp
+ 8660 .cfi_offset 6, -16
+ 8661 .LCFI39:
+ 8662 .cfi_def_cfa_register 6
+ 8663 7161 4881EC30 subq $304, %rsp
+ 8663 010000
+ 8664 7168 4889BDE8 movq %rdi, -280(%rbp)
+ 8664 FEFFFF
+ 8665 716f 4889B5E0 movq %rsi, -288(%rbp)
+ 8665 FEFFFF
+ 8666 7176 8995DCFE movl %edx, -292(%rbp)
+ 8666 FFFF
+2392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESKeySchedule encrypt_key;
+2393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t rc;
+2394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+ 8667 .loc 3 2395 0
+ 8668 717c 8B95DCFE movl -292(%rbp), %edx
+ 8668 FFFF
+ 8669 7182 488B8DE0 movq -288(%rbp), %rcx
+ 8669 FEFFFF
+
GAS LISTING /tmp/ccPaCTqg.s page 287
+
+
+ 8670 7189 488D85F0 leaq -272(%rbp), %rax
+ 8670 FEFFFF
+ 8671 7190 4889CE movq %rcx, %rsi
+ 8672 7193 4889C7 movq %rax, %rdi
+ 8673 7196 E8D9FEFF call KAESBlockCipherVecAesNiSetEncryptKey
+ 8673 FF
+ 8674 719b 8945F4 movl %eax, -12(%rbp)
+2396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (rc == 0)
+ 8675 .loc 3 2396 0
+ 8676 719e 837DF400 cmpl $0, -12(%rbp)
+ 8677 71a2 7577 jne .L88
+ 8678 .LBB2302:
+2397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESKeySchedule * key;
+2399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key = decrypt_key;
+ 8679 .loc 3 2400 0
+ 8680 71a4 488B85E8 movq -280(%rbp), %rax
+ 8680 FEFFFF
+ 8681 71ab 488945F8 movq %rax, -8(%rbp)
+2401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+ 8682 .loc 3 2402 0
+ 8683 71af 8B55E0 movl -32(%rbp), %edx
+ 8684 71b2 488B45F8 movq -8(%rbp), %rax
+ 8685 71b6 8990F000 movl %edx, 240(%rax)
+ 8685 0000
+ 8686 71bc 488B45F8 movq -8(%rbp), %rax
+ 8687 71c0 8B80F000 movl 240(%rax), %eax
+ 8687 0000
+ 8688 71c6 83F80C cmpl $12, %eax
+ 8689 71c9 7422 je .L90
+ 8690 71cb 83F80E cmpl $14, %eax
+ 8691 71ce 7435 je .L91
+ 8692 71d0 83F80A cmpl $10, %eax
+ 8693 71d3 7546 jne .L88
+ 8694 .L89:
+2403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_128:
+2405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+ 8695 .loc 3 2405 0
+ 8696 71d5 488B45F8 movq -8(%rbp), %rax
+ 8697 71d9 488D95F0 leaq -272(%rbp), %rdx
+ 8697 FEFFFF
+ 8698 71e0 4889D6 movq %rdx, %rsi
+ 8699 71e3 4889C7 movq %rax, %rdi
+ 8700 71e6 E881F0FF call KAESBlockCipherVecAesNiEqInvKeyExpansion128
+ 8700 FF
+2406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** encrypt_key.round_keys);
+2407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8701 .loc 3 2407 0
+ 8702 71eb EB2E jmp .L88
+ 8703 .L90:
+2408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_192:
+2410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+ 8704 .loc 3 2410 0
+
GAS LISTING /tmp/ccPaCTqg.s page 288
+
+
+ 8705 71ed 488B45F8 movq -8(%rbp), %rax
+ 8706 71f1 488D95F0 leaq -272(%rbp), %rdx
+ 8706 FEFFFF
+ 8707 71f8 4889D6 movq %rdx, %rsi
+ 8708 71fb 4889C7 movq %rax, %rdi
+ 8709 71fe E893F0FF call KAESBlockCipherVecAesNiEqInvKeyExpansion192
+ 8709 FF
+2411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** encrypt_key.round_keys);
+2412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8710 .loc 3 2412 0
+ 8711 7203 EB16 jmp .L88
+ 8712 .L91:
+2413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_256:
+2415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+ 8713 .loc 3 2415 0
+ 8714 7205 488B45F8 movq -8(%rbp), %rax
+ 8715 7209 488D95F0 leaq -272(%rbp), %rdx
+ 8715 FEFFFF
+ 8716 7210 4889D6 movq %rdx, %rsi
+ 8717 7213 4889C7 movq %rax, %rdi
+ 8718 7216 E8A5F0FF call KAESBlockCipherVecAesNiEqInvKeyExpansion256
+ 8718 FF
+ 8719 .L88:
+ 8720 .LBE2302:
+2416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** encrypt_key.round_keys);
+2417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+ 8721 .loc 3 2420 0
+ 8722 721b 8B45F4 movl -12(%rbp), %eax
+2421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8723 .loc 3 2421 0
+ 8724 721e C9 leave
+ 8725 721f C3 ret
+ 8726 .cfi_endproc
+ 8727 .LFE675:
+ 8728 .size KAESBlockCipherVecAesNiSetDecryptKey, .-KAESBlockCipherVecAesNiSetDecryptKey
+ 8729 .section .rodata
+ 8730 .LC6:
+ 8731 041e 6B657900 .string "key"
+ 8732 .text
+ 8733 .type KAESBlockCipherVecAesNiEncrypt, @function
+ 8734 KAESBlockCipherVecAesNiEncrypt:
+ 8735 .LFB676:
+2422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Encrypt
+2426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Perform an encryption of a single block. Chained modes and stream
+2428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * cipher modes will call this multiple times.
+2429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Encrypt) (CipherVec state,
+
GAS LISTING /tmp/ccPaCTqg.s page 289
+
+
+2433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const void * encrypt_key)
+2434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8736 .loc 3 2434 0
+ 8737 .cfi_startproc
+ 8738 7220 55 pushq %rbp
+ 8739 .LCFI40:
+ 8740 .cfi_def_cfa_offset 16
+ 8741 7221 4889E5 movq %rsp, %rbp
+ 8742 .cfi_offset 6, -16
+ 8743 .LCFI41:
+ 8744 .cfi_def_cfa_register 6
+ 8745 7224 4883EC30 subq $48, %rsp
+ 8746 7228 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8746 E0
+ 8747 722d 48897DD8 movq %rdi, -40(%rbp)
+2435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESKeySchedule * key = encrypt_key;
+ 8748 .loc 3 2435 0
+ 8749 7231 488B45D8 movq -40(%rbp), %rax
+ 8750 7235 488945F8 movq %rax, -8(%rbp)
+2436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (key);
+ 8751 .loc 3 2436 0
+ 8752 7239 48837DF8 cmpq $0, -8(%rbp)
+ 8752 00
+ 8753 723e 751F jne .L94
+ 8754 7240 488D0D00 leaq __PRETTY_FUNCTION__.8830(%rip), %rcx
+ 8754 000000
+ 8755 7247 BA840900 movl $2436, %edx
+ 8755 00
+ 8756 724c 488D3500 leaq .LC5(%rip), %rsi
+ 8756 000000
+ 8757 7253 488D3D00 leaq .LC6(%rip), %rdi
+ 8757 000000
+ 8758 725a E8000000 call __assert_fail at PLT
+ 8758 00
+ 8759 .L94:
+2437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds)
+ 8760 .loc 3 2438 0
+ 8761 725f 488B45F8 movq -8(%rbp), %rax
+ 8762 7263 8B80F000 movl 240(%rax), %eax
+ 8762 0000
+ 8763 7269 83F80C cmpl $12, %eax
+ 8764 726c 7436 je .L97
+ 8765 726e 83F80E cmpl $14, %eax
+ 8766 7271 744E je .L98
+ 8767 7273 83F80A cmpl $10, %eax
+ 8768 7276 740F je .L96
+2439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** default:
+2441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = vec_00;
+ 8769 .loc 3 2441 0
+ 8770 7278 660F6F05 movdqa vec_00(%rip), %xmm0
+ 8770 00000000
+ 8771 7280 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8771 E0
+2442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8772 .loc 3 2442 0
+
GAS LISTING /tmp/ccPaCTqg.s page 290
+
+
+ 8773 7285 EB55 jmp .L99
+ 8774 .L96:
+2443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_128:
+2445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+ 8775 .loc 3 2445 0
+ 8776 7287 488B45F8 movq -8(%rbp), %rax
+ 8777 728b 660F6F45 movdqa -32(%rbp), %xmm0
+ 8777 E0
+ 8778 7290 BE0A0000 movl $10, %esi
+ 8778 00
+ 8779 7295 4889C7 movq %rax, %rdi
+ 8780 7298 E84DF0FF call KAESBlockCipherVecAesNiCipher
+ 8780 FF
+ 8781 729d 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8781 E0
+2446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8782 .loc 3 2446 0
+ 8783 72a2 EB38 jmp .L99
+ 8784 .L97:
+2447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_192:
+2449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+ 8785 .loc 3 2449 0
+ 8786 72a4 488B45F8 movq -8(%rbp), %rax
+ 8787 72a8 660F6F45 movdqa -32(%rbp), %xmm0
+ 8787 E0
+ 8788 72ad BE0C0000 movl $12, %esi
+ 8788 00
+ 8789 72b2 4889C7 movq %rax, %rdi
+ 8790 72b5 E830F0FF call KAESBlockCipherVecAesNiCipher
+ 8790 FF
+ 8791 72ba 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8791 E0
+2450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8792 .loc 3 2450 0
+ 8793 72bf EB1B jmp .L99
+ 8794 .L98:
+2451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_256:
+2453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+ 8795 .loc 3 2453 0
+ 8796 72c1 488B45F8 movq -8(%rbp), %rax
+ 8797 72c5 660F6F45 movdqa -32(%rbp), %xmm0
+ 8797 E0
+ 8798 72ca BE0E0000 movl $14, %esi
+ 8798 00
+ 8799 72cf 4889C7 movq %rax, %rdi
+ 8800 72d2 E813F0FF call KAESBlockCipherVecAesNiCipher
+ 8800 FF
+ 8801 72d7 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8801 E0
+ 8802 .L99:
+2454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+
GAS LISTING /tmp/ccPaCTqg.s page 291
+
+
+ 8803 .loc 3 2457 0
+ 8804 72dc 660F6F45 movdqa -32(%rbp), %xmm0
+ 8804 E0
+2458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8805 .loc 3 2458 0
+ 8806 72e1 C9 leave
+ 8807 72e2 C3 ret
+ 8808 .cfi_endproc
+ 8809 .LFE676:
+ 8810 .size KAESBlockCipherVecAesNiEncrypt, .-KAESBlockCipherVecAesNiEncrypt
+ 8811 .type KAESBlockCipherVecAesNiDecrypt, @function
+ 8812 KAESBlockCipherVecAesNiDecrypt:
+ 8813 .LFB677:
+2459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Decrypt
+2463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Perform a decryption of a single block. Chained modes and stream
+2465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * cipher modes will call this multiple times.
+2466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Decrypt) (CipherVec state,
+2469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const void * decrypt_key)
+2470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8814 .loc 3 2470 0
+ 8815 .cfi_startproc
+ 8816 72e3 55 pushq %rbp
+ 8817 .LCFI42:
+ 8818 .cfi_def_cfa_offset 16
+ 8819 72e4 4889E5 movq %rsp, %rbp
+ 8820 .cfi_offset 6, -16
+ 8821 .LCFI43:
+ 8822 .cfi_def_cfa_register 6
+ 8823 72e7 4883EC30 subq $48, %rsp
+ 8824 72eb 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8824 E0
+ 8825 72f0 48897DD8 movq %rdi, -40(%rbp)
+2471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESKeySchedule * key = decrypt_key;
+ 8826 .loc 3 2471 0
+ 8827 72f4 488B45D8 movq -40(%rbp), %rax
+ 8828 72f8 488945F8 movq %rax, -8(%rbp)
+2472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (key);
+ 8829 .loc 3 2473 0
+ 8830 72fc 48837DF8 cmpq $0, -8(%rbp)
+ 8830 00
+ 8831 7301 751F jne .L102
+ 8832 7303 488D0D00 leaq __PRETTY_FUNCTION__.8851(%rip), %rcx
+ 8832 000000
+ 8833 730a BAA90900 movl $2473, %edx
+ 8833 00
+ 8834 730f 488D3500 leaq .LC5(%rip), %rsi
+ 8834 000000
+ 8835 7316 488D3D00 leaq .LC6(%rip), %rdi
+ 8835 000000
+ 8836 731d E8000000 call __assert_fail at PLT
+
GAS LISTING /tmp/ccPaCTqg.s page 292
+
+
+ 8836 00
+ 8837 .L102:
+2474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds)
+ 8838 .loc 3 2475 0
+ 8839 7322 488B45F8 movq -8(%rbp), %rax
+ 8840 7326 8B80F000 movl 240(%rax), %eax
+ 8840 0000
+ 8841 732c 83F80C cmpl $12, %eax
+ 8842 732f 7436 je .L105
+ 8843 7331 83F80E cmpl $14, %eax
+ 8844 7334 744E je .L106
+ 8845 7336 83F80A cmpl $10, %eax
+ 8846 7339 740F je .L104
+2476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** default:
+2478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+ 8847 .loc 3 2478 0
+ 8848 733b 660F6F05 movdqa vec_00(%rip), %xmm0
+ 8848 00000000
+ 8849 7343 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8849 E0
+2479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8850 .loc 3 2479 0
+ 8851 7348 EB55 jmp .L107
+ 8852 .L104:
+2480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_128:
+2482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 8853 .loc 3 2482 0
+ 8854 734a 488B45F8 movq -8(%rbp), %rax
+ 8855 734e 660F6F45 movdqa -32(%rbp), %xmm0
+ 8855 E0
+ 8856 7353 BE0A0000 movl $10, %esi
+ 8856 00
+ 8857 7358 4889C7 movq %rax, %rdi
+ 8858 735b E83AF6FF call KAESBlockCipherVecAesNiEqInvCipher
+ 8858 FF
+ 8859 7360 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8859 E0
+2483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AES_Nr_128);
+2484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8860 .loc 3 2484 0
+ 8861 7365 EB38 jmp .L107
+ 8862 .L105:
+2485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_192:
+2487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 8863 .loc 3 2487 0
+ 8864 7367 488B45F8 movq -8(%rbp), %rax
+ 8865 736b 660F6F45 movdqa -32(%rbp), %xmm0
+ 8865 E0
+ 8866 7370 BE0C0000 movl $12, %esi
+ 8866 00
+ 8867 7375 4889C7 movq %rax, %rdi
+ 8868 7378 E81DF6FF call KAESBlockCipherVecAesNiEqInvCipher
+ 8868 FF
+
GAS LISTING /tmp/ccPaCTqg.s page 293
+
+
+ 8869 737d 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8869 E0
+2488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AES_Nr_192);
+2489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 8870 .loc 3 2489 0
+ 8871 7382 EB1B jmp .L107
+ 8872 .L106:
+2490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_256:
+2492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 8873 .loc 3 2492 0
+ 8874 7384 488B45F8 movq -8(%rbp), %rax
+ 8875 7388 660F6F45 movdqa -32(%rbp), %xmm0
+ 8875 E0
+ 8876 738d BE0E0000 movl $14, %esi
+ 8876 00
+ 8877 7392 4889C7 movq %rax, %rdi
+ 8878 7395 E800F6FF call KAESBlockCipherVecAesNiEqInvCipher
+ 8878 FF
+ 8879 739a 660F7F45 movdqa %xmm0, -32(%rbp)
+ 8879 E0
+ 8880 .L107:
+2493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AES_Nr_256);
+2494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8881 .loc 3 2497 0
+ 8882 739f 660F6F45 movdqa -32(%rbp), %xmm0
+ 8882 E0
+2498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8883 .loc 3 2498 0
+ 8884 73a4 C9 leave
+ 8885 73a5 C3 ret
+ 8886 .cfi_endproc
+ 8887 .LFE677:
+ 8888 .size KAESBlockCipherVecAesNiDecrypt, .-KAESBlockCipherVecAesNiDecrypt
+ 8889 .section .rodata
+ 8890 0422 00000000 .align 8
+ 8890 0000
+ 8891 .LC7:
+ 8892 0428 25733A20 .string "%s: level %x a %x, b %x c %x d %x\n"
+ 8892 6C657665
+ 8892 6C202578
+ 8892 20612025
+ 8892 782C2062
+ 8893 .LC8:
+ 8894 044b 25733A20 .string "%s: failed no AES\n"
+ 8894 6661696C
+ 8894 6564206E
+ 8894 6F204145
+ 8894 530A00
+ 8895 .LC9:
+ 8896 045e 25733A20 .string "%s: failed no SSSE3\n"
+ 8896 6661696C
+ 8896 6564206E
+ 8896 6F205353
+
GAS LISTING /tmp/ccPaCTqg.s page 294
+
+
+ 8896 5345330A
+ 8897 .LC10:
+ 8898 0473 25733A20 .string "%s: failed no SSE3\n"
+ 8898 6661696C
+ 8898 6564206E
+ 8898 6F205353
+ 8898 45330A00
+ 8899 .LC11:
+ 8900 0487 25733A20 .string "%s: failed no SSE2\n"
+ 8900 6661696C
+ 8900 6564206E
+ 8900 6F205353
+ 8900 45320A00
+ 8901 .LC12:
+ 8902 049b 25733A20 .string "%s: failed no SSE\n"
+ 8902 6661696C
+ 8902 6564206E
+ 8902 6F205353
+ 8902 450A00
+ 8903 .LC13:
+ 8904 04ae 25733A20 .string "%s: passed\n"
+ 8904 70617373
+ 8904 65640A00
+ 8905 .text
+ 8906 .type KAESBlockCipherVecAesNiProcessorSupport, @function
+ 8907 KAESBlockCipherVecAesNiProcessorSupport:
+ 8908 .LFB678:
+2499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * MakeProcessorSupport
+2503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Run-time check for support of this particular AES implmentation by
+2505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * checking the flags given via the cpuid instruction.
+2506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool AESBCMEMBER(ProcessorSupport) ()
+2509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8909 .loc 3 2509 0
+ 8910 .cfi_startproc
+ 8911 73a6 55 pushq %rbp
+ 8912 .LCFI44:
+ 8913 .cfi_def_cfa_offset 16
+ 8914 73a7 4889E5 movq %rsp, %rbp
+ 8915 .cfi_offset 6, -16
+ 8916 .LCFI45:
+ 8917 .cfi_def_cfa_register 6
+ 8918 73aa 53 pushq %rbx
+ 8919 73ab 4883EC38 subq $56, %rsp
+2510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t level = 1, a, b, c, d;
+ 8920 .loc 3 2510 0
+ 8921 73af C745D801 movl $1, -40(%rbp)
+ 8921 000000
+2511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool ret = true;
+ 8922 .loc 3 2511 0
+ 8923 73b6 C645EF01 movb $1, -17(%rbp)
+2512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccPaCTqg.s page 295
+
+
+2513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __cpuid (level, a, b, c, d);
+ 8924 .loc 3 2513 0
+ 8925 73ba 8B45D8 movl -40(%rbp), %eax
+ 8926 #APP
+ 8927 # 2513 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 2514
+ 2515 DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+ 8928 cpuid
+ 8929
+ 8930 # 0 "" 2
+ 8931 #NO_APP
+ 8932 73bf 8945DC movl %eax, -36(%rbp)
+ 8933 73c2 895DE0 movl %ebx, -32(%rbp)
+ 8934 73c5 894DE4 movl %ecx, -28(%rbp)
+ 8935 73c8 8955E8 movl %edx, -24(%rbp)
+ 8936 .loc 3 2515 0
+ 8937 .cfi_offset 3, -24
+ 8938 73cb E8000000 call KDbgWriterGet at PLT
+ 8938 00
+ 8939 73d0 4885C0 testq %rax, %rax
+ 8940 73d3 744F je .L111
+ 8941 73d5 BF040000 movl $4, %edi
+ 8941 00
+ 8942 73da E8000000 call KDbgCondToFlag at PLT
+ 8942 00
+ 8943 73df 4889C6 movq %rax, %rsi
+ 8944 73e2 BF100000 movl $16, %edi
+ 8944 00
+ 8945 73e7 E8000000 call KDbgTestModConds at PLT
+ 8945 00
+ 8946 73ec 84C0 testb %al, %al
+ 8947 73ee 7434 je .L111
+ 8948 73f0 8B75E4 movl -28(%rbp), %esi
+ 8949 73f3 8B5DE0 movl -32(%rbp), %ebx
+ 8950 73f6 8B55DC movl -36(%rbp), %edx
+ 8951 73f9 8B45D8 movl -40(%rbp), %eax
+ 8952 73fc 8B4DE8 movl -24(%rbp), %ecx
+ 8953 73ff 890C24 movl %ecx, (%rsp)
+ 8954 7402 4189F1 movl %esi, %r9d
+ 8955 7405 4189D8 movl %ebx, %r8d
+ 8956 7408 89D1 movl %edx, %ecx
+ 8957 740a 89C2 movl %eax, %edx
+ 8958 740c 488D3500 leaq __func__.8875(%rip), %rsi
+ 8958 000000
+ 8959 7413 488D3D00 leaq .LC7(%rip), %rdi
+ 8959 000000
+ 8960 741a B8000000 movl $0, %eax
+ 8960 00
+ 8961 741f E8000000 call KDbgMsg at PLT
+ 8961 00
+ 8962 .L111:
+2516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Only one flag tells whether the AES-NI instructions
+2520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * are implmented in this CPU
+2521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+
GAS LISTING /tmp/ccPaCTqg.s page 296
+
+
+2522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! (c & bit_AES))
+ 8963 .loc 3 2522 0
+ 8964 7424 8B45E4 movl -28(%rbp), %eax
+ 8965 7427 25000000 andl $33554432, %eax
+ 8965 02
+ 8966 742c 85C0 testl %eax, %eax
+ 8967 742e 7546 jne .L112
+2523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no AES\n",__func__));
+ 8968 .loc 3 2524 0
+ 8969 7430 E8000000 call KDbgWriterGet at PLT
+ 8969 00
+ 8970 7435 4885C0 testq %rax, %rax
+ 8971 7438 7433 je .L114
+ 8972 743a BF040000 movl $4, %edi
+ 8972 00
+ 8973 743f E8000000 call KDbgCondToFlag at PLT
+ 8973 00
+ 8974 7444 4889C6 movq %rax, %rsi
+ 8975 7447 BF100000 movl $16, %edi
+ 8975 00
+ 8976 744c E8000000 call KDbgTestModConds at PLT
+ 8976 00
+ 8977 7451 84C0 testb %al, %al
+ 8978 7453 7418 je .L114
+ 8979 7455 488D3500 leaq __func__.8875(%rip), %rsi
+ 8979 000000
+ 8980 745c 488D3D00 leaq .LC8(%rip), %rdi
+ 8980 000000
+ 8981 7463 B8000000 movl $0, %eax
+ 8981 00
+ 8982 7468 E8000000 call KDbgMsg at PLT
+ 8982 00
+ 8983 .L114:
+2525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 8984 .loc 3 2525 0
+ 8985 746d C645EF00 movb $0, -17(%rbp)
+ 8986 7471 E9900100 jmp .L115
+ 8986 00
+ 8987 .L112:
+2526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** } else
+2527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+2530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Several flags indicate different levels of SSE
+2532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * instruction implmentation
+2533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * we require SSE4.1
+2535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * that dates from 2006 so is most likely good enough
+2537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* if ( ! (c & (bit_SSE4_2))
+2539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccPaCTqg.s page 297
+
+
+2543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else */
+2545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! (c & bit_SSE4_1))
+ 8988 .loc 3 2545 0
+ 8989 7476 8B45E4 movl -28(%rbp), %eax
+ 8990 7479 25000008 andl $524288, %eax
+ 8990 00
+ 8991 747e 85C0 testl %eax, %eax
+ 8992 7480 7546 jne .L116
+2546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ 8993 .loc 3 2547 0
+ 8994 7482 E8000000 call KDbgWriterGet at PLT
+ 8994 00
+ 8995 7487 4885C0 testq %rax, %rax
+ 8996 748a 7433 je .L118
+ 8997 748c BF040000 movl $4, %edi
+ 8997 00
+ 8998 7491 E8000000 call KDbgCondToFlag at PLT
+ 8998 00
+ 8999 7496 4889C6 movq %rax, %rsi
+ 9000 7499 BF100000 movl $16, %edi
+ 9000 00
+ 9001 749e E8000000 call KDbgTestModConds at PLT
+ 9001 00
+ 9002 74a3 84C0 testb %al, %al
+ 9003 74a5 7418 je .L118
+ 9004 74a7 488D3500 leaq __func__.8875(%rip), %rsi
+ 9004 000000
+ 9005 74ae 488D3D00 leaq .LC9(%rip), %rdi
+ 9005 000000
+ 9006 74b5 B8000000 movl $0, %eax
+ 9006 00
+ 9007 74ba E8000000 call KDbgMsg at PLT
+ 9007 00
+ 9008 .L118:
+2548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 9009 .loc 3 2548 0
+ 9010 74bf C645EF00 movb $0, -17(%rbp)
+ 9011 74c3 E93E0100 jmp .L115
+ 9011 00
+ 9012 .L116:
+2549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (c & bit_SSSE3))
+ 9013 .loc 3 2551 0
+ 9014 74c8 8B45E4 movl -28(%rbp), %eax
+ 9015 74cb 25000200 andl $512, %eax
+ 9015 00
+ 9016 74d0 85C0 testl %eax, %eax
+ 9017 74d2 7546 jne .L119
+2552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ 9018 .loc 3 2553 0
+ 9019 74d4 E8000000 call KDbgWriterGet at PLT
+ 9019 00
+ 9020 74d9 4885C0 testq %rax, %rax
+
GAS LISTING /tmp/ccPaCTqg.s page 298
+
+
+ 9021 74dc 7433 je .L121
+ 9022 74de BF040000 movl $4, %edi
+ 9022 00
+ 9023 74e3 E8000000 call KDbgCondToFlag at PLT
+ 9023 00
+ 9024 74e8 4889C6 movq %rax, %rsi
+ 9025 74eb BF100000 movl $16, %edi
+ 9025 00
+ 9026 74f0 E8000000 call KDbgTestModConds at PLT
+ 9026 00
+ 9027 74f5 84C0 testb %al, %al
+ 9028 74f7 7418 je .L121
+ 9029 74f9 488D3500 leaq __func__.8875(%rip), %rsi
+ 9029 000000
+ 9030 7500 488D3D00 leaq .LC9(%rip), %rdi
+ 9030 000000
+ 9031 7507 B8000000 movl $0, %eax
+ 9031 00
+ 9032 750c E8000000 call KDbgMsg at PLT
+ 9032 00
+ 9033 .L121:
+2554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 9034 .loc 3 2554 0
+ 9035 7511 C645EF00 movb $0, -17(%rbp)
+ 9036 7515 E9EC0000 jmp .L115
+ 9036 00
+ 9037 .L119:
+2555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (c & bit_SSE3))
+ 9038 .loc 3 2557 0
+ 9039 751a 8B45E4 movl -28(%rbp), %eax
+ 9040 751d 83E001 andl $1, %eax
+ 9041 7520 85C0 testl %eax, %eax
+ 9042 7522 7546 jne .L122
+2558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSE3\n",__func__));
+ 9043 .loc 3 2559 0
+ 9044 7524 E8000000 call KDbgWriterGet at PLT
+ 9044 00
+ 9045 7529 4885C0 testq %rax, %rax
+ 9046 752c 7433 je .L124
+ 9047 752e BF040000 movl $4, %edi
+ 9047 00
+ 9048 7533 E8000000 call KDbgCondToFlag at PLT
+ 9048 00
+ 9049 7538 4889C6 movq %rax, %rsi
+ 9050 753b BF100000 movl $16, %edi
+ 9050 00
+ 9051 7540 E8000000 call KDbgTestModConds at PLT
+ 9051 00
+ 9052 7545 84C0 testb %al, %al
+ 9053 7547 7418 je .L124
+ 9054 7549 488D3500 leaq __func__.8875(%rip), %rsi
+ 9054 000000
+ 9055 7550 488D3D00 leaq .LC10(%rip), %rdi
+ 9055 000000
+
GAS LISTING /tmp/ccPaCTqg.s page 299
+
+
+ 9056 7557 B8000000 movl $0, %eax
+ 9056 00
+ 9057 755c E8000000 call KDbgMsg at PLT
+ 9057 00
+ 9058 .L124:
+2560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 9059 .loc 3 2560 0
+ 9060 7561 C645EF00 movb $0, -17(%rbp)
+ 9061 7565 E99C0000 jmp .L115
+ 9061 00
+ 9062 .L122:
+2561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (d & bit_SSE2))
+ 9063 .loc 3 2563 0
+ 9064 756a 8B45E8 movl -24(%rbp), %eax
+ 9065 756d 25000000 andl $67108864, %eax
+ 9065 04
+ 9066 7572 85C0 testl %eax, %eax
+ 9067 7574 7543 jne .L125
+2564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSE2\n",__func__));
+ 9068 .loc 3 2565 0
+ 9069 7576 E8000000 call KDbgWriterGet at PLT
+ 9069 00
+ 9070 757b 4885C0 testq %rax, %rax
+ 9071 757e 7433 je .L127
+ 9072 7580 BF040000 movl $4, %edi
+ 9072 00
+ 9073 7585 E8000000 call KDbgCondToFlag at PLT
+ 9073 00
+ 9074 758a 4889C6 movq %rax, %rsi
+ 9075 758d BF100000 movl $16, %edi
+ 9075 00
+ 9076 7592 E8000000 call KDbgTestModConds at PLT
+ 9076 00
+ 9077 7597 84C0 testb %al, %al
+ 9078 7599 7418 je .L127
+ 9079 759b 488D3500 leaq __func__.8875(%rip), %rsi
+ 9079 000000
+ 9080 75a2 488D3D00 leaq .LC11(%rip), %rdi
+ 9080 000000
+ 9081 75a9 B8000000 movl $0, %eax
+ 9081 00
+ 9082 75ae E8000000 call KDbgMsg at PLT
+ 9082 00
+ 9083 .L127:
+2566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 9084 .loc 3 2566 0
+ 9085 75b3 C645EF00 movb $0, -17(%rbp)
+ 9086 75b7 EB4D jmp .L115
+ 9087 .L125:
+2567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (d & bit_SSE))
+ 9088 .loc 3 2569 0
+ 9089 75b9 8B45E8 movl -24(%rbp), %eax
+
GAS LISTING /tmp/ccPaCTqg.s page 300
+
+
+ 9090 75bc 25000000 andl $33554432, %eax
+ 9090 02
+ 9091 75c1 85C0 testl %eax, %eax
+ 9092 75c3 7541 jne .L115
+2570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSE\n",__func__));
+ 9093 .loc 3 2571 0
+ 9094 75c5 E8000000 call KDbgWriterGet at PLT
+ 9094 00
+ 9095 75ca 4885C0 testq %rax, %rax
+ 9096 75cd 7433 je .L129
+ 9097 75cf BF040000 movl $4, %edi
+ 9097 00
+ 9098 75d4 E8000000 call KDbgCondToFlag at PLT
+ 9098 00
+ 9099 75d9 4889C6 movq %rax, %rsi
+ 9100 75dc BF100000 movl $16, %edi
+ 9100 00
+ 9101 75e1 E8000000 call KDbgTestModConds at PLT
+ 9101 00
+ 9102 75e6 84C0 testb %al, %al
+ 9103 75e8 7418 je .L129
+ 9104 75ea 488D3500 leaq __func__.8875(%rip), %rsi
+ 9104 000000
+ 9105 75f1 488D3D00 leaq .LC12(%rip), %rdi
+ 9105 000000
+ 9106 75f8 B8000000 movl $0, %eax
+ 9106 00
+ 9107 75fd E8000000 call KDbgMsg at PLT
+ 9107 00
+ 9108 .L129:
+2572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 9109 .loc 3 2572 0
+ 9110 7602 C645EF00 movb $0, -17(%rbp)
+ 9111 .L115:
+2573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: passed\n",__func__));
+ 9112 .loc 3 2575 0
+ 9113 7606 E8000000 call KDbgWriterGet at PLT
+ 9113 00
+ 9114 760b 4885C0 testq %rax, %rax
+ 9115 760e 7433 je .L131
+ 9116 7610 BF040000 movl $4, %edi
+ 9116 00
+ 9117 7615 E8000000 call KDbgCondToFlag at PLT
+ 9117 00
+ 9118 761a 4889C6 movq %rax, %rsi
+ 9119 761d BF100000 movl $16, %edi
+ 9119 00
+ 9120 7622 E8000000 call KDbgTestModConds at PLT
+ 9120 00
+ 9121 7627 84C0 testb %al, %al
+ 9122 7629 7418 je .L131
+ 9123 762b 488D3500 leaq __func__.8875(%rip), %rsi
+ 9123 000000
+ 9124 7632 488D3D00 leaq .LC13(%rip), %rdi
+
GAS LISTING /tmp/ccPaCTqg.s page 301
+
+
+ 9124 000000
+ 9125 7639 B8000000 movl $0, %eax
+ 9125 00
+ 9126 763e E8000000 call KDbgMsg at PLT
+ 9126 00
+ 9127 .L131:
+2576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ret;
+ 9128 .loc 3 2576 0
+ 9129 7643 0FB645EF movzbl -17(%rbp), %eax
+2577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 9130 .loc 3 2577 0
+ 9131 7647 4883C438 addq $56, %rsp
+ 9132 764b 5B popq %rbx
+ 9133 764c C9 leave
+ 9134 764d C3 ret
+ 9135 .cfi_endproc
+ 9136 .LFE678:
+ 9137 .size KAESBlockCipherVecAesNiProcessorSupport, .-KAESBlockCipherVecAesNiProcessorSupport
+ 9138 .section .data.rel.ro.local,"aw", at progbits
+ 9139 .align 32
+ 9140 .type KAESBlockCipherVecAesNi_vt_, @object
+ 9141 .size KAESBlockCipherVecAesNi_vt_, 64
+ 9142 KAESBlockCipherVecAesNi_vt_:
+ 9143 0000 01000000 .long 1
+ 9144 0004 01000000 .long 1
+ 9145 0008 00000000 .quad KAESBlockCipherVecAesNiDestroy
+ 9145 00000000
+ 9146 0010 00000000 .quad KAESBlockCipherVecAesNiBlockSize
+ 9146 00000000
+ 9147 0018 00000000 .quad KAESBlockCipherVecAesNiKeySize
+ 9147 00000000
+ 9148 0020 00000000 .quad KAESBlockCipherVecAesNiSetEncryptKey
+ 9148 00000000
+ 9149 0028 00000000 .quad KAESBlockCipherVecAesNiSetDecryptKey
+ 9149 00000000
+ 9150 0030 00000000 .quad KAESBlockCipherVecAesNiEncrypt
+ 9150 00000000
+ 9151 0038 00000000 .quad KAESBlockCipherVecAesNiDecrypt
+ 9151 00000000
+ 9152 .section .rodata
+ 9153 .LC14:
+ 9154 04ba 25733A20 .string "%s: %p\n"
+ 9154 25700A00
+ 9155 .text
+ 9156 .globl KAESBlockCipherVecAesNiMake
+ 9157 .type KAESBlockCipherVecAesNiMake, @function
+ 9158 KAESBlockCipherVecAesNiMake:
+ 9159 .LFB679:
+2578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Init
+2582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Initialize the fields of this object. The derived class will call this
+2584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * during it's initialization.
+2585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * self object to initialze
+
GAS LISTING /tmp/ccPaCTqg.s page 302
+
+
+2587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * vt the virtual table of the derived class
+2588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * mgr the cipher manager that is the construction factory block cipher
+2589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * objects hold references to the manager while the manager merely
+2590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * points at the block ciphers when all block ciphers are destroyed
+2591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the manager loses its references and it too can be destroyed if not
+2592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * held elsewhere
+2593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * name ASCIZ c-string the name of this class
+2594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+2596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KBlockCipherVec_vt_v1 AESBCMEMBER(_vt_) =
+2597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 1, 1 },
+2599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(Destroy),
+2601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(BlockSize),
+2602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeySize),
+2603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(SetEncryptKey),
+2604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(SetDecryptKey),
+2605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(Encrypt),
+2606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(Decrypt)
+2607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+2608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Make
+2612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Create a new AES Block Cipher object.
+2614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The processor is checked to see if this particular version is supported on
+2615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * this particular CPU.
+2616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(Make) (KBlockCipher ** new_obj)
+2618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 9160 .loc 3 2618 0
+ 9161 .cfi_startproc
+ 9162 764e 55 pushq %rbp
+ 9163 .LCFI46:
+ 9164 .cfi_def_cfa_offset 16
+ 9165 764f 4889E5 movq %rsp, %rbp
+ 9166 .cfi_offset 6, -16
+ 9167 .LCFI47:
+ 9168 .cfi_def_cfa_register 6
+ 9169 7652 4883EC20 subq $32, %rsp
+ 9170 7656 48897DE8 movq %rdi, -24(%rbp)
+2619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t rc;
+2620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+ 9171 .loc 3 2621 0
+ 9172 765a E8000000 call KDbgWriterGet at PLT
+ 9172 00
+ 9173 765f 4885C0 testq %rax, %rax
+ 9174 7662 743A je .L135
+ 9175 7664 BF040000 movl $4, %edi
+ 9175 00
+ 9176 7669 E8000000 call KDbgCondToFlag at PLT
+ 9176 00
+ 9177 766e 4889C6 movq %rax, %rsi
+ 9178 7671 BF100000 movl $16, %edi
+
GAS LISTING /tmp/ccPaCTqg.s page 303
+
+
+ 9178 00
+ 9179 7676 E8000000 call KDbgTestModConds at PLT
+ 9179 00
+ 9180 767b 84C0 testb %al, %al
+ 9181 767d 741F je .L135
+ 9182 767f 488B45E8 movq -24(%rbp), %rax
+ 9183 7683 4889C2 movq %rax, %rdx
+ 9184 7686 488D3500 leaq __func__.8978(%rip), %rsi
+ 9184 000000
+ 9185 768d 488D3D00 leaq .LC14(%rip), %rdi
+ 9185 000000
+ 9186 7694 B8000000 movl $0, %eax
+ 9186 00
+ 9187 7699 E8000000 call KDbgMsg at PLT
+ 9187 00
+ 9188 .L135:
+2622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* Check parameter first */
+2624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (new_obj == NULL)
+ 9189 .loc 3 2624 0
+ 9190 769e 48837DE8 cmpq $0, -24(%rbp)
+ 9190 00
+ 9191 76a3 7522 jne .L136
+2625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 9192 .loc 3 2625 0
+ 9193 76a5 B9410A00 movl $2625, %ecx
+ 9193 00
+ 9194 76aa 488D1500 leaq __func__.8978(%rip), %rdx
+ 9194 000000
+ 9195 76b1 488D3500 leaq .LC5(%rip), %rsi
+ 9195 000000
+ 9196 76b8 BF878F00 movl $-2030006393, %edi
+ 9196 87
+ 9197 76bd E8000000 call SetRCFileFuncLine at PLT
+ 9197 00
+ 9198 76c2 8945FC movl %eax, -4(%rbp)
+ 9199 76c5 EB53 jmp .L137
+ 9200 .L136:
+2626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else
+2628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *new_obj = NULL;
+ 9201 .loc 3 2629 0
+ 9202 76c7 488B45E8 movq -24(%rbp), %rax
+ 9203 76cb 48C70000 movq $0, (%rax)
+ 9203 000000
+2630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* check for processor support of this flavor */
+2632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! AESBCMEMBER(ProcessorSupport)())
+ 9204 .loc 3 2632 0
+ 9205 76d2 B8000000 movl $0, %eax
+ 9205 00
+ 9206 76d7 E8CAFCFF call KAESBlockCipherVecAesNiProcessorSupport
+ 9206 FF
+ 9207 76dc 83F001 xorl $1, %eax
+ 9208 76df 84C0 testb %al, %al
+ 9209 76e1 7422 je .L138
+
GAS LISTING /tmp/ccPaCTqg.s page 304
+
+
+2633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 9210 .loc 3 2633 0
+ 9211 76e3 B9490A00 movl $2633, %ecx
+ 9211 00
+ 9212 76e8 488D1500 leaq __func__.8978(%rip), %rdx
+ 9212 000000
+ 9213 76ef 488D3500 leaq .LC5(%rip), %rsi
+ 9213 000000
+ 9214 76f6 BF038500 movl $-2030009085, %edi
+ 9214 87
+ 9215 76fb E8000000 call SetRCFileFuncLine at PLT
+ 9215 00
+ 9216 7700 8945FC movl %eax, -4(%rbp)
+ 9217 7703 EB15 jmp .L137
+ 9218 .L138:
+2634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else
+2636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = 0;
+ 9219 .loc 3 2637 0
+ 9220 7705 C745FC00 movl $0, -4(%rbp)
+ 9220 000000
+2638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+ 9221 .loc 3 2638 0
+ 9222 770c 488D1500 leaq KAESBlockCipherVecAesNi_vt_(%rip), %rdx
+ 9222 000000
+ 9223 7713 488B45E8 movq -24(%rbp), %rax
+ 9224 7717 488910 movq %rdx, (%rax)
+ 9225 .L137:
+2639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+ 9226 .loc 3 2641 0
+ 9227 771a 8B45FC movl -4(%rbp), %eax
+2642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 9228 .loc 3 2642 0
+ 9229 771d C9 leave
+ 9230 771e C3 ret
+ 9231 .cfi_endproc
+ 9232 .LFE679:
+ 9233 .size KAESBlockCipherVecAesNiMake, .-KAESBlockCipherVecAesNiMake
+ 9234 .section .rodata
+ 9235 04c2 00000000 .align 16
+ 9235 00000000
+ 9235 00000000
+ 9235 0000
+ 9236 .type __func__.8978, @object
+ 9237 .size __func__.8978, 28
+ 9238 __func__.8978:
+ 9239 04d0 4B414553 .string "KAESBlockCipherVecAesNiMake"
+ 9239 426C6F63
+ 9239 6B436970
+ 9239 68657256
+ 9239 65634165
+ 9240 04ec 00000000 .align 16
+ 9241 .type __PRETTY_FUNCTION__.8979, @object
+ 9242 .size __PRETTY_FUNCTION__.8979, 28
+
GAS LISTING /tmp/ccPaCTqg.s page 305
+
+
+ 9243 __PRETTY_FUNCTION__.8979:
+ 9244 04f0 4B414553 .string "KAESBlockCipherVecAesNiMake"
+ 9244 426C6F63
+ 9244 6B436970
+ 9244 68657256
+ 9244 65634165
+ 9245 050c 00000000 .align 32
+ 9245 00000000
+ 9245 00000000
+ 9245 00000000
+ 9245 00000000
+ 9246 .type __func__.8875, @object
+ 9247 .size __func__.8875, 40
+ 9248 __func__.8875:
+ 9249 0520 4B414553 .string "KAESBlockCipherVecAesNiProcessorSupport"
+ 9249 426C6F63
+ 9249 6B436970
+ 9249 68657256
+ 9249 65634165
+ 9250 0548 00000000 .align 16
+ 9250 00000000
+ 9251 .type __PRETTY_FUNCTION__.8851, @object
+ 9252 .size __PRETTY_FUNCTION__.8851, 31
+ 9253 __PRETTY_FUNCTION__.8851:
+ 9254 0550 4B414553 .string "KAESBlockCipherVecAesNiDecrypt"
+ 9254 426C6F63
+ 9254 6B436970
+ 9254 68657256
+ 9254 65634165
+ 9255 056f 00 .align 16
+ 9256 .type __PRETTY_FUNCTION__.8830, @object
+ 9257 .size __PRETTY_FUNCTION__.8830, 31
+ 9258 __PRETTY_FUNCTION__.8830:
+ 9259 0570 4B414553 .string "KAESBlockCipherVecAesNiEncrypt"
+ 9259 426C6F63
+ 9259 6B436970
+ 9259 68657256
+ 9259 65634165
+ 9260 058f 00000000 .align 32
+ 9260 00000000
+ 9260 00000000
+ 9260 00000000
+ 9260 00
+ 9261 .type __func__.8794, @object
+ 9262 .size __func__.8794, 37
+ 9263 __func__.8794:
+ 9264 05a0 4B414553 .string "KAESBlockCipherVecAesNiSetEncryptKey"
+ 9264 426C6F63
+ 9264 6B436970
+ 9264 68657256
+ 9264 65634165
+ 9265 05c5 00000000 .align 32
+ 9265 00000000
+ 9265 00000000
+ 9265 00000000
+ 9265 00000000
+ 9266 .type __PRETTY_FUNCTION__.8793, @object
+
GAS LISTING /tmp/ccPaCTqg.s page 306
+
+
+ 9267 .size __PRETTY_FUNCTION__.8793, 37
+ 9268 __PRETTY_FUNCTION__.8793:
+ 9269 05e0 4B414553 .string "KAESBlockCipherVecAesNiSetEncryptKey"
+ 9269 426C6F63
+ 9269 6B436970
+ 9269 68657256
+ 9269 65634165
+ 9270 0605 00000000 .align 16
+ 9270 00000000
+ 9270 000000
+ 9271 .type mask.8002, @object
+ 9272 .size mask.8002, 16
+ 9273 mask.8002:
+ 9274 0610 FF .byte -1
+ 9275 0611 FF .byte -1
+ 9276 0612 FF .byte -1
+ 9277 0613 FF .byte -1
+ 9278 0614 00 .byte 0
+ 9279 0615 01 .byte 1
+ 9280 0616 02 .byte 2
+ 9281 0617 03 .byte 3
+ 9282 0618 04 .byte 4
+ 9283 0619 05 .byte 5
+ 9284 061a 06 .byte 6
+ 9285 061b 07 .byte 7
+ 9286 061c 08 .byte 8
+ 9287 061d 09 .byte 9
+ 9288 061e 0A .byte 10
+ 9289 061f 0B .byte 11
+ 9290 .align 16
+ 9291 .type mask.8011, @object
+ 9292 .size mask.8011, 16
+ 9293 mask.8011:
+ 9294 0620 08 .byte 8
+ 9295 0621 09 .byte 9
+ 9296 0622 0A .byte 10
+ 9297 0623 0B .byte 11
+ 9298 0624 0C .byte 12
+ 9299 0625 0D .byte 13
+ 9300 0626 0E .byte 14
+ 9301 0627 0F .byte 15
+ 9302 0628 FF .byte -1
+ 9303 0629 FF .byte -1
+ 9304 062a FF .byte -1
+ 9305 062b FF .byte -1
+ 9306 062c FF .byte -1
+ 9307 062d FF .byte -1
+ 9308 062e FF .byte -1
+ 9309 062f FF .byte -1
+ 9310 .text
+ 9311 .Letext0:
+ 9312 .section .debug_loc,"", at progbits
+ 9313 .Ldebug_loc0:
+ 9314 .LLST0:
+ 9315 0000 00000000 .quad .LFB580-.Ltext0
+ 9315 00000000
+ 9316 0008 01000000 .quad .LCFI0-.Ltext0
+
GAS LISTING /tmp/ccPaCTqg.s page 307
+
+
+ 9316 00000000
+ 9317 0010 0200 .value 0x2
+ 9318 0012 77 .byte 0x77
+ 9319 0013 08 .sleb128 8
+ 9320 0014 01000000 .quad .LCFI0-.Ltext0
+ 9320 00000000
+ 9321 001c 04000000 .quad .LCFI1-.Ltext0
+ 9321 00000000
+ 9322 0024 0200 .value 0x2
+ 9323 0026 77 .byte 0x77
+ 9324 0027 10 .sleb128 16
+ 9325 0028 04000000 .quad .LCFI1-.Ltext0
+ 9325 00000000
+ 9326 0030 0B000000 .quad .LFE580-.Ltext0
+ 9326 00000000
+ 9327 0038 0200 .value 0x2
+ 9328 003a 76 .byte 0x76
+ 9329 003b 10 .sleb128 16
+ 9330 003c 00000000 .quad 0x0
+ 9330 00000000
+ 9331 0044 00000000 .quad 0x0
+ 9331 00000000
+ 9332 .LLST1:
+ 9333 004c 0B000000 .quad .LFB581-.Ltext0
+ 9333 00000000
+ 9334 0054 0C000000 .quad .LCFI2-.Ltext0
+ 9334 00000000
+ 9335 005c 0200 .value 0x2
+ 9336 005e 77 .byte 0x77
+ 9337 005f 08 .sleb128 8
+ 9338 0060 0C000000 .quad .LCFI2-.Ltext0
+ 9338 00000000
+ 9339 0068 0F000000 .quad .LCFI3-.Ltext0
+ 9339 00000000
+ 9340 0070 0200 .value 0x2
+ 9341 0072 77 .byte 0x77
+ 9342 0073 10 .sleb128 16
+ 9343 0074 0F000000 .quad .LCFI3-.Ltext0
+ 9343 00000000
+ 9344 007c 16000000 .quad .LFE581-.Ltext0
+ 9344 00000000
+ 9345 0084 0200 .value 0x2
+ 9346 0086 76 .byte 0x76
+ 9347 0087 10 .sleb128 16
+ 9348 0088 00000000 .quad 0x0
+ 9348 00000000
+ 9349 0090 00000000 .quad 0x0
+ 9349 00000000
+ 9350 .LLST2:
+ 9351 0098 16000000 .quad .LFB582-.Ltext0
+ 9351 00000000
+ 9352 00a0 17000000 .quad .LCFI4-.Ltext0
+ 9352 00000000
+ 9353 00a8 0200 .value 0x2
+ 9354 00aa 77 .byte 0x77
+ 9355 00ab 08 .sleb128 8
+ 9356 00ac 17000000 .quad .LCFI4-.Ltext0
+
GAS LISTING /tmp/ccPaCTqg.s page 308
+
+
+ 9356 00000000
+ 9357 00b4 1A000000 .quad .LCFI5-.Ltext0
+ 9357 00000000
+ 9358 00bc 0200 .value 0x2
+ 9359 00be 77 .byte 0x77
+ 9360 00bf 10 .sleb128 16
+ 9361 00c0 1A000000 .quad .LCFI5-.Ltext0
+ 9361 00000000
+ 9362 00c8 21000000 .quad .LFE582-.Ltext0
+ 9362 00000000
+ 9363 00d0 0200 .value 0x2
+ 9364 00d2 76 .byte 0x76
+ 9365 00d3 10 .sleb128 16
+ 9366 00d4 00000000 .quad 0x0
+ 9366 00000000
+ 9367 00dc 00000000 .quad 0x0
+ 9367 00000000
+ 9368 .LLST3:
+ 9369 00e4 21000000 .quad .LFB583-.Ltext0
+ 9369 00000000
+ 9370 00ec 22000000 .quad .LCFI6-.Ltext0
+ 9370 00000000
+ 9371 00f4 0200 .value 0x2
+ 9372 00f6 77 .byte 0x77
+ 9373 00f7 08 .sleb128 8
+ 9374 00f8 22000000 .quad .LCFI6-.Ltext0
+ 9374 00000000
+ 9375 0100 25000000 .quad .LCFI7-.Ltext0
+ 9375 00000000
+ 9376 0108 0200 .value 0x2
+ 9377 010a 77 .byte 0x77
+ 9378 010b 10 .sleb128 16
+ 9379 010c 25000000 .quad .LCFI7-.Ltext0
+ 9379 00000000
+ 9380 0114 2C000000 .quad .LFE583-.Ltext0
+ 9380 00000000
+ 9381 011c 0200 .value 0x2
+ 9382 011e 76 .byte 0x76
+ 9383 011f 10 .sleb128 16
+ 9384 0120 00000000 .quad 0x0
+ 9384 00000000
+ 9385 0128 00000000 .quad 0x0
+ 9385 00000000
+ 9386 .LLST4:
+ 9387 0130 2C000000 .quad .LFB585-.Ltext0
+ 9387 00000000
+ 9388 0138 2D000000 .quad .LCFI8-.Ltext0
+ 9388 00000000
+ 9389 0140 0200 .value 0x2
+ 9390 0142 77 .byte 0x77
+ 9391 0143 08 .sleb128 8
+ 9392 0144 2D000000 .quad .LCFI8-.Ltext0
+ 9392 00000000
+ 9393 014c 30000000 .quad .LCFI9-.Ltext0
+ 9393 00000000
+ 9394 0154 0200 .value 0x2
+ 9395 0156 77 .byte 0x77
+
GAS LISTING /tmp/ccPaCTqg.s page 309
+
+
+ 9396 0157 10 .sleb128 16
+ 9397 0158 30000000 .quad .LCFI9-.Ltext0
+ 9397 00000000
+ 9398 0160 37000000 .quad .LFE585-.Ltext0
+ 9398 00000000
+ 9399 0168 0200 .value 0x2
+ 9400 016a 76 .byte 0x76
+ 9401 016b 10 .sleb128 16
+ 9402 016c 00000000 .quad 0x0
+ 9402 00000000
+ 9403 0174 00000000 .quad 0x0
+ 9403 00000000
+ 9404 .LLST5:
+ 9405 017c 37000000 .quad .LFB602-.Ltext0
+ 9405 00000000
+ 9406 0184 38000000 .quad .LCFI10-.Ltext0
+ 9406 00000000
+ 9407 018c 0200 .value 0x2
+ 9408 018e 77 .byte 0x77
+ 9409 018f 08 .sleb128 8
+ 9410 0190 38000000 .quad .LCFI10-.Ltext0
+ 9410 00000000
+ 9411 0198 3B000000 .quad .LCFI11-.Ltext0
+ 9411 00000000
+ 9412 01a0 0200 .value 0x2
+ 9413 01a2 77 .byte 0x77
+ 9414 01a3 10 .sleb128 16
+ 9415 01a4 3B000000 .quad .LCFI11-.Ltext0
+ 9415 00000000
+ 9416 01ac 4B000000 .quad .LFE602-.Ltext0
+ 9416 00000000
+ 9417 01b4 0200 .value 0x2
+ 9418 01b6 76 .byte 0x76
+ 9419 01b7 10 .sleb128 16
+ 9420 01b8 00000000 .quad 0x0
+ 9420 00000000
+ 9421 01c0 00000000 .quad 0x0
+ 9421 00000000
+ 9422 .LLST6:
+ 9423 01c8 4B000000 .quad .LFB656-.Ltext0
+ 9423 00000000
+ 9424 01d0 4C000000 .quad .LCFI12-.Ltext0
+ 9424 00000000
+ 9425 01d8 0200 .value 0x2
+ 9426 01da 77 .byte 0x77
+ 9427 01db 08 .sleb128 8
+ 9428 01dc 4C000000 .quad .LCFI12-.Ltext0
+ 9428 00000000
+ 9429 01e4 4F000000 .quad .LCFI13-.Ltext0
+ 9429 00000000
+ 9430 01ec 0200 .value 0x2
+ 9431 01ee 77 .byte 0x77
+ 9432 01ef 10 .sleb128 16
+ 9433 01f0 4F000000 .quad .LCFI13-.Ltext0
+ 9433 00000000
+ 9434 01f8 C3180000 .quad .LFE656-.Ltext0
+ 9434 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 310
+
+
+ 9435 0200 0200 .value 0x2
+ 9436 0202 76 .byte 0x76
+ 9437 0203 10 .sleb128 16
+ 9438 0204 00000000 .quad 0x0
+ 9438 00000000
+ 9439 020c 00000000 .quad 0x0
+ 9439 00000000
+ 9440 .LLST7:
+ 9441 0214 C3180000 .quad .LFB657-.Ltext0
+ 9441 00000000
+ 9442 021c C4180000 .quad .LCFI14-.Ltext0
+ 9442 00000000
+ 9443 0224 0200 .value 0x2
+ 9444 0226 77 .byte 0x77
+ 9445 0227 08 .sleb128 8
+ 9446 0228 C4180000 .quad .LCFI14-.Ltext0
+ 9446 00000000
+ 9447 0230 C7180000 .quad .LCFI15-.Ltext0
+ 9447 00000000
+ 9448 0238 0200 .value 0x2
+ 9449 023a 77 .byte 0x77
+ 9450 023b 10 .sleb128 16
+ 9451 023c C7180000 .quad .LCFI15-.Ltext0
+ 9451 00000000
+ 9452 0244 00400000 .quad .LFE657-.Ltext0
+ 9452 00000000
+ 9453 024c 0200 .value 0x2
+ 9454 024e 76 .byte 0x76
+ 9455 024f 10 .sleb128 16
+ 9456 0250 00000000 .quad 0x0
+ 9456 00000000
+ 9457 0258 00000000 .quad 0x0
+ 9457 00000000
+ 9458 .LLST8:
+ 9459 0260 00400000 .quad .LFB658-.Ltext0
+ 9459 00000000
+ 9460 0268 01400000 .quad .LCFI16-.Ltext0
+ 9460 00000000
+ 9461 0270 0200 .value 0x2
+ 9462 0272 77 .byte 0x77
+ 9463 0273 08 .sleb128 8
+ 9464 0274 01400000 .quad .LCFI16-.Ltext0
+ 9464 00000000
+ 9465 027c 04400000 .quad .LCFI17-.Ltext0
+ 9465 00000000
+ 9466 0284 0200 .value 0x2
+ 9467 0286 77 .byte 0x77
+ 9468 0287 10 .sleb128 16
+ 9469 0288 04400000 .quad .LCFI17-.Ltext0
+ 9469 00000000
+ 9470 0290 B6610000 .quad .LFE658-.Ltext0
+ 9470 00000000
+ 9471 0298 0200 .value 0x2
+ 9472 029a 76 .byte 0x76
+ 9473 029b 10 .sleb128 16
+ 9474 029c 00000000 .quad 0x0
+ 9474 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 311
+
+
+ 9475 02a4 00000000 .quad 0x0
+ 9475 00000000
+ 9476 .LLST9:
+ 9477 02ac B6610000 .quad .LFB659-.Ltext0
+ 9477 00000000
+ 9478 02b4 B7610000 .quad .LCFI18-.Ltext0
+ 9478 00000000
+ 9479 02bc 0200 .value 0x2
+ 9480 02be 77 .byte 0x77
+ 9481 02bf 08 .sleb128 8
+ 9482 02c0 B7610000 .quad .LCFI18-.Ltext0
+ 9482 00000000
+ 9483 02c8 BA610000 .quad .LCFI19-.Ltext0
+ 9483 00000000
+ 9484 02d0 0200 .value 0x2
+ 9485 02d2 77 .byte 0x77
+ 9486 02d3 10 .sleb128 16
+ 9487 02d4 BA610000 .quad .LCFI19-.Ltext0
+ 9487 00000000
+ 9488 02dc 6C620000 .quad .LFE659-.Ltext0
+ 9488 00000000
+ 9489 02e4 0200 .value 0x2
+ 9490 02e6 76 .byte 0x76
+ 9491 02e7 10 .sleb128 16
+ 9492 02e8 00000000 .quad 0x0
+ 9492 00000000
+ 9493 02f0 00000000 .quad 0x0
+ 9493 00000000
+ 9494 .LLST10:
+ 9495 02f8 6C620000 .quad .LFB660-.Ltext0
+ 9495 00000000
+ 9496 0300 6D620000 .quad .LCFI20-.Ltext0
+ 9496 00000000
+ 9497 0308 0200 .value 0x2
+ 9498 030a 77 .byte 0x77
+ 9499 030b 08 .sleb128 8
+ 9500 030c 6D620000 .quad .LCFI20-.Ltext0
+ 9500 00000000
+ 9501 0314 70620000 .quad .LCFI21-.Ltext0
+ 9501 00000000
+ 9502 031c 0200 .value 0x2
+ 9503 031e 77 .byte 0x77
+ 9504 031f 10 .sleb128 16
+ 9505 0320 70620000 .quad .LCFI21-.Ltext0
+ 9505 00000000
+ 9506 0328 96620000 .quad .LFE660-.Ltext0
+ 9506 00000000
+ 9507 0330 0200 .value 0x2
+ 9508 0332 76 .byte 0x76
+ 9509 0333 10 .sleb128 16
+ 9510 0334 00000000 .quad 0x0
+ 9510 00000000
+ 9511 033c 00000000 .quad 0x0
+ 9511 00000000
+ 9512 .LLST11:
+ 9513 0344 96620000 .quad .LFB661-.Ltext0
+ 9513 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 312
+
+
+ 9514 034c 97620000 .quad .LCFI22-.Ltext0
+ 9514 00000000
+ 9515 0354 0200 .value 0x2
+ 9516 0356 77 .byte 0x77
+ 9517 0357 08 .sleb128 8
+ 9518 0358 97620000 .quad .LCFI22-.Ltext0
+ 9518 00000000
+ 9519 0360 9A620000 .quad .LCFI23-.Ltext0
+ 9519 00000000
+ 9520 0368 0200 .value 0x2
+ 9521 036a 77 .byte 0x77
+ 9522 036b 10 .sleb128 16
+ 9523 036c 9A620000 .quad .LCFI23-.Ltext0
+ 9523 00000000
+ 9524 0374 C0620000 .quad .LFE661-.Ltext0
+ 9524 00000000
+ 9525 037c 0200 .value 0x2
+ 9526 037e 76 .byte 0x76
+ 9527 037f 10 .sleb128 16
+ 9528 0380 00000000 .quad 0x0
+ 9528 00000000
+ 9529 0388 00000000 .quad 0x0
+ 9529 00000000
+ 9530 .LLST12:
+ 9531 0390 C0620000 .quad .LFB662-.Ltext0
+ 9531 00000000
+ 9532 0398 C1620000 .quad .LCFI24-.Ltext0
+ 9532 00000000
+ 9533 03a0 0200 .value 0x2
+ 9534 03a2 77 .byte 0x77
+ 9535 03a3 08 .sleb128 8
+ 9536 03a4 C1620000 .quad .LCFI24-.Ltext0
+ 9536 00000000
+ 9537 03ac C4620000 .quad .LCFI25-.Ltext0
+ 9537 00000000
+ 9538 03b4 0200 .value 0x2
+ 9539 03b6 77 .byte 0x77
+ 9540 03b7 10 .sleb128 16
+ 9541 03b8 C4620000 .quad .LCFI25-.Ltext0
+ 9541 00000000
+ 9542 03c0 EA620000 .quad .LFE662-.Ltext0
+ 9542 00000000
+ 9543 03c8 0200 .value 0x2
+ 9544 03ca 76 .byte 0x76
+ 9545 03cb 10 .sleb128 16
+ 9546 03cc 00000000 .quad 0x0
+ 9546 00000000
+ 9547 03d4 00000000 .quad 0x0
+ 9547 00000000
+ 9548 .LLST13:
+ 9549 03dc EA620000 .quad .LFB666-.Ltext0
+ 9549 00000000
+ 9550 03e4 EB620000 .quad .LCFI26-.Ltext0
+ 9550 00000000
+ 9551 03ec 0200 .value 0x2
+ 9552 03ee 77 .byte 0x77
+ 9553 03ef 08 .sleb128 8
+
GAS LISTING /tmp/ccPaCTqg.s page 313
+
+
+ 9554 03f0 EB620000 .quad .LCFI26-.Ltext0
+ 9554 00000000
+ 9555 03f8 EE620000 .quad .LCFI27-.Ltext0
+ 9555 00000000
+ 9556 0400 0200 .value 0x2
+ 9557 0402 77 .byte 0x77
+ 9558 0403 10 .sleb128 16
+ 9559 0404 EE620000 .quad .LCFI27-.Ltext0
+ 9559 00000000
+ 9560 040c 9A690000 .quad .LFE666-.Ltext0
+ 9560 00000000
+ 9561 0414 0200 .value 0x2
+ 9562 0416 76 .byte 0x76
+ 9563 0417 10 .sleb128 16
+ 9564 0418 00000000 .quad 0x0
+ 9564 00000000
+ 9565 0420 00000000 .quad 0x0
+ 9565 00000000
+ 9566 .LLST14:
+ 9567 0428 9A690000 .quad .LFB670-.Ltext0
+ 9567 00000000
+ 9568 0430 9B690000 .quad .LCFI28-.Ltext0
+ 9568 00000000
+ 9569 0438 0200 .value 0x2
+ 9570 043a 77 .byte 0x77
+ 9571 043b 08 .sleb128 8
+ 9572 043c 9B690000 .quad .LCFI28-.Ltext0
+ 9572 00000000
+ 9573 0444 9E690000 .quad .LCFI29-.Ltext0
+ 9573 00000000
+ 9574 044c 0200 .value 0x2
+ 9575 044e 77 .byte 0x77
+ 9576 044f 10 .sleb128 16
+ 9577 0450 9E690000 .quad .LCFI29-.Ltext0
+ 9577 00000000
+ 9578 0458 54700000 .quad .LFE670-.Ltext0
+ 9578 00000000
+ 9579 0460 0200 .value 0x2
+ 9580 0462 76 .byte 0x76
+ 9581 0463 10 .sleb128 16
+ 9582 0464 00000000 .quad 0x0
+ 9582 00000000
+ 9583 046c 00000000 .quad 0x0
+ 9583 00000000
+ 9584 .LLST15:
+ 9585 0474 54700000 .quad .LFB671-.Ltext0
+ 9585 00000000
+ 9586 047c 55700000 .quad .LCFI30-.Ltext0
+ 9586 00000000
+ 9587 0484 0200 .value 0x2
+ 9588 0486 77 .byte 0x77
+ 9589 0487 08 .sleb128 8
+ 9590 0488 55700000 .quad .LCFI30-.Ltext0
+ 9590 00000000
+ 9591 0490 58700000 .quad .LCFI31-.Ltext0
+ 9591 00000000
+ 9592 0498 0200 .value 0x2
+
GAS LISTING /tmp/ccPaCTqg.s page 314
+
+
+ 9593 049a 77 .byte 0x77
+ 9594 049b 10 .sleb128 16
+ 9595 049c 58700000 .quad .LCFI31-.Ltext0
+ 9595 00000000
+ 9596 04a4 5E700000 .quad .LFE671-.Ltext0
+ 9596 00000000
+ 9597 04ac 0200 .value 0x2
+ 9598 04ae 76 .byte 0x76
+ 9599 04af 10 .sleb128 16
+ 9600 04b0 00000000 .quad 0x0
+ 9600 00000000
+ 9601 04b8 00000000 .quad 0x0
+ 9601 00000000
+ 9602 .LLST16:
+ 9603 04c0 5E700000 .quad .LFB672-.Ltext0
+ 9603 00000000
+ 9604 04c8 5F700000 .quad .LCFI32-.Ltext0
+ 9604 00000000
+ 9605 04d0 0200 .value 0x2
+ 9606 04d2 77 .byte 0x77
+ 9607 04d3 08 .sleb128 8
+ 9608 04d4 5F700000 .quad .LCFI32-.Ltext0
+ 9608 00000000
+ 9609 04dc 62700000 .quad .LCFI33-.Ltext0
+ 9609 00000000
+ 9610 04e4 0200 .value 0x2
+ 9611 04e6 77 .byte 0x77
+ 9612 04e7 10 .sleb128 16
+ 9613 04e8 62700000 .quad .LCFI33-.Ltext0
+ 9613 00000000
+ 9614 04f0 69700000 .quad .LFE672-.Ltext0
+ 9614 00000000
+ 9615 04f8 0200 .value 0x2
+ 9616 04fa 76 .byte 0x76
+ 9617 04fb 10 .sleb128 16
+ 9618 04fc 00000000 .quad 0x0
+ 9618 00000000
+ 9619 0504 00000000 .quad 0x0
+ 9619 00000000
+ 9620 .LLST17:
+ 9621 050c 69700000 .quad .LFB673-.Ltext0
+ 9621 00000000
+ 9622 0514 6A700000 .quad .LCFI34-.Ltext0
+ 9622 00000000
+ 9623 051c 0200 .value 0x2
+ 9624 051e 77 .byte 0x77
+ 9625 051f 08 .sleb128 8
+ 9626 0520 6A700000 .quad .LCFI34-.Ltext0
+ 9626 00000000
+ 9627 0528 6D700000 .quad .LCFI35-.Ltext0
+ 9627 00000000
+ 9628 0530 0200 .value 0x2
+ 9629 0532 77 .byte 0x77
+ 9630 0533 10 .sleb128 16
+ 9631 0534 6D700000 .quad .LCFI35-.Ltext0
+ 9631 00000000
+ 9632 053c 74700000 .quad .LFE673-.Ltext0
+
GAS LISTING /tmp/ccPaCTqg.s page 315
+
+
+ 9632 00000000
+ 9633 0544 0200 .value 0x2
+ 9634 0546 76 .byte 0x76
+ 9635 0547 10 .sleb128 16
+ 9636 0548 00000000 .quad 0x0
+ 9636 00000000
+ 9637 0550 00000000 .quad 0x0
+ 9637 00000000
+ 9638 .LLST18:
+ 9639 0558 74700000 .quad .LFB674-.Ltext0
+ 9639 00000000
+ 9640 0560 75700000 .quad .LCFI36-.Ltext0
+ 9640 00000000
+ 9641 0568 0200 .value 0x2
+ 9642 056a 77 .byte 0x77
+ 9643 056b 08 .sleb128 8
+ 9644 056c 75700000 .quad .LCFI36-.Ltext0
+ 9644 00000000
+ 9645 0574 78700000 .quad .LCFI37-.Ltext0
+ 9645 00000000
+ 9646 057c 0200 .value 0x2
+ 9647 057e 77 .byte 0x77
+ 9648 057f 10 .sleb128 16
+ 9649 0580 78700000 .quad .LCFI37-.Ltext0
+ 9649 00000000
+ 9650 0588 5D710000 .quad .LFE674-.Ltext0
+ 9650 00000000
+ 9651 0590 0200 .value 0x2
+ 9652 0592 76 .byte 0x76
+ 9653 0593 10 .sleb128 16
+ 9654 0594 00000000 .quad 0x0
+ 9654 00000000
+ 9655 059c 00000000 .quad 0x0
+ 9655 00000000
+ 9656 .LLST19:
+ 9657 05a4 5D710000 .quad .LFB675-.Ltext0
+ 9657 00000000
+ 9658 05ac 5E710000 .quad .LCFI38-.Ltext0
+ 9658 00000000
+ 9659 05b4 0200 .value 0x2
+ 9660 05b6 77 .byte 0x77
+ 9661 05b7 08 .sleb128 8
+ 9662 05b8 5E710000 .quad .LCFI38-.Ltext0
+ 9662 00000000
+ 9663 05c0 61710000 .quad .LCFI39-.Ltext0
+ 9663 00000000
+ 9664 05c8 0200 .value 0x2
+ 9665 05ca 77 .byte 0x77
+ 9666 05cb 10 .sleb128 16
+ 9667 05cc 61710000 .quad .LCFI39-.Ltext0
+ 9667 00000000
+ 9668 05d4 20720000 .quad .LFE675-.Ltext0
+ 9668 00000000
+ 9669 05dc 0200 .value 0x2
+ 9670 05de 76 .byte 0x76
+ 9671 05df 10 .sleb128 16
+ 9672 05e0 00000000 .quad 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 316
+
+
+ 9672 00000000
+ 9673 05e8 00000000 .quad 0x0
+ 9673 00000000
+ 9674 .LLST20:
+ 9675 05f0 20720000 .quad .LFB676-.Ltext0
+ 9675 00000000
+ 9676 05f8 21720000 .quad .LCFI40-.Ltext0
+ 9676 00000000
+ 9677 0600 0200 .value 0x2
+ 9678 0602 77 .byte 0x77
+ 9679 0603 08 .sleb128 8
+ 9680 0604 21720000 .quad .LCFI40-.Ltext0
+ 9680 00000000
+ 9681 060c 24720000 .quad .LCFI41-.Ltext0
+ 9681 00000000
+ 9682 0614 0200 .value 0x2
+ 9683 0616 77 .byte 0x77
+ 9684 0617 10 .sleb128 16
+ 9685 0618 24720000 .quad .LCFI41-.Ltext0
+ 9685 00000000
+ 9686 0620 E3720000 .quad .LFE676-.Ltext0
+ 9686 00000000
+ 9687 0628 0200 .value 0x2
+ 9688 062a 76 .byte 0x76
+ 9689 062b 10 .sleb128 16
+ 9690 062c 00000000 .quad 0x0
+ 9690 00000000
+ 9691 0634 00000000 .quad 0x0
+ 9691 00000000
+ 9692 .LLST21:
+ 9693 063c E3720000 .quad .LFB677-.Ltext0
+ 9693 00000000
+ 9694 0644 E4720000 .quad .LCFI42-.Ltext0
+ 9694 00000000
+ 9695 064c 0200 .value 0x2
+ 9696 064e 77 .byte 0x77
+ 9697 064f 08 .sleb128 8
+ 9698 0650 E4720000 .quad .LCFI42-.Ltext0
+ 9698 00000000
+ 9699 0658 E7720000 .quad .LCFI43-.Ltext0
+ 9699 00000000
+ 9700 0660 0200 .value 0x2
+ 9701 0662 77 .byte 0x77
+ 9702 0663 10 .sleb128 16
+ 9703 0664 E7720000 .quad .LCFI43-.Ltext0
+ 9703 00000000
+ 9704 066c A6730000 .quad .LFE677-.Ltext0
+ 9704 00000000
+ 9705 0674 0200 .value 0x2
+ 9706 0676 76 .byte 0x76
+ 9707 0677 10 .sleb128 16
+ 9708 0678 00000000 .quad 0x0
+ 9708 00000000
+ 9709 0680 00000000 .quad 0x0
+ 9709 00000000
+ 9710 .LLST22:
+ 9711 0688 A6730000 .quad .LFB678-.Ltext0
+
GAS LISTING /tmp/ccPaCTqg.s page 317
+
+
+ 9711 00000000
+ 9712 0690 A7730000 .quad .LCFI44-.Ltext0
+ 9712 00000000
+ 9713 0698 0200 .value 0x2
+ 9714 069a 77 .byte 0x77
+ 9715 069b 08 .sleb128 8
+ 9716 069c A7730000 .quad .LCFI44-.Ltext0
+ 9716 00000000
+ 9717 06a4 AA730000 .quad .LCFI45-.Ltext0
+ 9717 00000000
+ 9718 06ac 0200 .value 0x2
+ 9719 06ae 77 .byte 0x77
+ 9720 06af 10 .sleb128 16
+ 9721 06b0 AA730000 .quad .LCFI45-.Ltext0
+ 9721 00000000
+ 9722 06b8 4E760000 .quad .LFE678-.Ltext0
+ 9722 00000000
+ 9723 06c0 0200 .value 0x2
+ 9724 06c2 76 .byte 0x76
+ 9725 06c3 10 .sleb128 16
+ 9726 06c4 00000000 .quad 0x0
+ 9726 00000000
+ 9727 06cc 00000000 .quad 0x0
+ 9727 00000000
+ 9728 .LLST23:
+ 9729 06d4 4E760000 .quad .LFB679-.Ltext0
+ 9729 00000000
+ 9730 06dc 4F760000 .quad .LCFI46-.Ltext0
+ 9730 00000000
+ 9731 06e4 0200 .value 0x2
+ 9732 06e6 77 .byte 0x77
+ 9733 06e7 08 .sleb128 8
+ 9734 06e8 4F760000 .quad .LCFI46-.Ltext0
+ 9734 00000000
+ 9735 06f0 52760000 .quad .LCFI47-.Ltext0
+ 9735 00000000
+ 9736 06f8 0200 .value 0x2
+ 9737 06fa 77 .byte 0x77
+ 9738 06fb 10 .sleb128 16
+ 9739 06fc 52760000 .quad .LCFI47-.Ltext0
+ 9739 00000000
+ 9740 0704 1F770000 .quad .LFE679-.Ltext0
+ 9740 00000000
+ 9741 070c 0200 .value 0x2
+ 9742 070e 76 .byte 0x76
+ 9743 070f 10 .sleb128 16
+ 9744 0710 00000000 .quad 0x0
+ 9744 00000000
+ 9745 0718 00000000 .quad 0x0
+ 9745 00000000
+ 9746 .file 4 "/usr/include/stdint.h"
+ 9747 .file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 9748 .file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 9749 .file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 9750 .file 8 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 9751 .file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 9752 .file 10 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+
GAS LISTING /tmp/ccPaCTqg.s page 318
+
+
+ 9753 .section .debug_info
+ 9754 0000 A48F0000 .long 0x8fa4
+ 9755 0004 0200 .value 0x2
+ 9756 0006 00000000 .long .Ldebug_abbrev0
+ 9757 000a 08 .byte 0x8
+ 9758 000b 01 .uleb128 0x1
+ 9759 000c 00000000 .long .LASF399
+ 9760 0010 01 .byte 0x1
+ 9761 0011 00000000 .long .LASF400
+ 9762 0015 00000000 .long .LASF401
+ 9763 0019 00000000 .quad .Ltext0
+ 9763 00000000
+ 9764 0021 00000000 .quad .Letext0
+ 9764 00000000
+ 9765 0029 00000000 .long .Ldebug_line0
+ 9766 002d 02 .uleb128 0x2
+ 9767 002e 01 .byte 0x1
+ 9768 002f 06 .byte 0x6
+ 9769 0030 00000000 .long .LASF0
+ 9770 0034 02 .uleb128 0x2
+ 9771 0035 02 .byte 0x2
+ 9772 0036 05 .byte 0x5
+ 9773 0037 00000000 .long .LASF1
+ 9774 003b 03 .uleb128 0x3
+ 9775 003c 00000000 .long .LASF3
+ 9776 0040 04 .byte 0x4
+ 9777 0041 27 .byte 0x27
+ 9778 0042 46000000 .long 0x46
+ 9779 0046 04 .uleb128 0x4
+ 9780 0047 04 .byte 0x4
+ 9781 0048 05 .byte 0x5
+ 9782 0049 696E7400 .string "int"
+ 9783 004d 02 .uleb128 0x2
+ 9784 004e 08 .byte 0x8
+ 9785 004f 05 .byte 0x5
+ 9786 0050 00000000 .long .LASF2
+ 9787 0054 03 .uleb128 0x3
+ 9788 0055 00000000 .long .LASF4
+ 9789 0059 04 .byte 0x4
+ 9790 005a 31 .byte 0x31
+ 9791 005b 5F000000 .long 0x5f
+ 9792 005f 02 .uleb128 0x2
+ 9793 0060 01 .byte 0x1
+ 9794 0061 08 .byte 0x8
+ 9795 0062 00000000 .long .LASF5
+ 9796 0066 02 .uleb128 0x2
+ 9797 0067 02 .byte 0x2
+ 9798 0068 07 .byte 0x7
+ 9799 0069 00000000 .long .LASF6
+ 9800 006d 03 .uleb128 0x3
+ 9801 006e 00000000 .long .LASF7
+ 9802 0072 04 .byte 0x4
+ 9803 0073 34 .byte 0x34
+ 9804 0074 78000000 .long 0x78
+ 9805 0078 02 .uleb128 0x2
+ 9806 0079 04 .byte 0x4
+ 9807 007a 07 .byte 0x7
+
GAS LISTING /tmp/ccPaCTqg.s page 319
+
+
+ 9808 007b 00000000 .long .LASF8
+ 9809 007f 03 .uleb128 0x3
+ 9810 0080 00000000 .long .LASF9
+ 9811 0084 04 .byte 0x4
+ 9812 0085 38 .byte 0x38
+ 9813 0086 8A000000 .long 0x8a
+ 9814 008a 02 .uleb128 0x2
+ 9815 008b 08 .byte 0x8
+ 9816 008c 07 .byte 0x7
+ 9817 008d 00000000 .long .LASF10
+ 9818 0091 03 .uleb128 0x3
+ 9819 0092 00000000 .long .LASF11
+ 9820 0096 05 .byte 0x5
+ 9821 0097 30 .byte 0x30
+ 9822 0098 6D000000 .long 0x6d
+ 9823 009c 05 .uleb128 0x5
+ 9824 009d 08 .byte 0x8
+ 9825 009e 07 .byte 0x7
+ 9826 009f 02 .uleb128 0x2
+ 9827 00a0 01 .byte 0x1
+ 9828 00a1 06 .byte 0x6
+ 9829 00a2 00000000 .long .LASF12
+ 9830 00a6 02 .uleb128 0x2
+ 9831 00a7 08 .byte 0x8
+ 9832 00a8 05 .byte 0x5
+ 9833 00a9 00000000 .long .LASF13
+ 9834 00ad 02 .uleb128 0x2
+ 9835 00ae 04 .byte 0x4
+ 9836 00af 04 .byte 0x4
+ 9837 00b0 00000000 .long .LASF14
+ 9838 00b4 06 .uleb128 0x6
+ 9839 00b5 46000000 .long 0x46
+ 9840 00b9 07 .uleb128 0x7
+ 9841 00ba 08 .byte 0x8
+ 9842 00bb BF000000 .long 0xbf
+ 9843 00bf 06 .uleb128 0x6
+ 9844 00c0 9F000000 .long 0x9f
+ 9845 00c4 08 .uleb128 0x8
+ 9846 00c5 08 .byte 0x8
+ 9847 00c6 07 .uleb128 0x7
+ 9848 00c7 08 .byte 0x8
+ 9849 00c8 9F000000 .long 0x9f
+ 9850 00cc 09 .uleb128 0x9
+ 9851 00cd 9F000000 .long 0x9f
+ 9852 00d1 DC000000 .long 0xdc
+ 9853 00d5 0A .uleb128 0xa
+ 9854 00d6 9C000000 .long 0x9c
+ 9855 00da 27 .byte 0x27
+ 9856 00db 00 .byte 0x0
+ 9857 00dc 02 .uleb128 0x2
+ 9858 00dd 08 .byte 0x8
+ 9859 00de 07 .byte 0x7
+ 9860 00df 00000000 .long .LASF15
+ 9861 00e3 07 .uleb128 0x7
+ 9862 00e4 08 .byte 0x8
+ 9863 00e5 E9000000 .long 0xe9
+ 9864 00e9 0B .uleb128 0xb
+
GAS LISTING /tmp/ccPaCTqg.s page 320
+
+
+ 9865 00ea 02 .uleb128 0x2
+ 9866 00eb 08 .byte 0x8
+ 9867 00ec 04 .byte 0x4
+ 9868 00ed 00000000 .long .LASF16
+ 9869 00f1 0C .uleb128 0xc
+ 9870 00f2 01 .byte 0x1
+ 9871 00f3 A6000000 .long 0xa6
+ 9872 00f7 0C .uleb128 0xc
+ 9873 00f8 01 .byte 0x1
+ 9874 00f9 EA000000 .long 0xea
+ 9875 00fd 03 .uleb128 0x3
+ 9876 00fe 00000000 .long .LASF17
+ 9877 0102 01 .byte 0x1
+ 9878 0103 26 .byte 0x26
+ 9879 0104 08010000 .long 0x108
+ 9880 0108 0C .uleb128 0xc
+ 9881 0109 01 .byte 0x1
+ 9882 010a 54000000 .long 0x54
+ 9883 010e 0C .uleb128 0xc
+ 9884 010f 01 .byte 0x1
+ 9885 0110 3B000000 .long 0x3b
+ 9886 0114 0C .uleb128 0xc
+ 9887 0115 01 .byte 0x1
+ 9888 0116 9F000000 .long 0x9f
+ 9889 011a 0D .uleb128 0xd
+ 9890 011b 04 .byte 0x4
+ 9891 011c 06 .byte 0x6
+ 9892 011d D6 .byte 0xd6
+ 9893 011e 9B010000 .long 0x19b
+ 9894 0122 0E .uleb128 0xe
+ 9895 0123 00000000 .long .LASF18
+ 9896 0127 7F .sleb128 -1
+ 9897 0128 0E .uleb128 0xe
+ 9898 0129 00000000 .long .LASF19
+ 9899 012d 00 .sleb128 0
+ 9900 012e 0E .uleb128 0xe
+ 9901 012f 00000000 .long .LASF20
+ 9902 0133 01 .sleb128 1
+ 9903 0134 0E .uleb128 0xe
+ 9904 0135 00000000 .long .LASF21
+ 9905 0139 02 .sleb128 2
+ 9906 013a 0E .uleb128 0xe
+ 9907 013b 00000000 .long .LASF22
+ 9908 013f 03 .sleb128 3
+ 9909 0140 0E .uleb128 0xe
+ 9910 0141 00000000 .long .LASF23
+ 9911 0145 04 .sleb128 4
+ 9912 0146 0E .uleb128 0xe
+ 9913 0147 00000000 .long .LASF24
+ 9914 014b 05 .sleb128 5
+ 9915 014c 0E .uleb128 0xe
+ 9916 014d 00000000 .long .LASF25
+ 9917 0151 06 .sleb128 6
+ 9918 0152 0E .uleb128 0xe
+ 9919 0153 00000000 .long .LASF26
+ 9920 0157 07 .sleb128 7
+ 9921 0158 0E .uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s page 321
+
+
+ 9922 0159 00000000 .long .LASF27
+ 9923 015d 08 .sleb128 8
+ 9924 015e 0E .uleb128 0xe
+ 9925 015f 00000000 .long .LASF28
+ 9926 0163 09 .sleb128 9
+ 9927 0164 0E .uleb128 0xe
+ 9928 0165 00000000 .long .LASF29
+ 9929 0169 0A .sleb128 10
+ 9930 016a 0E .uleb128 0xe
+ 9931 016b 00000000 .long .LASF30
+ 9932 016f 0B .sleb128 11
+ 9933 0170 0E .uleb128 0xe
+ 9934 0171 00000000 .long .LASF31
+ 9935 0175 0C .sleb128 12
+ 9936 0176 0E .uleb128 0xe
+ 9937 0177 00000000 .long .LASF32
+ 9938 017b 0D .sleb128 13
+ 9939 017c 0E .uleb128 0xe
+ 9940 017d 00000000 .long .LASF33
+ 9941 0181 0E .sleb128 14
+ 9942 0182 0E .uleb128 0xe
+ 9943 0183 00000000 .long .LASF34
+ 9944 0187 0F .sleb128 15
+ 9945 0188 0E .uleb128 0xe
+ 9946 0189 00000000 .long .LASF35
+ 9947 018d 10 .sleb128 16
+ 9948 018e 0E .uleb128 0xe
+ 9949 018f 00000000 .long .LASF36
+ 9950 0193 11 .sleb128 17
+ 9951 0194 0E .uleb128 0xe
+ 9952 0195 00000000 .long .LASF37
+ 9953 0199 12 .sleb128 18
+ 9954 019a 00 .byte 0x0
+ 9955 019b 0F .uleb128 0xf
+ 9956 019c 04 .byte 0x4
+ 9957 019d 06 .byte 0x6
+ 9958 019e 6701 .value 0x167
+ 9959 01a0 C9010000 .long 0x1c9
+ 9960 01a4 0E .uleb128 0xe
+ 9961 01a5 00000000 .long .LASF38
+ 9962 01a9 00 .sleb128 0
+ 9963 01aa 0E .uleb128 0xe
+ 9964 01ab 00000000 .long .LASF39
+ 9965 01af 01 .sleb128 1
+ 9966 01b0 0E .uleb128 0xe
+ 9967 01b1 00000000 .long .LASF40
+ 9968 01b5 02 .sleb128 2
+ 9969 01b6 0E .uleb128 0xe
+ 9970 01b7 00000000 .long .LASF41
+ 9971 01bb 03 .sleb128 3
+ 9972 01bc 0E .uleb128 0xe
+ 9973 01bd 00000000 .long .LASF42
+ 9974 01c1 04 .sleb128 4
+ 9975 01c2 0E .uleb128 0xe
+ 9976 01c3 00000000 .long .LASF43
+ 9977 01c7 05 .sleb128 5
+ 9978 01c8 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 322
+
+
+ 9979 01c9 03 .uleb128 0x3
+ 9980 01ca 00000000 .long .LASF44
+ 9981 01ce 07 .byte 0x7
+ 9982 01cf 3B .byte 0x3b
+ 9983 01d0 FD000000 .long 0xfd
+ 9984 01d4 03 .uleb128 0x3
+ 9985 01d5 00000000 .long .LASF45
+ 9986 01d9 07 .byte 0x7
+ 9987 01da 43 .byte 0x43
+ 9988 01db DF010000 .long 0x1df
+ 9989 01df 10 .uleb128 0x10
+ 9990 01e0 00000000 .long .LASF45
+ 9991 01e4 08 .byte 0x8
+ 9992 01e5 07 .byte 0x7
+ 9993 01e6 43 .byte 0x43
+ 9994 01e7 08020000 .long 0x208
+ 9995 01eb 11 .uleb128 0x11
+ 9996 01ec 6D616A00 .string "maj"
+ 9997 01f0 07 .byte 0x7
+ 9998 01f1 46 .byte 0x46
+ 9999 01f2 6D000000 .long 0x6d
+ 10000 01f6 02 .byte 0x2
+ 10001 01f7 23 .byte 0x23
+ 10002 01f8 00 .uleb128 0x0
+ 10003 01f9 11 .uleb128 0x11
+ 10004 01fa 6D696E00 .string "min"
+ 10005 01fe 07 .byte 0x7
+ 10006 01ff 47 .byte 0x47
+ 10007 0200 6D000000 .long 0x6d
+ 10008 0204 02 .byte 0x2
+ 10009 0205 23 .byte 0x23
+ 10010 0206 04 .uleb128 0x4
+ 10011 0207 00 .byte 0x0
+ 10012 0208 03 .uleb128 0x3
+ 10013 0209 00000000 .long .LASF46
+ 10014 020d 07 .byte 0x7
+ 10015 020e 52 .byte 0x52
+ 10016 020f 13020000 .long 0x213
+ 10017 0213 10 .uleb128 0x10
+ 10018 0214 00000000 .long .LASF46
+ 10019 0218 40 .byte 0x40
+ 10020 0219 07 .byte 0x7
+ 10021 021a 52 .byte 0x52
+ 10022 021b 90020000 .long 0x290
+ 10023 021f 12 .uleb128 0x12
+ 10024 0220 00000000 .long .LASF47
+ 10025 0224 07 .byte 0x7
+ 10026 0225 5E .byte 0x5e
+ 10027 0226 D4010000 .long 0x1d4
+ 10028 022a 02 .byte 0x2
+ 10029 022b 23 .byte 0x23
+ 10030 022c 00 .uleb128 0x0
+ 10031 022d 12 .uleb128 0x12
+ 10032 022e 00000000 .long .LASF48
+ 10033 0232 07 .byte 0x7
+ 10034 0233 63 .byte 0x63
+ 10035 0234 D4020000 .long 0x2d4
+
GAS LISTING /tmp/ccPaCTqg.s page 323
+
+
+ 10036 0238 02 .byte 0x2
+ 10037 0239 23 .byte 0x23
+ 10038 023a 08 .uleb128 0x8
+ 10039 023b 12 .uleb128 0x12
+ 10040 023c 00000000 .long .LASF49
+ 10041 0240 07 .byte 0x7
+ 10042 0241 65 .byte 0x65
+ 10043 0242 E5020000 .long 0x2e5
+ 10044 0246 02 .byte 0x2
+ 10045 0247 23 .byte 0x23
+ 10046 0248 10 .uleb128 0x10
+ 10047 0249 12 .uleb128 0x12
+ 10048 024a 00000000 .long .LASF50
+ 10049 024e 07 .byte 0x7
+ 10050 024f 67 .byte 0x67
+ 10051 0250 E5020000 .long 0x2e5
+ 10052 0254 02 .byte 0x2
+ 10053 0255 23 .byte 0x23
+ 10054 0256 18 .uleb128 0x18
+ 10055 0257 12 .uleb128 0x12
+ 10056 0258 00000000 .long .LASF51
+ 10057 025c 07 .byte 0x7
+ 10058 025d 69 .byte 0x69
+ 10059 025e 05030000 .long 0x305
+ 10060 0262 02 .byte 0x2
+ 10061 0263 23 .byte 0x23
+ 10062 0264 20 .uleb128 0x20
+ 10063 0265 12 .uleb128 0x12
+ 10064 0266 00000000 .long .LASF52
+ 10065 026a 07 .byte 0x7
+ 10066 026b 6D .byte 0x6d
+ 10067 026c 05030000 .long 0x305
+ 10068 0270 02 .byte 0x2
+ 10069 0271 23 .byte 0x23
+ 10070 0272 28 .uleb128 0x28
+ 10071 0273 12 .uleb128 0x12
+ 10072 0274 00000000 .long .LASF53
+ 10073 0278 07 .byte 0x7
+ 10074 0279 71 .byte 0x71
+ 10075 027a 21030000 .long 0x321
+ 10076 027e 02 .byte 0x2
+ 10077 027f 23 .byte 0x23
+ 10078 0280 30 .uleb128 0x30
+ 10079 0281 12 .uleb128 0x12
+ 10080 0282 00000000 .long .LASF54
+ 10081 0286 07 .byte 0x7
+ 10082 0287 75 .byte 0x75
+ 10083 0288 21030000 .long 0x321
+ 10084 028c 02 .byte 0x2
+ 10085 028d 23 .byte 0x23
+ 10086 028e 38 .uleb128 0x38
+ 10087 028f 00 .byte 0x0
+ 10088 0290 03 .uleb128 0x3
+ 10089 0291 00000000 .long .LASF55
+ 10090 0295 07 .byte 0x7
+ 10091 0296 53 .byte 0x53
+ 10092 0297 9B020000 .long 0x29b
+
GAS LISTING /tmp/ccPaCTqg.s page 324
+
+
+ 10093 029b 13 .uleb128 0x13
+ 10094 029c 00000000 .long .LASF55
+ 10095 02a0 40 .byte 0x40
+ 10096 02a1 07 .byte 0x7
+ 10097 02a2 53 .byte 0x53
+ 10098 02a3 BD020000 .long 0x2bd
+ 10099 02a7 14 .uleb128 0x14
+ 10100 02a8 00000000 .long .LASF47
+ 10101 02ac 07 .byte 0x7
+ 10102 02ad 7F .byte 0x7f
+ 10103 02ae D4010000 .long 0x1d4
+ 10104 02b2 15 .uleb128 0x15
+ 10105 02b3 763100 .string "v1"
+ 10106 02b6 07 .byte 0x7
+ 10107 02b7 80 .byte 0x80
+ 10108 02b8 08020000 .long 0x208
+ 10109 02bc 00 .byte 0x0
+ 10110 02bd 16 .uleb128 0x16
+ 10111 02be 01 .byte 0x1
+ 10112 02bf C9020000 .long 0x2c9
+ 10113 02c3 17 .uleb128 0x17
+ 10114 02c4 C9020000 .long 0x2c9
+ 10115 02c8 00 .byte 0x0
+ 10116 02c9 07 .uleb128 0x7
+ 10117 02ca 08 .byte 0x8
+ 10118 02cb CF020000 .long 0x2cf
+ 10119 02cf 06 .uleb128 0x6
+ 10120 02d0 90020000 .long 0x290
+ 10121 02d4 07 .uleb128 0x7
+ 10122 02d5 08 .byte 0x8
+ 10123 02d6 BD020000 .long 0x2bd
+ 10124 02da 18 .uleb128 0x18
+ 10125 02db 6D000000 .long 0x6d
+ 10126 02df E5020000 .long 0x2e5
+ 10127 02e3 19 .uleb128 0x19
+ 10128 02e4 00 .byte 0x0
+ 10129 02e5 07 .uleb128 0x7
+ 10130 02e6 08 .byte 0x8
+ 10131 02e7 DA020000 .long 0x2da
+ 10132 02eb 1A .uleb128 0x1a
+ 10133 02ec 01 .byte 0x1
+ 10134 02ed 91000000 .long 0x91
+ 10135 02f1 05030000 .long 0x305
+ 10136 02f5 17 .uleb128 0x17
+ 10137 02f6 C4000000 .long 0xc4
+ 10138 02fa 17 .uleb128 0x17
+ 10139 02fb B9000000 .long 0xb9
+ 10140 02ff 17 .uleb128 0x17
+ 10141 0300 6D000000 .long 0x6d
+ 10142 0304 00 .byte 0x0
+ 10143 0305 07 .uleb128 0x7
+ 10144 0306 08 .byte 0x8
+ 10145 0307 EB020000 .long 0x2eb
+ 10146 030b 16 .uleb128 0x16
+ 10147 030c 01 .byte 0x1
+ 10148 030d 21030000 .long 0x321
+ 10149 0311 17 .uleb128 0x17
+
GAS LISTING /tmp/ccPaCTqg.s page 325
+
+
+ 10150 0312 B9000000 .long 0xb9
+ 10151 0316 17 .uleb128 0x17
+ 10152 0317 C6000000 .long 0xc6
+ 10153 031b 17 .uleb128 0x17
+ 10154 031c E3000000 .long 0xe3
+ 10155 0320 00 .byte 0x0
+ 10156 0321 07 .uleb128 0x7
+ 10157 0322 08 .byte 0x8
+ 10158 0323 0B030000 .long 0x30b
+ 10159 0327 03 .uleb128 0x3
+ 10160 0328 00000000 .long .LASF56
+ 10161 032c 07 .byte 0x7
+ 10162 032d 84 .byte 0x84
+ 10163 032e 32030000 .long 0x332
+ 10164 0332 10 .uleb128 0x10
+ 10165 0333 00000000 .long .LASF56
+ 10166 0337 40 .byte 0x40
+ 10167 0338 07 .byte 0x7
+ 10168 0339 84 .byte 0x84
+ 10169 033a AF030000 .long 0x3af
+ 10170 033e 12 .uleb128 0x12
+ 10171 033f 00000000 .long .LASF47
+ 10172 0343 07 .byte 0x7
+ 10173 0344 90 .byte 0x90
+ 10174 0345 D4010000 .long 0x1d4
+ 10175 0349 02 .byte 0x2
+ 10176 034a 23 .byte 0x23
+ 10177 034b 00 .uleb128 0x0
+ 10178 034c 12 .uleb128 0x12
+ 10179 034d 00000000 .long .LASF48
+ 10180 0351 07 .byte 0x7
+ 10181 0352 95 .byte 0x95
+ 10182 0353 F3030000 .long 0x3f3
+ 10183 0357 02 .byte 0x2
+ 10184 0358 23 .byte 0x23
+ 10185 0359 08 .uleb128 0x8
+ 10186 035a 12 .uleb128 0x12
+ 10187 035b 00000000 .long .LASF49
+ 10188 035f 07 .byte 0x7
+ 10189 0360 97 .byte 0x97
+ 10190 0361 E5020000 .long 0x2e5
+ 10191 0365 02 .byte 0x2
+ 10192 0366 23 .byte 0x23
+ 10193 0367 10 .uleb128 0x10
+ 10194 0368 12 .uleb128 0x12
+ 10195 0369 00000000 .long .LASF50
+ 10196 036d 07 .byte 0x7
+ 10197 036e 99 .byte 0x99
+ 10198 036f E5020000 .long 0x2e5
+ 10199 0373 02 .byte 0x2
+ 10200 0374 23 .byte 0x23
+ 10201 0375 18 .uleb128 0x18
+ 10202 0376 12 .uleb128 0x12
+ 10203 0377 00000000 .long .LASF51
+ 10204 037b 07 .byte 0x7
+ 10205 037c 9B .byte 0x9b
+ 10206 037d 05030000 .long 0x305
+
GAS LISTING /tmp/ccPaCTqg.s page 326
+
+
+ 10207 0381 02 .byte 0x2
+ 10208 0382 23 .byte 0x23
+ 10209 0383 20 .uleb128 0x20
+ 10210 0384 12 .uleb128 0x12
+ 10211 0385 00000000 .long .LASF52
+ 10212 0389 07 .byte 0x7
+ 10213 038a 9F .byte 0x9f
+ 10214 038b 05030000 .long 0x305
+ 10215 038f 02 .byte 0x2
+ 10216 0390 23 .byte 0x23
+ 10217 0391 28 .uleb128 0x28
+ 10218 0392 12 .uleb128 0x12
+ 10219 0393 00000000 .long .LASF53
+ 10220 0397 07 .byte 0x7
+ 10221 0398 A3 .byte 0xa3
+ 10222 0399 0E040000 .long 0x40e
+ 10223 039d 02 .byte 0x2
+ 10224 039e 23 .byte 0x23
+ 10225 039f 30 .uleb128 0x30
+ 10226 03a0 12 .uleb128 0x12
+ 10227 03a1 00000000 .long .LASF54
+ 10228 03a5 07 .byte 0x7
+ 10229 03a6 A6 .byte 0xa6
+ 10230 03a7 0E040000 .long 0x40e
+ 10231 03ab 02 .byte 0x2
+ 10232 03ac 23 .byte 0x23
+ 10233 03ad 38 .uleb128 0x38
+ 10234 03ae 00 .byte 0x0
+ 10235 03af 03 .uleb128 0x3
+ 10236 03b0 00000000 .long .LASF57
+ 10237 03b4 07 .byte 0x7
+ 10238 03b5 85 .byte 0x85
+ 10239 03b6 BA030000 .long 0x3ba
+ 10240 03ba 13 .uleb128 0x13
+ 10241 03bb 00000000 .long .LASF57
+ 10242 03bf 40 .byte 0x40
+ 10243 03c0 07 .byte 0x7
+ 10244 03c1 85 .byte 0x85
+ 10245 03c2 DC030000 .long 0x3dc
+ 10246 03c6 14 .uleb128 0x14
+ 10247 03c7 00000000 .long .LASF47
+ 10248 03cb 07 .byte 0x7
+ 10249 03cc AF .byte 0xaf
+ 10250 03cd D4010000 .long 0x1d4
+ 10251 03d1 15 .uleb128 0x15
+ 10252 03d2 763100 .string "v1"
+ 10253 03d5 07 .byte 0x7
+ 10254 03d6 B0 .byte 0xb0
+ 10255 03d7 27030000 .long 0x327
+ 10256 03db 00 .byte 0x0
+ 10257 03dc 16 .uleb128 0x16
+ 10258 03dd 01 .byte 0x1
+ 10259 03de E8030000 .long 0x3e8
+ 10260 03e2 17 .uleb128 0x17
+ 10261 03e3 E8030000 .long 0x3e8
+ 10262 03e7 00 .byte 0x0
+ 10263 03e8 07 .uleb128 0x7
+
GAS LISTING /tmp/ccPaCTqg.s page 327
+
+
+ 10264 03e9 08 .byte 0x8
+ 10265 03ea EE030000 .long 0x3ee
+ 10266 03ee 06 .uleb128 0x6
+ 10267 03ef AF030000 .long 0x3af
+ 10268 03f3 07 .uleb128 0x7
+ 10269 03f4 08 .byte 0x8
+ 10270 03f5 DC030000 .long 0x3dc
+ 10271 03f9 1A .uleb128 0x1a
+ 10272 03fa 01 .byte 0x1
+ 10273 03fb C9010000 .long 0x1c9
+ 10274 03ff 0E040000 .long 0x40e
+ 10275 0403 17 .uleb128 0x17
+ 10276 0404 C9010000 .long 0x1c9
+ 10277 0408 17 .uleb128 0x17
+ 10278 0409 E3000000 .long 0xe3
+ 10279 040d 00 .byte 0x0
+ 10280 040e 07 .uleb128 0x7
+ 10281 040f 08 .byte 0x8
+ 10282 0410 F9030000 .long 0x3f9
+ 10283 0414 03 .uleb128 0x3
+ 10284 0415 00000000 .long .LASF58
+ 10285 0419 08 .byte 0x8
+ 10286 041a 9D .byte 0x9d
+ 10287 041b 54000000 .long 0x54
+ 10288 041f 03 .uleb128 0x3
+ 10289 0420 00000000 .long .LASF59
+ 10290 0424 08 .byte 0x8
+ 10291 0425 9E .byte 0x9e
+ 10292 0426 6D000000 .long 0x6d
+ 10293 042a 09 .uleb128 0x9
+ 10294 042b 14040000 .long 0x414
+ 10295 042f 3A040000 .long 0x43a
+ 10296 0433 0A .uleb128 0xa
+ 10297 0434 9C000000 .long 0x9c
+ 10298 0438 0F .byte 0xf
+ 10299 0439 00 .byte 0x0
+ 10300 043a 03 .uleb128 0x3
+ 10301 043b 00000000 .long .LASF60
+ 10302 043f 08 .byte 0x8
+ 10303 0440 B0 .byte 0xb0
+ 10304 0441 45040000 .long 0x445
+ 10305 0445 1B .uleb128 0x1b
+ 10306 0446 00000000 .long .LASF60
+ 10307 044a 0001 .value 0x100
+ 10308 044c 08 .byte 0x8
+ 10309 044d B0 .byte 0xb0
+ 10310 044e 70040000 .long 0x470
+ 10311 0452 12 .uleb128 0x12
+ 10312 0453 00000000 .long .LASF61
+ 10313 0457 08 .byte 0x8
+ 10314 0458 B3 .byte 0xb3
+ 10315 0459 70040000 .long 0x470
+ 10316 045d 02 .byte 0x2
+ 10317 045e 23 .byte 0x23
+ 10318 045f 00 .uleb128 0x0
+ 10319 0460 12 .uleb128 0x12
+ 10320 0461 00000000 .long .LASF62
+
GAS LISTING /tmp/ccPaCTqg.s page 328
+
+
+ 10321 0465 08 .byte 0x8
+ 10322 0466 B4 .byte 0xb4
+ 10323 0467 6D000000 .long 0x6d
+ 10324 046b 03 .byte 0x3
+ 10325 046c 23 .byte 0x23
+ 10326 046d F001 .uleb128 0xf0
+ 10327 046f 00 .byte 0x0
+ 10328 0470 09 .uleb128 0x9
+ 10329 0471 C9010000 .long 0x1c9
+ 10330 0475 80040000 .long 0x480
+ 10331 0479 0A .uleb128 0xa
+ 10332 047a 9C000000 .long 0x9c
+ 10333 047e 0E .byte 0xe
+ 10334 047f 00 .byte 0x0
+ 10335 0480 1C .uleb128 0x1c
+ 10336 0481 10 .byte 0x10
+ 10337 0482 08 .byte 0x8
+ 10338 0483 C0 .byte 0xc0
+ 10339 0484 C0040000 .long 0x4c0
+ 10340 0488 14 .uleb128 0x14
+ 10341 0489 00000000 .long .LASF63
+ 10342 048d 08 .byte 0x8
+ 10343 048e C1 .byte 0xc1
+ 10344 048f C9010000 .long 0x1c9
+ 10345 0493 15 .uleb128 0x15
+ 10346 0494 75363400 .string "u64"
+ 10347 0498 08 .byte 0x8
+ 10348 0499 C2 .byte 0xc2
+ 10349 049a C0040000 .long 0x4c0
+ 10350 049e 14 .uleb128 0x14
+ 10351 049f 00000000 .long .LASF64
+ 10352 04a3 08 .byte 0x8
+ 10353 04a4 C3 .byte 0xc3
+ 10354 04a5 D0040000 .long 0x4d0
+ 10355 04a9 14 .uleb128 0x14
+ 10356 04aa 00000000 .long .LASF65
+ 10357 04ae 08 .byte 0x8
+ 10358 04af C4 .byte 0xc4
+ 10359 04b0 2A040000 .long 0x42a
+ 10360 04b4 14 .uleb128 0x14
+ 10361 04b5 00000000 .long .LASF66
+ 10362 04b9 08 .byte 0x8
+ 10363 04ba C5 .byte 0xc5
+ 10364 04bb E0040000 .long 0x4e0
+ 10365 04bf 00 .byte 0x0
+ 10366 04c0 09 .uleb128 0x9
+ 10367 04c1 7F000000 .long 0x7f
+ 10368 04c5 D0040000 .long 0x4d0
+ 10369 04c9 0A .uleb128 0xa
+ 10370 04ca 9C000000 .long 0x9c
+ 10371 04ce 01 .byte 0x1
+ 10372 04cf 00 .byte 0x0
+ 10373 04d0 09 .uleb128 0x9
+ 10374 04d1 1F040000 .long 0x41f
+ 10375 04d5 E0040000 .long 0x4e0
+ 10376 04d9 0A .uleb128 0xa
+ 10377 04da 9C000000 .long 0x9c
+
GAS LISTING /tmp/ccPaCTqg.s page 329
+
+
+ 10378 04de 03 .byte 0x3
+ 10379 04df 00 .byte 0x0
+ 10380 04e0 09 .uleb128 0x9
+ 10381 04e1 14040000 .long 0x414
+ 10382 04e5 F6040000 .long 0x4f6
+ 10383 04e9 0A .uleb128 0xa
+ 10384 04ea 9C000000 .long 0x9c
+ 10385 04ee 03 .byte 0x3
+ 10386 04ef 0A .uleb128 0xa
+ 10387 04f0 9C000000 .long 0x9c
+ 10388 04f4 03 .byte 0x3
+ 10389 04f5 00 .byte 0x0
+ 10390 04f6 03 .uleb128 0x3
+ 10391 04f7 00000000 .long .LASF67
+ 10392 04fb 08 .byte 0x8
+ 10393 04fc C6 .byte 0xc6
+ 10394 04fd 80040000 .long 0x480
+ 10395 0501 03 .uleb128 0x3
+ 10396 0502 00000000 .long .LASF68
+ 10397 0506 09 .byte 0x9
+ 10398 0507 40 .byte 0x40
+ 10399 0508 0C050000 .long 0x50c
+ 10400 050c 13 .uleb128 0x13
+ 10401 050d 00000000 .long .LASF68
+ 10402 0511 40 .byte 0x40
+ 10403 0512 09 .byte 0x9
+ 10404 0513 40 .byte 0x40
+ 10405 0514 2F050000 .long 0x52f
+ 10406 0518 14 .uleb128 0x14
+ 10407 0519 00000000 .long .LASF69
+ 10408 051d 09 .byte 0x9
+ 10409 051e 43 .byte 0x43
+ 10410 051f 90020000 .long 0x290
+ 10411 0523 15 .uleb128 0x15
+ 10412 0524 76656300 .string "vec"
+ 10413 0528 09 .byte 0x9
+ 10414 0529 44 .byte 0x44
+ 10415 052a AF030000 .long 0x3af
+ 10416 052e 00 .byte 0x0
+ 10417 052f 1D .uleb128 0x1d
+ 10418 0530 00000000 .long .LASF92
+ 10419 0534 04 .byte 0x4
+ 10420 0535 0A .byte 0xa
+ 10421 0536 5A .byte 0x5a
+ 10422 0537 C0050000 .long 0x5c0
+ 10423 053b 0E .uleb128 0xe
+ 10424 053c 00000000 .long .LASF70
+ 10425 0540 00 .sleb128 0
+ 10426 0541 0E .uleb128 0xe
+ 10427 0542 00000000 .long .LASF71
+ 10428 0546 01 .sleb128 1
+ 10429 0547 0E .uleb128 0xe
+ 10430 0548 00000000 .long .LASF72
+ 10431 054c 02 .sleb128 2
+ 10432 054d 0E .uleb128 0xe
+ 10433 054e 00000000 .long .LASF73
+ 10434 0552 03 .sleb128 3
+
GAS LISTING /tmp/ccPaCTqg.s page 330
+
+
+ 10435 0553 0E .uleb128 0xe
+ 10436 0554 00000000 .long .LASF74
+ 10437 0558 04 .sleb128 4
+ 10438 0559 0E .uleb128 0xe
+ 10439 055a 00000000 .long .LASF75
+ 10440 055e 05 .sleb128 5
+ 10441 055f 0E .uleb128 0xe
+ 10442 0560 00000000 .long .LASF76
+ 10443 0564 06 .sleb128 6
+ 10444 0565 0E .uleb128 0xe
+ 10445 0566 00000000 .long .LASF77
+ 10446 056a 07 .sleb128 7
+ 10447 056b 0E .uleb128 0xe
+ 10448 056c 00000000 .long .LASF78
+ 10449 0570 08 .sleb128 8
+ 10450 0571 0E .uleb128 0xe
+ 10451 0572 00000000 .long .LASF79
+ 10452 0576 09 .sleb128 9
+ 10453 0577 0E .uleb128 0xe
+ 10454 0578 00000000 .long .LASF80
+ 10455 057c 0A .sleb128 10
+ 10456 057d 0E .uleb128 0xe
+ 10457 057e 00000000 .long .LASF81
+ 10458 0582 0B .sleb128 11
+ 10459 0583 0E .uleb128 0xe
+ 10460 0584 00000000 .long .LASF82
+ 10461 0588 0C .sleb128 12
+ 10462 0589 0E .uleb128 0xe
+ 10463 058a 00000000 .long .LASF83
+ 10464 058e 0D .sleb128 13
+ 10465 058f 0E .uleb128 0xe
+ 10466 0590 00000000 .long .LASF84
+ 10467 0594 0E .sleb128 14
+ 10468 0595 0E .uleb128 0xe
+ 10469 0596 00000000 .long .LASF85
+ 10470 059a 0E .sleb128 14
+ 10471 059b 0E .uleb128 0xe
+ 10472 059c 00000000 .long .LASF86
+ 10473 05a0 0F .sleb128 15
+ 10474 05a1 0E .uleb128 0xe
+ 10475 05a2 00000000 .long .LASF87
+ 10476 05a6 10 .sleb128 16
+ 10477 05a7 0E .uleb128 0xe
+ 10478 05a8 00000000 .long .LASF88
+ 10479 05ac 11 .sleb128 17
+ 10480 05ad 0E .uleb128 0xe
+ 10481 05ae 00000000 .long .LASF89
+ 10482 05b2 12 .sleb128 18
+ 10483 05b3 0E .uleb128 0xe
+ 10484 05b4 00000000 .long .LASF90
+ 10485 05b8 13 .sleb128 19
+ 10486 05b9 0E .uleb128 0xe
+ 10487 05ba 00000000 .long .LASF91
+ 10488 05be 14 .sleb128 20
+ 10489 05bf 00 .byte 0x0
+ 10490 05c0 1D .uleb128 0x1d
+ 10491 05c1 00000000 .long .LASF93
+
GAS LISTING /tmp/ccPaCTqg.s page 331
+
+
+ 10492 05c5 04 .byte 0x4
+ 10493 05c6 0A .byte 0xa
+ 10494 05c7 77 .byte 0x77
+ 10495 05c8 47070000 .long 0x747
+ 10496 05cc 0E .uleb128 0xe
+ 10497 05cd 00000000 .long .LASF94
+ 10498 05d1 00 .sleb128 0
+ 10499 05d2 0E .uleb128 0xe
+ 10500 05d3 00000000 .long .LASF95
+ 10501 05d7 01 .sleb128 1
+ 10502 05d8 0E .uleb128 0xe
+ 10503 05d9 00000000 .long .LASF96
+ 10504 05dd 02 .sleb128 2
+ 10505 05de 0E .uleb128 0xe
+ 10506 05df 00000000 .long .LASF97
+ 10507 05e3 03 .sleb128 3
+ 10508 05e4 0E .uleb128 0xe
+ 10509 05e5 00000000 .long .LASF98
+ 10510 05e9 04 .sleb128 4
+ 10511 05ea 0E .uleb128 0xe
+ 10512 05eb 00000000 .long .LASF99
+ 10513 05ef 05 .sleb128 5
+ 10514 05f0 0E .uleb128 0xe
+ 10515 05f1 00000000 .long .LASF100
+ 10516 05f5 06 .sleb128 6
+ 10517 05f6 0E .uleb128 0xe
+ 10518 05f7 00000000 .long .LASF101
+ 10519 05fb 07 .sleb128 7
+ 10520 05fc 0E .uleb128 0xe
+ 10521 05fd 00000000 .long .LASF102
+ 10522 0601 08 .sleb128 8
+ 10523 0602 0E .uleb128 0xe
+ 10524 0603 00000000 .long .LASF103
+ 10525 0607 09 .sleb128 9
+ 10526 0608 0E .uleb128 0xe
+ 10527 0609 00000000 .long .LASF104
+ 10528 060d 0A .sleb128 10
+ 10529 060e 0E .uleb128 0xe
+ 10530 060f 00000000 .long .LASF105
+ 10531 0613 0B .sleb128 11
+ 10532 0614 0E .uleb128 0xe
+ 10533 0615 00000000 .long .LASF106
+ 10534 0619 0C .sleb128 12
+ 10535 061a 0E .uleb128 0xe
+ 10536 061b 00000000 .long .LASF107
+ 10537 061f 0D .sleb128 13
+ 10538 0620 0E .uleb128 0xe
+ 10539 0621 00000000 .long .LASF108
+ 10540 0625 0E .sleb128 14
+ 10541 0626 0E .uleb128 0xe
+ 10542 0627 00000000 .long .LASF109
+ 10543 062b 0F .sleb128 15
+ 10544 062c 0E .uleb128 0xe
+ 10545 062d 00000000 .long .LASF110
+ 10546 0631 10 .sleb128 16
+ 10547 0632 0E .uleb128 0xe
+ 10548 0633 00000000 .long .LASF111
+
GAS LISTING /tmp/ccPaCTqg.s page 332
+
+
+ 10549 0637 11 .sleb128 17
+ 10550 0638 0E .uleb128 0xe
+ 10551 0639 00000000 .long .LASF112
+ 10552 063d 12 .sleb128 18
+ 10553 063e 0E .uleb128 0xe
+ 10554 063f 00000000 .long .LASF113
+ 10555 0643 13 .sleb128 19
+ 10556 0644 0E .uleb128 0xe
+ 10557 0645 00000000 .long .LASF114
+ 10558 0649 14 .sleb128 20
+ 10559 064a 0E .uleb128 0xe
+ 10560 064b 00000000 .long .LASF115
+ 10561 064f 15 .sleb128 21
+ 10562 0650 0E .uleb128 0xe
+ 10563 0651 00000000 .long .LASF116
+ 10564 0655 16 .sleb128 22
+ 10565 0656 0E .uleb128 0xe
+ 10566 0657 00000000 .long .LASF117
+ 10567 065b 17 .sleb128 23
+ 10568 065c 0E .uleb128 0xe
+ 10569 065d 00000000 .long .LASF118
+ 10570 0661 18 .sleb128 24
+ 10571 0662 0E .uleb128 0xe
+ 10572 0663 00000000 .long .LASF119
+ 10573 0667 19 .sleb128 25
+ 10574 0668 0E .uleb128 0xe
+ 10575 0669 00000000 .long .LASF120
+ 10576 066d 1A .sleb128 26
+ 10577 066e 0E .uleb128 0xe
+ 10578 066f 00000000 .long .LASF121
+ 10579 0673 1B .sleb128 27
+ 10580 0674 0E .uleb128 0xe
+ 10581 0675 00000000 .long .LASF122
+ 10582 0679 1C .sleb128 28
+ 10583 067a 0E .uleb128 0xe
+ 10584 067b 00000000 .long .LASF123
+ 10585 067f 1D .sleb128 29
+ 10586 0680 0E .uleb128 0xe
+ 10587 0681 00000000 .long .LASF124
+ 10588 0685 1E .sleb128 30
+ 10589 0686 0E .uleb128 0xe
+ 10590 0687 00000000 .long .LASF125
+ 10591 068b 1F .sleb128 31
+ 10592 068c 0E .uleb128 0xe
+ 10593 068d 00000000 .long .LASF126
+ 10594 0691 20 .sleb128 32
+ 10595 0692 0E .uleb128 0xe
+ 10596 0693 00000000 .long .LASF127
+ 10597 0697 21 .sleb128 33
+ 10598 0698 0E .uleb128 0xe
+ 10599 0699 00000000 .long .LASF128
+ 10600 069d 22 .sleb128 34
+ 10601 069e 0E .uleb128 0xe
+ 10602 069f 00000000 .long .LASF129
+ 10603 06a3 23 .sleb128 35
+ 10604 06a4 0E .uleb128 0xe
+ 10605 06a5 00000000 .long .LASF130
+
GAS LISTING /tmp/ccPaCTqg.s page 333
+
+
+ 10606 06a9 24 .sleb128 36
+ 10607 06aa 0E .uleb128 0xe
+ 10608 06ab 00000000 .long .LASF131
+ 10609 06af 25 .sleb128 37
+ 10610 06b0 0E .uleb128 0xe
+ 10611 06b1 00000000 .long .LASF132
+ 10612 06b5 26 .sleb128 38
+ 10613 06b6 0E .uleb128 0xe
+ 10614 06b7 00000000 .long .LASF133
+ 10615 06bb 27 .sleb128 39
+ 10616 06bc 0E .uleb128 0xe
+ 10617 06bd 00000000 .long .LASF134
+ 10618 06c1 28 .sleb128 40
+ 10619 06c2 0E .uleb128 0xe
+ 10620 06c3 00000000 .long .LASF135
+ 10621 06c7 29 .sleb128 41
+ 10622 06c8 0E .uleb128 0xe
+ 10623 06c9 00000000 .long .LASF136
+ 10624 06cd 2A .sleb128 42
+ 10625 06ce 0E .uleb128 0xe
+ 10626 06cf 00000000 .long .LASF137
+ 10627 06d3 2B .sleb128 43
+ 10628 06d4 0E .uleb128 0xe
+ 10629 06d5 00000000 .long .LASF138
+ 10630 06d9 2C .sleb128 44
+ 10631 06da 0E .uleb128 0xe
+ 10632 06db 00000000 .long .LASF139
+ 10633 06df 2D .sleb128 45
+ 10634 06e0 0E .uleb128 0xe
+ 10635 06e1 00000000 .long .LASF140
+ 10636 06e5 2E .sleb128 46
+ 10637 06e6 0E .uleb128 0xe
+ 10638 06e7 00000000 .long .LASF141
+ 10639 06eb 2F .sleb128 47
+ 10640 06ec 0E .uleb128 0xe
+ 10641 06ed 00000000 .long .LASF142
+ 10642 06f1 30 .sleb128 48
+ 10643 06f2 0E .uleb128 0xe
+ 10644 06f3 00000000 .long .LASF143
+ 10645 06f7 31 .sleb128 49
+ 10646 06f8 0E .uleb128 0xe
+ 10647 06f9 00000000 .long .LASF144
+ 10648 06fd 32 .sleb128 50
+ 10649 06fe 0E .uleb128 0xe
+ 10650 06ff 00000000 .long .LASF145
+ 10651 0703 33 .sleb128 51
+ 10652 0704 0E .uleb128 0xe
+ 10653 0705 00000000 .long .LASF146
+ 10654 0709 34 .sleb128 52
+ 10655 070a 0E .uleb128 0xe
+ 10656 070b 00000000 .long .LASF147
+ 10657 070f 35 .sleb128 53
+ 10658 0710 0E .uleb128 0xe
+ 10659 0711 00000000 .long .LASF148
+ 10660 0715 36 .sleb128 54
+ 10661 0716 0E .uleb128 0xe
+ 10662 0717 00000000 .long .LASF149
+
GAS LISTING /tmp/ccPaCTqg.s page 334
+
+
+ 10663 071b 36 .sleb128 54
+ 10664 071c 0E .uleb128 0xe
+ 10665 071d 00000000 .long .LASF150
+ 10666 0721 37 .sleb128 55
+ 10667 0722 0E .uleb128 0xe
+ 10668 0723 00000000 .long .LASF151
+ 10669 0727 38 .sleb128 56
+ 10670 0728 0E .uleb128 0xe
+ 10671 0729 00000000 .long .LASF152
+ 10672 072d 39 .sleb128 57
+ 10673 072e 0E .uleb128 0xe
+ 10674 072f 00000000 .long .LASF153
+ 10675 0733 3A .sleb128 58
+ 10676 0734 0E .uleb128 0xe
+ 10677 0735 00000000 .long .LASF154
+ 10678 0739 3B .sleb128 59
+ 10679 073a 0E .uleb128 0xe
+ 10680 073b 00000000 .long .LASF155
+ 10681 073f 3C .sleb128 60
+ 10682 0740 0E .uleb128 0xe
+ 10683 0741 00000000 .long .LASF156
+ 10684 0745 3D .sleb128 61
+ 10685 0746 00 .byte 0x0
+ 10686 0747 1D .uleb128 0x1d
+ 10687 0748 00000000 .long .LASF157
+ 10688 074c 04 .byte 0x4
+ 10689 074d 0A .byte 0xa
+ 10690 074e BD .byte 0xbd
+ 10691 074f FD080000 .long 0x8fd
+ 10692 0753 0E .uleb128 0xe
+ 10693 0754 00000000 .long .LASF158
+ 10694 0758 00 .sleb128 0
+ 10695 0759 0E .uleb128 0xe
+ 10696 075a 00000000 .long .LASF159
+ 10697 075e 01 .sleb128 1
+ 10698 075f 0E .uleb128 0xe
+ 10699 0760 00000000 .long .LASF160
+ 10700 0764 02 .sleb128 2
+ 10701 0765 0E .uleb128 0xe
+ 10702 0766 00000000 .long .LASF161
+ 10703 076a 03 .sleb128 3
+ 10704 076b 0E .uleb128 0xe
+ 10705 076c 00000000 .long .LASF162
+ 10706 0770 04 .sleb128 4
+ 10707 0771 0E .uleb128 0xe
+ 10708 0772 00000000 .long .LASF163
+ 10709 0776 05 .sleb128 5
+ 10710 0777 0E .uleb128 0xe
+ 10711 0778 00000000 .long .LASF164
+ 10712 077c 06 .sleb128 6
+ 10713 077d 0E .uleb128 0xe
+ 10714 077e 00000000 .long .LASF165
+ 10715 0782 07 .sleb128 7
+ 10716 0783 0E .uleb128 0xe
+ 10717 0784 00000000 .long .LASF166
+ 10718 0788 08 .sleb128 8
+ 10719 0789 0E .uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s page 335
+
+
+ 10720 078a 00000000 .long .LASF167
+ 10721 078e 09 .sleb128 9
+ 10722 078f 0E .uleb128 0xe
+ 10723 0790 00000000 .long .LASF168
+ 10724 0794 0A .sleb128 10
+ 10725 0795 0E .uleb128 0xe
+ 10726 0796 00000000 .long .LASF169
+ 10727 079a 0B .sleb128 11
+ 10728 079b 0E .uleb128 0xe
+ 10729 079c 00000000 .long .LASF170
+ 10730 07a0 0C .sleb128 12
+ 10731 07a1 0E .uleb128 0xe
+ 10732 07a2 00000000 .long .LASF171
+ 10733 07a6 0D .sleb128 13
+ 10734 07a7 0E .uleb128 0xe
+ 10735 07a8 00000000 .long .LASF172
+ 10736 07ac 0E .sleb128 14
+ 10737 07ad 0E .uleb128 0xe
+ 10738 07ae 00000000 .long .LASF173
+ 10739 07b2 0F .sleb128 15
+ 10740 07b3 0E .uleb128 0xe
+ 10741 07b4 00000000 .long .LASF174
+ 10742 07b8 10 .sleb128 16
+ 10743 07b9 0E .uleb128 0xe
+ 10744 07ba 00000000 .long .LASF175
+ 10745 07be 11 .sleb128 17
+ 10746 07bf 0E .uleb128 0xe
+ 10747 07c0 00000000 .long .LASF176
+ 10748 07c4 12 .sleb128 18
+ 10749 07c5 0E .uleb128 0xe
+ 10750 07c6 00000000 .long .LASF177
+ 10751 07ca 13 .sleb128 19
+ 10752 07cb 0E .uleb128 0xe
+ 10753 07cc 00000000 .long .LASF178
+ 10754 07d0 14 .sleb128 20
+ 10755 07d1 0E .uleb128 0xe
+ 10756 07d2 00000000 .long .LASF179
+ 10757 07d6 15 .sleb128 21
+ 10758 07d7 0E .uleb128 0xe
+ 10759 07d8 00000000 .long .LASF180
+ 10760 07dc 16 .sleb128 22
+ 10761 07dd 0E .uleb128 0xe
+ 10762 07de 00000000 .long .LASF181
+ 10763 07e2 17 .sleb128 23
+ 10764 07e3 0E .uleb128 0xe
+ 10765 07e4 00000000 .long .LASF182
+ 10766 07e8 18 .sleb128 24
+ 10767 07e9 0E .uleb128 0xe
+ 10768 07ea 00000000 .long .LASF183
+ 10769 07ee 19 .sleb128 25
+ 10770 07ef 0E .uleb128 0xe
+ 10771 07f0 00000000 .long .LASF184
+ 10772 07f4 1A .sleb128 26
+ 10773 07f5 0E .uleb128 0xe
+ 10774 07f6 00000000 .long .LASF185
+ 10775 07fa 1B .sleb128 27
+ 10776 07fb 0E .uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s page 336
+
+
+ 10777 07fc 00000000 .long .LASF186
+ 10778 0800 1C .sleb128 28
+ 10779 0801 0E .uleb128 0xe
+ 10780 0802 00000000 .long .LASF187
+ 10781 0806 1D .sleb128 29
+ 10782 0807 0E .uleb128 0xe
+ 10783 0808 00000000 .long .LASF188
+ 10784 080c 1E .sleb128 30
+ 10785 080d 0E .uleb128 0xe
+ 10786 080e 00000000 .long .LASF189
+ 10787 0812 1F .sleb128 31
+ 10788 0813 0E .uleb128 0xe
+ 10789 0814 00000000 .long .LASF190
+ 10790 0818 20 .sleb128 32
+ 10791 0819 0E .uleb128 0xe
+ 10792 081a 00000000 .long .LASF191
+ 10793 081e 21 .sleb128 33
+ 10794 081f 0E .uleb128 0xe
+ 10795 0820 00000000 .long .LASF192
+ 10796 0824 22 .sleb128 34
+ 10797 0825 0E .uleb128 0xe
+ 10798 0826 00000000 .long .LASF193
+ 10799 082a 23 .sleb128 35
+ 10800 082b 0E .uleb128 0xe
+ 10801 082c 00000000 .long .LASF194
+ 10802 0830 24 .sleb128 36
+ 10803 0831 0E .uleb128 0xe
+ 10804 0832 00000000 .long .LASF195
+ 10805 0836 25 .sleb128 37
+ 10806 0837 0E .uleb128 0xe
+ 10807 0838 00000000 .long .LASF196
+ 10808 083c 26 .sleb128 38
+ 10809 083d 0E .uleb128 0xe
+ 10810 083e 00000000 .long .LASF197
+ 10811 0842 27 .sleb128 39
+ 10812 0843 0E .uleb128 0xe
+ 10813 0844 00000000 .long .LASF198
+ 10814 0848 28 .sleb128 40
+ 10815 0849 0E .uleb128 0xe
+ 10816 084a 00000000 .long .LASF199
+ 10817 084e 29 .sleb128 41
+ 10818 084f 0E .uleb128 0xe
+ 10819 0850 00000000 .long .LASF200
+ 10820 0854 2A .sleb128 42
+ 10821 0855 0E .uleb128 0xe
+ 10822 0856 00000000 .long .LASF201
+ 10823 085a 2B .sleb128 43
+ 10824 085b 0E .uleb128 0xe
+ 10825 085c 00000000 .long .LASF202
+ 10826 0860 2C .sleb128 44
+ 10827 0861 0E .uleb128 0xe
+ 10828 0862 00000000 .long .LASF203
+ 10829 0866 2D .sleb128 45
+ 10830 0867 0E .uleb128 0xe
+ 10831 0868 00000000 .long .LASF204
+ 10832 086c 2E .sleb128 46
+ 10833 086d 0E .uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s page 337
+
+
+ 10834 086e 00000000 .long .LASF205
+ 10835 0872 2F .sleb128 47
+ 10836 0873 0E .uleb128 0xe
+ 10837 0874 00000000 .long .LASF206
+ 10838 0878 30 .sleb128 48
+ 10839 0879 0E .uleb128 0xe
+ 10840 087a 00000000 .long .LASF207
+ 10841 087e 31 .sleb128 49
+ 10842 087f 0E .uleb128 0xe
+ 10843 0880 00000000 .long .LASF208
+ 10844 0884 32 .sleb128 50
+ 10845 0885 0E .uleb128 0xe
+ 10846 0886 00000000 .long .LASF209
+ 10847 088a 33 .sleb128 51
+ 10848 088b 0E .uleb128 0xe
+ 10849 088c 00000000 .long .LASF210
+ 10850 0890 34 .sleb128 52
+ 10851 0891 0E .uleb128 0xe
+ 10852 0892 00000000 .long .LASF211
+ 10853 0896 35 .sleb128 53
+ 10854 0897 0E .uleb128 0xe
+ 10855 0898 00000000 .long .LASF212
+ 10856 089c 36 .sleb128 54
+ 10857 089d 0E .uleb128 0xe
+ 10858 089e 00000000 .long .LASF213
+ 10859 08a2 37 .sleb128 55
+ 10860 08a3 0E .uleb128 0xe
+ 10861 08a4 00000000 .long .LASF214
+ 10862 08a8 38 .sleb128 56
+ 10863 08a9 0E .uleb128 0xe
+ 10864 08aa 00000000 .long .LASF215
+ 10865 08ae 39 .sleb128 57
+ 10866 08af 0E .uleb128 0xe
+ 10867 08b0 00000000 .long .LASF216
+ 10868 08b4 3A .sleb128 58
+ 10869 08b5 0E .uleb128 0xe
+ 10870 08b6 00000000 .long .LASF217
+ 10871 08ba 3A .sleb128 58
+ 10872 08bb 0E .uleb128 0xe
+ 10873 08bc 00000000 .long .LASF218
+ 10874 08c0 3B .sleb128 59
+ 10875 08c1 0E .uleb128 0xe
+ 10876 08c2 00000000 .long .LASF219
+ 10877 08c6 3C .sleb128 60
+ 10878 08c7 0E .uleb128 0xe
+ 10879 08c8 00000000 .long .LASF220
+ 10880 08cc 3D .sleb128 61
+ 10881 08cd 0E .uleb128 0xe
+ 10882 08ce 00000000 .long .LASF221
+ 10883 08d2 3E .sleb128 62
+ 10884 08d3 0E .uleb128 0xe
+ 10885 08d4 00000000 .long .LASF222
+ 10886 08d8 3F .sleb128 63
+ 10887 08d9 0E .uleb128 0xe
+ 10888 08da 00000000 .long .LASF223
+ 10889 08de C000 .sleb128 64
+ 10890 08e0 0E .uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s page 338
+
+
+ 10891 08e1 00000000 .long .LASF224
+ 10892 08e5 C100 .sleb128 65
+ 10893 08e7 0E .uleb128 0xe
+ 10894 08e8 00000000 .long .LASF225
+ 10895 08ec C200 .sleb128 66
+ 10896 08ee 0E .uleb128 0xe
+ 10897 08ef 00000000 .long .LASF226
+ 10898 08f3 C300 .sleb128 67
+ 10899 08f5 0E .uleb128 0xe
+ 10900 08f6 00000000 .long .LASF227
+ 10901 08fa C400 .sleb128 68
+ 10902 08fc 00 .byte 0x0
+ 10903 08fd 1E .uleb128 0x1e
+ 10904 08fe 00000000 .long .LASF228
+ 10905 0902 04 .byte 0x4
+ 10906 0903 0A .byte 0xa
+ 10907 0904 0A01 .value 0x10a
+ 10908 0906 FC090000 .long 0x9fc
+ 10909 090a 0E .uleb128 0xe
+ 10910 090b 00000000 .long .LASF229
+ 10911 090f 00 .sleb128 0
+ 10912 0910 0E .uleb128 0xe
+ 10913 0911 00000000 .long .LASF230
+ 10914 0915 3D .sleb128 61
+ 10915 0916 0E .uleb128 0xe
+ 10916 0917 00000000 .long .LASF231
+ 10917 091b 3E .sleb128 62
+ 10918 091c 0E .uleb128 0xe
+ 10919 091d 00000000 .long .LASF232
+ 10920 0921 3F .sleb128 63
+ 10921 0922 0E .uleb128 0xe
+ 10922 0923 00000000 .long .LASF233
+ 10923 0927 C000 .sleb128 64
+ 10924 0929 0E .uleb128 0xe
+ 10925 092a 00000000 .long .LASF234
+ 10926 092e C100 .sleb128 65
+ 10927 0930 0E .uleb128 0xe
+ 10928 0931 00000000 .long .LASF235
+ 10929 0935 C200 .sleb128 66
+ 10930 0937 0E .uleb128 0xe
+ 10931 0938 00000000 .long .LASF236
+ 10932 093c C300 .sleb128 67
+ 10933 093e 0E .uleb128 0xe
+ 10934 093f 00000000 .long .LASF237
+ 10935 0943 C400 .sleb128 68
+ 10936 0945 0E .uleb128 0xe
+ 10937 0946 00000000 .long .LASF238
+ 10938 094a C500 .sleb128 69
+ 10939 094c 0E .uleb128 0xe
+ 10940 094d 00000000 .long .LASF239
+ 10941 0951 C600 .sleb128 70
+ 10942 0953 0E .uleb128 0xe
+ 10943 0954 00000000 .long .LASF240
+ 10944 0958 C700 .sleb128 71
+ 10945 095a 0E .uleb128 0xe
+ 10946 095b 00000000 .long .LASF241
+ 10947 095f C800 .sleb128 72
+
GAS LISTING /tmp/ccPaCTqg.s page 339
+
+
+ 10948 0961 0E .uleb128 0xe
+ 10949 0962 00000000 .long .LASF242
+ 10950 0966 C900 .sleb128 73
+ 10951 0968 0E .uleb128 0xe
+ 10952 0969 00000000 .long .LASF243
+ 10953 096d CA00 .sleb128 74
+ 10954 096f 0E .uleb128 0xe
+ 10955 0970 00000000 .long .LASF244
+ 10956 0974 CB00 .sleb128 75
+ 10957 0976 0E .uleb128 0xe
+ 10958 0977 00000000 .long .LASF245
+ 10959 097b CC00 .sleb128 76
+ 10960 097d 0E .uleb128 0xe
+ 10961 097e 00000000 .long .LASF246
+ 10962 0982 CD00 .sleb128 77
+ 10963 0984 0E .uleb128 0xe
+ 10964 0985 00000000 .long .LASF247
+ 10965 0989 CE00 .sleb128 78
+ 10966 098b 0E .uleb128 0xe
+ 10967 098c 00000000 .long .LASF248
+ 10968 0990 CF00 .sleb128 79
+ 10969 0992 0E .uleb128 0xe
+ 10970 0993 00000000 .long .LASF249
+ 10971 0997 D000 .sleb128 80
+ 10972 0999 0E .uleb128 0xe
+ 10973 099a 00000000 .long .LASF250
+ 10974 099e D100 .sleb128 81
+ 10975 09a0 0E .uleb128 0xe
+ 10976 09a1 00000000 .long .LASF251
+ 10977 09a5 D100 .sleb128 81
+ 10978 09a7 0E .uleb128 0xe
+ 10979 09a8 00000000 .long .LASF252
+ 10980 09ac D200 .sleb128 82
+ 10981 09ae 0E .uleb128 0xe
+ 10982 09af 00000000 .long .LASF253
+ 10983 09b3 D300 .sleb128 83
+ 10984 09b5 0E .uleb128 0xe
+ 10985 09b6 00000000 .long .LASF254
+ 10986 09ba D400 .sleb128 84
+ 10987 09bc 0E .uleb128 0xe
+ 10988 09bd 00000000 .long .LASF255
+ 10989 09c1 D500 .sleb128 85
+ 10990 09c3 0E .uleb128 0xe
+ 10991 09c4 00000000 .long .LASF256
+ 10992 09c8 D600 .sleb128 86
+ 10993 09ca 0E .uleb128 0xe
+ 10994 09cb 00000000 .long .LASF257
+ 10995 09cf D700 .sleb128 87
+ 10996 09d1 0E .uleb128 0xe
+ 10997 09d2 00000000 .long .LASF258
+ 10998 09d6 D800 .sleb128 88
+ 10999 09d8 0E .uleb128 0xe
+ 11000 09d9 00000000 .long .LASF259
+ 11001 09dd D900 .sleb128 89
+ 11002 09df 0E .uleb128 0xe
+ 11003 09e0 00000000 .long .LASF260
+ 11004 09e4 DA00 .sleb128 90
+
GAS LISTING /tmp/ccPaCTqg.s page 340
+
+
+ 11005 09e6 0E .uleb128 0xe
+ 11006 09e7 00000000 .long .LASF261
+ 11007 09eb DB00 .sleb128 91
+ 11008 09ed 0E .uleb128 0xe
+ 11009 09ee 00000000 .long .LASF262
+ 11010 09f2 DC00 .sleb128 92
+ 11011 09f4 0E .uleb128 0xe
+ 11012 09f5 00000000 .long .LASF263
+ 11013 09f9 DD00 .sleb128 93
+ 11014 09fb 00 .byte 0x0
+ 11015 09fc 1E .uleb128 0x1e
+ 11016 09fd 00000000 .long .LASF264
+ 11017 0a01 04 .byte 0x4
+ 11018 0a02 0A .byte 0xa
+ 11019 0a03 3401 .value 0x134
+ 11020 0a05 3C0B0000 .long 0xb3c
+ 11021 0a09 0E .uleb128 0xe
+ 11022 0a0a 00000000 .long .LASF265
+ 11023 0a0e 00 .sleb128 0
+ 11024 0a0f 0E .uleb128 0xe
+ 11025 0a10 00000000 .long .LASF266
+ 11026 0a14 01 .sleb128 1
+ 11027 0a15 0E .uleb128 0xe
+ 11028 0a16 00000000 .long .LASF267
+ 11029 0a1a 02 .sleb128 2
+ 11030 0a1b 0E .uleb128 0xe
+ 11031 0a1c 00000000 .long .LASF268
+ 11032 0a20 03 .sleb128 3
+ 11033 0a21 0E .uleb128 0xe
+ 11034 0a22 00000000 .long .LASF269
+ 11035 0a26 04 .sleb128 4
+ 11036 0a27 0E .uleb128 0xe
+ 11037 0a28 00000000 .long .LASF270
+ 11038 0a2c 05 .sleb128 5
+ 11039 0a2d 0E .uleb128 0xe
+ 11040 0a2e 00000000 .long .LASF271
+ 11041 0a32 06 .sleb128 6
+ 11042 0a33 0E .uleb128 0xe
+ 11043 0a34 00000000 .long .LASF272
+ 11044 0a38 07 .sleb128 7
+ 11045 0a39 0E .uleb128 0xe
+ 11046 0a3a 00000000 .long .LASF273
+ 11047 0a3e 08 .sleb128 8
+ 11048 0a3f 0E .uleb128 0xe
+ 11049 0a40 00000000 .long .LASF274
+ 11050 0a44 09 .sleb128 9
+ 11051 0a45 0E .uleb128 0xe
+ 11052 0a46 00000000 .long .LASF275
+ 11053 0a4a 0A .sleb128 10
+ 11054 0a4b 0E .uleb128 0xe
+ 11055 0a4c 00000000 .long .LASF276
+ 11056 0a50 0B .sleb128 11
+ 11057 0a51 0E .uleb128 0xe
+ 11058 0a52 00000000 .long .LASF277
+ 11059 0a56 0C .sleb128 12
+ 11060 0a57 0E .uleb128 0xe
+ 11061 0a58 00000000 .long .LASF278
+
GAS LISTING /tmp/ccPaCTqg.s page 341
+
+
+ 11062 0a5c 0D .sleb128 13
+ 11063 0a5d 0E .uleb128 0xe
+ 11064 0a5e 00000000 .long .LASF279
+ 11065 0a62 0E .sleb128 14
+ 11066 0a63 0E .uleb128 0xe
+ 11067 0a64 00000000 .long .LASF280
+ 11068 0a68 0F .sleb128 15
+ 11069 0a69 0E .uleb128 0xe
+ 11070 0a6a 00000000 .long .LASF281
+ 11071 0a6e 10 .sleb128 16
+ 11072 0a6f 0E .uleb128 0xe
+ 11073 0a70 00000000 .long .LASF282
+ 11074 0a74 11 .sleb128 17
+ 11075 0a75 0E .uleb128 0xe
+ 11076 0a76 00000000 .long .LASF283
+ 11077 0a7a 12 .sleb128 18
+ 11078 0a7b 0E .uleb128 0xe
+ 11079 0a7c 00000000 .long .LASF284
+ 11080 0a80 13 .sleb128 19
+ 11081 0a81 0E .uleb128 0xe
+ 11082 0a82 00000000 .long .LASF285
+ 11083 0a86 14 .sleb128 20
+ 11084 0a87 0E .uleb128 0xe
+ 11085 0a88 00000000 .long .LASF286
+ 11086 0a8c 15 .sleb128 21
+ 11087 0a8d 0E .uleb128 0xe
+ 11088 0a8e 00000000 .long .LASF287
+ 11089 0a92 16 .sleb128 22
+ 11090 0a93 0E .uleb128 0xe
+ 11091 0a94 00000000 .long .LASF288
+ 11092 0a98 17 .sleb128 23
+ 11093 0a99 0E .uleb128 0xe
+ 11094 0a9a 00000000 .long .LASF289
+ 11095 0a9e 18 .sleb128 24
+ 11096 0a9f 0E .uleb128 0xe
+ 11097 0aa0 00000000 .long .LASF290
+ 11098 0aa4 19 .sleb128 25
+ 11099 0aa5 0E .uleb128 0xe
+ 11100 0aa6 00000000 .long .LASF291
+ 11101 0aaa 1A .sleb128 26
+ 11102 0aab 0E .uleb128 0xe
+ 11103 0aac 00000000 .long .LASF292
+ 11104 0ab0 1B .sleb128 27
+ 11105 0ab1 0E .uleb128 0xe
+ 11106 0ab2 00000000 .long .LASF293
+ 11107 0ab6 1C .sleb128 28
+ 11108 0ab7 0E .uleb128 0xe
+ 11109 0ab8 00000000 .long .LASF294
+ 11110 0abc 1D .sleb128 29
+ 11111 0abd 0E .uleb128 0xe
+ 11112 0abe 00000000 .long .LASF295
+ 11113 0ac2 1E .sleb128 30
+ 11114 0ac3 0E .uleb128 0xe
+ 11115 0ac4 00000000 .long .LASF296
+ 11116 0ac8 1F .sleb128 31
+ 11117 0ac9 0E .uleb128 0xe
+ 11118 0aca 00000000 .long .LASF297
+
GAS LISTING /tmp/ccPaCTqg.s page 342
+
+
+ 11119 0ace 20 .sleb128 32
+ 11120 0acf 0E .uleb128 0xe
+ 11121 0ad0 00000000 .long .LASF298
+ 11122 0ad4 21 .sleb128 33
+ 11123 0ad5 0E .uleb128 0xe
+ 11124 0ad6 00000000 .long .LASF299
+ 11125 0ada 22 .sleb128 34
+ 11126 0adb 0E .uleb128 0xe
+ 11127 0adc 00000000 .long .LASF300
+ 11128 0ae0 23 .sleb128 35
+ 11129 0ae1 0E .uleb128 0xe
+ 11130 0ae2 00000000 .long .LASF301
+ 11131 0ae6 24 .sleb128 36
+ 11132 0ae7 0E .uleb128 0xe
+ 11133 0ae8 00000000 .long .LASF302
+ 11134 0aec 25 .sleb128 37
+ 11135 0aed 0E .uleb128 0xe
+ 11136 0aee 00000000 .long .LASF303
+ 11137 0af2 26 .sleb128 38
+ 11138 0af3 0E .uleb128 0xe
+ 11139 0af4 00000000 .long .LASF304
+ 11140 0af8 27 .sleb128 39
+ 11141 0af9 0E .uleb128 0xe
+ 11142 0afa 00000000 .long .LASF305
+ 11143 0afe 28 .sleb128 40
+ 11144 0aff 0E .uleb128 0xe
+ 11145 0b00 00000000 .long .LASF306
+ 11146 0b04 29 .sleb128 41
+ 11147 0b05 0E .uleb128 0xe
+ 11148 0b06 00000000 .long .LASF307
+ 11149 0b0a 29 .sleb128 41
+ 11150 0b0b 0E .uleb128 0xe
+ 11151 0b0c 00000000 .long .LASF308
+ 11152 0b10 2A .sleb128 42
+ 11153 0b11 0E .uleb128 0xe
+ 11154 0b12 00000000 .long .LASF309
+ 11155 0b16 2B .sleb128 43
+ 11156 0b17 0E .uleb128 0xe
+ 11157 0b18 00000000 .long .LASF310
+ 11158 0b1c 2C .sleb128 44
+ 11159 0b1d 0E .uleb128 0xe
+ 11160 0b1e 00000000 .long .LASF311
+ 11161 0b22 2D .sleb128 45
+ 11162 0b23 0E .uleb128 0xe
+ 11163 0b24 00000000 .long .LASF312
+ 11164 0b28 2E .sleb128 46
+ 11165 0b29 0E .uleb128 0xe
+ 11166 0b2a 00000000 .long .LASF313
+ 11167 0b2e 2F .sleb128 47
+ 11168 0b2f 0E .uleb128 0xe
+ 11169 0b30 00000000 .long .LASF314
+ 11170 0b34 30 .sleb128 48
+ 11171 0b35 0E .uleb128 0xe
+ 11172 0b36 00000000 .long .LASF315
+ 11173 0b3a 31 .sleb128 49
+ 11174 0b3b 00 .byte 0x0
+ 11175 0b3c 1F .uleb128 0x1f
+
GAS LISTING /tmp/ccPaCTqg.s page 343
+
+
+ 11176 0b3d 00000000 .long .LASF317
+ 11177 0b41 01 .byte 0x1
+ 11178 0b42 2803 .value 0x328
+ 11179 0b44 01 .byte 0x1
+ 11180 0b45 FD000000 .long 0xfd
+ 11181 0b49 00000000 .quad .LFB580
+ 11181 00000000
+ 11182 0b51 00000000 .quad .LFE580
+ 11182 00000000
+ 11183 0b59 00000000 .long .LLST0
+ 11184 0b5d 7E0B0000 .long 0xb7e
+ 11185 0b61 20 .uleb128 0x20
+ 11186 0b62 00000000 .long .LASF63
+ 11187 0b66 01 .byte 0x1
+ 11188 0b67 2803 .value 0x328
+ 11189 0b69 FD000000 .long 0xfd
+ 11190 0b6d 01 .byte 0x1
+ 11191 0b6e 61 .byte 0x61
+ 11192 0b6f 20 .uleb128 0x20
+ 11193 0b70 00000000 .long .LASF316
+ 11194 0b74 01 .byte 0x1
+ 11195 0b75 2803 .value 0x328
+ 11196 0b77 7E0B0000 .long 0xb7e
+ 11197 0b7b 01 .byte 0x1
+ 11198 0b7c 62 .byte 0x62
+ 11199 0b7d 00 .byte 0x0
+ 11200 0b7e 06 .uleb128 0x6
+ 11201 0b7f FD000000 .long 0xfd
+ 11202 0b83 1F .uleb128 0x1f
+ 11203 0b84 00000000 .long .LASF318
+ 11204 0b88 01 .byte 0x1
+ 11205 0b89 3103 .value 0x331
+ 11206 0b8b 01 .byte 0x1
+ 11207 0b8c FD000000 .long 0xfd
+ 11208 0b90 00000000 .quad .LFB581
+ 11208 00000000
+ 11209 0b98 00000000 .quad .LFE581
+ 11209 00000000
+ 11210 0ba0 00000000 .long .LLST1
+ 11211 0ba4 C50B0000 .long 0xbc5
+ 11212 0ba8 20 .uleb128 0x20
+ 11213 0ba9 00000000 .long .LASF63
+ 11214 0bad 01 .byte 0x1
+ 11215 0bae 3103 .value 0x331
+ 11216 0bb0 FD000000 .long 0xfd
+ 11217 0bb4 01 .byte 0x1
+ 11218 0bb5 61 .byte 0x61
+ 11219 0bb6 20 .uleb128 0x20
+ 11220 0bb7 00000000 .long .LASF316
+ 11221 0bbb 01 .byte 0x1
+ 11222 0bbc 3203 .value 0x332
+ 11223 0bbe 7E0B0000 .long 0xb7e
+ 11224 0bc2 01 .byte 0x1
+ 11225 0bc3 62 .byte 0x62
+ 11226 0bc4 00 .byte 0x0
+ 11227 0bc5 1F .uleb128 0x1f
+ 11228 0bc6 00000000 .long .LASF319
+
GAS LISTING /tmp/ccPaCTqg.s page 344
+
+
+ 11229 0bca 01 .byte 0x1
+ 11230 0bcb 3B03 .value 0x33b
+ 11231 0bcd 01 .byte 0x1
+ 11232 0bce FD000000 .long 0xfd
+ 11233 0bd2 00000000 .quad .LFB582
+ 11233 00000000
+ 11234 0bda 00000000 .quad .LFE582
+ 11234 00000000
+ 11235 0be2 00000000 .long .LLST2
+ 11236 0be6 070C0000 .long 0xc07
+ 11237 0bea 20 .uleb128 0x20
+ 11238 0beb 00000000 .long .LASF63
+ 11239 0bef 01 .byte 0x1
+ 11240 0bf0 3B03 .value 0x33b
+ 11241 0bf2 FD000000 .long 0xfd
+ 11242 0bf6 01 .byte 0x1
+ 11243 0bf7 61 .byte 0x61
+ 11244 0bf8 20 .uleb128 0x20
+ 11245 0bf9 00000000 .long .LASF316
+ 11246 0bfd 01 .byte 0x1
+ 11247 0bfe 3B03 .value 0x33b
+ 11248 0c00 7E0B0000 .long 0xb7e
+ 11249 0c04 01 .byte 0x1
+ 11250 0c05 62 .byte 0x62
+ 11251 0c06 00 .byte 0x0
+ 11252 0c07 1F .uleb128 0x1f
+ 11253 0c08 00000000 .long .LASF320
+ 11254 0c0c 01 .byte 0x1
+ 11255 0c0d 4403 .value 0x344
+ 11256 0c0f 01 .byte 0x1
+ 11257 0c10 FD000000 .long 0xfd
+ 11258 0c14 00000000 .quad .LFB583
+ 11258 00000000
+ 11259 0c1c 00000000 .quad .LFE583
+ 11259 00000000
+ 11260 0c24 00000000 .long .LLST3
+ 11261 0c28 490C0000 .long 0xc49
+ 11262 0c2c 20 .uleb128 0x20
+ 11263 0c2d 00000000 .long .LASF63
+ 11264 0c31 01 .byte 0x1
+ 11265 0c32 4403 .value 0x344
+ 11266 0c34 FD000000 .long 0xfd
+ 11267 0c38 01 .byte 0x1
+ 11268 0c39 61 .byte 0x61
+ 11269 0c3a 20 .uleb128 0x20
+ 11270 0c3b 00000000 .long .LASF316
+ 11271 0c3f 01 .byte 0x1
+ 11272 0c40 4503 .value 0x345
+ 11273 0c42 7E0B0000 .long 0xb7e
+ 11274 0c46 01 .byte 0x1
+ 11275 0c47 62 .byte 0x62
+ 11276 0c48 00 .byte 0x0
+ 11277 0c49 1F .uleb128 0x1f
+ 11278 0c4a 00000000 .long .LASF321
+ 11279 0c4e 01 .byte 0x1
+ 11280 0c4f 5B03 .value 0x35b
+ 11281 0c51 01 .byte 0x1
+
GAS LISTING /tmp/ccPaCTqg.s page 345
+
+
+ 11282 0c52 FD000000 .long 0xfd
+ 11283 0c56 00000000 .quad .LFB585
+ 11283 00000000
+ 11284 0c5e 00000000 .quad .LFE585
+ 11284 00000000
+ 11285 0c66 00000000 .long .LLST4
+ 11286 0c6a 7D0C0000 .long 0xc7d
+ 11287 0c6e 20 .uleb128 0x20
+ 11288 0c6f 00000000 .long .LASF316
+ 11289 0c73 01 .byte 0x1
+ 11290 0c74 5B03 .value 0x35b
+ 11291 0c76 7E0B0000 .long 0xb7e
+ 11292 0c7a 01 .byte 0x1
+ 11293 0c7b 61 .byte 0x61
+ 11294 0c7c 00 .byte 0x0
+ 11295 0c7d 21 .uleb128 0x21
+ 11296 0c7e 00000000 .long .LASF322
+ 11297 0c82 02 .byte 0x2
+ 11298 0c83 38 .byte 0x38
+ 11299 0c84 01 .byte 0x1
+ 11300 0c85 6D000000 .long 0x6d
+ 11301 0c89 00000000 .quad .LFB602
+ 11301 00000000
+ 11302 0c91 00000000 .quad .LFE602
+ 11302 00000000
+ 11303 0c99 00000000 .long .LLST5
+ 11304 0c9d BB0C0000 .long 0xcbb
+ 11305 0ca1 22 .uleb128 0x22
+ 11306 0ca2 6900 .string "i"
+ 11307 0ca4 02 .byte 0x2
+ 11308 0ca5 38 .byte 0x38
+ 11309 0ca6 6D000000 .long 0x6d
+ 11310 0caa 02 .byte 0x2
+ 11311 0cab 91 .byte 0x91
+ 11312 0cac 64 .sleb128 -28
+ 11313 0cad 23 .uleb128 0x23
+ 11314 0cae 72746E00 .string "rtn"
+ 11315 0cb2 02 .byte 0x2
+ 11316 0cb3 3A .byte 0x3a
+ 11317 0cb4 6D000000 .long 0x6d
+ 11318 0cb8 01 .byte 0x1
+ 11319 0cb9 53 .byte 0x53
+ 11320 0cba 00 .byte 0x0
+ 11321 0cbb 24 .uleb128 0x24
+ 11322 0cbc 00000000 .long .LASF323
+ 11323 0cc0 03 .byte 0x3
+ 11324 0cc1 79 .byte 0x79
+ 11325 0cc2 01 .byte 0x1
+ 11326 0cc3 C9010000 .long 0x1c9
+ 11327 0cc7 03 .byte 0x3
+ 11328 0cc8 E30C0000 .long 0xce3
+ 11329 0ccc 25 .uleb128 0x25
+ 11330 0ccd 61696E00 .string "ain"
+ 11331 0cd1 03 .byte 0x3
+ 11332 0cd2 79 .byte 0x79
+ 11333 0cd3 E3000000 .long 0xe3
+ 11334 0cd7 26 .uleb128 0x26
+
GAS LISTING /tmp/ccPaCTqg.s page 346
+
+
+ 11335 0cd8 76656300 .string "vec"
+ 11336 0cdc 03 .byte 0x3
+ 11337 0cdd 7D .byte 0x7d
+ 11338 0cde C9010000 .long 0x1c9
+ 11339 0ce2 00 .byte 0x0
+ 11340 0ce3 27 .uleb128 0x27
+ 11341 0ce4 00000000 .long .LASF324
+ 11342 0ce8 03 .byte 0x3
+ 11343 0ce9 8606 .value 0x686
+ 11344 0ceb 01 .byte 0x1
+ 11345 0cec C9010000 .long 0x1c9
+ 11346 0cf0 03 .byte 0x3
+ 11347 0cf1 1A0D0000 .long 0xd1a
+ 11348 0cf5 28 .uleb128 0x28
+ 11349 0cf6 00000000 .long .LASF63
+ 11350 0cfa 03 .byte 0x3
+ 11351 0cfb 8606 .value 0x686
+ 11352 0cfd C9010000 .long 0x1c9
+ 11353 0d01 28 .uleb128 0x28
+ 11354 0d02 00000000 .long .LASF325
+ 11355 0d06 03 .byte 0x3
+ 11356 0d07 8606 .value 0x686
+ 11357 0d09 B4000000 .long 0xb4
+ 11358 0d0d 29 .uleb128 0x29
+ 11359 0d0e 746D7000 .string "tmp"
+ 11360 0d12 03 .byte 0x3
+ 11361 0d13 8906 .value 0x689
+ 11362 0d15 C9010000 .long 0x1c9
+ 11363 0d19 00 .byte 0x0
+ 11364 0d1a 27 .uleb128 0x27
+ 11365 0d1b 00000000 .long .LASF326
+ 11366 0d1f 01 .byte 0x1
+ 11367 0d20 5103 .value 0x351
+ 11368 0d22 01 .byte 0x1
+ 11369 0d23 FD000000 .long 0xfd
+ 11370 0d27 03 .byte 0x3
+ 11371 0d28 450D0000 .long 0xd45
+ 11372 0d2c 28 .uleb128 0x28
+ 11373 0d2d 00000000 .long .LASF316
+ 11374 0d31 01 .byte 0x1
+ 11375 0d32 5103 .value 0x351
+ 11376 0d34 7E0B0000 .long 0xb7e
+ 11377 0d38 28 .uleb128 0x28
+ 11378 0d39 00000000 .long .LASF325
+ 11379 0d3d 01 .byte 0x1
+ 11380 0d3e 5203 .value 0x352
+ 11381 0d40 B4000000 .long 0xb4
+ 11382 0d44 00 .byte 0x0
+ 11383 0d45 27 .uleb128 0x27
+ 11384 0d46 00000000 .long .LASF327
+ 11385 0d4a 03 .byte 0x3
+ 11386 0d4b 4605 .value 0x546
+ 11387 0d4d 01 .byte 0x1
+ 11388 0d4e C9010000 .long 0x1c9
+ 11389 0d52 03 .byte 0x3
+ 11390 0d53 640D0000 .long 0xd64
+ 11391 0d57 28 .uleb128 0x28
+
GAS LISTING /tmp/ccPaCTqg.s page 347
+
+
+ 11392 0d58 00000000 .long .LASF63
+ 11393 0d5c 03 .byte 0x3
+ 11394 0d5d 4605 .value 0x546
+ 11395 0d5f C9010000 .long 0x1c9
+ 11396 0d63 00 .byte 0x0
+ 11397 0d64 27 .uleb128 0x27
+ 11398 0d65 00000000 .long .LASF328
+ 11399 0d69 01 .byte 0x1
+ 11400 0d6a C001 .value 0x1c0
+ 11401 0d6c 01 .byte 0x1
+ 11402 0d6d FD000000 .long 0xfd
+ 11403 0d71 03 .byte 0x3
+ 11404 0d72 8F0D0000 .long 0xd8f
+ 11405 0d76 2A .uleb128 0x2a
+ 11406 0d77 76696E00 .string "vin"
+ 11407 0d7b 01 .byte 0x1
+ 11408 0d7c C001 .value 0x1c0
+ 11409 0d7e FD000000 .long 0xfd
+ 11410 0d82 28 .uleb128 0x28
+ 11411 0d83 00000000 .long .LASF329
+ 11412 0d87 01 .byte 0x1
+ 11413 0d88 C001 .value 0x1c0
+ 11414 0d8a B4000000 .long 0xb4
+ 11415 0d8e 00 .byte 0x0
+ 11416 0d8f 27 .uleb128 0x27
+ 11417 0d90 00000000 .long .LASF330
+ 11418 0d94 03 .byte 0x3
+ 11419 0d95 1A06 .value 0x61a
+ 11420 0d97 01 .byte 0x1
+ 11421 0d98 C9010000 .long 0x1c9
+ 11422 0d9c 03 .byte 0x3
+ 11423 0d9d BA0D0000 .long 0xdba
+ 11424 0da1 28 .uleb128 0x28
+ 11425 0da2 00000000 .long .LASF63
+ 11426 0da6 03 .byte 0x3
+ 11427 0da7 1A06 .value 0x61a
+ 11428 0da9 C9010000 .long 0x1c9
+ 11429 0dad 2B .uleb128 0x2b
+ 11430 0dae 00000000 .long .LASF331
+ 11431 0db2 03 .byte 0x3
+ 11432 0db3 1D06 .value 0x61d
+ 11433 0db5 C9010000 .long 0x1c9
+ 11434 0db9 00 .byte 0x0
+ 11435 0dba 27 .uleb128 0x27
+ 11436 0dbb 00000000 .long .LASF332
+ 11437 0dbf 03 .byte 0x3
+ 11438 0dc0 FA04 .value 0x4fa
+ 11439 0dc2 01 .byte 0x1
+ 11440 0dc3 C9010000 .long 0x1c9
+ 11441 0dc7 03 .byte 0x3
+ 11442 0dc8 F60D0000 .long 0xdf6
+ 11443 0dcc 28 .uleb128 0x28
+ 11444 0dcd 00000000 .long .LASF63
+ 11445 0dd1 03 .byte 0x3
+ 11446 0dd2 FA04 .value 0x4fa
+ 11447 0dd4 C9010000 .long 0x1c9
+ 11448 0dd8 2C .uleb128 0x2c
+
GAS LISTING /tmp/ccPaCTqg.s page 348
+
+
+ 11449 0dd9 00000000 .long .LASF329
+ 11450 0ddd 03 .byte 0x3
+ 11451 0dde FD04 .value 0x4fd
+ 11452 0de0 F60D0000 .long 0xdf6
+ 11453 0de4 10 .byte 0x10
+ 11454 0de5 FF .byte 0xff
+ 11455 0de6 FF .byte 0xff
+ 11456 0de7 FF .byte 0xff
+ 11457 0de8 FF .byte 0xff
+ 11458 0de9 00 .byte 0x0
+ 11459 0dea 01 .byte 0x1
+ 11460 0deb 02 .byte 0x2
+ 11461 0dec 03 .byte 0x3
+ 11462 0ded 04 .byte 0x4
+ 11463 0dee 05 .byte 0x5
+ 11464 0def 06 .byte 0x6
+ 11465 0df0 07 .byte 0x7
+ 11466 0df1 08 .byte 0x8
+ 11467 0df2 09 .byte 0x9
+ 11468 0df3 0A .byte 0xa
+ 11469 0df4 0B .byte 0xb
+ 11470 0df5 00 .byte 0x0
+ 11471 0df6 06 .uleb128 0x6
+ 11472 0df7 C9010000 .long 0x1c9
+ 11473 0dfb 27 .uleb128 0x27
+ 11474 0dfc 00000000 .long .LASF333
+ 11475 0e00 03 .byte 0x3
+ 11476 0e01 7101 .value 0x171
+ 11477 0e03 01 .byte 0x1
+ 11478 0e04 C9010000 .long 0x1c9
+ 11479 0e08 03 .byte 0x3
+ 11480 0e09 260E0000 .long 0xe26
+ 11481 0e0d 28 .uleb128 0x28
+ 11482 0e0e 00000000 .long .LASF334
+ 11483 0e12 03 .byte 0x3
+ 11484 0e13 7101 .value 0x171
+ 11485 0e15 C9010000 .long 0x1c9
+ 11486 0e19 28 .uleb128 0x28
+ 11487 0e1a 00000000 .long .LASF329
+ 11488 0e1e 03 .byte 0x3
+ 11489 0e1f 7101 .value 0x171
+ 11490 0e21 C9010000 .long 0x1c9
+ 11491 0e25 00 .byte 0x0
+ 11492 0e26 27 .uleb128 0x27
+ 11493 0e27 00000000 .long .LASF335
+ 11494 0e2b 01 .byte 0x1
+ 11495 0e2c 0F02 .value 0x20f
+ 11496 0e2e 01 .byte 0x1
+ 11497 0e2f FD000000 .long 0xfd
+ 11498 0e33 03 .byte 0x3
+ 11499 0e34 510E0000 .long 0xe51
+ 11500 0e38 2A .uleb128 0x2a
+ 11501 0e39 76696E00 .string "vin"
+ 11502 0e3d 01 .byte 0x1
+ 11503 0e3e 0F02 .value 0x20f
+ 11504 0e40 FD000000 .long 0xfd
+ 11505 0e44 28 .uleb128 0x28
+
GAS LISTING /tmp/ccPaCTqg.s page 349
+
+
+ 11506 0e45 00000000 .long .LASF336
+ 11507 0e49 01 .byte 0x1
+ 11508 0e4a 0F02 .value 0x20f
+ 11509 0e4c 7E0B0000 .long 0xb7e
+ 11510 0e50 00 .byte 0x0
+ 11511 0e51 2D .uleb128 0x2d
+ 11512 0e52 00000000 .long .LASF346
+ 11513 0e56 03 .byte 0x3
+ 11514 0e57 C206 .value 0x6c2
+ 11515 0e59 01 .byte 0x1
+ 11516 0e5a 00000000 .quad .LFB656
+ 11516 00000000
+ 11517 0e62 00000000 .quad .LFE656
+ 11517 00000000
+ 11518 0e6a 00000000 .long .LLST6
+ 11519 0e6e 712B0000 .long 0x2b71
+ 11520 0e72 20 .uleb128 0x20
+ 11521 0e73 00000000 .long .LASF61
+ 11522 0e77 03 .byte 0x3
+ 11523 0e78 C206 .value 0x6c2
+ 11524 0e7a 712B0000 .long 0x2b71
+ 11525 0e7e 03 .byte 0x3
+ 11526 0e7f 91 .byte 0x91
+ 11527 0e80 E862 .sleb128 -3736
+ 11528 0e82 2E .uleb128 0x2e
+ 11529 0e83 6B657900 .string "key"
+ 11530 0e87 03 .byte 0x3
+ 11531 0e88 C206 .value 0x6c2
+ 11532 0e8a 772B0000 .long 0x2b77
+ 11533 0e8e 03 .byte 0x3
+ 11534 0e8f 91 .byte 0x91
+ 11535 0e90 E062 .sleb128 -3744
+ 11536 0e92 2F .uleb128 0x2f
+ 11537 0e93 00000000 .long .LASF63
+ 11538 0e97 03 .byte 0x3
+ 11539 0e98 C406 .value 0x6c4
+ 11540 0e9a C9010000 .long 0x1c9
+ 11541 0e9e 03 .byte 0x3
+ 11542 0e9f 91 .byte 0x91
+ 11543 0ea0 F062 .sleb128 -3728
+ 11544 0ea2 2F .uleb128 0x2f
+ 11545 0ea3 00000000 .long .LASF337
+ 11546 0ea7 03 .byte 0x3
+ 11547 0ea8 C506 .value 0x6c5
+ 11548 0eaa C9010000 .long 0x1c9
+ 11549 0eae 03 .byte 0x3
+ 11550 0eaf 91 .byte 0x91
+ 11551 0eb0 8063 .sleb128 -3712
+ 11552 0eb2 30 .uleb128 0x30
+ 11553 0eb3 BB0C0000 .long 0xcbb
+ 11554 0eb7 00000000 .quad .LBB284
+ 11554 00000000
+ 11555 0ebf 00000000 .quad .LBE284
+ 11555 00000000
+ 11556 0ec7 03 .byte 0x3
+ 11557 0ec8 C706 .value 0x6c7
+ 11558 0eca F30E0000 .long 0xef3
+
GAS LISTING /tmp/ccPaCTqg.s page 350
+
+
+ 11559 0ece 31 .uleb128 0x31
+ 11560 0ecf CC0C0000 .long 0xccc
+ 11561 0ed3 03 .byte 0x3
+ 11562 0ed4 91 .byte 0x91
+ 11563 0ed5 9063 .sleb128 -3696
+ 11564 0ed7 32 .uleb128 0x32
+ 11565 0ed8 00000000 .quad .LBB285
+ 11565 00000000
+ 11566 0ee0 00000000 .quad .LBE285
+ 11566 00000000
+ 11567 0ee8 33 .uleb128 0x33
+ 11568 0ee9 D70C0000 .long 0xcd7
+ 11569 0eed 03 .byte 0x3
+ 11570 0eee 76 .byte 0x76
+ 11571 0eef A060 .sleb128 -4064
+ 11572 0ef1 00 .byte 0x0
+ 11573 0ef2 00 .byte 0x0
+ 11574 0ef3 30 .uleb128 0x30
+ 11575 0ef4 E30C0000 .long 0xce3
+ 11576 0ef8 00000000 .quad .LBB286
+ 11576 00000000
+ 11577 0f00 00000000 .quad .LBE286
+ 11577 00000000
+ 11578 0f08 03 .byte 0x3
+ 11579 0f09 D006 .value 0x6d0
+ 11580 0f0b B90F0000 .long 0xfb9
+ 11581 0f0f 31 .uleb128 0x31
+ 11582 0f10 010D0000 .long 0xd01
+ 11583 0f14 03 .byte 0x3
+ 11584 0f15 91 .byte 0x91
+ 11585 0f16 9C63 .sleb128 -3684
+ 11586 0f18 31 .uleb128 0x31
+ 11587 0f19 F50C0000 .long 0xcf5
+ 11588 0f1d 03 .byte 0x3
+ 11589 0f1e 91 .byte 0x91
+ 11590 0f1f A063 .sleb128 -3680
+ 11591 0f21 32 .uleb128 0x32
+ 11592 0f22 00000000 .quad .LBB287
+ 11592 00000000
+ 11593 0f2a 00000000 .quad .LBE287
+ 11593 00000000
+ 11594 0f32 33 .uleb128 0x33
+ 11595 0f33 0D0D0000 .long 0xd0d
+ 11596 0f37 03 .byte 0x3
+ 11597 0f38 76 .byte 0x76
+ 11598 0f39 B060 .sleb128 -4048
+ 11599 0f3b 30 .uleb128 0x30
+ 11600 0f3c 1A0D0000 .long 0xd1a
+ 11601 0f40 00000000 .quad .LBB288
+ 11601 00000000
+ 11602 0f48 00000000 .quad .LBE288
+ 11602 00000000
+ 11603 0f50 03 .byte 0x3
+ 11604 0f51 8A06 .value 0x68a
+ 11605 0f53 6A0F0000 .long 0xf6a
+ 11606 0f57 31 .uleb128 0x31
+ 11607 0f58 380D0000 .long 0xd38
+
GAS LISTING /tmp/ccPaCTqg.s page 351
+
+
+ 11608 0f5c 03 .byte 0x3
+ 11609 0f5d 91 .byte 0x91
+ 11610 0f5e BC63 .sleb128 -3652
+ 11611 0f60 31 .uleb128 0x31
+ 11612 0f61 2C0D0000 .long 0xd2c
+ 11613 0f65 03 .byte 0x3
+ 11614 0f66 91 .byte 0x91
+ 11615 0f67 C063 .sleb128 -3648
+ 11616 0f69 00 .byte 0x0
+ 11617 0f6a 34 .uleb128 0x34
+ 11618 0f6b 450D0000 .long 0xd45
+ 11619 0f6f 00000000 .quad .LBB290
+ 11619 00000000
+ 11620 0f77 00000000 .quad .LBE290
+ 11620 00000000
+ 11621 0f7f 03 .byte 0x3
+ 11622 0f80 8B06 .value 0x68b
+ 11623 0f82 31 .uleb128 0x31
+ 11624 0f83 570D0000 .long 0xd57
+ 11625 0f87 03 .byte 0x3
+ 11626 0f88 91 .byte 0x91
+ 11627 0f89 D063 .sleb128 -3632
+ 11628 0f8b 34 .uleb128 0x34
+ 11629 0f8c 640D0000 .long 0xd64
+ 11630 0f90 00000000 .quad .LBB292
+ 11630 00000000
+ 11631 0f98 00000000 .quad .LBE292
+ 11631 00000000
+ 11632 0fa0 03 .byte 0x3
+ 11633 0fa1 4905 .value 0x549
+ 11634 0fa3 31 .uleb128 0x31
+ 11635 0fa4 820D0000 .long 0xd82
+ 11636 0fa8 03 .byte 0x3
+ 11637 0fa9 91 .byte 0x91
+ 11638 0faa EC63 .sleb128 -3604
+ 11639 0fac 31 .uleb128 0x31
+ 11640 0fad 760D0000 .long 0xd76
+ 11641 0fb1 03 .byte 0x3
+ 11642 0fb2 91 .byte 0x91
+ 11643 0fb3 F063 .sleb128 -3600
+ 11644 0fb5 00 .byte 0x0
+ 11645 0fb6 00 .byte 0x0
+ 11646 0fb7 00 .byte 0x0
+ 11647 0fb8 00 .byte 0x0
+ 11648 0fb9 30 .uleb128 0x30
+ 11649 0fba 8F0D0000 .long 0xd8f
+ 11650 0fbe 00000000 .quad .LBB294
+ 11650 00000000
+ 11651 0fc6 00000000 .quad .LBE294
+ 11651 00000000
+ 11652 0fce 03 .byte 0x3
+ 11653 0fcf D006 .value 0x6d0
+ 11654 0fd1 CD110000 .long 0x11cd
+ 11655 0fd5 31 .uleb128 0x31
+ 11656 0fd6 A10D0000 .long 0xda1
+ 11657 0fda 03 .byte 0x3
+ 11658 0fdb 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 352
+
+
+ 11659 0fdc 8064 .sleb128 -3584
+ 11660 0fde 32 .uleb128 0x32
+ 11661 0fdf 00000000 .quad .LBB295
+ 11661 00000000
+ 11662 0fe7 00000000 .quad .LBE295
+ 11662 00000000
+ 11663 0fef 33 .uleb128 0x33
+ 11664 0ff0 AD0D0000 .long 0xdad
+ 11665 0ff4 03 .byte 0x3
+ 11666 0ff5 76 .byte 0x76
+ 11667 0ff6 C060 .sleb128 -4032
+ 11668 0ff8 30 .uleb128 0x30
+ 11669 0ff9 BA0D0000 .long 0xdba
+ 11670 0ffd 00000000 .quad .LBB296
+ 11670 00000000
+ 11671 1005 00000000 .quad .LBE296
+ 11671 00000000
+ 11672 100d 03 .byte 0x3
+ 11673 100e 1F06 .value 0x61f
+ 11674 1010 95100000 .long 0x1095
+ 11675 1014 31 .uleb128 0x31
+ 11676 1015 CC0D0000 .long 0xdcc
+ 11677 1019 03 .byte 0x3
+ 11678 101a 91 .byte 0x91
+ 11679 101b 9064 .sleb128 -3568
+ 11680 101d 32 .uleb128 0x32
+ 11681 101e 00000000 .quad .LBB297
+ 11681 00000000
+ 11682 1026 00000000 .quad .LBE297
+ 11682 00000000
+ 11683 102e 33 .uleb128 0x33
+ 11684 102f D80D0000 .long 0xdd8
+ 11685 1033 09 .byte 0x9
+ 11686 1034 03 .byte 0x3
+ 11687 1035 00000000 .quad mask.8002
+ 11687 00000000
+ 11688 103d 34 .uleb128 0x34
+ 11689 103e FB0D0000 .long 0xdfb
+ 11690 1042 00000000 .quad .LBB298
+ 11690 00000000
+ 11691 104a 00000000 .quad .LBE298
+ 11691 00000000
+ 11692 1052 03 .byte 0x3
+ 11693 1053 FE04 .value 0x4fe
+ 11694 1055 31 .uleb128 0x31
+ 11695 1056 190E0000 .long 0xe19
+ 11696 105a 03 .byte 0x3
+ 11697 105b 91 .byte 0x91
+ 11698 105c A064 .sleb128 -3552
+ 11699 105e 31 .uleb128 0x31
+ 11700 105f 0D0E0000 .long 0xe0d
+ 11701 1063 03 .byte 0x3
+ 11702 1064 91 .byte 0x91
+ 11703 1065 B064 .sleb128 -3536
+ 11704 1067 34 .uleb128 0x34
+ 11705 1068 260E0000 .long 0xe26
+ 11706 106c 00000000 .quad .LBB300
+
GAS LISTING /tmp/ccPaCTqg.s page 353
+
+
+ 11706 00000000
+ 11707 1074 00000000 .quad .LBE300
+ 11707 00000000
+ 11708 107c 03 .byte 0x3
+ 11709 107d 7501 .value 0x175
+ 11710 107f 31 .uleb128 0x31
+ 11711 1080 440E0000 .long 0xe44
+ 11712 1084 03 .byte 0x3
+ 11713 1085 91 .byte 0x91
+ 11714 1086 C064 .sleb128 -3520
+ 11715 1088 31 .uleb128 0x31
+ 11716 1089 380E0000 .long 0xe38
+ 11717 108d 03 .byte 0x3
+ 11718 108e 91 .byte 0x91
+ 11719 108f D064 .sleb128 -3504
+ 11720 1091 00 .byte 0x0
+ 11721 1092 00 .byte 0x0
+ 11722 1093 00 .byte 0x0
+ 11723 1094 00 .byte 0x0
+ 11724 1095 30 .uleb128 0x30
+ 11725 1096 BA0D0000 .long 0xdba
+ 11726 109a 00000000 .quad .LBB302
+ 11726 00000000
+ 11727 10a2 00000000 .quad .LBE302
+ 11727 00000000
+ 11728 10aa 03 .byte 0x3
+ 11729 10ab 2006 .value 0x620
+ 11730 10ad 32110000 .long 0x1132
+ 11731 10b1 31 .uleb128 0x31
+ 11732 10b2 CC0D0000 .long 0xdcc
+ 11733 10b6 03 .byte 0x3
+ 11734 10b7 91 .byte 0x91
+ 11735 10b8 E064 .sleb128 -3488
+ 11736 10ba 32 .uleb128 0x32
+ 11737 10bb 00000000 .quad .LBB303
+ 11737 00000000
+ 11738 10c3 00000000 .quad .LBE303
+ 11738 00000000
+ 11739 10cb 33 .uleb128 0x33
+ 11740 10cc D80D0000 .long 0xdd8
+ 11741 10d0 09 .byte 0x9
+ 11742 10d1 03 .byte 0x3
+ 11743 10d2 00000000 .quad mask.8002
+ 11743 00000000
+ 11744 10da 34 .uleb128 0x34
+ 11745 10db FB0D0000 .long 0xdfb
+ 11746 10df 00000000 .quad .LBB304
+ 11746 00000000
+ 11747 10e7 00000000 .quad .LBE304
+ 11747 00000000
+ 11748 10ef 03 .byte 0x3
+ 11749 10f0 FE04 .value 0x4fe
+ 11750 10f2 31 .uleb128 0x31
+ 11751 10f3 190E0000 .long 0xe19
+ 11752 10f7 03 .byte 0x3
+ 11753 10f8 91 .byte 0x91
+ 11754 10f9 F064 .sleb128 -3472
+
GAS LISTING /tmp/ccPaCTqg.s page 354
+
+
+ 11755 10fb 31 .uleb128 0x31
+ 11756 10fc 0D0E0000 .long 0xe0d
+ 11757 1100 03 .byte 0x3
+ 11758 1101 91 .byte 0x91
+ 11759 1102 8065 .sleb128 -3456
+ 11760 1104 34 .uleb128 0x34
+ 11761 1105 260E0000 .long 0xe26
+ 11762 1109 00000000 .quad .LBB306
+ 11762 00000000
+ 11763 1111 00000000 .quad .LBE306
+ 11763 00000000
+ 11764 1119 03 .byte 0x3
+ 11765 111a 7501 .value 0x175
+ 11766 111c 31 .uleb128 0x31
+ 11767 111d 440E0000 .long 0xe44
+ 11768 1121 03 .byte 0x3
+ 11769 1122 91 .byte 0x91
+ 11770 1123 9065 .sleb128 -3440
+ 11771 1125 31 .uleb128 0x31
+ 11772 1126 380E0000 .long 0xe38
+ 11773 112a 03 .byte 0x3
+ 11774 112b 91 .byte 0x91
+ 11775 112c A065 .sleb128 -3424
+ 11776 112e 00 .byte 0x0
+ 11777 112f 00 .byte 0x0
+ 11778 1130 00 .byte 0x0
+ 11779 1131 00 .byte 0x0
+ 11780 1132 34 .uleb128 0x34
+ 11781 1133 BA0D0000 .long 0xdba
+ 11782 1137 00000000 .quad .LBB308
+ 11782 00000000
+ 11783 113f 00000000 .quad .LBE308
+ 11783 00000000
+ 11784 1147 03 .byte 0x3
+ 11785 1148 2106 .value 0x621
+ 11786 114a 31 .uleb128 0x31
+ 11787 114b CC0D0000 .long 0xdcc
+ 11788 114f 03 .byte 0x3
+ 11789 1150 91 .byte 0x91
+ 11790 1151 B065 .sleb128 -3408
+ 11791 1153 32 .uleb128 0x32
+ 11792 1154 00000000 .quad .LBB309
+ 11792 00000000
+ 11793 115c 00000000 .quad .LBE309
+ 11793 00000000
+ 11794 1164 33 .uleb128 0x33
+ 11795 1165 D80D0000 .long 0xdd8
+ 11796 1169 09 .byte 0x9
+ 11797 116a 03 .byte 0x3
+ 11798 116b 00000000 .quad mask.8002
+ 11798 00000000
+ 11799 1173 34 .uleb128 0x34
+ 11800 1174 FB0D0000 .long 0xdfb
+ 11801 1178 00000000 .quad .LBB310
+ 11801 00000000
+ 11802 1180 00000000 .quad .LBE310
+ 11802 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 355
+
+
+ 11803 1188 03 .byte 0x3
+ 11804 1189 FE04 .value 0x4fe
+ 11805 118b 31 .uleb128 0x31
+ 11806 118c 190E0000 .long 0xe19
+ 11807 1190 03 .byte 0x3
+ 11808 1191 91 .byte 0x91
+ 11809 1192 C065 .sleb128 -3392
+ 11810 1194 31 .uleb128 0x31
+ 11811 1195 0D0E0000 .long 0xe0d
+ 11812 1199 03 .byte 0x3
+ 11813 119a 91 .byte 0x91
+ 11814 119b D065 .sleb128 -3376
+ 11815 119d 34 .uleb128 0x34
+ 11816 119e 260E0000 .long 0xe26
+ 11817 11a2 00000000 .quad .LBB312
+ 11817 00000000
+ 11818 11aa 00000000 .quad .LBE312
+ 11818 00000000
+ 11819 11b2 03 .byte 0x3
+ 11820 11b3 7501 .value 0x175
+ 11821 11b5 31 .uleb128 0x31
+ 11822 11b6 440E0000 .long 0xe44
+ 11823 11ba 03 .byte 0x3
+ 11824 11bb 91 .byte 0x91
+ 11825 11bc E065 .sleb128 -3360
+ 11826 11be 31 .uleb128 0x31
+ 11827 11bf 380E0000 .long 0xe38
+ 11828 11c3 03 .byte 0x3
+ 11829 11c4 91 .byte 0x91
+ 11830 11c5 F065 .sleb128 -3344
+ 11831 11c7 00 .byte 0x0
+ 11832 11c8 00 .byte 0x0
+ 11833 11c9 00 .byte 0x0
+ 11834 11ca 00 .byte 0x0
+ 11835 11cb 00 .byte 0x0
+ 11836 11cc 00 .byte 0x0
+ 11837 11cd 30 .uleb128 0x30
+ 11838 11ce E30C0000 .long 0xce3
+ 11839 11d2 00000000 .quad .LBB314
+ 11839 00000000
+ 11840 11da 00000000 .quad .LBE314
+ 11840 00000000
+ 11841 11e2 03 .byte 0x3
+ 11842 11e3 D106 .value 0x6d1
+ 11843 11e5 93120000 .long 0x1293
+ 11844 11e9 31 .uleb128 0x31
+ 11845 11ea 010D0000 .long 0xd01
+ 11846 11ee 03 .byte 0x3
+ 11847 11ef 91 .byte 0x91
+ 11848 11f0 8C66 .sleb128 -3316
+ 11849 11f2 31 .uleb128 0x31
+ 11850 11f3 F50C0000 .long 0xcf5
+ 11851 11f7 03 .byte 0x3
+ 11852 11f8 91 .byte 0x91
+ 11853 11f9 9066 .sleb128 -3312
+ 11854 11fb 32 .uleb128 0x32
+ 11855 11fc 00000000 .quad .LBB315
+
GAS LISTING /tmp/ccPaCTqg.s page 356
+
+
+ 11855 00000000
+ 11856 1204 00000000 .quad .LBE315
+ 11856 00000000
+ 11857 120c 33 .uleb128 0x33
+ 11858 120d 0D0D0000 .long 0xd0d
+ 11859 1211 03 .byte 0x3
+ 11860 1212 76 .byte 0x76
+ 11861 1213 D060 .sleb128 -4016
+ 11862 1215 30 .uleb128 0x30
+ 11863 1216 1A0D0000 .long 0xd1a
+ 11864 121a 00000000 .quad .LBB316
+ 11864 00000000
+ 11865 1222 00000000 .quad .LBE316
+ 11865 00000000
+ 11866 122a 03 .byte 0x3
+ 11867 122b 8A06 .value 0x68a
+ 11868 122d 44120000 .long 0x1244
+ 11869 1231 31 .uleb128 0x31
+ 11870 1232 380D0000 .long 0xd38
+ 11871 1236 03 .byte 0x3
+ 11872 1237 91 .byte 0x91
+ 11873 1238 AC66 .sleb128 -3284
+ 11874 123a 31 .uleb128 0x31
+ 11875 123b 2C0D0000 .long 0xd2c
+ 11876 123f 03 .byte 0x3
+ 11877 1240 91 .byte 0x91
+ 11878 1241 B066 .sleb128 -3280
+ 11879 1243 00 .byte 0x0
+ 11880 1244 34 .uleb128 0x34
+ 11881 1245 450D0000 .long 0xd45
+ 11882 1249 00000000 .quad .LBB318
+ 11882 00000000
+ 11883 1251 00000000 .quad .LBE318
+ 11883 00000000
+ 11884 1259 03 .byte 0x3
+ 11885 125a 8B06 .value 0x68b
+ 11886 125c 31 .uleb128 0x31
+ 11887 125d 570D0000 .long 0xd57
+ 11888 1261 03 .byte 0x3
+ 11889 1262 91 .byte 0x91
+ 11890 1263 C066 .sleb128 -3264
+ 11891 1265 34 .uleb128 0x34
+ 11892 1266 640D0000 .long 0xd64
+ 11893 126a 00000000 .quad .LBB320
+ 11893 00000000
+ 11894 1272 00000000 .quad .LBE320
+ 11894 00000000
+ 11895 127a 03 .byte 0x3
+ 11896 127b 4905 .value 0x549
+ 11897 127d 31 .uleb128 0x31
+ 11898 127e 820D0000 .long 0xd82
+ 11899 1282 03 .byte 0x3
+ 11900 1283 91 .byte 0x91
+ 11901 1284 DC66 .sleb128 -3236
+ 11902 1286 31 .uleb128 0x31
+ 11903 1287 760D0000 .long 0xd76
+ 11904 128b 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 357
+
+
+ 11905 128c 91 .byte 0x91
+ 11906 128d E066 .sleb128 -3232
+ 11907 128f 00 .byte 0x0
+ 11908 1290 00 .byte 0x0
+ 11909 1291 00 .byte 0x0
+ 11910 1292 00 .byte 0x0
+ 11911 1293 30 .uleb128 0x30
+ 11912 1294 8F0D0000 .long 0xd8f
+ 11913 1298 00000000 .quad .LBB322
+ 11913 00000000
+ 11914 12a0 00000000 .quad .LBE322
+ 11914 00000000
+ 11915 12a8 03 .byte 0x3
+ 11916 12a9 D106 .value 0x6d1
+ 11917 12ab A7140000 .long 0x14a7
+ 11918 12af 31 .uleb128 0x31
+ 11919 12b0 A10D0000 .long 0xda1
+ 11920 12b4 03 .byte 0x3
+ 11921 12b5 91 .byte 0x91
+ 11922 12b6 F066 .sleb128 -3216
+ 11923 12b8 32 .uleb128 0x32
+ 11924 12b9 00000000 .quad .LBB323
+ 11924 00000000
+ 11925 12c1 00000000 .quad .LBE323
+ 11925 00000000
+ 11926 12c9 33 .uleb128 0x33
+ 11927 12ca AD0D0000 .long 0xdad
+ 11928 12ce 03 .byte 0x3
+ 11929 12cf 76 .byte 0x76
+ 11930 12d0 E060 .sleb128 -4000
+ 11931 12d2 30 .uleb128 0x30
+ 11932 12d3 BA0D0000 .long 0xdba
+ 11933 12d7 00000000 .quad .LBB324
+ 11933 00000000
+ 11934 12df 00000000 .quad .LBE324
+ 11934 00000000
+ 11935 12e7 03 .byte 0x3
+ 11936 12e8 1F06 .value 0x61f
+ 11937 12ea 6F130000 .long 0x136f
+ 11938 12ee 31 .uleb128 0x31
+ 11939 12ef CC0D0000 .long 0xdcc
+ 11940 12f3 03 .byte 0x3
+ 11941 12f4 91 .byte 0x91
+ 11942 12f5 8067 .sleb128 -3200
+ 11943 12f7 32 .uleb128 0x32
+ 11944 12f8 00000000 .quad .LBB325
+ 11944 00000000
+ 11945 1300 00000000 .quad .LBE325
+ 11945 00000000
+ 11946 1308 33 .uleb128 0x33
+ 11947 1309 D80D0000 .long 0xdd8
+ 11948 130d 09 .byte 0x9
+ 11949 130e 03 .byte 0x3
+ 11950 130f 00000000 .quad mask.8002
+ 11950 00000000
+ 11951 1317 34 .uleb128 0x34
+ 11952 1318 FB0D0000 .long 0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s page 358
+
+
+ 11953 131c 00000000 .quad .LBB326
+ 11953 00000000
+ 11954 1324 00000000 .quad .LBE326
+ 11954 00000000
+ 11955 132c 03 .byte 0x3
+ 11956 132d FE04 .value 0x4fe
+ 11957 132f 31 .uleb128 0x31
+ 11958 1330 190E0000 .long 0xe19
+ 11959 1334 03 .byte 0x3
+ 11960 1335 91 .byte 0x91
+ 11961 1336 9067 .sleb128 -3184
+ 11962 1338 31 .uleb128 0x31
+ 11963 1339 0D0E0000 .long 0xe0d
+ 11964 133d 03 .byte 0x3
+ 11965 133e 91 .byte 0x91
+ 11966 133f A067 .sleb128 -3168
+ 11967 1341 34 .uleb128 0x34
+ 11968 1342 260E0000 .long 0xe26
+ 11969 1346 00000000 .quad .LBB328
+ 11969 00000000
+ 11970 134e 00000000 .quad .LBE328
+ 11970 00000000
+ 11971 1356 03 .byte 0x3
+ 11972 1357 7501 .value 0x175
+ 11973 1359 31 .uleb128 0x31
+ 11974 135a 440E0000 .long 0xe44
+ 11975 135e 03 .byte 0x3
+ 11976 135f 91 .byte 0x91
+ 11977 1360 B067 .sleb128 -3152
+ 11978 1362 31 .uleb128 0x31
+ 11979 1363 380E0000 .long 0xe38
+ 11980 1367 03 .byte 0x3
+ 11981 1368 91 .byte 0x91
+ 11982 1369 C067 .sleb128 -3136
+ 11983 136b 00 .byte 0x0
+ 11984 136c 00 .byte 0x0
+ 11985 136d 00 .byte 0x0
+ 11986 136e 00 .byte 0x0
+ 11987 136f 30 .uleb128 0x30
+ 11988 1370 BA0D0000 .long 0xdba
+ 11989 1374 00000000 .quad .LBB330
+ 11989 00000000
+ 11990 137c 00000000 .quad .LBE330
+ 11990 00000000
+ 11991 1384 03 .byte 0x3
+ 11992 1385 2006 .value 0x620
+ 11993 1387 0C140000 .long 0x140c
+ 11994 138b 31 .uleb128 0x31
+ 11995 138c CC0D0000 .long 0xdcc
+ 11996 1390 03 .byte 0x3
+ 11997 1391 91 .byte 0x91
+ 11998 1392 D067 .sleb128 -3120
+ 11999 1394 32 .uleb128 0x32
+ 12000 1395 00000000 .quad .LBB331
+ 12000 00000000
+ 12001 139d 00000000 .quad .LBE331
+ 12001 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 359
+
+
+ 12002 13a5 33 .uleb128 0x33
+ 12003 13a6 D80D0000 .long 0xdd8
+ 12004 13aa 09 .byte 0x9
+ 12005 13ab 03 .byte 0x3
+ 12006 13ac 00000000 .quad mask.8002
+ 12006 00000000
+ 12007 13b4 34 .uleb128 0x34
+ 12008 13b5 FB0D0000 .long 0xdfb
+ 12009 13b9 00000000 .quad .LBB332
+ 12009 00000000
+ 12010 13c1 00000000 .quad .LBE332
+ 12010 00000000
+ 12011 13c9 03 .byte 0x3
+ 12012 13ca FE04 .value 0x4fe
+ 12013 13cc 31 .uleb128 0x31
+ 12014 13cd 190E0000 .long 0xe19
+ 12015 13d1 03 .byte 0x3
+ 12016 13d2 91 .byte 0x91
+ 12017 13d3 E067 .sleb128 -3104
+ 12018 13d5 31 .uleb128 0x31
+ 12019 13d6 0D0E0000 .long 0xe0d
+ 12020 13da 03 .byte 0x3
+ 12021 13db 91 .byte 0x91
+ 12022 13dc F067 .sleb128 -3088
+ 12023 13de 34 .uleb128 0x34
+ 12024 13df 260E0000 .long 0xe26
+ 12025 13e3 00000000 .quad .LBB334
+ 12025 00000000
+ 12026 13eb 00000000 .quad .LBE334
+ 12026 00000000
+ 12027 13f3 03 .byte 0x3
+ 12028 13f4 7501 .value 0x175
+ 12029 13f6 31 .uleb128 0x31
+ 12030 13f7 440E0000 .long 0xe44
+ 12031 13fb 03 .byte 0x3
+ 12032 13fc 91 .byte 0x91
+ 12033 13fd 8068 .sleb128 -3072
+ 12034 13ff 31 .uleb128 0x31
+ 12035 1400 380E0000 .long 0xe38
+ 12036 1404 03 .byte 0x3
+ 12037 1405 91 .byte 0x91
+ 12038 1406 9068 .sleb128 -3056
+ 12039 1408 00 .byte 0x0
+ 12040 1409 00 .byte 0x0
+ 12041 140a 00 .byte 0x0
+ 12042 140b 00 .byte 0x0
+ 12043 140c 34 .uleb128 0x34
+ 12044 140d BA0D0000 .long 0xdba
+ 12045 1411 00000000 .quad .LBB336
+ 12045 00000000
+ 12046 1419 00000000 .quad .LBE336
+ 12046 00000000
+ 12047 1421 03 .byte 0x3
+ 12048 1422 2106 .value 0x621
+ 12049 1424 31 .uleb128 0x31
+ 12050 1425 CC0D0000 .long 0xdcc
+ 12051 1429 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 360
+
+
+ 12052 142a 91 .byte 0x91
+ 12053 142b A068 .sleb128 -3040
+ 12054 142d 32 .uleb128 0x32
+ 12055 142e 00000000 .quad .LBB337
+ 12055 00000000
+ 12056 1436 00000000 .quad .LBE337
+ 12056 00000000
+ 12057 143e 33 .uleb128 0x33
+ 12058 143f D80D0000 .long 0xdd8
+ 12059 1443 09 .byte 0x9
+ 12060 1444 03 .byte 0x3
+ 12061 1445 00000000 .quad mask.8002
+ 12061 00000000
+ 12062 144d 34 .uleb128 0x34
+ 12063 144e FB0D0000 .long 0xdfb
+ 12064 1452 00000000 .quad .LBB338
+ 12064 00000000
+ 12065 145a 00000000 .quad .LBE338
+ 12065 00000000
+ 12066 1462 03 .byte 0x3
+ 12067 1463 FE04 .value 0x4fe
+ 12068 1465 31 .uleb128 0x31
+ 12069 1466 190E0000 .long 0xe19
+ 12070 146a 03 .byte 0x3
+ 12071 146b 91 .byte 0x91
+ 12072 146c B068 .sleb128 -3024
+ 12073 146e 31 .uleb128 0x31
+ 12074 146f 0D0E0000 .long 0xe0d
+ 12075 1473 03 .byte 0x3
+ 12076 1474 91 .byte 0x91
+ 12077 1475 C068 .sleb128 -3008
+ 12078 1477 34 .uleb128 0x34
+ 12079 1478 260E0000 .long 0xe26
+ 12080 147c 00000000 .quad .LBB340
+ 12080 00000000
+ 12081 1484 00000000 .quad .LBE340
+ 12081 00000000
+ 12082 148c 03 .byte 0x3
+ 12083 148d 7501 .value 0x175
+ 12084 148f 31 .uleb128 0x31
+ 12085 1490 440E0000 .long 0xe44
+ 12086 1494 03 .byte 0x3
+ 12087 1495 91 .byte 0x91
+ 12088 1496 D068 .sleb128 -2992
+ 12089 1498 31 .uleb128 0x31
+ 12090 1499 380E0000 .long 0xe38
+ 12091 149d 03 .byte 0x3
+ 12092 149e 91 .byte 0x91
+ 12093 149f E068 .sleb128 -2976
+ 12094 14a1 00 .byte 0x0
+ 12095 14a2 00 .byte 0x0
+ 12096 14a3 00 .byte 0x0
+ 12097 14a4 00 .byte 0x0
+ 12098 14a5 00 .byte 0x0
+ 12099 14a6 00 .byte 0x0
+ 12100 14a7 30 .uleb128 0x30
+ 12101 14a8 E30C0000 .long 0xce3
+
GAS LISTING /tmp/ccPaCTqg.s page 361
+
+
+ 12102 14ac 00000000 .quad .LBB342
+ 12102 00000000
+ 12103 14b4 00000000 .quad .LBE342
+ 12103 00000000
+ 12104 14bc 03 .byte 0x3
+ 12105 14bd D206 .value 0x6d2
+ 12106 14bf 6D150000 .long 0x156d
+ 12107 14c3 31 .uleb128 0x31
+ 12108 14c4 010D0000 .long 0xd01
+ 12109 14c8 03 .byte 0x3
+ 12110 14c9 91 .byte 0x91
+ 12111 14ca FC68 .sleb128 -2948
+ 12112 14cc 31 .uleb128 0x31
+ 12113 14cd F50C0000 .long 0xcf5
+ 12114 14d1 03 .byte 0x3
+ 12115 14d2 91 .byte 0x91
+ 12116 14d3 8069 .sleb128 -2944
+ 12117 14d5 32 .uleb128 0x32
+ 12118 14d6 00000000 .quad .LBB343
+ 12118 00000000
+ 12119 14de 00000000 .quad .LBE343
+ 12119 00000000
+ 12120 14e6 33 .uleb128 0x33
+ 12121 14e7 0D0D0000 .long 0xd0d
+ 12122 14eb 03 .byte 0x3
+ 12123 14ec 76 .byte 0x76
+ 12124 14ed F060 .sleb128 -3984
+ 12125 14ef 30 .uleb128 0x30
+ 12126 14f0 1A0D0000 .long 0xd1a
+ 12127 14f4 00000000 .quad .LBB344
+ 12127 00000000
+ 12128 14fc 00000000 .quad .LBE344
+ 12128 00000000
+ 12129 1504 03 .byte 0x3
+ 12130 1505 8A06 .value 0x68a
+ 12131 1507 1E150000 .long 0x151e
+ 12132 150b 31 .uleb128 0x31
+ 12133 150c 380D0000 .long 0xd38
+ 12134 1510 03 .byte 0x3
+ 12135 1511 91 .byte 0x91
+ 12136 1512 9C69 .sleb128 -2916
+ 12137 1514 31 .uleb128 0x31
+ 12138 1515 2C0D0000 .long 0xd2c
+ 12139 1519 03 .byte 0x3
+ 12140 151a 91 .byte 0x91
+ 12141 151b A069 .sleb128 -2912
+ 12142 151d 00 .byte 0x0
+ 12143 151e 34 .uleb128 0x34
+ 12144 151f 450D0000 .long 0xd45
+ 12145 1523 00000000 .quad .LBB346
+ 12145 00000000
+ 12146 152b 00000000 .quad .LBE346
+ 12146 00000000
+ 12147 1533 03 .byte 0x3
+ 12148 1534 8B06 .value 0x68b
+ 12149 1536 31 .uleb128 0x31
+ 12150 1537 570D0000 .long 0xd57
+
GAS LISTING /tmp/ccPaCTqg.s page 362
+
+
+ 12151 153b 03 .byte 0x3
+ 12152 153c 91 .byte 0x91
+ 12153 153d B069 .sleb128 -2896
+ 12154 153f 34 .uleb128 0x34
+ 12155 1540 640D0000 .long 0xd64
+ 12156 1544 00000000 .quad .LBB348
+ 12156 00000000
+ 12157 154c 00000000 .quad .LBE348
+ 12157 00000000
+ 12158 1554 03 .byte 0x3
+ 12159 1555 4905 .value 0x549
+ 12160 1557 31 .uleb128 0x31
+ 12161 1558 820D0000 .long 0xd82
+ 12162 155c 03 .byte 0x3
+ 12163 155d 91 .byte 0x91
+ 12164 155e CC69 .sleb128 -2868
+ 12165 1560 31 .uleb128 0x31
+ 12166 1561 760D0000 .long 0xd76
+ 12167 1565 03 .byte 0x3
+ 12168 1566 91 .byte 0x91
+ 12169 1567 D069 .sleb128 -2864
+ 12170 1569 00 .byte 0x0
+ 12171 156a 00 .byte 0x0
+ 12172 156b 00 .byte 0x0
+ 12173 156c 00 .byte 0x0
+ 12174 156d 30 .uleb128 0x30
+ 12175 156e 8F0D0000 .long 0xd8f
+ 12176 1572 00000000 .quad .LBB350
+ 12176 00000000
+ 12177 157a 00000000 .quad .LBE350
+ 12177 00000000
+ 12178 1582 03 .byte 0x3
+ 12179 1583 D206 .value 0x6d2
+ 12180 1585 81170000 .long 0x1781
+ 12181 1589 31 .uleb128 0x31
+ 12182 158a A10D0000 .long 0xda1
+ 12183 158e 03 .byte 0x3
+ 12184 158f 91 .byte 0x91
+ 12185 1590 E069 .sleb128 -2848
+ 12186 1592 32 .uleb128 0x32
+ 12187 1593 00000000 .quad .LBB351
+ 12187 00000000
+ 12188 159b 00000000 .quad .LBE351
+ 12188 00000000
+ 12189 15a3 33 .uleb128 0x33
+ 12190 15a4 AD0D0000 .long 0xdad
+ 12191 15a8 03 .byte 0x3
+ 12192 15a9 76 .byte 0x76
+ 12193 15aa 8061 .sleb128 -3968
+ 12194 15ac 30 .uleb128 0x30
+ 12195 15ad BA0D0000 .long 0xdba
+ 12196 15b1 00000000 .quad .LBB352
+ 12196 00000000
+ 12197 15b9 00000000 .quad .LBE352
+ 12197 00000000
+ 12198 15c1 03 .byte 0x3
+ 12199 15c2 1F06 .value 0x61f
+
GAS LISTING /tmp/ccPaCTqg.s page 363
+
+
+ 12200 15c4 49160000 .long 0x1649
+ 12201 15c8 31 .uleb128 0x31
+ 12202 15c9 CC0D0000 .long 0xdcc
+ 12203 15cd 03 .byte 0x3
+ 12204 15ce 91 .byte 0x91
+ 12205 15cf F069 .sleb128 -2832
+ 12206 15d1 32 .uleb128 0x32
+ 12207 15d2 00000000 .quad .LBB353
+ 12207 00000000
+ 12208 15da 00000000 .quad .LBE353
+ 12208 00000000
+ 12209 15e2 33 .uleb128 0x33
+ 12210 15e3 D80D0000 .long 0xdd8
+ 12211 15e7 09 .byte 0x9
+ 12212 15e8 03 .byte 0x3
+ 12213 15e9 00000000 .quad mask.8002
+ 12213 00000000
+ 12214 15f1 34 .uleb128 0x34
+ 12215 15f2 FB0D0000 .long 0xdfb
+ 12216 15f6 00000000 .quad .LBB354
+ 12216 00000000
+ 12217 15fe 00000000 .quad .LBE354
+ 12217 00000000
+ 12218 1606 03 .byte 0x3
+ 12219 1607 FE04 .value 0x4fe
+ 12220 1609 31 .uleb128 0x31
+ 12221 160a 190E0000 .long 0xe19
+ 12222 160e 03 .byte 0x3
+ 12223 160f 91 .byte 0x91
+ 12224 1610 806A .sleb128 -2816
+ 12225 1612 31 .uleb128 0x31
+ 12226 1613 0D0E0000 .long 0xe0d
+ 12227 1617 03 .byte 0x3
+ 12228 1618 91 .byte 0x91
+ 12229 1619 906A .sleb128 -2800
+ 12230 161b 34 .uleb128 0x34
+ 12231 161c 260E0000 .long 0xe26
+ 12232 1620 00000000 .quad .LBB356
+ 12232 00000000
+ 12233 1628 00000000 .quad .LBE356
+ 12233 00000000
+ 12234 1630 03 .byte 0x3
+ 12235 1631 7501 .value 0x175
+ 12236 1633 31 .uleb128 0x31
+ 12237 1634 440E0000 .long 0xe44
+ 12238 1638 03 .byte 0x3
+ 12239 1639 91 .byte 0x91
+ 12240 163a A06A .sleb128 -2784
+ 12241 163c 31 .uleb128 0x31
+ 12242 163d 380E0000 .long 0xe38
+ 12243 1641 03 .byte 0x3
+ 12244 1642 91 .byte 0x91
+ 12245 1643 B06A .sleb128 -2768
+ 12246 1645 00 .byte 0x0
+ 12247 1646 00 .byte 0x0
+ 12248 1647 00 .byte 0x0
+ 12249 1648 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 364
+
+
+ 12250 1649 30 .uleb128 0x30
+ 12251 164a BA0D0000 .long 0xdba
+ 12252 164e 00000000 .quad .LBB358
+ 12252 00000000
+ 12253 1656 00000000 .quad .LBE358
+ 12253 00000000
+ 12254 165e 03 .byte 0x3
+ 12255 165f 2006 .value 0x620
+ 12256 1661 E6160000 .long 0x16e6
+ 12257 1665 31 .uleb128 0x31
+ 12258 1666 CC0D0000 .long 0xdcc
+ 12259 166a 03 .byte 0x3
+ 12260 166b 91 .byte 0x91
+ 12261 166c C06A .sleb128 -2752
+ 12262 166e 32 .uleb128 0x32
+ 12263 166f 00000000 .quad .LBB359
+ 12263 00000000
+ 12264 1677 00000000 .quad .LBE359
+ 12264 00000000
+ 12265 167f 33 .uleb128 0x33
+ 12266 1680 D80D0000 .long 0xdd8
+ 12267 1684 09 .byte 0x9
+ 12268 1685 03 .byte 0x3
+ 12269 1686 00000000 .quad mask.8002
+ 12269 00000000
+ 12270 168e 34 .uleb128 0x34
+ 12271 168f FB0D0000 .long 0xdfb
+ 12272 1693 00000000 .quad .LBB360
+ 12272 00000000
+ 12273 169b 00000000 .quad .LBE360
+ 12273 00000000
+ 12274 16a3 03 .byte 0x3
+ 12275 16a4 FE04 .value 0x4fe
+ 12276 16a6 31 .uleb128 0x31
+ 12277 16a7 190E0000 .long 0xe19
+ 12278 16ab 03 .byte 0x3
+ 12279 16ac 91 .byte 0x91
+ 12280 16ad D06A .sleb128 -2736
+ 12281 16af 31 .uleb128 0x31
+ 12282 16b0 0D0E0000 .long 0xe0d
+ 12283 16b4 03 .byte 0x3
+ 12284 16b5 91 .byte 0x91
+ 12285 16b6 E06A .sleb128 -2720
+ 12286 16b8 34 .uleb128 0x34
+ 12287 16b9 260E0000 .long 0xe26
+ 12288 16bd 00000000 .quad .LBB362
+ 12288 00000000
+ 12289 16c5 00000000 .quad .LBE362
+ 12289 00000000
+ 12290 16cd 03 .byte 0x3
+ 12291 16ce 7501 .value 0x175
+ 12292 16d0 31 .uleb128 0x31
+ 12293 16d1 440E0000 .long 0xe44
+ 12294 16d5 03 .byte 0x3
+ 12295 16d6 91 .byte 0x91
+ 12296 16d7 F06A .sleb128 -2704
+ 12297 16d9 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 365
+
+
+ 12298 16da 380E0000 .long 0xe38
+ 12299 16de 03 .byte 0x3
+ 12300 16df 91 .byte 0x91
+ 12301 16e0 806B .sleb128 -2688
+ 12302 16e2 00 .byte 0x0
+ 12303 16e3 00 .byte 0x0
+ 12304 16e4 00 .byte 0x0
+ 12305 16e5 00 .byte 0x0
+ 12306 16e6 34 .uleb128 0x34
+ 12307 16e7 BA0D0000 .long 0xdba
+ 12308 16eb 00000000 .quad .LBB364
+ 12308 00000000
+ 12309 16f3 00000000 .quad .LBE364
+ 12309 00000000
+ 12310 16fb 03 .byte 0x3
+ 12311 16fc 2106 .value 0x621
+ 12312 16fe 31 .uleb128 0x31
+ 12313 16ff CC0D0000 .long 0xdcc
+ 12314 1703 03 .byte 0x3
+ 12315 1704 91 .byte 0x91
+ 12316 1705 906B .sleb128 -2672
+ 12317 1707 32 .uleb128 0x32
+ 12318 1708 00000000 .quad .LBB365
+ 12318 00000000
+ 12319 1710 00000000 .quad .LBE365
+ 12319 00000000
+ 12320 1718 33 .uleb128 0x33
+ 12321 1719 D80D0000 .long 0xdd8
+ 12322 171d 09 .byte 0x9
+ 12323 171e 03 .byte 0x3
+ 12324 171f 00000000 .quad mask.8002
+ 12324 00000000
+ 12325 1727 34 .uleb128 0x34
+ 12326 1728 FB0D0000 .long 0xdfb
+ 12327 172c 00000000 .quad .LBB366
+ 12327 00000000
+ 12328 1734 00000000 .quad .LBE366
+ 12328 00000000
+ 12329 173c 03 .byte 0x3
+ 12330 173d FE04 .value 0x4fe
+ 12331 173f 31 .uleb128 0x31
+ 12332 1740 190E0000 .long 0xe19
+ 12333 1744 03 .byte 0x3
+ 12334 1745 91 .byte 0x91
+ 12335 1746 A06B .sleb128 -2656
+ 12336 1748 31 .uleb128 0x31
+ 12337 1749 0D0E0000 .long 0xe0d
+ 12338 174d 03 .byte 0x3
+ 12339 174e 91 .byte 0x91
+ 12340 174f B06B .sleb128 -2640
+ 12341 1751 34 .uleb128 0x34
+ 12342 1752 260E0000 .long 0xe26
+ 12343 1756 00000000 .quad .LBB368
+ 12343 00000000
+ 12344 175e 00000000 .quad .LBE368
+ 12344 00000000
+ 12345 1766 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 366
+
+
+ 12346 1767 7501 .value 0x175
+ 12347 1769 31 .uleb128 0x31
+ 12348 176a 440E0000 .long 0xe44
+ 12349 176e 03 .byte 0x3
+ 12350 176f 91 .byte 0x91
+ 12351 1770 C06B .sleb128 -2624
+ 12352 1772 31 .uleb128 0x31
+ 12353 1773 380E0000 .long 0xe38
+ 12354 1777 03 .byte 0x3
+ 12355 1778 91 .byte 0x91
+ 12356 1779 D06B .sleb128 -2608
+ 12357 177b 00 .byte 0x0
+ 12358 177c 00 .byte 0x0
+ 12359 177d 00 .byte 0x0
+ 12360 177e 00 .byte 0x0
+ 12361 177f 00 .byte 0x0
+ 12362 1780 00 .byte 0x0
+ 12363 1781 30 .uleb128 0x30
+ 12364 1782 E30C0000 .long 0xce3
+ 12365 1786 00000000 .quad .LBB370
+ 12365 00000000
+ 12366 178e 00000000 .quad .LBE370
+ 12366 00000000
+ 12367 1796 03 .byte 0x3
+ 12368 1797 D306 .value 0x6d3
+ 12369 1799 47180000 .long 0x1847
+ 12370 179d 31 .uleb128 0x31
+ 12371 179e 010D0000 .long 0xd01
+ 12372 17a2 03 .byte 0x3
+ 12373 17a3 91 .byte 0x91
+ 12374 17a4 EC6B .sleb128 -2580
+ 12375 17a6 31 .uleb128 0x31
+ 12376 17a7 F50C0000 .long 0xcf5
+ 12377 17ab 03 .byte 0x3
+ 12378 17ac 91 .byte 0x91
+ 12379 17ad F06B .sleb128 -2576
+ 12380 17af 32 .uleb128 0x32
+ 12381 17b0 00000000 .quad .LBB371
+ 12381 00000000
+ 12382 17b8 00000000 .quad .LBE371
+ 12382 00000000
+ 12383 17c0 33 .uleb128 0x33
+ 12384 17c1 0D0D0000 .long 0xd0d
+ 12385 17c5 03 .byte 0x3
+ 12386 17c6 76 .byte 0x76
+ 12387 17c7 9061 .sleb128 -3952
+ 12388 17c9 30 .uleb128 0x30
+ 12389 17ca 1A0D0000 .long 0xd1a
+ 12390 17ce 00000000 .quad .LBB372
+ 12390 00000000
+ 12391 17d6 00000000 .quad .LBE372
+ 12391 00000000
+ 12392 17de 03 .byte 0x3
+ 12393 17df 8A06 .value 0x68a
+ 12394 17e1 F8170000 .long 0x17f8
+ 12395 17e5 31 .uleb128 0x31
+ 12396 17e6 380D0000 .long 0xd38
+
GAS LISTING /tmp/ccPaCTqg.s page 367
+
+
+ 12397 17ea 03 .byte 0x3
+ 12398 17eb 91 .byte 0x91
+ 12399 17ec 8C6C .sleb128 -2548
+ 12400 17ee 31 .uleb128 0x31
+ 12401 17ef 2C0D0000 .long 0xd2c
+ 12402 17f3 03 .byte 0x3
+ 12403 17f4 91 .byte 0x91
+ 12404 17f5 906C .sleb128 -2544
+ 12405 17f7 00 .byte 0x0
+ 12406 17f8 34 .uleb128 0x34
+ 12407 17f9 450D0000 .long 0xd45
+ 12408 17fd 00000000 .quad .LBB374
+ 12408 00000000
+ 12409 1805 00000000 .quad .LBE374
+ 12409 00000000
+ 12410 180d 03 .byte 0x3
+ 12411 180e 8B06 .value 0x68b
+ 12412 1810 31 .uleb128 0x31
+ 12413 1811 570D0000 .long 0xd57
+ 12414 1815 03 .byte 0x3
+ 12415 1816 91 .byte 0x91
+ 12416 1817 A06C .sleb128 -2528
+ 12417 1819 34 .uleb128 0x34
+ 12418 181a 640D0000 .long 0xd64
+ 12419 181e 00000000 .quad .LBB376
+ 12419 00000000
+ 12420 1826 00000000 .quad .LBE376
+ 12420 00000000
+ 12421 182e 03 .byte 0x3
+ 12422 182f 4905 .value 0x549
+ 12423 1831 31 .uleb128 0x31
+ 12424 1832 820D0000 .long 0xd82
+ 12425 1836 03 .byte 0x3
+ 12426 1837 91 .byte 0x91
+ 12427 1838 BC6C .sleb128 -2500
+ 12428 183a 31 .uleb128 0x31
+ 12429 183b 760D0000 .long 0xd76
+ 12430 183f 03 .byte 0x3
+ 12431 1840 91 .byte 0x91
+ 12432 1841 C06C .sleb128 -2496
+ 12433 1843 00 .byte 0x0
+ 12434 1844 00 .byte 0x0
+ 12435 1845 00 .byte 0x0
+ 12436 1846 00 .byte 0x0
+ 12437 1847 30 .uleb128 0x30
+ 12438 1848 8F0D0000 .long 0xd8f
+ 12439 184c 00000000 .quad .LBB378
+ 12439 00000000
+ 12440 1854 00000000 .quad .LBE378
+ 12440 00000000
+ 12441 185c 03 .byte 0x3
+ 12442 185d D306 .value 0x6d3
+ 12443 185f 5B1A0000 .long 0x1a5b
+ 12444 1863 31 .uleb128 0x31
+ 12445 1864 A10D0000 .long 0xda1
+ 12446 1868 03 .byte 0x3
+ 12447 1869 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 368
+
+
+ 12448 186a D06C .sleb128 -2480
+ 12449 186c 32 .uleb128 0x32
+ 12450 186d 00000000 .quad .LBB379
+ 12450 00000000
+ 12451 1875 00000000 .quad .LBE379
+ 12451 00000000
+ 12452 187d 33 .uleb128 0x33
+ 12453 187e AD0D0000 .long 0xdad
+ 12454 1882 03 .byte 0x3
+ 12455 1883 76 .byte 0x76
+ 12456 1884 A061 .sleb128 -3936
+ 12457 1886 30 .uleb128 0x30
+ 12458 1887 BA0D0000 .long 0xdba
+ 12459 188b 00000000 .quad .LBB380
+ 12459 00000000
+ 12460 1893 00000000 .quad .LBE380
+ 12460 00000000
+ 12461 189b 03 .byte 0x3
+ 12462 189c 1F06 .value 0x61f
+ 12463 189e 23190000 .long 0x1923
+ 12464 18a2 31 .uleb128 0x31
+ 12465 18a3 CC0D0000 .long 0xdcc
+ 12466 18a7 03 .byte 0x3
+ 12467 18a8 91 .byte 0x91
+ 12468 18a9 E06C .sleb128 -2464
+ 12469 18ab 32 .uleb128 0x32
+ 12470 18ac 00000000 .quad .LBB381
+ 12470 00000000
+ 12471 18b4 00000000 .quad .LBE381
+ 12471 00000000
+ 12472 18bc 33 .uleb128 0x33
+ 12473 18bd D80D0000 .long 0xdd8
+ 12474 18c1 09 .byte 0x9
+ 12475 18c2 03 .byte 0x3
+ 12476 18c3 00000000 .quad mask.8002
+ 12476 00000000
+ 12477 18cb 34 .uleb128 0x34
+ 12478 18cc FB0D0000 .long 0xdfb
+ 12479 18d0 00000000 .quad .LBB382
+ 12479 00000000
+ 12480 18d8 00000000 .quad .LBE382
+ 12480 00000000
+ 12481 18e0 03 .byte 0x3
+ 12482 18e1 FE04 .value 0x4fe
+ 12483 18e3 31 .uleb128 0x31
+ 12484 18e4 190E0000 .long 0xe19
+ 12485 18e8 03 .byte 0x3
+ 12486 18e9 91 .byte 0x91
+ 12487 18ea F06C .sleb128 -2448
+ 12488 18ec 31 .uleb128 0x31
+ 12489 18ed 0D0E0000 .long 0xe0d
+ 12490 18f1 03 .byte 0x3
+ 12491 18f2 91 .byte 0x91
+ 12492 18f3 806D .sleb128 -2432
+ 12493 18f5 34 .uleb128 0x34
+ 12494 18f6 260E0000 .long 0xe26
+ 12495 18fa 00000000 .quad .LBB384
+
GAS LISTING /tmp/ccPaCTqg.s page 369
+
+
+ 12495 00000000
+ 12496 1902 00000000 .quad .LBE384
+ 12496 00000000
+ 12497 190a 03 .byte 0x3
+ 12498 190b 7501 .value 0x175
+ 12499 190d 31 .uleb128 0x31
+ 12500 190e 440E0000 .long 0xe44
+ 12501 1912 03 .byte 0x3
+ 12502 1913 91 .byte 0x91
+ 12503 1914 906D .sleb128 -2416
+ 12504 1916 31 .uleb128 0x31
+ 12505 1917 380E0000 .long 0xe38
+ 12506 191b 03 .byte 0x3
+ 12507 191c 91 .byte 0x91
+ 12508 191d A06D .sleb128 -2400
+ 12509 191f 00 .byte 0x0
+ 12510 1920 00 .byte 0x0
+ 12511 1921 00 .byte 0x0
+ 12512 1922 00 .byte 0x0
+ 12513 1923 30 .uleb128 0x30
+ 12514 1924 BA0D0000 .long 0xdba
+ 12515 1928 00000000 .quad .LBB386
+ 12515 00000000
+ 12516 1930 00000000 .quad .LBE386
+ 12516 00000000
+ 12517 1938 03 .byte 0x3
+ 12518 1939 2006 .value 0x620
+ 12519 193b C0190000 .long 0x19c0
+ 12520 193f 31 .uleb128 0x31
+ 12521 1940 CC0D0000 .long 0xdcc
+ 12522 1944 03 .byte 0x3
+ 12523 1945 91 .byte 0x91
+ 12524 1946 B06D .sleb128 -2384
+ 12525 1948 32 .uleb128 0x32
+ 12526 1949 00000000 .quad .LBB387
+ 12526 00000000
+ 12527 1951 00000000 .quad .LBE387
+ 12527 00000000
+ 12528 1959 33 .uleb128 0x33
+ 12529 195a D80D0000 .long 0xdd8
+ 12530 195e 09 .byte 0x9
+ 12531 195f 03 .byte 0x3
+ 12532 1960 00000000 .quad mask.8002
+ 12532 00000000
+ 12533 1968 34 .uleb128 0x34
+ 12534 1969 FB0D0000 .long 0xdfb
+ 12535 196d 00000000 .quad .LBB388
+ 12535 00000000
+ 12536 1975 00000000 .quad .LBE388
+ 12536 00000000
+ 12537 197d 03 .byte 0x3
+ 12538 197e FE04 .value 0x4fe
+ 12539 1980 31 .uleb128 0x31
+ 12540 1981 190E0000 .long 0xe19
+ 12541 1985 03 .byte 0x3
+ 12542 1986 91 .byte 0x91
+ 12543 1987 C06D .sleb128 -2368
+
GAS LISTING /tmp/ccPaCTqg.s page 370
+
+
+ 12544 1989 31 .uleb128 0x31
+ 12545 198a 0D0E0000 .long 0xe0d
+ 12546 198e 03 .byte 0x3
+ 12547 198f 91 .byte 0x91
+ 12548 1990 D06D .sleb128 -2352
+ 12549 1992 34 .uleb128 0x34
+ 12550 1993 260E0000 .long 0xe26
+ 12551 1997 00000000 .quad .LBB390
+ 12551 00000000
+ 12552 199f 00000000 .quad .LBE390
+ 12552 00000000
+ 12553 19a7 03 .byte 0x3
+ 12554 19a8 7501 .value 0x175
+ 12555 19aa 31 .uleb128 0x31
+ 12556 19ab 440E0000 .long 0xe44
+ 12557 19af 03 .byte 0x3
+ 12558 19b0 91 .byte 0x91
+ 12559 19b1 E06D .sleb128 -2336
+ 12560 19b3 31 .uleb128 0x31
+ 12561 19b4 380E0000 .long 0xe38
+ 12562 19b8 03 .byte 0x3
+ 12563 19b9 91 .byte 0x91
+ 12564 19ba F06D .sleb128 -2320
+ 12565 19bc 00 .byte 0x0
+ 12566 19bd 00 .byte 0x0
+ 12567 19be 00 .byte 0x0
+ 12568 19bf 00 .byte 0x0
+ 12569 19c0 34 .uleb128 0x34
+ 12570 19c1 BA0D0000 .long 0xdba
+ 12571 19c5 00000000 .quad .LBB392
+ 12571 00000000
+ 12572 19cd 00000000 .quad .LBE392
+ 12572 00000000
+ 12573 19d5 03 .byte 0x3
+ 12574 19d6 2106 .value 0x621
+ 12575 19d8 31 .uleb128 0x31
+ 12576 19d9 CC0D0000 .long 0xdcc
+ 12577 19dd 03 .byte 0x3
+ 12578 19de 91 .byte 0x91
+ 12579 19df 806E .sleb128 -2304
+ 12580 19e1 32 .uleb128 0x32
+ 12581 19e2 00000000 .quad .LBB393
+ 12581 00000000
+ 12582 19ea 00000000 .quad .LBE393
+ 12582 00000000
+ 12583 19f2 33 .uleb128 0x33
+ 12584 19f3 D80D0000 .long 0xdd8
+ 12585 19f7 09 .byte 0x9
+ 12586 19f8 03 .byte 0x3
+ 12587 19f9 00000000 .quad mask.8002
+ 12587 00000000
+ 12588 1a01 34 .uleb128 0x34
+ 12589 1a02 FB0D0000 .long 0xdfb
+ 12590 1a06 00000000 .quad .LBB394
+ 12590 00000000
+ 12591 1a0e 00000000 .quad .LBE394
+ 12591 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 371
+
+
+ 12592 1a16 03 .byte 0x3
+ 12593 1a17 FE04 .value 0x4fe
+ 12594 1a19 31 .uleb128 0x31
+ 12595 1a1a 190E0000 .long 0xe19
+ 12596 1a1e 03 .byte 0x3
+ 12597 1a1f 91 .byte 0x91
+ 12598 1a20 906E .sleb128 -2288
+ 12599 1a22 31 .uleb128 0x31
+ 12600 1a23 0D0E0000 .long 0xe0d
+ 12601 1a27 03 .byte 0x3
+ 12602 1a28 91 .byte 0x91
+ 12603 1a29 A06E .sleb128 -2272
+ 12604 1a2b 34 .uleb128 0x34
+ 12605 1a2c 260E0000 .long 0xe26
+ 12606 1a30 00000000 .quad .LBB396
+ 12606 00000000
+ 12607 1a38 00000000 .quad .LBE396
+ 12607 00000000
+ 12608 1a40 03 .byte 0x3
+ 12609 1a41 7501 .value 0x175
+ 12610 1a43 31 .uleb128 0x31
+ 12611 1a44 440E0000 .long 0xe44
+ 12612 1a48 03 .byte 0x3
+ 12613 1a49 91 .byte 0x91
+ 12614 1a4a B06E .sleb128 -2256
+ 12615 1a4c 31 .uleb128 0x31
+ 12616 1a4d 380E0000 .long 0xe38
+ 12617 1a51 03 .byte 0x3
+ 12618 1a52 91 .byte 0x91
+ 12619 1a53 C06E .sleb128 -2240
+ 12620 1a55 00 .byte 0x0
+ 12621 1a56 00 .byte 0x0
+ 12622 1a57 00 .byte 0x0
+ 12623 1a58 00 .byte 0x0
+ 12624 1a59 00 .byte 0x0
+ 12625 1a5a 00 .byte 0x0
+ 12626 1a5b 30 .uleb128 0x30
+ 12627 1a5c E30C0000 .long 0xce3
+ 12628 1a60 00000000 .quad .LBB398
+ 12628 00000000
+ 12629 1a68 00000000 .quad .LBE398
+ 12629 00000000
+ 12630 1a70 03 .byte 0x3
+ 12631 1a71 D406 .value 0x6d4
+ 12632 1a73 211B0000 .long 0x1b21
+ 12633 1a77 31 .uleb128 0x31
+ 12634 1a78 010D0000 .long 0xd01
+ 12635 1a7c 03 .byte 0x3
+ 12636 1a7d 91 .byte 0x91
+ 12637 1a7e DC6E .sleb128 -2212
+ 12638 1a80 31 .uleb128 0x31
+ 12639 1a81 F50C0000 .long 0xcf5
+ 12640 1a85 03 .byte 0x3
+ 12641 1a86 91 .byte 0x91
+ 12642 1a87 E06E .sleb128 -2208
+ 12643 1a89 32 .uleb128 0x32
+ 12644 1a8a 00000000 .quad .LBB399
+
GAS LISTING /tmp/ccPaCTqg.s page 372
+
+
+ 12644 00000000
+ 12645 1a92 00000000 .quad .LBE399
+ 12645 00000000
+ 12646 1a9a 33 .uleb128 0x33
+ 12647 1a9b 0D0D0000 .long 0xd0d
+ 12648 1a9f 03 .byte 0x3
+ 12649 1aa0 76 .byte 0x76
+ 12650 1aa1 B061 .sleb128 -3920
+ 12651 1aa3 30 .uleb128 0x30
+ 12652 1aa4 1A0D0000 .long 0xd1a
+ 12653 1aa8 00000000 .quad .LBB400
+ 12653 00000000
+ 12654 1ab0 00000000 .quad .LBE400
+ 12654 00000000
+ 12655 1ab8 03 .byte 0x3
+ 12656 1ab9 8A06 .value 0x68a
+ 12657 1abb D21A0000 .long 0x1ad2
+ 12658 1abf 31 .uleb128 0x31
+ 12659 1ac0 380D0000 .long 0xd38
+ 12660 1ac4 03 .byte 0x3
+ 12661 1ac5 91 .byte 0x91
+ 12662 1ac6 FC6E .sleb128 -2180
+ 12663 1ac8 31 .uleb128 0x31
+ 12664 1ac9 2C0D0000 .long 0xd2c
+ 12665 1acd 03 .byte 0x3
+ 12666 1ace 91 .byte 0x91
+ 12667 1acf 806F .sleb128 -2176
+ 12668 1ad1 00 .byte 0x0
+ 12669 1ad2 34 .uleb128 0x34
+ 12670 1ad3 450D0000 .long 0xd45
+ 12671 1ad7 00000000 .quad .LBB402
+ 12671 00000000
+ 12672 1adf 00000000 .quad .LBE402
+ 12672 00000000
+ 12673 1ae7 03 .byte 0x3
+ 12674 1ae8 8B06 .value 0x68b
+ 12675 1aea 31 .uleb128 0x31
+ 12676 1aeb 570D0000 .long 0xd57
+ 12677 1aef 03 .byte 0x3
+ 12678 1af0 91 .byte 0x91
+ 12679 1af1 906F .sleb128 -2160
+ 12680 1af3 34 .uleb128 0x34
+ 12681 1af4 640D0000 .long 0xd64
+ 12682 1af8 00000000 .quad .LBB404
+ 12682 00000000
+ 12683 1b00 00000000 .quad .LBE404
+ 12683 00000000
+ 12684 1b08 03 .byte 0x3
+ 12685 1b09 4905 .value 0x549
+ 12686 1b0b 31 .uleb128 0x31
+ 12687 1b0c 820D0000 .long 0xd82
+ 12688 1b10 03 .byte 0x3
+ 12689 1b11 91 .byte 0x91
+ 12690 1b12 AC6F .sleb128 -2132
+ 12691 1b14 31 .uleb128 0x31
+ 12692 1b15 760D0000 .long 0xd76
+ 12693 1b19 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 373
+
+
+ 12694 1b1a 91 .byte 0x91
+ 12695 1b1b B06F .sleb128 -2128
+ 12696 1b1d 00 .byte 0x0
+ 12697 1b1e 00 .byte 0x0
+ 12698 1b1f 00 .byte 0x0
+ 12699 1b20 00 .byte 0x0
+ 12700 1b21 30 .uleb128 0x30
+ 12701 1b22 8F0D0000 .long 0xd8f
+ 12702 1b26 00000000 .quad .LBB406
+ 12702 00000000
+ 12703 1b2e 00000000 .quad .LBE406
+ 12703 00000000
+ 12704 1b36 03 .byte 0x3
+ 12705 1b37 D406 .value 0x6d4
+ 12706 1b39 351D0000 .long 0x1d35
+ 12707 1b3d 31 .uleb128 0x31
+ 12708 1b3e A10D0000 .long 0xda1
+ 12709 1b42 03 .byte 0x3
+ 12710 1b43 91 .byte 0x91
+ 12711 1b44 C06F .sleb128 -2112
+ 12712 1b46 32 .uleb128 0x32
+ 12713 1b47 00000000 .quad .LBB407
+ 12713 00000000
+ 12714 1b4f 00000000 .quad .LBE407
+ 12714 00000000
+ 12715 1b57 33 .uleb128 0x33
+ 12716 1b58 AD0D0000 .long 0xdad
+ 12717 1b5c 03 .byte 0x3
+ 12718 1b5d 76 .byte 0x76
+ 12719 1b5e C061 .sleb128 -3904
+ 12720 1b60 30 .uleb128 0x30
+ 12721 1b61 BA0D0000 .long 0xdba
+ 12722 1b65 00000000 .quad .LBB408
+ 12722 00000000
+ 12723 1b6d 00000000 .quad .LBE408
+ 12723 00000000
+ 12724 1b75 03 .byte 0x3
+ 12725 1b76 1F06 .value 0x61f
+ 12726 1b78 FD1B0000 .long 0x1bfd
+ 12727 1b7c 31 .uleb128 0x31
+ 12728 1b7d CC0D0000 .long 0xdcc
+ 12729 1b81 03 .byte 0x3
+ 12730 1b82 91 .byte 0x91
+ 12731 1b83 D06F .sleb128 -2096
+ 12732 1b85 32 .uleb128 0x32
+ 12733 1b86 00000000 .quad .LBB409
+ 12733 00000000
+ 12734 1b8e 00000000 .quad .LBE409
+ 12734 00000000
+ 12735 1b96 33 .uleb128 0x33
+ 12736 1b97 D80D0000 .long 0xdd8
+ 12737 1b9b 09 .byte 0x9
+ 12738 1b9c 03 .byte 0x3
+ 12739 1b9d 00000000 .quad mask.8002
+ 12739 00000000
+ 12740 1ba5 34 .uleb128 0x34
+ 12741 1ba6 FB0D0000 .long 0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s page 374
+
+
+ 12742 1baa 00000000 .quad .LBB410
+ 12742 00000000
+ 12743 1bb2 00000000 .quad .LBE410
+ 12743 00000000
+ 12744 1bba 03 .byte 0x3
+ 12745 1bbb FE04 .value 0x4fe
+ 12746 1bbd 31 .uleb128 0x31
+ 12747 1bbe 190E0000 .long 0xe19
+ 12748 1bc2 03 .byte 0x3
+ 12749 1bc3 91 .byte 0x91
+ 12750 1bc4 E06F .sleb128 -2080
+ 12751 1bc6 31 .uleb128 0x31
+ 12752 1bc7 0D0E0000 .long 0xe0d
+ 12753 1bcb 03 .byte 0x3
+ 12754 1bcc 91 .byte 0x91
+ 12755 1bcd F06F .sleb128 -2064
+ 12756 1bcf 34 .uleb128 0x34
+ 12757 1bd0 260E0000 .long 0xe26
+ 12758 1bd4 00000000 .quad .LBB412
+ 12758 00000000
+ 12759 1bdc 00000000 .quad .LBE412
+ 12759 00000000
+ 12760 1be4 03 .byte 0x3
+ 12761 1be5 7501 .value 0x175
+ 12762 1be7 31 .uleb128 0x31
+ 12763 1be8 440E0000 .long 0xe44
+ 12764 1bec 03 .byte 0x3
+ 12765 1bed 91 .byte 0x91
+ 12766 1bee 8070 .sleb128 -2048
+ 12767 1bf0 31 .uleb128 0x31
+ 12768 1bf1 380E0000 .long 0xe38
+ 12769 1bf5 03 .byte 0x3
+ 12770 1bf6 91 .byte 0x91
+ 12771 1bf7 9070 .sleb128 -2032
+ 12772 1bf9 00 .byte 0x0
+ 12773 1bfa 00 .byte 0x0
+ 12774 1bfb 00 .byte 0x0
+ 12775 1bfc 00 .byte 0x0
+ 12776 1bfd 30 .uleb128 0x30
+ 12777 1bfe BA0D0000 .long 0xdba
+ 12778 1c02 00000000 .quad .LBB414
+ 12778 00000000
+ 12779 1c0a 00000000 .quad .LBE414
+ 12779 00000000
+ 12780 1c12 03 .byte 0x3
+ 12781 1c13 2006 .value 0x620
+ 12782 1c15 9A1C0000 .long 0x1c9a
+ 12783 1c19 31 .uleb128 0x31
+ 12784 1c1a CC0D0000 .long 0xdcc
+ 12785 1c1e 03 .byte 0x3
+ 12786 1c1f 91 .byte 0x91
+ 12787 1c20 A070 .sleb128 -2016
+ 12788 1c22 32 .uleb128 0x32
+ 12789 1c23 00000000 .quad .LBB415
+ 12789 00000000
+ 12790 1c2b 00000000 .quad .LBE415
+ 12790 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 375
+
+
+ 12791 1c33 33 .uleb128 0x33
+ 12792 1c34 D80D0000 .long 0xdd8
+ 12793 1c38 09 .byte 0x9
+ 12794 1c39 03 .byte 0x3
+ 12795 1c3a 00000000 .quad mask.8002
+ 12795 00000000
+ 12796 1c42 34 .uleb128 0x34
+ 12797 1c43 FB0D0000 .long 0xdfb
+ 12798 1c47 00000000 .quad .LBB416
+ 12798 00000000
+ 12799 1c4f 00000000 .quad .LBE416
+ 12799 00000000
+ 12800 1c57 03 .byte 0x3
+ 12801 1c58 FE04 .value 0x4fe
+ 12802 1c5a 31 .uleb128 0x31
+ 12803 1c5b 190E0000 .long 0xe19
+ 12804 1c5f 03 .byte 0x3
+ 12805 1c60 91 .byte 0x91
+ 12806 1c61 B070 .sleb128 -2000
+ 12807 1c63 31 .uleb128 0x31
+ 12808 1c64 0D0E0000 .long 0xe0d
+ 12809 1c68 03 .byte 0x3
+ 12810 1c69 91 .byte 0x91
+ 12811 1c6a C070 .sleb128 -1984
+ 12812 1c6c 34 .uleb128 0x34
+ 12813 1c6d 260E0000 .long 0xe26
+ 12814 1c71 00000000 .quad .LBB418
+ 12814 00000000
+ 12815 1c79 00000000 .quad .LBE418
+ 12815 00000000
+ 12816 1c81 03 .byte 0x3
+ 12817 1c82 7501 .value 0x175
+ 12818 1c84 31 .uleb128 0x31
+ 12819 1c85 440E0000 .long 0xe44
+ 12820 1c89 03 .byte 0x3
+ 12821 1c8a 91 .byte 0x91
+ 12822 1c8b D070 .sleb128 -1968
+ 12823 1c8d 31 .uleb128 0x31
+ 12824 1c8e 380E0000 .long 0xe38
+ 12825 1c92 03 .byte 0x3
+ 12826 1c93 91 .byte 0x91
+ 12827 1c94 E070 .sleb128 -1952
+ 12828 1c96 00 .byte 0x0
+ 12829 1c97 00 .byte 0x0
+ 12830 1c98 00 .byte 0x0
+ 12831 1c99 00 .byte 0x0
+ 12832 1c9a 34 .uleb128 0x34
+ 12833 1c9b BA0D0000 .long 0xdba
+ 12834 1c9f 00000000 .quad .LBB420
+ 12834 00000000
+ 12835 1ca7 00000000 .quad .LBE420
+ 12835 00000000
+ 12836 1caf 03 .byte 0x3
+ 12837 1cb0 2106 .value 0x621
+ 12838 1cb2 31 .uleb128 0x31
+ 12839 1cb3 CC0D0000 .long 0xdcc
+ 12840 1cb7 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 376
+
+
+ 12841 1cb8 91 .byte 0x91
+ 12842 1cb9 F070 .sleb128 -1936
+ 12843 1cbb 32 .uleb128 0x32
+ 12844 1cbc 00000000 .quad .LBB421
+ 12844 00000000
+ 12845 1cc4 00000000 .quad .LBE421
+ 12845 00000000
+ 12846 1ccc 33 .uleb128 0x33
+ 12847 1ccd D80D0000 .long 0xdd8
+ 12848 1cd1 09 .byte 0x9
+ 12849 1cd2 03 .byte 0x3
+ 12850 1cd3 00000000 .quad mask.8002
+ 12850 00000000
+ 12851 1cdb 34 .uleb128 0x34
+ 12852 1cdc FB0D0000 .long 0xdfb
+ 12853 1ce0 00000000 .quad .LBB422
+ 12853 00000000
+ 12854 1ce8 00000000 .quad .LBE422
+ 12854 00000000
+ 12855 1cf0 03 .byte 0x3
+ 12856 1cf1 FE04 .value 0x4fe
+ 12857 1cf3 31 .uleb128 0x31
+ 12858 1cf4 190E0000 .long 0xe19
+ 12859 1cf8 03 .byte 0x3
+ 12860 1cf9 91 .byte 0x91
+ 12861 1cfa 8071 .sleb128 -1920
+ 12862 1cfc 31 .uleb128 0x31
+ 12863 1cfd 0D0E0000 .long 0xe0d
+ 12864 1d01 03 .byte 0x3
+ 12865 1d02 91 .byte 0x91
+ 12866 1d03 9071 .sleb128 -1904
+ 12867 1d05 34 .uleb128 0x34
+ 12868 1d06 260E0000 .long 0xe26
+ 12869 1d0a 00000000 .quad .LBB424
+ 12869 00000000
+ 12870 1d12 00000000 .quad .LBE424
+ 12870 00000000
+ 12871 1d1a 03 .byte 0x3
+ 12872 1d1b 7501 .value 0x175
+ 12873 1d1d 31 .uleb128 0x31
+ 12874 1d1e 440E0000 .long 0xe44
+ 12875 1d22 03 .byte 0x3
+ 12876 1d23 91 .byte 0x91
+ 12877 1d24 A071 .sleb128 -1888
+ 12878 1d26 31 .uleb128 0x31
+ 12879 1d27 380E0000 .long 0xe38
+ 12880 1d2b 03 .byte 0x3
+ 12881 1d2c 91 .byte 0x91
+ 12882 1d2d B071 .sleb128 -1872
+ 12883 1d2f 00 .byte 0x0
+ 12884 1d30 00 .byte 0x0
+ 12885 1d31 00 .byte 0x0
+ 12886 1d32 00 .byte 0x0
+ 12887 1d33 00 .byte 0x0
+ 12888 1d34 00 .byte 0x0
+ 12889 1d35 30 .uleb128 0x30
+ 12890 1d36 E30C0000 .long 0xce3
+
GAS LISTING /tmp/ccPaCTqg.s page 377
+
+
+ 12891 1d3a 00000000 .quad .LBB426
+ 12891 00000000
+ 12892 1d42 00000000 .quad .LBE426
+ 12892 00000000
+ 12893 1d4a 03 .byte 0x3
+ 12894 1d4b D506 .value 0x6d5
+ 12895 1d4d FB1D0000 .long 0x1dfb
+ 12896 1d51 31 .uleb128 0x31
+ 12897 1d52 010D0000 .long 0xd01
+ 12898 1d56 03 .byte 0x3
+ 12899 1d57 91 .byte 0x91
+ 12900 1d58 CC71 .sleb128 -1844
+ 12901 1d5a 31 .uleb128 0x31
+ 12902 1d5b F50C0000 .long 0xcf5
+ 12903 1d5f 03 .byte 0x3
+ 12904 1d60 91 .byte 0x91
+ 12905 1d61 D071 .sleb128 -1840
+ 12906 1d63 32 .uleb128 0x32
+ 12907 1d64 00000000 .quad .LBB427
+ 12907 00000000
+ 12908 1d6c 00000000 .quad .LBE427
+ 12908 00000000
+ 12909 1d74 33 .uleb128 0x33
+ 12910 1d75 0D0D0000 .long 0xd0d
+ 12911 1d79 03 .byte 0x3
+ 12912 1d7a 76 .byte 0x76
+ 12913 1d7b D061 .sleb128 -3888
+ 12914 1d7d 30 .uleb128 0x30
+ 12915 1d7e 1A0D0000 .long 0xd1a
+ 12916 1d82 00000000 .quad .LBB428
+ 12916 00000000
+ 12917 1d8a 00000000 .quad .LBE428
+ 12917 00000000
+ 12918 1d92 03 .byte 0x3
+ 12919 1d93 8A06 .value 0x68a
+ 12920 1d95 AC1D0000 .long 0x1dac
+ 12921 1d99 31 .uleb128 0x31
+ 12922 1d9a 380D0000 .long 0xd38
+ 12923 1d9e 03 .byte 0x3
+ 12924 1d9f 91 .byte 0x91
+ 12925 1da0 EC71 .sleb128 -1812
+ 12926 1da2 31 .uleb128 0x31
+ 12927 1da3 2C0D0000 .long 0xd2c
+ 12928 1da7 03 .byte 0x3
+ 12929 1da8 91 .byte 0x91
+ 12930 1da9 F071 .sleb128 -1808
+ 12931 1dab 00 .byte 0x0
+ 12932 1dac 34 .uleb128 0x34
+ 12933 1dad 450D0000 .long 0xd45
+ 12934 1db1 00000000 .quad .LBB430
+ 12934 00000000
+ 12935 1db9 00000000 .quad .LBE430
+ 12935 00000000
+ 12936 1dc1 03 .byte 0x3
+ 12937 1dc2 8B06 .value 0x68b
+ 12938 1dc4 31 .uleb128 0x31
+ 12939 1dc5 570D0000 .long 0xd57
+
GAS LISTING /tmp/ccPaCTqg.s page 378
+
+
+ 12940 1dc9 03 .byte 0x3
+ 12941 1dca 91 .byte 0x91
+ 12942 1dcb 8072 .sleb128 -1792
+ 12943 1dcd 34 .uleb128 0x34
+ 12944 1dce 640D0000 .long 0xd64
+ 12945 1dd2 00000000 .quad .LBB432
+ 12945 00000000
+ 12946 1dda 00000000 .quad .LBE432
+ 12946 00000000
+ 12947 1de2 03 .byte 0x3
+ 12948 1de3 4905 .value 0x549
+ 12949 1de5 31 .uleb128 0x31
+ 12950 1de6 820D0000 .long 0xd82
+ 12951 1dea 03 .byte 0x3
+ 12952 1deb 91 .byte 0x91
+ 12953 1dec 9C72 .sleb128 -1764
+ 12954 1dee 31 .uleb128 0x31
+ 12955 1def 760D0000 .long 0xd76
+ 12956 1df3 03 .byte 0x3
+ 12957 1df4 91 .byte 0x91
+ 12958 1df5 A072 .sleb128 -1760
+ 12959 1df7 00 .byte 0x0
+ 12960 1df8 00 .byte 0x0
+ 12961 1df9 00 .byte 0x0
+ 12962 1dfa 00 .byte 0x0
+ 12963 1dfb 30 .uleb128 0x30
+ 12964 1dfc 8F0D0000 .long 0xd8f
+ 12965 1e00 00000000 .quad .LBB434
+ 12965 00000000
+ 12966 1e08 00000000 .quad .LBE434
+ 12966 00000000
+ 12967 1e10 03 .byte 0x3
+ 12968 1e11 D506 .value 0x6d5
+ 12969 1e13 0F200000 .long 0x200f
+ 12970 1e17 31 .uleb128 0x31
+ 12971 1e18 A10D0000 .long 0xda1
+ 12972 1e1c 03 .byte 0x3
+ 12973 1e1d 91 .byte 0x91
+ 12974 1e1e B072 .sleb128 -1744
+ 12975 1e20 32 .uleb128 0x32
+ 12976 1e21 00000000 .quad .LBB435
+ 12976 00000000
+ 12977 1e29 00000000 .quad .LBE435
+ 12977 00000000
+ 12978 1e31 33 .uleb128 0x33
+ 12979 1e32 AD0D0000 .long 0xdad
+ 12980 1e36 03 .byte 0x3
+ 12981 1e37 76 .byte 0x76
+ 12982 1e38 E061 .sleb128 -3872
+ 12983 1e3a 30 .uleb128 0x30
+ 12984 1e3b BA0D0000 .long 0xdba
+ 12985 1e3f 00000000 .quad .LBB436
+ 12985 00000000
+ 12986 1e47 00000000 .quad .LBE436
+ 12986 00000000
+ 12987 1e4f 03 .byte 0x3
+ 12988 1e50 1F06 .value 0x61f
+
GAS LISTING /tmp/ccPaCTqg.s page 379
+
+
+ 12989 1e52 D71E0000 .long 0x1ed7
+ 12990 1e56 31 .uleb128 0x31
+ 12991 1e57 CC0D0000 .long 0xdcc
+ 12992 1e5b 03 .byte 0x3
+ 12993 1e5c 91 .byte 0x91
+ 12994 1e5d C072 .sleb128 -1728
+ 12995 1e5f 32 .uleb128 0x32
+ 12996 1e60 00000000 .quad .LBB437
+ 12996 00000000
+ 12997 1e68 00000000 .quad .LBE437
+ 12997 00000000
+ 12998 1e70 33 .uleb128 0x33
+ 12999 1e71 D80D0000 .long 0xdd8
+ 13000 1e75 09 .byte 0x9
+ 13001 1e76 03 .byte 0x3
+ 13002 1e77 00000000 .quad mask.8002
+ 13002 00000000
+ 13003 1e7f 34 .uleb128 0x34
+ 13004 1e80 FB0D0000 .long 0xdfb
+ 13005 1e84 00000000 .quad .LBB438
+ 13005 00000000
+ 13006 1e8c 00000000 .quad .LBE438
+ 13006 00000000
+ 13007 1e94 03 .byte 0x3
+ 13008 1e95 FE04 .value 0x4fe
+ 13009 1e97 31 .uleb128 0x31
+ 13010 1e98 190E0000 .long 0xe19
+ 13011 1e9c 03 .byte 0x3
+ 13012 1e9d 91 .byte 0x91
+ 13013 1e9e D072 .sleb128 -1712
+ 13014 1ea0 31 .uleb128 0x31
+ 13015 1ea1 0D0E0000 .long 0xe0d
+ 13016 1ea5 03 .byte 0x3
+ 13017 1ea6 91 .byte 0x91
+ 13018 1ea7 E072 .sleb128 -1696
+ 13019 1ea9 34 .uleb128 0x34
+ 13020 1eaa 260E0000 .long 0xe26
+ 13021 1eae 00000000 .quad .LBB440
+ 13021 00000000
+ 13022 1eb6 00000000 .quad .LBE440
+ 13022 00000000
+ 13023 1ebe 03 .byte 0x3
+ 13024 1ebf 7501 .value 0x175
+ 13025 1ec1 31 .uleb128 0x31
+ 13026 1ec2 440E0000 .long 0xe44
+ 13027 1ec6 03 .byte 0x3
+ 13028 1ec7 91 .byte 0x91
+ 13029 1ec8 F072 .sleb128 -1680
+ 13030 1eca 31 .uleb128 0x31
+ 13031 1ecb 380E0000 .long 0xe38
+ 13032 1ecf 03 .byte 0x3
+ 13033 1ed0 91 .byte 0x91
+ 13034 1ed1 8073 .sleb128 -1664
+ 13035 1ed3 00 .byte 0x0
+ 13036 1ed4 00 .byte 0x0
+ 13037 1ed5 00 .byte 0x0
+ 13038 1ed6 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 380
+
+
+ 13039 1ed7 30 .uleb128 0x30
+ 13040 1ed8 BA0D0000 .long 0xdba
+ 13041 1edc 00000000 .quad .LBB442
+ 13041 00000000
+ 13042 1ee4 00000000 .quad .LBE442
+ 13042 00000000
+ 13043 1eec 03 .byte 0x3
+ 13044 1eed 2006 .value 0x620
+ 13045 1eef 741F0000 .long 0x1f74
+ 13046 1ef3 31 .uleb128 0x31
+ 13047 1ef4 CC0D0000 .long 0xdcc
+ 13048 1ef8 03 .byte 0x3
+ 13049 1ef9 91 .byte 0x91
+ 13050 1efa 9073 .sleb128 -1648
+ 13051 1efc 32 .uleb128 0x32
+ 13052 1efd 00000000 .quad .LBB443
+ 13052 00000000
+ 13053 1f05 00000000 .quad .LBE443
+ 13053 00000000
+ 13054 1f0d 33 .uleb128 0x33
+ 13055 1f0e D80D0000 .long 0xdd8
+ 13056 1f12 09 .byte 0x9
+ 13057 1f13 03 .byte 0x3
+ 13058 1f14 00000000 .quad mask.8002
+ 13058 00000000
+ 13059 1f1c 34 .uleb128 0x34
+ 13060 1f1d FB0D0000 .long 0xdfb
+ 13061 1f21 00000000 .quad .LBB444
+ 13061 00000000
+ 13062 1f29 00000000 .quad .LBE444
+ 13062 00000000
+ 13063 1f31 03 .byte 0x3
+ 13064 1f32 FE04 .value 0x4fe
+ 13065 1f34 31 .uleb128 0x31
+ 13066 1f35 190E0000 .long 0xe19
+ 13067 1f39 03 .byte 0x3
+ 13068 1f3a 91 .byte 0x91
+ 13069 1f3b A073 .sleb128 -1632
+ 13070 1f3d 31 .uleb128 0x31
+ 13071 1f3e 0D0E0000 .long 0xe0d
+ 13072 1f42 03 .byte 0x3
+ 13073 1f43 91 .byte 0x91
+ 13074 1f44 B073 .sleb128 -1616
+ 13075 1f46 34 .uleb128 0x34
+ 13076 1f47 260E0000 .long 0xe26
+ 13077 1f4b 00000000 .quad .LBB446
+ 13077 00000000
+ 13078 1f53 00000000 .quad .LBE446
+ 13078 00000000
+ 13079 1f5b 03 .byte 0x3
+ 13080 1f5c 7501 .value 0x175
+ 13081 1f5e 31 .uleb128 0x31
+ 13082 1f5f 440E0000 .long 0xe44
+ 13083 1f63 03 .byte 0x3
+ 13084 1f64 91 .byte 0x91
+ 13085 1f65 C073 .sleb128 -1600
+ 13086 1f67 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 381
+
+
+ 13087 1f68 380E0000 .long 0xe38
+ 13088 1f6c 03 .byte 0x3
+ 13089 1f6d 91 .byte 0x91
+ 13090 1f6e D073 .sleb128 -1584
+ 13091 1f70 00 .byte 0x0
+ 13092 1f71 00 .byte 0x0
+ 13093 1f72 00 .byte 0x0
+ 13094 1f73 00 .byte 0x0
+ 13095 1f74 34 .uleb128 0x34
+ 13096 1f75 BA0D0000 .long 0xdba
+ 13097 1f79 00000000 .quad .LBB448
+ 13097 00000000
+ 13098 1f81 00000000 .quad .LBE448
+ 13098 00000000
+ 13099 1f89 03 .byte 0x3
+ 13100 1f8a 2106 .value 0x621
+ 13101 1f8c 31 .uleb128 0x31
+ 13102 1f8d CC0D0000 .long 0xdcc
+ 13103 1f91 03 .byte 0x3
+ 13104 1f92 91 .byte 0x91
+ 13105 1f93 E073 .sleb128 -1568
+ 13106 1f95 32 .uleb128 0x32
+ 13107 1f96 00000000 .quad .LBB449
+ 13107 00000000
+ 13108 1f9e 00000000 .quad .LBE449
+ 13108 00000000
+ 13109 1fa6 33 .uleb128 0x33
+ 13110 1fa7 D80D0000 .long 0xdd8
+ 13111 1fab 09 .byte 0x9
+ 13112 1fac 03 .byte 0x3
+ 13113 1fad 00000000 .quad mask.8002
+ 13113 00000000
+ 13114 1fb5 34 .uleb128 0x34
+ 13115 1fb6 FB0D0000 .long 0xdfb
+ 13116 1fba 00000000 .quad .LBB450
+ 13116 00000000
+ 13117 1fc2 00000000 .quad .LBE450
+ 13117 00000000
+ 13118 1fca 03 .byte 0x3
+ 13119 1fcb FE04 .value 0x4fe
+ 13120 1fcd 31 .uleb128 0x31
+ 13121 1fce 190E0000 .long 0xe19
+ 13122 1fd2 03 .byte 0x3
+ 13123 1fd3 91 .byte 0x91
+ 13124 1fd4 F073 .sleb128 -1552
+ 13125 1fd6 31 .uleb128 0x31
+ 13126 1fd7 0D0E0000 .long 0xe0d
+ 13127 1fdb 03 .byte 0x3
+ 13128 1fdc 91 .byte 0x91
+ 13129 1fdd 8074 .sleb128 -1536
+ 13130 1fdf 34 .uleb128 0x34
+ 13131 1fe0 260E0000 .long 0xe26
+ 13132 1fe4 00000000 .quad .LBB452
+ 13132 00000000
+ 13133 1fec 00000000 .quad .LBE452
+ 13133 00000000
+ 13134 1ff4 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 382
+
+
+ 13135 1ff5 7501 .value 0x175
+ 13136 1ff7 31 .uleb128 0x31
+ 13137 1ff8 440E0000 .long 0xe44
+ 13138 1ffc 03 .byte 0x3
+ 13139 1ffd 91 .byte 0x91
+ 13140 1ffe 9074 .sleb128 -1520
+ 13141 2000 31 .uleb128 0x31
+ 13142 2001 380E0000 .long 0xe38
+ 13143 2005 03 .byte 0x3
+ 13144 2006 91 .byte 0x91
+ 13145 2007 A074 .sleb128 -1504
+ 13146 2009 00 .byte 0x0
+ 13147 200a 00 .byte 0x0
+ 13148 200b 00 .byte 0x0
+ 13149 200c 00 .byte 0x0
+ 13150 200d 00 .byte 0x0
+ 13151 200e 00 .byte 0x0
+ 13152 200f 30 .uleb128 0x30
+ 13153 2010 E30C0000 .long 0xce3
+ 13154 2014 00000000 .quad .LBB454
+ 13154 00000000
+ 13155 201c 00000000 .quad .LBE454
+ 13155 00000000
+ 13156 2024 03 .byte 0x3
+ 13157 2025 D606 .value 0x6d6
+ 13158 2027 D5200000 .long 0x20d5
+ 13159 202b 31 .uleb128 0x31
+ 13160 202c 010D0000 .long 0xd01
+ 13161 2030 03 .byte 0x3
+ 13162 2031 91 .byte 0x91
+ 13163 2032 BC74 .sleb128 -1476
+ 13164 2034 31 .uleb128 0x31
+ 13165 2035 F50C0000 .long 0xcf5
+ 13166 2039 03 .byte 0x3
+ 13167 203a 91 .byte 0x91
+ 13168 203b C074 .sleb128 -1472
+ 13169 203d 32 .uleb128 0x32
+ 13170 203e 00000000 .quad .LBB455
+ 13170 00000000
+ 13171 2046 00000000 .quad .LBE455
+ 13171 00000000
+ 13172 204e 33 .uleb128 0x33
+ 13173 204f 0D0D0000 .long 0xd0d
+ 13174 2053 03 .byte 0x3
+ 13175 2054 76 .byte 0x76
+ 13176 2055 F061 .sleb128 -3856
+ 13177 2057 30 .uleb128 0x30
+ 13178 2058 1A0D0000 .long 0xd1a
+ 13179 205c 00000000 .quad .LBB456
+ 13179 00000000
+ 13180 2064 00000000 .quad .LBE456
+ 13180 00000000
+ 13181 206c 03 .byte 0x3
+ 13182 206d 8A06 .value 0x68a
+ 13183 206f 86200000 .long 0x2086
+ 13184 2073 31 .uleb128 0x31
+ 13185 2074 380D0000 .long 0xd38
+
GAS LISTING /tmp/ccPaCTqg.s page 383
+
+
+ 13186 2078 03 .byte 0x3
+ 13187 2079 91 .byte 0x91
+ 13188 207a DC74 .sleb128 -1444
+ 13189 207c 31 .uleb128 0x31
+ 13190 207d 2C0D0000 .long 0xd2c
+ 13191 2081 03 .byte 0x3
+ 13192 2082 91 .byte 0x91
+ 13193 2083 E074 .sleb128 -1440
+ 13194 2085 00 .byte 0x0
+ 13195 2086 34 .uleb128 0x34
+ 13196 2087 450D0000 .long 0xd45
+ 13197 208b 00000000 .quad .LBB458
+ 13197 00000000
+ 13198 2093 00000000 .quad .LBE458
+ 13198 00000000
+ 13199 209b 03 .byte 0x3
+ 13200 209c 8B06 .value 0x68b
+ 13201 209e 31 .uleb128 0x31
+ 13202 209f 570D0000 .long 0xd57
+ 13203 20a3 03 .byte 0x3
+ 13204 20a4 91 .byte 0x91
+ 13205 20a5 F074 .sleb128 -1424
+ 13206 20a7 34 .uleb128 0x34
+ 13207 20a8 640D0000 .long 0xd64
+ 13208 20ac 00000000 .quad .LBB460
+ 13208 00000000
+ 13209 20b4 00000000 .quad .LBE460
+ 13209 00000000
+ 13210 20bc 03 .byte 0x3
+ 13211 20bd 4905 .value 0x549
+ 13212 20bf 31 .uleb128 0x31
+ 13213 20c0 820D0000 .long 0xd82
+ 13214 20c4 03 .byte 0x3
+ 13215 20c5 91 .byte 0x91
+ 13216 20c6 8C75 .sleb128 -1396
+ 13217 20c8 31 .uleb128 0x31
+ 13218 20c9 760D0000 .long 0xd76
+ 13219 20cd 03 .byte 0x3
+ 13220 20ce 91 .byte 0x91
+ 13221 20cf 9075 .sleb128 -1392
+ 13222 20d1 00 .byte 0x0
+ 13223 20d2 00 .byte 0x0
+ 13224 20d3 00 .byte 0x0
+ 13225 20d4 00 .byte 0x0
+ 13226 20d5 30 .uleb128 0x30
+ 13227 20d6 8F0D0000 .long 0xd8f
+ 13228 20da 00000000 .quad .LBB462
+ 13228 00000000
+ 13229 20e2 00000000 .quad .LBE462
+ 13229 00000000
+ 13230 20ea 03 .byte 0x3
+ 13231 20eb D606 .value 0x6d6
+ 13232 20ed E9220000 .long 0x22e9
+ 13233 20f1 31 .uleb128 0x31
+ 13234 20f2 A10D0000 .long 0xda1
+ 13235 20f6 03 .byte 0x3
+ 13236 20f7 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 384
+
+
+ 13237 20f8 A075 .sleb128 -1376
+ 13238 20fa 32 .uleb128 0x32
+ 13239 20fb 00000000 .quad .LBB463
+ 13239 00000000
+ 13240 2103 00000000 .quad .LBE463
+ 13240 00000000
+ 13241 210b 33 .uleb128 0x33
+ 13242 210c AD0D0000 .long 0xdad
+ 13243 2110 03 .byte 0x3
+ 13244 2111 76 .byte 0x76
+ 13245 2112 8062 .sleb128 -3840
+ 13246 2114 30 .uleb128 0x30
+ 13247 2115 BA0D0000 .long 0xdba
+ 13248 2119 00000000 .quad .LBB464
+ 13248 00000000
+ 13249 2121 00000000 .quad .LBE464
+ 13249 00000000
+ 13250 2129 03 .byte 0x3
+ 13251 212a 1F06 .value 0x61f
+ 13252 212c B1210000 .long 0x21b1
+ 13253 2130 31 .uleb128 0x31
+ 13254 2131 CC0D0000 .long 0xdcc
+ 13255 2135 03 .byte 0x3
+ 13256 2136 91 .byte 0x91
+ 13257 2137 B075 .sleb128 -1360
+ 13258 2139 32 .uleb128 0x32
+ 13259 213a 00000000 .quad .LBB465
+ 13259 00000000
+ 13260 2142 00000000 .quad .LBE465
+ 13260 00000000
+ 13261 214a 33 .uleb128 0x33
+ 13262 214b D80D0000 .long 0xdd8
+ 13263 214f 09 .byte 0x9
+ 13264 2150 03 .byte 0x3
+ 13265 2151 00000000 .quad mask.8002
+ 13265 00000000
+ 13266 2159 34 .uleb128 0x34
+ 13267 215a FB0D0000 .long 0xdfb
+ 13268 215e 00000000 .quad .LBB466
+ 13268 00000000
+ 13269 2166 00000000 .quad .LBE466
+ 13269 00000000
+ 13270 216e 03 .byte 0x3
+ 13271 216f FE04 .value 0x4fe
+ 13272 2171 31 .uleb128 0x31
+ 13273 2172 190E0000 .long 0xe19
+ 13274 2176 03 .byte 0x3
+ 13275 2177 91 .byte 0x91
+ 13276 2178 C075 .sleb128 -1344
+ 13277 217a 31 .uleb128 0x31
+ 13278 217b 0D0E0000 .long 0xe0d
+ 13279 217f 03 .byte 0x3
+ 13280 2180 91 .byte 0x91
+ 13281 2181 D075 .sleb128 -1328
+ 13282 2183 34 .uleb128 0x34
+ 13283 2184 260E0000 .long 0xe26
+ 13284 2188 00000000 .quad .LBB468
+
GAS LISTING /tmp/ccPaCTqg.s page 385
+
+
+ 13284 00000000
+ 13285 2190 00000000 .quad .LBE468
+ 13285 00000000
+ 13286 2198 03 .byte 0x3
+ 13287 2199 7501 .value 0x175
+ 13288 219b 31 .uleb128 0x31
+ 13289 219c 440E0000 .long 0xe44
+ 13290 21a0 03 .byte 0x3
+ 13291 21a1 91 .byte 0x91
+ 13292 21a2 E075 .sleb128 -1312
+ 13293 21a4 31 .uleb128 0x31
+ 13294 21a5 380E0000 .long 0xe38
+ 13295 21a9 03 .byte 0x3
+ 13296 21aa 91 .byte 0x91
+ 13297 21ab F075 .sleb128 -1296
+ 13298 21ad 00 .byte 0x0
+ 13299 21ae 00 .byte 0x0
+ 13300 21af 00 .byte 0x0
+ 13301 21b0 00 .byte 0x0
+ 13302 21b1 30 .uleb128 0x30
+ 13303 21b2 BA0D0000 .long 0xdba
+ 13304 21b6 00000000 .quad .LBB470
+ 13304 00000000
+ 13305 21be 00000000 .quad .LBE470
+ 13305 00000000
+ 13306 21c6 03 .byte 0x3
+ 13307 21c7 2006 .value 0x620
+ 13308 21c9 4E220000 .long 0x224e
+ 13309 21cd 31 .uleb128 0x31
+ 13310 21ce CC0D0000 .long 0xdcc
+ 13311 21d2 03 .byte 0x3
+ 13312 21d3 91 .byte 0x91
+ 13313 21d4 8076 .sleb128 -1280
+ 13314 21d6 32 .uleb128 0x32
+ 13315 21d7 00000000 .quad .LBB471
+ 13315 00000000
+ 13316 21df 00000000 .quad .LBE471
+ 13316 00000000
+ 13317 21e7 33 .uleb128 0x33
+ 13318 21e8 D80D0000 .long 0xdd8
+ 13319 21ec 09 .byte 0x9
+ 13320 21ed 03 .byte 0x3
+ 13321 21ee 00000000 .quad mask.8002
+ 13321 00000000
+ 13322 21f6 34 .uleb128 0x34
+ 13323 21f7 FB0D0000 .long 0xdfb
+ 13324 21fb 00000000 .quad .LBB472
+ 13324 00000000
+ 13325 2203 00000000 .quad .LBE472
+ 13325 00000000
+ 13326 220b 03 .byte 0x3
+ 13327 220c FE04 .value 0x4fe
+ 13328 220e 31 .uleb128 0x31
+ 13329 220f 190E0000 .long 0xe19
+ 13330 2213 03 .byte 0x3
+ 13331 2214 91 .byte 0x91
+ 13332 2215 9076 .sleb128 -1264
+
GAS LISTING /tmp/ccPaCTqg.s page 386
+
+
+ 13333 2217 31 .uleb128 0x31
+ 13334 2218 0D0E0000 .long 0xe0d
+ 13335 221c 03 .byte 0x3
+ 13336 221d 91 .byte 0x91
+ 13337 221e A076 .sleb128 -1248
+ 13338 2220 34 .uleb128 0x34
+ 13339 2221 260E0000 .long 0xe26
+ 13340 2225 00000000 .quad .LBB474
+ 13340 00000000
+ 13341 222d 00000000 .quad .LBE474
+ 13341 00000000
+ 13342 2235 03 .byte 0x3
+ 13343 2236 7501 .value 0x175
+ 13344 2238 31 .uleb128 0x31
+ 13345 2239 440E0000 .long 0xe44
+ 13346 223d 03 .byte 0x3
+ 13347 223e 91 .byte 0x91
+ 13348 223f B076 .sleb128 -1232
+ 13349 2241 31 .uleb128 0x31
+ 13350 2242 380E0000 .long 0xe38
+ 13351 2246 03 .byte 0x3
+ 13352 2247 91 .byte 0x91
+ 13353 2248 C076 .sleb128 -1216
+ 13354 224a 00 .byte 0x0
+ 13355 224b 00 .byte 0x0
+ 13356 224c 00 .byte 0x0
+ 13357 224d 00 .byte 0x0
+ 13358 224e 34 .uleb128 0x34
+ 13359 224f BA0D0000 .long 0xdba
+ 13360 2253 00000000 .quad .LBB476
+ 13360 00000000
+ 13361 225b 00000000 .quad .LBE476
+ 13361 00000000
+ 13362 2263 03 .byte 0x3
+ 13363 2264 2106 .value 0x621
+ 13364 2266 31 .uleb128 0x31
+ 13365 2267 CC0D0000 .long 0xdcc
+ 13366 226b 03 .byte 0x3
+ 13367 226c 91 .byte 0x91
+ 13368 226d D076 .sleb128 -1200
+ 13369 226f 32 .uleb128 0x32
+ 13370 2270 00000000 .quad .LBB477
+ 13370 00000000
+ 13371 2278 00000000 .quad .LBE477
+ 13371 00000000
+ 13372 2280 33 .uleb128 0x33
+ 13373 2281 D80D0000 .long 0xdd8
+ 13374 2285 09 .byte 0x9
+ 13375 2286 03 .byte 0x3
+ 13376 2287 00000000 .quad mask.8002
+ 13376 00000000
+ 13377 228f 34 .uleb128 0x34
+ 13378 2290 FB0D0000 .long 0xdfb
+ 13379 2294 00000000 .quad .LBB478
+ 13379 00000000
+ 13380 229c 00000000 .quad .LBE478
+ 13380 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 387
+
+
+ 13381 22a4 03 .byte 0x3
+ 13382 22a5 FE04 .value 0x4fe
+ 13383 22a7 31 .uleb128 0x31
+ 13384 22a8 190E0000 .long 0xe19
+ 13385 22ac 03 .byte 0x3
+ 13386 22ad 91 .byte 0x91
+ 13387 22ae E076 .sleb128 -1184
+ 13388 22b0 31 .uleb128 0x31
+ 13389 22b1 0D0E0000 .long 0xe0d
+ 13390 22b5 03 .byte 0x3
+ 13391 22b6 91 .byte 0x91
+ 13392 22b7 F076 .sleb128 -1168
+ 13393 22b9 34 .uleb128 0x34
+ 13394 22ba 260E0000 .long 0xe26
+ 13395 22be 00000000 .quad .LBB480
+ 13395 00000000
+ 13396 22c6 00000000 .quad .LBE480
+ 13396 00000000
+ 13397 22ce 03 .byte 0x3
+ 13398 22cf 7501 .value 0x175
+ 13399 22d1 31 .uleb128 0x31
+ 13400 22d2 440E0000 .long 0xe44
+ 13401 22d6 03 .byte 0x3
+ 13402 22d7 91 .byte 0x91
+ 13403 22d8 8077 .sleb128 -1152
+ 13404 22da 31 .uleb128 0x31
+ 13405 22db 380E0000 .long 0xe38
+ 13406 22df 03 .byte 0x3
+ 13407 22e0 91 .byte 0x91
+ 13408 22e1 9077 .sleb128 -1136
+ 13409 22e3 00 .byte 0x0
+ 13410 22e4 00 .byte 0x0
+ 13411 22e5 00 .byte 0x0
+ 13412 22e6 00 .byte 0x0
+ 13413 22e7 00 .byte 0x0
+ 13414 22e8 00 .byte 0x0
+ 13415 22e9 30 .uleb128 0x30
+ 13416 22ea E30C0000 .long 0xce3
+ 13417 22ee 00000000 .quad .LBB482
+ 13417 00000000
+ 13418 22f6 00000000 .quad .LBE482
+ 13418 00000000
+ 13419 22fe 03 .byte 0x3
+ 13420 22ff D706 .value 0x6d7
+ 13421 2301 AF230000 .long 0x23af
+ 13422 2305 31 .uleb128 0x31
+ 13423 2306 010D0000 .long 0xd01
+ 13424 230a 03 .byte 0x3
+ 13425 230b 91 .byte 0x91
+ 13426 230c AC77 .sleb128 -1108
+ 13427 230e 31 .uleb128 0x31
+ 13428 230f F50C0000 .long 0xcf5
+ 13429 2313 03 .byte 0x3
+ 13430 2314 91 .byte 0x91
+ 13431 2315 B077 .sleb128 -1104
+ 13432 2317 32 .uleb128 0x32
+ 13433 2318 00000000 .quad .LBB483
+
GAS LISTING /tmp/ccPaCTqg.s page 388
+
+
+ 13433 00000000
+ 13434 2320 00000000 .quad .LBE483
+ 13434 00000000
+ 13435 2328 33 .uleb128 0x33
+ 13436 2329 0D0D0000 .long 0xd0d
+ 13437 232d 03 .byte 0x3
+ 13438 232e 76 .byte 0x76
+ 13439 232f 9062 .sleb128 -3824
+ 13440 2331 30 .uleb128 0x30
+ 13441 2332 1A0D0000 .long 0xd1a
+ 13442 2336 00000000 .quad .LBB484
+ 13442 00000000
+ 13443 233e 00000000 .quad .LBE484
+ 13443 00000000
+ 13444 2346 03 .byte 0x3
+ 13445 2347 8A06 .value 0x68a
+ 13446 2349 60230000 .long 0x2360
+ 13447 234d 31 .uleb128 0x31
+ 13448 234e 380D0000 .long 0xd38
+ 13449 2352 03 .byte 0x3
+ 13450 2353 91 .byte 0x91
+ 13451 2354 CC77 .sleb128 -1076
+ 13452 2356 31 .uleb128 0x31
+ 13453 2357 2C0D0000 .long 0xd2c
+ 13454 235b 03 .byte 0x3
+ 13455 235c 91 .byte 0x91
+ 13456 235d D077 .sleb128 -1072
+ 13457 235f 00 .byte 0x0
+ 13458 2360 34 .uleb128 0x34
+ 13459 2361 450D0000 .long 0xd45
+ 13460 2365 00000000 .quad .LBB486
+ 13460 00000000
+ 13461 236d 00000000 .quad .LBE486
+ 13461 00000000
+ 13462 2375 03 .byte 0x3
+ 13463 2376 8B06 .value 0x68b
+ 13464 2378 31 .uleb128 0x31
+ 13465 2379 570D0000 .long 0xd57
+ 13466 237d 03 .byte 0x3
+ 13467 237e 91 .byte 0x91
+ 13468 237f E077 .sleb128 -1056
+ 13469 2381 34 .uleb128 0x34
+ 13470 2382 640D0000 .long 0xd64
+ 13471 2386 00000000 .quad .LBB488
+ 13471 00000000
+ 13472 238e 00000000 .quad .LBE488
+ 13472 00000000
+ 13473 2396 03 .byte 0x3
+ 13474 2397 4905 .value 0x549
+ 13475 2399 31 .uleb128 0x31
+ 13476 239a 820D0000 .long 0xd82
+ 13477 239e 03 .byte 0x3
+ 13478 239f 91 .byte 0x91
+ 13479 23a0 FC77 .sleb128 -1028
+ 13480 23a2 31 .uleb128 0x31
+ 13481 23a3 760D0000 .long 0xd76
+ 13482 23a7 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 389
+
+
+ 13483 23a8 91 .byte 0x91
+ 13484 23a9 8078 .sleb128 -1024
+ 13485 23ab 00 .byte 0x0
+ 13486 23ac 00 .byte 0x0
+ 13487 23ad 00 .byte 0x0
+ 13488 23ae 00 .byte 0x0
+ 13489 23af 30 .uleb128 0x30
+ 13490 23b0 8F0D0000 .long 0xd8f
+ 13491 23b4 00000000 .quad .LBB490
+ 13491 00000000
+ 13492 23bc 00000000 .quad .LBE490
+ 13492 00000000
+ 13493 23c4 03 .byte 0x3
+ 13494 23c5 D706 .value 0x6d7
+ 13495 23c7 C3250000 .long 0x25c3
+ 13496 23cb 31 .uleb128 0x31
+ 13497 23cc A10D0000 .long 0xda1
+ 13498 23d0 03 .byte 0x3
+ 13499 23d1 91 .byte 0x91
+ 13500 23d2 9078 .sleb128 -1008
+ 13501 23d4 32 .uleb128 0x32
+ 13502 23d5 00000000 .quad .LBB491
+ 13502 00000000
+ 13503 23dd 00000000 .quad .LBE491
+ 13503 00000000
+ 13504 23e5 33 .uleb128 0x33
+ 13505 23e6 AD0D0000 .long 0xdad
+ 13506 23ea 03 .byte 0x3
+ 13507 23eb 76 .byte 0x76
+ 13508 23ec A062 .sleb128 -3808
+ 13509 23ee 30 .uleb128 0x30
+ 13510 23ef BA0D0000 .long 0xdba
+ 13511 23f3 00000000 .quad .LBB492
+ 13511 00000000
+ 13512 23fb 00000000 .quad .LBE492
+ 13512 00000000
+ 13513 2403 03 .byte 0x3
+ 13514 2404 1F06 .value 0x61f
+ 13515 2406 8B240000 .long 0x248b
+ 13516 240a 31 .uleb128 0x31
+ 13517 240b CC0D0000 .long 0xdcc
+ 13518 240f 03 .byte 0x3
+ 13519 2410 91 .byte 0x91
+ 13520 2411 A078 .sleb128 -992
+ 13521 2413 32 .uleb128 0x32
+ 13522 2414 00000000 .quad .LBB493
+ 13522 00000000
+ 13523 241c 00000000 .quad .LBE493
+ 13523 00000000
+ 13524 2424 33 .uleb128 0x33
+ 13525 2425 D80D0000 .long 0xdd8
+ 13526 2429 09 .byte 0x9
+ 13527 242a 03 .byte 0x3
+ 13528 242b 00000000 .quad mask.8002
+ 13528 00000000
+ 13529 2433 34 .uleb128 0x34
+ 13530 2434 FB0D0000 .long 0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s page 390
+
+
+ 13531 2438 00000000 .quad .LBB494
+ 13531 00000000
+ 13532 2440 00000000 .quad .LBE494
+ 13532 00000000
+ 13533 2448 03 .byte 0x3
+ 13534 2449 FE04 .value 0x4fe
+ 13535 244b 31 .uleb128 0x31
+ 13536 244c 190E0000 .long 0xe19
+ 13537 2450 03 .byte 0x3
+ 13538 2451 91 .byte 0x91
+ 13539 2452 B078 .sleb128 -976
+ 13540 2454 31 .uleb128 0x31
+ 13541 2455 0D0E0000 .long 0xe0d
+ 13542 2459 03 .byte 0x3
+ 13543 245a 91 .byte 0x91
+ 13544 245b C078 .sleb128 -960
+ 13545 245d 34 .uleb128 0x34
+ 13546 245e 260E0000 .long 0xe26
+ 13547 2462 00000000 .quad .LBB496
+ 13547 00000000
+ 13548 246a 00000000 .quad .LBE496
+ 13548 00000000
+ 13549 2472 03 .byte 0x3
+ 13550 2473 7501 .value 0x175
+ 13551 2475 31 .uleb128 0x31
+ 13552 2476 440E0000 .long 0xe44
+ 13553 247a 03 .byte 0x3
+ 13554 247b 91 .byte 0x91
+ 13555 247c D078 .sleb128 -944
+ 13556 247e 31 .uleb128 0x31
+ 13557 247f 380E0000 .long 0xe38
+ 13558 2483 03 .byte 0x3
+ 13559 2484 91 .byte 0x91
+ 13560 2485 E078 .sleb128 -928
+ 13561 2487 00 .byte 0x0
+ 13562 2488 00 .byte 0x0
+ 13563 2489 00 .byte 0x0
+ 13564 248a 00 .byte 0x0
+ 13565 248b 30 .uleb128 0x30
+ 13566 248c BA0D0000 .long 0xdba
+ 13567 2490 00000000 .quad .LBB498
+ 13567 00000000
+ 13568 2498 00000000 .quad .LBE498
+ 13568 00000000
+ 13569 24a0 03 .byte 0x3
+ 13570 24a1 2006 .value 0x620
+ 13571 24a3 28250000 .long 0x2528
+ 13572 24a7 31 .uleb128 0x31
+ 13573 24a8 CC0D0000 .long 0xdcc
+ 13574 24ac 03 .byte 0x3
+ 13575 24ad 91 .byte 0x91
+ 13576 24ae F078 .sleb128 -912
+ 13577 24b0 32 .uleb128 0x32
+ 13578 24b1 00000000 .quad .LBB499
+ 13578 00000000
+ 13579 24b9 00000000 .quad .LBE499
+ 13579 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 391
+
+
+ 13580 24c1 33 .uleb128 0x33
+ 13581 24c2 D80D0000 .long 0xdd8
+ 13582 24c6 09 .byte 0x9
+ 13583 24c7 03 .byte 0x3
+ 13584 24c8 00000000 .quad mask.8002
+ 13584 00000000
+ 13585 24d0 34 .uleb128 0x34
+ 13586 24d1 FB0D0000 .long 0xdfb
+ 13587 24d5 00000000 .quad .LBB500
+ 13587 00000000
+ 13588 24dd 00000000 .quad .LBE500
+ 13588 00000000
+ 13589 24e5 03 .byte 0x3
+ 13590 24e6 FE04 .value 0x4fe
+ 13591 24e8 31 .uleb128 0x31
+ 13592 24e9 190E0000 .long 0xe19
+ 13593 24ed 03 .byte 0x3
+ 13594 24ee 91 .byte 0x91
+ 13595 24ef 8079 .sleb128 -896
+ 13596 24f1 31 .uleb128 0x31
+ 13597 24f2 0D0E0000 .long 0xe0d
+ 13598 24f6 03 .byte 0x3
+ 13599 24f7 91 .byte 0x91
+ 13600 24f8 9079 .sleb128 -880
+ 13601 24fa 34 .uleb128 0x34
+ 13602 24fb 260E0000 .long 0xe26
+ 13603 24ff 00000000 .quad .LBB502
+ 13603 00000000
+ 13604 2507 00000000 .quad .LBE502
+ 13604 00000000
+ 13605 250f 03 .byte 0x3
+ 13606 2510 7501 .value 0x175
+ 13607 2512 31 .uleb128 0x31
+ 13608 2513 440E0000 .long 0xe44
+ 13609 2517 03 .byte 0x3
+ 13610 2518 91 .byte 0x91
+ 13611 2519 A079 .sleb128 -864
+ 13612 251b 31 .uleb128 0x31
+ 13613 251c 380E0000 .long 0xe38
+ 13614 2520 03 .byte 0x3
+ 13615 2521 91 .byte 0x91
+ 13616 2522 B079 .sleb128 -848
+ 13617 2524 00 .byte 0x0
+ 13618 2525 00 .byte 0x0
+ 13619 2526 00 .byte 0x0
+ 13620 2527 00 .byte 0x0
+ 13621 2528 34 .uleb128 0x34
+ 13622 2529 BA0D0000 .long 0xdba
+ 13623 252d 00000000 .quad .LBB504
+ 13623 00000000
+ 13624 2535 00000000 .quad .LBE504
+ 13624 00000000
+ 13625 253d 03 .byte 0x3
+ 13626 253e 2106 .value 0x621
+ 13627 2540 31 .uleb128 0x31
+ 13628 2541 CC0D0000 .long 0xdcc
+ 13629 2545 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 392
+
+
+ 13630 2546 91 .byte 0x91
+ 13631 2547 C079 .sleb128 -832
+ 13632 2549 32 .uleb128 0x32
+ 13633 254a 00000000 .quad .LBB505
+ 13633 00000000
+ 13634 2552 00000000 .quad .LBE505
+ 13634 00000000
+ 13635 255a 33 .uleb128 0x33
+ 13636 255b D80D0000 .long 0xdd8
+ 13637 255f 09 .byte 0x9
+ 13638 2560 03 .byte 0x3
+ 13639 2561 00000000 .quad mask.8002
+ 13639 00000000
+ 13640 2569 34 .uleb128 0x34
+ 13641 256a FB0D0000 .long 0xdfb
+ 13642 256e 00000000 .quad .LBB506
+ 13642 00000000
+ 13643 2576 00000000 .quad .LBE506
+ 13643 00000000
+ 13644 257e 03 .byte 0x3
+ 13645 257f FE04 .value 0x4fe
+ 13646 2581 31 .uleb128 0x31
+ 13647 2582 190E0000 .long 0xe19
+ 13648 2586 03 .byte 0x3
+ 13649 2587 91 .byte 0x91
+ 13650 2588 D079 .sleb128 -816
+ 13651 258a 31 .uleb128 0x31
+ 13652 258b 0D0E0000 .long 0xe0d
+ 13653 258f 03 .byte 0x3
+ 13654 2590 91 .byte 0x91
+ 13655 2591 E079 .sleb128 -800
+ 13656 2593 34 .uleb128 0x34
+ 13657 2594 260E0000 .long 0xe26
+ 13658 2598 00000000 .quad .LBB508
+ 13658 00000000
+ 13659 25a0 00000000 .quad .LBE508
+ 13659 00000000
+ 13660 25a8 03 .byte 0x3
+ 13661 25a9 7501 .value 0x175
+ 13662 25ab 31 .uleb128 0x31
+ 13663 25ac 440E0000 .long 0xe44
+ 13664 25b0 03 .byte 0x3
+ 13665 25b1 91 .byte 0x91
+ 13666 25b2 F079 .sleb128 -784
+ 13667 25b4 31 .uleb128 0x31
+ 13668 25b5 380E0000 .long 0xe38
+ 13669 25b9 03 .byte 0x3
+ 13670 25ba 91 .byte 0x91
+ 13671 25bb 807A .sleb128 -768
+ 13672 25bd 00 .byte 0x0
+ 13673 25be 00 .byte 0x0
+ 13674 25bf 00 .byte 0x0
+ 13675 25c0 00 .byte 0x0
+ 13676 25c1 00 .byte 0x0
+ 13677 25c2 00 .byte 0x0
+ 13678 25c3 30 .uleb128 0x30
+ 13679 25c4 E30C0000 .long 0xce3
+
GAS LISTING /tmp/ccPaCTqg.s page 393
+
+
+ 13680 25c8 00000000 .quad .LBB510
+ 13680 00000000
+ 13681 25d0 00000000 .quad .LBE510
+ 13681 00000000
+ 13682 25d8 03 .byte 0x3
+ 13683 25d9 D806 .value 0x6d8
+ 13684 25db 89260000 .long 0x2689
+ 13685 25df 31 .uleb128 0x31
+ 13686 25e0 010D0000 .long 0xd01
+ 13687 25e4 03 .byte 0x3
+ 13688 25e5 91 .byte 0x91
+ 13689 25e6 9C7A .sleb128 -740
+ 13690 25e8 31 .uleb128 0x31
+ 13691 25e9 F50C0000 .long 0xcf5
+ 13692 25ed 03 .byte 0x3
+ 13693 25ee 91 .byte 0x91
+ 13694 25ef A07A .sleb128 -736
+ 13695 25f1 32 .uleb128 0x32
+ 13696 25f2 00000000 .quad .LBB511
+ 13696 00000000
+ 13697 25fa 00000000 .quad .LBE511
+ 13697 00000000
+ 13698 2602 33 .uleb128 0x33
+ 13699 2603 0D0D0000 .long 0xd0d
+ 13700 2607 03 .byte 0x3
+ 13701 2608 76 .byte 0x76
+ 13702 2609 B062 .sleb128 -3792
+ 13703 260b 30 .uleb128 0x30
+ 13704 260c 1A0D0000 .long 0xd1a
+ 13705 2610 00000000 .quad .LBB512
+ 13705 00000000
+ 13706 2618 00000000 .quad .LBE512
+ 13706 00000000
+ 13707 2620 03 .byte 0x3
+ 13708 2621 8A06 .value 0x68a
+ 13709 2623 3A260000 .long 0x263a
+ 13710 2627 31 .uleb128 0x31
+ 13711 2628 380D0000 .long 0xd38
+ 13712 262c 03 .byte 0x3
+ 13713 262d 91 .byte 0x91
+ 13714 262e BC7A .sleb128 -708
+ 13715 2630 31 .uleb128 0x31
+ 13716 2631 2C0D0000 .long 0xd2c
+ 13717 2635 03 .byte 0x3
+ 13718 2636 91 .byte 0x91
+ 13719 2637 C07A .sleb128 -704
+ 13720 2639 00 .byte 0x0
+ 13721 263a 34 .uleb128 0x34
+ 13722 263b 450D0000 .long 0xd45
+ 13723 263f 00000000 .quad .LBB514
+ 13723 00000000
+ 13724 2647 00000000 .quad .LBE514
+ 13724 00000000
+ 13725 264f 03 .byte 0x3
+ 13726 2650 8B06 .value 0x68b
+ 13727 2652 31 .uleb128 0x31
+ 13728 2653 570D0000 .long 0xd57
+
GAS LISTING /tmp/ccPaCTqg.s page 394
+
+
+ 13729 2657 03 .byte 0x3
+ 13730 2658 91 .byte 0x91
+ 13731 2659 D07A .sleb128 -688
+ 13732 265b 34 .uleb128 0x34
+ 13733 265c 640D0000 .long 0xd64
+ 13734 2660 00000000 .quad .LBB516
+ 13734 00000000
+ 13735 2668 00000000 .quad .LBE516
+ 13735 00000000
+ 13736 2670 03 .byte 0x3
+ 13737 2671 4905 .value 0x549
+ 13738 2673 31 .uleb128 0x31
+ 13739 2674 820D0000 .long 0xd82
+ 13740 2678 03 .byte 0x3
+ 13741 2679 91 .byte 0x91
+ 13742 267a EC7A .sleb128 -660
+ 13743 267c 31 .uleb128 0x31
+ 13744 267d 760D0000 .long 0xd76
+ 13745 2681 03 .byte 0x3
+ 13746 2682 91 .byte 0x91
+ 13747 2683 F07A .sleb128 -656
+ 13748 2685 00 .byte 0x0
+ 13749 2686 00 .byte 0x0
+ 13750 2687 00 .byte 0x0
+ 13751 2688 00 .byte 0x0
+ 13752 2689 30 .uleb128 0x30
+ 13753 268a 8F0D0000 .long 0xd8f
+ 13754 268e 00000000 .quad .LBB518
+ 13754 00000000
+ 13755 2696 00000000 .quad .LBE518
+ 13755 00000000
+ 13756 269e 03 .byte 0x3
+ 13757 269f D806 .value 0x6d8
+ 13758 26a1 9D280000 .long 0x289d
+ 13759 26a5 31 .uleb128 0x31
+ 13760 26a6 A10D0000 .long 0xda1
+ 13761 26aa 03 .byte 0x3
+ 13762 26ab 91 .byte 0x91
+ 13763 26ac 807B .sleb128 -640
+ 13764 26ae 32 .uleb128 0x32
+ 13765 26af 00000000 .quad .LBB519
+ 13765 00000000
+ 13766 26b7 00000000 .quad .LBE519
+ 13766 00000000
+ 13767 26bf 33 .uleb128 0x33
+ 13768 26c0 AD0D0000 .long 0xdad
+ 13769 26c4 03 .byte 0x3
+ 13770 26c5 76 .byte 0x76
+ 13771 26c6 C062 .sleb128 -3776
+ 13772 26c8 30 .uleb128 0x30
+ 13773 26c9 BA0D0000 .long 0xdba
+ 13774 26cd 00000000 .quad .LBB520
+ 13774 00000000
+ 13775 26d5 00000000 .quad .LBE520
+ 13775 00000000
+ 13776 26dd 03 .byte 0x3
+ 13777 26de 1F06 .value 0x61f
+
GAS LISTING /tmp/ccPaCTqg.s page 395
+
+
+ 13778 26e0 65270000 .long 0x2765
+ 13779 26e4 31 .uleb128 0x31
+ 13780 26e5 CC0D0000 .long 0xdcc
+ 13781 26e9 03 .byte 0x3
+ 13782 26ea 91 .byte 0x91
+ 13783 26eb 907B .sleb128 -624
+ 13784 26ed 32 .uleb128 0x32
+ 13785 26ee 00000000 .quad .LBB521
+ 13785 00000000
+ 13786 26f6 00000000 .quad .LBE521
+ 13786 00000000
+ 13787 26fe 33 .uleb128 0x33
+ 13788 26ff D80D0000 .long 0xdd8
+ 13789 2703 09 .byte 0x9
+ 13790 2704 03 .byte 0x3
+ 13791 2705 00000000 .quad mask.8002
+ 13791 00000000
+ 13792 270d 34 .uleb128 0x34
+ 13793 270e FB0D0000 .long 0xdfb
+ 13794 2712 00000000 .quad .LBB522
+ 13794 00000000
+ 13795 271a 00000000 .quad .LBE522
+ 13795 00000000
+ 13796 2722 03 .byte 0x3
+ 13797 2723 FE04 .value 0x4fe
+ 13798 2725 31 .uleb128 0x31
+ 13799 2726 190E0000 .long 0xe19
+ 13800 272a 03 .byte 0x3
+ 13801 272b 91 .byte 0x91
+ 13802 272c A07B .sleb128 -608
+ 13803 272e 31 .uleb128 0x31
+ 13804 272f 0D0E0000 .long 0xe0d
+ 13805 2733 03 .byte 0x3
+ 13806 2734 91 .byte 0x91
+ 13807 2735 B07B .sleb128 -592
+ 13808 2737 34 .uleb128 0x34
+ 13809 2738 260E0000 .long 0xe26
+ 13810 273c 00000000 .quad .LBB524
+ 13810 00000000
+ 13811 2744 00000000 .quad .LBE524
+ 13811 00000000
+ 13812 274c 03 .byte 0x3
+ 13813 274d 7501 .value 0x175
+ 13814 274f 31 .uleb128 0x31
+ 13815 2750 440E0000 .long 0xe44
+ 13816 2754 03 .byte 0x3
+ 13817 2755 91 .byte 0x91
+ 13818 2756 C07B .sleb128 -576
+ 13819 2758 31 .uleb128 0x31
+ 13820 2759 380E0000 .long 0xe38
+ 13821 275d 03 .byte 0x3
+ 13822 275e 91 .byte 0x91
+ 13823 275f D07B .sleb128 -560
+ 13824 2761 00 .byte 0x0
+ 13825 2762 00 .byte 0x0
+ 13826 2763 00 .byte 0x0
+ 13827 2764 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 396
+
+
+ 13828 2765 30 .uleb128 0x30
+ 13829 2766 BA0D0000 .long 0xdba
+ 13830 276a 00000000 .quad .LBB526
+ 13830 00000000
+ 13831 2772 00000000 .quad .LBE526
+ 13831 00000000
+ 13832 277a 03 .byte 0x3
+ 13833 277b 2006 .value 0x620
+ 13834 277d 02280000 .long 0x2802
+ 13835 2781 31 .uleb128 0x31
+ 13836 2782 CC0D0000 .long 0xdcc
+ 13837 2786 03 .byte 0x3
+ 13838 2787 91 .byte 0x91
+ 13839 2788 E07B .sleb128 -544
+ 13840 278a 32 .uleb128 0x32
+ 13841 278b 00000000 .quad .LBB527
+ 13841 00000000
+ 13842 2793 00000000 .quad .LBE527
+ 13842 00000000
+ 13843 279b 33 .uleb128 0x33
+ 13844 279c D80D0000 .long 0xdd8
+ 13845 27a0 09 .byte 0x9
+ 13846 27a1 03 .byte 0x3
+ 13847 27a2 00000000 .quad mask.8002
+ 13847 00000000
+ 13848 27aa 34 .uleb128 0x34
+ 13849 27ab FB0D0000 .long 0xdfb
+ 13850 27af 00000000 .quad .LBB528
+ 13850 00000000
+ 13851 27b7 00000000 .quad .LBE528
+ 13851 00000000
+ 13852 27bf 03 .byte 0x3
+ 13853 27c0 FE04 .value 0x4fe
+ 13854 27c2 31 .uleb128 0x31
+ 13855 27c3 190E0000 .long 0xe19
+ 13856 27c7 03 .byte 0x3
+ 13857 27c8 91 .byte 0x91
+ 13858 27c9 F07B .sleb128 -528
+ 13859 27cb 31 .uleb128 0x31
+ 13860 27cc 0D0E0000 .long 0xe0d
+ 13861 27d0 03 .byte 0x3
+ 13862 27d1 91 .byte 0x91
+ 13863 27d2 807C .sleb128 -512
+ 13864 27d4 34 .uleb128 0x34
+ 13865 27d5 260E0000 .long 0xe26
+ 13866 27d9 00000000 .quad .LBB530
+ 13866 00000000
+ 13867 27e1 00000000 .quad .LBE530
+ 13867 00000000
+ 13868 27e9 03 .byte 0x3
+ 13869 27ea 7501 .value 0x175
+ 13870 27ec 31 .uleb128 0x31
+ 13871 27ed 440E0000 .long 0xe44
+ 13872 27f1 03 .byte 0x3
+ 13873 27f2 91 .byte 0x91
+ 13874 27f3 907C .sleb128 -496
+ 13875 27f5 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 397
+
+
+ 13876 27f6 380E0000 .long 0xe38
+ 13877 27fa 03 .byte 0x3
+ 13878 27fb 91 .byte 0x91
+ 13879 27fc A07C .sleb128 -480
+ 13880 27fe 00 .byte 0x0
+ 13881 27ff 00 .byte 0x0
+ 13882 2800 00 .byte 0x0
+ 13883 2801 00 .byte 0x0
+ 13884 2802 34 .uleb128 0x34
+ 13885 2803 BA0D0000 .long 0xdba
+ 13886 2807 00000000 .quad .LBB532
+ 13886 00000000
+ 13887 280f 00000000 .quad .LBE532
+ 13887 00000000
+ 13888 2817 03 .byte 0x3
+ 13889 2818 2106 .value 0x621
+ 13890 281a 31 .uleb128 0x31
+ 13891 281b CC0D0000 .long 0xdcc
+ 13892 281f 03 .byte 0x3
+ 13893 2820 91 .byte 0x91
+ 13894 2821 B07C .sleb128 -464
+ 13895 2823 32 .uleb128 0x32
+ 13896 2824 00000000 .quad .LBB533
+ 13896 00000000
+ 13897 282c 00000000 .quad .LBE533
+ 13897 00000000
+ 13898 2834 33 .uleb128 0x33
+ 13899 2835 D80D0000 .long 0xdd8
+ 13900 2839 09 .byte 0x9
+ 13901 283a 03 .byte 0x3
+ 13902 283b 00000000 .quad mask.8002
+ 13902 00000000
+ 13903 2843 34 .uleb128 0x34
+ 13904 2844 FB0D0000 .long 0xdfb
+ 13905 2848 00000000 .quad .LBB534
+ 13905 00000000
+ 13906 2850 00000000 .quad .LBE534
+ 13906 00000000
+ 13907 2858 03 .byte 0x3
+ 13908 2859 FE04 .value 0x4fe
+ 13909 285b 31 .uleb128 0x31
+ 13910 285c 190E0000 .long 0xe19
+ 13911 2860 03 .byte 0x3
+ 13912 2861 91 .byte 0x91
+ 13913 2862 C07C .sleb128 -448
+ 13914 2864 31 .uleb128 0x31
+ 13915 2865 0D0E0000 .long 0xe0d
+ 13916 2869 03 .byte 0x3
+ 13917 286a 91 .byte 0x91
+ 13918 286b D07C .sleb128 -432
+ 13919 286d 34 .uleb128 0x34
+ 13920 286e 260E0000 .long 0xe26
+ 13921 2872 00000000 .quad .LBB536
+ 13921 00000000
+ 13922 287a 00000000 .quad .LBE536
+ 13922 00000000
+ 13923 2882 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 398
+
+
+ 13924 2883 7501 .value 0x175
+ 13925 2885 31 .uleb128 0x31
+ 13926 2886 440E0000 .long 0xe44
+ 13927 288a 03 .byte 0x3
+ 13928 288b 91 .byte 0x91
+ 13929 288c E07C .sleb128 -416
+ 13930 288e 31 .uleb128 0x31
+ 13931 288f 380E0000 .long 0xe38
+ 13932 2893 03 .byte 0x3
+ 13933 2894 91 .byte 0x91
+ 13934 2895 F07C .sleb128 -400
+ 13935 2897 00 .byte 0x0
+ 13936 2898 00 .byte 0x0
+ 13937 2899 00 .byte 0x0
+ 13938 289a 00 .byte 0x0
+ 13939 289b 00 .byte 0x0
+ 13940 289c 00 .byte 0x0
+ 13941 289d 30 .uleb128 0x30
+ 13942 289e E30C0000 .long 0xce3
+ 13943 28a2 00000000 .quad .LBB538
+ 13943 00000000
+ 13944 28aa 00000000 .quad .LBE538
+ 13944 00000000
+ 13945 28b2 03 .byte 0x3
+ 13946 28b3 D906 .value 0x6d9
+ 13947 28b5 63290000 .long 0x2963
+ 13948 28b9 31 .uleb128 0x31
+ 13949 28ba 010D0000 .long 0xd01
+ 13950 28be 03 .byte 0x3
+ 13951 28bf 91 .byte 0x91
+ 13952 28c0 8C7D .sleb128 -372
+ 13953 28c2 31 .uleb128 0x31
+ 13954 28c3 F50C0000 .long 0xcf5
+ 13955 28c7 03 .byte 0x3
+ 13956 28c8 91 .byte 0x91
+ 13957 28c9 907D .sleb128 -368
+ 13958 28cb 32 .uleb128 0x32
+ 13959 28cc 00000000 .quad .LBB539
+ 13959 00000000
+ 13960 28d4 00000000 .quad .LBE539
+ 13960 00000000
+ 13961 28dc 33 .uleb128 0x33
+ 13962 28dd 0D0D0000 .long 0xd0d
+ 13963 28e1 03 .byte 0x3
+ 13964 28e2 76 .byte 0x76
+ 13965 28e3 D062 .sleb128 -3760
+ 13966 28e5 30 .uleb128 0x30
+ 13967 28e6 1A0D0000 .long 0xd1a
+ 13968 28ea 00000000 .quad .LBB540
+ 13968 00000000
+ 13969 28f2 00000000 .quad .LBE540
+ 13969 00000000
+ 13970 28fa 03 .byte 0x3
+ 13971 28fb 8A06 .value 0x68a
+ 13972 28fd 14290000 .long 0x2914
+ 13973 2901 31 .uleb128 0x31
+ 13974 2902 380D0000 .long 0xd38
+
GAS LISTING /tmp/ccPaCTqg.s page 399
+
+
+ 13975 2906 03 .byte 0x3
+ 13976 2907 91 .byte 0x91
+ 13977 2908 AC7D .sleb128 -340
+ 13978 290a 31 .uleb128 0x31
+ 13979 290b 2C0D0000 .long 0xd2c
+ 13980 290f 03 .byte 0x3
+ 13981 2910 91 .byte 0x91
+ 13982 2911 B07D .sleb128 -336
+ 13983 2913 00 .byte 0x0
+ 13984 2914 34 .uleb128 0x34
+ 13985 2915 450D0000 .long 0xd45
+ 13986 2919 00000000 .quad .LBB542
+ 13986 00000000
+ 13987 2921 00000000 .quad .LBE542
+ 13987 00000000
+ 13988 2929 03 .byte 0x3
+ 13989 292a 8B06 .value 0x68b
+ 13990 292c 31 .uleb128 0x31
+ 13991 292d 570D0000 .long 0xd57
+ 13992 2931 03 .byte 0x3
+ 13993 2932 91 .byte 0x91
+ 13994 2933 C07D .sleb128 -320
+ 13995 2935 34 .uleb128 0x34
+ 13996 2936 640D0000 .long 0xd64
+ 13997 293a 00000000 .quad .LBB544
+ 13997 00000000
+ 13998 2942 00000000 .quad .LBE544
+ 13998 00000000
+ 13999 294a 03 .byte 0x3
+ 14000 294b 4905 .value 0x549
+ 14001 294d 31 .uleb128 0x31
+ 14002 294e 820D0000 .long 0xd82
+ 14003 2952 03 .byte 0x3
+ 14004 2953 91 .byte 0x91
+ 14005 2954 DC7D .sleb128 -292
+ 14006 2956 31 .uleb128 0x31
+ 14007 2957 760D0000 .long 0xd76
+ 14008 295b 03 .byte 0x3
+ 14009 295c 91 .byte 0x91
+ 14010 295d E07D .sleb128 -288
+ 14011 295f 00 .byte 0x0
+ 14012 2960 00 .byte 0x0
+ 14013 2961 00 .byte 0x0
+ 14014 2962 00 .byte 0x0
+ 14015 2963 34 .uleb128 0x34
+ 14016 2964 8F0D0000 .long 0xd8f
+ 14017 2968 00000000 .quad .LBB546
+ 14017 00000000
+ 14018 2970 00000000 .quad .LBE546
+ 14018 00000000
+ 14019 2978 03 .byte 0x3
+ 14020 2979 D906 .value 0x6d9
+ 14021 297b 31 .uleb128 0x31
+ 14022 297c A10D0000 .long 0xda1
+ 14023 2980 03 .byte 0x3
+ 14024 2981 91 .byte 0x91
+ 14025 2982 F07D .sleb128 -272
+
GAS LISTING /tmp/ccPaCTqg.s page 400
+
+
+ 14026 2984 32 .uleb128 0x32
+ 14027 2985 00000000 .quad .LBB547
+ 14027 00000000
+ 14028 298d 00000000 .quad .LBE547
+ 14028 00000000
+ 14029 2995 33 .uleb128 0x33
+ 14030 2996 AD0D0000 .long 0xdad
+ 14031 299a 03 .byte 0x3
+ 14032 299b 76 .byte 0x76
+ 14033 299c E062 .sleb128 -3744
+ 14034 299e 30 .uleb128 0x30
+ 14035 299f BA0D0000 .long 0xdba
+ 14036 29a3 00000000 .quad .LBB548
+ 14036 00000000
+ 14037 29ab 00000000 .quad .LBE548
+ 14037 00000000
+ 14038 29b3 03 .byte 0x3
+ 14039 29b4 1F06 .value 0x61f
+ 14040 29b6 3B2A0000 .long 0x2a3b
+ 14041 29ba 31 .uleb128 0x31
+ 14042 29bb CC0D0000 .long 0xdcc
+ 14043 29bf 03 .byte 0x3
+ 14044 29c0 91 .byte 0x91
+ 14045 29c1 807E .sleb128 -256
+ 14046 29c3 32 .uleb128 0x32
+ 14047 29c4 00000000 .quad .LBB549
+ 14047 00000000
+ 14048 29cc 00000000 .quad .LBE549
+ 14048 00000000
+ 14049 29d4 33 .uleb128 0x33
+ 14050 29d5 D80D0000 .long 0xdd8
+ 14051 29d9 09 .byte 0x9
+ 14052 29da 03 .byte 0x3
+ 14053 29db 00000000 .quad mask.8002
+ 14053 00000000
+ 14054 29e3 34 .uleb128 0x34
+ 14055 29e4 FB0D0000 .long 0xdfb
+ 14056 29e8 00000000 .quad .LBB550
+ 14056 00000000
+ 14057 29f0 00000000 .quad .LBE550
+ 14057 00000000
+ 14058 29f8 03 .byte 0x3
+ 14059 29f9 FE04 .value 0x4fe
+ 14060 29fb 31 .uleb128 0x31
+ 14061 29fc 190E0000 .long 0xe19
+ 14062 2a00 03 .byte 0x3
+ 14063 2a01 91 .byte 0x91
+ 14064 2a02 907E .sleb128 -240
+ 14065 2a04 31 .uleb128 0x31
+ 14066 2a05 0D0E0000 .long 0xe0d
+ 14067 2a09 03 .byte 0x3
+ 14068 2a0a 91 .byte 0x91
+ 14069 2a0b A07E .sleb128 -224
+ 14070 2a0d 34 .uleb128 0x34
+ 14071 2a0e 260E0000 .long 0xe26
+ 14072 2a12 00000000 .quad .LBB552
+ 14072 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 401
+
+
+ 14073 2a1a 00000000 .quad .LBE552
+ 14073 00000000
+ 14074 2a22 03 .byte 0x3
+ 14075 2a23 7501 .value 0x175
+ 14076 2a25 31 .uleb128 0x31
+ 14077 2a26 440E0000 .long 0xe44
+ 14078 2a2a 03 .byte 0x3
+ 14079 2a2b 91 .byte 0x91
+ 14080 2a2c B07E .sleb128 -208
+ 14081 2a2e 31 .uleb128 0x31
+ 14082 2a2f 380E0000 .long 0xe38
+ 14083 2a33 03 .byte 0x3
+ 14084 2a34 91 .byte 0x91
+ 14085 2a35 C07E .sleb128 -192
+ 14086 2a37 00 .byte 0x0
+ 14087 2a38 00 .byte 0x0
+ 14088 2a39 00 .byte 0x0
+ 14089 2a3a 00 .byte 0x0
+ 14090 2a3b 30 .uleb128 0x30
+ 14091 2a3c BA0D0000 .long 0xdba
+ 14092 2a40 00000000 .quad .LBB554
+ 14092 00000000
+ 14093 2a48 00000000 .quad .LBE554
+ 14093 00000000
+ 14094 2a50 03 .byte 0x3
+ 14095 2a51 2006 .value 0x620
+ 14096 2a53 D82A0000 .long 0x2ad8
+ 14097 2a57 31 .uleb128 0x31
+ 14098 2a58 CC0D0000 .long 0xdcc
+ 14099 2a5c 03 .byte 0x3
+ 14100 2a5d 91 .byte 0x91
+ 14101 2a5e D07E .sleb128 -176
+ 14102 2a60 32 .uleb128 0x32
+ 14103 2a61 00000000 .quad .LBB555
+ 14103 00000000
+ 14104 2a69 00000000 .quad .LBE555
+ 14104 00000000
+ 14105 2a71 33 .uleb128 0x33
+ 14106 2a72 D80D0000 .long 0xdd8
+ 14107 2a76 09 .byte 0x9
+ 14108 2a77 03 .byte 0x3
+ 14109 2a78 00000000 .quad mask.8002
+ 14109 00000000
+ 14110 2a80 34 .uleb128 0x34
+ 14111 2a81 FB0D0000 .long 0xdfb
+ 14112 2a85 00000000 .quad .LBB556
+ 14112 00000000
+ 14113 2a8d 00000000 .quad .LBE556
+ 14113 00000000
+ 14114 2a95 03 .byte 0x3
+ 14115 2a96 FE04 .value 0x4fe
+ 14116 2a98 31 .uleb128 0x31
+ 14117 2a99 190E0000 .long 0xe19
+ 14118 2a9d 03 .byte 0x3
+ 14119 2a9e 91 .byte 0x91
+ 14120 2a9f E07E .sleb128 -160
+ 14121 2aa1 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 402
+
+
+ 14122 2aa2 0D0E0000 .long 0xe0d
+ 14123 2aa6 03 .byte 0x3
+ 14124 2aa7 91 .byte 0x91
+ 14125 2aa8 F07E .sleb128 -144
+ 14126 2aaa 34 .uleb128 0x34
+ 14127 2aab 260E0000 .long 0xe26
+ 14128 2aaf 00000000 .quad .LBB558
+ 14128 00000000
+ 14129 2ab7 00000000 .quad .LBE558
+ 14129 00000000
+ 14130 2abf 03 .byte 0x3
+ 14131 2ac0 7501 .value 0x175
+ 14132 2ac2 31 .uleb128 0x31
+ 14133 2ac3 440E0000 .long 0xe44
+ 14134 2ac7 03 .byte 0x3
+ 14135 2ac8 91 .byte 0x91
+ 14136 2ac9 807F .sleb128 -128
+ 14137 2acb 31 .uleb128 0x31
+ 14138 2acc 380E0000 .long 0xe38
+ 14139 2ad0 03 .byte 0x3
+ 14140 2ad1 91 .byte 0x91
+ 14141 2ad2 907F .sleb128 -112
+ 14142 2ad4 00 .byte 0x0
+ 14143 2ad5 00 .byte 0x0
+ 14144 2ad6 00 .byte 0x0
+ 14145 2ad7 00 .byte 0x0
+ 14146 2ad8 34 .uleb128 0x34
+ 14147 2ad9 BA0D0000 .long 0xdba
+ 14148 2add 00000000 .quad .LBB560
+ 14148 00000000
+ 14149 2ae5 00000000 .quad .LBE560
+ 14149 00000000
+ 14150 2aed 03 .byte 0x3
+ 14151 2aee 2106 .value 0x621
+ 14152 2af0 31 .uleb128 0x31
+ 14153 2af1 CC0D0000 .long 0xdcc
+ 14154 2af5 03 .byte 0x3
+ 14155 2af6 91 .byte 0x91
+ 14156 2af7 A07F .sleb128 -96
+ 14157 2af9 32 .uleb128 0x32
+ 14158 2afa 00000000 .quad .LBB561
+ 14158 00000000
+ 14159 2b02 00000000 .quad .LBE561
+ 14159 00000000
+ 14160 2b0a 33 .uleb128 0x33
+ 14161 2b0b D80D0000 .long 0xdd8
+ 14162 2b0f 09 .byte 0x9
+ 14163 2b10 03 .byte 0x3
+ 14164 2b11 00000000 .quad mask.8002
+ 14164 00000000
+ 14165 2b19 34 .uleb128 0x34
+ 14166 2b1a FB0D0000 .long 0xdfb
+ 14167 2b1e 00000000 .quad .LBB562
+ 14167 00000000
+ 14168 2b26 00000000 .quad .LBE562
+ 14168 00000000
+ 14169 2b2e 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 403
+
+
+ 14170 2b2f FE04 .value 0x4fe
+ 14171 2b31 31 .uleb128 0x31
+ 14172 2b32 190E0000 .long 0xe19
+ 14173 2b36 03 .byte 0x3
+ 14174 2b37 91 .byte 0x91
+ 14175 2b38 B07F .sleb128 -80
+ 14176 2b3a 31 .uleb128 0x31
+ 14177 2b3b 0D0E0000 .long 0xe0d
+ 14178 2b3f 02 .byte 0x2
+ 14179 2b40 91 .byte 0x91
+ 14180 2b41 40 .sleb128 -64
+ 14181 2b42 34 .uleb128 0x34
+ 14182 2b43 260E0000 .long 0xe26
+ 14183 2b47 00000000 .quad .LBB564
+ 14183 00000000
+ 14184 2b4f 00000000 .quad .LBE564
+ 14184 00000000
+ 14185 2b57 03 .byte 0x3
+ 14186 2b58 7501 .value 0x175
+ 14187 2b5a 31 .uleb128 0x31
+ 14188 2b5b 440E0000 .long 0xe44
+ 14189 2b5f 02 .byte 0x2
+ 14190 2b60 91 .byte 0x91
+ 14191 2b61 50 .sleb128 -48
+ 14192 2b62 31 .uleb128 0x31
+ 14193 2b63 380E0000 .long 0xe38
+ 14194 2b67 02 .byte 0x2
+ 14195 2b68 91 .byte 0x91
+ 14196 2b69 60 .sleb128 -32
+ 14197 2b6a 00 .byte 0x0
+ 14198 2b6b 00 .byte 0x0
+ 14199 2b6c 00 .byte 0x0
+ 14200 2b6d 00 .byte 0x0
+ 14201 2b6e 00 .byte 0x0
+ 14202 2b6f 00 .byte 0x0
+ 14203 2b70 00 .byte 0x0
+ 14204 2b71 07 .uleb128 0x7
+ 14205 2b72 08 .byte 0x8
+ 14206 2b73 C9010000 .long 0x1c9
+ 14207 2b77 07 .uleb128 0x7
+ 14208 2b78 08 .byte 0x8
+ 14209 2b79 7D2B0000 .long 0x2b7d
+ 14210 2b7d 06 .uleb128 0x6
+ 14211 2b7e 14040000 .long 0x414
+ 14212 2b82 27 .uleb128 0x27
+ 14213 2b83 00000000 .long .LASF338
+ 14214 2b87 03 .byte 0x3
+ 14215 2b88 1105 .value 0x511
+ 14216 2b8a 01 .byte 0x1
+ 14217 2b8b C9010000 .long 0x1c9
+ 14218 2b8f 03 .byte 0x3
+ 14219 2b90 BE2B0000 .long 0x2bbe
+ 14220 2b94 28 .uleb128 0x28
+ 14221 2b95 00000000 .long .LASF63
+ 14222 2b99 03 .byte 0x3
+ 14223 2b9a 1105 .value 0x511
+ 14224 2b9c C9010000 .long 0x1c9
+
GAS LISTING /tmp/ccPaCTqg.s page 404
+
+
+ 14225 2ba0 2C .uleb128 0x2c
+ 14226 2ba1 00000000 .long .LASF329
+ 14227 2ba5 03 .byte 0x3
+ 14228 2ba6 1405 .value 0x514
+ 14229 2ba8 F60D0000 .long 0xdf6
+ 14230 2bac 10 .byte 0x10
+ 14231 2bad 08 .byte 0x8
+ 14232 2bae 09 .byte 0x9
+ 14233 2baf 0A .byte 0xa
+ 14234 2bb0 0B .byte 0xb
+ 14235 2bb1 0C .byte 0xc
+ 14236 2bb2 0D .byte 0xd
+ 14237 2bb3 0E .byte 0xe
+ 14238 2bb4 0F .byte 0xf
+ 14239 2bb5 FF .byte 0xff
+ 14240 2bb6 FF .byte 0xff
+ 14241 2bb7 FF .byte 0xff
+ 14242 2bb8 FF .byte 0xff
+ 14243 2bb9 FF .byte 0xff
+ 14244 2bba FF .byte 0xff
+ 14245 2bbb FF .byte 0xff
+ 14246 2bbc FF .byte 0xff
+ 14247 2bbd 00 .byte 0x0
+ 14248 2bbe 27 .uleb128 0x27
+ 14249 2bbf 00000000 .long .LASF339
+ 14250 2bc3 03 .byte 0x3
+ 14251 2bc4 5206 .value 0x652
+ 14252 2bc6 01 .byte 0x1
+ 14253 2bc7 C9010000 .long 0x1c9
+ 14254 2bcb 03 .byte 0x3
+ 14255 2bcc F52B0000 .long 0x2bf5
+ 14256 2bd0 28 .uleb128 0x28
+ 14257 2bd1 00000000 .long .LASF63
+ 14258 2bd5 03 .byte 0x3
+ 14259 2bd6 5206 .value 0x652
+ 14260 2bd8 C9010000 .long 0x1c9
+ 14261 2bdc 28 .uleb128 0x28
+ 14262 2bdd 00000000 .long .LASF325
+ 14263 2be1 03 .byte 0x3
+ 14264 2be2 5206 .value 0x652
+ 14265 2be4 B4000000 .long 0xb4
+ 14266 2be8 29 .uleb128 0x29
+ 14267 2be9 746D7000 .string "tmp"
+ 14268 2bed 03 .byte 0x3
+ 14269 2bee 5506 .value 0x655
+ 14270 2bf0 C9010000 .long 0x1c9
+ 14271 2bf4 00 .byte 0x0
+ 14272 2bf5 27 .uleb128 0x27
+ 14273 2bf6 00000000 .long .LASF340
+ 14274 2bfa 03 .byte 0x3
+ 14275 2bfb 7E05 .value 0x57e
+ 14276 2bfd 01 .byte 0x1
+ 14277 2bfe C9010000 .long 0x1c9
+ 14278 2c02 03 .byte 0x3
+ 14279 2c03 142C0000 .long 0x2c14
+ 14280 2c07 28 .uleb128 0x28
+ 14281 2c08 00000000 .long .LASF63
+
GAS LISTING /tmp/ccPaCTqg.s page 405
+
+
+ 14282 2c0c 03 .byte 0x3
+ 14283 2c0d 7E05 .value 0x57e
+ 14284 2c0f C9010000 .long 0x1c9
+ 14285 2c13 00 .byte 0x0
+ 14286 2c14 27 .uleb128 0x27
+ 14287 2c15 00000000 .long .LASF341
+ 14288 2c19 03 .byte 0x3
+ 14289 2c1a B705 .value 0x5b7
+ 14290 2c1c 01 .byte 0x1
+ 14291 2c1d C9010000 .long 0x1c9
+ 14292 2c21 03 .byte 0x3
+ 14293 2c22 3B2C0000 .long 0x2c3b
+ 14294 2c26 2A .uleb128 0x2a
+ 14295 2c27 7700 .string "w"
+ 14296 2c29 03 .byte 0x3
+ 14297 2c2a B705 .value 0x5b7
+ 14298 2c2c C9010000 .long 0x1c9
+ 14299 2c30 2A .uleb128 0x2a
+ 14300 2c31 7800 .string "x"
+ 14301 2c33 03 .byte 0x3
+ 14302 2c34 B705 .value 0x5b7
+ 14303 2c36 C9010000 .long 0x1c9
+ 14304 2c3a 00 .byte 0x0
+ 14305 2c3b 27 .uleb128 0x27
+ 14306 2c3c 00000000 .long .LASF342
+ 14307 2c40 01 .byte 0x1
+ 14308 2c41 6C01 .value 0x16c
+ 14309 2c43 01 .byte 0x1
+ 14310 2c44 FD000000 .long 0xfd
+ 14311 2c48 03 .byte 0x3
+ 14312 2c49 722C0000 .long 0x2c72
+ 14313 2c4d 28 .uleb128 0x28
+ 14314 2c4e 00000000 .long .LASF343
+ 14315 2c52 01 .byte 0x1
+ 14316 2c53 6C01 .value 0x16c
+ 14317 2c55 FD000000 .long 0xfd
+ 14318 2c59 28 .uleb128 0x28
+ 14319 2c5a 00000000 .long .LASF344
+ 14320 2c5e 01 .byte 0x1
+ 14321 2c5f 6C01 .value 0x16c
+ 14322 2c61 FD000000 .long 0xfd
+ 14323 2c65 28 .uleb128 0x28
+ 14324 2c66 00000000 .long .LASF329
+ 14325 2c6a 01 .byte 0x1
+ 14326 2c6b 6C01 .value 0x16c
+ 14327 2c6d B4000000 .long 0xb4
+ 14328 2c71 00 .byte 0x0
+ 14329 2c72 27 .uleb128 0x27
+ 14330 2c73 00000000 .long .LASF345
+ 14331 2c77 03 .byte 0x3
+ 14332 2c78 D705 .value 0x5d7
+ 14333 2c7a 01 .byte 0x1
+ 14334 2c7b C9010000 .long 0x1c9
+ 14335 2c7f 03 .byte 0x3
+ 14336 2c80 992C0000 .long 0x2c99
+ 14337 2c84 2A .uleb128 0x2a
+ 14338 2c85 7700 .string "w"
+
GAS LISTING /tmp/ccPaCTqg.s page 406
+
+
+ 14339 2c87 03 .byte 0x3
+ 14340 2c88 D705 .value 0x5d7
+ 14341 2c8a C9010000 .long 0x1c9
+ 14342 2c8e 2A .uleb128 0x2a
+ 14343 2c8f 7800 .string "x"
+ 14344 2c91 03 .byte 0x3
+ 14345 2c92 D705 .value 0x5d7
+ 14346 2c94 C9010000 .long 0x1c9
+ 14347 2c98 00 .byte 0x0
+ 14348 2c99 2D .uleb128 0x2d
+ 14349 2c9a 00000000 .long .LASF347
+ 14350 2c9e 03 .byte 0x3
+ 14351 2c9f E706 .value 0x6e7
+ 14352 2ca1 01 .byte 0x1
+ 14353 2ca2 00000000 .quad .LFB657
+ 14353 00000000
+ 14354 2caa 00000000 .quad .LFE657
+ 14354 00000000
+ 14355 2cb2 00000000 .long .LLST7
+ 14356 2cb6 F7580000 .long 0x58f7
+ 14357 2cba 20 .uleb128 0x20
+ 14358 2cbb 00000000 .long .LASF61
+ 14359 2cbf 03 .byte 0x3
+ 14360 2cc0 E706 .value 0x6e7
+ 14361 2cc2 712B0000 .long 0x2b71
+ 14362 2cc6 03 .byte 0x3
+ 14363 2cc7 91 .byte 0x91
+ 14364 2cc8 B852 .sleb128 -5832
+ 14365 2cca 2E .uleb128 0x2e
+ 14366 2ccb 6B657900 .string "key"
+ 14367 2ccf 03 .byte 0x3
+ 14368 2cd0 E706 .value 0x6e7
+ 14369 2cd2 772B0000 .long 0x2b77
+ 14370 2cd6 03 .byte 0x3
+ 14371 2cd7 91 .byte 0x91
+ 14372 2cd8 B052 .sleb128 -5840
+ 14373 2cda 35 .uleb128 0x35
+ 14374 2cdb 763000 .string "v0"
+ 14375 2cde 03 .byte 0x3
+ 14376 2cdf EF06 .value 0x6ef
+ 14377 2ce1 C9010000 .long 0x1c9
+ 14378 2ce5 03 .byte 0x3
+ 14379 2ce6 76 .byte 0x76
+ 14380 2ce7 D04E .sleb128 -6320
+ 14381 2ce9 35 .uleb128 0x35
+ 14382 2cea 763100 .string "v1"
+ 14383 2ced 03 .byte 0x3
+ 14384 2cee EF06 .value 0x6ef
+ 14385 2cf0 C9010000 .long 0x1c9
+ 14386 2cf4 03 .byte 0x3
+ 14387 2cf5 76 .byte 0x76
+ 14388 2cf6 E04E .sleb128 -6304
+ 14389 2cf8 35 .uleb128 0x35
+ 14390 2cf9 763200 .string "v2"
+ 14391 2cfc 03 .byte 0x3
+ 14392 2cfd EF06 .value 0x6ef
+ 14393 2cff C9010000 .long 0x1c9
+
GAS LISTING /tmp/ccPaCTqg.s page 407
+
+
+ 14394 2d03 03 .byte 0x3
+ 14395 2d04 76 .byte 0x76
+ 14396 2d05 F04E .sleb128 -6288
+ 14397 2d07 35 .uleb128 0x35
+ 14398 2d08 763300 .string "v3"
+ 14399 2d0b 03 .byte 0x3
+ 14400 2d0c EF06 .value 0x6ef
+ 14401 2d0e C9010000 .long 0x1c9
+ 14402 2d12 03 .byte 0x3
+ 14403 2d13 76 .byte 0x76
+ 14404 2d14 804F .sleb128 -6272
+ 14405 2d16 35 .uleb128 0x35
+ 14406 2d17 763400 .string "v4"
+ 14407 2d1a 03 .byte 0x3
+ 14408 2d1b EF06 .value 0x6ef
+ 14409 2d1d C9010000 .long 0x1c9
+ 14410 2d21 03 .byte 0x3
+ 14411 2d22 76 .byte 0x76
+ 14412 2d23 904F .sleb128 -6256
+ 14413 2d25 35 .uleb128 0x35
+ 14414 2d26 6B00 .string "k"
+ 14415 2d28 03 .byte 0x3
+ 14416 2d29 F006 .value 0x6f0
+ 14417 2d2b C9010000 .long 0x1c9
+ 14418 2d2f 03 .byte 0x3
+ 14419 2d30 76 .byte 0x76
+ 14420 2d31 A04F .sleb128 -6240
+ 14421 2d33 30 .uleb128 0x30
+ 14422 2d34 BB0C0000 .long 0xcbb
+ 14423 2d38 00000000 .quad .LBB1000
+ 14423 00000000
+ 14424 2d40 00000000 .quad .LBE1000
+ 14424 00000000
+ 14425 2d48 03 .byte 0x3
+ 14426 2d49 F306 .value 0x6f3
+ 14427 2d4b 742D0000 .long 0x2d74
+ 14428 2d4f 31 .uleb128 0x31
+ 14429 2d50 CC0C0000 .long 0xccc
+ 14430 2d54 03 .byte 0x3
+ 14431 2d55 91 .byte 0x91
+ 14432 2d56 C052 .sleb128 -5824
+ 14433 2d58 32 .uleb128 0x32
+ 14434 2d59 00000000 .quad .LBB1001
+ 14434 00000000
+ 14435 2d61 00000000 .quad .LBE1001
+ 14435 00000000
+ 14436 2d69 33 .uleb128 0x33
+ 14437 2d6a D70C0000 .long 0xcd7
+ 14438 2d6e 03 .byte 0x3
+ 14439 2d6f 76 .byte 0x76
+ 14440 2d70 B04F .sleb128 -6224
+ 14441 2d72 00 .byte 0x0
+ 14442 2d73 00 .byte 0x0
+ 14443 2d74 30 .uleb128 0x30
+ 14444 2d75 BB0C0000 .long 0xcbb
+ 14445 2d79 00000000 .quad .LBB1002
+ 14445 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 408
+
+
+ 14446 2d81 00000000 .quad .LBE1002
+ 14446 00000000
+ 14447 2d89 03 .byte 0x3
+ 14448 2d8a F406 .value 0x6f4
+ 14449 2d8c B52D0000 .long 0x2db5
+ 14450 2d90 31 .uleb128 0x31
+ 14451 2d91 CC0C0000 .long 0xccc
+ 14452 2d95 03 .byte 0x3
+ 14453 2d96 91 .byte 0x91
+ 14454 2d97 C852 .sleb128 -5816
+ 14455 2d99 32 .uleb128 0x32
+ 14456 2d9a 00000000 .quad .LBB1003
+ 14456 00000000
+ 14457 2da2 00000000 .quad .LBE1003
+ 14457 00000000
+ 14458 2daa 33 .uleb128 0x33
+ 14459 2dab D70C0000 .long 0xcd7
+ 14460 2daf 03 .byte 0x3
+ 14461 2db0 76 .byte 0x76
+ 14462 2db1 C04F .sleb128 -6208
+ 14463 2db3 00 .byte 0x0
+ 14464 2db4 00 .byte 0x0
+ 14465 2db5 30 .uleb128 0x30
+ 14466 2db6 822B0000 .long 0x2b82
+ 14467 2dba 00000000 .quad .LBB1004
+ 14467 00000000
+ 14468 2dc2 00000000 .quad .LBE1004
+ 14468 00000000
+ 14469 2dca 03 .byte 0x3
+ 14470 2dcb F506 .value 0x6f5
+ 14471 2dcd 522E0000 .long 0x2e52
+ 14472 2dd1 31 .uleb128 0x31
+ 14473 2dd2 942B0000 .long 0x2b94
+ 14474 2dd6 03 .byte 0x3
+ 14475 2dd7 91 .byte 0x91
+ 14476 2dd8 D052 .sleb128 -5808
+ 14477 2dda 32 .uleb128 0x32
+ 14478 2ddb 00000000 .quad .LBB1005
+ 14478 00000000
+ 14479 2de3 00000000 .quad .LBE1005
+ 14479 00000000
+ 14480 2deb 33 .uleb128 0x33
+ 14481 2dec A02B0000 .long 0x2ba0
+ 14482 2df0 09 .byte 0x9
+ 14483 2df1 03 .byte 0x3
+ 14484 2df2 00000000 .quad mask.8011
+ 14484 00000000
+ 14485 2dfa 34 .uleb128 0x34
+ 14486 2dfb FB0D0000 .long 0xdfb
+ 14487 2dff 00000000 .quad .LBB1006
+ 14487 00000000
+ 14488 2e07 00000000 .quad .LBE1006
+ 14488 00000000
+ 14489 2e0f 03 .byte 0x3
+ 14490 2e10 1505 .value 0x515
+ 14491 2e12 31 .uleb128 0x31
+ 14492 2e13 190E0000 .long 0xe19
+
GAS LISTING /tmp/ccPaCTqg.s page 409
+
+
+ 14493 2e17 03 .byte 0x3
+ 14494 2e18 91 .byte 0x91
+ 14495 2e19 E052 .sleb128 -5792
+ 14496 2e1b 31 .uleb128 0x31
+ 14497 2e1c 0D0E0000 .long 0xe0d
+ 14498 2e20 03 .byte 0x3
+ 14499 2e21 91 .byte 0x91
+ 14500 2e22 F052 .sleb128 -5776
+ 14501 2e24 34 .uleb128 0x34
+ 14502 2e25 260E0000 .long 0xe26
+ 14503 2e29 00000000 .quad .LBB1008
+ 14503 00000000
+ 14504 2e31 00000000 .quad .LBE1008
+ 14504 00000000
+ 14505 2e39 03 .byte 0x3
+ 14506 2e3a 7501 .value 0x175
+ 14507 2e3c 31 .uleb128 0x31
+ 14508 2e3d 440E0000 .long 0xe44
+ 14509 2e41 03 .byte 0x3
+ 14510 2e42 91 .byte 0x91
+ 14511 2e43 8053 .sleb128 -5760
+ 14512 2e45 31 .uleb128 0x31
+ 14513 2e46 380E0000 .long 0xe38
+ 14514 2e4a 03 .byte 0x3
+ 14515 2e4b 91 .byte 0x91
+ 14516 2e4c 9053 .sleb128 -5744
+ 14517 2e4e 00 .byte 0x0
+ 14518 2e4f 00 .byte 0x0
+ 14519 2e50 00 .byte 0x0
+ 14520 2e51 00 .byte 0x0
+ 14521 2e52 30 .uleb128 0x30
+ 14522 2e53 BE2B0000 .long 0x2bbe
+ 14523 2e57 00000000 .quad .LBB1010
+ 14523 00000000
+ 14524 2e5f 00000000 .quad .LBE1010
+ 14524 00000000
+ 14525 2e67 03 .byte 0x3
+ 14526 2e68 FC06 .value 0x6fc
+ 14527 2e6a 182F0000 .long 0x2f18
+ 14528 2e6e 31 .uleb128 0x31
+ 14529 2e6f DC2B0000 .long 0x2bdc
+ 14530 2e73 03 .byte 0x3
+ 14531 2e74 91 .byte 0x91
+ 14532 2e75 AC53 .sleb128 -5716
+ 14533 2e77 31 .uleb128 0x31
+ 14534 2e78 D02B0000 .long 0x2bd0
+ 14535 2e7c 03 .byte 0x3
+ 14536 2e7d 91 .byte 0x91
+ 14537 2e7e B053 .sleb128 -5712
+ 14538 2e80 32 .uleb128 0x32
+ 14539 2e81 00000000 .quad .LBB1011
+ 14539 00000000
+ 14540 2e89 00000000 .quad .LBE1011
+ 14540 00000000
+ 14541 2e91 33 .uleb128 0x33
+ 14542 2e92 E82B0000 .long 0x2be8
+ 14543 2e96 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 410
+
+
+ 14544 2e97 76 .byte 0x76
+ 14545 2e98 D04F .sleb128 -6192
+ 14546 2e9a 30 .uleb128 0x30
+ 14547 2e9b 1A0D0000 .long 0xd1a
+ 14548 2e9f 00000000 .quad .LBB1012
+ 14548 00000000
+ 14549 2ea7 00000000 .quad .LBE1012
+ 14549 00000000
+ 14550 2eaf 03 .byte 0x3
+ 14551 2eb0 5606 .value 0x656
+ 14552 2eb2 C92E0000 .long 0x2ec9
+ 14553 2eb6 31 .uleb128 0x31
+ 14554 2eb7 380D0000 .long 0xd38
+ 14555 2ebb 03 .byte 0x3
+ 14556 2ebc 91 .byte 0x91
+ 14557 2ebd CC53 .sleb128 -5684
+ 14558 2ebf 31 .uleb128 0x31
+ 14559 2ec0 2C0D0000 .long 0xd2c
+ 14560 2ec4 03 .byte 0x3
+ 14561 2ec5 91 .byte 0x91
+ 14562 2ec6 D053 .sleb128 -5680
+ 14563 2ec8 00 .byte 0x0
+ 14564 2ec9 34 .uleb128 0x34
+ 14565 2eca F52B0000 .long 0x2bf5
+ 14566 2ece 00000000 .quad .LBB1014
+ 14566 00000000
+ 14567 2ed6 00000000 .quad .LBE1014
+ 14567 00000000
+ 14568 2ede 03 .byte 0x3
+ 14569 2edf 5706 .value 0x657
+ 14570 2ee1 31 .uleb128 0x31
+ 14571 2ee2 072C0000 .long 0x2c07
+ 14572 2ee6 03 .byte 0x3
+ 14573 2ee7 91 .byte 0x91
+ 14574 2ee8 E053 .sleb128 -5664
+ 14575 2eea 34 .uleb128 0x34
+ 14576 2eeb 640D0000 .long 0xd64
+ 14577 2eef 00000000 .quad .LBB1016
+ 14577 00000000
+ 14578 2ef7 00000000 .quad .LBE1016
+ 14578 00000000
+ 14579 2eff 03 .byte 0x3
+ 14580 2f00 8105 .value 0x581
+ 14581 2f02 31 .uleb128 0x31
+ 14582 2f03 820D0000 .long 0xd82
+ 14583 2f07 03 .byte 0x3
+ 14584 2f08 91 .byte 0x91
+ 14585 2f09 FC53 .sleb128 -5636
+ 14586 2f0b 31 .uleb128 0x31
+ 14587 2f0c 760D0000 .long 0xd76
+ 14588 2f10 03 .byte 0x3
+ 14589 2f11 91 .byte 0x91
+ 14590 2f12 8054 .sleb128 -5632
+ 14591 2f14 00 .byte 0x0
+ 14592 2f15 00 .byte 0x0
+ 14593 2f16 00 .byte 0x0
+ 14594 2f17 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 411
+
+
+ 14595 2f18 30 .uleb128 0x30
+ 14596 2f19 8F0D0000 .long 0xd8f
+ 14597 2f1d 00000000 .quad .LBB1018
+ 14597 00000000
+ 14598 2f25 00000000 .quad .LBE1018
+ 14598 00000000
+ 14599 2f2d 03 .byte 0x3
+ 14600 2f2e FE06 .value 0x6fe
+ 14601 2f30 2C310000 .long 0x312c
+ 14602 2f34 31 .uleb128 0x31
+ 14603 2f35 A10D0000 .long 0xda1
+ 14604 2f39 03 .byte 0x3
+ 14605 2f3a 91 .byte 0x91
+ 14606 2f3b 9054 .sleb128 -5616
+ 14607 2f3d 32 .uleb128 0x32
+ 14608 2f3e 00000000 .quad .LBB1019
+ 14608 00000000
+ 14609 2f46 00000000 .quad .LBE1019
+ 14609 00000000
+ 14610 2f4e 33 .uleb128 0x33
+ 14611 2f4f AD0D0000 .long 0xdad
+ 14612 2f53 03 .byte 0x3
+ 14613 2f54 76 .byte 0x76
+ 14614 2f55 E04F .sleb128 -6176
+ 14615 2f57 30 .uleb128 0x30
+ 14616 2f58 BA0D0000 .long 0xdba
+ 14617 2f5c 00000000 .quad .LBB1020
+ 14617 00000000
+ 14618 2f64 00000000 .quad .LBE1020
+ 14618 00000000
+ 14619 2f6c 03 .byte 0x3
+ 14620 2f6d 1F06 .value 0x61f
+ 14621 2f6f F42F0000 .long 0x2ff4
+ 14622 2f73 31 .uleb128 0x31
+ 14623 2f74 CC0D0000 .long 0xdcc
+ 14624 2f78 03 .byte 0x3
+ 14625 2f79 91 .byte 0x91
+ 14626 2f7a A054 .sleb128 -5600
+ 14627 2f7c 32 .uleb128 0x32
+ 14628 2f7d 00000000 .quad .LBB1021
+ 14628 00000000
+ 14629 2f85 00000000 .quad .LBE1021
+ 14629 00000000
+ 14630 2f8d 33 .uleb128 0x33
+ 14631 2f8e D80D0000 .long 0xdd8
+ 14632 2f92 09 .byte 0x9
+ 14633 2f93 03 .byte 0x3
+ 14634 2f94 00000000 .quad mask.8002
+ 14634 00000000
+ 14635 2f9c 34 .uleb128 0x34
+ 14636 2f9d FB0D0000 .long 0xdfb
+ 14637 2fa1 00000000 .quad .LBB1022
+ 14637 00000000
+ 14638 2fa9 00000000 .quad .LBE1022
+ 14638 00000000
+ 14639 2fb1 03 .byte 0x3
+ 14640 2fb2 FE04 .value 0x4fe
+
GAS LISTING /tmp/ccPaCTqg.s page 412
+
+
+ 14641 2fb4 31 .uleb128 0x31
+ 14642 2fb5 190E0000 .long 0xe19
+ 14643 2fb9 03 .byte 0x3
+ 14644 2fba 91 .byte 0x91
+ 14645 2fbb B054 .sleb128 -5584
+ 14646 2fbd 31 .uleb128 0x31
+ 14647 2fbe 0D0E0000 .long 0xe0d
+ 14648 2fc2 03 .byte 0x3
+ 14649 2fc3 91 .byte 0x91
+ 14650 2fc4 C054 .sleb128 -5568
+ 14651 2fc6 34 .uleb128 0x34
+ 14652 2fc7 260E0000 .long 0xe26
+ 14653 2fcb 00000000 .quad .LBB1024
+ 14653 00000000
+ 14654 2fd3 00000000 .quad .LBE1024
+ 14654 00000000
+ 14655 2fdb 03 .byte 0x3
+ 14656 2fdc 7501 .value 0x175
+ 14657 2fde 31 .uleb128 0x31
+ 14658 2fdf 440E0000 .long 0xe44
+ 14659 2fe3 03 .byte 0x3
+ 14660 2fe4 91 .byte 0x91
+ 14661 2fe5 D054 .sleb128 -5552
+ 14662 2fe7 31 .uleb128 0x31
+ 14663 2fe8 380E0000 .long 0xe38
+ 14664 2fec 03 .byte 0x3
+ 14665 2fed 91 .byte 0x91
+ 14666 2fee E054 .sleb128 -5536
+ 14667 2ff0 00 .byte 0x0
+ 14668 2ff1 00 .byte 0x0
+ 14669 2ff2 00 .byte 0x0
+ 14670 2ff3 00 .byte 0x0
+ 14671 2ff4 30 .uleb128 0x30
+ 14672 2ff5 BA0D0000 .long 0xdba
+ 14673 2ff9 00000000 .quad .LBB1026
+ 14673 00000000
+ 14674 3001 00000000 .quad .LBE1026
+ 14674 00000000
+ 14675 3009 03 .byte 0x3
+ 14676 300a 2006 .value 0x620
+ 14677 300c 91300000 .long 0x3091
+ 14678 3010 31 .uleb128 0x31
+ 14679 3011 CC0D0000 .long 0xdcc
+ 14680 3015 03 .byte 0x3
+ 14681 3016 91 .byte 0x91
+ 14682 3017 F054 .sleb128 -5520
+ 14683 3019 32 .uleb128 0x32
+ 14684 301a 00000000 .quad .LBB1027
+ 14684 00000000
+ 14685 3022 00000000 .quad .LBE1027
+ 14685 00000000
+ 14686 302a 33 .uleb128 0x33
+ 14687 302b D80D0000 .long 0xdd8
+ 14688 302f 09 .byte 0x9
+ 14689 3030 03 .byte 0x3
+ 14690 3031 00000000 .quad mask.8002
+ 14690 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 413
+
+
+ 14691 3039 34 .uleb128 0x34
+ 14692 303a FB0D0000 .long 0xdfb
+ 14693 303e 00000000 .quad .LBB1028
+ 14693 00000000
+ 14694 3046 00000000 .quad .LBE1028
+ 14694 00000000
+ 14695 304e 03 .byte 0x3
+ 14696 304f FE04 .value 0x4fe
+ 14697 3051 31 .uleb128 0x31
+ 14698 3052 190E0000 .long 0xe19
+ 14699 3056 03 .byte 0x3
+ 14700 3057 91 .byte 0x91
+ 14701 3058 8055 .sleb128 -5504
+ 14702 305a 31 .uleb128 0x31
+ 14703 305b 0D0E0000 .long 0xe0d
+ 14704 305f 03 .byte 0x3
+ 14705 3060 91 .byte 0x91
+ 14706 3061 9055 .sleb128 -5488
+ 14707 3063 34 .uleb128 0x34
+ 14708 3064 260E0000 .long 0xe26
+ 14709 3068 00000000 .quad .LBB1030
+ 14709 00000000
+ 14710 3070 00000000 .quad .LBE1030
+ 14710 00000000
+ 14711 3078 03 .byte 0x3
+ 14712 3079 7501 .value 0x175
+ 14713 307b 31 .uleb128 0x31
+ 14714 307c 440E0000 .long 0xe44
+ 14715 3080 03 .byte 0x3
+ 14716 3081 91 .byte 0x91
+ 14717 3082 A055 .sleb128 -5472
+ 14718 3084 31 .uleb128 0x31
+ 14719 3085 380E0000 .long 0xe38
+ 14720 3089 03 .byte 0x3
+ 14721 308a 91 .byte 0x91
+ 14722 308b B055 .sleb128 -5456
+ 14723 308d 00 .byte 0x0
+ 14724 308e 00 .byte 0x0
+ 14725 308f 00 .byte 0x0
+ 14726 3090 00 .byte 0x0
+ 14727 3091 34 .uleb128 0x34
+ 14728 3092 BA0D0000 .long 0xdba
+ 14729 3096 00000000 .quad .LBB1032
+ 14729 00000000
+ 14730 309e 00000000 .quad .LBE1032
+ 14730 00000000
+ 14731 30a6 03 .byte 0x3
+ 14732 30a7 2106 .value 0x621
+ 14733 30a9 31 .uleb128 0x31
+ 14734 30aa CC0D0000 .long 0xdcc
+ 14735 30ae 03 .byte 0x3
+ 14736 30af 91 .byte 0x91
+ 14737 30b0 C055 .sleb128 -5440
+ 14738 30b2 32 .uleb128 0x32
+ 14739 30b3 00000000 .quad .LBB1033
+ 14739 00000000
+ 14740 30bb 00000000 .quad .LBE1033
+
GAS LISTING /tmp/ccPaCTqg.s page 414
+
+
+ 14740 00000000
+ 14741 30c3 33 .uleb128 0x33
+ 14742 30c4 D80D0000 .long 0xdd8
+ 14743 30c8 09 .byte 0x9
+ 14744 30c9 03 .byte 0x3
+ 14745 30ca 00000000 .quad mask.8002
+ 14745 00000000
+ 14746 30d2 34 .uleb128 0x34
+ 14747 30d3 FB0D0000 .long 0xdfb
+ 14748 30d7 00000000 .quad .LBB1034
+ 14748 00000000
+ 14749 30df 00000000 .quad .LBE1034
+ 14749 00000000
+ 14750 30e7 03 .byte 0x3
+ 14751 30e8 FE04 .value 0x4fe
+ 14752 30ea 31 .uleb128 0x31
+ 14753 30eb 190E0000 .long 0xe19
+ 14754 30ef 03 .byte 0x3
+ 14755 30f0 91 .byte 0x91
+ 14756 30f1 D055 .sleb128 -5424
+ 14757 30f3 31 .uleb128 0x31
+ 14758 30f4 0D0E0000 .long 0xe0d
+ 14759 30f8 03 .byte 0x3
+ 14760 30f9 91 .byte 0x91
+ 14761 30fa E055 .sleb128 -5408
+ 14762 30fc 34 .uleb128 0x34
+ 14763 30fd 260E0000 .long 0xe26
+ 14764 3101 00000000 .quad .LBB1036
+ 14764 00000000
+ 14765 3109 00000000 .quad .LBE1036
+ 14765 00000000
+ 14766 3111 03 .byte 0x3
+ 14767 3112 7501 .value 0x175
+ 14768 3114 31 .uleb128 0x31
+ 14769 3115 440E0000 .long 0xe44
+ 14770 3119 03 .byte 0x3
+ 14771 311a 91 .byte 0x91
+ 14772 311b F055 .sleb128 -5392
+ 14773 311d 31 .uleb128 0x31
+ 14774 311e 380E0000 .long 0xe38
+ 14775 3122 03 .byte 0x3
+ 14776 3123 91 .byte 0x91
+ 14777 3124 8056 .sleb128 -5376
+ 14778 3126 00 .byte 0x0
+ 14779 3127 00 .byte 0x0
+ 14780 3128 00 .byte 0x0
+ 14781 3129 00 .byte 0x0
+ 14782 312a 00 .byte 0x0
+ 14783 312b 00 .byte 0x0
+ 14784 312c 30 .uleb128 0x30
+ 14785 312d 8F0D0000 .long 0xd8f
+ 14786 3131 00000000 .quad .LBB1038
+ 14786 00000000
+ 14787 3139 00000000 .quad .LBE1038
+ 14787 00000000
+ 14788 3141 03 .byte 0x3
+ 14789 3142 0007 .value 0x700
+
GAS LISTING /tmp/ccPaCTqg.s page 415
+
+
+ 14790 3144 40330000 .long 0x3340
+ 14791 3148 31 .uleb128 0x31
+ 14792 3149 A10D0000 .long 0xda1
+ 14793 314d 03 .byte 0x3
+ 14794 314e 91 .byte 0x91
+ 14795 314f 9056 .sleb128 -5360
+ 14796 3151 32 .uleb128 0x32
+ 14797 3152 00000000 .quad .LBB1039
+ 14797 00000000
+ 14798 315a 00000000 .quad .LBE1039
+ 14798 00000000
+ 14799 3162 33 .uleb128 0x33
+ 14800 3163 AD0D0000 .long 0xdad
+ 14801 3167 03 .byte 0x3
+ 14802 3168 76 .byte 0x76
+ 14803 3169 F04F .sleb128 -6160
+ 14804 316b 30 .uleb128 0x30
+ 14805 316c BA0D0000 .long 0xdba
+ 14806 3170 00000000 .quad .LBB1040
+ 14806 00000000
+ 14807 3178 00000000 .quad .LBE1040
+ 14807 00000000
+ 14808 3180 03 .byte 0x3
+ 14809 3181 1F06 .value 0x61f
+ 14810 3183 08320000 .long 0x3208
+ 14811 3187 31 .uleb128 0x31
+ 14812 3188 CC0D0000 .long 0xdcc
+ 14813 318c 03 .byte 0x3
+ 14814 318d 91 .byte 0x91
+ 14815 318e A056 .sleb128 -5344
+ 14816 3190 32 .uleb128 0x32
+ 14817 3191 00000000 .quad .LBB1041
+ 14817 00000000
+ 14818 3199 00000000 .quad .LBE1041
+ 14818 00000000
+ 14819 31a1 33 .uleb128 0x33
+ 14820 31a2 D80D0000 .long 0xdd8
+ 14821 31a6 09 .byte 0x9
+ 14822 31a7 03 .byte 0x3
+ 14823 31a8 00000000 .quad mask.8002
+ 14823 00000000
+ 14824 31b0 34 .uleb128 0x34
+ 14825 31b1 FB0D0000 .long 0xdfb
+ 14826 31b5 00000000 .quad .LBB1042
+ 14826 00000000
+ 14827 31bd 00000000 .quad .LBE1042
+ 14827 00000000
+ 14828 31c5 03 .byte 0x3
+ 14829 31c6 FE04 .value 0x4fe
+ 14830 31c8 31 .uleb128 0x31
+ 14831 31c9 190E0000 .long 0xe19
+ 14832 31cd 03 .byte 0x3
+ 14833 31ce 91 .byte 0x91
+ 14834 31cf B056 .sleb128 -5328
+ 14835 31d1 31 .uleb128 0x31
+ 14836 31d2 0D0E0000 .long 0xe0d
+ 14837 31d6 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 416
+
+
+ 14838 31d7 91 .byte 0x91
+ 14839 31d8 C056 .sleb128 -5312
+ 14840 31da 34 .uleb128 0x34
+ 14841 31db 260E0000 .long 0xe26
+ 14842 31df 00000000 .quad .LBB1044
+ 14842 00000000
+ 14843 31e7 00000000 .quad .LBE1044
+ 14843 00000000
+ 14844 31ef 03 .byte 0x3
+ 14845 31f0 7501 .value 0x175
+ 14846 31f2 31 .uleb128 0x31
+ 14847 31f3 440E0000 .long 0xe44
+ 14848 31f7 03 .byte 0x3
+ 14849 31f8 91 .byte 0x91
+ 14850 31f9 D056 .sleb128 -5296
+ 14851 31fb 31 .uleb128 0x31
+ 14852 31fc 380E0000 .long 0xe38
+ 14853 3200 03 .byte 0x3
+ 14854 3201 91 .byte 0x91
+ 14855 3202 E056 .sleb128 -5280
+ 14856 3204 00 .byte 0x0
+ 14857 3205 00 .byte 0x0
+ 14858 3206 00 .byte 0x0
+ 14859 3207 00 .byte 0x0
+ 14860 3208 30 .uleb128 0x30
+ 14861 3209 BA0D0000 .long 0xdba
+ 14862 320d 00000000 .quad .LBB1046
+ 14862 00000000
+ 14863 3215 00000000 .quad .LBE1046
+ 14863 00000000
+ 14864 321d 03 .byte 0x3
+ 14865 321e 2006 .value 0x620
+ 14866 3220 A5320000 .long 0x32a5
+ 14867 3224 31 .uleb128 0x31
+ 14868 3225 CC0D0000 .long 0xdcc
+ 14869 3229 03 .byte 0x3
+ 14870 322a 91 .byte 0x91
+ 14871 322b F056 .sleb128 -5264
+ 14872 322d 32 .uleb128 0x32
+ 14873 322e 00000000 .quad .LBB1047
+ 14873 00000000
+ 14874 3236 00000000 .quad .LBE1047
+ 14874 00000000
+ 14875 323e 33 .uleb128 0x33
+ 14876 323f D80D0000 .long 0xdd8
+ 14877 3243 09 .byte 0x9
+ 14878 3244 03 .byte 0x3
+ 14879 3245 00000000 .quad mask.8002
+ 14879 00000000
+ 14880 324d 34 .uleb128 0x34
+ 14881 324e FB0D0000 .long 0xdfb
+ 14882 3252 00000000 .quad .LBB1048
+ 14882 00000000
+ 14883 325a 00000000 .quad .LBE1048
+ 14883 00000000
+ 14884 3262 03 .byte 0x3
+ 14885 3263 FE04 .value 0x4fe
+
GAS LISTING /tmp/ccPaCTqg.s page 417
+
+
+ 14886 3265 31 .uleb128 0x31
+ 14887 3266 190E0000 .long 0xe19
+ 14888 326a 03 .byte 0x3
+ 14889 326b 91 .byte 0x91
+ 14890 326c 8057 .sleb128 -5248
+ 14891 326e 31 .uleb128 0x31
+ 14892 326f 0D0E0000 .long 0xe0d
+ 14893 3273 03 .byte 0x3
+ 14894 3274 91 .byte 0x91
+ 14895 3275 9057 .sleb128 -5232
+ 14896 3277 34 .uleb128 0x34
+ 14897 3278 260E0000 .long 0xe26
+ 14898 327c 00000000 .quad .LBB1050
+ 14898 00000000
+ 14899 3284 00000000 .quad .LBE1050
+ 14899 00000000
+ 14900 328c 03 .byte 0x3
+ 14901 328d 7501 .value 0x175
+ 14902 328f 31 .uleb128 0x31
+ 14903 3290 440E0000 .long 0xe44
+ 14904 3294 03 .byte 0x3
+ 14905 3295 91 .byte 0x91
+ 14906 3296 A057 .sleb128 -5216
+ 14907 3298 31 .uleb128 0x31
+ 14908 3299 380E0000 .long 0xe38
+ 14909 329d 03 .byte 0x3
+ 14910 329e 91 .byte 0x91
+ 14911 329f B057 .sleb128 -5200
+ 14912 32a1 00 .byte 0x0
+ 14913 32a2 00 .byte 0x0
+ 14914 32a3 00 .byte 0x0
+ 14915 32a4 00 .byte 0x0
+ 14916 32a5 34 .uleb128 0x34
+ 14917 32a6 BA0D0000 .long 0xdba
+ 14918 32aa 00000000 .quad .LBB1052
+ 14918 00000000
+ 14919 32b2 00000000 .quad .LBE1052
+ 14919 00000000
+ 14920 32ba 03 .byte 0x3
+ 14921 32bb 2106 .value 0x621
+ 14922 32bd 31 .uleb128 0x31
+ 14923 32be CC0D0000 .long 0xdcc
+ 14924 32c2 03 .byte 0x3
+ 14925 32c3 91 .byte 0x91
+ 14926 32c4 C057 .sleb128 -5184
+ 14927 32c6 32 .uleb128 0x32
+ 14928 32c7 00000000 .quad .LBB1053
+ 14928 00000000
+ 14929 32cf 00000000 .quad .LBE1053
+ 14929 00000000
+ 14930 32d7 33 .uleb128 0x33
+ 14931 32d8 D80D0000 .long 0xdd8
+ 14932 32dc 09 .byte 0x9
+ 14933 32dd 03 .byte 0x3
+ 14934 32de 00000000 .quad mask.8002
+ 14934 00000000
+ 14935 32e6 34 .uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s page 418
+
+
+ 14936 32e7 FB0D0000 .long 0xdfb
+ 14937 32eb 00000000 .quad .LBB1054
+ 14937 00000000
+ 14938 32f3 00000000 .quad .LBE1054
+ 14938 00000000
+ 14939 32fb 03 .byte 0x3
+ 14940 32fc FE04 .value 0x4fe
+ 14941 32fe 31 .uleb128 0x31
+ 14942 32ff 190E0000 .long 0xe19
+ 14943 3303 03 .byte 0x3
+ 14944 3304 91 .byte 0x91
+ 14945 3305 D057 .sleb128 -5168
+ 14946 3307 31 .uleb128 0x31
+ 14947 3308 0D0E0000 .long 0xe0d
+ 14948 330c 03 .byte 0x3
+ 14949 330d 91 .byte 0x91
+ 14950 330e E057 .sleb128 -5152
+ 14951 3310 34 .uleb128 0x34
+ 14952 3311 260E0000 .long 0xe26
+ 14953 3315 00000000 .quad .LBB1056
+ 14953 00000000
+ 14954 331d 00000000 .quad .LBE1056
+ 14954 00000000
+ 14955 3325 03 .byte 0x3
+ 14956 3326 7501 .value 0x175
+ 14957 3328 31 .uleb128 0x31
+ 14958 3329 440E0000 .long 0xe44
+ 14959 332d 03 .byte 0x3
+ 14960 332e 91 .byte 0x91
+ 14961 332f F057 .sleb128 -5136
+ 14962 3331 31 .uleb128 0x31
+ 14963 3332 380E0000 .long 0xe38
+ 14964 3336 03 .byte 0x3
+ 14965 3337 91 .byte 0x91
+ 14966 3338 8058 .sleb128 -5120
+ 14967 333a 00 .byte 0x0
+ 14968 333b 00 .byte 0x0
+ 14969 333c 00 .byte 0x0
+ 14970 333d 00 .byte 0x0
+ 14971 333e 00 .byte 0x0
+ 14972 333f 00 .byte 0x0
+ 14973 3340 30 .uleb128 0x30
+ 14974 3341 450D0000 .long 0xd45
+ 14975 3345 00000000 .quad .LBB1058
+ 14975 00000000
+ 14976 334d 00000000 .quad .LBE1058
+ 14976 00000000
+ 14977 3355 03 .byte 0x3
+ 14978 3356 0107 .value 0x701
+ 14979 3358 91330000 .long 0x3391
+ 14980 335c 31 .uleb128 0x31
+ 14981 335d 570D0000 .long 0xd57
+ 14982 3361 03 .byte 0x3
+ 14983 3362 91 .byte 0x91
+ 14984 3363 9058 .sleb128 -5104
+ 14985 3365 34 .uleb128 0x34
+ 14986 3366 640D0000 .long 0xd64
+
GAS LISTING /tmp/ccPaCTqg.s page 419
+
+
+ 14987 336a 00000000 .quad .LBB1060
+ 14987 00000000
+ 14988 3372 00000000 .quad .LBE1060
+ 14988 00000000
+ 14989 337a 03 .byte 0x3
+ 14990 337b 4905 .value 0x549
+ 14991 337d 31 .uleb128 0x31
+ 14992 337e 820D0000 .long 0xd82
+ 14993 3382 03 .byte 0x3
+ 14994 3383 91 .byte 0x91
+ 14995 3384 AC58 .sleb128 -5076
+ 14996 3386 31 .uleb128 0x31
+ 14997 3387 760D0000 .long 0xd76
+ 14998 338b 03 .byte 0x3
+ 14999 338c 91 .byte 0x91
+ 15000 338d B058 .sleb128 -5072
+ 15001 338f 00 .byte 0x0
+ 15002 3390 00 .byte 0x0
+ 15003 3391 30 .uleb128 0x30
+ 15004 3392 142C0000 .long 0x2c14
+ 15005 3396 00000000 .quad .LBB1062
+ 15005 00000000
+ 15006 339e 00000000 .quad .LBE1062
+ 15006 00000000
+ 15007 33a6 03 .byte 0x3
+ 15008 33a7 0307 .value 0x703
+ 15009 33a9 F4330000 .long 0x33f4
+ 15010 33ad 31 .uleb128 0x31
+ 15011 33ae 302C0000 .long 0x2c30
+ 15012 33b2 03 .byte 0x3
+ 15013 33b3 91 .byte 0x91
+ 15014 33b4 C058 .sleb128 -5056
+ 15015 33b6 31 .uleb128 0x31
+ 15016 33b7 262C0000 .long 0x2c26
+ 15017 33bb 03 .byte 0x3
+ 15018 33bc 91 .byte 0x91
+ 15019 33bd D058 .sleb128 -5040
+ 15020 33bf 34 .uleb128 0x34
+ 15021 33c0 3B2C0000 .long 0x2c3b
+ 15022 33c4 00000000 .quad .LBB1064
+ 15022 00000000
+ 15023 33cc 00000000 .quad .LBE1064
+ 15023 00000000
+ 15024 33d4 03 .byte 0x3
+ 15025 33d5 BA05 .value 0x5ba
+ 15026 33d7 31 .uleb128 0x31
+ 15027 33d8 652C0000 .long 0x2c65
+ 15028 33dc 03 .byte 0x3
+ 15029 33dd 91 .byte 0x91
+ 15030 33de EC58 .sleb128 -5012
+ 15031 33e0 31 .uleb128 0x31
+ 15032 33e1 592C0000 .long 0x2c59
+ 15033 33e5 03 .byte 0x3
+ 15034 33e6 91 .byte 0x91
+ 15035 33e7 F058 .sleb128 -5008
+ 15036 33e9 31 .uleb128 0x31
+ 15037 33ea 4D2C0000 .long 0x2c4d
+
GAS LISTING /tmp/ccPaCTqg.s page 420
+
+
+ 15038 33ee 03 .byte 0x3
+ 15039 33ef 91 .byte 0x91
+ 15040 33f0 8059 .sleb128 -4992
+ 15041 33f2 00 .byte 0x0
+ 15042 33f3 00 .byte 0x0
+ 15043 33f4 30 .uleb128 0x30
+ 15044 33f5 722C0000 .long 0x2c72
+ 15045 33f9 00000000 .quad .LBB1066
+ 15045 00000000
+ 15046 3401 00000000 .quad .LBE1066
+ 15046 00000000
+ 15047 3409 03 .byte 0x3
+ 15048 340a 0607 .value 0x706
+ 15049 340c 57340000 .long 0x3457
+ 15050 3410 31 .uleb128 0x31
+ 15051 3411 8E2C0000 .long 0x2c8e
+ 15052 3415 03 .byte 0x3
+ 15053 3416 91 .byte 0x91
+ 15054 3417 9059 .sleb128 -4976
+ 15055 3419 31 .uleb128 0x31
+ 15056 341a 842C0000 .long 0x2c84
+ 15057 341e 03 .byte 0x3
+ 15058 341f 91 .byte 0x91
+ 15059 3420 A059 .sleb128 -4960
+ 15060 3422 34 .uleb128 0x34
+ 15061 3423 3B2C0000 .long 0x2c3b
+ 15062 3427 00000000 .quad .LBB1068
+ 15062 00000000
+ 15063 342f 00000000 .quad .LBE1068
+ 15063 00000000
+ 15064 3437 03 .byte 0x3
+ 15065 3438 DA05 .value 0x5da
+ 15066 343a 31 .uleb128 0x31
+ 15067 343b 652C0000 .long 0x2c65
+ 15068 343f 03 .byte 0x3
+ 15069 3440 91 .byte 0x91
+ 15070 3441 BC59 .sleb128 -4932
+ 15071 3443 31 .uleb128 0x31
+ 15072 3444 592C0000 .long 0x2c59
+ 15073 3448 03 .byte 0x3
+ 15074 3449 91 .byte 0x91
+ 15075 344a C059 .sleb128 -4928
+ 15076 344c 31 .uleb128 0x31
+ 15077 344d 4D2C0000 .long 0x2c4d
+ 15078 3451 03 .byte 0x3
+ 15079 3452 91 .byte 0x91
+ 15080 3453 D059 .sleb128 -4912
+ 15081 3455 00 .byte 0x0
+ 15082 3456 00 .byte 0x0
+ 15083 3457 30 .uleb128 0x30
+ 15084 3458 8F0D0000 .long 0xd8f
+ 15085 345c 00000000 .quad .LBB1070
+ 15085 00000000
+ 15086 3464 00000000 .quad .LBE1070
+ 15086 00000000
+ 15087 346c 03 .byte 0x3
+ 15088 346d 0A07 .value 0x70a
+
GAS LISTING /tmp/ccPaCTqg.s page 421
+
+
+ 15089 346f 6B360000 .long 0x366b
+ 15090 3473 31 .uleb128 0x31
+ 15091 3474 A10D0000 .long 0xda1
+ 15092 3478 03 .byte 0x3
+ 15093 3479 91 .byte 0x91
+ 15094 347a E059 .sleb128 -4896
+ 15095 347c 32 .uleb128 0x32
+ 15096 347d 00000000 .quad .LBB1071
+ 15096 00000000
+ 15097 3485 00000000 .quad .LBE1071
+ 15097 00000000
+ 15098 348d 33 .uleb128 0x33
+ 15099 348e AD0D0000 .long 0xdad
+ 15100 3492 03 .byte 0x3
+ 15101 3493 76 .byte 0x76
+ 15102 3494 8050 .sleb128 -6144
+ 15103 3496 30 .uleb128 0x30
+ 15104 3497 BA0D0000 .long 0xdba
+ 15105 349b 00000000 .quad .LBB1072
+ 15105 00000000
+ 15106 34a3 00000000 .quad .LBE1072
+ 15106 00000000
+ 15107 34ab 03 .byte 0x3
+ 15108 34ac 1F06 .value 0x61f
+ 15109 34ae 33350000 .long 0x3533
+ 15110 34b2 31 .uleb128 0x31
+ 15111 34b3 CC0D0000 .long 0xdcc
+ 15112 34b7 03 .byte 0x3
+ 15113 34b8 91 .byte 0x91
+ 15114 34b9 F059 .sleb128 -4880
+ 15115 34bb 32 .uleb128 0x32
+ 15116 34bc 00000000 .quad .LBB1073
+ 15116 00000000
+ 15117 34c4 00000000 .quad .LBE1073
+ 15117 00000000
+ 15118 34cc 33 .uleb128 0x33
+ 15119 34cd D80D0000 .long 0xdd8
+ 15120 34d1 09 .byte 0x9
+ 15121 34d2 03 .byte 0x3
+ 15122 34d3 00000000 .quad mask.8002
+ 15122 00000000
+ 15123 34db 34 .uleb128 0x34
+ 15124 34dc FB0D0000 .long 0xdfb
+ 15125 34e0 00000000 .quad .LBB1074
+ 15125 00000000
+ 15126 34e8 00000000 .quad .LBE1074
+ 15126 00000000
+ 15127 34f0 03 .byte 0x3
+ 15128 34f1 FE04 .value 0x4fe
+ 15129 34f3 31 .uleb128 0x31
+ 15130 34f4 190E0000 .long 0xe19
+ 15131 34f8 03 .byte 0x3
+ 15132 34f9 91 .byte 0x91
+ 15133 34fa 805A .sleb128 -4864
+ 15134 34fc 31 .uleb128 0x31
+ 15135 34fd 0D0E0000 .long 0xe0d
+ 15136 3501 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 422
+
+
+ 15137 3502 91 .byte 0x91
+ 15138 3503 905A .sleb128 -4848
+ 15139 3505 34 .uleb128 0x34
+ 15140 3506 260E0000 .long 0xe26
+ 15141 350a 00000000 .quad .LBB1076
+ 15141 00000000
+ 15142 3512 00000000 .quad .LBE1076
+ 15142 00000000
+ 15143 351a 03 .byte 0x3
+ 15144 351b 7501 .value 0x175
+ 15145 351d 31 .uleb128 0x31
+ 15146 351e 440E0000 .long 0xe44
+ 15147 3522 03 .byte 0x3
+ 15148 3523 91 .byte 0x91
+ 15149 3524 A05A .sleb128 -4832
+ 15150 3526 31 .uleb128 0x31
+ 15151 3527 380E0000 .long 0xe38
+ 15152 352b 03 .byte 0x3
+ 15153 352c 91 .byte 0x91
+ 15154 352d B05A .sleb128 -4816
+ 15155 352f 00 .byte 0x0
+ 15156 3530 00 .byte 0x0
+ 15157 3531 00 .byte 0x0
+ 15158 3532 00 .byte 0x0
+ 15159 3533 30 .uleb128 0x30
+ 15160 3534 BA0D0000 .long 0xdba
+ 15161 3538 00000000 .quad .LBB1078
+ 15161 00000000
+ 15162 3540 00000000 .quad .LBE1078
+ 15162 00000000
+ 15163 3548 03 .byte 0x3
+ 15164 3549 2006 .value 0x620
+ 15165 354b D0350000 .long 0x35d0
+ 15166 354f 31 .uleb128 0x31
+ 15167 3550 CC0D0000 .long 0xdcc
+ 15168 3554 03 .byte 0x3
+ 15169 3555 91 .byte 0x91
+ 15170 3556 C05A .sleb128 -4800
+ 15171 3558 32 .uleb128 0x32
+ 15172 3559 00000000 .quad .LBB1079
+ 15172 00000000
+ 15173 3561 00000000 .quad .LBE1079
+ 15173 00000000
+ 15174 3569 33 .uleb128 0x33
+ 15175 356a D80D0000 .long 0xdd8
+ 15176 356e 09 .byte 0x9
+ 15177 356f 03 .byte 0x3
+ 15178 3570 00000000 .quad mask.8002
+ 15178 00000000
+ 15179 3578 34 .uleb128 0x34
+ 15180 3579 FB0D0000 .long 0xdfb
+ 15181 357d 00000000 .quad .LBB1080
+ 15181 00000000
+ 15182 3585 00000000 .quad .LBE1080
+ 15182 00000000
+ 15183 358d 03 .byte 0x3
+ 15184 358e FE04 .value 0x4fe
+
GAS LISTING /tmp/ccPaCTqg.s page 423
+
+
+ 15185 3590 31 .uleb128 0x31
+ 15186 3591 190E0000 .long 0xe19
+ 15187 3595 03 .byte 0x3
+ 15188 3596 91 .byte 0x91
+ 15189 3597 D05A .sleb128 -4784
+ 15190 3599 31 .uleb128 0x31
+ 15191 359a 0D0E0000 .long 0xe0d
+ 15192 359e 03 .byte 0x3
+ 15193 359f 91 .byte 0x91
+ 15194 35a0 E05A .sleb128 -4768
+ 15195 35a2 34 .uleb128 0x34
+ 15196 35a3 260E0000 .long 0xe26
+ 15197 35a7 00000000 .quad .LBB1082
+ 15197 00000000
+ 15198 35af 00000000 .quad .LBE1082
+ 15198 00000000
+ 15199 35b7 03 .byte 0x3
+ 15200 35b8 7501 .value 0x175
+ 15201 35ba 31 .uleb128 0x31
+ 15202 35bb 440E0000 .long 0xe44
+ 15203 35bf 03 .byte 0x3
+ 15204 35c0 91 .byte 0x91
+ 15205 35c1 F05A .sleb128 -4752
+ 15206 35c3 31 .uleb128 0x31
+ 15207 35c4 380E0000 .long 0xe38
+ 15208 35c8 03 .byte 0x3
+ 15209 35c9 91 .byte 0x91
+ 15210 35ca 805B .sleb128 -4736
+ 15211 35cc 00 .byte 0x0
+ 15212 35cd 00 .byte 0x0
+ 15213 35ce 00 .byte 0x0
+ 15214 35cf 00 .byte 0x0
+ 15215 35d0 34 .uleb128 0x34
+ 15216 35d1 BA0D0000 .long 0xdba
+ 15217 35d5 00000000 .quad .LBB1084
+ 15217 00000000
+ 15218 35dd 00000000 .quad .LBE1084
+ 15218 00000000
+ 15219 35e5 03 .byte 0x3
+ 15220 35e6 2106 .value 0x621
+ 15221 35e8 31 .uleb128 0x31
+ 15222 35e9 CC0D0000 .long 0xdcc
+ 15223 35ed 03 .byte 0x3
+ 15224 35ee 91 .byte 0x91
+ 15225 35ef 905B .sleb128 -4720
+ 15226 35f1 32 .uleb128 0x32
+ 15227 35f2 00000000 .quad .LBB1085
+ 15227 00000000
+ 15228 35fa 00000000 .quad .LBE1085
+ 15228 00000000
+ 15229 3602 33 .uleb128 0x33
+ 15230 3603 D80D0000 .long 0xdd8
+ 15231 3607 09 .byte 0x9
+ 15232 3608 03 .byte 0x3
+ 15233 3609 00000000 .quad mask.8002
+ 15233 00000000
+ 15234 3611 34 .uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s page 424
+
+
+ 15235 3612 FB0D0000 .long 0xdfb
+ 15236 3616 00000000 .quad .LBB1086
+ 15236 00000000
+ 15237 361e 00000000 .quad .LBE1086
+ 15237 00000000
+ 15238 3626 03 .byte 0x3
+ 15239 3627 FE04 .value 0x4fe
+ 15240 3629 31 .uleb128 0x31
+ 15241 362a 190E0000 .long 0xe19
+ 15242 362e 03 .byte 0x3
+ 15243 362f 91 .byte 0x91
+ 15244 3630 A05B .sleb128 -4704
+ 15245 3632 31 .uleb128 0x31
+ 15246 3633 0D0E0000 .long 0xe0d
+ 15247 3637 03 .byte 0x3
+ 15248 3638 91 .byte 0x91
+ 15249 3639 B05B .sleb128 -4688
+ 15250 363b 34 .uleb128 0x34
+ 15251 363c 260E0000 .long 0xe26
+ 15252 3640 00000000 .quad .LBB1088
+ 15252 00000000
+ 15253 3648 00000000 .quad .LBE1088
+ 15253 00000000
+ 15254 3650 03 .byte 0x3
+ 15255 3651 7501 .value 0x175
+ 15256 3653 31 .uleb128 0x31
+ 15257 3654 440E0000 .long 0xe44
+ 15258 3658 03 .byte 0x3
+ 15259 3659 91 .byte 0x91
+ 15260 365a C05B .sleb128 -4672
+ 15261 365c 31 .uleb128 0x31
+ 15262 365d 380E0000 .long 0xe38
+ 15263 3661 03 .byte 0x3
+ 15264 3662 91 .byte 0x91
+ 15265 3663 D05B .sleb128 -4656
+ 15266 3665 00 .byte 0x0
+ 15267 3666 00 .byte 0x0
+ 15268 3667 00 .byte 0x0
+ 15269 3668 00 .byte 0x0
+ 15270 3669 00 .byte 0x0
+ 15271 366a 00 .byte 0x0
+ 15272 366b 30 .uleb128 0x30
+ 15273 366c 8F0D0000 .long 0xd8f
+ 15274 3670 00000000 .quad .LBB1090
+ 15274 00000000
+ 15275 3678 00000000 .quad .LBE1090
+ 15275 00000000
+ 15276 3680 03 .byte 0x3
+ 15277 3681 0B07 .value 0x70b
+ 15278 3683 7F380000 .long 0x387f
+ 15279 3687 31 .uleb128 0x31
+ 15280 3688 A10D0000 .long 0xda1
+ 15281 368c 03 .byte 0x3
+ 15282 368d 91 .byte 0x91
+ 15283 368e E05B .sleb128 -4640
+ 15284 3690 32 .uleb128 0x32
+ 15285 3691 00000000 .quad .LBB1091
+
GAS LISTING /tmp/ccPaCTqg.s page 425
+
+
+ 15285 00000000
+ 15286 3699 00000000 .quad .LBE1091
+ 15286 00000000
+ 15287 36a1 33 .uleb128 0x33
+ 15288 36a2 AD0D0000 .long 0xdad
+ 15289 36a6 03 .byte 0x3
+ 15290 36a7 76 .byte 0x76
+ 15291 36a8 9050 .sleb128 -6128
+ 15292 36aa 30 .uleb128 0x30
+ 15293 36ab BA0D0000 .long 0xdba
+ 15294 36af 00000000 .quad .LBB1092
+ 15294 00000000
+ 15295 36b7 00000000 .quad .LBE1092
+ 15295 00000000
+ 15296 36bf 03 .byte 0x3
+ 15297 36c0 1F06 .value 0x61f
+ 15298 36c2 47370000 .long 0x3747
+ 15299 36c6 31 .uleb128 0x31
+ 15300 36c7 CC0D0000 .long 0xdcc
+ 15301 36cb 03 .byte 0x3
+ 15302 36cc 91 .byte 0x91
+ 15303 36cd F05B .sleb128 -4624
+ 15304 36cf 32 .uleb128 0x32
+ 15305 36d0 00000000 .quad .LBB1093
+ 15305 00000000
+ 15306 36d8 00000000 .quad .LBE1093
+ 15306 00000000
+ 15307 36e0 33 .uleb128 0x33
+ 15308 36e1 D80D0000 .long 0xdd8
+ 15309 36e5 09 .byte 0x9
+ 15310 36e6 03 .byte 0x3
+ 15311 36e7 00000000 .quad mask.8002
+ 15311 00000000
+ 15312 36ef 34 .uleb128 0x34
+ 15313 36f0 FB0D0000 .long 0xdfb
+ 15314 36f4 00000000 .quad .LBB1094
+ 15314 00000000
+ 15315 36fc 00000000 .quad .LBE1094
+ 15315 00000000
+ 15316 3704 03 .byte 0x3
+ 15317 3705 FE04 .value 0x4fe
+ 15318 3707 31 .uleb128 0x31
+ 15319 3708 190E0000 .long 0xe19
+ 15320 370c 03 .byte 0x3
+ 15321 370d 91 .byte 0x91
+ 15322 370e 805C .sleb128 -4608
+ 15323 3710 31 .uleb128 0x31
+ 15324 3711 0D0E0000 .long 0xe0d
+ 15325 3715 03 .byte 0x3
+ 15326 3716 91 .byte 0x91
+ 15327 3717 905C .sleb128 -4592
+ 15328 3719 34 .uleb128 0x34
+ 15329 371a 260E0000 .long 0xe26
+ 15330 371e 00000000 .quad .LBB1096
+ 15330 00000000
+ 15331 3726 00000000 .quad .LBE1096
+ 15331 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 426
+
+
+ 15332 372e 03 .byte 0x3
+ 15333 372f 7501 .value 0x175
+ 15334 3731 31 .uleb128 0x31
+ 15335 3732 440E0000 .long 0xe44
+ 15336 3736 03 .byte 0x3
+ 15337 3737 91 .byte 0x91
+ 15338 3738 A05C .sleb128 -4576
+ 15339 373a 31 .uleb128 0x31
+ 15340 373b 380E0000 .long 0xe38
+ 15341 373f 03 .byte 0x3
+ 15342 3740 91 .byte 0x91
+ 15343 3741 B05C .sleb128 -4560
+ 15344 3743 00 .byte 0x0
+ 15345 3744 00 .byte 0x0
+ 15346 3745 00 .byte 0x0
+ 15347 3746 00 .byte 0x0
+ 15348 3747 30 .uleb128 0x30
+ 15349 3748 BA0D0000 .long 0xdba
+ 15350 374c 00000000 .quad .LBB1098
+ 15350 00000000
+ 15351 3754 00000000 .quad .LBE1098
+ 15351 00000000
+ 15352 375c 03 .byte 0x3
+ 15353 375d 2006 .value 0x620
+ 15354 375f E4370000 .long 0x37e4
+ 15355 3763 31 .uleb128 0x31
+ 15356 3764 CC0D0000 .long 0xdcc
+ 15357 3768 03 .byte 0x3
+ 15358 3769 91 .byte 0x91
+ 15359 376a C05C .sleb128 -4544
+ 15360 376c 32 .uleb128 0x32
+ 15361 376d 00000000 .quad .LBB1099
+ 15361 00000000
+ 15362 3775 00000000 .quad .LBE1099
+ 15362 00000000
+ 15363 377d 33 .uleb128 0x33
+ 15364 377e D80D0000 .long 0xdd8
+ 15365 3782 09 .byte 0x9
+ 15366 3783 03 .byte 0x3
+ 15367 3784 00000000 .quad mask.8002
+ 15367 00000000
+ 15368 378c 34 .uleb128 0x34
+ 15369 378d FB0D0000 .long 0xdfb
+ 15370 3791 00000000 .quad .LBB1100
+ 15370 00000000
+ 15371 3799 00000000 .quad .LBE1100
+ 15371 00000000
+ 15372 37a1 03 .byte 0x3
+ 15373 37a2 FE04 .value 0x4fe
+ 15374 37a4 31 .uleb128 0x31
+ 15375 37a5 190E0000 .long 0xe19
+ 15376 37a9 03 .byte 0x3
+ 15377 37aa 91 .byte 0x91
+ 15378 37ab D05C .sleb128 -4528
+ 15379 37ad 31 .uleb128 0x31
+ 15380 37ae 0D0E0000 .long 0xe0d
+ 15381 37b2 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 427
+
+
+ 15382 37b3 91 .byte 0x91
+ 15383 37b4 E05C .sleb128 -4512
+ 15384 37b6 34 .uleb128 0x34
+ 15385 37b7 260E0000 .long 0xe26
+ 15386 37bb 00000000 .quad .LBB1102
+ 15386 00000000
+ 15387 37c3 00000000 .quad .LBE1102
+ 15387 00000000
+ 15388 37cb 03 .byte 0x3
+ 15389 37cc 7501 .value 0x175
+ 15390 37ce 31 .uleb128 0x31
+ 15391 37cf 440E0000 .long 0xe44
+ 15392 37d3 03 .byte 0x3
+ 15393 37d4 91 .byte 0x91
+ 15394 37d5 F05C .sleb128 -4496
+ 15395 37d7 31 .uleb128 0x31
+ 15396 37d8 380E0000 .long 0xe38
+ 15397 37dc 03 .byte 0x3
+ 15398 37dd 91 .byte 0x91
+ 15399 37de 805D .sleb128 -4480
+ 15400 37e0 00 .byte 0x0
+ 15401 37e1 00 .byte 0x0
+ 15402 37e2 00 .byte 0x0
+ 15403 37e3 00 .byte 0x0
+ 15404 37e4 34 .uleb128 0x34
+ 15405 37e5 BA0D0000 .long 0xdba
+ 15406 37e9 00000000 .quad .LBB1104
+ 15406 00000000
+ 15407 37f1 00000000 .quad .LBE1104
+ 15407 00000000
+ 15408 37f9 03 .byte 0x3
+ 15409 37fa 2106 .value 0x621
+ 15410 37fc 31 .uleb128 0x31
+ 15411 37fd CC0D0000 .long 0xdcc
+ 15412 3801 03 .byte 0x3
+ 15413 3802 91 .byte 0x91
+ 15414 3803 905D .sleb128 -4464
+ 15415 3805 32 .uleb128 0x32
+ 15416 3806 00000000 .quad .LBB1105
+ 15416 00000000
+ 15417 380e 00000000 .quad .LBE1105
+ 15417 00000000
+ 15418 3816 33 .uleb128 0x33
+ 15419 3817 D80D0000 .long 0xdd8
+ 15420 381b 09 .byte 0x9
+ 15421 381c 03 .byte 0x3
+ 15422 381d 00000000 .quad mask.8002
+ 15422 00000000
+ 15423 3825 34 .uleb128 0x34
+ 15424 3826 FB0D0000 .long 0xdfb
+ 15425 382a 00000000 .quad .LBB1106
+ 15425 00000000
+ 15426 3832 00000000 .quad .LBE1106
+ 15426 00000000
+ 15427 383a 03 .byte 0x3
+ 15428 383b FE04 .value 0x4fe
+ 15429 383d 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 428
+
+
+ 15430 383e 190E0000 .long 0xe19
+ 15431 3842 03 .byte 0x3
+ 15432 3843 91 .byte 0x91
+ 15433 3844 A05D .sleb128 -4448
+ 15434 3846 31 .uleb128 0x31
+ 15435 3847 0D0E0000 .long 0xe0d
+ 15436 384b 03 .byte 0x3
+ 15437 384c 91 .byte 0x91
+ 15438 384d B05D .sleb128 -4432
+ 15439 384f 34 .uleb128 0x34
+ 15440 3850 260E0000 .long 0xe26
+ 15441 3854 00000000 .quad .LBB1108
+ 15441 00000000
+ 15442 385c 00000000 .quad .LBE1108
+ 15442 00000000
+ 15443 3864 03 .byte 0x3
+ 15444 3865 7501 .value 0x175
+ 15445 3867 31 .uleb128 0x31
+ 15446 3868 440E0000 .long 0xe44
+ 15447 386c 03 .byte 0x3
+ 15448 386d 91 .byte 0x91
+ 15449 386e C05D .sleb128 -4416
+ 15450 3870 31 .uleb128 0x31
+ 15451 3871 380E0000 .long 0xe38
+ 15452 3875 03 .byte 0x3
+ 15453 3876 91 .byte 0x91
+ 15454 3877 D05D .sleb128 -4400
+ 15455 3879 00 .byte 0x0
+ 15456 387a 00 .byte 0x0
+ 15457 387b 00 .byte 0x0
+ 15458 387c 00 .byte 0x0
+ 15459 387d 00 .byte 0x0
+ 15460 387e 00 .byte 0x0
+ 15461 387f 30 .uleb128 0x30
+ 15462 3880 E30C0000 .long 0xce3
+ 15463 3884 00000000 .quad .LBB1110
+ 15463 00000000
+ 15464 388c 00000000 .quad .LBE1110
+ 15464 00000000
+ 15465 3894 03 .byte 0x3
+ 15466 3895 0C07 .value 0x70c
+ 15467 3897 45390000 .long 0x3945
+ 15468 389b 31 .uleb128 0x31
+ 15469 389c 010D0000 .long 0xd01
+ 15470 38a0 03 .byte 0x3
+ 15471 38a1 91 .byte 0x91
+ 15472 38a2 EC5D .sleb128 -4372
+ 15473 38a4 31 .uleb128 0x31
+ 15474 38a5 F50C0000 .long 0xcf5
+ 15475 38a9 03 .byte 0x3
+ 15476 38aa 91 .byte 0x91
+ 15477 38ab F05D .sleb128 -4368
+ 15478 38ad 32 .uleb128 0x32
+ 15479 38ae 00000000 .quad .LBB1111
+ 15479 00000000
+ 15480 38b6 00000000 .quad .LBE1111
+ 15480 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 429
+
+
+ 15481 38be 33 .uleb128 0x33
+ 15482 38bf 0D0D0000 .long 0xd0d
+ 15483 38c3 03 .byte 0x3
+ 15484 38c4 76 .byte 0x76
+ 15485 38c5 A050 .sleb128 -6112
+ 15486 38c7 30 .uleb128 0x30
+ 15487 38c8 1A0D0000 .long 0xd1a
+ 15488 38cc 00000000 .quad .LBB1112
+ 15488 00000000
+ 15489 38d4 00000000 .quad .LBE1112
+ 15489 00000000
+ 15490 38dc 03 .byte 0x3
+ 15491 38dd 8A06 .value 0x68a
+ 15492 38df F6380000 .long 0x38f6
+ 15493 38e3 31 .uleb128 0x31
+ 15494 38e4 380D0000 .long 0xd38
+ 15495 38e8 03 .byte 0x3
+ 15496 38e9 91 .byte 0x91
+ 15497 38ea 8C5E .sleb128 -4340
+ 15498 38ec 31 .uleb128 0x31
+ 15499 38ed 2C0D0000 .long 0xd2c
+ 15500 38f1 03 .byte 0x3
+ 15501 38f2 91 .byte 0x91
+ 15502 38f3 905E .sleb128 -4336
+ 15503 38f5 00 .byte 0x0
+ 15504 38f6 34 .uleb128 0x34
+ 15505 38f7 450D0000 .long 0xd45
+ 15506 38fb 00000000 .quad .LBB1114
+ 15506 00000000
+ 15507 3903 00000000 .quad .LBE1114
+ 15507 00000000
+ 15508 390b 03 .byte 0x3
+ 15509 390c 8B06 .value 0x68b
+ 15510 390e 31 .uleb128 0x31
+ 15511 390f 570D0000 .long 0xd57
+ 15512 3913 03 .byte 0x3
+ 15513 3914 91 .byte 0x91
+ 15514 3915 A05E .sleb128 -4320
+ 15515 3917 34 .uleb128 0x34
+ 15516 3918 640D0000 .long 0xd64
+ 15517 391c 00000000 .quad .LBB1116
+ 15517 00000000
+ 15518 3924 00000000 .quad .LBE1116
+ 15518 00000000
+ 15519 392c 03 .byte 0x3
+ 15520 392d 4905 .value 0x549
+ 15521 392f 31 .uleb128 0x31
+ 15522 3930 820D0000 .long 0xd82
+ 15523 3934 03 .byte 0x3
+ 15524 3935 91 .byte 0x91
+ 15525 3936 BC5E .sleb128 -4292
+ 15526 3938 31 .uleb128 0x31
+ 15527 3939 760D0000 .long 0xd76
+ 15528 393d 03 .byte 0x3
+ 15529 393e 91 .byte 0x91
+ 15530 393f C05E .sleb128 -4288
+ 15531 3941 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 430
+
+
+ 15532 3942 00 .byte 0x0
+ 15533 3943 00 .byte 0x0
+ 15534 3944 00 .byte 0x0
+ 15535 3945 30 .uleb128 0x30
+ 15536 3946 450D0000 .long 0xd45
+ 15537 394a 00000000 .quad .LBB1118
+ 15537 00000000
+ 15538 3952 00000000 .quad .LBE1118
+ 15538 00000000
+ 15539 395a 03 .byte 0x3
+ 15540 395b 1007 .value 0x710
+ 15541 395d 96390000 .long 0x3996
+ 15542 3961 31 .uleb128 0x31
+ 15543 3962 570D0000 .long 0xd57
+ 15544 3966 03 .byte 0x3
+ 15545 3967 91 .byte 0x91
+ 15546 3968 D05E .sleb128 -4272
+ 15547 396a 34 .uleb128 0x34
+ 15548 396b 640D0000 .long 0xd64
+ 15549 396f 00000000 .quad .LBB1120
+ 15549 00000000
+ 15550 3977 00000000 .quad .LBE1120
+ 15550 00000000
+ 15551 397f 03 .byte 0x3
+ 15552 3980 4905 .value 0x549
+ 15553 3982 31 .uleb128 0x31
+ 15554 3983 820D0000 .long 0xd82
+ 15555 3987 03 .byte 0x3
+ 15556 3988 91 .byte 0x91
+ 15557 3989 EC5E .sleb128 -4244
+ 15558 398b 31 .uleb128 0x31
+ 15559 398c 760D0000 .long 0xd76
+ 15560 3990 03 .byte 0x3
+ 15561 3991 91 .byte 0x91
+ 15562 3992 F05E .sleb128 -4240
+ 15563 3994 00 .byte 0x0
+ 15564 3995 00 .byte 0x0
+ 15565 3996 30 .uleb128 0x30
+ 15566 3997 BE2B0000 .long 0x2bbe
+ 15567 399b 00000000 .quad .LBB1122
+ 15567 00000000
+ 15568 39a3 00000000 .quad .LBE1122
+ 15568 00000000
+ 15569 39ab 03 .byte 0x3
+ 15570 39ac 1707 .value 0x717
+ 15571 39ae 5C3A0000 .long 0x3a5c
+ 15572 39b2 31 .uleb128 0x31
+ 15573 39b3 DC2B0000 .long 0x2bdc
+ 15574 39b7 03 .byte 0x3
+ 15575 39b8 91 .byte 0x91
+ 15576 39b9 8C5F .sleb128 -4212
+ 15577 39bb 31 .uleb128 0x31
+ 15578 39bc D02B0000 .long 0x2bd0
+ 15579 39c0 03 .byte 0x3
+ 15580 39c1 91 .byte 0x91
+ 15581 39c2 905F .sleb128 -4208
+ 15582 39c4 32 .uleb128 0x32
+
GAS LISTING /tmp/ccPaCTqg.s page 431
+
+
+ 15583 39c5 00000000 .quad .LBB1123
+ 15583 00000000
+ 15584 39cd 00000000 .quad .LBE1123
+ 15584 00000000
+ 15585 39d5 33 .uleb128 0x33
+ 15586 39d6 E82B0000 .long 0x2be8
+ 15587 39da 03 .byte 0x3
+ 15588 39db 76 .byte 0x76
+ 15589 39dc B050 .sleb128 -6096
+ 15590 39de 30 .uleb128 0x30
+ 15591 39df 1A0D0000 .long 0xd1a
+ 15592 39e3 00000000 .quad .LBB1124
+ 15592 00000000
+ 15593 39eb 00000000 .quad .LBE1124
+ 15593 00000000
+ 15594 39f3 03 .byte 0x3
+ 15595 39f4 5606 .value 0x656
+ 15596 39f6 0D3A0000 .long 0x3a0d
+ 15597 39fa 31 .uleb128 0x31
+ 15598 39fb 380D0000 .long 0xd38
+ 15599 39ff 03 .byte 0x3
+ 15600 3a00 91 .byte 0x91
+ 15601 3a01 AC5F .sleb128 -4180
+ 15602 3a03 31 .uleb128 0x31
+ 15603 3a04 2C0D0000 .long 0xd2c
+ 15604 3a08 03 .byte 0x3
+ 15605 3a09 91 .byte 0x91
+ 15606 3a0a B05F .sleb128 -4176
+ 15607 3a0c 00 .byte 0x0
+ 15608 3a0d 34 .uleb128 0x34
+ 15609 3a0e F52B0000 .long 0x2bf5
+ 15610 3a12 00000000 .quad .LBB1126
+ 15610 00000000
+ 15611 3a1a 00000000 .quad .LBE1126
+ 15611 00000000
+ 15612 3a22 03 .byte 0x3
+ 15613 3a23 5706 .value 0x657
+ 15614 3a25 31 .uleb128 0x31
+ 15615 3a26 072C0000 .long 0x2c07
+ 15616 3a2a 03 .byte 0x3
+ 15617 3a2b 91 .byte 0x91
+ 15618 3a2c C05F .sleb128 -4160
+ 15619 3a2e 34 .uleb128 0x34
+ 15620 3a2f 640D0000 .long 0xd64
+ 15621 3a33 00000000 .quad .LBB1128
+ 15621 00000000
+ 15622 3a3b 00000000 .quad .LBE1128
+ 15622 00000000
+ 15623 3a43 03 .byte 0x3
+ 15624 3a44 8105 .value 0x581
+ 15625 3a46 31 .uleb128 0x31
+ 15626 3a47 820D0000 .long 0xd82
+ 15627 3a4b 03 .byte 0x3
+ 15628 3a4c 91 .byte 0x91
+ 15629 3a4d DC5F .sleb128 -4132
+ 15630 3a4f 31 .uleb128 0x31
+ 15631 3a50 760D0000 .long 0xd76
+
GAS LISTING /tmp/ccPaCTqg.s page 432
+
+
+ 15632 3a54 03 .byte 0x3
+ 15633 3a55 91 .byte 0x91
+ 15634 3a56 E05F .sleb128 -4128
+ 15635 3a58 00 .byte 0x0
+ 15636 3a59 00 .byte 0x0
+ 15637 3a5a 00 .byte 0x0
+ 15638 3a5b 00 .byte 0x0
+ 15639 3a5c 30 .uleb128 0x30
+ 15640 3a5d 8F0D0000 .long 0xd8f
+ 15641 3a61 00000000 .quad .LBB1130
+ 15641 00000000
+ 15642 3a69 00000000 .quad .LBE1130
+ 15642 00000000
+ 15643 3a71 03 .byte 0x3
+ 15644 3a72 1907 .value 0x719
+ 15645 3a74 703C0000 .long 0x3c70
+ 15646 3a78 31 .uleb128 0x31
+ 15647 3a79 A10D0000 .long 0xda1
+ 15648 3a7d 03 .byte 0x3
+ 15649 3a7e 91 .byte 0x91
+ 15650 3a7f F05F .sleb128 -4112
+ 15651 3a81 32 .uleb128 0x32
+ 15652 3a82 00000000 .quad .LBB1131
+ 15652 00000000
+ 15653 3a8a 00000000 .quad .LBE1131
+ 15653 00000000
+ 15654 3a92 33 .uleb128 0x33
+ 15655 3a93 AD0D0000 .long 0xdad
+ 15656 3a97 03 .byte 0x3
+ 15657 3a98 76 .byte 0x76
+ 15658 3a99 C050 .sleb128 -6080
+ 15659 3a9b 30 .uleb128 0x30
+ 15660 3a9c BA0D0000 .long 0xdba
+ 15661 3aa0 00000000 .quad .LBB1132
+ 15661 00000000
+ 15662 3aa8 00000000 .quad .LBE1132
+ 15662 00000000
+ 15663 3ab0 03 .byte 0x3
+ 15664 3ab1 1F06 .value 0x61f
+ 15665 3ab3 383B0000 .long 0x3b38
+ 15666 3ab7 31 .uleb128 0x31
+ 15667 3ab8 CC0D0000 .long 0xdcc
+ 15668 3abc 03 .byte 0x3
+ 15669 3abd 91 .byte 0x91
+ 15670 3abe 8060 .sleb128 -4096
+ 15671 3ac0 32 .uleb128 0x32
+ 15672 3ac1 00000000 .quad .LBB1133
+ 15672 00000000
+ 15673 3ac9 00000000 .quad .LBE1133
+ 15673 00000000
+ 15674 3ad1 33 .uleb128 0x33
+ 15675 3ad2 D80D0000 .long 0xdd8
+ 15676 3ad6 09 .byte 0x9
+ 15677 3ad7 03 .byte 0x3
+ 15678 3ad8 00000000 .quad mask.8002
+ 15678 00000000
+ 15679 3ae0 34 .uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s page 433
+
+
+ 15680 3ae1 FB0D0000 .long 0xdfb
+ 15681 3ae5 00000000 .quad .LBB1134
+ 15681 00000000
+ 15682 3aed 00000000 .quad .LBE1134
+ 15682 00000000
+ 15683 3af5 03 .byte 0x3
+ 15684 3af6 FE04 .value 0x4fe
+ 15685 3af8 31 .uleb128 0x31
+ 15686 3af9 190E0000 .long 0xe19
+ 15687 3afd 03 .byte 0x3
+ 15688 3afe 91 .byte 0x91
+ 15689 3aff 9060 .sleb128 -4080
+ 15690 3b01 31 .uleb128 0x31
+ 15691 3b02 0D0E0000 .long 0xe0d
+ 15692 3b06 03 .byte 0x3
+ 15693 3b07 91 .byte 0x91
+ 15694 3b08 A060 .sleb128 -4064
+ 15695 3b0a 34 .uleb128 0x34
+ 15696 3b0b 260E0000 .long 0xe26
+ 15697 3b0f 00000000 .quad .LBB1136
+ 15697 00000000
+ 15698 3b17 00000000 .quad .LBE1136
+ 15698 00000000
+ 15699 3b1f 03 .byte 0x3
+ 15700 3b20 7501 .value 0x175
+ 15701 3b22 31 .uleb128 0x31
+ 15702 3b23 440E0000 .long 0xe44
+ 15703 3b27 03 .byte 0x3
+ 15704 3b28 91 .byte 0x91
+ 15705 3b29 B060 .sleb128 -4048
+ 15706 3b2b 31 .uleb128 0x31
+ 15707 3b2c 380E0000 .long 0xe38
+ 15708 3b30 03 .byte 0x3
+ 15709 3b31 91 .byte 0x91
+ 15710 3b32 C060 .sleb128 -4032
+ 15711 3b34 00 .byte 0x0
+ 15712 3b35 00 .byte 0x0
+ 15713 3b36 00 .byte 0x0
+ 15714 3b37 00 .byte 0x0
+ 15715 3b38 30 .uleb128 0x30
+ 15716 3b39 BA0D0000 .long 0xdba
+ 15717 3b3d 00000000 .quad .LBB1138
+ 15717 00000000
+ 15718 3b45 00000000 .quad .LBE1138
+ 15718 00000000
+ 15719 3b4d 03 .byte 0x3
+ 15720 3b4e 2006 .value 0x620
+ 15721 3b50 D53B0000 .long 0x3bd5
+ 15722 3b54 31 .uleb128 0x31
+ 15723 3b55 CC0D0000 .long 0xdcc
+ 15724 3b59 03 .byte 0x3
+ 15725 3b5a 91 .byte 0x91
+ 15726 3b5b D060 .sleb128 -4016
+ 15727 3b5d 32 .uleb128 0x32
+ 15728 3b5e 00000000 .quad .LBB1139
+ 15728 00000000
+ 15729 3b66 00000000 .quad .LBE1139
+
GAS LISTING /tmp/ccPaCTqg.s page 434
+
+
+ 15729 00000000
+ 15730 3b6e 33 .uleb128 0x33
+ 15731 3b6f D80D0000 .long 0xdd8
+ 15732 3b73 09 .byte 0x9
+ 15733 3b74 03 .byte 0x3
+ 15734 3b75 00000000 .quad mask.8002
+ 15734 00000000
+ 15735 3b7d 34 .uleb128 0x34
+ 15736 3b7e FB0D0000 .long 0xdfb
+ 15737 3b82 00000000 .quad .LBB1140
+ 15737 00000000
+ 15738 3b8a 00000000 .quad .LBE1140
+ 15738 00000000
+ 15739 3b92 03 .byte 0x3
+ 15740 3b93 FE04 .value 0x4fe
+ 15741 3b95 31 .uleb128 0x31
+ 15742 3b96 190E0000 .long 0xe19
+ 15743 3b9a 03 .byte 0x3
+ 15744 3b9b 91 .byte 0x91
+ 15745 3b9c E060 .sleb128 -4000
+ 15746 3b9e 31 .uleb128 0x31
+ 15747 3b9f 0D0E0000 .long 0xe0d
+ 15748 3ba3 03 .byte 0x3
+ 15749 3ba4 91 .byte 0x91
+ 15750 3ba5 F060 .sleb128 -3984
+ 15751 3ba7 34 .uleb128 0x34
+ 15752 3ba8 260E0000 .long 0xe26
+ 15753 3bac 00000000 .quad .LBB1142
+ 15753 00000000
+ 15754 3bb4 00000000 .quad .LBE1142
+ 15754 00000000
+ 15755 3bbc 03 .byte 0x3
+ 15756 3bbd 7501 .value 0x175
+ 15757 3bbf 31 .uleb128 0x31
+ 15758 3bc0 440E0000 .long 0xe44
+ 15759 3bc4 03 .byte 0x3
+ 15760 3bc5 91 .byte 0x91
+ 15761 3bc6 8061 .sleb128 -3968
+ 15762 3bc8 31 .uleb128 0x31
+ 15763 3bc9 380E0000 .long 0xe38
+ 15764 3bcd 03 .byte 0x3
+ 15765 3bce 91 .byte 0x91
+ 15766 3bcf 9061 .sleb128 -3952
+ 15767 3bd1 00 .byte 0x0
+ 15768 3bd2 00 .byte 0x0
+ 15769 3bd3 00 .byte 0x0
+ 15770 3bd4 00 .byte 0x0
+ 15771 3bd5 34 .uleb128 0x34
+ 15772 3bd6 BA0D0000 .long 0xdba
+ 15773 3bda 00000000 .quad .LBB1144
+ 15773 00000000
+ 15774 3be2 00000000 .quad .LBE1144
+ 15774 00000000
+ 15775 3bea 03 .byte 0x3
+ 15776 3beb 2106 .value 0x621
+ 15777 3bed 31 .uleb128 0x31
+ 15778 3bee CC0D0000 .long 0xdcc
+
GAS LISTING /tmp/ccPaCTqg.s page 435
+
+
+ 15779 3bf2 03 .byte 0x3
+ 15780 3bf3 91 .byte 0x91
+ 15781 3bf4 A061 .sleb128 -3936
+ 15782 3bf6 32 .uleb128 0x32
+ 15783 3bf7 00000000 .quad .LBB1145
+ 15783 00000000
+ 15784 3bff 00000000 .quad .LBE1145
+ 15784 00000000
+ 15785 3c07 33 .uleb128 0x33
+ 15786 3c08 D80D0000 .long 0xdd8
+ 15787 3c0c 09 .byte 0x9
+ 15788 3c0d 03 .byte 0x3
+ 15789 3c0e 00000000 .quad mask.8002
+ 15789 00000000
+ 15790 3c16 34 .uleb128 0x34
+ 15791 3c17 FB0D0000 .long 0xdfb
+ 15792 3c1b 00000000 .quad .LBB1146
+ 15792 00000000
+ 15793 3c23 00000000 .quad .LBE1146
+ 15793 00000000
+ 15794 3c2b 03 .byte 0x3
+ 15795 3c2c FE04 .value 0x4fe
+ 15796 3c2e 31 .uleb128 0x31
+ 15797 3c2f 190E0000 .long 0xe19
+ 15798 3c33 03 .byte 0x3
+ 15799 3c34 91 .byte 0x91
+ 15800 3c35 B061 .sleb128 -3920
+ 15801 3c37 31 .uleb128 0x31
+ 15802 3c38 0D0E0000 .long 0xe0d
+ 15803 3c3c 03 .byte 0x3
+ 15804 3c3d 91 .byte 0x91
+ 15805 3c3e C061 .sleb128 -3904
+ 15806 3c40 34 .uleb128 0x34
+ 15807 3c41 260E0000 .long 0xe26
+ 15808 3c45 00000000 .quad .LBB1148
+ 15808 00000000
+ 15809 3c4d 00000000 .quad .LBE1148
+ 15809 00000000
+ 15810 3c55 03 .byte 0x3
+ 15811 3c56 7501 .value 0x175
+ 15812 3c58 31 .uleb128 0x31
+ 15813 3c59 440E0000 .long 0xe44
+ 15814 3c5d 03 .byte 0x3
+ 15815 3c5e 91 .byte 0x91
+ 15816 3c5f D061 .sleb128 -3888
+ 15817 3c61 31 .uleb128 0x31
+ 15818 3c62 380E0000 .long 0xe38
+ 15819 3c66 03 .byte 0x3
+ 15820 3c67 91 .byte 0x91
+ 15821 3c68 E061 .sleb128 -3872
+ 15822 3c6a 00 .byte 0x0
+ 15823 3c6b 00 .byte 0x0
+ 15824 3c6c 00 .byte 0x0
+ 15825 3c6d 00 .byte 0x0
+ 15826 3c6e 00 .byte 0x0
+ 15827 3c6f 00 .byte 0x0
+ 15828 3c70 30 .uleb128 0x30
+
GAS LISTING /tmp/ccPaCTqg.s page 436
+
+
+ 15829 3c71 8F0D0000 .long 0xd8f
+ 15830 3c75 00000000 .quad .LBB1150
+ 15830 00000000
+ 15831 3c7d 00000000 .quad .LBE1150
+ 15831 00000000
+ 15832 3c85 03 .byte 0x3
+ 15833 3c86 1B07 .value 0x71b
+ 15834 3c88 843E0000 .long 0x3e84
+ 15835 3c8c 31 .uleb128 0x31
+ 15836 3c8d A10D0000 .long 0xda1
+ 15837 3c91 03 .byte 0x3
+ 15838 3c92 91 .byte 0x91
+ 15839 3c93 F061 .sleb128 -3856
+ 15840 3c95 32 .uleb128 0x32
+ 15841 3c96 00000000 .quad .LBB1151
+ 15841 00000000
+ 15842 3c9e 00000000 .quad .LBE1151
+ 15842 00000000
+ 15843 3ca6 33 .uleb128 0x33
+ 15844 3ca7 AD0D0000 .long 0xdad
+ 15845 3cab 03 .byte 0x3
+ 15846 3cac 76 .byte 0x76
+ 15847 3cad D050 .sleb128 -6064
+ 15848 3caf 30 .uleb128 0x30
+ 15849 3cb0 BA0D0000 .long 0xdba
+ 15850 3cb4 00000000 .quad .LBB1152
+ 15850 00000000
+ 15851 3cbc 00000000 .quad .LBE1152
+ 15851 00000000
+ 15852 3cc4 03 .byte 0x3
+ 15853 3cc5 1F06 .value 0x61f
+ 15854 3cc7 4C3D0000 .long 0x3d4c
+ 15855 3ccb 31 .uleb128 0x31
+ 15856 3ccc CC0D0000 .long 0xdcc
+ 15857 3cd0 03 .byte 0x3
+ 15858 3cd1 91 .byte 0x91
+ 15859 3cd2 8062 .sleb128 -3840
+ 15860 3cd4 32 .uleb128 0x32
+ 15861 3cd5 00000000 .quad .LBB1153
+ 15861 00000000
+ 15862 3cdd 00000000 .quad .LBE1153
+ 15862 00000000
+ 15863 3ce5 33 .uleb128 0x33
+ 15864 3ce6 D80D0000 .long 0xdd8
+ 15865 3cea 09 .byte 0x9
+ 15866 3ceb 03 .byte 0x3
+ 15867 3cec 00000000 .quad mask.8002
+ 15867 00000000
+ 15868 3cf4 34 .uleb128 0x34
+ 15869 3cf5 FB0D0000 .long 0xdfb
+ 15870 3cf9 00000000 .quad .LBB1154
+ 15870 00000000
+ 15871 3d01 00000000 .quad .LBE1154
+ 15871 00000000
+ 15872 3d09 03 .byte 0x3
+ 15873 3d0a FE04 .value 0x4fe
+ 15874 3d0c 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 437
+
+
+ 15875 3d0d 190E0000 .long 0xe19
+ 15876 3d11 03 .byte 0x3
+ 15877 3d12 91 .byte 0x91
+ 15878 3d13 9062 .sleb128 -3824
+ 15879 3d15 31 .uleb128 0x31
+ 15880 3d16 0D0E0000 .long 0xe0d
+ 15881 3d1a 03 .byte 0x3
+ 15882 3d1b 91 .byte 0x91
+ 15883 3d1c A062 .sleb128 -3808
+ 15884 3d1e 34 .uleb128 0x34
+ 15885 3d1f 260E0000 .long 0xe26
+ 15886 3d23 00000000 .quad .LBB1156
+ 15886 00000000
+ 15887 3d2b 00000000 .quad .LBE1156
+ 15887 00000000
+ 15888 3d33 03 .byte 0x3
+ 15889 3d34 7501 .value 0x175
+ 15890 3d36 31 .uleb128 0x31
+ 15891 3d37 440E0000 .long 0xe44
+ 15892 3d3b 03 .byte 0x3
+ 15893 3d3c 91 .byte 0x91
+ 15894 3d3d B062 .sleb128 -3792
+ 15895 3d3f 31 .uleb128 0x31
+ 15896 3d40 380E0000 .long 0xe38
+ 15897 3d44 03 .byte 0x3
+ 15898 3d45 91 .byte 0x91
+ 15899 3d46 C062 .sleb128 -3776
+ 15900 3d48 00 .byte 0x0
+ 15901 3d49 00 .byte 0x0
+ 15902 3d4a 00 .byte 0x0
+ 15903 3d4b 00 .byte 0x0
+ 15904 3d4c 30 .uleb128 0x30
+ 15905 3d4d BA0D0000 .long 0xdba
+ 15906 3d51 00000000 .quad .LBB1158
+ 15906 00000000
+ 15907 3d59 00000000 .quad .LBE1158
+ 15907 00000000
+ 15908 3d61 03 .byte 0x3
+ 15909 3d62 2006 .value 0x620
+ 15910 3d64 E93D0000 .long 0x3de9
+ 15911 3d68 31 .uleb128 0x31
+ 15912 3d69 CC0D0000 .long 0xdcc
+ 15913 3d6d 03 .byte 0x3
+ 15914 3d6e 91 .byte 0x91
+ 15915 3d6f D062 .sleb128 -3760
+ 15916 3d71 32 .uleb128 0x32
+ 15917 3d72 00000000 .quad .LBB1159
+ 15917 00000000
+ 15918 3d7a 00000000 .quad .LBE1159
+ 15918 00000000
+ 15919 3d82 33 .uleb128 0x33
+ 15920 3d83 D80D0000 .long 0xdd8
+ 15921 3d87 09 .byte 0x9
+ 15922 3d88 03 .byte 0x3
+ 15923 3d89 00000000 .quad mask.8002
+ 15923 00000000
+ 15924 3d91 34 .uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s page 438
+
+
+ 15925 3d92 FB0D0000 .long 0xdfb
+ 15926 3d96 00000000 .quad .LBB1160
+ 15926 00000000
+ 15927 3d9e 00000000 .quad .LBE1160
+ 15927 00000000
+ 15928 3da6 03 .byte 0x3
+ 15929 3da7 FE04 .value 0x4fe
+ 15930 3da9 31 .uleb128 0x31
+ 15931 3daa 190E0000 .long 0xe19
+ 15932 3dae 03 .byte 0x3
+ 15933 3daf 91 .byte 0x91
+ 15934 3db0 E062 .sleb128 -3744
+ 15935 3db2 31 .uleb128 0x31
+ 15936 3db3 0D0E0000 .long 0xe0d
+ 15937 3db7 03 .byte 0x3
+ 15938 3db8 91 .byte 0x91
+ 15939 3db9 F062 .sleb128 -3728
+ 15940 3dbb 34 .uleb128 0x34
+ 15941 3dbc 260E0000 .long 0xe26
+ 15942 3dc0 00000000 .quad .LBB1162
+ 15942 00000000
+ 15943 3dc8 00000000 .quad .LBE1162
+ 15943 00000000
+ 15944 3dd0 03 .byte 0x3
+ 15945 3dd1 7501 .value 0x175
+ 15946 3dd3 31 .uleb128 0x31
+ 15947 3dd4 440E0000 .long 0xe44
+ 15948 3dd8 03 .byte 0x3
+ 15949 3dd9 91 .byte 0x91
+ 15950 3dda 8063 .sleb128 -3712
+ 15951 3ddc 31 .uleb128 0x31
+ 15952 3ddd 380E0000 .long 0xe38
+ 15953 3de1 03 .byte 0x3
+ 15954 3de2 91 .byte 0x91
+ 15955 3de3 9063 .sleb128 -3696
+ 15956 3de5 00 .byte 0x0
+ 15957 3de6 00 .byte 0x0
+ 15958 3de7 00 .byte 0x0
+ 15959 3de8 00 .byte 0x0
+ 15960 3de9 34 .uleb128 0x34
+ 15961 3dea BA0D0000 .long 0xdba
+ 15962 3dee 00000000 .quad .LBB1164
+ 15962 00000000
+ 15963 3df6 00000000 .quad .LBE1164
+ 15963 00000000
+ 15964 3dfe 03 .byte 0x3
+ 15965 3dff 2106 .value 0x621
+ 15966 3e01 31 .uleb128 0x31
+ 15967 3e02 CC0D0000 .long 0xdcc
+ 15968 3e06 03 .byte 0x3
+ 15969 3e07 91 .byte 0x91
+ 15970 3e08 A063 .sleb128 -3680
+ 15971 3e0a 32 .uleb128 0x32
+ 15972 3e0b 00000000 .quad .LBB1165
+ 15972 00000000
+ 15973 3e13 00000000 .quad .LBE1165
+ 15973 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 439
+
+
+ 15974 3e1b 33 .uleb128 0x33
+ 15975 3e1c D80D0000 .long 0xdd8
+ 15976 3e20 09 .byte 0x9
+ 15977 3e21 03 .byte 0x3
+ 15978 3e22 00000000 .quad mask.8002
+ 15978 00000000
+ 15979 3e2a 34 .uleb128 0x34
+ 15980 3e2b FB0D0000 .long 0xdfb
+ 15981 3e2f 00000000 .quad .LBB1166
+ 15981 00000000
+ 15982 3e37 00000000 .quad .LBE1166
+ 15982 00000000
+ 15983 3e3f 03 .byte 0x3
+ 15984 3e40 FE04 .value 0x4fe
+ 15985 3e42 31 .uleb128 0x31
+ 15986 3e43 190E0000 .long 0xe19
+ 15987 3e47 03 .byte 0x3
+ 15988 3e48 91 .byte 0x91
+ 15989 3e49 B063 .sleb128 -3664
+ 15990 3e4b 31 .uleb128 0x31
+ 15991 3e4c 0D0E0000 .long 0xe0d
+ 15992 3e50 03 .byte 0x3
+ 15993 3e51 91 .byte 0x91
+ 15994 3e52 C063 .sleb128 -3648
+ 15995 3e54 34 .uleb128 0x34
+ 15996 3e55 260E0000 .long 0xe26
+ 15997 3e59 00000000 .quad .LBB1168
+ 15997 00000000
+ 15998 3e61 00000000 .quad .LBE1168
+ 15998 00000000
+ 15999 3e69 03 .byte 0x3
+ 16000 3e6a 7501 .value 0x175
+ 16001 3e6c 31 .uleb128 0x31
+ 16002 3e6d 440E0000 .long 0xe44
+ 16003 3e71 03 .byte 0x3
+ 16004 3e72 91 .byte 0x91
+ 16005 3e73 D063 .sleb128 -3632
+ 16006 3e75 31 .uleb128 0x31
+ 16007 3e76 380E0000 .long 0xe38
+ 16008 3e7a 03 .byte 0x3
+ 16009 3e7b 91 .byte 0x91
+ 16010 3e7c E063 .sleb128 -3616
+ 16011 3e7e 00 .byte 0x0
+ 16012 3e7f 00 .byte 0x0
+ 16013 3e80 00 .byte 0x0
+ 16014 3e81 00 .byte 0x0
+ 16015 3e82 00 .byte 0x0
+ 16016 3e83 00 .byte 0x0
+ 16017 3e84 30 .uleb128 0x30
+ 16018 3e85 450D0000 .long 0xd45
+ 16019 3e89 00000000 .quad .LBB1170
+ 16019 00000000
+ 16020 3e91 00000000 .quad .LBE1170
+ 16020 00000000
+ 16021 3e99 03 .byte 0x3
+ 16022 3e9a 1C07 .value 0x71c
+ 16023 3e9c D53E0000 .long 0x3ed5
+
GAS LISTING /tmp/ccPaCTqg.s page 440
+
+
+ 16024 3ea0 31 .uleb128 0x31
+ 16025 3ea1 570D0000 .long 0xd57
+ 16026 3ea5 03 .byte 0x3
+ 16027 3ea6 91 .byte 0x91
+ 16028 3ea7 F063 .sleb128 -3600
+ 16029 3ea9 34 .uleb128 0x34
+ 16030 3eaa 640D0000 .long 0xd64
+ 16031 3eae 00000000 .quad .LBB1172
+ 16031 00000000
+ 16032 3eb6 00000000 .quad .LBE1172
+ 16032 00000000
+ 16033 3ebe 03 .byte 0x3
+ 16034 3ebf 4905 .value 0x549
+ 16035 3ec1 31 .uleb128 0x31
+ 16036 3ec2 820D0000 .long 0xd82
+ 16037 3ec6 03 .byte 0x3
+ 16038 3ec7 91 .byte 0x91
+ 16039 3ec8 8C64 .sleb128 -3572
+ 16040 3eca 31 .uleb128 0x31
+ 16041 3ecb 760D0000 .long 0xd76
+ 16042 3ecf 03 .byte 0x3
+ 16043 3ed0 91 .byte 0x91
+ 16044 3ed1 9064 .sleb128 -3568
+ 16045 3ed3 00 .byte 0x0
+ 16046 3ed4 00 .byte 0x0
+ 16047 3ed5 30 .uleb128 0x30
+ 16048 3ed6 142C0000 .long 0x2c14
+ 16049 3eda 00000000 .quad .LBB1174
+ 16049 00000000
+ 16050 3ee2 00000000 .quad .LBE1174
+ 16050 00000000
+ 16051 3eea 03 .byte 0x3
+ 16052 3eeb 1E07 .value 0x71e
+ 16053 3eed 383F0000 .long 0x3f38
+ 16054 3ef1 31 .uleb128 0x31
+ 16055 3ef2 302C0000 .long 0x2c30
+ 16056 3ef6 03 .byte 0x3
+ 16057 3ef7 91 .byte 0x91
+ 16058 3ef8 A064 .sleb128 -3552
+ 16059 3efa 31 .uleb128 0x31
+ 16060 3efb 262C0000 .long 0x2c26
+ 16061 3eff 03 .byte 0x3
+ 16062 3f00 91 .byte 0x91
+ 16063 3f01 B064 .sleb128 -3536
+ 16064 3f03 34 .uleb128 0x34
+ 16065 3f04 3B2C0000 .long 0x2c3b
+ 16066 3f08 00000000 .quad .LBB1176
+ 16066 00000000
+ 16067 3f10 00000000 .quad .LBE1176
+ 16067 00000000
+ 16068 3f18 03 .byte 0x3
+ 16069 3f19 BA05 .value 0x5ba
+ 16070 3f1b 31 .uleb128 0x31
+ 16071 3f1c 652C0000 .long 0x2c65
+ 16072 3f20 03 .byte 0x3
+ 16073 3f21 91 .byte 0x91
+ 16074 3f22 CC64 .sleb128 -3508
+
GAS LISTING /tmp/ccPaCTqg.s page 441
+
+
+ 16075 3f24 31 .uleb128 0x31
+ 16076 3f25 592C0000 .long 0x2c59
+ 16077 3f29 03 .byte 0x3
+ 16078 3f2a 91 .byte 0x91
+ 16079 3f2b D064 .sleb128 -3504
+ 16080 3f2d 31 .uleb128 0x31
+ 16081 3f2e 4D2C0000 .long 0x2c4d
+ 16082 3f32 03 .byte 0x3
+ 16083 3f33 91 .byte 0x91
+ 16084 3f34 E064 .sleb128 -3488
+ 16085 3f36 00 .byte 0x0
+ 16086 3f37 00 .byte 0x0
+ 16087 3f38 30 .uleb128 0x30
+ 16088 3f39 722C0000 .long 0x2c72
+ 16089 3f3d 00000000 .quad .LBB1178
+ 16089 00000000
+ 16090 3f45 00000000 .quad .LBE1178
+ 16090 00000000
+ 16091 3f4d 03 .byte 0x3
+ 16092 3f4e 2107 .value 0x721
+ 16093 3f50 9B3F0000 .long 0x3f9b
+ 16094 3f54 31 .uleb128 0x31
+ 16095 3f55 8E2C0000 .long 0x2c8e
+ 16096 3f59 03 .byte 0x3
+ 16097 3f5a 91 .byte 0x91
+ 16098 3f5b F064 .sleb128 -3472
+ 16099 3f5d 31 .uleb128 0x31
+ 16100 3f5e 842C0000 .long 0x2c84
+ 16101 3f62 03 .byte 0x3
+ 16102 3f63 91 .byte 0x91
+ 16103 3f64 8065 .sleb128 -3456
+ 16104 3f66 34 .uleb128 0x34
+ 16105 3f67 3B2C0000 .long 0x2c3b
+ 16106 3f6b 00000000 .quad .LBB1180
+ 16106 00000000
+ 16107 3f73 00000000 .quad .LBE1180
+ 16107 00000000
+ 16108 3f7b 03 .byte 0x3
+ 16109 3f7c DA05 .value 0x5da
+ 16110 3f7e 31 .uleb128 0x31
+ 16111 3f7f 652C0000 .long 0x2c65
+ 16112 3f83 03 .byte 0x3
+ 16113 3f84 91 .byte 0x91
+ 16114 3f85 9C65 .sleb128 -3428
+ 16115 3f87 31 .uleb128 0x31
+ 16116 3f88 592C0000 .long 0x2c59
+ 16117 3f8c 03 .byte 0x3
+ 16118 3f8d 91 .byte 0x91
+ 16119 3f8e A065 .sleb128 -3424
+ 16120 3f90 31 .uleb128 0x31
+ 16121 3f91 4D2C0000 .long 0x2c4d
+ 16122 3f95 03 .byte 0x3
+ 16123 3f96 91 .byte 0x91
+ 16124 3f97 B065 .sleb128 -3408
+ 16125 3f99 00 .byte 0x0
+ 16126 3f9a 00 .byte 0x0
+ 16127 3f9b 30 .uleb128 0x30
+
GAS LISTING /tmp/ccPaCTqg.s page 442
+
+
+ 16128 3f9c 8F0D0000 .long 0xd8f
+ 16129 3fa0 00000000 .quad .LBB1182
+ 16129 00000000
+ 16130 3fa8 00000000 .quad .LBE1182
+ 16130 00000000
+ 16131 3fb0 03 .byte 0x3
+ 16132 3fb1 2507 .value 0x725
+ 16133 3fb3 AF410000 .long 0x41af
+ 16134 3fb7 31 .uleb128 0x31
+ 16135 3fb8 A10D0000 .long 0xda1
+ 16136 3fbc 03 .byte 0x3
+ 16137 3fbd 91 .byte 0x91
+ 16138 3fbe C065 .sleb128 -3392
+ 16139 3fc0 32 .uleb128 0x32
+ 16140 3fc1 00000000 .quad .LBB1183
+ 16140 00000000
+ 16141 3fc9 00000000 .quad .LBE1183
+ 16141 00000000
+ 16142 3fd1 33 .uleb128 0x33
+ 16143 3fd2 AD0D0000 .long 0xdad
+ 16144 3fd6 03 .byte 0x3
+ 16145 3fd7 76 .byte 0x76
+ 16146 3fd8 E050 .sleb128 -6048
+ 16147 3fda 30 .uleb128 0x30
+ 16148 3fdb BA0D0000 .long 0xdba
+ 16149 3fdf 00000000 .quad .LBB1184
+ 16149 00000000
+ 16150 3fe7 00000000 .quad .LBE1184
+ 16150 00000000
+ 16151 3fef 03 .byte 0x3
+ 16152 3ff0 1F06 .value 0x61f
+ 16153 3ff2 77400000 .long 0x4077
+ 16154 3ff6 31 .uleb128 0x31
+ 16155 3ff7 CC0D0000 .long 0xdcc
+ 16156 3ffb 03 .byte 0x3
+ 16157 3ffc 91 .byte 0x91
+ 16158 3ffd D065 .sleb128 -3376
+ 16159 3fff 32 .uleb128 0x32
+ 16160 4000 00000000 .quad .LBB1185
+ 16160 00000000
+ 16161 4008 00000000 .quad .LBE1185
+ 16161 00000000
+ 16162 4010 33 .uleb128 0x33
+ 16163 4011 D80D0000 .long 0xdd8
+ 16164 4015 09 .byte 0x9
+ 16165 4016 03 .byte 0x3
+ 16166 4017 00000000 .quad mask.8002
+ 16166 00000000
+ 16167 401f 34 .uleb128 0x34
+ 16168 4020 FB0D0000 .long 0xdfb
+ 16169 4024 00000000 .quad .LBB1186
+ 16169 00000000
+ 16170 402c 00000000 .quad .LBE1186
+ 16170 00000000
+ 16171 4034 03 .byte 0x3
+ 16172 4035 FE04 .value 0x4fe
+ 16173 4037 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 443
+
+
+ 16174 4038 190E0000 .long 0xe19
+ 16175 403c 03 .byte 0x3
+ 16176 403d 91 .byte 0x91
+ 16177 403e E065 .sleb128 -3360
+ 16178 4040 31 .uleb128 0x31
+ 16179 4041 0D0E0000 .long 0xe0d
+ 16180 4045 03 .byte 0x3
+ 16181 4046 91 .byte 0x91
+ 16182 4047 F065 .sleb128 -3344
+ 16183 4049 34 .uleb128 0x34
+ 16184 404a 260E0000 .long 0xe26
+ 16185 404e 00000000 .quad .LBB1188
+ 16185 00000000
+ 16186 4056 00000000 .quad .LBE1188
+ 16186 00000000
+ 16187 405e 03 .byte 0x3
+ 16188 405f 7501 .value 0x175
+ 16189 4061 31 .uleb128 0x31
+ 16190 4062 440E0000 .long 0xe44
+ 16191 4066 03 .byte 0x3
+ 16192 4067 91 .byte 0x91
+ 16193 4068 8066 .sleb128 -3328
+ 16194 406a 31 .uleb128 0x31
+ 16195 406b 380E0000 .long 0xe38
+ 16196 406f 03 .byte 0x3
+ 16197 4070 91 .byte 0x91
+ 16198 4071 9066 .sleb128 -3312
+ 16199 4073 00 .byte 0x0
+ 16200 4074 00 .byte 0x0
+ 16201 4075 00 .byte 0x0
+ 16202 4076 00 .byte 0x0
+ 16203 4077 30 .uleb128 0x30
+ 16204 4078 BA0D0000 .long 0xdba
+ 16205 407c 00000000 .quad .LBB1190
+ 16205 00000000
+ 16206 4084 00000000 .quad .LBE1190
+ 16206 00000000
+ 16207 408c 03 .byte 0x3
+ 16208 408d 2006 .value 0x620
+ 16209 408f 14410000 .long 0x4114
+ 16210 4093 31 .uleb128 0x31
+ 16211 4094 CC0D0000 .long 0xdcc
+ 16212 4098 03 .byte 0x3
+ 16213 4099 91 .byte 0x91
+ 16214 409a A066 .sleb128 -3296
+ 16215 409c 32 .uleb128 0x32
+ 16216 409d 00000000 .quad .LBB1191
+ 16216 00000000
+ 16217 40a5 00000000 .quad .LBE1191
+ 16217 00000000
+ 16218 40ad 33 .uleb128 0x33
+ 16219 40ae D80D0000 .long 0xdd8
+ 16220 40b2 09 .byte 0x9
+ 16221 40b3 03 .byte 0x3
+ 16222 40b4 00000000 .quad mask.8002
+ 16222 00000000
+ 16223 40bc 34 .uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s page 444
+
+
+ 16224 40bd FB0D0000 .long 0xdfb
+ 16225 40c1 00000000 .quad .LBB1192
+ 16225 00000000
+ 16226 40c9 00000000 .quad .LBE1192
+ 16226 00000000
+ 16227 40d1 03 .byte 0x3
+ 16228 40d2 FE04 .value 0x4fe
+ 16229 40d4 31 .uleb128 0x31
+ 16230 40d5 190E0000 .long 0xe19
+ 16231 40d9 03 .byte 0x3
+ 16232 40da 91 .byte 0x91
+ 16233 40db B066 .sleb128 -3280
+ 16234 40dd 31 .uleb128 0x31
+ 16235 40de 0D0E0000 .long 0xe0d
+ 16236 40e2 03 .byte 0x3
+ 16237 40e3 91 .byte 0x91
+ 16238 40e4 C066 .sleb128 -3264
+ 16239 40e6 34 .uleb128 0x34
+ 16240 40e7 260E0000 .long 0xe26
+ 16241 40eb 00000000 .quad .LBB1194
+ 16241 00000000
+ 16242 40f3 00000000 .quad .LBE1194
+ 16242 00000000
+ 16243 40fb 03 .byte 0x3
+ 16244 40fc 7501 .value 0x175
+ 16245 40fe 31 .uleb128 0x31
+ 16246 40ff 440E0000 .long 0xe44
+ 16247 4103 03 .byte 0x3
+ 16248 4104 91 .byte 0x91
+ 16249 4105 D066 .sleb128 -3248
+ 16250 4107 31 .uleb128 0x31
+ 16251 4108 380E0000 .long 0xe38
+ 16252 410c 03 .byte 0x3
+ 16253 410d 91 .byte 0x91
+ 16254 410e E066 .sleb128 -3232
+ 16255 4110 00 .byte 0x0
+ 16256 4111 00 .byte 0x0
+ 16257 4112 00 .byte 0x0
+ 16258 4113 00 .byte 0x0
+ 16259 4114 34 .uleb128 0x34
+ 16260 4115 BA0D0000 .long 0xdba
+ 16261 4119 00000000 .quad .LBB1196
+ 16261 00000000
+ 16262 4121 00000000 .quad .LBE1196
+ 16262 00000000
+ 16263 4129 03 .byte 0x3
+ 16264 412a 2106 .value 0x621
+ 16265 412c 31 .uleb128 0x31
+ 16266 412d CC0D0000 .long 0xdcc
+ 16267 4131 03 .byte 0x3
+ 16268 4132 91 .byte 0x91
+ 16269 4133 F066 .sleb128 -3216
+ 16270 4135 32 .uleb128 0x32
+ 16271 4136 00000000 .quad .LBB1197
+ 16271 00000000
+ 16272 413e 00000000 .quad .LBE1197
+ 16272 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 445
+
+
+ 16273 4146 33 .uleb128 0x33
+ 16274 4147 D80D0000 .long 0xdd8
+ 16275 414b 09 .byte 0x9
+ 16276 414c 03 .byte 0x3
+ 16277 414d 00000000 .quad mask.8002
+ 16277 00000000
+ 16278 4155 34 .uleb128 0x34
+ 16279 4156 FB0D0000 .long 0xdfb
+ 16280 415a 00000000 .quad .LBB1198
+ 16280 00000000
+ 16281 4162 00000000 .quad .LBE1198
+ 16281 00000000
+ 16282 416a 03 .byte 0x3
+ 16283 416b FE04 .value 0x4fe
+ 16284 416d 31 .uleb128 0x31
+ 16285 416e 190E0000 .long 0xe19
+ 16286 4172 03 .byte 0x3
+ 16287 4173 91 .byte 0x91
+ 16288 4174 8067 .sleb128 -3200
+ 16289 4176 31 .uleb128 0x31
+ 16290 4177 0D0E0000 .long 0xe0d
+ 16291 417b 03 .byte 0x3
+ 16292 417c 91 .byte 0x91
+ 16293 417d 9067 .sleb128 -3184
+ 16294 417f 34 .uleb128 0x34
+ 16295 4180 260E0000 .long 0xe26
+ 16296 4184 00000000 .quad .LBB1200
+ 16296 00000000
+ 16297 418c 00000000 .quad .LBE1200
+ 16297 00000000
+ 16298 4194 03 .byte 0x3
+ 16299 4195 7501 .value 0x175
+ 16300 4197 31 .uleb128 0x31
+ 16301 4198 440E0000 .long 0xe44
+ 16302 419c 03 .byte 0x3
+ 16303 419d 91 .byte 0x91
+ 16304 419e A067 .sleb128 -3168
+ 16305 41a0 31 .uleb128 0x31
+ 16306 41a1 380E0000 .long 0xe38
+ 16307 41a5 03 .byte 0x3
+ 16308 41a6 91 .byte 0x91
+ 16309 41a7 B067 .sleb128 -3152
+ 16310 41a9 00 .byte 0x0
+ 16311 41aa 00 .byte 0x0
+ 16312 41ab 00 .byte 0x0
+ 16313 41ac 00 .byte 0x0
+ 16314 41ad 00 .byte 0x0
+ 16315 41ae 00 .byte 0x0
+ 16316 41af 30 .uleb128 0x30
+ 16317 41b0 8F0D0000 .long 0xd8f
+ 16318 41b4 00000000 .quad .LBB1202
+ 16318 00000000
+ 16319 41bc 00000000 .quad .LBE1202
+ 16319 00000000
+ 16320 41c4 03 .byte 0x3
+ 16321 41c5 2607 .value 0x726
+ 16322 41c7 C3430000 .long 0x43c3
+
GAS LISTING /tmp/ccPaCTqg.s page 446
+
+
+ 16323 41cb 31 .uleb128 0x31
+ 16324 41cc A10D0000 .long 0xda1
+ 16325 41d0 03 .byte 0x3
+ 16326 41d1 91 .byte 0x91
+ 16327 41d2 C067 .sleb128 -3136
+ 16328 41d4 32 .uleb128 0x32
+ 16329 41d5 00000000 .quad .LBB1203
+ 16329 00000000
+ 16330 41dd 00000000 .quad .LBE1203
+ 16330 00000000
+ 16331 41e5 33 .uleb128 0x33
+ 16332 41e6 AD0D0000 .long 0xdad
+ 16333 41ea 03 .byte 0x3
+ 16334 41eb 76 .byte 0x76
+ 16335 41ec F050 .sleb128 -6032
+ 16336 41ee 30 .uleb128 0x30
+ 16337 41ef BA0D0000 .long 0xdba
+ 16338 41f3 00000000 .quad .LBB1204
+ 16338 00000000
+ 16339 41fb 00000000 .quad .LBE1204
+ 16339 00000000
+ 16340 4203 03 .byte 0x3
+ 16341 4204 1F06 .value 0x61f
+ 16342 4206 8B420000 .long 0x428b
+ 16343 420a 31 .uleb128 0x31
+ 16344 420b CC0D0000 .long 0xdcc
+ 16345 420f 03 .byte 0x3
+ 16346 4210 91 .byte 0x91
+ 16347 4211 D067 .sleb128 -3120
+ 16348 4213 32 .uleb128 0x32
+ 16349 4214 00000000 .quad .LBB1205
+ 16349 00000000
+ 16350 421c 00000000 .quad .LBE1205
+ 16350 00000000
+ 16351 4224 33 .uleb128 0x33
+ 16352 4225 D80D0000 .long 0xdd8
+ 16353 4229 09 .byte 0x9
+ 16354 422a 03 .byte 0x3
+ 16355 422b 00000000 .quad mask.8002
+ 16355 00000000
+ 16356 4233 34 .uleb128 0x34
+ 16357 4234 FB0D0000 .long 0xdfb
+ 16358 4238 00000000 .quad .LBB1206
+ 16358 00000000
+ 16359 4240 00000000 .quad .LBE1206
+ 16359 00000000
+ 16360 4248 03 .byte 0x3
+ 16361 4249 FE04 .value 0x4fe
+ 16362 424b 31 .uleb128 0x31
+ 16363 424c 190E0000 .long 0xe19
+ 16364 4250 03 .byte 0x3
+ 16365 4251 91 .byte 0x91
+ 16366 4252 E067 .sleb128 -3104
+ 16367 4254 31 .uleb128 0x31
+ 16368 4255 0D0E0000 .long 0xe0d
+ 16369 4259 03 .byte 0x3
+ 16370 425a 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 447
+
+
+ 16371 425b F067 .sleb128 -3088
+ 16372 425d 34 .uleb128 0x34
+ 16373 425e 260E0000 .long 0xe26
+ 16374 4262 00000000 .quad .LBB1208
+ 16374 00000000
+ 16375 426a 00000000 .quad .LBE1208
+ 16375 00000000
+ 16376 4272 03 .byte 0x3
+ 16377 4273 7501 .value 0x175
+ 16378 4275 31 .uleb128 0x31
+ 16379 4276 440E0000 .long 0xe44
+ 16380 427a 03 .byte 0x3
+ 16381 427b 91 .byte 0x91
+ 16382 427c 8068 .sleb128 -3072
+ 16383 427e 31 .uleb128 0x31
+ 16384 427f 380E0000 .long 0xe38
+ 16385 4283 03 .byte 0x3
+ 16386 4284 91 .byte 0x91
+ 16387 4285 9068 .sleb128 -3056
+ 16388 4287 00 .byte 0x0
+ 16389 4288 00 .byte 0x0
+ 16390 4289 00 .byte 0x0
+ 16391 428a 00 .byte 0x0
+ 16392 428b 30 .uleb128 0x30
+ 16393 428c BA0D0000 .long 0xdba
+ 16394 4290 00000000 .quad .LBB1210
+ 16394 00000000
+ 16395 4298 00000000 .quad .LBE1210
+ 16395 00000000
+ 16396 42a0 03 .byte 0x3
+ 16397 42a1 2006 .value 0x620
+ 16398 42a3 28430000 .long 0x4328
+ 16399 42a7 31 .uleb128 0x31
+ 16400 42a8 CC0D0000 .long 0xdcc
+ 16401 42ac 03 .byte 0x3
+ 16402 42ad 91 .byte 0x91
+ 16403 42ae A068 .sleb128 -3040
+ 16404 42b0 32 .uleb128 0x32
+ 16405 42b1 00000000 .quad .LBB1211
+ 16405 00000000
+ 16406 42b9 00000000 .quad .LBE1211
+ 16406 00000000
+ 16407 42c1 33 .uleb128 0x33
+ 16408 42c2 D80D0000 .long 0xdd8
+ 16409 42c6 09 .byte 0x9
+ 16410 42c7 03 .byte 0x3
+ 16411 42c8 00000000 .quad mask.8002
+ 16411 00000000
+ 16412 42d0 34 .uleb128 0x34
+ 16413 42d1 FB0D0000 .long 0xdfb
+ 16414 42d5 00000000 .quad .LBB1212
+ 16414 00000000
+ 16415 42dd 00000000 .quad .LBE1212
+ 16415 00000000
+ 16416 42e5 03 .byte 0x3
+ 16417 42e6 FE04 .value 0x4fe
+ 16418 42e8 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 448
+
+
+ 16419 42e9 190E0000 .long 0xe19
+ 16420 42ed 03 .byte 0x3
+ 16421 42ee 91 .byte 0x91
+ 16422 42ef B068 .sleb128 -3024
+ 16423 42f1 31 .uleb128 0x31
+ 16424 42f2 0D0E0000 .long 0xe0d
+ 16425 42f6 03 .byte 0x3
+ 16426 42f7 91 .byte 0x91
+ 16427 42f8 C068 .sleb128 -3008
+ 16428 42fa 34 .uleb128 0x34
+ 16429 42fb 260E0000 .long 0xe26
+ 16430 42ff 00000000 .quad .LBB1214
+ 16430 00000000
+ 16431 4307 00000000 .quad .LBE1214
+ 16431 00000000
+ 16432 430f 03 .byte 0x3
+ 16433 4310 7501 .value 0x175
+ 16434 4312 31 .uleb128 0x31
+ 16435 4313 440E0000 .long 0xe44
+ 16436 4317 03 .byte 0x3
+ 16437 4318 91 .byte 0x91
+ 16438 4319 D068 .sleb128 -2992
+ 16439 431b 31 .uleb128 0x31
+ 16440 431c 380E0000 .long 0xe38
+ 16441 4320 03 .byte 0x3
+ 16442 4321 91 .byte 0x91
+ 16443 4322 E068 .sleb128 -2976
+ 16444 4324 00 .byte 0x0
+ 16445 4325 00 .byte 0x0
+ 16446 4326 00 .byte 0x0
+ 16447 4327 00 .byte 0x0
+ 16448 4328 34 .uleb128 0x34
+ 16449 4329 BA0D0000 .long 0xdba
+ 16450 432d 00000000 .quad .LBB1216
+ 16450 00000000
+ 16451 4335 00000000 .quad .LBE1216
+ 16451 00000000
+ 16452 433d 03 .byte 0x3
+ 16453 433e 2106 .value 0x621
+ 16454 4340 31 .uleb128 0x31
+ 16455 4341 CC0D0000 .long 0xdcc
+ 16456 4345 03 .byte 0x3
+ 16457 4346 91 .byte 0x91
+ 16458 4347 F068 .sleb128 -2960
+ 16459 4349 32 .uleb128 0x32
+ 16460 434a 00000000 .quad .LBB1217
+ 16460 00000000
+ 16461 4352 00000000 .quad .LBE1217
+ 16461 00000000
+ 16462 435a 33 .uleb128 0x33
+ 16463 435b D80D0000 .long 0xdd8
+ 16464 435f 09 .byte 0x9
+ 16465 4360 03 .byte 0x3
+ 16466 4361 00000000 .quad mask.8002
+ 16466 00000000
+ 16467 4369 34 .uleb128 0x34
+ 16468 436a FB0D0000 .long 0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s page 449
+
+
+ 16469 436e 00000000 .quad .LBB1218
+ 16469 00000000
+ 16470 4376 00000000 .quad .LBE1218
+ 16470 00000000
+ 16471 437e 03 .byte 0x3
+ 16472 437f FE04 .value 0x4fe
+ 16473 4381 31 .uleb128 0x31
+ 16474 4382 190E0000 .long 0xe19
+ 16475 4386 03 .byte 0x3
+ 16476 4387 91 .byte 0x91
+ 16477 4388 8069 .sleb128 -2944
+ 16478 438a 31 .uleb128 0x31
+ 16479 438b 0D0E0000 .long 0xe0d
+ 16480 438f 03 .byte 0x3
+ 16481 4390 91 .byte 0x91
+ 16482 4391 9069 .sleb128 -2928
+ 16483 4393 34 .uleb128 0x34
+ 16484 4394 260E0000 .long 0xe26
+ 16485 4398 00000000 .quad .LBB1220
+ 16485 00000000
+ 16486 43a0 00000000 .quad .LBE1220
+ 16486 00000000
+ 16487 43a8 03 .byte 0x3
+ 16488 43a9 7501 .value 0x175
+ 16489 43ab 31 .uleb128 0x31
+ 16490 43ac 440E0000 .long 0xe44
+ 16491 43b0 03 .byte 0x3
+ 16492 43b1 91 .byte 0x91
+ 16493 43b2 A069 .sleb128 -2912
+ 16494 43b4 31 .uleb128 0x31
+ 16495 43b5 380E0000 .long 0xe38
+ 16496 43b9 03 .byte 0x3
+ 16497 43ba 91 .byte 0x91
+ 16498 43bb B069 .sleb128 -2896
+ 16499 43bd 00 .byte 0x0
+ 16500 43be 00 .byte 0x0
+ 16501 43bf 00 .byte 0x0
+ 16502 43c0 00 .byte 0x0
+ 16503 43c1 00 .byte 0x0
+ 16504 43c2 00 .byte 0x0
+ 16505 43c3 30 .uleb128 0x30
+ 16506 43c4 E30C0000 .long 0xce3
+ 16507 43c8 00000000 .quad .LBB1222
+ 16507 00000000
+ 16508 43d0 00000000 .quad .LBE1222
+ 16508 00000000
+ 16509 43d8 03 .byte 0x3
+ 16510 43d9 2707 .value 0x727
+ 16511 43db 89440000 .long 0x4489
+ 16512 43df 31 .uleb128 0x31
+ 16513 43e0 010D0000 .long 0xd01
+ 16514 43e4 03 .byte 0x3
+ 16515 43e5 91 .byte 0x91
+ 16516 43e6 CC69 .sleb128 -2868
+ 16517 43e8 31 .uleb128 0x31
+ 16518 43e9 F50C0000 .long 0xcf5
+ 16519 43ed 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 450
+
+
+ 16520 43ee 91 .byte 0x91
+ 16521 43ef D069 .sleb128 -2864
+ 16522 43f1 32 .uleb128 0x32
+ 16523 43f2 00000000 .quad .LBB1223
+ 16523 00000000
+ 16524 43fa 00000000 .quad .LBE1223
+ 16524 00000000
+ 16525 4402 33 .uleb128 0x33
+ 16526 4403 0D0D0000 .long 0xd0d
+ 16527 4407 03 .byte 0x3
+ 16528 4408 76 .byte 0x76
+ 16529 4409 8051 .sleb128 -6016
+ 16530 440b 30 .uleb128 0x30
+ 16531 440c 1A0D0000 .long 0xd1a
+ 16532 4410 00000000 .quad .LBB1224
+ 16532 00000000
+ 16533 4418 00000000 .quad .LBE1224
+ 16533 00000000
+ 16534 4420 03 .byte 0x3
+ 16535 4421 8A06 .value 0x68a
+ 16536 4423 3A440000 .long 0x443a
+ 16537 4427 31 .uleb128 0x31
+ 16538 4428 380D0000 .long 0xd38
+ 16539 442c 03 .byte 0x3
+ 16540 442d 91 .byte 0x91
+ 16541 442e EC69 .sleb128 -2836
+ 16542 4430 31 .uleb128 0x31
+ 16543 4431 2C0D0000 .long 0xd2c
+ 16544 4435 03 .byte 0x3
+ 16545 4436 91 .byte 0x91
+ 16546 4437 F069 .sleb128 -2832
+ 16547 4439 00 .byte 0x0
+ 16548 443a 34 .uleb128 0x34
+ 16549 443b 450D0000 .long 0xd45
+ 16550 443f 00000000 .quad .LBB1226
+ 16550 00000000
+ 16551 4447 00000000 .quad .LBE1226
+ 16551 00000000
+ 16552 444f 03 .byte 0x3
+ 16553 4450 8B06 .value 0x68b
+ 16554 4452 31 .uleb128 0x31
+ 16555 4453 570D0000 .long 0xd57
+ 16556 4457 03 .byte 0x3
+ 16557 4458 91 .byte 0x91
+ 16558 4459 806A .sleb128 -2816
+ 16559 445b 34 .uleb128 0x34
+ 16560 445c 640D0000 .long 0xd64
+ 16561 4460 00000000 .quad .LBB1228
+ 16561 00000000
+ 16562 4468 00000000 .quad .LBE1228
+ 16562 00000000
+ 16563 4470 03 .byte 0x3
+ 16564 4471 4905 .value 0x549
+ 16565 4473 31 .uleb128 0x31
+ 16566 4474 820D0000 .long 0xd82
+ 16567 4478 03 .byte 0x3
+ 16568 4479 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 451
+
+
+ 16569 447a 9C6A .sleb128 -2788
+ 16570 447c 31 .uleb128 0x31
+ 16571 447d 760D0000 .long 0xd76
+ 16572 4481 03 .byte 0x3
+ 16573 4482 91 .byte 0x91
+ 16574 4483 A06A .sleb128 -2784
+ 16575 4485 00 .byte 0x0
+ 16576 4486 00 .byte 0x0
+ 16577 4487 00 .byte 0x0
+ 16578 4488 00 .byte 0x0
+ 16579 4489 30 .uleb128 0x30
+ 16580 448a 450D0000 .long 0xd45
+ 16581 448e 00000000 .quad .LBB1230
+ 16581 00000000
+ 16582 4496 00000000 .quad .LBE1230
+ 16582 00000000
+ 16583 449e 03 .byte 0x3
+ 16584 449f 2A07 .value 0x72a
+ 16585 44a1 DA440000 .long 0x44da
+ 16586 44a5 31 .uleb128 0x31
+ 16587 44a6 570D0000 .long 0xd57
+ 16588 44aa 03 .byte 0x3
+ 16589 44ab 91 .byte 0x91
+ 16590 44ac B06A .sleb128 -2768
+ 16591 44ae 34 .uleb128 0x34
+ 16592 44af 640D0000 .long 0xd64
+ 16593 44b3 00000000 .quad .LBB1232
+ 16593 00000000
+ 16594 44bb 00000000 .quad .LBE1232
+ 16594 00000000
+ 16595 44c3 03 .byte 0x3
+ 16596 44c4 4905 .value 0x549
+ 16597 44c6 31 .uleb128 0x31
+ 16598 44c7 820D0000 .long 0xd82
+ 16599 44cb 03 .byte 0x3
+ 16600 44cc 91 .byte 0x91
+ 16601 44cd CC6A .sleb128 -2740
+ 16602 44cf 31 .uleb128 0x31
+ 16603 44d0 760D0000 .long 0xd76
+ 16604 44d4 03 .byte 0x3
+ 16605 44d5 91 .byte 0x91
+ 16606 44d6 D06A .sleb128 -2736
+ 16607 44d8 00 .byte 0x0
+ 16608 44d9 00 .byte 0x0
+ 16609 44da 30 .uleb128 0x30
+ 16610 44db BE2B0000 .long 0x2bbe
+ 16611 44df 00000000 .quad .LBB1234
+ 16611 00000000
+ 16612 44e7 00000000 .quad .LBE1234
+ 16612 00000000
+ 16613 44ef 03 .byte 0x3
+ 16614 44f0 3207 .value 0x732
+ 16615 44f2 A0450000 .long 0x45a0
+ 16616 44f6 31 .uleb128 0x31
+ 16617 44f7 DC2B0000 .long 0x2bdc
+ 16618 44fb 03 .byte 0x3
+ 16619 44fc 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 452
+
+
+ 16620 44fd EC6A .sleb128 -2708
+ 16621 44ff 31 .uleb128 0x31
+ 16622 4500 D02B0000 .long 0x2bd0
+ 16623 4504 03 .byte 0x3
+ 16624 4505 91 .byte 0x91
+ 16625 4506 F06A .sleb128 -2704
+ 16626 4508 32 .uleb128 0x32
+ 16627 4509 00000000 .quad .LBB1235
+ 16627 00000000
+ 16628 4511 00000000 .quad .LBE1235
+ 16628 00000000
+ 16629 4519 33 .uleb128 0x33
+ 16630 451a E82B0000 .long 0x2be8
+ 16631 451e 03 .byte 0x3
+ 16632 451f 76 .byte 0x76
+ 16633 4520 9051 .sleb128 -6000
+ 16634 4522 30 .uleb128 0x30
+ 16635 4523 1A0D0000 .long 0xd1a
+ 16636 4527 00000000 .quad .LBB1236
+ 16636 00000000
+ 16637 452f 00000000 .quad .LBE1236
+ 16637 00000000
+ 16638 4537 03 .byte 0x3
+ 16639 4538 5606 .value 0x656
+ 16640 453a 51450000 .long 0x4551
+ 16641 453e 31 .uleb128 0x31
+ 16642 453f 380D0000 .long 0xd38
+ 16643 4543 03 .byte 0x3
+ 16644 4544 91 .byte 0x91
+ 16645 4545 8C6B .sleb128 -2676
+ 16646 4547 31 .uleb128 0x31
+ 16647 4548 2C0D0000 .long 0xd2c
+ 16648 454c 03 .byte 0x3
+ 16649 454d 91 .byte 0x91
+ 16650 454e 906B .sleb128 -2672
+ 16651 4550 00 .byte 0x0
+ 16652 4551 34 .uleb128 0x34
+ 16653 4552 F52B0000 .long 0x2bf5
+ 16654 4556 00000000 .quad .LBB1238
+ 16654 00000000
+ 16655 455e 00000000 .quad .LBE1238
+ 16655 00000000
+ 16656 4566 03 .byte 0x3
+ 16657 4567 5706 .value 0x657
+ 16658 4569 31 .uleb128 0x31
+ 16659 456a 072C0000 .long 0x2c07
+ 16660 456e 03 .byte 0x3
+ 16661 456f 91 .byte 0x91
+ 16662 4570 A06B .sleb128 -2656
+ 16663 4572 34 .uleb128 0x34
+ 16664 4573 640D0000 .long 0xd64
+ 16665 4577 00000000 .quad .LBB1240
+ 16665 00000000
+ 16666 457f 00000000 .quad .LBE1240
+ 16666 00000000
+ 16667 4587 03 .byte 0x3
+ 16668 4588 8105 .value 0x581
+
GAS LISTING /tmp/ccPaCTqg.s page 453
+
+
+ 16669 458a 31 .uleb128 0x31
+ 16670 458b 820D0000 .long 0xd82
+ 16671 458f 03 .byte 0x3
+ 16672 4590 91 .byte 0x91
+ 16673 4591 BC6B .sleb128 -2628
+ 16674 4593 31 .uleb128 0x31
+ 16675 4594 760D0000 .long 0xd76
+ 16676 4598 03 .byte 0x3
+ 16677 4599 91 .byte 0x91
+ 16678 459a C06B .sleb128 -2624
+ 16679 459c 00 .byte 0x0
+ 16680 459d 00 .byte 0x0
+ 16681 459e 00 .byte 0x0
+ 16682 459f 00 .byte 0x0
+ 16683 45a0 30 .uleb128 0x30
+ 16684 45a1 8F0D0000 .long 0xd8f
+ 16685 45a5 00000000 .quad .LBB1242
+ 16685 00000000
+ 16686 45ad 00000000 .quad .LBE1242
+ 16686 00000000
+ 16687 45b5 03 .byte 0x3
+ 16688 45b6 3407 .value 0x734
+ 16689 45b8 B4470000 .long 0x47b4
+ 16690 45bc 31 .uleb128 0x31
+ 16691 45bd A10D0000 .long 0xda1
+ 16692 45c1 03 .byte 0x3
+ 16693 45c2 91 .byte 0x91
+ 16694 45c3 D06B .sleb128 -2608
+ 16695 45c5 32 .uleb128 0x32
+ 16696 45c6 00000000 .quad .LBB1243
+ 16696 00000000
+ 16697 45ce 00000000 .quad .LBE1243
+ 16697 00000000
+ 16698 45d6 33 .uleb128 0x33
+ 16699 45d7 AD0D0000 .long 0xdad
+ 16700 45db 03 .byte 0x3
+ 16701 45dc 76 .byte 0x76
+ 16702 45dd A051 .sleb128 -5984
+ 16703 45df 30 .uleb128 0x30
+ 16704 45e0 BA0D0000 .long 0xdba
+ 16705 45e4 00000000 .quad .LBB1244
+ 16705 00000000
+ 16706 45ec 00000000 .quad .LBE1244
+ 16706 00000000
+ 16707 45f4 03 .byte 0x3
+ 16708 45f5 1F06 .value 0x61f
+ 16709 45f7 7C460000 .long 0x467c
+ 16710 45fb 31 .uleb128 0x31
+ 16711 45fc CC0D0000 .long 0xdcc
+ 16712 4600 03 .byte 0x3
+ 16713 4601 91 .byte 0x91
+ 16714 4602 E06B .sleb128 -2592
+ 16715 4604 32 .uleb128 0x32
+ 16716 4605 00000000 .quad .LBB1245
+ 16716 00000000
+ 16717 460d 00000000 .quad .LBE1245
+ 16717 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 454
+
+
+ 16718 4615 33 .uleb128 0x33
+ 16719 4616 D80D0000 .long 0xdd8
+ 16720 461a 09 .byte 0x9
+ 16721 461b 03 .byte 0x3
+ 16722 461c 00000000 .quad mask.8002
+ 16722 00000000
+ 16723 4624 34 .uleb128 0x34
+ 16724 4625 FB0D0000 .long 0xdfb
+ 16725 4629 00000000 .quad .LBB1246
+ 16725 00000000
+ 16726 4631 00000000 .quad .LBE1246
+ 16726 00000000
+ 16727 4639 03 .byte 0x3
+ 16728 463a FE04 .value 0x4fe
+ 16729 463c 31 .uleb128 0x31
+ 16730 463d 190E0000 .long 0xe19
+ 16731 4641 03 .byte 0x3
+ 16732 4642 91 .byte 0x91
+ 16733 4643 F06B .sleb128 -2576
+ 16734 4645 31 .uleb128 0x31
+ 16735 4646 0D0E0000 .long 0xe0d
+ 16736 464a 03 .byte 0x3
+ 16737 464b 91 .byte 0x91
+ 16738 464c 806C .sleb128 -2560
+ 16739 464e 34 .uleb128 0x34
+ 16740 464f 260E0000 .long 0xe26
+ 16741 4653 00000000 .quad .LBB1248
+ 16741 00000000
+ 16742 465b 00000000 .quad .LBE1248
+ 16742 00000000
+ 16743 4663 03 .byte 0x3
+ 16744 4664 7501 .value 0x175
+ 16745 4666 31 .uleb128 0x31
+ 16746 4667 440E0000 .long 0xe44
+ 16747 466b 03 .byte 0x3
+ 16748 466c 91 .byte 0x91
+ 16749 466d 906C .sleb128 -2544
+ 16750 466f 31 .uleb128 0x31
+ 16751 4670 380E0000 .long 0xe38
+ 16752 4674 03 .byte 0x3
+ 16753 4675 91 .byte 0x91
+ 16754 4676 A06C .sleb128 -2528
+ 16755 4678 00 .byte 0x0
+ 16756 4679 00 .byte 0x0
+ 16757 467a 00 .byte 0x0
+ 16758 467b 00 .byte 0x0
+ 16759 467c 30 .uleb128 0x30
+ 16760 467d BA0D0000 .long 0xdba
+ 16761 4681 00000000 .quad .LBB1250
+ 16761 00000000
+ 16762 4689 00000000 .quad .LBE1250
+ 16762 00000000
+ 16763 4691 03 .byte 0x3
+ 16764 4692 2006 .value 0x620
+ 16765 4694 19470000 .long 0x4719
+ 16766 4698 31 .uleb128 0x31
+ 16767 4699 CC0D0000 .long 0xdcc
+
GAS LISTING /tmp/ccPaCTqg.s page 455
+
+
+ 16768 469d 03 .byte 0x3
+ 16769 469e 91 .byte 0x91
+ 16770 469f B06C .sleb128 -2512
+ 16771 46a1 32 .uleb128 0x32
+ 16772 46a2 00000000 .quad .LBB1251
+ 16772 00000000
+ 16773 46aa 00000000 .quad .LBE1251
+ 16773 00000000
+ 16774 46b2 33 .uleb128 0x33
+ 16775 46b3 D80D0000 .long 0xdd8
+ 16776 46b7 09 .byte 0x9
+ 16777 46b8 03 .byte 0x3
+ 16778 46b9 00000000 .quad mask.8002
+ 16778 00000000
+ 16779 46c1 34 .uleb128 0x34
+ 16780 46c2 FB0D0000 .long 0xdfb
+ 16781 46c6 00000000 .quad .LBB1252
+ 16781 00000000
+ 16782 46ce 00000000 .quad .LBE1252
+ 16782 00000000
+ 16783 46d6 03 .byte 0x3
+ 16784 46d7 FE04 .value 0x4fe
+ 16785 46d9 31 .uleb128 0x31
+ 16786 46da 190E0000 .long 0xe19
+ 16787 46de 03 .byte 0x3
+ 16788 46df 91 .byte 0x91
+ 16789 46e0 C06C .sleb128 -2496
+ 16790 46e2 31 .uleb128 0x31
+ 16791 46e3 0D0E0000 .long 0xe0d
+ 16792 46e7 03 .byte 0x3
+ 16793 46e8 91 .byte 0x91
+ 16794 46e9 D06C .sleb128 -2480
+ 16795 46eb 34 .uleb128 0x34
+ 16796 46ec 260E0000 .long 0xe26
+ 16797 46f0 00000000 .quad .LBB1254
+ 16797 00000000
+ 16798 46f8 00000000 .quad .LBE1254
+ 16798 00000000
+ 16799 4700 03 .byte 0x3
+ 16800 4701 7501 .value 0x175
+ 16801 4703 31 .uleb128 0x31
+ 16802 4704 440E0000 .long 0xe44
+ 16803 4708 03 .byte 0x3
+ 16804 4709 91 .byte 0x91
+ 16805 470a E06C .sleb128 -2464
+ 16806 470c 31 .uleb128 0x31
+ 16807 470d 380E0000 .long 0xe38
+ 16808 4711 03 .byte 0x3
+ 16809 4712 91 .byte 0x91
+ 16810 4713 F06C .sleb128 -2448
+ 16811 4715 00 .byte 0x0
+ 16812 4716 00 .byte 0x0
+ 16813 4717 00 .byte 0x0
+ 16814 4718 00 .byte 0x0
+ 16815 4719 34 .uleb128 0x34
+ 16816 471a BA0D0000 .long 0xdba
+ 16817 471e 00000000 .quad .LBB1256
+
GAS LISTING /tmp/ccPaCTqg.s page 456
+
+
+ 16817 00000000
+ 16818 4726 00000000 .quad .LBE1256
+ 16818 00000000
+ 16819 472e 03 .byte 0x3
+ 16820 472f 2106 .value 0x621
+ 16821 4731 31 .uleb128 0x31
+ 16822 4732 CC0D0000 .long 0xdcc
+ 16823 4736 03 .byte 0x3
+ 16824 4737 91 .byte 0x91
+ 16825 4738 806D .sleb128 -2432
+ 16826 473a 32 .uleb128 0x32
+ 16827 473b 00000000 .quad .LBB1257
+ 16827 00000000
+ 16828 4743 00000000 .quad .LBE1257
+ 16828 00000000
+ 16829 474b 33 .uleb128 0x33
+ 16830 474c D80D0000 .long 0xdd8
+ 16831 4750 09 .byte 0x9
+ 16832 4751 03 .byte 0x3
+ 16833 4752 00000000 .quad mask.8002
+ 16833 00000000
+ 16834 475a 34 .uleb128 0x34
+ 16835 475b FB0D0000 .long 0xdfb
+ 16836 475f 00000000 .quad .LBB1258
+ 16836 00000000
+ 16837 4767 00000000 .quad .LBE1258
+ 16837 00000000
+ 16838 476f 03 .byte 0x3
+ 16839 4770 FE04 .value 0x4fe
+ 16840 4772 31 .uleb128 0x31
+ 16841 4773 190E0000 .long 0xe19
+ 16842 4777 03 .byte 0x3
+ 16843 4778 91 .byte 0x91
+ 16844 4779 906D .sleb128 -2416
+ 16845 477b 31 .uleb128 0x31
+ 16846 477c 0D0E0000 .long 0xe0d
+ 16847 4780 03 .byte 0x3
+ 16848 4781 91 .byte 0x91
+ 16849 4782 A06D .sleb128 -2400
+ 16850 4784 34 .uleb128 0x34
+ 16851 4785 260E0000 .long 0xe26
+ 16852 4789 00000000 .quad .LBB1260
+ 16852 00000000
+ 16853 4791 00000000 .quad .LBE1260
+ 16853 00000000
+ 16854 4799 03 .byte 0x3
+ 16855 479a 7501 .value 0x175
+ 16856 479c 31 .uleb128 0x31
+ 16857 479d 440E0000 .long 0xe44
+ 16858 47a1 03 .byte 0x3
+ 16859 47a2 91 .byte 0x91
+ 16860 47a3 B06D .sleb128 -2384
+ 16861 47a5 31 .uleb128 0x31
+ 16862 47a6 380E0000 .long 0xe38
+ 16863 47aa 03 .byte 0x3
+ 16864 47ab 91 .byte 0x91
+ 16865 47ac C06D .sleb128 -2368
+
GAS LISTING /tmp/ccPaCTqg.s page 457
+
+
+ 16866 47ae 00 .byte 0x0
+ 16867 47af 00 .byte 0x0
+ 16868 47b0 00 .byte 0x0
+ 16869 47b1 00 .byte 0x0
+ 16870 47b2 00 .byte 0x0
+ 16871 47b3 00 .byte 0x0
+ 16872 47b4 30 .uleb128 0x30
+ 16873 47b5 8F0D0000 .long 0xd8f
+ 16874 47b9 00000000 .quad .LBB1262
+ 16874 00000000
+ 16875 47c1 00000000 .quad .LBE1262
+ 16875 00000000
+ 16876 47c9 03 .byte 0x3
+ 16877 47ca 3607 .value 0x736
+ 16878 47cc C8490000 .long 0x49c8
+ 16879 47d0 31 .uleb128 0x31
+ 16880 47d1 A10D0000 .long 0xda1
+ 16881 47d5 03 .byte 0x3
+ 16882 47d6 91 .byte 0x91
+ 16883 47d7 D06D .sleb128 -2352
+ 16884 47d9 32 .uleb128 0x32
+ 16885 47da 00000000 .quad .LBB1263
+ 16885 00000000
+ 16886 47e2 00000000 .quad .LBE1263
+ 16886 00000000
+ 16887 47ea 33 .uleb128 0x33
+ 16888 47eb AD0D0000 .long 0xdad
+ 16889 47ef 03 .byte 0x3
+ 16890 47f0 76 .byte 0x76
+ 16891 47f1 B051 .sleb128 -5968
+ 16892 47f3 30 .uleb128 0x30
+ 16893 47f4 BA0D0000 .long 0xdba
+ 16894 47f8 00000000 .quad .LBB1264
+ 16894 00000000
+ 16895 4800 00000000 .quad .LBE1264
+ 16895 00000000
+ 16896 4808 03 .byte 0x3
+ 16897 4809 1F06 .value 0x61f
+ 16898 480b 90480000 .long 0x4890
+ 16899 480f 31 .uleb128 0x31
+ 16900 4810 CC0D0000 .long 0xdcc
+ 16901 4814 03 .byte 0x3
+ 16902 4815 91 .byte 0x91
+ 16903 4816 E06D .sleb128 -2336
+ 16904 4818 32 .uleb128 0x32
+ 16905 4819 00000000 .quad .LBB1265
+ 16905 00000000
+ 16906 4821 00000000 .quad .LBE1265
+ 16906 00000000
+ 16907 4829 33 .uleb128 0x33
+ 16908 482a D80D0000 .long 0xdd8
+ 16909 482e 09 .byte 0x9
+ 16910 482f 03 .byte 0x3
+ 16911 4830 00000000 .quad mask.8002
+ 16911 00000000
+ 16912 4838 34 .uleb128 0x34
+ 16913 4839 FB0D0000 .long 0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s page 458
+
+
+ 16914 483d 00000000 .quad .LBB1266
+ 16914 00000000
+ 16915 4845 00000000 .quad .LBE1266
+ 16915 00000000
+ 16916 484d 03 .byte 0x3
+ 16917 484e FE04 .value 0x4fe
+ 16918 4850 31 .uleb128 0x31
+ 16919 4851 190E0000 .long 0xe19
+ 16920 4855 03 .byte 0x3
+ 16921 4856 91 .byte 0x91
+ 16922 4857 F06D .sleb128 -2320
+ 16923 4859 31 .uleb128 0x31
+ 16924 485a 0D0E0000 .long 0xe0d
+ 16925 485e 03 .byte 0x3
+ 16926 485f 91 .byte 0x91
+ 16927 4860 806E .sleb128 -2304
+ 16928 4862 34 .uleb128 0x34
+ 16929 4863 260E0000 .long 0xe26
+ 16930 4867 00000000 .quad .LBB1268
+ 16930 00000000
+ 16931 486f 00000000 .quad .LBE1268
+ 16931 00000000
+ 16932 4877 03 .byte 0x3
+ 16933 4878 7501 .value 0x175
+ 16934 487a 31 .uleb128 0x31
+ 16935 487b 440E0000 .long 0xe44
+ 16936 487f 03 .byte 0x3
+ 16937 4880 91 .byte 0x91
+ 16938 4881 906E .sleb128 -2288
+ 16939 4883 31 .uleb128 0x31
+ 16940 4884 380E0000 .long 0xe38
+ 16941 4888 03 .byte 0x3
+ 16942 4889 91 .byte 0x91
+ 16943 488a A06E .sleb128 -2272
+ 16944 488c 00 .byte 0x0
+ 16945 488d 00 .byte 0x0
+ 16946 488e 00 .byte 0x0
+ 16947 488f 00 .byte 0x0
+ 16948 4890 30 .uleb128 0x30
+ 16949 4891 BA0D0000 .long 0xdba
+ 16950 4895 00000000 .quad .LBB1270
+ 16950 00000000
+ 16951 489d 00000000 .quad .LBE1270
+ 16951 00000000
+ 16952 48a5 03 .byte 0x3
+ 16953 48a6 2006 .value 0x620
+ 16954 48a8 2D490000 .long 0x492d
+ 16955 48ac 31 .uleb128 0x31
+ 16956 48ad CC0D0000 .long 0xdcc
+ 16957 48b1 03 .byte 0x3
+ 16958 48b2 91 .byte 0x91
+ 16959 48b3 B06E .sleb128 -2256
+ 16960 48b5 32 .uleb128 0x32
+ 16961 48b6 00000000 .quad .LBB1271
+ 16961 00000000
+ 16962 48be 00000000 .quad .LBE1271
+ 16962 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 459
+
+
+ 16963 48c6 33 .uleb128 0x33
+ 16964 48c7 D80D0000 .long 0xdd8
+ 16965 48cb 09 .byte 0x9
+ 16966 48cc 03 .byte 0x3
+ 16967 48cd 00000000 .quad mask.8002
+ 16967 00000000
+ 16968 48d5 34 .uleb128 0x34
+ 16969 48d6 FB0D0000 .long 0xdfb
+ 16970 48da 00000000 .quad .LBB1272
+ 16970 00000000
+ 16971 48e2 00000000 .quad .LBE1272
+ 16971 00000000
+ 16972 48ea 03 .byte 0x3
+ 16973 48eb FE04 .value 0x4fe
+ 16974 48ed 31 .uleb128 0x31
+ 16975 48ee 190E0000 .long 0xe19
+ 16976 48f2 03 .byte 0x3
+ 16977 48f3 91 .byte 0x91
+ 16978 48f4 C06E .sleb128 -2240
+ 16979 48f6 31 .uleb128 0x31
+ 16980 48f7 0D0E0000 .long 0xe0d
+ 16981 48fb 03 .byte 0x3
+ 16982 48fc 91 .byte 0x91
+ 16983 48fd D06E .sleb128 -2224
+ 16984 48ff 34 .uleb128 0x34
+ 16985 4900 260E0000 .long 0xe26
+ 16986 4904 00000000 .quad .LBB1274
+ 16986 00000000
+ 16987 490c 00000000 .quad .LBE1274
+ 16987 00000000
+ 16988 4914 03 .byte 0x3
+ 16989 4915 7501 .value 0x175
+ 16990 4917 31 .uleb128 0x31
+ 16991 4918 440E0000 .long 0xe44
+ 16992 491c 03 .byte 0x3
+ 16993 491d 91 .byte 0x91
+ 16994 491e E06E .sleb128 -2208
+ 16995 4920 31 .uleb128 0x31
+ 16996 4921 380E0000 .long 0xe38
+ 16997 4925 03 .byte 0x3
+ 16998 4926 91 .byte 0x91
+ 16999 4927 F06E .sleb128 -2192
+ 17000 4929 00 .byte 0x0
+ 17001 492a 00 .byte 0x0
+ 17002 492b 00 .byte 0x0
+ 17003 492c 00 .byte 0x0
+ 17004 492d 34 .uleb128 0x34
+ 17005 492e BA0D0000 .long 0xdba
+ 17006 4932 00000000 .quad .LBB1276
+ 17006 00000000
+ 17007 493a 00000000 .quad .LBE1276
+ 17007 00000000
+ 17008 4942 03 .byte 0x3
+ 17009 4943 2106 .value 0x621
+ 17010 4945 31 .uleb128 0x31
+ 17011 4946 CC0D0000 .long 0xdcc
+ 17012 494a 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 460
+
+
+ 17013 494b 91 .byte 0x91
+ 17014 494c 806F .sleb128 -2176
+ 17015 494e 32 .uleb128 0x32
+ 17016 494f 00000000 .quad .LBB1277
+ 17016 00000000
+ 17017 4957 00000000 .quad .LBE1277
+ 17017 00000000
+ 17018 495f 33 .uleb128 0x33
+ 17019 4960 D80D0000 .long 0xdd8
+ 17020 4964 09 .byte 0x9
+ 17021 4965 03 .byte 0x3
+ 17022 4966 00000000 .quad mask.8002
+ 17022 00000000
+ 17023 496e 34 .uleb128 0x34
+ 17024 496f FB0D0000 .long 0xdfb
+ 17025 4973 00000000 .quad .LBB1278
+ 17025 00000000
+ 17026 497b 00000000 .quad .LBE1278
+ 17026 00000000
+ 17027 4983 03 .byte 0x3
+ 17028 4984 FE04 .value 0x4fe
+ 17029 4986 31 .uleb128 0x31
+ 17030 4987 190E0000 .long 0xe19
+ 17031 498b 03 .byte 0x3
+ 17032 498c 91 .byte 0x91
+ 17033 498d 906F .sleb128 -2160
+ 17034 498f 31 .uleb128 0x31
+ 17035 4990 0D0E0000 .long 0xe0d
+ 17036 4994 03 .byte 0x3
+ 17037 4995 91 .byte 0x91
+ 17038 4996 A06F .sleb128 -2144
+ 17039 4998 34 .uleb128 0x34
+ 17040 4999 260E0000 .long 0xe26
+ 17041 499d 00000000 .quad .LBB1280
+ 17041 00000000
+ 17042 49a5 00000000 .quad .LBE1280
+ 17042 00000000
+ 17043 49ad 03 .byte 0x3
+ 17044 49ae 7501 .value 0x175
+ 17045 49b0 31 .uleb128 0x31
+ 17046 49b1 440E0000 .long 0xe44
+ 17047 49b5 03 .byte 0x3
+ 17048 49b6 91 .byte 0x91
+ 17049 49b7 B06F .sleb128 -2128
+ 17050 49b9 31 .uleb128 0x31
+ 17051 49ba 380E0000 .long 0xe38
+ 17052 49be 03 .byte 0x3
+ 17053 49bf 91 .byte 0x91
+ 17054 49c0 C06F .sleb128 -2112
+ 17055 49c2 00 .byte 0x0
+ 17056 49c3 00 .byte 0x0
+ 17057 49c4 00 .byte 0x0
+ 17058 49c5 00 .byte 0x0
+ 17059 49c6 00 .byte 0x0
+ 17060 49c7 00 .byte 0x0
+ 17061 49c8 30 .uleb128 0x30
+ 17062 49c9 450D0000 .long 0xd45
+
GAS LISTING /tmp/ccPaCTqg.s page 461
+
+
+ 17063 49cd 00000000 .quad .LBB1282
+ 17063 00000000
+ 17064 49d5 00000000 .quad .LBE1282
+ 17064 00000000
+ 17065 49dd 03 .byte 0x3
+ 17066 49de 3707 .value 0x737
+ 17067 49e0 194A0000 .long 0x4a19
+ 17068 49e4 31 .uleb128 0x31
+ 17069 49e5 570D0000 .long 0xd57
+ 17070 49e9 03 .byte 0x3
+ 17071 49ea 91 .byte 0x91
+ 17072 49eb D06F .sleb128 -2096
+ 17073 49ed 34 .uleb128 0x34
+ 17074 49ee 640D0000 .long 0xd64
+ 17075 49f2 00000000 .quad .LBB1284
+ 17075 00000000
+ 17076 49fa 00000000 .quad .LBE1284
+ 17076 00000000
+ 17077 4a02 03 .byte 0x3
+ 17078 4a03 4905 .value 0x549
+ 17079 4a05 31 .uleb128 0x31
+ 17080 4a06 820D0000 .long 0xd82
+ 17081 4a0a 03 .byte 0x3
+ 17082 4a0b 91 .byte 0x91
+ 17083 4a0c EC6F .sleb128 -2068
+ 17084 4a0e 31 .uleb128 0x31
+ 17085 4a0f 760D0000 .long 0xd76
+ 17086 4a13 03 .byte 0x3
+ 17087 4a14 91 .byte 0x91
+ 17088 4a15 F06F .sleb128 -2064
+ 17089 4a17 00 .byte 0x0
+ 17090 4a18 00 .byte 0x0
+ 17091 4a19 30 .uleb128 0x30
+ 17092 4a1a 142C0000 .long 0x2c14
+ 17093 4a1e 00000000 .quad .LBB1286
+ 17093 00000000
+ 17094 4a26 00000000 .quad .LBE1286
+ 17094 00000000
+ 17095 4a2e 03 .byte 0x3
+ 17096 4a2f 3907 .value 0x739
+ 17097 4a31 7C4A0000 .long 0x4a7c
+ 17098 4a35 31 .uleb128 0x31
+ 17099 4a36 302C0000 .long 0x2c30
+ 17100 4a3a 03 .byte 0x3
+ 17101 4a3b 91 .byte 0x91
+ 17102 4a3c 8070 .sleb128 -2048
+ 17103 4a3e 31 .uleb128 0x31
+ 17104 4a3f 262C0000 .long 0x2c26
+ 17105 4a43 03 .byte 0x3
+ 17106 4a44 91 .byte 0x91
+ 17107 4a45 9070 .sleb128 -2032
+ 17108 4a47 34 .uleb128 0x34
+ 17109 4a48 3B2C0000 .long 0x2c3b
+ 17110 4a4c 00000000 .quad .LBB1288
+ 17110 00000000
+ 17111 4a54 00000000 .quad .LBE1288
+ 17111 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 462
+
+
+ 17112 4a5c 03 .byte 0x3
+ 17113 4a5d BA05 .value 0x5ba
+ 17114 4a5f 31 .uleb128 0x31
+ 17115 4a60 652C0000 .long 0x2c65
+ 17116 4a64 03 .byte 0x3
+ 17117 4a65 91 .byte 0x91
+ 17118 4a66 AC70 .sleb128 -2004
+ 17119 4a68 31 .uleb128 0x31
+ 17120 4a69 592C0000 .long 0x2c59
+ 17121 4a6d 03 .byte 0x3
+ 17122 4a6e 91 .byte 0x91
+ 17123 4a6f B070 .sleb128 -2000
+ 17124 4a71 31 .uleb128 0x31
+ 17125 4a72 4D2C0000 .long 0x2c4d
+ 17126 4a76 03 .byte 0x3
+ 17127 4a77 91 .byte 0x91
+ 17128 4a78 C070 .sleb128 -1984
+ 17129 4a7a 00 .byte 0x0
+ 17130 4a7b 00 .byte 0x0
+ 17131 4a7c 30 .uleb128 0x30
+ 17132 4a7d 722C0000 .long 0x2c72
+ 17133 4a81 00000000 .quad .LBB1290
+ 17133 00000000
+ 17134 4a89 00000000 .quad .LBE1290
+ 17134 00000000
+ 17135 4a91 03 .byte 0x3
+ 17136 4a92 3D07 .value 0x73d
+ 17137 4a94 DF4A0000 .long 0x4adf
+ 17138 4a98 31 .uleb128 0x31
+ 17139 4a99 8E2C0000 .long 0x2c8e
+ 17140 4a9d 03 .byte 0x3
+ 17141 4a9e 91 .byte 0x91
+ 17142 4a9f D070 .sleb128 -1968
+ 17143 4aa1 31 .uleb128 0x31
+ 17144 4aa2 842C0000 .long 0x2c84
+ 17145 4aa6 03 .byte 0x3
+ 17146 4aa7 91 .byte 0x91
+ 17147 4aa8 E070 .sleb128 -1952
+ 17148 4aaa 34 .uleb128 0x34
+ 17149 4aab 3B2C0000 .long 0x2c3b
+ 17150 4aaf 00000000 .quad .LBB1292
+ 17150 00000000
+ 17151 4ab7 00000000 .quad .LBE1292
+ 17151 00000000
+ 17152 4abf 03 .byte 0x3
+ 17153 4ac0 DA05 .value 0x5da
+ 17154 4ac2 31 .uleb128 0x31
+ 17155 4ac3 652C0000 .long 0x2c65
+ 17156 4ac7 03 .byte 0x3
+ 17157 4ac8 91 .byte 0x91
+ 17158 4ac9 FC70 .sleb128 -1924
+ 17159 4acb 31 .uleb128 0x31
+ 17160 4acc 592C0000 .long 0x2c59
+ 17161 4ad0 03 .byte 0x3
+ 17162 4ad1 91 .byte 0x91
+ 17163 4ad2 8071 .sleb128 -1920
+ 17164 4ad4 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 463
+
+
+ 17165 4ad5 4D2C0000 .long 0x2c4d
+ 17166 4ad9 03 .byte 0x3
+ 17167 4ada 91 .byte 0x91
+ 17168 4adb 9071 .sleb128 -1904
+ 17169 4add 00 .byte 0x0
+ 17170 4ade 00 .byte 0x0
+ 17171 4adf 30 .uleb128 0x30
+ 17172 4ae0 8F0D0000 .long 0xd8f
+ 17173 4ae4 00000000 .quad .LBB1294
+ 17173 00000000
+ 17174 4aec 00000000 .quad .LBE1294
+ 17174 00000000
+ 17175 4af4 03 .byte 0x3
+ 17176 4af5 4007 .value 0x740
+ 17177 4af7 F34C0000 .long 0x4cf3
+ 17178 4afb 31 .uleb128 0x31
+ 17179 4afc A10D0000 .long 0xda1
+ 17180 4b00 03 .byte 0x3
+ 17181 4b01 91 .byte 0x91
+ 17182 4b02 A071 .sleb128 -1888
+ 17183 4b04 32 .uleb128 0x32
+ 17184 4b05 00000000 .quad .LBB1295
+ 17184 00000000
+ 17185 4b0d 00000000 .quad .LBE1295
+ 17185 00000000
+ 17186 4b15 33 .uleb128 0x33
+ 17187 4b16 AD0D0000 .long 0xdad
+ 17188 4b1a 03 .byte 0x3
+ 17189 4b1b 76 .byte 0x76
+ 17190 4b1c C051 .sleb128 -5952
+ 17191 4b1e 30 .uleb128 0x30
+ 17192 4b1f BA0D0000 .long 0xdba
+ 17193 4b23 00000000 .quad .LBB1296
+ 17193 00000000
+ 17194 4b2b 00000000 .quad .LBE1296
+ 17194 00000000
+ 17195 4b33 03 .byte 0x3
+ 17196 4b34 1F06 .value 0x61f
+ 17197 4b36 BB4B0000 .long 0x4bbb
+ 17198 4b3a 31 .uleb128 0x31
+ 17199 4b3b CC0D0000 .long 0xdcc
+ 17200 4b3f 03 .byte 0x3
+ 17201 4b40 91 .byte 0x91
+ 17202 4b41 B071 .sleb128 -1872
+ 17203 4b43 32 .uleb128 0x32
+ 17204 4b44 00000000 .quad .LBB1297
+ 17204 00000000
+ 17205 4b4c 00000000 .quad .LBE1297
+ 17205 00000000
+ 17206 4b54 33 .uleb128 0x33
+ 17207 4b55 D80D0000 .long 0xdd8
+ 17208 4b59 09 .byte 0x9
+ 17209 4b5a 03 .byte 0x3
+ 17210 4b5b 00000000 .quad mask.8002
+ 17210 00000000
+ 17211 4b63 34 .uleb128 0x34
+ 17212 4b64 FB0D0000 .long 0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s page 464
+
+
+ 17213 4b68 00000000 .quad .LBB1298
+ 17213 00000000
+ 17214 4b70 00000000 .quad .LBE1298
+ 17214 00000000
+ 17215 4b78 03 .byte 0x3
+ 17216 4b79 FE04 .value 0x4fe
+ 17217 4b7b 31 .uleb128 0x31
+ 17218 4b7c 190E0000 .long 0xe19
+ 17219 4b80 03 .byte 0x3
+ 17220 4b81 91 .byte 0x91
+ 17221 4b82 C071 .sleb128 -1856
+ 17222 4b84 31 .uleb128 0x31
+ 17223 4b85 0D0E0000 .long 0xe0d
+ 17224 4b89 03 .byte 0x3
+ 17225 4b8a 91 .byte 0x91
+ 17226 4b8b D071 .sleb128 -1840
+ 17227 4b8d 34 .uleb128 0x34
+ 17228 4b8e 260E0000 .long 0xe26
+ 17229 4b92 00000000 .quad .LBB1300
+ 17229 00000000
+ 17230 4b9a 00000000 .quad .LBE1300
+ 17230 00000000
+ 17231 4ba2 03 .byte 0x3
+ 17232 4ba3 7501 .value 0x175
+ 17233 4ba5 31 .uleb128 0x31
+ 17234 4ba6 440E0000 .long 0xe44
+ 17235 4baa 03 .byte 0x3
+ 17236 4bab 91 .byte 0x91
+ 17237 4bac E071 .sleb128 -1824
+ 17238 4bae 31 .uleb128 0x31
+ 17239 4baf 380E0000 .long 0xe38
+ 17240 4bb3 03 .byte 0x3
+ 17241 4bb4 91 .byte 0x91
+ 17242 4bb5 F071 .sleb128 -1808
+ 17243 4bb7 00 .byte 0x0
+ 17244 4bb8 00 .byte 0x0
+ 17245 4bb9 00 .byte 0x0
+ 17246 4bba 00 .byte 0x0
+ 17247 4bbb 30 .uleb128 0x30
+ 17248 4bbc BA0D0000 .long 0xdba
+ 17249 4bc0 00000000 .quad .LBB1302
+ 17249 00000000
+ 17250 4bc8 00000000 .quad .LBE1302
+ 17250 00000000
+ 17251 4bd0 03 .byte 0x3
+ 17252 4bd1 2006 .value 0x620
+ 17253 4bd3 584C0000 .long 0x4c58
+ 17254 4bd7 31 .uleb128 0x31
+ 17255 4bd8 CC0D0000 .long 0xdcc
+ 17256 4bdc 03 .byte 0x3
+ 17257 4bdd 91 .byte 0x91
+ 17258 4bde 8072 .sleb128 -1792
+ 17259 4be0 32 .uleb128 0x32
+ 17260 4be1 00000000 .quad .LBB1303
+ 17260 00000000
+ 17261 4be9 00000000 .quad .LBE1303
+ 17261 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 465
+
+
+ 17262 4bf1 33 .uleb128 0x33
+ 17263 4bf2 D80D0000 .long 0xdd8
+ 17264 4bf6 09 .byte 0x9
+ 17265 4bf7 03 .byte 0x3
+ 17266 4bf8 00000000 .quad mask.8002
+ 17266 00000000
+ 17267 4c00 34 .uleb128 0x34
+ 17268 4c01 FB0D0000 .long 0xdfb
+ 17269 4c05 00000000 .quad .LBB1304
+ 17269 00000000
+ 17270 4c0d 00000000 .quad .LBE1304
+ 17270 00000000
+ 17271 4c15 03 .byte 0x3
+ 17272 4c16 FE04 .value 0x4fe
+ 17273 4c18 31 .uleb128 0x31
+ 17274 4c19 190E0000 .long 0xe19
+ 17275 4c1d 03 .byte 0x3
+ 17276 4c1e 91 .byte 0x91
+ 17277 4c1f 9072 .sleb128 -1776
+ 17278 4c21 31 .uleb128 0x31
+ 17279 4c22 0D0E0000 .long 0xe0d
+ 17280 4c26 03 .byte 0x3
+ 17281 4c27 91 .byte 0x91
+ 17282 4c28 A072 .sleb128 -1760
+ 17283 4c2a 34 .uleb128 0x34
+ 17284 4c2b 260E0000 .long 0xe26
+ 17285 4c2f 00000000 .quad .LBB1306
+ 17285 00000000
+ 17286 4c37 00000000 .quad .LBE1306
+ 17286 00000000
+ 17287 4c3f 03 .byte 0x3
+ 17288 4c40 7501 .value 0x175
+ 17289 4c42 31 .uleb128 0x31
+ 17290 4c43 440E0000 .long 0xe44
+ 17291 4c47 03 .byte 0x3
+ 17292 4c48 91 .byte 0x91
+ 17293 4c49 B072 .sleb128 -1744
+ 17294 4c4b 31 .uleb128 0x31
+ 17295 4c4c 380E0000 .long 0xe38
+ 17296 4c50 03 .byte 0x3
+ 17297 4c51 91 .byte 0x91
+ 17298 4c52 C072 .sleb128 -1728
+ 17299 4c54 00 .byte 0x0
+ 17300 4c55 00 .byte 0x0
+ 17301 4c56 00 .byte 0x0
+ 17302 4c57 00 .byte 0x0
+ 17303 4c58 34 .uleb128 0x34
+ 17304 4c59 BA0D0000 .long 0xdba
+ 17305 4c5d 00000000 .quad .LBB1308
+ 17305 00000000
+ 17306 4c65 00000000 .quad .LBE1308
+ 17306 00000000
+ 17307 4c6d 03 .byte 0x3
+ 17308 4c6e 2106 .value 0x621
+ 17309 4c70 31 .uleb128 0x31
+ 17310 4c71 CC0D0000 .long 0xdcc
+ 17311 4c75 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 466
+
+
+ 17312 4c76 91 .byte 0x91
+ 17313 4c77 D072 .sleb128 -1712
+ 17314 4c79 32 .uleb128 0x32
+ 17315 4c7a 00000000 .quad .LBB1309
+ 17315 00000000
+ 17316 4c82 00000000 .quad .LBE1309
+ 17316 00000000
+ 17317 4c8a 33 .uleb128 0x33
+ 17318 4c8b D80D0000 .long 0xdd8
+ 17319 4c8f 09 .byte 0x9
+ 17320 4c90 03 .byte 0x3
+ 17321 4c91 00000000 .quad mask.8002
+ 17321 00000000
+ 17322 4c99 34 .uleb128 0x34
+ 17323 4c9a FB0D0000 .long 0xdfb
+ 17324 4c9e 00000000 .quad .LBB1310
+ 17324 00000000
+ 17325 4ca6 00000000 .quad .LBE1310
+ 17325 00000000
+ 17326 4cae 03 .byte 0x3
+ 17327 4caf FE04 .value 0x4fe
+ 17328 4cb1 31 .uleb128 0x31
+ 17329 4cb2 190E0000 .long 0xe19
+ 17330 4cb6 03 .byte 0x3
+ 17331 4cb7 91 .byte 0x91
+ 17332 4cb8 E072 .sleb128 -1696
+ 17333 4cba 31 .uleb128 0x31
+ 17334 4cbb 0D0E0000 .long 0xe0d
+ 17335 4cbf 03 .byte 0x3
+ 17336 4cc0 91 .byte 0x91
+ 17337 4cc1 F072 .sleb128 -1680
+ 17338 4cc3 34 .uleb128 0x34
+ 17339 4cc4 260E0000 .long 0xe26
+ 17340 4cc8 00000000 .quad .LBB1312
+ 17340 00000000
+ 17341 4cd0 00000000 .quad .LBE1312
+ 17341 00000000
+ 17342 4cd8 03 .byte 0x3
+ 17343 4cd9 7501 .value 0x175
+ 17344 4cdb 31 .uleb128 0x31
+ 17345 4cdc 440E0000 .long 0xe44
+ 17346 4ce0 03 .byte 0x3
+ 17347 4ce1 91 .byte 0x91
+ 17348 4ce2 8073 .sleb128 -1664
+ 17349 4ce4 31 .uleb128 0x31
+ 17350 4ce5 380E0000 .long 0xe38
+ 17351 4ce9 03 .byte 0x3
+ 17352 4cea 91 .byte 0x91
+ 17353 4ceb 9073 .sleb128 -1648
+ 17354 4ced 00 .byte 0x0
+ 17355 4cee 00 .byte 0x0
+ 17356 4cef 00 .byte 0x0
+ 17357 4cf0 00 .byte 0x0
+ 17358 4cf1 00 .byte 0x0
+ 17359 4cf2 00 .byte 0x0
+ 17360 4cf3 30 .uleb128 0x30
+ 17361 4cf4 8F0D0000 .long 0xd8f
+
GAS LISTING /tmp/ccPaCTqg.s page 467
+
+
+ 17362 4cf8 00000000 .quad .LBB1314
+ 17362 00000000
+ 17363 4d00 00000000 .quad .LBE1314
+ 17363 00000000
+ 17364 4d08 03 .byte 0x3
+ 17365 4d09 4107 .value 0x741
+ 17366 4d0b 074F0000 .long 0x4f07
+ 17367 4d0f 31 .uleb128 0x31
+ 17368 4d10 A10D0000 .long 0xda1
+ 17369 4d14 03 .byte 0x3
+ 17370 4d15 91 .byte 0x91
+ 17371 4d16 A073 .sleb128 -1632
+ 17372 4d18 32 .uleb128 0x32
+ 17373 4d19 00000000 .quad .LBB1315
+ 17373 00000000
+ 17374 4d21 00000000 .quad .LBE1315
+ 17374 00000000
+ 17375 4d29 33 .uleb128 0x33
+ 17376 4d2a AD0D0000 .long 0xdad
+ 17377 4d2e 03 .byte 0x3
+ 17378 4d2f 76 .byte 0x76
+ 17379 4d30 D051 .sleb128 -5936
+ 17380 4d32 30 .uleb128 0x30
+ 17381 4d33 BA0D0000 .long 0xdba
+ 17382 4d37 00000000 .quad .LBB1316
+ 17382 00000000
+ 17383 4d3f 00000000 .quad .LBE1316
+ 17383 00000000
+ 17384 4d47 03 .byte 0x3
+ 17385 4d48 1F06 .value 0x61f
+ 17386 4d4a CF4D0000 .long 0x4dcf
+ 17387 4d4e 31 .uleb128 0x31
+ 17388 4d4f CC0D0000 .long 0xdcc
+ 17389 4d53 03 .byte 0x3
+ 17390 4d54 91 .byte 0x91
+ 17391 4d55 B073 .sleb128 -1616
+ 17392 4d57 32 .uleb128 0x32
+ 17393 4d58 00000000 .quad .LBB1317
+ 17393 00000000
+ 17394 4d60 00000000 .quad .LBE1317
+ 17394 00000000
+ 17395 4d68 33 .uleb128 0x33
+ 17396 4d69 D80D0000 .long 0xdd8
+ 17397 4d6d 09 .byte 0x9
+ 17398 4d6e 03 .byte 0x3
+ 17399 4d6f 00000000 .quad mask.8002
+ 17399 00000000
+ 17400 4d77 34 .uleb128 0x34
+ 17401 4d78 FB0D0000 .long 0xdfb
+ 17402 4d7c 00000000 .quad .LBB1318
+ 17402 00000000
+ 17403 4d84 00000000 .quad .LBE1318
+ 17403 00000000
+ 17404 4d8c 03 .byte 0x3
+ 17405 4d8d FE04 .value 0x4fe
+ 17406 4d8f 31 .uleb128 0x31
+ 17407 4d90 190E0000 .long 0xe19
+
GAS LISTING /tmp/ccPaCTqg.s page 468
+
+
+ 17408 4d94 03 .byte 0x3
+ 17409 4d95 91 .byte 0x91
+ 17410 4d96 C073 .sleb128 -1600
+ 17411 4d98 31 .uleb128 0x31
+ 17412 4d99 0D0E0000 .long 0xe0d
+ 17413 4d9d 03 .byte 0x3
+ 17414 4d9e 91 .byte 0x91
+ 17415 4d9f D073 .sleb128 -1584
+ 17416 4da1 34 .uleb128 0x34
+ 17417 4da2 260E0000 .long 0xe26
+ 17418 4da6 00000000 .quad .LBB1320
+ 17418 00000000
+ 17419 4dae 00000000 .quad .LBE1320
+ 17419 00000000
+ 17420 4db6 03 .byte 0x3
+ 17421 4db7 7501 .value 0x175
+ 17422 4db9 31 .uleb128 0x31
+ 17423 4dba 440E0000 .long 0xe44
+ 17424 4dbe 03 .byte 0x3
+ 17425 4dbf 91 .byte 0x91
+ 17426 4dc0 E073 .sleb128 -1568
+ 17427 4dc2 31 .uleb128 0x31
+ 17428 4dc3 380E0000 .long 0xe38
+ 17429 4dc7 03 .byte 0x3
+ 17430 4dc8 91 .byte 0x91
+ 17431 4dc9 F073 .sleb128 -1552
+ 17432 4dcb 00 .byte 0x0
+ 17433 4dcc 00 .byte 0x0
+ 17434 4dcd 00 .byte 0x0
+ 17435 4dce 00 .byte 0x0
+ 17436 4dcf 30 .uleb128 0x30
+ 17437 4dd0 BA0D0000 .long 0xdba
+ 17438 4dd4 00000000 .quad .LBB1322
+ 17438 00000000
+ 17439 4ddc 00000000 .quad .LBE1322
+ 17439 00000000
+ 17440 4de4 03 .byte 0x3
+ 17441 4de5 2006 .value 0x620
+ 17442 4de7 6C4E0000 .long 0x4e6c
+ 17443 4deb 31 .uleb128 0x31
+ 17444 4dec CC0D0000 .long 0xdcc
+ 17445 4df0 03 .byte 0x3
+ 17446 4df1 91 .byte 0x91
+ 17447 4df2 8074 .sleb128 -1536
+ 17448 4df4 32 .uleb128 0x32
+ 17449 4df5 00000000 .quad .LBB1323
+ 17449 00000000
+ 17450 4dfd 00000000 .quad .LBE1323
+ 17450 00000000
+ 17451 4e05 33 .uleb128 0x33
+ 17452 4e06 D80D0000 .long 0xdd8
+ 17453 4e0a 09 .byte 0x9
+ 17454 4e0b 03 .byte 0x3
+ 17455 4e0c 00000000 .quad mask.8002
+ 17455 00000000
+ 17456 4e14 34 .uleb128 0x34
+ 17457 4e15 FB0D0000 .long 0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s page 469
+
+
+ 17458 4e19 00000000 .quad .LBB1324
+ 17458 00000000
+ 17459 4e21 00000000 .quad .LBE1324
+ 17459 00000000
+ 17460 4e29 03 .byte 0x3
+ 17461 4e2a FE04 .value 0x4fe
+ 17462 4e2c 31 .uleb128 0x31
+ 17463 4e2d 190E0000 .long 0xe19
+ 17464 4e31 03 .byte 0x3
+ 17465 4e32 91 .byte 0x91
+ 17466 4e33 9074 .sleb128 -1520
+ 17467 4e35 31 .uleb128 0x31
+ 17468 4e36 0D0E0000 .long 0xe0d
+ 17469 4e3a 03 .byte 0x3
+ 17470 4e3b 91 .byte 0x91
+ 17471 4e3c A074 .sleb128 -1504
+ 17472 4e3e 34 .uleb128 0x34
+ 17473 4e3f 260E0000 .long 0xe26
+ 17474 4e43 00000000 .quad .LBB1326
+ 17474 00000000
+ 17475 4e4b 00000000 .quad .LBE1326
+ 17475 00000000
+ 17476 4e53 03 .byte 0x3
+ 17477 4e54 7501 .value 0x175
+ 17478 4e56 31 .uleb128 0x31
+ 17479 4e57 440E0000 .long 0xe44
+ 17480 4e5b 03 .byte 0x3
+ 17481 4e5c 91 .byte 0x91
+ 17482 4e5d B074 .sleb128 -1488
+ 17483 4e5f 31 .uleb128 0x31
+ 17484 4e60 380E0000 .long 0xe38
+ 17485 4e64 03 .byte 0x3
+ 17486 4e65 91 .byte 0x91
+ 17487 4e66 C074 .sleb128 -1472
+ 17488 4e68 00 .byte 0x0
+ 17489 4e69 00 .byte 0x0
+ 17490 4e6a 00 .byte 0x0
+ 17491 4e6b 00 .byte 0x0
+ 17492 4e6c 34 .uleb128 0x34
+ 17493 4e6d BA0D0000 .long 0xdba
+ 17494 4e71 00000000 .quad .LBB1328
+ 17494 00000000
+ 17495 4e79 00000000 .quad .LBE1328
+ 17495 00000000
+ 17496 4e81 03 .byte 0x3
+ 17497 4e82 2106 .value 0x621
+ 17498 4e84 31 .uleb128 0x31
+ 17499 4e85 CC0D0000 .long 0xdcc
+ 17500 4e89 03 .byte 0x3
+ 17501 4e8a 91 .byte 0x91
+ 17502 4e8b D074 .sleb128 -1456
+ 17503 4e8d 32 .uleb128 0x32
+ 17504 4e8e 00000000 .quad .LBB1329
+ 17504 00000000
+ 17505 4e96 00000000 .quad .LBE1329
+ 17505 00000000
+ 17506 4e9e 33 .uleb128 0x33
+
GAS LISTING /tmp/ccPaCTqg.s page 470
+
+
+ 17507 4e9f D80D0000 .long 0xdd8
+ 17508 4ea3 09 .byte 0x9
+ 17509 4ea4 03 .byte 0x3
+ 17510 4ea5 00000000 .quad mask.8002
+ 17510 00000000
+ 17511 4ead 34 .uleb128 0x34
+ 17512 4eae FB0D0000 .long 0xdfb
+ 17513 4eb2 00000000 .quad .LBB1330
+ 17513 00000000
+ 17514 4eba 00000000 .quad .LBE1330
+ 17514 00000000
+ 17515 4ec2 03 .byte 0x3
+ 17516 4ec3 FE04 .value 0x4fe
+ 17517 4ec5 31 .uleb128 0x31
+ 17518 4ec6 190E0000 .long 0xe19
+ 17519 4eca 03 .byte 0x3
+ 17520 4ecb 91 .byte 0x91
+ 17521 4ecc E074 .sleb128 -1440
+ 17522 4ece 31 .uleb128 0x31
+ 17523 4ecf 0D0E0000 .long 0xe0d
+ 17524 4ed3 03 .byte 0x3
+ 17525 4ed4 91 .byte 0x91
+ 17526 4ed5 F074 .sleb128 -1424
+ 17527 4ed7 34 .uleb128 0x34
+ 17528 4ed8 260E0000 .long 0xe26
+ 17529 4edc 00000000 .quad .LBB1332
+ 17529 00000000
+ 17530 4ee4 00000000 .quad .LBE1332
+ 17530 00000000
+ 17531 4eec 03 .byte 0x3
+ 17532 4eed 7501 .value 0x175
+ 17533 4eef 31 .uleb128 0x31
+ 17534 4ef0 440E0000 .long 0xe44
+ 17535 4ef4 03 .byte 0x3
+ 17536 4ef5 91 .byte 0x91
+ 17537 4ef6 8075 .sleb128 -1408
+ 17538 4ef8 31 .uleb128 0x31
+ 17539 4ef9 380E0000 .long 0xe38
+ 17540 4efd 03 .byte 0x3
+ 17541 4efe 91 .byte 0x91
+ 17542 4eff 9075 .sleb128 -1392
+ 17543 4f01 00 .byte 0x0
+ 17544 4f02 00 .byte 0x0
+ 17545 4f03 00 .byte 0x0
+ 17546 4f04 00 .byte 0x0
+ 17547 4f05 00 .byte 0x0
+ 17548 4f06 00 .byte 0x0
+ 17549 4f07 30 .uleb128 0x30
+ 17550 4f08 E30C0000 .long 0xce3
+ 17551 4f0c 00000000 .quad .LBB1334
+ 17551 00000000
+ 17552 4f14 00000000 .quad .LBE1334
+ 17552 00000000
+ 17553 4f1c 03 .byte 0x3
+ 17554 4f1d 4207 .value 0x742
+ 17555 4f1f CD4F0000 .long 0x4fcd
+ 17556 4f23 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 471
+
+
+ 17557 4f24 010D0000 .long 0xd01
+ 17558 4f28 03 .byte 0x3
+ 17559 4f29 91 .byte 0x91
+ 17560 4f2a AC75 .sleb128 -1364
+ 17561 4f2c 31 .uleb128 0x31
+ 17562 4f2d F50C0000 .long 0xcf5
+ 17563 4f31 03 .byte 0x3
+ 17564 4f32 91 .byte 0x91
+ 17565 4f33 B075 .sleb128 -1360
+ 17566 4f35 32 .uleb128 0x32
+ 17567 4f36 00000000 .quad .LBB1335
+ 17567 00000000
+ 17568 4f3e 00000000 .quad .LBE1335
+ 17568 00000000
+ 17569 4f46 33 .uleb128 0x33
+ 17570 4f47 0D0D0000 .long 0xd0d
+ 17571 4f4b 03 .byte 0x3
+ 17572 4f4c 76 .byte 0x76
+ 17573 4f4d E051 .sleb128 -5920
+ 17574 4f4f 30 .uleb128 0x30
+ 17575 4f50 1A0D0000 .long 0xd1a
+ 17576 4f54 00000000 .quad .LBB1336
+ 17576 00000000
+ 17577 4f5c 00000000 .quad .LBE1336
+ 17577 00000000
+ 17578 4f64 03 .byte 0x3
+ 17579 4f65 8A06 .value 0x68a
+ 17580 4f67 7E4F0000 .long 0x4f7e
+ 17581 4f6b 31 .uleb128 0x31
+ 17582 4f6c 380D0000 .long 0xd38
+ 17583 4f70 03 .byte 0x3
+ 17584 4f71 91 .byte 0x91
+ 17585 4f72 CC75 .sleb128 -1332
+ 17586 4f74 31 .uleb128 0x31
+ 17587 4f75 2C0D0000 .long 0xd2c
+ 17588 4f79 03 .byte 0x3
+ 17589 4f7a 91 .byte 0x91
+ 17590 4f7b D075 .sleb128 -1328
+ 17591 4f7d 00 .byte 0x0
+ 17592 4f7e 34 .uleb128 0x34
+ 17593 4f7f 450D0000 .long 0xd45
+ 17594 4f83 00000000 .quad .LBB1338
+ 17594 00000000
+ 17595 4f8b 00000000 .quad .LBE1338
+ 17595 00000000
+ 17596 4f93 03 .byte 0x3
+ 17597 4f94 8B06 .value 0x68b
+ 17598 4f96 31 .uleb128 0x31
+ 17599 4f97 570D0000 .long 0xd57
+ 17600 4f9b 03 .byte 0x3
+ 17601 4f9c 91 .byte 0x91
+ 17602 4f9d E075 .sleb128 -1312
+ 17603 4f9f 34 .uleb128 0x34
+ 17604 4fa0 640D0000 .long 0xd64
+ 17605 4fa4 00000000 .quad .LBB1340
+ 17605 00000000
+ 17606 4fac 00000000 .quad .LBE1340
+
GAS LISTING /tmp/ccPaCTqg.s page 472
+
+
+ 17606 00000000
+ 17607 4fb4 03 .byte 0x3
+ 17608 4fb5 4905 .value 0x549
+ 17609 4fb7 31 .uleb128 0x31
+ 17610 4fb8 820D0000 .long 0xd82
+ 17611 4fbc 03 .byte 0x3
+ 17612 4fbd 91 .byte 0x91
+ 17613 4fbe FC75 .sleb128 -1284
+ 17614 4fc0 31 .uleb128 0x31
+ 17615 4fc1 760D0000 .long 0xd76
+ 17616 4fc5 03 .byte 0x3
+ 17617 4fc6 91 .byte 0x91
+ 17618 4fc7 8076 .sleb128 -1280
+ 17619 4fc9 00 .byte 0x0
+ 17620 4fca 00 .byte 0x0
+ 17621 4fcb 00 .byte 0x0
+ 17622 4fcc 00 .byte 0x0
+ 17623 4fcd 30 .uleb128 0x30
+ 17624 4fce 450D0000 .long 0xd45
+ 17625 4fd2 00000000 .quad .LBB1342
+ 17625 00000000
+ 17626 4fda 00000000 .quad .LBE1342
+ 17626 00000000
+ 17627 4fe2 03 .byte 0x3
+ 17628 4fe3 4507 .value 0x745
+ 17629 4fe5 1E500000 .long 0x501e
+ 17630 4fe9 31 .uleb128 0x31
+ 17631 4fea 570D0000 .long 0xd57
+ 17632 4fee 03 .byte 0x3
+ 17633 4fef 91 .byte 0x91
+ 17634 4ff0 9076 .sleb128 -1264
+ 17635 4ff2 34 .uleb128 0x34
+ 17636 4ff3 640D0000 .long 0xd64
+ 17637 4ff7 00000000 .quad .LBB1344
+ 17637 00000000
+ 17638 4fff 00000000 .quad .LBE1344
+ 17638 00000000
+ 17639 5007 03 .byte 0x3
+ 17640 5008 4905 .value 0x549
+ 17641 500a 31 .uleb128 0x31
+ 17642 500b 820D0000 .long 0xd82
+ 17643 500f 03 .byte 0x3
+ 17644 5010 91 .byte 0x91
+ 17645 5011 AC76 .sleb128 -1236
+ 17646 5013 31 .uleb128 0x31
+ 17647 5014 760D0000 .long 0xd76
+ 17648 5018 03 .byte 0x3
+ 17649 5019 91 .byte 0x91
+ 17650 501a B076 .sleb128 -1232
+ 17651 501c 00 .byte 0x0
+ 17652 501d 00 .byte 0x0
+ 17653 501e 30 .uleb128 0x30
+ 17654 501f BE2B0000 .long 0x2bbe
+ 17655 5023 00000000 .quad .LBB1346
+ 17655 00000000
+ 17656 502b 00000000 .quad .LBE1346
+ 17656 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 473
+
+
+ 17657 5033 03 .byte 0x3
+ 17658 5034 4D07 .value 0x74d
+ 17659 5036 E4500000 .long 0x50e4
+ 17660 503a 31 .uleb128 0x31
+ 17661 503b DC2B0000 .long 0x2bdc
+ 17662 503f 03 .byte 0x3
+ 17663 5040 91 .byte 0x91
+ 17664 5041 CC76 .sleb128 -1204
+ 17665 5043 31 .uleb128 0x31
+ 17666 5044 D02B0000 .long 0x2bd0
+ 17667 5048 03 .byte 0x3
+ 17668 5049 91 .byte 0x91
+ 17669 504a D076 .sleb128 -1200
+ 17670 504c 32 .uleb128 0x32
+ 17671 504d 00000000 .quad .LBB1347
+ 17671 00000000
+ 17672 5055 00000000 .quad .LBE1347
+ 17672 00000000
+ 17673 505d 33 .uleb128 0x33
+ 17674 505e E82B0000 .long 0x2be8
+ 17675 5062 03 .byte 0x3
+ 17676 5063 76 .byte 0x76
+ 17677 5064 F051 .sleb128 -5904
+ 17678 5066 30 .uleb128 0x30
+ 17679 5067 1A0D0000 .long 0xd1a
+ 17680 506b 00000000 .quad .LBB1348
+ 17680 00000000
+ 17681 5073 00000000 .quad .LBE1348
+ 17681 00000000
+ 17682 507b 03 .byte 0x3
+ 17683 507c 5606 .value 0x656
+ 17684 507e 95500000 .long 0x5095
+ 17685 5082 31 .uleb128 0x31
+ 17686 5083 380D0000 .long 0xd38
+ 17687 5087 03 .byte 0x3
+ 17688 5088 91 .byte 0x91
+ 17689 5089 EC76 .sleb128 -1172
+ 17690 508b 31 .uleb128 0x31
+ 17691 508c 2C0D0000 .long 0xd2c
+ 17692 5090 03 .byte 0x3
+ 17693 5091 91 .byte 0x91
+ 17694 5092 F076 .sleb128 -1168
+ 17695 5094 00 .byte 0x0
+ 17696 5095 34 .uleb128 0x34
+ 17697 5096 F52B0000 .long 0x2bf5
+ 17698 509a 00000000 .quad .LBB1350
+ 17698 00000000
+ 17699 50a2 00000000 .quad .LBE1350
+ 17699 00000000
+ 17700 50aa 03 .byte 0x3
+ 17701 50ab 5706 .value 0x657
+ 17702 50ad 31 .uleb128 0x31
+ 17703 50ae 072C0000 .long 0x2c07
+ 17704 50b2 03 .byte 0x3
+ 17705 50b3 91 .byte 0x91
+ 17706 50b4 8077 .sleb128 -1152
+ 17707 50b6 34 .uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s page 474
+
+
+ 17708 50b7 640D0000 .long 0xd64
+ 17709 50bb 00000000 .quad .LBB1352
+ 17709 00000000
+ 17710 50c3 00000000 .quad .LBE1352
+ 17710 00000000
+ 17711 50cb 03 .byte 0x3
+ 17712 50cc 8105 .value 0x581
+ 17713 50ce 31 .uleb128 0x31
+ 17714 50cf 820D0000 .long 0xd82
+ 17715 50d3 03 .byte 0x3
+ 17716 50d4 91 .byte 0x91
+ 17717 50d5 9C77 .sleb128 -1124
+ 17718 50d7 31 .uleb128 0x31
+ 17719 50d8 760D0000 .long 0xd76
+ 17720 50dc 03 .byte 0x3
+ 17721 50dd 91 .byte 0x91
+ 17722 50de A077 .sleb128 -1120
+ 17723 50e0 00 .byte 0x0
+ 17724 50e1 00 .byte 0x0
+ 17725 50e2 00 .byte 0x0
+ 17726 50e3 00 .byte 0x0
+ 17727 50e4 30 .uleb128 0x30
+ 17728 50e5 8F0D0000 .long 0xd8f
+ 17729 50e9 00000000 .quad .LBB1354
+ 17729 00000000
+ 17730 50f1 00000000 .quad .LBE1354
+ 17730 00000000
+ 17731 50f9 03 .byte 0x3
+ 17732 50fa 4F07 .value 0x74f
+ 17733 50fc F8520000 .long 0x52f8
+ 17734 5100 31 .uleb128 0x31
+ 17735 5101 A10D0000 .long 0xda1
+ 17736 5105 03 .byte 0x3
+ 17737 5106 91 .byte 0x91
+ 17738 5107 B077 .sleb128 -1104
+ 17739 5109 32 .uleb128 0x32
+ 17740 510a 00000000 .quad .LBB1355
+ 17740 00000000
+ 17741 5112 00000000 .quad .LBE1355
+ 17741 00000000
+ 17742 511a 33 .uleb128 0x33
+ 17743 511b AD0D0000 .long 0xdad
+ 17744 511f 03 .byte 0x3
+ 17745 5120 76 .byte 0x76
+ 17746 5121 8052 .sleb128 -5888
+ 17747 5123 30 .uleb128 0x30
+ 17748 5124 BA0D0000 .long 0xdba
+ 17749 5128 00000000 .quad .LBB1356
+ 17749 00000000
+ 17750 5130 00000000 .quad .LBE1356
+ 17750 00000000
+ 17751 5138 03 .byte 0x3
+ 17752 5139 1F06 .value 0x61f
+ 17753 513b C0510000 .long 0x51c0
+ 17754 513f 31 .uleb128 0x31
+ 17755 5140 CC0D0000 .long 0xdcc
+ 17756 5144 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 475
+
+
+ 17757 5145 91 .byte 0x91
+ 17758 5146 C077 .sleb128 -1088
+ 17759 5148 32 .uleb128 0x32
+ 17760 5149 00000000 .quad .LBB1357
+ 17760 00000000
+ 17761 5151 00000000 .quad .LBE1357
+ 17761 00000000
+ 17762 5159 33 .uleb128 0x33
+ 17763 515a D80D0000 .long 0xdd8
+ 17764 515e 09 .byte 0x9
+ 17765 515f 03 .byte 0x3
+ 17766 5160 00000000 .quad mask.8002
+ 17766 00000000
+ 17767 5168 34 .uleb128 0x34
+ 17768 5169 FB0D0000 .long 0xdfb
+ 17769 516d 00000000 .quad .LBB1358
+ 17769 00000000
+ 17770 5175 00000000 .quad .LBE1358
+ 17770 00000000
+ 17771 517d 03 .byte 0x3
+ 17772 517e FE04 .value 0x4fe
+ 17773 5180 31 .uleb128 0x31
+ 17774 5181 190E0000 .long 0xe19
+ 17775 5185 03 .byte 0x3
+ 17776 5186 91 .byte 0x91
+ 17777 5187 D077 .sleb128 -1072
+ 17778 5189 31 .uleb128 0x31
+ 17779 518a 0D0E0000 .long 0xe0d
+ 17780 518e 03 .byte 0x3
+ 17781 518f 91 .byte 0x91
+ 17782 5190 E077 .sleb128 -1056
+ 17783 5192 34 .uleb128 0x34
+ 17784 5193 260E0000 .long 0xe26
+ 17785 5197 00000000 .quad .LBB1360
+ 17785 00000000
+ 17786 519f 00000000 .quad .LBE1360
+ 17786 00000000
+ 17787 51a7 03 .byte 0x3
+ 17788 51a8 7501 .value 0x175
+ 17789 51aa 31 .uleb128 0x31
+ 17790 51ab 440E0000 .long 0xe44
+ 17791 51af 03 .byte 0x3
+ 17792 51b0 91 .byte 0x91
+ 17793 51b1 F077 .sleb128 -1040
+ 17794 51b3 31 .uleb128 0x31
+ 17795 51b4 380E0000 .long 0xe38
+ 17796 51b8 03 .byte 0x3
+ 17797 51b9 91 .byte 0x91
+ 17798 51ba 8078 .sleb128 -1024
+ 17799 51bc 00 .byte 0x0
+ 17800 51bd 00 .byte 0x0
+ 17801 51be 00 .byte 0x0
+ 17802 51bf 00 .byte 0x0
+ 17803 51c0 30 .uleb128 0x30
+ 17804 51c1 BA0D0000 .long 0xdba
+ 17805 51c5 00000000 .quad .LBB1362
+ 17805 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 476
+
+
+ 17806 51cd 00000000 .quad .LBE1362
+ 17806 00000000
+ 17807 51d5 03 .byte 0x3
+ 17808 51d6 2006 .value 0x620
+ 17809 51d8 5D520000 .long 0x525d
+ 17810 51dc 31 .uleb128 0x31
+ 17811 51dd CC0D0000 .long 0xdcc
+ 17812 51e1 03 .byte 0x3
+ 17813 51e2 91 .byte 0x91
+ 17814 51e3 9078 .sleb128 -1008
+ 17815 51e5 32 .uleb128 0x32
+ 17816 51e6 00000000 .quad .LBB1363
+ 17816 00000000
+ 17817 51ee 00000000 .quad .LBE1363
+ 17817 00000000
+ 17818 51f6 33 .uleb128 0x33
+ 17819 51f7 D80D0000 .long 0xdd8
+ 17820 51fb 09 .byte 0x9
+ 17821 51fc 03 .byte 0x3
+ 17822 51fd 00000000 .quad mask.8002
+ 17822 00000000
+ 17823 5205 34 .uleb128 0x34
+ 17824 5206 FB0D0000 .long 0xdfb
+ 17825 520a 00000000 .quad .LBB1364
+ 17825 00000000
+ 17826 5212 00000000 .quad .LBE1364
+ 17826 00000000
+ 17827 521a 03 .byte 0x3
+ 17828 521b FE04 .value 0x4fe
+ 17829 521d 31 .uleb128 0x31
+ 17830 521e 190E0000 .long 0xe19
+ 17831 5222 03 .byte 0x3
+ 17832 5223 91 .byte 0x91
+ 17833 5224 A078 .sleb128 -992
+ 17834 5226 31 .uleb128 0x31
+ 17835 5227 0D0E0000 .long 0xe0d
+ 17836 522b 03 .byte 0x3
+ 17837 522c 91 .byte 0x91
+ 17838 522d B078 .sleb128 -976
+ 17839 522f 34 .uleb128 0x34
+ 17840 5230 260E0000 .long 0xe26
+ 17841 5234 00000000 .quad .LBB1366
+ 17841 00000000
+ 17842 523c 00000000 .quad .LBE1366
+ 17842 00000000
+ 17843 5244 03 .byte 0x3
+ 17844 5245 7501 .value 0x175
+ 17845 5247 31 .uleb128 0x31
+ 17846 5248 440E0000 .long 0xe44
+ 17847 524c 03 .byte 0x3
+ 17848 524d 91 .byte 0x91
+ 17849 524e C078 .sleb128 -960
+ 17850 5250 31 .uleb128 0x31
+ 17851 5251 380E0000 .long 0xe38
+ 17852 5255 03 .byte 0x3
+ 17853 5256 91 .byte 0x91
+ 17854 5257 D078 .sleb128 -944
+
GAS LISTING /tmp/ccPaCTqg.s page 477
+
+
+ 17855 5259 00 .byte 0x0
+ 17856 525a 00 .byte 0x0
+ 17857 525b 00 .byte 0x0
+ 17858 525c 00 .byte 0x0
+ 17859 525d 34 .uleb128 0x34
+ 17860 525e BA0D0000 .long 0xdba
+ 17861 5262 00000000 .quad .LBB1368
+ 17861 00000000
+ 17862 526a 00000000 .quad .LBE1368
+ 17862 00000000
+ 17863 5272 03 .byte 0x3
+ 17864 5273 2106 .value 0x621
+ 17865 5275 31 .uleb128 0x31
+ 17866 5276 CC0D0000 .long 0xdcc
+ 17867 527a 03 .byte 0x3
+ 17868 527b 91 .byte 0x91
+ 17869 527c E078 .sleb128 -928
+ 17870 527e 32 .uleb128 0x32
+ 17871 527f 00000000 .quad .LBB1369
+ 17871 00000000
+ 17872 5287 00000000 .quad .LBE1369
+ 17872 00000000
+ 17873 528f 33 .uleb128 0x33
+ 17874 5290 D80D0000 .long 0xdd8
+ 17875 5294 09 .byte 0x9
+ 17876 5295 03 .byte 0x3
+ 17877 5296 00000000 .quad mask.8002
+ 17877 00000000
+ 17878 529e 34 .uleb128 0x34
+ 17879 529f FB0D0000 .long 0xdfb
+ 17880 52a3 00000000 .quad .LBB1370
+ 17880 00000000
+ 17881 52ab 00000000 .quad .LBE1370
+ 17881 00000000
+ 17882 52b3 03 .byte 0x3
+ 17883 52b4 FE04 .value 0x4fe
+ 17884 52b6 31 .uleb128 0x31
+ 17885 52b7 190E0000 .long 0xe19
+ 17886 52bb 03 .byte 0x3
+ 17887 52bc 91 .byte 0x91
+ 17888 52bd F078 .sleb128 -912
+ 17889 52bf 31 .uleb128 0x31
+ 17890 52c0 0D0E0000 .long 0xe0d
+ 17891 52c4 03 .byte 0x3
+ 17892 52c5 91 .byte 0x91
+ 17893 52c6 8079 .sleb128 -896
+ 17894 52c8 34 .uleb128 0x34
+ 17895 52c9 260E0000 .long 0xe26
+ 17896 52cd 00000000 .quad .LBB1372
+ 17896 00000000
+ 17897 52d5 00000000 .quad .LBE1372
+ 17897 00000000
+ 17898 52dd 03 .byte 0x3
+ 17899 52de 7501 .value 0x175
+ 17900 52e0 31 .uleb128 0x31
+ 17901 52e1 440E0000 .long 0xe44
+ 17902 52e5 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 478
+
+
+ 17903 52e6 91 .byte 0x91
+ 17904 52e7 9079 .sleb128 -880
+ 17905 52e9 31 .uleb128 0x31
+ 17906 52ea 380E0000 .long 0xe38
+ 17907 52ee 03 .byte 0x3
+ 17908 52ef 91 .byte 0x91
+ 17909 52f0 A079 .sleb128 -864
+ 17910 52f2 00 .byte 0x0
+ 17911 52f3 00 .byte 0x0
+ 17912 52f4 00 .byte 0x0
+ 17913 52f5 00 .byte 0x0
+ 17914 52f6 00 .byte 0x0
+ 17915 52f7 00 .byte 0x0
+ 17916 52f8 30 .uleb128 0x30
+ 17917 52f9 8F0D0000 .long 0xd8f
+ 17918 52fd 00000000 .quad .LBB1374
+ 17918 00000000
+ 17919 5305 00000000 .quad .LBE1374
+ 17919 00000000
+ 17920 530d 03 .byte 0x3
+ 17921 530e 5007 .value 0x750
+ 17922 5310 0C550000 .long 0x550c
+ 17923 5314 31 .uleb128 0x31
+ 17924 5315 A10D0000 .long 0xda1
+ 17925 5319 03 .byte 0x3
+ 17926 531a 91 .byte 0x91
+ 17927 531b B079 .sleb128 -848
+ 17928 531d 32 .uleb128 0x32
+ 17929 531e 00000000 .quad .LBB1375
+ 17929 00000000
+ 17930 5326 00000000 .quad .LBE1375
+ 17930 00000000
+ 17931 532e 33 .uleb128 0x33
+ 17932 532f AD0D0000 .long 0xdad
+ 17933 5333 03 .byte 0x3
+ 17934 5334 76 .byte 0x76
+ 17935 5335 9052 .sleb128 -5872
+ 17936 5337 30 .uleb128 0x30
+ 17937 5338 BA0D0000 .long 0xdba
+ 17938 533c 00000000 .quad .LBB1376
+ 17938 00000000
+ 17939 5344 00000000 .quad .LBE1376
+ 17939 00000000
+ 17940 534c 03 .byte 0x3
+ 17941 534d 1F06 .value 0x61f
+ 17942 534f D4530000 .long 0x53d4
+ 17943 5353 31 .uleb128 0x31
+ 17944 5354 CC0D0000 .long 0xdcc
+ 17945 5358 03 .byte 0x3
+ 17946 5359 91 .byte 0x91
+ 17947 535a C079 .sleb128 -832
+ 17948 535c 32 .uleb128 0x32
+ 17949 535d 00000000 .quad .LBB1377
+ 17949 00000000
+ 17950 5365 00000000 .quad .LBE1377
+ 17950 00000000
+ 17951 536d 33 .uleb128 0x33
+
GAS LISTING /tmp/ccPaCTqg.s page 479
+
+
+ 17952 536e D80D0000 .long 0xdd8
+ 17953 5372 09 .byte 0x9
+ 17954 5373 03 .byte 0x3
+ 17955 5374 00000000 .quad mask.8002
+ 17955 00000000
+ 17956 537c 34 .uleb128 0x34
+ 17957 537d FB0D0000 .long 0xdfb
+ 17958 5381 00000000 .quad .LBB1378
+ 17958 00000000
+ 17959 5389 00000000 .quad .LBE1378
+ 17959 00000000
+ 17960 5391 03 .byte 0x3
+ 17961 5392 FE04 .value 0x4fe
+ 17962 5394 31 .uleb128 0x31
+ 17963 5395 190E0000 .long 0xe19
+ 17964 5399 03 .byte 0x3
+ 17965 539a 91 .byte 0x91
+ 17966 539b D079 .sleb128 -816
+ 17967 539d 31 .uleb128 0x31
+ 17968 539e 0D0E0000 .long 0xe0d
+ 17969 53a2 03 .byte 0x3
+ 17970 53a3 91 .byte 0x91
+ 17971 53a4 E079 .sleb128 -800
+ 17972 53a6 34 .uleb128 0x34
+ 17973 53a7 260E0000 .long 0xe26
+ 17974 53ab 00000000 .quad .LBB1380
+ 17974 00000000
+ 17975 53b3 00000000 .quad .LBE1380
+ 17975 00000000
+ 17976 53bb 03 .byte 0x3
+ 17977 53bc 7501 .value 0x175
+ 17978 53be 31 .uleb128 0x31
+ 17979 53bf 440E0000 .long 0xe44
+ 17980 53c3 03 .byte 0x3
+ 17981 53c4 91 .byte 0x91
+ 17982 53c5 F079 .sleb128 -784
+ 17983 53c7 31 .uleb128 0x31
+ 17984 53c8 380E0000 .long 0xe38
+ 17985 53cc 03 .byte 0x3
+ 17986 53cd 91 .byte 0x91
+ 17987 53ce 807A .sleb128 -768
+ 17988 53d0 00 .byte 0x0
+ 17989 53d1 00 .byte 0x0
+ 17990 53d2 00 .byte 0x0
+ 17991 53d3 00 .byte 0x0
+ 17992 53d4 30 .uleb128 0x30
+ 17993 53d5 BA0D0000 .long 0xdba
+ 17994 53d9 00000000 .quad .LBB1382
+ 17994 00000000
+ 17995 53e1 00000000 .quad .LBE1382
+ 17995 00000000
+ 17996 53e9 03 .byte 0x3
+ 17997 53ea 2006 .value 0x620
+ 17998 53ec 71540000 .long 0x5471
+ 17999 53f0 31 .uleb128 0x31
+ 18000 53f1 CC0D0000 .long 0xdcc
+ 18001 53f5 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 480
+
+
+ 18002 53f6 91 .byte 0x91
+ 18003 53f7 907A .sleb128 -752
+ 18004 53f9 32 .uleb128 0x32
+ 18005 53fa 00000000 .quad .LBB1383
+ 18005 00000000
+ 18006 5402 00000000 .quad .LBE1383
+ 18006 00000000
+ 18007 540a 33 .uleb128 0x33
+ 18008 540b D80D0000 .long 0xdd8
+ 18009 540f 09 .byte 0x9
+ 18010 5410 03 .byte 0x3
+ 18011 5411 00000000 .quad mask.8002
+ 18011 00000000
+ 18012 5419 34 .uleb128 0x34
+ 18013 541a FB0D0000 .long 0xdfb
+ 18014 541e 00000000 .quad .LBB1384
+ 18014 00000000
+ 18015 5426 00000000 .quad .LBE1384
+ 18015 00000000
+ 18016 542e 03 .byte 0x3
+ 18017 542f FE04 .value 0x4fe
+ 18018 5431 31 .uleb128 0x31
+ 18019 5432 190E0000 .long 0xe19
+ 18020 5436 03 .byte 0x3
+ 18021 5437 91 .byte 0x91
+ 18022 5438 A07A .sleb128 -736
+ 18023 543a 31 .uleb128 0x31
+ 18024 543b 0D0E0000 .long 0xe0d
+ 18025 543f 03 .byte 0x3
+ 18026 5440 91 .byte 0x91
+ 18027 5441 B07A .sleb128 -720
+ 18028 5443 34 .uleb128 0x34
+ 18029 5444 260E0000 .long 0xe26
+ 18030 5448 00000000 .quad .LBB1386
+ 18030 00000000
+ 18031 5450 00000000 .quad .LBE1386
+ 18031 00000000
+ 18032 5458 03 .byte 0x3
+ 18033 5459 7501 .value 0x175
+ 18034 545b 31 .uleb128 0x31
+ 18035 545c 440E0000 .long 0xe44
+ 18036 5460 03 .byte 0x3
+ 18037 5461 91 .byte 0x91
+ 18038 5462 C07A .sleb128 -704
+ 18039 5464 31 .uleb128 0x31
+ 18040 5465 380E0000 .long 0xe38
+ 18041 5469 03 .byte 0x3
+ 18042 546a 91 .byte 0x91
+ 18043 546b D07A .sleb128 -688
+ 18044 546d 00 .byte 0x0
+ 18045 546e 00 .byte 0x0
+ 18046 546f 00 .byte 0x0
+ 18047 5470 00 .byte 0x0
+ 18048 5471 34 .uleb128 0x34
+ 18049 5472 BA0D0000 .long 0xdba
+ 18050 5476 00000000 .quad .LBB1388
+ 18050 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 481
+
+
+ 18051 547e 00000000 .quad .LBE1388
+ 18051 00000000
+ 18052 5486 03 .byte 0x3
+ 18053 5487 2106 .value 0x621
+ 18054 5489 31 .uleb128 0x31
+ 18055 548a CC0D0000 .long 0xdcc
+ 18056 548e 03 .byte 0x3
+ 18057 548f 91 .byte 0x91
+ 18058 5490 E07A .sleb128 -672
+ 18059 5492 32 .uleb128 0x32
+ 18060 5493 00000000 .quad .LBB1389
+ 18060 00000000
+ 18061 549b 00000000 .quad .LBE1389
+ 18061 00000000
+ 18062 54a3 33 .uleb128 0x33
+ 18063 54a4 D80D0000 .long 0xdd8
+ 18064 54a8 09 .byte 0x9
+ 18065 54a9 03 .byte 0x3
+ 18066 54aa 00000000 .quad mask.8002
+ 18066 00000000
+ 18067 54b2 34 .uleb128 0x34
+ 18068 54b3 FB0D0000 .long 0xdfb
+ 18069 54b7 00000000 .quad .LBB1390
+ 18069 00000000
+ 18070 54bf 00000000 .quad .LBE1390
+ 18070 00000000
+ 18071 54c7 03 .byte 0x3
+ 18072 54c8 FE04 .value 0x4fe
+ 18073 54ca 31 .uleb128 0x31
+ 18074 54cb 190E0000 .long 0xe19
+ 18075 54cf 03 .byte 0x3
+ 18076 54d0 91 .byte 0x91
+ 18077 54d1 F07A .sleb128 -656
+ 18078 54d3 31 .uleb128 0x31
+ 18079 54d4 0D0E0000 .long 0xe0d
+ 18080 54d8 03 .byte 0x3
+ 18081 54d9 91 .byte 0x91
+ 18082 54da 807B .sleb128 -640
+ 18083 54dc 34 .uleb128 0x34
+ 18084 54dd 260E0000 .long 0xe26
+ 18085 54e1 00000000 .quad .LBB1392
+ 18085 00000000
+ 18086 54e9 00000000 .quad .LBE1392
+ 18086 00000000
+ 18087 54f1 03 .byte 0x3
+ 18088 54f2 7501 .value 0x175
+ 18089 54f4 31 .uleb128 0x31
+ 18090 54f5 440E0000 .long 0xe44
+ 18091 54f9 03 .byte 0x3
+ 18092 54fa 91 .byte 0x91
+ 18093 54fb 907B .sleb128 -624
+ 18094 54fd 31 .uleb128 0x31
+ 18095 54fe 380E0000 .long 0xe38
+ 18096 5502 03 .byte 0x3
+ 18097 5503 91 .byte 0x91
+ 18098 5504 A07B .sleb128 -608
+ 18099 5506 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 482
+
+
+ 18100 5507 00 .byte 0x0
+ 18101 5508 00 .byte 0x0
+ 18102 5509 00 .byte 0x0
+ 18103 550a 00 .byte 0x0
+ 18104 550b 00 .byte 0x0
+ 18105 550c 30 .uleb128 0x30
+ 18106 550d 450D0000 .long 0xd45
+ 18107 5511 00000000 .quad .LBB1394
+ 18107 00000000
+ 18108 5519 00000000 .quad .LBE1394
+ 18108 00000000
+ 18109 5521 03 .byte 0x3
+ 18110 5522 5207 .value 0x752
+ 18111 5524 5D550000 .long 0x555d
+ 18112 5528 31 .uleb128 0x31
+ 18113 5529 570D0000 .long 0xd57
+ 18114 552d 03 .byte 0x3
+ 18115 552e 91 .byte 0x91
+ 18116 552f B07B .sleb128 -592
+ 18117 5531 34 .uleb128 0x34
+ 18118 5532 640D0000 .long 0xd64
+ 18119 5536 00000000 .quad .LBB1396
+ 18119 00000000
+ 18120 553e 00000000 .quad .LBE1396
+ 18120 00000000
+ 18121 5546 03 .byte 0x3
+ 18122 5547 4905 .value 0x549
+ 18123 5549 31 .uleb128 0x31
+ 18124 554a 820D0000 .long 0xd82
+ 18125 554e 03 .byte 0x3
+ 18126 554f 91 .byte 0x91
+ 18127 5550 CC7B .sleb128 -564
+ 18128 5552 31 .uleb128 0x31
+ 18129 5553 760D0000 .long 0xd76
+ 18130 5557 03 .byte 0x3
+ 18131 5558 91 .byte 0x91
+ 18132 5559 D07B .sleb128 -560
+ 18133 555b 00 .byte 0x0
+ 18134 555c 00 .byte 0x0
+ 18135 555d 30 .uleb128 0x30
+ 18136 555e 142C0000 .long 0x2c14
+ 18137 5562 00000000 .quad .LBB1398
+ 18137 00000000
+ 18138 556a 00000000 .quad .LBE1398
+ 18138 00000000
+ 18139 5572 03 .byte 0x3
+ 18140 5573 5407 .value 0x754
+ 18141 5575 C0550000 .long 0x55c0
+ 18142 5579 31 .uleb128 0x31
+ 18143 557a 302C0000 .long 0x2c30
+ 18144 557e 03 .byte 0x3
+ 18145 557f 91 .byte 0x91
+ 18146 5580 E07B .sleb128 -544
+ 18147 5582 31 .uleb128 0x31
+ 18148 5583 262C0000 .long 0x2c26
+ 18149 5587 03 .byte 0x3
+ 18150 5588 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 483
+
+
+ 18151 5589 F07B .sleb128 -528
+ 18152 558b 34 .uleb128 0x34
+ 18153 558c 3B2C0000 .long 0x2c3b
+ 18154 5590 00000000 .quad .LBB1400
+ 18154 00000000
+ 18155 5598 00000000 .quad .LBE1400
+ 18155 00000000
+ 18156 55a0 03 .byte 0x3
+ 18157 55a1 BA05 .value 0x5ba
+ 18158 55a3 31 .uleb128 0x31
+ 18159 55a4 652C0000 .long 0x2c65
+ 18160 55a8 03 .byte 0x3
+ 18161 55a9 91 .byte 0x91
+ 18162 55aa 8C7C .sleb128 -500
+ 18163 55ac 31 .uleb128 0x31
+ 18164 55ad 592C0000 .long 0x2c59
+ 18165 55b1 03 .byte 0x3
+ 18166 55b2 91 .byte 0x91
+ 18167 55b3 907C .sleb128 -496
+ 18168 55b5 31 .uleb128 0x31
+ 18169 55b6 4D2C0000 .long 0x2c4d
+ 18170 55ba 03 .byte 0x3
+ 18171 55bb 91 .byte 0x91
+ 18172 55bc A07C .sleb128 -480
+ 18173 55be 00 .byte 0x0
+ 18174 55bf 00 .byte 0x0
+ 18175 55c0 30 .uleb128 0x30
+ 18176 55c1 722C0000 .long 0x2c72
+ 18177 55c5 00000000 .quad .LBB1402
+ 18177 00000000
+ 18178 55cd 00000000 .quad .LBE1402
+ 18178 00000000
+ 18179 55d5 03 .byte 0x3
+ 18180 55d6 5607 .value 0x756
+ 18181 55d8 23560000 .long 0x5623
+ 18182 55dc 31 .uleb128 0x31
+ 18183 55dd 8E2C0000 .long 0x2c8e
+ 18184 55e1 03 .byte 0x3
+ 18185 55e2 91 .byte 0x91
+ 18186 55e3 B07C .sleb128 -464
+ 18187 55e5 31 .uleb128 0x31
+ 18188 55e6 842C0000 .long 0x2c84
+ 18189 55ea 03 .byte 0x3
+ 18190 55eb 91 .byte 0x91
+ 18191 55ec C07C .sleb128 -448
+ 18192 55ee 34 .uleb128 0x34
+ 18193 55ef 3B2C0000 .long 0x2c3b
+ 18194 55f3 00000000 .quad .LBB1404
+ 18194 00000000
+ 18195 55fb 00000000 .quad .LBE1404
+ 18195 00000000
+ 18196 5603 03 .byte 0x3
+ 18197 5604 DA05 .value 0x5da
+ 18198 5606 31 .uleb128 0x31
+ 18199 5607 652C0000 .long 0x2c65
+ 18200 560b 03 .byte 0x3
+ 18201 560c 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 484
+
+
+ 18202 560d DC7C .sleb128 -420
+ 18203 560f 31 .uleb128 0x31
+ 18204 5610 592C0000 .long 0x2c59
+ 18205 5614 03 .byte 0x3
+ 18206 5615 91 .byte 0x91
+ 18207 5616 E07C .sleb128 -416
+ 18208 5618 31 .uleb128 0x31
+ 18209 5619 4D2C0000 .long 0x2c4d
+ 18210 561d 03 .byte 0x3
+ 18211 561e 91 .byte 0x91
+ 18212 561f F07C .sleb128 -400
+ 18213 5621 00 .byte 0x0
+ 18214 5622 00 .byte 0x0
+ 18215 5623 30 .uleb128 0x30
+ 18216 5624 8F0D0000 .long 0xd8f
+ 18217 5628 00000000 .quad .LBB1406
+ 18217 00000000
+ 18218 5630 00000000 .quad .LBE1406
+ 18218 00000000
+ 18219 5638 03 .byte 0x3
+ 18220 5639 5A07 .value 0x75a
+ 18221 563b 37580000 .long 0x5837
+ 18222 563f 31 .uleb128 0x31
+ 18223 5640 A10D0000 .long 0xda1
+ 18224 5644 03 .byte 0x3
+ 18225 5645 91 .byte 0x91
+ 18226 5646 807D .sleb128 -384
+ 18227 5648 32 .uleb128 0x32
+ 18228 5649 00000000 .quad .LBB1407
+ 18228 00000000
+ 18229 5651 00000000 .quad .LBE1407
+ 18229 00000000
+ 18230 5659 33 .uleb128 0x33
+ 18231 565a AD0D0000 .long 0xdad
+ 18232 565e 03 .byte 0x3
+ 18233 565f 76 .byte 0x76
+ 18234 5660 A052 .sleb128 -5856
+ 18235 5662 30 .uleb128 0x30
+ 18236 5663 BA0D0000 .long 0xdba
+ 18237 5667 00000000 .quad .LBB1408
+ 18237 00000000
+ 18238 566f 00000000 .quad .LBE1408
+ 18238 00000000
+ 18239 5677 03 .byte 0x3
+ 18240 5678 1F06 .value 0x61f
+ 18241 567a FF560000 .long 0x56ff
+ 18242 567e 31 .uleb128 0x31
+ 18243 567f CC0D0000 .long 0xdcc
+ 18244 5683 03 .byte 0x3
+ 18245 5684 91 .byte 0x91
+ 18246 5685 907D .sleb128 -368
+ 18247 5687 32 .uleb128 0x32
+ 18248 5688 00000000 .quad .LBB1409
+ 18248 00000000
+ 18249 5690 00000000 .quad .LBE1409
+ 18249 00000000
+ 18250 5698 33 .uleb128 0x33
+
GAS LISTING /tmp/ccPaCTqg.s page 485
+
+
+ 18251 5699 D80D0000 .long 0xdd8
+ 18252 569d 09 .byte 0x9
+ 18253 569e 03 .byte 0x3
+ 18254 569f 00000000 .quad mask.8002
+ 18254 00000000
+ 18255 56a7 34 .uleb128 0x34
+ 18256 56a8 FB0D0000 .long 0xdfb
+ 18257 56ac 00000000 .quad .LBB1410
+ 18257 00000000
+ 18258 56b4 00000000 .quad .LBE1410
+ 18258 00000000
+ 18259 56bc 03 .byte 0x3
+ 18260 56bd FE04 .value 0x4fe
+ 18261 56bf 31 .uleb128 0x31
+ 18262 56c0 190E0000 .long 0xe19
+ 18263 56c4 03 .byte 0x3
+ 18264 56c5 91 .byte 0x91
+ 18265 56c6 A07D .sleb128 -352
+ 18266 56c8 31 .uleb128 0x31
+ 18267 56c9 0D0E0000 .long 0xe0d
+ 18268 56cd 03 .byte 0x3
+ 18269 56ce 91 .byte 0x91
+ 18270 56cf B07D .sleb128 -336
+ 18271 56d1 34 .uleb128 0x34
+ 18272 56d2 260E0000 .long 0xe26
+ 18273 56d6 00000000 .quad .LBB1412
+ 18273 00000000
+ 18274 56de 00000000 .quad .LBE1412
+ 18274 00000000
+ 18275 56e6 03 .byte 0x3
+ 18276 56e7 7501 .value 0x175
+ 18277 56e9 31 .uleb128 0x31
+ 18278 56ea 440E0000 .long 0xe44
+ 18279 56ee 03 .byte 0x3
+ 18280 56ef 91 .byte 0x91
+ 18281 56f0 C07D .sleb128 -320
+ 18282 56f2 31 .uleb128 0x31
+ 18283 56f3 380E0000 .long 0xe38
+ 18284 56f7 03 .byte 0x3
+ 18285 56f8 91 .byte 0x91
+ 18286 56f9 D07D .sleb128 -304
+ 18287 56fb 00 .byte 0x0
+ 18288 56fc 00 .byte 0x0
+ 18289 56fd 00 .byte 0x0
+ 18290 56fe 00 .byte 0x0
+ 18291 56ff 30 .uleb128 0x30
+ 18292 5700 BA0D0000 .long 0xdba
+ 18293 5704 00000000 .quad .LBB1414
+ 18293 00000000
+ 18294 570c 00000000 .quad .LBE1414
+ 18294 00000000
+ 18295 5714 03 .byte 0x3
+ 18296 5715 2006 .value 0x620
+ 18297 5717 9C570000 .long 0x579c
+ 18298 571b 31 .uleb128 0x31
+ 18299 571c CC0D0000 .long 0xdcc
+ 18300 5720 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 486
+
+
+ 18301 5721 91 .byte 0x91
+ 18302 5722 E07D .sleb128 -288
+ 18303 5724 32 .uleb128 0x32
+ 18304 5725 00000000 .quad .LBB1415
+ 18304 00000000
+ 18305 572d 00000000 .quad .LBE1415
+ 18305 00000000
+ 18306 5735 33 .uleb128 0x33
+ 18307 5736 D80D0000 .long 0xdd8
+ 18308 573a 09 .byte 0x9
+ 18309 573b 03 .byte 0x3
+ 18310 573c 00000000 .quad mask.8002
+ 18310 00000000
+ 18311 5744 34 .uleb128 0x34
+ 18312 5745 FB0D0000 .long 0xdfb
+ 18313 5749 00000000 .quad .LBB1416
+ 18313 00000000
+ 18314 5751 00000000 .quad .LBE1416
+ 18314 00000000
+ 18315 5759 03 .byte 0x3
+ 18316 575a FE04 .value 0x4fe
+ 18317 575c 31 .uleb128 0x31
+ 18318 575d 190E0000 .long 0xe19
+ 18319 5761 03 .byte 0x3
+ 18320 5762 91 .byte 0x91
+ 18321 5763 F07D .sleb128 -272
+ 18322 5765 31 .uleb128 0x31
+ 18323 5766 0D0E0000 .long 0xe0d
+ 18324 576a 03 .byte 0x3
+ 18325 576b 91 .byte 0x91
+ 18326 576c 807E .sleb128 -256
+ 18327 576e 34 .uleb128 0x34
+ 18328 576f 260E0000 .long 0xe26
+ 18329 5773 00000000 .quad .LBB1418
+ 18329 00000000
+ 18330 577b 00000000 .quad .LBE1418
+ 18330 00000000
+ 18331 5783 03 .byte 0x3
+ 18332 5784 7501 .value 0x175
+ 18333 5786 31 .uleb128 0x31
+ 18334 5787 440E0000 .long 0xe44
+ 18335 578b 03 .byte 0x3
+ 18336 578c 91 .byte 0x91
+ 18337 578d 907E .sleb128 -240
+ 18338 578f 31 .uleb128 0x31
+ 18339 5790 380E0000 .long 0xe38
+ 18340 5794 03 .byte 0x3
+ 18341 5795 91 .byte 0x91
+ 18342 5796 A07E .sleb128 -224
+ 18343 5798 00 .byte 0x0
+ 18344 5799 00 .byte 0x0
+ 18345 579a 00 .byte 0x0
+ 18346 579b 00 .byte 0x0
+ 18347 579c 34 .uleb128 0x34
+ 18348 579d BA0D0000 .long 0xdba
+ 18349 57a1 00000000 .quad .LBB1420
+ 18349 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 487
+
+
+ 18350 57a9 00000000 .quad .LBE1420
+ 18350 00000000
+ 18351 57b1 03 .byte 0x3
+ 18352 57b2 2106 .value 0x621
+ 18353 57b4 31 .uleb128 0x31
+ 18354 57b5 CC0D0000 .long 0xdcc
+ 18355 57b9 03 .byte 0x3
+ 18356 57ba 91 .byte 0x91
+ 18357 57bb B07E .sleb128 -208
+ 18358 57bd 32 .uleb128 0x32
+ 18359 57be 00000000 .quad .LBB1421
+ 18359 00000000
+ 18360 57c6 00000000 .quad .LBE1421
+ 18360 00000000
+ 18361 57ce 33 .uleb128 0x33
+ 18362 57cf D80D0000 .long 0xdd8
+ 18363 57d3 09 .byte 0x9
+ 18364 57d4 03 .byte 0x3
+ 18365 57d5 00000000 .quad mask.8002
+ 18365 00000000
+ 18366 57dd 34 .uleb128 0x34
+ 18367 57de FB0D0000 .long 0xdfb
+ 18368 57e2 00000000 .quad .LBB1422
+ 18368 00000000
+ 18369 57ea 00000000 .quad .LBE1422
+ 18369 00000000
+ 18370 57f2 03 .byte 0x3
+ 18371 57f3 FE04 .value 0x4fe
+ 18372 57f5 31 .uleb128 0x31
+ 18373 57f6 190E0000 .long 0xe19
+ 18374 57fa 03 .byte 0x3
+ 18375 57fb 91 .byte 0x91
+ 18376 57fc C07E .sleb128 -192
+ 18377 57fe 31 .uleb128 0x31
+ 18378 57ff 0D0E0000 .long 0xe0d
+ 18379 5803 03 .byte 0x3
+ 18380 5804 91 .byte 0x91
+ 18381 5805 D07E .sleb128 -176
+ 18382 5807 34 .uleb128 0x34
+ 18383 5808 260E0000 .long 0xe26
+ 18384 580c 00000000 .quad .LBB1424
+ 18384 00000000
+ 18385 5814 00000000 .quad .LBE1424
+ 18385 00000000
+ 18386 581c 03 .byte 0x3
+ 18387 581d 7501 .value 0x175
+ 18388 581f 31 .uleb128 0x31
+ 18389 5820 440E0000 .long 0xe44
+ 18390 5824 03 .byte 0x3
+ 18391 5825 91 .byte 0x91
+ 18392 5826 E07E .sleb128 -160
+ 18393 5828 31 .uleb128 0x31
+ 18394 5829 380E0000 .long 0xe38
+ 18395 582d 03 .byte 0x3
+ 18396 582e 91 .byte 0x91
+ 18397 582f F07E .sleb128 -144
+ 18398 5831 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 488
+
+
+ 18399 5832 00 .byte 0x0
+ 18400 5833 00 .byte 0x0
+ 18401 5834 00 .byte 0x0
+ 18402 5835 00 .byte 0x0
+ 18403 5836 00 .byte 0x0
+ 18404 5837 34 .uleb128 0x34
+ 18405 5838 E30C0000 .long 0xce3
+ 18406 583c 00000000 .quad .LBB1426
+ 18406 00000000
+ 18407 5844 00000000 .quad .LBE1426
+ 18407 00000000
+ 18408 584c 03 .byte 0x3
+ 18409 584d 5B07 .value 0x75b
+ 18410 584f 31 .uleb128 0x31
+ 18411 5850 010D0000 .long 0xd01
+ 18412 5854 03 .byte 0x3
+ 18413 5855 91 .byte 0x91
+ 18414 5856 8C7F .sleb128 -116
+ 18415 5858 31 .uleb128 0x31
+ 18416 5859 F50C0000 .long 0xcf5
+ 18417 585d 03 .byte 0x3
+ 18418 585e 91 .byte 0x91
+ 18419 585f 907F .sleb128 -112
+ 18420 5861 32 .uleb128 0x32
+ 18421 5862 00000000 .quad .LBB1427
+ 18421 00000000
+ 18422 586a 00000000 .quad .LBE1427
+ 18422 00000000
+ 18423 5872 33 .uleb128 0x33
+ 18424 5873 0D0D0000 .long 0xd0d
+ 18425 5877 03 .byte 0x3
+ 18426 5878 76 .byte 0x76
+ 18427 5879 B052 .sleb128 -5840
+ 18428 587b 30 .uleb128 0x30
+ 18429 587c 1A0D0000 .long 0xd1a
+ 18430 5880 00000000 .quad .LBB1428
+ 18430 00000000
+ 18431 5888 00000000 .quad .LBE1428
+ 18431 00000000
+ 18432 5890 03 .byte 0x3
+ 18433 5891 8A06 .value 0x68a
+ 18434 5893 AA580000 .long 0x58aa
+ 18435 5897 31 .uleb128 0x31
+ 18436 5898 380D0000 .long 0xd38
+ 18437 589c 03 .byte 0x3
+ 18438 589d 91 .byte 0x91
+ 18439 589e AC7F .sleb128 -84
+ 18440 58a0 31 .uleb128 0x31
+ 18441 58a1 2C0D0000 .long 0xd2c
+ 18442 58a5 03 .byte 0x3
+ 18443 58a6 91 .byte 0x91
+ 18444 58a7 B07F .sleb128 -80
+ 18445 58a9 00 .byte 0x0
+ 18446 58aa 34 .uleb128 0x34
+ 18447 58ab 450D0000 .long 0xd45
+ 18448 58af 00000000 .quad .LBB1430
+ 18448 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 489
+
+
+ 18449 58b7 00000000 .quad .LBE1430
+ 18449 00000000
+ 18450 58bf 03 .byte 0x3
+ 18451 58c0 8B06 .value 0x68b
+ 18452 58c2 31 .uleb128 0x31
+ 18453 58c3 570D0000 .long 0xd57
+ 18454 58c7 02 .byte 0x2
+ 18455 58c8 91 .byte 0x91
+ 18456 58c9 40 .sleb128 -64
+ 18457 58ca 34 .uleb128 0x34
+ 18458 58cb 640D0000 .long 0xd64
+ 18459 58cf 00000000 .quad .LBB1432
+ 18459 00000000
+ 18460 58d7 00000000 .quad .LBE1432
+ 18460 00000000
+ 18461 58df 03 .byte 0x3
+ 18462 58e0 4905 .value 0x549
+ 18463 58e2 31 .uleb128 0x31
+ 18464 58e3 820D0000 .long 0xd82
+ 18465 58e7 02 .byte 0x2
+ 18466 58e8 91 .byte 0x91
+ 18467 58e9 5C .sleb128 -36
+ 18468 58ea 31 .uleb128 0x31
+ 18469 58eb 760D0000 .long 0xd76
+ 18470 58ef 02 .byte 0x2
+ 18471 58f0 91 .byte 0x91
+ 18472 58f1 60 .sleb128 -32
+ 18473 58f2 00 .byte 0x0
+ 18474 58f3 00 .byte 0x0
+ 18475 58f4 00 .byte 0x0
+ 18476 58f5 00 .byte 0x0
+ 18477 58f6 00 .byte 0x0
+ 18478 58f7 24 .uleb128 0x24
+ 18479 58f8 00000000 .long .LASF348
+ 18480 58fc 03 .byte 0x3
+ 18481 58fd AE .byte 0xae
+ 18482 58fe 01 .byte 0x1
+ 18483 58ff C9010000 .long 0x1c9
+ 18484 5903 03 .byte 0x3
+ 18485 5904 1D590000 .long 0x591d
+ 18486 5908 25 .uleb128 0x25
+ 18487 5909 763100 .string "v1"
+ 18488 590c 03 .byte 0x3
+ 18489 590d AE .byte 0xae
+ 18490 590e C9010000 .long 0x1c9
+ 18491 5912 25 .uleb128 0x25
+ 18492 5913 763200 .string "v2"
+ 18493 5916 03 .byte 0x3
+ 18494 5917 AE .byte 0xae
+ 18495 5918 C9010000 .long 0x1c9
+ 18496 591c 00 .byte 0x0
+ 18497 591d 27 .uleb128 0x27
+ 18498 591e 00000000 .long .LASF349
+ 18499 5922 03 .byte 0x3
+ 18500 5923 6E06 .value 0x66e
+ 18501 5925 01 .byte 0x1
+ 18502 5926 C9010000 .long 0x1c9
+
GAS LISTING /tmp/ccPaCTqg.s page 490
+
+
+ 18503 592a 03 .byte 0x3
+ 18504 592b 48590000 .long 0x5948
+ 18505 592f 28 .uleb128 0x28
+ 18506 5930 00000000 .long .LASF63
+ 18507 5934 03 .byte 0x3
+ 18508 5935 6E06 .value 0x66e
+ 18509 5937 C9010000 .long 0x1c9
+ 18510 593b 29 .uleb128 0x29
+ 18511 593c 746D7000 .string "tmp"
+ 18512 5940 03 .byte 0x3
+ 18513 5941 7106 .value 0x671
+ 18514 5943 C9010000 .long 0x1c9
+ 18515 5947 00 .byte 0x0
+ 18516 5948 27 .uleb128 0x27
+ 18517 5949 00000000 .long .LASF350
+ 18518 594d 03 .byte 0x3
+ 18519 594e 6205 .value 0x562
+ 18520 5950 01 .byte 0x1
+ 18521 5951 C9010000 .long 0x1c9
+ 18522 5955 03 .byte 0x3
+ 18523 5956 67590000 .long 0x5967
+ 18524 595a 28 .uleb128 0x28
+ 18525 595b 00000000 .long .LASF63
+ 18526 595f 03 .byte 0x3
+ 18527 5960 6205 .value 0x562
+ 18528 5962 C9010000 .long 0x1c9
+ 18529 5966 00 .byte 0x0
+ 18530 5967 2D .uleb128 0x2d
+ 18531 5968 00000000 .long .LASF351
+ 18532 596c 03 .byte 0x3
+ 18533 596d 6F07 .value 0x76f
+ 18534 596f 01 .byte 0x1
+ 18535 5970 00000000 .quad .LFB658
+ 18535 00000000
+ 18536 5978 00000000 .quad .LFE658
+ 18536 00000000
+ 18537 5980 00000000 .long .LLST8
+ 18538 5984 8F810000 .long 0x818f
+ 18539 5988 20 .uleb128 0x20
+ 18540 5989 00000000 .long .LASF61
+ 18541 598d 03 .byte 0x3
+ 18542 598e 6F07 .value 0x76f
+ 18543 5990 712B0000 .long 0x2b71
+ 18544 5994 03 .byte 0x3
+ 18545 5995 91 .byte 0x91
+ 18546 5996 B857 .sleb128 -5192
+ 18547 5998 2E .uleb128 0x2e
+ 18548 5999 6B657900 .string "key"
+ 18549 599d 03 .byte 0x3
+ 18550 599e 6F07 .value 0x76f
+ 18551 59a0 772B0000 .long 0x2b77
+ 18552 59a4 03 .byte 0x3
+ 18553 59a5 91 .byte 0x91
+ 18554 59a6 B057 .sleb128 -5200
+ 18555 59a8 35 .uleb128 0x35
+ 18556 59a9 763000 .string "v0"
+ 18557 59ac 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 491
+
+
+ 18558 59ad 7107 .value 0x771
+ 18559 59af C9010000 .long 0x1c9
+ 18560 59b3 03 .byte 0x3
+ 18561 59b4 91 .byte 0x91
+ 18562 59b5 C057 .sleb128 -5184
+ 18563 59b7 35 .uleb128 0x35
+ 18564 59b8 763100 .string "v1"
+ 18565 59bb 03 .byte 0x3
+ 18566 59bc 7107 .value 0x771
+ 18567 59be C9010000 .long 0x1c9
+ 18568 59c2 03 .byte 0x3
+ 18569 59c3 91 .byte 0x91
+ 18570 59c4 D057 .sleb128 -5168
+ 18571 59c6 35 .uleb128 0x35
+ 18572 59c7 6B00 .string "k"
+ 18573 59c9 03 .byte 0x3
+ 18574 59ca 7207 .value 0x772
+ 18575 59cc C9010000 .long 0x1c9
+ 18576 59d0 03 .byte 0x3
+ 18577 59d1 91 .byte 0x91
+ 18578 59d2 E057 .sleb128 -5152
+ 18579 59d4 30 .uleb128 0x30
+ 18580 59d5 BB0C0000 .long 0xcbb
+ 18581 59d9 00000000 .quad .LBB1828
+ 18581 00000000
+ 18582 59e1 00000000 .quad .LBE1828
+ 18582 00000000
+ 18583 59e9 03 .byte 0x3
+ 18584 59ea 7407 .value 0x774
+ 18585 59ec 155A0000 .long 0x5a15
+ 18586 59f0 31 .uleb128 0x31
+ 18587 59f1 CC0C0000 .long 0xccc
+ 18588 59f5 03 .byte 0x3
+ 18589 59f6 91 .byte 0x91
+ 18590 59f7 F857 .sleb128 -5128
+ 18591 59f9 32 .uleb128 0x32
+ 18592 59fa 00000000 .quad .LBB1829
+ 18592 00000000
+ 18593 5a02 00000000 .quad .LBE1829
+ 18593 00000000
+ 18594 5a0a 33 .uleb128 0x33
+ 18595 5a0b D70C0000 .long 0xcd7
+ 18596 5a0f 03 .byte 0x3
+ 18597 5a10 76 .byte 0x76
+ 18598 5a11 8054 .sleb128 -5632
+ 18599 5a13 00 .byte 0x0
+ 18600 5a14 00 .byte 0x0
+ 18601 5a15 30 .uleb128 0x30
+ 18602 5a16 BB0C0000 .long 0xcbb
+ 18603 5a1a 00000000 .quad .LBB1830
+ 18603 00000000
+ 18604 5a22 00000000 .quad .LBE1830
+ 18604 00000000
+ 18605 5a2a 03 .byte 0x3
+ 18606 5a2b 7507 .value 0x775
+ 18607 5a2d 565A0000 .long 0x5a56
+ 18608 5a31 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 492
+
+
+ 18609 5a32 CC0C0000 .long 0xccc
+ 18610 5a36 03 .byte 0x3
+ 18611 5a37 91 .byte 0x91
+ 18612 5a38 8058 .sleb128 -5120
+ 18613 5a3a 32 .uleb128 0x32
+ 18614 5a3b 00000000 .quad .LBB1831
+ 18614 00000000
+ 18615 5a43 00000000 .quad .LBE1831
+ 18615 00000000
+ 18616 5a4b 33 .uleb128 0x33
+ 18617 5a4c D70C0000 .long 0xcd7
+ 18618 5a50 03 .byte 0x3
+ 18619 5a51 76 .byte 0x76
+ 18620 5a52 9054 .sleb128 -5616
+ 18621 5a54 00 .byte 0x0
+ 18622 5a55 00 .byte 0x0
+ 18623 5a56 30 .uleb128 0x30
+ 18624 5a57 E30C0000 .long 0xce3
+ 18625 5a5b 00000000 .quad .LBB1832
+ 18625 00000000
+ 18626 5a63 00000000 .quad .LBE1832
+ 18626 00000000
+ 18627 5a6b 03 .byte 0x3
+ 18628 5a6c 8607 .value 0x786
+ 18629 5a6e 1C5B0000 .long 0x5b1c
+ 18630 5a72 31 .uleb128 0x31
+ 18631 5a73 010D0000 .long 0xd01
+ 18632 5a77 03 .byte 0x3
+ 18633 5a78 91 .byte 0x91
+ 18634 5a79 8C58 .sleb128 -5108
+ 18635 5a7b 31 .uleb128 0x31
+ 18636 5a7c F50C0000 .long 0xcf5
+ 18637 5a80 03 .byte 0x3
+ 18638 5a81 91 .byte 0x91
+ 18639 5a82 9058 .sleb128 -5104
+ 18640 5a84 32 .uleb128 0x32
+ 18641 5a85 00000000 .quad .LBB1833
+ 18641 00000000
+ 18642 5a8d 00000000 .quad .LBE1833
+ 18642 00000000
+ 18643 5a95 33 .uleb128 0x33
+ 18644 5a96 0D0D0000 .long 0xd0d
+ 18645 5a9a 03 .byte 0x3
+ 18646 5a9b 76 .byte 0x76
+ 18647 5a9c A054 .sleb128 -5600
+ 18648 5a9e 30 .uleb128 0x30
+ 18649 5a9f 1A0D0000 .long 0xd1a
+ 18650 5aa3 00000000 .quad .LBB1834
+ 18650 00000000
+ 18651 5aab 00000000 .quad .LBE1834
+ 18651 00000000
+ 18652 5ab3 03 .byte 0x3
+ 18653 5ab4 8A06 .value 0x68a
+ 18654 5ab6 CD5A0000 .long 0x5acd
+ 18655 5aba 31 .uleb128 0x31
+ 18656 5abb 380D0000 .long 0xd38
+ 18657 5abf 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 493
+
+
+ 18658 5ac0 91 .byte 0x91
+ 18659 5ac1 AC58 .sleb128 -5076
+ 18660 5ac3 31 .uleb128 0x31
+ 18661 5ac4 2C0D0000 .long 0xd2c
+ 18662 5ac8 03 .byte 0x3
+ 18663 5ac9 91 .byte 0x91
+ 18664 5aca B058 .sleb128 -5072
+ 18665 5acc 00 .byte 0x0
+ 18666 5acd 34 .uleb128 0x34
+ 18667 5ace 450D0000 .long 0xd45
+ 18668 5ad2 00000000 .quad .LBB1836
+ 18668 00000000
+ 18669 5ada 00000000 .quad .LBE1836
+ 18669 00000000
+ 18670 5ae2 03 .byte 0x3
+ 18671 5ae3 8B06 .value 0x68b
+ 18672 5ae5 31 .uleb128 0x31
+ 18673 5ae6 570D0000 .long 0xd57
+ 18674 5aea 03 .byte 0x3
+ 18675 5aeb 91 .byte 0x91
+ 18676 5aec C058 .sleb128 -5056
+ 18677 5aee 34 .uleb128 0x34
+ 18678 5aef 640D0000 .long 0xd64
+ 18679 5af3 00000000 .quad .LBB1838
+ 18679 00000000
+ 18680 5afb 00000000 .quad .LBE1838
+ 18680 00000000
+ 18681 5b03 03 .byte 0x3
+ 18682 5b04 4905 .value 0x549
+ 18683 5b06 31 .uleb128 0x31
+ 18684 5b07 820D0000 .long 0xd82
+ 18685 5b0b 03 .byte 0x3
+ 18686 5b0c 91 .byte 0x91
+ 18687 5b0d DC58 .sleb128 -5028
+ 18688 5b0f 31 .uleb128 0x31
+ 18689 5b10 760D0000 .long 0xd76
+ 18690 5b14 03 .byte 0x3
+ 18691 5b15 91 .byte 0x91
+ 18692 5b16 E058 .sleb128 -5024
+ 18693 5b18 00 .byte 0x0
+ 18694 5b19 00 .byte 0x0
+ 18695 5b1a 00 .byte 0x0
+ 18696 5b1b 00 .byte 0x0
+ 18697 5b1c 30 .uleb128 0x30
+ 18698 5b1d 8F0D0000 .long 0xd8f
+ 18699 5b21 00000000 .quad .LBB1840
+ 18699 00000000
+ 18700 5b29 00000000 .quad .LBE1840
+ 18700 00000000
+ 18701 5b31 03 .byte 0x3
+ 18702 5b32 8607 .value 0x786
+ 18703 5b34 305D0000 .long 0x5d30
+ 18704 5b38 31 .uleb128 0x31
+ 18705 5b39 A10D0000 .long 0xda1
+ 18706 5b3d 03 .byte 0x3
+ 18707 5b3e 91 .byte 0x91
+ 18708 5b3f F058 .sleb128 -5008
+
GAS LISTING /tmp/ccPaCTqg.s page 494
+
+
+ 18709 5b41 32 .uleb128 0x32
+ 18710 5b42 00000000 .quad .LBB1841
+ 18710 00000000
+ 18711 5b4a 00000000 .quad .LBE1841
+ 18711 00000000
+ 18712 5b52 33 .uleb128 0x33
+ 18713 5b53 AD0D0000 .long 0xdad
+ 18714 5b57 03 .byte 0x3
+ 18715 5b58 76 .byte 0x76
+ 18716 5b59 B054 .sleb128 -5584
+ 18717 5b5b 30 .uleb128 0x30
+ 18718 5b5c BA0D0000 .long 0xdba
+ 18719 5b60 00000000 .quad .LBB1842
+ 18719 00000000
+ 18720 5b68 00000000 .quad .LBE1842
+ 18720 00000000
+ 18721 5b70 03 .byte 0x3
+ 18722 5b71 1F06 .value 0x61f
+ 18723 5b73 F85B0000 .long 0x5bf8
+ 18724 5b77 31 .uleb128 0x31
+ 18725 5b78 CC0D0000 .long 0xdcc
+ 18726 5b7c 03 .byte 0x3
+ 18727 5b7d 91 .byte 0x91
+ 18728 5b7e 8059 .sleb128 -4992
+ 18729 5b80 32 .uleb128 0x32
+ 18730 5b81 00000000 .quad .LBB1843
+ 18730 00000000
+ 18731 5b89 00000000 .quad .LBE1843
+ 18731 00000000
+ 18732 5b91 33 .uleb128 0x33
+ 18733 5b92 D80D0000 .long 0xdd8
+ 18734 5b96 09 .byte 0x9
+ 18735 5b97 03 .byte 0x3
+ 18736 5b98 00000000 .quad mask.8002
+ 18736 00000000
+ 18737 5ba0 34 .uleb128 0x34
+ 18738 5ba1 FB0D0000 .long 0xdfb
+ 18739 5ba5 00000000 .quad .LBB1844
+ 18739 00000000
+ 18740 5bad 00000000 .quad .LBE1844
+ 18740 00000000
+ 18741 5bb5 03 .byte 0x3
+ 18742 5bb6 FE04 .value 0x4fe
+ 18743 5bb8 31 .uleb128 0x31
+ 18744 5bb9 190E0000 .long 0xe19
+ 18745 5bbd 03 .byte 0x3
+ 18746 5bbe 91 .byte 0x91
+ 18747 5bbf 9059 .sleb128 -4976
+ 18748 5bc1 31 .uleb128 0x31
+ 18749 5bc2 0D0E0000 .long 0xe0d
+ 18750 5bc6 03 .byte 0x3
+ 18751 5bc7 91 .byte 0x91
+ 18752 5bc8 A059 .sleb128 -4960
+ 18753 5bca 34 .uleb128 0x34
+ 18754 5bcb 260E0000 .long 0xe26
+ 18755 5bcf 00000000 .quad .LBB1846
+ 18755 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 495
+
+
+ 18756 5bd7 00000000 .quad .LBE1846
+ 18756 00000000
+ 18757 5bdf 03 .byte 0x3
+ 18758 5be0 7501 .value 0x175
+ 18759 5be2 31 .uleb128 0x31
+ 18760 5be3 440E0000 .long 0xe44
+ 18761 5be7 03 .byte 0x3
+ 18762 5be8 91 .byte 0x91
+ 18763 5be9 B059 .sleb128 -4944
+ 18764 5beb 31 .uleb128 0x31
+ 18765 5bec 380E0000 .long 0xe38
+ 18766 5bf0 03 .byte 0x3
+ 18767 5bf1 91 .byte 0x91
+ 18768 5bf2 C059 .sleb128 -4928
+ 18769 5bf4 00 .byte 0x0
+ 18770 5bf5 00 .byte 0x0
+ 18771 5bf6 00 .byte 0x0
+ 18772 5bf7 00 .byte 0x0
+ 18773 5bf8 30 .uleb128 0x30
+ 18774 5bf9 BA0D0000 .long 0xdba
+ 18775 5bfd 00000000 .quad .LBB1848
+ 18775 00000000
+ 18776 5c05 00000000 .quad .LBE1848
+ 18776 00000000
+ 18777 5c0d 03 .byte 0x3
+ 18778 5c0e 2006 .value 0x620
+ 18779 5c10 955C0000 .long 0x5c95
+ 18780 5c14 31 .uleb128 0x31
+ 18781 5c15 CC0D0000 .long 0xdcc
+ 18782 5c19 03 .byte 0x3
+ 18783 5c1a 91 .byte 0x91
+ 18784 5c1b D059 .sleb128 -4912
+ 18785 5c1d 32 .uleb128 0x32
+ 18786 5c1e 00000000 .quad .LBB1849
+ 18786 00000000
+ 18787 5c26 00000000 .quad .LBE1849
+ 18787 00000000
+ 18788 5c2e 33 .uleb128 0x33
+ 18789 5c2f D80D0000 .long 0xdd8
+ 18790 5c33 09 .byte 0x9
+ 18791 5c34 03 .byte 0x3
+ 18792 5c35 00000000 .quad mask.8002
+ 18792 00000000
+ 18793 5c3d 34 .uleb128 0x34
+ 18794 5c3e FB0D0000 .long 0xdfb
+ 18795 5c42 00000000 .quad .LBB1850
+ 18795 00000000
+ 18796 5c4a 00000000 .quad .LBE1850
+ 18796 00000000
+ 18797 5c52 03 .byte 0x3
+ 18798 5c53 FE04 .value 0x4fe
+ 18799 5c55 31 .uleb128 0x31
+ 18800 5c56 190E0000 .long 0xe19
+ 18801 5c5a 03 .byte 0x3
+ 18802 5c5b 91 .byte 0x91
+ 18803 5c5c E059 .sleb128 -4896
+ 18804 5c5e 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 496
+
+
+ 18805 5c5f 0D0E0000 .long 0xe0d
+ 18806 5c63 03 .byte 0x3
+ 18807 5c64 91 .byte 0x91
+ 18808 5c65 F059 .sleb128 -4880
+ 18809 5c67 34 .uleb128 0x34
+ 18810 5c68 260E0000 .long 0xe26
+ 18811 5c6c 00000000 .quad .LBB1852
+ 18811 00000000
+ 18812 5c74 00000000 .quad .LBE1852
+ 18812 00000000
+ 18813 5c7c 03 .byte 0x3
+ 18814 5c7d 7501 .value 0x175
+ 18815 5c7f 31 .uleb128 0x31
+ 18816 5c80 440E0000 .long 0xe44
+ 18817 5c84 03 .byte 0x3
+ 18818 5c85 91 .byte 0x91
+ 18819 5c86 805A .sleb128 -4864
+ 18820 5c88 31 .uleb128 0x31
+ 18821 5c89 380E0000 .long 0xe38
+ 18822 5c8d 03 .byte 0x3
+ 18823 5c8e 91 .byte 0x91
+ 18824 5c8f 905A .sleb128 -4848
+ 18825 5c91 00 .byte 0x0
+ 18826 5c92 00 .byte 0x0
+ 18827 5c93 00 .byte 0x0
+ 18828 5c94 00 .byte 0x0
+ 18829 5c95 34 .uleb128 0x34
+ 18830 5c96 BA0D0000 .long 0xdba
+ 18831 5c9a 00000000 .quad .LBB1854
+ 18831 00000000
+ 18832 5ca2 00000000 .quad .LBE1854
+ 18832 00000000
+ 18833 5caa 03 .byte 0x3
+ 18834 5cab 2106 .value 0x621
+ 18835 5cad 31 .uleb128 0x31
+ 18836 5cae CC0D0000 .long 0xdcc
+ 18837 5cb2 03 .byte 0x3
+ 18838 5cb3 91 .byte 0x91
+ 18839 5cb4 A05A .sleb128 -4832
+ 18840 5cb6 32 .uleb128 0x32
+ 18841 5cb7 00000000 .quad .LBB1855
+ 18841 00000000
+ 18842 5cbf 00000000 .quad .LBE1855
+ 18842 00000000
+ 18843 5cc7 33 .uleb128 0x33
+ 18844 5cc8 D80D0000 .long 0xdd8
+ 18845 5ccc 09 .byte 0x9
+ 18846 5ccd 03 .byte 0x3
+ 18847 5cce 00000000 .quad mask.8002
+ 18847 00000000
+ 18848 5cd6 34 .uleb128 0x34
+ 18849 5cd7 FB0D0000 .long 0xdfb
+ 18850 5cdb 00000000 .quad .LBB1856
+ 18850 00000000
+ 18851 5ce3 00000000 .quad .LBE1856
+ 18851 00000000
+ 18852 5ceb 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 497
+
+
+ 18853 5cec FE04 .value 0x4fe
+ 18854 5cee 31 .uleb128 0x31
+ 18855 5cef 190E0000 .long 0xe19
+ 18856 5cf3 03 .byte 0x3
+ 18857 5cf4 91 .byte 0x91
+ 18858 5cf5 B05A .sleb128 -4816
+ 18859 5cf7 31 .uleb128 0x31
+ 18860 5cf8 0D0E0000 .long 0xe0d
+ 18861 5cfc 03 .byte 0x3
+ 18862 5cfd 91 .byte 0x91
+ 18863 5cfe C05A .sleb128 -4800
+ 18864 5d00 34 .uleb128 0x34
+ 18865 5d01 260E0000 .long 0xe26
+ 18866 5d05 00000000 .quad .LBB1858
+ 18866 00000000
+ 18867 5d0d 00000000 .quad .LBE1858
+ 18867 00000000
+ 18868 5d15 03 .byte 0x3
+ 18869 5d16 7501 .value 0x175
+ 18870 5d18 31 .uleb128 0x31
+ 18871 5d19 440E0000 .long 0xe44
+ 18872 5d1d 03 .byte 0x3
+ 18873 5d1e 91 .byte 0x91
+ 18874 5d1f D05A .sleb128 -4784
+ 18875 5d21 31 .uleb128 0x31
+ 18876 5d22 380E0000 .long 0xe38
+ 18877 5d26 03 .byte 0x3
+ 18878 5d27 91 .byte 0x91
+ 18879 5d28 E05A .sleb128 -4768
+ 18880 5d2a 00 .byte 0x0
+ 18881 5d2b 00 .byte 0x0
+ 18882 5d2c 00 .byte 0x0
+ 18883 5d2d 00 .byte 0x0
+ 18884 5d2e 00 .byte 0x0
+ 18885 5d2f 00 .byte 0x0
+ 18886 5d30 30 .uleb128 0x30
+ 18887 5d31 F7580000 .long 0x58f7
+ 18888 5d35 00000000 .quad .LBB1860
+ 18888 00000000
+ 18889 5d3d 00000000 .quad .LBE1860
+ 18889 00000000
+ 18890 5d45 03 .byte 0x3
+ 18891 5d46 8607 .value 0x786
+ 18892 5d48 5F5D0000 .long 0x5d5f
+ 18893 5d4c 31 .uleb128 0x31
+ 18894 5d4d 12590000 .long 0x5912
+ 18895 5d51 03 .byte 0x3
+ 18896 5d52 91 .byte 0x91
+ 18897 5d53 F05A .sleb128 -4752
+ 18898 5d55 31 .uleb128 0x31
+ 18899 5d56 08590000 .long 0x5908
+ 18900 5d5a 03 .byte 0x3
+ 18901 5d5b 91 .byte 0x91
+ 18902 5d5c 805B .sleb128 -4736
+ 18903 5d5e 00 .byte 0x0
+ 18904 5d5f 30 .uleb128 0x30
+ 18905 5d60 1D590000 .long 0x591d
+
GAS LISTING /tmp/ccPaCTqg.s page 498
+
+
+ 18906 5d64 00000000 .quad .LBB1862
+ 18906 00000000
+ 18907 5d6c 00000000 .quad .LBE1862
+ 18907 00000000
+ 18908 5d74 03 .byte 0x3
+ 18909 5d75 8707 .value 0x787
+ 18910 5d77 1C5E0000 .long 0x5e1c
+ 18911 5d7b 31 .uleb128 0x31
+ 18912 5d7c 2F590000 .long 0x592f
+ 18913 5d80 03 .byte 0x3
+ 18914 5d81 91 .byte 0x91
+ 18915 5d82 905B .sleb128 -4720
+ 18916 5d84 32 .uleb128 0x32
+ 18917 5d85 00000000 .quad .LBB1863
+ 18917 00000000
+ 18918 5d8d 00000000 .quad .LBE1863
+ 18918 00000000
+ 18919 5d95 33 .uleb128 0x33
+ 18920 5d96 3B590000 .long 0x593b
+ 18921 5d9a 03 .byte 0x3
+ 18922 5d9b 76 .byte 0x76
+ 18923 5d9c C054 .sleb128 -5568
+ 18924 5d9e 30 .uleb128 0x30
+ 18925 5d9f 1A0D0000 .long 0xd1a
+ 18926 5da3 00000000 .quad .LBB1864
+ 18926 00000000
+ 18927 5dab 00000000 .quad .LBE1864
+ 18927 00000000
+ 18928 5db3 03 .byte 0x3
+ 18929 5db4 7206 .value 0x672
+ 18930 5db6 CD5D0000 .long 0x5dcd
+ 18931 5dba 31 .uleb128 0x31
+ 18932 5dbb 380D0000 .long 0xd38
+ 18933 5dbf 03 .byte 0x3
+ 18934 5dc0 91 .byte 0x91
+ 18935 5dc1 AC5B .sleb128 -4692
+ 18936 5dc3 31 .uleb128 0x31
+ 18937 5dc4 2C0D0000 .long 0xd2c
+ 18938 5dc8 03 .byte 0x3
+ 18939 5dc9 91 .byte 0x91
+ 18940 5dca B05B .sleb128 -4688
+ 18941 5dcc 00 .byte 0x0
+ 18942 5dcd 34 .uleb128 0x34
+ 18943 5dce 48590000 .long 0x5948
+ 18944 5dd2 00000000 .quad .LBB1866
+ 18944 00000000
+ 18945 5dda 00000000 .quad .LBE1866
+ 18945 00000000
+ 18946 5de2 03 .byte 0x3
+ 18947 5de3 7306 .value 0x673
+ 18948 5de5 31 .uleb128 0x31
+ 18949 5de6 5A590000 .long 0x595a
+ 18950 5dea 03 .byte 0x3
+ 18951 5deb 91 .byte 0x91
+ 18952 5dec C05B .sleb128 -4672
+ 18953 5dee 34 .uleb128 0x34
+ 18954 5def 640D0000 .long 0xd64
+
GAS LISTING /tmp/ccPaCTqg.s page 499
+
+
+ 18955 5df3 00000000 .quad .LBB1868
+ 18955 00000000
+ 18956 5dfb 00000000 .quad .LBE1868
+ 18956 00000000
+ 18957 5e03 03 .byte 0x3
+ 18958 5e04 6505 .value 0x565
+ 18959 5e06 31 .uleb128 0x31
+ 18960 5e07 820D0000 .long 0xd82
+ 18961 5e0b 03 .byte 0x3
+ 18962 5e0c 91 .byte 0x91
+ 18963 5e0d DC5B .sleb128 -4644
+ 18964 5e0f 31 .uleb128 0x31
+ 18965 5e10 760D0000 .long 0xd76
+ 18966 5e14 03 .byte 0x3
+ 18967 5e15 91 .byte 0x91
+ 18968 5e16 E05B .sleb128 -4640
+ 18969 5e18 00 .byte 0x0
+ 18970 5e19 00 .byte 0x0
+ 18971 5e1a 00 .byte 0x0
+ 18972 5e1b 00 .byte 0x0
+ 18973 5e1c 30 .uleb128 0x30
+ 18974 5e1d 8F0D0000 .long 0xd8f
+ 18975 5e21 00000000 .quad .LBB1870
+ 18975 00000000
+ 18976 5e29 00000000 .quad .LBE1870
+ 18976 00000000
+ 18977 5e31 03 .byte 0x3
+ 18978 5e32 8707 .value 0x787
+ 18979 5e34 30600000 .long 0x6030
+ 18980 5e38 31 .uleb128 0x31
+ 18981 5e39 A10D0000 .long 0xda1
+ 18982 5e3d 03 .byte 0x3
+ 18983 5e3e 91 .byte 0x91
+ 18984 5e3f F05B .sleb128 -4624
+ 18985 5e41 32 .uleb128 0x32
+ 18986 5e42 00000000 .quad .LBB1871
+ 18986 00000000
+ 18987 5e4a 00000000 .quad .LBE1871
+ 18987 00000000
+ 18988 5e52 33 .uleb128 0x33
+ 18989 5e53 AD0D0000 .long 0xdad
+ 18990 5e57 03 .byte 0x3
+ 18991 5e58 76 .byte 0x76
+ 18992 5e59 D054 .sleb128 -5552
+ 18993 5e5b 30 .uleb128 0x30
+ 18994 5e5c BA0D0000 .long 0xdba
+ 18995 5e60 00000000 .quad .LBB1872
+ 18995 00000000
+ 18996 5e68 00000000 .quad .LBE1872
+ 18996 00000000
+ 18997 5e70 03 .byte 0x3
+ 18998 5e71 1F06 .value 0x61f
+ 18999 5e73 F85E0000 .long 0x5ef8
+ 19000 5e77 31 .uleb128 0x31
+ 19001 5e78 CC0D0000 .long 0xdcc
+ 19002 5e7c 03 .byte 0x3
+ 19003 5e7d 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 500
+
+
+ 19004 5e7e 805C .sleb128 -4608
+ 19005 5e80 32 .uleb128 0x32
+ 19006 5e81 00000000 .quad .LBB1873
+ 19006 00000000
+ 19007 5e89 00000000 .quad .LBE1873
+ 19007 00000000
+ 19008 5e91 33 .uleb128 0x33
+ 19009 5e92 D80D0000 .long 0xdd8
+ 19010 5e96 09 .byte 0x9
+ 19011 5e97 03 .byte 0x3
+ 19012 5e98 00000000 .quad mask.8002
+ 19012 00000000
+ 19013 5ea0 34 .uleb128 0x34
+ 19014 5ea1 FB0D0000 .long 0xdfb
+ 19015 5ea5 00000000 .quad .LBB1874
+ 19015 00000000
+ 19016 5ead 00000000 .quad .LBE1874
+ 19016 00000000
+ 19017 5eb5 03 .byte 0x3
+ 19018 5eb6 FE04 .value 0x4fe
+ 19019 5eb8 31 .uleb128 0x31
+ 19020 5eb9 190E0000 .long 0xe19
+ 19021 5ebd 03 .byte 0x3
+ 19022 5ebe 91 .byte 0x91
+ 19023 5ebf 905C .sleb128 -4592
+ 19024 5ec1 31 .uleb128 0x31
+ 19025 5ec2 0D0E0000 .long 0xe0d
+ 19026 5ec6 03 .byte 0x3
+ 19027 5ec7 91 .byte 0x91
+ 19028 5ec8 A05C .sleb128 -4576
+ 19029 5eca 34 .uleb128 0x34
+ 19030 5ecb 260E0000 .long 0xe26
+ 19031 5ecf 00000000 .quad .LBB1876
+ 19031 00000000
+ 19032 5ed7 00000000 .quad .LBE1876
+ 19032 00000000
+ 19033 5edf 03 .byte 0x3
+ 19034 5ee0 7501 .value 0x175
+ 19035 5ee2 31 .uleb128 0x31
+ 19036 5ee3 440E0000 .long 0xe44
+ 19037 5ee7 03 .byte 0x3
+ 19038 5ee8 91 .byte 0x91
+ 19039 5ee9 B05C .sleb128 -4560
+ 19040 5eeb 31 .uleb128 0x31
+ 19041 5eec 380E0000 .long 0xe38
+ 19042 5ef0 03 .byte 0x3
+ 19043 5ef1 91 .byte 0x91
+ 19044 5ef2 C05C .sleb128 -4544
+ 19045 5ef4 00 .byte 0x0
+ 19046 5ef5 00 .byte 0x0
+ 19047 5ef6 00 .byte 0x0
+ 19048 5ef7 00 .byte 0x0
+ 19049 5ef8 30 .uleb128 0x30
+ 19050 5ef9 BA0D0000 .long 0xdba
+ 19051 5efd 00000000 .quad .LBB1878
+ 19051 00000000
+ 19052 5f05 00000000 .quad .LBE1878
+
GAS LISTING /tmp/ccPaCTqg.s page 501
+
+
+ 19052 00000000
+ 19053 5f0d 03 .byte 0x3
+ 19054 5f0e 2006 .value 0x620
+ 19055 5f10 955F0000 .long 0x5f95
+ 19056 5f14 31 .uleb128 0x31
+ 19057 5f15 CC0D0000 .long 0xdcc
+ 19058 5f19 03 .byte 0x3
+ 19059 5f1a 91 .byte 0x91
+ 19060 5f1b D05C .sleb128 -4528
+ 19061 5f1d 32 .uleb128 0x32
+ 19062 5f1e 00000000 .quad .LBB1879
+ 19062 00000000
+ 19063 5f26 00000000 .quad .LBE1879
+ 19063 00000000
+ 19064 5f2e 33 .uleb128 0x33
+ 19065 5f2f D80D0000 .long 0xdd8
+ 19066 5f33 09 .byte 0x9
+ 19067 5f34 03 .byte 0x3
+ 19068 5f35 00000000 .quad mask.8002
+ 19068 00000000
+ 19069 5f3d 34 .uleb128 0x34
+ 19070 5f3e FB0D0000 .long 0xdfb
+ 19071 5f42 00000000 .quad .LBB1880
+ 19071 00000000
+ 19072 5f4a 00000000 .quad .LBE1880
+ 19072 00000000
+ 19073 5f52 03 .byte 0x3
+ 19074 5f53 FE04 .value 0x4fe
+ 19075 5f55 31 .uleb128 0x31
+ 19076 5f56 190E0000 .long 0xe19
+ 19077 5f5a 03 .byte 0x3
+ 19078 5f5b 91 .byte 0x91
+ 19079 5f5c E05C .sleb128 -4512
+ 19080 5f5e 31 .uleb128 0x31
+ 19081 5f5f 0D0E0000 .long 0xe0d
+ 19082 5f63 03 .byte 0x3
+ 19083 5f64 91 .byte 0x91
+ 19084 5f65 F05C .sleb128 -4496
+ 19085 5f67 34 .uleb128 0x34
+ 19086 5f68 260E0000 .long 0xe26
+ 19087 5f6c 00000000 .quad .LBB1882
+ 19087 00000000
+ 19088 5f74 00000000 .quad .LBE1882
+ 19088 00000000
+ 19089 5f7c 03 .byte 0x3
+ 19090 5f7d 7501 .value 0x175
+ 19091 5f7f 31 .uleb128 0x31
+ 19092 5f80 440E0000 .long 0xe44
+ 19093 5f84 03 .byte 0x3
+ 19094 5f85 91 .byte 0x91
+ 19095 5f86 805D .sleb128 -4480
+ 19096 5f88 31 .uleb128 0x31
+ 19097 5f89 380E0000 .long 0xe38
+ 19098 5f8d 03 .byte 0x3
+ 19099 5f8e 91 .byte 0x91
+ 19100 5f8f 905D .sleb128 -4464
+ 19101 5f91 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 502
+
+
+ 19102 5f92 00 .byte 0x0
+ 19103 5f93 00 .byte 0x0
+ 19104 5f94 00 .byte 0x0
+ 19105 5f95 34 .uleb128 0x34
+ 19106 5f96 BA0D0000 .long 0xdba
+ 19107 5f9a 00000000 .quad .LBB1884
+ 19107 00000000
+ 19108 5fa2 00000000 .quad .LBE1884
+ 19108 00000000
+ 19109 5faa 03 .byte 0x3
+ 19110 5fab 2106 .value 0x621
+ 19111 5fad 31 .uleb128 0x31
+ 19112 5fae CC0D0000 .long 0xdcc
+ 19113 5fb2 03 .byte 0x3
+ 19114 5fb3 91 .byte 0x91
+ 19115 5fb4 A05D .sleb128 -4448
+ 19116 5fb6 32 .uleb128 0x32
+ 19117 5fb7 00000000 .quad .LBB1885
+ 19117 00000000
+ 19118 5fbf 00000000 .quad .LBE1885
+ 19118 00000000
+ 19119 5fc7 33 .uleb128 0x33
+ 19120 5fc8 D80D0000 .long 0xdd8
+ 19121 5fcc 09 .byte 0x9
+ 19122 5fcd 03 .byte 0x3
+ 19123 5fce 00000000 .quad mask.8002
+ 19123 00000000
+ 19124 5fd6 34 .uleb128 0x34
+ 19125 5fd7 FB0D0000 .long 0xdfb
+ 19126 5fdb 00000000 .quad .LBB1886
+ 19126 00000000
+ 19127 5fe3 00000000 .quad .LBE1886
+ 19127 00000000
+ 19128 5feb 03 .byte 0x3
+ 19129 5fec FE04 .value 0x4fe
+ 19130 5fee 31 .uleb128 0x31
+ 19131 5fef 190E0000 .long 0xe19
+ 19132 5ff3 03 .byte 0x3
+ 19133 5ff4 91 .byte 0x91
+ 19134 5ff5 B05D .sleb128 -4432
+ 19135 5ff7 31 .uleb128 0x31
+ 19136 5ff8 0D0E0000 .long 0xe0d
+ 19137 5ffc 03 .byte 0x3
+ 19138 5ffd 91 .byte 0x91
+ 19139 5ffe C05D .sleb128 -4416
+ 19140 6000 34 .uleb128 0x34
+ 19141 6001 260E0000 .long 0xe26
+ 19142 6005 00000000 .quad .LBB1888
+ 19142 00000000
+ 19143 600d 00000000 .quad .LBE1888
+ 19143 00000000
+ 19144 6015 03 .byte 0x3
+ 19145 6016 7501 .value 0x175
+ 19146 6018 31 .uleb128 0x31
+ 19147 6019 440E0000 .long 0xe44
+ 19148 601d 03 .byte 0x3
+ 19149 601e 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 503
+
+
+ 19150 601f D05D .sleb128 -4400
+ 19151 6021 31 .uleb128 0x31
+ 19152 6022 380E0000 .long 0xe38
+ 19153 6026 03 .byte 0x3
+ 19154 6027 91 .byte 0x91
+ 19155 6028 E05D .sleb128 -4384
+ 19156 602a 00 .byte 0x0
+ 19157 602b 00 .byte 0x0
+ 19158 602c 00 .byte 0x0
+ 19159 602d 00 .byte 0x0
+ 19160 602e 00 .byte 0x0
+ 19161 602f 00 .byte 0x0
+ 19162 6030 30 .uleb128 0x30
+ 19163 6031 F7580000 .long 0x58f7
+ 19164 6035 00000000 .quad .LBB1890
+ 19164 00000000
+ 19165 603d 00000000 .quad .LBE1890
+ 19165 00000000
+ 19166 6045 03 .byte 0x3
+ 19167 6046 8707 .value 0x787
+ 19168 6048 5F600000 .long 0x605f
+ 19169 604c 31 .uleb128 0x31
+ 19170 604d 12590000 .long 0x5912
+ 19171 6051 03 .byte 0x3
+ 19172 6052 91 .byte 0x91
+ 19173 6053 F05D .sleb128 -4368
+ 19174 6055 31 .uleb128 0x31
+ 19175 6056 08590000 .long 0x5908
+ 19176 605a 03 .byte 0x3
+ 19177 605b 91 .byte 0x91
+ 19178 605c 805E .sleb128 -4352
+ 19179 605e 00 .byte 0x0
+ 19180 605f 30 .uleb128 0x30
+ 19181 6060 E30C0000 .long 0xce3
+ 19182 6064 00000000 .quad .LBB1892
+ 19182 00000000
+ 19183 606c 00000000 .quad .LBE1892
+ 19183 00000000
+ 19184 6074 03 .byte 0x3
+ 19185 6075 8807 .value 0x788
+ 19186 6077 25610000 .long 0x6125
+ 19187 607b 31 .uleb128 0x31
+ 19188 607c 010D0000 .long 0xd01
+ 19189 6080 03 .byte 0x3
+ 19190 6081 91 .byte 0x91
+ 19191 6082 9C5E .sleb128 -4324
+ 19192 6084 31 .uleb128 0x31
+ 19193 6085 F50C0000 .long 0xcf5
+ 19194 6089 03 .byte 0x3
+ 19195 608a 91 .byte 0x91
+ 19196 608b A05E .sleb128 -4320
+ 19197 608d 32 .uleb128 0x32
+ 19198 608e 00000000 .quad .LBB1893
+ 19198 00000000
+ 19199 6096 00000000 .quad .LBE1893
+ 19199 00000000
+ 19200 609e 33 .uleb128 0x33
+
GAS LISTING /tmp/ccPaCTqg.s page 504
+
+
+ 19201 609f 0D0D0000 .long 0xd0d
+ 19202 60a3 03 .byte 0x3
+ 19203 60a4 76 .byte 0x76
+ 19204 60a5 E054 .sleb128 -5536
+ 19205 60a7 30 .uleb128 0x30
+ 19206 60a8 1A0D0000 .long 0xd1a
+ 19207 60ac 00000000 .quad .LBB1894
+ 19207 00000000
+ 19208 60b4 00000000 .quad .LBE1894
+ 19208 00000000
+ 19209 60bc 03 .byte 0x3
+ 19210 60bd 8A06 .value 0x68a
+ 19211 60bf D6600000 .long 0x60d6
+ 19212 60c3 31 .uleb128 0x31
+ 19213 60c4 380D0000 .long 0xd38
+ 19214 60c8 03 .byte 0x3
+ 19215 60c9 91 .byte 0x91
+ 19216 60ca BC5E .sleb128 -4292
+ 19217 60cc 31 .uleb128 0x31
+ 19218 60cd 2C0D0000 .long 0xd2c
+ 19219 60d1 03 .byte 0x3
+ 19220 60d2 91 .byte 0x91
+ 19221 60d3 C05E .sleb128 -4288
+ 19222 60d5 00 .byte 0x0
+ 19223 60d6 34 .uleb128 0x34
+ 19224 60d7 450D0000 .long 0xd45
+ 19225 60db 00000000 .quad .LBB1896
+ 19225 00000000
+ 19226 60e3 00000000 .quad .LBE1896
+ 19226 00000000
+ 19227 60eb 03 .byte 0x3
+ 19228 60ec 8B06 .value 0x68b
+ 19229 60ee 31 .uleb128 0x31
+ 19230 60ef 570D0000 .long 0xd57
+ 19231 60f3 03 .byte 0x3
+ 19232 60f4 91 .byte 0x91
+ 19233 60f5 D05E .sleb128 -4272
+ 19234 60f7 34 .uleb128 0x34
+ 19235 60f8 640D0000 .long 0xd64
+ 19236 60fc 00000000 .quad .LBB1898
+ 19236 00000000
+ 19237 6104 00000000 .quad .LBE1898
+ 19237 00000000
+ 19238 610c 03 .byte 0x3
+ 19239 610d 4905 .value 0x549
+ 19240 610f 31 .uleb128 0x31
+ 19241 6110 820D0000 .long 0xd82
+ 19242 6114 03 .byte 0x3
+ 19243 6115 91 .byte 0x91
+ 19244 6116 EC5E .sleb128 -4244
+ 19245 6118 31 .uleb128 0x31
+ 19246 6119 760D0000 .long 0xd76
+ 19247 611d 03 .byte 0x3
+ 19248 611e 91 .byte 0x91
+ 19249 611f F05E .sleb128 -4240
+ 19250 6121 00 .byte 0x0
+ 19251 6122 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 505
+
+
+ 19252 6123 00 .byte 0x0
+ 19253 6124 00 .byte 0x0
+ 19254 6125 30 .uleb128 0x30
+ 19255 6126 8F0D0000 .long 0xd8f
+ 19256 612a 00000000 .quad .LBB1900
+ 19256 00000000
+ 19257 6132 00000000 .quad .LBE1900
+ 19257 00000000
+ 19258 613a 03 .byte 0x3
+ 19259 613b 8807 .value 0x788
+ 19260 613d 39630000 .long 0x6339
+ 19261 6141 31 .uleb128 0x31
+ 19262 6142 A10D0000 .long 0xda1
+ 19263 6146 03 .byte 0x3
+ 19264 6147 91 .byte 0x91
+ 19265 6148 805F .sleb128 -4224
+ 19266 614a 32 .uleb128 0x32
+ 19267 614b 00000000 .quad .LBB1901
+ 19267 00000000
+ 19268 6153 00000000 .quad .LBE1901
+ 19268 00000000
+ 19269 615b 33 .uleb128 0x33
+ 19270 615c AD0D0000 .long 0xdad
+ 19271 6160 03 .byte 0x3
+ 19272 6161 76 .byte 0x76
+ 19273 6162 F054 .sleb128 -5520
+ 19274 6164 30 .uleb128 0x30
+ 19275 6165 BA0D0000 .long 0xdba
+ 19276 6169 00000000 .quad .LBB1902
+ 19276 00000000
+ 19277 6171 00000000 .quad .LBE1902
+ 19277 00000000
+ 19278 6179 03 .byte 0x3
+ 19279 617a 1F06 .value 0x61f
+ 19280 617c 01620000 .long 0x6201
+ 19281 6180 31 .uleb128 0x31
+ 19282 6181 CC0D0000 .long 0xdcc
+ 19283 6185 03 .byte 0x3
+ 19284 6186 91 .byte 0x91
+ 19285 6187 905F .sleb128 -4208
+ 19286 6189 32 .uleb128 0x32
+ 19287 618a 00000000 .quad .LBB1903
+ 19287 00000000
+ 19288 6192 00000000 .quad .LBE1903
+ 19288 00000000
+ 19289 619a 33 .uleb128 0x33
+ 19290 619b D80D0000 .long 0xdd8
+ 19291 619f 09 .byte 0x9
+ 19292 61a0 03 .byte 0x3
+ 19293 61a1 00000000 .quad mask.8002
+ 19293 00000000
+ 19294 61a9 34 .uleb128 0x34
+ 19295 61aa FB0D0000 .long 0xdfb
+ 19296 61ae 00000000 .quad .LBB1904
+ 19296 00000000
+ 19297 61b6 00000000 .quad .LBE1904
+ 19297 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 506
+
+
+ 19298 61be 03 .byte 0x3
+ 19299 61bf FE04 .value 0x4fe
+ 19300 61c1 31 .uleb128 0x31
+ 19301 61c2 190E0000 .long 0xe19
+ 19302 61c6 03 .byte 0x3
+ 19303 61c7 91 .byte 0x91
+ 19304 61c8 A05F .sleb128 -4192
+ 19305 61ca 31 .uleb128 0x31
+ 19306 61cb 0D0E0000 .long 0xe0d
+ 19307 61cf 03 .byte 0x3
+ 19308 61d0 91 .byte 0x91
+ 19309 61d1 B05F .sleb128 -4176
+ 19310 61d3 34 .uleb128 0x34
+ 19311 61d4 260E0000 .long 0xe26
+ 19312 61d8 00000000 .quad .LBB1906
+ 19312 00000000
+ 19313 61e0 00000000 .quad .LBE1906
+ 19313 00000000
+ 19314 61e8 03 .byte 0x3
+ 19315 61e9 7501 .value 0x175
+ 19316 61eb 31 .uleb128 0x31
+ 19317 61ec 440E0000 .long 0xe44
+ 19318 61f0 03 .byte 0x3
+ 19319 61f1 91 .byte 0x91
+ 19320 61f2 C05F .sleb128 -4160
+ 19321 61f4 31 .uleb128 0x31
+ 19322 61f5 380E0000 .long 0xe38
+ 19323 61f9 03 .byte 0x3
+ 19324 61fa 91 .byte 0x91
+ 19325 61fb D05F .sleb128 -4144
+ 19326 61fd 00 .byte 0x0
+ 19327 61fe 00 .byte 0x0
+ 19328 61ff 00 .byte 0x0
+ 19329 6200 00 .byte 0x0
+ 19330 6201 30 .uleb128 0x30
+ 19331 6202 BA0D0000 .long 0xdba
+ 19332 6206 00000000 .quad .LBB1908
+ 19332 00000000
+ 19333 620e 00000000 .quad .LBE1908
+ 19333 00000000
+ 19334 6216 03 .byte 0x3
+ 19335 6217 2006 .value 0x620
+ 19336 6219 9E620000 .long 0x629e
+ 19337 621d 31 .uleb128 0x31
+ 19338 621e CC0D0000 .long 0xdcc
+ 19339 6222 03 .byte 0x3
+ 19340 6223 91 .byte 0x91
+ 19341 6224 E05F .sleb128 -4128
+ 19342 6226 32 .uleb128 0x32
+ 19343 6227 00000000 .quad .LBB1909
+ 19343 00000000
+ 19344 622f 00000000 .quad .LBE1909
+ 19344 00000000
+ 19345 6237 33 .uleb128 0x33
+ 19346 6238 D80D0000 .long 0xdd8
+ 19347 623c 09 .byte 0x9
+ 19348 623d 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 507
+
+
+ 19349 623e 00000000 .quad mask.8002
+ 19349 00000000
+ 19350 6246 34 .uleb128 0x34
+ 19351 6247 FB0D0000 .long 0xdfb
+ 19352 624b 00000000 .quad .LBB1910
+ 19352 00000000
+ 19353 6253 00000000 .quad .LBE1910
+ 19353 00000000
+ 19354 625b 03 .byte 0x3
+ 19355 625c FE04 .value 0x4fe
+ 19356 625e 31 .uleb128 0x31
+ 19357 625f 190E0000 .long 0xe19
+ 19358 6263 03 .byte 0x3
+ 19359 6264 91 .byte 0x91
+ 19360 6265 F05F .sleb128 -4112
+ 19361 6267 31 .uleb128 0x31
+ 19362 6268 0D0E0000 .long 0xe0d
+ 19363 626c 03 .byte 0x3
+ 19364 626d 91 .byte 0x91
+ 19365 626e 8060 .sleb128 -4096
+ 19366 6270 34 .uleb128 0x34
+ 19367 6271 260E0000 .long 0xe26
+ 19368 6275 00000000 .quad .LBB1912
+ 19368 00000000
+ 19369 627d 00000000 .quad .LBE1912
+ 19369 00000000
+ 19370 6285 03 .byte 0x3
+ 19371 6286 7501 .value 0x175
+ 19372 6288 31 .uleb128 0x31
+ 19373 6289 440E0000 .long 0xe44
+ 19374 628d 03 .byte 0x3
+ 19375 628e 91 .byte 0x91
+ 19376 628f 9060 .sleb128 -4080
+ 19377 6291 31 .uleb128 0x31
+ 19378 6292 380E0000 .long 0xe38
+ 19379 6296 03 .byte 0x3
+ 19380 6297 91 .byte 0x91
+ 19381 6298 A060 .sleb128 -4064
+ 19382 629a 00 .byte 0x0
+ 19383 629b 00 .byte 0x0
+ 19384 629c 00 .byte 0x0
+ 19385 629d 00 .byte 0x0
+ 19386 629e 34 .uleb128 0x34
+ 19387 629f BA0D0000 .long 0xdba
+ 19388 62a3 00000000 .quad .LBB1914
+ 19388 00000000
+ 19389 62ab 00000000 .quad .LBE1914
+ 19389 00000000
+ 19390 62b3 03 .byte 0x3
+ 19391 62b4 2106 .value 0x621
+ 19392 62b6 31 .uleb128 0x31
+ 19393 62b7 CC0D0000 .long 0xdcc
+ 19394 62bb 03 .byte 0x3
+ 19395 62bc 91 .byte 0x91
+ 19396 62bd B060 .sleb128 -4048
+ 19397 62bf 32 .uleb128 0x32
+ 19398 62c0 00000000 .quad .LBB1915
+
GAS LISTING /tmp/ccPaCTqg.s page 508
+
+
+ 19398 00000000
+ 19399 62c8 00000000 .quad .LBE1915
+ 19399 00000000
+ 19400 62d0 33 .uleb128 0x33
+ 19401 62d1 D80D0000 .long 0xdd8
+ 19402 62d5 09 .byte 0x9
+ 19403 62d6 03 .byte 0x3
+ 19404 62d7 00000000 .quad mask.8002
+ 19404 00000000
+ 19405 62df 34 .uleb128 0x34
+ 19406 62e0 FB0D0000 .long 0xdfb
+ 19407 62e4 00000000 .quad .LBB1916
+ 19407 00000000
+ 19408 62ec 00000000 .quad .LBE1916
+ 19408 00000000
+ 19409 62f4 03 .byte 0x3
+ 19410 62f5 FE04 .value 0x4fe
+ 19411 62f7 31 .uleb128 0x31
+ 19412 62f8 190E0000 .long 0xe19
+ 19413 62fc 03 .byte 0x3
+ 19414 62fd 91 .byte 0x91
+ 19415 62fe C060 .sleb128 -4032
+ 19416 6300 31 .uleb128 0x31
+ 19417 6301 0D0E0000 .long 0xe0d
+ 19418 6305 03 .byte 0x3
+ 19419 6306 91 .byte 0x91
+ 19420 6307 D060 .sleb128 -4016
+ 19421 6309 34 .uleb128 0x34
+ 19422 630a 260E0000 .long 0xe26
+ 19423 630e 00000000 .quad .LBB1918
+ 19423 00000000
+ 19424 6316 00000000 .quad .LBE1918
+ 19424 00000000
+ 19425 631e 03 .byte 0x3
+ 19426 631f 7501 .value 0x175
+ 19427 6321 31 .uleb128 0x31
+ 19428 6322 440E0000 .long 0xe44
+ 19429 6326 03 .byte 0x3
+ 19430 6327 91 .byte 0x91
+ 19431 6328 E060 .sleb128 -4000
+ 19432 632a 31 .uleb128 0x31
+ 19433 632b 380E0000 .long 0xe38
+ 19434 632f 03 .byte 0x3
+ 19435 6330 91 .byte 0x91
+ 19436 6331 F060 .sleb128 -3984
+ 19437 6333 00 .byte 0x0
+ 19438 6334 00 .byte 0x0
+ 19439 6335 00 .byte 0x0
+ 19440 6336 00 .byte 0x0
+ 19441 6337 00 .byte 0x0
+ 19442 6338 00 .byte 0x0
+ 19443 6339 30 .uleb128 0x30
+ 19444 633a F7580000 .long 0x58f7
+ 19445 633e 00000000 .quad .LBB1920
+ 19445 00000000
+ 19446 6346 00000000 .quad .LBE1920
+ 19446 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 509
+
+
+ 19447 634e 03 .byte 0x3
+ 19448 634f 8807 .value 0x788
+ 19449 6351 68630000 .long 0x6368
+ 19450 6355 31 .uleb128 0x31
+ 19451 6356 12590000 .long 0x5912
+ 19452 635a 03 .byte 0x3
+ 19453 635b 91 .byte 0x91
+ 19454 635c 8061 .sleb128 -3968
+ 19455 635e 31 .uleb128 0x31
+ 19456 635f 08590000 .long 0x5908
+ 19457 6363 03 .byte 0x3
+ 19458 6364 91 .byte 0x91
+ 19459 6365 9061 .sleb128 -3952
+ 19460 6367 00 .byte 0x0
+ 19461 6368 30 .uleb128 0x30
+ 19462 6369 1D590000 .long 0x591d
+ 19463 636d 00000000 .quad .LBB1922
+ 19463 00000000
+ 19464 6375 00000000 .quad .LBE1922
+ 19464 00000000
+ 19465 637d 03 .byte 0x3
+ 19466 637e 8907 .value 0x789
+ 19467 6380 25640000 .long 0x6425
+ 19468 6384 31 .uleb128 0x31
+ 19469 6385 2F590000 .long 0x592f
+ 19470 6389 03 .byte 0x3
+ 19471 638a 91 .byte 0x91
+ 19472 638b A061 .sleb128 -3936
+ 19473 638d 32 .uleb128 0x32
+ 19474 638e 00000000 .quad .LBB1923
+ 19474 00000000
+ 19475 6396 00000000 .quad .LBE1923
+ 19475 00000000
+ 19476 639e 33 .uleb128 0x33
+ 19477 639f 3B590000 .long 0x593b
+ 19478 63a3 03 .byte 0x3
+ 19479 63a4 76 .byte 0x76
+ 19480 63a5 8055 .sleb128 -5504
+ 19481 63a7 30 .uleb128 0x30
+ 19482 63a8 1A0D0000 .long 0xd1a
+ 19483 63ac 00000000 .quad .LBB1924
+ 19483 00000000
+ 19484 63b4 00000000 .quad .LBE1924
+ 19484 00000000
+ 19485 63bc 03 .byte 0x3
+ 19486 63bd 7206 .value 0x672
+ 19487 63bf D6630000 .long 0x63d6
+ 19488 63c3 31 .uleb128 0x31
+ 19489 63c4 380D0000 .long 0xd38
+ 19490 63c8 03 .byte 0x3
+ 19491 63c9 91 .byte 0x91
+ 19492 63ca BC61 .sleb128 -3908
+ 19493 63cc 31 .uleb128 0x31
+ 19494 63cd 2C0D0000 .long 0xd2c
+ 19495 63d1 03 .byte 0x3
+ 19496 63d2 91 .byte 0x91
+ 19497 63d3 C061 .sleb128 -3904
+
GAS LISTING /tmp/ccPaCTqg.s page 510
+
+
+ 19498 63d5 00 .byte 0x0
+ 19499 63d6 34 .uleb128 0x34
+ 19500 63d7 48590000 .long 0x5948
+ 19501 63db 00000000 .quad .LBB1926
+ 19501 00000000
+ 19502 63e3 00000000 .quad .LBE1926
+ 19502 00000000
+ 19503 63eb 03 .byte 0x3
+ 19504 63ec 7306 .value 0x673
+ 19505 63ee 31 .uleb128 0x31
+ 19506 63ef 5A590000 .long 0x595a
+ 19507 63f3 03 .byte 0x3
+ 19508 63f4 91 .byte 0x91
+ 19509 63f5 D061 .sleb128 -3888
+ 19510 63f7 34 .uleb128 0x34
+ 19511 63f8 640D0000 .long 0xd64
+ 19512 63fc 00000000 .quad .LBB1928
+ 19512 00000000
+ 19513 6404 00000000 .quad .LBE1928
+ 19513 00000000
+ 19514 640c 03 .byte 0x3
+ 19515 640d 6505 .value 0x565
+ 19516 640f 31 .uleb128 0x31
+ 19517 6410 820D0000 .long 0xd82
+ 19518 6414 03 .byte 0x3
+ 19519 6415 91 .byte 0x91
+ 19520 6416 EC61 .sleb128 -3860
+ 19521 6418 31 .uleb128 0x31
+ 19522 6419 760D0000 .long 0xd76
+ 19523 641d 03 .byte 0x3
+ 19524 641e 91 .byte 0x91
+ 19525 641f F061 .sleb128 -3856
+ 19526 6421 00 .byte 0x0
+ 19527 6422 00 .byte 0x0
+ 19528 6423 00 .byte 0x0
+ 19529 6424 00 .byte 0x0
+ 19530 6425 30 .uleb128 0x30
+ 19531 6426 8F0D0000 .long 0xd8f
+ 19532 642a 00000000 .quad .LBB1930
+ 19532 00000000
+ 19533 6432 00000000 .quad .LBE1930
+ 19533 00000000
+ 19534 643a 03 .byte 0x3
+ 19535 643b 8907 .value 0x789
+ 19536 643d 39660000 .long 0x6639
+ 19537 6441 31 .uleb128 0x31
+ 19538 6442 A10D0000 .long 0xda1
+ 19539 6446 03 .byte 0x3
+ 19540 6447 91 .byte 0x91
+ 19541 6448 8062 .sleb128 -3840
+ 19542 644a 32 .uleb128 0x32
+ 19543 644b 00000000 .quad .LBB1931
+ 19543 00000000
+ 19544 6453 00000000 .quad .LBE1931
+ 19544 00000000
+ 19545 645b 33 .uleb128 0x33
+ 19546 645c AD0D0000 .long 0xdad
+
GAS LISTING /tmp/ccPaCTqg.s page 511
+
+
+ 19547 6460 03 .byte 0x3
+ 19548 6461 76 .byte 0x76
+ 19549 6462 9055 .sleb128 -5488
+ 19550 6464 30 .uleb128 0x30
+ 19551 6465 BA0D0000 .long 0xdba
+ 19552 6469 00000000 .quad .LBB1932
+ 19552 00000000
+ 19553 6471 00000000 .quad .LBE1932
+ 19553 00000000
+ 19554 6479 03 .byte 0x3
+ 19555 647a 1F06 .value 0x61f
+ 19556 647c 01650000 .long 0x6501
+ 19557 6480 31 .uleb128 0x31
+ 19558 6481 CC0D0000 .long 0xdcc
+ 19559 6485 03 .byte 0x3
+ 19560 6486 91 .byte 0x91
+ 19561 6487 9062 .sleb128 -3824
+ 19562 6489 32 .uleb128 0x32
+ 19563 648a 00000000 .quad .LBB1933
+ 19563 00000000
+ 19564 6492 00000000 .quad .LBE1933
+ 19564 00000000
+ 19565 649a 33 .uleb128 0x33
+ 19566 649b D80D0000 .long 0xdd8
+ 19567 649f 09 .byte 0x9
+ 19568 64a0 03 .byte 0x3
+ 19569 64a1 00000000 .quad mask.8002
+ 19569 00000000
+ 19570 64a9 34 .uleb128 0x34
+ 19571 64aa FB0D0000 .long 0xdfb
+ 19572 64ae 00000000 .quad .LBB1934
+ 19572 00000000
+ 19573 64b6 00000000 .quad .LBE1934
+ 19573 00000000
+ 19574 64be 03 .byte 0x3
+ 19575 64bf FE04 .value 0x4fe
+ 19576 64c1 31 .uleb128 0x31
+ 19577 64c2 190E0000 .long 0xe19
+ 19578 64c6 03 .byte 0x3
+ 19579 64c7 91 .byte 0x91
+ 19580 64c8 A062 .sleb128 -3808
+ 19581 64ca 31 .uleb128 0x31
+ 19582 64cb 0D0E0000 .long 0xe0d
+ 19583 64cf 03 .byte 0x3
+ 19584 64d0 91 .byte 0x91
+ 19585 64d1 B062 .sleb128 -3792
+ 19586 64d3 34 .uleb128 0x34
+ 19587 64d4 260E0000 .long 0xe26
+ 19588 64d8 00000000 .quad .LBB1936
+ 19588 00000000
+ 19589 64e0 00000000 .quad .LBE1936
+ 19589 00000000
+ 19590 64e8 03 .byte 0x3
+ 19591 64e9 7501 .value 0x175
+ 19592 64eb 31 .uleb128 0x31
+ 19593 64ec 440E0000 .long 0xe44
+ 19594 64f0 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 512
+
+
+ 19595 64f1 91 .byte 0x91
+ 19596 64f2 C062 .sleb128 -3776
+ 19597 64f4 31 .uleb128 0x31
+ 19598 64f5 380E0000 .long 0xe38
+ 19599 64f9 03 .byte 0x3
+ 19600 64fa 91 .byte 0x91
+ 19601 64fb D062 .sleb128 -3760
+ 19602 64fd 00 .byte 0x0
+ 19603 64fe 00 .byte 0x0
+ 19604 64ff 00 .byte 0x0
+ 19605 6500 00 .byte 0x0
+ 19606 6501 30 .uleb128 0x30
+ 19607 6502 BA0D0000 .long 0xdba
+ 19608 6506 00000000 .quad .LBB1938
+ 19608 00000000
+ 19609 650e 00000000 .quad .LBE1938
+ 19609 00000000
+ 19610 6516 03 .byte 0x3
+ 19611 6517 2006 .value 0x620
+ 19612 6519 9E650000 .long 0x659e
+ 19613 651d 31 .uleb128 0x31
+ 19614 651e CC0D0000 .long 0xdcc
+ 19615 6522 03 .byte 0x3
+ 19616 6523 91 .byte 0x91
+ 19617 6524 E062 .sleb128 -3744
+ 19618 6526 32 .uleb128 0x32
+ 19619 6527 00000000 .quad .LBB1939
+ 19619 00000000
+ 19620 652f 00000000 .quad .LBE1939
+ 19620 00000000
+ 19621 6537 33 .uleb128 0x33
+ 19622 6538 D80D0000 .long 0xdd8
+ 19623 653c 09 .byte 0x9
+ 19624 653d 03 .byte 0x3
+ 19625 653e 00000000 .quad mask.8002
+ 19625 00000000
+ 19626 6546 34 .uleb128 0x34
+ 19627 6547 FB0D0000 .long 0xdfb
+ 19628 654b 00000000 .quad .LBB1940
+ 19628 00000000
+ 19629 6553 00000000 .quad .LBE1940
+ 19629 00000000
+ 19630 655b 03 .byte 0x3
+ 19631 655c FE04 .value 0x4fe
+ 19632 655e 31 .uleb128 0x31
+ 19633 655f 190E0000 .long 0xe19
+ 19634 6563 03 .byte 0x3
+ 19635 6564 91 .byte 0x91
+ 19636 6565 F062 .sleb128 -3728
+ 19637 6567 31 .uleb128 0x31
+ 19638 6568 0D0E0000 .long 0xe0d
+ 19639 656c 03 .byte 0x3
+ 19640 656d 91 .byte 0x91
+ 19641 656e 8063 .sleb128 -3712
+ 19642 6570 34 .uleb128 0x34
+ 19643 6571 260E0000 .long 0xe26
+ 19644 6575 00000000 .quad .LBB1942
+
GAS LISTING /tmp/ccPaCTqg.s page 513
+
+
+ 19644 00000000
+ 19645 657d 00000000 .quad .LBE1942
+ 19645 00000000
+ 19646 6585 03 .byte 0x3
+ 19647 6586 7501 .value 0x175
+ 19648 6588 31 .uleb128 0x31
+ 19649 6589 440E0000 .long 0xe44
+ 19650 658d 03 .byte 0x3
+ 19651 658e 91 .byte 0x91
+ 19652 658f 9063 .sleb128 -3696
+ 19653 6591 31 .uleb128 0x31
+ 19654 6592 380E0000 .long 0xe38
+ 19655 6596 03 .byte 0x3
+ 19656 6597 91 .byte 0x91
+ 19657 6598 A063 .sleb128 -3680
+ 19658 659a 00 .byte 0x0
+ 19659 659b 00 .byte 0x0
+ 19660 659c 00 .byte 0x0
+ 19661 659d 00 .byte 0x0
+ 19662 659e 34 .uleb128 0x34
+ 19663 659f BA0D0000 .long 0xdba
+ 19664 65a3 00000000 .quad .LBB1944
+ 19664 00000000
+ 19665 65ab 00000000 .quad .LBE1944
+ 19665 00000000
+ 19666 65b3 03 .byte 0x3
+ 19667 65b4 2106 .value 0x621
+ 19668 65b6 31 .uleb128 0x31
+ 19669 65b7 CC0D0000 .long 0xdcc
+ 19670 65bb 03 .byte 0x3
+ 19671 65bc 91 .byte 0x91
+ 19672 65bd B063 .sleb128 -3664
+ 19673 65bf 32 .uleb128 0x32
+ 19674 65c0 00000000 .quad .LBB1945
+ 19674 00000000
+ 19675 65c8 00000000 .quad .LBE1945
+ 19675 00000000
+ 19676 65d0 33 .uleb128 0x33
+ 19677 65d1 D80D0000 .long 0xdd8
+ 19678 65d5 09 .byte 0x9
+ 19679 65d6 03 .byte 0x3
+ 19680 65d7 00000000 .quad mask.8002
+ 19680 00000000
+ 19681 65df 34 .uleb128 0x34
+ 19682 65e0 FB0D0000 .long 0xdfb
+ 19683 65e4 00000000 .quad .LBB1946
+ 19683 00000000
+ 19684 65ec 00000000 .quad .LBE1946
+ 19684 00000000
+ 19685 65f4 03 .byte 0x3
+ 19686 65f5 FE04 .value 0x4fe
+ 19687 65f7 31 .uleb128 0x31
+ 19688 65f8 190E0000 .long 0xe19
+ 19689 65fc 03 .byte 0x3
+ 19690 65fd 91 .byte 0x91
+ 19691 65fe C063 .sleb128 -3648
+ 19692 6600 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 514
+
+
+ 19693 6601 0D0E0000 .long 0xe0d
+ 19694 6605 03 .byte 0x3
+ 19695 6606 91 .byte 0x91
+ 19696 6607 D063 .sleb128 -3632
+ 19697 6609 34 .uleb128 0x34
+ 19698 660a 260E0000 .long 0xe26
+ 19699 660e 00000000 .quad .LBB1948
+ 19699 00000000
+ 19700 6616 00000000 .quad .LBE1948
+ 19700 00000000
+ 19701 661e 03 .byte 0x3
+ 19702 661f 7501 .value 0x175
+ 19703 6621 31 .uleb128 0x31
+ 19704 6622 440E0000 .long 0xe44
+ 19705 6626 03 .byte 0x3
+ 19706 6627 91 .byte 0x91
+ 19707 6628 E063 .sleb128 -3616
+ 19708 662a 31 .uleb128 0x31
+ 19709 662b 380E0000 .long 0xe38
+ 19710 662f 03 .byte 0x3
+ 19711 6630 91 .byte 0x91
+ 19712 6631 F063 .sleb128 -3600
+ 19713 6633 00 .byte 0x0
+ 19714 6634 00 .byte 0x0
+ 19715 6635 00 .byte 0x0
+ 19716 6636 00 .byte 0x0
+ 19717 6637 00 .byte 0x0
+ 19718 6638 00 .byte 0x0
+ 19719 6639 30 .uleb128 0x30
+ 19720 663a F7580000 .long 0x58f7
+ 19721 663e 00000000 .quad .LBB1950
+ 19721 00000000
+ 19722 6646 00000000 .quad .LBE1950
+ 19722 00000000
+ 19723 664e 03 .byte 0x3
+ 19724 664f 8907 .value 0x789
+ 19725 6651 68660000 .long 0x6668
+ 19726 6655 31 .uleb128 0x31
+ 19727 6656 12590000 .long 0x5912
+ 19728 665a 03 .byte 0x3
+ 19729 665b 91 .byte 0x91
+ 19730 665c 8064 .sleb128 -3584
+ 19731 665e 31 .uleb128 0x31
+ 19732 665f 08590000 .long 0x5908
+ 19733 6663 03 .byte 0x3
+ 19734 6664 91 .byte 0x91
+ 19735 6665 9064 .sleb128 -3568
+ 19736 6667 00 .byte 0x0
+ 19737 6668 30 .uleb128 0x30
+ 19738 6669 E30C0000 .long 0xce3
+ 19739 666d 00000000 .quad .LBB1952
+ 19739 00000000
+ 19740 6675 00000000 .quad .LBE1952
+ 19740 00000000
+ 19741 667d 03 .byte 0x3
+ 19742 667e 8A07 .value 0x78a
+ 19743 6680 2E670000 .long 0x672e
+
GAS LISTING /tmp/ccPaCTqg.s page 515
+
+
+ 19744 6684 31 .uleb128 0x31
+ 19745 6685 010D0000 .long 0xd01
+ 19746 6689 03 .byte 0x3
+ 19747 668a 91 .byte 0x91
+ 19748 668b AC64 .sleb128 -3540
+ 19749 668d 31 .uleb128 0x31
+ 19750 668e F50C0000 .long 0xcf5
+ 19751 6692 03 .byte 0x3
+ 19752 6693 91 .byte 0x91
+ 19753 6694 B064 .sleb128 -3536
+ 19754 6696 32 .uleb128 0x32
+ 19755 6697 00000000 .quad .LBB1953
+ 19755 00000000
+ 19756 669f 00000000 .quad .LBE1953
+ 19756 00000000
+ 19757 66a7 33 .uleb128 0x33
+ 19758 66a8 0D0D0000 .long 0xd0d
+ 19759 66ac 03 .byte 0x3
+ 19760 66ad 76 .byte 0x76
+ 19761 66ae A055 .sleb128 -5472
+ 19762 66b0 30 .uleb128 0x30
+ 19763 66b1 1A0D0000 .long 0xd1a
+ 19764 66b5 00000000 .quad .LBB1954
+ 19764 00000000
+ 19765 66bd 00000000 .quad .LBE1954
+ 19765 00000000
+ 19766 66c5 03 .byte 0x3
+ 19767 66c6 8A06 .value 0x68a
+ 19768 66c8 DF660000 .long 0x66df
+ 19769 66cc 31 .uleb128 0x31
+ 19770 66cd 380D0000 .long 0xd38
+ 19771 66d1 03 .byte 0x3
+ 19772 66d2 91 .byte 0x91
+ 19773 66d3 CC64 .sleb128 -3508
+ 19774 66d5 31 .uleb128 0x31
+ 19775 66d6 2C0D0000 .long 0xd2c
+ 19776 66da 03 .byte 0x3
+ 19777 66db 91 .byte 0x91
+ 19778 66dc D064 .sleb128 -3504
+ 19779 66de 00 .byte 0x0
+ 19780 66df 34 .uleb128 0x34
+ 19781 66e0 450D0000 .long 0xd45
+ 19782 66e4 00000000 .quad .LBB1956
+ 19782 00000000
+ 19783 66ec 00000000 .quad .LBE1956
+ 19783 00000000
+ 19784 66f4 03 .byte 0x3
+ 19785 66f5 8B06 .value 0x68b
+ 19786 66f7 31 .uleb128 0x31
+ 19787 66f8 570D0000 .long 0xd57
+ 19788 66fc 03 .byte 0x3
+ 19789 66fd 91 .byte 0x91
+ 19790 66fe E064 .sleb128 -3488
+ 19791 6700 34 .uleb128 0x34
+ 19792 6701 640D0000 .long 0xd64
+ 19793 6705 00000000 .quad .LBB1958
+ 19793 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 516
+
+
+ 19794 670d 00000000 .quad .LBE1958
+ 19794 00000000
+ 19795 6715 03 .byte 0x3
+ 19796 6716 4905 .value 0x549
+ 19797 6718 31 .uleb128 0x31
+ 19798 6719 820D0000 .long 0xd82
+ 19799 671d 03 .byte 0x3
+ 19800 671e 91 .byte 0x91
+ 19801 671f FC64 .sleb128 -3460
+ 19802 6721 31 .uleb128 0x31
+ 19803 6722 760D0000 .long 0xd76
+ 19804 6726 03 .byte 0x3
+ 19805 6727 91 .byte 0x91
+ 19806 6728 8065 .sleb128 -3456
+ 19807 672a 00 .byte 0x0
+ 19808 672b 00 .byte 0x0
+ 19809 672c 00 .byte 0x0
+ 19810 672d 00 .byte 0x0
+ 19811 672e 30 .uleb128 0x30
+ 19812 672f 8F0D0000 .long 0xd8f
+ 19813 6733 00000000 .quad .LBB1960
+ 19813 00000000
+ 19814 673b 00000000 .quad .LBE1960
+ 19814 00000000
+ 19815 6743 03 .byte 0x3
+ 19816 6744 8A07 .value 0x78a
+ 19817 6746 42690000 .long 0x6942
+ 19818 674a 31 .uleb128 0x31
+ 19819 674b A10D0000 .long 0xda1
+ 19820 674f 03 .byte 0x3
+ 19821 6750 91 .byte 0x91
+ 19822 6751 9065 .sleb128 -3440
+ 19823 6753 32 .uleb128 0x32
+ 19824 6754 00000000 .quad .LBB1961
+ 19824 00000000
+ 19825 675c 00000000 .quad .LBE1961
+ 19825 00000000
+ 19826 6764 33 .uleb128 0x33
+ 19827 6765 AD0D0000 .long 0xdad
+ 19828 6769 03 .byte 0x3
+ 19829 676a 76 .byte 0x76
+ 19830 676b B055 .sleb128 -5456
+ 19831 676d 30 .uleb128 0x30
+ 19832 676e BA0D0000 .long 0xdba
+ 19833 6772 00000000 .quad .LBB1962
+ 19833 00000000
+ 19834 677a 00000000 .quad .LBE1962
+ 19834 00000000
+ 19835 6782 03 .byte 0x3
+ 19836 6783 1F06 .value 0x61f
+ 19837 6785 0A680000 .long 0x680a
+ 19838 6789 31 .uleb128 0x31
+ 19839 678a CC0D0000 .long 0xdcc
+ 19840 678e 03 .byte 0x3
+ 19841 678f 91 .byte 0x91
+ 19842 6790 A065 .sleb128 -3424
+ 19843 6792 32 .uleb128 0x32
+
GAS LISTING /tmp/ccPaCTqg.s page 517
+
+
+ 19844 6793 00000000 .quad .LBB1963
+ 19844 00000000
+ 19845 679b 00000000 .quad .LBE1963
+ 19845 00000000
+ 19846 67a3 33 .uleb128 0x33
+ 19847 67a4 D80D0000 .long 0xdd8
+ 19848 67a8 09 .byte 0x9
+ 19849 67a9 03 .byte 0x3
+ 19850 67aa 00000000 .quad mask.8002
+ 19850 00000000
+ 19851 67b2 34 .uleb128 0x34
+ 19852 67b3 FB0D0000 .long 0xdfb
+ 19853 67b7 00000000 .quad .LBB1964
+ 19853 00000000
+ 19854 67bf 00000000 .quad .LBE1964
+ 19854 00000000
+ 19855 67c7 03 .byte 0x3
+ 19856 67c8 FE04 .value 0x4fe
+ 19857 67ca 31 .uleb128 0x31
+ 19858 67cb 190E0000 .long 0xe19
+ 19859 67cf 03 .byte 0x3
+ 19860 67d0 91 .byte 0x91
+ 19861 67d1 B065 .sleb128 -3408
+ 19862 67d3 31 .uleb128 0x31
+ 19863 67d4 0D0E0000 .long 0xe0d
+ 19864 67d8 03 .byte 0x3
+ 19865 67d9 91 .byte 0x91
+ 19866 67da C065 .sleb128 -3392
+ 19867 67dc 34 .uleb128 0x34
+ 19868 67dd 260E0000 .long 0xe26
+ 19869 67e1 00000000 .quad .LBB1966
+ 19869 00000000
+ 19870 67e9 00000000 .quad .LBE1966
+ 19870 00000000
+ 19871 67f1 03 .byte 0x3
+ 19872 67f2 7501 .value 0x175
+ 19873 67f4 31 .uleb128 0x31
+ 19874 67f5 440E0000 .long 0xe44
+ 19875 67f9 03 .byte 0x3
+ 19876 67fa 91 .byte 0x91
+ 19877 67fb D065 .sleb128 -3376
+ 19878 67fd 31 .uleb128 0x31
+ 19879 67fe 380E0000 .long 0xe38
+ 19880 6802 03 .byte 0x3
+ 19881 6803 91 .byte 0x91
+ 19882 6804 E065 .sleb128 -3360
+ 19883 6806 00 .byte 0x0
+ 19884 6807 00 .byte 0x0
+ 19885 6808 00 .byte 0x0
+ 19886 6809 00 .byte 0x0
+ 19887 680a 30 .uleb128 0x30
+ 19888 680b BA0D0000 .long 0xdba
+ 19889 680f 00000000 .quad .LBB1968
+ 19889 00000000
+ 19890 6817 00000000 .quad .LBE1968
+ 19890 00000000
+ 19891 681f 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 518
+
+
+ 19892 6820 2006 .value 0x620
+ 19893 6822 A7680000 .long 0x68a7
+ 19894 6826 31 .uleb128 0x31
+ 19895 6827 CC0D0000 .long 0xdcc
+ 19896 682b 03 .byte 0x3
+ 19897 682c 91 .byte 0x91
+ 19898 682d F065 .sleb128 -3344
+ 19899 682f 32 .uleb128 0x32
+ 19900 6830 00000000 .quad .LBB1969
+ 19900 00000000
+ 19901 6838 00000000 .quad .LBE1969
+ 19901 00000000
+ 19902 6840 33 .uleb128 0x33
+ 19903 6841 D80D0000 .long 0xdd8
+ 19904 6845 09 .byte 0x9
+ 19905 6846 03 .byte 0x3
+ 19906 6847 00000000 .quad mask.8002
+ 19906 00000000
+ 19907 684f 34 .uleb128 0x34
+ 19908 6850 FB0D0000 .long 0xdfb
+ 19909 6854 00000000 .quad .LBB1970
+ 19909 00000000
+ 19910 685c 00000000 .quad .LBE1970
+ 19910 00000000
+ 19911 6864 03 .byte 0x3
+ 19912 6865 FE04 .value 0x4fe
+ 19913 6867 31 .uleb128 0x31
+ 19914 6868 190E0000 .long 0xe19
+ 19915 686c 03 .byte 0x3
+ 19916 686d 91 .byte 0x91
+ 19917 686e 8066 .sleb128 -3328
+ 19918 6870 31 .uleb128 0x31
+ 19919 6871 0D0E0000 .long 0xe0d
+ 19920 6875 03 .byte 0x3
+ 19921 6876 91 .byte 0x91
+ 19922 6877 9066 .sleb128 -3312
+ 19923 6879 34 .uleb128 0x34
+ 19924 687a 260E0000 .long 0xe26
+ 19925 687e 00000000 .quad .LBB1972
+ 19925 00000000
+ 19926 6886 00000000 .quad .LBE1972
+ 19926 00000000
+ 19927 688e 03 .byte 0x3
+ 19928 688f 7501 .value 0x175
+ 19929 6891 31 .uleb128 0x31
+ 19930 6892 440E0000 .long 0xe44
+ 19931 6896 03 .byte 0x3
+ 19932 6897 91 .byte 0x91
+ 19933 6898 A066 .sleb128 -3296
+ 19934 689a 31 .uleb128 0x31
+ 19935 689b 380E0000 .long 0xe38
+ 19936 689f 03 .byte 0x3
+ 19937 68a0 91 .byte 0x91
+ 19938 68a1 B066 .sleb128 -3280
+ 19939 68a3 00 .byte 0x0
+ 19940 68a4 00 .byte 0x0
+ 19941 68a5 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 519
+
+
+ 19942 68a6 00 .byte 0x0
+ 19943 68a7 34 .uleb128 0x34
+ 19944 68a8 BA0D0000 .long 0xdba
+ 19945 68ac 00000000 .quad .LBB1974
+ 19945 00000000
+ 19946 68b4 00000000 .quad .LBE1974
+ 19946 00000000
+ 19947 68bc 03 .byte 0x3
+ 19948 68bd 2106 .value 0x621
+ 19949 68bf 31 .uleb128 0x31
+ 19950 68c0 CC0D0000 .long 0xdcc
+ 19951 68c4 03 .byte 0x3
+ 19952 68c5 91 .byte 0x91
+ 19953 68c6 C066 .sleb128 -3264
+ 19954 68c8 32 .uleb128 0x32
+ 19955 68c9 00000000 .quad .LBB1975
+ 19955 00000000
+ 19956 68d1 00000000 .quad .LBE1975
+ 19956 00000000
+ 19957 68d9 33 .uleb128 0x33
+ 19958 68da D80D0000 .long 0xdd8
+ 19959 68de 09 .byte 0x9
+ 19960 68df 03 .byte 0x3
+ 19961 68e0 00000000 .quad mask.8002
+ 19961 00000000
+ 19962 68e8 34 .uleb128 0x34
+ 19963 68e9 FB0D0000 .long 0xdfb
+ 19964 68ed 00000000 .quad .LBB1976
+ 19964 00000000
+ 19965 68f5 00000000 .quad .LBE1976
+ 19965 00000000
+ 19966 68fd 03 .byte 0x3
+ 19967 68fe FE04 .value 0x4fe
+ 19968 6900 31 .uleb128 0x31
+ 19969 6901 190E0000 .long 0xe19
+ 19970 6905 03 .byte 0x3
+ 19971 6906 91 .byte 0x91
+ 19972 6907 D066 .sleb128 -3248
+ 19973 6909 31 .uleb128 0x31
+ 19974 690a 0D0E0000 .long 0xe0d
+ 19975 690e 03 .byte 0x3
+ 19976 690f 91 .byte 0x91
+ 19977 6910 E066 .sleb128 -3232
+ 19978 6912 34 .uleb128 0x34
+ 19979 6913 260E0000 .long 0xe26
+ 19980 6917 00000000 .quad .LBB1978
+ 19980 00000000
+ 19981 691f 00000000 .quad .LBE1978
+ 19981 00000000
+ 19982 6927 03 .byte 0x3
+ 19983 6928 7501 .value 0x175
+ 19984 692a 31 .uleb128 0x31
+ 19985 692b 440E0000 .long 0xe44
+ 19986 692f 03 .byte 0x3
+ 19987 6930 91 .byte 0x91
+ 19988 6931 F066 .sleb128 -3216
+ 19989 6933 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 520
+
+
+ 19990 6934 380E0000 .long 0xe38
+ 19991 6938 03 .byte 0x3
+ 19992 6939 91 .byte 0x91
+ 19993 693a 8067 .sleb128 -3200
+ 19994 693c 00 .byte 0x0
+ 19995 693d 00 .byte 0x0
+ 19996 693e 00 .byte 0x0
+ 19997 693f 00 .byte 0x0
+ 19998 6940 00 .byte 0x0
+ 19999 6941 00 .byte 0x0
+ 20000 6942 30 .uleb128 0x30
+ 20001 6943 F7580000 .long 0x58f7
+ 20002 6947 00000000 .quad .LBB1980
+ 20002 00000000
+ 20003 694f 00000000 .quad .LBE1980
+ 20003 00000000
+ 20004 6957 03 .byte 0x3
+ 20005 6958 8A07 .value 0x78a
+ 20006 695a 71690000 .long 0x6971
+ 20007 695e 31 .uleb128 0x31
+ 20008 695f 12590000 .long 0x5912
+ 20009 6963 03 .byte 0x3
+ 20010 6964 91 .byte 0x91
+ 20011 6965 9067 .sleb128 -3184
+ 20012 6967 31 .uleb128 0x31
+ 20013 6968 08590000 .long 0x5908
+ 20014 696c 03 .byte 0x3
+ 20015 696d 91 .byte 0x91
+ 20016 696e A067 .sleb128 -3168
+ 20017 6970 00 .byte 0x0
+ 20018 6971 30 .uleb128 0x30
+ 20019 6972 1D590000 .long 0x591d
+ 20020 6976 00000000 .quad .LBB1982
+ 20020 00000000
+ 20021 697e 00000000 .quad .LBE1982
+ 20021 00000000
+ 20022 6986 03 .byte 0x3
+ 20023 6987 8B07 .value 0x78b
+ 20024 6989 2E6A0000 .long 0x6a2e
+ 20025 698d 31 .uleb128 0x31
+ 20026 698e 2F590000 .long 0x592f
+ 20027 6992 03 .byte 0x3
+ 20028 6993 91 .byte 0x91
+ 20029 6994 B067 .sleb128 -3152
+ 20030 6996 32 .uleb128 0x32
+ 20031 6997 00000000 .quad .LBB1983
+ 20031 00000000
+ 20032 699f 00000000 .quad .LBE1983
+ 20032 00000000
+ 20033 69a7 33 .uleb128 0x33
+ 20034 69a8 3B590000 .long 0x593b
+ 20035 69ac 03 .byte 0x3
+ 20036 69ad 76 .byte 0x76
+ 20037 69ae C055 .sleb128 -5440
+ 20038 69b0 30 .uleb128 0x30
+ 20039 69b1 1A0D0000 .long 0xd1a
+ 20040 69b5 00000000 .quad .LBB1984
+
GAS LISTING /tmp/ccPaCTqg.s page 521
+
+
+ 20040 00000000
+ 20041 69bd 00000000 .quad .LBE1984
+ 20041 00000000
+ 20042 69c5 03 .byte 0x3
+ 20043 69c6 7206 .value 0x672
+ 20044 69c8 DF690000 .long 0x69df
+ 20045 69cc 31 .uleb128 0x31
+ 20046 69cd 380D0000 .long 0xd38
+ 20047 69d1 03 .byte 0x3
+ 20048 69d2 91 .byte 0x91
+ 20049 69d3 CC67 .sleb128 -3124
+ 20050 69d5 31 .uleb128 0x31
+ 20051 69d6 2C0D0000 .long 0xd2c
+ 20052 69da 03 .byte 0x3
+ 20053 69db 91 .byte 0x91
+ 20054 69dc D067 .sleb128 -3120
+ 20055 69de 00 .byte 0x0
+ 20056 69df 34 .uleb128 0x34
+ 20057 69e0 48590000 .long 0x5948
+ 20058 69e4 00000000 .quad .LBB1986
+ 20058 00000000
+ 20059 69ec 00000000 .quad .LBE1986
+ 20059 00000000
+ 20060 69f4 03 .byte 0x3
+ 20061 69f5 7306 .value 0x673
+ 20062 69f7 31 .uleb128 0x31
+ 20063 69f8 5A590000 .long 0x595a
+ 20064 69fc 03 .byte 0x3
+ 20065 69fd 91 .byte 0x91
+ 20066 69fe E067 .sleb128 -3104
+ 20067 6a00 34 .uleb128 0x34
+ 20068 6a01 640D0000 .long 0xd64
+ 20069 6a05 00000000 .quad .LBB1988
+ 20069 00000000
+ 20070 6a0d 00000000 .quad .LBE1988
+ 20070 00000000
+ 20071 6a15 03 .byte 0x3
+ 20072 6a16 6505 .value 0x565
+ 20073 6a18 31 .uleb128 0x31
+ 20074 6a19 820D0000 .long 0xd82
+ 20075 6a1d 03 .byte 0x3
+ 20076 6a1e 91 .byte 0x91
+ 20077 6a1f FC67 .sleb128 -3076
+ 20078 6a21 31 .uleb128 0x31
+ 20079 6a22 760D0000 .long 0xd76
+ 20080 6a26 03 .byte 0x3
+ 20081 6a27 91 .byte 0x91
+ 20082 6a28 8068 .sleb128 -3072
+ 20083 6a2a 00 .byte 0x0
+ 20084 6a2b 00 .byte 0x0
+ 20085 6a2c 00 .byte 0x0
+ 20086 6a2d 00 .byte 0x0
+ 20087 6a2e 30 .uleb128 0x30
+ 20088 6a2f 8F0D0000 .long 0xd8f
+ 20089 6a33 00000000 .quad .LBB1990
+ 20089 00000000
+ 20090 6a3b 00000000 .quad .LBE1990
+
GAS LISTING /tmp/ccPaCTqg.s page 522
+
+
+ 20090 00000000
+ 20091 6a43 03 .byte 0x3
+ 20092 6a44 8B07 .value 0x78b
+ 20093 6a46 426C0000 .long 0x6c42
+ 20094 6a4a 31 .uleb128 0x31
+ 20095 6a4b A10D0000 .long 0xda1
+ 20096 6a4f 03 .byte 0x3
+ 20097 6a50 91 .byte 0x91
+ 20098 6a51 9068 .sleb128 -3056
+ 20099 6a53 32 .uleb128 0x32
+ 20100 6a54 00000000 .quad .LBB1991
+ 20100 00000000
+ 20101 6a5c 00000000 .quad .LBE1991
+ 20101 00000000
+ 20102 6a64 33 .uleb128 0x33
+ 20103 6a65 AD0D0000 .long 0xdad
+ 20104 6a69 03 .byte 0x3
+ 20105 6a6a 76 .byte 0x76
+ 20106 6a6b D055 .sleb128 -5424
+ 20107 6a6d 30 .uleb128 0x30
+ 20108 6a6e BA0D0000 .long 0xdba
+ 20109 6a72 00000000 .quad .LBB1992
+ 20109 00000000
+ 20110 6a7a 00000000 .quad .LBE1992
+ 20110 00000000
+ 20111 6a82 03 .byte 0x3
+ 20112 6a83 1F06 .value 0x61f
+ 20113 6a85 0A6B0000 .long 0x6b0a
+ 20114 6a89 31 .uleb128 0x31
+ 20115 6a8a CC0D0000 .long 0xdcc
+ 20116 6a8e 03 .byte 0x3
+ 20117 6a8f 91 .byte 0x91
+ 20118 6a90 A068 .sleb128 -3040
+ 20119 6a92 32 .uleb128 0x32
+ 20120 6a93 00000000 .quad .LBB1993
+ 20120 00000000
+ 20121 6a9b 00000000 .quad .LBE1993
+ 20121 00000000
+ 20122 6aa3 33 .uleb128 0x33
+ 20123 6aa4 D80D0000 .long 0xdd8
+ 20124 6aa8 09 .byte 0x9
+ 20125 6aa9 03 .byte 0x3
+ 20126 6aaa 00000000 .quad mask.8002
+ 20126 00000000
+ 20127 6ab2 34 .uleb128 0x34
+ 20128 6ab3 FB0D0000 .long 0xdfb
+ 20129 6ab7 00000000 .quad .LBB1994
+ 20129 00000000
+ 20130 6abf 00000000 .quad .LBE1994
+ 20130 00000000
+ 20131 6ac7 03 .byte 0x3
+ 20132 6ac8 FE04 .value 0x4fe
+ 20133 6aca 31 .uleb128 0x31
+ 20134 6acb 190E0000 .long 0xe19
+ 20135 6acf 03 .byte 0x3
+ 20136 6ad0 91 .byte 0x91
+ 20137 6ad1 B068 .sleb128 -3024
+
GAS LISTING /tmp/ccPaCTqg.s page 523
+
+
+ 20138 6ad3 31 .uleb128 0x31
+ 20139 6ad4 0D0E0000 .long 0xe0d
+ 20140 6ad8 03 .byte 0x3
+ 20141 6ad9 91 .byte 0x91
+ 20142 6ada C068 .sleb128 -3008
+ 20143 6adc 34 .uleb128 0x34
+ 20144 6add 260E0000 .long 0xe26
+ 20145 6ae1 00000000 .quad .LBB1996
+ 20145 00000000
+ 20146 6ae9 00000000 .quad .LBE1996
+ 20146 00000000
+ 20147 6af1 03 .byte 0x3
+ 20148 6af2 7501 .value 0x175
+ 20149 6af4 31 .uleb128 0x31
+ 20150 6af5 440E0000 .long 0xe44
+ 20151 6af9 03 .byte 0x3
+ 20152 6afa 91 .byte 0x91
+ 20153 6afb D068 .sleb128 -2992
+ 20154 6afd 31 .uleb128 0x31
+ 20155 6afe 380E0000 .long 0xe38
+ 20156 6b02 03 .byte 0x3
+ 20157 6b03 91 .byte 0x91
+ 20158 6b04 E068 .sleb128 -2976
+ 20159 6b06 00 .byte 0x0
+ 20160 6b07 00 .byte 0x0
+ 20161 6b08 00 .byte 0x0
+ 20162 6b09 00 .byte 0x0
+ 20163 6b0a 30 .uleb128 0x30
+ 20164 6b0b BA0D0000 .long 0xdba
+ 20165 6b0f 00000000 .quad .LBB1998
+ 20165 00000000
+ 20166 6b17 00000000 .quad .LBE1998
+ 20166 00000000
+ 20167 6b1f 03 .byte 0x3
+ 20168 6b20 2006 .value 0x620
+ 20169 6b22 A76B0000 .long 0x6ba7
+ 20170 6b26 31 .uleb128 0x31
+ 20171 6b27 CC0D0000 .long 0xdcc
+ 20172 6b2b 03 .byte 0x3
+ 20173 6b2c 91 .byte 0x91
+ 20174 6b2d F068 .sleb128 -2960
+ 20175 6b2f 32 .uleb128 0x32
+ 20176 6b30 00000000 .quad .LBB1999
+ 20176 00000000
+ 20177 6b38 00000000 .quad .LBE1999
+ 20177 00000000
+ 20178 6b40 33 .uleb128 0x33
+ 20179 6b41 D80D0000 .long 0xdd8
+ 20180 6b45 09 .byte 0x9
+ 20181 6b46 03 .byte 0x3
+ 20182 6b47 00000000 .quad mask.8002
+ 20182 00000000
+ 20183 6b4f 34 .uleb128 0x34
+ 20184 6b50 FB0D0000 .long 0xdfb
+ 20185 6b54 00000000 .quad .LBB2000
+ 20185 00000000
+ 20186 6b5c 00000000 .quad .LBE2000
+
GAS LISTING /tmp/ccPaCTqg.s page 524
+
+
+ 20186 00000000
+ 20187 6b64 03 .byte 0x3
+ 20188 6b65 FE04 .value 0x4fe
+ 20189 6b67 31 .uleb128 0x31
+ 20190 6b68 190E0000 .long 0xe19
+ 20191 6b6c 03 .byte 0x3
+ 20192 6b6d 91 .byte 0x91
+ 20193 6b6e 8069 .sleb128 -2944
+ 20194 6b70 31 .uleb128 0x31
+ 20195 6b71 0D0E0000 .long 0xe0d
+ 20196 6b75 03 .byte 0x3
+ 20197 6b76 91 .byte 0x91
+ 20198 6b77 9069 .sleb128 -2928
+ 20199 6b79 34 .uleb128 0x34
+ 20200 6b7a 260E0000 .long 0xe26
+ 20201 6b7e 00000000 .quad .LBB2002
+ 20201 00000000
+ 20202 6b86 00000000 .quad .LBE2002
+ 20202 00000000
+ 20203 6b8e 03 .byte 0x3
+ 20204 6b8f 7501 .value 0x175
+ 20205 6b91 31 .uleb128 0x31
+ 20206 6b92 440E0000 .long 0xe44
+ 20207 6b96 03 .byte 0x3
+ 20208 6b97 91 .byte 0x91
+ 20209 6b98 A069 .sleb128 -2912
+ 20210 6b9a 31 .uleb128 0x31
+ 20211 6b9b 380E0000 .long 0xe38
+ 20212 6b9f 03 .byte 0x3
+ 20213 6ba0 91 .byte 0x91
+ 20214 6ba1 B069 .sleb128 -2896
+ 20215 6ba3 00 .byte 0x0
+ 20216 6ba4 00 .byte 0x0
+ 20217 6ba5 00 .byte 0x0
+ 20218 6ba6 00 .byte 0x0
+ 20219 6ba7 34 .uleb128 0x34
+ 20220 6ba8 BA0D0000 .long 0xdba
+ 20221 6bac 00000000 .quad .LBB2004
+ 20221 00000000
+ 20222 6bb4 00000000 .quad .LBE2004
+ 20222 00000000
+ 20223 6bbc 03 .byte 0x3
+ 20224 6bbd 2106 .value 0x621
+ 20225 6bbf 31 .uleb128 0x31
+ 20226 6bc0 CC0D0000 .long 0xdcc
+ 20227 6bc4 03 .byte 0x3
+ 20228 6bc5 91 .byte 0x91
+ 20229 6bc6 C069 .sleb128 -2880
+ 20230 6bc8 32 .uleb128 0x32
+ 20231 6bc9 00000000 .quad .LBB2005
+ 20231 00000000
+ 20232 6bd1 00000000 .quad .LBE2005
+ 20232 00000000
+ 20233 6bd9 33 .uleb128 0x33
+ 20234 6bda D80D0000 .long 0xdd8
+ 20235 6bde 09 .byte 0x9
+ 20236 6bdf 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 525
+
+
+ 20237 6be0 00000000 .quad mask.8002
+ 20237 00000000
+ 20238 6be8 34 .uleb128 0x34
+ 20239 6be9 FB0D0000 .long 0xdfb
+ 20240 6bed 00000000 .quad .LBB2006
+ 20240 00000000
+ 20241 6bf5 00000000 .quad .LBE2006
+ 20241 00000000
+ 20242 6bfd 03 .byte 0x3
+ 20243 6bfe FE04 .value 0x4fe
+ 20244 6c00 31 .uleb128 0x31
+ 20245 6c01 190E0000 .long 0xe19
+ 20246 6c05 03 .byte 0x3
+ 20247 6c06 91 .byte 0x91
+ 20248 6c07 D069 .sleb128 -2864
+ 20249 6c09 31 .uleb128 0x31
+ 20250 6c0a 0D0E0000 .long 0xe0d
+ 20251 6c0e 03 .byte 0x3
+ 20252 6c0f 91 .byte 0x91
+ 20253 6c10 E069 .sleb128 -2848
+ 20254 6c12 34 .uleb128 0x34
+ 20255 6c13 260E0000 .long 0xe26
+ 20256 6c17 00000000 .quad .LBB2008
+ 20256 00000000
+ 20257 6c1f 00000000 .quad .LBE2008
+ 20257 00000000
+ 20258 6c27 03 .byte 0x3
+ 20259 6c28 7501 .value 0x175
+ 20260 6c2a 31 .uleb128 0x31
+ 20261 6c2b 440E0000 .long 0xe44
+ 20262 6c2f 03 .byte 0x3
+ 20263 6c30 91 .byte 0x91
+ 20264 6c31 F069 .sleb128 -2832
+ 20265 6c33 31 .uleb128 0x31
+ 20266 6c34 380E0000 .long 0xe38
+ 20267 6c38 03 .byte 0x3
+ 20268 6c39 91 .byte 0x91
+ 20269 6c3a 806A .sleb128 -2816
+ 20270 6c3c 00 .byte 0x0
+ 20271 6c3d 00 .byte 0x0
+ 20272 6c3e 00 .byte 0x0
+ 20273 6c3f 00 .byte 0x0
+ 20274 6c40 00 .byte 0x0
+ 20275 6c41 00 .byte 0x0
+ 20276 6c42 30 .uleb128 0x30
+ 20277 6c43 F7580000 .long 0x58f7
+ 20278 6c47 00000000 .quad .LBB2010
+ 20278 00000000
+ 20279 6c4f 00000000 .quad .LBE2010
+ 20279 00000000
+ 20280 6c57 03 .byte 0x3
+ 20281 6c58 8B07 .value 0x78b
+ 20282 6c5a 716C0000 .long 0x6c71
+ 20283 6c5e 31 .uleb128 0x31
+ 20284 6c5f 12590000 .long 0x5912
+ 20285 6c63 03 .byte 0x3
+ 20286 6c64 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 526
+
+
+ 20287 6c65 906A .sleb128 -2800
+ 20288 6c67 31 .uleb128 0x31
+ 20289 6c68 08590000 .long 0x5908
+ 20290 6c6c 03 .byte 0x3
+ 20291 6c6d 91 .byte 0x91
+ 20292 6c6e A06A .sleb128 -2784
+ 20293 6c70 00 .byte 0x0
+ 20294 6c71 30 .uleb128 0x30
+ 20295 6c72 E30C0000 .long 0xce3
+ 20296 6c76 00000000 .quad .LBB2012
+ 20296 00000000
+ 20297 6c7e 00000000 .quad .LBE2012
+ 20297 00000000
+ 20298 6c86 03 .byte 0x3
+ 20299 6c87 8C07 .value 0x78c
+ 20300 6c89 376D0000 .long 0x6d37
+ 20301 6c8d 31 .uleb128 0x31
+ 20302 6c8e 010D0000 .long 0xd01
+ 20303 6c92 03 .byte 0x3
+ 20304 6c93 91 .byte 0x91
+ 20305 6c94 BC6A .sleb128 -2756
+ 20306 6c96 31 .uleb128 0x31
+ 20307 6c97 F50C0000 .long 0xcf5
+ 20308 6c9b 03 .byte 0x3
+ 20309 6c9c 91 .byte 0x91
+ 20310 6c9d C06A .sleb128 -2752
+ 20311 6c9f 32 .uleb128 0x32
+ 20312 6ca0 00000000 .quad .LBB2013
+ 20312 00000000
+ 20313 6ca8 00000000 .quad .LBE2013
+ 20313 00000000
+ 20314 6cb0 33 .uleb128 0x33
+ 20315 6cb1 0D0D0000 .long 0xd0d
+ 20316 6cb5 03 .byte 0x3
+ 20317 6cb6 76 .byte 0x76
+ 20318 6cb7 E055 .sleb128 -5408
+ 20319 6cb9 30 .uleb128 0x30
+ 20320 6cba 1A0D0000 .long 0xd1a
+ 20321 6cbe 00000000 .quad .LBB2014
+ 20321 00000000
+ 20322 6cc6 00000000 .quad .LBE2014
+ 20322 00000000
+ 20323 6cce 03 .byte 0x3
+ 20324 6ccf 8A06 .value 0x68a
+ 20325 6cd1 E86C0000 .long 0x6ce8
+ 20326 6cd5 31 .uleb128 0x31
+ 20327 6cd6 380D0000 .long 0xd38
+ 20328 6cda 03 .byte 0x3
+ 20329 6cdb 91 .byte 0x91
+ 20330 6cdc DC6A .sleb128 -2724
+ 20331 6cde 31 .uleb128 0x31
+ 20332 6cdf 2C0D0000 .long 0xd2c
+ 20333 6ce3 03 .byte 0x3
+ 20334 6ce4 91 .byte 0x91
+ 20335 6ce5 E06A .sleb128 -2720
+ 20336 6ce7 00 .byte 0x0
+ 20337 6ce8 34 .uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s page 527
+
+
+ 20338 6ce9 450D0000 .long 0xd45
+ 20339 6ced 00000000 .quad .LBB2016
+ 20339 00000000
+ 20340 6cf5 00000000 .quad .LBE2016
+ 20340 00000000
+ 20341 6cfd 03 .byte 0x3
+ 20342 6cfe 8B06 .value 0x68b
+ 20343 6d00 31 .uleb128 0x31
+ 20344 6d01 570D0000 .long 0xd57
+ 20345 6d05 03 .byte 0x3
+ 20346 6d06 91 .byte 0x91
+ 20347 6d07 F06A .sleb128 -2704
+ 20348 6d09 34 .uleb128 0x34
+ 20349 6d0a 640D0000 .long 0xd64
+ 20350 6d0e 00000000 .quad .LBB2018
+ 20350 00000000
+ 20351 6d16 00000000 .quad .LBE2018
+ 20351 00000000
+ 20352 6d1e 03 .byte 0x3
+ 20353 6d1f 4905 .value 0x549
+ 20354 6d21 31 .uleb128 0x31
+ 20355 6d22 820D0000 .long 0xd82
+ 20356 6d26 03 .byte 0x3
+ 20357 6d27 91 .byte 0x91
+ 20358 6d28 8C6B .sleb128 -2676
+ 20359 6d2a 31 .uleb128 0x31
+ 20360 6d2b 760D0000 .long 0xd76
+ 20361 6d2f 03 .byte 0x3
+ 20362 6d30 91 .byte 0x91
+ 20363 6d31 906B .sleb128 -2672
+ 20364 6d33 00 .byte 0x0
+ 20365 6d34 00 .byte 0x0
+ 20366 6d35 00 .byte 0x0
+ 20367 6d36 00 .byte 0x0
+ 20368 6d37 30 .uleb128 0x30
+ 20369 6d38 8F0D0000 .long 0xd8f
+ 20370 6d3c 00000000 .quad .LBB2020
+ 20370 00000000
+ 20371 6d44 00000000 .quad .LBE2020
+ 20371 00000000
+ 20372 6d4c 03 .byte 0x3
+ 20373 6d4d 8C07 .value 0x78c
+ 20374 6d4f 4B6F0000 .long 0x6f4b
+ 20375 6d53 31 .uleb128 0x31
+ 20376 6d54 A10D0000 .long 0xda1
+ 20377 6d58 03 .byte 0x3
+ 20378 6d59 91 .byte 0x91
+ 20379 6d5a A06B .sleb128 -2656
+ 20380 6d5c 32 .uleb128 0x32
+ 20381 6d5d 00000000 .quad .LBB2021
+ 20381 00000000
+ 20382 6d65 00000000 .quad .LBE2021
+ 20382 00000000
+ 20383 6d6d 33 .uleb128 0x33
+ 20384 6d6e AD0D0000 .long 0xdad
+ 20385 6d72 03 .byte 0x3
+ 20386 6d73 76 .byte 0x76
+
GAS LISTING /tmp/ccPaCTqg.s page 528
+
+
+ 20387 6d74 F055 .sleb128 -5392
+ 20388 6d76 30 .uleb128 0x30
+ 20389 6d77 BA0D0000 .long 0xdba
+ 20390 6d7b 00000000 .quad .LBB2022
+ 20390 00000000
+ 20391 6d83 00000000 .quad .LBE2022
+ 20391 00000000
+ 20392 6d8b 03 .byte 0x3
+ 20393 6d8c 1F06 .value 0x61f
+ 20394 6d8e 136E0000 .long 0x6e13
+ 20395 6d92 31 .uleb128 0x31
+ 20396 6d93 CC0D0000 .long 0xdcc
+ 20397 6d97 03 .byte 0x3
+ 20398 6d98 91 .byte 0x91
+ 20399 6d99 B06B .sleb128 -2640
+ 20400 6d9b 32 .uleb128 0x32
+ 20401 6d9c 00000000 .quad .LBB2023
+ 20401 00000000
+ 20402 6da4 00000000 .quad .LBE2023
+ 20402 00000000
+ 20403 6dac 33 .uleb128 0x33
+ 20404 6dad D80D0000 .long 0xdd8
+ 20405 6db1 09 .byte 0x9
+ 20406 6db2 03 .byte 0x3
+ 20407 6db3 00000000 .quad mask.8002
+ 20407 00000000
+ 20408 6dbb 34 .uleb128 0x34
+ 20409 6dbc FB0D0000 .long 0xdfb
+ 20410 6dc0 00000000 .quad .LBB2024
+ 20410 00000000
+ 20411 6dc8 00000000 .quad .LBE2024
+ 20411 00000000
+ 20412 6dd0 03 .byte 0x3
+ 20413 6dd1 FE04 .value 0x4fe
+ 20414 6dd3 31 .uleb128 0x31
+ 20415 6dd4 190E0000 .long 0xe19
+ 20416 6dd8 03 .byte 0x3
+ 20417 6dd9 91 .byte 0x91
+ 20418 6dda C06B .sleb128 -2624
+ 20419 6ddc 31 .uleb128 0x31
+ 20420 6ddd 0D0E0000 .long 0xe0d
+ 20421 6de1 03 .byte 0x3
+ 20422 6de2 91 .byte 0x91
+ 20423 6de3 D06B .sleb128 -2608
+ 20424 6de5 34 .uleb128 0x34
+ 20425 6de6 260E0000 .long 0xe26
+ 20426 6dea 00000000 .quad .LBB2026
+ 20426 00000000
+ 20427 6df2 00000000 .quad .LBE2026
+ 20427 00000000
+ 20428 6dfa 03 .byte 0x3
+ 20429 6dfb 7501 .value 0x175
+ 20430 6dfd 31 .uleb128 0x31
+ 20431 6dfe 440E0000 .long 0xe44
+ 20432 6e02 03 .byte 0x3
+ 20433 6e03 91 .byte 0x91
+ 20434 6e04 E06B .sleb128 -2592
+
GAS LISTING /tmp/ccPaCTqg.s page 529
+
+
+ 20435 6e06 31 .uleb128 0x31
+ 20436 6e07 380E0000 .long 0xe38
+ 20437 6e0b 03 .byte 0x3
+ 20438 6e0c 91 .byte 0x91
+ 20439 6e0d F06B .sleb128 -2576
+ 20440 6e0f 00 .byte 0x0
+ 20441 6e10 00 .byte 0x0
+ 20442 6e11 00 .byte 0x0
+ 20443 6e12 00 .byte 0x0
+ 20444 6e13 30 .uleb128 0x30
+ 20445 6e14 BA0D0000 .long 0xdba
+ 20446 6e18 00000000 .quad .LBB2028
+ 20446 00000000
+ 20447 6e20 00000000 .quad .LBE2028
+ 20447 00000000
+ 20448 6e28 03 .byte 0x3
+ 20449 6e29 2006 .value 0x620
+ 20450 6e2b B06E0000 .long 0x6eb0
+ 20451 6e2f 31 .uleb128 0x31
+ 20452 6e30 CC0D0000 .long 0xdcc
+ 20453 6e34 03 .byte 0x3
+ 20454 6e35 91 .byte 0x91
+ 20455 6e36 806C .sleb128 -2560
+ 20456 6e38 32 .uleb128 0x32
+ 20457 6e39 00000000 .quad .LBB2029
+ 20457 00000000
+ 20458 6e41 00000000 .quad .LBE2029
+ 20458 00000000
+ 20459 6e49 33 .uleb128 0x33
+ 20460 6e4a D80D0000 .long 0xdd8
+ 20461 6e4e 09 .byte 0x9
+ 20462 6e4f 03 .byte 0x3
+ 20463 6e50 00000000 .quad mask.8002
+ 20463 00000000
+ 20464 6e58 34 .uleb128 0x34
+ 20465 6e59 FB0D0000 .long 0xdfb
+ 20466 6e5d 00000000 .quad .LBB2030
+ 20466 00000000
+ 20467 6e65 00000000 .quad .LBE2030
+ 20467 00000000
+ 20468 6e6d 03 .byte 0x3
+ 20469 6e6e FE04 .value 0x4fe
+ 20470 6e70 31 .uleb128 0x31
+ 20471 6e71 190E0000 .long 0xe19
+ 20472 6e75 03 .byte 0x3
+ 20473 6e76 91 .byte 0x91
+ 20474 6e77 906C .sleb128 -2544
+ 20475 6e79 31 .uleb128 0x31
+ 20476 6e7a 0D0E0000 .long 0xe0d
+ 20477 6e7e 03 .byte 0x3
+ 20478 6e7f 91 .byte 0x91
+ 20479 6e80 A06C .sleb128 -2528
+ 20480 6e82 34 .uleb128 0x34
+ 20481 6e83 260E0000 .long 0xe26
+ 20482 6e87 00000000 .quad .LBB2032
+ 20482 00000000
+ 20483 6e8f 00000000 .quad .LBE2032
+
GAS LISTING /tmp/ccPaCTqg.s page 530
+
+
+ 20483 00000000
+ 20484 6e97 03 .byte 0x3
+ 20485 6e98 7501 .value 0x175
+ 20486 6e9a 31 .uleb128 0x31
+ 20487 6e9b 440E0000 .long 0xe44
+ 20488 6e9f 03 .byte 0x3
+ 20489 6ea0 91 .byte 0x91
+ 20490 6ea1 B06C .sleb128 -2512
+ 20491 6ea3 31 .uleb128 0x31
+ 20492 6ea4 380E0000 .long 0xe38
+ 20493 6ea8 03 .byte 0x3
+ 20494 6ea9 91 .byte 0x91
+ 20495 6eaa C06C .sleb128 -2496
+ 20496 6eac 00 .byte 0x0
+ 20497 6ead 00 .byte 0x0
+ 20498 6eae 00 .byte 0x0
+ 20499 6eaf 00 .byte 0x0
+ 20500 6eb0 34 .uleb128 0x34
+ 20501 6eb1 BA0D0000 .long 0xdba
+ 20502 6eb5 00000000 .quad .LBB2034
+ 20502 00000000
+ 20503 6ebd 00000000 .quad .LBE2034
+ 20503 00000000
+ 20504 6ec5 03 .byte 0x3
+ 20505 6ec6 2106 .value 0x621
+ 20506 6ec8 31 .uleb128 0x31
+ 20507 6ec9 CC0D0000 .long 0xdcc
+ 20508 6ecd 03 .byte 0x3
+ 20509 6ece 91 .byte 0x91
+ 20510 6ecf D06C .sleb128 -2480
+ 20511 6ed1 32 .uleb128 0x32
+ 20512 6ed2 00000000 .quad .LBB2035
+ 20512 00000000
+ 20513 6eda 00000000 .quad .LBE2035
+ 20513 00000000
+ 20514 6ee2 33 .uleb128 0x33
+ 20515 6ee3 D80D0000 .long 0xdd8
+ 20516 6ee7 09 .byte 0x9
+ 20517 6ee8 03 .byte 0x3
+ 20518 6ee9 00000000 .quad mask.8002
+ 20518 00000000
+ 20519 6ef1 34 .uleb128 0x34
+ 20520 6ef2 FB0D0000 .long 0xdfb
+ 20521 6ef6 00000000 .quad .LBB2036
+ 20521 00000000
+ 20522 6efe 00000000 .quad .LBE2036
+ 20522 00000000
+ 20523 6f06 03 .byte 0x3
+ 20524 6f07 FE04 .value 0x4fe
+ 20525 6f09 31 .uleb128 0x31
+ 20526 6f0a 190E0000 .long 0xe19
+ 20527 6f0e 03 .byte 0x3
+ 20528 6f0f 91 .byte 0x91
+ 20529 6f10 E06C .sleb128 -2464
+ 20530 6f12 31 .uleb128 0x31
+ 20531 6f13 0D0E0000 .long 0xe0d
+ 20532 6f17 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 531
+
+
+ 20533 6f18 91 .byte 0x91
+ 20534 6f19 F06C .sleb128 -2448
+ 20535 6f1b 34 .uleb128 0x34
+ 20536 6f1c 260E0000 .long 0xe26
+ 20537 6f20 00000000 .quad .LBB2038
+ 20537 00000000
+ 20538 6f28 00000000 .quad .LBE2038
+ 20538 00000000
+ 20539 6f30 03 .byte 0x3
+ 20540 6f31 7501 .value 0x175
+ 20541 6f33 31 .uleb128 0x31
+ 20542 6f34 440E0000 .long 0xe44
+ 20543 6f38 03 .byte 0x3
+ 20544 6f39 91 .byte 0x91
+ 20545 6f3a 806D .sleb128 -2432
+ 20546 6f3c 31 .uleb128 0x31
+ 20547 6f3d 380E0000 .long 0xe38
+ 20548 6f41 03 .byte 0x3
+ 20549 6f42 91 .byte 0x91
+ 20550 6f43 906D .sleb128 -2416
+ 20551 6f45 00 .byte 0x0
+ 20552 6f46 00 .byte 0x0
+ 20553 6f47 00 .byte 0x0
+ 20554 6f48 00 .byte 0x0
+ 20555 6f49 00 .byte 0x0
+ 20556 6f4a 00 .byte 0x0
+ 20557 6f4b 30 .uleb128 0x30
+ 20558 6f4c F7580000 .long 0x58f7
+ 20559 6f50 00000000 .quad .LBB2040
+ 20559 00000000
+ 20560 6f58 00000000 .quad .LBE2040
+ 20560 00000000
+ 20561 6f60 03 .byte 0x3
+ 20562 6f61 8C07 .value 0x78c
+ 20563 6f63 7A6F0000 .long 0x6f7a
+ 20564 6f67 31 .uleb128 0x31
+ 20565 6f68 12590000 .long 0x5912
+ 20566 6f6c 03 .byte 0x3
+ 20567 6f6d 91 .byte 0x91
+ 20568 6f6e A06D .sleb128 -2400
+ 20569 6f70 31 .uleb128 0x31
+ 20570 6f71 08590000 .long 0x5908
+ 20571 6f75 03 .byte 0x3
+ 20572 6f76 91 .byte 0x91
+ 20573 6f77 B06D .sleb128 -2384
+ 20574 6f79 00 .byte 0x0
+ 20575 6f7a 30 .uleb128 0x30
+ 20576 6f7b 1D590000 .long 0x591d
+ 20577 6f7f 00000000 .quad .LBB2042
+ 20577 00000000
+ 20578 6f87 00000000 .quad .LBE2042
+ 20578 00000000
+ 20579 6f8f 03 .byte 0x3
+ 20580 6f90 8D07 .value 0x78d
+ 20581 6f92 37700000 .long 0x7037
+ 20582 6f96 31 .uleb128 0x31
+ 20583 6f97 2F590000 .long 0x592f
+
GAS LISTING /tmp/ccPaCTqg.s page 532
+
+
+ 20584 6f9b 03 .byte 0x3
+ 20585 6f9c 91 .byte 0x91
+ 20586 6f9d C06D .sleb128 -2368
+ 20587 6f9f 32 .uleb128 0x32
+ 20588 6fa0 00000000 .quad .LBB2043
+ 20588 00000000
+ 20589 6fa8 00000000 .quad .LBE2043
+ 20589 00000000
+ 20590 6fb0 33 .uleb128 0x33
+ 20591 6fb1 3B590000 .long 0x593b
+ 20592 6fb5 03 .byte 0x3
+ 20593 6fb6 76 .byte 0x76
+ 20594 6fb7 8056 .sleb128 -5376
+ 20595 6fb9 30 .uleb128 0x30
+ 20596 6fba 1A0D0000 .long 0xd1a
+ 20597 6fbe 00000000 .quad .LBB2044
+ 20597 00000000
+ 20598 6fc6 00000000 .quad .LBE2044
+ 20598 00000000
+ 20599 6fce 03 .byte 0x3
+ 20600 6fcf 7206 .value 0x672
+ 20601 6fd1 E86F0000 .long 0x6fe8
+ 20602 6fd5 31 .uleb128 0x31
+ 20603 6fd6 380D0000 .long 0xd38
+ 20604 6fda 03 .byte 0x3
+ 20605 6fdb 91 .byte 0x91
+ 20606 6fdc DC6D .sleb128 -2340
+ 20607 6fde 31 .uleb128 0x31
+ 20608 6fdf 2C0D0000 .long 0xd2c
+ 20609 6fe3 03 .byte 0x3
+ 20610 6fe4 91 .byte 0x91
+ 20611 6fe5 E06D .sleb128 -2336
+ 20612 6fe7 00 .byte 0x0
+ 20613 6fe8 34 .uleb128 0x34
+ 20614 6fe9 48590000 .long 0x5948
+ 20615 6fed 00000000 .quad .LBB2046
+ 20615 00000000
+ 20616 6ff5 00000000 .quad .LBE2046
+ 20616 00000000
+ 20617 6ffd 03 .byte 0x3
+ 20618 6ffe 7306 .value 0x673
+ 20619 7000 31 .uleb128 0x31
+ 20620 7001 5A590000 .long 0x595a
+ 20621 7005 03 .byte 0x3
+ 20622 7006 91 .byte 0x91
+ 20623 7007 F06D .sleb128 -2320
+ 20624 7009 34 .uleb128 0x34
+ 20625 700a 640D0000 .long 0xd64
+ 20626 700e 00000000 .quad .LBB2048
+ 20626 00000000
+ 20627 7016 00000000 .quad .LBE2048
+ 20627 00000000
+ 20628 701e 03 .byte 0x3
+ 20629 701f 6505 .value 0x565
+ 20630 7021 31 .uleb128 0x31
+ 20631 7022 820D0000 .long 0xd82
+ 20632 7026 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 533
+
+
+ 20633 7027 91 .byte 0x91
+ 20634 7028 8C6E .sleb128 -2292
+ 20635 702a 31 .uleb128 0x31
+ 20636 702b 760D0000 .long 0xd76
+ 20637 702f 03 .byte 0x3
+ 20638 7030 91 .byte 0x91
+ 20639 7031 906E .sleb128 -2288
+ 20640 7033 00 .byte 0x0
+ 20641 7034 00 .byte 0x0
+ 20642 7035 00 .byte 0x0
+ 20643 7036 00 .byte 0x0
+ 20644 7037 30 .uleb128 0x30
+ 20645 7038 8F0D0000 .long 0xd8f
+ 20646 703c 00000000 .quad .LBB2050
+ 20646 00000000
+ 20647 7044 00000000 .quad .LBE2050
+ 20647 00000000
+ 20648 704c 03 .byte 0x3
+ 20649 704d 8D07 .value 0x78d
+ 20650 704f 4B720000 .long 0x724b
+ 20651 7053 31 .uleb128 0x31
+ 20652 7054 A10D0000 .long 0xda1
+ 20653 7058 03 .byte 0x3
+ 20654 7059 91 .byte 0x91
+ 20655 705a A06E .sleb128 -2272
+ 20656 705c 32 .uleb128 0x32
+ 20657 705d 00000000 .quad .LBB2051
+ 20657 00000000
+ 20658 7065 00000000 .quad .LBE2051
+ 20658 00000000
+ 20659 706d 33 .uleb128 0x33
+ 20660 706e AD0D0000 .long 0xdad
+ 20661 7072 03 .byte 0x3
+ 20662 7073 76 .byte 0x76
+ 20663 7074 9056 .sleb128 -5360
+ 20664 7076 30 .uleb128 0x30
+ 20665 7077 BA0D0000 .long 0xdba
+ 20666 707b 00000000 .quad .LBB2052
+ 20666 00000000
+ 20667 7083 00000000 .quad .LBE2052
+ 20667 00000000
+ 20668 708b 03 .byte 0x3
+ 20669 708c 1F06 .value 0x61f
+ 20670 708e 13710000 .long 0x7113
+ 20671 7092 31 .uleb128 0x31
+ 20672 7093 CC0D0000 .long 0xdcc
+ 20673 7097 03 .byte 0x3
+ 20674 7098 91 .byte 0x91
+ 20675 7099 B06E .sleb128 -2256
+ 20676 709b 32 .uleb128 0x32
+ 20677 709c 00000000 .quad .LBB2053
+ 20677 00000000
+ 20678 70a4 00000000 .quad .LBE2053
+ 20678 00000000
+ 20679 70ac 33 .uleb128 0x33
+ 20680 70ad D80D0000 .long 0xdd8
+ 20681 70b1 09 .byte 0x9
+
GAS LISTING /tmp/ccPaCTqg.s page 534
+
+
+ 20682 70b2 03 .byte 0x3
+ 20683 70b3 00000000 .quad mask.8002
+ 20683 00000000
+ 20684 70bb 34 .uleb128 0x34
+ 20685 70bc FB0D0000 .long 0xdfb
+ 20686 70c0 00000000 .quad .LBB2054
+ 20686 00000000
+ 20687 70c8 00000000 .quad .LBE2054
+ 20687 00000000
+ 20688 70d0 03 .byte 0x3
+ 20689 70d1 FE04 .value 0x4fe
+ 20690 70d3 31 .uleb128 0x31
+ 20691 70d4 190E0000 .long 0xe19
+ 20692 70d8 03 .byte 0x3
+ 20693 70d9 91 .byte 0x91
+ 20694 70da C06E .sleb128 -2240
+ 20695 70dc 31 .uleb128 0x31
+ 20696 70dd 0D0E0000 .long 0xe0d
+ 20697 70e1 03 .byte 0x3
+ 20698 70e2 91 .byte 0x91
+ 20699 70e3 D06E .sleb128 -2224
+ 20700 70e5 34 .uleb128 0x34
+ 20701 70e6 260E0000 .long 0xe26
+ 20702 70ea 00000000 .quad .LBB2056
+ 20702 00000000
+ 20703 70f2 00000000 .quad .LBE2056
+ 20703 00000000
+ 20704 70fa 03 .byte 0x3
+ 20705 70fb 7501 .value 0x175
+ 20706 70fd 31 .uleb128 0x31
+ 20707 70fe 440E0000 .long 0xe44
+ 20708 7102 03 .byte 0x3
+ 20709 7103 91 .byte 0x91
+ 20710 7104 E06E .sleb128 -2208
+ 20711 7106 31 .uleb128 0x31
+ 20712 7107 380E0000 .long 0xe38
+ 20713 710b 03 .byte 0x3
+ 20714 710c 91 .byte 0x91
+ 20715 710d F06E .sleb128 -2192
+ 20716 710f 00 .byte 0x0
+ 20717 7110 00 .byte 0x0
+ 20718 7111 00 .byte 0x0
+ 20719 7112 00 .byte 0x0
+ 20720 7113 30 .uleb128 0x30
+ 20721 7114 BA0D0000 .long 0xdba
+ 20722 7118 00000000 .quad .LBB2058
+ 20722 00000000
+ 20723 7120 00000000 .quad .LBE2058
+ 20723 00000000
+ 20724 7128 03 .byte 0x3
+ 20725 7129 2006 .value 0x620
+ 20726 712b B0710000 .long 0x71b0
+ 20727 712f 31 .uleb128 0x31
+ 20728 7130 CC0D0000 .long 0xdcc
+ 20729 7134 03 .byte 0x3
+ 20730 7135 91 .byte 0x91
+ 20731 7136 806F .sleb128 -2176
+
GAS LISTING /tmp/ccPaCTqg.s page 535
+
+
+ 20732 7138 32 .uleb128 0x32
+ 20733 7139 00000000 .quad .LBB2059
+ 20733 00000000
+ 20734 7141 00000000 .quad .LBE2059
+ 20734 00000000
+ 20735 7149 33 .uleb128 0x33
+ 20736 714a D80D0000 .long 0xdd8
+ 20737 714e 09 .byte 0x9
+ 20738 714f 03 .byte 0x3
+ 20739 7150 00000000 .quad mask.8002
+ 20739 00000000
+ 20740 7158 34 .uleb128 0x34
+ 20741 7159 FB0D0000 .long 0xdfb
+ 20742 715d 00000000 .quad .LBB2060
+ 20742 00000000
+ 20743 7165 00000000 .quad .LBE2060
+ 20743 00000000
+ 20744 716d 03 .byte 0x3
+ 20745 716e FE04 .value 0x4fe
+ 20746 7170 31 .uleb128 0x31
+ 20747 7171 190E0000 .long 0xe19
+ 20748 7175 03 .byte 0x3
+ 20749 7176 91 .byte 0x91
+ 20750 7177 906F .sleb128 -2160
+ 20751 7179 31 .uleb128 0x31
+ 20752 717a 0D0E0000 .long 0xe0d
+ 20753 717e 03 .byte 0x3
+ 20754 717f 91 .byte 0x91
+ 20755 7180 A06F .sleb128 -2144
+ 20756 7182 34 .uleb128 0x34
+ 20757 7183 260E0000 .long 0xe26
+ 20758 7187 00000000 .quad .LBB2062
+ 20758 00000000
+ 20759 718f 00000000 .quad .LBE2062
+ 20759 00000000
+ 20760 7197 03 .byte 0x3
+ 20761 7198 7501 .value 0x175
+ 20762 719a 31 .uleb128 0x31
+ 20763 719b 440E0000 .long 0xe44
+ 20764 719f 03 .byte 0x3
+ 20765 71a0 91 .byte 0x91
+ 20766 71a1 B06F .sleb128 -2128
+ 20767 71a3 31 .uleb128 0x31
+ 20768 71a4 380E0000 .long 0xe38
+ 20769 71a8 03 .byte 0x3
+ 20770 71a9 91 .byte 0x91
+ 20771 71aa C06F .sleb128 -2112
+ 20772 71ac 00 .byte 0x0
+ 20773 71ad 00 .byte 0x0
+ 20774 71ae 00 .byte 0x0
+ 20775 71af 00 .byte 0x0
+ 20776 71b0 34 .uleb128 0x34
+ 20777 71b1 BA0D0000 .long 0xdba
+ 20778 71b5 00000000 .quad .LBB2064
+ 20778 00000000
+ 20779 71bd 00000000 .quad .LBE2064
+ 20779 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 536
+
+
+ 20780 71c5 03 .byte 0x3
+ 20781 71c6 2106 .value 0x621
+ 20782 71c8 31 .uleb128 0x31
+ 20783 71c9 CC0D0000 .long 0xdcc
+ 20784 71cd 03 .byte 0x3
+ 20785 71ce 91 .byte 0x91
+ 20786 71cf D06F .sleb128 -2096
+ 20787 71d1 32 .uleb128 0x32
+ 20788 71d2 00000000 .quad .LBB2065
+ 20788 00000000
+ 20789 71da 00000000 .quad .LBE2065
+ 20789 00000000
+ 20790 71e2 33 .uleb128 0x33
+ 20791 71e3 D80D0000 .long 0xdd8
+ 20792 71e7 09 .byte 0x9
+ 20793 71e8 03 .byte 0x3
+ 20794 71e9 00000000 .quad mask.8002
+ 20794 00000000
+ 20795 71f1 34 .uleb128 0x34
+ 20796 71f2 FB0D0000 .long 0xdfb
+ 20797 71f6 00000000 .quad .LBB2066
+ 20797 00000000
+ 20798 71fe 00000000 .quad .LBE2066
+ 20798 00000000
+ 20799 7206 03 .byte 0x3
+ 20800 7207 FE04 .value 0x4fe
+ 20801 7209 31 .uleb128 0x31
+ 20802 720a 190E0000 .long 0xe19
+ 20803 720e 03 .byte 0x3
+ 20804 720f 91 .byte 0x91
+ 20805 7210 E06F .sleb128 -2080
+ 20806 7212 31 .uleb128 0x31
+ 20807 7213 0D0E0000 .long 0xe0d
+ 20808 7217 03 .byte 0x3
+ 20809 7218 91 .byte 0x91
+ 20810 7219 F06F .sleb128 -2064
+ 20811 721b 34 .uleb128 0x34
+ 20812 721c 260E0000 .long 0xe26
+ 20813 7220 00000000 .quad .LBB2068
+ 20813 00000000
+ 20814 7228 00000000 .quad .LBE2068
+ 20814 00000000
+ 20815 7230 03 .byte 0x3
+ 20816 7231 7501 .value 0x175
+ 20817 7233 31 .uleb128 0x31
+ 20818 7234 440E0000 .long 0xe44
+ 20819 7238 03 .byte 0x3
+ 20820 7239 91 .byte 0x91
+ 20821 723a 8070 .sleb128 -2048
+ 20822 723c 31 .uleb128 0x31
+ 20823 723d 380E0000 .long 0xe38
+ 20824 7241 03 .byte 0x3
+ 20825 7242 91 .byte 0x91
+ 20826 7243 9070 .sleb128 -2032
+ 20827 7245 00 .byte 0x0
+ 20828 7246 00 .byte 0x0
+ 20829 7247 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 537
+
+
+ 20830 7248 00 .byte 0x0
+ 20831 7249 00 .byte 0x0
+ 20832 724a 00 .byte 0x0
+ 20833 724b 30 .uleb128 0x30
+ 20834 724c F7580000 .long 0x58f7
+ 20835 7250 00000000 .quad .LBB2070
+ 20835 00000000
+ 20836 7258 00000000 .quad .LBE2070
+ 20836 00000000
+ 20837 7260 03 .byte 0x3
+ 20838 7261 8D07 .value 0x78d
+ 20839 7263 7A720000 .long 0x727a
+ 20840 7267 31 .uleb128 0x31
+ 20841 7268 12590000 .long 0x5912
+ 20842 726c 03 .byte 0x3
+ 20843 726d 91 .byte 0x91
+ 20844 726e A070 .sleb128 -2016
+ 20845 7270 31 .uleb128 0x31
+ 20846 7271 08590000 .long 0x5908
+ 20847 7275 03 .byte 0x3
+ 20848 7276 91 .byte 0x91
+ 20849 7277 B070 .sleb128 -2000
+ 20850 7279 00 .byte 0x0
+ 20851 727a 30 .uleb128 0x30
+ 20852 727b E30C0000 .long 0xce3
+ 20853 727f 00000000 .quad .LBB2072
+ 20853 00000000
+ 20854 7287 00000000 .quad .LBE2072
+ 20854 00000000
+ 20855 728f 03 .byte 0x3
+ 20856 7290 8E07 .value 0x78e
+ 20857 7292 40730000 .long 0x7340
+ 20858 7296 31 .uleb128 0x31
+ 20859 7297 010D0000 .long 0xd01
+ 20860 729b 03 .byte 0x3
+ 20861 729c 91 .byte 0x91
+ 20862 729d CC70 .sleb128 -1972
+ 20863 729f 31 .uleb128 0x31
+ 20864 72a0 F50C0000 .long 0xcf5
+ 20865 72a4 03 .byte 0x3
+ 20866 72a5 91 .byte 0x91
+ 20867 72a6 D070 .sleb128 -1968
+ 20868 72a8 32 .uleb128 0x32
+ 20869 72a9 00000000 .quad .LBB2073
+ 20869 00000000
+ 20870 72b1 00000000 .quad .LBE2073
+ 20870 00000000
+ 20871 72b9 33 .uleb128 0x33
+ 20872 72ba 0D0D0000 .long 0xd0d
+ 20873 72be 03 .byte 0x3
+ 20874 72bf 76 .byte 0x76
+ 20875 72c0 A056 .sleb128 -5344
+ 20876 72c2 30 .uleb128 0x30
+ 20877 72c3 1A0D0000 .long 0xd1a
+ 20878 72c7 00000000 .quad .LBB2074
+ 20878 00000000
+ 20879 72cf 00000000 .quad .LBE2074
+
GAS LISTING /tmp/ccPaCTqg.s page 538
+
+
+ 20879 00000000
+ 20880 72d7 03 .byte 0x3
+ 20881 72d8 8A06 .value 0x68a
+ 20882 72da F1720000 .long 0x72f1
+ 20883 72de 31 .uleb128 0x31
+ 20884 72df 380D0000 .long 0xd38
+ 20885 72e3 03 .byte 0x3
+ 20886 72e4 91 .byte 0x91
+ 20887 72e5 EC70 .sleb128 -1940
+ 20888 72e7 31 .uleb128 0x31
+ 20889 72e8 2C0D0000 .long 0xd2c
+ 20890 72ec 03 .byte 0x3
+ 20891 72ed 91 .byte 0x91
+ 20892 72ee F070 .sleb128 -1936
+ 20893 72f0 00 .byte 0x0
+ 20894 72f1 34 .uleb128 0x34
+ 20895 72f2 450D0000 .long 0xd45
+ 20896 72f6 00000000 .quad .LBB2076
+ 20896 00000000
+ 20897 72fe 00000000 .quad .LBE2076
+ 20897 00000000
+ 20898 7306 03 .byte 0x3
+ 20899 7307 8B06 .value 0x68b
+ 20900 7309 31 .uleb128 0x31
+ 20901 730a 570D0000 .long 0xd57
+ 20902 730e 03 .byte 0x3
+ 20903 730f 91 .byte 0x91
+ 20904 7310 8071 .sleb128 -1920
+ 20905 7312 34 .uleb128 0x34
+ 20906 7313 640D0000 .long 0xd64
+ 20907 7317 00000000 .quad .LBB2078
+ 20907 00000000
+ 20908 731f 00000000 .quad .LBE2078
+ 20908 00000000
+ 20909 7327 03 .byte 0x3
+ 20910 7328 4905 .value 0x549
+ 20911 732a 31 .uleb128 0x31
+ 20912 732b 820D0000 .long 0xd82
+ 20913 732f 03 .byte 0x3
+ 20914 7330 91 .byte 0x91
+ 20915 7331 9C71 .sleb128 -1892
+ 20916 7333 31 .uleb128 0x31
+ 20917 7334 760D0000 .long 0xd76
+ 20918 7338 03 .byte 0x3
+ 20919 7339 91 .byte 0x91
+ 20920 733a A071 .sleb128 -1888
+ 20921 733c 00 .byte 0x0
+ 20922 733d 00 .byte 0x0
+ 20923 733e 00 .byte 0x0
+ 20924 733f 00 .byte 0x0
+ 20925 7340 30 .uleb128 0x30
+ 20926 7341 8F0D0000 .long 0xd8f
+ 20927 7345 00000000 .quad .LBB2080
+ 20927 00000000
+ 20928 734d 00000000 .quad .LBE2080
+ 20928 00000000
+ 20929 7355 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 539
+
+
+ 20930 7356 8E07 .value 0x78e
+ 20931 7358 54750000 .long 0x7554
+ 20932 735c 31 .uleb128 0x31
+ 20933 735d A10D0000 .long 0xda1
+ 20934 7361 03 .byte 0x3
+ 20935 7362 91 .byte 0x91
+ 20936 7363 B071 .sleb128 -1872
+ 20937 7365 32 .uleb128 0x32
+ 20938 7366 00000000 .quad .LBB2081
+ 20938 00000000
+ 20939 736e 00000000 .quad .LBE2081
+ 20939 00000000
+ 20940 7376 33 .uleb128 0x33
+ 20941 7377 AD0D0000 .long 0xdad
+ 20942 737b 03 .byte 0x3
+ 20943 737c 76 .byte 0x76
+ 20944 737d B056 .sleb128 -5328
+ 20945 737f 30 .uleb128 0x30
+ 20946 7380 BA0D0000 .long 0xdba
+ 20947 7384 00000000 .quad .LBB2082
+ 20947 00000000
+ 20948 738c 00000000 .quad .LBE2082
+ 20948 00000000
+ 20949 7394 03 .byte 0x3
+ 20950 7395 1F06 .value 0x61f
+ 20951 7397 1C740000 .long 0x741c
+ 20952 739b 31 .uleb128 0x31
+ 20953 739c CC0D0000 .long 0xdcc
+ 20954 73a0 03 .byte 0x3
+ 20955 73a1 91 .byte 0x91
+ 20956 73a2 C071 .sleb128 -1856
+ 20957 73a4 32 .uleb128 0x32
+ 20958 73a5 00000000 .quad .LBB2083
+ 20958 00000000
+ 20959 73ad 00000000 .quad .LBE2083
+ 20959 00000000
+ 20960 73b5 33 .uleb128 0x33
+ 20961 73b6 D80D0000 .long 0xdd8
+ 20962 73ba 09 .byte 0x9
+ 20963 73bb 03 .byte 0x3
+ 20964 73bc 00000000 .quad mask.8002
+ 20964 00000000
+ 20965 73c4 34 .uleb128 0x34
+ 20966 73c5 FB0D0000 .long 0xdfb
+ 20967 73c9 00000000 .quad .LBB2084
+ 20967 00000000
+ 20968 73d1 00000000 .quad .LBE2084
+ 20968 00000000
+ 20969 73d9 03 .byte 0x3
+ 20970 73da FE04 .value 0x4fe
+ 20971 73dc 31 .uleb128 0x31
+ 20972 73dd 190E0000 .long 0xe19
+ 20973 73e1 03 .byte 0x3
+ 20974 73e2 91 .byte 0x91
+ 20975 73e3 D071 .sleb128 -1840
+ 20976 73e5 31 .uleb128 0x31
+ 20977 73e6 0D0E0000 .long 0xe0d
+
GAS LISTING /tmp/ccPaCTqg.s page 540
+
+
+ 20978 73ea 03 .byte 0x3
+ 20979 73eb 91 .byte 0x91
+ 20980 73ec E071 .sleb128 -1824
+ 20981 73ee 34 .uleb128 0x34
+ 20982 73ef 260E0000 .long 0xe26
+ 20983 73f3 00000000 .quad .LBB2086
+ 20983 00000000
+ 20984 73fb 00000000 .quad .LBE2086
+ 20984 00000000
+ 20985 7403 03 .byte 0x3
+ 20986 7404 7501 .value 0x175
+ 20987 7406 31 .uleb128 0x31
+ 20988 7407 440E0000 .long 0xe44
+ 20989 740b 03 .byte 0x3
+ 20990 740c 91 .byte 0x91
+ 20991 740d F071 .sleb128 -1808
+ 20992 740f 31 .uleb128 0x31
+ 20993 7410 380E0000 .long 0xe38
+ 20994 7414 03 .byte 0x3
+ 20995 7415 91 .byte 0x91
+ 20996 7416 8072 .sleb128 -1792
+ 20997 7418 00 .byte 0x0
+ 20998 7419 00 .byte 0x0
+ 20999 741a 00 .byte 0x0
+ 21000 741b 00 .byte 0x0
+ 21001 741c 30 .uleb128 0x30
+ 21002 741d BA0D0000 .long 0xdba
+ 21003 7421 00000000 .quad .LBB2088
+ 21003 00000000
+ 21004 7429 00000000 .quad .LBE2088
+ 21004 00000000
+ 21005 7431 03 .byte 0x3
+ 21006 7432 2006 .value 0x620
+ 21007 7434 B9740000 .long 0x74b9
+ 21008 7438 31 .uleb128 0x31
+ 21009 7439 CC0D0000 .long 0xdcc
+ 21010 743d 03 .byte 0x3
+ 21011 743e 91 .byte 0x91
+ 21012 743f 9072 .sleb128 -1776
+ 21013 7441 32 .uleb128 0x32
+ 21014 7442 00000000 .quad .LBB2089
+ 21014 00000000
+ 21015 744a 00000000 .quad .LBE2089
+ 21015 00000000
+ 21016 7452 33 .uleb128 0x33
+ 21017 7453 D80D0000 .long 0xdd8
+ 21018 7457 09 .byte 0x9
+ 21019 7458 03 .byte 0x3
+ 21020 7459 00000000 .quad mask.8002
+ 21020 00000000
+ 21021 7461 34 .uleb128 0x34
+ 21022 7462 FB0D0000 .long 0xdfb
+ 21023 7466 00000000 .quad .LBB2090
+ 21023 00000000
+ 21024 746e 00000000 .quad .LBE2090
+ 21024 00000000
+ 21025 7476 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 541
+
+
+ 21026 7477 FE04 .value 0x4fe
+ 21027 7479 31 .uleb128 0x31
+ 21028 747a 190E0000 .long 0xe19
+ 21029 747e 03 .byte 0x3
+ 21030 747f 91 .byte 0x91
+ 21031 7480 A072 .sleb128 -1760
+ 21032 7482 31 .uleb128 0x31
+ 21033 7483 0D0E0000 .long 0xe0d
+ 21034 7487 03 .byte 0x3
+ 21035 7488 91 .byte 0x91
+ 21036 7489 B072 .sleb128 -1744
+ 21037 748b 34 .uleb128 0x34
+ 21038 748c 260E0000 .long 0xe26
+ 21039 7490 00000000 .quad .LBB2092
+ 21039 00000000
+ 21040 7498 00000000 .quad .LBE2092
+ 21040 00000000
+ 21041 74a0 03 .byte 0x3
+ 21042 74a1 7501 .value 0x175
+ 21043 74a3 31 .uleb128 0x31
+ 21044 74a4 440E0000 .long 0xe44
+ 21045 74a8 03 .byte 0x3
+ 21046 74a9 91 .byte 0x91
+ 21047 74aa C072 .sleb128 -1728
+ 21048 74ac 31 .uleb128 0x31
+ 21049 74ad 380E0000 .long 0xe38
+ 21050 74b1 03 .byte 0x3
+ 21051 74b2 91 .byte 0x91
+ 21052 74b3 D072 .sleb128 -1712
+ 21053 74b5 00 .byte 0x0
+ 21054 74b6 00 .byte 0x0
+ 21055 74b7 00 .byte 0x0
+ 21056 74b8 00 .byte 0x0
+ 21057 74b9 34 .uleb128 0x34
+ 21058 74ba BA0D0000 .long 0xdba
+ 21059 74be 00000000 .quad .LBB2094
+ 21059 00000000
+ 21060 74c6 00000000 .quad .LBE2094
+ 21060 00000000
+ 21061 74ce 03 .byte 0x3
+ 21062 74cf 2106 .value 0x621
+ 21063 74d1 31 .uleb128 0x31
+ 21064 74d2 CC0D0000 .long 0xdcc
+ 21065 74d6 03 .byte 0x3
+ 21066 74d7 91 .byte 0x91
+ 21067 74d8 E072 .sleb128 -1696
+ 21068 74da 32 .uleb128 0x32
+ 21069 74db 00000000 .quad .LBB2095
+ 21069 00000000
+ 21070 74e3 00000000 .quad .LBE2095
+ 21070 00000000
+ 21071 74eb 33 .uleb128 0x33
+ 21072 74ec D80D0000 .long 0xdd8
+ 21073 74f0 09 .byte 0x9
+ 21074 74f1 03 .byte 0x3
+ 21075 74f2 00000000 .quad mask.8002
+ 21075 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 542
+
+
+ 21076 74fa 34 .uleb128 0x34
+ 21077 74fb FB0D0000 .long 0xdfb
+ 21078 74ff 00000000 .quad .LBB2096
+ 21078 00000000
+ 21079 7507 00000000 .quad .LBE2096
+ 21079 00000000
+ 21080 750f 03 .byte 0x3
+ 21081 7510 FE04 .value 0x4fe
+ 21082 7512 31 .uleb128 0x31
+ 21083 7513 190E0000 .long 0xe19
+ 21084 7517 03 .byte 0x3
+ 21085 7518 91 .byte 0x91
+ 21086 7519 F072 .sleb128 -1680
+ 21087 751b 31 .uleb128 0x31
+ 21088 751c 0D0E0000 .long 0xe0d
+ 21089 7520 03 .byte 0x3
+ 21090 7521 91 .byte 0x91
+ 21091 7522 8073 .sleb128 -1664
+ 21092 7524 34 .uleb128 0x34
+ 21093 7525 260E0000 .long 0xe26
+ 21094 7529 00000000 .quad .LBB2098
+ 21094 00000000
+ 21095 7531 00000000 .quad .LBE2098
+ 21095 00000000
+ 21096 7539 03 .byte 0x3
+ 21097 753a 7501 .value 0x175
+ 21098 753c 31 .uleb128 0x31
+ 21099 753d 440E0000 .long 0xe44
+ 21100 7541 03 .byte 0x3
+ 21101 7542 91 .byte 0x91
+ 21102 7543 9073 .sleb128 -1648
+ 21103 7545 31 .uleb128 0x31
+ 21104 7546 380E0000 .long 0xe38
+ 21105 754a 03 .byte 0x3
+ 21106 754b 91 .byte 0x91
+ 21107 754c A073 .sleb128 -1632
+ 21108 754e 00 .byte 0x0
+ 21109 754f 00 .byte 0x0
+ 21110 7550 00 .byte 0x0
+ 21111 7551 00 .byte 0x0
+ 21112 7552 00 .byte 0x0
+ 21113 7553 00 .byte 0x0
+ 21114 7554 30 .uleb128 0x30
+ 21115 7555 F7580000 .long 0x58f7
+ 21116 7559 00000000 .quad .LBB2100
+ 21116 00000000
+ 21117 7561 00000000 .quad .LBE2100
+ 21117 00000000
+ 21118 7569 03 .byte 0x3
+ 21119 756a 8E07 .value 0x78e
+ 21120 756c 83750000 .long 0x7583
+ 21121 7570 31 .uleb128 0x31
+ 21122 7571 12590000 .long 0x5912
+ 21123 7575 03 .byte 0x3
+ 21124 7576 91 .byte 0x91
+ 21125 7577 B073 .sleb128 -1616
+ 21126 7579 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 543
+
+
+ 21127 757a 08590000 .long 0x5908
+ 21128 757e 03 .byte 0x3
+ 21129 757f 91 .byte 0x91
+ 21130 7580 C073 .sleb128 -1600
+ 21131 7582 00 .byte 0x0
+ 21132 7583 30 .uleb128 0x30
+ 21133 7584 1D590000 .long 0x591d
+ 21134 7588 00000000 .quad .LBB2102
+ 21134 00000000
+ 21135 7590 00000000 .quad .LBE2102
+ 21135 00000000
+ 21136 7598 03 .byte 0x3
+ 21137 7599 8F07 .value 0x78f
+ 21138 759b 40760000 .long 0x7640
+ 21139 759f 31 .uleb128 0x31
+ 21140 75a0 2F590000 .long 0x592f
+ 21141 75a4 03 .byte 0x3
+ 21142 75a5 91 .byte 0x91
+ 21143 75a6 D073 .sleb128 -1584
+ 21144 75a8 32 .uleb128 0x32
+ 21145 75a9 00000000 .quad .LBB2103
+ 21145 00000000
+ 21146 75b1 00000000 .quad .LBE2103
+ 21146 00000000
+ 21147 75b9 33 .uleb128 0x33
+ 21148 75ba 3B590000 .long 0x593b
+ 21149 75be 03 .byte 0x3
+ 21150 75bf 76 .byte 0x76
+ 21151 75c0 C056 .sleb128 -5312
+ 21152 75c2 30 .uleb128 0x30
+ 21153 75c3 1A0D0000 .long 0xd1a
+ 21154 75c7 00000000 .quad .LBB2104
+ 21154 00000000
+ 21155 75cf 00000000 .quad .LBE2104
+ 21155 00000000
+ 21156 75d7 03 .byte 0x3
+ 21157 75d8 7206 .value 0x672
+ 21158 75da F1750000 .long 0x75f1
+ 21159 75de 31 .uleb128 0x31
+ 21160 75df 380D0000 .long 0xd38
+ 21161 75e3 03 .byte 0x3
+ 21162 75e4 91 .byte 0x91
+ 21163 75e5 EC73 .sleb128 -1556
+ 21164 75e7 31 .uleb128 0x31
+ 21165 75e8 2C0D0000 .long 0xd2c
+ 21166 75ec 03 .byte 0x3
+ 21167 75ed 91 .byte 0x91
+ 21168 75ee F073 .sleb128 -1552
+ 21169 75f0 00 .byte 0x0
+ 21170 75f1 34 .uleb128 0x34
+ 21171 75f2 48590000 .long 0x5948
+ 21172 75f6 00000000 .quad .LBB2106
+ 21172 00000000
+ 21173 75fe 00000000 .quad .LBE2106
+ 21173 00000000
+ 21174 7606 03 .byte 0x3
+ 21175 7607 7306 .value 0x673
+
GAS LISTING /tmp/ccPaCTqg.s page 544
+
+
+ 21176 7609 31 .uleb128 0x31
+ 21177 760a 5A590000 .long 0x595a
+ 21178 760e 03 .byte 0x3
+ 21179 760f 91 .byte 0x91
+ 21180 7610 8074 .sleb128 -1536
+ 21181 7612 34 .uleb128 0x34
+ 21182 7613 640D0000 .long 0xd64
+ 21183 7617 00000000 .quad .LBB2108
+ 21183 00000000
+ 21184 761f 00000000 .quad .LBE2108
+ 21184 00000000
+ 21185 7627 03 .byte 0x3
+ 21186 7628 6505 .value 0x565
+ 21187 762a 31 .uleb128 0x31
+ 21188 762b 820D0000 .long 0xd82
+ 21189 762f 03 .byte 0x3
+ 21190 7630 91 .byte 0x91
+ 21191 7631 9C74 .sleb128 -1508
+ 21192 7633 31 .uleb128 0x31
+ 21193 7634 760D0000 .long 0xd76
+ 21194 7638 03 .byte 0x3
+ 21195 7639 91 .byte 0x91
+ 21196 763a A074 .sleb128 -1504
+ 21197 763c 00 .byte 0x0
+ 21198 763d 00 .byte 0x0
+ 21199 763e 00 .byte 0x0
+ 21200 763f 00 .byte 0x0
+ 21201 7640 30 .uleb128 0x30
+ 21202 7641 8F0D0000 .long 0xd8f
+ 21203 7645 00000000 .quad .LBB2110
+ 21203 00000000
+ 21204 764d 00000000 .quad .LBE2110
+ 21204 00000000
+ 21205 7655 03 .byte 0x3
+ 21206 7656 8F07 .value 0x78f
+ 21207 7658 54780000 .long 0x7854
+ 21208 765c 31 .uleb128 0x31
+ 21209 765d A10D0000 .long 0xda1
+ 21210 7661 03 .byte 0x3
+ 21211 7662 91 .byte 0x91
+ 21212 7663 B074 .sleb128 -1488
+ 21213 7665 32 .uleb128 0x32
+ 21214 7666 00000000 .quad .LBB2111
+ 21214 00000000
+ 21215 766e 00000000 .quad .LBE2111
+ 21215 00000000
+ 21216 7676 33 .uleb128 0x33
+ 21217 7677 AD0D0000 .long 0xdad
+ 21218 767b 03 .byte 0x3
+ 21219 767c 76 .byte 0x76
+ 21220 767d D056 .sleb128 -5296
+ 21221 767f 30 .uleb128 0x30
+ 21222 7680 BA0D0000 .long 0xdba
+ 21223 7684 00000000 .quad .LBB2112
+ 21223 00000000
+ 21224 768c 00000000 .quad .LBE2112
+ 21224 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 545
+
+
+ 21225 7694 03 .byte 0x3
+ 21226 7695 1F06 .value 0x61f
+ 21227 7697 1C770000 .long 0x771c
+ 21228 769b 31 .uleb128 0x31
+ 21229 769c CC0D0000 .long 0xdcc
+ 21230 76a0 03 .byte 0x3
+ 21231 76a1 91 .byte 0x91
+ 21232 76a2 C074 .sleb128 -1472
+ 21233 76a4 32 .uleb128 0x32
+ 21234 76a5 00000000 .quad .LBB2113
+ 21234 00000000
+ 21235 76ad 00000000 .quad .LBE2113
+ 21235 00000000
+ 21236 76b5 33 .uleb128 0x33
+ 21237 76b6 D80D0000 .long 0xdd8
+ 21238 76ba 09 .byte 0x9
+ 21239 76bb 03 .byte 0x3
+ 21240 76bc 00000000 .quad mask.8002
+ 21240 00000000
+ 21241 76c4 34 .uleb128 0x34
+ 21242 76c5 FB0D0000 .long 0xdfb
+ 21243 76c9 00000000 .quad .LBB2114
+ 21243 00000000
+ 21244 76d1 00000000 .quad .LBE2114
+ 21244 00000000
+ 21245 76d9 03 .byte 0x3
+ 21246 76da FE04 .value 0x4fe
+ 21247 76dc 31 .uleb128 0x31
+ 21248 76dd 190E0000 .long 0xe19
+ 21249 76e1 03 .byte 0x3
+ 21250 76e2 91 .byte 0x91
+ 21251 76e3 D074 .sleb128 -1456
+ 21252 76e5 31 .uleb128 0x31
+ 21253 76e6 0D0E0000 .long 0xe0d
+ 21254 76ea 03 .byte 0x3
+ 21255 76eb 91 .byte 0x91
+ 21256 76ec E074 .sleb128 -1440
+ 21257 76ee 34 .uleb128 0x34
+ 21258 76ef 260E0000 .long 0xe26
+ 21259 76f3 00000000 .quad .LBB2116
+ 21259 00000000
+ 21260 76fb 00000000 .quad .LBE2116
+ 21260 00000000
+ 21261 7703 03 .byte 0x3
+ 21262 7704 7501 .value 0x175
+ 21263 7706 31 .uleb128 0x31
+ 21264 7707 440E0000 .long 0xe44
+ 21265 770b 03 .byte 0x3
+ 21266 770c 91 .byte 0x91
+ 21267 770d F074 .sleb128 -1424
+ 21268 770f 31 .uleb128 0x31
+ 21269 7710 380E0000 .long 0xe38
+ 21270 7714 03 .byte 0x3
+ 21271 7715 91 .byte 0x91
+ 21272 7716 8075 .sleb128 -1408
+ 21273 7718 00 .byte 0x0
+ 21274 7719 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 546
+
+
+ 21275 771a 00 .byte 0x0
+ 21276 771b 00 .byte 0x0
+ 21277 771c 30 .uleb128 0x30
+ 21278 771d BA0D0000 .long 0xdba
+ 21279 7721 00000000 .quad .LBB2118
+ 21279 00000000
+ 21280 7729 00000000 .quad .LBE2118
+ 21280 00000000
+ 21281 7731 03 .byte 0x3
+ 21282 7732 2006 .value 0x620
+ 21283 7734 B9770000 .long 0x77b9
+ 21284 7738 31 .uleb128 0x31
+ 21285 7739 CC0D0000 .long 0xdcc
+ 21286 773d 03 .byte 0x3
+ 21287 773e 91 .byte 0x91
+ 21288 773f 9075 .sleb128 -1392
+ 21289 7741 32 .uleb128 0x32
+ 21290 7742 00000000 .quad .LBB2119
+ 21290 00000000
+ 21291 774a 00000000 .quad .LBE2119
+ 21291 00000000
+ 21292 7752 33 .uleb128 0x33
+ 21293 7753 D80D0000 .long 0xdd8
+ 21294 7757 09 .byte 0x9
+ 21295 7758 03 .byte 0x3
+ 21296 7759 00000000 .quad mask.8002
+ 21296 00000000
+ 21297 7761 34 .uleb128 0x34
+ 21298 7762 FB0D0000 .long 0xdfb
+ 21299 7766 00000000 .quad .LBB2120
+ 21299 00000000
+ 21300 776e 00000000 .quad .LBE2120
+ 21300 00000000
+ 21301 7776 03 .byte 0x3
+ 21302 7777 FE04 .value 0x4fe
+ 21303 7779 31 .uleb128 0x31
+ 21304 777a 190E0000 .long 0xe19
+ 21305 777e 03 .byte 0x3
+ 21306 777f 91 .byte 0x91
+ 21307 7780 A075 .sleb128 -1376
+ 21308 7782 31 .uleb128 0x31
+ 21309 7783 0D0E0000 .long 0xe0d
+ 21310 7787 03 .byte 0x3
+ 21311 7788 91 .byte 0x91
+ 21312 7789 B075 .sleb128 -1360
+ 21313 778b 34 .uleb128 0x34
+ 21314 778c 260E0000 .long 0xe26
+ 21315 7790 00000000 .quad .LBB2122
+ 21315 00000000
+ 21316 7798 00000000 .quad .LBE2122
+ 21316 00000000
+ 21317 77a0 03 .byte 0x3
+ 21318 77a1 7501 .value 0x175
+ 21319 77a3 31 .uleb128 0x31
+ 21320 77a4 440E0000 .long 0xe44
+ 21321 77a8 03 .byte 0x3
+ 21322 77a9 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 547
+
+
+ 21323 77aa C075 .sleb128 -1344
+ 21324 77ac 31 .uleb128 0x31
+ 21325 77ad 380E0000 .long 0xe38
+ 21326 77b1 03 .byte 0x3
+ 21327 77b2 91 .byte 0x91
+ 21328 77b3 D075 .sleb128 -1328
+ 21329 77b5 00 .byte 0x0
+ 21330 77b6 00 .byte 0x0
+ 21331 77b7 00 .byte 0x0
+ 21332 77b8 00 .byte 0x0
+ 21333 77b9 34 .uleb128 0x34
+ 21334 77ba BA0D0000 .long 0xdba
+ 21335 77be 00000000 .quad .LBB2124
+ 21335 00000000
+ 21336 77c6 00000000 .quad .LBE2124
+ 21336 00000000
+ 21337 77ce 03 .byte 0x3
+ 21338 77cf 2106 .value 0x621
+ 21339 77d1 31 .uleb128 0x31
+ 21340 77d2 CC0D0000 .long 0xdcc
+ 21341 77d6 03 .byte 0x3
+ 21342 77d7 91 .byte 0x91
+ 21343 77d8 E075 .sleb128 -1312
+ 21344 77da 32 .uleb128 0x32
+ 21345 77db 00000000 .quad .LBB2125
+ 21345 00000000
+ 21346 77e3 00000000 .quad .LBE2125
+ 21346 00000000
+ 21347 77eb 33 .uleb128 0x33
+ 21348 77ec D80D0000 .long 0xdd8
+ 21349 77f0 09 .byte 0x9
+ 21350 77f1 03 .byte 0x3
+ 21351 77f2 00000000 .quad mask.8002
+ 21351 00000000
+ 21352 77fa 34 .uleb128 0x34
+ 21353 77fb FB0D0000 .long 0xdfb
+ 21354 77ff 00000000 .quad .LBB2126
+ 21354 00000000
+ 21355 7807 00000000 .quad .LBE2126
+ 21355 00000000
+ 21356 780f 03 .byte 0x3
+ 21357 7810 FE04 .value 0x4fe
+ 21358 7812 31 .uleb128 0x31
+ 21359 7813 190E0000 .long 0xe19
+ 21360 7817 03 .byte 0x3
+ 21361 7818 91 .byte 0x91
+ 21362 7819 F075 .sleb128 -1296
+ 21363 781b 31 .uleb128 0x31
+ 21364 781c 0D0E0000 .long 0xe0d
+ 21365 7820 03 .byte 0x3
+ 21366 7821 91 .byte 0x91
+ 21367 7822 8076 .sleb128 -1280
+ 21368 7824 34 .uleb128 0x34
+ 21369 7825 260E0000 .long 0xe26
+ 21370 7829 00000000 .quad .LBB2128
+ 21370 00000000
+ 21371 7831 00000000 .quad .LBE2128
+
GAS LISTING /tmp/ccPaCTqg.s page 548
+
+
+ 21371 00000000
+ 21372 7839 03 .byte 0x3
+ 21373 783a 7501 .value 0x175
+ 21374 783c 31 .uleb128 0x31
+ 21375 783d 440E0000 .long 0xe44
+ 21376 7841 03 .byte 0x3
+ 21377 7842 91 .byte 0x91
+ 21378 7843 9076 .sleb128 -1264
+ 21379 7845 31 .uleb128 0x31
+ 21380 7846 380E0000 .long 0xe38
+ 21381 784a 03 .byte 0x3
+ 21382 784b 91 .byte 0x91
+ 21383 784c A076 .sleb128 -1248
+ 21384 784e 00 .byte 0x0
+ 21385 784f 00 .byte 0x0
+ 21386 7850 00 .byte 0x0
+ 21387 7851 00 .byte 0x0
+ 21388 7852 00 .byte 0x0
+ 21389 7853 00 .byte 0x0
+ 21390 7854 30 .uleb128 0x30
+ 21391 7855 F7580000 .long 0x58f7
+ 21392 7859 00000000 .quad .LBB2130
+ 21392 00000000
+ 21393 7861 00000000 .quad .LBE2130
+ 21393 00000000
+ 21394 7869 03 .byte 0x3
+ 21395 786a 8F07 .value 0x78f
+ 21396 786c 83780000 .long 0x7883
+ 21397 7870 31 .uleb128 0x31
+ 21398 7871 12590000 .long 0x5912
+ 21399 7875 03 .byte 0x3
+ 21400 7876 91 .byte 0x91
+ 21401 7877 B076 .sleb128 -1232
+ 21402 7879 31 .uleb128 0x31
+ 21403 787a 08590000 .long 0x5908
+ 21404 787e 03 .byte 0x3
+ 21405 787f 91 .byte 0x91
+ 21406 7880 C076 .sleb128 -1216
+ 21407 7882 00 .byte 0x0
+ 21408 7883 30 .uleb128 0x30
+ 21409 7884 E30C0000 .long 0xce3
+ 21410 7888 00000000 .quad .LBB2132
+ 21410 00000000
+ 21411 7890 00000000 .quad .LBE2132
+ 21411 00000000
+ 21412 7898 03 .byte 0x3
+ 21413 7899 9007 .value 0x790
+ 21414 789b 49790000 .long 0x7949
+ 21415 789f 31 .uleb128 0x31
+ 21416 78a0 010D0000 .long 0xd01
+ 21417 78a4 03 .byte 0x3
+ 21418 78a5 91 .byte 0x91
+ 21419 78a6 DC76 .sleb128 -1188
+ 21420 78a8 31 .uleb128 0x31
+ 21421 78a9 F50C0000 .long 0xcf5
+ 21422 78ad 03 .byte 0x3
+ 21423 78ae 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 549
+
+
+ 21424 78af E076 .sleb128 -1184
+ 21425 78b1 32 .uleb128 0x32
+ 21426 78b2 00000000 .quad .LBB2133
+ 21426 00000000
+ 21427 78ba 00000000 .quad .LBE2133
+ 21427 00000000
+ 21428 78c2 33 .uleb128 0x33
+ 21429 78c3 0D0D0000 .long 0xd0d
+ 21430 78c7 03 .byte 0x3
+ 21431 78c8 76 .byte 0x76
+ 21432 78c9 E056 .sleb128 -5280
+ 21433 78cb 30 .uleb128 0x30
+ 21434 78cc 1A0D0000 .long 0xd1a
+ 21435 78d0 00000000 .quad .LBB2134
+ 21435 00000000
+ 21436 78d8 00000000 .quad .LBE2134
+ 21436 00000000
+ 21437 78e0 03 .byte 0x3
+ 21438 78e1 8A06 .value 0x68a
+ 21439 78e3 FA780000 .long 0x78fa
+ 21440 78e7 31 .uleb128 0x31
+ 21441 78e8 380D0000 .long 0xd38
+ 21442 78ec 03 .byte 0x3
+ 21443 78ed 91 .byte 0x91
+ 21444 78ee FC76 .sleb128 -1156
+ 21445 78f0 31 .uleb128 0x31
+ 21446 78f1 2C0D0000 .long 0xd2c
+ 21447 78f5 03 .byte 0x3
+ 21448 78f6 91 .byte 0x91
+ 21449 78f7 8077 .sleb128 -1152
+ 21450 78f9 00 .byte 0x0
+ 21451 78fa 34 .uleb128 0x34
+ 21452 78fb 450D0000 .long 0xd45
+ 21453 78ff 00000000 .quad .LBB2136
+ 21453 00000000
+ 21454 7907 00000000 .quad .LBE2136
+ 21454 00000000
+ 21455 790f 03 .byte 0x3
+ 21456 7910 8B06 .value 0x68b
+ 21457 7912 31 .uleb128 0x31
+ 21458 7913 570D0000 .long 0xd57
+ 21459 7917 03 .byte 0x3
+ 21460 7918 91 .byte 0x91
+ 21461 7919 9077 .sleb128 -1136
+ 21462 791b 34 .uleb128 0x34
+ 21463 791c 640D0000 .long 0xd64
+ 21464 7920 00000000 .quad .LBB2138
+ 21464 00000000
+ 21465 7928 00000000 .quad .LBE2138
+ 21465 00000000
+ 21466 7930 03 .byte 0x3
+ 21467 7931 4905 .value 0x549
+ 21468 7933 31 .uleb128 0x31
+ 21469 7934 820D0000 .long 0xd82
+ 21470 7938 03 .byte 0x3
+ 21471 7939 91 .byte 0x91
+ 21472 793a AC77 .sleb128 -1108
+
GAS LISTING /tmp/ccPaCTqg.s page 550
+
+
+ 21473 793c 31 .uleb128 0x31
+ 21474 793d 760D0000 .long 0xd76
+ 21475 7941 03 .byte 0x3
+ 21476 7942 91 .byte 0x91
+ 21477 7943 B077 .sleb128 -1104
+ 21478 7945 00 .byte 0x0
+ 21479 7946 00 .byte 0x0
+ 21480 7947 00 .byte 0x0
+ 21481 7948 00 .byte 0x0
+ 21482 7949 30 .uleb128 0x30
+ 21483 794a 8F0D0000 .long 0xd8f
+ 21484 794e 00000000 .quad .LBB2140
+ 21484 00000000
+ 21485 7956 00000000 .quad .LBE2140
+ 21485 00000000
+ 21486 795e 03 .byte 0x3
+ 21487 795f 9007 .value 0x790
+ 21488 7961 5D7B0000 .long 0x7b5d
+ 21489 7965 31 .uleb128 0x31
+ 21490 7966 A10D0000 .long 0xda1
+ 21491 796a 03 .byte 0x3
+ 21492 796b 91 .byte 0x91
+ 21493 796c C077 .sleb128 -1088
+ 21494 796e 32 .uleb128 0x32
+ 21495 796f 00000000 .quad .LBB2141
+ 21495 00000000
+ 21496 7977 00000000 .quad .LBE2141
+ 21496 00000000
+ 21497 797f 33 .uleb128 0x33
+ 21498 7980 AD0D0000 .long 0xdad
+ 21499 7984 03 .byte 0x3
+ 21500 7985 76 .byte 0x76
+ 21501 7986 F056 .sleb128 -5264
+ 21502 7988 30 .uleb128 0x30
+ 21503 7989 BA0D0000 .long 0xdba
+ 21504 798d 00000000 .quad .LBB2142
+ 21504 00000000
+ 21505 7995 00000000 .quad .LBE2142
+ 21505 00000000
+ 21506 799d 03 .byte 0x3
+ 21507 799e 1F06 .value 0x61f
+ 21508 79a0 257A0000 .long 0x7a25
+ 21509 79a4 31 .uleb128 0x31
+ 21510 79a5 CC0D0000 .long 0xdcc
+ 21511 79a9 03 .byte 0x3
+ 21512 79aa 91 .byte 0x91
+ 21513 79ab D077 .sleb128 -1072
+ 21514 79ad 32 .uleb128 0x32
+ 21515 79ae 00000000 .quad .LBB2143
+ 21515 00000000
+ 21516 79b6 00000000 .quad .LBE2143
+ 21516 00000000
+ 21517 79be 33 .uleb128 0x33
+ 21518 79bf D80D0000 .long 0xdd8
+ 21519 79c3 09 .byte 0x9
+ 21520 79c4 03 .byte 0x3
+ 21521 79c5 00000000 .quad mask.8002
+
GAS LISTING /tmp/ccPaCTqg.s page 551
+
+
+ 21521 00000000
+ 21522 79cd 34 .uleb128 0x34
+ 21523 79ce FB0D0000 .long 0xdfb
+ 21524 79d2 00000000 .quad .LBB2144
+ 21524 00000000
+ 21525 79da 00000000 .quad .LBE2144
+ 21525 00000000
+ 21526 79e2 03 .byte 0x3
+ 21527 79e3 FE04 .value 0x4fe
+ 21528 79e5 31 .uleb128 0x31
+ 21529 79e6 190E0000 .long 0xe19
+ 21530 79ea 03 .byte 0x3
+ 21531 79eb 91 .byte 0x91
+ 21532 79ec E077 .sleb128 -1056
+ 21533 79ee 31 .uleb128 0x31
+ 21534 79ef 0D0E0000 .long 0xe0d
+ 21535 79f3 03 .byte 0x3
+ 21536 79f4 91 .byte 0x91
+ 21537 79f5 F077 .sleb128 -1040
+ 21538 79f7 34 .uleb128 0x34
+ 21539 79f8 260E0000 .long 0xe26
+ 21540 79fc 00000000 .quad .LBB2146
+ 21540 00000000
+ 21541 7a04 00000000 .quad .LBE2146
+ 21541 00000000
+ 21542 7a0c 03 .byte 0x3
+ 21543 7a0d 7501 .value 0x175
+ 21544 7a0f 31 .uleb128 0x31
+ 21545 7a10 440E0000 .long 0xe44
+ 21546 7a14 03 .byte 0x3
+ 21547 7a15 91 .byte 0x91
+ 21548 7a16 8078 .sleb128 -1024
+ 21549 7a18 31 .uleb128 0x31
+ 21550 7a19 380E0000 .long 0xe38
+ 21551 7a1d 03 .byte 0x3
+ 21552 7a1e 91 .byte 0x91
+ 21553 7a1f 9078 .sleb128 -1008
+ 21554 7a21 00 .byte 0x0
+ 21555 7a22 00 .byte 0x0
+ 21556 7a23 00 .byte 0x0
+ 21557 7a24 00 .byte 0x0
+ 21558 7a25 30 .uleb128 0x30
+ 21559 7a26 BA0D0000 .long 0xdba
+ 21560 7a2a 00000000 .quad .LBB2148
+ 21560 00000000
+ 21561 7a32 00000000 .quad .LBE2148
+ 21561 00000000
+ 21562 7a3a 03 .byte 0x3
+ 21563 7a3b 2006 .value 0x620
+ 21564 7a3d C27A0000 .long 0x7ac2
+ 21565 7a41 31 .uleb128 0x31
+ 21566 7a42 CC0D0000 .long 0xdcc
+ 21567 7a46 03 .byte 0x3
+ 21568 7a47 91 .byte 0x91
+ 21569 7a48 A078 .sleb128 -992
+ 21570 7a4a 32 .uleb128 0x32
+ 21571 7a4b 00000000 .quad .LBB2149
+
GAS LISTING /tmp/ccPaCTqg.s page 552
+
+
+ 21571 00000000
+ 21572 7a53 00000000 .quad .LBE2149
+ 21572 00000000
+ 21573 7a5b 33 .uleb128 0x33
+ 21574 7a5c D80D0000 .long 0xdd8
+ 21575 7a60 09 .byte 0x9
+ 21576 7a61 03 .byte 0x3
+ 21577 7a62 00000000 .quad mask.8002
+ 21577 00000000
+ 21578 7a6a 34 .uleb128 0x34
+ 21579 7a6b FB0D0000 .long 0xdfb
+ 21580 7a6f 00000000 .quad .LBB2150
+ 21580 00000000
+ 21581 7a77 00000000 .quad .LBE2150
+ 21581 00000000
+ 21582 7a7f 03 .byte 0x3
+ 21583 7a80 FE04 .value 0x4fe
+ 21584 7a82 31 .uleb128 0x31
+ 21585 7a83 190E0000 .long 0xe19
+ 21586 7a87 03 .byte 0x3
+ 21587 7a88 91 .byte 0x91
+ 21588 7a89 B078 .sleb128 -976
+ 21589 7a8b 31 .uleb128 0x31
+ 21590 7a8c 0D0E0000 .long 0xe0d
+ 21591 7a90 03 .byte 0x3
+ 21592 7a91 91 .byte 0x91
+ 21593 7a92 C078 .sleb128 -960
+ 21594 7a94 34 .uleb128 0x34
+ 21595 7a95 260E0000 .long 0xe26
+ 21596 7a99 00000000 .quad .LBB2152
+ 21596 00000000
+ 21597 7aa1 00000000 .quad .LBE2152
+ 21597 00000000
+ 21598 7aa9 03 .byte 0x3
+ 21599 7aaa 7501 .value 0x175
+ 21600 7aac 31 .uleb128 0x31
+ 21601 7aad 440E0000 .long 0xe44
+ 21602 7ab1 03 .byte 0x3
+ 21603 7ab2 91 .byte 0x91
+ 21604 7ab3 D078 .sleb128 -944
+ 21605 7ab5 31 .uleb128 0x31
+ 21606 7ab6 380E0000 .long 0xe38
+ 21607 7aba 03 .byte 0x3
+ 21608 7abb 91 .byte 0x91
+ 21609 7abc E078 .sleb128 -928
+ 21610 7abe 00 .byte 0x0
+ 21611 7abf 00 .byte 0x0
+ 21612 7ac0 00 .byte 0x0
+ 21613 7ac1 00 .byte 0x0
+ 21614 7ac2 34 .uleb128 0x34
+ 21615 7ac3 BA0D0000 .long 0xdba
+ 21616 7ac7 00000000 .quad .LBB2154
+ 21616 00000000
+ 21617 7acf 00000000 .quad .LBE2154
+ 21617 00000000
+ 21618 7ad7 03 .byte 0x3
+ 21619 7ad8 2106 .value 0x621
+
GAS LISTING /tmp/ccPaCTqg.s page 553
+
+
+ 21620 7ada 31 .uleb128 0x31
+ 21621 7adb CC0D0000 .long 0xdcc
+ 21622 7adf 03 .byte 0x3
+ 21623 7ae0 91 .byte 0x91
+ 21624 7ae1 F078 .sleb128 -912
+ 21625 7ae3 32 .uleb128 0x32
+ 21626 7ae4 00000000 .quad .LBB2155
+ 21626 00000000
+ 21627 7aec 00000000 .quad .LBE2155
+ 21627 00000000
+ 21628 7af4 33 .uleb128 0x33
+ 21629 7af5 D80D0000 .long 0xdd8
+ 21630 7af9 09 .byte 0x9
+ 21631 7afa 03 .byte 0x3
+ 21632 7afb 00000000 .quad mask.8002
+ 21632 00000000
+ 21633 7b03 34 .uleb128 0x34
+ 21634 7b04 FB0D0000 .long 0xdfb
+ 21635 7b08 00000000 .quad .LBB2156
+ 21635 00000000
+ 21636 7b10 00000000 .quad .LBE2156
+ 21636 00000000
+ 21637 7b18 03 .byte 0x3
+ 21638 7b19 FE04 .value 0x4fe
+ 21639 7b1b 31 .uleb128 0x31
+ 21640 7b1c 190E0000 .long 0xe19
+ 21641 7b20 03 .byte 0x3
+ 21642 7b21 91 .byte 0x91
+ 21643 7b22 8079 .sleb128 -896
+ 21644 7b24 31 .uleb128 0x31
+ 21645 7b25 0D0E0000 .long 0xe0d
+ 21646 7b29 03 .byte 0x3
+ 21647 7b2a 91 .byte 0x91
+ 21648 7b2b 9079 .sleb128 -880
+ 21649 7b2d 34 .uleb128 0x34
+ 21650 7b2e 260E0000 .long 0xe26
+ 21651 7b32 00000000 .quad .LBB2158
+ 21651 00000000
+ 21652 7b3a 00000000 .quad .LBE2158
+ 21652 00000000
+ 21653 7b42 03 .byte 0x3
+ 21654 7b43 7501 .value 0x175
+ 21655 7b45 31 .uleb128 0x31
+ 21656 7b46 440E0000 .long 0xe44
+ 21657 7b4a 03 .byte 0x3
+ 21658 7b4b 91 .byte 0x91
+ 21659 7b4c A079 .sleb128 -864
+ 21660 7b4e 31 .uleb128 0x31
+ 21661 7b4f 380E0000 .long 0xe38
+ 21662 7b53 03 .byte 0x3
+ 21663 7b54 91 .byte 0x91
+ 21664 7b55 B079 .sleb128 -848
+ 21665 7b57 00 .byte 0x0
+ 21666 7b58 00 .byte 0x0
+ 21667 7b59 00 .byte 0x0
+ 21668 7b5a 00 .byte 0x0
+ 21669 7b5b 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 554
+
+
+ 21670 7b5c 00 .byte 0x0
+ 21671 7b5d 30 .uleb128 0x30
+ 21672 7b5e F7580000 .long 0x58f7
+ 21673 7b62 00000000 .quad .LBB2160
+ 21673 00000000
+ 21674 7b6a 00000000 .quad .LBE2160
+ 21674 00000000
+ 21675 7b72 03 .byte 0x3
+ 21676 7b73 9007 .value 0x790
+ 21677 7b75 8C7B0000 .long 0x7b8c
+ 21678 7b79 31 .uleb128 0x31
+ 21679 7b7a 12590000 .long 0x5912
+ 21680 7b7e 03 .byte 0x3
+ 21681 7b7f 91 .byte 0x91
+ 21682 7b80 C079 .sleb128 -832
+ 21683 7b82 31 .uleb128 0x31
+ 21684 7b83 08590000 .long 0x5908
+ 21685 7b87 03 .byte 0x3
+ 21686 7b88 91 .byte 0x91
+ 21687 7b89 D079 .sleb128 -816
+ 21688 7b8b 00 .byte 0x0
+ 21689 7b8c 30 .uleb128 0x30
+ 21690 7b8d 1D590000 .long 0x591d
+ 21691 7b91 00000000 .quad .LBB2162
+ 21691 00000000
+ 21692 7b99 00000000 .quad .LBE2162
+ 21692 00000000
+ 21693 7ba1 03 .byte 0x3
+ 21694 7ba2 9107 .value 0x791
+ 21695 7ba4 497C0000 .long 0x7c49
+ 21696 7ba8 31 .uleb128 0x31
+ 21697 7ba9 2F590000 .long 0x592f
+ 21698 7bad 03 .byte 0x3
+ 21699 7bae 91 .byte 0x91
+ 21700 7baf E079 .sleb128 -800
+ 21701 7bb1 32 .uleb128 0x32
+ 21702 7bb2 00000000 .quad .LBB2163
+ 21702 00000000
+ 21703 7bba 00000000 .quad .LBE2163
+ 21703 00000000
+ 21704 7bc2 33 .uleb128 0x33
+ 21705 7bc3 3B590000 .long 0x593b
+ 21706 7bc7 03 .byte 0x3
+ 21707 7bc8 76 .byte 0x76
+ 21708 7bc9 8057 .sleb128 -5248
+ 21709 7bcb 30 .uleb128 0x30
+ 21710 7bcc 1A0D0000 .long 0xd1a
+ 21711 7bd0 00000000 .quad .LBB2164
+ 21711 00000000
+ 21712 7bd8 00000000 .quad .LBE2164
+ 21712 00000000
+ 21713 7be0 03 .byte 0x3
+ 21714 7be1 7206 .value 0x672
+ 21715 7be3 FA7B0000 .long 0x7bfa
+ 21716 7be7 31 .uleb128 0x31
+ 21717 7be8 380D0000 .long 0xd38
+ 21718 7bec 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 555
+
+
+ 21719 7bed 91 .byte 0x91
+ 21720 7bee FC79 .sleb128 -772
+ 21721 7bf0 31 .uleb128 0x31
+ 21722 7bf1 2C0D0000 .long 0xd2c
+ 21723 7bf5 03 .byte 0x3
+ 21724 7bf6 91 .byte 0x91
+ 21725 7bf7 807A .sleb128 -768
+ 21726 7bf9 00 .byte 0x0
+ 21727 7bfa 34 .uleb128 0x34
+ 21728 7bfb 48590000 .long 0x5948
+ 21729 7bff 00000000 .quad .LBB2166
+ 21729 00000000
+ 21730 7c07 00000000 .quad .LBE2166
+ 21730 00000000
+ 21731 7c0f 03 .byte 0x3
+ 21732 7c10 7306 .value 0x673
+ 21733 7c12 31 .uleb128 0x31
+ 21734 7c13 5A590000 .long 0x595a
+ 21735 7c17 03 .byte 0x3
+ 21736 7c18 91 .byte 0x91
+ 21737 7c19 907A .sleb128 -752
+ 21738 7c1b 34 .uleb128 0x34
+ 21739 7c1c 640D0000 .long 0xd64
+ 21740 7c20 00000000 .quad .LBB2168
+ 21740 00000000
+ 21741 7c28 00000000 .quad .LBE2168
+ 21741 00000000
+ 21742 7c30 03 .byte 0x3
+ 21743 7c31 6505 .value 0x565
+ 21744 7c33 31 .uleb128 0x31
+ 21745 7c34 820D0000 .long 0xd82
+ 21746 7c38 03 .byte 0x3
+ 21747 7c39 91 .byte 0x91
+ 21748 7c3a AC7A .sleb128 -724
+ 21749 7c3c 31 .uleb128 0x31
+ 21750 7c3d 760D0000 .long 0xd76
+ 21751 7c41 03 .byte 0x3
+ 21752 7c42 91 .byte 0x91
+ 21753 7c43 B07A .sleb128 -720
+ 21754 7c45 00 .byte 0x0
+ 21755 7c46 00 .byte 0x0
+ 21756 7c47 00 .byte 0x0
+ 21757 7c48 00 .byte 0x0
+ 21758 7c49 30 .uleb128 0x30
+ 21759 7c4a 8F0D0000 .long 0xd8f
+ 21760 7c4e 00000000 .quad .LBB2170
+ 21760 00000000
+ 21761 7c56 00000000 .quad .LBE2170
+ 21761 00000000
+ 21762 7c5e 03 .byte 0x3
+ 21763 7c5f 9107 .value 0x791
+ 21764 7c61 5D7E0000 .long 0x7e5d
+ 21765 7c65 31 .uleb128 0x31
+ 21766 7c66 A10D0000 .long 0xda1
+ 21767 7c6a 03 .byte 0x3
+ 21768 7c6b 91 .byte 0x91
+ 21769 7c6c C07A .sleb128 -704
+
GAS LISTING /tmp/ccPaCTqg.s page 556
+
+
+ 21770 7c6e 32 .uleb128 0x32
+ 21771 7c6f 00000000 .quad .LBB2171
+ 21771 00000000
+ 21772 7c77 00000000 .quad .LBE2171
+ 21772 00000000
+ 21773 7c7f 33 .uleb128 0x33
+ 21774 7c80 AD0D0000 .long 0xdad
+ 21775 7c84 03 .byte 0x3
+ 21776 7c85 76 .byte 0x76
+ 21777 7c86 9057 .sleb128 -5232
+ 21778 7c88 30 .uleb128 0x30
+ 21779 7c89 BA0D0000 .long 0xdba
+ 21780 7c8d 00000000 .quad .LBB2172
+ 21780 00000000
+ 21781 7c95 00000000 .quad .LBE2172
+ 21781 00000000
+ 21782 7c9d 03 .byte 0x3
+ 21783 7c9e 1F06 .value 0x61f
+ 21784 7ca0 257D0000 .long 0x7d25
+ 21785 7ca4 31 .uleb128 0x31
+ 21786 7ca5 CC0D0000 .long 0xdcc
+ 21787 7ca9 03 .byte 0x3
+ 21788 7caa 91 .byte 0x91
+ 21789 7cab D07A .sleb128 -688
+ 21790 7cad 32 .uleb128 0x32
+ 21791 7cae 00000000 .quad .LBB2173
+ 21791 00000000
+ 21792 7cb6 00000000 .quad .LBE2173
+ 21792 00000000
+ 21793 7cbe 33 .uleb128 0x33
+ 21794 7cbf D80D0000 .long 0xdd8
+ 21795 7cc3 09 .byte 0x9
+ 21796 7cc4 03 .byte 0x3
+ 21797 7cc5 00000000 .quad mask.8002
+ 21797 00000000
+ 21798 7ccd 34 .uleb128 0x34
+ 21799 7cce FB0D0000 .long 0xdfb
+ 21800 7cd2 00000000 .quad .LBB2174
+ 21800 00000000
+ 21801 7cda 00000000 .quad .LBE2174
+ 21801 00000000
+ 21802 7ce2 03 .byte 0x3
+ 21803 7ce3 FE04 .value 0x4fe
+ 21804 7ce5 31 .uleb128 0x31
+ 21805 7ce6 190E0000 .long 0xe19
+ 21806 7cea 03 .byte 0x3
+ 21807 7ceb 91 .byte 0x91
+ 21808 7cec E07A .sleb128 -672
+ 21809 7cee 31 .uleb128 0x31
+ 21810 7cef 0D0E0000 .long 0xe0d
+ 21811 7cf3 03 .byte 0x3
+ 21812 7cf4 91 .byte 0x91
+ 21813 7cf5 F07A .sleb128 -656
+ 21814 7cf7 34 .uleb128 0x34
+ 21815 7cf8 260E0000 .long 0xe26
+ 21816 7cfc 00000000 .quad .LBB2176
+ 21816 00000000
+
GAS LISTING /tmp/ccPaCTqg.s page 557
+
+
+ 21817 7d04 00000000 .quad .LBE2176
+ 21817 00000000
+ 21818 7d0c 03 .byte 0x3
+ 21819 7d0d 7501 .value 0x175
+ 21820 7d0f 31 .uleb128 0x31
+ 21821 7d10 440E0000 .long 0xe44
+ 21822 7d14 03 .byte 0x3
+ 21823 7d15 91 .byte 0x91
+ 21824 7d16 807B .sleb128 -640
+ 21825 7d18 31 .uleb128 0x31
+ 21826 7d19 380E0000 .long 0xe38
+ 21827 7d1d 03 .byte 0x3
+ 21828 7d1e 91 .byte 0x91
+ 21829 7d1f 907B .sleb128 -624
+ 21830 7d21 00 .byte 0x0
+ 21831 7d22 00 .byte 0x0
+ 21832 7d23 00 .byte 0x0
+ 21833 7d24 00 .byte 0x0
+ 21834 7d25 30 .uleb128 0x30
+ 21835 7d26 BA0D0000 .long 0xdba
+ 21836 7d2a 00000000 .quad .LBB2178
+ 21836 00000000
+ 21837 7d32 00000000 .quad .LBE2178
+ 21837 00000000
+ 21838 7d3a 03 .byte 0x3
+ 21839 7d3b 2006 .value 0x620
+ 21840 7d3d C27D0000 .long 0x7dc2
+ 21841 7d41 31 .uleb128 0x31
+ 21842 7d42 CC0D0000 .long 0xdcc
+ 21843 7d46 03 .byte 0x3
+ 21844 7d47 91 .byte 0x91
+ 21845 7d48 A07B .sleb128 -608
+ 21846 7d4a 32 .uleb128 0x32
+ 21847 7d4b 00000000 .quad .LBB2179
+ 21847 00000000
+ 21848 7d53 00000000 .quad .LBE2179
+ 21848 00000000
+ 21849 7d5b 33 .uleb128 0x33
+ 21850 7d5c D80D0000 .long 0xdd8
+ 21851 7d60 09 .byte 0x9
+ 21852 7d61 03 .byte 0x3
+ 21853 7d62 00000000 .quad mask.8002
+ 21853 00000000
+ 21854 7d6a 34 .uleb128 0x34
+ 21855 7d6b FB0D0000 .long 0xdfb
+ 21856 7d6f 00000000 .quad .LBB2180
+ 21856 00000000
+ 21857 7d77 00000000 .quad .LBE2180
+ 21857 00000000
+ 21858 7d7f 03 .byte 0x3
+ 21859 7d80 FE04 .value 0x4fe
+ 21860 7d82 31 .uleb128 0x31
+ 21861 7d83 190E0000 .long 0xe19
+ 21862 7d87 03 .byte 0x3
+ 21863 7d88 91 .byte 0x91
+ 21864 7d89 B07B .sleb128 -592
+ 21865 7d8b 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 558
+
+
+ 21866 7d8c 0D0E0000 .long 0xe0d
+ 21867 7d90 03 .byte 0x3
+ 21868 7d91 91 .byte 0x91
+ 21869 7d92 C07B .sleb128 -576
+ 21870 7d94 34 .uleb128 0x34
+ 21871 7d95 260E0000 .long 0xe26
+ 21872 7d99 00000000 .quad .LBB2182
+ 21872 00000000
+ 21873 7da1 00000000 .quad .LBE2182
+ 21873 00000000
+ 21874 7da9 03 .byte 0x3
+ 21875 7daa 7501 .value 0x175
+ 21876 7dac 31 .uleb128 0x31
+ 21877 7dad 440E0000 .long 0xe44
+ 21878 7db1 03 .byte 0x3
+ 21879 7db2 91 .byte 0x91
+ 21880 7db3 D07B .sleb128 -560
+ 21881 7db5 31 .uleb128 0x31
+ 21882 7db6 380E0000 .long 0xe38
+ 21883 7dba 03 .byte 0x3
+ 21884 7dbb 91 .byte 0x91
+ 21885 7dbc E07B .sleb128 -544
+ 21886 7dbe 00 .byte 0x0
+ 21887 7dbf 00 .byte 0x0
+ 21888 7dc0 00 .byte 0x0
+ 21889 7dc1 00 .byte 0x0
+ 21890 7dc2 34 .uleb128 0x34
+ 21891 7dc3 BA0D0000 .long 0xdba
+ 21892 7dc7 00000000 .quad .LBB2184
+ 21892 00000000
+ 21893 7dcf 00000000 .quad .LBE2184
+ 21893 00000000
+ 21894 7dd7 03 .byte 0x3
+ 21895 7dd8 2106 .value 0x621
+ 21896 7dda 31 .uleb128 0x31
+ 21897 7ddb CC0D0000 .long 0xdcc
+ 21898 7ddf 03 .byte 0x3
+ 21899 7de0 91 .byte 0x91
+ 21900 7de1 F07B .sleb128 -528
+ 21901 7de3 32 .uleb128 0x32
+ 21902 7de4 00000000 .quad .LBB2185
+ 21902 00000000
+ 21903 7dec 00000000 .quad .LBE2185
+ 21903 00000000
+ 21904 7df4 33 .uleb128 0x33
+ 21905 7df5 D80D0000 .long 0xdd8
+ 21906 7df9 09 .byte 0x9
+ 21907 7dfa 03 .byte 0x3
+ 21908 7dfb 00000000 .quad mask.8002
+ 21908 00000000
+ 21909 7e03 34 .uleb128 0x34
+ 21910 7e04 FB0D0000 .long 0xdfb
+ 21911 7e08 00000000 .quad .LBB2186
+ 21911 00000000
+ 21912 7e10 00000000 .quad .LBE2186
+ 21912 00000000
+ 21913 7e18 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 559
+
+
+ 21914 7e19 FE04 .value 0x4fe
+ 21915 7e1b 31 .uleb128 0x31
+ 21916 7e1c 190E0000 .long 0xe19
+ 21917 7e20 03 .byte 0x3
+ 21918 7e21 91 .byte 0x91
+ 21919 7e22 807C .sleb128 -512
+ 21920 7e24 31 .uleb128 0x31
+ 21921 7e25 0D0E0000 .long 0xe0d
+ 21922 7e29 03 .byte 0x3
+ 21923 7e2a 91 .byte 0x91
+ 21924 7e2b 907C .sleb128 -496
+ 21925 7e2d 34 .uleb128 0x34
+ 21926 7e2e 260E0000 .long 0xe26
+ 21927 7e32 00000000 .quad .LBB2188
+ 21927 00000000
+ 21928 7e3a 00000000 .quad .LBE2188
+ 21928 00000000
+ 21929 7e42 03 .byte 0x3
+ 21930 7e43 7501 .value 0x175
+ 21931 7e45 31 .uleb128 0x31
+ 21932 7e46 440E0000 .long 0xe44
+ 21933 7e4a 03 .byte 0x3
+ 21934 7e4b 91 .byte 0x91
+ 21935 7e4c A07C .sleb128 -480
+ 21936 7e4e 31 .uleb128 0x31
+ 21937 7e4f 380E0000 .long 0xe38
+ 21938 7e53 03 .byte 0x3
+ 21939 7e54 91 .byte 0x91
+ 21940 7e55 B07C .sleb128 -464
+ 21941 7e57 00 .byte 0x0
+ 21942 7e58 00 .byte 0x0
+ 21943 7e59 00 .byte 0x0
+ 21944 7e5a 00 .byte 0x0
+ 21945 7e5b 00 .byte 0x0
+ 21946 7e5c 00 .byte 0x0
+ 21947 7e5d 30 .uleb128 0x30
+ 21948 7e5e F7580000 .long 0x58f7
+ 21949 7e62 00000000 .quad .LBB2190
+ 21949 00000000
+ 21950 7e6a 00000000 .quad .LBE2190
+ 21950 00000000
+ 21951 7e72 03 .byte 0x3
+ 21952 7e73 9107 .value 0x791
+ 21953 7e75 8C7E0000 .long 0x7e8c
+ 21954 7e79 31 .uleb128 0x31
+ 21955 7e7a 12590000 .long 0x5912
+ 21956 7e7e 03 .byte 0x3
+ 21957 7e7f 91 .byte 0x91
+ 21958 7e80 C07C .sleb128 -448
+ 21959 7e82 31 .uleb128 0x31
+ 21960 7e83 08590000 .long 0x5908
+ 21961 7e87 03 .byte 0x3
+ 21962 7e88 91 .byte 0x91
+ 21963 7e89 D07C .sleb128 -432
+ 21964 7e8b 00 .byte 0x0
+ 21965 7e8c 30 .uleb128 0x30
+ 21966 7e8d E30C0000 .long 0xce3
+
GAS LISTING /tmp/ccPaCTqg.s page 560
+
+
+ 21967 7e91 00000000 .quad .LBB2192
+ 21967 00000000
+ 21968 7e99 00000000 .quad .LBE2192
+ 21968 00000000
+ 21969 7ea1 03 .byte 0x3
+ 21970 7ea2 9207 .value 0x792
+ 21971 7ea4 527F0000 .long 0x7f52
+ 21972 7ea8 31 .uleb128 0x31
+ 21973 7ea9 010D0000 .long 0xd01
+ 21974 7ead 03 .byte 0x3
+ 21975 7eae 91 .byte 0x91
+ 21976 7eaf EC7C .sleb128 -404
+ 21977 7eb1 31 .uleb128 0x31
+ 21978 7eb2 F50C0000 .long 0xcf5
+ 21979 7eb6 03 .byte 0x3
+ 21980 7eb7 91 .byte 0x91
+ 21981 7eb8 F07C .sleb128 -400
+ 21982 7eba 32 .uleb128 0x32
+ 21983 7ebb 00000000 .quad .LBB2193
+ 21983 00000000
+ 21984 7ec3 00000000 .quad .LBE2193
+ 21984 00000000
+ 21985 7ecb 33 .uleb128 0x33
+ 21986 7ecc 0D0D0000 .long 0xd0d
+ 21987 7ed0 03 .byte 0x3
+ 21988 7ed1 76 .byte 0x76
+ 21989 7ed2 A057 .sleb128 -5216
+ 21990 7ed4 30 .uleb128 0x30
+ 21991 7ed5 1A0D0000 .long 0xd1a
+ 21992 7ed9 00000000 .quad .LBB2194
+ 21992 00000000
+ 21993 7ee1 00000000 .quad .LBE2194
+ 21993 00000000
+ 21994 7ee9 03 .byte 0x3
+ 21995 7eea 8A06 .value 0x68a
+ 21996 7eec 037F0000 .long 0x7f03
+ 21997 7ef0 31 .uleb128 0x31
+ 21998 7ef1 380D0000 .long 0xd38
+ 21999 7ef5 03 .byte 0x3
+ 22000 7ef6 91 .byte 0x91
+ 22001 7ef7 8C7D .sleb128 -372
+ 22002 7ef9 31 .uleb128 0x31
+ 22003 7efa 2C0D0000 .long 0xd2c
+ 22004 7efe 03 .byte 0x3
+ 22005 7eff 91 .byte 0x91
+ 22006 7f00 907D .sleb128 -368
+ 22007 7f02 00 .byte 0x0
+ 22008 7f03 34 .uleb128 0x34
+ 22009 7f04 450D0000 .long 0xd45
+ 22010 7f08 00000000 .quad .LBB2196
+ 22010 00000000
+ 22011 7f10 00000000 .quad .LBE2196
+ 22011 00000000
+ 22012 7f18 03 .byte 0x3
+ 22013 7f19 8B06 .value 0x68b
+ 22014 7f1b 31 .uleb128 0x31
+ 22015 7f1c 570D0000 .long 0xd57
+
GAS LISTING /tmp/ccPaCTqg.s page 561
+
+
+ 22016 7f20 03 .byte 0x3
+ 22017 7f21 91 .byte 0x91
+ 22018 7f22 A07D .sleb128 -352
+ 22019 7f24 34 .uleb128 0x34
+ 22020 7f25 640D0000 .long 0xd64
+ 22021 7f29 00000000 .quad .LBB2198
+ 22021 00000000
+ 22022 7f31 00000000 .quad .LBE2198
+ 22022 00000000
+ 22023 7f39 03 .byte 0x3
+ 22024 7f3a 4905 .value 0x549
+ 22025 7f3c 31 .uleb128 0x31
+ 22026 7f3d 820D0000 .long 0xd82
+ 22027 7f41 03 .byte 0x3
+ 22028 7f42 91 .byte 0x91
+ 22029 7f43 BC7D .sleb128 -324
+ 22030 7f45 31 .uleb128 0x31
+ 22031 7f46 760D0000 .long 0xd76
+ 22032 7f4a 03 .byte 0x3
+ 22033 7f4b 91 .byte 0x91
+ 22034 7f4c C07D .sleb128 -320
+ 22035 7f4e 00 .byte 0x0
+ 22036 7f4f 00 .byte 0x0
+ 22037 7f50 00 .byte 0x0
+ 22038 7f51 00 .byte 0x0
+ 22039 7f52 30 .uleb128 0x30
+ 22040 7f53 8F0D0000 .long 0xd8f
+ 22041 7f57 00000000 .quad .LBB2200
+ 22041 00000000
+ 22042 7f5f 00000000 .quad .LBE2200
+ 22042 00000000
+ 22043 7f67 03 .byte 0x3
+ 22044 7f68 9207 .value 0x792
+ 22045 7f6a 65810000 .long 0x8165
+ 22046 7f6e 31 .uleb128 0x31
+ 22047 7f6f A10D0000 .long 0xda1
+ 22048 7f73 03 .byte 0x3
+ 22049 7f74 91 .byte 0x91
+ 22050 7f75 D07D .sleb128 -304
+ 22051 7f77 32 .uleb128 0x32
+ 22052 7f78 00000000 .quad .LBB2201
+ 22052 00000000
+ 22053 7f80 00000000 .quad .LBE2201
+ 22053 00000000
+ 22054 7f88 33 .uleb128 0x33
+ 22055 7f89 AD0D0000 .long 0xdad
+ 22056 7f8d 03 .byte 0x3
+ 22057 7f8e 76 .byte 0x76
+ 22058 7f8f B057 .sleb128 -5200
+ 22059 7f91 30 .uleb128 0x30
+ 22060 7f92 BA0D0000 .long 0xdba
+ 22061 7f96 00000000 .quad .LBB2202
+ 22061 00000000
+ 22062 7f9e 00000000 .quad .LBE2202
+ 22062 00000000
+ 22063 7fa6 03 .byte 0x3
+ 22064 7fa7 1F06 .value 0x61f
+
GAS LISTING /tmp/ccPaCTqg.s page 562
+
+
+ 22065 7fa9 2E800000 .long 0x802e
+ 22066 7fad 31 .uleb128 0x31
+ 22067 7fae CC0D0000 .long 0xdcc
+ 22068 7fb2 03 .byte 0x3
+ 22069 7fb3 91 .byte 0x91
+ 22070 7fb4 E07D .sleb128 -288
+ 22071 7fb6 32 .uleb128 0x32
+ 22072 7fb7 00000000 .quad .LBB2203
+ 22072 00000000
+ 22073 7fbf 00000000 .quad .LBE2203
+ 22073 00000000
+ 22074 7fc7 33 .uleb128 0x33
+ 22075 7fc8 D80D0000 .long 0xdd8
+ 22076 7fcc 09 .byte 0x9
+ 22077 7fcd 03 .byte 0x3
+ 22078 7fce 00000000 .quad mask.8002
+ 22078 00000000
+ 22079 7fd6 34 .uleb128 0x34
+ 22080 7fd7 FB0D0000 .long 0xdfb
+ 22081 7fdb 00000000 .quad .LBB2204
+ 22081 00000000
+ 22082 7fe3 00000000 .quad .LBE2204
+ 22082 00000000
+ 22083 7feb 03 .byte 0x3
+ 22084 7fec FE04 .value 0x4fe
+ 22085 7fee 31 .uleb128 0x31
+ 22086 7fef 190E0000 .long 0xe19
+ 22087 7ff3 03 .byte 0x3
+ 22088 7ff4 91 .byte 0x91
+ 22089 7ff5 F07D .sleb128 -272
+ 22090 7ff7 31 .uleb128 0x31
+ 22091 7ff8 0D0E0000 .long 0xe0d
+ 22092 7ffc 03 .byte 0x3
+ 22093 7ffd 91 .byte 0x91
+ 22094 7ffe 807E .sleb128 -256
+ 22095 8000 34 .uleb128 0x34
+ 22096 8001 260E0000 .long 0xe26
+ 22097 8005 00000000 .quad .LBB2206
+ 22097 00000000
+ 22098 800d 00000000 .quad .LBE2206
+ 22098 00000000
+ 22099 8015 03 .byte 0x3
+ 22100 8016 7501 .value 0x175
+ 22101 8018 31 .uleb128 0x31
+ 22102 8019 440E0000 .long 0xe44
+ 22103 801d 03 .byte 0x3
+ 22104 801e 91 .byte 0x91
+ 22105 801f 907E .sleb128 -240
+ 22106 8021 31 .uleb128 0x31
+ 22107 8022 380E0000 .long 0xe38
+ 22108 8026 03 .byte 0x3
+ 22109 8027 91 .byte 0x91
+ 22110 8028 A07E .sleb128 -224
+ 22111 802a 00 .byte 0x0
+ 22112 802b 00 .byte 0x0
+ 22113 802c 00 .byte 0x0
+ 22114 802d 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 563
+
+
+ 22115 802e 30 .uleb128 0x30
+ 22116 802f BA0D0000 .long 0xdba
+ 22117 8033 00000000 .quad .LBB2208
+ 22117 00000000
+ 22118 803b 00000000 .quad .LBE2208
+ 22118 00000000
+ 22119 8043 03 .byte 0x3
+ 22120 8044 2006 .value 0x620
+ 22121 8046 CB800000 .long 0x80cb
+ 22122 804a 31 .uleb128 0x31
+ 22123 804b CC0D0000 .long 0xdcc
+ 22124 804f 03 .byte 0x3
+ 22125 8050 91 .byte 0x91
+ 22126 8051 B07E .sleb128 -208
+ 22127 8053 32 .uleb128 0x32
+ 22128 8054 00000000 .quad .LBB2209
+ 22128 00000000
+ 22129 805c 00000000 .quad .LBE2209
+ 22129 00000000
+ 22130 8064 33 .uleb128 0x33
+ 22131 8065 D80D0000 .long 0xdd8
+ 22132 8069 09 .byte 0x9
+ 22133 806a 03 .byte 0x3
+ 22134 806b 00000000 .quad mask.8002
+ 22134 00000000
+ 22135 8073 34 .uleb128 0x34
+ 22136 8074 FB0D0000 .long 0xdfb
+ 22137 8078 00000000 .quad .LBB2210
+ 22137 00000000
+ 22138 8080 00000000 .quad .LBE2210
+ 22138 00000000
+ 22139 8088 03 .byte 0x3
+ 22140 8089 FE04 .value 0x4fe
+ 22141 808b 31 .uleb128 0x31
+ 22142 808c 190E0000 .long 0xe19
+ 22143 8090 03 .byte 0x3
+ 22144 8091 91 .byte 0x91
+ 22145 8092 C07E .sleb128 -192
+ 22146 8094 31 .uleb128 0x31
+ 22147 8095 0D0E0000 .long 0xe0d
+ 22148 8099 03 .byte 0x3
+ 22149 809a 91 .byte 0x91
+ 22150 809b D07E .sleb128 -176
+ 22151 809d 34 .uleb128 0x34
+ 22152 809e 260E0000 .long 0xe26
+ 22153 80a2 00000000 .quad .LBB2212
+ 22153 00000000
+ 22154 80aa 00000000 .quad .LBE2212
+ 22154 00000000
+ 22155 80b2 03 .byte 0x3
+ 22156 80b3 7501 .value 0x175
+ 22157 80b5 31 .uleb128 0x31
+ 22158 80b6 440E0000 .long 0xe44
+ 22159 80ba 03 .byte 0x3
+ 22160 80bb 91 .byte 0x91
+ 22161 80bc E07E .sleb128 -160
+ 22162 80be 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 564
+
+
+ 22163 80bf 380E0000 .long 0xe38
+ 22164 80c3 03 .byte 0x3
+ 22165 80c4 91 .byte 0x91
+ 22166 80c5 F07E .sleb128 -144
+ 22167 80c7 00 .byte 0x0
+ 22168 80c8 00 .byte 0x0
+ 22169 80c9 00 .byte 0x0
+ 22170 80ca 00 .byte 0x0
+ 22171 80cb 34 .uleb128 0x34
+ 22172 80cc BA0D0000 .long 0xdba
+ 22173 80d0 00000000 .quad .LBB2214
+ 22173 00000000
+ 22174 80d8 00000000 .quad .LBE2214
+ 22174 00000000
+ 22175 80e0 03 .byte 0x3
+ 22176 80e1 2106 .value 0x621
+ 22177 80e3 31 .uleb128 0x31
+ 22178 80e4 CC0D0000 .long 0xdcc
+ 22179 80e8 03 .byte 0x3
+ 22180 80e9 91 .byte 0x91
+ 22181 80ea 807F .sleb128 -128
+ 22182 80ec 32 .uleb128 0x32
+ 22183 80ed 00000000 .quad .LBB2215
+ 22183 00000000
+ 22184 80f5 00000000 .quad .LBE2215
+ 22184 00000000
+ 22185 80fd 33 .uleb128 0x33
+ 22186 80fe D80D0000 .long 0xdd8
+ 22187 8102 09 .byte 0x9
+ 22188 8103 03 .byte 0x3
+ 22189 8104 00000000 .quad mask.8002
+ 22189 00000000
+ 22190 810c 34 .uleb128 0x34
+ 22191 810d FB0D0000 .long 0xdfb
+ 22192 8111 00000000 .quad .LBB2216
+ 22192 00000000
+ 22193 8119 00000000 .quad .LBE2216
+ 22193 00000000
+ 22194 8121 03 .byte 0x3
+ 22195 8122 FE04 .value 0x4fe
+ 22196 8124 31 .uleb128 0x31
+ 22197 8125 190E0000 .long 0xe19
+ 22198 8129 03 .byte 0x3
+ 22199 812a 91 .byte 0x91
+ 22200 812b 907F .sleb128 -112
+ 22201 812d 31 .uleb128 0x31
+ 22202 812e 0D0E0000 .long 0xe0d
+ 22203 8132 03 .byte 0x3
+ 22204 8133 91 .byte 0x91
+ 22205 8134 A07F .sleb128 -96
+ 22206 8136 34 .uleb128 0x34
+ 22207 8137 260E0000 .long 0xe26
+ 22208 813b 00000000 .quad .LBB2218
+ 22208 00000000
+ 22209 8143 00000000 .quad .LBE2218
+ 22209 00000000
+ 22210 814b 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 565
+
+
+ 22211 814c 7501 .value 0x175
+ 22212 814e 31 .uleb128 0x31
+ 22213 814f 440E0000 .long 0xe44
+ 22214 8153 03 .byte 0x3
+ 22215 8154 91 .byte 0x91
+ 22216 8155 B07F .sleb128 -80
+ 22217 8157 31 .uleb128 0x31
+ 22218 8158 380E0000 .long 0xe38
+ 22219 815c 02 .byte 0x2
+ 22220 815d 91 .byte 0x91
+ 22221 815e 40 .sleb128 -64
+ 22222 815f 00 .byte 0x0
+ 22223 8160 00 .byte 0x0
+ 22224 8161 00 .byte 0x0
+ 22225 8162 00 .byte 0x0
+ 22226 8163 00 .byte 0x0
+ 22227 8164 00 .byte 0x0
+ 22228 8165 34 .uleb128 0x34
+ 22229 8166 F7580000 .long 0x58f7
+ 22230 816a 00000000 .quad .LBB2220
+ 22230 00000000
+ 22231 8172 00000000 .quad .LBE2220
+ 22231 00000000
+ 22232 817a 03 .byte 0x3
+ 22233 817b 9207 .value 0x792
+ 22234 817d 31 .uleb128 0x31
+ 22235 817e 12590000 .long 0x5912
+ 22236 8182 02 .byte 0x2
+ 22237 8183 91 .byte 0x91
+ 22238 8184 50 .sleb128 -48
+ 22239 8185 31 .uleb128 0x31
+ 22240 8186 08590000 .long 0x5908
+ 22241 818a 02 .byte 0x2
+ 22242 818b 91 .byte 0x91
+ 22243 818c 60 .sleb128 -32
+ 22244 818d 00 .byte 0x0
+ 22245 818e 00 .byte 0x0
+ 22246 818f 27 .uleb128 0x27
+ 22247 8190 00000000 .long .LASF352
+ 22248 8194 03 .byte 0x3
+ 22249 8195 4B04 .value 0x44b
+ 22250 8197 01 .byte 0x1
+ 22251 8198 C9010000 .long 0x1c9
+ 22252 819c 03 .byte 0x3
+ 22253 819d AE810000 .long 0x81ae
+ 22254 81a1 28 .uleb128 0x28
+ 22255 81a2 00000000 .long .LASF63
+ 22256 81a6 03 .byte 0x3
+ 22257 81a7 4B04 .value 0x44b
+ 22258 81a9 C9010000 .long 0x1c9
+ 22259 81ad 00 .byte 0x0
+ 22260 81ae 2D .uleb128 0x2d
+ 22261 81af 00000000 .long .LASF353
+ 22262 81b3 03 .byte 0x3
+ 22263 81b4 9E07 .value 0x79e
+ 22264 81b6 01 .byte 0x1
+ 22265 81b7 00000000 .quad .LFB659
+
GAS LISTING /tmp/ccPaCTqg.s page 566
+
+
+ 22265 00000000
+ 22266 81bf 00000000 .quad .LFE659
+ 22266 00000000
+ 22267 81c7 00000000 .long .LLST9
+ 22268 81cb 39820000 .long 0x8239
+ 22269 81cf 2E .uleb128 0x2e
+ 22270 81d0 7200 .string "r"
+ 22271 81d2 03 .byte 0x3
+ 22272 81d3 9E07 .value 0x79e
+ 22273 81d5 712B0000 .long 0x2b71
+ 22274 81d9 03 .byte 0x3
+ 22275 81da 91 .byte 0x91
+ 22276 81db B87F .sleb128 -72
+ 22277 81dd 2E .uleb128 0x2e
+ 22278 81de 647200 .string "dr"
+ 22279 81e1 03 .byte 0x3
+ 22280 81e2 9E07 .value 0x79e
+ 22281 81e4 39820000 .long 0x8239
+ 22282 81e8 03 .byte 0x3
+ 22283 81e9 91 .byte 0x91
+ 22284 81ea B07F .sleb128 -80
+ 22285 81ec 2E .uleb128 0x2e
+ 22286 81ed 4E7200 .string "Nr"
+ 22287 81f0 03 .byte 0x3
+ 22288 81f1 9E07 .value 0x79e
+ 22289 81f3 78000000 .long 0x78
+ 22290 81f7 03 .byte 0x3
+ 22291 81f8 91 .byte 0x91
+ 22292 81f9 AC7F .sleb128 -84
+ 22293 81fb 35 .uleb128 0x35
+ 22294 81fc 697800 .string "ix"
+ 22295 81ff 03 .byte 0x3
+ 22296 8200 A007 .value 0x7a0
+ 22297 8202 78000000 .long 0x78
+ 22298 8206 02 .byte 0x2
+ 22299 8207 91 .byte 0x91
+ 22300 8208 48 .sleb128 -56
+ 22301 8209 35 .uleb128 0x35
+ 22302 820a 6A7800 .string "jx"
+ 22303 820d 03 .byte 0x3
+ 22304 820e A007 .value 0x7a0
+ 22305 8210 78000000 .long 0x78
+ 22306 8214 02 .byte 0x2
+ 22307 8215 91 .byte 0x91
+ 22308 8216 4C .sleb128 -52
+ 22309 8217 34 .uleb128 0x34
+ 22310 8218 8F810000 .long 0x818f
+ 22311 821c 00000000 .quad .LBB2224
+ 22311 00000000
+ 22312 8224 00000000 .quad .LBE2224
+ 22312 00000000
+ 22313 822c 03 .byte 0x3
+ 22314 822d A607 .value 0x7a6
+ 22315 822f 31 .uleb128 0x31
+ 22316 8230 A1810000 .long 0x81a1
+ 22317 8234 02 .byte 0x2
+ 22318 8235 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 567
+
+
+ 22319 8236 50 .sleb128 -48
+ 22320 8237 00 .byte 0x0
+ 22321 8238 00 .byte 0x0
+ 22322 8239 07 .uleb128 0x7
+ 22323 823a 08 .byte 0x8
+ 22324 823b F60D0000 .long 0xdf6
+ 22325 823f 2D .uleb128 0x2d
+ 22326 8240 00000000 .long .LASF354
+ 22327 8244 03 .byte 0x3
+ 22328 8245 AC07 .value 0x7ac
+ 22329 8247 01 .byte 0x1
+ 22330 8248 00000000 .quad .LFB660
+ 22330 00000000
+ 22331 8250 00000000 .quad .LFE660
+ 22331 00000000
+ 22332 8258 00000000 .long .LLST10
+ 22333 825c 7C820000 .long 0x827c
+ 22334 8260 2E .uleb128 0x2e
+ 22335 8261 7700 .string "w"
+ 22336 8263 03 .byte 0x3
+ 22337 8264 AC07 .value 0x7ac
+ 22338 8266 712B0000 .long 0x2b71
+ 22339 826a 02 .byte 0x2
+ 22340 826b 91 .byte 0x91
+ 22341 826c 68 .sleb128 -24
+ 22342 826d 2E .uleb128 0x2e
+ 22343 826e 6B7700 .string "kw"
+ 22344 8271 03 .byte 0x3
+ 22345 8272 AC07 .value 0x7ac
+ 22346 8274 39820000 .long 0x8239
+ 22347 8278 02 .byte 0x2
+ 22348 8279 91 .byte 0x91
+ 22349 827a 60 .sleb128 -32
+ 22350 827b 00 .byte 0x0
+ 22351 827c 2D .uleb128 0x2d
+ 22352 827d 00000000 .long .LASF355
+ 22353 8281 03 .byte 0x3
+ 22354 8282 B307 .value 0x7b3
+ 22355 8284 01 .byte 0x1
+ 22356 8285 00000000 .quad .LFB661
+ 22356 00000000
+ 22357 828d 00000000 .quad .LFE661
+ 22357 00000000
+ 22358 8295 00000000 .long .LLST11
+ 22359 8299 B9820000 .long 0x82b9
+ 22360 829d 2E .uleb128 0x2e
+ 22361 829e 7700 .string "w"
+ 22362 82a0 03 .byte 0x3
+ 22363 82a1 B307 .value 0x7b3
+ 22364 82a3 712B0000 .long 0x2b71
+ 22365 82a7 02 .byte 0x2
+ 22366 82a8 91 .byte 0x91
+ 22367 82a9 68 .sleb128 -24
+ 22368 82aa 2E .uleb128 0x2e
+ 22369 82ab 6B7700 .string "kw"
+ 22370 82ae 03 .byte 0x3
+ 22371 82af B307 .value 0x7b3
+
GAS LISTING /tmp/ccPaCTqg.s page 568
+
+
+ 22372 82b1 39820000 .long 0x8239
+ 22373 82b5 02 .byte 0x2
+ 22374 82b6 91 .byte 0x91
+ 22375 82b7 60 .sleb128 -32
+ 22376 82b8 00 .byte 0x0
+ 22377 82b9 2D .uleb128 0x2d
+ 22378 82ba 00000000 .long .LASF356
+ 22379 82be 03 .byte 0x3
+ 22380 82bf BA07 .value 0x7ba
+ 22381 82c1 01 .byte 0x1
+ 22382 82c2 00000000 .quad .LFB662
+ 22382 00000000
+ 22383 82ca 00000000 .quad .LFE662
+ 22383 00000000
+ 22384 82d2 00000000 .long .LLST12
+ 22385 82d6 F6820000 .long 0x82f6
+ 22386 82da 2E .uleb128 0x2e
+ 22387 82db 7700 .string "w"
+ 22388 82dd 03 .byte 0x3
+ 22389 82de BA07 .value 0x7ba
+ 22390 82e0 712B0000 .long 0x2b71
+ 22391 82e4 02 .byte 0x2
+ 22392 82e5 91 .byte 0x91
+ 22393 82e6 68 .sleb128 -24
+ 22394 82e7 2E .uleb128 0x2e
+ 22395 82e8 6B7700 .string "kw"
+ 22396 82eb 03 .byte 0x3
+ 22397 82ec BA07 .value 0x7ba
+ 22398 82ee 39820000 .long 0x8239
+ 22399 82f2 02 .byte 0x2
+ 22400 82f3 91 .byte 0x91
+ 22401 82f4 60 .sleb128 -32
+ 22402 82f5 00 .byte 0x0
+ 22403 82f6 27 .uleb128 0x27
+ 22404 82f7 00000000 .long .LASF357
+ 22405 82fb 03 .byte 0x3
+ 22406 82fc C807 .value 0x7c8
+ 22407 82fe 01 .byte 0x1
+ 22408 82ff C9010000 .long 0x1c9
+ 22409 8303 03 .byte 0x3
+ 22410 8304 4D830000 .long 0x834d
+ 22411 8308 28 .uleb128 0x28
+ 22412 8309 00000000 .long .LASF63
+ 22413 830d 03 .byte 0x3
+ 22414 830e C807 .value 0x7c8
+ 22415 8310 C9010000 .long 0x1c9
+ 22416 8314 28 .uleb128 0x28
+ 22417 8315 00000000 .long .LASF61
+ 22418 8319 03 .byte 0x3
+ 22419 831a C807 .value 0x7c8
+ 22420 831c F60D0000 .long 0xdf6
+ 22421 8320 36 .uleb128 0x36
+ 22422 8321 30830000 .long 0x8330
+ 22423 8325 29 .uleb128 0x29
+ 22424 8326 7600 .string "v"
+ 22425 8328 03 .byte 0x3
+ 22426 8329 CA07 .value 0x7ca
+
GAS LISTING /tmp/ccPaCTqg.s page 569
+
+
+ 22427 832b F6040000 .long 0x4f6
+ 22428 832f 00 .byte 0x0
+ 22429 8330 36 .uleb128 0x36
+ 22430 8331 40830000 .long 0x8340
+ 22431 8335 29 .uleb128 0x29
+ 22432 8336 7600 .string "v"
+ 22433 8338 03 .byte 0x3
+ 22434 8339 CC07 .value 0x7cc
+ 22435 833b F6040000 .long 0x4f6
+ 22436 833f 00 .byte 0x0
+ 22437 8340 37 .uleb128 0x37
+ 22438 8341 29 .uleb128 0x29
+ 22439 8342 7600 .string "v"
+ 22440 8344 03 .byte 0x3
+ 22441 8345 D007 .value 0x7d0
+ 22442 8347 F6040000 .long 0x4f6
+ 22443 834b 00 .byte 0x0
+ 22444 834c 00 .byte 0x0
+ 22445 834d 27 .uleb128 0x27
+ 22446 834e 00000000 .long .LASF358
+ 22447 8352 03 .byte 0x3
+ 22448 8353 2102 .value 0x221
+ 22449 8355 01 .byte 0x1
+ 22450 8356 C9010000 .long 0x1c9
+ 22451 835a 03 .byte 0x3
+ 22452 835b 78830000 .long 0x8378
+ 22453 835f 28 .uleb128 0x28
+ 22454 8360 00000000 .long .LASF63
+ 22455 8364 03 .byte 0x3
+ 22456 8365 2102 .value 0x221
+ 22457 8367 C9010000 .long 0x1c9
+ 22458 836b 28 .uleb128 0x28
+ 22459 836c 00000000 .long .LASF316
+ 22460 8370 03 .byte 0x3
+ 22461 8371 2102 .value 0x221
+ 22462 8373 C9010000 .long 0x1c9
+ 22463 8377 00 .byte 0x0
+ 22464 8378 27 .uleb128 0x27
+ 22465 8379 00000000 .long .LASF359
+ 22466 837d 03 .byte 0x3
+ 22467 837e DC07 .value 0x7dc
+ 22468 8380 01 .byte 0x1
+ 22469 8381 C9010000 .long 0x1c9
+ 22470 8385 03 .byte 0x3
+ 22471 8386 E7830000 .long 0x83e7
+ 22472 838a 28 .uleb128 0x28
+ 22473 838b 00000000 .long .LASF63
+ 22474 838f 03 .byte 0x3
+ 22475 8390 DC07 .value 0x7dc
+ 22476 8392 C9010000 .long 0x1c9
+ 22477 8396 28 .uleb128 0x28
+ 22478 8397 00000000 .long .LASF61
+ 22479 839b 03 .byte 0x3
+ 22480 839c DD07 .value 0x7dd
+ 22481 839e F60D0000 .long 0xdf6
+ 22482 83a2 2B .uleb128 0x2b
+ 22483 83a3 00000000 .long .LASF360
+
GAS LISTING /tmp/ccPaCTqg.s page 570
+
+
+ 22484 83a7 03 .byte 0x3
+ 22485 83a8 E007 .value 0x7e0
+ 22486 83aa C9010000 .long 0x1c9
+ 22487 83ae 2B .uleb128 0x2b
+ 22488 83af 00000000 .long .LASF361
+ 22489 83b3 03 .byte 0x3
+ 22490 83b4 E107 .value 0x7e1
+ 22491 83b6 C9010000 .long 0x1c9
+ 22492 83ba 36 .uleb128 0x36
+ 22493 83bb CA830000 .long 0x83ca
+ 22494 83bf 29 .uleb128 0x29
+ 22495 83c0 7600 .string "v"
+ 22496 83c2 03 .byte 0x3
+ 22497 83c3 E607 .value 0x7e6
+ 22498 83c5 F6040000 .long 0x4f6
+ 22499 83c9 00 .byte 0x0
+ 22500 83ca 36 .uleb128 0x36
+ 22501 83cb DA830000 .long 0x83da
+ 22502 83cf 29 .uleb128 0x29
+ 22503 83d0 7600 .string "v"
+ 22504 83d2 03 .byte 0x3
+ 22505 83d3 FC07 .value 0x7fc
+ 22506 83d5 F6040000 .long 0x4f6
+ 22507 83d9 00 .byte 0x0
+ 22508 83da 37 .uleb128 0x37
+ 22509 83db 29 .uleb128 0x29
+ 22510 83dc 7600 .string "v"
+ 22511 83de 03 .byte 0x3
+ 22512 83df FD07 .value 0x7fd
+ 22513 83e1 F6040000 .long 0x4f6
+ 22514 83e5 00 .byte 0x0
+ 22515 83e6 00 .byte 0x0
+ 22516 83e7 27 .uleb128 0x27
+ 22517 83e8 00000000 .long .LASF362
+ 22518 83ec 03 .byte 0x3
+ 22519 83ed 0808 .value 0x808
+ 22520 83ef 01 .byte 0x1
+ 22521 83f0 C9010000 .long 0x1c9
+ 22522 83f4 03 .byte 0x3
+ 22523 83f5 3E840000 .long 0x843e
+ 22524 83f9 28 .uleb128 0x28
+ 22525 83fa 00000000 .long .LASF63
+ 22526 83fe 03 .byte 0x3
+ 22527 83ff 0808 .value 0x808
+ 22528 8401 C9010000 .long 0x1c9
+ 22529 8405 28 .uleb128 0x28
+ 22530 8406 00000000 .long .LASF61
+ 22531 840a 03 .byte 0x3
+ 22532 840b 0808 .value 0x808
+ 22533 840d C9010000 .long 0x1c9
+ 22534 8411 36 .uleb128 0x36
+ 22535 8412 21840000 .long 0x8421
+ 22536 8416 29 .uleb128 0x29
+ 22537 8417 7600 .string "v"
+ 22538 8419 03 .byte 0x3
+ 22539 841a 0A08 .value 0x80a
+ 22540 841c F6040000 .long 0x4f6
+
GAS LISTING /tmp/ccPaCTqg.s page 571
+
+
+ 22541 8420 00 .byte 0x0
+ 22542 8421 36 .uleb128 0x36
+ 22543 8422 31840000 .long 0x8431
+ 22544 8426 29 .uleb128 0x29
+ 22545 8427 7600 .string "v"
+ 22546 8429 03 .byte 0x3
+ 22547 842a 1908 .value 0x819
+ 22548 842c F6040000 .long 0x4f6
+ 22549 8430 00 .byte 0x0
+ 22550 8431 37 .uleb128 0x37
+ 22551 8432 29 .uleb128 0x29
+ 22552 8433 7600 .string "v"
+ 22553 8435 03 .byte 0x3
+ 22554 8436 1A08 .value 0x81a
+ 22555 8438 F6040000 .long 0x4f6
+ 22556 843c 00 .byte 0x0
+ 22557 843d 00 .byte 0x0
+ 22558 843e 1F .uleb128 0x1f
+ 22559 843f 00000000 .long .LASF363
+ 22560 8443 03 .byte 0x3
+ 22561 8444 2C08 .value 0x82c
+ 22562 8446 01 .byte 0x1
+ 22563 8447 C9010000 .long 0x1c9
+ 22564 844b 00000000 .quad .LFB666
+ 22564 00000000
+ 22565 8453 00000000 .quad .LFE666
+ 22565 00000000
+ 22566 845b 00000000 .long .LLST13
+ 22567 845f B3860000 .long 0x86b3
+ 22568 8463 20 .uleb128 0x20
+ 22569 8464 00000000 .long .LASF63
+ 22570 8468 03 .byte 0x3
+ 22571 8469 2C08 .value 0x82c
+ 22572 846b C9010000 .long 0x1c9
+ 22573 846f 03 .byte 0x3
+ 22574 8470 91 .byte 0x91
+ 22575 8471 E07C .sleb128 -416
+ 22576 8473 2E .uleb128 0x2e
+ 22577 8474 6B657900 .string "key"
+ 22578 8478 03 .byte 0x3
+ 22579 8479 2C08 .value 0x82c
+ 22580 847b 39820000 .long 0x8239
+ 22581 847f 03 .byte 0x3
+ 22582 8480 91 .byte 0x91
+ 22583 8481 D87C .sleb128 -424
+ 22584 8483 2E .uleb128 0x2e
+ 22585 8484 4E7200 .string "Nr"
+ 22586 8487 03 .byte 0x3
+ 22587 8488 2D08 .value 0x82d
+ 22588 848a 78000000 .long 0x78
+ 22589 848e 03 .byte 0x3
+ 22590 848f 91 .byte 0x91
+ 22591 8490 D47C .sleb128 -428
+ 22592 8492 35 .uleb128 0x35
+ 22593 8493 697800 .string "ix"
+ 22594 8496 03 .byte 0x3
+ 22595 8497 2F08 .value 0x82f
+
GAS LISTING /tmp/ccPaCTqg.s page 572
+
+
+ 22596 8499 78000000 .long 0x78
+ 22597 849d 03 .byte 0x3
+ 22598 849e 91 .byte 0x91
+ 22599 849f 8C7E .sleb128 -244
+ 22600 84a1 30 .uleb128 0x30
+ 22601 84a2 F6820000 .long 0x82f6
+ 22602 84a6 00000000 .quad .LBB2245
+ 22602 00000000
+ 22603 84ae 00000000 .quad .LBE2245
+ 22603 00000000
+ 22604 84b6 03 .byte 0x3
+ 22605 84b7 3108 .value 0x831
+ 22606 84b9 83850000 .long 0x8583
+ 22607 84bd 31 .uleb128 0x31
+ 22608 84be 14830000 .long 0x8314
+ 22609 84c2 03 .byte 0x3
+ 22610 84c3 91 .byte 0x91
+ 22611 84c4 907E .sleb128 -240
+ 22612 84c6 31 .uleb128 0x31
+ 22613 84c7 08830000 .long 0x8308
+ 22614 84cb 03 .byte 0x3
+ 22615 84cc 91 .byte 0x91
+ 22616 84cd A07E .sleb128 -224
+ 22617 84cf 38 .uleb128 0x38
+ 22618 84d0 00000000 .quad .LBB2247
+ 22618 00000000
+ 22619 84d8 00000000 .quad .LBE2247
+ 22619 00000000
+ 22620 84e0 EE840000 .long 0x84ee
+ 22621 84e4 33 .uleb128 0x33
+ 22622 84e5 25830000 .long 0x8325
+ 22623 84e9 03 .byte 0x3
+ 22624 84ea 91 .byte 0x91
+ 22625 84eb 907D .sleb128 -368
+ 22626 84ed 00 .byte 0x0
+ 22627 84ee 38 .uleb128 0x38
+ 22628 84ef 00000000 .quad .LBB2248
+ 22628 00000000
+ 22629 84f7 00000000 .quad .LBE2248
+ 22629 00000000
+ 22630 84ff 0D850000 .long 0x850d
+ 22631 8503 33 .uleb128 0x33
+ 22632 8504 35830000 .long 0x8335
+ 22633 8508 03 .byte 0x3
+ 22634 8509 91 .byte 0x91
+ 22635 850a 807D .sleb128 -384
+ 22636 850c 00 .byte 0x0
+ 22637 850d 30 .uleb128 0x30
+ 22638 850e 4D830000 .long 0x834d
+ 22639 8512 00000000 .quad .LBB2249
+ 22639 00000000
+ 22640 851a 00000000 .quad .LBE2249
+ 22640 00000000
+ 22641 8522 03 .byte 0x3
+ 22642 8523 CE07 .value 0x7ce
+ 22643 8525 67850000 .long 0x8567
+ 22644 8529 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 573
+
+
+ 22645 852a 6B830000 .long 0x836b
+ 22646 852e 03 .byte 0x3
+ 22647 852f 91 .byte 0x91
+ 22648 8530 B07E .sleb128 -208
+ 22649 8532 31 .uleb128 0x31
+ 22650 8533 5F830000 .long 0x835f
+ 22651 8537 03 .byte 0x3
+ 22652 8538 91 .byte 0x91
+ 22653 8539 C07E .sleb128 -192
+ 22654 853b 34 .uleb128 0x34
+ 22655 853c F7580000 .long 0x58f7
+ 22656 8540 00000000 .quad .LBB2251
+ 22656 00000000
+ 22657 8548 00000000 .quad .LBE2251
+ 22657 00000000
+ 22658 8550 03 .byte 0x3
+ 22659 8551 2302 .value 0x223
+ 22660 8553 31 .uleb128 0x31
+ 22661 8554 12590000 .long 0x5912
+ 22662 8558 03 .byte 0x3
+ 22663 8559 91 .byte 0x91
+ 22664 855a D07E .sleb128 -176
+ 22665 855c 31 .uleb128 0x31
+ 22666 855d 08590000 .long 0x5908
+ 22667 8561 03 .byte 0x3
+ 22668 8562 91 .byte 0x91
+ 22669 8563 E07E .sleb128 -160
+ 22670 8565 00 .byte 0x0
+ 22671 8566 00 .byte 0x0
+ 22672 8567 32 .uleb128 0x32
+ 22673 8568 00000000 .quad .LBB2253
+ 22673 00000000
+ 22674 8570 00000000 .quad .LBE2253
+ 22674 00000000
+ 22675 8578 33 .uleb128 0x33
+ 22676 8579 41830000 .long 0x8341
+ 22677 857d 03 .byte 0x3
+ 22678 857e 91 .byte 0x91
+ 22679 857f F07C .sleb128 -400
+ 22680 8581 00 .byte 0x0
+ 22681 8582 00 .byte 0x0
+ 22682 8583 30 .uleb128 0x30
+ 22683 8584 78830000 .long 0x8378
+ 22684 8588 00000000 .quad .LBB2254
+ 22684 00000000
+ 22685 8590 00000000 .quad .LBE2254
+ 22685 00000000
+ 22686 8598 03 .byte 0x3
+ 22687 8599 3408 .value 0x834
+ 22688 859b 2F860000 .long 0x862f
+ 22689 859f 31 .uleb128 0x31
+ 22690 85a0 96830000 .long 0x8396
+ 22691 85a4 03 .byte 0x3
+ 22692 85a5 91 .byte 0x91
+ 22693 85a6 F07E .sleb128 -144
+ 22694 85a8 31 .uleb128 0x31
+ 22695 85a9 8A830000 .long 0x838a
+
GAS LISTING /tmp/ccPaCTqg.s page 574
+
+
+ 22696 85ad 03 .byte 0x3
+ 22697 85ae 91 .byte 0x91
+ 22698 85af 807F .sleb128 -128
+ 22699 85b1 32 .uleb128 0x32
+ 22700 85b2 00000000 .quad .LBB2255
+ 22700 00000000
+ 22701 85ba 00000000 .quad .LBE2255
+ 22701 00000000
+ 22702 85c2 33 .uleb128 0x33
+ 22703 85c3 A2830000 .long 0x83a2
+ 22704 85c7 03 .byte 0x3
+ 22705 85c8 91 .byte 0x91
+ 22706 85c9 A07F .sleb128 -96
+ 22707 85cb 33 .uleb128 0x33
+ 22708 85cc AE830000 .long 0x83ae
+ 22709 85d0 03 .byte 0x3
+ 22710 85d1 91 .byte 0x91
+ 22711 85d2 907F .sleb128 -112
+ 22712 85d4 38 .uleb128 0x38
+ 22713 85d5 00000000 .quad .LBB2256
+ 22713 00000000
+ 22714 85dd 00000000 .quad .LBE2256
+ 22714 00000000
+ 22715 85e5 F3850000 .long 0x85f3
+ 22716 85e9 33 .uleb128 0x33
+ 22717 85ea BF830000 .long 0x83bf
+ 22718 85ee 03 .byte 0x3
+ 22719 85ef 91 .byte 0x91
+ 22720 85f0 C07D .sleb128 -320
+ 22721 85f2 00 .byte 0x0
+ 22722 85f3 38 .uleb128 0x38
+ 22723 85f4 00000000 .quad .LBB2257
+ 22723 00000000
+ 22724 85fc 00000000 .quad .LBE2257
+ 22724 00000000
+ 22725 8604 12860000 .long 0x8612
+ 22726 8608 33 .uleb128 0x33
+ 22727 8609 CF830000 .long 0x83cf
+ 22728 860d 03 .byte 0x3
+ 22729 860e 91 .byte 0x91
+ 22730 860f B07D .sleb128 -336
+ 22731 8611 00 .byte 0x0
+ 22732 8612 32 .uleb128 0x32
+ 22733 8613 00000000 .quad .LBB2258
+ 22733 00000000
+ 22734 861b 00000000 .quad .LBE2258
+ 22734 00000000
+ 22735 8623 33 .uleb128 0x33
+ 22736 8624 DB830000 .long 0x83db
+ 22737 8628 03 .byte 0x3
+ 22738 8629 91 .byte 0x91
+ 22739 862a A07D .sleb128 -352
+ 22740 862c 00 .byte 0x0
+ 22741 862d 00 .byte 0x0
+ 22742 862e 00 .byte 0x0
+ 22743 862f 34 .uleb128 0x34
+ 22744 8630 E7830000 .long 0x83e7
+
GAS LISTING /tmp/ccPaCTqg.s page 575
+
+
+ 22745 8634 00000000 .quad .LBB2259
+ 22745 00000000
+ 22746 863c 00000000 .quad .LBE2259
+ 22746 00000000
+ 22747 8644 03 .byte 0x3
+ 22748 8645 3608 .value 0x836
+ 22749 8647 31 .uleb128 0x31
+ 22750 8648 05840000 .long 0x8405
+ 22751 864c 03 .byte 0x3
+ 22752 864d 91 .byte 0x91
+ 22753 864e B07F .sleb128 -80
+ 22754 8650 31 .uleb128 0x31
+ 22755 8651 F9830000 .long 0x83f9
+ 22756 8655 02 .byte 0x2
+ 22757 8656 91 .byte 0x91
+ 22758 8657 40 .sleb128 -64
+ 22759 8658 38 .uleb128 0x38
+ 22760 8659 00000000 .quad .LBB2261
+ 22760 00000000
+ 22761 8661 00000000 .quad .LBE2261
+ 22761 00000000
+ 22762 8669 77860000 .long 0x8677
+ 22763 866d 33 .uleb128 0x33
+ 22764 866e 16840000 .long 0x8416
+ 22765 8672 03 .byte 0x3
+ 22766 8673 91 .byte 0x91
+ 22767 8674 F07D .sleb128 -272
+ 22768 8676 00 .byte 0x0
+ 22769 8677 38 .uleb128 0x38
+ 22770 8678 00000000 .quad .LBB2262
+ 22770 00000000
+ 22771 8680 00000000 .quad .LBE2262
+ 22771 00000000
+ 22772 8688 96860000 .long 0x8696
+ 22773 868c 33 .uleb128 0x33
+ 22774 868d 26840000 .long 0x8426
+ 22775 8691 03 .byte 0x3
+ 22776 8692 91 .byte 0x91
+ 22777 8693 E07D .sleb128 -288
+ 22778 8695 00 .byte 0x0
+ 22779 8696 32 .uleb128 0x32
+ 22780 8697 00000000 .quad .LBB2263
+ 22780 00000000
+ 22781 869f 00000000 .quad .LBE2263
+ 22781 00000000
+ 22782 86a7 33 .uleb128 0x33
+ 22783 86a8 32840000 .long 0x8432
+ 22784 86ac 03 .byte 0x3
+ 22785 86ad 91 .byte 0x91
+ 22786 86ae D07D .sleb128 -304
+ 22787 86b0 00 .byte 0x0
+ 22788 86b1 00 .byte 0x0
+ 22789 86b2 00 .byte 0x0
+ 22790 86b3 27 .uleb128 0x27
+ 22791 86b4 00000000 .long .LASF364
+ 22792 86b8 03 .byte 0x3
+ 22793 86b9 5308 .value 0x853
+
GAS LISTING /tmp/ccPaCTqg.s page 576
+
+
+ 22794 86bb 01 .byte 0x1
+ 22795 86bc C9010000 .long 0x1c9
+ 22796 86c0 03 .byte 0x3
+ 22797 86c1 0A870000 .long 0x870a
+ 22798 86c5 28 .uleb128 0x28
+ 22799 86c6 00000000 .long .LASF63
+ 22800 86ca 03 .byte 0x3
+ 22801 86cb 5308 .value 0x853
+ 22802 86cd C9010000 .long 0x1c9
+ 22803 86d1 28 .uleb128 0x28
+ 22804 86d2 00000000 .long .LASF61
+ 22805 86d6 03 .byte 0x3
+ 22806 86d7 5308 .value 0x853
+ 22807 86d9 C9010000 .long 0x1c9
+ 22808 86dd 36 .uleb128 0x36
+ 22809 86de ED860000 .long 0x86ed
+ 22810 86e2 29 .uleb128 0x29
+ 22811 86e3 7600 .string "v"
+ 22812 86e5 03 .byte 0x3
+ 22813 86e6 5508 .value 0x855
+ 22814 86e8 F6040000 .long 0x4f6
+ 22815 86ec 00 .byte 0x0
+ 22816 86ed 36 .uleb128 0x36
+ 22817 86ee FD860000 .long 0x86fd
+ 22818 86f2 29 .uleb128 0x29
+ 22819 86f3 7600 .string "v"
+ 22820 86f5 03 .byte 0x3
+ 22821 86f6 5908 .value 0x859
+ 22822 86f8 F6040000 .long 0x4f6
+ 22823 86fc 00 .byte 0x0
+ 22824 86fd 37 .uleb128 0x37
+ 22825 86fe 29 .uleb128 0x29
+ 22826 86ff 7600 .string "v"
+ 22827 8701 03 .byte 0x3
+ 22828 8702 5A08 .value 0x85a
+ 22829 8704 F6040000 .long 0x4f6
+ 22830 8708 00 .byte 0x0
+ 22831 8709 00 .byte 0x0
+ 22832 870a 27 .uleb128 0x27
+ 22833 870b 00000000 .long .LASF365
+ 22834 870f 03 .byte 0x3
+ 22835 8710 7008 .value 0x870
+ 22836 8712 01 .byte 0x1
+ 22837 8713 C9010000 .long 0x1c9
+ 22838 8717 03 .byte 0x3
+ 22839 8718 79870000 .long 0x8779
+ 22840 871c 28 .uleb128 0x28
+ 22841 871d 00000000 .long .LASF63
+ 22842 8721 03 .byte 0x3
+ 22843 8722 7008 .value 0x870
+ 22844 8724 C9010000 .long 0x1c9
+ 22845 8728 28 .uleb128 0x28
+ 22846 8729 00000000 .long .LASF61
+ 22847 872d 03 .byte 0x3
+ 22848 872e 7108 .value 0x871
+ 22849 8730 C9010000 .long 0x1c9
+ 22850 8734 2B .uleb128 0x2b
+
GAS LISTING /tmp/ccPaCTqg.s page 577
+
+
+ 22851 8735 00000000 .long .LASF360
+ 22852 8739 03 .byte 0x3
+ 22853 873a 7408 .value 0x874
+ 22854 873c C9010000 .long 0x1c9
+ 22855 8740 2B .uleb128 0x2b
+ 22856 8741 00000000 .long .LASF361
+ 22857 8745 03 .byte 0x3
+ 22858 8746 7508 .value 0x875
+ 22859 8748 C9010000 .long 0x1c9
+ 22860 874c 36 .uleb128 0x36
+ 22861 874d 5C870000 .long 0x875c
+ 22862 8751 29 .uleb128 0x29
+ 22863 8752 7600 .string "v"
+ 22864 8754 03 .byte 0x3
+ 22865 8755 7B08 .value 0x87b
+ 22866 8757 F6040000 .long 0x4f6
+ 22867 875b 00 .byte 0x0
+ 22868 875c 36 .uleb128 0x36
+ 22869 875d 6C870000 .long 0x876c
+ 22870 8761 29 .uleb128 0x29
+ 22871 8762 7600 .string "v"
+ 22872 8764 03 .byte 0x3
+ 22873 8765 A708 .value 0x8a7
+ 22874 8767 F6040000 .long 0x4f6
+ 22875 876b 00 .byte 0x0
+ 22876 876c 37 .uleb128 0x37
+ 22877 876d 29 .uleb128 0x29
+ 22878 876e 7600 .string "v"
+ 22879 8770 03 .byte 0x3
+ 22880 8771 A908 .value 0x8a9
+ 22881 8773 F6040000 .long 0x4f6
+ 22882 8777 00 .byte 0x0
+ 22883 8778 00 .byte 0x0
+ 22884 8779 27 .uleb128 0x27
+ 22885 877a 00000000 .long .LASF366
+ 22886 877e 03 .byte 0x3
+ 22887 877f BA08 .value 0x8ba
+ 22888 8781 01 .byte 0x1
+ 22889 8782 C9010000 .long 0x1c9
+ 22890 8786 03 .byte 0x3
+ 22891 8787 D0870000 .long 0x87d0
+ 22892 878b 28 .uleb128 0x28
+ 22893 878c 00000000 .long .LASF63
+ 22894 8790 03 .byte 0x3
+ 22895 8791 BA08 .value 0x8ba
+ 22896 8793 C9010000 .long 0x1c9
+ 22897 8797 28 .uleb128 0x28
+ 22898 8798 00000000 .long .LASF61
+ 22899 879c 03 .byte 0x3
+ 22900 879d BB08 .value 0x8bb
+ 22901 879f C9010000 .long 0x1c9
+ 22902 87a3 36 .uleb128 0x36
+ 22903 87a4 B3870000 .long 0x87b3
+ 22904 87a8 29 .uleb128 0x29
+ 22905 87a9 7600 .string "v"
+ 22906 87ab 03 .byte 0x3
+ 22907 87ac BD08 .value 0x8bd
+
GAS LISTING /tmp/ccPaCTqg.s page 578
+
+
+ 22908 87ae F6040000 .long 0x4f6
+ 22909 87b2 00 .byte 0x0
+ 22910 87b3 36 .uleb128 0x36
+ 22911 87b4 C3870000 .long 0x87c3
+ 22912 87b8 29 .uleb128 0x29
+ 22913 87b9 7600 .string "v"
+ 22914 87bb 03 .byte 0x3
+ 22915 87bc CD08 .value 0x8cd
+ 22916 87be F6040000 .long 0x4f6
+ 22917 87c2 00 .byte 0x0
+ 22918 87c3 37 .uleb128 0x37
+ 22919 87c4 29 .uleb128 0x29
+ 22920 87c5 7600 .string "v"
+ 22921 87c7 03 .byte 0x3
+ 22922 87c8 CE08 .value 0x8ce
+ 22923 87ca F6040000 .long 0x4f6
+ 22924 87ce 00 .byte 0x0
+ 22925 87cf 00 .byte 0x0
+ 22926 87d0 1F .uleb128 0x1f
+ 22927 87d1 00000000 .long .LASF367
+ 22928 87d5 03 .byte 0x3
+ 22929 87d6 DD08 .value 0x8dd
+ 22930 87d8 01 .byte 0x1
+ 22931 87d9 C9010000 .long 0x1c9
+ 22932 87dd 00000000 .quad .LFB670
+ 22932 00000000
+ 22933 87e5 00000000 .quad .LFE670
+ 22933 00000000
+ 22934 87ed 00000000 .long .LLST14
+ 22935 87f1 458A0000 .long 0x8a45
+ 22936 87f5 20 .uleb128 0x20
+ 22937 87f6 00000000 .long .LASF63
+ 22938 87fa 03 .byte 0x3
+ 22939 87fb DD08 .value 0x8dd
+ 22940 87fd C9010000 .long 0x1c9
+ 22941 8801 03 .byte 0x3
+ 22942 8802 91 .byte 0x91
+ 22943 8803 E07C .sleb128 -416
+ 22944 8805 2E .uleb128 0x2e
+ 22945 8806 6B657900 .string "key"
+ 22946 880a 03 .byte 0x3
+ 22947 880b DD08 .value 0x8dd
+ 22948 880d 39820000 .long 0x8239
+ 22949 8811 03 .byte 0x3
+ 22950 8812 91 .byte 0x91
+ 22951 8813 D87C .sleb128 -424
+ 22952 8815 2E .uleb128 0x2e
+ 22953 8816 4E7200 .string "Nr"
+ 22954 8819 03 .byte 0x3
+ 22955 881a DE08 .value 0x8de
+ 22956 881c 78000000 .long 0x78
+ 22957 8820 03 .byte 0x3
+ 22958 8821 91 .byte 0x91
+ 22959 8822 D47C .sleb128 -428
+ 22960 8824 35 .uleb128 0x35
+ 22961 8825 697800 .string "ix"
+ 22962 8828 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 579
+
+
+ 22963 8829 E008 .value 0x8e0
+ 22964 882b 78000000 .long 0x78
+ 22965 882f 03 .byte 0x3
+ 22966 8830 91 .byte 0x91
+ 22967 8831 8C7E .sleb128 -244
+ 22968 8833 30 .uleb128 0x30
+ 22969 8834 B3860000 .long 0x86b3
+ 22970 8838 00000000 .quad .LBB2283
+ 22970 00000000
+ 22971 8840 00000000 .quad .LBE2283
+ 22971 00000000
+ 22972 8848 03 .byte 0x3
+ 22973 8849 E208 .value 0x8e2
+ 22974 884b 15890000 .long 0x8915
+ 22975 884f 31 .uleb128 0x31
+ 22976 8850 D1860000 .long 0x86d1
+ 22977 8854 03 .byte 0x3
+ 22978 8855 91 .byte 0x91
+ 22979 8856 907E .sleb128 -240
+ 22980 8858 31 .uleb128 0x31
+ 22981 8859 C5860000 .long 0x86c5
+ 22982 885d 03 .byte 0x3
+ 22983 885e 91 .byte 0x91
+ 22984 885f A07E .sleb128 -224
+ 22985 8861 38 .uleb128 0x38
+ 22986 8862 00000000 .quad .LBB2285
+ 22986 00000000
+ 22987 886a 00000000 .quad .LBE2285
+ 22987 00000000
+ 22988 8872 80880000 .long 0x8880
+ 22989 8876 33 .uleb128 0x33
+ 22990 8877 E2860000 .long 0x86e2
+ 22991 887b 03 .byte 0x3
+ 22992 887c 91 .byte 0x91
+ 22993 887d 907D .sleb128 -368
+ 22994 887f 00 .byte 0x0
+ 22995 8880 30 .uleb128 0x30
+ 22996 8881 4D830000 .long 0x834d
+ 22997 8885 00000000 .quad .LBB2286
+ 22997 00000000
+ 22998 888d 00000000 .quad .LBE2286
+ 22998 00000000
+ 22999 8895 03 .byte 0x3
+ 23000 8896 5708 .value 0x857
+ 23001 8898 DA880000 .long 0x88da
+ 23002 889c 31 .uleb128 0x31
+ 23003 889d 6B830000 .long 0x836b
+ 23004 88a1 03 .byte 0x3
+ 23005 88a2 91 .byte 0x91
+ 23006 88a3 B07E .sleb128 -208
+ 23007 88a5 31 .uleb128 0x31
+ 23008 88a6 5F830000 .long 0x835f
+ 23009 88aa 03 .byte 0x3
+ 23010 88ab 91 .byte 0x91
+ 23011 88ac C07E .sleb128 -192
+ 23012 88ae 34 .uleb128 0x34
+ 23013 88af F7580000 .long 0x58f7
+
GAS LISTING /tmp/ccPaCTqg.s page 580
+
+
+ 23014 88b3 00000000 .quad .LBB2288
+ 23014 00000000
+ 23015 88bb 00000000 .quad .LBE2288
+ 23015 00000000
+ 23016 88c3 03 .byte 0x3
+ 23017 88c4 2302 .value 0x223
+ 23018 88c6 31 .uleb128 0x31
+ 23019 88c7 12590000 .long 0x5912
+ 23020 88cb 03 .byte 0x3
+ 23021 88cc 91 .byte 0x91
+ 23022 88cd D07E .sleb128 -176
+ 23023 88cf 31 .uleb128 0x31
+ 23024 88d0 08590000 .long 0x5908
+ 23025 88d4 03 .byte 0x3
+ 23026 88d5 91 .byte 0x91
+ 23027 88d6 E07E .sleb128 -160
+ 23028 88d8 00 .byte 0x0
+ 23029 88d9 00 .byte 0x0
+ 23030 88da 38 .uleb128 0x38
+ 23031 88db 00000000 .quad .LBB2290
+ 23031 00000000
+ 23032 88e3 00000000 .quad .LBE2290
+ 23032 00000000
+ 23033 88eb F9880000 .long 0x88f9
+ 23034 88ef 33 .uleb128 0x33
+ 23035 88f0 F2860000 .long 0x86f2
+ 23036 88f4 03 .byte 0x3
+ 23037 88f5 91 .byte 0x91
+ 23038 88f6 807D .sleb128 -384
+ 23039 88f8 00 .byte 0x0
+ 23040 88f9 32 .uleb128 0x32
+ 23041 88fa 00000000 .quad .LBB2291
+ 23041 00000000
+ 23042 8902 00000000 .quad .LBE2291
+ 23042 00000000
+ 23043 890a 33 .uleb128 0x33
+ 23044 890b FE860000 .long 0x86fe
+ 23045 890f 03 .byte 0x3
+ 23046 8910 91 .byte 0x91
+ 23047 8911 F07C .sleb128 -400
+ 23048 8913 00 .byte 0x0
+ 23049 8914 00 .byte 0x0
+ 23050 8915 30 .uleb128 0x30
+ 23051 8916 0A870000 .long 0x870a
+ 23052 891a 00000000 .quad .LBB2292
+ 23052 00000000
+ 23053 8922 00000000 .quad .LBE2292
+ 23053 00000000
+ 23054 892a 03 .byte 0x3
+ 23055 892b E508 .value 0x8e5
+ 23056 892d C1890000 .long 0x89c1
+ 23057 8931 31 .uleb128 0x31
+ 23058 8932 28870000 .long 0x8728
+ 23059 8936 03 .byte 0x3
+ 23060 8937 91 .byte 0x91
+ 23061 8938 F07E .sleb128 -144
+ 23062 893a 31 .uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s page 581
+
+
+ 23063 893b 1C870000 .long 0x871c
+ 23064 893f 03 .byte 0x3
+ 23065 8940 91 .byte 0x91
+ 23066 8941 807F .sleb128 -128
+ 23067 8943 32 .uleb128 0x32
+ 23068 8944 00000000 .quad .LBB2293
+ 23068 00000000
+ 23069 894c 00000000 .quad .LBE2293
+ 23069 00000000
+ 23070 8954 33 .uleb128 0x33
+ 23071 8955 34870000 .long 0x8734
+ 23072 8959 03 .byte 0x3
+ 23073 895a 91 .byte 0x91
+ 23074 895b A07F .sleb128 -96
+ 23075 895d 33 .uleb128 0x33
+ 23076 895e 40870000 .long 0x8740
+ 23077 8962 03 .byte 0x3
+ 23078 8963 91 .byte 0x91
+ 23079 8964 907F .sleb128 -112
+ 23080 8966 38 .uleb128 0x38
+ 23081 8967 00000000 .quad .LBB2294
+ 23081 00000000
+ 23082 896f 00000000 .quad .LBE2294
+ 23082 00000000
+ 23083 8977 85890000 .long 0x8985
+ 23084 897b 33 .uleb128 0x33
+ 23085 897c 51870000 .long 0x8751
+ 23086 8980 03 .byte 0x3
+ 23087 8981 91 .byte 0x91
+ 23088 8982 C07D .sleb128 -320
+ 23089 8984 00 .byte 0x0
+ 23090 8985 38 .uleb128 0x38
+ 23091 8986 00000000 .quad .LBB2295
+ 23091 00000000
+ 23092 898e 00000000 .quad .LBE2295
+ 23092 00000000
+ 23093 8996 A4890000 .long 0x89a4
+ 23094 899a 33 .uleb128 0x33
+ 23095 899b 61870000 .long 0x8761
+ 23096 899f 03 .byte 0x3
+ 23097 89a0 91 .byte 0x91
+ 23098 89a1 B07D .sleb128 -336
+ 23099 89a3 00 .byte 0x0
+ 23100 89a4 32 .uleb128 0x32
+ 23101 89a5 00000000 .quad .LBB2296
+ 23101 00000000
+ 23102 89ad 00000000 .quad .LBE2296
+ 23102 00000000
+ 23103 89b5 33 .uleb128 0x33
+ 23104 89b6 6D870000 .long 0x876d
+ 23105 89ba 03 .byte 0x3
+ 23106 89bb 91 .byte 0x91
+ 23107 89bc A07D .sleb128 -352
+ 23108 89be 00 .byte 0x0
+ 23109 89bf 00 .byte 0x0
+ 23110 89c0 00 .byte 0x0
+ 23111 89c1 34 .uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s page 582
+
+
+ 23112 89c2 79870000 .long 0x8779
+ 23113 89c6 00000000 .quad .LBB2297
+ 23113 00000000
+ 23114 89ce 00000000 .quad .LBE2297
+ 23114 00000000
+ 23115 89d6 03 .byte 0x3
+ 23116 89d7 E708 .value 0x8e7
+ 23117 89d9 31 .uleb128 0x31
+ 23118 89da 97870000 .long 0x8797
+ 23119 89de 03 .byte 0x3
+ 23120 89df 91 .byte 0x91
+ 23121 89e0 B07F .sleb128 -80
+ 23122 89e2 31 .uleb128 0x31
+ 23123 89e3 8B870000 .long 0x878b
+ 23124 89e7 02 .byte 0x2
+ 23125 89e8 91 .byte 0x91
+ 23126 89e9 40 .sleb128 -64
+ 23127 89ea 38 .uleb128 0x38
+ 23128 89eb 00000000 .quad .LBB2299
+ 23128 00000000
+ 23129 89f3 00000000 .quad .LBE2299
+ 23129 00000000
+ 23130 89fb 098A0000 .long 0x8a09
+ 23131 89ff 33 .uleb128 0x33
+ 23132 8a00 A8870000 .long 0x87a8
+ 23133 8a04 03 .byte 0x3
+ 23134 8a05 91 .byte 0x91
+ 23135 8a06 F07D .sleb128 -272
+ 23136 8a08 00 .byte 0x0
+ 23137 8a09 38 .uleb128 0x38
+ 23138 8a0a 00000000 .quad .LBB2300
+ 23138 00000000
+ 23139 8a12 00000000 .quad .LBE2300
+ 23139 00000000
+ 23140 8a1a 288A0000 .long 0x8a28
+ 23141 8a1e 33 .uleb128 0x33
+ 23142 8a1f B8870000 .long 0x87b8
+ 23143 8a23 03 .byte 0x3
+ 23144 8a24 91 .byte 0x91
+ 23145 8a25 E07D .sleb128 -288
+ 23146 8a27 00 .byte 0x0
+ 23147 8a28 32 .uleb128 0x32
+ 23148 8a29 00000000 .quad .LBB2301
+ 23148 00000000
+ 23149 8a31 00000000 .quad .LBE2301
+ 23149 00000000
+ 23150 8a39 33 .uleb128 0x33
+ 23151 8a3a C4870000 .long 0x87c4
+ 23152 8a3e 03 .byte 0x3
+ 23153 8a3f 91 .byte 0x91
+ 23154 8a40 D07D .sleb128 -304
+ 23155 8a42 00 .byte 0x0
+ 23156 8a43 00 .byte 0x0
+ 23157 8a44 00 .byte 0x0
+ 23158 8a45 2D .uleb128 0x2d
+ 23159 8a46 00000000 .long .LASF368
+ 23160 8a4a 03 .byte 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 583
+
+
+ 23161 8a4b 0309 .value 0x903
+ 23162 8a4d 01 .byte 0x1
+ 23163 8a4e 00000000 .quad .LFB671
+ 23163 00000000
+ 23164 8a56 00000000 .quad .LFE671
+ 23164 00000000
+ 23165 8a5e 00000000 .long .LLST15
+ 23166 8a62 768A0000 .long 0x8a76
+ 23167 8a66 20 .uleb128 0x20
+ 23168 8a67 00000000 .long .LASF369
+ 23169 8a6b 03 .byte 0x3
+ 23170 8a6c 0309 .value 0x903
+ 23171 8a6e E8030000 .long 0x3e8
+ 23172 8a72 02 .byte 0x2
+ 23173 8a73 91 .byte 0x91
+ 23174 8a74 68 .sleb128 -24
+ 23175 8a75 00 .byte 0x0
+ 23176 8a76 39 .uleb128 0x39
+ 23177 8a77 00000000 .long .LASF370
+ 23178 8a7b 03 .byte 0x3
+ 23179 8a7c 0D09 .value 0x90d
+ 23180 8a7e 6D000000 .long 0x6d
+ 23181 8a82 00000000 .quad .LFB672
+ 23181 00000000
+ 23182 8a8a 00000000 .quad .LFE672
+ 23182 00000000
+ 23183 8a92 00000000 .long .LLST16
+ 23184 8a96 39 .uleb128 0x39
+ 23185 8a97 00000000 .long .LASF371
+ 23186 8a9b 03 .byte 0x3
+ 23187 8a9c 1C09 .value 0x91c
+ 23188 8a9e 6D000000 .long 0x6d
+ 23189 8aa2 00000000 .quad .LFB673
+ 23189 00000000
+ 23190 8aaa 00000000 .quad .LFE673
+ 23190 00000000
+ 23191 8ab2 00000000 .long .LLST17
+ 23192 8ab6 1F .uleb128 0x1f
+ 23193 8ab7 00000000 .long .LASF372
+ 23194 8abb 03 .byte 0x3
+ 23195 8abc 2909 .value 0x929
+ 23196 8abe 01 .byte 0x1
+ 23197 8abf 91000000 .long 0x91
+ 23198 8ac3 00000000 .quad .LFB674
+ 23198 00000000
+ 23199 8acb 00000000 .quad .LFE674
+ 23199 00000000
+ 23200 8ad3 00000000 .long .LLST18
+ 23201 8ad7 4E8B0000 .long 0x8b4e
+ 23202 8adb 20 .uleb128 0x20
+ 23203 8adc 00000000 .long .LASF373
+ 23204 8ae0 03 .byte 0x3
+ 23205 8ae1 2909 .value 0x929
+ 23206 8ae3 C4000000 .long 0xc4
+ 23207 8ae7 02 .byte 0x2
+ 23208 8ae8 91 .byte 0x91
+ 23209 8ae9 58 .sleb128 -40
+
GAS LISTING /tmp/ccPaCTqg.s page 584
+
+
+ 23210 8aea 20 .uleb128 0x20
+ 23211 8aeb 00000000 .long .LASF374
+ 23212 8aef 03 .byte 0x3
+ 23213 8af0 2909 .value 0x929
+ 23214 8af2 B9000000 .long 0xb9
+ 23215 8af6 02 .byte 0x2
+ 23216 8af7 91 .byte 0x91
+ 23217 8af8 50 .sleb128 -48
+ 23218 8af9 20 .uleb128 0x20
+ 23219 8afa 00000000 .long .LASF375
+ 23220 8afe 03 .byte 0x3
+ 23221 8aff 2A09 .value 0x92a
+ 23222 8b01 6D000000 .long 0x6d
+ 23223 8b05 02 .byte 0x2
+ 23224 8b06 91 .byte 0x91
+ 23225 8b07 4C .sleb128 -52
+ 23226 8b08 35 .uleb128 0x35
+ 23227 8b09 726300 .string "rc"
+ 23228 8b0c 03 .byte 0x3
+ 23229 8b0d 2C09 .value 0x92c
+ 23230 8b0f 91000000 .long 0x91
+ 23231 8b13 02 .byte 0x2
+ 23232 8b14 91 .byte 0x91
+ 23233 8b15 64 .sleb128 -28
+ 23234 8b16 35 .uleb128 0x35
+ 23235 8b17 6B657900 .string "key"
+ 23236 8b1b 03 .byte 0x3
+ 23237 8b1c 2D09 .value 0x92d
+ 23238 8b1e 4E8B0000 .long 0x8b4e
+ 23239 8b22 02 .byte 0x2
+ 23240 8b23 91 .byte 0x91
+ 23241 8b24 68 .sleb128 -24
+ 23242 8b25 3A .uleb128 0x3a
+ 23243 8b26 00000000 .long .LASF376
+ 23244 8b2a 648B0000 .long 0x8b64
+ 23245 8b2e 01 .byte 0x1
+ 23246 8b2f 09 .byte 0x9
+ 23247 8b30 03 .byte 0x3
+ 23248 8b31 00000000 .quad __PRETTY_FUNCTION__.8793
+ 23248 00000000
+ 23249 8b39 3A .uleb128 0x3a
+ 23250 8b3a 00000000 .long .LASF377
+ 23251 8b3e 698B0000 .long 0x8b69
+ 23252 8b42 01 .byte 0x1
+ 23253 8b43 09 .byte 0x9
+ 23254 8b44 03 .byte 0x3
+ 23255 8b45 00000000 .quad __func__.8794
+ 23255 00000000
+ 23256 8b4d 00 .byte 0x0
+ 23257 8b4e 07 .uleb128 0x7
+ 23258 8b4f 08 .byte 0x8
+ 23259 8b50 3A040000 .long 0x43a
+ 23260 8b54 09 .uleb128 0x9
+ 23261 8b55 9F000000 .long 0x9f
+ 23262 8b59 648B0000 .long 0x8b64
+ 23263 8b5d 0A .uleb128 0xa
+ 23264 8b5e 9C000000 .long 0x9c
+
GAS LISTING /tmp/ccPaCTqg.s page 585
+
+
+ 23265 8b62 24 .byte 0x24
+ 23266 8b63 00 .byte 0x0
+ 23267 8b64 06 .uleb128 0x6
+ 23268 8b65 548B0000 .long 0x8b54
+ 23269 8b69 06 .uleb128 0x6
+ 23270 8b6a 548B0000 .long 0x8b54
+ 23271 8b6e 1F .uleb128 0x1f
+ 23272 8b6f 00000000 .long .LASF378
+ 23273 8b73 03 .byte 0x3
+ 23274 8b74 5409 .value 0x954
+ 23275 8b76 01 .byte 0x1
+ 23276 8b77 91000000 .long 0x91
+ 23277 8b7b 00000000 .quad .LFB675
+ 23277 00000000
+ 23278 8b83 00000000 .quad .LFE675
+ 23278 00000000
+ 23279 8b8b 00000000 .long .LLST19
+ 23280 8b8f 038C0000 .long 0x8c03
+ 23281 8b93 20 .uleb128 0x20
+ 23282 8b94 00000000 .long .LASF379
+ 23283 8b98 03 .byte 0x3
+ 23284 8b99 5409 .value 0x954
+ 23285 8b9b C4000000 .long 0xc4
+ 23286 8b9f 03 .byte 0x3
+ 23287 8ba0 91 .byte 0x91
+ 23288 8ba1 D87D .sleb128 -296
+ 23289 8ba3 20 .uleb128 0x20
+ 23290 8ba4 00000000 .long .LASF374
+ 23291 8ba8 03 .byte 0x3
+ 23292 8ba9 5509 .value 0x955
+ 23293 8bab B9000000 .long 0xb9
+ 23294 8baf 03 .byte 0x3
+ 23295 8bb0 91 .byte 0x91
+ 23296 8bb1 D07D .sleb128 -304
+ 23297 8bb3 20 .uleb128 0x20
+ 23298 8bb4 00000000 .long .LASF375
+ 23299 8bb8 03 .byte 0x3
+ 23300 8bb9 5609 .value 0x956
+ 23301 8bbb 6D000000 .long 0x6d
+ 23302 8bbf 03 .byte 0x3
+ 23303 8bc0 91 .byte 0x91
+ 23304 8bc1 CC7D .sleb128 -308
+ 23305 8bc3 2F .uleb128 0x2f
+ 23306 8bc4 00000000 .long .LASF373
+ 23307 8bc8 03 .byte 0x3
+ 23308 8bc9 5809 .value 0x958
+ 23309 8bcb 3A040000 .long 0x43a
+ 23310 8bcf 03 .byte 0x3
+ 23311 8bd0 91 .byte 0x91
+ 23312 8bd1 E07D .sleb128 -288
+ 23313 8bd3 35 .uleb128 0x35
+ 23314 8bd4 726300 .string "rc"
+ 23315 8bd7 03 .byte 0x3
+ 23316 8bd8 5909 .value 0x959
+ 23317 8bda 91000000 .long 0x91
+ 23318 8bde 02 .byte 0x2
+ 23319 8bdf 91 .byte 0x91
+
GAS LISTING /tmp/ccPaCTqg.s page 586
+
+
+ 23320 8be0 64 .sleb128 -28
+ 23321 8be1 32 .uleb128 0x32
+ 23322 8be2 00000000 .quad .LBB2302
+ 23322 00000000
+ 23323 8bea 00000000 .quad .LBE2302
+ 23323 00000000
+ 23324 8bf2 35 .uleb128 0x35
+ 23325 8bf3 6B657900 .string "key"
+ 23326 8bf7 03 .byte 0x3
+ 23327 8bf8 5E09 .value 0x95e
+ 23328 8bfa 4E8B0000 .long 0x8b4e
+ 23329 8bfe 02 .byte 0x2
+ 23330 8bff 91 .byte 0x91
+ 23331 8c00 68 .sleb128 -24
+ 23332 8c01 00 .byte 0x0
+ 23333 8c02 00 .byte 0x0
+ 23334 8c03 1F .uleb128 0x1f
+ 23335 8c04 00000000 .long .LASF380
+ 23336 8c08 03 .byte 0x3
+ 23337 8c09 8009 .value 0x980
+ 23338 8c0b 01 .byte 0x1
+ 23339 8c0c C9010000 .long 0x1c9
+ 23340 8c10 00000000 .quad .LFB676
+ 23340 00000000
+ 23341 8c18 00000000 .quad .LFE676
+ 23341 00000000
+ 23342 8c20 00000000 .long .LLST20
+ 23343 8c24 6A8C0000 .long 0x8c6a
+ 23344 8c28 20 .uleb128 0x20
+ 23345 8c29 00000000 .long .LASF63
+ 23346 8c2d 03 .byte 0x3
+ 23347 8c2e 8009 .value 0x980
+ 23348 8c30 C9010000 .long 0x1c9
+ 23349 8c34 02 .byte 0x2
+ 23350 8c35 91 .byte 0x91
+ 23351 8c36 50 .sleb128 -48
+ 23352 8c37 20 .uleb128 0x20
+ 23353 8c38 00000000 .long .LASF373
+ 23354 8c3c 03 .byte 0x3
+ 23355 8c3d 8109 .value 0x981
+ 23356 8c3f E3000000 .long 0xe3
+ 23357 8c43 02 .byte 0x2
+ 23358 8c44 91 .byte 0x91
+ 23359 8c45 48 .sleb128 -56
+ 23360 8c46 35 .uleb128 0x35
+ 23361 8c47 6B657900 .string "key"
+ 23362 8c4b 03 .byte 0x3
+ 23363 8c4c 8309 .value 0x983
+ 23364 8c4e 6A8C0000 .long 0x8c6a
+ 23365 8c52 02 .byte 0x2
+ 23366 8c53 91 .byte 0x91
+ 23367 8c54 68 .sleb128 -24
+ 23368 8c55 3A .uleb128 0x3a
+ 23369 8c56 00000000 .long .LASF376
+ 23370 8c5a 858C0000 .long 0x8c85
+ 23371 8c5e 01 .byte 0x1
+ 23372 8c5f 09 .byte 0x9
+
GAS LISTING /tmp/ccPaCTqg.s page 587
+
+
+ 23373 8c60 03 .byte 0x3
+ 23374 8c61 00000000 .quad __PRETTY_FUNCTION__.8830
+ 23374 00000000
+ 23375 8c69 00 .byte 0x0
+ 23376 8c6a 07 .uleb128 0x7
+ 23377 8c6b 08 .byte 0x8
+ 23378 8c6c 708C0000 .long 0x8c70
+ 23379 8c70 06 .uleb128 0x6
+ 23380 8c71 3A040000 .long 0x43a
+ 23381 8c75 09 .uleb128 0x9
+ 23382 8c76 9F000000 .long 0x9f
+ 23383 8c7a 858C0000 .long 0x8c85
+ 23384 8c7e 0A .uleb128 0xa
+ 23385 8c7f 9C000000 .long 0x9c
+ 23386 8c83 1E .byte 0x1e
+ 23387 8c84 00 .byte 0x0
+ 23388 8c85 06 .uleb128 0x6
+ 23389 8c86 758C0000 .long 0x8c75
+ 23390 8c8a 1F .uleb128 0x1f
+ 23391 8c8b 00000000 .long .LASF381
+ 23392 8c8f 03 .byte 0x3
+ 23393 8c90 A409 .value 0x9a4
+ 23394 8c92 01 .byte 0x1
+ 23395 8c93 C9010000 .long 0x1c9
+ 23396 8c97 00000000 .quad .LFB677
+ 23396 00000000
+ 23397 8c9f 00000000 .quad .LFE677
+ 23397 00000000
+ 23398 8ca7 00000000 .long .LLST21
+ 23399 8cab F18C0000 .long 0x8cf1
+ 23400 8caf 20 .uleb128 0x20
+ 23401 8cb0 00000000 .long .LASF63
+ 23402 8cb4 03 .byte 0x3
+ 23403 8cb5 A409 .value 0x9a4
+ 23404 8cb7 C9010000 .long 0x1c9
+ 23405 8cbb 02 .byte 0x2
+ 23406 8cbc 91 .byte 0x91
+ 23407 8cbd 50 .sleb128 -48
+ 23408 8cbe 20 .uleb128 0x20
+ 23409 8cbf 00000000 .long .LASF379
+ 23410 8cc3 03 .byte 0x3
+ 23411 8cc4 A509 .value 0x9a5
+ 23412 8cc6 E3000000 .long 0xe3
+ 23413 8cca 02 .byte 0x2
+ 23414 8ccb 91 .byte 0x91
+ 23415 8ccc 48 .sleb128 -56
+ 23416 8ccd 35 .uleb128 0x35
+ 23417 8cce 6B657900 .string "key"
+ 23418 8cd2 03 .byte 0x3
+ 23419 8cd3 A709 .value 0x9a7
+ 23420 8cd5 6A8C0000 .long 0x8c6a
+ 23421 8cd9 02 .byte 0x2
+ 23422 8cda 91 .byte 0x91
+ 23423 8cdb 68 .sleb128 -24
+ 23424 8cdc 3A .uleb128 0x3a
+ 23425 8cdd 00000000 .long .LASF376
+ 23426 8ce1 F18C0000 .long 0x8cf1
+
GAS LISTING /tmp/ccPaCTqg.s page 588
+
+
+ 23427 8ce5 01 .byte 0x1
+ 23428 8ce6 09 .byte 0x9
+ 23429 8ce7 03 .byte 0x3
+ 23430 8ce8 00000000 .quad __PRETTY_FUNCTION__.8851
+ 23430 00000000
+ 23431 8cf0 00 .byte 0x0
+ 23432 8cf1 06 .uleb128 0x6
+ 23433 8cf2 758C0000 .long 0x8c75
+ 23434 8cf6 3B .uleb128 0x3b
+ 23435 8cf7 00000000 .long .LASF382
+ 23436 8cfb 03 .byte 0x3
+ 23437 8cfc CC09 .value 0x9cc
+ 23438 8cfe 818D0000 .long 0x8d81
+ 23439 8d02 00000000 .quad .LFB678
+ 23439 00000000
+ 23440 8d0a 00000000 .quad .LFE678
+ 23440 00000000
+ 23441 8d12 00000000 .long .LLST22
+ 23442 8d16 818D0000 .long 0x8d81
+ 23443 8d1a 2F .uleb128 0x2f
+ 23444 8d1b 00000000 .long .LASF383
+ 23445 8d1f 03 .byte 0x3
+ 23446 8d20 CE09 .value 0x9ce
+ 23447 8d22 6D000000 .long 0x6d
+ 23448 8d26 02 .byte 0x2
+ 23449 8d27 91 .byte 0x91
+ 23450 8d28 48 .sleb128 -56
+ 23451 8d29 35 .uleb128 0x35
+ 23452 8d2a 6100 .string "a"
+ 23453 8d2c 03 .byte 0x3
+ 23454 8d2d CE09 .value 0x9ce
+ 23455 8d2f 6D000000 .long 0x6d
+ 23456 8d33 02 .byte 0x2
+ 23457 8d34 91 .byte 0x91
+ 23458 8d35 4C .sleb128 -52
+ 23459 8d36 35 .uleb128 0x35
+ 23460 8d37 6200 .string "b"
+ 23461 8d39 03 .byte 0x3
+ 23462 8d3a CE09 .value 0x9ce
+ 23463 8d3c 6D000000 .long 0x6d
+ 23464 8d40 02 .byte 0x2
+ 23465 8d41 91 .byte 0x91
+ 23466 8d42 50 .sleb128 -48
+ 23467 8d43 35 .uleb128 0x35
+ 23468 8d44 6300 .string "c"
+ 23469 8d46 03 .byte 0x3
+ 23470 8d47 CE09 .value 0x9ce
+ 23471 8d49 6D000000 .long 0x6d
+ 23472 8d4d 02 .byte 0x2
+ 23473 8d4e 91 .byte 0x91
+ 23474 8d4f 54 .sleb128 -44
+ 23475 8d50 35 .uleb128 0x35
+ 23476 8d51 6400 .string "d"
+ 23477 8d53 03 .byte 0x3
+ 23478 8d54 CE09 .value 0x9ce
+ 23479 8d56 6D000000 .long 0x6d
+ 23480 8d5a 02 .byte 0x2
+
GAS LISTING /tmp/ccPaCTqg.s page 589
+
+
+ 23481 8d5b 91 .byte 0x91
+ 23482 8d5c 58 .sleb128 -40
+ 23483 8d5d 35 .uleb128 0x35
+ 23484 8d5e 72657400 .string "ret"
+ 23485 8d62 03 .byte 0x3
+ 23486 8d63 CF09 .value 0x9cf
+ 23487 8d65 818D0000 .long 0x8d81
+ 23488 8d69 02 .byte 0x2
+ 23489 8d6a 91 .byte 0x91
+ 23490 8d6b 5F .sleb128 -33
+ 23491 8d6c 3A .uleb128 0x3a
+ 23492 8d6d 00000000 .long .LASF377
+ 23493 8d71 888D0000 .long 0x8d88
+ 23494 8d75 01 .byte 0x1
+ 23495 8d76 09 .byte 0x9
+ 23496 8d77 03 .byte 0x3
+ 23497 8d78 00000000 .quad __func__.8875
+ 23497 00000000
+ 23498 8d80 00 .byte 0x0
+ 23499 8d81 02 .uleb128 0x2
+ 23500 8d82 01 .byte 0x1
+ 23501 8d83 02 .byte 0x2
+ 23502 8d84 00000000 .long .LASF384
+ 23503 8d88 06 .uleb128 0x6
+ 23504 8d89 CC000000 .long 0xcc
+ 23505 8d8d 3C .uleb128 0x3c
+ 23506 8d8e 01 .byte 0x1
+ 23507 8d8f 00000000 .long .LASF402
+ 23508 8d93 03 .byte 0x3
+ 23509 8d94 390A .value 0xa39
+ 23510 8d96 01 .byte 0x1
+ 23511 8d97 91000000 .long 0x91
+ 23512 8d9b 00000000 .quad .LFB679
+ 23512 00000000
+ 23513 8da3 00000000 .quad .LFE679
+ 23513 00000000
+ 23514 8dab 00000000 .long .LLST23
+ 23515 8daf F98D0000 .long 0x8df9
+ 23516 8db3 20 .uleb128 0x20
+ 23517 8db4 00000000 .long .LASF385
+ 23518 8db8 03 .byte 0x3
+ 23519 8db9 390A .value 0xa39
+ 23520 8dbb F98D0000 .long 0x8df9
+ 23521 8dbf 02 .byte 0x2
+ 23522 8dc0 91 .byte 0x91
+ 23523 8dc1 58 .sleb128 -40
+ 23524 8dc2 35 .uleb128 0x35
+ 23525 8dc3 726300 .string "rc"
+ 23526 8dc6 03 .byte 0x3
+ 23527 8dc7 3B0A .value 0xa3b
+ 23528 8dc9 91000000 .long 0x91
+ 23529 8dcd 02 .byte 0x2
+ 23530 8dce 91 .byte 0x91
+ 23531 8dcf 6C .sleb128 -20
+ 23532 8dd0 3A .uleb128 0x3a
+ 23533 8dd1 00000000 .long .LASF377
+ 23534 8dd5 158E0000 .long 0x8e15
+
GAS LISTING /tmp/ccPaCTqg.s page 590
+
+
+ 23535 8dd9 01 .byte 0x1
+ 23536 8dda 09 .byte 0x9
+ 23537 8ddb 03 .byte 0x3
+ 23538 8ddc 00000000 .quad __func__.8978
+ 23538 00000000
+ 23539 8de4 3A .uleb128 0x3a
+ 23540 8de5 00000000 .long .LASF376
+ 23541 8de9 1A8E0000 .long 0x8e1a
+ 23542 8ded 01 .byte 0x1
+ 23543 8dee 09 .byte 0x9
+ 23544 8def 03 .byte 0x3
+ 23545 8df0 00000000 .quad __PRETTY_FUNCTION__.8979
+ 23545 00000000
+ 23546 8df8 00 .byte 0x0
+ 23547 8df9 07 .uleb128 0x7
+ 23548 8dfa 08 .byte 0x8
+ 23549 8dfb FF8D0000 .long 0x8dff
+ 23550 8dff 07 .uleb128 0x7
+ 23551 8e00 08 .byte 0x8
+ 23552 8e01 01050000 .long 0x501
+ 23553 8e05 09 .uleb128 0x9
+ 23554 8e06 9F000000 .long 0x9f
+ 23555 8e0a 158E0000 .long 0x8e15
+ 23556 8e0e 0A .uleb128 0xa
+ 23557 8e0f 9C000000 .long 0x9c
+ 23558 8e13 1B .byte 0x1b
+ 23559 8e14 00 .byte 0x0
+ 23560 8e15 06 .uleb128 0x6
+ 23561 8e16 058E0000 .long 0x8e05
+ 23562 8e1a 06 .uleb128 0x6
+ 23563 8e1b 058E0000 .long 0x8e05
+ 23564 8e1f 3D .uleb128 0x3d
+ 23565 8e20 00000000 .long .LASF386
+ 23566 8e24 03 .byte 0x3
+ 23567 8e25 53 .byte 0x53
+ 23568 8e26 F60D0000 .long 0xdf6
+ 23569 8e2a 09 .byte 0x9
+ 23570 8e2b 03 .byte 0x3
+ 23571 8e2c 00000000 .quad vec_00
+ 23571 00000000
+ 23572 8e34 3D .uleb128 0x3d
+ 23573 8e35 00000000 .long .LASF387
+ 23574 8e39 03 .byte 0x3
+ 23575 8e3a 57 .byte 0x57
+ 23576 8e3b F60D0000 .long 0xdf6
+ 23577 8e3f 09 .byte 0x9
+ 23578 8e40 03 .byte 0x3
+ 23579 8e41 00000000 .quad vec_01
+ 23579 00000000
+ 23580 8e49 3D .uleb128 0x3d
+ 23581 8e4a 00000000 .long .LASF388
+ 23582 8e4e 03 .byte 0x3
+ 23583 8e4f 5B .byte 0x5b
+ 23584 8e50 F60D0000 .long 0xdf6
+ 23585 8e54 09 .byte 0x9
+ 23586 8e55 03 .byte 0x3
+ 23587 8e56 00000000 .quad vec_0F
+
GAS LISTING /tmp/ccPaCTqg.s page 591
+
+
+ 23587 00000000
+ 23588 8e5e 3D .uleb128 0x3d
+ 23589 8e5f 00000000 .long .LASF389
+ 23590 8e63 03 .byte 0x3
+ 23591 8e64 5F .byte 0x5f
+ 23592 8e65 F60D0000 .long 0xdf6
+ 23593 8e69 09 .byte 0x9
+ 23594 8e6a 03 .byte 0x3
+ 23595 8e6b 00000000 .quad vec_10
+ 23595 00000000
+ 23596 8e73 09 .uleb128 0x9
+ 23597 8e74 14040000 .long 0x414
+ 23598 8e78 838E0000 .long 0x8e83
+ 23599 8e7c 0A .uleb128 0xa
+ 23600 8e7d 9C000000 .long 0x9c
+ 23601 8e81 FF .byte 0xff
+ 23602 8e82 00 .byte 0x0
+ 23603 8e83 2F .uleb128 0x2f
+ 23604 8e84 00000000 .long .LASF390
+ 23605 8e88 03 .byte 0x3
+ 23606 8e89 AA02 .value 0x2aa
+ 23607 8e8b 998E0000 .long 0x8e99
+ 23608 8e8f 09 .byte 0x9
+ 23609 8e90 03 .byte 0x3
+ 23610 8e91 00000000 .quad KAESBlockCipherVecAesNiRijndaelSBox
+ 23610 00000000
+ 23611 8e99 06 .uleb128 0x6
+ 23612 8e9a 738E0000 .long 0x8e73
+ 23613 8e9e 09 .uleb128 0x9
+ 23614 8e9f C9010000 .long 0x1c9
+ 23615 8ea3 AE8E0000 .long 0x8eae
+ 23616 8ea7 0A .uleb128 0xa
+ 23617 8ea8 9C000000 .long 0x9c
+ 23618 8eac 0F .byte 0xf
+ 23619 8ead 00 .byte 0x0
+ 23620 8eae 2F .uleb128 0x2f
+ 23621 8eaf 00000000 .long .LASF391
+ 23622 8eb3 03 .byte 0x3
+ 23623 8eb4 1903 .value 0x319
+ 23624 8eb6 C48E0000 .long 0x8ec4
+ 23625 8eba 09 .byte 0x9
+ 23626 8ebb 03 .byte 0x3
+ 23627 8ebc 00000000 .quad KAESBlockCipherVecAesNiRijndaelSBoxV
+ 23627 00000000
+ 23628 8ec4 06 .uleb128 0x6
+ 23629 8ec5 9E8E0000 .long 0x8e9e
+ 23630 8ec9 2F .uleb128 0x2f
+ 23631 8eca 00000000 .long .LASF392
+ 23632 8ece 03 .byte 0x3
+ 23633 8ecf 2F03 .value 0x32f
+ 23634 8ed1 DF8E0000 .long 0x8edf
+ 23635 8ed5 09 .byte 0x9
+ 23636 8ed6 03 .byte 0x3
+ 23637 8ed7 00000000 .quad KAESBlockCipherVecAesNiRijndaelInvSBoxV
+ 23637 00000000
+ 23638 8edf 06 .uleb128 0x6
+ 23639 8ee0 9E8E0000 .long 0x8e9e
+
GAS LISTING /tmp/ccPaCTqg.s page 592
+
+
+ 23640 8ee4 2F .uleb128 0x2f
+ 23641 8ee5 00000000 .long .LASF393
+ 23642 8ee9 03 .byte 0x3
+ 23643 8eea 4603 .value 0x346
+ 23644 8eec F60D0000 .long 0xdf6
+ 23645 8ef0 09 .byte 0x9
+ 23646 8ef1 03 .byte 0x3
+ 23647 8ef2 00000000 .quad lo_filter
+ 23647 00000000
+ 23648 8efa 2F .uleb128 0x2f
+ 23649 8efb 00000000 .long .LASF394
+ 23650 8eff 03 .byte 0x3
+ 23651 8f00 9703 .value 0x397
+ 23652 8f02 F60D0000 .long 0xdf6
+ 23653 8f06 09 .byte 0x9
+ 23654 8f07 03 .byte 0x3
+ 23655 8f08 00000000 .quad FF_tab
+ 23655 00000000
+ 23656 8f10 09 .uleb128 0x9
+ 23657 8f11 14040000 .long 0x414
+ 23658 8f15 208F0000 .long 0x8f20
+ 23659 8f19 0A .uleb128 0xa
+ 23660 8f1a 9C000000 .long 0x9c
+ 23661 8f1e 07 .byte 0x7
+ 23662 8f1f 00 .byte 0x0
+ 23663 8f20 2F .uleb128 0x2f
+ 23664 8f21 00000000 .long .LASF395
+ 23665 8f25 03 .byte 0x3
+ 23666 8f26 DF03 .value 0x3df
+ 23667 8f28 108F0000 .long 0x8f10
+ 23668 8f2c 09 .byte 0x9
+ 23669 8f2d 03 .byte 0x3
+ 23670 8f2e 00000000 .quad KAESBlockCipherVecAesNiFFtable
+ 23670 00000000
+ 23671 8f36 09 .uleb128 0x9
+ 23672 8f37 1F040000 .long 0x41f
+ 23673 8f3b 468F0000 .long 0x8f46
+ 23674 8f3f 0A .uleb128 0xa
+ 23675 8f40 9C000000 .long 0x9c
+ 23676 8f44 09 .byte 0x9
+ 23677 8f45 00 .byte 0x0
+ 23678 8f46 2F .uleb128 0x2f
+ 23679 8f47 00000000 .long .LASF396
+ 23680 8f4b 03 .byte 0x3
+ 23681 8f4c 9E04 .value 0x49e
+ 23682 8f4e 5C8F0000 .long 0x8f5c
+ 23683 8f52 09 .byte 0x9
+ 23684 8f53 03 .byte 0x3
+ 23685 8f54 00000000 .quad KAESBlockCipherVecAesNiRcon
+ 23685 00000000
+ 23686 8f5c 06 .uleb128 0x6
+ 23687 8f5d 368F0000 .long 0x8f36
+ 23688 8f61 09 .uleb128 0x9
+ 23689 8f62 9F000000 .long 0x9f
+ 23690 8f66 718F0000 .long 0x8f71
+ 23691 8f6a 0A .uleb128 0xa
+ 23692 8f6b 9C000000 .long 0x9c
+
GAS LISTING /tmp/ccPaCTqg.s page 593
+
+
+ 23693 8f6f 09 .byte 0x9
+ 23694 8f70 00 .byte 0x0
+ 23695 8f71 2F .uleb128 0x2f
+ 23696 8f72 00000000 .long .LASF397
+ 23697 8f76 03 .byte 0x3
+ 23698 8f77 F708 .value 0x8f7
+ 23699 8f79 878F0000 .long 0x8f87
+ 23700 8f7d 09 .byte 0x9
+ 23701 8f7e 03 .byte 0x3
+ 23702 8f7f 00000000 .quad KAESBlockCipherVecAesNiaes_ncbi_name
+ 23702 00000000
+ 23703 8f87 06 .uleb128 0x6
+ 23704 8f88 618F0000 .long 0x8f61
+ 23705 8f8c 2F .uleb128 0x2f
+ 23706 8f8d 00000000 .long .LASF398
+ 23707 8f91 03 .byte 0x3
+ 23708 8f92 240A .value 0xa24
+ 23709 8f94 A28F0000 .long 0x8fa2
+ 23710 8f98 09 .byte 0x9
+ 23711 8f99 03 .byte 0x3
+ 23712 8f9a 00000000 .quad KAESBlockCipherVecAesNi_vt_
+ 23712 00000000
+ 23713 8fa2 06 .uleb128 0x6
+ 23714 8fa3 27030000 .long 0x327
+ 23715 8fa7 00 .byte 0x0
+ 23716 .section .debug_abbrev
+ 23717 0000 01 .uleb128 0x1
+ 23718 0001 11 .uleb128 0x11
+ 23719 0002 01 .byte 0x1
+ 23720 0003 25 .uleb128 0x25
+ 23721 0004 0E .uleb128 0xe
+ 23722 0005 13 .uleb128 0x13
+ 23723 0006 0B .uleb128 0xb
+ 23724 0007 03 .uleb128 0x3
+ 23725 0008 0E .uleb128 0xe
+ 23726 0009 1B .uleb128 0x1b
+ 23727 000a 0E .uleb128 0xe
+ 23728 000b 11 .uleb128 0x11
+ 23729 000c 01 .uleb128 0x1
+ 23730 000d 12 .uleb128 0x12
+ 23731 000e 01 .uleb128 0x1
+ 23732 000f 10 .uleb128 0x10
+ 23733 0010 06 .uleb128 0x6
+ 23734 0011 00 .byte 0x0
+ 23735 0012 00 .byte 0x0
+ 23736 0013 02 .uleb128 0x2
+ 23737 0014 24 .uleb128 0x24
+ 23738 0015 00 .byte 0x0
+ 23739 0016 0B .uleb128 0xb
+ 23740 0017 0B .uleb128 0xb
+ 23741 0018 3E .uleb128 0x3e
+ 23742 0019 0B .uleb128 0xb
+ 23743 001a 03 .uleb128 0x3
+ 23744 001b 0E .uleb128 0xe
+ 23745 001c 00 .byte 0x0
+ 23746 001d 00 .byte 0x0
+ 23747 001e 03 .uleb128 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 594
+
+
+ 23748 001f 16 .uleb128 0x16
+ 23749 0020 00 .byte 0x0
+ 23750 0021 03 .uleb128 0x3
+ 23751 0022 0E .uleb128 0xe
+ 23752 0023 3A .uleb128 0x3a
+ 23753 0024 0B .uleb128 0xb
+ 23754 0025 3B .uleb128 0x3b
+ 23755 0026 0B .uleb128 0xb
+ 23756 0027 49 .uleb128 0x49
+ 23757 0028 13 .uleb128 0x13
+ 23758 0029 00 .byte 0x0
+ 23759 002a 00 .byte 0x0
+ 23760 002b 04 .uleb128 0x4
+ 23761 002c 24 .uleb128 0x24
+ 23762 002d 00 .byte 0x0
+ 23763 002e 0B .uleb128 0xb
+ 23764 002f 0B .uleb128 0xb
+ 23765 0030 3E .uleb128 0x3e
+ 23766 0031 0B .uleb128 0xb
+ 23767 0032 03 .uleb128 0x3
+ 23768 0033 08 .uleb128 0x8
+ 23769 0034 00 .byte 0x0
+ 23770 0035 00 .byte 0x0
+ 23771 0036 05 .uleb128 0x5
+ 23772 0037 24 .uleb128 0x24
+ 23773 0038 00 .byte 0x0
+ 23774 0039 0B .uleb128 0xb
+ 23775 003a 0B .uleb128 0xb
+ 23776 003b 3E .uleb128 0x3e
+ 23777 003c 0B .uleb128 0xb
+ 23778 003d 00 .byte 0x0
+ 23779 003e 00 .byte 0x0
+ 23780 003f 06 .uleb128 0x6
+ 23781 0040 26 .uleb128 0x26
+ 23782 0041 00 .byte 0x0
+ 23783 0042 49 .uleb128 0x49
+ 23784 0043 13 .uleb128 0x13
+ 23785 0044 00 .byte 0x0
+ 23786 0045 00 .byte 0x0
+ 23787 0046 07 .uleb128 0x7
+ 23788 0047 0F .uleb128 0xf
+ 23789 0048 00 .byte 0x0
+ 23790 0049 0B .uleb128 0xb
+ 23791 004a 0B .uleb128 0xb
+ 23792 004b 49 .uleb128 0x49
+ 23793 004c 13 .uleb128 0x13
+ 23794 004d 00 .byte 0x0
+ 23795 004e 00 .byte 0x0
+ 23796 004f 08 .uleb128 0x8
+ 23797 0050 0F .uleb128 0xf
+ 23798 0051 00 .byte 0x0
+ 23799 0052 0B .uleb128 0xb
+ 23800 0053 0B .uleb128 0xb
+ 23801 0054 00 .byte 0x0
+ 23802 0055 00 .byte 0x0
+ 23803 0056 09 .uleb128 0x9
+ 23804 0057 01 .uleb128 0x1
+
GAS LISTING /tmp/ccPaCTqg.s page 595
+
+
+ 23805 0058 01 .byte 0x1
+ 23806 0059 49 .uleb128 0x49
+ 23807 005a 13 .uleb128 0x13
+ 23808 005b 01 .uleb128 0x1
+ 23809 005c 13 .uleb128 0x13
+ 23810 005d 00 .byte 0x0
+ 23811 005e 00 .byte 0x0
+ 23812 005f 0A .uleb128 0xa
+ 23813 0060 21 .uleb128 0x21
+ 23814 0061 00 .byte 0x0
+ 23815 0062 49 .uleb128 0x49
+ 23816 0063 13 .uleb128 0x13
+ 23817 0064 2F .uleb128 0x2f
+ 23818 0065 0B .uleb128 0xb
+ 23819 0066 00 .byte 0x0
+ 23820 0067 00 .byte 0x0
+ 23821 0068 0B .uleb128 0xb
+ 23822 0069 26 .uleb128 0x26
+ 23823 006a 00 .byte 0x0
+ 23824 006b 00 .byte 0x0
+ 23825 006c 00 .byte 0x0
+ 23826 006d 0C .uleb128 0xc
+ 23827 006e 01 .uleb128 0x1
+ 23828 006f 00 .byte 0x0
+ 23829 0070 8742 .uleb128 0x2107
+ 23830 0072 0C .uleb128 0xc
+ 23831 0073 49 .uleb128 0x49
+ 23832 0074 13 .uleb128 0x13
+ 23833 0075 00 .byte 0x0
+ 23834 0076 00 .byte 0x0
+ 23835 0077 0D .uleb128 0xd
+ 23836 0078 04 .uleb128 0x4
+ 23837 0079 01 .byte 0x1
+ 23838 007a 0B .uleb128 0xb
+ 23839 007b 0B .uleb128 0xb
+ 23840 007c 3A .uleb128 0x3a
+ 23841 007d 0B .uleb128 0xb
+ 23842 007e 3B .uleb128 0x3b
+ 23843 007f 0B .uleb128 0xb
+ 23844 0080 01 .uleb128 0x1
+ 23845 0081 13 .uleb128 0x13
+ 23846 0082 00 .byte 0x0
+ 23847 0083 00 .byte 0x0
+ 23848 0084 0E .uleb128 0xe
+ 23849 0085 28 .uleb128 0x28
+ 23850 0086 00 .byte 0x0
+ 23851 0087 03 .uleb128 0x3
+ 23852 0088 0E .uleb128 0xe
+ 23853 0089 1C .uleb128 0x1c
+ 23854 008a 0D .uleb128 0xd
+ 23855 008b 00 .byte 0x0
+ 23856 008c 00 .byte 0x0
+ 23857 008d 0F .uleb128 0xf
+ 23858 008e 04 .uleb128 0x4
+ 23859 008f 01 .byte 0x1
+ 23860 0090 0B .uleb128 0xb
+ 23861 0091 0B .uleb128 0xb
+
GAS LISTING /tmp/ccPaCTqg.s page 596
+
+
+ 23862 0092 3A .uleb128 0x3a
+ 23863 0093 0B .uleb128 0xb
+ 23864 0094 3B .uleb128 0x3b
+ 23865 0095 05 .uleb128 0x5
+ 23866 0096 01 .uleb128 0x1
+ 23867 0097 13 .uleb128 0x13
+ 23868 0098 00 .byte 0x0
+ 23869 0099 00 .byte 0x0
+ 23870 009a 10 .uleb128 0x10
+ 23871 009b 13 .uleb128 0x13
+ 23872 009c 01 .byte 0x1
+ 23873 009d 03 .uleb128 0x3
+ 23874 009e 0E .uleb128 0xe
+ 23875 009f 0B .uleb128 0xb
+ 23876 00a0 0B .uleb128 0xb
+ 23877 00a1 3A .uleb128 0x3a
+ 23878 00a2 0B .uleb128 0xb
+ 23879 00a3 3B .uleb128 0x3b
+ 23880 00a4 0B .uleb128 0xb
+ 23881 00a5 01 .uleb128 0x1
+ 23882 00a6 13 .uleb128 0x13
+ 23883 00a7 00 .byte 0x0
+ 23884 00a8 00 .byte 0x0
+ 23885 00a9 11 .uleb128 0x11
+ 23886 00aa 0D .uleb128 0xd
+ 23887 00ab 00 .byte 0x0
+ 23888 00ac 03 .uleb128 0x3
+ 23889 00ad 08 .uleb128 0x8
+ 23890 00ae 3A .uleb128 0x3a
+ 23891 00af 0B .uleb128 0xb
+ 23892 00b0 3B .uleb128 0x3b
+ 23893 00b1 0B .uleb128 0xb
+ 23894 00b2 49 .uleb128 0x49
+ 23895 00b3 13 .uleb128 0x13
+ 23896 00b4 38 .uleb128 0x38
+ 23897 00b5 0A .uleb128 0xa
+ 23898 00b6 00 .byte 0x0
+ 23899 00b7 00 .byte 0x0
+ 23900 00b8 12 .uleb128 0x12
+ 23901 00b9 0D .uleb128 0xd
+ 23902 00ba 00 .byte 0x0
+ 23903 00bb 03 .uleb128 0x3
+ 23904 00bc 0E .uleb128 0xe
+ 23905 00bd 3A .uleb128 0x3a
+ 23906 00be 0B .uleb128 0xb
+ 23907 00bf 3B .uleb128 0x3b
+ 23908 00c0 0B .uleb128 0xb
+ 23909 00c1 49 .uleb128 0x49
+ 23910 00c2 13 .uleb128 0x13
+ 23911 00c3 38 .uleb128 0x38
+ 23912 00c4 0A .uleb128 0xa
+ 23913 00c5 00 .byte 0x0
+ 23914 00c6 00 .byte 0x0
+ 23915 00c7 13 .uleb128 0x13
+ 23916 00c8 17 .uleb128 0x17
+ 23917 00c9 01 .byte 0x1
+ 23918 00ca 03 .uleb128 0x3
+
GAS LISTING /tmp/ccPaCTqg.s page 597
+
+
+ 23919 00cb 0E .uleb128 0xe
+ 23920 00cc 0B .uleb128 0xb
+ 23921 00cd 0B .uleb128 0xb
+ 23922 00ce 3A .uleb128 0x3a
+ 23923 00cf 0B .uleb128 0xb
+ 23924 00d0 3B .uleb128 0x3b
+ 23925 00d1 0B .uleb128 0xb
+ 23926 00d2 01 .uleb128 0x1
+ 23927 00d3 13 .uleb128 0x13
+ 23928 00d4 00 .byte 0x0
+ 23929 00d5 00 .byte 0x0
+ 23930 00d6 14 .uleb128 0x14
+ 23931 00d7 0D .uleb128 0xd
+ 23932 00d8 00 .byte 0x0
+ 23933 00d9 03 .uleb128 0x3
+ 23934 00da 0E .uleb128 0xe
+ 23935 00db 3A .uleb128 0x3a
+ 23936 00dc 0B .uleb128 0xb
+ 23937 00dd 3B .uleb128 0x3b
+ 23938 00de 0B .uleb128 0xb
+ 23939 00df 49 .uleb128 0x49
+ 23940 00e0 13 .uleb128 0x13
+ 23941 00e1 00 .byte 0x0
+ 23942 00e2 00 .byte 0x0
+ 23943 00e3 15 .uleb128 0x15
+ 23944 00e4 0D .uleb128 0xd
+ 23945 00e5 00 .byte 0x0
+ 23946 00e6 03 .uleb128 0x3
+ 23947 00e7 08 .uleb128 0x8
+ 23948 00e8 3A .uleb128 0x3a
+ 23949 00e9 0B .uleb128 0xb
+ 23950 00ea 3B .uleb128 0x3b
+ 23951 00eb 0B .uleb128 0xb
+ 23952 00ec 49 .uleb128 0x49
+ 23953 00ed 13 .uleb128 0x13
+ 23954 00ee 00 .byte 0x0
+ 23955 00ef 00 .byte 0x0
+ 23956 00f0 16 .uleb128 0x16
+ 23957 00f1 15 .uleb128 0x15
+ 23958 00f2 01 .byte 0x1
+ 23959 00f3 27 .uleb128 0x27
+ 23960 00f4 0C .uleb128 0xc
+ 23961 00f5 01 .uleb128 0x1
+ 23962 00f6 13 .uleb128 0x13
+ 23963 00f7 00 .byte 0x0
+ 23964 00f8 00 .byte 0x0
+ 23965 00f9 17 .uleb128 0x17
+ 23966 00fa 05 .uleb128 0x5
+ 23967 00fb 00 .byte 0x0
+ 23968 00fc 49 .uleb128 0x49
+ 23969 00fd 13 .uleb128 0x13
+ 23970 00fe 00 .byte 0x0
+ 23971 00ff 00 .byte 0x0
+ 23972 0100 18 .uleb128 0x18
+ 23973 0101 15 .uleb128 0x15
+ 23974 0102 01 .byte 0x1
+ 23975 0103 49 .uleb128 0x49
+
GAS LISTING /tmp/ccPaCTqg.s page 598
+
+
+ 23976 0104 13 .uleb128 0x13
+ 23977 0105 01 .uleb128 0x1
+ 23978 0106 13 .uleb128 0x13
+ 23979 0107 00 .byte 0x0
+ 23980 0108 00 .byte 0x0
+ 23981 0109 19 .uleb128 0x19
+ 23982 010a 18 .uleb128 0x18
+ 23983 010b 00 .byte 0x0
+ 23984 010c 00 .byte 0x0
+ 23985 010d 00 .byte 0x0
+ 23986 010e 1A .uleb128 0x1a
+ 23987 010f 15 .uleb128 0x15
+ 23988 0110 01 .byte 0x1
+ 23989 0111 27 .uleb128 0x27
+ 23990 0112 0C .uleb128 0xc
+ 23991 0113 49 .uleb128 0x49
+ 23992 0114 13 .uleb128 0x13
+ 23993 0115 01 .uleb128 0x1
+ 23994 0116 13 .uleb128 0x13
+ 23995 0117 00 .byte 0x0
+ 23996 0118 00 .byte 0x0
+ 23997 0119 1B .uleb128 0x1b
+ 23998 011a 13 .uleb128 0x13
+ 23999 011b 01 .byte 0x1
+ 24000 011c 03 .uleb128 0x3
+ 24001 011d 0E .uleb128 0xe
+ 24002 011e 0B .uleb128 0xb
+ 24003 011f 05 .uleb128 0x5
+ 24004 0120 3A .uleb128 0x3a
+ 24005 0121 0B .uleb128 0xb
+ 24006 0122 3B .uleb128 0x3b
+ 24007 0123 0B .uleb128 0xb
+ 24008 0124 01 .uleb128 0x1
+ 24009 0125 13 .uleb128 0x13
+ 24010 0126 00 .byte 0x0
+ 24011 0127 00 .byte 0x0
+ 24012 0128 1C .uleb128 0x1c
+ 24013 0129 17 .uleb128 0x17
+ 24014 012a 01 .byte 0x1
+ 24015 012b 0B .uleb128 0xb
+ 24016 012c 0B .uleb128 0xb
+ 24017 012d 3A .uleb128 0x3a
+ 24018 012e 0B .uleb128 0xb
+ 24019 012f 3B .uleb128 0x3b
+ 24020 0130 0B .uleb128 0xb
+ 24021 0131 01 .uleb128 0x1
+ 24022 0132 13 .uleb128 0x13
+ 24023 0133 00 .byte 0x0
+ 24024 0134 00 .byte 0x0
+ 24025 0135 1D .uleb128 0x1d
+ 24026 0136 04 .uleb128 0x4
+ 24027 0137 01 .byte 0x1
+ 24028 0138 03 .uleb128 0x3
+ 24029 0139 0E .uleb128 0xe
+ 24030 013a 0B .uleb128 0xb
+ 24031 013b 0B .uleb128 0xb
+ 24032 013c 3A .uleb128 0x3a
+
GAS LISTING /tmp/ccPaCTqg.s page 599
+
+
+ 24033 013d 0B .uleb128 0xb
+ 24034 013e 3B .uleb128 0x3b
+ 24035 013f 0B .uleb128 0xb
+ 24036 0140 01 .uleb128 0x1
+ 24037 0141 13 .uleb128 0x13
+ 24038 0142 00 .byte 0x0
+ 24039 0143 00 .byte 0x0
+ 24040 0144 1E .uleb128 0x1e
+ 24041 0145 04 .uleb128 0x4
+ 24042 0146 01 .byte 0x1
+ 24043 0147 03 .uleb128 0x3
+ 24044 0148 0E .uleb128 0xe
+ 24045 0149 0B .uleb128 0xb
+ 24046 014a 0B .uleb128 0xb
+ 24047 014b 3A .uleb128 0x3a
+ 24048 014c 0B .uleb128 0xb
+ 24049 014d 3B .uleb128 0x3b
+ 24050 014e 05 .uleb128 0x5
+ 24051 014f 01 .uleb128 0x1
+ 24052 0150 13 .uleb128 0x13
+ 24053 0151 00 .byte 0x0
+ 24054 0152 00 .byte 0x0
+ 24055 0153 1F .uleb128 0x1f
+ 24056 0154 2E .uleb128 0x2e
+ 24057 0155 01 .byte 0x1
+ 24058 0156 03 .uleb128 0x3
+ 24059 0157 0E .uleb128 0xe
+ 24060 0158 3A .uleb128 0x3a
+ 24061 0159 0B .uleb128 0xb
+ 24062 015a 3B .uleb128 0x3b
+ 24063 015b 05 .uleb128 0x5
+ 24064 015c 27 .uleb128 0x27
+ 24065 015d 0C .uleb128 0xc
+ 24066 015e 49 .uleb128 0x49
+ 24067 015f 13 .uleb128 0x13
+ 24068 0160 11 .uleb128 0x11
+ 24069 0161 01 .uleb128 0x1
+ 24070 0162 12 .uleb128 0x12
+ 24071 0163 01 .uleb128 0x1
+ 24072 0164 40 .uleb128 0x40
+ 24073 0165 06 .uleb128 0x6
+ 24074 0166 01 .uleb128 0x1
+ 24075 0167 13 .uleb128 0x13
+ 24076 0168 00 .byte 0x0
+ 24077 0169 00 .byte 0x0
+ 24078 016a 20 .uleb128 0x20
+ 24079 016b 05 .uleb128 0x5
+ 24080 016c 00 .byte 0x0
+ 24081 016d 03 .uleb128 0x3
+ 24082 016e 0E .uleb128 0xe
+ 24083 016f 3A .uleb128 0x3a
+ 24084 0170 0B .uleb128 0xb
+ 24085 0171 3B .uleb128 0x3b
+ 24086 0172 05 .uleb128 0x5
+ 24087 0173 49 .uleb128 0x49
+ 24088 0174 13 .uleb128 0x13
+ 24089 0175 02 .uleb128 0x2
+
GAS LISTING /tmp/ccPaCTqg.s page 600
+
+
+ 24090 0176 0A .uleb128 0xa
+ 24091 0177 00 .byte 0x0
+ 24092 0178 00 .byte 0x0
+ 24093 0179 21 .uleb128 0x21
+ 24094 017a 2E .uleb128 0x2e
+ 24095 017b 01 .byte 0x1
+ 24096 017c 03 .uleb128 0x3
+ 24097 017d 0E .uleb128 0xe
+ 24098 017e 3A .uleb128 0x3a
+ 24099 017f 0B .uleb128 0xb
+ 24100 0180 3B .uleb128 0x3b
+ 24101 0181 0B .uleb128 0xb
+ 24102 0182 27 .uleb128 0x27
+ 24103 0183 0C .uleb128 0xc
+ 24104 0184 49 .uleb128 0x49
+ 24105 0185 13 .uleb128 0x13
+ 24106 0186 11 .uleb128 0x11
+ 24107 0187 01 .uleb128 0x1
+ 24108 0188 12 .uleb128 0x12
+ 24109 0189 01 .uleb128 0x1
+ 24110 018a 40 .uleb128 0x40
+ 24111 018b 06 .uleb128 0x6
+ 24112 018c 01 .uleb128 0x1
+ 24113 018d 13 .uleb128 0x13
+ 24114 018e 00 .byte 0x0
+ 24115 018f 00 .byte 0x0
+ 24116 0190 22 .uleb128 0x22
+ 24117 0191 05 .uleb128 0x5
+ 24118 0192 00 .byte 0x0
+ 24119 0193 03 .uleb128 0x3
+ 24120 0194 08 .uleb128 0x8
+ 24121 0195 3A .uleb128 0x3a
+ 24122 0196 0B .uleb128 0xb
+ 24123 0197 3B .uleb128 0x3b
+ 24124 0198 0B .uleb128 0xb
+ 24125 0199 49 .uleb128 0x49
+ 24126 019a 13 .uleb128 0x13
+ 24127 019b 02 .uleb128 0x2
+ 24128 019c 0A .uleb128 0xa
+ 24129 019d 00 .byte 0x0
+ 24130 019e 00 .byte 0x0
+ 24131 019f 23 .uleb128 0x23
+ 24132 01a0 34 .uleb128 0x34
+ 24133 01a1 00 .byte 0x0
+ 24134 01a2 03 .uleb128 0x3
+ 24135 01a3 08 .uleb128 0x8
+ 24136 01a4 3A .uleb128 0x3a
+ 24137 01a5 0B .uleb128 0xb
+ 24138 01a6 3B .uleb128 0x3b
+ 24139 01a7 0B .uleb128 0xb
+ 24140 01a8 49 .uleb128 0x49
+ 24141 01a9 13 .uleb128 0x13
+ 24142 01aa 02 .uleb128 0x2
+ 24143 01ab 0A .uleb128 0xa
+ 24144 01ac 00 .byte 0x0
+ 24145 01ad 00 .byte 0x0
+ 24146 01ae 24 .uleb128 0x24
+
GAS LISTING /tmp/ccPaCTqg.s page 601
+
+
+ 24147 01af 2E .uleb128 0x2e
+ 24148 01b0 01 .byte 0x1
+ 24149 01b1 03 .uleb128 0x3
+ 24150 01b2 0E .uleb128 0xe
+ 24151 01b3 3A .uleb128 0x3a
+ 24152 01b4 0B .uleb128 0xb
+ 24153 01b5 3B .uleb128 0x3b
+ 24154 01b6 0B .uleb128 0xb
+ 24155 01b7 27 .uleb128 0x27
+ 24156 01b8 0C .uleb128 0xc
+ 24157 01b9 49 .uleb128 0x49
+ 24158 01ba 13 .uleb128 0x13
+ 24159 01bb 20 .uleb128 0x20
+ 24160 01bc 0B .uleb128 0xb
+ 24161 01bd 01 .uleb128 0x1
+ 24162 01be 13 .uleb128 0x13
+ 24163 01bf 00 .byte 0x0
+ 24164 01c0 00 .byte 0x0
+ 24165 01c1 25 .uleb128 0x25
+ 24166 01c2 05 .uleb128 0x5
+ 24167 01c3 00 .byte 0x0
+ 24168 01c4 03 .uleb128 0x3
+ 24169 01c5 08 .uleb128 0x8
+ 24170 01c6 3A .uleb128 0x3a
+ 24171 01c7 0B .uleb128 0xb
+ 24172 01c8 3B .uleb128 0x3b
+ 24173 01c9 0B .uleb128 0xb
+ 24174 01ca 49 .uleb128 0x49
+ 24175 01cb 13 .uleb128 0x13
+ 24176 01cc 00 .byte 0x0
+ 24177 01cd 00 .byte 0x0
+ 24178 01ce 26 .uleb128 0x26
+ 24179 01cf 34 .uleb128 0x34
+ 24180 01d0 00 .byte 0x0
+ 24181 01d1 03 .uleb128 0x3
+ 24182 01d2 08 .uleb128 0x8
+ 24183 01d3 3A .uleb128 0x3a
+ 24184 01d4 0B .uleb128 0xb
+ 24185 01d5 3B .uleb128 0x3b
+ 24186 01d6 0B .uleb128 0xb
+ 24187 01d7 49 .uleb128 0x49
+ 24188 01d8 13 .uleb128 0x13
+ 24189 01d9 00 .byte 0x0
+ 24190 01da 00 .byte 0x0
+ 24191 01db 27 .uleb128 0x27
+ 24192 01dc 2E .uleb128 0x2e
+ 24193 01dd 01 .byte 0x1
+ 24194 01de 03 .uleb128 0x3
+ 24195 01df 0E .uleb128 0xe
+ 24196 01e0 3A .uleb128 0x3a
+ 24197 01e1 0B .uleb128 0xb
+ 24198 01e2 3B .uleb128 0x3b
+ 24199 01e3 05 .uleb128 0x5
+ 24200 01e4 27 .uleb128 0x27
+ 24201 01e5 0C .uleb128 0xc
+ 24202 01e6 49 .uleb128 0x49
+ 24203 01e7 13 .uleb128 0x13
+
GAS LISTING /tmp/ccPaCTqg.s page 602
+
+
+ 24204 01e8 20 .uleb128 0x20
+ 24205 01e9 0B .uleb128 0xb
+ 24206 01ea 01 .uleb128 0x1
+ 24207 01eb 13 .uleb128 0x13
+ 24208 01ec 00 .byte 0x0
+ 24209 01ed 00 .byte 0x0
+ 24210 01ee 28 .uleb128 0x28
+ 24211 01ef 05 .uleb128 0x5
+ 24212 01f0 00 .byte 0x0
+ 24213 01f1 03 .uleb128 0x3
+ 24214 01f2 0E .uleb128 0xe
+ 24215 01f3 3A .uleb128 0x3a
+ 24216 01f4 0B .uleb128 0xb
+ 24217 01f5 3B .uleb128 0x3b
+ 24218 01f6 05 .uleb128 0x5
+ 24219 01f7 49 .uleb128 0x49
+ 24220 01f8 13 .uleb128 0x13
+ 24221 01f9 00 .byte 0x0
+ 24222 01fa 00 .byte 0x0
+ 24223 01fb 29 .uleb128 0x29
+ 24224 01fc 34 .uleb128 0x34
+ 24225 01fd 00 .byte 0x0
+ 24226 01fe 03 .uleb128 0x3
+ 24227 01ff 08 .uleb128 0x8
+ 24228 0200 3A .uleb128 0x3a
+ 24229 0201 0B .uleb128 0xb
+ 24230 0202 3B .uleb128 0x3b
+ 24231 0203 05 .uleb128 0x5
+ 24232 0204 49 .uleb128 0x49
+ 24233 0205 13 .uleb128 0x13
+ 24234 0206 00 .byte 0x0
+ 24235 0207 00 .byte 0x0
+ 24236 0208 2A .uleb128 0x2a
+ 24237 0209 05 .uleb128 0x5
+ 24238 020a 00 .byte 0x0
+ 24239 020b 03 .uleb128 0x3
+ 24240 020c 08 .uleb128 0x8
+ 24241 020d 3A .uleb128 0x3a
+ 24242 020e 0B .uleb128 0xb
+ 24243 020f 3B .uleb128 0x3b
+ 24244 0210 05 .uleb128 0x5
+ 24245 0211 49 .uleb128 0x49
+ 24246 0212 13 .uleb128 0x13
+ 24247 0213 00 .byte 0x0
+ 24248 0214 00 .byte 0x0
+ 24249 0215 2B .uleb128 0x2b
+ 24250 0216 34 .uleb128 0x34
+ 24251 0217 00 .byte 0x0
+ 24252 0218 03 .uleb128 0x3
+ 24253 0219 0E .uleb128 0xe
+ 24254 021a 3A .uleb128 0x3a
+ 24255 021b 0B .uleb128 0xb
+ 24256 021c 3B .uleb128 0x3b
+ 24257 021d 05 .uleb128 0x5
+ 24258 021e 49 .uleb128 0x49
+ 24259 021f 13 .uleb128 0x13
+ 24260 0220 00 .byte 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 603
+
+
+ 24261 0221 00 .byte 0x0
+ 24262 0222 2C .uleb128 0x2c
+ 24263 0223 34 .uleb128 0x34
+ 24264 0224 00 .byte 0x0
+ 24265 0225 03 .uleb128 0x3
+ 24266 0226 0E .uleb128 0xe
+ 24267 0227 3A .uleb128 0x3a
+ 24268 0228 0B .uleb128 0xb
+ 24269 0229 3B .uleb128 0x3b
+ 24270 022a 05 .uleb128 0x5
+ 24271 022b 49 .uleb128 0x49
+ 24272 022c 13 .uleb128 0x13
+ 24273 022d 1C .uleb128 0x1c
+ 24274 022e 0A .uleb128 0xa
+ 24275 022f 00 .byte 0x0
+ 24276 0230 00 .byte 0x0
+ 24277 0231 2D .uleb128 0x2d
+ 24278 0232 2E .uleb128 0x2e
+ 24279 0233 01 .byte 0x1
+ 24280 0234 03 .uleb128 0x3
+ 24281 0235 0E .uleb128 0xe
+ 24282 0236 3A .uleb128 0x3a
+ 24283 0237 0B .uleb128 0xb
+ 24284 0238 3B .uleb128 0x3b
+ 24285 0239 05 .uleb128 0x5
+ 24286 023a 27 .uleb128 0x27
+ 24287 023b 0C .uleb128 0xc
+ 24288 023c 11 .uleb128 0x11
+ 24289 023d 01 .uleb128 0x1
+ 24290 023e 12 .uleb128 0x12
+ 24291 023f 01 .uleb128 0x1
+ 24292 0240 40 .uleb128 0x40
+ 24293 0241 06 .uleb128 0x6
+ 24294 0242 01 .uleb128 0x1
+ 24295 0243 13 .uleb128 0x13
+ 24296 0244 00 .byte 0x0
+ 24297 0245 00 .byte 0x0
+ 24298 0246 2E .uleb128 0x2e
+ 24299 0247 05 .uleb128 0x5
+ 24300 0248 00 .byte 0x0
+ 24301 0249 03 .uleb128 0x3
+ 24302 024a 08 .uleb128 0x8
+ 24303 024b 3A .uleb128 0x3a
+ 24304 024c 0B .uleb128 0xb
+ 24305 024d 3B .uleb128 0x3b
+ 24306 024e 05 .uleb128 0x5
+ 24307 024f 49 .uleb128 0x49
+ 24308 0250 13 .uleb128 0x13
+ 24309 0251 02 .uleb128 0x2
+ 24310 0252 0A .uleb128 0xa
+ 24311 0253 00 .byte 0x0
+ 24312 0254 00 .byte 0x0
+ 24313 0255 2F .uleb128 0x2f
+ 24314 0256 34 .uleb128 0x34
+ 24315 0257 00 .byte 0x0
+ 24316 0258 03 .uleb128 0x3
+ 24317 0259 0E .uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s page 604
+
+
+ 24318 025a 3A .uleb128 0x3a
+ 24319 025b 0B .uleb128 0xb
+ 24320 025c 3B .uleb128 0x3b
+ 24321 025d 05 .uleb128 0x5
+ 24322 025e 49 .uleb128 0x49
+ 24323 025f 13 .uleb128 0x13
+ 24324 0260 02 .uleb128 0x2
+ 24325 0261 0A .uleb128 0xa
+ 24326 0262 00 .byte 0x0
+ 24327 0263 00 .byte 0x0
+ 24328 0264 30 .uleb128 0x30
+ 24329 0265 1D .uleb128 0x1d
+ 24330 0266 01 .byte 0x1
+ 24331 0267 31 .uleb128 0x31
+ 24332 0268 13 .uleb128 0x13
+ 24333 0269 11 .uleb128 0x11
+ 24334 026a 01 .uleb128 0x1
+ 24335 026b 12 .uleb128 0x12
+ 24336 026c 01 .uleb128 0x1
+ 24337 026d 58 .uleb128 0x58
+ 24338 026e 0B .uleb128 0xb
+ 24339 026f 59 .uleb128 0x59
+ 24340 0270 05 .uleb128 0x5
+ 24341 0271 01 .uleb128 0x1
+ 24342 0272 13 .uleb128 0x13
+ 24343 0273 00 .byte 0x0
+ 24344 0274 00 .byte 0x0
+ 24345 0275 31 .uleb128 0x31
+ 24346 0276 05 .uleb128 0x5
+ 24347 0277 00 .byte 0x0
+ 24348 0278 31 .uleb128 0x31
+ 24349 0279 13 .uleb128 0x13
+ 24350 027a 02 .uleb128 0x2
+ 24351 027b 0A .uleb128 0xa
+ 24352 027c 00 .byte 0x0
+ 24353 027d 00 .byte 0x0
+ 24354 027e 32 .uleb128 0x32
+ 24355 027f 0B .uleb128 0xb
+ 24356 0280 01 .byte 0x1
+ 24357 0281 11 .uleb128 0x11
+ 24358 0282 01 .uleb128 0x1
+ 24359 0283 12 .uleb128 0x12
+ 24360 0284 01 .uleb128 0x1
+ 24361 0285 00 .byte 0x0
+ 24362 0286 00 .byte 0x0
+ 24363 0287 33 .uleb128 0x33
+ 24364 0288 34 .uleb128 0x34
+ 24365 0289 00 .byte 0x0
+ 24366 028a 31 .uleb128 0x31
+ 24367 028b 13 .uleb128 0x13
+ 24368 028c 02 .uleb128 0x2
+ 24369 028d 0A .uleb128 0xa
+ 24370 028e 00 .byte 0x0
+ 24371 028f 00 .byte 0x0
+ 24372 0290 34 .uleb128 0x34
+ 24373 0291 1D .uleb128 0x1d
+ 24374 0292 01 .byte 0x1
+
GAS LISTING /tmp/ccPaCTqg.s page 605
+
+
+ 24375 0293 31 .uleb128 0x31
+ 24376 0294 13 .uleb128 0x13
+ 24377 0295 11 .uleb128 0x11
+ 24378 0296 01 .uleb128 0x1
+ 24379 0297 12 .uleb128 0x12
+ 24380 0298 01 .uleb128 0x1
+ 24381 0299 58 .uleb128 0x58
+ 24382 029a 0B .uleb128 0xb
+ 24383 029b 59 .uleb128 0x59
+ 24384 029c 05 .uleb128 0x5
+ 24385 029d 00 .byte 0x0
+ 24386 029e 00 .byte 0x0
+ 24387 029f 35 .uleb128 0x35
+ 24388 02a0 34 .uleb128 0x34
+ 24389 02a1 00 .byte 0x0
+ 24390 02a2 03 .uleb128 0x3
+ 24391 02a3 08 .uleb128 0x8
+ 24392 02a4 3A .uleb128 0x3a
+ 24393 02a5 0B .uleb128 0xb
+ 24394 02a6 3B .uleb128 0x3b
+ 24395 02a7 05 .uleb128 0x5
+ 24396 02a8 49 .uleb128 0x49
+ 24397 02a9 13 .uleb128 0x13
+ 24398 02aa 02 .uleb128 0x2
+ 24399 02ab 0A .uleb128 0xa
+ 24400 02ac 00 .byte 0x0
+ 24401 02ad 00 .byte 0x0
+ 24402 02ae 36 .uleb128 0x36
+ 24403 02af 0B .uleb128 0xb
+ 24404 02b0 01 .byte 0x1
+ 24405 02b1 01 .uleb128 0x1
+ 24406 02b2 13 .uleb128 0x13
+ 24407 02b3 00 .byte 0x0
+ 24408 02b4 00 .byte 0x0
+ 24409 02b5 37 .uleb128 0x37
+ 24410 02b6 0B .uleb128 0xb
+ 24411 02b7 01 .byte 0x1
+ 24412 02b8 00 .byte 0x0
+ 24413 02b9 00 .byte 0x0
+ 24414 02ba 38 .uleb128 0x38
+ 24415 02bb 0B .uleb128 0xb
+ 24416 02bc 01 .byte 0x1
+ 24417 02bd 11 .uleb128 0x11
+ 24418 02be 01 .uleb128 0x1
+ 24419 02bf 12 .uleb128 0x12
+ 24420 02c0 01 .uleb128 0x1
+ 24421 02c1 01 .uleb128 0x1
+ 24422 02c2 13 .uleb128 0x13
+ 24423 02c3 00 .byte 0x0
+ 24424 02c4 00 .byte 0x0
+ 24425 02c5 39 .uleb128 0x39
+ 24426 02c6 2E .uleb128 0x2e
+ 24427 02c7 00 .byte 0x0
+ 24428 02c8 03 .uleb128 0x3
+ 24429 02c9 0E .uleb128 0xe
+ 24430 02ca 3A .uleb128 0x3a
+ 24431 02cb 0B .uleb128 0xb
+
GAS LISTING /tmp/ccPaCTqg.s page 606
+
+
+ 24432 02cc 3B .uleb128 0x3b
+ 24433 02cd 05 .uleb128 0x5
+ 24434 02ce 49 .uleb128 0x49
+ 24435 02cf 13 .uleb128 0x13
+ 24436 02d0 11 .uleb128 0x11
+ 24437 02d1 01 .uleb128 0x1
+ 24438 02d2 12 .uleb128 0x12
+ 24439 02d3 01 .uleb128 0x1
+ 24440 02d4 40 .uleb128 0x40
+ 24441 02d5 06 .uleb128 0x6
+ 24442 02d6 00 .byte 0x0
+ 24443 02d7 00 .byte 0x0
+ 24444 02d8 3A .uleb128 0x3a
+ 24445 02d9 34 .uleb128 0x34
+ 24446 02da 00 .byte 0x0
+ 24447 02db 03 .uleb128 0x3
+ 24448 02dc 0E .uleb128 0xe
+ 24449 02dd 49 .uleb128 0x49
+ 24450 02de 13 .uleb128 0x13
+ 24451 02df 34 .uleb128 0x34
+ 24452 02e0 0C .uleb128 0xc
+ 24453 02e1 02 .uleb128 0x2
+ 24454 02e2 0A .uleb128 0xa
+ 24455 02e3 00 .byte 0x0
+ 24456 02e4 00 .byte 0x0
+ 24457 02e5 3B .uleb128 0x3b
+ 24458 02e6 2E .uleb128 0x2e
+ 24459 02e7 01 .byte 0x1
+ 24460 02e8 03 .uleb128 0x3
+ 24461 02e9 0E .uleb128 0xe
+ 24462 02ea 3A .uleb128 0x3a
+ 24463 02eb 0B .uleb128 0xb
+ 24464 02ec 3B .uleb128 0x3b
+ 24465 02ed 05 .uleb128 0x5
+ 24466 02ee 49 .uleb128 0x49
+ 24467 02ef 13 .uleb128 0x13
+ 24468 02f0 11 .uleb128 0x11
+ 24469 02f1 01 .uleb128 0x1
+ 24470 02f2 12 .uleb128 0x12
+ 24471 02f3 01 .uleb128 0x1
+ 24472 02f4 40 .uleb128 0x40
+ 24473 02f5 06 .uleb128 0x6
+ 24474 02f6 01 .uleb128 0x1
+ 24475 02f7 13 .uleb128 0x13
+ 24476 02f8 00 .byte 0x0
+ 24477 02f9 00 .byte 0x0
+ 24478 02fa 3C .uleb128 0x3c
+ 24479 02fb 2E .uleb128 0x2e
+ 24480 02fc 01 .byte 0x1
+ 24481 02fd 3F .uleb128 0x3f
+ 24482 02fe 0C .uleb128 0xc
+ 24483 02ff 03 .uleb128 0x3
+ 24484 0300 0E .uleb128 0xe
+ 24485 0301 3A .uleb128 0x3a
+ 24486 0302 0B .uleb128 0xb
+ 24487 0303 3B .uleb128 0x3b
+ 24488 0304 05 .uleb128 0x5
+
GAS LISTING /tmp/ccPaCTqg.s page 607
+
+
+ 24489 0305 27 .uleb128 0x27
+ 24490 0306 0C .uleb128 0xc
+ 24491 0307 49 .uleb128 0x49
+ 24492 0308 13 .uleb128 0x13
+ 24493 0309 11 .uleb128 0x11
+ 24494 030a 01 .uleb128 0x1
+ 24495 030b 12 .uleb128 0x12
+ 24496 030c 01 .uleb128 0x1
+ 24497 030d 40 .uleb128 0x40
+ 24498 030e 06 .uleb128 0x6
+ 24499 030f 01 .uleb128 0x1
+ 24500 0310 13 .uleb128 0x13
+ 24501 0311 00 .byte 0x0
+ 24502 0312 00 .byte 0x0
+ 24503 0313 3D .uleb128 0x3d
+ 24504 0314 34 .uleb128 0x34
+ 24505 0315 00 .byte 0x0
+ 24506 0316 03 .uleb128 0x3
+ 24507 0317 0E .uleb128 0xe
+ 24508 0318 3A .uleb128 0x3a
+ 24509 0319 0B .uleb128 0xb
+ 24510 031a 3B .uleb128 0x3b
+ 24511 031b 0B .uleb128 0xb
+ 24512 031c 49 .uleb128 0x49
+ 24513 031d 13 .uleb128 0x13
+ 24514 031e 02 .uleb128 0x2
+ 24515 031f 0A .uleb128 0xa
+ 24516 0320 00 .byte 0x0
+ 24517 0321 00 .byte 0x0
+ 24518 0322 00 .byte 0x0
+ 24519 .section .debug_pubnames,"", at progbits
+ 24520 0000 2E000000 .long 0x2e
+ 24521 0004 0200 .value 0x2
+ 24522 0006 00000000 .long .Ldebug_info0
+ 24523 000a A88F0000 .long 0x8fa8
+ 24524 000e 8D8D0000 .long 0x8d8d
+ 24525 0012 4B414553 .string "KAESBlockCipherVecAesNiMake"
+ 24525 426C6F63
+ 24525 6B436970
+ 24525 68657256
+ 24525 65634165
+ 24526 002e 00000000 .long 0x0
+ 24527 .section .debug_aranges,"", at progbits
+ 24528 0000 2C000000 .long 0x2c
+ 24529 0004 0200 .value 0x2
+ 24530 0006 00000000 .long .Ldebug_info0
+ 24531 000a 08 .byte 0x8
+ 24532 000b 00 .byte 0x0
+ 24533 000c 0000 .value 0x0
+ 24534 000e 0000 .value 0x0
+ 24535 0010 00000000 .quad .Ltext0
+ 24535 00000000
+ 24536 0018 1F770000 .quad .Letext0-.Ltext0
+ 24536 00000000
+ 24537 0020 00000000 .quad 0x0
+ 24537 00000000
+ 24538 0028 00000000 .quad 0x0
+
GAS LISTING /tmp/ccPaCTqg.s page 608
+
+
+ 24538 00000000
+ 24539 .section .debug_str,"MS", at progbits,1
+ 24540 .LASF67:
+ 24541 0000 43697068 .string "CipherVec_AES_u"
+ 24541 65725665
+ 24541 635F4145
+ 24541 535F7500
+ 24542 .LASF285:
+ 24543 0010 7263496E .string "rcInsufficient"
+ 24543 73756666
+ 24543 69636965
+ 24543 6E7400
+ 24544 .LASF302:
+ 24545 001f 72634475 .string "rcDuplicate"
+ 24545 706C6963
+ 24545 61746500
+ 24546 .LASF105:
+ 24547 002b 7263436F .string "rcCondition"
+ 24547 6E646974
+ 24547 696F6E00
+ 24548 .LASF219:
+ 24549 0037 7263456E .string "rcEncrypting"
+ 24549 63727970
+ 24549 74696E67
+ 24549 00
+ 24550 .LASF178:
+ 24551 0044 72634F70 .string "rcOpening"
+ 24551 656E696E
+ 24551 6700
+ 24552 .LASF186:
+ 24553 004e 72635065 .string "rcPersisting"
+ 24553 72736973
+ 24553 74696E67
+ 24553 00
+ 24554 .LASF364:
+ 24555 005b 4B414553 .string "KAESBlockCipherVecAesNiEqInvFirstRound"
+ 24555 426C6F63
+ 24555 6B436970
+ 24555 68657256
+ 24555 65634165
+ 24556 .LASF224:
+ 24557 0082 72635365 .string "rcSending"
+ 24557 6E64696E
+ 24557 6700
+ 24558 .LASF218:
+ 24559 008c 72634170 .string "rcAppending"
+ 24559 70656E64
+ 24559 696E6700
+ 24560 .LASF204:
+ 24561 0098 72635369 .string "rcSignaling"
+ 24561 676E616C
+ 24561 696E6700
+ 24562 .LASF20:
+ 24563 00a4 4442475F .string "DBG_BLAST"
+ 24563 424C4153
+ 24563 5400
+ 24564 .LASF260:
+
GAS LISTING /tmp/ccPaCTqg.s page 609
+
+
+ 24565 00ae 72635369 .string "rcSignalSet"
+ 24565 676E616C
+ 24565 53657400
+ 24566 .LASF206:
+ 24567 00ba 72634174 .string "rcAttaching"
+ 24567 74616368
+ 24567 696E6700
+ 24568 .LASF138:
+ 24569 00c6 72635461 .string "rcTable"
+ 24569 626C6500
+ 24570 .LASF393:
+ 24571 00ce 6C6F5F66 .string "lo_filter"
+ 24571 696C7465
+ 24571 7200
+ 24572 .LASF102:
+ 24573 00d8 72634275 .string "rcBuffer"
+ 24573 66666572
+ 24573 00
+ 24574 .LASF3:
+ 24575 00e1 696E7433 .string "int32_t"
+ 24575 325F7400
+ 24576 .LASF234:
+ 24577 00e9 72634D65 .string "rcMemory"
+ 24577 6D6F7279
+ 24577 00
+ 24578 .LASF365:
+ 24579 00f2 4B414553 .string "KAESBlockCipherVecAesNiEqInvMiddleRound"
+ 24579 426C6F63
+ 24579 6B436970
+ 24579 68657256
+ 24579 65634165
+ 24580 .LASF167:
+ 24581 011a 72634C6F .string "rcLocking"
+ 24581 636B696E
+ 24581 6700
+ 24582 .LASF202:
+ 24583 0124 72635061 .string "rcParsing"
+ 24583 7273696E
+ 24583 6700
+ 24584 .LASF231:
+ 24585 012e 72635365 .string "rcSelf"
+ 24585 6C6600
+ 24586 .LASF124:
+ 24587 0135 72634D65 .string "rcMetadata"
+ 24587 74616461
+ 24587 746100
+ 24588 .LASF247:
+ 24589 0140 72634172 .string "rcArcHardLink"
+ 24589 63486172
+ 24589 644C696E
+ 24589 6B00
+ 24590 .LASF73:
+ 24591 014e 7263436F .string "rcCont"
+ 24591 6E7400
+ 24592 .LASF255:
+ 24593 0155 72634368 .string "rcChecksum"
+ 24593 65636B73
+
GAS LISTING /tmp/ccPaCTqg.s page 610
+
+
+ 24593 756D00
+ 24594 .LASF377:
+ 24595 0160 5F5F6675 .string "__func__"
+ 24595 6E635F5F
+ 24595 00
+ 24596 .LASF299:
+ 24597 0169 7263546F .string "rcTooShort"
+ 24597 6F53686F
+ 24597 727400
+ 24598 .LASF129:
+ 24599 0174 72635061 .string "rcPagemap"
+ 24599 67656D61
+ 24599 7000
+ 24600 .LASF354:
+ 24601 017e 4B414553 .string "KAESBlockCipherVecAesNiEqInvKeyExpansion128"
+ 24601 426C6F63
+ 24601 6B436970
+ 24601 68657256
+ 24601 65634165
+ 24602 .LASF81:
+ 24603 01aa 72634170 .string "rcApp"
+ 24603 7000
+ 24604 .LASF112:
+ 24605 01b0 72634669 .string "rcFileDesc"
+ 24605 6C654465
+ 24605 736300
+ 24606 .LASF251:
+ 24607 01bb 72634974 .string "rcItem"
+ 24607 656D00
+ 24608 .LASF143:
+ 24609 01c2 72635472 .string "rcTrie"
+ 24609 696500
+ 24610 .LASF84:
+ 24611 01c9 72634C61 .string "rcLastModule_v1_0"
+ 24611 73744D6F
+ 24611 64756C65
+ 24611 5F76315F
+ 24611 3000
+ 24612 .LASF63:
+ 24613 01db 73746174 .string "state"
+ 24613 6500
+ 24614 .LASF242:
+ 24615 01e1 72634279 .string "rcByteOrder"
+ 24615 74654F72
+ 24615 64657200
+ 24616 .LASF60:
+ 24617 01ed 4145534B .string "AESKeySchedule"
+ 24617 65795363
+ 24617 68656475
+ 24617 6C6500
+ 24618 .LASF61:
+ 24619 01fc 726F756E .string "round_keys"
+ 24619 645F6B65
+ 24619 797300
+ 24620 .LASF160:
+ 24621 0207 7263436F .string "rcConstructing"
+ 24621 6E737472
+
GAS LISTING /tmp/ccPaCTqg.s page 611
+
+
+ 24621 75637469
+ 24621 6E6700
+ 24622 .LASF376:
+ 24623 0216 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 24623 45545459
+ 24623 5F46554E
+ 24623 4354494F
+ 24623 4E5F5F00
+ 24624 .LASF11:
+ 24625 022a 72635F74 .string "rc_t"
+ 24625 00
+ 24626 .LASF236:
+ 24627 022f 7263466F .string "rcFormat"
+ 24627 726D6174
+ 24627 00
+ 24628 .LASF319:
+ 24629 0238 6F705F41 .string "op_AESDEC"
+ 24629 45534445
+ 24629 4300
+ 24630 .LASF294:
+ 24631 0242 7263556E .string "rcUnauthorized"
+ 24631 61757468
+ 24631 6F72697A
+ 24631 656400
+ 24632 .LASF174:
+ 24633 0251 72635265 .string "rcRemoving"
+ 24633 6D6F7669
+ 24633 6E6700
+ 24634 .LASF87:
+ 24635 025c 72634B72 .string "rcKrypto"
+ 24635 7970746F
+ 24635 00
+ 24636 .LASF165:
+ 24637 0265 72635669 .string "rcVisiting"
+ 24637 73697469
+ 24637 6E6700
+ 24638 .LASF95:
+ 24639 0270 72634172 .string "rcArc"
+ 24639 6300
+ 24640 .LASF70:
+ 24641 0276 72634578 .string "rcExe"
+ 24641 6500
+ 24642 .LASF300:
+ 24643 027c 7263546F .string "rcTooLong"
+ 24643 6F4C6F6E
+ 24643 6700
+ 24644 .LASF328:
+ 24645 0286 6F705F50 .string "op_PSHUFD128"
+ 24645 53485546
+ 24645 44313238
+ 24645 00
+ 24646 .LASF228:
+ 24647 0293 52434F62 .string "RCObject"
+ 24647 6A656374
+ 24647 00
+ 24648 .LASF391:
+ 24649 029c 4B414553 .string "KAESBlockCipherVecAesNiRijndaelSBoxV"
+
GAS LISTING /tmp/ccPaCTqg.s page 612
+
+
+ 24649 426C6F63
+ 24649 6B436970
+ 24649 68657256
+ 24649 65634165
+ 24650 .LASF238:
+ 24651 02c1 7263496E .string "rcInterface"
+ 24651 74657266
+ 24651 61636500
+ 24652 .LASF166:
+ 24653 02cd 72635265 .string "rcResolving"
+ 24653 736F6C76
+ 24653 696E6700
+ 24654 .LASF108:
+ 24655 02d9 72634469 .string "rcDirectory"
+ 24655 72656374
+ 24655 6F727900
+ 24656 .LASF2:
+ 24657 02e5 6C6F6E67 .string "long int"
+ 24657 20696E74
+ 24657 00
+ 24658 .LASF59:
+ 24659 02ee 41455357 .string "AESWord"
+ 24659 6F726400
+ 24660 .LASF196:
+ 24661 02f6 72635661 .string "rcValidating"
+ 24661 6C696461
+ 24661 74696E67
+ 24661 00
+ 24662 .LASF98:
+ 24663 0303 72634172 .string "rcArgv"
+ 24663 677600
+ 24664 .LASF353:
+ 24665 030a 4B414553 .string "KAESBlockCipherVecAesNiEqInvKeyExpansion"
+ 24665 426C6F63
+ 24665 6B436970
+ 24665 68657256
+ 24665 65634165
+ 24666 .LASF74:
+ 24667 0333 72634353 .string "rcCS"
+ 24667 00
+ 24668 .LASF390:
+ 24669 0338 4B414553 .string "KAESBlockCipherVecAesNiRijndaelSBox"
+ 24669 426C6F63
+ 24669 6B436970
+ 24669 68657256
+ 24669 65634165
+ 24670 .LASF155:
+ 24671 035c 72635572 .string "rcUri"
+ 24671 6900
+ 24672 .LASF177:
+ 24673 0362 72634372 .string "rcCreating"
+ 24673 65617469
+ 24673 6E6700
+ 24674 .LASF337:
+ 24675 036d 6B676173 .string "kgastate"
+ 24675 74617465
+ 24675 00
+
GAS LISTING /tmp/ccPaCTqg.s page 613
+
+
+ 24676 .LASF53:
+ 24677 0376 656E6372 .string "encrypt"
+ 24677 79707400
+ 24678 .LASF17:
+ 24679 037e 76313238 .string "v128_u8_t"
+ 24679 5F75385F
+ 24679 7400
+ 24680 .LASF25:
+ 24681 0388 4442475F .string "DBG_XML"
+ 24681 584D4C00
+ 24682 .LASF331:
+ 24683 0390 73686966 .string "shift"
+ 24683 7400
+ 24684 .LASF37:
+ 24685 0396 4442475F .string "DBG_MOD_COUNT"
+ 24685 4D4F445F
+ 24685 434F554E
+ 24685 5400
+ 24686 .LASF79:
+ 24687 03a4 72634442 .string "rcDB"
+ 24687 00
+ 24688 .LASF257:
+ 24689 03a9 7263436F .string "rcConnection"
+ 24689 6E6E6563
+ 24689 74696F6E
+ 24689 00
+ 24690 .LASF125:
+ 24691 03b6 72634D67 .string "rcMgr"
+ 24691 7200
+ 24692 .LASF287:
+ 24693 03bc 72635669 .string "rcViolated"
+ 24693 6F6C6174
+ 24693 656400
+ 24694 .LASF220:
+ 24695 03c7 72634465 .string "rcDecrypting"
+ 24695 63727970
+ 24695 74696E67
+ 24695 00
+ 24696 .LASF380:
+ 24697 03d4 4B414553 .string "KAESBlockCipherVecAesNiEncrypt"
+ 24697 426C6F63
+ 24697 6B436970
+ 24697 68657256
+ 24697 65634165
+ 24698 .LASF0:
+ 24699 03f3 7369676E .string "signed char"
+ 24699 65642063
+ 24699 68617200
+ 24700 .LASF4:
+ 24701 03ff 75696E74 .string "uint8_t"
+ 24701 385F7400
+ 24702 .LASF103:
+ 24703 0407 72634368 .string "rcChar"
+ 24703 617200
+ 24704 .LASF88:
+ 24705 040e 72635244 .string "rcRDBMS"
+ 24705 424D5300
+
GAS LISTING /tmp/ccPaCTqg.s page 614
+
+
+ 24706 .LASF197:
+ 24707 0416 72634578 .string "rcExecuting"
+ 24707 65637574
+ 24707 696E6700
+ 24708 .LASF330:
+ 24709 0422 4B414553 .string "KAESBlockCipherVecAesNiShiftXorColumns"
+ 24709 426C6F63
+ 24709 6B436970
+ 24709 68657256
+ 24709 65634165
+ 24710 .LASF18:
+ 24711 0449 4442475F .string "DBG_MOD_NOT_FOUND"
+ 24711 4D4F445F
+ 24711 4E4F545F
+ 24711 464F554E
+ 24711 4400
+ 24712 .LASF184:
+ 24713 045b 72635265 .string "rcReverting"
+ 24713 76657274
+ 24713 696E6700
+ 24714 .LASF100:
+ 24715 0467 72634261 .string "rcBarrier"
+ 24715 72726965
+ 24715 7200
+ 24716 .LASF284:
+ 24717 0471 72634578 .string "rcExhausted"
+ 24717 68617573
+ 24717 74656400
+ 24718 .LASF5:
+ 24719 047d 756E7369 .string "unsigned char"
+ 24719 676E6564
+ 24719 20636861
+ 24719 7200
+ 24720 .LASF157:
+ 24721 048b 5243436F .string "RCContext"
+ 24721 6E746578
+ 24721 7400
+ 24722 .LASF120:
+ 24723 0495 72634C6F .string "rcLock"
+ 24723 636B00
+ 24724 .LASF273:
+ 24725 049c 72634261 .string "rcBadVersion"
+ 24725 64566572
+ 24725 73696F6E
+ 24725 00
+ 24726 .LASF274:
+ 24727 04a9 72634465 .string "rcDestroyed"
+ 24727 7374726F
+ 24727 79656400
+ 24728 .LASF137:
+ 24729 04b5 72635374 .string "rcString"
+ 24729 72696E67
+ 24729 00
+ 24730 .LASF99:
+ 24731 04be 72634174 .string "rcAttr"
+ 24731 747200
+ 24732 .LASF121:
+
GAS LISTING /tmp/ccPaCTqg.s page 615
+
+
+ 24733 04c5 72634C6F .string "rcLog"
+ 24733 6700
+ 24734 .LASF385:
+ 24735 04cb 6E65775F .string "new_obj"
+ 24735 6F626A00
+ 24736 .LASF21:
+ 24737 04d3 4442475F .string "DBG_KDB"
+ 24737 4B444200
+ 24738 .LASF225:
+ 24739 04db 72635072 .string "rcProcessing"
+ 24739 6F636573
+ 24739 73696E67
+ 24739 00
+ 24740 .LASF75:
+ 24741 04e8 72634646 .string "rcFF"
+ 24741 00
+ 24742 .LASF384:
+ 24743 04ed 5F426F6F .string "_Bool"
+ 24743 6C00
+ 24744 .LASF76:
+ 24745 04f3 72634653 .string "rcFS"
+ 24745 00
+ 24746 .LASF65:
+ 24747 04f8 62797465 .string "bytes"
+ 24747 7300
+ 24748 .LASF372:
+ 24749 04fe 4B414553 .string "KAESBlockCipherVecAesNiSetEncryptKey"
+ 24749 426C6F63
+ 24749 6B436970
+ 24749 68657256
+ 24749 65634165
+ 24750 .LASF163:
+ 24751 0523 72634163 .string "rcAccessing"
+ 24751 63657373
+ 24751 696E6700
+ 24752 .LASF281:
+ 24753 052f 7263496E .string "rcInterrupted"
+ 24753 74657272
+ 24753 75707465
+ 24753 6400
+ 24754 .LASF289:
+ 24755 053d 72634E6F .string "rcNotFound"
+ 24755 74466F75
+ 24755 6E6400
+ 24756 .LASF12:
+ 24757 0548 63686172 .string "char"
+ 24757 00
+ 24758 .LASF371:
+ 24759 054d 4B414553 .string "KAESBlockCipherVecAesNiKeySize"
+ 24759 426C6F63
+ 24759 6B436970
+ 24759 68657256
+ 24759 65634165
+ 24760 .LASF339:
+ 24761 056c 4B414553 .string "KAESBlockCipherVecAesNiAesKeyGenAssistColumn1"
+ 24761 426C6F63
+ 24761 6B436970
+
GAS LISTING /tmp/ccPaCTqg.s page 616
+
+
+ 24761 68657256
+ 24761 65634165
+ 24762 .LASF127:
+ 24763 059a 72634E6F .string "rcNode"
+ 24763 646500
+ 24764 .LASF324:
+ 24765 05a1 4B414553 .string "KAESBlockCipherVecAesNiAesKeyGenAssistColumn3"
+ 24765 426C6F63
+ 24765 6B436970
+ 24765 68657256
+ 24765 65634165
+ 24766 .LASF35:
+ 24767 05cf 4442475F .string "DBG_AES"
+ 24767 41455300
+ 24768 .LASF258:
+ 24769 05d7 72634572 .string "rcError"
+ 24769 726F7200
+ 24770 .LASF344:
+ 24771 05df 76696E32 .string "vin2"
+ 24771 00
+ 24772 .LASF175:
+ 24773 05e4 7263436C .string "rcClearing"
+ 24773 65617269
+ 24773 6E6700
+ 24774 .LASF233:
+ 24775 05ef 72634F66 .string "rcOffset"
+ 24775 66736574
+ 24775 00
+ 24776 .LASF179:
+ 24777 05f8 7263436C .string "rcClosing"
+ 24777 6F73696E
+ 24777 6700
+ 24778 .LASF111:
+ 24779 0602 72634669 .string "rcFile"
+ 24779 6C6500
+ 24780 .LASF140:
+ 24781 0609 72635469 .string "rcTimeout"
+ 24781 6D656F75
+ 24781 7400
+ 24782 .LASF355:
+ 24783 0613 4B414553 .string "KAESBlockCipherVecAesNiEqInvKeyExpansion192"
+ 24783 426C6F63
+ 24783 6B436970
+ 24783 68657256
+ 24783 65634165
+ 24784 .LASF128:
+ 24785 063f 72634E75 .string "rcNumeral"
+ 24785 6D657261
+ 24785 6C00
+ 24786 .LASF205:
+ 24787 0649 72635761 .string "rcWaiting"
+ 24787 6974696E
+ 24787 6700
+ 24788 .LASF316:
+ 24789 0653 726F756E .string "round_key"
+ 24789 645F6B65
+ 24789 7900
+
GAS LISTING /tmp/ccPaCTqg.s page 617
+
+
+ 24790 .LASF209:
+ 24791 065d 72634650 .string "rcFPCoding"
+ 24791 436F6469
+ 24791 6E6700
+ 24792 .LASF357:
+ 24793 0668 4B414553 .string "KAESBlockCipherVecAesNiFirstRound"
+ 24793 426C6F63
+ 24793 6B436970
+ 24793 68657256
+ 24793 65634165
+ 24794 .LASF366:
+ 24795 068a 4B414553 .string "KAESBlockCipherVecAesNiEqInvLastRound"
+ 24795 426C6F63
+ 24795 6B436970
+ 24795 68657256
+ 24795 65634165
+ 24796 .LASF261:
+ 24797 06b0 72635369 .string "rcSize"
+ 24797 7A6500
+ 24798 .LASF246:
+ 24799 06b7 72634469 .string "rcDirEntry"
+ 24799 72456E74
+ 24799 727900
+ 24800 .LASF198:
+ 24801 06c2 72634875 .string "rcHuffmanCoding"
+ 24801 66666D61
+ 24801 6E436F64
+ 24801 696E6700
+ 24802 .LASF30:
+ 24803 06d2 4442475F .string "DBG_KFG"
+ 24803 4B464700
+ 24804 .LASF64:
+ 24805 06da 636F6C75 .string "columns"
+ 24805 6D6E7300
+ 24806 .LASF279:
+ 24807 06e2 72634275 .string "rcBusy"
+ 24807 737900
+ 24808 .LASF27:
+ 24809 06e9 4442475F .string "DBG_SRA"
+ 24809 53524100
+ 24810 .LASF237:
+ 24811 06f1 72635472 .string "rcTransfer"
+ 24811 616E7366
+ 24811 657200
+ 24812 .LASF24:
+ 24813 06fc 4442475F .string "DBG_KFS"
+ 24813 4B465300
+ 24814 .LASF367:
+ 24815 0704 4B414553 .string "KAESBlockCipherVecAesNiEqInvCipher"
+ 24815 426C6F63
+ 24815 6B436970
+ 24815 68657256
+ 24815 65634165
+ 24816 .LASF192:
+ 24817 0727 72635061 .string "rcPacking"
+ 24817 636B696E
+ 24817 6700
+
GAS LISTING /tmp/ccPaCTqg.s page 618
+
+
+ 24818 .LASF188:
+ 24819 0731 7263436F .string "rcCopying"
+ 24819 7079696E
+ 24819 6700
+ 24820 .LASF333:
+ 24821 073b 4B414553 .string "KAESBlockCipherVecAesNiPackShuffleBytes"
+ 24821 426C6F63
+ 24821 6B436970
+ 24821 68657256
+ 24821 65634165
+ 24822 .LASF335:
+ 24823 0763 6F705F50 .string "op_PSHUFB128"
+ 24823 53485546
+ 24823 42313238
+ 24823 00
+ 24824 .LASF195:
+ 24825 0770 72634465 .string "rcDecoding"
+ 24825 636F6469
+ 24825 6E6700
+ 24826 .LASF168:
+ 24827 077b 7263556E .string "rcUnlocking"
+ 24827 6C6F636B
+ 24827 696E6700
+ 24828 .LASF56:
+ 24829 0787 4B426C6F .string "KBlockCipherVec_vt_v1"
+ 24829 636B4369
+ 24829 70686572
+ 24829 5665635F
+ 24829 76745F76
+ 24830 .LASF23:
+ 24831 079d 4442475F .string "DBG_LEGREF"
+ 24831 4C454752
+ 24831 454600
+ 24832 .LASF169:
+ 24833 07a8 72635265 .string "rcRenaming"
+ 24833 6E616D69
+ 24833 6E6700
+ 24834 .LASF374:
+ 24835 07b3 75736572 .string "user_key"
+ 24835 5F6B6579
+ 24835 00
+ 24836 .LASF239:
+ 24837 07bc 72634964 .string "rcId"
+ 24837 00
+ 24838 .LASF152:
+ 24839 07c1 7263436D .string "rcCmd"
+ 24839 6400
+ 24840 .LASF321:
+ 24841 07c7 6F705F41 .string "op_AESIMC"
+ 24841 4553494D
+ 24841 4300
+ 24842 .LASF33:
+ 24843 07d1 4442475F .string "DBG_LOADLIB"
+ 24843 4C4F4144
+ 24843 4C494200
+ 24844 .LASF291:
+ 24845 07dd 7263556E .string "rcUnlocked"
+
GAS LISTING /tmp/ccPaCTqg.s page 619
+
+
+ 24845 6C6F636B
+ 24845 656400
+ 24846 .LASF92:
+ 24847 07e8 52434D6F .string "RCModule"
+ 24847 64756C65
+ 24847 00
+ 24848 .LASF253:
+ 24849 07f1 7263456E .string "rcEncryption"
+ 24849 63727970
+ 24849 74696F6E
+ 24849 00
+ 24850 .LASF288:
+ 24851 07fe 72634578 .string "rcExists"
+ 24851 69737473
+ 24851 00
+ 24852 .LASF44:
+ 24853 0807 43697068 .string "CipherVec"
+ 24853 65725665
+ 24853 6300
+ 24854 .LASF307:
+ 24855 0811 72634F70 .string "rcOpen"
+ 24855 656E00
+ 24856 .LASF293:
+ 24857 0818 72634465 .string "rcDeadlock"
+ 24857 61646C6F
+ 24857 636B00
+ 24858 .LASF230:
+ 24859 0823 72634C69 .string "rcLink"
+ 24859 6E6B00
+ 24860 .LASF217:
+ 24861 082a 7263466C .string "rcFlushing"
+ 24861 75736869
+ 24861 6E6700
+ 24862 .LASF265:
+ 24863 0835 72634E6F .string "rcNoErr"
+ 24863 45727200
+ 24864 .LASF386:
+ 24865 083d 7665635F .string "vec_00"
+ 24865 303000
+ 24866 .LASF387:
+ 24867 0844 7665635F .string "vec_01"
+ 24867 303100
+ 24868 .LASF244:
+ 24869 084b 72635461 .string "rcTag"
+ 24869 6700
+ 24870 .LASF29:
+ 24871 0851 4442475F .string "DBG_ALIGN"
+ 24871 414C4947
+ 24871 4E00
+ 24872 .LASF208:
+ 24873 085b 72634C6F .string "rcLogging"
+ 24873 6767696E
+ 24873 6700
+ 24874 .LASF301:
+ 24875 0865 7263546F .string "rcTooBig"
+ 24875 6F426967
+ 24875 00
+
GAS LISTING /tmp/ccPaCTqg.s page 620
+
+
+ 24876 .LASF145:
+ 24877 086e 72635665 .string "rcVector"
+ 24877 63746F72
+ 24877 00
+ 24878 .LASF180:
+ 24879 0877 72635265 .string "rcResizing"
+ 24879 73697A69
+ 24879 6E6700
+ 24880 .LASF154:
+ 24881 0882 72635175 .string "rcQuery"
+ 24881 65727900
+ 24882 .LASF10:
+ 24883 088a 6C6F6E67 .string "long unsigned int"
+ 24883 20756E73
+ 24883 69676E65
+ 24883 6420696E
+ 24883 7400
+ 24884 .LASF286:
+ 24885 089c 72634578 .string "rcExcessive"
+ 24885 63657373
+ 24885 69766500
+ 24886 .LASF214:
+ 24887 08a8 72634576 .string "rcEvaluating"
+ 24887 616C7561
+ 24887 74696E67
+ 24887 00
+ 24888 .LASF151:
+ 24889 08b5 7263526E .string "rcRng"
+ 24889 6700
+ 24890 .LASF159:
+ 24891 08bb 72634361 .string "rcCasting"
+ 24891 7374696E
+ 24891 6700
+ 24892 .LASF369:
+ 24893 08c5 73656C66 .string "self"
+ 24893 00
+ 24894 .LASF119:
+ 24895 08ca 72634974 .string "rcIterator"
+ 24895 65726174
+ 24895 6F7200
+ 24896 .LASF57:
+ 24897 08d5 4B426C6F .string "KBlockCipherVec"
+ 24897 636B4369
+ 24897 70686572
+ 24897 56656300
+ 24898 .LASF389:
+ 24899 08e5 7665635F .string "vec_10"
+ 24899 313000
+ 24900 .LASF342:
+ 24901 08ec 6F705F53 .string "op_SHUFPD"
+ 24901 48554650
+ 24901 4400
+ 24902 .LASF397:
+ 24903 08f6 4B414553 .string "KAESBlockCipherVecAesNiaes_ncbi_name"
+ 24903 426C6F63
+ 24903 6B436970
+ 24903 68657256
+
GAS LISTING /tmp/ccPaCTqg.s page 621
+
+
+ 24903 65634165
+ 24904 .LASF136:
+ 24905 091b 72635374 .string "rcStorage"
+ 24905 6F726167
+ 24905 6500
+ 24906 .LASF378:
+ 24907 0925 4B414553 .string "KAESBlockCipherVecAesNiSetDecryptKey"
+ 24907 426C6F63
+ 24907 6B436970
+ 24907 68657256
+ 24907 65634165
+ 24908 .LASF338:
+ 24909 094a 4B414553 .string "KAESBlockCipherVecAesNiStateShiftRight64"
+ 24909 426C6F63
+ 24909 6B436970
+ 24909 68657256
+ 24909 65634165
+ 24910 .LASF303:
+ 24911 0973 72634F75 .string "rcOutOfKDirectory"
+ 24911 744F664B
+ 24911 44697265
+ 24911 63746F72
+ 24911 7900
+ 24912 .LASF248:
+ 24913 0985 7263526F .string "rcRow"
+ 24913 7700
+ 24914 .LASF26:
+ 24915 098b 4442475F .string "DBG_VDB"
+ 24915 56444200
+ 24916 .LASF148:
+ 24917 0993 72634C61 .string "rcLastTarget_v1_0"
+ 24917 73745461
+ 24917 72676574
+ 24917 5F76315F
+ 24917 3000
+ 24918 .LASF156:
+ 24919 09a5 72634C61 .string "rcLastTarget_v1_1"
+ 24919 73745461
+ 24919 72676574
+ 24919 5F76315F
+ 24919 3100
+ 24920 .LASF135:
+ 24921 09b7 72635365 .string "rcSemaphore"
+ 24921 6D617068
+ 24921 6F726500
+ 24922 .LASF318:
+ 24923 09c3 6F705F41 .string "op_AESENCLAST"
+ 24923 4553454E
+ 24923 434C4153
+ 24923 5400
+ 24924 .LASF280:
+ 24925 09d1 7263496E .string "rcIncomplete"
+ 24925 636F6D70
+ 24925 6C657465
+ 24925 00
+ 24926 .LASF309:
+ 24927 09de 72634E6F .string "rcNotOpen"
+
GAS LISTING /tmp/ccPaCTqg.s page 622
+
+
+ 24927 744F7065
+ 24927 6E00
+ 24928 .LASF118:
+ 24929 09e8 7263496E .string "rcIndex"
+ 24929 64657800
+ 24930 .LASF28:
+ 24931 09f0 4442475F .string "DBG_XARC"
+ 24931 58415243
+ 24931 00
+ 24932 .LASF399:
+ 24933 09f9 474E5520 .string "GNU C 4.4.2"
+ 24933 4320342E
+ 24933 342E3200
+ 24934 .LASF71:
+ 24935 0a05 72635275 .string "rcRuntime"
+ 24935 6E74696D
+ 24935 6500
+ 24936 .LASF110:
+ 24937 0a0f 7263586D .string "rcXmlDoc"
+ 24937 6C446F63
+ 24937 00
+ 24938 .LASF13:
+ 24939 0a18 6C6F6E67 .string "long long int"
+ 24939 206C6F6E
+ 24939 6720696E
+ 24939 7400
+ 24940 .LASF191:
+ 24941 0a26 7263506F .string "rcPositioning"
+ 24941 73697469
+ 24941 6F6E696E
+ 24941 6700
+ 24942 .LASF359:
+ 24943 0a34 4B414553 .string "KAESBlockCipherVecAesNiMiddleRound"
+ 24943 426C6F63
+ 24943 6B436970
+ 24943 68657256
+ 24943 65634165
+ 24944 .LASF132:
+ 24945 0a57 72635175 .string "rcQueue"
+ 24945 65756500
+ 24946 .LASF207:
+ 24947 0a5f 72634465 .string "rcDetaching"
+ 24947 74616368
+ 24947 696E6700
+ 24948 .LASF122:
+ 24949 0a6b 72634D44 .string "rcMD5SumFmt"
+ 24949 3553756D
+ 24949 466D7400
+ 24950 .LASF173:
+ 24951 0a77 7263496E .string "rcInserting"
+ 24951 73657274
+ 24951 696E6700
+ 24952 .LASF221:
+ 24953 0a83 7263436F .string "rcComparing"
+ 24953 6D706172
+ 24953 696E6700
+ 24954 .LASF283:
+
GAS LISTING /tmp/ccPaCTqg.s page 623
+
+
+ 24955 0a8f 7263456D .string "rcEmpty"
+ 24955 70747900
+ 24956 .LASF115:
+ 24957 0a97 7263466F .string "rcFormatter"
+ 24957 726D6174
+ 24957 74657200
+ 24958 .LASF361:
+ 24959 0aa3 6D726F75 .string "mround_keys"
+ 24959 6E645F6B
+ 24959 65797300
+ 24960 .LASF16:
+ 24961 0aaf 646F7562 .string "double"
+ 24961 6C6500
+ 24962 .LASF200:
+ 24963 0ab6 72635265 .string "rcRegistering"
+ 24963 67697374
+ 24963 6572696E
+ 24963 6700
+ 24964 .LASF89:
+ 24965 0ac4 72634E53 .string "rcNS"
+ 24965 00
+ 24966 .LASF232:
+ 24967 0ac9 72635061 .string "rcParam"
+ 24967 72616D00
+ 24968 .LASF93:
+ 24969 0ad1 52435461 .string "RCTarget"
+ 24969 72676574
+ 24969 00
+ 24970 .LASF326:
+ 24971 0ada 6F705F41 .string "op_AESKEYGENASSIST"
+ 24971 45534B45
+ 24971 5947454E
+ 24971 41535349
+ 24971 535400
+ 24972 .LASF42:
+ 24973 0aed 4442475F .string "DBG_AES_OBJECT"
+ 24973 4145535F
+ 24973 4F424A45
+ 24973 435400
+ 24974 .LASF329:
+ 24975 0afc 6D61736B .string "mask"
+ 24975 00
+ 24976 .LASF254:
+ 24977 0b01 72634372 .string "rcCrc"
+ 24977 6300
+ 24978 .LASF322:
+ 24979 0b07 62737761 .string "bswap_32"
+ 24979 705F3332
+ 24979 00
+ 24980 .LASF32:
+ 24981 0b10 4442475F .string "DBG_SEARCH"
+ 24981 53454152
+ 24981 434800
+ 24982 .LASF82:
+ 24983 0b1b 7263584D .string "rcXML"
+ 24983 4C00
+ 24984 .LASF34:
+
GAS LISTING /tmp/ccPaCTqg.s page 624
+
+
+ 24985 0b21 4442475F .string "DBG_VFS"
+ 24985 56465300
+ 24986 .LASF38:
+ 24987 0b29 4442475F .string "DBG_AES_KEYEXP"
+ 24987 4145535F
+ 24987 4B455945
+ 24987 585000
+ 24988 .LASF400:
+ 24989 0b38 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 24989 652F726F
+ 24989 6461726D
+ 24989 65722F73
+ 24989 72615F73
+ 24990 .LASF14:
+ 24991 0b6e 666C6F61 .string "float"
+ 24991 7400
+ 24992 .LASF176:
+ 24993 0b74 72635570 .string "rcUpdating"
+ 24993 64617469
+ 24993 6E6700
+ 24994 .LASF358:
+ 24995 0b7f 4B414553 .string "KAESBlockCipherVecAesNiAddRoundKey"
+ 24995 426C6F63
+ 24995 6B436970
+ 24995 68657256
+ 24995 65634165
+ 24996 .LASF203:
+ 24997 0ba2 7263436F .string "rcConverting"
+ 24997 6E766572
+ 24997 74696E67
+ 24997 00
+ 24998 .LASF189:
+ 24999 0baf 7263436F .string "rcConcatenating"
+ 24999 6E636174
+ 24999 656E6174
+ 24999 696E6700
+ 25000 .LASF68:
+ 25001 0bbf 4B426C6F .string "KBlockCipher"
+ 25001 636B4369
+ 25001 70686572
+ 25001 00
+ 25002 .LASF146:
+ 25003 0bcc 72634479 .string "rcDylib"
+ 25003 6C696200
+ 25004 .LASF295:
+ 25005 0bd4 72635265 .string "rcReadonly"
+ 25005 61646F6E
+ 25005 6C7900
+ 25006 .LASF340:
+ 25007 0bdf 4B414553 .string "KAESBlockCipherVecAesNiStateDupColumn1"
+ 25007 426C6F63
+ 25007 6B436970
+ 25007 68657256
+ 25007 65634165
+ 25008 .LASF350:
+ 25009 0c06 4B414553 .string "KAESBlockCipherVecAesNiStateDupColumn2"
+ 25009 426C6F63
+
GAS LISTING /tmp/ccPaCTqg.s page 625
+
+
+ 25009 6B436970
+ 25009 68657256
+ 25009 65634165
+ 25010 .LASF327:
+ 25011 0c2d 4B414553 .string "KAESBlockCipherVecAesNiStateDupColumn3"
+ 25011 426C6F63
+ 25011 6B436970
+ 25011 68657256
+ 25011 65634165
+ 25012 .LASF8:
+ 25013 0c54 756E7369 .string "unsigned int"
+ 25013 676E6564
+ 25013 20696E74
+ 25013 00
+ 25014 .LASF66:
+ 25015 0c61 67726964 .string "grid"
+ 25015 00
+ 25016 .LASF41:
+ 25017 0c66 4442475F .string "DBG_AES_INVCIPHER"
+ 25017 4145535F
+ 25017 494E5643
+ 25017 49504845
+ 25017 5200
+ 25018 .LASF296:
+ 25019 0c78 72635772 .string "rcWriteonly"
+ 25019 6974656F
+ 25019 6E6C7900
+ 25020 .LASF290:
+ 25021 0c84 72634C6F .string "rcLocked"
+ 25021 636B6564
+ 25021 00
+ 25022 .LASF172:
+ 25023 0c8d 72635072 .string "rcProjecting"
+ 25023 6F6A6563
+ 25023 74696E67
+ 25023 00
+ 25024 .LASF77:
+ 25025 0c9a 72635053 .string "rcPS"
+ 25025 00
+ 25026 .LASF262:
+ 25027 0c9f 72635265 .string "rcRefcount"
+ 25027 66636F75
+ 25027 6E7400
+ 25028 .LASF97:
+ 25029 0caa 7263546F .string "rcTocEntry"
+ 25029 63456E74
+ 25029 727900
+ 25030 .LASF252:
+ 25031 0cb5 72634D6F .string "rcMode"
+ 25031 646500
+ 25032 .LASF311:
+ 25033 0cbc 7263556E .string "rcUnequal"
+ 25033 65717561
+ 25033 6C00
+ 25034 .LASF292:
+ 25035 0cc6 72634465 .string "rcDetached"
+ 25035 74616368
+
GAS LISTING /tmp/ccPaCTqg.s page 626
+
+
+ 25035 656400
+ 25036 .LASF317:
+ 25037 0cd1 6F705F41 .string "op_AESENC"
+ 25037 4553454E
+ 25037 4300
+ 25038 .LASF298:
+ 25039 0cdb 7263496E .string "rcInPlaceNotAllowed"
+ 25039 506C6163
+ 25039 654E6F74
+ 25039 416C6C6F
+ 25039 77656400
+ 25040 .LASF341:
+ 25041 0cef 4B414553 .string "KAESBlockCipherVecAesNiStateMerge1"
+ 25041 426C6F63
+ 25041 6B436970
+ 25041 68657256
+ 25041 65634165
+ 25042 .LASF345:
+ 25043 0d12 4B414553 .string "KAESBlockCipherVecAesNiStateMerge2"
+ 25043 426C6F63
+ 25043 6B436970
+ 25043 68657256
+ 25043 65634165
+ 25044 .LASF240:
+ 25045 0d35 72635261 .string "rcRange"
+ 25045 6E676500
+ 25046 .LASF336:
+ 25047 0d3d 76746162 .string "vtab"
+ 25047 00
+ 25048 .LASF401:
+ 25049 0d42 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 25049 652F726F
+ 25049 6461726D
+ 25049 65722F73
+ 25049 72615F73
+ 25050 .LASF250:
+ 25051 0d8a 72634C61 .string "rcLastObject_v1_0"
+ 25051 73744F62
+ 25051 6A656374
+ 25051 5F76315F
+ 25051 3000
+ 25052 .LASF263:
+ 25053 0d9c 72634C61 .string "rcLastObject_v1_1"
+ 25053 73744F62
+ 25053 6A656374
+ 25053 5F76315F
+ 25053 3100
+ 25054 .LASF346:
+ 25055 0dae 4B414553 .string "KAESBlockCipherVecAesNiKeyExpansion128"
+ 25055 426C6F63
+ 25055 6B436970
+ 25055 68657256
+ 25055 65634165
+ 25056 .LASF216:
+ 25057 0dd5 72634C61 .string "rcLastContext_v1_0"
+ 25057 7374436F
+ 25057 6E746578
+
GAS LISTING /tmp/ccPaCTqg.s page 627
+
+
+ 25057 745F7631
+ 25057 5F3000
+ 25058 .LASF227:
+ 25059 0de8 72634C61 .string "rcLastContext_v1_1"
+ 25059 7374436F
+ 25059 6E746578
+ 25059 745F7631
+ 25059 5F3100
+ 25060 .LASF325:
+ 25061 0dfb 72636F6E .string "rcon"
+ 25061 00
+ 25062 .LASF382:
+ 25063 0e00 4B414553 .string "KAESBlockCipherVecAesNiProcessorSupport"
+ 25063 426C6F63
+ 25063 6B436970
+ 25063 68657256
+ 25063 65634165
+ 25064 .LASF123:
+ 25065 0e28 72634D65 .string "rcMemMap"
+ 25065 6D4D6170
+ 25065 00
+ 25066 .LASF58:
+ 25067 0e31 41455342 .string "AESByte"
+ 25067 79746500
+ 25068 .LASF147:
+ 25069 0e39 72634578 .string "rcExpression"
+ 25069 70726573
+ 25069 73696F6E
+ 25069 00
+ 25070 .LASF193:
+ 25071 0e46 7263556E .string "rcUnpacking"
+ 25071 7061636B
+ 25071 696E6700
+ 25072 .LASF109:
+ 25073 0e52 7263446F .string "rcDoc"
+ 25073 6300
+ 25074 .LASF19:
+ 25075 0e58 4442475F .string "DBG_APP"
+ 25075 41505000
+ 25076 .LASF210:
+ 25077 0e60 72634D75 .string "rcMultiplexing"
+ 25077 6C746970
+ 25077 6C657869
+ 25077 6E6700
+ 25078 .LASF212:
+ 25079 0e6f 72635365 .string "rcSearching"
+ 25079 61726368
+ 25079 696E6700
+ 25080 .LASF394:
+ 25081 0e7b 46465F74 .string "FF_tab"
+ 25081 616200
+ 25082 .LASF312:
+ 25083 0e82 72634661 .string "rcFailed"
+ 25083 696C6564
+ 25083 00
+ 25084 .LASF381:
+ 25085 0e8b 4B414553 .string "KAESBlockCipherVecAesNiDecrypt"
+
GAS LISTING /tmp/ccPaCTqg.s page 628
+
+
+ 25085 426C6F63
+ 25085 6B436970
+ 25085 68657256
+ 25085 65634165
+ 25086 .LASF40:
+ 25087 0eaa 4442475F .string "DBG_AES_INVKEYEXP"
+ 25087 4145535F
+ 25087 494E564B
+ 25087 45594558
+ 25087 5000
+ 25088 .LASF277:
+ 25089 0ebc 7263496E .string "rcIncorrect"
+ 25089 636F7272
+ 25089 65637400
+ 25090 .LASF116:
+ 25091 0ec8 72634675 .string "rcFunctParam"
+ 25091 6E637450
+ 25091 6172616D
+ 25091 00
+ 25092 .LASF226:
+ 25093 0ed5 72634964 .string "rcIdentifying"
+ 25093 656E7469
+ 25093 6679696E
+ 25093 6700
+ 25094 .LASF241:
+ 25095 0ee3 7263436F .string "rcConstraint"
+ 25095 6E737472
+ 25095 61696E74
+ 25095 00
+ 25096 .LASF267:
+ 25097 0ef0 7263556E .string "rcUnknown"
+ 25097 6B6E6F77
+ 25097 6E00
+ 25098 .LASF106:
+ 25099 0efa 72634375 .string "rcCursor"
+ 25099 72736F72
+ 25099 00
+ 25100 .LASF264:
+ 25101 0f03 52435374 .string "RCState"
+ 25101 61746500
+ 25102 .LASF55:
+ 25103 0f0b 4B426C6F .string "KBlockCipherByte"
+ 25103 636B4369
+ 25103 70686572
+ 25103 42797465
+ 25103 00
+ 25104 .LASF46:
+ 25105 0f1c 4B426C6F .string "KBlockCipherByte_vt_v1"
+ 25105 636B4369
+ 25105 70686572
+ 25105 42797465
+ 25105 5F76745F
+ 25106 .LASF304:
+ 25107 0f33 72634967 .string "rcIgnored"
+ 25107 6E6F7265
+ 25107 6400
+ 25108 .LASF162:
+
GAS LISTING /tmp/ccPaCTqg.s page 629
+
+
+ 25109 0f3d 72635265 .string "rcReleasing"
+ 25109 6C656173
+ 25109 696E6700
+ 25110 .LASF85:
+ 25111 0f49 72634B46 .string "rcKFG"
+ 25111 4700
+ 25112 .LASF243:
+ 25113 0f4f 72634D65 .string "rcMessage"
+ 25113 73736167
+ 25113 6500
+ 25114 .LASF190:
+ 25115 0f59 7263466F .string "rcFormatting"
+ 25115 726D6174
+ 25115 74696E67
+ 25115 00
+ 25116 .LASF83:
+ 25117 0f66 72635352 .string "rcSRA"
+ 25117 4100
+ 25118 .LASF259:
+ 25119 0f6c 7263456E .string "rcEnvironment"
+ 25119 7669726F
+ 25119 6E6D656E
+ 25119 7400
+ 25120 .LASF15:
+ 25121 0f7a 6C6F6E67 .string "long long unsigned int"
+ 25121 206C6F6E
+ 25121 6720756E
+ 25121 7369676E
+ 25121 65642069
+ 25122 .LASF48:
+ 25123 0f91 64657374 .string "destroy"
+ 25123 726F7900
+ 25124 .LASF141:
+ 25125 0f99 7263546F .string "rcToken"
+ 25125 6B656E00
+ 25126 .LASF201:
+ 25127 0fa1 7263546F .string "rcTokenizing"
+ 25127 6B656E69
+ 25127 7A696E67
+ 25127 00
+ 25128 .LASF22:
+ 25129 0fae 4442475F .string "DBG_REF"
+ 25129 52454600
+ 25130 .LASF182:
+ 25131 0fb6 72635772 .string "rcWriting"
+ 25131 6974696E
+ 25131 6700
+ 25132 .LASF158:
+ 25133 0fc0 7263416C .string "rcAllocating"
+ 25133 6C6F6361
+ 25133 74696E67
+ 25133 00
+ 25134 .LASF144:
+ 25135 0fcd 72635479 .string "rcType"
+ 25135 706500
+ 25136 .LASF245:
+ 25137 0fd4 72635265 .string "rcResources"
+
GAS LISTING /tmp/ccPaCTqg.s page 630
+
+
+ 25137 736F7572
+ 25137 63657300
+ 25138 .LASF126:
+ 25139 0fe0 72634E61 .string "rcNamelist"
+ 25139 6D656C69
+ 25139 737400
+ 25140 .LASF352:
+ 25141 0feb 4B414553 .string "KAESBlockCipherVecAesNiInvMixColumns"
+ 25141 426C6F63
+ 25141 6B436970
+ 25141 68657256
+ 25141 65634165
+ 25142 .LASF402:
+ 25143 1010 4B414553 .string "KAESBlockCipherVecAesNiMake"
+ 25143 426C6F63
+ 25143 6B436970
+ 25143 68657256
+ 25143 65634165
+ 25144 .LASF368:
+ 25145 102c 4B414553 .string "KAESBlockCipherVecAesNiDestroy"
+ 25145 426C6F63
+ 25145 6B436970
+ 25145 68657256
+ 25145 65634165
+ 25146 .LASF310:
+ 25147 104b 7263556E .string "rcUndefined"
+ 25147 64656669
+ 25147 6E656400
+ 25148 .LASF278:
+ 25149 1057 7263496E .string "rcInconsistent"
+ 25149 636F6E73
+ 25149 69737465
+ 25149 6E7400
+ 25150 .LASF223:
+ 25151 1066 72635265 .string "rcRetrieving"
+ 25151 74726965
+ 25151 76696E67
+ 25151 00
+ 25152 .LASF373:
+ 25153 1073 656E6372 .string "encrypt_key"
+ 25153 7970745F
+ 25153 6B657900
+ 25154 .LASF395:
+ 25155 107f 4B414553 .string "KAESBlockCipherVecAesNiFFtable"
+ 25155 426C6F63
+ 25155 6B436970
+ 25155 68657256
+ 25155 65634165
+ 25156 .LASF54:
+ 25157 109e 64656372 .string "decrypt"
+ 25157 79707400
+ 25158 .LASF47:
+ 25159 10a6 76657273 .string "version"
+ 25159 696F6E00
+ 25160 .LASF235:
+ 25161 10ae 72634E61 .string "rcName"
+ 25161 6D6500
+
GAS LISTING /tmp/ccPaCTqg.s page 631
+
+
+ 25162 .LASF272:
+ 25163 10b5 72634E75 .string "rcNull"
+ 25163 6C6C00
+ 25164 .LASF194:
+ 25165 10bc 7263456E .string "rcEncoding"
+ 25165 636F6469
+ 25165 6E6700
+ 25166 .LASF113:
+ 25167 10c7 72634669 .string "rcFileFormat"
+ 25167 6C65466F
+ 25167 726D6174
+ 25167 00
+ 25168 .LASF150:
+ 25169 10d4 7263456E .string "rcEncryptionKey"
+ 25169 63727970
+ 25169 74696F6E
+ 25169 4B657900
+ 25170 .LASF215:
+ 25171 10e4 7263496E .string "rcInflating"
+ 25171 666C6174
+ 25171 696E6700
+ 25172 .LASF370:
+ 25173 10f0 4B414553 .string "KAESBlockCipherVecAesNiBlockSize"
+ 25173 426C6F63
+ 25173 6B436970
+ 25173 68657256
+ 25173 65634165
+ 25174 .LASF297:
+ 25175 1111 72634E6F .string "rcNoPerm"
+ 25175 5065726D
+ 25175 00
+ 25176 .LASF334:
+ 25177 111a 64657374 .string "dest"
+ 25177 00
+ 25178 .LASF185:
+ 25179 111f 72635265 .string "rcResetting"
+ 25179 73657474
+ 25179 696E6700
+ 25180 .LASF49:
+ 25181 112b 626C6F63 .string "block_size"
+ 25181 6B5F7369
+ 25181 7A6500
+ 25182 .LASF133:
+ 25183 1136 72635257 .string "rcRWLock"
+ 25183 4C6F636B
+ 25183 00
+ 25184 .LASF164:
+ 25185 113f 72634C69 .string "rcListing"
+ 25185 7374696E
+ 25185 6700
+ 25186 .LASF388:
+ 25187 1149 7665635F .string "vec_0F"
+ 25187 304600
+ 25188 .LASF114:
+ 25189 1150 72634675 .string "rcFunction"
+ 25189 6E637469
+ 25189 6F6E00
+
GAS LISTING /tmp/ccPaCTqg.s page 632
+
+
+ 25190 .LASF39:
+ 25191 115b 4442475F .string "DBG_AES_CIPHER"
+ 25191 4145535F
+ 25191 43495048
+ 25191 455200
+ 25192 .LASF270:
+ 25193 116a 7263556E .string "rcUnrecognized"
+ 25193 7265636F
+ 25193 676E697A
+ 25193 656400
+ 25194 .LASF62:
+ 25195 1179 6E756D62 .string "number_of_rounds"
+ 25195 65725F6F
+ 25195 665F726F
+ 25195 756E6473
+ 25195 00
+ 25196 .LASF343:
+ 25197 118a 76696E31 .string "vin1"
+ 25197 00
+ 25198 .LASF86:
+ 25199 118f 7263416C .string "rcAlign"
+ 25199 69676E00
+ 25200 .LASF356:
+ 25201 1197 4B414553 .string "KAESBlockCipherVecAesNiEqInvKeyExpansion256"
+ 25201 426C6F63
+ 25201 6B436970
+ 25201 68657256
+ 25201 65634165
+ 25202 .LASF149:
+ 25203 11c3 72635072 .string "rcProduction"
+ 25203 6F647563
+ 25203 74696F6E
+ 25203 00
+ 25204 .LASF396:
+ 25205 11d0 4B414553 .string "KAESBlockCipherVecAesNiRcon"
+ 25205 426C6F63
+ 25205 6B436970
+ 25205 68657256
+ 25205 65634165
+ 25206 .LASF91:
+ 25207 11ec 72634C61 .string "rcLastModule_v1_1"
+ 25207 73744D6F
+ 25207 64756C65
+ 25207 5F76315F
+ 25207 3100
+ 25208 .LASF139:
+ 25209 11fe 72635468 .string "rcThread"
+ 25209 72656164
+ 25209 00
+ 25210 .LASF348:
+ 25211 1207 4B414553 .string "KAESBlockCipherVecAesNiVecXor"
+ 25211 426C6F63
+ 25211 6B436970
+ 25211 68657256
+ 25211 65634165
+ 25212 .LASF187:
+ 25213 1225 72634672 .string "rcFreezing"
+
GAS LISTING /tmp/ccPaCTqg.s page 633
+
+
+ 25213 65657A69
+ 25213 6E6700
+ 25214 .LASF398:
+ 25215 1230 4B414553 .string "KAESBlockCipherVecAesNi_vt_"
+ 25215 426C6F63
+ 25215 6B436970
+ 25215 68657256
+ 25215 65634165
+ 25216 .LASF52:
+ 25217 124c 7365745F .string "set_decrypt_key"
+ 25217 64656372
+ 25217 7970745F
+ 25217 6B657900
+ 25218 .LASF69:
+ 25219 125c 62797465 .string "byte"
+ 25219 00
+ 25220 .LASF45:
+ 25221 1261 4B426C6F .string "KBlockCipher_vt"
+ 25221 636B4369
+ 25221 70686572
+ 25221 5F767400
+ 25222 .LASF379:
+ 25223 1271 64656372 .string "decrypt_key"
+ 25223 7970745F
+ 25223 6B657900
+ 25224 .LASF256:
+ 25225 127d 72635365 .string "rcSeed"
+ 25225 656400
+ 25226 .LASF213:
+ 25227 1284 72634C6F .string "rcLoading"
+ 25227 6164696E
+ 25227 6700
+ 25228 .LASF1:
+ 25229 128e 73686F72 .string "short int"
+ 25229 7420696E
+ 25229 7400
+ 25230 .LASF9:
+ 25231 1298 75696E74 .string "uint64_t"
+ 25231 36345F74
+ 25231 00
+ 25232 .LASF306:
+ 25233 12a1 72634C61 .string "rcLastState_v1_0"
+ 25233 73745374
+ 25233 6174655F
+ 25233 76315F30
+ 25233 00
+ 25234 .LASF315:
+ 25235 12b2 72634C61 .string "rcLastState_v1_1"
+ 25235 73745374
+ 25235 6174655F
+ 25235 76315F31
+ 25235 00
+ 25236 .LASF80:
+ 25237 12c3 72635644 .string "rcVDB"
+ 25237 4200
+ 25238 .LASF347:
+ 25239 12c9 4B414553 .string "KAESBlockCipherVecAesNiKeyExpansion192"
+
GAS LISTING /tmp/ccPaCTqg.s page 634
+
+
+ 25239 426C6F63
+ 25239 6B436970
+ 25239 68657256
+ 25239 65634165
+ 25240 .LASF51:
+ 25241 12f0 7365745F .string "set_encrypt_key"
+ 25241 656E6372
+ 25241 7970745F
+ 25241 6B657900
+ 25242 .LASF78:
+ 25243 1300 72635846 .string "rcXF"
+ 25243 00
+ 25244 .LASF161:
+ 25245 1305 72634465 .string "rcDestroying"
+ 25245 7374726F
+ 25245 79696E67
+ 25245 00
+ 25246 .LASF266:
+ 25247 1312 7263446F .string "rcDone"
+ 25247 6E6500
+ 25248 .LASF96:
+ 25249 1319 7263546F .string "rcToc"
+ 25249 6300
+ 25250 .LASF170:
+ 25251 131f 7263416C .string "rcAliasing"
+ 25251 69617369
+ 25251 6E6700
+ 25252 .LASF131:
+ 25253 132a 72635072 .string "rcProcess"
+ 25253 6F636573
+ 25253 7300
+ 25254 .LASF229:
+ 25255 1334 72634E6F .string "rcNoObj"
+ 25255 4F626A00
+ 25256 .LASF268:
+ 25257 133c 7263556E .string "rcUnsupported"
+ 25257 73757070
+ 25257 6F727465
+ 25257 6400
+ 25258 .LASF349:
+ 25259 134a 4B414553 .string "KAESBlockCipherVecAesNiAesKeyGenAssistColumn2"
+ 25259 426C6F63
+ 25259 6B436970
+ 25259 68657256
+ 25259 65634165
+ 25260 .LASF104:
+ 25261 1378 7263436F .string "rcColumn"
+ 25261 6C756D6E
+ 25261 00
+ 25262 .LASF269:
+ 25263 1381 7263556E .string "rcUnexpected"
+ 25263 65787065
+ 25263 63746564
+ 25263 00
+ 25264 .LASF7:
+ 25265 138e 75696E74 .string "uint32_t"
+ 25265 33325F74
+
GAS LISTING /tmp/ccPaCTqg.s page 635
+
+
+ 25265 00
+ 25266 .LASF90:
+ 25267 1397 72635646 .string "rcVFS"
+ 25267 5300
+ 25268 .LASF31:
+ 25269 139d 4442475F .string "DBG_KRYPTO"
+ 25269 4B525950
+ 25269 544F00
+ 25270 .LASF43:
+ 25271 13a8 4442475F .string "DBG_AES_COUNT"
+ 25271 4145535F
+ 25271 434F554E
+ 25271 5400
+ 25272 .LASF351:
+ 25273 13b6 4B414553 .string "KAESBlockCipherVecAesNiKeyExpansion256"
+ 25273 426C6F63
+ 25273 6B436970
+ 25273 68657256
+ 25273 65634165
+ 25274 .LASF383:
+ 25275 13dd 6C657665 .string "level"
+ 25275 6C00
+ 25276 .LASF320:
+ 25277 13e3 6F705F41 .string "op_AESDECLAST"
+ 25277 45534445
+ 25277 434C4153
+ 25277 5400
+ 25278 .LASF314:
+ 25279 13f1 72635772 .string "rcWrongType"
+ 25279 6F6E6754
+ 25279 79706500
+ 25280 .LASF249:
+ 25281 13fd 72634C69 .string "rcLibrary"
+ 25281 62726172
+ 25281 7900
+ 25282 .LASF282:
+ 25283 1407 72634361 .string "rcCanceled"
+ 25283 6E63656C
+ 25283 656400
+ 25284 .LASF153:
+ 25285 1412 72634461 .string "rcData"
+ 25285 746100
+ 25286 .LASF363:
+ 25287 1419 4B414553 .string "KAESBlockCipherVecAesNiCipher"
+ 25287 426C6F63
+ 25287 6B436970
+ 25287 68657256
+ 25287 65634165
+ 25288 .LASF117:
+ 25289 1437 72634865 .string "rcHeader"
+ 25289 61646572
+ 25289 00
+ 25290 .LASF6:
+ 25291 1440 73686F72 .string "short unsigned int"
+ 25291 7420756E
+ 25291 7369676E
+ 25291 65642069
+
GAS LISTING /tmp/ccPaCTqg.s page 636
+
+
+ 25291 6E7400
+ 25292 .LASF107:
+ 25293 1453 72634461 .string "rcDatabase"
+ 25293 74616261
+ 25293 736500
+ 25294 .LASF183:
+ 25295 145e 7263436F .string "rcCommitting"
+ 25295 6D6D6974
+ 25295 74696E67
+ 25295 00
+ 25296 .LASF211:
+ 25297 146b 7263436C .string "rcClassifying"
+ 25297 61737369
+ 25297 6679696E
+ 25297 6700
+ 25298 .LASF142:
+ 25299 1479 72635472 .string "rcTree"
+ 25299 656500
+ 25300 .LASF36:
+ 25301 1480 4442475F .string "DBG_ARGS"
+ 25301 41524753
+ 25301 00
+ 25302 .LASF171:
+ 25303 1489 72635365 .string "rcSelecting"
+ 25303 6C656374
+ 25303 696E6700
+ 25304 .LASF72:
+ 25305 1495 72635465 .string "rcText"
+ 25305 787400
+ 25306 .LASF308:
+ 25307 149c 72634F75 .string "rcOutoforder"
+ 25307 746F666F
+ 25307 72646572
+ 25307 00
+ 25308 .LASF275:
+ 25309 14a9 7263496E .string "rcInvalid"
+ 25309 76616C69
+ 25309 6400
+ 25310 .LASF375:
+ 25311 14b3 75736572 .string "user_key_size"
+ 25311 5F6B6579
+ 25311 5F73697A
+ 25311 6500
+ 25312 .LASF332:
+ 25313 14c1 4B414553 .string "KAESBlockCipherVecAesNiStateShiftLeft32"
+ 25313 426C6F63
+ 25313 6B436970
+ 25313 68657256
+ 25313 65634165
+ 25314 .LASF222:
+ 25315 14e9 7263496E .string "rcInitializing"
+ 25315 69746961
+ 25315 6C697A69
+ 25315 6E6700
+ 25316 .LASF101:
+ 25317 14f8 7263426C .string "rcBlob"
+ 25317 6F6200
+
GAS LISTING /tmp/ccPaCTqg.s page 637
+
+
+ 25318 .LASF360:
+ 25319 14ff 6D737461 .string "mstate"
+ 25319 746500
+ 25320 .LASF199:
+ 25321 1506 72635265 .string "rcReindexing"
+ 25321 696E6465
+ 25321 78696E67
+ 25321 00
+ 25322 .LASF94:
+ 25323 1513 72634E6F .string "rcNoTarg"
+ 25323 54617267
+ 25323 00
+ 25324 .LASF362:
+ 25325 151c 4B414553 .string "KAESBlockCipherVecAesNiLastRound"
+ 25325 426C6F63
+ 25325 6B436970
+ 25325 68657256
+ 25325 65634165
+ 25326 .LASF276:
+ 25327 153d 7263436F .string "rcCorrupt"
+ 25327 72727570
+ 25327 7400
+ 25328 .LASF305:
+ 25329 1547 72634F75 .string "rcOutofrange"
+ 25329 746F6672
+ 25329 616E6765
+ 25329 00
+ 25330 .LASF134:
+ 25331 1554 72635363 .string "rcSchema"
+ 25331 68656D61
+ 25331 00
+ 25332 .LASF323:
+ 25333 155d 4B414553 .string "KAESBlockCipherVecAesNiStateIn"
+ 25333 426C6F63
+ 25333 6B436970
+ 25333 68657256
+ 25333 65634165
+ 25334 .LASF130:
+ 25335 157c 72635061 .string "rcPath"
+ 25335 746800
+ 25336 .LASF181:
+ 25337 1583 72635265 .string "rcReading"
+ 25337 6164696E
+ 25337 6700
+ 25338 .LASF50:
+ 25339 158d 6B65795F .string "key_size"
+ 25339 73697A65
+ 25339 00
+ 25340 .LASF313:
+ 25341 1596 72634E6F .string "rcNotAvailable"
+ 25341 74417661
+ 25341 696C6162
+ 25341 6C6500
+ 25342 .LASF392:
+ 25343 15a5 4B414553 .string "KAESBlockCipherVecAesNiRijndaelInvSBoxV"
+ 25343 426C6F63
+ 25343 6B436970
+
GAS LISTING /tmp/ccPaCTqg.s page 638
+
+
+ 25343 68657256
+ 25343 65634165
+ 25344 .LASF271:
+ 25345 15cd 7263416D .string "rcAmbiguous"
+ 25345 62696775
+ 25345 6F757300
+ 25346 .ident "GCC: (GNU) 4.4.2"
+ 25347 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccPaCTqg.s page 639
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 aes-ncbi.c
+ /tmp/ccPaCTqg.s:11 .text:0000000000000000 op_AESENC
+ /tmp/ccPaCTqg.s:32 .text:000000000000000b op_AESENCLAST
+ /tmp/ccPaCTqg.s:52 .text:0000000000000016 op_AESDEC
+ /tmp/ccPaCTqg.s:72 .text:0000000000000021 op_AESDECLAST
+ /tmp/ccPaCTqg.s:92 .text:000000000000002c op_AESIMC
+ /tmp/ccPaCTqg.s:112 .text:0000000000000037 bswap_32
+ /tmp/ccPaCTqg.s:148 .rodata:0000000000000000 vec_00
+ /tmp/ccPaCTqg.s:153 .rodata:0000000000000010 vec_01
+ /tmp/ccPaCTqg.s:173 .rodata:0000000000000020 vec_0F
+ /tmp/ccPaCTqg.s:193 .rodata:0000000000000030 vec_10
+ /tmp/ccPaCTqg.s:213 .rodata:0000000000000040 KAESBlockCipherVecAesNiRijndaelSBox
+ /tmp/ccPaCTqg.s:473 .rodata:0000000000000140 KAESBlockCipherVecAesNiRijndaelSBoxV
+ /tmp/ccPaCTqg.s:733 .rodata:0000000000000240 KAESBlockCipherVecAesNiRijndaelInvSBoxV
+ /tmp/ccPaCTqg.s:993 .rodata:0000000000000340 lo_filter
+ /tmp/ccPaCTqg.s:1013 .rodata:0000000000000350 FF_tab
+ /tmp/ccPaCTqg.s:1033 .data:0000000000000000 KAESBlockCipherVecAesNiFFtable
+ /tmp/ccPaCTqg.s:1046 .rodata:0000000000000360 KAESBlockCipherVecAesNiRcon
+ /tmp/ccPaCTqg.s:1059 .text:000000000000004b KAESBlockCipherVecAesNiKeyExpansion128
+ /tmp/ccPaCTqg.s:9273 .rodata:0000000000000610 mask.8002
+ /tmp/ccPaCTqg.s:2645 .text:00000000000018c3 KAESBlockCipherVecAesNiKeyExpansion192
+ /tmp/ccPaCTqg.s:9293 .rodata:0000000000000620 mask.8011
+ /tmp/ccPaCTqg.s:5149 .text:0000000000004000 KAESBlockCipherVecAesNiKeyExpansion256
+ /tmp/ccPaCTqg.s:7352 .text:00000000000061b6 KAESBlockCipherVecAesNiEqInvKeyExpansion
+ /tmp/ccPaCTqg.s:7434 .text:000000000000626c KAESBlockCipherVecAesNiEqInvKeyExpansion128
+ /tmp/ccPaCTqg.s:7462 .text:0000000000006296 KAESBlockCipherVecAesNiEqInvKeyExpansion192
+ /tmp/ccPaCTqg.s:7490 .text:00000000000062c0 KAESBlockCipherVecAesNiEqInvKeyExpansion256
+ /tmp/ccPaCTqg.s:7530 .text:00000000000062ea KAESBlockCipherVecAesNiCipher
+ /tmp/ccPaCTqg.s:8009 .text:000000000000699a KAESBlockCipherVecAesNiEqInvCipher
+ /tmp/ccPaCTqg.s:8493 .rodata:00000000000003d9 KAESBlockCipherVecAesNiaes_ncbi_name
+ /tmp/ccPaCTqg.s:8497 .text:0000000000007054 KAESBlockCipherVecAesNiDestroy
+ /tmp/ccPaCTqg.s:8516 .text:000000000000705e KAESBlockCipherVecAesNiBlockSize
+ /tmp/ccPaCTqg.s:8536 .text:0000000000007069 KAESBlockCipherVecAesNiKeySize
+ /tmp/ccPaCTqg.s:8561 .text:0000000000007074 KAESBlockCipherVecAesNiSetEncryptKey
+ /tmp/ccPaCTqg.s:9263 .rodata:00000000000005a0 __func__.8794
+ /tmp/ccPaCTqg.s:8652 .text:000000000000715d KAESBlockCipherVecAesNiSetDecryptKey
+ /tmp/ccPaCTqg.s:8734 .text:0000000000007220 KAESBlockCipherVecAesNiEncrypt
+ /tmp/ccPaCTqg.s:9258 .rodata:0000000000000570 __PRETTY_FUNCTION__.8830
+ /tmp/ccPaCTqg.s:8812 .text:00000000000072e3 KAESBlockCipherVecAesNiDecrypt
+ /tmp/ccPaCTqg.s:9253 .rodata:0000000000000550 __PRETTY_FUNCTION__.8851
+ /tmp/ccPaCTqg.s:8907 .text:00000000000073a6 KAESBlockCipherVecAesNiProcessorSupport
+ /tmp/ccPaCTqg.s:9248 .rodata:0000000000000520 __func__.8875
+ /tmp/ccPaCTqg.s:9142 .data.rel.ro.local:0000000000000000 KAESBlockCipherVecAesNi_vt_
+ /tmp/ccPaCTqg.s:9158 .text:000000000000764e KAESBlockCipherVecAesNiMake
+ /tmp/ccPaCTqg.s:9238 .rodata:00000000000004d0 __func__.8978
+ /tmp/ccPaCTqg.s:9243 .rodata:00000000000004f0 __PRETTY_FUNCTION__.8979
+ /tmp/ccPaCTqg.s:9268 .rodata:00000000000005e0 __PRETTY_FUNCTION__.8793
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+KDbgWriterGet
+KDbgCondToFlag
+KDbgTestModConds
+KDbgMsg
+memset
+SetRCFileFuncLine
+
GAS LISTING /tmp/ccPaCTqg.s page 640
+
+
+__assert_fail
diff --git a/libs/krypto/aes-ncbi.c b/libs/krypto/aes-ncbi.c
new file mode 100644
index 0000000..4215feb
--- /dev/null
+++ b/libs/krypto/aes-ncbi.c
@@ -0,0 +1,2644 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+
+#include <krypto/extern.h>
+
+#include "ncbi-priv.h"
+#include "aes-ncbi-priv.h"
+#include "cipher-priv.h"
+#include "blockcipher-priv.h"
+
+#include <klib/debug.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+
+#include <byteswap.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sysalloc.h>
+
+#if USE_VEC
+#include <cpuid.h>
+#endif
+
+#if USE_VECREG
+#include <v128.h>
+#endif
+
+/*
+ * This implements the AES cipher as defined by FIPS-197 from NIST
+ *
+ * Notes on implmentation:
+ *
+ * NOTE:
+ * Byte ordering in AES is not critical but unllike the original implmentation
+ * bytes are not re-ordered to a big endian order upon reading them in and this
+ * code will expect to run on an Intel/AMD type processor and might have issues
+ * on some big endian processors.
+ *
+ * NOTE:
+ * Many functions are written as static inline functions to
+ * facilitate GCC type assembly language optimization on various processors
+ *
+ * NOTE:
+ * This implements the Equivalent Inverse Cipher not the Inverse Cipher. In
+ * general functions will match those defined in the FIPS-197 document where they
+ * do not get optimized away for Intel/AMD XMM registers and AES-NI instructions.
+ *
+ * NOTE:
+ * C-99 types are used for specific sized types. An unaddornded unsigned type
+ * is used for many index type variables to allow the compiler choice in
+ * size where size does not matter very much. As these index variables do
+ * not go above 16 any size would do but the compiler can choose the size most
+ * suited for array subscripting.
+ */
+
+static const
+CipherVec vec_00 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+static const
+CipherVec vec_01 = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+
+static const
+CipherVec vec_0F = { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
+
+static const
+CipherVec vec_10 = { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };
+
+
+
+/* ======================================================================
+ * These functions implment the Advanced Encryption Standard AES as defined
+ * in the FIPS (Federal Information Processing Standars Publication 197
+ * Of Nevember 26, 2001.
+ */
+
+/* ======================================================================
+ * FIPS-197 5.1
+ */
+
+/*
+ * Read a blocks worth of bytes into an CipherVec
+ *
+ * With vector registers it is a single instruction, without them it
+ * is a memmove call
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateIn) (const void * ain)
+{
+#if USE_VEC_REG
+
+ register CipherVec vec;
+ __asm__ (
+ "movdqu (%[a]),%[s]" : [s] "=x" (vec) : [a] "D" (ain)
+ );
+ return vec;
+
+#else
+
+ CipherVec_AES_u u;
+ memmove (&u.bytes, ain, sizeof (u));
+ return u.state;
+
+#endif
+}
+
+
+/*
+ * Write a block's worth of bytes out from an CipherVec
+ *
+ * With vector registers it is a single instruction, without them it
+ * is a memmove call
+ */
+static __inline__
+void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ __attribute__ ((always_inline));
+
+static __inline__
+void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+{
+#if USE_VEC_REG
+
+ register CipherVec rvec = vec;
+ __asm__ (
+ "movdqu %[s],(%[a])" : : [s] "x" (rvec), [a] "D" (rout)
+ );
+
+#else
+
+ memmove (rout, &vec, sizeof (vec));
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+ return v1 ^ v2;
+
+#else
+
+ CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ unsigned ix;
+
+ u1.state = v1;
+ u2.state = v2;
+
+ for (ix = 0; ix < AES_Nb; ++ix)
+ u1.columns[ix] ^= u2.columns[ix];
+
+ return u1.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+ return v1 & v2;
+
+#else
+
+ CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ unsigned ix;
+
+ u1.state = v1;
+ u2.state = v2;
+
+ for (ix = 0; ix < AES_Nb; ++ix)
+ u1.columns[ix] &= u2.columns[ix];
+
+ return u1.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+ return v1 | v2;
+
+#else
+
+ CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ unsigned ix;
+
+ u1.state = v1;
+ u2.state = v2;
+
+ for (ix = 0; ix < AES_Nb; ++ix)
+ u1.columns[ix] |= u2.columns[ix];
+
+ return u1.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+ return v1 + v2;
+
+#else
+
+ CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ unsigned ix;
+
+ u1.state = v1;
+ u2.state = v2;
+
+ for (ix = 0; ix < AES_Nb; ++ix)
+ u1.columns[ix] += u2.columns[ix];
+
+ return u1.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+ return v1 - v2;
+
+#else
+
+ CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ unsigned ix;
+
+ u1.state = v1;
+ u2.state = v2;
+
+ for (ix = 0; ix < AES_Nb; ++ix)
+ u1.columns[ix] -= u2.columns[ix];
+
+ return u1.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+ return v1 * v2;
+
+#else
+
+ CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ unsigned ix;
+
+ u1.state = v1;
+ u2.state = v2;
+
+ for (ix = 0; ix < AES_Nb; ++ix)
+ u1.columns[ix] *= u2.columns[ix];
+
+ return u1.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+ return v1 / v2;
+
+#else
+
+ CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ unsigned ix;
+
+ u1.state = v1;
+ u2.state = v2;
+
+ for (ix = 0; ix < AES_Nb; ++ix)
+ u1.columns[ix] /= u2.columns[ix];
+
+ return u1.state;
+
+#endif
+}
+
+static __inline__
+CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+{
+#if USE_VEC_REG
+
+ return op_PSHUFB128 (dest, mask);
+
+#else
+
+ CipherVec_AES_u out, in, gate;
+ unsigned ix;
+
+ in.state = dest;
+ gate.state = mask;
+
+ for (ix = 0; ix < sizeof dest; ++ix)
+ {
+ if (gate.bytes[ix] & 0x80)
+ out.bytes[ix] = 0;
+ else
+ out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ }
+
+ return out.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+{
+#if USE_VEC_REG
+ static const CipherVec sl_mask [9] =
+ {
+ { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },
+ { 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC },
+ { 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
+ 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8 },
+ { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+ 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 },
+ { 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0 },
+ { 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0 },
+ { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ };
+ CipherVec vv = v;
+
+ assert (k <= 8);
+
+
+/* DEBUG_CIPHER_VECTOR ("mask", sl_mask[k]); */
+/* DEBUG_CIPHER_VECTOR ("v 1", vv); */
+ vv = op_PSLLDI128 (vv, k);
+/* DEBUG_CIPHER_VECTOR ("v 2", vv); */
+ vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+/* DEBUG_CIPHER_VECTOR ("v 3", vv); */
+ return vv;
+
+#else
+
+ CipherVec_AES_u vv; /* state and key not countries :) */
+ unsigned ix;
+
+ vv.state = v;
+
+ for (ix = 0; ix < sizeof (v); ++ix)
+ {
+ KOutMsg ("SLLBI %d %x ", k, vv.bytes[ix]);
+ vv.bytes[ix] <<= k;
+ KOutMsg ("%x\n", vv.bytes[ix]);
+ }
+ return vv.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+{
+#if USE_VEC_REG
+ static const CipherVec sr_mask [9] =
+ {
+ { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F },
+ { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F },
+ { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F },
+ { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F },
+ { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 },
+ { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
+ { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ };
+
+ v = op_PSRLDI128 (v, k);
+ v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ return v;
+
+#else
+
+ CipherVec_AES_u vv; /* state and key not countries :) */
+ unsigned ix;
+
+ vv.state = v;
+
+ for (ix = 0; ix < sizeof (v); ++ix)
+ {
+ KOutMsg ("SRLBI %d %x ", k, vv.bytes[ix]);
+ vv.bytes[ix] >>= k;
+ KOutMsg ("%x\n", vv.bytes[ix]);
+ }
+ return vv.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+{
+#if USE_VEC_REG
+ state = op_PINSRUD (state, column, which);
+#else
+ CipherVec_AES_u u;
+ u.state = state;
+ u.columns [which] = column;
+ state = u.state;
+#endif
+ return state;
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.1.4
+ *
+ * The AddRoundKey transformation is a sinple exclusive or of all 128 bits
+ * in the current block against a round key. This operation is used in all
+ * Cipher and EqInvCipher rounds
+ *
+ * With vector types it is a single operation that with vector registers is
+ * a single op-code.
+ */
+static __inline__
+CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+{
+ return AESBCMEMBER(VecXor) (state, round_key);
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.1.2
+ *
+ * FIPS 197 describes the state in column major format
+ * while C and assembly programmers tend to think in row major
+ * The byte order is 0,1,2,3,,...F as shown in the first diagram.
+ *
+ * ShiftRows() is defined as leaving this state
+ * +---+---+---+---+ +---+---+---+---+
+ * | 0 | 4 | 8 | C | | 0 | 4 | 8 | C |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 1 | 5 | 9 | D | | 5 | 9 | D | 1 |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 2 | 6 | A | E | | A | E | 2 | 6 |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 3 | 7 | B | F | | F | 3 | 7 | B |
+ * +---+---+---+---+ +---+---+---+---+
+ */
+static __inline__
+CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+{
+static const
+ CipherVec ShiftRowTable
+ /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ = { 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11 };
+
+ state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ return state;
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.3.1
+ *
+ * InvShiftRows() is defined as leaving this state
+ * +---+---+---+---+ +---+---+---+---+
+ * | 0 | 4 | 8 | C | | 0 | 4 | 8 | C |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 1 | 5 | 9 | D | | D | 1 | 5 | 9 |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 2 | 6 | A | E | | A | E | 2 | 6 |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 3 | 7 | B | F | | 7 | B | F | 3 |
+ * +---+---+---+---+ +---+---+---+---+
+ */
+static __inline__
+CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ __attribute__ ((always_inline));
+
+
+static __inline__
+CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+{
+ static const CipherVecByte InvShiftRowTable
+ /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ = { 0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3 };
+
+ state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ return state;
+}
+
+
+/* ======================================================================
+ * +---+---+---+---+ +---+---+---+---+
+ * | 0 | 4 | 8 | C | | 3 | 7 | B | F |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 1 | 5 | 9 | D | | 0 | 4 | 8 | C |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 2 | 6 | A | E | | 1 | 5 | 9 | D |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 3 | 7 | B | F | | 2 | 6 | A | E |
+ * +---+---+---+---+ +---+---+---+---+
+ */
+static __inline__
+CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+{
+static const
+ CipherVec ShiftRowTable
+ /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ = { 3, 0, 1, 2, 7, 4, 5, 6, 11, 8, 9, 10, 15, 12, 13, 14 };
+
+ state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ return state;
+}
+
+
+/* ======================================================================
+ * +---+---+---+---+ +---+---+---+---+
+ * | 0 | 4 | 8 | C | | 1 | 5 | B | D |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 1 | 5 | 9 | D | | 2 | 6 | 8 | E |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 2 | 6 | A | E | | 3 | 7 | 9 | F |
+ * +---+---+---+---+ +---+---+---+---+
+ * | 3 | 7 | B | F | | 0 | 4 | 8 | C |
+ * +---+---+---+---+ +---+---+---+---+
+ */
+static __inline__
+CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+{
+ static const CipherVec ShiftRowTable
+ /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ = { 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12 };
+
+ state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ return state;
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.1.1
+ */
+
+
+/*
+ * SubBytes replaces each byte in a state with a specific byte value from
+ * A Rijndael Substitution box
+ */
+static const
+AESByte AESBCMEMBER(RijndaelSBox)[256] =
+{
+/* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */
+/* 0- */ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+/* 1- */ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+/* 2- */ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+/* 3- */ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+/* 4- */ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+/* 5- */ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+/* 6- */ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+/* 7- */ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+/* 8- */ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+/* 9- */ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+/* A- */ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+/* B- */ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+/* C- */ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+/* D- */ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+/* E- */ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+/* F- */ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+};
+
+
+#if 0
+static __inline__
+CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+{
+ CipherVec_AES_u u;
+ unsigned ix;
+
+ u.state = state;
+
+ for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ {
+ u.bytes[ix] = AESBCMEMBER(RijndaelSBox)[u.bytes[ix]];
+ }
+
+ return u.state;
+}
+#endif
+
+/*
+ * SubWord performs the same operation as SubBytes but on
+ * the four bytes of a column and not a whole state
+ */
+static __inline__
+AESWord AESBCMEMBER(SubWord) (AESWord w)
+ __attribute__ ((always_inline));
+
+static __inline__
+AESWord AESBCMEMBER(SubWord) (AESWord w)
+{
+ AESColumn col;
+ unsigned ix;
+
+ col.word = w;
+ for (ix = 0; ix < sizeof (col); ++ix)
+ col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ return col.word;
+}
+
+#if 0
+/*
+ * InvSubBytes replaces each byte in a state with a specific byte value from
+ * an Inversze Rijndael Substitution box. That is InvSubBytes undoes SubBytes
+ */
+static const
+uint8_t AESBCMEMBER(RijndaelInvSBox)[256] =
+{
+/* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */
+/* 0- */ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+/* 1- */ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+/* 2- */ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+/* 3- */ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+/* 4- */ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+/* 5- */ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+/* 6- */ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+/* 7- */ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+/* 8- */ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+/* 9- */ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+/* A- */ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+/* B- */ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+/* C- */ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+/* D- */ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+/* E- */ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+/* F- */ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+};
+
+
+static __inline__
+CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+{
+ CipherVec_AES_u u;
+ unsigned ix;
+
+ u.state = state;
+ for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ u.bytes[ix] = AESBCMEMBER(RijndaelInvSBox)[u.bytes[ix]];
+
+ return u.state;
+}
+#endif
+
+static const
+CipherVec AESBCMEMBER(RijndaelSBoxV)[16] =
+{
+/* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */
+ { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76 },
+ { 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0 },
+ { 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15 },
+ { 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75 },
+ { 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84 },
+ { 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF },
+ { 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8 },
+ { 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2 },
+ { 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73 },
+ { 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB },
+ { 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79 },
+ { 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08 },
+ { 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A },
+ { 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E },
+ { 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF },
+ { 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 }
+};
+
+static const
+CipherVec AESBCMEMBER(RijndaelInvSBoxV)[16] =
+{
+/* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */
+ { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB },
+ { 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB },
+ { 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E },
+ { 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25 },
+ { 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92 },
+ { 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84 },
+ { 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06 },
+ { 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B },
+ { 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73 },
+ { 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E },
+ { 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B },
+ { 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4 },
+ { 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F },
+ { 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF },
+ { 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61 },
+ { 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D }
+};
+
+
+static const
+CipherVec lo_filter = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+{
+ CipherVec lo, hi, tmp, out;
+ unsigned ix;
+
+ out = vec_00;
+
+/* DEBUG_CIPHER_VECTOR ("state", state); */
+ lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+/* DEBUG_CIPHER_VECTOR ("lo", lo); */
+#if USE_VEC_REG
+ hi = op_PSRLDI128 (state, 4);
+/* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+/* DEBUG_CIPHER_VECTOR ("hi", hi); */
+#else
+ hi = AESBCMEMBER(VecDiv) (state, vec_10);
+/* DEBUG_CIPHER_VECTOR ("hi", hi); */
+#endif
+
+ for (ix = 0; ix < sizeof (state); ++ix)
+ {
+ tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+/* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ tmp = AESBCMEMBER(VecOr) (lo, tmp);
+/* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+/* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ out = AESBCMEMBER(VecOr) (out, tmp);
+/* DEBUG_CIPHER_VECTOR ("out", out); */
+ hi = AESBCMEMBER(VecSub) (hi, vec_01);
+/* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+/* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ }
+/* DEBUG_CIPHER_VECTOR ("out", out); */
+ return out;
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+{
+ return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelSBoxV));
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+{
+ return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelInvSBoxV));
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.1.3
+ */
+
+/*
+ * there are no psllb or psrlb instructions so shift words not bytes
+ * and then cut off bits that would have been zeroed if there were
+ * such instructions
+ *
+ *
+ */
+static const CipherVec FF_tab =
+{ 0x00, 0x1B, 0x36, 0x2D, 0x6C, 0x77, 0x5A, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+{
+ CipherVec sl, sr;
+
+ assert (bits <= 8);
+
+ DEBUG_CIPHER_VECTOR ("state", state);
+ sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ DEBUG_CIPHER_VECTOR ("sr", sr);
+ sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ DEBUG_CIPHER_VECTOR ("sl", sl);
+ sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ return AESBCMEMBER(VecXor)(sl, sr);
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_02) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_02) (register CipherVec state)
+{
+ DEBUG_CIPHER_VECTOR ("state", state);
+
+ state = AESBCMEMBER(FF_mul) (state, 1);
+ DEBUG_CIPHER_VECTOR ("state", state);
+
+ return state;
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+{
+ DEBUG_CIPHER_VECTOR ("state", state);
+
+ state = AESBCMEMBER(FF_mul) (state, 2);
+ DEBUG_CIPHER_VECTOR ("state", state);
+
+ return state;
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+{
+ DEBUG_CIPHER_VECTOR ("state", state);
+
+ state = AESBCMEMBER(FF_mul) (state, 3);
+ DEBUG_CIPHER_VECTOR ("state", state);
+
+ return state;
+}
+
+
+static AESByte AESBCMEMBER(FFtable)[] = { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41 };
+
+
+static __inline__
+AESByte AESBCMEMBER(FFtab) (uint8_t x)
+ __attribute__ ((always_inline));
+
+static __inline__
+AESByte AESBCMEMBER(FFtab) (uint8_t x)
+{
+ return AESBCMEMBER(FFtable)[x];
+}
+
+
+static __inline__
+AESByte AESBCMEMBER(FFmul02) (AESByte b)
+ __attribute__ ((always_inline));
+
+static __inline__
+AESByte AESBCMEMBER(FFmul02) (AESByte b)
+{
+ return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+}
+
+
+static __inline__
+AESByte AESBCMEMBER(FFmul04) (AESByte b)
+ __attribute__ ((always_inline));
+
+static __inline__
+AESByte AESBCMEMBER(FFmul04) (AESByte b)
+{
+ return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+}
+
+
+static __inline__
+AESByte AESBCMEMBER(FFmul08) (AESByte b)
+ __attribute__ ((always_inline));
+
+static __inline__
+AESByte AESBCMEMBER(FFmul08) (AESByte b)
+{
+ return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+{
+ register CipherVec c0, c1, c2, c3;
+
+ c1 = AESBCMEMBER(RotBytesLeft) (state);
+ c2 = AESBCMEMBER(RotBytesLeft) (c1);
+ c3 = AESBCMEMBER(RotBytesLeft) (c2);
+ c0 = AESBCMEMBER(VecXor) (state, c1);
+
+
+#if USE_VEC_REG
+ c0 = AESBCMEMBER(FF_mul_02) (c0);
+#else
+ {
+ CipherVec_AES_u tmp;
+ unsigned ix;
+
+ tmp.state = c0;
+
+ for (ix = 0; ix < sizeof tmp; ++ix)
+ tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+ c0 = tmp.state;
+ }
+#endif
+ c1 = AESBCMEMBER(VecXor) (c1, c2);
+ c1 = AESBCMEMBER(VecXor) (c1, c3);
+ c1 = AESBCMEMBER(VecXor) (c1, c0);
+
+ return c1;
+/* obsoleted
+ CipherVec_AES_u in, out;
+ unsigned ix;
+
+ in.state = state;
+
+ for (ix = 0; ix < sizeof (out.bytes); ix += 4)
+ {
+ unsigned const s0 = in.bytes[ix + 0];
+ unsigned const s1 = in.bytes[ix + 1];
+ unsigned const s2 = in.bytes[ix + 2];
+ unsigned const s3 = in.bytes[ix + 3];
+
+ out.bytes[ix + 0] = s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1);
+ out.bytes[ix + 1] = s0 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2);
+ out.bytes[ix + 2] = s0 ^ s1 ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3);
+ out.bytes[ix + 3] = s0 ^ s1 ^ s2 ^ AESBCMEMBER(FFmul02)(s3 ^ s0);
+ }
+ return out.state;
+*/
+}
+
+static __inline__
+CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+{
+#if USE_AES_NI
+ state = op_AESIMC (state);
+#else
+ register CipherVec r1, r2, r3, f2, f4, f8;
+
+ r1 = AESBCMEMBER(RotBytesLeft) (state);
+ r2 = AESBCMEMBER(RotBytesLeft) (r1);
+ r3 = AESBCMEMBER(RotBytesLeft) (r2);
+
+ f4 = AESBCMEMBER(VecXor) (state, r2);
+ f2 = AESBCMEMBER(VecXor) (state, r1);
+ f8 = AESBCMEMBER(VecXor) (r2, r3);
+ state = AESBCMEMBER(VecXor) (f8, r1);
+ f8 = AESBCMEMBER(VecXor) (f8, f2);
+
+
+#if USE_VEC_REG
+ f2 = AESBCMEMBER(FF_mul) (f2,1);
+ f4 = AESBCMEMBER(FF_mul) (f4,2);
+ f8 = AESBCMEMBER(FF_mul) (f8,3);
+#else
+ {
+ CipherVec_AES_u fu2, fu4, fu8;
+ unsigned ix;
+
+ fu2.state = f2;
+ fu4.state = f4;
+ fu8.state = f8;
+
+ for (ix = 0; ix < sizeof fu2; ++ix)
+ {
+ fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+ fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+ fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+ }
+ f2 = fu2.state;
+ f4 = fu4.state;
+ f8 = fu8.state;
+ }
+#endif
+
+ state = AESBCMEMBER(VecXor) (state, f2);
+ state = AESBCMEMBER(VecXor) (state, f4);
+ state = AESBCMEMBER(VecXor) (state, f8);
+
+#endif
+
+ return state;
+/*
+ CipherVec_AES_u in, out;
+ unsigned ix;
+
+ in.state = state;
+
+ for (ix = 0; ix < sizeof (out.bytes); ix += AES_Nb)
+ {
+ AESWord s0 = in.bytes[ix + 0];
+ AESWord s1 = in.bytes[ix + 1];
+ AESWord s2 = in.bytes[ix + 2];
+ AESWord s3 = in.bytes[ix + 3];
+ AESWord p, q;
+
+ q = AESBCMEMBER(FFmul08)(s0 ^ s1 ^ s2 ^ s3);
+ p = q ^ AESBCMEMBER(FFmul04)(s0 ^ s2);
+ q = q ^ AESBCMEMBER(FFmul04)(s1 ^ s3);
+
+ out.bytes[ix + 0] = s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1) ^ p;
+ out.bytes[ix + 1] = s0 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2) ^ q;
+ out.bytes[ix + 2] = s0 ^ s1 ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3) ^ p;
+ out.bytes[ix + 3] = s0 ^ s1 ^ s2 ^ AESBCMEMBER(FFmul02)(s3 ^ s0) ^ q;
+ }
+
+ return out.state;
+*/
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.2
+ */
+static const
+AESWord AESBCMEMBER(Rcon)[] = {
+ 0x00000001, 0x00000002, 0x00000004, 0x00000008,
+ 0x00000010, 0x00000020, 0x00000040, 0x00000080,
+ 0x0000001B, 0x00000036
+};
+
+
+static __inline__
+AESWord AESBCMEMBER(RotWord) (AESWord w)
+ __attribute__ ((always_inline));
+
+static __inline__
+AESWord AESBCMEMBER(RotWord) (AESWord w)
+{
+ return (w >> 8) | (w << 24);
+}
+
+
+static __inline__
+AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+ __attribute__ ((always_inline));
+
+static __inline__
+AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+{
+ /*
+ * not portable to architectures which require aligned multibyte reads
+ * but as this only runs on Intel at this point it is fine for now
+ */
+ return *(AESWord*)pointer;
+}
+
+
+
+static __inline__
+void AESBCMEMBER(KeyExpansion) (CipherVec * r, const AESByte * key, unsigned Nr, unsigned Nk)
+{
+ AESWord * w = (AESWord*)r;
+ const AESWord * pRcon;
+ unsigned ix, limit;
+ AESWord temp;
+
+
+ DEBUG_KEYEXP(("%s (w (%p), key (%p), Nr (%u) Nk (%u))\n", __func__, w, key, Nr, Nk));
+
+ for (ix = 0; ix < Nk; ++ix)
+ {
+ DEBUG_KEYEXP(("i (dec): %u\n", ix));
+ temp = AESBCMEMBER(GetWord) (key+(ix*4));
+ w[ix] = temp;
+ DEBUG_KEYEXP(("kw[%i]: %0.8x\n", ix, temp));
+ }
+
+ limit = AES_Nb * (Nr + 1);
+ pRcon = AESBCMEMBER(Rcon);
+ DEBUG_KEYEXP(("Nk (%u) Nr (%u) limit (%u)\n", Nk, Nr, limit));
+
+ for (; ix < limit; ++ix)
+ {
+
+ DEBUG_KEYEXP(("i (dec): %u %u\n", ix, limit));
+
+ /* temp should already be set */
+ DEBUG_KEYEXP(("temp: %0.8x\n", temp));
+ if ((ix % Nk) == 0)
+ {
+ temp = AESBCMEMBER(RotWord)(temp);
+ DEBUG_KEYEXP(("after RotWord: %0.8x \n", temp));
+ temp = AESBCMEMBER(SubWord) (temp);
+ DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+ DEBUG_KEYEXP(("Rcon [i/Nk]: %0.8x\n", *pRcon));
+ temp ^= *pRcon++;
+ DEBUG_KEYEXP(("after XOR with Rcon: %0.8x \n", temp));
+ }
+ else if ((Nk > 6) && ((ix % Nk) == 4))
+ {
+ temp = AESBCMEMBER(SubWord) (temp);
+ DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+ }
+ DEBUG_KEYEXP(("w[i-Nk]: %0.8x\n", w[ix-Nk]));
+ temp ^= w [ix - Nk];
+ DEBUG_KEYEXP(("kw[ix]: %0.8x\n", temp));
+ w [ix] = temp;
+ }
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+{
+#if (USE_VEC_REG)
+ static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+ return AESBCMEMBER(PackShuffleBytes) (state, mask);
+#else
+ CipherVec_AES_u temp;
+
+ temp.state = state;
+ temp.columns[3] = temp.columns[2];
+ temp.columns[2] = temp.columns[1];
+ temp.columns[1] = temp.columns[0];
+ temp.columns[0] = 0;
+ return temp.state;
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+{
+#if (USE_VEC_REG)
+ static const CipherVec mask = { 8, 9, 10, 11, 12, 13, 14, 15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ return AESBCMEMBER(PackShuffleBytes) (state, mask);
+#else
+ CipherVec_AES_u temp;
+
+ temp.state = state;
+ temp.columns[0] = temp.columns[2];
+ temp.columns[1] = temp.columns[3];
+ temp.columns[2] = 0;
+ temp.columns[3] = 0;
+ return temp.state;
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+{
+#if (USE_VEC_REG)
+ static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7 };
+ return AESBCMEMBER(PackShuffleBytes) (state, mask);
+#else
+ CipherVec_AES_u temp;
+
+ temp.state = state;
+ temp.columns[3] = temp.columns[2];
+ temp.columns[2] = temp.columns[1];
+ temp.columns[1] = temp.columns[0];
+ temp.columns[0] = 0;
+ return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ * W0:W1:W2:W3
+ *
+ * output vector in words
+ * W3:W3:W3:W3
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+{
+#if (USE_VEC_REG)
+ return op_PSHUFD128 (state,0xFF);
+#else
+ CipherVec_AES_u temp;
+
+ temp.state = state;
+ temp.columns[2] = temp.columns[3];
+ temp.columns[1] = temp.columns[3];
+ temp.columns[0] = temp.columns[3];
+ return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ * W0:W1:W2:W3
+ *
+ * output vector in words
+ * W2:W2:W2:W2
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+{
+#if (USE_VEC_REG)
+ return op_PSHUFD128 (state,0xAA);
+#else
+ CipherVec_AES_u temp;
+
+ temp.state = state;
+ temp.columns[3] = temp.columns[2];
+ temp.columns[1] = temp.columns[2];
+ temp.columns[0] = temp.columns[2];
+ return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ * W0:W1:W2:W3
+ *
+ * output vector in words
+ * W2:W2:W2:W2
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+{
+#if (USE_VEC_REG)
+ return op_PSHUFD128 (state,0x55);
+#else
+ CipherVec_AES_u temp;
+
+ temp.state = state;
+ temp.columns[3] = temp.columns[1];
+ temp.columns[2] = temp.columns[1];
+ temp.columns[0] = temp.columns[1];
+ return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ * W0:W1:W2:W3
+ *
+ * output vector in words
+ * W0:W0:W0:W0
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+{
+#if (USE_VEC_REG)
+ return op_PSHUFD128 (state,0x00);
+#else
+ CipherVec_AES_u temp;
+
+ temp.state = state;
+ temp.columns[3] = temp.columns[0];
+ temp.columns[2] = temp.columns[0];
+ temp.columns[1] = temp.columns[0];
+ return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ * W0:W1:W2:W3
+ * X0:X1:X2:X3
+ *
+ * output vector in words
+ * W0:W1:X0:X1
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+{
+#if USE_VEC_REG
+ return op_SHUFPD (w, x, 0x00);
+#else
+ CipherVec_AES_u ww;
+ CipherVec_AES_u xx;
+
+ ww.state = w;
+ xx.state = x;
+
+ ww.columns[2] = xx.columns[0];
+ ww.columns[3] = xx.columns[1];
+
+ return ww.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ * W0:W1:W2:W3
+ * X0:X1:X2:X3
+ *
+ * output vector in words
+ * X2:X3:W0:W1
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+{
+#if USE_VEC_REG
+ return op_SHUFPD (w, x, 0x01);
+#else
+ CipherVec_AES_u ww;
+ CipherVec_AES_u xx;
+
+ ww.state = w;
+ xx.state = x;
+
+ ww.columns[0] = ww.columns[2];
+ ww.columns[1] = ww.columns[3];
+ ww.columns[2] = xx.columns[0];
+ ww.columns[3] = xx.columns[1];
+
+ return ww.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ * W0:W1:W2:W3
+ * X0:X1:X2:X3
+ *
+ * output vector in words
+ * X2:X3:W0:W1
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+{
+#if USE_VEC_REG
+ return op_SHUFPD (v0, v1, 0x02);
+#else
+ CipherVec_AES_u t0;
+ CipherVec_AES_u t1;
+
+ t0.state = v0;
+ t1.state = v1;
+
+ t0.columns[2] = t0.columns[0];
+ t0.columns[3] = t0.columns[1];
+ t0.columns[0] = t1.columns[2];
+ t0.columns[1] = t1.columns[3];
+
+ return t0.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ * W0:W1:W2:W3
+ *
+ * output vector in words
+ * W0:W0^W1:W0^W1^W2:W0^W1^W2^W3
+ */
+static __inline__
+CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+{
+#if USE_VEC
+ register CipherVec shift = state;
+
+ state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
+ return state;
+#else
+ CipherVec_AES_u temp;
+
+ temp.state = state;
+
+ temp.columns[1] ^= temp.columns[0];
+ temp.columns[2] ^= temp.columns[1];
+ temp.columns[3] ^= temp.columns[2];
+
+ return temp.state;
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+{
+#if (USE_AES_NI)
+ return op_AESKEYGENASSIST (state, rcon);
+#else
+ CipherVec_AES_u in;
+ CipherVec_AES_u out;
+ AESWord rconw;
+
+ rconw = (AESWord)(AESByte)rcon;
+ in.state = state;
+
+ out.columns[0] = AESBCMEMBER(SubWord)(in.columns[1]);
+ out.columns[1] = AESBCMEMBER(RotWord)(out.columns[0]) ^ rconw;
+ out.columns[2] = AESBCMEMBER(SubWord)(in.columns[3]);
+ out.columns[3] = AESBCMEMBER(RotWord)(out.columns[2]) ^ rconw;
+
+ return out.state;
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+{
+#if (USE_AES_NI)
+ register CipherVec tmp = state;
+ tmp = op_AESKEYGENASSIST (tmp, rcon);
+ return AESBCMEMBER(StateDupColumn1) (tmp);
+#else
+ CipherVec_AES_u u;
+ AESWord rconw;
+ AESWord temp;
+
+ rconw = (AESWord)(AESByte)rcon;
+ u.state = state;
+ temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ temp = AESBCMEMBER(RotWord)(temp);
+ temp ^= rconw;
+
+ u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ return u.state;
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+{
+#if (USE_AES_NI)
+ register CipherVec tmp = state;
+ tmp = op_AESKEYGENASSIST (tmp, 0);
+ return AESBCMEMBER(StateDupColumn2) (tmp);
+#else
+ CipherVec_AES_u u;
+ AESWord temp;
+
+ u.state = state;
+ temp = AESBCMEMBER(SubWord)(u.columns[3]);
+
+ u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ return u.state;
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+{
+#if (USE_AES_NI)
+ register CipherVec tmp = state;
+ tmp = op_AESKEYGENASSIST (tmp, rcon);
+ return AESBCMEMBER(StateDupColumn3) (tmp);
+
+#else
+ register CipherVec vrcon;
+ register CipherVec tmp;
+
+ vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ tmp = AESBCMEMBER(SubBytes) (state);
+ DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ return tmp;
+
+#endif
+/*
+#elif USE_VEC && 1
+ register CipherVec tmp;
+ CipherVec_AES_u u;
+
+ u.columns [3] = rcon;
+
+ tmp = AESBCMEMBER(SubBytes) (state);
+ DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ tmp = AESBCMEMBER(VecXor)(tmp, u.state);
+ DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ return tmp;
+
+#else
+ CipherVec_AES_u u;
+ AESWord rconw;
+ AESWord temp;
+
+ rconw = (AESWord)(AESByte)rcon;
+ u.state = state;
+ temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ temp = AESBCMEMBER(RotWord)(temp);
+ temp ^= rconw;
+
+ u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ return u.state;
+#endif
+*/
+}
+
+
+#if USE_VEC
+static __inline__
+void AESBCMEMBER(KeyExpansion128) (CipherVec * round_keys, const AESByte * key)
+{
+ CipherVec state;
+ CipherVec kgastate;
+
+ state = AESBCMEMBER(StateIn) (key);
+ round_keys[0] = state;
+
+#define KE128(rcon,offset) \
+ kgastate = AESBCMEMBER(AesKeyGenAssistColumn3) (state, rcon); \
+ state = AESBCMEMBER(ShiftXorColumns) (state); \
+ state ^= kgastate; \
+ round_keys[offset] = state
+
+ KE128(0x01,1);
+ KE128(0x02,2);
+ KE128(0x04,3);
+ KE128(0x08,4);
+ KE128(0x10,5);
+ KE128(0x20,6);
+ KE128(0x40,7);
+ KE128(0x80,8);
+ KE128(0x1B,9);
+ KE128(0x36,10);
+}
+#else
+static __inline__
+void AESBCMEMBER(KeyExpansion128) (CipherVec * w, const AESByte * key)
+{
+ OUTMSG(("\n\n\n%s: Not my code\n\n\n",__func__));
+ AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_128, AES_Nk_128);
+}
+#endif
+
+
+#if USE_VEC
+static __inline__
+void AESBCMEMBER(KeyExpansion192) (CipherVec * round_keys, const AESByte * key)
+{
+ /* work on three blocks at a time which is two Nr worth
+ * we'll build it with 6 words in v0:v1 and 6 words in w0:w1
+ * but move them them into v0:v1:v2 before writing them to
+ * the key schedule
+ */
+
+ register CipherVec v0, v1, v2, v3, v4;
+ register CipherVec k; /* we'll only need one of the key gen assist blocks at a time */
+
+/* pattern 0 */
+ v0 = AESBCMEMBER(StateIn) (key); /* k0 : k1 : k2 : k3 */
+ v1 = AESBCMEMBER(StateIn) (key+8); /* k2 : k3 : k4 : k5 */
+ v1 = AESBCMEMBER(StateShiftRight64) (v1); /* k4 : k5 : 0 : 0 */
+
+ round_keys[0] = v0; /* K0:K1:K2:K3 */
+
+/* pattern 1 */
+/* start the working pattern with 6 ready words in v0:v1 */
+
+ k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ (k = v1, 0x01); /* F(k5) : F(k5) : F(k5) : F(k5) */
+ v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k0 : k0^k1 :k0^k1^k2:k0^k1^k2^k3 */
+ v3 ^= k; /* k6 : k7 : k8 : k9 */
+ v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k4 : k4^k5 : k4^k5 : k4^k5 */
+ k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k9 : k9 : k9 : k9 */
+ v4 ^= k; /* k10 : k11 : k10 : k11 */
+ v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k4 : k5 : k6 : k7 */
+ round_keys[1] = v1; /* K4:K5:K6:K7 */
+
+ v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k8 : k9 : k10 : k11 */
+ round_keys[2] = v2; /* K8:K9:K10:K11 */
+
+/* pattern 2 */
+ v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k6 : k6^k7 :k6^k7^k8:k6^k7^k8^k9 */
+ v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k10 :k10^k11: k10^k11: k10^k11 */
+ k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ (k = v2,0x02); /* F(k11): F(k11): F(k11) : F(k11) */
+ v0 ^= k; /* k12 : k13 : k14 : k15 */
+ round_keys[3] = v0; /* K12:K13:K14:K15 */
+ k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k15 : k15 : k15 : k15 */
+ v1 ^= k; /* k16 : k17 : k16 : k17 */
+
+
+/* pattern 1 */
+/* start the working pattern with 6 ready words in v0:v1 */
+
+ k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ (k = v1,0x04); /* F(k17): F(k17): F(k17) : F(k17) */
+ v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k12 :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+ v3 ^= k; /* k18 : k19 : k20 : k21 */
+ v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k16 :k16^k17: k17 : 0 */
+ k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k21 : k21 : k21 : k21 */
+ v4 ^= k; /* k22 : k23 : x : x */
+ v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k16 : k17 : k18 : k19 */
+ round_keys[4] = v1; /* K16:K17:K18:K19 */
+
+ v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k20 : k21 : k22 : k23 */
+ round_keys[5] = v2; /* K20:K21:K22:K23 */
+
+/* pattern 2 */
+ v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k18 :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+ v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k22 :k22^k23: k23 : 0 */
+ k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ (k = v2,0x08); /* F(k23): F(k23): F(k23) : F(k23) */
+ v0 ^= k; /* k24 : k25 : k26 : k27 */
+ k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k27 : k27 : k27 : k27 */
+ v1 ^= k; /* k28 : k29 : x : x */
+
+ round_keys[6] = v0; /* K24:K25:K26:K27 */
+
+/* pattern 1 4-15 = 28-39 */
+/* start the working pattern with 6 ready words in v0:v1 */
+
+ k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ (k = v1,0x10); /* F(k29): F(k29): F(k29) : F(k29) */
+ v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k24 :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+ v3 ^= k; /* k30 : k31 : k32 : k33 */
+ v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k26 :k28^k29: k29 : 0 */
+ k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k33 : k33 : k33 : k33 */
+ v4 ^= k; /* k34 : k35 : x : x */
+ v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k28 : k29 : k30 : k31 */
+
+ round_keys[7] = v1; /* K28:K29:K30:K31 */
+
+ v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k32 : k33 : k34 : k35 */
+ round_keys[8] = v2; /* K32:K33:K34:K35 */
+/* pattern 2 */
+ v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k30 :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+ v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k26 :k26^k27: k27 : 0 */
+ k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ (k = v2,0x20); /* F(k35): F(k35): F(k35) : F(k35) */
+ v0 ^= k; /* k36 : k37 : k38 : k39 */
+ k = AESBCMEMBER(StateDupColumn3) (v0); /* k39 : k39 : k39 : k39 */
+ v1 ^= k; /* k40 : k41 : x : x */
+
+ round_keys[9] = v0; /* K36:K37:K38:K39 */
+
+/* pattern 1 4-15 = 40-55 but we only need through 51 so we change from pattern 2 to pattern 3 */
+/* start the working pattern with 6 ready words in v0:v1 */
+
+ k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ (k = v1,0x40); /* F(k41): F(k41): F(k41) : F(k41) */
+ v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k36 :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+ v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k40 :k40^k41: x 5 : x */
+ v3 ^= k; /* k42 : k43 : k44 : k45 */
+ k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k45 : k45 : k45 : k45 */
+ v4 ^= k; /* k46 : k47 : x : x */
+ v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k40 : k41 : k42 : k43 */
+ round_keys[10] = v1; /* K40:K41:K42:K43 */
+ v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k44 : k45 : k46 : k47 */
+ round_keys[11] = v2; /* K44:K45:K46:K47 */
+
+/* pattern 3 */
+ v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k42 :k42^k43:k42^k43^k44:k42^k43^k44^k45 */
+ k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ (v2,0x80); /* F(k47): F(k47): F(k47) : F(k47) */
+ v0 ^= k; /* k48 : k49 : k50 : k51 */
+ round_keys[12] = v0; /* K48:K49:K50:K51 */
+}
+#else
+static __inline__
+void AESBCMEMBER(KeyExpansion192) (CipherVec * w, const AESByte * key)
+{
+ AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_192, AES_Nk_192);
+}
+#endif
+
+
+
+
+/* ----- */
+
+#if USE_VEC || 1
+static __inline__
+void AESBCMEMBER(KeyExpansion256) (CipherVec * round_keys, const AESByte * key)
+{
+ CipherVec v0, v1;
+ CipherVec k;
+
+ v0 = AESBCMEMBER (StateIn) (key);
+ v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+
+ round_keys[0] = v0; /* k0 : k1 : k2 : k3 */
+ round_keys[1] = v1; /* k4 : k5 : k6 : k7 */
+
+#define KE256_1(offset,rcon) \
+ k = AESBCMEMBER(AesKeyGenAssistColumn3)(v1,rcon); \
+ v0 = AESBCMEMBER(ShiftXorColumns) (v0); \
+ v0 = AESBCMEMBER(VecXor) (v0, k); \
+ round_keys[offset] = v0
+
+#define KE256_2(offset) \
+ k = AESBCMEMBER(AesKeyGenAssistColumn2)(v0); \
+ v1 = AESBCMEMBER(ShiftXorColumns) (v1); \
+ v1 = AESBCMEMBER(VecXor) (v1, k); \
+ round_keys[offset] = v1
+
+ KE256_1(2,0x01); /* k8 : k9 : k10 : k11 */
+ KE256_2(3); /* k12 : k13 : k14 : k15 */
+ KE256_1(4,0x02); /* k16 : k17 : k18 : k19 */
+ KE256_2(5); /* k20 : k21 : k22 : k23 */
+ KE256_1(6,0x04); /* k24 : k25 : k26 : k27 */
+ KE256_2(7); /* k28 : k29 : k30 : k31 */
+ KE256_1(8,0x08); /* k32 : k33 : k34 : k35 */
+ KE256_2(9); /* k36 : k37 : k38 : k39 */
+ KE256_1(10,0x10); /* k40 : k41 : k42 : k43 */
+ KE256_2(11); /* k44 : k45 : k46 : k47 */
+ KE256_1(12,0x20); /* k48 : k49 : k50 : k51 */
+ KE256_2(13); /* k52 : k53 : k54 : k55 */
+ KE256_1(14,0x40); /* k56 : k57 : k58 : k59 */
+}
+#else
+static __inline__
+void AESBCMEMBER(KeyExpansion256) (CipherVec * w, const AESByte * key)
+{
+ AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_256, AES_Nk_256);
+}
+#endif
+
+
+static __inline__
+void AESBCMEMBER(EqInvKeyExpansion) (CipherVec * r, const CipherVec * dr, unsigned Nr)
+{
+ unsigned ix, jx;
+
+ jx = Nr;
+ ix = 0;
+ r[ix++] = dr[jx--];
+ while (jx)
+ r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+ r[ix] = dr[jx];
+}
+
+
+static __inline__
+void AESBCMEMBER(EqInvKeyExpansion128) (CipherVec * w, const CipherVec * kw)
+{
+ AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+}
+
+
+static __inline__
+void AESBCMEMBER(EqInvKeyExpansion192) (CipherVec * w, const CipherVec * kw)
+{
+ AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+}
+
+
+static __inline__
+void AESBCMEMBER(EqInvKeyExpansion256) (CipherVec * w, const CipherVec * kw)
+{
+ AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+}
+
+
+/*
+ * Cipher First Round
+ */
+static __inline__
+CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+{
+ DEBUG_CIPHER_VECTOR("Start of Round", state);
+
+ DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+
+ state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+
+ DEBUG_CIPHER_VECTOR("End 1st Round", state);
+
+ return state;
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+ register const CipherVec round_keys)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+ register const CipherVec round_keys)
+{
+#if _DEBUGGING
+ CipherVec mstate;
+ CipherVec mround_keys;
+
+ mstate = state;
+ mround_keys = round_keys;
+
+ DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+
+#endif
+
+#if USE_AES_NI
+ state = op_AESENC (state, round_keys);
+#else
+ state = AESBCMEMBER(SubBytes) (state);
+
+ DEBUG_CIPHER_VECTOR("After SubBytes", state);
+
+ state = AESBCMEMBER(ShiftRows) (state);
+
+ DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+
+ state = AESBCMEMBER(MixColumns) (state);
+
+ /* ommited n on purpose */
+ DEBUG_CIPHER_VECTOR("After MixColum", state);
+
+ state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+#endif
+ DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ DEBUG_CIPHER_VECTOR("End of Round", state);
+
+ return state;
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+{
+ DEBUG_CIPHER_VECTOR("Start of Round", state);
+
+#if USE_AES_NI
+ state = op_AESENCLAST (state, round_keys);
+#else
+ state = AESBCMEMBER(SubBytes) (state);
+
+ DEBUG_CIPHER_VECTOR("After SubBytes", state);
+
+ state = AESBCMEMBER(ShiftRows) (state);
+
+ DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+
+ state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+#endif
+ DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ DEBUG_CIPHER_VECTOR("End of Round", state);
+
+ return state;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Cipher
+ */
+/*
+ *
+This implementation as stated
+ * above for simplifaction broke out the three types of rounds into
+ * first round, middle rounds, and last round. This approach was taken
+ * for ease of coding for optimization using smaller bytes of code
+ * but inlining of the functions for efficiency
+ */
+static __inline__
+CipherVec AESBCMEMBER(Cipher) (CipherVec state, const CipherVec * key,
+ unsigned Nr)
+{
+ unsigned ix = 0;
+
+ state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+
+ for ( ; ix < Nr; ++ix)
+ state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+
+ return AESBCMEMBER(LastRound) (state, key[ix]);
+}
+
+
+/*
+ * Section 5.1 of FIPS 197
+ *
+ * This set of routines implements our structured wrapping of the
+ * FIPS-197 Section 5.3.5 Equivalent Inverse Cipher. In particular
+ * figure 15 Pseudo Code for the Equivalent Inverse Cipher.
+ *
+ * The FIPS pseudocode has a single function which we have broken out
+ * into three kinds of rounds - first round, middle rounds and last
+ * round as we have also done with the cipher rountine.
+ *
+ * The EqInvCipher operates on whole cipher blocks so the Byte and Block
+ * code is the same here until subroutines of the round functions are
+ * called.
+ */
+
+/*
+ * First round of equivalent inverse cipher is merely an XOR against the
+ * round key.
+ */
+static __inline__
+CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+{
+ DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+
+ state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+
+ DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ return state;
+}
+
+
+/*
+ * middle rounds of the equivalent inverse cipher perform four steps
+ * InvSubBytes (inverse substitute bytes
+ * InvShiftRows (inverse shift rows
+ * InvMixColumns (inverse mix columns)
+ * AddRoundKey (xor against the round key)
+ *
+ * the AES-NI instruction set from until implments all four steps with
+ * a single instruction
+ */
+
+static __inline__
+CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+ register CipherVec round_keys)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+ register CipherVec round_keys)
+{
+#if _DEBUGGING
+ CipherVec mstate;
+ CipherVec mround_keys;
+
+ mstate = state;
+ mround_keys = round_keys;
+#endif
+
+ DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+
+ /*
+ * AES-NI implmentation
+ */
+#if USE_AES_NI
+
+ state = op_AESDEC (state, round_keys);
+
+#else /* #if USE_AES_NI */
+
+ /*
+ * All other implementations
+ */
+ state = AESBCMEMBER(InvSubBytes) (state);
+
+# if _DEBUGGING
+ mstate = state;
+
+ DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+# endif
+
+ state = AESBCMEMBER(InvShiftRows) (state);
+
+# if _DEBUGGING
+ mstate = state;
+
+ DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+# endif
+
+ state = AESBCMEMBER(InvMixColumns) (state);
+
+# if _DEBUGGING
+ mstate = state;
+
+ DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+# endif
+
+ state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+#endif
+
+#if _DEBUGGING
+ mstate = state;
+
+ DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+
+ DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+#endif /* #if USE_AES_NI */
+
+ return state;
+}
+
+
+/*
+ * The final round of the equivalent inverse cipher is the same as
+ * the middle rounds with the ommission of the InvMixColumns step.
+ */
+static __inline__
+CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+ register CipherVec round_keys)
+ __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+ register CipherVec round_keys)
+{
+ DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+
+#if USE_AES_NI
+ state = op_AESDECLAST (state, round_keys);
+#else
+
+ state = AESBCMEMBER(InvSubBytes) (state);
+
+ DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+
+ state = AESBCMEMBER(InvShiftRows) (state);
+
+ DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+
+ state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+#endif
+ DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ DEBUG_INVCIPHER_VECTOR("End of Round", state);
+
+ return state;
+}
+
+
+/*
+ * The EqInvCipher functions (is defined in Figure 15 'Pseudo Code for
+ * for the Equivalent Inverse Cipher. This implementation as stated
+ * above for simplifaction broke out the three types of rounds into
+ * first round, middle rounds, and last round. This approach was taken
+ * for ease of coding for optimization using smaller bytes of code
+ * but inlining of the functions for efficiency
+ */
+static /*__inline__*/
+CipherVec AESBCMEMBER(EqInvCipher) (CipherVec state, const CipherVec * key,
+ unsigned Nr)
+{
+ unsigned ix = 0;
+
+ state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+
+ for ( ; ix < Nr; ++ix)
+ state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+
+ return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+}
+
+
+/* ======================================================================
+ * This section of the file is the use of the cipher defined above within
+ * our BlockCipherObject.
+ *
+ * These are the functions that will be directly referenced in the vector
+ * table for the block cipher. These are not specifically derived from
+ * the FIPS-197 document.
+ */
+#include "blockcipher-impl.h"
+
+typedef struct AES_CLASS AES_CLASS;
+
+static const char AESBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ * How large is the stored key for this cipher? Not the user key used
+ * to create this key (key schedule)
+ *
+ * This is needed by KCipher to know how large the KCipher objecr is at
+ * allocation and to know how much of a buffer each decryption/encryption is
+ */
+static
+void AESBCMEMBER(Destroy) (const BLOCKCIPHER_VEC_IMPL * self)
+{
+ /* we use a constant object so do nothing */
+}
+
+
+/* ----------------------------------------------------------------------
+ * BlockSize
+ */
+static
+uint32_t AESBCMEMBER(BlockSize) ()
+{
+ return (uint32_t) sizeof (AESBlock);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KeySize
+ * How large is the stored key for this cipher? Not the user key used
+ * to create this key (key schedule)
+ *
+ * This is needed by KCipher to know how large the KCipher objecr is at
+ * allocation and to know how much of a buffer each decryption/encryption is
+ */
+static
+uint32_t AESBCMEMBER(KeySize) ()
+{
+ return (uint32_t) sizeof (AESKeySchedule);
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetEncryptKey
+ * The KCipher calls this to have the block cipher build an encryption
+ * key in the KCipher object
+ *
+ */
+static
+rc_t AESBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+ uint32_t user_key_size)
+{
+ rc_t rc;
+ AESKeySchedule * key;
+
+ rc = 0;
+ key = encrypt_key;
+
+ switch (user_key_size)
+ {
+ case AES_Nk_128 * sizeof (AESWord):
+ key->number_of_rounds = AES_Nr_128;
+ AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+ break;
+
+ case AES_Nk_192 * sizeof (AESWord):
+ key->number_of_rounds = AES_Nr_192;
+ AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+ break;
+
+ case AES_Nk_256 * sizeof (AESWord):
+ key->number_of_rounds = AES_Nr_256;
+ AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+ break;
+
+ default:
+ key->number_of_rounds = 0;
+ memset (key, 0, sizeof (*key));
+ rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+ break;
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetDecryptKey
+ * The KCipher calls this to have the block cipher build an decryption
+ * key in the KCipher object
+ *
+ */
+static
+rc_t AESBCMEMBER(SetDecryptKey) (void * decrypt_key,
+ const char * user_key,
+ uint32_t user_key_size)
+{
+ AESKeySchedule encrypt_key;
+ rc_t rc;
+
+ rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+ if (rc == 0)
+ {
+ AESKeySchedule * key;
+
+ key = decrypt_key;
+
+ switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+ {
+ case AES_Nr_128:
+ AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+ encrypt_key.round_keys);
+ break;
+
+ case AES_Nr_192:
+ AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+ encrypt_key.round_keys);
+ break;
+
+ case AES_Nr_256:
+ AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+ encrypt_key.round_keys);
+ break;
+ }
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Encrypt
+ *
+ * Perform an encryption of a single block. Chained modes and stream
+ * cipher modes will call this multiple times.
+ *
+ */
+static
+CipherVec AESBCMEMBER(Encrypt) (CipherVec state,
+ const void * encrypt_key)
+{
+ const AESKeySchedule * key = encrypt_key;
+ assert (key);
+
+ switch (key->number_of_rounds)
+ {
+ default:
+ state = vec_00;
+ break;
+
+ case AES_Nr_128:
+ state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+ break;
+
+ case AES_Nr_192:
+ state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+ break;
+
+ case AES_Nr_256:
+ state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+ break;
+ }
+
+ return state;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Decrypt
+ *
+ * Perform a decryption of a single block. Chained modes and stream
+ * cipher modes will call this multiple times.
+ */
+static
+CipherVec AESBCMEMBER(Decrypt) (CipherVec state,
+ const void * decrypt_key)
+{
+ const AESKeySchedule * key = decrypt_key;
+
+ assert (key);
+
+ switch (key->number_of_rounds)
+ {
+ default:
+ state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+ break;
+
+ case AES_Nr_128:
+ state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ AES_Nr_128);
+ break;
+
+ case AES_Nr_192:
+ state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ AES_Nr_192);
+ break;
+
+ case AES_Nr_256:
+ state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ AES_Nr_256);
+ break;
+ }
+
+ return state;
+}
+
+
+/* ----------------------------------------------------------------------
+ * MakeProcessorSupport
+ *
+ * Run-time check for support of this particular AES implmentation by
+ * checking the flags given via the cpuid instruction.
+ */
+static __inline__
+bool AESBCMEMBER(ProcessorSupport) ()
+{
+ uint32_t level = 1, a, b, c, d;
+ bool ret = true;
+
+ __cpuid (level, a, b, c, d);
+
+ DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+
+#if USE_AES_NI
+ /*
+ * Only one flag tells whether the AES-NI instructions
+ * are implmented in this CPU
+ */
+ if ( ! (c & bit_AES))
+ {
+ DEBUG_OBJECT(("%s: failed no AES\n",__func__));
+ ret = false;
+ } else
+#endif
+
+#if USE_VEC_REG
+ /*
+ * Several flags indicate different levels of SSE
+ * instruction implmentation
+ *
+ * we require SSE4.1
+ *
+ * that dates from 2006 so is most likely good enough
+ */
+ /* if ( ! (c & (bit_SSE4_2))
+ {
+ DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ ret = false;
+ }
+
+ else */
+ if ( ! (c & bit_SSE4_1))
+ {
+ DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ ret = false;
+ }
+
+ else if ( ! (c & bit_SSSE3))
+ {
+ DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ ret = false;
+ }
+
+ else if ( ! (c & bit_SSE3))
+ {
+ DEBUG_OBJECT(("%s: failed no SSE3\n",__func__));
+ ret = false;
+ }
+
+ else if ( ! (d & bit_SSE2))
+ {
+ DEBUG_OBJECT(("%s: failed no SSE2\n",__func__));
+ ret = false;
+ }
+
+ else if ( ! (d & bit_SSE))
+ {
+ DEBUG_OBJECT(("%s: failed no SSE\n",__func__));
+ ret = false;
+ }
+#endif
+ DEBUG_OBJECT(("%s: passed\n",__func__));
+ return ret;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Init
+ *
+ * Initialize the fields of this object. The derived class will call this
+ * during it's initialization.
+ *
+ * self object to initialze
+ * vt the virtual table of the derived class
+ * mgr the cipher manager that is the construction factory block cipher
+ * objects hold references to the manager while the manager merely
+ * points at the block ciphers when all block ciphers are destroyed
+ * the manager loses its references and it too can be destroyed if not
+ * held elsewhere
+ * name ASCIZ c-string the name of this class
+ */
+static const
+KBlockCipherVec_vt_v1 AESBCMEMBER(_vt_) =
+{
+ { 1, 1 },
+
+ AESBCMEMBER(Destroy),
+ AESBCMEMBER(BlockSize),
+ AESBCMEMBER(KeySize),
+ AESBCMEMBER(SetEncryptKey),
+ AESBCMEMBER(SetDecryptKey),
+ AESBCMEMBER(Encrypt),
+ AESBCMEMBER(Decrypt)
+};
+
+
+/* ----------------------------------------------------------------------
+ * Make
+ *
+ * Create a new AES Block Cipher object.
+ * The processor is checked to see if this particular version is supported on
+ * this particular CPU.
+ */
+rc_t AESBCMEMBER(Make) (KBlockCipher ** new_obj)
+{
+ rc_t rc;
+
+ DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+
+ /* Check parameter first */
+ if (new_obj == NULL)
+ rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+
+ else
+ {
+ *new_obj = NULL;
+
+ /* check for processor support of this flavor */
+ if ( ! AESBCMEMBER(ProcessorSupport)())
+ rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
+ else
+ {
+ rc = 0;
+ *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+ }
+ }
+ return rc;
+}
+
+/* end of file lib/krypto/aes-ncbi.c */
diff --git a/libs/krypto/aes-ncbi.vec.pic.o.list b/libs/krypto/aes-ncbi.vec.pic.o.list
new file mode 100644
index 0000000..243c606
--- /dev/null
+++ b/libs/krypto/aes-ncbi.vec.pic.o.list
@@ -0,0 +1,74023 @@
+GAS LISTING /tmp/ccMa7HLZ.s page 1
+
+
+ 1 .file "aes-ncbi.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 3B260000 .text
+ 8 02007101
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .type bswap_32, @function
+ 11 bswap_32:
+ 12 .LFB509:
+ 13 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** */
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifndef _h_byteswap_
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _h_byteswap_
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef _BYTESWAP_H
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #warning "GNU byteswap.h being used"
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #else
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _BYTESWAP_H 1234
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #include <stdint.h>
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef __cplusplus
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** extern "C" {
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #endif
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 2
+
+
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint16_t bswap_16 ( uint16_t i )
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** register uint16_t rtn;
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** __asm__
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** (
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** "rorw $8, %w0"
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "=r" ( rtn )
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "0" ( i )
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "cc"
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** );
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** return rtn;
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint32_t bswap_32 ( uint32_t i )
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+ 14 .loc 1 57 0
+ 15 .cfi_startproc
+ 16 0000 55 pushq %rbp
+ 17 .LCFI0:
+ 18 .cfi_def_cfa_offset 16
+ 19 0001 4889E5 movq %rsp, %rbp
+ 20 .cfi_offset 6, -16
+ 21 .LCFI1:
+ 22 .cfi_def_cfa_register 6
+ 23 0004 53 pushq %rbx
+ 24 0005 897DF4 movl %edi, -12(%rbp)
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** register uint32_t rtn;
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** __asm__
+ 25 .loc 1 59 0
+ 26 0008 8B45F4 movl -12(%rbp), %eax
+ 27 000b 89C3 movl %eax, %ebx
+ 28 .cfi_offset 3, -24
+ 29 #APP
+ 30 # 59 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h" 1
+ 60 (
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** "bswap %0"
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "=r" ( rtn )
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "0" ( i )
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "cc"
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** );
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** return rtn;
+ 31 bswap %ebx
+ 32 # 0 "" 2
+ 33 .loc 1 66 0
+ 34 #NO_APP
+ 35 000f 89D8 movl %ebx, %eax
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+ 36 .loc 1 67 0
+ 37 0011 5B popq %rbx
+ 38 0012 C9 leave
+ 39 0013 C3 ret
+ 40 .cfi_endproc
+ 41 .LFE509:
+ 42 .size bswap_32, .-bswap_32
+ 43 .section .rodata
+
GAS LISTING /tmp/ccMa7HLZ.s page 3
+
+
+ 44 .align 16
+ 45 .type vec_00, @object
+ 46 .size vec_00, 16
+ 47 vec_00:
+ 48 0000 00000000 .zero 16
+ 48 00000000
+ 48 00000000
+ 48 00000000
+ 49 .align 16
+ 50 .type vec_01, @object
+ 51 .size vec_01, 16
+ 52 vec_01:
+ 53 0010 01 .byte 1
+ 54 0011 01 .byte 1
+ 55 0012 01 .byte 1
+ 56 0013 01 .byte 1
+ 57 0014 01 .byte 1
+ 58 0015 01 .byte 1
+ 59 0016 01 .byte 1
+ 60 0017 01 .byte 1
+ 61 0018 01 .byte 1
+ 62 0019 01 .byte 1
+ 63 001a 01 .byte 1
+ 64 001b 01 .byte 1
+ 65 001c 01 .byte 1
+ 66 001d 01 .byte 1
+ 67 001e 01 .byte 1
+ 68 001f 01 .byte 1
+ 69 .align 16
+ 70 .type vec_0F, @object
+ 71 .size vec_0F, 16
+ 72 vec_0F:
+ 73 0020 0F .byte 15
+ 74 0021 0F .byte 15
+ 75 0022 0F .byte 15
+ 76 0023 0F .byte 15
+ 77 0024 0F .byte 15
+ 78 0025 0F .byte 15
+ 79 0026 0F .byte 15
+ 80 0027 0F .byte 15
+ 81 0028 0F .byte 15
+ 82 0029 0F .byte 15
+ 83 002a 0F .byte 15
+ 84 002b 0F .byte 15
+ 85 002c 0F .byte 15
+ 86 002d 0F .byte 15
+ 87 002e 0F .byte 15
+ 88 002f 0F .byte 15
+ 89 .align 16
+ 90 .type vec_10, @object
+ 91 .size vec_10, 16
+ 92 vec_10:
+ 93 0030 10 .byte 16
+ 94 0031 10 .byte 16
+ 95 0032 10 .byte 16
+ 96 0033 10 .byte 16
+ 97 0034 10 .byte 16
+
GAS LISTING /tmp/ccMa7HLZ.s page 4
+
+
+ 98 0035 10 .byte 16
+ 99 0036 10 .byte 16
+ 100 0037 10 .byte 16
+ 101 0038 10 .byte 16
+ 102 0039 10 .byte 16
+ 103 003a 10 .byte 16
+ 104 003b 10 .byte 16
+ 105 003c 10 .byte 16
+ 106 003d 10 .byte 16
+ 107 003e 10 .byte 16
+ 108 003f 10 .byte 16
+ 109 .align 32
+ 110 .type KAESBlockCipherVecRijndaelSBox, @object
+ 111 .size KAESBlockCipherVecRijndaelSBox, 256
+ 112 KAESBlockCipherVecRijndaelSBox:
+ 113 0040 63 .byte 99
+ 114 0041 7C .byte 124
+ 115 0042 77 .byte 119
+ 116 0043 7B .byte 123
+ 117 0044 F2 .byte -14
+ 118 0045 6B .byte 107
+ 119 0046 6F .byte 111
+ 120 0047 C5 .byte -59
+ 121 0048 30 .byte 48
+ 122 0049 01 .byte 1
+ 123 004a 67 .byte 103
+ 124 004b 2B .byte 43
+ 125 004c FE .byte -2
+ 126 004d D7 .byte -41
+ 127 004e AB .byte -85
+ 128 004f 76 .byte 118
+ 129 0050 CA .byte -54
+ 130 0051 82 .byte -126
+ 131 0052 C9 .byte -55
+ 132 0053 7D .byte 125
+ 133 0054 FA .byte -6
+ 134 0055 59 .byte 89
+ 135 0056 47 .byte 71
+ 136 0057 F0 .byte -16
+ 137 0058 AD .byte -83
+ 138 0059 D4 .byte -44
+ 139 005a A2 .byte -94
+ 140 005b AF .byte -81
+ 141 005c 9C .byte -100
+ 142 005d A4 .byte -92
+ 143 005e 72 .byte 114
+ 144 005f C0 .byte -64
+ 145 0060 B7 .byte -73
+ 146 0061 FD .byte -3
+ 147 0062 93 .byte -109
+ 148 0063 26 .byte 38
+ 149 0064 36 .byte 54
+ 150 0065 3F .byte 63
+ 151 0066 F7 .byte -9
+ 152 0067 CC .byte -52
+ 153 0068 34 .byte 52
+ 154 0069 A5 .byte -91
+
GAS LISTING /tmp/ccMa7HLZ.s page 5
+
+
+ 155 006a E5 .byte -27
+ 156 006b F1 .byte -15
+ 157 006c 71 .byte 113
+ 158 006d D8 .byte -40
+ 159 006e 31 .byte 49
+ 160 006f 15 .byte 21
+ 161 0070 04 .byte 4
+ 162 0071 C7 .byte -57
+ 163 0072 23 .byte 35
+ 164 0073 C3 .byte -61
+ 165 0074 18 .byte 24
+ 166 0075 96 .byte -106
+ 167 0076 05 .byte 5
+ 168 0077 9A .byte -102
+ 169 0078 07 .byte 7
+ 170 0079 12 .byte 18
+ 171 007a 80 .byte -128
+ 172 007b E2 .byte -30
+ 173 007c EB .byte -21
+ 174 007d 27 .byte 39
+ 175 007e B2 .byte -78
+ 176 007f 75 .byte 117
+ 177 0080 09 .byte 9
+ 178 0081 83 .byte -125
+ 179 0082 2C .byte 44
+ 180 0083 1A .byte 26
+ 181 0084 1B .byte 27
+ 182 0085 6E .byte 110
+ 183 0086 5A .byte 90
+ 184 0087 A0 .byte -96
+ 185 0088 52 .byte 82
+ 186 0089 3B .byte 59
+ 187 008a D6 .byte -42
+ 188 008b B3 .byte -77
+ 189 008c 29 .byte 41
+ 190 008d E3 .byte -29
+ 191 008e 2F .byte 47
+ 192 008f 84 .byte -124
+ 193 0090 53 .byte 83
+ 194 0091 D1 .byte -47
+ 195 0092 00 .byte 0
+ 196 0093 ED .byte -19
+ 197 0094 20 .byte 32
+ 198 0095 FC .byte -4
+ 199 0096 B1 .byte -79
+ 200 0097 5B .byte 91
+ 201 0098 6A .byte 106
+ 202 0099 CB .byte -53
+ 203 009a BE .byte -66
+ 204 009b 39 .byte 57
+ 205 009c 4A .byte 74
+ 206 009d 4C .byte 76
+ 207 009e 58 .byte 88
+ 208 009f CF .byte -49
+ 209 00a0 D0 .byte -48
+ 210 00a1 EF .byte -17
+ 211 00a2 AA .byte -86
+
GAS LISTING /tmp/ccMa7HLZ.s page 6
+
+
+ 212 00a3 FB .byte -5
+ 213 00a4 43 .byte 67
+ 214 00a5 4D .byte 77
+ 215 00a6 33 .byte 51
+ 216 00a7 85 .byte -123
+ 217 00a8 45 .byte 69
+ 218 00a9 F9 .byte -7
+ 219 00aa 02 .byte 2
+ 220 00ab 7F .byte 127
+ 221 00ac 50 .byte 80
+ 222 00ad 3C .byte 60
+ 223 00ae 9F .byte -97
+ 224 00af A8 .byte -88
+ 225 00b0 51 .byte 81
+ 226 00b1 A3 .byte -93
+ 227 00b2 40 .byte 64
+ 228 00b3 8F .byte -113
+ 229 00b4 92 .byte -110
+ 230 00b5 9D .byte -99
+ 231 00b6 38 .byte 56
+ 232 00b7 F5 .byte -11
+ 233 00b8 BC .byte -68
+ 234 00b9 B6 .byte -74
+ 235 00ba DA .byte -38
+ 236 00bb 21 .byte 33
+ 237 00bc 10 .byte 16
+ 238 00bd FF .byte -1
+ 239 00be F3 .byte -13
+ 240 00bf D2 .byte -46
+ 241 00c0 CD .byte -51
+ 242 00c1 0C .byte 12
+ 243 00c2 13 .byte 19
+ 244 00c3 EC .byte -20
+ 245 00c4 5F .byte 95
+ 246 00c5 97 .byte -105
+ 247 00c6 44 .byte 68
+ 248 00c7 17 .byte 23
+ 249 00c8 C4 .byte -60
+ 250 00c9 A7 .byte -89
+ 251 00ca 7E .byte 126
+ 252 00cb 3D .byte 61
+ 253 00cc 64 .byte 100
+ 254 00cd 5D .byte 93
+ 255 00ce 19 .byte 25
+ 256 00cf 73 .byte 115
+ 257 00d0 60 .byte 96
+ 258 00d1 81 .byte -127
+ 259 00d2 4F .byte 79
+ 260 00d3 DC .byte -36
+ 261 00d4 22 .byte 34
+ 262 00d5 2A .byte 42
+ 263 00d6 90 .byte -112
+ 264 00d7 88 .byte -120
+ 265 00d8 46 .byte 70
+ 266 00d9 EE .byte -18
+ 267 00da B8 .byte -72
+ 268 00db 14 .byte 20
+
GAS LISTING /tmp/ccMa7HLZ.s page 7
+
+
+ 269 00dc DE .byte -34
+ 270 00dd 5E .byte 94
+ 271 00de 0B .byte 11
+ 272 00df DB .byte -37
+ 273 00e0 E0 .byte -32
+ 274 00e1 32 .byte 50
+ 275 00e2 3A .byte 58
+ 276 00e3 0A .byte 10
+ 277 00e4 49 .byte 73
+ 278 00e5 06 .byte 6
+ 279 00e6 24 .byte 36
+ 280 00e7 5C .byte 92
+ 281 00e8 C2 .byte -62
+ 282 00e9 D3 .byte -45
+ 283 00ea AC .byte -84
+ 284 00eb 62 .byte 98
+ 285 00ec 91 .byte -111
+ 286 00ed 95 .byte -107
+ 287 00ee E4 .byte -28
+ 288 00ef 79 .byte 121
+ 289 00f0 E7 .byte -25
+ 290 00f1 C8 .byte -56
+ 291 00f2 37 .byte 55
+ 292 00f3 6D .byte 109
+ 293 00f4 8D .byte -115
+ 294 00f5 D5 .byte -43
+ 295 00f6 4E .byte 78
+ 296 00f7 A9 .byte -87
+ 297 00f8 6C .byte 108
+ 298 00f9 56 .byte 86
+ 299 00fa F4 .byte -12
+ 300 00fb EA .byte -22
+ 301 00fc 65 .byte 101
+ 302 00fd 7A .byte 122
+ 303 00fe AE .byte -82
+ 304 00ff 08 .byte 8
+ 305 0100 BA .byte -70
+ 306 0101 78 .byte 120
+ 307 0102 25 .byte 37
+ 308 0103 2E .byte 46
+ 309 0104 1C .byte 28
+ 310 0105 A6 .byte -90
+ 311 0106 B4 .byte -76
+ 312 0107 C6 .byte -58
+ 313 0108 E8 .byte -24
+ 314 0109 DD .byte -35
+ 315 010a 74 .byte 116
+ 316 010b 1F .byte 31
+ 317 010c 4B .byte 75
+ 318 010d BD .byte -67
+ 319 010e 8B .byte -117
+ 320 010f 8A .byte -118
+ 321 0110 70 .byte 112
+ 322 0111 3E .byte 62
+ 323 0112 B5 .byte -75
+ 324 0113 66 .byte 102
+ 325 0114 48 .byte 72
+
GAS LISTING /tmp/ccMa7HLZ.s page 8
+
+
+ 326 0115 03 .byte 3
+ 327 0116 F6 .byte -10
+ 328 0117 0E .byte 14
+ 329 0118 61 .byte 97
+ 330 0119 35 .byte 53
+ 331 011a 57 .byte 87
+ 332 011b B9 .byte -71
+ 333 011c 86 .byte -122
+ 334 011d C1 .byte -63
+ 335 011e 1D .byte 29
+ 336 011f 9E .byte -98
+ 337 0120 E1 .byte -31
+ 338 0121 F8 .byte -8
+ 339 0122 98 .byte -104
+ 340 0123 11 .byte 17
+ 341 0124 69 .byte 105
+ 342 0125 D9 .byte -39
+ 343 0126 8E .byte -114
+ 344 0127 94 .byte -108
+ 345 0128 9B .byte -101
+ 346 0129 1E .byte 30
+ 347 012a 87 .byte -121
+ 348 012b E9 .byte -23
+ 349 012c CE .byte -50
+ 350 012d 55 .byte 85
+ 351 012e 28 .byte 40
+ 352 012f DF .byte -33
+ 353 0130 8C .byte -116
+ 354 0131 A1 .byte -95
+ 355 0132 89 .byte -119
+ 356 0133 0D .byte 13
+ 357 0134 BF .byte -65
+ 358 0135 E6 .byte -26
+ 359 0136 42 .byte 66
+ 360 0137 68 .byte 104
+ 361 0138 41 .byte 65
+ 362 0139 99 .byte -103
+ 363 013a 2D .byte 45
+ 364 013b 0F .byte 15
+ 365 013c B0 .byte -80
+ 366 013d 54 .byte 84
+ 367 013e BB .byte -69
+ 368 013f 16 .byte 22
+ 369 .align 32
+ 370 .type KAESBlockCipherVecRijndaelSBoxV, @object
+ 371 .size KAESBlockCipherVecRijndaelSBoxV, 256
+ 372 KAESBlockCipherVecRijndaelSBoxV:
+ 373 0140 63 .byte 99
+ 374 0141 7C .byte 124
+ 375 0142 77 .byte 119
+ 376 0143 7B .byte 123
+ 377 0144 F2 .byte -14
+ 378 0145 6B .byte 107
+ 379 0146 6F .byte 111
+ 380 0147 C5 .byte -59
+ 381 0148 30 .byte 48
+ 382 0149 01 .byte 1
+
GAS LISTING /tmp/ccMa7HLZ.s page 9
+
+
+ 383 014a 67 .byte 103
+ 384 014b 2B .byte 43
+ 385 014c FE .byte -2
+ 386 014d D7 .byte -41
+ 387 014e AB .byte -85
+ 388 014f 76 .byte 118
+ 389 0150 CA .byte -54
+ 390 0151 82 .byte -126
+ 391 0152 C9 .byte -55
+ 392 0153 7D .byte 125
+ 393 0154 FA .byte -6
+ 394 0155 59 .byte 89
+ 395 0156 47 .byte 71
+ 396 0157 F0 .byte -16
+ 397 0158 AD .byte -83
+ 398 0159 D4 .byte -44
+ 399 015a A2 .byte -94
+ 400 015b AF .byte -81
+ 401 015c 9C .byte -100
+ 402 015d A4 .byte -92
+ 403 015e 72 .byte 114
+ 404 015f C0 .byte -64
+ 405 0160 B7 .byte -73
+ 406 0161 FD .byte -3
+ 407 0162 93 .byte -109
+ 408 0163 26 .byte 38
+ 409 0164 36 .byte 54
+ 410 0165 3F .byte 63
+ 411 0166 F7 .byte -9
+ 412 0167 CC .byte -52
+ 413 0168 34 .byte 52
+ 414 0169 A5 .byte -91
+ 415 016a E5 .byte -27
+ 416 016b F1 .byte -15
+ 417 016c 71 .byte 113
+ 418 016d D8 .byte -40
+ 419 016e 31 .byte 49
+ 420 016f 15 .byte 21
+ 421 0170 04 .byte 4
+ 422 0171 C7 .byte -57
+ 423 0172 23 .byte 35
+ 424 0173 C3 .byte -61
+ 425 0174 18 .byte 24
+ 426 0175 96 .byte -106
+ 427 0176 05 .byte 5
+ 428 0177 9A .byte -102
+ 429 0178 07 .byte 7
+ 430 0179 12 .byte 18
+ 431 017a 80 .byte -128
+ 432 017b E2 .byte -30
+ 433 017c EB .byte -21
+ 434 017d 27 .byte 39
+ 435 017e B2 .byte -78
+ 436 017f 75 .byte 117
+ 437 0180 09 .byte 9
+ 438 0181 83 .byte -125
+ 439 0182 2C .byte 44
+
GAS LISTING /tmp/ccMa7HLZ.s page 10
+
+
+ 440 0183 1A .byte 26
+ 441 0184 1B .byte 27
+ 442 0185 6E .byte 110
+ 443 0186 5A .byte 90
+ 444 0187 A0 .byte -96
+ 445 0188 52 .byte 82
+ 446 0189 3B .byte 59
+ 447 018a D6 .byte -42
+ 448 018b B3 .byte -77
+ 449 018c 29 .byte 41
+ 450 018d E3 .byte -29
+ 451 018e 2F .byte 47
+ 452 018f 84 .byte -124
+ 453 0190 53 .byte 83
+ 454 0191 D1 .byte -47
+ 455 0192 00 .byte 0
+ 456 0193 ED .byte -19
+ 457 0194 20 .byte 32
+ 458 0195 FC .byte -4
+ 459 0196 B1 .byte -79
+ 460 0197 5B .byte 91
+ 461 0198 6A .byte 106
+ 462 0199 CB .byte -53
+ 463 019a BE .byte -66
+ 464 019b 39 .byte 57
+ 465 019c 4A .byte 74
+ 466 019d 4C .byte 76
+ 467 019e 58 .byte 88
+ 468 019f CF .byte -49
+ 469 01a0 D0 .byte -48
+ 470 01a1 EF .byte -17
+ 471 01a2 AA .byte -86
+ 472 01a3 FB .byte -5
+ 473 01a4 43 .byte 67
+ 474 01a5 4D .byte 77
+ 475 01a6 33 .byte 51
+ 476 01a7 85 .byte -123
+ 477 01a8 45 .byte 69
+ 478 01a9 F9 .byte -7
+ 479 01aa 02 .byte 2
+ 480 01ab 7F .byte 127
+ 481 01ac 50 .byte 80
+ 482 01ad 3C .byte 60
+ 483 01ae 9F .byte -97
+ 484 01af A8 .byte -88
+ 485 01b0 51 .byte 81
+ 486 01b1 A3 .byte -93
+ 487 01b2 40 .byte 64
+ 488 01b3 8F .byte -113
+ 489 01b4 92 .byte -110
+ 490 01b5 9D .byte -99
+ 491 01b6 38 .byte 56
+ 492 01b7 F5 .byte -11
+ 493 01b8 BC .byte -68
+ 494 01b9 B6 .byte -74
+ 495 01ba DA .byte -38
+ 496 01bb 21 .byte 33
+
GAS LISTING /tmp/ccMa7HLZ.s page 11
+
+
+ 497 01bc 10 .byte 16
+ 498 01bd FF .byte -1
+ 499 01be F3 .byte -13
+ 500 01bf D2 .byte -46
+ 501 01c0 CD .byte -51
+ 502 01c1 0C .byte 12
+ 503 01c2 13 .byte 19
+ 504 01c3 EC .byte -20
+ 505 01c4 5F .byte 95
+ 506 01c5 97 .byte -105
+ 507 01c6 44 .byte 68
+ 508 01c7 17 .byte 23
+ 509 01c8 C4 .byte -60
+ 510 01c9 A7 .byte -89
+ 511 01ca 7E .byte 126
+ 512 01cb 3D .byte 61
+ 513 01cc 64 .byte 100
+ 514 01cd 5D .byte 93
+ 515 01ce 19 .byte 25
+ 516 01cf 73 .byte 115
+ 517 01d0 60 .byte 96
+ 518 01d1 81 .byte -127
+ 519 01d2 4F .byte 79
+ 520 01d3 DC .byte -36
+ 521 01d4 22 .byte 34
+ 522 01d5 2A .byte 42
+ 523 01d6 90 .byte -112
+ 524 01d7 88 .byte -120
+ 525 01d8 46 .byte 70
+ 526 01d9 EE .byte -18
+ 527 01da B8 .byte -72
+ 528 01db 14 .byte 20
+ 529 01dc DE .byte -34
+ 530 01dd 5E .byte 94
+ 531 01de 0B .byte 11
+ 532 01df DB .byte -37
+ 533 01e0 E0 .byte -32
+ 534 01e1 32 .byte 50
+ 535 01e2 3A .byte 58
+ 536 01e3 0A .byte 10
+ 537 01e4 49 .byte 73
+ 538 01e5 06 .byte 6
+ 539 01e6 24 .byte 36
+ 540 01e7 5C .byte 92
+ 541 01e8 C2 .byte -62
+ 542 01e9 D3 .byte -45
+ 543 01ea AC .byte -84
+ 544 01eb 62 .byte 98
+ 545 01ec 91 .byte -111
+ 546 01ed 95 .byte -107
+ 547 01ee E4 .byte -28
+ 548 01ef 79 .byte 121
+ 549 01f0 E7 .byte -25
+ 550 01f1 C8 .byte -56
+ 551 01f2 37 .byte 55
+ 552 01f3 6D .byte 109
+ 553 01f4 8D .byte -115
+
GAS LISTING /tmp/ccMa7HLZ.s page 12
+
+
+ 554 01f5 D5 .byte -43
+ 555 01f6 4E .byte 78
+ 556 01f7 A9 .byte -87
+ 557 01f8 6C .byte 108
+ 558 01f9 56 .byte 86
+ 559 01fa F4 .byte -12
+ 560 01fb EA .byte -22
+ 561 01fc 65 .byte 101
+ 562 01fd 7A .byte 122
+ 563 01fe AE .byte -82
+ 564 01ff 08 .byte 8
+ 565 0200 BA .byte -70
+ 566 0201 78 .byte 120
+ 567 0202 25 .byte 37
+ 568 0203 2E .byte 46
+ 569 0204 1C .byte 28
+ 570 0205 A6 .byte -90
+ 571 0206 B4 .byte -76
+ 572 0207 C6 .byte -58
+ 573 0208 E8 .byte -24
+ 574 0209 DD .byte -35
+ 575 020a 74 .byte 116
+ 576 020b 1F .byte 31
+ 577 020c 4B .byte 75
+ 578 020d BD .byte -67
+ 579 020e 8B .byte -117
+ 580 020f 8A .byte -118
+ 581 0210 70 .byte 112
+ 582 0211 3E .byte 62
+ 583 0212 B5 .byte -75
+ 584 0213 66 .byte 102
+ 585 0214 48 .byte 72
+ 586 0215 03 .byte 3
+ 587 0216 F6 .byte -10
+ 588 0217 0E .byte 14
+ 589 0218 61 .byte 97
+ 590 0219 35 .byte 53
+ 591 021a 57 .byte 87
+ 592 021b B9 .byte -71
+ 593 021c 86 .byte -122
+ 594 021d C1 .byte -63
+ 595 021e 1D .byte 29
+ 596 021f 9E .byte -98
+ 597 0220 E1 .byte -31
+ 598 0221 F8 .byte -8
+ 599 0222 98 .byte -104
+ 600 0223 11 .byte 17
+ 601 0224 69 .byte 105
+ 602 0225 D9 .byte -39
+ 603 0226 8E .byte -114
+ 604 0227 94 .byte -108
+ 605 0228 9B .byte -101
+ 606 0229 1E .byte 30
+ 607 022a 87 .byte -121
+ 608 022b E9 .byte -23
+ 609 022c CE .byte -50
+ 610 022d 55 .byte 85
+
GAS LISTING /tmp/ccMa7HLZ.s page 13
+
+
+ 611 022e 28 .byte 40
+ 612 022f DF .byte -33
+ 613 0230 8C .byte -116
+ 614 0231 A1 .byte -95
+ 615 0232 89 .byte -119
+ 616 0233 0D .byte 13
+ 617 0234 BF .byte -65
+ 618 0235 E6 .byte -26
+ 619 0236 42 .byte 66
+ 620 0237 68 .byte 104
+ 621 0238 41 .byte 65
+ 622 0239 99 .byte -103
+ 623 023a 2D .byte 45
+ 624 023b 0F .byte 15
+ 625 023c B0 .byte -80
+ 626 023d 54 .byte 84
+ 627 023e BB .byte -69
+ 628 023f 16 .byte 22
+ 629 .align 32
+ 630 .type KAESBlockCipherVecRijndaelInvSBoxV, @object
+ 631 .size KAESBlockCipherVecRijndaelInvSBoxV, 256
+ 632 KAESBlockCipherVecRijndaelInvSBoxV:
+ 633 0240 52 .byte 82
+ 634 0241 09 .byte 9
+ 635 0242 6A .byte 106
+ 636 0243 D5 .byte -43
+ 637 0244 30 .byte 48
+ 638 0245 36 .byte 54
+ 639 0246 A5 .byte -91
+ 640 0247 38 .byte 56
+ 641 0248 BF .byte -65
+ 642 0249 40 .byte 64
+ 643 024a A3 .byte -93
+ 644 024b 9E .byte -98
+ 645 024c 81 .byte -127
+ 646 024d F3 .byte -13
+ 647 024e D7 .byte -41
+ 648 024f FB .byte -5
+ 649 0250 7C .byte 124
+ 650 0251 E3 .byte -29
+ 651 0252 39 .byte 57
+ 652 0253 82 .byte -126
+ 653 0254 9B .byte -101
+ 654 0255 2F .byte 47
+ 655 0256 FF .byte -1
+ 656 0257 87 .byte -121
+ 657 0258 34 .byte 52
+ 658 0259 8E .byte -114
+ 659 025a 43 .byte 67
+ 660 025b 44 .byte 68
+ 661 025c C4 .byte -60
+ 662 025d DE .byte -34
+ 663 025e E9 .byte -23
+ 664 025f CB .byte -53
+ 665 0260 54 .byte 84
+ 666 0261 7B .byte 123
+ 667 0262 94 .byte -108
+
GAS LISTING /tmp/ccMa7HLZ.s page 14
+
+
+ 668 0263 32 .byte 50
+ 669 0264 A6 .byte -90
+ 670 0265 C2 .byte -62
+ 671 0266 23 .byte 35
+ 672 0267 3D .byte 61
+ 673 0268 EE .byte -18
+ 674 0269 4C .byte 76
+ 675 026a 95 .byte -107
+ 676 026b 0B .byte 11
+ 677 026c 42 .byte 66
+ 678 026d FA .byte -6
+ 679 026e C3 .byte -61
+ 680 026f 4E .byte 78
+ 681 0270 08 .byte 8
+ 682 0271 2E .byte 46
+ 683 0272 A1 .byte -95
+ 684 0273 66 .byte 102
+ 685 0274 28 .byte 40
+ 686 0275 D9 .byte -39
+ 687 0276 24 .byte 36
+ 688 0277 B2 .byte -78
+ 689 0278 76 .byte 118
+ 690 0279 5B .byte 91
+ 691 027a A2 .byte -94
+ 692 027b 49 .byte 73
+ 693 027c 6D .byte 109
+ 694 027d 8B .byte -117
+ 695 027e D1 .byte -47
+ 696 027f 25 .byte 37
+ 697 0280 72 .byte 114
+ 698 0281 F8 .byte -8
+ 699 0282 F6 .byte -10
+ 700 0283 64 .byte 100
+ 701 0284 86 .byte -122
+ 702 0285 68 .byte 104
+ 703 0286 98 .byte -104
+ 704 0287 16 .byte 22
+ 705 0288 D4 .byte -44
+ 706 0289 A4 .byte -92
+ 707 028a 5C .byte 92
+ 708 028b CC .byte -52
+ 709 028c 5D .byte 93
+ 710 028d 65 .byte 101
+ 711 028e B6 .byte -74
+ 712 028f 92 .byte -110
+ 713 0290 6C .byte 108
+ 714 0291 70 .byte 112
+ 715 0292 48 .byte 72
+ 716 0293 50 .byte 80
+ 717 0294 FD .byte -3
+ 718 0295 ED .byte -19
+ 719 0296 B9 .byte -71
+ 720 0297 DA .byte -38
+ 721 0298 5E .byte 94
+ 722 0299 15 .byte 21
+ 723 029a 46 .byte 70
+ 724 029b 57 .byte 87
+
GAS LISTING /tmp/ccMa7HLZ.s page 15
+
+
+ 725 029c A7 .byte -89
+ 726 029d 8D .byte -115
+ 727 029e 9D .byte -99
+ 728 029f 84 .byte -124
+ 729 02a0 90 .byte -112
+ 730 02a1 D8 .byte -40
+ 731 02a2 AB .byte -85
+ 732 02a3 00 .byte 0
+ 733 02a4 8C .byte -116
+ 734 02a5 BC .byte -68
+ 735 02a6 D3 .byte -45
+ 736 02a7 0A .byte 10
+ 737 02a8 F7 .byte -9
+ 738 02a9 E4 .byte -28
+ 739 02aa 58 .byte 88
+ 740 02ab 05 .byte 5
+ 741 02ac B8 .byte -72
+ 742 02ad B3 .byte -77
+ 743 02ae 45 .byte 69
+ 744 02af 06 .byte 6
+ 745 02b0 D0 .byte -48
+ 746 02b1 2C .byte 44
+ 747 02b2 1E .byte 30
+ 748 02b3 8F .byte -113
+ 749 02b4 CA .byte -54
+ 750 02b5 3F .byte 63
+ 751 02b6 0F .byte 15
+ 752 02b7 02 .byte 2
+ 753 02b8 C1 .byte -63
+ 754 02b9 AF .byte -81
+ 755 02ba BD .byte -67
+ 756 02bb 03 .byte 3
+ 757 02bc 01 .byte 1
+ 758 02bd 13 .byte 19
+ 759 02be 8A .byte -118
+ 760 02bf 6B .byte 107
+ 761 02c0 3A .byte 58
+ 762 02c1 91 .byte -111
+ 763 02c2 11 .byte 17
+ 764 02c3 41 .byte 65
+ 765 02c4 4F .byte 79
+ 766 02c5 67 .byte 103
+ 767 02c6 DC .byte -36
+ 768 02c7 EA .byte -22
+ 769 02c8 97 .byte -105
+ 770 02c9 F2 .byte -14
+ 771 02ca CF .byte -49
+ 772 02cb CE .byte -50
+ 773 02cc F0 .byte -16
+ 774 02cd B4 .byte -76
+ 775 02ce E6 .byte -26
+ 776 02cf 73 .byte 115
+ 777 02d0 96 .byte -106
+ 778 02d1 AC .byte -84
+ 779 02d2 74 .byte 116
+ 780 02d3 22 .byte 34
+ 781 02d4 E7 .byte -25
+
GAS LISTING /tmp/ccMa7HLZ.s page 16
+
+
+ 782 02d5 AD .byte -83
+ 783 02d6 35 .byte 53
+ 784 02d7 85 .byte -123
+ 785 02d8 E2 .byte -30
+ 786 02d9 F9 .byte -7
+ 787 02da 37 .byte 55
+ 788 02db E8 .byte -24
+ 789 02dc 1C .byte 28
+ 790 02dd 75 .byte 117
+ 791 02de DF .byte -33
+ 792 02df 6E .byte 110
+ 793 02e0 47 .byte 71
+ 794 02e1 F1 .byte -15
+ 795 02e2 1A .byte 26
+ 796 02e3 71 .byte 113
+ 797 02e4 1D .byte 29
+ 798 02e5 29 .byte 41
+ 799 02e6 C5 .byte -59
+ 800 02e7 89 .byte -119
+ 801 02e8 6F .byte 111
+ 802 02e9 B7 .byte -73
+ 803 02ea 62 .byte 98
+ 804 02eb 0E .byte 14
+ 805 02ec AA .byte -86
+ 806 02ed 18 .byte 24
+ 807 02ee BE .byte -66
+ 808 02ef 1B .byte 27
+ 809 02f0 FC .byte -4
+ 810 02f1 56 .byte 86
+ 811 02f2 3E .byte 62
+ 812 02f3 4B .byte 75
+ 813 02f4 C6 .byte -58
+ 814 02f5 D2 .byte -46
+ 815 02f6 79 .byte 121
+ 816 02f7 20 .byte 32
+ 817 02f8 9A .byte -102
+ 818 02f9 DB .byte -37
+ 819 02fa C0 .byte -64
+ 820 02fb FE .byte -2
+ 821 02fc 78 .byte 120
+ 822 02fd CD .byte -51
+ 823 02fe 5A .byte 90
+ 824 02ff F4 .byte -12
+ 825 0300 1F .byte 31
+ 826 0301 DD .byte -35
+ 827 0302 A8 .byte -88
+ 828 0303 33 .byte 51
+ 829 0304 88 .byte -120
+ 830 0305 07 .byte 7
+ 831 0306 C7 .byte -57
+ 832 0307 31 .byte 49
+ 833 0308 B1 .byte -79
+ 834 0309 12 .byte 18
+ 835 030a 10 .byte 16
+ 836 030b 59 .byte 89
+ 837 030c 27 .byte 39
+ 838 030d 80 .byte -128
+
GAS LISTING /tmp/ccMa7HLZ.s page 17
+
+
+ 839 030e EC .byte -20
+ 840 030f 5F .byte 95
+ 841 0310 60 .byte 96
+ 842 0311 51 .byte 81
+ 843 0312 7F .byte 127
+ 844 0313 A9 .byte -87
+ 845 0314 19 .byte 25
+ 846 0315 B5 .byte -75
+ 847 0316 4A .byte 74
+ 848 0317 0D .byte 13
+ 849 0318 2D .byte 45
+ 850 0319 E5 .byte -27
+ 851 031a 7A .byte 122
+ 852 031b 9F .byte -97
+ 853 031c 93 .byte -109
+ 854 031d C9 .byte -55
+ 855 031e 9C .byte -100
+ 856 031f EF .byte -17
+ 857 0320 A0 .byte -96
+ 858 0321 E0 .byte -32
+ 859 0322 3B .byte 59
+ 860 0323 4D .byte 77
+ 861 0324 AE .byte -82
+ 862 0325 2A .byte 42
+ 863 0326 F5 .byte -11
+ 864 0327 B0 .byte -80
+ 865 0328 C8 .byte -56
+ 866 0329 EB .byte -21
+ 867 032a BB .byte -69
+ 868 032b 3C .byte 60
+ 869 032c 83 .byte -125
+ 870 032d 53 .byte 83
+ 871 032e 99 .byte -103
+ 872 032f 61 .byte 97
+ 873 0330 17 .byte 23
+ 874 0331 2B .byte 43
+ 875 0332 04 .byte 4
+ 876 0333 7E .byte 126
+ 877 0334 BA .byte -70
+ 878 0335 77 .byte 119
+ 879 0336 D6 .byte -42
+ 880 0337 26 .byte 38
+ 881 0338 E1 .byte -31
+ 882 0339 69 .byte 105
+ 883 033a 14 .byte 20
+ 884 033b 63 .byte 99
+ 885 033c 55 .byte 85
+ 886 033d 21 .byte 33
+ 887 033e 0C .byte 12
+ 888 033f 7D .byte 125
+ 889 .align 16
+ 890 .type lo_filter, @object
+ 891 .size lo_filter, 16
+ 892 lo_filter:
+ 893 0340 00 .byte 0
+ 894 0341 FF .byte -1
+ 895 0342 FF .byte -1
+
GAS LISTING /tmp/ccMa7HLZ.s page 18
+
+
+ 896 0343 FF .byte -1
+ 897 0344 FF .byte -1
+ 898 0345 FF .byte -1
+ 899 0346 FF .byte -1
+ 900 0347 FF .byte -1
+ 901 0348 FF .byte -1
+ 902 0349 FF .byte -1
+ 903 034a FF .byte -1
+ 904 034b FF .byte -1
+ 905 034c FF .byte -1
+ 906 034d FF .byte -1
+ 907 034e FF .byte -1
+ 908 034f FF .byte -1
+ 909 .align 16
+ 910 .type FF_tab, @object
+ 911 .size FF_tab, 16
+ 912 FF_tab:
+ 913 0350 00 .byte 0
+ 914 0351 1B .byte 27
+ 915 0352 36 .byte 54
+ 916 0353 2D .byte 45
+ 917 0354 6C .byte 108
+ 918 0355 77 .byte 119
+ 919 0356 5A .byte 90
+ 920 0357 41 .byte 65
+ 921 0358 00 .byte 0
+ 922 0359 00 .byte 0
+ 923 035a 00 .byte 0
+ 924 035b 00 .byte 0
+ 925 035c 00 .byte 0
+ 926 035d 00 .byte 0
+ 927 035e 00 .byte 0
+ 928 035f 00 .byte 0
+ 929 .data
+ 930 .type KAESBlockCipherVecFFtable, @object
+ 931 .size KAESBlockCipherVecFFtable, 8
+ 932 KAESBlockCipherVecFFtable:
+ 933 0000 00 .byte 0
+ 934 0001 1B .byte 27
+ 935 0002 36 .byte 54
+ 936 0003 2D .byte 45
+ 937 0004 6C .byte 108
+ 938 0005 77 .byte 119
+ 939 0006 5A .byte 90
+ 940 0007 41 .byte 65
+ 941 .section .rodata
+ 942 .align 32
+ 943 .type KAESBlockCipherVecRcon, @object
+ 944 .size KAESBlockCipherVecRcon, 40
+ 945 KAESBlockCipherVecRcon:
+ 946 0360 01000000 .long 1
+ 947 0364 02000000 .long 2
+ 948 0368 04000000 .long 4
+ 949 036c 08000000 .long 8
+ 950 0370 10000000 .long 16
+ 951 0374 20000000 .long 32
+ 952 0378 40000000 .long 64
+
GAS LISTING /tmp/ccMa7HLZ.s page 19
+
+
+ 953 037c 80000000 .long 128
+ 954 0380 1B000000 .long 27
+ 955 0384 36000000 .long 54
+ 956 .LC0:
+ 957 0388 53756242 .string "SubBytes"
+ 957 79746573
+ 957 00
+ 958 .LC1:
+ 959 0391 25733A09 .string "%s:\t%0.8x %0.8x %0.8x %0.8x\n"
+ 959 25302E38
+ 959 78202530
+ 959 2E387820
+ 959 25302E38
+ 960 .LC2:
+ 961 03ae 526F7442 .string "RotBytesLeft"
+ 961 79746573
+ 961 4C656674
+ 961 00
+ 962 .LC3:
+ 963 03bb 56656358 .string "VecXor"
+ 963 6F7200
+ 964 .LC4:
+ 965 03c2 53746174 .string "StateDupColumn3"
+ 965 65447570
+ 965 436F6C75
+ 965 6D6E3300
+ 966 .text
+ 967 .type KAESBlockCipherVecKeyExpansion128, @function
+ 968 KAESBlockCipherVecKeyExpansion128:
+ 969 .LFB563:
+ 970 .file 2 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 20
+
+
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <krypto/extern.h>
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "ncbi-priv.h"
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "aes-ncbi-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "cipher-priv.h"
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-priv.h"
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/debug.h>
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/out.h>
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/rc.h>
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <byteswap.h>
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <string.h>
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdint.h>
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdlib.h>
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <assert.h>
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <sysalloc.h>
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <cpuid.h>
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VECREG
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <v128.h>
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This implements the AES cipher as defined by FIPS-197 from NIST
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Notes on implmentation:
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Byte ordering in AES is not critical but unllike the original implmentation
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * bytes are not re-ordered to a big endian order upon reading them in and this
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * code will expect to run on an Intel/AMD type processor and might have issues
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * on some big endian processors.
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Many functions are written as static inline functions to
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * facilitate GCC type assembly language optimization on various processors
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This implements the Equivalent Inverse Cipher not the Inverse Cipher. In
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * general functions will match those defined in the FIPS-197 document where they
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * do not get optimized away for Intel/AMD XMM registers and AES-NI instructions.
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * C-99 types are used for specific sized types. An unaddornded unsigned type
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * is used for many index type variables to allow the compiler choice in
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * size where size does not matter very much. As these index variables do
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * not go above 16 any size would do but the compiler can choose the size most
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * suited for array subscripting.
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_00 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
GAS LISTING /tmp/ccMa7HLZ.s page 21
+
+
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_01 = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_0F = { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_10 = { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * These functions implment the Advanced Encryption Standard AES as defined
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * in the FIPS (Federal Information Processing Standars Publication 197
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Of Nevember 26, 2001.
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Read a blocks worth of bytes into an CipherVec
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * With vector registers it is a single instruction, without them it
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * is a memmove call
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec vec;
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** "movdqu (%[a]),%[s]" : [s] "=x" (vec) : [a] "D" (ain)
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** );
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (&u.bytes, ain, sizeof (u));
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 22
+
+
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Write a block's worth of bytes out from an CipherVec
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * With vector registers it is a single instruction, without them it
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * is a memmove call
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec rvec = vec;
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** "movdqu %[s],(%[a])" : : [s] "x" (rvec), [a] "D" (rout)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** );
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (rout, &vec, sizeof (vec));
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] ^= u2.columns[ix];
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+
GAS LISTING /tmp/ccMa7HLZ.s page 23
+
+
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] &= u2.columns[ix];
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] |= u2.columns[ix];
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+
GAS LISTING /tmp/ccMa7HLZ.s page 24
+
+
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 + v2;
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] += u2.columns[ix];
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] -= u2.columns[ix];
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+
GAS LISTING /tmp/ccMa7HLZ.s page 25
+
+
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 * v2;
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] *= u2.columns[ix];
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] /= u2.columns[ix];
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+
GAS LISTING /tmp/ccMa7HLZ.s page 26
+
+
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFB128 (dest, mask);
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u out, in, gate;
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec sl_mask [9] =
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC },
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8 },
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 },
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0 },
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0 },
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+
GAS LISTING /tmp/ccMa7HLZ.s page 27
+
+
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (k <= 8);
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("mask", sl_mask[k]); */
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("v 1", vv); */
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("v 2", vv); */
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("v 3", vv); */
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u vv; /* state and key not countries :) */
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.state = v;
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (v); ++ix)
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("SLLBI %d %x ", k, vv.bytes[ix]);
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.bytes[ix] <<= k;
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("%x\n", vv.bytes[ix]);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv.state;
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec sr_mask [9] =
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F },
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F },
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F },
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F },
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 },
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+
GAS LISTING /tmp/ccMa7HLZ.s page 28
+
+
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u vv; /* state and key not countries :) */
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.state = v;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (v); ++ix)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("SRLBI %d %x ", k, vv.bytes[ix]);
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.bytes[ix] >>= k;
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("%x\n", vv.bytes[ix]);
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv.state;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.4
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The AddRoundKey transformation is a sinple exclusive or of all 128 bits
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * in the current block against a round key. This operation is used in all
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Cipher and EqInvCipher rounds
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * With vector types it is a single operation that with vector registers is
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * a single op-code.
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+
GAS LISTING /tmp/ccMa7HLZ.s page 29
+
+
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(VecXor) (state, round_key);
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.2
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS 197 describes the state in column major format
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * while C and assembly programmers tend to think in row major
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The byte order is 0,1,2,3,,...F as shown in the first diagram.
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * ShiftRows() is defined as leaving this state
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 0 | 4 | 8 | C |
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | 5 | 9 | D | 1 |
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | A | E | 2 | 6 |
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | F | 3 | 7 | B |
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec ShiftRowTable
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11 };
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.3.1
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvShiftRows() is defined as leaving this state
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 0 | 4 | 8 | C |
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | D | 1 | 5 | 9 |
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | A | E | 2 | 6 |
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+
GAS LISTING /tmp/ccMa7HLZ.s page 30
+
+
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | 7 | B | F | 3 |
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVecByte InvShiftRowTable
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3 };
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 3 | 7 | B | F |
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | 0 | 4 | 8 | C |
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | 1 | 5 | 9 | D |
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | 2 | 6 | A | E |
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec ShiftRowTable
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 3, 0, 1, 2, 7, 4, 5, 6, 11, 8, 9, 10, 15, 12, 13, 14 };
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 1 | 5 | B | D |
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | 2 | 6 | 8 | E |
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | 3 | 7 | 9 | F |
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | 0 | 4 | 8 | C |
+
GAS LISTING /tmp/ccMa7HLZ.s page 31
+
+
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec ShiftRowTable
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12 };
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.1
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SubBytes replaces each byte in a state with a specific byte value from
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * A Rijndael Substitution box
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(RijndaelSBox)[256] =
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB,
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72,
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31,
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2,
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F,
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58,
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F,
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3,
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19,
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B,
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4,
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE,
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B,
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D,
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28,
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB,
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+
GAS LISTING /tmp/ccMa7HLZ.s page 32
+
+
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.bytes[ix] = AESBCMEMBER(RijndaelSBox)[u.bytes[ix]];
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SubWord performs the same operation as SubBytes but on
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the four bytes of a column and not a whole state
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESColumn col;
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvSubBytes replaces each byte in a state with a specific byte value from
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * an Inversze Rijndael Substitution box. That is InvSubBytes undoes SubBytes
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint8_t AESBCMEMBER(RijndaelInvSBox)[256] =
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7,
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9,
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3,
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1,
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6,
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D,
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45,
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A,
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6,
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF,
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE,
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A,
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC,
+
GAS LISTING /tmp/ccMa7HLZ.s page 33
+
+
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C,
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99,
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C,
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.bytes[ix] = AESBCMEMBER(RijndaelInvSBox)[u.bytes[ix]];
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelSBoxV)[16] =
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x7
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x1
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x7
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x8
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xC
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x7
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xD
+ 806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x7
+ 807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x0
+ 808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8
+ 809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9
+ 810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xD
+ 811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x1
+ 812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelInvSBoxV)[16] =
+ 816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
+ 818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xF
+ 819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xC
+ 820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4
+ 821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x2
+ 822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x9
+ 823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x8
+ 824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 34
+
+
+ 825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6
+ 826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x7
+ 827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6
+ 828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1
+ 829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF
+ 830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5
+ 831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xE
+ 832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x6
+ 833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7
+ 834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec lo_filter = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ 840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec lo, hi, tmp, out;
+ 849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("state", state); */
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("lo", lo); */
+ 856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("out", out); */
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("out", out); */
+
GAS LISTING /tmp/ccMa7HLZ.s page 35
+
+
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelSBoxV));
+ 894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelInvSBoxV));
+ 905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.3
+ 910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * there are no psllb or psrlb instructions so shift words not bytes
+ 914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * and then cut off bits that would have been zeroed if there were
+ 915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * such instructions
+ 916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec FF_tab =
+ 920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x1B, 0x36, 0x2D, 0x6C, 0x77, 0x5A, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec sl, sr;
+ 930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (bits <= 8);
+ 932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+
GAS LISTING /tmp/ccMa7HLZ.s page 36
+
+
+ 939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(VecXor)(sl, sr);
+ 940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (CipherVec state)
+ 945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (register CipherVec state)
+ 949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 1);
+ 953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 2);
+ 969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 3);
+ 985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static AESByte AESBCMEMBER(FFtable)[] = { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41 };
+ 992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+
GAS LISTING /tmp/ccMa7HLZ.s page 37
+
+
+ 996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+1000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+1002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+1013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+1024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+1035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec c0, c1, c2, c3;
+1046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(RotBytesLeft) (state);
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c2 = AESBCMEMBER(RotBytesLeft) (c1);
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c3 = AESBCMEMBER(RotBytesLeft) (c2);
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = AESBCMEMBER(VecXor) (state, c1);
+1051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 38
+
+
+1053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = AESBCMEMBER(FF_mul_02) (c0);
+1055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u tmp;
+1058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp.state = c0;
+1061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof tmp; ++ix)
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+1064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = tmp.state;
+1065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c2);
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c3);
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c0);
+1070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return c1;
+1072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* obsoleted
+1073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u in, out;
+1074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = state;
+1077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (out.bytes); ix += 4)
+1079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s0 = in.bytes[ix + 0];
+1081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s1 = in.bytes[ix + 1];
+1082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s2 = in.bytes[ix + 2];
+1083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s3 = in.bytes[ix + 3];
+1084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 0] = s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1);
+1086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 1] = s0 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2);
+1087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 2] = s0 ^ s1 ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3);
+1088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 3] = s0 ^ s1 ^ s2 ^ AESBCMEMBER(FFmul02)(s3 ^ s0);
+1089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+1091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+1102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESIMC (state);
+1103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec r1, r2, r3, f2, f4, f8;
+1105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r1 = AESBCMEMBER(RotBytesLeft) (state);
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r2 = AESBCMEMBER(RotBytesLeft) (r1);
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r3 = AESBCMEMBER(RotBytesLeft) (r2);
+1109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 39
+
+
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(VecXor) (state, r2);
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(VecXor) (state, r1);
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (r2, r3);
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (f8, r1);
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (f8, f2);
+1115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(FF_mul) (f2,1);
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(FF_mul) (f4,2);
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(FF_mul) (f8,3);
+1121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u fu2, fu4, fu8;
+1124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.state = f2;
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.state = f4;
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.state = f8;
+1129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof fu2; ++ix)
+1131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+1135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = fu2.state;
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = fu4.state;
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = fu8.state;
+1139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f2);
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f4);
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f8);
+1145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+1149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u in, out;
+1151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = state;
+1154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (out.bytes); ix += AES_Nb)
+1156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s0 = in.bytes[ix + 0];
+1158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s1 = in.bytes[ix + 1];
+1159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s2 = in.bytes[ix + 2];
+1160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s3 = in.bytes[ix + 3];
+1161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord p, q;
+1162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** q = AESBCMEMBER(FFmul08)(s0 ^ s1 ^ s2 ^ s3);
+1164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** p = q ^ AESBCMEMBER(FFmul04)(s0 ^ s2);
+1165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** q = q ^ AESBCMEMBER(FFmul04)(s1 ^ s3);
+1166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 40
+
+
+1167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 0] = s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1) ^ p;
+1168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 1] = s0 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2) ^ q;
+1169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 2] = s0 ^ s1 ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3) ^ p;
+1170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 3] = s0 ^ s1 ^ s2 ^ AESBCMEMBER(FFmul02)(s3 ^ s0) ^ q;
+1171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+1174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+1179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.2
+1180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+1182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(Rcon)[] = {
+1183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00000001, 0x00000002, 0x00000004, 0x00000008,
+1184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00000010, 0x00000020, 0x00000040, 0x00000080,
+1185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x0000001B, 0x00000036
+1186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+1187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+1197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * not portable to architectures which require aligned multibyte reads
+1209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but as this only runs on Intel at this point it is fine for now
+1210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return *(AESWord*)pointer;
+1212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion) (CipherVec * r, const AESByte * key, unsigned Nr, unsigned Nk)
+1218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord * w = (AESWord*)r;
+1220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESWord * pRcon;
+1221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix, limit;
+1222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 41
+
+
+1224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("%s (w (%p), key (%p), Nr (%u) Nk (%u))\n", __func__, w, key, Nr, Nk));
+1226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < Nk; ++ix)
+1228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("i (dec): %u\n", ix));
+1230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(GetWord) (key+(ix*4));
+1231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** w[ix] = temp;
+1232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("kw[%i]: %0.8x\n", ix, temp));
+1233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** limit = AES_Nb * (Nr + 1);
+1236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** pRcon = AESBCMEMBER(Rcon);
+1237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("Nk (%u) Nr (%u) limit (%u)\n", Nk, Nr, limit));
+1238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (; ix < limit; ++ix)
+1240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("i (dec): %u %u\n", ix, limit));
+1243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* temp should already be set */
+1245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("temp: %0.8x\n", temp));
+1246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ((ix % Nk) == 0)
+1247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+1249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after RotWord: %0.8x \n", temp));
+1250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord) (temp);
+1251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("Rcon [i/Nk]: %0.8x\n", *pRcon));
+1253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= *pRcon++;
+1254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after XOR with Rcon: %0.8x \n", temp));
+1255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ((Nk > 6) && ((ix % Nk) == 4))
+1257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord) (temp);
+1259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("w[i-Nk]: %0.8x\n", w[ix-Nk]));
+1262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= w [ix - Nk];
+1263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("kw[ix]: %0.8x\n", temp));
+1264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** w [ix] = temp;
+1265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+
GAS LISTING /tmp/ccMa7HLZ.s page 42
+
+
+1281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec mask = { 8, 9, 10, 11, 12, 13, 14, 15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[2];
+1307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+1308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = 0;
+1309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = 0;
+1310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4,
+1324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+1330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+1331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+1332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+1333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 43
+
+
+1338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W3:W3:W3:W3
+1344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0xFF);
+1354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W2:W2:W2:W2
+1372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0xAA);
+1382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+1387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[2];
+1388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[2];
+1389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+
GAS LISTING /tmp/ccMa7HLZ.s page 44
+
+
+1395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W2:W2:W2:W2
+1400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0x55);
+1410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[1];
+1415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+1416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[1];
+1417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W0:W0:W0
+1428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0x00);
+1438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[0];
+1443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[0];
+1444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+1445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+
GAS LISTING /tmp/ccMa7HLZ.s page 45
+
+
+1452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X0:X1:X2:X3
+1454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:X0:X1
+1457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_SHUFPD (w, x, 0x00);
+1467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u ww;
+1469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u xx;
+1470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+1473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+1476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+1478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X0:X1:X2:X3
+1486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X2:X3:W0:W1
+1489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_SHUFPD (w, x, 0x01);
+1499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u ww;
+1501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u xx;
+1502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+1505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[0] = ww.columns[2];
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[1] = ww.columns[3];
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+
GAS LISTING /tmp/ccMa7HLZ.s page 46
+
+
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+1510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+1512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X0:X1:X2:X3
+1520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X2:X3:W0:W1
+1523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_SHUFPD (v0, v1, 0x02);
+1533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u t0;
+1535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u t1;
+1536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.state = v0;
+1538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t1.state = v1;
+1539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[2] = t0.columns[0];
+1541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[3] = t0.columns[1];
+1542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[0] = t1.columns[2];
+1543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[1] = t1.columns[3];
+1544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return t0.state;
+1546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W0^W1:W0^W1^W2:W0^W1^W2^W3
+1556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 47
+
+
+1566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+1572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] ^= temp.columns[0];
+1578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] ^= temp.columns[1];
+1579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] ^= temp.columns[2];
+1580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_AESKEYGENASSIST (state, rcon);
+1595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u in;
+1597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u out;
+1598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord rconw;
+1599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+1601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = state;
+1602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[0] = AESBCMEMBER(SubWord)(in.columns[1]);
+1604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[1] = AESBCMEMBER(RotWord)(out.columns[0]) ^ rconw;
+1605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[2] = AESBCMEMBER(SubWord)(in.columns[3]);
+1606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[3] = AESBCMEMBER(RotWord)(out.columns[2]) ^ rconw;
+1607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+1609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+
GAS LISTING /tmp/ccMa7HLZ.s page 48
+
+
+1623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(StateDupColumn1) (tmp);
+1624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord rconw;
+1627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+1634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+1637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, 0);
+1651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(StateDupColumn2) (tmp);
+1652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+1658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+1661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+1675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(StateDupColumn3) (tmp);
+1676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec vrcon;
+1679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp;
+
GAS LISTING /tmp/ccMa7HLZ.s page 49
+
+
+1680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+1691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #elif USE_VEC && 1
+1695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp;
+1696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [3] = rcon;
+1699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+1701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, u.state);
+1705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+1709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord rconw;
+1713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+1716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+1717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+1718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+1719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+1720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+1723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * round_keys, const AESByte * key)
+1731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 971 .loc 2 1731 0
+ 972 .cfi_startproc
+ 973 0014 55 pushq %rbp
+ 974 .LCFI2:
+ 975 .cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccMa7HLZ.s page 50
+
+
+ 976 0015 4889E5 movq %rsp, %rbp
+ 977 .cfi_offset 6, -16
+ 978 .LCFI3:
+ 979 .cfi_def_cfa_register 6
+ 980 0018 4157 pushq %r15
+ 981 001a 4156 pushq %r14
+ 982 001c 4155 pushq %r13
+ 983 001e 4154 pushq %r12
+ 984 0020 53 pushq %rbx
+ 985 0021 4881EC58 subq $10328, %rsp
+ 985 280000
+ 986 0028 4889BDB8 movq %rdi, -9544(%rbp)
+ 986 DAFFFF
+ 987 002f 4889B5B0 movq %rsi, -9552(%rbp)
+ 987 DAFFFF
+ 988 .loc 2 1731 0
+ 989 0036 488B85B0 movq -9552(%rbp), %rax
+ 989 DAFFFF
+ 990 003d 48898530 movq %rax, -6608(%rbp)
+ 990 E6FFFF
+ 991 .LBB444:
+ 992 .LBB445:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (&u.bytes, ain, sizeof (u));
+ 993 .loc 2 134 0
+ 994 0044 488B8D30 movq -6608(%rbp), %rcx
+ 994 E6FFFF
+ 995 004b 488D85C0 leaq -9536(%rbp), %rax
+ 995 DAFFFF
+ 996 0052 BA100000 movl $16, %edx
+ 996 00
+ 997 0057 4889CE movq %rcx, %rsi
+ 998 005a 4889C7 movq %rax, %rdi
+ 999 .cfi_offset 3, -56
+ 1000 .cfi_offset 12, -48
+ 1001 .cfi_offset 13, -40
+ 1002 .cfi_offset 14, -32
+ 1003 .cfi_offset 15, -24
+ 1004 005d E8000000 call memmove at PLT
+ 1004 00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 1005 .loc 2 135 0
+ 1006 0062 F30F6F85 movdqu -9536(%rbp), %xmm0
+ 1006 C0DAFFFF
+ 1007 .LBE445:
+ 1008 .LBE444:
+1732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec state;
+1733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec kgastate;
+1734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(StateIn) (key);
+ 1009 .loc 2 1735 0
+ 1010 006a F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 1010 10E6FFFF
+1736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = state;
+ 1011 .loc 2 1736 0
+ 1012 0072 488B85B8 movq -9544(%rbp), %rax
+ 1012 DAFFFF
+ 1013 0079 F30F6F85 movdqu -6640(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 51
+
+
+ 1013 10E6FFFF
+ 1014 0081 F30F7F00 movdqu %xmm0, (%rax)
+ 1015 0085 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 1015 10E6FFFF
+ 1016 008d F30F7F85 movdqu %xmm0, -6592(%rbp)
+ 1016 40E6FFFF
+ 1017 .LBB446:
+ 1018 .LBB447:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1019 .loc 2 1681 0
+ 1020 0095 B8010000 movl $1, %eax
+ 1020 00
+ 1021 009a 660F6F05 movdqa vec_00(%rip), %xmm0
+ 1021 00000000
+ 1022 00a2 F30F7F85 movdqu %xmm0, -6560(%rbp)
+ 1022 60E6FFFF
+ 1023 00aa 89855CE6 movl %eax, -6564(%rbp)
+ 1023 FFFF
+ 1024 .LBB448:
+ 1025 .LBB449:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 1026 .loc 2 522 0
+ 1027 00b0 F30F6F85 movdqu -6560(%rbp), %xmm0
+ 1027 60E6FFFF
+ 1028 00b8 F30F7F85 movdqu %xmm0, -9456(%rbp)
+ 1028 10DBFFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 1029 .loc 2 523 0
+ 1030 00c0 B8030000 movl $3, %eax
+ 1030 00
+ 1031 00c5 4898 cltq
+ 1032 00c7 8B955CE6 movl -6564(%rbp), %edx
+ 1032 FFFF
+ 1033 00cd 89948510 movl %edx, -9456(%rbp,%rax,4)
+ 1033 DBFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 1034 .loc 2 524 0
+ 1035 00d4 F30F6F85 movdqu -9456(%rbp), %xmm0
+ 1035 10DBFFFF
+ 1036 00dc F30F7F85 movdqu %xmm0, -6560(%rbp)
+ 1036 60E6FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1037 .loc 2 526 0
+ 1038 00e4 F30F6F85 movdqu -6560(%rbp), %xmm0
+ 1038 60E6FFFF
+ 1039 .LBE449:
+ 1040 .LBE448:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1041 .loc 2 1681 0
+ 1042 00ec 660F7F85 movdqa %xmm0, -10176(%rbp)
+ 1042 40D8FFFF
+ 1043 00f4 F30F6F85 movdqu -6592(%rbp), %xmm0
+ 1043 40E6FFFF
+ 1044 00fc F30F7F85 movdqu %xmm0, -6544(%rbp)
+ 1044 70E6FFFF
+ 1045 0104 F30F6F85 movdqu -6544(%rbp), %xmm0
+ 1045 70E6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 52
+
+
+ 1046 010c F30F7F85 movdqu %xmm0, -6512(%rbp)
+ 1046 90E6FFFF
+ 1047 0114 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 1047 000000
+ 1048 011b 48898588 movq %rax, -6520(%rbp)
+ 1048 E6FFFF
+ 1049 .LBB450:
+ 1050 .LBB451:
+ 1051 .LBB452:
+ 1052 .LBB453:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 1053 .loc 2 851 0
+ 1054 0122 660F6F05 movdqa vec_00(%rip), %xmm0
+ 1054 00000000
+ 1055 012a F30F7F85 movdqu %xmm0, -6480(%rbp)
+ 1055 B0E6FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1056 .loc 2 854 0
+ 1057 0132 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 1057 00000000
+ 1058 013a F30F6F8D movdqu -6512(%rbp), %xmm1
+ 1058 90E6FFFF
+ 1059 0142 F30F7F8D movdqu %xmm1, -6400(%rbp)
+ 1059 00E7FFFF
+ 1060 014a F30F7F85 movdqu %xmm0, -6416(%rbp)
+ 1060 F0E6FFFF
+ 1061 .LBB454:
+ 1062 .LBB455:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 1063 .loc 2 206 0
+ 1064 0152 F30F6F85 movdqu -6416(%rbp), %xmm0
+ 1064 F0E6FFFF
+ 1065 015a F30F6F8D movdqu -6400(%rbp), %xmm1
+ 1065 00E7FFFF
+ 1066 0162 660FDBC1 pand %xmm1, %xmm0
+ 1067 .LBE455:
+ 1068 .LBE454:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1069 .loc 2 854 0
+ 1070 0166 F30F7F85 movdqu %xmm0, -6432(%rbp)
+ 1070 E0E6FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 1071 .loc 2 862 0
+ 1072 016e 660F6F05 movdqa vec_10(%rip), %xmm0
+ 1072 00000000
+ 1073 0176 F30F6F8D movdqu -6512(%rbp), %xmm1
+ 1073 90E6FFFF
+ 1074 017e F30F7F8D movdqu %xmm1, -6368(%rbp)
+ 1074 20E7FFFF
+ 1075 0186 F30F7F85 movdqu %xmm0, -6384(%rbp)
+ 1075 10E7FFFF
+ 1076 .LBB456:
+1737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE128(rcon,offset) \
+1739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** kgastate = AESBCMEMBER(AesKeyGenAssistColumn3) (state, rcon); \
+1740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftXorColumns) (state); \
+1741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= kgastate; \
+
GAS LISTING /tmp/ccMa7HLZ.s page 53
+
+
+1742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[offset] = state
+1743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x01,1);
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x02,2);
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x04,3);
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x08,4);
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x10,5);
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x20,6);
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x40,7);
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x80,8);
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x1B,9);
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x36,10);
+1754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * w, const AESByte * key)
+1758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** OUTMSG(("\n\n\n%s: Not my code\n\n\n",__func__));
+1760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_128, AES_Nk_128);
+1761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * round_keys, const AESByte * key)
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* work on three blocks at a time which is two Nr worth
+1770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * we'll build it with 6 words in v0:v1 and 6 words in w0:w1
+1771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but move them them into v0:v1:v2 before writing them to
+1772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the key schedule
+1773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec v0, v1, v2, v3, v4;
+1776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec k; /* we'll only need one of the key gen assist blocks at a time */
+1777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 0 */
+1779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(StateIn) (key); /* k0 : k1 : k2 : k3 */
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateIn) (key+8); /* k2 : k3 : k4 : k5 */
+1781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateShiftRight64) (v1); /* k4 : k5 : 0 : 0 */
+1782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = v0; /* K0:K1:K2:K3 */
+1784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+1789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1, 0x01); /* F(k5) : F(k5) : F(k5) : F(k5) */
+1790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k0 : k0^k1 :k0^k1^k2:k0^k1^k2^k3 */
+1791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k6 : k7 : k8 : k9 */
+1792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k4 : k4^k5 : k4^k5 : k4^k5 */
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k9 : k9 : k9 : k9 */
+1794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k10 : k11 : k10 : k11 */
+1795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k4 : k5 : k6 : k7 */
+1796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[1] = v1; /* K4:K5:K6:K7 */
+1797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k8 : k9 : k10 : k11 */
+
GAS LISTING /tmp/ccMa7HLZ.s page 54
+
+
+1799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[2] = v2; /* K8:K9:K10:K11 */
+1800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k6 : k6^k7 :k6^k7^k8:k6^k7^k8^k9 */
+1803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k10 :k10^k11: k10^k11: k10^k11 */
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+1805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v2,0x02); /* F(k11): F(k11): F(k11) : F(k11) */
+1806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k12 : k13 : k14 : k15 */
+1807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[3] = v0; /* K12:K13:K14:K15 */
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k15 : k15 : k15 : k15 */
+1809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k16 : k17 : k16 : k17 */
+1810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+1816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1,0x04); /* F(k17): F(k17): F(k17) : F(k17) */
+1817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k12 :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+1818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k18 : k19 : k20 : k21 */
+1819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k16 :k16^k17: k17 : 0 */
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k21 : k21 : k21 : k21 */
+1821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k22 : k23 : x : x */
+1822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k16 : k17 : k18 : k19 */
+1823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[4] = v1; /* K16:K17:K18:K19 */
+1824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k20 : k21 : k22 : k23 */
+1826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[5] = v2; /* K20:K21:K22:K23 */
+1827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k18 :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+1830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k22 :k22^k23: k23 : 0 */
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+1832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v2,0x08); /* F(k23): F(k23): F(k23) : F(k23) */
+1833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k24 : k25 : k26 : k27 */
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k27 : k27 : k27 : k27 */
+1835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k28 : k29 : x : x */
+1836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[6] = v0; /* K24:K25:K26:K27 */
+1838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 28-39 */
+1840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+1843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1,0x10); /* F(k29): F(k29): F(k29) : F(k29) */
+1844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k24 :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+1845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k30 : k31 : k32 : k33 */
+1846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k26 :k28^k29: k29 : 0 */
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k33 : k33 : k33 : k33 */
+1848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k34 : k35 : x : x */
+1849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k28 : k29 : k30 : k31 */
+1850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[7] = v1; /* K28:K29:K30:K31 */
+1852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k32 : k33 : k34 : k35 */
+1854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[8] = v2; /* K32:K33:K34:K35 */
+1855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+
GAS LISTING /tmp/ccMa7HLZ.s page 55
+
+
+1856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k30 :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+1857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k26 :k26^k27: k27 : 0 */
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+1859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v2,0x20); /* F(k35): F(k35): F(k35) : F(k35) */
+1860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k36 : k37 : k38 : k39 */
+1861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (v0); /* k39 : k39 : k39 : k39 */
+1862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k40 : k41 : x : x */
+1863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[9] = v0; /* K36:K37:K38:K39 */
+1865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 40-55 but we only need through 51 so we change from pattern 2 to pattern 3 */
+1867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+1870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1,0x40); /* F(k41): F(k41): F(k41) : F(k41) */
+1871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k36 :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+1872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k40 :k40^k41: x 5 : x */
+1873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k42 : k43 : k44 : k45 */
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k45 : k45 : k45 : k45 */
+1875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k46 : k47 : x : x */
+1876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k40 : k41 : k42 : k43 */
+1877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[10] = v1; /* K40:K41:K42:K43 */
+1878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k44 : k45 : k46 : k47 */
+1879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[11] = v2; /* K44:K45:K46:K47 */
+1880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 3 */
+1882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k42 :k42^k43:k42^k43^k44:k42^k43^k44^k45 *
+1883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+1884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (v2,0x80); /* F(k47): F(k47): F(k47) : F(k47) */
+1885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k48 : k49 : k50 : k51 */
+1886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[12] = v0; /* K48:K49:K50:K51 */
+1887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * w, const AESByte * key)
+1891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_192, AES_Nk_192);
+1893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----- */
+1900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC || 1
+1902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * round_keys, const AESByte * key)
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec v0, v1;
+1906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec k;
+1907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER (StateIn) (key);
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+1910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = v0; /* k0 : k1 : k2 : k3 */
+1912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[1] = v1; /* k4 : k5 : k6 : k7 */
+
GAS LISTING /tmp/ccMa7HLZ.s page 56
+
+
+1913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_1(offset,rcon) \
+1915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)(v1,rcon); \
+1916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v0); \
+1917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(VecXor) (v0, k); \
+1918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[offset] = v0
+1919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_2(offset) \
+1921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn2)(v0); \
+1922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v1); \
+1923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(VecXor) (v1, k); \
+1924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[offset] = v1
+1925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(2,0x01); /* k8 : k9 : k10 : k11 */
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(3); /* k12 : k13 : k14 : k15 */
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(4,0x02); /* k16 : k17 : k18 : k19 */
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(5); /* k20 : k21 : k22 : k23 */
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(6,0x04); /* k24 : k25 : k26 : k27 */
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(7); /* k28 : k29 : k30 : k31 */
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(8,0x08); /* k32 : k33 : k34 : k35 */
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(9); /* k36 : k37 : k38 : k39 */
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(10,0x10); /* k40 : k41 : k42 : k43 */
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(11); /* k44 : k45 : k46 : k47 */
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(12,0x20); /* k48 : k49 : k50 : k51 */
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(13); /* k52 : k53 : k54 : k55 */
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(14,0x40); /* k56 : k57 : k58 : k59 */
+1939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * w, const AESByte * key)
+1943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_256, AES_Nk_256);
+1945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion) (CipherVec * r, const CipherVec * dr, unsigned Nr)
+1951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix, jx;
+1953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** jx = Nr;
+1955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ix = 0;
+1956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix++] = dr[jx--];
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** while (jx)
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+1959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix] = dr[jx];
+1960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion128) (CipherVec * w, const CipherVec * kw)
+1965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+1967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 57
+
+
+1970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion192) (CipherVec * w, const CipherVec * kw)
+1972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+1974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion256) (CipherVec * w, const CipherVec * kw)
+1979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+1981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Cipher First Round
+1986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+1995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+1997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+1999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End 1st Round", state);
+2001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register const CipherVec round_keys)
+2009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register const CipherVec round_keys)
+2014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mstate;
+2017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mround_keys;
+2018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+2021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+2023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+
GAS LISTING /tmp/ccMa7HLZ.s page 58
+
+
+2027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESENC (state, round_keys);
+2028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+2030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+2034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MixColumns) (state);
+2038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ommited n on purpose */
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After MixColum", state);
+2041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+2046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+2059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESENCLAST (state, round_keys);
+2062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+2064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+2068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+2075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Cipher
+2082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+
GAS LISTING /tmp/ccMa7HLZ.s page 59
+
+
+2084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** This implementation as stated
+2086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * above for simplifaction broke out the three types of rounds into
+2087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * first round, middle rounds, and last round. This approach was taken
+2088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * for ease of coding for optimization using smaller bytes of code
+2089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but inlining of the functions for efficiency
+2090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Cipher) (CipherVec state, const CipherVec * key,
+2093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned Nr)
+2094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix = 0;
+2096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+2098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+2101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(LastRound) (state, key[ix]);
+2103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Section 5.1 of FIPS 197
+2108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This set of routines implements our structured wrapping of the
+2110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 Section 5.3.5 Equivalent Inverse Cipher. In particular
+2111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * figure 15 Pseudo Code for the Equivalent Inverse Cipher.
+2112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The FIPS pseudocode has a single function which we have broken out
+2114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * into three kinds of rounds - first round, middle rounds and last
+2115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * round as we have also done with the cipher rountine.
+2116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The EqInvCipher operates on whole cipher blocks so the Byte and Block
+2118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * code is the same here until subroutines of the round functions are
+2119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * called.
+2120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * First round of equivalent inverse cipher is merely an XOR against the
+2124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * round key.
+2125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccMa7HLZ.s page 60
+
+
+2141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * middle rounds of the equivalent inverse cipher perform four steps
+2145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvSubBytes (inverse substitute bytes
+2146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvShiftRows (inverse shift rows
+2147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvMixColumns (inverse mix columns)
+2148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * AddRoundKey (xor against the round key)
+2149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the AES-NI instruction set from until implments all four steps with
+2151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * a single instruction
+2152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mstate;
+2165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mround_keys;
+2166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+2169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+2172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * AES-NI implmentation
+2175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESDEC (state, round_keys);
+2179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else /* #if USE_AES_NI */
+2181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * All other implementations
+2184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+2186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+2191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+2194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 61
+
+
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+2199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvMixColumns) (state);
+2202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+2207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+2216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+2218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif /* #if USE_AES_NI */
+2219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The final round of the equivalent inverse cipher is the same as
+2226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the middle rounds with the ommission of the InvMixColumns step.
+2227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESDECLAST (state, round_keys);
+2241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+2244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+2246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+2248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+2250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+
GAS LISTING /tmp/ccMa7HLZ.s page 62
+
+
+2255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The EqInvCipher functions (is defined in Figure 15 'Pseudo Code for
+2262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * for the Equivalent Inverse Cipher. This implementation as stated
+2263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * above for simplifaction broke out the three types of rounds into
+2264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * first round, middle rounds, and last round. This approach was taken
+2265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * for ease of coding for optimization using smaller bytes of code
+2266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but inlining of the functions for efficiency
+2267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static /*__inline__*/
+2269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvCipher) (CipherVec state, const CipherVec * key,
+2270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned Nr)
+2271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix = 0;
+2273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+2275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+2278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+2280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+2284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This section of the file is the use of the cipher defined above within
+2285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * our BlockCipherObject.
+2286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * These are the functions that will be directly referenced in the vector
+2288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * table for the block cipher. These are not specifically derived from
+2289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the FIPS-197 document.
+2290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-impl.h"
+2292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** typedef struct AES_CLASS AES_CLASS;
+2294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const char AESBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+2296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Destroy
+2300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+2301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * to create this key (key schedule)
+2302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+2304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+2305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(Destroy) (const BLOCKCIPHER_VEC_IMPL * self)
+2308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* we use a constant object so do nothing */
+2310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccMa7HLZ.s page 63
+
+
+2312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * BlockSize
+2315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(BlockSize) ()
+2318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (uint32_t) sizeof (AESBlock);
+2320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * KeySize
+2325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+2326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * to create this key (key schedule)
+2327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+2329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+2330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(KeySize) ()
+2333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (uint32_t) sizeof (AESKeySchedule);
+2335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SetEncryptKey
+2340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The KCipher calls this to have the block cipher build an encryption
+2341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * key in the KCipher object
+2342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+2346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t user_key_size)
+2347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t rc;
+2349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESKeySchedule * key;
+2350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = 0;
+2352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key = encrypt_key;
+2353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (user_key_size)
+2355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nk_128 * sizeof (AESWord):
+2357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_128;
+2358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+2359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nk_192 * sizeof (AESWord):
+2362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_192;
+2363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+2364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nk_256 * sizeof (AESWord):
+2367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_256;
+2368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+
GAS LISTING /tmp/ccMa7HLZ.s page 64
+
+
+2369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** default:
+2372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = 0;
+2373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memset (key, 0, sizeof (*key));
+2374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+2375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+2378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SetDecryptKey
+2383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The KCipher calls this to have the block cipher build an decryption
+2384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * key in the KCipher object
+2385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetDecryptKey) (void * decrypt_key,
+2389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const char * user_key,
+2390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t user_key_size)
+2391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESKeySchedule encrypt_key;
+2393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t rc;
+2394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+2396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (rc == 0)
+2397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESKeySchedule * key;
+2399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key = decrypt_key;
+2401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+2403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_128:
+2405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+2406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** encrypt_key.round_keys);
+2407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_192:
+2410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+2411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** encrypt_key.round_keys);
+2412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_256:
+2415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+2416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** encrypt_key.round_keys);
+2417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+2421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Encrypt
+
GAS LISTING /tmp/ccMa7HLZ.s page 65
+
+
+2426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Perform an encryption of a single block. Chained modes and stream
+2428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * cipher modes will call this multiple times.
+2429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Encrypt) (CipherVec state,
+2433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const void * encrypt_key)
+2434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESKeySchedule * key = encrypt_key;
+2436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (key);
+2437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds)
+2439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** default:
+2441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = vec_00;
+2442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_128:
+2445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+2446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_192:
+2449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+2450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_256:
+2453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+2454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Decrypt
+2463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Perform a decryption of a single block. Chained modes and stream
+2465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * cipher modes will call this multiple times.
+2466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Decrypt) (CipherVec state,
+2469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const void * decrypt_key)
+2470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESKeySchedule * key = decrypt_key;
+2472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (key);
+2474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds)
+2476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** default:
+2478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+2479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_128:
+2482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+
GAS LISTING /tmp/ccMa7HLZ.s page 66
+
+
+2483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AES_Nr_128);
+2484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_192:
+2487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+2488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AES_Nr_192);
+2489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_256:
+2492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+2493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AES_Nr_256);
+2494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * MakeProcessorSupport
+2503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Run-time check for support of this particular AES implmentation by
+2505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * checking the flags given via the cpuid instruction.
+2506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool AESBCMEMBER(ProcessorSupport) ()
+2509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t level = 1, a, b, c, d;
+2511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool ret = true;
+2512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __cpuid (level, a, b, c, d);
+2514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+2516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Only one flag tells whether the AES-NI instructions
+2520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * are implmented in this CPU
+2521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! (c & bit_AES))
+2523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no AES\n",__func__));
+2525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** } else
+2527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+2530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Several flags indicate different levels of SSE
+2532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * instruction implmentation
+2533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * we require SSE4.1
+2535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * that dates from 2006 so is most likely good enough
+2537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* if ( ! (c & (bit_SSE4_2))
+2539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+
GAS LISTING /tmp/ccMa7HLZ.s page 67
+
+
+2540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else */
+2545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! (c & bit_SSE4_1))
+2546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (c & bit_SSSE3))
+2552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (c & bit_SSE3))
+2558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSE3\n",__func__));
+2560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (d & bit_SSE2))
+2564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSE2\n",__func__));
+2566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (d & bit_SSE))
+2570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSE\n",__func__));
+2572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: passed\n",__func__));
+2576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ret;
+2577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Init
+2582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Initialize the fields of this object. The derived class will call this
+2584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * during it's initialization.
+2585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * self object to initialze
+2587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * vt the virtual table of the derived class
+2588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * mgr the cipher manager that is the construction factory block cipher
+2589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * objects hold references to the manager while the manager merely
+2590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * points at the block ciphers when all block ciphers are destroyed
+2591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the manager loses its references and it too can be destroyed if not
+2592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * held elsewhere
+2593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * name ASCIZ c-string the name of this class
+2594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+2596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KBlockCipherVec_vt_v1 AESBCMEMBER(_vt_) =
+
GAS LISTING /tmp/ccMa7HLZ.s page 68
+
+
+2597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 1, 1 },
+2599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(Destroy),
+2601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(BlockSize),
+2602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeySize),
+2603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(SetEncryptKey),
+2604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(SetDecryptKey),
+2605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(Encrypt),
+2606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(Decrypt)
+2607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+2608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Make
+2612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Create a new AES Block Cipher object.
+2614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The processor is checked to see if this particular version is supported on
+2615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * this particular CPU.
+2616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(Make) (KBlockCipher ** new_obj)
+2618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t rc;
+2620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+2622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* Check parameter first */
+2624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (new_obj == NULL)
+2625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+2626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else
+2628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *new_obj = NULL;
+2630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* check for processor support of this flavor */
+2632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! AESBCMEMBER(ProcessorSupport)())
+2633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+2634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else
+2636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = 0;
+2638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+2639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+2642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 1077 .loc 2 2642 0
+ 1078 018e 0FB68520 movzbl -6368(%rbp), %eax
+ 1078 E7FFFF
+ 1079 0195 0FB69510 movzbl -6384(%rbp), %edx
+ 1079 E7FFFF
+ 1080 019c 0FB6C0 movzbl %al, %eax
+ 1081 019f 6689858E movw %ax, -10354(%rbp)
+ 1081 D7FFFF
+ 1082 01a6 0FB7858E movzwl -10354(%rbp), %eax
+ 1082 D7FFFF
+ 1083 01ad F6F2 divb %dl
+
GAS LISTING /tmp/ccMa7HLZ.s page 69
+
+
+ 1084 01af 4189C7 movl %eax, %r15d
+ 1085 01b2 0FB68521 movzbl -6367(%rbp), %eax
+ 1085 E7FFFF
+ 1086 01b9 0FB69511 movzbl -6383(%rbp), %edx
+ 1086 E7FFFF
+ 1087 01c0 0FB6C0 movzbl %al, %eax
+ 1088 01c3 6689858E movw %ax, -10354(%rbp)
+ 1088 D7FFFF
+ 1089 01ca 0FB7858E movzwl -10354(%rbp), %eax
+ 1089 D7FFFF
+ 1090 01d1 F6F2 divb %dl
+ 1091 01d3 88855FD8 movb %al, -10145(%rbp)
+ 1091 FFFF
+ 1092 01d9 0FB68522 movzbl -6366(%rbp), %eax
+ 1092 E7FFFF
+ 1093 01e0 0FB69512 movzbl -6382(%rbp), %edx
+ 1093 E7FFFF
+ 1094 01e7 0FB6C0 movzbl %al, %eax
+ 1095 01ea 6689858E movw %ax, -10354(%rbp)
+ 1095 D7FFFF
+ 1096 01f1 0FB7858E movzwl -10354(%rbp), %eax
+ 1096 D7FFFF
+ 1097 01f8 F6F2 divb %dl
+ 1098 01fa 88855ED8 movb %al, -10146(%rbp)
+ 1098 FFFF
+ 1099 0200 0FB68523 movzbl -6365(%rbp), %eax
+ 1099 E7FFFF
+ 1100 0207 0FB69513 movzbl -6381(%rbp), %edx
+ 1100 E7FFFF
+ 1101 020e 0FB6C0 movzbl %al, %eax
+ 1102 0211 6689858E movw %ax, -10354(%rbp)
+ 1102 D7FFFF
+ 1103 0218 0FB7858E movzwl -10354(%rbp), %eax
+ 1103 D7FFFF
+ 1104 021f F6F2 divb %dl
+ 1105 0221 88855DD8 movb %al, -10147(%rbp)
+ 1105 FFFF
+ 1106 0227 0FB68524 movzbl -6364(%rbp), %eax
+ 1106 E7FFFF
+ 1107 022e 0FB69514 movzbl -6380(%rbp), %edx
+ 1107 E7FFFF
+ 1108 0235 0FB6C0 movzbl %al, %eax
+ 1109 0238 6689858E movw %ax, -10354(%rbp)
+ 1109 D7FFFF
+ 1110 023f 0FB7858E movzwl -10354(%rbp), %eax
+ 1110 D7FFFF
+ 1111 0246 F6F2 divb %dl
+ 1112 0248 88855CD8 movb %al, -10148(%rbp)
+ 1112 FFFF
+ 1113 024e 0FB68525 movzbl -6363(%rbp), %eax
+ 1113 E7FFFF
+ 1114 0255 0FB69515 movzbl -6379(%rbp), %edx
+ 1114 E7FFFF
+ 1115 025c 0FB6C0 movzbl %al, %eax
+ 1116 025f 6689858E movw %ax, -10354(%rbp)
+ 1116 D7FFFF
+ 1117 0266 0FB7858E movzwl -10354(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 70
+
+
+ 1117 D7FFFF
+ 1118 026d F6F2 divb %dl
+ 1119 026f 4189C1 movl %eax, %r9d
+ 1120 0272 0FB68526 movzbl -6362(%rbp), %eax
+ 1120 E7FFFF
+ 1121 0279 0FB69516 movzbl -6378(%rbp), %edx
+ 1121 E7FFFF
+ 1122 0280 0FB6C0 movzbl %al, %eax
+ 1123 0283 6689858E movw %ax, -10354(%rbp)
+ 1123 D7FFFF
+ 1124 028a 0FB7858E movzwl -10354(%rbp), %eax
+ 1124 D7FFFF
+ 1125 0291 F6F2 divb %dl
+ 1126 0293 89C7 movl %eax, %edi
+ 1127 0295 0FB68527 movzbl -6361(%rbp), %eax
+ 1127 E7FFFF
+ 1128 029c 0FB69517 movzbl -6377(%rbp), %edx
+ 1128 E7FFFF
+ 1129 02a3 0FB6C0 movzbl %al, %eax
+ 1130 02a6 6689858E movw %ax, -10354(%rbp)
+ 1130 D7FFFF
+ 1131 02ad 0FB7858E movzwl -10354(%rbp), %eax
+ 1131 D7FFFF
+ 1132 02b4 F6F2 divb %dl
+ 1133 02b6 89C3 movl %eax, %ebx
+ 1134 02b8 0FB68528 movzbl -6360(%rbp), %eax
+ 1134 E7FFFF
+ 1135 02bf 0FB69518 movzbl -6376(%rbp), %edx
+ 1135 E7FFFF
+ 1136 02c6 0FB6C0 movzbl %al, %eax
+ 1137 02c9 6689858E movw %ax, -10354(%rbp)
+ 1137 D7FFFF
+ 1138 02d0 0FB7858E movzwl -10354(%rbp), %eax
+ 1138 D7FFFF
+ 1139 02d7 F6F2 divb %dl
+ 1140 02d9 4189C2 movl %eax, %r10d
+ 1141 02dc 0FB68529 movzbl -6359(%rbp), %eax
+ 1141 E7FFFF
+ 1142 02e3 0FB69519 movzbl -6375(%rbp), %edx
+ 1142 E7FFFF
+ 1143 02ea 0FB6C0 movzbl %al, %eax
+ 1144 02ed 6689858E movw %ax, -10354(%rbp)
+ 1144 D7FFFF
+ 1145 02f4 0FB7858E movzwl -10354(%rbp), %eax
+ 1145 D7FFFF
+ 1146 02fb F6F2 divb %dl
+ 1147 02fd 4189C3 movl %eax, %r11d
+ 1148 0300 0FB6852A movzbl -6358(%rbp), %eax
+ 1148 E7FFFF
+ 1149 0307 0FB6951A movzbl -6374(%rbp), %edx
+ 1149 E7FFFF
+ 1150 030e 0FB6C0 movzbl %al, %eax
+ 1151 0311 6689858E movw %ax, -10354(%rbp)
+ 1151 D7FFFF
+ 1152 0318 0FB7858E movzwl -10354(%rbp), %eax
+ 1152 D7FFFF
+ 1153 031f F6F2 divb %dl
+
GAS LISTING /tmp/ccMa7HLZ.s page 71
+
+
+ 1154 0321 4189C4 movl %eax, %r12d
+ 1155 0324 0FB6852B movzbl -6357(%rbp), %eax
+ 1155 E7FFFF
+ 1156 032b 0FB6951B movzbl -6373(%rbp), %edx
+ 1156 E7FFFF
+ 1157 0332 0FB6C0 movzbl %al, %eax
+ 1158 0335 6689858E movw %ax, -10354(%rbp)
+ 1158 D7FFFF
+ 1159 033c 0FB7858E movzwl -10354(%rbp), %eax
+ 1159 D7FFFF
+ 1160 0343 F6F2 divb %dl
+ 1161 0345 4189C5 movl %eax, %r13d
+ 1162 0348 0FB6852C movzbl -6356(%rbp), %eax
+ 1162 E7FFFF
+ 1163 034f 0FB6951C movzbl -6372(%rbp), %edx
+ 1163 E7FFFF
+ 1164 0356 0FB6C0 movzbl %al, %eax
+ 1165 0359 6689858E movw %ax, -10354(%rbp)
+ 1165 D7FFFF
+ 1166 0360 0FB7858E movzwl -10354(%rbp), %eax
+ 1166 D7FFFF
+ 1167 0367 F6F2 divb %dl
+ 1168 0369 4189C6 movl %eax, %r14d
+ 1169 036c 0FB6852D movzbl -6355(%rbp), %eax
+ 1169 E7FFFF
+ 1170 0373 0FB6951D movzbl -6371(%rbp), %edx
+ 1170 E7FFFF
+ 1171 037a 0FB6C0 movzbl %al, %eax
+ 1172 037d 6689858E movw %ax, -10354(%rbp)
+ 1172 D7FFFF
+ 1173 0384 0FB7858E movzwl -10354(%rbp), %eax
+ 1173 D7FFFF
+ 1174 038b F6F2 divb %dl
+ 1175 038d 4189C0 movl %eax, %r8d
+ 1176 0390 0FB6852E movzbl -6354(%rbp), %eax
+ 1176 E7FFFF
+ 1177 0397 0FB6951E movzbl -6370(%rbp), %edx
+ 1177 E7FFFF
+ 1178 039e 0FB6C0 movzbl %al, %eax
+ 1179 03a1 6689858E movw %ax, -10354(%rbp)
+ 1179 D7FFFF
+ 1180 03a8 0FB7858E movzwl -10354(%rbp), %eax
+ 1180 D7FFFF
+ 1181 03af F6F2 divb %dl
+ 1182 03b1 89C6 movl %eax, %esi
+ 1183 03b3 0FB6852F movzbl -6353(%rbp), %eax
+ 1183 E7FFFF
+ 1184 03ba 0FB6951F movzbl -6369(%rbp), %edx
+ 1184 E7FFFF
+ 1185 03c1 0FB6C0 movzbl %al, %eax
+ 1186 03c4 6689858E movw %ax, -10354(%rbp)
+ 1186 D7FFFF
+ 1187 03cb 0FB7858E movzwl -10354(%rbp), %eax
+ 1187 D7FFFF
+ 1188 03d2 F6F2 divb %dl
+ 1189 03d4 89C1 movl %eax, %ecx
+ 1190 .LBB457:
+
GAS LISTING /tmp/ccMa7HLZ.s page 72
+
+
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 1191 .loc 2 346 0
+ 1192 03d6 0FB6D3 movzbl %bl, %edx
+ 1193 03d9 400FB6C7 movzbl %dil, %eax
+ 1194 03dd 48C1E208 salq $8, %rdx
+ 1195 03e1 4809C2 orq %rax, %rdx
+ 1196 03e4 410FB6C1 movzbl %r9b, %eax
+ 1197 03e8 48C1E208 salq $8, %rdx
+ 1198 03ec 4809C2 orq %rax, %rdx
+ 1199 03ef 0FB6855C movzbl -10148(%rbp), %eax
+ 1199 D8FFFF
+ 1200 03f6 48C1E208 salq $8, %rdx
+ 1201 03fa 4809C2 orq %rax, %rdx
+ 1202 03fd 0FB6855D movzbl -10147(%rbp), %eax
+ 1202 D8FFFF
+ 1203 0404 48C1E208 salq $8, %rdx
+ 1204 0408 4809C2 orq %rax, %rdx
+ 1205 040b 0FB6855E movzbl -10146(%rbp), %eax
+ 1205 D8FFFF
+ 1206 0412 48C1E208 salq $8, %rdx
+ 1207 0416 4809C2 orq %rax, %rdx
+ 1208 0419 0FB6855F movzbl -10145(%rbp), %eax
+ 1208 D8FFFF
+ 1209 0420 48C1E208 salq $8, %rdx
+ 1210 0424 4809C2 orq %rax, %rdx
+ 1211 0427 410FB6C7 movzbl %r15b, %eax
+ 1212 042b 48C1E208 salq $8, %rdx
+ 1213 042f 4809C2 orq %rax, %rdx
+ 1214 0432 0FB6C1 movzbl %cl, %eax
+ 1215 0435 400FB6CE movzbl %sil, %ecx
+ 1216 0439 48C1E008 salq $8, %rax
+ 1217 043d 4809C8 orq %rcx, %rax
+ 1218 0440 410FB6C8 movzbl %r8b, %ecx
+ 1219 0444 48C1E008 salq $8, %rax
+ 1220 0448 4809C8 orq %rcx, %rax
+ 1221 044b 410FB6CE movzbl %r14b, %ecx
+ 1222 044f 48C1E008 salq $8, %rax
+ 1223 0453 4809C8 orq %rcx, %rax
+ 1224 0456 410FB6CD movzbl %r13b, %ecx
+ 1225 045a 48C1E008 salq $8, %rax
+ 1226 045e 4809C8 orq %rcx, %rax
+ 1227 0461 410FB6CC movzbl %r12b, %ecx
+ 1228 0465 48C1E008 salq $8, %rax
+ 1229 0469 4809C8 orq %rcx, %rax
+ 1230 046c 410FB6CB movzbl %r11b, %ecx
+ 1231 0470 48C1E008 salq $8, %rax
+ 1232 0474 4809C8 orq %rcx, %rax
+ 1233 0477 410FB6CA movzbl %r10b, %ecx
+ 1234 047b 48C1E008 salq $8, %rax
+ 1235 047f 4809C8 orq %rcx, %rax
+ 1236 0482 48899520 movq %rdx, -10208(%rbp)
+ 1236 D8FFFF
+ 1237 0489 48898528 movq %rax, -10200(%rbp)
+ 1237 D8FFFF
+ 1238 0490 660F6F85 movdqa -10208(%rbp), %xmm0
+ 1238 20D8FFFF
+ 1239 .LBE457:
+
GAS LISTING /tmp/ccMa7HLZ.s page 73
+
+
+ 1240 .LBE456:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 1241 .loc 2 862 0
+ 1242 0498 F30F7F85 movdqu %xmm0, -6448(%rbp)
+ 1242 D0E6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 1243 .loc 2 866 0
+ 1244 04a0 C785ACE6 movl $0, -6484(%rbp)
+ 1244 FFFF0000
+ 1244 0000
+ 1245 04aa E9860200 jmp .L4
+ 1245 00
+ 1246 .L13:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1247 .loc 2 868 0
+ 1248 04af 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 1248 00000000
+ 1249 04b7 F30F7F85 movdqu %xmm0, -6336(%rbp)
+ 1249 40E7FFFF
+ 1250 04bf F30F6F85 movdqu -6448(%rbp), %xmm0
+ 1250 D0E6FFFF
+ 1251 04c7 F30F7F85 movdqu %xmm0, -6352(%rbp)
+ 1251 30E7FFFF
+ 1252 .LBB458:
+ 1253 .LBB459:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 1254 .loc 2 380 0
+ 1255 04cf F30F6F85 movdqu -6336(%rbp), %xmm0
+ 1255 40E7FFFF
+ 1256 04d7 F30F7F85 movdqu %xmm0, -9424(%rbp)
+ 1256 30DBFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 1257 .loc 2 381 0
+ 1258 04df F30F6F85 movdqu -6352(%rbp), %xmm0
+ 1258 30E7FFFF
+ 1259 04e7 F30F7F85 movdqu %xmm0, -9440(%rbp)
+ 1259 20DBFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 1260 .loc 2 383 0
+ 1261 04ef C7855CE7 movl $0, -6308(%rbp)
+ 1261 FFFF0000
+ 1261 0000
+ 1262 04f9 EB5C jmp .L5
+ 1263 .L8:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 1264 .loc 2 385 0
+ 1265 04fb 8B855CE7 movl -6308(%rbp), %eax
+ 1265 FFFF
+ 1266 0501 89C0 mov %eax, %eax
+ 1267 0503 0FB68405 movzbl -9440(%rbp,%rax), %eax
+ 1267 20DBFFFF
+ 1268 050b 84C0 testb %al, %al
+ 1269 050d 7912 jns .L6
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 1270 .loc 2 386 0
+ 1271 050f 8B855CE7 movl -6308(%rbp), %eax
+ 1271 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 74
+
+
+ 1272 0515 89C0 mov %eax, %eax
+ 1273 0517 C6840540 movb $0, -9408(%rbp,%rax)
+ 1273 DBFFFF00
+ 1274 051f EB2F jmp .L7
+ 1275 .L6:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 1276 .loc 2 388 0
+ 1277 0521 8B8D5CE7 movl -6308(%rbp), %ecx
+ 1277 FFFF
+ 1278 0527 8B855CE7 movl -6308(%rbp), %eax
+ 1278 FFFF
+ 1279 052d 89C0 mov %eax, %eax
+ 1280 052f 0FB68405 movzbl -9440(%rbp,%rax), %eax
+ 1280 20DBFFFF
+ 1281 0537 0FB6C0 movzbl %al, %eax
+ 1282 053a 83E00F andl $15, %eax
+ 1283 053d 4898 cltq
+ 1284 053f 0FB69405 movzbl -9424(%rbp,%rax), %edx
+ 1284 30DBFFFF
+ 1285 0547 89C8 mov %ecx, %eax
+ 1286 0549 88940540 movb %dl, -9408(%rbp,%rax)
+ 1286 DBFFFF
+ 1287 .L7:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 1288 .loc 2 383 0
+ 1289 0550 83855CE7 addl $1, -6308(%rbp)
+ 1289 FFFF01
+ 1290 .L5:
+ 1291 0557 83BD5CE7 cmpl $15, -6308(%rbp)
+ 1291 FFFF0F
+ 1292 055e 769B jbe .L8
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 1293 .loc 2 391 0
+ 1294 0560 F30F6F85 movdqu -9408(%rbp), %xmm0
+ 1294 40DBFFFF
+ 1295 .LBE459:
+ 1296 .LBE458:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1297 .loc 2 868 0
+ 1298 0568 F30F7F85 movdqu %xmm0, -6464(%rbp)
+ 1298 C0E6FFFF
+ 1299 0570 F30F6F85 movdqu -6432(%rbp), %xmm0
+ 1299 E0E6FFFF
+ 1300 0578 F30F7F85 movdqu %xmm0, -6288(%rbp)
+ 1300 70E7FFFF
+ 1301 0580 F30F6F85 movdqu -6464(%rbp), %xmm0
+ 1301 C0E6FFFF
+ 1302 0588 F30F7F85 movdqu %xmm0, -6304(%rbp)
+ 1302 60E7FFFF
+ 1303 .LBB460:
+ 1304 .LBB461:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 1305 .loc 2 234 0
+ 1306 0590 F30F6F85 movdqu -6304(%rbp), %xmm0
+ 1306 60E7FFFF
+ 1307 0598 F30F6F8D movdqu -6288(%rbp), %xmm1
+ 1307 70E7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 75
+
+
+ 1308 05a0 660FEBC1 por %xmm1, %xmm0
+ 1309 .LBE461:
+ 1310 .LBE460:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 1311 .loc 2 870 0
+ 1312 05a4 F30F7F85 movdqu %xmm0, -6464(%rbp)
+ 1312 C0E6FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1313 .loc 2 872 0
+ 1314 05ac 8B85ACE6 mov -6484(%rbp), %eax
+ 1314 FFFF
+ 1315 05b2 48C1E004 salq $4, %rax
+ 1316 05b6 48038588 addq -6520(%rbp), %rax
+ 1316 E6FFFF
+ 1317 05bd 660F6F00 movdqa (%rax), %xmm0
+ 1318 05c1 F30F7F85 movdqu %xmm0, -6256(%rbp)
+ 1318 90E7FFFF
+ 1319 05c9 F30F6F85 movdqu -6464(%rbp), %xmm0
+ 1319 C0E6FFFF
+ 1320 05d1 F30F7F85 movdqu %xmm0, -6272(%rbp)
+ 1320 80E7FFFF
+ 1321 .LBB462:
+ 1322 .LBB463:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 1323 .loc 2 380 0
+ 1324 05d9 F30F6F85 movdqu -6256(%rbp), %xmm0
+ 1324 90E7FFFF
+ 1325 05e1 F30F7F85 movdqu %xmm0, -9376(%rbp)
+ 1325 60DBFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 1326 .loc 2 381 0
+ 1327 05e9 F30F6F85 movdqu -6272(%rbp), %xmm0
+ 1327 80E7FFFF
+ 1328 05f1 F30F7F85 movdqu %xmm0, -9392(%rbp)
+ 1328 50DBFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 1329 .loc 2 383 0
+ 1330 05f9 C785ACE7 movl $0, -6228(%rbp)
+ 1330 FFFF0000
+ 1330 0000
+ 1331 0603 EB5C jmp .L9
+ 1332 .L12:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 1333 .loc 2 385 0
+ 1334 0605 8B85ACE7 movl -6228(%rbp), %eax
+ 1334 FFFF
+ 1335 060b 89C0 mov %eax, %eax
+ 1336 060d 0FB68405 movzbl -9392(%rbp,%rax), %eax
+ 1336 50DBFFFF
+ 1337 0615 84C0 testb %al, %al
+ 1338 0617 7912 jns .L10
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 1339 .loc 2 386 0
+ 1340 0619 8B85ACE7 movl -6228(%rbp), %eax
+ 1340 FFFF
+ 1341 061f 89C0 mov %eax, %eax
+ 1342 0621 C6840570 movb $0, -9360(%rbp,%rax)
+
GAS LISTING /tmp/ccMa7HLZ.s page 76
+
+
+ 1342 DBFFFF00
+ 1343 0629 EB2F jmp .L11
+ 1344 .L10:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 1345 .loc 2 388 0
+ 1346 062b 8B8DACE7 movl -6228(%rbp), %ecx
+ 1346 FFFF
+ 1347 0631 8B85ACE7 movl -6228(%rbp), %eax
+ 1347 FFFF
+ 1348 0637 89C0 mov %eax, %eax
+ 1349 0639 0FB68405 movzbl -9392(%rbp,%rax), %eax
+ 1349 50DBFFFF
+ 1350 0641 0FB6C0 movzbl %al, %eax
+ 1351 0644 83E00F andl $15, %eax
+ 1352 0647 4898 cltq
+ 1353 0649 0FB69405 movzbl -9376(%rbp,%rax), %edx
+ 1353 60DBFFFF
+ 1354 0651 89C8 mov %ecx, %eax
+ 1355 0653 88940570 movb %dl, -9360(%rbp,%rax)
+ 1355 DBFFFF
+ 1356 .L11:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 1357 .loc 2 383 0
+ 1358 065a 8385ACE7 addl $1, -6228(%rbp)
+ 1358 FFFF01
+ 1359 .L9:
+ 1360 0661 83BDACE7 cmpl $15, -6228(%rbp)
+ 1360 FFFF0F
+ 1361 0668 769B jbe .L12
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 1362 .loc 2 391 0
+ 1363 066a F30F6F85 movdqu -9360(%rbp), %xmm0
+ 1363 70DBFFFF
+ 1364 .LBE463:
+ 1365 .LBE462:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1366 .loc 2 872 0
+ 1367 0672 F30F7F85 movdqu %xmm0, -6464(%rbp)
+ 1367 C0E6FFFF
+ 1368 067a F30F6F85 movdqu -6480(%rbp), %xmm0
+ 1368 B0E6FFFF
+ 1369 0682 F30F7F85 movdqu %xmm0, -6208(%rbp)
+ 1369 C0E7FFFF
+ 1370 068a F30F6F85 movdqu -6464(%rbp), %xmm0
+ 1370 C0E6FFFF
+ 1371 0692 F30F7F85 movdqu %xmm0, -6224(%rbp)
+ 1371 B0E7FFFF
+ 1372 .LBB464:
+ 1373 .LBB465:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 1374 .loc 2 234 0
+ 1375 069a F30F6F85 movdqu -6224(%rbp), %xmm0
+ 1375 B0E7FFFF
+ 1376 06a2 F30F6F8D movdqu -6208(%rbp), %xmm1
+ 1376 C0E7FFFF
+ 1377 06aa 660FEBC1 por %xmm1, %xmm0
+ 1378 .LBE465:
+
GAS LISTING /tmp/ccMa7HLZ.s page 77
+
+
+ 1379 .LBE464:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 1380 .loc 2 874 0
+ 1381 06ae F30F7F85 movdqu %xmm0, -6480(%rbp)
+ 1381 B0E6FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1382 .loc 2 876 0
+ 1383 06b6 660F6F05 movdqa vec_01(%rip), %xmm0
+ 1383 00000000
+ 1384 06be F30F6F8D movdqu -6448(%rbp), %xmm1
+ 1384 D0E6FFFF
+ 1385 06c6 F30F7F8D movdqu %xmm1, -6176(%rbp)
+ 1385 E0E7FFFF
+ 1386 06ce F30F7F85 movdqu %xmm0, -6192(%rbp)
+ 1386 D0E7FFFF
+ 1387 .LBB466:
+ 1388 .LBB467:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 1389 .loc 2 290 0
+ 1390 06d6 F30F6F8D movdqu -6192(%rbp), %xmm1
+ 1390 D0E7FFFF
+ 1391 06de F30F6F85 movdqu -6176(%rbp), %xmm0
+ 1391 E0E7FFFF
+ 1392 06e6 660FF8C1 psubb %xmm1, %xmm0
+ 1393 .LBE467:
+ 1394 .LBE466:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1395 .loc 2 876 0
+ 1396 06ea F30F7F85 movdqu %xmm0, -6448(%rbp)
+ 1396 D0E6FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1397 .loc 2 878 0
+ 1398 06f2 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 1398 00000000
+ 1399 06fa F30F6F8D movdqu -6448(%rbp), %xmm1
+ 1399 D0E6FFFF
+ 1400 0702 F30F7F8D movdqu %xmm1, -6144(%rbp)
+ 1400 00E8FFFF
+ 1401 070a F30F7F85 movdqu %xmm0, -6160(%rbp)
+ 1401 F0E7FFFF
+ 1402 .LBB468:
+ 1403 .LBB469:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 1404 .loc 2 206 0
+ 1405 0712 F30F6F85 movdqu -6160(%rbp), %xmm0
+ 1405 F0E7FFFF
+ 1406 071a F30F6F8D movdqu -6144(%rbp), %xmm1
+ 1406 00E8FFFF
+ 1407 0722 660FDBC1 pand %xmm1, %xmm0
+ 1408 .LBE469:
+ 1409 .LBE468:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1410 .loc 2 878 0
+ 1411 0726 F30F7F85 movdqu %xmm0, -6448(%rbp)
+ 1411 D0E6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 1412 .loc 2 866 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 78
+
+
+ 1413 072e 8385ACE6 addl $1, -6484(%rbp)
+ 1413 FFFF01
+ 1414 .L4:
+ 1415 0735 83BDACE6 cmpl $15, -6484(%rbp)
+ 1415 FFFF0F
+ 1416 073c 0F866DFD jbe .L13
+ 1416 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 1417 .loc 2 882 0
+ 1418 0742 F30F6F85 movdqu -6480(%rbp), %xmm0
+ 1418 B0E6FFFF
+ 1419 .LBE453:
+ 1420 .LBE452:
+ 1421 .LBE451:
+ 1422 .LBE450:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 1423 .loc 2 1682 0
+ 1424 074a 660F7F85 movdqa %xmm0, -10192(%rbp)
+ 1424 30D8FFFF
+ 1425 .LBB470:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 1426 .loc 2 1683 0
+ 1427 0752 660F6F85 movdqa -10192(%rbp), %xmm0
+ 1427 30D8FFFF
+ 1428 075a F30F7F85 movdqu %xmm0, -9472(%rbp)
+ 1428 00DBFFFF
+ 1429 0762 E8000000 call KDbgWriterGet at PLT
+ 1429 00
+ 1430 0767 4885C0 testq %rax, %rax
+ 1431 076a 7479 je .L15
+ 1432 076c BF010000 movl $1, %edi
+ 1432 00
+ 1433 0771 E8000000 call KDbgCondToFlag at PLT
+ 1433 00
+ 1434 0776 4889C6 movq %rax, %rsi
+ 1435 0779 BF100000 movl $16, %edi
+ 1435 00
+ 1436 077e E8000000 call KDbgTestModConds at PLT
+ 1436 00
+ 1437 0783 84C0 testb %al, %al
+ 1438 0785 745E je .L15
+ 1439 0787 8B850CDB movl -9460(%rbp), %eax
+ 1439 FFFF
+ 1440 078d 89C7 movl %eax, %edi
+ 1441 078f E86CF8FF call bswap_32
+ 1441 FF
+ 1442 0794 4189C5 movl %eax, %r13d
+ 1443 0797 8B8508DB movl -9464(%rbp), %eax
+ 1443 FFFF
+ 1444 079d 89C7 movl %eax, %edi
+ 1445 079f E85CF8FF call bswap_32
+ 1445 FF
+ 1446 07a4 4189C4 movl %eax, %r12d
+ 1447 07a7 8B8504DB movl -9468(%rbp), %eax
+ 1447 FFFF
+ 1448 07ad 89C7 movl %eax, %edi
+ 1449 07af E84CF8FF call bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s page 79
+
+
+ 1449 FF
+ 1450 07b4 89C3 movl %eax, %ebx
+ 1451 07b6 8B8500DB movl -9472(%rbp), %eax
+ 1451 FFFF
+ 1452 07bc 89C7 movl %eax, %edi
+ 1453 07be E83DF8FF call bswap_32
+ 1453 FF
+ 1454 07c3 4589E9 movl %r13d, %r9d
+ 1455 07c6 4589E0 movl %r12d, %r8d
+ 1456 07c9 89D9 movl %ebx, %ecx
+ 1457 07cb 89C2 movl %eax, %edx
+ 1458 07cd 488D3500 leaq .LC0(%rip), %rsi
+ 1458 000000
+ 1459 07d4 488D3D00 leaq .LC1(%rip), %rdi
+ 1459 000000
+ 1460 07db B8000000 movl $0, %eax
+ 1460 00
+ 1461 07e0 E8000000 call KDbgMsg at PLT
+ 1461 00
+ 1462 .L15:
+ 1463 07e5 660F6F85 movdqa -10192(%rbp), %xmm0
+ 1463 30D8FFFF
+ 1464 07ed F30F7F85 movdqu %xmm0, -6128(%rbp)
+ 1464 10E8FFFF
+ 1465 .LBE470:
+ 1466 .LBB471:
+ 1467 .LBB472:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1468 .loc 2 667 0
+ 1469 07f5 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 1469 00000000
+ 1470 07fd F30F6F8D movdqu -6128(%rbp), %xmm1
+ 1470 10E8FFFF
+ 1471 0805 F30F7F8D movdqu %xmm1, -6096(%rbp)
+ 1471 30E8FFFF
+ 1472 080d F30F7F85 movdqu %xmm0, -6112(%rbp)
+ 1472 20E8FFFF
+ 1473 .LBB473:
+ 1474 .LBB474:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 1475 .loc 2 380 0
+ 1476 0815 F30F6F85 movdqu -6096(%rbp), %xmm0
+ 1476 30E8FFFF
+ 1477 081d F30F7F85 movdqu %xmm0, -9328(%rbp)
+ 1477 90DBFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 1478 .loc 2 381 0
+ 1479 0825 F30F6F85 movdqu -6112(%rbp), %xmm0
+ 1479 20E8FFFF
+ 1480 082d F30F7F85 movdqu %xmm0, -9344(%rbp)
+ 1480 80DBFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 1481 .loc 2 383 0
+ 1482 0835 C7854CE8 movl $0, -6068(%rbp)
+ 1482 FFFF0000
+ 1482 0000
+ 1483 083f EB5C jmp .L16
+
GAS LISTING /tmp/ccMa7HLZ.s page 80
+
+
+ 1484 .L19:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 1485 .loc 2 385 0
+ 1486 0841 8B854CE8 movl -6068(%rbp), %eax
+ 1486 FFFF
+ 1487 0847 89C0 mov %eax, %eax
+ 1488 0849 0FB68405 movzbl -9344(%rbp,%rax), %eax
+ 1488 80DBFFFF
+ 1489 0851 84C0 testb %al, %al
+ 1490 0853 7912 jns .L17
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 1491 .loc 2 386 0
+ 1492 0855 8B854CE8 movl -6068(%rbp), %eax
+ 1492 FFFF
+ 1493 085b 89C0 mov %eax, %eax
+ 1494 085d C68405A0 movb $0, -9312(%rbp,%rax)
+ 1494 DBFFFF00
+ 1495 0865 EB2F jmp .L18
+ 1496 .L17:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 1497 .loc 2 388 0
+ 1498 0867 8B8D4CE8 movl -6068(%rbp), %ecx
+ 1498 FFFF
+ 1499 086d 8B854CE8 movl -6068(%rbp), %eax
+ 1499 FFFF
+ 1500 0873 89C0 mov %eax, %eax
+ 1501 0875 0FB68405 movzbl -9344(%rbp,%rax), %eax
+ 1501 80DBFFFF
+ 1502 087d 0FB6C0 movzbl %al, %eax
+ 1503 0880 83E00F andl $15, %eax
+ 1504 0883 4898 cltq
+ 1505 0885 0FB69405 movzbl -9328(%rbp,%rax), %edx
+ 1505 90DBFFFF
+ 1506 088d 89C8 mov %ecx, %eax
+ 1507 088f 889405A0 movb %dl, -9312(%rbp,%rax)
+ 1507 DBFFFF
+ 1508 .L18:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 1509 .loc 2 383 0
+ 1510 0896 83854CE8 addl $1, -6068(%rbp)
+ 1510 FFFF01
+ 1511 .L16:
+ 1512 089d 83BD4CE8 cmpl $15, -6068(%rbp)
+ 1512 FFFF0F
+ 1513 08a4 769B jbe .L19
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 1514 .loc 2 391 0
+ 1515 08a6 F30F6F85 movdqu -9312(%rbp), %xmm0
+ 1515 A0DBFFFF
+ 1516 .LBE474:
+ 1517 .LBE473:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1518 .loc 2 667 0
+ 1519 08ae F30F7F85 movdqu %xmm0, -6128(%rbp)
+ 1519 10E8FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1520 .loc 2 668 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 81
+
+
+ 1521 08b6 F30F6F85 movdqu -6128(%rbp), %xmm0
+ 1521 10E8FFFF
+ 1522 .LBE472:
+ 1523 .LBE471:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 1524 .loc 2 1684 0
+ 1525 08be 660F7F85 movdqa %xmm0, -10192(%rbp)
+ 1525 30D8FFFF
+ 1526 .LBB475:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 1527 .loc 2 1685 0
+ 1528 08c6 660F6F85 movdqa -10192(%rbp), %xmm0
+ 1528 30D8FFFF
+ 1529 08ce F30F7F85 movdqu %xmm0, -9488(%rbp)
+ 1529 F0DAFFFF
+ 1530 08d6 E8000000 call KDbgWriterGet at PLT
+ 1530 00
+ 1531 08db 4885C0 testq %rax, %rax
+ 1532 08de 7479 je .L21
+ 1533 08e0 BF010000 movl $1, %edi
+ 1533 00
+ 1534 08e5 E8000000 call KDbgCondToFlag at PLT
+ 1534 00
+ 1535 08ea 4889C6 movq %rax, %rsi
+ 1536 08ed BF100000 movl $16, %edi
+ 1536 00
+ 1537 08f2 E8000000 call KDbgTestModConds at PLT
+ 1537 00
+ 1538 08f7 84C0 testb %al, %al
+ 1539 08f9 745E je .L21
+ 1540 08fb 8B85FCDA movl -9476(%rbp), %eax
+ 1540 FFFF
+ 1541 0901 89C7 movl %eax, %edi
+ 1542 0903 E8F8F6FF call bswap_32
+ 1542 FF
+ 1543 0908 4189C5 movl %eax, %r13d
+ 1544 090b 8B85F8DA movl -9480(%rbp), %eax
+ 1544 FFFF
+ 1545 0911 89C7 movl %eax, %edi
+ 1546 0913 E8E8F6FF call bswap_32
+ 1546 FF
+ 1547 0918 4189C4 movl %eax, %r12d
+ 1548 091b 8B85F4DA movl -9484(%rbp), %eax
+ 1548 FFFF
+ 1549 0921 89C7 movl %eax, %edi
+ 1550 0923 E8D8F6FF call bswap_32
+ 1550 FF
+ 1551 0928 89C3 movl %eax, %ebx
+ 1552 092a 8B85F0DA movl -9488(%rbp), %eax
+ 1552 FFFF
+ 1553 0930 89C7 movl %eax, %edi
+ 1554 0932 E8C9F6FF call bswap_32
+ 1554 FF
+ 1555 0937 4589E9 movl %r13d, %r9d
+ 1556 093a 4589E0 movl %r12d, %r8d
+ 1557 093d 89D9 movl %ebx, %ecx
+ 1558 093f 89C2 movl %eax, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 82
+
+
+ 1559 0941 488D3500 leaq .LC2(%rip), %rsi
+ 1559 000000
+ 1560 0948 488D3D00 leaq .LC1(%rip), %rdi
+ 1560 000000
+ 1561 094f B8000000 movl $0, %eax
+ 1561 00
+ 1562 0954 E8000000 call KDbgMsg at PLT
+ 1562 00
+ 1563 .L21:
+ 1564 0959 660F6F85 movdqa -10192(%rbp), %xmm0
+ 1564 30D8FFFF
+ 1565 0961 F30F7F85 movdqu %xmm0, -6048(%rbp)
+ 1565 60E8FFFF
+ 1566 0969 660F6F85 movdqa -10176(%rbp), %xmm0
+ 1566 40D8FFFF
+ 1567 0971 F30F7F85 movdqu %xmm0, -6064(%rbp)
+ 1567 50E8FFFF
+ 1568 .LBE475:
+ 1569 .LBB476:
+ 1570 .LBB477:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 1571 .loc 2 178 0
+ 1572 0979 F30F6F85 movdqu -6064(%rbp), %xmm0
+ 1572 50E8FFFF
+ 1573 0981 F30F6F8D movdqu -6048(%rbp), %xmm1
+ 1573 60E8FFFF
+ 1574 0989 660FEFC1 pxor %xmm1, %xmm0
+ 1575 .LBE477:
+ 1576 .LBE476:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 1577 .loc 2 1686 0
+ 1578 098d 660F7F85 movdqa %xmm0, -10192(%rbp)
+ 1578 30D8FFFF
+ 1579 .LBB478:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 1580 .loc 2 1687 0
+ 1581 0995 660F6F85 movdqa -10192(%rbp), %xmm0
+ 1581 30D8FFFF
+ 1582 099d F30F7F85 movdqu %xmm0, -9504(%rbp)
+ 1582 E0DAFFFF
+ 1583 09a5 E8000000 call KDbgWriterGet at PLT
+ 1583 00
+ 1584 09aa 4885C0 testq %rax, %rax
+ 1585 09ad 7479 je .L23
+ 1586 09af BF010000 movl $1, %edi
+ 1586 00
+ 1587 09b4 E8000000 call KDbgCondToFlag at PLT
+ 1587 00
+ 1588 09b9 4889C6 movq %rax, %rsi
+ 1589 09bc BF100000 movl $16, %edi
+ 1589 00
+ 1590 09c1 E8000000 call KDbgTestModConds at PLT
+ 1590 00
+ 1591 09c6 84C0 testb %al, %al
+ 1592 09c8 745E je .L23
+ 1593 09ca 8B85ECDA movl -9492(%rbp), %eax
+ 1593 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 83
+
+
+ 1594 09d0 89C7 movl %eax, %edi
+ 1595 09d2 E829F6FF call bswap_32
+ 1595 FF
+ 1596 09d7 4189C5 movl %eax, %r13d
+ 1597 09da 8B85E8DA movl -9496(%rbp), %eax
+ 1597 FFFF
+ 1598 09e0 89C7 movl %eax, %edi
+ 1599 09e2 E819F6FF call bswap_32
+ 1599 FF
+ 1600 09e7 4189C4 movl %eax, %r12d
+ 1601 09ea 8B85E4DA movl -9500(%rbp), %eax
+ 1601 FFFF
+ 1602 09f0 89C7 movl %eax, %edi
+ 1603 09f2 E809F6FF call bswap_32
+ 1603 FF
+ 1604 09f7 89C3 movl %eax, %ebx
+ 1605 09f9 8B85E0DA movl -9504(%rbp), %eax
+ 1605 FFFF
+ 1606 09ff 89C7 movl %eax, %edi
+ 1607 0a01 E8FAF5FF call bswap_32
+ 1607 FF
+ 1608 0a06 4589E9 movl %r13d, %r9d
+ 1609 0a09 4589E0 movl %r12d, %r8d
+ 1610 0a0c 89D9 movl %ebx, %ecx
+ 1611 0a0e 89C2 movl %eax, %edx
+ 1612 0a10 488D3500 leaq .LC3(%rip), %rsi
+ 1612 000000
+ 1613 0a17 488D3D00 leaq .LC1(%rip), %rdi
+ 1613 000000
+ 1614 0a1e B8000000 movl $0, %eax
+ 1614 00
+ 1615 0a23 E8000000 call KDbgMsg at PLT
+ 1615 00
+ 1616 .L23:
+ 1617 0a28 660F6F85 movdqa -10192(%rbp), %xmm0
+ 1617 30D8FFFF
+ 1618 0a30 F30F7F85 movdqu %xmm0, -6032(%rbp)
+ 1618 70E8FFFF
+ 1619 .LBE478:
+ 1620 .LBB479:
+ 1621 .LBB480:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 1622 .loc 2 1357 0
+ 1623 0a38 F30F6F85 movdqu -6032(%rbp), %xmm0
+ 1623 70E8FFFF
+ 1624 0a40 F30F7F85 movdqu %xmm0, -9296(%rbp)
+ 1624 B0DBFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 1625 .loc 2 1358 0
+ 1626 0a48 8B85BCDB movl -9284(%rbp), %eax
+ 1626 FFFF
+ 1627 0a4e 8985B8DB movl %eax, -9288(%rbp)
+ 1627 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 1628 .loc 2 1359 0
+ 1629 0a54 8B85BCDB movl -9284(%rbp), %eax
+ 1629 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 84
+
+
+ 1630 0a5a 8985B4DB movl %eax, -9292(%rbp)
+ 1630 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 1631 .loc 2 1360 0
+ 1632 0a60 8B85BCDB movl -9284(%rbp), %eax
+ 1632 FFFF
+ 1633 0a66 8985B0DB movl %eax, -9296(%rbp)
+ 1633 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 1634 .loc 2 1361 0
+ 1635 0a6c F30F6F85 movdqu -9296(%rbp), %xmm0
+ 1635 B0DBFFFF
+ 1636 .LBE480:
+ 1637 .LBE479:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 1638 .loc 2 1688 0
+ 1639 0a74 660F7F85 movdqa %xmm0, -10192(%rbp)
+ 1639 30D8FFFF
+ 1640 .LBB481:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 1641 .loc 2 1689 0
+ 1642 0a7c 660F6F85 movdqa -10192(%rbp), %xmm0
+ 1642 30D8FFFF
+ 1643 0a84 F30F7F85 movdqu %xmm0, -9520(%rbp)
+ 1643 D0DAFFFF
+ 1644 0a8c E8000000 call KDbgWriterGet at PLT
+ 1644 00
+ 1645 0a91 4885C0 testq %rax, %rax
+ 1646 0a94 7479 je .L25
+ 1647 0a96 BF010000 movl $1, %edi
+ 1647 00
+ 1648 0a9b E8000000 call KDbgCondToFlag at PLT
+ 1648 00
+ 1649 0aa0 4889C6 movq %rax, %rsi
+ 1650 0aa3 BF100000 movl $16, %edi
+ 1650 00
+ 1651 0aa8 E8000000 call KDbgTestModConds at PLT
+ 1651 00
+ 1652 0aad 84C0 testb %al, %al
+ 1653 0aaf 745E je .L25
+ 1654 0ab1 8B85DCDA movl -9508(%rbp), %eax
+ 1654 FFFF
+ 1655 0ab7 89C7 movl %eax, %edi
+ 1656 0ab9 E842F5FF call bswap_32
+ 1656 FF
+ 1657 0abe 4189C5 movl %eax, %r13d
+ 1658 0ac1 8B85D8DA movl -9512(%rbp), %eax
+ 1658 FFFF
+ 1659 0ac7 89C7 movl %eax, %edi
+ 1660 0ac9 E832F5FF call bswap_32
+ 1660 FF
+ 1661 0ace 4189C4 movl %eax, %r12d
+ 1662 0ad1 8B85D4DA movl -9516(%rbp), %eax
+ 1662 FFFF
+ 1663 0ad7 89C7 movl %eax, %edi
+ 1664 0ad9 E822F5FF call bswap_32
+ 1664 FF
+
GAS LISTING /tmp/ccMa7HLZ.s page 85
+
+
+ 1665 0ade 89C3 movl %eax, %ebx
+ 1666 0ae0 8B85D0DA movl -9520(%rbp), %eax
+ 1666 FFFF
+ 1667 0ae6 89C7 movl %eax, %edi
+ 1668 0ae8 E813F5FF call bswap_32
+ 1668 FF
+ 1669 0aed 4589E9 movl %r13d, %r9d
+ 1670 0af0 4589E0 movl %r12d, %r8d
+ 1671 0af3 89D9 movl %ebx, %ecx
+ 1672 0af5 89C2 movl %eax, %edx
+ 1673 0af7 488D3500 leaq .LC4(%rip), %rsi
+ 1673 000000
+ 1674 0afe 488D3D00 leaq .LC1(%rip), %rdi
+ 1674 000000
+ 1675 0b05 B8000000 movl $0, %eax
+ 1675 00
+ 1676 0b0a E8000000 call KDbgMsg at PLT
+ 1676 00
+ 1677 .L25:
+ 1678 .LBE481:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 1679 .loc 2 1690 0
+ 1680 0b0f 660F6F85 movdqa -10192(%rbp), %xmm0
+ 1680 30D8FFFF
+ 1681 .LBE447:
+ 1682 .LBE446:
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x01,1);
+ 1683 .loc 2 1744 0
+ 1684 0b17 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 1684 20E6FFFF
+ 1685 0b1f F30F6F85 movdqu -6640(%rbp), %xmm0
+ 1685 10E6FFFF
+ 1686 0b27 F30F7F85 movdqu %xmm0, -6016(%rbp)
+ 1686 80E8FFFF
+ 1687 .LBB482:
+ 1688 .LBB483:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 1689 .loc 2 1565 0
+ 1690 0b2f F30F6F85 movdqu -6016(%rbp), %xmm0
+ 1690 80E8FFFF
+ 1691 0b37 660F7F85 movdqa %xmm0, -10144(%rbp)
+ 1691 60D8FFFF
+ 1692 0b3f 660F6F85 movdqa -10144(%rbp), %xmm0
+ 1692 60D8FFFF
+ 1693 0b47 F30F7F85 movdqu %xmm0, -6000(%rbp)
+ 1693 90E8FFFF
+ 1694 .LBB484:
+ 1695 .LBB485:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 1696 .loc 2 1282 0
+ 1697 0b4f F30F6F85 movdqu -6000(%rbp), %xmm0
+ 1697 90E8FFFF
+ 1698 0b57 F30F7F85 movdqu %xmm0, -9280(%rbp)
+ 1698 C0DBFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 1699 .loc 2 1283 0
+ 1700 0b5f 8B85C8DB movl -9272(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 86
+
+
+ 1700 FFFF
+ 1701 0b65 8985CCDB movl %eax, -9268(%rbp)
+ 1701 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 1702 .loc 2 1284 0
+ 1703 0b6b 8B85C4DB movl -9276(%rbp), %eax
+ 1703 FFFF
+ 1704 0b71 8985C8DB movl %eax, -9272(%rbp)
+ 1704 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 1705 .loc 2 1285 0
+ 1706 0b77 8B85C0DB movl -9280(%rbp), %eax
+ 1706 FFFF
+ 1707 0b7d 8985C4DB movl %eax, -9276(%rbp)
+ 1707 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 1708 .loc 2 1286 0
+ 1709 0b83 C785C0DB movl $0, -9280(%rbp)
+ 1709 FFFF0000
+ 1709 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 1710 .loc 2 1287 0
+ 1711 0b8d F30F6F85 movdqu -9280(%rbp), %xmm0
+ 1711 C0DBFFFF
+ 1712 .LBE485:
+ 1713 .LBE484:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1714 .loc 2 1567 0
+ 1715 0b95 660F7F85 movdqa %xmm0, -10144(%rbp)
+ 1715 60D8FFFF
+ 1716 0b9d 660F6F85 movdqa -10144(%rbp), %xmm0
+ 1716 60D8FFFF
+ 1717 0ba5 660FEF85 pxor -6016(%rbp), %xmm0
+ 1717 80E8FFFF
+ 1718 0bad F30F7F85 movdqu %xmm0, -6016(%rbp)
+ 1718 80E8FFFF
+ 1719 0bb5 660F6F85 movdqa -10144(%rbp), %xmm0
+ 1719 60D8FFFF
+ 1720 0bbd F30F7F85 movdqu %xmm0, -5984(%rbp)
+ 1720 A0E8FFFF
+ 1721 .LBB486:
+ 1722 .LBB487:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 1723 .loc 2 1282 0
+ 1724 0bc5 F30F6F85 movdqu -5984(%rbp), %xmm0
+ 1724 A0E8FFFF
+ 1725 0bcd F30F7F85 movdqu %xmm0, -9264(%rbp)
+ 1725 D0DBFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 1726 .loc 2 1283 0
+ 1727 0bd5 8B85D8DB movl -9256(%rbp), %eax
+ 1727 FFFF
+ 1728 0bdb 8985DCDB movl %eax, -9252(%rbp)
+ 1728 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 1729 .loc 2 1284 0
+ 1730 0be1 8B85D4DB movl -9260(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 87
+
+
+ 1730 FFFF
+ 1731 0be7 8985D8DB movl %eax, -9256(%rbp)
+ 1731 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 1732 .loc 2 1285 0
+ 1733 0bed 8B85D0DB movl -9264(%rbp), %eax
+ 1733 FFFF
+ 1734 0bf3 8985D4DB movl %eax, -9260(%rbp)
+ 1734 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 1735 .loc 2 1286 0
+ 1736 0bf9 C785D0DB movl $0, -9264(%rbp)
+ 1736 FFFF0000
+ 1736 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 1737 .loc 2 1287 0
+ 1738 0c03 F30F6F85 movdqu -9264(%rbp), %xmm0
+ 1738 D0DBFFFF
+ 1739 .LBE487:
+ 1740 .LBE486:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1741 .loc 2 1568 0
+ 1742 0c0b 660F7F85 movdqa %xmm0, -10144(%rbp)
+ 1742 60D8FFFF
+ 1743 0c13 660F6F85 movdqa -10144(%rbp), %xmm0
+ 1743 60D8FFFF
+ 1744 0c1b 660FEF85 pxor -6016(%rbp), %xmm0
+ 1744 80E8FFFF
+ 1745 0c23 F30F7F85 movdqu %xmm0, -6016(%rbp)
+ 1745 80E8FFFF
+ 1746 0c2b 660F6F85 movdqa -10144(%rbp), %xmm0
+ 1746 60D8FFFF
+ 1747 0c33 F30F7F85 movdqu %xmm0, -5968(%rbp)
+ 1747 B0E8FFFF
+ 1748 .LBB488:
+ 1749 .LBB489:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 1750 .loc 2 1282 0
+ 1751 0c3b F30F6F85 movdqu -5968(%rbp), %xmm0
+ 1751 B0E8FFFF
+ 1752 0c43 F30F7F85 movdqu %xmm0, -9248(%rbp)
+ 1752 E0DBFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 1753 .loc 2 1283 0
+ 1754 0c4b 8B85E8DB movl -9240(%rbp), %eax
+ 1754 FFFF
+ 1755 0c51 8985ECDB movl %eax, -9236(%rbp)
+ 1755 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 1756 .loc 2 1284 0
+ 1757 0c57 8B85E4DB movl -9244(%rbp), %eax
+ 1757 FFFF
+ 1758 0c5d 8985E8DB movl %eax, -9240(%rbp)
+ 1758 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 1759 .loc 2 1285 0
+ 1760 0c63 8B85E0DB movl -9248(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 88
+
+
+ 1760 FFFF
+ 1761 0c69 8985E4DB movl %eax, -9244(%rbp)
+ 1761 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 1762 .loc 2 1286 0
+ 1763 0c6f C785E0DB movl $0, -9248(%rbp)
+ 1763 FFFF0000
+ 1763 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 1764 .loc 2 1287 0
+ 1765 0c79 F30F6F85 movdqu -9248(%rbp), %xmm0
+ 1765 E0DBFFFF
+ 1766 .LBE489:
+ 1767 .LBE488:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1768 .loc 2 1569 0
+ 1769 0c81 660F7F85 movdqa %xmm0, -10144(%rbp)
+ 1769 60D8FFFF
+ 1770 0c89 660F6F85 movdqa -10144(%rbp), %xmm0
+ 1770 60D8FFFF
+ 1771 0c91 660FEF85 pxor -6016(%rbp), %xmm0
+ 1771 80E8FFFF
+ 1772 0c99 F30F7F85 movdqu %xmm0, -6016(%rbp)
+ 1772 80E8FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1773 .loc 2 1571 0
+ 1774 0ca1 F30F6F85 movdqu -6016(%rbp), %xmm0
+ 1774 80E8FFFF
+ 1775 .LBE483:
+ 1776 .LBE482:
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x01,1);
+ 1777 .loc 2 1744 0
+ 1778 0ca9 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 1778 10E6FFFF
+ 1779 0cb1 F30F6F85 movdqu -6624(%rbp), %xmm0
+ 1779 20E6FFFF
+ 1780 0cb9 F30F6F8D movdqu -6640(%rbp), %xmm1
+ 1780 10E6FFFF
+ 1781 0cc1 660FEFC1 pxor %xmm1, %xmm0
+ 1782 0cc5 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 1782 10E6FFFF
+ 1783 0ccd 488B85B8 movq -9544(%rbp), %rax
+ 1783 DAFFFF
+ 1784 0cd4 4883C010 addq $16, %rax
+ 1785 0cd8 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 1785 10E6FFFF
+ 1786 0ce0 F30F7F00 movdqu %xmm0, (%rax)
+ 1787 0ce4 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 1787 10E6FFFF
+ 1788 0cec F30F7F85 movdqu %xmm0, -5936(%rbp)
+ 1788 D0E8FFFF
+ 1789 .LBB490:
+ 1790 .LBB491:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1791 .loc 2 1681 0
+ 1792 0cf4 B8020000 movl $2, %eax
+ 1792 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 89
+
+
+ 1793 0cf9 660F6F05 movdqa vec_00(%rip), %xmm0
+ 1793 00000000
+ 1794 0d01 F30F7F85 movdqu %xmm0, -5904(%rbp)
+ 1794 F0E8FFFF
+ 1795 0d09 8985ECE8 movl %eax, -5908(%rbp)
+ 1795 FFFF
+ 1796 .LBB492:
+ 1797 .LBB493:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 1798 .loc 2 522 0
+ 1799 0d0f F30F6F85 movdqu -5904(%rbp), %xmm0
+ 1799 F0E8FFFF
+ 1800 0d17 F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 1800 30DCFFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 1801 .loc 2 523 0
+ 1802 0d1f B8030000 movl $3, %eax
+ 1802 00
+ 1803 0d24 4898 cltq
+ 1804 0d26 8B95ECE8 movl -5908(%rbp), %edx
+ 1804 FFFF
+ 1805 0d2c 89948530 movl %edx, -9168(%rbp,%rax,4)
+ 1805 DCFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 1806 .loc 2 524 0
+ 1807 0d33 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 1807 30DCFFFF
+ 1808 0d3b F30F7F85 movdqu %xmm0, -5904(%rbp)
+ 1808 F0E8FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1809 .loc 2 526 0
+ 1810 0d43 F30F6F85 movdqu -5904(%rbp), %xmm0
+ 1810 F0E8FFFF
+ 1811 .LBE493:
+ 1812 .LBE492:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1813 .loc 2 1681 0
+ 1814 0d4b 660F7F85 movdqa %xmm0, -10112(%rbp)
+ 1814 80D8FFFF
+ 1815 0d53 F30F6F85 movdqu -5936(%rbp), %xmm0
+ 1815 D0E8FFFF
+ 1816 0d5b F30F7F85 movdqu %xmm0, -5888(%rbp)
+ 1816 00E9FFFF
+ 1817 0d63 F30F6F85 movdqu -5888(%rbp), %xmm0
+ 1817 00E9FFFF
+ 1818 0d6b F30F7F85 movdqu %xmm0, -5856(%rbp)
+ 1818 20E9FFFF
+ 1819 0d73 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 1819 000000
+ 1820 0d7a 48898518 movq %rax, -5864(%rbp)
+ 1820 E9FFFF
+ 1821 .LBB494:
+ 1822 .LBB495:
+ 1823 .LBB496:
+ 1824 .LBB497:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 1825 .loc 2 851 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 90
+
+
+ 1826 0d81 660F6F05 movdqa vec_00(%rip), %xmm0
+ 1826 00000000
+ 1827 0d89 F30F7F85 movdqu %xmm0, -5824(%rbp)
+ 1827 40E9FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1828 .loc 2 854 0
+ 1829 0d91 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 1829 00000000
+ 1830 0d99 F30F6F8D movdqu -5856(%rbp), %xmm1
+ 1830 20E9FFFF
+ 1831 0da1 F30F7F8D movdqu %xmm1, -5744(%rbp)
+ 1831 90E9FFFF
+ 1832 0da9 F30F7F85 movdqu %xmm0, -5760(%rbp)
+ 1832 80E9FFFF
+ 1833 .LBB498:
+ 1834 .LBB499:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 1835 .loc 2 206 0
+ 1836 0db1 F30F6F85 movdqu -5760(%rbp), %xmm0
+ 1836 80E9FFFF
+ 1837 0db9 F30F6F8D movdqu -5744(%rbp), %xmm1
+ 1837 90E9FFFF
+ 1838 0dc1 660FDBC1 pand %xmm1, %xmm0
+ 1839 .LBE499:
+ 1840 .LBE498:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1841 .loc 2 854 0
+ 1842 0dc5 F30F7F85 movdqu %xmm0, -5776(%rbp)
+ 1842 70E9FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 1843 .loc 2 862 0
+ 1844 0dcd 660F6F05 movdqa vec_10(%rip), %xmm0
+ 1844 00000000
+ 1845 0dd5 F30F6F8D movdqu -5856(%rbp), %xmm1
+ 1845 20E9FFFF
+ 1846 0ddd F30F7F8D movdqu %xmm1, -5712(%rbp)
+ 1846 B0E9FFFF
+ 1847 0de5 F30F7F85 movdqu %xmm0, -5728(%rbp)
+ 1847 A0E9FFFF
+ 1848 .LBB500:
+ 1849 .loc 2 2642 0
+ 1850 0ded 0FB685B0 movzbl -5712(%rbp), %eax
+ 1850 E9FFFF
+ 1851 0df4 0FB695A0 movzbl -5728(%rbp), %edx
+ 1851 E9FFFF
+ 1852 0dfb 0FB6C0 movzbl %al, %eax
+ 1853 0dfe 6689858E movw %ax, -10354(%rbp)
+ 1853 D7FFFF
+ 1854 0e05 0FB7858E movzwl -10354(%rbp), %eax
+ 1854 D7FFFF
+ 1855 0e0c F6F2 divb %dl
+ 1856 0e0e 4189C7 movl %eax, %r15d
+ 1857 0e11 0FB685B1 movzbl -5711(%rbp), %eax
+ 1857 E9FFFF
+ 1858 0e18 0FB695A1 movzbl -5727(%rbp), %edx
+ 1858 E9FFFF
+ 1859 0e1f 0FB6C0 movzbl %al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 91
+
+
+ 1860 0e22 6689858E movw %ax, -10354(%rbp)
+ 1860 D7FFFF
+ 1861 0e29 0FB7858E movzwl -10354(%rbp), %eax
+ 1861 D7FFFF
+ 1862 0e30 F6F2 divb %dl
+ 1863 0e32 88859FD8 movb %al, -10081(%rbp)
+ 1863 FFFF
+ 1864 0e38 0FB685B2 movzbl -5710(%rbp), %eax
+ 1864 E9FFFF
+ 1865 0e3f 0FB695A2 movzbl -5726(%rbp), %edx
+ 1865 E9FFFF
+ 1866 0e46 0FB6C0 movzbl %al, %eax
+ 1867 0e49 6689858E movw %ax, -10354(%rbp)
+ 1867 D7FFFF
+ 1868 0e50 0FB7858E movzwl -10354(%rbp), %eax
+ 1868 D7FFFF
+ 1869 0e57 F6F2 divb %dl
+ 1870 0e59 88859ED8 movb %al, -10082(%rbp)
+ 1870 FFFF
+ 1871 0e5f 0FB685B3 movzbl -5709(%rbp), %eax
+ 1871 E9FFFF
+ 1872 0e66 0FB695A3 movzbl -5725(%rbp), %edx
+ 1872 E9FFFF
+ 1873 0e6d 0FB6C0 movzbl %al, %eax
+ 1874 0e70 6689858E movw %ax, -10354(%rbp)
+ 1874 D7FFFF
+ 1875 0e77 0FB7858E movzwl -10354(%rbp), %eax
+ 1875 D7FFFF
+ 1876 0e7e F6F2 divb %dl
+ 1877 0e80 88859DD8 movb %al, -10083(%rbp)
+ 1877 FFFF
+ 1878 0e86 0FB685B4 movzbl -5708(%rbp), %eax
+ 1878 E9FFFF
+ 1879 0e8d 0FB695A4 movzbl -5724(%rbp), %edx
+ 1879 E9FFFF
+ 1880 0e94 0FB6C0 movzbl %al, %eax
+ 1881 0e97 6689858E movw %ax, -10354(%rbp)
+ 1881 D7FFFF
+ 1882 0e9e 0FB7858E movzwl -10354(%rbp), %eax
+ 1882 D7FFFF
+ 1883 0ea5 F6F2 divb %dl
+ 1884 0ea7 88859CD8 movb %al, -10084(%rbp)
+ 1884 FFFF
+ 1885 0ead 0FB685B5 movzbl -5707(%rbp), %eax
+ 1885 E9FFFF
+ 1886 0eb4 0FB695A5 movzbl -5723(%rbp), %edx
+ 1886 E9FFFF
+ 1887 0ebb 0FB6C0 movzbl %al, %eax
+ 1888 0ebe 6689858E movw %ax, -10354(%rbp)
+ 1888 D7FFFF
+ 1889 0ec5 0FB7858E movzwl -10354(%rbp), %eax
+ 1889 D7FFFF
+ 1890 0ecc F6F2 divb %dl
+ 1891 0ece 4189C1 movl %eax, %r9d
+ 1892 0ed1 0FB685B6 movzbl -5706(%rbp), %eax
+ 1892 E9FFFF
+ 1893 0ed8 0FB695A6 movzbl -5722(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 92
+
+
+ 1893 E9FFFF
+ 1894 0edf 0FB6C0 movzbl %al, %eax
+ 1895 0ee2 6689858E movw %ax, -10354(%rbp)
+ 1895 D7FFFF
+ 1896 0ee9 0FB7858E movzwl -10354(%rbp), %eax
+ 1896 D7FFFF
+ 1897 0ef0 F6F2 divb %dl
+ 1898 0ef2 89C7 movl %eax, %edi
+ 1899 0ef4 0FB685B7 movzbl -5705(%rbp), %eax
+ 1899 E9FFFF
+ 1900 0efb 0FB695A7 movzbl -5721(%rbp), %edx
+ 1900 E9FFFF
+ 1901 0f02 0FB6C0 movzbl %al, %eax
+ 1902 0f05 6689858E movw %ax, -10354(%rbp)
+ 1902 D7FFFF
+ 1903 0f0c 0FB7858E movzwl -10354(%rbp), %eax
+ 1903 D7FFFF
+ 1904 0f13 F6F2 divb %dl
+ 1905 0f15 89C3 movl %eax, %ebx
+ 1906 0f17 0FB685B8 movzbl -5704(%rbp), %eax
+ 1906 E9FFFF
+ 1907 0f1e 0FB695A8 movzbl -5720(%rbp), %edx
+ 1907 E9FFFF
+ 1908 0f25 0FB6C0 movzbl %al, %eax
+ 1909 0f28 6689858E movw %ax, -10354(%rbp)
+ 1909 D7FFFF
+ 1910 0f2f 0FB7858E movzwl -10354(%rbp), %eax
+ 1910 D7FFFF
+ 1911 0f36 F6F2 divb %dl
+ 1912 0f38 4189C2 movl %eax, %r10d
+ 1913 0f3b 0FB685B9 movzbl -5703(%rbp), %eax
+ 1913 E9FFFF
+ 1914 0f42 0FB695A9 movzbl -5719(%rbp), %edx
+ 1914 E9FFFF
+ 1915 0f49 0FB6C0 movzbl %al, %eax
+ 1916 0f4c 6689858E movw %ax, -10354(%rbp)
+ 1916 D7FFFF
+ 1917 0f53 0FB7858E movzwl -10354(%rbp), %eax
+ 1917 D7FFFF
+ 1918 0f5a F6F2 divb %dl
+ 1919 0f5c 4189C3 movl %eax, %r11d
+ 1920 0f5f 0FB685BA movzbl -5702(%rbp), %eax
+ 1920 E9FFFF
+ 1921 0f66 0FB695AA movzbl -5718(%rbp), %edx
+ 1921 E9FFFF
+ 1922 0f6d 0FB6C0 movzbl %al, %eax
+ 1923 0f70 6689858E movw %ax, -10354(%rbp)
+ 1923 D7FFFF
+ 1924 0f77 0FB7858E movzwl -10354(%rbp), %eax
+ 1924 D7FFFF
+ 1925 0f7e F6F2 divb %dl
+ 1926 0f80 4189C4 movl %eax, %r12d
+ 1927 0f83 0FB685BB movzbl -5701(%rbp), %eax
+ 1927 E9FFFF
+ 1928 0f8a 0FB695AB movzbl -5717(%rbp), %edx
+ 1928 E9FFFF
+ 1929 0f91 0FB6C0 movzbl %al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 93
+
+
+ 1930 0f94 6689858E movw %ax, -10354(%rbp)
+ 1930 D7FFFF
+ 1931 0f9b 0FB7858E movzwl -10354(%rbp), %eax
+ 1931 D7FFFF
+ 1932 0fa2 F6F2 divb %dl
+ 1933 0fa4 4189C5 movl %eax, %r13d
+ 1934 0fa7 0FB685BC movzbl -5700(%rbp), %eax
+ 1934 E9FFFF
+ 1935 0fae 0FB695AC movzbl -5716(%rbp), %edx
+ 1935 E9FFFF
+ 1936 0fb5 0FB6C0 movzbl %al, %eax
+ 1937 0fb8 6689858E movw %ax, -10354(%rbp)
+ 1937 D7FFFF
+ 1938 0fbf 0FB7858E movzwl -10354(%rbp), %eax
+ 1938 D7FFFF
+ 1939 0fc6 F6F2 divb %dl
+ 1940 0fc8 4189C6 movl %eax, %r14d
+ 1941 0fcb 0FB685BD movzbl -5699(%rbp), %eax
+ 1941 E9FFFF
+ 1942 0fd2 0FB695AD movzbl -5715(%rbp), %edx
+ 1942 E9FFFF
+ 1943 0fd9 0FB6C0 movzbl %al, %eax
+ 1944 0fdc 6689858E movw %ax, -10354(%rbp)
+ 1944 D7FFFF
+ 1945 0fe3 0FB7858E movzwl -10354(%rbp), %eax
+ 1945 D7FFFF
+ 1946 0fea F6F2 divb %dl
+ 1947 0fec 4189C0 movl %eax, %r8d
+ 1948 0fef 0FB685BE movzbl -5698(%rbp), %eax
+ 1948 E9FFFF
+ 1949 0ff6 0FB695AE movzbl -5714(%rbp), %edx
+ 1949 E9FFFF
+ 1950 0ffd 0FB6C0 movzbl %al, %eax
+ 1951 1000 6689858E movw %ax, -10354(%rbp)
+ 1951 D7FFFF
+ 1952 1007 0FB7858E movzwl -10354(%rbp), %eax
+ 1952 D7FFFF
+ 1953 100e F6F2 divb %dl
+ 1954 1010 89C6 movl %eax, %esi
+ 1955 1012 0FB685BF movzbl -5697(%rbp), %eax
+ 1955 E9FFFF
+ 1956 1019 0FB695AF movzbl -5713(%rbp), %edx
+ 1956 E9FFFF
+ 1957 1020 0FB6C0 movzbl %al, %eax
+ 1958 1023 6689858E movw %ax, -10354(%rbp)
+ 1958 D7FFFF
+ 1959 102a 0FB7858E movzwl -10354(%rbp), %eax
+ 1959 D7FFFF
+ 1960 1031 F6F2 divb %dl
+ 1961 1033 89C1 movl %eax, %ecx
+ 1962 .LBB501:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 1963 .loc 2 346 0
+ 1964 1035 0FB6D3 movzbl %bl, %edx
+ 1965 1038 400FB6C7 movzbl %dil, %eax
+ 1966 103c 48C1E208 salq $8, %rdx
+ 1967 1040 4809C2 orq %rax, %rdx
+
GAS LISTING /tmp/ccMa7HLZ.s page 94
+
+
+ 1968 1043 410FB6C1 movzbl %r9b, %eax
+ 1969 1047 48C1E208 salq $8, %rdx
+ 1970 104b 4809C2 orq %rax, %rdx
+ 1971 104e 0FB6859C movzbl -10084(%rbp), %eax
+ 1971 D8FFFF
+ 1972 1055 48C1E208 salq $8, %rdx
+ 1973 1059 4809C2 orq %rax, %rdx
+ 1974 105c 0FB6859D movzbl -10083(%rbp), %eax
+ 1974 D8FFFF
+ 1975 1063 48C1E208 salq $8, %rdx
+ 1976 1067 4809C2 orq %rax, %rdx
+ 1977 106a 0FB6859E movzbl -10082(%rbp), %eax
+ 1977 D8FFFF
+ 1978 1071 48C1E208 salq $8, %rdx
+ 1979 1075 4809C2 orq %rax, %rdx
+ 1980 1078 0FB6859F movzbl -10081(%rbp), %eax
+ 1980 D8FFFF
+ 1981 107f 48C1E208 salq $8, %rdx
+ 1982 1083 4809C2 orq %rax, %rdx
+ 1983 1086 410FB6C7 movzbl %r15b, %eax
+ 1984 108a 48C1E208 salq $8, %rdx
+ 1985 108e 4809C2 orq %rax, %rdx
+ 1986 1091 0FB6C1 movzbl %cl, %eax
+ 1987 1094 400FB6CE movzbl %sil, %ecx
+ 1988 1098 48C1E008 salq $8, %rax
+ 1989 109c 4809C8 orq %rcx, %rax
+ 1990 109f 410FB6C8 movzbl %r8b, %ecx
+ 1991 10a3 48C1E008 salq $8, %rax
+ 1992 10a7 4809C8 orq %rcx, %rax
+ 1993 10aa 410FB6CE movzbl %r14b, %ecx
+ 1994 10ae 48C1E008 salq $8, %rax
+ 1995 10b2 4809C8 orq %rcx, %rax
+ 1996 10b5 410FB6CD movzbl %r13b, %ecx
+ 1997 10b9 48C1E008 salq $8, %rax
+ 1998 10bd 4809C8 orq %rcx, %rax
+ 1999 10c0 410FB6CC movzbl %r12b, %ecx
+ 2000 10c4 48C1E008 salq $8, %rax
+ 2001 10c8 4809C8 orq %rcx, %rax
+ 2002 10cb 410FB6CB movzbl %r11b, %ecx
+ 2003 10cf 48C1E008 salq $8, %rax
+ 2004 10d3 4809C8 orq %rcx, %rax
+ 2005 10d6 410FB6CA movzbl %r10b, %ecx
+ 2006 10da 48C1E008 salq $8, %rax
+ 2007 10de 4809C8 orq %rcx, %rax
+ 2008 10e1 48899510 movq %rdx, -10224(%rbp)
+ 2008 D8FFFF
+ 2009 10e8 48898518 movq %rax, -10216(%rbp)
+ 2009 D8FFFF
+ 2010 10ef 660F6F85 movdqa -10224(%rbp), %xmm0
+ 2010 10D8FFFF
+ 2011 .LBE501:
+ 2012 .LBE500:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 2013 .loc 2 862 0
+ 2014 10f7 F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 2014 60E9FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+
GAS LISTING /tmp/ccMa7HLZ.s page 95
+
+
+ 2015 .loc 2 866 0
+ 2016 10ff C7853CE9 movl $0, -5828(%rbp)
+ 2016 FFFF0000
+ 2016 0000
+ 2017 1109 E9860200 jmp .L26
+ 2017 00
+ 2018 .L35:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2019 .loc 2 868 0
+ 2020 110e 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 2020 00000000
+ 2021 1116 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 2021 D0E9FFFF
+ 2022 111e F30F6F85 movdqu -5792(%rbp), %xmm0
+ 2022 60E9FFFF
+ 2023 1126 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 2023 C0E9FFFF
+ 2024 .LBB502:
+ 2025 .LBB503:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 2026 .loc 2 380 0
+ 2027 112e F30F6F85 movdqu -5680(%rbp), %xmm0
+ 2027 D0E9FFFF
+ 2028 1136 F30F7F85 movdqu %xmm0, -9136(%rbp)
+ 2028 50DCFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 2029 .loc 2 381 0
+ 2030 113e F30F6F85 movdqu -5696(%rbp), %xmm0
+ 2030 C0E9FFFF
+ 2031 1146 F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 2031 40DCFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2032 .loc 2 383 0
+ 2033 114e C785ECE9 movl $0, -5652(%rbp)
+ 2033 FFFF0000
+ 2033 0000
+ 2034 1158 EB5C jmp .L27
+ 2035 .L30:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 2036 .loc 2 385 0
+ 2037 115a 8B85ECE9 movl -5652(%rbp), %eax
+ 2037 FFFF
+ 2038 1160 89C0 mov %eax, %eax
+ 2039 1162 0FB68405 movzbl -9152(%rbp,%rax), %eax
+ 2039 40DCFFFF
+ 2040 116a 84C0 testb %al, %al
+ 2041 116c 7912 jns .L28
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 2042 .loc 2 386 0
+ 2043 116e 8B85ECE9 movl -5652(%rbp), %eax
+ 2043 FFFF
+ 2044 1174 89C0 mov %eax, %eax
+ 2045 1176 C6840560 movb $0, -9120(%rbp,%rax)
+ 2045 DCFFFF00
+ 2046 117e EB2F jmp .L29
+ 2047 .L28:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+
GAS LISTING /tmp/ccMa7HLZ.s page 96
+
+
+ 2048 .loc 2 388 0
+ 2049 1180 8B8DECE9 movl -5652(%rbp), %ecx
+ 2049 FFFF
+ 2050 1186 8B85ECE9 movl -5652(%rbp), %eax
+ 2050 FFFF
+ 2051 118c 89C0 mov %eax, %eax
+ 2052 118e 0FB68405 movzbl -9152(%rbp,%rax), %eax
+ 2052 40DCFFFF
+ 2053 1196 0FB6C0 movzbl %al, %eax
+ 2054 1199 83E00F andl $15, %eax
+ 2055 119c 4898 cltq
+ 2056 119e 0FB69405 movzbl -9136(%rbp,%rax), %edx
+ 2056 50DCFFFF
+ 2057 11a6 89C8 mov %ecx, %eax
+ 2058 11a8 88940560 movb %dl, -9120(%rbp,%rax)
+ 2058 DCFFFF
+ 2059 .L29:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2060 .loc 2 383 0
+ 2061 11af 8385ECE9 addl $1, -5652(%rbp)
+ 2061 FFFF01
+ 2062 .L27:
+ 2063 11b6 83BDECE9 cmpl $15, -5652(%rbp)
+ 2063 FFFF0F
+ 2064 11bd 769B jbe .L30
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 2065 .loc 2 391 0
+ 2066 11bf F30F6F85 movdqu -9120(%rbp), %xmm0
+ 2066 60DCFFFF
+ 2067 .LBE503:
+ 2068 .LBE502:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2069 .loc 2 868 0
+ 2070 11c7 F30F7F85 movdqu %xmm0, -5808(%rbp)
+ 2070 50E9FFFF
+ 2071 11cf F30F6F85 movdqu -5776(%rbp), %xmm0
+ 2071 70E9FFFF
+ 2072 11d7 F30F7F85 movdqu %xmm0, -5632(%rbp)
+ 2072 00EAFFFF
+ 2073 11df F30F6F85 movdqu -5808(%rbp), %xmm0
+ 2073 50E9FFFF
+ 2074 11e7 F30F7F85 movdqu %xmm0, -5648(%rbp)
+ 2074 F0E9FFFF
+ 2075 .LBB504:
+ 2076 .LBB505:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 2077 .loc 2 234 0
+ 2078 11ef F30F6F85 movdqu -5648(%rbp), %xmm0
+ 2078 F0E9FFFF
+ 2079 11f7 F30F6F8D movdqu -5632(%rbp), %xmm1
+ 2079 00EAFFFF
+ 2080 11ff 660FEBC1 por %xmm1, %xmm0
+ 2081 .LBE505:
+ 2082 .LBE504:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 2083 .loc 2 870 0
+ 2084 1203 F30F7F85 movdqu %xmm0, -5808(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 97
+
+
+ 2084 50E9FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2085 .loc 2 872 0
+ 2086 120b 8B853CE9 mov -5828(%rbp), %eax
+ 2086 FFFF
+ 2087 1211 48C1E004 salq $4, %rax
+ 2088 1215 48038518 addq -5864(%rbp), %rax
+ 2088 E9FFFF
+ 2089 121c 660F6F00 movdqa (%rax), %xmm0
+ 2090 1220 F30F7F85 movdqu %xmm0, -5600(%rbp)
+ 2090 20EAFFFF
+ 2091 1228 F30F6F85 movdqu -5808(%rbp), %xmm0
+ 2091 50E9FFFF
+ 2092 1230 F30F7F85 movdqu %xmm0, -5616(%rbp)
+ 2092 10EAFFFF
+ 2093 .LBB506:
+ 2094 .LBB507:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 2095 .loc 2 380 0
+ 2096 1238 F30F6F85 movdqu -5600(%rbp), %xmm0
+ 2096 20EAFFFF
+ 2097 1240 F30F7F85 movdqu %xmm0, -9088(%rbp)
+ 2097 80DCFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 2098 .loc 2 381 0
+ 2099 1248 F30F6F85 movdqu -5616(%rbp), %xmm0
+ 2099 10EAFFFF
+ 2100 1250 F30F7F85 movdqu %xmm0, -9104(%rbp)
+ 2100 70DCFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2101 .loc 2 383 0
+ 2102 1258 C7853CEA movl $0, -5572(%rbp)
+ 2102 FFFF0000
+ 2102 0000
+ 2103 1262 EB5C jmp .L31
+ 2104 .L34:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 2105 .loc 2 385 0
+ 2106 1264 8B853CEA movl -5572(%rbp), %eax
+ 2106 FFFF
+ 2107 126a 89C0 mov %eax, %eax
+ 2108 126c 0FB68405 movzbl -9104(%rbp,%rax), %eax
+ 2108 70DCFFFF
+ 2109 1274 84C0 testb %al, %al
+ 2110 1276 7912 jns .L32
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 2111 .loc 2 386 0
+ 2112 1278 8B853CEA movl -5572(%rbp), %eax
+ 2112 FFFF
+ 2113 127e 89C0 mov %eax, %eax
+ 2114 1280 C6840590 movb $0, -9072(%rbp,%rax)
+ 2114 DCFFFF00
+ 2115 1288 EB2F jmp .L33
+ 2116 .L32:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 2117 .loc 2 388 0
+ 2118 128a 8B8D3CEA movl -5572(%rbp), %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 98
+
+
+ 2118 FFFF
+ 2119 1290 8B853CEA movl -5572(%rbp), %eax
+ 2119 FFFF
+ 2120 1296 89C0 mov %eax, %eax
+ 2121 1298 0FB68405 movzbl -9104(%rbp,%rax), %eax
+ 2121 70DCFFFF
+ 2122 12a0 0FB6C0 movzbl %al, %eax
+ 2123 12a3 83E00F andl $15, %eax
+ 2124 12a6 4898 cltq
+ 2125 12a8 0FB69405 movzbl -9088(%rbp,%rax), %edx
+ 2125 80DCFFFF
+ 2126 12b0 89C8 mov %ecx, %eax
+ 2127 12b2 88940590 movb %dl, -9072(%rbp,%rax)
+ 2127 DCFFFF
+ 2128 .L33:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2129 .loc 2 383 0
+ 2130 12b9 83853CEA addl $1, -5572(%rbp)
+ 2130 FFFF01
+ 2131 .L31:
+ 2132 12c0 83BD3CEA cmpl $15, -5572(%rbp)
+ 2132 FFFF0F
+ 2133 12c7 769B jbe .L34
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 2134 .loc 2 391 0
+ 2135 12c9 F30F6F85 movdqu -9072(%rbp), %xmm0
+ 2135 90DCFFFF
+ 2136 .LBE507:
+ 2137 .LBE506:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2138 .loc 2 872 0
+ 2139 12d1 F30F7F85 movdqu %xmm0, -5808(%rbp)
+ 2139 50E9FFFF
+ 2140 12d9 F30F6F85 movdqu -5824(%rbp), %xmm0
+ 2140 40E9FFFF
+ 2141 12e1 F30F7F85 movdqu %xmm0, -5552(%rbp)
+ 2141 50EAFFFF
+ 2142 12e9 F30F6F85 movdqu -5808(%rbp), %xmm0
+ 2142 50E9FFFF
+ 2143 12f1 F30F7F85 movdqu %xmm0, -5568(%rbp)
+ 2143 40EAFFFF
+ 2144 .LBB508:
+ 2145 .LBB509:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 2146 .loc 2 234 0
+ 2147 12f9 F30F6F85 movdqu -5568(%rbp), %xmm0
+ 2147 40EAFFFF
+ 2148 1301 F30F6F8D movdqu -5552(%rbp), %xmm1
+ 2148 50EAFFFF
+ 2149 1309 660FEBC1 por %xmm1, %xmm0
+ 2150 .LBE509:
+ 2151 .LBE508:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 2152 .loc 2 874 0
+ 2153 130d F30F7F85 movdqu %xmm0, -5824(%rbp)
+ 2153 40E9FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+
GAS LISTING /tmp/ccMa7HLZ.s page 99
+
+
+ 2154 .loc 2 876 0
+ 2155 1315 660F6F05 movdqa vec_01(%rip), %xmm0
+ 2155 00000000
+ 2156 131d F30F6F8D movdqu -5792(%rbp), %xmm1
+ 2156 60E9FFFF
+ 2157 1325 F30F7F8D movdqu %xmm1, -5520(%rbp)
+ 2157 70EAFFFF
+ 2158 132d F30F7F85 movdqu %xmm0, -5536(%rbp)
+ 2158 60EAFFFF
+ 2159 .LBB510:
+ 2160 .LBB511:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 2161 .loc 2 290 0
+ 2162 1335 F30F6F8D movdqu -5536(%rbp), %xmm1
+ 2162 60EAFFFF
+ 2163 133d F30F6F85 movdqu -5520(%rbp), %xmm0
+ 2163 70EAFFFF
+ 2164 1345 660FF8C1 psubb %xmm1, %xmm0
+ 2165 .LBE511:
+ 2166 .LBE510:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2167 .loc 2 876 0
+ 2168 1349 F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 2168 60E9FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2169 .loc 2 878 0
+ 2170 1351 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 2170 00000000
+ 2171 1359 F30F6F8D movdqu -5792(%rbp), %xmm1
+ 2171 60E9FFFF
+ 2172 1361 F30F7F8D movdqu %xmm1, -5488(%rbp)
+ 2172 90EAFFFF
+ 2173 1369 F30F7F85 movdqu %xmm0, -5504(%rbp)
+ 2173 80EAFFFF
+ 2174 .LBB512:
+ 2175 .LBB513:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 2176 .loc 2 206 0
+ 2177 1371 F30F6F85 movdqu -5504(%rbp), %xmm0
+ 2177 80EAFFFF
+ 2178 1379 F30F6F8D movdqu -5488(%rbp), %xmm1
+ 2178 90EAFFFF
+ 2179 1381 660FDBC1 pand %xmm1, %xmm0
+ 2180 .LBE513:
+ 2181 .LBE512:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2182 .loc 2 878 0
+ 2183 1385 F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 2183 60E9FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 2184 .loc 2 866 0
+ 2185 138d 83853CE9 addl $1, -5828(%rbp)
+ 2185 FFFF01
+ 2186 .L26:
+ 2187 1394 83BD3CE9 cmpl $15, -5828(%rbp)
+ 2187 FFFF0F
+ 2188 139b 0F866DFD jbe .L35
+
GAS LISTING /tmp/ccMa7HLZ.s page 100
+
+
+ 2188 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 2189 .loc 2 882 0
+ 2190 13a1 F30F6F85 movdqu -5824(%rbp), %xmm0
+ 2190 40E9FFFF
+ 2191 .LBE497:
+ 2192 .LBE496:
+ 2193 .LBE495:
+ 2194 .LBE494:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 2195 .loc 2 1682 0
+ 2196 13a9 660F7F85 movdqa %xmm0, -10128(%rbp)
+ 2196 70D8FFFF
+ 2197 .LBB514:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 2198 .loc 2 1683 0
+ 2199 13b1 660F6F85 movdqa -10128(%rbp), %xmm0
+ 2199 70D8FFFF
+ 2200 13b9 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 2200 20DCFFFF
+ 2201 13c1 E8000000 call KDbgWriterGet at PLT
+ 2201 00
+ 2202 13c6 4885C0 testq %rax, %rax
+ 2203 13c9 7479 je .L37
+ 2204 13cb BF010000 movl $1, %edi
+ 2204 00
+ 2205 13d0 E8000000 call KDbgCondToFlag at PLT
+ 2205 00
+ 2206 13d5 4889C6 movq %rax, %rsi
+ 2207 13d8 BF100000 movl $16, %edi
+ 2207 00
+ 2208 13dd E8000000 call KDbgTestModConds at PLT
+ 2208 00
+ 2209 13e2 84C0 testb %al, %al
+ 2210 13e4 745E je .L37
+ 2211 13e6 8B852CDC movl -9172(%rbp), %eax
+ 2211 FFFF
+ 2212 13ec 89C7 movl %eax, %edi
+ 2213 13ee E80DECFF call bswap_32
+ 2213 FF
+ 2214 13f3 4189C5 movl %eax, %r13d
+ 2215 13f6 8B8528DC movl -9176(%rbp), %eax
+ 2215 FFFF
+ 2216 13fc 89C7 movl %eax, %edi
+ 2217 13fe E8FDEBFF call bswap_32
+ 2217 FF
+ 2218 1403 4189C4 movl %eax, %r12d
+ 2219 1406 8B8524DC movl -9180(%rbp), %eax
+ 2219 FFFF
+ 2220 140c 89C7 movl %eax, %edi
+ 2221 140e E8EDEBFF call bswap_32
+ 2221 FF
+ 2222 1413 89C3 movl %eax, %ebx
+ 2223 1415 8B8520DC movl -9184(%rbp), %eax
+ 2223 FFFF
+ 2224 141b 89C7 movl %eax, %edi
+ 2225 141d E8DEEBFF call bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s page 101
+
+
+ 2225 FF
+ 2226 1422 4589E9 movl %r13d, %r9d
+ 2227 1425 4589E0 movl %r12d, %r8d
+ 2228 1428 89D9 movl %ebx, %ecx
+ 2229 142a 89C2 movl %eax, %edx
+ 2230 142c 488D3500 leaq .LC0(%rip), %rsi
+ 2230 000000
+ 2231 1433 488D3D00 leaq .LC1(%rip), %rdi
+ 2231 000000
+ 2232 143a B8000000 movl $0, %eax
+ 2232 00
+ 2233 143f E8000000 call KDbgMsg at PLT
+ 2233 00
+ 2234 .L37:
+ 2235 1444 660F6F85 movdqa -10128(%rbp), %xmm0
+ 2235 70D8FFFF
+ 2236 144c F30F7F85 movdqu %xmm0, -5472(%rbp)
+ 2236 A0EAFFFF
+ 2237 .LBE514:
+ 2238 .LBB515:
+ 2239 .LBB516:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2240 .loc 2 667 0
+ 2241 1454 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 2241 00000000
+ 2242 145c F30F6F8D movdqu -5472(%rbp), %xmm1
+ 2242 A0EAFFFF
+ 2243 1464 F30F7F8D movdqu %xmm1, -5440(%rbp)
+ 2243 C0EAFFFF
+ 2244 146c F30F7F85 movdqu %xmm0, -5456(%rbp)
+ 2244 B0EAFFFF
+ 2245 .LBB517:
+ 2246 .LBB518:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 2247 .loc 2 380 0
+ 2248 1474 F30F6F85 movdqu -5440(%rbp), %xmm0
+ 2248 C0EAFFFF
+ 2249 147c F30F7F85 movdqu %xmm0, -9040(%rbp)
+ 2249 B0DCFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 2250 .loc 2 381 0
+ 2251 1484 F30F6F85 movdqu -5456(%rbp), %xmm0
+ 2251 B0EAFFFF
+ 2252 148c F30F7F85 movdqu %xmm0, -9056(%rbp)
+ 2252 A0DCFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2253 .loc 2 383 0
+ 2254 1494 C785DCEA movl $0, -5412(%rbp)
+ 2254 FFFF0000
+ 2254 0000
+ 2255 149e EB5C jmp .L38
+ 2256 .L41:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 2257 .loc 2 385 0
+ 2258 14a0 8B85DCEA movl -5412(%rbp), %eax
+ 2258 FFFF
+ 2259 14a6 89C0 mov %eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 102
+
+
+ 2260 14a8 0FB68405 movzbl -9056(%rbp,%rax), %eax
+ 2260 A0DCFFFF
+ 2261 14b0 84C0 testb %al, %al
+ 2262 14b2 7912 jns .L39
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 2263 .loc 2 386 0
+ 2264 14b4 8B85DCEA movl -5412(%rbp), %eax
+ 2264 FFFF
+ 2265 14ba 89C0 mov %eax, %eax
+ 2266 14bc C68405C0 movb $0, -9024(%rbp,%rax)
+ 2266 DCFFFF00
+ 2267 14c4 EB2F jmp .L40
+ 2268 .L39:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 2269 .loc 2 388 0
+ 2270 14c6 8B8DDCEA movl -5412(%rbp), %ecx
+ 2270 FFFF
+ 2271 14cc 8B85DCEA movl -5412(%rbp), %eax
+ 2271 FFFF
+ 2272 14d2 89C0 mov %eax, %eax
+ 2273 14d4 0FB68405 movzbl -9056(%rbp,%rax), %eax
+ 2273 A0DCFFFF
+ 2274 14dc 0FB6C0 movzbl %al, %eax
+ 2275 14df 83E00F andl $15, %eax
+ 2276 14e2 4898 cltq
+ 2277 14e4 0FB69405 movzbl -9040(%rbp,%rax), %edx
+ 2277 B0DCFFFF
+ 2278 14ec 89C8 mov %ecx, %eax
+ 2279 14ee 889405C0 movb %dl, -9024(%rbp,%rax)
+ 2279 DCFFFF
+ 2280 .L40:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2281 .loc 2 383 0
+ 2282 14f5 8385DCEA addl $1, -5412(%rbp)
+ 2282 FFFF01
+ 2283 .L38:
+ 2284 14fc 83BDDCEA cmpl $15, -5412(%rbp)
+ 2284 FFFF0F
+ 2285 1503 769B jbe .L41
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 2286 .loc 2 391 0
+ 2287 1505 F30F6F85 movdqu -9024(%rbp), %xmm0
+ 2287 C0DCFFFF
+ 2288 .LBE518:
+ 2289 .LBE517:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2290 .loc 2 667 0
+ 2291 150d F30F7F85 movdqu %xmm0, -5472(%rbp)
+ 2291 A0EAFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2292 .loc 2 668 0
+ 2293 1515 F30F6F85 movdqu -5472(%rbp), %xmm0
+ 2293 A0EAFFFF
+ 2294 .LBE516:
+ 2295 .LBE515:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 2296 .loc 2 1684 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 103
+
+
+ 2297 151d 660F7F85 movdqa %xmm0, -10128(%rbp)
+ 2297 70D8FFFF
+ 2298 .LBB519:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 2299 .loc 2 1685 0
+ 2300 1525 660F6F85 movdqa -10128(%rbp), %xmm0
+ 2300 70D8FFFF
+ 2301 152d F30F7F85 movdqu %xmm0, -9200(%rbp)
+ 2301 10DCFFFF
+ 2302 1535 E8000000 call KDbgWriterGet at PLT
+ 2302 00
+ 2303 153a 4885C0 testq %rax, %rax
+ 2304 153d 7479 je .L43
+ 2305 153f BF010000 movl $1, %edi
+ 2305 00
+ 2306 1544 E8000000 call KDbgCondToFlag at PLT
+ 2306 00
+ 2307 1549 4889C6 movq %rax, %rsi
+ 2308 154c BF100000 movl $16, %edi
+ 2308 00
+ 2309 1551 E8000000 call KDbgTestModConds at PLT
+ 2309 00
+ 2310 1556 84C0 testb %al, %al
+ 2311 1558 745E je .L43
+ 2312 155a 8B851CDC movl -9188(%rbp), %eax
+ 2312 FFFF
+ 2313 1560 89C7 movl %eax, %edi
+ 2314 1562 E899EAFF call bswap_32
+ 2314 FF
+ 2315 1567 4189C5 movl %eax, %r13d
+ 2316 156a 8B8518DC movl -9192(%rbp), %eax
+ 2316 FFFF
+ 2317 1570 89C7 movl %eax, %edi
+ 2318 1572 E889EAFF call bswap_32
+ 2318 FF
+ 2319 1577 4189C4 movl %eax, %r12d
+ 2320 157a 8B8514DC movl -9196(%rbp), %eax
+ 2320 FFFF
+ 2321 1580 89C7 movl %eax, %edi
+ 2322 1582 E879EAFF call bswap_32
+ 2322 FF
+ 2323 1587 89C3 movl %eax, %ebx
+ 2324 1589 8B8510DC movl -9200(%rbp), %eax
+ 2324 FFFF
+ 2325 158f 89C7 movl %eax, %edi
+ 2326 1591 E86AEAFF call bswap_32
+ 2326 FF
+ 2327 1596 4589E9 movl %r13d, %r9d
+ 2328 1599 4589E0 movl %r12d, %r8d
+ 2329 159c 89D9 movl %ebx, %ecx
+ 2330 159e 89C2 movl %eax, %edx
+ 2331 15a0 488D3500 leaq .LC2(%rip), %rsi
+ 2331 000000
+ 2332 15a7 488D3D00 leaq .LC1(%rip), %rdi
+ 2332 000000
+ 2333 15ae B8000000 movl $0, %eax
+ 2333 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 104
+
+
+ 2334 15b3 E8000000 call KDbgMsg at PLT
+ 2334 00
+ 2335 .L43:
+ 2336 15b8 660F6F85 movdqa -10128(%rbp), %xmm0
+ 2336 70D8FFFF
+ 2337 15c0 F30F7F85 movdqu %xmm0, -5392(%rbp)
+ 2337 F0EAFFFF
+ 2338 15c8 660F6F85 movdqa -10112(%rbp), %xmm0
+ 2338 80D8FFFF
+ 2339 15d0 F30F7F85 movdqu %xmm0, -5408(%rbp)
+ 2339 E0EAFFFF
+ 2340 .LBE519:
+ 2341 .LBB520:
+ 2342 .LBB521:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 2343 .loc 2 178 0
+ 2344 15d8 F30F6F85 movdqu -5408(%rbp), %xmm0
+ 2344 E0EAFFFF
+ 2345 15e0 F30F6F8D movdqu -5392(%rbp), %xmm1
+ 2345 F0EAFFFF
+ 2346 15e8 660FEFC1 pxor %xmm1, %xmm0
+ 2347 .LBE521:
+ 2348 .LBE520:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 2349 .loc 2 1686 0
+ 2350 15ec 660F7F85 movdqa %xmm0, -10128(%rbp)
+ 2350 70D8FFFF
+ 2351 .LBB522:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 2352 .loc 2 1687 0
+ 2353 15f4 660F6F85 movdqa -10128(%rbp), %xmm0
+ 2353 70D8FFFF
+ 2354 15fc F30F7F85 movdqu %xmm0, -9216(%rbp)
+ 2354 00DCFFFF
+ 2355 1604 E8000000 call KDbgWriterGet at PLT
+ 2355 00
+ 2356 1609 4885C0 testq %rax, %rax
+ 2357 160c 7479 je .L45
+ 2358 160e BF010000 movl $1, %edi
+ 2358 00
+ 2359 1613 E8000000 call KDbgCondToFlag at PLT
+ 2359 00
+ 2360 1618 4889C6 movq %rax, %rsi
+ 2361 161b BF100000 movl $16, %edi
+ 2361 00
+ 2362 1620 E8000000 call KDbgTestModConds at PLT
+ 2362 00
+ 2363 1625 84C0 testb %al, %al
+ 2364 1627 745E je .L45
+ 2365 1629 8B850CDC movl -9204(%rbp), %eax
+ 2365 FFFF
+ 2366 162f 89C7 movl %eax, %edi
+ 2367 1631 E8CAE9FF call bswap_32
+ 2367 FF
+ 2368 1636 4189C5 movl %eax, %r13d
+ 2369 1639 8B8508DC movl -9208(%rbp), %eax
+ 2369 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 105
+
+
+ 2370 163f 89C7 movl %eax, %edi
+ 2371 1641 E8BAE9FF call bswap_32
+ 2371 FF
+ 2372 1646 4189C4 movl %eax, %r12d
+ 2373 1649 8B8504DC movl -9212(%rbp), %eax
+ 2373 FFFF
+ 2374 164f 89C7 movl %eax, %edi
+ 2375 1651 E8AAE9FF call bswap_32
+ 2375 FF
+ 2376 1656 89C3 movl %eax, %ebx
+ 2377 1658 8B8500DC movl -9216(%rbp), %eax
+ 2377 FFFF
+ 2378 165e 89C7 movl %eax, %edi
+ 2379 1660 E89BE9FF call bswap_32
+ 2379 FF
+ 2380 1665 4589E9 movl %r13d, %r9d
+ 2381 1668 4589E0 movl %r12d, %r8d
+ 2382 166b 89D9 movl %ebx, %ecx
+ 2383 166d 89C2 movl %eax, %edx
+ 2384 166f 488D3500 leaq .LC3(%rip), %rsi
+ 2384 000000
+ 2385 1676 488D3D00 leaq .LC1(%rip), %rdi
+ 2385 000000
+ 2386 167d B8000000 movl $0, %eax
+ 2386 00
+ 2387 1682 E8000000 call KDbgMsg at PLT
+ 2387 00
+ 2388 .L45:
+ 2389 1687 660F6F85 movdqa -10128(%rbp), %xmm0
+ 2389 70D8FFFF
+ 2390 168f F30F7F85 movdqu %xmm0, -5376(%rbp)
+ 2390 00EBFFFF
+ 2391 .LBE522:
+ 2392 .LBB523:
+ 2393 .LBB524:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 2394 .loc 2 1357 0
+ 2395 1697 F30F6F85 movdqu -5376(%rbp), %xmm0
+ 2395 00EBFFFF
+ 2396 169f F30F7F85 movdqu %xmm0, -9008(%rbp)
+ 2396 D0DCFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 2397 .loc 2 1358 0
+ 2398 16a7 8B85DCDC movl -8996(%rbp), %eax
+ 2398 FFFF
+ 2399 16ad 8985D8DC movl %eax, -9000(%rbp)
+ 2399 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 2400 .loc 2 1359 0
+ 2401 16b3 8B85DCDC movl -8996(%rbp), %eax
+ 2401 FFFF
+ 2402 16b9 8985D4DC movl %eax, -9004(%rbp)
+ 2402 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 2403 .loc 2 1360 0
+ 2404 16bf 8B85DCDC movl -8996(%rbp), %eax
+ 2404 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 106
+
+
+ 2405 16c5 8985D0DC movl %eax, -9008(%rbp)
+ 2405 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 2406 .loc 2 1361 0
+ 2407 16cb F30F6F85 movdqu -9008(%rbp), %xmm0
+ 2407 D0DCFFFF
+ 2408 .LBE524:
+ 2409 .LBE523:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 2410 .loc 2 1688 0
+ 2411 16d3 660F7F85 movdqa %xmm0, -10128(%rbp)
+ 2411 70D8FFFF
+ 2412 .LBB525:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 2413 .loc 2 1689 0
+ 2414 16db 660F6F85 movdqa -10128(%rbp), %xmm0
+ 2414 70D8FFFF
+ 2415 16e3 F30F7F85 movdqu %xmm0, -9232(%rbp)
+ 2415 F0DBFFFF
+ 2416 16eb E8000000 call KDbgWriterGet at PLT
+ 2416 00
+ 2417 16f0 4885C0 testq %rax, %rax
+ 2418 16f3 7479 je .L47
+ 2419 16f5 BF010000 movl $1, %edi
+ 2419 00
+ 2420 16fa E8000000 call KDbgCondToFlag at PLT
+ 2420 00
+ 2421 16ff 4889C6 movq %rax, %rsi
+ 2422 1702 BF100000 movl $16, %edi
+ 2422 00
+ 2423 1707 E8000000 call KDbgTestModConds at PLT
+ 2423 00
+ 2424 170c 84C0 testb %al, %al
+ 2425 170e 745E je .L47
+ 2426 1710 8B85FCDB movl -9220(%rbp), %eax
+ 2426 FFFF
+ 2427 1716 89C7 movl %eax, %edi
+ 2428 1718 E8E3E8FF call bswap_32
+ 2428 FF
+ 2429 171d 4189C5 movl %eax, %r13d
+ 2430 1720 8B85F8DB movl -9224(%rbp), %eax
+ 2430 FFFF
+ 2431 1726 89C7 movl %eax, %edi
+ 2432 1728 E8D3E8FF call bswap_32
+ 2432 FF
+ 2433 172d 4189C4 movl %eax, %r12d
+ 2434 1730 8B85F4DB movl -9228(%rbp), %eax
+ 2434 FFFF
+ 2435 1736 89C7 movl %eax, %edi
+ 2436 1738 E8C3E8FF call bswap_32
+ 2436 FF
+ 2437 173d 89C3 movl %eax, %ebx
+ 2438 173f 8B85F0DB movl -9232(%rbp), %eax
+ 2438 FFFF
+ 2439 1745 89C7 movl %eax, %edi
+ 2440 1747 E8B4E8FF call bswap_32
+ 2440 FF
+
GAS LISTING /tmp/ccMa7HLZ.s page 107
+
+
+ 2441 174c 4589E9 movl %r13d, %r9d
+ 2442 174f 4589E0 movl %r12d, %r8d
+ 2443 1752 89D9 movl %ebx, %ecx
+ 2444 1754 89C2 movl %eax, %edx
+ 2445 1756 488D3500 leaq .LC4(%rip), %rsi
+ 2445 000000
+ 2446 175d 488D3D00 leaq .LC1(%rip), %rdi
+ 2446 000000
+ 2447 1764 B8000000 movl $0, %eax
+ 2447 00
+ 2448 1769 E8000000 call KDbgMsg at PLT
+ 2448 00
+ 2449 .L47:
+ 2450 .LBE525:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 2451 .loc 2 1690 0
+ 2452 176e 660F6F85 movdqa -10128(%rbp), %xmm0
+ 2452 70D8FFFF
+ 2453 .LBE491:
+ 2454 .LBE490:
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x02,2);
+ 2455 .loc 2 1745 0
+ 2456 1776 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 2456 20E6FFFF
+ 2457 177e F30F6F85 movdqu -6640(%rbp), %xmm0
+ 2457 10E6FFFF
+ 2458 1786 F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 2458 10EBFFFF
+ 2459 .LBB526:
+ 2460 .LBB527:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 2461 .loc 2 1565 0
+ 2462 178e F30F6F85 movdqu -5360(%rbp), %xmm0
+ 2462 10EBFFFF
+ 2463 1796 660F7F85 movdqa %xmm0, -10080(%rbp)
+ 2463 A0D8FFFF
+ 2464 179e 660F6F85 movdqa -10080(%rbp), %xmm0
+ 2464 A0D8FFFF
+ 2465 17a6 F30F7F85 movdqu %xmm0, -5344(%rbp)
+ 2465 20EBFFFF
+ 2466 .LBB528:
+ 2467 .LBB529:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 2468 .loc 2 1282 0
+ 2469 17ae F30F6F85 movdqu -5344(%rbp), %xmm0
+ 2469 20EBFFFF
+ 2470 17b6 F30F7F85 movdqu %xmm0, -8992(%rbp)
+ 2470 E0DCFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 2471 .loc 2 1283 0
+ 2472 17be 8B85E8DC movl -8984(%rbp), %eax
+ 2472 FFFF
+ 2473 17c4 8985ECDC movl %eax, -8980(%rbp)
+ 2473 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 2474 .loc 2 1284 0
+ 2475 17ca 8B85E4DC movl -8988(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 108
+
+
+ 2475 FFFF
+ 2476 17d0 8985E8DC movl %eax, -8984(%rbp)
+ 2476 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 2477 .loc 2 1285 0
+ 2478 17d6 8B85E0DC movl -8992(%rbp), %eax
+ 2478 FFFF
+ 2479 17dc 8985E4DC movl %eax, -8988(%rbp)
+ 2479 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 2480 .loc 2 1286 0
+ 2481 17e2 C785E0DC movl $0, -8992(%rbp)
+ 2481 FFFF0000
+ 2481 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 2482 .loc 2 1287 0
+ 2483 17ec F30F6F85 movdqu -8992(%rbp), %xmm0
+ 2483 E0DCFFFF
+ 2484 .LBE529:
+ 2485 .LBE528:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2486 .loc 2 1567 0
+ 2487 17f4 660F7F85 movdqa %xmm0, -10080(%rbp)
+ 2487 A0D8FFFF
+ 2488 17fc 660F6F85 movdqa -10080(%rbp), %xmm0
+ 2488 A0D8FFFF
+ 2489 1804 660FEF85 pxor -5360(%rbp), %xmm0
+ 2489 10EBFFFF
+ 2490 180c F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 2490 10EBFFFF
+ 2491 1814 660F6F85 movdqa -10080(%rbp), %xmm0
+ 2491 A0D8FFFF
+ 2492 181c F30F7F85 movdqu %xmm0, -5328(%rbp)
+ 2492 30EBFFFF
+ 2493 .LBB530:
+ 2494 .LBB531:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 2495 .loc 2 1282 0
+ 2496 1824 F30F6F85 movdqu -5328(%rbp), %xmm0
+ 2496 30EBFFFF
+ 2497 182c F30F7F85 movdqu %xmm0, -8976(%rbp)
+ 2497 F0DCFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 2498 .loc 2 1283 0
+ 2499 1834 8B85F8DC movl -8968(%rbp), %eax
+ 2499 FFFF
+ 2500 183a 8985FCDC movl %eax, -8964(%rbp)
+ 2500 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 2501 .loc 2 1284 0
+ 2502 1840 8B85F4DC movl -8972(%rbp), %eax
+ 2502 FFFF
+ 2503 1846 8985F8DC movl %eax, -8968(%rbp)
+ 2503 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 2504 .loc 2 1285 0
+ 2505 184c 8B85F0DC movl -8976(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 109
+
+
+ 2505 FFFF
+ 2506 1852 8985F4DC movl %eax, -8972(%rbp)
+ 2506 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 2507 .loc 2 1286 0
+ 2508 1858 C785F0DC movl $0, -8976(%rbp)
+ 2508 FFFF0000
+ 2508 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 2509 .loc 2 1287 0
+ 2510 1862 F30F6F85 movdqu -8976(%rbp), %xmm0
+ 2510 F0DCFFFF
+ 2511 .LBE531:
+ 2512 .LBE530:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2513 .loc 2 1568 0
+ 2514 186a 660F7F85 movdqa %xmm0, -10080(%rbp)
+ 2514 A0D8FFFF
+ 2515 1872 660F6F85 movdqa -10080(%rbp), %xmm0
+ 2515 A0D8FFFF
+ 2516 187a 660FEF85 pxor -5360(%rbp), %xmm0
+ 2516 10EBFFFF
+ 2517 1882 F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 2517 10EBFFFF
+ 2518 188a 660F6F85 movdqa -10080(%rbp), %xmm0
+ 2518 A0D8FFFF
+ 2519 1892 F30F7F85 movdqu %xmm0, -5312(%rbp)
+ 2519 40EBFFFF
+ 2520 .LBB532:
+ 2521 .LBB533:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 2522 .loc 2 1282 0
+ 2523 189a F30F6F85 movdqu -5312(%rbp), %xmm0
+ 2523 40EBFFFF
+ 2524 18a2 F30F7F85 movdqu %xmm0, -8960(%rbp)
+ 2524 00DDFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 2525 .loc 2 1283 0
+ 2526 18aa 8B8508DD movl -8952(%rbp), %eax
+ 2526 FFFF
+ 2527 18b0 89850CDD movl %eax, -8948(%rbp)
+ 2527 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 2528 .loc 2 1284 0
+ 2529 18b6 8B8504DD movl -8956(%rbp), %eax
+ 2529 FFFF
+ 2530 18bc 898508DD movl %eax, -8952(%rbp)
+ 2530 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 2531 .loc 2 1285 0
+ 2532 18c2 8B8500DD movl -8960(%rbp), %eax
+ 2532 FFFF
+ 2533 18c8 898504DD movl %eax, -8956(%rbp)
+ 2533 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 2534 .loc 2 1286 0
+ 2535 18ce C78500DD movl $0, -8960(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 110
+
+
+ 2535 FFFF0000
+ 2535 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 2536 .loc 2 1287 0
+ 2537 18d8 F30F6F85 movdqu -8960(%rbp), %xmm0
+ 2537 00DDFFFF
+ 2538 .LBE533:
+ 2539 .LBE532:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2540 .loc 2 1569 0
+ 2541 18e0 660F7F85 movdqa %xmm0, -10080(%rbp)
+ 2541 A0D8FFFF
+ 2542 18e8 660F6F85 movdqa -10080(%rbp), %xmm0
+ 2542 A0D8FFFF
+ 2543 18f0 660FEF85 pxor -5360(%rbp), %xmm0
+ 2543 10EBFFFF
+ 2544 18f8 F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 2544 10EBFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2545 .loc 2 1571 0
+ 2546 1900 F30F6F85 movdqu -5360(%rbp), %xmm0
+ 2546 10EBFFFF
+ 2547 .LBE527:
+ 2548 .LBE526:
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x02,2);
+ 2549 .loc 2 1745 0
+ 2550 1908 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 2550 10E6FFFF
+ 2551 1910 F30F6F85 movdqu -6624(%rbp), %xmm0
+ 2551 20E6FFFF
+ 2552 1918 F30F6F8D movdqu -6640(%rbp), %xmm1
+ 2552 10E6FFFF
+ 2553 1920 660FEFC1 pxor %xmm1, %xmm0
+ 2554 1924 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 2554 10E6FFFF
+ 2555 192c 488B85B8 movq -9544(%rbp), %rax
+ 2555 DAFFFF
+ 2556 1933 4883C020 addq $32, %rax
+ 2557 1937 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 2557 10E6FFFF
+ 2558 193f F30F7F00 movdqu %xmm0, (%rax)
+ 2559 1943 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 2559 10E6FFFF
+ 2560 194b F30F7F85 movdqu %xmm0, -5280(%rbp)
+ 2560 60EBFFFF
+ 2561 .LBB534:
+ 2562 .LBB535:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2563 .loc 2 1681 0
+ 2564 1953 B8040000 movl $4, %eax
+ 2564 00
+ 2565 1958 660F6F05 movdqa vec_00(%rip), %xmm0
+ 2565 00000000
+ 2566 1960 F30F7F85 movdqu %xmm0, -5248(%rbp)
+ 2566 80EBFFFF
+ 2567 1968 89857CEB movl %eax, -5252(%rbp)
+ 2567 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 111
+
+
+ 2568 .LBB536:
+ 2569 .LBB537:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 2570 .loc 2 522 0
+ 2571 196e F30F6F85 movdqu -5248(%rbp), %xmm0
+ 2571 80EBFFFF
+ 2572 1976 F30F7F85 movdqu %xmm0, -8880(%rbp)
+ 2572 50DDFFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 2573 .loc 2 523 0
+ 2574 197e B8030000 movl $3, %eax
+ 2574 00
+ 2575 1983 4898 cltq
+ 2576 1985 8B957CEB movl -5252(%rbp), %edx
+ 2576 FFFF
+ 2577 198b 89948550 movl %edx, -8880(%rbp,%rax,4)
+ 2577 DDFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 2578 .loc 2 524 0
+ 2579 1992 F30F6F85 movdqu -8880(%rbp), %xmm0
+ 2579 50DDFFFF
+ 2580 199a F30F7F85 movdqu %xmm0, -5248(%rbp)
+ 2580 80EBFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2581 .loc 2 526 0
+ 2582 19a2 F30F6F85 movdqu -5248(%rbp), %xmm0
+ 2582 80EBFFFF
+ 2583 .LBE537:
+ 2584 .LBE536:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2585 .loc 2 1681 0
+ 2586 19aa 660F7F85 movdqa %xmm0, -10048(%rbp)
+ 2586 C0D8FFFF
+ 2587 19b2 F30F6F85 movdqu -5280(%rbp), %xmm0
+ 2587 60EBFFFF
+ 2588 19ba F30F7F85 movdqu %xmm0, -5232(%rbp)
+ 2588 90EBFFFF
+ 2589 19c2 F30F6F85 movdqu -5232(%rbp), %xmm0
+ 2589 90EBFFFF
+ 2590 19ca F30F7F85 movdqu %xmm0, -5200(%rbp)
+ 2590 B0EBFFFF
+ 2591 19d2 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 2591 000000
+ 2592 19d9 488985A8 movq %rax, -5208(%rbp)
+ 2592 EBFFFF
+ 2593 .LBB538:
+ 2594 .LBB539:
+ 2595 .LBB540:
+ 2596 .LBB541:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 2597 .loc 2 851 0
+ 2598 19e0 660F6F05 movdqa vec_00(%rip), %xmm0
+ 2598 00000000
+ 2599 19e8 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 2599 D0EBFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2600 .loc 2 854 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 112
+
+
+ 2601 19f0 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 2601 00000000
+ 2602 19f8 F30F6F8D movdqu -5200(%rbp), %xmm1
+ 2602 B0EBFFFF
+ 2603 1a00 F30F7F8D movdqu %xmm1, -5088(%rbp)
+ 2603 20ECFFFF
+ 2604 1a08 F30F7F85 movdqu %xmm0, -5104(%rbp)
+ 2604 10ECFFFF
+ 2605 .LBB542:
+ 2606 .LBB543:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 2607 .loc 2 206 0
+ 2608 1a10 F30F6F85 movdqu -5104(%rbp), %xmm0
+ 2608 10ECFFFF
+ 2609 1a18 F30F6F8D movdqu -5088(%rbp), %xmm1
+ 2609 20ECFFFF
+ 2610 1a20 660FDBC1 pand %xmm1, %xmm0
+ 2611 .LBE543:
+ 2612 .LBE542:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2613 .loc 2 854 0
+ 2614 1a24 F30F7F85 movdqu %xmm0, -5120(%rbp)
+ 2614 00ECFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 2615 .loc 2 862 0
+ 2616 1a2c 660F6F05 movdqa vec_10(%rip), %xmm0
+ 2616 00000000
+ 2617 1a34 F30F6F8D movdqu -5200(%rbp), %xmm1
+ 2617 B0EBFFFF
+ 2618 1a3c F30F7F8D movdqu %xmm1, -5056(%rbp)
+ 2618 40ECFFFF
+ 2619 1a44 F30F7F85 movdqu %xmm0, -5072(%rbp)
+ 2619 30ECFFFF
+ 2620 .LBB544:
+ 2621 .loc 2 2642 0
+ 2622 1a4c 0FB68540 movzbl -5056(%rbp), %eax
+ 2622 ECFFFF
+ 2623 1a53 0FB69530 movzbl -5072(%rbp), %edx
+ 2623 ECFFFF
+ 2624 1a5a 0FB6C0 movzbl %al, %eax
+ 2625 1a5d 6689858E movw %ax, -10354(%rbp)
+ 2625 D7FFFF
+ 2626 1a64 0FB7858E movzwl -10354(%rbp), %eax
+ 2626 D7FFFF
+ 2627 1a6b F6F2 divb %dl
+ 2628 1a6d 4189C7 movl %eax, %r15d
+ 2629 1a70 0FB68541 movzbl -5055(%rbp), %eax
+ 2629 ECFFFF
+ 2630 1a77 0FB69531 movzbl -5071(%rbp), %edx
+ 2630 ECFFFF
+ 2631 1a7e 0FB6C0 movzbl %al, %eax
+ 2632 1a81 6689858E movw %ax, -10354(%rbp)
+ 2632 D7FFFF
+ 2633 1a88 0FB7858E movzwl -10354(%rbp), %eax
+ 2633 D7FFFF
+ 2634 1a8f F6F2 divb %dl
+ 2635 1a91 8885DFD8 movb %al, -10017(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 113
+
+
+ 2635 FFFF
+ 2636 1a97 0FB68542 movzbl -5054(%rbp), %eax
+ 2636 ECFFFF
+ 2637 1a9e 0FB69532 movzbl -5070(%rbp), %edx
+ 2637 ECFFFF
+ 2638 1aa5 0FB6C0 movzbl %al, %eax
+ 2639 1aa8 6689858E movw %ax, -10354(%rbp)
+ 2639 D7FFFF
+ 2640 1aaf 0FB7858E movzwl -10354(%rbp), %eax
+ 2640 D7FFFF
+ 2641 1ab6 F6F2 divb %dl
+ 2642 1ab8 8885DED8 movb %al, -10018(%rbp)
+ 2642 FFFF
+ 2643 1abe 0FB68543 movzbl -5053(%rbp), %eax
+ 2643 ECFFFF
+ 2644 1ac5 0FB69533 movzbl -5069(%rbp), %edx
+ 2644 ECFFFF
+ 2645 1acc 0FB6C0 movzbl %al, %eax
+ 2646 1acf 6689858E movw %ax, -10354(%rbp)
+ 2646 D7FFFF
+ 2647 1ad6 0FB7858E movzwl -10354(%rbp), %eax
+ 2647 D7FFFF
+ 2648 1add F6F2 divb %dl
+ 2649 1adf 8885DDD8 movb %al, -10019(%rbp)
+ 2649 FFFF
+ 2650 1ae5 0FB68544 movzbl -5052(%rbp), %eax
+ 2650 ECFFFF
+ 2651 1aec 0FB69534 movzbl -5068(%rbp), %edx
+ 2651 ECFFFF
+ 2652 1af3 0FB6C0 movzbl %al, %eax
+ 2653 1af6 6689858E movw %ax, -10354(%rbp)
+ 2653 D7FFFF
+ 2654 1afd 0FB7858E movzwl -10354(%rbp), %eax
+ 2654 D7FFFF
+ 2655 1b04 F6F2 divb %dl
+ 2656 1b06 8885DCD8 movb %al, -10020(%rbp)
+ 2656 FFFF
+ 2657 1b0c 0FB68545 movzbl -5051(%rbp), %eax
+ 2657 ECFFFF
+ 2658 1b13 0FB69535 movzbl -5067(%rbp), %edx
+ 2658 ECFFFF
+ 2659 1b1a 0FB6C0 movzbl %al, %eax
+ 2660 1b1d 6689858E movw %ax, -10354(%rbp)
+ 2660 D7FFFF
+ 2661 1b24 0FB7858E movzwl -10354(%rbp), %eax
+ 2661 D7FFFF
+ 2662 1b2b F6F2 divb %dl
+ 2663 1b2d 4189C1 movl %eax, %r9d
+ 2664 1b30 0FB68546 movzbl -5050(%rbp), %eax
+ 2664 ECFFFF
+ 2665 1b37 0FB69536 movzbl -5066(%rbp), %edx
+ 2665 ECFFFF
+ 2666 1b3e 0FB6C0 movzbl %al, %eax
+ 2667 1b41 6689858E movw %ax, -10354(%rbp)
+ 2667 D7FFFF
+ 2668 1b48 0FB7858E movzwl -10354(%rbp), %eax
+ 2668 D7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 114
+
+
+ 2669 1b4f F6F2 divb %dl
+ 2670 1b51 89C7 movl %eax, %edi
+ 2671 1b53 0FB68547 movzbl -5049(%rbp), %eax
+ 2671 ECFFFF
+ 2672 1b5a 0FB69537 movzbl -5065(%rbp), %edx
+ 2672 ECFFFF
+ 2673 1b61 0FB6C0 movzbl %al, %eax
+ 2674 1b64 6689858E movw %ax, -10354(%rbp)
+ 2674 D7FFFF
+ 2675 1b6b 0FB7858E movzwl -10354(%rbp), %eax
+ 2675 D7FFFF
+ 2676 1b72 F6F2 divb %dl
+ 2677 1b74 89C3 movl %eax, %ebx
+ 2678 1b76 0FB68548 movzbl -5048(%rbp), %eax
+ 2678 ECFFFF
+ 2679 1b7d 0FB69538 movzbl -5064(%rbp), %edx
+ 2679 ECFFFF
+ 2680 1b84 0FB6C0 movzbl %al, %eax
+ 2681 1b87 6689858E movw %ax, -10354(%rbp)
+ 2681 D7FFFF
+ 2682 1b8e 0FB7858E movzwl -10354(%rbp), %eax
+ 2682 D7FFFF
+ 2683 1b95 F6F2 divb %dl
+ 2684 1b97 4189C2 movl %eax, %r10d
+ 2685 1b9a 0FB68549 movzbl -5047(%rbp), %eax
+ 2685 ECFFFF
+ 2686 1ba1 0FB69539 movzbl -5063(%rbp), %edx
+ 2686 ECFFFF
+ 2687 1ba8 0FB6C0 movzbl %al, %eax
+ 2688 1bab 6689858E movw %ax, -10354(%rbp)
+ 2688 D7FFFF
+ 2689 1bb2 0FB7858E movzwl -10354(%rbp), %eax
+ 2689 D7FFFF
+ 2690 1bb9 F6F2 divb %dl
+ 2691 1bbb 4189C3 movl %eax, %r11d
+ 2692 1bbe 0FB6854A movzbl -5046(%rbp), %eax
+ 2692 ECFFFF
+ 2693 1bc5 0FB6953A movzbl -5062(%rbp), %edx
+ 2693 ECFFFF
+ 2694 1bcc 0FB6C0 movzbl %al, %eax
+ 2695 1bcf 6689858E movw %ax, -10354(%rbp)
+ 2695 D7FFFF
+ 2696 1bd6 0FB7858E movzwl -10354(%rbp), %eax
+ 2696 D7FFFF
+ 2697 1bdd F6F2 divb %dl
+ 2698 1bdf 4189C4 movl %eax, %r12d
+ 2699 1be2 0FB6854B movzbl -5045(%rbp), %eax
+ 2699 ECFFFF
+ 2700 1be9 0FB6953B movzbl -5061(%rbp), %edx
+ 2700 ECFFFF
+ 2701 1bf0 0FB6C0 movzbl %al, %eax
+ 2702 1bf3 6689858E movw %ax, -10354(%rbp)
+ 2702 D7FFFF
+ 2703 1bfa 0FB7858E movzwl -10354(%rbp), %eax
+ 2703 D7FFFF
+ 2704 1c01 F6F2 divb %dl
+ 2705 1c03 4189C5 movl %eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s page 115
+
+
+ 2706 1c06 0FB6854C movzbl -5044(%rbp), %eax
+ 2706 ECFFFF
+ 2707 1c0d 0FB6953C movzbl -5060(%rbp), %edx
+ 2707 ECFFFF
+ 2708 1c14 0FB6C0 movzbl %al, %eax
+ 2709 1c17 6689858E movw %ax, -10354(%rbp)
+ 2709 D7FFFF
+ 2710 1c1e 0FB7858E movzwl -10354(%rbp), %eax
+ 2710 D7FFFF
+ 2711 1c25 F6F2 divb %dl
+ 2712 1c27 4189C6 movl %eax, %r14d
+ 2713 1c2a 0FB6854D movzbl -5043(%rbp), %eax
+ 2713 ECFFFF
+ 2714 1c31 0FB6953D movzbl -5059(%rbp), %edx
+ 2714 ECFFFF
+ 2715 1c38 0FB6C0 movzbl %al, %eax
+ 2716 1c3b 6689858E movw %ax, -10354(%rbp)
+ 2716 D7FFFF
+ 2717 1c42 0FB7858E movzwl -10354(%rbp), %eax
+ 2717 D7FFFF
+ 2718 1c49 F6F2 divb %dl
+ 2719 1c4b 4189C0 movl %eax, %r8d
+ 2720 1c4e 0FB6854E movzbl -5042(%rbp), %eax
+ 2720 ECFFFF
+ 2721 1c55 0FB6953E movzbl -5058(%rbp), %edx
+ 2721 ECFFFF
+ 2722 1c5c 0FB6C0 movzbl %al, %eax
+ 2723 1c5f 6689858E movw %ax, -10354(%rbp)
+ 2723 D7FFFF
+ 2724 1c66 0FB7858E movzwl -10354(%rbp), %eax
+ 2724 D7FFFF
+ 2725 1c6d F6F2 divb %dl
+ 2726 1c6f 89C6 movl %eax, %esi
+ 2727 1c71 0FB6854F movzbl -5041(%rbp), %eax
+ 2727 ECFFFF
+ 2728 1c78 0FB6953F movzbl -5057(%rbp), %edx
+ 2728 ECFFFF
+ 2729 1c7f 0FB6C0 movzbl %al, %eax
+ 2730 1c82 6689858E movw %ax, -10354(%rbp)
+ 2730 D7FFFF
+ 2731 1c89 0FB7858E movzwl -10354(%rbp), %eax
+ 2731 D7FFFF
+ 2732 1c90 F6F2 divb %dl
+ 2733 1c92 89C1 movl %eax, %ecx
+ 2734 .LBB545:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 2735 .loc 2 346 0
+ 2736 1c94 0FB6D3 movzbl %bl, %edx
+ 2737 1c97 400FB6C7 movzbl %dil, %eax
+ 2738 1c9b 48C1E208 salq $8, %rdx
+ 2739 1c9f 4809C2 orq %rax, %rdx
+ 2740 1ca2 410FB6C1 movzbl %r9b, %eax
+ 2741 1ca6 48C1E208 salq $8, %rdx
+ 2742 1caa 4809C2 orq %rax, %rdx
+ 2743 1cad 0FB685DC movzbl -10020(%rbp), %eax
+ 2743 D8FFFF
+ 2744 1cb4 48C1E208 salq $8, %rdx
+
GAS LISTING /tmp/ccMa7HLZ.s page 116
+
+
+ 2745 1cb8 4809C2 orq %rax, %rdx
+ 2746 1cbb 0FB685DD movzbl -10019(%rbp), %eax
+ 2746 D8FFFF
+ 2747 1cc2 48C1E208 salq $8, %rdx
+ 2748 1cc6 4809C2 orq %rax, %rdx
+ 2749 1cc9 0FB685DE movzbl -10018(%rbp), %eax
+ 2749 D8FFFF
+ 2750 1cd0 48C1E208 salq $8, %rdx
+ 2751 1cd4 4809C2 orq %rax, %rdx
+ 2752 1cd7 0FB685DF movzbl -10017(%rbp), %eax
+ 2752 D8FFFF
+ 2753 1cde 48C1E208 salq $8, %rdx
+ 2754 1ce2 4809C2 orq %rax, %rdx
+ 2755 1ce5 410FB6C7 movzbl %r15b, %eax
+ 2756 1ce9 48C1E208 salq $8, %rdx
+ 2757 1ced 4809C2 orq %rax, %rdx
+ 2758 1cf0 0FB6C1 movzbl %cl, %eax
+ 2759 1cf3 400FB6CE movzbl %sil, %ecx
+ 2760 1cf7 48C1E008 salq $8, %rax
+ 2761 1cfb 4809C8 orq %rcx, %rax
+ 2762 1cfe 410FB6C8 movzbl %r8b, %ecx
+ 2763 1d02 48C1E008 salq $8, %rax
+ 2764 1d06 4809C8 orq %rcx, %rax
+ 2765 1d09 410FB6CE movzbl %r14b, %ecx
+ 2766 1d0d 48C1E008 salq $8, %rax
+ 2767 1d11 4809C8 orq %rcx, %rax
+ 2768 1d14 410FB6CD movzbl %r13b, %ecx
+ 2769 1d18 48C1E008 salq $8, %rax
+ 2770 1d1c 4809C8 orq %rcx, %rax
+ 2771 1d1f 410FB6CC movzbl %r12b, %ecx
+ 2772 1d23 48C1E008 salq $8, %rax
+ 2773 1d27 4809C8 orq %rcx, %rax
+ 2774 1d2a 410FB6CB movzbl %r11b, %ecx
+ 2775 1d2e 48C1E008 salq $8, %rax
+ 2776 1d32 4809C8 orq %rcx, %rax
+ 2777 1d35 410FB6CA movzbl %r10b, %ecx
+ 2778 1d39 48C1E008 salq $8, %rax
+ 2779 1d3d 4809C8 orq %rcx, %rax
+ 2780 1d40 48899500 movq %rdx, -10240(%rbp)
+ 2780 D8FFFF
+ 2781 1d47 48898508 movq %rax, -10232(%rbp)
+ 2781 D8FFFF
+ 2782 1d4e 660F6F85 movdqa -10240(%rbp), %xmm0
+ 2782 00D8FFFF
+ 2783 .LBE545:
+ 2784 .LBE544:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 2785 .loc 2 862 0
+ 2786 1d56 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 2786 F0EBFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 2787 .loc 2 866 0
+ 2788 1d5e C785CCEB movl $0, -5172(%rbp)
+ 2788 FFFF0000
+ 2788 0000
+ 2789 1d68 E9860200 jmp .L48
+ 2789 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 117
+
+
+ 2790 .L57:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2791 .loc 2 868 0
+ 2792 1d6d 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 2792 00000000
+ 2793 1d75 F30F7F85 movdqu %xmm0, -5024(%rbp)
+ 2793 60ECFFFF
+ 2794 1d7d F30F6F85 movdqu -5136(%rbp), %xmm0
+ 2794 F0EBFFFF
+ 2795 1d85 F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 2795 50ECFFFF
+ 2796 .LBB546:
+ 2797 .LBB547:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 2798 .loc 2 380 0
+ 2799 1d8d F30F6F85 movdqu -5024(%rbp), %xmm0
+ 2799 60ECFFFF
+ 2800 1d95 F30F7F85 movdqu %xmm0, -8848(%rbp)
+ 2800 70DDFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 2801 .loc 2 381 0
+ 2802 1d9d F30F6F85 movdqu -5040(%rbp), %xmm0
+ 2802 50ECFFFF
+ 2803 1da5 F30F7F85 movdqu %xmm0, -8864(%rbp)
+ 2803 60DDFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2804 .loc 2 383 0
+ 2805 1dad C7857CEC movl $0, -4996(%rbp)
+ 2805 FFFF0000
+ 2805 0000
+ 2806 1db7 EB5C jmp .L49
+ 2807 .L52:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 2808 .loc 2 385 0
+ 2809 1db9 8B857CEC movl -4996(%rbp), %eax
+ 2809 FFFF
+ 2810 1dbf 89C0 mov %eax, %eax
+ 2811 1dc1 0FB68405 movzbl -8864(%rbp,%rax), %eax
+ 2811 60DDFFFF
+ 2812 1dc9 84C0 testb %al, %al
+ 2813 1dcb 7912 jns .L50
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 2814 .loc 2 386 0
+ 2815 1dcd 8B857CEC movl -4996(%rbp), %eax
+ 2815 FFFF
+ 2816 1dd3 89C0 mov %eax, %eax
+ 2817 1dd5 C6840580 movb $0, -8832(%rbp,%rax)
+ 2817 DDFFFF00
+ 2818 1ddd EB2F jmp .L51
+ 2819 .L50:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 2820 .loc 2 388 0
+ 2821 1ddf 8B8D7CEC movl -4996(%rbp), %ecx
+ 2821 FFFF
+ 2822 1de5 8B857CEC movl -4996(%rbp), %eax
+ 2822 FFFF
+ 2823 1deb 89C0 mov %eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 118
+
+
+ 2824 1ded 0FB68405 movzbl -8864(%rbp,%rax), %eax
+ 2824 60DDFFFF
+ 2825 1df5 0FB6C0 movzbl %al, %eax
+ 2826 1df8 83E00F andl $15, %eax
+ 2827 1dfb 4898 cltq
+ 2828 1dfd 0FB69405 movzbl -8848(%rbp,%rax), %edx
+ 2828 70DDFFFF
+ 2829 1e05 89C8 mov %ecx, %eax
+ 2830 1e07 88940580 movb %dl, -8832(%rbp,%rax)
+ 2830 DDFFFF
+ 2831 .L51:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2832 .loc 2 383 0
+ 2833 1e0e 83857CEC addl $1, -4996(%rbp)
+ 2833 FFFF01
+ 2834 .L49:
+ 2835 1e15 83BD7CEC cmpl $15, -4996(%rbp)
+ 2835 FFFF0F
+ 2836 1e1c 769B jbe .L52
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 2837 .loc 2 391 0
+ 2838 1e1e F30F6F85 movdqu -8832(%rbp), %xmm0
+ 2838 80DDFFFF
+ 2839 .LBE547:
+ 2840 .LBE546:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2841 .loc 2 868 0
+ 2842 1e26 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 2842 E0EBFFFF
+ 2843 1e2e F30F6F85 movdqu -5120(%rbp), %xmm0
+ 2843 00ECFFFF
+ 2844 1e36 F30F7F85 movdqu %xmm0, -4976(%rbp)
+ 2844 90ECFFFF
+ 2845 1e3e F30F6F85 movdqu -5152(%rbp), %xmm0
+ 2845 E0EBFFFF
+ 2846 1e46 F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 2846 80ECFFFF
+ 2847 .LBB548:
+ 2848 .LBB549:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 2849 .loc 2 234 0
+ 2850 1e4e F30F6F85 movdqu -4992(%rbp), %xmm0
+ 2850 80ECFFFF
+ 2851 1e56 F30F6F8D movdqu -4976(%rbp), %xmm1
+ 2851 90ECFFFF
+ 2852 1e5e 660FEBC1 por %xmm1, %xmm0
+ 2853 .LBE549:
+ 2854 .LBE548:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 2855 .loc 2 870 0
+ 2856 1e62 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 2856 E0EBFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2857 .loc 2 872 0
+ 2858 1e6a 8B85CCEB mov -5172(%rbp), %eax
+ 2858 FFFF
+ 2859 1e70 48C1E004 salq $4, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 119
+
+
+ 2860 1e74 480385A8 addq -5208(%rbp), %rax
+ 2860 EBFFFF
+ 2861 1e7b 660F6F00 movdqa (%rax), %xmm0
+ 2862 1e7f F30F7F85 movdqu %xmm0, -4944(%rbp)
+ 2862 B0ECFFFF
+ 2863 1e87 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 2863 E0EBFFFF
+ 2864 1e8f F30F7F85 movdqu %xmm0, -4960(%rbp)
+ 2864 A0ECFFFF
+ 2865 .LBB550:
+ 2866 .LBB551:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 2867 .loc 2 380 0
+ 2868 1e97 F30F6F85 movdqu -4944(%rbp), %xmm0
+ 2868 B0ECFFFF
+ 2869 1e9f F30F7F85 movdqu %xmm0, -8800(%rbp)
+ 2869 A0DDFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 2870 .loc 2 381 0
+ 2871 1ea7 F30F6F85 movdqu -4960(%rbp), %xmm0
+ 2871 A0ECFFFF
+ 2872 1eaf F30F7F85 movdqu %xmm0, -8816(%rbp)
+ 2872 90DDFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2873 .loc 2 383 0
+ 2874 1eb7 C785CCEC movl $0, -4916(%rbp)
+ 2874 FFFF0000
+ 2874 0000
+ 2875 1ec1 EB5C jmp .L53
+ 2876 .L56:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 2877 .loc 2 385 0
+ 2878 1ec3 8B85CCEC movl -4916(%rbp), %eax
+ 2878 FFFF
+ 2879 1ec9 89C0 mov %eax, %eax
+ 2880 1ecb 0FB68405 movzbl -8816(%rbp,%rax), %eax
+ 2880 90DDFFFF
+ 2881 1ed3 84C0 testb %al, %al
+ 2882 1ed5 7912 jns .L54
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 2883 .loc 2 386 0
+ 2884 1ed7 8B85CCEC movl -4916(%rbp), %eax
+ 2884 FFFF
+ 2885 1edd 89C0 mov %eax, %eax
+ 2886 1edf C68405B0 movb $0, -8784(%rbp,%rax)
+ 2886 DDFFFF00
+ 2887 1ee7 EB2F jmp .L55
+ 2888 .L54:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 2889 .loc 2 388 0
+ 2890 1ee9 8B8DCCEC movl -4916(%rbp), %ecx
+ 2890 FFFF
+ 2891 1eef 8B85CCEC movl -4916(%rbp), %eax
+ 2891 FFFF
+ 2892 1ef5 89C0 mov %eax, %eax
+ 2893 1ef7 0FB68405 movzbl -8816(%rbp,%rax), %eax
+ 2893 90DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 120
+
+
+ 2894 1eff 0FB6C0 movzbl %al, %eax
+ 2895 1f02 83E00F andl $15, %eax
+ 2896 1f05 4898 cltq
+ 2897 1f07 0FB69405 movzbl -8800(%rbp,%rax), %edx
+ 2897 A0DDFFFF
+ 2898 1f0f 89C8 mov %ecx, %eax
+ 2899 1f11 889405B0 movb %dl, -8784(%rbp,%rax)
+ 2899 DDFFFF
+ 2900 .L55:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 2901 .loc 2 383 0
+ 2902 1f18 8385CCEC addl $1, -4916(%rbp)
+ 2902 FFFF01
+ 2903 .L53:
+ 2904 1f1f 83BDCCEC cmpl $15, -4916(%rbp)
+ 2904 FFFF0F
+ 2905 1f26 769B jbe .L56
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 2906 .loc 2 391 0
+ 2907 1f28 F30F6F85 movdqu -8784(%rbp), %xmm0
+ 2907 B0DDFFFF
+ 2908 .LBE551:
+ 2909 .LBE550:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2910 .loc 2 872 0
+ 2911 1f30 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 2911 E0EBFFFF
+ 2912 1f38 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 2912 D0EBFFFF
+ 2913 1f40 F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 2913 E0ECFFFF
+ 2914 1f48 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 2914 E0EBFFFF
+ 2915 1f50 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 2915 D0ECFFFF
+ 2916 .LBB552:
+ 2917 .LBB553:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 2918 .loc 2 234 0
+ 2919 1f58 F30F6F85 movdqu -4912(%rbp), %xmm0
+ 2919 D0ECFFFF
+ 2920 1f60 F30F6F8D movdqu -4896(%rbp), %xmm1
+ 2920 E0ECFFFF
+ 2921 1f68 660FEBC1 por %xmm1, %xmm0
+ 2922 .LBE553:
+ 2923 .LBE552:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 2924 .loc 2 874 0
+ 2925 1f6c F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 2925 D0EBFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2926 .loc 2 876 0
+ 2927 1f74 660F6F05 movdqa vec_01(%rip), %xmm0
+ 2927 00000000
+ 2928 1f7c F30F6F8D movdqu -5136(%rbp), %xmm1
+ 2928 F0EBFFFF
+ 2929 1f84 F30F7F8D movdqu %xmm1, -4864(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 121
+
+
+ 2929 00EDFFFF
+ 2930 1f8c F30F7F85 movdqu %xmm0, -4880(%rbp)
+ 2930 F0ECFFFF
+ 2931 .LBB554:
+ 2932 .LBB555:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 2933 .loc 2 290 0
+ 2934 1f94 F30F6F8D movdqu -4880(%rbp), %xmm1
+ 2934 F0ECFFFF
+ 2935 1f9c F30F6F85 movdqu -4864(%rbp), %xmm0
+ 2935 00EDFFFF
+ 2936 1fa4 660FF8C1 psubb %xmm1, %xmm0
+ 2937 .LBE555:
+ 2938 .LBE554:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2939 .loc 2 876 0
+ 2940 1fa8 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 2940 F0EBFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2941 .loc 2 878 0
+ 2942 1fb0 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 2942 00000000
+ 2943 1fb8 F30F6F8D movdqu -5136(%rbp), %xmm1
+ 2943 F0EBFFFF
+ 2944 1fc0 F30F7F8D movdqu %xmm1, -4832(%rbp)
+ 2944 20EDFFFF
+ 2945 1fc8 F30F7F85 movdqu %xmm0, -4848(%rbp)
+ 2945 10EDFFFF
+ 2946 .LBB556:
+ 2947 .LBB557:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 2948 .loc 2 206 0
+ 2949 1fd0 F30F6F85 movdqu -4848(%rbp), %xmm0
+ 2949 10EDFFFF
+ 2950 1fd8 F30F6F8D movdqu -4832(%rbp), %xmm1
+ 2950 20EDFFFF
+ 2951 1fe0 660FDBC1 pand %xmm1, %xmm0
+ 2952 .LBE557:
+ 2953 .LBE556:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2954 .loc 2 878 0
+ 2955 1fe4 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 2955 F0EBFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 2956 .loc 2 866 0
+ 2957 1fec 8385CCEB addl $1, -5172(%rbp)
+ 2957 FFFF01
+ 2958 .L48:
+ 2959 1ff3 83BDCCEB cmpl $15, -5172(%rbp)
+ 2959 FFFF0F
+ 2960 1ffa 0F866DFD jbe .L57
+ 2960 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 2961 .loc 2 882 0
+ 2962 2000 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 2962 D0EBFFFF
+ 2963 .LBE541:
+
GAS LISTING /tmp/ccMa7HLZ.s page 122
+
+
+ 2964 .LBE540:
+ 2965 .LBE539:
+ 2966 .LBE538:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 2967 .loc 2 1682 0
+ 2968 2008 660F7F85 movdqa %xmm0, -10064(%rbp)
+ 2968 B0D8FFFF
+ 2969 .LBB558:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 2970 .loc 2 1683 0
+ 2971 2010 660F6F85 movdqa -10064(%rbp), %xmm0
+ 2971 B0D8FFFF
+ 2972 2018 F30F7F85 movdqu %xmm0, -8896(%rbp)
+ 2972 40DDFFFF
+ 2973 2020 E8000000 call KDbgWriterGet at PLT
+ 2973 00
+ 2974 2025 4885C0 testq %rax, %rax
+ 2975 2028 7479 je .L59
+ 2976 202a BF010000 movl $1, %edi
+ 2976 00
+ 2977 202f E8000000 call KDbgCondToFlag at PLT
+ 2977 00
+ 2978 2034 4889C6 movq %rax, %rsi
+ 2979 2037 BF100000 movl $16, %edi
+ 2979 00
+ 2980 203c E8000000 call KDbgTestModConds at PLT
+ 2980 00
+ 2981 2041 84C0 testb %al, %al
+ 2982 2043 745E je .L59
+ 2983 2045 8B854CDD movl -8884(%rbp), %eax
+ 2983 FFFF
+ 2984 204b 89C7 movl %eax, %edi
+ 2985 204d E8AEDFFF call bswap_32
+ 2985 FF
+ 2986 2052 4189C5 movl %eax, %r13d
+ 2987 2055 8B8548DD movl -8888(%rbp), %eax
+ 2987 FFFF
+ 2988 205b 89C7 movl %eax, %edi
+ 2989 205d E89EDFFF call bswap_32
+ 2989 FF
+ 2990 2062 4189C4 movl %eax, %r12d
+ 2991 2065 8B8544DD movl -8892(%rbp), %eax
+ 2991 FFFF
+ 2992 206b 89C7 movl %eax, %edi
+ 2993 206d E88EDFFF call bswap_32
+ 2993 FF
+ 2994 2072 89C3 movl %eax, %ebx
+ 2995 2074 8B8540DD movl -8896(%rbp), %eax
+ 2995 FFFF
+ 2996 207a 89C7 movl %eax, %edi
+ 2997 207c E87FDFFF call bswap_32
+ 2997 FF
+ 2998 2081 4589E9 movl %r13d, %r9d
+ 2999 2084 4589E0 movl %r12d, %r8d
+ 3000 2087 89D9 movl %ebx, %ecx
+ 3001 2089 89C2 movl %eax, %edx
+ 3002 208b 488D3500 leaq .LC0(%rip), %rsi
+
GAS LISTING /tmp/ccMa7HLZ.s page 123
+
+
+ 3002 000000
+ 3003 2092 488D3D00 leaq .LC1(%rip), %rdi
+ 3003 000000
+ 3004 2099 B8000000 movl $0, %eax
+ 3004 00
+ 3005 209e E8000000 call KDbgMsg at PLT
+ 3005 00
+ 3006 .L59:
+ 3007 20a3 660F6F85 movdqa -10064(%rbp), %xmm0
+ 3007 B0D8FFFF
+ 3008 20ab F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 3008 30EDFFFF
+ 3009 .LBE558:
+ 3010 .LBB559:
+ 3011 .LBB560:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3012 .loc 2 667 0
+ 3013 20b3 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 3013 00000000
+ 3014 20bb F30F6F8D movdqu -4816(%rbp), %xmm1
+ 3014 30EDFFFF
+ 3015 20c3 F30F7F8D movdqu %xmm1, -4784(%rbp)
+ 3015 50EDFFFF
+ 3016 20cb F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 3016 40EDFFFF
+ 3017 .LBB561:
+ 3018 .LBB562:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 3019 .loc 2 380 0
+ 3020 20d3 F30F6F85 movdqu -4784(%rbp), %xmm0
+ 3020 50EDFFFF
+ 3021 20db F30F7F85 movdqu %xmm0, -8752(%rbp)
+ 3021 D0DDFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 3022 .loc 2 381 0
+ 3023 20e3 F30F6F85 movdqu -4800(%rbp), %xmm0
+ 3023 40EDFFFF
+ 3024 20eb F30F7F85 movdqu %xmm0, -8768(%rbp)
+ 3024 C0DDFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 3025 .loc 2 383 0
+ 3026 20f3 C7856CED movl $0, -4756(%rbp)
+ 3026 FFFF0000
+ 3026 0000
+ 3027 20fd EB5C jmp .L60
+ 3028 .L63:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 3029 .loc 2 385 0
+ 3030 20ff 8B856CED movl -4756(%rbp), %eax
+ 3030 FFFF
+ 3031 2105 89C0 mov %eax, %eax
+ 3032 2107 0FB68405 movzbl -8768(%rbp,%rax), %eax
+ 3032 C0DDFFFF
+ 3033 210f 84C0 testb %al, %al
+ 3034 2111 7912 jns .L61
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 3035 .loc 2 386 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 124
+
+
+ 3036 2113 8B856CED movl -4756(%rbp), %eax
+ 3036 FFFF
+ 3037 2119 89C0 mov %eax, %eax
+ 3038 211b C68405E0 movb $0, -8736(%rbp,%rax)
+ 3038 DDFFFF00
+ 3039 2123 EB2F jmp .L62
+ 3040 .L61:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 3041 .loc 2 388 0
+ 3042 2125 8B8D6CED movl -4756(%rbp), %ecx
+ 3042 FFFF
+ 3043 212b 8B856CED movl -4756(%rbp), %eax
+ 3043 FFFF
+ 3044 2131 89C0 mov %eax, %eax
+ 3045 2133 0FB68405 movzbl -8768(%rbp,%rax), %eax
+ 3045 C0DDFFFF
+ 3046 213b 0FB6C0 movzbl %al, %eax
+ 3047 213e 83E00F andl $15, %eax
+ 3048 2141 4898 cltq
+ 3049 2143 0FB69405 movzbl -8752(%rbp,%rax), %edx
+ 3049 D0DDFFFF
+ 3050 214b 89C8 mov %ecx, %eax
+ 3051 214d 889405E0 movb %dl, -8736(%rbp,%rax)
+ 3051 DDFFFF
+ 3052 .L62:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 3053 .loc 2 383 0
+ 3054 2154 83856CED addl $1, -4756(%rbp)
+ 3054 FFFF01
+ 3055 .L60:
+ 3056 215b 83BD6CED cmpl $15, -4756(%rbp)
+ 3056 FFFF0F
+ 3057 2162 769B jbe .L63
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 3058 .loc 2 391 0
+ 3059 2164 F30F6F85 movdqu -8736(%rbp), %xmm0
+ 3059 E0DDFFFF
+ 3060 .LBE562:
+ 3061 .LBE561:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3062 .loc 2 667 0
+ 3063 216c F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 3063 30EDFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3064 .loc 2 668 0
+ 3065 2174 F30F6F85 movdqu -4816(%rbp), %xmm0
+ 3065 30EDFFFF
+ 3066 .LBE560:
+ 3067 .LBE559:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 3068 .loc 2 1684 0
+ 3069 217c 660F7F85 movdqa %xmm0, -10064(%rbp)
+ 3069 B0D8FFFF
+ 3070 .LBB563:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 3071 .loc 2 1685 0
+ 3072 2184 660F6F85 movdqa -10064(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 125
+
+
+ 3072 B0D8FFFF
+ 3073 218c F30F7F85 movdqu %xmm0, -8912(%rbp)
+ 3073 30DDFFFF
+ 3074 2194 E8000000 call KDbgWriterGet at PLT
+ 3074 00
+ 3075 2199 4885C0 testq %rax, %rax
+ 3076 219c 7479 je .L65
+ 3077 219e BF010000 movl $1, %edi
+ 3077 00
+ 3078 21a3 E8000000 call KDbgCondToFlag at PLT
+ 3078 00
+ 3079 21a8 4889C6 movq %rax, %rsi
+ 3080 21ab BF100000 movl $16, %edi
+ 3080 00
+ 3081 21b0 E8000000 call KDbgTestModConds at PLT
+ 3081 00
+ 3082 21b5 84C0 testb %al, %al
+ 3083 21b7 745E je .L65
+ 3084 21b9 8B853CDD movl -8900(%rbp), %eax
+ 3084 FFFF
+ 3085 21bf 89C7 movl %eax, %edi
+ 3086 21c1 E83ADEFF call bswap_32
+ 3086 FF
+ 3087 21c6 4189C5 movl %eax, %r13d
+ 3088 21c9 8B8538DD movl -8904(%rbp), %eax
+ 3088 FFFF
+ 3089 21cf 89C7 movl %eax, %edi
+ 3090 21d1 E82ADEFF call bswap_32
+ 3090 FF
+ 3091 21d6 4189C4 movl %eax, %r12d
+ 3092 21d9 8B8534DD movl -8908(%rbp), %eax
+ 3092 FFFF
+ 3093 21df 89C7 movl %eax, %edi
+ 3094 21e1 E81ADEFF call bswap_32
+ 3094 FF
+ 3095 21e6 89C3 movl %eax, %ebx
+ 3096 21e8 8B8530DD movl -8912(%rbp), %eax
+ 3096 FFFF
+ 3097 21ee 89C7 movl %eax, %edi
+ 3098 21f0 E80BDEFF call bswap_32
+ 3098 FF
+ 3099 21f5 4589E9 movl %r13d, %r9d
+ 3100 21f8 4589E0 movl %r12d, %r8d
+ 3101 21fb 89D9 movl %ebx, %ecx
+ 3102 21fd 89C2 movl %eax, %edx
+ 3103 21ff 488D3500 leaq .LC2(%rip), %rsi
+ 3103 000000
+ 3104 2206 488D3D00 leaq .LC1(%rip), %rdi
+ 3104 000000
+ 3105 220d B8000000 movl $0, %eax
+ 3105 00
+ 3106 2212 E8000000 call KDbgMsg at PLT
+ 3106 00
+ 3107 .L65:
+ 3108 2217 660F6F85 movdqa -10064(%rbp), %xmm0
+ 3108 B0D8FFFF
+ 3109 221f F30F7F85 movdqu %xmm0, -4736(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 126
+
+
+ 3109 80EDFFFF
+ 3110 2227 660F6F85 movdqa -10048(%rbp), %xmm0
+ 3110 C0D8FFFF
+ 3111 222f F30F7F85 movdqu %xmm0, -4752(%rbp)
+ 3111 70EDFFFF
+ 3112 .LBE563:
+ 3113 .LBB564:
+ 3114 .LBB565:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 3115 .loc 2 178 0
+ 3116 2237 F30F6F85 movdqu -4752(%rbp), %xmm0
+ 3116 70EDFFFF
+ 3117 223f F30F6F8D movdqu -4736(%rbp), %xmm1
+ 3117 80EDFFFF
+ 3118 2247 660FEFC1 pxor %xmm1, %xmm0
+ 3119 .LBE565:
+ 3120 .LBE564:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 3121 .loc 2 1686 0
+ 3122 224b 660F7F85 movdqa %xmm0, -10064(%rbp)
+ 3122 B0D8FFFF
+ 3123 .LBB566:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 3124 .loc 2 1687 0
+ 3125 2253 660F6F85 movdqa -10064(%rbp), %xmm0
+ 3125 B0D8FFFF
+ 3126 225b F30F7F85 movdqu %xmm0, -8928(%rbp)
+ 3126 20DDFFFF
+ 3127 2263 E8000000 call KDbgWriterGet at PLT
+ 3127 00
+ 3128 2268 4885C0 testq %rax, %rax
+ 3129 226b 7479 je .L67
+ 3130 226d BF010000 movl $1, %edi
+ 3130 00
+ 3131 2272 E8000000 call KDbgCondToFlag at PLT
+ 3131 00
+ 3132 2277 4889C6 movq %rax, %rsi
+ 3133 227a BF100000 movl $16, %edi
+ 3133 00
+ 3134 227f E8000000 call KDbgTestModConds at PLT
+ 3134 00
+ 3135 2284 84C0 testb %al, %al
+ 3136 2286 745E je .L67
+ 3137 2288 8B852CDD movl -8916(%rbp), %eax
+ 3137 FFFF
+ 3138 228e 89C7 movl %eax, %edi
+ 3139 2290 E86BDDFF call bswap_32
+ 3139 FF
+ 3140 2295 4189C5 movl %eax, %r13d
+ 3141 2298 8B8528DD movl -8920(%rbp), %eax
+ 3141 FFFF
+ 3142 229e 89C7 movl %eax, %edi
+ 3143 22a0 E85BDDFF call bswap_32
+ 3143 FF
+ 3144 22a5 4189C4 movl %eax, %r12d
+ 3145 22a8 8B8524DD movl -8924(%rbp), %eax
+ 3145 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 127
+
+
+ 3146 22ae 89C7 movl %eax, %edi
+ 3147 22b0 E84BDDFF call bswap_32
+ 3147 FF
+ 3148 22b5 89C3 movl %eax, %ebx
+ 3149 22b7 8B8520DD movl -8928(%rbp), %eax
+ 3149 FFFF
+ 3150 22bd 89C7 movl %eax, %edi
+ 3151 22bf E83CDDFF call bswap_32
+ 3151 FF
+ 3152 22c4 4589E9 movl %r13d, %r9d
+ 3153 22c7 4589E0 movl %r12d, %r8d
+ 3154 22ca 89D9 movl %ebx, %ecx
+ 3155 22cc 89C2 movl %eax, %edx
+ 3156 22ce 488D3500 leaq .LC3(%rip), %rsi
+ 3156 000000
+ 3157 22d5 488D3D00 leaq .LC1(%rip), %rdi
+ 3157 000000
+ 3158 22dc B8000000 movl $0, %eax
+ 3158 00
+ 3159 22e1 E8000000 call KDbgMsg at PLT
+ 3159 00
+ 3160 .L67:
+ 3161 22e6 660F6F85 movdqa -10064(%rbp), %xmm0
+ 3161 B0D8FFFF
+ 3162 22ee F30F7F85 movdqu %xmm0, -4720(%rbp)
+ 3162 90EDFFFF
+ 3163 .LBE566:
+ 3164 .LBB567:
+ 3165 .LBB568:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 3166 .loc 2 1357 0
+ 3167 22f6 F30F6F85 movdqu -4720(%rbp), %xmm0
+ 3167 90EDFFFF
+ 3168 22fe F30F7F85 movdqu %xmm0, -8720(%rbp)
+ 3168 F0DDFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 3169 .loc 2 1358 0
+ 3170 2306 8B85FCDD movl -8708(%rbp), %eax
+ 3170 FFFF
+ 3171 230c 8985F8DD movl %eax, -8712(%rbp)
+ 3171 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 3172 .loc 2 1359 0
+ 3173 2312 8B85FCDD movl -8708(%rbp), %eax
+ 3173 FFFF
+ 3174 2318 8985F4DD movl %eax, -8716(%rbp)
+ 3174 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 3175 .loc 2 1360 0
+ 3176 231e 8B85FCDD movl -8708(%rbp), %eax
+ 3176 FFFF
+ 3177 2324 8985F0DD movl %eax, -8720(%rbp)
+ 3177 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 3178 .loc 2 1361 0
+ 3179 232a F30F6F85 movdqu -8720(%rbp), %xmm0
+ 3179 F0DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 128
+
+
+ 3180 .LBE568:
+ 3181 .LBE567:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 3182 .loc 2 1688 0
+ 3183 2332 660F7F85 movdqa %xmm0, -10064(%rbp)
+ 3183 B0D8FFFF
+ 3184 .LBB569:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 3185 .loc 2 1689 0
+ 3186 233a 660F6F85 movdqa -10064(%rbp), %xmm0
+ 3186 B0D8FFFF
+ 3187 2342 F30F7F85 movdqu %xmm0, -8944(%rbp)
+ 3187 10DDFFFF
+ 3188 234a E8000000 call KDbgWriterGet at PLT
+ 3188 00
+ 3189 234f 4885C0 testq %rax, %rax
+ 3190 2352 7479 je .L69
+ 3191 2354 BF010000 movl $1, %edi
+ 3191 00
+ 3192 2359 E8000000 call KDbgCondToFlag at PLT
+ 3192 00
+ 3193 235e 4889C6 movq %rax, %rsi
+ 3194 2361 BF100000 movl $16, %edi
+ 3194 00
+ 3195 2366 E8000000 call KDbgTestModConds at PLT
+ 3195 00
+ 3196 236b 84C0 testb %al, %al
+ 3197 236d 745E je .L69
+ 3198 236f 8B851CDD movl -8932(%rbp), %eax
+ 3198 FFFF
+ 3199 2375 89C7 movl %eax, %edi
+ 3200 2377 E884DCFF call bswap_32
+ 3200 FF
+ 3201 237c 4189C5 movl %eax, %r13d
+ 3202 237f 8B8518DD movl -8936(%rbp), %eax
+ 3202 FFFF
+ 3203 2385 89C7 movl %eax, %edi
+ 3204 2387 E874DCFF call bswap_32
+ 3204 FF
+ 3205 238c 4189C4 movl %eax, %r12d
+ 3206 238f 8B8514DD movl -8940(%rbp), %eax
+ 3206 FFFF
+ 3207 2395 89C7 movl %eax, %edi
+ 3208 2397 E864DCFF call bswap_32
+ 3208 FF
+ 3209 239c 89C3 movl %eax, %ebx
+ 3210 239e 8B8510DD movl -8944(%rbp), %eax
+ 3210 FFFF
+ 3211 23a4 89C7 movl %eax, %edi
+ 3212 23a6 E855DCFF call bswap_32
+ 3212 FF
+ 3213 23ab 4589E9 movl %r13d, %r9d
+ 3214 23ae 4589E0 movl %r12d, %r8d
+ 3215 23b1 89D9 movl %ebx, %ecx
+ 3216 23b3 89C2 movl %eax, %edx
+ 3217 23b5 488D3500 leaq .LC4(%rip), %rsi
+ 3217 000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 129
+
+
+ 3218 23bc 488D3D00 leaq .LC1(%rip), %rdi
+ 3218 000000
+ 3219 23c3 B8000000 movl $0, %eax
+ 3219 00
+ 3220 23c8 E8000000 call KDbgMsg at PLT
+ 3220 00
+ 3221 .L69:
+ 3222 .LBE569:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 3223 .loc 2 1690 0
+ 3224 23cd 660F6F85 movdqa -10064(%rbp), %xmm0
+ 3224 B0D8FFFF
+ 3225 .LBE535:
+ 3226 .LBE534:
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x04,3);
+ 3227 .loc 2 1746 0
+ 3228 23d5 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 3228 20E6FFFF
+ 3229 23dd F30F6F85 movdqu -6640(%rbp), %xmm0
+ 3229 10E6FFFF
+ 3230 23e5 F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 3230 A0EDFFFF
+ 3231 .LBB570:
+ 3232 .LBB571:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 3233 .loc 2 1565 0
+ 3234 23ed F30F6F85 movdqu -4704(%rbp), %xmm0
+ 3234 A0EDFFFF
+ 3235 23f5 660F7F85 movdqa %xmm0, -10016(%rbp)
+ 3235 E0D8FFFF
+ 3236 23fd 660F6F85 movdqa -10016(%rbp), %xmm0
+ 3236 E0D8FFFF
+ 3237 2405 F30F7F85 movdqu %xmm0, -4688(%rbp)
+ 3237 B0EDFFFF
+ 3238 .LBB572:
+ 3239 .LBB573:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 3240 .loc 2 1282 0
+ 3241 240d F30F6F85 movdqu -4688(%rbp), %xmm0
+ 3241 B0EDFFFF
+ 3242 2415 F30F7F85 movdqu %xmm0, -8704(%rbp)
+ 3242 00DEFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 3243 .loc 2 1283 0
+ 3244 241d 8B8508DE movl -8696(%rbp), %eax
+ 3244 FFFF
+ 3245 2423 89850CDE movl %eax, -8692(%rbp)
+ 3245 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 3246 .loc 2 1284 0
+ 3247 2429 8B8504DE movl -8700(%rbp), %eax
+ 3247 FFFF
+ 3248 242f 898508DE movl %eax, -8696(%rbp)
+ 3248 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 3249 .loc 2 1285 0
+ 3250 2435 8B8500DE movl -8704(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 130
+
+
+ 3250 FFFF
+ 3251 243b 898504DE movl %eax, -8700(%rbp)
+ 3251 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 3252 .loc 2 1286 0
+ 3253 2441 C78500DE movl $0, -8704(%rbp)
+ 3253 FFFF0000
+ 3253 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 3254 .loc 2 1287 0
+ 3255 244b F30F6F85 movdqu -8704(%rbp), %xmm0
+ 3255 00DEFFFF
+ 3256 .LBE573:
+ 3257 .LBE572:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3258 .loc 2 1567 0
+ 3259 2453 660F7F85 movdqa %xmm0, -10016(%rbp)
+ 3259 E0D8FFFF
+ 3260 245b 660F6F85 movdqa -10016(%rbp), %xmm0
+ 3260 E0D8FFFF
+ 3261 2463 660FEF85 pxor -4704(%rbp), %xmm0
+ 3261 A0EDFFFF
+ 3262 246b F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 3262 A0EDFFFF
+ 3263 2473 660F6F85 movdqa -10016(%rbp), %xmm0
+ 3263 E0D8FFFF
+ 3264 247b F30F7F85 movdqu %xmm0, -4672(%rbp)
+ 3264 C0EDFFFF
+ 3265 .LBB574:
+ 3266 .LBB575:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 3267 .loc 2 1282 0
+ 3268 2483 F30F6F85 movdqu -4672(%rbp), %xmm0
+ 3268 C0EDFFFF
+ 3269 248b F30F7F85 movdqu %xmm0, -8688(%rbp)
+ 3269 10DEFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 3270 .loc 2 1283 0
+ 3271 2493 8B8518DE movl -8680(%rbp), %eax
+ 3271 FFFF
+ 3272 2499 89851CDE movl %eax, -8676(%rbp)
+ 3272 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 3273 .loc 2 1284 0
+ 3274 249f 8B8514DE movl -8684(%rbp), %eax
+ 3274 FFFF
+ 3275 24a5 898518DE movl %eax, -8680(%rbp)
+ 3275 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 3276 .loc 2 1285 0
+ 3277 24ab 8B8510DE movl -8688(%rbp), %eax
+ 3277 FFFF
+ 3278 24b1 898514DE movl %eax, -8684(%rbp)
+ 3278 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 3279 .loc 2 1286 0
+ 3280 24b7 C78510DE movl $0, -8688(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 131
+
+
+ 3280 FFFF0000
+ 3280 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 3281 .loc 2 1287 0
+ 3282 24c1 F30F6F85 movdqu -8688(%rbp), %xmm0
+ 3282 10DEFFFF
+ 3283 .LBE575:
+ 3284 .LBE574:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3285 .loc 2 1568 0
+ 3286 24c9 660F7F85 movdqa %xmm0, -10016(%rbp)
+ 3286 E0D8FFFF
+ 3287 24d1 660F6F85 movdqa -10016(%rbp), %xmm0
+ 3287 E0D8FFFF
+ 3288 24d9 660FEF85 pxor -4704(%rbp), %xmm0
+ 3288 A0EDFFFF
+ 3289 24e1 F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 3289 A0EDFFFF
+ 3290 24e9 660F6F85 movdqa -10016(%rbp), %xmm0
+ 3290 E0D8FFFF
+ 3291 24f1 F30F7F85 movdqu %xmm0, -4656(%rbp)
+ 3291 D0EDFFFF
+ 3292 .LBB576:
+ 3293 .LBB577:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 3294 .loc 2 1282 0
+ 3295 24f9 F30F6F85 movdqu -4656(%rbp), %xmm0
+ 3295 D0EDFFFF
+ 3296 2501 F30F7F85 movdqu %xmm0, -8672(%rbp)
+ 3296 20DEFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 3297 .loc 2 1283 0
+ 3298 2509 8B8528DE movl -8664(%rbp), %eax
+ 3298 FFFF
+ 3299 250f 89852CDE movl %eax, -8660(%rbp)
+ 3299 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 3300 .loc 2 1284 0
+ 3301 2515 8B8524DE movl -8668(%rbp), %eax
+ 3301 FFFF
+ 3302 251b 898528DE movl %eax, -8664(%rbp)
+ 3302 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 3303 .loc 2 1285 0
+ 3304 2521 8B8520DE movl -8672(%rbp), %eax
+ 3304 FFFF
+ 3305 2527 898524DE movl %eax, -8668(%rbp)
+ 3305 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 3306 .loc 2 1286 0
+ 3307 252d C78520DE movl $0, -8672(%rbp)
+ 3307 FFFF0000
+ 3307 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 3308 .loc 2 1287 0
+ 3309 2537 F30F6F85 movdqu -8672(%rbp), %xmm0
+ 3309 20DEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 132
+
+
+ 3310 .LBE577:
+ 3311 .LBE576:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3312 .loc 2 1569 0
+ 3313 253f 660F7F85 movdqa %xmm0, -10016(%rbp)
+ 3313 E0D8FFFF
+ 3314 2547 660F6F85 movdqa -10016(%rbp), %xmm0
+ 3314 E0D8FFFF
+ 3315 254f 660FEF85 pxor -4704(%rbp), %xmm0
+ 3315 A0EDFFFF
+ 3316 2557 F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 3316 A0EDFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3317 .loc 2 1571 0
+ 3318 255f F30F6F85 movdqu -4704(%rbp), %xmm0
+ 3318 A0EDFFFF
+ 3319 .LBE571:
+ 3320 .LBE570:
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x04,3);
+ 3321 .loc 2 1746 0
+ 3322 2567 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 3322 10E6FFFF
+ 3323 256f F30F6F85 movdqu -6624(%rbp), %xmm0
+ 3323 20E6FFFF
+ 3324 2577 F30F6F8D movdqu -6640(%rbp), %xmm1
+ 3324 10E6FFFF
+ 3325 257f 660FEFC1 pxor %xmm1, %xmm0
+ 3326 2583 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 3326 10E6FFFF
+ 3327 258b 488B85B8 movq -9544(%rbp), %rax
+ 3327 DAFFFF
+ 3328 2592 4883C030 addq $48, %rax
+ 3329 2596 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 3329 10E6FFFF
+ 3330 259e F30F7F00 movdqu %xmm0, (%rax)
+ 3331 25a2 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 3331 10E6FFFF
+ 3332 25aa F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 3332 F0EDFFFF
+ 3333 .LBB578:
+ 3334 .LBB579:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3335 .loc 2 1681 0
+ 3336 25b2 B8080000 movl $8, %eax
+ 3336 00
+ 3337 25b7 660F6F05 movdqa vec_00(%rip), %xmm0
+ 3337 00000000
+ 3338 25bf F30F7F85 movdqu %xmm0, -4592(%rbp)
+ 3338 10EEFFFF
+ 3339 25c7 89850CEE movl %eax, -4596(%rbp)
+ 3339 FFFF
+ 3340 .LBB580:
+ 3341 .LBB581:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 3342 .loc 2 522 0
+ 3343 25cd F30F6F85 movdqu -4592(%rbp), %xmm0
+ 3343 10EEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 133
+
+
+ 3344 25d5 F30F7F85 movdqu %xmm0, -8592(%rbp)
+ 3344 70DEFFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 3345 .loc 2 523 0
+ 3346 25dd B8030000 movl $3, %eax
+ 3346 00
+ 3347 25e2 4898 cltq
+ 3348 25e4 8B950CEE movl -4596(%rbp), %edx
+ 3348 FFFF
+ 3349 25ea 89948570 movl %edx, -8592(%rbp,%rax,4)
+ 3349 DEFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 3350 .loc 2 524 0
+ 3351 25f1 F30F6F85 movdqu -8592(%rbp), %xmm0
+ 3351 70DEFFFF
+ 3352 25f9 F30F7F85 movdqu %xmm0, -4592(%rbp)
+ 3352 10EEFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3353 .loc 2 526 0
+ 3354 2601 F30F6F85 movdqu -4592(%rbp), %xmm0
+ 3354 10EEFFFF
+ 3355 .LBE581:
+ 3356 .LBE580:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3357 .loc 2 1681 0
+ 3358 2609 660F7F85 movdqa %xmm0, -9984(%rbp)
+ 3358 00D9FFFF
+ 3359 2611 F30F6F85 movdqu -4624(%rbp), %xmm0
+ 3359 F0EDFFFF
+ 3360 2619 F30F7F85 movdqu %xmm0, -4576(%rbp)
+ 3360 20EEFFFF
+ 3361 2621 F30F6F85 movdqu -4576(%rbp), %xmm0
+ 3361 20EEFFFF
+ 3362 2629 F30F7F85 movdqu %xmm0, -4544(%rbp)
+ 3362 40EEFFFF
+ 3363 2631 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 3363 000000
+ 3364 2638 48898538 movq %rax, -4552(%rbp)
+ 3364 EEFFFF
+ 3365 .LBB582:
+ 3366 .LBB583:
+ 3367 .LBB584:
+ 3368 .LBB585:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 3369 .loc 2 851 0
+ 3370 263f 660F6F05 movdqa vec_00(%rip), %xmm0
+ 3370 00000000
+ 3371 2647 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 3371 60EEFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3372 .loc 2 854 0
+ 3373 264f 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 3373 00000000
+ 3374 2657 F30F6F8D movdqu -4544(%rbp), %xmm1
+ 3374 40EEFFFF
+ 3375 265f F30F7F8D movdqu %xmm1, -4432(%rbp)
+ 3375 B0EEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 134
+
+
+ 3376 2667 F30F7F85 movdqu %xmm0, -4448(%rbp)
+ 3376 A0EEFFFF
+ 3377 .LBB586:
+ 3378 .LBB587:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 3379 .loc 2 206 0
+ 3380 266f F30F6F85 movdqu -4448(%rbp), %xmm0
+ 3380 A0EEFFFF
+ 3381 2677 F30F6F8D movdqu -4432(%rbp), %xmm1
+ 3381 B0EEFFFF
+ 3382 267f 660FDBC1 pand %xmm1, %xmm0
+ 3383 .LBE587:
+ 3384 .LBE586:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3385 .loc 2 854 0
+ 3386 2683 F30F7F85 movdqu %xmm0, -4464(%rbp)
+ 3386 90EEFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 3387 .loc 2 862 0
+ 3388 268b 660F6F05 movdqa vec_10(%rip), %xmm0
+ 3388 00000000
+ 3389 2693 F30F6F8D movdqu -4544(%rbp), %xmm1
+ 3389 40EEFFFF
+ 3390 269b F30F7F8D movdqu %xmm1, -4400(%rbp)
+ 3390 D0EEFFFF
+ 3391 26a3 F30F7F85 movdqu %xmm0, -4416(%rbp)
+ 3391 C0EEFFFF
+ 3392 .LBB588:
+ 3393 .loc 2 2642 0
+ 3394 26ab 0FB685D0 movzbl -4400(%rbp), %eax
+ 3394 EEFFFF
+ 3395 26b2 0FB695C0 movzbl -4416(%rbp), %edx
+ 3395 EEFFFF
+ 3396 26b9 0FB6C0 movzbl %al, %eax
+ 3397 26bc 6689858E movw %ax, -10354(%rbp)
+ 3397 D7FFFF
+ 3398 26c3 0FB7858E movzwl -10354(%rbp), %eax
+ 3398 D7FFFF
+ 3399 26ca F6F2 divb %dl
+ 3400 26cc 4189C7 movl %eax, %r15d
+ 3401 26cf 0FB685D1 movzbl -4399(%rbp), %eax
+ 3401 EEFFFF
+ 3402 26d6 0FB695C1 movzbl -4415(%rbp), %edx
+ 3402 EEFFFF
+ 3403 26dd 0FB6C0 movzbl %al, %eax
+ 3404 26e0 6689858E movw %ax, -10354(%rbp)
+ 3404 D7FFFF
+ 3405 26e7 0FB7858E movzwl -10354(%rbp), %eax
+ 3405 D7FFFF
+ 3406 26ee F6F2 divb %dl
+ 3407 26f0 88851FD9 movb %al, -9953(%rbp)
+ 3407 FFFF
+ 3408 26f6 0FB685D2 movzbl -4398(%rbp), %eax
+ 3408 EEFFFF
+ 3409 26fd 0FB695C2 movzbl -4414(%rbp), %edx
+ 3409 EEFFFF
+ 3410 2704 0FB6C0 movzbl %al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 135
+
+
+ 3411 2707 6689858E movw %ax, -10354(%rbp)
+ 3411 D7FFFF
+ 3412 270e 0FB7858E movzwl -10354(%rbp), %eax
+ 3412 D7FFFF
+ 3413 2715 F6F2 divb %dl
+ 3414 2717 88851ED9 movb %al, -9954(%rbp)
+ 3414 FFFF
+ 3415 271d 0FB685D3 movzbl -4397(%rbp), %eax
+ 3415 EEFFFF
+ 3416 2724 0FB695C3 movzbl -4413(%rbp), %edx
+ 3416 EEFFFF
+ 3417 272b 0FB6C0 movzbl %al, %eax
+ 3418 272e 6689858E movw %ax, -10354(%rbp)
+ 3418 D7FFFF
+ 3419 2735 0FB7858E movzwl -10354(%rbp), %eax
+ 3419 D7FFFF
+ 3420 273c F6F2 divb %dl
+ 3421 273e 88851DD9 movb %al, -9955(%rbp)
+ 3421 FFFF
+ 3422 2744 0FB685D4 movzbl -4396(%rbp), %eax
+ 3422 EEFFFF
+ 3423 274b 0FB695C4 movzbl -4412(%rbp), %edx
+ 3423 EEFFFF
+ 3424 2752 0FB6C0 movzbl %al, %eax
+ 3425 2755 6689858E movw %ax, -10354(%rbp)
+ 3425 D7FFFF
+ 3426 275c 0FB7858E movzwl -10354(%rbp), %eax
+ 3426 D7FFFF
+ 3427 2763 F6F2 divb %dl
+ 3428 2765 88851CD9 movb %al, -9956(%rbp)
+ 3428 FFFF
+ 3429 276b 0FB685D5 movzbl -4395(%rbp), %eax
+ 3429 EEFFFF
+ 3430 2772 0FB695C5 movzbl -4411(%rbp), %edx
+ 3430 EEFFFF
+ 3431 2779 0FB6C0 movzbl %al, %eax
+ 3432 277c 6689858E movw %ax, -10354(%rbp)
+ 3432 D7FFFF
+ 3433 2783 0FB7858E movzwl -10354(%rbp), %eax
+ 3433 D7FFFF
+ 3434 278a F6F2 divb %dl
+ 3435 278c 4189C1 movl %eax, %r9d
+ 3436 278f 0FB685D6 movzbl -4394(%rbp), %eax
+ 3436 EEFFFF
+ 3437 2796 0FB695C6 movzbl -4410(%rbp), %edx
+ 3437 EEFFFF
+ 3438 279d 0FB6C0 movzbl %al, %eax
+ 3439 27a0 6689858E movw %ax, -10354(%rbp)
+ 3439 D7FFFF
+ 3440 27a7 0FB7858E movzwl -10354(%rbp), %eax
+ 3440 D7FFFF
+ 3441 27ae F6F2 divb %dl
+ 3442 27b0 89C7 movl %eax, %edi
+ 3443 27b2 0FB685D7 movzbl -4393(%rbp), %eax
+ 3443 EEFFFF
+ 3444 27b9 0FB695C7 movzbl -4409(%rbp), %edx
+ 3444 EEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 136
+
+
+ 3445 27c0 0FB6C0 movzbl %al, %eax
+ 3446 27c3 6689858E movw %ax, -10354(%rbp)
+ 3446 D7FFFF
+ 3447 27ca 0FB7858E movzwl -10354(%rbp), %eax
+ 3447 D7FFFF
+ 3448 27d1 F6F2 divb %dl
+ 3449 27d3 89C3 movl %eax, %ebx
+ 3450 27d5 0FB685D8 movzbl -4392(%rbp), %eax
+ 3450 EEFFFF
+ 3451 27dc 0FB695C8 movzbl -4408(%rbp), %edx
+ 3451 EEFFFF
+ 3452 27e3 0FB6C0 movzbl %al, %eax
+ 3453 27e6 6689858E movw %ax, -10354(%rbp)
+ 3453 D7FFFF
+ 3454 27ed 0FB7858E movzwl -10354(%rbp), %eax
+ 3454 D7FFFF
+ 3455 27f4 F6F2 divb %dl
+ 3456 27f6 4189C2 movl %eax, %r10d
+ 3457 27f9 0FB685D9 movzbl -4391(%rbp), %eax
+ 3457 EEFFFF
+ 3458 2800 0FB695C9 movzbl -4407(%rbp), %edx
+ 3458 EEFFFF
+ 3459 2807 0FB6C0 movzbl %al, %eax
+ 3460 280a 6689858E movw %ax, -10354(%rbp)
+ 3460 D7FFFF
+ 3461 2811 0FB7858E movzwl -10354(%rbp), %eax
+ 3461 D7FFFF
+ 3462 2818 F6F2 divb %dl
+ 3463 281a 4189C3 movl %eax, %r11d
+ 3464 281d 0FB685DA movzbl -4390(%rbp), %eax
+ 3464 EEFFFF
+ 3465 2824 0FB695CA movzbl -4406(%rbp), %edx
+ 3465 EEFFFF
+ 3466 282b 0FB6C0 movzbl %al, %eax
+ 3467 282e 6689858E movw %ax, -10354(%rbp)
+ 3467 D7FFFF
+ 3468 2835 0FB7858E movzwl -10354(%rbp), %eax
+ 3468 D7FFFF
+ 3469 283c F6F2 divb %dl
+ 3470 283e 4189C4 movl %eax, %r12d
+ 3471 2841 0FB685DB movzbl -4389(%rbp), %eax
+ 3471 EEFFFF
+ 3472 2848 0FB695CB movzbl -4405(%rbp), %edx
+ 3472 EEFFFF
+ 3473 284f 0FB6C0 movzbl %al, %eax
+ 3474 2852 6689858E movw %ax, -10354(%rbp)
+ 3474 D7FFFF
+ 3475 2859 0FB7858E movzwl -10354(%rbp), %eax
+ 3475 D7FFFF
+ 3476 2860 F6F2 divb %dl
+ 3477 2862 4189C5 movl %eax, %r13d
+ 3478 2865 0FB685DC movzbl -4388(%rbp), %eax
+ 3478 EEFFFF
+ 3479 286c 0FB695CC movzbl -4404(%rbp), %edx
+ 3479 EEFFFF
+ 3480 2873 0FB6C0 movzbl %al, %eax
+ 3481 2876 6689858E movw %ax, -10354(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 137
+
+
+ 3481 D7FFFF
+ 3482 287d 0FB7858E movzwl -10354(%rbp), %eax
+ 3482 D7FFFF
+ 3483 2884 F6F2 divb %dl
+ 3484 2886 4189C6 movl %eax, %r14d
+ 3485 2889 0FB685DD movzbl -4387(%rbp), %eax
+ 3485 EEFFFF
+ 3486 2890 0FB695CD movzbl -4403(%rbp), %edx
+ 3486 EEFFFF
+ 3487 2897 0FB6C0 movzbl %al, %eax
+ 3488 289a 6689858E movw %ax, -10354(%rbp)
+ 3488 D7FFFF
+ 3489 28a1 0FB7858E movzwl -10354(%rbp), %eax
+ 3489 D7FFFF
+ 3490 28a8 F6F2 divb %dl
+ 3491 28aa 4189C0 movl %eax, %r8d
+ 3492 28ad 0FB685DE movzbl -4386(%rbp), %eax
+ 3492 EEFFFF
+ 3493 28b4 0FB695CE movzbl -4402(%rbp), %edx
+ 3493 EEFFFF
+ 3494 28bb 0FB6C0 movzbl %al, %eax
+ 3495 28be 6689858E movw %ax, -10354(%rbp)
+ 3495 D7FFFF
+ 3496 28c5 0FB7858E movzwl -10354(%rbp), %eax
+ 3496 D7FFFF
+ 3497 28cc F6F2 divb %dl
+ 3498 28ce 89C6 movl %eax, %esi
+ 3499 28d0 0FB685DF movzbl -4385(%rbp), %eax
+ 3499 EEFFFF
+ 3500 28d7 0FB695CF movzbl -4401(%rbp), %edx
+ 3500 EEFFFF
+ 3501 28de 0FB6C0 movzbl %al, %eax
+ 3502 28e1 6689858E movw %ax, -10354(%rbp)
+ 3502 D7FFFF
+ 3503 28e8 0FB7858E movzwl -10354(%rbp), %eax
+ 3503 D7FFFF
+ 3504 28ef F6F2 divb %dl
+ 3505 28f1 89C1 movl %eax, %ecx
+ 3506 .LBB589:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 3507 .loc 2 346 0
+ 3508 28f3 0FB6D3 movzbl %bl, %edx
+ 3509 28f6 400FB6C7 movzbl %dil, %eax
+ 3510 28fa 48C1E208 salq $8, %rdx
+ 3511 28fe 4809C2 orq %rax, %rdx
+ 3512 2901 410FB6C1 movzbl %r9b, %eax
+ 3513 2905 48C1E208 salq $8, %rdx
+ 3514 2909 4809C2 orq %rax, %rdx
+ 3515 290c 0FB6851C movzbl -9956(%rbp), %eax
+ 3515 D9FFFF
+ 3516 2913 48C1E208 salq $8, %rdx
+ 3517 2917 4809C2 orq %rax, %rdx
+ 3518 291a 0FB6851D movzbl -9955(%rbp), %eax
+ 3518 D9FFFF
+ 3519 2921 48C1E208 salq $8, %rdx
+ 3520 2925 4809C2 orq %rax, %rdx
+ 3521 2928 0FB6851E movzbl -9954(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 138
+
+
+ 3521 D9FFFF
+ 3522 292f 48C1E208 salq $8, %rdx
+ 3523 2933 4809C2 orq %rax, %rdx
+ 3524 2936 0FB6851F movzbl -9953(%rbp), %eax
+ 3524 D9FFFF
+ 3525 293d 48C1E208 salq $8, %rdx
+ 3526 2941 4809C2 orq %rax, %rdx
+ 3527 2944 410FB6C7 movzbl %r15b, %eax
+ 3528 2948 48C1E208 salq $8, %rdx
+ 3529 294c 4809C2 orq %rax, %rdx
+ 3530 294f 0FB6C1 movzbl %cl, %eax
+ 3531 2952 400FB6CE movzbl %sil, %ecx
+ 3532 2956 48C1E008 salq $8, %rax
+ 3533 295a 4809C8 orq %rcx, %rax
+ 3534 295d 410FB6C8 movzbl %r8b, %ecx
+ 3535 2961 48C1E008 salq $8, %rax
+ 3536 2965 4809C8 orq %rcx, %rax
+ 3537 2968 410FB6CE movzbl %r14b, %ecx
+ 3538 296c 48C1E008 salq $8, %rax
+ 3539 2970 4809C8 orq %rcx, %rax
+ 3540 2973 410FB6CD movzbl %r13b, %ecx
+ 3541 2977 48C1E008 salq $8, %rax
+ 3542 297b 4809C8 orq %rcx, %rax
+ 3543 297e 410FB6CC movzbl %r12b, %ecx
+ 3544 2982 48C1E008 salq $8, %rax
+ 3545 2986 4809C8 orq %rcx, %rax
+ 3546 2989 410FB6CB movzbl %r11b, %ecx
+ 3547 298d 48C1E008 salq $8, %rax
+ 3548 2991 4809C8 orq %rcx, %rax
+ 3549 2994 410FB6CA movzbl %r10b, %ecx
+ 3550 2998 48C1E008 salq $8, %rax
+ 3551 299c 4809C8 orq %rcx, %rax
+ 3552 299f 488995F0 movq %rdx, -10256(%rbp)
+ 3552 D7FFFF
+ 3553 29a6 488985F8 movq %rax, -10248(%rbp)
+ 3553 D7FFFF
+ 3554 29ad 660F6F85 movdqa -10256(%rbp), %xmm0
+ 3554 F0D7FFFF
+ 3555 .LBE589:
+ 3556 .LBE588:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 3557 .loc 2 862 0
+ 3558 29b5 F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 3558 80EEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 3559 .loc 2 866 0
+ 3560 29bd C7855CEE movl $0, -4516(%rbp)
+ 3560 FFFF0000
+ 3560 0000
+ 3561 29c7 E9860200 jmp .L70
+ 3561 00
+ 3562 .L79:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3563 .loc 2 868 0
+ 3564 29cc 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 3564 00000000
+ 3565 29d4 F30F7F85 movdqu %xmm0, -4368(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 139
+
+
+ 3565 F0EEFFFF
+ 3566 29dc F30F6F85 movdqu -4480(%rbp), %xmm0
+ 3566 80EEFFFF
+ 3567 29e4 F30F7F85 movdqu %xmm0, -4384(%rbp)
+ 3567 E0EEFFFF
+ 3568 .LBB590:
+ 3569 .LBB591:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 3570 .loc 2 380 0
+ 3571 29ec F30F6F85 movdqu -4368(%rbp), %xmm0
+ 3571 F0EEFFFF
+ 3572 29f4 F30F7F85 movdqu %xmm0, -8560(%rbp)
+ 3572 90DEFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 3573 .loc 2 381 0
+ 3574 29fc F30F6F85 movdqu -4384(%rbp), %xmm0
+ 3574 E0EEFFFF
+ 3575 2a04 F30F7F85 movdqu %xmm0, -8576(%rbp)
+ 3575 80DEFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 3576 .loc 2 383 0
+ 3577 2a0c C7850CEF movl $0, -4340(%rbp)
+ 3577 FFFF0000
+ 3577 0000
+ 3578 2a16 EB5C jmp .L71
+ 3579 .L74:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 3580 .loc 2 385 0
+ 3581 2a18 8B850CEF movl -4340(%rbp), %eax
+ 3581 FFFF
+ 3582 2a1e 89C0 mov %eax, %eax
+ 3583 2a20 0FB68405 movzbl -8576(%rbp,%rax), %eax
+ 3583 80DEFFFF
+ 3584 2a28 84C0 testb %al, %al
+ 3585 2a2a 7912 jns .L72
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 3586 .loc 2 386 0
+ 3587 2a2c 8B850CEF movl -4340(%rbp), %eax
+ 3587 FFFF
+ 3588 2a32 89C0 mov %eax, %eax
+ 3589 2a34 C68405A0 movb $0, -8544(%rbp,%rax)
+ 3589 DEFFFF00
+ 3590 2a3c EB2F jmp .L73
+ 3591 .L72:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 3592 .loc 2 388 0
+ 3593 2a3e 8B8D0CEF movl -4340(%rbp), %ecx
+ 3593 FFFF
+ 3594 2a44 8B850CEF movl -4340(%rbp), %eax
+ 3594 FFFF
+ 3595 2a4a 89C0 mov %eax, %eax
+ 3596 2a4c 0FB68405 movzbl -8576(%rbp,%rax), %eax
+ 3596 80DEFFFF
+ 3597 2a54 0FB6C0 movzbl %al, %eax
+ 3598 2a57 83E00F andl $15, %eax
+ 3599 2a5a 4898 cltq
+ 3600 2a5c 0FB69405 movzbl -8560(%rbp,%rax), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 140
+
+
+ 3600 90DEFFFF
+ 3601 2a64 89C8 mov %ecx, %eax
+ 3602 2a66 889405A0 movb %dl, -8544(%rbp,%rax)
+ 3602 DEFFFF
+ 3603 .L73:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 3604 .loc 2 383 0
+ 3605 2a6d 83850CEF addl $1, -4340(%rbp)
+ 3605 FFFF01
+ 3606 .L71:
+ 3607 2a74 83BD0CEF cmpl $15, -4340(%rbp)
+ 3607 FFFF0F
+ 3608 2a7b 769B jbe .L74
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 3609 .loc 2 391 0
+ 3610 2a7d F30F6F85 movdqu -8544(%rbp), %xmm0
+ 3610 A0DEFFFF
+ 3611 .LBE591:
+ 3612 .LBE590:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3613 .loc 2 868 0
+ 3614 2a85 F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 3614 70EEFFFF
+ 3615 2a8d F30F6F85 movdqu -4464(%rbp), %xmm0
+ 3615 90EEFFFF
+ 3616 2a95 F30F7F85 movdqu %xmm0, -4320(%rbp)
+ 3616 20EFFFFF
+ 3617 2a9d F30F6F85 movdqu -4496(%rbp), %xmm0
+ 3617 70EEFFFF
+ 3618 2aa5 F30F7F85 movdqu %xmm0, -4336(%rbp)
+ 3618 10EFFFFF
+ 3619 .LBB592:
+ 3620 .LBB593:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 3621 .loc 2 234 0
+ 3622 2aad F30F6F85 movdqu -4336(%rbp), %xmm0
+ 3622 10EFFFFF
+ 3623 2ab5 F30F6F8D movdqu -4320(%rbp), %xmm1
+ 3623 20EFFFFF
+ 3624 2abd 660FEBC1 por %xmm1, %xmm0
+ 3625 .LBE593:
+ 3626 .LBE592:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 3627 .loc 2 870 0
+ 3628 2ac1 F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 3628 70EEFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3629 .loc 2 872 0
+ 3630 2ac9 8B855CEE mov -4516(%rbp), %eax
+ 3630 FFFF
+ 3631 2acf 48C1E004 salq $4, %rax
+ 3632 2ad3 48038538 addq -4552(%rbp), %rax
+ 3632 EEFFFF
+ 3633 2ada 660F6F00 movdqa (%rax), %xmm0
+ 3634 2ade F30F7F85 movdqu %xmm0, -4288(%rbp)
+ 3634 40EFFFFF
+ 3635 2ae6 F30F6F85 movdqu -4496(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 141
+
+
+ 3635 70EEFFFF
+ 3636 2aee F30F7F85 movdqu %xmm0, -4304(%rbp)
+ 3636 30EFFFFF
+ 3637 .LBB594:
+ 3638 .LBB595:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 3639 .loc 2 380 0
+ 3640 2af6 F30F6F85 movdqu -4288(%rbp), %xmm0
+ 3640 40EFFFFF
+ 3641 2afe F30F7F85 movdqu %xmm0, -8512(%rbp)
+ 3641 C0DEFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 3642 .loc 2 381 0
+ 3643 2b06 F30F6F85 movdqu -4304(%rbp), %xmm0
+ 3643 30EFFFFF
+ 3644 2b0e F30F7F85 movdqu %xmm0, -8528(%rbp)
+ 3644 B0DEFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 3645 .loc 2 383 0
+ 3646 2b16 C7855CEF movl $0, -4260(%rbp)
+ 3646 FFFF0000
+ 3646 0000
+ 3647 2b20 EB5C jmp .L75
+ 3648 .L78:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 3649 .loc 2 385 0
+ 3650 2b22 8B855CEF movl -4260(%rbp), %eax
+ 3650 FFFF
+ 3651 2b28 89C0 mov %eax, %eax
+ 3652 2b2a 0FB68405 movzbl -8528(%rbp,%rax), %eax
+ 3652 B0DEFFFF
+ 3653 2b32 84C0 testb %al, %al
+ 3654 2b34 7912 jns .L76
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 3655 .loc 2 386 0
+ 3656 2b36 8B855CEF movl -4260(%rbp), %eax
+ 3656 FFFF
+ 3657 2b3c 89C0 mov %eax, %eax
+ 3658 2b3e C68405D0 movb $0, -8496(%rbp,%rax)
+ 3658 DEFFFF00
+ 3659 2b46 EB2F jmp .L77
+ 3660 .L76:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 3661 .loc 2 388 0
+ 3662 2b48 8B8D5CEF movl -4260(%rbp), %ecx
+ 3662 FFFF
+ 3663 2b4e 8B855CEF movl -4260(%rbp), %eax
+ 3663 FFFF
+ 3664 2b54 89C0 mov %eax, %eax
+ 3665 2b56 0FB68405 movzbl -8528(%rbp,%rax), %eax
+ 3665 B0DEFFFF
+ 3666 2b5e 0FB6C0 movzbl %al, %eax
+ 3667 2b61 83E00F andl $15, %eax
+ 3668 2b64 4898 cltq
+ 3669 2b66 0FB69405 movzbl -8512(%rbp,%rax), %edx
+ 3669 C0DEFFFF
+ 3670 2b6e 89C8 mov %ecx, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 142
+
+
+ 3671 2b70 889405D0 movb %dl, -8496(%rbp,%rax)
+ 3671 DEFFFF
+ 3672 .L77:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 3673 .loc 2 383 0
+ 3674 2b77 83855CEF addl $1, -4260(%rbp)
+ 3674 FFFF01
+ 3675 .L75:
+ 3676 2b7e 83BD5CEF cmpl $15, -4260(%rbp)
+ 3676 FFFF0F
+ 3677 2b85 769B jbe .L78
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 3678 .loc 2 391 0
+ 3679 2b87 F30F6F85 movdqu -8496(%rbp), %xmm0
+ 3679 D0DEFFFF
+ 3680 .LBE595:
+ 3681 .LBE594:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3682 .loc 2 872 0
+ 3683 2b8f F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 3683 70EEFFFF
+ 3684 2b97 F30F6F85 movdqu -4512(%rbp), %xmm0
+ 3684 60EEFFFF
+ 3685 2b9f F30F7F85 movdqu %xmm0, -4240(%rbp)
+ 3685 70EFFFFF
+ 3686 2ba7 F30F6F85 movdqu -4496(%rbp), %xmm0
+ 3686 70EEFFFF
+ 3687 2baf F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 3687 60EFFFFF
+ 3688 .LBB596:
+ 3689 .LBB597:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 3690 .loc 2 234 0
+ 3691 2bb7 F30F6F85 movdqu -4256(%rbp), %xmm0
+ 3691 60EFFFFF
+ 3692 2bbf F30F6F8D movdqu -4240(%rbp), %xmm1
+ 3692 70EFFFFF
+ 3693 2bc7 660FEBC1 por %xmm1, %xmm0
+ 3694 .LBE597:
+ 3695 .LBE596:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 3696 .loc 2 874 0
+ 3697 2bcb F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 3697 60EEFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3698 .loc 2 876 0
+ 3699 2bd3 660F6F05 movdqa vec_01(%rip), %xmm0
+ 3699 00000000
+ 3700 2bdb F30F6F8D movdqu -4480(%rbp), %xmm1
+ 3700 80EEFFFF
+ 3701 2be3 F30F7F8D movdqu %xmm1, -4208(%rbp)
+ 3701 90EFFFFF
+ 3702 2beb F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 3702 80EFFFFF
+ 3703 .LBB598:
+ 3704 .LBB599:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+
GAS LISTING /tmp/ccMa7HLZ.s page 143
+
+
+ 3705 .loc 2 290 0
+ 3706 2bf3 F30F6F8D movdqu -4224(%rbp), %xmm1
+ 3706 80EFFFFF
+ 3707 2bfb F30F6F85 movdqu -4208(%rbp), %xmm0
+ 3707 90EFFFFF
+ 3708 2c03 660FF8C1 psubb %xmm1, %xmm0
+ 3709 .LBE599:
+ 3710 .LBE598:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3711 .loc 2 876 0
+ 3712 2c07 F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 3712 80EEFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3713 .loc 2 878 0
+ 3714 2c0f 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 3714 00000000
+ 3715 2c17 F30F6F8D movdqu -4480(%rbp), %xmm1
+ 3715 80EEFFFF
+ 3716 2c1f F30F7F8D movdqu %xmm1, -4176(%rbp)
+ 3716 B0EFFFFF
+ 3717 2c27 F30F7F85 movdqu %xmm0, -4192(%rbp)
+ 3717 A0EFFFFF
+ 3718 .LBB600:
+ 3719 .LBB601:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 3720 .loc 2 206 0
+ 3721 2c2f F30F6F85 movdqu -4192(%rbp), %xmm0
+ 3721 A0EFFFFF
+ 3722 2c37 F30F6F8D movdqu -4176(%rbp), %xmm1
+ 3722 B0EFFFFF
+ 3723 2c3f 660FDBC1 pand %xmm1, %xmm0
+ 3724 .LBE601:
+ 3725 .LBE600:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3726 .loc 2 878 0
+ 3727 2c43 F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 3727 80EEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 3728 .loc 2 866 0
+ 3729 2c4b 83855CEE addl $1, -4516(%rbp)
+ 3729 FFFF01
+ 3730 .L70:
+ 3731 2c52 83BD5CEE cmpl $15, -4516(%rbp)
+ 3731 FFFF0F
+ 3732 2c59 0F866DFD jbe .L79
+ 3732 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 3733 .loc 2 882 0
+ 3734 2c5f F30F6F85 movdqu -4512(%rbp), %xmm0
+ 3734 60EEFFFF
+ 3735 .LBE585:
+ 3736 .LBE584:
+ 3737 .LBE583:
+ 3738 .LBE582:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 3739 .loc 2 1682 0
+ 3740 2c67 660F7F85 movdqa %xmm0, -10000(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 144
+
+
+ 3740 F0D8FFFF
+ 3741 .LBB602:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 3742 .loc 2 1683 0
+ 3743 2c6f 660F6F85 movdqa -10000(%rbp), %xmm0
+ 3743 F0D8FFFF
+ 3744 2c77 F30F7F85 movdqu %xmm0, -8608(%rbp)
+ 3744 60DEFFFF
+ 3745 2c7f E8000000 call KDbgWriterGet at PLT
+ 3745 00
+ 3746 2c84 4885C0 testq %rax, %rax
+ 3747 2c87 7479 je .L81
+ 3748 2c89 BF010000 movl $1, %edi
+ 3748 00
+ 3749 2c8e E8000000 call KDbgCondToFlag at PLT
+ 3749 00
+ 3750 2c93 4889C6 movq %rax, %rsi
+ 3751 2c96 BF100000 movl $16, %edi
+ 3751 00
+ 3752 2c9b E8000000 call KDbgTestModConds at PLT
+ 3752 00
+ 3753 2ca0 84C0 testb %al, %al
+ 3754 2ca2 745E je .L81
+ 3755 2ca4 8B856CDE movl -8596(%rbp), %eax
+ 3755 FFFF
+ 3756 2caa 89C7 movl %eax, %edi
+ 3757 2cac E84FD3FF call bswap_32
+ 3757 FF
+ 3758 2cb1 4189C5 movl %eax, %r13d
+ 3759 2cb4 8B8568DE movl -8600(%rbp), %eax
+ 3759 FFFF
+ 3760 2cba 89C7 movl %eax, %edi
+ 3761 2cbc E83FD3FF call bswap_32
+ 3761 FF
+ 3762 2cc1 4189C4 movl %eax, %r12d
+ 3763 2cc4 8B8564DE movl -8604(%rbp), %eax
+ 3763 FFFF
+ 3764 2cca 89C7 movl %eax, %edi
+ 3765 2ccc E82FD3FF call bswap_32
+ 3765 FF
+ 3766 2cd1 89C3 movl %eax, %ebx
+ 3767 2cd3 8B8560DE movl -8608(%rbp), %eax
+ 3767 FFFF
+ 3768 2cd9 89C7 movl %eax, %edi
+ 3769 2cdb E820D3FF call bswap_32
+ 3769 FF
+ 3770 2ce0 4589E9 movl %r13d, %r9d
+ 3771 2ce3 4589E0 movl %r12d, %r8d
+ 3772 2ce6 89D9 movl %ebx, %ecx
+ 3773 2ce8 89C2 movl %eax, %edx
+ 3774 2cea 488D3500 leaq .LC0(%rip), %rsi
+ 3774 000000
+ 3775 2cf1 488D3D00 leaq .LC1(%rip), %rdi
+ 3775 000000
+ 3776 2cf8 B8000000 movl $0, %eax
+ 3776 00
+ 3777 2cfd E8000000 call KDbgMsg at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 145
+
+
+ 3777 00
+ 3778 .L81:
+ 3779 2d02 660F6F85 movdqa -10000(%rbp), %xmm0
+ 3779 F0D8FFFF
+ 3780 2d0a F30F7F85 movdqu %xmm0, -4160(%rbp)
+ 3780 C0EFFFFF
+ 3781 .LBE602:
+ 3782 .LBB603:
+ 3783 .LBB604:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3784 .loc 2 667 0
+ 3785 2d12 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 3785 00000000
+ 3786 2d1a F30F6F8D movdqu -4160(%rbp), %xmm1
+ 3786 C0EFFFFF
+ 3787 2d22 F30F7F8D movdqu %xmm1, -4128(%rbp)
+ 3787 E0EFFFFF
+ 3788 2d2a F30F7F85 movdqu %xmm0, -4144(%rbp)
+ 3788 D0EFFFFF
+ 3789 .LBB605:
+ 3790 .LBB606:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 3791 .loc 2 380 0
+ 3792 2d32 F30F6F85 movdqu -4128(%rbp), %xmm0
+ 3792 E0EFFFFF
+ 3793 2d3a F30F7F85 movdqu %xmm0, -8464(%rbp)
+ 3793 F0DEFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 3794 .loc 2 381 0
+ 3795 2d42 F30F6F85 movdqu -4144(%rbp), %xmm0
+ 3795 D0EFFFFF
+ 3796 2d4a F30F7F85 movdqu %xmm0, -8480(%rbp)
+ 3796 E0DEFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 3797 .loc 2 383 0
+ 3798 2d52 C785FCEF movl $0, -4100(%rbp)
+ 3798 FFFF0000
+ 3798 0000
+ 3799 2d5c EB5C jmp .L82
+ 3800 .L85:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 3801 .loc 2 385 0
+ 3802 2d5e 8B85FCEF movl -4100(%rbp), %eax
+ 3802 FFFF
+ 3803 2d64 89C0 mov %eax, %eax
+ 3804 2d66 0FB68405 movzbl -8480(%rbp,%rax), %eax
+ 3804 E0DEFFFF
+ 3805 2d6e 84C0 testb %al, %al
+ 3806 2d70 7912 jns .L83
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 3807 .loc 2 386 0
+ 3808 2d72 8B85FCEF movl -4100(%rbp), %eax
+ 3808 FFFF
+ 3809 2d78 89C0 mov %eax, %eax
+ 3810 2d7a C6840500 movb $0, -8448(%rbp,%rax)
+ 3810 DFFFFF00
+ 3811 2d82 EB2F jmp .L84
+
GAS LISTING /tmp/ccMa7HLZ.s page 146
+
+
+ 3812 .L83:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 3813 .loc 2 388 0
+ 3814 2d84 8B8DFCEF movl -4100(%rbp), %ecx
+ 3814 FFFF
+ 3815 2d8a 8B85FCEF movl -4100(%rbp), %eax
+ 3815 FFFF
+ 3816 2d90 89C0 mov %eax, %eax
+ 3817 2d92 0FB68405 movzbl -8480(%rbp,%rax), %eax
+ 3817 E0DEFFFF
+ 3818 2d9a 0FB6C0 movzbl %al, %eax
+ 3819 2d9d 83E00F andl $15, %eax
+ 3820 2da0 4898 cltq
+ 3821 2da2 0FB69405 movzbl -8464(%rbp,%rax), %edx
+ 3821 F0DEFFFF
+ 3822 2daa 89C8 mov %ecx, %eax
+ 3823 2dac 88940500 movb %dl, -8448(%rbp,%rax)
+ 3823 DFFFFF
+ 3824 .L84:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 3825 .loc 2 383 0
+ 3826 2db3 8385FCEF addl $1, -4100(%rbp)
+ 3826 FFFF01
+ 3827 .L82:
+ 3828 2dba 83BDFCEF cmpl $15, -4100(%rbp)
+ 3828 FFFF0F
+ 3829 2dc1 769B jbe .L85
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 3830 .loc 2 391 0
+ 3831 2dc3 F30F6F85 movdqu -8448(%rbp), %xmm0
+ 3831 00DFFFFF
+ 3832 .LBE606:
+ 3833 .LBE605:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3834 .loc 2 667 0
+ 3835 2dcb F30F7F85 movdqu %xmm0, -4160(%rbp)
+ 3835 C0EFFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3836 .loc 2 668 0
+ 3837 2dd3 F30F6F85 movdqu -4160(%rbp), %xmm0
+ 3837 C0EFFFFF
+ 3838 .LBE604:
+ 3839 .LBE603:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 3840 .loc 2 1684 0
+ 3841 2ddb 660F7F85 movdqa %xmm0, -10000(%rbp)
+ 3841 F0D8FFFF
+ 3842 .LBB607:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 3843 .loc 2 1685 0
+ 3844 2de3 660F6F85 movdqa -10000(%rbp), %xmm0
+ 3844 F0D8FFFF
+ 3845 2deb F30F7F85 movdqu %xmm0, -8624(%rbp)
+ 3845 50DEFFFF
+ 3846 2df3 E8000000 call KDbgWriterGet at PLT
+ 3846 00
+ 3847 2df8 4885C0 testq %rax, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 147
+
+
+ 3848 2dfb 7479 je .L87
+ 3849 2dfd BF010000 movl $1, %edi
+ 3849 00
+ 3850 2e02 E8000000 call KDbgCondToFlag at PLT
+ 3850 00
+ 3851 2e07 4889C6 movq %rax, %rsi
+ 3852 2e0a BF100000 movl $16, %edi
+ 3852 00
+ 3853 2e0f E8000000 call KDbgTestModConds at PLT
+ 3853 00
+ 3854 2e14 84C0 testb %al, %al
+ 3855 2e16 745E je .L87
+ 3856 2e18 8B855CDE movl -8612(%rbp), %eax
+ 3856 FFFF
+ 3857 2e1e 89C7 movl %eax, %edi
+ 3858 2e20 E8DBD1FF call bswap_32
+ 3858 FF
+ 3859 2e25 4189C5 movl %eax, %r13d
+ 3860 2e28 8B8558DE movl -8616(%rbp), %eax
+ 3860 FFFF
+ 3861 2e2e 89C7 movl %eax, %edi
+ 3862 2e30 E8CBD1FF call bswap_32
+ 3862 FF
+ 3863 2e35 4189C4 movl %eax, %r12d
+ 3864 2e38 8B8554DE movl -8620(%rbp), %eax
+ 3864 FFFF
+ 3865 2e3e 89C7 movl %eax, %edi
+ 3866 2e40 E8BBD1FF call bswap_32
+ 3866 FF
+ 3867 2e45 89C3 movl %eax, %ebx
+ 3868 2e47 8B8550DE movl -8624(%rbp), %eax
+ 3868 FFFF
+ 3869 2e4d 89C7 movl %eax, %edi
+ 3870 2e4f E8ACD1FF call bswap_32
+ 3870 FF
+ 3871 2e54 4589E9 movl %r13d, %r9d
+ 3872 2e57 4589E0 movl %r12d, %r8d
+ 3873 2e5a 89D9 movl %ebx, %ecx
+ 3874 2e5c 89C2 movl %eax, %edx
+ 3875 2e5e 488D3500 leaq .LC2(%rip), %rsi
+ 3875 000000
+ 3876 2e65 488D3D00 leaq .LC1(%rip), %rdi
+ 3876 000000
+ 3877 2e6c B8000000 movl $0, %eax
+ 3877 00
+ 3878 2e71 E8000000 call KDbgMsg at PLT
+ 3878 00
+ 3879 .L87:
+ 3880 2e76 660F6F85 movdqa -10000(%rbp), %xmm0
+ 3880 F0D8FFFF
+ 3881 2e7e F30F7F85 movdqu %xmm0, -4080(%rbp)
+ 3881 10F0FFFF
+ 3882 2e86 660F6F85 movdqa -9984(%rbp), %xmm0
+ 3882 00D9FFFF
+ 3883 2e8e F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 3883 00F0FFFF
+ 3884 .LBE607:
+
GAS LISTING /tmp/ccMa7HLZ.s page 148
+
+
+ 3885 .LBB608:
+ 3886 .LBB609:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 3887 .loc 2 178 0
+ 3888 2e96 F30F6F85 movdqu -4096(%rbp), %xmm0
+ 3888 00F0FFFF
+ 3889 2e9e F30F6F8D movdqu -4080(%rbp), %xmm1
+ 3889 10F0FFFF
+ 3890 2ea6 660FEFC1 pxor %xmm1, %xmm0
+ 3891 .LBE609:
+ 3892 .LBE608:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 3893 .loc 2 1686 0
+ 3894 2eaa 660F7F85 movdqa %xmm0, -10000(%rbp)
+ 3894 F0D8FFFF
+ 3895 .LBB610:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 3896 .loc 2 1687 0
+ 3897 2eb2 660F6F85 movdqa -10000(%rbp), %xmm0
+ 3897 F0D8FFFF
+ 3898 2eba F30F7F85 movdqu %xmm0, -8640(%rbp)
+ 3898 40DEFFFF
+ 3899 2ec2 E8000000 call KDbgWriterGet at PLT
+ 3899 00
+ 3900 2ec7 4885C0 testq %rax, %rax
+ 3901 2eca 7479 je .L89
+ 3902 2ecc BF010000 movl $1, %edi
+ 3902 00
+ 3903 2ed1 E8000000 call KDbgCondToFlag at PLT
+ 3903 00
+ 3904 2ed6 4889C6 movq %rax, %rsi
+ 3905 2ed9 BF100000 movl $16, %edi
+ 3905 00
+ 3906 2ede E8000000 call KDbgTestModConds at PLT
+ 3906 00
+ 3907 2ee3 84C0 testb %al, %al
+ 3908 2ee5 745E je .L89
+ 3909 2ee7 8B854CDE movl -8628(%rbp), %eax
+ 3909 FFFF
+ 3910 2eed 89C7 movl %eax, %edi
+ 3911 2eef E80CD1FF call bswap_32
+ 3911 FF
+ 3912 2ef4 4189C5 movl %eax, %r13d
+ 3913 2ef7 8B8548DE movl -8632(%rbp), %eax
+ 3913 FFFF
+ 3914 2efd 89C7 movl %eax, %edi
+ 3915 2eff E8FCD0FF call bswap_32
+ 3915 FF
+ 3916 2f04 4189C4 movl %eax, %r12d
+ 3917 2f07 8B8544DE movl -8636(%rbp), %eax
+ 3917 FFFF
+ 3918 2f0d 89C7 movl %eax, %edi
+ 3919 2f0f E8ECD0FF call bswap_32
+ 3919 FF
+ 3920 2f14 89C3 movl %eax, %ebx
+ 3921 2f16 8B8540DE movl -8640(%rbp), %eax
+ 3921 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 149
+
+
+ 3922 2f1c 89C7 movl %eax, %edi
+ 3923 2f1e E8DDD0FF call bswap_32
+ 3923 FF
+ 3924 2f23 4589E9 movl %r13d, %r9d
+ 3925 2f26 4589E0 movl %r12d, %r8d
+ 3926 2f29 89D9 movl %ebx, %ecx
+ 3927 2f2b 89C2 movl %eax, %edx
+ 3928 2f2d 488D3500 leaq .LC3(%rip), %rsi
+ 3928 000000
+ 3929 2f34 488D3D00 leaq .LC1(%rip), %rdi
+ 3929 000000
+ 3930 2f3b B8000000 movl $0, %eax
+ 3930 00
+ 3931 2f40 E8000000 call KDbgMsg at PLT
+ 3931 00
+ 3932 .L89:
+ 3933 2f45 660F6F85 movdqa -10000(%rbp), %xmm0
+ 3933 F0D8FFFF
+ 3934 2f4d F30F7F85 movdqu %xmm0, -4064(%rbp)
+ 3934 20F0FFFF
+ 3935 .LBE610:
+ 3936 .LBB611:
+ 3937 .LBB612:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 3938 .loc 2 1357 0
+ 3939 2f55 F30F6F85 movdqu -4064(%rbp), %xmm0
+ 3939 20F0FFFF
+ 3940 2f5d F30F7F85 movdqu %xmm0, -8432(%rbp)
+ 3940 10DFFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 3941 .loc 2 1358 0
+ 3942 2f65 8B851CDF movl -8420(%rbp), %eax
+ 3942 FFFF
+ 3943 2f6b 898518DF movl %eax, -8424(%rbp)
+ 3943 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 3944 .loc 2 1359 0
+ 3945 2f71 8B851CDF movl -8420(%rbp), %eax
+ 3945 FFFF
+ 3946 2f77 898514DF movl %eax, -8428(%rbp)
+ 3946 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 3947 .loc 2 1360 0
+ 3948 2f7d 8B851CDF movl -8420(%rbp), %eax
+ 3948 FFFF
+ 3949 2f83 898510DF movl %eax, -8432(%rbp)
+ 3949 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 3950 .loc 2 1361 0
+ 3951 2f89 F30F6F85 movdqu -8432(%rbp), %xmm0
+ 3951 10DFFFFF
+ 3952 .LBE612:
+ 3953 .LBE611:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 3954 .loc 2 1688 0
+ 3955 2f91 660F7F85 movdqa %xmm0, -10000(%rbp)
+ 3955 F0D8FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 150
+
+
+ 3956 .LBB613:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 3957 .loc 2 1689 0
+ 3958 2f99 660F6F85 movdqa -10000(%rbp), %xmm0
+ 3958 F0D8FFFF
+ 3959 2fa1 F30F7F85 movdqu %xmm0, -8656(%rbp)
+ 3959 30DEFFFF
+ 3960 2fa9 E8000000 call KDbgWriterGet at PLT
+ 3960 00
+ 3961 2fae 4885C0 testq %rax, %rax
+ 3962 2fb1 7479 je .L91
+ 3963 2fb3 BF010000 movl $1, %edi
+ 3963 00
+ 3964 2fb8 E8000000 call KDbgCondToFlag at PLT
+ 3964 00
+ 3965 2fbd 4889C6 movq %rax, %rsi
+ 3966 2fc0 BF100000 movl $16, %edi
+ 3966 00
+ 3967 2fc5 E8000000 call KDbgTestModConds at PLT
+ 3967 00
+ 3968 2fca 84C0 testb %al, %al
+ 3969 2fcc 745E je .L91
+ 3970 2fce 8B853CDE movl -8644(%rbp), %eax
+ 3970 FFFF
+ 3971 2fd4 89C7 movl %eax, %edi
+ 3972 2fd6 E825D0FF call bswap_32
+ 3972 FF
+ 3973 2fdb 4189C5 movl %eax, %r13d
+ 3974 2fde 8B8538DE movl -8648(%rbp), %eax
+ 3974 FFFF
+ 3975 2fe4 89C7 movl %eax, %edi
+ 3976 2fe6 E815D0FF call bswap_32
+ 3976 FF
+ 3977 2feb 4189C4 movl %eax, %r12d
+ 3978 2fee 8B8534DE movl -8652(%rbp), %eax
+ 3978 FFFF
+ 3979 2ff4 89C7 movl %eax, %edi
+ 3980 2ff6 E805D0FF call bswap_32
+ 3980 FF
+ 3981 2ffb 89C3 movl %eax, %ebx
+ 3982 2ffd 8B8530DE movl -8656(%rbp), %eax
+ 3982 FFFF
+ 3983 3003 89C7 movl %eax, %edi
+ 3984 3005 E8F6CFFF call bswap_32
+ 3984 FF
+ 3985 300a 4589E9 movl %r13d, %r9d
+ 3986 300d 4589E0 movl %r12d, %r8d
+ 3987 3010 89D9 movl %ebx, %ecx
+ 3988 3012 89C2 movl %eax, %edx
+ 3989 3014 488D3500 leaq .LC4(%rip), %rsi
+ 3989 000000
+ 3990 301b 488D3D00 leaq .LC1(%rip), %rdi
+ 3990 000000
+ 3991 3022 B8000000 movl $0, %eax
+ 3991 00
+ 3992 3027 E8000000 call KDbgMsg at PLT
+ 3992 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 151
+
+
+ 3993 .L91:
+ 3994 .LBE613:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 3995 .loc 2 1690 0
+ 3996 302c 660F6F85 movdqa -10000(%rbp), %xmm0
+ 3996 F0D8FFFF
+ 3997 .LBE579:
+ 3998 .LBE578:
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x08,4);
+ 3999 .loc 2 1747 0
+ 4000 3034 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 4000 20E6FFFF
+ 4001 303c F30F6F85 movdqu -6640(%rbp), %xmm0
+ 4001 10E6FFFF
+ 4002 3044 F30F7F85 movdqu %xmm0, -4048(%rbp)
+ 4002 30F0FFFF
+ 4003 .LBB614:
+ 4004 .LBB615:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4005 .loc 2 1565 0
+ 4006 304c F30F6F85 movdqu -4048(%rbp), %xmm0
+ 4006 30F0FFFF
+ 4007 3054 660F7F85 movdqa %xmm0, -9952(%rbp)
+ 4007 20D9FFFF
+ 4008 305c 660F6F85 movdqa -9952(%rbp), %xmm0
+ 4008 20D9FFFF
+ 4009 3064 F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 4009 40F0FFFF
+ 4010 .LBB616:
+ 4011 .LBB617:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 4012 .loc 2 1282 0
+ 4013 306c F30F6F85 movdqu -4032(%rbp), %xmm0
+ 4013 40F0FFFF
+ 4014 3074 F30F7F85 movdqu %xmm0, -8416(%rbp)
+ 4014 20DFFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 4015 .loc 2 1283 0
+ 4016 307c 8B8528DF movl -8408(%rbp), %eax
+ 4016 FFFF
+ 4017 3082 89852CDF movl %eax, -8404(%rbp)
+ 4017 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 4018 .loc 2 1284 0
+ 4019 3088 8B8524DF movl -8412(%rbp), %eax
+ 4019 FFFF
+ 4020 308e 898528DF movl %eax, -8408(%rbp)
+ 4020 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 4021 .loc 2 1285 0
+ 4022 3094 8B8520DF movl -8416(%rbp), %eax
+ 4022 FFFF
+ 4023 309a 898524DF movl %eax, -8412(%rbp)
+ 4023 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 4024 .loc 2 1286 0
+ 4025 30a0 C78520DF movl $0, -8416(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 152
+
+
+ 4025 FFFF0000
+ 4025 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 4026 .loc 2 1287 0
+ 4027 30aa F30F6F85 movdqu -8416(%rbp), %xmm0
+ 4027 20DFFFFF
+ 4028 .LBE617:
+ 4029 .LBE616:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4030 .loc 2 1567 0
+ 4031 30b2 660F7F85 movdqa %xmm0, -9952(%rbp)
+ 4031 20D9FFFF
+ 4032 30ba 660F6F85 movdqa -9952(%rbp), %xmm0
+ 4032 20D9FFFF
+ 4033 30c2 660FEF85 pxor -4048(%rbp), %xmm0
+ 4033 30F0FFFF
+ 4034 30ca F30F7F85 movdqu %xmm0, -4048(%rbp)
+ 4034 30F0FFFF
+ 4035 30d2 660F6F85 movdqa -9952(%rbp), %xmm0
+ 4035 20D9FFFF
+ 4036 30da F30F7F85 movdqu %xmm0, -4016(%rbp)
+ 4036 50F0FFFF
+ 4037 .LBB618:
+ 4038 .LBB619:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 4039 .loc 2 1282 0
+ 4040 30e2 F30F6F85 movdqu -4016(%rbp), %xmm0
+ 4040 50F0FFFF
+ 4041 30ea F30F7F85 movdqu %xmm0, -8400(%rbp)
+ 4041 30DFFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 4042 .loc 2 1283 0
+ 4043 30f2 8B8538DF movl -8392(%rbp), %eax
+ 4043 FFFF
+ 4044 30f8 89853CDF movl %eax, -8388(%rbp)
+ 4044 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 4045 .loc 2 1284 0
+ 4046 30fe 8B8534DF movl -8396(%rbp), %eax
+ 4046 FFFF
+ 4047 3104 898538DF movl %eax, -8392(%rbp)
+ 4047 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 4048 .loc 2 1285 0
+ 4049 310a 8B8530DF movl -8400(%rbp), %eax
+ 4049 FFFF
+ 4050 3110 898534DF movl %eax, -8396(%rbp)
+ 4050 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 4051 .loc 2 1286 0
+ 4052 3116 C78530DF movl $0, -8400(%rbp)
+ 4052 FFFF0000
+ 4052 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 4053 .loc 2 1287 0
+ 4054 3120 F30F6F85 movdqu -8400(%rbp), %xmm0
+ 4054 30DFFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 153
+
+
+ 4055 .LBE619:
+ 4056 .LBE618:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4057 .loc 2 1568 0
+ 4058 3128 660F7F85 movdqa %xmm0, -9952(%rbp)
+ 4058 20D9FFFF
+ 4059 3130 660F6F85 movdqa -9952(%rbp), %xmm0
+ 4059 20D9FFFF
+ 4060 3138 660FEF85 pxor -4048(%rbp), %xmm0
+ 4060 30F0FFFF
+ 4061 3140 F30F7F85 movdqu %xmm0, -4048(%rbp)
+ 4061 30F0FFFF
+ 4062 3148 660F6F85 movdqa -9952(%rbp), %xmm0
+ 4062 20D9FFFF
+ 4063 3150 F30F7F85 movdqu %xmm0, -4000(%rbp)
+ 4063 60F0FFFF
+ 4064 .LBB620:
+ 4065 .LBB621:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 4066 .loc 2 1282 0
+ 4067 3158 F30F6F85 movdqu -4000(%rbp), %xmm0
+ 4067 60F0FFFF
+ 4068 3160 F30F7F85 movdqu %xmm0, -8384(%rbp)
+ 4068 40DFFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 4069 .loc 2 1283 0
+ 4070 3168 8B8548DF movl -8376(%rbp), %eax
+ 4070 FFFF
+ 4071 316e 89854CDF movl %eax, -8372(%rbp)
+ 4071 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 4072 .loc 2 1284 0
+ 4073 3174 8B8544DF movl -8380(%rbp), %eax
+ 4073 FFFF
+ 4074 317a 898548DF movl %eax, -8376(%rbp)
+ 4074 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 4075 .loc 2 1285 0
+ 4076 3180 8B8540DF movl -8384(%rbp), %eax
+ 4076 FFFF
+ 4077 3186 898544DF movl %eax, -8380(%rbp)
+ 4077 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 4078 .loc 2 1286 0
+ 4079 318c C78540DF movl $0, -8384(%rbp)
+ 4079 FFFF0000
+ 4079 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 4080 .loc 2 1287 0
+ 4081 3196 F30F6F85 movdqu -8384(%rbp), %xmm0
+ 4081 40DFFFFF
+ 4082 .LBE621:
+ 4083 .LBE620:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4084 .loc 2 1569 0
+ 4085 319e 660F7F85 movdqa %xmm0, -9952(%rbp)
+ 4085 20D9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 154
+
+
+ 4086 31a6 660F6F85 movdqa -9952(%rbp), %xmm0
+ 4086 20D9FFFF
+ 4087 31ae 660FEF85 pxor -4048(%rbp), %xmm0
+ 4087 30F0FFFF
+ 4088 31b6 F30F7F85 movdqu %xmm0, -4048(%rbp)
+ 4088 30F0FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4089 .loc 2 1571 0
+ 4090 31be F30F6F85 movdqu -4048(%rbp), %xmm0
+ 4090 30F0FFFF
+ 4091 .LBE615:
+ 4092 .LBE614:
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x08,4);
+ 4093 .loc 2 1747 0
+ 4094 31c6 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 4094 10E6FFFF
+ 4095 31ce F30F6F85 movdqu -6624(%rbp), %xmm0
+ 4095 20E6FFFF
+ 4096 31d6 F30F6F8D movdqu -6640(%rbp), %xmm1
+ 4096 10E6FFFF
+ 4097 31de 660FEFC1 pxor %xmm1, %xmm0
+ 4098 31e2 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 4098 10E6FFFF
+ 4099 31ea 488B85B8 movq -9544(%rbp), %rax
+ 4099 DAFFFF
+ 4100 31f1 4883C040 addq $64, %rax
+ 4101 31f5 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 4101 10E6FFFF
+ 4102 31fd F30F7F00 movdqu %xmm0, (%rax)
+ 4103 3201 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 4103 10E6FFFF
+ 4104 3209 F30F7F85 movdqu %xmm0, -3968(%rbp)
+ 4104 80F0FFFF
+ 4105 .LBB622:
+ 4106 .LBB623:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4107 .loc 2 1681 0
+ 4108 3211 B8100000 movl $16, %eax
+ 4108 00
+ 4109 3216 660F6F05 movdqa vec_00(%rip), %xmm0
+ 4109 00000000
+ 4110 321e F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 4110 A0F0FFFF
+ 4111 3226 89859CF0 movl %eax, -3940(%rbp)
+ 4111 FFFF
+ 4112 .LBB624:
+ 4113 .LBB625:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 4114 .loc 2 522 0
+ 4115 322c F30F6F85 movdqu -3936(%rbp), %xmm0
+ 4115 A0F0FFFF
+ 4116 3234 F30F7F85 movdqu %xmm0, -8304(%rbp)
+ 4116 90DFFFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 4117 .loc 2 523 0
+ 4118 323c B8030000 movl $3, %eax
+ 4118 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 155
+
+
+ 4119 3241 4898 cltq
+ 4120 3243 8B959CF0 movl -3940(%rbp), %edx
+ 4120 FFFF
+ 4121 3249 89948590 movl %edx, -8304(%rbp,%rax,4)
+ 4121 DFFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 4122 .loc 2 524 0
+ 4123 3250 F30F6F85 movdqu -8304(%rbp), %xmm0
+ 4123 90DFFFFF
+ 4124 3258 F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 4124 A0F0FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4125 .loc 2 526 0
+ 4126 3260 F30F6F85 movdqu -3936(%rbp), %xmm0
+ 4126 A0F0FFFF
+ 4127 .LBE625:
+ 4128 .LBE624:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4129 .loc 2 1681 0
+ 4130 3268 660F7F85 movdqa %xmm0, -9920(%rbp)
+ 4130 40D9FFFF
+ 4131 3270 F30F6F85 movdqu -3968(%rbp), %xmm0
+ 4131 80F0FFFF
+ 4132 3278 F30F7F85 movdqu %xmm0, -3920(%rbp)
+ 4132 B0F0FFFF
+ 4133 3280 F30F6F85 movdqu -3920(%rbp), %xmm0
+ 4133 B0F0FFFF
+ 4134 3288 F30F7F85 movdqu %xmm0, -3888(%rbp)
+ 4134 D0F0FFFF
+ 4135 3290 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 4135 000000
+ 4136 3297 488985C8 movq %rax, -3896(%rbp)
+ 4136 F0FFFF
+ 4137 .LBB626:
+ 4138 .LBB627:
+ 4139 .LBB628:
+ 4140 .LBB629:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 4141 .loc 2 851 0
+ 4142 329e 660F6F05 movdqa vec_00(%rip), %xmm0
+ 4142 00000000
+ 4143 32a6 F30F7F85 movdqu %xmm0, -3856(%rbp)
+ 4143 F0F0FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4144 .loc 2 854 0
+ 4145 32ae 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 4145 00000000
+ 4146 32b6 F30F6F8D movdqu -3888(%rbp), %xmm1
+ 4146 D0F0FFFF
+ 4147 32be F30F7F8D movdqu %xmm1, -3776(%rbp)
+ 4147 40F1FFFF
+ 4148 32c6 F30F7F85 movdqu %xmm0, -3792(%rbp)
+ 4148 30F1FFFF
+ 4149 .LBB630:
+ 4150 .LBB631:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 4151 .loc 2 206 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 156
+
+
+ 4152 32ce F30F6F85 movdqu -3792(%rbp), %xmm0
+ 4152 30F1FFFF
+ 4153 32d6 F30F6F8D movdqu -3776(%rbp), %xmm1
+ 4153 40F1FFFF
+ 4154 32de 660FDBC1 pand %xmm1, %xmm0
+ 4155 .LBE631:
+ 4156 .LBE630:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4157 .loc 2 854 0
+ 4158 32e2 F30F7F85 movdqu %xmm0, -3808(%rbp)
+ 4158 20F1FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 4159 .loc 2 862 0
+ 4160 32ea 660F6F05 movdqa vec_10(%rip), %xmm0
+ 4160 00000000
+ 4161 32f2 F30F6F8D movdqu -3888(%rbp), %xmm1
+ 4161 D0F0FFFF
+ 4162 32fa F30F7F8D movdqu %xmm1, -3744(%rbp)
+ 4162 60F1FFFF
+ 4163 3302 F30F7F85 movdqu %xmm0, -3760(%rbp)
+ 4163 50F1FFFF
+ 4164 .LBB632:
+ 4165 .loc 2 2642 0
+ 4166 330a 0FB68560 movzbl -3744(%rbp), %eax
+ 4166 F1FFFF
+ 4167 3311 0FB69550 movzbl -3760(%rbp), %edx
+ 4167 F1FFFF
+ 4168 3318 0FB6C0 movzbl %al, %eax
+ 4169 331b 6689858E movw %ax, -10354(%rbp)
+ 4169 D7FFFF
+ 4170 3322 0FB7858E movzwl -10354(%rbp), %eax
+ 4170 D7FFFF
+ 4171 3329 F6F2 divb %dl
+ 4172 332b 4189C7 movl %eax, %r15d
+ 4173 332e 0FB68561 movzbl -3743(%rbp), %eax
+ 4173 F1FFFF
+ 4174 3335 0FB69551 movzbl -3759(%rbp), %edx
+ 4174 F1FFFF
+ 4175 333c 0FB6C0 movzbl %al, %eax
+ 4176 333f 6689858E movw %ax, -10354(%rbp)
+ 4176 D7FFFF
+ 4177 3346 0FB7858E movzwl -10354(%rbp), %eax
+ 4177 D7FFFF
+ 4178 334d F6F2 divb %dl
+ 4179 334f 88855FD9 movb %al, -9889(%rbp)
+ 4179 FFFF
+ 4180 3355 0FB68562 movzbl -3742(%rbp), %eax
+ 4180 F1FFFF
+ 4181 335c 0FB69552 movzbl -3758(%rbp), %edx
+ 4181 F1FFFF
+ 4182 3363 0FB6C0 movzbl %al, %eax
+ 4183 3366 6689858E movw %ax, -10354(%rbp)
+ 4183 D7FFFF
+ 4184 336d 0FB7858E movzwl -10354(%rbp), %eax
+ 4184 D7FFFF
+ 4185 3374 F6F2 divb %dl
+ 4186 3376 88855ED9 movb %al, -9890(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 157
+
+
+ 4186 FFFF
+ 4187 337c 0FB68563 movzbl -3741(%rbp), %eax
+ 4187 F1FFFF
+ 4188 3383 0FB69553 movzbl -3757(%rbp), %edx
+ 4188 F1FFFF
+ 4189 338a 0FB6C0 movzbl %al, %eax
+ 4190 338d 6689858E movw %ax, -10354(%rbp)
+ 4190 D7FFFF
+ 4191 3394 0FB7858E movzwl -10354(%rbp), %eax
+ 4191 D7FFFF
+ 4192 339b F6F2 divb %dl
+ 4193 339d 88855DD9 movb %al, -9891(%rbp)
+ 4193 FFFF
+ 4194 33a3 0FB68564 movzbl -3740(%rbp), %eax
+ 4194 F1FFFF
+ 4195 33aa 0FB69554 movzbl -3756(%rbp), %edx
+ 4195 F1FFFF
+ 4196 33b1 0FB6C0 movzbl %al, %eax
+ 4197 33b4 6689858E movw %ax, -10354(%rbp)
+ 4197 D7FFFF
+ 4198 33bb 0FB7858E movzwl -10354(%rbp), %eax
+ 4198 D7FFFF
+ 4199 33c2 F6F2 divb %dl
+ 4200 33c4 88855CD9 movb %al, -9892(%rbp)
+ 4200 FFFF
+ 4201 33ca 0FB68565 movzbl -3739(%rbp), %eax
+ 4201 F1FFFF
+ 4202 33d1 0FB69555 movzbl -3755(%rbp), %edx
+ 4202 F1FFFF
+ 4203 33d8 0FB6C0 movzbl %al, %eax
+ 4204 33db 6689858E movw %ax, -10354(%rbp)
+ 4204 D7FFFF
+ 4205 33e2 0FB7858E movzwl -10354(%rbp), %eax
+ 4205 D7FFFF
+ 4206 33e9 F6F2 divb %dl
+ 4207 33eb 4189C1 movl %eax, %r9d
+ 4208 33ee 0FB68566 movzbl -3738(%rbp), %eax
+ 4208 F1FFFF
+ 4209 33f5 0FB69556 movzbl -3754(%rbp), %edx
+ 4209 F1FFFF
+ 4210 33fc 0FB6C0 movzbl %al, %eax
+ 4211 33ff 6689858E movw %ax, -10354(%rbp)
+ 4211 D7FFFF
+ 4212 3406 0FB7858E movzwl -10354(%rbp), %eax
+ 4212 D7FFFF
+ 4213 340d F6F2 divb %dl
+ 4214 340f 89C7 movl %eax, %edi
+ 4215 3411 0FB68567 movzbl -3737(%rbp), %eax
+ 4215 F1FFFF
+ 4216 3418 0FB69557 movzbl -3753(%rbp), %edx
+ 4216 F1FFFF
+ 4217 341f 0FB6C0 movzbl %al, %eax
+ 4218 3422 6689858E movw %ax, -10354(%rbp)
+ 4218 D7FFFF
+ 4219 3429 0FB7858E movzwl -10354(%rbp), %eax
+ 4219 D7FFFF
+ 4220 3430 F6F2 divb %dl
+
GAS LISTING /tmp/ccMa7HLZ.s page 158
+
+
+ 4221 3432 89C3 movl %eax, %ebx
+ 4222 3434 0FB68568 movzbl -3736(%rbp), %eax
+ 4222 F1FFFF
+ 4223 343b 0FB69558 movzbl -3752(%rbp), %edx
+ 4223 F1FFFF
+ 4224 3442 0FB6C0 movzbl %al, %eax
+ 4225 3445 6689858E movw %ax, -10354(%rbp)
+ 4225 D7FFFF
+ 4226 344c 0FB7858E movzwl -10354(%rbp), %eax
+ 4226 D7FFFF
+ 4227 3453 F6F2 divb %dl
+ 4228 3455 4189C2 movl %eax, %r10d
+ 4229 3458 0FB68569 movzbl -3735(%rbp), %eax
+ 4229 F1FFFF
+ 4230 345f 0FB69559 movzbl -3751(%rbp), %edx
+ 4230 F1FFFF
+ 4231 3466 0FB6C0 movzbl %al, %eax
+ 4232 3469 6689858E movw %ax, -10354(%rbp)
+ 4232 D7FFFF
+ 4233 3470 0FB7858E movzwl -10354(%rbp), %eax
+ 4233 D7FFFF
+ 4234 3477 F6F2 divb %dl
+ 4235 3479 4189C3 movl %eax, %r11d
+ 4236 347c 0FB6856A movzbl -3734(%rbp), %eax
+ 4236 F1FFFF
+ 4237 3483 0FB6955A movzbl -3750(%rbp), %edx
+ 4237 F1FFFF
+ 4238 348a 0FB6C0 movzbl %al, %eax
+ 4239 348d 6689858E movw %ax, -10354(%rbp)
+ 4239 D7FFFF
+ 4240 3494 0FB7858E movzwl -10354(%rbp), %eax
+ 4240 D7FFFF
+ 4241 349b F6F2 divb %dl
+ 4242 349d 4189C4 movl %eax, %r12d
+ 4243 34a0 0FB6856B movzbl -3733(%rbp), %eax
+ 4243 F1FFFF
+ 4244 34a7 0FB6955B movzbl -3749(%rbp), %edx
+ 4244 F1FFFF
+ 4245 34ae 0FB6C0 movzbl %al, %eax
+ 4246 34b1 6689858E movw %ax, -10354(%rbp)
+ 4246 D7FFFF
+ 4247 34b8 0FB7858E movzwl -10354(%rbp), %eax
+ 4247 D7FFFF
+ 4248 34bf F6F2 divb %dl
+ 4249 34c1 4189C5 movl %eax, %r13d
+ 4250 34c4 0FB6856C movzbl -3732(%rbp), %eax
+ 4250 F1FFFF
+ 4251 34cb 0FB6955C movzbl -3748(%rbp), %edx
+ 4251 F1FFFF
+ 4252 34d2 0FB6C0 movzbl %al, %eax
+ 4253 34d5 6689858E movw %ax, -10354(%rbp)
+ 4253 D7FFFF
+ 4254 34dc 0FB7858E movzwl -10354(%rbp), %eax
+ 4254 D7FFFF
+ 4255 34e3 F6F2 divb %dl
+ 4256 34e5 4189C6 movl %eax, %r14d
+ 4257 34e8 0FB6856D movzbl -3731(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 159
+
+
+ 4257 F1FFFF
+ 4258 34ef 0FB6955D movzbl -3747(%rbp), %edx
+ 4258 F1FFFF
+ 4259 34f6 0FB6C0 movzbl %al, %eax
+ 4260 34f9 6689858E movw %ax, -10354(%rbp)
+ 4260 D7FFFF
+ 4261 3500 0FB7858E movzwl -10354(%rbp), %eax
+ 4261 D7FFFF
+ 4262 3507 F6F2 divb %dl
+ 4263 3509 4189C0 movl %eax, %r8d
+ 4264 350c 0FB6856E movzbl -3730(%rbp), %eax
+ 4264 F1FFFF
+ 4265 3513 0FB6955E movzbl -3746(%rbp), %edx
+ 4265 F1FFFF
+ 4266 351a 0FB6C0 movzbl %al, %eax
+ 4267 351d 6689858E movw %ax, -10354(%rbp)
+ 4267 D7FFFF
+ 4268 3524 0FB7858E movzwl -10354(%rbp), %eax
+ 4268 D7FFFF
+ 4269 352b F6F2 divb %dl
+ 4270 352d 89C6 movl %eax, %esi
+ 4271 352f 0FB6856F movzbl -3729(%rbp), %eax
+ 4271 F1FFFF
+ 4272 3536 0FB6955F movzbl -3745(%rbp), %edx
+ 4272 F1FFFF
+ 4273 353d 0FB6C0 movzbl %al, %eax
+ 4274 3540 6689858E movw %ax, -10354(%rbp)
+ 4274 D7FFFF
+ 4275 3547 0FB7858E movzwl -10354(%rbp), %eax
+ 4275 D7FFFF
+ 4276 354e F6F2 divb %dl
+ 4277 3550 89C1 movl %eax, %ecx
+ 4278 .LBB633:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 4279 .loc 2 346 0
+ 4280 3552 0FB6D3 movzbl %bl, %edx
+ 4281 3555 400FB6C7 movzbl %dil, %eax
+ 4282 3559 48C1E208 salq $8, %rdx
+ 4283 355d 4809C2 orq %rax, %rdx
+ 4284 3560 410FB6C1 movzbl %r9b, %eax
+ 4285 3564 48C1E208 salq $8, %rdx
+ 4286 3568 4809C2 orq %rax, %rdx
+ 4287 356b 0FB6855C movzbl -9892(%rbp), %eax
+ 4287 D9FFFF
+ 4288 3572 48C1E208 salq $8, %rdx
+ 4289 3576 4809C2 orq %rax, %rdx
+ 4290 3579 0FB6855D movzbl -9891(%rbp), %eax
+ 4290 D9FFFF
+ 4291 3580 48C1E208 salq $8, %rdx
+ 4292 3584 4809C2 orq %rax, %rdx
+ 4293 3587 0FB6855E movzbl -9890(%rbp), %eax
+ 4293 D9FFFF
+ 4294 358e 48C1E208 salq $8, %rdx
+ 4295 3592 4809C2 orq %rax, %rdx
+ 4296 3595 0FB6855F movzbl -9889(%rbp), %eax
+ 4296 D9FFFF
+ 4297 359c 48C1E208 salq $8, %rdx
+
GAS LISTING /tmp/ccMa7HLZ.s page 160
+
+
+ 4298 35a0 4809C2 orq %rax, %rdx
+ 4299 35a3 410FB6C7 movzbl %r15b, %eax
+ 4300 35a7 48C1E208 salq $8, %rdx
+ 4301 35ab 4809C2 orq %rax, %rdx
+ 4302 35ae 0FB6C1 movzbl %cl, %eax
+ 4303 35b1 400FB6CE movzbl %sil, %ecx
+ 4304 35b5 48C1E008 salq $8, %rax
+ 4305 35b9 4809C8 orq %rcx, %rax
+ 4306 35bc 410FB6C8 movzbl %r8b, %ecx
+ 4307 35c0 48C1E008 salq $8, %rax
+ 4308 35c4 4809C8 orq %rcx, %rax
+ 4309 35c7 410FB6CE movzbl %r14b, %ecx
+ 4310 35cb 48C1E008 salq $8, %rax
+ 4311 35cf 4809C8 orq %rcx, %rax
+ 4312 35d2 410FB6CD movzbl %r13b, %ecx
+ 4313 35d6 48C1E008 salq $8, %rax
+ 4314 35da 4809C8 orq %rcx, %rax
+ 4315 35dd 410FB6CC movzbl %r12b, %ecx
+ 4316 35e1 48C1E008 salq $8, %rax
+ 4317 35e5 4809C8 orq %rcx, %rax
+ 4318 35e8 410FB6CB movzbl %r11b, %ecx
+ 4319 35ec 48C1E008 salq $8, %rax
+ 4320 35f0 4809C8 orq %rcx, %rax
+ 4321 35f3 410FB6CA movzbl %r10b, %ecx
+ 4322 35f7 48C1E008 salq $8, %rax
+ 4323 35fb 4809C8 orq %rcx, %rax
+ 4324 35fe 488995E0 movq %rdx, -10272(%rbp)
+ 4324 D7FFFF
+ 4325 3605 488985E8 movq %rax, -10264(%rbp)
+ 4325 D7FFFF
+ 4326 360c 660F6F85 movdqa -10272(%rbp), %xmm0
+ 4326 E0D7FFFF
+ 4327 .LBE633:
+ 4328 .LBE632:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 4329 .loc 2 862 0
+ 4330 3614 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 4330 10F1FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 4331 .loc 2 866 0
+ 4332 361c C785ECF0 movl $0, -3860(%rbp)
+ 4332 FFFF0000
+ 4332 0000
+ 4333 3626 E9860200 jmp .L92
+ 4333 00
+ 4334 .L101:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4335 .loc 2 868 0
+ 4336 362b 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 4336 00000000
+ 4337 3633 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 4337 80F1FFFF
+ 4338 363b F30F6F85 movdqu -3824(%rbp), %xmm0
+ 4338 10F1FFFF
+ 4339 3643 F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 4339 70F1FFFF
+ 4340 .LBB634:
+
GAS LISTING /tmp/ccMa7HLZ.s page 161
+
+
+ 4341 .LBB635:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 4342 .loc 2 380 0
+ 4343 364b F30F6F85 movdqu -3712(%rbp), %xmm0
+ 4343 80F1FFFF
+ 4344 3653 F30F7F85 movdqu %xmm0, -8272(%rbp)
+ 4344 B0DFFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 4345 .loc 2 381 0
+ 4346 365b F30F6F85 movdqu -3728(%rbp), %xmm0
+ 4346 70F1FFFF
+ 4347 3663 F30F7F85 movdqu %xmm0, -8288(%rbp)
+ 4347 A0DFFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 4348 .loc 2 383 0
+ 4349 366b C7859CF1 movl $0, -3684(%rbp)
+ 4349 FFFF0000
+ 4349 0000
+ 4350 3675 EB5C jmp .L93
+ 4351 .L96:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 4352 .loc 2 385 0
+ 4353 3677 8B859CF1 movl -3684(%rbp), %eax
+ 4353 FFFF
+ 4354 367d 89C0 mov %eax, %eax
+ 4355 367f 0FB68405 movzbl -8288(%rbp,%rax), %eax
+ 4355 A0DFFFFF
+ 4356 3687 84C0 testb %al, %al
+ 4357 3689 7912 jns .L94
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 4358 .loc 2 386 0
+ 4359 368b 8B859CF1 movl -3684(%rbp), %eax
+ 4359 FFFF
+ 4360 3691 89C0 mov %eax, %eax
+ 4361 3693 C68405C0 movb $0, -8256(%rbp,%rax)
+ 4361 DFFFFF00
+ 4362 369b EB2F jmp .L95
+ 4363 .L94:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 4364 .loc 2 388 0
+ 4365 369d 8B8D9CF1 movl -3684(%rbp), %ecx
+ 4365 FFFF
+ 4366 36a3 8B859CF1 movl -3684(%rbp), %eax
+ 4366 FFFF
+ 4367 36a9 89C0 mov %eax, %eax
+ 4368 36ab 0FB68405 movzbl -8288(%rbp,%rax), %eax
+ 4368 A0DFFFFF
+ 4369 36b3 0FB6C0 movzbl %al, %eax
+ 4370 36b6 83E00F andl $15, %eax
+ 4371 36b9 4898 cltq
+ 4372 36bb 0FB69405 movzbl -8272(%rbp,%rax), %edx
+ 4372 B0DFFFFF
+ 4373 36c3 89C8 mov %ecx, %eax
+ 4374 36c5 889405C0 movb %dl, -8256(%rbp,%rax)
+ 4374 DFFFFF
+ 4375 .L95:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+
GAS LISTING /tmp/ccMa7HLZ.s page 162
+
+
+ 4376 .loc 2 383 0
+ 4377 36cc 83859CF1 addl $1, -3684(%rbp)
+ 4377 FFFF01
+ 4378 .L93:
+ 4379 36d3 83BD9CF1 cmpl $15, -3684(%rbp)
+ 4379 FFFF0F
+ 4380 36da 769B jbe .L96
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 4381 .loc 2 391 0
+ 4382 36dc F30F6F85 movdqu -8256(%rbp), %xmm0
+ 4382 C0DFFFFF
+ 4383 .LBE635:
+ 4384 .LBE634:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4385 .loc 2 868 0
+ 4386 36e4 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 4386 00F1FFFF
+ 4387 36ec F30F6F85 movdqu -3808(%rbp), %xmm0
+ 4387 20F1FFFF
+ 4388 36f4 F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 4388 B0F1FFFF
+ 4389 36fc F30F6F85 movdqu -3840(%rbp), %xmm0
+ 4389 00F1FFFF
+ 4390 3704 F30F7F85 movdqu %xmm0, -3680(%rbp)
+ 4390 A0F1FFFF
+ 4391 .LBB636:
+ 4392 .LBB637:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 4393 .loc 2 234 0
+ 4394 370c F30F6F85 movdqu -3680(%rbp), %xmm0
+ 4394 A0F1FFFF
+ 4395 3714 F30F6F8D movdqu -3664(%rbp), %xmm1
+ 4395 B0F1FFFF
+ 4396 371c 660FEBC1 por %xmm1, %xmm0
+ 4397 .LBE637:
+ 4398 .LBE636:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 4399 .loc 2 870 0
+ 4400 3720 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 4400 00F1FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 4401 .loc 2 872 0
+ 4402 3728 8B85ECF0 mov -3860(%rbp), %eax
+ 4402 FFFF
+ 4403 372e 48C1E004 salq $4, %rax
+ 4404 3732 480385C8 addq -3896(%rbp), %rax
+ 4404 F0FFFF
+ 4405 3739 660F6F00 movdqa (%rax), %xmm0
+ 4406 373d F30F7F85 movdqu %xmm0, -3632(%rbp)
+ 4406 D0F1FFFF
+ 4407 3745 F30F6F85 movdqu -3840(%rbp), %xmm0
+ 4407 00F1FFFF
+ 4408 374d F30F7F85 movdqu %xmm0, -3648(%rbp)
+ 4408 C0F1FFFF
+ 4409 .LBB638:
+ 4410 .LBB639:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+
GAS LISTING /tmp/ccMa7HLZ.s page 163
+
+
+ 4411 .loc 2 380 0
+ 4412 3755 F30F6F85 movdqu -3632(%rbp), %xmm0
+ 4412 D0F1FFFF
+ 4413 375d F30F7F85 movdqu %xmm0, -8224(%rbp)
+ 4413 E0DFFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 4414 .loc 2 381 0
+ 4415 3765 F30F6F85 movdqu -3648(%rbp), %xmm0
+ 4415 C0F1FFFF
+ 4416 376d F30F7F85 movdqu %xmm0, -8240(%rbp)
+ 4416 D0DFFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 4417 .loc 2 383 0
+ 4418 3775 C785ECF1 movl $0, -3604(%rbp)
+ 4418 FFFF0000
+ 4418 0000
+ 4419 377f EB5C jmp .L97
+ 4420 .L100:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 4421 .loc 2 385 0
+ 4422 3781 8B85ECF1 movl -3604(%rbp), %eax
+ 4422 FFFF
+ 4423 3787 89C0 mov %eax, %eax
+ 4424 3789 0FB68405 movzbl -8240(%rbp,%rax), %eax
+ 4424 D0DFFFFF
+ 4425 3791 84C0 testb %al, %al
+ 4426 3793 7912 jns .L98
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 4427 .loc 2 386 0
+ 4428 3795 8B85ECF1 movl -3604(%rbp), %eax
+ 4428 FFFF
+ 4429 379b 89C0 mov %eax, %eax
+ 4430 379d C68405F0 movb $0, -8208(%rbp,%rax)
+ 4430 DFFFFF00
+ 4431 37a5 EB2F jmp .L99
+ 4432 .L98:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 4433 .loc 2 388 0
+ 4434 37a7 8B8DECF1 movl -3604(%rbp), %ecx
+ 4434 FFFF
+ 4435 37ad 8B85ECF1 movl -3604(%rbp), %eax
+ 4435 FFFF
+ 4436 37b3 89C0 mov %eax, %eax
+ 4437 37b5 0FB68405 movzbl -8240(%rbp,%rax), %eax
+ 4437 D0DFFFFF
+ 4438 37bd 0FB6C0 movzbl %al, %eax
+ 4439 37c0 83E00F andl $15, %eax
+ 4440 37c3 4898 cltq
+ 4441 37c5 0FB69405 movzbl -8224(%rbp,%rax), %edx
+ 4441 E0DFFFFF
+ 4442 37cd 89C8 mov %ecx, %eax
+ 4443 37cf 889405F0 movb %dl, -8208(%rbp,%rax)
+ 4443 DFFFFF
+ 4444 .L99:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 4445 .loc 2 383 0
+ 4446 37d6 8385ECF1 addl $1, -3604(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 164
+
+
+ 4446 FFFF01
+ 4447 .L97:
+ 4448 37dd 83BDECF1 cmpl $15, -3604(%rbp)
+ 4448 FFFF0F
+ 4449 37e4 769B jbe .L100
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 4450 .loc 2 391 0
+ 4451 37e6 F30F6F85 movdqu -8208(%rbp), %xmm0
+ 4451 F0DFFFFF
+ 4452 .LBE639:
+ 4453 .LBE638:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 4454 .loc 2 872 0
+ 4455 37ee F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 4455 00F1FFFF
+ 4456 37f6 F30F6F85 movdqu -3856(%rbp), %xmm0
+ 4456 F0F0FFFF
+ 4457 37fe F30F7F85 movdqu %xmm0, -3584(%rbp)
+ 4457 00F2FFFF
+ 4458 3806 F30F6F85 movdqu -3840(%rbp), %xmm0
+ 4458 00F1FFFF
+ 4459 380e F30F7F85 movdqu %xmm0, -3600(%rbp)
+ 4459 F0F1FFFF
+ 4460 .LBB640:
+ 4461 .LBB641:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 4462 .loc 2 234 0
+ 4463 3816 F30F6F85 movdqu -3600(%rbp), %xmm0
+ 4463 F0F1FFFF
+ 4464 381e F30F6F8D movdqu -3584(%rbp), %xmm1
+ 4464 00F2FFFF
+ 4465 3826 660FEBC1 por %xmm1, %xmm0
+ 4466 .LBE641:
+ 4467 .LBE640:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 4468 .loc 2 874 0
+ 4469 382a F30F7F85 movdqu %xmm0, -3856(%rbp)
+ 4469 F0F0FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 4470 .loc 2 876 0
+ 4471 3832 660F6F05 movdqa vec_01(%rip), %xmm0
+ 4471 00000000
+ 4472 383a F30F6F8D movdqu -3824(%rbp), %xmm1
+ 4472 10F1FFFF
+ 4473 3842 F30F7F8D movdqu %xmm1, -3552(%rbp)
+ 4473 20F2FFFF
+ 4474 384a F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 4474 10F2FFFF
+ 4475 .LBB642:
+ 4476 .LBB643:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 4477 .loc 2 290 0
+ 4478 3852 F30F6F8D movdqu -3568(%rbp), %xmm1
+ 4478 10F2FFFF
+ 4479 385a F30F6F85 movdqu -3552(%rbp), %xmm0
+ 4479 20F2FFFF
+ 4480 3862 660FF8C1 psubb %xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 165
+
+
+ 4481 .LBE643:
+ 4482 .LBE642:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 4483 .loc 2 876 0
+ 4484 3866 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 4484 10F1FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4485 .loc 2 878 0
+ 4486 386e 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 4486 00000000
+ 4487 3876 F30F6F8D movdqu -3824(%rbp), %xmm1
+ 4487 10F1FFFF
+ 4488 387e F30F7F8D movdqu %xmm1, -3520(%rbp)
+ 4488 40F2FFFF
+ 4489 3886 F30F7F85 movdqu %xmm0, -3536(%rbp)
+ 4489 30F2FFFF
+ 4490 .LBB644:
+ 4491 .LBB645:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 4492 .loc 2 206 0
+ 4493 388e F30F6F85 movdqu -3536(%rbp), %xmm0
+ 4493 30F2FFFF
+ 4494 3896 F30F6F8D movdqu -3520(%rbp), %xmm1
+ 4494 40F2FFFF
+ 4495 389e 660FDBC1 pand %xmm1, %xmm0
+ 4496 .LBE645:
+ 4497 .LBE644:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4498 .loc 2 878 0
+ 4499 38a2 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 4499 10F1FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 4500 .loc 2 866 0
+ 4501 38aa 8385ECF0 addl $1, -3860(%rbp)
+ 4501 FFFF01
+ 4502 .L92:
+ 4503 38b1 83BDECF0 cmpl $15, -3860(%rbp)
+ 4503 FFFF0F
+ 4504 38b8 0F866DFD jbe .L101
+ 4504 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 4505 .loc 2 882 0
+ 4506 38be F30F6F85 movdqu -3856(%rbp), %xmm0
+ 4506 F0F0FFFF
+ 4507 .LBE629:
+ 4508 .LBE628:
+ 4509 .LBE627:
+ 4510 .LBE626:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 4511 .loc 2 1682 0
+ 4512 38c6 660F7F85 movdqa %xmm0, -9936(%rbp)
+ 4512 30D9FFFF
+ 4513 .LBB646:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 4514 .loc 2 1683 0
+ 4515 38ce 660F6F85 movdqa -9936(%rbp), %xmm0
+ 4515 30D9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 166
+
+
+ 4516 38d6 F30F7F85 movdqu %xmm0, -8320(%rbp)
+ 4516 80DFFFFF
+ 4517 38de E8000000 call KDbgWriterGet at PLT
+ 4517 00
+ 4518 38e3 4885C0 testq %rax, %rax
+ 4519 38e6 7479 je .L103
+ 4520 38e8 BF010000 movl $1, %edi
+ 4520 00
+ 4521 38ed E8000000 call KDbgCondToFlag at PLT
+ 4521 00
+ 4522 38f2 4889C6 movq %rax, %rsi
+ 4523 38f5 BF100000 movl $16, %edi
+ 4523 00
+ 4524 38fa E8000000 call KDbgTestModConds at PLT
+ 4524 00
+ 4525 38ff 84C0 testb %al, %al
+ 4526 3901 745E je .L103
+ 4527 3903 8B858CDF movl -8308(%rbp), %eax
+ 4527 FFFF
+ 4528 3909 89C7 movl %eax, %edi
+ 4529 390b E8F0C6FF call bswap_32
+ 4529 FF
+ 4530 3910 4189C5 movl %eax, %r13d
+ 4531 3913 8B8588DF movl -8312(%rbp), %eax
+ 4531 FFFF
+ 4532 3919 89C7 movl %eax, %edi
+ 4533 391b E8E0C6FF call bswap_32
+ 4533 FF
+ 4534 3920 4189C4 movl %eax, %r12d
+ 4535 3923 8B8584DF movl -8316(%rbp), %eax
+ 4535 FFFF
+ 4536 3929 89C7 movl %eax, %edi
+ 4537 392b E8D0C6FF call bswap_32
+ 4537 FF
+ 4538 3930 89C3 movl %eax, %ebx
+ 4539 3932 8B8580DF movl -8320(%rbp), %eax
+ 4539 FFFF
+ 4540 3938 89C7 movl %eax, %edi
+ 4541 393a E8C1C6FF call bswap_32
+ 4541 FF
+ 4542 393f 4589E9 movl %r13d, %r9d
+ 4543 3942 4589E0 movl %r12d, %r8d
+ 4544 3945 89D9 movl %ebx, %ecx
+ 4545 3947 89C2 movl %eax, %edx
+ 4546 3949 488D3500 leaq .LC0(%rip), %rsi
+ 4546 000000
+ 4547 3950 488D3D00 leaq .LC1(%rip), %rdi
+ 4547 000000
+ 4548 3957 B8000000 movl $0, %eax
+ 4548 00
+ 4549 395c E8000000 call KDbgMsg at PLT
+ 4549 00
+ 4550 .L103:
+ 4551 3961 660F6F85 movdqa -9936(%rbp), %xmm0
+ 4551 30D9FFFF
+ 4552 3969 F30F7F85 movdqu %xmm0, -3504(%rbp)
+ 4552 50F2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 167
+
+
+ 4553 .LBE646:
+ 4554 .LBB647:
+ 4555 .LBB648:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4556 .loc 2 667 0
+ 4557 3971 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 4557 00000000
+ 4558 3979 F30F6F8D movdqu -3504(%rbp), %xmm1
+ 4558 50F2FFFF
+ 4559 3981 F30F7F8D movdqu %xmm1, -3472(%rbp)
+ 4559 70F2FFFF
+ 4560 3989 F30F7F85 movdqu %xmm0, -3488(%rbp)
+ 4560 60F2FFFF
+ 4561 .LBB649:
+ 4562 .LBB650:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 4563 .loc 2 380 0
+ 4564 3991 F30F6F85 movdqu -3472(%rbp), %xmm0
+ 4564 70F2FFFF
+ 4565 3999 F30F7F85 movdqu %xmm0, -8176(%rbp)
+ 4565 10E0FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 4566 .loc 2 381 0
+ 4567 39a1 F30F6F85 movdqu -3488(%rbp), %xmm0
+ 4567 60F2FFFF
+ 4568 39a9 F30F7F85 movdqu %xmm0, -8192(%rbp)
+ 4568 00E0FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 4569 .loc 2 383 0
+ 4570 39b1 C7858CF2 movl $0, -3444(%rbp)
+ 4570 FFFF0000
+ 4570 0000
+ 4571 39bb EB5C jmp .L104
+ 4572 .L107:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 4573 .loc 2 385 0
+ 4574 39bd 8B858CF2 movl -3444(%rbp), %eax
+ 4574 FFFF
+ 4575 39c3 89C0 mov %eax, %eax
+ 4576 39c5 0FB68405 movzbl -8192(%rbp,%rax), %eax
+ 4576 00E0FFFF
+ 4577 39cd 84C0 testb %al, %al
+ 4578 39cf 7912 jns .L105
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 4579 .loc 2 386 0
+ 4580 39d1 8B858CF2 movl -3444(%rbp), %eax
+ 4580 FFFF
+ 4581 39d7 89C0 mov %eax, %eax
+ 4582 39d9 C6840520 movb $0, -8160(%rbp,%rax)
+ 4582 E0FFFF00
+ 4583 39e1 EB2F jmp .L106
+ 4584 .L105:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 4585 .loc 2 388 0
+ 4586 39e3 8B8D8CF2 movl -3444(%rbp), %ecx
+ 4586 FFFF
+ 4587 39e9 8B858CF2 movl -3444(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 168
+
+
+ 4587 FFFF
+ 4588 39ef 89C0 mov %eax, %eax
+ 4589 39f1 0FB68405 movzbl -8192(%rbp,%rax), %eax
+ 4589 00E0FFFF
+ 4590 39f9 0FB6C0 movzbl %al, %eax
+ 4591 39fc 83E00F andl $15, %eax
+ 4592 39ff 4898 cltq
+ 4593 3a01 0FB69405 movzbl -8176(%rbp,%rax), %edx
+ 4593 10E0FFFF
+ 4594 3a09 89C8 mov %ecx, %eax
+ 4595 3a0b 88940520 movb %dl, -8160(%rbp,%rax)
+ 4595 E0FFFF
+ 4596 .L106:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 4597 .loc 2 383 0
+ 4598 3a12 83858CF2 addl $1, -3444(%rbp)
+ 4598 FFFF01
+ 4599 .L104:
+ 4600 3a19 83BD8CF2 cmpl $15, -3444(%rbp)
+ 4600 FFFF0F
+ 4601 3a20 769B jbe .L107
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 4602 .loc 2 391 0
+ 4603 3a22 F30F6F85 movdqu -8160(%rbp), %xmm0
+ 4603 20E0FFFF
+ 4604 .LBE650:
+ 4605 .LBE649:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4606 .loc 2 667 0
+ 4607 3a2a F30F7F85 movdqu %xmm0, -3504(%rbp)
+ 4607 50F2FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4608 .loc 2 668 0
+ 4609 3a32 F30F6F85 movdqu -3504(%rbp), %xmm0
+ 4609 50F2FFFF
+ 4610 .LBE648:
+ 4611 .LBE647:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 4612 .loc 2 1684 0
+ 4613 3a3a 660F7F85 movdqa %xmm0, -9936(%rbp)
+ 4613 30D9FFFF
+ 4614 .LBB651:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 4615 .loc 2 1685 0
+ 4616 3a42 660F6F85 movdqa -9936(%rbp), %xmm0
+ 4616 30D9FFFF
+ 4617 3a4a F30F7F85 movdqu %xmm0, -8336(%rbp)
+ 4617 70DFFFFF
+ 4618 3a52 E8000000 call KDbgWriterGet at PLT
+ 4618 00
+ 4619 3a57 4885C0 testq %rax, %rax
+ 4620 3a5a 7479 je .L109
+ 4621 3a5c BF010000 movl $1, %edi
+ 4621 00
+ 4622 3a61 E8000000 call KDbgCondToFlag at PLT
+ 4622 00
+ 4623 3a66 4889C6 movq %rax, %rsi
+
GAS LISTING /tmp/ccMa7HLZ.s page 169
+
+
+ 4624 3a69 BF100000 movl $16, %edi
+ 4624 00
+ 4625 3a6e E8000000 call KDbgTestModConds at PLT
+ 4625 00
+ 4626 3a73 84C0 testb %al, %al
+ 4627 3a75 745E je .L109
+ 4628 3a77 8B857CDF movl -8324(%rbp), %eax
+ 4628 FFFF
+ 4629 3a7d 89C7 movl %eax, %edi
+ 4630 3a7f E87CC5FF call bswap_32
+ 4630 FF
+ 4631 3a84 4189C5 movl %eax, %r13d
+ 4632 3a87 8B8578DF movl -8328(%rbp), %eax
+ 4632 FFFF
+ 4633 3a8d 89C7 movl %eax, %edi
+ 4634 3a8f E86CC5FF call bswap_32
+ 4634 FF
+ 4635 3a94 4189C4 movl %eax, %r12d
+ 4636 3a97 8B8574DF movl -8332(%rbp), %eax
+ 4636 FFFF
+ 4637 3a9d 89C7 movl %eax, %edi
+ 4638 3a9f E85CC5FF call bswap_32
+ 4638 FF
+ 4639 3aa4 89C3 movl %eax, %ebx
+ 4640 3aa6 8B8570DF movl -8336(%rbp), %eax
+ 4640 FFFF
+ 4641 3aac 89C7 movl %eax, %edi
+ 4642 3aae E84DC5FF call bswap_32
+ 4642 FF
+ 4643 3ab3 4589E9 movl %r13d, %r9d
+ 4644 3ab6 4589E0 movl %r12d, %r8d
+ 4645 3ab9 89D9 movl %ebx, %ecx
+ 4646 3abb 89C2 movl %eax, %edx
+ 4647 3abd 488D3500 leaq .LC2(%rip), %rsi
+ 4647 000000
+ 4648 3ac4 488D3D00 leaq .LC1(%rip), %rdi
+ 4648 000000
+ 4649 3acb B8000000 movl $0, %eax
+ 4649 00
+ 4650 3ad0 E8000000 call KDbgMsg at PLT
+ 4650 00
+ 4651 .L109:
+ 4652 3ad5 660F6F85 movdqa -9936(%rbp), %xmm0
+ 4652 30D9FFFF
+ 4653 3add F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 4653 A0F2FFFF
+ 4654 3ae5 660F6F85 movdqa -9920(%rbp), %xmm0
+ 4654 40D9FFFF
+ 4655 3aed F30F7F85 movdqu %xmm0, -3440(%rbp)
+ 4655 90F2FFFF
+ 4656 .LBE651:
+ 4657 .LBB652:
+ 4658 .LBB653:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 4659 .loc 2 178 0
+ 4660 3af5 F30F6F85 movdqu -3440(%rbp), %xmm0
+ 4660 90F2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 170
+
+
+ 4661 3afd F30F6F8D movdqu -3424(%rbp), %xmm1
+ 4661 A0F2FFFF
+ 4662 3b05 660FEFC1 pxor %xmm1, %xmm0
+ 4663 .LBE653:
+ 4664 .LBE652:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 4665 .loc 2 1686 0
+ 4666 3b09 660F7F85 movdqa %xmm0, -9936(%rbp)
+ 4666 30D9FFFF
+ 4667 .LBB654:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 4668 .loc 2 1687 0
+ 4669 3b11 660F6F85 movdqa -9936(%rbp), %xmm0
+ 4669 30D9FFFF
+ 4670 3b19 F30F7F85 movdqu %xmm0, -8352(%rbp)
+ 4670 60DFFFFF
+ 4671 3b21 E8000000 call KDbgWriterGet at PLT
+ 4671 00
+ 4672 3b26 4885C0 testq %rax, %rax
+ 4673 3b29 7479 je .L111
+ 4674 3b2b BF010000 movl $1, %edi
+ 4674 00
+ 4675 3b30 E8000000 call KDbgCondToFlag at PLT
+ 4675 00
+ 4676 3b35 4889C6 movq %rax, %rsi
+ 4677 3b38 BF100000 movl $16, %edi
+ 4677 00
+ 4678 3b3d E8000000 call KDbgTestModConds at PLT
+ 4678 00
+ 4679 3b42 84C0 testb %al, %al
+ 4680 3b44 745E je .L111
+ 4681 3b46 8B856CDF movl -8340(%rbp), %eax
+ 4681 FFFF
+ 4682 3b4c 89C7 movl %eax, %edi
+ 4683 3b4e E8ADC4FF call bswap_32
+ 4683 FF
+ 4684 3b53 4189C5 movl %eax, %r13d
+ 4685 3b56 8B8568DF movl -8344(%rbp), %eax
+ 4685 FFFF
+ 4686 3b5c 89C7 movl %eax, %edi
+ 4687 3b5e E89DC4FF call bswap_32
+ 4687 FF
+ 4688 3b63 4189C4 movl %eax, %r12d
+ 4689 3b66 8B8564DF movl -8348(%rbp), %eax
+ 4689 FFFF
+ 4690 3b6c 89C7 movl %eax, %edi
+ 4691 3b6e E88DC4FF call bswap_32
+ 4691 FF
+ 4692 3b73 89C3 movl %eax, %ebx
+ 4693 3b75 8B8560DF movl -8352(%rbp), %eax
+ 4693 FFFF
+ 4694 3b7b 89C7 movl %eax, %edi
+ 4695 3b7d E87EC4FF call bswap_32
+ 4695 FF
+ 4696 3b82 4589E9 movl %r13d, %r9d
+ 4697 3b85 4589E0 movl %r12d, %r8d
+ 4698 3b88 89D9 movl %ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 171
+
+
+ 4699 3b8a 89C2 movl %eax, %edx
+ 4700 3b8c 488D3500 leaq .LC3(%rip), %rsi
+ 4700 000000
+ 4701 3b93 488D3D00 leaq .LC1(%rip), %rdi
+ 4701 000000
+ 4702 3b9a B8000000 movl $0, %eax
+ 4702 00
+ 4703 3b9f E8000000 call KDbgMsg at PLT
+ 4703 00
+ 4704 .L111:
+ 4705 3ba4 660F6F85 movdqa -9936(%rbp), %xmm0
+ 4705 30D9FFFF
+ 4706 3bac F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 4706 B0F2FFFF
+ 4707 .LBE654:
+ 4708 .LBB655:
+ 4709 .LBB656:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 4710 .loc 2 1357 0
+ 4711 3bb4 F30F6F85 movdqu -3408(%rbp), %xmm0
+ 4711 B0F2FFFF
+ 4712 3bbc F30F7F85 movdqu %xmm0, -8144(%rbp)
+ 4712 30E0FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 4713 .loc 2 1358 0
+ 4714 3bc4 8B853CE0 movl -8132(%rbp), %eax
+ 4714 FFFF
+ 4715 3bca 898538E0 movl %eax, -8136(%rbp)
+ 4715 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 4716 .loc 2 1359 0
+ 4717 3bd0 8B853CE0 movl -8132(%rbp), %eax
+ 4717 FFFF
+ 4718 3bd6 898534E0 movl %eax, -8140(%rbp)
+ 4718 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 4719 .loc 2 1360 0
+ 4720 3bdc 8B853CE0 movl -8132(%rbp), %eax
+ 4720 FFFF
+ 4721 3be2 898530E0 movl %eax, -8144(%rbp)
+ 4721 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 4722 .loc 2 1361 0
+ 4723 3be8 F30F6F85 movdqu -8144(%rbp), %xmm0
+ 4723 30E0FFFF
+ 4724 .LBE656:
+ 4725 .LBE655:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 4726 .loc 2 1688 0
+ 4727 3bf0 660F7F85 movdqa %xmm0, -9936(%rbp)
+ 4727 30D9FFFF
+ 4728 .LBB657:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 4729 .loc 2 1689 0
+ 4730 3bf8 660F6F85 movdqa -9936(%rbp), %xmm0
+ 4730 30D9FFFF
+ 4731 3c00 F30F7F85 movdqu %xmm0, -8368(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 172
+
+
+ 4731 50DFFFFF
+ 4732 3c08 E8000000 call KDbgWriterGet at PLT
+ 4732 00
+ 4733 3c0d 4885C0 testq %rax, %rax
+ 4734 3c10 7479 je .L113
+ 4735 3c12 BF010000 movl $1, %edi
+ 4735 00
+ 4736 3c17 E8000000 call KDbgCondToFlag at PLT
+ 4736 00
+ 4737 3c1c 4889C6 movq %rax, %rsi
+ 4738 3c1f BF100000 movl $16, %edi
+ 4738 00
+ 4739 3c24 E8000000 call KDbgTestModConds at PLT
+ 4739 00
+ 4740 3c29 84C0 testb %al, %al
+ 4741 3c2b 745E je .L113
+ 4742 3c2d 8B855CDF movl -8356(%rbp), %eax
+ 4742 FFFF
+ 4743 3c33 89C7 movl %eax, %edi
+ 4744 3c35 E8C6C3FF call bswap_32
+ 4744 FF
+ 4745 3c3a 4189C5 movl %eax, %r13d
+ 4746 3c3d 8B8558DF movl -8360(%rbp), %eax
+ 4746 FFFF
+ 4747 3c43 89C7 movl %eax, %edi
+ 4748 3c45 E8B6C3FF call bswap_32
+ 4748 FF
+ 4749 3c4a 4189C4 movl %eax, %r12d
+ 4750 3c4d 8B8554DF movl -8364(%rbp), %eax
+ 4750 FFFF
+ 4751 3c53 89C7 movl %eax, %edi
+ 4752 3c55 E8A6C3FF call bswap_32
+ 4752 FF
+ 4753 3c5a 89C3 movl %eax, %ebx
+ 4754 3c5c 8B8550DF movl -8368(%rbp), %eax
+ 4754 FFFF
+ 4755 3c62 89C7 movl %eax, %edi
+ 4756 3c64 E897C3FF call bswap_32
+ 4756 FF
+ 4757 3c69 4589E9 movl %r13d, %r9d
+ 4758 3c6c 4589E0 movl %r12d, %r8d
+ 4759 3c6f 89D9 movl %ebx, %ecx
+ 4760 3c71 89C2 movl %eax, %edx
+ 4761 3c73 488D3500 leaq .LC4(%rip), %rsi
+ 4761 000000
+ 4762 3c7a 488D3D00 leaq .LC1(%rip), %rdi
+ 4762 000000
+ 4763 3c81 B8000000 movl $0, %eax
+ 4763 00
+ 4764 3c86 E8000000 call KDbgMsg at PLT
+ 4764 00
+ 4765 .L113:
+ 4766 .LBE657:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 4767 .loc 2 1690 0
+ 4768 3c8b 660F6F85 movdqa -9936(%rbp), %xmm0
+ 4768 30D9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 173
+
+
+ 4769 .LBE623:
+ 4770 .LBE622:
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x10,5);
+ 4771 .loc 2 1748 0
+ 4772 3c93 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 4772 20E6FFFF
+ 4773 3c9b F30F6F85 movdqu -6640(%rbp), %xmm0
+ 4773 10E6FFFF
+ 4774 3ca3 F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 4774 C0F2FFFF
+ 4775 .LBB658:
+ 4776 .LBB659:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4777 .loc 2 1565 0
+ 4778 3cab F30F6F85 movdqu -3392(%rbp), %xmm0
+ 4778 C0F2FFFF
+ 4779 3cb3 660F7F85 movdqa %xmm0, -9888(%rbp)
+ 4779 60D9FFFF
+ 4780 3cbb 660F6F85 movdqa -9888(%rbp), %xmm0
+ 4780 60D9FFFF
+ 4781 3cc3 F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 4781 D0F2FFFF
+ 4782 .LBB660:
+ 4783 .LBB661:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 4784 .loc 2 1282 0
+ 4785 3ccb F30F6F85 movdqu -3376(%rbp), %xmm0
+ 4785 D0F2FFFF
+ 4786 3cd3 F30F7F85 movdqu %xmm0, -8128(%rbp)
+ 4786 40E0FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 4787 .loc 2 1283 0
+ 4788 3cdb 8B8548E0 movl -8120(%rbp), %eax
+ 4788 FFFF
+ 4789 3ce1 89854CE0 movl %eax, -8116(%rbp)
+ 4789 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 4790 .loc 2 1284 0
+ 4791 3ce7 8B8544E0 movl -8124(%rbp), %eax
+ 4791 FFFF
+ 4792 3ced 898548E0 movl %eax, -8120(%rbp)
+ 4792 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 4793 .loc 2 1285 0
+ 4794 3cf3 8B8540E0 movl -8128(%rbp), %eax
+ 4794 FFFF
+ 4795 3cf9 898544E0 movl %eax, -8124(%rbp)
+ 4795 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 4796 .loc 2 1286 0
+ 4797 3cff C78540E0 movl $0, -8128(%rbp)
+ 4797 FFFF0000
+ 4797 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 4798 .loc 2 1287 0
+ 4799 3d09 F30F6F85 movdqu -8128(%rbp), %xmm0
+ 4799 40E0FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 174
+
+
+ 4800 .LBE661:
+ 4801 .LBE660:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4802 .loc 2 1567 0
+ 4803 3d11 660F7F85 movdqa %xmm0, -9888(%rbp)
+ 4803 60D9FFFF
+ 4804 3d19 660F6F85 movdqa -9888(%rbp), %xmm0
+ 4804 60D9FFFF
+ 4805 3d21 660FEF85 pxor -3392(%rbp), %xmm0
+ 4805 C0F2FFFF
+ 4806 3d29 F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 4806 C0F2FFFF
+ 4807 3d31 660F6F85 movdqa -9888(%rbp), %xmm0
+ 4807 60D9FFFF
+ 4808 3d39 F30F7F85 movdqu %xmm0, -3360(%rbp)
+ 4808 E0F2FFFF
+ 4809 .LBB662:
+ 4810 .LBB663:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 4811 .loc 2 1282 0
+ 4812 3d41 F30F6F85 movdqu -3360(%rbp), %xmm0
+ 4812 E0F2FFFF
+ 4813 3d49 F30F7F85 movdqu %xmm0, -8112(%rbp)
+ 4813 50E0FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 4814 .loc 2 1283 0
+ 4815 3d51 8B8558E0 movl -8104(%rbp), %eax
+ 4815 FFFF
+ 4816 3d57 89855CE0 movl %eax, -8100(%rbp)
+ 4816 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 4817 .loc 2 1284 0
+ 4818 3d5d 8B8554E0 movl -8108(%rbp), %eax
+ 4818 FFFF
+ 4819 3d63 898558E0 movl %eax, -8104(%rbp)
+ 4819 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 4820 .loc 2 1285 0
+ 4821 3d69 8B8550E0 movl -8112(%rbp), %eax
+ 4821 FFFF
+ 4822 3d6f 898554E0 movl %eax, -8108(%rbp)
+ 4822 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 4823 .loc 2 1286 0
+ 4824 3d75 C78550E0 movl $0, -8112(%rbp)
+ 4824 FFFF0000
+ 4824 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 4825 .loc 2 1287 0
+ 4826 3d7f F30F6F85 movdqu -8112(%rbp), %xmm0
+ 4826 50E0FFFF
+ 4827 .LBE663:
+ 4828 .LBE662:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4829 .loc 2 1568 0
+ 4830 3d87 660F7F85 movdqa %xmm0, -9888(%rbp)
+ 4830 60D9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 175
+
+
+ 4831 3d8f 660F6F85 movdqa -9888(%rbp), %xmm0
+ 4831 60D9FFFF
+ 4832 3d97 660FEF85 pxor -3392(%rbp), %xmm0
+ 4832 C0F2FFFF
+ 4833 3d9f F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 4833 C0F2FFFF
+ 4834 3da7 660F6F85 movdqa -9888(%rbp), %xmm0
+ 4834 60D9FFFF
+ 4835 3daf F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 4835 F0F2FFFF
+ 4836 .LBB664:
+ 4837 .LBB665:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 4838 .loc 2 1282 0
+ 4839 3db7 F30F6F85 movdqu -3344(%rbp), %xmm0
+ 4839 F0F2FFFF
+ 4840 3dbf F30F7F85 movdqu %xmm0, -8096(%rbp)
+ 4840 60E0FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 4841 .loc 2 1283 0
+ 4842 3dc7 8B8568E0 movl -8088(%rbp), %eax
+ 4842 FFFF
+ 4843 3dcd 89856CE0 movl %eax, -8084(%rbp)
+ 4843 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 4844 .loc 2 1284 0
+ 4845 3dd3 8B8564E0 movl -8092(%rbp), %eax
+ 4845 FFFF
+ 4846 3dd9 898568E0 movl %eax, -8088(%rbp)
+ 4846 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 4847 .loc 2 1285 0
+ 4848 3ddf 8B8560E0 movl -8096(%rbp), %eax
+ 4848 FFFF
+ 4849 3de5 898564E0 movl %eax, -8092(%rbp)
+ 4849 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 4850 .loc 2 1286 0
+ 4851 3deb C78560E0 movl $0, -8096(%rbp)
+ 4851 FFFF0000
+ 4851 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 4852 .loc 2 1287 0
+ 4853 3df5 F30F6F85 movdqu -8096(%rbp), %xmm0
+ 4853 60E0FFFF
+ 4854 .LBE665:
+ 4855 .LBE664:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4856 .loc 2 1569 0
+ 4857 3dfd 660F7F85 movdqa %xmm0, -9888(%rbp)
+ 4857 60D9FFFF
+ 4858 3e05 660F6F85 movdqa -9888(%rbp), %xmm0
+ 4858 60D9FFFF
+ 4859 3e0d 660FEF85 pxor -3392(%rbp), %xmm0
+ 4859 C0F2FFFF
+ 4860 3e15 F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 4860 C0F2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 176
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4861 .loc 2 1571 0
+ 4862 3e1d F30F6F85 movdqu -3392(%rbp), %xmm0
+ 4862 C0F2FFFF
+ 4863 .LBE659:
+ 4864 .LBE658:
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x10,5);
+ 4865 .loc 2 1748 0
+ 4866 3e25 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 4866 10E6FFFF
+ 4867 3e2d F30F6F85 movdqu -6624(%rbp), %xmm0
+ 4867 20E6FFFF
+ 4868 3e35 F30F6F8D movdqu -6640(%rbp), %xmm1
+ 4868 10E6FFFF
+ 4869 3e3d 660FEFC1 pxor %xmm1, %xmm0
+ 4870 3e41 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 4870 10E6FFFF
+ 4871 3e49 488B85B8 movq -9544(%rbp), %rax
+ 4871 DAFFFF
+ 4872 3e50 4883C050 addq $80, %rax
+ 4873 3e54 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 4873 10E6FFFF
+ 4874 3e5c F30F7F00 movdqu %xmm0, (%rax)
+ 4875 3e60 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 4875 10E6FFFF
+ 4876 3e68 F30F7F85 movdqu %xmm0, -3312(%rbp)
+ 4876 10F3FFFF
+ 4877 .LBB666:
+ 4878 .LBB667:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4879 .loc 2 1681 0
+ 4880 3e70 B8200000 movl $32, %eax
+ 4880 00
+ 4881 3e75 660F6F05 movdqa vec_00(%rip), %xmm0
+ 4881 00000000
+ 4882 3e7d F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 4882 30F3FFFF
+ 4883 3e85 89852CF3 movl %eax, -3284(%rbp)
+ 4883 FFFF
+ 4884 .LBB668:
+ 4885 .LBB669:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 4886 .loc 2 522 0
+ 4887 3e8b F30F6F85 movdqu -3280(%rbp), %xmm0
+ 4887 30F3FFFF
+ 4888 3e93 F30F7F85 movdqu %xmm0, -8016(%rbp)
+ 4888 B0E0FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 4889 .loc 2 523 0
+ 4890 3e9b B8030000 movl $3, %eax
+ 4890 00
+ 4891 3ea0 4898 cltq
+ 4892 3ea2 8B952CF3 movl -3284(%rbp), %edx
+ 4892 FFFF
+ 4893 3ea8 899485B0 movl %edx, -8016(%rbp,%rax,4)
+ 4893 E0FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 177
+
+
+ 4894 .loc 2 524 0
+ 4895 3eaf F30F6F85 movdqu -8016(%rbp), %xmm0
+ 4895 B0E0FFFF
+ 4896 3eb7 F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 4896 30F3FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4897 .loc 2 526 0
+ 4898 3ebf F30F6F85 movdqu -3280(%rbp), %xmm0
+ 4898 30F3FFFF
+ 4899 .LBE669:
+ 4900 .LBE668:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4901 .loc 2 1681 0
+ 4902 3ec7 660F7F85 movdqa %xmm0, -9856(%rbp)
+ 4902 80D9FFFF
+ 4903 3ecf F30F6F85 movdqu -3312(%rbp), %xmm0
+ 4903 10F3FFFF
+ 4904 3ed7 F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 4904 40F3FFFF
+ 4905 3edf F30F6F85 movdqu -3264(%rbp), %xmm0
+ 4905 40F3FFFF
+ 4906 3ee7 F30F7F85 movdqu %xmm0, -3232(%rbp)
+ 4906 60F3FFFF
+ 4907 3eef 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 4907 000000
+ 4908 3ef6 48898558 movq %rax, -3240(%rbp)
+ 4908 F3FFFF
+ 4909 .LBB670:
+ 4910 .LBB671:
+ 4911 .LBB672:
+ 4912 .LBB673:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 4913 .loc 2 851 0
+ 4914 3efd 660F6F05 movdqa vec_00(%rip), %xmm0
+ 4914 00000000
+ 4915 3f05 F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 4915 80F3FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4916 .loc 2 854 0
+ 4917 3f0d 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 4917 00000000
+ 4918 3f15 F30F6F8D movdqu -3232(%rbp), %xmm1
+ 4918 60F3FFFF
+ 4919 3f1d F30F7F8D movdqu %xmm1, -3120(%rbp)
+ 4919 D0F3FFFF
+ 4920 3f25 F30F7F85 movdqu %xmm0, -3136(%rbp)
+ 4920 C0F3FFFF
+ 4921 .LBB674:
+ 4922 .LBB675:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 4923 .loc 2 206 0
+ 4924 3f2d F30F6F85 movdqu -3136(%rbp), %xmm0
+ 4924 C0F3FFFF
+ 4925 3f35 F30F6F8D movdqu -3120(%rbp), %xmm1
+ 4925 D0F3FFFF
+ 4926 3f3d 660FDBC1 pand %xmm1, %xmm0
+ 4927 .LBE675:
+
GAS LISTING /tmp/ccMa7HLZ.s page 178
+
+
+ 4928 .LBE674:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4929 .loc 2 854 0
+ 4930 3f41 F30F7F85 movdqu %xmm0, -3152(%rbp)
+ 4930 B0F3FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 4931 .loc 2 862 0
+ 4932 3f49 660F6F05 movdqa vec_10(%rip), %xmm0
+ 4932 00000000
+ 4933 3f51 F30F6F8D movdqu -3232(%rbp), %xmm1
+ 4933 60F3FFFF
+ 4934 3f59 F30F7F8D movdqu %xmm1, -3088(%rbp)
+ 4934 F0F3FFFF
+ 4935 3f61 F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 4935 E0F3FFFF
+ 4936 .LBB676:
+ 4937 .loc 2 2642 0
+ 4938 3f69 0FB685F0 movzbl -3088(%rbp), %eax
+ 4938 F3FFFF
+ 4939 3f70 0FB695E0 movzbl -3104(%rbp), %edx
+ 4939 F3FFFF
+ 4940 3f77 0FB6C0 movzbl %al, %eax
+ 4941 3f7a 6689858E movw %ax, -10354(%rbp)
+ 4941 D7FFFF
+ 4942 3f81 0FB7858E movzwl -10354(%rbp), %eax
+ 4942 D7FFFF
+ 4943 3f88 F6F2 divb %dl
+ 4944 3f8a 4189C7 movl %eax, %r15d
+ 4945 3f8d 0FB685F1 movzbl -3087(%rbp), %eax
+ 4945 F3FFFF
+ 4946 3f94 0FB695E1 movzbl -3103(%rbp), %edx
+ 4946 F3FFFF
+ 4947 3f9b 0FB6C0 movzbl %al, %eax
+ 4948 3f9e 6689858E movw %ax, -10354(%rbp)
+ 4948 D7FFFF
+ 4949 3fa5 0FB7858E movzwl -10354(%rbp), %eax
+ 4949 D7FFFF
+ 4950 3fac F6F2 divb %dl
+ 4951 3fae 88859FD9 movb %al, -9825(%rbp)
+ 4951 FFFF
+ 4952 3fb4 0FB685F2 movzbl -3086(%rbp), %eax
+ 4952 F3FFFF
+ 4953 3fbb 0FB695E2 movzbl -3102(%rbp), %edx
+ 4953 F3FFFF
+ 4954 3fc2 0FB6C0 movzbl %al, %eax
+ 4955 3fc5 6689858E movw %ax, -10354(%rbp)
+ 4955 D7FFFF
+ 4956 3fcc 0FB7858E movzwl -10354(%rbp), %eax
+ 4956 D7FFFF
+ 4957 3fd3 F6F2 divb %dl
+ 4958 3fd5 88859ED9 movb %al, -9826(%rbp)
+ 4958 FFFF
+ 4959 3fdb 0FB685F3 movzbl -3085(%rbp), %eax
+ 4959 F3FFFF
+ 4960 3fe2 0FB695E3 movzbl -3101(%rbp), %edx
+ 4960 F3FFFF
+ 4961 3fe9 0FB6C0 movzbl %al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 179
+
+
+ 4962 3fec 6689858E movw %ax, -10354(%rbp)
+ 4962 D7FFFF
+ 4963 3ff3 0FB7858E movzwl -10354(%rbp), %eax
+ 4963 D7FFFF
+ 4964 3ffa F6F2 divb %dl
+ 4965 3ffc 88859DD9 movb %al, -9827(%rbp)
+ 4965 FFFF
+ 4966 4002 0FB685F4 movzbl -3084(%rbp), %eax
+ 4966 F3FFFF
+ 4967 4009 0FB695E4 movzbl -3100(%rbp), %edx
+ 4967 F3FFFF
+ 4968 4010 0FB6C0 movzbl %al, %eax
+ 4969 4013 6689858E movw %ax, -10354(%rbp)
+ 4969 D7FFFF
+ 4970 401a 0FB7858E movzwl -10354(%rbp), %eax
+ 4970 D7FFFF
+ 4971 4021 F6F2 divb %dl
+ 4972 4023 88859CD9 movb %al, -9828(%rbp)
+ 4972 FFFF
+ 4973 4029 0FB685F5 movzbl -3083(%rbp), %eax
+ 4973 F3FFFF
+ 4974 4030 0FB695E5 movzbl -3099(%rbp), %edx
+ 4974 F3FFFF
+ 4975 4037 0FB6C0 movzbl %al, %eax
+ 4976 403a 6689858E movw %ax, -10354(%rbp)
+ 4976 D7FFFF
+ 4977 4041 0FB7858E movzwl -10354(%rbp), %eax
+ 4977 D7FFFF
+ 4978 4048 F6F2 divb %dl
+ 4979 404a 4189C1 movl %eax, %r9d
+ 4980 404d 0FB685F6 movzbl -3082(%rbp), %eax
+ 4980 F3FFFF
+ 4981 4054 0FB695E6 movzbl -3098(%rbp), %edx
+ 4981 F3FFFF
+ 4982 405b 0FB6C0 movzbl %al, %eax
+ 4983 405e 6689858E movw %ax, -10354(%rbp)
+ 4983 D7FFFF
+ 4984 4065 0FB7858E movzwl -10354(%rbp), %eax
+ 4984 D7FFFF
+ 4985 406c F6F2 divb %dl
+ 4986 406e 89C7 movl %eax, %edi
+ 4987 4070 0FB685F7 movzbl -3081(%rbp), %eax
+ 4987 F3FFFF
+ 4988 4077 0FB695E7 movzbl -3097(%rbp), %edx
+ 4988 F3FFFF
+ 4989 407e 0FB6C0 movzbl %al, %eax
+ 4990 4081 6689858E movw %ax, -10354(%rbp)
+ 4990 D7FFFF
+ 4991 4088 0FB7858E movzwl -10354(%rbp), %eax
+ 4991 D7FFFF
+ 4992 408f F6F2 divb %dl
+ 4993 4091 89C3 movl %eax, %ebx
+ 4994 4093 0FB685F8 movzbl -3080(%rbp), %eax
+ 4994 F3FFFF
+ 4995 409a 0FB695E8 movzbl -3096(%rbp), %edx
+ 4995 F3FFFF
+ 4996 40a1 0FB6C0 movzbl %al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 180
+
+
+ 4997 40a4 6689858E movw %ax, -10354(%rbp)
+ 4997 D7FFFF
+ 4998 40ab 0FB7858E movzwl -10354(%rbp), %eax
+ 4998 D7FFFF
+ 4999 40b2 F6F2 divb %dl
+ 5000 40b4 4189C2 movl %eax, %r10d
+ 5001 40b7 0FB685F9 movzbl -3079(%rbp), %eax
+ 5001 F3FFFF
+ 5002 40be 0FB695E9 movzbl -3095(%rbp), %edx
+ 5002 F3FFFF
+ 5003 40c5 0FB6C0 movzbl %al, %eax
+ 5004 40c8 6689858E movw %ax, -10354(%rbp)
+ 5004 D7FFFF
+ 5005 40cf 0FB7858E movzwl -10354(%rbp), %eax
+ 5005 D7FFFF
+ 5006 40d6 F6F2 divb %dl
+ 5007 40d8 4189C3 movl %eax, %r11d
+ 5008 40db 0FB685FA movzbl -3078(%rbp), %eax
+ 5008 F3FFFF
+ 5009 40e2 0FB695EA movzbl -3094(%rbp), %edx
+ 5009 F3FFFF
+ 5010 40e9 0FB6C0 movzbl %al, %eax
+ 5011 40ec 6689858E movw %ax, -10354(%rbp)
+ 5011 D7FFFF
+ 5012 40f3 0FB7858E movzwl -10354(%rbp), %eax
+ 5012 D7FFFF
+ 5013 40fa F6F2 divb %dl
+ 5014 40fc 4189C4 movl %eax, %r12d
+ 5015 40ff 0FB685FB movzbl -3077(%rbp), %eax
+ 5015 F3FFFF
+ 5016 4106 0FB695EB movzbl -3093(%rbp), %edx
+ 5016 F3FFFF
+ 5017 410d 0FB6C0 movzbl %al, %eax
+ 5018 4110 6689858E movw %ax, -10354(%rbp)
+ 5018 D7FFFF
+ 5019 4117 0FB7858E movzwl -10354(%rbp), %eax
+ 5019 D7FFFF
+ 5020 411e F6F2 divb %dl
+ 5021 4120 4189C5 movl %eax, %r13d
+ 5022 4123 0FB685FC movzbl -3076(%rbp), %eax
+ 5022 F3FFFF
+ 5023 412a 0FB695EC movzbl -3092(%rbp), %edx
+ 5023 F3FFFF
+ 5024 4131 0FB6C0 movzbl %al, %eax
+ 5025 4134 6689858E movw %ax, -10354(%rbp)
+ 5025 D7FFFF
+ 5026 413b 0FB7858E movzwl -10354(%rbp), %eax
+ 5026 D7FFFF
+ 5027 4142 F6F2 divb %dl
+ 5028 4144 4189C6 movl %eax, %r14d
+ 5029 4147 0FB685FD movzbl -3075(%rbp), %eax
+ 5029 F3FFFF
+ 5030 414e 0FB695ED movzbl -3091(%rbp), %edx
+ 5030 F3FFFF
+ 5031 4155 0FB6C0 movzbl %al, %eax
+ 5032 4158 6689858E movw %ax, -10354(%rbp)
+ 5032 D7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 181
+
+
+ 5033 415f 0FB7858E movzwl -10354(%rbp), %eax
+ 5033 D7FFFF
+ 5034 4166 F6F2 divb %dl
+ 5035 4168 4189C0 movl %eax, %r8d
+ 5036 416b 0FB685FE movzbl -3074(%rbp), %eax
+ 5036 F3FFFF
+ 5037 4172 0FB695EE movzbl -3090(%rbp), %edx
+ 5037 F3FFFF
+ 5038 4179 0FB6C0 movzbl %al, %eax
+ 5039 417c 6689858E movw %ax, -10354(%rbp)
+ 5039 D7FFFF
+ 5040 4183 0FB7858E movzwl -10354(%rbp), %eax
+ 5040 D7FFFF
+ 5041 418a F6F2 divb %dl
+ 5042 418c 89C6 movl %eax, %esi
+ 5043 418e 0FB685FF movzbl -3073(%rbp), %eax
+ 5043 F3FFFF
+ 5044 4195 0FB695EF movzbl -3089(%rbp), %edx
+ 5044 F3FFFF
+ 5045 419c 0FB6C0 movzbl %al, %eax
+ 5046 419f 6689858E movw %ax, -10354(%rbp)
+ 5046 D7FFFF
+ 5047 41a6 0FB7858E movzwl -10354(%rbp), %eax
+ 5047 D7FFFF
+ 5048 41ad F6F2 divb %dl
+ 5049 41af 89C1 movl %eax, %ecx
+ 5050 .LBB677:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 5051 .loc 2 346 0
+ 5052 41b1 0FB6D3 movzbl %bl, %edx
+ 5053 41b4 400FB6C7 movzbl %dil, %eax
+ 5054 41b8 48C1E208 salq $8, %rdx
+ 5055 41bc 4809C2 orq %rax, %rdx
+ 5056 41bf 410FB6C1 movzbl %r9b, %eax
+ 5057 41c3 48C1E208 salq $8, %rdx
+ 5058 41c7 4809C2 orq %rax, %rdx
+ 5059 41ca 0FB6859C movzbl -9828(%rbp), %eax
+ 5059 D9FFFF
+ 5060 41d1 48C1E208 salq $8, %rdx
+ 5061 41d5 4809C2 orq %rax, %rdx
+ 5062 41d8 0FB6859D movzbl -9827(%rbp), %eax
+ 5062 D9FFFF
+ 5063 41df 48C1E208 salq $8, %rdx
+ 5064 41e3 4809C2 orq %rax, %rdx
+ 5065 41e6 0FB6859E movzbl -9826(%rbp), %eax
+ 5065 D9FFFF
+ 5066 41ed 48C1E208 salq $8, %rdx
+ 5067 41f1 4809C2 orq %rax, %rdx
+ 5068 41f4 0FB6859F movzbl -9825(%rbp), %eax
+ 5068 D9FFFF
+ 5069 41fb 48C1E208 salq $8, %rdx
+ 5070 41ff 4809C2 orq %rax, %rdx
+ 5071 4202 410FB6C7 movzbl %r15b, %eax
+ 5072 4206 48C1E208 salq $8, %rdx
+ 5073 420a 4809C2 orq %rax, %rdx
+ 5074 420d 0FB6C1 movzbl %cl, %eax
+ 5075 4210 400FB6CE movzbl %sil, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 182
+
+
+ 5076 4214 48C1E008 salq $8, %rax
+ 5077 4218 4809C8 orq %rcx, %rax
+ 5078 421b 410FB6C8 movzbl %r8b, %ecx
+ 5079 421f 48C1E008 salq $8, %rax
+ 5080 4223 4809C8 orq %rcx, %rax
+ 5081 4226 410FB6CE movzbl %r14b, %ecx
+ 5082 422a 48C1E008 salq $8, %rax
+ 5083 422e 4809C8 orq %rcx, %rax
+ 5084 4231 410FB6CD movzbl %r13b, %ecx
+ 5085 4235 48C1E008 salq $8, %rax
+ 5086 4239 4809C8 orq %rcx, %rax
+ 5087 423c 410FB6CC movzbl %r12b, %ecx
+ 5088 4240 48C1E008 salq $8, %rax
+ 5089 4244 4809C8 orq %rcx, %rax
+ 5090 4247 410FB6CB movzbl %r11b, %ecx
+ 5091 424b 48C1E008 salq $8, %rax
+ 5092 424f 4809C8 orq %rcx, %rax
+ 5093 4252 410FB6CA movzbl %r10b, %ecx
+ 5094 4256 48C1E008 salq $8, %rax
+ 5095 425a 4809C8 orq %rcx, %rax
+ 5096 425d 488995D0 movq %rdx, -10288(%rbp)
+ 5096 D7FFFF
+ 5097 4264 488985D8 movq %rax, -10280(%rbp)
+ 5097 D7FFFF
+ 5098 426b 660F6F85 movdqa -10288(%rbp), %xmm0
+ 5098 D0D7FFFF
+ 5099 .LBE677:
+ 5100 .LBE676:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 5101 .loc 2 862 0
+ 5102 4273 F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 5102 A0F3FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 5103 .loc 2 866 0
+ 5104 427b C7857CF3 movl $0, -3204(%rbp)
+ 5104 FFFF0000
+ 5104 0000
+ 5105 4285 E9860200 jmp .L114
+ 5105 00
+ 5106 .L123:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5107 .loc 2 868 0
+ 5108 428a 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 5108 00000000
+ 5109 4292 F30F7F85 movdqu %xmm0, -3056(%rbp)
+ 5109 10F4FFFF
+ 5110 429a F30F6F85 movdqu -3168(%rbp), %xmm0
+ 5110 A0F3FFFF
+ 5111 42a2 F30F7F85 movdqu %xmm0, -3072(%rbp)
+ 5111 00F4FFFF
+ 5112 .LBB678:
+ 5113 .LBB679:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 5114 .loc 2 380 0
+ 5115 42aa F30F6F85 movdqu -3056(%rbp), %xmm0
+ 5115 10F4FFFF
+ 5116 42b2 F30F7F85 movdqu %xmm0, -7984(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 183
+
+
+ 5116 D0E0FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 5117 .loc 2 381 0
+ 5118 42ba F30F6F85 movdqu -3072(%rbp), %xmm0
+ 5118 00F4FFFF
+ 5119 42c2 F30F7F85 movdqu %xmm0, -8000(%rbp)
+ 5119 C0E0FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 5120 .loc 2 383 0
+ 5121 42ca C7852CF4 movl $0, -3028(%rbp)
+ 5121 FFFF0000
+ 5121 0000
+ 5122 42d4 EB5C jmp .L115
+ 5123 .L118:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 5124 .loc 2 385 0
+ 5125 42d6 8B852CF4 movl -3028(%rbp), %eax
+ 5125 FFFF
+ 5126 42dc 89C0 mov %eax, %eax
+ 5127 42de 0FB68405 movzbl -8000(%rbp,%rax), %eax
+ 5127 C0E0FFFF
+ 5128 42e6 84C0 testb %al, %al
+ 5129 42e8 7912 jns .L116
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 5130 .loc 2 386 0
+ 5131 42ea 8B852CF4 movl -3028(%rbp), %eax
+ 5131 FFFF
+ 5132 42f0 89C0 mov %eax, %eax
+ 5133 42f2 C68405E0 movb $0, -7968(%rbp,%rax)
+ 5133 E0FFFF00
+ 5134 42fa EB2F jmp .L117
+ 5135 .L116:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5136 .loc 2 388 0
+ 5137 42fc 8B8D2CF4 movl -3028(%rbp), %ecx
+ 5137 FFFF
+ 5138 4302 8B852CF4 movl -3028(%rbp), %eax
+ 5138 FFFF
+ 5139 4308 89C0 mov %eax, %eax
+ 5140 430a 0FB68405 movzbl -8000(%rbp,%rax), %eax
+ 5140 C0E0FFFF
+ 5141 4312 0FB6C0 movzbl %al, %eax
+ 5142 4315 83E00F andl $15, %eax
+ 5143 4318 4898 cltq
+ 5144 431a 0FB69405 movzbl -7984(%rbp,%rax), %edx
+ 5144 D0E0FFFF
+ 5145 4322 89C8 mov %ecx, %eax
+ 5146 4324 889405E0 movb %dl, -7968(%rbp,%rax)
+ 5146 E0FFFF
+ 5147 .L117:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 5148 .loc 2 383 0
+ 5149 432b 83852CF4 addl $1, -3028(%rbp)
+ 5149 FFFF01
+ 5150 .L115:
+ 5151 4332 83BD2CF4 cmpl $15, -3028(%rbp)
+ 5151 FFFF0F
+
GAS LISTING /tmp/ccMa7HLZ.s page 184
+
+
+ 5152 4339 769B jbe .L118
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 5153 .loc 2 391 0
+ 5154 433b F30F6F85 movdqu -7968(%rbp), %xmm0
+ 5154 E0E0FFFF
+ 5155 .LBE679:
+ 5156 .LBE678:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5157 .loc 2 868 0
+ 5158 4343 F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 5158 90F3FFFF
+ 5159 434b F30F6F85 movdqu -3152(%rbp), %xmm0
+ 5159 B0F3FFFF
+ 5160 4353 F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 5160 40F4FFFF
+ 5161 435b F30F6F85 movdqu -3184(%rbp), %xmm0
+ 5161 90F3FFFF
+ 5162 4363 F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 5162 30F4FFFF
+ 5163 .LBB680:
+ 5164 .LBB681:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 5165 .loc 2 234 0
+ 5166 436b F30F6F85 movdqu -3024(%rbp), %xmm0
+ 5166 30F4FFFF
+ 5167 4373 F30F6F8D movdqu -3008(%rbp), %xmm1
+ 5167 40F4FFFF
+ 5168 437b 660FEBC1 por %xmm1, %xmm0
+ 5169 .LBE681:
+ 5170 .LBE680:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 5171 .loc 2 870 0
+ 5172 437f F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 5172 90F3FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5173 .loc 2 872 0
+ 5174 4387 8B857CF3 mov -3204(%rbp), %eax
+ 5174 FFFF
+ 5175 438d 48C1E004 salq $4, %rax
+ 5176 4391 48038558 addq -3240(%rbp), %rax
+ 5176 F3FFFF
+ 5177 4398 660F6F00 movdqa (%rax), %xmm0
+ 5178 439c F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 5178 60F4FFFF
+ 5179 43a4 F30F6F85 movdqu -3184(%rbp), %xmm0
+ 5179 90F3FFFF
+ 5180 43ac F30F7F85 movdqu %xmm0, -2992(%rbp)
+ 5180 50F4FFFF
+ 5181 .LBB682:
+ 5182 .LBB683:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 5183 .loc 2 380 0
+ 5184 43b4 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 5184 60F4FFFF
+ 5185 43bc F30F7F85 movdqu %xmm0, -7936(%rbp)
+ 5185 00E1FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+
GAS LISTING /tmp/ccMa7HLZ.s page 185
+
+
+ 5186 .loc 2 381 0
+ 5187 43c4 F30F6F85 movdqu -2992(%rbp), %xmm0
+ 5187 50F4FFFF
+ 5188 43cc F30F7F85 movdqu %xmm0, -7952(%rbp)
+ 5188 F0E0FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 5189 .loc 2 383 0
+ 5190 43d4 C7857CF4 movl $0, -2948(%rbp)
+ 5190 FFFF0000
+ 5190 0000
+ 5191 43de EB5C jmp .L119
+ 5192 .L122:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 5193 .loc 2 385 0
+ 5194 43e0 8B857CF4 movl -2948(%rbp), %eax
+ 5194 FFFF
+ 5195 43e6 89C0 mov %eax, %eax
+ 5196 43e8 0FB68405 movzbl -7952(%rbp,%rax), %eax
+ 5196 F0E0FFFF
+ 5197 43f0 84C0 testb %al, %al
+ 5198 43f2 7912 jns .L120
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 5199 .loc 2 386 0
+ 5200 43f4 8B857CF4 movl -2948(%rbp), %eax
+ 5200 FFFF
+ 5201 43fa 89C0 mov %eax, %eax
+ 5202 43fc C6840510 movb $0, -7920(%rbp,%rax)
+ 5202 E1FFFF00
+ 5203 4404 EB2F jmp .L121
+ 5204 .L120:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5205 .loc 2 388 0
+ 5206 4406 8B8D7CF4 movl -2948(%rbp), %ecx
+ 5206 FFFF
+ 5207 440c 8B857CF4 movl -2948(%rbp), %eax
+ 5207 FFFF
+ 5208 4412 89C0 mov %eax, %eax
+ 5209 4414 0FB68405 movzbl -7952(%rbp,%rax), %eax
+ 5209 F0E0FFFF
+ 5210 441c 0FB6C0 movzbl %al, %eax
+ 5211 441f 83E00F andl $15, %eax
+ 5212 4422 4898 cltq
+ 5213 4424 0FB69405 movzbl -7936(%rbp,%rax), %edx
+ 5213 00E1FFFF
+ 5214 442c 89C8 mov %ecx, %eax
+ 5215 442e 88940510 movb %dl, -7920(%rbp,%rax)
+ 5215 E1FFFF
+ 5216 .L121:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 5217 .loc 2 383 0
+ 5218 4435 83857CF4 addl $1, -2948(%rbp)
+ 5218 FFFF01
+ 5219 .L119:
+ 5220 443c 83BD7CF4 cmpl $15, -2948(%rbp)
+ 5220 FFFF0F
+ 5221 4443 769B jbe .L122
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 186
+
+
+ 5222 .loc 2 391 0
+ 5223 4445 F30F6F85 movdqu -7920(%rbp), %xmm0
+ 5223 10E1FFFF
+ 5224 .LBE683:
+ 5225 .LBE682:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5226 .loc 2 872 0
+ 5227 444d F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 5227 90F3FFFF
+ 5228 4455 F30F6F85 movdqu -3200(%rbp), %xmm0
+ 5228 80F3FFFF
+ 5229 445d F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 5229 90F4FFFF
+ 5230 4465 F30F6F85 movdqu -3184(%rbp), %xmm0
+ 5230 90F3FFFF
+ 5231 446d F30F7F85 movdqu %xmm0, -2944(%rbp)
+ 5231 80F4FFFF
+ 5232 .LBB684:
+ 5233 .LBB685:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 5234 .loc 2 234 0
+ 5235 4475 F30F6F85 movdqu -2944(%rbp), %xmm0
+ 5235 80F4FFFF
+ 5236 447d F30F6F8D movdqu -2928(%rbp), %xmm1
+ 5236 90F4FFFF
+ 5237 4485 660FEBC1 por %xmm1, %xmm0
+ 5238 .LBE685:
+ 5239 .LBE684:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 5240 .loc 2 874 0
+ 5241 4489 F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 5241 80F3FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5242 .loc 2 876 0
+ 5243 4491 660F6F05 movdqa vec_01(%rip), %xmm0
+ 5243 00000000
+ 5244 4499 F30F6F8D movdqu -3168(%rbp), %xmm1
+ 5244 A0F3FFFF
+ 5245 44a1 F30F7F8D movdqu %xmm1, -2896(%rbp)
+ 5245 B0F4FFFF
+ 5246 44a9 F30F7F85 movdqu %xmm0, -2912(%rbp)
+ 5246 A0F4FFFF
+ 5247 .LBB686:
+ 5248 .LBB687:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 5249 .loc 2 290 0
+ 5250 44b1 F30F6F8D movdqu -2912(%rbp), %xmm1
+ 5250 A0F4FFFF
+ 5251 44b9 F30F6F85 movdqu -2896(%rbp), %xmm0
+ 5251 B0F4FFFF
+ 5252 44c1 660FF8C1 psubb %xmm1, %xmm0
+ 5253 .LBE687:
+ 5254 .LBE686:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5255 .loc 2 876 0
+ 5256 44c5 F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 5256 A0F3FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 187
+
+
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5257 .loc 2 878 0
+ 5258 44cd 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 5258 00000000
+ 5259 44d5 F30F6F8D movdqu -3168(%rbp), %xmm1
+ 5259 A0F3FFFF
+ 5260 44dd F30F7F8D movdqu %xmm1, -2864(%rbp)
+ 5260 D0F4FFFF
+ 5261 44e5 F30F7F85 movdqu %xmm0, -2880(%rbp)
+ 5261 C0F4FFFF
+ 5262 .LBB688:
+ 5263 .LBB689:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 5264 .loc 2 206 0
+ 5265 44ed F30F6F85 movdqu -2880(%rbp), %xmm0
+ 5265 C0F4FFFF
+ 5266 44f5 F30F6F8D movdqu -2864(%rbp), %xmm1
+ 5266 D0F4FFFF
+ 5267 44fd 660FDBC1 pand %xmm1, %xmm0
+ 5268 .LBE689:
+ 5269 .LBE688:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5270 .loc 2 878 0
+ 5271 4501 F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 5271 A0F3FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 5272 .loc 2 866 0
+ 5273 4509 83857CF3 addl $1, -3204(%rbp)
+ 5273 FFFF01
+ 5274 .L114:
+ 5275 4510 83BD7CF3 cmpl $15, -3204(%rbp)
+ 5275 FFFF0F
+ 5276 4517 0F866DFD jbe .L123
+ 5276 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 5277 .loc 2 882 0
+ 5278 451d F30F6F85 movdqu -3200(%rbp), %xmm0
+ 5278 80F3FFFF
+ 5279 .LBE673:
+ 5280 .LBE672:
+ 5281 .LBE671:
+ 5282 .LBE670:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 5283 .loc 2 1682 0
+ 5284 4525 660F7F85 movdqa %xmm0, -9872(%rbp)
+ 5284 70D9FFFF
+ 5285 .LBB690:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 5286 .loc 2 1683 0
+ 5287 452d 660F6F85 movdqa -9872(%rbp), %xmm0
+ 5287 70D9FFFF
+ 5288 4535 F30F7F85 movdqu %xmm0, -8032(%rbp)
+ 5288 A0E0FFFF
+ 5289 453d E8000000 call KDbgWriterGet at PLT
+ 5289 00
+ 5290 4542 4885C0 testq %rax, %rax
+ 5291 4545 7479 je .L125
+
GAS LISTING /tmp/ccMa7HLZ.s page 188
+
+
+ 5292 4547 BF010000 movl $1, %edi
+ 5292 00
+ 5293 454c E8000000 call KDbgCondToFlag at PLT
+ 5293 00
+ 5294 4551 4889C6 movq %rax, %rsi
+ 5295 4554 BF100000 movl $16, %edi
+ 5295 00
+ 5296 4559 E8000000 call KDbgTestModConds at PLT
+ 5296 00
+ 5297 455e 84C0 testb %al, %al
+ 5298 4560 745E je .L125
+ 5299 4562 8B85ACE0 movl -8020(%rbp), %eax
+ 5299 FFFF
+ 5300 4568 89C7 movl %eax, %edi
+ 5301 456a E891BAFF call bswap_32
+ 5301 FF
+ 5302 456f 4189C5 movl %eax, %r13d
+ 5303 4572 8B85A8E0 movl -8024(%rbp), %eax
+ 5303 FFFF
+ 5304 4578 89C7 movl %eax, %edi
+ 5305 457a E881BAFF call bswap_32
+ 5305 FF
+ 5306 457f 4189C4 movl %eax, %r12d
+ 5307 4582 8B85A4E0 movl -8028(%rbp), %eax
+ 5307 FFFF
+ 5308 4588 89C7 movl %eax, %edi
+ 5309 458a E871BAFF call bswap_32
+ 5309 FF
+ 5310 458f 89C3 movl %eax, %ebx
+ 5311 4591 8B85A0E0 movl -8032(%rbp), %eax
+ 5311 FFFF
+ 5312 4597 89C7 movl %eax, %edi
+ 5313 4599 E862BAFF call bswap_32
+ 5313 FF
+ 5314 459e 4589E9 movl %r13d, %r9d
+ 5315 45a1 4589E0 movl %r12d, %r8d
+ 5316 45a4 89D9 movl %ebx, %ecx
+ 5317 45a6 89C2 movl %eax, %edx
+ 5318 45a8 488D3500 leaq .LC0(%rip), %rsi
+ 5318 000000
+ 5319 45af 488D3D00 leaq .LC1(%rip), %rdi
+ 5319 000000
+ 5320 45b6 B8000000 movl $0, %eax
+ 5320 00
+ 5321 45bb E8000000 call KDbgMsg at PLT
+ 5321 00
+ 5322 .L125:
+ 5323 45c0 660F6F85 movdqa -9872(%rbp), %xmm0
+ 5323 70D9FFFF
+ 5324 45c8 F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 5324 E0F4FFFF
+ 5325 .LBE690:
+ 5326 .LBB691:
+ 5327 .LBB692:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5328 .loc 2 667 0
+ 5329 45d0 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 189
+
+
+ 5329 00000000
+ 5330 45d8 F30F6F8D movdqu -2848(%rbp), %xmm1
+ 5330 E0F4FFFF
+ 5331 45e0 F30F7F8D movdqu %xmm1, -2816(%rbp)
+ 5331 00F5FFFF
+ 5332 45e8 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 5332 F0F4FFFF
+ 5333 .LBB693:
+ 5334 .LBB694:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 5335 .loc 2 380 0
+ 5336 45f0 F30F6F85 movdqu -2816(%rbp), %xmm0
+ 5336 00F5FFFF
+ 5337 45f8 F30F7F85 movdqu %xmm0, -7888(%rbp)
+ 5337 30E1FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 5338 .loc 2 381 0
+ 5339 4600 F30F6F85 movdqu -2832(%rbp), %xmm0
+ 5339 F0F4FFFF
+ 5340 4608 F30F7F85 movdqu %xmm0, -7904(%rbp)
+ 5340 20E1FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 5341 .loc 2 383 0
+ 5342 4610 C7851CF5 movl $0, -2788(%rbp)
+ 5342 FFFF0000
+ 5342 0000
+ 5343 461a EB5C jmp .L126
+ 5344 .L129:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 5345 .loc 2 385 0
+ 5346 461c 8B851CF5 movl -2788(%rbp), %eax
+ 5346 FFFF
+ 5347 4622 89C0 mov %eax, %eax
+ 5348 4624 0FB68405 movzbl -7904(%rbp,%rax), %eax
+ 5348 20E1FFFF
+ 5349 462c 84C0 testb %al, %al
+ 5350 462e 7912 jns .L127
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 5351 .loc 2 386 0
+ 5352 4630 8B851CF5 movl -2788(%rbp), %eax
+ 5352 FFFF
+ 5353 4636 89C0 mov %eax, %eax
+ 5354 4638 C6840540 movb $0, -7872(%rbp,%rax)
+ 5354 E1FFFF00
+ 5355 4640 EB2F jmp .L128
+ 5356 .L127:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5357 .loc 2 388 0
+ 5358 4642 8B8D1CF5 movl -2788(%rbp), %ecx
+ 5358 FFFF
+ 5359 4648 8B851CF5 movl -2788(%rbp), %eax
+ 5359 FFFF
+ 5360 464e 89C0 mov %eax, %eax
+ 5361 4650 0FB68405 movzbl -7904(%rbp,%rax), %eax
+ 5361 20E1FFFF
+ 5362 4658 0FB6C0 movzbl %al, %eax
+ 5363 465b 83E00F andl $15, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 190
+
+
+ 5364 465e 4898 cltq
+ 5365 4660 0FB69405 movzbl -7888(%rbp,%rax), %edx
+ 5365 30E1FFFF
+ 5366 4668 89C8 mov %ecx, %eax
+ 5367 466a 88940540 movb %dl, -7872(%rbp,%rax)
+ 5367 E1FFFF
+ 5368 .L128:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 5369 .loc 2 383 0
+ 5370 4671 83851CF5 addl $1, -2788(%rbp)
+ 5370 FFFF01
+ 5371 .L126:
+ 5372 4678 83BD1CF5 cmpl $15, -2788(%rbp)
+ 5372 FFFF0F
+ 5373 467f 769B jbe .L129
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 5374 .loc 2 391 0
+ 5375 4681 F30F6F85 movdqu -7872(%rbp), %xmm0
+ 5375 40E1FFFF
+ 5376 .LBE694:
+ 5377 .LBE693:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5378 .loc 2 667 0
+ 5379 4689 F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 5379 E0F4FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5380 .loc 2 668 0
+ 5381 4691 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 5381 E0F4FFFF
+ 5382 .LBE692:
+ 5383 .LBE691:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 5384 .loc 2 1684 0
+ 5385 4699 660F7F85 movdqa %xmm0, -9872(%rbp)
+ 5385 70D9FFFF
+ 5386 .LBB695:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 5387 .loc 2 1685 0
+ 5388 46a1 660F6F85 movdqa -9872(%rbp), %xmm0
+ 5388 70D9FFFF
+ 5389 46a9 F30F7F85 movdqu %xmm0, -8048(%rbp)
+ 5389 90E0FFFF
+ 5390 46b1 E8000000 call KDbgWriterGet at PLT
+ 5390 00
+ 5391 46b6 4885C0 testq %rax, %rax
+ 5392 46b9 7479 je .L131
+ 5393 46bb BF010000 movl $1, %edi
+ 5393 00
+ 5394 46c0 E8000000 call KDbgCondToFlag at PLT
+ 5394 00
+ 5395 46c5 4889C6 movq %rax, %rsi
+ 5396 46c8 BF100000 movl $16, %edi
+ 5396 00
+ 5397 46cd E8000000 call KDbgTestModConds at PLT
+ 5397 00
+ 5398 46d2 84C0 testb %al, %al
+ 5399 46d4 745E je .L131
+
GAS LISTING /tmp/ccMa7HLZ.s page 191
+
+
+ 5400 46d6 8B859CE0 movl -8036(%rbp), %eax
+ 5400 FFFF
+ 5401 46dc 89C7 movl %eax, %edi
+ 5402 46de E81DB9FF call bswap_32
+ 5402 FF
+ 5403 46e3 4189C5 movl %eax, %r13d
+ 5404 46e6 8B8598E0 movl -8040(%rbp), %eax
+ 5404 FFFF
+ 5405 46ec 89C7 movl %eax, %edi
+ 5406 46ee E80DB9FF call bswap_32
+ 5406 FF
+ 5407 46f3 4189C4 movl %eax, %r12d
+ 5408 46f6 8B8594E0 movl -8044(%rbp), %eax
+ 5408 FFFF
+ 5409 46fc 89C7 movl %eax, %edi
+ 5410 46fe E8FDB8FF call bswap_32
+ 5410 FF
+ 5411 4703 89C3 movl %eax, %ebx
+ 5412 4705 8B8590E0 movl -8048(%rbp), %eax
+ 5412 FFFF
+ 5413 470b 89C7 movl %eax, %edi
+ 5414 470d E8EEB8FF call bswap_32
+ 5414 FF
+ 5415 4712 4589E9 movl %r13d, %r9d
+ 5416 4715 4589E0 movl %r12d, %r8d
+ 5417 4718 89D9 movl %ebx, %ecx
+ 5418 471a 89C2 movl %eax, %edx
+ 5419 471c 488D3500 leaq .LC2(%rip), %rsi
+ 5419 000000
+ 5420 4723 488D3D00 leaq .LC1(%rip), %rdi
+ 5420 000000
+ 5421 472a B8000000 movl $0, %eax
+ 5421 00
+ 5422 472f E8000000 call KDbgMsg at PLT
+ 5422 00
+ 5423 .L131:
+ 5424 4734 660F6F85 movdqa -9872(%rbp), %xmm0
+ 5424 70D9FFFF
+ 5425 473c F30F7F85 movdqu %xmm0, -2768(%rbp)
+ 5425 30F5FFFF
+ 5426 4744 660F6F85 movdqa -9856(%rbp), %xmm0
+ 5426 80D9FFFF
+ 5427 474c F30F7F85 movdqu %xmm0, -2784(%rbp)
+ 5427 20F5FFFF
+ 5428 .LBE695:
+ 5429 .LBB696:
+ 5430 .LBB697:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 5431 .loc 2 178 0
+ 5432 4754 F30F6F85 movdqu -2784(%rbp), %xmm0
+ 5432 20F5FFFF
+ 5433 475c F30F6F8D movdqu -2768(%rbp), %xmm1
+ 5433 30F5FFFF
+ 5434 4764 660FEFC1 pxor %xmm1, %xmm0
+ 5435 .LBE697:
+ 5436 .LBE696:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+
GAS LISTING /tmp/ccMa7HLZ.s page 192
+
+
+ 5437 .loc 2 1686 0
+ 5438 4768 660F7F85 movdqa %xmm0, -9872(%rbp)
+ 5438 70D9FFFF
+ 5439 .LBB698:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 5440 .loc 2 1687 0
+ 5441 4770 660F6F85 movdqa -9872(%rbp), %xmm0
+ 5441 70D9FFFF
+ 5442 4778 F30F7F85 movdqu %xmm0, -8064(%rbp)
+ 5442 80E0FFFF
+ 5443 4780 E8000000 call KDbgWriterGet at PLT
+ 5443 00
+ 5444 4785 4885C0 testq %rax, %rax
+ 5445 4788 7479 je .L133
+ 5446 478a BF010000 movl $1, %edi
+ 5446 00
+ 5447 478f E8000000 call KDbgCondToFlag at PLT
+ 5447 00
+ 5448 4794 4889C6 movq %rax, %rsi
+ 5449 4797 BF100000 movl $16, %edi
+ 5449 00
+ 5450 479c E8000000 call KDbgTestModConds at PLT
+ 5450 00
+ 5451 47a1 84C0 testb %al, %al
+ 5452 47a3 745E je .L133
+ 5453 47a5 8B858CE0 movl -8052(%rbp), %eax
+ 5453 FFFF
+ 5454 47ab 89C7 movl %eax, %edi
+ 5455 47ad E84EB8FF call bswap_32
+ 5455 FF
+ 5456 47b2 4189C5 movl %eax, %r13d
+ 5457 47b5 8B8588E0 movl -8056(%rbp), %eax
+ 5457 FFFF
+ 5458 47bb 89C7 movl %eax, %edi
+ 5459 47bd E83EB8FF call bswap_32
+ 5459 FF
+ 5460 47c2 4189C4 movl %eax, %r12d
+ 5461 47c5 8B8584E0 movl -8060(%rbp), %eax
+ 5461 FFFF
+ 5462 47cb 89C7 movl %eax, %edi
+ 5463 47cd E82EB8FF call bswap_32
+ 5463 FF
+ 5464 47d2 89C3 movl %eax, %ebx
+ 5465 47d4 8B8580E0 movl -8064(%rbp), %eax
+ 5465 FFFF
+ 5466 47da 89C7 movl %eax, %edi
+ 5467 47dc E81FB8FF call bswap_32
+ 5467 FF
+ 5468 47e1 4589E9 movl %r13d, %r9d
+ 5469 47e4 4589E0 movl %r12d, %r8d
+ 5470 47e7 89D9 movl %ebx, %ecx
+ 5471 47e9 89C2 movl %eax, %edx
+ 5472 47eb 488D3500 leaq .LC3(%rip), %rsi
+ 5472 000000
+ 5473 47f2 488D3D00 leaq .LC1(%rip), %rdi
+ 5473 000000
+ 5474 47f9 B8000000 movl $0, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 193
+
+
+ 5474 00
+ 5475 47fe E8000000 call KDbgMsg at PLT
+ 5475 00
+ 5476 .L133:
+ 5477 4803 660F6F85 movdqa -9872(%rbp), %xmm0
+ 5477 70D9FFFF
+ 5478 480b F30F7F85 movdqu %xmm0, -2752(%rbp)
+ 5478 40F5FFFF
+ 5479 .LBE698:
+ 5480 .LBB699:
+ 5481 .LBB700:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 5482 .loc 2 1357 0
+ 5483 4813 F30F6F85 movdqu -2752(%rbp), %xmm0
+ 5483 40F5FFFF
+ 5484 481b F30F7F85 movdqu %xmm0, -7856(%rbp)
+ 5484 50E1FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 5485 .loc 2 1358 0
+ 5486 4823 8B855CE1 movl -7844(%rbp), %eax
+ 5486 FFFF
+ 5487 4829 898558E1 movl %eax, -7848(%rbp)
+ 5487 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 5488 .loc 2 1359 0
+ 5489 482f 8B855CE1 movl -7844(%rbp), %eax
+ 5489 FFFF
+ 5490 4835 898554E1 movl %eax, -7852(%rbp)
+ 5490 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 5491 .loc 2 1360 0
+ 5492 483b 8B855CE1 movl -7844(%rbp), %eax
+ 5492 FFFF
+ 5493 4841 898550E1 movl %eax, -7856(%rbp)
+ 5493 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 5494 .loc 2 1361 0
+ 5495 4847 F30F6F85 movdqu -7856(%rbp), %xmm0
+ 5495 50E1FFFF
+ 5496 .LBE700:
+ 5497 .LBE699:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 5498 .loc 2 1688 0
+ 5499 484f 660F7F85 movdqa %xmm0, -9872(%rbp)
+ 5499 70D9FFFF
+ 5500 .LBB701:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 5501 .loc 2 1689 0
+ 5502 4857 660F6F85 movdqa -9872(%rbp), %xmm0
+ 5502 70D9FFFF
+ 5503 485f F30F7F85 movdqu %xmm0, -8080(%rbp)
+ 5503 70E0FFFF
+ 5504 4867 E8000000 call KDbgWriterGet at PLT
+ 5504 00
+ 5505 486c 4885C0 testq %rax, %rax
+ 5506 486f 7479 je .L135
+ 5507 4871 BF010000 movl $1, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 194
+
+
+ 5507 00
+ 5508 4876 E8000000 call KDbgCondToFlag at PLT
+ 5508 00
+ 5509 487b 4889C6 movq %rax, %rsi
+ 5510 487e BF100000 movl $16, %edi
+ 5510 00
+ 5511 4883 E8000000 call KDbgTestModConds at PLT
+ 5511 00
+ 5512 4888 84C0 testb %al, %al
+ 5513 488a 745E je .L135
+ 5514 488c 8B857CE0 movl -8068(%rbp), %eax
+ 5514 FFFF
+ 5515 4892 89C7 movl %eax, %edi
+ 5516 4894 E867B7FF call bswap_32
+ 5516 FF
+ 5517 4899 4189C5 movl %eax, %r13d
+ 5518 489c 8B8578E0 movl -8072(%rbp), %eax
+ 5518 FFFF
+ 5519 48a2 89C7 movl %eax, %edi
+ 5520 48a4 E857B7FF call bswap_32
+ 5520 FF
+ 5521 48a9 4189C4 movl %eax, %r12d
+ 5522 48ac 8B8574E0 movl -8076(%rbp), %eax
+ 5522 FFFF
+ 5523 48b2 89C7 movl %eax, %edi
+ 5524 48b4 E847B7FF call bswap_32
+ 5524 FF
+ 5525 48b9 89C3 movl %eax, %ebx
+ 5526 48bb 8B8570E0 movl -8080(%rbp), %eax
+ 5526 FFFF
+ 5527 48c1 89C7 movl %eax, %edi
+ 5528 48c3 E838B7FF call bswap_32
+ 5528 FF
+ 5529 48c8 4589E9 movl %r13d, %r9d
+ 5530 48cb 4589E0 movl %r12d, %r8d
+ 5531 48ce 89D9 movl %ebx, %ecx
+ 5532 48d0 89C2 movl %eax, %edx
+ 5533 48d2 488D3500 leaq .LC4(%rip), %rsi
+ 5533 000000
+ 5534 48d9 488D3D00 leaq .LC1(%rip), %rdi
+ 5534 000000
+ 5535 48e0 B8000000 movl $0, %eax
+ 5535 00
+ 5536 48e5 E8000000 call KDbgMsg at PLT
+ 5536 00
+ 5537 .L135:
+ 5538 .LBE701:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 5539 .loc 2 1690 0
+ 5540 48ea 660F6F85 movdqa -9872(%rbp), %xmm0
+ 5540 70D9FFFF
+ 5541 .LBE667:
+ 5542 .LBE666:
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x20,6);
+ 5543 .loc 2 1749 0
+ 5544 48f2 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 5544 20E6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 195
+
+
+ 5545 48fa F30F6F85 movdqu -6640(%rbp), %xmm0
+ 5545 10E6FFFF
+ 5546 4902 F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 5546 50F5FFFF
+ 5547 .LBB702:
+ 5548 .LBB703:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 5549 .loc 2 1565 0
+ 5550 490a F30F6F85 movdqu -2736(%rbp), %xmm0
+ 5550 50F5FFFF
+ 5551 4912 660F7F85 movdqa %xmm0, -9824(%rbp)
+ 5551 A0D9FFFF
+ 5552 491a 660F6F85 movdqa -9824(%rbp), %xmm0
+ 5552 A0D9FFFF
+ 5553 4922 F30F7F85 movdqu %xmm0, -2720(%rbp)
+ 5553 60F5FFFF
+ 5554 .LBB704:
+ 5555 .LBB705:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 5556 .loc 2 1282 0
+ 5557 492a F30F6F85 movdqu -2720(%rbp), %xmm0
+ 5557 60F5FFFF
+ 5558 4932 F30F7F85 movdqu %xmm0, -7840(%rbp)
+ 5558 60E1FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 5559 .loc 2 1283 0
+ 5560 493a 8B8568E1 movl -7832(%rbp), %eax
+ 5560 FFFF
+ 5561 4940 89856CE1 movl %eax, -7828(%rbp)
+ 5561 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 5562 .loc 2 1284 0
+ 5563 4946 8B8564E1 movl -7836(%rbp), %eax
+ 5563 FFFF
+ 5564 494c 898568E1 movl %eax, -7832(%rbp)
+ 5564 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 5565 .loc 2 1285 0
+ 5566 4952 8B8560E1 movl -7840(%rbp), %eax
+ 5566 FFFF
+ 5567 4958 898564E1 movl %eax, -7836(%rbp)
+ 5567 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 5568 .loc 2 1286 0
+ 5569 495e C78560E1 movl $0, -7840(%rbp)
+ 5569 FFFF0000
+ 5569 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 5570 .loc 2 1287 0
+ 5571 4968 F30F6F85 movdqu -7840(%rbp), %xmm0
+ 5571 60E1FFFF
+ 5572 .LBE705:
+ 5573 .LBE704:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5574 .loc 2 1567 0
+ 5575 4970 660F7F85 movdqa %xmm0, -9824(%rbp)
+ 5575 A0D9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 196
+
+
+ 5576 4978 660F6F85 movdqa -9824(%rbp), %xmm0
+ 5576 A0D9FFFF
+ 5577 4980 660FEF85 pxor -2736(%rbp), %xmm0
+ 5577 50F5FFFF
+ 5578 4988 F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 5578 50F5FFFF
+ 5579 4990 660F6F85 movdqa -9824(%rbp), %xmm0
+ 5579 A0D9FFFF
+ 5580 4998 F30F7F85 movdqu %xmm0, -2704(%rbp)
+ 5580 70F5FFFF
+ 5581 .LBB706:
+ 5582 .LBB707:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 5583 .loc 2 1282 0
+ 5584 49a0 F30F6F85 movdqu -2704(%rbp), %xmm0
+ 5584 70F5FFFF
+ 5585 49a8 F30F7F85 movdqu %xmm0, -7824(%rbp)
+ 5585 70E1FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 5586 .loc 2 1283 0
+ 5587 49b0 8B8578E1 movl -7816(%rbp), %eax
+ 5587 FFFF
+ 5588 49b6 89857CE1 movl %eax, -7812(%rbp)
+ 5588 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 5589 .loc 2 1284 0
+ 5590 49bc 8B8574E1 movl -7820(%rbp), %eax
+ 5590 FFFF
+ 5591 49c2 898578E1 movl %eax, -7816(%rbp)
+ 5591 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 5592 .loc 2 1285 0
+ 5593 49c8 8B8570E1 movl -7824(%rbp), %eax
+ 5593 FFFF
+ 5594 49ce 898574E1 movl %eax, -7820(%rbp)
+ 5594 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 5595 .loc 2 1286 0
+ 5596 49d4 C78570E1 movl $0, -7824(%rbp)
+ 5596 FFFF0000
+ 5596 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 5597 .loc 2 1287 0
+ 5598 49de F30F6F85 movdqu -7824(%rbp), %xmm0
+ 5598 70E1FFFF
+ 5599 .LBE707:
+ 5600 .LBE706:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5601 .loc 2 1568 0
+ 5602 49e6 660F7F85 movdqa %xmm0, -9824(%rbp)
+ 5602 A0D9FFFF
+ 5603 49ee 660F6F85 movdqa -9824(%rbp), %xmm0
+ 5603 A0D9FFFF
+ 5604 49f6 660FEF85 pxor -2736(%rbp), %xmm0
+ 5604 50F5FFFF
+ 5605 49fe F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 5605 50F5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 197
+
+
+ 5606 4a06 660F6F85 movdqa -9824(%rbp), %xmm0
+ 5606 A0D9FFFF
+ 5607 4a0e F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 5607 80F5FFFF
+ 5608 .LBB708:
+ 5609 .LBB709:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 5610 .loc 2 1282 0
+ 5611 4a16 F30F6F85 movdqu -2688(%rbp), %xmm0
+ 5611 80F5FFFF
+ 5612 4a1e F30F7F85 movdqu %xmm0, -7808(%rbp)
+ 5612 80E1FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 5613 .loc 2 1283 0
+ 5614 4a26 8B8588E1 movl -7800(%rbp), %eax
+ 5614 FFFF
+ 5615 4a2c 89858CE1 movl %eax, -7796(%rbp)
+ 5615 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 5616 .loc 2 1284 0
+ 5617 4a32 8B8584E1 movl -7804(%rbp), %eax
+ 5617 FFFF
+ 5618 4a38 898588E1 movl %eax, -7800(%rbp)
+ 5618 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 5619 .loc 2 1285 0
+ 5620 4a3e 8B8580E1 movl -7808(%rbp), %eax
+ 5620 FFFF
+ 5621 4a44 898584E1 movl %eax, -7804(%rbp)
+ 5621 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 5622 .loc 2 1286 0
+ 5623 4a4a C78580E1 movl $0, -7808(%rbp)
+ 5623 FFFF0000
+ 5623 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 5624 .loc 2 1287 0
+ 5625 4a54 F30F6F85 movdqu -7808(%rbp), %xmm0
+ 5625 80E1FFFF
+ 5626 .LBE709:
+ 5627 .LBE708:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5628 .loc 2 1569 0
+ 5629 4a5c 660F7F85 movdqa %xmm0, -9824(%rbp)
+ 5629 A0D9FFFF
+ 5630 4a64 660F6F85 movdqa -9824(%rbp), %xmm0
+ 5630 A0D9FFFF
+ 5631 4a6c 660FEF85 pxor -2736(%rbp), %xmm0
+ 5631 50F5FFFF
+ 5632 4a74 F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 5632 50F5FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5633 .loc 2 1571 0
+ 5634 4a7c F30F6F85 movdqu -2736(%rbp), %xmm0
+ 5634 50F5FFFF
+ 5635 .LBE703:
+ 5636 .LBE702:
+
GAS LISTING /tmp/ccMa7HLZ.s page 198
+
+
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x20,6);
+ 5637 .loc 2 1749 0
+ 5638 4a84 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 5638 10E6FFFF
+ 5639 4a8c F30F6F85 movdqu -6624(%rbp), %xmm0
+ 5639 20E6FFFF
+ 5640 4a94 F30F6F8D movdqu -6640(%rbp), %xmm1
+ 5640 10E6FFFF
+ 5641 4a9c 660FEFC1 pxor %xmm1, %xmm0
+ 5642 4aa0 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 5642 10E6FFFF
+ 5643 4aa8 488B85B8 movq -9544(%rbp), %rax
+ 5643 DAFFFF
+ 5644 4aaf 4883C060 addq $96, %rax
+ 5645 4ab3 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 5645 10E6FFFF
+ 5646 4abb F30F7F00 movdqu %xmm0, (%rax)
+ 5647 4abf F30F6F85 movdqu -6640(%rbp), %xmm0
+ 5647 10E6FFFF
+ 5648 4ac7 F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 5648 A0F5FFFF
+ 5649 .LBB710:
+ 5650 .LBB711:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5651 .loc 2 1681 0
+ 5652 4acf B8400000 movl $64, %eax
+ 5652 00
+ 5653 4ad4 660F6F05 movdqa vec_00(%rip), %xmm0
+ 5653 00000000
+ 5654 4adc F30F7F85 movdqu %xmm0, -2624(%rbp)
+ 5654 C0F5FFFF
+ 5655 4ae4 8985BCF5 movl %eax, -2628(%rbp)
+ 5655 FFFF
+ 5656 .LBB712:
+ 5657 .LBB713:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 5658 .loc 2 522 0
+ 5659 4aea F30F6F85 movdqu -2624(%rbp), %xmm0
+ 5659 C0F5FFFF
+ 5660 4af2 F30F7F85 movdqu %xmm0, -7728(%rbp)
+ 5660 D0E1FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 5661 .loc 2 523 0
+ 5662 4afa B8030000 movl $3, %eax
+ 5662 00
+ 5663 4aff 4898 cltq
+ 5664 4b01 8B95BCF5 movl -2628(%rbp), %edx
+ 5664 FFFF
+ 5665 4b07 899485D0 movl %edx, -7728(%rbp,%rax,4)
+ 5665 E1FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 5666 .loc 2 524 0
+ 5667 4b0e F30F6F85 movdqu -7728(%rbp), %xmm0
+ 5667 D0E1FFFF
+ 5668 4b16 F30F7F85 movdqu %xmm0, -2624(%rbp)
+ 5668 C0F5FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 199
+
+
+ 5669 .loc 2 526 0
+ 5670 4b1e F30F6F85 movdqu -2624(%rbp), %xmm0
+ 5670 C0F5FFFF
+ 5671 .LBE713:
+ 5672 .LBE712:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5673 .loc 2 1681 0
+ 5674 4b26 660F7F85 movdqa %xmm0, -9792(%rbp)
+ 5674 C0D9FFFF
+ 5675 4b2e F30F6F85 movdqu -2656(%rbp), %xmm0
+ 5675 A0F5FFFF
+ 5676 4b36 F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 5676 D0F5FFFF
+ 5677 4b3e F30F6F85 movdqu -2608(%rbp), %xmm0
+ 5677 D0F5FFFF
+ 5678 4b46 F30F7F85 movdqu %xmm0, -2576(%rbp)
+ 5678 F0F5FFFF
+ 5679 4b4e 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 5679 000000
+ 5680 4b55 488985E8 movq %rax, -2584(%rbp)
+ 5680 F5FFFF
+ 5681 .LBB714:
+ 5682 .LBB715:
+ 5683 .LBB716:
+ 5684 .LBB717:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 5685 .loc 2 851 0
+ 5686 4b5c 660F6F05 movdqa vec_00(%rip), %xmm0
+ 5686 00000000
+ 5687 4b64 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 5687 10F6FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 5688 .loc 2 854 0
+ 5689 4b6c 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 5689 00000000
+ 5690 4b74 F30F6F8D movdqu -2576(%rbp), %xmm1
+ 5690 F0F5FFFF
+ 5691 4b7c F30F7F8D movdqu %xmm1, -2464(%rbp)
+ 5691 60F6FFFF
+ 5692 4b84 F30F7F85 movdqu %xmm0, -2480(%rbp)
+ 5692 50F6FFFF
+ 5693 .LBB718:
+ 5694 .LBB719:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 5695 .loc 2 206 0
+ 5696 4b8c F30F6F85 movdqu -2480(%rbp), %xmm0
+ 5696 50F6FFFF
+ 5697 4b94 F30F6F8D movdqu -2464(%rbp), %xmm1
+ 5697 60F6FFFF
+ 5698 4b9c 660FDBC1 pand %xmm1, %xmm0
+ 5699 .LBE719:
+ 5700 .LBE718:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 5701 .loc 2 854 0
+ 5702 4ba0 F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 5702 40F6FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+
GAS LISTING /tmp/ccMa7HLZ.s page 200
+
+
+ 5703 .loc 2 862 0
+ 5704 4ba8 660F6F05 movdqa vec_10(%rip), %xmm0
+ 5704 00000000
+ 5705 4bb0 F30F6F8D movdqu -2576(%rbp), %xmm1
+ 5705 F0F5FFFF
+ 5706 4bb8 F30F7F8D movdqu %xmm1, -2432(%rbp)
+ 5706 80F6FFFF
+ 5707 4bc0 F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 5707 70F6FFFF
+ 5708 .LBB720:
+ 5709 .loc 2 2642 0
+ 5710 4bc8 0FB68580 movzbl -2432(%rbp), %eax
+ 5710 F6FFFF
+ 5711 4bcf 0FB69570 movzbl -2448(%rbp), %edx
+ 5711 F6FFFF
+ 5712 4bd6 0FB6C0 movzbl %al, %eax
+ 5713 4bd9 6689858E movw %ax, -10354(%rbp)
+ 5713 D7FFFF
+ 5714 4be0 0FB7858E movzwl -10354(%rbp), %eax
+ 5714 D7FFFF
+ 5715 4be7 F6F2 divb %dl
+ 5716 4be9 4189C7 movl %eax, %r15d
+ 5717 4bec 0FB68581 movzbl -2431(%rbp), %eax
+ 5717 F6FFFF
+ 5718 4bf3 0FB69571 movzbl -2447(%rbp), %edx
+ 5718 F6FFFF
+ 5719 4bfa 0FB6C0 movzbl %al, %eax
+ 5720 4bfd 6689858E movw %ax, -10354(%rbp)
+ 5720 D7FFFF
+ 5721 4c04 0FB7858E movzwl -10354(%rbp), %eax
+ 5721 D7FFFF
+ 5722 4c0b F6F2 divb %dl
+ 5723 4c0d 8885DFD9 movb %al, -9761(%rbp)
+ 5723 FFFF
+ 5724 4c13 0FB68582 movzbl -2430(%rbp), %eax
+ 5724 F6FFFF
+ 5725 4c1a 0FB69572 movzbl -2446(%rbp), %edx
+ 5725 F6FFFF
+ 5726 4c21 0FB6C0 movzbl %al, %eax
+ 5727 4c24 6689858E movw %ax, -10354(%rbp)
+ 5727 D7FFFF
+ 5728 4c2b 0FB7858E movzwl -10354(%rbp), %eax
+ 5728 D7FFFF
+ 5729 4c32 F6F2 divb %dl
+ 5730 4c34 8885DED9 movb %al, -9762(%rbp)
+ 5730 FFFF
+ 5731 4c3a 0FB68583 movzbl -2429(%rbp), %eax
+ 5731 F6FFFF
+ 5732 4c41 0FB69573 movzbl -2445(%rbp), %edx
+ 5732 F6FFFF
+ 5733 4c48 0FB6C0 movzbl %al, %eax
+ 5734 4c4b 6689858E movw %ax, -10354(%rbp)
+ 5734 D7FFFF
+ 5735 4c52 0FB7858E movzwl -10354(%rbp), %eax
+ 5735 D7FFFF
+ 5736 4c59 F6F2 divb %dl
+ 5737 4c5b 8885DDD9 movb %al, -9763(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 201
+
+
+ 5737 FFFF
+ 5738 4c61 0FB68584 movzbl -2428(%rbp), %eax
+ 5738 F6FFFF
+ 5739 4c68 0FB69574 movzbl -2444(%rbp), %edx
+ 5739 F6FFFF
+ 5740 4c6f 0FB6C0 movzbl %al, %eax
+ 5741 4c72 6689858E movw %ax, -10354(%rbp)
+ 5741 D7FFFF
+ 5742 4c79 0FB7858E movzwl -10354(%rbp), %eax
+ 5742 D7FFFF
+ 5743 4c80 F6F2 divb %dl
+ 5744 4c82 8885DCD9 movb %al, -9764(%rbp)
+ 5744 FFFF
+ 5745 4c88 0FB68585 movzbl -2427(%rbp), %eax
+ 5745 F6FFFF
+ 5746 4c8f 0FB69575 movzbl -2443(%rbp), %edx
+ 5746 F6FFFF
+ 5747 4c96 0FB6C0 movzbl %al, %eax
+ 5748 4c99 6689858E movw %ax, -10354(%rbp)
+ 5748 D7FFFF
+ 5749 4ca0 0FB7858E movzwl -10354(%rbp), %eax
+ 5749 D7FFFF
+ 5750 4ca7 F6F2 divb %dl
+ 5751 4ca9 4189C1 movl %eax, %r9d
+ 5752 4cac 0FB68586 movzbl -2426(%rbp), %eax
+ 5752 F6FFFF
+ 5753 4cb3 0FB69576 movzbl -2442(%rbp), %edx
+ 5753 F6FFFF
+ 5754 4cba 0FB6C0 movzbl %al, %eax
+ 5755 4cbd 6689858E movw %ax, -10354(%rbp)
+ 5755 D7FFFF
+ 5756 4cc4 0FB7858E movzwl -10354(%rbp), %eax
+ 5756 D7FFFF
+ 5757 4ccb F6F2 divb %dl
+ 5758 4ccd 89C7 movl %eax, %edi
+ 5759 4ccf 0FB68587 movzbl -2425(%rbp), %eax
+ 5759 F6FFFF
+ 5760 4cd6 0FB69577 movzbl -2441(%rbp), %edx
+ 5760 F6FFFF
+ 5761 4cdd 0FB6C0 movzbl %al, %eax
+ 5762 4ce0 6689858E movw %ax, -10354(%rbp)
+ 5762 D7FFFF
+ 5763 4ce7 0FB7858E movzwl -10354(%rbp), %eax
+ 5763 D7FFFF
+ 5764 4cee F6F2 divb %dl
+ 5765 4cf0 89C3 movl %eax, %ebx
+ 5766 4cf2 0FB68588 movzbl -2424(%rbp), %eax
+ 5766 F6FFFF
+ 5767 4cf9 0FB69578 movzbl -2440(%rbp), %edx
+ 5767 F6FFFF
+ 5768 4d00 0FB6C0 movzbl %al, %eax
+ 5769 4d03 6689858E movw %ax, -10354(%rbp)
+ 5769 D7FFFF
+ 5770 4d0a 0FB7858E movzwl -10354(%rbp), %eax
+ 5770 D7FFFF
+ 5771 4d11 F6F2 divb %dl
+ 5772 4d13 4189C2 movl %eax, %r10d
+
GAS LISTING /tmp/ccMa7HLZ.s page 202
+
+
+ 5773 4d16 0FB68589 movzbl -2423(%rbp), %eax
+ 5773 F6FFFF
+ 5774 4d1d 0FB69579 movzbl -2439(%rbp), %edx
+ 5774 F6FFFF
+ 5775 4d24 0FB6C0 movzbl %al, %eax
+ 5776 4d27 6689858E movw %ax, -10354(%rbp)
+ 5776 D7FFFF
+ 5777 4d2e 0FB7858E movzwl -10354(%rbp), %eax
+ 5777 D7FFFF
+ 5778 4d35 F6F2 divb %dl
+ 5779 4d37 4189C3 movl %eax, %r11d
+ 5780 4d3a 0FB6858A movzbl -2422(%rbp), %eax
+ 5780 F6FFFF
+ 5781 4d41 0FB6957A movzbl -2438(%rbp), %edx
+ 5781 F6FFFF
+ 5782 4d48 0FB6C0 movzbl %al, %eax
+ 5783 4d4b 6689858E movw %ax, -10354(%rbp)
+ 5783 D7FFFF
+ 5784 4d52 0FB7858E movzwl -10354(%rbp), %eax
+ 5784 D7FFFF
+ 5785 4d59 F6F2 divb %dl
+ 5786 4d5b 4189C4 movl %eax, %r12d
+ 5787 4d5e 0FB6858B movzbl -2421(%rbp), %eax
+ 5787 F6FFFF
+ 5788 4d65 0FB6957B movzbl -2437(%rbp), %edx
+ 5788 F6FFFF
+ 5789 4d6c 0FB6C0 movzbl %al, %eax
+ 5790 4d6f 6689858E movw %ax, -10354(%rbp)
+ 5790 D7FFFF
+ 5791 4d76 0FB7858E movzwl -10354(%rbp), %eax
+ 5791 D7FFFF
+ 5792 4d7d F6F2 divb %dl
+ 5793 4d7f 4189C5 movl %eax, %r13d
+ 5794 4d82 0FB6858C movzbl -2420(%rbp), %eax
+ 5794 F6FFFF
+ 5795 4d89 0FB6957C movzbl -2436(%rbp), %edx
+ 5795 F6FFFF
+ 5796 4d90 0FB6C0 movzbl %al, %eax
+ 5797 4d93 6689858E movw %ax, -10354(%rbp)
+ 5797 D7FFFF
+ 5798 4d9a 0FB7858E movzwl -10354(%rbp), %eax
+ 5798 D7FFFF
+ 5799 4da1 F6F2 divb %dl
+ 5800 4da3 4189C6 movl %eax, %r14d
+ 5801 4da6 0FB6858D movzbl -2419(%rbp), %eax
+ 5801 F6FFFF
+ 5802 4dad 0FB6957D movzbl -2435(%rbp), %edx
+ 5802 F6FFFF
+ 5803 4db4 0FB6C0 movzbl %al, %eax
+ 5804 4db7 6689858E movw %ax, -10354(%rbp)
+ 5804 D7FFFF
+ 5805 4dbe 0FB7858E movzwl -10354(%rbp), %eax
+ 5805 D7FFFF
+ 5806 4dc5 F6F2 divb %dl
+ 5807 4dc7 4189C0 movl %eax, %r8d
+ 5808 4dca 0FB6858E movzbl -2418(%rbp), %eax
+ 5808 F6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 203
+
+
+ 5809 4dd1 0FB6957E movzbl -2434(%rbp), %edx
+ 5809 F6FFFF
+ 5810 4dd8 0FB6C0 movzbl %al, %eax
+ 5811 4ddb 6689858E movw %ax, -10354(%rbp)
+ 5811 D7FFFF
+ 5812 4de2 0FB7858E movzwl -10354(%rbp), %eax
+ 5812 D7FFFF
+ 5813 4de9 F6F2 divb %dl
+ 5814 4deb 89C6 movl %eax, %esi
+ 5815 4ded 0FB6858F movzbl -2417(%rbp), %eax
+ 5815 F6FFFF
+ 5816 4df4 0FB6957F movzbl -2433(%rbp), %edx
+ 5816 F6FFFF
+ 5817 4dfb 0FB6C0 movzbl %al, %eax
+ 5818 4dfe 6689858E movw %ax, -10354(%rbp)
+ 5818 D7FFFF
+ 5819 4e05 0FB7858E movzwl -10354(%rbp), %eax
+ 5819 D7FFFF
+ 5820 4e0c F6F2 divb %dl
+ 5821 4e0e 89C1 movl %eax, %ecx
+ 5822 .LBB721:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 5823 .loc 2 346 0
+ 5824 4e10 0FB6D3 movzbl %bl, %edx
+ 5825 4e13 400FB6C7 movzbl %dil, %eax
+ 5826 4e17 48C1E208 salq $8, %rdx
+ 5827 4e1b 4809C2 orq %rax, %rdx
+ 5828 4e1e 410FB6C1 movzbl %r9b, %eax
+ 5829 4e22 48C1E208 salq $8, %rdx
+ 5830 4e26 4809C2 orq %rax, %rdx
+ 5831 4e29 0FB685DC movzbl -9764(%rbp), %eax
+ 5831 D9FFFF
+ 5832 4e30 48C1E208 salq $8, %rdx
+ 5833 4e34 4809C2 orq %rax, %rdx
+ 5834 4e37 0FB685DD movzbl -9763(%rbp), %eax
+ 5834 D9FFFF
+ 5835 4e3e 48C1E208 salq $8, %rdx
+ 5836 4e42 4809C2 orq %rax, %rdx
+ 5837 4e45 0FB685DE movzbl -9762(%rbp), %eax
+ 5837 D9FFFF
+ 5838 4e4c 48C1E208 salq $8, %rdx
+ 5839 4e50 4809C2 orq %rax, %rdx
+ 5840 4e53 0FB685DF movzbl -9761(%rbp), %eax
+ 5840 D9FFFF
+ 5841 4e5a 48C1E208 salq $8, %rdx
+ 5842 4e5e 4809C2 orq %rax, %rdx
+ 5843 4e61 410FB6C7 movzbl %r15b, %eax
+ 5844 4e65 48C1E208 salq $8, %rdx
+ 5845 4e69 4809C2 orq %rax, %rdx
+ 5846 4e6c 0FB6C1 movzbl %cl, %eax
+ 5847 4e6f 400FB6CE movzbl %sil, %ecx
+ 5848 4e73 48C1E008 salq $8, %rax
+ 5849 4e77 4809C8 orq %rcx, %rax
+ 5850 4e7a 410FB6C8 movzbl %r8b, %ecx
+ 5851 4e7e 48C1E008 salq $8, %rax
+ 5852 4e82 4809C8 orq %rcx, %rax
+ 5853 4e85 410FB6CE movzbl %r14b, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 204
+
+
+ 5854 4e89 48C1E008 salq $8, %rax
+ 5855 4e8d 4809C8 orq %rcx, %rax
+ 5856 4e90 410FB6CD movzbl %r13b, %ecx
+ 5857 4e94 48C1E008 salq $8, %rax
+ 5858 4e98 4809C8 orq %rcx, %rax
+ 5859 4e9b 410FB6CC movzbl %r12b, %ecx
+ 5860 4e9f 48C1E008 salq $8, %rax
+ 5861 4ea3 4809C8 orq %rcx, %rax
+ 5862 4ea6 410FB6CB movzbl %r11b, %ecx
+ 5863 4eaa 48C1E008 salq $8, %rax
+ 5864 4eae 4809C8 orq %rcx, %rax
+ 5865 4eb1 410FB6CA movzbl %r10b, %ecx
+ 5866 4eb5 48C1E008 salq $8, %rax
+ 5867 4eb9 4809C8 orq %rcx, %rax
+ 5868 4ebc 488995C0 movq %rdx, -10304(%rbp)
+ 5868 D7FFFF
+ 5869 4ec3 488985C8 movq %rax, -10296(%rbp)
+ 5869 D7FFFF
+ 5870 4eca 660F6F85 movdqa -10304(%rbp), %xmm0
+ 5870 C0D7FFFF
+ 5871 .LBE721:
+ 5872 .LBE720:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 5873 .loc 2 862 0
+ 5874 4ed2 F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 5874 30F6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 5875 .loc 2 866 0
+ 5876 4eda C7850CF6 movl $0, -2548(%rbp)
+ 5876 FFFF0000
+ 5876 0000
+ 5877 4ee4 E9860200 jmp .L136
+ 5877 00
+ 5878 .L145:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5879 .loc 2 868 0
+ 5880 4ee9 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 5880 00000000
+ 5881 4ef1 F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 5881 A0F6FFFF
+ 5882 4ef9 F30F6F85 movdqu -2512(%rbp), %xmm0
+ 5882 30F6FFFF
+ 5883 4f01 F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 5883 90F6FFFF
+ 5884 .LBB722:
+ 5885 .LBB723:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 5886 .loc 2 380 0
+ 5887 4f09 F30F6F85 movdqu -2400(%rbp), %xmm0
+ 5887 A0F6FFFF
+ 5888 4f11 F30F7F85 movdqu %xmm0, -7696(%rbp)
+ 5888 F0E1FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 5889 .loc 2 381 0
+ 5890 4f19 F30F6F85 movdqu -2416(%rbp), %xmm0
+ 5890 90F6FFFF
+ 5891 4f21 F30F7F85 movdqu %xmm0, -7712(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 205
+
+
+ 5891 E0E1FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 5892 .loc 2 383 0
+ 5893 4f29 C785BCF6 movl $0, -2372(%rbp)
+ 5893 FFFF0000
+ 5893 0000
+ 5894 4f33 EB5C jmp .L137
+ 5895 .L140:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 5896 .loc 2 385 0
+ 5897 4f35 8B85BCF6 movl -2372(%rbp), %eax
+ 5897 FFFF
+ 5898 4f3b 89C0 mov %eax, %eax
+ 5899 4f3d 0FB68405 movzbl -7712(%rbp,%rax), %eax
+ 5899 E0E1FFFF
+ 5900 4f45 84C0 testb %al, %al
+ 5901 4f47 7912 jns .L138
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 5902 .loc 2 386 0
+ 5903 4f49 8B85BCF6 movl -2372(%rbp), %eax
+ 5903 FFFF
+ 5904 4f4f 89C0 mov %eax, %eax
+ 5905 4f51 C6840500 movb $0, -7680(%rbp,%rax)
+ 5905 E2FFFF00
+ 5906 4f59 EB2F jmp .L139
+ 5907 .L138:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5908 .loc 2 388 0
+ 5909 4f5b 8B8DBCF6 movl -2372(%rbp), %ecx
+ 5909 FFFF
+ 5910 4f61 8B85BCF6 movl -2372(%rbp), %eax
+ 5910 FFFF
+ 5911 4f67 89C0 mov %eax, %eax
+ 5912 4f69 0FB68405 movzbl -7712(%rbp,%rax), %eax
+ 5912 E0E1FFFF
+ 5913 4f71 0FB6C0 movzbl %al, %eax
+ 5914 4f74 83E00F andl $15, %eax
+ 5915 4f77 4898 cltq
+ 5916 4f79 0FB69405 movzbl -7696(%rbp,%rax), %edx
+ 5916 F0E1FFFF
+ 5917 4f81 89C8 mov %ecx, %eax
+ 5918 4f83 88940500 movb %dl, -7680(%rbp,%rax)
+ 5918 E2FFFF
+ 5919 .L139:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 5920 .loc 2 383 0
+ 5921 4f8a 8385BCF6 addl $1, -2372(%rbp)
+ 5921 FFFF01
+ 5922 .L137:
+ 5923 4f91 83BDBCF6 cmpl $15, -2372(%rbp)
+ 5923 FFFF0F
+ 5924 4f98 769B jbe .L140
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 5925 .loc 2 391 0
+ 5926 4f9a F30F6F85 movdqu -7680(%rbp), %xmm0
+ 5926 00E2FFFF
+ 5927 .LBE723:
+
GAS LISTING /tmp/ccMa7HLZ.s page 206
+
+
+ 5928 .LBE722:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5929 .loc 2 868 0
+ 5930 4fa2 F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 5930 20F6FFFF
+ 5931 4faa F30F6F85 movdqu -2496(%rbp), %xmm0
+ 5931 40F6FFFF
+ 5932 4fb2 F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 5932 D0F6FFFF
+ 5933 4fba F30F6F85 movdqu -2528(%rbp), %xmm0
+ 5933 20F6FFFF
+ 5934 4fc2 F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 5934 C0F6FFFF
+ 5935 .LBB724:
+ 5936 .LBB725:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 5937 .loc 2 234 0
+ 5938 4fca F30F6F85 movdqu -2368(%rbp), %xmm0
+ 5938 C0F6FFFF
+ 5939 4fd2 F30F6F8D movdqu -2352(%rbp), %xmm1
+ 5939 D0F6FFFF
+ 5940 4fda 660FEBC1 por %xmm1, %xmm0
+ 5941 .LBE725:
+ 5942 .LBE724:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 5943 .loc 2 870 0
+ 5944 4fde F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 5944 20F6FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5945 .loc 2 872 0
+ 5946 4fe6 8B850CF6 mov -2548(%rbp), %eax
+ 5946 FFFF
+ 5947 4fec 48C1E004 salq $4, %rax
+ 5948 4ff0 480385E8 addq -2584(%rbp), %rax
+ 5948 F5FFFF
+ 5949 4ff7 660F6F00 movdqa (%rax), %xmm0
+ 5950 4ffb F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 5950 F0F6FFFF
+ 5951 5003 F30F6F85 movdqu -2528(%rbp), %xmm0
+ 5951 20F6FFFF
+ 5952 500b F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 5952 E0F6FFFF
+ 5953 .LBB726:
+ 5954 .LBB727:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 5955 .loc 2 380 0
+ 5956 5013 F30F6F85 movdqu -2320(%rbp), %xmm0
+ 5956 F0F6FFFF
+ 5957 501b F30F7F85 movdqu %xmm0, -7648(%rbp)
+ 5957 20E2FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 5958 .loc 2 381 0
+ 5959 5023 F30F6F85 movdqu -2336(%rbp), %xmm0
+ 5959 E0F6FFFF
+ 5960 502b F30F7F85 movdqu %xmm0, -7664(%rbp)
+ 5960 10E2FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+
GAS LISTING /tmp/ccMa7HLZ.s page 207
+
+
+ 5961 .loc 2 383 0
+ 5962 5033 C7850CF7 movl $0, -2292(%rbp)
+ 5962 FFFF0000
+ 5962 0000
+ 5963 503d EB5C jmp .L141
+ 5964 .L144:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 5965 .loc 2 385 0
+ 5966 503f 8B850CF7 movl -2292(%rbp), %eax
+ 5966 FFFF
+ 5967 5045 89C0 mov %eax, %eax
+ 5968 5047 0FB68405 movzbl -7664(%rbp,%rax), %eax
+ 5968 10E2FFFF
+ 5969 504f 84C0 testb %al, %al
+ 5970 5051 7912 jns .L142
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 5971 .loc 2 386 0
+ 5972 5053 8B850CF7 movl -2292(%rbp), %eax
+ 5972 FFFF
+ 5973 5059 89C0 mov %eax, %eax
+ 5974 505b C6840530 movb $0, -7632(%rbp,%rax)
+ 5974 E2FFFF00
+ 5975 5063 EB2F jmp .L143
+ 5976 .L142:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5977 .loc 2 388 0
+ 5978 5065 8B8D0CF7 movl -2292(%rbp), %ecx
+ 5978 FFFF
+ 5979 506b 8B850CF7 movl -2292(%rbp), %eax
+ 5979 FFFF
+ 5980 5071 89C0 mov %eax, %eax
+ 5981 5073 0FB68405 movzbl -7664(%rbp,%rax), %eax
+ 5981 10E2FFFF
+ 5982 507b 0FB6C0 movzbl %al, %eax
+ 5983 507e 83E00F andl $15, %eax
+ 5984 5081 4898 cltq
+ 5985 5083 0FB69405 movzbl -7648(%rbp,%rax), %edx
+ 5985 20E2FFFF
+ 5986 508b 89C8 mov %ecx, %eax
+ 5987 508d 88940530 movb %dl, -7632(%rbp,%rax)
+ 5987 E2FFFF
+ 5988 .L143:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 5989 .loc 2 383 0
+ 5990 5094 83850CF7 addl $1, -2292(%rbp)
+ 5990 FFFF01
+ 5991 .L141:
+ 5992 509b 83BD0CF7 cmpl $15, -2292(%rbp)
+ 5992 FFFF0F
+ 5993 50a2 769B jbe .L144
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 5994 .loc 2 391 0
+ 5995 50a4 F30F6F85 movdqu -7632(%rbp), %xmm0
+ 5995 30E2FFFF
+ 5996 .LBE727:
+ 5997 .LBE726:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+
GAS LISTING /tmp/ccMa7HLZ.s page 208
+
+
+ 5998 .loc 2 872 0
+ 5999 50ac F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 5999 20F6FFFF
+ 6000 50b4 F30F6F85 movdqu -2544(%rbp), %xmm0
+ 6000 10F6FFFF
+ 6001 50bc F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 6001 20F7FFFF
+ 6002 50c4 F30F6F85 movdqu -2528(%rbp), %xmm0
+ 6002 20F6FFFF
+ 6003 50cc F30F7F85 movdqu %xmm0, -2288(%rbp)
+ 6003 10F7FFFF
+ 6004 .LBB728:
+ 6005 .LBB729:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 6006 .loc 2 234 0
+ 6007 50d4 F30F6F85 movdqu -2288(%rbp), %xmm0
+ 6007 10F7FFFF
+ 6008 50dc F30F6F8D movdqu -2272(%rbp), %xmm1
+ 6008 20F7FFFF
+ 6009 50e4 660FEBC1 por %xmm1, %xmm0
+ 6010 .LBE729:
+ 6011 .LBE728:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 6012 .loc 2 874 0
+ 6013 50e8 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 6013 10F6FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6014 .loc 2 876 0
+ 6015 50f0 660F6F05 movdqa vec_01(%rip), %xmm0
+ 6015 00000000
+ 6016 50f8 F30F6F8D movdqu -2512(%rbp), %xmm1
+ 6016 30F6FFFF
+ 6017 5100 F30F7F8D movdqu %xmm1, -2240(%rbp)
+ 6017 40F7FFFF
+ 6018 5108 F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 6018 30F7FFFF
+ 6019 .LBB730:
+ 6020 .LBB731:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 6021 .loc 2 290 0
+ 6022 5110 F30F6F8D movdqu -2256(%rbp), %xmm1
+ 6022 30F7FFFF
+ 6023 5118 F30F6F85 movdqu -2240(%rbp), %xmm0
+ 6023 40F7FFFF
+ 6024 5120 660FF8C1 psubb %xmm1, %xmm0
+ 6025 .LBE731:
+ 6026 .LBE730:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6027 .loc 2 876 0
+ 6028 5124 F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 6028 30F6FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6029 .loc 2 878 0
+ 6030 512c 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 6030 00000000
+ 6031 5134 F30F6F8D movdqu -2512(%rbp), %xmm1
+ 6031 30F6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 209
+
+
+ 6032 513c F30F7F8D movdqu %xmm1, -2208(%rbp)
+ 6032 60F7FFFF
+ 6033 5144 F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 6033 50F7FFFF
+ 6034 .LBB732:
+ 6035 .LBB733:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 6036 .loc 2 206 0
+ 6037 514c F30F6F85 movdqu -2224(%rbp), %xmm0
+ 6037 50F7FFFF
+ 6038 5154 F30F6F8D movdqu -2208(%rbp), %xmm1
+ 6038 60F7FFFF
+ 6039 515c 660FDBC1 pand %xmm1, %xmm0
+ 6040 .LBE733:
+ 6041 .LBE732:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6042 .loc 2 878 0
+ 6043 5160 F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 6043 30F6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 6044 .loc 2 866 0
+ 6045 5168 83850CF6 addl $1, -2548(%rbp)
+ 6045 FFFF01
+ 6046 .L136:
+ 6047 516f 83BD0CF6 cmpl $15, -2548(%rbp)
+ 6047 FFFF0F
+ 6048 5176 0F866DFD jbe .L145
+ 6048 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 6049 .loc 2 882 0
+ 6050 517c F30F6F85 movdqu -2544(%rbp), %xmm0
+ 6050 10F6FFFF
+ 6051 .LBE717:
+ 6052 .LBE716:
+ 6053 .LBE715:
+ 6054 .LBE714:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 6055 .loc 2 1682 0
+ 6056 5184 660F7F85 movdqa %xmm0, -9808(%rbp)
+ 6056 B0D9FFFF
+ 6057 .LBB734:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 6058 .loc 2 1683 0
+ 6059 518c 660F6F85 movdqa -9808(%rbp), %xmm0
+ 6059 B0D9FFFF
+ 6060 5194 F30F7F85 movdqu %xmm0, -7744(%rbp)
+ 6060 C0E1FFFF
+ 6061 519c E8000000 call KDbgWriterGet at PLT
+ 6061 00
+ 6062 51a1 4885C0 testq %rax, %rax
+ 6063 51a4 7479 je .L147
+ 6064 51a6 BF010000 movl $1, %edi
+ 6064 00
+ 6065 51ab E8000000 call KDbgCondToFlag at PLT
+ 6065 00
+ 6066 51b0 4889C6 movq %rax, %rsi
+ 6067 51b3 BF100000 movl $16, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 210
+
+
+ 6067 00
+ 6068 51b8 E8000000 call KDbgTestModConds at PLT
+ 6068 00
+ 6069 51bd 84C0 testb %al, %al
+ 6070 51bf 745E je .L147
+ 6071 51c1 8B85CCE1 movl -7732(%rbp), %eax
+ 6071 FFFF
+ 6072 51c7 89C7 movl %eax, %edi
+ 6073 51c9 E832AEFF call bswap_32
+ 6073 FF
+ 6074 51ce 4189C5 movl %eax, %r13d
+ 6075 51d1 8B85C8E1 movl -7736(%rbp), %eax
+ 6075 FFFF
+ 6076 51d7 89C7 movl %eax, %edi
+ 6077 51d9 E822AEFF call bswap_32
+ 6077 FF
+ 6078 51de 4189C4 movl %eax, %r12d
+ 6079 51e1 8B85C4E1 movl -7740(%rbp), %eax
+ 6079 FFFF
+ 6080 51e7 89C7 movl %eax, %edi
+ 6081 51e9 E812AEFF call bswap_32
+ 6081 FF
+ 6082 51ee 89C3 movl %eax, %ebx
+ 6083 51f0 8B85C0E1 movl -7744(%rbp), %eax
+ 6083 FFFF
+ 6084 51f6 89C7 movl %eax, %edi
+ 6085 51f8 E803AEFF call bswap_32
+ 6085 FF
+ 6086 51fd 4589E9 movl %r13d, %r9d
+ 6087 5200 4589E0 movl %r12d, %r8d
+ 6088 5203 89D9 movl %ebx, %ecx
+ 6089 5205 89C2 movl %eax, %edx
+ 6090 5207 488D3500 leaq .LC0(%rip), %rsi
+ 6090 000000
+ 6091 520e 488D3D00 leaq .LC1(%rip), %rdi
+ 6091 000000
+ 6092 5215 B8000000 movl $0, %eax
+ 6092 00
+ 6093 521a E8000000 call KDbgMsg at PLT
+ 6093 00
+ 6094 .L147:
+ 6095 521f 660F6F85 movdqa -9808(%rbp), %xmm0
+ 6095 B0D9FFFF
+ 6096 5227 F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 6096 70F7FFFF
+ 6097 .LBE734:
+ 6098 .LBB735:
+ 6099 .LBB736:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6100 .loc 2 667 0
+ 6101 522f 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 6101 00000000
+ 6102 5237 F30F6F8D movdqu -2192(%rbp), %xmm1
+ 6102 70F7FFFF
+ 6103 523f F30F7F8D movdqu %xmm1, -2160(%rbp)
+ 6103 90F7FFFF
+ 6104 5247 F30F7F85 movdqu %xmm0, -2176(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 211
+
+
+ 6104 80F7FFFF
+ 6105 .LBB737:
+ 6106 .LBB738:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 6107 .loc 2 380 0
+ 6108 524f F30F6F85 movdqu -2160(%rbp), %xmm0
+ 6108 90F7FFFF
+ 6109 5257 F30F7F85 movdqu %xmm0, -7600(%rbp)
+ 6109 50E2FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 6110 .loc 2 381 0
+ 6111 525f F30F6F85 movdqu -2176(%rbp), %xmm0
+ 6111 80F7FFFF
+ 6112 5267 F30F7F85 movdqu %xmm0, -7616(%rbp)
+ 6112 40E2FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 6113 .loc 2 383 0
+ 6114 526f C785ACF7 movl $0, -2132(%rbp)
+ 6114 FFFF0000
+ 6114 0000
+ 6115 5279 EB5C jmp .L148
+ 6116 .L151:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 6117 .loc 2 385 0
+ 6118 527b 8B85ACF7 movl -2132(%rbp), %eax
+ 6118 FFFF
+ 6119 5281 89C0 mov %eax, %eax
+ 6120 5283 0FB68405 movzbl -7616(%rbp,%rax), %eax
+ 6120 40E2FFFF
+ 6121 528b 84C0 testb %al, %al
+ 6122 528d 7912 jns .L149
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 6123 .loc 2 386 0
+ 6124 528f 8B85ACF7 movl -2132(%rbp), %eax
+ 6124 FFFF
+ 6125 5295 89C0 mov %eax, %eax
+ 6126 5297 C6840560 movb $0, -7584(%rbp,%rax)
+ 6126 E2FFFF00
+ 6127 529f EB2F jmp .L150
+ 6128 .L149:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 6129 .loc 2 388 0
+ 6130 52a1 8B8DACF7 movl -2132(%rbp), %ecx
+ 6130 FFFF
+ 6131 52a7 8B85ACF7 movl -2132(%rbp), %eax
+ 6131 FFFF
+ 6132 52ad 89C0 mov %eax, %eax
+ 6133 52af 0FB68405 movzbl -7616(%rbp,%rax), %eax
+ 6133 40E2FFFF
+ 6134 52b7 0FB6C0 movzbl %al, %eax
+ 6135 52ba 83E00F andl $15, %eax
+ 6136 52bd 4898 cltq
+ 6137 52bf 0FB69405 movzbl -7600(%rbp,%rax), %edx
+ 6137 50E2FFFF
+ 6138 52c7 89C8 mov %ecx, %eax
+ 6139 52c9 88940560 movb %dl, -7584(%rbp,%rax)
+ 6139 E2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 212
+
+
+ 6140 .L150:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 6141 .loc 2 383 0
+ 6142 52d0 8385ACF7 addl $1, -2132(%rbp)
+ 6142 FFFF01
+ 6143 .L148:
+ 6144 52d7 83BDACF7 cmpl $15, -2132(%rbp)
+ 6144 FFFF0F
+ 6145 52de 769B jbe .L151
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 6146 .loc 2 391 0
+ 6147 52e0 F30F6F85 movdqu -7584(%rbp), %xmm0
+ 6147 60E2FFFF
+ 6148 .LBE738:
+ 6149 .LBE737:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6150 .loc 2 667 0
+ 6151 52e8 F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 6151 70F7FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6152 .loc 2 668 0
+ 6153 52f0 F30F6F85 movdqu -2192(%rbp), %xmm0
+ 6153 70F7FFFF
+ 6154 .LBE736:
+ 6155 .LBE735:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 6156 .loc 2 1684 0
+ 6157 52f8 660F7F85 movdqa %xmm0, -9808(%rbp)
+ 6157 B0D9FFFF
+ 6158 .LBB739:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 6159 .loc 2 1685 0
+ 6160 5300 660F6F85 movdqa -9808(%rbp), %xmm0
+ 6160 B0D9FFFF
+ 6161 5308 F30F7F85 movdqu %xmm0, -7760(%rbp)
+ 6161 B0E1FFFF
+ 6162 5310 E8000000 call KDbgWriterGet at PLT
+ 6162 00
+ 6163 5315 4885C0 testq %rax, %rax
+ 6164 5318 7479 je .L153
+ 6165 531a BF010000 movl $1, %edi
+ 6165 00
+ 6166 531f E8000000 call KDbgCondToFlag at PLT
+ 6166 00
+ 6167 5324 4889C6 movq %rax, %rsi
+ 6168 5327 BF100000 movl $16, %edi
+ 6168 00
+ 6169 532c E8000000 call KDbgTestModConds at PLT
+ 6169 00
+ 6170 5331 84C0 testb %al, %al
+ 6171 5333 745E je .L153
+ 6172 5335 8B85BCE1 movl -7748(%rbp), %eax
+ 6172 FFFF
+ 6173 533b 89C7 movl %eax, %edi
+ 6174 533d E8BEACFF call bswap_32
+ 6174 FF
+ 6175 5342 4189C5 movl %eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s page 213
+
+
+ 6176 5345 8B85B8E1 movl -7752(%rbp), %eax
+ 6176 FFFF
+ 6177 534b 89C7 movl %eax, %edi
+ 6178 534d E8AEACFF call bswap_32
+ 6178 FF
+ 6179 5352 4189C4 movl %eax, %r12d
+ 6180 5355 8B85B4E1 movl -7756(%rbp), %eax
+ 6180 FFFF
+ 6181 535b 89C7 movl %eax, %edi
+ 6182 535d E89EACFF call bswap_32
+ 6182 FF
+ 6183 5362 89C3 movl %eax, %ebx
+ 6184 5364 8B85B0E1 movl -7760(%rbp), %eax
+ 6184 FFFF
+ 6185 536a 89C7 movl %eax, %edi
+ 6186 536c E88FACFF call bswap_32
+ 6186 FF
+ 6187 5371 4589E9 movl %r13d, %r9d
+ 6188 5374 4589E0 movl %r12d, %r8d
+ 6189 5377 89D9 movl %ebx, %ecx
+ 6190 5379 89C2 movl %eax, %edx
+ 6191 537b 488D3500 leaq .LC2(%rip), %rsi
+ 6191 000000
+ 6192 5382 488D3D00 leaq .LC1(%rip), %rdi
+ 6192 000000
+ 6193 5389 B8000000 movl $0, %eax
+ 6193 00
+ 6194 538e E8000000 call KDbgMsg at PLT
+ 6194 00
+ 6195 .L153:
+ 6196 5393 660F6F85 movdqa -9808(%rbp), %xmm0
+ 6196 B0D9FFFF
+ 6197 539b F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 6197 C0F7FFFF
+ 6198 53a3 660F6F85 movdqa -9792(%rbp), %xmm0
+ 6198 C0D9FFFF
+ 6199 53ab F30F7F85 movdqu %xmm0, -2128(%rbp)
+ 6199 B0F7FFFF
+ 6200 .LBE739:
+ 6201 .LBB740:
+ 6202 .LBB741:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 6203 .loc 2 178 0
+ 6204 53b3 F30F6F85 movdqu -2128(%rbp), %xmm0
+ 6204 B0F7FFFF
+ 6205 53bb F30F6F8D movdqu -2112(%rbp), %xmm1
+ 6205 C0F7FFFF
+ 6206 53c3 660FEFC1 pxor %xmm1, %xmm0
+ 6207 .LBE741:
+ 6208 .LBE740:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 6209 .loc 2 1686 0
+ 6210 53c7 660F7F85 movdqa %xmm0, -9808(%rbp)
+ 6210 B0D9FFFF
+ 6211 .LBB742:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 6212 .loc 2 1687 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 214
+
+
+ 6213 53cf 660F6F85 movdqa -9808(%rbp), %xmm0
+ 6213 B0D9FFFF
+ 6214 53d7 F30F7F85 movdqu %xmm0, -7776(%rbp)
+ 6214 A0E1FFFF
+ 6215 53df E8000000 call KDbgWriterGet at PLT
+ 6215 00
+ 6216 53e4 4885C0 testq %rax, %rax
+ 6217 53e7 7479 je .L155
+ 6218 53e9 BF010000 movl $1, %edi
+ 6218 00
+ 6219 53ee E8000000 call KDbgCondToFlag at PLT
+ 6219 00
+ 6220 53f3 4889C6 movq %rax, %rsi
+ 6221 53f6 BF100000 movl $16, %edi
+ 6221 00
+ 6222 53fb E8000000 call KDbgTestModConds at PLT
+ 6222 00
+ 6223 5400 84C0 testb %al, %al
+ 6224 5402 745E je .L155
+ 6225 5404 8B85ACE1 movl -7764(%rbp), %eax
+ 6225 FFFF
+ 6226 540a 89C7 movl %eax, %edi
+ 6227 540c E8EFABFF call bswap_32
+ 6227 FF
+ 6228 5411 4189C5 movl %eax, %r13d
+ 6229 5414 8B85A8E1 movl -7768(%rbp), %eax
+ 6229 FFFF
+ 6230 541a 89C7 movl %eax, %edi
+ 6231 541c E8DFABFF call bswap_32
+ 6231 FF
+ 6232 5421 4189C4 movl %eax, %r12d
+ 6233 5424 8B85A4E1 movl -7772(%rbp), %eax
+ 6233 FFFF
+ 6234 542a 89C7 movl %eax, %edi
+ 6235 542c E8CFABFF call bswap_32
+ 6235 FF
+ 6236 5431 89C3 movl %eax, %ebx
+ 6237 5433 8B85A0E1 movl -7776(%rbp), %eax
+ 6237 FFFF
+ 6238 5439 89C7 movl %eax, %edi
+ 6239 543b E8C0ABFF call bswap_32
+ 6239 FF
+ 6240 5440 4589E9 movl %r13d, %r9d
+ 6241 5443 4589E0 movl %r12d, %r8d
+ 6242 5446 89D9 movl %ebx, %ecx
+ 6243 5448 89C2 movl %eax, %edx
+ 6244 544a 488D3500 leaq .LC3(%rip), %rsi
+ 6244 000000
+ 6245 5451 488D3D00 leaq .LC1(%rip), %rdi
+ 6245 000000
+ 6246 5458 B8000000 movl $0, %eax
+ 6246 00
+ 6247 545d E8000000 call KDbgMsg at PLT
+ 6247 00
+ 6248 .L155:
+ 6249 5462 660F6F85 movdqa -9808(%rbp), %xmm0
+ 6249 B0D9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 215
+
+
+ 6250 546a F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 6250 D0F7FFFF
+ 6251 .LBE742:
+ 6252 .LBB743:
+ 6253 .LBB744:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 6254 .loc 2 1357 0
+ 6255 5472 F30F6F85 movdqu -2096(%rbp), %xmm0
+ 6255 D0F7FFFF
+ 6256 547a F30F7F85 movdqu %xmm0, -7568(%rbp)
+ 6256 70E2FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 6257 .loc 2 1358 0
+ 6258 5482 8B857CE2 movl -7556(%rbp), %eax
+ 6258 FFFF
+ 6259 5488 898578E2 movl %eax, -7560(%rbp)
+ 6259 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 6260 .loc 2 1359 0
+ 6261 548e 8B857CE2 movl -7556(%rbp), %eax
+ 6261 FFFF
+ 6262 5494 898574E2 movl %eax, -7564(%rbp)
+ 6262 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 6263 .loc 2 1360 0
+ 6264 549a 8B857CE2 movl -7556(%rbp), %eax
+ 6264 FFFF
+ 6265 54a0 898570E2 movl %eax, -7568(%rbp)
+ 6265 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 6266 .loc 2 1361 0
+ 6267 54a6 F30F6F85 movdqu -7568(%rbp), %xmm0
+ 6267 70E2FFFF
+ 6268 .LBE744:
+ 6269 .LBE743:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 6270 .loc 2 1688 0
+ 6271 54ae 660F7F85 movdqa %xmm0, -9808(%rbp)
+ 6271 B0D9FFFF
+ 6272 .LBB745:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 6273 .loc 2 1689 0
+ 6274 54b6 660F6F85 movdqa -9808(%rbp), %xmm0
+ 6274 B0D9FFFF
+ 6275 54be F30F7F85 movdqu %xmm0, -7792(%rbp)
+ 6275 90E1FFFF
+ 6276 54c6 E8000000 call KDbgWriterGet at PLT
+ 6276 00
+ 6277 54cb 4885C0 testq %rax, %rax
+ 6278 54ce 7479 je .L157
+ 6279 54d0 BF010000 movl $1, %edi
+ 6279 00
+ 6280 54d5 E8000000 call KDbgCondToFlag at PLT
+ 6280 00
+ 6281 54da 4889C6 movq %rax, %rsi
+ 6282 54dd BF100000 movl $16, %edi
+ 6282 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 216
+
+
+ 6283 54e2 E8000000 call KDbgTestModConds at PLT
+ 6283 00
+ 6284 54e7 84C0 testb %al, %al
+ 6285 54e9 745E je .L157
+ 6286 54eb 8B859CE1 movl -7780(%rbp), %eax
+ 6286 FFFF
+ 6287 54f1 89C7 movl %eax, %edi
+ 6288 54f3 E808ABFF call bswap_32
+ 6288 FF
+ 6289 54f8 4189C5 movl %eax, %r13d
+ 6290 54fb 8B8598E1 movl -7784(%rbp), %eax
+ 6290 FFFF
+ 6291 5501 89C7 movl %eax, %edi
+ 6292 5503 E8F8AAFF call bswap_32
+ 6292 FF
+ 6293 5508 4189C4 movl %eax, %r12d
+ 6294 550b 8B8594E1 movl -7788(%rbp), %eax
+ 6294 FFFF
+ 6295 5511 89C7 movl %eax, %edi
+ 6296 5513 E8E8AAFF call bswap_32
+ 6296 FF
+ 6297 5518 89C3 movl %eax, %ebx
+ 6298 551a 8B8590E1 movl -7792(%rbp), %eax
+ 6298 FFFF
+ 6299 5520 89C7 movl %eax, %edi
+ 6300 5522 E8D9AAFF call bswap_32
+ 6300 FF
+ 6301 5527 4589E9 movl %r13d, %r9d
+ 6302 552a 4589E0 movl %r12d, %r8d
+ 6303 552d 89D9 movl %ebx, %ecx
+ 6304 552f 89C2 movl %eax, %edx
+ 6305 5531 488D3500 leaq .LC4(%rip), %rsi
+ 6305 000000
+ 6306 5538 488D3D00 leaq .LC1(%rip), %rdi
+ 6306 000000
+ 6307 553f B8000000 movl $0, %eax
+ 6307 00
+ 6308 5544 E8000000 call KDbgMsg at PLT
+ 6308 00
+ 6309 .L157:
+ 6310 .LBE745:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 6311 .loc 2 1690 0
+ 6312 5549 660F6F85 movdqa -9808(%rbp), %xmm0
+ 6312 B0D9FFFF
+ 6313 .LBE711:
+ 6314 .LBE710:
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x40,7);
+ 6315 .loc 2 1750 0
+ 6316 5551 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 6316 20E6FFFF
+ 6317 5559 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 6317 10E6FFFF
+ 6318 5561 F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 6318 E0F7FFFF
+ 6319 .LBB746:
+ 6320 .LBB747:
+
GAS LISTING /tmp/ccMa7HLZ.s page 217
+
+
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6321 .loc 2 1565 0
+ 6322 5569 F30F6F85 movdqu -2080(%rbp), %xmm0
+ 6322 E0F7FFFF
+ 6323 5571 660F7F85 movdqa %xmm0, -9760(%rbp)
+ 6323 E0D9FFFF
+ 6324 5579 660F6F85 movdqa -9760(%rbp), %xmm0
+ 6324 E0D9FFFF
+ 6325 5581 F30F7F85 movdqu %xmm0, -2064(%rbp)
+ 6325 F0F7FFFF
+ 6326 .LBB748:
+ 6327 .LBB749:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 6328 .loc 2 1282 0
+ 6329 5589 F30F6F85 movdqu -2064(%rbp), %xmm0
+ 6329 F0F7FFFF
+ 6330 5591 F30F7F85 movdqu %xmm0, -7552(%rbp)
+ 6330 80E2FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 6331 .loc 2 1283 0
+ 6332 5599 8B8588E2 movl -7544(%rbp), %eax
+ 6332 FFFF
+ 6333 559f 89858CE2 movl %eax, -7540(%rbp)
+ 6333 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 6334 .loc 2 1284 0
+ 6335 55a5 8B8584E2 movl -7548(%rbp), %eax
+ 6335 FFFF
+ 6336 55ab 898588E2 movl %eax, -7544(%rbp)
+ 6336 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 6337 .loc 2 1285 0
+ 6338 55b1 8B8580E2 movl -7552(%rbp), %eax
+ 6338 FFFF
+ 6339 55b7 898584E2 movl %eax, -7548(%rbp)
+ 6339 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 6340 .loc 2 1286 0
+ 6341 55bd C78580E2 movl $0, -7552(%rbp)
+ 6341 FFFF0000
+ 6341 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 6342 .loc 2 1287 0
+ 6343 55c7 F30F6F85 movdqu -7552(%rbp), %xmm0
+ 6343 80E2FFFF
+ 6344 .LBE749:
+ 6345 .LBE748:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6346 .loc 2 1567 0
+ 6347 55cf 660F7F85 movdqa %xmm0, -9760(%rbp)
+ 6347 E0D9FFFF
+ 6348 55d7 660F6F85 movdqa -9760(%rbp), %xmm0
+ 6348 E0D9FFFF
+ 6349 55df 660FEF85 pxor -2080(%rbp), %xmm0
+ 6349 E0F7FFFF
+ 6350 55e7 F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 6350 E0F7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 218
+
+
+ 6351 55ef 660F6F85 movdqa -9760(%rbp), %xmm0
+ 6351 E0D9FFFF
+ 6352 55f7 F30F7F85 movdqu %xmm0, -2048(%rbp)
+ 6352 00F8FFFF
+ 6353 .LBB750:
+ 6354 .LBB751:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 6355 .loc 2 1282 0
+ 6356 55ff F30F6F85 movdqu -2048(%rbp), %xmm0
+ 6356 00F8FFFF
+ 6357 5607 F30F7F85 movdqu %xmm0, -7536(%rbp)
+ 6357 90E2FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 6358 .loc 2 1283 0
+ 6359 560f 8B8598E2 movl -7528(%rbp), %eax
+ 6359 FFFF
+ 6360 5615 89859CE2 movl %eax, -7524(%rbp)
+ 6360 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 6361 .loc 2 1284 0
+ 6362 561b 8B8594E2 movl -7532(%rbp), %eax
+ 6362 FFFF
+ 6363 5621 898598E2 movl %eax, -7528(%rbp)
+ 6363 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 6364 .loc 2 1285 0
+ 6365 5627 8B8590E2 movl -7536(%rbp), %eax
+ 6365 FFFF
+ 6366 562d 898594E2 movl %eax, -7532(%rbp)
+ 6366 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 6367 .loc 2 1286 0
+ 6368 5633 C78590E2 movl $0, -7536(%rbp)
+ 6368 FFFF0000
+ 6368 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 6369 .loc 2 1287 0
+ 6370 563d F30F6F85 movdqu -7536(%rbp), %xmm0
+ 6370 90E2FFFF
+ 6371 .LBE751:
+ 6372 .LBE750:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6373 .loc 2 1568 0
+ 6374 5645 660F7F85 movdqa %xmm0, -9760(%rbp)
+ 6374 E0D9FFFF
+ 6375 564d 660F6F85 movdqa -9760(%rbp), %xmm0
+ 6375 E0D9FFFF
+ 6376 5655 660FEF85 pxor -2080(%rbp), %xmm0
+ 6376 E0F7FFFF
+ 6377 565d F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 6377 E0F7FFFF
+ 6378 5665 660F6F85 movdqa -9760(%rbp), %xmm0
+ 6378 E0D9FFFF
+ 6379 566d F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 6379 10F8FFFF
+ 6380 .LBB752:
+ 6381 .LBB753:
+
GAS LISTING /tmp/ccMa7HLZ.s page 219
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 6382 .loc 2 1282 0
+ 6383 5675 F30F6F85 movdqu -2032(%rbp), %xmm0
+ 6383 10F8FFFF
+ 6384 567d F30F7F85 movdqu %xmm0, -7520(%rbp)
+ 6384 A0E2FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 6385 .loc 2 1283 0
+ 6386 5685 8B85A8E2 movl -7512(%rbp), %eax
+ 6386 FFFF
+ 6387 568b 8985ACE2 movl %eax, -7508(%rbp)
+ 6387 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 6388 .loc 2 1284 0
+ 6389 5691 8B85A4E2 movl -7516(%rbp), %eax
+ 6389 FFFF
+ 6390 5697 8985A8E2 movl %eax, -7512(%rbp)
+ 6390 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 6391 .loc 2 1285 0
+ 6392 569d 8B85A0E2 movl -7520(%rbp), %eax
+ 6392 FFFF
+ 6393 56a3 8985A4E2 movl %eax, -7516(%rbp)
+ 6393 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 6394 .loc 2 1286 0
+ 6395 56a9 C785A0E2 movl $0, -7520(%rbp)
+ 6395 FFFF0000
+ 6395 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 6396 .loc 2 1287 0
+ 6397 56b3 F30F6F85 movdqu -7520(%rbp), %xmm0
+ 6397 A0E2FFFF
+ 6398 .LBE753:
+ 6399 .LBE752:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6400 .loc 2 1569 0
+ 6401 56bb 660F7F85 movdqa %xmm0, -9760(%rbp)
+ 6401 E0D9FFFF
+ 6402 56c3 660F6F85 movdqa -9760(%rbp), %xmm0
+ 6402 E0D9FFFF
+ 6403 56cb 660FEF85 pxor -2080(%rbp), %xmm0
+ 6403 E0F7FFFF
+ 6404 56d3 F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 6404 E0F7FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6405 .loc 2 1571 0
+ 6406 56db F30F6F85 movdqu -2080(%rbp), %xmm0
+ 6406 E0F7FFFF
+ 6407 .LBE747:
+ 6408 .LBE746:
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x40,7);
+ 6409 .loc 2 1750 0
+ 6410 56e3 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 6410 10E6FFFF
+ 6411 56eb F30F6F85 movdqu -6624(%rbp), %xmm0
+ 6411 20E6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 220
+
+
+ 6412 56f3 F30F6F8D movdqu -6640(%rbp), %xmm1
+ 6412 10E6FFFF
+ 6413 56fb 660FEFC1 pxor %xmm1, %xmm0
+ 6414 56ff F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 6414 10E6FFFF
+ 6415 5707 488B85B8 movq -9544(%rbp), %rax
+ 6415 DAFFFF
+ 6416 570e 4883C070 addq $112, %rax
+ 6417 5712 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 6417 10E6FFFF
+ 6418 571a F30F7F00 movdqu %xmm0, (%rax)
+ 6419 571e F30F6F85 movdqu -6640(%rbp), %xmm0
+ 6419 10E6FFFF
+ 6420 5726 F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 6420 30F8FFFF
+ 6421 .LBB754:
+ 6422 .LBB755:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 6423 .loc 2 1681 0
+ 6424 572e B8800000 movl $128, %eax
+ 6424 00
+ 6425 5733 660F6F05 movdqa vec_00(%rip), %xmm0
+ 6425 00000000
+ 6426 573b F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 6426 50F8FFFF
+ 6427 5743 89854CF8 movl %eax, -1972(%rbp)
+ 6427 FFFF
+ 6428 .LBB756:
+ 6429 .LBB757:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 6430 .loc 2 522 0
+ 6431 5749 F30F6F85 movdqu -1968(%rbp), %xmm0
+ 6431 50F8FFFF
+ 6432 5751 F30F7F85 movdqu %xmm0, -7440(%rbp)
+ 6432 F0E2FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 6433 .loc 2 523 0
+ 6434 5759 B8030000 movl $3, %eax
+ 6434 00
+ 6435 575e 4898 cltq
+ 6436 5760 8B954CF8 movl -1972(%rbp), %edx
+ 6436 FFFF
+ 6437 5766 899485F0 movl %edx, -7440(%rbp,%rax,4)
+ 6437 E2FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 6438 .loc 2 524 0
+ 6439 576d F30F6F85 movdqu -7440(%rbp), %xmm0
+ 6439 F0E2FFFF
+ 6440 5775 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 6440 50F8FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6441 .loc 2 526 0
+ 6442 577d F30F6F85 movdqu -1968(%rbp), %xmm0
+ 6442 50F8FFFF
+ 6443 .LBE757:
+ 6444 .LBE756:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+
GAS LISTING /tmp/ccMa7HLZ.s page 221
+
+
+ 6445 .loc 2 1681 0
+ 6446 5785 660F7F85 movdqa %xmm0, -9728(%rbp)
+ 6446 00DAFFFF
+ 6447 578d F30F6F85 movdqu -2000(%rbp), %xmm0
+ 6447 30F8FFFF
+ 6448 5795 F30F7F85 movdqu %xmm0, -1952(%rbp)
+ 6448 60F8FFFF
+ 6449 579d F30F6F85 movdqu -1952(%rbp), %xmm0
+ 6449 60F8FFFF
+ 6450 57a5 F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 6450 80F8FFFF
+ 6451 57ad 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 6451 000000
+ 6452 57b4 48898578 movq %rax, -1928(%rbp)
+ 6452 F8FFFF
+ 6453 .LBB758:
+ 6454 .LBB759:
+ 6455 .LBB760:
+ 6456 .LBB761:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 6457 .loc 2 851 0
+ 6458 57bb 660F6F05 movdqa vec_00(%rip), %xmm0
+ 6458 00000000
+ 6459 57c3 F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 6459 A0F8FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 6460 .loc 2 854 0
+ 6461 57cb 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 6461 00000000
+ 6462 57d3 F30F6F8D movdqu -1920(%rbp), %xmm1
+ 6462 80F8FFFF
+ 6463 57db F30F7F8D movdqu %xmm1, -1808(%rbp)
+ 6463 F0F8FFFF
+ 6464 57e3 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 6464 E0F8FFFF
+ 6465 .LBB762:
+ 6466 .LBB763:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 6467 .loc 2 206 0
+ 6468 57eb F30F6F85 movdqu -1824(%rbp), %xmm0
+ 6468 E0F8FFFF
+ 6469 57f3 F30F6F8D movdqu -1808(%rbp), %xmm1
+ 6469 F0F8FFFF
+ 6470 57fb 660FDBC1 pand %xmm1, %xmm0
+ 6471 .LBE763:
+ 6472 .LBE762:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 6473 .loc 2 854 0
+ 6474 57ff F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 6474 D0F8FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 6475 .loc 2 862 0
+ 6476 5807 660F6F05 movdqa vec_10(%rip), %xmm0
+ 6476 00000000
+ 6477 580f F30F6F8D movdqu -1920(%rbp), %xmm1
+ 6477 80F8FFFF
+ 6478 5817 F30F7F8D movdqu %xmm1, -1776(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 222
+
+
+ 6478 10F9FFFF
+ 6479 581f F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 6479 00F9FFFF
+ 6480 .LBB764:
+ 6481 .loc 2 2642 0
+ 6482 5827 0FB68510 movzbl -1776(%rbp), %eax
+ 6482 F9FFFF
+ 6483 582e 0FB69500 movzbl -1792(%rbp), %edx
+ 6483 F9FFFF
+ 6484 5835 0FB6C0 movzbl %al, %eax
+ 6485 5838 6689858E movw %ax, -10354(%rbp)
+ 6485 D7FFFF
+ 6486 583f 0FB7858E movzwl -10354(%rbp), %eax
+ 6486 D7FFFF
+ 6487 5846 F6F2 divb %dl
+ 6488 5848 4189C7 movl %eax, %r15d
+ 6489 584b 0FB68511 movzbl -1775(%rbp), %eax
+ 6489 F9FFFF
+ 6490 5852 0FB69501 movzbl -1791(%rbp), %edx
+ 6490 F9FFFF
+ 6491 5859 0FB6C0 movzbl %al, %eax
+ 6492 585c 6689858E movw %ax, -10354(%rbp)
+ 6492 D7FFFF
+ 6493 5863 0FB7858E movzwl -10354(%rbp), %eax
+ 6493 D7FFFF
+ 6494 586a F6F2 divb %dl
+ 6495 586c 88851FDA movb %al, -9697(%rbp)
+ 6495 FFFF
+ 6496 5872 0FB68512 movzbl -1774(%rbp), %eax
+ 6496 F9FFFF
+ 6497 5879 0FB69502 movzbl -1790(%rbp), %edx
+ 6497 F9FFFF
+ 6498 5880 0FB6C0 movzbl %al, %eax
+ 6499 5883 6689858E movw %ax, -10354(%rbp)
+ 6499 D7FFFF
+ 6500 588a 0FB7858E movzwl -10354(%rbp), %eax
+ 6500 D7FFFF
+ 6501 5891 F6F2 divb %dl
+ 6502 5893 88851EDA movb %al, -9698(%rbp)
+ 6502 FFFF
+ 6503 5899 0FB68513 movzbl -1773(%rbp), %eax
+ 6503 F9FFFF
+ 6504 58a0 0FB69503 movzbl -1789(%rbp), %edx
+ 6504 F9FFFF
+ 6505 58a7 0FB6C0 movzbl %al, %eax
+ 6506 58aa 6689858E movw %ax, -10354(%rbp)
+ 6506 D7FFFF
+ 6507 58b1 0FB7858E movzwl -10354(%rbp), %eax
+ 6507 D7FFFF
+ 6508 58b8 F6F2 divb %dl
+ 6509 58ba 88851DDA movb %al, -9699(%rbp)
+ 6509 FFFF
+ 6510 58c0 0FB68514 movzbl -1772(%rbp), %eax
+ 6510 F9FFFF
+ 6511 58c7 0FB69504 movzbl -1788(%rbp), %edx
+ 6511 F9FFFF
+ 6512 58ce 0FB6C0 movzbl %al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 223
+
+
+ 6513 58d1 6689858E movw %ax, -10354(%rbp)
+ 6513 D7FFFF
+ 6514 58d8 0FB7858E movzwl -10354(%rbp), %eax
+ 6514 D7FFFF
+ 6515 58df F6F2 divb %dl
+ 6516 58e1 88851CDA movb %al, -9700(%rbp)
+ 6516 FFFF
+ 6517 58e7 0FB68515 movzbl -1771(%rbp), %eax
+ 6517 F9FFFF
+ 6518 58ee 0FB69505 movzbl -1787(%rbp), %edx
+ 6518 F9FFFF
+ 6519 58f5 0FB6C0 movzbl %al, %eax
+ 6520 58f8 6689858E movw %ax, -10354(%rbp)
+ 6520 D7FFFF
+ 6521 58ff 0FB7858E movzwl -10354(%rbp), %eax
+ 6521 D7FFFF
+ 6522 5906 F6F2 divb %dl
+ 6523 5908 4189C1 movl %eax, %r9d
+ 6524 590b 0FB68516 movzbl -1770(%rbp), %eax
+ 6524 F9FFFF
+ 6525 5912 0FB69506 movzbl -1786(%rbp), %edx
+ 6525 F9FFFF
+ 6526 5919 0FB6C0 movzbl %al, %eax
+ 6527 591c 6689858E movw %ax, -10354(%rbp)
+ 6527 D7FFFF
+ 6528 5923 0FB7858E movzwl -10354(%rbp), %eax
+ 6528 D7FFFF
+ 6529 592a F6F2 divb %dl
+ 6530 592c 89C7 movl %eax, %edi
+ 6531 592e 0FB68517 movzbl -1769(%rbp), %eax
+ 6531 F9FFFF
+ 6532 5935 0FB69507 movzbl -1785(%rbp), %edx
+ 6532 F9FFFF
+ 6533 593c 0FB6C0 movzbl %al, %eax
+ 6534 593f 6689858E movw %ax, -10354(%rbp)
+ 6534 D7FFFF
+ 6535 5946 0FB7858E movzwl -10354(%rbp), %eax
+ 6535 D7FFFF
+ 6536 594d F6F2 divb %dl
+ 6537 594f 89C3 movl %eax, %ebx
+ 6538 5951 0FB68518 movzbl -1768(%rbp), %eax
+ 6538 F9FFFF
+ 6539 5958 0FB69508 movzbl -1784(%rbp), %edx
+ 6539 F9FFFF
+ 6540 595f 0FB6C0 movzbl %al, %eax
+ 6541 5962 6689858E movw %ax, -10354(%rbp)
+ 6541 D7FFFF
+ 6542 5969 0FB7858E movzwl -10354(%rbp), %eax
+ 6542 D7FFFF
+ 6543 5970 F6F2 divb %dl
+ 6544 5972 4189C2 movl %eax, %r10d
+ 6545 5975 0FB68519 movzbl -1767(%rbp), %eax
+ 6545 F9FFFF
+ 6546 597c 0FB69509 movzbl -1783(%rbp), %edx
+ 6546 F9FFFF
+ 6547 5983 0FB6C0 movzbl %al, %eax
+ 6548 5986 6689858E movw %ax, -10354(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 224
+
+
+ 6548 D7FFFF
+ 6549 598d 0FB7858E movzwl -10354(%rbp), %eax
+ 6549 D7FFFF
+ 6550 5994 F6F2 divb %dl
+ 6551 5996 4189C3 movl %eax, %r11d
+ 6552 5999 0FB6851A movzbl -1766(%rbp), %eax
+ 6552 F9FFFF
+ 6553 59a0 0FB6950A movzbl -1782(%rbp), %edx
+ 6553 F9FFFF
+ 6554 59a7 0FB6C0 movzbl %al, %eax
+ 6555 59aa 6689858E movw %ax, -10354(%rbp)
+ 6555 D7FFFF
+ 6556 59b1 0FB7858E movzwl -10354(%rbp), %eax
+ 6556 D7FFFF
+ 6557 59b8 F6F2 divb %dl
+ 6558 59ba 4189C4 movl %eax, %r12d
+ 6559 59bd 0FB6851B movzbl -1765(%rbp), %eax
+ 6559 F9FFFF
+ 6560 59c4 0FB6950B movzbl -1781(%rbp), %edx
+ 6560 F9FFFF
+ 6561 59cb 0FB6C0 movzbl %al, %eax
+ 6562 59ce 6689858E movw %ax, -10354(%rbp)
+ 6562 D7FFFF
+ 6563 59d5 0FB7858E movzwl -10354(%rbp), %eax
+ 6563 D7FFFF
+ 6564 59dc F6F2 divb %dl
+ 6565 59de 4189C5 movl %eax, %r13d
+ 6566 59e1 0FB6851C movzbl -1764(%rbp), %eax
+ 6566 F9FFFF
+ 6567 59e8 0FB6950C movzbl -1780(%rbp), %edx
+ 6567 F9FFFF
+ 6568 59ef 0FB6C0 movzbl %al, %eax
+ 6569 59f2 6689858E movw %ax, -10354(%rbp)
+ 6569 D7FFFF
+ 6570 59f9 0FB7858E movzwl -10354(%rbp), %eax
+ 6570 D7FFFF
+ 6571 5a00 F6F2 divb %dl
+ 6572 5a02 4189C6 movl %eax, %r14d
+ 6573 5a05 0FB6851D movzbl -1763(%rbp), %eax
+ 6573 F9FFFF
+ 6574 5a0c 0FB6950D movzbl -1779(%rbp), %edx
+ 6574 F9FFFF
+ 6575 5a13 0FB6C0 movzbl %al, %eax
+ 6576 5a16 6689858E movw %ax, -10354(%rbp)
+ 6576 D7FFFF
+ 6577 5a1d 0FB7858E movzwl -10354(%rbp), %eax
+ 6577 D7FFFF
+ 6578 5a24 F6F2 divb %dl
+ 6579 5a26 4189C0 movl %eax, %r8d
+ 6580 5a29 0FB6851E movzbl -1762(%rbp), %eax
+ 6580 F9FFFF
+ 6581 5a30 0FB6950E movzbl -1778(%rbp), %edx
+ 6581 F9FFFF
+ 6582 5a37 0FB6C0 movzbl %al, %eax
+ 6583 5a3a 6689858E movw %ax, -10354(%rbp)
+ 6583 D7FFFF
+ 6584 5a41 0FB7858E movzwl -10354(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 225
+
+
+ 6584 D7FFFF
+ 6585 5a48 F6F2 divb %dl
+ 6586 5a4a 89C6 movl %eax, %esi
+ 6587 5a4c 0FB6851F movzbl -1761(%rbp), %eax
+ 6587 F9FFFF
+ 6588 5a53 0FB6950F movzbl -1777(%rbp), %edx
+ 6588 F9FFFF
+ 6589 5a5a 0FB6C0 movzbl %al, %eax
+ 6590 5a5d 6689858E movw %ax, -10354(%rbp)
+ 6590 D7FFFF
+ 6591 5a64 0FB7858E movzwl -10354(%rbp), %eax
+ 6591 D7FFFF
+ 6592 5a6b F6F2 divb %dl
+ 6593 5a6d 89C1 movl %eax, %ecx
+ 6594 .LBB765:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 6595 .loc 2 346 0
+ 6596 5a6f 0FB6D3 movzbl %bl, %edx
+ 6597 5a72 400FB6C7 movzbl %dil, %eax
+ 6598 5a76 48C1E208 salq $8, %rdx
+ 6599 5a7a 4809C2 orq %rax, %rdx
+ 6600 5a7d 410FB6C1 movzbl %r9b, %eax
+ 6601 5a81 48C1E208 salq $8, %rdx
+ 6602 5a85 4809C2 orq %rax, %rdx
+ 6603 5a88 0FB6851C movzbl -9700(%rbp), %eax
+ 6603 DAFFFF
+ 6604 5a8f 48C1E208 salq $8, %rdx
+ 6605 5a93 4809C2 orq %rax, %rdx
+ 6606 5a96 0FB6851D movzbl -9699(%rbp), %eax
+ 6606 DAFFFF
+ 6607 5a9d 48C1E208 salq $8, %rdx
+ 6608 5aa1 4809C2 orq %rax, %rdx
+ 6609 5aa4 0FB6851E movzbl -9698(%rbp), %eax
+ 6609 DAFFFF
+ 6610 5aab 48C1E208 salq $8, %rdx
+ 6611 5aaf 4809C2 orq %rax, %rdx
+ 6612 5ab2 0FB6851F movzbl -9697(%rbp), %eax
+ 6612 DAFFFF
+ 6613 5ab9 48C1E208 salq $8, %rdx
+ 6614 5abd 4809C2 orq %rax, %rdx
+ 6615 5ac0 410FB6C7 movzbl %r15b, %eax
+ 6616 5ac4 48C1E208 salq $8, %rdx
+ 6617 5ac8 4809C2 orq %rax, %rdx
+ 6618 5acb 0FB6C1 movzbl %cl, %eax
+ 6619 5ace 400FB6CE movzbl %sil, %ecx
+ 6620 5ad2 48C1E008 salq $8, %rax
+ 6621 5ad6 4809C8 orq %rcx, %rax
+ 6622 5ad9 410FB6C8 movzbl %r8b, %ecx
+ 6623 5add 48C1E008 salq $8, %rax
+ 6624 5ae1 4809C8 orq %rcx, %rax
+ 6625 5ae4 410FB6CE movzbl %r14b, %ecx
+ 6626 5ae8 48C1E008 salq $8, %rax
+ 6627 5aec 4809C8 orq %rcx, %rax
+ 6628 5aef 410FB6CD movzbl %r13b, %ecx
+ 6629 5af3 48C1E008 salq $8, %rax
+ 6630 5af7 4809C8 orq %rcx, %rax
+ 6631 5afa 410FB6CC movzbl %r12b, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 226
+
+
+ 6632 5afe 48C1E008 salq $8, %rax
+ 6633 5b02 4809C8 orq %rcx, %rax
+ 6634 5b05 410FB6CB movzbl %r11b, %ecx
+ 6635 5b09 48C1E008 salq $8, %rax
+ 6636 5b0d 4809C8 orq %rcx, %rax
+ 6637 5b10 410FB6CA movzbl %r10b, %ecx
+ 6638 5b14 48C1E008 salq $8, %rax
+ 6639 5b18 4809C8 orq %rcx, %rax
+ 6640 5b1b 488995B0 movq %rdx, -10320(%rbp)
+ 6640 D7FFFF
+ 6641 5b22 488985B8 movq %rax, -10312(%rbp)
+ 6641 D7FFFF
+ 6642 5b29 660F6F85 movdqa -10320(%rbp), %xmm0
+ 6642 B0D7FFFF
+ 6643 .LBE765:
+ 6644 .LBE764:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 6645 .loc 2 862 0
+ 6646 5b31 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 6646 C0F8FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 6647 .loc 2 866 0
+ 6648 5b39 C7859CF8 movl $0, -1892(%rbp)
+ 6648 FFFF0000
+ 6648 0000
+ 6649 5b43 E9860200 jmp .L158
+ 6649 00
+ 6650 .L167:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 6651 .loc 2 868 0
+ 6652 5b48 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 6652 00000000
+ 6653 5b50 F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 6653 30F9FFFF
+ 6654 5b58 F30F6F85 movdqu -1856(%rbp), %xmm0
+ 6654 C0F8FFFF
+ 6655 5b60 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 6655 20F9FFFF
+ 6656 .LBB766:
+ 6657 .LBB767:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 6658 .loc 2 380 0
+ 6659 5b68 F30F6F85 movdqu -1744(%rbp), %xmm0
+ 6659 30F9FFFF
+ 6660 5b70 F30F7F85 movdqu %xmm0, -7408(%rbp)
+ 6660 10E3FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 6661 .loc 2 381 0
+ 6662 5b78 F30F6F85 movdqu -1760(%rbp), %xmm0
+ 6662 20F9FFFF
+ 6663 5b80 F30F7F85 movdqu %xmm0, -7424(%rbp)
+ 6663 00E3FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 6664 .loc 2 383 0
+ 6665 5b88 C7854CF9 movl $0, -1716(%rbp)
+ 6665 FFFF0000
+ 6665 0000
+
GAS LISTING /tmp/ccMa7HLZ.s page 227
+
+
+ 6666 5b92 EB5C jmp .L159
+ 6667 .L162:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 6668 .loc 2 385 0
+ 6669 5b94 8B854CF9 movl -1716(%rbp), %eax
+ 6669 FFFF
+ 6670 5b9a 89C0 mov %eax, %eax
+ 6671 5b9c 0FB68405 movzbl -7424(%rbp,%rax), %eax
+ 6671 00E3FFFF
+ 6672 5ba4 84C0 testb %al, %al
+ 6673 5ba6 7912 jns .L160
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 6674 .loc 2 386 0
+ 6675 5ba8 8B854CF9 movl -1716(%rbp), %eax
+ 6675 FFFF
+ 6676 5bae 89C0 mov %eax, %eax
+ 6677 5bb0 C6840520 movb $0, -7392(%rbp,%rax)
+ 6677 E3FFFF00
+ 6678 5bb8 EB2F jmp .L161
+ 6679 .L160:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 6680 .loc 2 388 0
+ 6681 5bba 8B8D4CF9 movl -1716(%rbp), %ecx
+ 6681 FFFF
+ 6682 5bc0 8B854CF9 movl -1716(%rbp), %eax
+ 6682 FFFF
+ 6683 5bc6 89C0 mov %eax, %eax
+ 6684 5bc8 0FB68405 movzbl -7424(%rbp,%rax), %eax
+ 6684 00E3FFFF
+ 6685 5bd0 0FB6C0 movzbl %al, %eax
+ 6686 5bd3 83E00F andl $15, %eax
+ 6687 5bd6 4898 cltq
+ 6688 5bd8 0FB69405 movzbl -7408(%rbp,%rax), %edx
+ 6688 10E3FFFF
+ 6689 5be0 89C8 mov %ecx, %eax
+ 6690 5be2 88940520 movb %dl, -7392(%rbp,%rax)
+ 6690 E3FFFF
+ 6691 .L161:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 6692 .loc 2 383 0
+ 6693 5be9 83854CF9 addl $1, -1716(%rbp)
+ 6693 FFFF01
+ 6694 .L159:
+ 6695 5bf0 83BD4CF9 cmpl $15, -1716(%rbp)
+ 6695 FFFF0F
+ 6696 5bf7 769B jbe .L162
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 6697 .loc 2 391 0
+ 6698 5bf9 F30F6F85 movdqu -7392(%rbp), %xmm0
+ 6698 20E3FFFF
+ 6699 .LBE767:
+ 6700 .LBE766:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 6701 .loc 2 868 0
+ 6702 5c01 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 6702 B0F8FFFF
+ 6703 5c09 F30F6F85 movdqu -1840(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 228
+
+
+ 6703 D0F8FFFF
+ 6704 5c11 F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 6704 60F9FFFF
+ 6705 5c19 F30F6F85 movdqu -1872(%rbp), %xmm0
+ 6705 B0F8FFFF
+ 6706 5c21 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 6706 50F9FFFF
+ 6707 .LBB768:
+ 6708 .LBB769:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 6709 .loc 2 234 0
+ 6710 5c29 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 6710 50F9FFFF
+ 6711 5c31 F30F6F8D movdqu -1696(%rbp), %xmm1
+ 6711 60F9FFFF
+ 6712 5c39 660FEBC1 por %xmm1, %xmm0
+ 6713 .LBE769:
+ 6714 .LBE768:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 6715 .loc 2 870 0
+ 6716 5c3d F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 6716 B0F8FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 6717 .loc 2 872 0
+ 6718 5c45 8B859CF8 mov -1892(%rbp), %eax
+ 6718 FFFF
+ 6719 5c4b 48C1E004 salq $4, %rax
+ 6720 5c4f 48038578 addq -1928(%rbp), %rax
+ 6720 F8FFFF
+ 6721 5c56 660F6F00 movdqa (%rax), %xmm0
+ 6722 5c5a F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 6722 80F9FFFF
+ 6723 5c62 F30F6F85 movdqu -1872(%rbp), %xmm0
+ 6723 B0F8FFFF
+ 6724 5c6a F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 6724 70F9FFFF
+ 6725 .LBB770:
+ 6726 .LBB771:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 6727 .loc 2 380 0
+ 6728 5c72 F30F6F85 movdqu -1664(%rbp), %xmm0
+ 6728 80F9FFFF
+ 6729 5c7a F30F7F85 movdqu %xmm0, -7360(%rbp)
+ 6729 40E3FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 6730 .loc 2 381 0
+ 6731 5c82 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 6731 70F9FFFF
+ 6732 5c8a F30F7F85 movdqu %xmm0, -7376(%rbp)
+ 6732 30E3FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 6733 .loc 2 383 0
+ 6734 5c92 C7859CF9 movl $0, -1636(%rbp)
+ 6734 FFFF0000
+ 6734 0000
+ 6735 5c9c EB5C jmp .L163
+ 6736 .L166:
+
GAS LISTING /tmp/ccMa7HLZ.s page 229
+
+
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 6737 .loc 2 385 0
+ 6738 5c9e 8B859CF9 movl -1636(%rbp), %eax
+ 6738 FFFF
+ 6739 5ca4 89C0 mov %eax, %eax
+ 6740 5ca6 0FB68405 movzbl -7376(%rbp,%rax), %eax
+ 6740 30E3FFFF
+ 6741 5cae 84C0 testb %al, %al
+ 6742 5cb0 7912 jns .L164
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 6743 .loc 2 386 0
+ 6744 5cb2 8B859CF9 movl -1636(%rbp), %eax
+ 6744 FFFF
+ 6745 5cb8 89C0 mov %eax, %eax
+ 6746 5cba C6840550 movb $0, -7344(%rbp,%rax)
+ 6746 E3FFFF00
+ 6747 5cc2 EB2F jmp .L165
+ 6748 .L164:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 6749 .loc 2 388 0
+ 6750 5cc4 8B8D9CF9 movl -1636(%rbp), %ecx
+ 6750 FFFF
+ 6751 5cca 8B859CF9 movl -1636(%rbp), %eax
+ 6751 FFFF
+ 6752 5cd0 89C0 mov %eax, %eax
+ 6753 5cd2 0FB68405 movzbl -7376(%rbp,%rax), %eax
+ 6753 30E3FFFF
+ 6754 5cda 0FB6C0 movzbl %al, %eax
+ 6755 5cdd 83E00F andl $15, %eax
+ 6756 5ce0 4898 cltq
+ 6757 5ce2 0FB69405 movzbl -7360(%rbp,%rax), %edx
+ 6757 40E3FFFF
+ 6758 5cea 89C8 mov %ecx, %eax
+ 6759 5cec 88940550 movb %dl, -7344(%rbp,%rax)
+ 6759 E3FFFF
+ 6760 .L165:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 6761 .loc 2 383 0
+ 6762 5cf3 83859CF9 addl $1, -1636(%rbp)
+ 6762 FFFF01
+ 6763 .L163:
+ 6764 5cfa 83BD9CF9 cmpl $15, -1636(%rbp)
+ 6764 FFFF0F
+ 6765 5d01 769B jbe .L166
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 6766 .loc 2 391 0
+ 6767 5d03 F30F6F85 movdqu -7344(%rbp), %xmm0
+ 6767 50E3FFFF
+ 6768 .LBE771:
+ 6769 .LBE770:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 6770 .loc 2 872 0
+ 6771 5d0b F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 6771 B0F8FFFF
+ 6772 5d13 F30F6F85 movdqu -1888(%rbp), %xmm0
+ 6772 A0F8FFFF
+ 6773 5d1b F30F7F85 movdqu %xmm0, -1616(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 230
+
+
+ 6773 B0F9FFFF
+ 6774 5d23 F30F6F85 movdqu -1872(%rbp), %xmm0
+ 6774 B0F8FFFF
+ 6775 5d2b F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 6775 A0F9FFFF
+ 6776 .LBB772:
+ 6777 .LBB773:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 6778 .loc 2 234 0
+ 6779 5d33 F30F6F85 movdqu -1632(%rbp), %xmm0
+ 6779 A0F9FFFF
+ 6780 5d3b F30F6F8D movdqu -1616(%rbp), %xmm1
+ 6780 B0F9FFFF
+ 6781 5d43 660FEBC1 por %xmm1, %xmm0
+ 6782 .LBE773:
+ 6783 .LBE772:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 6784 .loc 2 874 0
+ 6785 5d47 F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 6785 A0F8FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6786 .loc 2 876 0
+ 6787 5d4f 660F6F05 movdqa vec_01(%rip), %xmm0
+ 6787 00000000
+ 6788 5d57 F30F6F8D movdqu -1856(%rbp), %xmm1
+ 6788 C0F8FFFF
+ 6789 5d5f F30F7F8D movdqu %xmm1, -1584(%rbp)
+ 6789 D0F9FFFF
+ 6790 5d67 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 6790 C0F9FFFF
+ 6791 .LBB774:
+ 6792 .LBB775:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 6793 .loc 2 290 0
+ 6794 5d6f F30F6F8D movdqu -1600(%rbp), %xmm1
+ 6794 C0F9FFFF
+ 6795 5d77 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 6795 D0F9FFFF
+ 6796 5d7f 660FF8C1 psubb %xmm1, %xmm0
+ 6797 .LBE775:
+ 6798 .LBE774:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6799 .loc 2 876 0
+ 6800 5d83 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 6800 C0F8FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6801 .loc 2 878 0
+ 6802 5d8b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 6802 00000000
+ 6803 5d93 F30F6F8D movdqu -1856(%rbp), %xmm1
+ 6803 C0F8FFFF
+ 6804 5d9b F30F7F8D movdqu %xmm1, -1552(%rbp)
+ 6804 F0F9FFFF
+ 6805 5da3 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 6805 E0F9FFFF
+ 6806 .LBB776:
+ 6807 .LBB777:
+
GAS LISTING /tmp/ccMa7HLZ.s page 231
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 6808 .loc 2 206 0
+ 6809 5dab F30F6F85 movdqu -1568(%rbp), %xmm0
+ 6809 E0F9FFFF
+ 6810 5db3 F30F6F8D movdqu -1552(%rbp), %xmm1
+ 6810 F0F9FFFF
+ 6811 5dbb 660FDBC1 pand %xmm1, %xmm0
+ 6812 .LBE777:
+ 6813 .LBE776:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6814 .loc 2 878 0
+ 6815 5dbf F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 6815 C0F8FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 6816 .loc 2 866 0
+ 6817 5dc7 83859CF8 addl $1, -1892(%rbp)
+ 6817 FFFF01
+ 6818 .L158:
+ 6819 5dce 83BD9CF8 cmpl $15, -1892(%rbp)
+ 6819 FFFF0F
+ 6820 5dd5 0F866DFD jbe .L167
+ 6820 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 6821 .loc 2 882 0
+ 6822 5ddb F30F6F85 movdqu -1888(%rbp), %xmm0
+ 6822 A0F8FFFF
+ 6823 .LBE761:
+ 6824 .LBE760:
+ 6825 .LBE759:
+ 6826 .LBE758:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 6827 .loc 2 1682 0
+ 6828 5de3 660F7F85 movdqa %xmm0, -9744(%rbp)
+ 6828 F0D9FFFF
+ 6829 .LBB778:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 6830 .loc 2 1683 0
+ 6831 5deb 660F6F85 movdqa -9744(%rbp), %xmm0
+ 6831 F0D9FFFF
+ 6832 5df3 F30F7F85 movdqu %xmm0, -7456(%rbp)
+ 6832 E0E2FFFF
+ 6833 5dfb E8000000 call KDbgWriterGet at PLT
+ 6833 00
+ 6834 5e00 4885C0 testq %rax, %rax
+ 6835 5e03 7479 je .L169
+ 6836 5e05 BF010000 movl $1, %edi
+ 6836 00
+ 6837 5e0a E8000000 call KDbgCondToFlag at PLT
+ 6837 00
+ 6838 5e0f 4889C6 movq %rax, %rsi
+ 6839 5e12 BF100000 movl $16, %edi
+ 6839 00
+ 6840 5e17 E8000000 call KDbgTestModConds at PLT
+ 6840 00
+ 6841 5e1c 84C0 testb %al, %al
+ 6842 5e1e 745E je .L169
+ 6843 5e20 8B85ECE2 movl -7444(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 232
+
+
+ 6843 FFFF
+ 6844 5e26 89C7 movl %eax, %edi
+ 6845 5e28 E8D3A1FF call bswap_32
+ 6845 FF
+ 6846 5e2d 4189C5 movl %eax, %r13d
+ 6847 5e30 8B85E8E2 movl -7448(%rbp), %eax
+ 6847 FFFF
+ 6848 5e36 89C7 movl %eax, %edi
+ 6849 5e38 E8C3A1FF call bswap_32
+ 6849 FF
+ 6850 5e3d 4189C4 movl %eax, %r12d
+ 6851 5e40 8B85E4E2 movl -7452(%rbp), %eax
+ 6851 FFFF
+ 6852 5e46 89C7 movl %eax, %edi
+ 6853 5e48 E8B3A1FF call bswap_32
+ 6853 FF
+ 6854 5e4d 89C3 movl %eax, %ebx
+ 6855 5e4f 8B85E0E2 movl -7456(%rbp), %eax
+ 6855 FFFF
+ 6856 5e55 89C7 movl %eax, %edi
+ 6857 5e57 E8A4A1FF call bswap_32
+ 6857 FF
+ 6858 5e5c 4589E9 movl %r13d, %r9d
+ 6859 5e5f 4589E0 movl %r12d, %r8d
+ 6860 5e62 89D9 movl %ebx, %ecx
+ 6861 5e64 89C2 movl %eax, %edx
+ 6862 5e66 488D3500 leaq .LC0(%rip), %rsi
+ 6862 000000
+ 6863 5e6d 488D3D00 leaq .LC1(%rip), %rdi
+ 6863 000000
+ 6864 5e74 B8000000 movl $0, %eax
+ 6864 00
+ 6865 5e79 E8000000 call KDbgMsg at PLT
+ 6865 00
+ 6866 .L169:
+ 6867 5e7e 660F6F85 movdqa -9744(%rbp), %xmm0
+ 6867 F0D9FFFF
+ 6868 5e86 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 6868 00FAFFFF
+ 6869 .LBE778:
+ 6870 .LBB779:
+ 6871 .LBB780:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6872 .loc 2 667 0
+ 6873 5e8e 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 6873 00000000
+ 6874 5e96 F30F6F8D movdqu -1536(%rbp), %xmm1
+ 6874 00FAFFFF
+ 6875 5e9e F30F7F8D movdqu %xmm1, -1504(%rbp)
+ 6875 20FAFFFF
+ 6876 5ea6 F30F7F85 movdqu %xmm0, -1520(%rbp)
+ 6876 10FAFFFF
+ 6877 .LBB781:
+ 6878 .LBB782:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 6879 .loc 2 380 0
+ 6880 5eae F30F6F85 movdqu -1504(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 233
+
+
+ 6880 20FAFFFF
+ 6881 5eb6 F30F7F85 movdqu %xmm0, -7312(%rbp)
+ 6881 70E3FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 6882 .loc 2 381 0
+ 6883 5ebe F30F6F85 movdqu -1520(%rbp), %xmm0
+ 6883 10FAFFFF
+ 6884 5ec6 F30F7F85 movdqu %xmm0, -7328(%rbp)
+ 6884 60E3FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 6885 .loc 2 383 0
+ 6886 5ece C7853CFA movl $0, -1476(%rbp)
+ 6886 FFFF0000
+ 6886 0000
+ 6887 5ed8 EB5C jmp .L170
+ 6888 .L173:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 6889 .loc 2 385 0
+ 6890 5eda 8B853CFA movl -1476(%rbp), %eax
+ 6890 FFFF
+ 6891 5ee0 89C0 mov %eax, %eax
+ 6892 5ee2 0FB68405 movzbl -7328(%rbp,%rax), %eax
+ 6892 60E3FFFF
+ 6893 5eea 84C0 testb %al, %al
+ 6894 5eec 7912 jns .L171
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 6895 .loc 2 386 0
+ 6896 5eee 8B853CFA movl -1476(%rbp), %eax
+ 6896 FFFF
+ 6897 5ef4 89C0 mov %eax, %eax
+ 6898 5ef6 C6840580 movb $0, -7296(%rbp,%rax)
+ 6898 E3FFFF00
+ 6899 5efe EB2F jmp .L172
+ 6900 .L171:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 6901 .loc 2 388 0
+ 6902 5f00 8B8D3CFA movl -1476(%rbp), %ecx
+ 6902 FFFF
+ 6903 5f06 8B853CFA movl -1476(%rbp), %eax
+ 6903 FFFF
+ 6904 5f0c 89C0 mov %eax, %eax
+ 6905 5f0e 0FB68405 movzbl -7328(%rbp,%rax), %eax
+ 6905 60E3FFFF
+ 6906 5f16 0FB6C0 movzbl %al, %eax
+ 6907 5f19 83E00F andl $15, %eax
+ 6908 5f1c 4898 cltq
+ 6909 5f1e 0FB69405 movzbl -7312(%rbp,%rax), %edx
+ 6909 70E3FFFF
+ 6910 5f26 89C8 mov %ecx, %eax
+ 6911 5f28 88940580 movb %dl, -7296(%rbp,%rax)
+ 6911 E3FFFF
+ 6912 .L172:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 6913 .loc 2 383 0
+ 6914 5f2f 83853CFA addl $1, -1476(%rbp)
+ 6914 FFFF01
+ 6915 .L170:
+
GAS LISTING /tmp/ccMa7HLZ.s page 234
+
+
+ 6916 5f36 83BD3CFA cmpl $15, -1476(%rbp)
+ 6916 FFFF0F
+ 6917 5f3d 769B jbe .L173
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 6918 .loc 2 391 0
+ 6919 5f3f F30F6F85 movdqu -7296(%rbp), %xmm0
+ 6919 80E3FFFF
+ 6920 .LBE782:
+ 6921 .LBE781:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6922 .loc 2 667 0
+ 6923 5f47 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 6923 00FAFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6924 .loc 2 668 0
+ 6925 5f4f F30F6F85 movdqu -1536(%rbp), %xmm0
+ 6925 00FAFFFF
+ 6926 .LBE780:
+ 6927 .LBE779:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 6928 .loc 2 1684 0
+ 6929 5f57 660F7F85 movdqa %xmm0, -9744(%rbp)
+ 6929 F0D9FFFF
+ 6930 .LBB783:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 6931 .loc 2 1685 0
+ 6932 5f5f 660F6F85 movdqa -9744(%rbp), %xmm0
+ 6932 F0D9FFFF
+ 6933 5f67 F30F7F85 movdqu %xmm0, -7472(%rbp)
+ 6933 D0E2FFFF
+ 6934 5f6f E8000000 call KDbgWriterGet at PLT
+ 6934 00
+ 6935 5f74 4885C0 testq %rax, %rax
+ 6936 5f77 7479 je .L175
+ 6937 5f79 BF010000 movl $1, %edi
+ 6937 00
+ 6938 5f7e E8000000 call KDbgCondToFlag at PLT
+ 6938 00
+ 6939 5f83 4889C6 movq %rax, %rsi
+ 6940 5f86 BF100000 movl $16, %edi
+ 6940 00
+ 6941 5f8b E8000000 call KDbgTestModConds at PLT
+ 6941 00
+ 6942 5f90 84C0 testb %al, %al
+ 6943 5f92 745E je .L175
+ 6944 5f94 8B85DCE2 movl -7460(%rbp), %eax
+ 6944 FFFF
+ 6945 5f9a 89C7 movl %eax, %edi
+ 6946 5f9c E85FA0FF call bswap_32
+ 6946 FF
+ 6947 5fa1 4189C5 movl %eax, %r13d
+ 6948 5fa4 8B85D8E2 movl -7464(%rbp), %eax
+ 6948 FFFF
+ 6949 5faa 89C7 movl %eax, %edi
+ 6950 5fac E84FA0FF call bswap_32
+ 6950 FF
+ 6951 5fb1 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s page 235
+
+
+ 6952 5fb4 8B85D4E2 movl -7468(%rbp), %eax
+ 6952 FFFF
+ 6953 5fba 89C7 movl %eax, %edi
+ 6954 5fbc E83FA0FF call bswap_32
+ 6954 FF
+ 6955 5fc1 89C3 movl %eax, %ebx
+ 6956 5fc3 8B85D0E2 movl -7472(%rbp), %eax
+ 6956 FFFF
+ 6957 5fc9 89C7 movl %eax, %edi
+ 6958 5fcb E830A0FF call bswap_32
+ 6958 FF
+ 6959 5fd0 4589E9 movl %r13d, %r9d
+ 6960 5fd3 4589E0 movl %r12d, %r8d
+ 6961 5fd6 89D9 movl %ebx, %ecx
+ 6962 5fd8 89C2 movl %eax, %edx
+ 6963 5fda 488D3500 leaq .LC2(%rip), %rsi
+ 6963 000000
+ 6964 5fe1 488D3D00 leaq .LC1(%rip), %rdi
+ 6964 000000
+ 6965 5fe8 B8000000 movl $0, %eax
+ 6965 00
+ 6966 5fed E8000000 call KDbgMsg at PLT
+ 6966 00
+ 6967 .L175:
+ 6968 5ff2 660F6F85 movdqa -9744(%rbp), %xmm0
+ 6968 F0D9FFFF
+ 6969 5ffa F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 6969 50FAFFFF
+ 6970 6002 660F6F85 movdqa -9728(%rbp), %xmm0
+ 6970 00DAFFFF
+ 6971 600a F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 6971 40FAFFFF
+ 6972 .LBE783:
+ 6973 .LBB784:
+ 6974 .LBB785:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 6975 .loc 2 178 0
+ 6976 6012 F30F6F85 movdqu -1472(%rbp), %xmm0
+ 6976 40FAFFFF
+ 6977 601a F30F6F8D movdqu -1456(%rbp), %xmm1
+ 6977 50FAFFFF
+ 6978 6022 660FEFC1 pxor %xmm1, %xmm0
+ 6979 .LBE785:
+ 6980 .LBE784:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 6981 .loc 2 1686 0
+ 6982 6026 660F7F85 movdqa %xmm0, -9744(%rbp)
+ 6982 F0D9FFFF
+ 6983 .LBB786:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 6984 .loc 2 1687 0
+ 6985 602e 660F6F85 movdqa -9744(%rbp), %xmm0
+ 6985 F0D9FFFF
+ 6986 6036 F30F7F85 movdqu %xmm0, -7488(%rbp)
+ 6986 C0E2FFFF
+ 6987 603e E8000000 call KDbgWriterGet at PLT
+ 6987 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 236
+
+
+ 6988 6043 4885C0 testq %rax, %rax
+ 6989 6046 7479 je .L177
+ 6990 6048 BF010000 movl $1, %edi
+ 6990 00
+ 6991 604d E8000000 call KDbgCondToFlag at PLT
+ 6991 00
+ 6992 6052 4889C6 movq %rax, %rsi
+ 6993 6055 BF100000 movl $16, %edi
+ 6993 00
+ 6994 605a E8000000 call KDbgTestModConds at PLT
+ 6994 00
+ 6995 605f 84C0 testb %al, %al
+ 6996 6061 745E je .L177
+ 6997 6063 8B85CCE2 movl -7476(%rbp), %eax
+ 6997 FFFF
+ 6998 6069 89C7 movl %eax, %edi
+ 6999 606b E8909FFF call bswap_32
+ 6999 FF
+ 7000 6070 4189C5 movl %eax, %r13d
+ 7001 6073 8B85C8E2 movl -7480(%rbp), %eax
+ 7001 FFFF
+ 7002 6079 89C7 movl %eax, %edi
+ 7003 607b E8809FFF call bswap_32
+ 7003 FF
+ 7004 6080 4189C4 movl %eax, %r12d
+ 7005 6083 8B85C4E2 movl -7484(%rbp), %eax
+ 7005 FFFF
+ 7006 6089 89C7 movl %eax, %edi
+ 7007 608b E8709FFF call bswap_32
+ 7007 FF
+ 7008 6090 89C3 movl %eax, %ebx
+ 7009 6092 8B85C0E2 movl -7488(%rbp), %eax
+ 7009 FFFF
+ 7010 6098 89C7 movl %eax, %edi
+ 7011 609a E8619FFF call bswap_32
+ 7011 FF
+ 7012 609f 4589E9 movl %r13d, %r9d
+ 7013 60a2 4589E0 movl %r12d, %r8d
+ 7014 60a5 89D9 movl %ebx, %ecx
+ 7015 60a7 89C2 movl %eax, %edx
+ 7016 60a9 488D3500 leaq .LC3(%rip), %rsi
+ 7016 000000
+ 7017 60b0 488D3D00 leaq .LC1(%rip), %rdi
+ 7017 000000
+ 7018 60b7 B8000000 movl $0, %eax
+ 7018 00
+ 7019 60bc E8000000 call KDbgMsg at PLT
+ 7019 00
+ 7020 .L177:
+ 7021 60c1 660F6F85 movdqa -9744(%rbp), %xmm0
+ 7021 F0D9FFFF
+ 7022 60c9 F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 7022 60FAFFFF
+ 7023 .LBE786:
+ 7024 .LBB787:
+ 7025 .LBB788:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 237
+
+
+ 7026 .loc 2 1357 0
+ 7027 60d1 F30F6F85 movdqu -1440(%rbp), %xmm0
+ 7027 60FAFFFF
+ 7028 60d9 F30F7F85 movdqu %xmm0, -7280(%rbp)
+ 7028 90E3FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 7029 .loc 2 1358 0
+ 7030 60e1 8B859CE3 movl -7268(%rbp), %eax
+ 7030 FFFF
+ 7031 60e7 898598E3 movl %eax, -7272(%rbp)
+ 7031 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 7032 .loc 2 1359 0
+ 7033 60ed 8B859CE3 movl -7268(%rbp), %eax
+ 7033 FFFF
+ 7034 60f3 898594E3 movl %eax, -7276(%rbp)
+ 7034 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 7035 .loc 2 1360 0
+ 7036 60f9 8B859CE3 movl -7268(%rbp), %eax
+ 7036 FFFF
+ 7037 60ff 898590E3 movl %eax, -7280(%rbp)
+ 7037 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 7038 .loc 2 1361 0
+ 7039 6105 F30F6F85 movdqu -7280(%rbp), %xmm0
+ 7039 90E3FFFF
+ 7040 .LBE788:
+ 7041 .LBE787:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 7042 .loc 2 1688 0
+ 7043 610d 660F7F85 movdqa %xmm0, -9744(%rbp)
+ 7043 F0D9FFFF
+ 7044 .LBB789:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 7045 .loc 2 1689 0
+ 7046 6115 660F6F85 movdqa -9744(%rbp), %xmm0
+ 7046 F0D9FFFF
+ 7047 611d F30F7F85 movdqu %xmm0, -7504(%rbp)
+ 7047 B0E2FFFF
+ 7048 6125 E8000000 call KDbgWriterGet at PLT
+ 7048 00
+ 7049 612a 4885C0 testq %rax, %rax
+ 7050 612d 7479 je .L179
+ 7051 612f BF010000 movl $1, %edi
+ 7051 00
+ 7052 6134 E8000000 call KDbgCondToFlag at PLT
+ 7052 00
+ 7053 6139 4889C6 movq %rax, %rsi
+ 7054 613c BF100000 movl $16, %edi
+ 7054 00
+ 7055 6141 E8000000 call KDbgTestModConds at PLT
+ 7055 00
+ 7056 6146 84C0 testb %al, %al
+ 7057 6148 745E je .L179
+ 7058 614a 8B85BCE2 movl -7492(%rbp), %eax
+ 7058 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 238
+
+
+ 7059 6150 89C7 movl %eax, %edi
+ 7060 6152 E8A99EFF call bswap_32
+ 7060 FF
+ 7061 6157 4189C5 movl %eax, %r13d
+ 7062 615a 8B85B8E2 movl -7496(%rbp), %eax
+ 7062 FFFF
+ 7063 6160 89C7 movl %eax, %edi
+ 7064 6162 E8999EFF call bswap_32
+ 7064 FF
+ 7065 6167 4189C4 movl %eax, %r12d
+ 7066 616a 8B85B4E2 movl -7500(%rbp), %eax
+ 7066 FFFF
+ 7067 6170 89C7 movl %eax, %edi
+ 7068 6172 E8899EFF call bswap_32
+ 7068 FF
+ 7069 6177 89C3 movl %eax, %ebx
+ 7070 6179 8B85B0E2 movl -7504(%rbp), %eax
+ 7070 FFFF
+ 7071 617f 89C7 movl %eax, %edi
+ 7072 6181 E87A9EFF call bswap_32
+ 7072 FF
+ 7073 6186 4589E9 movl %r13d, %r9d
+ 7074 6189 4589E0 movl %r12d, %r8d
+ 7075 618c 89D9 movl %ebx, %ecx
+ 7076 618e 89C2 movl %eax, %edx
+ 7077 6190 488D3500 leaq .LC4(%rip), %rsi
+ 7077 000000
+ 7078 6197 488D3D00 leaq .LC1(%rip), %rdi
+ 7078 000000
+ 7079 619e B8000000 movl $0, %eax
+ 7079 00
+ 7080 61a3 E8000000 call KDbgMsg at PLT
+ 7080 00
+ 7081 .L179:
+ 7082 .LBE789:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 7083 .loc 2 1690 0
+ 7084 61a8 660F6F85 movdqa -9744(%rbp), %xmm0
+ 7084 F0D9FFFF
+ 7085 .LBE755:
+ 7086 .LBE754:
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x80,8);
+ 7087 .loc 2 1751 0
+ 7088 61b0 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 7088 20E6FFFF
+ 7089 61b8 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 7089 10E6FFFF
+ 7090 61c0 F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 7090 70FAFFFF
+ 7091 .LBB790:
+ 7092 .LBB791:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 7093 .loc 2 1565 0
+ 7094 61c8 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 7094 70FAFFFF
+ 7095 61d0 660F7F85 movdqa %xmm0, -9696(%rbp)
+ 7095 20DAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 239
+
+
+ 7096 61d8 660F6F85 movdqa -9696(%rbp), %xmm0
+ 7096 20DAFFFF
+ 7097 61e0 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 7097 80FAFFFF
+ 7098 .LBB792:
+ 7099 .LBB793:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 7100 .loc 2 1282 0
+ 7101 61e8 F30F6F85 movdqu -1408(%rbp), %xmm0
+ 7101 80FAFFFF
+ 7102 61f0 F30F7F85 movdqu %xmm0, -7264(%rbp)
+ 7102 A0E3FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 7103 .loc 2 1283 0
+ 7104 61f8 8B85A8E3 movl -7256(%rbp), %eax
+ 7104 FFFF
+ 7105 61fe 8985ACE3 movl %eax, -7252(%rbp)
+ 7105 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 7106 .loc 2 1284 0
+ 7107 6204 8B85A4E3 movl -7260(%rbp), %eax
+ 7107 FFFF
+ 7108 620a 8985A8E3 movl %eax, -7256(%rbp)
+ 7108 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 7109 .loc 2 1285 0
+ 7110 6210 8B85A0E3 movl -7264(%rbp), %eax
+ 7110 FFFF
+ 7111 6216 8985A4E3 movl %eax, -7260(%rbp)
+ 7111 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 7112 .loc 2 1286 0
+ 7113 621c C785A0E3 movl $0, -7264(%rbp)
+ 7113 FFFF0000
+ 7113 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 7114 .loc 2 1287 0
+ 7115 6226 F30F6F85 movdqu -7264(%rbp), %xmm0
+ 7115 A0E3FFFF
+ 7116 .LBE793:
+ 7117 .LBE792:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7118 .loc 2 1567 0
+ 7119 622e 660F7F85 movdqa %xmm0, -9696(%rbp)
+ 7119 20DAFFFF
+ 7120 6236 660F6F85 movdqa -9696(%rbp), %xmm0
+ 7120 20DAFFFF
+ 7121 623e 660FEF85 pxor -1424(%rbp), %xmm0
+ 7121 70FAFFFF
+ 7122 6246 F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 7122 70FAFFFF
+ 7123 624e 660F6F85 movdqa -9696(%rbp), %xmm0
+ 7123 20DAFFFF
+ 7124 6256 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 7124 90FAFFFF
+ 7125 .LBB794:
+ 7126 .LBB795:
+
GAS LISTING /tmp/ccMa7HLZ.s page 240
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 7127 .loc 2 1282 0
+ 7128 625e F30F6F85 movdqu -1392(%rbp), %xmm0
+ 7128 90FAFFFF
+ 7129 6266 F30F7F85 movdqu %xmm0, -7248(%rbp)
+ 7129 B0E3FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 7130 .loc 2 1283 0
+ 7131 626e 8B85B8E3 movl -7240(%rbp), %eax
+ 7131 FFFF
+ 7132 6274 8985BCE3 movl %eax, -7236(%rbp)
+ 7132 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 7133 .loc 2 1284 0
+ 7134 627a 8B85B4E3 movl -7244(%rbp), %eax
+ 7134 FFFF
+ 7135 6280 8985B8E3 movl %eax, -7240(%rbp)
+ 7135 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 7136 .loc 2 1285 0
+ 7137 6286 8B85B0E3 movl -7248(%rbp), %eax
+ 7137 FFFF
+ 7138 628c 8985B4E3 movl %eax, -7244(%rbp)
+ 7138 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 7139 .loc 2 1286 0
+ 7140 6292 C785B0E3 movl $0, -7248(%rbp)
+ 7140 FFFF0000
+ 7140 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 7141 .loc 2 1287 0
+ 7142 629c F30F6F85 movdqu -7248(%rbp), %xmm0
+ 7142 B0E3FFFF
+ 7143 .LBE795:
+ 7144 .LBE794:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7145 .loc 2 1568 0
+ 7146 62a4 660F7F85 movdqa %xmm0, -9696(%rbp)
+ 7146 20DAFFFF
+ 7147 62ac 660F6F85 movdqa -9696(%rbp), %xmm0
+ 7147 20DAFFFF
+ 7148 62b4 660FEF85 pxor -1424(%rbp), %xmm0
+ 7148 70FAFFFF
+ 7149 62bc F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 7149 70FAFFFF
+ 7150 62c4 660F6F85 movdqa -9696(%rbp), %xmm0
+ 7150 20DAFFFF
+ 7151 62cc F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 7151 A0FAFFFF
+ 7152 .LBB796:
+ 7153 .LBB797:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 7154 .loc 2 1282 0
+ 7155 62d4 F30F6F85 movdqu -1376(%rbp), %xmm0
+ 7155 A0FAFFFF
+ 7156 62dc F30F7F85 movdqu %xmm0, -7232(%rbp)
+ 7156 C0E3FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 241
+
+
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 7157 .loc 2 1283 0
+ 7158 62e4 8B85C8E3 movl -7224(%rbp), %eax
+ 7158 FFFF
+ 7159 62ea 8985CCE3 movl %eax, -7220(%rbp)
+ 7159 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 7160 .loc 2 1284 0
+ 7161 62f0 8B85C4E3 movl -7228(%rbp), %eax
+ 7161 FFFF
+ 7162 62f6 8985C8E3 movl %eax, -7224(%rbp)
+ 7162 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 7163 .loc 2 1285 0
+ 7164 62fc 8B85C0E3 movl -7232(%rbp), %eax
+ 7164 FFFF
+ 7165 6302 8985C4E3 movl %eax, -7228(%rbp)
+ 7165 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 7166 .loc 2 1286 0
+ 7167 6308 C785C0E3 movl $0, -7232(%rbp)
+ 7167 FFFF0000
+ 7167 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 7168 .loc 2 1287 0
+ 7169 6312 F30F6F85 movdqu -7232(%rbp), %xmm0
+ 7169 C0E3FFFF
+ 7170 .LBE797:
+ 7171 .LBE796:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7172 .loc 2 1569 0
+ 7173 631a 660F7F85 movdqa %xmm0, -9696(%rbp)
+ 7173 20DAFFFF
+ 7174 6322 660F6F85 movdqa -9696(%rbp), %xmm0
+ 7174 20DAFFFF
+ 7175 632a 660FEF85 pxor -1424(%rbp), %xmm0
+ 7175 70FAFFFF
+ 7176 6332 F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 7176 70FAFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7177 .loc 2 1571 0
+ 7178 633a F30F6F85 movdqu -1424(%rbp), %xmm0
+ 7178 70FAFFFF
+ 7179 .LBE791:
+ 7180 .LBE790:
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x80,8);
+ 7181 .loc 2 1751 0
+ 7182 6342 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 7182 10E6FFFF
+ 7183 634a F30F6F85 movdqu -6624(%rbp), %xmm0
+ 7183 20E6FFFF
+ 7184 6352 F30F6F8D movdqu -6640(%rbp), %xmm1
+ 7184 10E6FFFF
+ 7185 635a 660FEFC1 pxor %xmm1, %xmm0
+ 7186 635e F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 7186 10E6FFFF
+ 7187 6366 488B85B8 movq -9544(%rbp), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 242
+
+
+ 7187 DAFFFF
+ 7188 636d 4883E880 subq $-128, %rax
+ 7189 6371 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 7189 10E6FFFF
+ 7190 6379 F30F7F00 movdqu %xmm0, (%rax)
+ 7191 637d F30F6F85 movdqu -6640(%rbp), %xmm0
+ 7191 10E6FFFF
+ 7192 6385 F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 7192 C0FAFFFF
+ 7193 .LBB798:
+ 7194 .LBB799:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7195 .loc 2 1681 0
+ 7196 638d B81B0000 movl $27, %eax
+ 7196 00
+ 7197 6392 660F6F05 movdqa vec_00(%rip), %xmm0
+ 7197 00000000
+ 7198 639a F30F7F85 movdqu %xmm0, -1312(%rbp)
+ 7198 E0FAFFFF
+ 7199 63a2 8985DCFA movl %eax, -1316(%rbp)
+ 7199 FFFF
+ 7200 .LBB800:
+ 7201 .LBB801:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 7202 .loc 2 522 0
+ 7203 63a8 F30F6F85 movdqu -1312(%rbp), %xmm0
+ 7203 E0FAFFFF
+ 7204 63b0 F30F7F85 movdqu %xmm0, -7152(%rbp)
+ 7204 10E4FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 7205 .loc 2 523 0
+ 7206 63b8 B8030000 movl $3, %eax
+ 7206 00
+ 7207 63bd 4898 cltq
+ 7208 63bf 8B95DCFA movl -1316(%rbp), %edx
+ 7208 FFFF
+ 7209 63c5 89948510 movl %edx, -7152(%rbp,%rax,4)
+ 7209 E4FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 7210 .loc 2 524 0
+ 7211 63cc F30F6F85 movdqu -7152(%rbp), %xmm0
+ 7211 10E4FFFF
+ 7212 63d4 F30F7F85 movdqu %xmm0, -1312(%rbp)
+ 7212 E0FAFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7213 .loc 2 526 0
+ 7214 63dc F30F6F85 movdqu -1312(%rbp), %xmm0
+ 7214 E0FAFFFF
+ 7215 .LBE801:
+ 7216 .LBE800:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7217 .loc 2 1681 0
+ 7218 63e4 660F7F85 movdqa %xmm0, -9664(%rbp)
+ 7218 40DAFFFF
+ 7219 63ec F30F6F85 movdqu -1344(%rbp), %xmm0
+ 7219 C0FAFFFF
+ 7220 63f4 F30F7F85 movdqu %xmm0, -1296(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 243
+
+
+ 7220 F0FAFFFF
+ 7221 63fc F30F6F85 movdqu -1296(%rbp), %xmm0
+ 7221 F0FAFFFF
+ 7222 6404 F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 7222 10FBFFFF
+ 7223 640c 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 7223 000000
+ 7224 6413 48898508 movq %rax, -1272(%rbp)
+ 7224 FBFFFF
+ 7225 .LBB802:
+ 7226 .LBB803:
+ 7227 .LBB804:
+ 7228 .LBB805:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 7229 .loc 2 851 0
+ 7230 641a 660F6F05 movdqa vec_00(%rip), %xmm0
+ 7230 00000000
+ 7231 6422 F30F7F85 movdqu %xmm0, -1232(%rbp)
+ 7231 30FBFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 7232 .loc 2 854 0
+ 7233 642a 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 7233 00000000
+ 7234 6432 F30F6F8D movdqu -1264(%rbp), %xmm1
+ 7234 10FBFFFF
+ 7235 643a F30F7F8D movdqu %xmm1, -1152(%rbp)
+ 7235 80FBFFFF
+ 7236 6442 F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 7236 70FBFFFF
+ 7237 .LBB806:
+ 7238 .LBB807:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 7239 .loc 2 206 0
+ 7240 644a F30F6F85 movdqu -1168(%rbp), %xmm0
+ 7240 70FBFFFF
+ 7241 6452 F30F6F8D movdqu -1152(%rbp), %xmm1
+ 7241 80FBFFFF
+ 7242 645a 660FDBC1 pand %xmm1, %xmm0
+ 7243 .LBE807:
+ 7244 .LBE806:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 7245 .loc 2 854 0
+ 7246 645e F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 7246 60FBFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 7247 .loc 2 862 0
+ 7248 6466 660F6F05 movdqa vec_10(%rip), %xmm0
+ 7248 00000000
+ 7249 646e F30F6F8D movdqu -1264(%rbp), %xmm1
+ 7249 10FBFFFF
+ 7250 6476 F30F7F8D movdqu %xmm1, -1120(%rbp)
+ 7250 A0FBFFFF
+ 7251 647e F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 7251 90FBFFFF
+ 7252 .LBB808:
+ 7253 .loc 2 2642 0
+ 7254 6486 0FB685A0 movzbl -1120(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 244
+
+
+ 7254 FBFFFF
+ 7255 648d 0FB69590 movzbl -1136(%rbp), %edx
+ 7255 FBFFFF
+ 7256 6494 0FB6C0 movzbl %al, %eax
+ 7257 6497 6689858E movw %ax, -10354(%rbp)
+ 7257 D7FFFF
+ 7258 649e 0FB7858E movzwl -10354(%rbp), %eax
+ 7258 D7FFFF
+ 7259 64a5 F6F2 divb %dl
+ 7260 64a7 4189C7 movl %eax, %r15d
+ 7261 64aa 0FB685A1 movzbl -1119(%rbp), %eax
+ 7261 FBFFFF
+ 7262 64b1 0FB69591 movzbl -1135(%rbp), %edx
+ 7262 FBFFFF
+ 7263 64b8 0FB6C0 movzbl %al, %eax
+ 7264 64bb 6689858E movw %ax, -10354(%rbp)
+ 7264 D7FFFF
+ 7265 64c2 0FB7858E movzwl -10354(%rbp), %eax
+ 7265 D7FFFF
+ 7266 64c9 F6F2 divb %dl
+ 7267 64cb 88855FDA movb %al, -9633(%rbp)
+ 7267 FFFF
+ 7268 64d1 0FB685A2 movzbl -1118(%rbp), %eax
+ 7268 FBFFFF
+ 7269 64d8 0FB69592 movzbl -1134(%rbp), %edx
+ 7269 FBFFFF
+ 7270 64df 0FB6C0 movzbl %al, %eax
+ 7271 64e2 6689858E movw %ax, -10354(%rbp)
+ 7271 D7FFFF
+ 7272 64e9 0FB7858E movzwl -10354(%rbp), %eax
+ 7272 D7FFFF
+ 7273 64f0 F6F2 divb %dl
+ 7274 64f2 88855EDA movb %al, -9634(%rbp)
+ 7274 FFFF
+ 7275 64f8 0FB685A3 movzbl -1117(%rbp), %eax
+ 7275 FBFFFF
+ 7276 64ff 0FB69593 movzbl -1133(%rbp), %edx
+ 7276 FBFFFF
+ 7277 6506 0FB6C0 movzbl %al, %eax
+ 7278 6509 6689858E movw %ax, -10354(%rbp)
+ 7278 D7FFFF
+ 7279 6510 0FB7858E movzwl -10354(%rbp), %eax
+ 7279 D7FFFF
+ 7280 6517 F6F2 divb %dl
+ 7281 6519 88855DDA movb %al, -9635(%rbp)
+ 7281 FFFF
+ 7282 651f 0FB685A4 movzbl -1116(%rbp), %eax
+ 7282 FBFFFF
+ 7283 6526 0FB69594 movzbl -1132(%rbp), %edx
+ 7283 FBFFFF
+ 7284 652d 0FB6C0 movzbl %al, %eax
+ 7285 6530 6689858E movw %ax, -10354(%rbp)
+ 7285 D7FFFF
+ 7286 6537 0FB7858E movzwl -10354(%rbp), %eax
+ 7286 D7FFFF
+ 7287 653e F6F2 divb %dl
+ 7288 6540 88855CDA movb %al, -9636(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 245
+
+
+ 7288 FFFF
+ 7289 6546 0FB685A5 movzbl -1115(%rbp), %eax
+ 7289 FBFFFF
+ 7290 654d 0FB69595 movzbl -1131(%rbp), %edx
+ 7290 FBFFFF
+ 7291 6554 0FB6C0 movzbl %al, %eax
+ 7292 6557 6689858E movw %ax, -10354(%rbp)
+ 7292 D7FFFF
+ 7293 655e 0FB7858E movzwl -10354(%rbp), %eax
+ 7293 D7FFFF
+ 7294 6565 F6F2 divb %dl
+ 7295 6567 4189C1 movl %eax, %r9d
+ 7296 656a 0FB685A6 movzbl -1114(%rbp), %eax
+ 7296 FBFFFF
+ 7297 6571 0FB69596 movzbl -1130(%rbp), %edx
+ 7297 FBFFFF
+ 7298 6578 0FB6C0 movzbl %al, %eax
+ 7299 657b 6689858E movw %ax, -10354(%rbp)
+ 7299 D7FFFF
+ 7300 6582 0FB7858E movzwl -10354(%rbp), %eax
+ 7300 D7FFFF
+ 7301 6589 F6F2 divb %dl
+ 7302 658b 89C7 movl %eax, %edi
+ 7303 658d 0FB685A7 movzbl -1113(%rbp), %eax
+ 7303 FBFFFF
+ 7304 6594 0FB69597 movzbl -1129(%rbp), %edx
+ 7304 FBFFFF
+ 7305 659b 0FB6C0 movzbl %al, %eax
+ 7306 659e 6689858E movw %ax, -10354(%rbp)
+ 7306 D7FFFF
+ 7307 65a5 0FB7858E movzwl -10354(%rbp), %eax
+ 7307 D7FFFF
+ 7308 65ac F6F2 divb %dl
+ 7309 65ae 89C3 movl %eax, %ebx
+ 7310 65b0 0FB685A8 movzbl -1112(%rbp), %eax
+ 7310 FBFFFF
+ 7311 65b7 0FB69598 movzbl -1128(%rbp), %edx
+ 7311 FBFFFF
+ 7312 65be 0FB6C0 movzbl %al, %eax
+ 7313 65c1 6689858E movw %ax, -10354(%rbp)
+ 7313 D7FFFF
+ 7314 65c8 0FB7858E movzwl -10354(%rbp), %eax
+ 7314 D7FFFF
+ 7315 65cf F6F2 divb %dl
+ 7316 65d1 4189C2 movl %eax, %r10d
+ 7317 65d4 0FB685A9 movzbl -1111(%rbp), %eax
+ 7317 FBFFFF
+ 7318 65db 0FB69599 movzbl -1127(%rbp), %edx
+ 7318 FBFFFF
+ 7319 65e2 0FB6C0 movzbl %al, %eax
+ 7320 65e5 6689858E movw %ax, -10354(%rbp)
+ 7320 D7FFFF
+ 7321 65ec 0FB7858E movzwl -10354(%rbp), %eax
+ 7321 D7FFFF
+ 7322 65f3 F6F2 divb %dl
+ 7323 65f5 4189C3 movl %eax, %r11d
+ 7324 65f8 0FB685AA movzbl -1110(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 246
+
+
+ 7324 FBFFFF
+ 7325 65ff 0FB6959A movzbl -1126(%rbp), %edx
+ 7325 FBFFFF
+ 7326 6606 0FB6C0 movzbl %al, %eax
+ 7327 6609 6689858E movw %ax, -10354(%rbp)
+ 7327 D7FFFF
+ 7328 6610 0FB7858E movzwl -10354(%rbp), %eax
+ 7328 D7FFFF
+ 7329 6617 F6F2 divb %dl
+ 7330 6619 4189C4 movl %eax, %r12d
+ 7331 661c 0FB685AB movzbl -1109(%rbp), %eax
+ 7331 FBFFFF
+ 7332 6623 0FB6959B movzbl -1125(%rbp), %edx
+ 7332 FBFFFF
+ 7333 662a 0FB6C0 movzbl %al, %eax
+ 7334 662d 6689858E movw %ax, -10354(%rbp)
+ 7334 D7FFFF
+ 7335 6634 0FB7858E movzwl -10354(%rbp), %eax
+ 7335 D7FFFF
+ 7336 663b F6F2 divb %dl
+ 7337 663d 4189C5 movl %eax, %r13d
+ 7338 6640 0FB685AC movzbl -1108(%rbp), %eax
+ 7338 FBFFFF
+ 7339 6647 0FB6959C movzbl -1124(%rbp), %edx
+ 7339 FBFFFF
+ 7340 664e 0FB6C0 movzbl %al, %eax
+ 7341 6651 6689858E movw %ax, -10354(%rbp)
+ 7341 D7FFFF
+ 7342 6658 0FB7858E movzwl -10354(%rbp), %eax
+ 7342 D7FFFF
+ 7343 665f F6F2 divb %dl
+ 7344 6661 4189C6 movl %eax, %r14d
+ 7345 6664 0FB685AD movzbl -1107(%rbp), %eax
+ 7345 FBFFFF
+ 7346 666b 0FB6959D movzbl -1123(%rbp), %edx
+ 7346 FBFFFF
+ 7347 6672 0FB6C0 movzbl %al, %eax
+ 7348 6675 6689858E movw %ax, -10354(%rbp)
+ 7348 D7FFFF
+ 7349 667c 0FB7858E movzwl -10354(%rbp), %eax
+ 7349 D7FFFF
+ 7350 6683 F6F2 divb %dl
+ 7351 6685 4189C0 movl %eax, %r8d
+ 7352 6688 0FB685AE movzbl -1106(%rbp), %eax
+ 7352 FBFFFF
+ 7353 668f 0FB6959E movzbl -1122(%rbp), %edx
+ 7353 FBFFFF
+ 7354 6696 0FB6C0 movzbl %al, %eax
+ 7355 6699 6689858E movw %ax, -10354(%rbp)
+ 7355 D7FFFF
+ 7356 66a0 0FB7858E movzwl -10354(%rbp), %eax
+ 7356 D7FFFF
+ 7357 66a7 F6F2 divb %dl
+ 7358 66a9 89C6 movl %eax, %esi
+ 7359 66ab 0FB685AF movzbl -1105(%rbp), %eax
+ 7359 FBFFFF
+ 7360 66b2 0FB6959F movzbl -1121(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 247
+
+
+ 7360 FBFFFF
+ 7361 66b9 0FB6C0 movzbl %al, %eax
+ 7362 66bc 6689858E movw %ax, -10354(%rbp)
+ 7362 D7FFFF
+ 7363 66c3 0FB7858E movzwl -10354(%rbp), %eax
+ 7363 D7FFFF
+ 7364 66ca F6F2 divb %dl
+ 7365 66cc 89C1 movl %eax, %ecx
+ 7366 .LBB809:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 7367 .loc 2 346 0
+ 7368 66ce 0FB6D3 movzbl %bl, %edx
+ 7369 66d1 400FB6C7 movzbl %dil, %eax
+ 7370 66d5 48C1E208 salq $8, %rdx
+ 7371 66d9 4809C2 orq %rax, %rdx
+ 7372 66dc 410FB6C1 movzbl %r9b, %eax
+ 7373 66e0 48C1E208 salq $8, %rdx
+ 7374 66e4 4809C2 orq %rax, %rdx
+ 7375 66e7 0FB6855C movzbl -9636(%rbp), %eax
+ 7375 DAFFFF
+ 7376 66ee 48C1E208 salq $8, %rdx
+ 7377 66f2 4809C2 orq %rax, %rdx
+ 7378 66f5 0FB6855D movzbl -9635(%rbp), %eax
+ 7378 DAFFFF
+ 7379 66fc 48C1E208 salq $8, %rdx
+ 7380 6700 4809C2 orq %rax, %rdx
+ 7381 6703 0FB6855E movzbl -9634(%rbp), %eax
+ 7381 DAFFFF
+ 7382 670a 48C1E208 salq $8, %rdx
+ 7383 670e 4809C2 orq %rax, %rdx
+ 7384 6711 0FB6855F movzbl -9633(%rbp), %eax
+ 7384 DAFFFF
+ 7385 6718 48C1E208 salq $8, %rdx
+ 7386 671c 4809C2 orq %rax, %rdx
+ 7387 671f 410FB6C7 movzbl %r15b, %eax
+ 7388 6723 48C1E208 salq $8, %rdx
+ 7389 6727 4809C2 orq %rax, %rdx
+ 7390 672a 0FB6C1 movzbl %cl, %eax
+ 7391 672d 400FB6CE movzbl %sil, %ecx
+ 7392 6731 48C1E008 salq $8, %rax
+ 7393 6735 4809C8 orq %rcx, %rax
+ 7394 6738 410FB6C8 movzbl %r8b, %ecx
+ 7395 673c 48C1E008 salq $8, %rax
+ 7396 6740 4809C8 orq %rcx, %rax
+ 7397 6743 410FB6CE movzbl %r14b, %ecx
+ 7398 6747 48C1E008 salq $8, %rax
+ 7399 674b 4809C8 orq %rcx, %rax
+ 7400 674e 410FB6CD movzbl %r13b, %ecx
+ 7401 6752 48C1E008 salq $8, %rax
+ 7402 6756 4809C8 orq %rcx, %rax
+ 7403 6759 410FB6CC movzbl %r12b, %ecx
+ 7404 675d 48C1E008 salq $8, %rax
+ 7405 6761 4809C8 orq %rcx, %rax
+ 7406 6764 410FB6CB movzbl %r11b, %ecx
+ 7407 6768 48C1E008 salq $8, %rax
+ 7408 676c 4809C8 orq %rcx, %rax
+ 7409 676f 410FB6CA movzbl %r10b, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 248
+
+
+ 7410 6773 48C1E008 salq $8, %rax
+ 7411 6777 4809C8 orq %rcx, %rax
+ 7412 677a 488995A0 movq %rdx, -10336(%rbp)
+ 7412 D7FFFF
+ 7413 6781 488985A8 movq %rax, -10328(%rbp)
+ 7413 D7FFFF
+ 7414 6788 660F6F85 movdqa -10336(%rbp), %xmm0
+ 7414 A0D7FFFF
+ 7415 .LBE809:
+ 7416 .LBE808:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 7417 .loc 2 862 0
+ 7418 6790 F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 7418 50FBFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 7419 .loc 2 866 0
+ 7420 6798 C7852CFB movl $0, -1236(%rbp)
+ 7420 FFFF0000
+ 7420 0000
+ 7421 67a2 E9860200 jmp .L180
+ 7421 00
+ 7422 .L189:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 7423 .loc 2 868 0
+ 7424 67a7 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 7424 00000000
+ 7425 67af F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 7425 C0FBFFFF
+ 7426 67b7 F30F6F85 movdqu -1200(%rbp), %xmm0
+ 7426 50FBFFFF
+ 7427 67bf F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 7427 B0FBFFFF
+ 7428 .LBB810:
+ 7429 .LBB811:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 7430 .loc 2 380 0
+ 7431 67c7 F30F6F85 movdqu -1088(%rbp), %xmm0
+ 7431 C0FBFFFF
+ 7432 67cf F30F7F85 movdqu %xmm0, -7120(%rbp)
+ 7432 30E4FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 7433 .loc 2 381 0
+ 7434 67d7 F30F6F85 movdqu -1104(%rbp), %xmm0
+ 7434 B0FBFFFF
+ 7435 67df F30F7F85 movdqu %xmm0, -7136(%rbp)
+ 7435 20E4FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 7436 .loc 2 383 0
+ 7437 67e7 C785DCFB movl $0, -1060(%rbp)
+ 7437 FFFF0000
+ 7437 0000
+ 7438 67f1 EB5C jmp .L181
+ 7439 .L184:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 7440 .loc 2 385 0
+ 7441 67f3 8B85DCFB movl -1060(%rbp), %eax
+ 7441 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 249
+
+
+ 7442 67f9 89C0 mov %eax, %eax
+ 7443 67fb 0FB68405 movzbl -7136(%rbp,%rax), %eax
+ 7443 20E4FFFF
+ 7444 6803 84C0 testb %al, %al
+ 7445 6805 7912 jns .L182
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 7446 .loc 2 386 0
+ 7447 6807 8B85DCFB movl -1060(%rbp), %eax
+ 7447 FFFF
+ 7448 680d 89C0 mov %eax, %eax
+ 7449 680f C6840540 movb $0, -7104(%rbp,%rax)
+ 7449 E4FFFF00
+ 7450 6817 EB2F jmp .L183
+ 7451 .L182:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 7452 .loc 2 388 0
+ 7453 6819 8B8DDCFB movl -1060(%rbp), %ecx
+ 7453 FFFF
+ 7454 681f 8B85DCFB movl -1060(%rbp), %eax
+ 7454 FFFF
+ 7455 6825 89C0 mov %eax, %eax
+ 7456 6827 0FB68405 movzbl -7136(%rbp,%rax), %eax
+ 7456 20E4FFFF
+ 7457 682f 0FB6C0 movzbl %al, %eax
+ 7458 6832 83E00F andl $15, %eax
+ 7459 6835 4898 cltq
+ 7460 6837 0FB69405 movzbl -7120(%rbp,%rax), %edx
+ 7460 30E4FFFF
+ 7461 683f 89C8 mov %ecx, %eax
+ 7462 6841 88940540 movb %dl, -7104(%rbp,%rax)
+ 7462 E4FFFF
+ 7463 .L183:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 7464 .loc 2 383 0
+ 7465 6848 8385DCFB addl $1, -1060(%rbp)
+ 7465 FFFF01
+ 7466 .L181:
+ 7467 684f 83BDDCFB cmpl $15, -1060(%rbp)
+ 7467 FFFF0F
+ 7468 6856 769B jbe .L184
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 7469 .loc 2 391 0
+ 7470 6858 F30F6F85 movdqu -7104(%rbp), %xmm0
+ 7470 40E4FFFF
+ 7471 .LBE811:
+ 7472 .LBE810:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 7473 .loc 2 868 0
+ 7474 6860 F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 7474 40FBFFFF
+ 7475 6868 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 7475 60FBFFFF
+ 7476 6870 F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 7476 F0FBFFFF
+ 7477 6878 F30F6F85 movdqu -1216(%rbp), %xmm0
+ 7477 40FBFFFF
+ 7478 6880 F30F7F85 movdqu %xmm0, -1056(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 250
+
+
+ 7478 E0FBFFFF
+ 7479 .LBB812:
+ 7480 .LBB813:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 7481 .loc 2 234 0
+ 7482 6888 F30F6F85 movdqu -1056(%rbp), %xmm0
+ 7482 E0FBFFFF
+ 7483 6890 F30F6F8D movdqu -1040(%rbp), %xmm1
+ 7483 F0FBFFFF
+ 7484 6898 660FEBC1 por %xmm1, %xmm0
+ 7485 .LBE813:
+ 7486 .LBE812:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 7487 .loc 2 870 0
+ 7488 689c F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 7488 40FBFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 7489 .loc 2 872 0
+ 7490 68a4 8B852CFB mov -1236(%rbp), %eax
+ 7490 FFFF
+ 7491 68aa 48C1E004 salq $4, %rax
+ 7492 68ae 48038508 addq -1272(%rbp), %rax
+ 7492 FBFFFF
+ 7493 68b5 660F6F00 movdqa (%rax), %xmm0
+ 7494 68b9 F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 7494 10FCFFFF
+ 7495 68c1 F30F6F85 movdqu -1216(%rbp), %xmm0
+ 7495 40FBFFFF
+ 7496 68c9 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 7496 00FCFFFF
+ 7497 .LBB814:
+ 7498 .LBB815:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 7499 .loc 2 380 0
+ 7500 68d1 F30F6F85 movdqu -1008(%rbp), %xmm0
+ 7500 10FCFFFF
+ 7501 68d9 F30F7F85 movdqu %xmm0, -7072(%rbp)
+ 7501 60E4FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 7502 .loc 2 381 0
+ 7503 68e1 F30F6F85 movdqu -1024(%rbp), %xmm0
+ 7503 00FCFFFF
+ 7504 68e9 F30F7F85 movdqu %xmm0, -7088(%rbp)
+ 7504 50E4FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 7505 .loc 2 383 0
+ 7506 68f1 C7852CFC movl $0, -980(%rbp)
+ 7506 FFFF0000
+ 7506 0000
+ 7507 68fb EB5C jmp .L185
+ 7508 .L188:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 7509 .loc 2 385 0
+ 7510 68fd 8B852CFC movl -980(%rbp), %eax
+ 7510 FFFF
+ 7511 6903 89C0 mov %eax, %eax
+ 7512 6905 0FB68405 movzbl -7088(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 251
+
+
+ 7512 50E4FFFF
+ 7513 690d 84C0 testb %al, %al
+ 7514 690f 7912 jns .L186
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 7515 .loc 2 386 0
+ 7516 6911 8B852CFC movl -980(%rbp), %eax
+ 7516 FFFF
+ 7517 6917 89C0 mov %eax, %eax
+ 7518 6919 C6840570 movb $0, -7056(%rbp,%rax)
+ 7518 E4FFFF00
+ 7519 6921 EB2F jmp .L187
+ 7520 .L186:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 7521 .loc 2 388 0
+ 7522 6923 8B8D2CFC movl -980(%rbp), %ecx
+ 7522 FFFF
+ 7523 6929 8B852CFC movl -980(%rbp), %eax
+ 7523 FFFF
+ 7524 692f 89C0 mov %eax, %eax
+ 7525 6931 0FB68405 movzbl -7088(%rbp,%rax), %eax
+ 7525 50E4FFFF
+ 7526 6939 0FB6C0 movzbl %al, %eax
+ 7527 693c 83E00F andl $15, %eax
+ 7528 693f 4898 cltq
+ 7529 6941 0FB69405 movzbl -7072(%rbp,%rax), %edx
+ 7529 60E4FFFF
+ 7530 6949 89C8 mov %ecx, %eax
+ 7531 694b 88940570 movb %dl, -7056(%rbp,%rax)
+ 7531 E4FFFF
+ 7532 .L187:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 7533 .loc 2 383 0
+ 7534 6952 83852CFC addl $1, -980(%rbp)
+ 7534 FFFF01
+ 7535 .L185:
+ 7536 6959 83BD2CFC cmpl $15, -980(%rbp)
+ 7536 FFFF0F
+ 7537 6960 769B jbe .L188
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 7538 .loc 2 391 0
+ 7539 6962 F30F6F85 movdqu -7056(%rbp), %xmm0
+ 7539 70E4FFFF
+ 7540 .LBE815:
+ 7541 .LBE814:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 7542 .loc 2 872 0
+ 7543 696a F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 7543 40FBFFFF
+ 7544 6972 F30F6F85 movdqu -1232(%rbp), %xmm0
+ 7544 30FBFFFF
+ 7545 697a F30F7F85 movdqu %xmm0, -960(%rbp)
+ 7545 40FCFFFF
+ 7546 6982 F30F6F85 movdqu -1216(%rbp), %xmm0
+ 7546 40FBFFFF
+ 7547 698a F30F7F85 movdqu %xmm0, -976(%rbp)
+ 7547 30FCFFFF
+ 7548 .LBB816:
+
GAS LISTING /tmp/ccMa7HLZ.s page 252
+
+
+ 7549 .LBB817:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 7550 .loc 2 234 0
+ 7551 6992 F30F6F85 movdqu -976(%rbp), %xmm0
+ 7551 30FCFFFF
+ 7552 699a F30F6F8D movdqu -960(%rbp), %xmm1
+ 7552 40FCFFFF
+ 7553 69a2 660FEBC1 por %xmm1, %xmm0
+ 7554 .LBE817:
+ 7555 .LBE816:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 7556 .loc 2 874 0
+ 7557 69a6 F30F7F85 movdqu %xmm0, -1232(%rbp)
+ 7557 30FBFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 7558 .loc 2 876 0
+ 7559 69ae 660F6F05 movdqa vec_01(%rip), %xmm0
+ 7559 00000000
+ 7560 69b6 F30F6F8D movdqu -1200(%rbp), %xmm1
+ 7560 50FBFFFF
+ 7561 69be F30F7F8D movdqu %xmm1, -928(%rbp)
+ 7561 60FCFFFF
+ 7562 69c6 F30F7F85 movdqu %xmm0, -944(%rbp)
+ 7562 50FCFFFF
+ 7563 .LBB818:
+ 7564 .LBB819:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 7565 .loc 2 290 0
+ 7566 69ce F30F6F8D movdqu -944(%rbp), %xmm1
+ 7566 50FCFFFF
+ 7567 69d6 F30F6F85 movdqu -928(%rbp), %xmm0
+ 7567 60FCFFFF
+ 7568 69de 660FF8C1 psubb %xmm1, %xmm0
+ 7569 .LBE819:
+ 7570 .LBE818:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 7571 .loc 2 876 0
+ 7572 69e2 F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 7572 50FBFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7573 .loc 2 878 0
+ 7574 69ea 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 7574 00000000
+ 7575 69f2 F30F6F8D movdqu -1200(%rbp), %xmm1
+ 7575 50FBFFFF
+ 7576 69fa F30F7F8D movdqu %xmm1, -896(%rbp)
+ 7576 80FCFFFF
+ 7577 6a02 F30F7F85 movdqu %xmm0, -912(%rbp)
+ 7577 70FCFFFF
+ 7578 .LBB820:
+ 7579 .LBB821:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 7580 .loc 2 206 0
+ 7581 6a0a F30F6F85 movdqu -912(%rbp), %xmm0
+ 7581 70FCFFFF
+ 7582 6a12 F30F6F8D movdqu -896(%rbp), %xmm1
+ 7582 80FCFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 253
+
+
+ 7583 6a1a 660FDBC1 pand %xmm1, %xmm0
+ 7584 .LBE821:
+ 7585 .LBE820:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7586 .loc 2 878 0
+ 7587 6a1e F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 7587 50FBFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 7588 .loc 2 866 0
+ 7589 6a26 83852CFB addl $1, -1236(%rbp)
+ 7589 FFFF01
+ 7590 .L180:
+ 7591 6a2d 83BD2CFB cmpl $15, -1236(%rbp)
+ 7591 FFFF0F
+ 7592 6a34 0F866DFD jbe .L189
+ 7592 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 7593 .loc 2 882 0
+ 7594 6a3a F30F6F85 movdqu -1232(%rbp), %xmm0
+ 7594 30FBFFFF
+ 7595 .LBE805:
+ 7596 .LBE804:
+ 7597 .LBE803:
+ 7598 .LBE802:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 7599 .loc 2 1682 0
+ 7600 6a42 660F7F85 movdqa %xmm0, -9680(%rbp)
+ 7600 30DAFFFF
+ 7601 .LBB822:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 7602 .loc 2 1683 0
+ 7603 6a4a 660F6F85 movdqa -9680(%rbp), %xmm0
+ 7603 30DAFFFF
+ 7604 6a52 F30F7F85 movdqu %xmm0, -7168(%rbp)
+ 7604 00E4FFFF
+ 7605 6a5a E8000000 call KDbgWriterGet at PLT
+ 7605 00
+ 7606 6a5f 4885C0 testq %rax, %rax
+ 7607 6a62 7479 je .L191
+ 7608 6a64 BF010000 movl $1, %edi
+ 7608 00
+ 7609 6a69 E8000000 call KDbgCondToFlag at PLT
+ 7609 00
+ 7610 6a6e 4889C6 movq %rax, %rsi
+ 7611 6a71 BF100000 movl $16, %edi
+ 7611 00
+ 7612 6a76 E8000000 call KDbgTestModConds at PLT
+ 7612 00
+ 7613 6a7b 84C0 testb %al, %al
+ 7614 6a7d 745E je .L191
+ 7615 6a7f 8B850CE4 movl -7156(%rbp), %eax
+ 7615 FFFF
+ 7616 6a85 89C7 movl %eax, %edi
+ 7617 6a87 E87495FF call bswap_32
+ 7617 FF
+ 7618 6a8c 4189C5 movl %eax, %r13d
+ 7619 6a8f 8B8508E4 movl -7160(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 254
+
+
+ 7619 FFFF
+ 7620 6a95 89C7 movl %eax, %edi
+ 7621 6a97 E86495FF call bswap_32
+ 7621 FF
+ 7622 6a9c 4189C4 movl %eax, %r12d
+ 7623 6a9f 8B8504E4 movl -7164(%rbp), %eax
+ 7623 FFFF
+ 7624 6aa5 89C7 movl %eax, %edi
+ 7625 6aa7 E85495FF call bswap_32
+ 7625 FF
+ 7626 6aac 89C3 movl %eax, %ebx
+ 7627 6aae 8B8500E4 movl -7168(%rbp), %eax
+ 7627 FFFF
+ 7628 6ab4 89C7 movl %eax, %edi
+ 7629 6ab6 E84595FF call bswap_32
+ 7629 FF
+ 7630 6abb 4589E9 movl %r13d, %r9d
+ 7631 6abe 4589E0 movl %r12d, %r8d
+ 7632 6ac1 89D9 movl %ebx, %ecx
+ 7633 6ac3 89C2 movl %eax, %edx
+ 7634 6ac5 488D3500 leaq .LC0(%rip), %rsi
+ 7634 000000
+ 7635 6acc 488D3D00 leaq .LC1(%rip), %rdi
+ 7635 000000
+ 7636 6ad3 B8000000 movl $0, %eax
+ 7636 00
+ 7637 6ad8 E8000000 call KDbgMsg at PLT
+ 7637 00
+ 7638 .L191:
+ 7639 6add 660F6F85 movdqa -9680(%rbp), %xmm0
+ 7639 30DAFFFF
+ 7640 6ae5 F30F7F85 movdqu %xmm0, -880(%rbp)
+ 7640 90FCFFFF
+ 7641 .LBE822:
+ 7642 .LBB823:
+ 7643 .LBB824:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 7644 .loc 2 667 0
+ 7645 6aed 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 7645 00000000
+ 7646 6af5 F30F6F8D movdqu -880(%rbp), %xmm1
+ 7646 90FCFFFF
+ 7647 6afd F30F7F8D movdqu %xmm1, -848(%rbp)
+ 7647 B0FCFFFF
+ 7648 6b05 F30F7F85 movdqu %xmm0, -864(%rbp)
+ 7648 A0FCFFFF
+ 7649 .LBB825:
+ 7650 .LBB826:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 7651 .loc 2 380 0
+ 7652 6b0d F30F6F85 movdqu -848(%rbp), %xmm0
+ 7652 B0FCFFFF
+ 7653 6b15 F30F7F85 movdqu %xmm0, -7024(%rbp)
+ 7653 90E4FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 7654 .loc 2 381 0
+ 7655 6b1d F30F6F85 movdqu -864(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 255
+
+
+ 7655 A0FCFFFF
+ 7656 6b25 F30F7F85 movdqu %xmm0, -7040(%rbp)
+ 7656 80E4FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 7657 .loc 2 383 0
+ 7658 6b2d C785CCFC movl $0, -820(%rbp)
+ 7658 FFFF0000
+ 7658 0000
+ 7659 6b37 EB5C jmp .L192
+ 7660 .L195:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 7661 .loc 2 385 0
+ 7662 6b39 8B85CCFC movl -820(%rbp), %eax
+ 7662 FFFF
+ 7663 6b3f 89C0 mov %eax, %eax
+ 7664 6b41 0FB68405 movzbl -7040(%rbp,%rax), %eax
+ 7664 80E4FFFF
+ 7665 6b49 84C0 testb %al, %al
+ 7666 6b4b 7912 jns .L193
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 7667 .loc 2 386 0
+ 7668 6b4d 8B85CCFC movl -820(%rbp), %eax
+ 7668 FFFF
+ 7669 6b53 89C0 mov %eax, %eax
+ 7670 6b55 C68405A0 movb $0, -7008(%rbp,%rax)
+ 7670 E4FFFF00
+ 7671 6b5d EB2F jmp .L194
+ 7672 .L193:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 7673 .loc 2 388 0
+ 7674 6b5f 8B8DCCFC movl -820(%rbp), %ecx
+ 7674 FFFF
+ 7675 6b65 8B85CCFC movl -820(%rbp), %eax
+ 7675 FFFF
+ 7676 6b6b 89C0 mov %eax, %eax
+ 7677 6b6d 0FB68405 movzbl -7040(%rbp,%rax), %eax
+ 7677 80E4FFFF
+ 7678 6b75 0FB6C0 movzbl %al, %eax
+ 7679 6b78 83E00F andl $15, %eax
+ 7680 6b7b 4898 cltq
+ 7681 6b7d 0FB69405 movzbl -7024(%rbp,%rax), %edx
+ 7681 90E4FFFF
+ 7682 6b85 89C8 mov %ecx, %eax
+ 7683 6b87 889405A0 movb %dl, -7008(%rbp,%rax)
+ 7683 E4FFFF
+ 7684 .L194:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 7685 .loc 2 383 0
+ 7686 6b8e 8385CCFC addl $1, -820(%rbp)
+ 7686 FFFF01
+ 7687 .L192:
+ 7688 6b95 83BDCCFC cmpl $15, -820(%rbp)
+ 7688 FFFF0F
+ 7689 6b9c 769B jbe .L195
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 7690 .loc 2 391 0
+ 7691 6b9e F30F6F85 movdqu -7008(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 256
+
+
+ 7691 A0E4FFFF
+ 7692 .LBE826:
+ 7693 .LBE825:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 7694 .loc 2 667 0
+ 7695 6ba6 F30F7F85 movdqu %xmm0, -880(%rbp)
+ 7695 90FCFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7696 .loc 2 668 0
+ 7697 6bae F30F6F85 movdqu -880(%rbp), %xmm0
+ 7697 90FCFFFF
+ 7698 .LBE824:
+ 7699 .LBE823:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 7700 .loc 2 1684 0
+ 7701 6bb6 660F7F85 movdqa %xmm0, -9680(%rbp)
+ 7701 30DAFFFF
+ 7702 .LBB827:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 7703 .loc 2 1685 0
+ 7704 6bbe 660F6F85 movdqa -9680(%rbp), %xmm0
+ 7704 30DAFFFF
+ 7705 6bc6 F30F7F85 movdqu %xmm0, -7184(%rbp)
+ 7705 F0E3FFFF
+ 7706 6bce E8000000 call KDbgWriterGet at PLT
+ 7706 00
+ 7707 6bd3 4885C0 testq %rax, %rax
+ 7708 6bd6 7479 je .L197
+ 7709 6bd8 BF010000 movl $1, %edi
+ 7709 00
+ 7710 6bdd E8000000 call KDbgCondToFlag at PLT
+ 7710 00
+ 7711 6be2 4889C6 movq %rax, %rsi
+ 7712 6be5 BF100000 movl $16, %edi
+ 7712 00
+ 7713 6bea E8000000 call KDbgTestModConds at PLT
+ 7713 00
+ 7714 6bef 84C0 testb %al, %al
+ 7715 6bf1 745E je .L197
+ 7716 6bf3 8B85FCE3 movl -7172(%rbp), %eax
+ 7716 FFFF
+ 7717 6bf9 89C7 movl %eax, %edi
+ 7718 6bfb E80094FF call bswap_32
+ 7718 FF
+ 7719 6c00 4189C5 movl %eax, %r13d
+ 7720 6c03 8B85F8E3 movl -7176(%rbp), %eax
+ 7720 FFFF
+ 7721 6c09 89C7 movl %eax, %edi
+ 7722 6c0b E8F093FF call bswap_32
+ 7722 FF
+ 7723 6c10 4189C4 movl %eax, %r12d
+ 7724 6c13 8B85F4E3 movl -7180(%rbp), %eax
+ 7724 FFFF
+ 7725 6c19 89C7 movl %eax, %edi
+ 7726 6c1b E8E093FF call bswap_32
+ 7726 FF
+ 7727 6c20 89C3 movl %eax, %ebx
+
GAS LISTING /tmp/ccMa7HLZ.s page 257
+
+
+ 7728 6c22 8B85F0E3 movl -7184(%rbp), %eax
+ 7728 FFFF
+ 7729 6c28 89C7 movl %eax, %edi
+ 7730 6c2a E8D193FF call bswap_32
+ 7730 FF
+ 7731 6c2f 4589E9 movl %r13d, %r9d
+ 7732 6c32 4589E0 movl %r12d, %r8d
+ 7733 6c35 89D9 movl %ebx, %ecx
+ 7734 6c37 89C2 movl %eax, %edx
+ 7735 6c39 488D3500 leaq .LC2(%rip), %rsi
+ 7735 000000
+ 7736 6c40 488D3D00 leaq .LC1(%rip), %rdi
+ 7736 000000
+ 7737 6c47 B8000000 movl $0, %eax
+ 7737 00
+ 7738 6c4c E8000000 call KDbgMsg at PLT
+ 7738 00
+ 7739 .L197:
+ 7740 6c51 660F6F85 movdqa -9680(%rbp), %xmm0
+ 7740 30DAFFFF
+ 7741 6c59 F30F7F85 movdqu %xmm0, -800(%rbp)
+ 7741 E0FCFFFF
+ 7742 6c61 660F6F85 movdqa -9664(%rbp), %xmm0
+ 7742 40DAFFFF
+ 7743 6c69 F30F7F85 movdqu %xmm0, -816(%rbp)
+ 7743 D0FCFFFF
+ 7744 .LBE827:
+ 7745 .LBB828:
+ 7746 .LBB829:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 7747 .loc 2 178 0
+ 7748 6c71 F30F6F85 movdqu -816(%rbp), %xmm0
+ 7748 D0FCFFFF
+ 7749 6c79 F30F6F8D movdqu -800(%rbp), %xmm1
+ 7749 E0FCFFFF
+ 7750 6c81 660FEFC1 pxor %xmm1, %xmm0
+ 7751 .LBE829:
+ 7752 .LBE828:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 7753 .loc 2 1686 0
+ 7754 6c85 660F7F85 movdqa %xmm0, -9680(%rbp)
+ 7754 30DAFFFF
+ 7755 .LBB830:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 7756 .loc 2 1687 0
+ 7757 6c8d 660F6F85 movdqa -9680(%rbp), %xmm0
+ 7757 30DAFFFF
+ 7758 6c95 F30F7F85 movdqu %xmm0, -7200(%rbp)
+ 7758 E0E3FFFF
+ 7759 6c9d E8000000 call KDbgWriterGet at PLT
+ 7759 00
+ 7760 6ca2 4885C0 testq %rax, %rax
+ 7761 6ca5 7479 je .L199
+ 7762 6ca7 BF010000 movl $1, %edi
+ 7762 00
+ 7763 6cac E8000000 call KDbgCondToFlag at PLT
+ 7763 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 258
+
+
+ 7764 6cb1 4889C6 movq %rax, %rsi
+ 7765 6cb4 BF100000 movl $16, %edi
+ 7765 00
+ 7766 6cb9 E8000000 call KDbgTestModConds at PLT
+ 7766 00
+ 7767 6cbe 84C0 testb %al, %al
+ 7768 6cc0 745E je .L199
+ 7769 6cc2 8B85ECE3 movl -7188(%rbp), %eax
+ 7769 FFFF
+ 7770 6cc8 89C7 movl %eax, %edi
+ 7771 6cca E83193FF call bswap_32
+ 7771 FF
+ 7772 6ccf 4189C5 movl %eax, %r13d
+ 7773 6cd2 8B85E8E3 movl -7192(%rbp), %eax
+ 7773 FFFF
+ 7774 6cd8 89C7 movl %eax, %edi
+ 7775 6cda E82193FF call bswap_32
+ 7775 FF
+ 7776 6cdf 4189C4 movl %eax, %r12d
+ 7777 6ce2 8B85E4E3 movl -7196(%rbp), %eax
+ 7777 FFFF
+ 7778 6ce8 89C7 movl %eax, %edi
+ 7779 6cea E81193FF call bswap_32
+ 7779 FF
+ 7780 6cef 89C3 movl %eax, %ebx
+ 7781 6cf1 8B85E0E3 movl -7200(%rbp), %eax
+ 7781 FFFF
+ 7782 6cf7 89C7 movl %eax, %edi
+ 7783 6cf9 E80293FF call bswap_32
+ 7783 FF
+ 7784 6cfe 4589E9 movl %r13d, %r9d
+ 7785 6d01 4589E0 movl %r12d, %r8d
+ 7786 6d04 89D9 movl %ebx, %ecx
+ 7787 6d06 89C2 movl %eax, %edx
+ 7788 6d08 488D3500 leaq .LC3(%rip), %rsi
+ 7788 000000
+ 7789 6d0f 488D3D00 leaq .LC1(%rip), %rdi
+ 7789 000000
+ 7790 6d16 B8000000 movl $0, %eax
+ 7790 00
+ 7791 6d1b E8000000 call KDbgMsg at PLT
+ 7791 00
+ 7792 .L199:
+ 7793 6d20 660F6F85 movdqa -9680(%rbp), %xmm0
+ 7793 30DAFFFF
+ 7794 6d28 F30F7F85 movdqu %xmm0, -784(%rbp)
+ 7794 F0FCFFFF
+ 7795 .LBE830:
+ 7796 .LBB831:
+ 7797 .LBB832:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 7798 .loc 2 1357 0
+ 7799 6d30 F30F6F85 movdqu -784(%rbp), %xmm0
+ 7799 F0FCFFFF
+ 7800 6d38 F30F7F85 movdqu %xmm0, -6992(%rbp)
+ 7800 B0E4FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+
GAS LISTING /tmp/ccMa7HLZ.s page 259
+
+
+ 7801 .loc 2 1358 0
+ 7802 6d40 8B85BCE4 movl -6980(%rbp), %eax
+ 7802 FFFF
+ 7803 6d46 8985B8E4 movl %eax, -6984(%rbp)
+ 7803 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 7804 .loc 2 1359 0
+ 7805 6d4c 8B85BCE4 movl -6980(%rbp), %eax
+ 7805 FFFF
+ 7806 6d52 8985B4E4 movl %eax, -6988(%rbp)
+ 7806 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 7807 .loc 2 1360 0
+ 7808 6d58 8B85BCE4 movl -6980(%rbp), %eax
+ 7808 FFFF
+ 7809 6d5e 8985B0E4 movl %eax, -6992(%rbp)
+ 7809 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 7810 .loc 2 1361 0
+ 7811 6d64 F30F6F85 movdqu -6992(%rbp), %xmm0
+ 7811 B0E4FFFF
+ 7812 .LBE832:
+ 7813 .LBE831:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 7814 .loc 2 1688 0
+ 7815 6d6c 660F7F85 movdqa %xmm0, -9680(%rbp)
+ 7815 30DAFFFF
+ 7816 .LBB833:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 7817 .loc 2 1689 0
+ 7818 6d74 660F6F85 movdqa -9680(%rbp), %xmm0
+ 7818 30DAFFFF
+ 7819 6d7c F30F7F85 movdqu %xmm0, -7216(%rbp)
+ 7819 D0E3FFFF
+ 7820 6d84 E8000000 call KDbgWriterGet at PLT
+ 7820 00
+ 7821 6d89 4885C0 testq %rax, %rax
+ 7822 6d8c 7479 je .L201
+ 7823 6d8e BF010000 movl $1, %edi
+ 7823 00
+ 7824 6d93 E8000000 call KDbgCondToFlag at PLT
+ 7824 00
+ 7825 6d98 4889C6 movq %rax, %rsi
+ 7826 6d9b BF100000 movl $16, %edi
+ 7826 00
+ 7827 6da0 E8000000 call KDbgTestModConds at PLT
+ 7827 00
+ 7828 6da5 84C0 testb %al, %al
+ 7829 6da7 745E je .L201
+ 7830 6da9 8B85DCE3 movl -7204(%rbp), %eax
+ 7830 FFFF
+ 7831 6daf 89C7 movl %eax, %edi
+ 7832 6db1 E84A92FF call bswap_32
+ 7832 FF
+ 7833 6db6 4189C5 movl %eax, %r13d
+ 7834 6db9 8B85D8E3 movl -7208(%rbp), %eax
+ 7834 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 260
+
+
+ 7835 6dbf 89C7 movl %eax, %edi
+ 7836 6dc1 E83A92FF call bswap_32
+ 7836 FF
+ 7837 6dc6 4189C4 movl %eax, %r12d
+ 7838 6dc9 8B85D4E3 movl -7212(%rbp), %eax
+ 7838 FFFF
+ 7839 6dcf 89C7 movl %eax, %edi
+ 7840 6dd1 E82A92FF call bswap_32
+ 7840 FF
+ 7841 6dd6 89C3 movl %eax, %ebx
+ 7842 6dd8 8B85D0E3 movl -7216(%rbp), %eax
+ 7842 FFFF
+ 7843 6dde 89C7 movl %eax, %edi
+ 7844 6de0 E81B92FF call bswap_32
+ 7844 FF
+ 7845 6de5 4589E9 movl %r13d, %r9d
+ 7846 6de8 4589E0 movl %r12d, %r8d
+ 7847 6deb 89D9 movl %ebx, %ecx
+ 7848 6ded 89C2 movl %eax, %edx
+ 7849 6def 488D3500 leaq .LC4(%rip), %rsi
+ 7849 000000
+ 7850 6df6 488D3D00 leaq .LC1(%rip), %rdi
+ 7850 000000
+ 7851 6dfd B8000000 movl $0, %eax
+ 7851 00
+ 7852 6e02 E8000000 call KDbgMsg at PLT
+ 7852 00
+ 7853 .L201:
+ 7854 .LBE833:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 7855 .loc 2 1690 0
+ 7856 6e07 660F6F85 movdqa -9680(%rbp), %xmm0
+ 7856 30DAFFFF
+ 7857 .LBE799:
+ 7858 .LBE798:
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x1B,9);
+ 7859 .loc 2 1752 0
+ 7860 6e0f F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 7860 20E6FFFF
+ 7861 6e17 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 7861 10E6FFFF
+ 7862 6e1f F30F7F85 movdqu %xmm0, -768(%rbp)
+ 7862 00FDFFFF
+ 7863 .LBB834:
+ 7864 .LBB835:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 7865 .loc 2 1565 0
+ 7866 6e27 F30F6F85 movdqu -768(%rbp), %xmm0
+ 7866 00FDFFFF
+ 7867 6e2f 660F7F85 movdqa %xmm0, -9632(%rbp)
+ 7867 60DAFFFF
+ 7868 6e37 660F6F85 movdqa -9632(%rbp), %xmm0
+ 7868 60DAFFFF
+ 7869 6e3f F30F7F85 movdqu %xmm0, -752(%rbp)
+ 7869 10FDFFFF
+ 7870 .LBB836:
+ 7871 .LBB837:
+
GAS LISTING /tmp/ccMa7HLZ.s page 261
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 7872 .loc 2 1282 0
+ 7873 6e47 F30F6F85 movdqu -752(%rbp), %xmm0
+ 7873 10FDFFFF
+ 7874 6e4f F30F7F85 movdqu %xmm0, -6976(%rbp)
+ 7874 C0E4FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 7875 .loc 2 1283 0
+ 7876 6e57 8B85C8E4 movl -6968(%rbp), %eax
+ 7876 FFFF
+ 7877 6e5d 8985CCE4 movl %eax, -6964(%rbp)
+ 7877 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 7878 .loc 2 1284 0
+ 7879 6e63 8B85C4E4 movl -6972(%rbp), %eax
+ 7879 FFFF
+ 7880 6e69 8985C8E4 movl %eax, -6968(%rbp)
+ 7880 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 7881 .loc 2 1285 0
+ 7882 6e6f 8B85C0E4 movl -6976(%rbp), %eax
+ 7882 FFFF
+ 7883 6e75 8985C4E4 movl %eax, -6972(%rbp)
+ 7883 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 7884 .loc 2 1286 0
+ 7885 6e7b C785C0E4 movl $0, -6976(%rbp)
+ 7885 FFFF0000
+ 7885 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 7886 .loc 2 1287 0
+ 7887 6e85 F30F6F85 movdqu -6976(%rbp), %xmm0
+ 7887 C0E4FFFF
+ 7888 .LBE837:
+ 7889 .LBE836:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7890 .loc 2 1567 0
+ 7891 6e8d 660F7F85 movdqa %xmm0, -9632(%rbp)
+ 7891 60DAFFFF
+ 7892 6e95 660F6F85 movdqa -9632(%rbp), %xmm0
+ 7892 60DAFFFF
+ 7893 6e9d 660FEF85 pxor -768(%rbp), %xmm0
+ 7893 00FDFFFF
+ 7894 6ea5 F30F7F85 movdqu %xmm0, -768(%rbp)
+ 7894 00FDFFFF
+ 7895 6ead 660F6F85 movdqa -9632(%rbp), %xmm0
+ 7895 60DAFFFF
+ 7896 6eb5 F30F7F85 movdqu %xmm0, -736(%rbp)
+ 7896 20FDFFFF
+ 7897 .LBB838:
+ 7898 .LBB839:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 7899 .loc 2 1282 0
+ 7900 6ebd F30F6F85 movdqu -736(%rbp), %xmm0
+ 7900 20FDFFFF
+ 7901 6ec5 F30F7F85 movdqu %xmm0, -6960(%rbp)
+ 7901 D0E4FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 262
+
+
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 7902 .loc 2 1283 0
+ 7903 6ecd 8B85D8E4 movl -6952(%rbp), %eax
+ 7903 FFFF
+ 7904 6ed3 8985DCE4 movl %eax, -6948(%rbp)
+ 7904 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 7905 .loc 2 1284 0
+ 7906 6ed9 8B85D4E4 movl -6956(%rbp), %eax
+ 7906 FFFF
+ 7907 6edf 8985D8E4 movl %eax, -6952(%rbp)
+ 7907 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 7908 .loc 2 1285 0
+ 7909 6ee5 8B85D0E4 movl -6960(%rbp), %eax
+ 7909 FFFF
+ 7910 6eeb 8985D4E4 movl %eax, -6956(%rbp)
+ 7910 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 7911 .loc 2 1286 0
+ 7912 6ef1 C785D0E4 movl $0, -6960(%rbp)
+ 7912 FFFF0000
+ 7912 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 7913 .loc 2 1287 0
+ 7914 6efb F30F6F85 movdqu -6960(%rbp), %xmm0
+ 7914 D0E4FFFF
+ 7915 .LBE839:
+ 7916 .LBE838:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7917 .loc 2 1568 0
+ 7918 6f03 660F7F85 movdqa %xmm0, -9632(%rbp)
+ 7918 60DAFFFF
+ 7919 6f0b 660F6F85 movdqa -9632(%rbp), %xmm0
+ 7919 60DAFFFF
+ 7920 6f13 660FEF85 pxor -768(%rbp), %xmm0
+ 7920 00FDFFFF
+ 7921 6f1b F30F7F85 movdqu %xmm0, -768(%rbp)
+ 7921 00FDFFFF
+ 7922 6f23 660F6F85 movdqa -9632(%rbp), %xmm0
+ 7922 60DAFFFF
+ 7923 6f2b F30F7F85 movdqu %xmm0, -720(%rbp)
+ 7923 30FDFFFF
+ 7924 .LBB840:
+ 7925 .LBB841:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 7926 .loc 2 1282 0
+ 7927 6f33 F30F6F85 movdqu -720(%rbp), %xmm0
+ 7927 30FDFFFF
+ 7928 6f3b F30F7F85 movdqu %xmm0, -6944(%rbp)
+ 7928 E0E4FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 7929 .loc 2 1283 0
+ 7930 6f43 8B85E8E4 movl -6936(%rbp), %eax
+ 7930 FFFF
+ 7931 6f49 8985ECE4 movl %eax, -6932(%rbp)
+ 7931 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 263
+
+
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 7932 .loc 2 1284 0
+ 7933 6f4f 8B85E4E4 movl -6940(%rbp), %eax
+ 7933 FFFF
+ 7934 6f55 8985E8E4 movl %eax, -6936(%rbp)
+ 7934 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 7935 .loc 2 1285 0
+ 7936 6f5b 8B85E0E4 movl -6944(%rbp), %eax
+ 7936 FFFF
+ 7937 6f61 8985E4E4 movl %eax, -6940(%rbp)
+ 7937 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 7938 .loc 2 1286 0
+ 7939 6f67 C785E0E4 movl $0, -6944(%rbp)
+ 7939 FFFF0000
+ 7939 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 7940 .loc 2 1287 0
+ 7941 6f71 F30F6F85 movdqu -6944(%rbp), %xmm0
+ 7941 E0E4FFFF
+ 7942 .LBE841:
+ 7943 .LBE840:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7944 .loc 2 1569 0
+ 7945 6f79 660F7F85 movdqa %xmm0, -9632(%rbp)
+ 7945 60DAFFFF
+ 7946 6f81 660F6F85 movdqa -9632(%rbp), %xmm0
+ 7946 60DAFFFF
+ 7947 6f89 660FEF85 pxor -768(%rbp), %xmm0
+ 7947 00FDFFFF
+ 7948 6f91 F30F7F85 movdqu %xmm0, -768(%rbp)
+ 7948 00FDFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7949 .loc 2 1571 0
+ 7950 6f99 F30F6F85 movdqu -768(%rbp), %xmm0
+ 7950 00FDFFFF
+ 7951 .LBE835:
+ 7952 .LBE834:
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x1B,9);
+ 7953 .loc 2 1752 0
+ 7954 6fa1 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 7954 10E6FFFF
+ 7955 6fa9 F30F6F85 movdqu -6624(%rbp), %xmm0
+ 7955 20E6FFFF
+ 7956 6fb1 F30F6F8D movdqu -6640(%rbp), %xmm1
+ 7956 10E6FFFF
+ 7957 6fb9 660FEFC1 pxor %xmm1, %xmm0
+ 7958 6fbd F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 7958 10E6FFFF
+ 7959 6fc5 488B85B8 movq -9544(%rbp), %rax
+ 7959 DAFFFF
+ 7960 6fcc 48059000 addq $144, %rax
+ 7960 0000
+ 7961 6fd2 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 7961 10E6FFFF
+ 7962 6fda F30F7F00 movdqu %xmm0, (%rax)
+
GAS LISTING /tmp/ccMa7HLZ.s page 264
+
+
+ 7963 6fde F30F6F85 movdqu -6640(%rbp), %xmm0
+ 7963 10E6FFFF
+ 7964 6fe6 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 7964 50FDFFFF
+ 7965 .LBB842:
+ 7966 .LBB843:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7967 .loc 2 1681 0
+ 7968 6fee B8360000 movl $54, %eax
+ 7968 00
+ 7969 6ff3 660F6F05 movdqa vec_00(%rip), %xmm0
+ 7969 00000000
+ 7970 6ffb F30F7F85 movdqu %xmm0, -656(%rbp)
+ 7970 70FDFFFF
+ 7971 7003 89856CFD movl %eax, -660(%rbp)
+ 7971 FFFF
+ 7972 .LBB844:
+ 7973 .LBB845:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 7974 .loc 2 522 0
+ 7975 7009 F30F6F85 movdqu -656(%rbp), %xmm0
+ 7975 70FDFFFF
+ 7976 7011 F30F7F85 movdqu %xmm0, -6864(%rbp)
+ 7976 30E5FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 7977 .loc 2 523 0
+ 7978 7019 B8030000 movl $3, %eax
+ 7978 00
+ 7979 701e 4898 cltq
+ 7980 7020 8B956CFD movl -660(%rbp), %edx
+ 7980 FFFF
+ 7981 7026 89948530 movl %edx, -6864(%rbp,%rax,4)
+ 7981 E5FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 7982 .loc 2 524 0
+ 7983 702d F30F6F85 movdqu -6864(%rbp), %xmm0
+ 7983 30E5FFFF
+ 7984 7035 F30F7F85 movdqu %xmm0, -656(%rbp)
+ 7984 70FDFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7985 .loc 2 526 0
+ 7986 703d F30F6F85 movdqu -656(%rbp), %xmm0
+ 7986 70FDFFFF
+ 7987 .LBE845:
+ 7988 .LBE844:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7989 .loc 2 1681 0
+ 7990 7045 660F7F85 movdqa %xmm0, -9600(%rbp)
+ 7990 80DAFFFF
+ 7991 704d F30F6F85 movdqu -688(%rbp), %xmm0
+ 7991 50FDFFFF
+ 7992 7055 F30F7F85 movdqu %xmm0, -640(%rbp)
+ 7992 80FDFFFF
+ 7993 705d F30F6F85 movdqu -640(%rbp), %xmm0
+ 7993 80FDFFFF
+ 7994 7065 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 7994 A0FDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 265
+
+
+ 7995 706d 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 7995 000000
+ 7996 7074 48898598 movq %rax, -616(%rbp)
+ 7996 FDFFFF
+ 7997 .LBB846:
+ 7998 .LBB847:
+ 7999 .LBB848:
+ 8000 .LBB849:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 8001 .loc 2 851 0
+ 8002 707b 660F6F05 movdqa vec_00(%rip), %xmm0
+ 8002 00000000
+ 8003 7083 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 8003 C0FDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 8004 .loc 2 854 0
+ 8005 708b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 8005 00000000
+ 8006 7093 F30F6F8D movdqu -608(%rbp), %xmm1
+ 8006 A0FDFFFF
+ 8007 709b F30F7F8D movdqu %xmm1, -496(%rbp)
+ 8007 10FEFFFF
+ 8008 70a3 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 8008 00FEFFFF
+ 8009 .LBB850:
+ 8010 .LBB851:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 8011 .loc 2 206 0
+ 8012 70ab F30F6F85 movdqu -512(%rbp), %xmm0
+ 8012 00FEFFFF
+ 8013 70b3 F30F6F8D movdqu -496(%rbp), %xmm1
+ 8013 10FEFFFF
+ 8014 70bb 660FDBC1 pand %xmm1, %xmm0
+ 8015 .LBE851:
+ 8016 .LBE850:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 8017 .loc 2 854 0
+ 8018 70bf F30F7F85 movdqu %xmm0, -528(%rbp)
+ 8018 F0FDFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 8019 .loc 2 862 0
+ 8020 70c7 660F6F05 movdqa vec_10(%rip), %xmm0
+ 8020 00000000
+ 8021 70cf F30F6F8D movdqu -608(%rbp), %xmm1
+ 8021 A0FDFFFF
+ 8022 70d7 F30F7F8D movdqu %xmm1, -464(%rbp)
+ 8022 30FEFFFF
+ 8023 70df F30F7F85 movdqu %xmm0, -480(%rbp)
+ 8023 20FEFFFF
+ 8024 .LBB852:
+ 8025 .loc 2 2642 0
+ 8026 70e7 0FB68530 movzbl -464(%rbp), %eax
+ 8026 FEFFFF
+ 8027 70ee 0FB69520 movzbl -480(%rbp), %edx
+ 8027 FEFFFF
+ 8028 70f5 0FB6C0 movzbl %al, %eax
+ 8029 70f8 6689858E movw %ax, -10354(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 266
+
+
+ 8029 D7FFFF
+ 8030 70ff 0FB7858E movzwl -10354(%rbp), %eax
+ 8030 D7FFFF
+ 8031 7106 F6F2 divb %dl
+ 8032 7108 4189C7 movl %eax, %r15d
+ 8033 710b 0FB68531 movzbl -463(%rbp), %eax
+ 8033 FEFFFF
+ 8034 7112 0FB69521 movzbl -479(%rbp), %edx
+ 8034 FEFFFF
+ 8035 7119 0FB6C0 movzbl %al, %eax
+ 8036 711c 6689858E movw %ax, -10354(%rbp)
+ 8036 D7FFFF
+ 8037 7123 0FB7858E movzwl -10354(%rbp), %eax
+ 8037 D7FFFF
+ 8038 712a F6F2 divb %dl
+ 8039 712c 88859FDA movb %al, -9569(%rbp)
+ 8039 FFFF
+ 8040 7132 0FB68532 movzbl -462(%rbp), %eax
+ 8040 FEFFFF
+ 8041 7139 0FB69522 movzbl -478(%rbp), %edx
+ 8041 FEFFFF
+ 8042 7140 0FB6C0 movzbl %al, %eax
+ 8043 7143 6689858E movw %ax, -10354(%rbp)
+ 8043 D7FFFF
+ 8044 714a 0FB7858E movzwl -10354(%rbp), %eax
+ 8044 D7FFFF
+ 8045 7151 F6F2 divb %dl
+ 8046 7153 88859EDA movb %al, -9570(%rbp)
+ 8046 FFFF
+ 8047 7159 0FB68533 movzbl -461(%rbp), %eax
+ 8047 FEFFFF
+ 8048 7160 0FB69523 movzbl -477(%rbp), %edx
+ 8048 FEFFFF
+ 8049 7167 0FB6C0 movzbl %al, %eax
+ 8050 716a 6689858E movw %ax, -10354(%rbp)
+ 8050 D7FFFF
+ 8051 7171 0FB7858E movzwl -10354(%rbp), %eax
+ 8051 D7FFFF
+ 8052 7178 F6F2 divb %dl
+ 8053 717a 88859DDA movb %al, -9571(%rbp)
+ 8053 FFFF
+ 8054 7180 0FB68534 movzbl -460(%rbp), %eax
+ 8054 FEFFFF
+ 8055 7187 0FB69524 movzbl -476(%rbp), %edx
+ 8055 FEFFFF
+ 8056 718e 0FB6C0 movzbl %al, %eax
+ 8057 7191 6689858E movw %ax, -10354(%rbp)
+ 8057 D7FFFF
+ 8058 7198 0FB7858E movzwl -10354(%rbp), %eax
+ 8058 D7FFFF
+ 8059 719f F6F2 divb %dl
+ 8060 71a1 88859CDA movb %al, -9572(%rbp)
+ 8060 FFFF
+ 8061 71a7 0FB68535 movzbl -459(%rbp), %eax
+ 8061 FEFFFF
+ 8062 71ae 0FB69525 movzbl -475(%rbp), %edx
+ 8062 FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 267
+
+
+ 8063 71b5 0FB6C0 movzbl %al, %eax
+ 8064 71b8 6689858E movw %ax, -10354(%rbp)
+ 8064 D7FFFF
+ 8065 71bf 0FB7858E movzwl -10354(%rbp), %eax
+ 8065 D7FFFF
+ 8066 71c6 F6F2 divb %dl
+ 8067 71c8 4189C1 movl %eax, %r9d
+ 8068 71cb 0FB68536 movzbl -458(%rbp), %eax
+ 8068 FEFFFF
+ 8069 71d2 0FB69526 movzbl -474(%rbp), %edx
+ 8069 FEFFFF
+ 8070 71d9 0FB6C0 movzbl %al, %eax
+ 8071 71dc 6689858E movw %ax, -10354(%rbp)
+ 8071 D7FFFF
+ 8072 71e3 0FB7858E movzwl -10354(%rbp), %eax
+ 8072 D7FFFF
+ 8073 71ea F6F2 divb %dl
+ 8074 71ec 89C7 movl %eax, %edi
+ 8075 71ee 0FB68537 movzbl -457(%rbp), %eax
+ 8075 FEFFFF
+ 8076 71f5 0FB69527 movzbl -473(%rbp), %edx
+ 8076 FEFFFF
+ 8077 71fc 0FB6C0 movzbl %al, %eax
+ 8078 71ff 6689858E movw %ax, -10354(%rbp)
+ 8078 D7FFFF
+ 8079 7206 0FB7858E movzwl -10354(%rbp), %eax
+ 8079 D7FFFF
+ 8080 720d F6F2 divb %dl
+ 8081 720f 89C3 movl %eax, %ebx
+ 8082 7211 0FB68538 movzbl -456(%rbp), %eax
+ 8082 FEFFFF
+ 8083 7218 0FB69528 movzbl -472(%rbp), %edx
+ 8083 FEFFFF
+ 8084 721f 0FB6C0 movzbl %al, %eax
+ 8085 7222 6689858E movw %ax, -10354(%rbp)
+ 8085 D7FFFF
+ 8086 7229 0FB7858E movzwl -10354(%rbp), %eax
+ 8086 D7FFFF
+ 8087 7230 F6F2 divb %dl
+ 8088 7232 4189C2 movl %eax, %r10d
+ 8089 7235 0FB68539 movzbl -455(%rbp), %eax
+ 8089 FEFFFF
+ 8090 723c 0FB69529 movzbl -471(%rbp), %edx
+ 8090 FEFFFF
+ 8091 7243 0FB6C0 movzbl %al, %eax
+ 8092 7246 6689858E movw %ax, -10354(%rbp)
+ 8092 D7FFFF
+ 8093 724d 0FB7858E movzwl -10354(%rbp), %eax
+ 8093 D7FFFF
+ 8094 7254 F6F2 divb %dl
+ 8095 7256 4189C3 movl %eax, %r11d
+ 8096 7259 0FB6853A movzbl -454(%rbp), %eax
+ 8096 FEFFFF
+ 8097 7260 0FB6952A movzbl -470(%rbp), %edx
+ 8097 FEFFFF
+ 8098 7267 0FB6C0 movzbl %al, %eax
+ 8099 726a 6689858E movw %ax, -10354(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 268
+
+
+ 8099 D7FFFF
+ 8100 7271 0FB7858E movzwl -10354(%rbp), %eax
+ 8100 D7FFFF
+ 8101 7278 F6F2 divb %dl
+ 8102 727a 4189C4 movl %eax, %r12d
+ 8103 727d 0FB6853B movzbl -453(%rbp), %eax
+ 8103 FEFFFF
+ 8104 7284 0FB6952B movzbl -469(%rbp), %edx
+ 8104 FEFFFF
+ 8105 728b 0FB6C0 movzbl %al, %eax
+ 8106 728e 6689858E movw %ax, -10354(%rbp)
+ 8106 D7FFFF
+ 8107 7295 0FB7858E movzwl -10354(%rbp), %eax
+ 8107 D7FFFF
+ 8108 729c F6F2 divb %dl
+ 8109 729e 4189C5 movl %eax, %r13d
+ 8110 72a1 0FB6853C movzbl -452(%rbp), %eax
+ 8110 FEFFFF
+ 8111 72a8 0FB6952C movzbl -468(%rbp), %edx
+ 8111 FEFFFF
+ 8112 72af 0FB6C0 movzbl %al, %eax
+ 8113 72b2 6689858E movw %ax, -10354(%rbp)
+ 8113 D7FFFF
+ 8114 72b9 0FB7858E movzwl -10354(%rbp), %eax
+ 8114 D7FFFF
+ 8115 72c0 F6F2 divb %dl
+ 8116 72c2 4189C6 movl %eax, %r14d
+ 8117 72c5 0FB6853D movzbl -451(%rbp), %eax
+ 8117 FEFFFF
+ 8118 72cc 0FB6952D movzbl -467(%rbp), %edx
+ 8118 FEFFFF
+ 8119 72d3 0FB6C0 movzbl %al, %eax
+ 8120 72d6 6689858E movw %ax, -10354(%rbp)
+ 8120 D7FFFF
+ 8121 72dd 0FB7858E movzwl -10354(%rbp), %eax
+ 8121 D7FFFF
+ 8122 72e4 F6F2 divb %dl
+ 8123 72e6 4189C0 movl %eax, %r8d
+ 8124 72e9 0FB6853E movzbl -450(%rbp), %eax
+ 8124 FEFFFF
+ 8125 72f0 0FB6952E movzbl -466(%rbp), %edx
+ 8125 FEFFFF
+ 8126 72f7 0FB6C0 movzbl %al, %eax
+ 8127 72fa 6689858E movw %ax, -10354(%rbp)
+ 8127 D7FFFF
+ 8128 7301 0FB7858E movzwl -10354(%rbp), %eax
+ 8128 D7FFFF
+ 8129 7308 F6F2 divb %dl
+ 8130 730a 89C6 movl %eax, %esi
+ 8131 730c 0FB6853F movzbl -449(%rbp), %eax
+ 8131 FEFFFF
+ 8132 7313 0FB6952F movzbl -465(%rbp), %edx
+ 8132 FEFFFF
+ 8133 731a 0FB6C0 movzbl %al, %eax
+ 8134 731d 6689858E movw %ax, -10354(%rbp)
+ 8134 D7FFFF
+ 8135 7324 0FB7858E movzwl -10354(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 269
+
+
+ 8135 D7FFFF
+ 8136 732b F6F2 divb %dl
+ 8137 732d 89C1 movl %eax, %ecx
+ 8138 .LBB853:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 8139 .loc 2 346 0
+ 8140 732f 0FB6D3 movzbl %bl, %edx
+ 8141 7332 400FB6C7 movzbl %dil, %eax
+ 8142 7336 48C1E208 salq $8, %rdx
+ 8143 733a 4809C2 orq %rax, %rdx
+ 8144 733d 410FB6C1 movzbl %r9b, %eax
+ 8145 7341 48C1E208 salq $8, %rdx
+ 8146 7345 4809C2 orq %rax, %rdx
+ 8147 7348 0FB6859C movzbl -9572(%rbp), %eax
+ 8147 DAFFFF
+ 8148 734f 48C1E208 salq $8, %rdx
+ 8149 7353 4809C2 orq %rax, %rdx
+ 8150 7356 0FB6859D movzbl -9571(%rbp), %eax
+ 8150 DAFFFF
+ 8151 735d 48C1E208 salq $8, %rdx
+ 8152 7361 4809C2 orq %rax, %rdx
+ 8153 7364 0FB6859E movzbl -9570(%rbp), %eax
+ 8153 DAFFFF
+ 8154 736b 48C1E208 salq $8, %rdx
+ 8155 736f 4809C2 orq %rax, %rdx
+ 8156 7372 0FB6859F movzbl -9569(%rbp), %eax
+ 8156 DAFFFF
+ 8157 7379 48C1E208 salq $8, %rdx
+ 8158 737d 4809C2 orq %rax, %rdx
+ 8159 7380 410FB6C7 movzbl %r15b, %eax
+ 8160 7384 48C1E208 salq $8, %rdx
+ 8161 7388 4809C2 orq %rax, %rdx
+ 8162 738b 0FB6C1 movzbl %cl, %eax
+ 8163 738e 400FB6CE movzbl %sil, %ecx
+ 8164 7392 48C1E008 salq $8, %rax
+ 8165 7396 4809C8 orq %rcx, %rax
+ 8166 7399 410FB6C8 movzbl %r8b, %ecx
+ 8167 739d 48C1E008 salq $8, %rax
+ 8168 73a1 4809C8 orq %rcx, %rax
+ 8169 73a4 410FB6CE movzbl %r14b, %ecx
+ 8170 73a8 48C1E008 salq $8, %rax
+ 8171 73ac 4809C8 orq %rcx, %rax
+ 8172 73af 410FB6CD movzbl %r13b, %ecx
+ 8173 73b3 48C1E008 salq $8, %rax
+ 8174 73b7 4809C8 orq %rcx, %rax
+ 8175 73ba 410FB6CC movzbl %r12b, %ecx
+ 8176 73be 48C1E008 salq $8, %rax
+ 8177 73c2 4809C8 orq %rcx, %rax
+ 8178 73c5 410FB6CB movzbl %r11b, %ecx
+ 8179 73c9 48C1E008 salq $8, %rax
+ 8180 73cd 4809C8 orq %rcx, %rax
+ 8181 73d0 410FB6CA movzbl %r10b, %ecx
+ 8182 73d4 48C1E008 salq $8, %rax
+ 8183 73d8 4809C8 orq %rcx, %rax
+ 8184 73db 48899590 movq %rdx, -10352(%rbp)
+ 8184 D7FFFF
+ 8185 73e2 48898598 movq %rax, -10344(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 270
+
+
+ 8185 D7FFFF
+ 8186 73e9 660F6F85 movdqa -10352(%rbp), %xmm0
+ 8186 90D7FFFF
+ 8187 .LBE853:
+ 8188 .LBE852:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 8189 .loc 2 862 0
+ 8190 73f1 F30F7F85 movdqu %xmm0, -544(%rbp)
+ 8190 E0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 8191 .loc 2 866 0
+ 8192 73f9 C785BCFD movl $0, -580(%rbp)
+ 8192 FFFF0000
+ 8192 0000
+ 8193 7403 E9860200 jmp .L202
+ 8193 00
+ 8194 .L211:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 8195 .loc 2 868 0
+ 8196 7408 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 8196 00000000
+ 8197 7410 F30F7F85 movdqu %xmm0, -432(%rbp)
+ 8197 50FEFFFF
+ 8198 7418 F30F6F85 movdqu -544(%rbp), %xmm0
+ 8198 E0FDFFFF
+ 8199 7420 F30F7F85 movdqu %xmm0, -448(%rbp)
+ 8199 40FEFFFF
+ 8200 .LBB854:
+ 8201 .LBB855:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 8202 .loc 2 380 0
+ 8203 7428 F30F6F85 movdqu -432(%rbp), %xmm0
+ 8203 50FEFFFF
+ 8204 7430 F30F7F85 movdqu %xmm0, -6832(%rbp)
+ 8204 50E5FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 8205 .loc 2 381 0
+ 8206 7438 F30F6F85 movdqu -448(%rbp), %xmm0
+ 8206 40FEFFFF
+ 8207 7440 F30F7F85 movdqu %xmm0, -6848(%rbp)
+ 8207 40E5FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 8208 .loc 2 383 0
+ 8209 7448 C7856CFE movl $0, -404(%rbp)
+ 8209 FFFF0000
+ 8209 0000
+ 8210 7452 EB5C jmp .L203
+ 8211 .L206:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 8212 .loc 2 385 0
+ 8213 7454 8B856CFE movl -404(%rbp), %eax
+ 8213 FFFF
+ 8214 745a 89C0 mov %eax, %eax
+ 8215 745c 0FB68405 movzbl -6848(%rbp,%rax), %eax
+ 8215 40E5FFFF
+ 8216 7464 84C0 testb %al, %al
+ 8217 7466 7912 jns .L204
+
GAS LISTING /tmp/ccMa7HLZ.s page 271
+
+
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 8218 .loc 2 386 0
+ 8219 7468 8B856CFE movl -404(%rbp), %eax
+ 8219 FFFF
+ 8220 746e 89C0 mov %eax, %eax
+ 8221 7470 C6840560 movb $0, -6816(%rbp,%rax)
+ 8221 E5FFFF00
+ 8222 7478 EB2F jmp .L205
+ 8223 .L204:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 8224 .loc 2 388 0
+ 8225 747a 8B8D6CFE movl -404(%rbp), %ecx
+ 8225 FFFF
+ 8226 7480 8B856CFE movl -404(%rbp), %eax
+ 8226 FFFF
+ 8227 7486 89C0 mov %eax, %eax
+ 8228 7488 0FB68405 movzbl -6848(%rbp,%rax), %eax
+ 8228 40E5FFFF
+ 8229 7490 0FB6C0 movzbl %al, %eax
+ 8230 7493 83E00F andl $15, %eax
+ 8231 7496 4898 cltq
+ 8232 7498 0FB69405 movzbl -6832(%rbp,%rax), %edx
+ 8232 50E5FFFF
+ 8233 74a0 89C8 mov %ecx, %eax
+ 8234 74a2 88940560 movb %dl, -6816(%rbp,%rax)
+ 8234 E5FFFF
+ 8235 .L205:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 8236 .loc 2 383 0
+ 8237 74a9 83856CFE addl $1, -404(%rbp)
+ 8237 FFFF01
+ 8238 .L203:
+ 8239 74b0 83BD6CFE cmpl $15, -404(%rbp)
+ 8239 FFFF0F
+ 8240 74b7 769B jbe .L206
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 8241 .loc 2 391 0
+ 8242 74b9 F30F6F85 movdqu -6816(%rbp), %xmm0
+ 8242 60E5FFFF
+ 8243 .LBE855:
+ 8244 .LBE854:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 8245 .loc 2 868 0
+ 8246 74c1 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 8246 D0FDFFFF
+ 8247 74c9 F30F6F85 movdqu -528(%rbp), %xmm0
+ 8247 F0FDFFFF
+ 8248 74d1 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 8248 80FEFFFF
+ 8249 74d9 F30F6F85 movdqu -560(%rbp), %xmm0
+ 8249 D0FDFFFF
+ 8250 74e1 F30F7F85 movdqu %xmm0, -400(%rbp)
+ 8250 70FEFFFF
+ 8251 .LBB856:
+ 8252 .LBB857:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 8253 .loc 2 234 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 272
+
+
+ 8254 74e9 F30F6F85 movdqu -400(%rbp), %xmm0
+ 8254 70FEFFFF
+ 8255 74f1 F30F6F8D movdqu -384(%rbp), %xmm1
+ 8255 80FEFFFF
+ 8256 74f9 660FEBC1 por %xmm1, %xmm0
+ 8257 .LBE857:
+ 8258 .LBE856:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 8259 .loc 2 870 0
+ 8260 74fd F30F7F85 movdqu %xmm0, -560(%rbp)
+ 8260 D0FDFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 8261 .loc 2 872 0
+ 8262 7505 8B85BCFD mov -580(%rbp), %eax
+ 8262 FFFF
+ 8263 750b 48C1E004 salq $4, %rax
+ 8264 750f 48038598 addq -616(%rbp), %rax
+ 8264 FDFFFF
+ 8265 7516 660F6F00 movdqa (%rax), %xmm0
+ 8266 751a F30F7F85 movdqu %xmm0, -352(%rbp)
+ 8266 A0FEFFFF
+ 8267 7522 F30F6F85 movdqu -560(%rbp), %xmm0
+ 8267 D0FDFFFF
+ 8268 752a F30F7F85 movdqu %xmm0, -368(%rbp)
+ 8268 90FEFFFF
+ 8269 .LBB858:
+ 8270 .LBB859:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 8271 .loc 2 380 0
+ 8272 7532 F30F6F85 movdqu -352(%rbp), %xmm0
+ 8272 A0FEFFFF
+ 8273 753a F30F7F85 movdqu %xmm0, -6784(%rbp)
+ 8273 80E5FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 8274 .loc 2 381 0
+ 8275 7542 F30F6F85 movdqu -368(%rbp), %xmm0
+ 8275 90FEFFFF
+ 8276 754a F30F7F85 movdqu %xmm0, -6800(%rbp)
+ 8276 70E5FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 8277 .loc 2 383 0
+ 8278 7552 C785BCFE movl $0, -324(%rbp)
+ 8278 FFFF0000
+ 8278 0000
+ 8279 755c EB5C jmp .L207
+ 8280 .L210:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 8281 .loc 2 385 0
+ 8282 755e 8B85BCFE movl -324(%rbp), %eax
+ 8282 FFFF
+ 8283 7564 89C0 mov %eax, %eax
+ 8284 7566 0FB68405 movzbl -6800(%rbp,%rax), %eax
+ 8284 70E5FFFF
+ 8285 756e 84C0 testb %al, %al
+ 8286 7570 7912 jns .L208
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 8287 .loc 2 386 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 273
+
+
+ 8288 7572 8B85BCFE movl -324(%rbp), %eax
+ 8288 FFFF
+ 8289 7578 89C0 mov %eax, %eax
+ 8290 757a C6840590 movb $0, -6768(%rbp,%rax)
+ 8290 E5FFFF00
+ 8291 7582 EB2F jmp .L209
+ 8292 .L208:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 8293 .loc 2 388 0
+ 8294 7584 8B8DBCFE movl -324(%rbp), %ecx
+ 8294 FFFF
+ 8295 758a 8B85BCFE movl -324(%rbp), %eax
+ 8295 FFFF
+ 8296 7590 89C0 mov %eax, %eax
+ 8297 7592 0FB68405 movzbl -6800(%rbp,%rax), %eax
+ 8297 70E5FFFF
+ 8298 759a 0FB6C0 movzbl %al, %eax
+ 8299 759d 83E00F andl $15, %eax
+ 8300 75a0 4898 cltq
+ 8301 75a2 0FB69405 movzbl -6784(%rbp,%rax), %edx
+ 8301 80E5FFFF
+ 8302 75aa 89C8 mov %ecx, %eax
+ 8303 75ac 88940590 movb %dl, -6768(%rbp,%rax)
+ 8303 E5FFFF
+ 8304 .L209:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 8305 .loc 2 383 0
+ 8306 75b3 8385BCFE addl $1, -324(%rbp)
+ 8306 FFFF01
+ 8307 .L207:
+ 8308 75ba 83BDBCFE cmpl $15, -324(%rbp)
+ 8308 FFFF0F
+ 8309 75c1 769B jbe .L210
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 8310 .loc 2 391 0
+ 8311 75c3 F30F6F85 movdqu -6768(%rbp), %xmm0
+ 8311 90E5FFFF
+ 8312 .LBE859:
+ 8313 .LBE858:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 8314 .loc 2 872 0
+ 8315 75cb F30F7F85 movdqu %xmm0, -560(%rbp)
+ 8315 D0FDFFFF
+ 8316 75d3 F30F6F85 movdqu -576(%rbp), %xmm0
+ 8316 C0FDFFFF
+ 8317 75db F30F7F85 movdqu %xmm0, -304(%rbp)
+ 8317 D0FEFFFF
+ 8318 75e3 F30F6F85 movdqu -560(%rbp), %xmm0
+ 8318 D0FDFFFF
+ 8319 75eb F30F7F85 movdqu %xmm0, -320(%rbp)
+ 8319 C0FEFFFF
+ 8320 .LBB860:
+ 8321 .LBB861:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 8322 .loc 2 234 0
+ 8323 75f3 F30F6F85 movdqu -320(%rbp), %xmm0
+ 8323 C0FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 274
+
+
+ 8324 75fb F30F6F8D movdqu -304(%rbp), %xmm1
+ 8324 D0FEFFFF
+ 8325 7603 660FEBC1 por %xmm1, %xmm0
+ 8326 .LBE861:
+ 8327 .LBE860:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 8328 .loc 2 874 0
+ 8329 7607 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 8329 C0FDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 8330 .loc 2 876 0
+ 8331 760f 660F6F05 movdqa vec_01(%rip), %xmm0
+ 8331 00000000
+ 8332 7617 F30F6F8D movdqu -544(%rbp), %xmm1
+ 8332 E0FDFFFF
+ 8333 761f F30F7F8D movdqu %xmm1, -272(%rbp)
+ 8333 F0FEFFFF
+ 8334 7627 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 8334 E0FEFFFF
+ 8335 .LBB862:
+ 8336 .LBB863:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 8337 .loc 2 290 0
+ 8338 762f F30F6F8D movdqu -288(%rbp), %xmm1
+ 8338 E0FEFFFF
+ 8339 7637 F30F6F85 movdqu -272(%rbp), %xmm0
+ 8339 F0FEFFFF
+ 8340 763f 660FF8C1 psubb %xmm1, %xmm0
+ 8341 .LBE863:
+ 8342 .LBE862:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 8343 .loc 2 876 0
+ 8344 7643 F30F7F85 movdqu %xmm0, -544(%rbp)
+ 8344 E0FDFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8345 .loc 2 878 0
+ 8346 764b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 8346 00000000
+ 8347 7653 F30F6F8D movdqu -544(%rbp), %xmm1
+ 8347 E0FDFFFF
+ 8348 765b F30F7F8D movdqu %xmm1, -240(%rbp)
+ 8348 10FFFFFF
+ 8349 7663 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 8349 00FFFFFF
+ 8350 .LBB864:
+ 8351 .LBB865:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 8352 .loc 2 206 0
+ 8353 766b F30F6F85 movdqu -256(%rbp), %xmm0
+ 8353 00FFFFFF
+ 8354 7673 F30F6F8D movdqu -240(%rbp), %xmm1
+ 8354 10FFFFFF
+ 8355 767b 660FDBC1 pand %xmm1, %xmm0
+ 8356 .LBE865:
+ 8357 .LBE864:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8358 .loc 2 878 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 275
+
+
+ 8359 767f F30F7F85 movdqu %xmm0, -544(%rbp)
+ 8359 E0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 8360 .loc 2 866 0
+ 8361 7687 8385BCFD addl $1, -580(%rbp)
+ 8361 FFFF01
+ 8362 .L202:
+ 8363 768e 83BDBCFD cmpl $15, -580(%rbp)
+ 8363 FFFF0F
+ 8364 7695 0F866DFD jbe .L211
+ 8364 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 8365 .loc 2 882 0
+ 8366 769b F30F6F85 movdqu -576(%rbp), %xmm0
+ 8366 C0FDFFFF
+ 8367 .LBE849:
+ 8368 .LBE848:
+ 8369 .LBE847:
+ 8370 .LBE846:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 8371 .loc 2 1682 0
+ 8372 76a3 660F7F85 movdqa %xmm0, -9616(%rbp)
+ 8372 70DAFFFF
+ 8373 .LBB866:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 8374 .loc 2 1683 0
+ 8375 76ab 660F6F85 movdqa -9616(%rbp), %xmm0
+ 8375 70DAFFFF
+ 8376 76b3 F30F7F85 movdqu %xmm0, -6880(%rbp)
+ 8376 20E5FFFF
+ 8377 76bb E8000000 call KDbgWriterGet at PLT
+ 8377 00
+ 8378 76c0 4885C0 testq %rax, %rax
+ 8379 76c3 7479 je .L213
+ 8380 76c5 BF010000 movl $1, %edi
+ 8380 00
+ 8381 76ca E8000000 call KDbgCondToFlag at PLT
+ 8381 00
+ 8382 76cf 4889C6 movq %rax, %rsi
+ 8383 76d2 BF100000 movl $16, %edi
+ 8383 00
+ 8384 76d7 E8000000 call KDbgTestModConds at PLT
+ 8384 00
+ 8385 76dc 84C0 testb %al, %al
+ 8386 76de 745E je .L213
+ 8387 76e0 8B852CE5 movl -6868(%rbp), %eax
+ 8387 FFFF
+ 8388 76e6 89C7 movl %eax, %edi
+ 8389 76e8 E81389FF call bswap_32
+ 8389 FF
+ 8390 76ed 4189C5 movl %eax, %r13d
+ 8391 76f0 8B8528E5 movl -6872(%rbp), %eax
+ 8391 FFFF
+ 8392 76f6 89C7 movl %eax, %edi
+ 8393 76f8 E80389FF call bswap_32
+ 8393 FF
+ 8394 76fd 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s page 276
+
+
+ 8395 7700 8B8524E5 movl -6876(%rbp), %eax
+ 8395 FFFF
+ 8396 7706 89C7 movl %eax, %edi
+ 8397 7708 E8F388FF call bswap_32
+ 8397 FF
+ 8398 770d 89C3 movl %eax, %ebx
+ 8399 770f 8B8520E5 movl -6880(%rbp), %eax
+ 8399 FFFF
+ 8400 7715 89C7 movl %eax, %edi
+ 8401 7717 E8E488FF call bswap_32
+ 8401 FF
+ 8402 771c 4589E9 movl %r13d, %r9d
+ 8403 771f 4589E0 movl %r12d, %r8d
+ 8404 7722 89D9 movl %ebx, %ecx
+ 8405 7724 89C2 movl %eax, %edx
+ 8406 7726 488D3500 leaq .LC0(%rip), %rsi
+ 8406 000000
+ 8407 772d 488D3D00 leaq .LC1(%rip), %rdi
+ 8407 000000
+ 8408 7734 B8000000 movl $0, %eax
+ 8408 00
+ 8409 7739 E8000000 call KDbgMsg at PLT
+ 8409 00
+ 8410 .L213:
+ 8411 773e 660F6F85 movdqa -9616(%rbp), %xmm0
+ 8411 70DAFFFF
+ 8412 7746 F30F7F85 movdqu %xmm0, -224(%rbp)
+ 8412 20FFFFFF
+ 8413 .LBE866:
+ 8414 .LBB867:
+ 8415 .LBB868:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 8416 .loc 2 667 0
+ 8417 774e 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 8417 00000000
+ 8418 7756 F30F6F8D movdqu -224(%rbp), %xmm1
+ 8418 20FFFFFF
+ 8419 775e F30F7F8D movdqu %xmm1, -192(%rbp)
+ 8419 40FFFFFF
+ 8420 7766 F30F7F85 movdqu %xmm0, -208(%rbp)
+ 8420 30FFFFFF
+ 8421 .LBB869:
+ 8422 .LBB870:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 8423 .loc 2 380 0
+ 8424 776e F30F6F85 movdqu -192(%rbp), %xmm0
+ 8424 40FFFFFF
+ 8425 7776 F30F7F85 movdqu %xmm0, -6736(%rbp)
+ 8425 B0E5FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 8426 .loc 2 381 0
+ 8427 777e F30F6F85 movdqu -208(%rbp), %xmm0
+ 8427 30FFFFFF
+ 8428 7786 F30F7F85 movdqu %xmm0, -6752(%rbp)
+ 8428 A0E5FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 8429 .loc 2 383 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 277
+
+
+ 8430 778e C7855CFF movl $0, -164(%rbp)
+ 8430 FFFF0000
+ 8430 0000
+ 8431 7798 EB5C jmp .L214
+ 8432 .L217:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 8433 .loc 2 385 0
+ 8434 779a 8B855CFF movl -164(%rbp), %eax
+ 8434 FFFF
+ 8435 77a0 89C0 mov %eax, %eax
+ 8436 77a2 0FB68405 movzbl -6752(%rbp,%rax), %eax
+ 8436 A0E5FFFF
+ 8437 77aa 84C0 testb %al, %al
+ 8438 77ac 7912 jns .L215
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 8439 .loc 2 386 0
+ 8440 77ae 8B855CFF movl -164(%rbp), %eax
+ 8440 FFFF
+ 8441 77b4 89C0 mov %eax, %eax
+ 8442 77b6 C68405C0 movb $0, -6720(%rbp,%rax)
+ 8442 E5FFFF00
+ 8443 77be EB2F jmp .L216
+ 8444 .L215:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 8445 .loc 2 388 0
+ 8446 77c0 8B8D5CFF movl -164(%rbp), %ecx
+ 8446 FFFF
+ 8447 77c6 8B855CFF movl -164(%rbp), %eax
+ 8447 FFFF
+ 8448 77cc 89C0 mov %eax, %eax
+ 8449 77ce 0FB68405 movzbl -6752(%rbp,%rax), %eax
+ 8449 A0E5FFFF
+ 8450 77d6 0FB6C0 movzbl %al, %eax
+ 8451 77d9 83E00F andl $15, %eax
+ 8452 77dc 4898 cltq
+ 8453 77de 0FB69405 movzbl -6736(%rbp,%rax), %edx
+ 8453 B0E5FFFF
+ 8454 77e6 89C8 mov %ecx, %eax
+ 8455 77e8 889405C0 movb %dl, -6720(%rbp,%rax)
+ 8455 E5FFFF
+ 8456 .L216:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 8457 .loc 2 383 0
+ 8458 77ef 83855CFF addl $1, -164(%rbp)
+ 8458 FFFF01
+ 8459 .L214:
+ 8460 77f6 83BD5CFF cmpl $15, -164(%rbp)
+ 8460 FFFF0F
+ 8461 77fd 769B jbe .L217
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 8462 .loc 2 391 0
+ 8463 77ff F30F6F85 movdqu -6720(%rbp), %xmm0
+ 8463 C0E5FFFF
+ 8464 .LBE870:
+ 8465 .LBE869:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 8466 .loc 2 667 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 278
+
+
+ 8467 7807 F30F7F85 movdqu %xmm0, -224(%rbp)
+ 8467 20FFFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8468 .loc 2 668 0
+ 8469 780f F30F6F85 movdqu -224(%rbp), %xmm0
+ 8469 20FFFFFF
+ 8470 .LBE868:
+ 8471 .LBE867:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 8472 .loc 2 1684 0
+ 8473 7817 660F7F85 movdqa %xmm0, -9616(%rbp)
+ 8473 70DAFFFF
+ 8474 .LBB871:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 8475 .loc 2 1685 0
+ 8476 781f 660F6F85 movdqa -9616(%rbp), %xmm0
+ 8476 70DAFFFF
+ 8477 7827 F30F7F85 movdqu %xmm0, -6896(%rbp)
+ 8477 10E5FFFF
+ 8478 782f E8000000 call KDbgWriterGet at PLT
+ 8478 00
+ 8479 7834 4885C0 testq %rax, %rax
+ 8480 7837 7479 je .L219
+ 8481 7839 BF010000 movl $1, %edi
+ 8481 00
+ 8482 783e E8000000 call KDbgCondToFlag at PLT
+ 8482 00
+ 8483 7843 4889C6 movq %rax, %rsi
+ 8484 7846 BF100000 movl $16, %edi
+ 8484 00
+ 8485 784b E8000000 call KDbgTestModConds at PLT
+ 8485 00
+ 8486 7850 84C0 testb %al, %al
+ 8487 7852 745E je .L219
+ 8488 7854 8B851CE5 movl -6884(%rbp), %eax
+ 8488 FFFF
+ 8489 785a 89C7 movl %eax, %edi
+ 8490 785c E89F87FF call bswap_32
+ 8490 FF
+ 8491 7861 4189C5 movl %eax, %r13d
+ 8492 7864 8B8518E5 movl -6888(%rbp), %eax
+ 8492 FFFF
+ 8493 786a 89C7 movl %eax, %edi
+ 8494 786c E88F87FF call bswap_32
+ 8494 FF
+ 8495 7871 4189C4 movl %eax, %r12d
+ 8496 7874 8B8514E5 movl -6892(%rbp), %eax
+ 8496 FFFF
+ 8497 787a 89C7 movl %eax, %edi
+ 8498 787c E87F87FF call bswap_32
+ 8498 FF
+ 8499 7881 89C3 movl %eax, %ebx
+ 8500 7883 8B8510E5 movl -6896(%rbp), %eax
+ 8500 FFFF
+ 8501 7889 89C7 movl %eax, %edi
+ 8502 788b E87087FF call bswap_32
+ 8502 FF
+
GAS LISTING /tmp/ccMa7HLZ.s page 279
+
+
+ 8503 7890 4589E9 movl %r13d, %r9d
+ 8504 7893 4589E0 movl %r12d, %r8d
+ 8505 7896 89D9 movl %ebx, %ecx
+ 8506 7898 89C2 movl %eax, %edx
+ 8507 789a 488D3500 leaq .LC2(%rip), %rsi
+ 8507 000000
+ 8508 78a1 488D3D00 leaq .LC1(%rip), %rdi
+ 8508 000000
+ 8509 78a8 B8000000 movl $0, %eax
+ 8509 00
+ 8510 78ad E8000000 call KDbgMsg at PLT
+ 8510 00
+ 8511 .L219:
+ 8512 78b2 660F6F85 movdqa -9616(%rbp), %xmm0
+ 8512 70DAFFFF
+ 8513 78ba F30F7F85 movdqu %xmm0, -144(%rbp)
+ 8513 70FFFFFF
+ 8514 78c2 660F6F85 movdqa -9600(%rbp), %xmm0
+ 8514 80DAFFFF
+ 8515 78ca F30F7F85 movdqu %xmm0, -160(%rbp)
+ 8515 60FFFFFF
+ 8516 .LBE871:
+ 8517 .LBB872:
+ 8518 .LBB873:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 8519 .loc 2 178 0
+ 8520 78d2 F30F6F85 movdqu -160(%rbp), %xmm0
+ 8520 60FFFFFF
+ 8521 78da F30F6F8D movdqu -144(%rbp), %xmm1
+ 8521 70FFFFFF
+ 8522 78e2 660FEFC1 pxor %xmm1, %xmm0
+ 8523 .LBE873:
+ 8524 .LBE872:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 8525 .loc 2 1686 0
+ 8526 78e6 660F7F85 movdqa %xmm0, -9616(%rbp)
+ 8526 70DAFFFF
+ 8527 .LBB874:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 8528 .loc 2 1687 0
+ 8529 78ee 660F6F85 movdqa -9616(%rbp), %xmm0
+ 8529 70DAFFFF
+ 8530 78f6 F30F7F85 movdqu %xmm0, -6912(%rbp)
+ 8530 00E5FFFF
+ 8531 78fe E8000000 call KDbgWriterGet at PLT
+ 8531 00
+ 8532 7903 4885C0 testq %rax, %rax
+ 8533 7906 7479 je .L221
+ 8534 7908 BF010000 movl $1, %edi
+ 8534 00
+ 8535 790d E8000000 call KDbgCondToFlag at PLT
+ 8535 00
+ 8536 7912 4889C6 movq %rax, %rsi
+ 8537 7915 BF100000 movl $16, %edi
+ 8537 00
+ 8538 791a E8000000 call KDbgTestModConds at PLT
+ 8538 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 280
+
+
+ 8539 791f 84C0 testb %al, %al
+ 8540 7921 745E je .L221
+ 8541 7923 8B850CE5 movl -6900(%rbp), %eax
+ 8541 FFFF
+ 8542 7929 89C7 movl %eax, %edi
+ 8543 792b E8D086FF call bswap_32
+ 8543 FF
+ 8544 7930 4189C5 movl %eax, %r13d
+ 8545 7933 8B8508E5 movl -6904(%rbp), %eax
+ 8545 FFFF
+ 8546 7939 89C7 movl %eax, %edi
+ 8547 793b E8C086FF call bswap_32
+ 8547 FF
+ 8548 7940 4189C4 movl %eax, %r12d
+ 8549 7943 8B8504E5 movl -6908(%rbp), %eax
+ 8549 FFFF
+ 8550 7949 89C7 movl %eax, %edi
+ 8551 794b E8B086FF call bswap_32
+ 8551 FF
+ 8552 7950 89C3 movl %eax, %ebx
+ 8553 7952 8B8500E5 movl -6912(%rbp), %eax
+ 8553 FFFF
+ 8554 7958 89C7 movl %eax, %edi
+ 8555 795a E8A186FF call bswap_32
+ 8555 FF
+ 8556 795f 4589E9 movl %r13d, %r9d
+ 8557 7962 4589E0 movl %r12d, %r8d
+ 8558 7965 89D9 movl %ebx, %ecx
+ 8559 7967 89C2 movl %eax, %edx
+ 8560 7969 488D3500 leaq .LC3(%rip), %rsi
+ 8560 000000
+ 8561 7970 488D3D00 leaq .LC1(%rip), %rdi
+ 8561 000000
+ 8562 7977 B8000000 movl $0, %eax
+ 8562 00
+ 8563 797c E8000000 call KDbgMsg at PLT
+ 8563 00
+ 8564 .L221:
+ 8565 7981 660F6F85 movdqa -9616(%rbp), %xmm0
+ 8565 70DAFFFF
+ 8566 7989 F30F7F45 movdqu %xmm0, -128(%rbp)
+ 8566 80
+ 8567 .LBE874:
+ 8568 .LBB875:
+ 8569 .LBB876:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 8570 .loc 2 1357 0
+ 8571 798e F30F6F45 movdqu -128(%rbp), %xmm0
+ 8571 80
+ 8572 7993 F30F7F85 movdqu %xmm0, -6704(%rbp)
+ 8572 D0E5FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 8573 .loc 2 1358 0
+ 8574 799b 8B85DCE5 movl -6692(%rbp), %eax
+ 8574 FFFF
+ 8575 79a1 8985D8E5 movl %eax, -6696(%rbp)
+ 8575 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 281
+
+
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 8576 .loc 2 1359 0
+ 8577 79a7 8B85DCE5 movl -6692(%rbp), %eax
+ 8577 FFFF
+ 8578 79ad 8985D4E5 movl %eax, -6700(%rbp)
+ 8578 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 8579 .loc 2 1360 0
+ 8580 79b3 8B85DCE5 movl -6692(%rbp), %eax
+ 8580 FFFF
+ 8581 79b9 8985D0E5 movl %eax, -6704(%rbp)
+ 8581 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 8582 .loc 2 1361 0
+ 8583 79bf F30F6F85 movdqu -6704(%rbp), %xmm0
+ 8583 D0E5FFFF
+ 8584 .LBE876:
+ 8585 .LBE875:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 8586 .loc 2 1688 0
+ 8587 79c7 660F7F85 movdqa %xmm0, -9616(%rbp)
+ 8587 70DAFFFF
+ 8588 .LBB877:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 8589 .loc 2 1689 0
+ 8590 79cf 660F6F85 movdqa -9616(%rbp), %xmm0
+ 8590 70DAFFFF
+ 8591 79d7 F30F7F85 movdqu %xmm0, -6928(%rbp)
+ 8591 F0E4FFFF
+ 8592 79df E8000000 call KDbgWriterGet at PLT
+ 8592 00
+ 8593 79e4 4885C0 testq %rax, %rax
+ 8594 79e7 7479 je .L223
+ 8595 79e9 BF010000 movl $1, %edi
+ 8595 00
+ 8596 79ee E8000000 call KDbgCondToFlag at PLT
+ 8596 00
+ 8597 79f3 4889C6 movq %rax, %rsi
+ 8598 79f6 BF100000 movl $16, %edi
+ 8598 00
+ 8599 79fb E8000000 call KDbgTestModConds at PLT
+ 8599 00
+ 8600 7a00 84C0 testb %al, %al
+ 8601 7a02 745E je .L223
+ 8602 7a04 8B85FCE4 movl -6916(%rbp), %eax
+ 8602 FFFF
+ 8603 7a0a 89C7 movl %eax, %edi
+ 8604 7a0c E8EF85FF call bswap_32
+ 8604 FF
+ 8605 7a11 4189C5 movl %eax, %r13d
+ 8606 7a14 8B85F8E4 movl -6920(%rbp), %eax
+ 8606 FFFF
+ 8607 7a1a 89C7 movl %eax, %edi
+ 8608 7a1c E8DF85FF call bswap_32
+ 8608 FF
+ 8609 7a21 4189C4 movl %eax, %r12d
+ 8610 7a24 8B85F4E4 movl -6924(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 282
+
+
+ 8610 FFFF
+ 8611 7a2a 89C7 movl %eax, %edi
+ 8612 7a2c E8CF85FF call bswap_32
+ 8612 FF
+ 8613 7a31 89C3 movl %eax, %ebx
+ 8614 7a33 8B85F0E4 movl -6928(%rbp), %eax
+ 8614 FFFF
+ 8615 7a39 89C7 movl %eax, %edi
+ 8616 7a3b E8C085FF call bswap_32
+ 8616 FF
+ 8617 7a40 4589E9 movl %r13d, %r9d
+ 8618 7a43 4589E0 movl %r12d, %r8d
+ 8619 7a46 89D9 movl %ebx, %ecx
+ 8620 7a48 89C2 movl %eax, %edx
+ 8621 7a4a 488D3500 leaq .LC4(%rip), %rsi
+ 8621 000000
+ 8622 7a51 488D3D00 leaq .LC1(%rip), %rdi
+ 8622 000000
+ 8623 7a58 B8000000 movl $0, %eax
+ 8623 00
+ 8624 7a5d E8000000 call KDbgMsg at PLT
+ 8624 00
+ 8625 .L223:
+ 8626 .LBE877:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 8627 .loc 2 1690 0
+ 8628 7a62 660F6F85 movdqa -9616(%rbp), %xmm0
+ 8628 70DAFFFF
+ 8629 .LBE843:
+ 8630 .LBE842:
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x36,10);
+ 8631 .loc 2 1753 0
+ 8632 7a6a F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 8632 20E6FFFF
+ 8633 7a72 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 8633 10E6FFFF
+ 8634 7a7a F30F7F45 movdqu %xmm0, -112(%rbp)
+ 8634 90
+ 8635 .LBB878:
+ 8636 .LBB879:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 8637 .loc 2 1565 0
+ 8638 7a7f F30F6F45 movdqu -112(%rbp), %xmm0
+ 8638 90
+ 8639 7a84 660F7F85 movdqa %xmm0, -9568(%rbp)
+ 8639 A0DAFFFF
+ 8640 7a8c 660F6F85 movdqa -9568(%rbp), %xmm0
+ 8640 A0DAFFFF
+ 8641 7a94 F30F7F45 movdqu %xmm0, -96(%rbp)
+ 8641 A0
+ 8642 .LBB880:
+ 8643 .LBB881:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 8644 .loc 2 1282 0
+ 8645 7a99 F30F6F45 movdqu -96(%rbp), %xmm0
+ 8645 A0
+ 8646 7a9e F30F7F85 movdqu %xmm0, -6688(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 283
+
+
+ 8646 E0E5FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 8647 .loc 2 1283 0
+ 8648 7aa6 8B85E8E5 movl -6680(%rbp), %eax
+ 8648 FFFF
+ 8649 7aac 8985ECE5 movl %eax, -6676(%rbp)
+ 8649 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 8650 .loc 2 1284 0
+ 8651 7ab2 8B85E4E5 movl -6684(%rbp), %eax
+ 8651 FFFF
+ 8652 7ab8 8985E8E5 movl %eax, -6680(%rbp)
+ 8652 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 8653 .loc 2 1285 0
+ 8654 7abe 8B85E0E5 movl -6688(%rbp), %eax
+ 8654 FFFF
+ 8655 7ac4 8985E4E5 movl %eax, -6684(%rbp)
+ 8655 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 8656 .loc 2 1286 0
+ 8657 7aca C785E0E5 movl $0, -6688(%rbp)
+ 8657 FFFF0000
+ 8657 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 8658 .loc 2 1287 0
+ 8659 7ad4 F30F6F85 movdqu -6688(%rbp), %xmm0
+ 8659 E0E5FFFF
+ 8660 .LBE881:
+ 8661 .LBE880:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8662 .loc 2 1567 0
+ 8663 7adc 660F7F85 movdqa %xmm0, -9568(%rbp)
+ 8663 A0DAFFFF
+ 8664 7ae4 660F6F85 movdqa -9568(%rbp), %xmm0
+ 8664 A0DAFFFF
+ 8665 7aec 660FEF45 pxor -112(%rbp), %xmm0
+ 8665 90
+ 8666 7af1 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 8666 90
+ 8667 7af6 660F6F85 movdqa -9568(%rbp), %xmm0
+ 8667 A0DAFFFF
+ 8668 7afe F30F7F45 movdqu %xmm0, -80(%rbp)
+ 8668 B0
+ 8669 .LBB882:
+ 8670 .LBB883:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 8671 .loc 2 1282 0
+ 8672 7b03 F30F6F45 movdqu -80(%rbp), %xmm0
+ 8672 B0
+ 8673 7b08 F30F7F85 movdqu %xmm0, -6672(%rbp)
+ 8673 F0E5FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 8674 .loc 2 1283 0
+ 8675 7b10 8B85F8E5 movl -6664(%rbp), %eax
+ 8675 FFFF
+ 8676 7b16 8985FCE5 movl %eax, -6660(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 284
+
+
+ 8676 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 8677 .loc 2 1284 0
+ 8678 7b1c 8B85F4E5 movl -6668(%rbp), %eax
+ 8678 FFFF
+ 8679 7b22 8985F8E5 movl %eax, -6664(%rbp)
+ 8679 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 8680 .loc 2 1285 0
+ 8681 7b28 8B85F0E5 movl -6672(%rbp), %eax
+ 8681 FFFF
+ 8682 7b2e 8985F4E5 movl %eax, -6668(%rbp)
+ 8682 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 8683 .loc 2 1286 0
+ 8684 7b34 C785F0E5 movl $0, -6672(%rbp)
+ 8684 FFFF0000
+ 8684 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 8685 .loc 2 1287 0
+ 8686 7b3e F30F6F85 movdqu -6672(%rbp), %xmm0
+ 8686 F0E5FFFF
+ 8687 .LBE883:
+ 8688 .LBE882:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8689 .loc 2 1568 0
+ 8690 7b46 660F7F85 movdqa %xmm0, -9568(%rbp)
+ 8690 A0DAFFFF
+ 8691 7b4e 660F6F85 movdqa -9568(%rbp), %xmm0
+ 8691 A0DAFFFF
+ 8692 7b56 660FEF45 pxor -112(%rbp), %xmm0
+ 8692 90
+ 8693 7b5b F30F7F45 movdqu %xmm0, -112(%rbp)
+ 8693 90
+ 8694 7b60 660F6F85 movdqa -9568(%rbp), %xmm0
+ 8694 A0DAFFFF
+ 8695 7b68 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 8695 C0
+ 8696 .LBB884:
+ 8697 .LBB885:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 8698 .loc 2 1282 0
+ 8699 7b6d F30F6F45 movdqu -64(%rbp), %xmm0
+ 8699 C0
+ 8700 7b72 F30F7F85 movdqu %xmm0, -6656(%rbp)
+ 8700 00E6FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 8701 .loc 2 1283 0
+ 8702 7b7a 8B8508E6 movl -6648(%rbp), %eax
+ 8702 FFFF
+ 8703 7b80 89850CE6 movl %eax, -6644(%rbp)
+ 8703 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 8704 .loc 2 1284 0
+ 8705 7b86 8B8504E6 movl -6652(%rbp), %eax
+ 8705 FFFF
+ 8706 7b8c 898508E6 movl %eax, -6648(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 285
+
+
+ 8706 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 8707 .loc 2 1285 0
+ 8708 7b92 8B8500E6 movl -6656(%rbp), %eax
+ 8708 FFFF
+ 8709 7b98 898504E6 movl %eax, -6652(%rbp)
+ 8709 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 8710 .loc 2 1286 0
+ 8711 7b9e C78500E6 movl $0, -6656(%rbp)
+ 8711 FFFF0000
+ 8711 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 8712 .loc 2 1287 0
+ 8713 7ba8 F30F6F85 movdqu -6656(%rbp), %xmm0
+ 8713 00E6FFFF
+ 8714 .LBE885:
+ 8715 .LBE884:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8716 .loc 2 1569 0
+ 8717 7bb0 660F7F85 movdqa %xmm0, -9568(%rbp)
+ 8717 A0DAFFFF
+ 8718 7bb8 660F6F85 movdqa -9568(%rbp), %xmm0
+ 8718 A0DAFFFF
+ 8719 7bc0 660FEF45 pxor -112(%rbp), %xmm0
+ 8719 90
+ 8720 7bc5 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 8720 90
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8721 .loc 2 1571 0
+ 8722 7bca F30F6F45 movdqu -112(%rbp), %xmm0
+ 8722 90
+ 8723 .LBE879:
+ 8724 .LBE878:
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x36,10);
+ 8725 .loc 2 1753 0
+ 8726 7bcf F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 8726 10E6FFFF
+ 8727 7bd7 F30F6F85 movdqu -6624(%rbp), %xmm0
+ 8727 20E6FFFF
+ 8728 7bdf F30F6F8D movdqu -6640(%rbp), %xmm1
+ 8728 10E6FFFF
+ 8729 7be7 660FEFC1 pxor %xmm1, %xmm0
+ 8730 7beb F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 8730 10E6FFFF
+ 8731 7bf3 488B85B8 movq -9544(%rbp), %rax
+ 8731 DAFFFF
+ 8732 7bfa 4805A000 addq $160, %rax
+ 8732 0000
+ 8733 7c00 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 8733 10E6FFFF
+ 8734 7c08 F30F7F00 movdqu %xmm0, (%rax)
+1754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8735 .loc 2 1754 0
+ 8736 7c0c 4881C458 addq $10328, %rsp
+ 8736 280000
+ 8737 7c13 5B popq %rbx
+
GAS LISTING /tmp/ccMa7HLZ.s page 286
+
+
+ 8738 7c14 415C popq %r12
+ 8739 7c16 415D popq %r13
+ 8740 7c18 415E popq %r14
+ 8741 7c1a 415F popq %r15
+ 8742 7c1c C9 leave
+ 8743 7c1d C3 ret
+ 8744 .cfi_endproc
+ 8745 .LFE563:
+ 8746 .size KAESBlockCipherVecKeyExpansion128, .-KAESBlockCipherVecKeyExpansion128
+ 8747 .type KAESBlockCipherVecKeyExpansion192, @function
+ 8748 KAESBlockCipherVecKeyExpansion192:
+ 8749 .LFB564:
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8750 .loc 2 1768 0
+ 8751 .cfi_startproc
+ 8752 7c1e 55 pushq %rbp
+ 8753 .LCFI4:
+ 8754 .cfi_def_cfa_offset 16
+ 8755 7c1f 4889E5 movq %rsp, %rbp
+ 8756 .cfi_offset 6, -16
+ 8757 .LCFI5:
+ 8758 .cfi_def_cfa_register 6
+ 8759 7c22 4157 pushq %r15
+ 8760 7c24 4156 pushq %r14
+ 8761 7c26 4155 pushq %r13
+ 8762 7c28 4154 pushq %r12
+ 8763 7c2a 53 pushq %rbx
+ 8764 7c2b 4881ECB8 subq $6840, %rsp
+ 8764 1A0000
+ 8765 7c32 4889BD88 movq %rdi, -6264(%rbp)
+ 8765 E7FFFF
+ 8766 7c39 4889B580 movq %rsi, -6272(%rbp)
+ 8766 E7FFFF
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8767 .loc 2 1768 0
+ 8768 7c40 488B8580 movq -6272(%rbp), %rax
+ 8768 E7FFFF
+ 8769 7c47 48898540 movq %rax, -4032(%rbp)
+ 8769 F0FFFF
+ 8770 .LBB1210:
+ 8771 .LBB1211:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (&u.bytes, ain, sizeof (u));
+ 8772 .loc 2 134 0
+ 8773 7c4e 488B8D40 movq -4032(%rbp), %rcx
+ 8773 F0FFFF
+ 8774 7c55 488D8590 leaq -6256(%rbp), %rax
+ 8774 E7FFFF
+ 8775 7c5c BA100000 movl $16, %edx
+ 8775 00
+ 8776 7c61 4889CE movq %rcx, %rsi
+ 8777 7c64 4889C7 movq %rax, %rdi
+ 8778 .cfi_offset 3, -56
+ 8779 .cfi_offset 12, -48
+ 8780 .cfi_offset 13, -40
+ 8781 .cfi_offset 14, -32
+ 8782 .cfi_offset 15, -24
+ 8783 7c67 E8000000 call memmove at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 287
+
+
+ 8783 00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 8784 .loc 2 135 0
+ 8785 7c6c F30F6F85 movdqu -6256(%rbp), %xmm0
+ 8785 90E7FFFF
+ 8786 .LBE1211:
+ 8787 .LBE1210:
+1779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(StateIn) (key); /* k0 : k1 : k2 : k3 */
+ 8788 .loc 2 1779 0
+ 8789 7c74 660F7F85 movdqa %xmm0, -6800(%rbp)
+ 8789 70E5FFFF
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateIn) (key+8); /* k2 : k3 : k4 : k5 */
+ 8790 .loc 2 1780 0
+ 8791 7c7c 488B8580 movq -6272(%rbp), %rax
+ 8791 E7FFFF
+ 8792 7c83 4883C008 addq $8, %rax
+ 8793 7c87 48898548 movq %rax, -4024(%rbp)
+ 8793 F0FFFF
+ 8794 .LBB1212:
+ 8795 .LBB1213:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (&u.bytes, ain, sizeof (u));
+ 8796 .loc 2 134 0
+ 8797 7c8e 488B8D48 movq -4024(%rbp), %rcx
+ 8797 F0FFFF
+ 8798 7c95 488D85A0 leaq -6240(%rbp), %rax
+ 8798 E7FFFF
+ 8799 7c9c BA100000 movl $16, %edx
+ 8799 00
+ 8800 7ca1 4889CE movq %rcx, %rsi
+ 8801 7ca4 4889C7 movq %rax, %rdi
+ 8802 7ca7 E8000000 call memmove at PLT
+ 8802 00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 8803 .loc 2 135 0
+ 8804 7cac F30F6F85 movdqu -6240(%rbp), %xmm0
+ 8804 A0E7FFFF
+ 8805 .LBE1213:
+ 8806 .LBE1212:
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateIn) (key+8); /* k2 : k3 : k4 : k5 */
+ 8807 .loc 2 1780 0
+ 8808 7cb4 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 8808 80E5FFFF
+ 8809 7cbc 660F6F85 movdqa -6784(%rbp), %xmm0
+ 8809 80E5FFFF
+ 8810 7cc4 F30F7F85 movdqu %xmm0, -4016(%rbp)
+ 8810 50F0FFFF
+ 8811 .LBB1214:
+ 8812 .LBB1215:
+1305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 8813 .loc 2 1305 0
+ 8814 7ccc F30F6F85 movdqu -4016(%rbp), %xmm0
+ 8814 50F0FFFF
+ 8815 7cd4 F30F7F85 movdqu %xmm0, -6224(%rbp)
+ 8815 B0E7FFFF
+1306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[2];
+ 8816 .loc 2 1306 0
+ 8817 7cdc 8B85B8E7 movl -6216(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 288
+
+
+ 8817 FFFF
+ 8818 7ce2 8985B0E7 movl %eax, -6224(%rbp)
+ 8818 FFFF
+1307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 8819 .loc 2 1307 0
+ 8820 7ce8 8B85BCE7 movl -6212(%rbp), %eax
+ 8820 FFFF
+ 8821 7cee 8985B4E7 movl %eax, -6220(%rbp)
+ 8821 FFFF
+1308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = 0;
+ 8822 .loc 2 1308 0
+ 8823 7cf4 C785B8E7 movl $0, -6216(%rbp)
+ 8823 FFFF0000
+ 8823 0000
+1309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = 0;
+ 8824 .loc 2 1309 0
+ 8825 7cfe C785BCE7 movl $0, -6212(%rbp)
+ 8825 FFFF0000
+ 8825 0000
+1310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 8826 .loc 2 1310 0
+ 8827 7d08 F30F6F85 movdqu -6224(%rbp), %xmm0
+ 8827 B0E7FFFF
+ 8828 .LBE1215:
+ 8829 .LBE1214:
+1781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateShiftRight64) (v1); /* k4 : k5 : 0 : 0 */
+ 8830 .loc 2 1781 0
+ 8831 7d10 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 8831 80E5FFFF
+1783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = v0; /* K0:K1:K2:K3 */
+ 8832 .loc 2 1783 0
+ 8833 7d18 488B8588 movq -6264(%rbp), %rax
+ 8833 E7FFFF
+ 8834 7d1f 660F6F85 movdqa -6800(%rbp), %xmm0
+ 8834 70E5FFFF
+ 8835 7d27 660F7F00 movdqa %xmm0, (%rax)
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 8836 .loc 2 1788 0
+ 8837 7d2b 660F6F85 movdqa -6784(%rbp), %xmm0
+ 8837 80E5FFFF
+ 8838 7d33 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 8838 C0E5FFFF
+ 8839 7d3b 660F6F85 movdqa -6720(%rbp), %xmm0
+ 8839 C0E5FFFF
+ 8840 7d43 F30F7F85 movdqu %xmm0, -3984(%rbp)
+ 8840 70F0FFFF
+ 8841 .LBB1216:
+ 8842 .LBB1217:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+ 8843 .loc 2 1629 0
+ 8844 7d4b B8010000 movl $1, %eax
+ 8844 00
+ 8845 7d50 0FB6C0 movzbl %al, %eax
+ 8846 7d53 898590F0 movl %eax, -3952(%rbp)
+ 8846 FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 8847 .loc 2 1630 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 289
+
+
+ 8848 7d59 F30F6F85 movdqu -3984(%rbp), %xmm0
+ 8848 70F0FFFF
+ 8849 7d61 F30F7F85 movdqu %xmm0, -6192(%rbp)
+ 8849 D0E7FFFF
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 8850 .loc 2 1631 0
+ 8851 7d69 8B85D4E7 movl -6188(%rbp), %eax
+ 8851 FFFF
+ 8852 7d6f 898594F0 movl %eax, -3948(%rbp)
+ 8852 FFFF
+ 8853 .LBB1218:
+ 8854 .LBB1219:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 8855 .loc 2 740 0
+ 8856 7d75 8B8594F0 movl -3948(%rbp), %eax
+ 8856 FFFF
+ 8857 7d7b 8985C0E7 movl %eax, -6208(%rbp)
+ 8857 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 8858 .loc 2 741 0
+ 8859 7d81 C78598F0 movl $0, -3944(%rbp)
+ 8859 FFFF0000
+ 8859 0000
+ 8860 7d8b EB36 jmp .L226
+ 8861 .L227:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 8862 .loc 2 742 0
+ 8863 7d8d 8B8D98F0 movl -3944(%rbp), %ecx
+ 8863 FFFF
+ 8864 7d93 8B8598F0 movl -3944(%rbp), %eax
+ 8864 FFFF
+ 8865 7d99 89C0 mov %eax, %eax
+ 8866 7d9b 0FB68405 movzbl -6208(%rbp,%rax), %eax
+ 8866 C0E7FFFF
+ 8867 7da3 0FB6C0 movzbl %al, %eax
+ 8868 7da6 89C2 mov %eax, %edx
+ 8869 7da8 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 8869 000000
+ 8870 7daf 0FB61402 movzbl (%rdx,%rax), %edx
+ 8871 7db3 89C8 mov %ecx, %eax
+ 8872 7db5 889405C0 movb %dl, -6208(%rbp,%rax)
+ 8872 E7FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 8873 .loc 2 741 0
+ 8874 7dbc 838598F0 addl $1, -3944(%rbp)
+ 8874 FFFF01
+ 8875 .L226:
+ 8876 7dc3 83BD98F0 cmpl $3, -3944(%rbp)
+ 8876 FFFF03
+ 8877 7dca 76C1 jbe .L227
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 8878 .loc 2 743 0
+ 8879 7dcc 8B85C0E7 movl -6208(%rbp), %eax
+ 8879 FFFF
+ 8880 .LBE1219:
+ 8881 .LBE1218:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+
GAS LISTING /tmp/ccMa7HLZ.s page 290
+
+
+ 8882 .loc 2 1631 0
+ 8883 7dd2 89858CF0 movl %eax, -3956(%rbp)
+ 8883 FFFF
+ 8884 7dd8 8B858CF0 movl -3956(%rbp), %eax
+ 8884 FFFF
+ 8885 7dde 89859CF0 movl %eax, -3940(%rbp)
+ 8885 FFFF
+ 8886 .LBB1220:
+ 8887 .LBB1221:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+ 8888 .loc 2 1196 0
+ 8889 7de4 8B859CF0 movl -3940(%rbp), %eax
+ 8889 FFFF
+ 8890 7dea C1C808 rorl $8, %eax
+ 8891 .LBE1221:
+ 8892 .LBE1220:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+ 8893 .loc 2 1632 0
+ 8894 7ded 89858CF0 movl %eax, -3956(%rbp)
+ 8894 FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+ 8895 .loc 2 1633 0
+ 8896 7df3 8B8590F0 movl -3952(%rbp), %eax
+ 8896 FFFF
+ 8897 7df9 31858CF0 xorl %eax, -3956(%rbp)
+ 8897 FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 8898 .loc 2 1635 0
+ 8899 7dff 8B858CF0 movl -3956(%rbp), %eax
+ 8899 FFFF
+ 8900 7e05 8985DCE7 movl %eax, -6180(%rbp)
+ 8900 FFFF
+ 8901 7e0b 8B85DCE7 movl -6180(%rbp), %eax
+ 8901 FFFF
+ 8902 7e11 8985D8E7 movl %eax, -6184(%rbp)
+ 8902 FFFF
+ 8903 7e17 8B85D8E7 movl -6184(%rbp), %eax
+ 8903 FFFF
+ 8904 7e1d 8985D4E7 movl %eax, -6188(%rbp)
+ 8904 FFFF
+ 8905 7e23 8B85D4E7 movl -6188(%rbp), %eax
+ 8905 FFFF
+ 8906 7e29 8985D0E7 movl %eax, -6192(%rbp)
+ 8906 FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 8907 .loc 2 1636 0
+ 8908 7e2f F30F6F85 movdqu -6192(%rbp), %xmm0
+ 8908 D0E7FFFF
+ 8909 .LBE1217:
+ 8910 .LBE1216:
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 8911 .loc 2 1788 0
+ 8912 7e37 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 8912 C0E5FFFF
+ 8913 7e3f 660F6F85 movdqa -6800(%rbp), %xmm0
+ 8913 70E5FFFF
+ 8914 7e47 F30F7F85 movdqu %xmm0, -3936(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 291
+
+
+ 8914 A0F0FFFF
+ 8915 .LBB1222:
+ 8916 .LBB1223:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 8917 .loc 2 1565 0
+ 8918 7e4f F30F6F85 movdqu -3936(%rbp), %xmm0
+ 8918 A0F0FFFF
+ 8919 7e57 660F7F85 movdqa %xmm0, -6704(%rbp)
+ 8919 D0E5FFFF
+ 8920 7e5f 660F6F85 movdqa -6704(%rbp), %xmm0
+ 8920 D0E5FFFF
+ 8921 7e67 F30F7F85 movdqu %xmm0, -3920(%rbp)
+ 8921 B0F0FFFF
+ 8922 .LBB1224:
+ 8923 .LBB1225:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 8924 .loc 2 1282 0
+ 8925 7e6f F30F6F85 movdqu -3920(%rbp), %xmm0
+ 8925 B0F0FFFF
+ 8926 7e77 F30F7F85 movdqu %xmm0, -6176(%rbp)
+ 8926 E0E7FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 8927 .loc 2 1283 0
+ 8928 7e7f 8B85E8E7 movl -6168(%rbp), %eax
+ 8928 FFFF
+ 8929 7e85 8985ECE7 movl %eax, -6164(%rbp)
+ 8929 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 8930 .loc 2 1284 0
+ 8931 7e8b 8B85E4E7 movl -6172(%rbp), %eax
+ 8931 FFFF
+ 8932 7e91 8985E8E7 movl %eax, -6168(%rbp)
+ 8932 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 8933 .loc 2 1285 0
+ 8934 7e97 8B85E0E7 movl -6176(%rbp), %eax
+ 8934 FFFF
+ 8935 7e9d 8985E4E7 movl %eax, -6172(%rbp)
+ 8935 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 8936 .loc 2 1286 0
+ 8937 7ea3 C785E0E7 movl $0, -6176(%rbp)
+ 8937 FFFF0000
+ 8937 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 8938 .loc 2 1287 0
+ 8939 7ead F30F6F85 movdqu -6176(%rbp), %xmm0
+ 8939 E0E7FFFF
+ 8940 .LBE1225:
+ 8941 .LBE1224:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8942 .loc 2 1567 0
+ 8943 7eb5 660F7F85 movdqa %xmm0, -6704(%rbp)
+ 8943 D0E5FFFF
+ 8944 7ebd 660F6F85 movdqa -6704(%rbp), %xmm0
+ 8944 D0E5FFFF
+ 8945 7ec5 660FEF85 pxor -3936(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 292
+
+
+ 8945 A0F0FFFF
+ 8946 7ecd F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 8946 A0F0FFFF
+ 8947 7ed5 660F6F85 movdqa -6704(%rbp), %xmm0
+ 8947 D0E5FFFF
+ 8948 7edd F30F7F85 movdqu %xmm0, -3904(%rbp)
+ 8948 C0F0FFFF
+ 8949 .LBB1226:
+ 8950 .LBB1227:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 8951 .loc 2 1282 0
+ 8952 7ee5 F30F6F85 movdqu -3904(%rbp), %xmm0
+ 8952 C0F0FFFF
+ 8953 7eed F30F7F85 movdqu %xmm0, -6160(%rbp)
+ 8953 F0E7FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 8954 .loc 2 1283 0
+ 8955 7ef5 8B85F8E7 movl -6152(%rbp), %eax
+ 8955 FFFF
+ 8956 7efb 8985FCE7 movl %eax, -6148(%rbp)
+ 8956 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 8957 .loc 2 1284 0
+ 8958 7f01 8B85F4E7 movl -6156(%rbp), %eax
+ 8958 FFFF
+ 8959 7f07 8985F8E7 movl %eax, -6152(%rbp)
+ 8959 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 8960 .loc 2 1285 0
+ 8961 7f0d 8B85F0E7 movl -6160(%rbp), %eax
+ 8961 FFFF
+ 8962 7f13 8985F4E7 movl %eax, -6156(%rbp)
+ 8962 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 8963 .loc 2 1286 0
+ 8964 7f19 C785F0E7 movl $0, -6160(%rbp)
+ 8964 FFFF0000
+ 8964 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 8965 .loc 2 1287 0
+ 8966 7f23 F30F6F85 movdqu -6160(%rbp), %xmm0
+ 8966 F0E7FFFF
+ 8967 .LBE1227:
+ 8968 .LBE1226:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8969 .loc 2 1568 0
+ 8970 7f2b 660F7F85 movdqa %xmm0, -6704(%rbp)
+ 8970 D0E5FFFF
+ 8971 7f33 660F6F85 movdqa -6704(%rbp), %xmm0
+ 8971 D0E5FFFF
+ 8972 7f3b 660FEF85 pxor -3936(%rbp), %xmm0
+ 8972 A0F0FFFF
+ 8973 7f43 F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 8973 A0F0FFFF
+ 8974 7f4b 660F6F85 movdqa -6704(%rbp), %xmm0
+ 8974 D0E5FFFF
+ 8975 7f53 F30F7F85 movdqu %xmm0, -3888(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 293
+
+
+ 8975 D0F0FFFF
+ 8976 .LBB1228:
+ 8977 .LBB1229:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 8978 .loc 2 1282 0
+ 8979 7f5b F30F6F85 movdqu -3888(%rbp), %xmm0
+ 8979 D0F0FFFF
+ 8980 7f63 F30F7F85 movdqu %xmm0, -6144(%rbp)
+ 8980 00E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 8981 .loc 2 1283 0
+ 8982 7f6b 8B8508E8 movl -6136(%rbp), %eax
+ 8982 FFFF
+ 8983 7f71 89850CE8 movl %eax, -6132(%rbp)
+ 8983 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 8984 .loc 2 1284 0
+ 8985 7f77 8B8504E8 movl -6140(%rbp), %eax
+ 8985 FFFF
+ 8986 7f7d 898508E8 movl %eax, -6136(%rbp)
+ 8986 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 8987 .loc 2 1285 0
+ 8988 7f83 8B8500E8 movl -6144(%rbp), %eax
+ 8988 FFFF
+ 8989 7f89 898504E8 movl %eax, -6140(%rbp)
+ 8989 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 8990 .loc 2 1286 0
+ 8991 7f8f C78500E8 movl $0, -6144(%rbp)
+ 8991 FFFF0000
+ 8991 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 8992 .loc 2 1287 0
+ 8993 7f99 F30F6F85 movdqu -6144(%rbp), %xmm0
+ 8993 00E8FFFF
+ 8994 .LBE1229:
+ 8995 .LBE1228:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8996 .loc 2 1569 0
+ 8997 7fa1 660F7F85 movdqa %xmm0, -6704(%rbp)
+ 8997 D0E5FFFF
+ 8998 7fa9 660F6F85 movdqa -6704(%rbp), %xmm0
+ 8998 D0E5FFFF
+ 8999 7fb1 660FEF85 pxor -3936(%rbp), %xmm0
+ 8999 A0F0FFFF
+ 9000 7fb9 F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 9000 A0F0FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9001 .loc 2 1571 0
+ 9002 7fc1 F30F6F85 movdqu -3936(%rbp), %xmm0
+ 9002 A0F0FFFF
+ 9003 .LBE1223:
+ 9004 .LBE1222:
+1790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k0 : k0^k1 :k0^k1^k2:k0^k1^k2^k3 */
+ 9005 .loc 2 1790 0
+ 9006 7fc9 660F7F85 movdqa %xmm0, -6752(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 294
+
+
+ 9006 A0E5FFFF
+1791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k6 : k7 : k8 : k9 */
+ 9007 .loc 2 1791 0
+ 9008 7fd1 660F6F85 movdqa -6752(%rbp), %xmm0
+ 9008 A0E5FFFF
+ 9009 7fd9 660FEF85 pxor -6720(%rbp), %xmm0
+ 9009 C0E5FFFF
+ 9010 7fe1 660F7F85 movdqa %xmm0, -6752(%rbp)
+ 9010 A0E5FFFF
+ 9011 7fe9 660F6F85 movdqa -6784(%rbp), %xmm0
+ 9011 80E5FFFF
+ 9012 7ff1 F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 9012 E0F0FFFF
+ 9013 .LBB1230:
+ 9014 .LBB1231:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 9015 .loc 2 1565 0
+ 9016 7ff9 F30F6F85 movdqu -3872(%rbp), %xmm0
+ 9016 E0F0FFFF
+ 9017 8001 660F7F85 movdqa %xmm0, -6688(%rbp)
+ 9017 E0E5FFFF
+ 9018 8009 660F6F85 movdqa -6688(%rbp), %xmm0
+ 9018 E0E5FFFF
+ 9019 8011 F30F7F85 movdqu %xmm0, -3856(%rbp)
+ 9019 F0F0FFFF
+ 9020 .LBB1232:
+ 9021 .LBB1233:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9022 .loc 2 1282 0
+ 9023 8019 F30F6F85 movdqu -3856(%rbp), %xmm0
+ 9023 F0F0FFFF
+ 9024 8021 F30F7F85 movdqu %xmm0, -6128(%rbp)
+ 9024 10E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 9025 .loc 2 1283 0
+ 9026 8029 8B8518E8 movl -6120(%rbp), %eax
+ 9026 FFFF
+ 9027 802f 89851CE8 movl %eax, -6116(%rbp)
+ 9027 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 9028 .loc 2 1284 0
+ 9029 8035 8B8514E8 movl -6124(%rbp), %eax
+ 9029 FFFF
+ 9030 803b 898518E8 movl %eax, -6120(%rbp)
+ 9030 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 9031 .loc 2 1285 0
+ 9032 8041 8B8510E8 movl -6128(%rbp), %eax
+ 9032 FFFF
+ 9033 8047 898514E8 movl %eax, -6124(%rbp)
+ 9033 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 9034 .loc 2 1286 0
+ 9035 804d C78510E8 movl $0, -6128(%rbp)
+ 9035 FFFF0000
+ 9035 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 295
+
+
+ 9036 .loc 2 1287 0
+ 9037 8057 F30F6F85 movdqu -6128(%rbp), %xmm0
+ 9037 10E8FFFF
+ 9038 .LBE1233:
+ 9039 .LBE1232:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9040 .loc 2 1567 0
+ 9041 805f 660F7F85 movdqa %xmm0, -6688(%rbp)
+ 9041 E0E5FFFF
+ 9042 8067 660F6F85 movdqa -6688(%rbp), %xmm0
+ 9042 E0E5FFFF
+ 9043 806f 660FEF85 pxor -3872(%rbp), %xmm0
+ 9043 E0F0FFFF
+ 9044 8077 F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 9044 E0F0FFFF
+ 9045 807f 660F6F85 movdqa -6688(%rbp), %xmm0
+ 9045 E0E5FFFF
+ 9046 8087 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 9046 00F1FFFF
+ 9047 .LBB1234:
+ 9048 .LBB1235:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9049 .loc 2 1282 0
+ 9050 808f F30F6F85 movdqu -3840(%rbp), %xmm0
+ 9050 00F1FFFF
+ 9051 8097 F30F7F85 movdqu %xmm0, -6112(%rbp)
+ 9051 20E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 9052 .loc 2 1283 0
+ 9053 809f 8B8528E8 movl -6104(%rbp), %eax
+ 9053 FFFF
+ 9054 80a5 89852CE8 movl %eax, -6100(%rbp)
+ 9054 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 9055 .loc 2 1284 0
+ 9056 80ab 8B8524E8 movl -6108(%rbp), %eax
+ 9056 FFFF
+ 9057 80b1 898528E8 movl %eax, -6104(%rbp)
+ 9057 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 9058 .loc 2 1285 0
+ 9059 80b7 8B8520E8 movl -6112(%rbp), %eax
+ 9059 FFFF
+ 9060 80bd 898524E8 movl %eax, -6108(%rbp)
+ 9060 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 9061 .loc 2 1286 0
+ 9062 80c3 C78520E8 movl $0, -6112(%rbp)
+ 9062 FFFF0000
+ 9062 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 9063 .loc 2 1287 0
+ 9064 80cd F30F6F85 movdqu -6112(%rbp), %xmm0
+ 9064 20E8FFFF
+ 9065 .LBE1235:
+ 9066 .LBE1234:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccMa7HLZ.s page 296
+
+
+ 9067 .loc 2 1568 0
+ 9068 80d5 660F7F85 movdqa %xmm0, -6688(%rbp)
+ 9068 E0E5FFFF
+ 9069 80dd 660F6F85 movdqa -6688(%rbp), %xmm0
+ 9069 E0E5FFFF
+ 9070 80e5 660FEF85 pxor -3872(%rbp), %xmm0
+ 9070 E0F0FFFF
+ 9071 80ed F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 9071 E0F0FFFF
+ 9072 80f5 660F6F85 movdqa -6688(%rbp), %xmm0
+ 9072 E0E5FFFF
+ 9073 80fd F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 9073 10F1FFFF
+ 9074 .LBB1236:
+ 9075 .LBB1237:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9076 .loc 2 1282 0
+ 9077 8105 F30F6F85 movdqu -3824(%rbp), %xmm0
+ 9077 10F1FFFF
+ 9078 810d F30F7F85 movdqu %xmm0, -6096(%rbp)
+ 9078 30E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 9079 .loc 2 1283 0
+ 9080 8115 8B8538E8 movl -6088(%rbp), %eax
+ 9080 FFFF
+ 9081 811b 89853CE8 movl %eax, -6084(%rbp)
+ 9081 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 9082 .loc 2 1284 0
+ 9083 8121 8B8534E8 movl -6092(%rbp), %eax
+ 9083 FFFF
+ 9084 8127 898538E8 movl %eax, -6088(%rbp)
+ 9084 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 9085 .loc 2 1285 0
+ 9086 812d 8B8530E8 movl -6096(%rbp), %eax
+ 9086 FFFF
+ 9087 8133 898534E8 movl %eax, -6092(%rbp)
+ 9087 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 9088 .loc 2 1286 0
+ 9089 8139 C78530E8 movl $0, -6096(%rbp)
+ 9089 FFFF0000
+ 9089 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 9090 .loc 2 1287 0
+ 9091 8143 F30F6F85 movdqu -6096(%rbp), %xmm0
+ 9091 30E8FFFF
+ 9092 .LBE1237:
+ 9093 .LBE1236:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9094 .loc 2 1569 0
+ 9095 814b 660F7F85 movdqa %xmm0, -6688(%rbp)
+ 9095 E0E5FFFF
+ 9096 8153 660F6F85 movdqa -6688(%rbp), %xmm0
+ 9096 E0E5FFFF
+ 9097 815b 660FEF85 pxor -3872(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 297
+
+
+ 9097 E0F0FFFF
+ 9098 8163 F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 9098 E0F0FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9099 .loc 2 1571 0
+ 9100 816b F30F6F85 movdqu -3872(%rbp), %xmm0
+ 9100 E0F0FFFF
+ 9101 .LBE1231:
+ 9102 .LBE1230:
+1792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k4 : k4^k5 : k4^k5 : k4^k5 */
+ 9103 .loc 2 1792 0
+ 9104 8173 660F7F85 movdqa %xmm0, -6736(%rbp)
+ 9104 B0E5FFFF
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k9 : k9 : k9 : k9 */
+ 9105 .loc 2 1793 0
+ 9106 817b 660F6F85 movdqa -6752(%rbp), %xmm0
+ 9106 A0E5FFFF
+ 9107 8183 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 9107 C0E5FFFF
+ 9108 818b 660F6F85 movdqa -6720(%rbp), %xmm0
+ 9108 C0E5FFFF
+ 9109 8193 F30F7F85 movdqu %xmm0, -3808(%rbp)
+ 9109 20F1FFFF
+ 9110 .LBB1238:
+ 9111 .LBB1239:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9112 .loc 2 1357 0
+ 9113 819b F30F6F85 movdqu -3808(%rbp), %xmm0
+ 9113 20F1FFFF
+ 9114 81a3 F30F7F85 movdqu %xmm0, -6080(%rbp)
+ 9114 40E8FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 9115 .loc 2 1358 0
+ 9116 81ab 8B854CE8 movl -6068(%rbp), %eax
+ 9116 FFFF
+ 9117 81b1 898548E8 movl %eax, -6072(%rbp)
+ 9117 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 9118 .loc 2 1359 0
+ 9119 81b7 8B854CE8 movl -6068(%rbp), %eax
+ 9119 FFFF
+ 9120 81bd 898544E8 movl %eax, -6076(%rbp)
+ 9120 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 9121 .loc 2 1360 0
+ 9122 81c3 8B854CE8 movl -6068(%rbp), %eax
+ 9122 FFFF
+ 9123 81c9 898540E8 movl %eax, -6080(%rbp)
+ 9123 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 9124 .loc 2 1361 0
+ 9125 81cf F30F6F85 movdqu -6080(%rbp), %xmm0
+ 9125 40E8FFFF
+ 9126 .LBE1239:
+ 9127 .LBE1238:
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k9 : k9 : k9 : k9 */
+ 9128 .loc 2 1793 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 298
+
+
+ 9129 81d7 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 9129 C0E5FFFF
+1794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k10 : k11 : k10 : k11 */
+ 9130 .loc 2 1794 0
+ 9131 81df 660F6F85 movdqa -6736(%rbp), %xmm0
+ 9131 B0E5FFFF
+ 9132 81e7 660FEF85 pxor -6720(%rbp), %xmm0
+ 9132 C0E5FFFF
+ 9133 81ef 660F7F85 movdqa %xmm0, -6736(%rbp)
+ 9133 B0E5FFFF
+ 9134 81f7 660F6F85 movdqa -6784(%rbp), %xmm0
+ 9134 80E5FFFF
+ 9135 81ff F30F7F85 movdqu %xmm0, -3776(%rbp)
+ 9135 40F1FFFF
+ 9136 8207 660F6F85 movdqa -6752(%rbp), %xmm0
+ 9136 A0E5FFFF
+ 9137 820f F30F7F85 movdqu %xmm0, -3792(%rbp)
+ 9137 30F1FFFF
+ 9138 .LBB1240:
+ 9139 .LBB1241:
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+ 9140 .loc 2 1471 0
+ 9141 8217 F30F6F85 movdqu -3776(%rbp), %xmm0
+ 9141 40F1FFFF
+ 9142 821f F30F7F85 movdqu %xmm0, -6048(%rbp)
+ 9142 60E8FFFF
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+ 9143 .loc 2 1472 0
+ 9144 8227 F30F6F85 movdqu -3792(%rbp), %xmm0
+ 9144 30F1FFFF
+ 9145 822f F30F7F85 movdqu %xmm0, -6064(%rbp)
+ 9145 50E8FFFF
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+ 9146 .loc 2 1474 0
+ 9147 8237 8B8550E8 movl -6064(%rbp), %eax
+ 9147 FFFF
+ 9148 823d 898568E8 movl %eax, -6040(%rbp)
+ 9148 FFFF
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+ 9149 .loc 2 1475 0
+ 9150 8243 8B8554E8 movl -6060(%rbp), %eax
+ 9150 FFFF
+ 9151 8249 89856CE8 movl %eax, -6036(%rbp)
+ 9151 FFFF
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+ 9152 .loc 2 1477 0
+ 9153 824f F30F6F85 movdqu -6048(%rbp), %xmm0
+ 9153 60E8FFFF
+ 9154 .LBE1241:
+ 9155 .LBE1240:
+1795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k4 : k5 : k6 : k7 */
+ 9156 .loc 2 1795 0
+ 9157 8257 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 9157 80E5FFFF
+1796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[1] = v1; /* K4:K5:K6:K7 */
+ 9158 .loc 2 1796 0
+ 9159 825f 488B8588 movq -6264(%rbp), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 299
+
+
+ 9159 E7FFFF
+ 9160 8266 4883C010 addq $16, %rax
+ 9161 826a 660F6F85 movdqa -6784(%rbp), %xmm0
+ 9161 80E5FFFF
+ 9162 8272 660F7F00 movdqa %xmm0, (%rax)
+ 9163 8276 660F6F85 movdqa -6752(%rbp), %xmm0
+ 9163 A0E5FFFF
+ 9164 827e F30F7F85 movdqu %xmm0, -3744(%rbp)
+ 9164 60F1FFFF
+ 9165 8286 660F6F85 movdqa -6736(%rbp), %xmm0
+ 9165 B0E5FFFF
+ 9166 828e F30F7F85 movdqu %xmm0, -3760(%rbp)
+ 9166 50F1FFFF
+ 9167 .LBB1242:
+ 9168 .LBB1243:
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+ 9169 .loc 2 1503 0
+ 9170 8296 F30F6F85 movdqu -3744(%rbp), %xmm0
+ 9170 60F1FFFF
+ 9171 829e F30F7F85 movdqu %xmm0, -6016(%rbp)
+ 9171 80E8FFFF
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+ 9172 .loc 2 1504 0
+ 9173 82a6 F30F6F85 movdqu -3760(%rbp), %xmm0
+ 9173 50F1FFFF
+ 9174 82ae F30F7F85 movdqu %xmm0, -6032(%rbp)
+ 9174 70E8FFFF
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[0] = ww.columns[2];
+ 9175 .loc 2 1506 0
+ 9176 82b6 8B8588E8 movl -6008(%rbp), %eax
+ 9176 FFFF
+ 9177 82bc 898580E8 movl %eax, -6016(%rbp)
+ 9177 FFFF
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[1] = ww.columns[3];
+ 9178 .loc 2 1507 0
+ 9179 82c2 8B858CE8 movl -6004(%rbp), %eax
+ 9179 FFFF
+ 9180 82c8 898584E8 movl %eax, -6012(%rbp)
+ 9180 FFFF
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+ 9181 .loc 2 1508 0
+ 9182 82ce 8B8570E8 movl -6032(%rbp), %eax
+ 9182 FFFF
+ 9183 82d4 898588E8 movl %eax, -6008(%rbp)
+ 9183 FFFF
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+ 9184 .loc 2 1509 0
+ 9185 82da 8B8574E8 movl -6028(%rbp), %eax
+ 9185 FFFF
+ 9186 82e0 89858CE8 movl %eax, -6004(%rbp)
+ 9186 FFFF
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+ 9187 .loc 2 1511 0
+ 9188 82e6 F30F6F85 movdqu -6016(%rbp), %xmm0
+ 9188 80E8FFFF
+ 9189 .LBE1243:
+ 9190 .LBE1242:
+
GAS LISTING /tmp/ccMa7HLZ.s page 300
+
+
+1798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k8 : k9 : k10 : k11 */
+ 9191 .loc 2 1798 0
+ 9192 82ee 660F7F85 movdqa %xmm0, -6768(%rbp)
+ 9192 90E5FFFF
+1799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[2] = v2; /* K8:K9:K10:K11 */
+ 9193 .loc 2 1799 0
+ 9194 82f6 488B8588 movq -6264(%rbp), %rax
+ 9194 E7FFFF
+ 9195 82fd 4883C020 addq $32, %rax
+ 9196 8301 660F6F85 movdqa -6768(%rbp), %xmm0
+ 9196 90E5FFFF
+ 9197 8309 660F7F00 movdqa %xmm0, (%rax)
+ 9198 830d 660F6F85 movdqa -6752(%rbp), %xmm0
+ 9198 A0E5FFFF
+ 9199 8315 F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 9199 70F1FFFF
+ 9200 .LBB1244:
+ 9201 .LBB1245:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 9202 .loc 2 1565 0
+ 9203 831d F30F6F85 movdqu -3728(%rbp), %xmm0
+ 9203 70F1FFFF
+ 9204 8325 660F7F85 movdqa %xmm0, -6672(%rbp)
+ 9204 F0E5FFFF
+ 9205 832d 660F6F85 movdqa -6672(%rbp), %xmm0
+ 9205 F0E5FFFF
+ 9206 8335 F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 9206 80F1FFFF
+ 9207 .LBB1246:
+ 9208 .LBB1247:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9209 .loc 2 1282 0
+ 9210 833d F30F6F85 movdqu -3712(%rbp), %xmm0
+ 9210 80F1FFFF
+ 9211 8345 F30F7F85 movdqu %xmm0, -6000(%rbp)
+ 9211 90E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 9212 .loc 2 1283 0
+ 9213 834d 8B8598E8 movl -5992(%rbp), %eax
+ 9213 FFFF
+ 9214 8353 89859CE8 movl %eax, -5988(%rbp)
+ 9214 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 9215 .loc 2 1284 0
+ 9216 8359 8B8594E8 movl -5996(%rbp), %eax
+ 9216 FFFF
+ 9217 835f 898598E8 movl %eax, -5992(%rbp)
+ 9217 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 9218 .loc 2 1285 0
+ 9219 8365 8B8590E8 movl -6000(%rbp), %eax
+ 9219 FFFF
+ 9220 836b 898594E8 movl %eax, -5996(%rbp)
+ 9220 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 9221 .loc 2 1286 0
+ 9222 8371 C78590E8 movl $0, -6000(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 301
+
+
+ 9222 FFFF0000
+ 9222 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 9223 .loc 2 1287 0
+ 9224 837b F30F6F85 movdqu -6000(%rbp), %xmm0
+ 9224 90E8FFFF
+ 9225 .LBE1247:
+ 9226 .LBE1246:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9227 .loc 2 1567 0
+ 9228 8383 660F7F85 movdqa %xmm0, -6672(%rbp)
+ 9228 F0E5FFFF
+ 9229 838b 660F6F85 movdqa -6672(%rbp), %xmm0
+ 9229 F0E5FFFF
+ 9230 8393 660FEF85 pxor -3728(%rbp), %xmm0
+ 9230 70F1FFFF
+ 9231 839b F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 9231 70F1FFFF
+ 9232 83a3 660F6F85 movdqa -6672(%rbp), %xmm0
+ 9232 F0E5FFFF
+ 9233 83ab F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 9233 90F1FFFF
+ 9234 .LBB1248:
+ 9235 .LBB1249:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9236 .loc 2 1282 0
+ 9237 83b3 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 9237 90F1FFFF
+ 9238 83bb F30F7F85 movdqu %xmm0, -5984(%rbp)
+ 9238 A0E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 9239 .loc 2 1283 0
+ 9240 83c3 8B85A8E8 movl -5976(%rbp), %eax
+ 9240 FFFF
+ 9241 83c9 8985ACE8 movl %eax, -5972(%rbp)
+ 9241 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 9242 .loc 2 1284 0
+ 9243 83cf 8B85A4E8 movl -5980(%rbp), %eax
+ 9243 FFFF
+ 9244 83d5 8985A8E8 movl %eax, -5976(%rbp)
+ 9244 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 9245 .loc 2 1285 0
+ 9246 83db 8B85A0E8 movl -5984(%rbp), %eax
+ 9246 FFFF
+ 9247 83e1 8985A4E8 movl %eax, -5980(%rbp)
+ 9247 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 9248 .loc 2 1286 0
+ 9249 83e7 C785A0E8 movl $0, -5984(%rbp)
+ 9249 FFFF0000
+ 9249 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 9250 .loc 2 1287 0
+ 9251 83f1 F30F6F85 movdqu -5984(%rbp), %xmm0
+ 9251 A0E8FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 302
+
+
+ 9252 .LBE1249:
+ 9253 .LBE1248:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9254 .loc 2 1568 0
+ 9255 83f9 660F7F85 movdqa %xmm0, -6672(%rbp)
+ 9255 F0E5FFFF
+ 9256 8401 660F6F85 movdqa -6672(%rbp), %xmm0
+ 9256 F0E5FFFF
+ 9257 8409 660FEF85 pxor -3728(%rbp), %xmm0
+ 9257 70F1FFFF
+ 9258 8411 F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 9258 70F1FFFF
+ 9259 8419 660F6F85 movdqa -6672(%rbp), %xmm0
+ 9259 F0E5FFFF
+ 9260 8421 F30F7F85 movdqu %xmm0, -3680(%rbp)
+ 9260 A0F1FFFF
+ 9261 .LBB1250:
+ 9262 .LBB1251:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9263 .loc 2 1282 0
+ 9264 8429 F30F6F85 movdqu -3680(%rbp), %xmm0
+ 9264 A0F1FFFF
+ 9265 8431 F30F7F85 movdqu %xmm0, -5968(%rbp)
+ 9265 B0E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 9266 .loc 2 1283 0
+ 9267 8439 8B85B8E8 movl -5960(%rbp), %eax
+ 9267 FFFF
+ 9268 843f 8985BCE8 movl %eax, -5956(%rbp)
+ 9268 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 9269 .loc 2 1284 0
+ 9270 8445 8B85B4E8 movl -5964(%rbp), %eax
+ 9270 FFFF
+ 9271 844b 8985B8E8 movl %eax, -5960(%rbp)
+ 9271 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 9272 .loc 2 1285 0
+ 9273 8451 8B85B0E8 movl -5968(%rbp), %eax
+ 9273 FFFF
+ 9274 8457 8985B4E8 movl %eax, -5964(%rbp)
+ 9274 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 9275 .loc 2 1286 0
+ 9276 845d C785B0E8 movl $0, -5968(%rbp)
+ 9276 FFFF0000
+ 9276 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 9277 .loc 2 1287 0
+ 9278 8467 F30F6F85 movdqu -5968(%rbp), %xmm0
+ 9278 B0E8FFFF
+ 9279 .LBE1251:
+ 9280 .LBE1250:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9281 .loc 2 1569 0
+ 9282 846f 660F7F85 movdqa %xmm0, -6672(%rbp)
+ 9282 F0E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 303
+
+
+ 9283 8477 660F6F85 movdqa -6672(%rbp), %xmm0
+ 9283 F0E5FFFF
+ 9284 847f 660FEF85 pxor -3728(%rbp), %xmm0
+ 9284 70F1FFFF
+ 9285 8487 F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 9285 70F1FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9286 .loc 2 1571 0
+ 9287 848f F30F6F85 movdqu -3728(%rbp), %xmm0
+ 9287 70F1FFFF
+ 9288 .LBE1245:
+ 9289 .LBE1244:
+1802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k6 : k6^k7 :k6^k7^k8:k6^k7^k8^k9 */
+ 9290 .loc 2 1802 0
+ 9291 8497 660F7F85 movdqa %xmm0, -6800(%rbp)
+ 9291 70E5FFFF
+ 9292 849f 660F6F85 movdqa -6736(%rbp), %xmm0
+ 9292 B0E5FFFF
+ 9293 84a7 F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 9293 B0F1FFFF
+ 9294 .LBB1252:
+ 9295 .LBB1253:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 9296 .loc 2 1565 0
+ 9297 84af F30F6F85 movdqu -3664(%rbp), %xmm0
+ 9297 B0F1FFFF
+ 9298 84b7 660F7F85 movdqa %xmm0, -6656(%rbp)
+ 9298 00E6FFFF
+ 9299 84bf 660F6F85 movdqa -6656(%rbp), %xmm0
+ 9299 00E6FFFF
+ 9300 84c7 F30F7F85 movdqu %xmm0, -3648(%rbp)
+ 9300 C0F1FFFF
+ 9301 .LBB1254:
+ 9302 .LBB1255:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9303 .loc 2 1282 0
+ 9304 84cf F30F6F85 movdqu -3648(%rbp), %xmm0
+ 9304 C0F1FFFF
+ 9305 84d7 F30F7F85 movdqu %xmm0, -5952(%rbp)
+ 9305 C0E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 9306 .loc 2 1283 0
+ 9307 84df 8B85C8E8 movl -5944(%rbp), %eax
+ 9307 FFFF
+ 9308 84e5 8985CCE8 movl %eax, -5940(%rbp)
+ 9308 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 9309 .loc 2 1284 0
+ 9310 84eb 8B85C4E8 movl -5948(%rbp), %eax
+ 9310 FFFF
+ 9311 84f1 8985C8E8 movl %eax, -5944(%rbp)
+ 9311 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 9312 .loc 2 1285 0
+ 9313 84f7 8B85C0E8 movl -5952(%rbp), %eax
+ 9313 FFFF
+ 9314 84fd 8985C4E8 movl %eax, -5948(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 304
+
+
+ 9314 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 9315 .loc 2 1286 0
+ 9316 8503 C785C0E8 movl $0, -5952(%rbp)
+ 9316 FFFF0000
+ 9316 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 9317 .loc 2 1287 0
+ 9318 850d F30F6F85 movdqu -5952(%rbp), %xmm0
+ 9318 C0E8FFFF
+ 9319 .LBE1255:
+ 9320 .LBE1254:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9321 .loc 2 1567 0
+ 9322 8515 660F7F85 movdqa %xmm0, -6656(%rbp)
+ 9322 00E6FFFF
+ 9323 851d 660F6F85 movdqa -6656(%rbp), %xmm0
+ 9323 00E6FFFF
+ 9324 8525 660FEF85 pxor -3664(%rbp), %xmm0
+ 9324 B0F1FFFF
+ 9325 852d F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 9325 B0F1FFFF
+ 9326 8535 660F6F85 movdqa -6656(%rbp), %xmm0
+ 9326 00E6FFFF
+ 9327 853d F30F7F85 movdqu %xmm0, -3632(%rbp)
+ 9327 D0F1FFFF
+ 9328 .LBB1256:
+ 9329 .LBB1257:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9330 .loc 2 1282 0
+ 9331 8545 F30F6F85 movdqu -3632(%rbp), %xmm0
+ 9331 D0F1FFFF
+ 9332 854d F30F7F85 movdqu %xmm0, -5936(%rbp)
+ 9332 D0E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 9333 .loc 2 1283 0
+ 9334 8555 8B85D8E8 movl -5928(%rbp), %eax
+ 9334 FFFF
+ 9335 855b 8985DCE8 movl %eax, -5924(%rbp)
+ 9335 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 9336 .loc 2 1284 0
+ 9337 8561 8B85D4E8 movl -5932(%rbp), %eax
+ 9337 FFFF
+ 9338 8567 8985D8E8 movl %eax, -5928(%rbp)
+ 9338 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 9339 .loc 2 1285 0
+ 9340 856d 8B85D0E8 movl -5936(%rbp), %eax
+ 9340 FFFF
+ 9341 8573 8985D4E8 movl %eax, -5932(%rbp)
+ 9341 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 9342 .loc 2 1286 0
+ 9343 8579 C785D0E8 movl $0, -5936(%rbp)
+ 9343 FFFF0000
+ 9343 0000
+
GAS LISTING /tmp/ccMa7HLZ.s page 305
+
+
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 9344 .loc 2 1287 0
+ 9345 8583 F30F6F85 movdqu -5936(%rbp), %xmm0
+ 9345 D0E8FFFF
+ 9346 .LBE1257:
+ 9347 .LBE1256:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9348 .loc 2 1568 0
+ 9349 858b 660F7F85 movdqa %xmm0, -6656(%rbp)
+ 9349 00E6FFFF
+ 9350 8593 660F6F85 movdqa -6656(%rbp), %xmm0
+ 9350 00E6FFFF
+ 9351 859b 660FEF85 pxor -3664(%rbp), %xmm0
+ 9351 B0F1FFFF
+ 9352 85a3 F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 9352 B0F1FFFF
+ 9353 85ab 660F6F85 movdqa -6656(%rbp), %xmm0
+ 9353 00E6FFFF
+ 9354 85b3 F30F7F85 movdqu %xmm0, -3616(%rbp)
+ 9354 E0F1FFFF
+ 9355 .LBB1258:
+ 9356 .LBB1259:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9357 .loc 2 1282 0
+ 9358 85bb F30F6F85 movdqu -3616(%rbp), %xmm0
+ 9358 E0F1FFFF
+ 9359 85c3 F30F7F85 movdqu %xmm0, -5920(%rbp)
+ 9359 E0E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 9360 .loc 2 1283 0
+ 9361 85cb 8B85E8E8 movl -5912(%rbp), %eax
+ 9361 FFFF
+ 9362 85d1 8985ECE8 movl %eax, -5908(%rbp)
+ 9362 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 9363 .loc 2 1284 0
+ 9364 85d7 8B85E4E8 movl -5916(%rbp), %eax
+ 9364 FFFF
+ 9365 85dd 8985E8E8 movl %eax, -5912(%rbp)
+ 9365 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 9366 .loc 2 1285 0
+ 9367 85e3 8B85E0E8 movl -5920(%rbp), %eax
+ 9367 FFFF
+ 9368 85e9 8985E4E8 movl %eax, -5916(%rbp)
+ 9368 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 9369 .loc 2 1286 0
+ 9370 85ef C785E0E8 movl $0, -5920(%rbp)
+ 9370 FFFF0000
+ 9370 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 9371 .loc 2 1287 0
+ 9372 85f9 F30F6F85 movdqu -5920(%rbp), %xmm0
+ 9372 E0E8FFFF
+ 9373 .LBE1259:
+ 9374 .LBE1258:
+
GAS LISTING /tmp/ccMa7HLZ.s page 306
+
+
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9375 .loc 2 1569 0
+ 9376 8601 660F7F85 movdqa %xmm0, -6656(%rbp)
+ 9376 00E6FFFF
+ 9377 8609 660F6F85 movdqa -6656(%rbp), %xmm0
+ 9377 00E6FFFF
+ 9378 8611 660FEF85 pxor -3664(%rbp), %xmm0
+ 9378 B0F1FFFF
+ 9379 8619 F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 9379 B0F1FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9380 .loc 2 1571 0
+ 9381 8621 F30F6F85 movdqu -3664(%rbp), %xmm0
+ 9381 B0F1FFFF
+ 9382 .LBE1253:
+ 9383 .LBE1252:
+1803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k10 :k10^k11: k10^k11: k10^k11 */
+ 9384 .loc 2 1803 0
+ 9385 8629 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 9385 80E5FFFF
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 9386 .loc 2 1804 0
+ 9387 8631 660F6F85 movdqa -6768(%rbp), %xmm0
+ 9387 90E5FFFF
+ 9388 8639 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 9388 C0E5FFFF
+ 9389 8641 660F6F85 movdqa -6720(%rbp), %xmm0
+ 9389 C0E5FFFF
+ 9390 8649 F30F7F85 movdqu %xmm0, -3584(%rbp)
+ 9390 00F2FFFF
+ 9391 .LBB1260:
+ 9392 .LBB1261:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 9393 .loc 2 1681 0
+ 9394 8651 B8020000 movl $2, %eax
+ 9394 00
+ 9395 8656 660F6F05 movdqa vec_00(%rip), %xmm0
+ 9395 00000000
+ 9396 865e F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 9396 20F2FFFF
+ 9397 8666 89851CF2 movl %eax, -3556(%rbp)
+ 9397 FFFF
+ 9398 .LBB1262:
+ 9399 .LBB1263:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 9400 .loc 2 522 0
+ 9401 866c F30F6F85 movdqu -3552(%rbp), %xmm0
+ 9401 20F2FFFF
+ 9402 8674 F30F7F85 movdqu %xmm0, -5840(%rbp)
+ 9402 30E9FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 9403 .loc 2 523 0
+ 9404 867c B8030000 movl $3, %eax
+ 9404 00
+ 9405 8681 4898 cltq
+ 9406 8683 8B951CF2 movl -3556(%rbp), %edx
+ 9406 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 307
+
+
+ 9407 8689 89948530 movl %edx, -5840(%rbp,%rax,4)
+ 9407 E9FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 9408 .loc 2 524 0
+ 9409 8690 F30F6F85 movdqu -5840(%rbp), %xmm0
+ 9409 30E9FFFF
+ 9410 8698 F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 9410 20F2FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9411 .loc 2 526 0
+ 9412 86a0 F30F6F85 movdqu -3552(%rbp), %xmm0
+ 9412 20F2FFFF
+ 9413 .LBE1263:
+ 9414 .LBE1262:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 9415 .loc 2 1681 0
+ 9416 86a8 660F7F85 movdqa %xmm0, -6624(%rbp)
+ 9416 20E6FFFF
+ 9417 86b0 F30F6F85 movdqu -3584(%rbp), %xmm0
+ 9417 00F2FFFF
+ 9418 86b8 F30F7F85 movdqu %xmm0, -3536(%rbp)
+ 9418 30F2FFFF
+ 9419 86c0 F30F6F85 movdqu -3536(%rbp), %xmm0
+ 9419 30F2FFFF
+ 9420 86c8 F30F7F85 movdqu %xmm0, -3504(%rbp)
+ 9420 50F2FFFF
+ 9421 86d0 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 9421 000000
+ 9422 86d7 48898548 movq %rax, -3512(%rbp)
+ 9422 F2FFFF
+ 9423 .LBB1264:
+ 9424 .LBB1265:
+ 9425 .LBB1266:
+ 9426 .LBB1267:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 9427 .loc 2 851 0
+ 9428 86de 660F6F05 movdqa vec_00(%rip), %xmm0
+ 9428 00000000
+ 9429 86e6 F30F7F85 movdqu %xmm0, -3472(%rbp)
+ 9429 70F2FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 9430 .loc 2 854 0
+ 9431 86ee 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 9431 00000000
+ 9432 86f6 F30F6F8D movdqu -3504(%rbp), %xmm1
+ 9432 50F2FFFF
+ 9433 86fe F30F7F8D movdqu %xmm1, -3392(%rbp)
+ 9433 C0F2FFFF
+ 9434 8706 F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 9434 B0F2FFFF
+ 9435 .LBB1268:
+ 9436 .LBB1269:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 9437 .loc 2 206 0
+ 9438 870e F30F6F85 movdqu -3408(%rbp), %xmm0
+ 9438 B0F2FFFF
+ 9439 8716 F30F6F8D movdqu -3392(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s page 308
+
+
+ 9439 C0F2FFFF
+ 9440 871e 660FDBC1 pand %xmm1, %xmm0
+ 9441 .LBE1269:
+ 9442 .LBE1268:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 9443 .loc 2 854 0
+ 9444 8722 F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 9444 A0F2FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 9445 .loc 2 862 0
+ 9446 872a 660F6F05 movdqa vec_10(%rip), %xmm0
+ 9446 00000000
+ 9447 8732 F30F6F8D movdqu -3504(%rbp), %xmm1
+ 9447 50F2FFFF
+ 9448 873a F30F7F8D movdqu %xmm1, -3360(%rbp)
+ 9448 E0F2FFFF
+ 9449 8742 F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 9449 D0F2FFFF
+ 9450 .LBB1270:
+ 9451 .loc 2 2642 0
+ 9452 874a 0FB685E0 movzbl -3360(%rbp), %eax
+ 9452 F2FFFF
+ 9453 8751 0FB695D0 movzbl -3376(%rbp), %edx
+ 9453 F2FFFF
+ 9454 8758 0FB6C0 movzbl %al, %eax
+ 9455 875b 6689852E movw %ax, -6866(%rbp)
+ 9455 E5FFFF
+ 9456 8762 0FB7852E movzwl -6866(%rbp), %eax
+ 9456 E5FFFF
+ 9457 8769 F6F2 divb %dl
+ 9458 876b 4189C7 movl %eax, %r15d
+ 9459 876e 0FB685E1 movzbl -3359(%rbp), %eax
+ 9459 F2FFFF
+ 9460 8775 0FB695D1 movzbl -3375(%rbp), %edx
+ 9460 F2FFFF
+ 9461 877c 0FB6C0 movzbl %al, %eax
+ 9462 877f 6689852E movw %ax, -6866(%rbp)
+ 9462 E5FFFF
+ 9463 8786 0FB7852E movzwl -6866(%rbp), %eax
+ 9463 E5FFFF
+ 9464 878d F6F2 divb %dl
+ 9465 878f 88853FE6 movb %al, -6593(%rbp)
+ 9465 FFFF
+ 9466 8795 0FB685E2 movzbl -3358(%rbp), %eax
+ 9466 F2FFFF
+ 9467 879c 0FB695D2 movzbl -3374(%rbp), %edx
+ 9467 F2FFFF
+ 9468 87a3 0FB6C0 movzbl %al, %eax
+ 9469 87a6 6689852E movw %ax, -6866(%rbp)
+ 9469 E5FFFF
+ 9470 87ad 0FB7852E movzwl -6866(%rbp), %eax
+ 9470 E5FFFF
+ 9471 87b4 F6F2 divb %dl
+ 9472 87b6 88853EE6 movb %al, -6594(%rbp)
+ 9472 FFFF
+ 9473 87bc 0FB685E3 movzbl -3357(%rbp), %eax
+ 9473 F2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 309
+
+
+ 9474 87c3 0FB695D3 movzbl -3373(%rbp), %edx
+ 9474 F2FFFF
+ 9475 87ca 0FB6C0 movzbl %al, %eax
+ 9476 87cd 6689852E movw %ax, -6866(%rbp)
+ 9476 E5FFFF
+ 9477 87d4 0FB7852E movzwl -6866(%rbp), %eax
+ 9477 E5FFFF
+ 9478 87db F6F2 divb %dl
+ 9479 87dd 88853DE6 movb %al, -6595(%rbp)
+ 9479 FFFF
+ 9480 87e3 0FB685E4 movzbl -3356(%rbp), %eax
+ 9480 F2FFFF
+ 9481 87ea 0FB695D4 movzbl -3372(%rbp), %edx
+ 9481 F2FFFF
+ 9482 87f1 0FB6C0 movzbl %al, %eax
+ 9483 87f4 6689852E movw %ax, -6866(%rbp)
+ 9483 E5FFFF
+ 9484 87fb 0FB7852E movzwl -6866(%rbp), %eax
+ 9484 E5FFFF
+ 9485 8802 F6F2 divb %dl
+ 9486 8804 88853CE6 movb %al, -6596(%rbp)
+ 9486 FFFF
+ 9487 880a 0FB685E5 movzbl -3355(%rbp), %eax
+ 9487 F2FFFF
+ 9488 8811 0FB695D5 movzbl -3371(%rbp), %edx
+ 9488 F2FFFF
+ 9489 8818 0FB6C0 movzbl %al, %eax
+ 9490 881b 6689852E movw %ax, -6866(%rbp)
+ 9490 E5FFFF
+ 9491 8822 0FB7852E movzwl -6866(%rbp), %eax
+ 9491 E5FFFF
+ 9492 8829 F6F2 divb %dl
+ 9493 882b 4189C1 movl %eax, %r9d
+ 9494 882e 0FB685E6 movzbl -3354(%rbp), %eax
+ 9494 F2FFFF
+ 9495 8835 0FB695D6 movzbl -3370(%rbp), %edx
+ 9495 F2FFFF
+ 9496 883c 0FB6C0 movzbl %al, %eax
+ 9497 883f 6689852E movw %ax, -6866(%rbp)
+ 9497 E5FFFF
+ 9498 8846 0FB7852E movzwl -6866(%rbp), %eax
+ 9498 E5FFFF
+ 9499 884d F6F2 divb %dl
+ 9500 884f 89C7 movl %eax, %edi
+ 9501 8851 0FB685E7 movzbl -3353(%rbp), %eax
+ 9501 F2FFFF
+ 9502 8858 0FB695D7 movzbl -3369(%rbp), %edx
+ 9502 F2FFFF
+ 9503 885f 0FB6C0 movzbl %al, %eax
+ 9504 8862 6689852E movw %ax, -6866(%rbp)
+ 9504 E5FFFF
+ 9505 8869 0FB7852E movzwl -6866(%rbp), %eax
+ 9505 E5FFFF
+ 9506 8870 F6F2 divb %dl
+ 9507 8872 89C3 movl %eax, %ebx
+ 9508 8874 0FB685E8 movzbl -3352(%rbp), %eax
+ 9508 F2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 310
+
+
+ 9509 887b 0FB695D8 movzbl -3368(%rbp), %edx
+ 9509 F2FFFF
+ 9510 8882 0FB6C0 movzbl %al, %eax
+ 9511 8885 6689852E movw %ax, -6866(%rbp)
+ 9511 E5FFFF
+ 9512 888c 0FB7852E movzwl -6866(%rbp), %eax
+ 9512 E5FFFF
+ 9513 8893 F6F2 divb %dl
+ 9514 8895 4189C2 movl %eax, %r10d
+ 9515 8898 0FB685E9 movzbl -3351(%rbp), %eax
+ 9515 F2FFFF
+ 9516 889f 0FB695D9 movzbl -3367(%rbp), %edx
+ 9516 F2FFFF
+ 9517 88a6 0FB6C0 movzbl %al, %eax
+ 9518 88a9 6689852E movw %ax, -6866(%rbp)
+ 9518 E5FFFF
+ 9519 88b0 0FB7852E movzwl -6866(%rbp), %eax
+ 9519 E5FFFF
+ 9520 88b7 F6F2 divb %dl
+ 9521 88b9 4189C3 movl %eax, %r11d
+ 9522 88bc 0FB685EA movzbl -3350(%rbp), %eax
+ 9522 F2FFFF
+ 9523 88c3 0FB695DA movzbl -3366(%rbp), %edx
+ 9523 F2FFFF
+ 9524 88ca 0FB6C0 movzbl %al, %eax
+ 9525 88cd 6689852E movw %ax, -6866(%rbp)
+ 9525 E5FFFF
+ 9526 88d4 0FB7852E movzwl -6866(%rbp), %eax
+ 9526 E5FFFF
+ 9527 88db F6F2 divb %dl
+ 9528 88dd 4189C4 movl %eax, %r12d
+ 9529 88e0 0FB685EB movzbl -3349(%rbp), %eax
+ 9529 F2FFFF
+ 9530 88e7 0FB695DB movzbl -3365(%rbp), %edx
+ 9530 F2FFFF
+ 9531 88ee 0FB6C0 movzbl %al, %eax
+ 9532 88f1 6689852E movw %ax, -6866(%rbp)
+ 9532 E5FFFF
+ 9533 88f8 0FB7852E movzwl -6866(%rbp), %eax
+ 9533 E5FFFF
+ 9534 88ff F6F2 divb %dl
+ 9535 8901 4189C5 movl %eax, %r13d
+ 9536 8904 0FB685EC movzbl -3348(%rbp), %eax
+ 9536 F2FFFF
+ 9537 890b 0FB695DC movzbl -3364(%rbp), %edx
+ 9537 F2FFFF
+ 9538 8912 0FB6C0 movzbl %al, %eax
+ 9539 8915 6689852E movw %ax, -6866(%rbp)
+ 9539 E5FFFF
+ 9540 891c 0FB7852E movzwl -6866(%rbp), %eax
+ 9540 E5FFFF
+ 9541 8923 F6F2 divb %dl
+ 9542 8925 4189C6 movl %eax, %r14d
+ 9543 8928 0FB685ED movzbl -3347(%rbp), %eax
+ 9543 F2FFFF
+ 9544 892f 0FB695DD movzbl -3363(%rbp), %edx
+ 9544 F2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 311
+
+
+ 9545 8936 0FB6C0 movzbl %al, %eax
+ 9546 8939 6689852E movw %ax, -6866(%rbp)
+ 9546 E5FFFF
+ 9547 8940 0FB7852E movzwl -6866(%rbp), %eax
+ 9547 E5FFFF
+ 9548 8947 F6F2 divb %dl
+ 9549 8949 4189C0 movl %eax, %r8d
+ 9550 894c 0FB685EE movzbl -3346(%rbp), %eax
+ 9550 F2FFFF
+ 9551 8953 0FB695DE movzbl -3362(%rbp), %edx
+ 9551 F2FFFF
+ 9552 895a 0FB6C0 movzbl %al, %eax
+ 9553 895d 6689852E movw %ax, -6866(%rbp)
+ 9553 E5FFFF
+ 9554 8964 0FB7852E movzwl -6866(%rbp), %eax
+ 9554 E5FFFF
+ 9555 896b F6F2 divb %dl
+ 9556 896d 89C6 movl %eax, %esi
+ 9557 896f 0FB685EF movzbl -3345(%rbp), %eax
+ 9557 F2FFFF
+ 9558 8976 0FB695DF movzbl -3361(%rbp), %edx
+ 9558 F2FFFF
+ 9559 897d 0FB6C0 movzbl %al, %eax
+ 9560 8980 6689852E movw %ax, -6866(%rbp)
+ 9560 E5FFFF
+ 9561 8987 0FB7852E movzwl -6866(%rbp), %eax
+ 9561 E5FFFF
+ 9562 898e F6F2 divb %dl
+ 9563 8990 89C1 movl %eax, %ecx
+ 9564 .LBB1271:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 9565 .loc 2 346 0
+ 9566 8992 0FB6D3 movzbl %bl, %edx
+ 9567 8995 400FB6C7 movzbl %dil, %eax
+ 9568 8999 48C1E208 salq $8, %rdx
+ 9569 899d 4809C2 orq %rax, %rdx
+ 9570 89a0 410FB6C1 movzbl %r9b, %eax
+ 9571 89a4 48C1E208 salq $8, %rdx
+ 9572 89a8 4809C2 orq %rax, %rdx
+ 9573 89ab 0FB6853C movzbl -6596(%rbp), %eax
+ 9573 E6FFFF
+ 9574 89b2 48C1E208 salq $8, %rdx
+ 9575 89b6 4809C2 orq %rax, %rdx
+ 9576 89b9 0FB6853D movzbl -6595(%rbp), %eax
+ 9576 E6FFFF
+ 9577 89c0 48C1E208 salq $8, %rdx
+ 9578 89c4 4809C2 orq %rax, %rdx
+ 9579 89c7 0FB6853E movzbl -6594(%rbp), %eax
+ 9579 E6FFFF
+ 9580 89ce 48C1E208 salq $8, %rdx
+ 9581 89d2 4809C2 orq %rax, %rdx
+ 9582 89d5 0FB6853F movzbl -6593(%rbp), %eax
+ 9582 E6FFFF
+ 9583 89dc 48C1E208 salq $8, %rdx
+ 9584 89e0 4809C2 orq %rax, %rdx
+ 9585 89e3 410FB6C7 movzbl %r15b, %eax
+ 9586 89e7 48C1E208 salq $8, %rdx
+
GAS LISTING /tmp/ccMa7HLZ.s page 312
+
+
+ 9587 89eb 4809C2 orq %rax, %rdx
+ 9588 89ee 0FB6C1 movzbl %cl, %eax
+ 9589 89f1 400FB6CE movzbl %sil, %ecx
+ 9590 89f5 48C1E008 salq $8, %rax
+ 9591 89f9 4809C8 orq %rcx, %rax
+ 9592 89fc 410FB6C8 movzbl %r8b, %ecx
+ 9593 8a00 48C1E008 salq $8, %rax
+ 9594 8a04 4809C8 orq %rcx, %rax
+ 9595 8a07 410FB6CE movzbl %r14b, %ecx
+ 9596 8a0b 48C1E008 salq $8, %rax
+ 9597 8a0f 4809C8 orq %rcx, %rax
+ 9598 8a12 410FB6CD movzbl %r13b, %ecx
+ 9599 8a16 48C1E008 salq $8, %rax
+ 9600 8a1a 4809C8 orq %rcx, %rax
+ 9601 8a1d 410FB6CC movzbl %r12b, %ecx
+ 9602 8a21 48C1E008 salq $8, %rax
+ 9603 8a25 4809C8 orq %rcx, %rax
+ 9604 8a28 410FB6CB movzbl %r11b, %ecx
+ 9605 8a2c 48C1E008 salq $8, %rax
+ 9606 8a30 4809C8 orq %rcx, %rax
+ 9607 8a33 410FB6CA movzbl %r10b, %ecx
+ 9608 8a37 48C1E008 salq $8, %rax
+ 9609 8a3b 4809C8 orq %rcx, %rax
+ 9610 8a3e 48899560 movq %rdx, -6816(%rbp)
+ 9610 E5FFFF
+ 9611 8a45 48898568 movq %rax, -6808(%rbp)
+ 9611 E5FFFF
+ 9612 8a4c 660F6F85 movdqa -6816(%rbp), %xmm0
+ 9612 60E5FFFF
+ 9613 .LBE1271:
+ 9614 .LBE1270:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 9615 .loc 2 862 0
+ 9616 8a54 F30F7F85 movdqu %xmm0, -3440(%rbp)
+ 9616 90F2FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 9617 .loc 2 866 0
+ 9618 8a5c C7856CF2 movl $0, -3476(%rbp)
+ 9618 FFFF0000
+ 9618 0000
+ 9619 8a66 E9860200 jmp .L228
+ 9619 00
+ 9620 .L237:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 9621 .loc 2 868 0
+ 9622 8a6b 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 9622 00000000
+ 9623 8a73 F30F7F85 movdqu %xmm0, -3328(%rbp)
+ 9623 00F3FFFF
+ 9624 8a7b F30F6F85 movdqu -3440(%rbp), %xmm0
+ 9624 90F2FFFF
+ 9625 8a83 F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 9625 F0F2FFFF
+ 9626 .LBB1272:
+ 9627 .LBB1273:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 9628 .loc 2 380 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 313
+
+
+ 9629 8a8b F30F6F85 movdqu -3328(%rbp), %xmm0
+ 9629 00F3FFFF
+ 9630 8a93 F30F7F85 movdqu %xmm0, -5808(%rbp)
+ 9630 50E9FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 9631 .loc 2 381 0
+ 9632 8a9b F30F6F85 movdqu -3344(%rbp), %xmm0
+ 9632 F0F2FFFF
+ 9633 8aa3 F30F7F85 movdqu %xmm0, -5824(%rbp)
+ 9633 40E9FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 9634 .loc 2 383 0
+ 9635 8aab C7851CF3 movl $0, -3300(%rbp)
+ 9635 FFFF0000
+ 9635 0000
+ 9636 8ab5 EB5C jmp .L229
+ 9637 .L232:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 9638 .loc 2 385 0
+ 9639 8ab7 8B851CF3 movl -3300(%rbp), %eax
+ 9639 FFFF
+ 9640 8abd 89C0 mov %eax, %eax
+ 9641 8abf 0FB68405 movzbl -5824(%rbp,%rax), %eax
+ 9641 40E9FFFF
+ 9642 8ac7 84C0 testb %al, %al
+ 9643 8ac9 7912 jns .L230
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 9644 .loc 2 386 0
+ 9645 8acb 8B851CF3 movl -3300(%rbp), %eax
+ 9645 FFFF
+ 9646 8ad1 89C0 mov %eax, %eax
+ 9647 8ad3 C6840560 movb $0, -5792(%rbp,%rax)
+ 9647 E9FFFF00
+ 9648 8adb EB2F jmp .L231
+ 9649 .L230:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 9650 .loc 2 388 0
+ 9651 8add 8B8D1CF3 movl -3300(%rbp), %ecx
+ 9651 FFFF
+ 9652 8ae3 8B851CF3 movl -3300(%rbp), %eax
+ 9652 FFFF
+ 9653 8ae9 89C0 mov %eax, %eax
+ 9654 8aeb 0FB68405 movzbl -5824(%rbp,%rax), %eax
+ 9654 40E9FFFF
+ 9655 8af3 0FB6C0 movzbl %al, %eax
+ 9656 8af6 83E00F andl $15, %eax
+ 9657 8af9 4898 cltq
+ 9658 8afb 0FB69405 movzbl -5808(%rbp,%rax), %edx
+ 9658 50E9FFFF
+ 9659 8b03 89C8 mov %ecx, %eax
+ 9660 8b05 88940560 movb %dl, -5792(%rbp,%rax)
+ 9660 E9FFFF
+ 9661 .L231:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 9662 .loc 2 383 0
+ 9663 8b0c 83851CF3 addl $1, -3300(%rbp)
+ 9663 FFFF01
+
GAS LISTING /tmp/ccMa7HLZ.s page 314
+
+
+ 9664 .L229:
+ 9665 8b13 83BD1CF3 cmpl $15, -3300(%rbp)
+ 9665 FFFF0F
+ 9666 8b1a 769B jbe .L232
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 9667 .loc 2 391 0
+ 9668 8b1c F30F6F85 movdqu -5792(%rbp), %xmm0
+ 9668 60E9FFFF
+ 9669 .LBE1273:
+ 9670 .LBE1272:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 9671 .loc 2 868 0
+ 9672 8b24 F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 9672 80F2FFFF
+ 9673 8b2c F30F6F85 movdqu -3424(%rbp), %xmm0
+ 9673 A0F2FFFF
+ 9674 8b34 F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 9674 30F3FFFF
+ 9675 8b3c F30F6F85 movdqu -3456(%rbp), %xmm0
+ 9675 80F2FFFF
+ 9676 8b44 F30F7F85 movdqu %xmm0, -3296(%rbp)
+ 9676 20F3FFFF
+ 9677 .LBB1274:
+ 9678 .LBB1275:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 9679 .loc 2 234 0
+ 9680 8b4c F30F6F85 movdqu -3296(%rbp), %xmm0
+ 9680 20F3FFFF
+ 9681 8b54 F30F6F8D movdqu -3280(%rbp), %xmm1
+ 9681 30F3FFFF
+ 9682 8b5c 660FEBC1 por %xmm1, %xmm0
+ 9683 .LBE1275:
+ 9684 .LBE1274:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 9685 .loc 2 870 0
+ 9686 8b60 F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 9686 80F2FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 9687 .loc 2 872 0
+ 9688 8b68 8B856CF2 mov -3476(%rbp), %eax
+ 9688 FFFF
+ 9689 8b6e 48C1E004 salq $4, %rax
+ 9690 8b72 48038548 addq -3512(%rbp), %rax
+ 9690 F2FFFF
+ 9691 8b79 660F6F00 movdqa (%rax), %xmm0
+ 9692 8b7d F30F7F85 movdqu %xmm0, -3248(%rbp)
+ 9692 50F3FFFF
+ 9693 8b85 F30F6F85 movdqu -3456(%rbp), %xmm0
+ 9693 80F2FFFF
+ 9694 8b8d F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 9694 40F3FFFF
+ 9695 .LBB1276:
+ 9696 .LBB1277:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 9697 .loc 2 380 0
+ 9698 8b95 F30F6F85 movdqu -3248(%rbp), %xmm0
+ 9698 50F3FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 315
+
+
+ 9699 8b9d F30F7F85 movdqu %xmm0, -5760(%rbp)
+ 9699 80E9FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 9700 .loc 2 381 0
+ 9701 8ba5 F30F6F85 movdqu -3264(%rbp), %xmm0
+ 9701 40F3FFFF
+ 9702 8bad F30F7F85 movdqu %xmm0, -5776(%rbp)
+ 9702 70E9FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 9703 .loc 2 383 0
+ 9704 8bb5 C7856CF3 movl $0, -3220(%rbp)
+ 9704 FFFF0000
+ 9704 0000
+ 9705 8bbf EB5C jmp .L233
+ 9706 .L236:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 9707 .loc 2 385 0
+ 9708 8bc1 8B856CF3 movl -3220(%rbp), %eax
+ 9708 FFFF
+ 9709 8bc7 89C0 mov %eax, %eax
+ 9710 8bc9 0FB68405 movzbl -5776(%rbp,%rax), %eax
+ 9710 70E9FFFF
+ 9711 8bd1 84C0 testb %al, %al
+ 9712 8bd3 7912 jns .L234
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 9713 .loc 2 386 0
+ 9714 8bd5 8B856CF3 movl -3220(%rbp), %eax
+ 9714 FFFF
+ 9715 8bdb 89C0 mov %eax, %eax
+ 9716 8bdd C6840590 movb $0, -5744(%rbp,%rax)
+ 9716 E9FFFF00
+ 9717 8be5 EB2F jmp .L235
+ 9718 .L234:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 9719 .loc 2 388 0
+ 9720 8be7 8B8D6CF3 movl -3220(%rbp), %ecx
+ 9720 FFFF
+ 9721 8bed 8B856CF3 movl -3220(%rbp), %eax
+ 9721 FFFF
+ 9722 8bf3 89C0 mov %eax, %eax
+ 9723 8bf5 0FB68405 movzbl -5776(%rbp,%rax), %eax
+ 9723 70E9FFFF
+ 9724 8bfd 0FB6C0 movzbl %al, %eax
+ 9725 8c00 83E00F andl $15, %eax
+ 9726 8c03 4898 cltq
+ 9727 8c05 0FB69405 movzbl -5760(%rbp,%rax), %edx
+ 9727 80E9FFFF
+ 9728 8c0d 89C8 mov %ecx, %eax
+ 9729 8c0f 88940590 movb %dl, -5744(%rbp,%rax)
+ 9729 E9FFFF
+ 9730 .L235:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 9731 .loc 2 383 0
+ 9732 8c16 83856CF3 addl $1, -3220(%rbp)
+ 9732 FFFF01
+ 9733 .L233:
+ 9734 8c1d 83BD6CF3 cmpl $15, -3220(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 316
+
+
+ 9734 FFFF0F
+ 9735 8c24 769B jbe .L236
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 9736 .loc 2 391 0
+ 9737 8c26 F30F6F85 movdqu -5744(%rbp), %xmm0
+ 9737 90E9FFFF
+ 9738 .LBE1277:
+ 9739 .LBE1276:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 9740 .loc 2 872 0
+ 9741 8c2e F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 9741 80F2FFFF
+ 9742 8c36 F30F6F85 movdqu -3472(%rbp), %xmm0
+ 9742 70F2FFFF
+ 9743 8c3e F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 9743 80F3FFFF
+ 9744 8c46 F30F6F85 movdqu -3456(%rbp), %xmm0
+ 9744 80F2FFFF
+ 9745 8c4e F30F7F85 movdqu %xmm0, -3216(%rbp)
+ 9745 70F3FFFF
+ 9746 .LBB1278:
+ 9747 .LBB1279:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 9748 .loc 2 234 0
+ 9749 8c56 F30F6F85 movdqu -3216(%rbp), %xmm0
+ 9749 70F3FFFF
+ 9750 8c5e F30F6F8D movdqu -3200(%rbp), %xmm1
+ 9750 80F3FFFF
+ 9751 8c66 660FEBC1 por %xmm1, %xmm0
+ 9752 .LBE1279:
+ 9753 .LBE1278:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 9754 .loc 2 874 0
+ 9755 8c6a F30F7F85 movdqu %xmm0, -3472(%rbp)
+ 9755 70F2FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 9756 .loc 2 876 0
+ 9757 8c72 660F6F05 movdqa vec_01(%rip), %xmm0
+ 9757 00000000
+ 9758 8c7a F30F6F8D movdqu -3440(%rbp), %xmm1
+ 9758 90F2FFFF
+ 9759 8c82 F30F7F8D movdqu %xmm1, -3168(%rbp)
+ 9759 A0F3FFFF
+ 9760 8c8a F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 9760 90F3FFFF
+ 9761 .LBB1280:
+ 9762 .LBB1281:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 9763 .loc 2 290 0
+ 9764 8c92 F30F6F8D movdqu -3184(%rbp), %xmm1
+ 9764 90F3FFFF
+ 9765 8c9a F30F6F85 movdqu -3168(%rbp), %xmm0
+ 9765 A0F3FFFF
+ 9766 8ca2 660FF8C1 psubb %xmm1, %xmm0
+ 9767 .LBE1281:
+ 9768 .LBE1280:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+
GAS LISTING /tmp/ccMa7HLZ.s page 317
+
+
+ 9769 .loc 2 876 0
+ 9770 8ca6 F30F7F85 movdqu %xmm0, -3440(%rbp)
+ 9770 90F2FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9771 .loc 2 878 0
+ 9772 8cae 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 9772 00000000
+ 9773 8cb6 F30F6F8D movdqu -3440(%rbp), %xmm1
+ 9773 90F2FFFF
+ 9774 8cbe F30F7F8D movdqu %xmm1, -3136(%rbp)
+ 9774 C0F3FFFF
+ 9775 8cc6 F30F7F85 movdqu %xmm0, -3152(%rbp)
+ 9775 B0F3FFFF
+ 9776 .LBB1282:
+ 9777 .LBB1283:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 9778 .loc 2 206 0
+ 9779 8cce F30F6F85 movdqu -3152(%rbp), %xmm0
+ 9779 B0F3FFFF
+ 9780 8cd6 F30F6F8D movdqu -3136(%rbp), %xmm1
+ 9780 C0F3FFFF
+ 9781 8cde 660FDBC1 pand %xmm1, %xmm0
+ 9782 .LBE1283:
+ 9783 .LBE1282:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9784 .loc 2 878 0
+ 9785 8ce2 F30F7F85 movdqu %xmm0, -3440(%rbp)
+ 9785 90F2FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 9786 .loc 2 866 0
+ 9787 8cea 83856CF2 addl $1, -3476(%rbp)
+ 9787 FFFF01
+ 9788 .L228:
+ 9789 8cf1 83BD6CF2 cmpl $15, -3476(%rbp)
+ 9789 FFFF0F
+ 9790 8cf8 0F866DFD jbe .L237
+ 9790 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 9791 .loc 2 882 0
+ 9792 8cfe F30F6F85 movdqu -3472(%rbp), %xmm0
+ 9792 70F2FFFF
+ 9793 .LBE1267:
+ 9794 .LBE1266:
+ 9795 .LBE1265:
+ 9796 .LBE1264:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 9797 .loc 2 1682 0
+ 9798 8d06 660F7F85 movdqa %xmm0, -6640(%rbp)
+ 9798 10E6FFFF
+ 9799 .LBB1284:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 9800 .loc 2 1683 0
+ 9801 8d0e 660F6F85 movdqa -6640(%rbp), %xmm0
+ 9801 10E6FFFF
+ 9802 8d16 F30F7F85 movdqu %xmm0, -5856(%rbp)
+ 9802 20E9FFFF
+ 9803 8d1e E8000000 call KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 318
+
+
+ 9803 00
+ 9804 8d23 4885C0 testq %rax, %rax
+ 9805 8d26 7479 je .L239
+ 9806 8d28 BF010000 movl $1, %edi
+ 9806 00
+ 9807 8d2d E8000000 call KDbgCondToFlag at PLT
+ 9807 00
+ 9808 8d32 4889C6 movq %rax, %rsi
+ 9809 8d35 BF100000 movl $16, %edi
+ 9809 00
+ 9810 8d3a E8000000 call KDbgTestModConds at PLT
+ 9810 00
+ 9811 8d3f 84C0 testb %al, %al
+ 9812 8d41 745E je .L239
+ 9813 8d43 8B852CE9 movl -5844(%rbp), %eax
+ 9813 FFFF
+ 9814 8d49 89C7 movl %eax, %edi
+ 9815 8d4b E8B072FF call bswap_32
+ 9815 FF
+ 9816 8d50 4189C5 movl %eax, %r13d
+ 9817 8d53 8B8528E9 movl -5848(%rbp), %eax
+ 9817 FFFF
+ 9818 8d59 89C7 movl %eax, %edi
+ 9819 8d5b E8A072FF call bswap_32
+ 9819 FF
+ 9820 8d60 4189C4 movl %eax, %r12d
+ 9821 8d63 8B8524E9 movl -5852(%rbp), %eax
+ 9821 FFFF
+ 9822 8d69 89C7 movl %eax, %edi
+ 9823 8d6b E89072FF call bswap_32
+ 9823 FF
+ 9824 8d70 89C3 movl %eax, %ebx
+ 9825 8d72 8B8520E9 movl -5856(%rbp), %eax
+ 9825 FFFF
+ 9826 8d78 89C7 movl %eax, %edi
+ 9827 8d7a E88172FF call bswap_32
+ 9827 FF
+ 9828 8d7f 4589E9 movl %r13d, %r9d
+ 9829 8d82 4589E0 movl %r12d, %r8d
+ 9830 8d85 89D9 movl %ebx, %ecx
+ 9831 8d87 89C2 movl %eax, %edx
+ 9832 8d89 488D3500 leaq .LC0(%rip), %rsi
+ 9832 000000
+ 9833 8d90 488D3D00 leaq .LC1(%rip), %rdi
+ 9833 000000
+ 9834 8d97 B8000000 movl $0, %eax
+ 9834 00
+ 9835 8d9c E8000000 call KDbgMsg at PLT
+ 9835 00
+ 9836 .L239:
+ 9837 8da1 660F6F85 movdqa -6640(%rbp), %xmm0
+ 9837 10E6FFFF
+ 9838 8da9 F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 9838 D0F3FFFF
+ 9839 .LBE1284:
+ 9840 .LBB1285:
+ 9841 .LBB1286:
+
GAS LISTING /tmp/ccMa7HLZ.s page 319
+
+
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 9842 .loc 2 667 0
+ 9843 8db1 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 9843 00000000
+ 9844 8db9 F30F6F8D movdqu -3120(%rbp), %xmm1
+ 9844 D0F3FFFF
+ 9845 8dc1 F30F7F8D movdqu %xmm1, -3088(%rbp)
+ 9845 F0F3FFFF
+ 9846 8dc9 F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 9846 E0F3FFFF
+ 9847 .LBB1287:
+ 9848 .LBB1288:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 9849 .loc 2 380 0
+ 9850 8dd1 F30F6F85 movdqu -3088(%rbp), %xmm0
+ 9850 F0F3FFFF
+ 9851 8dd9 F30F7F85 movdqu %xmm0, -5712(%rbp)
+ 9851 B0E9FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 9852 .loc 2 381 0
+ 9853 8de1 F30F6F85 movdqu -3104(%rbp), %xmm0
+ 9853 E0F3FFFF
+ 9854 8de9 F30F7F85 movdqu %xmm0, -5728(%rbp)
+ 9854 A0E9FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 9855 .loc 2 383 0
+ 9856 8df1 C7850CF4 movl $0, -3060(%rbp)
+ 9856 FFFF0000
+ 9856 0000
+ 9857 8dfb EB5C jmp .L240
+ 9858 .L243:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 9859 .loc 2 385 0
+ 9860 8dfd 8B850CF4 movl -3060(%rbp), %eax
+ 9860 FFFF
+ 9861 8e03 89C0 mov %eax, %eax
+ 9862 8e05 0FB68405 movzbl -5728(%rbp,%rax), %eax
+ 9862 A0E9FFFF
+ 9863 8e0d 84C0 testb %al, %al
+ 9864 8e0f 7912 jns .L241
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 9865 .loc 2 386 0
+ 9866 8e11 8B850CF4 movl -3060(%rbp), %eax
+ 9866 FFFF
+ 9867 8e17 89C0 mov %eax, %eax
+ 9868 8e19 C68405C0 movb $0, -5696(%rbp,%rax)
+ 9868 E9FFFF00
+ 9869 8e21 EB2F jmp .L242
+ 9870 .L241:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 9871 .loc 2 388 0
+ 9872 8e23 8B8D0CF4 movl -3060(%rbp), %ecx
+ 9872 FFFF
+ 9873 8e29 8B850CF4 movl -3060(%rbp), %eax
+ 9873 FFFF
+ 9874 8e2f 89C0 mov %eax, %eax
+ 9875 8e31 0FB68405 movzbl -5728(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 320
+
+
+ 9875 A0E9FFFF
+ 9876 8e39 0FB6C0 movzbl %al, %eax
+ 9877 8e3c 83E00F andl $15, %eax
+ 9878 8e3f 4898 cltq
+ 9879 8e41 0FB69405 movzbl -5712(%rbp,%rax), %edx
+ 9879 B0E9FFFF
+ 9880 8e49 89C8 mov %ecx, %eax
+ 9881 8e4b 889405C0 movb %dl, -5696(%rbp,%rax)
+ 9881 E9FFFF
+ 9882 .L242:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 9883 .loc 2 383 0
+ 9884 8e52 83850CF4 addl $1, -3060(%rbp)
+ 9884 FFFF01
+ 9885 .L240:
+ 9886 8e59 83BD0CF4 cmpl $15, -3060(%rbp)
+ 9886 FFFF0F
+ 9887 8e60 769B jbe .L243
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 9888 .loc 2 391 0
+ 9889 8e62 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 9889 C0E9FFFF
+ 9890 .LBE1288:
+ 9891 .LBE1287:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 9892 .loc 2 667 0
+ 9893 8e6a F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 9893 D0F3FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9894 .loc 2 668 0
+ 9895 8e72 F30F6F85 movdqu -3120(%rbp), %xmm0
+ 9895 D0F3FFFF
+ 9896 .LBE1286:
+ 9897 .LBE1285:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 9898 .loc 2 1684 0
+ 9899 8e7a 660F7F85 movdqa %xmm0, -6640(%rbp)
+ 9899 10E6FFFF
+ 9900 .LBB1289:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 9901 .loc 2 1685 0
+ 9902 8e82 660F6F85 movdqa -6640(%rbp), %xmm0
+ 9902 10E6FFFF
+ 9903 8e8a F30F7F85 movdqu %xmm0, -5872(%rbp)
+ 9903 10E9FFFF
+ 9904 8e92 E8000000 call KDbgWriterGet at PLT
+ 9904 00
+ 9905 8e97 4885C0 testq %rax, %rax
+ 9906 8e9a 7479 je .L245
+ 9907 8e9c BF010000 movl $1, %edi
+ 9907 00
+ 9908 8ea1 E8000000 call KDbgCondToFlag at PLT
+ 9908 00
+ 9909 8ea6 4889C6 movq %rax, %rsi
+ 9910 8ea9 BF100000 movl $16, %edi
+ 9910 00
+ 9911 8eae E8000000 call KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 321
+
+
+ 9911 00
+ 9912 8eb3 84C0 testb %al, %al
+ 9913 8eb5 745E je .L245
+ 9914 8eb7 8B851CE9 movl -5860(%rbp), %eax
+ 9914 FFFF
+ 9915 8ebd 89C7 movl %eax, %edi
+ 9916 8ebf E83C71FF call bswap_32
+ 9916 FF
+ 9917 8ec4 4189C5 movl %eax, %r13d
+ 9918 8ec7 8B8518E9 movl -5864(%rbp), %eax
+ 9918 FFFF
+ 9919 8ecd 89C7 movl %eax, %edi
+ 9920 8ecf E82C71FF call bswap_32
+ 9920 FF
+ 9921 8ed4 4189C4 movl %eax, %r12d
+ 9922 8ed7 8B8514E9 movl -5868(%rbp), %eax
+ 9922 FFFF
+ 9923 8edd 89C7 movl %eax, %edi
+ 9924 8edf E81C71FF call bswap_32
+ 9924 FF
+ 9925 8ee4 89C3 movl %eax, %ebx
+ 9926 8ee6 8B8510E9 movl -5872(%rbp), %eax
+ 9926 FFFF
+ 9927 8eec 89C7 movl %eax, %edi
+ 9928 8eee E80D71FF call bswap_32
+ 9928 FF
+ 9929 8ef3 4589E9 movl %r13d, %r9d
+ 9930 8ef6 4589E0 movl %r12d, %r8d
+ 9931 8ef9 89D9 movl %ebx, %ecx
+ 9932 8efb 89C2 movl %eax, %edx
+ 9933 8efd 488D3500 leaq .LC2(%rip), %rsi
+ 9933 000000
+ 9934 8f04 488D3D00 leaq .LC1(%rip), %rdi
+ 9934 000000
+ 9935 8f0b B8000000 movl $0, %eax
+ 9935 00
+ 9936 8f10 E8000000 call KDbgMsg at PLT
+ 9936 00
+ 9937 .L245:
+ 9938 8f15 660F6F85 movdqa -6640(%rbp), %xmm0
+ 9938 10E6FFFF
+ 9939 8f1d F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 9939 20F4FFFF
+ 9940 8f25 660F6F85 movdqa -6624(%rbp), %xmm0
+ 9940 20E6FFFF
+ 9941 8f2d F30F7F85 movdqu %xmm0, -3056(%rbp)
+ 9941 10F4FFFF
+ 9942 .LBE1289:
+ 9943 .LBB1290:
+ 9944 .LBB1291:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 9945 .loc 2 178 0
+ 9946 8f35 F30F6F85 movdqu -3056(%rbp), %xmm0
+ 9946 10F4FFFF
+ 9947 8f3d F30F6F8D movdqu -3040(%rbp), %xmm1
+ 9947 20F4FFFF
+ 9948 8f45 660FEFC1 pxor %xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 322
+
+
+ 9949 .LBE1291:
+ 9950 .LBE1290:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 9951 .loc 2 1686 0
+ 9952 8f49 660F7F85 movdqa %xmm0, -6640(%rbp)
+ 9952 10E6FFFF
+ 9953 .LBB1292:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 9954 .loc 2 1687 0
+ 9955 8f51 660F6F85 movdqa -6640(%rbp), %xmm0
+ 9955 10E6FFFF
+ 9956 8f59 F30F7F85 movdqu %xmm0, -5888(%rbp)
+ 9956 00E9FFFF
+ 9957 8f61 E8000000 call KDbgWriterGet at PLT
+ 9957 00
+ 9958 8f66 4885C0 testq %rax, %rax
+ 9959 8f69 7479 je .L247
+ 9960 8f6b BF010000 movl $1, %edi
+ 9960 00
+ 9961 8f70 E8000000 call KDbgCondToFlag at PLT
+ 9961 00
+ 9962 8f75 4889C6 movq %rax, %rsi
+ 9963 8f78 BF100000 movl $16, %edi
+ 9963 00
+ 9964 8f7d E8000000 call KDbgTestModConds at PLT
+ 9964 00
+ 9965 8f82 84C0 testb %al, %al
+ 9966 8f84 745E je .L247
+ 9967 8f86 8B850CE9 movl -5876(%rbp), %eax
+ 9967 FFFF
+ 9968 8f8c 89C7 movl %eax, %edi
+ 9969 8f8e E86D70FF call bswap_32
+ 9969 FF
+ 9970 8f93 4189C5 movl %eax, %r13d
+ 9971 8f96 8B8508E9 movl -5880(%rbp), %eax
+ 9971 FFFF
+ 9972 8f9c 89C7 movl %eax, %edi
+ 9973 8f9e E85D70FF call bswap_32
+ 9973 FF
+ 9974 8fa3 4189C4 movl %eax, %r12d
+ 9975 8fa6 8B8504E9 movl -5884(%rbp), %eax
+ 9975 FFFF
+ 9976 8fac 89C7 movl %eax, %edi
+ 9977 8fae E84D70FF call bswap_32
+ 9977 FF
+ 9978 8fb3 89C3 movl %eax, %ebx
+ 9979 8fb5 8B8500E9 movl -5888(%rbp), %eax
+ 9979 FFFF
+ 9980 8fbb 89C7 movl %eax, %edi
+ 9981 8fbd E83E70FF call bswap_32
+ 9981 FF
+ 9982 8fc2 4589E9 movl %r13d, %r9d
+ 9983 8fc5 4589E0 movl %r12d, %r8d
+ 9984 8fc8 89D9 movl %ebx, %ecx
+ 9985 8fca 89C2 movl %eax, %edx
+ 9986 8fcc 488D3500 leaq .LC3(%rip), %rsi
+ 9986 000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 323
+
+
+ 9987 8fd3 488D3D00 leaq .LC1(%rip), %rdi
+ 9987 000000
+ 9988 8fda B8000000 movl $0, %eax
+ 9988 00
+ 9989 8fdf E8000000 call KDbgMsg at PLT
+ 9989 00
+ 9990 .L247:
+ 9991 8fe4 660F6F85 movdqa -6640(%rbp), %xmm0
+ 9991 10E6FFFF
+ 9992 8fec F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 9992 30F4FFFF
+ 9993 .LBE1292:
+ 9994 .LBB1293:
+ 9995 .LBB1294:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 9996 .loc 2 1357 0
+ 9997 8ff4 F30F6F85 movdqu -3024(%rbp), %xmm0
+ 9997 30F4FFFF
+ 9998 8ffc F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 9998 D0E9FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 9999 .loc 2 1358 0
+ 10000 9004 8B85DCE9 movl -5668(%rbp), %eax
+ 10000 FFFF
+ 10001 900a 8985D8E9 movl %eax, -5672(%rbp)
+ 10001 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 10002 .loc 2 1359 0
+ 10003 9010 8B85DCE9 movl -5668(%rbp), %eax
+ 10003 FFFF
+ 10004 9016 8985D4E9 movl %eax, -5676(%rbp)
+ 10004 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 10005 .loc 2 1360 0
+ 10006 901c 8B85DCE9 movl -5668(%rbp), %eax
+ 10006 FFFF
+ 10007 9022 8985D0E9 movl %eax, -5680(%rbp)
+ 10007 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10008 .loc 2 1361 0
+ 10009 9028 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 10009 D0E9FFFF
+ 10010 .LBE1294:
+ 10011 .LBE1293:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 10012 .loc 2 1688 0
+ 10013 9030 660F7F85 movdqa %xmm0, -6640(%rbp)
+ 10013 10E6FFFF
+ 10014 .LBB1295:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 10015 .loc 2 1689 0
+ 10016 9038 660F6F85 movdqa -6640(%rbp), %xmm0
+ 10016 10E6FFFF
+ 10017 9040 F30F7F85 movdqu %xmm0, -5904(%rbp)
+ 10017 F0E8FFFF
+ 10018 9048 E8000000 call KDbgWriterGet at PLT
+ 10018 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 324
+
+
+ 10019 904d 4885C0 testq %rax, %rax
+ 10020 9050 7479 je .L249
+ 10021 9052 BF010000 movl $1, %edi
+ 10021 00
+ 10022 9057 E8000000 call KDbgCondToFlag at PLT
+ 10022 00
+ 10023 905c 4889C6 movq %rax, %rsi
+ 10024 905f BF100000 movl $16, %edi
+ 10024 00
+ 10025 9064 E8000000 call KDbgTestModConds at PLT
+ 10025 00
+ 10026 9069 84C0 testb %al, %al
+ 10027 906b 745E je .L249
+ 10028 906d 8B85FCE8 movl -5892(%rbp), %eax
+ 10028 FFFF
+ 10029 9073 89C7 movl %eax, %edi
+ 10030 9075 E8866FFF call bswap_32
+ 10030 FF
+ 10031 907a 4189C5 movl %eax, %r13d
+ 10032 907d 8B85F8E8 movl -5896(%rbp), %eax
+ 10032 FFFF
+ 10033 9083 89C7 movl %eax, %edi
+ 10034 9085 E8766FFF call bswap_32
+ 10034 FF
+ 10035 908a 4189C4 movl %eax, %r12d
+ 10036 908d 8B85F4E8 movl -5900(%rbp), %eax
+ 10036 FFFF
+ 10037 9093 89C7 movl %eax, %edi
+ 10038 9095 E8666FFF call bswap_32
+ 10038 FF
+ 10039 909a 89C3 movl %eax, %ebx
+ 10040 909c 8B85F0E8 movl -5904(%rbp), %eax
+ 10040 FFFF
+ 10041 90a2 89C7 movl %eax, %edi
+ 10042 90a4 E8576FFF call bswap_32
+ 10042 FF
+ 10043 90a9 4589E9 movl %r13d, %r9d
+ 10044 90ac 4589E0 movl %r12d, %r8d
+ 10045 90af 89D9 movl %ebx, %ecx
+ 10046 90b1 89C2 movl %eax, %edx
+ 10047 90b3 488D3500 leaq .LC4(%rip), %rsi
+ 10047 000000
+ 10048 90ba 488D3D00 leaq .LC1(%rip), %rdi
+ 10048 000000
+ 10049 90c1 B8000000 movl $0, %eax
+ 10049 00
+ 10050 90c6 E8000000 call KDbgMsg at PLT
+ 10050 00
+ 10051 .L249:
+ 10052 .LBE1295:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 10053 .loc 2 1690 0
+ 10054 90cb 660F6F85 movdqa -6640(%rbp), %xmm0
+ 10054 10E6FFFF
+ 10055 .LBE1261:
+ 10056 .LBE1260:
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+
GAS LISTING /tmp/ccMa7HLZ.s page 325
+
+
+ 10057 .loc 2 1804 0
+ 10058 90d3 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 10058 C0E5FFFF
+1806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k12 : k13 : k14 : k15 */
+ 10059 .loc 2 1806 0
+ 10060 90db 660F6F85 movdqa -6800(%rbp), %xmm0
+ 10060 70E5FFFF
+ 10061 90e3 660FEF85 pxor -6720(%rbp), %xmm0
+ 10061 C0E5FFFF
+ 10062 90eb 660F7F85 movdqa %xmm0, -6800(%rbp)
+ 10062 70E5FFFF
+1807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[3] = v0; /* K12:K13:K14:K15 */
+ 10063 .loc 2 1807 0
+ 10064 90f3 488B8588 movq -6264(%rbp), %rax
+ 10064 E7FFFF
+ 10065 90fa 4883C030 addq $48, %rax
+ 10066 90fe 660F6F85 movdqa -6800(%rbp), %xmm0
+ 10066 70E5FFFF
+ 10067 9106 660F7F00 movdqa %xmm0, (%rax)
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k15 : k15 : k15 : k15 */
+ 10068 .loc 2 1808 0
+ 10069 910a 660F6F85 movdqa -6800(%rbp), %xmm0
+ 10069 70E5FFFF
+ 10070 9112 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 10070 C0E5FFFF
+ 10071 911a 660F6F85 movdqa -6720(%rbp), %xmm0
+ 10071 C0E5FFFF
+ 10072 9122 F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 10072 40F4FFFF
+ 10073 .LBB1296:
+ 10074 .LBB1297:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10075 .loc 2 1357 0
+ 10076 912a F30F6F85 movdqu -3008(%rbp), %xmm0
+ 10076 40F4FFFF
+ 10077 9132 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 10077 E0E9FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 10078 .loc 2 1358 0
+ 10079 913a 8B85ECE9 movl -5652(%rbp), %eax
+ 10079 FFFF
+ 10080 9140 8985E8E9 movl %eax, -5656(%rbp)
+ 10080 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 10081 .loc 2 1359 0
+ 10082 9146 8B85ECE9 movl -5652(%rbp), %eax
+ 10082 FFFF
+ 10083 914c 8985E4E9 movl %eax, -5660(%rbp)
+ 10083 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 10084 .loc 2 1360 0
+ 10085 9152 8B85ECE9 movl -5652(%rbp), %eax
+ 10085 FFFF
+ 10086 9158 8985E0E9 movl %eax, -5664(%rbp)
+ 10086 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10087 .loc 2 1361 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 326
+
+
+ 10088 915e F30F6F85 movdqu -5664(%rbp), %xmm0
+ 10088 E0E9FFFF
+ 10089 .LBE1297:
+ 10090 .LBE1296:
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k15 : k15 : k15 : k15 */
+ 10091 .loc 2 1808 0
+ 10092 9166 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 10092 C0E5FFFF
+1809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k16 : k17 : k16 : k17 */
+ 10093 .loc 2 1809 0
+ 10094 916e 660F6F85 movdqa -6784(%rbp), %xmm0
+ 10094 80E5FFFF
+ 10095 9176 660FEF85 pxor -6720(%rbp), %xmm0
+ 10095 C0E5FFFF
+ 10096 917e 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 10096 80E5FFFF
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 10097 .loc 2 1815 0
+ 10098 9186 660F6F85 movdqa -6784(%rbp), %xmm0
+ 10098 80E5FFFF
+ 10099 918e 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 10099 C0E5FFFF
+ 10100 9196 660F6F85 movdqa -6720(%rbp), %xmm0
+ 10100 C0E5FFFF
+ 10101 919e F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 10101 60F4FFFF
+ 10102 .LBB1298:
+ 10103 .LBB1299:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+ 10104 .loc 2 1629 0
+ 10105 91a6 B8040000 movl $4, %eax
+ 10105 00
+ 10106 91ab 0FB6C0 movzbl %al, %eax
+ 10107 91ae 898580F4 movl %eax, -2944(%rbp)
+ 10107 FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 10108 .loc 2 1630 0
+ 10109 91b4 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 10109 60F4FFFF
+ 10110 91bc F30F7F85 movdqu %xmm0, -5632(%rbp)
+ 10110 00EAFFFF
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 10111 .loc 2 1631 0
+ 10112 91c4 8B8504EA movl -5628(%rbp), %eax
+ 10112 FFFF
+ 10113 91ca 898584F4 movl %eax, -2940(%rbp)
+ 10113 FFFF
+ 10114 .LBB1300:
+ 10115 .LBB1301:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 10116 .loc 2 740 0
+ 10117 91d0 8B8584F4 movl -2940(%rbp), %eax
+ 10117 FFFF
+ 10118 91d6 8985F0E9 movl %eax, -5648(%rbp)
+ 10118 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 10119 .loc 2 741 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 327
+
+
+ 10120 91dc C78588F4 movl $0, -2936(%rbp)
+ 10120 FFFF0000
+ 10120 0000
+ 10121 91e6 EB36 jmp .L250
+ 10122 .L251:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 10123 .loc 2 742 0
+ 10124 91e8 8B8D88F4 movl -2936(%rbp), %ecx
+ 10124 FFFF
+ 10125 91ee 8B8588F4 movl -2936(%rbp), %eax
+ 10125 FFFF
+ 10126 91f4 89C0 mov %eax, %eax
+ 10127 91f6 0FB68405 movzbl -5648(%rbp,%rax), %eax
+ 10127 F0E9FFFF
+ 10128 91fe 0FB6C0 movzbl %al, %eax
+ 10129 9201 89C2 mov %eax, %edx
+ 10130 9203 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 10130 000000
+ 10131 920a 0FB61402 movzbl (%rdx,%rax), %edx
+ 10132 920e 89C8 mov %ecx, %eax
+ 10133 9210 889405F0 movb %dl, -5648(%rbp,%rax)
+ 10133 E9FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 10134 .loc 2 741 0
+ 10135 9217 838588F4 addl $1, -2936(%rbp)
+ 10135 FFFF01
+ 10136 .L250:
+ 10137 921e 83BD88F4 cmpl $3, -2936(%rbp)
+ 10137 FFFF03
+ 10138 9225 76C1 jbe .L251
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 10139 .loc 2 743 0
+ 10140 9227 8B85F0E9 movl -5648(%rbp), %eax
+ 10140 FFFF
+ 10141 .LBE1301:
+ 10142 .LBE1300:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 10143 .loc 2 1631 0
+ 10144 922d 89857CF4 movl %eax, -2948(%rbp)
+ 10144 FFFF
+ 10145 9233 8B857CF4 movl -2948(%rbp), %eax
+ 10145 FFFF
+ 10146 9239 89858CF4 movl %eax, -2932(%rbp)
+ 10146 FFFF
+ 10147 .LBB1302:
+ 10148 .LBB1303:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+ 10149 .loc 2 1196 0
+ 10150 923f 8B858CF4 movl -2932(%rbp), %eax
+ 10150 FFFF
+ 10151 9245 C1C808 rorl $8, %eax
+ 10152 .LBE1303:
+ 10153 .LBE1302:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+ 10154 .loc 2 1632 0
+ 10155 9248 89857CF4 movl %eax, -2948(%rbp)
+ 10155 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 328
+
+
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+ 10156 .loc 2 1633 0
+ 10157 924e 8B8580F4 movl -2944(%rbp), %eax
+ 10157 FFFF
+ 10158 9254 31857CF4 xorl %eax, -2948(%rbp)
+ 10158 FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 10159 .loc 2 1635 0
+ 10160 925a 8B857CF4 movl -2948(%rbp), %eax
+ 10160 FFFF
+ 10161 9260 89850CEA movl %eax, -5620(%rbp)
+ 10161 FFFF
+ 10162 9266 8B850CEA movl -5620(%rbp), %eax
+ 10162 FFFF
+ 10163 926c 898508EA movl %eax, -5624(%rbp)
+ 10163 FFFF
+ 10164 9272 8B8508EA movl -5624(%rbp), %eax
+ 10164 FFFF
+ 10165 9278 898504EA movl %eax, -5628(%rbp)
+ 10165 FFFF
+ 10166 927e 8B8504EA movl -5628(%rbp), %eax
+ 10166 FFFF
+ 10167 9284 898500EA movl %eax, -5632(%rbp)
+ 10167 FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 10168 .loc 2 1636 0
+ 10169 928a F30F6F85 movdqu -5632(%rbp), %xmm0
+ 10169 00EAFFFF
+ 10170 .LBE1299:
+ 10171 .LBE1298:
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 10172 .loc 2 1815 0
+ 10173 9292 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 10173 C0E5FFFF
+ 10174 929a 660F6F85 movdqa -6800(%rbp), %xmm0
+ 10174 70E5FFFF
+ 10175 92a2 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 10175 90F4FFFF
+ 10176 .LBB1304:
+ 10177 .LBB1305:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 10178 .loc 2 1565 0
+ 10179 92aa F30F6F85 movdqu -2928(%rbp), %xmm0
+ 10179 90F4FFFF
+ 10180 92b2 660F7F85 movdqa %xmm0, -6592(%rbp)
+ 10180 40E6FFFF
+ 10181 92ba 660F6F85 movdqa -6592(%rbp), %xmm0
+ 10181 40E6FFFF
+ 10182 92c2 F30F7F85 movdqu %xmm0, -2912(%rbp)
+ 10182 A0F4FFFF
+ 10183 .LBB1306:
+ 10184 .LBB1307:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10185 .loc 2 1282 0
+ 10186 92ca F30F6F85 movdqu -2912(%rbp), %xmm0
+ 10186 A0F4FFFF
+ 10187 92d2 F30F7F85 movdqu %xmm0, -5616(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 329
+
+
+ 10187 10EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10188 .loc 2 1283 0
+ 10189 92da 8B8518EA movl -5608(%rbp), %eax
+ 10189 FFFF
+ 10190 92e0 89851CEA movl %eax, -5604(%rbp)
+ 10190 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10191 .loc 2 1284 0
+ 10192 92e6 8B8514EA movl -5612(%rbp), %eax
+ 10192 FFFF
+ 10193 92ec 898518EA movl %eax, -5608(%rbp)
+ 10193 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10194 .loc 2 1285 0
+ 10195 92f2 8B8510EA movl -5616(%rbp), %eax
+ 10195 FFFF
+ 10196 92f8 898514EA movl %eax, -5612(%rbp)
+ 10196 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10197 .loc 2 1286 0
+ 10198 92fe C78510EA movl $0, -5616(%rbp)
+ 10198 FFFF0000
+ 10198 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10199 .loc 2 1287 0
+ 10200 9308 F30F6F85 movdqu -5616(%rbp), %xmm0
+ 10200 10EAFFFF
+ 10201 .LBE1307:
+ 10202 .LBE1306:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10203 .loc 2 1567 0
+ 10204 9310 660F7F85 movdqa %xmm0, -6592(%rbp)
+ 10204 40E6FFFF
+ 10205 9318 660F6F85 movdqa -6592(%rbp), %xmm0
+ 10205 40E6FFFF
+ 10206 9320 660FEF85 pxor -2928(%rbp), %xmm0
+ 10206 90F4FFFF
+ 10207 9328 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 10207 90F4FFFF
+ 10208 9330 660F6F85 movdqa -6592(%rbp), %xmm0
+ 10208 40E6FFFF
+ 10209 9338 F30F7F85 movdqu %xmm0, -2896(%rbp)
+ 10209 B0F4FFFF
+ 10210 .LBB1308:
+ 10211 .LBB1309:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10212 .loc 2 1282 0
+ 10213 9340 F30F6F85 movdqu -2896(%rbp), %xmm0
+ 10213 B0F4FFFF
+ 10214 9348 F30F7F85 movdqu %xmm0, -5600(%rbp)
+ 10214 20EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10215 .loc 2 1283 0
+ 10216 9350 8B8528EA movl -5592(%rbp), %eax
+ 10216 FFFF
+ 10217 9356 89852CEA movl %eax, -5588(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 330
+
+
+ 10217 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10218 .loc 2 1284 0
+ 10219 935c 8B8524EA movl -5596(%rbp), %eax
+ 10219 FFFF
+ 10220 9362 898528EA movl %eax, -5592(%rbp)
+ 10220 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10221 .loc 2 1285 0
+ 10222 9368 8B8520EA movl -5600(%rbp), %eax
+ 10222 FFFF
+ 10223 936e 898524EA movl %eax, -5596(%rbp)
+ 10223 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10224 .loc 2 1286 0
+ 10225 9374 C78520EA movl $0, -5600(%rbp)
+ 10225 FFFF0000
+ 10225 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10226 .loc 2 1287 0
+ 10227 937e F30F6F85 movdqu -5600(%rbp), %xmm0
+ 10227 20EAFFFF
+ 10228 .LBE1309:
+ 10229 .LBE1308:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10230 .loc 2 1568 0
+ 10231 9386 660F7F85 movdqa %xmm0, -6592(%rbp)
+ 10231 40E6FFFF
+ 10232 938e 660F6F85 movdqa -6592(%rbp), %xmm0
+ 10232 40E6FFFF
+ 10233 9396 660FEF85 pxor -2928(%rbp), %xmm0
+ 10233 90F4FFFF
+ 10234 939e F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 10234 90F4FFFF
+ 10235 93a6 660F6F85 movdqa -6592(%rbp), %xmm0
+ 10235 40E6FFFF
+ 10236 93ae F30F7F85 movdqu %xmm0, -2880(%rbp)
+ 10236 C0F4FFFF
+ 10237 .LBB1310:
+ 10238 .LBB1311:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10239 .loc 2 1282 0
+ 10240 93b6 F30F6F85 movdqu -2880(%rbp), %xmm0
+ 10240 C0F4FFFF
+ 10241 93be F30F7F85 movdqu %xmm0, -5584(%rbp)
+ 10241 30EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10242 .loc 2 1283 0
+ 10243 93c6 8B8538EA movl -5576(%rbp), %eax
+ 10243 FFFF
+ 10244 93cc 89853CEA movl %eax, -5572(%rbp)
+ 10244 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10245 .loc 2 1284 0
+ 10246 93d2 8B8534EA movl -5580(%rbp), %eax
+ 10246 FFFF
+ 10247 93d8 898538EA movl %eax, -5576(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 331
+
+
+ 10247 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10248 .loc 2 1285 0
+ 10249 93de 8B8530EA movl -5584(%rbp), %eax
+ 10249 FFFF
+ 10250 93e4 898534EA movl %eax, -5580(%rbp)
+ 10250 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10251 .loc 2 1286 0
+ 10252 93ea C78530EA movl $0, -5584(%rbp)
+ 10252 FFFF0000
+ 10252 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10253 .loc 2 1287 0
+ 10254 93f4 F30F6F85 movdqu -5584(%rbp), %xmm0
+ 10254 30EAFFFF
+ 10255 .LBE1311:
+ 10256 .LBE1310:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10257 .loc 2 1569 0
+ 10258 93fc 660F7F85 movdqa %xmm0, -6592(%rbp)
+ 10258 40E6FFFF
+ 10259 9404 660F6F85 movdqa -6592(%rbp), %xmm0
+ 10259 40E6FFFF
+ 10260 940c 660FEF85 pxor -2928(%rbp), %xmm0
+ 10260 90F4FFFF
+ 10261 9414 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 10261 90F4FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10262 .loc 2 1571 0
+ 10263 941c F30F6F85 movdqu -2928(%rbp), %xmm0
+ 10263 90F4FFFF
+ 10264 .LBE1305:
+ 10265 .LBE1304:
+1817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k12 :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+ 10266 .loc 2 1817 0
+ 10267 9424 660F7F85 movdqa %xmm0, -6752(%rbp)
+ 10267 A0E5FFFF
+1818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k18 : k19 : k20 : k21 */
+ 10268 .loc 2 1818 0
+ 10269 942c 660F6F85 movdqa -6752(%rbp), %xmm0
+ 10269 A0E5FFFF
+ 10270 9434 660FEF85 pxor -6720(%rbp), %xmm0
+ 10270 C0E5FFFF
+ 10271 943c 660F7F85 movdqa %xmm0, -6752(%rbp)
+ 10271 A0E5FFFF
+ 10272 9444 660F6F85 movdqa -6784(%rbp), %xmm0
+ 10272 80E5FFFF
+ 10273 944c F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 10273 D0F4FFFF
+ 10274 .LBB1312:
+ 10275 .LBB1313:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 10276 .loc 2 1565 0
+ 10277 9454 F30F6F85 movdqu -2864(%rbp), %xmm0
+ 10277 D0F4FFFF
+ 10278 945c 660F7F85 movdqa %xmm0, -6576(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 332
+
+
+ 10278 50E6FFFF
+ 10279 9464 660F6F85 movdqa -6576(%rbp), %xmm0
+ 10279 50E6FFFF
+ 10280 946c F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 10280 E0F4FFFF
+ 10281 .LBB1314:
+ 10282 .LBB1315:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10283 .loc 2 1282 0
+ 10284 9474 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 10284 E0F4FFFF
+ 10285 947c F30F7F85 movdqu %xmm0, -5568(%rbp)
+ 10285 40EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10286 .loc 2 1283 0
+ 10287 9484 8B8548EA movl -5560(%rbp), %eax
+ 10287 FFFF
+ 10288 948a 89854CEA movl %eax, -5556(%rbp)
+ 10288 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10289 .loc 2 1284 0
+ 10290 9490 8B8544EA movl -5564(%rbp), %eax
+ 10290 FFFF
+ 10291 9496 898548EA movl %eax, -5560(%rbp)
+ 10291 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10292 .loc 2 1285 0
+ 10293 949c 8B8540EA movl -5568(%rbp), %eax
+ 10293 FFFF
+ 10294 94a2 898544EA movl %eax, -5564(%rbp)
+ 10294 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10295 .loc 2 1286 0
+ 10296 94a8 C78540EA movl $0, -5568(%rbp)
+ 10296 FFFF0000
+ 10296 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10297 .loc 2 1287 0
+ 10298 94b2 F30F6F85 movdqu -5568(%rbp), %xmm0
+ 10298 40EAFFFF
+ 10299 .LBE1315:
+ 10300 .LBE1314:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10301 .loc 2 1567 0
+ 10302 94ba 660F7F85 movdqa %xmm0, -6576(%rbp)
+ 10302 50E6FFFF
+ 10303 94c2 660F6F85 movdqa -6576(%rbp), %xmm0
+ 10303 50E6FFFF
+ 10304 94ca 660FEF85 pxor -2864(%rbp), %xmm0
+ 10304 D0F4FFFF
+ 10305 94d2 F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 10305 D0F4FFFF
+ 10306 94da 660F6F85 movdqa -6576(%rbp), %xmm0
+ 10306 50E6FFFF
+ 10307 94e2 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 10307 F0F4FFFF
+ 10308 .LBB1316:
+
GAS LISTING /tmp/ccMa7HLZ.s page 333
+
+
+ 10309 .LBB1317:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10310 .loc 2 1282 0
+ 10311 94ea F30F6F85 movdqu -2832(%rbp), %xmm0
+ 10311 F0F4FFFF
+ 10312 94f2 F30F7F85 movdqu %xmm0, -5552(%rbp)
+ 10312 50EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10313 .loc 2 1283 0
+ 10314 94fa 8B8558EA movl -5544(%rbp), %eax
+ 10314 FFFF
+ 10315 9500 89855CEA movl %eax, -5540(%rbp)
+ 10315 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10316 .loc 2 1284 0
+ 10317 9506 8B8554EA movl -5548(%rbp), %eax
+ 10317 FFFF
+ 10318 950c 898558EA movl %eax, -5544(%rbp)
+ 10318 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10319 .loc 2 1285 0
+ 10320 9512 8B8550EA movl -5552(%rbp), %eax
+ 10320 FFFF
+ 10321 9518 898554EA movl %eax, -5548(%rbp)
+ 10321 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10322 .loc 2 1286 0
+ 10323 951e C78550EA movl $0, -5552(%rbp)
+ 10323 FFFF0000
+ 10323 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10324 .loc 2 1287 0
+ 10325 9528 F30F6F85 movdqu -5552(%rbp), %xmm0
+ 10325 50EAFFFF
+ 10326 .LBE1317:
+ 10327 .LBE1316:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10328 .loc 2 1568 0
+ 10329 9530 660F7F85 movdqa %xmm0, -6576(%rbp)
+ 10329 50E6FFFF
+ 10330 9538 660F6F85 movdqa -6576(%rbp), %xmm0
+ 10330 50E6FFFF
+ 10331 9540 660FEF85 pxor -2864(%rbp), %xmm0
+ 10331 D0F4FFFF
+ 10332 9548 F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 10332 D0F4FFFF
+ 10333 9550 660F6F85 movdqa -6576(%rbp), %xmm0
+ 10333 50E6FFFF
+ 10334 9558 F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 10334 00F5FFFF
+ 10335 .LBB1318:
+ 10336 .LBB1319:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10337 .loc 2 1282 0
+ 10338 9560 F30F6F85 movdqu -2816(%rbp), %xmm0
+ 10338 00F5FFFF
+ 10339 9568 F30F7F85 movdqu %xmm0, -5536(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 334
+
+
+ 10339 60EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10340 .loc 2 1283 0
+ 10341 9570 8B8568EA movl -5528(%rbp), %eax
+ 10341 FFFF
+ 10342 9576 89856CEA movl %eax, -5524(%rbp)
+ 10342 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10343 .loc 2 1284 0
+ 10344 957c 8B8564EA movl -5532(%rbp), %eax
+ 10344 FFFF
+ 10345 9582 898568EA movl %eax, -5528(%rbp)
+ 10345 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10346 .loc 2 1285 0
+ 10347 9588 8B8560EA movl -5536(%rbp), %eax
+ 10347 FFFF
+ 10348 958e 898564EA movl %eax, -5532(%rbp)
+ 10348 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10349 .loc 2 1286 0
+ 10350 9594 C78560EA movl $0, -5536(%rbp)
+ 10350 FFFF0000
+ 10350 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10351 .loc 2 1287 0
+ 10352 959e F30F6F85 movdqu -5536(%rbp), %xmm0
+ 10352 60EAFFFF
+ 10353 .LBE1319:
+ 10354 .LBE1318:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10355 .loc 2 1569 0
+ 10356 95a6 660F7F85 movdqa %xmm0, -6576(%rbp)
+ 10356 50E6FFFF
+ 10357 95ae 660F6F85 movdqa -6576(%rbp), %xmm0
+ 10357 50E6FFFF
+ 10358 95b6 660FEF85 pxor -2864(%rbp), %xmm0
+ 10358 D0F4FFFF
+ 10359 95be F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 10359 D0F4FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10360 .loc 2 1571 0
+ 10361 95c6 F30F6F85 movdqu -2864(%rbp), %xmm0
+ 10361 D0F4FFFF
+ 10362 .LBE1313:
+ 10363 .LBE1312:
+1819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k16 :k16^k17: k17 : 0 */
+ 10364 .loc 2 1819 0
+ 10365 95ce 660F7F85 movdqa %xmm0, -6736(%rbp)
+ 10365 B0E5FFFF
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k21 : k21 : k21 : k21 */
+ 10366 .loc 2 1820 0
+ 10367 95d6 660F6F85 movdqa -6752(%rbp), %xmm0
+ 10367 A0E5FFFF
+ 10368 95de 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 10368 C0E5FFFF
+ 10369 95e6 660F6F85 movdqa -6720(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 335
+
+
+ 10369 C0E5FFFF
+ 10370 95ee F30F7F85 movdqu %xmm0, -2800(%rbp)
+ 10370 10F5FFFF
+ 10371 .LBB1320:
+ 10372 .LBB1321:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10373 .loc 2 1357 0
+ 10374 95f6 F30F6F85 movdqu -2800(%rbp), %xmm0
+ 10374 10F5FFFF
+ 10375 95fe F30F7F85 movdqu %xmm0, -5520(%rbp)
+ 10375 70EAFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 10376 .loc 2 1358 0
+ 10377 9606 8B857CEA movl -5508(%rbp), %eax
+ 10377 FFFF
+ 10378 960c 898578EA movl %eax, -5512(%rbp)
+ 10378 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 10379 .loc 2 1359 0
+ 10380 9612 8B857CEA movl -5508(%rbp), %eax
+ 10380 FFFF
+ 10381 9618 898574EA movl %eax, -5516(%rbp)
+ 10381 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 10382 .loc 2 1360 0
+ 10383 961e 8B857CEA movl -5508(%rbp), %eax
+ 10383 FFFF
+ 10384 9624 898570EA movl %eax, -5520(%rbp)
+ 10384 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10385 .loc 2 1361 0
+ 10386 962a F30F6F85 movdqu -5520(%rbp), %xmm0
+ 10386 70EAFFFF
+ 10387 .LBE1321:
+ 10388 .LBE1320:
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k21 : k21 : k21 : k21 */
+ 10389 .loc 2 1820 0
+ 10390 9632 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 10390 C0E5FFFF
+1821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k22 : k23 : x : x */
+ 10391 .loc 2 1821 0
+ 10392 963a 660F6F85 movdqa -6736(%rbp), %xmm0
+ 10392 B0E5FFFF
+ 10393 9642 660FEF85 pxor -6720(%rbp), %xmm0
+ 10393 C0E5FFFF
+ 10394 964a 660F7F85 movdqa %xmm0, -6736(%rbp)
+ 10394 B0E5FFFF
+ 10395 9652 660F6F85 movdqa -6784(%rbp), %xmm0
+ 10395 80E5FFFF
+ 10396 965a F30F7F85 movdqu %xmm0, -2768(%rbp)
+ 10396 30F5FFFF
+ 10397 9662 660F6F85 movdqa -6752(%rbp), %xmm0
+ 10397 A0E5FFFF
+ 10398 966a F30F7F85 movdqu %xmm0, -2784(%rbp)
+ 10398 20F5FFFF
+ 10399 .LBB1322:
+ 10400 .LBB1323:
+
GAS LISTING /tmp/ccMa7HLZ.s page 336
+
+
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+ 10401 .loc 2 1471 0
+ 10402 9672 F30F6F85 movdqu -2768(%rbp), %xmm0
+ 10402 30F5FFFF
+ 10403 967a F30F7F85 movdqu %xmm0, -5488(%rbp)
+ 10403 90EAFFFF
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+ 10404 .loc 2 1472 0
+ 10405 9682 F30F6F85 movdqu -2784(%rbp), %xmm0
+ 10405 20F5FFFF
+ 10406 968a F30F7F85 movdqu %xmm0, -5504(%rbp)
+ 10406 80EAFFFF
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+ 10407 .loc 2 1474 0
+ 10408 9692 8B8580EA movl -5504(%rbp), %eax
+ 10408 FFFF
+ 10409 9698 898598EA movl %eax, -5480(%rbp)
+ 10409 FFFF
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+ 10410 .loc 2 1475 0
+ 10411 969e 8B8584EA movl -5500(%rbp), %eax
+ 10411 FFFF
+ 10412 96a4 89859CEA movl %eax, -5476(%rbp)
+ 10412 FFFF
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+ 10413 .loc 2 1477 0
+ 10414 96aa F30F6F85 movdqu -5488(%rbp), %xmm0
+ 10414 90EAFFFF
+ 10415 .LBE1323:
+ 10416 .LBE1322:
+1822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k16 : k17 : k18 : k19 */
+ 10417 .loc 2 1822 0
+ 10418 96b2 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 10418 80E5FFFF
+1823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[4] = v1; /* K16:K17:K18:K19 */
+ 10419 .loc 2 1823 0
+ 10420 96ba 488B8588 movq -6264(%rbp), %rax
+ 10420 E7FFFF
+ 10421 96c1 4883C040 addq $64, %rax
+ 10422 96c5 660F6F85 movdqa -6784(%rbp), %xmm0
+ 10422 80E5FFFF
+ 10423 96cd 660F7F00 movdqa %xmm0, (%rax)
+ 10424 96d1 660F6F85 movdqa -6752(%rbp), %xmm0
+ 10424 A0E5FFFF
+ 10425 96d9 F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 10425 50F5FFFF
+ 10426 96e1 660F6F85 movdqa -6736(%rbp), %xmm0
+ 10426 B0E5FFFF
+ 10427 96e9 F30F7F85 movdqu %xmm0, -2752(%rbp)
+ 10427 40F5FFFF
+ 10428 .LBB1324:
+ 10429 .LBB1325:
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+ 10430 .loc 2 1503 0
+ 10431 96f1 F30F6F85 movdqu -2736(%rbp), %xmm0
+ 10431 50F5FFFF
+ 10432 96f9 F30F7F85 movdqu %xmm0, -5456(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 337
+
+
+ 10432 B0EAFFFF
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+ 10433 .loc 2 1504 0
+ 10434 9701 F30F6F85 movdqu -2752(%rbp), %xmm0
+ 10434 40F5FFFF
+ 10435 9709 F30F7F85 movdqu %xmm0, -5472(%rbp)
+ 10435 A0EAFFFF
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[0] = ww.columns[2];
+ 10436 .loc 2 1506 0
+ 10437 9711 8B85B8EA movl -5448(%rbp), %eax
+ 10437 FFFF
+ 10438 9717 8985B0EA movl %eax, -5456(%rbp)
+ 10438 FFFF
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[1] = ww.columns[3];
+ 10439 .loc 2 1507 0
+ 10440 971d 8B85BCEA movl -5444(%rbp), %eax
+ 10440 FFFF
+ 10441 9723 8985B4EA movl %eax, -5452(%rbp)
+ 10441 FFFF
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+ 10442 .loc 2 1508 0
+ 10443 9729 8B85A0EA movl -5472(%rbp), %eax
+ 10443 FFFF
+ 10444 972f 8985B8EA movl %eax, -5448(%rbp)
+ 10444 FFFF
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+ 10445 .loc 2 1509 0
+ 10446 9735 8B85A4EA movl -5468(%rbp), %eax
+ 10446 FFFF
+ 10447 973b 8985BCEA movl %eax, -5444(%rbp)
+ 10447 FFFF
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+ 10448 .loc 2 1511 0
+ 10449 9741 F30F6F85 movdqu -5456(%rbp), %xmm0
+ 10449 B0EAFFFF
+ 10450 .LBE1325:
+ 10451 .LBE1324:
+1825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k20 : k21 : k22 : k23 */
+ 10452 .loc 2 1825 0
+ 10453 9749 660F7F85 movdqa %xmm0, -6768(%rbp)
+ 10453 90E5FFFF
+1826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[5] = v2; /* K20:K21:K22:K23 */
+ 10454 .loc 2 1826 0
+ 10455 9751 488B8588 movq -6264(%rbp), %rax
+ 10455 E7FFFF
+ 10456 9758 4883C050 addq $80, %rax
+ 10457 975c 660F6F85 movdqa -6768(%rbp), %xmm0
+ 10457 90E5FFFF
+ 10458 9764 660F7F00 movdqa %xmm0, (%rax)
+ 10459 9768 660F6F85 movdqa -6752(%rbp), %xmm0
+ 10459 A0E5FFFF
+ 10460 9770 F30F7F85 movdqu %xmm0, -2720(%rbp)
+ 10460 60F5FFFF
+ 10461 .LBB1326:
+ 10462 .LBB1327:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 10463 .loc 2 1565 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 338
+
+
+ 10464 9778 F30F6F85 movdqu -2720(%rbp), %xmm0
+ 10464 60F5FFFF
+ 10465 9780 660F7F85 movdqa %xmm0, -6560(%rbp)
+ 10465 60E6FFFF
+ 10466 9788 660F6F85 movdqa -6560(%rbp), %xmm0
+ 10466 60E6FFFF
+ 10467 9790 F30F7F85 movdqu %xmm0, -2704(%rbp)
+ 10467 70F5FFFF
+ 10468 .LBB1328:
+ 10469 .LBB1329:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10470 .loc 2 1282 0
+ 10471 9798 F30F6F85 movdqu -2704(%rbp), %xmm0
+ 10471 70F5FFFF
+ 10472 97a0 F30F7F85 movdqu %xmm0, -5440(%rbp)
+ 10472 C0EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10473 .loc 2 1283 0
+ 10474 97a8 8B85C8EA movl -5432(%rbp), %eax
+ 10474 FFFF
+ 10475 97ae 8985CCEA movl %eax, -5428(%rbp)
+ 10475 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10476 .loc 2 1284 0
+ 10477 97b4 8B85C4EA movl -5436(%rbp), %eax
+ 10477 FFFF
+ 10478 97ba 8985C8EA movl %eax, -5432(%rbp)
+ 10478 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10479 .loc 2 1285 0
+ 10480 97c0 8B85C0EA movl -5440(%rbp), %eax
+ 10480 FFFF
+ 10481 97c6 8985C4EA movl %eax, -5436(%rbp)
+ 10481 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10482 .loc 2 1286 0
+ 10483 97cc C785C0EA movl $0, -5440(%rbp)
+ 10483 FFFF0000
+ 10483 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10484 .loc 2 1287 0
+ 10485 97d6 F30F6F85 movdqu -5440(%rbp), %xmm0
+ 10485 C0EAFFFF
+ 10486 .LBE1329:
+ 10487 .LBE1328:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10488 .loc 2 1567 0
+ 10489 97de 660F7F85 movdqa %xmm0, -6560(%rbp)
+ 10489 60E6FFFF
+ 10490 97e6 660F6F85 movdqa -6560(%rbp), %xmm0
+ 10490 60E6FFFF
+ 10491 97ee 660FEF85 pxor -2720(%rbp), %xmm0
+ 10491 60F5FFFF
+ 10492 97f6 F30F7F85 movdqu %xmm0, -2720(%rbp)
+ 10492 60F5FFFF
+ 10493 97fe 660F6F85 movdqa -6560(%rbp), %xmm0
+ 10493 60E6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 339
+
+
+ 10494 9806 F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 10494 80F5FFFF
+ 10495 .LBB1330:
+ 10496 .LBB1331:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10497 .loc 2 1282 0
+ 10498 980e F30F6F85 movdqu -2688(%rbp), %xmm0
+ 10498 80F5FFFF
+ 10499 9816 F30F7F85 movdqu %xmm0, -5424(%rbp)
+ 10499 D0EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10500 .loc 2 1283 0
+ 10501 981e 8B85D8EA movl -5416(%rbp), %eax
+ 10501 FFFF
+ 10502 9824 8985DCEA movl %eax, -5412(%rbp)
+ 10502 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10503 .loc 2 1284 0
+ 10504 982a 8B85D4EA movl -5420(%rbp), %eax
+ 10504 FFFF
+ 10505 9830 8985D8EA movl %eax, -5416(%rbp)
+ 10505 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10506 .loc 2 1285 0
+ 10507 9836 8B85D0EA movl -5424(%rbp), %eax
+ 10507 FFFF
+ 10508 983c 8985D4EA movl %eax, -5420(%rbp)
+ 10508 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10509 .loc 2 1286 0
+ 10510 9842 C785D0EA movl $0, -5424(%rbp)
+ 10510 FFFF0000
+ 10510 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10511 .loc 2 1287 0
+ 10512 984c F30F6F85 movdqu -5424(%rbp), %xmm0
+ 10512 D0EAFFFF
+ 10513 .LBE1331:
+ 10514 .LBE1330:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10515 .loc 2 1568 0
+ 10516 9854 660F7F85 movdqa %xmm0, -6560(%rbp)
+ 10516 60E6FFFF
+ 10517 985c 660F6F85 movdqa -6560(%rbp), %xmm0
+ 10517 60E6FFFF
+ 10518 9864 660FEF85 pxor -2720(%rbp), %xmm0
+ 10518 60F5FFFF
+ 10519 986c F30F7F85 movdqu %xmm0, -2720(%rbp)
+ 10519 60F5FFFF
+ 10520 9874 660F6F85 movdqa -6560(%rbp), %xmm0
+ 10520 60E6FFFF
+ 10521 987c F30F7F85 movdqu %xmm0, -2672(%rbp)
+ 10521 90F5FFFF
+ 10522 .LBB1332:
+ 10523 .LBB1333:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10524 .loc 2 1282 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 340
+
+
+ 10525 9884 F30F6F85 movdqu -2672(%rbp), %xmm0
+ 10525 90F5FFFF
+ 10526 988c F30F7F85 movdqu %xmm0, -5408(%rbp)
+ 10526 E0EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10527 .loc 2 1283 0
+ 10528 9894 8B85E8EA movl -5400(%rbp), %eax
+ 10528 FFFF
+ 10529 989a 8985ECEA movl %eax, -5396(%rbp)
+ 10529 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10530 .loc 2 1284 0
+ 10531 98a0 8B85E4EA movl -5404(%rbp), %eax
+ 10531 FFFF
+ 10532 98a6 8985E8EA movl %eax, -5400(%rbp)
+ 10532 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10533 .loc 2 1285 0
+ 10534 98ac 8B85E0EA movl -5408(%rbp), %eax
+ 10534 FFFF
+ 10535 98b2 8985E4EA movl %eax, -5404(%rbp)
+ 10535 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10536 .loc 2 1286 0
+ 10537 98b8 C785E0EA movl $0, -5408(%rbp)
+ 10537 FFFF0000
+ 10537 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10538 .loc 2 1287 0
+ 10539 98c2 F30F6F85 movdqu -5408(%rbp), %xmm0
+ 10539 E0EAFFFF
+ 10540 .LBE1333:
+ 10541 .LBE1332:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10542 .loc 2 1569 0
+ 10543 98ca 660F7F85 movdqa %xmm0, -6560(%rbp)
+ 10543 60E6FFFF
+ 10544 98d2 660F6F85 movdqa -6560(%rbp), %xmm0
+ 10544 60E6FFFF
+ 10545 98da 660FEF85 pxor -2720(%rbp), %xmm0
+ 10545 60F5FFFF
+ 10546 98e2 F30F7F85 movdqu %xmm0, -2720(%rbp)
+ 10546 60F5FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10547 .loc 2 1571 0
+ 10548 98ea F30F6F85 movdqu -2720(%rbp), %xmm0
+ 10548 60F5FFFF
+ 10549 .LBE1327:
+ 10550 .LBE1326:
+1829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k18 :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+ 10551 .loc 2 1829 0
+ 10552 98f2 660F7F85 movdqa %xmm0, -6800(%rbp)
+ 10552 70E5FFFF
+ 10553 98fa 660F6F85 movdqa -6736(%rbp), %xmm0
+ 10553 B0E5FFFF
+ 10554 9902 F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 10554 A0F5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 341
+
+
+ 10555 .LBB1334:
+ 10556 .LBB1335:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 10557 .loc 2 1565 0
+ 10558 990a F30F6F85 movdqu -2656(%rbp), %xmm0
+ 10558 A0F5FFFF
+ 10559 9912 660F7F85 movdqa %xmm0, -6544(%rbp)
+ 10559 70E6FFFF
+ 10560 991a 660F6F85 movdqa -6544(%rbp), %xmm0
+ 10560 70E6FFFF
+ 10561 9922 F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 10561 B0F5FFFF
+ 10562 .LBB1336:
+ 10563 .LBB1337:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10564 .loc 2 1282 0
+ 10565 992a F30F6F85 movdqu -2640(%rbp), %xmm0
+ 10565 B0F5FFFF
+ 10566 9932 F30F7F85 movdqu %xmm0, -5392(%rbp)
+ 10566 F0EAFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10567 .loc 2 1283 0
+ 10568 993a 8B85F8EA movl -5384(%rbp), %eax
+ 10568 FFFF
+ 10569 9940 8985FCEA movl %eax, -5380(%rbp)
+ 10569 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10570 .loc 2 1284 0
+ 10571 9946 8B85F4EA movl -5388(%rbp), %eax
+ 10571 FFFF
+ 10572 994c 8985F8EA movl %eax, -5384(%rbp)
+ 10572 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10573 .loc 2 1285 0
+ 10574 9952 8B85F0EA movl -5392(%rbp), %eax
+ 10574 FFFF
+ 10575 9958 8985F4EA movl %eax, -5388(%rbp)
+ 10575 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10576 .loc 2 1286 0
+ 10577 995e C785F0EA movl $0, -5392(%rbp)
+ 10577 FFFF0000
+ 10577 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10578 .loc 2 1287 0
+ 10579 9968 F30F6F85 movdqu -5392(%rbp), %xmm0
+ 10579 F0EAFFFF
+ 10580 .LBE1337:
+ 10581 .LBE1336:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10582 .loc 2 1567 0
+ 10583 9970 660F7F85 movdqa %xmm0, -6544(%rbp)
+ 10583 70E6FFFF
+ 10584 9978 660F6F85 movdqa -6544(%rbp), %xmm0
+ 10584 70E6FFFF
+ 10585 9980 660FEF85 pxor -2656(%rbp), %xmm0
+ 10585 A0F5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 342
+
+
+ 10586 9988 F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 10586 A0F5FFFF
+ 10587 9990 660F6F85 movdqa -6544(%rbp), %xmm0
+ 10587 70E6FFFF
+ 10588 9998 F30F7F85 movdqu %xmm0, -2624(%rbp)
+ 10588 C0F5FFFF
+ 10589 .LBB1338:
+ 10590 .LBB1339:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10591 .loc 2 1282 0
+ 10592 99a0 F30F6F85 movdqu -2624(%rbp), %xmm0
+ 10592 C0F5FFFF
+ 10593 99a8 F30F7F85 movdqu %xmm0, -5376(%rbp)
+ 10593 00EBFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10594 .loc 2 1283 0
+ 10595 99b0 8B8508EB movl -5368(%rbp), %eax
+ 10595 FFFF
+ 10596 99b6 89850CEB movl %eax, -5364(%rbp)
+ 10596 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10597 .loc 2 1284 0
+ 10598 99bc 8B8504EB movl -5372(%rbp), %eax
+ 10598 FFFF
+ 10599 99c2 898508EB movl %eax, -5368(%rbp)
+ 10599 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10600 .loc 2 1285 0
+ 10601 99c8 8B8500EB movl -5376(%rbp), %eax
+ 10601 FFFF
+ 10602 99ce 898504EB movl %eax, -5372(%rbp)
+ 10602 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10603 .loc 2 1286 0
+ 10604 99d4 C78500EB movl $0, -5376(%rbp)
+ 10604 FFFF0000
+ 10604 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10605 .loc 2 1287 0
+ 10606 99de F30F6F85 movdqu -5376(%rbp), %xmm0
+ 10606 00EBFFFF
+ 10607 .LBE1339:
+ 10608 .LBE1338:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10609 .loc 2 1568 0
+ 10610 99e6 660F7F85 movdqa %xmm0, -6544(%rbp)
+ 10610 70E6FFFF
+ 10611 99ee 660F6F85 movdqa -6544(%rbp), %xmm0
+ 10611 70E6FFFF
+ 10612 99f6 660FEF85 pxor -2656(%rbp), %xmm0
+ 10612 A0F5FFFF
+ 10613 99fe F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 10613 A0F5FFFF
+ 10614 9a06 660F6F85 movdqa -6544(%rbp), %xmm0
+ 10614 70E6FFFF
+ 10615 9a0e F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 10615 D0F5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 343
+
+
+ 10616 .LBB1340:
+ 10617 .LBB1341:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 10618 .loc 2 1282 0
+ 10619 9a16 F30F6F85 movdqu -2608(%rbp), %xmm0
+ 10619 D0F5FFFF
+ 10620 9a1e F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 10620 10EBFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 10621 .loc 2 1283 0
+ 10622 9a26 8B8518EB movl -5352(%rbp), %eax
+ 10622 FFFF
+ 10623 9a2c 89851CEB movl %eax, -5348(%rbp)
+ 10623 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 10624 .loc 2 1284 0
+ 10625 9a32 8B8514EB movl -5356(%rbp), %eax
+ 10625 FFFF
+ 10626 9a38 898518EB movl %eax, -5352(%rbp)
+ 10626 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 10627 .loc 2 1285 0
+ 10628 9a3e 8B8510EB movl -5360(%rbp), %eax
+ 10628 FFFF
+ 10629 9a44 898514EB movl %eax, -5356(%rbp)
+ 10629 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 10630 .loc 2 1286 0
+ 10631 9a4a C78510EB movl $0, -5360(%rbp)
+ 10631 FFFF0000
+ 10631 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 10632 .loc 2 1287 0
+ 10633 9a54 F30F6F85 movdqu -5360(%rbp), %xmm0
+ 10633 10EBFFFF
+ 10634 .LBE1341:
+ 10635 .LBE1340:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10636 .loc 2 1569 0
+ 10637 9a5c 660F7F85 movdqa %xmm0, -6544(%rbp)
+ 10637 70E6FFFF
+ 10638 9a64 660F6F85 movdqa -6544(%rbp), %xmm0
+ 10638 70E6FFFF
+ 10639 9a6c 660FEF85 pxor -2656(%rbp), %xmm0
+ 10639 A0F5FFFF
+ 10640 9a74 F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 10640 A0F5FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10641 .loc 2 1571 0
+ 10642 9a7c F30F6F85 movdqu -2656(%rbp), %xmm0
+ 10642 A0F5FFFF
+ 10643 .LBE1335:
+ 10644 .LBE1334:
+1830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k22 :k22^k23: k23 : 0 */
+ 10645 .loc 2 1830 0
+ 10646 9a84 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 10646 80E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 344
+
+
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 10647 .loc 2 1831 0
+ 10648 9a8c 660F6F85 movdqa -6768(%rbp), %xmm0
+ 10648 90E5FFFF
+ 10649 9a94 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 10649 C0E5FFFF
+ 10650 9a9c 660F6F85 movdqa -6720(%rbp), %xmm0
+ 10650 C0E5FFFF
+ 10651 9aa4 F30F7F85 movdqu %xmm0, -2576(%rbp)
+ 10651 F0F5FFFF
+ 10652 .LBB1342:
+ 10653 .LBB1343:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10654 .loc 2 1681 0
+ 10655 9aac B8080000 movl $8, %eax
+ 10655 00
+ 10656 9ab1 660F6F05 movdqa vec_00(%rip), %xmm0
+ 10656 00000000
+ 10657 9ab9 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 10657 10F6FFFF
+ 10658 9ac1 89850CF6 movl %eax, -2548(%rbp)
+ 10658 FFFF
+ 10659 .LBB1344:
+ 10660 .LBB1345:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 10661 .loc 2 522 0
+ 10662 9ac7 F30F6F85 movdqu -2544(%rbp), %xmm0
+ 10662 10F6FFFF
+ 10663 9acf F30F7F85 movdqu %xmm0, -5280(%rbp)
+ 10663 60EBFFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 10664 .loc 2 523 0
+ 10665 9ad7 B8030000 movl $3, %eax
+ 10665 00
+ 10666 9adc 4898 cltq
+ 10667 9ade 8B950CF6 movl -2548(%rbp), %edx
+ 10667 FFFF
+ 10668 9ae4 89948560 movl %edx, -5280(%rbp,%rax,4)
+ 10668 EBFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 10669 .loc 2 524 0
+ 10670 9aeb F30F6F85 movdqu -5280(%rbp), %xmm0
+ 10670 60EBFFFF
+ 10671 9af3 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 10671 10F6FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10672 .loc 2 526 0
+ 10673 9afb F30F6F85 movdqu -2544(%rbp), %xmm0
+ 10673 10F6FFFF
+ 10674 .LBE1345:
+ 10675 .LBE1344:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10676 .loc 2 1681 0
+ 10677 9b03 660F7F85 movdqa %xmm0, -6512(%rbp)
+ 10677 90E6FFFF
+ 10678 9b0b F30F6F85 movdqu -2576(%rbp), %xmm0
+ 10678 F0F5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 345
+
+
+ 10679 9b13 F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 10679 20F6FFFF
+ 10680 9b1b F30F6F85 movdqu -2528(%rbp), %xmm0
+ 10680 20F6FFFF
+ 10681 9b23 F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 10681 40F6FFFF
+ 10682 9b2b 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 10682 000000
+ 10683 9b32 48898538 movq %rax, -2504(%rbp)
+ 10683 F6FFFF
+ 10684 .LBB1346:
+ 10685 .LBB1347:
+ 10686 .LBB1348:
+ 10687 .LBB1349:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 10688 .loc 2 851 0
+ 10689 9b39 660F6F05 movdqa vec_00(%rip), %xmm0
+ 10689 00000000
+ 10690 9b41 F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 10690 60F6FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10691 .loc 2 854 0
+ 10692 9b49 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 10692 00000000
+ 10693 9b51 F30F6F8D movdqu -2496(%rbp), %xmm1
+ 10693 40F6FFFF
+ 10694 9b59 F30F7F8D movdqu %xmm1, -2384(%rbp)
+ 10694 B0F6FFFF
+ 10695 9b61 F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 10695 A0F6FFFF
+ 10696 .LBB1350:
+ 10697 .LBB1351:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 10698 .loc 2 206 0
+ 10699 9b69 F30F6F85 movdqu -2400(%rbp), %xmm0
+ 10699 A0F6FFFF
+ 10700 9b71 F30F6F8D movdqu -2384(%rbp), %xmm1
+ 10700 B0F6FFFF
+ 10701 9b79 660FDBC1 pand %xmm1, %xmm0
+ 10702 .LBE1351:
+ 10703 .LBE1350:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10704 .loc 2 854 0
+ 10705 9b7d F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 10705 90F6FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 10706 .loc 2 862 0
+ 10707 9b85 660F6F05 movdqa vec_10(%rip), %xmm0
+ 10707 00000000
+ 10708 9b8d F30F6F8D movdqu -2496(%rbp), %xmm1
+ 10708 40F6FFFF
+ 10709 9b95 F30F7F8D movdqu %xmm1, -2352(%rbp)
+ 10709 D0F6FFFF
+ 10710 9b9d F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 10710 C0F6FFFF
+ 10711 .LBB1352:
+ 10712 .loc 2 2642 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 346
+
+
+ 10713 9ba5 0FB685D0 movzbl -2352(%rbp), %eax
+ 10713 F6FFFF
+ 10714 9bac 0FB695C0 movzbl -2368(%rbp), %edx
+ 10714 F6FFFF
+ 10715 9bb3 0FB6C0 movzbl %al, %eax
+ 10716 9bb6 6689852E movw %ax, -6866(%rbp)
+ 10716 E5FFFF
+ 10717 9bbd 0FB7852E movzwl -6866(%rbp), %eax
+ 10717 E5FFFF
+ 10718 9bc4 F6F2 divb %dl
+ 10719 9bc6 4189C7 movl %eax, %r15d
+ 10720 9bc9 0FB685D1 movzbl -2351(%rbp), %eax
+ 10720 F6FFFF
+ 10721 9bd0 0FB695C1 movzbl -2367(%rbp), %edx
+ 10721 F6FFFF
+ 10722 9bd7 0FB6C0 movzbl %al, %eax
+ 10723 9bda 6689852E movw %ax, -6866(%rbp)
+ 10723 E5FFFF
+ 10724 9be1 0FB7852E movzwl -6866(%rbp), %eax
+ 10724 E5FFFF
+ 10725 9be8 F6F2 divb %dl
+ 10726 9bea 8885AFE6 movb %al, -6481(%rbp)
+ 10726 FFFF
+ 10727 9bf0 0FB685D2 movzbl -2350(%rbp), %eax
+ 10727 F6FFFF
+ 10728 9bf7 0FB695C2 movzbl -2366(%rbp), %edx
+ 10728 F6FFFF
+ 10729 9bfe 0FB6C0 movzbl %al, %eax
+ 10730 9c01 6689852E movw %ax, -6866(%rbp)
+ 10730 E5FFFF
+ 10731 9c08 0FB7852E movzwl -6866(%rbp), %eax
+ 10731 E5FFFF
+ 10732 9c0f F6F2 divb %dl
+ 10733 9c11 8885AEE6 movb %al, -6482(%rbp)
+ 10733 FFFF
+ 10734 9c17 0FB685D3 movzbl -2349(%rbp), %eax
+ 10734 F6FFFF
+ 10735 9c1e 0FB695C3 movzbl -2365(%rbp), %edx
+ 10735 F6FFFF
+ 10736 9c25 0FB6C0 movzbl %al, %eax
+ 10737 9c28 6689852E movw %ax, -6866(%rbp)
+ 10737 E5FFFF
+ 10738 9c2f 0FB7852E movzwl -6866(%rbp), %eax
+ 10738 E5FFFF
+ 10739 9c36 F6F2 divb %dl
+ 10740 9c38 8885ADE6 movb %al, -6483(%rbp)
+ 10740 FFFF
+ 10741 9c3e 0FB685D4 movzbl -2348(%rbp), %eax
+ 10741 F6FFFF
+ 10742 9c45 0FB695C4 movzbl -2364(%rbp), %edx
+ 10742 F6FFFF
+ 10743 9c4c 0FB6C0 movzbl %al, %eax
+ 10744 9c4f 6689852E movw %ax, -6866(%rbp)
+ 10744 E5FFFF
+ 10745 9c56 0FB7852E movzwl -6866(%rbp), %eax
+ 10745 E5FFFF
+ 10746 9c5d F6F2 divb %dl
+
GAS LISTING /tmp/ccMa7HLZ.s page 347
+
+
+ 10747 9c5f 8885ACE6 movb %al, -6484(%rbp)
+ 10747 FFFF
+ 10748 9c65 0FB685D5 movzbl -2347(%rbp), %eax
+ 10748 F6FFFF
+ 10749 9c6c 0FB695C5 movzbl -2363(%rbp), %edx
+ 10749 F6FFFF
+ 10750 9c73 0FB6C0 movzbl %al, %eax
+ 10751 9c76 6689852E movw %ax, -6866(%rbp)
+ 10751 E5FFFF
+ 10752 9c7d 0FB7852E movzwl -6866(%rbp), %eax
+ 10752 E5FFFF
+ 10753 9c84 F6F2 divb %dl
+ 10754 9c86 4189C1 movl %eax, %r9d
+ 10755 9c89 0FB685D6 movzbl -2346(%rbp), %eax
+ 10755 F6FFFF
+ 10756 9c90 0FB695C6 movzbl -2362(%rbp), %edx
+ 10756 F6FFFF
+ 10757 9c97 0FB6C0 movzbl %al, %eax
+ 10758 9c9a 6689852E movw %ax, -6866(%rbp)
+ 10758 E5FFFF
+ 10759 9ca1 0FB7852E movzwl -6866(%rbp), %eax
+ 10759 E5FFFF
+ 10760 9ca8 F6F2 divb %dl
+ 10761 9caa 89C7 movl %eax, %edi
+ 10762 9cac 0FB685D7 movzbl -2345(%rbp), %eax
+ 10762 F6FFFF
+ 10763 9cb3 0FB695C7 movzbl -2361(%rbp), %edx
+ 10763 F6FFFF
+ 10764 9cba 0FB6C0 movzbl %al, %eax
+ 10765 9cbd 6689852E movw %ax, -6866(%rbp)
+ 10765 E5FFFF
+ 10766 9cc4 0FB7852E movzwl -6866(%rbp), %eax
+ 10766 E5FFFF
+ 10767 9ccb F6F2 divb %dl
+ 10768 9ccd 89C3 movl %eax, %ebx
+ 10769 9ccf 0FB685D8 movzbl -2344(%rbp), %eax
+ 10769 F6FFFF
+ 10770 9cd6 0FB695C8 movzbl -2360(%rbp), %edx
+ 10770 F6FFFF
+ 10771 9cdd 0FB6C0 movzbl %al, %eax
+ 10772 9ce0 6689852E movw %ax, -6866(%rbp)
+ 10772 E5FFFF
+ 10773 9ce7 0FB7852E movzwl -6866(%rbp), %eax
+ 10773 E5FFFF
+ 10774 9cee F6F2 divb %dl
+ 10775 9cf0 4189C2 movl %eax, %r10d
+ 10776 9cf3 0FB685D9 movzbl -2343(%rbp), %eax
+ 10776 F6FFFF
+ 10777 9cfa 0FB695C9 movzbl -2359(%rbp), %edx
+ 10777 F6FFFF
+ 10778 9d01 0FB6C0 movzbl %al, %eax
+ 10779 9d04 6689852E movw %ax, -6866(%rbp)
+ 10779 E5FFFF
+ 10780 9d0b 0FB7852E movzwl -6866(%rbp), %eax
+ 10780 E5FFFF
+ 10781 9d12 F6F2 divb %dl
+ 10782 9d14 4189C3 movl %eax, %r11d
+
GAS LISTING /tmp/ccMa7HLZ.s page 348
+
+
+ 10783 9d17 0FB685DA movzbl -2342(%rbp), %eax
+ 10783 F6FFFF
+ 10784 9d1e 0FB695CA movzbl -2358(%rbp), %edx
+ 10784 F6FFFF
+ 10785 9d25 0FB6C0 movzbl %al, %eax
+ 10786 9d28 6689852E movw %ax, -6866(%rbp)
+ 10786 E5FFFF
+ 10787 9d2f 0FB7852E movzwl -6866(%rbp), %eax
+ 10787 E5FFFF
+ 10788 9d36 F6F2 divb %dl
+ 10789 9d38 4189C4 movl %eax, %r12d
+ 10790 9d3b 0FB685DB movzbl -2341(%rbp), %eax
+ 10790 F6FFFF
+ 10791 9d42 0FB695CB movzbl -2357(%rbp), %edx
+ 10791 F6FFFF
+ 10792 9d49 0FB6C0 movzbl %al, %eax
+ 10793 9d4c 6689852E movw %ax, -6866(%rbp)
+ 10793 E5FFFF
+ 10794 9d53 0FB7852E movzwl -6866(%rbp), %eax
+ 10794 E5FFFF
+ 10795 9d5a F6F2 divb %dl
+ 10796 9d5c 4189C5 movl %eax, %r13d
+ 10797 9d5f 0FB685DC movzbl -2340(%rbp), %eax
+ 10797 F6FFFF
+ 10798 9d66 0FB695CC movzbl -2356(%rbp), %edx
+ 10798 F6FFFF
+ 10799 9d6d 0FB6C0 movzbl %al, %eax
+ 10800 9d70 6689852E movw %ax, -6866(%rbp)
+ 10800 E5FFFF
+ 10801 9d77 0FB7852E movzwl -6866(%rbp), %eax
+ 10801 E5FFFF
+ 10802 9d7e F6F2 divb %dl
+ 10803 9d80 4189C6 movl %eax, %r14d
+ 10804 9d83 0FB685DD movzbl -2339(%rbp), %eax
+ 10804 F6FFFF
+ 10805 9d8a 0FB695CD movzbl -2355(%rbp), %edx
+ 10805 F6FFFF
+ 10806 9d91 0FB6C0 movzbl %al, %eax
+ 10807 9d94 6689852E movw %ax, -6866(%rbp)
+ 10807 E5FFFF
+ 10808 9d9b 0FB7852E movzwl -6866(%rbp), %eax
+ 10808 E5FFFF
+ 10809 9da2 F6F2 divb %dl
+ 10810 9da4 4189C0 movl %eax, %r8d
+ 10811 9da7 0FB685DE movzbl -2338(%rbp), %eax
+ 10811 F6FFFF
+ 10812 9dae 0FB695CE movzbl -2354(%rbp), %edx
+ 10812 F6FFFF
+ 10813 9db5 0FB6C0 movzbl %al, %eax
+ 10814 9db8 6689852E movw %ax, -6866(%rbp)
+ 10814 E5FFFF
+ 10815 9dbf 0FB7852E movzwl -6866(%rbp), %eax
+ 10815 E5FFFF
+ 10816 9dc6 F6F2 divb %dl
+ 10817 9dc8 89C6 movl %eax, %esi
+ 10818 9dca 0FB685DF movzbl -2337(%rbp), %eax
+ 10818 F6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 349
+
+
+ 10819 9dd1 0FB695CF movzbl -2353(%rbp), %edx
+ 10819 F6FFFF
+ 10820 9dd8 0FB6C0 movzbl %al, %eax
+ 10821 9ddb 6689852E movw %ax, -6866(%rbp)
+ 10821 E5FFFF
+ 10822 9de2 0FB7852E movzwl -6866(%rbp), %eax
+ 10822 E5FFFF
+ 10823 9de9 F6F2 divb %dl
+ 10824 9deb 89C1 movl %eax, %ecx
+ 10825 .LBB1353:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 10826 .loc 2 346 0
+ 10827 9ded 0FB6D3 movzbl %bl, %edx
+ 10828 9df0 400FB6C7 movzbl %dil, %eax
+ 10829 9df4 48C1E208 salq $8, %rdx
+ 10830 9df8 4809C2 orq %rax, %rdx
+ 10831 9dfb 410FB6C1 movzbl %r9b, %eax
+ 10832 9dff 48C1E208 salq $8, %rdx
+ 10833 9e03 4809C2 orq %rax, %rdx
+ 10834 9e06 0FB685AC movzbl -6484(%rbp), %eax
+ 10834 E6FFFF
+ 10835 9e0d 48C1E208 salq $8, %rdx
+ 10836 9e11 4809C2 orq %rax, %rdx
+ 10837 9e14 0FB685AD movzbl -6483(%rbp), %eax
+ 10837 E6FFFF
+ 10838 9e1b 48C1E208 salq $8, %rdx
+ 10839 9e1f 4809C2 orq %rax, %rdx
+ 10840 9e22 0FB685AE movzbl -6482(%rbp), %eax
+ 10840 E6FFFF
+ 10841 9e29 48C1E208 salq $8, %rdx
+ 10842 9e2d 4809C2 orq %rax, %rdx
+ 10843 9e30 0FB685AF movzbl -6481(%rbp), %eax
+ 10843 E6FFFF
+ 10844 9e37 48C1E208 salq $8, %rdx
+ 10845 9e3b 4809C2 orq %rax, %rdx
+ 10846 9e3e 410FB6C7 movzbl %r15b, %eax
+ 10847 9e42 48C1E208 salq $8, %rdx
+ 10848 9e46 4809C2 orq %rax, %rdx
+ 10849 9e49 0FB6C1 movzbl %cl, %eax
+ 10850 9e4c 400FB6CE movzbl %sil, %ecx
+ 10851 9e50 48C1E008 salq $8, %rax
+ 10852 9e54 4809C8 orq %rcx, %rax
+ 10853 9e57 410FB6C8 movzbl %r8b, %ecx
+ 10854 9e5b 48C1E008 salq $8, %rax
+ 10855 9e5f 4809C8 orq %rcx, %rax
+ 10856 9e62 410FB6CE movzbl %r14b, %ecx
+ 10857 9e66 48C1E008 salq $8, %rax
+ 10858 9e6a 4809C8 orq %rcx, %rax
+ 10859 9e6d 410FB6CD movzbl %r13b, %ecx
+ 10860 9e71 48C1E008 salq $8, %rax
+ 10861 9e75 4809C8 orq %rcx, %rax
+ 10862 9e78 410FB6CC movzbl %r12b, %ecx
+ 10863 9e7c 48C1E008 salq $8, %rax
+ 10864 9e80 4809C8 orq %rcx, %rax
+ 10865 9e83 410FB6CB movzbl %r11b, %ecx
+ 10866 9e87 48C1E008 salq $8, %rax
+ 10867 9e8b 4809C8 orq %rcx, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 350
+
+
+ 10868 9e8e 410FB6CA movzbl %r10b, %ecx
+ 10869 9e92 48C1E008 salq $8, %rax
+ 10870 9e96 4809C8 orq %rcx, %rax
+ 10871 9e99 48899550 movq %rdx, -6832(%rbp)
+ 10871 E5FFFF
+ 10872 9ea0 48898558 movq %rax, -6824(%rbp)
+ 10872 E5FFFF
+ 10873 9ea7 660F6F85 movdqa -6832(%rbp), %xmm0
+ 10873 50E5FFFF
+ 10874 .LBE1353:
+ 10875 .LBE1352:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 10876 .loc 2 862 0
+ 10877 9eaf F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 10877 80F6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 10878 .loc 2 866 0
+ 10879 9eb7 C7855CF6 movl $0, -2468(%rbp)
+ 10879 FFFF0000
+ 10879 0000
+ 10880 9ec1 E9860200 jmp .L252
+ 10880 00
+ 10881 .L261:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10882 .loc 2 868 0
+ 10883 9ec6 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 10883 00000000
+ 10884 9ece F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 10884 F0F6FFFF
+ 10885 9ed6 F30F6F85 movdqu -2432(%rbp), %xmm0
+ 10885 80F6FFFF
+ 10886 9ede F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 10886 E0F6FFFF
+ 10887 .LBB1354:
+ 10888 .LBB1355:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 10889 .loc 2 380 0
+ 10890 9ee6 F30F6F85 movdqu -2320(%rbp), %xmm0
+ 10890 F0F6FFFF
+ 10891 9eee F30F7F85 movdqu %xmm0, -5248(%rbp)
+ 10891 80EBFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 10892 .loc 2 381 0
+ 10893 9ef6 F30F6F85 movdqu -2336(%rbp), %xmm0
+ 10893 E0F6FFFF
+ 10894 9efe F30F7F85 movdqu %xmm0, -5264(%rbp)
+ 10894 70EBFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 10895 .loc 2 383 0
+ 10896 9f06 C7850CF7 movl $0, -2292(%rbp)
+ 10896 FFFF0000
+ 10896 0000
+ 10897 9f10 EB5C jmp .L253
+ 10898 .L256:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 10899 .loc 2 385 0
+ 10900 9f12 8B850CF7 movl -2292(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 351
+
+
+ 10900 FFFF
+ 10901 9f18 89C0 mov %eax, %eax
+ 10902 9f1a 0FB68405 movzbl -5264(%rbp,%rax), %eax
+ 10902 70EBFFFF
+ 10903 9f22 84C0 testb %al, %al
+ 10904 9f24 7912 jns .L254
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 10905 .loc 2 386 0
+ 10906 9f26 8B850CF7 movl -2292(%rbp), %eax
+ 10906 FFFF
+ 10907 9f2c 89C0 mov %eax, %eax
+ 10908 9f2e C6840590 movb $0, -5232(%rbp,%rax)
+ 10908 EBFFFF00
+ 10909 9f36 EB2F jmp .L255
+ 10910 .L254:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 10911 .loc 2 388 0
+ 10912 9f38 8B8D0CF7 movl -2292(%rbp), %ecx
+ 10912 FFFF
+ 10913 9f3e 8B850CF7 movl -2292(%rbp), %eax
+ 10913 FFFF
+ 10914 9f44 89C0 mov %eax, %eax
+ 10915 9f46 0FB68405 movzbl -5264(%rbp,%rax), %eax
+ 10915 70EBFFFF
+ 10916 9f4e 0FB6C0 movzbl %al, %eax
+ 10917 9f51 83E00F andl $15, %eax
+ 10918 9f54 4898 cltq
+ 10919 9f56 0FB69405 movzbl -5248(%rbp,%rax), %edx
+ 10919 80EBFFFF
+ 10920 9f5e 89C8 mov %ecx, %eax
+ 10921 9f60 88940590 movb %dl, -5232(%rbp,%rax)
+ 10921 EBFFFF
+ 10922 .L255:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 10923 .loc 2 383 0
+ 10924 9f67 83850CF7 addl $1, -2292(%rbp)
+ 10924 FFFF01
+ 10925 .L253:
+ 10926 9f6e 83BD0CF7 cmpl $15, -2292(%rbp)
+ 10926 FFFF0F
+ 10927 9f75 769B jbe .L256
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 10928 .loc 2 391 0
+ 10929 9f77 F30F6F85 movdqu -5232(%rbp), %xmm0
+ 10929 90EBFFFF
+ 10930 .LBE1355:
+ 10931 .LBE1354:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10932 .loc 2 868 0
+ 10933 9f7f F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 10933 70F6FFFF
+ 10934 9f87 F30F6F85 movdqu -2416(%rbp), %xmm0
+ 10934 90F6FFFF
+ 10935 9f8f F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 10935 20F7FFFF
+ 10936 9f97 F30F6F85 movdqu -2448(%rbp), %xmm0
+ 10936 70F6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 352
+
+
+ 10937 9f9f F30F7F85 movdqu %xmm0, -2288(%rbp)
+ 10937 10F7FFFF
+ 10938 .LBB1356:
+ 10939 .LBB1357:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 10940 .loc 2 234 0
+ 10941 9fa7 F30F6F85 movdqu -2288(%rbp), %xmm0
+ 10941 10F7FFFF
+ 10942 9faf F30F6F8D movdqu -2272(%rbp), %xmm1
+ 10942 20F7FFFF
+ 10943 9fb7 660FEBC1 por %xmm1, %xmm0
+ 10944 .LBE1357:
+ 10945 .LBE1356:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 10946 .loc 2 870 0
+ 10947 9fbb F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 10947 70F6FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 10948 .loc 2 872 0
+ 10949 9fc3 8B855CF6 mov -2468(%rbp), %eax
+ 10949 FFFF
+ 10950 9fc9 48C1E004 salq $4, %rax
+ 10951 9fcd 48038538 addq -2504(%rbp), %rax
+ 10951 F6FFFF
+ 10952 9fd4 660F6F00 movdqa (%rax), %xmm0
+ 10953 9fd8 F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 10953 40F7FFFF
+ 10954 9fe0 F30F6F85 movdqu -2448(%rbp), %xmm0
+ 10954 70F6FFFF
+ 10955 9fe8 F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 10955 30F7FFFF
+ 10956 .LBB1358:
+ 10957 .LBB1359:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 10958 .loc 2 380 0
+ 10959 9ff0 F30F6F85 movdqu -2240(%rbp), %xmm0
+ 10959 40F7FFFF
+ 10960 9ff8 F30F7F85 movdqu %xmm0, -5200(%rbp)
+ 10960 B0EBFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 10961 .loc 2 381 0
+ 10962 a000 F30F6F85 movdqu -2256(%rbp), %xmm0
+ 10962 30F7FFFF
+ 10963 a008 F30F7F85 movdqu %xmm0, -5216(%rbp)
+ 10963 A0EBFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 10964 .loc 2 383 0
+ 10965 a010 C7855CF7 movl $0, -2212(%rbp)
+ 10965 FFFF0000
+ 10965 0000
+ 10966 a01a EB5C jmp .L257
+ 10967 .L260:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 10968 .loc 2 385 0
+ 10969 a01c 8B855CF7 movl -2212(%rbp), %eax
+ 10969 FFFF
+ 10970 a022 89C0 mov %eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 353
+
+
+ 10971 a024 0FB68405 movzbl -5216(%rbp,%rax), %eax
+ 10971 A0EBFFFF
+ 10972 a02c 84C0 testb %al, %al
+ 10973 a02e 7912 jns .L258
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 10974 .loc 2 386 0
+ 10975 a030 8B855CF7 movl -2212(%rbp), %eax
+ 10975 FFFF
+ 10976 a036 89C0 mov %eax, %eax
+ 10977 a038 C68405C0 movb $0, -5184(%rbp,%rax)
+ 10977 EBFFFF00
+ 10978 a040 EB2F jmp .L259
+ 10979 .L258:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 10980 .loc 2 388 0
+ 10981 a042 8B8D5CF7 movl -2212(%rbp), %ecx
+ 10981 FFFF
+ 10982 a048 8B855CF7 movl -2212(%rbp), %eax
+ 10982 FFFF
+ 10983 a04e 89C0 mov %eax, %eax
+ 10984 a050 0FB68405 movzbl -5216(%rbp,%rax), %eax
+ 10984 A0EBFFFF
+ 10985 a058 0FB6C0 movzbl %al, %eax
+ 10986 a05b 83E00F andl $15, %eax
+ 10987 a05e 4898 cltq
+ 10988 a060 0FB69405 movzbl -5200(%rbp,%rax), %edx
+ 10988 B0EBFFFF
+ 10989 a068 89C8 mov %ecx, %eax
+ 10990 a06a 889405C0 movb %dl, -5184(%rbp,%rax)
+ 10990 EBFFFF
+ 10991 .L259:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 10992 .loc 2 383 0
+ 10993 a071 83855CF7 addl $1, -2212(%rbp)
+ 10993 FFFF01
+ 10994 .L257:
+ 10995 a078 83BD5CF7 cmpl $15, -2212(%rbp)
+ 10995 FFFF0F
+ 10996 a07f 769B jbe .L260
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 10997 .loc 2 391 0
+ 10998 a081 F30F6F85 movdqu -5184(%rbp), %xmm0
+ 10998 C0EBFFFF
+ 10999 .LBE1359:
+ 11000 .LBE1358:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 11001 .loc 2 872 0
+ 11002 a089 F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 11002 70F6FFFF
+ 11003 a091 F30F6F85 movdqu -2464(%rbp), %xmm0
+ 11003 60F6FFFF
+ 11004 a099 F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 11004 70F7FFFF
+ 11005 a0a1 F30F6F85 movdqu -2448(%rbp), %xmm0
+ 11005 70F6FFFF
+ 11006 a0a9 F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 11006 60F7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 354
+
+
+ 11007 .LBB1360:
+ 11008 .LBB1361:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 11009 .loc 2 234 0
+ 11010 a0b1 F30F6F85 movdqu -2208(%rbp), %xmm0
+ 11010 60F7FFFF
+ 11011 a0b9 F30F6F8D movdqu -2192(%rbp), %xmm1
+ 11011 70F7FFFF
+ 11012 a0c1 660FEBC1 por %xmm1, %xmm0
+ 11013 .LBE1361:
+ 11014 .LBE1360:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 11015 .loc 2 874 0
+ 11016 a0c5 F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 11016 60F6FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11017 .loc 2 876 0
+ 11018 a0cd 660F6F05 movdqa vec_01(%rip), %xmm0
+ 11018 00000000
+ 11019 a0d5 F30F6F8D movdqu -2432(%rbp), %xmm1
+ 11019 80F6FFFF
+ 11020 a0dd F30F7F8D movdqu %xmm1, -2160(%rbp)
+ 11020 90F7FFFF
+ 11021 a0e5 F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 11021 80F7FFFF
+ 11022 .LBB1362:
+ 11023 .LBB1363:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 11024 .loc 2 290 0
+ 11025 a0ed F30F6F8D movdqu -2176(%rbp), %xmm1
+ 11025 80F7FFFF
+ 11026 a0f5 F30F6F85 movdqu -2160(%rbp), %xmm0
+ 11026 90F7FFFF
+ 11027 a0fd 660FF8C1 psubb %xmm1, %xmm0
+ 11028 .LBE1363:
+ 11029 .LBE1362:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11030 .loc 2 876 0
+ 11031 a101 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 11031 80F6FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11032 .loc 2 878 0
+ 11033 a109 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 11033 00000000
+ 11034 a111 F30F6F8D movdqu -2432(%rbp), %xmm1
+ 11034 80F6FFFF
+ 11035 a119 F30F7F8D movdqu %xmm1, -2128(%rbp)
+ 11035 B0F7FFFF
+ 11036 a121 F30F7F85 movdqu %xmm0, -2144(%rbp)
+ 11036 A0F7FFFF
+ 11037 .LBB1364:
+ 11038 .LBB1365:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 11039 .loc 2 206 0
+ 11040 a129 F30F6F85 movdqu -2144(%rbp), %xmm0
+ 11040 A0F7FFFF
+ 11041 a131 F30F6F8D movdqu -2128(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s page 355
+
+
+ 11041 B0F7FFFF
+ 11042 a139 660FDBC1 pand %xmm1, %xmm0
+ 11043 .LBE1365:
+ 11044 .LBE1364:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11045 .loc 2 878 0
+ 11046 a13d F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 11046 80F6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 11047 .loc 2 866 0
+ 11048 a145 83855CF6 addl $1, -2468(%rbp)
+ 11048 FFFF01
+ 11049 .L252:
+ 11050 a14c 83BD5CF6 cmpl $15, -2468(%rbp)
+ 11050 FFFF0F
+ 11051 a153 0F866DFD jbe .L261
+ 11051 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 11052 .loc 2 882 0
+ 11053 a159 F30F6F85 movdqu -2464(%rbp), %xmm0
+ 11053 60F6FFFF
+ 11054 .LBE1349:
+ 11055 .LBE1348:
+ 11056 .LBE1347:
+ 11057 .LBE1346:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 11058 .loc 2 1682 0
+ 11059 a161 660F7F85 movdqa %xmm0, -6528(%rbp)
+ 11059 80E6FFFF
+ 11060 .LBB1366:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 11061 .loc 2 1683 0
+ 11062 a169 660F6F85 movdqa -6528(%rbp), %xmm0
+ 11062 80E6FFFF
+ 11063 a171 F30F7F85 movdqu %xmm0, -5296(%rbp)
+ 11063 50EBFFFF
+ 11064 a179 E8000000 call KDbgWriterGet at PLT
+ 11064 00
+ 11065 a17e 4885C0 testq %rax, %rax
+ 11066 a181 7479 je .L263
+ 11067 a183 BF010000 movl $1, %edi
+ 11067 00
+ 11068 a188 E8000000 call KDbgCondToFlag at PLT
+ 11068 00
+ 11069 a18d 4889C6 movq %rax, %rsi
+ 11070 a190 BF100000 movl $16, %edi
+ 11070 00
+ 11071 a195 E8000000 call KDbgTestModConds at PLT
+ 11071 00
+ 11072 a19a 84C0 testb %al, %al
+ 11073 a19c 745E je .L263
+ 11074 a19e 8B855CEB movl -5284(%rbp), %eax
+ 11074 FFFF
+ 11075 a1a4 89C7 movl %eax, %edi
+ 11076 a1a6 E8555EFF call bswap_32
+ 11076 FF
+ 11077 a1ab 4189C5 movl %eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s page 356
+
+
+ 11078 a1ae 8B8558EB movl -5288(%rbp), %eax
+ 11078 FFFF
+ 11079 a1b4 89C7 movl %eax, %edi
+ 11080 a1b6 E8455EFF call bswap_32
+ 11080 FF
+ 11081 a1bb 4189C4 movl %eax, %r12d
+ 11082 a1be 8B8554EB movl -5292(%rbp), %eax
+ 11082 FFFF
+ 11083 a1c4 89C7 movl %eax, %edi
+ 11084 a1c6 E8355EFF call bswap_32
+ 11084 FF
+ 11085 a1cb 89C3 movl %eax, %ebx
+ 11086 a1cd 8B8550EB movl -5296(%rbp), %eax
+ 11086 FFFF
+ 11087 a1d3 89C7 movl %eax, %edi
+ 11088 a1d5 E8265EFF call bswap_32
+ 11088 FF
+ 11089 a1da 4589E9 movl %r13d, %r9d
+ 11090 a1dd 4589E0 movl %r12d, %r8d
+ 11091 a1e0 89D9 movl %ebx, %ecx
+ 11092 a1e2 89C2 movl %eax, %edx
+ 11093 a1e4 488D3500 leaq .LC0(%rip), %rsi
+ 11093 000000
+ 11094 a1eb 488D3D00 leaq .LC1(%rip), %rdi
+ 11094 000000
+ 11095 a1f2 B8000000 movl $0, %eax
+ 11095 00
+ 11096 a1f7 E8000000 call KDbgMsg at PLT
+ 11096 00
+ 11097 .L263:
+ 11098 a1fc 660F6F85 movdqa -6528(%rbp), %xmm0
+ 11098 80E6FFFF
+ 11099 a204 F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 11099 C0F7FFFF
+ 11100 .LBE1366:
+ 11101 .LBB1367:
+ 11102 .LBB1368:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11103 .loc 2 667 0
+ 11104 a20c 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 11104 00000000
+ 11105 a214 F30F6F8D movdqu -2112(%rbp), %xmm1
+ 11105 C0F7FFFF
+ 11106 a21c F30F7F8D movdqu %xmm1, -2080(%rbp)
+ 11106 E0F7FFFF
+ 11107 a224 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 11107 D0F7FFFF
+ 11108 .LBB1369:
+ 11109 .LBB1370:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 11110 .loc 2 380 0
+ 11111 a22c F30F6F85 movdqu -2080(%rbp), %xmm0
+ 11111 E0F7FFFF
+ 11112 a234 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 11112 E0EBFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 11113 .loc 2 381 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 357
+
+
+ 11114 a23c F30F6F85 movdqu -2096(%rbp), %xmm0
+ 11114 D0F7FFFF
+ 11115 a244 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 11115 D0EBFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 11116 .loc 2 383 0
+ 11117 a24c C785FCF7 movl $0, -2052(%rbp)
+ 11117 FFFF0000
+ 11117 0000
+ 11118 a256 EB5C jmp .L264
+ 11119 .L267:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 11120 .loc 2 385 0
+ 11121 a258 8B85FCF7 movl -2052(%rbp), %eax
+ 11121 FFFF
+ 11122 a25e 89C0 mov %eax, %eax
+ 11123 a260 0FB68405 movzbl -5168(%rbp,%rax), %eax
+ 11123 D0EBFFFF
+ 11124 a268 84C0 testb %al, %al
+ 11125 a26a 7912 jns .L265
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 11126 .loc 2 386 0
+ 11127 a26c 8B85FCF7 movl -2052(%rbp), %eax
+ 11127 FFFF
+ 11128 a272 89C0 mov %eax, %eax
+ 11129 a274 C68405F0 movb $0, -5136(%rbp,%rax)
+ 11129 EBFFFF00
+ 11130 a27c EB2F jmp .L266
+ 11131 .L265:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 11132 .loc 2 388 0
+ 11133 a27e 8B8DFCF7 movl -2052(%rbp), %ecx
+ 11133 FFFF
+ 11134 a284 8B85FCF7 movl -2052(%rbp), %eax
+ 11134 FFFF
+ 11135 a28a 89C0 mov %eax, %eax
+ 11136 a28c 0FB68405 movzbl -5168(%rbp,%rax), %eax
+ 11136 D0EBFFFF
+ 11137 a294 0FB6C0 movzbl %al, %eax
+ 11138 a297 83E00F andl $15, %eax
+ 11139 a29a 4898 cltq
+ 11140 a29c 0FB69405 movzbl -5152(%rbp,%rax), %edx
+ 11140 E0EBFFFF
+ 11141 a2a4 89C8 mov %ecx, %eax
+ 11142 a2a6 889405F0 movb %dl, -5136(%rbp,%rax)
+ 11142 EBFFFF
+ 11143 .L266:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 11144 .loc 2 383 0
+ 11145 a2ad 8385FCF7 addl $1, -2052(%rbp)
+ 11145 FFFF01
+ 11146 .L264:
+ 11147 a2b4 83BDFCF7 cmpl $15, -2052(%rbp)
+ 11147 FFFF0F
+ 11148 a2bb 769B jbe .L267
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 11149 .loc 2 391 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 358
+
+
+ 11150 a2bd F30F6F85 movdqu -5136(%rbp), %xmm0
+ 11150 F0EBFFFF
+ 11151 .LBE1370:
+ 11152 .LBE1369:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11153 .loc 2 667 0
+ 11154 a2c5 F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 11154 C0F7FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11155 .loc 2 668 0
+ 11156 a2cd F30F6F85 movdqu -2112(%rbp), %xmm0
+ 11156 C0F7FFFF
+ 11157 .LBE1368:
+ 11158 .LBE1367:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 11159 .loc 2 1684 0
+ 11160 a2d5 660F7F85 movdqa %xmm0, -6528(%rbp)
+ 11160 80E6FFFF
+ 11161 .LBB1371:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 11162 .loc 2 1685 0
+ 11163 a2dd 660F6F85 movdqa -6528(%rbp), %xmm0
+ 11163 80E6FFFF
+ 11164 a2e5 F30F7F85 movdqu %xmm0, -5312(%rbp)
+ 11164 40EBFFFF
+ 11165 a2ed E8000000 call KDbgWriterGet at PLT
+ 11165 00
+ 11166 a2f2 4885C0 testq %rax, %rax
+ 11167 a2f5 7479 je .L269
+ 11168 a2f7 BF010000 movl $1, %edi
+ 11168 00
+ 11169 a2fc E8000000 call KDbgCondToFlag at PLT
+ 11169 00
+ 11170 a301 4889C6 movq %rax, %rsi
+ 11171 a304 BF100000 movl $16, %edi
+ 11171 00
+ 11172 a309 E8000000 call KDbgTestModConds at PLT
+ 11172 00
+ 11173 a30e 84C0 testb %al, %al
+ 11174 a310 745E je .L269
+ 11175 a312 8B854CEB movl -5300(%rbp), %eax
+ 11175 FFFF
+ 11176 a318 89C7 movl %eax, %edi
+ 11177 a31a E8E15CFF call bswap_32
+ 11177 FF
+ 11178 a31f 4189C5 movl %eax, %r13d
+ 11179 a322 8B8548EB movl -5304(%rbp), %eax
+ 11179 FFFF
+ 11180 a328 89C7 movl %eax, %edi
+ 11181 a32a E8D15CFF call bswap_32
+ 11181 FF
+ 11182 a32f 4189C4 movl %eax, %r12d
+ 11183 a332 8B8544EB movl -5308(%rbp), %eax
+ 11183 FFFF
+ 11184 a338 89C7 movl %eax, %edi
+ 11185 a33a E8C15CFF call bswap_32
+ 11185 FF
+
GAS LISTING /tmp/ccMa7HLZ.s page 359
+
+
+ 11186 a33f 89C3 movl %eax, %ebx
+ 11187 a341 8B8540EB movl -5312(%rbp), %eax
+ 11187 FFFF
+ 11188 a347 89C7 movl %eax, %edi
+ 11189 a349 E8B25CFF call bswap_32
+ 11189 FF
+ 11190 a34e 4589E9 movl %r13d, %r9d
+ 11191 a351 4589E0 movl %r12d, %r8d
+ 11192 a354 89D9 movl %ebx, %ecx
+ 11193 a356 89C2 movl %eax, %edx
+ 11194 a358 488D3500 leaq .LC2(%rip), %rsi
+ 11194 000000
+ 11195 a35f 488D3D00 leaq .LC1(%rip), %rdi
+ 11195 000000
+ 11196 a366 B8000000 movl $0, %eax
+ 11196 00
+ 11197 a36b E8000000 call KDbgMsg at PLT
+ 11197 00
+ 11198 .L269:
+ 11199 a370 660F6F85 movdqa -6528(%rbp), %xmm0
+ 11199 80E6FFFF
+ 11200 a378 F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 11200 10F8FFFF
+ 11201 a380 660F6F85 movdqa -6512(%rbp), %xmm0
+ 11201 90E6FFFF
+ 11202 a388 F30F7F85 movdqu %xmm0, -2048(%rbp)
+ 11202 00F8FFFF
+ 11203 .LBE1371:
+ 11204 .LBB1372:
+ 11205 .LBB1373:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 11206 .loc 2 178 0
+ 11207 a390 F30F6F85 movdqu -2048(%rbp), %xmm0
+ 11207 00F8FFFF
+ 11208 a398 F30F6F8D movdqu -2032(%rbp), %xmm1
+ 11208 10F8FFFF
+ 11209 a3a0 660FEFC1 pxor %xmm1, %xmm0
+ 11210 .LBE1373:
+ 11211 .LBE1372:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 11212 .loc 2 1686 0
+ 11213 a3a4 660F7F85 movdqa %xmm0, -6528(%rbp)
+ 11213 80E6FFFF
+ 11214 .LBB1374:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 11215 .loc 2 1687 0
+ 11216 a3ac 660F6F85 movdqa -6528(%rbp), %xmm0
+ 11216 80E6FFFF
+ 11217 a3b4 F30F7F85 movdqu %xmm0, -5328(%rbp)
+ 11217 30EBFFFF
+ 11218 a3bc E8000000 call KDbgWriterGet at PLT
+ 11218 00
+ 11219 a3c1 4885C0 testq %rax, %rax
+ 11220 a3c4 7479 je .L271
+ 11221 a3c6 BF010000 movl $1, %edi
+ 11221 00
+ 11222 a3cb E8000000 call KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 360
+
+
+ 11222 00
+ 11223 a3d0 4889C6 movq %rax, %rsi
+ 11224 a3d3 BF100000 movl $16, %edi
+ 11224 00
+ 11225 a3d8 E8000000 call KDbgTestModConds at PLT
+ 11225 00
+ 11226 a3dd 84C0 testb %al, %al
+ 11227 a3df 745E je .L271
+ 11228 a3e1 8B853CEB movl -5316(%rbp), %eax
+ 11228 FFFF
+ 11229 a3e7 89C7 movl %eax, %edi
+ 11230 a3e9 E8125CFF call bswap_32
+ 11230 FF
+ 11231 a3ee 4189C5 movl %eax, %r13d
+ 11232 a3f1 8B8538EB movl -5320(%rbp), %eax
+ 11232 FFFF
+ 11233 a3f7 89C7 movl %eax, %edi
+ 11234 a3f9 E8025CFF call bswap_32
+ 11234 FF
+ 11235 a3fe 4189C4 movl %eax, %r12d
+ 11236 a401 8B8534EB movl -5324(%rbp), %eax
+ 11236 FFFF
+ 11237 a407 89C7 movl %eax, %edi
+ 11238 a409 E8F25BFF call bswap_32
+ 11238 FF
+ 11239 a40e 89C3 movl %eax, %ebx
+ 11240 a410 8B8530EB movl -5328(%rbp), %eax
+ 11240 FFFF
+ 11241 a416 89C7 movl %eax, %edi
+ 11242 a418 E8E35BFF call bswap_32
+ 11242 FF
+ 11243 a41d 4589E9 movl %r13d, %r9d
+ 11244 a420 4589E0 movl %r12d, %r8d
+ 11245 a423 89D9 movl %ebx, %ecx
+ 11246 a425 89C2 movl %eax, %edx
+ 11247 a427 488D3500 leaq .LC3(%rip), %rsi
+ 11247 000000
+ 11248 a42e 488D3D00 leaq .LC1(%rip), %rdi
+ 11248 000000
+ 11249 a435 B8000000 movl $0, %eax
+ 11249 00
+ 11250 a43a E8000000 call KDbgMsg at PLT
+ 11250 00
+ 11251 .L271:
+ 11252 a43f 660F6F85 movdqa -6528(%rbp), %xmm0
+ 11252 80E6FFFF
+ 11253 a447 F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 11253 20F8FFFF
+ 11254 .LBE1374:
+ 11255 .LBB1375:
+ 11256 .LBB1376:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11257 .loc 2 1357 0
+ 11258 a44f F30F6F85 movdqu -2016(%rbp), %xmm0
+ 11258 20F8FFFF
+ 11259 a457 F30F7F85 movdqu %xmm0, -5120(%rbp)
+ 11259 00ECFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 361
+
+
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 11260 .loc 2 1358 0
+ 11261 a45f 8B850CEC movl -5108(%rbp), %eax
+ 11261 FFFF
+ 11262 a465 898508EC movl %eax, -5112(%rbp)
+ 11262 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 11263 .loc 2 1359 0
+ 11264 a46b 8B850CEC movl -5108(%rbp), %eax
+ 11264 FFFF
+ 11265 a471 898504EC movl %eax, -5116(%rbp)
+ 11265 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 11266 .loc 2 1360 0
+ 11267 a477 8B850CEC movl -5108(%rbp), %eax
+ 11267 FFFF
+ 11268 a47d 898500EC movl %eax, -5120(%rbp)
+ 11268 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11269 .loc 2 1361 0
+ 11270 a483 F30F6F85 movdqu -5120(%rbp), %xmm0
+ 11270 00ECFFFF
+ 11271 .LBE1376:
+ 11272 .LBE1375:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 11273 .loc 2 1688 0
+ 11274 a48b 660F7F85 movdqa %xmm0, -6528(%rbp)
+ 11274 80E6FFFF
+ 11275 .LBB1377:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 11276 .loc 2 1689 0
+ 11277 a493 660F6F85 movdqa -6528(%rbp), %xmm0
+ 11277 80E6FFFF
+ 11278 a49b F30F7F85 movdqu %xmm0, -5344(%rbp)
+ 11278 20EBFFFF
+ 11279 a4a3 E8000000 call KDbgWriterGet at PLT
+ 11279 00
+ 11280 a4a8 4885C0 testq %rax, %rax
+ 11281 a4ab 7479 je .L273
+ 11282 a4ad BF010000 movl $1, %edi
+ 11282 00
+ 11283 a4b2 E8000000 call KDbgCondToFlag at PLT
+ 11283 00
+ 11284 a4b7 4889C6 movq %rax, %rsi
+ 11285 a4ba BF100000 movl $16, %edi
+ 11285 00
+ 11286 a4bf E8000000 call KDbgTestModConds at PLT
+ 11286 00
+ 11287 a4c4 84C0 testb %al, %al
+ 11288 a4c6 745E je .L273
+ 11289 a4c8 8B852CEB movl -5332(%rbp), %eax
+ 11289 FFFF
+ 11290 a4ce 89C7 movl %eax, %edi
+ 11291 a4d0 E82B5BFF call bswap_32
+ 11291 FF
+ 11292 a4d5 4189C5 movl %eax, %r13d
+ 11293 a4d8 8B8528EB movl -5336(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 362
+
+
+ 11293 FFFF
+ 11294 a4de 89C7 movl %eax, %edi
+ 11295 a4e0 E81B5BFF call bswap_32
+ 11295 FF
+ 11296 a4e5 4189C4 movl %eax, %r12d
+ 11297 a4e8 8B8524EB movl -5340(%rbp), %eax
+ 11297 FFFF
+ 11298 a4ee 89C7 movl %eax, %edi
+ 11299 a4f0 E80B5BFF call bswap_32
+ 11299 FF
+ 11300 a4f5 89C3 movl %eax, %ebx
+ 11301 a4f7 8B8520EB movl -5344(%rbp), %eax
+ 11301 FFFF
+ 11302 a4fd 89C7 movl %eax, %edi
+ 11303 a4ff E8FC5AFF call bswap_32
+ 11303 FF
+ 11304 a504 4589E9 movl %r13d, %r9d
+ 11305 a507 4589E0 movl %r12d, %r8d
+ 11306 a50a 89D9 movl %ebx, %ecx
+ 11307 a50c 89C2 movl %eax, %edx
+ 11308 a50e 488D3500 leaq .LC4(%rip), %rsi
+ 11308 000000
+ 11309 a515 488D3D00 leaq .LC1(%rip), %rdi
+ 11309 000000
+ 11310 a51c B8000000 movl $0, %eax
+ 11310 00
+ 11311 a521 E8000000 call KDbgMsg at PLT
+ 11311 00
+ 11312 .L273:
+ 11313 .LBE1377:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 11314 .loc 2 1690 0
+ 11315 a526 660F6F85 movdqa -6528(%rbp), %xmm0
+ 11315 80E6FFFF
+ 11316 .LBE1343:
+ 11317 .LBE1342:
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 11318 .loc 2 1831 0
+ 11319 a52e 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 11319 C0E5FFFF
+1833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k24 : k25 : k26 : k27 */
+ 11320 .loc 2 1833 0
+ 11321 a536 660F6F85 movdqa -6800(%rbp), %xmm0
+ 11321 70E5FFFF
+ 11322 a53e 660FEF85 pxor -6720(%rbp), %xmm0
+ 11322 C0E5FFFF
+ 11323 a546 660F7F85 movdqa %xmm0, -6800(%rbp)
+ 11323 70E5FFFF
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k27 : k27 : k27 : k27 */
+ 11324 .loc 2 1834 0
+ 11325 a54e 660F6F85 movdqa -6800(%rbp), %xmm0
+ 11325 70E5FFFF
+ 11326 a556 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 11326 C0E5FFFF
+ 11327 a55e 660F6F85 movdqa -6720(%rbp), %xmm0
+ 11327 C0E5FFFF
+ 11328 a566 F30F7F85 movdqu %xmm0, -2000(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 363
+
+
+ 11328 30F8FFFF
+ 11329 .LBB1378:
+ 11330 .LBB1379:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11331 .loc 2 1357 0
+ 11332 a56e F30F6F85 movdqu -2000(%rbp), %xmm0
+ 11332 30F8FFFF
+ 11333 a576 F30F7F85 movdqu %xmm0, -5104(%rbp)
+ 11333 10ECFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 11334 .loc 2 1358 0
+ 11335 a57e 8B851CEC movl -5092(%rbp), %eax
+ 11335 FFFF
+ 11336 a584 898518EC movl %eax, -5096(%rbp)
+ 11336 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 11337 .loc 2 1359 0
+ 11338 a58a 8B851CEC movl -5092(%rbp), %eax
+ 11338 FFFF
+ 11339 a590 898514EC movl %eax, -5100(%rbp)
+ 11339 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 11340 .loc 2 1360 0
+ 11341 a596 8B851CEC movl -5092(%rbp), %eax
+ 11341 FFFF
+ 11342 a59c 898510EC movl %eax, -5104(%rbp)
+ 11342 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11343 .loc 2 1361 0
+ 11344 a5a2 F30F6F85 movdqu -5104(%rbp), %xmm0
+ 11344 10ECFFFF
+ 11345 .LBE1379:
+ 11346 .LBE1378:
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k27 : k27 : k27 : k27 */
+ 11347 .loc 2 1834 0
+ 11348 a5aa 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 11348 C0E5FFFF
+1835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k28 : k29 : x : x */
+ 11349 .loc 2 1835 0
+ 11350 a5b2 660F6F85 movdqa -6784(%rbp), %xmm0
+ 11350 80E5FFFF
+ 11351 a5ba 660FEF85 pxor -6720(%rbp), %xmm0
+ 11351 C0E5FFFF
+ 11352 a5c2 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 11352 80E5FFFF
+1837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[6] = v0; /* K24:K25:K26:K27 */
+ 11353 .loc 2 1837 0
+ 11354 a5ca 488B8588 movq -6264(%rbp), %rax
+ 11354 E7FFFF
+ 11355 a5d1 4883C060 addq $96, %rax
+ 11356 a5d5 660F6F85 movdqa -6800(%rbp), %xmm0
+ 11356 70E5FFFF
+ 11357 a5dd 660F7F00 movdqa %xmm0, (%rax)
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 11358 .loc 2 1842 0
+ 11359 a5e1 660F6F85 movdqa -6784(%rbp), %xmm0
+ 11359 80E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 364
+
+
+ 11360 a5e9 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 11360 C0E5FFFF
+ 11361 a5f1 660F6F85 movdqa -6720(%rbp), %xmm0
+ 11361 C0E5FFFF
+ 11362 a5f9 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 11362 50F8FFFF
+ 11363 .LBB1380:
+ 11364 .LBB1381:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+ 11365 .loc 2 1629 0
+ 11366 a601 B8100000 movl $16, %eax
+ 11366 00
+ 11367 a606 0FB6C0 movzbl %al, %eax
+ 11368 a609 898570F8 movl %eax, -1936(%rbp)
+ 11368 FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 11369 .loc 2 1630 0
+ 11370 a60f F30F6F85 movdqu -1968(%rbp), %xmm0
+ 11370 50F8FFFF
+ 11371 a617 F30F7F85 movdqu %xmm0, -5072(%rbp)
+ 11371 30ECFFFF
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 11372 .loc 2 1631 0
+ 11373 a61f 8B8534EC movl -5068(%rbp), %eax
+ 11373 FFFF
+ 11374 a625 898574F8 movl %eax, -1932(%rbp)
+ 11374 FFFF
+ 11375 .LBB1382:
+ 11376 .LBB1383:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 11377 .loc 2 740 0
+ 11378 a62b 8B8574F8 movl -1932(%rbp), %eax
+ 11378 FFFF
+ 11379 a631 898520EC movl %eax, -5088(%rbp)
+ 11379 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 11380 .loc 2 741 0
+ 11381 a637 C78578F8 movl $0, -1928(%rbp)
+ 11381 FFFF0000
+ 11381 0000
+ 11382 a641 EB36 jmp .L274
+ 11383 .L275:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 11384 .loc 2 742 0
+ 11385 a643 8B8D78F8 movl -1928(%rbp), %ecx
+ 11385 FFFF
+ 11386 a649 8B8578F8 movl -1928(%rbp), %eax
+ 11386 FFFF
+ 11387 a64f 89C0 mov %eax, %eax
+ 11388 a651 0FB68405 movzbl -5088(%rbp,%rax), %eax
+ 11388 20ECFFFF
+ 11389 a659 0FB6C0 movzbl %al, %eax
+ 11390 a65c 89C2 mov %eax, %edx
+ 11391 a65e 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 11391 000000
+ 11392 a665 0FB61402 movzbl (%rdx,%rax), %edx
+ 11393 a669 89C8 mov %ecx, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 365
+
+
+ 11394 a66b 88940520 movb %dl, -5088(%rbp,%rax)
+ 11394 ECFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 11395 .loc 2 741 0
+ 11396 a672 838578F8 addl $1, -1928(%rbp)
+ 11396 FFFF01
+ 11397 .L274:
+ 11398 a679 83BD78F8 cmpl $3, -1928(%rbp)
+ 11398 FFFF03
+ 11399 a680 76C1 jbe .L275
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 11400 .loc 2 743 0
+ 11401 a682 8B8520EC movl -5088(%rbp), %eax
+ 11401 FFFF
+ 11402 .LBE1383:
+ 11403 .LBE1382:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 11404 .loc 2 1631 0
+ 11405 a688 89856CF8 movl %eax, -1940(%rbp)
+ 11405 FFFF
+ 11406 a68e 8B856CF8 movl -1940(%rbp), %eax
+ 11406 FFFF
+ 11407 a694 89857CF8 movl %eax, -1924(%rbp)
+ 11407 FFFF
+ 11408 .LBB1384:
+ 11409 .LBB1385:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+ 11410 .loc 2 1196 0
+ 11411 a69a 8B857CF8 movl -1924(%rbp), %eax
+ 11411 FFFF
+ 11412 a6a0 C1C808 rorl $8, %eax
+ 11413 .LBE1385:
+ 11414 .LBE1384:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+ 11415 .loc 2 1632 0
+ 11416 a6a3 89856CF8 movl %eax, -1940(%rbp)
+ 11416 FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+ 11417 .loc 2 1633 0
+ 11418 a6a9 8B8570F8 movl -1936(%rbp), %eax
+ 11418 FFFF
+ 11419 a6af 31856CF8 xorl %eax, -1940(%rbp)
+ 11419 FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 11420 .loc 2 1635 0
+ 11421 a6b5 8B856CF8 movl -1940(%rbp), %eax
+ 11421 FFFF
+ 11422 a6bb 89853CEC movl %eax, -5060(%rbp)
+ 11422 FFFF
+ 11423 a6c1 8B853CEC movl -5060(%rbp), %eax
+ 11423 FFFF
+ 11424 a6c7 898538EC movl %eax, -5064(%rbp)
+ 11424 FFFF
+ 11425 a6cd 8B8538EC movl -5064(%rbp), %eax
+ 11425 FFFF
+ 11426 a6d3 898534EC movl %eax, -5068(%rbp)
+ 11426 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 366
+
+
+ 11427 a6d9 8B8534EC movl -5068(%rbp), %eax
+ 11427 FFFF
+ 11428 a6df 898530EC movl %eax, -5072(%rbp)
+ 11428 FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 11429 .loc 2 1636 0
+ 11430 a6e5 F30F6F85 movdqu -5072(%rbp), %xmm0
+ 11430 30ECFFFF
+ 11431 .LBE1381:
+ 11432 .LBE1380:
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 11433 .loc 2 1842 0
+ 11434 a6ed 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 11434 C0E5FFFF
+ 11435 a6f5 660F6F85 movdqa -6800(%rbp), %xmm0
+ 11435 70E5FFFF
+ 11436 a6fd F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 11436 80F8FFFF
+ 11437 .LBB1386:
+ 11438 .LBB1387:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 11439 .loc 2 1565 0
+ 11440 a705 F30F6F85 movdqu -1920(%rbp), %xmm0
+ 11440 80F8FFFF
+ 11441 a70d 660F7F85 movdqa %xmm0, -6480(%rbp)
+ 11441 B0E6FFFF
+ 11442 a715 660F6F85 movdqa -6480(%rbp), %xmm0
+ 11442 B0E6FFFF
+ 11443 a71d F30F7F85 movdqu %xmm0, -1904(%rbp)
+ 11443 90F8FFFF
+ 11444 .LBB1388:
+ 11445 .LBB1389:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11446 .loc 2 1282 0
+ 11447 a725 F30F6F85 movdqu -1904(%rbp), %xmm0
+ 11447 90F8FFFF
+ 11448 a72d F30F7F85 movdqu %xmm0, -5056(%rbp)
+ 11448 40ECFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11449 .loc 2 1283 0
+ 11450 a735 8B8548EC movl -5048(%rbp), %eax
+ 11450 FFFF
+ 11451 a73b 89854CEC movl %eax, -5044(%rbp)
+ 11451 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11452 .loc 2 1284 0
+ 11453 a741 8B8544EC movl -5052(%rbp), %eax
+ 11453 FFFF
+ 11454 a747 898548EC movl %eax, -5048(%rbp)
+ 11454 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11455 .loc 2 1285 0
+ 11456 a74d 8B8540EC movl -5056(%rbp), %eax
+ 11456 FFFF
+ 11457 a753 898544EC movl %eax, -5052(%rbp)
+ 11457 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+
GAS LISTING /tmp/ccMa7HLZ.s page 367
+
+
+ 11458 .loc 2 1286 0
+ 11459 a759 C78540EC movl $0, -5056(%rbp)
+ 11459 FFFF0000
+ 11459 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11460 .loc 2 1287 0
+ 11461 a763 F30F6F85 movdqu -5056(%rbp), %xmm0
+ 11461 40ECFFFF
+ 11462 .LBE1389:
+ 11463 .LBE1388:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11464 .loc 2 1567 0
+ 11465 a76b 660F7F85 movdqa %xmm0, -6480(%rbp)
+ 11465 B0E6FFFF
+ 11466 a773 660F6F85 movdqa -6480(%rbp), %xmm0
+ 11466 B0E6FFFF
+ 11467 a77b 660FEF85 pxor -1920(%rbp), %xmm0
+ 11467 80F8FFFF
+ 11468 a783 F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 11468 80F8FFFF
+ 11469 a78b 660F6F85 movdqa -6480(%rbp), %xmm0
+ 11469 B0E6FFFF
+ 11470 a793 F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 11470 A0F8FFFF
+ 11471 .LBB1390:
+ 11472 .LBB1391:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11473 .loc 2 1282 0
+ 11474 a79b F30F6F85 movdqu -1888(%rbp), %xmm0
+ 11474 A0F8FFFF
+ 11475 a7a3 F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 11475 50ECFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11476 .loc 2 1283 0
+ 11477 a7ab 8B8558EC movl -5032(%rbp), %eax
+ 11477 FFFF
+ 11478 a7b1 89855CEC movl %eax, -5028(%rbp)
+ 11478 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11479 .loc 2 1284 0
+ 11480 a7b7 8B8554EC movl -5036(%rbp), %eax
+ 11480 FFFF
+ 11481 a7bd 898558EC movl %eax, -5032(%rbp)
+ 11481 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11482 .loc 2 1285 0
+ 11483 a7c3 8B8550EC movl -5040(%rbp), %eax
+ 11483 FFFF
+ 11484 a7c9 898554EC movl %eax, -5036(%rbp)
+ 11484 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11485 .loc 2 1286 0
+ 11486 a7cf C78550EC movl $0, -5040(%rbp)
+ 11486 FFFF0000
+ 11486 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11487 .loc 2 1287 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 368
+
+
+ 11488 a7d9 F30F6F85 movdqu -5040(%rbp), %xmm0
+ 11488 50ECFFFF
+ 11489 .LBE1391:
+ 11490 .LBE1390:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11491 .loc 2 1568 0
+ 11492 a7e1 660F7F85 movdqa %xmm0, -6480(%rbp)
+ 11492 B0E6FFFF
+ 11493 a7e9 660F6F85 movdqa -6480(%rbp), %xmm0
+ 11493 B0E6FFFF
+ 11494 a7f1 660FEF85 pxor -1920(%rbp), %xmm0
+ 11494 80F8FFFF
+ 11495 a7f9 F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 11495 80F8FFFF
+ 11496 a801 660F6F85 movdqa -6480(%rbp), %xmm0
+ 11496 B0E6FFFF
+ 11497 a809 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 11497 B0F8FFFF
+ 11498 .LBB1392:
+ 11499 .LBB1393:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11500 .loc 2 1282 0
+ 11501 a811 F30F6F85 movdqu -1872(%rbp), %xmm0
+ 11501 B0F8FFFF
+ 11502 a819 F30F7F85 movdqu %xmm0, -5024(%rbp)
+ 11502 60ECFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11503 .loc 2 1283 0
+ 11504 a821 8B8568EC movl -5016(%rbp), %eax
+ 11504 FFFF
+ 11505 a827 89856CEC movl %eax, -5012(%rbp)
+ 11505 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11506 .loc 2 1284 0
+ 11507 a82d 8B8564EC movl -5020(%rbp), %eax
+ 11507 FFFF
+ 11508 a833 898568EC movl %eax, -5016(%rbp)
+ 11508 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11509 .loc 2 1285 0
+ 11510 a839 8B8560EC movl -5024(%rbp), %eax
+ 11510 FFFF
+ 11511 a83f 898564EC movl %eax, -5020(%rbp)
+ 11511 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11512 .loc 2 1286 0
+ 11513 a845 C78560EC movl $0, -5024(%rbp)
+ 11513 FFFF0000
+ 11513 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11514 .loc 2 1287 0
+ 11515 a84f F30F6F85 movdqu -5024(%rbp), %xmm0
+ 11515 60ECFFFF
+ 11516 .LBE1393:
+ 11517 .LBE1392:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11518 .loc 2 1569 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 369
+
+
+ 11519 a857 660F7F85 movdqa %xmm0, -6480(%rbp)
+ 11519 B0E6FFFF
+ 11520 a85f 660F6F85 movdqa -6480(%rbp), %xmm0
+ 11520 B0E6FFFF
+ 11521 a867 660FEF85 pxor -1920(%rbp), %xmm0
+ 11521 80F8FFFF
+ 11522 a86f F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 11522 80F8FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11523 .loc 2 1571 0
+ 11524 a877 F30F6F85 movdqu -1920(%rbp), %xmm0
+ 11524 80F8FFFF
+ 11525 .LBE1387:
+ 11526 .LBE1386:
+1844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k24 :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+ 11527 .loc 2 1844 0
+ 11528 a87f 660F7F85 movdqa %xmm0, -6752(%rbp)
+ 11528 A0E5FFFF
+1845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k30 : k31 : k32 : k33 */
+ 11529 .loc 2 1845 0
+ 11530 a887 660F6F85 movdqa -6752(%rbp), %xmm0
+ 11530 A0E5FFFF
+ 11531 a88f 660FEF85 pxor -6720(%rbp), %xmm0
+ 11531 C0E5FFFF
+ 11532 a897 660F7F85 movdqa %xmm0, -6752(%rbp)
+ 11532 A0E5FFFF
+ 11533 a89f 660F6F85 movdqa -6784(%rbp), %xmm0
+ 11533 80E5FFFF
+ 11534 a8a7 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 11534 C0F8FFFF
+ 11535 .LBB1394:
+ 11536 .LBB1395:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 11537 .loc 2 1565 0
+ 11538 a8af F30F6F85 movdqu -1856(%rbp), %xmm0
+ 11538 C0F8FFFF
+ 11539 a8b7 660F7F85 movdqa %xmm0, -6464(%rbp)
+ 11539 C0E6FFFF
+ 11540 a8bf 660F6F85 movdqa -6464(%rbp), %xmm0
+ 11540 C0E6FFFF
+ 11541 a8c7 F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 11541 D0F8FFFF
+ 11542 .LBB1396:
+ 11543 .LBB1397:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11544 .loc 2 1282 0
+ 11545 a8cf F30F6F85 movdqu -1840(%rbp), %xmm0
+ 11545 D0F8FFFF
+ 11546 a8d7 F30F7F85 movdqu %xmm0, -5008(%rbp)
+ 11546 70ECFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11547 .loc 2 1283 0
+ 11548 a8df 8B8578EC movl -5000(%rbp), %eax
+ 11548 FFFF
+ 11549 a8e5 89857CEC movl %eax, -4996(%rbp)
+ 11549 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+
GAS LISTING /tmp/ccMa7HLZ.s page 370
+
+
+ 11550 .loc 2 1284 0
+ 11551 a8eb 8B8574EC movl -5004(%rbp), %eax
+ 11551 FFFF
+ 11552 a8f1 898578EC movl %eax, -5000(%rbp)
+ 11552 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11553 .loc 2 1285 0
+ 11554 a8f7 8B8570EC movl -5008(%rbp), %eax
+ 11554 FFFF
+ 11555 a8fd 898574EC movl %eax, -5004(%rbp)
+ 11555 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11556 .loc 2 1286 0
+ 11557 a903 C78570EC movl $0, -5008(%rbp)
+ 11557 FFFF0000
+ 11557 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11558 .loc 2 1287 0
+ 11559 a90d F30F6F85 movdqu -5008(%rbp), %xmm0
+ 11559 70ECFFFF
+ 11560 .LBE1397:
+ 11561 .LBE1396:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11562 .loc 2 1567 0
+ 11563 a915 660F7F85 movdqa %xmm0, -6464(%rbp)
+ 11563 C0E6FFFF
+ 11564 a91d 660F6F85 movdqa -6464(%rbp), %xmm0
+ 11564 C0E6FFFF
+ 11565 a925 660FEF85 pxor -1856(%rbp), %xmm0
+ 11565 C0F8FFFF
+ 11566 a92d F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 11566 C0F8FFFF
+ 11567 a935 660F6F85 movdqa -6464(%rbp), %xmm0
+ 11567 C0E6FFFF
+ 11568 a93d F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 11568 E0F8FFFF
+ 11569 .LBB1398:
+ 11570 .LBB1399:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11571 .loc 2 1282 0
+ 11572 a945 F30F6F85 movdqu -1824(%rbp), %xmm0
+ 11572 E0F8FFFF
+ 11573 a94d F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 11573 80ECFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11574 .loc 2 1283 0
+ 11575 a955 8B8588EC movl -4984(%rbp), %eax
+ 11575 FFFF
+ 11576 a95b 89858CEC movl %eax, -4980(%rbp)
+ 11576 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11577 .loc 2 1284 0
+ 11578 a961 8B8584EC movl -4988(%rbp), %eax
+ 11578 FFFF
+ 11579 a967 898588EC movl %eax, -4984(%rbp)
+ 11579 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+
GAS LISTING /tmp/ccMa7HLZ.s page 371
+
+
+ 11580 .loc 2 1285 0
+ 11581 a96d 8B8580EC movl -4992(%rbp), %eax
+ 11581 FFFF
+ 11582 a973 898584EC movl %eax, -4988(%rbp)
+ 11582 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11583 .loc 2 1286 0
+ 11584 a979 C78580EC movl $0, -4992(%rbp)
+ 11584 FFFF0000
+ 11584 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11585 .loc 2 1287 0
+ 11586 a983 F30F6F85 movdqu -4992(%rbp), %xmm0
+ 11586 80ECFFFF
+ 11587 .LBE1399:
+ 11588 .LBE1398:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11589 .loc 2 1568 0
+ 11590 a98b 660F7F85 movdqa %xmm0, -6464(%rbp)
+ 11590 C0E6FFFF
+ 11591 a993 660F6F85 movdqa -6464(%rbp), %xmm0
+ 11591 C0E6FFFF
+ 11592 a99b 660FEF85 pxor -1856(%rbp), %xmm0
+ 11592 C0F8FFFF
+ 11593 a9a3 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 11593 C0F8FFFF
+ 11594 a9ab 660F6F85 movdqa -6464(%rbp), %xmm0
+ 11594 C0E6FFFF
+ 11595 a9b3 F30F7F85 movdqu %xmm0, -1808(%rbp)
+ 11595 F0F8FFFF
+ 11596 .LBB1400:
+ 11597 .LBB1401:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11598 .loc 2 1282 0
+ 11599 a9bb F30F6F85 movdqu -1808(%rbp), %xmm0
+ 11599 F0F8FFFF
+ 11600 a9c3 F30F7F85 movdqu %xmm0, -4976(%rbp)
+ 11600 90ECFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11601 .loc 2 1283 0
+ 11602 a9cb 8B8598EC movl -4968(%rbp), %eax
+ 11602 FFFF
+ 11603 a9d1 89859CEC movl %eax, -4964(%rbp)
+ 11603 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11604 .loc 2 1284 0
+ 11605 a9d7 8B8594EC movl -4972(%rbp), %eax
+ 11605 FFFF
+ 11606 a9dd 898598EC movl %eax, -4968(%rbp)
+ 11606 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11607 .loc 2 1285 0
+ 11608 a9e3 8B8590EC movl -4976(%rbp), %eax
+ 11608 FFFF
+ 11609 a9e9 898594EC movl %eax, -4972(%rbp)
+ 11609 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+
GAS LISTING /tmp/ccMa7HLZ.s page 372
+
+
+ 11610 .loc 2 1286 0
+ 11611 a9ef C78590EC movl $0, -4976(%rbp)
+ 11611 FFFF0000
+ 11611 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11612 .loc 2 1287 0
+ 11613 a9f9 F30F6F85 movdqu -4976(%rbp), %xmm0
+ 11613 90ECFFFF
+ 11614 .LBE1401:
+ 11615 .LBE1400:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11616 .loc 2 1569 0
+ 11617 aa01 660F7F85 movdqa %xmm0, -6464(%rbp)
+ 11617 C0E6FFFF
+ 11618 aa09 660F6F85 movdqa -6464(%rbp), %xmm0
+ 11618 C0E6FFFF
+ 11619 aa11 660FEF85 pxor -1856(%rbp), %xmm0
+ 11619 C0F8FFFF
+ 11620 aa19 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 11620 C0F8FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11621 .loc 2 1571 0
+ 11622 aa21 F30F6F85 movdqu -1856(%rbp), %xmm0
+ 11622 C0F8FFFF
+ 11623 .LBE1395:
+ 11624 .LBE1394:
+1846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k26 :k28^k29: k29 : 0 */
+ 11625 .loc 2 1846 0
+ 11626 aa29 660F7F85 movdqa %xmm0, -6736(%rbp)
+ 11626 B0E5FFFF
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k33 : k33 : k33 : k33 */
+ 11627 .loc 2 1847 0
+ 11628 aa31 660F6F85 movdqa -6752(%rbp), %xmm0
+ 11628 A0E5FFFF
+ 11629 aa39 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 11629 C0E5FFFF
+ 11630 aa41 660F6F85 movdqa -6720(%rbp), %xmm0
+ 11630 C0E5FFFF
+ 11631 aa49 F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 11631 00F9FFFF
+ 11632 .LBB1402:
+ 11633 .LBB1403:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11634 .loc 2 1357 0
+ 11635 aa51 F30F6F85 movdqu -1792(%rbp), %xmm0
+ 11635 00F9FFFF
+ 11636 aa59 F30F7F85 movdqu %xmm0, -4960(%rbp)
+ 11636 A0ECFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 11637 .loc 2 1358 0
+ 11638 aa61 8B85ACEC movl -4948(%rbp), %eax
+ 11638 FFFF
+ 11639 aa67 8985A8EC movl %eax, -4952(%rbp)
+ 11639 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 11640 .loc 2 1359 0
+ 11641 aa6d 8B85ACEC movl -4948(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 373
+
+
+ 11641 FFFF
+ 11642 aa73 8985A4EC movl %eax, -4956(%rbp)
+ 11642 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 11643 .loc 2 1360 0
+ 11644 aa79 8B85ACEC movl -4948(%rbp), %eax
+ 11644 FFFF
+ 11645 aa7f 8985A0EC movl %eax, -4960(%rbp)
+ 11645 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11646 .loc 2 1361 0
+ 11647 aa85 F30F6F85 movdqu -4960(%rbp), %xmm0
+ 11647 A0ECFFFF
+ 11648 .LBE1403:
+ 11649 .LBE1402:
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k33 : k33 : k33 : k33 */
+ 11650 .loc 2 1847 0
+ 11651 aa8d 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 11651 C0E5FFFF
+1848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k34 : k35 : x : x */
+ 11652 .loc 2 1848 0
+ 11653 aa95 660F6F85 movdqa -6736(%rbp), %xmm0
+ 11653 B0E5FFFF
+ 11654 aa9d 660FEF85 pxor -6720(%rbp), %xmm0
+ 11654 C0E5FFFF
+ 11655 aaa5 660F7F85 movdqa %xmm0, -6736(%rbp)
+ 11655 B0E5FFFF
+ 11656 aaad 660F6F85 movdqa -6784(%rbp), %xmm0
+ 11656 80E5FFFF
+ 11657 aab5 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 11657 20F9FFFF
+ 11658 aabd 660F6F85 movdqa -6752(%rbp), %xmm0
+ 11658 A0E5FFFF
+ 11659 aac5 F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 11659 10F9FFFF
+ 11660 .LBB1404:
+ 11661 .LBB1405:
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+ 11662 .loc 2 1471 0
+ 11663 aacd F30F6F85 movdqu -1760(%rbp), %xmm0
+ 11663 20F9FFFF
+ 11664 aad5 F30F7F85 movdqu %xmm0, -4928(%rbp)
+ 11664 C0ECFFFF
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+ 11665 .loc 2 1472 0
+ 11666 aadd F30F6F85 movdqu -1776(%rbp), %xmm0
+ 11666 10F9FFFF
+ 11667 aae5 F30F7F85 movdqu %xmm0, -4944(%rbp)
+ 11667 B0ECFFFF
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+ 11668 .loc 2 1474 0
+ 11669 aaed 8B85B0EC movl -4944(%rbp), %eax
+ 11669 FFFF
+ 11670 aaf3 8985C8EC movl %eax, -4920(%rbp)
+ 11670 FFFF
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+ 11671 .loc 2 1475 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 374
+
+
+ 11672 aaf9 8B85B4EC movl -4940(%rbp), %eax
+ 11672 FFFF
+ 11673 aaff 8985CCEC movl %eax, -4916(%rbp)
+ 11673 FFFF
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+ 11674 .loc 2 1477 0
+ 11675 ab05 F30F6F85 movdqu -4928(%rbp), %xmm0
+ 11675 C0ECFFFF
+ 11676 .LBE1405:
+ 11677 .LBE1404:
+1849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k28 : k29 : k30 : k31 */
+ 11678 .loc 2 1849 0
+ 11679 ab0d 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 11679 80E5FFFF
+1851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[7] = v1; /* K28:K29:K30:K31 */
+ 11680 .loc 2 1851 0
+ 11681 ab15 488B8588 movq -6264(%rbp), %rax
+ 11681 E7FFFF
+ 11682 ab1c 4883C070 addq $112, %rax
+ 11683 ab20 660F6F85 movdqa -6784(%rbp), %xmm0
+ 11683 80E5FFFF
+ 11684 ab28 660F7F00 movdqa %xmm0, (%rax)
+ 11685 ab2c 660F6F85 movdqa -6752(%rbp), %xmm0
+ 11685 A0E5FFFF
+ 11686 ab34 F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 11686 40F9FFFF
+ 11687 ab3c 660F6F85 movdqa -6736(%rbp), %xmm0
+ 11687 B0E5FFFF
+ 11688 ab44 F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 11688 30F9FFFF
+ 11689 .LBB1406:
+ 11690 .LBB1407:
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+ 11691 .loc 2 1503 0
+ 11692 ab4c F30F6F85 movdqu -1728(%rbp), %xmm0
+ 11692 40F9FFFF
+ 11693 ab54 F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 11693 E0ECFFFF
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+ 11694 .loc 2 1504 0
+ 11695 ab5c F30F6F85 movdqu -1744(%rbp), %xmm0
+ 11695 30F9FFFF
+ 11696 ab64 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 11696 D0ECFFFF
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[0] = ww.columns[2];
+ 11697 .loc 2 1506 0
+ 11698 ab6c 8B85E8EC movl -4888(%rbp), %eax
+ 11698 FFFF
+ 11699 ab72 8985E0EC movl %eax, -4896(%rbp)
+ 11699 FFFF
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[1] = ww.columns[3];
+ 11700 .loc 2 1507 0
+ 11701 ab78 8B85ECEC movl -4884(%rbp), %eax
+ 11701 FFFF
+ 11702 ab7e 8985E4EC movl %eax, -4892(%rbp)
+ 11702 FFFF
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+
GAS LISTING /tmp/ccMa7HLZ.s page 375
+
+
+ 11703 .loc 2 1508 0
+ 11704 ab84 8B85D0EC movl -4912(%rbp), %eax
+ 11704 FFFF
+ 11705 ab8a 8985E8EC movl %eax, -4888(%rbp)
+ 11705 FFFF
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+ 11706 .loc 2 1509 0
+ 11707 ab90 8B85D4EC movl -4908(%rbp), %eax
+ 11707 FFFF
+ 11708 ab96 8985ECEC movl %eax, -4884(%rbp)
+ 11708 FFFF
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+ 11709 .loc 2 1511 0
+ 11710 ab9c F30F6F85 movdqu -4896(%rbp), %xmm0
+ 11710 E0ECFFFF
+ 11711 .LBE1407:
+ 11712 .LBE1406:
+1853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k32 : k33 : k34 : k35 */
+ 11713 .loc 2 1853 0
+ 11714 aba4 660F7F85 movdqa %xmm0, -6768(%rbp)
+ 11714 90E5FFFF
+1854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[8] = v2; /* K32:K33:K34:K35 */
+ 11715 .loc 2 1854 0
+ 11716 abac 488B8588 movq -6264(%rbp), %rax
+ 11716 E7FFFF
+ 11717 abb3 4883E880 subq $-128, %rax
+ 11718 abb7 660F6F85 movdqa -6768(%rbp), %xmm0
+ 11718 90E5FFFF
+ 11719 abbf 660F7F00 movdqa %xmm0, (%rax)
+ 11720 abc3 660F6F85 movdqa -6752(%rbp), %xmm0
+ 11720 A0E5FFFF
+ 11721 abcb F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 11721 50F9FFFF
+ 11722 .LBB1408:
+ 11723 .LBB1409:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 11724 .loc 2 1565 0
+ 11725 abd3 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 11725 50F9FFFF
+ 11726 abdb 660F7F85 movdqa %xmm0, -6448(%rbp)
+ 11726 D0E6FFFF
+ 11727 abe3 660F6F85 movdqa -6448(%rbp), %xmm0
+ 11727 D0E6FFFF
+ 11728 abeb F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 11728 60F9FFFF
+ 11729 .LBB1410:
+ 11730 .LBB1411:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11731 .loc 2 1282 0
+ 11732 abf3 F30F6F85 movdqu -1696(%rbp), %xmm0
+ 11732 60F9FFFF
+ 11733 abfb F30F7F85 movdqu %xmm0, -4880(%rbp)
+ 11733 F0ECFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11734 .loc 2 1283 0
+ 11735 ac03 8B85F8EC movl -4872(%rbp), %eax
+ 11735 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 376
+
+
+ 11736 ac09 8985FCEC movl %eax, -4868(%rbp)
+ 11736 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11737 .loc 2 1284 0
+ 11738 ac0f 8B85F4EC movl -4876(%rbp), %eax
+ 11738 FFFF
+ 11739 ac15 8985F8EC movl %eax, -4872(%rbp)
+ 11739 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11740 .loc 2 1285 0
+ 11741 ac1b 8B85F0EC movl -4880(%rbp), %eax
+ 11741 FFFF
+ 11742 ac21 8985F4EC movl %eax, -4876(%rbp)
+ 11742 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11743 .loc 2 1286 0
+ 11744 ac27 C785F0EC movl $0, -4880(%rbp)
+ 11744 FFFF0000
+ 11744 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11745 .loc 2 1287 0
+ 11746 ac31 F30F6F85 movdqu -4880(%rbp), %xmm0
+ 11746 F0ECFFFF
+ 11747 .LBE1411:
+ 11748 .LBE1410:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11749 .loc 2 1567 0
+ 11750 ac39 660F7F85 movdqa %xmm0, -6448(%rbp)
+ 11750 D0E6FFFF
+ 11751 ac41 660F6F85 movdqa -6448(%rbp), %xmm0
+ 11751 D0E6FFFF
+ 11752 ac49 660FEF85 pxor -1712(%rbp), %xmm0
+ 11752 50F9FFFF
+ 11753 ac51 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 11753 50F9FFFF
+ 11754 ac59 660F6F85 movdqa -6448(%rbp), %xmm0
+ 11754 D0E6FFFF
+ 11755 ac61 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 11755 70F9FFFF
+ 11756 .LBB1412:
+ 11757 .LBB1413:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11758 .loc 2 1282 0
+ 11759 ac69 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 11759 70F9FFFF
+ 11760 ac71 F30F7F85 movdqu %xmm0, -4864(%rbp)
+ 11760 00EDFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11761 .loc 2 1283 0
+ 11762 ac79 8B8508ED movl -4856(%rbp), %eax
+ 11762 FFFF
+ 11763 ac7f 89850CED movl %eax, -4852(%rbp)
+ 11763 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11764 .loc 2 1284 0
+ 11765 ac85 8B8504ED movl -4860(%rbp), %eax
+ 11765 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 377
+
+
+ 11766 ac8b 898508ED movl %eax, -4856(%rbp)
+ 11766 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11767 .loc 2 1285 0
+ 11768 ac91 8B8500ED movl -4864(%rbp), %eax
+ 11768 FFFF
+ 11769 ac97 898504ED movl %eax, -4860(%rbp)
+ 11769 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11770 .loc 2 1286 0
+ 11771 ac9d C78500ED movl $0, -4864(%rbp)
+ 11771 FFFF0000
+ 11771 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11772 .loc 2 1287 0
+ 11773 aca7 F30F6F85 movdqu -4864(%rbp), %xmm0
+ 11773 00EDFFFF
+ 11774 .LBE1413:
+ 11775 .LBE1412:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11776 .loc 2 1568 0
+ 11777 acaf 660F7F85 movdqa %xmm0, -6448(%rbp)
+ 11777 D0E6FFFF
+ 11778 acb7 660F6F85 movdqa -6448(%rbp), %xmm0
+ 11778 D0E6FFFF
+ 11779 acbf 660FEF85 pxor -1712(%rbp), %xmm0
+ 11779 50F9FFFF
+ 11780 acc7 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 11780 50F9FFFF
+ 11781 accf 660F6F85 movdqa -6448(%rbp), %xmm0
+ 11781 D0E6FFFF
+ 11782 acd7 F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 11782 80F9FFFF
+ 11783 .LBB1414:
+ 11784 .LBB1415:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11785 .loc 2 1282 0
+ 11786 acdf F30F6F85 movdqu -1664(%rbp), %xmm0
+ 11786 80F9FFFF
+ 11787 ace7 F30F7F85 movdqu %xmm0, -4848(%rbp)
+ 11787 10EDFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11788 .loc 2 1283 0
+ 11789 acef 8B8518ED movl -4840(%rbp), %eax
+ 11789 FFFF
+ 11790 acf5 89851CED movl %eax, -4836(%rbp)
+ 11790 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11791 .loc 2 1284 0
+ 11792 acfb 8B8514ED movl -4844(%rbp), %eax
+ 11792 FFFF
+ 11793 ad01 898518ED movl %eax, -4840(%rbp)
+ 11793 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11794 .loc 2 1285 0
+ 11795 ad07 8B8510ED movl -4848(%rbp), %eax
+ 11795 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 378
+
+
+ 11796 ad0d 898514ED movl %eax, -4844(%rbp)
+ 11796 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11797 .loc 2 1286 0
+ 11798 ad13 C78510ED movl $0, -4848(%rbp)
+ 11798 FFFF0000
+ 11798 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11799 .loc 2 1287 0
+ 11800 ad1d F30F6F85 movdqu -4848(%rbp), %xmm0
+ 11800 10EDFFFF
+ 11801 .LBE1415:
+ 11802 .LBE1414:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11803 .loc 2 1569 0
+ 11804 ad25 660F7F85 movdqa %xmm0, -6448(%rbp)
+ 11804 D0E6FFFF
+ 11805 ad2d 660F6F85 movdqa -6448(%rbp), %xmm0
+ 11805 D0E6FFFF
+ 11806 ad35 660FEF85 pxor -1712(%rbp), %xmm0
+ 11806 50F9FFFF
+ 11807 ad3d F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 11807 50F9FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11808 .loc 2 1571 0
+ 11809 ad45 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 11809 50F9FFFF
+ 11810 .LBE1409:
+ 11811 .LBE1408:
+1856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k30 :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+ 11812 .loc 2 1856 0
+ 11813 ad4d 660F7F85 movdqa %xmm0, -6800(%rbp)
+ 11813 70E5FFFF
+ 11814 ad55 660F6F85 movdqa -6736(%rbp), %xmm0
+ 11814 B0E5FFFF
+ 11815 ad5d F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 11815 90F9FFFF
+ 11816 .LBB1416:
+ 11817 .LBB1417:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 11818 .loc 2 1565 0
+ 11819 ad65 F30F6F85 movdqu -1648(%rbp), %xmm0
+ 11819 90F9FFFF
+ 11820 ad6d 660F7F85 movdqa %xmm0, -6432(%rbp)
+ 11820 E0E6FFFF
+ 11821 ad75 660F6F85 movdqa -6432(%rbp), %xmm0
+ 11821 E0E6FFFF
+ 11822 ad7d F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 11822 A0F9FFFF
+ 11823 .LBB1418:
+ 11824 .LBB1419:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11825 .loc 2 1282 0
+ 11826 ad85 F30F6F85 movdqu -1632(%rbp), %xmm0
+ 11826 A0F9FFFF
+ 11827 ad8d F30F7F85 movdqu %xmm0, -4832(%rbp)
+ 11827 20EDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 379
+
+
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11828 .loc 2 1283 0
+ 11829 ad95 8B8528ED movl -4824(%rbp), %eax
+ 11829 FFFF
+ 11830 ad9b 89852CED movl %eax, -4820(%rbp)
+ 11830 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11831 .loc 2 1284 0
+ 11832 ada1 8B8524ED movl -4828(%rbp), %eax
+ 11832 FFFF
+ 11833 ada7 898528ED movl %eax, -4824(%rbp)
+ 11833 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11834 .loc 2 1285 0
+ 11835 adad 8B8520ED movl -4832(%rbp), %eax
+ 11835 FFFF
+ 11836 adb3 898524ED movl %eax, -4828(%rbp)
+ 11836 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11837 .loc 2 1286 0
+ 11838 adb9 C78520ED movl $0, -4832(%rbp)
+ 11838 FFFF0000
+ 11838 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11839 .loc 2 1287 0
+ 11840 adc3 F30F6F85 movdqu -4832(%rbp), %xmm0
+ 11840 20EDFFFF
+ 11841 .LBE1419:
+ 11842 .LBE1418:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11843 .loc 2 1567 0
+ 11844 adcb 660F7F85 movdqa %xmm0, -6432(%rbp)
+ 11844 E0E6FFFF
+ 11845 add3 660F6F85 movdqa -6432(%rbp), %xmm0
+ 11845 E0E6FFFF
+ 11846 addb 660FEF85 pxor -1648(%rbp), %xmm0
+ 11846 90F9FFFF
+ 11847 ade3 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 11847 90F9FFFF
+ 11848 adeb 660F6F85 movdqa -6432(%rbp), %xmm0
+ 11848 E0E6FFFF
+ 11849 adf3 F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 11849 B0F9FFFF
+ 11850 .LBB1420:
+ 11851 .LBB1421:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11852 .loc 2 1282 0
+ 11853 adfb F30F6F85 movdqu -1616(%rbp), %xmm0
+ 11853 B0F9FFFF
+ 11854 ae03 F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 11854 30EDFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11855 .loc 2 1283 0
+ 11856 ae0b 8B8538ED movl -4808(%rbp), %eax
+ 11856 FFFF
+ 11857 ae11 89853CED movl %eax, -4804(%rbp)
+ 11857 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 380
+
+
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11858 .loc 2 1284 0
+ 11859 ae17 8B8534ED movl -4812(%rbp), %eax
+ 11859 FFFF
+ 11860 ae1d 898538ED movl %eax, -4808(%rbp)
+ 11860 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11861 .loc 2 1285 0
+ 11862 ae23 8B8530ED movl -4816(%rbp), %eax
+ 11862 FFFF
+ 11863 ae29 898534ED movl %eax, -4812(%rbp)
+ 11863 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11864 .loc 2 1286 0
+ 11865 ae2f C78530ED movl $0, -4816(%rbp)
+ 11865 FFFF0000
+ 11865 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11866 .loc 2 1287 0
+ 11867 ae39 F30F6F85 movdqu -4816(%rbp), %xmm0
+ 11867 30EDFFFF
+ 11868 .LBE1421:
+ 11869 .LBE1420:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11870 .loc 2 1568 0
+ 11871 ae41 660F7F85 movdqa %xmm0, -6432(%rbp)
+ 11871 E0E6FFFF
+ 11872 ae49 660F6F85 movdqa -6432(%rbp), %xmm0
+ 11872 E0E6FFFF
+ 11873 ae51 660FEF85 pxor -1648(%rbp), %xmm0
+ 11873 90F9FFFF
+ 11874 ae59 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 11874 90F9FFFF
+ 11875 ae61 660F6F85 movdqa -6432(%rbp), %xmm0
+ 11875 E0E6FFFF
+ 11876 ae69 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 11876 C0F9FFFF
+ 11877 .LBB1422:
+ 11878 .LBB1423:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 11879 .loc 2 1282 0
+ 11880 ae71 F30F6F85 movdqu -1600(%rbp), %xmm0
+ 11880 C0F9FFFF
+ 11881 ae79 F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 11881 40EDFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 11882 .loc 2 1283 0
+ 11883 ae81 8B8548ED movl -4792(%rbp), %eax
+ 11883 FFFF
+ 11884 ae87 89854CED movl %eax, -4788(%rbp)
+ 11884 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 11885 .loc 2 1284 0
+ 11886 ae8d 8B8544ED movl -4796(%rbp), %eax
+ 11886 FFFF
+ 11887 ae93 898548ED movl %eax, -4792(%rbp)
+ 11887 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 381
+
+
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 11888 .loc 2 1285 0
+ 11889 ae99 8B8540ED movl -4800(%rbp), %eax
+ 11889 FFFF
+ 11890 ae9f 898544ED movl %eax, -4796(%rbp)
+ 11890 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 11891 .loc 2 1286 0
+ 11892 aea5 C78540ED movl $0, -4800(%rbp)
+ 11892 FFFF0000
+ 11892 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 11893 .loc 2 1287 0
+ 11894 aeaf F30F6F85 movdqu -4800(%rbp), %xmm0
+ 11894 40EDFFFF
+ 11895 .LBE1423:
+ 11896 .LBE1422:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11897 .loc 2 1569 0
+ 11898 aeb7 660F7F85 movdqa %xmm0, -6432(%rbp)
+ 11898 E0E6FFFF
+ 11899 aebf 660F6F85 movdqa -6432(%rbp), %xmm0
+ 11899 E0E6FFFF
+ 11900 aec7 660FEF85 pxor -1648(%rbp), %xmm0
+ 11900 90F9FFFF
+ 11901 aecf F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 11901 90F9FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11902 .loc 2 1571 0
+ 11903 aed7 F30F6F85 movdqu -1648(%rbp), %xmm0
+ 11903 90F9FFFF
+ 11904 .LBE1417:
+ 11905 .LBE1416:
+1857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k26 :k26^k27: k27 : 0 */
+ 11906 .loc 2 1857 0
+ 11907 aedf 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 11907 80E5FFFF
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 11908 .loc 2 1858 0
+ 11909 aee7 660F6F85 movdqa -6768(%rbp), %xmm0
+ 11909 90E5FFFF
+ 11910 aeef 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 11910 C0E5FFFF
+ 11911 aef7 660F6F85 movdqa -6720(%rbp), %xmm0
+ 11911 C0E5FFFF
+ 11912 aeff F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 11912 E0F9FFFF
+ 11913 .LBB1424:
+ 11914 .LBB1425:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 11915 .loc 2 1681 0
+ 11916 af07 B8200000 movl $32, %eax
+ 11916 00
+ 11917 af0c 660F6F05 movdqa vec_00(%rip), %xmm0
+ 11917 00000000
+ 11918 af14 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 11918 00FAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 382
+
+
+ 11919 af1c 8985FCF9 movl %eax, -1540(%rbp)
+ 11919 FFFF
+ 11920 .LBB1426:
+ 11921 .LBB1427:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 11922 .loc 2 522 0
+ 11923 af22 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 11923 00FAFFFF
+ 11924 af2a F30F7F85 movdqu %xmm0, -4720(%rbp)
+ 11924 90EDFFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 11925 .loc 2 523 0
+ 11926 af32 B8030000 movl $3, %eax
+ 11926 00
+ 11927 af37 4898 cltq
+ 11928 af39 8B95FCF9 movl -1540(%rbp), %edx
+ 11928 FFFF
+ 11929 af3f 89948590 movl %edx, -4720(%rbp,%rax,4)
+ 11929 EDFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 11930 .loc 2 524 0
+ 11931 af46 F30F6F85 movdqu -4720(%rbp), %xmm0
+ 11931 90EDFFFF
+ 11932 af4e F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 11932 00FAFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11933 .loc 2 526 0
+ 11934 af56 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 11934 00FAFFFF
+ 11935 .LBE1427:
+ 11936 .LBE1426:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 11937 .loc 2 1681 0
+ 11938 af5e 660F7F85 movdqa %xmm0, -6400(%rbp)
+ 11938 00E7FFFF
+ 11939 af66 F30F6F85 movdqu -1568(%rbp), %xmm0
+ 11939 E0F9FFFF
+ 11940 af6e F30F7F85 movdqu %xmm0, -1520(%rbp)
+ 11940 10FAFFFF
+ 11941 af76 F30F6F85 movdqu -1520(%rbp), %xmm0
+ 11941 10FAFFFF
+ 11942 af7e F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 11942 30FAFFFF
+ 11943 af86 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 11943 000000
+ 11944 af8d 48898528 movq %rax, -1496(%rbp)
+ 11944 FAFFFF
+ 11945 .LBB1428:
+ 11946 .LBB1429:
+ 11947 .LBB1430:
+ 11948 .LBB1431:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 11949 .loc 2 851 0
+ 11950 af94 660F6F05 movdqa vec_00(%rip), %xmm0
+ 11950 00000000
+ 11951 af9c F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 11951 50FAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 383
+
+
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 11952 .loc 2 854 0
+ 11953 afa4 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 11953 00000000
+ 11954 afac F30F6F8D movdqu -1488(%rbp), %xmm1
+ 11954 30FAFFFF
+ 11955 afb4 F30F7F8D movdqu %xmm1, -1376(%rbp)
+ 11955 A0FAFFFF
+ 11956 afbc F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 11956 90FAFFFF
+ 11957 .LBB1432:
+ 11958 .LBB1433:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 11959 .loc 2 206 0
+ 11960 afc4 F30F6F85 movdqu -1392(%rbp), %xmm0
+ 11960 90FAFFFF
+ 11961 afcc F30F6F8D movdqu -1376(%rbp), %xmm1
+ 11961 A0FAFFFF
+ 11962 afd4 660FDBC1 pand %xmm1, %xmm0
+ 11963 .LBE1433:
+ 11964 .LBE1432:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 11965 .loc 2 854 0
+ 11966 afd8 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 11966 80FAFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 11967 .loc 2 862 0
+ 11968 afe0 660F6F05 movdqa vec_10(%rip), %xmm0
+ 11968 00000000
+ 11969 afe8 F30F6F8D movdqu -1488(%rbp), %xmm1
+ 11969 30FAFFFF
+ 11970 aff0 F30F7F8D movdqu %xmm1, -1344(%rbp)
+ 11970 C0FAFFFF
+ 11971 aff8 F30F7F85 movdqu %xmm0, -1360(%rbp)
+ 11971 B0FAFFFF
+ 11972 .LBB1434:
+ 11973 .loc 2 2642 0
+ 11974 b000 0FB685C0 movzbl -1344(%rbp), %eax
+ 11974 FAFFFF
+ 11975 b007 0FB695B0 movzbl -1360(%rbp), %edx
+ 11975 FAFFFF
+ 11976 b00e 0FB6C0 movzbl %al, %eax
+ 11977 b011 6689852E movw %ax, -6866(%rbp)
+ 11977 E5FFFF
+ 11978 b018 0FB7852E movzwl -6866(%rbp), %eax
+ 11978 E5FFFF
+ 11979 b01f F6F2 divb %dl
+ 11980 b021 4189C7 movl %eax, %r15d
+ 11981 b024 0FB685C1 movzbl -1343(%rbp), %eax
+ 11981 FAFFFF
+ 11982 b02b 0FB695B1 movzbl -1359(%rbp), %edx
+ 11982 FAFFFF
+ 11983 b032 0FB6C0 movzbl %al, %eax
+ 11984 b035 6689852E movw %ax, -6866(%rbp)
+ 11984 E5FFFF
+ 11985 b03c 0FB7852E movzwl -6866(%rbp), %eax
+ 11985 E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 384
+
+
+ 11986 b043 F6F2 divb %dl
+ 11987 b045 88851FE7 movb %al, -6369(%rbp)
+ 11987 FFFF
+ 11988 b04b 0FB685C2 movzbl -1342(%rbp), %eax
+ 11988 FAFFFF
+ 11989 b052 0FB695B2 movzbl -1358(%rbp), %edx
+ 11989 FAFFFF
+ 11990 b059 0FB6C0 movzbl %al, %eax
+ 11991 b05c 6689852E movw %ax, -6866(%rbp)
+ 11991 E5FFFF
+ 11992 b063 0FB7852E movzwl -6866(%rbp), %eax
+ 11992 E5FFFF
+ 11993 b06a F6F2 divb %dl
+ 11994 b06c 88851EE7 movb %al, -6370(%rbp)
+ 11994 FFFF
+ 11995 b072 0FB685C3 movzbl -1341(%rbp), %eax
+ 11995 FAFFFF
+ 11996 b079 0FB695B3 movzbl -1357(%rbp), %edx
+ 11996 FAFFFF
+ 11997 b080 0FB6C0 movzbl %al, %eax
+ 11998 b083 6689852E movw %ax, -6866(%rbp)
+ 11998 E5FFFF
+ 11999 b08a 0FB7852E movzwl -6866(%rbp), %eax
+ 11999 E5FFFF
+ 12000 b091 F6F2 divb %dl
+ 12001 b093 88851DE7 movb %al, -6371(%rbp)
+ 12001 FFFF
+ 12002 b099 0FB685C4 movzbl -1340(%rbp), %eax
+ 12002 FAFFFF
+ 12003 b0a0 0FB695B4 movzbl -1356(%rbp), %edx
+ 12003 FAFFFF
+ 12004 b0a7 0FB6C0 movzbl %al, %eax
+ 12005 b0aa 6689852E movw %ax, -6866(%rbp)
+ 12005 E5FFFF
+ 12006 b0b1 0FB7852E movzwl -6866(%rbp), %eax
+ 12006 E5FFFF
+ 12007 b0b8 F6F2 divb %dl
+ 12008 b0ba 88851CE7 movb %al, -6372(%rbp)
+ 12008 FFFF
+ 12009 b0c0 0FB685C5 movzbl -1339(%rbp), %eax
+ 12009 FAFFFF
+ 12010 b0c7 0FB695B5 movzbl -1355(%rbp), %edx
+ 12010 FAFFFF
+ 12011 b0ce 0FB6C0 movzbl %al, %eax
+ 12012 b0d1 6689852E movw %ax, -6866(%rbp)
+ 12012 E5FFFF
+ 12013 b0d8 0FB7852E movzwl -6866(%rbp), %eax
+ 12013 E5FFFF
+ 12014 b0df F6F2 divb %dl
+ 12015 b0e1 4189C1 movl %eax, %r9d
+ 12016 b0e4 0FB685C6 movzbl -1338(%rbp), %eax
+ 12016 FAFFFF
+ 12017 b0eb 0FB695B6 movzbl -1354(%rbp), %edx
+ 12017 FAFFFF
+ 12018 b0f2 0FB6C0 movzbl %al, %eax
+ 12019 b0f5 6689852E movw %ax, -6866(%rbp)
+ 12019 E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 385
+
+
+ 12020 b0fc 0FB7852E movzwl -6866(%rbp), %eax
+ 12020 E5FFFF
+ 12021 b103 F6F2 divb %dl
+ 12022 b105 89C7 movl %eax, %edi
+ 12023 b107 0FB685C7 movzbl -1337(%rbp), %eax
+ 12023 FAFFFF
+ 12024 b10e 0FB695B7 movzbl -1353(%rbp), %edx
+ 12024 FAFFFF
+ 12025 b115 0FB6C0 movzbl %al, %eax
+ 12026 b118 6689852E movw %ax, -6866(%rbp)
+ 12026 E5FFFF
+ 12027 b11f 0FB7852E movzwl -6866(%rbp), %eax
+ 12027 E5FFFF
+ 12028 b126 F6F2 divb %dl
+ 12029 b128 89C3 movl %eax, %ebx
+ 12030 b12a 0FB685C8 movzbl -1336(%rbp), %eax
+ 12030 FAFFFF
+ 12031 b131 0FB695B8 movzbl -1352(%rbp), %edx
+ 12031 FAFFFF
+ 12032 b138 0FB6C0 movzbl %al, %eax
+ 12033 b13b 6689852E movw %ax, -6866(%rbp)
+ 12033 E5FFFF
+ 12034 b142 0FB7852E movzwl -6866(%rbp), %eax
+ 12034 E5FFFF
+ 12035 b149 F6F2 divb %dl
+ 12036 b14b 4189C2 movl %eax, %r10d
+ 12037 b14e 0FB685C9 movzbl -1335(%rbp), %eax
+ 12037 FAFFFF
+ 12038 b155 0FB695B9 movzbl -1351(%rbp), %edx
+ 12038 FAFFFF
+ 12039 b15c 0FB6C0 movzbl %al, %eax
+ 12040 b15f 6689852E movw %ax, -6866(%rbp)
+ 12040 E5FFFF
+ 12041 b166 0FB7852E movzwl -6866(%rbp), %eax
+ 12041 E5FFFF
+ 12042 b16d F6F2 divb %dl
+ 12043 b16f 4189C3 movl %eax, %r11d
+ 12044 b172 0FB685CA movzbl -1334(%rbp), %eax
+ 12044 FAFFFF
+ 12045 b179 0FB695BA movzbl -1350(%rbp), %edx
+ 12045 FAFFFF
+ 12046 b180 0FB6C0 movzbl %al, %eax
+ 12047 b183 6689852E movw %ax, -6866(%rbp)
+ 12047 E5FFFF
+ 12048 b18a 0FB7852E movzwl -6866(%rbp), %eax
+ 12048 E5FFFF
+ 12049 b191 F6F2 divb %dl
+ 12050 b193 4189C4 movl %eax, %r12d
+ 12051 b196 0FB685CB movzbl -1333(%rbp), %eax
+ 12051 FAFFFF
+ 12052 b19d 0FB695BB movzbl -1349(%rbp), %edx
+ 12052 FAFFFF
+ 12053 b1a4 0FB6C0 movzbl %al, %eax
+ 12054 b1a7 6689852E movw %ax, -6866(%rbp)
+ 12054 E5FFFF
+ 12055 b1ae 0FB7852E movzwl -6866(%rbp), %eax
+ 12055 E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 386
+
+
+ 12056 b1b5 F6F2 divb %dl
+ 12057 b1b7 4189C5 movl %eax, %r13d
+ 12058 b1ba 0FB685CC movzbl -1332(%rbp), %eax
+ 12058 FAFFFF
+ 12059 b1c1 0FB695BC movzbl -1348(%rbp), %edx
+ 12059 FAFFFF
+ 12060 b1c8 0FB6C0 movzbl %al, %eax
+ 12061 b1cb 6689852E movw %ax, -6866(%rbp)
+ 12061 E5FFFF
+ 12062 b1d2 0FB7852E movzwl -6866(%rbp), %eax
+ 12062 E5FFFF
+ 12063 b1d9 F6F2 divb %dl
+ 12064 b1db 4189C6 movl %eax, %r14d
+ 12065 b1de 0FB685CD movzbl -1331(%rbp), %eax
+ 12065 FAFFFF
+ 12066 b1e5 0FB695BD movzbl -1347(%rbp), %edx
+ 12066 FAFFFF
+ 12067 b1ec 0FB6C0 movzbl %al, %eax
+ 12068 b1ef 6689852E movw %ax, -6866(%rbp)
+ 12068 E5FFFF
+ 12069 b1f6 0FB7852E movzwl -6866(%rbp), %eax
+ 12069 E5FFFF
+ 12070 b1fd F6F2 divb %dl
+ 12071 b1ff 4189C0 movl %eax, %r8d
+ 12072 b202 0FB685CE movzbl -1330(%rbp), %eax
+ 12072 FAFFFF
+ 12073 b209 0FB695BE movzbl -1346(%rbp), %edx
+ 12073 FAFFFF
+ 12074 b210 0FB6C0 movzbl %al, %eax
+ 12075 b213 6689852E movw %ax, -6866(%rbp)
+ 12075 E5FFFF
+ 12076 b21a 0FB7852E movzwl -6866(%rbp), %eax
+ 12076 E5FFFF
+ 12077 b221 F6F2 divb %dl
+ 12078 b223 89C6 movl %eax, %esi
+ 12079 b225 0FB685CF movzbl -1329(%rbp), %eax
+ 12079 FAFFFF
+ 12080 b22c 0FB695BF movzbl -1345(%rbp), %edx
+ 12080 FAFFFF
+ 12081 b233 0FB6C0 movzbl %al, %eax
+ 12082 b236 6689852E movw %ax, -6866(%rbp)
+ 12082 E5FFFF
+ 12083 b23d 0FB7852E movzwl -6866(%rbp), %eax
+ 12083 E5FFFF
+ 12084 b244 F6F2 divb %dl
+ 12085 b246 89C1 movl %eax, %ecx
+ 12086 .LBB1435:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 12087 .loc 2 346 0
+ 12088 b248 0FB6D3 movzbl %bl, %edx
+ 12089 b24b 400FB6C7 movzbl %dil, %eax
+ 12090 b24f 48C1E208 salq $8, %rdx
+ 12091 b253 4809C2 orq %rax, %rdx
+ 12092 b256 410FB6C1 movzbl %r9b, %eax
+ 12093 b25a 48C1E208 salq $8, %rdx
+ 12094 b25e 4809C2 orq %rax, %rdx
+ 12095 b261 0FB6851C movzbl -6372(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 387
+
+
+ 12095 E7FFFF
+ 12096 b268 48C1E208 salq $8, %rdx
+ 12097 b26c 4809C2 orq %rax, %rdx
+ 12098 b26f 0FB6851D movzbl -6371(%rbp), %eax
+ 12098 E7FFFF
+ 12099 b276 48C1E208 salq $8, %rdx
+ 12100 b27a 4809C2 orq %rax, %rdx
+ 12101 b27d 0FB6851E movzbl -6370(%rbp), %eax
+ 12101 E7FFFF
+ 12102 b284 48C1E208 salq $8, %rdx
+ 12103 b288 4809C2 orq %rax, %rdx
+ 12104 b28b 0FB6851F movzbl -6369(%rbp), %eax
+ 12104 E7FFFF
+ 12105 b292 48C1E208 salq $8, %rdx
+ 12106 b296 4809C2 orq %rax, %rdx
+ 12107 b299 410FB6C7 movzbl %r15b, %eax
+ 12108 b29d 48C1E208 salq $8, %rdx
+ 12109 b2a1 4809C2 orq %rax, %rdx
+ 12110 b2a4 0FB6C1 movzbl %cl, %eax
+ 12111 b2a7 400FB6CE movzbl %sil, %ecx
+ 12112 b2ab 48C1E008 salq $8, %rax
+ 12113 b2af 4809C8 orq %rcx, %rax
+ 12114 b2b2 410FB6C8 movzbl %r8b, %ecx
+ 12115 b2b6 48C1E008 salq $8, %rax
+ 12116 b2ba 4809C8 orq %rcx, %rax
+ 12117 b2bd 410FB6CE movzbl %r14b, %ecx
+ 12118 b2c1 48C1E008 salq $8, %rax
+ 12119 b2c5 4809C8 orq %rcx, %rax
+ 12120 b2c8 410FB6CD movzbl %r13b, %ecx
+ 12121 b2cc 48C1E008 salq $8, %rax
+ 12122 b2d0 4809C8 orq %rcx, %rax
+ 12123 b2d3 410FB6CC movzbl %r12b, %ecx
+ 12124 b2d7 48C1E008 salq $8, %rax
+ 12125 b2db 4809C8 orq %rcx, %rax
+ 12126 b2de 410FB6CB movzbl %r11b, %ecx
+ 12127 b2e2 48C1E008 salq $8, %rax
+ 12128 b2e6 4809C8 orq %rcx, %rax
+ 12129 b2e9 410FB6CA movzbl %r10b, %ecx
+ 12130 b2ed 48C1E008 salq $8, %rax
+ 12131 b2f1 4809C8 orq %rcx, %rax
+ 12132 b2f4 48899540 movq %rdx, -6848(%rbp)
+ 12132 E5FFFF
+ 12133 b2fb 48898548 movq %rax, -6840(%rbp)
+ 12133 E5FFFF
+ 12134 b302 660F6F85 movdqa -6848(%rbp), %xmm0
+ 12134 40E5FFFF
+ 12135 .LBE1435:
+ 12136 .LBE1434:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 12137 .loc 2 862 0
+ 12138 b30a F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 12138 70FAFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 12139 .loc 2 866 0
+ 12140 b312 C7854CFA movl $0, -1460(%rbp)
+ 12140 FFFF0000
+ 12140 0000
+
GAS LISTING /tmp/ccMa7HLZ.s page 388
+
+
+ 12141 b31c E9860200 jmp .L276
+ 12141 00
+ 12142 .L285:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 12143 .loc 2 868 0
+ 12144 b321 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 12144 00000000
+ 12145 b329 F30F7F85 movdqu %xmm0, -1312(%rbp)
+ 12145 E0FAFFFF
+ 12146 b331 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 12146 70FAFFFF
+ 12147 b339 F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 12147 D0FAFFFF
+ 12148 .LBB1436:
+ 12149 .LBB1437:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 12150 .loc 2 380 0
+ 12151 b341 F30F6F85 movdqu -1312(%rbp), %xmm0
+ 12151 E0FAFFFF
+ 12152 b349 F30F7F85 movdqu %xmm0, -4688(%rbp)
+ 12152 B0EDFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 12153 .loc 2 381 0
+ 12154 b351 F30F6F85 movdqu -1328(%rbp), %xmm0
+ 12154 D0FAFFFF
+ 12155 b359 F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 12155 A0EDFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 12156 .loc 2 383 0
+ 12157 b361 C785FCFA movl $0, -1284(%rbp)
+ 12157 FFFF0000
+ 12157 0000
+ 12158 b36b EB5C jmp .L277
+ 12159 .L280:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 12160 .loc 2 385 0
+ 12161 b36d 8B85FCFA movl -1284(%rbp), %eax
+ 12161 FFFF
+ 12162 b373 89C0 mov %eax, %eax
+ 12163 b375 0FB68405 movzbl -4704(%rbp,%rax), %eax
+ 12163 A0EDFFFF
+ 12164 b37d 84C0 testb %al, %al
+ 12165 b37f 7912 jns .L278
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 12166 .loc 2 386 0
+ 12167 b381 8B85FCFA movl -1284(%rbp), %eax
+ 12167 FFFF
+ 12168 b387 89C0 mov %eax, %eax
+ 12169 b389 C68405C0 movb $0, -4672(%rbp,%rax)
+ 12169 EDFFFF00
+ 12170 b391 EB2F jmp .L279
+ 12171 .L278:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 12172 .loc 2 388 0
+ 12173 b393 8B8DFCFA movl -1284(%rbp), %ecx
+ 12173 FFFF
+ 12174 b399 8B85FCFA movl -1284(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 389
+
+
+ 12174 FFFF
+ 12175 b39f 89C0 mov %eax, %eax
+ 12176 b3a1 0FB68405 movzbl -4704(%rbp,%rax), %eax
+ 12176 A0EDFFFF
+ 12177 b3a9 0FB6C0 movzbl %al, %eax
+ 12178 b3ac 83E00F andl $15, %eax
+ 12179 b3af 4898 cltq
+ 12180 b3b1 0FB69405 movzbl -4688(%rbp,%rax), %edx
+ 12180 B0EDFFFF
+ 12181 b3b9 89C8 mov %ecx, %eax
+ 12182 b3bb 889405C0 movb %dl, -4672(%rbp,%rax)
+ 12182 EDFFFF
+ 12183 .L279:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 12184 .loc 2 383 0
+ 12185 b3c2 8385FCFA addl $1, -1284(%rbp)
+ 12185 FFFF01
+ 12186 .L277:
+ 12187 b3c9 83BDFCFA cmpl $15, -1284(%rbp)
+ 12187 FFFF0F
+ 12188 b3d0 769B jbe .L280
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 12189 .loc 2 391 0
+ 12190 b3d2 F30F6F85 movdqu -4672(%rbp), %xmm0
+ 12190 C0EDFFFF
+ 12191 .LBE1437:
+ 12192 .LBE1436:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 12193 .loc 2 868 0
+ 12194 b3da F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 12194 60FAFFFF
+ 12195 b3e2 F30F6F85 movdqu -1408(%rbp), %xmm0
+ 12195 80FAFFFF
+ 12196 b3ea F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 12196 10FBFFFF
+ 12197 b3f2 F30F6F85 movdqu -1440(%rbp), %xmm0
+ 12197 60FAFFFF
+ 12198 b3fa F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 12198 00FBFFFF
+ 12199 .LBB1438:
+ 12200 .LBB1439:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 12201 .loc 2 234 0
+ 12202 b402 F30F6F85 movdqu -1280(%rbp), %xmm0
+ 12202 00FBFFFF
+ 12203 b40a F30F6F8D movdqu -1264(%rbp), %xmm1
+ 12203 10FBFFFF
+ 12204 b412 660FEBC1 por %xmm1, %xmm0
+ 12205 .LBE1439:
+ 12206 .LBE1438:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 12207 .loc 2 870 0
+ 12208 b416 F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 12208 60FAFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 12209 .loc 2 872 0
+ 12210 b41e 8B854CFA mov -1460(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 390
+
+
+ 12210 FFFF
+ 12211 b424 48C1E004 salq $4, %rax
+ 12212 b428 48038528 addq -1496(%rbp), %rax
+ 12212 FAFFFF
+ 12213 b42f 660F6F00 movdqa (%rax), %xmm0
+ 12214 b433 F30F7F85 movdqu %xmm0, -1232(%rbp)
+ 12214 30FBFFFF
+ 12215 b43b F30F6F85 movdqu -1440(%rbp), %xmm0
+ 12215 60FAFFFF
+ 12216 b443 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 12216 20FBFFFF
+ 12217 .LBB1440:
+ 12218 .LBB1441:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 12219 .loc 2 380 0
+ 12220 b44b F30F6F85 movdqu -1232(%rbp), %xmm0
+ 12220 30FBFFFF
+ 12221 b453 F30F7F85 movdqu %xmm0, -4640(%rbp)
+ 12221 E0EDFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 12222 .loc 2 381 0
+ 12223 b45b F30F6F85 movdqu -1248(%rbp), %xmm0
+ 12223 20FBFFFF
+ 12224 b463 F30F7F85 movdqu %xmm0, -4656(%rbp)
+ 12224 D0EDFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 12225 .loc 2 383 0
+ 12226 b46b C7854CFB movl $0, -1204(%rbp)
+ 12226 FFFF0000
+ 12226 0000
+ 12227 b475 EB5C jmp .L281
+ 12228 .L284:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 12229 .loc 2 385 0
+ 12230 b477 8B854CFB movl -1204(%rbp), %eax
+ 12230 FFFF
+ 12231 b47d 89C0 mov %eax, %eax
+ 12232 b47f 0FB68405 movzbl -4656(%rbp,%rax), %eax
+ 12232 D0EDFFFF
+ 12233 b487 84C0 testb %al, %al
+ 12234 b489 7912 jns .L282
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 12235 .loc 2 386 0
+ 12236 b48b 8B854CFB movl -1204(%rbp), %eax
+ 12236 FFFF
+ 12237 b491 89C0 mov %eax, %eax
+ 12238 b493 C68405F0 movb $0, -4624(%rbp,%rax)
+ 12238 EDFFFF00
+ 12239 b49b EB2F jmp .L283
+ 12240 .L282:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 12241 .loc 2 388 0
+ 12242 b49d 8B8D4CFB movl -1204(%rbp), %ecx
+ 12242 FFFF
+ 12243 b4a3 8B854CFB movl -1204(%rbp), %eax
+ 12243 FFFF
+ 12244 b4a9 89C0 mov %eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 391
+
+
+ 12245 b4ab 0FB68405 movzbl -4656(%rbp,%rax), %eax
+ 12245 D0EDFFFF
+ 12246 b4b3 0FB6C0 movzbl %al, %eax
+ 12247 b4b6 83E00F andl $15, %eax
+ 12248 b4b9 4898 cltq
+ 12249 b4bb 0FB69405 movzbl -4640(%rbp,%rax), %edx
+ 12249 E0EDFFFF
+ 12250 b4c3 89C8 mov %ecx, %eax
+ 12251 b4c5 889405F0 movb %dl, -4624(%rbp,%rax)
+ 12251 EDFFFF
+ 12252 .L283:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 12253 .loc 2 383 0
+ 12254 b4cc 83854CFB addl $1, -1204(%rbp)
+ 12254 FFFF01
+ 12255 .L281:
+ 12256 b4d3 83BD4CFB cmpl $15, -1204(%rbp)
+ 12256 FFFF0F
+ 12257 b4da 769B jbe .L284
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 12258 .loc 2 391 0
+ 12259 b4dc F30F6F85 movdqu -4624(%rbp), %xmm0
+ 12259 F0EDFFFF
+ 12260 .LBE1441:
+ 12261 .LBE1440:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 12262 .loc 2 872 0
+ 12263 b4e4 F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 12263 60FAFFFF
+ 12264 b4ec F30F6F85 movdqu -1456(%rbp), %xmm0
+ 12264 50FAFFFF
+ 12265 b4f4 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 12265 60FBFFFF
+ 12266 b4fc F30F6F85 movdqu -1440(%rbp), %xmm0
+ 12266 60FAFFFF
+ 12267 b504 F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 12267 50FBFFFF
+ 12268 .LBB1442:
+ 12269 .LBB1443:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 12270 .loc 2 234 0
+ 12271 b50c F30F6F85 movdqu -1200(%rbp), %xmm0
+ 12271 50FBFFFF
+ 12272 b514 F30F6F8D movdqu -1184(%rbp), %xmm1
+ 12272 60FBFFFF
+ 12273 b51c 660FEBC1 por %xmm1, %xmm0
+ 12274 .LBE1443:
+ 12275 .LBE1442:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 12276 .loc 2 874 0
+ 12277 b520 F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 12277 50FAFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 12278 .loc 2 876 0
+ 12279 b528 660F6F05 movdqa vec_01(%rip), %xmm0
+ 12279 00000000
+ 12280 b530 F30F6F8D movdqu -1424(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s page 392
+
+
+ 12280 70FAFFFF
+ 12281 b538 F30F7F8D movdqu %xmm1, -1152(%rbp)
+ 12281 80FBFFFF
+ 12282 b540 F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 12282 70FBFFFF
+ 12283 .LBB1444:
+ 12284 .LBB1445:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 12285 .loc 2 290 0
+ 12286 b548 F30F6F8D movdqu -1168(%rbp), %xmm1
+ 12286 70FBFFFF
+ 12287 b550 F30F6F85 movdqu -1152(%rbp), %xmm0
+ 12287 80FBFFFF
+ 12288 b558 660FF8C1 psubb %xmm1, %xmm0
+ 12289 .LBE1445:
+ 12290 .LBE1444:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 12291 .loc 2 876 0
+ 12292 b55c F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 12292 70FAFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12293 .loc 2 878 0
+ 12294 b564 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 12294 00000000
+ 12295 b56c F30F6F8D movdqu -1424(%rbp), %xmm1
+ 12295 70FAFFFF
+ 12296 b574 F30F7F8D movdqu %xmm1, -1120(%rbp)
+ 12296 A0FBFFFF
+ 12297 b57c F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 12297 90FBFFFF
+ 12298 .LBB1446:
+ 12299 .LBB1447:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 12300 .loc 2 206 0
+ 12301 b584 F30F6F85 movdqu -1136(%rbp), %xmm0
+ 12301 90FBFFFF
+ 12302 b58c F30F6F8D movdqu -1120(%rbp), %xmm1
+ 12302 A0FBFFFF
+ 12303 b594 660FDBC1 pand %xmm1, %xmm0
+ 12304 .LBE1447:
+ 12305 .LBE1446:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12306 .loc 2 878 0
+ 12307 b598 F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 12307 70FAFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 12308 .loc 2 866 0
+ 12309 b5a0 83854CFA addl $1, -1460(%rbp)
+ 12309 FFFF01
+ 12310 .L276:
+ 12311 b5a7 83BD4CFA cmpl $15, -1460(%rbp)
+ 12311 FFFF0F
+ 12312 b5ae 0F866DFD jbe .L285
+ 12312 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 12313 .loc 2 882 0
+ 12314 b5b4 F30F6F85 movdqu -1456(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 393
+
+
+ 12314 50FAFFFF
+ 12315 .LBE1431:
+ 12316 .LBE1430:
+ 12317 .LBE1429:
+ 12318 .LBE1428:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 12319 .loc 2 1682 0
+ 12320 b5bc 660F7F85 movdqa %xmm0, -6416(%rbp)
+ 12320 F0E6FFFF
+ 12321 .LBB1448:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 12322 .loc 2 1683 0
+ 12323 b5c4 660F6F85 movdqa -6416(%rbp), %xmm0
+ 12323 F0E6FFFF
+ 12324 b5cc F30F7F85 movdqu %xmm0, -4736(%rbp)
+ 12324 80EDFFFF
+ 12325 b5d4 E8000000 call KDbgWriterGet at PLT
+ 12325 00
+ 12326 b5d9 4885C0 testq %rax, %rax
+ 12327 b5dc 7479 je .L287
+ 12328 b5de BF010000 movl $1, %edi
+ 12328 00
+ 12329 b5e3 E8000000 call KDbgCondToFlag at PLT
+ 12329 00
+ 12330 b5e8 4889C6 movq %rax, %rsi
+ 12331 b5eb BF100000 movl $16, %edi
+ 12331 00
+ 12332 b5f0 E8000000 call KDbgTestModConds at PLT
+ 12332 00
+ 12333 b5f5 84C0 testb %al, %al
+ 12334 b5f7 745E je .L287
+ 12335 b5f9 8B858CED movl -4724(%rbp), %eax
+ 12335 FFFF
+ 12336 b5ff 89C7 movl %eax, %edi
+ 12337 b601 E8FA49FF call bswap_32
+ 12337 FF
+ 12338 b606 4189C5 movl %eax, %r13d
+ 12339 b609 8B8588ED movl -4728(%rbp), %eax
+ 12339 FFFF
+ 12340 b60f 89C7 movl %eax, %edi
+ 12341 b611 E8EA49FF call bswap_32
+ 12341 FF
+ 12342 b616 4189C4 movl %eax, %r12d
+ 12343 b619 8B8584ED movl -4732(%rbp), %eax
+ 12343 FFFF
+ 12344 b61f 89C7 movl %eax, %edi
+ 12345 b621 E8DA49FF call bswap_32
+ 12345 FF
+ 12346 b626 89C3 movl %eax, %ebx
+ 12347 b628 8B8580ED movl -4736(%rbp), %eax
+ 12347 FFFF
+ 12348 b62e 89C7 movl %eax, %edi
+ 12349 b630 E8CB49FF call bswap_32
+ 12349 FF
+ 12350 b635 4589E9 movl %r13d, %r9d
+ 12351 b638 4589E0 movl %r12d, %r8d
+ 12352 b63b 89D9 movl %ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 394
+
+
+ 12353 b63d 89C2 movl %eax, %edx
+ 12354 b63f 488D3500 leaq .LC0(%rip), %rsi
+ 12354 000000
+ 12355 b646 488D3D00 leaq .LC1(%rip), %rdi
+ 12355 000000
+ 12356 b64d B8000000 movl $0, %eax
+ 12356 00
+ 12357 b652 E8000000 call KDbgMsg at PLT
+ 12357 00
+ 12358 .L287:
+ 12359 b657 660F6F85 movdqa -6416(%rbp), %xmm0
+ 12359 F0E6FFFF
+ 12360 b65f F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 12360 B0FBFFFF
+ 12361 .LBE1448:
+ 12362 .LBB1449:
+ 12363 .LBB1450:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 12364 .loc 2 667 0
+ 12365 b667 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 12365 00000000
+ 12366 b66f F30F6F8D movdqu -1104(%rbp), %xmm1
+ 12366 B0FBFFFF
+ 12367 b677 F30F7F8D movdqu %xmm1, -1072(%rbp)
+ 12367 D0FBFFFF
+ 12368 b67f F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 12368 C0FBFFFF
+ 12369 .LBB1451:
+ 12370 .LBB1452:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 12371 .loc 2 380 0
+ 12372 b687 F30F6F85 movdqu -1072(%rbp), %xmm0
+ 12372 D0FBFFFF
+ 12373 b68f F30F7F85 movdqu %xmm0, -4592(%rbp)
+ 12373 10EEFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 12374 .loc 2 381 0
+ 12375 b697 F30F6F85 movdqu -1088(%rbp), %xmm0
+ 12375 C0FBFFFF
+ 12376 b69f F30F7F85 movdqu %xmm0, -4608(%rbp)
+ 12376 00EEFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 12377 .loc 2 383 0
+ 12378 b6a7 C785ECFB movl $0, -1044(%rbp)
+ 12378 FFFF0000
+ 12378 0000
+ 12379 b6b1 EB5C jmp .L288
+ 12380 .L291:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 12381 .loc 2 385 0
+ 12382 b6b3 8B85ECFB movl -1044(%rbp), %eax
+ 12382 FFFF
+ 12383 b6b9 89C0 mov %eax, %eax
+ 12384 b6bb 0FB68405 movzbl -4608(%rbp,%rax), %eax
+ 12384 00EEFFFF
+ 12385 b6c3 84C0 testb %al, %al
+ 12386 b6c5 7912 jns .L289
+
GAS LISTING /tmp/ccMa7HLZ.s page 395
+
+
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 12387 .loc 2 386 0
+ 12388 b6c7 8B85ECFB movl -1044(%rbp), %eax
+ 12388 FFFF
+ 12389 b6cd 89C0 mov %eax, %eax
+ 12390 b6cf C6840520 movb $0, -4576(%rbp,%rax)
+ 12390 EEFFFF00
+ 12391 b6d7 EB2F jmp .L290
+ 12392 .L289:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 12393 .loc 2 388 0
+ 12394 b6d9 8B8DECFB movl -1044(%rbp), %ecx
+ 12394 FFFF
+ 12395 b6df 8B85ECFB movl -1044(%rbp), %eax
+ 12395 FFFF
+ 12396 b6e5 89C0 mov %eax, %eax
+ 12397 b6e7 0FB68405 movzbl -4608(%rbp,%rax), %eax
+ 12397 00EEFFFF
+ 12398 b6ef 0FB6C0 movzbl %al, %eax
+ 12399 b6f2 83E00F andl $15, %eax
+ 12400 b6f5 4898 cltq
+ 12401 b6f7 0FB69405 movzbl -4592(%rbp,%rax), %edx
+ 12401 10EEFFFF
+ 12402 b6ff 89C8 mov %ecx, %eax
+ 12403 b701 88940520 movb %dl, -4576(%rbp,%rax)
+ 12403 EEFFFF
+ 12404 .L290:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 12405 .loc 2 383 0
+ 12406 b708 8385ECFB addl $1, -1044(%rbp)
+ 12406 FFFF01
+ 12407 .L288:
+ 12408 b70f 83BDECFB cmpl $15, -1044(%rbp)
+ 12408 FFFF0F
+ 12409 b716 769B jbe .L291
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 12410 .loc 2 391 0
+ 12411 b718 F30F6F85 movdqu -4576(%rbp), %xmm0
+ 12411 20EEFFFF
+ 12412 .LBE1452:
+ 12413 .LBE1451:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 12414 .loc 2 667 0
+ 12415 b720 F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 12415 B0FBFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 12416 .loc 2 668 0
+ 12417 b728 F30F6F85 movdqu -1104(%rbp), %xmm0
+ 12417 B0FBFFFF
+ 12418 .LBE1450:
+ 12419 .LBE1449:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 12420 .loc 2 1684 0
+ 12421 b730 660F7F85 movdqa %xmm0, -6416(%rbp)
+ 12421 F0E6FFFF
+ 12422 .LBB1453:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+
GAS LISTING /tmp/ccMa7HLZ.s page 396
+
+
+ 12423 .loc 2 1685 0
+ 12424 b738 660F6F85 movdqa -6416(%rbp), %xmm0
+ 12424 F0E6FFFF
+ 12425 b740 F30F7F85 movdqu %xmm0, -4752(%rbp)
+ 12425 70EDFFFF
+ 12426 b748 E8000000 call KDbgWriterGet at PLT
+ 12426 00
+ 12427 b74d 4885C0 testq %rax, %rax
+ 12428 b750 7479 je .L293
+ 12429 b752 BF010000 movl $1, %edi
+ 12429 00
+ 12430 b757 E8000000 call KDbgCondToFlag at PLT
+ 12430 00
+ 12431 b75c 4889C6 movq %rax, %rsi
+ 12432 b75f BF100000 movl $16, %edi
+ 12432 00
+ 12433 b764 E8000000 call KDbgTestModConds at PLT
+ 12433 00
+ 12434 b769 84C0 testb %al, %al
+ 12435 b76b 745E je .L293
+ 12436 b76d 8B857CED movl -4740(%rbp), %eax
+ 12436 FFFF
+ 12437 b773 89C7 movl %eax, %edi
+ 12438 b775 E88648FF call bswap_32
+ 12438 FF
+ 12439 b77a 4189C5 movl %eax, %r13d
+ 12440 b77d 8B8578ED movl -4744(%rbp), %eax
+ 12440 FFFF
+ 12441 b783 89C7 movl %eax, %edi
+ 12442 b785 E87648FF call bswap_32
+ 12442 FF
+ 12443 b78a 4189C4 movl %eax, %r12d
+ 12444 b78d 8B8574ED movl -4748(%rbp), %eax
+ 12444 FFFF
+ 12445 b793 89C7 movl %eax, %edi
+ 12446 b795 E86648FF call bswap_32
+ 12446 FF
+ 12447 b79a 89C3 movl %eax, %ebx
+ 12448 b79c 8B8570ED movl -4752(%rbp), %eax
+ 12448 FFFF
+ 12449 b7a2 89C7 movl %eax, %edi
+ 12450 b7a4 E85748FF call bswap_32
+ 12450 FF
+ 12451 b7a9 4589E9 movl %r13d, %r9d
+ 12452 b7ac 4589E0 movl %r12d, %r8d
+ 12453 b7af 89D9 movl %ebx, %ecx
+ 12454 b7b1 89C2 movl %eax, %edx
+ 12455 b7b3 488D3500 leaq .LC2(%rip), %rsi
+ 12455 000000
+ 12456 b7ba 488D3D00 leaq .LC1(%rip), %rdi
+ 12456 000000
+ 12457 b7c1 B8000000 movl $0, %eax
+ 12457 00
+ 12458 b7c6 E8000000 call KDbgMsg at PLT
+ 12458 00
+ 12459 .L293:
+ 12460 b7cb 660F6F85 movdqa -6416(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 397
+
+
+ 12460 F0E6FFFF
+ 12461 b7d3 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 12461 00FCFFFF
+ 12462 b7db 660F6F85 movdqa -6400(%rbp), %xmm0
+ 12462 00E7FFFF
+ 12463 b7e3 F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 12463 F0FBFFFF
+ 12464 .LBE1453:
+ 12465 .LBB1454:
+ 12466 .LBB1455:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 12467 .loc 2 178 0
+ 12468 b7eb F30F6F85 movdqu -1040(%rbp), %xmm0
+ 12468 F0FBFFFF
+ 12469 b7f3 F30F6F8D movdqu -1024(%rbp), %xmm1
+ 12469 00FCFFFF
+ 12470 b7fb 660FEFC1 pxor %xmm1, %xmm0
+ 12471 .LBE1455:
+ 12472 .LBE1454:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 12473 .loc 2 1686 0
+ 12474 b7ff 660F7F85 movdqa %xmm0, -6416(%rbp)
+ 12474 F0E6FFFF
+ 12475 .LBB1456:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 12476 .loc 2 1687 0
+ 12477 b807 660F6F85 movdqa -6416(%rbp), %xmm0
+ 12477 F0E6FFFF
+ 12478 b80f F30F7F85 movdqu %xmm0, -4768(%rbp)
+ 12478 60EDFFFF
+ 12479 b817 E8000000 call KDbgWriterGet at PLT
+ 12479 00
+ 12480 b81c 4885C0 testq %rax, %rax
+ 12481 b81f 7479 je .L295
+ 12482 b821 BF010000 movl $1, %edi
+ 12482 00
+ 12483 b826 E8000000 call KDbgCondToFlag at PLT
+ 12483 00
+ 12484 b82b 4889C6 movq %rax, %rsi
+ 12485 b82e BF100000 movl $16, %edi
+ 12485 00
+ 12486 b833 E8000000 call KDbgTestModConds at PLT
+ 12486 00
+ 12487 b838 84C0 testb %al, %al
+ 12488 b83a 745E je .L295
+ 12489 b83c 8B856CED movl -4756(%rbp), %eax
+ 12489 FFFF
+ 12490 b842 89C7 movl %eax, %edi
+ 12491 b844 E8B747FF call bswap_32
+ 12491 FF
+ 12492 b849 4189C5 movl %eax, %r13d
+ 12493 b84c 8B8568ED movl -4760(%rbp), %eax
+ 12493 FFFF
+ 12494 b852 89C7 movl %eax, %edi
+ 12495 b854 E8A747FF call bswap_32
+ 12495 FF
+ 12496 b859 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s page 398
+
+
+ 12497 b85c 8B8564ED movl -4764(%rbp), %eax
+ 12497 FFFF
+ 12498 b862 89C7 movl %eax, %edi
+ 12499 b864 E89747FF call bswap_32
+ 12499 FF
+ 12500 b869 89C3 movl %eax, %ebx
+ 12501 b86b 8B8560ED movl -4768(%rbp), %eax
+ 12501 FFFF
+ 12502 b871 89C7 movl %eax, %edi
+ 12503 b873 E88847FF call bswap_32
+ 12503 FF
+ 12504 b878 4589E9 movl %r13d, %r9d
+ 12505 b87b 4589E0 movl %r12d, %r8d
+ 12506 b87e 89D9 movl %ebx, %ecx
+ 12507 b880 89C2 movl %eax, %edx
+ 12508 b882 488D3500 leaq .LC3(%rip), %rsi
+ 12508 000000
+ 12509 b889 488D3D00 leaq .LC1(%rip), %rdi
+ 12509 000000
+ 12510 b890 B8000000 movl $0, %eax
+ 12510 00
+ 12511 b895 E8000000 call KDbgMsg at PLT
+ 12511 00
+ 12512 .L295:
+ 12513 b89a 660F6F85 movdqa -6416(%rbp), %xmm0
+ 12513 F0E6FFFF
+ 12514 b8a2 F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 12514 10FCFFFF
+ 12515 .LBE1456:
+ 12516 .LBB1457:
+ 12517 .LBB1458:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 12518 .loc 2 1357 0
+ 12519 b8aa F30F6F85 movdqu -1008(%rbp), %xmm0
+ 12519 10FCFFFF
+ 12520 b8b2 F30F7F85 movdqu %xmm0, -4560(%rbp)
+ 12520 30EEFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 12521 .loc 2 1358 0
+ 12522 b8ba 8B853CEE movl -4548(%rbp), %eax
+ 12522 FFFF
+ 12523 b8c0 898538EE movl %eax, -4552(%rbp)
+ 12523 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 12524 .loc 2 1359 0
+ 12525 b8c6 8B853CEE movl -4548(%rbp), %eax
+ 12525 FFFF
+ 12526 b8cc 898534EE movl %eax, -4556(%rbp)
+ 12526 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 12527 .loc 2 1360 0
+ 12528 b8d2 8B853CEE movl -4548(%rbp), %eax
+ 12528 FFFF
+ 12529 b8d8 898530EE movl %eax, -4560(%rbp)
+ 12529 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 12530 .loc 2 1361 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 399
+
+
+ 12531 b8de F30F6F85 movdqu -4560(%rbp), %xmm0
+ 12531 30EEFFFF
+ 12532 .LBE1458:
+ 12533 .LBE1457:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 12534 .loc 2 1688 0
+ 12535 b8e6 660F7F85 movdqa %xmm0, -6416(%rbp)
+ 12535 F0E6FFFF
+ 12536 .LBB1459:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 12537 .loc 2 1689 0
+ 12538 b8ee 660F6F85 movdqa -6416(%rbp), %xmm0
+ 12538 F0E6FFFF
+ 12539 b8f6 F30F7F85 movdqu %xmm0, -4784(%rbp)
+ 12539 50EDFFFF
+ 12540 b8fe E8000000 call KDbgWriterGet at PLT
+ 12540 00
+ 12541 b903 4885C0 testq %rax, %rax
+ 12542 b906 7479 je .L297
+ 12543 b908 BF010000 movl $1, %edi
+ 12543 00
+ 12544 b90d E8000000 call KDbgCondToFlag at PLT
+ 12544 00
+ 12545 b912 4889C6 movq %rax, %rsi
+ 12546 b915 BF100000 movl $16, %edi
+ 12546 00
+ 12547 b91a E8000000 call KDbgTestModConds at PLT
+ 12547 00
+ 12548 b91f 84C0 testb %al, %al
+ 12549 b921 745E je .L297
+ 12550 b923 8B855CED movl -4772(%rbp), %eax
+ 12550 FFFF
+ 12551 b929 89C7 movl %eax, %edi
+ 12552 b92b E8D046FF call bswap_32
+ 12552 FF
+ 12553 b930 4189C5 movl %eax, %r13d
+ 12554 b933 8B8558ED movl -4776(%rbp), %eax
+ 12554 FFFF
+ 12555 b939 89C7 movl %eax, %edi
+ 12556 b93b E8C046FF call bswap_32
+ 12556 FF
+ 12557 b940 4189C4 movl %eax, %r12d
+ 12558 b943 8B8554ED movl -4780(%rbp), %eax
+ 12558 FFFF
+ 12559 b949 89C7 movl %eax, %edi
+ 12560 b94b E8B046FF call bswap_32
+ 12560 FF
+ 12561 b950 89C3 movl %eax, %ebx
+ 12562 b952 8B8550ED movl -4784(%rbp), %eax
+ 12562 FFFF
+ 12563 b958 89C7 movl %eax, %edi
+ 12564 b95a E8A146FF call bswap_32
+ 12564 FF
+ 12565 b95f 4589E9 movl %r13d, %r9d
+ 12566 b962 4589E0 movl %r12d, %r8d
+ 12567 b965 89D9 movl %ebx, %ecx
+ 12568 b967 89C2 movl %eax, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 400
+
+
+ 12569 b969 488D3500 leaq .LC4(%rip), %rsi
+ 12569 000000
+ 12570 b970 488D3D00 leaq .LC1(%rip), %rdi
+ 12570 000000
+ 12571 b977 B8000000 movl $0, %eax
+ 12571 00
+ 12572 b97c E8000000 call KDbgMsg at PLT
+ 12572 00
+ 12573 .L297:
+ 12574 .LBE1459:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 12575 .loc 2 1690 0
+ 12576 b981 660F6F85 movdqa -6416(%rbp), %xmm0
+ 12576 F0E6FFFF
+ 12577 .LBE1425:
+ 12578 .LBE1424:
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 12579 .loc 2 1858 0
+ 12580 b989 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 12580 C0E5FFFF
+1860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k36 : k37 : k38 : k39 */
+ 12581 .loc 2 1860 0
+ 12582 b991 660F6F85 movdqa -6800(%rbp), %xmm0
+ 12582 70E5FFFF
+ 12583 b999 660FEF85 pxor -6720(%rbp), %xmm0
+ 12583 C0E5FFFF
+ 12584 b9a1 660F7F85 movdqa %xmm0, -6800(%rbp)
+ 12584 70E5FFFF
+ 12585 b9a9 660F6F85 movdqa -6800(%rbp), %xmm0
+ 12585 70E5FFFF
+ 12586 b9b1 F30F7F85 movdqu %xmm0, -992(%rbp)
+ 12586 20FCFFFF
+ 12587 .LBB1460:
+ 12588 .LBB1461:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 12589 .loc 2 1357 0
+ 12590 b9b9 F30F6F85 movdqu -992(%rbp), %xmm0
+ 12590 20FCFFFF
+ 12591 b9c1 F30F7F85 movdqu %xmm0, -4544(%rbp)
+ 12591 40EEFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 12592 .loc 2 1358 0
+ 12593 b9c9 8B854CEE movl -4532(%rbp), %eax
+ 12593 FFFF
+ 12594 b9cf 898548EE movl %eax, -4536(%rbp)
+ 12594 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 12595 .loc 2 1359 0
+ 12596 b9d5 8B854CEE movl -4532(%rbp), %eax
+ 12596 FFFF
+ 12597 b9db 898544EE movl %eax, -4540(%rbp)
+ 12597 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 12598 .loc 2 1360 0
+ 12599 b9e1 8B854CEE movl -4532(%rbp), %eax
+ 12599 FFFF
+ 12600 b9e7 898540EE movl %eax, -4544(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 401
+
+
+ 12600 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 12601 .loc 2 1361 0
+ 12602 b9ed F30F6F85 movdqu -4544(%rbp), %xmm0
+ 12602 40EEFFFF
+ 12603 .LBE1461:
+ 12604 .LBE1460:
+1861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (v0); /* k39 : k39 : k39 : k39 */
+ 12605 .loc 2 1861 0
+ 12606 b9f5 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 12606 C0E5FFFF
+1862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k40 : k41 : x : x */
+ 12607 .loc 2 1862 0
+ 12608 b9fd 660F6F85 movdqa -6784(%rbp), %xmm0
+ 12608 80E5FFFF
+ 12609 ba05 660FEF85 pxor -6720(%rbp), %xmm0
+ 12609 C0E5FFFF
+ 12610 ba0d 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 12610 80E5FFFF
+1864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[9] = v0; /* K36:K37:K38:K39 */
+ 12611 .loc 2 1864 0
+ 12612 ba15 488B8588 movq -6264(%rbp), %rax
+ 12612 E7FFFF
+ 12613 ba1c 48059000 addq $144, %rax
+ 12613 0000
+ 12614 ba22 660F6F85 movdqa -6800(%rbp), %xmm0
+ 12614 70E5FFFF
+ 12615 ba2a 660F7F00 movdqa %xmm0, (%rax)
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 12616 .loc 2 1869 0
+ 12617 ba2e 660F6F85 movdqa -6784(%rbp), %xmm0
+ 12617 80E5FFFF
+ 12618 ba36 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 12618 C0E5FFFF
+ 12619 ba3e 660F6F85 movdqa -6720(%rbp), %xmm0
+ 12619 C0E5FFFF
+ 12620 ba46 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 12620 40FCFFFF
+ 12621 .LBB1462:
+ 12622 .LBB1463:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+ 12623 .loc 2 1629 0
+ 12624 ba4e B8400000 movl $64, %eax
+ 12624 00
+ 12625 ba53 0FB6C0 movzbl %al, %eax
+ 12626 ba56 898560FC movl %eax, -928(%rbp)
+ 12626 FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 12627 .loc 2 1630 0
+ 12628 ba5c F30F6F85 movdqu -960(%rbp), %xmm0
+ 12628 40FCFFFF
+ 12629 ba64 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 12629 60EEFFFF
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 12630 .loc 2 1631 0
+ 12631 ba6c 8B8564EE movl -4508(%rbp), %eax
+ 12631 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 402
+
+
+ 12632 ba72 898564FC movl %eax, -924(%rbp)
+ 12632 FFFF
+ 12633 .LBB1464:
+ 12634 .LBB1465:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 12635 .loc 2 740 0
+ 12636 ba78 8B8564FC movl -924(%rbp), %eax
+ 12636 FFFF
+ 12637 ba7e 898550EE movl %eax, -4528(%rbp)
+ 12637 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 12638 .loc 2 741 0
+ 12639 ba84 C78568FC movl $0, -920(%rbp)
+ 12639 FFFF0000
+ 12639 0000
+ 12640 ba8e EB36 jmp .L298
+ 12641 .L299:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 12642 .loc 2 742 0
+ 12643 ba90 8B8D68FC movl -920(%rbp), %ecx
+ 12643 FFFF
+ 12644 ba96 8B8568FC movl -920(%rbp), %eax
+ 12644 FFFF
+ 12645 ba9c 89C0 mov %eax, %eax
+ 12646 ba9e 0FB68405 movzbl -4528(%rbp,%rax), %eax
+ 12646 50EEFFFF
+ 12647 baa6 0FB6C0 movzbl %al, %eax
+ 12648 baa9 89C2 mov %eax, %edx
+ 12649 baab 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 12649 000000
+ 12650 bab2 0FB61402 movzbl (%rdx,%rax), %edx
+ 12651 bab6 89C8 mov %ecx, %eax
+ 12652 bab8 88940550 movb %dl, -4528(%rbp,%rax)
+ 12652 EEFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 12653 .loc 2 741 0
+ 12654 babf 838568FC addl $1, -920(%rbp)
+ 12654 FFFF01
+ 12655 .L298:
+ 12656 bac6 83BD68FC cmpl $3, -920(%rbp)
+ 12656 FFFF03
+ 12657 bacd 76C1 jbe .L299
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 12658 .loc 2 743 0
+ 12659 bacf 8B8550EE movl -4528(%rbp), %eax
+ 12659 FFFF
+ 12660 .LBE1465:
+ 12661 .LBE1464:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 12662 .loc 2 1631 0
+ 12663 bad5 89855CFC movl %eax, -932(%rbp)
+ 12663 FFFF
+ 12664 badb 8B855CFC movl -932(%rbp), %eax
+ 12664 FFFF
+ 12665 bae1 89856CFC movl %eax, -916(%rbp)
+ 12665 FFFF
+ 12666 .LBB1466:
+
GAS LISTING /tmp/ccMa7HLZ.s page 403
+
+
+ 12667 .LBB1467:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+ 12668 .loc 2 1196 0
+ 12669 bae7 8B856CFC movl -916(%rbp), %eax
+ 12669 FFFF
+ 12670 baed C1C808 rorl $8, %eax
+ 12671 .LBE1467:
+ 12672 .LBE1466:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+ 12673 .loc 2 1632 0
+ 12674 baf0 89855CFC movl %eax, -932(%rbp)
+ 12674 FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+ 12675 .loc 2 1633 0
+ 12676 baf6 8B8560FC movl -928(%rbp), %eax
+ 12676 FFFF
+ 12677 bafc 31855CFC xorl %eax, -932(%rbp)
+ 12677 FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 12678 .loc 2 1635 0
+ 12679 bb02 8B855CFC movl -932(%rbp), %eax
+ 12679 FFFF
+ 12680 bb08 89856CEE movl %eax, -4500(%rbp)
+ 12680 FFFF
+ 12681 bb0e 8B856CEE movl -4500(%rbp), %eax
+ 12681 FFFF
+ 12682 bb14 898568EE movl %eax, -4504(%rbp)
+ 12682 FFFF
+ 12683 bb1a 8B8568EE movl -4504(%rbp), %eax
+ 12683 FFFF
+ 12684 bb20 898564EE movl %eax, -4508(%rbp)
+ 12684 FFFF
+ 12685 bb26 8B8564EE movl -4508(%rbp), %eax
+ 12685 FFFF
+ 12686 bb2c 898560EE movl %eax, -4512(%rbp)
+ 12686 FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 12687 .loc 2 1636 0
+ 12688 bb32 F30F6F85 movdqu -4512(%rbp), %xmm0
+ 12688 60EEFFFF
+ 12689 .LBE1463:
+ 12690 .LBE1462:
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 12691 .loc 2 1869 0
+ 12692 bb3a 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 12692 C0E5FFFF
+ 12693 bb42 660F6F85 movdqa -6800(%rbp), %xmm0
+ 12693 70E5FFFF
+ 12694 bb4a F30F7F85 movdqu %xmm0, -912(%rbp)
+ 12694 70FCFFFF
+ 12695 .LBB1468:
+ 12696 .LBB1469:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 12697 .loc 2 1565 0
+ 12698 bb52 F30F6F85 movdqu -912(%rbp), %xmm0
+ 12698 70FCFFFF
+ 12699 bb5a 660F7F85 movdqa %xmm0, -6368(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 404
+
+
+ 12699 20E7FFFF
+ 12700 bb62 660F6F85 movdqa -6368(%rbp), %xmm0
+ 12700 20E7FFFF
+ 12701 bb6a F30F7F85 movdqu %xmm0, -896(%rbp)
+ 12701 80FCFFFF
+ 12702 .LBB1470:
+ 12703 .LBB1471:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 12704 .loc 2 1282 0
+ 12705 bb72 F30F6F85 movdqu -896(%rbp), %xmm0
+ 12705 80FCFFFF
+ 12706 bb7a F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 12706 70EEFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 12707 .loc 2 1283 0
+ 12708 bb82 8B8578EE movl -4488(%rbp), %eax
+ 12708 FFFF
+ 12709 bb88 89857CEE movl %eax, -4484(%rbp)
+ 12709 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 12710 .loc 2 1284 0
+ 12711 bb8e 8B8574EE movl -4492(%rbp), %eax
+ 12711 FFFF
+ 12712 bb94 898578EE movl %eax, -4488(%rbp)
+ 12712 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 12713 .loc 2 1285 0
+ 12714 bb9a 8B8570EE movl -4496(%rbp), %eax
+ 12714 FFFF
+ 12715 bba0 898574EE movl %eax, -4492(%rbp)
+ 12715 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 12716 .loc 2 1286 0
+ 12717 bba6 C78570EE movl $0, -4496(%rbp)
+ 12717 FFFF0000
+ 12717 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 12718 .loc 2 1287 0
+ 12719 bbb0 F30F6F85 movdqu -4496(%rbp), %xmm0
+ 12719 70EEFFFF
+ 12720 .LBE1471:
+ 12721 .LBE1470:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12722 .loc 2 1567 0
+ 12723 bbb8 660F7F85 movdqa %xmm0, -6368(%rbp)
+ 12723 20E7FFFF
+ 12724 bbc0 660F6F85 movdqa -6368(%rbp), %xmm0
+ 12724 20E7FFFF
+ 12725 bbc8 660FEF85 pxor -912(%rbp), %xmm0
+ 12725 70FCFFFF
+ 12726 bbd0 F30F7F85 movdqu %xmm0, -912(%rbp)
+ 12726 70FCFFFF
+ 12727 bbd8 660F6F85 movdqa -6368(%rbp), %xmm0
+ 12727 20E7FFFF
+ 12728 bbe0 F30F7F85 movdqu %xmm0, -880(%rbp)
+ 12728 90FCFFFF
+ 12729 .LBB1472:
+
GAS LISTING /tmp/ccMa7HLZ.s page 405
+
+
+ 12730 .LBB1473:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 12731 .loc 2 1282 0
+ 12732 bbe8 F30F6F85 movdqu -880(%rbp), %xmm0
+ 12732 90FCFFFF
+ 12733 bbf0 F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 12733 80EEFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 12734 .loc 2 1283 0
+ 12735 bbf8 8B8588EE movl -4472(%rbp), %eax
+ 12735 FFFF
+ 12736 bbfe 89858CEE movl %eax, -4468(%rbp)
+ 12736 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 12737 .loc 2 1284 0
+ 12738 bc04 8B8584EE movl -4476(%rbp), %eax
+ 12738 FFFF
+ 12739 bc0a 898588EE movl %eax, -4472(%rbp)
+ 12739 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 12740 .loc 2 1285 0
+ 12741 bc10 8B8580EE movl -4480(%rbp), %eax
+ 12741 FFFF
+ 12742 bc16 898584EE movl %eax, -4476(%rbp)
+ 12742 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 12743 .loc 2 1286 0
+ 12744 bc1c C78580EE movl $0, -4480(%rbp)
+ 12744 FFFF0000
+ 12744 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 12745 .loc 2 1287 0
+ 12746 bc26 F30F6F85 movdqu -4480(%rbp), %xmm0
+ 12746 80EEFFFF
+ 12747 .LBE1473:
+ 12748 .LBE1472:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12749 .loc 2 1568 0
+ 12750 bc2e 660F7F85 movdqa %xmm0, -6368(%rbp)
+ 12750 20E7FFFF
+ 12751 bc36 660F6F85 movdqa -6368(%rbp), %xmm0
+ 12751 20E7FFFF
+ 12752 bc3e 660FEF85 pxor -912(%rbp), %xmm0
+ 12752 70FCFFFF
+ 12753 bc46 F30F7F85 movdqu %xmm0, -912(%rbp)
+ 12753 70FCFFFF
+ 12754 bc4e 660F6F85 movdqa -6368(%rbp), %xmm0
+ 12754 20E7FFFF
+ 12755 bc56 F30F7F85 movdqu %xmm0, -864(%rbp)
+ 12755 A0FCFFFF
+ 12756 .LBB1474:
+ 12757 .LBB1475:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 12758 .loc 2 1282 0
+ 12759 bc5e F30F6F85 movdqu -864(%rbp), %xmm0
+ 12759 A0FCFFFF
+ 12760 bc66 F30F7F85 movdqu %xmm0, -4464(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 406
+
+
+ 12760 90EEFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 12761 .loc 2 1283 0
+ 12762 bc6e 8B8598EE movl -4456(%rbp), %eax
+ 12762 FFFF
+ 12763 bc74 89859CEE movl %eax, -4452(%rbp)
+ 12763 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 12764 .loc 2 1284 0
+ 12765 bc7a 8B8594EE movl -4460(%rbp), %eax
+ 12765 FFFF
+ 12766 bc80 898598EE movl %eax, -4456(%rbp)
+ 12766 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 12767 .loc 2 1285 0
+ 12768 bc86 8B8590EE movl -4464(%rbp), %eax
+ 12768 FFFF
+ 12769 bc8c 898594EE movl %eax, -4460(%rbp)
+ 12769 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 12770 .loc 2 1286 0
+ 12771 bc92 C78590EE movl $0, -4464(%rbp)
+ 12771 FFFF0000
+ 12771 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 12772 .loc 2 1287 0
+ 12773 bc9c F30F6F85 movdqu -4464(%rbp), %xmm0
+ 12773 90EEFFFF
+ 12774 .LBE1475:
+ 12775 .LBE1474:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12776 .loc 2 1569 0
+ 12777 bca4 660F7F85 movdqa %xmm0, -6368(%rbp)
+ 12777 20E7FFFF
+ 12778 bcac 660F6F85 movdqa -6368(%rbp), %xmm0
+ 12778 20E7FFFF
+ 12779 bcb4 660FEF85 pxor -912(%rbp), %xmm0
+ 12779 70FCFFFF
+ 12780 bcbc F30F7F85 movdqu %xmm0, -912(%rbp)
+ 12780 70FCFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 12781 .loc 2 1571 0
+ 12782 bcc4 F30F6F85 movdqu -912(%rbp), %xmm0
+ 12782 70FCFFFF
+ 12783 .LBE1469:
+ 12784 .LBE1468:
+1871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k36 :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+ 12785 .loc 2 1871 0
+ 12786 bccc 660F7F85 movdqa %xmm0, -6752(%rbp)
+ 12786 A0E5FFFF
+ 12787 bcd4 660F6F85 movdqa -6784(%rbp), %xmm0
+ 12787 80E5FFFF
+ 12788 bcdc F30F7F85 movdqu %xmm0, -848(%rbp)
+ 12788 B0FCFFFF
+ 12789 .LBB1476:
+ 12790 .LBB1477:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 407
+
+
+ 12791 .loc 2 1565 0
+ 12792 bce4 F30F6F85 movdqu -848(%rbp), %xmm0
+ 12792 B0FCFFFF
+ 12793 bcec 660F7F85 movdqa %xmm0, -6352(%rbp)
+ 12793 30E7FFFF
+ 12794 bcf4 660F6F85 movdqa -6352(%rbp), %xmm0
+ 12794 30E7FFFF
+ 12795 bcfc F30F7F85 movdqu %xmm0, -832(%rbp)
+ 12795 C0FCFFFF
+ 12796 .LBB1478:
+ 12797 .LBB1479:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 12798 .loc 2 1282 0
+ 12799 bd04 F30F6F85 movdqu -832(%rbp), %xmm0
+ 12799 C0FCFFFF
+ 12800 bd0c F30F7F85 movdqu %xmm0, -4448(%rbp)
+ 12800 A0EEFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 12801 .loc 2 1283 0
+ 12802 bd14 8B85A8EE movl -4440(%rbp), %eax
+ 12802 FFFF
+ 12803 bd1a 8985ACEE movl %eax, -4436(%rbp)
+ 12803 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 12804 .loc 2 1284 0
+ 12805 bd20 8B85A4EE movl -4444(%rbp), %eax
+ 12805 FFFF
+ 12806 bd26 8985A8EE movl %eax, -4440(%rbp)
+ 12806 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 12807 .loc 2 1285 0
+ 12808 bd2c 8B85A0EE movl -4448(%rbp), %eax
+ 12808 FFFF
+ 12809 bd32 8985A4EE movl %eax, -4444(%rbp)
+ 12809 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 12810 .loc 2 1286 0
+ 12811 bd38 C785A0EE movl $0, -4448(%rbp)
+ 12811 FFFF0000
+ 12811 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 12812 .loc 2 1287 0
+ 12813 bd42 F30F6F85 movdqu -4448(%rbp), %xmm0
+ 12813 A0EEFFFF
+ 12814 .LBE1479:
+ 12815 .LBE1478:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12816 .loc 2 1567 0
+ 12817 bd4a 660F7F85 movdqa %xmm0, -6352(%rbp)
+ 12817 30E7FFFF
+ 12818 bd52 660F6F85 movdqa -6352(%rbp), %xmm0
+ 12818 30E7FFFF
+ 12819 bd5a 660FEF85 pxor -848(%rbp), %xmm0
+ 12819 B0FCFFFF
+ 12820 bd62 F30F7F85 movdqu %xmm0, -848(%rbp)
+ 12820 B0FCFFFF
+ 12821 bd6a 660F6F85 movdqa -6352(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 408
+
+
+ 12821 30E7FFFF
+ 12822 bd72 F30F7F85 movdqu %xmm0, -816(%rbp)
+ 12822 D0FCFFFF
+ 12823 .LBB1480:
+ 12824 .LBB1481:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 12825 .loc 2 1282 0
+ 12826 bd7a F30F6F85 movdqu -816(%rbp), %xmm0
+ 12826 D0FCFFFF
+ 12827 bd82 F30F7F85 movdqu %xmm0, -4432(%rbp)
+ 12827 B0EEFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 12828 .loc 2 1283 0
+ 12829 bd8a 8B85B8EE movl -4424(%rbp), %eax
+ 12829 FFFF
+ 12830 bd90 8985BCEE movl %eax, -4420(%rbp)
+ 12830 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 12831 .loc 2 1284 0
+ 12832 bd96 8B85B4EE movl -4428(%rbp), %eax
+ 12832 FFFF
+ 12833 bd9c 8985B8EE movl %eax, -4424(%rbp)
+ 12833 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 12834 .loc 2 1285 0
+ 12835 bda2 8B85B0EE movl -4432(%rbp), %eax
+ 12835 FFFF
+ 12836 bda8 8985B4EE movl %eax, -4428(%rbp)
+ 12836 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 12837 .loc 2 1286 0
+ 12838 bdae C785B0EE movl $0, -4432(%rbp)
+ 12838 FFFF0000
+ 12838 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 12839 .loc 2 1287 0
+ 12840 bdb8 F30F6F85 movdqu -4432(%rbp), %xmm0
+ 12840 B0EEFFFF
+ 12841 .LBE1481:
+ 12842 .LBE1480:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12843 .loc 2 1568 0
+ 12844 bdc0 660F7F85 movdqa %xmm0, -6352(%rbp)
+ 12844 30E7FFFF
+ 12845 bdc8 660F6F85 movdqa -6352(%rbp), %xmm0
+ 12845 30E7FFFF
+ 12846 bdd0 660FEF85 pxor -848(%rbp), %xmm0
+ 12846 B0FCFFFF
+ 12847 bdd8 F30F7F85 movdqu %xmm0, -848(%rbp)
+ 12847 B0FCFFFF
+ 12848 bde0 660F6F85 movdqa -6352(%rbp), %xmm0
+ 12848 30E7FFFF
+ 12849 bde8 F30F7F85 movdqu %xmm0, -800(%rbp)
+ 12849 E0FCFFFF
+ 12850 .LBB1482:
+ 12851 .LBB1483:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 409
+
+
+ 12852 .loc 2 1282 0
+ 12853 bdf0 F30F6F85 movdqu -800(%rbp), %xmm0
+ 12853 E0FCFFFF
+ 12854 bdf8 F30F7F85 movdqu %xmm0, -4416(%rbp)
+ 12854 C0EEFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 12855 .loc 2 1283 0
+ 12856 be00 8B85C8EE movl -4408(%rbp), %eax
+ 12856 FFFF
+ 12857 be06 8985CCEE movl %eax, -4404(%rbp)
+ 12857 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 12858 .loc 2 1284 0
+ 12859 be0c 8B85C4EE movl -4412(%rbp), %eax
+ 12859 FFFF
+ 12860 be12 8985C8EE movl %eax, -4408(%rbp)
+ 12860 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 12861 .loc 2 1285 0
+ 12862 be18 8B85C0EE movl -4416(%rbp), %eax
+ 12862 FFFF
+ 12863 be1e 8985C4EE movl %eax, -4412(%rbp)
+ 12863 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 12864 .loc 2 1286 0
+ 12865 be24 C785C0EE movl $0, -4416(%rbp)
+ 12865 FFFF0000
+ 12865 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 12866 .loc 2 1287 0
+ 12867 be2e F30F6F85 movdqu -4416(%rbp), %xmm0
+ 12867 C0EEFFFF
+ 12868 .LBE1483:
+ 12869 .LBE1482:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12870 .loc 2 1569 0
+ 12871 be36 660F7F85 movdqa %xmm0, -6352(%rbp)
+ 12871 30E7FFFF
+ 12872 be3e 660F6F85 movdqa -6352(%rbp), %xmm0
+ 12872 30E7FFFF
+ 12873 be46 660FEF85 pxor -848(%rbp), %xmm0
+ 12873 B0FCFFFF
+ 12874 be4e F30F7F85 movdqu %xmm0, -848(%rbp)
+ 12874 B0FCFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 12875 .loc 2 1571 0
+ 12876 be56 F30F6F85 movdqu -848(%rbp), %xmm0
+ 12876 B0FCFFFF
+ 12877 .LBE1477:
+ 12878 .LBE1476:
+1872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k40 :k40^k41: x 5 : x */
+ 12879 .loc 2 1872 0
+ 12880 be5e 660F7F85 movdqa %xmm0, -6736(%rbp)
+ 12880 B0E5FFFF
+1873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k42 : k43 : k44 : k45 */
+ 12881 .loc 2 1873 0
+ 12882 be66 660F6F85 movdqa -6752(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 410
+
+
+ 12882 A0E5FFFF
+ 12883 be6e 660FEF85 pxor -6720(%rbp), %xmm0
+ 12883 C0E5FFFF
+ 12884 be76 660F7F85 movdqa %xmm0, -6752(%rbp)
+ 12884 A0E5FFFF
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k45 : k45 : k45 : k45 */
+ 12885 .loc 2 1874 0
+ 12886 be7e 660F6F85 movdqa -6752(%rbp), %xmm0
+ 12886 A0E5FFFF
+ 12887 be86 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 12887 C0E5FFFF
+ 12888 be8e 660F6F85 movdqa -6720(%rbp), %xmm0
+ 12888 C0E5FFFF
+ 12889 be96 F30F7F85 movdqu %xmm0, -784(%rbp)
+ 12889 F0FCFFFF
+ 12890 .LBB1484:
+ 12891 .LBB1485:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 12892 .loc 2 1357 0
+ 12893 be9e F30F6F85 movdqu -784(%rbp), %xmm0
+ 12893 F0FCFFFF
+ 12894 bea6 F30F7F85 movdqu %xmm0, -4400(%rbp)
+ 12894 D0EEFFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 12895 .loc 2 1358 0
+ 12896 beae 8B85DCEE movl -4388(%rbp), %eax
+ 12896 FFFF
+ 12897 beb4 8985D8EE movl %eax, -4392(%rbp)
+ 12897 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 12898 .loc 2 1359 0
+ 12899 beba 8B85DCEE movl -4388(%rbp), %eax
+ 12899 FFFF
+ 12900 bec0 8985D4EE movl %eax, -4396(%rbp)
+ 12900 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 12901 .loc 2 1360 0
+ 12902 bec6 8B85DCEE movl -4388(%rbp), %eax
+ 12902 FFFF
+ 12903 becc 8985D0EE movl %eax, -4400(%rbp)
+ 12903 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 12904 .loc 2 1361 0
+ 12905 bed2 F30F6F85 movdqu -4400(%rbp), %xmm0
+ 12905 D0EEFFFF
+ 12906 .LBE1485:
+ 12907 .LBE1484:
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k45 : k45 : k45 : k45 */
+ 12908 .loc 2 1874 0
+ 12909 beda 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 12909 C0E5FFFF
+1875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k46 : k47 : x : x */
+ 12910 .loc 2 1875 0
+ 12911 bee2 660F6F85 movdqa -6736(%rbp), %xmm0
+ 12911 B0E5FFFF
+ 12912 beea 660FEF85 pxor -6720(%rbp), %xmm0
+ 12912 C0E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 411
+
+
+ 12913 bef2 660F7F85 movdqa %xmm0, -6736(%rbp)
+ 12913 B0E5FFFF
+ 12914 befa 660F6F85 movdqa -6784(%rbp), %xmm0
+ 12914 80E5FFFF
+ 12915 bf02 F30F7F85 movdqu %xmm0, -752(%rbp)
+ 12915 10FDFFFF
+ 12916 bf0a 660F6F85 movdqa -6752(%rbp), %xmm0
+ 12916 A0E5FFFF
+ 12917 bf12 F30F7F85 movdqu %xmm0, -768(%rbp)
+ 12917 00FDFFFF
+ 12918 .LBB1486:
+ 12919 .LBB1487:
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+ 12920 .loc 2 1471 0
+ 12921 bf1a F30F6F85 movdqu -752(%rbp), %xmm0
+ 12921 10FDFFFF
+ 12922 bf22 F30F7F85 movdqu %xmm0, -4368(%rbp)
+ 12922 F0EEFFFF
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+ 12923 .loc 2 1472 0
+ 12924 bf2a F30F6F85 movdqu -768(%rbp), %xmm0
+ 12924 00FDFFFF
+ 12925 bf32 F30F7F85 movdqu %xmm0, -4384(%rbp)
+ 12925 E0EEFFFF
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+ 12926 .loc 2 1474 0
+ 12927 bf3a 8B85E0EE movl -4384(%rbp), %eax
+ 12927 FFFF
+ 12928 bf40 8985F8EE movl %eax, -4360(%rbp)
+ 12928 FFFF
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+ 12929 .loc 2 1475 0
+ 12930 bf46 8B85E4EE movl -4380(%rbp), %eax
+ 12930 FFFF
+ 12931 bf4c 8985FCEE movl %eax, -4356(%rbp)
+ 12931 FFFF
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+ 12932 .loc 2 1477 0
+ 12933 bf52 F30F6F85 movdqu -4368(%rbp), %xmm0
+ 12933 F0EEFFFF
+ 12934 .LBE1487:
+ 12935 .LBE1486:
+1876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k40 : k41 : k42 : k43 */
+ 12936 .loc 2 1876 0
+ 12937 bf5a 660F7F85 movdqa %xmm0, -6784(%rbp)
+ 12937 80E5FFFF
+1877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[10] = v1; /* K40:K41:K42:K43 */
+ 12938 .loc 2 1877 0
+ 12939 bf62 488B8588 movq -6264(%rbp), %rax
+ 12939 E7FFFF
+ 12940 bf69 4805A000 addq $160, %rax
+ 12940 0000
+ 12941 bf6f 660F6F85 movdqa -6784(%rbp), %xmm0
+ 12941 80E5FFFF
+ 12942 bf77 660F7F00 movdqa %xmm0, (%rax)
+ 12943 bf7b 660F6F85 movdqa -6752(%rbp), %xmm0
+ 12943 A0E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 412
+
+
+ 12944 bf83 F30F7F85 movdqu %xmm0, -720(%rbp)
+ 12944 30FDFFFF
+ 12945 bf8b 660F6F85 movdqa -6736(%rbp), %xmm0
+ 12945 B0E5FFFF
+ 12946 bf93 F30F7F85 movdqu %xmm0, -736(%rbp)
+ 12946 20FDFFFF
+ 12947 .LBB1488:
+ 12948 .LBB1489:
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+ 12949 .loc 2 1503 0
+ 12950 bf9b F30F6F85 movdqu -720(%rbp), %xmm0
+ 12950 30FDFFFF
+ 12951 bfa3 F30F7F85 movdqu %xmm0, -4336(%rbp)
+ 12951 10EFFFFF
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+ 12952 .loc 2 1504 0
+ 12953 bfab F30F6F85 movdqu -736(%rbp), %xmm0
+ 12953 20FDFFFF
+ 12954 bfb3 F30F7F85 movdqu %xmm0, -4352(%rbp)
+ 12954 00EFFFFF
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[0] = ww.columns[2];
+ 12955 .loc 2 1506 0
+ 12956 bfbb 8B8518EF movl -4328(%rbp), %eax
+ 12956 FFFF
+ 12957 bfc1 898510EF movl %eax, -4336(%rbp)
+ 12957 FFFF
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[1] = ww.columns[3];
+ 12958 .loc 2 1507 0
+ 12959 bfc7 8B851CEF movl -4324(%rbp), %eax
+ 12959 FFFF
+ 12960 bfcd 898514EF movl %eax, -4332(%rbp)
+ 12960 FFFF
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+ 12961 .loc 2 1508 0
+ 12962 bfd3 8B8500EF movl -4352(%rbp), %eax
+ 12962 FFFF
+ 12963 bfd9 898518EF movl %eax, -4328(%rbp)
+ 12963 FFFF
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+ 12964 .loc 2 1509 0
+ 12965 bfdf 8B8504EF movl -4348(%rbp), %eax
+ 12965 FFFF
+ 12966 bfe5 89851CEF movl %eax, -4324(%rbp)
+ 12966 FFFF
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+ 12967 .loc 2 1511 0
+ 12968 bfeb F30F6F85 movdqu -4336(%rbp), %xmm0
+ 12968 10EFFFFF
+ 12969 .LBE1489:
+ 12970 .LBE1488:
+1878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k44 : k45 : k46 : k47 */
+ 12971 .loc 2 1878 0
+ 12972 bff3 660F7F85 movdqa %xmm0, -6768(%rbp)
+ 12972 90E5FFFF
+1879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[11] = v2; /* K44:K45:K46:K47 */
+ 12973 .loc 2 1879 0
+ 12974 bffb 488B8588 movq -6264(%rbp), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 413
+
+
+ 12974 E7FFFF
+ 12975 c002 4805B000 addq $176, %rax
+ 12975 0000
+ 12976 c008 660F6F85 movdqa -6768(%rbp), %xmm0
+ 12976 90E5FFFF
+ 12977 c010 660F7F00 movdqa %xmm0, (%rax)
+ 12978 c014 660F6F85 movdqa -6752(%rbp), %xmm0
+ 12978 A0E5FFFF
+ 12979 c01c F30F7F85 movdqu %xmm0, -704(%rbp)
+ 12979 40FDFFFF
+ 12980 .LBB1490:
+ 12981 .LBB1491:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 12982 .loc 2 1565 0
+ 12983 c024 F30F6F85 movdqu -704(%rbp), %xmm0
+ 12983 40FDFFFF
+ 12984 c02c 660F7F85 movdqa %xmm0, -6336(%rbp)
+ 12984 40E7FFFF
+ 12985 c034 660F6F85 movdqa -6336(%rbp), %xmm0
+ 12985 40E7FFFF
+ 12986 c03c F30F7F85 movdqu %xmm0, -688(%rbp)
+ 12986 50FDFFFF
+ 12987 .LBB1492:
+ 12988 .LBB1493:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 12989 .loc 2 1282 0
+ 12990 c044 F30F6F85 movdqu -688(%rbp), %xmm0
+ 12990 50FDFFFF
+ 12991 c04c F30F7F85 movdqu %xmm0, -4320(%rbp)
+ 12991 20EFFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 12992 .loc 2 1283 0
+ 12993 c054 8B8528EF movl -4312(%rbp), %eax
+ 12993 FFFF
+ 12994 c05a 89852CEF movl %eax, -4308(%rbp)
+ 12994 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 12995 .loc 2 1284 0
+ 12996 c060 8B8524EF movl -4316(%rbp), %eax
+ 12996 FFFF
+ 12997 c066 898528EF movl %eax, -4312(%rbp)
+ 12997 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 12998 .loc 2 1285 0
+ 12999 c06c 8B8520EF movl -4320(%rbp), %eax
+ 12999 FFFF
+ 13000 c072 898524EF movl %eax, -4316(%rbp)
+ 13000 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 13001 .loc 2 1286 0
+ 13002 c078 C78520EF movl $0, -4320(%rbp)
+ 13002 FFFF0000
+ 13002 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 13003 .loc 2 1287 0
+ 13004 c082 F30F6F85 movdqu -4320(%rbp), %xmm0
+ 13004 20EFFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 414
+
+
+ 13005 .LBE1493:
+ 13006 .LBE1492:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13007 .loc 2 1567 0
+ 13008 c08a 660F7F85 movdqa %xmm0, -6336(%rbp)
+ 13008 40E7FFFF
+ 13009 c092 660F6F85 movdqa -6336(%rbp), %xmm0
+ 13009 40E7FFFF
+ 13010 c09a 660FEF85 pxor -704(%rbp), %xmm0
+ 13010 40FDFFFF
+ 13011 c0a2 F30F7F85 movdqu %xmm0, -704(%rbp)
+ 13011 40FDFFFF
+ 13012 c0aa 660F6F85 movdqa -6336(%rbp), %xmm0
+ 13012 40E7FFFF
+ 13013 c0b2 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 13013 60FDFFFF
+ 13014 .LBB1494:
+ 13015 .LBB1495:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 13016 .loc 2 1282 0
+ 13017 c0ba F30F6F85 movdqu -672(%rbp), %xmm0
+ 13017 60FDFFFF
+ 13018 c0c2 F30F7F85 movdqu %xmm0, -4304(%rbp)
+ 13018 30EFFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 13019 .loc 2 1283 0
+ 13020 c0ca 8B8538EF movl -4296(%rbp), %eax
+ 13020 FFFF
+ 13021 c0d0 89853CEF movl %eax, -4292(%rbp)
+ 13021 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 13022 .loc 2 1284 0
+ 13023 c0d6 8B8534EF movl -4300(%rbp), %eax
+ 13023 FFFF
+ 13024 c0dc 898538EF movl %eax, -4296(%rbp)
+ 13024 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 13025 .loc 2 1285 0
+ 13026 c0e2 8B8530EF movl -4304(%rbp), %eax
+ 13026 FFFF
+ 13027 c0e8 898534EF movl %eax, -4300(%rbp)
+ 13027 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 13028 .loc 2 1286 0
+ 13029 c0ee C78530EF movl $0, -4304(%rbp)
+ 13029 FFFF0000
+ 13029 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 13030 .loc 2 1287 0
+ 13031 c0f8 F30F6F85 movdqu -4304(%rbp), %xmm0
+ 13031 30EFFFFF
+ 13032 .LBE1495:
+ 13033 .LBE1494:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13034 .loc 2 1568 0
+ 13035 c100 660F7F85 movdqa %xmm0, -6336(%rbp)
+ 13035 40E7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 415
+
+
+ 13036 c108 660F6F85 movdqa -6336(%rbp), %xmm0
+ 13036 40E7FFFF
+ 13037 c110 660FEF85 pxor -704(%rbp), %xmm0
+ 13037 40FDFFFF
+ 13038 c118 F30F7F85 movdqu %xmm0, -704(%rbp)
+ 13038 40FDFFFF
+ 13039 c120 660F6F85 movdqa -6336(%rbp), %xmm0
+ 13039 40E7FFFF
+ 13040 c128 F30F7F85 movdqu %xmm0, -656(%rbp)
+ 13040 70FDFFFF
+ 13041 .LBB1496:
+ 13042 .LBB1497:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 13043 .loc 2 1282 0
+ 13044 c130 F30F6F85 movdqu -656(%rbp), %xmm0
+ 13044 70FDFFFF
+ 13045 c138 F30F7F85 movdqu %xmm0, -4288(%rbp)
+ 13045 40EFFFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 13046 .loc 2 1283 0
+ 13047 c140 8B8548EF movl -4280(%rbp), %eax
+ 13047 FFFF
+ 13048 c146 89854CEF movl %eax, -4276(%rbp)
+ 13048 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 13049 .loc 2 1284 0
+ 13050 c14c 8B8544EF movl -4284(%rbp), %eax
+ 13050 FFFF
+ 13051 c152 898548EF movl %eax, -4280(%rbp)
+ 13051 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 13052 .loc 2 1285 0
+ 13053 c158 8B8540EF movl -4288(%rbp), %eax
+ 13053 FFFF
+ 13054 c15e 898544EF movl %eax, -4284(%rbp)
+ 13054 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 13055 .loc 2 1286 0
+ 13056 c164 C78540EF movl $0, -4288(%rbp)
+ 13056 FFFF0000
+ 13056 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 13057 .loc 2 1287 0
+ 13058 c16e F30F6F85 movdqu -4288(%rbp), %xmm0
+ 13058 40EFFFFF
+ 13059 .LBE1497:
+ 13060 .LBE1496:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13061 .loc 2 1569 0
+ 13062 c176 660F7F85 movdqa %xmm0, -6336(%rbp)
+ 13062 40E7FFFF
+ 13063 c17e 660F6F85 movdqa -6336(%rbp), %xmm0
+ 13063 40E7FFFF
+ 13064 c186 660FEF85 pxor -704(%rbp), %xmm0
+ 13064 40FDFFFF
+ 13065 c18e F30F7F85 movdqu %xmm0, -704(%rbp)
+ 13065 40FDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 416
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13066 .loc 2 1571 0
+ 13067 c196 F30F6F85 movdqu -704(%rbp), %xmm0
+ 13067 40FDFFFF
+ 13068 .LBE1491:
+ 13069 .LBE1490:
+1882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k42 :k42^k43:k42^k43^k44:k42^k43^k44^k45 *
+ 13070 .loc 2 1882 0
+ 13071 c19e 660F7F85 movdqa %xmm0, -6800(%rbp)
+ 13071 70E5FFFF
+ 13072 c1a6 660F6F85 movdqa -6768(%rbp), %xmm0
+ 13072 90E5FFFF
+ 13073 c1ae F30F7F85 movdqu %xmm0, -624(%rbp)
+ 13073 90FDFFFF
+ 13074 .LBB1498:
+ 13075 .LBB1499:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13076 .loc 2 1681 0
+ 13077 c1b6 B8800000 movl $128, %eax
+ 13077 00
+ 13078 c1bb 660F6F05 movdqa vec_00(%rip), %xmm0
+ 13078 00000000
+ 13079 c1c3 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 13079 B0FDFFFF
+ 13080 c1cb 8985ACFD movl %eax, -596(%rbp)
+ 13080 FFFF
+ 13081 .LBB1500:
+ 13082 .LBB1501:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 13083 .loc 2 522 0
+ 13084 c1d1 F30F6F85 movdqu -592(%rbp), %xmm0
+ 13084 B0FDFFFF
+ 13085 c1d9 F30F7F85 movdqu %xmm0, -4208(%rbp)
+ 13085 90EFFFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 13086 .loc 2 523 0
+ 13087 c1e1 B8030000 movl $3, %eax
+ 13087 00
+ 13088 c1e6 4898 cltq
+ 13089 c1e8 8B95ACFD movl -596(%rbp), %edx
+ 13089 FFFF
+ 13090 c1ee 89948590 movl %edx, -4208(%rbp,%rax,4)
+ 13090 EFFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 13091 .loc 2 524 0
+ 13092 c1f5 F30F6F85 movdqu -4208(%rbp), %xmm0
+ 13092 90EFFFFF
+ 13093 c1fd F30F7F85 movdqu %xmm0, -592(%rbp)
+ 13093 B0FDFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13094 .loc 2 526 0
+ 13095 c205 F30F6F85 movdqu -592(%rbp), %xmm0
+ 13095 B0FDFFFF
+ 13096 .LBE1501:
+ 13097 .LBE1500:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13098 .loc 2 1681 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 417
+
+
+ 13099 c20d 660F7F85 movdqa %xmm0, -6304(%rbp)
+ 13099 60E7FFFF
+ 13100 c215 F30F6F85 movdqu -624(%rbp), %xmm0
+ 13100 90FDFFFF
+ 13101 c21d F30F7F85 movdqu %xmm0, -576(%rbp)
+ 13101 C0FDFFFF
+ 13102 c225 F30F6F85 movdqu -576(%rbp), %xmm0
+ 13102 C0FDFFFF
+ 13103 c22d F30F7F85 movdqu %xmm0, -544(%rbp)
+ 13103 E0FDFFFF
+ 13104 c235 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 13104 000000
+ 13105 c23c 488985D8 movq %rax, -552(%rbp)
+ 13105 FDFFFF
+ 13106 .LBB1502:
+ 13107 .LBB1503:
+ 13108 .LBB1504:
+ 13109 .LBB1505:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 13110 .loc 2 851 0
+ 13111 c243 660F6F05 movdqa vec_00(%rip), %xmm0
+ 13111 00000000
+ 13112 c24b F30F7F85 movdqu %xmm0, -512(%rbp)
+ 13112 00FEFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13113 .loc 2 854 0
+ 13114 c253 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 13114 00000000
+ 13115 c25b F30F6F8D movdqu -544(%rbp), %xmm1
+ 13115 E0FDFFFF
+ 13116 c263 F30F7F8D movdqu %xmm1, -432(%rbp)
+ 13116 50FEFFFF
+ 13117 c26b F30F7F85 movdqu %xmm0, -448(%rbp)
+ 13117 40FEFFFF
+ 13118 .LBB1506:
+ 13119 .LBB1507:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 13120 .loc 2 206 0
+ 13121 c273 F30F6F85 movdqu -448(%rbp), %xmm0
+ 13121 40FEFFFF
+ 13122 c27b F30F6F8D movdqu -432(%rbp), %xmm1
+ 13122 50FEFFFF
+ 13123 c283 660FDBC1 pand %xmm1, %xmm0
+ 13124 .LBE1507:
+ 13125 .LBE1506:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13126 .loc 2 854 0
+ 13127 c287 F30F7F85 movdqu %xmm0, -464(%rbp)
+ 13127 30FEFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 13128 .loc 2 862 0
+ 13129 c28f 660F6F05 movdqa vec_10(%rip), %xmm0
+ 13129 00000000
+ 13130 c297 F30F6F8D movdqu -544(%rbp), %xmm1
+ 13130 E0FDFFFF
+ 13131 c29f F30F7F8D movdqu %xmm1, -400(%rbp)
+ 13131 70FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 418
+
+
+ 13132 c2a7 F30F7F85 movdqu %xmm0, -416(%rbp)
+ 13132 60FEFFFF
+ 13133 .LBB1508:
+ 13134 .loc 2 2642 0
+ 13135 c2af 0FB68570 movzbl -400(%rbp), %eax
+ 13135 FEFFFF
+ 13136 c2b6 0FB69560 movzbl -416(%rbp), %edx
+ 13136 FEFFFF
+ 13137 c2bd 0FB6C0 movzbl %al, %eax
+ 13138 c2c0 6689852E movw %ax, -6866(%rbp)
+ 13138 E5FFFF
+ 13139 c2c7 0FB7852E movzwl -6866(%rbp), %eax
+ 13139 E5FFFF
+ 13140 c2ce F6F2 divb %dl
+ 13141 c2d0 4189C7 movl %eax, %r15d
+ 13142 c2d3 0FB68571 movzbl -399(%rbp), %eax
+ 13142 FEFFFF
+ 13143 c2da 0FB69561 movzbl -415(%rbp), %edx
+ 13143 FEFFFF
+ 13144 c2e1 0FB6C0 movzbl %al, %eax
+ 13145 c2e4 6689852E movw %ax, -6866(%rbp)
+ 13145 E5FFFF
+ 13146 c2eb 0FB7852E movzwl -6866(%rbp), %eax
+ 13146 E5FFFF
+ 13147 c2f2 F6F2 divb %dl
+ 13148 c2f4 88857FE7 movb %al, -6273(%rbp)
+ 13148 FFFF
+ 13149 c2fa 0FB68572 movzbl -398(%rbp), %eax
+ 13149 FEFFFF
+ 13150 c301 0FB69562 movzbl -414(%rbp), %edx
+ 13150 FEFFFF
+ 13151 c308 0FB6C0 movzbl %al, %eax
+ 13152 c30b 6689852E movw %ax, -6866(%rbp)
+ 13152 E5FFFF
+ 13153 c312 0FB7852E movzwl -6866(%rbp), %eax
+ 13153 E5FFFF
+ 13154 c319 F6F2 divb %dl
+ 13155 c31b 88857EE7 movb %al, -6274(%rbp)
+ 13155 FFFF
+ 13156 c321 0FB68573 movzbl -397(%rbp), %eax
+ 13156 FEFFFF
+ 13157 c328 0FB69563 movzbl -413(%rbp), %edx
+ 13157 FEFFFF
+ 13158 c32f 0FB6C0 movzbl %al, %eax
+ 13159 c332 6689852E movw %ax, -6866(%rbp)
+ 13159 E5FFFF
+ 13160 c339 0FB7852E movzwl -6866(%rbp), %eax
+ 13160 E5FFFF
+ 13161 c340 F6F2 divb %dl
+ 13162 c342 88857DE7 movb %al, -6275(%rbp)
+ 13162 FFFF
+ 13163 c348 0FB68574 movzbl -396(%rbp), %eax
+ 13163 FEFFFF
+ 13164 c34f 0FB69564 movzbl -412(%rbp), %edx
+ 13164 FEFFFF
+ 13165 c356 0FB6C0 movzbl %al, %eax
+ 13166 c359 6689852E movw %ax, -6866(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 419
+
+
+ 13166 E5FFFF
+ 13167 c360 0FB7852E movzwl -6866(%rbp), %eax
+ 13167 E5FFFF
+ 13168 c367 F6F2 divb %dl
+ 13169 c369 88857CE7 movb %al, -6276(%rbp)
+ 13169 FFFF
+ 13170 c36f 0FB68575 movzbl -395(%rbp), %eax
+ 13170 FEFFFF
+ 13171 c376 0FB69565 movzbl -411(%rbp), %edx
+ 13171 FEFFFF
+ 13172 c37d 0FB6C0 movzbl %al, %eax
+ 13173 c380 6689852E movw %ax, -6866(%rbp)
+ 13173 E5FFFF
+ 13174 c387 0FB7852E movzwl -6866(%rbp), %eax
+ 13174 E5FFFF
+ 13175 c38e F6F2 divb %dl
+ 13176 c390 4189C1 movl %eax, %r9d
+ 13177 c393 0FB68576 movzbl -394(%rbp), %eax
+ 13177 FEFFFF
+ 13178 c39a 0FB69566 movzbl -410(%rbp), %edx
+ 13178 FEFFFF
+ 13179 c3a1 0FB6C0 movzbl %al, %eax
+ 13180 c3a4 6689852E movw %ax, -6866(%rbp)
+ 13180 E5FFFF
+ 13181 c3ab 0FB7852E movzwl -6866(%rbp), %eax
+ 13181 E5FFFF
+ 13182 c3b2 F6F2 divb %dl
+ 13183 c3b4 89C7 movl %eax, %edi
+ 13184 c3b6 0FB68577 movzbl -393(%rbp), %eax
+ 13184 FEFFFF
+ 13185 c3bd 0FB69567 movzbl -409(%rbp), %edx
+ 13185 FEFFFF
+ 13186 c3c4 0FB6C0 movzbl %al, %eax
+ 13187 c3c7 6689852E movw %ax, -6866(%rbp)
+ 13187 E5FFFF
+ 13188 c3ce 0FB7852E movzwl -6866(%rbp), %eax
+ 13188 E5FFFF
+ 13189 c3d5 F6F2 divb %dl
+ 13190 c3d7 89C3 movl %eax, %ebx
+ 13191 c3d9 0FB68578 movzbl -392(%rbp), %eax
+ 13191 FEFFFF
+ 13192 c3e0 0FB69568 movzbl -408(%rbp), %edx
+ 13192 FEFFFF
+ 13193 c3e7 0FB6C0 movzbl %al, %eax
+ 13194 c3ea 6689852E movw %ax, -6866(%rbp)
+ 13194 E5FFFF
+ 13195 c3f1 0FB7852E movzwl -6866(%rbp), %eax
+ 13195 E5FFFF
+ 13196 c3f8 F6F2 divb %dl
+ 13197 c3fa 4189C2 movl %eax, %r10d
+ 13198 c3fd 0FB68579 movzbl -391(%rbp), %eax
+ 13198 FEFFFF
+ 13199 c404 0FB69569 movzbl -407(%rbp), %edx
+ 13199 FEFFFF
+ 13200 c40b 0FB6C0 movzbl %al, %eax
+ 13201 c40e 6689852E movw %ax, -6866(%rbp)
+ 13201 E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 420
+
+
+ 13202 c415 0FB7852E movzwl -6866(%rbp), %eax
+ 13202 E5FFFF
+ 13203 c41c F6F2 divb %dl
+ 13204 c41e 4189C3 movl %eax, %r11d
+ 13205 c421 0FB6857A movzbl -390(%rbp), %eax
+ 13205 FEFFFF
+ 13206 c428 0FB6956A movzbl -406(%rbp), %edx
+ 13206 FEFFFF
+ 13207 c42f 0FB6C0 movzbl %al, %eax
+ 13208 c432 6689852E movw %ax, -6866(%rbp)
+ 13208 E5FFFF
+ 13209 c439 0FB7852E movzwl -6866(%rbp), %eax
+ 13209 E5FFFF
+ 13210 c440 F6F2 divb %dl
+ 13211 c442 4189C4 movl %eax, %r12d
+ 13212 c445 0FB6857B movzbl -389(%rbp), %eax
+ 13212 FEFFFF
+ 13213 c44c 0FB6956B movzbl -405(%rbp), %edx
+ 13213 FEFFFF
+ 13214 c453 0FB6C0 movzbl %al, %eax
+ 13215 c456 6689852E movw %ax, -6866(%rbp)
+ 13215 E5FFFF
+ 13216 c45d 0FB7852E movzwl -6866(%rbp), %eax
+ 13216 E5FFFF
+ 13217 c464 F6F2 divb %dl
+ 13218 c466 4189C5 movl %eax, %r13d
+ 13219 c469 0FB6857C movzbl -388(%rbp), %eax
+ 13219 FEFFFF
+ 13220 c470 0FB6956C movzbl -404(%rbp), %edx
+ 13220 FEFFFF
+ 13221 c477 0FB6C0 movzbl %al, %eax
+ 13222 c47a 6689852E movw %ax, -6866(%rbp)
+ 13222 E5FFFF
+ 13223 c481 0FB7852E movzwl -6866(%rbp), %eax
+ 13223 E5FFFF
+ 13224 c488 F6F2 divb %dl
+ 13225 c48a 4189C6 movl %eax, %r14d
+ 13226 c48d 0FB6857D movzbl -387(%rbp), %eax
+ 13226 FEFFFF
+ 13227 c494 0FB6956D movzbl -403(%rbp), %edx
+ 13227 FEFFFF
+ 13228 c49b 0FB6C0 movzbl %al, %eax
+ 13229 c49e 6689852E movw %ax, -6866(%rbp)
+ 13229 E5FFFF
+ 13230 c4a5 0FB7852E movzwl -6866(%rbp), %eax
+ 13230 E5FFFF
+ 13231 c4ac F6F2 divb %dl
+ 13232 c4ae 4189C0 movl %eax, %r8d
+ 13233 c4b1 0FB6857E movzbl -386(%rbp), %eax
+ 13233 FEFFFF
+ 13234 c4b8 0FB6956E movzbl -402(%rbp), %edx
+ 13234 FEFFFF
+ 13235 c4bf 0FB6C0 movzbl %al, %eax
+ 13236 c4c2 6689852E movw %ax, -6866(%rbp)
+ 13236 E5FFFF
+ 13237 c4c9 0FB7852E movzwl -6866(%rbp), %eax
+ 13237 E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 421
+
+
+ 13238 c4d0 F6F2 divb %dl
+ 13239 c4d2 89C6 movl %eax, %esi
+ 13240 c4d4 0FB6857F movzbl -385(%rbp), %eax
+ 13240 FEFFFF
+ 13241 c4db 0FB6956F movzbl -401(%rbp), %edx
+ 13241 FEFFFF
+ 13242 c4e2 0FB6C0 movzbl %al, %eax
+ 13243 c4e5 6689852E movw %ax, -6866(%rbp)
+ 13243 E5FFFF
+ 13244 c4ec 0FB7852E movzwl -6866(%rbp), %eax
+ 13244 E5FFFF
+ 13245 c4f3 F6F2 divb %dl
+ 13246 c4f5 89C1 movl %eax, %ecx
+ 13247 .LBB1509:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 13248 .loc 2 346 0
+ 13249 c4f7 0FB6D3 movzbl %bl, %edx
+ 13250 c4fa 400FB6C7 movzbl %dil, %eax
+ 13251 c4fe 48C1E208 salq $8, %rdx
+ 13252 c502 4809C2 orq %rax, %rdx
+ 13253 c505 410FB6C1 movzbl %r9b, %eax
+ 13254 c509 48C1E208 salq $8, %rdx
+ 13255 c50d 4809C2 orq %rax, %rdx
+ 13256 c510 0FB6857C movzbl -6276(%rbp), %eax
+ 13256 E7FFFF
+ 13257 c517 48C1E208 salq $8, %rdx
+ 13258 c51b 4809C2 orq %rax, %rdx
+ 13259 c51e 0FB6857D movzbl -6275(%rbp), %eax
+ 13259 E7FFFF
+ 13260 c525 48C1E208 salq $8, %rdx
+ 13261 c529 4809C2 orq %rax, %rdx
+ 13262 c52c 0FB6857E movzbl -6274(%rbp), %eax
+ 13262 E7FFFF
+ 13263 c533 48C1E208 salq $8, %rdx
+ 13264 c537 4809C2 orq %rax, %rdx
+ 13265 c53a 0FB6857F movzbl -6273(%rbp), %eax
+ 13265 E7FFFF
+ 13266 c541 48C1E208 salq $8, %rdx
+ 13267 c545 4809C2 orq %rax, %rdx
+ 13268 c548 410FB6C7 movzbl %r15b, %eax
+ 13269 c54c 48C1E208 salq $8, %rdx
+ 13270 c550 4809C2 orq %rax, %rdx
+ 13271 c553 0FB6C1 movzbl %cl, %eax
+ 13272 c556 400FB6CE movzbl %sil, %ecx
+ 13273 c55a 48C1E008 salq $8, %rax
+ 13274 c55e 4809C8 orq %rcx, %rax
+ 13275 c561 410FB6C8 movzbl %r8b, %ecx
+ 13276 c565 48C1E008 salq $8, %rax
+ 13277 c569 4809C8 orq %rcx, %rax
+ 13278 c56c 410FB6CE movzbl %r14b, %ecx
+ 13279 c570 48C1E008 salq $8, %rax
+ 13280 c574 4809C8 orq %rcx, %rax
+ 13281 c577 410FB6CD movzbl %r13b, %ecx
+ 13282 c57b 48C1E008 salq $8, %rax
+ 13283 c57f 4809C8 orq %rcx, %rax
+ 13284 c582 410FB6CC movzbl %r12b, %ecx
+ 13285 c586 48C1E008 salq $8, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 422
+
+
+ 13286 c58a 4809C8 orq %rcx, %rax
+ 13287 c58d 410FB6CB movzbl %r11b, %ecx
+ 13288 c591 48C1E008 salq $8, %rax
+ 13289 c595 4809C8 orq %rcx, %rax
+ 13290 c598 410FB6CA movzbl %r10b, %ecx
+ 13291 c59c 48C1E008 salq $8, %rax
+ 13292 c5a0 4809C8 orq %rcx, %rax
+ 13293 c5a3 48899530 movq %rdx, -6864(%rbp)
+ 13293 E5FFFF
+ 13294 c5aa 48898538 movq %rax, -6856(%rbp)
+ 13294 E5FFFF
+ 13295 c5b1 660F6F85 movdqa -6864(%rbp), %xmm0
+ 13295 30E5FFFF
+ 13296 .LBE1509:
+ 13297 .LBE1508:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 13298 .loc 2 862 0
+ 13299 c5b9 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 13299 20FEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 13300 .loc 2 866 0
+ 13301 c5c1 C785FCFD movl $0, -516(%rbp)
+ 13301 FFFF0000
+ 13301 0000
+ 13302 c5cb E9860200 jmp .L300
+ 13302 00
+ 13303 .L309:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13304 .loc 2 868 0
+ 13305 c5d0 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 13305 00000000
+ 13306 c5d8 F30F7F85 movdqu %xmm0, -368(%rbp)
+ 13306 90FEFFFF
+ 13307 c5e0 F30F6F85 movdqu -480(%rbp), %xmm0
+ 13307 20FEFFFF
+ 13308 c5e8 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 13308 80FEFFFF
+ 13309 .LBB1510:
+ 13310 .LBB1511:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 13311 .loc 2 380 0
+ 13312 c5f0 F30F6F85 movdqu -368(%rbp), %xmm0
+ 13312 90FEFFFF
+ 13313 c5f8 F30F7F85 movdqu %xmm0, -4176(%rbp)
+ 13313 B0EFFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 13314 .loc 2 381 0
+ 13315 c600 F30F6F85 movdqu -384(%rbp), %xmm0
+ 13315 80FEFFFF
+ 13316 c608 F30F7F85 movdqu %xmm0, -4192(%rbp)
+ 13316 A0EFFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 13317 .loc 2 383 0
+ 13318 c610 C785ACFE movl $0, -340(%rbp)
+ 13318 FFFF0000
+ 13318 0000
+ 13319 c61a EB5C jmp .L301
+
GAS LISTING /tmp/ccMa7HLZ.s page 423
+
+
+ 13320 .L304:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 13321 .loc 2 385 0
+ 13322 c61c 8B85ACFE movl -340(%rbp), %eax
+ 13322 FFFF
+ 13323 c622 89C0 mov %eax, %eax
+ 13324 c624 0FB68405 movzbl -4192(%rbp,%rax), %eax
+ 13324 A0EFFFFF
+ 13325 c62c 84C0 testb %al, %al
+ 13326 c62e 7912 jns .L302
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 13327 .loc 2 386 0
+ 13328 c630 8B85ACFE movl -340(%rbp), %eax
+ 13328 FFFF
+ 13329 c636 89C0 mov %eax, %eax
+ 13330 c638 C68405C0 movb $0, -4160(%rbp,%rax)
+ 13330 EFFFFF00
+ 13331 c640 EB2F jmp .L303
+ 13332 .L302:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 13333 .loc 2 388 0
+ 13334 c642 8B8DACFE movl -340(%rbp), %ecx
+ 13334 FFFF
+ 13335 c648 8B85ACFE movl -340(%rbp), %eax
+ 13335 FFFF
+ 13336 c64e 89C0 mov %eax, %eax
+ 13337 c650 0FB68405 movzbl -4192(%rbp,%rax), %eax
+ 13337 A0EFFFFF
+ 13338 c658 0FB6C0 movzbl %al, %eax
+ 13339 c65b 83E00F andl $15, %eax
+ 13340 c65e 4898 cltq
+ 13341 c660 0FB69405 movzbl -4176(%rbp,%rax), %edx
+ 13341 B0EFFFFF
+ 13342 c668 89C8 mov %ecx, %eax
+ 13343 c66a 889405C0 movb %dl, -4160(%rbp,%rax)
+ 13343 EFFFFF
+ 13344 .L303:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 13345 .loc 2 383 0
+ 13346 c671 8385ACFE addl $1, -340(%rbp)
+ 13346 FFFF01
+ 13347 .L301:
+ 13348 c678 83BDACFE cmpl $15, -340(%rbp)
+ 13348 FFFF0F
+ 13349 c67f 769B jbe .L304
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 13350 .loc 2 391 0
+ 13351 c681 F30F6F85 movdqu -4160(%rbp), %xmm0
+ 13351 C0EFFFFF
+ 13352 .LBE1511:
+ 13353 .LBE1510:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13354 .loc 2 868 0
+ 13355 c689 F30F7F85 movdqu %xmm0, -496(%rbp)
+ 13355 10FEFFFF
+ 13356 c691 F30F6F85 movdqu -464(%rbp), %xmm0
+ 13356 30FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 424
+
+
+ 13357 c699 F30F7F85 movdqu %xmm0, -320(%rbp)
+ 13357 C0FEFFFF
+ 13358 c6a1 F30F6F85 movdqu -496(%rbp), %xmm0
+ 13358 10FEFFFF
+ 13359 c6a9 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 13359 B0FEFFFF
+ 13360 .LBB1512:
+ 13361 .LBB1513:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 13362 .loc 2 234 0
+ 13363 c6b1 F30F6F85 movdqu -336(%rbp), %xmm0
+ 13363 B0FEFFFF
+ 13364 c6b9 F30F6F8D movdqu -320(%rbp), %xmm1
+ 13364 C0FEFFFF
+ 13365 c6c1 660FEBC1 por %xmm1, %xmm0
+ 13366 .LBE1513:
+ 13367 .LBE1512:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 13368 .loc 2 870 0
+ 13369 c6c5 F30F7F85 movdqu %xmm0, -496(%rbp)
+ 13369 10FEFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13370 .loc 2 872 0
+ 13371 c6cd 8B85FCFD mov -516(%rbp), %eax
+ 13371 FFFF
+ 13372 c6d3 48C1E004 salq $4, %rax
+ 13373 c6d7 480385D8 addq -552(%rbp), %rax
+ 13373 FDFFFF
+ 13374 c6de 660F6F00 movdqa (%rax), %xmm0
+ 13375 c6e2 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 13375 E0FEFFFF
+ 13376 c6ea F30F6F85 movdqu -496(%rbp), %xmm0
+ 13376 10FEFFFF
+ 13377 c6f2 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 13377 D0FEFFFF
+ 13378 .LBB1514:
+ 13379 .LBB1515:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 13380 .loc 2 380 0
+ 13381 c6fa F30F6F85 movdqu -288(%rbp), %xmm0
+ 13381 E0FEFFFF
+ 13382 c702 F30F7F85 movdqu %xmm0, -4128(%rbp)
+ 13382 E0EFFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 13383 .loc 2 381 0
+ 13384 c70a F30F6F85 movdqu -304(%rbp), %xmm0
+ 13384 D0FEFFFF
+ 13385 c712 F30F7F85 movdqu %xmm0, -4144(%rbp)
+ 13385 D0EFFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 13386 .loc 2 383 0
+ 13387 c71a C785FCFE movl $0, -260(%rbp)
+ 13387 FFFF0000
+ 13387 0000
+ 13388 c724 EB5C jmp .L305
+ 13389 .L308:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+
GAS LISTING /tmp/ccMa7HLZ.s page 425
+
+
+ 13390 .loc 2 385 0
+ 13391 c726 8B85FCFE movl -260(%rbp), %eax
+ 13391 FFFF
+ 13392 c72c 89C0 mov %eax, %eax
+ 13393 c72e 0FB68405 movzbl -4144(%rbp,%rax), %eax
+ 13393 D0EFFFFF
+ 13394 c736 84C0 testb %al, %al
+ 13395 c738 7912 jns .L306
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 13396 .loc 2 386 0
+ 13397 c73a 8B85FCFE movl -260(%rbp), %eax
+ 13397 FFFF
+ 13398 c740 89C0 mov %eax, %eax
+ 13399 c742 C68405F0 movb $0, -4112(%rbp,%rax)
+ 13399 EFFFFF00
+ 13400 c74a EB2F jmp .L307
+ 13401 .L306:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 13402 .loc 2 388 0
+ 13403 c74c 8B8DFCFE movl -260(%rbp), %ecx
+ 13403 FFFF
+ 13404 c752 8B85FCFE movl -260(%rbp), %eax
+ 13404 FFFF
+ 13405 c758 89C0 mov %eax, %eax
+ 13406 c75a 0FB68405 movzbl -4144(%rbp,%rax), %eax
+ 13406 D0EFFFFF
+ 13407 c762 0FB6C0 movzbl %al, %eax
+ 13408 c765 83E00F andl $15, %eax
+ 13409 c768 4898 cltq
+ 13410 c76a 0FB69405 movzbl -4128(%rbp,%rax), %edx
+ 13410 E0EFFFFF
+ 13411 c772 89C8 mov %ecx, %eax
+ 13412 c774 889405F0 movb %dl, -4112(%rbp,%rax)
+ 13412 EFFFFF
+ 13413 .L307:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 13414 .loc 2 383 0
+ 13415 c77b 8385FCFE addl $1, -260(%rbp)
+ 13415 FFFF01
+ 13416 .L305:
+ 13417 c782 83BDFCFE cmpl $15, -260(%rbp)
+ 13417 FFFF0F
+ 13418 c789 769B jbe .L308
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 13419 .loc 2 391 0
+ 13420 c78b F30F6F85 movdqu -4112(%rbp), %xmm0
+ 13420 F0EFFFFF
+ 13421 .LBE1515:
+ 13422 .LBE1514:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13423 .loc 2 872 0
+ 13424 c793 F30F7F85 movdqu %xmm0, -496(%rbp)
+ 13424 10FEFFFF
+ 13425 c79b F30F6F85 movdqu -512(%rbp), %xmm0
+ 13425 00FEFFFF
+ 13426 c7a3 F30F7F85 movdqu %xmm0, -240(%rbp)
+ 13426 10FFFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 426
+
+
+ 13427 c7ab F30F6F85 movdqu -496(%rbp), %xmm0
+ 13427 10FEFFFF
+ 13428 c7b3 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 13428 00FFFFFF
+ 13429 .LBB1516:
+ 13430 .LBB1517:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 13431 .loc 2 234 0
+ 13432 c7bb F30F6F85 movdqu -256(%rbp), %xmm0
+ 13432 00FFFFFF
+ 13433 c7c3 F30F6F8D movdqu -240(%rbp), %xmm1
+ 13433 10FFFFFF
+ 13434 c7cb 660FEBC1 por %xmm1, %xmm0
+ 13435 .LBE1517:
+ 13436 .LBE1516:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 13437 .loc 2 874 0
+ 13438 c7cf F30F7F85 movdqu %xmm0, -512(%rbp)
+ 13438 00FEFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 13439 .loc 2 876 0
+ 13440 c7d7 660F6F05 movdqa vec_01(%rip), %xmm0
+ 13440 00000000
+ 13441 c7df F30F6F8D movdqu -480(%rbp), %xmm1
+ 13441 20FEFFFF
+ 13442 c7e7 F30F7F8D movdqu %xmm1, -208(%rbp)
+ 13442 30FFFFFF
+ 13443 c7ef F30F7F85 movdqu %xmm0, -224(%rbp)
+ 13443 20FFFFFF
+ 13444 .LBB1518:
+ 13445 .LBB1519:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 13446 .loc 2 290 0
+ 13447 c7f7 F30F6F8D movdqu -224(%rbp), %xmm1
+ 13447 20FFFFFF
+ 13448 c7ff F30F6F85 movdqu -208(%rbp), %xmm0
+ 13448 30FFFFFF
+ 13449 c807 660FF8C1 psubb %xmm1, %xmm0
+ 13450 .LBE1519:
+ 13451 .LBE1518:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 13452 .loc 2 876 0
+ 13453 c80b F30F7F85 movdqu %xmm0, -480(%rbp)
+ 13453 20FEFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13454 .loc 2 878 0
+ 13455 c813 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 13455 00000000
+ 13456 c81b F30F6F8D movdqu -480(%rbp), %xmm1
+ 13456 20FEFFFF
+ 13457 c823 F30F7F8D movdqu %xmm1, -176(%rbp)
+ 13457 50FFFFFF
+ 13458 c82b F30F7F85 movdqu %xmm0, -192(%rbp)
+ 13458 40FFFFFF
+ 13459 .LBB1520:
+ 13460 .LBB1521:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+
GAS LISTING /tmp/ccMa7HLZ.s page 427
+
+
+ 13461 .loc 2 206 0
+ 13462 c833 F30F6F85 movdqu -192(%rbp), %xmm0
+ 13462 40FFFFFF
+ 13463 c83b F30F6F8D movdqu -176(%rbp), %xmm1
+ 13463 50FFFFFF
+ 13464 c843 660FDBC1 pand %xmm1, %xmm0
+ 13465 .LBE1521:
+ 13466 .LBE1520:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13467 .loc 2 878 0
+ 13468 c847 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 13468 20FEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 13469 .loc 2 866 0
+ 13470 c84f 8385FCFD addl $1, -516(%rbp)
+ 13470 FFFF01
+ 13471 .L300:
+ 13472 c856 83BDFCFD cmpl $15, -516(%rbp)
+ 13472 FFFF0F
+ 13473 c85d 0F866DFD jbe .L309
+ 13473 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 13474 .loc 2 882 0
+ 13475 c863 F30F6F85 movdqu -512(%rbp), %xmm0
+ 13475 00FEFFFF
+ 13476 .LBE1505:
+ 13477 .LBE1504:
+ 13478 .LBE1503:
+ 13479 .LBE1502:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 13480 .loc 2 1682 0
+ 13481 c86b 660F7F85 movdqa %xmm0, -6320(%rbp)
+ 13481 50E7FFFF
+ 13482 .LBB1522:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 13483 .loc 2 1683 0
+ 13484 c873 660F6F85 movdqa -6320(%rbp), %xmm0
+ 13484 50E7FFFF
+ 13485 c87b F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 13485 80EFFFFF
+ 13486 c883 E8000000 call KDbgWriterGet at PLT
+ 13486 00
+ 13487 c888 4885C0 testq %rax, %rax
+ 13488 c88b 7479 je .L311
+ 13489 c88d BF010000 movl $1, %edi
+ 13489 00
+ 13490 c892 E8000000 call KDbgCondToFlag at PLT
+ 13490 00
+ 13491 c897 4889C6 movq %rax, %rsi
+ 13492 c89a BF100000 movl $16, %edi
+ 13492 00
+ 13493 c89f E8000000 call KDbgTestModConds at PLT
+ 13493 00
+ 13494 c8a4 84C0 testb %al, %al
+ 13495 c8a6 745E je .L311
+ 13496 c8a8 8B858CEF movl -4212(%rbp), %eax
+ 13496 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 428
+
+
+ 13497 c8ae 89C7 movl %eax, %edi
+ 13498 c8b0 E84B37FF call bswap_32
+ 13498 FF
+ 13499 c8b5 4189C5 movl %eax, %r13d
+ 13500 c8b8 8B8588EF movl -4216(%rbp), %eax
+ 13500 FFFF
+ 13501 c8be 89C7 movl %eax, %edi
+ 13502 c8c0 E83B37FF call bswap_32
+ 13502 FF
+ 13503 c8c5 4189C4 movl %eax, %r12d
+ 13504 c8c8 8B8584EF movl -4220(%rbp), %eax
+ 13504 FFFF
+ 13505 c8ce 89C7 movl %eax, %edi
+ 13506 c8d0 E82B37FF call bswap_32
+ 13506 FF
+ 13507 c8d5 89C3 movl %eax, %ebx
+ 13508 c8d7 8B8580EF movl -4224(%rbp), %eax
+ 13508 FFFF
+ 13509 c8dd 89C7 movl %eax, %edi
+ 13510 c8df E81C37FF call bswap_32
+ 13510 FF
+ 13511 c8e4 4589E9 movl %r13d, %r9d
+ 13512 c8e7 4589E0 movl %r12d, %r8d
+ 13513 c8ea 89D9 movl %ebx, %ecx
+ 13514 c8ec 89C2 movl %eax, %edx
+ 13515 c8ee 488D3500 leaq .LC0(%rip), %rsi
+ 13515 000000
+ 13516 c8f5 488D3D00 leaq .LC1(%rip), %rdi
+ 13516 000000
+ 13517 c8fc B8000000 movl $0, %eax
+ 13517 00
+ 13518 c901 E8000000 call KDbgMsg at PLT
+ 13518 00
+ 13519 .L311:
+ 13520 c906 660F6F85 movdqa -6320(%rbp), %xmm0
+ 13520 50E7FFFF
+ 13521 c90e F30F7F85 movdqu %xmm0, -160(%rbp)
+ 13521 60FFFFFF
+ 13522 .LBE1522:
+ 13523 .LBB1523:
+ 13524 .LBB1524:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 13525 .loc 2 667 0
+ 13526 c916 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 13526 00000000
+ 13527 c91e F30F6F8D movdqu -160(%rbp), %xmm1
+ 13527 60FFFFFF
+ 13528 c926 F30F7F4D movdqu %xmm1, -128(%rbp)
+ 13528 80
+ 13529 c92b F30F7F85 movdqu %xmm0, -144(%rbp)
+ 13529 70FFFFFF
+ 13530 .LBB1525:
+ 13531 .LBB1526:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 13532 .loc 2 380 0
+ 13533 c933 F30F6F45 movdqu -128(%rbp), %xmm0
+ 13533 80
+
GAS LISTING /tmp/ccMa7HLZ.s page 429
+
+
+ 13534 c938 F30F7F85 movdqu %xmm0, -4080(%rbp)
+ 13534 10F0FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 13535 .loc 2 381 0
+ 13536 c940 F30F6F85 movdqu -144(%rbp), %xmm0
+ 13536 70FFFFFF
+ 13537 c948 F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 13537 00F0FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 13538 .loc 2 383 0
+ 13539 c950 C7459C00 movl $0, -100(%rbp)
+ 13539 000000
+ 13540 c957 EB4D jmp .L312
+ 13541 .L315:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 13542 .loc 2 385 0
+ 13543 c959 8B459C movl -100(%rbp), %eax
+ 13544 c95c 89C0 mov %eax, %eax
+ 13545 c95e 0FB68405 movzbl -4096(%rbp,%rax), %eax
+ 13545 00F0FFFF
+ 13546 c966 84C0 testb %al, %al
+ 13547 c968 790F jns .L313
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 13548 .loc 2 386 0
+ 13549 c96a 8B459C movl -100(%rbp), %eax
+ 13550 c96d 89C0 mov %eax, %eax
+ 13551 c96f C6840520 movb $0, -4064(%rbp,%rax)
+ 13551 F0FFFF00
+ 13552 c977 EB29 jmp .L314
+ 13553 .L313:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 13554 .loc 2 388 0
+ 13555 c979 8B4D9C movl -100(%rbp), %ecx
+ 13556 c97c 8B459C movl -100(%rbp), %eax
+ 13557 c97f 89C0 mov %eax, %eax
+ 13558 c981 0FB68405 movzbl -4096(%rbp,%rax), %eax
+ 13558 00F0FFFF
+ 13559 c989 0FB6C0 movzbl %al, %eax
+ 13560 c98c 83E00F andl $15, %eax
+ 13561 c98f 4898 cltq
+ 13562 c991 0FB69405 movzbl -4080(%rbp,%rax), %edx
+ 13562 10F0FFFF
+ 13563 c999 89C8 mov %ecx, %eax
+ 13564 c99b 88940520 movb %dl, -4064(%rbp,%rax)
+ 13564 F0FFFF
+ 13565 .L314:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 13566 .loc 2 383 0
+ 13567 c9a2 83459C01 addl $1, -100(%rbp)
+ 13568 .L312:
+ 13569 c9a6 837D9C0F cmpl $15, -100(%rbp)
+ 13570 c9aa 76AD jbe .L315
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 13571 .loc 2 391 0
+ 13572 c9ac F30F6F85 movdqu -4064(%rbp), %xmm0
+ 13572 20F0FFFF
+ 13573 .LBE1526:
+
GAS LISTING /tmp/ccMa7HLZ.s page 430
+
+
+ 13574 .LBE1525:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 13575 .loc 2 667 0
+ 13576 c9b4 F30F7F85 movdqu %xmm0, -160(%rbp)
+ 13576 60FFFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13577 .loc 2 668 0
+ 13578 c9bc F30F6F85 movdqu -160(%rbp), %xmm0
+ 13578 60FFFFFF
+ 13579 .LBE1524:
+ 13580 .LBE1523:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 13581 .loc 2 1684 0
+ 13582 c9c4 660F7F85 movdqa %xmm0, -6320(%rbp)
+ 13582 50E7FFFF
+ 13583 .LBB1527:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 13584 .loc 2 1685 0
+ 13585 c9cc 660F6F85 movdqa -6320(%rbp), %xmm0
+ 13585 50E7FFFF
+ 13586 c9d4 F30F7F85 movdqu %xmm0, -4240(%rbp)
+ 13586 70EFFFFF
+ 13587 c9dc E8000000 call KDbgWriterGet at PLT
+ 13587 00
+ 13588 c9e1 4885C0 testq %rax, %rax
+ 13589 c9e4 7479 je .L317
+ 13590 c9e6 BF010000 movl $1, %edi
+ 13590 00
+ 13591 c9eb E8000000 call KDbgCondToFlag at PLT
+ 13591 00
+ 13592 c9f0 4889C6 movq %rax, %rsi
+ 13593 c9f3 BF100000 movl $16, %edi
+ 13593 00
+ 13594 c9f8 E8000000 call KDbgTestModConds at PLT
+ 13594 00
+ 13595 c9fd 84C0 testb %al, %al
+ 13596 c9ff 745E je .L317
+ 13597 ca01 8B857CEF movl -4228(%rbp), %eax
+ 13597 FFFF
+ 13598 ca07 89C7 movl %eax, %edi
+ 13599 ca09 E8F235FF call bswap_32
+ 13599 FF
+ 13600 ca0e 4189C5 movl %eax, %r13d
+ 13601 ca11 8B8578EF movl -4232(%rbp), %eax
+ 13601 FFFF
+ 13602 ca17 89C7 movl %eax, %edi
+ 13603 ca19 E8E235FF call bswap_32
+ 13603 FF
+ 13604 ca1e 4189C4 movl %eax, %r12d
+ 13605 ca21 8B8574EF movl -4236(%rbp), %eax
+ 13605 FFFF
+ 13606 ca27 89C7 movl %eax, %edi
+ 13607 ca29 E8D235FF call bswap_32
+ 13607 FF
+ 13608 ca2e 89C3 movl %eax, %ebx
+ 13609 ca30 8B8570EF movl -4240(%rbp), %eax
+ 13609 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 431
+
+
+ 13610 ca36 89C7 movl %eax, %edi
+ 13611 ca38 E8C335FF call bswap_32
+ 13611 FF
+ 13612 ca3d 4589E9 movl %r13d, %r9d
+ 13613 ca40 4589E0 movl %r12d, %r8d
+ 13614 ca43 89D9 movl %ebx, %ecx
+ 13615 ca45 89C2 movl %eax, %edx
+ 13616 ca47 488D3500 leaq .LC2(%rip), %rsi
+ 13616 000000
+ 13617 ca4e 488D3D00 leaq .LC1(%rip), %rdi
+ 13617 000000
+ 13618 ca55 B8000000 movl $0, %eax
+ 13618 00
+ 13619 ca5a E8000000 call KDbgMsg at PLT
+ 13619 00
+ 13620 .L317:
+ 13621 ca5f 660F6F85 movdqa -6320(%rbp), %xmm0
+ 13621 50E7FFFF
+ 13622 ca67 F30F7F45 movdqu %xmm0, -80(%rbp)
+ 13622 B0
+ 13623 ca6c 660F6F85 movdqa -6304(%rbp), %xmm0
+ 13623 60E7FFFF
+ 13624 ca74 F30F7F45 movdqu %xmm0, -96(%rbp)
+ 13624 A0
+ 13625 .LBE1527:
+ 13626 .LBB1528:
+ 13627 .LBB1529:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 13628 .loc 2 178 0
+ 13629 ca79 F30F6F45 movdqu -96(%rbp), %xmm0
+ 13629 A0
+ 13630 ca7e F30F6F4D movdqu -80(%rbp), %xmm1
+ 13630 B0
+ 13631 ca83 660FEFC1 pxor %xmm1, %xmm0
+ 13632 .LBE1529:
+ 13633 .LBE1528:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 13634 .loc 2 1686 0
+ 13635 ca87 660F7F85 movdqa %xmm0, -6320(%rbp)
+ 13635 50E7FFFF
+ 13636 .LBB1530:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 13637 .loc 2 1687 0
+ 13638 ca8f 660F6F85 movdqa -6320(%rbp), %xmm0
+ 13638 50E7FFFF
+ 13639 ca97 F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 13639 60EFFFFF
+ 13640 ca9f E8000000 call KDbgWriterGet at PLT
+ 13640 00
+ 13641 caa4 4885C0 testq %rax, %rax
+ 13642 caa7 7479 je .L319
+ 13643 caa9 BF010000 movl $1, %edi
+ 13643 00
+ 13644 caae E8000000 call KDbgCondToFlag at PLT
+ 13644 00
+ 13645 cab3 4889C6 movq %rax, %rsi
+ 13646 cab6 BF100000 movl $16, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 432
+
+
+ 13646 00
+ 13647 cabb E8000000 call KDbgTestModConds at PLT
+ 13647 00
+ 13648 cac0 84C0 testb %al, %al
+ 13649 cac2 745E je .L319
+ 13650 cac4 8B856CEF movl -4244(%rbp), %eax
+ 13650 FFFF
+ 13651 caca 89C7 movl %eax, %edi
+ 13652 cacc E82F35FF call bswap_32
+ 13652 FF
+ 13653 cad1 4189C5 movl %eax, %r13d
+ 13654 cad4 8B8568EF movl -4248(%rbp), %eax
+ 13654 FFFF
+ 13655 cada 89C7 movl %eax, %edi
+ 13656 cadc E81F35FF call bswap_32
+ 13656 FF
+ 13657 cae1 4189C4 movl %eax, %r12d
+ 13658 cae4 8B8564EF movl -4252(%rbp), %eax
+ 13658 FFFF
+ 13659 caea 89C7 movl %eax, %edi
+ 13660 caec E80F35FF call bswap_32
+ 13660 FF
+ 13661 caf1 89C3 movl %eax, %ebx
+ 13662 caf3 8B8560EF movl -4256(%rbp), %eax
+ 13662 FFFF
+ 13663 caf9 89C7 movl %eax, %edi
+ 13664 cafb E80035FF call bswap_32
+ 13664 FF
+ 13665 cb00 4589E9 movl %r13d, %r9d
+ 13666 cb03 4589E0 movl %r12d, %r8d
+ 13667 cb06 89D9 movl %ebx, %ecx
+ 13668 cb08 89C2 movl %eax, %edx
+ 13669 cb0a 488D3500 leaq .LC3(%rip), %rsi
+ 13669 000000
+ 13670 cb11 488D3D00 leaq .LC1(%rip), %rdi
+ 13670 000000
+ 13671 cb18 B8000000 movl $0, %eax
+ 13671 00
+ 13672 cb1d E8000000 call KDbgMsg at PLT
+ 13672 00
+ 13673 .L319:
+ 13674 cb22 660F6F85 movdqa -6320(%rbp), %xmm0
+ 13674 50E7FFFF
+ 13675 cb2a F30F7F45 movdqu %xmm0, -64(%rbp)
+ 13675 C0
+ 13676 .LBE1530:
+ 13677 .LBB1531:
+ 13678 .LBB1532:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 13679 .loc 2 1357 0
+ 13680 cb2f F30F6F45 movdqu -64(%rbp), %xmm0
+ 13680 C0
+ 13681 cb34 F30F7F85 movdqu %xmm0, -4048(%rbp)
+ 13681 30F0FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 13682 .loc 2 1358 0
+ 13683 cb3c 8B853CF0 movl -4036(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 433
+
+
+ 13683 FFFF
+ 13684 cb42 898538F0 movl %eax, -4040(%rbp)
+ 13684 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 13685 .loc 2 1359 0
+ 13686 cb48 8B853CF0 movl -4036(%rbp), %eax
+ 13686 FFFF
+ 13687 cb4e 898534F0 movl %eax, -4044(%rbp)
+ 13687 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 13688 .loc 2 1360 0
+ 13689 cb54 8B853CF0 movl -4036(%rbp), %eax
+ 13689 FFFF
+ 13690 cb5a 898530F0 movl %eax, -4048(%rbp)
+ 13690 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 13691 .loc 2 1361 0
+ 13692 cb60 F30F6F85 movdqu -4048(%rbp), %xmm0
+ 13692 30F0FFFF
+ 13693 .LBE1532:
+ 13694 .LBE1531:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 13695 .loc 2 1688 0
+ 13696 cb68 660F7F85 movdqa %xmm0, -6320(%rbp)
+ 13696 50E7FFFF
+ 13697 .LBB1533:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 13698 .loc 2 1689 0
+ 13699 cb70 660F6F85 movdqa -6320(%rbp), %xmm0
+ 13699 50E7FFFF
+ 13700 cb78 F30F7F85 movdqu %xmm0, -4272(%rbp)
+ 13700 50EFFFFF
+ 13701 cb80 E8000000 call KDbgWriterGet at PLT
+ 13701 00
+ 13702 cb85 4885C0 testq %rax, %rax
+ 13703 cb88 7479 je .L321
+ 13704 cb8a BF010000 movl $1, %edi
+ 13704 00
+ 13705 cb8f E8000000 call KDbgCondToFlag at PLT
+ 13705 00
+ 13706 cb94 4889C6 movq %rax, %rsi
+ 13707 cb97 BF100000 movl $16, %edi
+ 13707 00
+ 13708 cb9c E8000000 call KDbgTestModConds at PLT
+ 13708 00
+ 13709 cba1 84C0 testb %al, %al
+ 13710 cba3 745E je .L321
+ 13711 cba5 8B855CEF movl -4260(%rbp), %eax
+ 13711 FFFF
+ 13712 cbab 89C7 movl %eax, %edi
+ 13713 cbad E84E34FF call bswap_32
+ 13713 FF
+ 13714 cbb2 4189C5 movl %eax, %r13d
+ 13715 cbb5 8B8558EF movl -4264(%rbp), %eax
+ 13715 FFFF
+ 13716 cbbb 89C7 movl %eax, %edi
+ 13717 cbbd E83E34FF call bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s page 434
+
+
+ 13717 FF
+ 13718 cbc2 4189C4 movl %eax, %r12d
+ 13719 cbc5 8B8554EF movl -4268(%rbp), %eax
+ 13719 FFFF
+ 13720 cbcb 89C7 movl %eax, %edi
+ 13721 cbcd E82E34FF call bswap_32
+ 13721 FF
+ 13722 cbd2 89C3 movl %eax, %ebx
+ 13723 cbd4 8B8550EF movl -4272(%rbp), %eax
+ 13723 FFFF
+ 13724 cbda 89C7 movl %eax, %edi
+ 13725 cbdc E81F34FF call bswap_32
+ 13725 FF
+ 13726 cbe1 4589E9 movl %r13d, %r9d
+ 13727 cbe4 4589E0 movl %r12d, %r8d
+ 13728 cbe7 89D9 movl %ebx, %ecx
+ 13729 cbe9 89C2 movl %eax, %edx
+ 13730 cbeb 488D3500 leaq .LC4(%rip), %rsi
+ 13730 000000
+ 13731 cbf2 488D3D00 leaq .LC1(%rip), %rdi
+ 13731 000000
+ 13732 cbf9 B8000000 movl $0, %eax
+ 13732 00
+ 13733 cbfe E8000000 call KDbgMsg at PLT
+ 13733 00
+ 13734 .L321:
+ 13735 .LBE1533:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 13736 .loc 2 1690 0
+ 13737 cc03 660F6F85 movdqa -6320(%rbp), %xmm0
+ 13737 50E7FFFF
+ 13738 .LBE1499:
+ 13739 .LBE1498:
+1883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 13740 .loc 2 1883 0
+ 13741 cc0b 660F7F85 movdqa %xmm0, -6720(%rbp)
+ 13741 C0E5FFFF
+1885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k48 : k49 : k50 : k51 */
+ 13742 .loc 2 1885 0
+ 13743 cc13 660F6F85 movdqa -6800(%rbp), %xmm0
+ 13743 70E5FFFF
+ 13744 cc1b 660FEF85 pxor -6720(%rbp), %xmm0
+ 13744 C0E5FFFF
+ 13745 cc23 660F7F85 movdqa %xmm0, -6800(%rbp)
+ 13745 70E5FFFF
+1886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[12] = v0; /* K48:K49:K50:K51 */
+ 13746 .loc 2 1886 0
+ 13747 cc2b 488B8588 movq -6264(%rbp), %rax
+ 13747 E7FFFF
+ 13748 cc32 4805C000 addq $192, %rax
+ 13748 0000
+ 13749 cc38 660F6F85 movdqa -6800(%rbp), %xmm0
+ 13749 70E5FFFF
+ 13750 cc40 660F7F00 movdqa %xmm0, (%rax)
+1887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 13751 .loc 2 1887 0
+ 13752 cc44 4881C4B8 addq $6840, %rsp
+
GAS LISTING /tmp/ccMa7HLZ.s page 435
+
+
+ 13752 1A0000
+ 13753 cc4b 5B popq %rbx
+ 13754 cc4c 415C popq %r12
+ 13755 cc4e 415D popq %r13
+ 13756 cc50 415E popq %r14
+ 13757 cc52 415F popq %r15
+ 13758 cc54 C9 leave
+ 13759 cc55 C3 ret
+ 13760 .cfi_endproc
+ 13761 .LFE564:
+ 13762 .size KAESBlockCipherVecKeyExpansion192, .-KAESBlockCipherVecKeyExpansion192
+ 13763 .type KAESBlockCipherVecKeyExpansion256, @function
+ 13764 KAESBlockCipherVecKeyExpansion256:
+ 13765 .LFB565:
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 13766 .loc 2 1904 0
+ 13767 .cfi_startproc
+ 13768 cc56 55 pushq %rbp
+ 13769 .LCFI6:
+ 13770 .cfi_def_cfa_offset 16
+ 13771 cc57 4889E5 movq %rsp, %rbp
+ 13772 .cfi_offset 6, -16
+ 13773 .LCFI7:
+ 13774 .cfi_def_cfa_register 6
+ 13775 cc5a 4157 pushq %r15
+ 13776 cc5c 4156 pushq %r14
+ 13777 cc5e 4155 pushq %r13
+ 13778 cc60 4154 pushq %r12
+ 13779 cc62 53 pushq %rbx
+ 13780 cc63 4881ECA8 subq $8872, %rsp
+ 13780 220000
+ 13781 cc6a 4889BDD8 movq %rdi, -8232(%rbp)
+ 13781 DFFFFF
+ 13782 cc71 4889B5D0 movq %rsi, -8240(%rbp)
+ 13782 DFFFFF
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 13783 .loc 2 1904 0
+ 13784 cc78 488B85D0 movq -8240(%rbp), %rax
+ 13784 DFFFFF
+ 13785 cc7f 488985F8 movq %rax, -5640(%rbp)
+ 13785 E9FFFF
+ 13786 .LBB1944:
+ 13787 .LBB1945:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (&u.bytes, ain, sizeof (u));
+ 13788 .loc 2 134 0
+ 13789 cc86 488B8DF8 movq -5640(%rbp), %rcx
+ 13789 E9FFFF
+ 13790 cc8d 488D85E0 leaq -8224(%rbp), %rax
+ 13790 DFFFFF
+ 13791 cc94 BA100000 movl $16, %edx
+ 13791 00
+ 13792 cc99 4889CE movq %rcx, %rsi
+ 13793 cc9c 4889C7 movq %rax, %rdi
+ 13794 .cfi_offset 3, -56
+ 13795 .cfi_offset 12, -48
+ 13796 .cfi_offset 13, -40
+ 13797 .cfi_offset 14, -32
+
GAS LISTING /tmp/ccMa7HLZ.s page 436
+
+
+ 13798 .cfi_offset 15, -24
+ 13799 cc9f E8000000 call memmove at PLT
+ 13799 00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 13800 .loc 2 135 0
+ 13801 cca4 F30F6F85 movdqu -8224(%rbp), %xmm0
+ 13801 E0DFFFFF
+ 13802 .LBE1945:
+ 13803 .LBE1944:
+1908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER (StateIn) (key);
+ 13804 .loc 2 1908 0
+ 13805 ccac F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 13805 C0E9FFFF
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+ 13806 .loc 2 1909 0
+ 13807 ccb4 488B85D0 movq -8240(%rbp), %rax
+ 13807 DFFFFF
+ 13808 ccbb 4883C010 addq $16, %rax
+ 13809 ccbf 48898500 movq %rax, -5632(%rbp)
+ 13809 EAFFFF
+ 13810 .LBB1946:
+ 13811 .LBB1947:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (&u.bytes, ain, sizeof (u));
+ 13812 .loc 2 134 0
+ 13813 ccc6 488B8D00 movq -5632(%rbp), %rcx
+ 13813 EAFFFF
+ 13814 cccd 488D85F0 leaq -8208(%rbp), %rax
+ 13814 DFFFFF
+ 13815 ccd4 BA100000 movl $16, %edx
+ 13815 00
+ 13816 ccd9 4889CE movq %rcx, %rsi
+ 13817 ccdc 4889C7 movq %rax, %rdi
+ 13818 ccdf E8000000 call memmove at PLT
+ 13818 00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 13819 .loc 2 135 0
+ 13820 cce4 F30F6F85 movdqu -8208(%rbp), %xmm0
+ 13820 F0DFFFFF
+ 13821 .LBE1947:
+ 13822 .LBE1946:
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+ 13823 .loc 2 1909 0
+ 13824 ccec F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 13824 D0E9FFFF
+1911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = v0; /* k0 : k1 : k2 : k3 */
+ 13825 .loc 2 1911 0
+ 13826 ccf4 488B85D8 movq -8232(%rbp), %rax
+ 13826 DFFFFF
+ 13827 ccfb F30F6F85 movdqu -5696(%rbp), %xmm0
+ 13827 C0E9FFFF
+ 13828 cd03 F30F7F00 movdqu %xmm0, (%rax)
+1912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[1] = v1; /* k4 : k5 : k6 : k7 */
+ 13829 .loc 2 1912 0
+ 13830 cd07 488B85D8 movq -8232(%rbp), %rax
+ 13830 DFFFFF
+ 13831 cd0e 4883C010 addq $16, %rax
+ 13832 cd12 F30F6F85 movdqu -5680(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 437
+
+
+ 13832 D0E9FFFF
+ 13833 cd1a F30F7F00 movdqu %xmm0, (%rax)
+ 13834 cd1e F30F6F85 movdqu -5680(%rbp), %xmm0
+ 13834 D0E9FFFF
+ 13835 cd26 F30F7F85 movdqu %xmm0, -5616(%rbp)
+ 13835 10EAFFFF
+ 13836 .LBB1948:
+ 13837 .LBB1949:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13838 .loc 2 1681 0
+ 13839 cd2e B8010000 movl $1, %eax
+ 13839 00
+ 13840 cd33 660F6F05 movdqa vec_00(%rip), %xmm0
+ 13840 00000000
+ 13841 cd3b F30F7F85 movdqu %xmm0, -5584(%rbp)
+ 13841 30EAFFFF
+ 13842 cd43 89852CEA movl %eax, -5588(%rbp)
+ 13842 FFFF
+ 13843 .LBB1950:
+ 13844 .LBB1951:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 13845 .loc 2 522 0
+ 13846 cd49 F30F6F85 movdqu -5584(%rbp), %xmm0
+ 13846 30EAFFFF
+ 13847 cd51 F30F7F85 movdqu %xmm0, -8128(%rbp)
+ 13847 40E0FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 13848 .loc 2 523 0
+ 13849 cd59 B8030000 movl $3, %eax
+ 13849 00
+ 13850 cd5e 4898 cltq
+ 13851 cd60 8B952CEA movl -5588(%rbp), %edx
+ 13851 FFFF
+ 13852 cd66 89948540 movl %edx, -8128(%rbp,%rax,4)
+ 13852 E0FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 13853 .loc 2 524 0
+ 13854 cd6d F30F6F85 movdqu -8128(%rbp), %xmm0
+ 13854 40E0FFFF
+ 13855 cd75 F30F7F85 movdqu %xmm0, -5584(%rbp)
+ 13855 30EAFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13856 .loc 2 526 0
+ 13857 cd7d F30F6F85 movdqu -5584(%rbp), %xmm0
+ 13857 30EAFFFF
+ 13858 .LBE1951:
+ 13859 .LBE1950:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13860 .loc 2 1681 0
+ 13861 cd85 660F7F85 movdqa %xmm0, -8768(%rbp)
+ 13861 C0DDFFFF
+ 13862 cd8d F30F6F85 movdqu -5616(%rbp), %xmm0
+ 13862 10EAFFFF
+ 13863 cd95 F30F7F85 movdqu %xmm0, -5568(%rbp)
+ 13863 40EAFFFF
+ 13864 cd9d F30F6F85 movdqu -5568(%rbp), %xmm0
+ 13864 40EAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 438
+
+
+ 13865 cda5 F30F7F85 movdqu %xmm0, -5536(%rbp)
+ 13865 60EAFFFF
+ 13866 cdad 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 13866 000000
+ 13867 cdb4 48898558 movq %rax, -5544(%rbp)
+ 13867 EAFFFF
+ 13868 .LBB1952:
+ 13869 .LBB1953:
+ 13870 .LBB1954:
+ 13871 .LBB1955:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 13872 .loc 2 851 0
+ 13873 cdbb 660F6F05 movdqa vec_00(%rip), %xmm0
+ 13873 00000000
+ 13874 cdc3 F30F7F85 movdqu %xmm0, -5504(%rbp)
+ 13874 80EAFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13875 .loc 2 854 0
+ 13876 cdcb 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 13876 00000000
+ 13877 cdd3 F30F6F8D movdqu -5536(%rbp), %xmm1
+ 13877 60EAFFFF
+ 13878 cddb F30F7F8D movdqu %xmm1, -5424(%rbp)
+ 13878 D0EAFFFF
+ 13879 cde3 F30F7F85 movdqu %xmm0, -5440(%rbp)
+ 13879 C0EAFFFF
+ 13880 .LBB1956:
+ 13881 .LBB1957:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 13882 .loc 2 206 0
+ 13883 cdeb F30F6F85 movdqu -5440(%rbp), %xmm0
+ 13883 C0EAFFFF
+ 13884 cdf3 F30F6F8D movdqu -5424(%rbp), %xmm1
+ 13884 D0EAFFFF
+ 13885 cdfb 660FDBC1 pand %xmm1, %xmm0
+ 13886 .LBE1957:
+ 13887 .LBE1956:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13888 .loc 2 854 0
+ 13889 cdff F30F7F85 movdqu %xmm0, -5456(%rbp)
+ 13889 B0EAFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 13890 .loc 2 862 0
+ 13891 ce07 660F6F05 movdqa vec_10(%rip), %xmm0
+ 13891 00000000
+ 13892 ce0f F30F6F8D movdqu -5536(%rbp), %xmm1
+ 13892 60EAFFFF
+ 13893 ce17 F30F7F8D movdqu %xmm1, -5392(%rbp)
+ 13893 F0EAFFFF
+ 13894 ce1f F30F7F85 movdqu %xmm0, -5408(%rbp)
+ 13894 E0EAFFFF
+ 13895 .LBB1958:
+ 13896 .loc 2 2642 0
+ 13897 ce27 0FB685F0 movzbl -5392(%rbp), %eax
+ 13897 EAFFFF
+ 13898 ce2e 0FB695E0 movzbl -5408(%rbp), %edx
+ 13898 EAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 439
+
+
+ 13899 ce35 0FB6C0 movzbl %al, %eax
+ 13900 ce38 6689853E movw %ax, -8898(%rbp)
+ 13900 DDFFFF
+ 13901 ce3f 0FB7853E movzwl -8898(%rbp), %eax
+ 13901 DDFFFF
+ 13902 ce46 F6F2 divb %dl
+ 13903 ce48 4189C7 movl %eax, %r15d
+ 13904 ce4b 0FB685F1 movzbl -5391(%rbp), %eax
+ 13904 EAFFFF
+ 13905 ce52 0FB695E1 movzbl -5407(%rbp), %edx
+ 13905 EAFFFF
+ 13906 ce59 0FB6C0 movzbl %al, %eax
+ 13907 ce5c 6689853E movw %ax, -8898(%rbp)
+ 13907 DDFFFF
+ 13908 ce63 0FB7853E movzwl -8898(%rbp), %eax
+ 13908 DDFFFF
+ 13909 ce6a F6F2 divb %dl
+ 13910 ce6c 8885DFDD movb %al, -8737(%rbp)
+ 13910 FFFF
+ 13911 ce72 0FB685F2 movzbl -5390(%rbp), %eax
+ 13911 EAFFFF
+ 13912 ce79 0FB695E2 movzbl -5406(%rbp), %edx
+ 13912 EAFFFF
+ 13913 ce80 0FB6C0 movzbl %al, %eax
+ 13914 ce83 6689853E movw %ax, -8898(%rbp)
+ 13914 DDFFFF
+ 13915 ce8a 0FB7853E movzwl -8898(%rbp), %eax
+ 13915 DDFFFF
+ 13916 ce91 F6F2 divb %dl
+ 13917 ce93 8885DEDD movb %al, -8738(%rbp)
+ 13917 FFFF
+ 13918 ce99 0FB685F3 movzbl -5389(%rbp), %eax
+ 13918 EAFFFF
+ 13919 cea0 0FB695E3 movzbl -5405(%rbp), %edx
+ 13919 EAFFFF
+ 13920 cea7 0FB6C0 movzbl %al, %eax
+ 13921 ceaa 6689853E movw %ax, -8898(%rbp)
+ 13921 DDFFFF
+ 13922 ceb1 0FB7853E movzwl -8898(%rbp), %eax
+ 13922 DDFFFF
+ 13923 ceb8 F6F2 divb %dl
+ 13924 ceba 8885DDDD movb %al, -8739(%rbp)
+ 13924 FFFF
+ 13925 cec0 0FB685F4 movzbl -5388(%rbp), %eax
+ 13925 EAFFFF
+ 13926 cec7 0FB695E4 movzbl -5404(%rbp), %edx
+ 13926 EAFFFF
+ 13927 cece 0FB6C0 movzbl %al, %eax
+ 13928 ced1 6689853E movw %ax, -8898(%rbp)
+ 13928 DDFFFF
+ 13929 ced8 0FB7853E movzwl -8898(%rbp), %eax
+ 13929 DDFFFF
+ 13930 cedf F6F2 divb %dl
+ 13931 cee1 8885DCDD movb %al, -8740(%rbp)
+ 13931 FFFF
+ 13932 cee7 0FB685F5 movzbl -5387(%rbp), %eax
+ 13932 EAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 440
+
+
+ 13933 ceee 0FB695E5 movzbl -5403(%rbp), %edx
+ 13933 EAFFFF
+ 13934 cef5 0FB6C0 movzbl %al, %eax
+ 13935 cef8 6689853E movw %ax, -8898(%rbp)
+ 13935 DDFFFF
+ 13936 ceff 0FB7853E movzwl -8898(%rbp), %eax
+ 13936 DDFFFF
+ 13937 cf06 F6F2 divb %dl
+ 13938 cf08 4189C1 movl %eax, %r9d
+ 13939 cf0b 0FB685F6 movzbl -5386(%rbp), %eax
+ 13939 EAFFFF
+ 13940 cf12 0FB695E6 movzbl -5402(%rbp), %edx
+ 13940 EAFFFF
+ 13941 cf19 0FB6C0 movzbl %al, %eax
+ 13942 cf1c 6689853E movw %ax, -8898(%rbp)
+ 13942 DDFFFF
+ 13943 cf23 0FB7853E movzwl -8898(%rbp), %eax
+ 13943 DDFFFF
+ 13944 cf2a F6F2 divb %dl
+ 13945 cf2c 89C7 movl %eax, %edi
+ 13946 cf2e 0FB685F7 movzbl -5385(%rbp), %eax
+ 13946 EAFFFF
+ 13947 cf35 0FB695E7 movzbl -5401(%rbp), %edx
+ 13947 EAFFFF
+ 13948 cf3c 0FB6C0 movzbl %al, %eax
+ 13949 cf3f 6689853E movw %ax, -8898(%rbp)
+ 13949 DDFFFF
+ 13950 cf46 0FB7853E movzwl -8898(%rbp), %eax
+ 13950 DDFFFF
+ 13951 cf4d F6F2 divb %dl
+ 13952 cf4f 89C3 movl %eax, %ebx
+ 13953 cf51 0FB685F8 movzbl -5384(%rbp), %eax
+ 13953 EAFFFF
+ 13954 cf58 0FB695E8 movzbl -5400(%rbp), %edx
+ 13954 EAFFFF
+ 13955 cf5f 0FB6C0 movzbl %al, %eax
+ 13956 cf62 6689853E movw %ax, -8898(%rbp)
+ 13956 DDFFFF
+ 13957 cf69 0FB7853E movzwl -8898(%rbp), %eax
+ 13957 DDFFFF
+ 13958 cf70 F6F2 divb %dl
+ 13959 cf72 4189C2 movl %eax, %r10d
+ 13960 cf75 0FB685F9 movzbl -5383(%rbp), %eax
+ 13960 EAFFFF
+ 13961 cf7c 0FB695E9 movzbl -5399(%rbp), %edx
+ 13961 EAFFFF
+ 13962 cf83 0FB6C0 movzbl %al, %eax
+ 13963 cf86 6689853E movw %ax, -8898(%rbp)
+ 13963 DDFFFF
+ 13964 cf8d 0FB7853E movzwl -8898(%rbp), %eax
+ 13964 DDFFFF
+ 13965 cf94 F6F2 divb %dl
+ 13966 cf96 4189C3 movl %eax, %r11d
+ 13967 cf99 0FB685FA movzbl -5382(%rbp), %eax
+ 13967 EAFFFF
+ 13968 cfa0 0FB695EA movzbl -5398(%rbp), %edx
+ 13968 EAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 441
+
+
+ 13969 cfa7 0FB6C0 movzbl %al, %eax
+ 13970 cfaa 6689853E movw %ax, -8898(%rbp)
+ 13970 DDFFFF
+ 13971 cfb1 0FB7853E movzwl -8898(%rbp), %eax
+ 13971 DDFFFF
+ 13972 cfb8 F6F2 divb %dl
+ 13973 cfba 4189C4 movl %eax, %r12d
+ 13974 cfbd 0FB685FB movzbl -5381(%rbp), %eax
+ 13974 EAFFFF
+ 13975 cfc4 0FB695EB movzbl -5397(%rbp), %edx
+ 13975 EAFFFF
+ 13976 cfcb 0FB6C0 movzbl %al, %eax
+ 13977 cfce 6689853E movw %ax, -8898(%rbp)
+ 13977 DDFFFF
+ 13978 cfd5 0FB7853E movzwl -8898(%rbp), %eax
+ 13978 DDFFFF
+ 13979 cfdc F6F2 divb %dl
+ 13980 cfde 4189C5 movl %eax, %r13d
+ 13981 cfe1 0FB685FC movzbl -5380(%rbp), %eax
+ 13981 EAFFFF
+ 13982 cfe8 0FB695EC movzbl -5396(%rbp), %edx
+ 13982 EAFFFF
+ 13983 cfef 0FB6C0 movzbl %al, %eax
+ 13984 cff2 6689853E movw %ax, -8898(%rbp)
+ 13984 DDFFFF
+ 13985 cff9 0FB7853E movzwl -8898(%rbp), %eax
+ 13985 DDFFFF
+ 13986 d000 F6F2 divb %dl
+ 13987 d002 4189C6 movl %eax, %r14d
+ 13988 d005 0FB685FD movzbl -5379(%rbp), %eax
+ 13988 EAFFFF
+ 13989 d00c 0FB695ED movzbl -5395(%rbp), %edx
+ 13989 EAFFFF
+ 13990 d013 0FB6C0 movzbl %al, %eax
+ 13991 d016 6689853E movw %ax, -8898(%rbp)
+ 13991 DDFFFF
+ 13992 d01d 0FB7853E movzwl -8898(%rbp), %eax
+ 13992 DDFFFF
+ 13993 d024 F6F2 divb %dl
+ 13994 d026 4189C0 movl %eax, %r8d
+ 13995 d029 0FB685FE movzbl -5378(%rbp), %eax
+ 13995 EAFFFF
+ 13996 d030 0FB695EE movzbl -5394(%rbp), %edx
+ 13996 EAFFFF
+ 13997 d037 0FB6C0 movzbl %al, %eax
+ 13998 d03a 6689853E movw %ax, -8898(%rbp)
+ 13998 DDFFFF
+ 13999 d041 0FB7853E movzwl -8898(%rbp), %eax
+ 13999 DDFFFF
+ 14000 d048 F6F2 divb %dl
+ 14001 d04a 89C6 movl %eax, %esi
+ 14002 d04c 0FB685FF movzbl -5377(%rbp), %eax
+ 14002 EAFFFF
+ 14003 d053 0FB695EF movzbl -5393(%rbp), %edx
+ 14003 EAFFFF
+ 14004 d05a 0FB6C0 movzbl %al, %eax
+ 14005 d05d 6689853E movw %ax, -8898(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 442
+
+
+ 14005 DDFFFF
+ 14006 d064 0FB7853E movzwl -8898(%rbp), %eax
+ 14006 DDFFFF
+ 14007 d06b F6F2 divb %dl
+ 14008 d06d 89C1 movl %eax, %ecx
+ 14009 .LBB1959:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 14010 .loc 2 346 0
+ 14011 d06f 0FB6D3 movzbl %bl, %edx
+ 14012 d072 400FB6C7 movzbl %dil, %eax
+ 14013 d076 48C1E208 salq $8, %rdx
+ 14014 d07a 4809C2 orq %rax, %rdx
+ 14015 d07d 410FB6C1 movzbl %r9b, %eax
+ 14016 d081 48C1E208 salq $8, %rdx
+ 14017 d085 4809C2 orq %rax, %rdx
+ 14018 d088 0FB685DC movzbl -8740(%rbp), %eax
+ 14018 DDFFFF
+ 14019 d08f 48C1E208 salq $8, %rdx
+ 14020 d093 4809C2 orq %rax, %rdx
+ 14021 d096 0FB685DD movzbl -8739(%rbp), %eax
+ 14021 DDFFFF
+ 14022 d09d 48C1E208 salq $8, %rdx
+ 14023 d0a1 4809C2 orq %rax, %rdx
+ 14024 d0a4 0FB685DE movzbl -8738(%rbp), %eax
+ 14024 DDFFFF
+ 14025 d0ab 48C1E208 salq $8, %rdx
+ 14026 d0af 4809C2 orq %rax, %rdx
+ 14027 d0b2 0FB685DF movzbl -8737(%rbp), %eax
+ 14027 DDFFFF
+ 14028 d0b9 48C1E208 salq $8, %rdx
+ 14029 d0bd 4809C2 orq %rax, %rdx
+ 14030 d0c0 410FB6C7 movzbl %r15b, %eax
+ 14031 d0c4 48C1E208 salq $8, %rdx
+ 14032 d0c8 4809C2 orq %rax, %rdx
+ 14033 d0cb 0FB6C1 movzbl %cl, %eax
+ 14034 d0ce 400FB6CE movzbl %sil, %ecx
+ 14035 d0d2 48C1E008 salq $8, %rax
+ 14036 d0d6 4809C8 orq %rcx, %rax
+ 14037 d0d9 410FB6C8 movzbl %r8b, %ecx
+ 14038 d0dd 48C1E008 salq $8, %rax
+ 14039 d0e1 4809C8 orq %rcx, %rax
+ 14040 d0e4 410FB6CE movzbl %r14b, %ecx
+ 14041 d0e8 48C1E008 salq $8, %rax
+ 14042 d0ec 4809C8 orq %rcx, %rax
+ 14043 d0ef 410FB6CD movzbl %r13b, %ecx
+ 14044 d0f3 48C1E008 salq $8, %rax
+ 14045 d0f7 4809C8 orq %rcx, %rax
+ 14046 d0fa 410FB6CC movzbl %r12b, %ecx
+ 14047 d0fe 48C1E008 salq $8, %rax
+ 14048 d102 4809C8 orq %rcx, %rax
+ 14049 d105 410FB6CB movzbl %r11b, %ecx
+ 14050 d109 48C1E008 salq $8, %rax
+ 14051 d10d 4809C8 orq %rcx, %rax
+ 14052 d110 410FB6CA movzbl %r10b, %ecx
+ 14053 d114 48C1E008 salq $8, %rax
+ 14054 d118 4809C8 orq %rcx, %rax
+ 14055 d11b 488995A0 movq %rdx, -8800(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 443
+
+
+ 14055 DDFFFF
+ 14056 d122 488985A8 movq %rax, -8792(%rbp)
+ 14056 DDFFFF
+ 14057 d129 660F6F85 movdqa -8800(%rbp), %xmm0
+ 14057 A0DDFFFF
+ 14058 .LBE1959:
+ 14059 .LBE1958:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 14060 .loc 2 862 0
+ 14061 d131 F30F7F85 movdqu %xmm0, -5472(%rbp)
+ 14061 A0EAFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 14062 .loc 2 866 0
+ 14063 d139 C7857CEA movl $0, -5508(%rbp)
+ 14063 FFFF0000
+ 14063 0000
+ 14064 d143 E9860200 jmp .L324
+ 14064 00
+ 14065 .L333:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 14066 .loc 2 868 0
+ 14067 d148 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 14067 00000000
+ 14068 d150 F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 14068 10EBFFFF
+ 14069 d158 F30F6F85 movdqu -5472(%rbp), %xmm0
+ 14069 A0EAFFFF
+ 14070 d160 F30F7F85 movdqu %xmm0, -5376(%rbp)
+ 14070 00EBFFFF
+ 14071 .LBB1960:
+ 14072 .LBB1961:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 14073 .loc 2 380 0
+ 14074 d168 F30F6F85 movdqu -5360(%rbp), %xmm0
+ 14074 10EBFFFF
+ 14075 d170 F30F7F85 movdqu %xmm0, -8096(%rbp)
+ 14075 60E0FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 14076 .loc 2 381 0
+ 14077 d178 F30F6F85 movdqu -5376(%rbp), %xmm0
+ 14077 00EBFFFF
+ 14078 d180 F30F7F85 movdqu %xmm0, -8112(%rbp)
+ 14078 50E0FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 14079 .loc 2 383 0
+ 14080 d188 C7852CEB movl $0, -5332(%rbp)
+ 14080 FFFF0000
+ 14080 0000
+ 14081 d192 EB5C jmp .L325
+ 14082 .L328:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 14083 .loc 2 385 0
+ 14084 d194 8B852CEB movl -5332(%rbp), %eax
+ 14084 FFFF
+ 14085 d19a 89C0 mov %eax, %eax
+ 14086 d19c 0FB68405 movzbl -8112(%rbp,%rax), %eax
+ 14086 50E0FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 444
+
+
+ 14087 d1a4 84C0 testb %al, %al
+ 14088 d1a6 7912 jns .L326
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 14089 .loc 2 386 0
+ 14090 d1a8 8B852CEB movl -5332(%rbp), %eax
+ 14090 FFFF
+ 14091 d1ae 89C0 mov %eax, %eax
+ 14092 d1b0 C6840570 movb $0, -8080(%rbp,%rax)
+ 14092 E0FFFF00
+ 14093 d1b8 EB2F jmp .L327
+ 14094 .L326:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 14095 .loc 2 388 0
+ 14096 d1ba 8B8D2CEB movl -5332(%rbp), %ecx
+ 14096 FFFF
+ 14097 d1c0 8B852CEB movl -5332(%rbp), %eax
+ 14097 FFFF
+ 14098 d1c6 89C0 mov %eax, %eax
+ 14099 d1c8 0FB68405 movzbl -8112(%rbp,%rax), %eax
+ 14099 50E0FFFF
+ 14100 d1d0 0FB6C0 movzbl %al, %eax
+ 14101 d1d3 83E00F andl $15, %eax
+ 14102 d1d6 4898 cltq
+ 14103 d1d8 0FB69405 movzbl -8096(%rbp,%rax), %edx
+ 14103 60E0FFFF
+ 14104 d1e0 89C8 mov %ecx, %eax
+ 14105 d1e2 88940570 movb %dl, -8080(%rbp,%rax)
+ 14105 E0FFFF
+ 14106 .L327:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 14107 .loc 2 383 0
+ 14108 d1e9 83852CEB addl $1, -5332(%rbp)
+ 14108 FFFF01
+ 14109 .L325:
+ 14110 d1f0 83BD2CEB cmpl $15, -5332(%rbp)
+ 14110 FFFF0F
+ 14111 d1f7 769B jbe .L328
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 14112 .loc 2 391 0
+ 14113 d1f9 F30F6F85 movdqu -8080(%rbp), %xmm0
+ 14113 70E0FFFF
+ 14114 .LBE1961:
+ 14115 .LBE1960:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 14116 .loc 2 868 0
+ 14117 d201 F30F7F85 movdqu %xmm0, -5488(%rbp)
+ 14117 90EAFFFF
+ 14118 d209 F30F6F85 movdqu -5456(%rbp), %xmm0
+ 14118 B0EAFFFF
+ 14119 d211 F30F7F85 movdqu %xmm0, -5312(%rbp)
+ 14119 40EBFFFF
+ 14120 d219 F30F6F85 movdqu -5488(%rbp), %xmm0
+ 14120 90EAFFFF
+ 14121 d221 F30F7F85 movdqu %xmm0, -5328(%rbp)
+ 14121 30EBFFFF
+ 14122 .LBB1962:
+ 14123 .LBB1963:
+
GAS LISTING /tmp/ccMa7HLZ.s page 445
+
+
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 14124 .loc 2 234 0
+ 14125 d229 F30F6F85 movdqu -5328(%rbp), %xmm0
+ 14125 30EBFFFF
+ 14126 d231 F30F6F8D movdqu -5312(%rbp), %xmm1
+ 14126 40EBFFFF
+ 14127 d239 660FEBC1 por %xmm1, %xmm0
+ 14128 .LBE1963:
+ 14129 .LBE1962:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 14130 .loc 2 870 0
+ 14131 d23d F30F7F85 movdqu %xmm0, -5488(%rbp)
+ 14131 90EAFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 14132 .loc 2 872 0
+ 14133 d245 8B857CEA mov -5508(%rbp), %eax
+ 14133 FFFF
+ 14134 d24b 48C1E004 salq $4, %rax
+ 14135 d24f 48038558 addq -5544(%rbp), %rax
+ 14135 EAFFFF
+ 14136 d256 660F6F00 movdqa (%rax), %xmm0
+ 14137 d25a F30F7F85 movdqu %xmm0, -5280(%rbp)
+ 14137 60EBFFFF
+ 14138 d262 F30F6F85 movdqu -5488(%rbp), %xmm0
+ 14138 90EAFFFF
+ 14139 d26a F30F7F85 movdqu %xmm0, -5296(%rbp)
+ 14139 50EBFFFF
+ 14140 .LBB1964:
+ 14141 .LBB1965:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 14142 .loc 2 380 0
+ 14143 d272 F30F6F85 movdqu -5280(%rbp), %xmm0
+ 14143 60EBFFFF
+ 14144 d27a F30F7F85 movdqu %xmm0, -8048(%rbp)
+ 14144 90E0FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 14145 .loc 2 381 0
+ 14146 d282 F30F6F85 movdqu -5296(%rbp), %xmm0
+ 14146 50EBFFFF
+ 14147 d28a F30F7F85 movdqu %xmm0, -8064(%rbp)
+ 14147 80E0FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 14148 .loc 2 383 0
+ 14149 d292 C7857CEB movl $0, -5252(%rbp)
+ 14149 FFFF0000
+ 14149 0000
+ 14150 d29c EB5C jmp .L329
+ 14151 .L332:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 14152 .loc 2 385 0
+ 14153 d29e 8B857CEB movl -5252(%rbp), %eax
+ 14153 FFFF
+ 14154 d2a4 89C0 mov %eax, %eax
+ 14155 d2a6 0FB68405 movzbl -8064(%rbp,%rax), %eax
+ 14155 80E0FFFF
+ 14156 d2ae 84C0 testb %al, %al
+ 14157 d2b0 7912 jns .L330
+
GAS LISTING /tmp/ccMa7HLZ.s page 446
+
+
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 14158 .loc 2 386 0
+ 14159 d2b2 8B857CEB movl -5252(%rbp), %eax
+ 14159 FFFF
+ 14160 d2b8 89C0 mov %eax, %eax
+ 14161 d2ba C68405A0 movb $0, -8032(%rbp,%rax)
+ 14161 E0FFFF00
+ 14162 d2c2 EB2F jmp .L331
+ 14163 .L330:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 14164 .loc 2 388 0
+ 14165 d2c4 8B8D7CEB movl -5252(%rbp), %ecx
+ 14165 FFFF
+ 14166 d2ca 8B857CEB movl -5252(%rbp), %eax
+ 14166 FFFF
+ 14167 d2d0 89C0 mov %eax, %eax
+ 14168 d2d2 0FB68405 movzbl -8064(%rbp,%rax), %eax
+ 14168 80E0FFFF
+ 14169 d2da 0FB6C0 movzbl %al, %eax
+ 14170 d2dd 83E00F andl $15, %eax
+ 14171 d2e0 4898 cltq
+ 14172 d2e2 0FB69405 movzbl -8048(%rbp,%rax), %edx
+ 14172 90E0FFFF
+ 14173 d2ea 89C8 mov %ecx, %eax
+ 14174 d2ec 889405A0 movb %dl, -8032(%rbp,%rax)
+ 14174 E0FFFF
+ 14175 .L331:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 14176 .loc 2 383 0
+ 14177 d2f3 83857CEB addl $1, -5252(%rbp)
+ 14177 FFFF01
+ 14178 .L329:
+ 14179 d2fa 83BD7CEB cmpl $15, -5252(%rbp)
+ 14179 FFFF0F
+ 14180 d301 769B jbe .L332
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 14181 .loc 2 391 0
+ 14182 d303 F30F6F85 movdqu -8032(%rbp), %xmm0
+ 14182 A0E0FFFF
+ 14183 .LBE1965:
+ 14184 .LBE1964:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 14185 .loc 2 872 0
+ 14186 d30b F30F7F85 movdqu %xmm0, -5488(%rbp)
+ 14186 90EAFFFF
+ 14187 d313 F30F6F85 movdqu -5504(%rbp), %xmm0
+ 14187 80EAFFFF
+ 14188 d31b F30F7F85 movdqu %xmm0, -5232(%rbp)
+ 14188 90EBFFFF
+ 14189 d323 F30F6F85 movdqu -5488(%rbp), %xmm0
+ 14189 90EAFFFF
+ 14190 d32b F30F7F85 movdqu %xmm0, -5248(%rbp)
+ 14190 80EBFFFF
+ 14191 .LBB1966:
+ 14192 .LBB1967:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 14193 .loc 2 234 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 447
+
+
+ 14194 d333 F30F6F85 movdqu -5248(%rbp), %xmm0
+ 14194 80EBFFFF
+ 14195 d33b F30F6F8D movdqu -5232(%rbp), %xmm1
+ 14195 90EBFFFF
+ 14196 d343 660FEBC1 por %xmm1, %xmm0
+ 14197 .LBE1967:
+ 14198 .LBE1966:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 14199 .loc 2 874 0
+ 14200 d347 F30F7F85 movdqu %xmm0, -5504(%rbp)
+ 14200 80EAFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14201 .loc 2 876 0
+ 14202 d34f 660F6F05 movdqa vec_01(%rip), %xmm0
+ 14202 00000000
+ 14203 d357 F30F6F8D movdqu -5472(%rbp), %xmm1
+ 14203 A0EAFFFF
+ 14204 d35f F30F7F8D movdqu %xmm1, -5200(%rbp)
+ 14204 B0EBFFFF
+ 14205 d367 F30F7F85 movdqu %xmm0, -5216(%rbp)
+ 14205 A0EBFFFF
+ 14206 .LBB1968:
+ 14207 .LBB1969:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 14208 .loc 2 290 0
+ 14209 d36f F30F6F8D movdqu -5216(%rbp), %xmm1
+ 14209 A0EBFFFF
+ 14210 d377 F30F6F85 movdqu -5200(%rbp), %xmm0
+ 14210 B0EBFFFF
+ 14211 d37f 660FF8C1 psubb %xmm1, %xmm0
+ 14212 .LBE1969:
+ 14213 .LBE1968:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14214 .loc 2 876 0
+ 14215 d383 F30F7F85 movdqu %xmm0, -5472(%rbp)
+ 14215 A0EAFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14216 .loc 2 878 0
+ 14217 d38b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 14217 00000000
+ 14218 d393 F30F6F8D movdqu -5472(%rbp), %xmm1
+ 14218 A0EAFFFF
+ 14219 d39b F30F7F8D movdqu %xmm1, -5168(%rbp)
+ 14219 D0EBFFFF
+ 14220 d3a3 F30F7F85 movdqu %xmm0, -5184(%rbp)
+ 14220 C0EBFFFF
+ 14221 .LBB1970:
+ 14222 .LBB1971:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 14223 .loc 2 206 0
+ 14224 d3ab F30F6F85 movdqu -5184(%rbp), %xmm0
+ 14224 C0EBFFFF
+ 14225 d3b3 F30F6F8D movdqu -5168(%rbp), %xmm1
+ 14225 D0EBFFFF
+ 14226 d3bb 660FDBC1 pand %xmm1, %xmm0
+ 14227 .LBE1971:
+ 14228 .LBE1970:
+
GAS LISTING /tmp/ccMa7HLZ.s page 448
+
+
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14229 .loc 2 878 0
+ 14230 d3bf F30F7F85 movdqu %xmm0, -5472(%rbp)
+ 14230 A0EAFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 14231 .loc 2 866 0
+ 14232 d3c7 83857CEA addl $1, -5508(%rbp)
+ 14232 FFFF01
+ 14233 .L324:
+ 14234 d3ce 83BD7CEA cmpl $15, -5508(%rbp)
+ 14234 FFFF0F
+ 14235 d3d5 0F866DFD jbe .L333
+ 14235 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 14236 .loc 2 882 0
+ 14237 d3db F30F6F85 movdqu -5504(%rbp), %xmm0
+ 14237 80EAFFFF
+ 14238 .LBE1955:
+ 14239 .LBE1954:
+ 14240 .LBE1953:
+ 14241 .LBE1952:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 14242 .loc 2 1682 0
+ 14243 d3e3 660F7F85 movdqa %xmm0, -8784(%rbp)
+ 14243 B0DDFFFF
+ 14244 .LBB1972:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 14245 .loc 2 1683 0
+ 14246 d3eb 660F6F85 movdqa -8784(%rbp), %xmm0
+ 14246 B0DDFFFF
+ 14247 d3f3 F30F7F85 movdqu %xmm0, -8144(%rbp)
+ 14247 30E0FFFF
+ 14248 d3fb E8000000 call KDbgWriterGet at PLT
+ 14248 00
+ 14249 d400 4885C0 testq %rax, %rax
+ 14250 d403 7479 je .L335
+ 14251 d405 BF010000 movl $1, %edi
+ 14251 00
+ 14252 d40a E8000000 call KDbgCondToFlag at PLT
+ 14252 00
+ 14253 d40f 4889C6 movq %rax, %rsi
+ 14254 d412 BF100000 movl $16, %edi
+ 14254 00
+ 14255 d417 E8000000 call KDbgTestModConds at PLT
+ 14255 00
+ 14256 d41c 84C0 testb %al, %al
+ 14257 d41e 745E je .L335
+ 14258 d420 8B853CE0 movl -8132(%rbp), %eax
+ 14258 FFFF
+ 14259 d426 89C7 movl %eax, %edi
+ 14260 d428 E8D32BFF call bswap_32
+ 14260 FF
+ 14261 d42d 4189C5 movl %eax, %r13d
+ 14262 d430 8B8538E0 movl -8136(%rbp), %eax
+ 14262 FFFF
+ 14263 d436 89C7 movl %eax, %edi
+ 14264 d438 E8C32BFF call bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s page 449
+
+
+ 14264 FF
+ 14265 d43d 4189C4 movl %eax, %r12d
+ 14266 d440 8B8534E0 movl -8140(%rbp), %eax
+ 14266 FFFF
+ 14267 d446 89C7 movl %eax, %edi
+ 14268 d448 E8B32BFF call bswap_32
+ 14268 FF
+ 14269 d44d 89C3 movl %eax, %ebx
+ 14270 d44f 8B8530E0 movl -8144(%rbp), %eax
+ 14270 FFFF
+ 14271 d455 89C7 movl %eax, %edi
+ 14272 d457 E8A42BFF call bswap_32
+ 14272 FF
+ 14273 d45c 4589E9 movl %r13d, %r9d
+ 14274 d45f 4589E0 movl %r12d, %r8d
+ 14275 d462 89D9 movl %ebx, %ecx
+ 14276 d464 89C2 movl %eax, %edx
+ 14277 d466 488D3500 leaq .LC0(%rip), %rsi
+ 14277 000000
+ 14278 d46d 488D3D00 leaq .LC1(%rip), %rdi
+ 14278 000000
+ 14279 d474 B8000000 movl $0, %eax
+ 14279 00
+ 14280 d479 E8000000 call KDbgMsg at PLT
+ 14280 00
+ 14281 .L335:
+ 14282 d47e 660F6F85 movdqa -8784(%rbp), %xmm0
+ 14282 B0DDFFFF
+ 14283 d486 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 14283 E0EBFFFF
+ 14284 .LBE1972:
+ 14285 .LBB1973:
+ 14286 .LBB1974:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14287 .loc 2 667 0
+ 14288 d48e 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 14288 00000000
+ 14289 d496 F30F6F8D movdqu -5152(%rbp), %xmm1
+ 14289 E0EBFFFF
+ 14290 d49e F30F7F8D movdqu %xmm1, -5120(%rbp)
+ 14290 00ECFFFF
+ 14291 d4a6 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 14291 F0EBFFFF
+ 14292 .LBB1975:
+ 14293 .LBB1976:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 14294 .loc 2 380 0
+ 14295 d4ae F30F6F85 movdqu -5120(%rbp), %xmm0
+ 14295 00ECFFFF
+ 14296 d4b6 F30F7F85 movdqu %xmm0, -8000(%rbp)
+ 14296 C0E0FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 14297 .loc 2 381 0
+ 14298 d4be F30F6F85 movdqu -5136(%rbp), %xmm0
+ 14298 F0EBFFFF
+ 14299 d4c6 F30F7F85 movdqu %xmm0, -8016(%rbp)
+ 14299 B0E0FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 450
+
+
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 14300 .loc 2 383 0
+ 14301 d4ce C7851CEC movl $0, -5092(%rbp)
+ 14301 FFFF0000
+ 14301 0000
+ 14302 d4d8 EB5C jmp .L336
+ 14303 .L339:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 14304 .loc 2 385 0
+ 14305 d4da 8B851CEC movl -5092(%rbp), %eax
+ 14305 FFFF
+ 14306 d4e0 89C0 mov %eax, %eax
+ 14307 d4e2 0FB68405 movzbl -8016(%rbp,%rax), %eax
+ 14307 B0E0FFFF
+ 14308 d4ea 84C0 testb %al, %al
+ 14309 d4ec 7912 jns .L337
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 14310 .loc 2 386 0
+ 14311 d4ee 8B851CEC movl -5092(%rbp), %eax
+ 14311 FFFF
+ 14312 d4f4 89C0 mov %eax, %eax
+ 14313 d4f6 C68405D0 movb $0, -7984(%rbp,%rax)
+ 14313 E0FFFF00
+ 14314 d4fe EB2F jmp .L338
+ 14315 .L337:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 14316 .loc 2 388 0
+ 14317 d500 8B8D1CEC movl -5092(%rbp), %ecx
+ 14317 FFFF
+ 14318 d506 8B851CEC movl -5092(%rbp), %eax
+ 14318 FFFF
+ 14319 d50c 89C0 mov %eax, %eax
+ 14320 d50e 0FB68405 movzbl -8016(%rbp,%rax), %eax
+ 14320 B0E0FFFF
+ 14321 d516 0FB6C0 movzbl %al, %eax
+ 14322 d519 83E00F andl $15, %eax
+ 14323 d51c 4898 cltq
+ 14324 d51e 0FB69405 movzbl -8000(%rbp,%rax), %edx
+ 14324 C0E0FFFF
+ 14325 d526 89C8 mov %ecx, %eax
+ 14326 d528 889405D0 movb %dl, -7984(%rbp,%rax)
+ 14326 E0FFFF
+ 14327 .L338:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 14328 .loc 2 383 0
+ 14329 d52f 83851CEC addl $1, -5092(%rbp)
+ 14329 FFFF01
+ 14330 .L336:
+ 14331 d536 83BD1CEC cmpl $15, -5092(%rbp)
+ 14331 FFFF0F
+ 14332 d53d 769B jbe .L339
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 14333 .loc 2 391 0
+ 14334 d53f F30F6F85 movdqu -7984(%rbp), %xmm0
+ 14334 D0E0FFFF
+ 14335 .LBE1976:
+ 14336 .LBE1975:
+
GAS LISTING /tmp/ccMa7HLZ.s page 451
+
+
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14337 .loc 2 667 0
+ 14338 d547 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 14338 E0EBFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 14339 .loc 2 668 0
+ 14340 d54f F30F6F85 movdqu -5152(%rbp), %xmm0
+ 14340 E0EBFFFF
+ 14341 .LBE1974:
+ 14342 .LBE1973:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 14343 .loc 2 1684 0
+ 14344 d557 660F7F85 movdqa %xmm0, -8784(%rbp)
+ 14344 B0DDFFFF
+ 14345 .LBB1977:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 14346 .loc 2 1685 0
+ 14347 d55f 660F6F85 movdqa -8784(%rbp), %xmm0
+ 14347 B0DDFFFF
+ 14348 d567 F30F7F85 movdqu %xmm0, -8160(%rbp)
+ 14348 20E0FFFF
+ 14349 d56f E8000000 call KDbgWriterGet at PLT
+ 14349 00
+ 14350 d574 4885C0 testq %rax, %rax
+ 14351 d577 7479 je .L341
+ 14352 d579 BF010000 movl $1, %edi
+ 14352 00
+ 14353 d57e E8000000 call KDbgCondToFlag at PLT
+ 14353 00
+ 14354 d583 4889C6 movq %rax, %rsi
+ 14355 d586 BF100000 movl $16, %edi
+ 14355 00
+ 14356 d58b E8000000 call KDbgTestModConds at PLT
+ 14356 00
+ 14357 d590 84C0 testb %al, %al
+ 14358 d592 745E je .L341
+ 14359 d594 8B852CE0 movl -8148(%rbp), %eax
+ 14359 FFFF
+ 14360 d59a 89C7 movl %eax, %edi
+ 14361 d59c E85F2AFF call bswap_32
+ 14361 FF
+ 14362 d5a1 4189C5 movl %eax, %r13d
+ 14363 d5a4 8B8528E0 movl -8152(%rbp), %eax
+ 14363 FFFF
+ 14364 d5aa 89C7 movl %eax, %edi
+ 14365 d5ac E84F2AFF call bswap_32
+ 14365 FF
+ 14366 d5b1 4189C4 movl %eax, %r12d
+ 14367 d5b4 8B8524E0 movl -8156(%rbp), %eax
+ 14367 FFFF
+ 14368 d5ba 89C7 movl %eax, %edi
+ 14369 d5bc E83F2AFF call bswap_32
+ 14369 FF
+ 14370 d5c1 89C3 movl %eax, %ebx
+ 14371 d5c3 8B8520E0 movl -8160(%rbp), %eax
+ 14371 FFFF
+ 14372 d5c9 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 452
+
+
+ 14373 d5cb E8302AFF call bswap_32
+ 14373 FF
+ 14374 d5d0 4589E9 movl %r13d, %r9d
+ 14375 d5d3 4589E0 movl %r12d, %r8d
+ 14376 d5d6 89D9 movl %ebx, %ecx
+ 14377 d5d8 89C2 movl %eax, %edx
+ 14378 d5da 488D3500 leaq .LC2(%rip), %rsi
+ 14378 000000
+ 14379 d5e1 488D3D00 leaq .LC1(%rip), %rdi
+ 14379 000000
+ 14380 d5e8 B8000000 movl $0, %eax
+ 14380 00
+ 14381 d5ed E8000000 call KDbgMsg at PLT
+ 14381 00
+ 14382 .L341:
+ 14383 d5f2 660F6F85 movdqa -8784(%rbp), %xmm0
+ 14383 B0DDFFFF
+ 14384 d5fa F30F7F85 movdqu %xmm0, -5072(%rbp)
+ 14384 30ECFFFF
+ 14385 d602 660F6F85 movdqa -8768(%rbp), %xmm0
+ 14385 C0DDFFFF
+ 14386 d60a F30F7F85 movdqu %xmm0, -5088(%rbp)
+ 14386 20ECFFFF
+ 14387 .LBE1977:
+ 14388 .LBB1978:
+ 14389 .LBB1979:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 14390 .loc 2 178 0
+ 14391 d612 F30F6F85 movdqu -5088(%rbp), %xmm0
+ 14391 20ECFFFF
+ 14392 d61a F30F6F8D movdqu -5072(%rbp), %xmm1
+ 14392 30ECFFFF
+ 14393 d622 660FEFC1 pxor %xmm1, %xmm0
+ 14394 .LBE1979:
+ 14395 .LBE1978:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 14396 .loc 2 1686 0
+ 14397 d626 660F7F85 movdqa %xmm0, -8784(%rbp)
+ 14397 B0DDFFFF
+ 14398 .LBB1980:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 14399 .loc 2 1687 0
+ 14400 d62e 660F6F85 movdqa -8784(%rbp), %xmm0
+ 14400 B0DDFFFF
+ 14401 d636 F30F7F85 movdqu %xmm0, -8176(%rbp)
+ 14401 10E0FFFF
+ 14402 d63e E8000000 call KDbgWriterGet at PLT
+ 14402 00
+ 14403 d643 4885C0 testq %rax, %rax
+ 14404 d646 7479 je .L343
+ 14405 d648 BF010000 movl $1, %edi
+ 14405 00
+ 14406 d64d E8000000 call KDbgCondToFlag at PLT
+ 14406 00
+ 14407 d652 4889C6 movq %rax, %rsi
+ 14408 d655 BF100000 movl $16, %edi
+ 14408 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 453
+
+
+ 14409 d65a E8000000 call KDbgTestModConds at PLT
+ 14409 00
+ 14410 d65f 84C0 testb %al, %al
+ 14411 d661 745E je .L343
+ 14412 d663 8B851CE0 movl -8164(%rbp), %eax
+ 14412 FFFF
+ 14413 d669 89C7 movl %eax, %edi
+ 14414 d66b E89029FF call bswap_32
+ 14414 FF
+ 14415 d670 4189C5 movl %eax, %r13d
+ 14416 d673 8B8518E0 movl -8168(%rbp), %eax
+ 14416 FFFF
+ 14417 d679 89C7 movl %eax, %edi
+ 14418 d67b E88029FF call bswap_32
+ 14418 FF
+ 14419 d680 4189C4 movl %eax, %r12d
+ 14420 d683 8B8514E0 movl -8172(%rbp), %eax
+ 14420 FFFF
+ 14421 d689 89C7 movl %eax, %edi
+ 14422 d68b E87029FF call bswap_32
+ 14422 FF
+ 14423 d690 89C3 movl %eax, %ebx
+ 14424 d692 8B8510E0 movl -8176(%rbp), %eax
+ 14424 FFFF
+ 14425 d698 89C7 movl %eax, %edi
+ 14426 d69a E86129FF call bswap_32
+ 14426 FF
+ 14427 d69f 4589E9 movl %r13d, %r9d
+ 14428 d6a2 4589E0 movl %r12d, %r8d
+ 14429 d6a5 89D9 movl %ebx, %ecx
+ 14430 d6a7 89C2 movl %eax, %edx
+ 14431 d6a9 488D3500 leaq .LC3(%rip), %rsi
+ 14431 000000
+ 14432 d6b0 488D3D00 leaq .LC1(%rip), %rdi
+ 14432 000000
+ 14433 d6b7 B8000000 movl $0, %eax
+ 14433 00
+ 14434 d6bc E8000000 call KDbgMsg at PLT
+ 14434 00
+ 14435 .L343:
+ 14436 d6c1 660F6F85 movdqa -8784(%rbp), %xmm0
+ 14436 B0DDFFFF
+ 14437 d6c9 F30F7F85 movdqu %xmm0, -5056(%rbp)
+ 14437 40ECFFFF
+ 14438 .LBE1980:
+ 14439 .LBB1981:
+ 14440 .LBB1982:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 14441 .loc 2 1357 0
+ 14442 d6d1 F30F6F85 movdqu -5056(%rbp), %xmm0
+ 14442 40ECFFFF
+ 14443 d6d9 F30F7F85 movdqu %xmm0, -7968(%rbp)
+ 14443 E0E0FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 14444 .loc 2 1358 0
+ 14445 d6e1 8B85ECE0 movl -7956(%rbp), %eax
+ 14445 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 454
+
+
+ 14446 d6e7 8985E8E0 movl %eax, -7960(%rbp)
+ 14446 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 14447 .loc 2 1359 0
+ 14448 d6ed 8B85ECE0 movl -7956(%rbp), %eax
+ 14448 FFFF
+ 14449 d6f3 8985E4E0 movl %eax, -7964(%rbp)
+ 14449 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 14450 .loc 2 1360 0
+ 14451 d6f9 8B85ECE0 movl -7956(%rbp), %eax
+ 14451 FFFF
+ 14452 d6ff 8985E0E0 movl %eax, -7968(%rbp)
+ 14452 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 14453 .loc 2 1361 0
+ 14454 d705 F30F6F85 movdqu -7968(%rbp), %xmm0
+ 14454 E0E0FFFF
+ 14455 .LBE1982:
+ 14456 .LBE1981:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 14457 .loc 2 1688 0
+ 14458 d70d 660F7F85 movdqa %xmm0, -8784(%rbp)
+ 14458 B0DDFFFF
+ 14459 .LBB1983:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 14460 .loc 2 1689 0
+ 14461 d715 660F6F85 movdqa -8784(%rbp), %xmm0
+ 14461 B0DDFFFF
+ 14462 d71d F30F7F85 movdqu %xmm0, -8192(%rbp)
+ 14462 00E0FFFF
+ 14463 d725 E8000000 call KDbgWriterGet at PLT
+ 14463 00
+ 14464 d72a 4885C0 testq %rax, %rax
+ 14465 d72d 7479 je .L345
+ 14466 d72f BF010000 movl $1, %edi
+ 14466 00
+ 14467 d734 E8000000 call KDbgCondToFlag at PLT
+ 14467 00
+ 14468 d739 4889C6 movq %rax, %rsi
+ 14469 d73c BF100000 movl $16, %edi
+ 14469 00
+ 14470 d741 E8000000 call KDbgTestModConds at PLT
+ 14470 00
+ 14471 d746 84C0 testb %al, %al
+ 14472 d748 745E je .L345
+ 14473 d74a 8B850CE0 movl -8180(%rbp), %eax
+ 14473 FFFF
+ 14474 d750 89C7 movl %eax, %edi
+ 14475 d752 E8A928FF call bswap_32
+ 14475 FF
+ 14476 d757 4189C5 movl %eax, %r13d
+ 14477 d75a 8B8508E0 movl -8184(%rbp), %eax
+ 14477 FFFF
+ 14478 d760 89C7 movl %eax, %edi
+ 14479 d762 E89928FF call bswap_32
+ 14479 FF
+
GAS LISTING /tmp/ccMa7HLZ.s page 455
+
+
+ 14480 d767 4189C4 movl %eax, %r12d
+ 14481 d76a 8B8504E0 movl -8188(%rbp), %eax
+ 14481 FFFF
+ 14482 d770 89C7 movl %eax, %edi
+ 14483 d772 E88928FF call bswap_32
+ 14483 FF
+ 14484 d777 89C3 movl %eax, %ebx
+ 14485 d779 8B8500E0 movl -8192(%rbp), %eax
+ 14485 FFFF
+ 14486 d77f 89C7 movl %eax, %edi
+ 14487 d781 E87A28FF call bswap_32
+ 14487 FF
+ 14488 d786 4589E9 movl %r13d, %r9d
+ 14489 d789 4589E0 movl %r12d, %r8d
+ 14490 d78c 89D9 movl %ebx, %ecx
+ 14491 d78e 89C2 movl %eax, %edx
+ 14492 d790 488D3500 leaq .LC4(%rip), %rsi
+ 14492 000000
+ 14493 d797 488D3D00 leaq .LC1(%rip), %rdi
+ 14493 000000
+ 14494 d79e B8000000 movl $0, %eax
+ 14494 00
+ 14495 d7a3 E8000000 call KDbgMsg at PLT
+ 14495 00
+ 14496 .L345:
+ 14497 .LBE1983:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 14498 .loc 2 1690 0
+ 14499 d7a8 660F6F85 movdqa -8784(%rbp), %xmm0
+ 14499 B0DDFFFF
+ 14500 .LBE1949:
+ 14501 .LBE1948:
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(2,0x01); /* k8 : k9 : k10 : k11 */
+ 14502 .loc 2 1926 0
+ 14503 d7b0 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 14503 E0E9FFFF
+ 14504 d7b8 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 14504 C0E9FFFF
+ 14505 d7c0 F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 14505 50ECFFFF
+ 14506 .LBB1984:
+ 14507 .LBB1985:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 14508 .loc 2 1565 0
+ 14509 d7c8 F30F6F85 movdqu -5040(%rbp), %xmm0
+ 14509 50ECFFFF
+ 14510 d7d0 660F7F85 movdqa %xmm0, -8736(%rbp)
+ 14510 E0DDFFFF
+ 14511 d7d8 660F6F85 movdqa -8736(%rbp), %xmm0
+ 14511 E0DDFFFF
+ 14512 d7e0 F30F7F85 movdqu %xmm0, -5024(%rbp)
+ 14512 60ECFFFF
+ 14513 .LBB1986:
+ 14514 .LBB1987:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 14515 .loc 2 1282 0
+ 14516 d7e8 F30F6F85 movdqu -5024(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 456
+
+
+ 14516 60ECFFFF
+ 14517 d7f0 F30F7F85 movdqu %xmm0, -7952(%rbp)
+ 14517 F0E0FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 14518 .loc 2 1283 0
+ 14519 d7f8 8B85F8E0 movl -7944(%rbp), %eax
+ 14519 FFFF
+ 14520 d7fe 8985FCE0 movl %eax, -7940(%rbp)
+ 14520 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 14521 .loc 2 1284 0
+ 14522 d804 8B85F4E0 movl -7948(%rbp), %eax
+ 14522 FFFF
+ 14523 d80a 8985F8E0 movl %eax, -7944(%rbp)
+ 14523 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 14524 .loc 2 1285 0
+ 14525 d810 8B85F0E0 movl -7952(%rbp), %eax
+ 14525 FFFF
+ 14526 d816 8985F4E0 movl %eax, -7948(%rbp)
+ 14526 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 14527 .loc 2 1286 0
+ 14528 d81c C785F0E0 movl $0, -7952(%rbp)
+ 14528 FFFF0000
+ 14528 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 14529 .loc 2 1287 0
+ 14530 d826 F30F6F85 movdqu -7952(%rbp), %xmm0
+ 14530 F0E0FFFF
+ 14531 .LBE1987:
+ 14532 .LBE1986:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14533 .loc 2 1567 0
+ 14534 d82e 660F7F85 movdqa %xmm0, -8736(%rbp)
+ 14534 E0DDFFFF
+ 14535 d836 660F6F85 movdqa -8736(%rbp), %xmm0
+ 14535 E0DDFFFF
+ 14536 d83e 660FEF85 pxor -5040(%rbp), %xmm0
+ 14536 50ECFFFF
+ 14537 d846 F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 14537 50ECFFFF
+ 14538 d84e 660F6F85 movdqa -8736(%rbp), %xmm0
+ 14538 E0DDFFFF
+ 14539 d856 F30F7F85 movdqu %xmm0, -5008(%rbp)
+ 14539 70ECFFFF
+ 14540 .LBB1988:
+ 14541 .LBB1989:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 14542 .loc 2 1282 0
+ 14543 d85e F30F6F85 movdqu -5008(%rbp), %xmm0
+ 14543 70ECFFFF
+ 14544 d866 F30F7F85 movdqu %xmm0, -7936(%rbp)
+ 14544 00E1FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 14545 .loc 2 1283 0
+ 14546 d86e 8B8508E1 movl -7928(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 457
+
+
+ 14546 FFFF
+ 14547 d874 89850CE1 movl %eax, -7924(%rbp)
+ 14547 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 14548 .loc 2 1284 0
+ 14549 d87a 8B8504E1 movl -7932(%rbp), %eax
+ 14549 FFFF
+ 14550 d880 898508E1 movl %eax, -7928(%rbp)
+ 14550 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 14551 .loc 2 1285 0
+ 14552 d886 8B8500E1 movl -7936(%rbp), %eax
+ 14552 FFFF
+ 14553 d88c 898504E1 movl %eax, -7932(%rbp)
+ 14553 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 14554 .loc 2 1286 0
+ 14555 d892 C78500E1 movl $0, -7936(%rbp)
+ 14555 FFFF0000
+ 14555 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 14556 .loc 2 1287 0
+ 14557 d89c F30F6F85 movdqu -7936(%rbp), %xmm0
+ 14557 00E1FFFF
+ 14558 .LBE1989:
+ 14559 .LBE1988:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14560 .loc 2 1568 0
+ 14561 d8a4 660F7F85 movdqa %xmm0, -8736(%rbp)
+ 14561 E0DDFFFF
+ 14562 d8ac 660F6F85 movdqa -8736(%rbp), %xmm0
+ 14562 E0DDFFFF
+ 14563 d8b4 660FEF85 pxor -5040(%rbp), %xmm0
+ 14563 50ECFFFF
+ 14564 d8bc F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 14564 50ECFFFF
+ 14565 d8c4 660F6F85 movdqa -8736(%rbp), %xmm0
+ 14565 E0DDFFFF
+ 14566 d8cc F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 14566 80ECFFFF
+ 14567 .LBB1990:
+ 14568 .LBB1991:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 14569 .loc 2 1282 0
+ 14570 d8d4 F30F6F85 movdqu -4992(%rbp), %xmm0
+ 14570 80ECFFFF
+ 14571 d8dc F30F7F85 movdqu %xmm0, -7920(%rbp)
+ 14571 10E1FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 14572 .loc 2 1283 0
+ 14573 d8e4 8B8518E1 movl -7912(%rbp), %eax
+ 14573 FFFF
+ 14574 d8ea 89851CE1 movl %eax, -7908(%rbp)
+ 14574 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 14575 .loc 2 1284 0
+ 14576 d8f0 8B8514E1 movl -7916(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 458
+
+
+ 14576 FFFF
+ 14577 d8f6 898518E1 movl %eax, -7912(%rbp)
+ 14577 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 14578 .loc 2 1285 0
+ 14579 d8fc 8B8510E1 movl -7920(%rbp), %eax
+ 14579 FFFF
+ 14580 d902 898514E1 movl %eax, -7916(%rbp)
+ 14580 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 14581 .loc 2 1286 0
+ 14582 d908 C78510E1 movl $0, -7920(%rbp)
+ 14582 FFFF0000
+ 14582 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 14583 .loc 2 1287 0
+ 14584 d912 F30F6F85 movdqu -7920(%rbp), %xmm0
+ 14584 10E1FFFF
+ 14585 .LBE1991:
+ 14586 .LBE1990:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14587 .loc 2 1569 0
+ 14588 d91a 660F7F85 movdqa %xmm0, -8736(%rbp)
+ 14588 E0DDFFFF
+ 14589 d922 660F6F85 movdqa -8736(%rbp), %xmm0
+ 14589 E0DDFFFF
+ 14590 d92a 660FEF85 pxor -5040(%rbp), %xmm0
+ 14590 50ECFFFF
+ 14591 d932 F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 14591 50ECFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 14592 .loc 2 1571 0
+ 14593 d93a F30F6F85 movdqu -5040(%rbp), %xmm0
+ 14593 50ECFFFF
+ 14594 .LBE1985:
+ 14595 .LBE1984:
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(2,0x01); /* k8 : k9 : k10 : k11 */
+ 14596 .loc 2 1926 0
+ 14597 d942 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 14597 C0E9FFFF
+ 14598 d94a F30F6F85 movdqu -5696(%rbp), %xmm0
+ 14598 C0E9FFFF
+ 14599 d952 F30F7F85 movdqu %xmm0, -4960(%rbp)
+ 14599 A0ECFFFF
+ 14600 d95a F30F6F85 movdqu -5664(%rbp), %xmm0
+ 14600 E0E9FFFF
+ 14601 d962 F30F7F85 movdqu %xmm0, -4976(%rbp)
+ 14601 90ECFFFF
+ 14602 .LBB1992:
+ 14603 .LBB1993:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 14604 .loc 2 178 0
+ 14605 d96a F30F6F85 movdqu -4976(%rbp), %xmm0
+ 14605 90ECFFFF
+ 14606 d972 F30F6F8D movdqu -4960(%rbp), %xmm1
+ 14606 A0ECFFFF
+ 14607 d97a 660FEFC1 pxor %xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 459
+
+
+ 14608 .LBE1993:
+ 14609 .LBE1992:
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(2,0x01); /* k8 : k9 : k10 : k11 */
+ 14610 .loc 2 1926 0
+ 14611 d97e F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 14611 C0E9FFFF
+ 14612 d986 488B85D8 movq -8232(%rbp), %rax
+ 14612 DFFFFF
+ 14613 d98d 4883C020 addq $32, %rax
+ 14614 d991 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 14614 C0E9FFFF
+ 14615 d999 F30F7F00 movdqu %xmm0, (%rax)
+ 14616 d99d F30F6F85 movdqu -5696(%rbp), %xmm0
+ 14616 C0E9FFFF
+ 14617 d9a5 F30F7F85 movdqu %xmm0, -4944(%rbp)
+ 14617 B0ECFFFF
+ 14618 .LBB1994:
+ 14619 .LBB1995:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 14620 .loc 2 1656 0
+ 14621 d9ad F30F6F85 movdqu -4944(%rbp), %xmm0
+ 14621 B0ECFFFF
+ 14622 d9b5 F30F7F85 movdqu %xmm0, -7888(%rbp)
+ 14622 30E1FFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 14623 .loc 2 1657 0
+ 14624 d9bd 8B853CE1 movl -7876(%rbp), %eax
+ 14624 FFFF
+ 14625 d9c3 8985C8EC movl %eax, -4920(%rbp)
+ 14625 FFFF
+ 14626 .LBB1996:
+ 14627 .LBB1997:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 14628 .loc 2 740 0
+ 14629 d9c9 8B85C8EC movl -4920(%rbp), %eax
+ 14629 FFFF
+ 14630 d9cf 898520E1 movl %eax, -7904(%rbp)
+ 14630 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 14631 .loc 2 741 0
+ 14632 d9d5 C785CCEC movl $0, -4916(%rbp)
+ 14632 FFFF0000
+ 14632 0000
+ 14633 d9df EB36 jmp .L346
+ 14634 .L347:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 14635 .loc 2 742 0
+ 14636 d9e1 8B8DCCEC movl -4916(%rbp), %ecx
+ 14636 FFFF
+ 14637 d9e7 8B85CCEC movl -4916(%rbp), %eax
+ 14637 FFFF
+ 14638 d9ed 89C0 mov %eax, %eax
+ 14639 d9ef 0FB68405 movzbl -7904(%rbp,%rax), %eax
+ 14639 20E1FFFF
+ 14640 d9f7 0FB6C0 movzbl %al, %eax
+ 14641 d9fa 89C2 mov %eax, %edx
+ 14642 d9fc 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 460
+
+
+ 14642 000000
+ 14643 da03 0FB61402 movzbl (%rdx,%rax), %edx
+ 14644 da07 89C8 mov %ecx, %eax
+ 14645 da09 88940520 movb %dl, -7904(%rbp,%rax)
+ 14645 E1FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 14646 .loc 2 741 0
+ 14647 da10 8385CCEC addl $1, -4916(%rbp)
+ 14647 FFFF01
+ 14648 .L346:
+ 14649 da17 83BDCCEC cmpl $3, -4916(%rbp)
+ 14649 FFFF03
+ 14650 da1e 76C1 jbe .L347
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 14651 .loc 2 743 0
+ 14652 da20 8B8520E1 movl -7904(%rbp), %eax
+ 14652 FFFF
+ 14653 .LBE1997:
+ 14654 .LBE1996:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 14655 .loc 2 1657 0
+ 14656 da26 8985C4EC movl %eax, -4924(%rbp)
+ 14656 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 14657 .loc 2 1659 0
+ 14658 da2c 8B85C4EC movl -4924(%rbp), %eax
+ 14658 FFFF
+ 14659 da32 89853CE1 movl %eax, -7876(%rbp)
+ 14659 FFFF
+ 14660 da38 8B853CE1 movl -7876(%rbp), %eax
+ 14660 FFFF
+ 14661 da3e 898538E1 movl %eax, -7880(%rbp)
+ 14661 FFFF
+ 14662 da44 8B8538E1 movl -7880(%rbp), %eax
+ 14662 FFFF
+ 14663 da4a 898534E1 movl %eax, -7884(%rbp)
+ 14663 FFFF
+ 14664 da50 8B8534E1 movl -7884(%rbp), %eax
+ 14664 FFFF
+ 14665 da56 898530E1 movl %eax, -7888(%rbp)
+ 14665 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 14666 .loc 2 1660 0
+ 14667 da5c F30F6F85 movdqu -7888(%rbp), %xmm0
+ 14667 30E1FFFF
+ 14668 .LBE1995:
+ 14669 .LBE1994:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(3); /* k12 : k13 : k14 : k15 */
+ 14670 .loc 2 1927 0
+ 14671 da64 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 14671 E0E9FFFF
+ 14672 da6c F30F6F85 movdqu -5680(%rbp), %xmm0
+ 14672 D0E9FFFF
+ 14673 da74 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 14673 D0ECFFFF
+ 14674 .LBB1998:
+ 14675 .LBB1999:
+
GAS LISTING /tmp/ccMa7HLZ.s page 461
+
+
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 14676 .loc 2 1565 0
+ 14677 da7c F30F6F85 movdqu -4912(%rbp), %xmm0
+ 14677 D0ECFFFF
+ 14678 da84 660F7F85 movdqa %xmm0, -8720(%rbp)
+ 14678 F0DDFFFF
+ 14679 da8c 660F6F85 movdqa -8720(%rbp), %xmm0
+ 14679 F0DDFFFF
+ 14680 da94 F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 14680 E0ECFFFF
+ 14681 .LBB2000:
+ 14682 .LBB2001:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 14683 .loc 2 1282 0
+ 14684 da9c F30F6F85 movdqu -4896(%rbp), %xmm0
+ 14684 E0ECFFFF
+ 14685 daa4 F30F7F85 movdqu %xmm0, -7872(%rbp)
+ 14685 40E1FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 14686 .loc 2 1283 0
+ 14687 daac 8B8548E1 movl -7864(%rbp), %eax
+ 14687 FFFF
+ 14688 dab2 89854CE1 movl %eax, -7860(%rbp)
+ 14688 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 14689 .loc 2 1284 0
+ 14690 dab8 8B8544E1 movl -7868(%rbp), %eax
+ 14690 FFFF
+ 14691 dabe 898548E1 movl %eax, -7864(%rbp)
+ 14691 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 14692 .loc 2 1285 0
+ 14693 dac4 8B8540E1 movl -7872(%rbp), %eax
+ 14693 FFFF
+ 14694 daca 898544E1 movl %eax, -7868(%rbp)
+ 14694 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 14695 .loc 2 1286 0
+ 14696 dad0 C78540E1 movl $0, -7872(%rbp)
+ 14696 FFFF0000
+ 14696 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 14697 .loc 2 1287 0
+ 14698 dada F30F6F85 movdqu -7872(%rbp), %xmm0
+ 14698 40E1FFFF
+ 14699 .LBE2001:
+ 14700 .LBE2000:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14701 .loc 2 1567 0
+ 14702 dae2 660F7F85 movdqa %xmm0, -8720(%rbp)
+ 14702 F0DDFFFF
+ 14703 daea 660F6F85 movdqa -8720(%rbp), %xmm0
+ 14703 F0DDFFFF
+ 14704 daf2 660FEF85 pxor -4912(%rbp), %xmm0
+ 14704 D0ECFFFF
+ 14705 dafa F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 14705 D0ECFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 462
+
+
+ 14706 db02 660F6F85 movdqa -8720(%rbp), %xmm0
+ 14706 F0DDFFFF
+ 14707 db0a F30F7F85 movdqu %xmm0, -4880(%rbp)
+ 14707 F0ECFFFF
+ 14708 .LBB2002:
+ 14709 .LBB2003:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 14710 .loc 2 1282 0
+ 14711 db12 F30F6F85 movdqu -4880(%rbp), %xmm0
+ 14711 F0ECFFFF
+ 14712 db1a F30F7F85 movdqu %xmm0, -7856(%rbp)
+ 14712 50E1FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 14713 .loc 2 1283 0
+ 14714 db22 8B8558E1 movl -7848(%rbp), %eax
+ 14714 FFFF
+ 14715 db28 89855CE1 movl %eax, -7844(%rbp)
+ 14715 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 14716 .loc 2 1284 0
+ 14717 db2e 8B8554E1 movl -7852(%rbp), %eax
+ 14717 FFFF
+ 14718 db34 898558E1 movl %eax, -7848(%rbp)
+ 14718 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 14719 .loc 2 1285 0
+ 14720 db3a 8B8550E1 movl -7856(%rbp), %eax
+ 14720 FFFF
+ 14721 db40 898554E1 movl %eax, -7852(%rbp)
+ 14721 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 14722 .loc 2 1286 0
+ 14723 db46 C78550E1 movl $0, -7856(%rbp)
+ 14723 FFFF0000
+ 14723 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 14724 .loc 2 1287 0
+ 14725 db50 F30F6F85 movdqu -7856(%rbp), %xmm0
+ 14725 50E1FFFF
+ 14726 .LBE2003:
+ 14727 .LBE2002:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14728 .loc 2 1568 0
+ 14729 db58 660F7F85 movdqa %xmm0, -8720(%rbp)
+ 14729 F0DDFFFF
+ 14730 db60 660F6F85 movdqa -8720(%rbp), %xmm0
+ 14730 F0DDFFFF
+ 14731 db68 660FEF85 pxor -4912(%rbp), %xmm0
+ 14731 D0ECFFFF
+ 14732 db70 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 14732 D0ECFFFF
+ 14733 db78 660F6F85 movdqa -8720(%rbp), %xmm0
+ 14733 F0DDFFFF
+ 14734 db80 F30F7F85 movdqu %xmm0, -4864(%rbp)
+ 14734 00EDFFFF
+ 14735 .LBB2004:
+ 14736 .LBB2005:
+
GAS LISTING /tmp/ccMa7HLZ.s page 463
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 14737 .loc 2 1282 0
+ 14738 db88 F30F6F85 movdqu -4864(%rbp), %xmm0
+ 14738 00EDFFFF
+ 14739 db90 F30F7F85 movdqu %xmm0, -7840(%rbp)
+ 14739 60E1FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 14740 .loc 2 1283 0
+ 14741 db98 8B8568E1 movl -7832(%rbp), %eax
+ 14741 FFFF
+ 14742 db9e 89856CE1 movl %eax, -7828(%rbp)
+ 14742 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 14743 .loc 2 1284 0
+ 14744 dba4 8B8564E1 movl -7836(%rbp), %eax
+ 14744 FFFF
+ 14745 dbaa 898568E1 movl %eax, -7832(%rbp)
+ 14745 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 14746 .loc 2 1285 0
+ 14747 dbb0 8B8560E1 movl -7840(%rbp), %eax
+ 14747 FFFF
+ 14748 dbb6 898564E1 movl %eax, -7836(%rbp)
+ 14748 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 14749 .loc 2 1286 0
+ 14750 dbbc C78560E1 movl $0, -7840(%rbp)
+ 14750 FFFF0000
+ 14750 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 14751 .loc 2 1287 0
+ 14752 dbc6 F30F6F85 movdqu -7840(%rbp), %xmm0
+ 14752 60E1FFFF
+ 14753 .LBE2005:
+ 14754 .LBE2004:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14755 .loc 2 1569 0
+ 14756 dbce 660F7F85 movdqa %xmm0, -8720(%rbp)
+ 14756 F0DDFFFF
+ 14757 dbd6 660F6F85 movdqa -8720(%rbp), %xmm0
+ 14757 F0DDFFFF
+ 14758 dbde 660FEF85 pxor -4912(%rbp), %xmm0
+ 14758 D0ECFFFF
+ 14759 dbe6 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 14759 D0ECFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 14760 .loc 2 1571 0
+ 14761 dbee F30F6F85 movdqu -4912(%rbp), %xmm0
+ 14761 D0ECFFFF
+ 14762 .LBE1999:
+ 14763 .LBE1998:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(3); /* k12 : k13 : k14 : k15 */
+ 14764 .loc 2 1927 0
+ 14765 dbf6 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 14765 D0E9FFFF
+ 14766 dbfe F30F6F85 movdqu -5680(%rbp), %xmm0
+ 14766 D0E9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 464
+
+
+ 14767 dc06 F30F7F85 movdqu %xmm0, -4832(%rbp)
+ 14767 20EDFFFF
+ 14768 dc0e F30F6F85 movdqu -5664(%rbp), %xmm0
+ 14768 E0E9FFFF
+ 14769 dc16 F30F7F85 movdqu %xmm0, -4848(%rbp)
+ 14769 10EDFFFF
+ 14770 .LBB2006:
+ 14771 .LBB2007:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 14772 .loc 2 178 0
+ 14773 dc1e F30F6F85 movdqu -4848(%rbp), %xmm0
+ 14773 10EDFFFF
+ 14774 dc26 F30F6F8D movdqu -4832(%rbp), %xmm1
+ 14774 20EDFFFF
+ 14775 dc2e 660FEFC1 pxor %xmm1, %xmm0
+ 14776 .LBE2007:
+ 14777 .LBE2006:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(3); /* k12 : k13 : k14 : k15 */
+ 14778 .loc 2 1927 0
+ 14779 dc32 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 14779 D0E9FFFF
+ 14780 dc3a 488B85D8 movq -8232(%rbp), %rax
+ 14780 DFFFFF
+ 14781 dc41 4883C030 addq $48, %rax
+ 14782 dc45 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 14782 D0E9FFFF
+ 14783 dc4d F30F7F00 movdqu %xmm0, (%rax)
+ 14784 dc51 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 14784 D0E9FFFF
+ 14785 dc59 F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 14785 40EDFFFF
+ 14786 .LBB2008:
+ 14787 .LBB2009:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 14788 .loc 2 1681 0
+ 14789 dc61 B8020000 movl $2, %eax
+ 14789 00
+ 14790 dc66 660F6F05 movdqa vec_00(%rip), %xmm0
+ 14790 00000000
+ 14791 dc6e F30F7F85 movdqu %xmm0, -4768(%rbp)
+ 14791 60EDFFFF
+ 14792 dc76 89855CED movl %eax, -4772(%rbp)
+ 14792 FFFF
+ 14793 .LBB2010:
+ 14794 .LBB2011:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 14795 .loc 2 522 0
+ 14796 dc7c F30F6F85 movdqu -4768(%rbp), %xmm0
+ 14796 60EDFFFF
+ 14797 dc84 F30F7F85 movdqu %xmm0, -7760(%rbp)
+ 14797 B0E1FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 14798 .loc 2 523 0
+ 14799 dc8c B8030000 movl $3, %eax
+ 14799 00
+ 14800 dc91 4898 cltq
+ 14801 dc93 8B955CED movl -4772(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 465
+
+
+ 14801 FFFF
+ 14802 dc99 899485B0 movl %edx, -7760(%rbp,%rax,4)
+ 14802 E1FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 14803 .loc 2 524 0
+ 14804 dca0 F30F6F85 movdqu -7760(%rbp), %xmm0
+ 14804 B0E1FFFF
+ 14805 dca8 F30F7F85 movdqu %xmm0, -4768(%rbp)
+ 14805 60EDFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 14806 .loc 2 526 0
+ 14807 dcb0 F30F6F85 movdqu -4768(%rbp), %xmm0
+ 14807 60EDFFFF
+ 14808 .LBE2011:
+ 14809 .LBE2010:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 14810 .loc 2 1681 0
+ 14811 dcb8 660F7F85 movdqa %xmm0, -8688(%rbp)
+ 14811 10DEFFFF
+ 14812 dcc0 F30F6F85 movdqu -4800(%rbp), %xmm0
+ 14812 40EDFFFF
+ 14813 dcc8 F30F7F85 movdqu %xmm0, -4752(%rbp)
+ 14813 70EDFFFF
+ 14814 dcd0 F30F6F85 movdqu -4752(%rbp), %xmm0
+ 14814 70EDFFFF
+ 14815 dcd8 F30F7F85 movdqu %xmm0, -4720(%rbp)
+ 14815 90EDFFFF
+ 14816 dce0 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 14816 000000
+ 14817 dce7 48898588 movq %rax, -4728(%rbp)
+ 14817 EDFFFF
+ 14818 .LBB2012:
+ 14819 .LBB2013:
+ 14820 .LBB2014:
+ 14821 .LBB2015:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 14822 .loc 2 851 0
+ 14823 dcee 660F6F05 movdqa vec_00(%rip), %xmm0
+ 14823 00000000
+ 14824 dcf6 F30F7F85 movdqu %xmm0, -4688(%rbp)
+ 14824 B0EDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 14825 .loc 2 854 0
+ 14826 dcfe 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 14826 00000000
+ 14827 dd06 F30F6F8D movdqu -4720(%rbp), %xmm1
+ 14827 90EDFFFF
+ 14828 dd0e F30F7F8D movdqu %xmm1, -4608(%rbp)
+ 14828 00EEFFFF
+ 14829 dd16 F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 14829 F0EDFFFF
+ 14830 .LBB2016:
+ 14831 .LBB2017:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 14832 .loc 2 206 0
+ 14833 dd1e F30F6F85 movdqu -4624(%rbp), %xmm0
+ 14833 F0EDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 466
+
+
+ 14834 dd26 F30F6F8D movdqu -4608(%rbp), %xmm1
+ 14834 00EEFFFF
+ 14835 dd2e 660FDBC1 pand %xmm1, %xmm0
+ 14836 .LBE2017:
+ 14837 .LBE2016:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 14838 .loc 2 854 0
+ 14839 dd32 F30F7F85 movdqu %xmm0, -4640(%rbp)
+ 14839 E0EDFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 14840 .loc 2 862 0
+ 14841 dd3a 660F6F05 movdqa vec_10(%rip), %xmm0
+ 14841 00000000
+ 14842 dd42 F30F6F8D movdqu -4720(%rbp), %xmm1
+ 14842 90EDFFFF
+ 14843 dd4a F30F7F8D movdqu %xmm1, -4576(%rbp)
+ 14843 20EEFFFF
+ 14844 dd52 F30F7F85 movdqu %xmm0, -4592(%rbp)
+ 14844 10EEFFFF
+ 14845 .LBB2018:
+ 14846 .loc 2 2642 0
+ 14847 dd5a 0FB68520 movzbl -4576(%rbp), %eax
+ 14847 EEFFFF
+ 14848 dd61 0FB69510 movzbl -4592(%rbp), %edx
+ 14848 EEFFFF
+ 14849 dd68 0FB6C0 movzbl %al, %eax
+ 14850 dd6b 6689853E movw %ax, -8898(%rbp)
+ 14850 DDFFFF
+ 14851 dd72 0FB7853E movzwl -8898(%rbp), %eax
+ 14851 DDFFFF
+ 14852 dd79 F6F2 divb %dl
+ 14853 dd7b 4189C7 movl %eax, %r15d
+ 14854 dd7e 0FB68521 movzbl -4575(%rbp), %eax
+ 14854 EEFFFF
+ 14855 dd85 0FB69511 movzbl -4591(%rbp), %edx
+ 14855 EEFFFF
+ 14856 dd8c 0FB6C0 movzbl %al, %eax
+ 14857 dd8f 6689853E movw %ax, -8898(%rbp)
+ 14857 DDFFFF
+ 14858 dd96 0FB7853E movzwl -8898(%rbp), %eax
+ 14858 DDFFFF
+ 14859 dd9d F6F2 divb %dl
+ 14860 dd9f 88852FDE movb %al, -8657(%rbp)
+ 14860 FFFF
+ 14861 dda5 0FB68522 movzbl -4574(%rbp), %eax
+ 14861 EEFFFF
+ 14862 ddac 0FB69512 movzbl -4590(%rbp), %edx
+ 14862 EEFFFF
+ 14863 ddb3 0FB6C0 movzbl %al, %eax
+ 14864 ddb6 6689853E movw %ax, -8898(%rbp)
+ 14864 DDFFFF
+ 14865 ddbd 0FB7853E movzwl -8898(%rbp), %eax
+ 14865 DDFFFF
+ 14866 ddc4 F6F2 divb %dl
+ 14867 ddc6 88852EDE movb %al, -8658(%rbp)
+ 14867 FFFF
+ 14868 ddcc 0FB68523 movzbl -4573(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 467
+
+
+ 14868 EEFFFF
+ 14869 ddd3 0FB69513 movzbl -4589(%rbp), %edx
+ 14869 EEFFFF
+ 14870 ddda 0FB6C0 movzbl %al, %eax
+ 14871 dddd 6689853E movw %ax, -8898(%rbp)
+ 14871 DDFFFF
+ 14872 dde4 0FB7853E movzwl -8898(%rbp), %eax
+ 14872 DDFFFF
+ 14873 ddeb F6F2 divb %dl
+ 14874 dded 88852DDE movb %al, -8659(%rbp)
+ 14874 FFFF
+ 14875 ddf3 0FB68524 movzbl -4572(%rbp), %eax
+ 14875 EEFFFF
+ 14876 ddfa 0FB69514 movzbl -4588(%rbp), %edx
+ 14876 EEFFFF
+ 14877 de01 0FB6C0 movzbl %al, %eax
+ 14878 de04 6689853E movw %ax, -8898(%rbp)
+ 14878 DDFFFF
+ 14879 de0b 0FB7853E movzwl -8898(%rbp), %eax
+ 14879 DDFFFF
+ 14880 de12 F6F2 divb %dl
+ 14881 de14 88852CDE movb %al, -8660(%rbp)
+ 14881 FFFF
+ 14882 de1a 0FB68525 movzbl -4571(%rbp), %eax
+ 14882 EEFFFF
+ 14883 de21 0FB69515 movzbl -4587(%rbp), %edx
+ 14883 EEFFFF
+ 14884 de28 0FB6C0 movzbl %al, %eax
+ 14885 de2b 6689853E movw %ax, -8898(%rbp)
+ 14885 DDFFFF
+ 14886 de32 0FB7853E movzwl -8898(%rbp), %eax
+ 14886 DDFFFF
+ 14887 de39 F6F2 divb %dl
+ 14888 de3b 4189C1 movl %eax, %r9d
+ 14889 de3e 0FB68526 movzbl -4570(%rbp), %eax
+ 14889 EEFFFF
+ 14890 de45 0FB69516 movzbl -4586(%rbp), %edx
+ 14890 EEFFFF
+ 14891 de4c 0FB6C0 movzbl %al, %eax
+ 14892 de4f 6689853E movw %ax, -8898(%rbp)
+ 14892 DDFFFF
+ 14893 de56 0FB7853E movzwl -8898(%rbp), %eax
+ 14893 DDFFFF
+ 14894 de5d F6F2 divb %dl
+ 14895 de5f 89C7 movl %eax, %edi
+ 14896 de61 0FB68527 movzbl -4569(%rbp), %eax
+ 14896 EEFFFF
+ 14897 de68 0FB69517 movzbl -4585(%rbp), %edx
+ 14897 EEFFFF
+ 14898 de6f 0FB6C0 movzbl %al, %eax
+ 14899 de72 6689853E movw %ax, -8898(%rbp)
+ 14899 DDFFFF
+ 14900 de79 0FB7853E movzwl -8898(%rbp), %eax
+ 14900 DDFFFF
+ 14901 de80 F6F2 divb %dl
+ 14902 de82 89C3 movl %eax, %ebx
+ 14903 de84 0FB68528 movzbl -4568(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 468
+
+
+ 14903 EEFFFF
+ 14904 de8b 0FB69518 movzbl -4584(%rbp), %edx
+ 14904 EEFFFF
+ 14905 de92 0FB6C0 movzbl %al, %eax
+ 14906 de95 6689853E movw %ax, -8898(%rbp)
+ 14906 DDFFFF
+ 14907 de9c 0FB7853E movzwl -8898(%rbp), %eax
+ 14907 DDFFFF
+ 14908 dea3 F6F2 divb %dl
+ 14909 dea5 4189C2 movl %eax, %r10d
+ 14910 dea8 0FB68529 movzbl -4567(%rbp), %eax
+ 14910 EEFFFF
+ 14911 deaf 0FB69519 movzbl -4583(%rbp), %edx
+ 14911 EEFFFF
+ 14912 deb6 0FB6C0 movzbl %al, %eax
+ 14913 deb9 6689853E movw %ax, -8898(%rbp)
+ 14913 DDFFFF
+ 14914 dec0 0FB7853E movzwl -8898(%rbp), %eax
+ 14914 DDFFFF
+ 14915 dec7 F6F2 divb %dl
+ 14916 dec9 4189C3 movl %eax, %r11d
+ 14917 decc 0FB6852A movzbl -4566(%rbp), %eax
+ 14917 EEFFFF
+ 14918 ded3 0FB6951A movzbl -4582(%rbp), %edx
+ 14918 EEFFFF
+ 14919 deda 0FB6C0 movzbl %al, %eax
+ 14920 dedd 6689853E movw %ax, -8898(%rbp)
+ 14920 DDFFFF
+ 14921 dee4 0FB7853E movzwl -8898(%rbp), %eax
+ 14921 DDFFFF
+ 14922 deeb F6F2 divb %dl
+ 14923 deed 4189C4 movl %eax, %r12d
+ 14924 def0 0FB6852B movzbl -4565(%rbp), %eax
+ 14924 EEFFFF
+ 14925 def7 0FB6951B movzbl -4581(%rbp), %edx
+ 14925 EEFFFF
+ 14926 defe 0FB6C0 movzbl %al, %eax
+ 14927 df01 6689853E movw %ax, -8898(%rbp)
+ 14927 DDFFFF
+ 14928 df08 0FB7853E movzwl -8898(%rbp), %eax
+ 14928 DDFFFF
+ 14929 df0f F6F2 divb %dl
+ 14930 df11 4189C5 movl %eax, %r13d
+ 14931 df14 0FB6852C movzbl -4564(%rbp), %eax
+ 14931 EEFFFF
+ 14932 df1b 0FB6951C movzbl -4580(%rbp), %edx
+ 14932 EEFFFF
+ 14933 df22 0FB6C0 movzbl %al, %eax
+ 14934 df25 6689853E movw %ax, -8898(%rbp)
+ 14934 DDFFFF
+ 14935 df2c 0FB7853E movzwl -8898(%rbp), %eax
+ 14935 DDFFFF
+ 14936 df33 F6F2 divb %dl
+ 14937 df35 4189C6 movl %eax, %r14d
+ 14938 df38 0FB6852D movzbl -4563(%rbp), %eax
+ 14938 EEFFFF
+ 14939 df3f 0FB6951D movzbl -4579(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 469
+
+
+ 14939 EEFFFF
+ 14940 df46 0FB6C0 movzbl %al, %eax
+ 14941 df49 6689853E movw %ax, -8898(%rbp)
+ 14941 DDFFFF
+ 14942 df50 0FB7853E movzwl -8898(%rbp), %eax
+ 14942 DDFFFF
+ 14943 df57 F6F2 divb %dl
+ 14944 df59 4189C0 movl %eax, %r8d
+ 14945 df5c 0FB6852E movzbl -4562(%rbp), %eax
+ 14945 EEFFFF
+ 14946 df63 0FB6951E movzbl -4578(%rbp), %edx
+ 14946 EEFFFF
+ 14947 df6a 0FB6C0 movzbl %al, %eax
+ 14948 df6d 6689853E movw %ax, -8898(%rbp)
+ 14948 DDFFFF
+ 14949 df74 0FB7853E movzwl -8898(%rbp), %eax
+ 14949 DDFFFF
+ 14950 df7b F6F2 divb %dl
+ 14951 df7d 89C6 movl %eax, %esi
+ 14952 df7f 0FB6852F movzbl -4561(%rbp), %eax
+ 14952 EEFFFF
+ 14953 df86 0FB6951F movzbl -4577(%rbp), %edx
+ 14953 EEFFFF
+ 14954 df8d 0FB6C0 movzbl %al, %eax
+ 14955 df90 6689853E movw %ax, -8898(%rbp)
+ 14955 DDFFFF
+ 14956 df97 0FB7853E movzwl -8898(%rbp), %eax
+ 14956 DDFFFF
+ 14957 df9e F6F2 divb %dl
+ 14958 dfa0 89C1 movl %eax, %ecx
+ 14959 .LBB2019:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 14960 .loc 2 346 0
+ 14961 dfa2 0FB6D3 movzbl %bl, %edx
+ 14962 dfa5 400FB6C7 movzbl %dil, %eax
+ 14963 dfa9 48C1E208 salq $8, %rdx
+ 14964 dfad 4809C2 orq %rax, %rdx
+ 14965 dfb0 410FB6C1 movzbl %r9b, %eax
+ 14966 dfb4 48C1E208 salq $8, %rdx
+ 14967 dfb8 4809C2 orq %rax, %rdx
+ 14968 dfbb 0FB6852C movzbl -8660(%rbp), %eax
+ 14968 DEFFFF
+ 14969 dfc2 48C1E208 salq $8, %rdx
+ 14970 dfc6 4809C2 orq %rax, %rdx
+ 14971 dfc9 0FB6852D movzbl -8659(%rbp), %eax
+ 14971 DEFFFF
+ 14972 dfd0 48C1E208 salq $8, %rdx
+ 14973 dfd4 4809C2 orq %rax, %rdx
+ 14974 dfd7 0FB6852E movzbl -8658(%rbp), %eax
+ 14974 DEFFFF
+ 14975 dfde 48C1E208 salq $8, %rdx
+ 14976 dfe2 4809C2 orq %rax, %rdx
+ 14977 dfe5 0FB6852F movzbl -8657(%rbp), %eax
+ 14977 DEFFFF
+ 14978 dfec 48C1E208 salq $8, %rdx
+ 14979 dff0 4809C2 orq %rax, %rdx
+ 14980 dff3 410FB6C7 movzbl %r15b, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 470
+
+
+ 14981 dff7 48C1E208 salq $8, %rdx
+ 14982 dffb 4809C2 orq %rax, %rdx
+ 14983 dffe 0FB6C1 movzbl %cl, %eax
+ 14984 e001 400FB6CE movzbl %sil, %ecx
+ 14985 e005 48C1E008 salq $8, %rax
+ 14986 e009 4809C8 orq %rcx, %rax
+ 14987 e00c 410FB6C8 movzbl %r8b, %ecx
+ 14988 e010 48C1E008 salq $8, %rax
+ 14989 e014 4809C8 orq %rcx, %rax
+ 14990 e017 410FB6CE movzbl %r14b, %ecx
+ 14991 e01b 48C1E008 salq $8, %rax
+ 14992 e01f 4809C8 orq %rcx, %rax
+ 14993 e022 410FB6CD movzbl %r13b, %ecx
+ 14994 e026 48C1E008 salq $8, %rax
+ 14995 e02a 4809C8 orq %rcx, %rax
+ 14996 e02d 410FB6CC movzbl %r12b, %ecx
+ 14997 e031 48C1E008 salq $8, %rax
+ 14998 e035 4809C8 orq %rcx, %rax
+ 14999 e038 410FB6CB movzbl %r11b, %ecx
+ 15000 e03c 48C1E008 salq $8, %rax
+ 15001 e040 4809C8 orq %rcx, %rax
+ 15002 e043 410FB6CA movzbl %r10b, %ecx
+ 15003 e047 48C1E008 salq $8, %rax
+ 15004 e04b 4809C8 orq %rcx, %rax
+ 15005 e04e 48899590 movq %rdx, -8816(%rbp)
+ 15005 DDFFFF
+ 15006 e055 48898598 movq %rax, -8808(%rbp)
+ 15006 DDFFFF
+ 15007 e05c 660F6F85 movdqa -8816(%rbp), %xmm0
+ 15007 90DDFFFF
+ 15008 .LBE2019:
+ 15009 .LBE2018:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 15010 .loc 2 862 0
+ 15011 e064 F30F7F85 movdqu %xmm0, -4656(%rbp)
+ 15011 D0EDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 15012 .loc 2 866 0
+ 15013 e06c C785ACED movl $0, -4692(%rbp)
+ 15013 FFFF0000
+ 15013 0000
+ 15014 e076 E9860200 jmp .L348
+ 15014 00
+ 15015 .L357:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15016 .loc 2 868 0
+ 15017 e07b 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 15017 00000000
+ 15018 e083 F30F7F85 movdqu %xmm0, -4544(%rbp)
+ 15018 40EEFFFF
+ 15019 e08b F30F6F85 movdqu -4656(%rbp), %xmm0
+ 15019 D0EDFFFF
+ 15020 e093 F30F7F85 movdqu %xmm0, -4560(%rbp)
+ 15020 30EEFFFF
+ 15021 .LBB2020:
+ 15022 .LBB2021:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+
GAS LISTING /tmp/ccMa7HLZ.s page 471
+
+
+ 15023 .loc 2 380 0
+ 15024 e09b F30F6F85 movdqu -4544(%rbp), %xmm0
+ 15024 40EEFFFF
+ 15025 e0a3 F30F7F85 movdqu %xmm0, -7728(%rbp)
+ 15025 D0E1FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 15026 .loc 2 381 0
+ 15027 e0ab F30F6F85 movdqu -4560(%rbp), %xmm0
+ 15027 30EEFFFF
+ 15028 e0b3 F30F7F85 movdqu %xmm0, -7744(%rbp)
+ 15028 C0E1FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 15029 .loc 2 383 0
+ 15030 e0bb C7855CEE movl $0, -4516(%rbp)
+ 15030 FFFF0000
+ 15030 0000
+ 15031 e0c5 EB5C jmp .L349
+ 15032 .L352:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 15033 .loc 2 385 0
+ 15034 e0c7 8B855CEE movl -4516(%rbp), %eax
+ 15034 FFFF
+ 15035 e0cd 89C0 mov %eax, %eax
+ 15036 e0cf 0FB68405 movzbl -7744(%rbp,%rax), %eax
+ 15036 C0E1FFFF
+ 15037 e0d7 84C0 testb %al, %al
+ 15038 e0d9 7912 jns .L350
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 15039 .loc 2 386 0
+ 15040 e0db 8B855CEE movl -4516(%rbp), %eax
+ 15040 FFFF
+ 15041 e0e1 89C0 mov %eax, %eax
+ 15042 e0e3 C68405E0 movb $0, -7712(%rbp,%rax)
+ 15042 E1FFFF00
+ 15043 e0eb EB2F jmp .L351
+ 15044 .L350:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 15045 .loc 2 388 0
+ 15046 e0ed 8B8D5CEE movl -4516(%rbp), %ecx
+ 15046 FFFF
+ 15047 e0f3 8B855CEE movl -4516(%rbp), %eax
+ 15047 FFFF
+ 15048 e0f9 89C0 mov %eax, %eax
+ 15049 e0fb 0FB68405 movzbl -7744(%rbp,%rax), %eax
+ 15049 C0E1FFFF
+ 15050 e103 0FB6C0 movzbl %al, %eax
+ 15051 e106 83E00F andl $15, %eax
+ 15052 e109 4898 cltq
+ 15053 e10b 0FB69405 movzbl -7728(%rbp,%rax), %edx
+ 15053 D0E1FFFF
+ 15054 e113 89C8 mov %ecx, %eax
+ 15055 e115 889405E0 movb %dl, -7712(%rbp,%rax)
+ 15055 E1FFFF
+ 15056 .L351:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 15057 .loc 2 383 0
+ 15058 e11c 83855CEE addl $1, -4516(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 472
+
+
+ 15058 FFFF01
+ 15059 .L349:
+ 15060 e123 83BD5CEE cmpl $15, -4516(%rbp)
+ 15060 FFFF0F
+ 15061 e12a 769B jbe .L352
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 15062 .loc 2 391 0
+ 15063 e12c F30F6F85 movdqu -7712(%rbp), %xmm0
+ 15063 E0E1FFFF
+ 15064 .LBE2021:
+ 15065 .LBE2020:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15066 .loc 2 868 0
+ 15067 e134 F30F7F85 movdqu %xmm0, -4672(%rbp)
+ 15067 C0EDFFFF
+ 15068 e13c F30F6F85 movdqu -4640(%rbp), %xmm0
+ 15068 E0EDFFFF
+ 15069 e144 F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 15069 70EEFFFF
+ 15070 e14c F30F6F85 movdqu -4672(%rbp), %xmm0
+ 15070 C0EDFFFF
+ 15071 e154 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 15071 60EEFFFF
+ 15072 .LBB2022:
+ 15073 .LBB2023:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 15074 .loc 2 234 0
+ 15075 e15c F30F6F85 movdqu -4512(%rbp), %xmm0
+ 15075 60EEFFFF
+ 15076 e164 F30F6F8D movdqu -4496(%rbp), %xmm1
+ 15076 70EEFFFF
+ 15077 e16c 660FEBC1 por %xmm1, %xmm0
+ 15078 .LBE2023:
+ 15079 .LBE2022:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 15080 .loc 2 870 0
+ 15081 e170 F30F7F85 movdqu %xmm0, -4672(%rbp)
+ 15081 C0EDFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 15082 .loc 2 872 0
+ 15083 e178 8B85ACED mov -4692(%rbp), %eax
+ 15083 FFFF
+ 15084 e17e 48C1E004 salq $4, %rax
+ 15085 e182 48038588 addq -4728(%rbp), %rax
+ 15085 EDFFFF
+ 15086 e189 660F6F00 movdqa (%rax), %xmm0
+ 15087 e18d F30F7F85 movdqu %xmm0, -4464(%rbp)
+ 15087 90EEFFFF
+ 15088 e195 F30F6F85 movdqu -4672(%rbp), %xmm0
+ 15088 C0EDFFFF
+ 15089 e19d F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 15089 80EEFFFF
+ 15090 .LBB2024:
+ 15091 .LBB2025:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 15092 .loc 2 380 0
+ 15093 e1a5 F30F6F85 movdqu -4464(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 473
+
+
+ 15093 90EEFFFF
+ 15094 e1ad F30F7F85 movdqu %xmm0, -7680(%rbp)
+ 15094 00E2FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 15095 .loc 2 381 0
+ 15096 e1b5 F30F6F85 movdqu -4480(%rbp), %xmm0
+ 15096 80EEFFFF
+ 15097 e1bd F30F7F85 movdqu %xmm0, -7696(%rbp)
+ 15097 F0E1FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 15098 .loc 2 383 0
+ 15099 e1c5 C785ACEE movl $0, -4436(%rbp)
+ 15099 FFFF0000
+ 15099 0000
+ 15100 e1cf EB5C jmp .L353
+ 15101 .L356:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 15102 .loc 2 385 0
+ 15103 e1d1 8B85ACEE movl -4436(%rbp), %eax
+ 15103 FFFF
+ 15104 e1d7 89C0 mov %eax, %eax
+ 15105 e1d9 0FB68405 movzbl -7696(%rbp,%rax), %eax
+ 15105 F0E1FFFF
+ 15106 e1e1 84C0 testb %al, %al
+ 15107 e1e3 7912 jns .L354
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 15108 .loc 2 386 0
+ 15109 e1e5 8B85ACEE movl -4436(%rbp), %eax
+ 15109 FFFF
+ 15110 e1eb 89C0 mov %eax, %eax
+ 15111 e1ed C6840510 movb $0, -7664(%rbp,%rax)
+ 15111 E2FFFF00
+ 15112 e1f5 EB2F jmp .L355
+ 15113 .L354:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 15114 .loc 2 388 0
+ 15115 e1f7 8B8DACEE movl -4436(%rbp), %ecx
+ 15115 FFFF
+ 15116 e1fd 8B85ACEE movl -4436(%rbp), %eax
+ 15116 FFFF
+ 15117 e203 89C0 mov %eax, %eax
+ 15118 e205 0FB68405 movzbl -7696(%rbp,%rax), %eax
+ 15118 F0E1FFFF
+ 15119 e20d 0FB6C0 movzbl %al, %eax
+ 15120 e210 83E00F andl $15, %eax
+ 15121 e213 4898 cltq
+ 15122 e215 0FB69405 movzbl -7680(%rbp,%rax), %edx
+ 15122 00E2FFFF
+ 15123 e21d 89C8 mov %ecx, %eax
+ 15124 e21f 88940510 movb %dl, -7664(%rbp,%rax)
+ 15124 E2FFFF
+ 15125 .L355:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 15126 .loc 2 383 0
+ 15127 e226 8385ACEE addl $1, -4436(%rbp)
+ 15127 FFFF01
+ 15128 .L353:
+
GAS LISTING /tmp/ccMa7HLZ.s page 474
+
+
+ 15129 e22d 83BDACEE cmpl $15, -4436(%rbp)
+ 15129 FFFF0F
+ 15130 e234 769B jbe .L356
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 15131 .loc 2 391 0
+ 15132 e236 F30F6F85 movdqu -7664(%rbp), %xmm0
+ 15132 10E2FFFF
+ 15133 .LBE2025:
+ 15134 .LBE2024:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 15135 .loc 2 872 0
+ 15136 e23e F30F7F85 movdqu %xmm0, -4672(%rbp)
+ 15136 C0EDFFFF
+ 15137 e246 F30F6F85 movdqu -4688(%rbp), %xmm0
+ 15137 B0EDFFFF
+ 15138 e24e F30F7F85 movdqu %xmm0, -4416(%rbp)
+ 15138 C0EEFFFF
+ 15139 e256 F30F6F85 movdqu -4672(%rbp), %xmm0
+ 15139 C0EDFFFF
+ 15140 e25e F30F7F85 movdqu %xmm0, -4432(%rbp)
+ 15140 B0EEFFFF
+ 15141 .LBB2026:
+ 15142 .LBB2027:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 15143 .loc 2 234 0
+ 15144 e266 F30F6F85 movdqu -4432(%rbp), %xmm0
+ 15144 B0EEFFFF
+ 15145 e26e F30F6F8D movdqu -4416(%rbp), %xmm1
+ 15145 C0EEFFFF
+ 15146 e276 660FEBC1 por %xmm1, %xmm0
+ 15147 .LBE2027:
+ 15148 .LBE2026:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 15149 .loc 2 874 0
+ 15150 e27a F30F7F85 movdqu %xmm0, -4688(%rbp)
+ 15150 B0EDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 15151 .loc 2 876 0
+ 15152 e282 660F6F05 movdqa vec_01(%rip), %xmm0
+ 15152 00000000
+ 15153 e28a F30F6F8D movdqu -4656(%rbp), %xmm1
+ 15153 D0EDFFFF
+ 15154 e292 F30F7F8D movdqu %xmm1, -4384(%rbp)
+ 15154 E0EEFFFF
+ 15155 e29a F30F7F85 movdqu %xmm0, -4400(%rbp)
+ 15155 D0EEFFFF
+ 15156 .LBB2028:
+ 15157 .LBB2029:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 15158 .loc 2 290 0
+ 15159 e2a2 F30F6F8D movdqu -4400(%rbp), %xmm1
+ 15159 D0EEFFFF
+ 15160 e2aa F30F6F85 movdqu -4384(%rbp), %xmm0
+ 15160 E0EEFFFF
+ 15161 e2b2 660FF8C1 psubb %xmm1, %xmm0
+ 15162 .LBE2029:
+ 15163 .LBE2028:
+
GAS LISTING /tmp/ccMa7HLZ.s page 475
+
+
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 15164 .loc 2 876 0
+ 15165 e2b6 F30F7F85 movdqu %xmm0, -4656(%rbp)
+ 15165 D0EDFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15166 .loc 2 878 0
+ 15167 e2be 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 15167 00000000
+ 15168 e2c6 F30F6F8D movdqu -4656(%rbp), %xmm1
+ 15168 D0EDFFFF
+ 15169 e2ce F30F7F8D movdqu %xmm1, -4352(%rbp)
+ 15169 00EFFFFF
+ 15170 e2d6 F30F7F85 movdqu %xmm0, -4368(%rbp)
+ 15170 F0EEFFFF
+ 15171 .LBB2030:
+ 15172 .LBB2031:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 15173 .loc 2 206 0
+ 15174 e2de F30F6F85 movdqu -4368(%rbp), %xmm0
+ 15174 F0EEFFFF
+ 15175 e2e6 F30F6F8D movdqu -4352(%rbp), %xmm1
+ 15175 00EFFFFF
+ 15176 e2ee 660FDBC1 pand %xmm1, %xmm0
+ 15177 .LBE2031:
+ 15178 .LBE2030:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15179 .loc 2 878 0
+ 15180 e2f2 F30F7F85 movdqu %xmm0, -4656(%rbp)
+ 15180 D0EDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 15181 .loc 2 866 0
+ 15182 e2fa 8385ACED addl $1, -4692(%rbp)
+ 15182 FFFF01
+ 15183 .L348:
+ 15184 e301 83BDACED cmpl $15, -4692(%rbp)
+ 15184 FFFF0F
+ 15185 e308 0F866DFD jbe .L357
+ 15185 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 15186 .loc 2 882 0
+ 15187 e30e F30F6F85 movdqu -4688(%rbp), %xmm0
+ 15187 B0EDFFFF
+ 15188 .LBE2015:
+ 15189 .LBE2014:
+ 15190 .LBE2013:
+ 15191 .LBE2012:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 15192 .loc 2 1682 0
+ 15193 e316 660F7F85 movdqa %xmm0, -8704(%rbp)
+ 15193 00DEFFFF
+ 15194 .LBB2032:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 15195 .loc 2 1683 0
+ 15196 e31e 660F6F85 movdqa -8704(%rbp), %xmm0
+ 15196 00DEFFFF
+ 15197 e326 F30F7F85 movdqu %xmm0, -7776(%rbp)
+ 15197 A0E1FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 476
+
+
+ 15198 e32e E8000000 call KDbgWriterGet at PLT
+ 15198 00
+ 15199 e333 4885C0 testq %rax, %rax
+ 15200 e336 7479 je .L359
+ 15201 e338 BF010000 movl $1, %edi
+ 15201 00
+ 15202 e33d E8000000 call KDbgCondToFlag at PLT
+ 15202 00
+ 15203 e342 4889C6 movq %rax, %rsi
+ 15204 e345 BF100000 movl $16, %edi
+ 15204 00
+ 15205 e34a E8000000 call KDbgTestModConds at PLT
+ 15205 00
+ 15206 e34f 84C0 testb %al, %al
+ 15207 e351 745E je .L359
+ 15208 e353 8B85ACE1 movl -7764(%rbp), %eax
+ 15208 FFFF
+ 15209 e359 89C7 movl %eax, %edi
+ 15210 e35b E8A01CFF call bswap_32
+ 15210 FF
+ 15211 e360 4189C5 movl %eax, %r13d
+ 15212 e363 8B85A8E1 movl -7768(%rbp), %eax
+ 15212 FFFF
+ 15213 e369 89C7 movl %eax, %edi
+ 15214 e36b E8901CFF call bswap_32
+ 15214 FF
+ 15215 e370 4189C4 movl %eax, %r12d
+ 15216 e373 8B85A4E1 movl -7772(%rbp), %eax
+ 15216 FFFF
+ 15217 e379 89C7 movl %eax, %edi
+ 15218 e37b E8801CFF call bswap_32
+ 15218 FF
+ 15219 e380 89C3 movl %eax, %ebx
+ 15220 e382 8B85A0E1 movl -7776(%rbp), %eax
+ 15220 FFFF
+ 15221 e388 89C7 movl %eax, %edi
+ 15222 e38a E8711CFF call bswap_32
+ 15222 FF
+ 15223 e38f 4589E9 movl %r13d, %r9d
+ 15224 e392 4589E0 movl %r12d, %r8d
+ 15225 e395 89D9 movl %ebx, %ecx
+ 15226 e397 89C2 movl %eax, %edx
+ 15227 e399 488D3500 leaq .LC0(%rip), %rsi
+ 15227 000000
+ 15228 e3a0 488D3D00 leaq .LC1(%rip), %rdi
+ 15228 000000
+ 15229 e3a7 B8000000 movl $0, %eax
+ 15229 00
+ 15230 e3ac E8000000 call KDbgMsg at PLT
+ 15230 00
+ 15231 .L359:
+ 15232 e3b1 660F6F85 movdqa -8704(%rbp), %xmm0
+ 15232 00DEFFFF
+ 15233 e3b9 F30F7F85 movdqu %xmm0, -4336(%rbp)
+ 15233 10EFFFFF
+ 15234 .LBE2032:
+ 15235 .LBB2033:
+
GAS LISTING /tmp/ccMa7HLZ.s page 477
+
+
+ 15236 .LBB2034:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15237 .loc 2 667 0
+ 15238 e3c1 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 15238 00000000
+ 15239 e3c9 F30F6F8D movdqu -4336(%rbp), %xmm1
+ 15239 10EFFFFF
+ 15240 e3d1 F30F7F8D movdqu %xmm1, -4304(%rbp)
+ 15240 30EFFFFF
+ 15241 e3d9 F30F7F85 movdqu %xmm0, -4320(%rbp)
+ 15241 20EFFFFF
+ 15242 .LBB2035:
+ 15243 .LBB2036:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 15244 .loc 2 380 0
+ 15245 e3e1 F30F6F85 movdqu -4304(%rbp), %xmm0
+ 15245 30EFFFFF
+ 15246 e3e9 F30F7F85 movdqu %xmm0, -7632(%rbp)
+ 15246 30E2FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 15247 .loc 2 381 0
+ 15248 e3f1 F30F6F85 movdqu -4320(%rbp), %xmm0
+ 15248 20EFFFFF
+ 15249 e3f9 F30F7F85 movdqu %xmm0, -7648(%rbp)
+ 15249 20E2FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 15250 .loc 2 383 0
+ 15251 e401 C7854CEF movl $0, -4276(%rbp)
+ 15251 FFFF0000
+ 15251 0000
+ 15252 e40b EB5C jmp .L360
+ 15253 .L363:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 15254 .loc 2 385 0
+ 15255 e40d 8B854CEF movl -4276(%rbp), %eax
+ 15255 FFFF
+ 15256 e413 89C0 mov %eax, %eax
+ 15257 e415 0FB68405 movzbl -7648(%rbp,%rax), %eax
+ 15257 20E2FFFF
+ 15258 e41d 84C0 testb %al, %al
+ 15259 e41f 7912 jns .L361
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 15260 .loc 2 386 0
+ 15261 e421 8B854CEF movl -4276(%rbp), %eax
+ 15261 FFFF
+ 15262 e427 89C0 mov %eax, %eax
+ 15263 e429 C6840540 movb $0, -7616(%rbp,%rax)
+ 15263 E2FFFF00
+ 15264 e431 EB2F jmp .L362
+ 15265 .L361:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 15266 .loc 2 388 0
+ 15267 e433 8B8D4CEF movl -4276(%rbp), %ecx
+ 15267 FFFF
+ 15268 e439 8B854CEF movl -4276(%rbp), %eax
+ 15268 FFFF
+ 15269 e43f 89C0 mov %eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 478
+
+
+ 15270 e441 0FB68405 movzbl -7648(%rbp,%rax), %eax
+ 15270 20E2FFFF
+ 15271 e449 0FB6C0 movzbl %al, %eax
+ 15272 e44c 83E00F andl $15, %eax
+ 15273 e44f 4898 cltq
+ 15274 e451 0FB69405 movzbl -7632(%rbp,%rax), %edx
+ 15274 30E2FFFF
+ 15275 e459 89C8 mov %ecx, %eax
+ 15276 e45b 88940540 movb %dl, -7616(%rbp,%rax)
+ 15276 E2FFFF
+ 15277 .L362:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 15278 .loc 2 383 0
+ 15279 e462 83854CEF addl $1, -4276(%rbp)
+ 15279 FFFF01
+ 15280 .L360:
+ 15281 e469 83BD4CEF cmpl $15, -4276(%rbp)
+ 15281 FFFF0F
+ 15282 e470 769B jbe .L363
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 15283 .loc 2 391 0
+ 15284 e472 F30F6F85 movdqu -7616(%rbp), %xmm0
+ 15284 40E2FFFF
+ 15285 .LBE2036:
+ 15286 .LBE2035:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15287 .loc 2 667 0
+ 15288 e47a F30F7F85 movdqu %xmm0, -4336(%rbp)
+ 15288 10EFFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 15289 .loc 2 668 0
+ 15290 e482 F30F6F85 movdqu -4336(%rbp), %xmm0
+ 15290 10EFFFFF
+ 15291 .LBE2034:
+ 15292 .LBE2033:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 15293 .loc 2 1684 0
+ 15294 e48a 660F7F85 movdqa %xmm0, -8704(%rbp)
+ 15294 00DEFFFF
+ 15295 .LBB2037:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 15296 .loc 2 1685 0
+ 15297 e492 660F6F85 movdqa -8704(%rbp), %xmm0
+ 15297 00DEFFFF
+ 15298 e49a F30F7F85 movdqu %xmm0, -7792(%rbp)
+ 15298 90E1FFFF
+ 15299 e4a2 E8000000 call KDbgWriterGet at PLT
+ 15299 00
+ 15300 e4a7 4885C0 testq %rax, %rax
+ 15301 e4aa 7479 je .L365
+ 15302 e4ac BF010000 movl $1, %edi
+ 15302 00
+ 15303 e4b1 E8000000 call KDbgCondToFlag at PLT
+ 15303 00
+ 15304 e4b6 4889C6 movq %rax, %rsi
+ 15305 e4b9 BF100000 movl $16, %edi
+ 15305 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 479
+
+
+ 15306 e4be E8000000 call KDbgTestModConds at PLT
+ 15306 00
+ 15307 e4c3 84C0 testb %al, %al
+ 15308 e4c5 745E je .L365
+ 15309 e4c7 8B859CE1 movl -7780(%rbp), %eax
+ 15309 FFFF
+ 15310 e4cd 89C7 movl %eax, %edi
+ 15311 e4cf E82C1BFF call bswap_32
+ 15311 FF
+ 15312 e4d4 4189C5 movl %eax, %r13d
+ 15313 e4d7 8B8598E1 movl -7784(%rbp), %eax
+ 15313 FFFF
+ 15314 e4dd 89C7 movl %eax, %edi
+ 15315 e4df E81C1BFF call bswap_32
+ 15315 FF
+ 15316 e4e4 4189C4 movl %eax, %r12d
+ 15317 e4e7 8B8594E1 movl -7788(%rbp), %eax
+ 15317 FFFF
+ 15318 e4ed 89C7 movl %eax, %edi
+ 15319 e4ef E80C1BFF call bswap_32
+ 15319 FF
+ 15320 e4f4 89C3 movl %eax, %ebx
+ 15321 e4f6 8B8590E1 movl -7792(%rbp), %eax
+ 15321 FFFF
+ 15322 e4fc 89C7 movl %eax, %edi
+ 15323 e4fe E8FD1AFF call bswap_32
+ 15323 FF
+ 15324 e503 4589E9 movl %r13d, %r9d
+ 15325 e506 4589E0 movl %r12d, %r8d
+ 15326 e509 89D9 movl %ebx, %ecx
+ 15327 e50b 89C2 movl %eax, %edx
+ 15328 e50d 488D3500 leaq .LC2(%rip), %rsi
+ 15328 000000
+ 15329 e514 488D3D00 leaq .LC1(%rip), %rdi
+ 15329 000000
+ 15330 e51b B8000000 movl $0, %eax
+ 15330 00
+ 15331 e520 E8000000 call KDbgMsg at PLT
+ 15331 00
+ 15332 .L365:
+ 15333 e525 660F6F85 movdqa -8704(%rbp), %xmm0
+ 15333 00DEFFFF
+ 15334 e52d F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 15334 60EFFFFF
+ 15335 e535 660F6F85 movdqa -8688(%rbp), %xmm0
+ 15335 10DEFFFF
+ 15336 e53d F30F7F85 movdqu %xmm0, -4272(%rbp)
+ 15336 50EFFFFF
+ 15337 .LBE2037:
+ 15338 .LBB2038:
+ 15339 .LBB2039:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 15340 .loc 2 178 0
+ 15341 e545 F30F6F85 movdqu -4272(%rbp), %xmm0
+ 15341 50EFFFFF
+ 15342 e54d F30F6F8D movdqu -4256(%rbp), %xmm1
+ 15342 60EFFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 480
+
+
+ 15343 e555 660FEFC1 pxor %xmm1, %xmm0
+ 15344 .LBE2039:
+ 15345 .LBE2038:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 15346 .loc 2 1686 0
+ 15347 e559 660F7F85 movdqa %xmm0, -8704(%rbp)
+ 15347 00DEFFFF
+ 15348 .LBB2040:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 15349 .loc 2 1687 0
+ 15350 e561 660F6F85 movdqa -8704(%rbp), %xmm0
+ 15350 00DEFFFF
+ 15351 e569 F30F7F85 movdqu %xmm0, -7808(%rbp)
+ 15351 80E1FFFF
+ 15352 e571 E8000000 call KDbgWriterGet at PLT
+ 15352 00
+ 15353 e576 4885C0 testq %rax, %rax
+ 15354 e579 7479 je .L367
+ 15355 e57b BF010000 movl $1, %edi
+ 15355 00
+ 15356 e580 E8000000 call KDbgCondToFlag at PLT
+ 15356 00
+ 15357 e585 4889C6 movq %rax, %rsi
+ 15358 e588 BF100000 movl $16, %edi
+ 15358 00
+ 15359 e58d E8000000 call KDbgTestModConds at PLT
+ 15359 00
+ 15360 e592 84C0 testb %al, %al
+ 15361 e594 745E je .L367
+ 15362 e596 8B858CE1 movl -7796(%rbp), %eax
+ 15362 FFFF
+ 15363 e59c 89C7 movl %eax, %edi
+ 15364 e59e E85D1AFF call bswap_32
+ 15364 FF
+ 15365 e5a3 4189C5 movl %eax, %r13d
+ 15366 e5a6 8B8588E1 movl -7800(%rbp), %eax
+ 15366 FFFF
+ 15367 e5ac 89C7 movl %eax, %edi
+ 15368 e5ae E84D1AFF call bswap_32
+ 15368 FF
+ 15369 e5b3 4189C4 movl %eax, %r12d
+ 15370 e5b6 8B8584E1 movl -7804(%rbp), %eax
+ 15370 FFFF
+ 15371 e5bc 89C7 movl %eax, %edi
+ 15372 e5be E83D1AFF call bswap_32
+ 15372 FF
+ 15373 e5c3 89C3 movl %eax, %ebx
+ 15374 e5c5 8B8580E1 movl -7808(%rbp), %eax
+ 15374 FFFF
+ 15375 e5cb 89C7 movl %eax, %edi
+ 15376 e5cd E82E1AFF call bswap_32
+ 15376 FF
+ 15377 e5d2 4589E9 movl %r13d, %r9d
+ 15378 e5d5 4589E0 movl %r12d, %r8d
+ 15379 e5d8 89D9 movl %ebx, %ecx
+ 15380 e5da 89C2 movl %eax, %edx
+ 15381 e5dc 488D3500 leaq .LC3(%rip), %rsi
+
GAS LISTING /tmp/ccMa7HLZ.s page 481
+
+
+ 15381 000000
+ 15382 e5e3 488D3D00 leaq .LC1(%rip), %rdi
+ 15382 000000
+ 15383 e5ea B8000000 movl $0, %eax
+ 15383 00
+ 15384 e5ef E8000000 call KDbgMsg at PLT
+ 15384 00
+ 15385 .L367:
+ 15386 e5f4 660F6F85 movdqa -8704(%rbp), %xmm0
+ 15386 00DEFFFF
+ 15387 e5fc F30F7F85 movdqu %xmm0, -4240(%rbp)
+ 15387 70EFFFFF
+ 15388 .LBE2040:
+ 15389 .LBB2041:
+ 15390 .LBB2042:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 15391 .loc 2 1357 0
+ 15392 e604 F30F6F85 movdqu -4240(%rbp), %xmm0
+ 15392 70EFFFFF
+ 15393 e60c F30F7F85 movdqu %xmm0, -7600(%rbp)
+ 15393 50E2FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 15394 .loc 2 1358 0
+ 15395 e614 8B855CE2 movl -7588(%rbp), %eax
+ 15395 FFFF
+ 15396 e61a 898558E2 movl %eax, -7592(%rbp)
+ 15396 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 15397 .loc 2 1359 0
+ 15398 e620 8B855CE2 movl -7588(%rbp), %eax
+ 15398 FFFF
+ 15399 e626 898554E2 movl %eax, -7596(%rbp)
+ 15399 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 15400 .loc 2 1360 0
+ 15401 e62c 8B855CE2 movl -7588(%rbp), %eax
+ 15401 FFFF
+ 15402 e632 898550E2 movl %eax, -7600(%rbp)
+ 15402 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 15403 .loc 2 1361 0
+ 15404 e638 F30F6F85 movdqu -7600(%rbp), %xmm0
+ 15404 50E2FFFF
+ 15405 .LBE2042:
+ 15406 .LBE2041:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 15407 .loc 2 1688 0
+ 15408 e640 660F7F85 movdqa %xmm0, -8704(%rbp)
+ 15408 00DEFFFF
+ 15409 .LBB2043:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 15410 .loc 2 1689 0
+ 15411 e648 660F6F85 movdqa -8704(%rbp), %xmm0
+ 15411 00DEFFFF
+ 15412 e650 F30F7F85 movdqu %xmm0, -7824(%rbp)
+ 15412 70E1FFFF
+ 15413 e658 E8000000 call KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 482
+
+
+ 15413 00
+ 15414 e65d 4885C0 testq %rax, %rax
+ 15415 e660 7479 je .L369
+ 15416 e662 BF010000 movl $1, %edi
+ 15416 00
+ 15417 e667 E8000000 call KDbgCondToFlag at PLT
+ 15417 00
+ 15418 e66c 4889C6 movq %rax, %rsi
+ 15419 e66f BF100000 movl $16, %edi
+ 15419 00
+ 15420 e674 E8000000 call KDbgTestModConds at PLT
+ 15420 00
+ 15421 e679 84C0 testb %al, %al
+ 15422 e67b 745E je .L369
+ 15423 e67d 8B857CE1 movl -7812(%rbp), %eax
+ 15423 FFFF
+ 15424 e683 89C7 movl %eax, %edi
+ 15425 e685 E87619FF call bswap_32
+ 15425 FF
+ 15426 e68a 4189C5 movl %eax, %r13d
+ 15427 e68d 8B8578E1 movl -7816(%rbp), %eax
+ 15427 FFFF
+ 15428 e693 89C7 movl %eax, %edi
+ 15429 e695 E86619FF call bswap_32
+ 15429 FF
+ 15430 e69a 4189C4 movl %eax, %r12d
+ 15431 e69d 8B8574E1 movl -7820(%rbp), %eax
+ 15431 FFFF
+ 15432 e6a3 89C7 movl %eax, %edi
+ 15433 e6a5 E85619FF call bswap_32
+ 15433 FF
+ 15434 e6aa 89C3 movl %eax, %ebx
+ 15435 e6ac 8B8570E1 movl -7824(%rbp), %eax
+ 15435 FFFF
+ 15436 e6b2 89C7 movl %eax, %edi
+ 15437 e6b4 E84719FF call bswap_32
+ 15437 FF
+ 15438 e6b9 4589E9 movl %r13d, %r9d
+ 15439 e6bc 4589E0 movl %r12d, %r8d
+ 15440 e6bf 89D9 movl %ebx, %ecx
+ 15441 e6c1 89C2 movl %eax, %edx
+ 15442 e6c3 488D3500 leaq .LC4(%rip), %rsi
+ 15442 000000
+ 15443 e6ca 488D3D00 leaq .LC1(%rip), %rdi
+ 15443 000000
+ 15444 e6d1 B8000000 movl $0, %eax
+ 15444 00
+ 15445 e6d6 E8000000 call KDbgMsg at PLT
+ 15445 00
+ 15446 .L369:
+ 15447 .LBE2043:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 15448 .loc 2 1690 0
+ 15449 e6db 660F6F85 movdqa -8704(%rbp), %xmm0
+ 15449 00DEFFFF
+ 15450 .LBE2009:
+ 15451 .LBE2008:
+
GAS LISTING /tmp/ccMa7HLZ.s page 483
+
+
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(4,0x02); /* k16 : k17 : k18 : k19 */
+ 15452 .loc 2 1928 0
+ 15453 e6e3 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 15453 E0E9FFFF
+ 15454 e6eb F30F6F85 movdqu -5696(%rbp), %xmm0
+ 15454 C0E9FFFF
+ 15455 e6f3 F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 15455 80EFFFFF
+ 15456 .LBB2044:
+ 15457 .LBB2045:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 15458 .loc 2 1565 0
+ 15459 e6fb F30F6F85 movdqu -4224(%rbp), %xmm0
+ 15459 80EFFFFF
+ 15460 e703 660F7F85 movdqa %xmm0, -8656(%rbp)
+ 15460 30DEFFFF
+ 15461 e70b 660F6F85 movdqa -8656(%rbp), %xmm0
+ 15461 30DEFFFF
+ 15462 e713 F30F7F85 movdqu %xmm0, -4208(%rbp)
+ 15462 90EFFFFF
+ 15463 .LBB2046:
+ 15464 .LBB2047:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 15465 .loc 2 1282 0
+ 15466 e71b F30F6F85 movdqu -4208(%rbp), %xmm0
+ 15466 90EFFFFF
+ 15467 e723 F30F7F85 movdqu %xmm0, -7584(%rbp)
+ 15467 60E2FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 15468 .loc 2 1283 0
+ 15469 e72b 8B8568E2 movl -7576(%rbp), %eax
+ 15469 FFFF
+ 15470 e731 89856CE2 movl %eax, -7572(%rbp)
+ 15470 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 15471 .loc 2 1284 0
+ 15472 e737 8B8564E2 movl -7580(%rbp), %eax
+ 15472 FFFF
+ 15473 e73d 898568E2 movl %eax, -7576(%rbp)
+ 15473 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 15474 .loc 2 1285 0
+ 15475 e743 8B8560E2 movl -7584(%rbp), %eax
+ 15475 FFFF
+ 15476 e749 898564E2 movl %eax, -7580(%rbp)
+ 15476 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 15477 .loc 2 1286 0
+ 15478 e74f C78560E2 movl $0, -7584(%rbp)
+ 15478 FFFF0000
+ 15478 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 15479 .loc 2 1287 0
+ 15480 e759 F30F6F85 movdqu -7584(%rbp), %xmm0
+ 15480 60E2FFFF
+ 15481 .LBE2047:
+ 15482 .LBE2046:
+
GAS LISTING /tmp/ccMa7HLZ.s page 484
+
+
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15483 .loc 2 1567 0
+ 15484 e761 660F7F85 movdqa %xmm0, -8656(%rbp)
+ 15484 30DEFFFF
+ 15485 e769 660F6F85 movdqa -8656(%rbp), %xmm0
+ 15485 30DEFFFF
+ 15486 e771 660FEF85 pxor -4224(%rbp), %xmm0
+ 15486 80EFFFFF
+ 15487 e779 F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 15487 80EFFFFF
+ 15488 e781 660F6F85 movdqa -8656(%rbp), %xmm0
+ 15488 30DEFFFF
+ 15489 e789 F30F7F85 movdqu %xmm0, -4192(%rbp)
+ 15489 A0EFFFFF
+ 15490 .LBB2048:
+ 15491 .LBB2049:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 15492 .loc 2 1282 0
+ 15493 e791 F30F6F85 movdqu -4192(%rbp), %xmm0
+ 15493 A0EFFFFF
+ 15494 e799 F30F7F85 movdqu %xmm0, -7568(%rbp)
+ 15494 70E2FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 15495 .loc 2 1283 0
+ 15496 e7a1 8B8578E2 movl -7560(%rbp), %eax
+ 15496 FFFF
+ 15497 e7a7 89857CE2 movl %eax, -7556(%rbp)
+ 15497 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 15498 .loc 2 1284 0
+ 15499 e7ad 8B8574E2 movl -7564(%rbp), %eax
+ 15499 FFFF
+ 15500 e7b3 898578E2 movl %eax, -7560(%rbp)
+ 15500 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 15501 .loc 2 1285 0
+ 15502 e7b9 8B8570E2 movl -7568(%rbp), %eax
+ 15502 FFFF
+ 15503 e7bf 898574E2 movl %eax, -7564(%rbp)
+ 15503 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 15504 .loc 2 1286 0
+ 15505 e7c5 C78570E2 movl $0, -7568(%rbp)
+ 15505 FFFF0000
+ 15505 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 15506 .loc 2 1287 0
+ 15507 e7cf F30F6F85 movdqu -7568(%rbp), %xmm0
+ 15507 70E2FFFF
+ 15508 .LBE2049:
+ 15509 .LBE2048:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15510 .loc 2 1568 0
+ 15511 e7d7 660F7F85 movdqa %xmm0, -8656(%rbp)
+ 15511 30DEFFFF
+ 15512 e7df 660F6F85 movdqa -8656(%rbp), %xmm0
+ 15512 30DEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 485
+
+
+ 15513 e7e7 660FEF85 pxor -4224(%rbp), %xmm0
+ 15513 80EFFFFF
+ 15514 e7ef F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 15514 80EFFFFF
+ 15515 e7f7 660F6F85 movdqa -8656(%rbp), %xmm0
+ 15515 30DEFFFF
+ 15516 e7ff F30F7F85 movdqu %xmm0, -4176(%rbp)
+ 15516 B0EFFFFF
+ 15517 .LBB2050:
+ 15518 .LBB2051:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 15519 .loc 2 1282 0
+ 15520 e807 F30F6F85 movdqu -4176(%rbp), %xmm0
+ 15520 B0EFFFFF
+ 15521 e80f F30F7F85 movdqu %xmm0, -7552(%rbp)
+ 15521 80E2FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 15522 .loc 2 1283 0
+ 15523 e817 8B8588E2 movl -7544(%rbp), %eax
+ 15523 FFFF
+ 15524 e81d 89858CE2 movl %eax, -7540(%rbp)
+ 15524 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 15525 .loc 2 1284 0
+ 15526 e823 8B8584E2 movl -7548(%rbp), %eax
+ 15526 FFFF
+ 15527 e829 898588E2 movl %eax, -7544(%rbp)
+ 15527 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 15528 .loc 2 1285 0
+ 15529 e82f 8B8580E2 movl -7552(%rbp), %eax
+ 15529 FFFF
+ 15530 e835 898584E2 movl %eax, -7548(%rbp)
+ 15530 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 15531 .loc 2 1286 0
+ 15532 e83b C78580E2 movl $0, -7552(%rbp)
+ 15532 FFFF0000
+ 15532 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 15533 .loc 2 1287 0
+ 15534 e845 F30F6F85 movdqu -7552(%rbp), %xmm0
+ 15534 80E2FFFF
+ 15535 .LBE2051:
+ 15536 .LBE2050:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15537 .loc 2 1569 0
+ 15538 e84d 660F7F85 movdqa %xmm0, -8656(%rbp)
+ 15538 30DEFFFF
+ 15539 e855 660F6F85 movdqa -8656(%rbp), %xmm0
+ 15539 30DEFFFF
+ 15540 e85d 660FEF85 pxor -4224(%rbp), %xmm0
+ 15540 80EFFFFF
+ 15541 e865 F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 15541 80EFFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 15542 .loc 2 1571 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 486
+
+
+ 15543 e86d F30F6F85 movdqu -4224(%rbp), %xmm0
+ 15543 80EFFFFF
+ 15544 .LBE2045:
+ 15545 .LBE2044:
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(4,0x02); /* k16 : k17 : k18 : k19 */
+ 15546 .loc 2 1928 0
+ 15547 e875 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 15547 C0E9FFFF
+ 15548 e87d F30F6F85 movdqu -5696(%rbp), %xmm0
+ 15548 C0E9FFFF
+ 15549 e885 F30F7F85 movdqu %xmm0, -4144(%rbp)
+ 15549 D0EFFFFF
+ 15550 e88d F30F6F85 movdqu -5664(%rbp), %xmm0
+ 15550 E0E9FFFF
+ 15551 e895 F30F7F85 movdqu %xmm0, -4160(%rbp)
+ 15551 C0EFFFFF
+ 15552 .LBB2052:
+ 15553 .LBB2053:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 15554 .loc 2 178 0
+ 15555 e89d F30F6F85 movdqu -4160(%rbp), %xmm0
+ 15555 C0EFFFFF
+ 15556 e8a5 F30F6F8D movdqu -4144(%rbp), %xmm1
+ 15556 D0EFFFFF
+ 15557 e8ad 660FEFC1 pxor %xmm1, %xmm0
+ 15558 .LBE2053:
+ 15559 .LBE2052:
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(4,0x02); /* k16 : k17 : k18 : k19 */
+ 15560 .loc 2 1928 0
+ 15561 e8b1 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 15561 C0E9FFFF
+ 15562 e8b9 488B85D8 movq -8232(%rbp), %rax
+ 15562 DFFFFF
+ 15563 e8c0 4883C040 addq $64, %rax
+ 15564 e8c4 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 15564 C0E9FFFF
+ 15565 e8cc F30F7F00 movdqu %xmm0, (%rax)
+ 15566 e8d0 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 15566 C0E9FFFF
+ 15567 e8d8 F30F7F85 movdqu %xmm0, -4128(%rbp)
+ 15567 E0EFFFFF
+ 15568 .LBB2054:
+ 15569 .LBB2055:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 15570 .loc 2 1656 0
+ 15571 e8e0 F30F6F85 movdqu -4128(%rbp), %xmm0
+ 15571 E0EFFFFF
+ 15572 e8e8 F30F7F85 movdqu %xmm0, -7520(%rbp)
+ 15572 A0E2FFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 15573 .loc 2 1657 0
+ 15574 e8f0 8B85ACE2 movl -7508(%rbp), %eax
+ 15574 FFFF
+ 15575 e8f6 8985F8EF movl %eax, -4104(%rbp)
+ 15575 FFFF
+ 15576 .LBB2056:
+ 15577 .LBB2057:
+
GAS LISTING /tmp/ccMa7HLZ.s page 487
+
+
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 15578 .loc 2 740 0
+ 15579 e8fc 8B85F8EF movl -4104(%rbp), %eax
+ 15579 FFFF
+ 15580 e902 898590E2 movl %eax, -7536(%rbp)
+ 15580 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 15581 .loc 2 741 0
+ 15582 e908 C785FCEF movl $0, -4100(%rbp)
+ 15582 FFFF0000
+ 15582 0000
+ 15583 e912 EB36 jmp .L370
+ 15584 .L371:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 15585 .loc 2 742 0
+ 15586 e914 8B8DFCEF movl -4100(%rbp), %ecx
+ 15586 FFFF
+ 15587 e91a 8B85FCEF movl -4100(%rbp), %eax
+ 15587 FFFF
+ 15588 e920 89C0 mov %eax, %eax
+ 15589 e922 0FB68405 movzbl -7536(%rbp,%rax), %eax
+ 15589 90E2FFFF
+ 15590 e92a 0FB6C0 movzbl %al, %eax
+ 15591 e92d 89C2 mov %eax, %edx
+ 15592 e92f 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 15592 000000
+ 15593 e936 0FB61402 movzbl (%rdx,%rax), %edx
+ 15594 e93a 89C8 mov %ecx, %eax
+ 15595 e93c 88940590 movb %dl, -7536(%rbp,%rax)
+ 15595 E2FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 15596 .loc 2 741 0
+ 15597 e943 8385FCEF addl $1, -4100(%rbp)
+ 15597 FFFF01
+ 15598 .L370:
+ 15599 e94a 83BDFCEF cmpl $3, -4100(%rbp)
+ 15599 FFFF03
+ 15600 e951 76C1 jbe .L371
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 15601 .loc 2 743 0
+ 15602 e953 8B8590E2 movl -7536(%rbp), %eax
+ 15602 FFFF
+ 15603 .LBE2057:
+ 15604 .LBE2056:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 15605 .loc 2 1657 0
+ 15606 e959 8985F4EF movl %eax, -4108(%rbp)
+ 15606 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 15607 .loc 2 1659 0
+ 15608 e95f 8B85F4EF movl -4108(%rbp), %eax
+ 15608 FFFF
+ 15609 e965 8985ACE2 movl %eax, -7508(%rbp)
+ 15609 FFFF
+ 15610 e96b 8B85ACE2 movl -7508(%rbp), %eax
+ 15610 FFFF
+ 15611 e971 8985A8E2 movl %eax, -7512(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 488
+
+
+ 15611 FFFF
+ 15612 e977 8B85A8E2 movl -7512(%rbp), %eax
+ 15612 FFFF
+ 15613 e97d 8985A4E2 movl %eax, -7516(%rbp)
+ 15613 FFFF
+ 15614 e983 8B85A4E2 movl -7516(%rbp), %eax
+ 15614 FFFF
+ 15615 e989 8985A0E2 movl %eax, -7520(%rbp)
+ 15615 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 15616 .loc 2 1660 0
+ 15617 e98f F30F6F85 movdqu -7520(%rbp), %xmm0
+ 15617 A0E2FFFF
+ 15618 .LBE2055:
+ 15619 .LBE2054:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(5); /* k20 : k21 : k22 : k23 */
+ 15620 .loc 2 1929 0
+ 15621 e997 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 15621 E0E9FFFF
+ 15622 e99f F30F6F85 movdqu -5680(%rbp), %xmm0
+ 15622 D0E9FFFF
+ 15623 e9a7 F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 15623 00F0FFFF
+ 15624 .LBB2058:
+ 15625 .LBB2059:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 15626 .loc 2 1565 0
+ 15627 e9af F30F6F85 movdqu -4096(%rbp), %xmm0
+ 15627 00F0FFFF
+ 15628 e9b7 660F7F85 movdqa %xmm0, -8640(%rbp)
+ 15628 40DEFFFF
+ 15629 e9bf 660F6F85 movdqa -8640(%rbp), %xmm0
+ 15629 40DEFFFF
+ 15630 e9c7 F30F7F85 movdqu %xmm0, -4080(%rbp)
+ 15630 10F0FFFF
+ 15631 .LBB2060:
+ 15632 .LBB2061:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 15633 .loc 2 1282 0
+ 15634 e9cf F30F6F85 movdqu -4080(%rbp), %xmm0
+ 15634 10F0FFFF
+ 15635 e9d7 F30F7F85 movdqu %xmm0, -7504(%rbp)
+ 15635 B0E2FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 15636 .loc 2 1283 0
+ 15637 e9df 8B85B8E2 movl -7496(%rbp), %eax
+ 15637 FFFF
+ 15638 e9e5 8985BCE2 movl %eax, -7492(%rbp)
+ 15638 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 15639 .loc 2 1284 0
+ 15640 e9eb 8B85B4E2 movl -7500(%rbp), %eax
+ 15640 FFFF
+ 15641 e9f1 8985B8E2 movl %eax, -7496(%rbp)
+ 15641 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 15642 .loc 2 1285 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 489
+
+
+ 15643 e9f7 8B85B0E2 movl -7504(%rbp), %eax
+ 15643 FFFF
+ 15644 e9fd 8985B4E2 movl %eax, -7500(%rbp)
+ 15644 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 15645 .loc 2 1286 0
+ 15646 ea03 C785B0E2 movl $0, -7504(%rbp)
+ 15646 FFFF0000
+ 15646 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 15647 .loc 2 1287 0
+ 15648 ea0d F30F6F85 movdqu -7504(%rbp), %xmm0
+ 15648 B0E2FFFF
+ 15649 .LBE2061:
+ 15650 .LBE2060:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15651 .loc 2 1567 0
+ 15652 ea15 660F7F85 movdqa %xmm0, -8640(%rbp)
+ 15652 40DEFFFF
+ 15653 ea1d 660F6F85 movdqa -8640(%rbp), %xmm0
+ 15653 40DEFFFF
+ 15654 ea25 660FEF85 pxor -4096(%rbp), %xmm0
+ 15654 00F0FFFF
+ 15655 ea2d F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 15655 00F0FFFF
+ 15656 ea35 660F6F85 movdqa -8640(%rbp), %xmm0
+ 15656 40DEFFFF
+ 15657 ea3d F30F7F85 movdqu %xmm0, -4064(%rbp)
+ 15657 20F0FFFF
+ 15658 .LBB2062:
+ 15659 .LBB2063:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 15660 .loc 2 1282 0
+ 15661 ea45 F30F6F85 movdqu -4064(%rbp), %xmm0
+ 15661 20F0FFFF
+ 15662 ea4d F30F7F85 movdqu %xmm0, -7488(%rbp)
+ 15662 C0E2FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 15663 .loc 2 1283 0
+ 15664 ea55 8B85C8E2 movl -7480(%rbp), %eax
+ 15664 FFFF
+ 15665 ea5b 8985CCE2 movl %eax, -7476(%rbp)
+ 15665 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 15666 .loc 2 1284 0
+ 15667 ea61 8B85C4E2 movl -7484(%rbp), %eax
+ 15667 FFFF
+ 15668 ea67 8985C8E2 movl %eax, -7480(%rbp)
+ 15668 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 15669 .loc 2 1285 0
+ 15670 ea6d 8B85C0E2 movl -7488(%rbp), %eax
+ 15670 FFFF
+ 15671 ea73 8985C4E2 movl %eax, -7484(%rbp)
+ 15671 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 15672 .loc 2 1286 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 490
+
+
+ 15673 ea79 C785C0E2 movl $0, -7488(%rbp)
+ 15673 FFFF0000
+ 15673 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 15674 .loc 2 1287 0
+ 15675 ea83 F30F6F85 movdqu -7488(%rbp), %xmm0
+ 15675 C0E2FFFF
+ 15676 .LBE2063:
+ 15677 .LBE2062:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15678 .loc 2 1568 0
+ 15679 ea8b 660F7F85 movdqa %xmm0, -8640(%rbp)
+ 15679 40DEFFFF
+ 15680 ea93 660F6F85 movdqa -8640(%rbp), %xmm0
+ 15680 40DEFFFF
+ 15681 ea9b 660FEF85 pxor -4096(%rbp), %xmm0
+ 15681 00F0FFFF
+ 15682 eaa3 F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 15682 00F0FFFF
+ 15683 eaab 660F6F85 movdqa -8640(%rbp), %xmm0
+ 15683 40DEFFFF
+ 15684 eab3 F30F7F85 movdqu %xmm0, -4048(%rbp)
+ 15684 30F0FFFF
+ 15685 .LBB2064:
+ 15686 .LBB2065:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 15687 .loc 2 1282 0
+ 15688 eabb F30F6F85 movdqu -4048(%rbp), %xmm0
+ 15688 30F0FFFF
+ 15689 eac3 F30F7F85 movdqu %xmm0, -7472(%rbp)
+ 15689 D0E2FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 15690 .loc 2 1283 0
+ 15691 eacb 8B85D8E2 movl -7464(%rbp), %eax
+ 15691 FFFF
+ 15692 ead1 8985DCE2 movl %eax, -7460(%rbp)
+ 15692 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 15693 .loc 2 1284 0
+ 15694 ead7 8B85D4E2 movl -7468(%rbp), %eax
+ 15694 FFFF
+ 15695 eadd 8985D8E2 movl %eax, -7464(%rbp)
+ 15695 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 15696 .loc 2 1285 0
+ 15697 eae3 8B85D0E2 movl -7472(%rbp), %eax
+ 15697 FFFF
+ 15698 eae9 8985D4E2 movl %eax, -7468(%rbp)
+ 15698 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 15699 .loc 2 1286 0
+ 15700 eaef C785D0E2 movl $0, -7472(%rbp)
+ 15700 FFFF0000
+ 15700 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 15701 .loc 2 1287 0
+ 15702 eaf9 F30F6F85 movdqu -7472(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 491
+
+
+ 15702 D0E2FFFF
+ 15703 .LBE2065:
+ 15704 .LBE2064:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15705 .loc 2 1569 0
+ 15706 eb01 660F7F85 movdqa %xmm0, -8640(%rbp)
+ 15706 40DEFFFF
+ 15707 eb09 660F6F85 movdqa -8640(%rbp), %xmm0
+ 15707 40DEFFFF
+ 15708 eb11 660FEF85 pxor -4096(%rbp), %xmm0
+ 15708 00F0FFFF
+ 15709 eb19 F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 15709 00F0FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 15710 .loc 2 1571 0
+ 15711 eb21 F30F6F85 movdqu -4096(%rbp), %xmm0
+ 15711 00F0FFFF
+ 15712 .LBE2059:
+ 15713 .LBE2058:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(5); /* k20 : k21 : k22 : k23 */
+ 15714 .loc 2 1929 0
+ 15715 eb29 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 15715 D0E9FFFF
+ 15716 eb31 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 15716 D0E9FFFF
+ 15717 eb39 F30F7F85 movdqu %xmm0, -4016(%rbp)
+ 15717 50F0FFFF
+ 15718 eb41 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 15718 E0E9FFFF
+ 15719 eb49 F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 15719 40F0FFFF
+ 15720 .LBB2066:
+ 15721 .LBB2067:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 15722 .loc 2 178 0
+ 15723 eb51 F30F6F85 movdqu -4032(%rbp), %xmm0
+ 15723 40F0FFFF
+ 15724 eb59 F30F6F8D movdqu -4016(%rbp), %xmm1
+ 15724 50F0FFFF
+ 15725 eb61 660FEFC1 pxor %xmm1, %xmm0
+ 15726 .LBE2067:
+ 15727 .LBE2066:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(5); /* k20 : k21 : k22 : k23 */
+ 15728 .loc 2 1929 0
+ 15729 eb65 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 15729 D0E9FFFF
+ 15730 eb6d 488B85D8 movq -8232(%rbp), %rax
+ 15730 DFFFFF
+ 15731 eb74 4883C050 addq $80, %rax
+ 15732 eb78 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 15732 D0E9FFFF
+ 15733 eb80 F30F7F00 movdqu %xmm0, (%rax)
+ 15734 eb84 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 15734 D0E9FFFF
+ 15735 eb8c F30F7F85 movdqu %xmm0, -3984(%rbp)
+ 15735 70F0FFFF
+ 15736 .LBB2068:
+
GAS LISTING /tmp/ccMa7HLZ.s page 492
+
+
+ 15737 .LBB2069:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 15738 .loc 2 1681 0
+ 15739 eb94 B8040000 movl $4, %eax
+ 15739 00
+ 15740 eb99 660F6F05 movdqa vec_00(%rip), %xmm0
+ 15740 00000000
+ 15741 eba1 F30F7F85 movdqu %xmm0, -3952(%rbp)
+ 15741 90F0FFFF
+ 15742 eba9 89858CF0 movl %eax, -3956(%rbp)
+ 15742 FFFF
+ 15743 .LBB2070:
+ 15744 .LBB2071:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 15745 .loc 2 522 0
+ 15746 ebaf F30F6F85 movdqu -3952(%rbp), %xmm0
+ 15746 90F0FFFF
+ 15747 ebb7 F30F7F85 movdqu %xmm0, -7392(%rbp)
+ 15747 20E3FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 15748 .loc 2 523 0
+ 15749 ebbf B8030000 movl $3, %eax
+ 15749 00
+ 15750 ebc4 4898 cltq
+ 15751 ebc6 8B958CF0 movl -3956(%rbp), %edx
+ 15751 FFFF
+ 15752 ebcc 89948520 movl %edx, -7392(%rbp,%rax,4)
+ 15752 E3FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 15753 .loc 2 524 0
+ 15754 ebd3 F30F6F85 movdqu -7392(%rbp), %xmm0
+ 15754 20E3FFFF
+ 15755 ebdb F30F7F85 movdqu %xmm0, -3952(%rbp)
+ 15755 90F0FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 15756 .loc 2 526 0
+ 15757 ebe3 F30F6F85 movdqu -3952(%rbp), %xmm0
+ 15757 90F0FFFF
+ 15758 .LBE2071:
+ 15759 .LBE2070:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 15760 .loc 2 1681 0
+ 15761 ebeb 660F7F85 movdqa %xmm0, -8608(%rbp)
+ 15761 60DEFFFF
+ 15762 ebf3 F30F6F85 movdqu -3984(%rbp), %xmm0
+ 15762 70F0FFFF
+ 15763 ebfb F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 15763 A0F0FFFF
+ 15764 ec03 F30F6F85 movdqu -3936(%rbp), %xmm0
+ 15764 A0F0FFFF
+ 15765 ec0b F30F7F85 movdqu %xmm0, -3904(%rbp)
+ 15765 C0F0FFFF
+ 15766 ec13 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 15766 000000
+ 15767 ec1a 488985B8 movq %rax, -3912(%rbp)
+ 15767 F0FFFF
+ 15768 .LBB2072:
+
GAS LISTING /tmp/ccMa7HLZ.s page 493
+
+
+ 15769 .LBB2073:
+ 15770 .LBB2074:
+ 15771 .LBB2075:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 15772 .loc 2 851 0
+ 15773 ec21 660F6F05 movdqa vec_00(%rip), %xmm0
+ 15773 00000000
+ 15774 ec29 F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 15774 E0F0FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 15775 .loc 2 854 0
+ 15776 ec31 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 15776 00000000
+ 15777 ec39 F30F6F8D movdqu -3904(%rbp), %xmm1
+ 15777 C0F0FFFF
+ 15778 ec41 F30F7F8D movdqu %xmm1, -3792(%rbp)
+ 15778 30F1FFFF
+ 15779 ec49 F30F7F85 movdqu %xmm0, -3808(%rbp)
+ 15779 20F1FFFF
+ 15780 .LBB2076:
+ 15781 .LBB2077:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 15782 .loc 2 206 0
+ 15783 ec51 F30F6F85 movdqu -3808(%rbp), %xmm0
+ 15783 20F1FFFF
+ 15784 ec59 F30F6F8D movdqu -3792(%rbp), %xmm1
+ 15784 30F1FFFF
+ 15785 ec61 660FDBC1 pand %xmm1, %xmm0
+ 15786 .LBE2077:
+ 15787 .LBE2076:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 15788 .loc 2 854 0
+ 15789 ec65 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 15789 10F1FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 15790 .loc 2 862 0
+ 15791 ec6d 660F6F05 movdqa vec_10(%rip), %xmm0
+ 15791 00000000
+ 15792 ec75 F30F6F8D movdqu -3904(%rbp), %xmm1
+ 15792 C0F0FFFF
+ 15793 ec7d F30F7F8D movdqu %xmm1, -3760(%rbp)
+ 15793 50F1FFFF
+ 15794 ec85 F30F7F85 movdqu %xmm0, -3776(%rbp)
+ 15794 40F1FFFF
+ 15795 .LBB2078:
+ 15796 .loc 2 2642 0
+ 15797 ec8d 0FB68550 movzbl -3760(%rbp), %eax
+ 15797 F1FFFF
+ 15798 ec94 0FB69540 movzbl -3776(%rbp), %edx
+ 15798 F1FFFF
+ 15799 ec9b 0FB6C0 movzbl %al, %eax
+ 15800 ec9e 6689853E movw %ax, -8898(%rbp)
+ 15800 DDFFFF
+ 15801 eca5 0FB7853E movzwl -8898(%rbp), %eax
+ 15801 DDFFFF
+ 15802 ecac F6F2 divb %dl
+ 15803 ecae 4189C7 movl %eax, %r15d
+
GAS LISTING /tmp/ccMa7HLZ.s page 494
+
+
+ 15804 ecb1 0FB68551 movzbl -3759(%rbp), %eax
+ 15804 F1FFFF
+ 15805 ecb8 0FB69541 movzbl -3775(%rbp), %edx
+ 15805 F1FFFF
+ 15806 ecbf 0FB6C0 movzbl %al, %eax
+ 15807 ecc2 6689853E movw %ax, -8898(%rbp)
+ 15807 DDFFFF
+ 15808 ecc9 0FB7853E movzwl -8898(%rbp), %eax
+ 15808 DDFFFF
+ 15809 ecd0 F6F2 divb %dl
+ 15810 ecd2 88857FDE movb %al, -8577(%rbp)
+ 15810 FFFF
+ 15811 ecd8 0FB68552 movzbl -3758(%rbp), %eax
+ 15811 F1FFFF
+ 15812 ecdf 0FB69542 movzbl -3774(%rbp), %edx
+ 15812 F1FFFF
+ 15813 ece6 0FB6C0 movzbl %al, %eax
+ 15814 ece9 6689853E movw %ax, -8898(%rbp)
+ 15814 DDFFFF
+ 15815 ecf0 0FB7853E movzwl -8898(%rbp), %eax
+ 15815 DDFFFF
+ 15816 ecf7 F6F2 divb %dl
+ 15817 ecf9 88857EDE movb %al, -8578(%rbp)
+ 15817 FFFF
+ 15818 ecff 0FB68553 movzbl -3757(%rbp), %eax
+ 15818 F1FFFF
+ 15819 ed06 0FB69543 movzbl -3773(%rbp), %edx
+ 15819 F1FFFF
+ 15820 ed0d 0FB6C0 movzbl %al, %eax
+ 15821 ed10 6689853E movw %ax, -8898(%rbp)
+ 15821 DDFFFF
+ 15822 ed17 0FB7853E movzwl -8898(%rbp), %eax
+ 15822 DDFFFF
+ 15823 ed1e F6F2 divb %dl
+ 15824 ed20 88857DDE movb %al, -8579(%rbp)
+ 15824 FFFF
+ 15825 ed26 0FB68554 movzbl -3756(%rbp), %eax
+ 15825 F1FFFF
+ 15826 ed2d 0FB69544 movzbl -3772(%rbp), %edx
+ 15826 F1FFFF
+ 15827 ed34 0FB6C0 movzbl %al, %eax
+ 15828 ed37 6689853E movw %ax, -8898(%rbp)
+ 15828 DDFFFF
+ 15829 ed3e 0FB7853E movzwl -8898(%rbp), %eax
+ 15829 DDFFFF
+ 15830 ed45 F6F2 divb %dl
+ 15831 ed47 88857CDE movb %al, -8580(%rbp)
+ 15831 FFFF
+ 15832 ed4d 0FB68555 movzbl -3755(%rbp), %eax
+ 15832 F1FFFF
+ 15833 ed54 0FB69545 movzbl -3771(%rbp), %edx
+ 15833 F1FFFF
+ 15834 ed5b 0FB6C0 movzbl %al, %eax
+ 15835 ed5e 6689853E movw %ax, -8898(%rbp)
+ 15835 DDFFFF
+ 15836 ed65 0FB7853E movzwl -8898(%rbp), %eax
+ 15836 DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 495
+
+
+ 15837 ed6c F6F2 divb %dl
+ 15838 ed6e 4189C1 movl %eax, %r9d
+ 15839 ed71 0FB68556 movzbl -3754(%rbp), %eax
+ 15839 F1FFFF
+ 15840 ed78 0FB69546 movzbl -3770(%rbp), %edx
+ 15840 F1FFFF
+ 15841 ed7f 0FB6C0 movzbl %al, %eax
+ 15842 ed82 6689853E movw %ax, -8898(%rbp)
+ 15842 DDFFFF
+ 15843 ed89 0FB7853E movzwl -8898(%rbp), %eax
+ 15843 DDFFFF
+ 15844 ed90 F6F2 divb %dl
+ 15845 ed92 89C7 movl %eax, %edi
+ 15846 ed94 0FB68557 movzbl -3753(%rbp), %eax
+ 15846 F1FFFF
+ 15847 ed9b 0FB69547 movzbl -3769(%rbp), %edx
+ 15847 F1FFFF
+ 15848 eda2 0FB6C0 movzbl %al, %eax
+ 15849 eda5 6689853E movw %ax, -8898(%rbp)
+ 15849 DDFFFF
+ 15850 edac 0FB7853E movzwl -8898(%rbp), %eax
+ 15850 DDFFFF
+ 15851 edb3 F6F2 divb %dl
+ 15852 edb5 89C3 movl %eax, %ebx
+ 15853 edb7 0FB68558 movzbl -3752(%rbp), %eax
+ 15853 F1FFFF
+ 15854 edbe 0FB69548 movzbl -3768(%rbp), %edx
+ 15854 F1FFFF
+ 15855 edc5 0FB6C0 movzbl %al, %eax
+ 15856 edc8 6689853E movw %ax, -8898(%rbp)
+ 15856 DDFFFF
+ 15857 edcf 0FB7853E movzwl -8898(%rbp), %eax
+ 15857 DDFFFF
+ 15858 edd6 F6F2 divb %dl
+ 15859 edd8 4189C2 movl %eax, %r10d
+ 15860 eddb 0FB68559 movzbl -3751(%rbp), %eax
+ 15860 F1FFFF
+ 15861 ede2 0FB69549 movzbl -3767(%rbp), %edx
+ 15861 F1FFFF
+ 15862 ede9 0FB6C0 movzbl %al, %eax
+ 15863 edec 6689853E movw %ax, -8898(%rbp)
+ 15863 DDFFFF
+ 15864 edf3 0FB7853E movzwl -8898(%rbp), %eax
+ 15864 DDFFFF
+ 15865 edfa F6F2 divb %dl
+ 15866 edfc 4189C3 movl %eax, %r11d
+ 15867 edff 0FB6855A movzbl -3750(%rbp), %eax
+ 15867 F1FFFF
+ 15868 ee06 0FB6954A movzbl -3766(%rbp), %edx
+ 15868 F1FFFF
+ 15869 ee0d 0FB6C0 movzbl %al, %eax
+ 15870 ee10 6689853E movw %ax, -8898(%rbp)
+ 15870 DDFFFF
+ 15871 ee17 0FB7853E movzwl -8898(%rbp), %eax
+ 15871 DDFFFF
+ 15872 ee1e F6F2 divb %dl
+ 15873 ee20 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s page 496
+
+
+ 15874 ee23 0FB6855B movzbl -3749(%rbp), %eax
+ 15874 F1FFFF
+ 15875 ee2a 0FB6954B movzbl -3765(%rbp), %edx
+ 15875 F1FFFF
+ 15876 ee31 0FB6C0 movzbl %al, %eax
+ 15877 ee34 6689853E movw %ax, -8898(%rbp)
+ 15877 DDFFFF
+ 15878 ee3b 0FB7853E movzwl -8898(%rbp), %eax
+ 15878 DDFFFF
+ 15879 ee42 F6F2 divb %dl
+ 15880 ee44 4189C5 movl %eax, %r13d
+ 15881 ee47 0FB6855C movzbl -3748(%rbp), %eax
+ 15881 F1FFFF
+ 15882 ee4e 0FB6954C movzbl -3764(%rbp), %edx
+ 15882 F1FFFF
+ 15883 ee55 0FB6C0 movzbl %al, %eax
+ 15884 ee58 6689853E movw %ax, -8898(%rbp)
+ 15884 DDFFFF
+ 15885 ee5f 0FB7853E movzwl -8898(%rbp), %eax
+ 15885 DDFFFF
+ 15886 ee66 F6F2 divb %dl
+ 15887 ee68 4189C6 movl %eax, %r14d
+ 15888 ee6b 0FB6855D movzbl -3747(%rbp), %eax
+ 15888 F1FFFF
+ 15889 ee72 0FB6954D movzbl -3763(%rbp), %edx
+ 15889 F1FFFF
+ 15890 ee79 0FB6C0 movzbl %al, %eax
+ 15891 ee7c 6689853E movw %ax, -8898(%rbp)
+ 15891 DDFFFF
+ 15892 ee83 0FB7853E movzwl -8898(%rbp), %eax
+ 15892 DDFFFF
+ 15893 ee8a F6F2 divb %dl
+ 15894 ee8c 4189C0 movl %eax, %r8d
+ 15895 ee8f 0FB6855E movzbl -3746(%rbp), %eax
+ 15895 F1FFFF
+ 15896 ee96 0FB6954E movzbl -3762(%rbp), %edx
+ 15896 F1FFFF
+ 15897 ee9d 0FB6C0 movzbl %al, %eax
+ 15898 eea0 6689853E movw %ax, -8898(%rbp)
+ 15898 DDFFFF
+ 15899 eea7 0FB7853E movzwl -8898(%rbp), %eax
+ 15899 DDFFFF
+ 15900 eeae F6F2 divb %dl
+ 15901 eeb0 89C6 movl %eax, %esi
+ 15902 eeb2 0FB6855F movzbl -3745(%rbp), %eax
+ 15902 F1FFFF
+ 15903 eeb9 0FB6954F movzbl -3761(%rbp), %edx
+ 15903 F1FFFF
+ 15904 eec0 0FB6C0 movzbl %al, %eax
+ 15905 eec3 6689853E movw %ax, -8898(%rbp)
+ 15905 DDFFFF
+ 15906 eeca 0FB7853E movzwl -8898(%rbp), %eax
+ 15906 DDFFFF
+ 15907 eed1 F6F2 divb %dl
+ 15908 eed3 89C1 movl %eax, %ecx
+ 15909 .LBB2079:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+
GAS LISTING /tmp/ccMa7HLZ.s page 497
+
+
+ 15910 .loc 2 346 0
+ 15911 eed5 0FB6D3 movzbl %bl, %edx
+ 15912 eed8 400FB6C7 movzbl %dil, %eax
+ 15913 eedc 48C1E208 salq $8, %rdx
+ 15914 eee0 4809C2 orq %rax, %rdx
+ 15915 eee3 410FB6C1 movzbl %r9b, %eax
+ 15916 eee7 48C1E208 salq $8, %rdx
+ 15917 eeeb 4809C2 orq %rax, %rdx
+ 15918 eeee 0FB6857C movzbl -8580(%rbp), %eax
+ 15918 DEFFFF
+ 15919 eef5 48C1E208 salq $8, %rdx
+ 15920 eef9 4809C2 orq %rax, %rdx
+ 15921 eefc 0FB6857D movzbl -8579(%rbp), %eax
+ 15921 DEFFFF
+ 15922 ef03 48C1E208 salq $8, %rdx
+ 15923 ef07 4809C2 orq %rax, %rdx
+ 15924 ef0a 0FB6857E movzbl -8578(%rbp), %eax
+ 15924 DEFFFF
+ 15925 ef11 48C1E208 salq $8, %rdx
+ 15926 ef15 4809C2 orq %rax, %rdx
+ 15927 ef18 0FB6857F movzbl -8577(%rbp), %eax
+ 15927 DEFFFF
+ 15928 ef1f 48C1E208 salq $8, %rdx
+ 15929 ef23 4809C2 orq %rax, %rdx
+ 15930 ef26 410FB6C7 movzbl %r15b, %eax
+ 15931 ef2a 48C1E208 salq $8, %rdx
+ 15932 ef2e 4809C2 orq %rax, %rdx
+ 15933 ef31 0FB6C1 movzbl %cl, %eax
+ 15934 ef34 400FB6CE movzbl %sil, %ecx
+ 15935 ef38 48C1E008 salq $8, %rax
+ 15936 ef3c 4809C8 orq %rcx, %rax
+ 15937 ef3f 410FB6C8 movzbl %r8b, %ecx
+ 15938 ef43 48C1E008 salq $8, %rax
+ 15939 ef47 4809C8 orq %rcx, %rax
+ 15940 ef4a 410FB6CE movzbl %r14b, %ecx
+ 15941 ef4e 48C1E008 salq $8, %rax
+ 15942 ef52 4809C8 orq %rcx, %rax
+ 15943 ef55 410FB6CD movzbl %r13b, %ecx
+ 15944 ef59 48C1E008 salq $8, %rax
+ 15945 ef5d 4809C8 orq %rcx, %rax
+ 15946 ef60 410FB6CC movzbl %r12b, %ecx
+ 15947 ef64 48C1E008 salq $8, %rax
+ 15948 ef68 4809C8 orq %rcx, %rax
+ 15949 ef6b 410FB6CB movzbl %r11b, %ecx
+ 15950 ef6f 48C1E008 salq $8, %rax
+ 15951 ef73 4809C8 orq %rcx, %rax
+ 15952 ef76 410FB6CA movzbl %r10b, %ecx
+ 15953 ef7a 48C1E008 salq $8, %rax
+ 15954 ef7e 4809C8 orq %rcx, %rax
+ 15955 ef81 48899580 movq %rdx, -8832(%rbp)
+ 15955 DDFFFF
+ 15956 ef88 48898588 movq %rax, -8824(%rbp)
+ 15956 DDFFFF
+ 15957 ef8f 660F6F85 movdqa -8832(%rbp), %xmm0
+ 15957 80DDFFFF
+ 15958 .LBE2079:
+ 15959 .LBE2078:
+
GAS LISTING /tmp/ccMa7HLZ.s page 498
+
+
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 15960 .loc 2 862 0
+ 15961 ef97 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 15961 00F1FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 15962 .loc 2 866 0
+ 15963 ef9f C785DCF0 movl $0, -3876(%rbp)
+ 15963 FFFF0000
+ 15963 0000
+ 15964 efa9 E9860200 jmp .L372
+ 15964 00
+ 15965 .L381:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15966 .loc 2 868 0
+ 15967 efae 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 15967 00000000
+ 15968 efb6 F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 15968 70F1FFFF
+ 15969 efbe F30F6F85 movdqu -3840(%rbp), %xmm0
+ 15969 00F1FFFF
+ 15970 efc6 F30F7F85 movdqu %xmm0, -3744(%rbp)
+ 15970 60F1FFFF
+ 15971 .LBB2080:
+ 15972 .LBB2081:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 15973 .loc 2 380 0
+ 15974 efce F30F6F85 movdqu -3728(%rbp), %xmm0
+ 15974 70F1FFFF
+ 15975 efd6 F30F7F85 movdqu %xmm0, -7360(%rbp)
+ 15975 40E3FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 15976 .loc 2 381 0
+ 15977 efde F30F6F85 movdqu -3744(%rbp), %xmm0
+ 15977 60F1FFFF
+ 15978 efe6 F30F7F85 movdqu %xmm0, -7376(%rbp)
+ 15978 30E3FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 15979 .loc 2 383 0
+ 15980 efee C7858CF1 movl $0, -3700(%rbp)
+ 15980 FFFF0000
+ 15980 0000
+ 15981 eff8 EB5C jmp .L373
+ 15982 .L376:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 15983 .loc 2 385 0
+ 15984 effa 8B858CF1 movl -3700(%rbp), %eax
+ 15984 FFFF
+ 15985 f000 89C0 mov %eax, %eax
+ 15986 f002 0FB68405 movzbl -7376(%rbp,%rax), %eax
+ 15986 30E3FFFF
+ 15987 f00a 84C0 testb %al, %al
+ 15988 f00c 7912 jns .L374
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 15989 .loc 2 386 0
+ 15990 f00e 8B858CF1 movl -3700(%rbp), %eax
+ 15990 FFFF
+ 15991 f014 89C0 mov %eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 499
+
+
+ 15992 f016 C6840550 movb $0, -7344(%rbp,%rax)
+ 15992 E3FFFF00
+ 15993 f01e EB2F jmp .L375
+ 15994 .L374:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 15995 .loc 2 388 0
+ 15996 f020 8B8D8CF1 movl -3700(%rbp), %ecx
+ 15996 FFFF
+ 15997 f026 8B858CF1 movl -3700(%rbp), %eax
+ 15997 FFFF
+ 15998 f02c 89C0 mov %eax, %eax
+ 15999 f02e 0FB68405 movzbl -7376(%rbp,%rax), %eax
+ 15999 30E3FFFF
+ 16000 f036 0FB6C0 movzbl %al, %eax
+ 16001 f039 83E00F andl $15, %eax
+ 16002 f03c 4898 cltq
+ 16003 f03e 0FB69405 movzbl -7360(%rbp,%rax), %edx
+ 16003 40E3FFFF
+ 16004 f046 89C8 mov %ecx, %eax
+ 16005 f048 88940550 movb %dl, -7344(%rbp,%rax)
+ 16005 E3FFFF
+ 16006 .L375:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 16007 .loc 2 383 0
+ 16008 f04f 83858CF1 addl $1, -3700(%rbp)
+ 16008 FFFF01
+ 16009 .L373:
+ 16010 f056 83BD8CF1 cmpl $15, -3700(%rbp)
+ 16010 FFFF0F
+ 16011 f05d 769B jbe .L376
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 16012 .loc 2 391 0
+ 16013 f05f F30F6F85 movdqu -7344(%rbp), %xmm0
+ 16013 50E3FFFF
+ 16014 .LBE2081:
+ 16015 .LBE2080:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 16016 .loc 2 868 0
+ 16017 f067 F30F7F85 movdqu %xmm0, -3856(%rbp)
+ 16017 F0F0FFFF
+ 16018 f06f F30F6F85 movdqu -3824(%rbp), %xmm0
+ 16018 10F1FFFF
+ 16019 f077 F30F7F85 movdqu %xmm0, -3680(%rbp)
+ 16019 A0F1FFFF
+ 16020 f07f F30F6F85 movdqu -3856(%rbp), %xmm0
+ 16020 F0F0FFFF
+ 16021 f087 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 16021 90F1FFFF
+ 16022 .LBB2082:
+ 16023 .LBB2083:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 16024 .loc 2 234 0
+ 16025 f08f F30F6F85 movdqu -3696(%rbp), %xmm0
+ 16025 90F1FFFF
+ 16026 f097 F30F6F8D movdqu -3680(%rbp), %xmm1
+ 16026 A0F1FFFF
+ 16027 f09f 660FEBC1 por %xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 500
+
+
+ 16028 .LBE2083:
+ 16029 .LBE2082:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 16030 .loc 2 870 0
+ 16031 f0a3 F30F7F85 movdqu %xmm0, -3856(%rbp)
+ 16031 F0F0FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 16032 .loc 2 872 0
+ 16033 f0ab 8B85DCF0 mov -3876(%rbp), %eax
+ 16033 FFFF
+ 16034 f0b1 48C1E004 salq $4, %rax
+ 16035 f0b5 480385B8 addq -3912(%rbp), %rax
+ 16035 F0FFFF
+ 16036 f0bc 660F6F00 movdqa (%rax), %xmm0
+ 16037 f0c0 F30F7F85 movdqu %xmm0, -3648(%rbp)
+ 16037 C0F1FFFF
+ 16038 f0c8 F30F6F85 movdqu -3856(%rbp), %xmm0
+ 16038 F0F0FFFF
+ 16039 f0d0 F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 16039 B0F1FFFF
+ 16040 .LBB2084:
+ 16041 .LBB2085:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 16042 .loc 2 380 0
+ 16043 f0d8 F30F6F85 movdqu -3648(%rbp), %xmm0
+ 16043 C0F1FFFF
+ 16044 f0e0 F30F7F85 movdqu %xmm0, -7312(%rbp)
+ 16044 70E3FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 16045 .loc 2 381 0
+ 16046 f0e8 F30F6F85 movdqu -3664(%rbp), %xmm0
+ 16046 B0F1FFFF
+ 16047 f0f0 F30F7F85 movdqu %xmm0, -7328(%rbp)
+ 16047 60E3FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 16048 .loc 2 383 0
+ 16049 f0f8 C785DCF1 movl $0, -3620(%rbp)
+ 16049 FFFF0000
+ 16049 0000
+ 16050 f102 EB5C jmp .L377
+ 16051 .L380:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 16052 .loc 2 385 0
+ 16053 f104 8B85DCF1 movl -3620(%rbp), %eax
+ 16053 FFFF
+ 16054 f10a 89C0 mov %eax, %eax
+ 16055 f10c 0FB68405 movzbl -7328(%rbp,%rax), %eax
+ 16055 60E3FFFF
+ 16056 f114 84C0 testb %al, %al
+ 16057 f116 7912 jns .L378
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 16058 .loc 2 386 0
+ 16059 f118 8B85DCF1 movl -3620(%rbp), %eax
+ 16059 FFFF
+ 16060 f11e 89C0 mov %eax, %eax
+ 16061 f120 C6840580 movb $0, -7296(%rbp,%rax)
+ 16061 E3FFFF00
+
GAS LISTING /tmp/ccMa7HLZ.s page 501
+
+
+ 16062 f128 EB2F jmp .L379
+ 16063 .L378:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 16064 .loc 2 388 0
+ 16065 f12a 8B8DDCF1 movl -3620(%rbp), %ecx
+ 16065 FFFF
+ 16066 f130 8B85DCF1 movl -3620(%rbp), %eax
+ 16066 FFFF
+ 16067 f136 89C0 mov %eax, %eax
+ 16068 f138 0FB68405 movzbl -7328(%rbp,%rax), %eax
+ 16068 60E3FFFF
+ 16069 f140 0FB6C0 movzbl %al, %eax
+ 16070 f143 83E00F andl $15, %eax
+ 16071 f146 4898 cltq
+ 16072 f148 0FB69405 movzbl -7312(%rbp,%rax), %edx
+ 16072 70E3FFFF
+ 16073 f150 89C8 mov %ecx, %eax
+ 16074 f152 88940580 movb %dl, -7296(%rbp,%rax)
+ 16074 E3FFFF
+ 16075 .L379:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 16076 .loc 2 383 0
+ 16077 f159 8385DCF1 addl $1, -3620(%rbp)
+ 16077 FFFF01
+ 16078 .L377:
+ 16079 f160 83BDDCF1 cmpl $15, -3620(%rbp)
+ 16079 FFFF0F
+ 16080 f167 769B jbe .L380
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 16081 .loc 2 391 0
+ 16082 f169 F30F6F85 movdqu -7296(%rbp), %xmm0
+ 16082 80E3FFFF
+ 16083 .LBE2085:
+ 16084 .LBE2084:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 16085 .loc 2 872 0
+ 16086 f171 F30F7F85 movdqu %xmm0, -3856(%rbp)
+ 16086 F0F0FFFF
+ 16087 f179 F30F6F85 movdqu -3872(%rbp), %xmm0
+ 16087 E0F0FFFF
+ 16088 f181 F30F7F85 movdqu %xmm0, -3600(%rbp)
+ 16088 F0F1FFFF
+ 16089 f189 F30F6F85 movdqu -3856(%rbp), %xmm0
+ 16089 F0F0FFFF
+ 16090 f191 F30F7F85 movdqu %xmm0, -3616(%rbp)
+ 16090 E0F1FFFF
+ 16091 .LBB2086:
+ 16092 .LBB2087:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 16093 .loc 2 234 0
+ 16094 f199 F30F6F85 movdqu -3616(%rbp), %xmm0
+ 16094 E0F1FFFF
+ 16095 f1a1 F30F6F8D movdqu -3600(%rbp), %xmm1
+ 16095 F0F1FFFF
+ 16096 f1a9 660FEBC1 por %xmm1, %xmm0
+ 16097 .LBE2087:
+ 16098 .LBE2086:
+
GAS LISTING /tmp/ccMa7HLZ.s page 502
+
+
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 16099 .loc 2 874 0
+ 16100 f1ad F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 16100 E0F0FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 16101 .loc 2 876 0
+ 16102 f1b5 660F6F05 movdqa vec_01(%rip), %xmm0
+ 16102 00000000
+ 16103 f1bd F30F6F8D movdqu -3840(%rbp), %xmm1
+ 16103 00F1FFFF
+ 16104 f1c5 F30F7F8D movdqu %xmm1, -3568(%rbp)
+ 16104 10F2FFFF
+ 16105 f1cd F30F7F85 movdqu %xmm0, -3584(%rbp)
+ 16105 00F2FFFF
+ 16106 .LBB2088:
+ 16107 .LBB2089:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 16108 .loc 2 290 0
+ 16109 f1d5 F30F6F8D movdqu -3584(%rbp), %xmm1
+ 16109 00F2FFFF
+ 16110 f1dd F30F6F85 movdqu -3568(%rbp), %xmm0
+ 16110 10F2FFFF
+ 16111 f1e5 660FF8C1 psubb %xmm1, %xmm0
+ 16112 .LBE2089:
+ 16113 .LBE2088:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 16114 .loc 2 876 0
+ 16115 f1e9 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 16115 00F1FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 16116 .loc 2 878 0
+ 16117 f1f1 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 16117 00000000
+ 16118 f1f9 F30F6F8D movdqu -3840(%rbp), %xmm1
+ 16118 00F1FFFF
+ 16119 f201 F30F7F8D movdqu %xmm1, -3536(%rbp)
+ 16119 30F2FFFF
+ 16120 f209 F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 16120 20F2FFFF
+ 16121 .LBB2090:
+ 16122 .LBB2091:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 16123 .loc 2 206 0
+ 16124 f211 F30F6F85 movdqu -3552(%rbp), %xmm0
+ 16124 20F2FFFF
+ 16125 f219 F30F6F8D movdqu -3536(%rbp), %xmm1
+ 16125 30F2FFFF
+ 16126 f221 660FDBC1 pand %xmm1, %xmm0
+ 16127 .LBE2091:
+ 16128 .LBE2090:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 16129 .loc 2 878 0
+ 16130 f225 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 16130 00F1FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 16131 .loc 2 866 0
+ 16132 f22d 8385DCF0 addl $1, -3876(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 503
+
+
+ 16132 FFFF01
+ 16133 .L372:
+ 16134 f234 83BDDCF0 cmpl $15, -3876(%rbp)
+ 16134 FFFF0F
+ 16135 f23b 0F866DFD jbe .L381
+ 16135 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 16136 .loc 2 882 0
+ 16137 f241 F30F6F85 movdqu -3872(%rbp), %xmm0
+ 16137 E0F0FFFF
+ 16138 .LBE2075:
+ 16139 .LBE2074:
+ 16140 .LBE2073:
+ 16141 .LBE2072:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 16142 .loc 2 1682 0
+ 16143 f249 660F7F85 movdqa %xmm0, -8624(%rbp)
+ 16143 50DEFFFF
+ 16144 .LBB2092:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 16145 .loc 2 1683 0
+ 16146 f251 660F6F85 movdqa -8624(%rbp), %xmm0
+ 16146 50DEFFFF
+ 16147 f259 F30F7F85 movdqu %xmm0, -7408(%rbp)
+ 16147 10E3FFFF
+ 16148 f261 E8000000 call KDbgWriterGet at PLT
+ 16148 00
+ 16149 f266 4885C0 testq %rax, %rax
+ 16150 f269 7479 je .L383
+ 16151 f26b BF010000 movl $1, %edi
+ 16151 00
+ 16152 f270 E8000000 call KDbgCondToFlag at PLT
+ 16152 00
+ 16153 f275 4889C6 movq %rax, %rsi
+ 16154 f278 BF100000 movl $16, %edi
+ 16154 00
+ 16155 f27d E8000000 call KDbgTestModConds at PLT
+ 16155 00
+ 16156 f282 84C0 testb %al, %al
+ 16157 f284 745E je .L383
+ 16158 f286 8B851CE3 movl -7396(%rbp), %eax
+ 16158 FFFF
+ 16159 f28c 89C7 movl %eax, %edi
+ 16160 f28e E86D0DFF call bswap_32
+ 16160 FF
+ 16161 f293 4189C5 movl %eax, %r13d
+ 16162 f296 8B8518E3 movl -7400(%rbp), %eax
+ 16162 FFFF
+ 16163 f29c 89C7 movl %eax, %edi
+ 16164 f29e E85D0DFF call bswap_32
+ 16164 FF
+ 16165 f2a3 4189C4 movl %eax, %r12d
+ 16166 f2a6 8B8514E3 movl -7404(%rbp), %eax
+ 16166 FFFF
+ 16167 f2ac 89C7 movl %eax, %edi
+ 16168 f2ae E84D0DFF call bswap_32
+ 16168 FF
+
GAS LISTING /tmp/ccMa7HLZ.s page 504
+
+
+ 16169 f2b3 89C3 movl %eax, %ebx
+ 16170 f2b5 8B8510E3 movl -7408(%rbp), %eax
+ 16170 FFFF
+ 16171 f2bb 89C7 movl %eax, %edi
+ 16172 f2bd E83E0DFF call bswap_32
+ 16172 FF
+ 16173 f2c2 4589E9 movl %r13d, %r9d
+ 16174 f2c5 4589E0 movl %r12d, %r8d
+ 16175 f2c8 89D9 movl %ebx, %ecx
+ 16176 f2ca 89C2 movl %eax, %edx
+ 16177 f2cc 488D3500 leaq .LC0(%rip), %rsi
+ 16177 000000
+ 16178 f2d3 488D3D00 leaq .LC1(%rip), %rdi
+ 16178 000000
+ 16179 f2da B8000000 movl $0, %eax
+ 16179 00
+ 16180 f2df E8000000 call KDbgMsg at PLT
+ 16180 00
+ 16181 .L383:
+ 16182 f2e4 660F6F85 movdqa -8624(%rbp), %xmm0
+ 16182 50DEFFFF
+ 16183 f2ec F30F7F85 movdqu %xmm0, -3520(%rbp)
+ 16183 40F2FFFF
+ 16184 .LBE2092:
+ 16185 .LBB2093:
+ 16186 .LBB2094:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16187 .loc 2 667 0
+ 16188 f2f4 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 16188 00000000
+ 16189 f2fc F30F6F8D movdqu -3520(%rbp), %xmm1
+ 16189 40F2FFFF
+ 16190 f304 F30F7F8D movdqu %xmm1, -3488(%rbp)
+ 16190 60F2FFFF
+ 16191 f30c F30F7F85 movdqu %xmm0, -3504(%rbp)
+ 16191 50F2FFFF
+ 16192 .LBB2095:
+ 16193 .LBB2096:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 16194 .loc 2 380 0
+ 16195 f314 F30F6F85 movdqu -3488(%rbp), %xmm0
+ 16195 60F2FFFF
+ 16196 f31c F30F7F85 movdqu %xmm0, -7264(%rbp)
+ 16196 A0E3FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 16197 .loc 2 381 0
+ 16198 f324 F30F6F85 movdqu -3504(%rbp), %xmm0
+ 16198 50F2FFFF
+ 16199 f32c F30F7F85 movdqu %xmm0, -7280(%rbp)
+ 16199 90E3FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 16200 .loc 2 383 0
+ 16201 f334 C7857CF2 movl $0, -3460(%rbp)
+ 16201 FFFF0000
+ 16201 0000
+ 16202 f33e EB5C jmp .L384
+ 16203 .L387:
+
GAS LISTING /tmp/ccMa7HLZ.s page 505
+
+
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 16204 .loc 2 385 0
+ 16205 f340 8B857CF2 movl -3460(%rbp), %eax
+ 16205 FFFF
+ 16206 f346 89C0 mov %eax, %eax
+ 16207 f348 0FB68405 movzbl -7280(%rbp,%rax), %eax
+ 16207 90E3FFFF
+ 16208 f350 84C0 testb %al, %al
+ 16209 f352 7912 jns .L385
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 16210 .loc 2 386 0
+ 16211 f354 8B857CF2 movl -3460(%rbp), %eax
+ 16211 FFFF
+ 16212 f35a 89C0 mov %eax, %eax
+ 16213 f35c C68405B0 movb $0, -7248(%rbp,%rax)
+ 16213 E3FFFF00
+ 16214 f364 EB2F jmp .L386
+ 16215 .L385:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 16216 .loc 2 388 0
+ 16217 f366 8B8D7CF2 movl -3460(%rbp), %ecx
+ 16217 FFFF
+ 16218 f36c 8B857CF2 movl -3460(%rbp), %eax
+ 16218 FFFF
+ 16219 f372 89C0 mov %eax, %eax
+ 16220 f374 0FB68405 movzbl -7280(%rbp,%rax), %eax
+ 16220 90E3FFFF
+ 16221 f37c 0FB6C0 movzbl %al, %eax
+ 16222 f37f 83E00F andl $15, %eax
+ 16223 f382 4898 cltq
+ 16224 f384 0FB69405 movzbl -7264(%rbp,%rax), %edx
+ 16224 A0E3FFFF
+ 16225 f38c 89C8 mov %ecx, %eax
+ 16226 f38e 889405B0 movb %dl, -7248(%rbp,%rax)
+ 16226 E3FFFF
+ 16227 .L386:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 16228 .loc 2 383 0
+ 16229 f395 83857CF2 addl $1, -3460(%rbp)
+ 16229 FFFF01
+ 16230 .L384:
+ 16231 f39c 83BD7CF2 cmpl $15, -3460(%rbp)
+ 16231 FFFF0F
+ 16232 f3a3 769B jbe .L387
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 16233 .loc 2 391 0
+ 16234 f3a5 F30F6F85 movdqu -7248(%rbp), %xmm0
+ 16234 B0E3FFFF
+ 16235 .LBE2096:
+ 16236 .LBE2095:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16237 .loc 2 667 0
+ 16238 f3ad F30F7F85 movdqu %xmm0, -3520(%rbp)
+ 16238 40F2FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 16239 .loc 2 668 0
+ 16240 f3b5 F30F6F85 movdqu -3520(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 506
+
+
+ 16240 40F2FFFF
+ 16241 .LBE2094:
+ 16242 .LBE2093:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 16243 .loc 2 1684 0
+ 16244 f3bd 660F7F85 movdqa %xmm0, -8624(%rbp)
+ 16244 50DEFFFF
+ 16245 .LBB2097:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 16246 .loc 2 1685 0
+ 16247 f3c5 660F6F85 movdqa -8624(%rbp), %xmm0
+ 16247 50DEFFFF
+ 16248 f3cd F30F7F85 movdqu %xmm0, -7424(%rbp)
+ 16248 00E3FFFF
+ 16249 f3d5 E8000000 call KDbgWriterGet at PLT
+ 16249 00
+ 16250 f3da 4885C0 testq %rax, %rax
+ 16251 f3dd 7479 je .L389
+ 16252 f3df BF010000 movl $1, %edi
+ 16252 00
+ 16253 f3e4 E8000000 call KDbgCondToFlag at PLT
+ 16253 00
+ 16254 f3e9 4889C6 movq %rax, %rsi
+ 16255 f3ec BF100000 movl $16, %edi
+ 16255 00
+ 16256 f3f1 E8000000 call KDbgTestModConds at PLT
+ 16256 00
+ 16257 f3f6 84C0 testb %al, %al
+ 16258 f3f8 745E je .L389
+ 16259 f3fa 8B850CE3 movl -7412(%rbp), %eax
+ 16259 FFFF
+ 16260 f400 89C7 movl %eax, %edi
+ 16261 f402 E8F90BFF call bswap_32
+ 16261 FF
+ 16262 f407 4189C5 movl %eax, %r13d
+ 16263 f40a 8B8508E3 movl -7416(%rbp), %eax
+ 16263 FFFF
+ 16264 f410 89C7 movl %eax, %edi
+ 16265 f412 E8E90BFF call bswap_32
+ 16265 FF
+ 16266 f417 4189C4 movl %eax, %r12d
+ 16267 f41a 8B8504E3 movl -7420(%rbp), %eax
+ 16267 FFFF
+ 16268 f420 89C7 movl %eax, %edi
+ 16269 f422 E8D90BFF call bswap_32
+ 16269 FF
+ 16270 f427 89C3 movl %eax, %ebx
+ 16271 f429 8B8500E3 movl -7424(%rbp), %eax
+ 16271 FFFF
+ 16272 f42f 89C7 movl %eax, %edi
+ 16273 f431 E8CA0BFF call bswap_32
+ 16273 FF
+ 16274 f436 4589E9 movl %r13d, %r9d
+ 16275 f439 4589E0 movl %r12d, %r8d
+ 16276 f43c 89D9 movl %ebx, %ecx
+ 16277 f43e 89C2 movl %eax, %edx
+ 16278 f440 488D3500 leaq .LC2(%rip), %rsi
+
GAS LISTING /tmp/ccMa7HLZ.s page 507
+
+
+ 16278 000000
+ 16279 f447 488D3D00 leaq .LC1(%rip), %rdi
+ 16279 000000
+ 16280 f44e B8000000 movl $0, %eax
+ 16280 00
+ 16281 f453 E8000000 call KDbgMsg at PLT
+ 16281 00
+ 16282 .L389:
+ 16283 f458 660F6F85 movdqa -8624(%rbp), %xmm0
+ 16283 50DEFFFF
+ 16284 f460 F30F7F85 movdqu %xmm0, -3440(%rbp)
+ 16284 90F2FFFF
+ 16285 f468 660F6F85 movdqa -8608(%rbp), %xmm0
+ 16285 60DEFFFF
+ 16286 f470 F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 16286 80F2FFFF
+ 16287 .LBE2097:
+ 16288 .LBB2098:
+ 16289 .LBB2099:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16290 .loc 2 178 0
+ 16291 f478 F30F6F85 movdqu -3456(%rbp), %xmm0
+ 16291 80F2FFFF
+ 16292 f480 F30F6F8D movdqu -3440(%rbp), %xmm1
+ 16292 90F2FFFF
+ 16293 f488 660FEFC1 pxor %xmm1, %xmm0
+ 16294 .LBE2099:
+ 16295 .LBE2098:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 16296 .loc 2 1686 0
+ 16297 f48c 660F7F85 movdqa %xmm0, -8624(%rbp)
+ 16297 50DEFFFF
+ 16298 .LBB2100:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 16299 .loc 2 1687 0
+ 16300 f494 660F6F85 movdqa -8624(%rbp), %xmm0
+ 16300 50DEFFFF
+ 16301 f49c F30F7F85 movdqu %xmm0, -7440(%rbp)
+ 16301 F0E2FFFF
+ 16302 f4a4 E8000000 call KDbgWriterGet at PLT
+ 16302 00
+ 16303 f4a9 4885C0 testq %rax, %rax
+ 16304 f4ac 7479 je .L391
+ 16305 f4ae BF010000 movl $1, %edi
+ 16305 00
+ 16306 f4b3 E8000000 call KDbgCondToFlag at PLT
+ 16306 00
+ 16307 f4b8 4889C6 movq %rax, %rsi
+ 16308 f4bb BF100000 movl $16, %edi
+ 16308 00
+ 16309 f4c0 E8000000 call KDbgTestModConds at PLT
+ 16309 00
+ 16310 f4c5 84C0 testb %al, %al
+ 16311 f4c7 745E je .L391
+ 16312 f4c9 8B85FCE2 movl -7428(%rbp), %eax
+ 16312 FFFF
+ 16313 f4cf 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 508
+
+
+ 16314 f4d1 E82A0BFF call bswap_32
+ 16314 FF
+ 16315 f4d6 4189C5 movl %eax, %r13d
+ 16316 f4d9 8B85F8E2 movl -7432(%rbp), %eax
+ 16316 FFFF
+ 16317 f4df 89C7 movl %eax, %edi
+ 16318 f4e1 E81A0BFF call bswap_32
+ 16318 FF
+ 16319 f4e6 4189C4 movl %eax, %r12d
+ 16320 f4e9 8B85F4E2 movl -7436(%rbp), %eax
+ 16320 FFFF
+ 16321 f4ef 89C7 movl %eax, %edi
+ 16322 f4f1 E80A0BFF call bswap_32
+ 16322 FF
+ 16323 f4f6 89C3 movl %eax, %ebx
+ 16324 f4f8 8B85F0E2 movl -7440(%rbp), %eax
+ 16324 FFFF
+ 16325 f4fe 89C7 movl %eax, %edi
+ 16326 f500 E8FB0AFF call bswap_32
+ 16326 FF
+ 16327 f505 4589E9 movl %r13d, %r9d
+ 16328 f508 4589E0 movl %r12d, %r8d
+ 16329 f50b 89D9 movl %ebx, %ecx
+ 16330 f50d 89C2 movl %eax, %edx
+ 16331 f50f 488D3500 leaq .LC3(%rip), %rsi
+ 16331 000000
+ 16332 f516 488D3D00 leaq .LC1(%rip), %rdi
+ 16332 000000
+ 16333 f51d B8000000 movl $0, %eax
+ 16333 00
+ 16334 f522 E8000000 call KDbgMsg at PLT
+ 16334 00
+ 16335 .L391:
+ 16336 f527 660F6F85 movdqa -8624(%rbp), %xmm0
+ 16336 50DEFFFF
+ 16337 f52f F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 16337 A0F2FFFF
+ 16338 .LBE2100:
+ 16339 .LBB2101:
+ 16340 .LBB2102:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 16341 .loc 2 1357 0
+ 16342 f537 F30F6F85 movdqu -3424(%rbp), %xmm0
+ 16342 A0F2FFFF
+ 16343 f53f F30F7F85 movdqu %xmm0, -7232(%rbp)
+ 16343 C0E3FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 16344 .loc 2 1358 0
+ 16345 f547 8B85CCE3 movl -7220(%rbp), %eax
+ 16345 FFFF
+ 16346 f54d 8985C8E3 movl %eax, -7224(%rbp)
+ 16346 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 16347 .loc 2 1359 0
+ 16348 f553 8B85CCE3 movl -7220(%rbp), %eax
+ 16348 FFFF
+ 16349 f559 8985C4E3 movl %eax, -7228(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 509
+
+
+ 16349 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 16350 .loc 2 1360 0
+ 16351 f55f 8B85CCE3 movl -7220(%rbp), %eax
+ 16351 FFFF
+ 16352 f565 8985C0E3 movl %eax, -7232(%rbp)
+ 16352 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 16353 .loc 2 1361 0
+ 16354 f56b F30F6F85 movdqu -7232(%rbp), %xmm0
+ 16354 C0E3FFFF
+ 16355 .LBE2102:
+ 16356 .LBE2101:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 16357 .loc 2 1688 0
+ 16358 f573 660F7F85 movdqa %xmm0, -8624(%rbp)
+ 16358 50DEFFFF
+ 16359 .LBB2103:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 16360 .loc 2 1689 0
+ 16361 f57b 660F6F85 movdqa -8624(%rbp), %xmm0
+ 16361 50DEFFFF
+ 16362 f583 F30F7F85 movdqu %xmm0, -7456(%rbp)
+ 16362 E0E2FFFF
+ 16363 f58b E8000000 call KDbgWriterGet at PLT
+ 16363 00
+ 16364 f590 4885C0 testq %rax, %rax
+ 16365 f593 7479 je .L393
+ 16366 f595 BF010000 movl $1, %edi
+ 16366 00
+ 16367 f59a E8000000 call KDbgCondToFlag at PLT
+ 16367 00
+ 16368 f59f 4889C6 movq %rax, %rsi
+ 16369 f5a2 BF100000 movl $16, %edi
+ 16369 00
+ 16370 f5a7 E8000000 call KDbgTestModConds at PLT
+ 16370 00
+ 16371 f5ac 84C0 testb %al, %al
+ 16372 f5ae 745E je .L393
+ 16373 f5b0 8B85ECE2 movl -7444(%rbp), %eax
+ 16373 FFFF
+ 16374 f5b6 89C7 movl %eax, %edi
+ 16375 f5b8 E8430AFF call bswap_32
+ 16375 FF
+ 16376 f5bd 4189C5 movl %eax, %r13d
+ 16377 f5c0 8B85E8E2 movl -7448(%rbp), %eax
+ 16377 FFFF
+ 16378 f5c6 89C7 movl %eax, %edi
+ 16379 f5c8 E8330AFF call bswap_32
+ 16379 FF
+ 16380 f5cd 4189C4 movl %eax, %r12d
+ 16381 f5d0 8B85E4E2 movl -7452(%rbp), %eax
+ 16381 FFFF
+ 16382 f5d6 89C7 movl %eax, %edi
+ 16383 f5d8 E8230AFF call bswap_32
+ 16383 FF
+ 16384 f5dd 89C3 movl %eax, %ebx
+
GAS LISTING /tmp/ccMa7HLZ.s page 510
+
+
+ 16385 f5df 8B85E0E2 movl -7456(%rbp), %eax
+ 16385 FFFF
+ 16386 f5e5 89C7 movl %eax, %edi
+ 16387 f5e7 E8140AFF call bswap_32
+ 16387 FF
+ 16388 f5ec 4589E9 movl %r13d, %r9d
+ 16389 f5ef 4589E0 movl %r12d, %r8d
+ 16390 f5f2 89D9 movl %ebx, %ecx
+ 16391 f5f4 89C2 movl %eax, %edx
+ 16392 f5f6 488D3500 leaq .LC4(%rip), %rsi
+ 16392 000000
+ 16393 f5fd 488D3D00 leaq .LC1(%rip), %rdi
+ 16393 000000
+ 16394 f604 B8000000 movl $0, %eax
+ 16394 00
+ 16395 f609 E8000000 call KDbgMsg at PLT
+ 16395 00
+ 16396 .L393:
+ 16397 .LBE2103:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 16398 .loc 2 1690 0
+ 16399 f60e 660F6F85 movdqa -8624(%rbp), %xmm0
+ 16399 50DEFFFF
+ 16400 .LBE2069:
+ 16401 .LBE2068:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(6,0x04); /* k24 : k25 : k26 : k27 */
+ 16402 .loc 2 1930 0
+ 16403 f616 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 16403 E0E9FFFF
+ 16404 f61e F30F6F85 movdqu -5696(%rbp), %xmm0
+ 16404 C0E9FFFF
+ 16405 f626 F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 16405 B0F2FFFF
+ 16406 .LBB2104:
+ 16407 .LBB2105:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 16408 .loc 2 1565 0
+ 16409 f62e F30F6F85 movdqu -3408(%rbp), %xmm0
+ 16409 B0F2FFFF
+ 16410 f636 660F7F85 movdqa %xmm0, -8576(%rbp)
+ 16410 80DEFFFF
+ 16411 f63e 660F6F85 movdqa -8576(%rbp), %xmm0
+ 16411 80DEFFFF
+ 16412 f646 F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 16412 C0F2FFFF
+ 16413 .LBB2106:
+ 16414 .LBB2107:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 16415 .loc 2 1282 0
+ 16416 f64e F30F6F85 movdqu -3392(%rbp), %xmm0
+ 16416 C0F2FFFF
+ 16417 f656 F30F7F85 movdqu %xmm0, -7216(%rbp)
+ 16417 D0E3FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 16418 .loc 2 1283 0
+ 16419 f65e 8B85D8E3 movl -7208(%rbp), %eax
+ 16419 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 511
+
+
+ 16420 f664 8985DCE3 movl %eax, -7204(%rbp)
+ 16420 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 16421 .loc 2 1284 0
+ 16422 f66a 8B85D4E3 movl -7212(%rbp), %eax
+ 16422 FFFF
+ 16423 f670 8985D8E3 movl %eax, -7208(%rbp)
+ 16423 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 16424 .loc 2 1285 0
+ 16425 f676 8B85D0E3 movl -7216(%rbp), %eax
+ 16425 FFFF
+ 16426 f67c 8985D4E3 movl %eax, -7212(%rbp)
+ 16426 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 16427 .loc 2 1286 0
+ 16428 f682 C785D0E3 movl $0, -7216(%rbp)
+ 16428 FFFF0000
+ 16428 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 16429 .loc 2 1287 0
+ 16430 f68c F30F6F85 movdqu -7216(%rbp), %xmm0
+ 16430 D0E3FFFF
+ 16431 .LBE2107:
+ 16432 .LBE2106:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16433 .loc 2 1567 0
+ 16434 f694 660F7F85 movdqa %xmm0, -8576(%rbp)
+ 16434 80DEFFFF
+ 16435 f69c 660F6F85 movdqa -8576(%rbp), %xmm0
+ 16435 80DEFFFF
+ 16436 f6a4 660FEF85 pxor -3408(%rbp), %xmm0
+ 16436 B0F2FFFF
+ 16437 f6ac F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 16437 B0F2FFFF
+ 16438 f6b4 660F6F85 movdqa -8576(%rbp), %xmm0
+ 16438 80DEFFFF
+ 16439 f6bc F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 16439 D0F2FFFF
+ 16440 .LBB2108:
+ 16441 .LBB2109:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 16442 .loc 2 1282 0
+ 16443 f6c4 F30F6F85 movdqu -3376(%rbp), %xmm0
+ 16443 D0F2FFFF
+ 16444 f6cc F30F7F85 movdqu %xmm0, -7200(%rbp)
+ 16444 E0E3FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 16445 .loc 2 1283 0
+ 16446 f6d4 8B85E8E3 movl -7192(%rbp), %eax
+ 16446 FFFF
+ 16447 f6da 8985ECE3 movl %eax, -7188(%rbp)
+ 16447 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 16448 .loc 2 1284 0
+ 16449 f6e0 8B85E4E3 movl -7196(%rbp), %eax
+ 16449 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 512
+
+
+ 16450 f6e6 8985E8E3 movl %eax, -7192(%rbp)
+ 16450 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 16451 .loc 2 1285 0
+ 16452 f6ec 8B85E0E3 movl -7200(%rbp), %eax
+ 16452 FFFF
+ 16453 f6f2 8985E4E3 movl %eax, -7196(%rbp)
+ 16453 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 16454 .loc 2 1286 0
+ 16455 f6f8 C785E0E3 movl $0, -7200(%rbp)
+ 16455 FFFF0000
+ 16455 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 16456 .loc 2 1287 0
+ 16457 f702 F30F6F85 movdqu -7200(%rbp), %xmm0
+ 16457 E0E3FFFF
+ 16458 .LBE2109:
+ 16459 .LBE2108:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16460 .loc 2 1568 0
+ 16461 f70a 660F7F85 movdqa %xmm0, -8576(%rbp)
+ 16461 80DEFFFF
+ 16462 f712 660F6F85 movdqa -8576(%rbp), %xmm0
+ 16462 80DEFFFF
+ 16463 f71a 660FEF85 pxor -3408(%rbp), %xmm0
+ 16463 B0F2FFFF
+ 16464 f722 F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 16464 B0F2FFFF
+ 16465 f72a 660F6F85 movdqa -8576(%rbp), %xmm0
+ 16465 80DEFFFF
+ 16466 f732 F30F7F85 movdqu %xmm0, -3360(%rbp)
+ 16466 E0F2FFFF
+ 16467 .LBB2110:
+ 16468 .LBB2111:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 16469 .loc 2 1282 0
+ 16470 f73a F30F6F85 movdqu -3360(%rbp), %xmm0
+ 16470 E0F2FFFF
+ 16471 f742 F30F7F85 movdqu %xmm0, -7184(%rbp)
+ 16471 F0E3FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 16472 .loc 2 1283 0
+ 16473 f74a 8B85F8E3 movl -7176(%rbp), %eax
+ 16473 FFFF
+ 16474 f750 8985FCE3 movl %eax, -7172(%rbp)
+ 16474 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 16475 .loc 2 1284 0
+ 16476 f756 8B85F4E3 movl -7180(%rbp), %eax
+ 16476 FFFF
+ 16477 f75c 8985F8E3 movl %eax, -7176(%rbp)
+ 16477 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 16478 .loc 2 1285 0
+ 16479 f762 8B85F0E3 movl -7184(%rbp), %eax
+ 16479 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 513
+
+
+ 16480 f768 8985F4E3 movl %eax, -7180(%rbp)
+ 16480 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 16481 .loc 2 1286 0
+ 16482 f76e C785F0E3 movl $0, -7184(%rbp)
+ 16482 FFFF0000
+ 16482 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 16483 .loc 2 1287 0
+ 16484 f778 F30F6F85 movdqu -7184(%rbp), %xmm0
+ 16484 F0E3FFFF
+ 16485 .LBE2111:
+ 16486 .LBE2110:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16487 .loc 2 1569 0
+ 16488 f780 660F7F85 movdqa %xmm0, -8576(%rbp)
+ 16488 80DEFFFF
+ 16489 f788 660F6F85 movdqa -8576(%rbp), %xmm0
+ 16489 80DEFFFF
+ 16490 f790 660FEF85 pxor -3408(%rbp), %xmm0
+ 16490 B0F2FFFF
+ 16491 f798 F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 16491 B0F2FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 16492 .loc 2 1571 0
+ 16493 f7a0 F30F6F85 movdqu -3408(%rbp), %xmm0
+ 16493 B0F2FFFF
+ 16494 .LBE2105:
+ 16495 .LBE2104:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(6,0x04); /* k24 : k25 : k26 : k27 */
+ 16496 .loc 2 1930 0
+ 16497 f7a8 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 16497 C0E9FFFF
+ 16498 f7b0 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 16498 C0E9FFFF
+ 16499 f7b8 F30F7F85 movdqu %xmm0, -3328(%rbp)
+ 16499 00F3FFFF
+ 16500 f7c0 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 16500 E0E9FFFF
+ 16501 f7c8 F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 16501 F0F2FFFF
+ 16502 .LBB2112:
+ 16503 .LBB2113:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16504 .loc 2 178 0
+ 16505 f7d0 F30F6F85 movdqu -3344(%rbp), %xmm0
+ 16505 F0F2FFFF
+ 16506 f7d8 F30F6F8D movdqu -3328(%rbp), %xmm1
+ 16506 00F3FFFF
+ 16507 f7e0 660FEFC1 pxor %xmm1, %xmm0
+ 16508 .LBE2113:
+ 16509 .LBE2112:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(6,0x04); /* k24 : k25 : k26 : k27 */
+ 16510 .loc 2 1930 0
+ 16511 f7e4 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 16511 C0E9FFFF
+ 16512 f7ec 488B85D8 movq -8232(%rbp), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 514
+
+
+ 16512 DFFFFF
+ 16513 f7f3 4883C060 addq $96, %rax
+ 16514 f7f7 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 16514 C0E9FFFF
+ 16515 f7ff F30F7F00 movdqu %xmm0, (%rax)
+ 16516 f803 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 16516 C0E9FFFF
+ 16517 f80b F30F7F85 movdqu %xmm0, -3312(%rbp)
+ 16517 10F3FFFF
+ 16518 .LBB2114:
+ 16519 .LBB2115:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 16520 .loc 2 1656 0
+ 16521 f813 F30F6F85 movdqu -3312(%rbp), %xmm0
+ 16521 10F3FFFF
+ 16522 f81b F30F7F85 movdqu %xmm0, -7152(%rbp)
+ 16522 10E4FFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 16523 .loc 2 1657 0
+ 16524 f823 8B851CE4 movl -7140(%rbp), %eax
+ 16524 FFFF
+ 16525 f829 898528F3 movl %eax, -3288(%rbp)
+ 16525 FFFF
+ 16526 .LBB2116:
+ 16527 .LBB2117:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 16528 .loc 2 740 0
+ 16529 f82f 8B8528F3 movl -3288(%rbp), %eax
+ 16529 FFFF
+ 16530 f835 898500E4 movl %eax, -7168(%rbp)
+ 16530 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 16531 .loc 2 741 0
+ 16532 f83b C7852CF3 movl $0, -3284(%rbp)
+ 16532 FFFF0000
+ 16532 0000
+ 16533 f845 EB36 jmp .L394
+ 16534 .L395:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 16535 .loc 2 742 0
+ 16536 f847 8B8D2CF3 movl -3284(%rbp), %ecx
+ 16536 FFFF
+ 16537 f84d 8B852CF3 movl -3284(%rbp), %eax
+ 16537 FFFF
+ 16538 f853 89C0 mov %eax, %eax
+ 16539 f855 0FB68405 movzbl -7168(%rbp,%rax), %eax
+ 16539 00E4FFFF
+ 16540 f85d 0FB6C0 movzbl %al, %eax
+ 16541 f860 89C2 mov %eax, %edx
+ 16542 f862 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 16542 000000
+ 16543 f869 0FB61402 movzbl (%rdx,%rax), %edx
+ 16544 f86d 89C8 mov %ecx, %eax
+ 16545 f86f 88940500 movb %dl, -7168(%rbp,%rax)
+ 16545 E4FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 16546 .loc 2 741 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 515
+
+
+ 16547 f876 83852CF3 addl $1, -3284(%rbp)
+ 16547 FFFF01
+ 16548 .L394:
+ 16549 f87d 83BD2CF3 cmpl $3, -3284(%rbp)
+ 16549 FFFF03
+ 16550 f884 76C1 jbe .L395
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 16551 .loc 2 743 0
+ 16552 f886 8B8500E4 movl -7168(%rbp), %eax
+ 16552 FFFF
+ 16553 .LBE2117:
+ 16554 .LBE2116:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 16555 .loc 2 1657 0
+ 16556 f88c 898524F3 movl %eax, -3292(%rbp)
+ 16556 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 16557 .loc 2 1659 0
+ 16558 f892 8B8524F3 movl -3292(%rbp), %eax
+ 16558 FFFF
+ 16559 f898 89851CE4 movl %eax, -7140(%rbp)
+ 16559 FFFF
+ 16560 f89e 8B851CE4 movl -7140(%rbp), %eax
+ 16560 FFFF
+ 16561 f8a4 898518E4 movl %eax, -7144(%rbp)
+ 16561 FFFF
+ 16562 f8aa 8B8518E4 movl -7144(%rbp), %eax
+ 16562 FFFF
+ 16563 f8b0 898514E4 movl %eax, -7148(%rbp)
+ 16563 FFFF
+ 16564 f8b6 8B8514E4 movl -7148(%rbp), %eax
+ 16564 FFFF
+ 16565 f8bc 898510E4 movl %eax, -7152(%rbp)
+ 16565 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 16566 .loc 2 1660 0
+ 16567 f8c2 F30F6F85 movdqu -7152(%rbp), %xmm0
+ 16567 10E4FFFF
+ 16568 .LBE2115:
+ 16569 .LBE2114:
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(7); /* k28 : k29 : k30 : k31 */
+ 16570 .loc 2 1931 0
+ 16571 f8ca F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 16571 E0E9FFFF
+ 16572 f8d2 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 16572 D0E9FFFF
+ 16573 f8da F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 16573 30F3FFFF
+ 16574 .LBB2118:
+ 16575 .LBB2119:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 16576 .loc 2 1565 0
+ 16577 f8e2 F30F6F85 movdqu -3280(%rbp), %xmm0
+ 16577 30F3FFFF
+ 16578 f8ea 660F7F85 movdqa %xmm0, -8560(%rbp)
+ 16578 90DEFFFF
+ 16579 f8f2 660F6F85 movdqa -8560(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 516
+
+
+ 16579 90DEFFFF
+ 16580 f8fa F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 16580 40F3FFFF
+ 16581 .LBB2120:
+ 16582 .LBB2121:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 16583 .loc 2 1282 0
+ 16584 f902 F30F6F85 movdqu -3264(%rbp), %xmm0
+ 16584 40F3FFFF
+ 16585 f90a F30F7F85 movdqu %xmm0, -7136(%rbp)
+ 16585 20E4FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 16586 .loc 2 1283 0
+ 16587 f912 8B8528E4 movl -7128(%rbp), %eax
+ 16587 FFFF
+ 16588 f918 89852CE4 movl %eax, -7124(%rbp)
+ 16588 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 16589 .loc 2 1284 0
+ 16590 f91e 8B8524E4 movl -7132(%rbp), %eax
+ 16590 FFFF
+ 16591 f924 898528E4 movl %eax, -7128(%rbp)
+ 16591 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 16592 .loc 2 1285 0
+ 16593 f92a 8B8520E4 movl -7136(%rbp), %eax
+ 16593 FFFF
+ 16594 f930 898524E4 movl %eax, -7132(%rbp)
+ 16594 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 16595 .loc 2 1286 0
+ 16596 f936 C78520E4 movl $0, -7136(%rbp)
+ 16596 FFFF0000
+ 16596 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 16597 .loc 2 1287 0
+ 16598 f940 F30F6F85 movdqu -7136(%rbp), %xmm0
+ 16598 20E4FFFF
+ 16599 .LBE2121:
+ 16600 .LBE2120:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16601 .loc 2 1567 0
+ 16602 f948 660F7F85 movdqa %xmm0, -8560(%rbp)
+ 16602 90DEFFFF
+ 16603 f950 660F6F85 movdqa -8560(%rbp), %xmm0
+ 16603 90DEFFFF
+ 16604 f958 660FEF85 pxor -3280(%rbp), %xmm0
+ 16604 30F3FFFF
+ 16605 f960 F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 16605 30F3FFFF
+ 16606 f968 660F6F85 movdqa -8560(%rbp), %xmm0
+ 16606 90DEFFFF
+ 16607 f970 F30F7F85 movdqu %xmm0, -3248(%rbp)
+ 16607 50F3FFFF
+ 16608 .LBB2122:
+ 16609 .LBB2123:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 517
+
+
+ 16610 .loc 2 1282 0
+ 16611 f978 F30F6F85 movdqu -3248(%rbp), %xmm0
+ 16611 50F3FFFF
+ 16612 f980 F30F7F85 movdqu %xmm0, -7120(%rbp)
+ 16612 30E4FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 16613 .loc 2 1283 0
+ 16614 f988 8B8538E4 movl -7112(%rbp), %eax
+ 16614 FFFF
+ 16615 f98e 89853CE4 movl %eax, -7108(%rbp)
+ 16615 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 16616 .loc 2 1284 0
+ 16617 f994 8B8534E4 movl -7116(%rbp), %eax
+ 16617 FFFF
+ 16618 f99a 898538E4 movl %eax, -7112(%rbp)
+ 16618 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 16619 .loc 2 1285 0
+ 16620 f9a0 8B8530E4 movl -7120(%rbp), %eax
+ 16620 FFFF
+ 16621 f9a6 898534E4 movl %eax, -7116(%rbp)
+ 16621 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 16622 .loc 2 1286 0
+ 16623 f9ac C78530E4 movl $0, -7120(%rbp)
+ 16623 FFFF0000
+ 16623 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 16624 .loc 2 1287 0
+ 16625 f9b6 F30F6F85 movdqu -7120(%rbp), %xmm0
+ 16625 30E4FFFF
+ 16626 .LBE2123:
+ 16627 .LBE2122:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16628 .loc 2 1568 0
+ 16629 f9be 660F7F85 movdqa %xmm0, -8560(%rbp)
+ 16629 90DEFFFF
+ 16630 f9c6 660F6F85 movdqa -8560(%rbp), %xmm0
+ 16630 90DEFFFF
+ 16631 f9ce 660FEF85 pxor -3280(%rbp), %xmm0
+ 16631 30F3FFFF
+ 16632 f9d6 F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 16632 30F3FFFF
+ 16633 f9de 660F6F85 movdqa -8560(%rbp), %xmm0
+ 16633 90DEFFFF
+ 16634 f9e6 F30F7F85 movdqu %xmm0, -3232(%rbp)
+ 16634 60F3FFFF
+ 16635 .LBB2124:
+ 16636 .LBB2125:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 16637 .loc 2 1282 0
+ 16638 f9ee F30F6F85 movdqu -3232(%rbp), %xmm0
+ 16638 60F3FFFF
+ 16639 f9f6 F30F7F85 movdqu %xmm0, -7104(%rbp)
+ 16639 40E4FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+
GAS LISTING /tmp/ccMa7HLZ.s page 518
+
+
+ 16640 .loc 2 1283 0
+ 16641 f9fe 8B8548E4 movl -7096(%rbp), %eax
+ 16641 FFFF
+ 16642 fa04 89854CE4 movl %eax, -7092(%rbp)
+ 16642 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 16643 .loc 2 1284 0
+ 16644 fa0a 8B8544E4 movl -7100(%rbp), %eax
+ 16644 FFFF
+ 16645 fa10 898548E4 movl %eax, -7096(%rbp)
+ 16645 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 16646 .loc 2 1285 0
+ 16647 fa16 8B8540E4 movl -7104(%rbp), %eax
+ 16647 FFFF
+ 16648 fa1c 898544E4 movl %eax, -7100(%rbp)
+ 16648 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 16649 .loc 2 1286 0
+ 16650 fa22 C78540E4 movl $0, -7104(%rbp)
+ 16650 FFFF0000
+ 16650 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 16651 .loc 2 1287 0
+ 16652 fa2c F30F6F85 movdqu -7104(%rbp), %xmm0
+ 16652 40E4FFFF
+ 16653 .LBE2125:
+ 16654 .LBE2124:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16655 .loc 2 1569 0
+ 16656 fa34 660F7F85 movdqa %xmm0, -8560(%rbp)
+ 16656 90DEFFFF
+ 16657 fa3c 660F6F85 movdqa -8560(%rbp), %xmm0
+ 16657 90DEFFFF
+ 16658 fa44 660FEF85 pxor -3280(%rbp), %xmm0
+ 16658 30F3FFFF
+ 16659 fa4c F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 16659 30F3FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 16660 .loc 2 1571 0
+ 16661 fa54 F30F6F85 movdqu -3280(%rbp), %xmm0
+ 16661 30F3FFFF
+ 16662 .LBE2119:
+ 16663 .LBE2118:
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(7); /* k28 : k29 : k30 : k31 */
+ 16664 .loc 2 1931 0
+ 16665 fa5c F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 16665 D0E9FFFF
+ 16666 fa64 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 16666 D0E9FFFF
+ 16667 fa6c F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 16667 80F3FFFF
+ 16668 fa74 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 16668 E0E9FFFF
+ 16669 fa7c F30F7F85 movdqu %xmm0, -3216(%rbp)
+ 16669 70F3FFFF
+ 16670 .LBB2126:
+
GAS LISTING /tmp/ccMa7HLZ.s page 519
+
+
+ 16671 .LBB2127:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16672 .loc 2 178 0
+ 16673 fa84 F30F6F85 movdqu -3216(%rbp), %xmm0
+ 16673 70F3FFFF
+ 16674 fa8c F30F6F8D movdqu -3200(%rbp), %xmm1
+ 16674 80F3FFFF
+ 16675 fa94 660FEFC1 pxor %xmm1, %xmm0
+ 16676 .LBE2127:
+ 16677 .LBE2126:
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(7); /* k28 : k29 : k30 : k31 */
+ 16678 .loc 2 1931 0
+ 16679 fa98 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 16679 D0E9FFFF
+ 16680 faa0 488B85D8 movq -8232(%rbp), %rax
+ 16680 DFFFFF
+ 16681 faa7 4883C070 addq $112, %rax
+ 16682 faab F30F6F85 movdqu -5680(%rbp), %xmm0
+ 16682 D0E9FFFF
+ 16683 fab3 F30F7F00 movdqu %xmm0, (%rax)
+ 16684 fab7 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 16684 D0E9FFFF
+ 16685 fabf F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 16685 A0F3FFFF
+ 16686 .LBB2128:
+ 16687 .LBB2129:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 16688 .loc 2 1681 0
+ 16689 fac7 B8080000 movl $8, %eax
+ 16689 00
+ 16690 facc 660F6F05 movdqa vec_00(%rip), %xmm0
+ 16690 00000000
+ 16691 fad4 F30F7F85 movdqu %xmm0, -3136(%rbp)
+ 16691 C0F3FFFF
+ 16692 fadc 8985BCF3 movl %eax, -3140(%rbp)
+ 16692 FFFF
+ 16693 .LBB2130:
+ 16694 .LBB2131:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 16695 .loc 2 522 0
+ 16696 fae2 F30F6F85 movdqu -3136(%rbp), %xmm0
+ 16696 C0F3FFFF
+ 16697 faea F30F7F85 movdqu %xmm0, -7024(%rbp)
+ 16697 90E4FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 16698 .loc 2 523 0
+ 16699 faf2 B8030000 movl $3, %eax
+ 16699 00
+ 16700 faf7 4898 cltq
+ 16701 faf9 8B95BCF3 movl -3140(%rbp), %edx
+ 16701 FFFF
+ 16702 faff 89948590 movl %edx, -7024(%rbp,%rax,4)
+ 16702 E4FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 16703 .loc 2 524 0
+ 16704 fb06 F30F6F85 movdqu -7024(%rbp), %xmm0
+ 16704 90E4FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 520
+
+
+ 16705 fb0e F30F7F85 movdqu %xmm0, -3136(%rbp)
+ 16705 C0F3FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 16706 .loc 2 526 0
+ 16707 fb16 F30F6F85 movdqu -3136(%rbp), %xmm0
+ 16707 C0F3FFFF
+ 16708 .LBE2131:
+ 16709 .LBE2130:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 16710 .loc 2 1681 0
+ 16711 fb1e 660F7F85 movdqa %xmm0, -8528(%rbp)
+ 16711 B0DEFFFF
+ 16712 fb26 F30F6F85 movdqu -3168(%rbp), %xmm0
+ 16712 A0F3FFFF
+ 16713 fb2e F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 16713 D0F3FFFF
+ 16714 fb36 F30F6F85 movdqu -3120(%rbp), %xmm0
+ 16714 D0F3FFFF
+ 16715 fb3e F30F7F85 movdqu %xmm0, -3088(%rbp)
+ 16715 F0F3FFFF
+ 16716 fb46 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 16716 000000
+ 16717 fb4d 488985E8 movq %rax, -3096(%rbp)
+ 16717 F3FFFF
+ 16718 .LBB2132:
+ 16719 .LBB2133:
+ 16720 .LBB2134:
+ 16721 .LBB2135:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 16722 .loc 2 851 0
+ 16723 fb54 660F6F05 movdqa vec_00(%rip), %xmm0
+ 16723 00000000
+ 16724 fb5c F30F7F85 movdqu %xmm0, -3056(%rbp)
+ 16724 10F4FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 16725 .loc 2 854 0
+ 16726 fb64 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 16726 00000000
+ 16727 fb6c F30F6F8D movdqu -3088(%rbp), %xmm1
+ 16727 F0F3FFFF
+ 16728 fb74 F30F7F8D movdqu %xmm1, -2976(%rbp)
+ 16728 60F4FFFF
+ 16729 fb7c F30F7F85 movdqu %xmm0, -2992(%rbp)
+ 16729 50F4FFFF
+ 16730 .LBB2136:
+ 16731 .LBB2137:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 16732 .loc 2 206 0
+ 16733 fb84 F30F6F85 movdqu -2992(%rbp), %xmm0
+ 16733 50F4FFFF
+ 16734 fb8c F30F6F8D movdqu -2976(%rbp), %xmm1
+ 16734 60F4FFFF
+ 16735 fb94 660FDBC1 pand %xmm1, %xmm0
+ 16736 .LBE2137:
+ 16737 .LBE2136:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 16738 .loc 2 854 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 521
+
+
+ 16739 fb98 F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 16739 40F4FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 16740 .loc 2 862 0
+ 16741 fba0 660F6F05 movdqa vec_10(%rip), %xmm0
+ 16741 00000000
+ 16742 fba8 F30F6F8D movdqu -3088(%rbp), %xmm1
+ 16742 F0F3FFFF
+ 16743 fbb0 F30F7F8D movdqu %xmm1, -2944(%rbp)
+ 16743 80F4FFFF
+ 16744 fbb8 F30F7F85 movdqu %xmm0, -2960(%rbp)
+ 16744 70F4FFFF
+ 16745 .LBB2138:
+ 16746 .loc 2 2642 0
+ 16747 fbc0 0FB68580 movzbl -2944(%rbp), %eax
+ 16747 F4FFFF
+ 16748 fbc7 0FB69570 movzbl -2960(%rbp), %edx
+ 16748 F4FFFF
+ 16749 fbce 0FB6C0 movzbl %al, %eax
+ 16750 fbd1 6689853E movw %ax, -8898(%rbp)
+ 16750 DDFFFF
+ 16751 fbd8 0FB7853E movzwl -8898(%rbp), %eax
+ 16751 DDFFFF
+ 16752 fbdf F6F2 divb %dl
+ 16753 fbe1 4189C7 movl %eax, %r15d
+ 16754 fbe4 0FB68581 movzbl -2943(%rbp), %eax
+ 16754 F4FFFF
+ 16755 fbeb 0FB69571 movzbl -2959(%rbp), %edx
+ 16755 F4FFFF
+ 16756 fbf2 0FB6C0 movzbl %al, %eax
+ 16757 fbf5 6689853E movw %ax, -8898(%rbp)
+ 16757 DDFFFF
+ 16758 fbfc 0FB7853E movzwl -8898(%rbp), %eax
+ 16758 DDFFFF
+ 16759 fc03 F6F2 divb %dl
+ 16760 fc05 8885CFDE movb %al, -8497(%rbp)
+ 16760 FFFF
+ 16761 fc0b 0FB68582 movzbl -2942(%rbp), %eax
+ 16761 F4FFFF
+ 16762 fc12 0FB69572 movzbl -2958(%rbp), %edx
+ 16762 F4FFFF
+ 16763 fc19 0FB6C0 movzbl %al, %eax
+ 16764 fc1c 6689853E movw %ax, -8898(%rbp)
+ 16764 DDFFFF
+ 16765 fc23 0FB7853E movzwl -8898(%rbp), %eax
+ 16765 DDFFFF
+ 16766 fc2a F6F2 divb %dl
+ 16767 fc2c 8885CEDE movb %al, -8498(%rbp)
+ 16767 FFFF
+ 16768 fc32 0FB68583 movzbl -2941(%rbp), %eax
+ 16768 F4FFFF
+ 16769 fc39 0FB69573 movzbl -2957(%rbp), %edx
+ 16769 F4FFFF
+ 16770 fc40 0FB6C0 movzbl %al, %eax
+ 16771 fc43 6689853E movw %ax, -8898(%rbp)
+ 16771 DDFFFF
+ 16772 fc4a 0FB7853E movzwl -8898(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 522
+
+
+ 16772 DDFFFF
+ 16773 fc51 F6F2 divb %dl
+ 16774 fc53 8885CDDE movb %al, -8499(%rbp)
+ 16774 FFFF
+ 16775 fc59 0FB68584 movzbl -2940(%rbp), %eax
+ 16775 F4FFFF
+ 16776 fc60 0FB69574 movzbl -2956(%rbp), %edx
+ 16776 F4FFFF
+ 16777 fc67 0FB6C0 movzbl %al, %eax
+ 16778 fc6a 6689853E movw %ax, -8898(%rbp)
+ 16778 DDFFFF
+ 16779 fc71 0FB7853E movzwl -8898(%rbp), %eax
+ 16779 DDFFFF
+ 16780 fc78 F6F2 divb %dl
+ 16781 fc7a 8885CCDE movb %al, -8500(%rbp)
+ 16781 FFFF
+ 16782 fc80 0FB68585 movzbl -2939(%rbp), %eax
+ 16782 F4FFFF
+ 16783 fc87 0FB69575 movzbl -2955(%rbp), %edx
+ 16783 F4FFFF
+ 16784 fc8e 0FB6C0 movzbl %al, %eax
+ 16785 fc91 6689853E movw %ax, -8898(%rbp)
+ 16785 DDFFFF
+ 16786 fc98 0FB7853E movzwl -8898(%rbp), %eax
+ 16786 DDFFFF
+ 16787 fc9f F6F2 divb %dl
+ 16788 fca1 4189C1 movl %eax, %r9d
+ 16789 fca4 0FB68586 movzbl -2938(%rbp), %eax
+ 16789 F4FFFF
+ 16790 fcab 0FB69576 movzbl -2954(%rbp), %edx
+ 16790 F4FFFF
+ 16791 fcb2 0FB6C0 movzbl %al, %eax
+ 16792 fcb5 6689853E movw %ax, -8898(%rbp)
+ 16792 DDFFFF
+ 16793 fcbc 0FB7853E movzwl -8898(%rbp), %eax
+ 16793 DDFFFF
+ 16794 fcc3 F6F2 divb %dl
+ 16795 fcc5 89C7 movl %eax, %edi
+ 16796 fcc7 0FB68587 movzbl -2937(%rbp), %eax
+ 16796 F4FFFF
+ 16797 fcce 0FB69577 movzbl -2953(%rbp), %edx
+ 16797 F4FFFF
+ 16798 fcd5 0FB6C0 movzbl %al, %eax
+ 16799 fcd8 6689853E movw %ax, -8898(%rbp)
+ 16799 DDFFFF
+ 16800 fcdf 0FB7853E movzwl -8898(%rbp), %eax
+ 16800 DDFFFF
+ 16801 fce6 F6F2 divb %dl
+ 16802 fce8 89C3 movl %eax, %ebx
+ 16803 fcea 0FB68588 movzbl -2936(%rbp), %eax
+ 16803 F4FFFF
+ 16804 fcf1 0FB69578 movzbl -2952(%rbp), %edx
+ 16804 F4FFFF
+ 16805 fcf8 0FB6C0 movzbl %al, %eax
+ 16806 fcfb 6689853E movw %ax, -8898(%rbp)
+ 16806 DDFFFF
+ 16807 fd02 0FB7853E movzwl -8898(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 523
+
+
+ 16807 DDFFFF
+ 16808 fd09 F6F2 divb %dl
+ 16809 fd0b 4189C2 movl %eax, %r10d
+ 16810 fd0e 0FB68589 movzbl -2935(%rbp), %eax
+ 16810 F4FFFF
+ 16811 fd15 0FB69579 movzbl -2951(%rbp), %edx
+ 16811 F4FFFF
+ 16812 fd1c 0FB6C0 movzbl %al, %eax
+ 16813 fd1f 6689853E movw %ax, -8898(%rbp)
+ 16813 DDFFFF
+ 16814 fd26 0FB7853E movzwl -8898(%rbp), %eax
+ 16814 DDFFFF
+ 16815 fd2d F6F2 divb %dl
+ 16816 fd2f 4189C3 movl %eax, %r11d
+ 16817 fd32 0FB6858A movzbl -2934(%rbp), %eax
+ 16817 F4FFFF
+ 16818 fd39 0FB6957A movzbl -2950(%rbp), %edx
+ 16818 F4FFFF
+ 16819 fd40 0FB6C0 movzbl %al, %eax
+ 16820 fd43 6689853E movw %ax, -8898(%rbp)
+ 16820 DDFFFF
+ 16821 fd4a 0FB7853E movzwl -8898(%rbp), %eax
+ 16821 DDFFFF
+ 16822 fd51 F6F2 divb %dl
+ 16823 fd53 4189C4 movl %eax, %r12d
+ 16824 fd56 0FB6858B movzbl -2933(%rbp), %eax
+ 16824 F4FFFF
+ 16825 fd5d 0FB6957B movzbl -2949(%rbp), %edx
+ 16825 F4FFFF
+ 16826 fd64 0FB6C0 movzbl %al, %eax
+ 16827 fd67 6689853E movw %ax, -8898(%rbp)
+ 16827 DDFFFF
+ 16828 fd6e 0FB7853E movzwl -8898(%rbp), %eax
+ 16828 DDFFFF
+ 16829 fd75 F6F2 divb %dl
+ 16830 fd77 4189C5 movl %eax, %r13d
+ 16831 fd7a 0FB6858C movzbl -2932(%rbp), %eax
+ 16831 F4FFFF
+ 16832 fd81 0FB6957C movzbl -2948(%rbp), %edx
+ 16832 F4FFFF
+ 16833 fd88 0FB6C0 movzbl %al, %eax
+ 16834 fd8b 6689853E movw %ax, -8898(%rbp)
+ 16834 DDFFFF
+ 16835 fd92 0FB7853E movzwl -8898(%rbp), %eax
+ 16835 DDFFFF
+ 16836 fd99 F6F2 divb %dl
+ 16837 fd9b 4189C6 movl %eax, %r14d
+ 16838 fd9e 0FB6858D movzbl -2931(%rbp), %eax
+ 16838 F4FFFF
+ 16839 fda5 0FB6957D movzbl -2947(%rbp), %edx
+ 16839 F4FFFF
+ 16840 fdac 0FB6C0 movzbl %al, %eax
+ 16841 fdaf 6689853E movw %ax, -8898(%rbp)
+ 16841 DDFFFF
+ 16842 fdb6 0FB7853E movzwl -8898(%rbp), %eax
+ 16842 DDFFFF
+ 16843 fdbd F6F2 divb %dl
+
GAS LISTING /tmp/ccMa7HLZ.s page 524
+
+
+ 16844 fdbf 4189C0 movl %eax, %r8d
+ 16845 fdc2 0FB6858E movzbl -2930(%rbp), %eax
+ 16845 F4FFFF
+ 16846 fdc9 0FB6957E movzbl -2946(%rbp), %edx
+ 16846 F4FFFF
+ 16847 fdd0 0FB6C0 movzbl %al, %eax
+ 16848 fdd3 6689853E movw %ax, -8898(%rbp)
+ 16848 DDFFFF
+ 16849 fdda 0FB7853E movzwl -8898(%rbp), %eax
+ 16849 DDFFFF
+ 16850 fde1 F6F2 divb %dl
+ 16851 fde3 89C6 movl %eax, %esi
+ 16852 fde5 0FB6858F movzbl -2929(%rbp), %eax
+ 16852 F4FFFF
+ 16853 fdec 0FB6957F movzbl -2945(%rbp), %edx
+ 16853 F4FFFF
+ 16854 fdf3 0FB6C0 movzbl %al, %eax
+ 16855 fdf6 6689853E movw %ax, -8898(%rbp)
+ 16855 DDFFFF
+ 16856 fdfd 0FB7853E movzwl -8898(%rbp), %eax
+ 16856 DDFFFF
+ 16857 fe04 F6F2 divb %dl
+ 16858 fe06 89C1 movl %eax, %ecx
+ 16859 .LBB2139:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 16860 .loc 2 346 0
+ 16861 fe08 0FB6D3 movzbl %bl, %edx
+ 16862 fe0b 400FB6C7 movzbl %dil, %eax
+ 16863 fe0f 48C1E208 salq $8, %rdx
+ 16864 fe13 4809C2 orq %rax, %rdx
+ 16865 fe16 410FB6C1 movzbl %r9b, %eax
+ 16866 fe1a 48C1E208 salq $8, %rdx
+ 16867 fe1e 4809C2 orq %rax, %rdx
+ 16868 fe21 0FB685CC movzbl -8500(%rbp), %eax
+ 16868 DEFFFF
+ 16869 fe28 48C1E208 salq $8, %rdx
+ 16870 fe2c 4809C2 orq %rax, %rdx
+ 16871 fe2f 0FB685CD movzbl -8499(%rbp), %eax
+ 16871 DEFFFF
+ 16872 fe36 48C1E208 salq $8, %rdx
+ 16873 fe3a 4809C2 orq %rax, %rdx
+ 16874 fe3d 0FB685CE movzbl -8498(%rbp), %eax
+ 16874 DEFFFF
+ 16875 fe44 48C1E208 salq $8, %rdx
+ 16876 fe48 4809C2 orq %rax, %rdx
+ 16877 fe4b 0FB685CF movzbl -8497(%rbp), %eax
+ 16877 DEFFFF
+ 16878 fe52 48C1E208 salq $8, %rdx
+ 16879 fe56 4809C2 orq %rax, %rdx
+ 16880 fe59 410FB6C7 movzbl %r15b, %eax
+ 16881 fe5d 48C1E208 salq $8, %rdx
+ 16882 fe61 4809C2 orq %rax, %rdx
+ 16883 fe64 0FB6C1 movzbl %cl, %eax
+ 16884 fe67 400FB6CE movzbl %sil, %ecx
+ 16885 fe6b 48C1E008 salq $8, %rax
+ 16886 fe6f 4809C8 orq %rcx, %rax
+ 16887 fe72 410FB6C8 movzbl %r8b, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 525
+
+
+ 16888 fe76 48C1E008 salq $8, %rax
+ 16889 fe7a 4809C8 orq %rcx, %rax
+ 16890 fe7d 410FB6CE movzbl %r14b, %ecx
+ 16891 fe81 48C1E008 salq $8, %rax
+ 16892 fe85 4809C8 orq %rcx, %rax
+ 16893 fe88 410FB6CD movzbl %r13b, %ecx
+ 16894 fe8c 48C1E008 salq $8, %rax
+ 16895 fe90 4809C8 orq %rcx, %rax
+ 16896 fe93 410FB6CC movzbl %r12b, %ecx
+ 16897 fe97 48C1E008 salq $8, %rax
+ 16898 fe9b 4809C8 orq %rcx, %rax
+ 16899 fe9e 410FB6CB movzbl %r11b, %ecx
+ 16900 fea2 48C1E008 salq $8, %rax
+ 16901 fea6 4809C8 orq %rcx, %rax
+ 16902 fea9 410FB6CA movzbl %r10b, %ecx
+ 16903 fead 48C1E008 salq $8, %rax
+ 16904 feb1 4809C8 orq %rcx, %rax
+ 16905 feb4 48899570 movq %rdx, -8848(%rbp)
+ 16905 DDFFFF
+ 16906 febb 48898578 movq %rax, -8840(%rbp)
+ 16906 DDFFFF
+ 16907 fec2 660F6F85 movdqa -8848(%rbp), %xmm0
+ 16907 70DDFFFF
+ 16908 .LBE2139:
+ 16909 .LBE2138:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 16910 .loc 2 862 0
+ 16911 feca F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 16911 30F4FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 16912 .loc 2 866 0
+ 16913 fed2 C7850CF4 movl $0, -3060(%rbp)
+ 16913 FFFF0000
+ 16913 0000
+ 16914 fedc E9860200 jmp .L396
+ 16914 00
+ 16915 .L405:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 16916 .loc 2 868 0
+ 16917 fee1 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 16917 00000000
+ 16918 fee9 F30F7F85 movdqu %xmm0, -2912(%rbp)
+ 16918 A0F4FFFF
+ 16919 fef1 F30F6F85 movdqu -3024(%rbp), %xmm0
+ 16919 30F4FFFF
+ 16920 fef9 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 16920 90F4FFFF
+ 16921 .LBB2140:
+ 16922 .LBB2141:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 16923 .loc 2 380 0
+ 16924 ff01 F30F6F85 movdqu -2912(%rbp), %xmm0
+ 16924 A0F4FFFF
+ 16925 ff09 F30F7F85 movdqu %xmm0, -6992(%rbp)
+ 16925 B0E4FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 16926 .loc 2 381 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 526
+
+
+ 16927 ff11 F30F6F85 movdqu -2928(%rbp), %xmm0
+ 16927 90F4FFFF
+ 16928 ff19 F30F7F85 movdqu %xmm0, -7008(%rbp)
+ 16928 A0E4FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 16929 .loc 2 383 0
+ 16930 ff21 C785BCF4 movl $0, -2884(%rbp)
+ 16930 FFFF0000
+ 16930 0000
+ 16931 ff2b EB5C jmp .L397
+ 16932 .L400:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 16933 .loc 2 385 0
+ 16934 ff2d 8B85BCF4 movl -2884(%rbp), %eax
+ 16934 FFFF
+ 16935 ff33 89C0 mov %eax, %eax
+ 16936 ff35 0FB68405 movzbl -7008(%rbp,%rax), %eax
+ 16936 A0E4FFFF
+ 16937 ff3d 84C0 testb %al, %al
+ 16938 ff3f 7912 jns .L398
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 16939 .loc 2 386 0
+ 16940 ff41 8B85BCF4 movl -2884(%rbp), %eax
+ 16940 FFFF
+ 16941 ff47 89C0 mov %eax, %eax
+ 16942 ff49 C68405C0 movb $0, -6976(%rbp,%rax)
+ 16942 E4FFFF00
+ 16943 ff51 EB2F jmp .L399
+ 16944 .L398:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 16945 .loc 2 388 0
+ 16946 ff53 8B8DBCF4 movl -2884(%rbp), %ecx
+ 16946 FFFF
+ 16947 ff59 8B85BCF4 movl -2884(%rbp), %eax
+ 16947 FFFF
+ 16948 ff5f 89C0 mov %eax, %eax
+ 16949 ff61 0FB68405 movzbl -7008(%rbp,%rax), %eax
+ 16949 A0E4FFFF
+ 16950 ff69 0FB6C0 movzbl %al, %eax
+ 16951 ff6c 83E00F andl $15, %eax
+ 16952 ff6f 4898 cltq
+ 16953 ff71 0FB69405 movzbl -6992(%rbp,%rax), %edx
+ 16953 B0E4FFFF
+ 16954 ff79 89C8 mov %ecx, %eax
+ 16955 ff7b 889405C0 movb %dl, -6976(%rbp,%rax)
+ 16955 E4FFFF
+ 16956 .L399:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 16957 .loc 2 383 0
+ 16958 ff82 8385BCF4 addl $1, -2884(%rbp)
+ 16958 FFFF01
+ 16959 .L397:
+ 16960 ff89 83BDBCF4 cmpl $15, -2884(%rbp)
+ 16960 FFFF0F
+ 16961 ff90 769B jbe .L400
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 16962 .loc 2 391 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 527
+
+
+ 16963 ff92 F30F6F85 movdqu -6976(%rbp), %xmm0
+ 16963 C0E4FFFF
+ 16964 .LBE2141:
+ 16965 .LBE2140:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 16966 .loc 2 868 0
+ 16967 ff9a F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 16967 20F4FFFF
+ 16968 ffa2 F30F6F85 movdqu -3008(%rbp), %xmm0
+ 16968 40F4FFFF
+ 16969 ffaa F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 16969 D0F4FFFF
+ 16970 ffb2 F30F6F85 movdqu -3040(%rbp), %xmm0
+ 16970 20F4FFFF
+ 16971 ffba F30F7F85 movdqu %xmm0, -2880(%rbp)
+ 16971 C0F4FFFF
+ 16972 .LBB2142:
+ 16973 .LBB2143:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 16974 .loc 2 234 0
+ 16975 ffc2 F30F6F85 movdqu -2880(%rbp), %xmm0
+ 16975 C0F4FFFF
+ 16976 ffca F30F6F8D movdqu -2864(%rbp), %xmm1
+ 16976 D0F4FFFF
+ 16977 ffd2 660FEBC1 por %xmm1, %xmm0
+ 16978 .LBE2143:
+ 16979 .LBE2142:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 16980 .loc 2 870 0
+ 16981 ffd6 F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 16981 20F4FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 16982 .loc 2 872 0
+ 16983 ffde 8B850CF4 mov -3060(%rbp), %eax
+ 16983 FFFF
+ 16984 ffe4 48C1E004 salq $4, %rax
+ 16985 ffe8 480385E8 addq -3096(%rbp), %rax
+ 16985 F3FFFF
+ 16986 ffef 660F6F00 movdqa (%rax), %xmm0
+ 16987 fff3 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 16987 F0F4FFFF
+ 16988 fffb F30F6F85 movdqu -3040(%rbp), %xmm0
+ 16988 20F4FFFF
+ 16989 10003 F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 16989 E0F4FFFF
+ 16990 .LBB2144:
+ 16991 .LBB2145:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 16992 .loc 2 380 0
+ 16993 1000b F30F6F85 movdqu -2832(%rbp), %xmm0
+ 16993 F0F4FFFF
+ 16994 10013 F30F7F85 movdqu %xmm0, -6944(%rbp)
+ 16994 E0E4FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 16995 .loc 2 381 0
+ 16996 1001b F30F6F85 movdqu -2848(%rbp), %xmm0
+ 16996 E0F4FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 528
+
+
+ 16997 10023 F30F7F85 movdqu %xmm0, -6960(%rbp)
+ 16997 D0E4FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 16998 .loc 2 383 0
+ 16999 1002b C7850CF5 movl $0, -2804(%rbp)
+ 16999 FFFF0000
+ 16999 0000
+ 17000 10035 EB5C jmp .L401
+ 17001 .L404:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 17002 .loc 2 385 0
+ 17003 10037 8B850CF5 movl -2804(%rbp), %eax
+ 17003 FFFF
+ 17004 1003d 89C0 mov %eax, %eax
+ 17005 1003f 0FB68405 movzbl -6960(%rbp,%rax), %eax
+ 17005 D0E4FFFF
+ 17006 10047 84C0 testb %al, %al
+ 17007 10049 7912 jns .L402
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 17008 .loc 2 386 0
+ 17009 1004b 8B850CF5 movl -2804(%rbp), %eax
+ 17009 FFFF
+ 17010 10051 89C0 mov %eax, %eax
+ 17011 10053 C68405F0 movb $0, -6928(%rbp,%rax)
+ 17011 E4FFFF00
+ 17012 1005b EB2F jmp .L403
+ 17013 .L402:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 17014 .loc 2 388 0
+ 17015 1005d 8B8D0CF5 movl -2804(%rbp), %ecx
+ 17015 FFFF
+ 17016 10063 8B850CF5 movl -2804(%rbp), %eax
+ 17016 FFFF
+ 17017 10069 89C0 mov %eax, %eax
+ 17018 1006b 0FB68405 movzbl -6960(%rbp,%rax), %eax
+ 17018 D0E4FFFF
+ 17019 10073 0FB6C0 movzbl %al, %eax
+ 17020 10076 83E00F andl $15, %eax
+ 17021 10079 4898 cltq
+ 17022 1007b 0FB69405 movzbl -6944(%rbp,%rax), %edx
+ 17022 E0E4FFFF
+ 17023 10083 89C8 mov %ecx, %eax
+ 17024 10085 889405F0 movb %dl, -6928(%rbp,%rax)
+ 17024 E4FFFF
+ 17025 .L403:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 17026 .loc 2 383 0
+ 17027 1008c 83850CF5 addl $1, -2804(%rbp)
+ 17027 FFFF01
+ 17028 .L401:
+ 17029 10093 83BD0CF5 cmpl $15, -2804(%rbp)
+ 17029 FFFF0F
+ 17030 1009a 769B jbe .L404
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 17031 .loc 2 391 0
+ 17032 1009c F30F6F85 movdqu -6928(%rbp), %xmm0
+ 17032 F0E4FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 529
+
+
+ 17033 .LBE2145:
+ 17034 .LBE2144:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17035 .loc 2 872 0
+ 17036 100a4 F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 17036 20F4FFFF
+ 17037 100ac F30F6F85 movdqu -3056(%rbp), %xmm0
+ 17037 10F4FFFF
+ 17038 100b4 F30F7F85 movdqu %xmm0, -2784(%rbp)
+ 17038 20F5FFFF
+ 17039 100bc F30F6F85 movdqu -3040(%rbp), %xmm0
+ 17039 20F4FFFF
+ 17040 100c4 F30F7F85 movdqu %xmm0, -2800(%rbp)
+ 17040 10F5FFFF
+ 17041 .LBB2146:
+ 17042 .LBB2147:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 17043 .loc 2 234 0
+ 17044 100cc F30F6F85 movdqu -2800(%rbp), %xmm0
+ 17044 10F5FFFF
+ 17045 100d4 F30F6F8D movdqu -2784(%rbp), %xmm1
+ 17045 20F5FFFF
+ 17046 100dc 660FEBC1 por %xmm1, %xmm0
+ 17047 .LBE2147:
+ 17048 .LBE2146:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 17049 .loc 2 874 0
+ 17050 100e0 F30F7F85 movdqu %xmm0, -3056(%rbp)
+ 17050 10F4FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 17051 .loc 2 876 0
+ 17052 100e8 660F6F05 movdqa vec_01(%rip), %xmm0
+ 17052 00000000
+ 17053 100f0 F30F6F8D movdqu -3024(%rbp), %xmm1
+ 17053 30F4FFFF
+ 17054 100f8 F30F7F8D movdqu %xmm1, -2752(%rbp)
+ 17054 40F5FFFF
+ 17055 10100 F30F7F85 movdqu %xmm0, -2768(%rbp)
+ 17055 30F5FFFF
+ 17056 .LBB2148:
+ 17057 .LBB2149:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 17058 .loc 2 290 0
+ 17059 10108 F30F6F8D movdqu -2768(%rbp), %xmm1
+ 17059 30F5FFFF
+ 17060 10110 F30F6F85 movdqu -2752(%rbp), %xmm0
+ 17060 40F5FFFF
+ 17061 10118 660FF8C1 psubb %xmm1, %xmm0
+ 17062 .LBE2149:
+ 17063 .LBE2148:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 17064 .loc 2 876 0
+ 17065 1011c F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 17065 30F4FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17066 .loc 2 878 0
+ 17067 10124 660F6F05 movdqa vec_0F(%rip), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 530
+
+
+ 17067 00000000
+ 17068 1012c F30F6F8D movdqu -3024(%rbp), %xmm1
+ 17068 30F4FFFF
+ 17069 10134 F30F7F8D movdqu %xmm1, -2720(%rbp)
+ 17069 60F5FFFF
+ 17070 1013c F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 17070 50F5FFFF
+ 17071 .LBB2150:
+ 17072 .LBB2151:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 17073 .loc 2 206 0
+ 17074 10144 F30F6F85 movdqu -2736(%rbp), %xmm0
+ 17074 50F5FFFF
+ 17075 1014c F30F6F8D movdqu -2720(%rbp), %xmm1
+ 17075 60F5FFFF
+ 17076 10154 660FDBC1 pand %xmm1, %xmm0
+ 17077 .LBE2151:
+ 17078 .LBE2150:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17079 .loc 2 878 0
+ 17080 10158 F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 17080 30F4FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 17081 .loc 2 866 0
+ 17082 10160 83850CF4 addl $1, -3060(%rbp)
+ 17082 FFFF01
+ 17083 .L396:
+ 17084 10167 83BD0CF4 cmpl $15, -3060(%rbp)
+ 17084 FFFF0F
+ 17085 1016e 0F866DFD jbe .L405
+ 17085 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 17086 .loc 2 882 0
+ 17087 10174 F30F6F85 movdqu -3056(%rbp), %xmm0
+ 17087 10F4FFFF
+ 17088 .LBE2135:
+ 17089 .LBE2134:
+ 17090 .LBE2133:
+ 17091 .LBE2132:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 17092 .loc 2 1682 0
+ 17093 1017c 660F7F85 movdqa %xmm0, -8544(%rbp)
+ 17093 A0DEFFFF
+ 17094 .LBB2152:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 17095 .loc 2 1683 0
+ 17096 10184 660F6F85 movdqa -8544(%rbp), %xmm0
+ 17096 A0DEFFFF
+ 17097 1018c F30F7F85 movdqu %xmm0, -7040(%rbp)
+ 17097 80E4FFFF
+ 17098 10194 E8000000 call KDbgWriterGet at PLT
+ 17098 00
+ 17099 10199 4885C0 testq %rax, %rax
+ 17100 1019c 7479 je .L407
+ 17101 1019e BF010000 movl $1, %edi
+ 17101 00
+ 17102 101a3 E8000000 call KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 531
+
+
+ 17102 00
+ 17103 101a8 4889C6 movq %rax, %rsi
+ 17104 101ab BF100000 movl $16, %edi
+ 17104 00
+ 17105 101b0 E8000000 call KDbgTestModConds at PLT
+ 17105 00
+ 17106 101b5 84C0 testb %al, %al
+ 17107 101b7 745E je .L407
+ 17108 101b9 8B858CE4 movl -7028(%rbp), %eax
+ 17108 FFFF
+ 17109 101bf 89C7 movl %eax, %edi
+ 17110 101c1 E83AFEFE call bswap_32
+ 17110 FF
+ 17111 101c6 4189C5 movl %eax, %r13d
+ 17112 101c9 8B8588E4 movl -7032(%rbp), %eax
+ 17112 FFFF
+ 17113 101cf 89C7 movl %eax, %edi
+ 17114 101d1 E82AFEFE call bswap_32
+ 17114 FF
+ 17115 101d6 4189C4 movl %eax, %r12d
+ 17116 101d9 8B8584E4 movl -7036(%rbp), %eax
+ 17116 FFFF
+ 17117 101df 89C7 movl %eax, %edi
+ 17118 101e1 E81AFEFE call bswap_32
+ 17118 FF
+ 17119 101e6 89C3 movl %eax, %ebx
+ 17120 101e8 8B8580E4 movl -7040(%rbp), %eax
+ 17120 FFFF
+ 17121 101ee 89C7 movl %eax, %edi
+ 17122 101f0 E80BFEFE call bswap_32
+ 17122 FF
+ 17123 101f5 4589E9 movl %r13d, %r9d
+ 17124 101f8 4589E0 movl %r12d, %r8d
+ 17125 101fb 89D9 movl %ebx, %ecx
+ 17126 101fd 89C2 movl %eax, %edx
+ 17127 101ff 488D3500 leaq .LC0(%rip), %rsi
+ 17127 000000
+ 17128 10206 488D3D00 leaq .LC1(%rip), %rdi
+ 17128 000000
+ 17129 1020d B8000000 movl $0, %eax
+ 17129 00
+ 17130 10212 E8000000 call KDbgMsg at PLT
+ 17130 00
+ 17131 .L407:
+ 17132 10217 660F6F85 movdqa -8544(%rbp), %xmm0
+ 17132 A0DEFFFF
+ 17133 1021f F30F7F85 movdqu %xmm0, -2704(%rbp)
+ 17133 70F5FFFF
+ 17134 .LBE2152:
+ 17135 .LBB2153:
+ 17136 .LBB2154:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17137 .loc 2 667 0
+ 17138 10227 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 17138 00000000
+ 17139 1022f F30F6F8D movdqu -2704(%rbp), %xmm1
+ 17139 70F5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 532
+
+
+ 17140 10237 F30F7F8D movdqu %xmm1, -2672(%rbp)
+ 17140 90F5FFFF
+ 17141 1023f F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 17141 80F5FFFF
+ 17142 .LBB2155:
+ 17143 .LBB2156:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 17144 .loc 2 380 0
+ 17145 10247 F30F6F85 movdqu -2672(%rbp), %xmm0
+ 17145 90F5FFFF
+ 17146 1024f F30F7F85 movdqu %xmm0, -6896(%rbp)
+ 17146 10E5FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 17147 .loc 2 381 0
+ 17148 10257 F30F6F85 movdqu -2688(%rbp), %xmm0
+ 17148 80F5FFFF
+ 17149 1025f F30F7F85 movdqu %xmm0, -6912(%rbp)
+ 17149 00E5FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 17150 .loc 2 383 0
+ 17151 10267 C785ACF5 movl $0, -2644(%rbp)
+ 17151 FFFF0000
+ 17151 0000
+ 17152 10271 EB5C jmp .L408
+ 17153 .L411:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 17154 .loc 2 385 0
+ 17155 10273 8B85ACF5 movl -2644(%rbp), %eax
+ 17155 FFFF
+ 17156 10279 89C0 mov %eax, %eax
+ 17157 1027b 0FB68405 movzbl -6912(%rbp,%rax), %eax
+ 17157 00E5FFFF
+ 17158 10283 84C0 testb %al, %al
+ 17159 10285 7912 jns .L409
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 17160 .loc 2 386 0
+ 17161 10287 8B85ACF5 movl -2644(%rbp), %eax
+ 17161 FFFF
+ 17162 1028d 89C0 mov %eax, %eax
+ 17163 1028f C6840520 movb $0, -6880(%rbp,%rax)
+ 17163 E5FFFF00
+ 17164 10297 EB2F jmp .L410
+ 17165 .L409:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 17166 .loc 2 388 0
+ 17167 10299 8B8DACF5 movl -2644(%rbp), %ecx
+ 17167 FFFF
+ 17168 1029f 8B85ACF5 movl -2644(%rbp), %eax
+ 17168 FFFF
+ 17169 102a5 89C0 mov %eax, %eax
+ 17170 102a7 0FB68405 movzbl -6912(%rbp,%rax), %eax
+ 17170 00E5FFFF
+ 17171 102af 0FB6C0 movzbl %al, %eax
+ 17172 102b2 83E00F andl $15, %eax
+ 17173 102b5 4898 cltq
+ 17174 102b7 0FB69405 movzbl -6896(%rbp,%rax), %edx
+ 17174 10E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 533
+
+
+ 17175 102bf 89C8 mov %ecx, %eax
+ 17176 102c1 88940520 movb %dl, -6880(%rbp,%rax)
+ 17176 E5FFFF
+ 17177 .L410:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 17178 .loc 2 383 0
+ 17179 102c8 8385ACF5 addl $1, -2644(%rbp)
+ 17179 FFFF01
+ 17180 .L408:
+ 17181 102cf 83BDACF5 cmpl $15, -2644(%rbp)
+ 17181 FFFF0F
+ 17182 102d6 769B jbe .L411
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 17183 .loc 2 391 0
+ 17184 102d8 F30F6F85 movdqu -6880(%rbp), %xmm0
+ 17184 20E5FFFF
+ 17185 .LBE2156:
+ 17186 .LBE2155:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17187 .loc 2 667 0
+ 17188 102e0 F30F7F85 movdqu %xmm0, -2704(%rbp)
+ 17188 70F5FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 17189 .loc 2 668 0
+ 17190 102e8 F30F6F85 movdqu -2704(%rbp), %xmm0
+ 17190 70F5FFFF
+ 17191 .LBE2154:
+ 17192 .LBE2153:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 17193 .loc 2 1684 0
+ 17194 102f0 660F7F85 movdqa %xmm0, -8544(%rbp)
+ 17194 A0DEFFFF
+ 17195 .LBB2157:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 17196 .loc 2 1685 0
+ 17197 102f8 660F6F85 movdqa -8544(%rbp), %xmm0
+ 17197 A0DEFFFF
+ 17198 10300 F30F7F85 movdqu %xmm0, -7056(%rbp)
+ 17198 70E4FFFF
+ 17199 10308 E8000000 call KDbgWriterGet at PLT
+ 17199 00
+ 17200 1030d 4885C0 testq %rax, %rax
+ 17201 10310 7479 je .L413
+ 17202 10312 BF010000 movl $1, %edi
+ 17202 00
+ 17203 10317 E8000000 call KDbgCondToFlag at PLT
+ 17203 00
+ 17204 1031c 4889C6 movq %rax, %rsi
+ 17205 1031f BF100000 movl $16, %edi
+ 17205 00
+ 17206 10324 E8000000 call KDbgTestModConds at PLT
+ 17206 00
+ 17207 10329 84C0 testb %al, %al
+ 17208 1032b 745E je .L413
+ 17209 1032d 8B857CE4 movl -7044(%rbp), %eax
+ 17209 FFFF
+ 17210 10333 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 534
+
+
+ 17211 10335 E8C6FCFE call bswap_32
+ 17211 FF
+ 17212 1033a 4189C5 movl %eax, %r13d
+ 17213 1033d 8B8578E4 movl -7048(%rbp), %eax
+ 17213 FFFF
+ 17214 10343 89C7 movl %eax, %edi
+ 17215 10345 E8B6FCFE call bswap_32
+ 17215 FF
+ 17216 1034a 4189C4 movl %eax, %r12d
+ 17217 1034d 8B8574E4 movl -7052(%rbp), %eax
+ 17217 FFFF
+ 17218 10353 89C7 movl %eax, %edi
+ 17219 10355 E8A6FCFE call bswap_32
+ 17219 FF
+ 17220 1035a 89C3 movl %eax, %ebx
+ 17221 1035c 8B8570E4 movl -7056(%rbp), %eax
+ 17221 FFFF
+ 17222 10362 89C7 movl %eax, %edi
+ 17223 10364 E897FCFE call bswap_32
+ 17223 FF
+ 17224 10369 4589E9 movl %r13d, %r9d
+ 17225 1036c 4589E0 movl %r12d, %r8d
+ 17226 1036f 89D9 movl %ebx, %ecx
+ 17227 10371 89C2 movl %eax, %edx
+ 17228 10373 488D3500 leaq .LC2(%rip), %rsi
+ 17228 000000
+ 17229 1037a 488D3D00 leaq .LC1(%rip), %rdi
+ 17229 000000
+ 17230 10381 B8000000 movl $0, %eax
+ 17230 00
+ 17231 10386 E8000000 call KDbgMsg at PLT
+ 17231 00
+ 17232 .L413:
+ 17233 1038b 660F6F85 movdqa -8544(%rbp), %xmm0
+ 17233 A0DEFFFF
+ 17234 10393 F30F7F85 movdqu %xmm0, -2624(%rbp)
+ 17234 C0F5FFFF
+ 17235 1039b 660F6F85 movdqa -8528(%rbp), %xmm0
+ 17235 B0DEFFFF
+ 17236 103a3 F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 17236 B0F5FFFF
+ 17237 .LBE2157:
+ 17238 .LBB2158:
+ 17239 .LBB2159:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 17240 .loc 2 178 0
+ 17241 103ab F30F6F85 movdqu -2640(%rbp), %xmm0
+ 17241 B0F5FFFF
+ 17242 103b3 F30F6F8D movdqu -2624(%rbp), %xmm1
+ 17242 C0F5FFFF
+ 17243 103bb 660FEFC1 pxor %xmm1, %xmm0
+ 17244 .LBE2159:
+ 17245 .LBE2158:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 17246 .loc 2 1686 0
+ 17247 103bf 660F7F85 movdqa %xmm0, -8544(%rbp)
+ 17247 A0DEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 535
+
+
+ 17248 .LBB2160:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 17249 .loc 2 1687 0
+ 17250 103c7 660F6F85 movdqa -8544(%rbp), %xmm0
+ 17250 A0DEFFFF
+ 17251 103cf F30F7F85 movdqu %xmm0, -7072(%rbp)
+ 17251 60E4FFFF
+ 17252 103d7 E8000000 call KDbgWriterGet at PLT
+ 17252 00
+ 17253 103dc 4885C0 testq %rax, %rax
+ 17254 103df 7479 je .L415
+ 17255 103e1 BF010000 movl $1, %edi
+ 17255 00
+ 17256 103e6 E8000000 call KDbgCondToFlag at PLT
+ 17256 00
+ 17257 103eb 4889C6 movq %rax, %rsi
+ 17258 103ee BF100000 movl $16, %edi
+ 17258 00
+ 17259 103f3 E8000000 call KDbgTestModConds at PLT
+ 17259 00
+ 17260 103f8 84C0 testb %al, %al
+ 17261 103fa 745E je .L415
+ 17262 103fc 8B856CE4 movl -7060(%rbp), %eax
+ 17262 FFFF
+ 17263 10402 89C7 movl %eax, %edi
+ 17264 10404 E8F7FBFE call bswap_32
+ 17264 FF
+ 17265 10409 4189C5 movl %eax, %r13d
+ 17266 1040c 8B8568E4 movl -7064(%rbp), %eax
+ 17266 FFFF
+ 17267 10412 89C7 movl %eax, %edi
+ 17268 10414 E8E7FBFE call bswap_32
+ 17268 FF
+ 17269 10419 4189C4 movl %eax, %r12d
+ 17270 1041c 8B8564E4 movl -7068(%rbp), %eax
+ 17270 FFFF
+ 17271 10422 89C7 movl %eax, %edi
+ 17272 10424 E8D7FBFE call bswap_32
+ 17272 FF
+ 17273 10429 89C3 movl %eax, %ebx
+ 17274 1042b 8B8560E4 movl -7072(%rbp), %eax
+ 17274 FFFF
+ 17275 10431 89C7 movl %eax, %edi
+ 17276 10433 E8C8FBFE call bswap_32
+ 17276 FF
+ 17277 10438 4589E9 movl %r13d, %r9d
+ 17278 1043b 4589E0 movl %r12d, %r8d
+ 17279 1043e 89D9 movl %ebx, %ecx
+ 17280 10440 89C2 movl %eax, %edx
+ 17281 10442 488D3500 leaq .LC3(%rip), %rsi
+ 17281 000000
+ 17282 10449 488D3D00 leaq .LC1(%rip), %rdi
+ 17282 000000
+ 17283 10450 B8000000 movl $0, %eax
+ 17283 00
+ 17284 10455 E8000000 call KDbgMsg at PLT
+ 17284 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 536
+
+
+ 17285 .L415:
+ 17286 1045a 660F6F85 movdqa -8544(%rbp), %xmm0
+ 17286 A0DEFFFF
+ 17287 10462 F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 17287 D0F5FFFF
+ 17288 .LBE2160:
+ 17289 .LBB2161:
+ 17290 .LBB2162:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 17291 .loc 2 1357 0
+ 17292 1046a F30F6F85 movdqu -2608(%rbp), %xmm0
+ 17292 D0F5FFFF
+ 17293 10472 F30F7F85 movdqu %xmm0, -6864(%rbp)
+ 17293 30E5FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 17294 .loc 2 1358 0
+ 17295 1047a 8B853CE5 movl -6852(%rbp), %eax
+ 17295 FFFF
+ 17296 10480 898538E5 movl %eax, -6856(%rbp)
+ 17296 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 17297 .loc 2 1359 0
+ 17298 10486 8B853CE5 movl -6852(%rbp), %eax
+ 17298 FFFF
+ 17299 1048c 898534E5 movl %eax, -6860(%rbp)
+ 17299 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 17300 .loc 2 1360 0
+ 17301 10492 8B853CE5 movl -6852(%rbp), %eax
+ 17301 FFFF
+ 17302 10498 898530E5 movl %eax, -6864(%rbp)
+ 17302 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 17303 .loc 2 1361 0
+ 17304 1049e F30F6F85 movdqu -6864(%rbp), %xmm0
+ 17304 30E5FFFF
+ 17305 .LBE2162:
+ 17306 .LBE2161:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 17307 .loc 2 1688 0
+ 17308 104a6 660F7F85 movdqa %xmm0, -8544(%rbp)
+ 17308 A0DEFFFF
+ 17309 .LBB2163:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 17310 .loc 2 1689 0
+ 17311 104ae 660F6F85 movdqa -8544(%rbp), %xmm0
+ 17311 A0DEFFFF
+ 17312 104b6 F30F7F85 movdqu %xmm0, -7088(%rbp)
+ 17312 50E4FFFF
+ 17313 104be E8000000 call KDbgWriterGet at PLT
+ 17313 00
+ 17314 104c3 4885C0 testq %rax, %rax
+ 17315 104c6 7479 je .L417
+ 17316 104c8 BF010000 movl $1, %edi
+ 17316 00
+ 17317 104cd E8000000 call KDbgCondToFlag at PLT
+ 17317 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 537
+
+
+ 17318 104d2 4889C6 movq %rax, %rsi
+ 17319 104d5 BF100000 movl $16, %edi
+ 17319 00
+ 17320 104da E8000000 call KDbgTestModConds at PLT
+ 17320 00
+ 17321 104df 84C0 testb %al, %al
+ 17322 104e1 745E je .L417
+ 17323 104e3 8B855CE4 movl -7076(%rbp), %eax
+ 17323 FFFF
+ 17324 104e9 89C7 movl %eax, %edi
+ 17325 104eb E810FBFE call bswap_32
+ 17325 FF
+ 17326 104f0 4189C5 movl %eax, %r13d
+ 17327 104f3 8B8558E4 movl -7080(%rbp), %eax
+ 17327 FFFF
+ 17328 104f9 89C7 movl %eax, %edi
+ 17329 104fb E800FBFE call bswap_32
+ 17329 FF
+ 17330 10500 4189C4 movl %eax, %r12d
+ 17331 10503 8B8554E4 movl -7084(%rbp), %eax
+ 17331 FFFF
+ 17332 10509 89C7 movl %eax, %edi
+ 17333 1050b E8F0FAFE call bswap_32
+ 17333 FF
+ 17334 10510 89C3 movl %eax, %ebx
+ 17335 10512 8B8550E4 movl -7088(%rbp), %eax
+ 17335 FFFF
+ 17336 10518 89C7 movl %eax, %edi
+ 17337 1051a E8E1FAFE call bswap_32
+ 17337 FF
+ 17338 1051f 4589E9 movl %r13d, %r9d
+ 17339 10522 4589E0 movl %r12d, %r8d
+ 17340 10525 89D9 movl %ebx, %ecx
+ 17341 10527 89C2 movl %eax, %edx
+ 17342 10529 488D3500 leaq .LC4(%rip), %rsi
+ 17342 000000
+ 17343 10530 488D3D00 leaq .LC1(%rip), %rdi
+ 17343 000000
+ 17344 10537 B8000000 movl $0, %eax
+ 17344 00
+ 17345 1053c E8000000 call KDbgMsg at PLT
+ 17345 00
+ 17346 .L417:
+ 17347 .LBE2163:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 17348 .loc 2 1690 0
+ 17349 10541 660F6F85 movdqa -8544(%rbp), %xmm0
+ 17349 A0DEFFFF
+ 17350 .LBE2129:
+ 17351 .LBE2128:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(8,0x08); /* k32 : k33 : k34 : k35 */
+ 17352 .loc 2 1932 0
+ 17353 10549 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 17353 E0E9FFFF
+ 17354 10551 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 17354 C0E9FFFF
+ 17355 10559 F30F7F85 movdqu %xmm0, -2592(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 538
+
+
+ 17355 E0F5FFFF
+ 17356 .LBB2164:
+ 17357 .LBB2165:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 17358 .loc 2 1565 0
+ 17359 10561 F30F6F85 movdqu -2592(%rbp), %xmm0
+ 17359 E0F5FFFF
+ 17360 10569 660F7F85 movdqa %xmm0, -8496(%rbp)
+ 17360 D0DEFFFF
+ 17361 10571 660F6F85 movdqa -8496(%rbp), %xmm0
+ 17361 D0DEFFFF
+ 17362 10579 F30F7F85 movdqu %xmm0, -2576(%rbp)
+ 17362 F0F5FFFF
+ 17363 .LBB2166:
+ 17364 .LBB2167:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 17365 .loc 2 1282 0
+ 17366 10581 F30F6F85 movdqu -2576(%rbp), %xmm0
+ 17366 F0F5FFFF
+ 17367 10589 F30F7F85 movdqu %xmm0, -6848(%rbp)
+ 17367 40E5FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 17368 .loc 2 1283 0
+ 17369 10591 8B8548E5 movl -6840(%rbp), %eax
+ 17369 FFFF
+ 17370 10597 89854CE5 movl %eax, -6836(%rbp)
+ 17370 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 17371 .loc 2 1284 0
+ 17372 1059d 8B8544E5 movl -6844(%rbp), %eax
+ 17372 FFFF
+ 17373 105a3 898548E5 movl %eax, -6840(%rbp)
+ 17373 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 17374 .loc 2 1285 0
+ 17375 105a9 8B8540E5 movl -6848(%rbp), %eax
+ 17375 FFFF
+ 17376 105af 898544E5 movl %eax, -6844(%rbp)
+ 17376 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 17377 .loc 2 1286 0
+ 17378 105b5 C78540E5 movl $0, -6848(%rbp)
+ 17378 FFFF0000
+ 17378 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 17379 .loc 2 1287 0
+ 17380 105bf F30F6F85 movdqu -6848(%rbp), %xmm0
+ 17380 40E5FFFF
+ 17381 .LBE2167:
+ 17382 .LBE2166:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17383 .loc 2 1567 0
+ 17384 105c7 660F7F85 movdqa %xmm0, -8496(%rbp)
+ 17384 D0DEFFFF
+ 17385 105cf 660F6F85 movdqa -8496(%rbp), %xmm0
+ 17385 D0DEFFFF
+ 17386 105d7 660FEF85 pxor -2592(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 539
+
+
+ 17386 E0F5FFFF
+ 17387 105df F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 17387 E0F5FFFF
+ 17388 105e7 660F6F85 movdqa -8496(%rbp), %xmm0
+ 17388 D0DEFFFF
+ 17389 105ef F30F7F85 movdqu %xmm0, -2560(%rbp)
+ 17389 00F6FFFF
+ 17390 .LBB2168:
+ 17391 .LBB2169:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 17392 .loc 2 1282 0
+ 17393 105f7 F30F6F85 movdqu -2560(%rbp), %xmm0
+ 17393 00F6FFFF
+ 17394 105ff F30F7F85 movdqu %xmm0, -6832(%rbp)
+ 17394 50E5FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 17395 .loc 2 1283 0
+ 17396 10607 8B8558E5 movl -6824(%rbp), %eax
+ 17396 FFFF
+ 17397 1060d 89855CE5 movl %eax, -6820(%rbp)
+ 17397 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 17398 .loc 2 1284 0
+ 17399 10613 8B8554E5 movl -6828(%rbp), %eax
+ 17399 FFFF
+ 17400 10619 898558E5 movl %eax, -6824(%rbp)
+ 17400 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 17401 .loc 2 1285 0
+ 17402 1061f 8B8550E5 movl -6832(%rbp), %eax
+ 17402 FFFF
+ 17403 10625 898554E5 movl %eax, -6828(%rbp)
+ 17403 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 17404 .loc 2 1286 0
+ 17405 1062b C78550E5 movl $0, -6832(%rbp)
+ 17405 FFFF0000
+ 17405 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 17406 .loc 2 1287 0
+ 17407 10635 F30F6F85 movdqu -6832(%rbp), %xmm0
+ 17407 50E5FFFF
+ 17408 .LBE2169:
+ 17409 .LBE2168:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17410 .loc 2 1568 0
+ 17411 1063d 660F7F85 movdqa %xmm0, -8496(%rbp)
+ 17411 D0DEFFFF
+ 17412 10645 660F6F85 movdqa -8496(%rbp), %xmm0
+ 17412 D0DEFFFF
+ 17413 1064d 660FEF85 pxor -2592(%rbp), %xmm0
+ 17413 E0F5FFFF
+ 17414 10655 F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 17414 E0F5FFFF
+ 17415 1065d 660F6F85 movdqa -8496(%rbp), %xmm0
+ 17415 D0DEFFFF
+ 17416 10665 F30F7F85 movdqu %xmm0, -2544(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 540
+
+
+ 17416 10F6FFFF
+ 17417 .LBB2170:
+ 17418 .LBB2171:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 17419 .loc 2 1282 0
+ 17420 1066d F30F6F85 movdqu -2544(%rbp), %xmm0
+ 17420 10F6FFFF
+ 17421 10675 F30F7F85 movdqu %xmm0, -6816(%rbp)
+ 17421 60E5FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 17422 .loc 2 1283 0
+ 17423 1067d 8B8568E5 movl -6808(%rbp), %eax
+ 17423 FFFF
+ 17424 10683 89856CE5 movl %eax, -6804(%rbp)
+ 17424 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 17425 .loc 2 1284 0
+ 17426 10689 8B8564E5 movl -6812(%rbp), %eax
+ 17426 FFFF
+ 17427 1068f 898568E5 movl %eax, -6808(%rbp)
+ 17427 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 17428 .loc 2 1285 0
+ 17429 10695 8B8560E5 movl -6816(%rbp), %eax
+ 17429 FFFF
+ 17430 1069b 898564E5 movl %eax, -6812(%rbp)
+ 17430 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 17431 .loc 2 1286 0
+ 17432 106a1 C78560E5 movl $0, -6816(%rbp)
+ 17432 FFFF0000
+ 17432 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 17433 .loc 2 1287 0
+ 17434 106ab F30F6F85 movdqu -6816(%rbp), %xmm0
+ 17434 60E5FFFF
+ 17435 .LBE2171:
+ 17436 .LBE2170:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17437 .loc 2 1569 0
+ 17438 106b3 660F7F85 movdqa %xmm0, -8496(%rbp)
+ 17438 D0DEFFFF
+ 17439 106bb 660F6F85 movdqa -8496(%rbp), %xmm0
+ 17439 D0DEFFFF
+ 17440 106c3 660FEF85 pxor -2592(%rbp), %xmm0
+ 17440 E0F5FFFF
+ 17441 106cb F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 17441 E0F5FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 17442 .loc 2 1571 0
+ 17443 106d3 F30F6F85 movdqu -2592(%rbp), %xmm0
+ 17443 E0F5FFFF
+ 17444 .LBE2165:
+ 17445 .LBE2164:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(8,0x08); /* k32 : k33 : k34 : k35 */
+ 17446 .loc 2 1932 0
+ 17447 106db F30F7F85 movdqu %xmm0, -5696(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 541
+
+
+ 17447 C0E9FFFF
+ 17448 106e3 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 17448 C0E9FFFF
+ 17449 106eb F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 17449 30F6FFFF
+ 17450 106f3 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 17450 E0E9FFFF
+ 17451 106fb F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 17451 20F6FFFF
+ 17452 .LBB2172:
+ 17453 .LBB2173:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 17454 .loc 2 178 0
+ 17455 10703 F30F6F85 movdqu -2528(%rbp), %xmm0
+ 17455 20F6FFFF
+ 17456 1070b F30F6F8D movdqu -2512(%rbp), %xmm1
+ 17456 30F6FFFF
+ 17457 10713 660FEFC1 pxor %xmm1, %xmm0
+ 17458 .LBE2173:
+ 17459 .LBE2172:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(8,0x08); /* k32 : k33 : k34 : k35 */
+ 17460 .loc 2 1932 0
+ 17461 10717 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 17461 C0E9FFFF
+ 17462 1071f 488B85D8 movq -8232(%rbp), %rax
+ 17462 DFFFFF
+ 17463 10726 4883E880 subq $-128, %rax
+ 17464 1072a F30F6F85 movdqu -5696(%rbp), %xmm0
+ 17464 C0E9FFFF
+ 17465 10732 F30F7F00 movdqu %xmm0, (%rax)
+ 17466 10736 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 17466 C0E9FFFF
+ 17467 1073e F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 17467 40F6FFFF
+ 17468 .LBB2174:
+ 17469 .LBB2175:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 17470 .loc 2 1656 0
+ 17471 10746 F30F6F85 movdqu -2496(%rbp), %xmm0
+ 17471 40F6FFFF
+ 17472 1074e F30F7F85 movdqu %xmm0, -6784(%rbp)
+ 17472 80E5FFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 17473 .loc 2 1657 0
+ 17474 10756 8B858CE5 movl -6772(%rbp), %eax
+ 17474 FFFF
+ 17475 1075c 898558F6 movl %eax, -2472(%rbp)
+ 17475 FFFF
+ 17476 .LBB2176:
+ 17477 .LBB2177:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 17478 .loc 2 740 0
+ 17479 10762 8B8558F6 movl -2472(%rbp), %eax
+ 17479 FFFF
+ 17480 10768 898570E5 movl %eax, -6800(%rbp)
+ 17480 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+
GAS LISTING /tmp/ccMa7HLZ.s page 542
+
+
+ 17481 .loc 2 741 0
+ 17482 1076e C7855CF6 movl $0, -2468(%rbp)
+ 17482 FFFF0000
+ 17482 0000
+ 17483 10778 EB36 jmp .L418
+ 17484 .L419:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 17485 .loc 2 742 0
+ 17486 1077a 8B8D5CF6 movl -2468(%rbp), %ecx
+ 17486 FFFF
+ 17487 10780 8B855CF6 movl -2468(%rbp), %eax
+ 17487 FFFF
+ 17488 10786 89C0 mov %eax, %eax
+ 17489 10788 0FB68405 movzbl -6800(%rbp,%rax), %eax
+ 17489 70E5FFFF
+ 17490 10790 0FB6C0 movzbl %al, %eax
+ 17491 10793 89C2 mov %eax, %edx
+ 17492 10795 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 17492 000000
+ 17493 1079c 0FB61402 movzbl (%rdx,%rax), %edx
+ 17494 107a0 89C8 mov %ecx, %eax
+ 17495 107a2 88940570 movb %dl, -6800(%rbp,%rax)
+ 17495 E5FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 17496 .loc 2 741 0
+ 17497 107a9 83855CF6 addl $1, -2468(%rbp)
+ 17497 FFFF01
+ 17498 .L418:
+ 17499 107b0 83BD5CF6 cmpl $3, -2468(%rbp)
+ 17499 FFFF03
+ 17500 107b7 76C1 jbe .L419
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 17501 .loc 2 743 0
+ 17502 107b9 8B8570E5 movl -6800(%rbp), %eax
+ 17502 FFFF
+ 17503 .LBE2177:
+ 17504 .LBE2176:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 17505 .loc 2 1657 0
+ 17506 107bf 898554F6 movl %eax, -2476(%rbp)
+ 17506 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 17507 .loc 2 1659 0
+ 17508 107c5 8B8554F6 movl -2476(%rbp), %eax
+ 17508 FFFF
+ 17509 107cb 89858CE5 movl %eax, -6772(%rbp)
+ 17509 FFFF
+ 17510 107d1 8B858CE5 movl -6772(%rbp), %eax
+ 17510 FFFF
+ 17511 107d7 898588E5 movl %eax, -6776(%rbp)
+ 17511 FFFF
+ 17512 107dd 8B8588E5 movl -6776(%rbp), %eax
+ 17512 FFFF
+ 17513 107e3 898584E5 movl %eax, -6780(%rbp)
+ 17513 FFFF
+ 17514 107e9 8B8584E5 movl -6780(%rbp), %eax
+ 17514 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 543
+
+
+ 17515 107ef 898580E5 movl %eax, -6784(%rbp)
+ 17515 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 17516 .loc 2 1660 0
+ 17517 107f5 F30F6F85 movdqu -6784(%rbp), %xmm0
+ 17517 80E5FFFF
+ 17518 .LBE2175:
+ 17519 .LBE2174:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(9); /* k36 : k37 : k38 : k39 */
+ 17520 .loc 2 1933 0
+ 17521 107fd F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 17521 E0E9FFFF
+ 17522 10805 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 17522 D0E9FFFF
+ 17523 1080d F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 17523 60F6FFFF
+ 17524 .LBB2178:
+ 17525 .LBB2179:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 17526 .loc 2 1565 0
+ 17527 10815 F30F6F85 movdqu -2464(%rbp), %xmm0
+ 17527 60F6FFFF
+ 17528 1081d 660F7F85 movdqa %xmm0, -8480(%rbp)
+ 17528 E0DEFFFF
+ 17529 10825 660F6F85 movdqa -8480(%rbp), %xmm0
+ 17529 E0DEFFFF
+ 17530 1082d F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 17530 70F6FFFF
+ 17531 .LBB2180:
+ 17532 .LBB2181:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 17533 .loc 2 1282 0
+ 17534 10835 F30F6F85 movdqu -2448(%rbp), %xmm0
+ 17534 70F6FFFF
+ 17535 1083d F30F7F85 movdqu %xmm0, -6768(%rbp)
+ 17535 90E5FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 17536 .loc 2 1283 0
+ 17537 10845 8B8598E5 movl -6760(%rbp), %eax
+ 17537 FFFF
+ 17538 1084b 89859CE5 movl %eax, -6756(%rbp)
+ 17538 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 17539 .loc 2 1284 0
+ 17540 10851 8B8594E5 movl -6764(%rbp), %eax
+ 17540 FFFF
+ 17541 10857 898598E5 movl %eax, -6760(%rbp)
+ 17541 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 17542 .loc 2 1285 0
+ 17543 1085d 8B8590E5 movl -6768(%rbp), %eax
+ 17543 FFFF
+ 17544 10863 898594E5 movl %eax, -6764(%rbp)
+ 17544 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 17545 .loc 2 1286 0
+ 17546 10869 C78590E5 movl $0, -6768(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 544
+
+
+ 17546 FFFF0000
+ 17546 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 17547 .loc 2 1287 0
+ 17548 10873 F30F6F85 movdqu -6768(%rbp), %xmm0
+ 17548 90E5FFFF
+ 17549 .LBE2181:
+ 17550 .LBE2180:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17551 .loc 2 1567 0
+ 17552 1087b 660F7F85 movdqa %xmm0, -8480(%rbp)
+ 17552 E0DEFFFF
+ 17553 10883 660F6F85 movdqa -8480(%rbp), %xmm0
+ 17553 E0DEFFFF
+ 17554 1088b 660FEF85 pxor -2464(%rbp), %xmm0
+ 17554 60F6FFFF
+ 17555 10893 F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 17555 60F6FFFF
+ 17556 1089b 660F6F85 movdqa -8480(%rbp), %xmm0
+ 17556 E0DEFFFF
+ 17557 108a3 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 17557 80F6FFFF
+ 17558 .LBB2182:
+ 17559 .LBB2183:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 17560 .loc 2 1282 0
+ 17561 108ab F30F6F85 movdqu -2432(%rbp), %xmm0
+ 17561 80F6FFFF
+ 17562 108b3 F30F7F85 movdqu %xmm0, -6752(%rbp)
+ 17562 A0E5FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 17563 .loc 2 1283 0
+ 17564 108bb 8B85A8E5 movl -6744(%rbp), %eax
+ 17564 FFFF
+ 17565 108c1 8985ACE5 movl %eax, -6740(%rbp)
+ 17565 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 17566 .loc 2 1284 0
+ 17567 108c7 8B85A4E5 movl -6748(%rbp), %eax
+ 17567 FFFF
+ 17568 108cd 8985A8E5 movl %eax, -6744(%rbp)
+ 17568 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 17569 .loc 2 1285 0
+ 17570 108d3 8B85A0E5 movl -6752(%rbp), %eax
+ 17570 FFFF
+ 17571 108d9 8985A4E5 movl %eax, -6748(%rbp)
+ 17571 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 17572 .loc 2 1286 0
+ 17573 108df C785A0E5 movl $0, -6752(%rbp)
+ 17573 FFFF0000
+ 17573 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 17574 .loc 2 1287 0
+ 17575 108e9 F30F6F85 movdqu -6752(%rbp), %xmm0
+ 17575 A0E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 545
+
+
+ 17576 .LBE2183:
+ 17577 .LBE2182:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17578 .loc 2 1568 0
+ 17579 108f1 660F7F85 movdqa %xmm0, -8480(%rbp)
+ 17579 E0DEFFFF
+ 17580 108f9 660F6F85 movdqa -8480(%rbp), %xmm0
+ 17580 E0DEFFFF
+ 17581 10901 660FEF85 pxor -2464(%rbp), %xmm0
+ 17581 60F6FFFF
+ 17582 10909 F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 17582 60F6FFFF
+ 17583 10911 660F6F85 movdqa -8480(%rbp), %xmm0
+ 17583 E0DEFFFF
+ 17584 10919 F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 17584 90F6FFFF
+ 17585 .LBB2184:
+ 17586 .LBB2185:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 17587 .loc 2 1282 0
+ 17588 10921 F30F6F85 movdqu -2416(%rbp), %xmm0
+ 17588 90F6FFFF
+ 17589 10929 F30F7F85 movdqu %xmm0, -6736(%rbp)
+ 17589 B0E5FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 17590 .loc 2 1283 0
+ 17591 10931 8B85B8E5 movl -6728(%rbp), %eax
+ 17591 FFFF
+ 17592 10937 8985BCE5 movl %eax, -6724(%rbp)
+ 17592 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 17593 .loc 2 1284 0
+ 17594 1093d 8B85B4E5 movl -6732(%rbp), %eax
+ 17594 FFFF
+ 17595 10943 8985B8E5 movl %eax, -6728(%rbp)
+ 17595 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 17596 .loc 2 1285 0
+ 17597 10949 8B85B0E5 movl -6736(%rbp), %eax
+ 17597 FFFF
+ 17598 1094f 8985B4E5 movl %eax, -6732(%rbp)
+ 17598 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 17599 .loc 2 1286 0
+ 17600 10955 C785B0E5 movl $0, -6736(%rbp)
+ 17600 FFFF0000
+ 17600 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 17601 .loc 2 1287 0
+ 17602 1095f F30F6F85 movdqu -6736(%rbp), %xmm0
+ 17602 B0E5FFFF
+ 17603 .LBE2185:
+ 17604 .LBE2184:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17605 .loc 2 1569 0
+ 17606 10967 660F7F85 movdqa %xmm0, -8480(%rbp)
+ 17606 E0DEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 546
+
+
+ 17607 1096f 660F6F85 movdqa -8480(%rbp), %xmm0
+ 17607 E0DEFFFF
+ 17608 10977 660FEF85 pxor -2464(%rbp), %xmm0
+ 17608 60F6FFFF
+ 17609 1097f F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 17609 60F6FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 17610 .loc 2 1571 0
+ 17611 10987 F30F6F85 movdqu -2464(%rbp), %xmm0
+ 17611 60F6FFFF
+ 17612 .LBE2179:
+ 17613 .LBE2178:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(9); /* k36 : k37 : k38 : k39 */
+ 17614 .loc 2 1933 0
+ 17615 1098f F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 17615 D0E9FFFF
+ 17616 10997 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 17616 D0E9FFFF
+ 17617 1099f F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 17617 B0F6FFFF
+ 17618 109a7 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 17618 E0E9FFFF
+ 17619 109af F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 17619 A0F6FFFF
+ 17620 .LBB2186:
+ 17621 .LBB2187:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 17622 .loc 2 178 0
+ 17623 109b7 F30F6F85 movdqu -2400(%rbp), %xmm0
+ 17623 A0F6FFFF
+ 17624 109bf F30F6F8D movdqu -2384(%rbp), %xmm1
+ 17624 B0F6FFFF
+ 17625 109c7 660FEFC1 pxor %xmm1, %xmm0
+ 17626 .LBE2187:
+ 17627 .LBE2186:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(9); /* k36 : k37 : k38 : k39 */
+ 17628 .loc 2 1933 0
+ 17629 109cb F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 17629 D0E9FFFF
+ 17630 109d3 488B85D8 movq -8232(%rbp), %rax
+ 17630 DFFFFF
+ 17631 109da 48059000 addq $144, %rax
+ 17631 0000
+ 17632 109e0 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 17632 D0E9FFFF
+ 17633 109e8 F30F7F00 movdqu %xmm0, (%rax)
+ 17634 109ec F30F6F85 movdqu -5680(%rbp), %xmm0
+ 17634 D0E9FFFF
+ 17635 109f4 F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 17635 D0F6FFFF
+ 17636 .LBB2188:
+ 17637 .LBB2189:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 17638 .loc 2 1681 0
+ 17639 109fc B8100000 movl $16, %eax
+ 17639 00
+ 17640 10a01 660F6F05 movdqa vec_00(%rip), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 547
+
+
+ 17640 00000000
+ 17641 10a09 F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 17641 F0F6FFFF
+ 17642 10a11 8985ECF6 movl %eax, -2324(%rbp)
+ 17642 FFFF
+ 17643 .LBB2190:
+ 17644 .LBB2191:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 17645 .loc 2 522 0
+ 17646 10a17 F30F6F85 movdqu -2320(%rbp), %xmm0
+ 17646 F0F6FFFF
+ 17647 10a1f F30F7F85 movdqu %xmm0, -6656(%rbp)
+ 17647 00E6FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 17648 .loc 2 523 0
+ 17649 10a27 B8030000 movl $3, %eax
+ 17649 00
+ 17650 10a2c 4898 cltq
+ 17651 10a2e 8B95ECF6 movl -2324(%rbp), %edx
+ 17651 FFFF
+ 17652 10a34 89948500 movl %edx, -6656(%rbp,%rax,4)
+ 17652 E6FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 17653 .loc 2 524 0
+ 17654 10a3b F30F6F85 movdqu -6656(%rbp), %xmm0
+ 17654 00E6FFFF
+ 17655 10a43 F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 17655 F0F6FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 17656 .loc 2 526 0
+ 17657 10a4b F30F6F85 movdqu -2320(%rbp), %xmm0
+ 17657 F0F6FFFF
+ 17658 .LBE2191:
+ 17659 .LBE2190:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 17660 .loc 2 1681 0
+ 17661 10a53 660F7F85 movdqa %xmm0, -8448(%rbp)
+ 17661 00DFFFFF
+ 17662 10a5b F30F6F85 movdqu -2352(%rbp), %xmm0
+ 17662 D0F6FFFF
+ 17663 10a63 F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 17663 00F7FFFF
+ 17664 10a6b F30F6F85 movdqu -2304(%rbp), %xmm0
+ 17664 00F7FFFF
+ 17665 10a73 F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 17665 20F7FFFF
+ 17666 10a7b 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 17666 000000
+ 17667 10a82 48898518 movq %rax, -2280(%rbp)
+ 17667 F7FFFF
+ 17668 .LBB2192:
+ 17669 .LBB2193:
+ 17670 .LBB2194:
+ 17671 .LBB2195:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 17672 .loc 2 851 0
+ 17673 10a89 660F6F05 movdqa vec_00(%rip), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 548
+
+
+ 17673 00000000
+ 17674 10a91 F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 17674 40F7FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 17675 .loc 2 854 0
+ 17676 10a99 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 17676 00000000
+ 17677 10aa1 F30F6F8D movdqu -2272(%rbp), %xmm1
+ 17677 20F7FFFF
+ 17678 10aa9 F30F7F8D movdqu %xmm1, -2160(%rbp)
+ 17678 90F7FFFF
+ 17679 10ab1 F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 17679 80F7FFFF
+ 17680 .LBB2196:
+ 17681 .LBB2197:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 17682 .loc 2 206 0
+ 17683 10ab9 F30F6F85 movdqu -2176(%rbp), %xmm0
+ 17683 80F7FFFF
+ 17684 10ac1 F30F6F8D movdqu -2160(%rbp), %xmm1
+ 17684 90F7FFFF
+ 17685 10ac9 660FDBC1 pand %xmm1, %xmm0
+ 17686 .LBE2197:
+ 17687 .LBE2196:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 17688 .loc 2 854 0
+ 17689 10acd F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 17689 70F7FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 17690 .loc 2 862 0
+ 17691 10ad5 660F6F05 movdqa vec_10(%rip), %xmm0
+ 17691 00000000
+ 17692 10add F30F6F8D movdqu -2272(%rbp), %xmm1
+ 17692 20F7FFFF
+ 17693 10ae5 F30F7F8D movdqu %xmm1, -2128(%rbp)
+ 17693 B0F7FFFF
+ 17694 10aed F30F7F85 movdqu %xmm0, -2144(%rbp)
+ 17694 A0F7FFFF
+ 17695 .LBB2198:
+ 17696 .loc 2 2642 0
+ 17697 10af5 0FB685B0 movzbl -2128(%rbp), %eax
+ 17697 F7FFFF
+ 17698 10afc 0FB695A0 movzbl -2144(%rbp), %edx
+ 17698 F7FFFF
+ 17699 10b03 0FB6C0 movzbl %al, %eax
+ 17700 10b06 6689853E movw %ax, -8898(%rbp)
+ 17700 DDFFFF
+ 17701 10b0d 0FB7853E movzwl -8898(%rbp), %eax
+ 17701 DDFFFF
+ 17702 10b14 F6F2 divb %dl
+ 17703 10b16 4189C7 movl %eax, %r15d
+ 17704 10b19 0FB685B1 movzbl -2127(%rbp), %eax
+ 17704 F7FFFF
+ 17705 10b20 0FB695A1 movzbl -2143(%rbp), %edx
+ 17705 F7FFFF
+ 17706 10b27 0FB6C0 movzbl %al, %eax
+ 17707 10b2a 6689853E movw %ax, -8898(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 549
+
+
+ 17707 DDFFFF
+ 17708 10b31 0FB7853E movzwl -8898(%rbp), %eax
+ 17708 DDFFFF
+ 17709 10b38 F6F2 divb %dl
+ 17710 10b3a 88851FDF movb %al, -8417(%rbp)
+ 17710 FFFF
+ 17711 10b40 0FB685B2 movzbl -2126(%rbp), %eax
+ 17711 F7FFFF
+ 17712 10b47 0FB695A2 movzbl -2142(%rbp), %edx
+ 17712 F7FFFF
+ 17713 10b4e 0FB6C0 movzbl %al, %eax
+ 17714 10b51 6689853E movw %ax, -8898(%rbp)
+ 17714 DDFFFF
+ 17715 10b58 0FB7853E movzwl -8898(%rbp), %eax
+ 17715 DDFFFF
+ 17716 10b5f F6F2 divb %dl
+ 17717 10b61 88851EDF movb %al, -8418(%rbp)
+ 17717 FFFF
+ 17718 10b67 0FB685B3 movzbl -2125(%rbp), %eax
+ 17718 F7FFFF
+ 17719 10b6e 0FB695A3 movzbl -2141(%rbp), %edx
+ 17719 F7FFFF
+ 17720 10b75 0FB6C0 movzbl %al, %eax
+ 17721 10b78 6689853E movw %ax, -8898(%rbp)
+ 17721 DDFFFF
+ 17722 10b7f 0FB7853E movzwl -8898(%rbp), %eax
+ 17722 DDFFFF
+ 17723 10b86 F6F2 divb %dl
+ 17724 10b88 88851DDF movb %al, -8419(%rbp)
+ 17724 FFFF
+ 17725 10b8e 0FB685B4 movzbl -2124(%rbp), %eax
+ 17725 F7FFFF
+ 17726 10b95 0FB695A4 movzbl -2140(%rbp), %edx
+ 17726 F7FFFF
+ 17727 10b9c 0FB6C0 movzbl %al, %eax
+ 17728 10b9f 6689853E movw %ax, -8898(%rbp)
+ 17728 DDFFFF
+ 17729 10ba6 0FB7853E movzwl -8898(%rbp), %eax
+ 17729 DDFFFF
+ 17730 10bad F6F2 divb %dl
+ 17731 10baf 88851CDF movb %al, -8420(%rbp)
+ 17731 FFFF
+ 17732 10bb5 0FB685B5 movzbl -2123(%rbp), %eax
+ 17732 F7FFFF
+ 17733 10bbc 0FB695A5 movzbl -2139(%rbp), %edx
+ 17733 F7FFFF
+ 17734 10bc3 0FB6C0 movzbl %al, %eax
+ 17735 10bc6 6689853E movw %ax, -8898(%rbp)
+ 17735 DDFFFF
+ 17736 10bcd 0FB7853E movzwl -8898(%rbp), %eax
+ 17736 DDFFFF
+ 17737 10bd4 F6F2 divb %dl
+ 17738 10bd6 4189C1 movl %eax, %r9d
+ 17739 10bd9 0FB685B6 movzbl -2122(%rbp), %eax
+ 17739 F7FFFF
+ 17740 10be0 0FB695A6 movzbl -2138(%rbp), %edx
+ 17740 F7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 550
+
+
+ 17741 10be7 0FB6C0 movzbl %al, %eax
+ 17742 10bea 6689853E movw %ax, -8898(%rbp)
+ 17742 DDFFFF
+ 17743 10bf1 0FB7853E movzwl -8898(%rbp), %eax
+ 17743 DDFFFF
+ 17744 10bf8 F6F2 divb %dl
+ 17745 10bfa 89C7 movl %eax, %edi
+ 17746 10bfc 0FB685B7 movzbl -2121(%rbp), %eax
+ 17746 F7FFFF
+ 17747 10c03 0FB695A7 movzbl -2137(%rbp), %edx
+ 17747 F7FFFF
+ 17748 10c0a 0FB6C0 movzbl %al, %eax
+ 17749 10c0d 6689853E movw %ax, -8898(%rbp)
+ 17749 DDFFFF
+ 17750 10c14 0FB7853E movzwl -8898(%rbp), %eax
+ 17750 DDFFFF
+ 17751 10c1b F6F2 divb %dl
+ 17752 10c1d 89C3 movl %eax, %ebx
+ 17753 10c1f 0FB685B8 movzbl -2120(%rbp), %eax
+ 17753 F7FFFF
+ 17754 10c26 0FB695A8 movzbl -2136(%rbp), %edx
+ 17754 F7FFFF
+ 17755 10c2d 0FB6C0 movzbl %al, %eax
+ 17756 10c30 6689853E movw %ax, -8898(%rbp)
+ 17756 DDFFFF
+ 17757 10c37 0FB7853E movzwl -8898(%rbp), %eax
+ 17757 DDFFFF
+ 17758 10c3e F6F2 divb %dl
+ 17759 10c40 4189C2 movl %eax, %r10d
+ 17760 10c43 0FB685B9 movzbl -2119(%rbp), %eax
+ 17760 F7FFFF
+ 17761 10c4a 0FB695A9 movzbl -2135(%rbp), %edx
+ 17761 F7FFFF
+ 17762 10c51 0FB6C0 movzbl %al, %eax
+ 17763 10c54 6689853E movw %ax, -8898(%rbp)
+ 17763 DDFFFF
+ 17764 10c5b 0FB7853E movzwl -8898(%rbp), %eax
+ 17764 DDFFFF
+ 17765 10c62 F6F2 divb %dl
+ 17766 10c64 4189C3 movl %eax, %r11d
+ 17767 10c67 0FB685BA movzbl -2118(%rbp), %eax
+ 17767 F7FFFF
+ 17768 10c6e 0FB695AA movzbl -2134(%rbp), %edx
+ 17768 F7FFFF
+ 17769 10c75 0FB6C0 movzbl %al, %eax
+ 17770 10c78 6689853E movw %ax, -8898(%rbp)
+ 17770 DDFFFF
+ 17771 10c7f 0FB7853E movzwl -8898(%rbp), %eax
+ 17771 DDFFFF
+ 17772 10c86 F6F2 divb %dl
+ 17773 10c88 4189C4 movl %eax, %r12d
+ 17774 10c8b 0FB685BB movzbl -2117(%rbp), %eax
+ 17774 F7FFFF
+ 17775 10c92 0FB695AB movzbl -2133(%rbp), %edx
+ 17775 F7FFFF
+ 17776 10c99 0FB6C0 movzbl %al, %eax
+ 17777 10c9c 6689853E movw %ax, -8898(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 551
+
+
+ 17777 DDFFFF
+ 17778 10ca3 0FB7853E movzwl -8898(%rbp), %eax
+ 17778 DDFFFF
+ 17779 10caa F6F2 divb %dl
+ 17780 10cac 4189C5 movl %eax, %r13d
+ 17781 10caf 0FB685BC movzbl -2116(%rbp), %eax
+ 17781 F7FFFF
+ 17782 10cb6 0FB695AC movzbl -2132(%rbp), %edx
+ 17782 F7FFFF
+ 17783 10cbd 0FB6C0 movzbl %al, %eax
+ 17784 10cc0 6689853E movw %ax, -8898(%rbp)
+ 17784 DDFFFF
+ 17785 10cc7 0FB7853E movzwl -8898(%rbp), %eax
+ 17785 DDFFFF
+ 17786 10cce F6F2 divb %dl
+ 17787 10cd0 4189C6 movl %eax, %r14d
+ 17788 10cd3 0FB685BD movzbl -2115(%rbp), %eax
+ 17788 F7FFFF
+ 17789 10cda 0FB695AD movzbl -2131(%rbp), %edx
+ 17789 F7FFFF
+ 17790 10ce1 0FB6C0 movzbl %al, %eax
+ 17791 10ce4 6689853E movw %ax, -8898(%rbp)
+ 17791 DDFFFF
+ 17792 10ceb 0FB7853E movzwl -8898(%rbp), %eax
+ 17792 DDFFFF
+ 17793 10cf2 F6F2 divb %dl
+ 17794 10cf4 4189C0 movl %eax, %r8d
+ 17795 10cf7 0FB685BE movzbl -2114(%rbp), %eax
+ 17795 F7FFFF
+ 17796 10cfe 0FB695AE movzbl -2130(%rbp), %edx
+ 17796 F7FFFF
+ 17797 10d05 0FB6C0 movzbl %al, %eax
+ 17798 10d08 6689853E movw %ax, -8898(%rbp)
+ 17798 DDFFFF
+ 17799 10d0f 0FB7853E movzwl -8898(%rbp), %eax
+ 17799 DDFFFF
+ 17800 10d16 F6F2 divb %dl
+ 17801 10d18 89C6 movl %eax, %esi
+ 17802 10d1a 0FB685BF movzbl -2113(%rbp), %eax
+ 17802 F7FFFF
+ 17803 10d21 0FB695AF movzbl -2129(%rbp), %edx
+ 17803 F7FFFF
+ 17804 10d28 0FB6C0 movzbl %al, %eax
+ 17805 10d2b 6689853E movw %ax, -8898(%rbp)
+ 17805 DDFFFF
+ 17806 10d32 0FB7853E movzwl -8898(%rbp), %eax
+ 17806 DDFFFF
+ 17807 10d39 F6F2 divb %dl
+ 17808 10d3b 89C1 movl %eax, %ecx
+ 17809 .LBB2199:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 17810 .loc 2 346 0
+ 17811 10d3d 0FB6D3 movzbl %bl, %edx
+ 17812 10d40 400FB6C7 movzbl %dil, %eax
+ 17813 10d44 48C1E208 salq $8, %rdx
+ 17814 10d48 4809C2 orq %rax, %rdx
+ 17815 10d4b 410FB6C1 movzbl %r9b, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 552
+
+
+ 17816 10d4f 48C1E208 salq $8, %rdx
+ 17817 10d53 4809C2 orq %rax, %rdx
+ 17818 10d56 0FB6851C movzbl -8420(%rbp), %eax
+ 17818 DFFFFF
+ 17819 10d5d 48C1E208 salq $8, %rdx
+ 17820 10d61 4809C2 orq %rax, %rdx
+ 17821 10d64 0FB6851D movzbl -8419(%rbp), %eax
+ 17821 DFFFFF
+ 17822 10d6b 48C1E208 salq $8, %rdx
+ 17823 10d6f 4809C2 orq %rax, %rdx
+ 17824 10d72 0FB6851E movzbl -8418(%rbp), %eax
+ 17824 DFFFFF
+ 17825 10d79 48C1E208 salq $8, %rdx
+ 17826 10d7d 4809C2 orq %rax, %rdx
+ 17827 10d80 0FB6851F movzbl -8417(%rbp), %eax
+ 17827 DFFFFF
+ 17828 10d87 48C1E208 salq $8, %rdx
+ 17829 10d8b 4809C2 orq %rax, %rdx
+ 17830 10d8e 410FB6C7 movzbl %r15b, %eax
+ 17831 10d92 48C1E208 salq $8, %rdx
+ 17832 10d96 4809C2 orq %rax, %rdx
+ 17833 10d99 0FB6C1 movzbl %cl, %eax
+ 17834 10d9c 400FB6CE movzbl %sil, %ecx
+ 17835 10da0 48C1E008 salq $8, %rax
+ 17836 10da4 4809C8 orq %rcx, %rax
+ 17837 10da7 410FB6C8 movzbl %r8b, %ecx
+ 17838 10dab 48C1E008 salq $8, %rax
+ 17839 10daf 4809C8 orq %rcx, %rax
+ 17840 10db2 410FB6CE movzbl %r14b, %ecx
+ 17841 10db6 48C1E008 salq $8, %rax
+ 17842 10dba 4809C8 orq %rcx, %rax
+ 17843 10dbd 410FB6CD movzbl %r13b, %ecx
+ 17844 10dc1 48C1E008 salq $8, %rax
+ 17845 10dc5 4809C8 orq %rcx, %rax
+ 17846 10dc8 410FB6CC movzbl %r12b, %ecx
+ 17847 10dcc 48C1E008 salq $8, %rax
+ 17848 10dd0 4809C8 orq %rcx, %rax
+ 17849 10dd3 410FB6CB movzbl %r11b, %ecx
+ 17850 10dd7 48C1E008 salq $8, %rax
+ 17851 10ddb 4809C8 orq %rcx, %rax
+ 17852 10dde 410FB6CA movzbl %r10b, %ecx
+ 17853 10de2 48C1E008 salq $8, %rax
+ 17854 10de6 4809C8 orq %rcx, %rax
+ 17855 10de9 48899560 movq %rdx, -8864(%rbp)
+ 17855 DDFFFF
+ 17856 10df0 48898568 movq %rax, -8856(%rbp)
+ 17856 DDFFFF
+ 17857 10df7 660F6F85 movdqa -8864(%rbp), %xmm0
+ 17857 60DDFFFF
+ 17858 .LBE2199:
+ 17859 .LBE2198:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 17860 .loc 2 862 0
+ 17861 10dff F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 17861 60F7FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 17862 .loc 2 866 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 553
+
+
+ 17863 10e07 C7853CF7 movl $0, -2244(%rbp)
+ 17863 FFFF0000
+ 17863 0000
+ 17864 10e11 E9860200 jmp .L420
+ 17864 00
+ 17865 .L429:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 17866 .loc 2 868 0
+ 17867 10e16 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 17867 00000000
+ 17868 10e1e F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 17868 D0F7FFFF
+ 17869 10e26 F30F6F85 movdqu -2208(%rbp), %xmm0
+ 17869 60F7FFFF
+ 17870 10e2e F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 17870 C0F7FFFF
+ 17871 .LBB2200:
+ 17872 .LBB2201:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 17873 .loc 2 380 0
+ 17874 10e36 F30F6F85 movdqu -2096(%rbp), %xmm0
+ 17874 D0F7FFFF
+ 17875 10e3e F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 17875 20E6FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 17876 .loc 2 381 0
+ 17877 10e46 F30F6F85 movdqu -2112(%rbp), %xmm0
+ 17877 C0F7FFFF
+ 17878 10e4e F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 17878 10E6FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 17879 .loc 2 383 0
+ 17880 10e56 C785ECF7 movl $0, -2068(%rbp)
+ 17880 FFFF0000
+ 17880 0000
+ 17881 10e60 EB5C jmp .L421
+ 17882 .L424:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 17883 .loc 2 385 0
+ 17884 10e62 8B85ECF7 movl -2068(%rbp), %eax
+ 17884 FFFF
+ 17885 10e68 89C0 mov %eax, %eax
+ 17886 10e6a 0FB68405 movzbl -6640(%rbp,%rax), %eax
+ 17886 10E6FFFF
+ 17887 10e72 84C0 testb %al, %al
+ 17888 10e74 7912 jns .L422
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 17889 .loc 2 386 0
+ 17890 10e76 8B85ECF7 movl -2068(%rbp), %eax
+ 17890 FFFF
+ 17891 10e7c 89C0 mov %eax, %eax
+ 17892 10e7e C6840530 movb $0, -6608(%rbp,%rax)
+ 17892 E6FFFF00
+ 17893 10e86 EB2F jmp .L423
+ 17894 .L422:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 17895 .loc 2 388 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 554
+
+
+ 17896 10e88 8B8DECF7 movl -2068(%rbp), %ecx
+ 17896 FFFF
+ 17897 10e8e 8B85ECF7 movl -2068(%rbp), %eax
+ 17897 FFFF
+ 17898 10e94 89C0 mov %eax, %eax
+ 17899 10e96 0FB68405 movzbl -6640(%rbp,%rax), %eax
+ 17899 10E6FFFF
+ 17900 10e9e 0FB6C0 movzbl %al, %eax
+ 17901 10ea1 83E00F andl $15, %eax
+ 17902 10ea4 4898 cltq
+ 17903 10ea6 0FB69405 movzbl -6624(%rbp,%rax), %edx
+ 17903 20E6FFFF
+ 17904 10eae 89C8 mov %ecx, %eax
+ 17905 10eb0 88940530 movb %dl, -6608(%rbp,%rax)
+ 17905 E6FFFF
+ 17906 .L423:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 17907 .loc 2 383 0
+ 17908 10eb7 8385ECF7 addl $1, -2068(%rbp)
+ 17908 FFFF01
+ 17909 .L421:
+ 17910 10ebe 83BDECF7 cmpl $15, -2068(%rbp)
+ 17910 FFFF0F
+ 17911 10ec5 769B jbe .L424
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 17912 .loc 2 391 0
+ 17913 10ec7 F30F6F85 movdqu -6608(%rbp), %xmm0
+ 17913 30E6FFFF
+ 17914 .LBE2201:
+ 17915 .LBE2200:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 17916 .loc 2 868 0
+ 17917 10ecf F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 17917 50F7FFFF
+ 17918 10ed7 F30F6F85 movdqu -2192(%rbp), %xmm0
+ 17918 70F7FFFF
+ 17919 10edf F30F7F85 movdqu %xmm0, -2048(%rbp)
+ 17919 00F8FFFF
+ 17920 10ee7 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 17920 50F7FFFF
+ 17921 10eef F30F7F85 movdqu %xmm0, -2064(%rbp)
+ 17921 F0F7FFFF
+ 17922 .LBB2202:
+ 17923 .LBB2203:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 17924 .loc 2 234 0
+ 17925 10ef7 F30F6F85 movdqu -2064(%rbp), %xmm0
+ 17925 F0F7FFFF
+ 17926 10eff F30F6F8D movdqu -2048(%rbp), %xmm1
+ 17926 00F8FFFF
+ 17927 10f07 660FEBC1 por %xmm1, %xmm0
+ 17928 .LBE2203:
+ 17929 .LBE2202:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 17930 .loc 2 870 0
+ 17931 10f0b F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 17931 50F7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 555
+
+
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17932 .loc 2 872 0
+ 17933 10f13 8B853CF7 mov -2244(%rbp), %eax
+ 17933 FFFF
+ 17934 10f19 48C1E004 salq $4, %rax
+ 17935 10f1d 48038518 addq -2280(%rbp), %rax
+ 17935 F7FFFF
+ 17936 10f24 660F6F00 movdqa (%rax), %xmm0
+ 17937 10f28 F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 17937 20F8FFFF
+ 17938 10f30 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 17938 50F7FFFF
+ 17939 10f38 F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 17939 10F8FFFF
+ 17940 .LBB2204:
+ 17941 .LBB2205:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 17942 .loc 2 380 0
+ 17943 10f40 F30F6F85 movdqu -2016(%rbp), %xmm0
+ 17943 20F8FFFF
+ 17944 10f48 F30F7F85 movdqu %xmm0, -6576(%rbp)
+ 17944 50E6FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 17945 .loc 2 381 0
+ 17946 10f50 F30F6F85 movdqu -2032(%rbp), %xmm0
+ 17946 10F8FFFF
+ 17947 10f58 F30F7F85 movdqu %xmm0, -6592(%rbp)
+ 17947 40E6FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 17948 .loc 2 383 0
+ 17949 10f60 C7853CF8 movl $0, -1988(%rbp)
+ 17949 FFFF0000
+ 17949 0000
+ 17950 10f6a EB5C jmp .L425
+ 17951 .L428:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 17952 .loc 2 385 0
+ 17953 10f6c 8B853CF8 movl -1988(%rbp), %eax
+ 17953 FFFF
+ 17954 10f72 89C0 mov %eax, %eax
+ 17955 10f74 0FB68405 movzbl -6592(%rbp,%rax), %eax
+ 17955 40E6FFFF
+ 17956 10f7c 84C0 testb %al, %al
+ 17957 10f7e 7912 jns .L426
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 17958 .loc 2 386 0
+ 17959 10f80 8B853CF8 movl -1988(%rbp), %eax
+ 17959 FFFF
+ 17960 10f86 89C0 mov %eax, %eax
+ 17961 10f88 C6840560 movb $0, -6560(%rbp,%rax)
+ 17961 E6FFFF00
+ 17962 10f90 EB2F jmp .L427
+ 17963 .L426:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 17964 .loc 2 388 0
+ 17965 10f92 8B8D3CF8 movl -1988(%rbp), %ecx
+ 17965 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 556
+
+
+ 17966 10f98 8B853CF8 movl -1988(%rbp), %eax
+ 17966 FFFF
+ 17967 10f9e 89C0 mov %eax, %eax
+ 17968 10fa0 0FB68405 movzbl -6592(%rbp,%rax), %eax
+ 17968 40E6FFFF
+ 17969 10fa8 0FB6C0 movzbl %al, %eax
+ 17970 10fab 83E00F andl $15, %eax
+ 17971 10fae 4898 cltq
+ 17972 10fb0 0FB69405 movzbl -6576(%rbp,%rax), %edx
+ 17972 50E6FFFF
+ 17973 10fb8 89C8 mov %ecx, %eax
+ 17974 10fba 88940560 movb %dl, -6560(%rbp,%rax)
+ 17974 E6FFFF
+ 17975 .L427:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 17976 .loc 2 383 0
+ 17977 10fc1 83853CF8 addl $1, -1988(%rbp)
+ 17977 FFFF01
+ 17978 .L425:
+ 17979 10fc8 83BD3CF8 cmpl $15, -1988(%rbp)
+ 17979 FFFF0F
+ 17980 10fcf 769B jbe .L428
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 17981 .loc 2 391 0
+ 17982 10fd1 F30F6F85 movdqu -6560(%rbp), %xmm0
+ 17982 60E6FFFF
+ 17983 .LBE2205:
+ 17984 .LBE2204:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17985 .loc 2 872 0
+ 17986 10fd9 F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 17986 50F7FFFF
+ 17987 10fe1 F30F6F85 movdqu -2240(%rbp), %xmm0
+ 17987 40F7FFFF
+ 17988 10fe9 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 17988 50F8FFFF
+ 17989 10ff1 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 17989 50F7FFFF
+ 17990 10ff9 F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 17990 40F8FFFF
+ 17991 .LBB2206:
+ 17992 .LBB2207:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 17993 .loc 2 234 0
+ 17994 11001 F30F6F85 movdqu -1984(%rbp), %xmm0
+ 17994 40F8FFFF
+ 17995 11009 F30F6F8D movdqu -1968(%rbp), %xmm1
+ 17995 50F8FFFF
+ 17996 11011 660FEBC1 por %xmm1, %xmm0
+ 17997 .LBE2207:
+ 17998 .LBE2206:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 17999 .loc 2 874 0
+ 18000 11015 F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 18000 40F7FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18001 .loc 2 876 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 557
+
+
+ 18002 1101d 660F6F05 movdqa vec_01(%rip), %xmm0
+ 18002 00000000
+ 18003 11025 F30F6F8D movdqu -2208(%rbp), %xmm1
+ 18003 60F7FFFF
+ 18004 1102d F30F7F8D movdqu %xmm1, -1936(%rbp)
+ 18004 70F8FFFF
+ 18005 11035 F30F7F85 movdqu %xmm0, -1952(%rbp)
+ 18005 60F8FFFF
+ 18006 .LBB2208:
+ 18007 .LBB2209:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 18008 .loc 2 290 0
+ 18009 1103d F30F6F8D movdqu -1952(%rbp), %xmm1
+ 18009 60F8FFFF
+ 18010 11045 F30F6F85 movdqu -1936(%rbp), %xmm0
+ 18010 70F8FFFF
+ 18011 1104d 660FF8C1 psubb %xmm1, %xmm0
+ 18012 .LBE2209:
+ 18013 .LBE2208:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18014 .loc 2 876 0
+ 18015 11051 F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 18015 60F7FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18016 .loc 2 878 0
+ 18017 11059 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 18017 00000000
+ 18018 11061 F30F6F8D movdqu -2208(%rbp), %xmm1
+ 18018 60F7FFFF
+ 18019 11069 F30F7F8D movdqu %xmm1, -1904(%rbp)
+ 18019 90F8FFFF
+ 18020 11071 F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 18020 80F8FFFF
+ 18021 .LBB2210:
+ 18022 .LBB2211:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 18023 .loc 2 206 0
+ 18024 11079 F30F6F85 movdqu -1920(%rbp), %xmm0
+ 18024 80F8FFFF
+ 18025 11081 F30F6F8D movdqu -1904(%rbp), %xmm1
+ 18025 90F8FFFF
+ 18026 11089 660FDBC1 pand %xmm1, %xmm0
+ 18027 .LBE2211:
+ 18028 .LBE2210:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18029 .loc 2 878 0
+ 18030 1108d F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 18030 60F7FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 18031 .loc 2 866 0
+ 18032 11095 83853CF7 addl $1, -2244(%rbp)
+ 18032 FFFF01
+ 18033 .L420:
+ 18034 1109c 83BD3CF7 cmpl $15, -2244(%rbp)
+ 18034 FFFF0F
+ 18035 110a3 0F866DFD jbe .L429
+ 18035 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 558
+
+
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 18036 .loc 2 882 0
+ 18037 110a9 F30F6F85 movdqu -2240(%rbp), %xmm0
+ 18037 40F7FFFF
+ 18038 .LBE2195:
+ 18039 .LBE2194:
+ 18040 .LBE2193:
+ 18041 .LBE2192:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 18042 .loc 2 1682 0
+ 18043 110b1 660F7F85 movdqa %xmm0, -8464(%rbp)
+ 18043 F0DEFFFF
+ 18044 .LBB2212:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 18045 .loc 2 1683 0
+ 18046 110b9 660F6F85 movdqa -8464(%rbp), %xmm0
+ 18046 F0DEFFFF
+ 18047 110c1 F30F7F85 movdqu %xmm0, -6672(%rbp)
+ 18047 F0E5FFFF
+ 18048 110c9 E8000000 call KDbgWriterGet at PLT
+ 18048 00
+ 18049 110ce 4885C0 testq %rax, %rax
+ 18050 110d1 7479 je .L431
+ 18051 110d3 BF010000 movl $1, %edi
+ 18051 00
+ 18052 110d8 E8000000 call KDbgCondToFlag at PLT
+ 18052 00
+ 18053 110dd 4889C6 movq %rax, %rsi
+ 18054 110e0 BF100000 movl $16, %edi
+ 18054 00
+ 18055 110e5 E8000000 call KDbgTestModConds at PLT
+ 18055 00
+ 18056 110ea 84C0 testb %al, %al
+ 18057 110ec 745E je .L431
+ 18058 110ee 8B85FCE5 movl -6660(%rbp), %eax
+ 18058 FFFF
+ 18059 110f4 89C7 movl %eax, %edi
+ 18060 110f6 E805EFFE call bswap_32
+ 18060 FF
+ 18061 110fb 4189C5 movl %eax, %r13d
+ 18062 110fe 8B85F8E5 movl -6664(%rbp), %eax
+ 18062 FFFF
+ 18063 11104 89C7 movl %eax, %edi
+ 18064 11106 E8F5EEFE call bswap_32
+ 18064 FF
+ 18065 1110b 4189C4 movl %eax, %r12d
+ 18066 1110e 8B85F4E5 movl -6668(%rbp), %eax
+ 18066 FFFF
+ 18067 11114 89C7 movl %eax, %edi
+ 18068 11116 E8E5EEFE call bswap_32
+ 18068 FF
+ 18069 1111b 89C3 movl %eax, %ebx
+ 18070 1111d 8B85F0E5 movl -6672(%rbp), %eax
+ 18070 FFFF
+ 18071 11123 89C7 movl %eax, %edi
+ 18072 11125 E8D6EEFE call bswap_32
+ 18072 FF
+
GAS LISTING /tmp/ccMa7HLZ.s page 559
+
+
+ 18073 1112a 4589E9 movl %r13d, %r9d
+ 18074 1112d 4589E0 movl %r12d, %r8d
+ 18075 11130 89D9 movl %ebx, %ecx
+ 18076 11132 89C2 movl %eax, %edx
+ 18077 11134 488D3500 leaq .LC0(%rip), %rsi
+ 18077 000000
+ 18078 1113b 488D3D00 leaq .LC1(%rip), %rdi
+ 18078 000000
+ 18079 11142 B8000000 movl $0, %eax
+ 18079 00
+ 18080 11147 E8000000 call KDbgMsg at PLT
+ 18080 00
+ 18081 .L431:
+ 18082 1114c 660F6F85 movdqa -8464(%rbp), %xmm0
+ 18082 F0DEFFFF
+ 18083 11154 F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 18083 A0F8FFFF
+ 18084 .LBE2212:
+ 18085 .LBB2213:
+ 18086 .LBB2214:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 18087 .loc 2 667 0
+ 18088 1115c 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 18088 00000000
+ 18089 11164 F30F6F8D movdqu -1888(%rbp), %xmm1
+ 18089 A0F8FFFF
+ 18090 1116c F30F7F8D movdqu %xmm1, -1856(%rbp)
+ 18090 C0F8FFFF
+ 18091 11174 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 18091 B0F8FFFF
+ 18092 .LBB2215:
+ 18093 .LBB2216:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 18094 .loc 2 380 0
+ 18095 1117c F30F6F85 movdqu -1856(%rbp), %xmm0
+ 18095 C0F8FFFF
+ 18096 11184 F30F7F85 movdqu %xmm0, -6528(%rbp)
+ 18096 80E6FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 18097 .loc 2 381 0
+ 18098 1118c F30F6F85 movdqu -1872(%rbp), %xmm0
+ 18098 B0F8FFFF
+ 18099 11194 F30F7F85 movdqu %xmm0, -6544(%rbp)
+ 18099 70E6FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 18100 .loc 2 383 0
+ 18101 1119c C785DCF8 movl $0, -1828(%rbp)
+ 18101 FFFF0000
+ 18101 0000
+ 18102 111a6 EB5C jmp .L432
+ 18103 .L435:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 18104 .loc 2 385 0
+ 18105 111a8 8B85DCF8 movl -1828(%rbp), %eax
+ 18105 FFFF
+ 18106 111ae 89C0 mov %eax, %eax
+ 18107 111b0 0FB68405 movzbl -6544(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 560
+
+
+ 18107 70E6FFFF
+ 18108 111b8 84C0 testb %al, %al
+ 18109 111ba 7912 jns .L433
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 18110 .loc 2 386 0
+ 18111 111bc 8B85DCF8 movl -1828(%rbp), %eax
+ 18111 FFFF
+ 18112 111c2 89C0 mov %eax, %eax
+ 18113 111c4 C6840590 movb $0, -6512(%rbp,%rax)
+ 18113 E6FFFF00
+ 18114 111cc EB2F jmp .L434
+ 18115 .L433:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 18116 .loc 2 388 0
+ 18117 111ce 8B8DDCF8 movl -1828(%rbp), %ecx
+ 18117 FFFF
+ 18118 111d4 8B85DCF8 movl -1828(%rbp), %eax
+ 18118 FFFF
+ 18119 111da 89C0 mov %eax, %eax
+ 18120 111dc 0FB68405 movzbl -6544(%rbp,%rax), %eax
+ 18120 70E6FFFF
+ 18121 111e4 0FB6C0 movzbl %al, %eax
+ 18122 111e7 83E00F andl $15, %eax
+ 18123 111ea 4898 cltq
+ 18124 111ec 0FB69405 movzbl -6528(%rbp,%rax), %edx
+ 18124 80E6FFFF
+ 18125 111f4 89C8 mov %ecx, %eax
+ 18126 111f6 88940590 movb %dl, -6512(%rbp,%rax)
+ 18126 E6FFFF
+ 18127 .L434:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 18128 .loc 2 383 0
+ 18129 111fd 8385DCF8 addl $1, -1828(%rbp)
+ 18129 FFFF01
+ 18130 .L432:
+ 18131 11204 83BDDCF8 cmpl $15, -1828(%rbp)
+ 18131 FFFF0F
+ 18132 1120b 769B jbe .L435
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 18133 .loc 2 391 0
+ 18134 1120d F30F6F85 movdqu -6512(%rbp), %xmm0
+ 18134 90E6FFFF
+ 18135 .LBE2216:
+ 18136 .LBE2215:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 18137 .loc 2 667 0
+ 18138 11215 F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 18138 A0F8FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 18139 .loc 2 668 0
+ 18140 1121d F30F6F85 movdqu -1888(%rbp), %xmm0
+ 18140 A0F8FFFF
+ 18141 .LBE2214:
+ 18142 .LBE2213:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 18143 .loc 2 1684 0
+ 18144 11225 660F7F85 movdqa %xmm0, -8464(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 561
+
+
+ 18144 F0DEFFFF
+ 18145 .LBB2217:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 18146 .loc 2 1685 0
+ 18147 1122d 660F6F85 movdqa -8464(%rbp), %xmm0
+ 18147 F0DEFFFF
+ 18148 11235 F30F7F85 movdqu %xmm0, -6688(%rbp)
+ 18148 E0E5FFFF
+ 18149 1123d E8000000 call KDbgWriterGet at PLT
+ 18149 00
+ 18150 11242 4885C0 testq %rax, %rax
+ 18151 11245 7479 je .L437
+ 18152 11247 BF010000 movl $1, %edi
+ 18152 00
+ 18153 1124c E8000000 call KDbgCondToFlag at PLT
+ 18153 00
+ 18154 11251 4889C6 movq %rax, %rsi
+ 18155 11254 BF100000 movl $16, %edi
+ 18155 00
+ 18156 11259 E8000000 call KDbgTestModConds at PLT
+ 18156 00
+ 18157 1125e 84C0 testb %al, %al
+ 18158 11260 745E je .L437
+ 18159 11262 8B85ECE5 movl -6676(%rbp), %eax
+ 18159 FFFF
+ 18160 11268 89C7 movl %eax, %edi
+ 18161 1126a E891EDFE call bswap_32
+ 18161 FF
+ 18162 1126f 4189C5 movl %eax, %r13d
+ 18163 11272 8B85E8E5 movl -6680(%rbp), %eax
+ 18163 FFFF
+ 18164 11278 89C7 movl %eax, %edi
+ 18165 1127a E881EDFE call bswap_32
+ 18165 FF
+ 18166 1127f 4189C4 movl %eax, %r12d
+ 18167 11282 8B85E4E5 movl -6684(%rbp), %eax
+ 18167 FFFF
+ 18168 11288 89C7 movl %eax, %edi
+ 18169 1128a E871EDFE call bswap_32
+ 18169 FF
+ 18170 1128f 89C3 movl %eax, %ebx
+ 18171 11291 8B85E0E5 movl -6688(%rbp), %eax
+ 18171 FFFF
+ 18172 11297 89C7 movl %eax, %edi
+ 18173 11299 E862EDFE call bswap_32
+ 18173 FF
+ 18174 1129e 4589E9 movl %r13d, %r9d
+ 18175 112a1 4589E0 movl %r12d, %r8d
+ 18176 112a4 89D9 movl %ebx, %ecx
+ 18177 112a6 89C2 movl %eax, %edx
+ 18178 112a8 488D3500 leaq .LC2(%rip), %rsi
+ 18178 000000
+ 18179 112af 488D3D00 leaq .LC1(%rip), %rdi
+ 18179 000000
+ 18180 112b6 B8000000 movl $0, %eax
+ 18180 00
+ 18181 112bb E8000000 call KDbgMsg at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 562
+
+
+ 18181 00
+ 18182 .L437:
+ 18183 112c0 660F6F85 movdqa -8464(%rbp), %xmm0
+ 18183 F0DEFFFF
+ 18184 112c8 F30F7F85 movdqu %xmm0, -1808(%rbp)
+ 18184 F0F8FFFF
+ 18185 112d0 660F6F85 movdqa -8448(%rbp), %xmm0
+ 18185 00DFFFFF
+ 18186 112d8 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 18186 E0F8FFFF
+ 18187 .LBE2217:
+ 18188 .LBB2218:
+ 18189 .LBB2219:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18190 .loc 2 178 0
+ 18191 112e0 F30F6F85 movdqu -1824(%rbp), %xmm0
+ 18191 E0F8FFFF
+ 18192 112e8 F30F6F8D movdqu -1808(%rbp), %xmm1
+ 18192 F0F8FFFF
+ 18193 112f0 660FEFC1 pxor %xmm1, %xmm0
+ 18194 .LBE2219:
+ 18195 .LBE2218:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 18196 .loc 2 1686 0
+ 18197 112f4 660F7F85 movdqa %xmm0, -8464(%rbp)
+ 18197 F0DEFFFF
+ 18198 .LBB2220:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 18199 .loc 2 1687 0
+ 18200 112fc 660F6F85 movdqa -8464(%rbp), %xmm0
+ 18200 F0DEFFFF
+ 18201 11304 F30F7F85 movdqu %xmm0, -6704(%rbp)
+ 18201 D0E5FFFF
+ 18202 1130c E8000000 call KDbgWriterGet at PLT
+ 18202 00
+ 18203 11311 4885C0 testq %rax, %rax
+ 18204 11314 7479 je .L439
+ 18205 11316 BF010000 movl $1, %edi
+ 18205 00
+ 18206 1131b E8000000 call KDbgCondToFlag at PLT
+ 18206 00
+ 18207 11320 4889C6 movq %rax, %rsi
+ 18208 11323 BF100000 movl $16, %edi
+ 18208 00
+ 18209 11328 E8000000 call KDbgTestModConds at PLT
+ 18209 00
+ 18210 1132d 84C0 testb %al, %al
+ 18211 1132f 745E je .L439
+ 18212 11331 8B85DCE5 movl -6692(%rbp), %eax
+ 18212 FFFF
+ 18213 11337 89C7 movl %eax, %edi
+ 18214 11339 E8C2ECFE call bswap_32
+ 18214 FF
+ 18215 1133e 4189C5 movl %eax, %r13d
+ 18216 11341 8B85D8E5 movl -6696(%rbp), %eax
+ 18216 FFFF
+ 18217 11347 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 563
+
+
+ 18218 11349 E8B2ECFE call bswap_32
+ 18218 FF
+ 18219 1134e 4189C4 movl %eax, %r12d
+ 18220 11351 8B85D4E5 movl -6700(%rbp), %eax
+ 18220 FFFF
+ 18221 11357 89C7 movl %eax, %edi
+ 18222 11359 E8A2ECFE call bswap_32
+ 18222 FF
+ 18223 1135e 89C3 movl %eax, %ebx
+ 18224 11360 8B85D0E5 movl -6704(%rbp), %eax
+ 18224 FFFF
+ 18225 11366 89C7 movl %eax, %edi
+ 18226 11368 E893ECFE call bswap_32
+ 18226 FF
+ 18227 1136d 4589E9 movl %r13d, %r9d
+ 18228 11370 4589E0 movl %r12d, %r8d
+ 18229 11373 89D9 movl %ebx, %ecx
+ 18230 11375 89C2 movl %eax, %edx
+ 18231 11377 488D3500 leaq .LC3(%rip), %rsi
+ 18231 000000
+ 18232 1137e 488D3D00 leaq .LC1(%rip), %rdi
+ 18232 000000
+ 18233 11385 B8000000 movl $0, %eax
+ 18233 00
+ 18234 1138a E8000000 call KDbgMsg at PLT
+ 18234 00
+ 18235 .L439:
+ 18236 1138f 660F6F85 movdqa -8464(%rbp), %xmm0
+ 18236 F0DEFFFF
+ 18237 11397 F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 18237 00F9FFFF
+ 18238 .LBE2220:
+ 18239 .LBB2221:
+ 18240 .LBB2222:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 18241 .loc 2 1357 0
+ 18242 1139f F30F6F85 movdqu -1792(%rbp), %xmm0
+ 18242 00F9FFFF
+ 18243 113a7 F30F7F85 movdqu %xmm0, -6496(%rbp)
+ 18243 A0E6FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 18244 .loc 2 1358 0
+ 18245 113af 8B85ACE6 movl -6484(%rbp), %eax
+ 18245 FFFF
+ 18246 113b5 8985A8E6 movl %eax, -6488(%rbp)
+ 18246 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 18247 .loc 2 1359 0
+ 18248 113bb 8B85ACE6 movl -6484(%rbp), %eax
+ 18248 FFFF
+ 18249 113c1 8985A4E6 movl %eax, -6492(%rbp)
+ 18249 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 18250 .loc 2 1360 0
+ 18251 113c7 8B85ACE6 movl -6484(%rbp), %eax
+ 18251 FFFF
+ 18252 113cd 8985A0E6 movl %eax, -6496(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 564
+
+
+ 18252 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 18253 .loc 2 1361 0
+ 18254 113d3 F30F6F85 movdqu -6496(%rbp), %xmm0
+ 18254 A0E6FFFF
+ 18255 .LBE2222:
+ 18256 .LBE2221:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 18257 .loc 2 1688 0
+ 18258 113db 660F7F85 movdqa %xmm0, -8464(%rbp)
+ 18258 F0DEFFFF
+ 18259 .LBB2223:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 18260 .loc 2 1689 0
+ 18261 113e3 660F6F85 movdqa -8464(%rbp), %xmm0
+ 18261 F0DEFFFF
+ 18262 113eb F30F7F85 movdqu %xmm0, -6720(%rbp)
+ 18262 C0E5FFFF
+ 18263 113f3 E8000000 call KDbgWriterGet at PLT
+ 18263 00
+ 18264 113f8 4885C0 testq %rax, %rax
+ 18265 113fb 7479 je .L441
+ 18266 113fd BF010000 movl $1, %edi
+ 18266 00
+ 18267 11402 E8000000 call KDbgCondToFlag at PLT
+ 18267 00
+ 18268 11407 4889C6 movq %rax, %rsi
+ 18269 1140a BF100000 movl $16, %edi
+ 18269 00
+ 18270 1140f E8000000 call KDbgTestModConds at PLT
+ 18270 00
+ 18271 11414 84C0 testb %al, %al
+ 18272 11416 745E je .L441
+ 18273 11418 8B85CCE5 movl -6708(%rbp), %eax
+ 18273 FFFF
+ 18274 1141e 89C7 movl %eax, %edi
+ 18275 11420 E8DBEBFE call bswap_32
+ 18275 FF
+ 18276 11425 4189C5 movl %eax, %r13d
+ 18277 11428 8B85C8E5 movl -6712(%rbp), %eax
+ 18277 FFFF
+ 18278 1142e 89C7 movl %eax, %edi
+ 18279 11430 E8CBEBFE call bswap_32
+ 18279 FF
+ 18280 11435 4189C4 movl %eax, %r12d
+ 18281 11438 8B85C4E5 movl -6716(%rbp), %eax
+ 18281 FFFF
+ 18282 1143e 89C7 movl %eax, %edi
+ 18283 11440 E8BBEBFE call bswap_32
+ 18283 FF
+ 18284 11445 89C3 movl %eax, %ebx
+ 18285 11447 8B85C0E5 movl -6720(%rbp), %eax
+ 18285 FFFF
+ 18286 1144d 89C7 movl %eax, %edi
+ 18287 1144f E8ACEBFE call bswap_32
+ 18287 FF
+ 18288 11454 4589E9 movl %r13d, %r9d
+
GAS LISTING /tmp/ccMa7HLZ.s page 565
+
+
+ 18289 11457 4589E0 movl %r12d, %r8d
+ 18290 1145a 89D9 movl %ebx, %ecx
+ 18291 1145c 89C2 movl %eax, %edx
+ 18292 1145e 488D3500 leaq .LC4(%rip), %rsi
+ 18292 000000
+ 18293 11465 488D3D00 leaq .LC1(%rip), %rdi
+ 18293 000000
+ 18294 1146c B8000000 movl $0, %eax
+ 18294 00
+ 18295 11471 E8000000 call KDbgMsg at PLT
+ 18295 00
+ 18296 .L441:
+ 18297 .LBE2223:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 18298 .loc 2 1690 0
+ 18299 11476 660F6F85 movdqa -8464(%rbp), %xmm0
+ 18299 F0DEFFFF
+ 18300 .LBE2189:
+ 18301 .LBE2188:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(10,0x10); /* k40 : k41 : k42 : k43 */
+ 18302 .loc 2 1934 0
+ 18303 1147e F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 18303 E0E9FFFF
+ 18304 11486 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 18304 C0E9FFFF
+ 18305 1148e F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 18305 10F9FFFF
+ 18306 .LBB2224:
+ 18307 .LBB2225:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 18308 .loc 2 1565 0
+ 18309 11496 F30F6F85 movdqu -1776(%rbp), %xmm0
+ 18309 10F9FFFF
+ 18310 1149e 660F7F85 movdqa %xmm0, -8416(%rbp)
+ 18310 20DFFFFF
+ 18311 114a6 660F6F85 movdqa -8416(%rbp), %xmm0
+ 18311 20DFFFFF
+ 18312 114ae F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 18312 20F9FFFF
+ 18313 .LBB2226:
+ 18314 .LBB2227:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 18315 .loc 2 1282 0
+ 18316 114b6 F30F6F85 movdqu -1760(%rbp), %xmm0
+ 18316 20F9FFFF
+ 18317 114be F30F7F85 movdqu %xmm0, -6480(%rbp)
+ 18317 B0E6FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 18318 .loc 2 1283 0
+ 18319 114c6 8B85B8E6 movl -6472(%rbp), %eax
+ 18319 FFFF
+ 18320 114cc 8985BCE6 movl %eax, -6468(%rbp)
+ 18320 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 18321 .loc 2 1284 0
+ 18322 114d2 8B85B4E6 movl -6476(%rbp), %eax
+ 18322 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 566
+
+
+ 18323 114d8 8985B8E6 movl %eax, -6472(%rbp)
+ 18323 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 18324 .loc 2 1285 0
+ 18325 114de 8B85B0E6 movl -6480(%rbp), %eax
+ 18325 FFFF
+ 18326 114e4 8985B4E6 movl %eax, -6476(%rbp)
+ 18326 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 18327 .loc 2 1286 0
+ 18328 114ea C785B0E6 movl $0, -6480(%rbp)
+ 18328 FFFF0000
+ 18328 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 18329 .loc 2 1287 0
+ 18330 114f4 F30F6F85 movdqu -6480(%rbp), %xmm0
+ 18330 B0E6FFFF
+ 18331 .LBE2227:
+ 18332 .LBE2226:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18333 .loc 2 1567 0
+ 18334 114fc 660F7F85 movdqa %xmm0, -8416(%rbp)
+ 18334 20DFFFFF
+ 18335 11504 660F6F85 movdqa -8416(%rbp), %xmm0
+ 18335 20DFFFFF
+ 18336 1150c 660FEF85 pxor -1776(%rbp), %xmm0
+ 18336 10F9FFFF
+ 18337 11514 F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 18337 10F9FFFF
+ 18338 1151c 660F6F85 movdqa -8416(%rbp), %xmm0
+ 18338 20DFFFFF
+ 18339 11524 F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 18339 30F9FFFF
+ 18340 .LBB2228:
+ 18341 .LBB2229:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 18342 .loc 2 1282 0
+ 18343 1152c F30F6F85 movdqu -1744(%rbp), %xmm0
+ 18343 30F9FFFF
+ 18344 11534 F30F7F85 movdqu %xmm0, -6464(%rbp)
+ 18344 C0E6FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 18345 .loc 2 1283 0
+ 18346 1153c 8B85C8E6 movl -6456(%rbp), %eax
+ 18346 FFFF
+ 18347 11542 8985CCE6 movl %eax, -6452(%rbp)
+ 18347 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 18348 .loc 2 1284 0
+ 18349 11548 8B85C4E6 movl -6460(%rbp), %eax
+ 18349 FFFF
+ 18350 1154e 8985C8E6 movl %eax, -6456(%rbp)
+ 18350 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 18351 .loc 2 1285 0
+ 18352 11554 8B85C0E6 movl -6464(%rbp), %eax
+ 18352 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 567
+
+
+ 18353 1155a 8985C4E6 movl %eax, -6460(%rbp)
+ 18353 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 18354 .loc 2 1286 0
+ 18355 11560 C785C0E6 movl $0, -6464(%rbp)
+ 18355 FFFF0000
+ 18355 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 18356 .loc 2 1287 0
+ 18357 1156a F30F6F85 movdqu -6464(%rbp), %xmm0
+ 18357 C0E6FFFF
+ 18358 .LBE2229:
+ 18359 .LBE2228:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18360 .loc 2 1568 0
+ 18361 11572 660F7F85 movdqa %xmm0, -8416(%rbp)
+ 18361 20DFFFFF
+ 18362 1157a 660F6F85 movdqa -8416(%rbp), %xmm0
+ 18362 20DFFFFF
+ 18363 11582 660FEF85 pxor -1776(%rbp), %xmm0
+ 18363 10F9FFFF
+ 18364 1158a F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 18364 10F9FFFF
+ 18365 11592 660F6F85 movdqa -8416(%rbp), %xmm0
+ 18365 20DFFFFF
+ 18366 1159a F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 18366 40F9FFFF
+ 18367 .LBB2230:
+ 18368 .LBB2231:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 18369 .loc 2 1282 0
+ 18370 115a2 F30F6F85 movdqu -1728(%rbp), %xmm0
+ 18370 40F9FFFF
+ 18371 115aa F30F7F85 movdqu %xmm0, -6448(%rbp)
+ 18371 D0E6FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 18372 .loc 2 1283 0
+ 18373 115b2 8B85D8E6 movl -6440(%rbp), %eax
+ 18373 FFFF
+ 18374 115b8 8985DCE6 movl %eax, -6436(%rbp)
+ 18374 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 18375 .loc 2 1284 0
+ 18376 115be 8B85D4E6 movl -6444(%rbp), %eax
+ 18376 FFFF
+ 18377 115c4 8985D8E6 movl %eax, -6440(%rbp)
+ 18377 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 18378 .loc 2 1285 0
+ 18379 115ca 8B85D0E6 movl -6448(%rbp), %eax
+ 18379 FFFF
+ 18380 115d0 8985D4E6 movl %eax, -6444(%rbp)
+ 18380 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 18381 .loc 2 1286 0
+ 18382 115d6 C785D0E6 movl $0, -6448(%rbp)
+ 18382 FFFF0000
+
GAS LISTING /tmp/ccMa7HLZ.s page 568
+
+
+ 18382 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 18383 .loc 2 1287 0
+ 18384 115e0 F30F6F85 movdqu -6448(%rbp), %xmm0
+ 18384 D0E6FFFF
+ 18385 .LBE2231:
+ 18386 .LBE2230:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18387 .loc 2 1569 0
+ 18388 115e8 660F7F85 movdqa %xmm0, -8416(%rbp)
+ 18388 20DFFFFF
+ 18389 115f0 660F6F85 movdqa -8416(%rbp), %xmm0
+ 18389 20DFFFFF
+ 18390 115f8 660FEF85 pxor -1776(%rbp), %xmm0
+ 18390 10F9FFFF
+ 18391 11600 F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 18391 10F9FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 18392 .loc 2 1571 0
+ 18393 11608 F30F6F85 movdqu -1776(%rbp), %xmm0
+ 18393 10F9FFFF
+ 18394 .LBE2225:
+ 18395 .LBE2224:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(10,0x10); /* k40 : k41 : k42 : k43 */
+ 18396 .loc 2 1934 0
+ 18397 11610 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 18397 C0E9FFFF
+ 18398 11618 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 18398 C0E9FFFF
+ 18399 11620 F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 18399 60F9FFFF
+ 18400 11628 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 18400 E0E9FFFF
+ 18401 11630 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 18401 50F9FFFF
+ 18402 .LBB2232:
+ 18403 .LBB2233:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18404 .loc 2 178 0
+ 18405 11638 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 18405 50F9FFFF
+ 18406 11640 F30F6F8D movdqu -1696(%rbp), %xmm1
+ 18406 60F9FFFF
+ 18407 11648 660FEFC1 pxor %xmm1, %xmm0
+ 18408 .LBE2233:
+ 18409 .LBE2232:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(10,0x10); /* k40 : k41 : k42 : k43 */
+ 18410 .loc 2 1934 0
+ 18411 1164c F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 18411 C0E9FFFF
+ 18412 11654 488B85D8 movq -8232(%rbp), %rax
+ 18412 DFFFFF
+ 18413 1165b 4805A000 addq $160, %rax
+ 18413 0000
+ 18414 11661 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 18414 C0E9FFFF
+ 18415 11669 F30F7F00 movdqu %xmm0, (%rax)
+
GAS LISTING /tmp/ccMa7HLZ.s page 569
+
+
+ 18416 1166d F30F6F85 movdqu -5696(%rbp), %xmm0
+ 18416 C0E9FFFF
+ 18417 11675 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 18417 70F9FFFF
+ 18418 .LBB2234:
+ 18419 .LBB2235:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 18420 .loc 2 1656 0
+ 18421 1167d F30F6F85 movdqu -1680(%rbp), %xmm0
+ 18421 70F9FFFF
+ 18422 11685 F30F7F85 movdqu %xmm0, -6416(%rbp)
+ 18422 F0E6FFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 18423 .loc 2 1657 0
+ 18424 1168d 8B85FCE6 movl -6404(%rbp), %eax
+ 18424 FFFF
+ 18425 11693 898588F9 movl %eax, -1656(%rbp)
+ 18425 FFFF
+ 18426 .LBB2236:
+ 18427 .LBB2237:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 18428 .loc 2 740 0
+ 18429 11699 8B8588F9 movl -1656(%rbp), %eax
+ 18429 FFFF
+ 18430 1169f 8985E0E6 movl %eax, -6432(%rbp)
+ 18430 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 18431 .loc 2 741 0
+ 18432 116a5 C7858CF9 movl $0, -1652(%rbp)
+ 18432 FFFF0000
+ 18432 0000
+ 18433 116af EB36 jmp .L442
+ 18434 .L443:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 18435 .loc 2 742 0
+ 18436 116b1 8B8D8CF9 movl -1652(%rbp), %ecx
+ 18436 FFFF
+ 18437 116b7 8B858CF9 movl -1652(%rbp), %eax
+ 18437 FFFF
+ 18438 116bd 89C0 mov %eax, %eax
+ 18439 116bf 0FB68405 movzbl -6432(%rbp,%rax), %eax
+ 18439 E0E6FFFF
+ 18440 116c7 0FB6C0 movzbl %al, %eax
+ 18441 116ca 89C2 mov %eax, %edx
+ 18442 116cc 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 18442 000000
+ 18443 116d3 0FB61402 movzbl (%rdx,%rax), %edx
+ 18444 116d7 89C8 mov %ecx, %eax
+ 18445 116d9 889405E0 movb %dl, -6432(%rbp,%rax)
+ 18445 E6FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 18446 .loc 2 741 0
+ 18447 116e0 83858CF9 addl $1, -1652(%rbp)
+ 18447 FFFF01
+ 18448 .L442:
+ 18449 116e7 83BD8CF9 cmpl $3, -1652(%rbp)
+ 18449 FFFF03
+
GAS LISTING /tmp/ccMa7HLZ.s page 570
+
+
+ 18450 116ee 76C1 jbe .L443
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 18451 .loc 2 743 0
+ 18452 116f0 8B85E0E6 movl -6432(%rbp), %eax
+ 18452 FFFF
+ 18453 .LBE2237:
+ 18454 .LBE2236:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 18455 .loc 2 1657 0
+ 18456 116f6 898584F9 movl %eax, -1660(%rbp)
+ 18456 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 18457 .loc 2 1659 0
+ 18458 116fc 8B8584F9 movl -1660(%rbp), %eax
+ 18458 FFFF
+ 18459 11702 8985FCE6 movl %eax, -6404(%rbp)
+ 18459 FFFF
+ 18460 11708 8B85FCE6 movl -6404(%rbp), %eax
+ 18460 FFFF
+ 18461 1170e 8985F8E6 movl %eax, -6408(%rbp)
+ 18461 FFFF
+ 18462 11714 8B85F8E6 movl -6408(%rbp), %eax
+ 18462 FFFF
+ 18463 1171a 8985F4E6 movl %eax, -6412(%rbp)
+ 18463 FFFF
+ 18464 11720 8B85F4E6 movl -6412(%rbp), %eax
+ 18464 FFFF
+ 18465 11726 8985F0E6 movl %eax, -6416(%rbp)
+ 18465 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 18466 .loc 2 1660 0
+ 18467 1172c F30F6F85 movdqu -6416(%rbp), %xmm0
+ 18467 F0E6FFFF
+ 18468 .LBE2235:
+ 18469 .LBE2234:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(11); /* k44 : k45 : k46 : k47 */
+ 18470 .loc 2 1935 0
+ 18471 11734 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 18471 E0E9FFFF
+ 18472 1173c F30F6F85 movdqu -5680(%rbp), %xmm0
+ 18472 D0E9FFFF
+ 18473 11744 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 18473 90F9FFFF
+ 18474 .LBB2238:
+ 18475 .LBB2239:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 18476 .loc 2 1565 0
+ 18477 1174c F30F6F85 movdqu -1648(%rbp), %xmm0
+ 18477 90F9FFFF
+ 18478 11754 660F7F85 movdqa %xmm0, -8400(%rbp)
+ 18478 30DFFFFF
+ 18479 1175c 660F6F85 movdqa -8400(%rbp), %xmm0
+ 18479 30DFFFFF
+ 18480 11764 F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 18480 A0F9FFFF
+ 18481 .LBB2240:
+ 18482 .LBB2241:
+
GAS LISTING /tmp/ccMa7HLZ.s page 571
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 18483 .loc 2 1282 0
+ 18484 1176c F30F6F85 movdqu -1632(%rbp), %xmm0
+ 18484 A0F9FFFF
+ 18485 11774 F30F7F85 movdqu %xmm0, -6400(%rbp)
+ 18485 00E7FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 18486 .loc 2 1283 0
+ 18487 1177c 8B8508E7 movl -6392(%rbp), %eax
+ 18487 FFFF
+ 18488 11782 89850CE7 movl %eax, -6388(%rbp)
+ 18488 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 18489 .loc 2 1284 0
+ 18490 11788 8B8504E7 movl -6396(%rbp), %eax
+ 18490 FFFF
+ 18491 1178e 898508E7 movl %eax, -6392(%rbp)
+ 18491 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 18492 .loc 2 1285 0
+ 18493 11794 8B8500E7 movl -6400(%rbp), %eax
+ 18493 FFFF
+ 18494 1179a 898504E7 movl %eax, -6396(%rbp)
+ 18494 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 18495 .loc 2 1286 0
+ 18496 117a0 C78500E7 movl $0, -6400(%rbp)
+ 18496 FFFF0000
+ 18496 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 18497 .loc 2 1287 0
+ 18498 117aa F30F6F85 movdqu -6400(%rbp), %xmm0
+ 18498 00E7FFFF
+ 18499 .LBE2241:
+ 18500 .LBE2240:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18501 .loc 2 1567 0
+ 18502 117b2 660F7F85 movdqa %xmm0, -8400(%rbp)
+ 18502 30DFFFFF
+ 18503 117ba 660F6F85 movdqa -8400(%rbp), %xmm0
+ 18503 30DFFFFF
+ 18504 117c2 660FEF85 pxor -1648(%rbp), %xmm0
+ 18504 90F9FFFF
+ 18505 117ca F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 18505 90F9FFFF
+ 18506 117d2 660F6F85 movdqa -8400(%rbp), %xmm0
+ 18506 30DFFFFF
+ 18507 117da F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 18507 B0F9FFFF
+ 18508 .LBB2242:
+ 18509 .LBB2243:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 18510 .loc 2 1282 0
+ 18511 117e2 F30F6F85 movdqu -1616(%rbp), %xmm0
+ 18511 B0F9FFFF
+ 18512 117ea F30F7F85 movdqu %xmm0, -6384(%rbp)
+ 18512 10E7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 572
+
+
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 18513 .loc 2 1283 0
+ 18514 117f2 8B8518E7 movl -6376(%rbp), %eax
+ 18514 FFFF
+ 18515 117f8 89851CE7 movl %eax, -6372(%rbp)
+ 18515 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 18516 .loc 2 1284 0
+ 18517 117fe 8B8514E7 movl -6380(%rbp), %eax
+ 18517 FFFF
+ 18518 11804 898518E7 movl %eax, -6376(%rbp)
+ 18518 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 18519 .loc 2 1285 0
+ 18520 1180a 8B8510E7 movl -6384(%rbp), %eax
+ 18520 FFFF
+ 18521 11810 898514E7 movl %eax, -6380(%rbp)
+ 18521 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 18522 .loc 2 1286 0
+ 18523 11816 C78510E7 movl $0, -6384(%rbp)
+ 18523 FFFF0000
+ 18523 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 18524 .loc 2 1287 0
+ 18525 11820 F30F6F85 movdqu -6384(%rbp), %xmm0
+ 18525 10E7FFFF
+ 18526 .LBE2243:
+ 18527 .LBE2242:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18528 .loc 2 1568 0
+ 18529 11828 660F7F85 movdqa %xmm0, -8400(%rbp)
+ 18529 30DFFFFF
+ 18530 11830 660F6F85 movdqa -8400(%rbp), %xmm0
+ 18530 30DFFFFF
+ 18531 11838 660FEF85 pxor -1648(%rbp), %xmm0
+ 18531 90F9FFFF
+ 18532 11840 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 18532 90F9FFFF
+ 18533 11848 660F6F85 movdqa -8400(%rbp), %xmm0
+ 18533 30DFFFFF
+ 18534 11850 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 18534 C0F9FFFF
+ 18535 .LBB2244:
+ 18536 .LBB2245:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 18537 .loc 2 1282 0
+ 18538 11858 F30F6F85 movdqu -1600(%rbp), %xmm0
+ 18538 C0F9FFFF
+ 18539 11860 F30F7F85 movdqu %xmm0, -6368(%rbp)
+ 18539 20E7FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 18540 .loc 2 1283 0
+ 18541 11868 8B8528E7 movl -6360(%rbp), %eax
+ 18541 FFFF
+ 18542 1186e 89852CE7 movl %eax, -6356(%rbp)
+ 18542 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 573
+
+
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 18543 .loc 2 1284 0
+ 18544 11874 8B8524E7 movl -6364(%rbp), %eax
+ 18544 FFFF
+ 18545 1187a 898528E7 movl %eax, -6360(%rbp)
+ 18545 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 18546 .loc 2 1285 0
+ 18547 11880 8B8520E7 movl -6368(%rbp), %eax
+ 18547 FFFF
+ 18548 11886 898524E7 movl %eax, -6364(%rbp)
+ 18548 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 18549 .loc 2 1286 0
+ 18550 1188c C78520E7 movl $0, -6368(%rbp)
+ 18550 FFFF0000
+ 18550 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 18551 .loc 2 1287 0
+ 18552 11896 F30F6F85 movdqu -6368(%rbp), %xmm0
+ 18552 20E7FFFF
+ 18553 .LBE2245:
+ 18554 .LBE2244:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18555 .loc 2 1569 0
+ 18556 1189e 660F7F85 movdqa %xmm0, -8400(%rbp)
+ 18556 30DFFFFF
+ 18557 118a6 660F6F85 movdqa -8400(%rbp), %xmm0
+ 18557 30DFFFFF
+ 18558 118ae 660FEF85 pxor -1648(%rbp), %xmm0
+ 18558 90F9FFFF
+ 18559 118b6 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 18559 90F9FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 18560 .loc 2 1571 0
+ 18561 118be F30F6F85 movdqu -1648(%rbp), %xmm0
+ 18561 90F9FFFF
+ 18562 .LBE2239:
+ 18563 .LBE2238:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(11); /* k44 : k45 : k46 : k47 */
+ 18564 .loc 2 1935 0
+ 18565 118c6 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 18565 D0E9FFFF
+ 18566 118ce F30F6F85 movdqu -5680(%rbp), %xmm0
+ 18566 D0E9FFFF
+ 18567 118d6 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 18567 E0F9FFFF
+ 18568 118de F30F6F85 movdqu -5664(%rbp), %xmm0
+ 18568 E0E9FFFF
+ 18569 118e6 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 18569 D0F9FFFF
+ 18570 .LBB2246:
+ 18571 .LBB2247:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18572 .loc 2 178 0
+ 18573 118ee F30F6F85 movdqu -1584(%rbp), %xmm0
+ 18573 D0F9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 574
+
+
+ 18574 118f6 F30F6F8D movdqu -1568(%rbp), %xmm1
+ 18574 E0F9FFFF
+ 18575 118fe 660FEFC1 pxor %xmm1, %xmm0
+ 18576 .LBE2247:
+ 18577 .LBE2246:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(11); /* k44 : k45 : k46 : k47 */
+ 18578 .loc 2 1935 0
+ 18579 11902 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 18579 D0E9FFFF
+ 18580 1190a 488B85D8 movq -8232(%rbp), %rax
+ 18580 DFFFFF
+ 18581 11911 4805B000 addq $176, %rax
+ 18581 0000
+ 18582 11917 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 18582 D0E9FFFF
+ 18583 1191f F30F7F00 movdqu %xmm0, (%rax)
+ 18584 11923 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 18584 D0E9FFFF
+ 18585 1192b F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 18585 00FAFFFF
+ 18586 .LBB2248:
+ 18587 .LBB2249:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 18588 .loc 2 1681 0
+ 18589 11933 B8200000 movl $32, %eax
+ 18589 00
+ 18590 11938 660F6F05 movdqa vec_00(%rip), %xmm0
+ 18590 00000000
+ 18591 11940 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 18591 20FAFFFF
+ 18592 11948 89851CFA movl %eax, -1508(%rbp)
+ 18592 FFFF
+ 18593 .LBB2250:
+ 18594 .LBB2251:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 18595 .loc 2 522 0
+ 18596 1194e F30F6F85 movdqu -1504(%rbp), %xmm0
+ 18596 20FAFFFF
+ 18597 11956 F30F7F85 movdqu %xmm0, -6288(%rbp)
+ 18597 70E7FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 18598 .loc 2 523 0
+ 18599 1195e B8030000 movl $3, %eax
+ 18599 00
+ 18600 11963 4898 cltq
+ 18601 11965 8B951CFA movl -1508(%rbp), %edx
+ 18601 FFFF
+ 18602 1196b 89948570 movl %edx, -6288(%rbp,%rax,4)
+ 18602 E7FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 18603 .loc 2 524 0
+ 18604 11972 F30F6F85 movdqu -6288(%rbp), %xmm0
+ 18604 70E7FFFF
+ 18605 1197a F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 18605 20FAFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 18606 .loc 2 526 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 575
+
+
+ 18607 11982 F30F6F85 movdqu -1504(%rbp), %xmm0
+ 18607 20FAFFFF
+ 18608 .LBE2251:
+ 18609 .LBE2250:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 18610 .loc 2 1681 0
+ 18611 1198a 660F7F85 movdqa %xmm0, -8368(%rbp)
+ 18611 50DFFFFF
+ 18612 11992 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 18612 00FAFFFF
+ 18613 1199a F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 18613 30FAFFFF
+ 18614 119a2 F30F6F85 movdqu -1488(%rbp), %xmm0
+ 18614 30FAFFFF
+ 18615 119aa F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 18615 50FAFFFF
+ 18616 119b2 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 18616 000000
+ 18617 119b9 48898548 movq %rax, -1464(%rbp)
+ 18617 FAFFFF
+ 18618 .LBB2252:
+ 18619 .LBB2253:
+ 18620 .LBB2254:
+ 18621 .LBB2255:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 18622 .loc 2 851 0
+ 18623 119c0 660F6F05 movdqa vec_00(%rip), %xmm0
+ 18623 00000000
+ 18624 119c8 F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 18624 70FAFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18625 .loc 2 854 0
+ 18626 119d0 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 18626 00000000
+ 18627 119d8 F30F6F8D movdqu -1456(%rbp), %xmm1
+ 18627 50FAFFFF
+ 18628 119e0 F30F7F8D movdqu %xmm1, -1344(%rbp)
+ 18628 C0FAFFFF
+ 18629 119e8 F30F7F85 movdqu %xmm0, -1360(%rbp)
+ 18629 B0FAFFFF
+ 18630 .LBB2256:
+ 18631 .LBB2257:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 18632 .loc 2 206 0
+ 18633 119f0 F30F6F85 movdqu -1360(%rbp), %xmm0
+ 18633 B0FAFFFF
+ 18634 119f8 F30F6F8D movdqu -1344(%rbp), %xmm1
+ 18634 C0FAFFFF
+ 18635 11a00 660FDBC1 pand %xmm1, %xmm0
+ 18636 .LBE2257:
+ 18637 .LBE2256:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18638 .loc 2 854 0
+ 18639 11a04 F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 18639 A0FAFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 18640 .loc 2 862 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 576
+
+
+ 18641 11a0c 660F6F05 movdqa vec_10(%rip), %xmm0
+ 18641 00000000
+ 18642 11a14 F30F6F8D movdqu -1456(%rbp), %xmm1
+ 18642 50FAFFFF
+ 18643 11a1c F30F7F8D movdqu %xmm1, -1312(%rbp)
+ 18643 E0FAFFFF
+ 18644 11a24 F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 18644 D0FAFFFF
+ 18645 .LBB2258:
+ 18646 .loc 2 2642 0
+ 18647 11a2c 0FB685E0 movzbl -1312(%rbp), %eax
+ 18647 FAFFFF
+ 18648 11a33 0FB695D0 movzbl -1328(%rbp), %edx
+ 18648 FAFFFF
+ 18649 11a3a 0FB6C0 movzbl %al, %eax
+ 18650 11a3d 6689853E movw %ax, -8898(%rbp)
+ 18650 DDFFFF
+ 18651 11a44 0FB7853E movzwl -8898(%rbp), %eax
+ 18651 DDFFFF
+ 18652 11a4b F6F2 divb %dl
+ 18653 11a4d 4189C7 movl %eax, %r15d
+ 18654 11a50 0FB685E1 movzbl -1311(%rbp), %eax
+ 18654 FAFFFF
+ 18655 11a57 0FB695D1 movzbl -1327(%rbp), %edx
+ 18655 FAFFFF
+ 18656 11a5e 0FB6C0 movzbl %al, %eax
+ 18657 11a61 6689853E movw %ax, -8898(%rbp)
+ 18657 DDFFFF
+ 18658 11a68 0FB7853E movzwl -8898(%rbp), %eax
+ 18658 DDFFFF
+ 18659 11a6f F6F2 divb %dl
+ 18660 11a71 88856FDF movb %al, -8337(%rbp)
+ 18660 FFFF
+ 18661 11a77 0FB685E2 movzbl -1310(%rbp), %eax
+ 18661 FAFFFF
+ 18662 11a7e 0FB695D2 movzbl -1326(%rbp), %edx
+ 18662 FAFFFF
+ 18663 11a85 0FB6C0 movzbl %al, %eax
+ 18664 11a88 6689853E movw %ax, -8898(%rbp)
+ 18664 DDFFFF
+ 18665 11a8f 0FB7853E movzwl -8898(%rbp), %eax
+ 18665 DDFFFF
+ 18666 11a96 F6F2 divb %dl
+ 18667 11a98 88856EDF movb %al, -8338(%rbp)
+ 18667 FFFF
+ 18668 11a9e 0FB685E3 movzbl -1309(%rbp), %eax
+ 18668 FAFFFF
+ 18669 11aa5 0FB695D3 movzbl -1325(%rbp), %edx
+ 18669 FAFFFF
+ 18670 11aac 0FB6C0 movzbl %al, %eax
+ 18671 11aaf 6689853E movw %ax, -8898(%rbp)
+ 18671 DDFFFF
+ 18672 11ab6 0FB7853E movzwl -8898(%rbp), %eax
+ 18672 DDFFFF
+ 18673 11abd F6F2 divb %dl
+ 18674 11abf 88856DDF movb %al, -8339(%rbp)
+ 18674 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 577
+
+
+ 18675 11ac5 0FB685E4 movzbl -1308(%rbp), %eax
+ 18675 FAFFFF
+ 18676 11acc 0FB695D4 movzbl -1324(%rbp), %edx
+ 18676 FAFFFF
+ 18677 11ad3 0FB6C0 movzbl %al, %eax
+ 18678 11ad6 6689853E movw %ax, -8898(%rbp)
+ 18678 DDFFFF
+ 18679 11add 0FB7853E movzwl -8898(%rbp), %eax
+ 18679 DDFFFF
+ 18680 11ae4 F6F2 divb %dl
+ 18681 11ae6 88856CDF movb %al, -8340(%rbp)
+ 18681 FFFF
+ 18682 11aec 0FB685E5 movzbl -1307(%rbp), %eax
+ 18682 FAFFFF
+ 18683 11af3 0FB695D5 movzbl -1323(%rbp), %edx
+ 18683 FAFFFF
+ 18684 11afa 0FB6C0 movzbl %al, %eax
+ 18685 11afd 6689853E movw %ax, -8898(%rbp)
+ 18685 DDFFFF
+ 18686 11b04 0FB7853E movzwl -8898(%rbp), %eax
+ 18686 DDFFFF
+ 18687 11b0b F6F2 divb %dl
+ 18688 11b0d 4189C1 movl %eax, %r9d
+ 18689 11b10 0FB685E6 movzbl -1306(%rbp), %eax
+ 18689 FAFFFF
+ 18690 11b17 0FB695D6 movzbl -1322(%rbp), %edx
+ 18690 FAFFFF
+ 18691 11b1e 0FB6C0 movzbl %al, %eax
+ 18692 11b21 6689853E movw %ax, -8898(%rbp)
+ 18692 DDFFFF
+ 18693 11b28 0FB7853E movzwl -8898(%rbp), %eax
+ 18693 DDFFFF
+ 18694 11b2f F6F2 divb %dl
+ 18695 11b31 89C7 movl %eax, %edi
+ 18696 11b33 0FB685E7 movzbl -1305(%rbp), %eax
+ 18696 FAFFFF
+ 18697 11b3a 0FB695D7 movzbl -1321(%rbp), %edx
+ 18697 FAFFFF
+ 18698 11b41 0FB6C0 movzbl %al, %eax
+ 18699 11b44 6689853E movw %ax, -8898(%rbp)
+ 18699 DDFFFF
+ 18700 11b4b 0FB7853E movzwl -8898(%rbp), %eax
+ 18700 DDFFFF
+ 18701 11b52 F6F2 divb %dl
+ 18702 11b54 89C3 movl %eax, %ebx
+ 18703 11b56 0FB685E8 movzbl -1304(%rbp), %eax
+ 18703 FAFFFF
+ 18704 11b5d 0FB695D8 movzbl -1320(%rbp), %edx
+ 18704 FAFFFF
+ 18705 11b64 0FB6C0 movzbl %al, %eax
+ 18706 11b67 6689853E movw %ax, -8898(%rbp)
+ 18706 DDFFFF
+ 18707 11b6e 0FB7853E movzwl -8898(%rbp), %eax
+ 18707 DDFFFF
+ 18708 11b75 F6F2 divb %dl
+ 18709 11b77 4189C2 movl %eax, %r10d
+ 18710 11b7a 0FB685E9 movzbl -1303(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 578
+
+
+ 18710 FAFFFF
+ 18711 11b81 0FB695D9 movzbl -1319(%rbp), %edx
+ 18711 FAFFFF
+ 18712 11b88 0FB6C0 movzbl %al, %eax
+ 18713 11b8b 6689853E movw %ax, -8898(%rbp)
+ 18713 DDFFFF
+ 18714 11b92 0FB7853E movzwl -8898(%rbp), %eax
+ 18714 DDFFFF
+ 18715 11b99 F6F2 divb %dl
+ 18716 11b9b 4189C3 movl %eax, %r11d
+ 18717 11b9e 0FB685EA movzbl -1302(%rbp), %eax
+ 18717 FAFFFF
+ 18718 11ba5 0FB695DA movzbl -1318(%rbp), %edx
+ 18718 FAFFFF
+ 18719 11bac 0FB6C0 movzbl %al, %eax
+ 18720 11baf 6689853E movw %ax, -8898(%rbp)
+ 18720 DDFFFF
+ 18721 11bb6 0FB7853E movzwl -8898(%rbp), %eax
+ 18721 DDFFFF
+ 18722 11bbd F6F2 divb %dl
+ 18723 11bbf 4189C4 movl %eax, %r12d
+ 18724 11bc2 0FB685EB movzbl -1301(%rbp), %eax
+ 18724 FAFFFF
+ 18725 11bc9 0FB695DB movzbl -1317(%rbp), %edx
+ 18725 FAFFFF
+ 18726 11bd0 0FB6C0 movzbl %al, %eax
+ 18727 11bd3 6689853E movw %ax, -8898(%rbp)
+ 18727 DDFFFF
+ 18728 11bda 0FB7853E movzwl -8898(%rbp), %eax
+ 18728 DDFFFF
+ 18729 11be1 F6F2 divb %dl
+ 18730 11be3 4189C5 movl %eax, %r13d
+ 18731 11be6 0FB685EC movzbl -1300(%rbp), %eax
+ 18731 FAFFFF
+ 18732 11bed 0FB695DC movzbl -1316(%rbp), %edx
+ 18732 FAFFFF
+ 18733 11bf4 0FB6C0 movzbl %al, %eax
+ 18734 11bf7 6689853E movw %ax, -8898(%rbp)
+ 18734 DDFFFF
+ 18735 11bfe 0FB7853E movzwl -8898(%rbp), %eax
+ 18735 DDFFFF
+ 18736 11c05 F6F2 divb %dl
+ 18737 11c07 4189C6 movl %eax, %r14d
+ 18738 11c0a 0FB685ED movzbl -1299(%rbp), %eax
+ 18738 FAFFFF
+ 18739 11c11 0FB695DD movzbl -1315(%rbp), %edx
+ 18739 FAFFFF
+ 18740 11c18 0FB6C0 movzbl %al, %eax
+ 18741 11c1b 6689853E movw %ax, -8898(%rbp)
+ 18741 DDFFFF
+ 18742 11c22 0FB7853E movzwl -8898(%rbp), %eax
+ 18742 DDFFFF
+ 18743 11c29 F6F2 divb %dl
+ 18744 11c2b 4189C0 movl %eax, %r8d
+ 18745 11c2e 0FB685EE movzbl -1298(%rbp), %eax
+ 18745 FAFFFF
+ 18746 11c35 0FB695DE movzbl -1314(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 579
+
+
+ 18746 FAFFFF
+ 18747 11c3c 0FB6C0 movzbl %al, %eax
+ 18748 11c3f 6689853E movw %ax, -8898(%rbp)
+ 18748 DDFFFF
+ 18749 11c46 0FB7853E movzwl -8898(%rbp), %eax
+ 18749 DDFFFF
+ 18750 11c4d F6F2 divb %dl
+ 18751 11c4f 89C6 movl %eax, %esi
+ 18752 11c51 0FB685EF movzbl -1297(%rbp), %eax
+ 18752 FAFFFF
+ 18753 11c58 0FB695DF movzbl -1313(%rbp), %edx
+ 18753 FAFFFF
+ 18754 11c5f 0FB6C0 movzbl %al, %eax
+ 18755 11c62 6689853E movw %ax, -8898(%rbp)
+ 18755 DDFFFF
+ 18756 11c69 0FB7853E movzwl -8898(%rbp), %eax
+ 18756 DDFFFF
+ 18757 11c70 F6F2 divb %dl
+ 18758 11c72 89C1 movl %eax, %ecx
+ 18759 .LBB2259:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 18760 .loc 2 346 0
+ 18761 11c74 0FB6D3 movzbl %bl, %edx
+ 18762 11c77 400FB6C7 movzbl %dil, %eax
+ 18763 11c7b 48C1E208 salq $8, %rdx
+ 18764 11c7f 4809C2 orq %rax, %rdx
+ 18765 11c82 410FB6C1 movzbl %r9b, %eax
+ 18766 11c86 48C1E208 salq $8, %rdx
+ 18767 11c8a 4809C2 orq %rax, %rdx
+ 18768 11c8d 0FB6856C movzbl -8340(%rbp), %eax
+ 18768 DFFFFF
+ 18769 11c94 48C1E208 salq $8, %rdx
+ 18770 11c98 4809C2 orq %rax, %rdx
+ 18771 11c9b 0FB6856D movzbl -8339(%rbp), %eax
+ 18771 DFFFFF
+ 18772 11ca2 48C1E208 salq $8, %rdx
+ 18773 11ca6 4809C2 orq %rax, %rdx
+ 18774 11ca9 0FB6856E movzbl -8338(%rbp), %eax
+ 18774 DFFFFF
+ 18775 11cb0 48C1E208 salq $8, %rdx
+ 18776 11cb4 4809C2 orq %rax, %rdx
+ 18777 11cb7 0FB6856F movzbl -8337(%rbp), %eax
+ 18777 DFFFFF
+ 18778 11cbe 48C1E208 salq $8, %rdx
+ 18779 11cc2 4809C2 orq %rax, %rdx
+ 18780 11cc5 410FB6C7 movzbl %r15b, %eax
+ 18781 11cc9 48C1E208 salq $8, %rdx
+ 18782 11ccd 4809C2 orq %rax, %rdx
+ 18783 11cd0 0FB6C1 movzbl %cl, %eax
+ 18784 11cd3 400FB6CE movzbl %sil, %ecx
+ 18785 11cd7 48C1E008 salq $8, %rax
+ 18786 11cdb 4809C8 orq %rcx, %rax
+ 18787 11cde 410FB6C8 movzbl %r8b, %ecx
+ 18788 11ce2 48C1E008 salq $8, %rax
+ 18789 11ce6 4809C8 orq %rcx, %rax
+ 18790 11ce9 410FB6CE movzbl %r14b, %ecx
+ 18791 11ced 48C1E008 salq $8, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 580
+
+
+ 18792 11cf1 4809C8 orq %rcx, %rax
+ 18793 11cf4 410FB6CD movzbl %r13b, %ecx
+ 18794 11cf8 48C1E008 salq $8, %rax
+ 18795 11cfc 4809C8 orq %rcx, %rax
+ 18796 11cff 410FB6CC movzbl %r12b, %ecx
+ 18797 11d03 48C1E008 salq $8, %rax
+ 18798 11d07 4809C8 orq %rcx, %rax
+ 18799 11d0a 410FB6CB movzbl %r11b, %ecx
+ 18800 11d0e 48C1E008 salq $8, %rax
+ 18801 11d12 4809C8 orq %rcx, %rax
+ 18802 11d15 410FB6CA movzbl %r10b, %ecx
+ 18803 11d19 48C1E008 salq $8, %rax
+ 18804 11d1d 4809C8 orq %rcx, %rax
+ 18805 11d20 48899550 movq %rdx, -8880(%rbp)
+ 18805 DDFFFF
+ 18806 11d27 48898558 movq %rax, -8872(%rbp)
+ 18806 DDFFFF
+ 18807 11d2e 660F6F85 movdqa -8880(%rbp), %xmm0
+ 18807 50DDFFFF
+ 18808 .LBE2259:
+ 18809 .LBE2258:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 18810 .loc 2 862 0
+ 18811 11d36 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 18811 90FAFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 18812 .loc 2 866 0
+ 18813 11d3e C7856CFA movl $0, -1428(%rbp)
+ 18813 FFFF0000
+ 18813 0000
+ 18814 11d48 E9860200 jmp .L444
+ 18814 00
+ 18815 .L453:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 18816 .loc 2 868 0
+ 18817 11d4d 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 18817 00000000
+ 18818 11d55 F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 18818 00FBFFFF
+ 18819 11d5d F30F6F85 movdqu -1392(%rbp), %xmm0
+ 18819 90FAFFFF
+ 18820 11d65 F30F7F85 movdqu %xmm0, -1296(%rbp)
+ 18820 F0FAFFFF
+ 18821 .LBB2260:
+ 18822 .LBB2261:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 18823 .loc 2 380 0
+ 18824 11d6d F30F6F85 movdqu -1280(%rbp), %xmm0
+ 18824 00FBFFFF
+ 18825 11d75 F30F7F85 movdqu %xmm0, -6256(%rbp)
+ 18825 90E7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 18826 .loc 2 381 0
+ 18827 11d7d F30F6F85 movdqu -1296(%rbp), %xmm0
+ 18827 F0FAFFFF
+ 18828 11d85 F30F7F85 movdqu %xmm0, -6272(%rbp)
+ 18828 80E7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 581
+
+
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 18829 .loc 2 383 0
+ 18830 11d8d C7851CFB movl $0, -1252(%rbp)
+ 18830 FFFF0000
+ 18830 0000
+ 18831 11d97 EB5C jmp .L445
+ 18832 .L448:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 18833 .loc 2 385 0
+ 18834 11d99 8B851CFB movl -1252(%rbp), %eax
+ 18834 FFFF
+ 18835 11d9f 89C0 mov %eax, %eax
+ 18836 11da1 0FB68405 movzbl -6272(%rbp,%rax), %eax
+ 18836 80E7FFFF
+ 18837 11da9 84C0 testb %al, %al
+ 18838 11dab 7912 jns .L446
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 18839 .loc 2 386 0
+ 18840 11dad 8B851CFB movl -1252(%rbp), %eax
+ 18840 FFFF
+ 18841 11db3 89C0 mov %eax, %eax
+ 18842 11db5 C68405A0 movb $0, -6240(%rbp,%rax)
+ 18842 E7FFFF00
+ 18843 11dbd EB2F jmp .L447
+ 18844 .L446:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 18845 .loc 2 388 0
+ 18846 11dbf 8B8D1CFB movl -1252(%rbp), %ecx
+ 18846 FFFF
+ 18847 11dc5 8B851CFB movl -1252(%rbp), %eax
+ 18847 FFFF
+ 18848 11dcb 89C0 mov %eax, %eax
+ 18849 11dcd 0FB68405 movzbl -6272(%rbp,%rax), %eax
+ 18849 80E7FFFF
+ 18850 11dd5 0FB6C0 movzbl %al, %eax
+ 18851 11dd8 83E00F andl $15, %eax
+ 18852 11ddb 4898 cltq
+ 18853 11ddd 0FB69405 movzbl -6256(%rbp,%rax), %edx
+ 18853 90E7FFFF
+ 18854 11de5 89C8 mov %ecx, %eax
+ 18855 11de7 889405A0 movb %dl, -6240(%rbp,%rax)
+ 18855 E7FFFF
+ 18856 .L447:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 18857 .loc 2 383 0
+ 18858 11dee 83851CFB addl $1, -1252(%rbp)
+ 18858 FFFF01
+ 18859 .L445:
+ 18860 11df5 83BD1CFB cmpl $15, -1252(%rbp)
+ 18860 FFFF0F
+ 18861 11dfc 769B jbe .L448
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 18862 .loc 2 391 0
+ 18863 11dfe F30F6F85 movdqu -6240(%rbp), %xmm0
+ 18863 A0E7FFFF
+ 18864 .LBE2261:
+ 18865 .LBE2260:
+
GAS LISTING /tmp/ccMa7HLZ.s page 582
+
+
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 18866 .loc 2 868 0
+ 18867 11e06 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 18867 80FAFFFF
+ 18868 11e0e F30F6F85 movdqu -1376(%rbp), %xmm0
+ 18868 A0FAFFFF
+ 18869 11e16 F30F7F85 movdqu %xmm0, -1232(%rbp)
+ 18869 30FBFFFF
+ 18870 11e1e F30F6F85 movdqu -1408(%rbp), %xmm0
+ 18870 80FAFFFF
+ 18871 11e26 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 18871 20FBFFFF
+ 18872 .LBB2262:
+ 18873 .LBB2263:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 18874 .loc 2 234 0
+ 18875 11e2e F30F6F85 movdqu -1248(%rbp), %xmm0
+ 18875 20FBFFFF
+ 18876 11e36 F30F6F8D movdqu -1232(%rbp), %xmm1
+ 18876 30FBFFFF
+ 18877 11e3e 660FEBC1 por %xmm1, %xmm0
+ 18878 .LBE2263:
+ 18879 .LBE2262:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 18880 .loc 2 870 0
+ 18881 11e42 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 18881 80FAFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 18882 .loc 2 872 0
+ 18883 11e4a 8B856CFA mov -1428(%rbp), %eax
+ 18883 FFFF
+ 18884 11e50 48C1E004 salq $4, %rax
+ 18885 11e54 48038548 addq -1464(%rbp), %rax
+ 18885 FAFFFF
+ 18886 11e5b 660F6F00 movdqa (%rax), %xmm0
+ 18887 11e5f F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 18887 50FBFFFF
+ 18888 11e67 F30F6F85 movdqu -1408(%rbp), %xmm0
+ 18888 80FAFFFF
+ 18889 11e6f F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 18889 40FBFFFF
+ 18890 .LBB2264:
+ 18891 .LBB2265:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 18892 .loc 2 380 0
+ 18893 11e77 F30F6F85 movdqu -1200(%rbp), %xmm0
+ 18893 50FBFFFF
+ 18894 11e7f F30F7F85 movdqu %xmm0, -6208(%rbp)
+ 18894 C0E7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 18895 .loc 2 381 0
+ 18896 11e87 F30F6F85 movdqu -1216(%rbp), %xmm0
+ 18896 40FBFFFF
+ 18897 11e8f F30F7F85 movdqu %xmm0, -6224(%rbp)
+ 18897 B0E7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 18898 .loc 2 383 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 583
+
+
+ 18899 11e97 C7856CFB movl $0, -1172(%rbp)
+ 18899 FFFF0000
+ 18899 0000
+ 18900 11ea1 EB5C jmp .L449
+ 18901 .L452:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 18902 .loc 2 385 0
+ 18903 11ea3 8B856CFB movl -1172(%rbp), %eax
+ 18903 FFFF
+ 18904 11ea9 89C0 mov %eax, %eax
+ 18905 11eab 0FB68405 movzbl -6224(%rbp,%rax), %eax
+ 18905 B0E7FFFF
+ 18906 11eb3 84C0 testb %al, %al
+ 18907 11eb5 7912 jns .L450
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 18908 .loc 2 386 0
+ 18909 11eb7 8B856CFB movl -1172(%rbp), %eax
+ 18909 FFFF
+ 18910 11ebd 89C0 mov %eax, %eax
+ 18911 11ebf C68405D0 movb $0, -6192(%rbp,%rax)
+ 18911 E7FFFF00
+ 18912 11ec7 EB2F jmp .L451
+ 18913 .L450:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 18914 .loc 2 388 0
+ 18915 11ec9 8B8D6CFB movl -1172(%rbp), %ecx
+ 18915 FFFF
+ 18916 11ecf 8B856CFB movl -1172(%rbp), %eax
+ 18916 FFFF
+ 18917 11ed5 89C0 mov %eax, %eax
+ 18918 11ed7 0FB68405 movzbl -6224(%rbp,%rax), %eax
+ 18918 B0E7FFFF
+ 18919 11edf 0FB6C0 movzbl %al, %eax
+ 18920 11ee2 83E00F andl $15, %eax
+ 18921 11ee5 4898 cltq
+ 18922 11ee7 0FB69405 movzbl -6208(%rbp,%rax), %edx
+ 18922 C0E7FFFF
+ 18923 11eef 89C8 mov %ecx, %eax
+ 18924 11ef1 889405D0 movb %dl, -6192(%rbp,%rax)
+ 18924 E7FFFF
+ 18925 .L451:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 18926 .loc 2 383 0
+ 18927 11ef8 83856CFB addl $1, -1172(%rbp)
+ 18927 FFFF01
+ 18928 .L449:
+ 18929 11eff 83BD6CFB cmpl $15, -1172(%rbp)
+ 18929 FFFF0F
+ 18930 11f06 769B jbe .L452
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 18931 .loc 2 391 0
+ 18932 11f08 F30F6F85 movdqu -6192(%rbp), %xmm0
+ 18932 D0E7FFFF
+ 18933 .LBE2265:
+ 18934 .LBE2264:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 18935 .loc 2 872 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 584
+
+
+ 18936 11f10 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 18936 80FAFFFF
+ 18937 11f18 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 18937 70FAFFFF
+ 18938 11f20 F30F7F85 movdqu %xmm0, -1152(%rbp)
+ 18938 80FBFFFF
+ 18939 11f28 F30F6F85 movdqu -1408(%rbp), %xmm0
+ 18939 80FAFFFF
+ 18940 11f30 F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 18940 70FBFFFF
+ 18941 .LBB2266:
+ 18942 .LBB2267:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 18943 .loc 2 234 0
+ 18944 11f38 F30F6F85 movdqu -1168(%rbp), %xmm0
+ 18944 70FBFFFF
+ 18945 11f40 F30F6F8D movdqu -1152(%rbp), %xmm1
+ 18945 80FBFFFF
+ 18946 11f48 660FEBC1 por %xmm1, %xmm0
+ 18947 .LBE2267:
+ 18948 .LBE2266:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 18949 .loc 2 874 0
+ 18950 11f4c F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 18950 70FAFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18951 .loc 2 876 0
+ 18952 11f54 660F6F05 movdqa vec_01(%rip), %xmm0
+ 18952 00000000
+ 18953 11f5c F30F6F8D movdqu -1392(%rbp), %xmm1
+ 18953 90FAFFFF
+ 18954 11f64 F30F7F8D movdqu %xmm1, -1120(%rbp)
+ 18954 A0FBFFFF
+ 18955 11f6c F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 18955 90FBFFFF
+ 18956 .LBB2268:
+ 18957 .LBB2269:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 18958 .loc 2 290 0
+ 18959 11f74 F30F6F8D movdqu -1136(%rbp), %xmm1
+ 18959 90FBFFFF
+ 18960 11f7c F30F6F85 movdqu -1120(%rbp), %xmm0
+ 18960 A0FBFFFF
+ 18961 11f84 660FF8C1 psubb %xmm1, %xmm0
+ 18962 .LBE2269:
+ 18963 .LBE2268:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18964 .loc 2 876 0
+ 18965 11f88 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 18965 90FAFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18966 .loc 2 878 0
+ 18967 11f90 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 18967 00000000
+ 18968 11f98 F30F6F8D movdqu -1392(%rbp), %xmm1
+ 18968 90FAFFFF
+ 18969 11fa0 F30F7F8D movdqu %xmm1, -1088(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 585
+
+
+ 18969 C0FBFFFF
+ 18970 11fa8 F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 18970 B0FBFFFF
+ 18971 .LBB2270:
+ 18972 .LBB2271:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 18973 .loc 2 206 0
+ 18974 11fb0 F30F6F85 movdqu -1104(%rbp), %xmm0
+ 18974 B0FBFFFF
+ 18975 11fb8 F30F6F8D movdqu -1088(%rbp), %xmm1
+ 18975 C0FBFFFF
+ 18976 11fc0 660FDBC1 pand %xmm1, %xmm0
+ 18977 .LBE2271:
+ 18978 .LBE2270:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18979 .loc 2 878 0
+ 18980 11fc4 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 18980 90FAFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 18981 .loc 2 866 0
+ 18982 11fcc 83856CFA addl $1, -1428(%rbp)
+ 18982 FFFF01
+ 18983 .L444:
+ 18984 11fd3 83BD6CFA cmpl $15, -1428(%rbp)
+ 18984 FFFF0F
+ 18985 11fda 0F866DFD jbe .L453
+ 18985 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 18986 .loc 2 882 0
+ 18987 11fe0 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 18987 70FAFFFF
+ 18988 .LBE2255:
+ 18989 .LBE2254:
+ 18990 .LBE2253:
+ 18991 .LBE2252:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 18992 .loc 2 1682 0
+ 18993 11fe8 660F7F85 movdqa %xmm0, -8384(%rbp)
+ 18993 40DFFFFF
+ 18994 .LBB2272:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 18995 .loc 2 1683 0
+ 18996 11ff0 660F6F85 movdqa -8384(%rbp), %xmm0
+ 18996 40DFFFFF
+ 18997 11ff8 F30F7F85 movdqu %xmm0, -6304(%rbp)
+ 18997 60E7FFFF
+ 18998 12000 E8000000 call KDbgWriterGet at PLT
+ 18998 00
+ 18999 12005 4885C0 testq %rax, %rax
+ 19000 12008 7479 je .L455
+ 19001 1200a BF010000 movl $1, %edi
+ 19001 00
+ 19002 1200f E8000000 call KDbgCondToFlag at PLT
+ 19002 00
+ 19003 12014 4889C6 movq %rax, %rsi
+ 19004 12017 BF100000 movl $16, %edi
+ 19004 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 586
+
+
+ 19005 1201c E8000000 call KDbgTestModConds at PLT
+ 19005 00
+ 19006 12021 84C0 testb %al, %al
+ 19007 12023 745E je .L455
+ 19008 12025 8B856CE7 movl -6292(%rbp), %eax
+ 19008 FFFF
+ 19009 1202b 89C7 movl %eax, %edi
+ 19010 1202d E8CEDFFE call bswap_32
+ 19010 FF
+ 19011 12032 4189C5 movl %eax, %r13d
+ 19012 12035 8B8568E7 movl -6296(%rbp), %eax
+ 19012 FFFF
+ 19013 1203b 89C7 movl %eax, %edi
+ 19014 1203d E8BEDFFE call bswap_32
+ 19014 FF
+ 19015 12042 4189C4 movl %eax, %r12d
+ 19016 12045 8B8564E7 movl -6300(%rbp), %eax
+ 19016 FFFF
+ 19017 1204b 89C7 movl %eax, %edi
+ 19018 1204d E8AEDFFE call bswap_32
+ 19018 FF
+ 19019 12052 89C3 movl %eax, %ebx
+ 19020 12054 8B8560E7 movl -6304(%rbp), %eax
+ 19020 FFFF
+ 19021 1205a 89C7 movl %eax, %edi
+ 19022 1205c E89FDFFE call bswap_32
+ 19022 FF
+ 19023 12061 4589E9 movl %r13d, %r9d
+ 19024 12064 4589E0 movl %r12d, %r8d
+ 19025 12067 89D9 movl %ebx, %ecx
+ 19026 12069 89C2 movl %eax, %edx
+ 19027 1206b 488D3500 leaq .LC0(%rip), %rsi
+ 19027 000000
+ 19028 12072 488D3D00 leaq .LC1(%rip), %rdi
+ 19028 000000
+ 19029 12079 B8000000 movl $0, %eax
+ 19029 00
+ 19030 1207e E8000000 call KDbgMsg at PLT
+ 19030 00
+ 19031 .L455:
+ 19032 12083 660F6F85 movdqa -8384(%rbp), %xmm0
+ 19032 40DFFFFF
+ 19033 1208b F30F7F85 movdqu %xmm0, -1072(%rbp)
+ 19033 D0FBFFFF
+ 19034 .LBE2272:
+ 19035 .LBB2273:
+ 19036 .LBB2274:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19037 .loc 2 667 0
+ 19038 12093 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 19038 00000000
+ 19039 1209b F30F6F8D movdqu -1072(%rbp), %xmm1
+ 19039 D0FBFFFF
+ 19040 120a3 F30F7F8D movdqu %xmm1, -1040(%rbp)
+ 19040 F0FBFFFF
+ 19041 120ab F30F7F85 movdqu %xmm0, -1056(%rbp)
+ 19041 E0FBFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 587
+
+
+ 19042 .LBB2275:
+ 19043 .LBB2276:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 19044 .loc 2 380 0
+ 19045 120b3 F30F6F85 movdqu -1040(%rbp), %xmm0
+ 19045 F0FBFFFF
+ 19046 120bb F30F7F85 movdqu %xmm0, -6160(%rbp)
+ 19046 F0E7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 19047 .loc 2 381 0
+ 19048 120c3 F30F6F85 movdqu -1056(%rbp), %xmm0
+ 19048 E0FBFFFF
+ 19049 120cb F30F7F85 movdqu %xmm0, -6176(%rbp)
+ 19049 E0E7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 19050 .loc 2 383 0
+ 19051 120d3 C7850CFC movl $0, -1012(%rbp)
+ 19051 FFFF0000
+ 19051 0000
+ 19052 120dd EB5C jmp .L456
+ 19053 .L459:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 19054 .loc 2 385 0
+ 19055 120df 8B850CFC movl -1012(%rbp), %eax
+ 19055 FFFF
+ 19056 120e5 89C0 mov %eax, %eax
+ 19057 120e7 0FB68405 movzbl -6176(%rbp,%rax), %eax
+ 19057 E0E7FFFF
+ 19058 120ef 84C0 testb %al, %al
+ 19059 120f1 7912 jns .L457
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 19060 .loc 2 386 0
+ 19061 120f3 8B850CFC movl -1012(%rbp), %eax
+ 19061 FFFF
+ 19062 120f9 89C0 mov %eax, %eax
+ 19063 120fb C6840500 movb $0, -6144(%rbp,%rax)
+ 19063 E8FFFF00
+ 19064 12103 EB2F jmp .L458
+ 19065 .L457:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 19066 .loc 2 388 0
+ 19067 12105 8B8D0CFC movl -1012(%rbp), %ecx
+ 19067 FFFF
+ 19068 1210b 8B850CFC movl -1012(%rbp), %eax
+ 19068 FFFF
+ 19069 12111 89C0 mov %eax, %eax
+ 19070 12113 0FB68405 movzbl -6176(%rbp,%rax), %eax
+ 19070 E0E7FFFF
+ 19071 1211b 0FB6C0 movzbl %al, %eax
+ 19072 1211e 83E00F andl $15, %eax
+ 19073 12121 4898 cltq
+ 19074 12123 0FB69405 movzbl -6160(%rbp,%rax), %edx
+ 19074 F0E7FFFF
+ 19075 1212b 89C8 mov %ecx, %eax
+ 19076 1212d 88940500 movb %dl, -6144(%rbp,%rax)
+ 19076 E8FFFF
+ 19077 .L458:
+
GAS LISTING /tmp/ccMa7HLZ.s page 588
+
+
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 19078 .loc 2 383 0
+ 19079 12134 83850CFC addl $1, -1012(%rbp)
+ 19079 FFFF01
+ 19080 .L456:
+ 19081 1213b 83BD0CFC cmpl $15, -1012(%rbp)
+ 19081 FFFF0F
+ 19082 12142 769B jbe .L459
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 19083 .loc 2 391 0
+ 19084 12144 F30F6F85 movdqu -6144(%rbp), %xmm0
+ 19084 00E8FFFF
+ 19085 .LBE2276:
+ 19086 .LBE2275:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19087 .loc 2 667 0
+ 19088 1214c F30F7F85 movdqu %xmm0, -1072(%rbp)
+ 19088 D0FBFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 19089 .loc 2 668 0
+ 19090 12154 F30F6F85 movdqu -1072(%rbp), %xmm0
+ 19090 D0FBFFFF
+ 19091 .LBE2274:
+ 19092 .LBE2273:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 19093 .loc 2 1684 0
+ 19094 1215c 660F7F85 movdqa %xmm0, -8384(%rbp)
+ 19094 40DFFFFF
+ 19095 .LBB2277:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 19096 .loc 2 1685 0
+ 19097 12164 660F6F85 movdqa -8384(%rbp), %xmm0
+ 19097 40DFFFFF
+ 19098 1216c F30F7F85 movdqu %xmm0, -6320(%rbp)
+ 19098 50E7FFFF
+ 19099 12174 E8000000 call KDbgWriterGet at PLT
+ 19099 00
+ 19100 12179 4885C0 testq %rax, %rax
+ 19101 1217c 7479 je .L461
+ 19102 1217e BF010000 movl $1, %edi
+ 19102 00
+ 19103 12183 E8000000 call KDbgCondToFlag at PLT
+ 19103 00
+ 19104 12188 4889C6 movq %rax, %rsi
+ 19105 1218b BF100000 movl $16, %edi
+ 19105 00
+ 19106 12190 E8000000 call KDbgTestModConds at PLT
+ 19106 00
+ 19107 12195 84C0 testb %al, %al
+ 19108 12197 745E je .L461
+ 19109 12199 8B855CE7 movl -6308(%rbp), %eax
+ 19109 FFFF
+ 19110 1219f 89C7 movl %eax, %edi
+ 19111 121a1 E85ADEFE call bswap_32
+ 19111 FF
+ 19112 121a6 4189C5 movl %eax, %r13d
+ 19113 121a9 8B8558E7 movl -6312(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 589
+
+
+ 19113 FFFF
+ 19114 121af 89C7 movl %eax, %edi
+ 19115 121b1 E84ADEFE call bswap_32
+ 19115 FF
+ 19116 121b6 4189C4 movl %eax, %r12d
+ 19117 121b9 8B8554E7 movl -6316(%rbp), %eax
+ 19117 FFFF
+ 19118 121bf 89C7 movl %eax, %edi
+ 19119 121c1 E83ADEFE call bswap_32
+ 19119 FF
+ 19120 121c6 89C3 movl %eax, %ebx
+ 19121 121c8 8B8550E7 movl -6320(%rbp), %eax
+ 19121 FFFF
+ 19122 121ce 89C7 movl %eax, %edi
+ 19123 121d0 E82BDEFE call bswap_32
+ 19123 FF
+ 19124 121d5 4589E9 movl %r13d, %r9d
+ 19125 121d8 4589E0 movl %r12d, %r8d
+ 19126 121db 89D9 movl %ebx, %ecx
+ 19127 121dd 89C2 movl %eax, %edx
+ 19128 121df 488D3500 leaq .LC2(%rip), %rsi
+ 19128 000000
+ 19129 121e6 488D3D00 leaq .LC1(%rip), %rdi
+ 19129 000000
+ 19130 121ed B8000000 movl $0, %eax
+ 19130 00
+ 19131 121f2 E8000000 call KDbgMsg at PLT
+ 19131 00
+ 19132 .L461:
+ 19133 121f7 660F6F85 movdqa -8384(%rbp), %xmm0
+ 19133 40DFFFFF
+ 19134 121ff F30F7F85 movdqu %xmm0, -992(%rbp)
+ 19134 20FCFFFF
+ 19135 12207 660F6F85 movdqa -8368(%rbp), %xmm0
+ 19135 50DFFFFF
+ 19136 1220f F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 19136 10FCFFFF
+ 19137 .LBE2277:
+ 19138 .LBB2278:
+ 19139 .LBB2279:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19140 .loc 2 178 0
+ 19141 12217 F30F6F85 movdqu -1008(%rbp), %xmm0
+ 19141 10FCFFFF
+ 19142 1221f F30F6F8D movdqu -992(%rbp), %xmm1
+ 19142 20FCFFFF
+ 19143 12227 660FEFC1 pxor %xmm1, %xmm0
+ 19144 .LBE2279:
+ 19145 .LBE2278:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 19146 .loc 2 1686 0
+ 19147 1222b 660F7F85 movdqa %xmm0, -8384(%rbp)
+ 19147 40DFFFFF
+ 19148 .LBB2280:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 19149 .loc 2 1687 0
+ 19150 12233 660F6F85 movdqa -8384(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 590
+
+
+ 19150 40DFFFFF
+ 19151 1223b F30F7F85 movdqu %xmm0, -6336(%rbp)
+ 19151 40E7FFFF
+ 19152 12243 E8000000 call KDbgWriterGet at PLT
+ 19152 00
+ 19153 12248 4885C0 testq %rax, %rax
+ 19154 1224b 7479 je .L463
+ 19155 1224d BF010000 movl $1, %edi
+ 19155 00
+ 19156 12252 E8000000 call KDbgCondToFlag at PLT
+ 19156 00
+ 19157 12257 4889C6 movq %rax, %rsi
+ 19158 1225a BF100000 movl $16, %edi
+ 19158 00
+ 19159 1225f E8000000 call KDbgTestModConds at PLT
+ 19159 00
+ 19160 12264 84C0 testb %al, %al
+ 19161 12266 745E je .L463
+ 19162 12268 8B854CE7 movl -6324(%rbp), %eax
+ 19162 FFFF
+ 19163 1226e 89C7 movl %eax, %edi
+ 19164 12270 E88BDDFE call bswap_32
+ 19164 FF
+ 19165 12275 4189C5 movl %eax, %r13d
+ 19166 12278 8B8548E7 movl -6328(%rbp), %eax
+ 19166 FFFF
+ 19167 1227e 89C7 movl %eax, %edi
+ 19168 12280 E87BDDFE call bswap_32
+ 19168 FF
+ 19169 12285 4189C4 movl %eax, %r12d
+ 19170 12288 8B8544E7 movl -6332(%rbp), %eax
+ 19170 FFFF
+ 19171 1228e 89C7 movl %eax, %edi
+ 19172 12290 E86BDDFE call bswap_32
+ 19172 FF
+ 19173 12295 89C3 movl %eax, %ebx
+ 19174 12297 8B8540E7 movl -6336(%rbp), %eax
+ 19174 FFFF
+ 19175 1229d 89C7 movl %eax, %edi
+ 19176 1229f E85CDDFE call bswap_32
+ 19176 FF
+ 19177 122a4 4589E9 movl %r13d, %r9d
+ 19178 122a7 4589E0 movl %r12d, %r8d
+ 19179 122aa 89D9 movl %ebx, %ecx
+ 19180 122ac 89C2 movl %eax, %edx
+ 19181 122ae 488D3500 leaq .LC3(%rip), %rsi
+ 19181 000000
+ 19182 122b5 488D3D00 leaq .LC1(%rip), %rdi
+ 19182 000000
+ 19183 122bc B8000000 movl $0, %eax
+ 19183 00
+ 19184 122c1 E8000000 call KDbgMsg at PLT
+ 19184 00
+ 19185 .L463:
+ 19186 122c6 660F6F85 movdqa -8384(%rbp), %xmm0
+ 19186 40DFFFFF
+ 19187 122ce F30F7F85 movdqu %xmm0, -976(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 591
+
+
+ 19187 30FCFFFF
+ 19188 .LBE2280:
+ 19189 .LBB2281:
+ 19190 .LBB2282:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 19191 .loc 2 1357 0
+ 19192 122d6 F30F6F85 movdqu -976(%rbp), %xmm0
+ 19192 30FCFFFF
+ 19193 122de F30F7F85 movdqu %xmm0, -6128(%rbp)
+ 19193 10E8FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 19194 .loc 2 1358 0
+ 19195 122e6 8B851CE8 movl -6116(%rbp), %eax
+ 19195 FFFF
+ 19196 122ec 898518E8 movl %eax, -6120(%rbp)
+ 19196 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 19197 .loc 2 1359 0
+ 19198 122f2 8B851CE8 movl -6116(%rbp), %eax
+ 19198 FFFF
+ 19199 122f8 898514E8 movl %eax, -6124(%rbp)
+ 19199 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 19200 .loc 2 1360 0
+ 19201 122fe 8B851CE8 movl -6116(%rbp), %eax
+ 19201 FFFF
+ 19202 12304 898510E8 movl %eax, -6128(%rbp)
+ 19202 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 19203 .loc 2 1361 0
+ 19204 1230a F30F6F85 movdqu -6128(%rbp), %xmm0
+ 19204 10E8FFFF
+ 19205 .LBE2282:
+ 19206 .LBE2281:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 19207 .loc 2 1688 0
+ 19208 12312 660F7F85 movdqa %xmm0, -8384(%rbp)
+ 19208 40DFFFFF
+ 19209 .LBB2283:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 19210 .loc 2 1689 0
+ 19211 1231a 660F6F85 movdqa -8384(%rbp), %xmm0
+ 19211 40DFFFFF
+ 19212 12322 F30F7F85 movdqu %xmm0, -6352(%rbp)
+ 19212 30E7FFFF
+ 19213 1232a E8000000 call KDbgWriterGet at PLT
+ 19213 00
+ 19214 1232f 4885C0 testq %rax, %rax
+ 19215 12332 7479 je .L465
+ 19216 12334 BF010000 movl $1, %edi
+ 19216 00
+ 19217 12339 E8000000 call KDbgCondToFlag at PLT
+ 19217 00
+ 19218 1233e 4889C6 movq %rax, %rsi
+ 19219 12341 BF100000 movl $16, %edi
+ 19219 00
+ 19220 12346 E8000000 call KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 592
+
+
+ 19220 00
+ 19221 1234b 84C0 testb %al, %al
+ 19222 1234d 745E je .L465
+ 19223 1234f 8B853CE7 movl -6340(%rbp), %eax
+ 19223 FFFF
+ 19224 12355 89C7 movl %eax, %edi
+ 19225 12357 E8A4DCFE call bswap_32
+ 19225 FF
+ 19226 1235c 4189C5 movl %eax, %r13d
+ 19227 1235f 8B8538E7 movl -6344(%rbp), %eax
+ 19227 FFFF
+ 19228 12365 89C7 movl %eax, %edi
+ 19229 12367 E894DCFE call bswap_32
+ 19229 FF
+ 19230 1236c 4189C4 movl %eax, %r12d
+ 19231 1236f 8B8534E7 movl -6348(%rbp), %eax
+ 19231 FFFF
+ 19232 12375 89C7 movl %eax, %edi
+ 19233 12377 E884DCFE call bswap_32
+ 19233 FF
+ 19234 1237c 89C3 movl %eax, %ebx
+ 19235 1237e 8B8530E7 movl -6352(%rbp), %eax
+ 19235 FFFF
+ 19236 12384 89C7 movl %eax, %edi
+ 19237 12386 E875DCFE call bswap_32
+ 19237 FF
+ 19238 1238b 4589E9 movl %r13d, %r9d
+ 19239 1238e 4589E0 movl %r12d, %r8d
+ 19240 12391 89D9 movl %ebx, %ecx
+ 19241 12393 89C2 movl %eax, %edx
+ 19242 12395 488D3500 leaq .LC4(%rip), %rsi
+ 19242 000000
+ 19243 1239c 488D3D00 leaq .LC1(%rip), %rdi
+ 19243 000000
+ 19244 123a3 B8000000 movl $0, %eax
+ 19244 00
+ 19245 123a8 E8000000 call KDbgMsg at PLT
+ 19245 00
+ 19246 .L465:
+ 19247 .LBE2283:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 19248 .loc 2 1690 0
+ 19249 123ad 660F6F85 movdqa -8384(%rbp), %xmm0
+ 19249 40DFFFFF
+ 19250 .LBE2249:
+ 19251 .LBE2248:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(12,0x20); /* k48 : k49 : k50 : k51 */
+ 19252 .loc 2 1936 0
+ 19253 123b5 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 19253 E0E9FFFF
+ 19254 123bd F30F6F85 movdqu -5696(%rbp), %xmm0
+ 19254 C0E9FFFF
+ 19255 123c5 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 19255 40FCFFFF
+ 19256 .LBB2284:
+ 19257 .LBB2285:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 593
+
+
+ 19258 .loc 2 1565 0
+ 19259 123cd F30F6F85 movdqu -960(%rbp), %xmm0
+ 19259 40FCFFFF
+ 19260 123d5 660F7F85 movdqa %xmm0, -8336(%rbp)
+ 19260 70DFFFFF
+ 19261 123dd 660F6F85 movdqa -8336(%rbp), %xmm0
+ 19261 70DFFFFF
+ 19262 123e5 F30F7F85 movdqu %xmm0, -944(%rbp)
+ 19262 50FCFFFF
+ 19263 .LBB2286:
+ 19264 .LBB2287:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 19265 .loc 2 1282 0
+ 19266 123ed F30F6F85 movdqu -944(%rbp), %xmm0
+ 19266 50FCFFFF
+ 19267 123f5 F30F7F85 movdqu %xmm0, -6112(%rbp)
+ 19267 20E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 19268 .loc 2 1283 0
+ 19269 123fd 8B8528E8 movl -6104(%rbp), %eax
+ 19269 FFFF
+ 19270 12403 89852CE8 movl %eax, -6100(%rbp)
+ 19270 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 19271 .loc 2 1284 0
+ 19272 12409 8B8524E8 movl -6108(%rbp), %eax
+ 19272 FFFF
+ 19273 1240f 898528E8 movl %eax, -6104(%rbp)
+ 19273 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 19274 .loc 2 1285 0
+ 19275 12415 8B8520E8 movl -6112(%rbp), %eax
+ 19275 FFFF
+ 19276 1241b 898524E8 movl %eax, -6108(%rbp)
+ 19276 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 19277 .loc 2 1286 0
+ 19278 12421 C78520E8 movl $0, -6112(%rbp)
+ 19278 FFFF0000
+ 19278 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 19279 .loc 2 1287 0
+ 19280 1242b F30F6F85 movdqu -6112(%rbp), %xmm0
+ 19280 20E8FFFF
+ 19281 .LBE2287:
+ 19282 .LBE2286:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19283 .loc 2 1567 0
+ 19284 12433 660F7F85 movdqa %xmm0, -8336(%rbp)
+ 19284 70DFFFFF
+ 19285 1243b 660F6F85 movdqa -8336(%rbp), %xmm0
+ 19285 70DFFFFF
+ 19286 12443 660FEF85 pxor -960(%rbp), %xmm0
+ 19286 40FCFFFF
+ 19287 1244b F30F7F85 movdqu %xmm0, -960(%rbp)
+ 19287 40FCFFFF
+ 19288 12453 660F6F85 movdqa -8336(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 594
+
+
+ 19288 70DFFFFF
+ 19289 1245b F30F7F85 movdqu %xmm0, -928(%rbp)
+ 19289 60FCFFFF
+ 19290 .LBB2288:
+ 19291 .LBB2289:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 19292 .loc 2 1282 0
+ 19293 12463 F30F6F85 movdqu -928(%rbp), %xmm0
+ 19293 60FCFFFF
+ 19294 1246b F30F7F85 movdqu %xmm0, -6096(%rbp)
+ 19294 30E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 19295 .loc 2 1283 0
+ 19296 12473 8B8538E8 movl -6088(%rbp), %eax
+ 19296 FFFF
+ 19297 12479 89853CE8 movl %eax, -6084(%rbp)
+ 19297 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 19298 .loc 2 1284 0
+ 19299 1247f 8B8534E8 movl -6092(%rbp), %eax
+ 19299 FFFF
+ 19300 12485 898538E8 movl %eax, -6088(%rbp)
+ 19300 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 19301 .loc 2 1285 0
+ 19302 1248b 8B8530E8 movl -6096(%rbp), %eax
+ 19302 FFFF
+ 19303 12491 898534E8 movl %eax, -6092(%rbp)
+ 19303 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 19304 .loc 2 1286 0
+ 19305 12497 C78530E8 movl $0, -6096(%rbp)
+ 19305 FFFF0000
+ 19305 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 19306 .loc 2 1287 0
+ 19307 124a1 F30F6F85 movdqu -6096(%rbp), %xmm0
+ 19307 30E8FFFF
+ 19308 .LBE2289:
+ 19309 .LBE2288:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19310 .loc 2 1568 0
+ 19311 124a9 660F7F85 movdqa %xmm0, -8336(%rbp)
+ 19311 70DFFFFF
+ 19312 124b1 660F6F85 movdqa -8336(%rbp), %xmm0
+ 19312 70DFFFFF
+ 19313 124b9 660FEF85 pxor -960(%rbp), %xmm0
+ 19313 40FCFFFF
+ 19314 124c1 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 19314 40FCFFFF
+ 19315 124c9 660F6F85 movdqa -8336(%rbp), %xmm0
+ 19315 70DFFFFF
+ 19316 124d1 F30F7F85 movdqu %xmm0, -912(%rbp)
+ 19316 70FCFFFF
+ 19317 .LBB2290:
+ 19318 .LBB2291:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 595
+
+
+ 19319 .loc 2 1282 0
+ 19320 124d9 F30F6F85 movdqu -912(%rbp), %xmm0
+ 19320 70FCFFFF
+ 19321 124e1 F30F7F85 movdqu %xmm0, -6080(%rbp)
+ 19321 40E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 19322 .loc 2 1283 0
+ 19323 124e9 8B8548E8 movl -6072(%rbp), %eax
+ 19323 FFFF
+ 19324 124ef 89854CE8 movl %eax, -6068(%rbp)
+ 19324 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 19325 .loc 2 1284 0
+ 19326 124f5 8B8544E8 movl -6076(%rbp), %eax
+ 19326 FFFF
+ 19327 124fb 898548E8 movl %eax, -6072(%rbp)
+ 19327 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 19328 .loc 2 1285 0
+ 19329 12501 8B8540E8 movl -6080(%rbp), %eax
+ 19329 FFFF
+ 19330 12507 898544E8 movl %eax, -6076(%rbp)
+ 19330 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 19331 .loc 2 1286 0
+ 19332 1250d C78540E8 movl $0, -6080(%rbp)
+ 19332 FFFF0000
+ 19332 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 19333 .loc 2 1287 0
+ 19334 12517 F30F6F85 movdqu -6080(%rbp), %xmm0
+ 19334 40E8FFFF
+ 19335 .LBE2291:
+ 19336 .LBE2290:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19337 .loc 2 1569 0
+ 19338 1251f 660F7F85 movdqa %xmm0, -8336(%rbp)
+ 19338 70DFFFFF
+ 19339 12527 660F6F85 movdqa -8336(%rbp), %xmm0
+ 19339 70DFFFFF
+ 19340 1252f 660FEF85 pxor -960(%rbp), %xmm0
+ 19340 40FCFFFF
+ 19341 12537 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 19341 40FCFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 19342 .loc 2 1571 0
+ 19343 1253f F30F6F85 movdqu -960(%rbp), %xmm0
+ 19343 40FCFFFF
+ 19344 .LBE2285:
+ 19345 .LBE2284:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(12,0x20); /* k48 : k49 : k50 : k51 */
+ 19346 .loc 2 1936 0
+ 19347 12547 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 19347 C0E9FFFF
+ 19348 1254f F30F6F85 movdqu -5696(%rbp), %xmm0
+ 19348 C0E9FFFF
+ 19349 12557 F30F7F85 movdqu %xmm0, -880(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 596
+
+
+ 19349 90FCFFFF
+ 19350 1255f F30F6F85 movdqu -5664(%rbp), %xmm0
+ 19350 E0E9FFFF
+ 19351 12567 F30F7F85 movdqu %xmm0, -896(%rbp)
+ 19351 80FCFFFF
+ 19352 .LBB2292:
+ 19353 .LBB2293:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19354 .loc 2 178 0
+ 19355 1256f F30F6F85 movdqu -896(%rbp), %xmm0
+ 19355 80FCFFFF
+ 19356 12577 F30F6F8D movdqu -880(%rbp), %xmm1
+ 19356 90FCFFFF
+ 19357 1257f 660FEFC1 pxor %xmm1, %xmm0
+ 19358 .LBE2293:
+ 19359 .LBE2292:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(12,0x20); /* k48 : k49 : k50 : k51 */
+ 19360 .loc 2 1936 0
+ 19361 12583 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 19361 C0E9FFFF
+ 19362 1258b 488B85D8 movq -8232(%rbp), %rax
+ 19362 DFFFFF
+ 19363 12592 4805C000 addq $192, %rax
+ 19363 0000
+ 19364 12598 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 19364 C0E9FFFF
+ 19365 125a0 F30F7F00 movdqu %xmm0, (%rax)
+ 19366 125a4 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 19366 C0E9FFFF
+ 19367 125ac F30F7F85 movdqu %xmm0, -864(%rbp)
+ 19367 A0FCFFFF
+ 19368 .LBB2294:
+ 19369 .LBB2295:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 19370 .loc 2 1656 0
+ 19371 125b4 F30F6F85 movdqu -864(%rbp), %xmm0
+ 19371 A0FCFFFF
+ 19372 125bc F30F7F85 movdqu %xmm0, -6048(%rbp)
+ 19372 60E8FFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 19373 .loc 2 1657 0
+ 19374 125c4 8B856CE8 movl -6036(%rbp), %eax
+ 19374 FFFF
+ 19375 125ca 8985B8FC movl %eax, -840(%rbp)
+ 19375 FFFF
+ 19376 .LBB2296:
+ 19377 .LBB2297:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 19378 .loc 2 740 0
+ 19379 125d0 8B85B8FC movl -840(%rbp), %eax
+ 19379 FFFF
+ 19380 125d6 898550E8 movl %eax, -6064(%rbp)
+ 19380 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 19381 .loc 2 741 0
+ 19382 125dc C785BCFC movl $0, -836(%rbp)
+ 19382 FFFF0000
+
GAS LISTING /tmp/ccMa7HLZ.s page 597
+
+
+ 19382 0000
+ 19383 125e6 EB36 jmp .L466
+ 19384 .L467:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 19385 .loc 2 742 0
+ 19386 125e8 8B8DBCFC movl -836(%rbp), %ecx
+ 19386 FFFF
+ 19387 125ee 8B85BCFC movl -836(%rbp), %eax
+ 19387 FFFF
+ 19388 125f4 89C0 mov %eax, %eax
+ 19389 125f6 0FB68405 movzbl -6064(%rbp,%rax), %eax
+ 19389 50E8FFFF
+ 19390 125fe 0FB6C0 movzbl %al, %eax
+ 19391 12601 89C2 mov %eax, %edx
+ 19392 12603 488D0500 leaq KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 19392 000000
+ 19393 1260a 0FB61402 movzbl (%rdx,%rax), %edx
+ 19394 1260e 89C8 mov %ecx, %eax
+ 19395 12610 88940550 movb %dl, -6064(%rbp,%rax)
+ 19395 E8FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 19396 .loc 2 741 0
+ 19397 12617 8385BCFC addl $1, -836(%rbp)
+ 19397 FFFF01
+ 19398 .L466:
+ 19399 1261e 83BDBCFC cmpl $3, -836(%rbp)
+ 19399 FFFF03
+ 19400 12625 76C1 jbe .L467
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 19401 .loc 2 743 0
+ 19402 12627 8B8550E8 movl -6064(%rbp), %eax
+ 19402 FFFF
+ 19403 .LBE2297:
+ 19404 .LBE2296:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 19405 .loc 2 1657 0
+ 19406 1262d 8985B4FC movl %eax, -844(%rbp)
+ 19406 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 19407 .loc 2 1659 0
+ 19408 12633 8B85B4FC movl -844(%rbp), %eax
+ 19408 FFFF
+ 19409 12639 89856CE8 movl %eax, -6036(%rbp)
+ 19409 FFFF
+ 19410 1263f 8B856CE8 movl -6036(%rbp), %eax
+ 19410 FFFF
+ 19411 12645 898568E8 movl %eax, -6040(%rbp)
+ 19411 FFFF
+ 19412 1264b 8B8568E8 movl -6040(%rbp), %eax
+ 19412 FFFF
+ 19413 12651 898564E8 movl %eax, -6044(%rbp)
+ 19413 FFFF
+ 19414 12657 8B8564E8 movl -6044(%rbp), %eax
+ 19414 FFFF
+ 19415 1265d 898560E8 movl %eax, -6048(%rbp)
+ 19415 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 598
+
+
+ 19416 .loc 2 1660 0
+ 19417 12663 F30F6F85 movdqu -6048(%rbp), %xmm0
+ 19417 60E8FFFF
+ 19418 .LBE2295:
+ 19419 .LBE2294:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(13); /* k52 : k53 : k54 : k55 */
+ 19420 .loc 2 1937 0
+ 19421 1266b F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 19421 E0E9FFFF
+ 19422 12673 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 19422 D0E9FFFF
+ 19423 1267b F30F7F85 movdqu %xmm0, -832(%rbp)
+ 19423 C0FCFFFF
+ 19424 .LBB2298:
+ 19425 .LBB2299:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 19426 .loc 2 1565 0
+ 19427 12683 F30F6F85 movdqu -832(%rbp), %xmm0
+ 19427 C0FCFFFF
+ 19428 1268b 660F7F85 movdqa %xmm0, -8320(%rbp)
+ 19428 80DFFFFF
+ 19429 12693 660F6F85 movdqa -8320(%rbp), %xmm0
+ 19429 80DFFFFF
+ 19430 1269b F30F7F85 movdqu %xmm0, -816(%rbp)
+ 19430 D0FCFFFF
+ 19431 .LBB2300:
+ 19432 .LBB2301:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 19433 .loc 2 1282 0
+ 19434 126a3 F30F6F85 movdqu -816(%rbp), %xmm0
+ 19434 D0FCFFFF
+ 19435 126ab F30F7F85 movdqu %xmm0, -6032(%rbp)
+ 19435 70E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 19436 .loc 2 1283 0
+ 19437 126b3 8B8578E8 movl -6024(%rbp), %eax
+ 19437 FFFF
+ 19438 126b9 89857CE8 movl %eax, -6020(%rbp)
+ 19438 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 19439 .loc 2 1284 0
+ 19440 126bf 8B8574E8 movl -6028(%rbp), %eax
+ 19440 FFFF
+ 19441 126c5 898578E8 movl %eax, -6024(%rbp)
+ 19441 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 19442 .loc 2 1285 0
+ 19443 126cb 8B8570E8 movl -6032(%rbp), %eax
+ 19443 FFFF
+ 19444 126d1 898574E8 movl %eax, -6028(%rbp)
+ 19444 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 19445 .loc 2 1286 0
+ 19446 126d7 C78570E8 movl $0, -6032(%rbp)
+ 19446 FFFF0000
+ 19446 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+
GAS LISTING /tmp/ccMa7HLZ.s page 599
+
+
+ 19447 .loc 2 1287 0
+ 19448 126e1 F30F6F85 movdqu -6032(%rbp), %xmm0
+ 19448 70E8FFFF
+ 19449 .LBE2301:
+ 19450 .LBE2300:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19451 .loc 2 1567 0
+ 19452 126e9 660F7F85 movdqa %xmm0, -8320(%rbp)
+ 19452 80DFFFFF
+ 19453 126f1 660F6F85 movdqa -8320(%rbp), %xmm0
+ 19453 80DFFFFF
+ 19454 126f9 660FEF85 pxor -832(%rbp), %xmm0
+ 19454 C0FCFFFF
+ 19455 12701 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 19455 C0FCFFFF
+ 19456 12709 660F6F85 movdqa -8320(%rbp), %xmm0
+ 19456 80DFFFFF
+ 19457 12711 F30F7F85 movdqu %xmm0, -800(%rbp)
+ 19457 E0FCFFFF
+ 19458 .LBB2302:
+ 19459 .LBB2303:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 19460 .loc 2 1282 0
+ 19461 12719 F30F6F85 movdqu -800(%rbp), %xmm0
+ 19461 E0FCFFFF
+ 19462 12721 F30F7F85 movdqu %xmm0, -6016(%rbp)
+ 19462 80E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 19463 .loc 2 1283 0
+ 19464 12729 8B8588E8 movl -6008(%rbp), %eax
+ 19464 FFFF
+ 19465 1272f 89858CE8 movl %eax, -6004(%rbp)
+ 19465 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 19466 .loc 2 1284 0
+ 19467 12735 8B8584E8 movl -6012(%rbp), %eax
+ 19467 FFFF
+ 19468 1273b 898588E8 movl %eax, -6008(%rbp)
+ 19468 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 19469 .loc 2 1285 0
+ 19470 12741 8B8580E8 movl -6016(%rbp), %eax
+ 19470 FFFF
+ 19471 12747 898584E8 movl %eax, -6012(%rbp)
+ 19471 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 19472 .loc 2 1286 0
+ 19473 1274d C78580E8 movl $0, -6016(%rbp)
+ 19473 FFFF0000
+ 19473 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 19474 .loc 2 1287 0
+ 19475 12757 F30F6F85 movdqu -6016(%rbp), %xmm0
+ 19475 80E8FFFF
+ 19476 .LBE2303:
+ 19477 .LBE2302:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccMa7HLZ.s page 600
+
+
+ 19478 .loc 2 1568 0
+ 19479 1275f 660F7F85 movdqa %xmm0, -8320(%rbp)
+ 19479 80DFFFFF
+ 19480 12767 660F6F85 movdqa -8320(%rbp), %xmm0
+ 19480 80DFFFFF
+ 19481 1276f 660FEF85 pxor -832(%rbp), %xmm0
+ 19481 C0FCFFFF
+ 19482 12777 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 19482 C0FCFFFF
+ 19483 1277f 660F6F85 movdqa -8320(%rbp), %xmm0
+ 19483 80DFFFFF
+ 19484 12787 F30F7F85 movdqu %xmm0, -784(%rbp)
+ 19484 F0FCFFFF
+ 19485 .LBB2304:
+ 19486 .LBB2305:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 19487 .loc 2 1282 0
+ 19488 1278f F30F6F85 movdqu -784(%rbp), %xmm0
+ 19488 F0FCFFFF
+ 19489 12797 F30F7F85 movdqu %xmm0, -6000(%rbp)
+ 19489 90E8FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 19490 .loc 2 1283 0
+ 19491 1279f 8B8598E8 movl -5992(%rbp), %eax
+ 19491 FFFF
+ 19492 127a5 89859CE8 movl %eax, -5988(%rbp)
+ 19492 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 19493 .loc 2 1284 0
+ 19494 127ab 8B8594E8 movl -5996(%rbp), %eax
+ 19494 FFFF
+ 19495 127b1 898598E8 movl %eax, -5992(%rbp)
+ 19495 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 19496 .loc 2 1285 0
+ 19497 127b7 8B8590E8 movl -6000(%rbp), %eax
+ 19497 FFFF
+ 19498 127bd 898594E8 movl %eax, -5996(%rbp)
+ 19498 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 19499 .loc 2 1286 0
+ 19500 127c3 C78590E8 movl $0, -6000(%rbp)
+ 19500 FFFF0000
+ 19500 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 19501 .loc 2 1287 0
+ 19502 127cd F30F6F85 movdqu -6000(%rbp), %xmm0
+ 19502 90E8FFFF
+ 19503 .LBE2305:
+ 19504 .LBE2304:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19505 .loc 2 1569 0
+ 19506 127d5 660F7F85 movdqa %xmm0, -8320(%rbp)
+ 19506 80DFFFFF
+ 19507 127dd 660F6F85 movdqa -8320(%rbp), %xmm0
+ 19507 80DFFFFF
+ 19508 127e5 660FEF85 pxor -832(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 601
+
+
+ 19508 C0FCFFFF
+ 19509 127ed F30F7F85 movdqu %xmm0, -832(%rbp)
+ 19509 C0FCFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 19510 .loc 2 1571 0
+ 19511 127f5 F30F6F85 movdqu -832(%rbp), %xmm0
+ 19511 C0FCFFFF
+ 19512 .LBE2299:
+ 19513 .LBE2298:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(13); /* k52 : k53 : k54 : k55 */
+ 19514 .loc 2 1937 0
+ 19515 127fd F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 19515 D0E9FFFF
+ 19516 12805 F30F6F85 movdqu -5680(%rbp), %xmm0
+ 19516 D0E9FFFF
+ 19517 1280d F30F7F85 movdqu %xmm0, -752(%rbp)
+ 19517 10FDFFFF
+ 19518 12815 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 19518 E0E9FFFF
+ 19519 1281d F30F7F85 movdqu %xmm0, -768(%rbp)
+ 19519 00FDFFFF
+ 19520 .LBB2306:
+ 19521 .LBB2307:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19522 .loc 2 178 0
+ 19523 12825 F30F6F85 movdqu -768(%rbp), %xmm0
+ 19523 00FDFFFF
+ 19524 1282d F30F6F8D movdqu -752(%rbp), %xmm1
+ 19524 10FDFFFF
+ 19525 12835 660FEFC1 pxor %xmm1, %xmm0
+ 19526 .LBE2307:
+ 19527 .LBE2306:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(13); /* k52 : k53 : k54 : k55 */
+ 19528 .loc 2 1937 0
+ 19529 12839 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 19529 D0E9FFFF
+ 19530 12841 488B85D8 movq -8232(%rbp), %rax
+ 19530 DFFFFF
+ 19531 12848 4805D000 addq $208, %rax
+ 19531 0000
+ 19532 1284e F30F6F85 movdqu -5680(%rbp), %xmm0
+ 19532 D0E9FFFF
+ 19533 12856 F30F7F00 movdqu %xmm0, (%rax)
+ 19534 1285a F30F6F85 movdqu -5680(%rbp), %xmm0
+ 19534 D0E9FFFF
+ 19535 12862 F30F7F85 movdqu %xmm0, -720(%rbp)
+ 19535 30FDFFFF
+ 19536 .LBB2308:
+ 19537 .LBB2309:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 19538 .loc 2 1681 0
+ 19539 1286a B8400000 movl $64, %eax
+ 19539 00
+ 19540 1286f 660F6F05 movdqa vec_00(%rip), %xmm0
+ 19540 00000000
+ 19541 12877 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 19541 50FDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 602
+
+
+ 19542 1287f 89854CFD movl %eax, -692(%rbp)
+ 19542 FFFF
+ 19543 .LBB2310:
+ 19544 .LBB2311:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 19545 .loc 2 522 0
+ 19546 12885 F30F6F85 movdqu -688(%rbp), %xmm0
+ 19546 50FDFFFF
+ 19547 1288d F30F7F85 movdqu %xmm0, -5920(%rbp)
+ 19547 E0E8FFFF
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 19548 .loc 2 523 0
+ 19549 12895 B8030000 movl $3, %eax
+ 19549 00
+ 19550 1289a 4898 cltq
+ 19551 1289c 8B954CFD movl -692(%rbp), %edx
+ 19551 FFFF
+ 19552 128a2 899485E0 movl %edx, -5920(%rbp,%rax,4)
+ 19552 E8FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 19553 .loc 2 524 0
+ 19554 128a9 F30F6F85 movdqu -5920(%rbp), %xmm0
+ 19554 E0E8FFFF
+ 19555 128b1 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 19555 50FDFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 19556 .loc 2 526 0
+ 19557 128b9 F30F6F85 movdqu -688(%rbp), %xmm0
+ 19557 50FDFFFF
+ 19558 .LBE2311:
+ 19559 .LBE2310:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 19560 .loc 2 1681 0
+ 19561 128c1 660F7F85 movdqa %xmm0, -8288(%rbp)
+ 19561 A0DFFFFF
+ 19562 128c9 F30F6F85 movdqu -720(%rbp), %xmm0
+ 19562 30FDFFFF
+ 19563 128d1 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 19563 60FDFFFF
+ 19564 128d9 F30F6F85 movdqu -672(%rbp), %xmm0
+ 19564 60FDFFFF
+ 19565 128e1 F30F7F85 movdqu %xmm0, -640(%rbp)
+ 19565 80FDFFFF
+ 19566 128e9 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 19566 000000
+ 19567 128f0 48898578 movq %rax, -648(%rbp)
+ 19567 FDFFFF
+ 19568 .LBB2312:
+ 19569 .LBB2313:
+ 19570 .LBB2314:
+ 19571 .LBB2315:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 19572 .loc 2 851 0
+ 19573 128f7 660F6F05 movdqa vec_00(%rip), %xmm0
+ 19573 00000000
+ 19574 128ff F30F7F85 movdqu %xmm0, -608(%rbp)
+ 19574 A0FDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 603
+
+
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 19575 .loc 2 854 0
+ 19576 12907 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 19576 00000000
+ 19577 1290f F30F6F8D movdqu -640(%rbp), %xmm1
+ 19577 80FDFFFF
+ 19578 12917 F30F7F8D movdqu %xmm1, -528(%rbp)
+ 19578 F0FDFFFF
+ 19579 1291f F30F7F85 movdqu %xmm0, -544(%rbp)
+ 19579 E0FDFFFF
+ 19580 .LBB2316:
+ 19581 .LBB2317:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 19582 .loc 2 206 0
+ 19583 12927 F30F6F85 movdqu -544(%rbp), %xmm0
+ 19583 E0FDFFFF
+ 19584 1292f F30F6F8D movdqu -528(%rbp), %xmm1
+ 19584 F0FDFFFF
+ 19585 12937 660FDBC1 pand %xmm1, %xmm0
+ 19586 .LBE2317:
+ 19587 .LBE2316:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 19588 .loc 2 854 0
+ 19589 1293b F30F7F85 movdqu %xmm0, -560(%rbp)
+ 19589 D0FDFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 19590 .loc 2 862 0
+ 19591 12943 660F6F05 movdqa vec_10(%rip), %xmm0
+ 19591 00000000
+ 19592 1294b F30F6F8D movdqu -640(%rbp), %xmm1
+ 19592 80FDFFFF
+ 19593 12953 F30F7F8D movdqu %xmm1, -496(%rbp)
+ 19593 10FEFFFF
+ 19594 1295b F30F7F85 movdqu %xmm0, -512(%rbp)
+ 19594 00FEFFFF
+ 19595 .LBB2318:
+ 19596 .loc 2 2642 0
+ 19597 12963 0FB68510 movzbl -496(%rbp), %eax
+ 19597 FEFFFF
+ 19598 1296a 0FB69500 movzbl -512(%rbp), %edx
+ 19598 FEFFFF
+ 19599 12971 0FB6C0 movzbl %al, %eax
+ 19600 12974 6689853E movw %ax, -8898(%rbp)
+ 19600 DDFFFF
+ 19601 1297b 0FB7853E movzwl -8898(%rbp), %eax
+ 19601 DDFFFF
+ 19602 12982 F6F2 divb %dl
+ 19603 12984 4189C7 movl %eax, %r15d
+ 19604 12987 0FB68511 movzbl -495(%rbp), %eax
+ 19604 FEFFFF
+ 19605 1298e 0FB69501 movzbl -511(%rbp), %edx
+ 19605 FEFFFF
+ 19606 12995 0FB6C0 movzbl %al, %eax
+ 19607 12998 6689853E movw %ax, -8898(%rbp)
+ 19607 DDFFFF
+ 19608 1299f 0FB7853E movzwl -8898(%rbp), %eax
+ 19608 DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 604
+
+
+ 19609 129a6 F6F2 divb %dl
+ 19610 129a8 8885BFDF movb %al, -8257(%rbp)
+ 19610 FFFF
+ 19611 129ae 0FB68512 movzbl -494(%rbp), %eax
+ 19611 FEFFFF
+ 19612 129b5 0FB69502 movzbl -510(%rbp), %edx
+ 19612 FEFFFF
+ 19613 129bc 0FB6C0 movzbl %al, %eax
+ 19614 129bf 6689853E movw %ax, -8898(%rbp)
+ 19614 DDFFFF
+ 19615 129c6 0FB7853E movzwl -8898(%rbp), %eax
+ 19615 DDFFFF
+ 19616 129cd F6F2 divb %dl
+ 19617 129cf 8885BEDF movb %al, -8258(%rbp)
+ 19617 FFFF
+ 19618 129d5 0FB68513 movzbl -493(%rbp), %eax
+ 19618 FEFFFF
+ 19619 129dc 0FB69503 movzbl -509(%rbp), %edx
+ 19619 FEFFFF
+ 19620 129e3 0FB6C0 movzbl %al, %eax
+ 19621 129e6 6689853E movw %ax, -8898(%rbp)
+ 19621 DDFFFF
+ 19622 129ed 0FB7853E movzwl -8898(%rbp), %eax
+ 19622 DDFFFF
+ 19623 129f4 F6F2 divb %dl
+ 19624 129f6 8885BDDF movb %al, -8259(%rbp)
+ 19624 FFFF
+ 19625 129fc 0FB68514 movzbl -492(%rbp), %eax
+ 19625 FEFFFF
+ 19626 12a03 0FB69504 movzbl -508(%rbp), %edx
+ 19626 FEFFFF
+ 19627 12a0a 0FB6C0 movzbl %al, %eax
+ 19628 12a0d 6689853E movw %ax, -8898(%rbp)
+ 19628 DDFFFF
+ 19629 12a14 0FB7853E movzwl -8898(%rbp), %eax
+ 19629 DDFFFF
+ 19630 12a1b F6F2 divb %dl
+ 19631 12a1d 8885BCDF movb %al, -8260(%rbp)
+ 19631 FFFF
+ 19632 12a23 0FB68515 movzbl -491(%rbp), %eax
+ 19632 FEFFFF
+ 19633 12a2a 0FB69505 movzbl -507(%rbp), %edx
+ 19633 FEFFFF
+ 19634 12a31 0FB6C0 movzbl %al, %eax
+ 19635 12a34 6689853E movw %ax, -8898(%rbp)
+ 19635 DDFFFF
+ 19636 12a3b 0FB7853E movzwl -8898(%rbp), %eax
+ 19636 DDFFFF
+ 19637 12a42 F6F2 divb %dl
+ 19638 12a44 4189C1 movl %eax, %r9d
+ 19639 12a47 0FB68516 movzbl -490(%rbp), %eax
+ 19639 FEFFFF
+ 19640 12a4e 0FB69506 movzbl -506(%rbp), %edx
+ 19640 FEFFFF
+ 19641 12a55 0FB6C0 movzbl %al, %eax
+ 19642 12a58 6689853E movw %ax, -8898(%rbp)
+ 19642 DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 605
+
+
+ 19643 12a5f 0FB7853E movzwl -8898(%rbp), %eax
+ 19643 DDFFFF
+ 19644 12a66 F6F2 divb %dl
+ 19645 12a68 89C7 movl %eax, %edi
+ 19646 12a6a 0FB68517 movzbl -489(%rbp), %eax
+ 19646 FEFFFF
+ 19647 12a71 0FB69507 movzbl -505(%rbp), %edx
+ 19647 FEFFFF
+ 19648 12a78 0FB6C0 movzbl %al, %eax
+ 19649 12a7b 6689853E movw %ax, -8898(%rbp)
+ 19649 DDFFFF
+ 19650 12a82 0FB7853E movzwl -8898(%rbp), %eax
+ 19650 DDFFFF
+ 19651 12a89 F6F2 divb %dl
+ 19652 12a8b 89C3 movl %eax, %ebx
+ 19653 12a8d 0FB68518 movzbl -488(%rbp), %eax
+ 19653 FEFFFF
+ 19654 12a94 0FB69508 movzbl -504(%rbp), %edx
+ 19654 FEFFFF
+ 19655 12a9b 0FB6C0 movzbl %al, %eax
+ 19656 12a9e 6689853E movw %ax, -8898(%rbp)
+ 19656 DDFFFF
+ 19657 12aa5 0FB7853E movzwl -8898(%rbp), %eax
+ 19657 DDFFFF
+ 19658 12aac F6F2 divb %dl
+ 19659 12aae 4189C2 movl %eax, %r10d
+ 19660 12ab1 0FB68519 movzbl -487(%rbp), %eax
+ 19660 FEFFFF
+ 19661 12ab8 0FB69509 movzbl -503(%rbp), %edx
+ 19661 FEFFFF
+ 19662 12abf 0FB6C0 movzbl %al, %eax
+ 19663 12ac2 6689853E movw %ax, -8898(%rbp)
+ 19663 DDFFFF
+ 19664 12ac9 0FB7853E movzwl -8898(%rbp), %eax
+ 19664 DDFFFF
+ 19665 12ad0 F6F2 divb %dl
+ 19666 12ad2 4189C3 movl %eax, %r11d
+ 19667 12ad5 0FB6851A movzbl -486(%rbp), %eax
+ 19667 FEFFFF
+ 19668 12adc 0FB6950A movzbl -502(%rbp), %edx
+ 19668 FEFFFF
+ 19669 12ae3 0FB6C0 movzbl %al, %eax
+ 19670 12ae6 6689853E movw %ax, -8898(%rbp)
+ 19670 DDFFFF
+ 19671 12aed 0FB7853E movzwl -8898(%rbp), %eax
+ 19671 DDFFFF
+ 19672 12af4 F6F2 divb %dl
+ 19673 12af6 4189C4 movl %eax, %r12d
+ 19674 12af9 0FB6851B movzbl -485(%rbp), %eax
+ 19674 FEFFFF
+ 19675 12b00 0FB6950B movzbl -501(%rbp), %edx
+ 19675 FEFFFF
+ 19676 12b07 0FB6C0 movzbl %al, %eax
+ 19677 12b0a 6689853E movw %ax, -8898(%rbp)
+ 19677 DDFFFF
+ 19678 12b11 0FB7853E movzwl -8898(%rbp), %eax
+ 19678 DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 606
+
+
+ 19679 12b18 F6F2 divb %dl
+ 19680 12b1a 4189C5 movl %eax, %r13d
+ 19681 12b1d 0FB6851C movzbl -484(%rbp), %eax
+ 19681 FEFFFF
+ 19682 12b24 0FB6950C movzbl -500(%rbp), %edx
+ 19682 FEFFFF
+ 19683 12b2b 0FB6C0 movzbl %al, %eax
+ 19684 12b2e 6689853E movw %ax, -8898(%rbp)
+ 19684 DDFFFF
+ 19685 12b35 0FB7853E movzwl -8898(%rbp), %eax
+ 19685 DDFFFF
+ 19686 12b3c F6F2 divb %dl
+ 19687 12b3e 4189C6 movl %eax, %r14d
+ 19688 12b41 0FB6851D movzbl -483(%rbp), %eax
+ 19688 FEFFFF
+ 19689 12b48 0FB6950D movzbl -499(%rbp), %edx
+ 19689 FEFFFF
+ 19690 12b4f 0FB6C0 movzbl %al, %eax
+ 19691 12b52 6689853E movw %ax, -8898(%rbp)
+ 19691 DDFFFF
+ 19692 12b59 0FB7853E movzwl -8898(%rbp), %eax
+ 19692 DDFFFF
+ 19693 12b60 F6F2 divb %dl
+ 19694 12b62 4189C0 movl %eax, %r8d
+ 19695 12b65 0FB6851E movzbl -482(%rbp), %eax
+ 19695 FEFFFF
+ 19696 12b6c 0FB6950E movzbl -498(%rbp), %edx
+ 19696 FEFFFF
+ 19697 12b73 0FB6C0 movzbl %al, %eax
+ 19698 12b76 6689853E movw %ax, -8898(%rbp)
+ 19698 DDFFFF
+ 19699 12b7d 0FB7853E movzwl -8898(%rbp), %eax
+ 19699 DDFFFF
+ 19700 12b84 F6F2 divb %dl
+ 19701 12b86 89C6 movl %eax, %esi
+ 19702 12b88 0FB6851F movzbl -481(%rbp), %eax
+ 19702 FEFFFF
+ 19703 12b8f 0FB6950F movzbl -497(%rbp), %edx
+ 19703 FEFFFF
+ 19704 12b96 0FB6C0 movzbl %al, %eax
+ 19705 12b99 6689853E movw %ax, -8898(%rbp)
+ 19705 DDFFFF
+ 19706 12ba0 0FB7853E movzwl -8898(%rbp), %eax
+ 19706 DDFFFF
+ 19707 12ba7 F6F2 divb %dl
+ 19708 12ba9 89C1 movl %eax, %ecx
+ 19709 .LBB2319:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 19710 .loc 2 346 0
+ 19711 12bab 0FB6D3 movzbl %bl, %edx
+ 19712 12bae 400FB6C7 movzbl %dil, %eax
+ 19713 12bb2 48C1E208 salq $8, %rdx
+ 19714 12bb6 4809C2 orq %rax, %rdx
+ 19715 12bb9 410FB6C1 movzbl %r9b, %eax
+ 19716 12bbd 48C1E208 salq $8, %rdx
+ 19717 12bc1 4809C2 orq %rax, %rdx
+ 19718 12bc4 0FB685BC movzbl -8260(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 607
+
+
+ 19718 DFFFFF
+ 19719 12bcb 48C1E208 salq $8, %rdx
+ 19720 12bcf 4809C2 orq %rax, %rdx
+ 19721 12bd2 0FB685BD movzbl -8259(%rbp), %eax
+ 19721 DFFFFF
+ 19722 12bd9 48C1E208 salq $8, %rdx
+ 19723 12bdd 4809C2 orq %rax, %rdx
+ 19724 12be0 0FB685BE movzbl -8258(%rbp), %eax
+ 19724 DFFFFF
+ 19725 12be7 48C1E208 salq $8, %rdx
+ 19726 12beb 4809C2 orq %rax, %rdx
+ 19727 12bee 0FB685BF movzbl -8257(%rbp), %eax
+ 19727 DFFFFF
+ 19728 12bf5 48C1E208 salq $8, %rdx
+ 19729 12bf9 4809C2 orq %rax, %rdx
+ 19730 12bfc 410FB6C7 movzbl %r15b, %eax
+ 19731 12c00 48C1E208 salq $8, %rdx
+ 19732 12c04 4809C2 orq %rax, %rdx
+ 19733 12c07 0FB6C1 movzbl %cl, %eax
+ 19734 12c0a 400FB6CE movzbl %sil, %ecx
+ 19735 12c0e 48C1E008 salq $8, %rax
+ 19736 12c12 4809C8 orq %rcx, %rax
+ 19737 12c15 410FB6C8 movzbl %r8b, %ecx
+ 19738 12c19 48C1E008 salq $8, %rax
+ 19739 12c1d 4809C8 orq %rcx, %rax
+ 19740 12c20 410FB6CE movzbl %r14b, %ecx
+ 19741 12c24 48C1E008 salq $8, %rax
+ 19742 12c28 4809C8 orq %rcx, %rax
+ 19743 12c2b 410FB6CD movzbl %r13b, %ecx
+ 19744 12c2f 48C1E008 salq $8, %rax
+ 19745 12c33 4809C8 orq %rcx, %rax
+ 19746 12c36 410FB6CC movzbl %r12b, %ecx
+ 19747 12c3a 48C1E008 salq $8, %rax
+ 19748 12c3e 4809C8 orq %rcx, %rax
+ 19749 12c41 410FB6CB movzbl %r11b, %ecx
+ 19750 12c45 48C1E008 salq $8, %rax
+ 19751 12c49 4809C8 orq %rcx, %rax
+ 19752 12c4c 410FB6CA movzbl %r10b, %ecx
+ 19753 12c50 48C1E008 salq $8, %rax
+ 19754 12c54 4809C8 orq %rcx, %rax
+ 19755 12c57 48899540 movq %rdx, -8896(%rbp)
+ 19755 DDFFFF
+ 19756 12c5e 48898548 movq %rax, -8888(%rbp)
+ 19756 DDFFFF
+ 19757 12c65 660F6F85 movdqa -8896(%rbp), %xmm0
+ 19757 40DDFFFF
+ 19758 .LBE2319:
+ 19759 .LBE2318:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 19760 .loc 2 862 0
+ 19761 12c6d F30F7F85 movdqu %xmm0, -576(%rbp)
+ 19761 C0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 19762 .loc 2 866 0
+ 19763 12c75 C7859CFD movl $0, -612(%rbp)
+ 19763 FFFF0000
+ 19763 0000
+
GAS LISTING /tmp/ccMa7HLZ.s page 608
+
+
+ 19764 12c7f E9860200 jmp .L468
+ 19764 00
+ 19765 .L477:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 19766 .loc 2 868 0
+ 19767 12c84 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 19767 00000000
+ 19768 12c8c F30F7F85 movdqu %xmm0, -464(%rbp)
+ 19768 30FEFFFF
+ 19769 12c94 F30F6F85 movdqu -576(%rbp), %xmm0
+ 19769 C0FDFFFF
+ 19770 12c9c F30F7F85 movdqu %xmm0, -480(%rbp)
+ 19770 20FEFFFF
+ 19771 .LBB2320:
+ 19772 .LBB2321:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 19773 .loc 2 380 0
+ 19774 12ca4 F30F6F85 movdqu -464(%rbp), %xmm0
+ 19774 30FEFFFF
+ 19775 12cac F30F7F85 movdqu %xmm0, -5888(%rbp)
+ 19775 00E9FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 19776 .loc 2 381 0
+ 19777 12cb4 F30F6F85 movdqu -480(%rbp), %xmm0
+ 19777 20FEFFFF
+ 19778 12cbc F30F7F85 movdqu %xmm0, -5904(%rbp)
+ 19778 F0E8FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 19779 .loc 2 383 0
+ 19780 12cc4 C7854CFE movl $0, -436(%rbp)
+ 19780 FFFF0000
+ 19780 0000
+ 19781 12cce EB5C jmp .L469
+ 19782 .L472:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 19783 .loc 2 385 0
+ 19784 12cd0 8B854CFE movl -436(%rbp), %eax
+ 19784 FFFF
+ 19785 12cd6 89C0 mov %eax, %eax
+ 19786 12cd8 0FB68405 movzbl -5904(%rbp,%rax), %eax
+ 19786 F0E8FFFF
+ 19787 12ce0 84C0 testb %al, %al
+ 19788 12ce2 7912 jns .L470
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 19789 .loc 2 386 0
+ 19790 12ce4 8B854CFE movl -436(%rbp), %eax
+ 19790 FFFF
+ 19791 12cea 89C0 mov %eax, %eax
+ 19792 12cec C6840510 movb $0, -5872(%rbp,%rax)
+ 19792 E9FFFF00
+ 19793 12cf4 EB2F jmp .L471
+ 19794 .L470:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 19795 .loc 2 388 0
+ 19796 12cf6 8B8D4CFE movl -436(%rbp), %ecx
+ 19796 FFFF
+ 19797 12cfc 8B854CFE movl -436(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 609
+
+
+ 19797 FFFF
+ 19798 12d02 89C0 mov %eax, %eax
+ 19799 12d04 0FB68405 movzbl -5904(%rbp,%rax), %eax
+ 19799 F0E8FFFF
+ 19800 12d0c 0FB6C0 movzbl %al, %eax
+ 19801 12d0f 83E00F andl $15, %eax
+ 19802 12d12 4898 cltq
+ 19803 12d14 0FB69405 movzbl -5888(%rbp,%rax), %edx
+ 19803 00E9FFFF
+ 19804 12d1c 89C8 mov %ecx, %eax
+ 19805 12d1e 88940510 movb %dl, -5872(%rbp,%rax)
+ 19805 E9FFFF
+ 19806 .L471:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 19807 .loc 2 383 0
+ 19808 12d25 83854CFE addl $1, -436(%rbp)
+ 19808 FFFF01
+ 19809 .L469:
+ 19810 12d2c 83BD4CFE cmpl $15, -436(%rbp)
+ 19810 FFFF0F
+ 19811 12d33 769B jbe .L472
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 19812 .loc 2 391 0
+ 19813 12d35 F30F6F85 movdqu -5872(%rbp), %xmm0
+ 19813 10E9FFFF
+ 19814 .LBE2321:
+ 19815 .LBE2320:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 19816 .loc 2 868 0
+ 19817 12d3d F30F7F85 movdqu %xmm0, -592(%rbp)
+ 19817 B0FDFFFF
+ 19818 12d45 F30F6F85 movdqu -560(%rbp), %xmm0
+ 19818 D0FDFFFF
+ 19819 12d4d F30F7F85 movdqu %xmm0, -416(%rbp)
+ 19819 60FEFFFF
+ 19820 12d55 F30F6F85 movdqu -592(%rbp), %xmm0
+ 19820 B0FDFFFF
+ 19821 12d5d F30F7F85 movdqu %xmm0, -432(%rbp)
+ 19821 50FEFFFF
+ 19822 .LBB2322:
+ 19823 .LBB2323:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 19824 .loc 2 234 0
+ 19825 12d65 F30F6F85 movdqu -432(%rbp), %xmm0
+ 19825 50FEFFFF
+ 19826 12d6d F30F6F8D movdqu -416(%rbp), %xmm1
+ 19826 60FEFFFF
+ 19827 12d75 660FEBC1 por %xmm1, %xmm0
+ 19828 .LBE2323:
+ 19829 .LBE2322:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 19830 .loc 2 870 0
+ 19831 12d79 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 19831 B0FDFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 19832 .loc 2 872 0
+ 19833 12d81 8B859CFD mov -612(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 610
+
+
+ 19833 FFFF
+ 19834 12d87 48C1E004 salq $4, %rax
+ 19835 12d8b 48038578 addq -648(%rbp), %rax
+ 19835 FDFFFF
+ 19836 12d92 660F6F00 movdqa (%rax), %xmm0
+ 19837 12d96 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 19837 80FEFFFF
+ 19838 12d9e F30F6F85 movdqu -592(%rbp), %xmm0
+ 19838 B0FDFFFF
+ 19839 12da6 F30F7F85 movdqu %xmm0, -400(%rbp)
+ 19839 70FEFFFF
+ 19840 .LBB2324:
+ 19841 .LBB2325:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 19842 .loc 2 380 0
+ 19843 12dae F30F6F85 movdqu -384(%rbp), %xmm0
+ 19843 80FEFFFF
+ 19844 12db6 F30F7F85 movdqu %xmm0, -5840(%rbp)
+ 19844 30E9FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 19845 .loc 2 381 0
+ 19846 12dbe F30F6F85 movdqu -400(%rbp), %xmm0
+ 19846 70FEFFFF
+ 19847 12dc6 F30F7F85 movdqu %xmm0, -5856(%rbp)
+ 19847 20E9FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 19848 .loc 2 383 0
+ 19849 12dce C7859CFE movl $0, -356(%rbp)
+ 19849 FFFF0000
+ 19849 0000
+ 19850 12dd8 EB5C jmp .L473
+ 19851 .L476:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 19852 .loc 2 385 0
+ 19853 12dda 8B859CFE movl -356(%rbp), %eax
+ 19853 FFFF
+ 19854 12de0 89C0 mov %eax, %eax
+ 19855 12de2 0FB68405 movzbl -5856(%rbp,%rax), %eax
+ 19855 20E9FFFF
+ 19856 12dea 84C0 testb %al, %al
+ 19857 12dec 7912 jns .L474
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 19858 .loc 2 386 0
+ 19859 12dee 8B859CFE movl -356(%rbp), %eax
+ 19859 FFFF
+ 19860 12df4 89C0 mov %eax, %eax
+ 19861 12df6 C6840540 movb $0, -5824(%rbp,%rax)
+ 19861 E9FFFF00
+ 19862 12dfe EB2F jmp .L475
+ 19863 .L474:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 19864 .loc 2 388 0
+ 19865 12e00 8B8D9CFE movl -356(%rbp), %ecx
+ 19865 FFFF
+ 19866 12e06 8B859CFE movl -356(%rbp), %eax
+ 19866 FFFF
+ 19867 12e0c 89C0 mov %eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 611
+
+
+ 19868 12e0e 0FB68405 movzbl -5856(%rbp,%rax), %eax
+ 19868 20E9FFFF
+ 19869 12e16 0FB6C0 movzbl %al, %eax
+ 19870 12e19 83E00F andl $15, %eax
+ 19871 12e1c 4898 cltq
+ 19872 12e1e 0FB69405 movzbl -5840(%rbp,%rax), %edx
+ 19872 30E9FFFF
+ 19873 12e26 89C8 mov %ecx, %eax
+ 19874 12e28 88940540 movb %dl, -5824(%rbp,%rax)
+ 19874 E9FFFF
+ 19875 .L475:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 19876 .loc 2 383 0
+ 19877 12e2f 83859CFE addl $1, -356(%rbp)
+ 19877 FFFF01
+ 19878 .L473:
+ 19879 12e36 83BD9CFE cmpl $15, -356(%rbp)
+ 19879 FFFF0F
+ 19880 12e3d 769B jbe .L476
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 19881 .loc 2 391 0
+ 19882 12e3f F30F6F85 movdqu -5824(%rbp), %xmm0
+ 19882 40E9FFFF
+ 19883 .LBE2325:
+ 19884 .LBE2324:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 19885 .loc 2 872 0
+ 19886 12e47 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 19886 B0FDFFFF
+ 19887 12e4f F30F6F85 movdqu -608(%rbp), %xmm0
+ 19887 A0FDFFFF
+ 19888 12e57 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 19888 B0FEFFFF
+ 19889 12e5f F30F6F85 movdqu -592(%rbp), %xmm0
+ 19889 B0FDFFFF
+ 19890 12e67 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 19890 A0FEFFFF
+ 19891 .LBB2326:
+ 19892 .LBB2327:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 19893 .loc 2 234 0
+ 19894 12e6f F30F6F85 movdqu -352(%rbp), %xmm0
+ 19894 A0FEFFFF
+ 19895 12e77 F30F6F8D movdqu -336(%rbp), %xmm1
+ 19895 B0FEFFFF
+ 19896 12e7f 660FEBC1 por %xmm1, %xmm0
+ 19897 .LBE2327:
+ 19898 .LBE2326:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 19899 .loc 2 874 0
+ 19900 12e83 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 19900 A0FDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 19901 .loc 2 876 0
+ 19902 12e8b 660F6F05 movdqa vec_01(%rip), %xmm0
+ 19902 00000000
+ 19903 12e93 F30F6F8D movdqu -576(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s page 612
+
+
+ 19903 C0FDFFFF
+ 19904 12e9b F30F7F8D movdqu %xmm1, -304(%rbp)
+ 19904 D0FEFFFF
+ 19905 12ea3 F30F7F85 movdqu %xmm0, -320(%rbp)
+ 19905 C0FEFFFF
+ 19906 .LBB2328:
+ 19907 .LBB2329:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 19908 .loc 2 290 0
+ 19909 12eab F30F6F8D movdqu -320(%rbp), %xmm1
+ 19909 C0FEFFFF
+ 19910 12eb3 F30F6F85 movdqu -304(%rbp), %xmm0
+ 19910 D0FEFFFF
+ 19911 12ebb 660FF8C1 psubb %xmm1, %xmm0
+ 19912 .LBE2329:
+ 19913 .LBE2328:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 19914 .loc 2 876 0
+ 19915 12ebf F30F7F85 movdqu %xmm0, -576(%rbp)
+ 19915 C0FDFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19916 .loc 2 878 0
+ 19917 12ec7 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 19917 00000000
+ 19918 12ecf F30F6F8D movdqu -576(%rbp), %xmm1
+ 19918 C0FDFFFF
+ 19919 12ed7 F30F7F8D movdqu %xmm1, -272(%rbp)
+ 19919 F0FEFFFF
+ 19920 12edf F30F7F85 movdqu %xmm0, -288(%rbp)
+ 19920 E0FEFFFF
+ 19921 .LBB2330:
+ 19922 .LBB2331:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 19923 .loc 2 206 0
+ 19924 12ee7 F30F6F85 movdqu -288(%rbp), %xmm0
+ 19924 E0FEFFFF
+ 19925 12eef F30F6F8D movdqu -272(%rbp), %xmm1
+ 19925 F0FEFFFF
+ 19926 12ef7 660FDBC1 pand %xmm1, %xmm0
+ 19927 .LBE2331:
+ 19928 .LBE2330:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19929 .loc 2 878 0
+ 19930 12efb F30F7F85 movdqu %xmm0, -576(%rbp)
+ 19930 C0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 19931 .loc 2 866 0
+ 19932 12f03 83859CFD addl $1, -612(%rbp)
+ 19932 FFFF01
+ 19933 .L468:
+ 19934 12f0a 83BD9CFD cmpl $15, -612(%rbp)
+ 19934 FFFF0F
+ 19935 12f11 0F866DFD jbe .L477
+ 19935 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 19936 .loc 2 882 0
+ 19937 12f17 F30F6F85 movdqu -608(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 613
+
+
+ 19937 A0FDFFFF
+ 19938 .LBE2315:
+ 19939 .LBE2314:
+ 19940 .LBE2313:
+ 19941 .LBE2312:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 19942 .loc 2 1682 0
+ 19943 12f1f 660F7F85 movdqa %xmm0, -8304(%rbp)
+ 19943 90DFFFFF
+ 19944 .LBB2332:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 19945 .loc 2 1683 0
+ 19946 12f27 660F6F85 movdqa -8304(%rbp), %xmm0
+ 19946 90DFFFFF
+ 19947 12f2f F30F7F85 movdqu %xmm0, -5936(%rbp)
+ 19947 D0E8FFFF
+ 19948 12f37 E8000000 call KDbgWriterGet at PLT
+ 19948 00
+ 19949 12f3c 4885C0 testq %rax, %rax
+ 19950 12f3f 7479 je .L479
+ 19951 12f41 BF010000 movl $1, %edi
+ 19951 00
+ 19952 12f46 E8000000 call KDbgCondToFlag at PLT
+ 19952 00
+ 19953 12f4b 4889C6 movq %rax, %rsi
+ 19954 12f4e BF100000 movl $16, %edi
+ 19954 00
+ 19955 12f53 E8000000 call KDbgTestModConds at PLT
+ 19955 00
+ 19956 12f58 84C0 testb %al, %al
+ 19957 12f5a 745E je .L479
+ 19958 12f5c 8B85DCE8 movl -5924(%rbp), %eax
+ 19958 FFFF
+ 19959 12f62 89C7 movl %eax, %edi
+ 19960 12f64 E897D0FE call bswap_32
+ 19960 FF
+ 19961 12f69 4189C5 movl %eax, %r13d
+ 19962 12f6c 8B85D8E8 movl -5928(%rbp), %eax
+ 19962 FFFF
+ 19963 12f72 89C7 movl %eax, %edi
+ 19964 12f74 E887D0FE call bswap_32
+ 19964 FF
+ 19965 12f79 4189C4 movl %eax, %r12d
+ 19966 12f7c 8B85D4E8 movl -5932(%rbp), %eax
+ 19966 FFFF
+ 19967 12f82 89C7 movl %eax, %edi
+ 19968 12f84 E877D0FE call bswap_32
+ 19968 FF
+ 19969 12f89 89C3 movl %eax, %ebx
+ 19970 12f8b 8B85D0E8 movl -5936(%rbp), %eax
+ 19970 FFFF
+ 19971 12f91 89C7 movl %eax, %edi
+ 19972 12f93 E868D0FE call bswap_32
+ 19972 FF
+ 19973 12f98 4589E9 movl %r13d, %r9d
+ 19974 12f9b 4589E0 movl %r12d, %r8d
+ 19975 12f9e 89D9 movl %ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 614
+
+
+ 19976 12fa0 89C2 movl %eax, %edx
+ 19977 12fa2 488D3500 leaq .LC0(%rip), %rsi
+ 19977 000000
+ 19978 12fa9 488D3D00 leaq .LC1(%rip), %rdi
+ 19978 000000
+ 19979 12fb0 B8000000 movl $0, %eax
+ 19979 00
+ 19980 12fb5 E8000000 call KDbgMsg at PLT
+ 19980 00
+ 19981 .L479:
+ 19982 12fba 660F6F85 movdqa -8304(%rbp), %xmm0
+ 19982 90DFFFFF
+ 19983 12fc2 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 19983 00FFFFFF
+ 19984 .LBE2332:
+ 19985 .LBB2333:
+ 19986 .LBB2334:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19987 .loc 2 667 0
+ 19988 12fca 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 19988 00000000
+ 19989 12fd2 F30F6F8D movdqu -256(%rbp), %xmm1
+ 19989 00FFFFFF
+ 19990 12fda F30F7F8D movdqu %xmm1, -224(%rbp)
+ 19990 20FFFFFF
+ 19991 12fe2 F30F7F85 movdqu %xmm0, -240(%rbp)
+ 19991 10FFFFFF
+ 19992 .LBB2335:
+ 19993 .LBB2336:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 19994 .loc 2 380 0
+ 19995 12fea F30F6F85 movdqu -224(%rbp), %xmm0
+ 19995 20FFFFFF
+ 19996 12ff2 F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 19996 60E9FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 19997 .loc 2 381 0
+ 19998 12ffa F30F6F85 movdqu -240(%rbp), %xmm0
+ 19998 10FFFFFF
+ 19999 13002 F30F7F85 movdqu %xmm0, -5808(%rbp)
+ 19999 50E9FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 20000 .loc 2 383 0
+ 20001 1300a C7853CFF movl $0, -196(%rbp)
+ 20001 FFFF0000
+ 20001 0000
+ 20002 13014 EB5C jmp .L480
+ 20003 .L483:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 20004 .loc 2 385 0
+ 20005 13016 8B853CFF movl -196(%rbp), %eax
+ 20005 FFFF
+ 20006 1301c 89C0 mov %eax, %eax
+ 20007 1301e 0FB68405 movzbl -5808(%rbp,%rax), %eax
+ 20007 50E9FFFF
+ 20008 13026 84C0 testb %al, %al
+ 20009 13028 7912 jns .L481
+
GAS LISTING /tmp/ccMa7HLZ.s page 615
+
+
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 20010 .loc 2 386 0
+ 20011 1302a 8B853CFF movl -196(%rbp), %eax
+ 20011 FFFF
+ 20012 13030 89C0 mov %eax, %eax
+ 20013 13032 C6840570 movb $0, -5776(%rbp,%rax)
+ 20013 E9FFFF00
+ 20014 1303a EB2F jmp .L482
+ 20015 .L481:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 20016 .loc 2 388 0
+ 20017 1303c 8B8D3CFF movl -196(%rbp), %ecx
+ 20017 FFFF
+ 20018 13042 8B853CFF movl -196(%rbp), %eax
+ 20018 FFFF
+ 20019 13048 89C0 mov %eax, %eax
+ 20020 1304a 0FB68405 movzbl -5808(%rbp,%rax), %eax
+ 20020 50E9FFFF
+ 20021 13052 0FB6C0 movzbl %al, %eax
+ 20022 13055 83E00F andl $15, %eax
+ 20023 13058 4898 cltq
+ 20024 1305a 0FB69405 movzbl -5792(%rbp,%rax), %edx
+ 20024 60E9FFFF
+ 20025 13062 89C8 mov %ecx, %eax
+ 20026 13064 88940570 movb %dl, -5776(%rbp,%rax)
+ 20026 E9FFFF
+ 20027 .L482:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 20028 .loc 2 383 0
+ 20029 1306b 83853CFF addl $1, -196(%rbp)
+ 20029 FFFF01
+ 20030 .L480:
+ 20031 13072 83BD3CFF cmpl $15, -196(%rbp)
+ 20031 FFFF0F
+ 20032 13079 769B jbe .L483
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 20033 .loc 2 391 0
+ 20034 1307b F30F6F85 movdqu -5776(%rbp), %xmm0
+ 20034 70E9FFFF
+ 20035 .LBE2336:
+ 20036 .LBE2335:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20037 .loc 2 667 0
+ 20038 13083 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 20038 00FFFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20039 .loc 2 668 0
+ 20040 1308b F30F6F85 movdqu -256(%rbp), %xmm0
+ 20040 00FFFFFF
+ 20041 .LBE2334:
+ 20042 .LBE2333:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 20043 .loc 2 1684 0
+ 20044 13093 660F7F85 movdqa %xmm0, -8304(%rbp)
+ 20044 90DFFFFF
+ 20045 .LBB2337:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+
GAS LISTING /tmp/ccMa7HLZ.s page 616
+
+
+ 20046 .loc 2 1685 0
+ 20047 1309b 660F6F85 movdqa -8304(%rbp), %xmm0
+ 20047 90DFFFFF
+ 20048 130a3 F30F7F85 movdqu %xmm0, -5952(%rbp)
+ 20048 C0E8FFFF
+ 20049 130ab E8000000 call KDbgWriterGet at PLT
+ 20049 00
+ 20050 130b0 4885C0 testq %rax, %rax
+ 20051 130b3 7479 je .L485
+ 20052 130b5 BF010000 movl $1, %edi
+ 20052 00
+ 20053 130ba E8000000 call KDbgCondToFlag at PLT
+ 20053 00
+ 20054 130bf 4889C6 movq %rax, %rsi
+ 20055 130c2 BF100000 movl $16, %edi
+ 20055 00
+ 20056 130c7 E8000000 call KDbgTestModConds at PLT
+ 20056 00
+ 20057 130cc 84C0 testb %al, %al
+ 20058 130ce 745E je .L485
+ 20059 130d0 8B85CCE8 movl -5940(%rbp), %eax
+ 20059 FFFF
+ 20060 130d6 89C7 movl %eax, %edi
+ 20061 130d8 E823CFFE call bswap_32
+ 20061 FF
+ 20062 130dd 4189C5 movl %eax, %r13d
+ 20063 130e0 8B85C8E8 movl -5944(%rbp), %eax
+ 20063 FFFF
+ 20064 130e6 89C7 movl %eax, %edi
+ 20065 130e8 E813CFFE call bswap_32
+ 20065 FF
+ 20066 130ed 4189C4 movl %eax, %r12d
+ 20067 130f0 8B85C4E8 movl -5948(%rbp), %eax
+ 20067 FFFF
+ 20068 130f6 89C7 movl %eax, %edi
+ 20069 130f8 E803CFFE call bswap_32
+ 20069 FF
+ 20070 130fd 89C3 movl %eax, %ebx
+ 20071 130ff 8B85C0E8 movl -5952(%rbp), %eax
+ 20071 FFFF
+ 20072 13105 89C7 movl %eax, %edi
+ 20073 13107 E8F4CEFE call bswap_32
+ 20073 FF
+ 20074 1310c 4589E9 movl %r13d, %r9d
+ 20075 1310f 4589E0 movl %r12d, %r8d
+ 20076 13112 89D9 movl %ebx, %ecx
+ 20077 13114 89C2 movl %eax, %edx
+ 20078 13116 488D3500 leaq .LC2(%rip), %rsi
+ 20078 000000
+ 20079 1311d 488D3D00 leaq .LC1(%rip), %rdi
+ 20079 000000
+ 20080 13124 B8000000 movl $0, %eax
+ 20080 00
+ 20081 13129 E8000000 call KDbgMsg at PLT
+ 20081 00
+ 20082 .L485:
+ 20083 1312e 660F6F85 movdqa -8304(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 617
+
+
+ 20083 90DFFFFF
+ 20084 13136 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 20084 50FFFFFF
+ 20085 1313e 660F6F85 movdqa -8288(%rbp), %xmm0
+ 20085 A0DFFFFF
+ 20086 13146 F30F7F85 movdqu %xmm0, -192(%rbp)
+ 20086 40FFFFFF
+ 20087 .LBE2337:
+ 20088 .LBB2338:
+ 20089 .LBB2339:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20090 .loc 2 178 0
+ 20091 1314e F30F6F85 movdqu -192(%rbp), %xmm0
+ 20091 40FFFFFF
+ 20092 13156 F30F6F8D movdqu -176(%rbp), %xmm1
+ 20092 50FFFFFF
+ 20093 1315e 660FEFC1 pxor %xmm1, %xmm0
+ 20094 .LBE2339:
+ 20095 .LBE2338:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 20096 .loc 2 1686 0
+ 20097 13162 660F7F85 movdqa %xmm0, -8304(%rbp)
+ 20097 90DFFFFF
+ 20098 .LBB2340:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 20099 .loc 2 1687 0
+ 20100 1316a 660F6F85 movdqa -8304(%rbp), %xmm0
+ 20100 90DFFFFF
+ 20101 13172 F30F7F85 movdqu %xmm0, -5968(%rbp)
+ 20101 B0E8FFFF
+ 20102 1317a E8000000 call KDbgWriterGet at PLT
+ 20102 00
+ 20103 1317f 4885C0 testq %rax, %rax
+ 20104 13182 7479 je .L487
+ 20105 13184 BF010000 movl $1, %edi
+ 20105 00
+ 20106 13189 E8000000 call KDbgCondToFlag at PLT
+ 20106 00
+ 20107 1318e 4889C6 movq %rax, %rsi
+ 20108 13191 BF100000 movl $16, %edi
+ 20108 00
+ 20109 13196 E8000000 call KDbgTestModConds at PLT
+ 20109 00
+ 20110 1319b 84C0 testb %al, %al
+ 20111 1319d 745E je .L487
+ 20112 1319f 8B85BCE8 movl -5956(%rbp), %eax
+ 20112 FFFF
+ 20113 131a5 89C7 movl %eax, %edi
+ 20114 131a7 E854CEFE call bswap_32
+ 20114 FF
+ 20115 131ac 4189C5 movl %eax, %r13d
+ 20116 131af 8B85B8E8 movl -5960(%rbp), %eax
+ 20116 FFFF
+ 20117 131b5 89C7 movl %eax, %edi
+ 20118 131b7 E844CEFE call bswap_32
+ 20118 FF
+ 20119 131bc 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s page 618
+
+
+ 20120 131bf 8B85B4E8 movl -5964(%rbp), %eax
+ 20120 FFFF
+ 20121 131c5 89C7 movl %eax, %edi
+ 20122 131c7 E834CEFE call bswap_32
+ 20122 FF
+ 20123 131cc 89C3 movl %eax, %ebx
+ 20124 131ce 8B85B0E8 movl -5968(%rbp), %eax
+ 20124 FFFF
+ 20125 131d4 89C7 movl %eax, %edi
+ 20126 131d6 E825CEFE call bswap_32
+ 20126 FF
+ 20127 131db 4589E9 movl %r13d, %r9d
+ 20128 131de 4589E0 movl %r12d, %r8d
+ 20129 131e1 89D9 movl %ebx, %ecx
+ 20130 131e3 89C2 movl %eax, %edx
+ 20131 131e5 488D3500 leaq .LC3(%rip), %rsi
+ 20131 000000
+ 20132 131ec 488D3D00 leaq .LC1(%rip), %rdi
+ 20132 000000
+ 20133 131f3 B8000000 movl $0, %eax
+ 20133 00
+ 20134 131f8 E8000000 call KDbgMsg at PLT
+ 20134 00
+ 20135 .L487:
+ 20136 131fd 660F6F85 movdqa -8304(%rbp), %xmm0
+ 20136 90DFFFFF
+ 20137 13205 F30F7F85 movdqu %xmm0, -160(%rbp)
+ 20137 60FFFFFF
+ 20138 .LBE2340:
+ 20139 .LBB2341:
+ 20140 .LBB2342:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 20141 .loc 2 1357 0
+ 20142 1320d F30F6F85 movdqu -160(%rbp), %xmm0
+ 20142 60FFFFFF
+ 20143 13215 F30F7F85 movdqu %xmm0, -5760(%rbp)
+ 20143 80E9FFFF
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+ 20144 .loc 2 1358 0
+ 20145 1321d 8B858CE9 movl -5748(%rbp), %eax
+ 20145 FFFF
+ 20146 13223 898588E9 movl %eax, -5752(%rbp)
+ 20146 FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+ 20147 .loc 2 1359 0
+ 20148 13229 8B858CE9 movl -5748(%rbp), %eax
+ 20148 FFFF
+ 20149 1322f 898584E9 movl %eax, -5756(%rbp)
+ 20149 FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+ 20150 .loc 2 1360 0
+ 20151 13235 8B858CE9 movl -5748(%rbp), %eax
+ 20151 FFFF
+ 20152 1323b 898580E9 movl %eax, -5760(%rbp)
+ 20152 FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 20153 .loc 2 1361 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 619
+
+
+ 20154 13241 F30F6F85 movdqu -5760(%rbp), %xmm0
+ 20154 80E9FFFF
+ 20155 .LBE2342:
+ 20156 .LBE2341:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 20157 .loc 2 1688 0
+ 20158 13249 660F7F85 movdqa %xmm0, -8304(%rbp)
+ 20158 90DFFFFF
+ 20159 .LBB2343:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 20160 .loc 2 1689 0
+ 20161 13251 660F6F85 movdqa -8304(%rbp), %xmm0
+ 20161 90DFFFFF
+ 20162 13259 F30F7F85 movdqu %xmm0, -5984(%rbp)
+ 20162 A0E8FFFF
+ 20163 13261 E8000000 call KDbgWriterGet at PLT
+ 20163 00
+ 20164 13266 4885C0 testq %rax, %rax
+ 20165 13269 7479 je .L489
+ 20166 1326b BF010000 movl $1, %edi
+ 20166 00
+ 20167 13270 E8000000 call KDbgCondToFlag at PLT
+ 20167 00
+ 20168 13275 4889C6 movq %rax, %rsi
+ 20169 13278 BF100000 movl $16, %edi
+ 20169 00
+ 20170 1327d E8000000 call KDbgTestModConds at PLT
+ 20170 00
+ 20171 13282 84C0 testb %al, %al
+ 20172 13284 745E je .L489
+ 20173 13286 8B85ACE8 movl -5972(%rbp), %eax
+ 20173 FFFF
+ 20174 1328c 89C7 movl %eax, %edi
+ 20175 1328e E86DCDFE call bswap_32
+ 20175 FF
+ 20176 13293 4189C5 movl %eax, %r13d
+ 20177 13296 8B85A8E8 movl -5976(%rbp), %eax
+ 20177 FFFF
+ 20178 1329c 89C7 movl %eax, %edi
+ 20179 1329e E85DCDFE call bswap_32
+ 20179 FF
+ 20180 132a3 4189C4 movl %eax, %r12d
+ 20181 132a6 8B85A4E8 movl -5980(%rbp), %eax
+ 20181 FFFF
+ 20182 132ac 89C7 movl %eax, %edi
+ 20183 132ae E84DCDFE call bswap_32
+ 20183 FF
+ 20184 132b3 89C3 movl %eax, %ebx
+ 20185 132b5 8B85A0E8 movl -5984(%rbp), %eax
+ 20185 FFFF
+ 20186 132bb 89C7 movl %eax, %edi
+ 20187 132bd E83ECDFE call bswap_32
+ 20187 FF
+ 20188 132c2 4589E9 movl %r13d, %r9d
+ 20189 132c5 4589E0 movl %r12d, %r8d
+ 20190 132c8 89D9 movl %ebx, %ecx
+ 20191 132ca 89C2 movl %eax, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 620
+
+
+ 20192 132cc 488D3500 leaq .LC4(%rip), %rsi
+ 20192 000000
+ 20193 132d3 488D3D00 leaq .LC1(%rip), %rdi
+ 20193 000000
+ 20194 132da B8000000 movl $0, %eax
+ 20194 00
+ 20195 132df E8000000 call KDbgMsg at PLT
+ 20195 00
+ 20196 .L489:
+ 20197 .LBE2343:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 20198 .loc 2 1690 0
+ 20199 132e4 660F6F85 movdqa -8304(%rbp), %xmm0
+ 20199 90DFFFFF
+ 20200 .LBE2309:
+ 20201 .LBE2308:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(14,0x40); /* k56 : k57 : k58 : k59 */
+ 20202 .loc 2 1938 0
+ 20203 132ec F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 20203 E0E9FFFF
+ 20204 132f4 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 20204 C0E9FFFF
+ 20205 132fc F30F7F85 movdqu %xmm0, -144(%rbp)
+ 20205 70FFFFFF
+ 20206 .LBB2344:
+ 20207 .LBB2345:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 20208 .loc 2 1565 0
+ 20209 13304 F30F6F85 movdqu -144(%rbp), %xmm0
+ 20209 70FFFFFF
+ 20210 1330c 660F7F85 movdqa %xmm0, -8256(%rbp)
+ 20210 C0DFFFFF
+ 20211 13314 660F6F85 movdqa -8256(%rbp), %xmm0
+ 20211 C0DFFFFF
+ 20212 1331c F30F7F45 movdqu %xmm0, -128(%rbp)
+ 20212 80
+ 20213 .LBB2346:
+ 20214 .LBB2347:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 20215 .loc 2 1282 0
+ 20216 13321 F30F6F45 movdqu -128(%rbp), %xmm0
+ 20216 80
+ 20217 13326 F30F7F85 movdqu %xmm0, -5744(%rbp)
+ 20217 90E9FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 20218 .loc 2 1283 0
+ 20219 1332e 8B8598E9 movl -5736(%rbp), %eax
+ 20219 FFFF
+ 20220 13334 89859CE9 movl %eax, -5732(%rbp)
+ 20220 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 20221 .loc 2 1284 0
+ 20222 1333a 8B8594E9 movl -5740(%rbp), %eax
+ 20222 FFFF
+ 20223 13340 898598E9 movl %eax, -5736(%rbp)
+ 20223 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+
GAS LISTING /tmp/ccMa7HLZ.s page 621
+
+
+ 20224 .loc 2 1285 0
+ 20225 13346 8B8590E9 movl -5744(%rbp), %eax
+ 20225 FFFF
+ 20226 1334c 898594E9 movl %eax, -5740(%rbp)
+ 20226 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 20227 .loc 2 1286 0
+ 20228 13352 C78590E9 movl $0, -5744(%rbp)
+ 20228 FFFF0000
+ 20228 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 20229 .loc 2 1287 0
+ 20230 1335c F30F6F85 movdqu -5744(%rbp), %xmm0
+ 20230 90E9FFFF
+ 20231 .LBE2347:
+ 20232 .LBE2346:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 20233 .loc 2 1567 0
+ 20234 13364 660F7F85 movdqa %xmm0, -8256(%rbp)
+ 20234 C0DFFFFF
+ 20235 1336c 660F6F85 movdqa -8256(%rbp), %xmm0
+ 20235 C0DFFFFF
+ 20236 13374 660FEF85 pxor -144(%rbp), %xmm0
+ 20236 70FFFFFF
+ 20237 1337c F30F7F85 movdqu %xmm0, -144(%rbp)
+ 20237 70FFFFFF
+ 20238 13384 660F6F85 movdqa -8256(%rbp), %xmm0
+ 20238 C0DFFFFF
+ 20239 1338c F30F7F45 movdqu %xmm0, -112(%rbp)
+ 20239 90
+ 20240 .LBB2348:
+ 20241 .LBB2349:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 20242 .loc 2 1282 0
+ 20243 13391 F30F6F45 movdqu -112(%rbp), %xmm0
+ 20243 90
+ 20244 13396 F30F7F85 movdqu %xmm0, -5728(%rbp)
+ 20244 A0E9FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 20245 .loc 2 1283 0
+ 20246 1339e 8B85A8E9 movl -5720(%rbp), %eax
+ 20246 FFFF
+ 20247 133a4 8985ACE9 movl %eax, -5716(%rbp)
+ 20247 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 20248 .loc 2 1284 0
+ 20249 133aa 8B85A4E9 movl -5724(%rbp), %eax
+ 20249 FFFF
+ 20250 133b0 8985A8E9 movl %eax, -5720(%rbp)
+ 20250 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 20251 .loc 2 1285 0
+ 20252 133b6 8B85A0E9 movl -5728(%rbp), %eax
+ 20252 FFFF
+ 20253 133bc 8985A4E9 movl %eax, -5724(%rbp)
+ 20253 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+
GAS LISTING /tmp/ccMa7HLZ.s page 622
+
+
+ 20254 .loc 2 1286 0
+ 20255 133c2 C785A0E9 movl $0, -5728(%rbp)
+ 20255 FFFF0000
+ 20255 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 20256 .loc 2 1287 0
+ 20257 133cc F30F6F85 movdqu -5728(%rbp), %xmm0
+ 20257 A0E9FFFF
+ 20258 .LBE2349:
+ 20259 .LBE2348:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 20260 .loc 2 1568 0
+ 20261 133d4 660F7F85 movdqa %xmm0, -8256(%rbp)
+ 20261 C0DFFFFF
+ 20262 133dc 660F6F85 movdqa -8256(%rbp), %xmm0
+ 20262 C0DFFFFF
+ 20263 133e4 660FEF85 pxor -144(%rbp), %xmm0
+ 20263 70FFFFFF
+ 20264 133ec F30F7F85 movdqu %xmm0, -144(%rbp)
+ 20264 70FFFFFF
+ 20265 133f4 660F6F85 movdqa -8256(%rbp), %xmm0
+ 20265 C0DFFFFF
+ 20266 133fc F30F7F45 movdqu %xmm0, -96(%rbp)
+ 20266 A0
+ 20267 .LBB2350:
+ 20268 .LBB2351:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+ 20269 .loc 2 1282 0
+ 20270 13401 F30F6F45 movdqu -96(%rbp), %xmm0
+ 20270 A0
+ 20271 13406 F30F7F85 movdqu %xmm0, -5712(%rbp)
+ 20271 B0E9FFFF
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+ 20272 .loc 2 1283 0
+ 20273 1340e 8B85B8E9 movl -5704(%rbp), %eax
+ 20273 FFFF
+ 20274 13414 8985BCE9 movl %eax, -5700(%rbp)
+ 20274 FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+ 20275 .loc 2 1284 0
+ 20276 1341a 8B85B4E9 movl -5708(%rbp), %eax
+ 20276 FFFF
+ 20277 13420 8985B8E9 movl %eax, -5704(%rbp)
+ 20277 FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+ 20278 .loc 2 1285 0
+ 20279 13426 8B85B0E9 movl -5712(%rbp), %eax
+ 20279 FFFF
+ 20280 1342c 8985B4E9 movl %eax, -5708(%rbp)
+ 20280 FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+ 20281 .loc 2 1286 0
+ 20282 13432 C785B0E9 movl $0, -5712(%rbp)
+ 20282 FFFF0000
+ 20282 0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+ 20283 .loc 2 1287 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 623
+
+
+ 20284 1343c F30F6F85 movdqu -5712(%rbp), %xmm0
+ 20284 B0E9FFFF
+ 20285 .LBE2351:
+ 20286 .LBE2350:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 20287 .loc 2 1569 0
+ 20288 13444 660F7F85 movdqa %xmm0, -8256(%rbp)
+ 20288 C0DFFFFF
+ 20289 1344c 660F6F85 movdqa -8256(%rbp), %xmm0
+ 20289 C0DFFFFF
+ 20290 13454 660FEF85 pxor -144(%rbp), %xmm0
+ 20290 70FFFFFF
+ 20291 1345c F30F7F85 movdqu %xmm0, -144(%rbp)
+ 20291 70FFFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20292 .loc 2 1571 0
+ 20293 13464 F30F6F85 movdqu -144(%rbp), %xmm0
+ 20293 70FFFFFF
+ 20294 .LBE2345:
+ 20295 .LBE2344:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(14,0x40); /* k56 : k57 : k58 : k59 */
+ 20296 .loc 2 1938 0
+ 20297 1346c F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 20297 C0E9FFFF
+ 20298 13474 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 20298 C0E9FFFF
+ 20299 1347c F30F7F45 movdqu %xmm0, -64(%rbp)
+ 20299 C0
+ 20300 13481 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 20300 E0E9FFFF
+ 20301 13489 F30F7F45 movdqu %xmm0, -80(%rbp)
+ 20301 B0
+ 20302 .LBB2352:
+ 20303 .LBB2353:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20304 .loc 2 178 0
+ 20305 1348e F30F6F45 movdqu -80(%rbp), %xmm0
+ 20305 B0
+ 20306 13493 F30F6F4D movdqu -64(%rbp), %xmm1
+ 20306 C0
+ 20307 13498 660FEFC1 pxor %xmm1, %xmm0
+ 20308 .LBE2353:
+ 20309 .LBE2352:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(14,0x40); /* k56 : k57 : k58 : k59 */
+ 20310 .loc 2 1938 0
+ 20311 1349c F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 20311 C0E9FFFF
+ 20312 134a4 488B85D8 movq -8232(%rbp), %rax
+ 20312 DFFFFF
+ 20313 134ab 4805E000 addq $224, %rax
+ 20313 0000
+ 20314 134b1 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 20314 C0E9FFFF
+ 20315 134b9 F30F7F00 movdqu %xmm0, (%rax)
+1939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20316 .loc 2 1939 0
+ 20317 134bd 4881C4A8 addq $8872, %rsp
+
GAS LISTING /tmp/ccMa7HLZ.s page 624
+
+
+ 20317 220000
+ 20318 134c4 5B popq %rbx
+ 20319 134c5 415C popq %r12
+ 20320 134c7 415D popq %r13
+ 20321 134c9 415E popq %r14
+ 20322 134cb 415F popq %r15
+ 20323 134cd C9 leave
+ 20324 134ce C3 ret
+ 20325 .cfi_endproc
+ 20326 .LFE565:
+ 20327 .size KAESBlockCipherVecKeyExpansion256, .-KAESBlockCipherVecKeyExpansion256
+ 20328 .type KAESBlockCipherVecEqInvKeyExpansion, @function
+ 20329 KAESBlockCipherVecEqInvKeyExpansion:
+ 20330 .LFB566:
+1951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20331 .loc 2 1951 0
+ 20332 .cfi_startproc
+ 20333 134cf 55 pushq %rbp
+ 20334 .LCFI8:
+ 20335 .cfi_def_cfa_offset 16
+ 20336 134d0 4889E5 movq %rsp, %rbp
+ 20337 .cfi_offset 6, -16
+ 20338 .LCFI9:
+ 20339 .cfi_def_cfa_register 6
+ 20340 134d3 53 pushq %rbx
+ 20341 134d4 4881ECD0 subq $720, %rsp
+ 20341 020000
+ 20342 134db 4889BD28 movq %rdi, -728(%rbp)
+ 20342 FDFFFF
+ 20343 134e2 4889B520 movq %rsi, -736(%rbp)
+ 20343 FDFFFF
+ 20344 134e9 89951CFD movl %edx, -740(%rbp)
+ 20344 FFFF
+1954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** jx = Nr;
+ 20345 .loc 2 1954 0
+ 20346 134ef 8B851CFD movl -740(%rbp), %eax
+ 20346 FFFF
+ 20347 134f5 8985FCFD movl %eax, -516(%rbp)
+ 20347 FFFF
+1955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ix = 0;
+ 20348 .loc 2 1955 0
+ 20349 134fb C785F8FD movl $0, -520(%rbp)
+ 20349 FFFF0000
+ 20349 0000
+1956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix++] = dr[jx--];
+ 20350 .loc 2 1956 0
+ 20351 13505 8B85F8FD mov -520(%rbp), %eax
+ 20351 FFFF
+ 20352 1350b 48C1E004 salq $4, %rax
+ 20353 1350f 48038528 addq -728(%rbp), %rax
+ 20353 FDFFFF
+ 20354 13516 8B95FCFD mov -516(%rbp), %edx
+ 20354 FFFF
+ 20355 1351c 48C1E204 salq $4, %rdx
+ 20356 13520 48039520 addq -736(%rbp), %rdx
+ 20356 FDFFFF
+ 20357 13527 660F6F02 movdqa (%rdx), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 625
+
+
+ 20358 1352b 660F7F00 movdqa %xmm0, (%rax)
+ 20359 1352f 8385F8FD addl $1, -520(%rbp)
+ 20359 FFFF01
+ 20360 13536 83ADFCFD subl $1, -516(%rbp)
+ 20360 FFFF01
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** while (jx)
+ 20361 .loc 2 1957 0
+ 20362 1353d E91F0600 jmp .L492
+ 20362 00
+ 20363 .cfi_offset 3, -24
+ 20364 .L507:
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+ 20365 .loc 2 1958 0
+ 20366 13542 8B85F8FD mov -520(%rbp), %eax
+ 20366 FFFF
+ 20367 13548 48C1E004 salq $4, %rax
+ 20368 1354c 48038528 addq -728(%rbp), %rax
+ 20368 FDFFFF
+ 20369 13553 8B95FCFD mov -516(%rbp), %edx
+ 20369 FFFF
+ 20370 13559 48C1E204 salq $4, %rdx
+ 20371 1355d 48039520 addq -736(%rbp), %rdx
+ 20371 FDFFFF
+ 20372 13564 660F6F02 movdqa (%rdx), %xmm0
+ 20373 13568 83ADFCFD subl $1, -516(%rbp)
+ 20373 FFFF01
+ 20374 1356f F30F7F85 movdqu %xmm0, -512(%rbp)
+ 20374 00FEFFFF
+ 20375 13577 F30F6F85 movdqu -512(%rbp), %xmm0
+ 20375 00FEFFFF
+ 20376 1357f F30F7F85 movdqu %xmm0, -480(%rbp)
+ 20376 20FEFFFF
+ 20377 .LBB2397:
+ 20378 .LBB2398:
+ 20379 .LBB2399:
+ 20380 .LBB2400:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20381 .loc 2 667 0
+ 20382 13587 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 20382 00000000
+ 20383 1358f F30F6F8D movdqu -480(%rbp), %xmm1
+ 20383 20FEFFFF
+ 20384 13597 F30F7F8D movdqu %xmm1, -448(%rbp)
+ 20384 40FEFFFF
+ 20385 1359f F30F7F85 movdqu %xmm0, -464(%rbp)
+ 20385 30FEFFFF
+ 20386 .LBB2401:
+ 20387 .LBB2402:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 20388 .loc 2 380 0
+ 20389 135a7 F30F6F85 movdqu -448(%rbp), %xmm0
+ 20389 40FEFFFF
+ 20390 135af F30F7F85 movdqu %xmm0, -656(%rbp)
+ 20390 70FDFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 20391 .loc 2 381 0
+ 20392 135b7 F30F6F85 movdqu -464(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 626
+
+
+ 20392 30FEFFFF
+ 20393 135bf F30F7F85 movdqu %xmm0, -672(%rbp)
+ 20393 60FDFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 20394 .loc 2 383 0
+ 20395 135c7 C7855CFE movl $0, -420(%rbp)
+ 20395 FFFF0000
+ 20395 0000
+ 20396 135d1 EB5D jmp .L493
+ 20397 .L496:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 20398 .loc 2 385 0
+ 20399 135d3 8B955CFE movl -420(%rbp), %edx
+ 20399 FFFF
+ 20400 135d9 89D2 mov %edx, %edx
+ 20401 135db 0FB69415 movzbl -672(%rbp,%rdx), %edx
+ 20401 60FDFFFF
+ 20402 135e3 84D2 testb %dl, %dl
+ 20403 135e5 7912 jns .L494
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 20404 .loc 2 386 0
+ 20405 135e7 8B955CFE movl -420(%rbp), %edx
+ 20405 FFFF
+ 20406 135ed 89D2 mov %edx, %edx
+ 20407 135ef C6841580 movb $0, -640(%rbp,%rdx)
+ 20407 FDFFFF00
+ 20408 135f7 EB30 jmp .L495
+ 20409 .L494:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 20410 .loc 2 388 0
+ 20411 135f9 8B9D5CFE movl -420(%rbp), %ebx
+ 20411 FFFF
+ 20412 135ff 8B955CFE movl -420(%rbp), %edx
+ 20412 FFFF
+ 20413 13605 89D2 mov %edx, %edx
+ 20414 13607 0FB69415 movzbl -672(%rbp,%rdx), %edx
+ 20414 60FDFFFF
+ 20415 1360f 0FB6D2 movzbl %dl, %edx
+ 20416 13612 83E20F andl $15, %edx
+ 20417 13615 4863D2 movslq %edx,%rdx
+ 20418 13618 0FB68C15 movzbl -656(%rbp,%rdx), %ecx
+ 20418 70FDFFFF
+ 20419 13620 89DA mov %ebx, %edx
+ 20420 13622 888C1580 movb %cl, -640(%rbp,%rdx)
+ 20420 FDFFFF
+ 20421 .L495:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 20422 .loc 2 383 0
+ 20423 13629 83855CFE addl $1, -420(%rbp)
+ 20423 FFFF01
+ 20424 .L493:
+ 20425 13630 83BD5CFE cmpl $15, -420(%rbp)
+ 20425 FFFF0F
+ 20426 13637 769A jbe .L496
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 20427 .loc 2 391 0
+ 20428 13639 F30F6F85 movdqu -640(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 627
+
+
+ 20428 80FDFFFF
+ 20429 .LBE2402:
+ 20430 .LBE2401:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20431 .loc 2 667 0
+ 20432 13641 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 20432 20FEFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20433 .loc 2 668 0
+ 20434 13649 F30F6F85 movdqu -480(%rbp), %xmm0
+ 20434 20FEFFFF
+ 20435 .LBE2400:
+ 20436 .LBE2399:
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r1 = AESBCMEMBER(RotBytesLeft) (state);
+ 20437 .loc 2 1106 0
+ 20438 13651 660F7F85 movdqa %xmm0, -768(%rbp)
+ 20438 00FDFFFF
+ 20439 13659 660F6F85 movdqa -768(%rbp), %xmm0
+ 20439 00FDFFFF
+ 20440 13661 F30F7F85 movdqu %xmm0, -416(%rbp)
+ 20440 60FEFFFF
+ 20441 .LBB2403:
+ 20442 .LBB2404:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20443 .loc 2 667 0
+ 20444 13669 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 20444 00000000
+ 20445 13671 F30F6F8D movdqu -416(%rbp), %xmm1
+ 20445 60FEFFFF
+ 20446 13679 F30F7F8D movdqu %xmm1, -384(%rbp)
+ 20446 80FEFFFF
+ 20447 13681 F30F7F85 movdqu %xmm0, -400(%rbp)
+ 20447 70FEFFFF
+ 20448 .LBB2405:
+ 20449 .LBB2406:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 20450 .loc 2 380 0
+ 20451 13689 F30F6F85 movdqu -384(%rbp), %xmm0
+ 20451 80FEFFFF
+ 20452 13691 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 20452 A0FDFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 20453 .loc 2 381 0
+ 20454 13699 F30F6F85 movdqu -400(%rbp), %xmm0
+ 20454 70FEFFFF
+ 20455 136a1 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 20455 90FDFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 20456 .loc 2 383 0
+ 20457 136a9 C7859CFE movl $0, -356(%rbp)
+ 20457 FFFF0000
+ 20457 0000
+ 20458 136b3 EB5D jmp .L497
+ 20459 .L500:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 20460 .loc 2 385 0
+ 20461 136b5 8B959CFE movl -356(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 628
+
+
+ 20461 FFFF
+ 20462 136bb 89D2 mov %edx, %edx
+ 20463 136bd 0FB69415 movzbl -624(%rbp,%rdx), %edx
+ 20463 90FDFFFF
+ 20464 136c5 84D2 testb %dl, %dl
+ 20465 136c7 7912 jns .L498
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 20466 .loc 2 386 0
+ 20467 136c9 8B959CFE movl -356(%rbp), %edx
+ 20467 FFFF
+ 20468 136cf 89D2 mov %edx, %edx
+ 20469 136d1 C68415B0 movb $0, -592(%rbp,%rdx)
+ 20469 FDFFFF00
+ 20470 136d9 EB30 jmp .L499
+ 20471 .L498:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 20472 .loc 2 388 0
+ 20473 136db 8B9D9CFE movl -356(%rbp), %ebx
+ 20473 FFFF
+ 20474 136e1 8B959CFE movl -356(%rbp), %edx
+ 20474 FFFF
+ 20475 136e7 89D2 mov %edx, %edx
+ 20476 136e9 0FB69415 movzbl -624(%rbp,%rdx), %edx
+ 20476 90FDFFFF
+ 20477 136f1 0FB6D2 movzbl %dl, %edx
+ 20478 136f4 83E20F andl $15, %edx
+ 20479 136f7 4863D2 movslq %edx,%rdx
+ 20480 136fa 0FB68C15 movzbl -608(%rbp,%rdx), %ecx
+ 20480 A0FDFFFF
+ 20481 13702 89DA mov %ebx, %edx
+ 20482 13704 888C15B0 movb %cl, -592(%rbp,%rdx)
+ 20482 FDFFFF
+ 20483 .L499:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 20484 .loc 2 383 0
+ 20485 1370b 83859CFE addl $1, -356(%rbp)
+ 20485 FFFF01
+ 20486 .L497:
+ 20487 13712 83BD9CFE cmpl $15, -356(%rbp)
+ 20487 FFFF0F
+ 20488 13719 769A jbe .L500
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 20489 .loc 2 391 0
+ 20490 1371b F30F6F85 movdqu -592(%rbp), %xmm0
+ 20490 B0FDFFFF
+ 20491 .LBE2406:
+ 20492 .LBE2405:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20493 .loc 2 667 0
+ 20494 13723 F30F7F85 movdqu %xmm0, -416(%rbp)
+ 20494 60FEFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20495 .loc 2 668 0
+ 20496 1372b F30F6F85 movdqu -416(%rbp), %xmm0
+ 20496 60FEFFFF
+ 20497 .LBE2404:
+ 20498 .LBE2403:
+
GAS LISTING /tmp/ccMa7HLZ.s page 629
+
+
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r2 = AESBCMEMBER(RotBytesLeft) (r1);
+ 20499 .loc 2 1107 0
+ 20500 13733 660F7F85 movdqa %xmm0, -784(%rbp)
+ 20500 F0FCFFFF
+ 20501 1373b 660F6F85 movdqa -784(%rbp), %xmm0
+ 20501 F0FCFFFF
+ 20502 13743 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 20502 A0FEFFFF
+ 20503 .LBB2407:
+ 20504 .LBB2408:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20505 .loc 2 667 0
+ 20506 1374b 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 20506 00000000
+ 20507 13753 F30F6F8D movdqu -352(%rbp), %xmm1
+ 20507 A0FEFFFF
+ 20508 1375b F30F7F8D movdqu %xmm1, -320(%rbp)
+ 20508 C0FEFFFF
+ 20509 13763 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 20509 B0FEFFFF
+ 20510 .LBB2409:
+ 20511 .LBB2410:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 20512 .loc 2 380 0
+ 20513 1376b F30F6F85 movdqu -320(%rbp), %xmm0
+ 20513 C0FEFFFF
+ 20514 13773 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 20514 D0FDFFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 20515 .loc 2 381 0
+ 20516 1377b F30F6F85 movdqu -336(%rbp), %xmm0
+ 20516 B0FEFFFF
+ 20517 13783 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 20517 C0FDFFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 20518 .loc 2 383 0
+ 20519 1378b C785DCFE movl $0, -292(%rbp)
+ 20519 FFFF0000
+ 20519 0000
+ 20520 13795 EB5D jmp .L501
+ 20521 .L504:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 20522 .loc 2 385 0
+ 20523 13797 8B95DCFE movl -292(%rbp), %edx
+ 20523 FFFF
+ 20524 1379d 89D2 mov %edx, %edx
+ 20525 1379f 0FB69415 movzbl -576(%rbp,%rdx), %edx
+ 20525 C0FDFFFF
+ 20526 137a7 84D2 testb %dl, %dl
+ 20527 137a9 7912 jns .L502
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 20528 .loc 2 386 0
+ 20529 137ab 8B95DCFE movl -292(%rbp), %edx
+ 20529 FFFF
+ 20530 137b1 89D2 mov %edx, %edx
+ 20531 137b3 C68415E0 movb $0, -544(%rbp,%rdx)
+ 20531 FDFFFF00
+
GAS LISTING /tmp/ccMa7HLZ.s page 630
+
+
+ 20532 137bb EB30 jmp .L503
+ 20533 .L502:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 20534 .loc 2 388 0
+ 20535 137bd 8B9DDCFE movl -292(%rbp), %ebx
+ 20535 FFFF
+ 20536 137c3 8B95DCFE movl -292(%rbp), %edx
+ 20536 FFFF
+ 20537 137c9 89D2 mov %edx, %edx
+ 20538 137cb 0FB69415 movzbl -576(%rbp,%rdx), %edx
+ 20538 C0FDFFFF
+ 20539 137d3 0FB6D2 movzbl %dl, %edx
+ 20540 137d6 83E20F andl $15, %edx
+ 20541 137d9 4863D2 movslq %edx,%rdx
+ 20542 137dc 0FB68C15 movzbl -560(%rbp,%rdx), %ecx
+ 20542 D0FDFFFF
+ 20543 137e4 89DA mov %ebx, %edx
+ 20544 137e6 888C15E0 movb %cl, -544(%rbp,%rdx)
+ 20544 FDFFFF
+ 20545 .L503:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 20546 .loc 2 383 0
+ 20547 137ed 8385DCFE addl $1, -292(%rbp)
+ 20547 FFFF01
+ 20548 .L501:
+ 20549 137f4 83BDDCFE cmpl $15, -292(%rbp)
+ 20549 FFFF0F
+ 20550 137fb 769A jbe .L504
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 20551 .loc 2 391 0
+ 20552 137fd F30F6F85 movdqu -544(%rbp), %xmm0
+ 20552 E0FDFFFF
+ 20553 .LBE2410:
+ 20554 .LBE2409:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20555 .loc 2 667 0
+ 20556 13805 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 20556 A0FEFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20557 .loc 2 668 0
+ 20558 1380d F30F6F85 movdqu -352(%rbp), %xmm0
+ 20558 A0FEFFFF
+ 20559 .LBE2408:
+ 20560 .LBE2407:
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r3 = AESBCMEMBER(RotBytesLeft) (r2);
+ 20561 .loc 2 1108 0
+ 20562 13815 660F7F85 movdqa %xmm0, -800(%rbp)
+ 20562 E0FCFFFF
+ 20563 1381d F30F6F85 movdqu -512(%rbp), %xmm0
+ 20563 00FEFFFF
+ 20564 13825 F30F7F85 movdqu %xmm0, -272(%rbp)
+ 20564 F0FEFFFF
+ 20565 1382d 660F6F85 movdqa -784(%rbp), %xmm0
+ 20565 F0FCFFFF
+ 20566 13835 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 20566 E0FEFFFF
+ 20567 .LBB2411:
+
GAS LISTING /tmp/ccMa7HLZ.s page 631
+
+
+ 20568 .LBB2412:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20569 .loc 2 178 0
+ 20570 1383d F30F6F85 movdqu -288(%rbp), %xmm0
+ 20570 E0FEFFFF
+ 20571 13845 F30F6F8D movdqu -272(%rbp), %xmm1
+ 20571 F0FEFFFF
+ 20572 1384d 660FEFC1 pxor %xmm1, %xmm0
+ 20573 .LBE2412:
+ 20574 .LBE2411:
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(VecXor) (state, r2);
+ 20575 .loc 2 1110 0
+ 20576 13851 660F7F85 movdqa %xmm0, -832(%rbp)
+ 20576 C0FCFFFF
+ 20577 13859 F30F6F85 movdqu -512(%rbp), %xmm0
+ 20577 00FEFFFF
+ 20578 13861 F30F7F85 movdqu %xmm0, -240(%rbp)
+ 20578 10FFFFFF
+ 20579 13869 660F6F85 movdqa -768(%rbp), %xmm0
+ 20579 00FDFFFF
+ 20580 13871 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 20580 00FFFFFF
+ 20581 .LBB2413:
+ 20582 .LBB2414:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20583 .loc 2 178 0
+ 20584 13879 F30F6F85 movdqu -256(%rbp), %xmm0
+ 20584 00FFFFFF
+ 20585 13881 F30F6F8D movdqu -240(%rbp), %xmm1
+ 20585 10FFFFFF
+ 20586 13889 660FEFC1 pxor %xmm1, %xmm0
+ 20587 .LBE2414:
+ 20588 .LBE2413:
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(VecXor) (state, r1);
+ 20589 .loc 2 1111 0
+ 20590 1388d 660F7F85 movdqa %xmm0, -816(%rbp)
+ 20590 D0FCFFFF
+ 20591 13895 660F6F85 movdqa -784(%rbp), %xmm0
+ 20591 F0FCFFFF
+ 20592 1389d F30F7F85 movdqu %xmm0, -208(%rbp)
+ 20592 30FFFFFF
+ 20593 138a5 660F6F85 movdqa -800(%rbp), %xmm0
+ 20593 E0FCFFFF
+ 20594 138ad F30F7F85 movdqu %xmm0, -224(%rbp)
+ 20594 20FFFFFF
+ 20595 .LBB2415:
+ 20596 .LBB2416:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20597 .loc 2 178 0
+ 20598 138b5 F30F6F85 movdqu -224(%rbp), %xmm0
+ 20598 20FFFFFF
+ 20599 138bd F30F6F8D movdqu -208(%rbp), %xmm1
+ 20599 30FFFFFF
+ 20600 138c5 660FEFC1 pxor %xmm1, %xmm0
+ 20601 .LBE2416:
+ 20602 .LBE2415:
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (r2, r3);
+
GAS LISTING /tmp/ccMa7HLZ.s page 632
+
+
+ 20603 .loc 2 1112 0
+ 20604 138c9 660F7F85 movdqa %xmm0, -848(%rbp)
+ 20604 B0FCFFFF
+ 20605 138d1 660F6F85 movdqa -848(%rbp), %xmm0
+ 20605 B0FCFFFF
+ 20606 138d9 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 20606 50FFFFFF
+ 20607 138e1 660F6F85 movdqa -768(%rbp), %xmm0
+ 20607 00FDFFFF
+ 20608 138e9 F30F7F85 movdqu %xmm0, -192(%rbp)
+ 20608 40FFFFFF
+ 20609 .LBB2417:
+ 20610 .LBB2418:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20611 .loc 2 178 0
+ 20612 138f1 F30F6F85 movdqu -192(%rbp), %xmm0
+ 20612 40FFFFFF
+ 20613 138f9 F30F6F8D movdqu -176(%rbp), %xmm1
+ 20613 50FFFFFF
+ 20614 13901 660FEFC1 pxor %xmm1, %xmm0
+ 20615 .LBE2418:
+ 20616 .LBE2417:
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (f8, r1);
+ 20617 .loc 2 1113 0
+ 20618 13905 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 20618 00FEFFFF
+ 20619 1390d 660F6F85 movdqa -848(%rbp), %xmm0
+ 20619 B0FCFFFF
+ 20620 13915 F30F7F85 movdqu %xmm0, -144(%rbp)
+ 20620 70FFFFFF
+ 20621 1391d 660F6F85 movdqa -816(%rbp), %xmm0
+ 20621 D0FCFFFF
+ 20622 13925 F30F7F85 movdqu %xmm0, -160(%rbp)
+ 20622 60FFFFFF
+ 20623 .LBB2419:
+ 20624 .LBB2420:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20625 .loc 2 178 0
+ 20626 1392d F30F6F85 movdqu -160(%rbp), %xmm0
+ 20626 60FFFFFF
+ 20627 13935 F30F6F8D movdqu -144(%rbp), %xmm1
+ 20627 70FFFFFF
+ 20628 1393d 660FEFC1 pxor %xmm1, %xmm0
+ 20629 .LBE2420:
+ 20630 .LBE2419:
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (f8, f2);
+ 20631 .loc 2 1114 0
+ 20632 13941 660F7F85 movdqa %xmm0, -848(%rbp)
+ 20632 B0FCFFFF
+ 20633 .LBB2421:
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.state = f2;
+ 20634 .loc 2 1126 0
+ 20635 13949 660F6F85 movdqa -816(%rbp), %xmm0
+ 20635 D0FCFFFF
+ 20636 13951 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 20636 50FDFFFF
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.state = f4;
+
GAS LISTING /tmp/ccMa7HLZ.s page 633
+
+
+ 20637 .loc 2 1127 0
+ 20638 13959 660F6F85 movdqa -832(%rbp), %xmm0
+ 20638 C0FCFFFF
+ 20639 13961 F30F7F85 movdqu %xmm0, -704(%rbp)
+ 20639 40FDFFFF
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.state = f8;
+ 20640 .loc 2 1128 0
+ 20641 13969 660F6F85 movdqa -848(%rbp), %xmm0
+ 20641 B0FCFFFF
+ 20642 13971 F30F7F85 movdqu %xmm0, -720(%rbp)
+ 20642 30FDFFFF
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof fu2; ++ix)
+ 20643 .loc 2 1130 0
+ 20644 13979 C7851CFE movl $0, -484(%rbp)
+ 20644 FFFF0000
+ 20644 0000
+ 20645 13983 E9F90000 jmp .L505
+ 20645 00
+ 20646 .L506:
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+ 20647 .loc 2 1132 0
+ 20648 13988 8B9D1CFE movl -484(%rbp), %ebx
+ 20648 FFFF
+ 20649 1398e 8B951CFE movl -484(%rbp), %edx
+ 20649 FFFF
+ 20650 13994 89D2 mov %edx, %edx
+ 20651 13996 0FB69415 movzbl -688(%rbp,%rdx), %edx
+ 20651 50FDFFFF
+ 20652 1399e 0FB6D2 movzbl %dl, %edx
+ 20653 139a1 88558A movb %dl, -118(%rbp)
+ 20654 .LBB2422:
+ 20655 .LBB2423:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 20656 .loc 2 1012 0
+ 20657 139a4 0FB6558A movzbl -118(%rbp), %edx
+ 20658 139a8 01D2 addl %edx, %edx
+ 20659 139aa 89D6 movl %edx, %esi
+ 20660 139ac 0FB6558A movzbl -118(%rbp), %edx
+ 20661 139b0 C0EA07 shrb $7, %dl
+ 20662 139b3 0FB6D2 movzbl %dl, %edx
+ 20663 139b6 88558B movb %dl, -117(%rbp)
+ 20664 .LBB2424:
+ 20665 .LBB2425:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+ 20666 .loc 2 1001 0
+ 20667 139b9 0FB6558B movzbl -117(%rbp), %edx
+ 20668 139bd 4863CA movslq %edx,%rcx
+ 20669 139c0 488D1500 leaq KAESBlockCipherVecFFtable(%rip), %rdx
+ 20669 000000
+ 20670 139c7 0FB61411 movzbl (%rcx,%rdx), %edx
+ 20671 .LBE2425:
+ 20672 .LBE2424:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 20673 .loc 2 1012 0
+ 20674 139cb 31F2 xorl %esi, %edx
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+ 20675 .loc 2 1132 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 634
+
+
+ 20676 139cd 89D1 movl %edx, %ecx
+ 20677 .LBE2423:
+ 20678 .LBE2422:
+ 20679 139cf 89DA mov %ebx, %edx
+ 20680 139d1 888C1550 movb %cl, -688(%rbp,%rdx)
+ 20680 FDFFFF
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+ 20681 .loc 2 1133 0
+ 20682 139d8 8B9D1CFE movl -484(%rbp), %ebx
+ 20682 FFFF
+ 20683 139de 8B951CFE movl -484(%rbp), %edx
+ 20683 FFFF
+ 20684 139e4 89D2 mov %edx, %edx
+ 20685 139e6 0FB69415 movzbl -704(%rbp,%rdx), %edx
+ 20685 40FDFFFF
+ 20686 139ee 0FB6D2 movzbl %dl, %edx
+ 20687 139f1 88558C movb %dl, -116(%rbp)
+ 20688 .LBB2426:
+ 20689 .LBB2427:
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+ 20690 .loc 2 1023 0
+ 20691 139f4 0FB6558C movzbl -116(%rbp), %edx
+ 20692 139f8 C1E202 sall $2, %edx
+ 20693 139fb 89D6 movl %edx, %esi
+ 20694 139fd 0FB6558C movzbl -116(%rbp), %edx
+ 20695 13a01 C0EA06 shrb $6, %dl
+ 20696 13a04 0FB6D2 movzbl %dl, %edx
+ 20697 13a07 88558D movb %dl, -115(%rbp)
+ 20698 .LBB2428:
+ 20699 .LBB2429:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+ 20700 .loc 2 1001 0
+ 20701 13a0a 0FB6558D movzbl -115(%rbp), %edx
+ 20702 13a0e 4863CA movslq %edx,%rcx
+ 20703 13a11 488D1500 leaq KAESBlockCipherVecFFtable(%rip), %rdx
+ 20703 000000
+ 20704 13a18 0FB61411 movzbl (%rcx,%rdx), %edx
+ 20705 .LBE2429:
+ 20706 .LBE2428:
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+ 20707 .loc 2 1023 0
+ 20708 13a1c 31F2 xorl %esi, %edx
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+ 20709 .loc 2 1133 0
+ 20710 13a1e 89D1 movl %edx, %ecx
+ 20711 .LBE2427:
+ 20712 .LBE2426:
+ 20713 13a20 89DA mov %ebx, %edx
+ 20714 13a22 888C1540 movb %cl, -704(%rbp,%rdx)
+ 20714 FDFFFF
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+ 20715 .loc 2 1134 0
+ 20716 13a29 8B9D1CFE movl -484(%rbp), %ebx
+ 20716 FFFF
+ 20717 13a2f 8B951CFE movl -484(%rbp), %edx
+ 20717 FFFF
+ 20718 13a35 89D2 mov %edx, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 635
+
+
+ 20719 13a37 0FB69415 movzbl -720(%rbp,%rdx), %edx
+ 20719 30FDFFFF
+ 20720 13a3f 0FB6D2 movzbl %dl, %edx
+ 20721 13a42 88558E movb %dl, -114(%rbp)
+ 20722 .LBB2430:
+ 20723 .LBB2431:
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+ 20724 .loc 2 1034 0
+ 20725 13a45 0FB6558E movzbl -114(%rbp), %edx
+ 20726 13a49 C1E203 sall $3, %edx
+ 20727 13a4c 89D6 movl %edx, %esi
+ 20728 13a4e 0FB6558E movzbl -114(%rbp), %edx
+ 20729 13a52 C0EA05 shrb $5, %dl
+ 20730 13a55 0FB6D2 movzbl %dl, %edx
+ 20731 13a58 88558F movb %dl, -113(%rbp)
+ 20732 .LBB2432:
+ 20733 .LBB2433:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+ 20734 .loc 2 1001 0
+ 20735 13a5b 0FB6558F movzbl -113(%rbp), %edx
+ 20736 13a5f 4863CA movslq %edx,%rcx
+ 20737 13a62 488D1500 leaq KAESBlockCipherVecFFtable(%rip), %rdx
+ 20737 000000
+ 20738 13a69 0FB61411 movzbl (%rcx,%rdx), %edx
+ 20739 .LBE2433:
+ 20740 .LBE2432:
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+ 20741 .loc 2 1034 0
+ 20742 13a6d 31F2 xorl %esi, %edx
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+ 20743 .loc 2 1134 0
+ 20744 13a6f 89D1 movl %edx, %ecx
+ 20745 .LBE2431:
+ 20746 .LBE2430:
+ 20747 13a71 89DA mov %ebx, %edx
+ 20748 13a73 888C1530 movb %cl, -720(%rbp,%rdx)
+ 20748 FDFFFF
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof fu2; ++ix)
+ 20749 .loc 2 1130 0
+ 20750 13a7a 83851CFE addl $1, -484(%rbp)
+ 20750 FFFF01
+ 20751 .L505:
+ 20752 13a81 83BD1CFE cmpl $15, -484(%rbp)
+ 20752 FFFF0F
+ 20753 13a88 0F86FAFE jbe .L506
+ 20753 FFFF
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = fu2.state;
+ 20754 .loc 2 1136 0
+ 20755 13a8e F30F6F85 movdqu -688(%rbp), %xmm0
+ 20755 50FDFFFF
+ 20756 13a96 660F7F85 movdqa %xmm0, -816(%rbp)
+ 20756 D0FCFFFF
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = fu4.state;
+ 20757 .loc 2 1137 0
+ 20758 13a9e F30F6F85 movdqu -704(%rbp), %xmm0
+ 20758 40FDFFFF
+ 20759 13aa6 660F7F85 movdqa %xmm0, -832(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 636
+
+
+ 20759 C0FCFFFF
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = fu8.state;
+ 20760 .loc 2 1138 0
+ 20761 13aae F30F6F85 movdqu -720(%rbp), %xmm0
+ 20761 30FDFFFF
+ 20762 13ab6 660F7F85 movdqa %xmm0, -848(%rbp)
+ 20762 B0FCFFFF
+ 20763 13abe F30F6F85 movdqu -512(%rbp), %xmm0
+ 20763 00FEFFFF
+ 20764 13ac6 F30F7F45 movdqu %xmm0, -96(%rbp)
+ 20764 A0
+ 20765 13acb 660F6F85 movdqa -816(%rbp), %xmm0
+ 20765 D0FCFFFF
+ 20766 13ad3 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 20766 90
+ 20767 .LBE2421:
+ 20768 .LBB2434:
+ 20769 .LBB2435:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20770 .loc 2 178 0
+ 20771 13ad8 F30F6F45 movdqu -112(%rbp), %xmm0
+ 20771 90
+ 20772 13add F30F6F4D movdqu -96(%rbp), %xmm1
+ 20772 A0
+ 20773 13ae2 660FEFC1 pxor %xmm1, %xmm0
+ 20774 .LBE2435:
+ 20775 .LBE2434:
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f2);
+ 20776 .loc 2 1142 0
+ 20777 13ae6 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 20777 00FEFFFF
+ 20778 13aee F30F6F85 movdqu -512(%rbp), %xmm0
+ 20778 00FEFFFF
+ 20779 13af6 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 20779 C0
+ 20780 13afb 660F6F85 movdqa -832(%rbp), %xmm0
+ 20780 C0FCFFFF
+ 20781 13b03 F30F7F45 movdqu %xmm0, -80(%rbp)
+ 20781 B0
+ 20782 .LBB2436:
+ 20783 .LBB2437:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20784 .loc 2 178 0
+ 20785 13b08 F30F6F45 movdqu -80(%rbp), %xmm0
+ 20785 B0
+ 20786 13b0d F30F6F4D movdqu -64(%rbp), %xmm1
+ 20786 C0
+ 20787 13b12 660FEFC1 pxor %xmm1, %xmm0
+ 20788 .LBE2437:
+ 20789 .LBE2436:
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f4);
+ 20790 .loc 2 1143 0
+ 20791 13b16 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 20791 00FEFFFF
+ 20792 13b1e F30F6F85 movdqu -512(%rbp), %xmm0
+ 20792 00FEFFFF
+ 20793 13b26 F30F7F45 movdqu %xmm0, -32(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 637
+
+
+ 20793 E0
+ 20794 13b2b 660F6F85 movdqa -848(%rbp), %xmm0
+ 20794 B0FCFFFF
+ 20795 13b33 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 20795 D0
+ 20796 .LBB2438:
+ 20797 .LBB2439:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20798 .loc 2 178 0
+ 20799 13b38 F30F6F45 movdqu -48(%rbp), %xmm0
+ 20799 D0
+ 20800 13b3d F30F6F4D movdqu -32(%rbp), %xmm1
+ 20800 E0
+ 20801 13b42 660FEFC1 pxor %xmm1, %xmm0
+ 20802 .LBE2439:
+ 20803 .LBE2438:
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f8);
+ 20804 .loc 2 1144 0
+ 20805 13b46 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 20805 00FEFFFF
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20806 .loc 2 1148 0
+ 20807 13b4e F30F6F85 movdqu -512(%rbp), %xmm0
+ 20807 00FEFFFF
+ 20808 .LBE2398:
+ 20809 .LBE2397:
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+ 20810 .loc 2 1958 0
+ 20811 13b56 660F7F00 movdqa %xmm0, (%rax)
+ 20812 13b5a 8385F8FD addl $1, -520(%rbp)
+ 20812 FFFF01
+ 20813 .L492:
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** while (jx)
+ 20814 .loc 2 1957 0
+ 20815 13b61 83BDFCFD cmpl $0, -516(%rbp)
+ 20815 FFFF00
+ 20816 13b68 0F85D4F9 jne .L507
+ 20816 FFFF
+1959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix] = dr[jx];
+ 20817 .loc 2 1959 0
+ 20818 13b6e 8B85F8FD mov -520(%rbp), %eax
+ 20818 FFFF
+ 20819 13b74 48C1E004 salq $4, %rax
+ 20820 13b78 48038528 addq -728(%rbp), %rax
+ 20820 FDFFFF
+ 20821 13b7f 8B95FCFD mov -516(%rbp), %edx
+ 20821 FFFF
+ 20822 13b85 48C1E204 salq $4, %rdx
+ 20823 13b89 48039520 addq -736(%rbp), %rdx
+ 20823 FDFFFF
+ 20824 13b90 660F6F02 movdqa (%rdx), %xmm0
+ 20825 13b94 660F7F00 movdqa %xmm0, (%rax)
+1960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20826 .loc 2 1960 0
+ 20827 13b98 4881C4D0 addq $720, %rsp
+ 20827 020000
+ 20828 13b9f 5B popq %rbx
+
GAS LISTING /tmp/ccMa7HLZ.s page 638
+
+
+ 20829 13ba0 C9 leave
+ 20830 13ba1 C3 ret
+ 20831 .cfi_endproc
+ 20832 .LFE566:
+ 20833 .size KAESBlockCipherVecEqInvKeyExpansion, .-KAESBlockCipherVecEqInvKeyExpansion
+ 20834 .type KAESBlockCipherVecEqInvKeyExpansion128, @function
+ 20835 KAESBlockCipherVecEqInvKeyExpansion128:
+ 20836 .LFB567:
+1965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20837 .loc 2 1965 0
+ 20838 .cfi_startproc
+ 20839 13ba2 55 pushq %rbp
+ 20840 .LCFI10:
+ 20841 .cfi_def_cfa_offset 16
+ 20842 13ba3 4889E5 movq %rsp, %rbp
+ 20843 .cfi_offset 6, -16
+ 20844 .LCFI11:
+ 20845 .cfi_def_cfa_register 6
+ 20846 13ba6 4883EC10 subq $16, %rsp
+ 20847 13baa 48897DF8 movq %rdi, -8(%rbp)
+ 20848 13bae 488975F0 movq %rsi, -16(%rbp)
+1966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+ 20849 .loc 2 1966 0
+ 20850 13bb2 488B4DF0 movq -16(%rbp), %rcx
+ 20851 13bb6 488B45F8 movq -8(%rbp), %rax
+ 20852 13bba BA0A0000 movl $10, %edx
+ 20852 00
+ 20853 13bbf 4889CE movq %rcx, %rsi
+ 20854 13bc2 4889C7 movq %rax, %rdi
+ 20855 13bc5 E805F9FF call KAESBlockCipherVecEqInvKeyExpansion
+ 20855 FF
+1967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20856 .loc 2 1967 0
+ 20857 13bca C9 leave
+ 20858 13bcb C3 ret
+ 20859 .cfi_endproc
+ 20860 .LFE567:
+ 20861 .size KAESBlockCipherVecEqInvKeyExpansion128, .-KAESBlockCipherVecEqInvKeyExpansion128
+ 20862 .type KAESBlockCipherVecEqInvKeyExpansion192, @function
+ 20863 KAESBlockCipherVecEqInvKeyExpansion192:
+ 20864 .LFB568:
+1972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20865 .loc 2 1972 0
+ 20866 .cfi_startproc
+ 20867 13bcc 55 pushq %rbp
+ 20868 .LCFI12:
+ 20869 .cfi_def_cfa_offset 16
+ 20870 13bcd 4889E5 movq %rsp, %rbp
+ 20871 .cfi_offset 6, -16
+ 20872 .LCFI13:
+ 20873 .cfi_def_cfa_register 6
+ 20874 13bd0 4883EC10 subq $16, %rsp
+ 20875 13bd4 48897DF8 movq %rdi, -8(%rbp)
+ 20876 13bd8 488975F0 movq %rsi, -16(%rbp)
+1973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+ 20877 .loc 2 1973 0
+ 20878 13bdc 488B4DF0 movq -16(%rbp), %rcx
+
GAS LISTING /tmp/ccMa7HLZ.s page 639
+
+
+ 20879 13be0 488B45F8 movq -8(%rbp), %rax
+ 20880 13be4 BA0C0000 movl $12, %edx
+ 20880 00
+ 20881 13be9 4889CE movq %rcx, %rsi
+ 20882 13bec 4889C7 movq %rax, %rdi
+ 20883 13bef E8DBF8FF call KAESBlockCipherVecEqInvKeyExpansion
+ 20883 FF
+1974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20884 .loc 2 1974 0
+ 20885 13bf4 C9 leave
+ 20886 13bf5 C3 ret
+ 20887 .cfi_endproc
+ 20888 .LFE568:
+ 20889 .size KAESBlockCipherVecEqInvKeyExpansion192, .-KAESBlockCipherVecEqInvKeyExpansion192
+ 20890 .type KAESBlockCipherVecEqInvKeyExpansion256, @function
+ 20891 KAESBlockCipherVecEqInvKeyExpansion256:
+ 20892 .LFB569:
+1979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20893 .loc 2 1979 0
+ 20894 .cfi_startproc
+ 20895 13bf6 55 pushq %rbp
+ 20896 .LCFI14:
+ 20897 .cfi_def_cfa_offset 16
+ 20898 13bf7 4889E5 movq %rsp, %rbp
+ 20899 .cfi_offset 6, -16
+ 20900 .LCFI15:
+ 20901 .cfi_def_cfa_register 6
+ 20902 13bfa 4883EC10 subq $16, %rsp
+ 20903 13bfe 48897DF8 movq %rdi, -8(%rbp)
+ 20904 13c02 488975F0 movq %rsi, -16(%rbp)
+1980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+ 20905 .loc 2 1980 0
+ 20906 13c06 488B4DF0 movq -16(%rbp), %rcx
+ 20907 13c0a 488B45F8 movq -8(%rbp), %rax
+ 20908 13c0e BA0E0000 movl $14, %edx
+ 20908 00
+ 20909 13c13 4889CE movq %rcx, %rsi
+ 20910 13c16 4889C7 movq %rax, %rdi
+ 20911 13c19 E8B1F8FF call KAESBlockCipherVecEqInvKeyExpansion
+ 20911 FF
+1981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20912 .loc 2 1981 0
+ 20913 13c1e C9 leave
+ 20914 13c1f C3 ret
+ 20915 .cfi_endproc
+ 20916 .LFE569:
+ 20917 .size KAESBlockCipherVecEqInvKeyExpansion256, .-KAESBlockCipherVecEqInvKeyExpansion256
+ 20918 .section .rodata
+ 20919 .LC5:
+ 20920 03d2 53746172 .string "Start of Round"
+ 20920 74206F66
+ 20920 20526F75
+ 20920 6E6400
+ 20921 .LC6:
+ 20922 03e1 526F756E .string "Round Key"
+ 20922 64204B65
+ 20922 7900
+
GAS LISTING /tmp/ccMa7HLZ.s page 640
+
+
+ 20923 .LC7:
+ 20924 03eb 456E6420 .string "End 1st Round"
+ 20924 31737420
+ 20924 526F756E
+ 20924 6400
+ 20925 .LC8:
+ 20926 03f9 41667465 .string "After SubBytes"
+ 20926 72205375
+ 20926 62427974
+ 20926 657300
+ 20927 .LC9:
+ 20928 0408 41667465 .string "After ShiftRow"
+ 20928 72205368
+ 20928 69667452
+ 20928 6F7700
+ 20929 .LC10:
+ 20930 0417 41667465 .string "After MixColum"
+ 20930 72204D69
+ 20930 78436F6C
+ 20930 756D00
+ 20931 .LC11:
+ 20932 0426 456E6420 .string "End of Round"
+ 20932 6F662052
+ 20932 6F756E64
+ 20932 00
+ 20933 .text
+ 20934 .type KAESBlockCipherVecCipher, @function
+ 20935 KAESBlockCipherVecCipher:
+ 20936 .LFB573:
+2094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20937 .loc 2 2094 0
+ 20938 .cfi_startproc
+ 20939 13c20 55 pushq %rbp
+ 20940 .LCFI16:
+ 20941 .cfi_def_cfa_offset 16
+ 20942 13c21 4889E5 movq %rsp, %rbp
+ 20943 .cfi_offset 6, -16
+ 20944 .LCFI17:
+ 20945 .cfi_def_cfa_register 6
+ 20946 13c24 4157 pushq %r15
+ 20947 13c26 4156 pushq %r14
+ 20948 13c28 4155 pushq %r13
+ 20949 13c2a 4154 pushq %r12
+ 20950 13c2c 53 pushq %rbx
+ 20951 13c2d 4881ECC8 subq $2504, %rsp
+ 20951 090000
+ 20952 13c34 660F7F85 movdqa %xmm0, -2400(%rbp)
+ 20952 A0F6FFFF
+ 20953 13c3c 4889BD98 movq %rdi, -2408(%rbp)
+ 20953 F6FFFF
+ 20954 13c43 89B594F6 movl %esi, -2412(%rbp)
+ 20954 FFFF
+2095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix = 0;
+ 20955 .loc 2 2095 0
+ 20956 13c49 C7855CF9 movl $0, -1700(%rbp)
+ 20956 FFFF0000
+ 20956 0000
+
GAS LISTING /tmp/ccMa7HLZ.s page 641
+
+
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+ 20957 .loc 2 2097 0
+ 20958 13c53 8B855CF9 mov -1700(%rbp), %eax
+ 20958 FFFF
+ 20959 13c59 48C1E004 salq $4, %rax
+ 20960 13c5d 48038598 addq -2408(%rbp), %rax
+ 20960 F6FFFF
+ 20961 13c64 660F6F00 movdqa (%rax), %xmm0
+ 20962 13c68 83855CF9 addl $1, -1700(%rbp)
+ 20962 FFFF01
+ 20963 13c6f 660F6F8D movdqa -2400(%rbp), %xmm1
+ 20963 A0F6FFFF
+ 20964 13c77 F30F7F8D movdqu %xmm1, -1680(%rbp)
+ 20964 70F9FFFF
+ 20965 13c7f F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 20965 60F9FFFF
+ 20966 .LBB2547:
+ 20967 .LBB2548:
+ 20968 .LBB2549:
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 20969 .loc 2 1994 0
+ 20970 13c87 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 20970 70F9FFFF
+ 20971 13c8f F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 20971 D0F6FFFF
+ 20972 .cfi_offset 3, -56
+ 20973 .cfi_offset 12, -48
+ 20974 .cfi_offset 13, -40
+ 20975 .cfi_offset 14, -32
+ 20976 .cfi_offset 15, -24
+ 20977 13c97 E8000000 call KDbgWriterGet at PLT
+ 20977 00
+ 20978 13c9c 4885C0 testq %rax, %rax
+ 20979 13c9f 7479 je .L517
+ 20980 13ca1 BF010000 movl $1, %edi
+ 20980 00
+ 20981 13ca6 E8000000 call KDbgCondToFlag at PLT
+ 20981 00
+ 20982 13cab 4889C6 movq %rax, %rsi
+ 20983 13cae BF100000 movl $16, %edi
+ 20983 00
+ 20984 13cb3 E8000000 call KDbgTestModConds at PLT
+ 20984 00
+ 20985 13cb8 84C0 testb %al, %al
+ 20986 13cba 745E je .L517
+ 20987 13cbc 8B85DCF6 movl -2340(%rbp), %eax
+ 20987 FFFF
+ 20988 13cc2 89C7 movl %eax, %edi
+ 20989 13cc4 E837C3FE call bswap_32
+ 20989 FF
+ 20990 13cc9 4189C5 movl %eax, %r13d
+ 20991 13ccc 8B85D8F6 movl -2344(%rbp), %eax
+ 20991 FFFF
+ 20992 13cd2 89C7 movl %eax, %edi
+ 20993 13cd4 E827C3FE call bswap_32
+ 20993 FF
+ 20994 13cd9 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s page 642
+
+
+ 20995 13cdc 8B85D4F6 movl -2348(%rbp), %eax
+ 20995 FFFF
+ 20996 13ce2 89C7 movl %eax, %edi
+ 20997 13ce4 E817C3FE call bswap_32
+ 20997 FF
+ 20998 13ce9 89C3 movl %eax, %ebx
+ 20999 13ceb 8B85D0F6 movl -2352(%rbp), %eax
+ 20999 FFFF
+ 21000 13cf1 89C7 movl %eax, %edi
+ 21001 13cf3 E808C3FE call bswap_32
+ 21001 FF
+ 21002 13cf8 4589E9 movl %r13d, %r9d
+ 21003 13cfb 4589E0 movl %r12d, %r8d
+ 21004 13cfe 89D9 movl %ebx, %ecx
+ 21005 13d00 89C2 movl %eax, %edx
+ 21006 13d02 488D3500 leaq .LC5(%rip), %rsi
+ 21006 000000
+ 21007 13d09 488D3D00 leaq .LC1(%rip), %rdi
+ 21007 000000
+ 21008 13d10 B8000000 movl $0, %eax
+ 21008 00
+ 21009 13d15 E8000000 call KDbgMsg at PLT
+ 21009 00
+ 21010 .L517:
+ 21011 .LBE2549:
+ 21012 .LBB2550:
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 21013 .loc 2 1996 0
+ 21014 13d1a F30F6F85 movdqu -1696(%rbp), %xmm0
+ 21014 60F9FFFF
+ 21015 13d22 F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 21015 C0F6FFFF
+ 21016 13d2a E8000000 call KDbgWriterGet at PLT
+ 21016 00
+ 21017 13d2f 4885C0 testq %rax, %rax
+ 21018 13d32 7479 je .L519
+ 21019 13d34 BF010000 movl $1, %edi
+ 21019 00
+ 21020 13d39 E8000000 call KDbgCondToFlag at PLT
+ 21020 00
+ 21021 13d3e 4889C6 movq %rax, %rsi
+ 21022 13d41 BF100000 movl $16, %edi
+ 21022 00
+ 21023 13d46 E8000000 call KDbgTestModConds at PLT
+ 21023 00
+ 21024 13d4b 84C0 testb %al, %al
+ 21025 13d4d 745E je .L519
+ 21026 13d4f 8B85CCF6 movl -2356(%rbp), %eax
+ 21026 FFFF
+ 21027 13d55 89C7 movl %eax, %edi
+ 21028 13d57 E8A4C2FE call bswap_32
+ 21028 FF
+ 21029 13d5c 4189C5 movl %eax, %r13d
+ 21030 13d5f 8B85C8F6 movl -2360(%rbp), %eax
+ 21030 FFFF
+ 21031 13d65 89C7 movl %eax, %edi
+ 21032 13d67 E894C2FE call bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s page 643
+
+
+ 21032 FF
+ 21033 13d6c 4189C4 movl %eax, %r12d
+ 21034 13d6f 8B85C4F6 movl -2364(%rbp), %eax
+ 21034 FFFF
+ 21035 13d75 89C7 movl %eax, %edi
+ 21036 13d77 E884C2FE call bswap_32
+ 21036 FF
+ 21037 13d7c 89C3 movl %eax, %ebx
+ 21038 13d7e 8B85C0F6 movl -2368(%rbp), %eax
+ 21038 FFFF
+ 21039 13d84 89C7 movl %eax, %edi
+ 21040 13d86 E875C2FE call bswap_32
+ 21040 FF
+ 21041 13d8b 4589E9 movl %r13d, %r9d
+ 21042 13d8e 4589E0 movl %r12d, %r8d
+ 21043 13d91 89D9 movl %ebx, %ecx
+ 21044 13d93 89C2 movl %eax, %edx
+ 21045 13d95 488D3500 leaq .LC6(%rip), %rsi
+ 21045 000000
+ 21046 13d9c 488D3D00 leaq .LC1(%rip), %rdi
+ 21046 000000
+ 21047 13da3 B8000000 movl $0, %eax
+ 21047 00
+ 21048 13da8 E8000000 call KDbgMsg at PLT
+ 21048 00
+ 21049 .L519:
+ 21050 13dad F30F6F85 movdqu -1680(%rbp), %xmm0
+ 21050 70F9FFFF
+ 21051 13db5 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 21051 90F9FFFF
+ 21052 13dbd F30F6F85 movdqu -1696(%rbp), %xmm0
+ 21052 60F9FFFF
+ 21053 13dc5 F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 21053 80F9FFFF
+ 21054 13dcd F30F6F85 movdqu -1648(%rbp), %xmm0
+ 21054 90F9FFFF
+ 21055 13dd5 F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 21055 B0F9FFFF
+ 21056 13ddd F30F6F85 movdqu -1664(%rbp), %xmm0
+ 21056 80F9FFFF
+ 21057 13de5 F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 21057 A0F9FFFF
+ 21058 .LBE2550:
+ 21059 .LBB2551:
+ 21060 .LBB2552:
+ 21061 .LBB2553:
+ 21062 .LBB2554:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 21063 .loc 2 178 0
+ 21064 13ded F30F6F85 movdqu -1632(%rbp), %xmm0
+ 21064 A0F9FFFF
+ 21065 13df5 F30F6F8D movdqu -1616(%rbp), %xmm1
+ 21065 B0F9FFFF
+ 21066 13dfd 660FEFC1 pxor %xmm1, %xmm0
+ 21067 .LBE2554:
+ 21068 .LBE2553:
+ 21069 .LBE2552:
+
GAS LISTING /tmp/ccMa7HLZ.s page 644
+
+
+ 21070 .LBE2551:
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 21071 .loc 2 1998 0
+ 21072 13e01 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 21072 70F9FFFF
+ 21073 .LBB2555:
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End 1st Round", state);
+ 21074 .loc 2 2000 0
+ 21075 13e09 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 21075 70F9FFFF
+ 21076 13e11 F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 21076 B0F6FFFF
+ 21077 13e19 E8000000 call KDbgWriterGet at PLT
+ 21077 00
+ 21078 13e1e 4885C0 testq %rax, %rax
+ 21079 13e21 7479 je .L521
+ 21080 13e23 BF010000 movl $1, %edi
+ 21080 00
+ 21081 13e28 E8000000 call KDbgCondToFlag at PLT
+ 21081 00
+ 21082 13e2d 4889C6 movq %rax, %rsi
+ 21083 13e30 BF100000 movl $16, %edi
+ 21083 00
+ 21084 13e35 E8000000 call KDbgTestModConds at PLT
+ 21084 00
+ 21085 13e3a 84C0 testb %al, %al
+ 21086 13e3c 745E je .L521
+ 21087 13e3e 8B85BCF6 movl -2372(%rbp), %eax
+ 21087 FFFF
+ 21088 13e44 89C7 movl %eax, %edi
+ 21089 13e46 E8B5C1FE call bswap_32
+ 21089 FF
+ 21090 13e4b 4189C5 movl %eax, %r13d
+ 21091 13e4e 8B85B8F6 movl -2376(%rbp), %eax
+ 21091 FFFF
+ 21092 13e54 89C7 movl %eax, %edi
+ 21093 13e56 E8A5C1FE call bswap_32
+ 21093 FF
+ 21094 13e5b 4189C4 movl %eax, %r12d
+ 21095 13e5e 8B85B4F6 movl -2380(%rbp), %eax
+ 21095 FFFF
+ 21096 13e64 89C7 movl %eax, %edi
+ 21097 13e66 E895C1FE call bswap_32
+ 21097 FF
+ 21098 13e6b 89C3 movl %eax, %ebx
+ 21099 13e6d 8B85B0F6 movl -2384(%rbp), %eax
+ 21099 FFFF
+ 21100 13e73 89C7 movl %eax, %edi
+ 21101 13e75 E886C1FE call bswap_32
+ 21101 FF
+ 21102 13e7a 4589E9 movl %r13d, %r9d
+ 21103 13e7d 4589E0 movl %r12d, %r8d
+ 21104 13e80 89D9 movl %ebx, %ecx
+ 21105 13e82 89C2 movl %eax, %edx
+ 21106 13e84 488D3500 leaq .LC7(%rip), %rsi
+ 21106 000000
+ 21107 13e8b 488D3D00 leaq .LC1(%rip), %rdi
+
GAS LISTING /tmp/ccMa7HLZ.s page 645
+
+
+ 21107 000000
+ 21108 13e92 B8000000 movl $0, %eax
+ 21108 00
+ 21109 13e97 E8000000 call KDbgMsg at PLT
+ 21109 00
+ 21110 .L521:
+ 21111 .LBE2555:
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 21112 .loc 2 2002 0
+ 21113 13e9c F30F6F85 movdqu -1680(%rbp), %xmm0
+ 21113 70F9FFFF
+ 21114 .LBE2548:
+ 21115 .LBE2547:
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+ 21116 .loc 2 2097 0
+ 21117 13ea4 660F7F85 movdqa %xmm0, -2400(%rbp)
+ 21117 A0F6FFFF
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 21118 .loc 2 2099 0
+ 21119 13eac E9BF0F00 jmp .L522
+ 21119 00
+ 21120 .L563:
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+ 21121 .loc 2 2100 0
+ 21122 13eb1 8B855CF9 mov -1700(%rbp), %eax
+ 21122 FFFF
+ 21123 13eb7 48C1E004 salq $4, %rax
+ 21124 13ebb 48038598 addq -2408(%rbp), %rax
+ 21124 F6FFFF
+ 21125 13ec2 660F6F00 movdqa (%rax), %xmm0
+ 21126 13ec6 660F6F8D movdqa -2400(%rbp), %xmm1
+ 21126 A0F6FFFF
+ 21127 13ece F30F7F8D movdqu %xmm1, -1584(%rbp)
+ 21127 D0F9FFFF
+ 21128 13ed6 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 21128 C0F9FFFF
+ 21129 .LBB2556:
+ 21130 .LBB2557:
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 21131 .loc 2 2019 0
+ 21132 13ede F30F6F85 movdqu -1584(%rbp), %xmm0
+ 21132 D0F9FFFF
+ 21133 13ee6 F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 21133 F0F9FFFF
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+ 21134 .loc 2 2020 0
+ 21135 13eee F30F6F85 movdqu -1600(%rbp), %xmm0
+ 21135 C0F9FFFF
+ 21136 13ef6 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 21136 E0F9FFFF
+ 21137 .LBB2558:
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+ 21138 .loc 2 2022 0
+ 21139 13efe F30F6F85 movdqu -1552(%rbp), %xmm0
+ 21139 F0F9FFFF
+ 21140 13f06 F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 21140 30F7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 646
+
+
+ 21141 13f0e E8000000 call KDbgWriterGet at PLT
+ 21141 00
+ 21142 13f13 4885C0 testq %rax, %rax
+ 21143 13f16 7479 je .L524
+ 21144 13f18 BF010000 movl $1, %edi
+ 21144 00
+ 21145 13f1d E8000000 call KDbgCondToFlag at PLT
+ 21145 00
+ 21146 13f22 4889C6 movq %rax, %rsi
+ 21147 13f25 BF100000 movl $16, %edi
+ 21147 00
+ 21148 13f2a E8000000 call KDbgTestModConds at PLT
+ 21148 00
+ 21149 13f2f 84C0 testb %al, %al
+ 21150 13f31 745E je .L524
+ 21151 13f33 8B853CF7 movl -2244(%rbp), %eax
+ 21151 FFFF
+ 21152 13f39 89C7 movl %eax, %edi
+ 21153 13f3b E8C0C0FE call bswap_32
+ 21153 FF
+ 21154 13f40 4189C5 movl %eax, %r13d
+ 21155 13f43 8B8538F7 movl -2248(%rbp), %eax
+ 21155 FFFF
+ 21156 13f49 89C7 movl %eax, %edi
+ 21157 13f4b E8B0C0FE call bswap_32
+ 21157 FF
+ 21158 13f50 4189C4 movl %eax, %r12d
+ 21159 13f53 8B8534F7 movl -2252(%rbp), %eax
+ 21159 FFFF
+ 21160 13f59 89C7 movl %eax, %edi
+ 21161 13f5b E8A0C0FE call bswap_32
+ 21161 FF
+ 21162 13f60 89C3 movl %eax, %ebx
+ 21163 13f62 8B8530F7 movl -2256(%rbp), %eax
+ 21163 FFFF
+ 21164 13f68 89C7 movl %eax, %edi
+ 21165 13f6a E891C0FE call bswap_32
+ 21165 FF
+ 21166 13f6f 4589E9 movl %r13d, %r9d
+ 21167 13f72 4589E0 movl %r12d, %r8d
+ 21168 13f75 89D9 movl %ebx, %ecx
+ 21169 13f77 89C2 movl %eax, %edx
+ 21170 13f79 488D3500 leaq .LC5(%rip), %rsi
+ 21170 000000
+ 21171 13f80 488D3D00 leaq .LC1(%rip), %rdi
+ 21171 000000
+ 21172 13f87 B8000000 movl $0, %eax
+ 21172 00
+ 21173 13f8c E8000000 call KDbgMsg at PLT
+ 21173 00
+ 21174 .L524:
+ 21175 13f91 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 21175 D0F9FFFF
+ 21176 13f99 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 21176 00FAFFFF
+ 21177 13fa1 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 21177 00FAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 647
+
+
+ 21178 13fa9 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 21178 20FAFFFF
+ 21179 13fb1 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 21179 000000
+ 21180 13fb8 48898518 movq %rax, -1512(%rbp)
+ 21180 FAFFFF
+ 21181 .LBE2558:
+ 21182 .LBB2559:
+ 21183 .LBB2560:
+ 21184 .LBB2561:
+ 21185 .LBB2562:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 21186 .loc 2 851 0
+ 21187 13fbf 660F6F05 movdqa vec_00(%rip), %xmm0
+ 21187 00000000
+ 21188 13fc7 F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 21188 40FAFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 21189 .loc 2 854 0
+ 21190 13fcf 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 21190 00000000
+ 21191 13fd7 F30F6F8D movdqu -1504(%rbp), %xmm1
+ 21191 20FAFFFF
+ 21192 13fdf F30F7F8D movdqu %xmm1, -1392(%rbp)
+ 21192 90FAFFFF
+ 21193 13fe7 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 21193 80FAFFFF
+ 21194 .LBB2563:
+ 21195 .LBB2564:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 21196 .loc 2 206 0
+ 21197 13fef F30F6F85 movdqu -1408(%rbp), %xmm0
+ 21197 80FAFFFF
+ 21198 13ff7 F30F6F8D movdqu -1392(%rbp), %xmm1
+ 21198 90FAFFFF
+ 21199 13fff 660FDBC1 pand %xmm1, %xmm0
+ 21200 .LBE2564:
+ 21201 .LBE2563:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 21202 .loc 2 854 0
+ 21203 14003 F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 21203 70FAFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 21204 .loc 2 862 0
+ 21205 1400b 660F6F05 movdqa vec_10(%rip), %xmm0
+ 21205 00000000
+ 21206 14013 F30F6F8D movdqu -1504(%rbp), %xmm1
+ 21206 20FAFFFF
+ 21207 1401b F30F7F8D movdqu %xmm1, -1360(%rbp)
+ 21207 B0FAFFFF
+ 21208 14023 F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 21208 A0FAFFFF
+ 21209 .LBB2565:
+ 21210 .loc 2 2642 0
+ 21211 1402b 0FB685B0 movzbl -1360(%rbp), %eax
+ 21211 FAFFFF
+ 21212 14032 0FB695A0 movzbl -1376(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 648
+
+
+ 21212 FAFFFF
+ 21213 14039 0FB6C0 movzbl %al, %eax
+ 21214 1403c 6689851E movw %ax, -2530(%rbp)
+ 21214 F6FFFF
+ 21215 14043 0FB7851E movzwl -2530(%rbp), %eax
+ 21215 F6FFFF
+ 21216 1404a F6F2 divb %dl
+ 21217 1404c 4189C7 movl %eax, %r15d
+ 21218 1404f 0FB685B1 movzbl -1359(%rbp), %eax
+ 21218 FAFFFF
+ 21219 14056 0FB695A1 movzbl -1375(%rbp), %edx
+ 21219 FAFFFF
+ 21220 1405d 0FB6C0 movzbl %al, %eax
+ 21221 14060 6689851E movw %ax, -2530(%rbp)
+ 21221 F6FFFF
+ 21222 14067 0FB7851E movzwl -2530(%rbp), %eax
+ 21222 F6FFFF
+ 21223 1406e F6F2 divb %dl
+ 21224 14070 88854FF6 movb %al, -2481(%rbp)
+ 21224 FFFF
+ 21225 14076 0FB685B2 movzbl -1358(%rbp), %eax
+ 21225 FAFFFF
+ 21226 1407d 0FB695A2 movzbl -1374(%rbp), %edx
+ 21226 FAFFFF
+ 21227 14084 0FB6C0 movzbl %al, %eax
+ 21228 14087 6689851E movw %ax, -2530(%rbp)
+ 21228 F6FFFF
+ 21229 1408e 0FB7851E movzwl -2530(%rbp), %eax
+ 21229 F6FFFF
+ 21230 14095 F6F2 divb %dl
+ 21231 14097 88854EF6 movb %al, -2482(%rbp)
+ 21231 FFFF
+ 21232 1409d 0FB685B3 movzbl -1357(%rbp), %eax
+ 21232 FAFFFF
+ 21233 140a4 0FB695A3 movzbl -1373(%rbp), %edx
+ 21233 FAFFFF
+ 21234 140ab 0FB6C0 movzbl %al, %eax
+ 21235 140ae 6689851E movw %ax, -2530(%rbp)
+ 21235 F6FFFF
+ 21236 140b5 0FB7851E movzwl -2530(%rbp), %eax
+ 21236 F6FFFF
+ 21237 140bc F6F2 divb %dl
+ 21238 140be 88854DF6 movb %al, -2483(%rbp)
+ 21238 FFFF
+ 21239 140c4 0FB685B4 movzbl -1356(%rbp), %eax
+ 21239 FAFFFF
+ 21240 140cb 0FB695A4 movzbl -1372(%rbp), %edx
+ 21240 FAFFFF
+ 21241 140d2 0FB6C0 movzbl %al, %eax
+ 21242 140d5 6689851E movw %ax, -2530(%rbp)
+ 21242 F6FFFF
+ 21243 140dc 0FB7851E movzwl -2530(%rbp), %eax
+ 21243 F6FFFF
+ 21244 140e3 F6F2 divb %dl
+ 21245 140e5 88854CF6 movb %al, -2484(%rbp)
+ 21245 FFFF
+ 21246 140eb 0FB685B5 movzbl -1355(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 649
+
+
+ 21246 FAFFFF
+ 21247 140f2 0FB695A5 movzbl -1371(%rbp), %edx
+ 21247 FAFFFF
+ 21248 140f9 0FB6C0 movzbl %al, %eax
+ 21249 140fc 6689851E movw %ax, -2530(%rbp)
+ 21249 F6FFFF
+ 21250 14103 0FB7851E movzwl -2530(%rbp), %eax
+ 21250 F6FFFF
+ 21251 1410a F6F2 divb %dl
+ 21252 1410c 4189C1 movl %eax, %r9d
+ 21253 1410f 0FB685B6 movzbl -1354(%rbp), %eax
+ 21253 FAFFFF
+ 21254 14116 0FB695A6 movzbl -1370(%rbp), %edx
+ 21254 FAFFFF
+ 21255 1411d 0FB6C0 movzbl %al, %eax
+ 21256 14120 6689851E movw %ax, -2530(%rbp)
+ 21256 F6FFFF
+ 21257 14127 0FB7851E movzwl -2530(%rbp), %eax
+ 21257 F6FFFF
+ 21258 1412e F6F2 divb %dl
+ 21259 14130 89C7 movl %eax, %edi
+ 21260 14132 0FB685B7 movzbl -1353(%rbp), %eax
+ 21260 FAFFFF
+ 21261 14139 0FB695A7 movzbl -1369(%rbp), %edx
+ 21261 FAFFFF
+ 21262 14140 0FB6C0 movzbl %al, %eax
+ 21263 14143 6689851E movw %ax, -2530(%rbp)
+ 21263 F6FFFF
+ 21264 1414a 0FB7851E movzwl -2530(%rbp), %eax
+ 21264 F6FFFF
+ 21265 14151 F6F2 divb %dl
+ 21266 14153 89C3 movl %eax, %ebx
+ 21267 14155 0FB685B8 movzbl -1352(%rbp), %eax
+ 21267 FAFFFF
+ 21268 1415c 0FB695A8 movzbl -1368(%rbp), %edx
+ 21268 FAFFFF
+ 21269 14163 0FB6C0 movzbl %al, %eax
+ 21270 14166 6689851E movw %ax, -2530(%rbp)
+ 21270 F6FFFF
+ 21271 1416d 0FB7851E movzwl -2530(%rbp), %eax
+ 21271 F6FFFF
+ 21272 14174 F6F2 divb %dl
+ 21273 14176 4189C2 movl %eax, %r10d
+ 21274 14179 0FB685B9 movzbl -1351(%rbp), %eax
+ 21274 FAFFFF
+ 21275 14180 0FB695A9 movzbl -1367(%rbp), %edx
+ 21275 FAFFFF
+ 21276 14187 0FB6C0 movzbl %al, %eax
+ 21277 1418a 6689851E movw %ax, -2530(%rbp)
+ 21277 F6FFFF
+ 21278 14191 0FB7851E movzwl -2530(%rbp), %eax
+ 21278 F6FFFF
+ 21279 14198 F6F2 divb %dl
+ 21280 1419a 4189C3 movl %eax, %r11d
+ 21281 1419d 0FB685BA movzbl -1350(%rbp), %eax
+ 21281 FAFFFF
+ 21282 141a4 0FB695AA movzbl -1366(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 650
+
+
+ 21282 FAFFFF
+ 21283 141ab 0FB6C0 movzbl %al, %eax
+ 21284 141ae 6689851E movw %ax, -2530(%rbp)
+ 21284 F6FFFF
+ 21285 141b5 0FB7851E movzwl -2530(%rbp), %eax
+ 21285 F6FFFF
+ 21286 141bc F6F2 divb %dl
+ 21287 141be 4189C4 movl %eax, %r12d
+ 21288 141c1 0FB685BB movzbl -1349(%rbp), %eax
+ 21288 FAFFFF
+ 21289 141c8 0FB695AB movzbl -1365(%rbp), %edx
+ 21289 FAFFFF
+ 21290 141cf 0FB6C0 movzbl %al, %eax
+ 21291 141d2 6689851E movw %ax, -2530(%rbp)
+ 21291 F6FFFF
+ 21292 141d9 0FB7851E movzwl -2530(%rbp), %eax
+ 21292 F6FFFF
+ 21293 141e0 F6F2 divb %dl
+ 21294 141e2 4189C5 movl %eax, %r13d
+ 21295 141e5 0FB685BC movzbl -1348(%rbp), %eax
+ 21295 FAFFFF
+ 21296 141ec 0FB695AC movzbl -1364(%rbp), %edx
+ 21296 FAFFFF
+ 21297 141f3 0FB6C0 movzbl %al, %eax
+ 21298 141f6 6689851E movw %ax, -2530(%rbp)
+ 21298 F6FFFF
+ 21299 141fd 0FB7851E movzwl -2530(%rbp), %eax
+ 21299 F6FFFF
+ 21300 14204 F6F2 divb %dl
+ 21301 14206 4189C6 movl %eax, %r14d
+ 21302 14209 0FB685BD movzbl -1347(%rbp), %eax
+ 21302 FAFFFF
+ 21303 14210 0FB695AD movzbl -1363(%rbp), %edx
+ 21303 FAFFFF
+ 21304 14217 0FB6C0 movzbl %al, %eax
+ 21305 1421a 6689851E movw %ax, -2530(%rbp)
+ 21305 F6FFFF
+ 21306 14221 0FB7851E movzwl -2530(%rbp), %eax
+ 21306 F6FFFF
+ 21307 14228 F6F2 divb %dl
+ 21308 1422a 4189C0 movl %eax, %r8d
+ 21309 1422d 0FB685BE movzbl -1346(%rbp), %eax
+ 21309 FAFFFF
+ 21310 14234 0FB695AE movzbl -1362(%rbp), %edx
+ 21310 FAFFFF
+ 21311 1423b 0FB6C0 movzbl %al, %eax
+ 21312 1423e 6689851E movw %ax, -2530(%rbp)
+ 21312 F6FFFF
+ 21313 14245 0FB7851E movzwl -2530(%rbp), %eax
+ 21313 F6FFFF
+ 21314 1424c F6F2 divb %dl
+ 21315 1424e 89C6 movl %eax, %esi
+ 21316 14250 0FB685BF movzbl -1345(%rbp), %eax
+ 21316 FAFFFF
+ 21317 14257 0FB695AF movzbl -1361(%rbp), %edx
+ 21317 FAFFFF
+ 21318 1425e 0FB6C0 movzbl %al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 651
+
+
+ 21319 14261 6689851E movw %ax, -2530(%rbp)
+ 21319 F6FFFF
+ 21320 14268 0FB7851E movzwl -2530(%rbp), %eax
+ 21320 F6FFFF
+ 21321 1426f F6F2 divb %dl
+ 21322 14271 89C1 movl %eax, %ecx
+ 21323 .LBB2566:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 21324 .loc 2 346 0
+ 21325 14273 0FB6D3 movzbl %bl, %edx
+ 21326 14276 400FB6C7 movzbl %dil, %eax
+ 21327 1427a 48C1E208 salq $8, %rdx
+ 21328 1427e 4809C2 orq %rax, %rdx
+ 21329 14281 410FB6C1 movzbl %r9b, %eax
+ 21330 14285 48C1E208 salq $8, %rdx
+ 21331 14289 4809C2 orq %rax, %rdx
+ 21332 1428c 0FB6854C movzbl -2484(%rbp), %eax
+ 21332 F6FFFF
+ 21333 14293 48C1E208 salq $8, %rdx
+ 21334 14297 4809C2 orq %rax, %rdx
+ 21335 1429a 0FB6854D movzbl -2483(%rbp), %eax
+ 21335 F6FFFF
+ 21336 142a1 48C1E208 salq $8, %rdx
+ 21337 142a5 4809C2 orq %rax, %rdx
+ 21338 142a8 0FB6854E movzbl -2482(%rbp), %eax
+ 21338 F6FFFF
+ 21339 142af 48C1E208 salq $8, %rdx
+ 21340 142b3 4809C2 orq %rax, %rdx
+ 21341 142b6 0FB6854F movzbl -2481(%rbp), %eax
+ 21341 F6FFFF
+ 21342 142bd 48C1E208 salq $8, %rdx
+ 21343 142c1 4809C2 orq %rax, %rdx
+ 21344 142c4 410FB6C7 movzbl %r15b, %eax
+ 21345 142c8 48C1E208 salq $8, %rdx
+ 21346 142cc 4809C2 orq %rax, %rdx
+ 21347 142cf 0FB6C1 movzbl %cl, %eax
+ 21348 142d2 400FB6CE movzbl %sil, %ecx
+ 21349 142d6 48C1E008 salq $8, %rax
+ 21350 142da 4809C8 orq %rcx, %rax
+ 21351 142dd 410FB6C8 movzbl %r8b, %ecx
+ 21352 142e1 48C1E008 salq $8, %rax
+ 21353 142e5 4809C8 orq %rcx, %rax
+ 21354 142e8 410FB6CE movzbl %r14b, %ecx
+ 21355 142ec 48C1E008 salq $8, %rax
+ 21356 142f0 4809C8 orq %rcx, %rax
+ 21357 142f3 410FB6CD movzbl %r13b, %ecx
+ 21358 142f7 48C1E008 salq $8, %rax
+ 21359 142fb 4809C8 orq %rcx, %rax
+ 21360 142fe 410FB6CC movzbl %r12b, %ecx
+ 21361 14302 48C1E008 salq $8, %rax
+ 21362 14306 4809C8 orq %rcx, %rax
+ 21363 14309 410FB6CB movzbl %r11b, %ecx
+ 21364 1430d 48C1E008 salq $8, %rax
+ 21365 14311 4809C8 orq %rcx, %rax
+ 21366 14314 410FB6CA movzbl %r10b, %ecx
+ 21367 14318 48C1E008 salq $8, %rax
+ 21368 1431c 4809C8 orq %rcx, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 652
+
+
+ 21369 1431f 48899530 movq %rdx, -2512(%rbp)
+ 21369 F6FFFF
+ 21370 14326 48898538 movq %rax, -2504(%rbp)
+ 21370 F6FFFF
+ 21371 1432d 660F6F85 movdqa -2512(%rbp), %xmm0
+ 21371 30F6FFFF
+ 21372 .LBE2566:
+ 21373 .LBE2565:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 21374 .loc 2 862 0
+ 21375 14335 F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 21375 60FAFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 21376 .loc 2 866 0
+ 21377 1433d C7853CFA movl $0, -1476(%rbp)
+ 21377 FFFF0000
+ 21377 0000
+ 21378 14347 E9860200 jmp .L525
+ 21378 00
+ 21379 .L534:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 21380 .loc 2 868 0
+ 21381 1434c 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 21381 00000000
+ 21382 14354 F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 21382 D0FAFFFF
+ 21383 1435c F30F6F85 movdqu -1440(%rbp), %xmm0
+ 21383 60FAFFFF
+ 21384 14364 F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 21384 C0FAFFFF
+ 21385 .LBB2567:
+ 21386 .LBB2568:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 21387 .loc 2 380 0
+ 21388 1436c F30F6F85 movdqu -1328(%rbp), %xmm0
+ 21388 D0FAFFFF
+ 21389 14374 F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 21389 50F7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 21390 .loc 2 381 0
+ 21391 1437c F30F6F85 movdqu -1344(%rbp), %xmm0
+ 21391 C0FAFFFF
+ 21392 14384 F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 21392 40F7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21393 .loc 2 383 0
+ 21394 1438c C785ECFA movl $0, -1300(%rbp)
+ 21394 FFFF0000
+ 21394 0000
+ 21395 14396 EB5C jmp .L526
+ 21396 .L529:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 21397 .loc 2 385 0
+ 21398 14398 8B85ECFA movl -1300(%rbp), %eax
+ 21398 FFFF
+ 21399 1439e 89C0 mov %eax, %eax
+ 21400 143a0 0FB68405 movzbl -2240(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 653
+
+
+ 21400 40F7FFFF
+ 21401 143a8 84C0 testb %al, %al
+ 21402 143aa 7912 jns .L527
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 21403 .loc 2 386 0
+ 21404 143ac 8B85ECFA movl -1300(%rbp), %eax
+ 21404 FFFF
+ 21405 143b2 89C0 mov %eax, %eax
+ 21406 143b4 C6840560 movb $0, -2208(%rbp,%rax)
+ 21406 F7FFFF00
+ 21407 143bc EB2F jmp .L528
+ 21408 .L527:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21409 .loc 2 388 0
+ 21410 143be 8B8DECFA movl -1300(%rbp), %ecx
+ 21410 FFFF
+ 21411 143c4 8B85ECFA movl -1300(%rbp), %eax
+ 21411 FFFF
+ 21412 143ca 89C0 mov %eax, %eax
+ 21413 143cc 0FB68405 movzbl -2240(%rbp,%rax), %eax
+ 21413 40F7FFFF
+ 21414 143d4 0FB6C0 movzbl %al, %eax
+ 21415 143d7 83E00F andl $15, %eax
+ 21416 143da 4898 cltq
+ 21417 143dc 0FB69405 movzbl -2224(%rbp,%rax), %edx
+ 21417 50F7FFFF
+ 21418 143e4 89C8 mov %ecx, %eax
+ 21419 143e6 88940560 movb %dl, -2208(%rbp,%rax)
+ 21419 F7FFFF
+ 21420 .L528:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21421 .loc 2 383 0
+ 21422 143ed 8385ECFA addl $1, -1300(%rbp)
+ 21422 FFFF01
+ 21423 .L526:
+ 21424 143f4 83BDECFA cmpl $15, -1300(%rbp)
+ 21424 FFFF0F
+ 21425 143fb 769B jbe .L529
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 21426 .loc 2 391 0
+ 21427 143fd F30F6F85 movdqu -2208(%rbp), %xmm0
+ 21427 60F7FFFF
+ 21428 .LBE2568:
+ 21429 .LBE2567:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 21430 .loc 2 868 0
+ 21431 14405 F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 21431 50FAFFFF
+ 21432 1440d F30F6F85 movdqu -1424(%rbp), %xmm0
+ 21432 70FAFFFF
+ 21433 14415 F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 21433 00FBFFFF
+ 21434 1441d F30F6F85 movdqu -1456(%rbp), %xmm0
+ 21434 50FAFFFF
+ 21435 14425 F30F7F85 movdqu %xmm0, -1296(%rbp)
+ 21435 F0FAFFFF
+ 21436 .LBB2569:
+
GAS LISTING /tmp/ccMa7HLZ.s page 654
+
+
+ 21437 .LBB2570:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 21438 .loc 2 234 0
+ 21439 1442d F30F6F85 movdqu -1296(%rbp), %xmm0
+ 21439 F0FAFFFF
+ 21440 14435 F30F6F8D movdqu -1280(%rbp), %xmm1
+ 21440 00FBFFFF
+ 21441 1443d 660FEBC1 por %xmm1, %xmm0
+ 21442 .LBE2570:
+ 21443 .LBE2569:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 21444 .loc 2 870 0
+ 21445 14441 F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 21445 50FAFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 21446 .loc 2 872 0
+ 21447 14449 8B853CFA mov -1476(%rbp), %eax
+ 21447 FFFF
+ 21448 1444f 48C1E004 salq $4, %rax
+ 21449 14453 48038518 addq -1512(%rbp), %rax
+ 21449 FAFFFF
+ 21450 1445a 660F6F00 movdqa (%rax), %xmm0
+ 21451 1445e F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 21451 20FBFFFF
+ 21452 14466 F30F6F85 movdqu -1456(%rbp), %xmm0
+ 21452 50FAFFFF
+ 21453 1446e F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 21453 10FBFFFF
+ 21454 .LBB2571:
+ 21455 .LBB2572:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 21456 .loc 2 380 0
+ 21457 14476 F30F6F85 movdqu -1248(%rbp), %xmm0
+ 21457 20FBFFFF
+ 21458 1447e F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 21458 80F7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 21459 .loc 2 381 0
+ 21460 14486 F30F6F85 movdqu -1264(%rbp), %xmm0
+ 21460 10FBFFFF
+ 21461 1448e F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 21461 70F7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21462 .loc 2 383 0
+ 21463 14496 C7853CFB movl $0, -1220(%rbp)
+ 21463 FFFF0000
+ 21463 0000
+ 21464 144a0 EB5C jmp .L530
+ 21465 .L533:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 21466 .loc 2 385 0
+ 21467 144a2 8B853CFB movl -1220(%rbp), %eax
+ 21467 FFFF
+ 21468 144a8 89C0 mov %eax, %eax
+ 21469 144aa 0FB68405 movzbl -2192(%rbp,%rax), %eax
+ 21469 70F7FFFF
+ 21470 144b2 84C0 testb %al, %al
+
GAS LISTING /tmp/ccMa7HLZ.s page 655
+
+
+ 21471 144b4 7912 jns .L531
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 21472 .loc 2 386 0
+ 21473 144b6 8B853CFB movl -1220(%rbp), %eax
+ 21473 FFFF
+ 21474 144bc 89C0 mov %eax, %eax
+ 21475 144be C6840590 movb $0, -2160(%rbp,%rax)
+ 21475 F7FFFF00
+ 21476 144c6 EB2F jmp .L532
+ 21477 .L531:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21478 .loc 2 388 0
+ 21479 144c8 8B8D3CFB movl -1220(%rbp), %ecx
+ 21479 FFFF
+ 21480 144ce 8B853CFB movl -1220(%rbp), %eax
+ 21480 FFFF
+ 21481 144d4 89C0 mov %eax, %eax
+ 21482 144d6 0FB68405 movzbl -2192(%rbp,%rax), %eax
+ 21482 70F7FFFF
+ 21483 144de 0FB6C0 movzbl %al, %eax
+ 21484 144e1 83E00F andl $15, %eax
+ 21485 144e4 4898 cltq
+ 21486 144e6 0FB69405 movzbl -2176(%rbp,%rax), %edx
+ 21486 80F7FFFF
+ 21487 144ee 89C8 mov %ecx, %eax
+ 21488 144f0 88940590 movb %dl, -2160(%rbp,%rax)
+ 21488 F7FFFF
+ 21489 .L532:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21490 .loc 2 383 0
+ 21491 144f7 83853CFB addl $1, -1220(%rbp)
+ 21491 FFFF01
+ 21492 .L530:
+ 21493 144fe 83BD3CFB cmpl $15, -1220(%rbp)
+ 21493 FFFF0F
+ 21494 14505 769B jbe .L533
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 21495 .loc 2 391 0
+ 21496 14507 F30F6F85 movdqu -2160(%rbp), %xmm0
+ 21496 90F7FFFF
+ 21497 .LBE2572:
+ 21498 .LBE2571:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 21499 .loc 2 872 0
+ 21500 1450f F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 21500 50FAFFFF
+ 21501 14517 F30F6F85 movdqu -1472(%rbp), %xmm0
+ 21501 40FAFFFF
+ 21502 1451f F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 21502 50FBFFFF
+ 21503 14527 F30F6F85 movdqu -1456(%rbp), %xmm0
+ 21503 50FAFFFF
+ 21504 1452f F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 21504 40FBFFFF
+ 21505 .LBB2573:
+ 21506 .LBB2574:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+
GAS LISTING /tmp/ccMa7HLZ.s page 656
+
+
+ 21507 .loc 2 234 0
+ 21508 14537 F30F6F85 movdqu -1216(%rbp), %xmm0
+ 21508 40FBFFFF
+ 21509 1453f F30F6F8D movdqu -1200(%rbp), %xmm1
+ 21509 50FBFFFF
+ 21510 14547 660FEBC1 por %xmm1, %xmm0
+ 21511 .LBE2574:
+ 21512 .LBE2573:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 21513 .loc 2 874 0
+ 21514 1454b F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 21514 40FAFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 21515 .loc 2 876 0
+ 21516 14553 660F6F05 movdqa vec_01(%rip), %xmm0
+ 21516 00000000
+ 21517 1455b F30F6F8D movdqu -1440(%rbp), %xmm1
+ 21517 60FAFFFF
+ 21518 14563 F30F7F8D movdqu %xmm1, -1168(%rbp)
+ 21518 70FBFFFF
+ 21519 1456b F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 21519 60FBFFFF
+ 21520 .LBB2575:
+ 21521 .LBB2576:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 21522 .loc 2 290 0
+ 21523 14573 F30F6F8D movdqu -1184(%rbp), %xmm1
+ 21523 60FBFFFF
+ 21524 1457b F30F6F85 movdqu -1168(%rbp), %xmm0
+ 21524 70FBFFFF
+ 21525 14583 660FF8C1 psubb %xmm1, %xmm0
+ 21526 .LBE2576:
+ 21527 .LBE2575:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 21528 .loc 2 876 0
+ 21529 14587 F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 21529 60FAFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 21530 .loc 2 878 0
+ 21531 1458f 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 21531 00000000
+ 21532 14597 F30F6F8D movdqu -1440(%rbp), %xmm1
+ 21532 60FAFFFF
+ 21533 1459f F30F7F8D movdqu %xmm1, -1136(%rbp)
+ 21533 90FBFFFF
+ 21534 145a7 F30F7F85 movdqu %xmm0, -1152(%rbp)
+ 21534 80FBFFFF
+ 21535 .LBB2577:
+ 21536 .LBB2578:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 21537 .loc 2 206 0
+ 21538 145af F30F6F85 movdqu -1152(%rbp), %xmm0
+ 21538 80FBFFFF
+ 21539 145b7 F30F6F8D movdqu -1136(%rbp), %xmm1
+ 21539 90FBFFFF
+ 21540 145bf 660FDBC1 pand %xmm1, %xmm0
+ 21541 .LBE2578:
+
GAS LISTING /tmp/ccMa7HLZ.s page 657
+
+
+ 21542 .LBE2577:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 21543 .loc 2 878 0
+ 21544 145c3 F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 21544 60FAFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 21545 .loc 2 866 0
+ 21546 145cb 83853CFA addl $1, -1476(%rbp)
+ 21546 FFFF01
+ 21547 .L525:
+ 21548 145d2 83BD3CFA cmpl $15, -1476(%rbp)
+ 21548 FFFF0F
+ 21549 145d9 0F866DFD jbe .L534
+ 21549 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 21550 .loc 2 882 0
+ 21551 145df F30F6F85 movdqu -1472(%rbp), %xmm0
+ 21551 40FAFFFF
+ 21552 .LBE2562:
+ 21553 .LBE2561:
+ 21554 .LBE2560:
+ 21555 .LBE2559:
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+ 21556 .loc 2 2029 0
+ 21557 145e7 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 21557 D0F9FFFF
+ 21558 .LBB2579:
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+ 21559 .loc 2 2031 0
+ 21560 145ef F30F6F85 movdqu -1584(%rbp), %xmm0
+ 21560 D0F9FFFF
+ 21561 145f7 F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 21561 20F7FFFF
+ 21562 145ff E8000000 call KDbgWriterGet at PLT
+ 21562 00
+ 21563 14604 4885C0 testq %rax, %rax
+ 21564 14607 7479 je .L536
+ 21565 14609 BF010000 movl $1, %edi
+ 21565 00
+ 21566 1460e E8000000 call KDbgCondToFlag at PLT
+ 21566 00
+ 21567 14613 4889C6 movq %rax, %rsi
+ 21568 14616 BF100000 movl $16, %edi
+ 21568 00
+ 21569 1461b E8000000 call KDbgTestModConds at PLT
+ 21569 00
+ 21570 14620 84C0 testb %al, %al
+ 21571 14622 745E je .L536
+ 21572 14624 8B852CF7 movl -2260(%rbp), %eax
+ 21572 FFFF
+ 21573 1462a 89C7 movl %eax, %edi
+ 21574 1462c E8CFB9FE call bswap_32
+ 21574 FF
+ 21575 14631 4189C5 movl %eax, %r13d
+ 21576 14634 8B8528F7 movl -2264(%rbp), %eax
+ 21576 FFFF
+ 21577 1463a 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 658
+
+
+ 21578 1463c E8BFB9FE call bswap_32
+ 21578 FF
+ 21579 14641 4189C4 movl %eax, %r12d
+ 21580 14644 8B8524F7 movl -2268(%rbp), %eax
+ 21580 FFFF
+ 21581 1464a 89C7 movl %eax, %edi
+ 21582 1464c E8AFB9FE call bswap_32
+ 21582 FF
+ 21583 14651 89C3 movl %eax, %ebx
+ 21584 14653 8B8520F7 movl -2272(%rbp), %eax
+ 21584 FFFF
+ 21585 14659 89C7 movl %eax, %edi
+ 21586 1465b E8A0B9FE call bswap_32
+ 21586 FF
+ 21587 14660 4589E9 movl %r13d, %r9d
+ 21588 14663 4589E0 movl %r12d, %r8d
+ 21589 14666 89D9 movl %ebx, %ecx
+ 21590 14668 89C2 movl %eax, %edx
+ 21591 1466a 488D3500 leaq .LC8(%rip), %rsi
+ 21591 000000
+ 21592 14671 488D3D00 leaq .LC1(%rip), %rdi
+ 21592 000000
+ 21593 14678 B8000000 movl $0, %eax
+ 21593 00
+ 21594 1467d E8000000 call KDbgMsg at PLT
+ 21594 00
+ 21595 .L536:
+ 21596 14682 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 21596 D0F9FFFF
+ 21597 1468a F30F7F85 movdqu %xmm0, -1120(%rbp)
+ 21597 A0FBFFFF
+ 21598 .LBE2579:
+ 21599 .LBB2580:
+ 21600 .LBB2581:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21601 .loc 2 581 0
+ 21602 14692 660F6F05 movdqa ShiftRowTable.6741(%rip), %xmm0
+ 21602 00000000
+ 21603 1469a F30F6F8D movdqu -1120(%rbp), %xmm1
+ 21603 A0FBFFFF
+ 21604 146a2 F30F7F8D movdqu %xmm1, -1088(%rbp)
+ 21604 C0FBFFFF
+ 21605 146aa F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 21605 B0FBFFFF
+ 21606 .LBB2582:
+ 21607 .LBB2583:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 21608 .loc 2 380 0
+ 21609 146b2 F30F6F85 movdqu -1088(%rbp), %xmm0
+ 21609 C0FBFFFF
+ 21610 146ba F30F7F85 movdqu %xmm0, -2128(%rbp)
+ 21610 B0F7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 21611 .loc 2 381 0
+ 21612 146c2 F30F6F85 movdqu -1104(%rbp), %xmm0
+ 21612 B0FBFFFF
+ 21613 146ca F30F7F85 movdqu %xmm0, -2144(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 659
+
+
+ 21613 A0F7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21614 .loc 2 383 0
+ 21615 146d2 C785DCFB movl $0, -1060(%rbp)
+ 21615 FFFF0000
+ 21615 0000
+ 21616 146dc EB5C jmp .L537
+ 21617 .L540:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 21618 .loc 2 385 0
+ 21619 146de 8B85DCFB movl -1060(%rbp), %eax
+ 21619 FFFF
+ 21620 146e4 89C0 mov %eax, %eax
+ 21621 146e6 0FB68405 movzbl -2144(%rbp,%rax), %eax
+ 21621 A0F7FFFF
+ 21622 146ee 84C0 testb %al, %al
+ 21623 146f0 7912 jns .L538
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 21624 .loc 2 386 0
+ 21625 146f2 8B85DCFB movl -1060(%rbp), %eax
+ 21625 FFFF
+ 21626 146f8 89C0 mov %eax, %eax
+ 21627 146fa C68405C0 movb $0, -2112(%rbp,%rax)
+ 21627 F7FFFF00
+ 21628 14702 EB2F jmp .L539
+ 21629 .L538:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21630 .loc 2 388 0
+ 21631 14704 8B8DDCFB movl -1060(%rbp), %ecx
+ 21631 FFFF
+ 21632 1470a 8B85DCFB movl -1060(%rbp), %eax
+ 21632 FFFF
+ 21633 14710 89C0 mov %eax, %eax
+ 21634 14712 0FB68405 movzbl -2144(%rbp,%rax), %eax
+ 21634 A0F7FFFF
+ 21635 1471a 0FB6C0 movzbl %al, %eax
+ 21636 1471d 83E00F andl $15, %eax
+ 21637 14720 4898 cltq
+ 21638 14722 0FB69405 movzbl -2128(%rbp,%rax), %edx
+ 21638 B0F7FFFF
+ 21639 1472a 89C8 mov %ecx, %eax
+ 21640 1472c 889405C0 movb %dl, -2112(%rbp,%rax)
+ 21640 F7FFFF
+ 21641 .L539:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21642 .loc 2 383 0
+ 21643 14733 8385DCFB addl $1, -1060(%rbp)
+ 21643 FFFF01
+ 21644 .L537:
+ 21645 1473a 83BDDCFB cmpl $15, -1060(%rbp)
+ 21645 FFFF0F
+ 21646 14741 769B jbe .L540
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 21647 .loc 2 391 0
+ 21648 14743 F30F6F85 movdqu -2112(%rbp), %xmm0
+ 21648 C0F7FFFF
+ 21649 .LBE2583:
+
GAS LISTING /tmp/ccMa7HLZ.s page 660
+
+
+ 21650 .LBE2582:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21651 .loc 2 581 0
+ 21652 1474b F30F7F85 movdqu %xmm0, -1120(%rbp)
+ 21652 A0FBFFFF
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 21653 .loc 2 582 0
+ 21654 14753 F30F6F85 movdqu -1120(%rbp), %xmm0
+ 21654 A0FBFFFF
+ 21655 .LBE2581:
+ 21656 .LBE2580:
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+ 21657 .loc 2 2033 0
+ 21658 1475b F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 21658 D0F9FFFF
+ 21659 .LBB2584:
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+ 21660 .loc 2 2035 0
+ 21661 14763 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 21661 D0F9FFFF
+ 21662 1476b F30F7F85 movdqu %xmm0, -2288(%rbp)
+ 21662 10F7FFFF
+ 21663 14773 E8000000 call KDbgWriterGet at PLT
+ 21663 00
+ 21664 14778 4885C0 testq %rax, %rax
+ 21665 1477b 7479 je .L542
+ 21666 1477d BF010000 movl $1, %edi
+ 21666 00
+ 21667 14782 E8000000 call KDbgCondToFlag at PLT
+ 21667 00
+ 21668 14787 4889C6 movq %rax, %rsi
+ 21669 1478a BF100000 movl $16, %edi
+ 21669 00
+ 21670 1478f E8000000 call KDbgTestModConds at PLT
+ 21670 00
+ 21671 14794 84C0 testb %al, %al
+ 21672 14796 745E je .L542
+ 21673 14798 8B851CF7 movl -2276(%rbp), %eax
+ 21673 FFFF
+ 21674 1479e 89C7 movl %eax, %edi
+ 21675 147a0 E85BB8FE call bswap_32
+ 21675 FF
+ 21676 147a5 4189C5 movl %eax, %r13d
+ 21677 147a8 8B8518F7 movl -2280(%rbp), %eax
+ 21677 FFFF
+ 21678 147ae 89C7 movl %eax, %edi
+ 21679 147b0 E84BB8FE call bswap_32
+ 21679 FF
+ 21680 147b5 4189C4 movl %eax, %r12d
+ 21681 147b8 8B8514F7 movl -2284(%rbp), %eax
+ 21681 FFFF
+ 21682 147be 89C7 movl %eax, %edi
+ 21683 147c0 E83BB8FE call bswap_32
+ 21683 FF
+ 21684 147c5 89C3 movl %eax, %ebx
+ 21685 147c7 8B8510F7 movl -2288(%rbp), %eax
+ 21685 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 661
+
+
+ 21686 147cd 89C7 movl %eax, %edi
+ 21687 147cf E82CB8FE call bswap_32
+ 21687 FF
+ 21688 147d4 4589E9 movl %r13d, %r9d
+ 21689 147d7 4589E0 movl %r12d, %r8d
+ 21690 147da 89D9 movl %ebx, %ecx
+ 21691 147dc 89C2 movl %eax, %edx
+ 21692 147de 488D3500 leaq .LC9(%rip), %rsi
+ 21692 000000
+ 21693 147e5 488D3D00 leaq .LC1(%rip), %rdi
+ 21693 000000
+ 21694 147ec B8000000 movl $0, %eax
+ 21694 00
+ 21695 147f1 E8000000 call KDbgMsg at PLT
+ 21695 00
+ 21696 .L542:
+ 21697 147f6 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 21697 D0F9FFFF
+ 21698 147fe F30F7F85 movdqu %xmm0, -1056(%rbp)
+ 21698 E0FBFFFF
+ 21699 14806 F30F6F85 movdqu -1056(%rbp), %xmm0
+ 21699 E0FBFFFF
+ 21700 1480e F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 21700 00FCFFFF
+ 21701 .LBE2584:
+ 21702 .LBB2585:
+ 21703 .LBB2586:
+ 21704 .LBB2587:
+ 21705 .LBB2588:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21706 .loc 2 667 0
+ 21707 14816 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 21707 00000000
+ 21708 1481e F30F6F8D movdqu -1024(%rbp), %xmm1
+ 21708 00FCFFFF
+ 21709 14826 F30F7F8D movdqu %xmm1, -992(%rbp)
+ 21709 20FCFFFF
+ 21710 1482e F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 21710 10FCFFFF
+ 21711 .LBB2589:
+ 21712 .LBB2590:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 21713 .loc 2 380 0
+ 21714 14836 F30F6F85 movdqu -992(%rbp), %xmm0
+ 21714 20FCFFFF
+ 21715 1483e F30F7F85 movdqu %xmm0, -2064(%rbp)
+ 21715 F0F7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 21716 .loc 2 381 0
+ 21717 14846 F30F6F85 movdqu -1008(%rbp), %xmm0
+ 21717 10FCFFFF
+ 21718 1484e F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 21718 E0F7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21719 .loc 2 383 0
+ 21720 14856 C7853CFC movl $0, -964(%rbp)
+ 21720 FFFF0000
+
GAS LISTING /tmp/ccMa7HLZ.s page 662
+
+
+ 21720 0000
+ 21721 14860 EB5C jmp .L543
+ 21722 .L546:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 21723 .loc 2 385 0
+ 21724 14862 8B853CFC movl -964(%rbp), %eax
+ 21724 FFFF
+ 21725 14868 89C0 mov %eax, %eax
+ 21726 1486a 0FB68405 movzbl -2080(%rbp,%rax), %eax
+ 21726 E0F7FFFF
+ 21727 14872 84C0 testb %al, %al
+ 21728 14874 7912 jns .L544
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 21729 .loc 2 386 0
+ 21730 14876 8B853CFC movl -964(%rbp), %eax
+ 21730 FFFF
+ 21731 1487c 89C0 mov %eax, %eax
+ 21732 1487e C6840500 movb $0, -2048(%rbp,%rax)
+ 21732 F8FFFF00
+ 21733 14886 EB2F jmp .L545
+ 21734 .L544:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21735 .loc 2 388 0
+ 21736 14888 8B8D3CFC movl -964(%rbp), %ecx
+ 21736 FFFF
+ 21737 1488e 8B853CFC movl -964(%rbp), %eax
+ 21737 FFFF
+ 21738 14894 89C0 mov %eax, %eax
+ 21739 14896 0FB68405 movzbl -2080(%rbp,%rax), %eax
+ 21739 E0F7FFFF
+ 21740 1489e 0FB6C0 movzbl %al, %eax
+ 21741 148a1 83E00F andl $15, %eax
+ 21742 148a4 4898 cltq
+ 21743 148a6 0FB69405 movzbl -2064(%rbp,%rax), %edx
+ 21743 F0F7FFFF
+ 21744 148ae 89C8 mov %ecx, %eax
+ 21745 148b0 88940500 movb %dl, -2048(%rbp,%rax)
+ 21745 F8FFFF
+ 21746 .L545:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21747 .loc 2 383 0
+ 21748 148b7 83853CFC addl $1, -964(%rbp)
+ 21748 FFFF01
+ 21749 .L543:
+ 21750 148be 83BD3CFC cmpl $15, -964(%rbp)
+ 21750 FFFF0F
+ 21751 148c5 769B jbe .L546
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 21752 .loc 2 391 0
+ 21753 148c7 F30F6F85 movdqu -2048(%rbp), %xmm0
+ 21753 00F8FFFF
+ 21754 .LBE2590:
+ 21755 .LBE2589:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21756 .loc 2 667 0
+ 21757 148cf F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 21757 00FCFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 663
+
+
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 21758 .loc 2 668 0
+ 21759 148d7 F30F6F85 movdqu -1024(%rbp), %xmm0
+ 21759 00FCFFFF
+ 21760 .LBE2588:
+ 21761 .LBE2587:
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(RotBytesLeft) (state);
+ 21762 .loc 2 1047 0
+ 21763 148df 660F7F85 movdqa %xmm0, -2448(%rbp)
+ 21763 70F6FFFF
+ 21764 148e7 660F6F85 movdqa -2448(%rbp), %xmm0
+ 21764 70F6FFFF
+ 21765 148ef F30F7F85 movdqu %xmm0, -960(%rbp)
+ 21765 40FCFFFF
+ 21766 .LBB2591:
+ 21767 .LBB2592:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21768 .loc 2 667 0
+ 21769 148f7 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 21769 00000000
+ 21770 148ff F30F6F8D movdqu -960(%rbp), %xmm1
+ 21770 40FCFFFF
+ 21771 14907 F30F7F8D movdqu %xmm1, -928(%rbp)
+ 21771 60FCFFFF
+ 21772 1490f F30F7F85 movdqu %xmm0, -944(%rbp)
+ 21772 50FCFFFF
+ 21773 .LBB2593:
+ 21774 .LBB2594:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 21775 .loc 2 380 0
+ 21776 14917 F30F6F85 movdqu -928(%rbp), %xmm0
+ 21776 60FCFFFF
+ 21777 1491f F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 21777 20F8FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 21778 .loc 2 381 0
+ 21779 14927 F30F6F85 movdqu -944(%rbp), %xmm0
+ 21779 50FCFFFF
+ 21780 1492f F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 21780 10F8FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21781 .loc 2 383 0
+ 21782 14937 C7857CFC movl $0, -900(%rbp)
+ 21782 FFFF0000
+ 21782 0000
+ 21783 14941 EB5C jmp .L547
+ 21784 .L550:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 21785 .loc 2 385 0
+ 21786 14943 8B857CFC movl -900(%rbp), %eax
+ 21786 FFFF
+ 21787 14949 89C0 mov %eax, %eax
+ 21788 1494b 0FB68405 movzbl -2032(%rbp,%rax), %eax
+ 21788 10F8FFFF
+ 21789 14953 84C0 testb %al, %al
+ 21790 14955 7912 jns .L548
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+
GAS LISTING /tmp/ccMa7HLZ.s page 664
+
+
+ 21791 .loc 2 386 0
+ 21792 14957 8B857CFC movl -900(%rbp), %eax
+ 21792 FFFF
+ 21793 1495d 89C0 mov %eax, %eax
+ 21794 1495f C6840530 movb $0, -2000(%rbp,%rax)
+ 21794 F8FFFF00
+ 21795 14967 EB2F jmp .L549
+ 21796 .L548:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21797 .loc 2 388 0
+ 21798 14969 8B8D7CFC movl -900(%rbp), %ecx
+ 21798 FFFF
+ 21799 1496f 8B857CFC movl -900(%rbp), %eax
+ 21799 FFFF
+ 21800 14975 89C0 mov %eax, %eax
+ 21801 14977 0FB68405 movzbl -2032(%rbp,%rax), %eax
+ 21801 10F8FFFF
+ 21802 1497f 0FB6C0 movzbl %al, %eax
+ 21803 14982 83E00F andl $15, %eax
+ 21804 14985 4898 cltq
+ 21805 14987 0FB69405 movzbl -2016(%rbp,%rax), %edx
+ 21805 20F8FFFF
+ 21806 1498f 89C8 mov %ecx, %eax
+ 21807 14991 88940530 movb %dl, -2000(%rbp,%rax)
+ 21807 F8FFFF
+ 21808 .L549:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21809 .loc 2 383 0
+ 21810 14998 83857CFC addl $1, -900(%rbp)
+ 21810 FFFF01
+ 21811 .L547:
+ 21812 1499f 83BD7CFC cmpl $15, -900(%rbp)
+ 21812 FFFF0F
+ 21813 149a6 769B jbe .L550
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 21814 .loc 2 391 0
+ 21815 149a8 F30F6F85 movdqu -2000(%rbp), %xmm0
+ 21815 30F8FFFF
+ 21816 .LBE2594:
+ 21817 .LBE2593:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21818 .loc 2 667 0
+ 21819 149b0 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 21819 40FCFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 21820 .loc 2 668 0
+ 21821 149b8 F30F6F85 movdqu -960(%rbp), %xmm0
+ 21821 40FCFFFF
+ 21822 .LBE2592:
+ 21823 .LBE2591:
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c2 = AESBCMEMBER(RotBytesLeft) (c1);
+ 21824 .loc 2 1048 0
+ 21825 149c0 660F7F85 movdqa %xmm0, -2464(%rbp)
+ 21825 60F6FFFF
+ 21826 149c8 660F6F85 movdqa -2464(%rbp), %xmm0
+ 21826 60F6FFFF
+ 21827 149d0 F30F7F85 movdqu %xmm0, -896(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 665
+
+
+ 21827 80FCFFFF
+ 21828 .LBB2595:
+ 21829 .LBB2596:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21830 .loc 2 667 0
+ 21831 149d8 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 21831 00000000
+ 21832 149e0 F30F6F8D movdqu -896(%rbp), %xmm1
+ 21832 80FCFFFF
+ 21833 149e8 F30F7F8D movdqu %xmm1, -864(%rbp)
+ 21833 A0FCFFFF
+ 21834 149f0 F30F7F85 movdqu %xmm0, -880(%rbp)
+ 21834 90FCFFFF
+ 21835 .LBB2597:
+ 21836 .LBB2598:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 21837 .loc 2 380 0
+ 21838 149f8 F30F6F85 movdqu -864(%rbp), %xmm0
+ 21838 A0FCFFFF
+ 21839 14a00 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 21839 50F8FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 21840 .loc 2 381 0
+ 21841 14a08 F30F6F85 movdqu -880(%rbp), %xmm0
+ 21841 90FCFFFF
+ 21842 14a10 F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 21842 40F8FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21843 .loc 2 383 0
+ 21844 14a18 C785BCFC movl $0, -836(%rbp)
+ 21844 FFFF0000
+ 21844 0000
+ 21845 14a22 EB5C jmp .L551
+ 21846 .L554:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 21847 .loc 2 385 0
+ 21848 14a24 8B85BCFC movl -836(%rbp), %eax
+ 21848 FFFF
+ 21849 14a2a 89C0 mov %eax, %eax
+ 21850 14a2c 0FB68405 movzbl -1984(%rbp,%rax), %eax
+ 21850 40F8FFFF
+ 21851 14a34 84C0 testb %al, %al
+ 21852 14a36 7912 jns .L552
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 21853 .loc 2 386 0
+ 21854 14a38 8B85BCFC movl -836(%rbp), %eax
+ 21854 FFFF
+ 21855 14a3e 89C0 mov %eax, %eax
+ 21856 14a40 C6840560 movb $0, -1952(%rbp,%rax)
+ 21856 F8FFFF00
+ 21857 14a48 EB2F jmp .L553
+ 21858 .L552:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21859 .loc 2 388 0
+ 21860 14a4a 8B8DBCFC movl -836(%rbp), %ecx
+ 21860 FFFF
+ 21861 14a50 8B85BCFC movl -836(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 666
+
+
+ 21861 FFFF
+ 21862 14a56 89C0 mov %eax, %eax
+ 21863 14a58 0FB68405 movzbl -1984(%rbp,%rax), %eax
+ 21863 40F8FFFF
+ 21864 14a60 0FB6C0 movzbl %al, %eax
+ 21865 14a63 83E00F andl $15, %eax
+ 21866 14a66 4898 cltq
+ 21867 14a68 0FB69405 movzbl -1968(%rbp,%rax), %edx
+ 21867 50F8FFFF
+ 21868 14a70 89C8 mov %ecx, %eax
+ 21869 14a72 88940560 movb %dl, -1952(%rbp,%rax)
+ 21869 F8FFFF
+ 21870 .L553:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 21871 .loc 2 383 0
+ 21872 14a79 8385BCFC addl $1, -836(%rbp)
+ 21872 FFFF01
+ 21873 .L551:
+ 21874 14a80 83BDBCFC cmpl $15, -836(%rbp)
+ 21874 FFFF0F
+ 21875 14a87 769B jbe .L554
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 21876 .loc 2 391 0
+ 21877 14a89 F30F6F85 movdqu -1952(%rbp), %xmm0
+ 21877 60F8FFFF
+ 21878 .LBE2598:
+ 21879 .LBE2597:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21880 .loc 2 667 0
+ 21881 14a91 F30F7F85 movdqu %xmm0, -896(%rbp)
+ 21881 80FCFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 21882 .loc 2 668 0
+ 21883 14a99 F30F6F85 movdqu -896(%rbp), %xmm0
+ 21883 80FCFFFF
+ 21884 .LBE2596:
+ 21885 .LBE2595:
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c3 = AESBCMEMBER(RotBytesLeft) (c2);
+ 21886 .loc 2 1049 0
+ 21887 14aa1 660F7F85 movdqa %xmm0, -2480(%rbp)
+ 21887 50F6FFFF
+ 21888 14aa9 F30F6F85 movdqu -1056(%rbp), %xmm0
+ 21888 E0FBFFFF
+ 21889 14ab1 F30F7F85 movdqu %xmm0, -816(%rbp)
+ 21889 D0FCFFFF
+ 21890 14ab9 660F6F85 movdqa -2448(%rbp), %xmm0
+ 21890 70F6FFFF
+ 21891 14ac1 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 21891 C0FCFFFF
+ 21892 .LBB2599:
+ 21893 .LBB2600:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 21894 .loc 2 178 0
+ 21895 14ac9 F30F6F85 movdqu -832(%rbp), %xmm0
+ 21895 C0FCFFFF
+ 21896 14ad1 F30F6F8D movdqu -816(%rbp), %xmm1
+ 21896 D0FCFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 667
+
+
+ 21897 14ad9 660FEFC1 pxor %xmm1, %xmm0
+ 21898 .LBE2600:
+ 21899 .LBE2599:
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = AESBCMEMBER(VecXor) (state, c1);
+ 21900 .loc 2 1050 0
+ 21901 14add 660F7F85 movdqa %xmm0, -2432(%rbp)
+ 21901 80F6FFFF
+ 21902 .LBB2601:
+1060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp.state = c0;
+ 21903 .loc 2 1060 0
+ 21904 14ae5 660F6F85 movdqa -2432(%rbp), %xmm0
+ 21904 80F6FFFF
+ 21905 14aed F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 21905 D0F7FFFF
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof tmp; ++ix)
+ 21906 .loc 2 1062 0
+ 21907 14af5 C785FCFB movl $0, -1028(%rbp)
+ 21907 FFFF0000
+ 21907 0000
+ 21908 14aff EB66 jmp .L555
+ 21909 .L556:
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+ 21910 .loc 2 1063 0
+ 21911 14b01 8B8DFCFB movl -1028(%rbp), %ecx
+ 21911 FFFF
+ 21912 14b07 8B85FCFB movl -1028(%rbp), %eax
+ 21912 FFFF
+ 21913 14b0d 89C0 mov %eax, %eax
+ 21914 14b0f 0FB68405 movzbl -2096(%rbp,%rax), %eax
+ 21914 D0F7FFFF
+ 21915 14b17 0FB6C0 movzbl %al, %eax
+ 21916 14b1a 8885EEFC movb %al, -786(%rbp)
+ 21916 FFFF
+ 21917 .LBB2602:
+ 21918 .LBB2603:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 21919 .loc 2 1012 0
+ 21920 14b20 0FB685EE movzbl -786(%rbp), %eax
+ 21920 FCFFFF
+ 21921 14b27 01C0 addl %eax, %eax
+ 21922 14b29 89C3 movl %eax, %ebx
+ 21923 14b2b 0FB685EE movzbl -786(%rbp), %eax
+ 21923 FCFFFF
+ 21924 14b32 C0E807 shrb $7, %al
+ 21925 14b35 0FB6C0 movzbl %al, %eax
+ 21926 14b38 8885EFFC movb %al, -785(%rbp)
+ 21926 FFFF
+ 21927 .LBB2604:
+ 21928 .LBB2605:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+ 21929 .loc 2 1001 0
+ 21930 14b3e 0FB685EF movzbl -785(%rbp), %eax
+ 21930 FCFFFF
+ 21931 14b45 4863D0 movslq %eax,%rdx
+ 21932 14b48 488D0500 leaq KAESBlockCipherVecFFtable(%rip), %rax
+ 21932 000000
+ 21933 14b4f 0FB60402 movzbl (%rdx,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 668
+
+
+ 21934 .LBE2605:
+ 21935 .LBE2604:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 21936 .loc 2 1012 0
+ 21937 14b53 31D8 xorl %ebx, %eax
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+ 21938 .loc 2 1063 0
+ 21939 14b55 89C2 movl %eax, %edx
+ 21940 .LBE2603:
+ 21941 .LBE2602:
+ 21942 14b57 89C8 mov %ecx, %eax
+ 21943 14b59 889405D0 movb %dl, -2096(%rbp,%rax)
+ 21943 F7FFFF
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof tmp; ++ix)
+ 21944 .loc 2 1062 0
+ 21945 14b60 8385FCFB addl $1, -1028(%rbp)
+ 21945 FFFF01
+ 21946 .L555:
+ 21947 14b67 83BDFCFB cmpl $15, -1028(%rbp)
+ 21947 FFFF0F
+ 21948 14b6e 7691 jbe .L556
+1064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = tmp.state;
+ 21949 .loc 2 1064 0
+ 21950 14b70 F30F6F85 movdqu -2096(%rbp), %xmm0
+ 21950 D0F7FFFF
+ 21951 14b78 660F7F85 movdqa %xmm0, -2432(%rbp)
+ 21951 80F6FFFF
+ 21952 14b80 660F6F85 movdqa -2448(%rbp), %xmm0
+ 21952 70F6FFFF
+ 21953 14b88 F30F7F85 movdqu %xmm0, -768(%rbp)
+ 21953 00FDFFFF
+ 21954 14b90 660F6F85 movdqa -2464(%rbp), %xmm0
+ 21954 60F6FFFF
+ 21955 14b98 F30F7F85 movdqu %xmm0, -784(%rbp)
+ 21955 F0FCFFFF
+ 21956 .LBE2601:
+ 21957 .LBB2606:
+ 21958 .LBB2607:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 21959 .loc 2 178 0
+ 21960 14ba0 F30F6F85 movdqu -784(%rbp), %xmm0
+ 21960 F0FCFFFF
+ 21961 14ba8 F30F6F8D movdqu -768(%rbp), %xmm1
+ 21961 00FDFFFF
+ 21962 14bb0 660FEFC1 pxor %xmm1, %xmm0
+ 21963 .LBE2607:
+ 21964 .LBE2606:
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c2);
+ 21965 .loc 2 1067 0
+ 21966 14bb4 660F7F85 movdqa %xmm0, -2448(%rbp)
+ 21966 70F6FFFF
+ 21967 14bbc 660F6F85 movdqa -2448(%rbp), %xmm0
+ 21967 70F6FFFF
+ 21968 14bc4 F30F7F85 movdqu %xmm0, -736(%rbp)
+ 21968 20FDFFFF
+ 21969 14bcc 660F6F85 movdqa -2480(%rbp), %xmm0
+ 21969 50F6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 669
+
+
+ 21970 14bd4 F30F7F85 movdqu %xmm0, -752(%rbp)
+ 21970 10FDFFFF
+ 21971 .LBB2608:
+ 21972 .LBB2609:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 21973 .loc 2 178 0
+ 21974 14bdc F30F6F85 movdqu -752(%rbp), %xmm0
+ 21974 10FDFFFF
+ 21975 14be4 F30F6F8D movdqu -736(%rbp), %xmm1
+ 21975 20FDFFFF
+ 21976 14bec 660FEFC1 pxor %xmm1, %xmm0
+ 21977 .LBE2609:
+ 21978 .LBE2608:
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c3);
+ 21979 .loc 2 1068 0
+ 21980 14bf0 660F7F85 movdqa %xmm0, -2448(%rbp)
+ 21980 70F6FFFF
+ 21981 14bf8 660F6F85 movdqa -2448(%rbp), %xmm0
+ 21981 70F6FFFF
+ 21982 14c00 F30F7F85 movdqu %xmm0, -704(%rbp)
+ 21982 40FDFFFF
+ 21983 14c08 660F6F85 movdqa -2432(%rbp), %xmm0
+ 21983 80F6FFFF
+ 21984 14c10 F30F7F85 movdqu %xmm0, -720(%rbp)
+ 21984 30FDFFFF
+ 21985 .LBB2610:
+ 21986 .LBB2611:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 21987 .loc 2 178 0
+ 21988 14c18 F30F6F85 movdqu -720(%rbp), %xmm0
+ 21988 30FDFFFF
+ 21989 14c20 F30F6F8D movdqu -704(%rbp), %xmm1
+ 21989 40FDFFFF
+ 21990 14c28 660FEFC1 pxor %xmm1, %xmm0
+ 21991 .LBE2611:
+ 21992 .LBE2610:
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c0);
+ 21993 .loc 2 1069 0
+ 21994 14c2c 660F7F85 movdqa %xmm0, -2448(%rbp)
+ 21994 70F6FFFF
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return c1;
+ 21995 .loc 2 1071 0
+ 21996 14c34 660F6F85 movdqa -2448(%rbp), %xmm0
+ 21996 70F6FFFF
+ 21997 .LBE2586:
+ 21998 .LBE2585:
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MixColumns) (state);
+ 21999 .loc 2 2037 0
+ 22000 14c3c F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 22000 D0F9FFFF
+ 22001 .LBB2612:
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After MixColum", state);
+ 22002 .loc 2 2040 0
+ 22003 14c44 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 22003 D0F9FFFF
+ 22004 14c4c F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 22004 00F7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 670
+
+
+ 22005 14c54 E8000000 call KDbgWriterGet at PLT
+ 22005 00
+ 22006 14c59 4885C0 testq %rax, %rax
+ 22007 14c5c 7479 je .L558
+ 22008 14c5e BF010000 movl $1, %edi
+ 22008 00
+ 22009 14c63 E8000000 call KDbgCondToFlag at PLT
+ 22009 00
+ 22010 14c68 4889C6 movq %rax, %rsi
+ 22011 14c6b BF100000 movl $16, %edi
+ 22011 00
+ 22012 14c70 E8000000 call KDbgTestModConds at PLT
+ 22012 00
+ 22013 14c75 84C0 testb %al, %al
+ 22014 14c77 745E je .L558
+ 22015 14c79 8B850CF7 movl -2292(%rbp), %eax
+ 22015 FFFF
+ 22016 14c7f 89C7 movl %eax, %edi
+ 22017 14c81 E87AB3FE call bswap_32
+ 22017 FF
+ 22018 14c86 4189C5 movl %eax, %r13d
+ 22019 14c89 8B8508F7 movl -2296(%rbp), %eax
+ 22019 FFFF
+ 22020 14c8f 89C7 movl %eax, %edi
+ 22021 14c91 E86AB3FE call bswap_32
+ 22021 FF
+ 22022 14c96 4189C4 movl %eax, %r12d
+ 22023 14c99 8B8504F7 movl -2300(%rbp), %eax
+ 22023 FFFF
+ 22024 14c9f 89C7 movl %eax, %edi
+ 22025 14ca1 E85AB3FE call bswap_32
+ 22025 FF
+ 22026 14ca6 89C3 movl %eax, %ebx
+ 22027 14ca8 8B8500F7 movl -2304(%rbp), %eax
+ 22027 FFFF
+ 22028 14cae 89C7 movl %eax, %edi
+ 22029 14cb0 E84BB3FE call bswap_32
+ 22029 FF
+ 22030 14cb5 4589E9 movl %r13d, %r9d
+ 22031 14cb8 4589E0 movl %r12d, %r8d
+ 22032 14cbb 89D9 movl %ebx, %ecx
+ 22033 14cbd 89C2 movl %eax, %edx
+ 22034 14cbf 488D3500 leaq .LC10(%rip), %rsi
+ 22034 000000
+ 22035 14cc6 488D3D00 leaq .LC1(%rip), %rdi
+ 22035 000000
+ 22036 14ccd B8000000 movl $0, %eax
+ 22036 00
+ 22037 14cd2 E8000000 call KDbgMsg at PLT
+ 22037 00
+ 22038 .L558:
+ 22039 14cd7 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 22039 D0F9FFFF
+ 22040 14cdf F30F7F85 movdqu %xmm0, -672(%rbp)
+ 22040 60FDFFFF
+ 22041 14ce7 F30F6F85 movdqu -1600(%rbp), %xmm0
+ 22041 C0F9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 671
+
+
+ 22042 14cef F30F7F85 movdqu %xmm0, -688(%rbp)
+ 22042 50FDFFFF
+ 22043 14cf7 F30F6F85 movdqu -672(%rbp), %xmm0
+ 22043 60FDFFFF
+ 22044 14cff F30F7F85 movdqu %xmm0, -640(%rbp)
+ 22044 80FDFFFF
+ 22045 14d07 F30F6F85 movdqu -688(%rbp), %xmm0
+ 22045 50FDFFFF
+ 22046 14d0f F30F7F85 movdqu %xmm0, -656(%rbp)
+ 22046 70FDFFFF
+ 22047 .LBE2612:
+ 22048 .LBB2613:
+ 22049 .LBB2614:
+ 22050 .LBB2615:
+ 22051 .LBB2616:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 22052 .loc 2 178 0
+ 22053 14d17 F30F6F85 movdqu -656(%rbp), %xmm0
+ 22053 70FDFFFF
+ 22054 14d1f F30F6F8D movdqu -640(%rbp), %xmm1
+ 22054 80FDFFFF
+ 22055 14d27 660FEFC1 pxor %xmm1, %xmm0
+ 22056 .LBE2616:
+ 22057 .LBE2615:
+ 22058 .LBE2614:
+ 22059 .LBE2613:
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 22060 .loc 2 2042 0
+ 22061 14d2b F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 22061 D0F9FFFF
+ 22062 .LBB2617:
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 22063 .loc 2 2044 0
+ 22064 14d33 F30F6F85 movdqu -1600(%rbp), %xmm0
+ 22064 C0F9FFFF
+ 22065 14d3b F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 22065 F0F6FFFF
+ 22066 14d43 E8000000 call KDbgWriterGet at PLT
+ 22066 00
+ 22067 14d48 4885C0 testq %rax, %rax
+ 22068 14d4b 7479 je .L560
+ 22069 14d4d BF010000 movl $1, %edi
+ 22069 00
+ 22070 14d52 E8000000 call KDbgCondToFlag at PLT
+ 22070 00
+ 22071 14d57 4889C6 movq %rax, %rsi
+ 22072 14d5a BF100000 movl $16, %edi
+ 22072 00
+ 22073 14d5f E8000000 call KDbgTestModConds at PLT
+ 22073 00
+ 22074 14d64 84C0 testb %al, %al
+ 22075 14d66 745E je .L560
+ 22076 14d68 8B85FCF6 movl -2308(%rbp), %eax
+ 22076 FFFF
+ 22077 14d6e 89C7 movl %eax, %edi
+ 22078 14d70 E88BB2FE call bswap_32
+ 22078 FF
+
GAS LISTING /tmp/ccMa7HLZ.s page 672
+
+
+ 22079 14d75 4189C5 movl %eax, %r13d
+ 22080 14d78 8B85F8F6 movl -2312(%rbp), %eax
+ 22080 FFFF
+ 22081 14d7e 89C7 movl %eax, %edi
+ 22082 14d80 E87BB2FE call bswap_32
+ 22082 FF
+ 22083 14d85 4189C4 movl %eax, %r12d
+ 22084 14d88 8B85F4F6 movl -2316(%rbp), %eax
+ 22084 FFFF
+ 22085 14d8e 89C7 movl %eax, %edi
+ 22086 14d90 E86BB2FE call bswap_32
+ 22086 FF
+ 22087 14d95 89C3 movl %eax, %ebx
+ 22088 14d97 8B85F0F6 movl -2320(%rbp), %eax
+ 22088 FFFF
+ 22089 14d9d 89C7 movl %eax, %edi
+ 22090 14d9f E85CB2FE call bswap_32
+ 22090 FF
+ 22091 14da4 4589E9 movl %r13d, %r9d
+ 22092 14da7 4589E0 movl %r12d, %r8d
+ 22093 14daa 89D9 movl %ebx, %ecx
+ 22094 14dac 89C2 movl %eax, %edx
+ 22095 14dae 488D3500 leaq .LC6(%rip), %rsi
+ 22095 000000
+ 22096 14db5 488D3D00 leaq .LC1(%rip), %rdi
+ 22096 000000
+ 22097 14dbc B8000000 movl $0, %eax
+ 22097 00
+ 22098 14dc1 E8000000 call KDbgMsg at PLT
+ 22098 00
+ 22099 .L560:
+ 22100 .LBE2617:
+ 22101 .LBB2618:
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+ 22102 .loc 2 2045 0
+ 22103 14dc6 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 22103 D0F9FFFF
+ 22104 14dce F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 22104 E0F6FFFF
+ 22105 14dd6 E8000000 call KDbgWriterGet at PLT
+ 22105 00
+ 22106 14ddb 4885C0 testq %rax, %rax
+ 22107 14dde 7479 je .L562
+ 22108 14de0 BF010000 movl $1, %edi
+ 22108 00
+ 22109 14de5 E8000000 call KDbgCondToFlag at PLT
+ 22109 00
+ 22110 14dea 4889C6 movq %rax, %rsi
+ 22111 14ded BF100000 movl $16, %edi
+ 22111 00
+ 22112 14df2 E8000000 call KDbgTestModConds at PLT
+ 22112 00
+ 22113 14df7 84C0 testb %al, %al
+ 22114 14df9 745E je .L562
+ 22115 14dfb 8B85ECF6 movl -2324(%rbp), %eax
+ 22115 FFFF
+ 22116 14e01 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 673
+
+
+ 22117 14e03 E8F8B1FE call bswap_32
+ 22117 FF
+ 22118 14e08 4189C5 movl %eax, %r13d
+ 22119 14e0b 8B85E8F6 movl -2328(%rbp), %eax
+ 22119 FFFF
+ 22120 14e11 89C7 movl %eax, %edi
+ 22121 14e13 E8E8B1FE call bswap_32
+ 22121 FF
+ 22122 14e18 4189C4 movl %eax, %r12d
+ 22123 14e1b 8B85E4F6 movl -2332(%rbp), %eax
+ 22123 FFFF
+ 22124 14e21 89C7 movl %eax, %edi
+ 22125 14e23 E8D8B1FE call bswap_32
+ 22125 FF
+ 22126 14e28 89C3 movl %eax, %ebx
+ 22127 14e2a 8B85E0F6 movl -2336(%rbp), %eax
+ 22127 FFFF
+ 22128 14e30 89C7 movl %eax, %edi
+ 22129 14e32 E8C9B1FE call bswap_32
+ 22129 FF
+ 22130 14e37 4589E9 movl %r13d, %r9d
+ 22131 14e3a 4589E0 movl %r12d, %r8d
+ 22132 14e3d 89D9 movl %ebx, %ecx
+ 22133 14e3f 89C2 movl %eax, %edx
+ 22134 14e41 488D3500 leaq .LC11(%rip), %rsi
+ 22134 000000
+ 22135 14e48 488D3D00 leaq .LC1(%rip), %rdi
+ 22135 000000
+ 22136 14e4f B8000000 movl $0, %eax
+ 22136 00
+ 22137 14e54 E8000000 call KDbgMsg at PLT
+ 22137 00
+ 22138 .L562:
+ 22139 .LBE2618:
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 22140 .loc 2 2047 0
+ 22141 14e59 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 22141 D0F9FFFF
+ 22142 .LBE2557:
+ 22143 .LBE2556:
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+ 22144 .loc 2 2100 0
+ 22145 14e61 660F7F85 movdqa %xmm0, -2400(%rbp)
+ 22145 A0F6FFFF
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 22146 .loc 2 2099 0
+ 22147 14e69 83855CF9 addl $1, -1700(%rbp)
+ 22147 FFFF01
+ 22148 .L522:
+ 22149 14e70 8B855CF9 movl -1700(%rbp), %eax
+ 22149 FFFF
+ 22150 14e76 3B8594F6 cmpl -2412(%rbp), %eax
+ 22150 FFFF
+ 22151 14e7c 0F822FF0 jb .L563
+ 22151 FFFF
+2102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(LastRound) (state, key[ix]);
+ 22152 .loc 2 2102 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 674
+
+
+ 22153 14e82 8B855CF9 mov -1700(%rbp), %eax
+ 22153 FFFF
+ 22154 14e88 48C1E004 salq $4, %rax
+ 22155 14e8c 48038598 addq -2408(%rbp), %rax
+ 22155 F6FFFF
+ 22156 14e93 660F6F00 movdqa (%rax), %xmm0
+ 22157 14e97 660F6F8D movdqa -2400(%rbp), %xmm1
+ 22157 A0F6FFFF
+ 22158 14e9f F30F7F8D movdqu %xmm1, -608(%rbp)
+ 22158 A0FDFFFF
+ 22159 14ea7 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 22159 90FDFFFF
+ 22160 .LBB2619:
+ 22161 .LBB2620:
+ 22162 .LBB2621:
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 22163 .loc 2 2058 0
+ 22164 14eaf F30F6F85 movdqu -608(%rbp), %xmm0
+ 22164 A0FDFFFF
+ 22165 14eb7 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 22165 B0F8FFFF
+ 22166 14ebf E8000000 call KDbgWriterGet at PLT
+ 22166 00
+ 22167 14ec4 4885C0 testq %rax, %rax
+ 22168 14ec7 7479 je .L565
+ 22169 14ec9 BF010000 movl $1, %edi
+ 22169 00
+ 22170 14ece E8000000 call KDbgCondToFlag at PLT
+ 22170 00
+ 22171 14ed3 4889C6 movq %rax, %rsi
+ 22172 14ed6 BF100000 movl $16, %edi
+ 22172 00
+ 22173 14edb E8000000 call KDbgTestModConds at PLT
+ 22173 00
+ 22174 14ee0 84C0 testb %al, %al
+ 22175 14ee2 745E je .L565
+ 22176 14ee4 8B85BCF8 movl -1860(%rbp), %eax
+ 22176 FFFF
+ 22177 14eea 89C7 movl %eax, %edi
+ 22178 14eec E80FB1FE call bswap_32
+ 22178 FF
+ 22179 14ef1 4189C5 movl %eax, %r13d
+ 22180 14ef4 8B85B8F8 movl -1864(%rbp), %eax
+ 22180 FFFF
+ 22181 14efa 89C7 movl %eax, %edi
+ 22182 14efc E8FFB0FE call bswap_32
+ 22182 FF
+ 22183 14f01 4189C4 movl %eax, %r12d
+ 22184 14f04 8B85B4F8 movl -1868(%rbp), %eax
+ 22184 FFFF
+ 22185 14f0a 89C7 movl %eax, %edi
+ 22186 14f0c E8EFB0FE call bswap_32
+ 22186 FF
+ 22187 14f11 89C3 movl %eax, %ebx
+ 22188 14f13 8B85B0F8 movl -1872(%rbp), %eax
+ 22188 FFFF
+ 22189 14f19 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 675
+
+
+ 22190 14f1b E8E0B0FE call bswap_32
+ 22190 FF
+ 22191 14f20 4589E9 movl %r13d, %r9d
+ 22192 14f23 4589E0 movl %r12d, %r8d
+ 22193 14f26 89D9 movl %ebx, %ecx
+ 22194 14f28 89C2 movl %eax, %edx
+ 22195 14f2a 488D3500 leaq .LC5(%rip), %rsi
+ 22195 000000
+ 22196 14f31 488D3D00 leaq .LC1(%rip), %rdi
+ 22196 000000
+ 22197 14f38 B8000000 movl $0, %eax
+ 22197 00
+ 22198 14f3d E8000000 call KDbgMsg at PLT
+ 22198 00
+ 22199 .L565:
+ 22200 14f42 F30F6F85 movdqu -608(%rbp), %xmm0
+ 22200 A0FDFFFF
+ 22201 14f4a F30F7F85 movdqu %xmm0, -592(%rbp)
+ 22201 B0FDFFFF
+ 22202 14f52 F30F6F85 movdqu -592(%rbp), %xmm0
+ 22202 B0FDFFFF
+ 22203 14f5a F30F7F85 movdqu %xmm0, -560(%rbp)
+ 22203 D0FDFFFF
+ 22204 14f62 488D0500 leaq KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 22204 000000
+ 22205 14f69 488985C8 movq %rax, -568(%rbp)
+ 22205 FDFFFF
+ 22206 .LBE2621:
+ 22207 .LBB2622:
+ 22208 .LBB2623:
+ 22209 .LBB2624:
+ 22210 .LBB2625:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 22211 .loc 2 851 0
+ 22212 14f70 660F6F05 movdqa vec_00(%rip), %xmm0
+ 22212 00000000
+ 22213 14f78 F30F7F85 movdqu %xmm0, -528(%rbp)
+ 22213 F0FDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 22214 .loc 2 854 0
+ 22215 14f80 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 22215 00000000
+ 22216 14f88 F30F6F8D movdqu -560(%rbp), %xmm1
+ 22216 D0FDFFFF
+ 22217 14f90 F30F7F8D movdqu %xmm1, -448(%rbp)
+ 22217 40FEFFFF
+ 22218 14f98 F30F7F85 movdqu %xmm0, -464(%rbp)
+ 22218 30FEFFFF
+ 22219 .LBB2626:
+ 22220 .LBB2627:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 22221 .loc 2 206 0
+ 22222 14fa0 F30F6F85 movdqu -464(%rbp), %xmm0
+ 22222 30FEFFFF
+ 22223 14fa8 F30F6F8D movdqu -448(%rbp), %xmm1
+ 22223 40FEFFFF
+ 22224 14fb0 660FDBC1 pand %xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 676
+
+
+ 22225 .LBE2627:
+ 22226 .LBE2626:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 22227 .loc 2 854 0
+ 22228 14fb4 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 22228 20FEFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 22229 .loc 2 862 0
+ 22230 14fbc 660F6F05 movdqa vec_10(%rip), %xmm0
+ 22230 00000000
+ 22231 14fc4 F30F6F8D movdqu -560(%rbp), %xmm1
+ 22231 D0FDFFFF
+ 22232 14fcc F30F7F8D movdqu %xmm1, -416(%rbp)
+ 22232 60FEFFFF
+ 22233 14fd4 F30F7F85 movdqu %xmm0, -432(%rbp)
+ 22233 50FEFFFF
+ 22234 .LBB2628:
+ 22235 .loc 2 2642 0
+ 22236 14fdc 0FB68560 movzbl -416(%rbp), %eax
+ 22236 FEFFFF
+ 22237 14fe3 0FB69550 movzbl -432(%rbp), %edx
+ 22237 FEFFFF
+ 22238 14fea 0FB6C0 movzbl %al, %eax
+ 22239 14fed 6689851E movw %ax, -2530(%rbp)
+ 22239 F6FFFF
+ 22240 14ff4 0FB7851E movzwl -2530(%rbp), %eax
+ 22240 F6FFFF
+ 22241 14ffb F6F2 divb %dl
+ 22242 14ffd 4189C7 movl %eax, %r15d
+ 22243 15000 0FB68561 movzbl -415(%rbp), %eax
+ 22243 FEFFFF
+ 22244 15007 0FB69551 movzbl -431(%rbp), %edx
+ 22244 FEFFFF
+ 22245 1500e 0FB6C0 movzbl %al, %eax
+ 22246 15011 6689851E movw %ax, -2530(%rbp)
+ 22246 F6FFFF
+ 22247 15018 0FB7851E movzwl -2530(%rbp), %eax
+ 22247 F6FFFF
+ 22248 1501f F6F2 divb %dl
+ 22249 15021 888593F6 movb %al, -2413(%rbp)
+ 22249 FFFF
+ 22250 15027 0FB68562 movzbl -414(%rbp), %eax
+ 22250 FEFFFF
+ 22251 1502e 0FB69552 movzbl -430(%rbp), %edx
+ 22251 FEFFFF
+ 22252 15035 0FB6C0 movzbl %al, %eax
+ 22253 15038 6689851E movw %ax, -2530(%rbp)
+ 22253 F6FFFF
+ 22254 1503f 0FB7851E movzwl -2530(%rbp), %eax
+ 22254 F6FFFF
+ 22255 15046 F6F2 divb %dl
+ 22256 15048 888592F6 movb %al, -2414(%rbp)
+ 22256 FFFF
+ 22257 1504e 0FB68563 movzbl -413(%rbp), %eax
+ 22257 FEFFFF
+ 22258 15055 0FB69553 movzbl -429(%rbp), %edx
+ 22258 FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 677
+
+
+ 22259 1505c 0FB6C0 movzbl %al, %eax
+ 22260 1505f 6689851E movw %ax, -2530(%rbp)
+ 22260 F6FFFF
+ 22261 15066 0FB7851E movzwl -2530(%rbp), %eax
+ 22261 F6FFFF
+ 22262 1506d F6F2 divb %dl
+ 22263 1506f 888591F6 movb %al, -2415(%rbp)
+ 22263 FFFF
+ 22264 15075 0FB68564 movzbl -412(%rbp), %eax
+ 22264 FEFFFF
+ 22265 1507c 0FB69554 movzbl -428(%rbp), %edx
+ 22265 FEFFFF
+ 22266 15083 0FB6C0 movzbl %al, %eax
+ 22267 15086 6689851E movw %ax, -2530(%rbp)
+ 22267 F6FFFF
+ 22268 1508d 0FB7851E movzwl -2530(%rbp), %eax
+ 22268 F6FFFF
+ 22269 15094 F6F2 divb %dl
+ 22270 15096 888590F6 movb %al, -2416(%rbp)
+ 22270 FFFF
+ 22271 1509c 0FB68565 movzbl -411(%rbp), %eax
+ 22271 FEFFFF
+ 22272 150a3 0FB69555 movzbl -427(%rbp), %edx
+ 22272 FEFFFF
+ 22273 150aa 0FB6C0 movzbl %al, %eax
+ 22274 150ad 6689851E movw %ax, -2530(%rbp)
+ 22274 F6FFFF
+ 22275 150b4 0FB7851E movzwl -2530(%rbp), %eax
+ 22275 F6FFFF
+ 22276 150bb F6F2 divb %dl
+ 22277 150bd 4189C1 movl %eax, %r9d
+ 22278 150c0 0FB68566 movzbl -410(%rbp), %eax
+ 22278 FEFFFF
+ 22279 150c7 0FB69556 movzbl -426(%rbp), %edx
+ 22279 FEFFFF
+ 22280 150ce 0FB6C0 movzbl %al, %eax
+ 22281 150d1 6689851E movw %ax, -2530(%rbp)
+ 22281 F6FFFF
+ 22282 150d8 0FB7851E movzwl -2530(%rbp), %eax
+ 22282 F6FFFF
+ 22283 150df F6F2 divb %dl
+ 22284 150e1 89C7 movl %eax, %edi
+ 22285 150e3 0FB68567 movzbl -409(%rbp), %eax
+ 22285 FEFFFF
+ 22286 150ea 0FB69557 movzbl -425(%rbp), %edx
+ 22286 FEFFFF
+ 22287 150f1 0FB6C0 movzbl %al, %eax
+ 22288 150f4 6689851E movw %ax, -2530(%rbp)
+ 22288 F6FFFF
+ 22289 150fb 0FB7851E movzwl -2530(%rbp), %eax
+ 22289 F6FFFF
+ 22290 15102 F6F2 divb %dl
+ 22291 15104 89C3 movl %eax, %ebx
+ 22292 15106 0FB68568 movzbl -408(%rbp), %eax
+ 22292 FEFFFF
+ 22293 1510d 0FB69558 movzbl -424(%rbp), %edx
+ 22293 FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 678
+
+
+ 22294 15114 0FB6C0 movzbl %al, %eax
+ 22295 15117 6689851E movw %ax, -2530(%rbp)
+ 22295 F6FFFF
+ 22296 1511e 0FB7851E movzwl -2530(%rbp), %eax
+ 22296 F6FFFF
+ 22297 15125 F6F2 divb %dl
+ 22298 15127 4189C2 movl %eax, %r10d
+ 22299 1512a 0FB68569 movzbl -407(%rbp), %eax
+ 22299 FEFFFF
+ 22300 15131 0FB69559 movzbl -423(%rbp), %edx
+ 22300 FEFFFF
+ 22301 15138 0FB6C0 movzbl %al, %eax
+ 22302 1513b 6689851E movw %ax, -2530(%rbp)
+ 22302 F6FFFF
+ 22303 15142 0FB7851E movzwl -2530(%rbp), %eax
+ 22303 F6FFFF
+ 22304 15149 F6F2 divb %dl
+ 22305 1514b 4189C3 movl %eax, %r11d
+ 22306 1514e 0FB6856A movzbl -406(%rbp), %eax
+ 22306 FEFFFF
+ 22307 15155 0FB6955A movzbl -422(%rbp), %edx
+ 22307 FEFFFF
+ 22308 1515c 0FB6C0 movzbl %al, %eax
+ 22309 1515f 6689851E movw %ax, -2530(%rbp)
+ 22309 F6FFFF
+ 22310 15166 0FB7851E movzwl -2530(%rbp), %eax
+ 22310 F6FFFF
+ 22311 1516d F6F2 divb %dl
+ 22312 1516f 4189C4 movl %eax, %r12d
+ 22313 15172 0FB6856B movzbl -405(%rbp), %eax
+ 22313 FEFFFF
+ 22314 15179 0FB6955B movzbl -421(%rbp), %edx
+ 22314 FEFFFF
+ 22315 15180 0FB6C0 movzbl %al, %eax
+ 22316 15183 6689851E movw %ax, -2530(%rbp)
+ 22316 F6FFFF
+ 22317 1518a 0FB7851E movzwl -2530(%rbp), %eax
+ 22317 F6FFFF
+ 22318 15191 F6F2 divb %dl
+ 22319 15193 4189C5 movl %eax, %r13d
+ 22320 15196 0FB6856C movzbl -404(%rbp), %eax
+ 22320 FEFFFF
+ 22321 1519d 0FB6955C movzbl -420(%rbp), %edx
+ 22321 FEFFFF
+ 22322 151a4 0FB6C0 movzbl %al, %eax
+ 22323 151a7 6689851E movw %ax, -2530(%rbp)
+ 22323 F6FFFF
+ 22324 151ae 0FB7851E movzwl -2530(%rbp), %eax
+ 22324 F6FFFF
+ 22325 151b5 F6F2 divb %dl
+ 22326 151b7 4189C6 movl %eax, %r14d
+ 22327 151ba 0FB6856D movzbl -403(%rbp), %eax
+ 22327 FEFFFF
+ 22328 151c1 0FB6955D movzbl -419(%rbp), %edx
+ 22328 FEFFFF
+ 22329 151c8 0FB6C0 movzbl %al, %eax
+ 22330 151cb 6689851E movw %ax, -2530(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 679
+
+
+ 22330 F6FFFF
+ 22331 151d2 0FB7851E movzwl -2530(%rbp), %eax
+ 22331 F6FFFF
+ 22332 151d9 F6F2 divb %dl
+ 22333 151db 4189C0 movl %eax, %r8d
+ 22334 151de 0FB6856E movzbl -402(%rbp), %eax
+ 22334 FEFFFF
+ 22335 151e5 0FB6955E movzbl -418(%rbp), %edx
+ 22335 FEFFFF
+ 22336 151ec 0FB6C0 movzbl %al, %eax
+ 22337 151ef 6689851E movw %ax, -2530(%rbp)
+ 22337 F6FFFF
+ 22338 151f6 0FB7851E movzwl -2530(%rbp), %eax
+ 22338 F6FFFF
+ 22339 151fd F6F2 divb %dl
+ 22340 151ff 89C6 movl %eax, %esi
+ 22341 15201 0FB6856F movzbl -401(%rbp), %eax
+ 22341 FEFFFF
+ 22342 15208 0FB6955F movzbl -417(%rbp), %edx
+ 22342 FEFFFF
+ 22343 1520f 0FB6C0 movzbl %al, %eax
+ 22344 15212 6689851E movw %ax, -2530(%rbp)
+ 22344 F6FFFF
+ 22345 15219 0FB7851E movzwl -2530(%rbp), %eax
+ 22345 F6FFFF
+ 22346 15220 F6F2 divb %dl
+ 22347 15222 89C1 movl %eax, %ecx
+ 22348 .LBB2629:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 22349 .loc 2 346 0
+ 22350 15224 0FB6D3 movzbl %bl, %edx
+ 22351 15227 400FB6C7 movzbl %dil, %eax
+ 22352 1522b 48C1E208 salq $8, %rdx
+ 22353 1522f 4809C2 orq %rax, %rdx
+ 22354 15232 410FB6C1 movzbl %r9b, %eax
+ 22355 15236 48C1E208 salq $8, %rdx
+ 22356 1523a 4809C2 orq %rax, %rdx
+ 22357 1523d 0FB68590 movzbl -2416(%rbp), %eax
+ 22357 F6FFFF
+ 22358 15244 48C1E208 salq $8, %rdx
+ 22359 15248 4809C2 orq %rax, %rdx
+ 22360 1524b 0FB68591 movzbl -2415(%rbp), %eax
+ 22360 F6FFFF
+ 22361 15252 48C1E208 salq $8, %rdx
+ 22362 15256 4809C2 orq %rax, %rdx
+ 22363 15259 0FB68592 movzbl -2414(%rbp), %eax
+ 22363 F6FFFF
+ 22364 15260 48C1E208 salq $8, %rdx
+ 22365 15264 4809C2 orq %rax, %rdx
+ 22366 15267 0FB68593 movzbl -2413(%rbp), %eax
+ 22366 F6FFFF
+ 22367 1526e 48C1E208 salq $8, %rdx
+ 22368 15272 4809C2 orq %rax, %rdx
+ 22369 15275 410FB6C7 movzbl %r15b, %eax
+ 22370 15279 48C1E208 salq $8, %rdx
+ 22371 1527d 4809C2 orq %rax, %rdx
+ 22372 15280 0FB6C1 movzbl %cl, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 680
+
+
+ 22373 15283 400FB6CE movzbl %sil, %ecx
+ 22374 15287 48C1E008 salq $8, %rax
+ 22375 1528b 4809C8 orq %rcx, %rax
+ 22376 1528e 410FB6C8 movzbl %r8b, %ecx
+ 22377 15292 48C1E008 salq $8, %rax
+ 22378 15296 4809C8 orq %rcx, %rax
+ 22379 15299 410FB6CE movzbl %r14b, %ecx
+ 22380 1529d 48C1E008 salq $8, %rax
+ 22381 152a1 4809C8 orq %rcx, %rax
+ 22382 152a4 410FB6CD movzbl %r13b, %ecx
+ 22383 152a8 48C1E008 salq $8, %rax
+ 22384 152ac 4809C8 orq %rcx, %rax
+ 22385 152af 410FB6CC movzbl %r12b, %ecx
+ 22386 152b3 48C1E008 salq $8, %rax
+ 22387 152b7 4809C8 orq %rcx, %rax
+ 22388 152ba 410FB6CB movzbl %r11b, %ecx
+ 22389 152be 48C1E008 salq $8, %rax
+ 22390 152c2 4809C8 orq %rcx, %rax
+ 22391 152c5 410FB6CA movzbl %r10b, %ecx
+ 22392 152c9 48C1E008 salq $8, %rax
+ 22393 152cd 4809C8 orq %rcx, %rax
+ 22394 152d0 48899520 movq %rdx, -2528(%rbp)
+ 22394 F6FFFF
+ 22395 152d7 48898528 movq %rax, -2520(%rbp)
+ 22395 F6FFFF
+ 22396 152de 660F6F85 movdqa -2528(%rbp), %xmm0
+ 22396 20F6FFFF
+ 22397 .LBE2629:
+ 22398 .LBE2628:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 22399 .loc 2 862 0
+ 22400 152e6 F30F7F85 movdqu %xmm0, -496(%rbp)
+ 22400 10FEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 22401 .loc 2 866 0
+ 22402 152ee C785ECFD movl $0, -532(%rbp)
+ 22402 FFFF0000
+ 22402 0000
+ 22403 152f8 E9860200 jmp .L566
+ 22403 00
+ 22404 .L575:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 22405 .loc 2 868 0
+ 22406 152fd 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 22406 00000000
+ 22407 15305 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 22407 80FEFFFF
+ 22408 1530d F30F6F85 movdqu -496(%rbp), %xmm0
+ 22408 10FEFFFF
+ 22409 15315 F30F7F85 movdqu %xmm0, -400(%rbp)
+ 22409 70FEFFFF
+ 22410 .LBB2630:
+ 22411 .LBB2631:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 22412 .loc 2 380 0
+ 22413 1531d F30F6F85 movdqu -384(%rbp), %xmm0
+ 22413 80FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 681
+
+
+ 22414 15325 F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 22414 D0F8FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 22415 .loc 2 381 0
+ 22416 1532d F30F6F85 movdqu -400(%rbp), %xmm0
+ 22416 70FEFFFF
+ 22417 15335 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 22417 C0F8FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 22418 .loc 2 383 0
+ 22419 1533d C7859CFE movl $0, -356(%rbp)
+ 22419 FFFF0000
+ 22419 0000
+ 22420 15347 EB5C jmp .L567
+ 22421 .L570:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 22422 .loc 2 385 0
+ 22423 15349 8B859CFE movl -356(%rbp), %eax
+ 22423 FFFF
+ 22424 1534f 89C0 mov %eax, %eax
+ 22425 15351 0FB68405 movzbl -1856(%rbp,%rax), %eax
+ 22425 C0F8FFFF
+ 22426 15359 84C0 testb %al, %al
+ 22427 1535b 7912 jns .L568
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 22428 .loc 2 386 0
+ 22429 1535d 8B859CFE movl -356(%rbp), %eax
+ 22429 FFFF
+ 22430 15363 89C0 mov %eax, %eax
+ 22431 15365 C68405E0 movb $0, -1824(%rbp,%rax)
+ 22431 F8FFFF00
+ 22432 1536d EB2F jmp .L569
+ 22433 .L568:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 22434 .loc 2 388 0
+ 22435 1536f 8B8D9CFE movl -356(%rbp), %ecx
+ 22435 FFFF
+ 22436 15375 8B859CFE movl -356(%rbp), %eax
+ 22436 FFFF
+ 22437 1537b 89C0 mov %eax, %eax
+ 22438 1537d 0FB68405 movzbl -1856(%rbp,%rax), %eax
+ 22438 C0F8FFFF
+ 22439 15385 0FB6C0 movzbl %al, %eax
+ 22440 15388 83E00F andl $15, %eax
+ 22441 1538b 4898 cltq
+ 22442 1538d 0FB69405 movzbl -1840(%rbp,%rax), %edx
+ 22442 D0F8FFFF
+ 22443 15395 89C8 mov %ecx, %eax
+ 22444 15397 889405E0 movb %dl, -1824(%rbp,%rax)
+ 22444 F8FFFF
+ 22445 .L569:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 22446 .loc 2 383 0
+ 22447 1539e 83859CFE addl $1, -356(%rbp)
+ 22447 FFFF01
+ 22448 .L567:
+ 22449 153a5 83BD9CFE cmpl $15, -356(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 682
+
+
+ 22449 FFFF0F
+ 22450 153ac 769B jbe .L570
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 22451 .loc 2 391 0
+ 22452 153ae F30F6F85 movdqu -1824(%rbp), %xmm0
+ 22452 E0F8FFFF
+ 22453 .LBE2631:
+ 22454 .LBE2630:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 22455 .loc 2 868 0
+ 22456 153b6 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 22456 00FEFFFF
+ 22457 153be F30F6F85 movdqu -480(%rbp), %xmm0
+ 22457 20FEFFFF
+ 22458 153c6 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 22458 B0FEFFFF
+ 22459 153ce F30F6F85 movdqu -512(%rbp), %xmm0
+ 22459 00FEFFFF
+ 22460 153d6 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 22460 A0FEFFFF
+ 22461 .LBB2632:
+ 22462 .LBB2633:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 22463 .loc 2 234 0
+ 22464 153de F30F6F85 movdqu -352(%rbp), %xmm0
+ 22464 A0FEFFFF
+ 22465 153e6 F30F6F8D movdqu -336(%rbp), %xmm1
+ 22465 B0FEFFFF
+ 22466 153ee 660FEBC1 por %xmm1, %xmm0
+ 22467 .LBE2633:
+ 22468 .LBE2632:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 22469 .loc 2 870 0
+ 22470 153f2 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 22470 00FEFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 22471 .loc 2 872 0
+ 22472 153fa 8B85ECFD mov -532(%rbp), %eax
+ 22472 FFFF
+ 22473 15400 48C1E004 salq $4, %rax
+ 22474 15404 480385C8 addq -568(%rbp), %rax
+ 22474 FDFFFF
+ 22475 1540b 660F6F00 movdqa (%rax), %xmm0
+ 22476 1540f F30F7F85 movdqu %xmm0, -304(%rbp)
+ 22476 D0FEFFFF
+ 22477 15417 F30F6F85 movdqu -512(%rbp), %xmm0
+ 22477 00FEFFFF
+ 22478 1541f F30F7F85 movdqu %xmm0, -320(%rbp)
+ 22478 C0FEFFFF
+ 22479 .LBB2634:
+ 22480 .LBB2635:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 22481 .loc 2 380 0
+ 22482 15427 F30F6F85 movdqu -304(%rbp), %xmm0
+ 22482 D0FEFFFF
+ 22483 1542f F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 22483 00F9FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 683
+
+
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 22484 .loc 2 381 0
+ 22485 15437 F30F6F85 movdqu -320(%rbp), %xmm0
+ 22485 C0FEFFFF
+ 22486 1543f F30F7F85 movdqu %xmm0, -1808(%rbp)
+ 22486 F0F8FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 22487 .loc 2 383 0
+ 22488 15447 C785ECFE movl $0, -276(%rbp)
+ 22488 FFFF0000
+ 22488 0000
+ 22489 15451 EB5C jmp .L571
+ 22490 .L574:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 22491 .loc 2 385 0
+ 22492 15453 8B85ECFE movl -276(%rbp), %eax
+ 22492 FFFF
+ 22493 15459 89C0 mov %eax, %eax
+ 22494 1545b 0FB68405 movzbl -1808(%rbp,%rax), %eax
+ 22494 F0F8FFFF
+ 22495 15463 84C0 testb %al, %al
+ 22496 15465 7912 jns .L572
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 22497 .loc 2 386 0
+ 22498 15467 8B85ECFE movl -276(%rbp), %eax
+ 22498 FFFF
+ 22499 1546d 89C0 mov %eax, %eax
+ 22500 1546f C6840510 movb $0, -1776(%rbp,%rax)
+ 22500 F9FFFF00
+ 22501 15477 EB2F jmp .L573
+ 22502 .L572:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 22503 .loc 2 388 0
+ 22504 15479 8B8DECFE movl -276(%rbp), %ecx
+ 22504 FFFF
+ 22505 1547f 8B85ECFE movl -276(%rbp), %eax
+ 22505 FFFF
+ 22506 15485 89C0 mov %eax, %eax
+ 22507 15487 0FB68405 movzbl -1808(%rbp,%rax), %eax
+ 22507 F0F8FFFF
+ 22508 1548f 0FB6C0 movzbl %al, %eax
+ 22509 15492 83E00F andl $15, %eax
+ 22510 15495 4898 cltq
+ 22511 15497 0FB69405 movzbl -1792(%rbp,%rax), %edx
+ 22511 00F9FFFF
+ 22512 1549f 89C8 mov %ecx, %eax
+ 22513 154a1 88940510 movb %dl, -1776(%rbp,%rax)
+ 22513 F9FFFF
+ 22514 .L573:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 22515 .loc 2 383 0
+ 22516 154a8 8385ECFE addl $1, -276(%rbp)
+ 22516 FFFF01
+ 22517 .L571:
+ 22518 154af 83BDECFE cmpl $15, -276(%rbp)
+ 22518 FFFF0F
+ 22519 154b6 769B jbe .L574
+
GAS LISTING /tmp/ccMa7HLZ.s page 684
+
+
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 22520 .loc 2 391 0
+ 22521 154b8 F30F6F85 movdqu -1776(%rbp), %xmm0
+ 22521 10F9FFFF
+ 22522 .LBE2635:
+ 22523 .LBE2634:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 22524 .loc 2 872 0
+ 22525 154c0 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 22525 00FEFFFF
+ 22526 154c8 F30F6F85 movdqu -528(%rbp), %xmm0
+ 22526 F0FDFFFF
+ 22527 154d0 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 22527 00FFFFFF
+ 22528 154d8 F30F6F85 movdqu -512(%rbp), %xmm0
+ 22528 00FEFFFF
+ 22529 154e0 F30F7F85 movdqu %xmm0, -272(%rbp)
+ 22529 F0FEFFFF
+ 22530 .LBB2636:
+ 22531 .LBB2637:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 22532 .loc 2 234 0
+ 22533 154e8 F30F6F85 movdqu -272(%rbp), %xmm0
+ 22533 F0FEFFFF
+ 22534 154f0 F30F6F8D movdqu -256(%rbp), %xmm1
+ 22534 00FFFFFF
+ 22535 154f8 660FEBC1 por %xmm1, %xmm0
+ 22536 .LBE2637:
+ 22537 .LBE2636:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 22538 .loc 2 874 0
+ 22539 154fc F30F7F85 movdqu %xmm0, -528(%rbp)
+ 22539 F0FDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 22540 .loc 2 876 0
+ 22541 15504 660F6F05 movdqa vec_01(%rip), %xmm0
+ 22541 00000000
+ 22542 1550c F30F6F8D movdqu -496(%rbp), %xmm1
+ 22542 10FEFFFF
+ 22543 15514 F30F7F8D movdqu %xmm1, -224(%rbp)
+ 22543 20FFFFFF
+ 22544 1551c F30F7F85 movdqu %xmm0, -240(%rbp)
+ 22544 10FFFFFF
+ 22545 .LBB2638:
+ 22546 .LBB2639:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 22547 .loc 2 290 0
+ 22548 15524 F30F6F8D movdqu -240(%rbp), %xmm1
+ 22548 10FFFFFF
+ 22549 1552c F30F6F85 movdqu -224(%rbp), %xmm0
+ 22549 20FFFFFF
+ 22550 15534 660FF8C1 psubb %xmm1, %xmm0
+ 22551 .LBE2639:
+ 22552 .LBE2638:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 22553 .loc 2 876 0
+ 22554 15538 F30F7F85 movdqu %xmm0, -496(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 685
+
+
+ 22554 10FEFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 22555 .loc 2 878 0
+ 22556 15540 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 22556 00000000
+ 22557 15548 F30F6F8D movdqu -496(%rbp), %xmm1
+ 22557 10FEFFFF
+ 22558 15550 F30F7F8D movdqu %xmm1, -192(%rbp)
+ 22558 40FFFFFF
+ 22559 15558 F30F7F85 movdqu %xmm0, -208(%rbp)
+ 22559 30FFFFFF
+ 22560 .LBB2640:
+ 22561 .LBB2641:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 22562 .loc 2 206 0
+ 22563 15560 F30F6F85 movdqu -208(%rbp), %xmm0
+ 22563 30FFFFFF
+ 22564 15568 F30F6F8D movdqu -192(%rbp), %xmm1
+ 22564 40FFFFFF
+ 22565 15570 660FDBC1 pand %xmm1, %xmm0
+ 22566 .LBE2641:
+ 22567 .LBE2640:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 22568 .loc 2 878 0
+ 22569 15574 F30F7F85 movdqu %xmm0, -496(%rbp)
+ 22569 10FEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 22570 .loc 2 866 0
+ 22571 1557c 8385ECFD addl $1, -532(%rbp)
+ 22571 FFFF01
+ 22572 .L566:
+ 22573 15583 83BDECFD cmpl $15, -532(%rbp)
+ 22573 FFFF0F
+ 22574 1558a 0F866DFD jbe .L575
+ 22574 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 22575 .loc 2 882 0
+ 22576 15590 F30F6F85 movdqu -528(%rbp), %xmm0
+ 22576 F0FDFFFF
+ 22577 .LBE2625:
+ 22578 .LBE2624:
+ 22579 .LBE2623:
+ 22580 .LBE2622:
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+ 22581 .loc 2 2063 0
+ 22582 15598 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 22582 A0FDFFFF
+ 22583 .LBB2642:
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+ 22584 .loc 2 2065 0
+ 22585 155a0 F30F6F85 movdqu -608(%rbp), %xmm0
+ 22585 A0FDFFFF
+ 22586 155a8 F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 22586 A0F8FFFF
+ 22587 155b0 E8000000 call KDbgWriterGet at PLT
+ 22587 00
+ 22588 155b5 4885C0 testq %rax, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 686
+
+
+ 22589 155b8 7479 je .L577
+ 22590 155ba BF010000 movl $1, %edi
+ 22590 00
+ 22591 155bf E8000000 call KDbgCondToFlag at PLT
+ 22591 00
+ 22592 155c4 4889C6 movq %rax, %rsi
+ 22593 155c7 BF100000 movl $16, %edi
+ 22593 00
+ 22594 155cc E8000000 call KDbgTestModConds at PLT
+ 22594 00
+ 22595 155d1 84C0 testb %al, %al
+ 22596 155d3 745E je .L577
+ 22597 155d5 8B85ACF8 movl -1876(%rbp), %eax
+ 22597 FFFF
+ 22598 155db 89C7 movl %eax, %edi
+ 22599 155dd E81EAAFE call bswap_32
+ 22599 FF
+ 22600 155e2 4189C5 movl %eax, %r13d
+ 22601 155e5 8B85A8F8 movl -1880(%rbp), %eax
+ 22601 FFFF
+ 22602 155eb 89C7 movl %eax, %edi
+ 22603 155ed E80EAAFE call bswap_32
+ 22603 FF
+ 22604 155f2 4189C4 movl %eax, %r12d
+ 22605 155f5 8B85A4F8 movl -1884(%rbp), %eax
+ 22605 FFFF
+ 22606 155fb 89C7 movl %eax, %edi
+ 22607 155fd E8FEA9FE call bswap_32
+ 22607 FF
+ 22608 15602 89C3 movl %eax, %ebx
+ 22609 15604 8B85A0F8 movl -1888(%rbp), %eax
+ 22609 FFFF
+ 22610 1560a 89C7 movl %eax, %edi
+ 22611 1560c E8EFA9FE call bswap_32
+ 22611 FF
+ 22612 15611 4589E9 movl %r13d, %r9d
+ 22613 15614 4589E0 movl %r12d, %r8d
+ 22614 15617 89D9 movl %ebx, %ecx
+ 22615 15619 89C2 movl %eax, %edx
+ 22616 1561b 488D3500 leaq .LC8(%rip), %rsi
+ 22616 000000
+ 22617 15622 488D3D00 leaq .LC1(%rip), %rdi
+ 22617 000000
+ 22618 15629 B8000000 movl $0, %eax
+ 22618 00
+ 22619 1562e E8000000 call KDbgMsg at PLT
+ 22619 00
+ 22620 .L577:
+ 22621 15633 F30F6F85 movdqu -608(%rbp), %xmm0
+ 22621 A0FDFFFF
+ 22622 1563b F30F7F85 movdqu %xmm0, -176(%rbp)
+ 22622 50FFFFFF
+ 22623 .LBE2642:
+ 22624 .LBB2643:
+ 22625 .LBB2644:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 22626 .loc 2 581 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 687
+
+
+ 22627 15643 660F6F05 movdqa ShiftRowTable.6741(%rip), %xmm0
+ 22627 00000000
+ 22628 1564b F30F6F8D movdqu -176(%rbp), %xmm1
+ 22628 50FFFFFF
+ 22629 15653 F30F7F8D movdqu %xmm1, -144(%rbp)
+ 22629 70FFFFFF
+ 22630 1565b F30F7F85 movdqu %xmm0, -160(%rbp)
+ 22630 60FFFFFF
+ 22631 .LBB2645:
+ 22632 .LBB2646:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 22633 .loc 2 380 0
+ 22634 15663 F30F6F85 movdqu -144(%rbp), %xmm0
+ 22634 70FFFFFF
+ 22635 1566b F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 22635 30F9FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 22636 .loc 2 381 0
+ 22637 15673 F30F6F85 movdqu -160(%rbp), %xmm0
+ 22637 60FFFFFF
+ 22638 1567b F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 22638 20F9FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 22639 .loc 2 383 0
+ 22640 15683 C7458C00 movl $0, -116(%rbp)
+ 22640 000000
+ 22641 1568a EB4D jmp .L578
+ 22642 .L581:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 22643 .loc 2 385 0
+ 22644 1568c 8B458C movl -116(%rbp), %eax
+ 22645 1568f 89C0 mov %eax, %eax
+ 22646 15691 0FB68405 movzbl -1760(%rbp,%rax), %eax
+ 22646 20F9FFFF
+ 22647 15699 84C0 testb %al, %al
+ 22648 1569b 790F jns .L579
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 22649 .loc 2 386 0
+ 22650 1569d 8B458C movl -116(%rbp), %eax
+ 22651 156a0 89C0 mov %eax, %eax
+ 22652 156a2 C6840540 movb $0, -1728(%rbp,%rax)
+ 22652 F9FFFF00
+ 22653 156aa EB29 jmp .L580
+ 22654 .L579:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 22655 .loc 2 388 0
+ 22656 156ac 8B4D8C movl -116(%rbp), %ecx
+ 22657 156af 8B458C movl -116(%rbp), %eax
+ 22658 156b2 89C0 mov %eax, %eax
+ 22659 156b4 0FB68405 movzbl -1760(%rbp,%rax), %eax
+ 22659 20F9FFFF
+ 22660 156bc 0FB6C0 movzbl %al, %eax
+ 22661 156bf 83E00F andl $15, %eax
+ 22662 156c2 4898 cltq
+ 22663 156c4 0FB69405 movzbl -1744(%rbp,%rax), %edx
+ 22663 30F9FFFF
+ 22664 156cc 89C8 mov %ecx, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 688
+
+
+ 22665 156ce 88940540 movb %dl, -1728(%rbp,%rax)
+ 22665 F9FFFF
+ 22666 .L580:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 22667 .loc 2 383 0
+ 22668 156d5 83458C01 addl $1, -116(%rbp)
+ 22669 .L578:
+ 22670 156d9 837D8C0F cmpl $15, -116(%rbp)
+ 22671 156dd 76AD jbe .L581
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 22672 .loc 2 391 0
+ 22673 156df F30F6F85 movdqu -1728(%rbp), %xmm0
+ 22673 40F9FFFF
+ 22674 .LBE2646:
+ 22675 .LBE2645:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 22676 .loc 2 581 0
+ 22677 156e7 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 22677 50FFFFFF
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 22678 .loc 2 582 0
+ 22679 156ef F30F6F85 movdqu -176(%rbp), %xmm0
+ 22679 50FFFFFF
+ 22680 .LBE2644:
+ 22681 .LBE2643:
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+ 22682 .loc 2 2067 0
+ 22683 156f7 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 22683 A0FDFFFF
+ 22684 .LBB2647:
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+ 22685 .loc 2 2069 0
+ 22686 156ff F30F6F85 movdqu -608(%rbp), %xmm0
+ 22686 A0FDFFFF
+ 22687 15707 F30F7F85 movdqu %xmm0, -1904(%rbp)
+ 22687 90F8FFFF
+ 22688 1570f E8000000 call KDbgWriterGet at PLT
+ 22688 00
+ 22689 15714 4885C0 testq %rax, %rax
+ 22690 15717 7479 je .L583
+ 22691 15719 BF010000 movl $1, %edi
+ 22691 00
+ 22692 1571e E8000000 call KDbgCondToFlag at PLT
+ 22692 00
+ 22693 15723 4889C6 movq %rax, %rsi
+ 22694 15726 BF100000 movl $16, %edi
+ 22694 00
+ 22695 1572b E8000000 call KDbgTestModConds at PLT
+ 22695 00
+ 22696 15730 84C0 testb %al, %al
+ 22697 15732 745E je .L583
+ 22698 15734 8B859CF8 movl -1892(%rbp), %eax
+ 22698 FFFF
+ 22699 1573a 89C7 movl %eax, %edi
+ 22700 1573c E8BFA8FE call bswap_32
+ 22700 FF
+ 22701 15741 4189C5 movl %eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s page 689
+
+
+ 22702 15744 8B8598F8 movl -1896(%rbp), %eax
+ 22702 FFFF
+ 22703 1574a 89C7 movl %eax, %edi
+ 22704 1574c E8AFA8FE call bswap_32
+ 22704 FF
+ 22705 15751 4189C4 movl %eax, %r12d
+ 22706 15754 8B8594F8 movl -1900(%rbp), %eax
+ 22706 FFFF
+ 22707 1575a 89C7 movl %eax, %edi
+ 22708 1575c E89FA8FE call bswap_32
+ 22708 FF
+ 22709 15761 89C3 movl %eax, %ebx
+ 22710 15763 8B8590F8 movl -1904(%rbp), %eax
+ 22710 FFFF
+ 22711 15769 89C7 movl %eax, %edi
+ 22712 1576b E890A8FE call bswap_32
+ 22712 FF
+ 22713 15770 4589E9 movl %r13d, %r9d
+ 22714 15773 4589E0 movl %r12d, %r8d
+ 22715 15776 89D9 movl %ebx, %ecx
+ 22716 15778 89C2 movl %eax, %edx
+ 22717 1577a 488D3500 leaq .LC9(%rip), %rsi
+ 22717 000000
+ 22718 15781 488D3D00 leaq .LC1(%rip), %rdi
+ 22718 000000
+ 22719 15788 B8000000 movl $0, %eax
+ 22719 00
+ 22720 1578d E8000000 call KDbgMsg at PLT
+ 22720 00
+ 22721 .L583:
+ 22722 15792 F30F6F85 movdqu -608(%rbp), %xmm0
+ 22722 A0FDFFFF
+ 22723 1579a F30F7F45 movdqu %xmm0, -96(%rbp)
+ 22723 A0
+ 22724 1579f F30F6F85 movdqu -624(%rbp), %xmm0
+ 22724 90FDFFFF
+ 22725 157a7 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 22725 90
+ 22726 157ac F30F6F45 movdqu -96(%rbp), %xmm0
+ 22726 A0
+ 22727 157b1 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 22727 C0
+ 22728 157b6 F30F6F45 movdqu -112(%rbp), %xmm0
+ 22728 90
+ 22729 157bb F30F7F45 movdqu %xmm0, -80(%rbp)
+ 22729 B0
+ 22730 .LBE2647:
+ 22731 .LBB2648:
+ 22732 .LBB2649:
+ 22733 .LBB2650:
+ 22734 .LBB2651:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 22735 .loc 2 178 0
+ 22736 157c0 F30F6F45 movdqu -80(%rbp), %xmm0
+ 22736 B0
+ 22737 157c5 F30F6F4D movdqu -64(%rbp), %xmm1
+ 22737 C0
+
GAS LISTING /tmp/ccMa7HLZ.s page 690
+
+
+ 22738 157ca 660FEFC1 pxor %xmm1, %xmm0
+ 22739 .LBE2651:
+ 22740 .LBE2650:
+ 22741 .LBE2649:
+ 22742 .LBE2648:
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 22743 .loc 2 2071 0
+ 22744 157ce F30F7F85 movdqu %xmm0, -608(%rbp)
+ 22744 A0FDFFFF
+ 22745 .LBB2652:
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 22746 .loc 2 2073 0
+ 22747 157d6 F30F6F85 movdqu -624(%rbp), %xmm0
+ 22747 90FDFFFF
+ 22748 157de F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 22748 80F8FFFF
+ 22749 157e6 E8000000 call KDbgWriterGet at PLT
+ 22749 00
+ 22750 157eb 4885C0 testq %rax, %rax
+ 22751 157ee 7479 je .L585
+ 22752 157f0 BF010000 movl $1, %edi
+ 22752 00
+ 22753 157f5 E8000000 call KDbgCondToFlag at PLT
+ 22753 00
+ 22754 157fa 4889C6 movq %rax, %rsi
+ 22755 157fd BF100000 movl $16, %edi
+ 22755 00
+ 22756 15802 E8000000 call KDbgTestModConds at PLT
+ 22756 00
+ 22757 15807 84C0 testb %al, %al
+ 22758 15809 745E je .L585
+ 22759 1580b 8B858CF8 movl -1908(%rbp), %eax
+ 22759 FFFF
+ 22760 15811 89C7 movl %eax, %edi
+ 22761 15813 E8E8A7FE call bswap_32
+ 22761 FF
+ 22762 15818 4189C5 movl %eax, %r13d
+ 22763 1581b 8B8588F8 movl -1912(%rbp), %eax
+ 22763 FFFF
+ 22764 15821 89C7 movl %eax, %edi
+ 22765 15823 E8D8A7FE call bswap_32
+ 22765 FF
+ 22766 15828 4189C4 movl %eax, %r12d
+ 22767 1582b 8B8584F8 movl -1916(%rbp), %eax
+ 22767 FFFF
+ 22768 15831 89C7 movl %eax, %edi
+ 22769 15833 E8C8A7FE call bswap_32
+ 22769 FF
+ 22770 15838 89C3 movl %eax, %ebx
+ 22771 1583a 8B8580F8 movl -1920(%rbp), %eax
+ 22771 FFFF
+ 22772 15840 89C7 movl %eax, %edi
+ 22773 15842 E8B9A7FE call bswap_32
+ 22773 FF
+ 22774 15847 4589E9 movl %r13d, %r9d
+ 22775 1584a 4589E0 movl %r12d, %r8d
+ 22776 1584d 89D9 movl %ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 691
+
+
+ 22777 1584f 89C2 movl %eax, %edx
+ 22778 15851 488D3500 leaq .LC6(%rip), %rsi
+ 22778 000000
+ 22779 15858 488D3D00 leaq .LC1(%rip), %rdi
+ 22779 000000
+ 22780 1585f B8000000 movl $0, %eax
+ 22780 00
+ 22781 15864 E8000000 call KDbgMsg at PLT
+ 22781 00
+ 22782 .L585:
+ 22783 .LBE2652:
+ 22784 .LBB2653:
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+ 22785 .loc 2 2074 0
+ 22786 15869 F30F6F85 movdqu -608(%rbp), %xmm0
+ 22786 A0FDFFFF
+ 22787 15871 F30F7F85 movdqu %xmm0, -1936(%rbp)
+ 22787 70F8FFFF
+ 22788 15879 E8000000 call KDbgWriterGet at PLT
+ 22788 00
+ 22789 1587e 4885C0 testq %rax, %rax
+ 22790 15881 7479 je .L587
+ 22791 15883 BF010000 movl $1, %edi
+ 22791 00
+ 22792 15888 E8000000 call KDbgCondToFlag at PLT
+ 22792 00
+ 22793 1588d 4889C6 movq %rax, %rsi
+ 22794 15890 BF100000 movl $16, %edi
+ 22794 00
+ 22795 15895 E8000000 call KDbgTestModConds at PLT
+ 22795 00
+ 22796 1589a 84C0 testb %al, %al
+ 22797 1589c 745E je .L587
+ 22798 1589e 8B857CF8 movl -1924(%rbp), %eax
+ 22798 FFFF
+ 22799 158a4 89C7 movl %eax, %edi
+ 22800 158a6 E855A7FE call bswap_32
+ 22800 FF
+ 22801 158ab 4189C5 movl %eax, %r13d
+ 22802 158ae 8B8578F8 movl -1928(%rbp), %eax
+ 22802 FFFF
+ 22803 158b4 89C7 movl %eax, %edi
+ 22804 158b6 E845A7FE call bswap_32
+ 22804 FF
+ 22805 158bb 4189C4 movl %eax, %r12d
+ 22806 158be 8B8574F8 movl -1932(%rbp), %eax
+ 22806 FFFF
+ 22807 158c4 89C7 movl %eax, %edi
+ 22808 158c6 E835A7FE call bswap_32
+ 22808 FF
+ 22809 158cb 89C3 movl %eax, %ebx
+ 22810 158cd 8B8570F8 movl -1936(%rbp), %eax
+ 22810 FFFF
+ 22811 158d3 89C7 movl %eax, %edi
+ 22812 158d5 E826A7FE call bswap_32
+ 22812 FF
+ 22813 158da 4589E9 movl %r13d, %r9d
+
GAS LISTING /tmp/ccMa7HLZ.s page 692
+
+
+ 22814 158dd 4589E0 movl %r12d, %r8d
+ 22815 158e0 89D9 movl %ebx, %ecx
+ 22816 158e2 89C2 movl %eax, %edx
+ 22817 158e4 488D3500 leaq .LC11(%rip), %rsi
+ 22817 000000
+ 22818 158eb 488D3D00 leaq .LC1(%rip), %rdi
+ 22818 000000
+ 22819 158f2 B8000000 movl $0, %eax
+ 22819 00
+ 22820 158f7 E8000000 call KDbgMsg at PLT
+ 22820 00
+ 22821 .L587:
+ 22822 .LBE2653:
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 22823 .loc 2 2076 0
+ 22824 158fc F30F6F85 movdqu -608(%rbp), %xmm0
+ 22824 A0FDFFFF
+ 22825 .LBE2620:
+ 22826 .LBE2619:
+2103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 22827 .loc 2 2103 0
+ 22828 15904 4881C4C8 addq $2504, %rsp
+ 22828 090000
+ 22829 1590b 5B popq %rbx
+ 22830 1590c 415C popq %r12
+ 22831 1590e 415D popq %r13
+ 22832 15910 415E popq %r14
+ 22833 15912 415F popq %r15
+ 22834 15914 C9 leave
+ 22835 15915 C3 ret
+ 22836 .cfi_endproc
+ 22837 .LFE573:
+ 22838 .size KAESBlockCipherVecCipher, .-KAESBlockCipherVecCipher
+ 22839 .section .rodata
+ 22840 .LC12:
+ 22841 0433 41667465 .string "After InvSubBy"
+ 22841 7220496E
+ 22841 76537562
+ 22841 427900
+ 22842 .LC13:
+ 22843 0442 41667465 .string "After InvShift"
+ 22843 7220496E
+ 22843 76536869
+ 22843 667400
+ 22844 .LC14:
+ 22845 0451 41667465 .string "After InvMixCo"
+ 22845 7220496E
+ 22845 764D6978
+ 22845 436F00
+ 22846 .text
+ 22847 .type KAESBlockCipherVecEqInvCipher, @function
+ 22848 KAESBlockCipherVecEqInvCipher:
+ 22849 .LFB577:
+2271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 22850 .loc 2 2271 0
+ 22851 .cfi_startproc
+ 22852 15916 55 pushq %rbp
+
GAS LISTING /tmp/ccMa7HLZ.s page 693
+
+
+ 22853 .LCFI18:
+ 22854 .cfi_def_cfa_offset 16
+ 22855 15917 4889E5 movq %rsp, %rbp
+ 22856 .cfi_offset 6, -16
+ 22857 .LCFI19:
+ 22858 .cfi_def_cfa_register 6
+ 22859 1591a 4157 pushq %r15
+ 22860 1591c 4156 pushq %r14
+ 22861 1591e 4155 pushq %r13
+ 22862 15920 4154 pushq %r12
+ 22863 15922 53 pushq %rbx
+ 22864 15923 4881EC88 subq $2696, %rsp
+ 22864 0A0000
+ 22865 1592a 660F7F85 movdqa %xmm0, -2560(%rbp)
+ 22865 00F6FFFF
+ 22866 15932 4889BDF8 movq %rdi, -2568(%rbp)
+ 22866 F5FFFF
+ 22867 15939 89B5F4F5 movl %esi, -2572(%rbp)
+ 22867 FFFF
+2272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix = 0;
+ 22868 .loc 2 2272 0
+ 22869 1593f C785DCF8 movl $0, -1828(%rbp)
+ 22869 FFFF0000
+ 22869 0000
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+ 22870 .loc 2 2274 0
+ 22871 15949 8B85DCF8 mov -1828(%rbp), %eax
+ 22871 FFFF
+ 22872 1594f 48C1E004 salq $4, %rax
+ 22873 15953 480385F8 addq -2568(%rbp), %rax
+ 22873 F5FFFF
+ 22874 1595a 660F6F00 movdqa (%rax), %xmm0
+ 22875 1595e 8385DCF8 addl $1, -1828(%rbp)
+ 22875 FFFF01
+ 22876 15965 660F6F8D movdqa -2560(%rbp), %xmm1
+ 22876 00F6FFFF
+ 22877 1596d F30F7F8D movdqu %xmm1, -1808(%rbp)
+ 22877 F0F8FFFF
+ 22878 15975 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 22878 E0F8FFFF
+ 22879 .LBB2777:
+ 22880 .LBB2778:
+ 22881 .LBB2779:
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 22882 .loc 2 2133 0
+ 22883 1597d F30F6F85 movdqu -1808(%rbp), %xmm0
+ 22883 F0F8FFFF
+ 22884 15985 F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 22884 30F6FFFF
+ 22885 .cfi_offset 3, -56
+ 22886 .cfi_offset 12, -48
+ 22887 .cfi_offset 13, -40
+ 22888 .cfi_offset 14, -32
+ 22889 .cfi_offset 15, -24
+ 22890 1598d E8000000 call KDbgWriterGet at PLT
+ 22890 00
+ 22891 15992 4885C0 testq %rax, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 694
+
+
+ 22892 15995 7479 je .L591
+ 22893 15997 BF030000 movl $3, %edi
+ 22893 00
+ 22894 1599c E8000000 call KDbgCondToFlag at PLT
+ 22894 00
+ 22895 159a1 4889C6 movq %rax, %rsi
+ 22896 159a4 BF100000 movl $16, %edi
+ 22896 00
+ 22897 159a9 E8000000 call KDbgTestModConds at PLT
+ 22897 00
+ 22898 159ae 84C0 testb %al, %al
+ 22899 159b0 745E je .L591
+ 22900 159b2 8B853CF6 movl -2500(%rbp), %eax
+ 22900 FFFF
+ 22901 159b8 89C7 movl %eax, %edi
+ 22902 159ba E841A6FE call bswap_32
+ 22902 FF
+ 22903 159bf 4189C5 movl %eax, %r13d
+ 22904 159c2 8B8538F6 movl -2504(%rbp), %eax
+ 22904 FFFF
+ 22905 159c8 89C7 movl %eax, %edi
+ 22906 159ca E831A6FE call bswap_32
+ 22906 FF
+ 22907 159cf 4189C4 movl %eax, %r12d
+ 22908 159d2 8B8534F6 movl -2508(%rbp), %eax
+ 22908 FFFF
+ 22909 159d8 89C7 movl %eax, %edi
+ 22910 159da E821A6FE call bswap_32
+ 22910 FF
+ 22911 159df 89C3 movl %eax, %ebx
+ 22912 159e1 8B8530F6 movl -2512(%rbp), %eax
+ 22912 FFFF
+ 22913 159e7 89C7 movl %eax, %edi
+ 22914 159e9 E812A6FE call bswap_32
+ 22914 FF
+ 22915 159ee 4589E9 movl %r13d, %r9d
+ 22916 159f1 4589E0 movl %r12d, %r8d
+ 22917 159f4 89D9 movl %ebx, %ecx
+ 22918 159f6 89C2 movl %eax, %edx
+ 22919 159f8 488D3500 leaq .LC5(%rip), %rsi
+ 22919 000000
+ 22920 159ff 488D3D00 leaq .LC1(%rip), %rdi
+ 22920 000000
+ 22921 15a06 B8000000 movl $0, %eax
+ 22921 00
+ 22922 15a0b E8000000 call KDbgMsg at PLT
+ 22922 00
+ 22923 .L591:
+ 22924 15a10 F30F6F85 movdqu -1808(%rbp), %xmm0
+ 22924 F0F8FFFF
+ 22925 15a18 F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 22925 10F9FFFF
+ 22926 15a20 F30F6F85 movdqu -1824(%rbp), %xmm0
+ 22926 E0F8FFFF
+ 22927 15a28 F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 22927 00F9FFFF
+ 22928 15a30 F30F6F85 movdqu -1776(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 695
+
+
+ 22928 10F9FFFF
+ 22929 15a38 F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 22929 30F9FFFF
+ 22930 15a40 F30F6F85 movdqu -1792(%rbp), %xmm0
+ 22930 00F9FFFF
+ 22931 15a48 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 22931 20F9FFFF
+ 22932 .LBE2779:
+ 22933 .LBB2780:
+ 22934 .LBB2781:
+ 22935 .LBB2782:
+ 22936 .LBB2783:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 22937 .loc 2 178 0
+ 22938 15a50 F30F6F85 movdqu -1760(%rbp), %xmm0
+ 22938 20F9FFFF
+ 22939 15a58 F30F6F8D movdqu -1744(%rbp), %xmm1
+ 22939 30F9FFFF
+ 22940 15a60 660FEFC1 pxor %xmm1, %xmm0
+ 22941 .LBE2783:
+ 22942 .LBE2782:
+ 22943 .LBE2781:
+ 22944 .LBE2780:
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 22945 .loc 2 2135 0
+ 22946 15a64 F30F7F85 movdqu %xmm0, -1808(%rbp)
+ 22946 F0F8FFFF
+ 22947 .LBB2784:
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 22948 .loc 2 2137 0
+ 22949 15a6c F30F6F85 movdqu -1824(%rbp), %xmm0
+ 22949 E0F8FFFF
+ 22950 15a74 F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 22950 20F6FFFF
+ 22951 15a7c E8000000 call KDbgWriterGet at PLT
+ 22951 00
+ 22952 15a81 4885C0 testq %rax, %rax
+ 22953 15a84 7479 je .L593
+ 22954 15a86 BF030000 movl $3, %edi
+ 22954 00
+ 22955 15a8b E8000000 call KDbgCondToFlag at PLT
+ 22955 00
+ 22956 15a90 4889C6 movq %rax, %rsi
+ 22957 15a93 BF100000 movl $16, %edi
+ 22957 00
+ 22958 15a98 E8000000 call KDbgTestModConds at PLT
+ 22958 00
+ 22959 15a9d 84C0 testb %al, %al
+ 22960 15a9f 745E je .L593
+ 22961 15aa1 8B852CF6 movl -2516(%rbp), %eax
+ 22961 FFFF
+ 22962 15aa7 89C7 movl %eax, %edi
+ 22963 15aa9 E852A5FE call bswap_32
+ 22963 FF
+ 22964 15aae 4189C5 movl %eax, %r13d
+ 22965 15ab1 8B8528F6 movl -2520(%rbp), %eax
+ 22965 FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 696
+
+
+ 22966 15ab7 89C7 movl %eax, %edi
+ 22967 15ab9 E842A5FE call bswap_32
+ 22967 FF
+ 22968 15abe 4189C4 movl %eax, %r12d
+ 22969 15ac1 8B8524F6 movl -2524(%rbp), %eax
+ 22969 FFFF
+ 22970 15ac7 89C7 movl %eax, %edi
+ 22971 15ac9 E832A5FE call bswap_32
+ 22971 FF
+ 22972 15ace 89C3 movl %eax, %ebx
+ 22973 15ad0 8B8520F6 movl -2528(%rbp), %eax
+ 22973 FFFF
+ 22974 15ad6 89C7 movl %eax, %edi
+ 22975 15ad8 E823A5FE call bswap_32
+ 22975 FF
+ 22976 15add 4589E9 movl %r13d, %r9d
+ 22977 15ae0 4589E0 movl %r12d, %r8d
+ 22978 15ae3 89D9 movl %ebx, %ecx
+ 22979 15ae5 89C2 movl %eax, %edx
+ 22980 15ae7 488D3500 leaq .LC6(%rip), %rsi
+ 22980 000000
+ 22981 15aee 488D3D00 leaq .LC1(%rip), %rdi
+ 22981 000000
+ 22982 15af5 B8000000 movl $0, %eax
+ 22982 00
+ 22983 15afa E8000000 call KDbgMsg at PLT
+ 22983 00
+ 22984 .L593:
+ 22985 .LBE2784:
+ 22986 .LBB2785:
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 22987 .loc 2 2138 0
+ 22988 15aff F30F6F85 movdqu -1808(%rbp), %xmm0
+ 22988 F0F8FFFF
+ 22989 15b07 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 22989 10F6FFFF
+ 22990 15b0f E8000000 call KDbgWriterGet at PLT
+ 22990 00
+ 22991 15b14 4885C0 testq %rax, %rax
+ 22992 15b17 7479 je .L595
+ 22993 15b19 BF030000 movl $3, %edi
+ 22993 00
+ 22994 15b1e E8000000 call KDbgCondToFlag at PLT
+ 22994 00
+ 22995 15b23 4889C6 movq %rax, %rsi
+ 22996 15b26 BF100000 movl $16, %edi
+ 22996 00
+ 22997 15b2b E8000000 call KDbgTestModConds at PLT
+ 22997 00
+ 22998 15b30 84C0 testb %al, %al
+ 22999 15b32 745E je .L595
+ 23000 15b34 8B851CF6 movl -2532(%rbp), %eax
+ 23000 FFFF
+ 23001 15b3a 89C7 movl %eax, %edi
+ 23002 15b3c E8BFA4FE call bswap_32
+ 23002 FF
+ 23003 15b41 4189C5 movl %eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s page 697
+
+
+ 23004 15b44 8B8518F6 movl -2536(%rbp), %eax
+ 23004 FFFF
+ 23005 15b4a 89C7 movl %eax, %edi
+ 23006 15b4c E8AFA4FE call bswap_32
+ 23006 FF
+ 23007 15b51 4189C4 movl %eax, %r12d
+ 23008 15b54 8B8514F6 movl -2540(%rbp), %eax
+ 23008 FFFF
+ 23009 15b5a 89C7 movl %eax, %edi
+ 23010 15b5c E89FA4FE call bswap_32
+ 23010 FF
+ 23011 15b61 89C3 movl %eax, %ebx
+ 23012 15b63 8B8510F6 movl -2544(%rbp), %eax
+ 23012 FFFF
+ 23013 15b69 89C7 movl %eax, %edi
+ 23014 15b6b E890A4FE call bswap_32
+ 23014 FF
+ 23015 15b70 4589E9 movl %r13d, %r9d
+ 23016 15b73 4589E0 movl %r12d, %r8d
+ 23017 15b76 89D9 movl %ebx, %ecx
+ 23018 15b78 89C2 movl %eax, %edx
+ 23019 15b7a 488D3500 leaq .LC11(%rip), %rsi
+ 23019 000000
+ 23020 15b81 488D3D00 leaq .LC1(%rip), %rdi
+ 23020 000000
+ 23021 15b88 B8000000 movl $0, %eax
+ 23021 00
+ 23022 15b8d E8000000 call KDbgMsg at PLT
+ 23022 00
+ 23023 .L595:
+ 23024 .LBE2785:
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 23025 .loc 2 2139 0
+ 23026 15b92 F30F6F85 movdqu -1808(%rbp), %xmm0
+ 23026 F0F8FFFF
+ 23027 .LBE2778:
+ 23028 .LBE2777:
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+ 23029 .loc 2 2274 0
+ 23030 15b9a 660F7F85 movdqa %xmm0, -2560(%rbp)
+ 23030 00F6FFFF
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 23031 .loc 2 2276 0
+ 23032 15ba2 E9F61100 jmp .L596
+ 23032 00
+ 23033 .L637:
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+ 23034 .loc 2 2277 0
+ 23035 15ba7 8B85DCF8 mov -1828(%rbp), %eax
+ 23035 FFFF
+ 23036 15bad 48C1E004 salq $4, %rax
+ 23037 15bb1 480385F8 addq -2568(%rbp), %rax
+ 23037 F5FFFF
+ 23038 15bb8 660F6F00 movdqa (%rax), %xmm0
+ 23039 15bbc 660F6F8D movdqa -2560(%rbp), %xmm1
+ 23039 00F6FFFF
+ 23040 15bc4 F30F7F8D movdqu %xmm1, -1712(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 698
+
+
+ 23040 50F9FFFF
+ 23041 15bcc F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 23041 40F9FFFF
+ 23042 .LBB2786:
+ 23043 .LBB2787:
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 23044 .loc 2 2167 0
+ 23045 15bd4 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 23045 50F9FFFF
+ 23046 15bdc F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 23046 70F9FFFF
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+ 23047 .loc 2 2168 0
+ 23048 15be4 F30F6F85 movdqu -1728(%rbp), %xmm0
+ 23048 40F9FFFF
+ 23049 15bec F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 23049 60F9FFFF
+ 23050 .LBB2788:
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+ 23051 .loc 2 2171 0
+ 23052 15bf4 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 23052 70F9FFFF
+ 23053 15bfc F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 23053 90F6FFFF
+ 23054 15c04 E8000000 call KDbgWriterGet at PLT
+ 23054 00
+ 23055 15c09 4885C0 testq %rax, %rax
+ 23056 15c0c 7479 je .L598
+ 23057 15c0e BF030000 movl $3, %edi
+ 23057 00
+ 23058 15c13 E8000000 call KDbgCondToFlag at PLT
+ 23058 00
+ 23059 15c18 4889C6 movq %rax, %rsi
+ 23060 15c1b BF100000 movl $16, %edi
+ 23060 00
+ 23061 15c20 E8000000 call KDbgTestModConds at PLT
+ 23061 00
+ 23062 15c25 84C0 testb %al, %al
+ 23063 15c27 745E je .L598
+ 23064 15c29 8B859CF6 movl -2404(%rbp), %eax
+ 23064 FFFF
+ 23065 15c2f 89C7 movl %eax, %edi
+ 23066 15c31 E8CAA3FE call bswap_32
+ 23066 FF
+ 23067 15c36 4189C5 movl %eax, %r13d
+ 23068 15c39 8B8598F6 movl -2408(%rbp), %eax
+ 23068 FFFF
+ 23069 15c3f 89C7 movl %eax, %edi
+ 23070 15c41 E8BAA3FE call bswap_32
+ 23070 FF
+ 23071 15c46 4189C4 movl %eax, %r12d
+ 23072 15c49 8B8594F6 movl -2412(%rbp), %eax
+ 23072 FFFF
+ 23073 15c4f 89C7 movl %eax, %edi
+ 23074 15c51 E8AAA3FE call bswap_32
+ 23074 FF
+ 23075 15c56 89C3 movl %eax, %ebx
+
GAS LISTING /tmp/ccMa7HLZ.s page 699
+
+
+ 23076 15c58 8B8590F6 movl -2416(%rbp), %eax
+ 23076 FFFF
+ 23077 15c5e 89C7 movl %eax, %edi
+ 23078 15c60 E89BA3FE call bswap_32
+ 23078 FF
+ 23079 15c65 4589E9 movl %r13d, %r9d
+ 23080 15c68 4589E0 movl %r12d, %r8d
+ 23081 15c6b 89D9 movl %ebx, %ecx
+ 23082 15c6d 89C2 movl %eax, %edx
+ 23083 15c6f 488D3500 leaq .LC5(%rip), %rsi
+ 23083 000000
+ 23084 15c76 488D3D00 leaq .LC1(%rip), %rdi
+ 23084 000000
+ 23085 15c7d B8000000 movl $0, %eax
+ 23085 00
+ 23086 15c82 E8000000 call KDbgMsg at PLT
+ 23086 00
+ 23087 .L598:
+ 23088 15c87 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 23088 50F9FFFF
+ 23089 15c8f F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 23089 80F9FFFF
+ 23090 15c97 F30F6F85 movdqu -1664(%rbp), %xmm0
+ 23090 80F9FFFF
+ 23091 15c9f F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 23091 A0F9FFFF
+ 23092 15ca7 488D0500 leaq KAESBlockCipherVecRijndaelInvSBoxV(%rip), %rax
+ 23092 000000
+ 23093 15cae 48898598 movq %rax, -1640(%rbp)
+ 23093 F9FFFF
+ 23094 .LBE2788:
+ 23095 .LBB2789:
+ 23096 .LBB2790:
+ 23097 .LBB2791:
+ 23098 .LBB2792:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 23099 .loc 2 851 0
+ 23100 15cb5 660F6F05 movdqa vec_00(%rip), %xmm0
+ 23100 00000000
+ 23101 15cbd F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 23101 C0F9FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 23102 .loc 2 854 0
+ 23103 15cc5 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 23103 00000000
+ 23104 15ccd F30F6F8D movdqu -1632(%rbp), %xmm1
+ 23104 A0F9FFFF
+ 23105 15cd5 F30F7F8D movdqu %xmm1, -1520(%rbp)
+ 23105 10FAFFFF
+ 23106 15cdd F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 23106 00FAFFFF
+ 23107 .LBB2793:
+ 23108 .LBB2794:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 23109 .loc 2 206 0
+ 23110 15ce5 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 23110 00FAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 700
+
+
+ 23111 15ced F30F6F8D movdqu -1520(%rbp), %xmm1
+ 23111 10FAFFFF
+ 23112 15cf5 660FDBC1 pand %xmm1, %xmm0
+ 23113 .LBE2794:
+ 23114 .LBE2793:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 23115 .loc 2 854 0
+ 23116 15cf9 F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 23116 F0F9FFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 23117 .loc 2 862 0
+ 23118 15d01 660F6F05 movdqa vec_10(%rip), %xmm0
+ 23118 00000000
+ 23119 15d09 F30F6F8D movdqu -1632(%rbp), %xmm1
+ 23119 A0F9FFFF
+ 23120 15d11 F30F7F8D movdqu %xmm1, -1488(%rbp)
+ 23120 30FAFFFF
+ 23121 15d19 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 23121 20FAFFFF
+ 23122 .LBB2795:
+ 23123 .loc 2 2642 0
+ 23124 15d21 0FB68530 movzbl -1488(%rbp), %eax
+ 23124 FAFFFF
+ 23125 15d28 0FB69520 movzbl -1504(%rbp), %edx
+ 23125 FAFFFF
+ 23126 15d2f 0FB6C0 movzbl %al, %eax
+ 23127 15d32 6689855E movw %ax, -2722(%rbp)
+ 23127 F5FFFF
+ 23128 15d39 0FB7855E movzwl -2722(%rbp), %eax
+ 23128 F5FFFF
+ 23129 15d40 F6F2 divb %dl
+ 23130 15d42 4189C7 movl %eax, %r15d
+ 23131 15d45 0FB68531 movzbl -1487(%rbp), %eax
+ 23131 FAFFFF
+ 23132 15d4c 0FB69521 movzbl -1503(%rbp), %edx
+ 23132 FAFFFF
+ 23133 15d53 0FB6C0 movzbl %al, %eax
+ 23134 15d56 6689855E movw %ax, -2722(%rbp)
+ 23134 F5FFFF
+ 23135 15d5d 0FB7855E movzwl -2722(%rbp), %eax
+ 23135 F5FFFF
+ 23136 15d64 F6F2 divb %dl
+ 23137 15d66 88858FF5 movb %al, -2673(%rbp)
+ 23137 FFFF
+ 23138 15d6c 0FB68532 movzbl -1486(%rbp), %eax
+ 23138 FAFFFF
+ 23139 15d73 0FB69522 movzbl -1502(%rbp), %edx
+ 23139 FAFFFF
+ 23140 15d7a 0FB6C0 movzbl %al, %eax
+ 23141 15d7d 6689855E movw %ax, -2722(%rbp)
+ 23141 F5FFFF
+ 23142 15d84 0FB7855E movzwl -2722(%rbp), %eax
+ 23142 F5FFFF
+ 23143 15d8b F6F2 divb %dl
+ 23144 15d8d 88858EF5 movb %al, -2674(%rbp)
+ 23144 FFFF
+ 23145 15d93 0FB68533 movzbl -1485(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 701
+
+
+ 23145 FAFFFF
+ 23146 15d9a 0FB69523 movzbl -1501(%rbp), %edx
+ 23146 FAFFFF
+ 23147 15da1 0FB6C0 movzbl %al, %eax
+ 23148 15da4 6689855E movw %ax, -2722(%rbp)
+ 23148 F5FFFF
+ 23149 15dab 0FB7855E movzwl -2722(%rbp), %eax
+ 23149 F5FFFF
+ 23150 15db2 F6F2 divb %dl
+ 23151 15db4 88858DF5 movb %al, -2675(%rbp)
+ 23151 FFFF
+ 23152 15dba 0FB68534 movzbl -1484(%rbp), %eax
+ 23152 FAFFFF
+ 23153 15dc1 0FB69524 movzbl -1500(%rbp), %edx
+ 23153 FAFFFF
+ 23154 15dc8 0FB6C0 movzbl %al, %eax
+ 23155 15dcb 6689855E movw %ax, -2722(%rbp)
+ 23155 F5FFFF
+ 23156 15dd2 0FB7855E movzwl -2722(%rbp), %eax
+ 23156 F5FFFF
+ 23157 15dd9 F6F2 divb %dl
+ 23158 15ddb 88858CF5 movb %al, -2676(%rbp)
+ 23158 FFFF
+ 23159 15de1 0FB68535 movzbl -1483(%rbp), %eax
+ 23159 FAFFFF
+ 23160 15de8 0FB69525 movzbl -1499(%rbp), %edx
+ 23160 FAFFFF
+ 23161 15def 0FB6C0 movzbl %al, %eax
+ 23162 15df2 6689855E movw %ax, -2722(%rbp)
+ 23162 F5FFFF
+ 23163 15df9 0FB7855E movzwl -2722(%rbp), %eax
+ 23163 F5FFFF
+ 23164 15e00 F6F2 divb %dl
+ 23165 15e02 4189C1 movl %eax, %r9d
+ 23166 15e05 0FB68536 movzbl -1482(%rbp), %eax
+ 23166 FAFFFF
+ 23167 15e0c 0FB69526 movzbl -1498(%rbp), %edx
+ 23167 FAFFFF
+ 23168 15e13 0FB6C0 movzbl %al, %eax
+ 23169 15e16 6689855E movw %ax, -2722(%rbp)
+ 23169 F5FFFF
+ 23170 15e1d 0FB7855E movzwl -2722(%rbp), %eax
+ 23170 F5FFFF
+ 23171 15e24 F6F2 divb %dl
+ 23172 15e26 89C7 movl %eax, %edi
+ 23173 15e28 0FB68537 movzbl -1481(%rbp), %eax
+ 23173 FAFFFF
+ 23174 15e2f 0FB69527 movzbl -1497(%rbp), %edx
+ 23174 FAFFFF
+ 23175 15e36 0FB6C0 movzbl %al, %eax
+ 23176 15e39 6689855E movw %ax, -2722(%rbp)
+ 23176 F5FFFF
+ 23177 15e40 0FB7855E movzwl -2722(%rbp), %eax
+ 23177 F5FFFF
+ 23178 15e47 F6F2 divb %dl
+ 23179 15e49 89C3 movl %eax, %ebx
+ 23180 15e4b 0FB68538 movzbl -1480(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 702
+
+
+ 23180 FAFFFF
+ 23181 15e52 0FB69528 movzbl -1496(%rbp), %edx
+ 23181 FAFFFF
+ 23182 15e59 0FB6C0 movzbl %al, %eax
+ 23183 15e5c 6689855E movw %ax, -2722(%rbp)
+ 23183 F5FFFF
+ 23184 15e63 0FB7855E movzwl -2722(%rbp), %eax
+ 23184 F5FFFF
+ 23185 15e6a F6F2 divb %dl
+ 23186 15e6c 4189C2 movl %eax, %r10d
+ 23187 15e6f 0FB68539 movzbl -1479(%rbp), %eax
+ 23187 FAFFFF
+ 23188 15e76 0FB69529 movzbl -1495(%rbp), %edx
+ 23188 FAFFFF
+ 23189 15e7d 0FB6C0 movzbl %al, %eax
+ 23190 15e80 6689855E movw %ax, -2722(%rbp)
+ 23190 F5FFFF
+ 23191 15e87 0FB7855E movzwl -2722(%rbp), %eax
+ 23191 F5FFFF
+ 23192 15e8e F6F2 divb %dl
+ 23193 15e90 4189C3 movl %eax, %r11d
+ 23194 15e93 0FB6853A movzbl -1478(%rbp), %eax
+ 23194 FAFFFF
+ 23195 15e9a 0FB6952A movzbl -1494(%rbp), %edx
+ 23195 FAFFFF
+ 23196 15ea1 0FB6C0 movzbl %al, %eax
+ 23197 15ea4 6689855E movw %ax, -2722(%rbp)
+ 23197 F5FFFF
+ 23198 15eab 0FB7855E movzwl -2722(%rbp), %eax
+ 23198 F5FFFF
+ 23199 15eb2 F6F2 divb %dl
+ 23200 15eb4 4189C4 movl %eax, %r12d
+ 23201 15eb7 0FB6853B movzbl -1477(%rbp), %eax
+ 23201 FAFFFF
+ 23202 15ebe 0FB6952B movzbl -1493(%rbp), %edx
+ 23202 FAFFFF
+ 23203 15ec5 0FB6C0 movzbl %al, %eax
+ 23204 15ec8 6689855E movw %ax, -2722(%rbp)
+ 23204 F5FFFF
+ 23205 15ecf 0FB7855E movzwl -2722(%rbp), %eax
+ 23205 F5FFFF
+ 23206 15ed6 F6F2 divb %dl
+ 23207 15ed8 4189C5 movl %eax, %r13d
+ 23208 15edb 0FB6853C movzbl -1476(%rbp), %eax
+ 23208 FAFFFF
+ 23209 15ee2 0FB6952C movzbl -1492(%rbp), %edx
+ 23209 FAFFFF
+ 23210 15ee9 0FB6C0 movzbl %al, %eax
+ 23211 15eec 6689855E movw %ax, -2722(%rbp)
+ 23211 F5FFFF
+ 23212 15ef3 0FB7855E movzwl -2722(%rbp), %eax
+ 23212 F5FFFF
+ 23213 15efa F6F2 divb %dl
+ 23214 15efc 4189C6 movl %eax, %r14d
+ 23215 15eff 0FB6853D movzbl -1475(%rbp), %eax
+ 23215 FAFFFF
+ 23216 15f06 0FB6952D movzbl -1491(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 703
+
+
+ 23216 FAFFFF
+ 23217 15f0d 0FB6C0 movzbl %al, %eax
+ 23218 15f10 6689855E movw %ax, -2722(%rbp)
+ 23218 F5FFFF
+ 23219 15f17 0FB7855E movzwl -2722(%rbp), %eax
+ 23219 F5FFFF
+ 23220 15f1e F6F2 divb %dl
+ 23221 15f20 4189C0 movl %eax, %r8d
+ 23222 15f23 0FB6853E movzbl -1474(%rbp), %eax
+ 23222 FAFFFF
+ 23223 15f2a 0FB6952E movzbl -1490(%rbp), %edx
+ 23223 FAFFFF
+ 23224 15f31 0FB6C0 movzbl %al, %eax
+ 23225 15f34 6689855E movw %ax, -2722(%rbp)
+ 23225 F5FFFF
+ 23226 15f3b 0FB7855E movzwl -2722(%rbp), %eax
+ 23226 F5FFFF
+ 23227 15f42 F6F2 divb %dl
+ 23228 15f44 89C6 movl %eax, %esi
+ 23229 15f46 0FB6853F movzbl -1473(%rbp), %eax
+ 23229 FAFFFF
+ 23230 15f4d 0FB6952F movzbl -1489(%rbp), %edx
+ 23230 FAFFFF
+ 23231 15f54 0FB6C0 movzbl %al, %eax
+ 23232 15f57 6689855E movw %ax, -2722(%rbp)
+ 23232 F5FFFF
+ 23233 15f5e 0FB7855E movzwl -2722(%rbp), %eax
+ 23233 F5FFFF
+ 23234 15f65 F6F2 divb %dl
+ 23235 15f67 89C1 movl %eax, %ecx
+ 23236 .LBB2796:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 23237 .loc 2 346 0
+ 23238 15f69 0FB6D3 movzbl %bl, %edx
+ 23239 15f6c 400FB6C7 movzbl %dil, %eax
+ 23240 15f70 48C1E208 salq $8, %rdx
+ 23241 15f74 4809C2 orq %rax, %rdx
+ 23242 15f77 410FB6C1 movzbl %r9b, %eax
+ 23243 15f7b 48C1E208 salq $8, %rdx
+ 23244 15f7f 4809C2 orq %rax, %rdx
+ 23245 15f82 0FB6858C movzbl -2676(%rbp), %eax
+ 23245 F5FFFF
+ 23246 15f89 48C1E208 salq $8, %rdx
+ 23247 15f8d 4809C2 orq %rax, %rdx
+ 23248 15f90 0FB6858D movzbl -2675(%rbp), %eax
+ 23248 F5FFFF
+ 23249 15f97 48C1E208 salq $8, %rdx
+ 23250 15f9b 4809C2 orq %rax, %rdx
+ 23251 15f9e 0FB6858E movzbl -2674(%rbp), %eax
+ 23251 F5FFFF
+ 23252 15fa5 48C1E208 salq $8, %rdx
+ 23253 15fa9 4809C2 orq %rax, %rdx
+ 23254 15fac 0FB6858F movzbl -2673(%rbp), %eax
+ 23254 F5FFFF
+ 23255 15fb3 48C1E208 salq $8, %rdx
+ 23256 15fb7 4809C2 orq %rax, %rdx
+ 23257 15fba 410FB6C7 movzbl %r15b, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 704
+
+
+ 23258 15fbe 48C1E208 salq $8, %rdx
+ 23259 15fc2 4809C2 orq %rax, %rdx
+ 23260 15fc5 0FB6C1 movzbl %cl, %eax
+ 23261 15fc8 400FB6CE movzbl %sil, %ecx
+ 23262 15fcc 48C1E008 salq $8, %rax
+ 23263 15fd0 4809C8 orq %rcx, %rax
+ 23264 15fd3 410FB6C8 movzbl %r8b, %ecx
+ 23265 15fd7 48C1E008 salq $8, %rax
+ 23266 15fdb 4809C8 orq %rcx, %rax
+ 23267 15fde 410FB6CE movzbl %r14b, %ecx
+ 23268 15fe2 48C1E008 salq $8, %rax
+ 23269 15fe6 4809C8 orq %rcx, %rax
+ 23270 15fe9 410FB6CD movzbl %r13b, %ecx
+ 23271 15fed 48C1E008 salq $8, %rax
+ 23272 15ff1 4809C8 orq %rcx, %rax
+ 23273 15ff4 410FB6CC movzbl %r12b, %ecx
+ 23274 15ff8 48C1E008 salq $8, %rax
+ 23275 15ffc 4809C8 orq %rcx, %rax
+ 23276 15fff 410FB6CB movzbl %r11b, %ecx
+ 23277 16003 48C1E008 salq $8, %rax
+ 23278 16007 4809C8 orq %rcx, %rax
+ 23279 1600a 410FB6CA movzbl %r10b, %ecx
+ 23280 1600e 48C1E008 salq $8, %rax
+ 23281 16012 4809C8 orq %rcx, %rax
+ 23282 16015 48899570 movq %rdx, -2704(%rbp)
+ 23282 F5FFFF
+ 23283 1601c 48898578 movq %rax, -2696(%rbp)
+ 23283 F5FFFF
+ 23284 16023 660F6F85 movdqa -2704(%rbp), %xmm0
+ 23284 70F5FFFF
+ 23285 .LBE2796:
+ 23286 .LBE2795:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 23287 .loc 2 862 0
+ 23288 1602b F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 23288 E0F9FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 23289 .loc 2 866 0
+ 23290 16033 C785BCF9 movl $0, -1604(%rbp)
+ 23290 FFFF0000
+ 23290 0000
+ 23291 1603d E9860200 jmp .L599
+ 23291 00
+ 23292 .L608:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 23293 .loc 2 868 0
+ 23294 16042 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 23294 00000000
+ 23295 1604a F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 23295 50FAFFFF
+ 23296 16052 F30F6F85 movdqu -1568(%rbp), %xmm0
+ 23296 E0F9FFFF
+ 23297 1605a F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 23297 40FAFFFF
+ 23298 .LBB2797:
+ 23299 .LBB2798:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+
GAS LISTING /tmp/ccMa7HLZ.s page 705
+
+
+ 23300 .loc 2 380 0
+ 23301 16062 F30F6F85 movdqu -1456(%rbp), %xmm0
+ 23301 50FAFFFF
+ 23302 1606a F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 23302 B0F6FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 23303 .loc 2 381 0
+ 23304 16072 F30F6F85 movdqu -1472(%rbp), %xmm0
+ 23304 40FAFFFF
+ 23305 1607a F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 23305 A0F6FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23306 .loc 2 383 0
+ 23307 16082 C7856CFA movl $0, -1428(%rbp)
+ 23307 FFFF0000
+ 23307 0000
+ 23308 1608c EB5C jmp .L600
+ 23309 .L603:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 23310 .loc 2 385 0
+ 23311 1608e 8B856CFA movl -1428(%rbp), %eax
+ 23311 FFFF
+ 23312 16094 89C0 mov %eax, %eax
+ 23313 16096 0FB68405 movzbl -2400(%rbp,%rax), %eax
+ 23313 A0F6FFFF
+ 23314 1609e 84C0 testb %al, %al
+ 23315 160a0 7912 jns .L601
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 23316 .loc 2 386 0
+ 23317 160a2 8B856CFA movl -1428(%rbp), %eax
+ 23317 FFFF
+ 23318 160a8 89C0 mov %eax, %eax
+ 23319 160aa C68405C0 movb $0, -2368(%rbp,%rax)
+ 23319 F6FFFF00
+ 23320 160b2 EB2F jmp .L602
+ 23321 .L601:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23322 .loc 2 388 0
+ 23323 160b4 8B8D6CFA movl -1428(%rbp), %ecx
+ 23323 FFFF
+ 23324 160ba 8B856CFA movl -1428(%rbp), %eax
+ 23324 FFFF
+ 23325 160c0 89C0 mov %eax, %eax
+ 23326 160c2 0FB68405 movzbl -2400(%rbp,%rax), %eax
+ 23326 A0F6FFFF
+ 23327 160ca 0FB6C0 movzbl %al, %eax
+ 23328 160cd 83E00F andl $15, %eax
+ 23329 160d0 4898 cltq
+ 23330 160d2 0FB69405 movzbl -2384(%rbp,%rax), %edx
+ 23330 B0F6FFFF
+ 23331 160da 89C8 mov %ecx, %eax
+ 23332 160dc 889405C0 movb %dl, -2368(%rbp,%rax)
+ 23332 F6FFFF
+ 23333 .L602:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23334 .loc 2 383 0
+ 23335 160e3 83856CFA addl $1, -1428(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 706
+
+
+ 23335 FFFF01
+ 23336 .L600:
+ 23337 160ea 83BD6CFA cmpl $15, -1428(%rbp)
+ 23337 FFFF0F
+ 23338 160f1 769B jbe .L603
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 23339 .loc 2 391 0
+ 23340 160f3 F30F6F85 movdqu -2368(%rbp), %xmm0
+ 23340 C0F6FFFF
+ 23341 .LBE2798:
+ 23342 .LBE2797:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 23343 .loc 2 868 0
+ 23344 160fb F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 23344 D0F9FFFF
+ 23345 16103 F30F6F85 movdqu -1552(%rbp), %xmm0
+ 23345 F0F9FFFF
+ 23346 1610b F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 23346 80FAFFFF
+ 23347 16113 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 23347 D0F9FFFF
+ 23348 1611b F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 23348 70FAFFFF
+ 23349 .LBB2799:
+ 23350 .LBB2800:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 23351 .loc 2 234 0
+ 23352 16123 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 23352 70FAFFFF
+ 23353 1612b F30F6F8D movdqu -1408(%rbp), %xmm1
+ 23353 80FAFFFF
+ 23354 16133 660FEBC1 por %xmm1, %xmm0
+ 23355 .LBE2800:
+ 23356 .LBE2799:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 23357 .loc 2 870 0
+ 23358 16137 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 23358 D0F9FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 23359 .loc 2 872 0
+ 23360 1613f 8B85BCF9 mov -1604(%rbp), %eax
+ 23360 FFFF
+ 23361 16145 48C1E004 salq $4, %rax
+ 23362 16149 48038598 addq -1640(%rbp), %rax
+ 23362 F9FFFF
+ 23363 16150 660F6F00 movdqa (%rax), %xmm0
+ 23364 16154 F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 23364 A0FAFFFF
+ 23365 1615c F30F6F85 movdqu -1584(%rbp), %xmm0
+ 23365 D0F9FFFF
+ 23366 16164 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 23366 90FAFFFF
+ 23367 .LBB2801:
+ 23368 .LBB2802:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 23369 .loc 2 380 0
+ 23370 1616c F30F6F85 movdqu -1376(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 707
+
+
+ 23370 A0FAFFFF
+ 23371 16174 F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 23371 E0F6FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 23372 .loc 2 381 0
+ 23373 1617c F30F6F85 movdqu -1392(%rbp), %xmm0
+ 23373 90FAFFFF
+ 23374 16184 F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 23374 D0F6FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23375 .loc 2 383 0
+ 23376 1618c C785BCFA movl $0, -1348(%rbp)
+ 23376 FFFF0000
+ 23376 0000
+ 23377 16196 EB5C jmp .L604
+ 23378 .L607:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 23379 .loc 2 385 0
+ 23380 16198 8B85BCFA movl -1348(%rbp), %eax
+ 23380 FFFF
+ 23381 1619e 89C0 mov %eax, %eax
+ 23382 161a0 0FB68405 movzbl -2352(%rbp,%rax), %eax
+ 23382 D0F6FFFF
+ 23383 161a8 84C0 testb %al, %al
+ 23384 161aa 7912 jns .L605
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 23385 .loc 2 386 0
+ 23386 161ac 8B85BCFA movl -1348(%rbp), %eax
+ 23386 FFFF
+ 23387 161b2 89C0 mov %eax, %eax
+ 23388 161b4 C68405F0 movb $0, -2320(%rbp,%rax)
+ 23388 F6FFFF00
+ 23389 161bc EB2F jmp .L606
+ 23390 .L605:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23391 .loc 2 388 0
+ 23392 161be 8B8DBCFA movl -1348(%rbp), %ecx
+ 23392 FFFF
+ 23393 161c4 8B85BCFA movl -1348(%rbp), %eax
+ 23393 FFFF
+ 23394 161ca 89C0 mov %eax, %eax
+ 23395 161cc 0FB68405 movzbl -2352(%rbp,%rax), %eax
+ 23395 D0F6FFFF
+ 23396 161d4 0FB6C0 movzbl %al, %eax
+ 23397 161d7 83E00F andl $15, %eax
+ 23398 161da 4898 cltq
+ 23399 161dc 0FB69405 movzbl -2336(%rbp,%rax), %edx
+ 23399 E0F6FFFF
+ 23400 161e4 89C8 mov %ecx, %eax
+ 23401 161e6 889405F0 movb %dl, -2320(%rbp,%rax)
+ 23401 F6FFFF
+ 23402 .L606:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23403 .loc 2 383 0
+ 23404 161ed 8385BCFA addl $1, -1348(%rbp)
+ 23404 FFFF01
+ 23405 .L604:
+
GAS LISTING /tmp/ccMa7HLZ.s page 708
+
+
+ 23406 161f4 83BDBCFA cmpl $15, -1348(%rbp)
+ 23406 FFFF0F
+ 23407 161fb 769B jbe .L607
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 23408 .loc 2 391 0
+ 23409 161fd F30F6F85 movdqu -2320(%rbp), %xmm0
+ 23409 F0F6FFFF
+ 23410 .LBE2802:
+ 23411 .LBE2801:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 23412 .loc 2 872 0
+ 23413 16205 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 23413 D0F9FFFF
+ 23414 1620d F30F6F85 movdqu -1600(%rbp), %xmm0
+ 23414 C0F9FFFF
+ 23415 16215 F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 23415 D0FAFFFF
+ 23416 1621d F30F6F85 movdqu -1584(%rbp), %xmm0
+ 23416 D0F9FFFF
+ 23417 16225 F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 23417 C0FAFFFF
+ 23418 .LBB2803:
+ 23419 .LBB2804:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 23420 .loc 2 234 0
+ 23421 1622d F30F6F85 movdqu -1344(%rbp), %xmm0
+ 23421 C0FAFFFF
+ 23422 16235 F30F6F8D movdqu -1328(%rbp), %xmm1
+ 23422 D0FAFFFF
+ 23423 1623d 660FEBC1 por %xmm1, %xmm0
+ 23424 .LBE2804:
+ 23425 .LBE2803:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 23426 .loc 2 874 0
+ 23427 16241 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 23427 C0F9FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 23428 .loc 2 876 0
+ 23429 16249 660F6F05 movdqa vec_01(%rip), %xmm0
+ 23429 00000000
+ 23430 16251 F30F6F8D movdqu -1568(%rbp), %xmm1
+ 23430 E0F9FFFF
+ 23431 16259 F30F7F8D movdqu %xmm1, -1296(%rbp)
+ 23431 F0FAFFFF
+ 23432 16261 F30F7F85 movdqu %xmm0, -1312(%rbp)
+ 23432 E0FAFFFF
+ 23433 .LBB2805:
+ 23434 .LBB2806:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 23435 .loc 2 290 0
+ 23436 16269 F30F6F8D movdqu -1312(%rbp), %xmm1
+ 23436 E0FAFFFF
+ 23437 16271 F30F6F85 movdqu -1296(%rbp), %xmm0
+ 23437 F0FAFFFF
+ 23438 16279 660FF8C1 psubb %xmm1, %xmm0
+ 23439 .LBE2806:
+ 23440 .LBE2805:
+
GAS LISTING /tmp/ccMa7HLZ.s page 709
+
+
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 23441 .loc 2 876 0
+ 23442 1627d F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 23442 E0F9FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 23443 .loc 2 878 0
+ 23444 16285 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 23444 00000000
+ 23445 1628d F30F6F8D movdqu -1568(%rbp), %xmm1
+ 23445 E0F9FFFF
+ 23446 16295 F30F7F8D movdqu %xmm1, -1264(%rbp)
+ 23446 10FBFFFF
+ 23447 1629d F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 23447 00FBFFFF
+ 23448 .LBB2807:
+ 23449 .LBB2808:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 23450 .loc 2 206 0
+ 23451 162a5 F30F6F85 movdqu -1280(%rbp), %xmm0
+ 23451 00FBFFFF
+ 23452 162ad F30F6F8D movdqu -1264(%rbp), %xmm1
+ 23452 10FBFFFF
+ 23453 162b5 660FDBC1 pand %xmm1, %xmm0
+ 23454 .LBE2808:
+ 23455 .LBE2807:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 23456 .loc 2 878 0
+ 23457 162b9 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 23457 E0F9FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 23458 .loc 2 866 0
+ 23459 162c1 8385BCF9 addl $1, -1604(%rbp)
+ 23459 FFFF01
+ 23460 .L599:
+ 23461 162c8 83BDBCF9 cmpl $15, -1604(%rbp)
+ 23461 FFFF0F
+ 23462 162cf 0F866DFD jbe .L608
+ 23462 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 23463 .loc 2 882 0
+ 23464 162d5 F30F6F85 movdqu -1600(%rbp), %xmm0
+ 23464 C0F9FFFF
+ 23465 .LBE2792:
+ 23466 .LBE2791:
+ 23467 .LBE2790:
+ 23468 .LBE2789:
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+ 23469 .loc 2 2185 0
+ 23470 162dd F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 23470 50F9FFFF
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 23471 .loc 2 2188 0
+ 23472 162e5 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 23472 50F9FFFF
+ 23473 162ed F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 23473 70F9FFFF
+ 23474 .LBB2809:
+
GAS LISTING /tmp/ccMa7HLZ.s page 710
+
+
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+ 23475 .loc 2 2190 0
+ 23476 162f5 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 23476 70F9FFFF
+ 23477 162fd F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 23477 80F6FFFF
+ 23478 16305 E8000000 call KDbgWriterGet at PLT
+ 23478 00
+ 23479 1630a 4885C0 testq %rax, %rax
+ 23480 1630d 7479 je .L610
+ 23481 1630f BF030000 movl $3, %edi
+ 23481 00
+ 23482 16314 E8000000 call KDbgCondToFlag at PLT
+ 23482 00
+ 23483 16319 4889C6 movq %rax, %rsi
+ 23484 1631c BF100000 movl $16, %edi
+ 23484 00
+ 23485 16321 E8000000 call KDbgTestModConds at PLT
+ 23485 00
+ 23486 16326 84C0 testb %al, %al
+ 23487 16328 745E je .L610
+ 23488 1632a 8B858CF6 movl -2420(%rbp), %eax
+ 23488 FFFF
+ 23489 16330 89C7 movl %eax, %edi
+ 23490 16332 E8C99CFE call bswap_32
+ 23490 FF
+ 23491 16337 4189C5 movl %eax, %r13d
+ 23492 1633a 8B8588F6 movl -2424(%rbp), %eax
+ 23492 FFFF
+ 23493 16340 89C7 movl %eax, %edi
+ 23494 16342 E8B99CFE call bswap_32
+ 23494 FF
+ 23495 16347 4189C4 movl %eax, %r12d
+ 23496 1634a 8B8584F6 movl -2428(%rbp), %eax
+ 23496 FFFF
+ 23497 16350 89C7 movl %eax, %edi
+ 23498 16352 E8A99CFE call bswap_32
+ 23498 FF
+ 23499 16357 89C3 movl %eax, %ebx
+ 23500 16359 8B8580F6 movl -2432(%rbp), %eax
+ 23500 FFFF
+ 23501 1635f 89C7 movl %eax, %edi
+ 23502 16361 E89A9CFE call bswap_32
+ 23502 FF
+ 23503 16366 4589E9 movl %r13d, %r9d
+ 23504 16369 4589E0 movl %r12d, %r8d
+ 23505 1636c 89D9 movl %ebx, %ecx
+ 23506 1636e 89C2 movl %eax, %edx
+ 23507 16370 488D3500 leaq .LC12(%rip), %rsi
+ 23507 000000
+ 23508 16377 488D3D00 leaq .LC1(%rip), %rdi
+ 23508 000000
+ 23509 1637e B8000000 movl $0, %eax
+ 23509 00
+ 23510 16383 E8000000 call KDbgMsg at PLT
+ 23510 00
+ 23511 .L610:
+
GAS LISTING /tmp/ccMa7HLZ.s page 711
+
+
+ 23512 16388 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 23512 50F9FFFF
+ 23513 16390 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 23513 20FBFFFF
+ 23514 .LBE2809:
+ 23515 .LBB2810:
+ 23516 .LBB2811:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 23517 .loc 2 612 0
+ 23518 16398 660F6F05 movdqa InvShiftRowTable.6750(%rip), %xmm0
+ 23518 00000000
+ 23519 163a0 F30F6F8D movdqu -1248(%rbp), %xmm1
+ 23519 20FBFFFF
+ 23520 163a8 F30F7F8D movdqu %xmm1, -1216(%rbp)
+ 23520 40FBFFFF
+ 23521 163b0 F30F7F85 movdqu %xmm0, -1232(%rbp)
+ 23521 30FBFFFF
+ 23522 .LBB2812:
+ 23523 .LBB2813:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 23524 .loc 2 380 0
+ 23525 163b8 F30F6F85 movdqu -1216(%rbp), %xmm0
+ 23525 40FBFFFF
+ 23526 163c0 F30F7F85 movdqu %xmm0, -2288(%rbp)
+ 23526 10F7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 23527 .loc 2 381 0
+ 23528 163c8 F30F6F85 movdqu -1232(%rbp), %xmm0
+ 23528 30FBFFFF
+ 23529 163d0 F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 23529 00F7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23530 .loc 2 383 0
+ 23531 163d8 C7855CFB movl $0, -1188(%rbp)
+ 23531 FFFF0000
+ 23531 0000
+ 23532 163e2 EB5C jmp .L611
+ 23533 .L614:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 23534 .loc 2 385 0
+ 23535 163e4 8B855CFB movl -1188(%rbp), %eax
+ 23535 FFFF
+ 23536 163ea 89C0 mov %eax, %eax
+ 23537 163ec 0FB68405 movzbl -2304(%rbp,%rax), %eax
+ 23537 00F7FFFF
+ 23538 163f4 84C0 testb %al, %al
+ 23539 163f6 7912 jns .L612
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 23540 .loc 2 386 0
+ 23541 163f8 8B855CFB movl -1188(%rbp), %eax
+ 23541 FFFF
+ 23542 163fe 89C0 mov %eax, %eax
+ 23543 16400 C6840520 movb $0, -2272(%rbp,%rax)
+ 23543 F7FFFF00
+ 23544 16408 EB2F jmp .L613
+ 23545 .L612:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+
GAS LISTING /tmp/ccMa7HLZ.s page 712
+
+
+ 23546 .loc 2 388 0
+ 23547 1640a 8B8D5CFB movl -1188(%rbp), %ecx
+ 23547 FFFF
+ 23548 16410 8B855CFB movl -1188(%rbp), %eax
+ 23548 FFFF
+ 23549 16416 89C0 mov %eax, %eax
+ 23550 16418 0FB68405 movzbl -2304(%rbp,%rax), %eax
+ 23550 00F7FFFF
+ 23551 16420 0FB6C0 movzbl %al, %eax
+ 23552 16423 83E00F andl $15, %eax
+ 23553 16426 4898 cltq
+ 23554 16428 0FB69405 movzbl -2288(%rbp,%rax), %edx
+ 23554 10F7FFFF
+ 23555 16430 89C8 mov %ecx, %eax
+ 23556 16432 88940520 movb %dl, -2272(%rbp,%rax)
+ 23556 F7FFFF
+ 23557 .L613:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23558 .loc 2 383 0
+ 23559 16439 83855CFB addl $1, -1188(%rbp)
+ 23559 FFFF01
+ 23560 .L611:
+ 23561 16440 83BD5CFB cmpl $15, -1188(%rbp)
+ 23561 FFFF0F
+ 23562 16447 769B jbe .L614
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 23563 .loc 2 391 0
+ 23564 16449 F30F6F85 movdqu -2272(%rbp), %xmm0
+ 23564 20F7FFFF
+ 23565 .LBE2813:
+ 23566 .LBE2812:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 23567 .loc 2 612 0
+ 23568 16451 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 23568 20FBFFFF
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 23569 .loc 2 613 0
+ 23570 16459 F30F6F85 movdqu -1248(%rbp), %xmm0
+ 23570 20FBFFFF
+ 23571 .LBE2811:
+ 23572 .LBE2810:
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+ 23573 .loc 2 2193 0
+ 23574 16461 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 23574 50F9FFFF
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 23575 .loc 2 2196 0
+ 23576 16469 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 23576 50F9FFFF
+ 23577 16471 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 23577 70F9FFFF
+ 23578 .LBB2814:
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+ 23579 .loc 2 2198 0
+ 23580 16479 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 23580 70F9FFFF
+ 23581 16481 F30F7F85 movdqu %xmm0, -2448(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 713
+
+
+ 23581 70F6FFFF
+ 23582 16489 E8000000 call KDbgWriterGet at PLT
+ 23582 00
+ 23583 1648e 4885C0 testq %rax, %rax
+ 23584 16491 7479 je .L616
+ 23585 16493 BF030000 movl $3, %edi
+ 23585 00
+ 23586 16498 E8000000 call KDbgCondToFlag at PLT
+ 23586 00
+ 23587 1649d 4889C6 movq %rax, %rsi
+ 23588 164a0 BF100000 movl $16, %edi
+ 23588 00
+ 23589 164a5 E8000000 call KDbgTestModConds at PLT
+ 23589 00
+ 23590 164aa 84C0 testb %al, %al
+ 23591 164ac 745E je .L616
+ 23592 164ae 8B857CF6 movl -2436(%rbp), %eax
+ 23592 FFFF
+ 23593 164b4 89C7 movl %eax, %edi
+ 23594 164b6 E8459BFE call bswap_32
+ 23594 FF
+ 23595 164bb 4189C5 movl %eax, %r13d
+ 23596 164be 8B8578F6 movl -2440(%rbp), %eax
+ 23596 FFFF
+ 23597 164c4 89C7 movl %eax, %edi
+ 23598 164c6 E8359BFE call bswap_32
+ 23598 FF
+ 23599 164cb 4189C4 movl %eax, %r12d
+ 23600 164ce 8B8574F6 movl -2444(%rbp), %eax
+ 23600 FFFF
+ 23601 164d4 89C7 movl %eax, %edi
+ 23602 164d6 E8259BFE call bswap_32
+ 23602 FF
+ 23603 164db 89C3 movl %eax, %ebx
+ 23604 164dd 8B8570F6 movl -2448(%rbp), %eax
+ 23604 FFFF
+ 23605 164e3 89C7 movl %eax, %edi
+ 23606 164e5 E8169BFE call bswap_32
+ 23606 FF
+ 23607 164ea 4589E9 movl %r13d, %r9d
+ 23608 164ed 4589E0 movl %r12d, %r8d
+ 23609 164f0 89D9 movl %ebx, %ecx
+ 23610 164f2 89C2 movl %eax, %edx
+ 23611 164f4 488D3500 leaq .LC13(%rip), %rsi
+ 23611 000000
+ 23612 164fb 488D3D00 leaq .LC1(%rip), %rdi
+ 23612 000000
+ 23613 16502 B8000000 movl $0, %eax
+ 23613 00
+ 23614 16507 E8000000 call KDbgMsg at PLT
+ 23614 00
+ 23615 .L616:
+ 23616 1650c F30F6F85 movdqu -1712(%rbp), %xmm0
+ 23616 50F9FFFF
+ 23617 16514 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 23617 60FBFFFF
+ 23618 1651c F30F6F85 movdqu -1184(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s page 714
+
+
+ 23618 60FBFFFF
+ 23619 16524 F30F7F85 movdqu %xmm0, -1152(%rbp)
+ 23619 80FBFFFF
+ 23620 .LBE2814:
+ 23621 .LBB2815:
+ 23622 .LBB2816:
+ 23623 .LBB2817:
+ 23624 .LBB2818:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23625 .loc 2 667 0
+ 23626 1652c 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 23626 00000000
+ 23627 16534 F30F6F8D movdqu -1152(%rbp), %xmm1
+ 23627 80FBFFFF
+ 23628 1653c F30F7F8D movdqu %xmm1, -1120(%rbp)
+ 23628 A0FBFFFF
+ 23629 16544 F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 23629 90FBFFFF
+ 23630 .LBB2819:
+ 23631 .LBB2820:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 23632 .loc 2 380 0
+ 23633 1654c F30F6F85 movdqu -1120(%rbp), %xmm0
+ 23633 A0FBFFFF
+ 23634 16554 F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 23634 70F7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 23635 .loc 2 381 0
+ 23636 1655c F30F6F85 movdqu -1136(%rbp), %xmm0
+ 23636 90FBFFFF
+ 23637 16564 F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 23637 60F7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23638 .loc 2 383 0
+ 23639 1656c C785BCFB movl $0, -1092(%rbp)
+ 23639 FFFF0000
+ 23639 0000
+ 23640 16576 EB5C jmp .L617
+ 23641 .L620:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 23642 .loc 2 385 0
+ 23643 16578 8B85BCFB movl -1092(%rbp), %eax
+ 23643 FFFF
+ 23644 1657e 89C0 mov %eax, %eax
+ 23645 16580 0FB68405 movzbl -2208(%rbp,%rax), %eax
+ 23645 60F7FFFF
+ 23646 16588 84C0 testb %al, %al
+ 23647 1658a 7912 jns .L618
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 23648 .loc 2 386 0
+ 23649 1658c 8B85BCFB movl -1092(%rbp), %eax
+ 23649 FFFF
+ 23650 16592 89C0 mov %eax, %eax
+ 23651 16594 C6840580 movb $0, -2176(%rbp,%rax)
+ 23651 F7FFFF00
+ 23652 1659c EB2F jmp .L619
+ 23653 .L618:
+
GAS LISTING /tmp/ccMa7HLZ.s page 715
+
+
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23654 .loc 2 388 0
+ 23655 1659e 8B8DBCFB movl -1092(%rbp), %ecx
+ 23655 FFFF
+ 23656 165a4 8B85BCFB movl -1092(%rbp), %eax
+ 23656 FFFF
+ 23657 165aa 89C0 mov %eax, %eax
+ 23658 165ac 0FB68405 movzbl -2208(%rbp,%rax), %eax
+ 23658 60F7FFFF
+ 23659 165b4 0FB6C0 movzbl %al, %eax
+ 23660 165b7 83E00F andl $15, %eax
+ 23661 165ba 4898 cltq
+ 23662 165bc 0FB69405 movzbl -2192(%rbp,%rax), %edx
+ 23662 70F7FFFF
+ 23663 165c4 89C8 mov %ecx, %eax
+ 23664 165c6 88940580 movb %dl, -2176(%rbp,%rax)
+ 23664 F7FFFF
+ 23665 .L619:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23666 .loc 2 383 0
+ 23667 165cd 8385BCFB addl $1, -1092(%rbp)
+ 23667 FFFF01
+ 23668 .L617:
+ 23669 165d4 83BDBCFB cmpl $15, -1092(%rbp)
+ 23669 FFFF0F
+ 23670 165db 769B jbe .L620
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 23671 .loc 2 391 0
+ 23672 165dd F30F6F85 movdqu -2176(%rbp), %xmm0
+ 23672 80F7FFFF
+ 23673 .LBE2820:
+ 23674 .LBE2819:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23675 .loc 2 667 0
+ 23676 165e5 F30F7F85 movdqu %xmm0, -1152(%rbp)
+ 23676 80FBFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 23677 .loc 2 668 0
+ 23678 165ed F30F6F85 movdqu -1152(%rbp), %xmm0
+ 23678 80FBFFFF
+ 23679 .LBE2818:
+ 23680 .LBE2817:
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r1 = AESBCMEMBER(RotBytesLeft) (state);
+ 23681 .loc 2 1106 0
+ 23682 165f5 660F7F85 movdqa %xmm0, -2592(%rbp)
+ 23682 E0F5FFFF
+ 23683 165fd 660F6F85 movdqa -2592(%rbp), %xmm0
+ 23683 E0F5FFFF
+ 23684 16605 F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 23684 C0FBFFFF
+ 23685 .LBB2821:
+ 23686 .LBB2822:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23687 .loc 2 667 0
+ 23688 1660d 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 23688 00000000
+ 23689 16615 F30F6F8D movdqu -1088(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s page 716
+
+
+ 23689 C0FBFFFF
+ 23690 1661d F30F7F8D movdqu %xmm1, -1056(%rbp)
+ 23690 E0FBFFFF
+ 23691 16625 F30F7F85 movdqu %xmm0, -1072(%rbp)
+ 23691 D0FBFFFF
+ 23692 .LBB2823:
+ 23693 .LBB2824:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 23694 .loc 2 380 0
+ 23695 1662d F30F6F85 movdqu -1056(%rbp), %xmm0
+ 23695 E0FBFFFF
+ 23696 16635 F30F7F85 movdqu %xmm0, -2144(%rbp)
+ 23696 A0F7FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 23697 .loc 2 381 0
+ 23698 1663d F30F6F85 movdqu -1072(%rbp), %xmm0
+ 23698 D0FBFFFF
+ 23699 16645 F30F7F85 movdqu %xmm0, -2160(%rbp)
+ 23699 90F7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23700 .loc 2 383 0
+ 23701 1664d C785FCFB movl $0, -1028(%rbp)
+ 23701 FFFF0000
+ 23701 0000
+ 23702 16657 EB5C jmp .L621
+ 23703 .L624:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 23704 .loc 2 385 0
+ 23705 16659 8B85FCFB movl -1028(%rbp), %eax
+ 23705 FFFF
+ 23706 1665f 89C0 mov %eax, %eax
+ 23707 16661 0FB68405 movzbl -2160(%rbp,%rax), %eax
+ 23707 90F7FFFF
+ 23708 16669 84C0 testb %al, %al
+ 23709 1666b 7912 jns .L622
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 23710 .loc 2 386 0
+ 23711 1666d 8B85FCFB movl -1028(%rbp), %eax
+ 23711 FFFF
+ 23712 16673 89C0 mov %eax, %eax
+ 23713 16675 C68405B0 movb $0, -2128(%rbp,%rax)
+ 23713 F7FFFF00
+ 23714 1667d EB2F jmp .L623
+ 23715 .L622:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23716 .loc 2 388 0
+ 23717 1667f 8B8DFCFB movl -1028(%rbp), %ecx
+ 23717 FFFF
+ 23718 16685 8B85FCFB movl -1028(%rbp), %eax
+ 23718 FFFF
+ 23719 1668b 89C0 mov %eax, %eax
+ 23720 1668d 0FB68405 movzbl -2160(%rbp,%rax), %eax
+ 23720 90F7FFFF
+ 23721 16695 0FB6C0 movzbl %al, %eax
+ 23722 16698 83E00F andl $15, %eax
+ 23723 1669b 4898 cltq
+ 23724 1669d 0FB69405 movzbl -2144(%rbp,%rax), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 717
+
+
+ 23724 A0F7FFFF
+ 23725 166a5 89C8 mov %ecx, %eax
+ 23726 166a7 889405B0 movb %dl, -2128(%rbp,%rax)
+ 23726 F7FFFF
+ 23727 .L623:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23728 .loc 2 383 0
+ 23729 166ae 8385FCFB addl $1, -1028(%rbp)
+ 23729 FFFF01
+ 23730 .L621:
+ 23731 166b5 83BDFCFB cmpl $15, -1028(%rbp)
+ 23731 FFFF0F
+ 23732 166bc 769B jbe .L624
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 23733 .loc 2 391 0
+ 23734 166be F30F6F85 movdqu -2128(%rbp), %xmm0
+ 23734 B0F7FFFF
+ 23735 .LBE2824:
+ 23736 .LBE2823:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23737 .loc 2 667 0
+ 23738 166c6 F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 23738 C0FBFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 23739 .loc 2 668 0
+ 23740 166ce F30F6F85 movdqu -1088(%rbp), %xmm0
+ 23740 C0FBFFFF
+ 23741 .LBE2822:
+ 23742 .LBE2821:
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r2 = AESBCMEMBER(RotBytesLeft) (r1);
+ 23743 .loc 2 1107 0
+ 23744 166d6 660F7F85 movdqa %xmm0, -2608(%rbp)
+ 23744 D0F5FFFF
+ 23745 166de 660F6F85 movdqa -2608(%rbp), %xmm0
+ 23745 D0F5FFFF
+ 23746 166e6 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 23746 00FCFFFF
+ 23747 .LBB2825:
+ 23748 .LBB2826:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23749 .loc 2 667 0
+ 23750 166ee 660F6F05 movdqa ShiftRowTable.6768(%rip), %xmm0
+ 23750 00000000
+ 23751 166f6 F30F6F8D movdqu -1024(%rbp), %xmm1
+ 23751 00FCFFFF
+ 23752 166fe F30F7F8D movdqu %xmm1, -992(%rbp)
+ 23752 20FCFFFF
+ 23753 16706 F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 23753 10FCFFFF
+ 23754 .LBB2827:
+ 23755 .LBB2828:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 23756 .loc 2 380 0
+ 23757 1670e F30F6F85 movdqu -992(%rbp), %xmm0
+ 23757 20FCFFFF
+ 23758 16716 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 23758 D0F7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 718
+
+
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 23759 .loc 2 381 0
+ 23760 1671e F30F6F85 movdqu -1008(%rbp), %xmm0
+ 23760 10FCFFFF
+ 23761 16726 F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 23761 C0F7FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23762 .loc 2 383 0
+ 23763 1672e C7853CFC movl $0, -964(%rbp)
+ 23763 FFFF0000
+ 23763 0000
+ 23764 16738 EB5C jmp .L625
+ 23765 .L628:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 23766 .loc 2 385 0
+ 23767 1673a 8B853CFC movl -964(%rbp), %eax
+ 23767 FFFF
+ 23768 16740 89C0 mov %eax, %eax
+ 23769 16742 0FB68405 movzbl -2112(%rbp,%rax), %eax
+ 23769 C0F7FFFF
+ 23770 1674a 84C0 testb %al, %al
+ 23771 1674c 7912 jns .L626
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 23772 .loc 2 386 0
+ 23773 1674e 8B853CFC movl -964(%rbp), %eax
+ 23773 FFFF
+ 23774 16754 89C0 mov %eax, %eax
+ 23775 16756 C68405E0 movb $0, -2080(%rbp,%rax)
+ 23775 F7FFFF00
+ 23776 1675e EB2F jmp .L627
+ 23777 .L626:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23778 .loc 2 388 0
+ 23779 16760 8B8D3CFC movl -964(%rbp), %ecx
+ 23779 FFFF
+ 23780 16766 8B853CFC movl -964(%rbp), %eax
+ 23780 FFFF
+ 23781 1676c 89C0 mov %eax, %eax
+ 23782 1676e 0FB68405 movzbl -2112(%rbp,%rax), %eax
+ 23782 C0F7FFFF
+ 23783 16776 0FB6C0 movzbl %al, %eax
+ 23784 16779 83E00F andl $15, %eax
+ 23785 1677c 4898 cltq
+ 23786 1677e 0FB69405 movzbl -2096(%rbp,%rax), %edx
+ 23786 D0F7FFFF
+ 23787 16786 89C8 mov %ecx, %eax
+ 23788 16788 889405E0 movb %dl, -2080(%rbp,%rax)
+ 23788 F7FFFF
+ 23789 .L627:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 23790 .loc 2 383 0
+ 23791 1678f 83853CFC addl $1, -964(%rbp)
+ 23791 FFFF01
+ 23792 .L625:
+ 23793 16796 83BD3CFC cmpl $15, -964(%rbp)
+ 23793 FFFF0F
+ 23794 1679d 769B jbe .L628
+
GAS LISTING /tmp/ccMa7HLZ.s page 719
+
+
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 23795 .loc 2 391 0
+ 23796 1679f F30F6F85 movdqu -2080(%rbp), %xmm0
+ 23796 E0F7FFFF
+ 23797 .LBE2828:
+ 23798 .LBE2827:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23799 .loc 2 667 0
+ 23800 167a7 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 23800 00FCFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 23801 .loc 2 668 0
+ 23802 167af F30F6F85 movdqu -1024(%rbp), %xmm0
+ 23802 00FCFFFF
+ 23803 .LBE2826:
+ 23804 .LBE2825:
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r3 = AESBCMEMBER(RotBytesLeft) (r2);
+ 23805 .loc 2 1108 0
+ 23806 167b7 660F7F85 movdqa %xmm0, -2624(%rbp)
+ 23806 C0F5FFFF
+ 23807 167bf F30F6F85 movdqu -1184(%rbp), %xmm0
+ 23807 60FBFFFF
+ 23808 167c7 F30F7F85 movdqu %xmm0, -944(%rbp)
+ 23808 50FCFFFF
+ 23809 167cf 660F6F85 movdqa -2608(%rbp), %xmm0
+ 23809 D0F5FFFF
+ 23810 167d7 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 23810 40FCFFFF
+ 23811 .LBB2829:
+ 23812 .LBB2830:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 23813 .loc 2 178 0
+ 23814 167df F30F6F85 movdqu -960(%rbp), %xmm0
+ 23814 40FCFFFF
+ 23815 167e7 F30F6F8D movdqu -944(%rbp), %xmm1
+ 23815 50FCFFFF
+ 23816 167ef 660FEFC1 pxor %xmm1, %xmm0
+ 23817 .LBE2830:
+ 23818 .LBE2829:
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(VecXor) (state, r2);
+ 23819 .loc 2 1110 0
+ 23820 167f3 660F7F85 movdqa %xmm0, -2656(%rbp)
+ 23820 A0F5FFFF
+ 23821 167fb F30F6F85 movdqu -1184(%rbp), %xmm0
+ 23821 60FBFFFF
+ 23822 16803 F30F7F85 movdqu %xmm0, -912(%rbp)
+ 23822 70FCFFFF
+ 23823 1680b 660F6F85 movdqa -2592(%rbp), %xmm0
+ 23823 E0F5FFFF
+ 23824 16813 F30F7F85 movdqu %xmm0, -928(%rbp)
+ 23824 60FCFFFF
+ 23825 .LBB2831:
+ 23826 .LBB2832:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 23827 .loc 2 178 0
+ 23828 1681b F30F6F85 movdqu -928(%rbp), %xmm0
+ 23828 60FCFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 720
+
+
+ 23829 16823 F30F6F8D movdqu -912(%rbp), %xmm1
+ 23829 70FCFFFF
+ 23830 1682b 660FEFC1 pxor %xmm1, %xmm0
+ 23831 .LBE2832:
+ 23832 .LBE2831:
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(VecXor) (state, r1);
+ 23833 .loc 2 1111 0
+ 23834 1682f 660F7F85 movdqa %xmm0, -2640(%rbp)
+ 23834 B0F5FFFF
+ 23835 16837 660F6F85 movdqa -2608(%rbp), %xmm0
+ 23835 D0F5FFFF
+ 23836 1683f F30F7F85 movdqu %xmm0, -880(%rbp)
+ 23836 90FCFFFF
+ 23837 16847 660F6F85 movdqa -2624(%rbp), %xmm0
+ 23837 C0F5FFFF
+ 23838 1684f F30F7F85 movdqu %xmm0, -896(%rbp)
+ 23838 80FCFFFF
+ 23839 .LBB2833:
+ 23840 .LBB2834:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 23841 .loc 2 178 0
+ 23842 16857 F30F6F85 movdqu -896(%rbp), %xmm0
+ 23842 80FCFFFF
+ 23843 1685f F30F6F8D movdqu -880(%rbp), %xmm1
+ 23843 90FCFFFF
+ 23844 16867 660FEFC1 pxor %xmm1, %xmm0
+ 23845 .LBE2834:
+ 23846 .LBE2833:
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (r2, r3);
+ 23847 .loc 2 1112 0
+ 23848 1686b 660F7F85 movdqa %xmm0, -2672(%rbp)
+ 23848 90F5FFFF
+ 23849 16873 660F6F85 movdqa -2672(%rbp), %xmm0
+ 23849 90F5FFFF
+ 23850 1687b F30F7F85 movdqu %xmm0, -848(%rbp)
+ 23850 B0FCFFFF
+ 23851 16883 660F6F85 movdqa -2592(%rbp), %xmm0
+ 23851 E0F5FFFF
+ 23852 1688b F30F7F85 movdqu %xmm0, -864(%rbp)
+ 23852 A0FCFFFF
+ 23853 .LBB2835:
+ 23854 .LBB2836:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 23855 .loc 2 178 0
+ 23856 16893 F30F6F85 movdqu -864(%rbp), %xmm0
+ 23856 A0FCFFFF
+ 23857 1689b F30F6F8D movdqu -848(%rbp), %xmm1
+ 23857 B0FCFFFF
+ 23858 168a3 660FEFC1 pxor %xmm1, %xmm0
+ 23859 .LBE2836:
+ 23860 .LBE2835:
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (f8, r1);
+ 23861 .loc 2 1113 0
+ 23862 168a7 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 23862 60FBFFFF
+ 23863 168af 660F6F85 movdqa -2672(%rbp), %xmm0
+ 23863 90F5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 721
+
+
+ 23864 168b7 F30F7F85 movdqu %xmm0, -816(%rbp)
+ 23864 D0FCFFFF
+ 23865 168bf 660F6F85 movdqa -2640(%rbp), %xmm0
+ 23865 B0F5FFFF
+ 23866 168c7 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 23866 C0FCFFFF
+ 23867 .LBB2837:
+ 23868 .LBB2838:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 23869 .loc 2 178 0
+ 23870 168cf F30F6F85 movdqu -832(%rbp), %xmm0
+ 23870 C0FCFFFF
+ 23871 168d7 F30F6F8D movdqu -816(%rbp), %xmm1
+ 23871 D0FCFFFF
+ 23872 168df 660FEFC1 pxor %xmm1, %xmm0
+ 23873 .LBE2838:
+ 23874 .LBE2837:
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (f8, f2);
+ 23875 .loc 2 1114 0
+ 23876 168e3 660F7F85 movdqa %xmm0, -2672(%rbp)
+ 23876 90F5FFFF
+ 23877 .LBB2839:
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.state = f2;
+ 23878 .loc 2 1126 0
+ 23879 168eb 660F6F85 movdqa -2640(%rbp), %xmm0
+ 23879 B0F5FFFF
+ 23880 168f3 F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 23880 50F7FFFF
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.state = f4;
+ 23881 .loc 2 1127 0
+ 23882 168fb 660F6F85 movdqa -2656(%rbp), %xmm0
+ 23882 A0F5FFFF
+ 23883 16903 F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 23883 40F7FFFF
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.state = f8;
+ 23884 .loc 2 1128 0
+ 23885 1690b 660F6F85 movdqa -2672(%rbp), %xmm0
+ 23885 90F5FFFF
+ 23886 16913 F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 23886 30F7FFFF
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof fu2; ++ix)
+ 23887 .loc 2 1130 0
+ 23888 1691b C7857CFB movl $0, -1156(%rbp)
+ 23888 FFFF0000
+ 23888 0000
+ 23889 16925 E9260100 jmp .L629
+ 23889 00
+ 23890 .L630:
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+ 23891 .loc 2 1132 0
+ 23892 1692a 8B8D7CFB movl -1156(%rbp), %ecx
+ 23892 FFFF
+ 23893 16930 8B857CFB movl -1156(%rbp), %eax
+ 23893 FFFF
+ 23894 16936 89C0 mov %eax, %eax
+ 23895 16938 0FB68405 movzbl -2224(%rbp,%rax), %eax
+ 23895 50F7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 722
+
+
+ 23896 16940 0FB6C0 movzbl %al, %eax
+ 23897 16943 8885EAFC movb %al, -790(%rbp)
+ 23897 FFFF
+ 23898 .LBB2840:
+ 23899 .LBB2841:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 23900 .loc 2 1012 0
+ 23901 16949 0FB685EA movzbl -790(%rbp), %eax
+ 23901 FCFFFF
+ 23902 16950 01C0 addl %eax, %eax
+ 23903 16952 89C3 movl %eax, %ebx
+ 23904 16954 0FB685EA movzbl -790(%rbp), %eax
+ 23904 FCFFFF
+ 23905 1695b C0E807 shrb $7, %al
+ 23906 1695e 0FB6C0 movzbl %al, %eax
+ 23907 16961 8885EBFC movb %al, -789(%rbp)
+ 23907 FFFF
+ 23908 .LBB2842:
+ 23909 .LBB2843:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+ 23910 .loc 2 1001 0
+ 23911 16967 0FB685EB movzbl -789(%rbp), %eax
+ 23911 FCFFFF
+ 23912 1696e 4863D0 movslq %eax,%rdx
+ 23913 16971 488D0500 leaq KAESBlockCipherVecFFtable(%rip), %rax
+ 23913 000000
+ 23914 16978 0FB60402 movzbl (%rdx,%rax), %eax
+ 23915 .LBE2843:
+ 23916 .LBE2842:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 23917 .loc 2 1012 0
+ 23918 1697c 31D8 xorl %ebx, %eax
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+ 23919 .loc 2 1132 0
+ 23920 1697e 89C2 movl %eax, %edx
+ 23921 .LBE2841:
+ 23922 .LBE2840:
+ 23923 16980 89C8 mov %ecx, %eax
+ 23924 16982 88940550 movb %dl, -2224(%rbp,%rax)
+ 23924 F7FFFF
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+ 23925 .loc 2 1133 0
+ 23926 16989 8B8D7CFB movl -1156(%rbp), %ecx
+ 23926 FFFF
+ 23927 1698f 8B857CFB movl -1156(%rbp), %eax
+ 23927 FFFF
+ 23928 16995 89C0 mov %eax, %eax
+ 23929 16997 0FB68405 movzbl -2240(%rbp,%rax), %eax
+ 23929 40F7FFFF
+ 23930 1699f 0FB6C0 movzbl %al, %eax
+ 23931 169a2 8885ECFC movb %al, -788(%rbp)
+ 23931 FFFF
+ 23932 .LBB2844:
+ 23933 .LBB2845:
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+ 23934 .loc 2 1023 0
+ 23935 169a8 0FB685EC movzbl -788(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 723
+
+
+ 23935 FCFFFF
+ 23936 169af C1E002 sall $2, %eax
+ 23937 169b2 89C3 movl %eax, %ebx
+ 23938 169b4 0FB685EC movzbl -788(%rbp), %eax
+ 23938 FCFFFF
+ 23939 169bb C0E806 shrb $6, %al
+ 23940 169be 0FB6C0 movzbl %al, %eax
+ 23941 169c1 8885EDFC movb %al, -787(%rbp)
+ 23941 FFFF
+ 23942 .LBB2846:
+ 23943 .LBB2847:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+ 23944 .loc 2 1001 0
+ 23945 169c7 0FB685ED movzbl -787(%rbp), %eax
+ 23945 FCFFFF
+ 23946 169ce 4863D0 movslq %eax,%rdx
+ 23947 169d1 488D0500 leaq KAESBlockCipherVecFFtable(%rip), %rax
+ 23947 000000
+ 23948 169d8 0FB60402 movzbl (%rdx,%rax), %eax
+ 23949 .LBE2847:
+ 23950 .LBE2846:
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+ 23951 .loc 2 1023 0
+ 23952 169dc 31D8 xorl %ebx, %eax
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+ 23953 .loc 2 1133 0
+ 23954 169de 89C2 movl %eax, %edx
+ 23955 .LBE2845:
+ 23956 .LBE2844:
+ 23957 169e0 89C8 mov %ecx, %eax
+ 23958 169e2 88940540 movb %dl, -2240(%rbp,%rax)
+ 23958 F7FFFF
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+ 23959 .loc 2 1134 0
+ 23960 169e9 8B8D7CFB movl -1156(%rbp), %ecx
+ 23960 FFFF
+ 23961 169ef 8B857CFB movl -1156(%rbp), %eax
+ 23961 FFFF
+ 23962 169f5 89C0 mov %eax, %eax
+ 23963 169f7 0FB68405 movzbl -2256(%rbp,%rax), %eax
+ 23963 30F7FFFF
+ 23964 169ff 0FB6C0 movzbl %al, %eax
+ 23965 16a02 8885EEFC movb %al, -786(%rbp)
+ 23965 FFFF
+ 23966 .LBB2848:
+ 23967 .LBB2849:
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+ 23968 .loc 2 1034 0
+ 23969 16a08 0FB685EE movzbl -786(%rbp), %eax
+ 23969 FCFFFF
+ 23970 16a0f C1E003 sall $3, %eax
+ 23971 16a12 89C3 movl %eax, %ebx
+ 23972 16a14 0FB685EE movzbl -786(%rbp), %eax
+ 23972 FCFFFF
+ 23973 16a1b C0E805 shrb $5, %al
+ 23974 16a1e 0FB6C0 movzbl %al, %eax
+ 23975 16a21 8885EFFC movb %al, -785(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 724
+
+
+ 23975 FFFF
+ 23976 .LBB2850:
+ 23977 .LBB2851:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+ 23978 .loc 2 1001 0
+ 23979 16a27 0FB685EF movzbl -785(%rbp), %eax
+ 23979 FCFFFF
+ 23980 16a2e 4863D0 movslq %eax,%rdx
+ 23981 16a31 488D0500 leaq KAESBlockCipherVecFFtable(%rip), %rax
+ 23981 000000
+ 23982 16a38 0FB60402 movzbl (%rdx,%rax), %eax
+ 23983 .LBE2851:
+ 23984 .LBE2850:
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+ 23985 .loc 2 1034 0
+ 23986 16a3c 31D8 xorl %ebx, %eax
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+ 23987 .loc 2 1134 0
+ 23988 16a3e 89C2 movl %eax, %edx
+ 23989 .LBE2849:
+ 23990 .LBE2848:
+ 23991 16a40 89C8 mov %ecx, %eax
+ 23992 16a42 88940530 movb %dl, -2256(%rbp,%rax)
+ 23992 F7FFFF
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof fu2; ++ix)
+ 23993 .loc 2 1130 0
+ 23994 16a49 83857CFB addl $1, -1156(%rbp)
+ 23994 FFFF01
+ 23995 .L629:
+ 23996 16a50 83BD7CFB cmpl $15, -1156(%rbp)
+ 23996 FFFF0F
+ 23997 16a57 0F86CDFE jbe .L630
+ 23997 FFFF
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = fu2.state;
+ 23998 .loc 2 1136 0
+ 23999 16a5d F30F6F85 movdqu -2224(%rbp), %xmm0
+ 23999 50F7FFFF
+ 24000 16a65 660F7F85 movdqa %xmm0, -2640(%rbp)
+ 24000 B0F5FFFF
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = fu4.state;
+ 24001 .loc 2 1137 0
+ 24002 16a6d F30F6F85 movdqu -2240(%rbp), %xmm0
+ 24002 40F7FFFF
+ 24003 16a75 660F7F85 movdqa %xmm0, -2656(%rbp)
+ 24003 A0F5FFFF
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = fu8.state;
+ 24004 .loc 2 1138 0
+ 24005 16a7d F30F6F85 movdqu -2256(%rbp), %xmm0
+ 24005 30F7FFFF
+ 24006 16a85 660F7F85 movdqa %xmm0, -2672(%rbp)
+ 24006 90F5FFFF
+ 24007 16a8d F30F6F85 movdqu -1184(%rbp), %xmm0
+ 24007 60FBFFFF
+ 24008 16a95 F30F7F85 movdqu %xmm0, -768(%rbp)
+ 24008 00FDFFFF
+ 24009 16a9d 660F6F85 movdqa -2640(%rbp), %xmm0
+ 24009 B0F5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 725
+
+
+ 24010 16aa5 F30F7F85 movdqu %xmm0, -784(%rbp)
+ 24010 F0FCFFFF
+ 24011 .LBE2839:
+ 24012 .LBB2852:
+ 24013 .LBB2853:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 24014 .loc 2 178 0
+ 24015 16aad F30F6F85 movdqu -784(%rbp), %xmm0
+ 24015 F0FCFFFF
+ 24016 16ab5 F30F6F8D movdqu -768(%rbp), %xmm1
+ 24016 00FDFFFF
+ 24017 16abd 660FEFC1 pxor %xmm1, %xmm0
+ 24018 .LBE2853:
+ 24019 .LBE2852:
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f2);
+ 24020 .loc 2 1142 0
+ 24021 16ac1 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 24021 60FBFFFF
+ 24022 16ac9 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 24022 60FBFFFF
+ 24023 16ad1 F30F7F85 movdqu %xmm0, -736(%rbp)
+ 24023 20FDFFFF
+ 24024 16ad9 660F6F85 movdqa -2656(%rbp), %xmm0
+ 24024 A0F5FFFF
+ 24025 16ae1 F30F7F85 movdqu %xmm0, -752(%rbp)
+ 24025 10FDFFFF
+ 24026 .LBB2854:
+ 24027 .LBB2855:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 24028 .loc 2 178 0
+ 24029 16ae9 F30F6F85 movdqu -752(%rbp), %xmm0
+ 24029 10FDFFFF
+ 24030 16af1 F30F6F8D movdqu -736(%rbp), %xmm1
+ 24030 20FDFFFF
+ 24031 16af9 660FEFC1 pxor %xmm1, %xmm0
+ 24032 .LBE2855:
+ 24033 .LBE2854:
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f4);
+ 24034 .loc 2 1143 0
+ 24035 16afd F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 24035 60FBFFFF
+ 24036 16b05 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 24036 60FBFFFF
+ 24037 16b0d F30F7F85 movdqu %xmm0, -704(%rbp)
+ 24037 40FDFFFF
+ 24038 16b15 660F6F85 movdqa -2672(%rbp), %xmm0
+ 24038 90F5FFFF
+ 24039 16b1d F30F7F85 movdqu %xmm0, -720(%rbp)
+ 24039 30FDFFFF
+ 24040 .LBB2856:
+ 24041 .LBB2857:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 24042 .loc 2 178 0
+ 24043 16b25 F30F6F85 movdqu -720(%rbp), %xmm0
+ 24043 30FDFFFF
+ 24044 16b2d F30F6F8D movdqu -704(%rbp), %xmm1
+ 24044 40FDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 726
+
+
+ 24045 16b35 660FEFC1 pxor %xmm1, %xmm0
+ 24046 .LBE2857:
+ 24047 .LBE2856:
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f8);
+ 24048 .loc 2 1144 0
+ 24049 16b39 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 24049 60FBFFFF
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 24050 .loc 2 1148 0
+ 24051 16b41 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 24051 60FBFFFF
+ 24052 .LBE2816:
+ 24053 .LBE2815:
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvMixColumns) (state);
+ 24054 .loc 2 2201 0
+ 24055 16b49 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 24055 50F9FFFF
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 24056 .loc 2 2204 0
+ 24057 16b51 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 24057 50F9FFFF
+ 24058 16b59 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 24058 70F9FFFF
+ 24059 .LBB2858:
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+ 24060 .loc 2 2206 0
+ 24061 16b61 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 24061 70F9FFFF
+ 24062 16b69 F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 24062 60F6FFFF
+ 24063 16b71 E8000000 call KDbgWriterGet at PLT
+ 24063 00
+ 24064 16b76 4885C0 testq %rax, %rax
+ 24065 16b79 7479 je .L632
+ 24066 16b7b BF030000 movl $3, %edi
+ 24066 00
+ 24067 16b80 E8000000 call KDbgCondToFlag at PLT
+ 24067 00
+ 24068 16b85 4889C6 movq %rax, %rsi
+ 24069 16b88 BF100000 movl $16, %edi
+ 24069 00
+ 24070 16b8d E8000000 call KDbgTestModConds at PLT
+ 24070 00
+ 24071 16b92 84C0 testb %al, %al
+ 24072 16b94 745E je .L632
+ 24073 16b96 8B856CF6 movl -2452(%rbp), %eax
+ 24073 FFFF
+ 24074 16b9c 89C7 movl %eax, %edi
+ 24075 16b9e E85D94FE call bswap_32
+ 24075 FF
+ 24076 16ba3 4189C5 movl %eax, %r13d
+ 24077 16ba6 8B8568F6 movl -2456(%rbp), %eax
+ 24077 FFFF
+ 24078 16bac 89C7 movl %eax, %edi
+ 24079 16bae E84D94FE call bswap_32
+ 24079 FF
+ 24080 16bb3 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s page 727
+
+
+ 24081 16bb6 8B8564F6 movl -2460(%rbp), %eax
+ 24081 FFFF
+ 24082 16bbc 89C7 movl %eax, %edi
+ 24083 16bbe E83D94FE call bswap_32
+ 24083 FF
+ 24084 16bc3 89C3 movl %eax, %ebx
+ 24085 16bc5 8B8560F6 movl -2464(%rbp), %eax
+ 24085 FFFF
+ 24086 16bcb 89C7 movl %eax, %edi
+ 24087 16bcd E82E94FE call bswap_32
+ 24087 FF
+ 24088 16bd2 4589E9 movl %r13d, %r9d
+ 24089 16bd5 4589E0 movl %r12d, %r8d
+ 24090 16bd8 89D9 movl %ebx, %ecx
+ 24091 16bda 89C2 movl %eax, %edx
+ 24092 16bdc 488D3500 leaq .LC14(%rip), %rsi
+ 24092 000000
+ 24093 16be3 488D3D00 leaq .LC1(%rip), %rdi
+ 24093 000000
+ 24094 16bea B8000000 movl $0, %eax
+ 24094 00
+ 24095 16bef E8000000 call KDbgMsg at PLT
+ 24095 00
+ 24096 .L632:
+ 24097 16bf4 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 24097 50F9FFFF
+ 24098 16bfc F30F7F85 movdqu %xmm0, -672(%rbp)
+ 24098 60FDFFFF
+ 24099 16c04 F30F6F85 movdqu -1728(%rbp), %xmm0
+ 24099 40F9FFFF
+ 24100 16c0c F30F7F85 movdqu %xmm0, -688(%rbp)
+ 24100 50FDFFFF
+ 24101 16c14 F30F6F85 movdqu -672(%rbp), %xmm0
+ 24101 60FDFFFF
+ 24102 16c1c F30F7F85 movdqu %xmm0, -640(%rbp)
+ 24102 80FDFFFF
+ 24103 16c24 F30F6F85 movdqu -688(%rbp), %xmm0
+ 24103 50FDFFFF
+ 24104 16c2c F30F7F85 movdqu %xmm0, -656(%rbp)
+ 24104 70FDFFFF
+ 24105 .LBE2858:
+ 24106 .LBB2859:
+ 24107 .LBB2860:
+ 24108 .LBB2861:
+ 24109 .LBB2862:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 24110 .loc 2 178 0
+ 24111 16c34 F30F6F85 movdqu -656(%rbp), %xmm0
+ 24111 70FDFFFF
+ 24112 16c3c F30F6F8D movdqu -640(%rbp), %xmm1
+ 24112 80FDFFFF
+ 24113 16c44 660FEFC1 pxor %xmm1, %xmm0
+ 24114 .LBE2862:
+ 24115 .LBE2861:
+ 24116 .LBE2860:
+ 24117 .LBE2859:
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+
GAS LISTING /tmp/ccMa7HLZ.s page 728
+
+
+ 24118 .loc 2 2209 0
+ 24119 16c48 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 24119 50F9FFFF
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 24120 .loc 2 2213 0
+ 24121 16c50 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 24121 50F9FFFF
+ 24122 16c58 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 24122 70F9FFFF
+ 24123 .LBB2863:
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+ 24124 .loc 2 2215 0
+ 24125 16c60 F30F6F85 movdqu -1696(%rbp), %xmm0
+ 24125 60F9FFFF
+ 24126 16c68 F30F7F85 movdqu %xmm0, -2480(%rbp)
+ 24126 50F6FFFF
+ 24127 16c70 E8000000 call KDbgWriterGet at PLT
+ 24127 00
+ 24128 16c75 4885C0 testq %rax, %rax
+ 24129 16c78 7479 je .L634
+ 24130 16c7a BF030000 movl $3, %edi
+ 24130 00
+ 24131 16c7f E8000000 call KDbgCondToFlag at PLT
+ 24131 00
+ 24132 16c84 4889C6 movq %rax, %rsi
+ 24133 16c87 BF100000 movl $16, %edi
+ 24133 00
+ 24134 16c8c E8000000 call KDbgTestModConds at PLT
+ 24134 00
+ 24135 16c91 84C0 testb %al, %al
+ 24136 16c93 745E je .L634
+ 24137 16c95 8B855CF6 movl -2468(%rbp), %eax
+ 24137 FFFF
+ 24138 16c9b 89C7 movl %eax, %edi
+ 24139 16c9d E85E93FE call bswap_32
+ 24139 FF
+ 24140 16ca2 4189C5 movl %eax, %r13d
+ 24141 16ca5 8B8558F6 movl -2472(%rbp), %eax
+ 24141 FFFF
+ 24142 16cab 89C7 movl %eax, %edi
+ 24143 16cad E84E93FE call bswap_32
+ 24143 FF
+ 24144 16cb2 4189C4 movl %eax, %r12d
+ 24145 16cb5 8B8554F6 movl -2476(%rbp), %eax
+ 24145 FFFF
+ 24146 16cbb 89C7 movl %eax, %edi
+ 24147 16cbd E83E93FE call bswap_32
+ 24147 FF
+ 24148 16cc2 89C3 movl %eax, %ebx
+ 24149 16cc4 8B8550F6 movl -2480(%rbp), %eax
+ 24149 FFFF
+ 24150 16cca 89C7 movl %eax, %edi
+ 24151 16ccc E82F93FE call bswap_32
+ 24151 FF
+ 24152 16cd1 4589E9 movl %r13d, %r9d
+ 24153 16cd4 4589E0 movl %r12d, %r8d
+ 24154 16cd7 89D9 movl %ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s page 729
+
+
+ 24155 16cd9 89C2 movl %eax, %edx
+ 24156 16cdb 488D3500 leaq .LC6(%rip), %rsi
+ 24156 000000
+ 24157 16ce2 488D3D00 leaq .LC1(%rip), %rdi
+ 24157 000000
+ 24158 16ce9 B8000000 movl $0, %eax
+ 24158 00
+ 24159 16cee E8000000 call KDbgMsg at PLT
+ 24159 00
+ 24160 .L634:
+ 24161 .LBE2863:
+ 24162 .LBB2864:
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+ 24163 .loc 2 2217 0
+ 24164 16cf3 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 24164 70F9FFFF
+ 24165 16cfb F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 24165 40F6FFFF
+ 24166 16d03 E8000000 call KDbgWriterGet at PLT
+ 24166 00
+ 24167 16d08 4885C0 testq %rax, %rax
+ 24168 16d0b 7479 je .L636
+ 24169 16d0d BF030000 movl $3, %edi
+ 24169 00
+ 24170 16d12 E8000000 call KDbgCondToFlag at PLT
+ 24170 00
+ 24171 16d17 4889C6 movq %rax, %rsi
+ 24172 16d1a BF100000 movl $16, %edi
+ 24172 00
+ 24173 16d1f E8000000 call KDbgTestModConds at PLT
+ 24173 00
+ 24174 16d24 84C0 testb %al, %al
+ 24175 16d26 745E je .L636
+ 24176 16d28 8B854CF6 movl -2484(%rbp), %eax
+ 24176 FFFF
+ 24177 16d2e 89C7 movl %eax, %edi
+ 24178 16d30 E8CB92FE call bswap_32
+ 24178 FF
+ 24179 16d35 4189C5 movl %eax, %r13d
+ 24180 16d38 8B8548F6 movl -2488(%rbp), %eax
+ 24180 FFFF
+ 24181 16d3e 89C7 movl %eax, %edi
+ 24182 16d40 E8BB92FE call bswap_32
+ 24182 FF
+ 24183 16d45 4189C4 movl %eax, %r12d
+ 24184 16d48 8B8544F6 movl -2492(%rbp), %eax
+ 24184 FFFF
+ 24185 16d4e 89C7 movl %eax, %edi
+ 24186 16d50 E8AB92FE call bswap_32
+ 24186 FF
+ 24187 16d55 89C3 movl %eax, %ebx
+ 24188 16d57 8B8540F6 movl -2496(%rbp), %eax
+ 24188 FFFF
+ 24189 16d5d 89C7 movl %eax, %edi
+ 24190 16d5f E89C92FE call bswap_32
+ 24190 FF
+ 24191 16d64 4589E9 movl %r13d, %r9d
+
GAS LISTING /tmp/ccMa7HLZ.s page 730
+
+
+ 24192 16d67 4589E0 movl %r12d, %r8d
+ 24193 16d6a 89D9 movl %ebx, %ecx
+ 24194 16d6c 89C2 movl %eax, %edx
+ 24195 16d6e 488D3500 leaq .LC11(%rip), %rsi
+ 24195 000000
+ 24196 16d75 488D3D00 leaq .LC1(%rip), %rdi
+ 24196 000000
+ 24197 16d7c B8000000 movl $0, %eax
+ 24197 00
+ 24198 16d81 E8000000 call KDbgMsg at PLT
+ 24198 00
+ 24199 .L636:
+ 24200 .LBE2864:
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 24201 .loc 2 2220 0
+ 24202 16d86 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 24202 50F9FFFF
+ 24203 .LBE2787:
+ 24204 .LBE2786:
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+ 24205 .loc 2 2277 0
+ 24206 16d8e 660F7F85 movdqa %xmm0, -2560(%rbp)
+ 24206 00F6FFFF
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 24207 .loc 2 2276 0
+ 24208 16d96 8385DCF8 addl $1, -1828(%rbp)
+ 24208 FFFF01
+ 24209 .L596:
+ 24210 16d9d 8B85DCF8 movl -1828(%rbp), %eax
+ 24210 FFFF
+ 24211 16da3 3B85F4F5 cmpl -2572(%rbp), %eax
+ 24211 FFFF
+ 24212 16da9 0F82F8ED jb .L637
+ 24212 FFFF
+2279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+ 24213 .loc 2 2279 0
+ 24214 16daf 8B85DCF8 mov -1828(%rbp), %eax
+ 24214 FFFF
+ 24215 16db5 48C1E004 salq $4, %rax
+ 24216 16db9 480385F8 addq -2568(%rbp), %rax
+ 24216 F5FFFF
+ 24217 16dc0 660F6F00 movdqa (%rax), %xmm0
+ 24218 16dc4 660F6F8D movdqa -2560(%rbp), %xmm1
+ 24218 00F6FFFF
+ 24219 16dcc F30F7F8D movdqu %xmm1, -608(%rbp)
+ 24219 A0FDFFFF
+ 24220 16dd4 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 24220 90FDFFFF
+ 24221 .LBB2865:
+ 24222 .LBB2866:
+ 24223 .LBB2867:
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 24224 .loc 2 2237 0
+ 24225 16ddc F30F6F85 movdqu -608(%rbp), %xmm0
+ 24225 A0FDFFFF
+ 24226 16de4 F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 24226 30F8FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 731
+
+
+ 24227 16dec E8000000 call KDbgWriterGet at PLT
+ 24227 00
+ 24228 16df1 4885C0 testq %rax, %rax
+ 24229 16df4 7479 je .L639
+ 24230 16df6 BF030000 movl $3, %edi
+ 24230 00
+ 24231 16dfb E8000000 call KDbgCondToFlag at PLT
+ 24231 00
+ 24232 16e00 4889C6 movq %rax, %rsi
+ 24233 16e03 BF100000 movl $16, %edi
+ 24233 00
+ 24234 16e08 E8000000 call KDbgTestModConds at PLT
+ 24234 00
+ 24235 16e0d 84C0 testb %al, %al
+ 24236 16e0f 745E je .L639
+ 24237 16e11 8B853CF8 movl -1988(%rbp), %eax
+ 24237 FFFF
+ 24238 16e17 89C7 movl %eax, %edi
+ 24239 16e19 E8E291FE call bswap_32
+ 24239 FF
+ 24240 16e1e 4189C5 movl %eax, %r13d
+ 24241 16e21 8B8538F8 movl -1992(%rbp), %eax
+ 24241 FFFF
+ 24242 16e27 89C7 movl %eax, %edi
+ 24243 16e29 E8D291FE call bswap_32
+ 24243 FF
+ 24244 16e2e 4189C4 movl %eax, %r12d
+ 24245 16e31 8B8534F8 movl -1996(%rbp), %eax
+ 24245 FFFF
+ 24246 16e37 89C7 movl %eax, %edi
+ 24247 16e39 E8C291FE call bswap_32
+ 24247 FF
+ 24248 16e3e 89C3 movl %eax, %ebx
+ 24249 16e40 8B8530F8 movl -2000(%rbp), %eax
+ 24249 FFFF
+ 24250 16e46 89C7 movl %eax, %edi
+ 24251 16e48 E8B391FE call bswap_32
+ 24251 FF
+ 24252 16e4d 4589E9 movl %r13d, %r9d
+ 24253 16e50 4589E0 movl %r12d, %r8d
+ 24254 16e53 89D9 movl %ebx, %ecx
+ 24255 16e55 89C2 movl %eax, %edx
+ 24256 16e57 488D3500 leaq .LC5(%rip), %rsi
+ 24256 000000
+ 24257 16e5e 488D3D00 leaq .LC1(%rip), %rdi
+ 24257 000000
+ 24258 16e65 B8000000 movl $0, %eax
+ 24258 00
+ 24259 16e6a E8000000 call KDbgMsg at PLT
+ 24259 00
+ 24260 .L639:
+ 24261 16e6f F30F6F85 movdqu -608(%rbp), %xmm0
+ 24261 A0FDFFFF
+ 24262 16e77 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 24262 B0FDFFFF
+ 24263 16e7f F30F6F85 movdqu -592(%rbp), %xmm0
+ 24263 B0FDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s page 732
+
+
+ 24264 16e87 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 24264 D0FDFFFF
+ 24265 16e8f 488D0500 leaq KAESBlockCipherVecRijndaelInvSBoxV(%rip), %rax
+ 24265 000000
+ 24266 16e96 488985C8 movq %rax, -568(%rbp)
+ 24266 FDFFFF
+ 24267 .LBE2867:
+ 24268 .LBB2868:
+ 24269 .LBB2869:
+ 24270 .LBB2870:
+ 24271 .LBB2871:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 24272 .loc 2 851 0
+ 24273 16e9d 660F6F05 movdqa vec_00(%rip), %xmm0
+ 24273 00000000
+ 24274 16ea5 F30F7F85 movdqu %xmm0, -528(%rbp)
+ 24274 F0FDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 24275 .loc 2 854 0
+ 24276 16ead 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 24276 00000000
+ 24277 16eb5 F30F6F8D movdqu -560(%rbp), %xmm1
+ 24277 D0FDFFFF
+ 24278 16ebd F30F7F8D movdqu %xmm1, -448(%rbp)
+ 24278 40FEFFFF
+ 24279 16ec5 F30F7F85 movdqu %xmm0, -464(%rbp)
+ 24279 30FEFFFF
+ 24280 .LBB2872:
+ 24281 .LBB2873:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 24282 .loc 2 206 0
+ 24283 16ecd F30F6F85 movdqu -464(%rbp), %xmm0
+ 24283 30FEFFFF
+ 24284 16ed5 F30F6F8D movdqu -448(%rbp), %xmm1
+ 24284 40FEFFFF
+ 24285 16edd 660FDBC1 pand %xmm1, %xmm0
+ 24286 .LBE2873:
+ 24287 .LBE2872:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 24288 .loc 2 854 0
+ 24289 16ee1 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 24289 20FEFFFF
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 24290 .loc 2 862 0
+ 24291 16ee9 660F6F05 movdqa vec_10(%rip), %xmm0
+ 24291 00000000
+ 24292 16ef1 F30F6F8D movdqu -560(%rbp), %xmm1
+ 24292 D0FDFFFF
+ 24293 16ef9 F30F7F8D movdqu %xmm1, -416(%rbp)
+ 24293 60FEFFFF
+ 24294 16f01 F30F7F85 movdqu %xmm0, -432(%rbp)
+ 24294 50FEFFFF
+ 24295 .LBB2874:
+ 24296 .loc 2 2642 0
+ 24297 16f09 0FB68560 movzbl -416(%rbp), %eax
+ 24297 FEFFFF
+ 24298 16f10 0FB69550 movzbl -432(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 733
+
+
+ 24298 FEFFFF
+ 24299 16f17 0FB6C0 movzbl %al, %eax
+ 24300 16f1a 6689855E movw %ax, -2722(%rbp)
+ 24300 F5FFFF
+ 24301 16f21 0FB7855E movzwl -2722(%rbp), %eax
+ 24301 F5FFFF
+ 24302 16f28 F6F2 divb %dl
+ 24303 16f2a 4189C7 movl %eax, %r15d
+ 24304 16f2d 0FB68561 movzbl -415(%rbp), %eax
+ 24304 FEFFFF
+ 24305 16f34 0FB69551 movzbl -431(%rbp), %edx
+ 24305 FEFFFF
+ 24306 16f3b 0FB6C0 movzbl %al, %eax
+ 24307 16f3e 6689855E movw %ax, -2722(%rbp)
+ 24307 F5FFFF
+ 24308 16f45 0FB7855E movzwl -2722(%rbp), %eax
+ 24308 F5FFFF
+ 24309 16f4c F6F2 divb %dl
+ 24310 16f4e 8885F3F5 movb %al, -2573(%rbp)
+ 24310 FFFF
+ 24311 16f54 0FB68562 movzbl -414(%rbp), %eax
+ 24311 FEFFFF
+ 24312 16f5b 0FB69552 movzbl -430(%rbp), %edx
+ 24312 FEFFFF
+ 24313 16f62 0FB6C0 movzbl %al, %eax
+ 24314 16f65 6689855E movw %ax, -2722(%rbp)
+ 24314 F5FFFF
+ 24315 16f6c 0FB7855E movzwl -2722(%rbp), %eax
+ 24315 F5FFFF
+ 24316 16f73 F6F2 divb %dl
+ 24317 16f75 8885F2F5 movb %al, -2574(%rbp)
+ 24317 FFFF
+ 24318 16f7b 0FB68563 movzbl -413(%rbp), %eax
+ 24318 FEFFFF
+ 24319 16f82 0FB69553 movzbl -429(%rbp), %edx
+ 24319 FEFFFF
+ 24320 16f89 0FB6C0 movzbl %al, %eax
+ 24321 16f8c 6689855E movw %ax, -2722(%rbp)
+ 24321 F5FFFF
+ 24322 16f93 0FB7855E movzwl -2722(%rbp), %eax
+ 24322 F5FFFF
+ 24323 16f9a F6F2 divb %dl
+ 24324 16f9c 8885F1F5 movb %al, -2575(%rbp)
+ 24324 FFFF
+ 24325 16fa2 0FB68564 movzbl -412(%rbp), %eax
+ 24325 FEFFFF
+ 24326 16fa9 0FB69554 movzbl -428(%rbp), %edx
+ 24326 FEFFFF
+ 24327 16fb0 0FB6C0 movzbl %al, %eax
+ 24328 16fb3 6689855E movw %ax, -2722(%rbp)
+ 24328 F5FFFF
+ 24329 16fba 0FB7855E movzwl -2722(%rbp), %eax
+ 24329 F5FFFF
+ 24330 16fc1 F6F2 divb %dl
+ 24331 16fc3 8885F0F5 movb %al, -2576(%rbp)
+ 24331 FFFF
+ 24332 16fc9 0FB68565 movzbl -411(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 734
+
+
+ 24332 FEFFFF
+ 24333 16fd0 0FB69555 movzbl -427(%rbp), %edx
+ 24333 FEFFFF
+ 24334 16fd7 0FB6C0 movzbl %al, %eax
+ 24335 16fda 6689855E movw %ax, -2722(%rbp)
+ 24335 F5FFFF
+ 24336 16fe1 0FB7855E movzwl -2722(%rbp), %eax
+ 24336 F5FFFF
+ 24337 16fe8 F6F2 divb %dl
+ 24338 16fea 4189C1 movl %eax, %r9d
+ 24339 16fed 0FB68566 movzbl -410(%rbp), %eax
+ 24339 FEFFFF
+ 24340 16ff4 0FB69556 movzbl -426(%rbp), %edx
+ 24340 FEFFFF
+ 24341 16ffb 0FB6C0 movzbl %al, %eax
+ 24342 16ffe 6689855E movw %ax, -2722(%rbp)
+ 24342 F5FFFF
+ 24343 17005 0FB7855E movzwl -2722(%rbp), %eax
+ 24343 F5FFFF
+ 24344 1700c F6F2 divb %dl
+ 24345 1700e 89C7 movl %eax, %edi
+ 24346 17010 0FB68567 movzbl -409(%rbp), %eax
+ 24346 FEFFFF
+ 24347 17017 0FB69557 movzbl -425(%rbp), %edx
+ 24347 FEFFFF
+ 24348 1701e 0FB6C0 movzbl %al, %eax
+ 24349 17021 6689855E movw %ax, -2722(%rbp)
+ 24349 F5FFFF
+ 24350 17028 0FB7855E movzwl -2722(%rbp), %eax
+ 24350 F5FFFF
+ 24351 1702f F6F2 divb %dl
+ 24352 17031 89C3 movl %eax, %ebx
+ 24353 17033 0FB68568 movzbl -408(%rbp), %eax
+ 24353 FEFFFF
+ 24354 1703a 0FB69558 movzbl -424(%rbp), %edx
+ 24354 FEFFFF
+ 24355 17041 0FB6C0 movzbl %al, %eax
+ 24356 17044 6689855E movw %ax, -2722(%rbp)
+ 24356 F5FFFF
+ 24357 1704b 0FB7855E movzwl -2722(%rbp), %eax
+ 24357 F5FFFF
+ 24358 17052 F6F2 divb %dl
+ 24359 17054 4189C2 movl %eax, %r10d
+ 24360 17057 0FB68569 movzbl -407(%rbp), %eax
+ 24360 FEFFFF
+ 24361 1705e 0FB69559 movzbl -423(%rbp), %edx
+ 24361 FEFFFF
+ 24362 17065 0FB6C0 movzbl %al, %eax
+ 24363 17068 6689855E movw %ax, -2722(%rbp)
+ 24363 F5FFFF
+ 24364 1706f 0FB7855E movzwl -2722(%rbp), %eax
+ 24364 F5FFFF
+ 24365 17076 F6F2 divb %dl
+ 24366 17078 4189C3 movl %eax, %r11d
+ 24367 1707b 0FB6856A movzbl -406(%rbp), %eax
+ 24367 FEFFFF
+ 24368 17082 0FB6955A movzbl -422(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 735
+
+
+ 24368 FEFFFF
+ 24369 17089 0FB6C0 movzbl %al, %eax
+ 24370 1708c 6689855E movw %ax, -2722(%rbp)
+ 24370 F5FFFF
+ 24371 17093 0FB7855E movzwl -2722(%rbp), %eax
+ 24371 F5FFFF
+ 24372 1709a F6F2 divb %dl
+ 24373 1709c 4189C4 movl %eax, %r12d
+ 24374 1709f 0FB6856B movzbl -405(%rbp), %eax
+ 24374 FEFFFF
+ 24375 170a6 0FB6955B movzbl -421(%rbp), %edx
+ 24375 FEFFFF
+ 24376 170ad 0FB6C0 movzbl %al, %eax
+ 24377 170b0 6689855E movw %ax, -2722(%rbp)
+ 24377 F5FFFF
+ 24378 170b7 0FB7855E movzwl -2722(%rbp), %eax
+ 24378 F5FFFF
+ 24379 170be F6F2 divb %dl
+ 24380 170c0 4189C5 movl %eax, %r13d
+ 24381 170c3 0FB6856C movzbl -404(%rbp), %eax
+ 24381 FEFFFF
+ 24382 170ca 0FB6955C movzbl -420(%rbp), %edx
+ 24382 FEFFFF
+ 24383 170d1 0FB6C0 movzbl %al, %eax
+ 24384 170d4 6689855E movw %ax, -2722(%rbp)
+ 24384 F5FFFF
+ 24385 170db 0FB7855E movzwl -2722(%rbp), %eax
+ 24385 F5FFFF
+ 24386 170e2 F6F2 divb %dl
+ 24387 170e4 4189C6 movl %eax, %r14d
+ 24388 170e7 0FB6856D movzbl -403(%rbp), %eax
+ 24388 FEFFFF
+ 24389 170ee 0FB6955D movzbl -419(%rbp), %edx
+ 24389 FEFFFF
+ 24390 170f5 0FB6C0 movzbl %al, %eax
+ 24391 170f8 6689855E movw %ax, -2722(%rbp)
+ 24391 F5FFFF
+ 24392 170ff 0FB7855E movzwl -2722(%rbp), %eax
+ 24392 F5FFFF
+ 24393 17106 F6F2 divb %dl
+ 24394 17108 4189C0 movl %eax, %r8d
+ 24395 1710b 0FB6856E movzbl -402(%rbp), %eax
+ 24395 FEFFFF
+ 24396 17112 0FB6955E movzbl -418(%rbp), %edx
+ 24396 FEFFFF
+ 24397 17119 0FB6C0 movzbl %al, %eax
+ 24398 1711c 6689855E movw %ax, -2722(%rbp)
+ 24398 F5FFFF
+ 24399 17123 0FB7855E movzwl -2722(%rbp), %eax
+ 24399 F5FFFF
+ 24400 1712a F6F2 divb %dl
+ 24401 1712c 89C6 movl %eax, %esi
+ 24402 1712e 0FB6856F movzbl -401(%rbp), %eax
+ 24402 FEFFFF
+ 24403 17135 0FB6955F movzbl -417(%rbp), %edx
+ 24403 FEFFFF
+ 24404 1713c 0FB6C0 movzbl %al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 736
+
+
+ 24405 1713f 6689855E movw %ax, -2722(%rbp)
+ 24405 F5FFFF
+ 24406 17146 0FB7855E movzwl -2722(%rbp), %eax
+ 24406 F5FFFF
+ 24407 1714d F6F2 divb %dl
+ 24408 1714f 89C1 movl %eax, %ecx
+ 24409 .LBB2875:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 24410 .loc 2 346 0
+ 24411 17151 0FB6D3 movzbl %bl, %edx
+ 24412 17154 400FB6C7 movzbl %dil, %eax
+ 24413 17158 48C1E208 salq $8, %rdx
+ 24414 1715c 4809C2 orq %rax, %rdx
+ 24415 1715f 410FB6C1 movzbl %r9b, %eax
+ 24416 17163 48C1E208 salq $8, %rdx
+ 24417 17167 4809C2 orq %rax, %rdx
+ 24418 1716a 0FB685F0 movzbl -2576(%rbp), %eax
+ 24418 F5FFFF
+ 24419 17171 48C1E208 salq $8, %rdx
+ 24420 17175 4809C2 orq %rax, %rdx
+ 24421 17178 0FB685F1 movzbl -2575(%rbp), %eax
+ 24421 F5FFFF
+ 24422 1717f 48C1E208 salq $8, %rdx
+ 24423 17183 4809C2 orq %rax, %rdx
+ 24424 17186 0FB685F2 movzbl -2574(%rbp), %eax
+ 24424 F5FFFF
+ 24425 1718d 48C1E208 salq $8, %rdx
+ 24426 17191 4809C2 orq %rax, %rdx
+ 24427 17194 0FB685F3 movzbl -2573(%rbp), %eax
+ 24427 F5FFFF
+ 24428 1719b 48C1E208 salq $8, %rdx
+ 24429 1719f 4809C2 orq %rax, %rdx
+ 24430 171a2 410FB6C7 movzbl %r15b, %eax
+ 24431 171a6 48C1E208 salq $8, %rdx
+ 24432 171aa 4809C2 orq %rax, %rdx
+ 24433 171ad 0FB6C1 movzbl %cl, %eax
+ 24434 171b0 400FB6CE movzbl %sil, %ecx
+ 24435 171b4 48C1E008 salq $8, %rax
+ 24436 171b8 4809C8 orq %rcx, %rax
+ 24437 171bb 410FB6C8 movzbl %r8b, %ecx
+ 24438 171bf 48C1E008 salq $8, %rax
+ 24439 171c3 4809C8 orq %rcx, %rax
+ 24440 171c6 410FB6CE movzbl %r14b, %ecx
+ 24441 171ca 48C1E008 salq $8, %rax
+ 24442 171ce 4809C8 orq %rcx, %rax
+ 24443 171d1 410FB6CD movzbl %r13b, %ecx
+ 24444 171d5 48C1E008 salq $8, %rax
+ 24445 171d9 4809C8 orq %rcx, %rax
+ 24446 171dc 410FB6CC movzbl %r12b, %ecx
+ 24447 171e0 48C1E008 salq $8, %rax
+ 24448 171e4 4809C8 orq %rcx, %rax
+ 24449 171e7 410FB6CB movzbl %r11b, %ecx
+ 24450 171eb 48C1E008 salq $8, %rax
+ 24451 171ef 4809C8 orq %rcx, %rax
+ 24452 171f2 410FB6CA movzbl %r10b, %ecx
+ 24453 171f6 48C1E008 salq $8, %rax
+ 24454 171fa 4809C8 orq %rcx, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 737
+
+
+ 24455 171fd 48899560 movq %rdx, -2720(%rbp)
+ 24455 F5FFFF
+ 24456 17204 48898568 movq %rax, -2712(%rbp)
+ 24456 F5FFFF
+ 24457 1720b 660F6F85 movdqa -2720(%rbp), %xmm0
+ 24457 60F5FFFF
+ 24458 .LBE2875:
+ 24459 .LBE2874:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 24460 .loc 2 862 0
+ 24461 17213 F30F7F85 movdqu %xmm0, -496(%rbp)
+ 24461 10FEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 24462 .loc 2 866 0
+ 24463 1721b C785ECFD movl $0, -532(%rbp)
+ 24463 FFFF0000
+ 24463 0000
+ 24464 17225 E9860200 jmp .L640
+ 24464 00
+ 24465 .L649:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 24466 .loc 2 868 0
+ 24467 1722a 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 24467 00000000
+ 24468 17232 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 24468 80FEFFFF
+ 24469 1723a F30F6F85 movdqu -496(%rbp), %xmm0
+ 24469 10FEFFFF
+ 24470 17242 F30F7F85 movdqu %xmm0, -400(%rbp)
+ 24470 70FEFFFF
+ 24471 .LBB2876:
+ 24472 .LBB2877:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 24473 .loc 2 380 0
+ 24474 1724a F30F6F85 movdqu -384(%rbp), %xmm0
+ 24474 80FEFFFF
+ 24475 17252 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 24475 50F8FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 24476 .loc 2 381 0
+ 24477 1725a F30F6F85 movdqu -400(%rbp), %xmm0
+ 24477 70FEFFFF
+ 24478 17262 F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 24478 40F8FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 24479 .loc 2 383 0
+ 24480 1726a C7859CFE movl $0, -356(%rbp)
+ 24480 FFFF0000
+ 24480 0000
+ 24481 17274 EB5C jmp .L641
+ 24482 .L644:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 24483 .loc 2 385 0
+ 24484 17276 8B859CFE movl -356(%rbp), %eax
+ 24484 FFFF
+ 24485 1727c 89C0 mov %eax, %eax
+ 24486 1727e 0FB68405 movzbl -1984(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 738
+
+
+ 24486 40F8FFFF
+ 24487 17286 84C0 testb %al, %al
+ 24488 17288 7912 jns .L642
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 24489 .loc 2 386 0
+ 24490 1728a 8B859CFE movl -356(%rbp), %eax
+ 24490 FFFF
+ 24491 17290 89C0 mov %eax, %eax
+ 24492 17292 C6840560 movb $0, -1952(%rbp,%rax)
+ 24492 F8FFFF00
+ 24493 1729a EB2F jmp .L643
+ 24494 .L642:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 24495 .loc 2 388 0
+ 24496 1729c 8B8D9CFE movl -356(%rbp), %ecx
+ 24496 FFFF
+ 24497 172a2 8B859CFE movl -356(%rbp), %eax
+ 24497 FFFF
+ 24498 172a8 89C0 mov %eax, %eax
+ 24499 172aa 0FB68405 movzbl -1984(%rbp,%rax), %eax
+ 24499 40F8FFFF
+ 24500 172b2 0FB6C0 movzbl %al, %eax
+ 24501 172b5 83E00F andl $15, %eax
+ 24502 172b8 4898 cltq
+ 24503 172ba 0FB69405 movzbl -1968(%rbp,%rax), %edx
+ 24503 50F8FFFF
+ 24504 172c2 89C8 mov %ecx, %eax
+ 24505 172c4 88940560 movb %dl, -1952(%rbp,%rax)
+ 24505 F8FFFF
+ 24506 .L643:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 24507 .loc 2 383 0
+ 24508 172cb 83859CFE addl $1, -356(%rbp)
+ 24508 FFFF01
+ 24509 .L641:
+ 24510 172d2 83BD9CFE cmpl $15, -356(%rbp)
+ 24510 FFFF0F
+ 24511 172d9 769B jbe .L644
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 24512 .loc 2 391 0
+ 24513 172db F30F6F85 movdqu -1952(%rbp), %xmm0
+ 24513 60F8FFFF
+ 24514 .LBE2877:
+ 24515 .LBE2876:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 24516 .loc 2 868 0
+ 24517 172e3 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 24517 00FEFFFF
+ 24518 172eb F30F6F85 movdqu -480(%rbp), %xmm0
+ 24518 20FEFFFF
+ 24519 172f3 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 24519 B0FEFFFF
+ 24520 172fb F30F6F85 movdqu -512(%rbp), %xmm0
+ 24520 00FEFFFF
+ 24521 17303 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 24521 A0FEFFFF
+ 24522 .LBB2878:
+
GAS LISTING /tmp/ccMa7HLZ.s page 739
+
+
+ 24523 .LBB2879:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 24524 .loc 2 234 0
+ 24525 1730b F30F6F85 movdqu -352(%rbp), %xmm0
+ 24525 A0FEFFFF
+ 24526 17313 F30F6F8D movdqu -336(%rbp), %xmm1
+ 24526 B0FEFFFF
+ 24527 1731b 660FEBC1 por %xmm1, %xmm0
+ 24528 .LBE2879:
+ 24529 .LBE2878:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 24530 .loc 2 870 0
+ 24531 1731f F30F7F85 movdqu %xmm0, -512(%rbp)
+ 24531 00FEFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 24532 .loc 2 872 0
+ 24533 17327 8B85ECFD mov -532(%rbp), %eax
+ 24533 FFFF
+ 24534 1732d 48C1E004 salq $4, %rax
+ 24535 17331 480385C8 addq -568(%rbp), %rax
+ 24535 FDFFFF
+ 24536 17338 660F6F00 movdqa (%rax), %xmm0
+ 24537 1733c F30F7F85 movdqu %xmm0, -304(%rbp)
+ 24537 D0FEFFFF
+ 24538 17344 F30F6F85 movdqu -512(%rbp), %xmm0
+ 24538 00FEFFFF
+ 24539 1734c F30F7F85 movdqu %xmm0, -320(%rbp)
+ 24539 C0FEFFFF
+ 24540 .LBB2880:
+ 24541 .LBB2881:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 24542 .loc 2 380 0
+ 24543 17354 F30F6F85 movdqu -304(%rbp), %xmm0
+ 24543 D0FEFFFF
+ 24544 1735c F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 24544 80F8FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 24545 .loc 2 381 0
+ 24546 17364 F30F6F85 movdqu -320(%rbp), %xmm0
+ 24546 C0FEFFFF
+ 24547 1736c F30F7F85 movdqu %xmm0, -1936(%rbp)
+ 24547 70F8FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 24548 .loc 2 383 0
+ 24549 17374 C785ECFE movl $0, -276(%rbp)
+ 24549 FFFF0000
+ 24549 0000
+ 24550 1737e EB5C jmp .L645
+ 24551 .L648:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 24552 .loc 2 385 0
+ 24553 17380 8B85ECFE movl -276(%rbp), %eax
+ 24553 FFFF
+ 24554 17386 89C0 mov %eax, %eax
+ 24555 17388 0FB68405 movzbl -1936(%rbp,%rax), %eax
+ 24555 70F8FFFF
+ 24556 17390 84C0 testb %al, %al
+
GAS LISTING /tmp/ccMa7HLZ.s page 740
+
+
+ 24557 17392 7912 jns .L646
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 24558 .loc 2 386 0
+ 24559 17394 8B85ECFE movl -276(%rbp), %eax
+ 24559 FFFF
+ 24560 1739a 89C0 mov %eax, %eax
+ 24561 1739c C6840590 movb $0, -1904(%rbp,%rax)
+ 24561 F8FFFF00
+ 24562 173a4 EB2F jmp .L647
+ 24563 .L646:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 24564 .loc 2 388 0
+ 24565 173a6 8B8DECFE movl -276(%rbp), %ecx
+ 24565 FFFF
+ 24566 173ac 8B85ECFE movl -276(%rbp), %eax
+ 24566 FFFF
+ 24567 173b2 89C0 mov %eax, %eax
+ 24568 173b4 0FB68405 movzbl -1936(%rbp,%rax), %eax
+ 24568 70F8FFFF
+ 24569 173bc 0FB6C0 movzbl %al, %eax
+ 24570 173bf 83E00F andl $15, %eax
+ 24571 173c2 4898 cltq
+ 24572 173c4 0FB69405 movzbl -1920(%rbp,%rax), %edx
+ 24572 80F8FFFF
+ 24573 173cc 89C8 mov %ecx, %eax
+ 24574 173ce 88940590 movb %dl, -1904(%rbp,%rax)
+ 24574 F8FFFF
+ 24575 .L647:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 24576 .loc 2 383 0
+ 24577 173d5 8385ECFE addl $1, -276(%rbp)
+ 24577 FFFF01
+ 24578 .L645:
+ 24579 173dc 83BDECFE cmpl $15, -276(%rbp)
+ 24579 FFFF0F
+ 24580 173e3 769B jbe .L648
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 24581 .loc 2 391 0
+ 24582 173e5 F30F6F85 movdqu -1904(%rbp), %xmm0
+ 24582 90F8FFFF
+ 24583 .LBE2881:
+ 24584 .LBE2880:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 24585 .loc 2 872 0
+ 24586 173ed F30F7F85 movdqu %xmm0, -512(%rbp)
+ 24586 00FEFFFF
+ 24587 173f5 F30F6F85 movdqu -528(%rbp), %xmm0
+ 24587 F0FDFFFF
+ 24588 173fd F30F7F85 movdqu %xmm0, -256(%rbp)
+ 24588 00FFFFFF
+ 24589 17405 F30F6F85 movdqu -512(%rbp), %xmm0
+ 24589 00FEFFFF
+ 24590 1740d F30F7F85 movdqu %xmm0, -272(%rbp)
+ 24590 F0FEFFFF
+ 24591 .LBB2882:
+ 24592 .LBB2883:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+
GAS LISTING /tmp/ccMa7HLZ.s page 741
+
+
+ 24593 .loc 2 234 0
+ 24594 17415 F30F6F85 movdqu -272(%rbp), %xmm0
+ 24594 F0FEFFFF
+ 24595 1741d F30F6F8D movdqu -256(%rbp), %xmm1
+ 24595 00FFFFFF
+ 24596 17425 660FEBC1 por %xmm1, %xmm0
+ 24597 .LBE2883:
+ 24598 .LBE2882:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 24599 .loc 2 874 0
+ 24600 17429 F30F7F85 movdqu %xmm0, -528(%rbp)
+ 24600 F0FDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 24601 .loc 2 876 0
+ 24602 17431 660F6F05 movdqa vec_01(%rip), %xmm0
+ 24602 00000000
+ 24603 17439 F30F6F8D movdqu -496(%rbp), %xmm1
+ 24603 10FEFFFF
+ 24604 17441 F30F7F8D movdqu %xmm1, -224(%rbp)
+ 24604 20FFFFFF
+ 24605 17449 F30F7F85 movdqu %xmm0, -240(%rbp)
+ 24605 10FFFFFF
+ 24606 .LBB2884:
+ 24607 .LBB2885:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 24608 .loc 2 290 0
+ 24609 17451 F30F6F8D movdqu -240(%rbp), %xmm1
+ 24609 10FFFFFF
+ 24610 17459 F30F6F85 movdqu -224(%rbp), %xmm0
+ 24610 20FFFFFF
+ 24611 17461 660FF8C1 psubb %xmm1, %xmm0
+ 24612 .LBE2885:
+ 24613 .LBE2884:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 24614 .loc 2 876 0
+ 24615 17465 F30F7F85 movdqu %xmm0, -496(%rbp)
+ 24615 10FEFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 24616 .loc 2 878 0
+ 24617 1746d 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 24617 00000000
+ 24618 17475 F30F6F8D movdqu -496(%rbp), %xmm1
+ 24618 10FEFFFF
+ 24619 1747d F30F7F8D movdqu %xmm1, -192(%rbp)
+ 24619 40FFFFFF
+ 24620 17485 F30F7F85 movdqu %xmm0, -208(%rbp)
+ 24620 30FFFFFF
+ 24621 .LBB2886:
+ 24622 .LBB2887:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 24623 .loc 2 206 0
+ 24624 1748d F30F6F85 movdqu -208(%rbp), %xmm0
+ 24624 30FFFFFF
+ 24625 17495 F30F6F8D movdqu -192(%rbp), %xmm1
+ 24625 40FFFFFF
+ 24626 1749d 660FDBC1 pand %xmm1, %xmm0
+ 24627 .LBE2887:
+
GAS LISTING /tmp/ccMa7HLZ.s page 742
+
+
+ 24628 .LBE2886:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 24629 .loc 2 878 0
+ 24630 174a1 F30F7F85 movdqu %xmm0, -496(%rbp)
+ 24630 10FEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 24631 .loc 2 866 0
+ 24632 174a9 8385ECFD addl $1, -532(%rbp)
+ 24632 FFFF01
+ 24633 .L640:
+ 24634 174b0 83BDECFD cmpl $15, -532(%rbp)
+ 24634 FFFF0F
+ 24635 174b7 0F866DFD jbe .L649
+ 24635 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 24636 .loc 2 882 0
+ 24637 174bd F30F6F85 movdqu -528(%rbp), %xmm0
+ 24637 F0FDFFFF
+ 24638 .LBE2871:
+ 24639 .LBE2870:
+ 24640 .LBE2869:
+ 24641 .LBE2868:
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+ 24642 .loc 2 2243 0
+ 24643 174c5 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 24643 A0FDFFFF
+ 24644 .LBB2888:
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+ 24645 .loc 2 2245 0
+ 24646 174cd F30F6F85 movdqu -608(%rbp), %xmm0
+ 24646 A0FDFFFF
+ 24647 174d5 F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 24647 20F8FFFF
+ 24648 174dd E8000000 call KDbgWriterGet at PLT
+ 24648 00
+ 24649 174e2 4885C0 testq %rax, %rax
+ 24650 174e5 7479 je .L651
+ 24651 174e7 BF030000 movl $3, %edi
+ 24651 00
+ 24652 174ec E8000000 call KDbgCondToFlag at PLT
+ 24652 00
+ 24653 174f1 4889C6 movq %rax, %rsi
+ 24654 174f4 BF100000 movl $16, %edi
+ 24654 00
+ 24655 174f9 E8000000 call KDbgTestModConds at PLT
+ 24655 00
+ 24656 174fe 84C0 testb %al, %al
+ 24657 17500 745E je .L651
+ 24658 17502 8B852CF8 movl -2004(%rbp), %eax
+ 24658 FFFF
+ 24659 17508 89C7 movl %eax, %edi
+ 24660 1750a E8F18AFE call bswap_32
+ 24660 FF
+ 24661 1750f 4189C5 movl %eax, %r13d
+ 24662 17512 8B8528F8 movl -2008(%rbp), %eax
+ 24662 FFFF
+ 24663 17518 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 743
+
+
+ 24664 1751a E8E18AFE call bswap_32
+ 24664 FF
+ 24665 1751f 4189C4 movl %eax, %r12d
+ 24666 17522 8B8524F8 movl -2012(%rbp), %eax
+ 24666 FFFF
+ 24667 17528 89C7 movl %eax, %edi
+ 24668 1752a E8D18AFE call bswap_32
+ 24668 FF
+ 24669 1752f 89C3 movl %eax, %ebx
+ 24670 17531 8B8520F8 movl -2016(%rbp), %eax
+ 24670 FFFF
+ 24671 17537 89C7 movl %eax, %edi
+ 24672 17539 E8C28AFE call bswap_32
+ 24672 FF
+ 24673 1753e 4589E9 movl %r13d, %r9d
+ 24674 17541 4589E0 movl %r12d, %r8d
+ 24675 17544 89D9 movl %ebx, %ecx
+ 24676 17546 89C2 movl %eax, %edx
+ 24677 17548 488D3500 leaq .LC12(%rip), %rsi
+ 24677 000000
+ 24678 1754f 488D3D00 leaq .LC1(%rip), %rdi
+ 24678 000000
+ 24679 17556 B8000000 movl $0, %eax
+ 24679 00
+ 24680 1755b E8000000 call KDbgMsg at PLT
+ 24680 00
+ 24681 .L651:
+ 24682 17560 F30F6F85 movdqu -608(%rbp), %xmm0
+ 24682 A0FDFFFF
+ 24683 17568 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 24683 50FFFFFF
+ 24684 .LBE2888:
+ 24685 .LBB2889:
+ 24686 .LBB2890:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 24687 .loc 2 612 0
+ 24688 17570 660F6F05 movdqa InvShiftRowTable.6750(%rip), %xmm0
+ 24688 00000000
+ 24689 17578 F30F6F8D movdqu -176(%rbp), %xmm1
+ 24689 50FFFFFF
+ 24690 17580 F30F7F8D movdqu %xmm1, -144(%rbp)
+ 24690 70FFFFFF
+ 24691 17588 F30F7F85 movdqu %xmm0, -160(%rbp)
+ 24691 60FFFFFF
+ 24692 .LBB2891:
+ 24693 .LBB2892:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 24694 .loc 2 380 0
+ 24695 17590 F30F6F85 movdqu -144(%rbp), %xmm0
+ 24695 70FFFFFF
+ 24696 17598 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 24696 B0F8FFFF
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 24697 .loc 2 381 0
+ 24698 175a0 F30F6F85 movdqu -160(%rbp), %xmm0
+ 24698 60FFFFFF
+ 24699 175a8 F30F7F85 movdqu %xmm0, -1888(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 744
+
+
+ 24699 A0F8FFFF
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 24700 .loc 2 383 0
+ 24701 175b0 C7458C00 movl $0, -116(%rbp)
+ 24701 000000
+ 24702 175b7 EB4D jmp .L652
+ 24703 .L655:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 24704 .loc 2 385 0
+ 24705 175b9 8B458C movl -116(%rbp), %eax
+ 24706 175bc 89C0 mov %eax, %eax
+ 24707 175be 0FB68405 movzbl -1888(%rbp,%rax), %eax
+ 24707 A0F8FFFF
+ 24708 175c6 84C0 testb %al, %al
+ 24709 175c8 790F jns .L653
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 24710 .loc 2 386 0
+ 24711 175ca 8B458C movl -116(%rbp), %eax
+ 24712 175cd 89C0 mov %eax, %eax
+ 24713 175cf C68405C0 movb $0, -1856(%rbp,%rax)
+ 24713 F8FFFF00
+ 24714 175d7 EB29 jmp .L654
+ 24715 .L653:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 24716 .loc 2 388 0
+ 24717 175d9 8B4D8C movl -116(%rbp), %ecx
+ 24718 175dc 8B458C movl -116(%rbp), %eax
+ 24719 175df 89C0 mov %eax, %eax
+ 24720 175e1 0FB68405 movzbl -1888(%rbp,%rax), %eax
+ 24720 A0F8FFFF
+ 24721 175e9 0FB6C0 movzbl %al, %eax
+ 24722 175ec 83E00F andl $15, %eax
+ 24723 175ef 4898 cltq
+ 24724 175f1 0FB69405 movzbl -1872(%rbp,%rax), %edx
+ 24724 B0F8FFFF
+ 24725 175f9 89C8 mov %ecx, %eax
+ 24726 175fb 889405C0 movb %dl, -1856(%rbp,%rax)
+ 24726 F8FFFF
+ 24727 .L654:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 24728 .loc 2 383 0
+ 24729 17602 83458C01 addl $1, -116(%rbp)
+ 24730 .L652:
+ 24731 17606 837D8C0F cmpl $15, -116(%rbp)
+ 24732 1760a 76AD jbe .L655
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 24733 .loc 2 391 0
+ 24734 1760c F30F6F85 movdqu -1856(%rbp), %xmm0
+ 24734 C0F8FFFF
+ 24735 .LBE2892:
+ 24736 .LBE2891:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 24737 .loc 2 612 0
+ 24738 17614 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 24738 50FFFFFF
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 24739 .loc 2 613 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 745
+
+
+ 24740 1761c F30F6F85 movdqu -176(%rbp), %xmm0
+ 24740 50FFFFFF
+ 24741 .LBE2890:
+ 24742 .LBE2889:
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+ 24743 .loc 2 2247 0
+ 24744 17624 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 24744 A0FDFFFF
+ 24745 .LBB2893:
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+ 24746 .loc 2 2249 0
+ 24747 1762c F30F6F85 movdqu -608(%rbp), %xmm0
+ 24747 A0FDFFFF
+ 24748 17634 F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 24748 10F8FFFF
+ 24749 1763c E8000000 call KDbgWriterGet at PLT
+ 24749 00
+ 24750 17641 4885C0 testq %rax, %rax
+ 24751 17644 7479 je .L657
+ 24752 17646 BF030000 movl $3, %edi
+ 24752 00
+ 24753 1764b E8000000 call KDbgCondToFlag at PLT
+ 24753 00
+ 24754 17650 4889C6 movq %rax, %rsi
+ 24755 17653 BF100000 movl $16, %edi
+ 24755 00
+ 24756 17658 E8000000 call KDbgTestModConds at PLT
+ 24756 00
+ 24757 1765d 84C0 testb %al, %al
+ 24758 1765f 745E je .L657
+ 24759 17661 8B851CF8 movl -2020(%rbp), %eax
+ 24759 FFFF
+ 24760 17667 89C7 movl %eax, %edi
+ 24761 17669 E89289FE call bswap_32
+ 24761 FF
+ 24762 1766e 4189C5 movl %eax, %r13d
+ 24763 17671 8B8518F8 movl -2024(%rbp), %eax
+ 24763 FFFF
+ 24764 17677 89C7 movl %eax, %edi
+ 24765 17679 E88289FE call bswap_32
+ 24765 FF
+ 24766 1767e 4189C4 movl %eax, %r12d
+ 24767 17681 8B8514F8 movl -2028(%rbp), %eax
+ 24767 FFFF
+ 24768 17687 89C7 movl %eax, %edi
+ 24769 17689 E87289FE call bswap_32
+ 24769 FF
+ 24770 1768e 89C3 movl %eax, %ebx
+ 24771 17690 8B8510F8 movl -2032(%rbp), %eax
+ 24771 FFFF
+ 24772 17696 89C7 movl %eax, %edi
+ 24773 17698 E86389FE call bswap_32
+ 24773 FF
+ 24774 1769d 4589E9 movl %r13d, %r9d
+ 24775 176a0 4589E0 movl %r12d, %r8d
+ 24776 176a3 89D9 movl %ebx, %ecx
+ 24777 176a5 89C2 movl %eax, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s page 746
+
+
+ 24778 176a7 488D3500 leaq .LC13(%rip), %rsi
+ 24778 000000
+ 24779 176ae 488D3D00 leaq .LC1(%rip), %rdi
+ 24779 000000
+ 24780 176b5 B8000000 movl $0, %eax
+ 24780 00
+ 24781 176ba E8000000 call KDbgMsg at PLT
+ 24781 00
+ 24782 .L657:
+ 24783 176bf F30F6F85 movdqu -608(%rbp), %xmm0
+ 24783 A0FDFFFF
+ 24784 176c7 F30F7F45 movdqu %xmm0, -96(%rbp)
+ 24784 A0
+ 24785 176cc F30F6F85 movdqu -624(%rbp), %xmm0
+ 24785 90FDFFFF
+ 24786 176d4 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 24786 90
+ 24787 176d9 F30F6F45 movdqu -96(%rbp), %xmm0
+ 24787 A0
+ 24788 176de F30F7F45 movdqu %xmm0, -64(%rbp)
+ 24788 C0
+ 24789 176e3 F30F6F45 movdqu -112(%rbp), %xmm0
+ 24789 90
+ 24790 176e8 F30F7F45 movdqu %xmm0, -80(%rbp)
+ 24790 B0
+ 24791 .LBE2893:
+ 24792 .LBB2894:
+ 24793 .LBB2895:
+ 24794 .LBB2896:
+ 24795 .LBB2897:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 24796 .loc 2 178 0
+ 24797 176ed F30F6F45 movdqu -80(%rbp), %xmm0
+ 24797 B0
+ 24798 176f2 F30F6F4D movdqu -64(%rbp), %xmm1
+ 24798 C0
+ 24799 176f7 660FEFC1 pxor %xmm1, %xmm0
+ 24800 .LBE2897:
+ 24801 .LBE2896:
+ 24802 .LBE2895:
+ 24803 .LBE2894:
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 24804 .loc 2 2251 0
+ 24805 176fb F30F7F85 movdqu %xmm0, -608(%rbp)
+ 24805 A0FDFFFF
+ 24806 .LBB2898:
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 24807 .loc 2 2253 0
+ 24808 17703 F30F6F85 movdqu -624(%rbp), %xmm0
+ 24808 90FDFFFF
+ 24809 1770b F30F7F85 movdqu %xmm0, -2048(%rbp)
+ 24809 00F8FFFF
+ 24810 17713 E8000000 call KDbgWriterGet at PLT
+ 24810 00
+ 24811 17718 4885C0 testq %rax, %rax
+ 24812 1771b 7479 je .L659
+ 24813 1771d BF030000 movl $3, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 747
+
+
+ 24813 00
+ 24814 17722 E8000000 call KDbgCondToFlag at PLT
+ 24814 00
+ 24815 17727 4889C6 movq %rax, %rsi
+ 24816 1772a BF100000 movl $16, %edi
+ 24816 00
+ 24817 1772f E8000000 call KDbgTestModConds at PLT
+ 24817 00
+ 24818 17734 84C0 testb %al, %al
+ 24819 17736 745E je .L659
+ 24820 17738 8B850CF8 movl -2036(%rbp), %eax
+ 24820 FFFF
+ 24821 1773e 89C7 movl %eax, %edi
+ 24822 17740 E8BB88FE call bswap_32
+ 24822 FF
+ 24823 17745 4189C5 movl %eax, %r13d
+ 24824 17748 8B8508F8 movl -2040(%rbp), %eax
+ 24824 FFFF
+ 24825 1774e 89C7 movl %eax, %edi
+ 24826 17750 E8AB88FE call bswap_32
+ 24826 FF
+ 24827 17755 4189C4 movl %eax, %r12d
+ 24828 17758 8B8504F8 movl -2044(%rbp), %eax
+ 24828 FFFF
+ 24829 1775e 89C7 movl %eax, %edi
+ 24830 17760 E89B88FE call bswap_32
+ 24830 FF
+ 24831 17765 89C3 movl %eax, %ebx
+ 24832 17767 8B8500F8 movl -2048(%rbp), %eax
+ 24832 FFFF
+ 24833 1776d 89C7 movl %eax, %edi
+ 24834 1776f E88C88FE call bswap_32
+ 24834 FF
+ 24835 17774 4589E9 movl %r13d, %r9d
+ 24836 17777 4589E0 movl %r12d, %r8d
+ 24837 1777a 89D9 movl %ebx, %ecx
+ 24838 1777c 89C2 movl %eax, %edx
+ 24839 1777e 488D3500 leaq .LC6(%rip), %rsi
+ 24839 000000
+ 24840 17785 488D3D00 leaq .LC1(%rip), %rdi
+ 24840 000000
+ 24841 1778c B8000000 movl $0, %eax
+ 24841 00
+ 24842 17791 E8000000 call KDbgMsg at PLT
+ 24842 00
+ 24843 .L659:
+ 24844 .LBE2898:
+ 24845 .LBB2899:
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 24846 .loc 2 2254 0
+ 24847 17796 F30F6F85 movdqu -608(%rbp), %xmm0
+ 24847 A0FDFFFF
+ 24848 1779e F30F7F85 movdqu %xmm0, -2064(%rbp)
+ 24848 F0F7FFFF
+ 24849 177a6 E8000000 call KDbgWriterGet at PLT
+ 24849 00
+ 24850 177ab 4885C0 testq %rax, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s page 748
+
+
+ 24851 177ae 7479 je .L661
+ 24852 177b0 BF030000 movl $3, %edi
+ 24852 00
+ 24853 177b5 E8000000 call KDbgCondToFlag at PLT
+ 24853 00
+ 24854 177ba 4889C6 movq %rax, %rsi
+ 24855 177bd BF100000 movl $16, %edi
+ 24855 00
+ 24856 177c2 E8000000 call KDbgTestModConds at PLT
+ 24856 00
+ 24857 177c7 84C0 testb %al, %al
+ 24858 177c9 745E je .L661
+ 24859 177cb 8B85FCF7 movl -2052(%rbp), %eax
+ 24859 FFFF
+ 24860 177d1 89C7 movl %eax, %edi
+ 24861 177d3 E82888FE call bswap_32
+ 24861 FF
+ 24862 177d8 4189C5 movl %eax, %r13d
+ 24863 177db 8B85F8F7 movl -2056(%rbp), %eax
+ 24863 FFFF
+ 24864 177e1 89C7 movl %eax, %edi
+ 24865 177e3 E81888FE call bswap_32
+ 24865 FF
+ 24866 177e8 4189C4 movl %eax, %r12d
+ 24867 177eb 8B85F4F7 movl -2060(%rbp), %eax
+ 24867 FFFF
+ 24868 177f1 89C7 movl %eax, %edi
+ 24869 177f3 E80888FE call bswap_32
+ 24869 FF
+ 24870 177f8 89C3 movl %eax, %ebx
+ 24871 177fa 8B85F0F7 movl -2064(%rbp), %eax
+ 24871 FFFF
+ 24872 17800 89C7 movl %eax, %edi
+ 24873 17802 E8F987FE call bswap_32
+ 24873 FF
+ 24874 17807 4589E9 movl %r13d, %r9d
+ 24875 1780a 4589E0 movl %r12d, %r8d
+ 24876 1780d 89D9 movl %ebx, %ecx
+ 24877 1780f 89C2 movl %eax, %edx
+ 24878 17811 488D3500 leaq .LC11(%rip), %rsi
+ 24878 000000
+ 24879 17818 488D3D00 leaq .LC1(%rip), %rdi
+ 24879 000000
+ 24880 1781f B8000000 movl $0, %eax
+ 24880 00
+ 24881 17824 E8000000 call KDbgMsg at PLT
+ 24881 00
+ 24882 .L661:
+ 24883 .LBE2899:
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 24884 .loc 2 2256 0
+ 24885 17829 F30F6F85 movdqu -608(%rbp), %xmm0
+ 24885 A0FDFFFF
+ 24886 .LBE2866:
+ 24887 .LBE2865:
+2280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 24888 .loc 2 2280 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 749
+
+
+ 24889 17831 4881C488 addq $2696, %rsp
+ 24889 0A0000
+ 24890 17838 5B popq %rbx
+ 24891 17839 415C popq %r12
+ 24892 1783b 415D popq %r13
+ 24893 1783d 415E popq %r14
+ 24894 1783f 415F popq %r15
+ 24895 17841 C9 leave
+ 24896 17842 C3 ret
+ 24897 .cfi_endproc
+ 24898 .LFE577:
+ 24899 .size KAESBlockCipherVecEqInvCipher, .-KAESBlockCipherVecEqInvCipher
+ 24900 .section .rodata
+ 24901 .type KAESBlockCipherVecaes_ncbi_name, @object
+ 24902 .size KAESBlockCipherVecaes_ncbi_name, 10
+ 24903 KAESBlockCipherVecaes_ncbi_name:
+ 24904 0460 4145535F .string "AES_CLASS"
+ 24904 434C4153
+ 24904 5300
+ 24905 .text
+ 24906 .type KAESBlockCipherVecDestroy, @function
+ 24907 KAESBlockCipherVecDestroy:
+ 24908 .LFB578:
+2308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 24909 .loc 2 2308 0
+ 24910 .cfi_startproc
+ 24911 17843 55 pushq %rbp
+ 24912 .LCFI20:
+ 24913 .cfi_def_cfa_offset 16
+ 24914 17844 4889E5 movq %rsp, %rbp
+ 24915 .cfi_offset 6, -16
+ 24916 .LCFI21:
+ 24917 .cfi_def_cfa_register 6
+ 24918 17847 48897DF8 movq %rdi, -8(%rbp)
+2310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 24919 .loc 2 2310 0
+ 24920 1784b C9 leave
+ 24921 1784c C3 ret
+ 24922 .cfi_endproc
+ 24923 .LFE578:
+ 24924 .size KAESBlockCipherVecDestroy, .-KAESBlockCipherVecDestroy
+ 24925 .type KAESBlockCipherVecBlockSize, @function
+ 24926 KAESBlockCipherVecBlockSize:
+ 24927 .LFB579:
+2318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 24928 .loc 2 2318 0
+ 24929 .cfi_startproc
+ 24930 1784d 55 pushq %rbp
+ 24931 .LCFI22:
+ 24932 .cfi_def_cfa_offset 16
+ 24933 1784e 4889E5 movq %rsp, %rbp
+ 24934 .cfi_offset 6, -16
+ 24935 .LCFI23:
+ 24936 .cfi_def_cfa_register 6
+2319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (uint32_t) sizeof (AESBlock);
+ 24937 .loc 2 2319 0
+ 24938 17851 B8100000 movl $16, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 750
+
+
+ 24938 00
+2320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 24939 .loc 2 2320 0
+ 24940 17856 C9 leave
+ 24941 17857 C3 ret
+ 24942 .cfi_endproc
+ 24943 .LFE579:
+ 24944 .size KAESBlockCipherVecBlockSize, .-KAESBlockCipherVecBlockSize
+ 24945 .type KAESBlockCipherVecKeySize, @function
+ 24946 KAESBlockCipherVecKeySize:
+ 24947 .LFB580:
+2333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 24948 .loc 2 2333 0
+ 24949 .cfi_startproc
+ 24950 17858 55 pushq %rbp
+ 24951 .LCFI24:
+ 24952 .cfi_def_cfa_offset 16
+ 24953 17859 4889E5 movq %rsp, %rbp
+ 24954 .cfi_offset 6, -16
+ 24955 .LCFI25:
+ 24956 .cfi_def_cfa_register 6
+2334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (uint32_t) sizeof (AESKeySchedule);
+ 24957 .loc 2 2334 0
+ 24958 1785c B8000100 movl $256, %eax
+ 24958 00
+2335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 24959 .loc 2 2335 0
+ 24960 17861 C9 leave
+ 24961 17862 C3 ret
+ 24962 .cfi_endproc
+ 24963 .LFE580:
+ 24964 .size KAESBlockCipherVecKeySize, .-KAESBlockCipherVecKeySize
+ 24965 .section .rodata
+ 24966 046a 00000000 .align 8
+ 24966 0000
+ 24967 .LC15:
+ 24968 0470 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 24968 652F726F
+ 24968 6461726D
+ 24968 65722F73
+ 24968 72615F73
+ 24969 .text
+ 24970 .type KAESBlockCipherVecSetEncryptKey, @function
+ 24971 KAESBlockCipherVecSetEncryptKey:
+ 24972 .LFB581:
+2347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 24973 .loc 2 2347 0
+ 24974 .cfi_startproc
+ 24975 17863 55 pushq %rbp
+ 24976 .LCFI26:
+ 24977 .cfi_def_cfa_offset 16
+ 24978 17864 4889E5 movq %rsp, %rbp
+ 24979 .cfi_offset 6, -16
+ 24980 .LCFI27:
+ 24981 .cfi_def_cfa_register 6
+ 24982 17867 4883EC30 subq $48, %rsp
+ 24983 1786b 48897DE8 movq %rdi, -24(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s page 751
+
+
+ 24984 1786f 488975E0 movq %rsi, -32(%rbp)
+ 24985 17873 8955DC movl %edx, -36(%rbp)
+2351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = 0;
+ 24986 .loc 2 2351 0
+ 24987 17876 C745F400 movl $0, -12(%rbp)
+ 24987 000000
+2352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key = encrypt_key;
+ 24988 .loc 2 2352 0
+ 24989 1787d 488B45E8 movq -24(%rbp), %rax
+ 24990 17881 488945F8 movq %rax, -8(%rbp)
+2354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (user_key_size)
+ 24991 .loc 2 2354 0
+ 24992 17885 8B45DC movl -36(%rbp), %eax
+ 24993 17888 83F818 cmpl $24, %eax
+ 24994 1788b 7430 je .L672
+ 24995 1788d 83F820 cmpl $32, %eax
+ 24996 17890 744E je .L673
+ 24997 17892 83F810 cmpl $16, %eax
+ 24998 17895 756C jne .L676
+ 24999 .L671:
+2357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_128;
+ 25000 .loc 2 2357 0
+ 25001 17897 488B45F8 movq -8(%rbp), %rax
+ 25002 1789b C780F000 movl $10, 240(%rax)
+ 25002 00000A00
+ 25002 0000
+2358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+ 25003 .loc 2 2358 0
+ 25004 178a5 488B55E0 movq -32(%rbp), %rdx
+ 25005 178a9 488B45F8 movq -8(%rbp), %rax
+ 25006 178ad 4889D6 movq %rdx, %rsi
+ 25007 178b0 4889C7 movq %rax, %rdi
+ 25008 178b3 E85C87FE call KAESBlockCipherVecKeyExpansion128
+ 25008 FF
+2359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25009 .loc 2 2359 0
+ 25010 178b8 E98A0000 jmp .L674
+ 25010 00
+ 25011 .L672:
+2362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_192;
+ 25012 .loc 2 2362 0
+ 25013 178bd 488B45F8 movq -8(%rbp), %rax
+ 25014 178c1 C780F000 movl $12, 240(%rax)
+ 25014 00000C00
+ 25014 0000
+2363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+ 25015 .loc 2 2363 0
+ 25016 178cb 488B55E0 movq -32(%rbp), %rdx
+ 25017 178cf 488B45F8 movq -8(%rbp), %rax
+ 25018 178d3 4889D6 movq %rdx, %rsi
+ 25019 178d6 4889C7 movq %rax, %rdi
+ 25020 178d9 E84003FF call KAESBlockCipherVecKeyExpansion192
+ 25020 FF
+2364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25021 .loc 2 2364 0
+ 25022 178de EB67 jmp .L674
+ 25023 .L673:
+
GAS LISTING /tmp/ccMa7HLZ.s page 752
+
+
+2367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_256;
+ 25024 .loc 2 2367 0
+ 25025 178e0 488B45F8 movq -8(%rbp), %rax
+ 25026 178e4 C780F000 movl $14, 240(%rax)
+ 25026 00000E00
+ 25026 0000
+2368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+ 25027 .loc 2 2368 0
+ 25028 178ee 488B55E0 movq -32(%rbp), %rdx
+ 25029 178f2 488B45F8 movq -8(%rbp), %rax
+ 25030 178f6 4889D6 movq %rdx, %rsi
+ 25031 178f9 4889C7 movq %rax, %rdi
+ 25032 178fc E85553FF call KAESBlockCipherVecKeyExpansion256
+ 25032 FF
+2369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25033 .loc 2 2369 0
+ 25034 17901 EB44 jmp .L674
+ 25035 .L676:
+2372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = 0;
+ 25036 .loc 2 2372 0
+ 25037 17903 488B45F8 movq -8(%rbp), %rax
+ 25038 17907 C780F000 movl $0, 240(%rax)
+ 25038 00000000
+ 25038 0000
+2373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memset (key, 0, sizeof (*key));
+ 25039 .loc 2 2373 0
+ 25040 17911 488B45F8 movq -8(%rbp), %rax
+ 25041 17915 BA000100 movl $256, %edx
+ 25041 00
+ 25042 1791a BE000000 movl $0, %esi
+ 25042 00
+ 25043 1791f 4889C7 movq %rax, %rdi
+ 25044 17922 E8000000 call memset at PLT
+ 25044 00
+2374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+ 25045 .loc 2 2374 0
+ 25046 17927 B9460900 movl $2374, %ecx
+ 25046 00
+ 25047 1792c 488D1500 leaq __func__.8464(%rip), %rdx
+ 25047 000000
+ 25048 17933 488D3500 leaq .LC15(%rip), %rsi
+ 25048 000000
+ 25049 1793a BFCA8F04 movl $-2029744182, %edi
+ 25049 87
+ 25050 1793f E8000000 call SetRCFileFuncLine at PLT
+ 25050 00
+ 25051 17944 8945F4 movl %eax, -12(%rbp)
+ 25052 .L674:
+2377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+ 25053 .loc 2 2377 0
+ 25054 17947 8B45F4 movl -12(%rbp), %eax
+2378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 25055 .loc 2 2378 0
+ 25056 1794a C9 leave
+ 25057 1794b C3 ret
+ 25058 .cfi_endproc
+ 25059 .LFE581:
+
GAS LISTING /tmp/ccMa7HLZ.s page 753
+
+
+ 25060 .size KAESBlockCipherVecSetEncryptKey, .-KAESBlockCipherVecSetEncryptKey
+ 25061 .type KAESBlockCipherVecSetDecryptKey, @function
+ 25062 KAESBlockCipherVecSetDecryptKey:
+ 25063 .LFB582:
+2391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25064 .loc 2 2391 0
+ 25065 .cfi_startproc
+ 25066 1794c 55 pushq %rbp
+ 25067 .LCFI28:
+ 25068 .cfi_def_cfa_offset 16
+ 25069 1794d 4889E5 movq %rsp, %rbp
+ 25070 .cfi_offset 6, -16
+ 25071 .LCFI29:
+ 25072 .cfi_def_cfa_register 6
+ 25073 17950 4881EC30 subq $304, %rsp
+ 25073 010000
+ 25074 17957 4889BDE8 movq %rdi, -280(%rbp)
+ 25074 FEFFFF
+ 25075 1795e 4889B5E0 movq %rsi, -288(%rbp)
+ 25075 FEFFFF
+ 25076 17965 8995DCFE movl %edx, -292(%rbp)
+ 25076 FFFF
+2395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+ 25077 .loc 2 2395 0
+ 25078 1796b 8B95DCFE movl -292(%rbp), %edx
+ 25078 FFFF
+ 25079 17971 488B8DE0 movq -288(%rbp), %rcx
+ 25079 FEFFFF
+ 25080 17978 488D85F0 leaq -272(%rbp), %rax
+ 25080 FEFFFF
+ 25081 1797f 4889CE movq %rcx, %rsi
+ 25082 17982 4889C7 movq %rax, %rdi
+ 25083 17985 E8D9FEFF call KAESBlockCipherVecSetEncryptKey
+ 25083 FF
+ 25084 1798a 8945F4 movl %eax, -12(%rbp)
+2396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (rc == 0)
+ 25085 .loc 2 2396 0
+ 25086 1798d 837DF400 cmpl $0, -12(%rbp)
+ 25087 17991 7577 jne .L678
+ 25088 .LBB2900:
+2400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key = decrypt_key;
+ 25089 .loc 2 2400 0
+ 25090 17993 488B85E8 movq -280(%rbp), %rax
+ 25090 FEFFFF
+ 25091 1799a 488945F8 movq %rax, -8(%rbp)
+2402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+ 25092 .loc 2 2402 0
+ 25093 1799e 8B55E0 movl -32(%rbp), %edx
+ 25094 179a1 488B45F8 movq -8(%rbp), %rax
+ 25095 179a5 8990F000 movl %edx, 240(%rax)
+ 25095 0000
+ 25096 179ab 488B45F8 movq -8(%rbp), %rax
+ 25097 179af 8B80F000 movl 240(%rax), %eax
+ 25097 0000
+ 25098 179b5 83F80C cmpl $12, %eax
+ 25099 179b8 7422 je .L680
+ 25100 179ba 83F80E cmpl $14, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s page 754
+
+
+ 25101 179bd 7435 je .L681
+ 25102 179bf 83F80A cmpl $10, %eax
+ 25103 179c2 7546 jne .L678
+ 25104 .L679:
+2405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+ 25105 .loc 2 2405 0
+ 25106 179c4 488B45F8 movq -8(%rbp), %rax
+ 25107 179c8 488D95F0 leaq -272(%rbp), %rdx
+ 25107 FEFFFF
+ 25108 179cf 4889D6 movq %rdx, %rsi
+ 25109 179d2 4889C7 movq %rax, %rdi
+ 25110 179d5 E8C8C1FF call KAESBlockCipherVecEqInvKeyExpansion128
+ 25110 FF
+2407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25111 .loc 2 2407 0
+ 25112 179da EB2E jmp .L678
+ 25113 .L680:
+2410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+ 25114 .loc 2 2410 0
+ 25115 179dc 488B45F8 movq -8(%rbp), %rax
+ 25116 179e0 488D95F0 leaq -272(%rbp), %rdx
+ 25116 FEFFFF
+ 25117 179e7 4889D6 movq %rdx, %rsi
+ 25118 179ea 4889C7 movq %rax, %rdi
+ 25119 179ed E8DAC1FF call KAESBlockCipherVecEqInvKeyExpansion192
+ 25119 FF
+2412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25120 .loc 2 2412 0
+ 25121 179f2 EB16 jmp .L678
+ 25122 .L681:
+2415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+ 25123 .loc 2 2415 0
+ 25124 179f4 488B45F8 movq -8(%rbp), %rax
+ 25125 179f8 488D95F0 leaq -272(%rbp), %rdx
+ 25125 FEFFFF
+ 25126 179ff 4889D6 movq %rdx, %rsi
+ 25127 17a02 4889C7 movq %rax, %rdi
+ 25128 17a05 E8ECC1FF call KAESBlockCipherVecEqInvKeyExpansion256
+ 25128 FF
+ 25129 .L678:
+ 25130 .LBE2900:
+2420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+ 25131 .loc 2 2420 0
+ 25132 17a0a 8B45F4 movl -12(%rbp), %eax
+2421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 25133 .loc 2 2421 0
+ 25134 17a0d C9 leave
+ 25135 17a0e C3 ret
+ 25136 .cfi_endproc
+ 25137 .LFE582:
+ 25138 .size KAESBlockCipherVecSetDecryptKey, .-KAESBlockCipherVecSetDecryptKey
+ 25139 .section .rodata
+ 25140 .LC16:
+ 25141 04a6 6B657900 .string "key"
+ 25142 .text
+ 25143 .type KAESBlockCipherVecEncrypt, @function
+ 25144 KAESBlockCipherVecEncrypt:
+
GAS LISTING /tmp/ccMa7HLZ.s page 755
+
+
+ 25145 .LFB583:
+2434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25146 .loc 2 2434 0
+ 25147 .cfi_startproc
+ 25148 17a0f 55 pushq %rbp
+ 25149 .LCFI30:
+ 25150 .cfi_def_cfa_offset 16
+ 25151 17a10 4889E5 movq %rsp, %rbp
+ 25152 .cfi_offset 6, -16
+ 25153 .LCFI31:
+ 25154 .cfi_def_cfa_register 6
+ 25155 17a13 4883EC30 subq $48, %rsp
+ 25156 17a17 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25156 E0
+ 25157 17a1c 48897DD8 movq %rdi, -40(%rbp)
+2435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESKeySchedule * key = encrypt_key;
+ 25158 .loc 2 2435 0
+ 25159 17a20 488B45D8 movq -40(%rbp), %rax
+ 25160 17a24 488945F8 movq %rax, -8(%rbp)
+2436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (key);
+ 25161 .loc 2 2436 0
+ 25162 17a28 48837DF8 cmpq $0, -8(%rbp)
+ 25162 00
+ 25163 17a2d 751F jne .L684
+ 25164 17a2f 488D0D00 leaq __PRETTY_FUNCTION__.8500(%rip), %rcx
+ 25164 000000
+ 25165 17a36 BA840900 movl $2436, %edx
+ 25165 00
+ 25166 17a3b 488D3500 leaq .LC15(%rip), %rsi
+ 25166 000000
+ 25167 17a42 488D3D00 leaq .LC16(%rip), %rdi
+ 25167 000000
+ 25168 17a49 E8000000 call __assert_fail at PLT
+ 25168 00
+ 25169 .L684:
+2438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds)
+ 25170 .loc 2 2438 0
+ 25171 17a4e 488B45F8 movq -8(%rbp), %rax
+ 25172 17a52 8B80F000 movl 240(%rax), %eax
+ 25172 0000
+ 25173 17a58 83F80C cmpl $12, %eax
+ 25174 17a5b 7436 je .L687
+ 25175 17a5d 83F80E cmpl $14, %eax
+ 25176 17a60 744E je .L688
+ 25177 17a62 83F80A cmpl $10, %eax
+ 25178 17a65 740F je .L686
+2441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = vec_00;
+ 25179 .loc 2 2441 0
+ 25180 17a67 660F6F05 movdqa vec_00(%rip), %xmm0
+ 25180 00000000
+ 25181 17a6f 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25181 E0
+2442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25182 .loc 2 2442 0
+ 25183 17a74 EB55 jmp .L689
+ 25184 .L686:
+2445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+
GAS LISTING /tmp/ccMa7HLZ.s page 756
+
+
+ 25185 .loc 2 2445 0
+ 25186 17a76 488B45F8 movq -8(%rbp), %rax
+ 25187 17a7a 660F6F45 movdqa -32(%rbp), %xmm0
+ 25187 E0
+ 25188 17a7f BE0A0000 movl $10, %esi
+ 25188 00
+ 25189 17a84 4889C7 movq %rax, %rdi
+ 25190 17a87 E894C1FF call KAESBlockCipherVecCipher
+ 25190 FF
+ 25191 17a8c 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25191 E0
+2446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25192 .loc 2 2446 0
+ 25193 17a91 EB38 jmp .L689
+ 25194 .L687:
+2449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+ 25195 .loc 2 2449 0
+ 25196 17a93 488B45F8 movq -8(%rbp), %rax
+ 25197 17a97 660F6F45 movdqa -32(%rbp), %xmm0
+ 25197 E0
+ 25198 17a9c BE0C0000 movl $12, %esi
+ 25198 00
+ 25199 17aa1 4889C7 movq %rax, %rdi
+ 25200 17aa4 E877C1FF call KAESBlockCipherVecCipher
+ 25200 FF
+ 25201 17aa9 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25201 E0
+2450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25202 .loc 2 2450 0
+ 25203 17aae EB1B jmp .L689
+ 25204 .L688:
+2453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+ 25205 .loc 2 2453 0
+ 25206 17ab0 488B45F8 movq -8(%rbp), %rax
+ 25207 17ab4 660F6F45 movdqa -32(%rbp), %xmm0
+ 25207 E0
+ 25208 17ab9 BE0E0000 movl $14, %esi
+ 25208 00
+ 25209 17abe 4889C7 movq %rax, %rdi
+ 25210 17ac1 E85AC1FF call KAESBlockCipherVecCipher
+ 25210 FF
+ 25211 17ac6 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25211 E0
+ 25212 .L689:
+2457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 25213 .loc 2 2457 0
+ 25214 17acb 660F6F45 movdqa -32(%rbp), %xmm0
+ 25214 E0
+2458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 25215 .loc 2 2458 0
+ 25216 17ad0 C9 leave
+ 25217 17ad1 C3 ret
+ 25218 .cfi_endproc
+ 25219 .LFE583:
+ 25220 .size KAESBlockCipherVecEncrypt, .-KAESBlockCipherVecEncrypt
+ 25221 .type KAESBlockCipherVecDecrypt, @function
+ 25222 KAESBlockCipherVecDecrypt:
+
GAS LISTING /tmp/ccMa7HLZ.s page 757
+
+
+ 25223 .LFB584:
+2470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25224 .loc 2 2470 0
+ 25225 .cfi_startproc
+ 25226 17ad2 55 pushq %rbp
+ 25227 .LCFI32:
+ 25228 .cfi_def_cfa_offset 16
+ 25229 17ad3 4889E5 movq %rsp, %rbp
+ 25230 .cfi_offset 6, -16
+ 25231 .LCFI33:
+ 25232 .cfi_def_cfa_register 6
+ 25233 17ad6 4883EC30 subq $48, %rsp
+ 25234 17ada 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25234 E0
+ 25235 17adf 48897DD8 movq %rdi, -40(%rbp)
+2471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESKeySchedule * key = decrypt_key;
+ 25236 .loc 2 2471 0
+ 25237 17ae3 488B45D8 movq -40(%rbp), %rax
+ 25238 17ae7 488945F8 movq %rax, -8(%rbp)
+2473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (key);
+ 25239 .loc 2 2473 0
+ 25240 17aeb 48837DF8 cmpq $0, -8(%rbp)
+ 25240 00
+ 25241 17af0 751F jne .L692
+ 25242 17af2 488D0D00 leaq __PRETTY_FUNCTION__.8521(%rip), %rcx
+ 25242 000000
+ 25243 17af9 BAA90900 movl $2473, %edx
+ 25243 00
+ 25244 17afe 488D3500 leaq .LC15(%rip), %rsi
+ 25244 000000
+ 25245 17b05 488D3D00 leaq .LC16(%rip), %rdi
+ 25245 000000
+ 25246 17b0c E8000000 call __assert_fail at PLT
+ 25246 00
+ 25247 .L692:
+2475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds)
+ 25248 .loc 2 2475 0
+ 25249 17b11 488B45F8 movq -8(%rbp), %rax
+ 25250 17b15 8B80F000 movl 240(%rax), %eax
+ 25250 0000
+ 25251 17b1b 83F80C cmpl $12, %eax
+ 25252 17b1e 7436 je .L695
+ 25253 17b20 83F80E cmpl $14, %eax
+ 25254 17b23 744E je .L696
+ 25255 17b25 83F80A cmpl $10, %eax
+ 25256 17b28 740F je .L694
+2478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+ 25257 .loc 2 2478 0
+ 25258 17b2a 660F6F05 movdqa vec_00(%rip), %xmm0
+ 25258 00000000
+ 25259 17b32 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25259 E0
+2479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25260 .loc 2 2479 0
+ 25261 17b37 EB55 jmp .L697
+ 25262 .L694:
+2482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+
GAS LISTING /tmp/ccMa7HLZ.s page 758
+
+
+ 25263 .loc 2 2482 0
+ 25264 17b39 488B45F8 movq -8(%rbp), %rax
+ 25265 17b3d 660F6F45 movdqa -32(%rbp), %xmm0
+ 25265 E0
+ 25266 17b42 BE0A0000 movl $10, %esi
+ 25266 00
+ 25267 17b47 4889C7 movq %rax, %rdi
+ 25268 17b4a E8C7DDFF call KAESBlockCipherVecEqInvCipher
+ 25268 FF
+ 25269 17b4f 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25269 E0
+2484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25270 .loc 2 2484 0
+ 25271 17b54 EB38 jmp .L697
+ 25272 .L695:
+2487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 25273 .loc 2 2487 0
+ 25274 17b56 488B45F8 movq -8(%rbp), %rax
+ 25275 17b5a 660F6F45 movdqa -32(%rbp), %xmm0
+ 25275 E0
+ 25276 17b5f BE0C0000 movl $12, %esi
+ 25276 00
+ 25277 17b64 4889C7 movq %rax, %rdi
+ 25278 17b67 E8AADDFF call KAESBlockCipherVecEqInvCipher
+ 25278 FF
+ 25279 17b6c 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25279 E0
+2489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 25280 .loc 2 2489 0
+ 25281 17b71 EB1B jmp .L697
+ 25282 .L696:
+2492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 25283 .loc 2 2492 0
+ 25284 17b73 488B45F8 movq -8(%rbp), %rax
+ 25285 17b77 660F6F45 movdqa -32(%rbp), %xmm0
+ 25285 E0
+ 25286 17b7c BE0E0000 movl $14, %esi
+ 25286 00
+ 25287 17b81 4889C7 movq %rax, %rdi
+ 25288 17b84 E88DDDFF call KAESBlockCipherVecEqInvCipher
+ 25288 FF
+ 25289 17b89 660F7F45 movdqa %xmm0, -32(%rbp)
+ 25289 E0
+ 25290 .L697:
+2497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 25291 .loc 2 2497 0
+ 25292 17b8e 660F6F45 movdqa -32(%rbp), %xmm0
+ 25292 E0
+2498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 25293 .loc 2 2498 0
+ 25294 17b93 C9 leave
+ 25295 17b94 C3 ret
+ 25296 .cfi_endproc
+ 25297 .LFE584:
+ 25298 .size KAESBlockCipherVecDecrypt, .-KAESBlockCipherVecDecrypt
+ 25299 .section .rodata
+ 25300 04aa 00000000 .align 8
+
GAS LISTING /tmp/ccMa7HLZ.s page 759
+
+
+ 25300 0000
+ 25301 .LC17:
+ 25302 04b0 25733A20 .string "%s: level %x a %x, b %x c %x d %x\n"
+ 25302 6C657665
+ 25302 6C202578
+ 25302 20612025
+ 25302 782C2062
+ 25303 .LC18:
+ 25304 04d3 25733A20 .string "%s: passed\n"
+ 25304 70617373
+ 25304 65640A00
+ 25305 .text
+ 25306 .type KAESBlockCipherVecProcessorSupport, @function
+ 25307 KAESBlockCipherVecProcessorSupport:
+ 25308 .LFB585:
+2509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25309 .loc 2 2509 0
+ 25310 .cfi_startproc
+ 25311 17b95 55 pushq %rbp
+ 25312 .LCFI34:
+ 25313 .cfi_def_cfa_offset 16
+ 25314 17b96 4889E5 movq %rsp, %rbp
+ 25315 .cfi_offset 6, -16
+ 25316 .LCFI35:
+ 25317 .cfi_def_cfa_register 6
+ 25318 17b99 53 pushq %rbx
+ 25319 17b9a 4883EC38 subq $56, %rsp
+2510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t level = 1, a, b, c, d;
+ 25320 .loc 2 2510 0
+ 25321 17b9e C745D801 movl $1, -40(%rbp)
+ 25321 000000
+2511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool ret = true;
+ 25322 .loc 2 2511 0
+ 25323 17ba5 C645EF01 movb $1, -17(%rbp)
+2513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __cpuid (level, a, b, c, d);
+ 25324 .loc 2 2513 0
+ 25325 17ba9 8B45D8 movl -40(%rbp), %eax
+ 25326 #APP
+ 25327 # 2513 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 25328 cpuid
+ 25329
+ 25330 # 0 "" 2
+ 25331 #NO_APP
+ 25332 17bae 8945DC movl %eax, -36(%rbp)
+ 25333 17bb1 895DE0 movl %ebx, -32(%rbp)
+ 25334 17bb4 894DE4 movl %ecx, -28(%rbp)
+ 25335 17bb7 8955E8 movl %edx, -24(%rbp)
+2515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+ 25336 .loc 2 2515 0
+ 25337 .cfi_offset 3, -24
+ 25338 17bba E8000000 call KDbgWriterGet at PLT
+ 25338 00
+ 25339 17bbf 4885C0 testq %rax, %rax
+ 25340 17bc2 744F je .L701
+ 25341 17bc4 BF040000 movl $4, %edi
+ 25341 00
+ 25342 17bc9 E8000000 call KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s page 760
+
+
+ 25342 00
+ 25343 17bce 4889C6 movq %rax, %rsi
+ 25344 17bd1 BF100000 movl $16, %edi
+ 25344 00
+ 25345 17bd6 E8000000 call KDbgTestModConds at PLT
+ 25345 00
+ 25346 17bdb 84C0 testb %al, %al
+ 25347 17bdd 7434 je .L701
+ 25348 17bdf 8B75E4 movl -28(%rbp), %esi
+ 25349 17be2 8B5DE0 movl -32(%rbp), %ebx
+ 25350 17be5 8B55DC movl -36(%rbp), %edx
+ 25351 17be8 8B45D8 movl -40(%rbp), %eax
+ 25352 17beb 8B4DE8 movl -24(%rbp), %ecx
+ 25353 17bee 890C24 movl %ecx, (%rsp)
+ 25354 17bf1 4189F1 movl %esi, %r9d
+ 25355 17bf4 4189D8 movl %ebx, %r8d
+ 25356 17bf7 89D1 movl %edx, %ecx
+ 25357 17bf9 89C2 movl %eax, %edx
+ 25358 17bfb 488D3500 leaq __func__.8545(%rip), %rsi
+ 25358 000000
+ 25359 17c02 488D3D00 leaq .LC17(%rip), %rdi
+ 25359 000000
+ 25360 17c09 B8000000 movl $0, %eax
+ 25360 00
+ 25361 17c0e E8000000 call KDbgMsg at PLT
+ 25361 00
+ 25362 .L701:
+2575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: passed\n",__func__));
+ 25363 .loc 2 2575 0
+ 25364 17c13 E8000000 call KDbgWriterGet at PLT
+ 25364 00
+ 25365 17c18 4885C0 testq %rax, %rax
+ 25366 17c1b 7433 je .L703
+ 25367 17c1d BF040000 movl $4, %edi
+ 25367 00
+ 25368 17c22 E8000000 call KDbgCondToFlag at PLT
+ 25368 00
+ 25369 17c27 4889C6 movq %rax, %rsi
+ 25370 17c2a BF100000 movl $16, %edi
+ 25370 00
+ 25371 17c2f E8000000 call KDbgTestModConds at PLT
+ 25371 00
+ 25372 17c34 84C0 testb %al, %al
+ 25373 17c36 7418 je .L703
+ 25374 17c38 488D3500 leaq __func__.8545(%rip), %rsi
+ 25374 000000
+ 25375 17c3f 488D3D00 leaq .LC18(%rip), %rdi
+ 25375 000000
+ 25376 17c46 B8000000 movl $0, %eax
+ 25376 00
+ 25377 17c4b E8000000 call KDbgMsg at PLT
+ 25377 00
+ 25378 .L703:
+2576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ret;
+ 25379 .loc 2 2576 0
+ 25380 17c50 0FB645EF movzbl -17(%rbp), %eax
+2577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccMa7HLZ.s page 761
+
+
+ 25381 .loc 2 2577 0
+ 25382 17c54 4883C438 addq $56, %rsp
+ 25383 17c58 5B popq %rbx
+ 25384 17c59 C9 leave
+ 25385 17c5a C3 ret
+ 25386 .cfi_endproc
+ 25387 .LFE585:
+ 25388 .size KAESBlockCipherVecProcessorSupport, .-KAESBlockCipherVecProcessorSupport
+ 25389 .section .data.rel.ro.local,"aw", at progbits
+ 25390 .align 32
+ 25391 .type KAESBlockCipherVec_vt_, @object
+ 25392 .size KAESBlockCipherVec_vt_, 64
+ 25393 KAESBlockCipherVec_vt_:
+ 25394 0000 01000000 .long 1
+ 25395 0004 01000000 .long 1
+ 25396 0008 00000000 .quad KAESBlockCipherVecDestroy
+ 25396 00000000
+ 25397 0010 00000000 .quad KAESBlockCipherVecBlockSize
+ 25397 00000000
+ 25398 0018 00000000 .quad KAESBlockCipherVecKeySize
+ 25398 00000000
+ 25399 0020 00000000 .quad KAESBlockCipherVecSetEncryptKey
+ 25399 00000000
+ 25400 0028 00000000 .quad KAESBlockCipherVecSetDecryptKey
+ 25400 00000000
+ 25401 0030 00000000 .quad KAESBlockCipherVecEncrypt
+ 25401 00000000
+ 25402 0038 00000000 .quad KAESBlockCipherVecDecrypt
+ 25402 00000000
+ 25403 .section .rodata
+ 25404 .LC19:
+ 25405 04df 25733A20 .string "%s: %p\n"
+ 25405 25700A00
+ 25406 .text
+ 25407 .globl KAESBlockCipherVecMake
+ 25408 .type KAESBlockCipherVecMake, @function
+ 25409 KAESBlockCipherVecMake:
+ 25410 .LFB586:
+2618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25411 .loc 2 2618 0
+ 25412 .cfi_startproc
+ 25413 17c5b 55 pushq %rbp
+ 25414 .LCFI36:
+ 25415 .cfi_def_cfa_offset 16
+ 25416 17c5c 4889E5 movq %rsp, %rbp
+ 25417 .cfi_offset 6, -16
+ 25418 .LCFI37:
+ 25419 .cfi_def_cfa_register 6
+ 25420 17c5f 4883EC20 subq $32, %rsp
+ 25421 17c63 48897DE8 movq %rdi, -24(%rbp)
+2621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+ 25422 .loc 2 2621 0
+ 25423 17c67 E8000000 call KDbgWriterGet at PLT
+ 25423 00
+ 25424 17c6c 4885C0 testq %rax, %rax
+ 25425 17c6f 743A je .L707
+ 25426 17c71 BF040000 movl $4, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s page 762
+
+
+ 25426 00
+ 25427 17c76 E8000000 call KDbgCondToFlag at PLT
+ 25427 00
+ 25428 17c7b 4889C6 movq %rax, %rsi
+ 25429 17c7e BF100000 movl $16, %edi
+ 25429 00
+ 25430 17c83 E8000000 call KDbgTestModConds at PLT
+ 25430 00
+ 25431 17c88 84C0 testb %al, %al
+ 25432 17c8a 741F je .L707
+ 25433 17c8c 488B45E8 movq -24(%rbp), %rax
+ 25434 17c90 4889C2 movq %rax, %rdx
+ 25435 17c93 488D3500 leaq __func__.8570(%rip), %rsi
+ 25435 000000
+ 25436 17c9a 488D3D00 leaq .LC19(%rip), %rdi
+ 25436 000000
+ 25437 17ca1 B8000000 movl $0, %eax
+ 25437 00
+ 25438 17ca6 E8000000 call KDbgMsg at PLT
+ 25438 00
+ 25439 .L707:
+2624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (new_obj == NULL)
+ 25440 .loc 2 2624 0
+ 25441 17cab 48837DE8 cmpq $0, -24(%rbp)
+ 25441 00
+ 25442 17cb0 7522 jne .L708
+2625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 25443 .loc 2 2625 0
+ 25444 17cb2 B9410A00 movl $2625, %ecx
+ 25444 00
+ 25445 17cb7 488D1500 leaq __func__.8570(%rip), %rdx
+ 25445 000000
+ 25446 17cbe 488D3500 leaq .LC15(%rip), %rsi
+ 25446 000000
+ 25447 17cc5 BF878F00 movl $-2030006393, %edi
+ 25447 87
+ 25448 17cca E8000000 call SetRCFileFuncLine at PLT
+ 25448 00
+ 25449 17ccf 8945FC movl %eax, -4(%rbp)
+ 25450 17cd2 EB53 jmp .L709
+ 25451 .L708:
+2629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *new_obj = NULL;
+ 25452 .loc 2 2629 0
+ 25453 17cd4 488B45E8 movq -24(%rbp), %rax
+ 25454 17cd8 48C70000 movq $0, (%rax)
+ 25454 000000
+2632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! AESBCMEMBER(ProcessorSupport)())
+ 25455 .loc 2 2632 0
+ 25456 17cdf B8000000 movl $0, %eax
+ 25456 00
+ 25457 17ce4 E8ACFEFF call KAESBlockCipherVecProcessorSupport
+ 25457 FF
+ 25458 17ce9 83F001 xorl $1, %eax
+ 25459 17cec 84C0 testb %al, %al
+ 25460 17cee 7422 je .L710
+2633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 25461 .loc 2 2633 0
+
GAS LISTING /tmp/ccMa7HLZ.s page 763
+
+
+ 25462 17cf0 B9490A00 movl $2633, %ecx
+ 25462 00
+ 25463 17cf5 488D1500 leaq __func__.8570(%rip), %rdx
+ 25463 000000
+ 25464 17cfc 488D3500 leaq .LC15(%rip), %rsi
+ 25464 000000
+ 25465 17d03 BF038500 movl $-2030009085, %edi
+ 25465 87
+ 25466 17d08 E8000000 call SetRCFileFuncLine at PLT
+ 25466 00
+ 25467 17d0d 8945FC movl %eax, -4(%rbp)
+ 25468 17d10 EB15 jmp .L709
+ 25469 .L710:
+2637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = 0;
+ 25470 .loc 2 2637 0
+ 25471 17d12 C745FC00 movl $0, -4(%rbp)
+ 25471 000000
+2638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+ 25472 .loc 2 2638 0
+ 25473 17d19 488D1500 leaq KAESBlockCipherVec_vt_(%rip), %rdx
+ 25473 000000
+ 25474 17d20 488B45E8 movq -24(%rbp), %rax
+ 25475 17d24 488910 movq %rdx, (%rax)
+ 25476 .L709:
+2641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+ 25477 .loc 2 2641 0
+ 25478 17d27 8B45FC movl -4(%rbp), %eax
+ 25479 .loc 2 2642 0
+ 25480 17d2a C9 leave
+ 25481 17d2b C3 ret
+ 25482 .cfi_endproc
+ 25483 .LFE586:
+ 25484 .size KAESBlockCipherVecMake, .-KAESBlockCipherVecMake
+ 25485 .section .rodata
+ 25486 04e7 00000000 .align 16
+ 25486 00000000
+ 25486 00
+ 25487 .type __func__.8570, @object
+ 25488 .size __func__.8570, 23
+ 25489 __func__.8570:
+ 25490 04f0 4B414553 .string "KAESBlockCipherVecMake"
+ 25490 426C6F63
+ 25490 6B436970
+ 25490 68657256
+ 25490 65634D61
+ 25491 0507 00000000 .align 16
+ 25491 00000000
+ 25491 00
+ 25492 .type __PRETTY_FUNCTION__.8571, @object
+ 25493 .size __PRETTY_FUNCTION__.8571, 23
+ 25494 __PRETTY_FUNCTION__.8571:
+ 25495 0510 4B414553 .string "KAESBlockCipherVecMake"
+ 25495 426C6F63
+ 25495 6B436970
+ 25495 68657256
+ 25495 65634D61
+ 25496 0527 00000000 .align 32
+
GAS LISTING /tmp/ccMa7HLZ.s page 764
+
+
+ 25496 00000000
+ 25496 00000000
+ 25496 00000000
+ 25496 00000000
+ 25497 .type __func__.8545, @object
+ 25498 .size __func__.8545, 35
+ 25499 __func__.8545:
+ 25500 0540 4B414553 .string "KAESBlockCipherVecProcessorSupport"
+ 25500 426C6F63
+ 25500 6B436970
+ 25500 68657256
+ 25500 65635072
+ 25501 0563 00000000 .align 16
+ 25501 00000000
+ 25501 00000000
+ 25501 00
+ 25502 .type __PRETTY_FUNCTION__.8521, @object
+ 25503 .size __PRETTY_FUNCTION__.8521, 26
+ 25504 __PRETTY_FUNCTION__.8521:
+ 25505 0570 4B414553 .string "KAESBlockCipherVecDecrypt"
+ 25505 426C6F63
+ 25505 6B436970
+ 25505 68657256
+ 25505 65634465
+ 25506 058a 00000000 .align 16
+ 25506 0000
+ 25507 .type __PRETTY_FUNCTION__.8500, @object
+ 25508 .size __PRETTY_FUNCTION__.8500, 26
+ 25509 __PRETTY_FUNCTION__.8500:
+ 25510 0590 4B414553 .string "KAESBlockCipherVecEncrypt"
+ 25510 426C6F63
+ 25510 6B436970
+ 25510 68657256
+ 25510 6563456E
+ 25511 05aa 00000000 .align 16
+ 25511 0000
+ 25512 .type ShiftRowTable.6741, @object
+ 25513 .size ShiftRowTable.6741, 16
+ 25514 ShiftRowTable.6741:
+ 25515 05b0 00 .byte 0
+ 25516 05b1 05 .byte 5
+ 25517 05b2 0A .byte 10
+ 25518 05b3 0F .byte 15
+ 25519 05b4 04 .byte 4
+ 25520 05b5 09 .byte 9
+ 25521 05b6 0E .byte 14
+ 25522 05b7 03 .byte 3
+ 25523 05b8 08 .byte 8
+ 25524 05b9 0D .byte 13
+ 25525 05ba 02 .byte 2
+ 25526 05bb 07 .byte 7
+ 25527 05bc 0C .byte 12
+ 25528 05bd 01 .byte 1
+ 25529 05be 06 .byte 6
+ 25530 05bf 0B .byte 11
+ 25531 .align 16
+ 25532 .type ShiftRowTable.6768, @object
+
GAS LISTING /tmp/ccMa7HLZ.s page 765
+
+
+ 25533 .size ShiftRowTable.6768, 16
+ 25534 ShiftRowTable.6768:
+ 25535 05c0 01 .byte 1
+ 25536 05c1 02 .byte 2
+ 25537 05c2 03 .byte 3
+ 25538 05c3 00 .byte 0
+ 25539 05c4 05 .byte 5
+ 25540 05c5 06 .byte 6
+ 25541 05c6 07 .byte 7
+ 25542 05c7 04 .byte 4
+ 25543 05c8 09 .byte 9
+ 25544 05c9 0A .byte 10
+ 25545 05ca 0B .byte 11
+ 25546 05cb 08 .byte 8
+ 25547 05cc 0D .byte 13
+ 25548 05cd 0E .byte 14
+ 25549 05ce 0F .byte 15
+ 25550 05cf 0C .byte 12
+ 25551 05d0 00000000 .align 32
+ 25551 00000000
+ 25551 00000000
+ 25551 00000000
+ 25552 .type __func__.8464, @object
+ 25553 .size __func__.8464, 32
+ 25554 __func__.8464:
+ 25555 05e0 4B414553 .string "KAESBlockCipherVecSetEncryptKey"
+ 25555 426C6F63
+ 25555 6B436970
+ 25555 68657256
+ 25555 65635365
+ 25556 .align 32
+ 25557 .type __PRETTY_FUNCTION__.8463, @object
+ 25558 .size __PRETTY_FUNCTION__.8463, 32
+ 25559 __PRETTY_FUNCTION__.8463:
+ 25560 0600 4B414553 .string "KAESBlockCipherVecSetEncryptKey"
+ 25560 426C6F63
+ 25560 6B436970
+ 25560 68657256
+ 25560 65635365
+ 25561 .align 16
+ 25562 .type InvShiftRowTable.6750, @object
+ 25563 .size InvShiftRowTable.6750, 16
+ 25564 InvShiftRowTable.6750:
+ 25565 0620 00 .byte 0
+ 25566 0621 0D .byte 13
+ 25567 0622 0A .byte 10
+ 25568 0623 07 .byte 7
+ 25569 0624 04 .byte 4
+ 25570 0625 01 .byte 1
+ 25571 0626 0E .byte 14
+ 25572 0627 0B .byte 11
+ 25573 0628 08 .byte 8
+ 25574 0629 05 .byte 5
+ 25575 062a 02 .byte 2
+ 25576 062b 0F .byte 15
+ 25577 062c 0C .byte 12
+ 25578 062d 09 .byte 9
+
GAS LISTING /tmp/ccMa7HLZ.s page 766
+
+
+ 25579 062e 06 .byte 6
+ 25580 062f 03 .byte 3
+ 25581 .text
+ 25582 .Letext0:
+ 25583 .section .debug_loc,"", at progbits
+ 25584 .Ldebug_loc0:
+ 25585 .LLST0:
+ 25586 0000 00000000 .quad .LFB509-.Ltext0
+ 25586 00000000
+ 25587 0008 01000000 .quad .LCFI0-.Ltext0
+ 25587 00000000
+ 25588 0010 0200 .value 0x2
+ 25589 0012 77 .byte 0x77
+ 25590 0013 08 .sleb128 8
+ 25591 0014 01000000 .quad .LCFI0-.Ltext0
+ 25591 00000000
+ 25592 001c 04000000 .quad .LCFI1-.Ltext0
+ 25592 00000000
+ 25593 0024 0200 .value 0x2
+ 25594 0026 77 .byte 0x77
+ 25595 0027 10 .sleb128 16
+ 25596 0028 04000000 .quad .LCFI1-.Ltext0
+ 25596 00000000
+ 25597 0030 14000000 .quad .LFE509-.Ltext0
+ 25597 00000000
+ 25598 0038 0200 .value 0x2
+ 25599 003a 76 .byte 0x76
+ 25600 003b 10 .sleb128 16
+ 25601 003c 00000000 .quad 0x0
+ 25601 00000000
+ 25602 0044 00000000 .quad 0x0
+ 25602 00000000
+ 25603 .LLST1:
+ 25604 004c 14000000 .quad .LFB563-.Ltext0
+ 25604 00000000
+ 25605 0054 15000000 .quad .LCFI2-.Ltext0
+ 25605 00000000
+ 25606 005c 0200 .value 0x2
+ 25607 005e 77 .byte 0x77
+ 25608 005f 08 .sleb128 8
+ 25609 0060 15000000 .quad .LCFI2-.Ltext0
+ 25609 00000000
+ 25610 0068 18000000 .quad .LCFI3-.Ltext0
+ 25610 00000000
+ 25611 0070 0200 .value 0x2
+ 25612 0072 77 .byte 0x77
+ 25613 0073 10 .sleb128 16
+ 25614 0074 18000000 .quad .LCFI3-.Ltext0
+ 25614 00000000
+ 25615 007c 1E7C0000 .quad .LFE563-.Ltext0
+ 25615 00000000
+ 25616 0084 0200 .value 0x2
+ 25617 0086 76 .byte 0x76
+ 25618 0087 10 .sleb128 16
+ 25619 0088 00000000 .quad 0x0
+ 25619 00000000
+ 25620 0090 00000000 .quad 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 767
+
+
+ 25620 00000000
+ 25621 .LLST2:
+ 25622 0098 1E7C0000 .quad .LFB564-.Ltext0
+ 25622 00000000
+ 25623 00a0 1F7C0000 .quad .LCFI4-.Ltext0
+ 25623 00000000
+ 25624 00a8 0200 .value 0x2
+ 25625 00aa 77 .byte 0x77
+ 25626 00ab 08 .sleb128 8
+ 25627 00ac 1F7C0000 .quad .LCFI4-.Ltext0
+ 25627 00000000
+ 25628 00b4 227C0000 .quad .LCFI5-.Ltext0
+ 25628 00000000
+ 25629 00bc 0200 .value 0x2
+ 25630 00be 77 .byte 0x77
+ 25631 00bf 10 .sleb128 16
+ 25632 00c0 227C0000 .quad .LCFI5-.Ltext0
+ 25632 00000000
+ 25633 00c8 56CC0000 .quad .LFE564-.Ltext0
+ 25633 00000000
+ 25634 00d0 0200 .value 0x2
+ 25635 00d2 76 .byte 0x76
+ 25636 00d3 10 .sleb128 16
+ 25637 00d4 00000000 .quad 0x0
+ 25637 00000000
+ 25638 00dc 00000000 .quad 0x0
+ 25638 00000000
+ 25639 .LLST3:
+ 25640 00e4 56CC0000 .quad .LFB565-.Ltext0
+ 25640 00000000
+ 25641 00ec 57CC0000 .quad .LCFI6-.Ltext0
+ 25641 00000000
+ 25642 00f4 0200 .value 0x2
+ 25643 00f6 77 .byte 0x77
+ 25644 00f7 08 .sleb128 8
+ 25645 00f8 57CC0000 .quad .LCFI6-.Ltext0
+ 25645 00000000
+ 25646 0100 5ACC0000 .quad .LCFI7-.Ltext0
+ 25646 00000000
+ 25647 0108 0200 .value 0x2
+ 25648 010a 77 .byte 0x77
+ 25649 010b 10 .sleb128 16
+ 25650 010c 5ACC0000 .quad .LCFI7-.Ltext0
+ 25650 00000000
+ 25651 0114 CF340100 .quad .LFE565-.Ltext0
+ 25651 00000000
+ 25652 011c 0200 .value 0x2
+ 25653 011e 76 .byte 0x76
+ 25654 011f 10 .sleb128 16
+ 25655 0120 00000000 .quad 0x0
+ 25655 00000000
+ 25656 0128 00000000 .quad 0x0
+ 25656 00000000
+ 25657 .LLST4:
+ 25658 0130 CF340100 .quad .LFB566-.Ltext0
+ 25658 00000000
+ 25659 0138 D0340100 .quad .LCFI8-.Ltext0
+
GAS LISTING /tmp/ccMa7HLZ.s page 768
+
+
+ 25659 00000000
+ 25660 0140 0200 .value 0x2
+ 25661 0142 77 .byte 0x77
+ 25662 0143 08 .sleb128 8
+ 25663 0144 D0340100 .quad .LCFI8-.Ltext0
+ 25663 00000000
+ 25664 014c D3340100 .quad .LCFI9-.Ltext0
+ 25664 00000000
+ 25665 0154 0200 .value 0x2
+ 25666 0156 77 .byte 0x77
+ 25667 0157 10 .sleb128 16
+ 25668 0158 D3340100 .quad .LCFI9-.Ltext0
+ 25668 00000000
+ 25669 0160 A23B0100 .quad .LFE566-.Ltext0
+ 25669 00000000
+ 25670 0168 0200 .value 0x2
+ 25671 016a 76 .byte 0x76
+ 25672 016b 10 .sleb128 16
+ 25673 016c 00000000 .quad 0x0
+ 25673 00000000
+ 25674 0174 00000000 .quad 0x0
+ 25674 00000000
+ 25675 .LLST5:
+ 25676 017c A23B0100 .quad .LFB567-.Ltext0
+ 25676 00000000
+ 25677 0184 A33B0100 .quad .LCFI10-.Ltext0
+ 25677 00000000
+ 25678 018c 0200 .value 0x2
+ 25679 018e 77 .byte 0x77
+ 25680 018f 08 .sleb128 8
+ 25681 0190 A33B0100 .quad .LCFI10-.Ltext0
+ 25681 00000000
+ 25682 0198 A63B0100 .quad .LCFI11-.Ltext0
+ 25682 00000000
+ 25683 01a0 0200 .value 0x2
+ 25684 01a2 77 .byte 0x77
+ 25685 01a3 10 .sleb128 16
+ 25686 01a4 A63B0100 .quad .LCFI11-.Ltext0
+ 25686 00000000
+ 25687 01ac CC3B0100 .quad .LFE567-.Ltext0
+ 25687 00000000
+ 25688 01b4 0200 .value 0x2
+ 25689 01b6 76 .byte 0x76
+ 25690 01b7 10 .sleb128 16
+ 25691 01b8 00000000 .quad 0x0
+ 25691 00000000
+ 25692 01c0 00000000 .quad 0x0
+ 25692 00000000
+ 25693 .LLST6:
+ 25694 01c8 CC3B0100 .quad .LFB568-.Ltext0
+ 25694 00000000
+ 25695 01d0 CD3B0100 .quad .LCFI12-.Ltext0
+ 25695 00000000
+ 25696 01d8 0200 .value 0x2
+ 25697 01da 77 .byte 0x77
+ 25698 01db 08 .sleb128 8
+ 25699 01dc CD3B0100 .quad .LCFI12-.Ltext0
+
GAS LISTING /tmp/ccMa7HLZ.s page 769
+
+
+ 25699 00000000
+ 25700 01e4 D03B0100 .quad .LCFI13-.Ltext0
+ 25700 00000000
+ 25701 01ec 0200 .value 0x2
+ 25702 01ee 77 .byte 0x77
+ 25703 01ef 10 .sleb128 16
+ 25704 01f0 D03B0100 .quad .LCFI13-.Ltext0
+ 25704 00000000
+ 25705 01f8 F63B0100 .quad .LFE568-.Ltext0
+ 25705 00000000
+ 25706 0200 0200 .value 0x2
+ 25707 0202 76 .byte 0x76
+ 25708 0203 10 .sleb128 16
+ 25709 0204 00000000 .quad 0x0
+ 25709 00000000
+ 25710 020c 00000000 .quad 0x0
+ 25710 00000000
+ 25711 .LLST7:
+ 25712 0214 F63B0100 .quad .LFB569-.Ltext0
+ 25712 00000000
+ 25713 021c F73B0100 .quad .LCFI14-.Ltext0
+ 25713 00000000
+ 25714 0224 0200 .value 0x2
+ 25715 0226 77 .byte 0x77
+ 25716 0227 08 .sleb128 8
+ 25717 0228 F73B0100 .quad .LCFI14-.Ltext0
+ 25717 00000000
+ 25718 0230 FA3B0100 .quad .LCFI15-.Ltext0
+ 25718 00000000
+ 25719 0238 0200 .value 0x2
+ 25720 023a 77 .byte 0x77
+ 25721 023b 10 .sleb128 16
+ 25722 023c FA3B0100 .quad .LCFI15-.Ltext0
+ 25722 00000000
+ 25723 0244 203C0100 .quad .LFE569-.Ltext0
+ 25723 00000000
+ 25724 024c 0200 .value 0x2
+ 25725 024e 76 .byte 0x76
+ 25726 024f 10 .sleb128 16
+ 25727 0250 00000000 .quad 0x0
+ 25727 00000000
+ 25728 0258 00000000 .quad 0x0
+ 25728 00000000
+ 25729 .LLST8:
+ 25730 0260 203C0100 .quad .LFB573-.Ltext0
+ 25730 00000000
+ 25731 0268 213C0100 .quad .LCFI16-.Ltext0
+ 25731 00000000
+ 25732 0270 0200 .value 0x2
+ 25733 0272 77 .byte 0x77
+ 25734 0273 08 .sleb128 8
+ 25735 0274 213C0100 .quad .LCFI16-.Ltext0
+ 25735 00000000
+ 25736 027c 243C0100 .quad .LCFI17-.Ltext0
+ 25736 00000000
+ 25737 0284 0200 .value 0x2
+ 25738 0286 77 .byte 0x77
+
GAS LISTING /tmp/ccMa7HLZ.s page 770
+
+
+ 25739 0287 10 .sleb128 16
+ 25740 0288 243C0100 .quad .LCFI17-.Ltext0
+ 25740 00000000
+ 25741 0290 16590100 .quad .LFE573-.Ltext0
+ 25741 00000000
+ 25742 0298 0200 .value 0x2
+ 25743 029a 76 .byte 0x76
+ 25744 029b 10 .sleb128 16
+ 25745 029c 00000000 .quad 0x0
+ 25745 00000000
+ 25746 02a4 00000000 .quad 0x0
+ 25746 00000000
+ 25747 .LLST9:
+ 25748 02ac 16590100 .quad .LFB577-.Ltext0
+ 25748 00000000
+ 25749 02b4 17590100 .quad .LCFI18-.Ltext0
+ 25749 00000000
+ 25750 02bc 0200 .value 0x2
+ 25751 02be 77 .byte 0x77
+ 25752 02bf 08 .sleb128 8
+ 25753 02c0 17590100 .quad .LCFI18-.Ltext0
+ 25753 00000000
+ 25754 02c8 1A590100 .quad .LCFI19-.Ltext0
+ 25754 00000000
+ 25755 02d0 0200 .value 0x2
+ 25756 02d2 77 .byte 0x77
+ 25757 02d3 10 .sleb128 16
+ 25758 02d4 1A590100 .quad .LCFI19-.Ltext0
+ 25758 00000000
+ 25759 02dc 43780100 .quad .LFE577-.Ltext0
+ 25759 00000000
+ 25760 02e4 0200 .value 0x2
+ 25761 02e6 76 .byte 0x76
+ 25762 02e7 10 .sleb128 16
+ 25763 02e8 00000000 .quad 0x0
+ 25763 00000000
+ 25764 02f0 00000000 .quad 0x0
+ 25764 00000000
+ 25765 .LLST10:
+ 25766 02f8 43780100 .quad .LFB578-.Ltext0
+ 25766 00000000
+ 25767 0300 44780100 .quad .LCFI20-.Ltext0
+ 25767 00000000
+ 25768 0308 0200 .value 0x2
+ 25769 030a 77 .byte 0x77
+ 25770 030b 08 .sleb128 8
+ 25771 030c 44780100 .quad .LCFI20-.Ltext0
+ 25771 00000000
+ 25772 0314 47780100 .quad .LCFI21-.Ltext0
+ 25772 00000000
+ 25773 031c 0200 .value 0x2
+ 25774 031e 77 .byte 0x77
+ 25775 031f 10 .sleb128 16
+ 25776 0320 47780100 .quad .LCFI21-.Ltext0
+ 25776 00000000
+ 25777 0328 4D780100 .quad .LFE578-.Ltext0
+ 25777 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 771
+
+
+ 25778 0330 0200 .value 0x2
+ 25779 0332 76 .byte 0x76
+ 25780 0333 10 .sleb128 16
+ 25781 0334 00000000 .quad 0x0
+ 25781 00000000
+ 25782 033c 00000000 .quad 0x0
+ 25782 00000000
+ 25783 .LLST11:
+ 25784 0344 4D780100 .quad .LFB579-.Ltext0
+ 25784 00000000
+ 25785 034c 4E780100 .quad .LCFI22-.Ltext0
+ 25785 00000000
+ 25786 0354 0200 .value 0x2
+ 25787 0356 77 .byte 0x77
+ 25788 0357 08 .sleb128 8
+ 25789 0358 4E780100 .quad .LCFI22-.Ltext0
+ 25789 00000000
+ 25790 0360 51780100 .quad .LCFI23-.Ltext0
+ 25790 00000000
+ 25791 0368 0200 .value 0x2
+ 25792 036a 77 .byte 0x77
+ 25793 036b 10 .sleb128 16
+ 25794 036c 51780100 .quad .LCFI23-.Ltext0
+ 25794 00000000
+ 25795 0374 58780100 .quad .LFE579-.Ltext0
+ 25795 00000000
+ 25796 037c 0200 .value 0x2
+ 25797 037e 76 .byte 0x76
+ 25798 037f 10 .sleb128 16
+ 25799 0380 00000000 .quad 0x0
+ 25799 00000000
+ 25800 0388 00000000 .quad 0x0
+ 25800 00000000
+ 25801 .LLST12:
+ 25802 0390 58780100 .quad .LFB580-.Ltext0
+ 25802 00000000
+ 25803 0398 59780100 .quad .LCFI24-.Ltext0
+ 25803 00000000
+ 25804 03a0 0200 .value 0x2
+ 25805 03a2 77 .byte 0x77
+ 25806 03a3 08 .sleb128 8
+ 25807 03a4 59780100 .quad .LCFI24-.Ltext0
+ 25807 00000000
+ 25808 03ac 5C780100 .quad .LCFI25-.Ltext0
+ 25808 00000000
+ 25809 03b4 0200 .value 0x2
+ 25810 03b6 77 .byte 0x77
+ 25811 03b7 10 .sleb128 16
+ 25812 03b8 5C780100 .quad .LCFI25-.Ltext0
+ 25812 00000000
+ 25813 03c0 63780100 .quad .LFE580-.Ltext0
+ 25813 00000000
+ 25814 03c8 0200 .value 0x2
+ 25815 03ca 76 .byte 0x76
+ 25816 03cb 10 .sleb128 16
+ 25817 03cc 00000000 .quad 0x0
+ 25817 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 772
+
+
+ 25818 03d4 00000000 .quad 0x0
+ 25818 00000000
+ 25819 .LLST13:
+ 25820 03dc 63780100 .quad .LFB581-.Ltext0
+ 25820 00000000
+ 25821 03e4 64780100 .quad .LCFI26-.Ltext0
+ 25821 00000000
+ 25822 03ec 0200 .value 0x2
+ 25823 03ee 77 .byte 0x77
+ 25824 03ef 08 .sleb128 8
+ 25825 03f0 64780100 .quad .LCFI26-.Ltext0
+ 25825 00000000
+ 25826 03f8 67780100 .quad .LCFI27-.Ltext0
+ 25826 00000000
+ 25827 0400 0200 .value 0x2
+ 25828 0402 77 .byte 0x77
+ 25829 0403 10 .sleb128 16
+ 25830 0404 67780100 .quad .LCFI27-.Ltext0
+ 25830 00000000
+ 25831 040c 4C790100 .quad .LFE581-.Ltext0
+ 25831 00000000
+ 25832 0414 0200 .value 0x2
+ 25833 0416 76 .byte 0x76
+ 25834 0417 10 .sleb128 16
+ 25835 0418 00000000 .quad 0x0
+ 25835 00000000
+ 25836 0420 00000000 .quad 0x0
+ 25836 00000000
+ 25837 .LLST14:
+ 25838 0428 4C790100 .quad .LFB582-.Ltext0
+ 25838 00000000
+ 25839 0430 4D790100 .quad .LCFI28-.Ltext0
+ 25839 00000000
+ 25840 0438 0200 .value 0x2
+ 25841 043a 77 .byte 0x77
+ 25842 043b 08 .sleb128 8
+ 25843 043c 4D790100 .quad .LCFI28-.Ltext0
+ 25843 00000000
+ 25844 0444 50790100 .quad .LCFI29-.Ltext0
+ 25844 00000000
+ 25845 044c 0200 .value 0x2
+ 25846 044e 77 .byte 0x77
+ 25847 044f 10 .sleb128 16
+ 25848 0450 50790100 .quad .LCFI29-.Ltext0
+ 25848 00000000
+ 25849 0458 0F7A0100 .quad .LFE582-.Ltext0
+ 25849 00000000
+ 25850 0460 0200 .value 0x2
+ 25851 0462 76 .byte 0x76
+ 25852 0463 10 .sleb128 16
+ 25853 0464 00000000 .quad 0x0
+ 25853 00000000
+ 25854 046c 00000000 .quad 0x0
+ 25854 00000000
+ 25855 .LLST15:
+ 25856 0474 0F7A0100 .quad .LFB583-.Ltext0
+ 25856 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 773
+
+
+ 25857 047c 107A0100 .quad .LCFI30-.Ltext0
+ 25857 00000000
+ 25858 0484 0200 .value 0x2
+ 25859 0486 77 .byte 0x77
+ 25860 0487 08 .sleb128 8
+ 25861 0488 107A0100 .quad .LCFI30-.Ltext0
+ 25861 00000000
+ 25862 0490 137A0100 .quad .LCFI31-.Ltext0
+ 25862 00000000
+ 25863 0498 0200 .value 0x2
+ 25864 049a 77 .byte 0x77
+ 25865 049b 10 .sleb128 16
+ 25866 049c 137A0100 .quad .LCFI31-.Ltext0
+ 25866 00000000
+ 25867 04a4 D27A0100 .quad .LFE583-.Ltext0
+ 25867 00000000
+ 25868 04ac 0200 .value 0x2
+ 25869 04ae 76 .byte 0x76
+ 25870 04af 10 .sleb128 16
+ 25871 04b0 00000000 .quad 0x0
+ 25871 00000000
+ 25872 04b8 00000000 .quad 0x0
+ 25872 00000000
+ 25873 .LLST16:
+ 25874 04c0 D27A0100 .quad .LFB584-.Ltext0
+ 25874 00000000
+ 25875 04c8 D37A0100 .quad .LCFI32-.Ltext0
+ 25875 00000000
+ 25876 04d0 0200 .value 0x2
+ 25877 04d2 77 .byte 0x77
+ 25878 04d3 08 .sleb128 8
+ 25879 04d4 D37A0100 .quad .LCFI32-.Ltext0
+ 25879 00000000
+ 25880 04dc D67A0100 .quad .LCFI33-.Ltext0
+ 25880 00000000
+ 25881 04e4 0200 .value 0x2
+ 25882 04e6 77 .byte 0x77
+ 25883 04e7 10 .sleb128 16
+ 25884 04e8 D67A0100 .quad .LCFI33-.Ltext0
+ 25884 00000000
+ 25885 04f0 957B0100 .quad .LFE584-.Ltext0
+ 25885 00000000
+ 25886 04f8 0200 .value 0x2
+ 25887 04fa 76 .byte 0x76
+ 25888 04fb 10 .sleb128 16
+ 25889 04fc 00000000 .quad 0x0
+ 25889 00000000
+ 25890 0504 00000000 .quad 0x0
+ 25890 00000000
+ 25891 .LLST17:
+ 25892 050c 957B0100 .quad .LFB585-.Ltext0
+ 25892 00000000
+ 25893 0514 967B0100 .quad .LCFI34-.Ltext0
+ 25893 00000000
+ 25894 051c 0200 .value 0x2
+ 25895 051e 77 .byte 0x77
+ 25896 051f 08 .sleb128 8
+
GAS LISTING /tmp/ccMa7HLZ.s page 774
+
+
+ 25897 0520 967B0100 .quad .LCFI34-.Ltext0
+ 25897 00000000
+ 25898 0528 997B0100 .quad .LCFI35-.Ltext0
+ 25898 00000000
+ 25899 0530 0200 .value 0x2
+ 25900 0532 77 .byte 0x77
+ 25901 0533 10 .sleb128 16
+ 25902 0534 997B0100 .quad .LCFI35-.Ltext0
+ 25902 00000000
+ 25903 053c 5B7C0100 .quad .LFE585-.Ltext0
+ 25903 00000000
+ 25904 0544 0200 .value 0x2
+ 25905 0546 76 .byte 0x76
+ 25906 0547 10 .sleb128 16
+ 25907 0548 00000000 .quad 0x0
+ 25907 00000000
+ 25908 0550 00000000 .quad 0x0
+ 25908 00000000
+ 25909 .LLST18:
+ 25910 0558 5B7C0100 .quad .LFB586-.Ltext0
+ 25910 00000000
+ 25911 0560 5C7C0100 .quad .LCFI36-.Ltext0
+ 25911 00000000
+ 25912 0568 0200 .value 0x2
+ 25913 056a 77 .byte 0x77
+ 25914 056b 08 .sleb128 8
+ 25915 056c 5C7C0100 .quad .LCFI36-.Ltext0
+ 25915 00000000
+ 25916 0574 5F7C0100 .quad .LCFI37-.Ltext0
+ 25916 00000000
+ 25917 057c 0200 .value 0x2
+ 25918 057e 77 .byte 0x77
+ 25919 057f 10 .sleb128 16
+ 25920 0580 5F7C0100 .quad .LCFI37-.Ltext0
+ 25920 00000000
+ 25921 0588 2C7D0100 .quad .LFE586-.Ltext0
+ 25921 00000000
+ 25922 0590 0200 .value 0x2
+ 25923 0592 76 .byte 0x76
+ 25924 0593 10 .sleb128 16
+ 25925 0594 00000000 .quad 0x0
+ 25925 00000000
+ 25926 059c 00000000 .quad 0x0
+ 25926 00000000
+ 25927 .file 3 "/usr/include/stdint.h"
+ 25928 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 25929 .file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 25930 .file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 25931 .file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 25932 .file 8 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 25933 .file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 25934 .file 10 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 25935 .section .debug_info
+ 25936 0000 95D50000 .long 0xd595
+ 25937 0004 0200 .value 0x2
+ 25938 0006 00000000 .long .Ldebug_abbrev0
+ 25939 000a 08 .byte 0x8
+
GAS LISTING /tmp/ccMa7HLZ.s page 775
+
+
+ 25940 000b 01 .uleb128 0x1
+ 25941 000c 00000000 .long .LASF413
+ 25942 0010 01 .byte 0x1
+ 25943 0011 00000000 .long .LASF414
+ 25944 0015 00000000 .long .LASF415
+ 25945 0019 00000000 .quad .Ltext0
+ 25945 00000000
+ 25946 0021 00000000 .quad .Letext0
+ 25946 00000000
+ 25947 0029 00000000 .long .Ldebug_line0
+ 25948 002d 02 .uleb128 0x2
+ 25949 002e 01 .byte 0x1
+ 25950 002f 06 .byte 0x6
+ 25951 0030 00000000 .long .LASF0
+ 25952 0034 02 .uleb128 0x2
+ 25953 0035 02 .byte 0x2
+ 25954 0036 05 .byte 0x5
+ 25955 0037 00000000 .long .LASF1
+ 25956 003b 03 .uleb128 0x3
+ 25957 003c 04 .byte 0x4
+ 25958 003d 05 .byte 0x5
+ 25959 003e 696E7400 .string "int"
+ 25960 0042 02 .uleb128 0x2
+ 25961 0043 08 .byte 0x8
+ 25962 0044 05 .byte 0x5
+ 25963 0045 00000000 .long .LASF2
+ 25964 0049 04 .uleb128 0x4
+ 25965 004a 00000000 .long .LASF5
+ 25966 004e 03 .byte 0x3
+ 25967 004f 31 .byte 0x31
+ 25968 0050 54000000 .long 0x54
+ 25969 0054 02 .uleb128 0x2
+ 25970 0055 01 .byte 0x1
+ 25971 0056 08 .byte 0x8
+ 25972 0057 00000000 .long .LASF3
+ 25973 005b 02 .uleb128 0x2
+ 25974 005c 02 .byte 0x2
+ 25975 005d 07 .byte 0x7
+ 25976 005e 00000000 .long .LASF4
+ 25977 0062 04 .uleb128 0x4
+ 25978 0063 00000000 .long .LASF6
+ 25979 0067 03 .byte 0x3
+ 25980 0068 34 .byte 0x34
+ 25981 0069 6D000000 .long 0x6d
+ 25982 006d 02 .uleb128 0x2
+ 25983 006e 04 .byte 0x4
+ 25984 006f 07 .byte 0x7
+ 25985 0070 00000000 .long .LASF7
+ 25986 0074 04 .uleb128 0x4
+ 25987 0075 00000000 .long .LASF8
+ 25988 0079 03 .byte 0x3
+ 25989 007a 38 .byte 0x38
+ 25990 007b 7F000000 .long 0x7f
+ 25991 007f 02 .uleb128 0x2
+ 25992 0080 08 .byte 0x8
+ 25993 0081 07 .byte 0x7
+ 25994 0082 00000000 .long .LASF9
+
GAS LISTING /tmp/ccMa7HLZ.s page 776
+
+
+ 25995 0086 04 .uleb128 0x4
+ 25996 0087 00000000 .long .LASF10
+ 25997 008b 04 .byte 0x4
+ 25998 008c 30 .byte 0x30
+ 25999 008d 62000000 .long 0x62
+ 26000 0091 05 .uleb128 0x5
+ 26001 0092 08 .byte 0x8
+ 26002 0093 07 .byte 0x7
+ 26003 0094 02 .uleb128 0x2
+ 26004 0095 01 .byte 0x1
+ 26005 0096 06 .byte 0x6
+ 26006 0097 00000000 .long .LASF11
+ 26007 009b 02 .uleb128 0x2
+ 26008 009c 08 .byte 0x8
+ 26009 009d 05 .byte 0x5
+ 26010 009e 00000000 .long .LASF12
+ 26011 00a2 02 .uleb128 0x2
+ 26012 00a3 04 .byte 0x4
+ 26013 00a4 04 .byte 0x4
+ 26014 00a5 00000000 .long .LASF13
+ 26015 00a9 06 .uleb128 0x6
+ 26016 00aa 3B000000 .long 0x3b
+ 26017 00ae 07 .uleb128 0x7
+ 26018 00af 08 .byte 0x8
+ 26019 00b0 B4000000 .long 0xb4
+ 26020 00b4 06 .uleb128 0x6
+ 26021 00b5 94000000 .long 0x94
+ 26022 00b9 08 .uleb128 0x8
+ 26023 00ba 08 .byte 0x8
+ 26024 00bb 07 .uleb128 0x7
+ 26025 00bc 08 .byte 0x8
+ 26026 00bd 94000000 .long 0x94
+ 26027 00c1 02 .uleb128 0x2
+ 26028 00c2 08 .byte 0x8
+ 26029 00c3 07 .byte 0x7
+ 26030 00c4 00000000 .long .LASF14
+ 26031 00c8 09 .uleb128 0x9
+ 26032 00c9 94000000 .long 0x94
+ 26033 00cd D8000000 .long 0xd8
+ 26034 00d1 0A .uleb128 0xa
+ 26035 00d2 91000000 .long 0x91
+ 26036 00d6 1F .byte 0x1f
+ 26037 00d7 00 .byte 0x0
+ 26038 00d8 07 .uleb128 0x7
+ 26039 00d9 08 .byte 0x8
+ 26040 00da DE000000 .long 0xde
+ 26041 00de 0B .uleb128 0xb
+ 26042 00df 02 .uleb128 0x2
+ 26043 00e0 08 .byte 0x8
+ 26044 00e1 04 .byte 0x4
+ 26045 00e2 00000000 .long .LASF15
+ 26046 00e6 04 .uleb128 0x4
+ 26047 00e7 00000000 .long .LASF16
+ 26048 00eb 05 .byte 0x5
+ 26049 00ec 26 .byte 0x26
+ 26050 00ed F1000000 .long 0xf1
+ 26051 00f1 0C .uleb128 0xc
+
GAS LISTING /tmp/ccMa7HLZ.s page 777
+
+
+ 26052 00f2 01 .byte 0x1
+ 26053 00f3 49000000 .long 0x49
+ 26054 00f7 02010000 .long 0x102
+ 26055 00fb 0A .uleb128 0xa
+ 26056 00fc 91000000 .long 0x91
+ 26057 0100 0F .byte 0xf
+ 26058 0101 00 .byte 0x0
+ 26059 0102 0D .uleb128 0xd
+ 26060 0103 04 .byte 0x4
+ 26061 0104 06 .byte 0x6
+ 26062 0105 D6 .byte 0xd6
+ 26063 0106 83010000 .long 0x183
+ 26064 010a 0E .uleb128 0xe
+ 26065 010b 00000000 .long .LASF17
+ 26066 010f 7F .sleb128 -1
+ 26067 0110 0E .uleb128 0xe
+ 26068 0111 00000000 .long .LASF18
+ 26069 0115 00 .sleb128 0
+ 26070 0116 0E .uleb128 0xe
+ 26071 0117 00000000 .long .LASF19
+ 26072 011b 01 .sleb128 1
+ 26073 011c 0E .uleb128 0xe
+ 26074 011d 00000000 .long .LASF20
+ 26075 0121 02 .sleb128 2
+ 26076 0122 0E .uleb128 0xe
+ 26077 0123 00000000 .long .LASF21
+ 26078 0127 03 .sleb128 3
+ 26079 0128 0E .uleb128 0xe
+ 26080 0129 00000000 .long .LASF22
+ 26081 012d 04 .sleb128 4
+ 26082 012e 0E .uleb128 0xe
+ 26083 012f 00000000 .long .LASF23
+ 26084 0133 05 .sleb128 5
+ 26085 0134 0E .uleb128 0xe
+ 26086 0135 00000000 .long .LASF24
+ 26087 0139 06 .sleb128 6
+ 26088 013a 0E .uleb128 0xe
+ 26089 013b 00000000 .long .LASF25
+ 26090 013f 07 .sleb128 7
+ 26091 0140 0E .uleb128 0xe
+ 26092 0141 00000000 .long .LASF26
+ 26093 0145 08 .sleb128 8
+ 26094 0146 0E .uleb128 0xe
+ 26095 0147 00000000 .long .LASF27
+ 26096 014b 09 .sleb128 9
+ 26097 014c 0E .uleb128 0xe
+ 26098 014d 00000000 .long .LASF28
+ 26099 0151 0A .sleb128 10
+ 26100 0152 0E .uleb128 0xe
+ 26101 0153 00000000 .long .LASF29
+ 26102 0157 0B .sleb128 11
+ 26103 0158 0E .uleb128 0xe
+ 26104 0159 00000000 .long .LASF30
+ 26105 015d 0C .sleb128 12
+ 26106 015e 0E .uleb128 0xe
+ 26107 015f 00000000 .long .LASF31
+ 26108 0163 0D .sleb128 13
+
GAS LISTING /tmp/ccMa7HLZ.s page 778
+
+
+ 26109 0164 0E .uleb128 0xe
+ 26110 0165 00000000 .long .LASF32
+ 26111 0169 0E .sleb128 14
+ 26112 016a 0E .uleb128 0xe
+ 26113 016b 00000000 .long .LASF33
+ 26114 016f 0F .sleb128 15
+ 26115 0170 0E .uleb128 0xe
+ 26116 0171 00000000 .long .LASF34
+ 26117 0175 10 .sleb128 16
+ 26118 0176 0E .uleb128 0xe
+ 26119 0177 00000000 .long .LASF35
+ 26120 017b 11 .sleb128 17
+ 26121 017c 0E .uleb128 0xe
+ 26122 017d 00000000 .long .LASF36
+ 26123 0181 12 .sleb128 18
+ 26124 0182 00 .byte 0x0
+ 26125 0183 0F .uleb128 0xf
+ 26126 0184 04 .byte 0x4
+ 26127 0185 06 .byte 0x6
+ 26128 0186 6701 .value 0x167
+ 26129 0188 B1010000 .long 0x1b1
+ 26130 018c 0E .uleb128 0xe
+ 26131 018d 00000000 .long .LASF37
+ 26132 0191 00 .sleb128 0
+ 26133 0192 0E .uleb128 0xe
+ 26134 0193 00000000 .long .LASF38
+ 26135 0197 01 .sleb128 1
+ 26136 0198 0E .uleb128 0xe
+ 26137 0199 00000000 .long .LASF39
+ 26138 019d 02 .sleb128 2
+ 26139 019e 0E .uleb128 0xe
+ 26140 019f 00000000 .long .LASF40
+ 26141 01a3 03 .sleb128 3
+ 26142 01a4 0E .uleb128 0xe
+ 26143 01a5 00000000 .long .LASF41
+ 26144 01a9 04 .sleb128 4
+ 26145 01aa 0E .uleb128 0xe
+ 26146 01ab 00000000 .long .LASF42
+ 26147 01af 05 .sleb128 5
+ 26148 01b0 00 .byte 0x0
+ 26149 01b1 04 .uleb128 0x4
+ 26150 01b2 00000000 .long .LASF43
+ 26151 01b6 07 .byte 0x7
+ 26152 01b7 3B .byte 0x3b
+ 26153 01b8 E6000000 .long 0xe6
+ 26154 01bc 04 .uleb128 0x4
+ 26155 01bd 00000000 .long .LASF44
+ 26156 01c1 07 .byte 0x7
+ 26157 01c2 43 .byte 0x43
+ 26158 01c3 C7010000 .long 0x1c7
+ 26159 01c7 10 .uleb128 0x10
+ 26160 01c8 00000000 .long .LASF44
+ 26161 01cc 08 .byte 0x8
+ 26162 01cd 07 .byte 0x7
+ 26163 01ce 43 .byte 0x43
+ 26164 01cf F0010000 .long 0x1f0
+ 26165 01d3 11 .uleb128 0x11
+
GAS LISTING /tmp/ccMa7HLZ.s page 779
+
+
+ 26166 01d4 6D616A00 .string "maj"
+ 26167 01d8 07 .byte 0x7
+ 26168 01d9 46 .byte 0x46
+ 26169 01da 62000000 .long 0x62
+ 26170 01de 02 .byte 0x2
+ 26171 01df 23 .byte 0x23
+ 26172 01e0 00 .uleb128 0x0
+ 26173 01e1 11 .uleb128 0x11
+ 26174 01e2 6D696E00 .string "min"
+ 26175 01e6 07 .byte 0x7
+ 26176 01e7 47 .byte 0x47
+ 26177 01e8 62000000 .long 0x62
+ 26178 01ec 02 .byte 0x2
+ 26179 01ed 23 .byte 0x23
+ 26180 01ee 04 .uleb128 0x4
+ 26181 01ef 00 .byte 0x0
+ 26182 01f0 04 .uleb128 0x4
+ 26183 01f1 00000000 .long .LASF45
+ 26184 01f5 07 .byte 0x7
+ 26185 01f6 52 .byte 0x52
+ 26186 01f7 FB010000 .long 0x1fb
+ 26187 01fb 10 .uleb128 0x10
+ 26188 01fc 00000000 .long .LASF45
+ 26189 0200 40 .byte 0x40
+ 26190 0201 07 .byte 0x7
+ 26191 0202 52 .byte 0x52
+ 26192 0203 78020000 .long 0x278
+ 26193 0207 12 .uleb128 0x12
+ 26194 0208 00000000 .long .LASF46
+ 26195 020c 07 .byte 0x7
+ 26196 020d 5E .byte 0x5e
+ 26197 020e BC010000 .long 0x1bc
+ 26198 0212 02 .byte 0x2
+ 26199 0213 23 .byte 0x23
+ 26200 0214 00 .uleb128 0x0
+ 26201 0215 12 .uleb128 0x12
+ 26202 0216 00000000 .long .LASF47
+ 26203 021a 07 .byte 0x7
+ 26204 021b 63 .byte 0x63
+ 26205 021c BC020000 .long 0x2bc
+ 26206 0220 02 .byte 0x2
+ 26207 0221 23 .byte 0x23
+ 26208 0222 08 .uleb128 0x8
+ 26209 0223 12 .uleb128 0x12
+ 26210 0224 00000000 .long .LASF48
+ 26211 0228 07 .byte 0x7
+ 26212 0229 65 .byte 0x65
+ 26213 022a CD020000 .long 0x2cd
+ 26214 022e 02 .byte 0x2
+ 26215 022f 23 .byte 0x23
+ 26216 0230 10 .uleb128 0x10
+ 26217 0231 12 .uleb128 0x12
+ 26218 0232 00000000 .long .LASF49
+ 26219 0236 07 .byte 0x7
+ 26220 0237 67 .byte 0x67
+ 26221 0238 CD020000 .long 0x2cd
+ 26222 023c 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 780
+
+
+ 26223 023d 23 .byte 0x23
+ 26224 023e 18 .uleb128 0x18
+ 26225 023f 12 .uleb128 0x12
+ 26226 0240 00000000 .long .LASF50
+ 26227 0244 07 .byte 0x7
+ 26228 0245 69 .byte 0x69
+ 26229 0246 ED020000 .long 0x2ed
+ 26230 024a 02 .byte 0x2
+ 26231 024b 23 .byte 0x23
+ 26232 024c 20 .uleb128 0x20
+ 26233 024d 12 .uleb128 0x12
+ 26234 024e 00000000 .long .LASF51
+ 26235 0252 07 .byte 0x7
+ 26236 0253 6D .byte 0x6d
+ 26237 0254 ED020000 .long 0x2ed
+ 26238 0258 02 .byte 0x2
+ 26239 0259 23 .byte 0x23
+ 26240 025a 28 .uleb128 0x28
+ 26241 025b 12 .uleb128 0x12
+ 26242 025c 00000000 .long .LASF52
+ 26243 0260 07 .byte 0x7
+ 26244 0261 71 .byte 0x71
+ 26245 0262 09030000 .long 0x309
+ 26246 0266 02 .byte 0x2
+ 26247 0267 23 .byte 0x23
+ 26248 0268 30 .uleb128 0x30
+ 26249 0269 12 .uleb128 0x12
+ 26250 026a 00000000 .long .LASF53
+ 26251 026e 07 .byte 0x7
+ 26252 026f 75 .byte 0x75
+ 26253 0270 09030000 .long 0x309
+ 26254 0274 02 .byte 0x2
+ 26255 0275 23 .byte 0x23
+ 26256 0276 38 .uleb128 0x38
+ 26257 0277 00 .byte 0x0
+ 26258 0278 04 .uleb128 0x4
+ 26259 0279 00000000 .long .LASF54
+ 26260 027d 07 .byte 0x7
+ 26261 027e 53 .byte 0x53
+ 26262 027f 83020000 .long 0x283
+ 26263 0283 13 .uleb128 0x13
+ 26264 0284 00000000 .long .LASF54
+ 26265 0288 40 .byte 0x40
+ 26266 0289 07 .byte 0x7
+ 26267 028a 53 .byte 0x53
+ 26268 028b A5020000 .long 0x2a5
+ 26269 028f 14 .uleb128 0x14
+ 26270 0290 00000000 .long .LASF46
+ 26271 0294 07 .byte 0x7
+ 26272 0295 7F .byte 0x7f
+ 26273 0296 BC010000 .long 0x1bc
+ 26274 029a 15 .uleb128 0x15
+ 26275 029b 763100 .string "v1"
+ 26276 029e 07 .byte 0x7
+ 26277 029f 80 .byte 0x80
+ 26278 02a0 F0010000 .long 0x1f0
+ 26279 02a4 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 781
+
+
+ 26280 02a5 16 .uleb128 0x16
+ 26281 02a6 01 .byte 0x1
+ 26282 02a7 B1020000 .long 0x2b1
+ 26283 02ab 17 .uleb128 0x17
+ 26284 02ac B1020000 .long 0x2b1
+ 26285 02b0 00 .byte 0x0
+ 26286 02b1 07 .uleb128 0x7
+ 26287 02b2 08 .byte 0x8
+ 26288 02b3 B7020000 .long 0x2b7
+ 26289 02b7 06 .uleb128 0x6
+ 26290 02b8 78020000 .long 0x278
+ 26291 02bc 07 .uleb128 0x7
+ 26292 02bd 08 .byte 0x8
+ 26293 02be A5020000 .long 0x2a5
+ 26294 02c2 18 .uleb128 0x18
+ 26295 02c3 62000000 .long 0x62
+ 26296 02c7 CD020000 .long 0x2cd
+ 26297 02cb 19 .uleb128 0x19
+ 26298 02cc 00 .byte 0x0
+ 26299 02cd 07 .uleb128 0x7
+ 26300 02ce 08 .byte 0x8
+ 26301 02cf C2020000 .long 0x2c2
+ 26302 02d3 1A .uleb128 0x1a
+ 26303 02d4 01 .byte 0x1
+ 26304 02d5 86000000 .long 0x86
+ 26305 02d9 ED020000 .long 0x2ed
+ 26306 02dd 17 .uleb128 0x17
+ 26307 02de B9000000 .long 0xb9
+ 26308 02e2 17 .uleb128 0x17
+ 26309 02e3 AE000000 .long 0xae
+ 26310 02e7 17 .uleb128 0x17
+ 26311 02e8 62000000 .long 0x62
+ 26312 02ec 00 .byte 0x0
+ 26313 02ed 07 .uleb128 0x7
+ 26314 02ee 08 .byte 0x8
+ 26315 02ef D3020000 .long 0x2d3
+ 26316 02f3 16 .uleb128 0x16
+ 26317 02f4 01 .byte 0x1
+ 26318 02f5 09030000 .long 0x309
+ 26319 02f9 17 .uleb128 0x17
+ 26320 02fa AE000000 .long 0xae
+ 26321 02fe 17 .uleb128 0x17
+ 26322 02ff BB000000 .long 0xbb
+ 26323 0303 17 .uleb128 0x17
+ 26324 0304 D8000000 .long 0xd8
+ 26325 0308 00 .byte 0x0
+ 26326 0309 07 .uleb128 0x7
+ 26327 030a 08 .byte 0x8
+ 26328 030b F3020000 .long 0x2f3
+ 26329 030f 04 .uleb128 0x4
+ 26330 0310 00000000 .long .LASF55
+ 26331 0314 07 .byte 0x7
+ 26332 0315 84 .byte 0x84
+ 26333 0316 1A030000 .long 0x31a
+ 26334 031a 10 .uleb128 0x10
+ 26335 031b 00000000 .long .LASF55
+ 26336 031f 40 .byte 0x40
+
GAS LISTING /tmp/ccMa7HLZ.s page 782
+
+
+ 26337 0320 07 .byte 0x7
+ 26338 0321 84 .byte 0x84
+ 26339 0322 97030000 .long 0x397
+ 26340 0326 12 .uleb128 0x12
+ 26341 0327 00000000 .long .LASF46
+ 26342 032b 07 .byte 0x7
+ 26343 032c 90 .byte 0x90
+ 26344 032d BC010000 .long 0x1bc
+ 26345 0331 02 .byte 0x2
+ 26346 0332 23 .byte 0x23
+ 26347 0333 00 .uleb128 0x0
+ 26348 0334 12 .uleb128 0x12
+ 26349 0335 00000000 .long .LASF47
+ 26350 0339 07 .byte 0x7
+ 26351 033a 95 .byte 0x95
+ 26352 033b DB030000 .long 0x3db
+ 26353 033f 02 .byte 0x2
+ 26354 0340 23 .byte 0x23
+ 26355 0341 08 .uleb128 0x8
+ 26356 0342 12 .uleb128 0x12
+ 26357 0343 00000000 .long .LASF48
+ 26358 0347 07 .byte 0x7
+ 26359 0348 97 .byte 0x97
+ 26360 0349 CD020000 .long 0x2cd
+ 26361 034d 02 .byte 0x2
+ 26362 034e 23 .byte 0x23
+ 26363 034f 10 .uleb128 0x10
+ 26364 0350 12 .uleb128 0x12
+ 26365 0351 00000000 .long .LASF49
+ 26366 0355 07 .byte 0x7
+ 26367 0356 99 .byte 0x99
+ 26368 0357 CD020000 .long 0x2cd
+ 26369 035b 02 .byte 0x2
+ 26370 035c 23 .byte 0x23
+ 26371 035d 18 .uleb128 0x18
+ 26372 035e 12 .uleb128 0x12
+ 26373 035f 00000000 .long .LASF50
+ 26374 0363 07 .byte 0x7
+ 26375 0364 9B .byte 0x9b
+ 26376 0365 ED020000 .long 0x2ed
+ 26377 0369 02 .byte 0x2
+ 26378 036a 23 .byte 0x23
+ 26379 036b 20 .uleb128 0x20
+ 26380 036c 12 .uleb128 0x12
+ 26381 036d 00000000 .long .LASF51
+ 26382 0371 07 .byte 0x7
+ 26383 0372 9F .byte 0x9f
+ 26384 0373 ED020000 .long 0x2ed
+ 26385 0377 02 .byte 0x2
+ 26386 0378 23 .byte 0x23
+ 26387 0379 28 .uleb128 0x28
+ 26388 037a 12 .uleb128 0x12
+ 26389 037b 00000000 .long .LASF52
+ 26390 037f 07 .byte 0x7
+ 26391 0380 A3 .byte 0xa3
+ 26392 0381 F6030000 .long 0x3f6
+ 26393 0385 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 783
+
+
+ 26394 0386 23 .byte 0x23
+ 26395 0387 30 .uleb128 0x30
+ 26396 0388 12 .uleb128 0x12
+ 26397 0389 00000000 .long .LASF53
+ 26398 038d 07 .byte 0x7
+ 26399 038e A6 .byte 0xa6
+ 26400 038f F6030000 .long 0x3f6
+ 26401 0393 02 .byte 0x2
+ 26402 0394 23 .byte 0x23
+ 26403 0395 38 .uleb128 0x38
+ 26404 0396 00 .byte 0x0
+ 26405 0397 04 .uleb128 0x4
+ 26406 0398 00000000 .long .LASF56
+ 26407 039c 07 .byte 0x7
+ 26408 039d 85 .byte 0x85
+ 26409 039e A2030000 .long 0x3a2
+ 26410 03a2 13 .uleb128 0x13
+ 26411 03a3 00000000 .long .LASF56
+ 26412 03a7 40 .byte 0x40
+ 26413 03a8 07 .byte 0x7
+ 26414 03a9 85 .byte 0x85
+ 26415 03aa C4030000 .long 0x3c4
+ 26416 03ae 14 .uleb128 0x14
+ 26417 03af 00000000 .long .LASF46
+ 26418 03b3 07 .byte 0x7
+ 26419 03b4 AF .byte 0xaf
+ 26420 03b5 BC010000 .long 0x1bc
+ 26421 03b9 15 .uleb128 0x15
+ 26422 03ba 763100 .string "v1"
+ 26423 03bd 07 .byte 0x7
+ 26424 03be B0 .byte 0xb0
+ 26425 03bf 0F030000 .long 0x30f
+ 26426 03c3 00 .byte 0x0
+ 26427 03c4 16 .uleb128 0x16
+ 26428 03c5 01 .byte 0x1
+ 26429 03c6 D0030000 .long 0x3d0
+ 26430 03ca 17 .uleb128 0x17
+ 26431 03cb D0030000 .long 0x3d0
+ 26432 03cf 00 .byte 0x0
+ 26433 03d0 07 .uleb128 0x7
+ 26434 03d1 08 .byte 0x8
+ 26435 03d2 D6030000 .long 0x3d6
+ 26436 03d6 06 .uleb128 0x6
+ 26437 03d7 97030000 .long 0x397
+ 26438 03db 07 .uleb128 0x7
+ 26439 03dc 08 .byte 0x8
+ 26440 03dd C4030000 .long 0x3c4
+ 26441 03e1 1A .uleb128 0x1a
+ 26442 03e2 01 .byte 0x1
+ 26443 03e3 B1010000 .long 0x1b1
+ 26444 03e7 F6030000 .long 0x3f6
+ 26445 03eb 17 .uleb128 0x17
+ 26446 03ec B1010000 .long 0x1b1
+ 26447 03f0 17 .uleb128 0x17
+ 26448 03f1 D8000000 .long 0xd8
+ 26449 03f5 00 .byte 0x0
+ 26450 03f6 07 .uleb128 0x7
+
GAS LISTING /tmp/ccMa7HLZ.s page 784
+
+
+ 26451 03f7 08 .byte 0x8
+ 26452 03f8 E1030000 .long 0x3e1
+ 26453 03fc 04 .uleb128 0x4
+ 26454 03fd 00000000 .long .LASF57
+ 26455 0401 08 .byte 0x8
+ 26456 0402 9D .byte 0x9d
+ 26457 0403 49000000 .long 0x49
+ 26458 0407 04 .uleb128 0x4
+ 26459 0408 00000000 .long .LASF58
+ 26460 040c 08 .byte 0x8
+ 26461 040d 9E .byte 0x9e
+ 26462 040e 62000000 .long 0x62
+ 26463 0412 04 .uleb128 0x4
+ 26464 0413 00000000 .long .LASF59
+ 26465 0417 08 .byte 0x8
+ 26466 0418 9F .byte 0x9f
+ 26467 0419 1D040000 .long 0x41d
+ 26468 041d 13 .uleb128 0x13
+ 26469 041e 00000000 .long .LASF59
+ 26470 0422 04 .byte 0x4
+ 26471 0423 08 .byte 0x8
+ 26472 0424 9F .byte 0x9f
+ 26473 0425 40040000 .long 0x440
+ 26474 0429 14 .uleb128 0x14
+ 26475 042a 00000000 .long .LASF60
+ 26476 042e 08 .byte 0x8
+ 26477 042f A2 .byte 0xa2
+ 26478 0430 07040000 .long 0x407
+ 26479 0434 14 .uleb128 0x14
+ 26480 0435 00000000 .long .LASF61
+ 26481 0439 08 .byte 0x8
+ 26482 043a A3 .byte 0xa3
+ 26483 043b 40040000 .long 0x440
+ 26484 043f 00 .byte 0x0
+ 26485 0440 09 .uleb128 0x9
+ 26486 0441 FC030000 .long 0x3fc
+ 26487 0445 50040000 .long 0x450
+ 26488 0449 0A .uleb128 0xa
+ 26489 044a 91000000 .long 0x91
+ 26490 044e 03 .byte 0x3
+ 26491 044f 00 .byte 0x0
+ 26492 0450 09 .uleb128 0x9
+ 26493 0451 FC030000 .long 0x3fc
+ 26494 0455 60040000 .long 0x460
+ 26495 0459 0A .uleb128 0xa
+ 26496 045a 91000000 .long 0x91
+ 26497 045e 0F .byte 0xf
+ 26498 045f 00 .byte 0x0
+ 26499 0460 04 .uleb128 0x4
+ 26500 0461 00000000 .long .LASF62
+ 26501 0465 08 .byte 0x8
+ 26502 0466 AC .byte 0xac
+ 26503 0467 E6000000 .long 0xe6
+ 26504 046b 04 .uleb128 0x4
+ 26505 046c 00000000 .long .LASF63
+ 26506 0470 08 .byte 0x8
+ 26507 0471 B0 .byte 0xb0
+
GAS LISTING /tmp/ccMa7HLZ.s page 785
+
+
+ 26508 0472 76040000 .long 0x476
+ 26509 0476 1B .uleb128 0x1b
+ 26510 0477 00000000 .long .LASF63
+ 26511 047b 0001 .value 0x100
+ 26512 047d 08 .byte 0x8
+ 26513 047e B0 .byte 0xb0
+ 26514 047f A1040000 .long 0x4a1
+ 26515 0483 12 .uleb128 0x12
+ 26516 0484 00000000 .long .LASF64
+ 26517 0488 08 .byte 0x8
+ 26518 0489 B3 .byte 0xb3
+ 26519 048a A1040000 .long 0x4a1
+ 26520 048e 02 .byte 0x2
+ 26521 048f 23 .byte 0x23
+ 26522 0490 00 .uleb128 0x0
+ 26523 0491 12 .uleb128 0x12
+ 26524 0492 00000000 .long .LASF65
+ 26525 0496 08 .byte 0x8
+ 26526 0497 B4 .byte 0xb4
+ 26527 0498 62000000 .long 0x62
+ 26528 049c 03 .byte 0x3
+ 26529 049d 23 .byte 0x23
+ 26530 049e F001 .uleb128 0xf0
+ 26531 04a0 00 .byte 0x0
+ 26532 04a1 09 .uleb128 0x9
+ 26533 04a2 B1010000 .long 0x1b1
+ 26534 04a6 B1040000 .long 0x4b1
+ 26535 04aa 0A .uleb128 0xa
+ 26536 04ab 91000000 .long 0x91
+ 26537 04af 0E .byte 0xe
+ 26538 04b0 00 .byte 0x0
+ 26539 04b1 1C .uleb128 0x1c
+ 26540 04b2 10 .byte 0x10
+ 26541 04b3 08 .byte 0x8
+ 26542 04b4 C0 .byte 0xc0
+ 26543 04b5 F1040000 .long 0x4f1
+ 26544 04b9 14 .uleb128 0x14
+ 26545 04ba 00000000 .long .LASF66
+ 26546 04be 08 .byte 0x8
+ 26547 04bf C1 .byte 0xc1
+ 26548 04c0 B1010000 .long 0x1b1
+ 26549 04c4 15 .uleb128 0x15
+ 26550 04c5 75363400 .string "u64"
+ 26551 04c9 08 .byte 0x8
+ 26552 04ca C2 .byte 0xc2
+ 26553 04cb F1040000 .long 0x4f1
+ 26554 04cf 14 .uleb128 0x14
+ 26555 04d0 00000000 .long .LASF67
+ 26556 04d4 08 .byte 0x8
+ 26557 04d5 C3 .byte 0xc3
+ 26558 04d6 01050000 .long 0x501
+ 26559 04da 14 .uleb128 0x14
+ 26560 04db 00000000 .long .LASF61
+ 26561 04df 08 .byte 0x8
+ 26562 04e0 C4 .byte 0xc4
+ 26563 04e1 50040000 .long 0x450
+ 26564 04e5 14 .uleb128 0x14
+
GAS LISTING /tmp/ccMa7HLZ.s page 786
+
+
+ 26565 04e6 00000000 .long .LASF68
+ 26566 04ea 08 .byte 0x8
+ 26567 04eb C5 .byte 0xc5
+ 26568 04ec 11050000 .long 0x511
+ 26569 04f0 00 .byte 0x0
+ 26570 04f1 09 .uleb128 0x9
+ 26571 04f2 74000000 .long 0x74
+ 26572 04f6 01050000 .long 0x501
+ 26573 04fa 0A .uleb128 0xa
+ 26574 04fb 91000000 .long 0x91
+ 26575 04ff 01 .byte 0x1
+ 26576 0500 00 .byte 0x0
+ 26577 0501 09 .uleb128 0x9
+ 26578 0502 07040000 .long 0x407
+ 26579 0506 11050000 .long 0x511
+ 26580 050a 0A .uleb128 0xa
+ 26581 050b 91000000 .long 0x91
+ 26582 050f 03 .byte 0x3
+ 26583 0510 00 .byte 0x0
+ 26584 0511 09 .uleb128 0x9
+ 26585 0512 FC030000 .long 0x3fc
+ 26586 0516 27050000 .long 0x527
+ 26587 051a 0A .uleb128 0xa
+ 26588 051b 91000000 .long 0x91
+ 26589 051f 03 .byte 0x3
+ 26590 0520 0A .uleb128 0xa
+ 26591 0521 91000000 .long 0x91
+ 26592 0525 03 .byte 0x3
+ 26593 0526 00 .byte 0x0
+ 26594 0527 04 .uleb128 0x4
+ 26595 0528 00000000 .long .LASF69
+ 26596 052c 08 .byte 0x8
+ 26597 052d C6 .byte 0xc6
+ 26598 052e B1040000 .long 0x4b1
+ 26599 0532 04 .uleb128 0x4
+ 26600 0533 00000000 .long .LASF70
+ 26601 0537 09 .byte 0x9
+ 26602 0538 40 .byte 0x40
+ 26603 0539 3D050000 .long 0x53d
+ 26604 053d 13 .uleb128 0x13
+ 26605 053e 00000000 .long .LASF70
+ 26606 0542 40 .byte 0x40
+ 26607 0543 09 .byte 0x9
+ 26608 0544 40 .byte 0x40
+ 26609 0545 60050000 .long 0x560
+ 26610 0549 14 .uleb128 0x14
+ 26611 054a 00000000 .long .LASF71
+ 26612 054e 09 .byte 0x9
+ 26613 054f 43 .byte 0x43
+ 26614 0550 78020000 .long 0x278
+ 26615 0554 15 .uleb128 0x15
+ 26616 0555 76656300 .string "vec"
+ 26617 0559 09 .byte 0x9
+ 26618 055a 44 .byte 0x44
+ 26619 055b 97030000 .long 0x397
+ 26620 055f 00 .byte 0x0
+ 26621 0560 1D .uleb128 0x1d
+
GAS LISTING /tmp/ccMa7HLZ.s page 787
+
+
+ 26622 0561 00000000 .long .LASF94
+ 26623 0565 04 .byte 0x4
+ 26624 0566 0A .byte 0xa
+ 26625 0567 5A .byte 0x5a
+ 26626 0568 F1050000 .long 0x5f1
+ 26627 056c 0E .uleb128 0xe
+ 26628 056d 00000000 .long .LASF72
+ 26629 0571 00 .sleb128 0
+ 26630 0572 0E .uleb128 0xe
+ 26631 0573 00000000 .long .LASF73
+ 26632 0577 01 .sleb128 1
+ 26633 0578 0E .uleb128 0xe
+ 26634 0579 00000000 .long .LASF74
+ 26635 057d 02 .sleb128 2
+ 26636 057e 0E .uleb128 0xe
+ 26637 057f 00000000 .long .LASF75
+ 26638 0583 03 .sleb128 3
+ 26639 0584 0E .uleb128 0xe
+ 26640 0585 00000000 .long .LASF76
+ 26641 0589 04 .sleb128 4
+ 26642 058a 0E .uleb128 0xe
+ 26643 058b 00000000 .long .LASF77
+ 26644 058f 05 .sleb128 5
+ 26645 0590 0E .uleb128 0xe
+ 26646 0591 00000000 .long .LASF78
+ 26647 0595 06 .sleb128 6
+ 26648 0596 0E .uleb128 0xe
+ 26649 0597 00000000 .long .LASF79
+ 26650 059b 07 .sleb128 7
+ 26651 059c 0E .uleb128 0xe
+ 26652 059d 00000000 .long .LASF80
+ 26653 05a1 08 .sleb128 8
+ 26654 05a2 0E .uleb128 0xe
+ 26655 05a3 00000000 .long .LASF81
+ 26656 05a7 09 .sleb128 9
+ 26657 05a8 0E .uleb128 0xe
+ 26658 05a9 00000000 .long .LASF82
+ 26659 05ad 0A .sleb128 10
+ 26660 05ae 0E .uleb128 0xe
+ 26661 05af 00000000 .long .LASF83
+ 26662 05b3 0B .sleb128 11
+ 26663 05b4 0E .uleb128 0xe
+ 26664 05b5 00000000 .long .LASF84
+ 26665 05b9 0C .sleb128 12
+ 26666 05ba 0E .uleb128 0xe
+ 26667 05bb 00000000 .long .LASF85
+ 26668 05bf 0D .sleb128 13
+ 26669 05c0 0E .uleb128 0xe
+ 26670 05c1 00000000 .long .LASF86
+ 26671 05c5 0E .sleb128 14
+ 26672 05c6 0E .uleb128 0xe
+ 26673 05c7 00000000 .long .LASF87
+ 26674 05cb 0E .sleb128 14
+ 26675 05cc 0E .uleb128 0xe
+ 26676 05cd 00000000 .long .LASF88
+ 26677 05d1 0F .sleb128 15
+ 26678 05d2 0E .uleb128 0xe
+
GAS LISTING /tmp/ccMa7HLZ.s page 788
+
+
+ 26679 05d3 00000000 .long .LASF89
+ 26680 05d7 10 .sleb128 16
+ 26681 05d8 0E .uleb128 0xe
+ 26682 05d9 00000000 .long .LASF90
+ 26683 05dd 11 .sleb128 17
+ 26684 05de 0E .uleb128 0xe
+ 26685 05df 00000000 .long .LASF91
+ 26686 05e3 12 .sleb128 18
+ 26687 05e4 0E .uleb128 0xe
+ 26688 05e5 00000000 .long .LASF92
+ 26689 05e9 13 .sleb128 19
+ 26690 05ea 0E .uleb128 0xe
+ 26691 05eb 00000000 .long .LASF93
+ 26692 05ef 14 .sleb128 20
+ 26693 05f0 00 .byte 0x0
+ 26694 05f1 1D .uleb128 0x1d
+ 26695 05f2 00000000 .long .LASF95
+ 26696 05f6 04 .byte 0x4
+ 26697 05f7 0A .byte 0xa
+ 26698 05f8 77 .byte 0x77
+ 26699 05f9 78070000 .long 0x778
+ 26700 05fd 0E .uleb128 0xe
+ 26701 05fe 00000000 .long .LASF96
+ 26702 0602 00 .sleb128 0
+ 26703 0603 0E .uleb128 0xe
+ 26704 0604 00000000 .long .LASF97
+ 26705 0608 01 .sleb128 1
+ 26706 0609 0E .uleb128 0xe
+ 26707 060a 00000000 .long .LASF98
+ 26708 060e 02 .sleb128 2
+ 26709 060f 0E .uleb128 0xe
+ 26710 0610 00000000 .long .LASF99
+ 26711 0614 03 .sleb128 3
+ 26712 0615 0E .uleb128 0xe
+ 26713 0616 00000000 .long .LASF100
+ 26714 061a 04 .sleb128 4
+ 26715 061b 0E .uleb128 0xe
+ 26716 061c 00000000 .long .LASF101
+ 26717 0620 05 .sleb128 5
+ 26718 0621 0E .uleb128 0xe
+ 26719 0622 00000000 .long .LASF102
+ 26720 0626 06 .sleb128 6
+ 26721 0627 0E .uleb128 0xe
+ 26722 0628 00000000 .long .LASF103
+ 26723 062c 07 .sleb128 7
+ 26724 062d 0E .uleb128 0xe
+ 26725 062e 00000000 .long .LASF104
+ 26726 0632 08 .sleb128 8
+ 26727 0633 0E .uleb128 0xe
+ 26728 0634 00000000 .long .LASF105
+ 26729 0638 09 .sleb128 9
+ 26730 0639 0E .uleb128 0xe
+ 26731 063a 00000000 .long .LASF106
+ 26732 063e 0A .sleb128 10
+ 26733 063f 0E .uleb128 0xe
+ 26734 0640 00000000 .long .LASF107
+ 26735 0644 0B .sleb128 11
+
GAS LISTING /tmp/ccMa7HLZ.s page 789
+
+
+ 26736 0645 0E .uleb128 0xe
+ 26737 0646 00000000 .long .LASF108
+ 26738 064a 0C .sleb128 12
+ 26739 064b 0E .uleb128 0xe
+ 26740 064c 00000000 .long .LASF109
+ 26741 0650 0D .sleb128 13
+ 26742 0651 0E .uleb128 0xe
+ 26743 0652 00000000 .long .LASF110
+ 26744 0656 0E .sleb128 14
+ 26745 0657 0E .uleb128 0xe
+ 26746 0658 00000000 .long .LASF111
+ 26747 065c 0F .sleb128 15
+ 26748 065d 0E .uleb128 0xe
+ 26749 065e 00000000 .long .LASF112
+ 26750 0662 10 .sleb128 16
+ 26751 0663 0E .uleb128 0xe
+ 26752 0664 00000000 .long .LASF113
+ 26753 0668 11 .sleb128 17
+ 26754 0669 0E .uleb128 0xe
+ 26755 066a 00000000 .long .LASF114
+ 26756 066e 12 .sleb128 18
+ 26757 066f 0E .uleb128 0xe
+ 26758 0670 00000000 .long .LASF115
+ 26759 0674 13 .sleb128 19
+ 26760 0675 0E .uleb128 0xe
+ 26761 0676 00000000 .long .LASF116
+ 26762 067a 14 .sleb128 20
+ 26763 067b 0E .uleb128 0xe
+ 26764 067c 00000000 .long .LASF117
+ 26765 0680 15 .sleb128 21
+ 26766 0681 0E .uleb128 0xe
+ 26767 0682 00000000 .long .LASF118
+ 26768 0686 16 .sleb128 22
+ 26769 0687 0E .uleb128 0xe
+ 26770 0688 00000000 .long .LASF119
+ 26771 068c 17 .sleb128 23
+ 26772 068d 0E .uleb128 0xe
+ 26773 068e 00000000 .long .LASF120
+ 26774 0692 18 .sleb128 24
+ 26775 0693 0E .uleb128 0xe
+ 26776 0694 00000000 .long .LASF121
+ 26777 0698 19 .sleb128 25
+ 26778 0699 0E .uleb128 0xe
+ 26779 069a 00000000 .long .LASF122
+ 26780 069e 1A .sleb128 26
+ 26781 069f 0E .uleb128 0xe
+ 26782 06a0 00000000 .long .LASF123
+ 26783 06a4 1B .sleb128 27
+ 26784 06a5 0E .uleb128 0xe
+ 26785 06a6 00000000 .long .LASF124
+ 26786 06aa 1C .sleb128 28
+ 26787 06ab 0E .uleb128 0xe
+ 26788 06ac 00000000 .long .LASF125
+ 26789 06b0 1D .sleb128 29
+ 26790 06b1 0E .uleb128 0xe
+ 26791 06b2 00000000 .long .LASF126
+ 26792 06b6 1E .sleb128 30
+
GAS LISTING /tmp/ccMa7HLZ.s page 790
+
+
+ 26793 06b7 0E .uleb128 0xe
+ 26794 06b8 00000000 .long .LASF127
+ 26795 06bc 1F .sleb128 31
+ 26796 06bd 0E .uleb128 0xe
+ 26797 06be 00000000 .long .LASF128
+ 26798 06c2 20 .sleb128 32
+ 26799 06c3 0E .uleb128 0xe
+ 26800 06c4 00000000 .long .LASF129
+ 26801 06c8 21 .sleb128 33
+ 26802 06c9 0E .uleb128 0xe
+ 26803 06ca 00000000 .long .LASF130
+ 26804 06ce 22 .sleb128 34
+ 26805 06cf 0E .uleb128 0xe
+ 26806 06d0 00000000 .long .LASF131
+ 26807 06d4 23 .sleb128 35
+ 26808 06d5 0E .uleb128 0xe
+ 26809 06d6 00000000 .long .LASF132
+ 26810 06da 24 .sleb128 36
+ 26811 06db 0E .uleb128 0xe
+ 26812 06dc 00000000 .long .LASF133
+ 26813 06e0 25 .sleb128 37
+ 26814 06e1 0E .uleb128 0xe
+ 26815 06e2 00000000 .long .LASF134
+ 26816 06e6 26 .sleb128 38
+ 26817 06e7 0E .uleb128 0xe
+ 26818 06e8 00000000 .long .LASF135
+ 26819 06ec 27 .sleb128 39
+ 26820 06ed 0E .uleb128 0xe
+ 26821 06ee 00000000 .long .LASF136
+ 26822 06f2 28 .sleb128 40
+ 26823 06f3 0E .uleb128 0xe
+ 26824 06f4 00000000 .long .LASF137
+ 26825 06f8 29 .sleb128 41
+ 26826 06f9 0E .uleb128 0xe
+ 26827 06fa 00000000 .long .LASF138
+ 26828 06fe 2A .sleb128 42
+ 26829 06ff 0E .uleb128 0xe
+ 26830 0700 00000000 .long .LASF139
+ 26831 0704 2B .sleb128 43
+ 26832 0705 0E .uleb128 0xe
+ 26833 0706 00000000 .long .LASF140
+ 26834 070a 2C .sleb128 44
+ 26835 070b 0E .uleb128 0xe
+ 26836 070c 00000000 .long .LASF141
+ 26837 0710 2D .sleb128 45
+ 26838 0711 0E .uleb128 0xe
+ 26839 0712 00000000 .long .LASF142
+ 26840 0716 2E .sleb128 46
+ 26841 0717 0E .uleb128 0xe
+ 26842 0718 00000000 .long .LASF143
+ 26843 071c 2F .sleb128 47
+ 26844 071d 0E .uleb128 0xe
+ 26845 071e 00000000 .long .LASF144
+ 26846 0722 30 .sleb128 48
+ 26847 0723 0E .uleb128 0xe
+ 26848 0724 00000000 .long .LASF145
+ 26849 0728 31 .sleb128 49
+
GAS LISTING /tmp/ccMa7HLZ.s page 791
+
+
+ 26850 0729 0E .uleb128 0xe
+ 26851 072a 00000000 .long .LASF146
+ 26852 072e 32 .sleb128 50
+ 26853 072f 0E .uleb128 0xe
+ 26854 0730 00000000 .long .LASF147
+ 26855 0734 33 .sleb128 51
+ 26856 0735 0E .uleb128 0xe
+ 26857 0736 00000000 .long .LASF148
+ 26858 073a 34 .sleb128 52
+ 26859 073b 0E .uleb128 0xe
+ 26860 073c 00000000 .long .LASF149
+ 26861 0740 35 .sleb128 53
+ 26862 0741 0E .uleb128 0xe
+ 26863 0742 00000000 .long .LASF150
+ 26864 0746 36 .sleb128 54
+ 26865 0747 0E .uleb128 0xe
+ 26866 0748 00000000 .long .LASF151
+ 26867 074c 36 .sleb128 54
+ 26868 074d 0E .uleb128 0xe
+ 26869 074e 00000000 .long .LASF152
+ 26870 0752 37 .sleb128 55
+ 26871 0753 0E .uleb128 0xe
+ 26872 0754 00000000 .long .LASF153
+ 26873 0758 38 .sleb128 56
+ 26874 0759 0E .uleb128 0xe
+ 26875 075a 00000000 .long .LASF154
+ 26876 075e 39 .sleb128 57
+ 26877 075f 0E .uleb128 0xe
+ 26878 0760 00000000 .long .LASF155
+ 26879 0764 3A .sleb128 58
+ 26880 0765 0E .uleb128 0xe
+ 26881 0766 00000000 .long .LASF156
+ 26882 076a 3B .sleb128 59
+ 26883 076b 0E .uleb128 0xe
+ 26884 076c 00000000 .long .LASF157
+ 26885 0770 3C .sleb128 60
+ 26886 0771 0E .uleb128 0xe
+ 26887 0772 00000000 .long .LASF158
+ 26888 0776 3D .sleb128 61
+ 26889 0777 00 .byte 0x0
+ 26890 0778 1D .uleb128 0x1d
+ 26891 0779 00000000 .long .LASF159
+ 26892 077d 04 .byte 0x4
+ 26893 077e 0A .byte 0xa
+ 26894 077f BD .byte 0xbd
+ 26895 0780 2E090000 .long 0x92e
+ 26896 0784 0E .uleb128 0xe
+ 26897 0785 00000000 .long .LASF160
+ 26898 0789 00 .sleb128 0
+ 26899 078a 0E .uleb128 0xe
+ 26900 078b 00000000 .long .LASF161
+ 26901 078f 01 .sleb128 1
+ 26902 0790 0E .uleb128 0xe
+ 26903 0791 00000000 .long .LASF162
+ 26904 0795 02 .sleb128 2
+ 26905 0796 0E .uleb128 0xe
+ 26906 0797 00000000 .long .LASF163
+
GAS LISTING /tmp/ccMa7HLZ.s page 792
+
+
+ 26907 079b 03 .sleb128 3
+ 26908 079c 0E .uleb128 0xe
+ 26909 079d 00000000 .long .LASF164
+ 26910 07a1 04 .sleb128 4
+ 26911 07a2 0E .uleb128 0xe
+ 26912 07a3 00000000 .long .LASF165
+ 26913 07a7 05 .sleb128 5
+ 26914 07a8 0E .uleb128 0xe
+ 26915 07a9 00000000 .long .LASF166
+ 26916 07ad 06 .sleb128 6
+ 26917 07ae 0E .uleb128 0xe
+ 26918 07af 00000000 .long .LASF167
+ 26919 07b3 07 .sleb128 7
+ 26920 07b4 0E .uleb128 0xe
+ 26921 07b5 00000000 .long .LASF168
+ 26922 07b9 08 .sleb128 8
+ 26923 07ba 0E .uleb128 0xe
+ 26924 07bb 00000000 .long .LASF169
+ 26925 07bf 09 .sleb128 9
+ 26926 07c0 0E .uleb128 0xe
+ 26927 07c1 00000000 .long .LASF170
+ 26928 07c5 0A .sleb128 10
+ 26929 07c6 0E .uleb128 0xe
+ 26930 07c7 00000000 .long .LASF171
+ 26931 07cb 0B .sleb128 11
+ 26932 07cc 0E .uleb128 0xe
+ 26933 07cd 00000000 .long .LASF172
+ 26934 07d1 0C .sleb128 12
+ 26935 07d2 0E .uleb128 0xe
+ 26936 07d3 00000000 .long .LASF173
+ 26937 07d7 0D .sleb128 13
+ 26938 07d8 0E .uleb128 0xe
+ 26939 07d9 00000000 .long .LASF174
+ 26940 07dd 0E .sleb128 14
+ 26941 07de 0E .uleb128 0xe
+ 26942 07df 00000000 .long .LASF175
+ 26943 07e3 0F .sleb128 15
+ 26944 07e4 0E .uleb128 0xe
+ 26945 07e5 00000000 .long .LASF176
+ 26946 07e9 10 .sleb128 16
+ 26947 07ea 0E .uleb128 0xe
+ 26948 07eb 00000000 .long .LASF177
+ 26949 07ef 11 .sleb128 17
+ 26950 07f0 0E .uleb128 0xe
+ 26951 07f1 00000000 .long .LASF178
+ 26952 07f5 12 .sleb128 18
+ 26953 07f6 0E .uleb128 0xe
+ 26954 07f7 00000000 .long .LASF179
+ 26955 07fb 13 .sleb128 19
+ 26956 07fc 0E .uleb128 0xe
+ 26957 07fd 00000000 .long .LASF180
+ 26958 0801 14 .sleb128 20
+ 26959 0802 0E .uleb128 0xe
+ 26960 0803 00000000 .long .LASF181
+ 26961 0807 15 .sleb128 21
+ 26962 0808 0E .uleb128 0xe
+ 26963 0809 00000000 .long .LASF182
+
GAS LISTING /tmp/ccMa7HLZ.s page 793
+
+
+ 26964 080d 16 .sleb128 22
+ 26965 080e 0E .uleb128 0xe
+ 26966 080f 00000000 .long .LASF183
+ 26967 0813 17 .sleb128 23
+ 26968 0814 0E .uleb128 0xe
+ 26969 0815 00000000 .long .LASF184
+ 26970 0819 18 .sleb128 24
+ 26971 081a 0E .uleb128 0xe
+ 26972 081b 00000000 .long .LASF185
+ 26973 081f 19 .sleb128 25
+ 26974 0820 0E .uleb128 0xe
+ 26975 0821 00000000 .long .LASF186
+ 26976 0825 1A .sleb128 26
+ 26977 0826 0E .uleb128 0xe
+ 26978 0827 00000000 .long .LASF187
+ 26979 082b 1B .sleb128 27
+ 26980 082c 0E .uleb128 0xe
+ 26981 082d 00000000 .long .LASF188
+ 26982 0831 1C .sleb128 28
+ 26983 0832 0E .uleb128 0xe
+ 26984 0833 00000000 .long .LASF189
+ 26985 0837 1D .sleb128 29
+ 26986 0838 0E .uleb128 0xe
+ 26987 0839 00000000 .long .LASF190
+ 26988 083d 1E .sleb128 30
+ 26989 083e 0E .uleb128 0xe
+ 26990 083f 00000000 .long .LASF191
+ 26991 0843 1F .sleb128 31
+ 26992 0844 0E .uleb128 0xe
+ 26993 0845 00000000 .long .LASF192
+ 26994 0849 20 .sleb128 32
+ 26995 084a 0E .uleb128 0xe
+ 26996 084b 00000000 .long .LASF193
+ 26997 084f 21 .sleb128 33
+ 26998 0850 0E .uleb128 0xe
+ 26999 0851 00000000 .long .LASF194
+ 27000 0855 22 .sleb128 34
+ 27001 0856 0E .uleb128 0xe
+ 27002 0857 00000000 .long .LASF195
+ 27003 085b 23 .sleb128 35
+ 27004 085c 0E .uleb128 0xe
+ 27005 085d 00000000 .long .LASF196
+ 27006 0861 24 .sleb128 36
+ 27007 0862 0E .uleb128 0xe
+ 27008 0863 00000000 .long .LASF197
+ 27009 0867 25 .sleb128 37
+ 27010 0868 0E .uleb128 0xe
+ 27011 0869 00000000 .long .LASF198
+ 27012 086d 26 .sleb128 38
+ 27013 086e 0E .uleb128 0xe
+ 27014 086f 00000000 .long .LASF199
+ 27015 0873 27 .sleb128 39
+ 27016 0874 0E .uleb128 0xe
+ 27017 0875 00000000 .long .LASF200
+ 27018 0879 28 .sleb128 40
+ 27019 087a 0E .uleb128 0xe
+ 27020 087b 00000000 .long .LASF201
+
GAS LISTING /tmp/ccMa7HLZ.s page 794
+
+
+ 27021 087f 29 .sleb128 41
+ 27022 0880 0E .uleb128 0xe
+ 27023 0881 00000000 .long .LASF202
+ 27024 0885 2A .sleb128 42
+ 27025 0886 0E .uleb128 0xe
+ 27026 0887 00000000 .long .LASF203
+ 27027 088b 2B .sleb128 43
+ 27028 088c 0E .uleb128 0xe
+ 27029 088d 00000000 .long .LASF204
+ 27030 0891 2C .sleb128 44
+ 27031 0892 0E .uleb128 0xe
+ 27032 0893 00000000 .long .LASF205
+ 27033 0897 2D .sleb128 45
+ 27034 0898 0E .uleb128 0xe
+ 27035 0899 00000000 .long .LASF206
+ 27036 089d 2E .sleb128 46
+ 27037 089e 0E .uleb128 0xe
+ 27038 089f 00000000 .long .LASF207
+ 27039 08a3 2F .sleb128 47
+ 27040 08a4 0E .uleb128 0xe
+ 27041 08a5 00000000 .long .LASF208
+ 27042 08a9 30 .sleb128 48
+ 27043 08aa 0E .uleb128 0xe
+ 27044 08ab 00000000 .long .LASF209
+ 27045 08af 31 .sleb128 49
+ 27046 08b0 0E .uleb128 0xe
+ 27047 08b1 00000000 .long .LASF210
+ 27048 08b5 32 .sleb128 50
+ 27049 08b6 0E .uleb128 0xe
+ 27050 08b7 00000000 .long .LASF211
+ 27051 08bb 33 .sleb128 51
+ 27052 08bc 0E .uleb128 0xe
+ 27053 08bd 00000000 .long .LASF212
+ 27054 08c1 34 .sleb128 52
+ 27055 08c2 0E .uleb128 0xe
+ 27056 08c3 00000000 .long .LASF213
+ 27057 08c7 35 .sleb128 53
+ 27058 08c8 0E .uleb128 0xe
+ 27059 08c9 00000000 .long .LASF214
+ 27060 08cd 36 .sleb128 54
+ 27061 08ce 0E .uleb128 0xe
+ 27062 08cf 00000000 .long .LASF215
+ 27063 08d3 37 .sleb128 55
+ 27064 08d4 0E .uleb128 0xe
+ 27065 08d5 00000000 .long .LASF216
+ 27066 08d9 38 .sleb128 56
+ 27067 08da 0E .uleb128 0xe
+ 27068 08db 00000000 .long .LASF217
+ 27069 08df 39 .sleb128 57
+ 27070 08e0 0E .uleb128 0xe
+ 27071 08e1 00000000 .long .LASF218
+ 27072 08e5 3A .sleb128 58
+ 27073 08e6 0E .uleb128 0xe
+ 27074 08e7 00000000 .long .LASF219
+ 27075 08eb 3A .sleb128 58
+ 27076 08ec 0E .uleb128 0xe
+ 27077 08ed 00000000 .long .LASF220
+
GAS LISTING /tmp/ccMa7HLZ.s page 795
+
+
+ 27078 08f1 3B .sleb128 59
+ 27079 08f2 0E .uleb128 0xe
+ 27080 08f3 00000000 .long .LASF221
+ 27081 08f7 3C .sleb128 60
+ 27082 08f8 0E .uleb128 0xe
+ 27083 08f9 00000000 .long .LASF222
+ 27084 08fd 3D .sleb128 61
+ 27085 08fe 0E .uleb128 0xe
+ 27086 08ff 00000000 .long .LASF223
+ 27087 0903 3E .sleb128 62
+ 27088 0904 0E .uleb128 0xe
+ 27089 0905 00000000 .long .LASF224
+ 27090 0909 3F .sleb128 63
+ 27091 090a 0E .uleb128 0xe
+ 27092 090b 00000000 .long .LASF225
+ 27093 090f C000 .sleb128 64
+ 27094 0911 0E .uleb128 0xe
+ 27095 0912 00000000 .long .LASF226
+ 27096 0916 C100 .sleb128 65
+ 27097 0918 0E .uleb128 0xe
+ 27098 0919 00000000 .long .LASF227
+ 27099 091d C200 .sleb128 66
+ 27100 091f 0E .uleb128 0xe
+ 27101 0920 00000000 .long .LASF228
+ 27102 0924 C300 .sleb128 67
+ 27103 0926 0E .uleb128 0xe
+ 27104 0927 00000000 .long .LASF229
+ 27105 092b C400 .sleb128 68
+ 27106 092d 00 .byte 0x0
+ 27107 092e 1E .uleb128 0x1e
+ 27108 092f 00000000 .long .LASF230
+ 27109 0933 04 .byte 0x4
+ 27110 0934 0A .byte 0xa
+ 27111 0935 0A01 .value 0x10a
+ 27112 0937 2D0A0000 .long 0xa2d
+ 27113 093b 0E .uleb128 0xe
+ 27114 093c 00000000 .long .LASF231
+ 27115 0940 00 .sleb128 0
+ 27116 0941 0E .uleb128 0xe
+ 27117 0942 00000000 .long .LASF232
+ 27118 0946 3D .sleb128 61
+ 27119 0947 0E .uleb128 0xe
+ 27120 0948 00000000 .long .LASF233
+ 27121 094c 3E .sleb128 62
+ 27122 094d 0E .uleb128 0xe
+ 27123 094e 00000000 .long .LASF234
+ 27124 0952 3F .sleb128 63
+ 27125 0953 0E .uleb128 0xe
+ 27126 0954 00000000 .long .LASF235
+ 27127 0958 C000 .sleb128 64
+ 27128 095a 0E .uleb128 0xe
+ 27129 095b 00000000 .long .LASF236
+ 27130 095f C100 .sleb128 65
+ 27131 0961 0E .uleb128 0xe
+ 27132 0962 00000000 .long .LASF237
+ 27133 0966 C200 .sleb128 66
+ 27134 0968 0E .uleb128 0xe
+
GAS LISTING /tmp/ccMa7HLZ.s page 796
+
+
+ 27135 0969 00000000 .long .LASF238
+ 27136 096d C300 .sleb128 67
+ 27137 096f 0E .uleb128 0xe
+ 27138 0970 00000000 .long .LASF239
+ 27139 0974 C400 .sleb128 68
+ 27140 0976 0E .uleb128 0xe
+ 27141 0977 00000000 .long .LASF240
+ 27142 097b C500 .sleb128 69
+ 27143 097d 0E .uleb128 0xe
+ 27144 097e 00000000 .long .LASF241
+ 27145 0982 C600 .sleb128 70
+ 27146 0984 0E .uleb128 0xe
+ 27147 0985 00000000 .long .LASF242
+ 27148 0989 C700 .sleb128 71
+ 27149 098b 0E .uleb128 0xe
+ 27150 098c 00000000 .long .LASF243
+ 27151 0990 C800 .sleb128 72
+ 27152 0992 0E .uleb128 0xe
+ 27153 0993 00000000 .long .LASF244
+ 27154 0997 C900 .sleb128 73
+ 27155 0999 0E .uleb128 0xe
+ 27156 099a 00000000 .long .LASF245
+ 27157 099e CA00 .sleb128 74
+ 27158 09a0 0E .uleb128 0xe
+ 27159 09a1 00000000 .long .LASF246
+ 27160 09a5 CB00 .sleb128 75
+ 27161 09a7 0E .uleb128 0xe
+ 27162 09a8 00000000 .long .LASF247
+ 27163 09ac CC00 .sleb128 76
+ 27164 09ae 0E .uleb128 0xe
+ 27165 09af 00000000 .long .LASF248
+ 27166 09b3 CD00 .sleb128 77
+ 27167 09b5 0E .uleb128 0xe
+ 27168 09b6 00000000 .long .LASF249
+ 27169 09ba CE00 .sleb128 78
+ 27170 09bc 0E .uleb128 0xe
+ 27171 09bd 00000000 .long .LASF250
+ 27172 09c1 CF00 .sleb128 79
+ 27173 09c3 0E .uleb128 0xe
+ 27174 09c4 00000000 .long .LASF251
+ 27175 09c8 D000 .sleb128 80
+ 27176 09ca 0E .uleb128 0xe
+ 27177 09cb 00000000 .long .LASF252
+ 27178 09cf D100 .sleb128 81
+ 27179 09d1 0E .uleb128 0xe
+ 27180 09d2 00000000 .long .LASF253
+ 27181 09d6 D100 .sleb128 81
+ 27182 09d8 0E .uleb128 0xe
+ 27183 09d9 00000000 .long .LASF254
+ 27184 09dd D200 .sleb128 82
+ 27185 09df 0E .uleb128 0xe
+ 27186 09e0 00000000 .long .LASF255
+ 27187 09e4 D300 .sleb128 83
+ 27188 09e6 0E .uleb128 0xe
+ 27189 09e7 00000000 .long .LASF256
+ 27190 09eb D400 .sleb128 84
+ 27191 09ed 0E .uleb128 0xe
+
GAS LISTING /tmp/ccMa7HLZ.s page 797
+
+
+ 27192 09ee 00000000 .long .LASF257
+ 27193 09f2 D500 .sleb128 85
+ 27194 09f4 0E .uleb128 0xe
+ 27195 09f5 00000000 .long .LASF258
+ 27196 09f9 D600 .sleb128 86
+ 27197 09fb 0E .uleb128 0xe
+ 27198 09fc 00000000 .long .LASF259
+ 27199 0a00 D700 .sleb128 87
+ 27200 0a02 0E .uleb128 0xe
+ 27201 0a03 00000000 .long .LASF260
+ 27202 0a07 D800 .sleb128 88
+ 27203 0a09 0E .uleb128 0xe
+ 27204 0a0a 00000000 .long .LASF261
+ 27205 0a0e D900 .sleb128 89
+ 27206 0a10 0E .uleb128 0xe
+ 27207 0a11 00000000 .long .LASF262
+ 27208 0a15 DA00 .sleb128 90
+ 27209 0a17 0E .uleb128 0xe
+ 27210 0a18 00000000 .long .LASF263
+ 27211 0a1c DB00 .sleb128 91
+ 27212 0a1e 0E .uleb128 0xe
+ 27213 0a1f 00000000 .long .LASF264
+ 27214 0a23 DC00 .sleb128 92
+ 27215 0a25 0E .uleb128 0xe
+ 27216 0a26 00000000 .long .LASF265
+ 27217 0a2a DD00 .sleb128 93
+ 27218 0a2c 00 .byte 0x0
+ 27219 0a2d 1E .uleb128 0x1e
+ 27220 0a2e 00000000 .long .LASF266
+ 27221 0a32 04 .byte 0x4
+ 27222 0a33 0A .byte 0xa
+ 27223 0a34 3401 .value 0x134
+ 27224 0a36 6D0B0000 .long 0xb6d
+ 27225 0a3a 0E .uleb128 0xe
+ 27226 0a3b 00000000 .long .LASF267
+ 27227 0a3f 00 .sleb128 0
+ 27228 0a40 0E .uleb128 0xe
+ 27229 0a41 00000000 .long .LASF268
+ 27230 0a45 01 .sleb128 1
+ 27231 0a46 0E .uleb128 0xe
+ 27232 0a47 00000000 .long .LASF269
+ 27233 0a4b 02 .sleb128 2
+ 27234 0a4c 0E .uleb128 0xe
+ 27235 0a4d 00000000 .long .LASF270
+ 27236 0a51 03 .sleb128 3
+ 27237 0a52 0E .uleb128 0xe
+ 27238 0a53 00000000 .long .LASF271
+ 27239 0a57 04 .sleb128 4
+ 27240 0a58 0E .uleb128 0xe
+ 27241 0a59 00000000 .long .LASF272
+ 27242 0a5d 05 .sleb128 5
+ 27243 0a5e 0E .uleb128 0xe
+ 27244 0a5f 00000000 .long .LASF273
+ 27245 0a63 06 .sleb128 6
+ 27246 0a64 0E .uleb128 0xe
+ 27247 0a65 00000000 .long .LASF274
+ 27248 0a69 07 .sleb128 7
+
GAS LISTING /tmp/ccMa7HLZ.s page 798
+
+
+ 27249 0a6a 0E .uleb128 0xe
+ 27250 0a6b 00000000 .long .LASF275
+ 27251 0a6f 08 .sleb128 8
+ 27252 0a70 0E .uleb128 0xe
+ 27253 0a71 00000000 .long .LASF276
+ 27254 0a75 09 .sleb128 9
+ 27255 0a76 0E .uleb128 0xe
+ 27256 0a77 00000000 .long .LASF277
+ 27257 0a7b 0A .sleb128 10
+ 27258 0a7c 0E .uleb128 0xe
+ 27259 0a7d 00000000 .long .LASF278
+ 27260 0a81 0B .sleb128 11
+ 27261 0a82 0E .uleb128 0xe
+ 27262 0a83 00000000 .long .LASF279
+ 27263 0a87 0C .sleb128 12
+ 27264 0a88 0E .uleb128 0xe
+ 27265 0a89 00000000 .long .LASF280
+ 27266 0a8d 0D .sleb128 13
+ 27267 0a8e 0E .uleb128 0xe
+ 27268 0a8f 00000000 .long .LASF281
+ 27269 0a93 0E .sleb128 14
+ 27270 0a94 0E .uleb128 0xe
+ 27271 0a95 00000000 .long .LASF282
+ 27272 0a99 0F .sleb128 15
+ 27273 0a9a 0E .uleb128 0xe
+ 27274 0a9b 00000000 .long .LASF283
+ 27275 0a9f 10 .sleb128 16
+ 27276 0aa0 0E .uleb128 0xe
+ 27277 0aa1 00000000 .long .LASF284
+ 27278 0aa5 11 .sleb128 17
+ 27279 0aa6 0E .uleb128 0xe
+ 27280 0aa7 00000000 .long .LASF285
+ 27281 0aab 12 .sleb128 18
+ 27282 0aac 0E .uleb128 0xe
+ 27283 0aad 00000000 .long .LASF286
+ 27284 0ab1 13 .sleb128 19
+ 27285 0ab2 0E .uleb128 0xe
+ 27286 0ab3 00000000 .long .LASF287
+ 27287 0ab7 14 .sleb128 20
+ 27288 0ab8 0E .uleb128 0xe
+ 27289 0ab9 00000000 .long .LASF288
+ 27290 0abd 15 .sleb128 21
+ 27291 0abe 0E .uleb128 0xe
+ 27292 0abf 00000000 .long .LASF289
+ 27293 0ac3 16 .sleb128 22
+ 27294 0ac4 0E .uleb128 0xe
+ 27295 0ac5 00000000 .long .LASF290
+ 27296 0ac9 17 .sleb128 23
+ 27297 0aca 0E .uleb128 0xe
+ 27298 0acb 00000000 .long .LASF291
+ 27299 0acf 18 .sleb128 24
+ 27300 0ad0 0E .uleb128 0xe
+ 27301 0ad1 00000000 .long .LASF292
+ 27302 0ad5 19 .sleb128 25
+ 27303 0ad6 0E .uleb128 0xe
+ 27304 0ad7 00000000 .long .LASF293
+ 27305 0adb 1A .sleb128 26
+
GAS LISTING /tmp/ccMa7HLZ.s page 799
+
+
+ 27306 0adc 0E .uleb128 0xe
+ 27307 0add 00000000 .long .LASF294
+ 27308 0ae1 1B .sleb128 27
+ 27309 0ae2 0E .uleb128 0xe
+ 27310 0ae3 00000000 .long .LASF295
+ 27311 0ae7 1C .sleb128 28
+ 27312 0ae8 0E .uleb128 0xe
+ 27313 0ae9 00000000 .long .LASF296
+ 27314 0aed 1D .sleb128 29
+ 27315 0aee 0E .uleb128 0xe
+ 27316 0aef 00000000 .long .LASF297
+ 27317 0af3 1E .sleb128 30
+ 27318 0af4 0E .uleb128 0xe
+ 27319 0af5 00000000 .long .LASF298
+ 27320 0af9 1F .sleb128 31
+ 27321 0afa 0E .uleb128 0xe
+ 27322 0afb 00000000 .long .LASF299
+ 27323 0aff 20 .sleb128 32
+ 27324 0b00 0E .uleb128 0xe
+ 27325 0b01 00000000 .long .LASF300
+ 27326 0b05 21 .sleb128 33
+ 27327 0b06 0E .uleb128 0xe
+ 27328 0b07 00000000 .long .LASF301
+ 27329 0b0b 22 .sleb128 34
+ 27330 0b0c 0E .uleb128 0xe
+ 27331 0b0d 00000000 .long .LASF302
+ 27332 0b11 23 .sleb128 35
+ 27333 0b12 0E .uleb128 0xe
+ 27334 0b13 00000000 .long .LASF303
+ 27335 0b17 24 .sleb128 36
+ 27336 0b18 0E .uleb128 0xe
+ 27337 0b19 00000000 .long .LASF304
+ 27338 0b1d 25 .sleb128 37
+ 27339 0b1e 0E .uleb128 0xe
+ 27340 0b1f 00000000 .long .LASF305
+ 27341 0b23 26 .sleb128 38
+ 27342 0b24 0E .uleb128 0xe
+ 27343 0b25 00000000 .long .LASF306
+ 27344 0b29 27 .sleb128 39
+ 27345 0b2a 0E .uleb128 0xe
+ 27346 0b2b 00000000 .long .LASF307
+ 27347 0b2f 28 .sleb128 40
+ 27348 0b30 0E .uleb128 0xe
+ 27349 0b31 00000000 .long .LASF308
+ 27350 0b35 29 .sleb128 41
+ 27351 0b36 0E .uleb128 0xe
+ 27352 0b37 00000000 .long .LASF309
+ 27353 0b3b 29 .sleb128 41
+ 27354 0b3c 0E .uleb128 0xe
+ 27355 0b3d 00000000 .long .LASF310
+ 27356 0b41 2A .sleb128 42
+ 27357 0b42 0E .uleb128 0xe
+ 27358 0b43 00000000 .long .LASF311
+ 27359 0b47 2B .sleb128 43
+ 27360 0b48 0E .uleb128 0xe
+ 27361 0b49 00000000 .long .LASF312
+ 27362 0b4d 2C .sleb128 44
+
GAS LISTING /tmp/ccMa7HLZ.s page 800
+
+
+ 27363 0b4e 0E .uleb128 0xe
+ 27364 0b4f 00000000 .long .LASF313
+ 27365 0b53 2D .sleb128 45
+ 27366 0b54 0E .uleb128 0xe
+ 27367 0b55 00000000 .long .LASF314
+ 27368 0b59 2E .sleb128 46
+ 27369 0b5a 0E .uleb128 0xe
+ 27370 0b5b 00000000 .long .LASF315
+ 27371 0b5f 2F .sleb128 47
+ 27372 0b60 0E .uleb128 0xe
+ 27373 0b61 00000000 .long .LASF316
+ 27374 0b65 30 .sleb128 48
+ 27375 0b66 0E .uleb128 0xe
+ 27376 0b67 00000000 .long .LASF317
+ 27377 0b6b 31 .sleb128 49
+ 27378 0b6c 00 .byte 0x0
+ 27379 0b6d 1F .uleb128 0x1f
+ 27380 0b6e 00000000 .long .LASF373
+ 27381 0b72 01 .byte 0x1
+ 27382 0b73 38 .byte 0x38
+ 27383 0b74 01 .byte 0x1
+ 27384 0b75 62000000 .long 0x62
+ 27385 0b79 00000000 .quad .LFB509
+ 27385 00000000
+ 27386 0b81 00000000 .quad .LFE509
+ 27386 00000000
+ 27387 0b89 00000000 .long .LLST0
+ 27388 0b8d AB0B0000 .long 0xbab
+ 27389 0b91 20 .uleb128 0x20
+ 27390 0b92 6900 .string "i"
+ 27391 0b94 01 .byte 0x1
+ 27392 0b95 38 .byte 0x38
+ 27393 0b96 62000000 .long 0x62
+ 27394 0b9a 02 .byte 0x2
+ 27395 0b9b 91 .byte 0x91
+ 27396 0b9c 64 .sleb128 -28
+ 27397 0b9d 21 .uleb128 0x21
+ 27398 0b9e 72746E00 .string "rtn"
+ 27399 0ba2 01 .byte 0x1
+ 27400 0ba3 3A .byte 0x3a
+ 27401 0ba4 62000000 .long 0x62
+ 27402 0ba8 01 .byte 0x1
+ 27403 0ba9 53 .byte 0x53
+ 27404 0baa 00 .byte 0x0
+ 27405 0bab 22 .uleb128 0x22
+ 27406 0bac 00000000 .long .LASF318
+ 27407 0bb0 02 .byte 0x2
+ 27408 0bb1 79 .byte 0x79
+ 27409 0bb2 01 .byte 0x1
+ 27410 0bb3 B1010000 .long 0x1b1
+ 27411 0bb7 03 .byte 0x3
+ 27412 0bb8 D10B0000 .long 0xbd1
+ 27413 0bbc 23 .uleb128 0x23
+ 27414 0bbd 61696E00 .string "ain"
+ 27415 0bc1 02 .byte 0x2
+ 27416 0bc2 79 .byte 0x79
+ 27417 0bc3 D8000000 .long 0xd8
+
GAS LISTING /tmp/ccMa7HLZ.s page 801
+
+
+ 27418 0bc7 24 .uleb128 0x24
+ 27419 0bc8 7500 .string "u"
+ 27420 0bca 02 .byte 0x2
+ 27421 0bcb 85 .byte 0x85
+ 27422 0bcc 27050000 .long 0x527
+ 27423 0bd0 00 .byte 0x0
+ 27424 0bd1 25 .uleb128 0x25
+ 27425 0bd2 00000000 .long .LASF319
+ 27426 0bd6 02 .byte 0x2
+ 27427 0bd7 8606 .value 0x686
+ 27428 0bd9 01 .byte 0x1
+ 27429 0bda B1010000 .long 0x1b1
+ 27430 0bde 03 .byte 0x3
+ 27431 0bdf 500C0000 .long 0xc50
+ 27432 0be3 26 .uleb128 0x26
+ 27433 0be4 00000000 .long .LASF66
+ 27434 0be8 02 .byte 0x2
+ 27435 0be9 8606 .value 0x686
+ 27436 0beb B1010000 .long 0x1b1
+ 27437 0bef 26 .uleb128 0x26
+ 27438 0bf0 00000000 .long .LASF320
+ 27439 0bf4 02 .byte 0x2
+ 27440 0bf5 8606 .value 0x686
+ 27441 0bf7 A9000000 .long 0xa9
+ 27442 0bfb 27 .uleb128 0x27
+ 27443 0bfc 00000000 .long .LASF321
+ 27444 0c00 02 .byte 0x2
+ 27445 0c01 8E06 .value 0x68e
+ 27446 0c03 B1010000 .long 0x1b1
+ 27447 0c07 28 .uleb128 0x28
+ 27448 0c08 746D7000 .string "tmp"
+ 27449 0c0c 02 .byte 0x2
+ 27450 0c0d 8F06 .value 0x68f
+ 27451 0c0f B1010000 .long 0x1b1
+ 27452 0c13 29 .uleb128 0x29
+ 27453 0c14 230C0000 .long 0xc23
+ 27454 0c18 28 .uleb128 0x28
+ 27455 0c19 7600 .string "v"
+ 27456 0c1b 02 .byte 0x2
+ 27457 0c1c 9306 .value 0x693
+ 27458 0c1e 27050000 .long 0x527
+ 27459 0c22 00 .byte 0x0
+ 27460 0c23 29 .uleb128 0x29
+ 27461 0c24 330C0000 .long 0xc33
+ 27462 0c28 28 .uleb128 0x28
+ 27463 0c29 7600 .string "v"
+ 27464 0c2b 02 .byte 0x2
+ 27465 0c2c 9506 .value 0x695
+ 27466 0c2e 27050000 .long 0x527
+ 27467 0c32 00 .byte 0x0
+ 27468 0c33 29 .uleb128 0x29
+ 27469 0c34 430C0000 .long 0xc43
+ 27470 0c38 28 .uleb128 0x28
+ 27471 0c39 7600 .string "v"
+ 27472 0c3b 02 .byte 0x2
+ 27473 0c3c 9706 .value 0x697
+ 27474 0c3e 27050000 .long 0x527
+
GAS LISTING /tmp/ccMa7HLZ.s page 802
+
+
+ 27475 0c42 00 .byte 0x0
+ 27476 0c43 2A .uleb128 0x2a
+ 27477 0c44 28 .uleb128 0x28
+ 27478 0c45 7600 .string "v"
+ 27479 0c47 02 .byte 0x2
+ 27480 0c48 9906 .value 0x699
+ 27481 0c4a 27050000 .long 0x527
+ 27482 0c4e 00 .byte 0x0
+ 27483 0c4f 00 .byte 0x0
+ 27484 0c50 25 .uleb128 0x25
+ 27485 0c51 00000000 .long .LASF322
+ 27486 0c55 02 .byte 0x2
+ 27487 0c56 0402 .value 0x204
+ 27488 0c58 01 .byte 0x1
+ 27489 0c59 B1010000 .long 0x1b1
+ 27490 0c5d 03 .byte 0x3
+ 27491 0c5e 910C0000 .long 0xc91
+ 27492 0c62 26 .uleb128 0x26
+ 27493 0c63 00000000 .long .LASF66
+ 27494 0c67 02 .byte 0x2
+ 27495 0c68 0402 .value 0x204
+ 27496 0c6a B1010000 .long 0x1b1
+ 27497 0c6e 26 .uleb128 0x26
+ 27498 0c6f 00000000 .long .LASF323
+ 27499 0c73 02 .byte 0x2
+ 27500 0c74 0402 .value 0x204
+ 27501 0c76 07040000 .long 0x407
+ 27502 0c7a 26 .uleb128 0x26
+ 27503 0c7b 00000000 .long .LASF324
+ 27504 0c7f 02 .byte 0x2
+ 27505 0c80 0402 .value 0x204
+ 27506 0c82 A9000000 .long 0xa9
+ 27507 0c86 28 .uleb128 0x28
+ 27508 0c87 7500 .string "u"
+ 27509 0c89 02 .byte 0x2
+ 27510 0c8a 0902 .value 0x209
+ 27511 0c8c 27050000 .long 0x527
+ 27512 0c90 00 .byte 0x0
+ 27513 0c91 25 .uleb128 0x25
+ 27514 0c92 00000000 .long .LASF325
+ 27515 0c96 02 .byte 0x2
+ 27516 0c97 7B03 .value 0x37b
+ 27517 0c99 01 .byte 0x1
+ 27518 0c9a B1010000 .long 0x1b1
+ 27519 0c9e 03 .byte 0x3
+ 27520 0c9f B00C0000 .long 0xcb0
+ 27521 0ca3 26 .uleb128 0x26
+ 27522 0ca4 00000000 .long .LASF66
+ 27523 0ca8 02 .byte 0x2
+ 27524 0ca9 7B03 .value 0x37b
+ 27525 0cab B1010000 .long 0x1b1
+ 27526 0caf 00 .byte 0x0
+ 27527 0cb0 25 .uleb128 0x25
+ 27528 0cb1 00000000 .long .LASF326
+ 27529 0cb5 02 .byte 0x2
+ 27530 0cb6 4E03 .value 0x34e
+ 27531 0cb8 01 .byte 0x1
+
GAS LISTING /tmp/ccMa7HLZ.s page 803
+
+
+ 27532 0cb9 B1010000 .long 0x1b1
+ 27533 0cbd 03 .byte 0x3
+ 27534 0cbe 140D0000 .long 0xd14
+ 27535 0cc2 26 .uleb128 0x26
+ 27536 0cc3 00000000 .long .LASF66
+ 27537 0cc7 02 .byte 0x2
+ 27538 0cc8 4E03 .value 0x34e
+ 27539 0cca B1010000 .long 0x1b1
+ 27540 0cce 2B .uleb128 0x2b
+ 27541 0ccf 626F7800 .string "box"
+ 27542 0cd3 02 .byte 0x2
+ 27543 0cd4 4E03 .value 0x34e
+ 27544 0cd6 140D0000 .long 0xd14
+ 27545 0cda 28 .uleb128 0x28
+ 27546 0cdb 6C6F00 .string "lo"
+ 27547 0cde 02 .byte 0x2
+ 27548 0cdf 5003 .value 0x350
+ 27549 0ce1 B1010000 .long 0x1b1
+ 27550 0ce5 28 .uleb128 0x28
+ 27551 0ce6 686900 .string "hi"
+ 27552 0ce9 02 .byte 0x2
+ 27553 0cea 5003 .value 0x350
+ 27554 0cec B1010000 .long 0x1b1
+ 27555 0cf0 28 .uleb128 0x28
+ 27556 0cf1 746D7000 .string "tmp"
+ 27557 0cf5 02 .byte 0x2
+ 27558 0cf6 5003 .value 0x350
+ 27559 0cf8 B1010000 .long 0x1b1
+ 27560 0cfc 28 .uleb128 0x28
+ 27561 0cfd 6F757400 .string "out"
+ 27562 0d01 02 .byte 0x2
+ 27563 0d02 5003 .value 0x350
+ 27564 0d04 B1010000 .long 0x1b1
+ 27565 0d08 28 .uleb128 0x28
+ 27566 0d09 697800 .string "ix"
+ 27567 0d0c 02 .byte 0x2
+ 27568 0d0d 5103 .value 0x351
+ 27569 0d0f 6D000000 .long 0x6d
+ 27570 0d13 00 .byte 0x0
+ 27571 0d14 07 .uleb128 0x7
+ 27572 0d15 08 .byte 0x8
+ 27573 0d16 1A0D0000 .long 0xd1a
+ 27574 0d1a 06 .uleb128 0x6
+ 27575 0d1b B1010000 .long 0x1b1
+ 27576 0d1f 22 .uleb128 0x22
+ 27577 0d20 00000000 .long .LASF327
+ 27578 0d24 02 .byte 0x2
+ 27579 0d25 CA .byte 0xca
+ 27580 0d26 01 .byte 0x1
+ 27581 0d27 B1010000 .long 0x1b1
+ 27582 0d2b 03 .byte 0x3
+ 27583 0d2c 450D0000 .long 0xd45
+ 27584 0d30 23 .uleb128 0x23
+ 27585 0d31 763100 .string "v1"
+ 27586 0d34 02 .byte 0x2
+ 27587 0d35 CA .byte 0xca
+ 27588 0d36 B1010000 .long 0x1b1
+
GAS LISTING /tmp/ccMa7HLZ.s page 804
+
+
+ 27589 0d3a 23 .uleb128 0x23
+ 27590 0d3b 763200 .string "v2"
+ 27591 0d3e 02 .byte 0x2
+ 27592 0d3f CA .byte 0xca
+ 27593 0d40 B1010000 .long 0x1b1
+ 27594 0d44 00 .byte 0x0
+ 27595 0d45 25 .uleb128 0x25
+ 27596 0d46 00000000 .long .LASF328
+ 27597 0d4a 02 .byte 0x2
+ 27598 0d4b 5601 .value 0x156
+ 27599 0d4d 01 .byte 0x1
+ 27600 0d4e B1010000 .long 0x1b1
+ 27601 0d52 03 .byte 0x3
+ 27602 0d53 6E0D0000 .long 0xd6e
+ 27603 0d57 2B .uleb128 0x2b
+ 27604 0d58 763100 .string "v1"
+ 27605 0d5b 02 .byte 0x2
+ 27606 0d5c 5601 .value 0x156
+ 27607 0d5e B1010000 .long 0x1b1
+ 27608 0d62 2B .uleb128 0x2b
+ 27609 0d63 763200 .string "v2"
+ 27610 0d66 02 .byte 0x2
+ 27611 0d67 5601 .value 0x156
+ 27612 0d69 B1010000 .long 0x1b1
+ 27613 0d6d 00 .byte 0x0
+ 27614 0d6e 25 .uleb128 0x25
+ 27615 0d6f 00000000 .long .LASF329
+ 27616 0d73 02 .byte 0x2
+ 27617 0d74 7101 .value 0x171
+ 27618 0d76 01 .byte 0x1
+ 27619 0d77 B1010000 .long 0x1b1
+ 27620 0d7b 03 .byte 0x3
+ 27621 0d7c C70D0000 .long 0xdc7
+ 27622 0d80 26 .uleb128 0x26
+ 27623 0d81 00000000 .long .LASF330
+ 27624 0d85 02 .byte 0x2
+ 27625 0d86 7101 .value 0x171
+ 27626 0d88 B1010000 .long 0x1b1
+ 27627 0d8c 26 .uleb128 0x26
+ 27628 0d8d 00000000 .long .LASF331
+ 27629 0d91 02 .byte 0x2
+ 27630 0d92 7101 .value 0x171
+ 27631 0d94 B1010000 .long 0x1b1
+ 27632 0d98 28 .uleb128 0x28
+ 27633 0d99 6F757400 .string "out"
+ 27634 0d9d 02 .byte 0x2
+ 27635 0d9e 7901 .value 0x179
+ 27636 0da0 27050000 .long 0x527
+ 27637 0da4 28 .uleb128 0x28
+ 27638 0da5 696E00 .string "in"
+ 27639 0da8 02 .byte 0x2
+ 27640 0da9 7901 .value 0x179
+ 27641 0dab 27050000 .long 0x527
+ 27642 0daf 27 .uleb128 0x27
+ 27643 0db0 00000000 .long .LASF332
+ 27644 0db4 02 .byte 0x2
+ 27645 0db5 7901 .value 0x179
+
GAS LISTING /tmp/ccMa7HLZ.s page 805
+
+
+ 27646 0db7 27050000 .long 0x527
+ 27647 0dbb 28 .uleb128 0x28
+ 27648 0dbc 697800 .string "ix"
+ 27649 0dbf 02 .byte 0x2
+ 27650 0dc0 7A01 .value 0x17a
+ 27651 0dc2 6D000000 .long 0x6d
+ 27652 0dc6 00 .byte 0x0
+ 27653 0dc7 22 .uleb128 0x22
+ 27654 0dc8 00000000 .long .LASF333
+ 27655 0dcc 02 .byte 0x2
+ 27656 0dcd E6 .byte 0xe6
+ 27657 0dce 01 .byte 0x1
+ 27658 0dcf B1010000 .long 0x1b1
+ 27659 0dd3 03 .byte 0x3
+ 27660 0dd4 ED0D0000 .long 0xded
+ 27661 0dd8 23 .uleb128 0x23
+ 27662 0dd9 763100 .string "v1"
+ 27663 0ddc 02 .byte 0x2
+ 27664 0ddd E6 .byte 0xe6
+ 27665 0dde B1010000 .long 0x1b1
+ 27666 0de2 23 .uleb128 0x23
+ 27667 0de3 763200 .string "v2"
+ 27668 0de6 02 .byte 0x2
+ 27669 0de7 E6 .byte 0xe6
+ 27670 0de8 B1010000 .long 0x1b1
+ 27671 0dec 00 .byte 0x0
+ 27672 0ded 25 .uleb128 0x25
+ 27673 0dee 00000000 .long .LASF334
+ 27674 0df2 02 .byte 0x2
+ 27675 0df3 1E01 .value 0x11e
+ 27676 0df5 01 .byte 0x1
+ 27677 0df6 B1010000 .long 0x1b1
+ 27678 0dfa 03 .byte 0x3
+ 27679 0dfb 160E0000 .long 0xe16
+ 27680 0dff 2B .uleb128 0x2b
+ 27681 0e00 763100 .string "v1"
+ 27682 0e03 02 .byte 0x2
+ 27683 0e04 1E01 .value 0x11e
+ 27684 0e06 B1010000 .long 0x1b1
+ 27685 0e0a 2B .uleb128 0x2b
+ 27686 0e0b 763200 .string "v2"
+ 27687 0e0e 02 .byte 0x2
+ 27688 0e0f 1E01 .value 0x11e
+ 27689 0e11 B1010000 .long 0x1b1
+ 27690 0e15 00 .byte 0x0
+ 27691 0e16 25 .uleb128 0x25
+ 27692 0e17 00000000 .long .LASF335
+ 27693 0e1b 02 .byte 0x2
+ 27694 0e1c 9502 .value 0x295
+ 27695 0e1e 01 .byte 0x1
+ 27696 0e1f B1010000 .long 0x1b1
+ 27697 0e23 03 .byte 0x3
+ 27698 0e24 520E0000 .long 0xe52
+ 27699 0e28 26 .uleb128 0x26
+ 27700 0e29 00000000 .long .LASF66
+ 27701 0e2d 02 .byte 0x2
+ 27702 0e2e 9502 .value 0x295
+
GAS LISTING /tmp/ccMa7HLZ.s page 806
+
+
+ 27703 0e30 B1010000 .long 0x1b1
+ 27704 0e34 2C .uleb128 0x2c
+ 27705 0e35 00000000 .long .LASF336
+ 27706 0e39 02 .byte 0x2
+ 27707 0e3a 9702 .value 0x297
+ 27708 0e3c 1A0D0000 .long 0xd1a
+ 27709 0e40 10 .byte 0x10
+ 27710 0e41 01 .byte 0x1
+ 27711 0e42 02 .byte 0x2
+ 27712 0e43 03 .byte 0x3
+ 27713 0e44 00 .byte 0x0
+ 27714 0e45 05 .byte 0x5
+ 27715 0e46 06 .byte 0x6
+ 27716 0e47 07 .byte 0x7
+ 27717 0e48 04 .byte 0x4
+ 27718 0e49 09 .byte 0x9
+ 27719 0e4a 0A .byte 0xa
+ 27720 0e4b 0B .byte 0xb
+ 27721 0e4c 08 .byte 0x8
+ 27722 0e4d 0D .byte 0xd
+ 27723 0e4e 0E .byte 0xe
+ 27724 0e4f 0F .byte 0xf
+ 27725 0e50 0C .byte 0xc
+ 27726 0e51 00 .byte 0x0
+ 27727 0e52 22 .uleb128 0x22
+ 27728 0e53 00000000 .long .LASF337
+ 27729 0e57 02 .byte 0x2
+ 27730 0e58 AE .byte 0xae
+ 27731 0e59 01 .byte 0x1
+ 27732 0e5a B1010000 .long 0x1b1
+ 27733 0e5e 03 .byte 0x3
+ 27734 0e5f 780E0000 .long 0xe78
+ 27735 0e63 23 .uleb128 0x23
+ 27736 0e64 763100 .string "v1"
+ 27737 0e67 02 .byte 0x2
+ 27738 0e68 AE .byte 0xae
+ 27739 0e69 B1010000 .long 0x1b1
+ 27740 0e6d 23 .uleb128 0x23
+ 27741 0e6e 763200 .string "v2"
+ 27742 0e71 02 .byte 0x2
+ 27743 0e72 AE .byte 0xae
+ 27744 0e73 B1010000 .long 0x1b1
+ 27745 0e77 00 .byte 0x0
+ 27746 0e78 25 .uleb128 0x25
+ 27747 0e79 00000000 .long .LASF338
+ 27748 0e7d 02 .byte 0x2
+ 27749 0e7e 4605 .value 0x546
+ 27750 0e80 01 .byte 0x1
+ 27751 0e81 B1010000 .long 0x1b1
+ 27752 0e85 03 .byte 0x3
+ 27753 0e86 A30E0000 .long 0xea3
+ 27754 0e8a 26 .uleb128 0x26
+ 27755 0e8b 00000000 .long .LASF66
+ 27756 0e8f 02 .byte 0x2
+ 27757 0e90 4605 .value 0x546
+ 27758 0e92 B1010000 .long 0x1b1
+ 27759 0e96 27 .uleb128 0x27
+
GAS LISTING /tmp/ccMa7HLZ.s page 807
+
+
+ 27760 0e97 00000000 .long .LASF339
+ 27761 0e9b 02 .byte 0x2
+ 27762 0e9c 4B05 .value 0x54b
+ 27763 0e9e 27050000 .long 0x527
+ 27764 0ea2 00 .byte 0x0
+ 27765 0ea3 25 .uleb128 0x25
+ 27766 0ea4 00000000 .long .LASF340
+ 27767 0ea8 02 .byte 0x2
+ 27768 0ea9 1A06 .value 0x61a
+ 27769 0eab 01 .byte 0x1
+ 27770 0eac B1010000 .long 0x1b1
+ 27771 0eb0 03 .byte 0x3
+ 27772 0eb1 CE0E0000 .long 0xece
+ 27773 0eb5 26 .uleb128 0x26
+ 27774 0eb6 00000000 .long .LASF66
+ 27775 0eba 02 .byte 0x2
+ 27776 0ebb 1A06 .value 0x61a
+ 27777 0ebd B1010000 .long 0x1b1
+ 27778 0ec1 27 .uleb128 0x27
+ 27779 0ec2 00000000 .long .LASF341
+ 27780 0ec6 02 .byte 0x2
+ 27781 0ec7 1D06 .value 0x61d
+ 27782 0ec9 B1010000 .long 0x1b1
+ 27783 0ecd 00 .byte 0x0
+ 27784 0ece 25 .uleb128 0x25
+ 27785 0ecf 00000000 .long .LASF342
+ 27786 0ed3 02 .byte 0x2
+ 27787 0ed4 FA04 .value 0x4fa
+ 27788 0ed6 01 .byte 0x1
+ 27789 0ed7 B1010000 .long 0x1b1
+ 27790 0edb 03 .byte 0x3
+ 27791 0edc F90E0000 .long 0xef9
+ 27792 0ee0 26 .uleb128 0x26
+ 27793 0ee1 00000000 .long .LASF66
+ 27794 0ee5 02 .byte 0x2
+ 27795 0ee6 FA04 .value 0x4fa
+ 27796 0ee8 B1010000 .long 0x1b1
+ 27797 0eec 27 .uleb128 0x27
+ 27798 0eed 00000000 .long .LASF339
+ 27799 0ef1 02 .byte 0x2
+ 27800 0ef2 0005 .value 0x500
+ 27801 0ef4 27050000 .long 0x527
+ 27802 0ef8 00 .byte 0x0
+ 27803 0ef9 2D .uleb128 0x2d
+ 27804 0efa 00000000 .long .LASF351
+ 27805 0efe 02 .byte 0x2
+ 27806 0eff C206 .value 0x6c2
+ 27807 0f01 01 .byte 0x1
+ 27808 0f02 00000000 .quad .LFB563
+ 27808 00000000
+ 27809 0f0a 00000000 .quad .LFE563
+ 27809 00000000
+ 27810 0f12 00000000 .long .LLST1
+ 27811 0f16 89480000 .long 0x4889
+ 27812 0f1a 2E .uleb128 0x2e
+ 27813 0f1b 00000000 .long .LASF64
+ 27814 0f1f 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 808
+
+
+ 27815 0f20 C206 .value 0x6c2
+ 27816 0f22 89480000 .long 0x4889
+ 27817 0f26 04 .byte 0x4
+ 27818 0f27 91 .byte 0x91
+ 27819 0f28 A8B57F .sleb128 -9560
+ 27820 0f2b 2F .uleb128 0x2f
+ 27821 0f2c 6B657900 .string "key"
+ 27822 0f30 02 .byte 0x2
+ 27823 0f31 C206 .value 0x6c2
+ 27824 0f33 8F480000 .long 0x488f
+ 27825 0f37 04 .byte 0x4
+ 27826 0f38 91 .byte 0x91
+ 27827 0f39 A0B57F .sleb128 -9568
+ 27828 0f3c 30 .uleb128 0x30
+ 27829 0f3d 00000000 .long .LASF66
+ 27830 0f41 02 .byte 0x2
+ 27831 0f42 C406 .value 0x6c4
+ 27832 0f44 B1010000 .long 0x1b1
+ 27833 0f48 03 .byte 0x3
+ 27834 0f49 91 .byte 0x91
+ 27835 0f4a 804C .sleb128 -6656
+ 27836 0f4c 30 .uleb128 0x30
+ 27837 0f4d 00000000 .long .LASF343
+ 27838 0f51 02 .byte 0x2
+ 27839 0f52 C506 .value 0x6c5
+ 27840 0f54 B1010000 .long 0x1b1
+ 27841 0f58 03 .byte 0x3
+ 27842 0f59 91 .byte 0x91
+ 27843 0f5a 904C .sleb128 -6640
+ 27844 0f5c 31 .uleb128 0x31
+ 27845 0f5d AB0B0000 .long 0xbab
+ 27846 0f61 00000000 .quad .LBB444
+ 27846 00000000
+ 27847 0f69 00000000 .quad .LBE444
+ 27847 00000000
+ 27848 0f71 02 .byte 0x2
+ 27849 0f72 C706 .value 0x6c7
+ 27850 0f74 9E0F0000 .long 0xf9e
+ 27851 0f78 32 .uleb128 0x32
+ 27852 0f79 BC0B0000 .long 0xbbc
+ 27853 0f7d 03 .byte 0x3
+ 27854 0f7e 91 .byte 0x91
+ 27855 0f7f A04C .sleb128 -6624
+ 27856 0f81 33 .uleb128 0x33
+ 27857 0f82 00000000 .quad .LBB445
+ 27857 00000000
+ 27858 0f8a 00000000 .quad .LBE445
+ 27858 00000000
+ 27859 0f92 34 .uleb128 0x34
+ 27860 0f93 C70B0000 .long 0xbc7
+ 27861 0f97 04 .byte 0x4
+ 27862 0f98 91 .byte 0x91
+ 27863 0f99 B0B57F .sleb128 -9552
+ 27864 0f9c 00 .byte 0x0
+ 27865 0f9d 00 .byte 0x0
+ 27866 0f9e 31 .uleb128 0x31
+ 27867 0f9f D10B0000 .long 0xbd1
+
GAS LISTING /tmp/ccMa7HLZ.s page 809
+
+
+ 27868 0fa3 00000000 .quad .LBB446
+ 27868 00000000
+ 27869 0fab 00000000 .quad .LBE446
+ 27869 00000000
+ 27870 0fb3 02 .byte 0x2
+ 27871 0fb4 D006 .value 0x6d0
+ 27872 0fb6 55140000 .long 0x1455
+ 27873 0fba 32 .uleb128 0x32
+ 27874 0fbb EF0B0000 .long 0xbef
+ 27875 0fbf 03 .byte 0x3
+ 27876 0fc0 91 .byte 0x91
+ 27877 0fc1 AC4C .sleb128 -6612
+ 27878 0fc3 32 .uleb128 0x32
+ 27879 0fc4 E30B0000 .long 0xbe3
+ 27880 0fc8 03 .byte 0x3
+ 27881 0fc9 91 .byte 0x91
+ 27882 0fca B04C .sleb128 -6608
+ 27883 0fcc 33 .uleb128 0x33
+ 27884 0fcd 00000000 .quad .LBB447
+ 27884 00000000
+ 27885 0fd5 00000000 .quad .LBE447
+ 27885 00000000
+ 27886 0fdd 34 .uleb128 0x34
+ 27887 0fde FB0B0000 .long 0xbfb
+ 27888 0fe2 04 .byte 0x4
+ 27889 0fe3 76 .byte 0x76
+ 27890 0fe4 C0B07F .sleb128 -10176
+ 27891 0fe7 34 .uleb128 0x34
+ 27892 0fe8 070C0000 .long 0xc07
+ 27893 0fec 04 .byte 0x4
+ 27894 0fed 76 .byte 0x76
+ 27895 0fee B0B07F .sleb128 -10192
+ 27896 0ff1 31 .uleb128 0x31
+ 27897 0ff2 500C0000 .long 0xc50
+ 27898 0ff6 00000000 .quad .LBB448
+ 27898 00000000
+ 27899 0ffe 00000000 .quad .LBE448
+ 27899 00000000
+ 27900 1006 02 .byte 0x2
+ 27901 1007 9106 .value 0x691
+ 27902 1009 45100000 .long 0x1045
+ 27903 100d 32 .uleb128 0x32
+ 27904 100e 7A0C0000 .long 0xc7a
+ 27905 1012 03 .byte 0x3
+ 27906 1013 91 .byte 0x91
+ 27907 1014 C84C .sleb128 -6584
+ 27908 1016 32 .uleb128 0x32
+ 27909 1017 6E0C0000 .long 0xc6e
+ 27910 101b 03 .byte 0x3
+ 27911 101c 91 .byte 0x91
+ 27912 101d CC4C .sleb128 -6580
+ 27913 101f 32 .uleb128 0x32
+ 27914 1020 620C0000 .long 0xc62
+ 27915 1024 03 .byte 0x3
+ 27916 1025 91 .byte 0x91
+ 27917 1026 D04C .sleb128 -6576
+ 27918 1028 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 810
+
+
+ 27919 1029 00000000 .quad .LBB449
+ 27919 00000000
+ 27920 1031 00000000 .quad .LBE449
+ 27920 00000000
+ 27921 1039 34 .uleb128 0x34
+ 27922 103a 860C0000 .long 0xc86
+ 27923 103e 04 .byte 0x4
+ 27924 103f 91 .byte 0x91
+ 27925 1040 80B67F .sleb128 -9472
+ 27926 1043 00 .byte 0x0
+ 27927 1044 00 .byte 0x0
+ 27928 1045 31 .uleb128 0x31
+ 27929 1046 910C0000 .long 0xc91
+ 27930 104a 00000000 .quad .LBB450
+ 27930 00000000
+ 27931 1052 00000000 .quad .LBE450
+ 27931 00000000
+ 27932 105a 02 .byte 0x2
+ 27933 105b 9206 .value 0x692
+ 27934 105d BB120000 .long 0x12bb
+ 27935 1061 32 .uleb128 0x32
+ 27936 1062 A30C0000 .long 0xca3
+ 27937 1066 03 .byte 0x3
+ 27938 1067 91 .byte 0x91
+ 27939 1068 E04C .sleb128 -6560
+ 27940 106a 35 .uleb128 0x35
+ 27941 106b B00C0000 .long 0xcb0
+ 27942 106f 00000000 .quad .LBB452
+ 27942 00000000
+ 27943 1077 00000000 .quad .LBE452
+ 27943 00000000
+ 27944 107f 02 .byte 0x2
+ 27945 1080 7D03 .value 0x37d
+ 27946 1082 32 .uleb128 0x32
+ 27947 1083 CE0C0000 .long 0xcce
+ 27948 1087 03 .byte 0x3
+ 27949 1088 91 .byte 0x91
+ 27950 1089 F84C .sleb128 -6536
+ 27951 108b 32 .uleb128 0x32
+ 27952 108c C20C0000 .long 0xcc2
+ 27953 1090 03 .byte 0x3
+ 27954 1091 91 .byte 0x91
+ 27955 1092 804D .sleb128 -6528
+ 27956 1094 33 .uleb128 0x33
+ 27957 1095 00000000 .quad .LBB453
+ 27957 00000000
+ 27958 109d 00000000 .quad .LBE453
+ 27958 00000000
+ 27959 10a5 34 .uleb128 0x34
+ 27960 10a6 DA0C0000 .long 0xcda
+ 27961 10aa 03 .byte 0x3
+ 27962 10ab 91 .byte 0x91
+ 27963 10ac D04D .sleb128 -6448
+ 27964 10ae 34 .uleb128 0x34
+ 27965 10af E50C0000 .long 0xce5
+ 27966 10b3 03 .byte 0x3
+ 27967 10b4 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 811
+
+
+ 27968 10b5 C04D .sleb128 -6464
+ 27969 10b7 34 .uleb128 0x34
+ 27970 10b8 F00C0000 .long 0xcf0
+ 27971 10bc 03 .byte 0x3
+ 27972 10bd 91 .byte 0x91
+ 27973 10be B04D .sleb128 -6480
+ 27974 10c0 34 .uleb128 0x34
+ 27975 10c1 FC0C0000 .long 0xcfc
+ 27976 10c5 03 .byte 0x3
+ 27977 10c6 91 .byte 0x91
+ 27978 10c7 A04D .sleb128 -6496
+ 27979 10c9 34 .uleb128 0x34
+ 27980 10ca 080D0000 .long 0xd08
+ 27981 10ce 03 .byte 0x3
+ 27982 10cf 91 .byte 0x91
+ 27983 10d0 9C4D .sleb128 -6500
+ 27984 10d2 31 .uleb128 0x31
+ 27985 10d3 1F0D0000 .long 0xd1f
+ 27986 10d7 00000000 .quad .LBB454
+ 27986 00000000
+ 27987 10df 00000000 .quad .LBE454
+ 27987 00000000
+ 27988 10e7 02 .byte 0x2
+ 27989 10e8 5603 .value 0x356
+ 27990 10ea 01110000 .long 0x1101
+ 27991 10ee 32 .uleb128 0x32
+ 27992 10ef 3A0D0000 .long 0xd3a
+ 27993 10f3 03 .byte 0x3
+ 27994 10f4 91 .byte 0x91
+ 27995 10f5 E04D .sleb128 -6432
+ 27996 10f7 32 .uleb128 0x32
+ 27997 10f8 300D0000 .long 0xd30
+ 27998 10fc 03 .byte 0x3
+ 27999 10fd 91 .byte 0x91
+ 28000 10fe F04D .sleb128 -6416
+ 28001 1100 00 .byte 0x0
+ 28002 1101 31 .uleb128 0x31
+ 28003 1102 450D0000 .long 0xd45
+ 28004 1106 00000000 .quad .LBB456
+ 28004 00000000
+ 28005 110e 00000000 .quad .LBE456
+ 28005 00000000
+ 28006 1116 02 .byte 0x2
+ 28007 1117 5E03 .value 0x35e
+ 28008 1119 30110000 .long 0x1130
+ 28009 111d 32 .uleb128 0x32
+ 28010 111e 620D0000 .long 0xd62
+ 28011 1122 03 .byte 0x3
+ 28012 1123 91 .byte 0x91
+ 28013 1124 804E .sleb128 -6400
+ 28014 1126 32 .uleb128 0x32
+ 28015 1127 570D0000 .long 0xd57
+ 28016 112b 03 .byte 0x3
+ 28017 112c 91 .byte 0x91
+ 28018 112d 904E .sleb128 -6384
+ 28019 112f 00 .byte 0x0
+ 28020 1130 31 .uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s page 812
+
+
+ 28021 1131 6E0D0000 .long 0xd6e
+ 28022 1135 00000000 .quad .LBB458
+ 28022 00000000
+ 28023 113d 00000000 .quad .LBE458
+ 28023 00000000
+ 28024 1145 02 .byte 0x2
+ 28025 1146 6403 .value 0x364
+ 28026 1148 98110000 .long 0x1198
+ 28027 114c 32 .uleb128 0x32
+ 28028 114d 8C0D0000 .long 0xd8c
+ 28029 1151 03 .byte 0x3
+ 28030 1152 91 .byte 0x91
+ 28031 1153 A04E .sleb128 -6368
+ 28032 1155 32 .uleb128 0x32
+ 28033 1156 800D0000 .long 0xd80
+ 28034 115a 03 .byte 0x3
+ 28035 115b 91 .byte 0x91
+ 28036 115c B04E .sleb128 -6352
+ 28037 115e 33 .uleb128 0x33
+ 28038 115f 00000000 .quad .LBB459
+ 28038 00000000
+ 28039 1167 00000000 .quad .LBE459
+ 28039 00000000
+ 28040 116f 34 .uleb128 0x34
+ 28041 1170 980D0000 .long 0xd98
+ 28042 1174 04 .byte 0x4
+ 28043 1175 91 .byte 0x91
+ 28044 1176 B0B67F .sleb128 -9424
+ 28045 1179 34 .uleb128 0x34
+ 28046 117a A40D0000 .long 0xda4
+ 28047 117e 04 .byte 0x4
+ 28048 117f 91 .byte 0x91
+ 28049 1180 A0B67F .sleb128 -9440
+ 28050 1183 34 .uleb128 0x34
+ 28051 1184 AF0D0000 .long 0xdaf
+ 28052 1188 04 .byte 0x4
+ 28053 1189 91 .byte 0x91
+ 28054 118a 90B67F .sleb128 -9456
+ 28055 118d 34 .uleb128 0x34
+ 28056 118e BB0D0000 .long 0xdbb
+ 28057 1192 03 .byte 0x3
+ 28058 1193 91 .byte 0x91
+ 28059 1194 CC4E .sleb128 -6324
+ 28060 1196 00 .byte 0x0
+ 28061 1197 00 .byte 0x0
+ 28062 1198 31 .uleb128 0x31
+ 28063 1199 C70D0000 .long 0xdc7
+ 28064 119d 00000000 .quad .LBB460
+ 28064 00000000
+ 28065 11a5 00000000 .quad .LBE460
+ 28065 00000000
+ 28066 11ad 02 .byte 0x2
+ 28067 11ae 6603 .value 0x366
+ 28068 11b0 C7110000 .long 0x11c7
+ 28069 11b4 32 .uleb128 0x32
+ 28070 11b5 E20D0000 .long 0xde2
+ 28071 11b9 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 813
+
+
+ 28072 11ba 91 .byte 0x91
+ 28073 11bb D04E .sleb128 -6320
+ 28074 11bd 32 .uleb128 0x32
+ 28075 11be D80D0000 .long 0xdd8
+ 28076 11c2 03 .byte 0x3
+ 28077 11c3 91 .byte 0x91
+ 28078 11c4 E04E .sleb128 -6304
+ 28079 11c6 00 .byte 0x0
+ 28080 11c7 31 .uleb128 0x31
+ 28081 11c8 6E0D0000 .long 0xd6e
+ 28082 11cc 00000000 .quad .LBB462
+ 28082 00000000
+ 28083 11d4 00000000 .quad .LBE462
+ 28083 00000000
+ 28084 11dc 02 .byte 0x2
+ 28085 11dd 6803 .value 0x368
+ 28086 11df 2F120000 .long 0x122f
+ 28087 11e3 32 .uleb128 0x32
+ 28088 11e4 8C0D0000 .long 0xd8c
+ 28089 11e8 03 .byte 0x3
+ 28090 11e9 91 .byte 0x91
+ 28091 11ea F04E .sleb128 -6288
+ 28092 11ec 32 .uleb128 0x32
+ 28093 11ed 800D0000 .long 0xd80
+ 28094 11f1 03 .byte 0x3
+ 28095 11f2 91 .byte 0x91
+ 28096 11f3 804F .sleb128 -6272
+ 28097 11f5 33 .uleb128 0x33
+ 28098 11f6 00000000 .quad .LBB463
+ 28098 00000000
+ 28099 11fe 00000000 .quad .LBE463
+ 28099 00000000
+ 28100 1206 34 .uleb128 0x34
+ 28101 1207 980D0000 .long 0xd98
+ 28102 120b 04 .byte 0x4
+ 28103 120c 91 .byte 0x91
+ 28104 120d E0B67F .sleb128 -9376
+ 28105 1210 34 .uleb128 0x34
+ 28106 1211 A40D0000 .long 0xda4
+ 28107 1215 04 .byte 0x4
+ 28108 1216 91 .byte 0x91
+ 28109 1217 D0B67F .sleb128 -9392
+ 28110 121a 34 .uleb128 0x34
+ 28111 121b AF0D0000 .long 0xdaf
+ 28112 121f 04 .byte 0x4
+ 28113 1220 91 .byte 0x91
+ 28114 1221 C0B67F .sleb128 -9408
+ 28115 1224 34 .uleb128 0x34
+ 28116 1225 BB0D0000 .long 0xdbb
+ 28117 1229 03 .byte 0x3
+ 28118 122a 91 .byte 0x91
+ 28119 122b 9C4F .sleb128 -6244
+ 28120 122d 00 .byte 0x0
+ 28121 122e 00 .byte 0x0
+ 28122 122f 31 .uleb128 0x31
+ 28123 1230 C70D0000 .long 0xdc7
+ 28124 1234 00000000 .quad .LBB464
+
GAS LISTING /tmp/ccMa7HLZ.s page 814
+
+
+ 28124 00000000
+ 28125 123c 00000000 .quad .LBE464
+ 28125 00000000
+ 28126 1244 02 .byte 0x2
+ 28127 1245 6A03 .value 0x36a
+ 28128 1247 5E120000 .long 0x125e
+ 28129 124b 32 .uleb128 0x32
+ 28130 124c E20D0000 .long 0xde2
+ 28131 1250 03 .byte 0x3
+ 28132 1251 91 .byte 0x91
+ 28133 1252 A04F .sleb128 -6240
+ 28134 1254 32 .uleb128 0x32
+ 28135 1255 D80D0000 .long 0xdd8
+ 28136 1259 03 .byte 0x3
+ 28137 125a 91 .byte 0x91
+ 28138 125b B04F .sleb128 -6224
+ 28139 125d 00 .byte 0x0
+ 28140 125e 31 .uleb128 0x31
+ 28141 125f ED0D0000 .long 0xded
+ 28142 1263 00000000 .quad .LBB466
+ 28142 00000000
+ 28143 126b 00000000 .quad .LBE466
+ 28143 00000000
+ 28144 1273 02 .byte 0x2
+ 28145 1274 6C03 .value 0x36c
+ 28146 1276 8D120000 .long 0x128d
+ 28147 127a 32 .uleb128 0x32
+ 28148 127b 0A0E0000 .long 0xe0a
+ 28149 127f 03 .byte 0x3
+ 28150 1280 91 .byte 0x91
+ 28151 1281 C04F .sleb128 -6208
+ 28152 1283 32 .uleb128 0x32
+ 28153 1284 FF0D0000 .long 0xdff
+ 28154 1288 03 .byte 0x3
+ 28155 1289 91 .byte 0x91
+ 28156 128a D04F .sleb128 -6192
+ 28157 128c 00 .byte 0x0
+ 28158 128d 35 .uleb128 0x35
+ 28159 128e 1F0D0000 .long 0xd1f
+ 28160 1292 00000000 .quad .LBB468
+ 28160 00000000
+ 28161 129a 00000000 .quad .LBE468
+ 28161 00000000
+ 28162 12a2 02 .byte 0x2
+ 28163 12a3 6E03 .value 0x36e
+ 28164 12a5 32 .uleb128 0x32
+ 28165 12a6 3A0D0000 .long 0xd3a
+ 28166 12aa 03 .byte 0x3
+ 28167 12ab 91 .byte 0x91
+ 28168 12ac E04F .sleb128 -6176
+ 28169 12ae 32 .uleb128 0x32
+ 28170 12af 300D0000 .long 0xd30
+ 28171 12b3 03 .byte 0x3
+ 28172 12b4 91 .byte 0x91
+ 28173 12b5 F04F .sleb128 -6160
+ 28174 12b7 00 .byte 0x0
+ 28175 12b8 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 815
+
+
+ 28176 12b9 00 .byte 0x0
+ 28177 12ba 00 .byte 0x0
+ 28178 12bb 36 .uleb128 0x36
+ 28179 12bc 00000000 .quad .LBB470
+ 28179 00000000
+ 28180 12c4 00000000 .quad .LBE470
+ 28180 00000000
+ 28181 12cc DB120000 .long 0x12db
+ 28182 12d0 34 .uleb128 0x34
+ 28183 12d1 180C0000 .long 0xc18
+ 28184 12d5 04 .byte 0x4
+ 28185 12d6 91 .byte 0x91
+ 28186 12d7 F0B57F .sleb128 -9488
+ 28187 12da 00 .byte 0x0
+ 28188 12db 31 .uleb128 0x31
+ 28189 12dc 160E0000 .long 0xe16
+ 28190 12e0 00000000 .quad .LBB471
+ 28190 00000000
+ 28191 12e8 00000000 .quad .LBE471
+ 28191 00000000
+ 28192 12f0 02 .byte 0x2
+ 28193 12f1 9406 .value 0x694
+ 28194 12f3 86130000 .long 0x1386
+ 28195 12f7 32 .uleb128 0x32
+ 28196 12f8 280E0000 .long 0xe28
+ 28197 12fc 03 .byte 0x3
+ 28198 12fd 91 .byte 0x91
+ 28199 12fe 8050 .sleb128 -6144
+ 28200 1300 33 .uleb128 0x33
+ 28201 1301 00000000 .quad .LBB472
+ 28201 00000000
+ 28202 1309 00000000 .quad .LBE472
+ 28202 00000000
+ 28203 1311 34 .uleb128 0x34
+ 28204 1312 340E0000 .long 0xe34
+ 28205 1316 09 .byte 0x9
+ 28206 1317 03 .byte 0x3
+ 28207 1318 00000000 .quad ShiftRowTable.6768
+ 28207 00000000
+ 28208 1320 35 .uleb128 0x35
+ 28209 1321 6E0D0000 .long 0xd6e
+ 28210 1325 00000000 .quad .LBB473
+ 28210 00000000
+ 28211 132d 00000000 .quad .LBE473
+ 28211 00000000
+ 28212 1335 02 .byte 0x2
+ 28213 1336 9B02 .value 0x29b
+ 28214 1338 32 .uleb128 0x32
+ 28215 1339 8C0D0000 .long 0xd8c
+ 28216 133d 03 .byte 0x3
+ 28217 133e 91 .byte 0x91
+ 28218 133f 9050 .sleb128 -6128
+ 28219 1341 32 .uleb128 0x32
+ 28220 1342 800D0000 .long 0xd80
+ 28221 1346 03 .byte 0x3
+ 28222 1347 91 .byte 0x91
+ 28223 1348 A050 .sleb128 -6112
+
GAS LISTING /tmp/ccMa7HLZ.s page 816
+
+
+ 28224 134a 33 .uleb128 0x33
+ 28225 134b 00000000 .quad .LBB474
+ 28225 00000000
+ 28226 1353 00000000 .quad .LBE474
+ 28226 00000000
+ 28227 135b 34 .uleb128 0x34
+ 28228 135c 980D0000 .long 0xd98
+ 28229 1360 04 .byte 0x4
+ 28230 1361 91 .byte 0x91
+ 28231 1362 90B77F .sleb128 -9328
+ 28232 1365 34 .uleb128 0x34
+ 28233 1366 A40D0000 .long 0xda4
+ 28234 136a 04 .byte 0x4
+ 28235 136b 91 .byte 0x91
+ 28236 136c 80B77F .sleb128 -9344
+ 28237 136f 34 .uleb128 0x34
+ 28238 1370 AF0D0000 .long 0xdaf
+ 28239 1374 04 .byte 0x4
+ 28240 1375 91 .byte 0x91
+ 28241 1376 F0B67F .sleb128 -9360
+ 28242 1379 34 .uleb128 0x34
+ 28243 137a BB0D0000 .long 0xdbb
+ 28244 137e 03 .byte 0x3
+ 28245 137f 91 .byte 0x91
+ 28246 1380 BC50 .sleb128 -6084
+ 28247 1382 00 .byte 0x0
+ 28248 1383 00 .byte 0x0
+ 28249 1384 00 .byte 0x0
+ 28250 1385 00 .byte 0x0
+ 28251 1386 36 .uleb128 0x36
+ 28252 1387 00000000 .quad .LBB475
+ 28252 00000000
+ 28253 138f 00000000 .quad .LBE475
+ 28253 00000000
+ 28254 1397 A6130000 .long 0x13a6
+ 28255 139b 34 .uleb128 0x34
+ 28256 139c 280C0000 .long 0xc28
+ 28257 13a0 04 .byte 0x4
+ 28258 13a1 91 .byte 0x91
+ 28259 13a2 E0B57F .sleb128 -9504
+ 28260 13a5 00 .byte 0x0
+ 28261 13a6 31 .uleb128 0x31
+ 28262 13a7 520E0000 .long 0xe52
+ 28263 13ab 00000000 .quad .LBB476
+ 28263 00000000
+ 28264 13b3 00000000 .quad .LBE476
+ 28264 00000000
+ 28265 13bb 02 .byte 0x2
+ 28266 13bc 9606 .value 0x696
+ 28267 13be D5130000 .long 0x13d5
+ 28268 13c2 32 .uleb128 0x32
+ 28269 13c3 6D0E0000 .long 0xe6d
+ 28270 13c7 03 .byte 0x3
+ 28271 13c8 91 .byte 0x91
+ 28272 13c9 C050 .sleb128 -6080
+ 28273 13cb 32 .uleb128 0x32
+ 28274 13cc 630E0000 .long 0xe63
+
GAS LISTING /tmp/ccMa7HLZ.s page 817
+
+
+ 28275 13d0 03 .byte 0x3
+ 28276 13d1 91 .byte 0x91
+ 28277 13d2 D050 .sleb128 -6064
+ 28278 13d4 00 .byte 0x0
+ 28279 13d5 36 .uleb128 0x36
+ 28280 13d6 00000000 .quad .LBB478
+ 28280 00000000
+ 28281 13de 00000000 .quad .LBE478
+ 28281 00000000
+ 28282 13e6 F5130000 .long 0x13f5
+ 28283 13ea 34 .uleb128 0x34
+ 28284 13eb 380C0000 .long 0xc38
+ 28285 13ef 04 .byte 0x4
+ 28286 13f0 91 .byte 0x91
+ 28287 13f1 D0B57F .sleb128 -9520
+ 28288 13f4 00 .byte 0x0
+ 28289 13f5 31 .uleb128 0x31
+ 28290 13f6 780E0000 .long 0xe78
+ 28291 13fa 00000000 .quad .LBB479
+ 28291 00000000
+ 28292 1402 00000000 .quad .LBE479
+ 28292 00000000
+ 28293 140a 02 .byte 0x2
+ 28294 140b 9806 .value 0x698
+ 28295 140d 37140000 .long 0x1437
+ 28296 1411 32 .uleb128 0x32
+ 28297 1412 8A0E0000 .long 0xe8a
+ 28298 1416 03 .byte 0x3
+ 28299 1417 91 .byte 0x91
+ 28300 1418 E050 .sleb128 -6048
+ 28301 141a 33 .uleb128 0x33
+ 28302 141b 00000000 .quad .LBB480
+ 28302 00000000
+ 28303 1423 00000000 .quad .LBE480
+ 28303 00000000
+ 28304 142b 34 .uleb128 0x34
+ 28305 142c 960E0000 .long 0xe96
+ 28306 1430 04 .byte 0x4
+ 28307 1431 91 .byte 0x91
+ 28308 1432 A0B77F .sleb128 -9312
+ 28309 1435 00 .byte 0x0
+ 28310 1436 00 .byte 0x0
+ 28311 1437 33 .uleb128 0x33
+ 28312 1438 00000000 .quad .LBB481
+ 28312 00000000
+ 28313 1440 00000000 .quad .LBE481
+ 28313 00000000
+ 28314 1448 34 .uleb128 0x34
+ 28315 1449 440C0000 .long 0xc44
+ 28316 144d 04 .byte 0x4
+ 28317 144e 91 .byte 0x91
+ 28318 144f C0B57F .sleb128 -9536
+ 28319 1452 00 .byte 0x0
+ 28320 1453 00 .byte 0x0
+ 28321 1454 00 .byte 0x0
+ 28322 1455 31 .uleb128 0x31
+ 28323 1456 A30E0000 .long 0xea3
+
GAS LISTING /tmp/ccMa7HLZ.s page 818
+
+
+ 28324 145a 00000000 .quad .LBB482
+ 28324 00000000
+ 28325 1462 00000000 .quad .LBE482
+ 28325 00000000
+ 28326 146a 02 .byte 0x2
+ 28327 146b D006 .value 0x6d0
+ 28328 146d 59150000 .long 0x1559
+ 28329 1471 32 .uleb128 0x32
+ 28330 1472 B50E0000 .long 0xeb5
+ 28331 1476 03 .byte 0x3
+ 28332 1477 91 .byte 0x91
+ 28333 1478 F050 .sleb128 -6032
+ 28334 147a 33 .uleb128 0x33
+ 28335 147b 00000000 .quad .LBB483
+ 28335 00000000
+ 28336 1483 00000000 .quad .LBE483
+ 28336 00000000
+ 28337 148b 34 .uleb128 0x34
+ 28338 148c C10E0000 .long 0xec1
+ 28339 1490 04 .byte 0x4
+ 28340 1491 76 .byte 0x76
+ 28341 1492 E0B07F .sleb128 -10144
+ 28342 1495 31 .uleb128 0x31
+ 28343 1496 CE0E0000 .long 0xece
+ 28344 149a 00000000 .quad .LBB484
+ 28344 00000000
+ 28345 14a2 00000000 .quad .LBE484
+ 28345 00000000
+ 28346 14aa 02 .byte 0x2
+ 28347 14ab 1F06 .value 0x61f
+ 28348 14ad D7140000 .long 0x14d7
+ 28349 14b1 32 .uleb128 0x32
+ 28350 14b2 E00E0000 .long 0xee0
+ 28351 14b6 03 .byte 0x3
+ 28352 14b7 91 .byte 0x91
+ 28353 14b8 8051 .sleb128 -6016
+ 28354 14ba 33 .uleb128 0x33
+ 28355 14bb 00000000 .quad .LBB485
+ 28355 00000000
+ 28356 14c3 00000000 .quad .LBE485
+ 28356 00000000
+ 28357 14cb 34 .uleb128 0x34
+ 28358 14cc EC0E0000 .long 0xeec
+ 28359 14d0 04 .byte 0x4
+ 28360 14d1 91 .byte 0x91
+ 28361 14d2 B0B77F .sleb128 -9296
+ 28362 14d5 00 .byte 0x0
+ 28363 14d6 00 .byte 0x0
+ 28364 14d7 31 .uleb128 0x31
+ 28365 14d8 CE0E0000 .long 0xece
+ 28366 14dc 00000000 .quad .LBB486
+ 28366 00000000
+ 28367 14e4 00000000 .quad .LBE486
+ 28367 00000000
+ 28368 14ec 02 .byte 0x2
+ 28369 14ed 2006 .value 0x620
+ 28370 14ef 19150000 .long 0x1519
+
GAS LISTING /tmp/ccMa7HLZ.s page 819
+
+
+ 28371 14f3 32 .uleb128 0x32
+ 28372 14f4 E00E0000 .long 0xee0
+ 28373 14f8 03 .byte 0x3
+ 28374 14f9 91 .byte 0x91
+ 28375 14fa 9051 .sleb128 -6000
+ 28376 14fc 33 .uleb128 0x33
+ 28377 14fd 00000000 .quad .LBB487
+ 28377 00000000
+ 28378 1505 00000000 .quad .LBE487
+ 28378 00000000
+ 28379 150d 34 .uleb128 0x34
+ 28380 150e EC0E0000 .long 0xeec
+ 28381 1512 04 .byte 0x4
+ 28382 1513 91 .byte 0x91
+ 28383 1514 C0B77F .sleb128 -9280
+ 28384 1517 00 .byte 0x0
+ 28385 1518 00 .byte 0x0
+ 28386 1519 35 .uleb128 0x35
+ 28387 151a CE0E0000 .long 0xece
+ 28388 151e 00000000 .quad .LBB488
+ 28388 00000000
+ 28389 1526 00000000 .quad .LBE488
+ 28389 00000000
+ 28390 152e 02 .byte 0x2
+ 28391 152f 2106 .value 0x621
+ 28392 1531 32 .uleb128 0x32
+ 28393 1532 E00E0000 .long 0xee0
+ 28394 1536 03 .byte 0x3
+ 28395 1537 91 .byte 0x91
+ 28396 1538 A051 .sleb128 -5984
+ 28397 153a 33 .uleb128 0x33
+ 28398 153b 00000000 .quad .LBB489
+ 28398 00000000
+ 28399 1543 00000000 .quad .LBE489
+ 28399 00000000
+ 28400 154b 34 .uleb128 0x34
+ 28401 154c EC0E0000 .long 0xeec
+ 28402 1550 04 .byte 0x4
+ 28403 1551 91 .byte 0x91
+ 28404 1552 D0B77F .sleb128 -9264
+ 28405 1555 00 .byte 0x0
+ 28406 1556 00 .byte 0x0
+ 28407 1557 00 .byte 0x0
+ 28408 1558 00 .byte 0x0
+ 28409 1559 31 .uleb128 0x31
+ 28410 155a D10B0000 .long 0xbd1
+ 28411 155e 00000000 .quad .LBB490
+ 28411 00000000
+ 28412 1566 00000000 .quad .LBE490
+ 28412 00000000
+ 28413 156e 02 .byte 0x2
+ 28414 156f D106 .value 0x6d1
+ 28415 1571 101A0000 .long 0x1a10
+ 28416 1575 32 .uleb128 0x32
+ 28417 1576 EF0B0000 .long 0xbef
+ 28418 157a 03 .byte 0x3
+ 28419 157b 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 820
+
+
+ 28420 157c BC51 .sleb128 -5956
+ 28421 157e 32 .uleb128 0x32
+ 28422 157f E30B0000 .long 0xbe3
+ 28423 1583 03 .byte 0x3
+ 28424 1584 91 .byte 0x91
+ 28425 1585 C051 .sleb128 -5952
+ 28426 1587 33 .uleb128 0x33
+ 28427 1588 00000000 .quad .LBB491
+ 28427 00000000
+ 28428 1590 00000000 .quad .LBE491
+ 28428 00000000
+ 28429 1598 34 .uleb128 0x34
+ 28430 1599 FB0B0000 .long 0xbfb
+ 28431 159d 04 .byte 0x4
+ 28432 159e 76 .byte 0x76
+ 28433 159f 80B17F .sleb128 -10112
+ 28434 15a2 34 .uleb128 0x34
+ 28435 15a3 070C0000 .long 0xc07
+ 28436 15a7 04 .byte 0x4
+ 28437 15a8 76 .byte 0x76
+ 28438 15a9 F0B07F .sleb128 -10128
+ 28439 15ac 31 .uleb128 0x31
+ 28440 15ad 500C0000 .long 0xc50
+ 28441 15b1 00000000 .quad .LBB492
+ 28441 00000000
+ 28442 15b9 00000000 .quad .LBE492
+ 28442 00000000
+ 28443 15c1 02 .byte 0x2
+ 28444 15c2 9106 .value 0x691
+ 28445 15c4 00160000 .long 0x1600
+ 28446 15c8 32 .uleb128 0x32
+ 28447 15c9 7A0C0000 .long 0xc7a
+ 28448 15cd 03 .byte 0x3
+ 28449 15ce 91 .byte 0x91
+ 28450 15cf D851 .sleb128 -5928
+ 28451 15d1 32 .uleb128 0x32
+ 28452 15d2 6E0C0000 .long 0xc6e
+ 28453 15d6 03 .byte 0x3
+ 28454 15d7 91 .byte 0x91
+ 28455 15d8 DC51 .sleb128 -5924
+ 28456 15da 32 .uleb128 0x32
+ 28457 15db 620C0000 .long 0xc62
+ 28458 15df 03 .byte 0x3
+ 28459 15e0 91 .byte 0x91
+ 28460 15e1 E051 .sleb128 -5920
+ 28461 15e3 33 .uleb128 0x33
+ 28462 15e4 00000000 .quad .LBB493
+ 28462 00000000
+ 28463 15ec 00000000 .quad .LBE493
+ 28463 00000000
+ 28464 15f4 34 .uleb128 0x34
+ 28465 15f5 860C0000 .long 0xc86
+ 28466 15f9 04 .byte 0x4
+ 28467 15fa 91 .byte 0x91
+ 28468 15fb A0B87F .sleb128 -9184
+ 28469 15fe 00 .byte 0x0
+ 28470 15ff 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 821
+
+
+ 28471 1600 31 .uleb128 0x31
+ 28472 1601 910C0000 .long 0xc91
+ 28473 1605 00000000 .quad .LBB494
+ 28473 00000000
+ 28474 160d 00000000 .quad .LBE494
+ 28474 00000000
+ 28475 1615 02 .byte 0x2
+ 28476 1616 9206 .value 0x692
+ 28477 1618 76180000 .long 0x1876
+ 28478 161c 32 .uleb128 0x32
+ 28479 161d A30C0000 .long 0xca3
+ 28480 1621 03 .byte 0x3
+ 28481 1622 91 .byte 0x91
+ 28482 1623 F051 .sleb128 -5904
+ 28483 1625 35 .uleb128 0x35
+ 28484 1626 B00C0000 .long 0xcb0
+ 28485 162a 00000000 .quad .LBB496
+ 28485 00000000
+ 28486 1632 00000000 .quad .LBE496
+ 28486 00000000
+ 28487 163a 02 .byte 0x2
+ 28488 163b 7D03 .value 0x37d
+ 28489 163d 32 .uleb128 0x32
+ 28490 163e CE0C0000 .long 0xcce
+ 28491 1642 03 .byte 0x3
+ 28492 1643 91 .byte 0x91
+ 28493 1644 8852 .sleb128 -5880
+ 28494 1646 32 .uleb128 0x32
+ 28495 1647 C20C0000 .long 0xcc2
+ 28496 164b 03 .byte 0x3
+ 28497 164c 91 .byte 0x91
+ 28498 164d 9052 .sleb128 -5872
+ 28499 164f 33 .uleb128 0x33
+ 28500 1650 00000000 .quad .LBB497
+ 28500 00000000
+ 28501 1658 00000000 .quad .LBE497
+ 28501 00000000
+ 28502 1660 34 .uleb128 0x34
+ 28503 1661 DA0C0000 .long 0xcda
+ 28504 1665 03 .byte 0x3
+ 28505 1666 91 .byte 0x91
+ 28506 1667 E052 .sleb128 -5792
+ 28507 1669 34 .uleb128 0x34
+ 28508 166a E50C0000 .long 0xce5
+ 28509 166e 03 .byte 0x3
+ 28510 166f 91 .byte 0x91
+ 28511 1670 D052 .sleb128 -5808
+ 28512 1672 34 .uleb128 0x34
+ 28513 1673 F00C0000 .long 0xcf0
+ 28514 1677 03 .byte 0x3
+ 28515 1678 91 .byte 0x91
+ 28516 1679 C052 .sleb128 -5824
+ 28517 167b 34 .uleb128 0x34
+ 28518 167c FC0C0000 .long 0xcfc
+ 28519 1680 03 .byte 0x3
+ 28520 1681 91 .byte 0x91
+ 28521 1682 B052 .sleb128 -5840
+
GAS LISTING /tmp/ccMa7HLZ.s page 822
+
+
+ 28522 1684 34 .uleb128 0x34
+ 28523 1685 080D0000 .long 0xd08
+ 28524 1689 03 .byte 0x3
+ 28525 168a 91 .byte 0x91
+ 28526 168b AC52 .sleb128 -5844
+ 28527 168d 31 .uleb128 0x31
+ 28528 168e 1F0D0000 .long 0xd1f
+ 28529 1692 00000000 .quad .LBB498
+ 28529 00000000
+ 28530 169a 00000000 .quad .LBE498
+ 28530 00000000
+ 28531 16a2 02 .byte 0x2
+ 28532 16a3 5603 .value 0x356
+ 28533 16a5 BC160000 .long 0x16bc
+ 28534 16a9 32 .uleb128 0x32
+ 28535 16aa 3A0D0000 .long 0xd3a
+ 28536 16ae 03 .byte 0x3
+ 28537 16af 91 .byte 0x91
+ 28538 16b0 F052 .sleb128 -5776
+ 28539 16b2 32 .uleb128 0x32
+ 28540 16b3 300D0000 .long 0xd30
+ 28541 16b7 03 .byte 0x3
+ 28542 16b8 91 .byte 0x91
+ 28543 16b9 8053 .sleb128 -5760
+ 28544 16bb 00 .byte 0x0
+ 28545 16bc 31 .uleb128 0x31
+ 28546 16bd 450D0000 .long 0xd45
+ 28547 16c1 00000000 .quad .LBB500
+ 28547 00000000
+ 28548 16c9 00000000 .quad .LBE500
+ 28548 00000000
+ 28549 16d1 02 .byte 0x2
+ 28550 16d2 5E03 .value 0x35e
+ 28551 16d4 EB160000 .long 0x16eb
+ 28552 16d8 32 .uleb128 0x32
+ 28553 16d9 620D0000 .long 0xd62
+ 28554 16dd 03 .byte 0x3
+ 28555 16de 91 .byte 0x91
+ 28556 16df 9053 .sleb128 -5744
+ 28557 16e1 32 .uleb128 0x32
+ 28558 16e2 570D0000 .long 0xd57
+ 28559 16e6 03 .byte 0x3
+ 28560 16e7 91 .byte 0x91
+ 28561 16e8 A053 .sleb128 -5728
+ 28562 16ea 00 .byte 0x0
+ 28563 16eb 31 .uleb128 0x31
+ 28564 16ec 6E0D0000 .long 0xd6e
+ 28565 16f0 00000000 .quad .LBB502
+ 28565 00000000
+ 28566 16f8 00000000 .quad .LBE502
+ 28566 00000000
+ 28567 1700 02 .byte 0x2
+ 28568 1701 6403 .value 0x364
+ 28569 1703 53170000 .long 0x1753
+ 28570 1707 32 .uleb128 0x32
+ 28571 1708 8C0D0000 .long 0xd8c
+ 28572 170c 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 823
+
+
+ 28573 170d 91 .byte 0x91
+ 28574 170e B053 .sleb128 -5712
+ 28575 1710 32 .uleb128 0x32
+ 28576 1711 800D0000 .long 0xd80
+ 28577 1715 03 .byte 0x3
+ 28578 1716 91 .byte 0x91
+ 28579 1717 C053 .sleb128 -5696
+ 28580 1719 33 .uleb128 0x33
+ 28581 171a 00000000 .quad .LBB503
+ 28581 00000000
+ 28582 1722 00000000 .quad .LBE503
+ 28582 00000000
+ 28583 172a 34 .uleb128 0x34
+ 28584 172b 980D0000 .long 0xd98
+ 28585 172f 04 .byte 0x4
+ 28586 1730 91 .byte 0x91
+ 28587 1731 D0B87F .sleb128 -9136
+ 28588 1734 34 .uleb128 0x34
+ 28589 1735 A40D0000 .long 0xda4
+ 28590 1739 04 .byte 0x4
+ 28591 173a 91 .byte 0x91
+ 28592 173b C0B87F .sleb128 -9152
+ 28593 173e 34 .uleb128 0x34
+ 28594 173f AF0D0000 .long 0xdaf
+ 28595 1743 04 .byte 0x4
+ 28596 1744 91 .byte 0x91
+ 28597 1745 B0B87F .sleb128 -9168
+ 28598 1748 34 .uleb128 0x34
+ 28599 1749 BB0D0000 .long 0xdbb
+ 28600 174d 03 .byte 0x3
+ 28601 174e 91 .byte 0x91
+ 28602 174f DC53 .sleb128 -5668
+ 28603 1751 00 .byte 0x0
+ 28604 1752 00 .byte 0x0
+ 28605 1753 31 .uleb128 0x31
+ 28606 1754 C70D0000 .long 0xdc7
+ 28607 1758 00000000 .quad .LBB504
+ 28607 00000000
+ 28608 1760 00000000 .quad .LBE504
+ 28608 00000000
+ 28609 1768 02 .byte 0x2
+ 28610 1769 6603 .value 0x366
+ 28611 176b 82170000 .long 0x1782
+ 28612 176f 32 .uleb128 0x32
+ 28613 1770 E20D0000 .long 0xde2
+ 28614 1774 03 .byte 0x3
+ 28615 1775 91 .byte 0x91
+ 28616 1776 E053 .sleb128 -5664
+ 28617 1778 32 .uleb128 0x32
+ 28618 1779 D80D0000 .long 0xdd8
+ 28619 177d 03 .byte 0x3
+ 28620 177e 91 .byte 0x91
+ 28621 177f F053 .sleb128 -5648
+ 28622 1781 00 .byte 0x0
+ 28623 1782 31 .uleb128 0x31
+ 28624 1783 6E0D0000 .long 0xd6e
+ 28625 1787 00000000 .quad .LBB506
+
GAS LISTING /tmp/ccMa7HLZ.s page 824
+
+
+ 28625 00000000
+ 28626 178f 00000000 .quad .LBE506
+ 28626 00000000
+ 28627 1797 02 .byte 0x2
+ 28628 1798 6803 .value 0x368
+ 28629 179a EA170000 .long 0x17ea
+ 28630 179e 32 .uleb128 0x32
+ 28631 179f 8C0D0000 .long 0xd8c
+ 28632 17a3 03 .byte 0x3
+ 28633 17a4 91 .byte 0x91
+ 28634 17a5 8054 .sleb128 -5632
+ 28635 17a7 32 .uleb128 0x32
+ 28636 17a8 800D0000 .long 0xd80
+ 28637 17ac 03 .byte 0x3
+ 28638 17ad 91 .byte 0x91
+ 28639 17ae 9054 .sleb128 -5616
+ 28640 17b0 33 .uleb128 0x33
+ 28641 17b1 00000000 .quad .LBB507
+ 28641 00000000
+ 28642 17b9 00000000 .quad .LBE507
+ 28642 00000000
+ 28643 17c1 34 .uleb128 0x34
+ 28644 17c2 980D0000 .long 0xd98
+ 28645 17c6 04 .byte 0x4
+ 28646 17c7 91 .byte 0x91
+ 28647 17c8 80B97F .sleb128 -9088
+ 28648 17cb 34 .uleb128 0x34
+ 28649 17cc A40D0000 .long 0xda4
+ 28650 17d0 04 .byte 0x4
+ 28651 17d1 91 .byte 0x91
+ 28652 17d2 F0B87F .sleb128 -9104
+ 28653 17d5 34 .uleb128 0x34
+ 28654 17d6 AF0D0000 .long 0xdaf
+ 28655 17da 04 .byte 0x4
+ 28656 17db 91 .byte 0x91
+ 28657 17dc E0B87F .sleb128 -9120
+ 28658 17df 34 .uleb128 0x34
+ 28659 17e0 BB0D0000 .long 0xdbb
+ 28660 17e4 03 .byte 0x3
+ 28661 17e5 91 .byte 0x91
+ 28662 17e6 AC54 .sleb128 -5588
+ 28663 17e8 00 .byte 0x0
+ 28664 17e9 00 .byte 0x0
+ 28665 17ea 31 .uleb128 0x31
+ 28666 17eb C70D0000 .long 0xdc7
+ 28667 17ef 00000000 .quad .LBB508
+ 28667 00000000
+ 28668 17f7 00000000 .quad .LBE508
+ 28668 00000000
+ 28669 17ff 02 .byte 0x2
+ 28670 1800 6A03 .value 0x36a
+ 28671 1802 19180000 .long 0x1819
+ 28672 1806 32 .uleb128 0x32
+ 28673 1807 E20D0000 .long 0xde2
+ 28674 180b 03 .byte 0x3
+ 28675 180c 91 .byte 0x91
+ 28676 180d B054 .sleb128 -5584
+
GAS LISTING /tmp/ccMa7HLZ.s page 825
+
+
+ 28677 180f 32 .uleb128 0x32
+ 28678 1810 D80D0000 .long 0xdd8
+ 28679 1814 03 .byte 0x3
+ 28680 1815 91 .byte 0x91
+ 28681 1816 C054 .sleb128 -5568
+ 28682 1818 00 .byte 0x0
+ 28683 1819 31 .uleb128 0x31
+ 28684 181a ED0D0000 .long 0xded
+ 28685 181e 00000000 .quad .LBB510
+ 28685 00000000
+ 28686 1826 00000000 .quad .LBE510
+ 28686 00000000
+ 28687 182e 02 .byte 0x2
+ 28688 182f 6C03 .value 0x36c
+ 28689 1831 48180000 .long 0x1848
+ 28690 1835 32 .uleb128 0x32
+ 28691 1836 0A0E0000 .long 0xe0a
+ 28692 183a 03 .byte 0x3
+ 28693 183b 91 .byte 0x91
+ 28694 183c D054 .sleb128 -5552
+ 28695 183e 32 .uleb128 0x32
+ 28696 183f FF0D0000 .long 0xdff
+ 28697 1843 03 .byte 0x3
+ 28698 1844 91 .byte 0x91
+ 28699 1845 E054 .sleb128 -5536
+ 28700 1847 00 .byte 0x0
+ 28701 1848 35 .uleb128 0x35
+ 28702 1849 1F0D0000 .long 0xd1f
+ 28703 184d 00000000 .quad .LBB512
+ 28703 00000000
+ 28704 1855 00000000 .quad .LBE512
+ 28704 00000000
+ 28705 185d 02 .byte 0x2
+ 28706 185e 6E03 .value 0x36e
+ 28707 1860 32 .uleb128 0x32
+ 28708 1861 3A0D0000 .long 0xd3a
+ 28709 1865 03 .byte 0x3
+ 28710 1866 91 .byte 0x91
+ 28711 1867 F054 .sleb128 -5520
+ 28712 1869 32 .uleb128 0x32
+ 28713 186a 300D0000 .long 0xd30
+ 28714 186e 03 .byte 0x3
+ 28715 186f 91 .byte 0x91
+ 28716 1870 8055 .sleb128 -5504
+ 28717 1872 00 .byte 0x0
+ 28718 1873 00 .byte 0x0
+ 28719 1874 00 .byte 0x0
+ 28720 1875 00 .byte 0x0
+ 28721 1876 36 .uleb128 0x36
+ 28722 1877 00000000 .quad .LBB514
+ 28722 00000000
+ 28723 187f 00000000 .quad .LBE514
+ 28723 00000000
+ 28724 1887 96180000 .long 0x1896
+ 28725 188b 34 .uleb128 0x34
+ 28726 188c 180C0000 .long 0xc18
+ 28727 1890 04 .byte 0x4
+
GAS LISTING /tmp/ccMa7HLZ.s page 826
+
+
+ 28728 1891 91 .byte 0x91
+ 28729 1892 90B87F .sleb128 -9200
+ 28730 1895 00 .byte 0x0
+ 28731 1896 31 .uleb128 0x31
+ 28732 1897 160E0000 .long 0xe16
+ 28733 189b 00000000 .quad .LBB515
+ 28733 00000000
+ 28734 18a3 00000000 .quad .LBE515
+ 28734 00000000
+ 28735 18ab 02 .byte 0x2
+ 28736 18ac 9406 .value 0x694
+ 28737 18ae 41190000 .long 0x1941
+ 28738 18b2 32 .uleb128 0x32
+ 28739 18b3 280E0000 .long 0xe28
+ 28740 18b7 03 .byte 0x3
+ 28741 18b8 91 .byte 0x91
+ 28742 18b9 9055 .sleb128 -5488
+ 28743 18bb 33 .uleb128 0x33
+ 28744 18bc 00000000 .quad .LBB516
+ 28744 00000000
+ 28745 18c4 00000000 .quad .LBE516
+ 28745 00000000
+ 28746 18cc 34 .uleb128 0x34
+ 28747 18cd 340E0000 .long 0xe34
+ 28748 18d1 09 .byte 0x9
+ 28749 18d2 03 .byte 0x3
+ 28750 18d3 00000000 .quad ShiftRowTable.6768
+ 28750 00000000
+ 28751 18db 35 .uleb128 0x35
+ 28752 18dc 6E0D0000 .long 0xd6e
+ 28753 18e0 00000000 .quad .LBB517
+ 28753 00000000
+ 28754 18e8 00000000 .quad .LBE517
+ 28754 00000000
+ 28755 18f0 02 .byte 0x2
+ 28756 18f1 9B02 .value 0x29b
+ 28757 18f3 32 .uleb128 0x32
+ 28758 18f4 8C0D0000 .long 0xd8c
+ 28759 18f8 03 .byte 0x3
+ 28760 18f9 91 .byte 0x91
+ 28761 18fa A055 .sleb128 -5472
+ 28762 18fc 32 .uleb128 0x32
+ 28763 18fd 800D0000 .long 0xd80
+ 28764 1901 03 .byte 0x3
+ 28765 1902 91 .byte 0x91
+ 28766 1903 B055 .sleb128 -5456
+ 28767 1905 33 .uleb128 0x33
+ 28768 1906 00000000 .quad .LBB518
+ 28768 00000000
+ 28769 190e 00000000 .quad .LBE518
+ 28769 00000000
+ 28770 1916 34 .uleb128 0x34
+ 28771 1917 980D0000 .long 0xd98
+ 28772 191b 04 .byte 0x4
+ 28773 191c 91 .byte 0x91
+ 28774 191d B0B97F .sleb128 -9040
+ 28775 1920 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 827
+
+
+ 28776 1921 A40D0000 .long 0xda4
+ 28777 1925 04 .byte 0x4
+ 28778 1926 91 .byte 0x91
+ 28779 1927 A0B97F .sleb128 -9056
+ 28780 192a 34 .uleb128 0x34
+ 28781 192b AF0D0000 .long 0xdaf
+ 28782 192f 04 .byte 0x4
+ 28783 1930 91 .byte 0x91
+ 28784 1931 90B97F .sleb128 -9072
+ 28785 1934 34 .uleb128 0x34
+ 28786 1935 BB0D0000 .long 0xdbb
+ 28787 1939 03 .byte 0x3
+ 28788 193a 91 .byte 0x91
+ 28789 193b CC55 .sleb128 -5428
+ 28790 193d 00 .byte 0x0
+ 28791 193e 00 .byte 0x0
+ 28792 193f 00 .byte 0x0
+ 28793 1940 00 .byte 0x0
+ 28794 1941 36 .uleb128 0x36
+ 28795 1942 00000000 .quad .LBB519
+ 28795 00000000
+ 28796 194a 00000000 .quad .LBE519
+ 28796 00000000
+ 28797 1952 61190000 .long 0x1961
+ 28798 1956 34 .uleb128 0x34
+ 28799 1957 280C0000 .long 0xc28
+ 28800 195b 04 .byte 0x4
+ 28801 195c 91 .byte 0x91
+ 28802 195d 80B87F .sleb128 -9216
+ 28803 1960 00 .byte 0x0
+ 28804 1961 31 .uleb128 0x31
+ 28805 1962 520E0000 .long 0xe52
+ 28806 1966 00000000 .quad .LBB520
+ 28806 00000000
+ 28807 196e 00000000 .quad .LBE520
+ 28807 00000000
+ 28808 1976 02 .byte 0x2
+ 28809 1977 9606 .value 0x696
+ 28810 1979 90190000 .long 0x1990
+ 28811 197d 32 .uleb128 0x32
+ 28812 197e 6D0E0000 .long 0xe6d
+ 28813 1982 03 .byte 0x3
+ 28814 1983 91 .byte 0x91
+ 28815 1984 D055 .sleb128 -5424
+ 28816 1986 32 .uleb128 0x32
+ 28817 1987 630E0000 .long 0xe63
+ 28818 198b 03 .byte 0x3
+ 28819 198c 91 .byte 0x91
+ 28820 198d E055 .sleb128 -5408
+ 28821 198f 00 .byte 0x0
+ 28822 1990 36 .uleb128 0x36
+ 28823 1991 00000000 .quad .LBB522
+ 28823 00000000
+ 28824 1999 00000000 .quad .LBE522
+ 28824 00000000
+ 28825 19a1 B0190000 .long 0x19b0
+ 28826 19a5 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 828
+
+
+ 28827 19a6 380C0000 .long 0xc38
+ 28828 19aa 04 .byte 0x4
+ 28829 19ab 91 .byte 0x91
+ 28830 19ac F0B77F .sleb128 -9232
+ 28831 19af 00 .byte 0x0
+ 28832 19b0 31 .uleb128 0x31
+ 28833 19b1 780E0000 .long 0xe78
+ 28834 19b5 00000000 .quad .LBB523
+ 28834 00000000
+ 28835 19bd 00000000 .quad .LBE523
+ 28835 00000000
+ 28836 19c5 02 .byte 0x2
+ 28837 19c6 9806 .value 0x698
+ 28838 19c8 F2190000 .long 0x19f2
+ 28839 19cc 32 .uleb128 0x32
+ 28840 19cd 8A0E0000 .long 0xe8a
+ 28841 19d1 03 .byte 0x3
+ 28842 19d2 91 .byte 0x91
+ 28843 19d3 F055 .sleb128 -5392
+ 28844 19d5 33 .uleb128 0x33
+ 28845 19d6 00000000 .quad .LBB524
+ 28845 00000000
+ 28846 19de 00000000 .quad .LBE524
+ 28846 00000000
+ 28847 19e6 34 .uleb128 0x34
+ 28848 19e7 960E0000 .long 0xe96
+ 28849 19eb 04 .byte 0x4
+ 28850 19ec 91 .byte 0x91
+ 28851 19ed C0B97F .sleb128 -9024
+ 28852 19f0 00 .byte 0x0
+ 28853 19f1 00 .byte 0x0
+ 28854 19f2 33 .uleb128 0x33
+ 28855 19f3 00000000 .quad .LBB525
+ 28855 00000000
+ 28856 19fb 00000000 .quad .LBE525
+ 28856 00000000
+ 28857 1a03 34 .uleb128 0x34
+ 28858 1a04 440C0000 .long 0xc44
+ 28859 1a08 04 .byte 0x4
+ 28860 1a09 91 .byte 0x91
+ 28861 1a0a E0B77F .sleb128 -9248
+ 28862 1a0d 00 .byte 0x0
+ 28863 1a0e 00 .byte 0x0
+ 28864 1a0f 00 .byte 0x0
+ 28865 1a10 31 .uleb128 0x31
+ 28866 1a11 A30E0000 .long 0xea3
+ 28867 1a15 00000000 .quad .LBB526
+ 28867 00000000
+ 28868 1a1d 00000000 .quad .LBE526
+ 28868 00000000
+ 28869 1a25 02 .byte 0x2
+ 28870 1a26 D106 .value 0x6d1
+ 28871 1a28 141B0000 .long 0x1b14
+ 28872 1a2c 32 .uleb128 0x32
+ 28873 1a2d B50E0000 .long 0xeb5
+ 28874 1a31 03 .byte 0x3
+ 28875 1a32 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 829
+
+
+ 28876 1a33 8056 .sleb128 -5376
+ 28877 1a35 33 .uleb128 0x33
+ 28878 1a36 00000000 .quad .LBB527
+ 28878 00000000
+ 28879 1a3e 00000000 .quad .LBE527
+ 28879 00000000
+ 28880 1a46 34 .uleb128 0x34
+ 28881 1a47 C10E0000 .long 0xec1
+ 28882 1a4b 04 .byte 0x4
+ 28883 1a4c 76 .byte 0x76
+ 28884 1a4d A0B17F .sleb128 -10080
+ 28885 1a50 31 .uleb128 0x31
+ 28886 1a51 CE0E0000 .long 0xece
+ 28887 1a55 00000000 .quad .LBB528
+ 28887 00000000
+ 28888 1a5d 00000000 .quad .LBE528
+ 28888 00000000
+ 28889 1a65 02 .byte 0x2
+ 28890 1a66 1F06 .value 0x61f
+ 28891 1a68 921A0000 .long 0x1a92
+ 28892 1a6c 32 .uleb128 0x32
+ 28893 1a6d E00E0000 .long 0xee0
+ 28894 1a71 03 .byte 0x3
+ 28895 1a72 91 .byte 0x91
+ 28896 1a73 9056 .sleb128 -5360
+ 28897 1a75 33 .uleb128 0x33
+ 28898 1a76 00000000 .quad .LBB529
+ 28898 00000000
+ 28899 1a7e 00000000 .quad .LBE529
+ 28899 00000000
+ 28900 1a86 34 .uleb128 0x34
+ 28901 1a87 EC0E0000 .long 0xeec
+ 28902 1a8b 04 .byte 0x4
+ 28903 1a8c 91 .byte 0x91
+ 28904 1a8d D0B97F .sleb128 -9008
+ 28905 1a90 00 .byte 0x0
+ 28906 1a91 00 .byte 0x0
+ 28907 1a92 31 .uleb128 0x31
+ 28908 1a93 CE0E0000 .long 0xece
+ 28909 1a97 00000000 .quad .LBB530
+ 28909 00000000
+ 28910 1a9f 00000000 .quad .LBE530
+ 28910 00000000
+ 28911 1aa7 02 .byte 0x2
+ 28912 1aa8 2006 .value 0x620
+ 28913 1aaa D41A0000 .long 0x1ad4
+ 28914 1aae 32 .uleb128 0x32
+ 28915 1aaf E00E0000 .long 0xee0
+ 28916 1ab3 03 .byte 0x3
+ 28917 1ab4 91 .byte 0x91
+ 28918 1ab5 A056 .sleb128 -5344
+ 28919 1ab7 33 .uleb128 0x33
+ 28920 1ab8 00000000 .quad .LBB531
+ 28920 00000000
+ 28921 1ac0 00000000 .quad .LBE531
+ 28921 00000000
+ 28922 1ac8 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 830
+
+
+ 28923 1ac9 EC0E0000 .long 0xeec
+ 28924 1acd 04 .byte 0x4
+ 28925 1ace 91 .byte 0x91
+ 28926 1acf E0B97F .sleb128 -8992
+ 28927 1ad2 00 .byte 0x0
+ 28928 1ad3 00 .byte 0x0
+ 28929 1ad4 35 .uleb128 0x35
+ 28930 1ad5 CE0E0000 .long 0xece
+ 28931 1ad9 00000000 .quad .LBB532
+ 28931 00000000
+ 28932 1ae1 00000000 .quad .LBE532
+ 28932 00000000
+ 28933 1ae9 02 .byte 0x2
+ 28934 1aea 2106 .value 0x621
+ 28935 1aec 32 .uleb128 0x32
+ 28936 1aed E00E0000 .long 0xee0
+ 28937 1af1 03 .byte 0x3
+ 28938 1af2 91 .byte 0x91
+ 28939 1af3 B056 .sleb128 -5328
+ 28940 1af5 33 .uleb128 0x33
+ 28941 1af6 00000000 .quad .LBB533
+ 28941 00000000
+ 28942 1afe 00000000 .quad .LBE533
+ 28942 00000000
+ 28943 1b06 34 .uleb128 0x34
+ 28944 1b07 EC0E0000 .long 0xeec
+ 28945 1b0b 04 .byte 0x4
+ 28946 1b0c 91 .byte 0x91
+ 28947 1b0d F0B97F .sleb128 -8976
+ 28948 1b10 00 .byte 0x0
+ 28949 1b11 00 .byte 0x0
+ 28950 1b12 00 .byte 0x0
+ 28951 1b13 00 .byte 0x0
+ 28952 1b14 31 .uleb128 0x31
+ 28953 1b15 D10B0000 .long 0xbd1
+ 28954 1b19 00000000 .quad .LBB534
+ 28954 00000000
+ 28955 1b21 00000000 .quad .LBE534
+ 28955 00000000
+ 28956 1b29 02 .byte 0x2
+ 28957 1b2a D206 .value 0x6d2
+ 28958 1b2c CB1F0000 .long 0x1fcb
+ 28959 1b30 32 .uleb128 0x32
+ 28960 1b31 EF0B0000 .long 0xbef
+ 28961 1b35 03 .byte 0x3
+ 28962 1b36 91 .byte 0x91
+ 28963 1b37 CC56 .sleb128 -5300
+ 28964 1b39 32 .uleb128 0x32
+ 28965 1b3a E30B0000 .long 0xbe3
+ 28966 1b3e 03 .byte 0x3
+ 28967 1b3f 91 .byte 0x91
+ 28968 1b40 D056 .sleb128 -5296
+ 28969 1b42 33 .uleb128 0x33
+ 28970 1b43 00000000 .quad .LBB535
+ 28970 00000000
+ 28971 1b4b 00000000 .quad .LBE535
+ 28971 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 831
+
+
+ 28972 1b53 34 .uleb128 0x34
+ 28973 1b54 FB0B0000 .long 0xbfb
+ 28974 1b58 04 .byte 0x4
+ 28975 1b59 76 .byte 0x76
+ 28976 1b5a C0B17F .sleb128 -10048
+ 28977 1b5d 34 .uleb128 0x34
+ 28978 1b5e 070C0000 .long 0xc07
+ 28979 1b62 04 .byte 0x4
+ 28980 1b63 76 .byte 0x76
+ 28981 1b64 B0B17F .sleb128 -10064
+ 28982 1b67 31 .uleb128 0x31
+ 28983 1b68 500C0000 .long 0xc50
+ 28984 1b6c 00000000 .quad .LBB536
+ 28984 00000000
+ 28985 1b74 00000000 .quad .LBE536
+ 28985 00000000
+ 28986 1b7c 02 .byte 0x2
+ 28987 1b7d 9106 .value 0x691
+ 28988 1b7f BB1B0000 .long 0x1bbb
+ 28989 1b83 32 .uleb128 0x32
+ 28990 1b84 7A0C0000 .long 0xc7a
+ 28991 1b88 03 .byte 0x3
+ 28992 1b89 91 .byte 0x91
+ 28993 1b8a E856 .sleb128 -5272
+ 28994 1b8c 32 .uleb128 0x32
+ 28995 1b8d 6E0C0000 .long 0xc6e
+ 28996 1b91 03 .byte 0x3
+ 28997 1b92 91 .byte 0x91
+ 28998 1b93 EC56 .sleb128 -5268
+ 28999 1b95 32 .uleb128 0x32
+ 29000 1b96 620C0000 .long 0xc62
+ 29001 1b9a 03 .byte 0x3
+ 29002 1b9b 91 .byte 0x91
+ 29003 1b9c F056 .sleb128 -5264
+ 29004 1b9e 33 .uleb128 0x33
+ 29005 1b9f 00000000 .quad .LBB537
+ 29005 00000000
+ 29006 1ba7 00000000 .quad .LBE537
+ 29006 00000000
+ 29007 1baf 34 .uleb128 0x34
+ 29008 1bb0 860C0000 .long 0xc86
+ 29009 1bb4 04 .byte 0x4
+ 29010 1bb5 91 .byte 0x91
+ 29011 1bb6 C0BA7F .sleb128 -8896
+ 29012 1bb9 00 .byte 0x0
+ 29013 1bba 00 .byte 0x0
+ 29014 1bbb 31 .uleb128 0x31
+ 29015 1bbc 910C0000 .long 0xc91
+ 29016 1bc0 00000000 .quad .LBB538
+ 29016 00000000
+ 29017 1bc8 00000000 .quad .LBE538
+ 29017 00000000
+ 29018 1bd0 02 .byte 0x2
+ 29019 1bd1 9206 .value 0x692
+ 29020 1bd3 311E0000 .long 0x1e31
+ 29021 1bd7 32 .uleb128 0x32
+ 29022 1bd8 A30C0000 .long 0xca3
+
GAS LISTING /tmp/ccMa7HLZ.s page 832
+
+
+ 29023 1bdc 03 .byte 0x3
+ 29024 1bdd 91 .byte 0x91
+ 29025 1bde 8057 .sleb128 -5248
+ 29026 1be0 35 .uleb128 0x35
+ 29027 1be1 B00C0000 .long 0xcb0
+ 29028 1be5 00000000 .quad .LBB540
+ 29028 00000000
+ 29029 1bed 00000000 .quad .LBE540
+ 29029 00000000
+ 29030 1bf5 02 .byte 0x2
+ 29031 1bf6 7D03 .value 0x37d
+ 29032 1bf8 32 .uleb128 0x32
+ 29033 1bf9 CE0C0000 .long 0xcce
+ 29034 1bfd 03 .byte 0x3
+ 29035 1bfe 91 .byte 0x91
+ 29036 1bff 9857 .sleb128 -5224
+ 29037 1c01 32 .uleb128 0x32
+ 29038 1c02 C20C0000 .long 0xcc2
+ 29039 1c06 03 .byte 0x3
+ 29040 1c07 91 .byte 0x91
+ 29041 1c08 A057 .sleb128 -5216
+ 29042 1c0a 33 .uleb128 0x33
+ 29043 1c0b 00000000 .quad .LBB541
+ 29043 00000000
+ 29044 1c13 00000000 .quad .LBE541
+ 29044 00000000
+ 29045 1c1b 34 .uleb128 0x34
+ 29046 1c1c DA0C0000 .long 0xcda
+ 29047 1c20 03 .byte 0x3
+ 29048 1c21 91 .byte 0x91
+ 29049 1c22 F057 .sleb128 -5136
+ 29050 1c24 34 .uleb128 0x34
+ 29051 1c25 E50C0000 .long 0xce5
+ 29052 1c29 03 .byte 0x3
+ 29053 1c2a 91 .byte 0x91
+ 29054 1c2b E057 .sleb128 -5152
+ 29055 1c2d 34 .uleb128 0x34
+ 29056 1c2e F00C0000 .long 0xcf0
+ 29057 1c32 03 .byte 0x3
+ 29058 1c33 91 .byte 0x91
+ 29059 1c34 D057 .sleb128 -5168
+ 29060 1c36 34 .uleb128 0x34
+ 29061 1c37 FC0C0000 .long 0xcfc
+ 29062 1c3b 03 .byte 0x3
+ 29063 1c3c 91 .byte 0x91
+ 29064 1c3d C057 .sleb128 -5184
+ 29065 1c3f 34 .uleb128 0x34
+ 29066 1c40 080D0000 .long 0xd08
+ 29067 1c44 03 .byte 0x3
+ 29068 1c45 91 .byte 0x91
+ 29069 1c46 BC57 .sleb128 -5188
+ 29070 1c48 31 .uleb128 0x31
+ 29071 1c49 1F0D0000 .long 0xd1f
+ 29072 1c4d 00000000 .quad .LBB542
+ 29072 00000000
+ 29073 1c55 00000000 .quad .LBE542
+ 29073 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 833
+
+
+ 29074 1c5d 02 .byte 0x2
+ 29075 1c5e 5603 .value 0x356
+ 29076 1c60 771C0000 .long 0x1c77
+ 29077 1c64 32 .uleb128 0x32
+ 29078 1c65 3A0D0000 .long 0xd3a
+ 29079 1c69 03 .byte 0x3
+ 29080 1c6a 91 .byte 0x91
+ 29081 1c6b 8058 .sleb128 -5120
+ 29082 1c6d 32 .uleb128 0x32
+ 29083 1c6e 300D0000 .long 0xd30
+ 29084 1c72 03 .byte 0x3
+ 29085 1c73 91 .byte 0x91
+ 29086 1c74 9058 .sleb128 -5104
+ 29087 1c76 00 .byte 0x0
+ 29088 1c77 31 .uleb128 0x31
+ 29089 1c78 450D0000 .long 0xd45
+ 29090 1c7c 00000000 .quad .LBB544
+ 29090 00000000
+ 29091 1c84 00000000 .quad .LBE544
+ 29091 00000000
+ 29092 1c8c 02 .byte 0x2
+ 29093 1c8d 5E03 .value 0x35e
+ 29094 1c8f A61C0000 .long 0x1ca6
+ 29095 1c93 32 .uleb128 0x32
+ 29096 1c94 620D0000 .long 0xd62
+ 29097 1c98 03 .byte 0x3
+ 29098 1c99 91 .byte 0x91
+ 29099 1c9a A058 .sleb128 -5088
+ 29100 1c9c 32 .uleb128 0x32
+ 29101 1c9d 570D0000 .long 0xd57
+ 29102 1ca1 03 .byte 0x3
+ 29103 1ca2 91 .byte 0x91
+ 29104 1ca3 B058 .sleb128 -5072
+ 29105 1ca5 00 .byte 0x0
+ 29106 1ca6 31 .uleb128 0x31
+ 29107 1ca7 6E0D0000 .long 0xd6e
+ 29108 1cab 00000000 .quad .LBB546
+ 29108 00000000
+ 29109 1cb3 00000000 .quad .LBE546
+ 29109 00000000
+ 29110 1cbb 02 .byte 0x2
+ 29111 1cbc 6403 .value 0x364
+ 29112 1cbe 0E1D0000 .long 0x1d0e
+ 29113 1cc2 32 .uleb128 0x32
+ 29114 1cc3 8C0D0000 .long 0xd8c
+ 29115 1cc7 03 .byte 0x3
+ 29116 1cc8 91 .byte 0x91
+ 29117 1cc9 C058 .sleb128 -5056
+ 29118 1ccb 32 .uleb128 0x32
+ 29119 1ccc 800D0000 .long 0xd80
+ 29120 1cd0 03 .byte 0x3
+ 29121 1cd1 91 .byte 0x91
+ 29122 1cd2 D058 .sleb128 -5040
+ 29123 1cd4 33 .uleb128 0x33
+ 29124 1cd5 00000000 .quad .LBB547
+ 29124 00000000
+ 29125 1cdd 00000000 .quad .LBE547
+
GAS LISTING /tmp/ccMa7HLZ.s page 834
+
+
+ 29125 00000000
+ 29126 1ce5 34 .uleb128 0x34
+ 29127 1ce6 980D0000 .long 0xd98
+ 29128 1cea 04 .byte 0x4
+ 29129 1ceb 91 .byte 0x91
+ 29130 1cec F0BA7F .sleb128 -8848
+ 29131 1cef 34 .uleb128 0x34
+ 29132 1cf0 A40D0000 .long 0xda4
+ 29133 1cf4 04 .byte 0x4
+ 29134 1cf5 91 .byte 0x91
+ 29135 1cf6 E0BA7F .sleb128 -8864
+ 29136 1cf9 34 .uleb128 0x34
+ 29137 1cfa AF0D0000 .long 0xdaf
+ 29138 1cfe 04 .byte 0x4
+ 29139 1cff 91 .byte 0x91
+ 29140 1d00 D0BA7F .sleb128 -8880
+ 29141 1d03 34 .uleb128 0x34
+ 29142 1d04 BB0D0000 .long 0xdbb
+ 29143 1d08 03 .byte 0x3
+ 29144 1d09 91 .byte 0x91
+ 29145 1d0a EC58 .sleb128 -5012
+ 29146 1d0c 00 .byte 0x0
+ 29147 1d0d 00 .byte 0x0
+ 29148 1d0e 31 .uleb128 0x31
+ 29149 1d0f C70D0000 .long 0xdc7
+ 29150 1d13 00000000 .quad .LBB548
+ 29150 00000000
+ 29151 1d1b 00000000 .quad .LBE548
+ 29151 00000000
+ 29152 1d23 02 .byte 0x2
+ 29153 1d24 6603 .value 0x366
+ 29154 1d26 3D1D0000 .long 0x1d3d
+ 29155 1d2a 32 .uleb128 0x32
+ 29156 1d2b E20D0000 .long 0xde2
+ 29157 1d2f 03 .byte 0x3
+ 29158 1d30 91 .byte 0x91
+ 29159 1d31 F058 .sleb128 -5008
+ 29160 1d33 32 .uleb128 0x32
+ 29161 1d34 D80D0000 .long 0xdd8
+ 29162 1d38 03 .byte 0x3
+ 29163 1d39 91 .byte 0x91
+ 29164 1d3a 8059 .sleb128 -4992
+ 29165 1d3c 00 .byte 0x0
+ 29166 1d3d 31 .uleb128 0x31
+ 29167 1d3e 6E0D0000 .long 0xd6e
+ 29168 1d42 00000000 .quad .LBB550
+ 29168 00000000
+ 29169 1d4a 00000000 .quad .LBE550
+ 29169 00000000
+ 29170 1d52 02 .byte 0x2
+ 29171 1d53 6803 .value 0x368
+ 29172 1d55 A51D0000 .long 0x1da5
+ 29173 1d59 32 .uleb128 0x32
+ 29174 1d5a 8C0D0000 .long 0xd8c
+ 29175 1d5e 03 .byte 0x3
+ 29176 1d5f 91 .byte 0x91
+ 29177 1d60 9059 .sleb128 -4976
+
GAS LISTING /tmp/ccMa7HLZ.s page 835
+
+
+ 29178 1d62 32 .uleb128 0x32
+ 29179 1d63 800D0000 .long 0xd80
+ 29180 1d67 03 .byte 0x3
+ 29181 1d68 91 .byte 0x91
+ 29182 1d69 A059 .sleb128 -4960
+ 29183 1d6b 33 .uleb128 0x33
+ 29184 1d6c 00000000 .quad .LBB551
+ 29184 00000000
+ 29185 1d74 00000000 .quad .LBE551
+ 29185 00000000
+ 29186 1d7c 34 .uleb128 0x34
+ 29187 1d7d 980D0000 .long 0xd98
+ 29188 1d81 04 .byte 0x4
+ 29189 1d82 91 .byte 0x91
+ 29190 1d83 A0BB7F .sleb128 -8800
+ 29191 1d86 34 .uleb128 0x34
+ 29192 1d87 A40D0000 .long 0xda4
+ 29193 1d8b 04 .byte 0x4
+ 29194 1d8c 91 .byte 0x91
+ 29195 1d8d 90BB7F .sleb128 -8816
+ 29196 1d90 34 .uleb128 0x34
+ 29197 1d91 AF0D0000 .long 0xdaf
+ 29198 1d95 04 .byte 0x4
+ 29199 1d96 91 .byte 0x91
+ 29200 1d97 80BB7F .sleb128 -8832
+ 29201 1d9a 34 .uleb128 0x34
+ 29202 1d9b BB0D0000 .long 0xdbb
+ 29203 1d9f 03 .byte 0x3
+ 29204 1da0 91 .byte 0x91
+ 29205 1da1 BC59 .sleb128 -4932
+ 29206 1da3 00 .byte 0x0
+ 29207 1da4 00 .byte 0x0
+ 29208 1da5 31 .uleb128 0x31
+ 29209 1da6 C70D0000 .long 0xdc7
+ 29210 1daa 00000000 .quad .LBB552
+ 29210 00000000
+ 29211 1db2 00000000 .quad .LBE552
+ 29211 00000000
+ 29212 1dba 02 .byte 0x2
+ 29213 1dbb 6A03 .value 0x36a
+ 29214 1dbd D41D0000 .long 0x1dd4
+ 29215 1dc1 32 .uleb128 0x32
+ 29216 1dc2 E20D0000 .long 0xde2
+ 29217 1dc6 03 .byte 0x3
+ 29218 1dc7 91 .byte 0x91
+ 29219 1dc8 C059 .sleb128 -4928
+ 29220 1dca 32 .uleb128 0x32
+ 29221 1dcb D80D0000 .long 0xdd8
+ 29222 1dcf 03 .byte 0x3
+ 29223 1dd0 91 .byte 0x91
+ 29224 1dd1 D059 .sleb128 -4912
+ 29225 1dd3 00 .byte 0x0
+ 29226 1dd4 31 .uleb128 0x31
+ 29227 1dd5 ED0D0000 .long 0xded
+ 29228 1dd9 00000000 .quad .LBB554
+ 29228 00000000
+ 29229 1de1 00000000 .quad .LBE554
+
GAS LISTING /tmp/ccMa7HLZ.s page 836
+
+
+ 29229 00000000
+ 29230 1de9 02 .byte 0x2
+ 29231 1dea 6C03 .value 0x36c
+ 29232 1dec 031E0000 .long 0x1e03
+ 29233 1df0 32 .uleb128 0x32
+ 29234 1df1 0A0E0000 .long 0xe0a
+ 29235 1df5 03 .byte 0x3
+ 29236 1df6 91 .byte 0x91
+ 29237 1df7 E059 .sleb128 -4896
+ 29238 1df9 32 .uleb128 0x32
+ 29239 1dfa FF0D0000 .long 0xdff
+ 29240 1dfe 03 .byte 0x3
+ 29241 1dff 91 .byte 0x91
+ 29242 1e00 F059 .sleb128 -4880
+ 29243 1e02 00 .byte 0x0
+ 29244 1e03 35 .uleb128 0x35
+ 29245 1e04 1F0D0000 .long 0xd1f
+ 29246 1e08 00000000 .quad .LBB556
+ 29246 00000000
+ 29247 1e10 00000000 .quad .LBE556
+ 29247 00000000
+ 29248 1e18 02 .byte 0x2
+ 29249 1e19 6E03 .value 0x36e
+ 29250 1e1b 32 .uleb128 0x32
+ 29251 1e1c 3A0D0000 .long 0xd3a
+ 29252 1e20 03 .byte 0x3
+ 29253 1e21 91 .byte 0x91
+ 29254 1e22 805A .sleb128 -4864
+ 29255 1e24 32 .uleb128 0x32
+ 29256 1e25 300D0000 .long 0xd30
+ 29257 1e29 03 .byte 0x3
+ 29258 1e2a 91 .byte 0x91
+ 29259 1e2b 905A .sleb128 -4848
+ 29260 1e2d 00 .byte 0x0
+ 29261 1e2e 00 .byte 0x0
+ 29262 1e2f 00 .byte 0x0
+ 29263 1e30 00 .byte 0x0
+ 29264 1e31 36 .uleb128 0x36
+ 29265 1e32 00000000 .quad .LBB558
+ 29265 00000000
+ 29266 1e3a 00000000 .quad .LBE558
+ 29266 00000000
+ 29267 1e42 511E0000 .long 0x1e51
+ 29268 1e46 34 .uleb128 0x34
+ 29269 1e47 180C0000 .long 0xc18
+ 29270 1e4b 04 .byte 0x4
+ 29271 1e4c 91 .byte 0x91
+ 29272 1e4d B0BA7F .sleb128 -8912
+ 29273 1e50 00 .byte 0x0
+ 29274 1e51 31 .uleb128 0x31
+ 29275 1e52 160E0000 .long 0xe16
+ 29276 1e56 00000000 .quad .LBB559
+ 29276 00000000
+ 29277 1e5e 00000000 .quad .LBE559
+ 29277 00000000
+ 29278 1e66 02 .byte 0x2
+ 29279 1e67 9406 .value 0x694
+
GAS LISTING /tmp/ccMa7HLZ.s page 837
+
+
+ 29280 1e69 FC1E0000 .long 0x1efc
+ 29281 1e6d 32 .uleb128 0x32
+ 29282 1e6e 280E0000 .long 0xe28
+ 29283 1e72 03 .byte 0x3
+ 29284 1e73 91 .byte 0x91
+ 29285 1e74 A05A .sleb128 -4832
+ 29286 1e76 33 .uleb128 0x33
+ 29287 1e77 00000000 .quad .LBB560
+ 29287 00000000
+ 29288 1e7f 00000000 .quad .LBE560
+ 29288 00000000
+ 29289 1e87 34 .uleb128 0x34
+ 29290 1e88 340E0000 .long 0xe34
+ 29291 1e8c 09 .byte 0x9
+ 29292 1e8d 03 .byte 0x3
+ 29293 1e8e 00000000 .quad ShiftRowTable.6768
+ 29293 00000000
+ 29294 1e96 35 .uleb128 0x35
+ 29295 1e97 6E0D0000 .long 0xd6e
+ 29296 1e9b 00000000 .quad .LBB561
+ 29296 00000000
+ 29297 1ea3 00000000 .quad .LBE561
+ 29297 00000000
+ 29298 1eab 02 .byte 0x2
+ 29299 1eac 9B02 .value 0x29b
+ 29300 1eae 32 .uleb128 0x32
+ 29301 1eaf 8C0D0000 .long 0xd8c
+ 29302 1eb3 03 .byte 0x3
+ 29303 1eb4 91 .byte 0x91
+ 29304 1eb5 B05A .sleb128 -4816
+ 29305 1eb7 32 .uleb128 0x32
+ 29306 1eb8 800D0000 .long 0xd80
+ 29307 1ebc 03 .byte 0x3
+ 29308 1ebd 91 .byte 0x91
+ 29309 1ebe C05A .sleb128 -4800
+ 29310 1ec0 33 .uleb128 0x33
+ 29311 1ec1 00000000 .quad .LBB562
+ 29311 00000000
+ 29312 1ec9 00000000 .quad .LBE562
+ 29312 00000000
+ 29313 1ed1 34 .uleb128 0x34
+ 29314 1ed2 980D0000 .long 0xd98
+ 29315 1ed6 04 .byte 0x4
+ 29316 1ed7 91 .byte 0x91
+ 29317 1ed8 D0BB7F .sleb128 -8752
+ 29318 1edb 34 .uleb128 0x34
+ 29319 1edc A40D0000 .long 0xda4
+ 29320 1ee0 04 .byte 0x4
+ 29321 1ee1 91 .byte 0x91
+ 29322 1ee2 C0BB7F .sleb128 -8768
+ 29323 1ee5 34 .uleb128 0x34
+ 29324 1ee6 AF0D0000 .long 0xdaf
+ 29325 1eea 04 .byte 0x4
+ 29326 1eeb 91 .byte 0x91
+ 29327 1eec B0BB7F .sleb128 -8784
+ 29328 1eef 34 .uleb128 0x34
+ 29329 1ef0 BB0D0000 .long 0xdbb
+
GAS LISTING /tmp/ccMa7HLZ.s page 838
+
+
+ 29330 1ef4 03 .byte 0x3
+ 29331 1ef5 91 .byte 0x91
+ 29332 1ef6 DC5A .sleb128 -4772
+ 29333 1ef8 00 .byte 0x0
+ 29334 1ef9 00 .byte 0x0
+ 29335 1efa 00 .byte 0x0
+ 29336 1efb 00 .byte 0x0
+ 29337 1efc 36 .uleb128 0x36
+ 29338 1efd 00000000 .quad .LBB563
+ 29338 00000000
+ 29339 1f05 00000000 .quad .LBE563
+ 29339 00000000
+ 29340 1f0d 1C1F0000 .long 0x1f1c
+ 29341 1f11 34 .uleb128 0x34
+ 29342 1f12 280C0000 .long 0xc28
+ 29343 1f16 04 .byte 0x4
+ 29344 1f17 91 .byte 0x91
+ 29345 1f18 A0BA7F .sleb128 -8928
+ 29346 1f1b 00 .byte 0x0
+ 29347 1f1c 31 .uleb128 0x31
+ 29348 1f1d 520E0000 .long 0xe52
+ 29349 1f21 00000000 .quad .LBB564
+ 29349 00000000
+ 29350 1f29 00000000 .quad .LBE564
+ 29350 00000000
+ 29351 1f31 02 .byte 0x2
+ 29352 1f32 9606 .value 0x696
+ 29353 1f34 4B1F0000 .long 0x1f4b
+ 29354 1f38 32 .uleb128 0x32
+ 29355 1f39 6D0E0000 .long 0xe6d
+ 29356 1f3d 03 .byte 0x3
+ 29357 1f3e 91 .byte 0x91
+ 29358 1f3f E05A .sleb128 -4768
+ 29359 1f41 32 .uleb128 0x32
+ 29360 1f42 630E0000 .long 0xe63
+ 29361 1f46 03 .byte 0x3
+ 29362 1f47 91 .byte 0x91
+ 29363 1f48 F05A .sleb128 -4752
+ 29364 1f4a 00 .byte 0x0
+ 29365 1f4b 36 .uleb128 0x36
+ 29366 1f4c 00000000 .quad .LBB566
+ 29366 00000000
+ 29367 1f54 00000000 .quad .LBE566
+ 29367 00000000
+ 29368 1f5c 6B1F0000 .long 0x1f6b
+ 29369 1f60 34 .uleb128 0x34
+ 29370 1f61 380C0000 .long 0xc38
+ 29371 1f65 04 .byte 0x4
+ 29372 1f66 91 .byte 0x91
+ 29373 1f67 90BA7F .sleb128 -8944
+ 29374 1f6a 00 .byte 0x0
+ 29375 1f6b 31 .uleb128 0x31
+ 29376 1f6c 780E0000 .long 0xe78
+ 29377 1f70 00000000 .quad .LBB567
+ 29377 00000000
+ 29378 1f78 00000000 .quad .LBE567
+ 29378 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 839
+
+
+ 29379 1f80 02 .byte 0x2
+ 29380 1f81 9806 .value 0x698
+ 29381 1f83 AD1F0000 .long 0x1fad
+ 29382 1f87 32 .uleb128 0x32
+ 29383 1f88 8A0E0000 .long 0xe8a
+ 29384 1f8c 03 .byte 0x3
+ 29385 1f8d 91 .byte 0x91
+ 29386 1f8e 805B .sleb128 -4736
+ 29387 1f90 33 .uleb128 0x33
+ 29388 1f91 00000000 .quad .LBB568
+ 29388 00000000
+ 29389 1f99 00000000 .quad .LBE568
+ 29389 00000000
+ 29390 1fa1 34 .uleb128 0x34
+ 29391 1fa2 960E0000 .long 0xe96
+ 29392 1fa6 04 .byte 0x4
+ 29393 1fa7 91 .byte 0x91
+ 29394 1fa8 E0BB7F .sleb128 -8736
+ 29395 1fab 00 .byte 0x0
+ 29396 1fac 00 .byte 0x0
+ 29397 1fad 33 .uleb128 0x33
+ 29398 1fae 00000000 .quad .LBB569
+ 29398 00000000
+ 29399 1fb6 00000000 .quad .LBE569
+ 29399 00000000
+ 29400 1fbe 34 .uleb128 0x34
+ 29401 1fbf 440C0000 .long 0xc44
+ 29402 1fc3 04 .byte 0x4
+ 29403 1fc4 91 .byte 0x91
+ 29404 1fc5 80BA7F .sleb128 -8960
+ 29405 1fc8 00 .byte 0x0
+ 29406 1fc9 00 .byte 0x0
+ 29407 1fca 00 .byte 0x0
+ 29408 1fcb 31 .uleb128 0x31
+ 29409 1fcc A30E0000 .long 0xea3
+ 29410 1fd0 00000000 .quad .LBB570
+ 29410 00000000
+ 29411 1fd8 00000000 .quad .LBE570
+ 29411 00000000
+ 29412 1fe0 02 .byte 0x2
+ 29413 1fe1 D206 .value 0x6d2
+ 29414 1fe3 CF200000 .long 0x20cf
+ 29415 1fe7 32 .uleb128 0x32
+ 29416 1fe8 B50E0000 .long 0xeb5
+ 29417 1fec 03 .byte 0x3
+ 29418 1fed 91 .byte 0x91
+ 29419 1fee 905B .sleb128 -4720
+ 29420 1ff0 33 .uleb128 0x33
+ 29421 1ff1 00000000 .quad .LBB571
+ 29421 00000000
+ 29422 1ff9 00000000 .quad .LBE571
+ 29422 00000000
+ 29423 2001 34 .uleb128 0x34
+ 29424 2002 C10E0000 .long 0xec1
+ 29425 2006 04 .byte 0x4
+ 29426 2007 76 .byte 0x76
+ 29427 2008 E0B17F .sleb128 -10016
+
GAS LISTING /tmp/ccMa7HLZ.s page 840
+
+
+ 29428 200b 31 .uleb128 0x31
+ 29429 200c CE0E0000 .long 0xece
+ 29430 2010 00000000 .quad .LBB572
+ 29430 00000000
+ 29431 2018 00000000 .quad .LBE572
+ 29431 00000000
+ 29432 2020 02 .byte 0x2
+ 29433 2021 1F06 .value 0x61f
+ 29434 2023 4D200000 .long 0x204d
+ 29435 2027 32 .uleb128 0x32
+ 29436 2028 E00E0000 .long 0xee0
+ 29437 202c 03 .byte 0x3
+ 29438 202d 91 .byte 0x91
+ 29439 202e A05B .sleb128 -4704
+ 29440 2030 33 .uleb128 0x33
+ 29441 2031 00000000 .quad .LBB573
+ 29441 00000000
+ 29442 2039 00000000 .quad .LBE573
+ 29442 00000000
+ 29443 2041 34 .uleb128 0x34
+ 29444 2042 EC0E0000 .long 0xeec
+ 29445 2046 04 .byte 0x4
+ 29446 2047 91 .byte 0x91
+ 29447 2048 F0BB7F .sleb128 -8720
+ 29448 204b 00 .byte 0x0
+ 29449 204c 00 .byte 0x0
+ 29450 204d 31 .uleb128 0x31
+ 29451 204e CE0E0000 .long 0xece
+ 29452 2052 00000000 .quad .LBB574
+ 29452 00000000
+ 29453 205a 00000000 .quad .LBE574
+ 29453 00000000
+ 29454 2062 02 .byte 0x2
+ 29455 2063 2006 .value 0x620
+ 29456 2065 8F200000 .long 0x208f
+ 29457 2069 32 .uleb128 0x32
+ 29458 206a E00E0000 .long 0xee0
+ 29459 206e 03 .byte 0x3
+ 29460 206f 91 .byte 0x91
+ 29461 2070 B05B .sleb128 -4688
+ 29462 2072 33 .uleb128 0x33
+ 29463 2073 00000000 .quad .LBB575
+ 29463 00000000
+ 29464 207b 00000000 .quad .LBE575
+ 29464 00000000
+ 29465 2083 34 .uleb128 0x34
+ 29466 2084 EC0E0000 .long 0xeec
+ 29467 2088 04 .byte 0x4
+ 29468 2089 91 .byte 0x91
+ 29469 208a 80BC7F .sleb128 -8704
+ 29470 208d 00 .byte 0x0
+ 29471 208e 00 .byte 0x0
+ 29472 208f 35 .uleb128 0x35
+ 29473 2090 CE0E0000 .long 0xece
+ 29474 2094 00000000 .quad .LBB576
+ 29474 00000000
+ 29475 209c 00000000 .quad .LBE576
+
GAS LISTING /tmp/ccMa7HLZ.s page 841
+
+
+ 29475 00000000
+ 29476 20a4 02 .byte 0x2
+ 29477 20a5 2106 .value 0x621
+ 29478 20a7 32 .uleb128 0x32
+ 29479 20a8 E00E0000 .long 0xee0
+ 29480 20ac 03 .byte 0x3
+ 29481 20ad 91 .byte 0x91
+ 29482 20ae C05B .sleb128 -4672
+ 29483 20b0 33 .uleb128 0x33
+ 29484 20b1 00000000 .quad .LBB577
+ 29484 00000000
+ 29485 20b9 00000000 .quad .LBE577
+ 29485 00000000
+ 29486 20c1 34 .uleb128 0x34
+ 29487 20c2 EC0E0000 .long 0xeec
+ 29488 20c6 04 .byte 0x4
+ 29489 20c7 91 .byte 0x91
+ 29490 20c8 90BC7F .sleb128 -8688
+ 29491 20cb 00 .byte 0x0
+ 29492 20cc 00 .byte 0x0
+ 29493 20cd 00 .byte 0x0
+ 29494 20ce 00 .byte 0x0
+ 29495 20cf 31 .uleb128 0x31
+ 29496 20d0 D10B0000 .long 0xbd1
+ 29497 20d4 00000000 .quad .LBB578
+ 29497 00000000
+ 29498 20dc 00000000 .quad .LBE578
+ 29498 00000000
+ 29499 20e4 02 .byte 0x2
+ 29500 20e5 D306 .value 0x6d3
+ 29501 20e7 86250000 .long 0x2586
+ 29502 20eb 32 .uleb128 0x32
+ 29503 20ec EF0B0000 .long 0xbef
+ 29504 20f0 03 .byte 0x3
+ 29505 20f1 91 .byte 0x91
+ 29506 20f2 DC5B .sleb128 -4644
+ 29507 20f4 32 .uleb128 0x32
+ 29508 20f5 E30B0000 .long 0xbe3
+ 29509 20f9 03 .byte 0x3
+ 29510 20fa 91 .byte 0x91
+ 29511 20fb E05B .sleb128 -4640
+ 29512 20fd 33 .uleb128 0x33
+ 29513 20fe 00000000 .quad .LBB579
+ 29513 00000000
+ 29514 2106 00000000 .quad .LBE579
+ 29514 00000000
+ 29515 210e 34 .uleb128 0x34
+ 29516 210f FB0B0000 .long 0xbfb
+ 29517 2113 04 .byte 0x4
+ 29518 2114 76 .byte 0x76
+ 29519 2115 80B27F .sleb128 -9984
+ 29520 2118 34 .uleb128 0x34
+ 29521 2119 070C0000 .long 0xc07
+ 29522 211d 04 .byte 0x4
+ 29523 211e 76 .byte 0x76
+ 29524 211f F0B17F .sleb128 -10000
+ 29525 2122 31 .uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s page 842
+
+
+ 29526 2123 500C0000 .long 0xc50
+ 29527 2127 00000000 .quad .LBB580
+ 29527 00000000
+ 29528 212f 00000000 .quad .LBE580
+ 29528 00000000
+ 29529 2137 02 .byte 0x2
+ 29530 2138 9106 .value 0x691
+ 29531 213a 76210000 .long 0x2176
+ 29532 213e 32 .uleb128 0x32
+ 29533 213f 7A0C0000 .long 0xc7a
+ 29534 2143 03 .byte 0x3
+ 29535 2144 91 .byte 0x91
+ 29536 2145 F85B .sleb128 -4616
+ 29537 2147 32 .uleb128 0x32
+ 29538 2148 6E0C0000 .long 0xc6e
+ 29539 214c 03 .byte 0x3
+ 29540 214d 91 .byte 0x91
+ 29541 214e FC5B .sleb128 -4612
+ 29542 2150 32 .uleb128 0x32
+ 29543 2151 620C0000 .long 0xc62
+ 29544 2155 03 .byte 0x3
+ 29545 2156 91 .byte 0x91
+ 29546 2157 805C .sleb128 -4608
+ 29547 2159 33 .uleb128 0x33
+ 29548 215a 00000000 .quad .LBB581
+ 29548 00000000
+ 29549 2162 00000000 .quad .LBE581
+ 29549 00000000
+ 29550 216a 34 .uleb128 0x34
+ 29551 216b 860C0000 .long 0xc86
+ 29552 216f 04 .byte 0x4
+ 29553 2170 91 .byte 0x91
+ 29554 2171 E0BC7F .sleb128 -8608
+ 29555 2174 00 .byte 0x0
+ 29556 2175 00 .byte 0x0
+ 29557 2176 31 .uleb128 0x31
+ 29558 2177 910C0000 .long 0xc91
+ 29559 217b 00000000 .quad .LBB582
+ 29559 00000000
+ 29560 2183 00000000 .quad .LBE582
+ 29560 00000000
+ 29561 218b 02 .byte 0x2
+ 29562 218c 9206 .value 0x692
+ 29563 218e EC230000 .long 0x23ec
+ 29564 2192 32 .uleb128 0x32
+ 29565 2193 A30C0000 .long 0xca3
+ 29566 2197 03 .byte 0x3
+ 29567 2198 91 .byte 0x91
+ 29568 2199 905C .sleb128 -4592
+ 29569 219b 35 .uleb128 0x35
+ 29570 219c B00C0000 .long 0xcb0
+ 29571 21a0 00000000 .quad .LBB584
+ 29571 00000000
+ 29572 21a8 00000000 .quad .LBE584
+ 29572 00000000
+ 29573 21b0 02 .byte 0x2
+ 29574 21b1 7D03 .value 0x37d
+
GAS LISTING /tmp/ccMa7HLZ.s page 843
+
+
+ 29575 21b3 32 .uleb128 0x32
+ 29576 21b4 CE0C0000 .long 0xcce
+ 29577 21b8 03 .byte 0x3
+ 29578 21b9 91 .byte 0x91
+ 29579 21ba A85C .sleb128 -4568
+ 29580 21bc 32 .uleb128 0x32
+ 29581 21bd C20C0000 .long 0xcc2
+ 29582 21c1 03 .byte 0x3
+ 29583 21c2 91 .byte 0x91
+ 29584 21c3 B05C .sleb128 -4560
+ 29585 21c5 33 .uleb128 0x33
+ 29586 21c6 00000000 .quad .LBB585
+ 29586 00000000
+ 29587 21ce 00000000 .quad .LBE585
+ 29587 00000000
+ 29588 21d6 34 .uleb128 0x34
+ 29589 21d7 DA0C0000 .long 0xcda
+ 29590 21db 03 .byte 0x3
+ 29591 21dc 91 .byte 0x91
+ 29592 21dd 805D .sleb128 -4480
+ 29593 21df 34 .uleb128 0x34
+ 29594 21e0 E50C0000 .long 0xce5
+ 29595 21e4 03 .byte 0x3
+ 29596 21e5 91 .byte 0x91
+ 29597 21e6 F05C .sleb128 -4496
+ 29598 21e8 34 .uleb128 0x34
+ 29599 21e9 F00C0000 .long 0xcf0
+ 29600 21ed 03 .byte 0x3
+ 29601 21ee 91 .byte 0x91
+ 29602 21ef E05C .sleb128 -4512
+ 29603 21f1 34 .uleb128 0x34
+ 29604 21f2 FC0C0000 .long 0xcfc
+ 29605 21f6 03 .byte 0x3
+ 29606 21f7 91 .byte 0x91
+ 29607 21f8 D05C .sleb128 -4528
+ 29608 21fa 34 .uleb128 0x34
+ 29609 21fb 080D0000 .long 0xd08
+ 29610 21ff 03 .byte 0x3
+ 29611 2200 91 .byte 0x91
+ 29612 2201 CC5C .sleb128 -4532
+ 29613 2203 31 .uleb128 0x31
+ 29614 2204 1F0D0000 .long 0xd1f
+ 29615 2208 00000000 .quad .LBB586
+ 29615 00000000
+ 29616 2210 00000000 .quad .LBE586
+ 29616 00000000
+ 29617 2218 02 .byte 0x2
+ 29618 2219 5603 .value 0x356
+ 29619 221b 32220000 .long 0x2232
+ 29620 221f 32 .uleb128 0x32
+ 29621 2220 3A0D0000 .long 0xd3a
+ 29622 2224 03 .byte 0x3
+ 29623 2225 91 .byte 0x91
+ 29624 2226 905D .sleb128 -4464
+ 29625 2228 32 .uleb128 0x32
+ 29626 2229 300D0000 .long 0xd30
+ 29627 222d 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 844
+
+
+ 29628 222e 91 .byte 0x91
+ 29629 222f A05D .sleb128 -4448
+ 29630 2231 00 .byte 0x0
+ 29631 2232 31 .uleb128 0x31
+ 29632 2233 450D0000 .long 0xd45
+ 29633 2237 00000000 .quad .LBB588
+ 29633 00000000
+ 29634 223f 00000000 .quad .LBE588
+ 29634 00000000
+ 29635 2247 02 .byte 0x2
+ 29636 2248 5E03 .value 0x35e
+ 29637 224a 61220000 .long 0x2261
+ 29638 224e 32 .uleb128 0x32
+ 29639 224f 620D0000 .long 0xd62
+ 29640 2253 03 .byte 0x3
+ 29641 2254 91 .byte 0x91
+ 29642 2255 B05D .sleb128 -4432
+ 29643 2257 32 .uleb128 0x32
+ 29644 2258 570D0000 .long 0xd57
+ 29645 225c 03 .byte 0x3
+ 29646 225d 91 .byte 0x91
+ 29647 225e C05D .sleb128 -4416
+ 29648 2260 00 .byte 0x0
+ 29649 2261 31 .uleb128 0x31
+ 29650 2262 6E0D0000 .long 0xd6e
+ 29651 2266 00000000 .quad .LBB590
+ 29651 00000000
+ 29652 226e 00000000 .quad .LBE590
+ 29652 00000000
+ 29653 2276 02 .byte 0x2
+ 29654 2277 6403 .value 0x364
+ 29655 2279 C9220000 .long 0x22c9
+ 29656 227d 32 .uleb128 0x32
+ 29657 227e 8C0D0000 .long 0xd8c
+ 29658 2282 03 .byte 0x3
+ 29659 2283 91 .byte 0x91
+ 29660 2284 D05D .sleb128 -4400
+ 29661 2286 32 .uleb128 0x32
+ 29662 2287 800D0000 .long 0xd80
+ 29663 228b 03 .byte 0x3
+ 29664 228c 91 .byte 0x91
+ 29665 228d E05D .sleb128 -4384
+ 29666 228f 33 .uleb128 0x33
+ 29667 2290 00000000 .quad .LBB591
+ 29667 00000000
+ 29668 2298 00000000 .quad .LBE591
+ 29668 00000000
+ 29669 22a0 34 .uleb128 0x34
+ 29670 22a1 980D0000 .long 0xd98
+ 29671 22a5 04 .byte 0x4
+ 29672 22a6 91 .byte 0x91
+ 29673 22a7 90BD7F .sleb128 -8560
+ 29674 22aa 34 .uleb128 0x34
+ 29675 22ab A40D0000 .long 0xda4
+ 29676 22af 04 .byte 0x4
+ 29677 22b0 91 .byte 0x91
+ 29678 22b1 80BD7F .sleb128 -8576
+
GAS LISTING /tmp/ccMa7HLZ.s page 845
+
+
+ 29679 22b4 34 .uleb128 0x34
+ 29680 22b5 AF0D0000 .long 0xdaf
+ 29681 22b9 04 .byte 0x4
+ 29682 22ba 91 .byte 0x91
+ 29683 22bb F0BC7F .sleb128 -8592
+ 29684 22be 34 .uleb128 0x34
+ 29685 22bf BB0D0000 .long 0xdbb
+ 29686 22c3 03 .byte 0x3
+ 29687 22c4 91 .byte 0x91
+ 29688 22c5 FC5D .sleb128 -4356
+ 29689 22c7 00 .byte 0x0
+ 29690 22c8 00 .byte 0x0
+ 29691 22c9 31 .uleb128 0x31
+ 29692 22ca C70D0000 .long 0xdc7
+ 29693 22ce 00000000 .quad .LBB592
+ 29693 00000000
+ 29694 22d6 00000000 .quad .LBE592
+ 29694 00000000
+ 29695 22de 02 .byte 0x2
+ 29696 22df 6603 .value 0x366
+ 29697 22e1 F8220000 .long 0x22f8
+ 29698 22e5 32 .uleb128 0x32
+ 29699 22e6 E20D0000 .long 0xde2
+ 29700 22ea 03 .byte 0x3
+ 29701 22eb 91 .byte 0x91
+ 29702 22ec 805E .sleb128 -4352
+ 29703 22ee 32 .uleb128 0x32
+ 29704 22ef D80D0000 .long 0xdd8
+ 29705 22f3 03 .byte 0x3
+ 29706 22f4 91 .byte 0x91
+ 29707 22f5 905E .sleb128 -4336
+ 29708 22f7 00 .byte 0x0
+ 29709 22f8 31 .uleb128 0x31
+ 29710 22f9 6E0D0000 .long 0xd6e
+ 29711 22fd 00000000 .quad .LBB594
+ 29711 00000000
+ 29712 2305 00000000 .quad .LBE594
+ 29712 00000000
+ 29713 230d 02 .byte 0x2
+ 29714 230e 6803 .value 0x368
+ 29715 2310 60230000 .long 0x2360
+ 29716 2314 32 .uleb128 0x32
+ 29717 2315 8C0D0000 .long 0xd8c
+ 29718 2319 03 .byte 0x3
+ 29719 231a 91 .byte 0x91
+ 29720 231b A05E .sleb128 -4320
+ 29721 231d 32 .uleb128 0x32
+ 29722 231e 800D0000 .long 0xd80
+ 29723 2322 03 .byte 0x3
+ 29724 2323 91 .byte 0x91
+ 29725 2324 B05E .sleb128 -4304
+ 29726 2326 33 .uleb128 0x33
+ 29727 2327 00000000 .quad .LBB595
+ 29727 00000000
+ 29728 232f 00000000 .quad .LBE595
+ 29728 00000000
+ 29729 2337 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 846
+
+
+ 29730 2338 980D0000 .long 0xd98
+ 29731 233c 04 .byte 0x4
+ 29732 233d 91 .byte 0x91
+ 29733 233e C0BD7F .sleb128 -8512
+ 29734 2341 34 .uleb128 0x34
+ 29735 2342 A40D0000 .long 0xda4
+ 29736 2346 04 .byte 0x4
+ 29737 2347 91 .byte 0x91
+ 29738 2348 B0BD7F .sleb128 -8528
+ 29739 234b 34 .uleb128 0x34
+ 29740 234c AF0D0000 .long 0xdaf
+ 29741 2350 04 .byte 0x4
+ 29742 2351 91 .byte 0x91
+ 29743 2352 A0BD7F .sleb128 -8544
+ 29744 2355 34 .uleb128 0x34
+ 29745 2356 BB0D0000 .long 0xdbb
+ 29746 235a 03 .byte 0x3
+ 29747 235b 91 .byte 0x91
+ 29748 235c CC5E .sleb128 -4276
+ 29749 235e 00 .byte 0x0
+ 29750 235f 00 .byte 0x0
+ 29751 2360 31 .uleb128 0x31
+ 29752 2361 C70D0000 .long 0xdc7
+ 29753 2365 00000000 .quad .LBB596
+ 29753 00000000
+ 29754 236d 00000000 .quad .LBE596
+ 29754 00000000
+ 29755 2375 02 .byte 0x2
+ 29756 2376 6A03 .value 0x36a
+ 29757 2378 8F230000 .long 0x238f
+ 29758 237c 32 .uleb128 0x32
+ 29759 237d E20D0000 .long 0xde2
+ 29760 2381 03 .byte 0x3
+ 29761 2382 91 .byte 0x91
+ 29762 2383 D05E .sleb128 -4272
+ 29763 2385 32 .uleb128 0x32
+ 29764 2386 D80D0000 .long 0xdd8
+ 29765 238a 03 .byte 0x3
+ 29766 238b 91 .byte 0x91
+ 29767 238c E05E .sleb128 -4256
+ 29768 238e 00 .byte 0x0
+ 29769 238f 31 .uleb128 0x31
+ 29770 2390 ED0D0000 .long 0xded
+ 29771 2394 00000000 .quad .LBB598
+ 29771 00000000
+ 29772 239c 00000000 .quad .LBE598
+ 29772 00000000
+ 29773 23a4 02 .byte 0x2
+ 29774 23a5 6C03 .value 0x36c
+ 29775 23a7 BE230000 .long 0x23be
+ 29776 23ab 32 .uleb128 0x32
+ 29777 23ac 0A0E0000 .long 0xe0a
+ 29778 23b0 03 .byte 0x3
+ 29779 23b1 91 .byte 0x91
+ 29780 23b2 F05E .sleb128 -4240
+ 29781 23b4 32 .uleb128 0x32
+ 29782 23b5 FF0D0000 .long 0xdff
+
GAS LISTING /tmp/ccMa7HLZ.s page 847
+
+
+ 29783 23b9 03 .byte 0x3
+ 29784 23ba 91 .byte 0x91
+ 29785 23bb 805F .sleb128 -4224
+ 29786 23bd 00 .byte 0x0
+ 29787 23be 35 .uleb128 0x35
+ 29788 23bf 1F0D0000 .long 0xd1f
+ 29789 23c3 00000000 .quad .LBB600
+ 29789 00000000
+ 29790 23cb 00000000 .quad .LBE600
+ 29790 00000000
+ 29791 23d3 02 .byte 0x2
+ 29792 23d4 6E03 .value 0x36e
+ 29793 23d6 32 .uleb128 0x32
+ 29794 23d7 3A0D0000 .long 0xd3a
+ 29795 23db 03 .byte 0x3
+ 29796 23dc 91 .byte 0x91
+ 29797 23dd 905F .sleb128 -4208
+ 29798 23df 32 .uleb128 0x32
+ 29799 23e0 300D0000 .long 0xd30
+ 29800 23e4 03 .byte 0x3
+ 29801 23e5 91 .byte 0x91
+ 29802 23e6 A05F .sleb128 -4192
+ 29803 23e8 00 .byte 0x0
+ 29804 23e9 00 .byte 0x0
+ 29805 23ea 00 .byte 0x0
+ 29806 23eb 00 .byte 0x0
+ 29807 23ec 36 .uleb128 0x36
+ 29808 23ed 00000000 .quad .LBB602
+ 29808 00000000
+ 29809 23f5 00000000 .quad .LBE602
+ 29809 00000000
+ 29810 23fd 0C240000 .long 0x240c
+ 29811 2401 34 .uleb128 0x34
+ 29812 2402 180C0000 .long 0xc18
+ 29813 2406 04 .byte 0x4
+ 29814 2407 91 .byte 0x91
+ 29815 2408 D0BC7F .sleb128 -8624
+ 29816 240b 00 .byte 0x0
+ 29817 240c 31 .uleb128 0x31
+ 29818 240d 160E0000 .long 0xe16
+ 29819 2411 00000000 .quad .LBB603
+ 29819 00000000
+ 29820 2419 00000000 .quad .LBE603
+ 29820 00000000
+ 29821 2421 02 .byte 0x2
+ 29822 2422 9406 .value 0x694
+ 29823 2424 B7240000 .long 0x24b7
+ 29824 2428 32 .uleb128 0x32
+ 29825 2429 280E0000 .long 0xe28
+ 29826 242d 03 .byte 0x3
+ 29827 242e 91 .byte 0x91
+ 29828 242f B05F .sleb128 -4176
+ 29829 2431 33 .uleb128 0x33
+ 29830 2432 00000000 .quad .LBB604
+ 29830 00000000
+ 29831 243a 00000000 .quad .LBE604
+ 29831 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 848
+
+
+ 29832 2442 34 .uleb128 0x34
+ 29833 2443 340E0000 .long 0xe34
+ 29834 2447 09 .byte 0x9
+ 29835 2448 03 .byte 0x3
+ 29836 2449 00000000 .quad ShiftRowTable.6768
+ 29836 00000000
+ 29837 2451 35 .uleb128 0x35
+ 29838 2452 6E0D0000 .long 0xd6e
+ 29839 2456 00000000 .quad .LBB605
+ 29839 00000000
+ 29840 245e 00000000 .quad .LBE605
+ 29840 00000000
+ 29841 2466 02 .byte 0x2
+ 29842 2467 9B02 .value 0x29b
+ 29843 2469 32 .uleb128 0x32
+ 29844 246a 8C0D0000 .long 0xd8c
+ 29845 246e 03 .byte 0x3
+ 29846 246f 91 .byte 0x91
+ 29847 2470 C05F .sleb128 -4160
+ 29848 2472 32 .uleb128 0x32
+ 29849 2473 800D0000 .long 0xd80
+ 29850 2477 03 .byte 0x3
+ 29851 2478 91 .byte 0x91
+ 29852 2479 D05F .sleb128 -4144
+ 29853 247b 33 .uleb128 0x33
+ 29854 247c 00000000 .quad .LBB606
+ 29854 00000000
+ 29855 2484 00000000 .quad .LBE606
+ 29855 00000000
+ 29856 248c 34 .uleb128 0x34
+ 29857 248d 980D0000 .long 0xd98
+ 29858 2491 04 .byte 0x4
+ 29859 2492 91 .byte 0x91
+ 29860 2493 F0BD7F .sleb128 -8464
+ 29861 2496 34 .uleb128 0x34
+ 29862 2497 A40D0000 .long 0xda4
+ 29863 249b 04 .byte 0x4
+ 29864 249c 91 .byte 0x91
+ 29865 249d E0BD7F .sleb128 -8480
+ 29866 24a0 34 .uleb128 0x34
+ 29867 24a1 AF0D0000 .long 0xdaf
+ 29868 24a5 04 .byte 0x4
+ 29869 24a6 91 .byte 0x91
+ 29870 24a7 D0BD7F .sleb128 -8496
+ 29871 24aa 34 .uleb128 0x34
+ 29872 24ab BB0D0000 .long 0xdbb
+ 29873 24af 03 .byte 0x3
+ 29874 24b0 91 .byte 0x91
+ 29875 24b1 EC5F .sleb128 -4116
+ 29876 24b3 00 .byte 0x0
+ 29877 24b4 00 .byte 0x0
+ 29878 24b5 00 .byte 0x0
+ 29879 24b6 00 .byte 0x0
+ 29880 24b7 36 .uleb128 0x36
+ 29881 24b8 00000000 .quad .LBB607
+ 29881 00000000
+ 29882 24c0 00000000 .quad .LBE607
+
GAS LISTING /tmp/ccMa7HLZ.s page 849
+
+
+ 29882 00000000
+ 29883 24c8 D7240000 .long 0x24d7
+ 29884 24cc 34 .uleb128 0x34
+ 29885 24cd 280C0000 .long 0xc28
+ 29886 24d1 04 .byte 0x4
+ 29887 24d2 91 .byte 0x91
+ 29888 24d3 C0BC7F .sleb128 -8640
+ 29889 24d6 00 .byte 0x0
+ 29890 24d7 31 .uleb128 0x31
+ 29891 24d8 520E0000 .long 0xe52
+ 29892 24dc 00000000 .quad .LBB608
+ 29892 00000000
+ 29893 24e4 00000000 .quad .LBE608
+ 29893 00000000
+ 29894 24ec 02 .byte 0x2
+ 29895 24ed 9606 .value 0x696
+ 29896 24ef 06250000 .long 0x2506
+ 29897 24f3 32 .uleb128 0x32
+ 29898 24f4 6D0E0000 .long 0xe6d
+ 29899 24f8 03 .byte 0x3
+ 29900 24f9 91 .byte 0x91
+ 29901 24fa F05F .sleb128 -4112
+ 29902 24fc 32 .uleb128 0x32
+ 29903 24fd 630E0000 .long 0xe63
+ 29904 2501 03 .byte 0x3
+ 29905 2502 91 .byte 0x91
+ 29906 2503 8060 .sleb128 -4096
+ 29907 2505 00 .byte 0x0
+ 29908 2506 36 .uleb128 0x36
+ 29909 2507 00000000 .quad .LBB610
+ 29909 00000000
+ 29910 250f 00000000 .quad .LBE610
+ 29910 00000000
+ 29911 2517 26250000 .long 0x2526
+ 29912 251b 34 .uleb128 0x34
+ 29913 251c 380C0000 .long 0xc38
+ 29914 2520 04 .byte 0x4
+ 29915 2521 91 .byte 0x91
+ 29916 2522 B0BC7F .sleb128 -8656
+ 29917 2525 00 .byte 0x0
+ 29918 2526 31 .uleb128 0x31
+ 29919 2527 780E0000 .long 0xe78
+ 29920 252b 00000000 .quad .LBB611
+ 29920 00000000
+ 29921 2533 00000000 .quad .LBE611
+ 29921 00000000
+ 29922 253b 02 .byte 0x2
+ 29923 253c 9806 .value 0x698
+ 29924 253e 68250000 .long 0x2568
+ 29925 2542 32 .uleb128 0x32
+ 29926 2543 8A0E0000 .long 0xe8a
+ 29927 2547 03 .byte 0x3
+ 29928 2548 91 .byte 0x91
+ 29929 2549 9060 .sleb128 -4080
+ 29930 254b 33 .uleb128 0x33
+ 29931 254c 00000000 .quad .LBB612
+ 29931 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 850
+
+
+ 29932 2554 00000000 .quad .LBE612
+ 29932 00000000
+ 29933 255c 34 .uleb128 0x34
+ 29934 255d 960E0000 .long 0xe96
+ 29935 2561 04 .byte 0x4
+ 29936 2562 91 .byte 0x91
+ 29937 2563 80BE7F .sleb128 -8448
+ 29938 2566 00 .byte 0x0
+ 29939 2567 00 .byte 0x0
+ 29940 2568 33 .uleb128 0x33
+ 29941 2569 00000000 .quad .LBB613
+ 29941 00000000
+ 29942 2571 00000000 .quad .LBE613
+ 29942 00000000
+ 29943 2579 34 .uleb128 0x34
+ 29944 257a 440C0000 .long 0xc44
+ 29945 257e 04 .byte 0x4
+ 29946 257f 91 .byte 0x91
+ 29947 2580 A0BC7F .sleb128 -8672
+ 29948 2583 00 .byte 0x0
+ 29949 2584 00 .byte 0x0
+ 29950 2585 00 .byte 0x0
+ 29951 2586 31 .uleb128 0x31
+ 29952 2587 A30E0000 .long 0xea3
+ 29953 258b 00000000 .quad .LBB614
+ 29953 00000000
+ 29954 2593 00000000 .quad .LBE614
+ 29954 00000000
+ 29955 259b 02 .byte 0x2
+ 29956 259c D306 .value 0x6d3
+ 29957 259e 8A260000 .long 0x268a
+ 29958 25a2 32 .uleb128 0x32
+ 29959 25a3 B50E0000 .long 0xeb5
+ 29960 25a7 03 .byte 0x3
+ 29961 25a8 91 .byte 0x91
+ 29962 25a9 A060 .sleb128 -4064
+ 29963 25ab 33 .uleb128 0x33
+ 29964 25ac 00000000 .quad .LBB615
+ 29964 00000000
+ 29965 25b4 00000000 .quad .LBE615
+ 29965 00000000
+ 29966 25bc 34 .uleb128 0x34
+ 29967 25bd C10E0000 .long 0xec1
+ 29968 25c1 04 .byte 0x4
+ 29969 25c2 76 .byte 0x76
+ 29970 25c3 A0B27F .sleb128 -9952
+ 29971 25c6 31 .uleb128 0x31
+ 29972 25c7 CE0E0000 .long 0xece
+ 29973 25cb 00000000 .quad .LBB616
+ 29973 00000000
+ 29974 25d3 00000000 .quad .LBE616
+ 29974 00000000
+ 29975 25db 02 .byte 0x2
+ 29976 25dc 1F06 .value 0x61f
+ 29977 25de 08260000 .long 0x2608
+ 29978 25e2 32 .uleb128 0x32
+ 29979 25e3 E00E0000 .long 0xee0
+
GAS LISTING /tmp/ccMa7HLZ.s page 851
+
+
+ 29980 25e7 03 .byte 0x3
+ 29981 25e8 91 .byte 0x91
+ 29982 25e9 B060 .sleb128 -4048
+ 29983 25eb 33 .uleb128 0x33
+ 29984 25ec 00000000 .quad .LBB617
+ 29984 00000000
+ 29985 25f4 00000000 .quad .LBE617
+ 29985 00000000
+ 29986 25fc 34 .uleb128 0x34
+ 29987 25fd EC0E0000 .long 0xeec
+ 29988 2601 04 .byte 0x4
+ 29989 2602 91 .byte 0x91
+ 29990 2603 90BE7F .sleb128 -8432
+ 29991 2606 00 .byte 0x0
+ 29992 2607 00 .byte 0x0
+ 29993 2608 31 .uleb128 0x31
+ 29994 2609 CE0E0000 .long 0xece
+ 29995 260d 00000000 .quad .LBB618
+ 29995 00000000
+ 29996 2615 00000000 .quad .LBE618
+ 29996 00000000
+ 29997 261d 02 .byte 0x2
+ 29998 261e 2006 .value 0x620
+ 29999 2620 4A260000 .long 0x264a
+ 30000 2624 32 .uleb128 0x32
+ 30001 2625 E00E0000 .long 0xee0
+ 30002 2629 03 .byte 0x3
+ 30003 262a 91 .byte 0x91
+ 30004 262b C060 .sleb128 -4032
+ 30005 262d 33 .uleb128 0x33
+ 30006 262e 00000000 .quad .LBB619
+ 30006 00000000
+ 30007 2636 00000000 .quad .LBE619
+ 30007 00000000
+ 30008 263e 34 .uleb128 0x34
+ 30009 263f EC0E0000 .long 0xeec
+ 30010 2643 04 .byte 0x4
+ 30011 2644 91 .byte 0x91
+ 30012 2645 A0BE7F .sleb128 -8416
+ 30013 2648 00 .byte 0x0
+ 30014 2649 00 .byte 0x0
+ 30015 264a 35 .uleb128 0x35
+ 30016 264b CE0E0000 .long 0xece
+ 30017 264f 00000000 .quad .LBB620
+ 30017 00000000
+ 30018 2657 00000000 .quad .LBE620
+ 30018 00000000
+ 30019 265f 02 .byte 0x2
+ 30020 2660 2106 .value 0x621
+ 30021 2662 32 .uleb128 0x32
+ 30022 2663 E00E0000 .long 0xee0
+ 30023 2667 03 .byte 0x3
+ 30024 2668 91 .byte 0x91
+ 30025 2669 D060 .sleb128 -4016
+ 30026 266b 33 .uleb128 0x33
+ 30027 266c 00000000 .quad .LBB621
+ 30027 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 852
+
+
+ 30028 2674 00000000 .quad .LBE621
+ 30028 00000000
+ 30029 267c 34 .uleb128 0x34
+ 30030 267d EC0E0000 .long 0xeec
+ 30031 2681 04 .byte 0x4
+ 30032 2682 91 .byte 0x91
+ 30033 2683 B0BE7F .sleb128 -8400
+ 30034 2686 00 .byte 0x0
+ 30035 2687 00 .byte 0x0
+ 30036 2688 00 .byte 0x0
+ 30037 2689 00 .byte 0x0
+ 30038 268a 31 .uleb128 0x31
+ 30039 268b D10B0000 .long 0xbd1
+ 30040 268f 00000000 .quad .LBB622
+ 30040 00000000
+ 30041 2697 00000000 .quad .LBE622
+ 30041 00000000
+ 30042 269f 02 .byte 0x2
+ 30043 26a0 D406 .value 0x6d4
+ 30044 26a2 3E2B0000 .long 0x2b3e
+ 30045 26a6 32 .uleb128 0x32
+ 30046 26a7 EF0B0000 .long 0xbef
+ 30047 26ab 03 .byte 0x3
+ 30048 26ac 91 .byte 0x91
+ 30049 26ad EC60 .sleb128 -3988
+ 30050 26af 32 .uleb128 0x32
+ 30051 26b0 E30B0000 .long 0xbe3
+ 30052 26b4 03 .byte 0x3
+ 30053 26b5 91 .byte 0x91
+ 30054 26b6 F060 .sleb128 -3984
+ 30055 26b8 33 .uleb128 0x33
+ 30056 26b9 00000000 .quad .LBB623
+ 30056 00000000
+ 30057 26c1 00000000 .quad .LBE623
+ 30057 00000000
+ 30058 26c9 34 .uleb128 0x34
+ 30059 26ca FB0B0000 .long 0xbfb
+ 30060 26ce 04 .byte 0x4
+ 30061 26cf 76 .byte 0x76
+ 30062 26d0 C0B27F .sleb128 -9920
+ 30063 26d3 34 .uleb128 0x34
+ 30064 26d4 070C0000 .long 0xc07
+ 30065 26d8 04 .byte 0x4
+ 30066 26d9 76 .byte 0x76
+ 30067 26da B0B27F .sleb128 -9936
+ 30068 26dd 31 .uleb128 0x31
+ 30069 26de 500C0000 .long 0xc50
+ 30070 26e2 00000000 .quad .LBB624
+ 30070 00000000
+ 30071 26ea 00000000 .quad .LBE624
+ 30071 00000000
+ 30072 26f2 02 .byte 0x2
+ 30073 26f3 9106 .value 0x691
+ 30074 26f5 31270000 .long 0x2731
+ 30075 26f9 32 .uleb128 0x32
+ 30076 26fa 7A0C0000 .long 0xc7a
+ 30077 26fe 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 853
+
+
+ 30078 26ff 91 .byte 0x91
+ 30079 2700 8861 .sleb128 -3960
+ 30080 2702 32 .uleb128 0x32
+ 30081 2703 6E0C0000 .long 0xc6e
+ 30082 2707 03 .byte 0x3
+ 30083 2708 91 .byte 0x91
+ 30084 2709 8C61 .sleb128 -3956
+ 30085 270b 32 .uleb128 0x32
+ 30086 270c 620C0000 .long 0xc62
+ 30087 2710 03 .byte 0x3
+ 30088 2711 91 .byte 0x91
+ 30089 2712 9061 .sleb128 -3952
+ 30090 2714 33 .uleb128 0x33
+ 30091 2715 00000000 .quad .LBB625
+ 30091 00000000
+ 30092 271d 00000000 .quad .LBE625
+ 30092 00000000
+ 30093 2725 34 .uleb128 0x34
+ 30094 2726 860C0000 .long 0xc86
+ 30095 272a 04 .byte 0x4
+ 30096 272b 91 .byte 0x91
+ 30097 272c 80BF7F .sleb128 -8320
+ 30098 272f 00 .byte 0x0
+ 30099 2730 00 .byte 0x0
+ 30100 2731 31 .uleb128 0x31
+ 30101 2732 910C0000 .long 0xc91
+ 30102 2736 00000000 .quad .LBB626
+ 30102 00000000
+ 30103 273e 00000000 .quad .LBE626
+ 30103 00000000
+ 30104 2746 02 .byte 0x2
+ 30105 2747 9206 .value 0x692
+ 30106 2749 A7290000 .long 0x29a7
+ 30107 274d 32 .uleb128 0x32
+ 30108 274e A30C0000 .long 0xca3
+ 30109 2752 03 .byte 0x3
+ 30110 2753 91 .byte 0x91
+ 30111 2754 A061 .sleb128 -3936
+ 30112 2756 35 .uleb128 0x35
+ 30113 2757 B00C0000 .long 0xcb0
+ 30114 275b 00000000 .quad .LBB628
+ 30114 00000000
+ 30115 2763 00000000 .quad .LBE628
+ 30115 00000000
+ 30116 276b 02 .byte 0x2
+ 30117 276c 7D03 .value 0x37d
+ 30118 276e 32 .uleb128 0x32
+ 30119 276f CE0C0000 .long 0xcce
+ 30120 2773 03 .byte 0x3
+ 30121 2774 91 .byte 0x91
+ 30122 2775 B861 .sleb128 -3912
+ 30123 2777 32 .uleb128 0x32
+ 30124 2778 C20C0000 .long 0xcc2
+ 30125 277c 03 .byte 0x3
+ 30126 277d 91 .byte 0x91
+ 30127 277e C061 .sleb128 -3904
+ 30128 2780 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 854
+
+
+ 30129 2781 00000000 .quad .LBB629
+ 30129 00000000
+ 30130 2789 00000000 .quad .LBE629
+ 30130 00000000
+ 30131 2791 34 .uleb128 0x34
+ 30132 2792 DA0C0000 .long 0xcda
+ 30133 2796 03 .byte 0x3
+ 30134 2797 91 .byte 0x91
+ 30135 2798 9062 .sleb128 -3824
+ 30136 279a 34 .uleb128 0x34
+ 30137 279b E50C0000 .long 0xce5
+ 30138 279f 03 .byte 0x3
+ 30139 27a0 91 .byte 0x91
+ 30140 27a1 8062 .sleb128 -3840
+ 30141 27a3 34 .uleb128 0x34
+ 30142 27a4 F00C0000 .long 0xcf0
+ 30143 27a8 03 .byte 0x3
+ 30144 27a9 91 .byte 0x91
+ 30145 27aa F061 .sleb128 -3856
+ 30146 27ac 34 .uleb128 0x34
+ 30147 27ad FC0C0000 .long 0xcfc
+ 30148 27b1 03 .byte 0x3
+ 30149 27b2 91 .byte 0x91
+ 30150 27b3 E061 .sleb128 -3872
+ 30151 27b5 34 .uleb128 0x34
+ 30152 27b6 080D0000 .long 0xd08
+ 30153 27ba 03 .byte 0x3
+ 30154 27bb 91 .byte 0x91
+ 30155 27bc DC61 .sleb128 -3876
+ 30156 27be 31 .uleb128 0x31
+ 30157 27bf 1F0D0000 .long 0xd1f
+ 30158 27c3 00000000 .quad .LBB630
+ 30158 00000000
+ 30159 27cb 00000000 .quad .LBE630
+ 30159 00000000
+ 30160 27d3 02 .byte 0x2
+ 30161 27d4 5603 .value 0x356
+ 30162 27d6 ED270000 .long 0x27ed
+ 30163 27da 32 .uleb128 0x32
+ 30164 27db 3A0D0000 .long 0xd3a
+ 30165 27df 03 .byte 0x3
+ 30166 27e0 91 .byte 0x91
+ 30167 27e1 A062 .sleb128 -3808
+ 30168 27e3 32 .uleb128 0x32
+ 30169 27e4 300D0000 .long 0xd30
+ 30170 27e8 03 .byte 0x3
+ 30171 27e9 91 .byte 0x91
+ 30172 27ea B062 .sleb128 -3792
+ 30173 27ec 00 .byte 0x0
+ 30174 27ed 31 .uleb128 0x31
+ 30175 27ee 450D0000 .long 0xd45
+ 30176 27f2 00000000 .quad .LBB632
+ 30176 00000000
+ 30177 27fa 00000000 .quad .LBE632
+ 30177 00000000
+ 30178 2802 02 .byte 0x2
+ 30179 2803 5E03 .value 0x35e
+
GAS LISTING /tmp/ccMa7HLZ.s page 855
+
+
+ 30180 2805 1C280000 .long 0x281c
+ 30181 2809 32 .uleb128 0x32
+ 30182 280a 620D0000 .long 0xd62
+ 30183 280e 03 .byte 0x3
+ 30184 280f 91 .byte 0x91
+ 30185 2810 C062 .sleb128 -3776
+ 30186 2812 32 .uleb128 0x32
+ 30187 2813 570D0000 .long 0xd57
+ 30188 2817 03 .byte 0x3
+ 30189 2818 91 .byte 0x91
+ 30190 2819 D062 .sleb128 -3760
+ 30191 281b 00 .byte 0x0
+ 30192 281c 31 .uleb128 0x31
+ 30193 281d 6E0D0000 .long 0xd6e
+ 30194 2821 00000000 .quad .LBB634
+ 30194 00000000
+ 30195 2829 00000000 .quad .LBE634
+ 30195 00000000
+ 30196 2831 02 .byte 0x2
+ 30197 2832 6403 .value 0x364
+ 30198 2834 84280000 .long 0x2884
+ 30199 2838 32 .uleb128 0x32
+ 30200 2839 8C0D0000 .long 0xd8c
+ 30201 283d 03 .byte 0x3
+ 30202 283e 91 .byte 0x91
+ 30203 283f E062 .sleb128 -3744
+ 30204 2841 32 .uleb128 0x32
+ 30205 2842 800D0000 .long 0xd80
+ 30206 2846 03 .byte 0x3
+ 30207 2847 91 .byte 0x91
+ 30208 2848 F062 .sleb128 -3728
+ 30209 284a 33 .uleb128 0x33
+ 30210 284b 00000000 .quad .LBB635
+ 30210 00000000
+ 30211 2853 00000000 .quad .LBE635
+ 30211 00000000
+ 30212 285b 34 .uleb128 0x34
+ 30213 285c 980D0000 .long 0xd98
+ 30214 2860 04 .byte 0x4
+ 30215 2861 91 .byte 0x91
+ 30216 2862 B0BF7F .sleb128 -8272
+ 30217 2865 34 .uleb128 0x34
+ 30218 2866 A40D0000 .long 0xda4
+ 30219 286a 04 .byte 0x4
+ 30220 286b 91 .byte 0x91
+ 30221 286c A0BF7F .sleb128 -8288
+ 30222 286f 34 .uleb128 0x34
+ 30223 2870 AF0D0000 .long 0xdaf
+ 30224 2874 04 .byte 0x4
+ 30225 2875 91 .byte 0x91
+ 30226 2876 90BF7F .sleb128 -8304
+ 30227 2879 34 .uleb128 0x34
+ 30228 287a BB0D0000 .long 0xdbb
+ 30229 287e 03 .byte 0x3
+ 30230 287f 91 .byte 0x91
+ 30231 2880 8C63 .sleb128 -3700
+ 30232 2882 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 856
+
+
+ 30233 2883 00 .byte 0x0
+ 30234 2884 31 .uleb128 0x31
+ 30235 2885 C70D0000 .long 0xdc7
+ 30236 2889 00000000 .quad .LBB636
+ 30236 00000000
+ 30237 2891 00000000 .quad .LBE636
+ 30237 00000000
+ 30238 2899 02 .byte 0x2
+ 30239 289a 6603 .value 0x366
+ 30240 289c B3280000 .long 0x28b3
+ 30241 28a0 32 .uleb128 0x32
+ 30242 28a1 E20D0000 .long 0xde2
+ 30243 28a5 03 .byte 0x3
+ 30244 28a6 91 .byte 0x91
+ 30245 28a7 9063 .sleb128 -3696
+ 30246 28a9 32 .uleb128 0x32
+ 30247 28aa D80D0000 .long 0xdd8
+ 30248 28ae 03 .byte 0x3
+ 30249 28af 91 .byte 0x91
+ 30250 28b0 A063 .sleb128 -3680
+ 30251 28b2 00 .byte 0x0
+ 30252 28b3 31 .uleb128 0x31
+ 30253 28b4 6E0D0000 .long 0xd6e
+ 30254 28b8 00000000 .quad .LBB638
+ 30254 00000000
+ 30255 28c0 00000000 .quad .LBE638
+ 30255 00000000
+ 30256 28c8 02 .byte 0x2
+ 30257 28c9 6803 .value 0x368
+ 30258 28cb 1B290000 .long 0x291b
+ 30259 28cf 32 .uleb128 0x32
+ 30260 28d0 8C0D0000 .long 0xd8c
+ 30261 28d4 03 .byte 0x3
+ 30262 28d5 91 .byte 0x91
+ 30263 28d6 B063 .sleb128 -3664
+ 30264 28d8 32 .uleb128 0x32
+ 30265 28d9 800D0000 .long 0xd80
+ 30266 28dd 03 .byte 0x3
+ 30267 28de 91 .byte 0x91
+ 30268 28df C063 .sleb128 -3648
+ 30269 28e1 33 .uleb128 0x33
+ 30270 28e2 00000000 .quad .LBB639
+ 30270 00000000
+ 30271 28ea 00000000 .quad .LBE639
+ 30271 00000000
+ 30272 28f2 34 .uleb128 0x34
+ 30273 28f3 980D0000 .long 0xd98
+ 30274 28f7 04 .byte 0x4
+ 30275 28f8 91 .byte 0x91
+ 30276 28f9 E0BF7F .sleb128 -8224
+ 30277 28fc 34 .uleb128 0x34
+ 30278 28fd A40D0000 .long 0xda4
+ 30279 2901 04 .byte 0x4
+ 30280 2902 91 .byte 0x91
+ 30281 2903 D0BF7F .sleb128 -8240
+ 30282 2906 34 .uleb128 0x34
+ 30283 2907 AF0D0000 .long 0xdaf
+
GAS LISTING /tmp/ccMa7HLZ.s page 857
+
+
+ 30284 290b 04 .byte 0x4
+ 30285 290c 91 .byte 0x91
+ 30286 290d C0BF7F .sleb128 -8256
+ 30287 2910 34 .uleb128 0x34
+ 30288 2911 BB0D0000 .long 0xdbb
+ 30289 2915 03 .byte 0x3
+ 30290 2916 91 .byte 0x91
+ 30291 2917 DC63 .sleb128 -3620
+ 30292 2919 00 .byte 0x0
+ 30293 291a 00 .byte 0x0
+ 30294 291b 31 .uleb128 0x31
+ 30295 291c C70D0000 .long 0xdc7
+ 30296 2920 00000000 .quad .LBB640
+ 30296 00000000
+ 30297 2928 00000000 .quad .LBE640
+ 30297 00000000
+ 30298 2930 02 .byte 0x2
+ 30299 2931 6A03 .value 0x36a
+ 30300 2933 4A290000 .long 0x294a
+ 30301 2937 32 .uleb128 0x32
+ 30302 2938 E20D0000 .long 0xde2
+ 30303 293c 03 .byte 0x3
+ 30304 293d 91 .byte 0x91
+ 30305 293e E063 .sleb128 -3616
+ 30306 2940 32 .uleb128 0x32
+ 30307 2941 D80D0000 .long 0xdd8
+ 30308 2945 03 .byte 0x3
+ 30309 2946 91 .byte 0x91
+ 30310 2947 F063 .sleb128 -3600
+ 30311 2949 00 .byte 0x0
+ 30312 294a 31 .uleb128 0x31
+ 30313 294b ED0D0000 .long 0xded
+ 30314 294f 00000000 .quad .LBB642
+ 30314 00000000
+ 30315 2957 00000000 .quad .LBE642
+ 30315 00000000
+ 30316 295f 02 .byte 0x2
+ 30317 2960 6C03 .value 0x36c
+ 30318 2962 79290000 .long 0x2979
+ 30319 2966 32 .uleb128 0x32
+ 30320 2967 0A0E0000 .long 0xe0a
+ 30321 296b 03 .byte 0x3
+ 30322 296c 91 .byte 0x91
+ 30323 296d 8064 .sleb128 -3584
+ 30324 296f 32 .uleb128 0x32
+ 30325 2970 FF0D0000 .long 0xdff
+ 30326 2974 03 .byte 0x3
+ 30327 2975 91 .byte 0x91
+ 30328 2976 9064 .sleb128 -3568
+ 30329 2978 00 .byte 0x0
+ 30330 2979 35 .uleb128 0x35
+ 30331 297a 1F0D0000 .long 0xd1f
+ 30332 297e 00000000 .quad .LBB644
+ 30332 00000000
+ 30333 2986 00000000 .quad .LBE644
+ 30333 00000000
+ 30334 298e 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 858
+
+
+ 30335 298f 6E03 .value 0x36e
+ 30336 2991 32 .uleb128 0x32
+ 30337 2992 3A0D0000 .long 0xd3a
+ 30338 2996 03 .byte 0x3
+ 30339 2997 91 .byte 0x91
+ 30340 2998 A064 .sleb128 -3552
+ 30341 299a 32 .uleb128 0x32
+ 30342 299b 300D0000 .long 0xd30
+ 30343 299f 03 .byte 0x3
+ 30344 29a0 91 .byte 0x91
+ 30345 29a1 B064 .sleb128 -3536
+ 30346 29a3 00 .byte 0x0
+ 30347 29a4 00 .byte 0x0
+ 30348 29a5 00 .byte 0x0
+ 30349 29a6 00 .byte 0x0
+ 30350 29a7 36 .uleb128 0x36
+ 30351 29a8 00000000 .quad .LBB646
+ 30351 00000000
+ 30352 29b0 00000000 .quad .LBE646
+ 30352 00000000
+ 30353 29b8 C7290000 .long 0x29c7
+ 30354 29bc 34 .uleb128 0x34
+ 30355 29bd 180C0000 .long 0xc18
+ 30356 29c1 04 .byte 0x4
+ 30357 29c2 91 .byte 0x91
+ 30358 29c3 F0BE7F .sleb128 -8336
+ 30359 29c6 00 .byte 0x0
+ 30360 29c7 31 .uleb128 0x31
+ 30361 29c8 160E0000 .long 0xe16
+ 30362 29cc 00000000 .quad .LBB647
+ 30362 00000000
+ 30363 29d4 00000000 .quad .LBE647
+ 30363 00000000
+ 30364 29dc 02 .byte 0x2
+ 30365 29dd 9406 .value 0x694
+ 30366 29df 702A0000 .long 0x2a70
+ 30367 29e3 32 .uleb128 0x32
+ 30368 29e4 280E0000 .long 0xe28
+ 30369 29e8 03 .byte 0x3
+ 30370 29e9 91 .byte 0x91
+ 30371 29ea C064 .sleb128 -3520
+ 30372 29ec 33 .uleb128 0x33
+ 30373 29ed 00000000 .quad .LBB648
+ 30373 00000000
+ 30374 29f5 00000000 .quad .LBE648
+ 30374 00000000
+ 30375 29fd 34 .uleb128 0x34
+ 30376 29fe 340E0000 .long 0xe34
+ 30377 2a02 09 .byte 0x9
+ 30378 2a03 03 .byte 0x3
+ 30379 2a04 00000000 .quad ShiftRowTable.6768
+ 30379 00000000
+ 30380 2a0c 35 .uleb128 0x35
+ 30381 2a0d 6E0D0000 .long 0xd6e
+ 30382 2a11 00000000 .quad .LBB649
+ 30382 00000000
+ 30383 2a19 00000000 .quad .LBE649
+
GAS LISTING /tmp/ccMa7HLZ.s page 859
+
+
+ 30383 00000000
+ 30384 2a21 02 .byte 0x2
+ 30385 2a22 9B02 .value 0x29b
+ 30386 2a24 32 .uleb128 0x32
+ 30387 2a25 8C0D0000 .long 0xd8c
+ 30388 2a29 03 .byte 0x3
+ 30389 2a2a 91 .byte 0x91
+ 30390 2a2b D064 .sleb128 -3504
+ 30391 2a2d 32 .uleb128 0x32
+ 30392 2a2e 800D0000 .long 0xd80
+ 30393 2a32 03 .byte 0x3
+ 30394 2a33 91 .byte 0x91
+ 30395 2a34 E064 .sleb128 -3488
+ 30396 2a36 33 .uleb128 0x33
+ 30397 2a37 00000000 .quad .LBB650
+ 30397 00000000
+ 30398 2a3f 00000000 .quad .LBE650
+ 30398 00000000
+ 30399 2a47 34 .uleb128 0x34
+ 30400 2a48 980D0000 .long 0xd98
+ 30401 2a4c 03 .byte 0x3
+ 30402 2a4d 91 .byte 0x91
+ 30403 2a4e 9040 .sleb128 -8176
+ 30404 2a50 34 .uleb128 0x34
+ 30405 2a51 A40D0000 .long 0xda4
+ 30406 2a55 03 .byte 0x3
+ 30407 2a56 91 .byte 0x91
+ 30408 2a57 8040 .sleb128 -8192
+ 30409 2a59 34 .uleb128 0x34
+ 30410 2a5a AF0D0000 .long 0xdaf
+ 30411 2a5e 04 .byte 0x4
+ 30412 2a5f 91 .byte 0x91
+ 30413 2a60 F0BF7F .sleb128 -8208
+ 30414 2a63 34 .uleb128 0x34
+ 30415 2a64 BB0D0000 .long 0xdbb
+ 30416 2a68 03 .byte 0x3
+ 30417 2a69 91 .byte 0x91
+ 30418 2a6a FC64 .sleb128 -3460
+ 30419 2a6c 00 .byte 0x0
+ 30420 2a6d 00 .byte 0x0
+ 30421 2a6e 00 .byte 0x0
+ 30422 2a6f 00 .byte 0x0
+ 30423 2a70 36 .uleb128 0x36
+ 30424 2a71 00000000 .quad .LBB651
+ 30424 00000000
+ 30425 2a79 00000000 .quad .LBE651
+ 30425 00000000
+ 30426 2a81 902A0000 .long 0x2a90
+ 30427 2a85 34 .uleb128 0x34
+ 30428 2a86 280C0000 .long 0xc28
+ 30429 2a8a 04 .byte 0x4
+ 30430 2a8b 91 .byte 0x91
+ 30431 2a8c E0BE7F .sleb128 -8352
+ 30432 2a8f 00 .byte 0x0
+ 30433 2a90 31 .uleb128 0x31
+ 30434 2a91 520E0000 .long 0xe52
+ 30435 2a95 00000000 .quad .LBB652
+
GAS LISTING /tmp/ccMa7HLZ.s page 860
+
+
+ 30435 00000000
+ 30436 2a9d 00000000 .quad .LBE652
+ 30436 00000000
+ 30437 2aa5 02 .byte 0x2
+ 30438 2aa6 9606 .value 0x696
+ 30439 2aa8 BF2A0000 .long 0x2abf
+ 30440 2aac 32 .uleb128 0x32
+ 30441 2aad 6D0E0000 .long 0xe6d
+ 30442 2ab1 03 .byte 0x3
+ 30443 2ab2 91 .byte 0x91
+ 30444 2ab3 8065 .sleb128 -3456
+ 30445 2ab5 32 .uleb128 0x32
+ 30446 2ab6 630E0000 .long 0xe63
+ 30447 2aba 03 .byte 0x3
+ 30448 2abb 91 .byte 0x91
+ 30449 2abc 9065 .sleb128 -3440
+ 30450 2abe 00 .byte 0x0
+ 30451 2abf 36 .uleb128 0x36
+ 30452 2ac0 00000000 .quad .LBB654
+ 30452 00000000
+ 30453 2ac8 00000000 .quad .LBE654
+ 30453 00000000
+ 30454 2ad0 DF2A0000 .long 0x2adf
+ 30455 2ad4 34 .uleb128 0x34
+ 30456 2ad5 380C0000 .long 0xc38
+ 30457 2ad9 04 .byte 0x4
+ 30458 2ada 91 .byte 0x91
+ 30459 2adb D0BE7F .sleb128 -8368
+ 30460 2ade 00 .byte 0x0
+ 30461 2adf 31 .uleb128 0x31
+ 30462 2ae0 780E0000 .long 0xe78
+ 30463 2ae4 00000000 .quad .LBB655
+ 30463 00000000
+ 30464 2aec 00000000 .quad .LBE655
+ 30464 00000000
+ 30465 2af4 02 .byte 0x2
+ 30466 2af5 9806 .value 0x698
+ 30467 2af7 202B0000 .long 0x2b20
+ 30468 2afb 32 .uleb128 0x32
+ 30469 2afc 8A0E0000 .long 0xe8a
+ 30470 2b00 03 .byte 0x3
+ 30471 2b01 91 .byte 0x91
+ 30472 2b02 A065 .sleb128 -3424
+ 30473 2b04 33 .uleb128 0x33
+ 30474 2b05 00000000 .quad .LBB656
+ 30474 00000000
+ 30475 2b0d 00000000 .quad .LBE656
+ 30475 00000000
+ 30476 2b15 34 .uleb128 0x34
+ 30477 2b16 960E0000 .long 0xe96
+ 30478 2b1a 03 .byte 0x3
+ 30479 2b1b 91 .byte 0x91
+ 30480 2b1c A040 .sleb128 -8160
+ 30481 2b1e 00 .byte 0x0
+ 30482 2b1f 00 .byte 0x0
+ 30483 2b20 33 .uleb128 0x33
+ 30484 2b21 00000000 .quad .LBB657
+
GAS LISTING /tmp/ccMa7HLZ.s page 861
+
+
+ 30484 00000000
+ 30485 2b29 00000000 .quad .LBE657
+ 30485 00000000
+ 30486 2b31 34 .uleb128 0x34
+ 30487 2b32 440C0000 .long 0xc44
+ 30488 2b36 04 .byte 0x4
+ 30489 2b37 91 .byte 0x91
+ 30490 2b38 C0BE7F .sleb128 -8384
+ 30491 2b3b 00 .byte 0x0
+ 30492 2b3c 00 .byte 0x0
+ 30493 2b3d 00 .byte 0x0
+ 30494 2b3e 31 .uleb128 0x31
+ 30495 2b3f A30E0000 .long 0xea3
+ 30496 2b43 00000000 .quad .LBB658
+ 30496 00000000
+ 30497 2b4b 00000000 .quad .LBE658
+ 30497 00000000
+ 30498 2b53 02 .byte 0x2
+ 30499 2b54 D406 .value 0x6d4
+ 30500 2b56 3F2C0000 .long 0x2c3f
+ 30501 2b5a 32 .uleb128 0x32
+ 30502 2b5b B50E0000 .long 0xeb5
+ 30503 2b5f 03 .byte 0x3
+ 30504 2b60 91 .byte 0x91
+ 30505 2b61 B065 .sleb128 -3408
+ 30506 2b63 33 .uleb128 0x33
+ 30507 2b64 00000000 .quad .LBB659
+ 30507 00000000
+ 30508 2b6c 00000000 .quad .LBE659
+ 30508 00000000
+ 30509 2b74 34 .uleb128 0x34
+ 30510 2b75 C10E0000 .long 0xec1
+ 30511 2b79 04 .byte 0x4
+ 30512 2b7a 76 .byte 0x76
+ 30513 2b7b E0B27F .sleb128 -9888
+ 30514 2b7e 31 .uleb128 0x31
+ 30515 2b7f CE0E0000 .long 0xece
+ 30516 2b83 00000000 .quad .LBB660
+ 30516 00000000
+ 30517 2b8b 00000000 .quad .LBE660
+ 30517 00000000
+ 30518 2b93 02 .byte 0x2
+ 30519 2b94 1F06 .value 0x61f
+ 30520 2b96 BF2B0000 .long 0x2bbf
+ 30521 2b9a 32 .uleb128 0x32
+ 30522 2b9b E00E0000 .long 0xee0
+ 30523 2b9f 03 .byte 0x3
+ 30524 2ba0 91 .byte 0x91
+ 30525 2ba1 C065 .sleb128 -3392
+ 30526 2ba3 33 .uleb128 0x33
+ 30527 2ba4 00000000 .quad .LBB661
+ 30527 00000000
+ 30528 2bac 00000000 .quad .LBE661
+ 30528 00000000
+ 30529 2bb4 34 .uleb128 0x34
+ 30530 2bb5 EC0E0000 .long 0xeec
+ 30531 2bb9 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 862
+
+
+ 30532 2bba 91 .byte 0x91
+ 30533 2bbb B040 .sleb128 -8144
+ 30534 2bbd 00 .byte 0x0
+ 30535 2bbe 00 .byte 0x0
+ 30536 2bbf 31 .uleb128 0x31
+ 30537 2bc0 CE0E0000 .long 0xece
+ 30538 2bc4 00000000 .quad .LBB662
+ 30538 00000000
+ 30539 2bcc 00000000 .quad .LBE662
+ 30539 00000000
+ 30540 2bd4 02 .byte 0x2
+ 30541 2bd5 2006 .value 0x620
+ 30542 2bd7 002C0000 .long 0x2c00
+ 30543 2bdb 32 .uleb128 0x32
+ 30544 2bdc E00E0000 .long 0xee0
+ 30545 2be0 03 .byte 0x3
+ 30546 2be1 91 .byte 0x91
+ 30547 2be2 D065 .sleb128 -3376
+ 30548 2be4 33 .uleb128 0x33
+ 30549 2be5 00000000 .quad .LBB663
+ 30549 00000000
+ 30550 2bed 00000000 .quad .LBE663
+ 30550 00000000
+ 30551 2bf5 34 .uleb128 0x34
+ 30552 2bf6 EC0E0000 .long 0xeec
+ 30553 2bfa 03 .byte 0x3
+ 30554 2bfb 91 .byte 0x91
+ 30555 2bfc C040 .sleb128 -8128
+ 30556 2bfe 00 .byte 0x0
+ 30557 2bff 00 .byte 0x0
+ 30558 2c00 35 .uleb128 0x35
+ 30559 2c01 CE0E0000 .long 0xece
+ 30560 2c05 00000000 .quad .LBB664
+ 30560 00000000
+ 30561 2c0d 00000000 .quad .LBE664
+ 30561 00000000
+ 30562 2c15 02 .byte 0x2
+ 30563 2c16 2106 .value 0x621
+ 30564 2c18 32 .uleb128 0x32
+ 30565 2c19 E00E0000 .long 0xee0
+ 30566 2c1d 03 .byte 0x3
+ 30567 2c1e 91 .byte 0x91
+ 30568 2c1f E065 .sleb128 -3360
+ 30569 2c21 33 .uleb128 0x33
+ 30570 2c22 00000000 .quad .LBB665
+ 30570 00000000
+ 30571 2c2a 00000000 .quad .LBE665
+ 30571 00000000
+ 30572 2c32 34 .uleb128 0x34
+ 30573 2c33 EC0E0000 .long 0xeec
+ 30574 2c37 03 .byte 0x3
+ 30575 2c38 91 .byte 0x91
+ 30576 2c39 D040 .sleb128 -8112
+ 30577 2c3b 00 .byte 0x0
+ 30578 2c3c 00 .byte 0x0
+ 30579 2c3d 00 .byte 0x0
+ 30580 2c3e 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 863
+
+
+ 30581 2c3f 31 .uleb128 0x31
+ 30582 2c40 D10B0000 .long 0xbd1
+ 30583 2c44 00000000 .quad .LBB666
+ 30583 00000000
+ 30584 2c4c 00000000 .quad .LBE666
+ 30584 00000000
+ 30585 2c54 02 .byte 0x2
+ 30586 2c55 D506 .value 0x6d5
+ 30587 2c57 E7300000 .long 0x30e7
+ 30588 2c5b 32 .uleb128 0x32
+ 30589 2c5c EF0B0000 .long 0xbef
+ 30590 2c60 03 .byte 0x3
+ 30591 2c61 91 .byte 0x91
+ 30592 2c62 FC65 .sleb128 -3332
+ 30593 2c64 32 .uleb128 0x32
+ 30594 2c65 E30B0000 .long 0xbe3
+ 30595 2c69 03 .byte 0x3
+ 30596 2c6a 91 .byte 0x91
+ 30597 2c6b 8066 .sleb128 -3328
+ 30598 2c6d 33 .uleb128 0x33
+ 30599 2c6e 00000000 .quad .LBB667
+ 30599 00000000
+ 30600 2c76 00000000 .quad .LBE667
+ 30600 00000000
+ 30601 2c7e 34 .uleb128 0x34
+ 30602 2c7f FB0B0000 .long 0xbfb
+ 30603 2c83 04 .byte 0x4
+ 30604 2c84 76 .byte 0x76
+ 30605 2c85 80B37F .sleb128 -9856
+ 30606 2c88 34 .uleb128 0x34
+ 30607 2c89 070C0000 .long 0xc07
+ 30608 2c8d 04 .byte 0x4
+ 30609 2c8e 76 .byte 0x76
+ 30610 2c8f F0B27F .sleb128 -9872
+ 30611 2c92 31 .uleb128 0x31
+ 30612 2c93 500C0000 .long 0xc50
+ 30613 2c97 00000000 .quad .LBB668
+ 30613 00000000
+ 30614 2c9f 00000000 .quad .LBE668
+ 30614 00000000
+ 30615 2ca7 02 .byte 0x2
+ 30616 2ca8 9106 .value 0x691
+ 30617 2caa E52C0000 .long 0x2ce5
+ 30618 2cae 32 .uleb128 0x32
+ 30619 2caf 7A0C0000 .long 0xc7a
+ 30620 2cb3 03 .byte 0x3
+ 30621 2cb4 91 .byte 0x91
+ 30622 2cb5 9866 .sleb128 -3304
+ 30623 2cb7 32 .uleb128 0x32
+ 30624 2cb8 6E0C0000 .long 0xc6e
+ 30625 2cbc 03 .byte 0x3
+ 30626 2cbd 91 .byte 0x91
+ 30627 2cbe 9C66 .sleb128 -3300
+ 30628 2cc0 32 .uleb128 0x32
+ 30629 2cc1 620C0000 .long 0xc62
+ 30630 2cc5 03 .byte 0x3
+ 30631 2cc6 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 864
+
+
+ 30632 2cc7 A066 .sleb128 -3296
+ 30633 2cc9 33 .uleb128 0x33
+ 30634 2cca 00000000 .quad .LBB669
+ 30634 00000000
+ 30635 2cd2 00000000 .quad .LBE669
+ 30635 00000000
+ 30636 2cda 34 .uleb128 0x34
+ 30637 2cdb 860C0000 .long 0xc86
+ 30638 2cdf 03 .byte 0x3
+ 30639 2ce0 91 .byte 0x91
+ 30640 2ce1 A041 .sleb128 -8032
+ 30641 2ce3 00 .byte 0x0
+ 30642 2ce4 00 .byte 0x0
+ 30643 2ce5 31 .uleb128 0x31
+ 30644 2ce6 910C0000 .long 0xc91
+ 30645 2cea 00000000 .quad .LBB670
+ 30645 00000000
+ 30646 2cf2 00000000 .quad .LBE670
+ 30646 00000000
+ 30647 2cfa 02 .byte 0x2
+ 30648 2cfb 9206 .value 0x692
+ 30649 2cfd 552F0000 .long 0x2f55
+ 30650 2d01 32 .uleb128 0x32
+ 30651 2d02 A30C0000 .long 0xca3
+ 30652 2d06 03 .byte 0x3
+ 30653 2d07 91 .byte 0x91
+ 30654 2d08 B066 .sleb128 -3280
+ 30655 2d0a 35 .uleb128 0x35
+ 30656 2d0b B00C0000 .long 0xcb0
+ 30657 2d0f 00000000 .quad .LBB672
+ 30657 00000000
+ 30658 2d17 00000000 .quad .LBE672
+ 30658 00000000
+ 30659 2d1f 02 .byte 0x2
+ 30660 2d20 7D03 .value 0x37d
+ 30661 2d22 32 .uleb128 0x32
+ 30662 2d23 CE0C0000 .long 0xcce
+ 30663 2d27 03 .byte 0x3
+ 30664 2d28 91 .byte 0x91
+ 30665 2d29 C866 .sleb128 -3256
+ 30666 2d2b 32 .uleb128 0x32
+ 30667 2d2c C20C0000 .long 0xcc2
+ 30668 2d30 03 .byte 0x3
+ 30669 2d31 91 .byte 0x91
+ 30670 2d32 D066 .sleb128 -3248
+ 30671 2d34 33 .uleb128 0x33
+ 30672 2d35 00000000 .quad .LBB673
+ 30672 00000000
+ 30673 2d3d 00000000 .quad .LBE673
+ 30673 00000000
+ 30674 2d45 34 .uleb128 0x34
+ 30675 2d46 DA0C0000 .long 0xcda
+ 30676 2d4a 03 .byte 0x3
+ 30677 2d4b 91 .byte 0x91
+ 30678 2d4c A067 .sleb128 -3168
+ 30679 2d4e 34 .uleb128 0x34
+ 30680 2d4f E50C0000 .long 0xce5
+
GAS LISTING /tmp/ccMa7HLZ.s page 865
+
+
+ 30681 2d53 03 .byte 0x3
+ 30682 2d54 91 .byte 0x91
+ 30683 2d55 9067 .sleb128 -3184
+ 30684 2d57 34 .uleb128 0x34
+ 30685 2d58 F00C0000 .long 0xcf0
+ 30686 2d5c 03 .byte 0x3
+ 30687 2d5d 91 .byte 0x91
+ 30688 2d5e 8067 .sleb128 -3200
+ 30689 2d60 34 .uleb128 0x34
+ 30690 2d61 FC0C0000 .long 0xcfc
+ 30691 2d65 03 .byte 0x3
+ 30692 2d66 91 .byte 0x91
+ 30693 2d67 F066 .sleb128 -3216
+ 30694 2d69 34 .uleb128 0x34
+ 30695 2d6a 080D0000 .long 0xd08
+ 30696 2d6e 03 .byte 0x3
+ 30697 2d6f 91 .byte 0x91
+ 30698 2d70 EC66 .sleb128 -3220
+ 30699 2d72 31 .uleb128 0x31
+ 30700 2d73 1F0D0000 .long 0xd1f
+ 30701 2d77 00000000 .quad .LBB674
+ 30701 00000000
+ 30702 2d7f 00000000 .quad .LBE674
+ 30702 00000000
+ 30703 2d87 02 .byte 0x2
+ 30704 2d88 5603 .value 0x356
+ 30705 2d8a A12D0000 .long 0x2da1
+ 30706 2d8e 32 .uleb128 0x32
+ 30707 2d8f 3A0D0000 .long 0xd3a
+ 30708 2d93 03 .byte 0x3
+ 30709 2d94 91 .byte 0x91
+ 30710 2d95 B067 .sleb128 -3152
+ 30711 2d97 32 .uleb128 0x32
+ 30712 2d98 300D0000 .long 0xd30
+ 30713 2d9c 03 .byte 0x3
+ 30714 2d9d 91 .byte 0x91
+ 30715 2d9e C067 .sleb128 -3136
+ 30716 2da0 00 .byte 0x0
+ 30717 2da1 31 .uleb128 0x31
+ 30718 2da2 450D0000 .long 0xd45
+ 30719 2da6 00000000 .quad .LBB676
+ 30719 00000000
+ 30720 2dae 00000000 .quad .LBE676
+ 30720 00000000
+ 30721 2db6 02 .byte 0x2
+ 30722 2db7 5E03 .value 0x35e
+ 30723 2db9 D02D0000 .long 0x2dd0
+ 30724 2dbd 32 .uleb128 0x32
+ 30725 2dbe 620D0000 .long 0xd62
+ 30726 2dc2 03 .byte 0x3
+ 30727 2dc3 91 .byte 0x91
+ 30728 2dc4 D067 .sleb128 -3120
+ 30729 2dc6 32 .uleb128 0x32
+ 30730 2dc7 570D0000 .long 0xd57
+ 30731 2dcb 03 .byte 0x3
+ 30732 2dcc 91 .byte 0x91
+ 30733 2dcd E067 .sleb128 -3104
+
GAS LISTING /tmp/ccMa7HLZ.s page 866
+
+
+ 30734 2dcf 00 .byte 0x0
+ 30735 2dd0 31 .uleb128 0x31
+ 30736 2dd1 6E0D0000 .long 0xd6e
+ 30737 2dd5 00000000 .quad .LBB678
+ 30737 00000000
+ 30738 2ddd 00000000 .quad .LBE678
+ 30738 00000000
+ 30739 2de5 02 .byte 0x2
+ 30740 2de6 6403 .value 0x364
+ 30741 2de8 352E0000 .long 0x2e35
+ 30742 2dec 32 .uleb128 0x32
+ 30743 2ded 8C0D0000 .long 0xd8c
+ 30744 2df1 03 .byte 0x3
+ 30745 2df2 91 .byte 0x91
+ 30746 2df3 F067 .sleb128 -3088
+ 30747 2df5 32 .uleb128 0x32
+ 30748 2df6 800D0000 .long 0xd80
+ 30749 2dfa 03 .byte 0x3
+ 30750 2dfb 91 .byte 0x91
+ 30751 2dfc 8068 .sleb128 -3072
+ 30752 2dfe 33 .uleb128 0x33
+ 30753 2dff 00000000 .quad .LBB679
+ 30753 00000000
+ 30754 2e07 00000000 .quad .LBE679
+ 30754 00000000
+ 30755 2e0f 34 .uleb128 0x34
+ 30756 2e10 980D0000 .long 0xd98
+ 30757 2e14 03 .byte 0x3
+ 30758 2e15 91 .byte 0x91
+ 30759 2e16 D041 .sleb128 -7984
+ 30760 2e18 34 .uleb128 0x34
+ 30761 2e19 A40D0000 .long 0xda4
+ 30762 2e1d 03 .byte 0x3
+ 30763 2e1e 91 .byte 0x91
+ 30764 2e1f C041 .sleb128 -8000
+ 30765 2e21 34 .uleb128 0x34
+ 30766 2e22 AF0D0000 .long 0xdaf
+ 30767 2e26 03 .byte 0x3
+ 30768 2e27 91 .byte 0x91
+ 30769 2e28 B041 .sleb128 -8016
+ 30770 2e2a 34 .uleb128 0x34
+ 30771 2e2b BB0D0000 .long 0xdbb
+ 30772 2e2f 03 .byte 0x3
+ 30773 2e30 91 .byte 0x91
+ 30774 2e31 9C68 .sleb128 -3044
+ 30775 2e33 00 .byte 0x0
+ 30776 2e34 00 .byte 0x0
+ 30777 2e35 31 .uleb128 0x31
+ 30778 2e36 C70D0000 .long 0xdc7
+ 30779 2e3a 00000000 .quad .LBB680
+ 30779 00000000
+ 30780 2e42 00000000 .quad .LBE680
+ 30780 00000000
+ 30781 2e4a 02 .byte 0x2
+ 30782 2e4b 6603 .value 0x366
+ 30783 2e4d 642E0000 .long 0x2e64
+ 30784 2e51 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 867
+
+
+ 30785 2e52 E20D0000 .long 0xde2
+ 30786 2e56 03 .byte 0x3
+ 30787 2e57 91 .byte 0x91
+ 30788 2e58 A068 .sleb128 -3040
+ 30789 2e5a 32 .uleb128 0x32
+ 30790 2e5b D80D0000 .long 0xdd8
+ 30791 2e5f 03 .byte 0x3
+ 30792 2e60 91 .byte 0x91
+ 30793 2e61 B068 .sleb128 -3024
+ 30794 2e63 00 .byte 0x0
+ 30795 2e64 31 .uleb128 0x31
+ 30796 2e65 6E0D0000 .long 0xd6e
+ 30797 2e69 00000000 .quad .LBB682
+ 30797 00000000
+ 30798 2e71 00000000 .quad .LBE682
+ 30798 00000000
+ 30799 2e79 02 .byte 0x2
+ 30800 2e7a 6803 .value 0x368
+ 30801 2e7c C92E0000 .long 0x2ec9
+ 30802 2e80 32 .uleb128 0x32
+ 30803 2e81 8C0D0000 .long 0xd8c
+ 30804 2e85 03 .byte 0x3
+ 30805 2e86 91 .byte 0x91
+ 30806 2e87 C068 .sleb128 -3008
+ 30807 2e89 32 .uleb128 0x32
+ 30808 2e8a 800D0000 .long 0xd80
+ 30809 2e8e 03 .byte 0x3
+ 30810 2e8f 91 .byte 0x91
+ 30811 2e90 D068 .sleb128 -2992
+ 30812 2e92 33 .uleb128 0x33
+ 30813 2e93 00000000 .quad .LBB683
+ 30813 00000000
+ 30814 2e9b 00000000 .quad .LBE683
+ 30814 00000000
+ 30815 2ea3 34 .uleb128 0x34
+ 30816 2ea4 980D0000 .long 0xd98
+ 30817 2ea8 03 .byte 0x3
+ 30818 2ea9 91 .byte 0x91
+ 30819 2eaa 8042 .sleb128 -7936
+ 30820 2eac 34 .uleb128 0x34
+ 30821 2ead A40D0000 .long 0xda4
+ 30822 2eb1 03 .byte 0x3
+ 30823 2eb2 91 .byte 0x91
+ 30824 2eb3 F041 .sleb128 -7952
+ 30825 2eb5 34 .uleb128 0x34
+ 30826 2eb6 AF0D0000 .long 0xdaf
+ 30827 2eba 03 .byte 0x3
+ 30828 2ebb 91 .byte 0x91
+ 30829 2ebc E041 .sleb128 -7968
+ 30830 2ebe 34 .uleb128 0x34
+ 30831 2ebf BB0D0000 .long 0xdbb
+ 30832 2ec3 03 .byte 0x3
+ 30833 2ec4 91 .byte 0x91
+ 30834 2ec5 EC68 .sleb128 -2964
+ 30835 2ec7 00 .byte 0x0
+ 30836 2ec8 00 .byte 0x0
+ 30837 2ec9 31 .uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s page 868
+
+
+ 30838 2eca C70D0000 .long 0xdc7
+ 30839 2ece 00000000 .quad .LBB684
+ 30839 00000000
+ 30840 2ed6 00000000 .quad .LBE684
+ 30840 00000000
+ 30841 2ede 02 .byte 0x2
+ 30842 2edf 6A03 .value 0x36a
+ 30843 2ee1 F82E0000 .long 0x2ef8
+ 30844 2ee5 32 .uleb128 0x32
+ 30845 2ee6 E20D0000 .long 0xde2
+ 30846 2eea 03 .byte 0x3
+ 30847 2eeb 91 .byte 0x91
+ 30848 2eec F068 .sleb128 -2960
+ 30849 2eee 32 .uleb128 0x32
+ 30850 2eef D80D0000 .long 0xdd8
+ 30851 2ef3 03 .byte 0x3
+ 30852 2ef4 91 .byte 0x91
+ 30853 2ef5 8069 .sleb128 -2944
+ 30854 2ef7 00 .byte 0x0
+ 30855 2ef8 31 .uleb128 0x31
+ 30856 2ef9 ED0D0000 .long 0xded
+ 30857 2efd 00000000 .quad .LBB686
+ 30857 00000000
+ 30858 2f05 00000000 .quad .LBE686
+ 30858 00000000
+ 30859 2f0d 02 .byte 0x2
+ 30860 2f0e 6C03 .value 0x36c
+ 30861 2f10 272F0000 .long 0x2f27
+ 30862 2f14 32 .uleb128 0x32
+ 30863 2f15 0A0E0000 .long 0xe0a
+ 30864 2f19 03 .byte 0x3
+ 30865 2f1a 91 .byte 0x91
+ 30866 2f1b 9069 .sleb128 -2928
+ 30867 2f1d 32 .uleb128 0x32
+ 30868 2f1e FF0D0000 .long 0xdff
+ 30869 2f22 03 .byte 0x3
+ 30870 2f23 91 .byte 0x91
+ 30871 2f24 A069 .sleb128 -2912
+ 30872 2f26 00 .byte 0x0
+ 30873 2f27 35 .uleb128 0x35
+ 30874 2f28 1F0D0000 .long 0xd1f
+ 30875 2f2c 00000000 .quad .LBB688
+ 30875 00000000
+ 30876 2f34 00000000 .quad .LBE688
+ 30876 00000000
+ 30877 2f3c 02 .byte 0x2
+ 30878 2f3d 6E03 .value 0x36e
+ 30879 2f3f 32 .uleb128 0x32
+ 30880 2f40 3A0D0000 .long 0xd3a
+ 30881 2f44 03 .byte 0x3
+ 30882 2f45 91 .byte 0x91
+ 30883 2f46 B069 .sleb128 -2896
+ 30884 2f48 32 .uleb128 0x32
+ 30885 2f49 300D0000 .long 0xd30
+ 30886 2f4d 03 .byte 0x3
+ 30887 2f4e 91 .byte 0x91
+ 30888 2f4f C069 .sleb128 -2880
+
GAS LISTING /tmp/ccMa7HLZ.s page 869
+
+
+ 30889 2f51 00 .byte 0x0
+ 30890 2f52 00 .byte 0x0
+ 30891 2f53 00 .byte 0x0
+ 30892 2f54 00 .byte 0x0
+ 30893 2f55 36 .uleb128 0x36
+ 30894 2f56 00000000 .quad .LBB690
+ 30894 00000000
+ 30895 2f5e 00000000 .quad .LBE690
+ 30895 00000000
+ 30896 2f66 742F0000 .long 0x2f74
+ 30897 2f6a 34 .uleb128 0x34
+ 30898 2f6b 180C0000 .long 0xc18
+ 30899 2f6f 03 .byte 0x3
+ 30900 2f70 91 .byte 0x91
+ 30901 2f71 9041 .sleb128 -8048
+ 30902 2f73 00 .byte 0x0
+ 30903 2f74 31 .uleb128 0x31
+ 30904 2f75 160E0000 .long 0xe16
+ 30905 2f79 00000000 .quad .LBB691
+ 30905 00000000
+ 30906 2f81 00000000 .quad .LBE691
+ 30906 00000000
+ 30907 2f89 02 .byte 0x2
+ 30908 2f8a 9406 .value 0x694
+ 30909 2f8c 1C300000 .long 0x301c
+ 30910 2f90 32 .uleb128 0x32
+ 30911 2f91 280E0000 .long 0xe28
+ 30912 2f95 03 .byte 0x3
+ 30913 2f96 91 .byte 0x91
+ 30914 2f97 D069 .sleb128 -2864
+ 30915 2f99 33 .uleb128 0x33
+ 30916 2f9a 00000000 .quad .LBB692
+ 30916 00000000
+ 30917 2fa2 00000000 .quad .LBE692
+ 30917 00000000
+ 30918 2faa 34 .uleb128 0x34
+ 30919 2fab 340E0000 .long 0xe34
+ 30920 2faf 09 .byte 0x9
+ 30921 2fb0 03 .byte 0x3
+ 30922 2fb1 00000000 .quad ShiftRowTable.6768
+ 30922 00000000
+ 30923 2fb9 35 .uleb128 0x35
+ 30924 2fba 6E0D0000 .long 0xd6e
+ 30925 2fbe 00000000 .quad .LBB693
+ 30925 00000000
+ 30926 2fc6 00000000 .quad .LBE693
+ 30926 00000000
+ 30927 2fce 02 .byte 0x2
+ 30928 2fcf 9B02 .value 0x29b
+ 30929 2fd1 32 .uleb128 0x32
+ 30930 2fd2 8C0D0000 .long 0xd8c
+ 30931 2fd6 03 .byte 0x3
+ 30932 2fd7 91 .byte 0x91
+ 30933 2fd8 E069 .sleb128 -2848
+ 30934 2fda 32 .uleb128 0x32
+ 30935 2fdb 800D0000 .long 0xd80
+ 30936 2fdf 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 870
+
+
+ 30937 2fe0 91 .byte 0x91
+ 30938 2fe1 F069 .sleb128 -2832
+ 30939 2fe3 33 .uleb128 0x33
+ 30940 2fe4 00000000 .quad .LBB694
+ 30940 00000000
+ 30941 2fec 00000000 .quad .LBE694
+ 30941 00000000
+ 30942 2ff4 34 .uleb128 0x34
+ 30943 2ff5 980D0000 .long 0xd98
+ 30944 2ff9 03 .byte 0x3
+ 30945 2ffa 91 .byte 0x91
+ 30946 2ffb B042 .sleb128 -7888
+ 30947 2ffd 34 .uleb128 0x34
+ 30948 2ffe A40D0000 .long 0xda4
+ 30949 3002 03 .byte 0x3
+ 30950 3003 91 .byte 0x91
+ 30951 3004 A042 .sleb128 -7904
+ 30952 3006 34 .uleb128 0x34
+ 30953 3007 AF0D0000 .long 0xdaf
+ 30954 300b 03 .byte 0x3
+ 30955 300c 91 .byte 0x91
+ 30956 300d 9042 .sleb128 -7920
+ 30957 300f 34 .uleb128 0x34
+ 30958 3010 BB0D0000 .long 0xdbb
+ 30959 3014 03 .byte 0x3
+ 30960 3015 91 .byte 0x91
+ 30961 3016 8C6A .sleb128 -2804
+ 30962 3018 00 .byte 0x0
+ 30963 3019 00 .byte 0x0
+ 30964 301a 00 .byte 0x0
+ 30965 301b 00 .byte 0x0
+ 30966 301c 36 .uleb128 0x36
+ 30967 301d 00000000 .quad .LBB695
+ 30967 00000000
+ 30968 3025 00000000 .quad .LBE695
+ 30968 00000000
+ 30969 302d 3B300000 .long 0x303b
+ 30970 3031 34 .uleb128 0x34
+ 30971 3032 280C0000 .long 0xc28
+ 30972 3036 03 .byte 0x3
+ 30973 3037 91 .byte 0x91
+ 30974 3038 8041 .sleb128 -8064
+ 30975 303a 00 .byte 0x0
+ 30976 303b 31 .uleb128 0x31
+ 30977 303c 520E0000 .long 0xe52
+ 30978 3040 00000000 .quad .LBB696
+ 30978 00000000
+ 30979 3048 00000000 .quad .LBE696
+ 30979 00000000
+ 30980 3050 02 .byte 0x2
+ 30981 3051 9606 .value 0x696
+ 30982 3053 6A300000 .long 0x306a
+ 30983 3057 32 .uleb128 0x32
+ 30984 3058 6D0E0000 .long 0xe6d
+ 30985 305c 03 .byte 0x3
+ 30986 305d 91 .byte 0x91
+ 30987 305e 906A .sleb128 -2800
+
GAS LISTING /tmp/ccMa7HLZ.s page 871
+
+
+ 30988 3060 32 .uleb128 0x32
+ 30989 3061 630E0000 .long 0xe63
+ 30990 3065 03 .byte 0x3
+ 30991 3066 91 .byte 0x91
+ 30992 3067 A06A .sleb128 -2784
+ 30993 3069 00 .byte 0x0
+ 30994 306a 36 .uleb128 0x36
+ 30995 306b 00000000 .quad .LBB698
+ 30995 00000000
+ 30996 3073 00000000 .quad .LBE698
+ 30996 00000000
+ 30997 307b 89300000 .long 0x3089
+ 30998 307f 34 .uleb128 0x34
+ 30999 3080 380C0000 .long 0xc38
+ 31000 3084 03 .byte 0x3
+ 31001 3085 91 .byte 0x91
+ 31002 3086 F040 .sleb128 -8080
+ 31003 3088 00 .byte 0x0
+ 31004 3089 31 .uleb128 0x31
+ 31005 308a 780E0000 .long 0xe78
+ 31006 308e 00000000 .quad .LBB699
+ 31006 00000000
+ 31007 3096 00000000 .quad .LBE699
+ 31007 00000000
+ 31008 309e 02 .byte 0x2
+ 31009 309f 9806 .value 0x698
+ 31010 30a1 CA300000 .long 0x30ca
+ 31011 30a5 32 .uleb128 0x32
+ 31012 30a6 8A0E0000 .long 0xe8a
+ 31013 30aa 03 .byte 0x3
+ 31014 30ab 91 .byte 0x91
+ 31015 30ac B06A .sleb128 -2768
+ 31016 30ae 33 .uleb128 0x33
+ 31017 30af 00000000 .quad .LBB700
+ 31017 00000000
+ 31018 30b7 00000000 .quad .LBE700
+ 31018 00000000
+ 31019 30bf 34 .uleb128 0x34
+ 31020 30c0 960E0000 .long 0xe96
+ 31021 30c4 03 .byte 0x3
+ 31022 30c5 91 .byte 0x91
+ 31023 30c6 C042 .sleb128 -7872
+ 31024 30c8 00 .byte 0x0
+ 31025 30c9 00 .byte 0x0
+ 31026 30ca 33 .uleb128 0x33
+ 31027 30cb 00000000 .quad .LBB701
+ 31027 00000000
+ 31028 30d3 00000000 .quad .LBE701
+ 31028 00000000
+ 31029 30db 34 .uleb128 0x34
+ 31030 30dc 440C0000 .long 0xc44
+ 31031 30e0 03 .byte 0x3
+ 31032 30e1 91 .byte 0x91
+ 31033 30e2 E040 .sleb128 -8096
+ 31034 30e4 00 .byte 0x0
+ 31035 30e5 00 .byte 0x0
+ 31036 30e6 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 872
+
+
+ 31037 30e7 31 .uleb128 0x31
+ 31038 30e8 A30E0000 .long 0xea3
+ 31039 30ec 00000000 .quad .LBB702
+ 31039 00000000
+ 31040 30f4 00000000 .quad .LBE702
+ 31040 00000000
+ 31041 30fc 02 .byte 0x2
+ 31042 30fd D506 .value 0x6d5
+ 31043 30ff E8310000 .long 0x31e8
+ 31044 3103 32 .uleb128 0x32
+ 31045 3104 B50E0000 .long 0xeb5
+ 31046 3108 03 .byte 0x3
+ 31047 3109 91 .byte 0x91
+ 31048 310a C06A .sleb128 -2752
+ 31049 310c 33 .uleb128 0x33
+ 31050 310d 00000000 .quad .LBB703
+ 31050 00000000
+ 31051 3115 00000000 .quad .LBE703
+ 31051 00000000
+ 31052 311d 34 .uleb128 0x34
+ 31053 311e C10E0000 .long 0xec1
+ 31054 3122 04 .byte 0x4
+ 31055 3123 76 .byte 0x76
+ 31056 3124 A0B37F .sleb128 -9824
+ 31057 3127 31 .uleb128 0x31
+ 31058 3128 CE0E0000 .long 0xece
+ 31059 312c 00000000 .quad .LBB704
+ 31059 00000000
+ 31060 3134 00000000 .quad .LBE704
+ 31060 00000000
+ 31061 313c 02 .byte 0x2
+ 31062 313d 1F06 .value 0x61f
+ 31063 313f 68310000 .long 0x3168
+ 31064 3143 32 .uleb128 0x32
+ 31065 3144 E00E0000 .long 0xee0
+ 31066 3148 03 .byte 0x3
+ 31067 3149 91 .byte 0x91
+ 31068 314a D06A .sleb128 -2736
+ 31069 314c 33 .uleb128 0x33
+ 31070 314d 00000000 .quad .LBB705
+ 31070 00000000
+ 31071 3155 00000000 .quad .LBE705
+ 31071 00000000
+ 31072 315d 34 .uleb128 0x34
+ 31073 315e EC0E0000 .long 0xeec
+ 31074 3162 03 .byte 0x3
+ 31075 3163 91 .byte 0x91
+ 31076 3164 D042 .sleb128 -7856
+ 31077 3166 00 .byte 0x0
+ 31078 3167 00 .byte 0x0
+ 31079 3168 31 .uleb128 0x31
+ 31080 3169 CE0E0000 .long 0xece
+ 31081 316d 00000000 .quad .LBB706
+ 31081 00000000
+ 31082 3175 00000000 .quad .LBE706
+ 31082 00000000
+ 31083 317d 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 873
+
+
+ 31084 317e 2006 .value 0x620
+ 31085 3180 A9310000 .long 0x31a9
+ 31086 3184 32 .uleb128 0x32
+ 31087 3185 E00E0000 .long 0xee0
+ 31088 3189 03 .byte 0x3
+ 31089 318a 91 .byte 0x91
+ 31090 318b E06A .sleb128 -2720
+ 31091 318d 33 .uleb128 0x33
+ 31092 318e 00000000 .quad .LBB707
+ 31092 00000000
+ 31093 3196 00000000 .quad .LBE707
+ 31093 00000000
+ 31094 319e 34 .uleb128 0x34
+ 31095 319f EC0E0000 .long 0xeec
+ 31096 31a3 03 .byte 0x3
+ 31097 31a4 91 .byte 0x91
+ 31098 31a5 E042 .sleb128 -7840
+ 31099 31a7 00 .byte 0x0
+ 31100 31a8 00 .byte 0x0
+ 31101 31a9 35 .uleb128 0x35
+ 31102 31aa CE0E0000 .long 0xece
+ 31103 31ae 00000000 .quad .LBB708
+ 31103 00000000
+ 31104 31b6 00000000 .quad .LBE708
+ 31104 00000000
+ 31105 31be 02 .byte 0x2
+ 31106 31bf 2106 .value 0x621
+ 31107 31c1 32 .uleb128 0x32
+ 31108 31c2 E00E0000 .long 0xee0
+ 31109 31c6 03 .byte 0x3
+ 31110 31c7 91 .byte 0x91
+ 31111 31c8 F06A .sleb128 -2704
+ 31112 31ca 33 .uleb128 0x33
+ 31113 31cb 00000000 .quad .LBB709
+ 31113 00000000
+ 31114 31d3 00000000 .quad .LBE709
+ 31114 00000000
+ 31115 31db 34 .uleb128 0x34
+ 31116 31dc EC0E0000 .long 0xeec
+ 31117 31e0 03 .byte 0x3
+ 31118 31e1 91 .byte 0x91
+ 31119 31e2 F042 .sleb128 -7824
+ 31120 31e4 00 .byte 0x0
+ 31121 31e5 00 .byte 0x0
+ 31122 31e6 00 .byte 0x0
+ 31123 31e7 00 .byte 0x0
+ 31124 31e8 31 .uleb128 0x31
+ 31125 31e9 D10B0000 .long 0xbd1
+ 31126 31ed 00000000 .quad .LBB710
+ 31126 00000000
+ 31127 31f5 00000000 .quad .LBE710
+ 31127 00000000
+ 31128 31fd 02 .byte 0x2
+ 31129 31fe D606 .value 0x6d6
+ 31130 3200 90360000 .long 0x3690
+ 31131 3204 32 .uleb128 0x32
+ 31132 3205 EF0B0000 .long 0xbef
+
GAS LISTING /tmp/ccMa7HLZ.s page 874
+
+
+ 31133 3209 03 .byte 0x3
+ 31134 320a 91 .byte 0x91
+ 31135 320b 8C6B .sleb128 -2676
+ 31136 320d 32 .uleb128 0x32
+ 31137 320e E30B0000 .long 0xbe3
+ 31138 3212 03 .byte 0x3
+ 31139 3213 91 .byte 0x91
+ 31140 3214 906B .sleb128 -2672
+ 31141 3216 33 .uleb128 0x33
+ 31142 3217 00000000 .quad .LBB711
+ 31142 00000000
+ 31143 321f 00000000 .quad .LBE711
+ 31143 00000000
+ 31144 3227 34 .uleb128 0x34
+ 31145 3228 FB0B0000 .long 0xbfb
+ 31146 322c 04 .byte 0x4
+ 31147 322d 76 .byte 0x76
+ 31148 322e C0B37F .sleb128 -9792
+ 31149 3231 34 .uleb128 0x34
+ 31150 3232 070C0000 .long 0xc07
+ 31151 3236 04 .byte 0x4
+ 31152 3237 76 .byte 0x76
+ 31153 3238 B0B37F .sleb128 -9808
+ 31154 323b 31 .uleb128 0x31
+ 31155 323c 500C0000 .long 0xc50
+ 31156 3240 00000000 .quad .LBB712
+ 31156 00000000
+ 31157 3248 00000000 .quad .LBE712
+ 31157 00000000
+ 31158 3250 02 .byte 0x2
+ 31159 3251 9106 .value 0x691
+ 31160 3253 8E320000 .long 0x328e
+ 31161 3257 32 .uleb128 0x32
+ 31162 3258 7A0C0000 .long 0xc7a
+ 31163 325c 03 .byte 0x3
+ 31164 325d 91 .byte 0x91
+ 31165 325e A86B .sleb128 -2648
+ 31166 3260 32 .uleb128 0x32
+ 31167 3261 6E0C0000 .long 0xc6e
+ 31168 3265 03 .byte 0x3
+ 31169 3266 91 .byte 0x91
+ 31170 3267 AC6B .sleb128 -2644
+ 31171 3269 32 .uleb128 0x32
+ 31172 326a 620C0000 .long 0xc62
+ 31173 326e 03 .byte 0x3
+ 31174 326f 91 .byte 0x91
+ 31175 3270 B06B .sleb128 -2640
+ 31176 3272 33 .uleb128 0x33
+ 31177 3273 00000000 .quad .LBB713
+ 31177 00000000
+ 31178 327b 00000000 .quad .LBE713
+ 31178 00000000
+ 31179 3283 34 .uleb128 0x34
+ 31180 3284 860C0000 .long 0xc86
+ 31181 3288 03 .byte 0x3
+ 31182 3289 91 .byte 0x91
+ 31183 328a C043 .sleb128 -7744
+
GAS LISTING /tmp/ccMa7HLZ.s page 875
+
+
+ 31184 328c 00 .byte 0x0
+ 31185 328d 00 .byte 0x0
+ 31186 328e 31 .uleb128 0x31
+ 31187 328f 910C0000 .long 0xc91
+ 31188 3293 00000000 .quad .LBB714
+ 31188 00000000
+ 31189 329b 00000000 .quad .LBE714
+ 31189 00000000
+ 31190 32a3 02 .byte 0x2
+ 31191 32a4 9206 .value 0x692
+ 31192 32a6 FE340000 .long 0x34fe
+ 31193 32aa 32 .uleb128 0x32
+ 31194 32ab A30C0000 .long 0xca3
+ 31195 32af 03 .byte 0x3
+ 31196 32b0 91 .byte 0x91
+ 31197 32b1 C06B .sleb128 -2624
+ 31198 32b3 35 .uleb128 0x35
+ 31199 32b4 B00C0000 .long 0xcb0
+ 31200 32b8 00000000 .quad .LBB716
+ 31200 00000000
+ 31201 32c0 00000000 .quad .LBE716
+ 31201 00000000
+ 31202 32c8 02 .byte 0x2
+ 31203 32c9 7D03 .value 0x37d
+ 31204 32cb 32 .uleb128 0x32
+ 31205 32cc CE0C0000 .long 0xcce
+ 31206 32d0 03 .byte 0x3
+ 31207 32d1 91 .byte 0x91
+ 31208 32d2 D86B .sleb128 -2600
+ 31209 32d4 32 .uleb128 0x32
+ 31210 32d5 C20C0000 .long 0xcc2
+ 31211 32d9 03 .byte 0x3
+ 31212 32da 91 .byte 0x91
+ 31213 32db E06B .sleb128 -2592
+ 31214 32dd 33 .uleb128 0x33
+ 31215 32de 00000000 .quad .LBB717
+ 31215 00000000
+ 31216 32e6 00000000 .quad .LBE717
+ 31216 00000000
+ 31217 32ee 34 .uleb128 0x34
+ 31218 32ef DA0C0000 .long 0xcda
+ 31219 32f3 03 .byte 0x3
+ 31220 32f4 91 .byte 0x91
+ 31221 32f5 B06C .sleb128 -2512
+ 31222 32f7 34 .uleb128 0x34
+ 31223 32f8 E50C0000 .long 0xce5
+ 31224 32fc 03 .byte 0x3
+ 31225 32fd 91 .byte 0x91
+ 31226 32fe A06C .sleb128 -2528
+ 31227 3300 34 .uleb128 0x34
+ 31228 3301 F00C0000 .long 0xcf0
+ 31229 3305 03 .byte 0x3
+ 31230 3306 91 .byte 0x91
+ 31231 3307 906C .sleb128 -2544
+ 31232 3309 34 .uleb128 0x34
+ 31233 330a FC0C0000 .long 0xcfc
+ 31234 330e 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 876
+
+
+ 31235 330f 91 .byte 0x91
+ 31236 3310 806C .sleb128 -2560
+ 31237 3312 34 .uleb128 0x34
+ 31238 3313 080D0000 .long 0xd08
+ 31239 3317 03 .byte 0x3
+ 31240 3318 91 .byte 0x91
+ 31241 3319 FC6B .sleb128 -2564
+ 31242 331b 31 .uleb128 0x31
+ 31243 331c 1F0D0000 .long 0xd1f
+ 31244 3320 00000000 .quad .LBB718
+ 31244 00000000
+ 31245 3328 00000000 .quad .LBE718
+ 31245 00000000
+ 31246 3330 02 .byte 0x2
+ 31247 3331 5603 .value 0x356
+ 31248 3333 4A330000 .long 0x334a
+ 31249 3337 32 .uleb128 0x32
+ 31250 3338 3A0D0000 .long 0xd3a
+ 31251 333c 03 .byte 0x3
+ 31252 333d 91 .byte 0x91
+ 31253 333e C06C .sleb128 -2496
+ 31254 3340 32 .uleb128 0x32
+ 31255 3341 300D0000 .long 0xd30
+ 31256 3345 03 .byte 0x3
+ 31257 3346 91 .byte 0x91
+ 31258 3347 D06C .sleb128 -2480
+ 31259 3349 00 .byte 0x0
+ 31260 334a 31 .uleb128 0x31
+ 31261 334b 450D0000 .long 0xd45
+ 31262 334f 00000000 .quad .LBB720
+ 31262 00000000
+ 31263 3357 00000000 .quad .LBE720
+ 31263 00000000
+ 31264 335f 02 .byte 0x2
+ 31265 3360 5E03 .value 0x35e
+ 31266 3362 79330000 .long 0x3379
+ 31267 3366 32 .uleb128 0x32
+ 31268 3367 620D0000 .long 0xd62
+ 31269 336b 03 .byte 0x3
+ 31270 336c 91 .byte 0x91
+ 31271 336d E06C .sleb128 -2464
+ 31272 336f 32 .uleb128 0x32
+ 31273 3370 570D0000 .long 0xd57
+ 31274 3374 03 .byte 0x3
+ 31275 3375 91 .byte 0x91
+ 31276 3376 F06C .sleb128 -2448
+ 31277 3378 00 .byte 0x0
+ 31278 3379 31 .uleb128 0x31
+ 31279 337a 6E0D0000 .long 0xd6e
+ 31280 337e 00000000 .quad .LBB722
+ 31280 00000000
+ 31281 3386 00000000 .quad .LBE722
+ 31281 00000000
+ 31282 338e 02 .byte 0x2
+ 31283 338f 6403 .value 0x364
+ 31284 3391 DE330000 .long 0x33de
+ 31285 3395 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 877
+
+
+ 31286 3396 8C0D0000 .long 0xd8c
+ 31287 339a 03 .byte 0x3
+ 31288 339b 91 .byte 0x91
+ 31289 339c 806D .sleb128 -2432
+ 31290 339e 32 .uleb128 0x32
+ 31291 339f 800D0000 .long 0xd80
+ 31292 33a3 03 .byte 0x3
+ 31293 33a4 91 .byte 0x91
+ 31294 33a5 906D .sleb128 -2416
+ 31295 33a7 33 .uleb128 0x33
+ 31296 33a8 00000000 .quad .LBB723
+ 31296 00000000
+ 31297 33b0 00000000 .quad .LBE723
+ 31297 00000000
+ 31298 33b8 34 .uleb128 0x34
+ 31299 33b9 980D0000 .long 0xd98
+ 31300 33bd 03 .byte 0x3
+ 31301 33be 91 .byte 0x91
+ 31302 33bf F043 .sleb128 -7696
+ 31303 33c1 34 .uleb128 0x34
+ 31304 33c2 A40D0000 .long 0xda4
+ 31305 33c6 03 .byte 0x3
+ 31306 33c7 91 .byte 0x91
+ 31307 33c8 E043 .sleb128 -7712
+ 31308 33ca 34 .uleb128 0x34
+ 31309 33cb AF0D0000 .long 0xdaf
+ 31310 33cf 03 .byte 0x3
+ 31311 33d0 91 .byte 0x91
+ 31312 33d1 D043 .sleb128 -7728
+ 31313 33d3 34 .uleb128 0x34
+ 31314 33d4 BB0D0000 .long 0xdbb
+ 31315 33d8 03 .byte 0x3
+ 31316 33d9 91 .byte 0x91
+ 31317 33da AC6D .sleb128 -2388
+ 31318 33dc 00 .byte 0x0
+ 31319 33dd 00 .byte 0x0
+ 31320 33de 31 .uleb128 0x31
+ 31321 33df C70D0000 .long 0xdc7
+ 31322 33e3 00000000 .quad .LBB724
+ 31322 00000000
+ 31323 33eb 00000000 .quad .LBE724
+ 31323 00000000
+ 31324 33f3 02 .byte 0x2
+ 31325 33f4 6603 .value 0x366
+ 31326 33f6 0D340000 .long 0x340d
+ 31327 33fa 32 .uleb128 0x32
+ 31328 33fb E20D0000 .long 0xde2
+ 31329 33ff 03 .byte 0x3
+ 31330 3400 91 .byte 0x91
+ 31331 3401 B06D .sleb128 -2384
+ 31332 3403 32 .uleb128 0x32
+ 31333 3404 D80D0000 .long 0xdd8
+ 31334 3408 03 .byte 0x3
+ 31335 3409 91 .byte 0x91
+ 31336 340a C06D .sleb128 -2368
+ 31337 340c 00 .byte 0x0
+ 31338 340d 31 .uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s page 878
+
+
+ 31339 340e 6E0D0000 .long 0xd6e
+ 31340 3412 00000000 .quad .LBB726
+ 31340 00000000
+ 31341 341a 00000000 .quad .LBE726
+ 31341 00000000
+ 31342 3422 02 .byte 0x2
+ 31343 3423 6803 .value 0x368
+ 31344 3425 72340000 .long 0x3472
+ 31345 3429 32 .uleb128 0x32
+ 31346 342a 8C0D0000 .long 0xd8c
+ 31347 342e 03 .byte 0x3
+ 31348 342f 91 .byte 0x91
+ 31349 3430 D06D .sleb128 -2352
+ 31350 3432 32 .uleb128 0x32
+ 31351 3433 800D0000 .long 0xd80
+ 31352 3437 03 .byte 0x3
+ 31353 3438 91 .byte 0x91
+ 31354 3439 E06D .sleb128 -2336
+ 31355 343b 33 .uleb128 0x33
+ 31356 343c 00000000 .quad .LBB727
+ 31356 00000000
+ 31357 3444 00000000 .quad .LBE727
+ 31357 00000000
+ 31358 344c 34 .uleb128 0x34
+ 31359 344d 980D0000 .long 0xd98
+ 31360 3451 03 .byte 0x3
+ 31361 3452 91 .byte 0x91
+ 31362 3453 A044 .sleb128 -7648
+ 31363 3455 34 .uleb128 0x34
+ 31364 3456 A40D0000 .long 0xda4
+ 31365 345a 03 .byte 0x3
+ 31366 345b 91 .byte 0x91
+ 31367 345c 9044 .sleb128 -7664
+ 31368 345e 34 .uleb128 0x34
+ 31369 345f AF0D0000 .long 0xdaf
+ 31370 3463 03 .byte 0x3
+ 31371 3464 91 .byte 0x91
+ 31372 3465 8044 .sleb128 -7680
+ 31373 3467 34 .uleb128 0x34
+ 31374 3468 BB0D0000 .long 0xdbb
+ 31375 346c 03 .byte 0x3
+ 31376 346d 91 .byte 0x91
+ 31377 346e FC6D .sleb128 -2308
+ 31378 3470 00 .byte 0x0
+ 31379 3471 00 .byte 0x0
+ 31380 3472 31 .uleb128 0x31
+ 31381 3473 C70D0000 .long 0xdc7
+ 31382 3477 00000000 .quad .LBB728
+ 31382 00000000
+ 31383 347f 00000000 .quad .LBE728
+ 31383 00000000
+ 31384 3487 02 .byte 0x2
+ 31385 3488 6A03 .value 0x36a
+ 31386 348a A1340000 .long 0x34a1
+ 31387 348e 32 .uleb128 0x32
+ 31388 348f E20D0000 .long 0xde2
+ 31389 3493 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 879
+
+
+ 31390 3494 91 .byte 0x91
+ 31391 3495 806E .sleb128 -2304
+ 31392 3497 32 .uleb128 0x32
+ 31393 3498 D80D0000 .long 0xdd8
+ 31394 349c 03 .byte 0x3
+ 31395 349d 91 .byte 0x91
+ 31396 349e 906E .sleb128 -2288
+ 31397 34a0 00 .byte 0x0
+ 31398 34a1 31 .uleb128 0x31
+ 31399 34a2 ED0D0000 .long 0xded
+ 31400 34a6 00000000 .quad .LBB730
+ 31400 00000000
+ 31401 34ae 00000000 .quad .LBE730
+ 31401 00000000
+ 31402 34b6 02 .byte 0x2
+ 31403 34b7 6C03 .value 0x36c
+ 31404 34b9 D0340000 .long 0x34d0
+ 31405 34bd 32 .uleb128 0x32
+ 31406 34be 0A0E0000 .long 0xe0a
+ 31407 34c2 03 .byte 0x3
+ 31408 34c3 91 .byte 0x91
+ 31409 34c4 A06E .sleb128 -2272
+ 31410 34c6 32 .uleb128 0x32
+ 31411 34c7 FF0D0000 .long 0xdff
+ 31412 34cb 03 .byte 0x3
+ 31413 34cc 91 .byte 0x91
+ 31414 34cd B06E .sleb128 -2256
+ 31415 34cf 00 .byte 0x0
+ 31416 34d0 35 .uleb128 0x35
+ 31417 34d1 1F0D0000 .long 0xd1f
+ 31418 34d5 00000000 .quad .LBB732
+ 31418 00000000
+ 31419 34dd 00000000 .quad .LBE732
+ 31419 00000000
+ 31420 34e5 02 .byte 0x2
+ 31421 34e6 6E03 .value 0x36e
+ 31422 34e8 32 .uleb128 0x32
+ 31423 34e9 3A0D0000 .long 0xd3a
+ 31424 34ed 03 .byte 0x3
+ 31425 34ee 91 .byte 0x91
+ 31426 34ef C06E .sleb128 -2240
+ 31427 34f1 32 .uleb128 0x32
+ 31428 34f2 300D0000 .long 0xd30
+ 31429 34f6 03 .byte 0x3
+ 31430 34f7 91 .byte 0x91
+ 31431 34f8 D06E .sleb128 -2224
+ 31432 34fa 00 .byte 0x0
+ 31433 34fb 00 .byte 0x0
+ 31434 34fc 00 .byte 0x0
+ 31435 34fd 00 .byte 0x0
+ 31436 34fe 36 .uleb128 0x36
+ 31437 34ff 00000000 .quad .LBB734
+ 31437 00000000
+ 31438 3507 00000000 .quad .LBE734
+ 31438 00000000
+ 31439 350f 1D350000 .long 0x351d
+ 31440 3513 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 880
+
+
+ 31441 3514 180C0000 .long 0xc18
+ 31442 3518 03 .byte 0x3
+ 31443 3519 91 .byte 0x91
+ 31444 351a B043 .sleb128 -7760
+ 31445 351c 00 .byte 0x0
+ 31446 351d 31 .uleb128 0x31
+ 31447 351e 160E0000 .long 0xe16
+ 31448 3522 00000000 .quad .LBB735
+ 31448 00000000
+ 31449 352a 00000000 .quad .LBE735
+ 31449 00000000
+ 31450 3532 02 .byte 0x2
+ 31451 3533 9406 .value 0x694
+ 31452 3535 C5350000 .long 0x35c5
+ 31453 3539 32 .uleb128 0x32
+ 31454 353a 280E0000 .long 0xe28
+ 31455 353e 03 .byte 0x3
+ 31456 353f 91 .byte 0x91
+ 31457 3540 E06E .sleb128 -2208
+ 31458 3542 33 .uleb128 0x33
+ 31459 3543 00000000 .quad .LBB736
+ 31459 00000000
+ 31460 354b 00000000 .quad .LBE736
+ 31460 00000000
+ 31461 3553 34 .uleb128 0x34
+ 31462 3554 340E0000 .long 0xe34
+ 31463 3558 09 .byte 0x9
+ 31464 3559 03 .byte 0x3
+ 31465 355a 00000000 .quad ShiftRowTable.6768
+ 31465 00000000
+ 31466 3562 35 .uleb128 0x35
+ 31467 3563 6E0D0000 .long 0xd6e
+ 31468 3567 00000000 .quad .LBB737
+ 31468 00000000
+ 31469 356f 00000000 .quad .LBE737
+ 31469 00000000
+ 31470 3577 02 .byte 0x2
+ 31471 3578 9B02 .value 0x29b
+ 31472 357a 32 .uleb128 0x32
+ 31473 357b 8C0D0000 .long 0xd8c
+ 31474 357f 03 .byte 0x3
+ 31475 3580 91 .byte 0x91
+ 31476 3581 F06E .sleb128 -2192
+ 31477 3583 32 .uleb128 0x32
+ 31478 3584 800D0000 .long 0xd80
+ 31479 3588 03 .byte 0x3
+ 31480 3589 91 .byte 0x91
+ 31481 358a 806F .sleb128 -2176
+ 31482 358c 33 .uleb128 0x33
+ 31483 358d 00000000 .quad .LBB738
+ 31483 00000000
+ 31484 3595 00000000 .quad .LBE738
+ 31484 00000000
+ 31485 359d 34 .uleb128 0x34
+ 31486 359e 980D0000 .long 0xd98
+ 31487 35a2 03 .byte 0x3
+ 31488 35a3 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 881
+
+
+ 31489 35a4 D044 .sleb128 -7600
+ 31490 35a6 34 .uleb128 0x34
+ 31491 35a7 A40D0000 .long 0xda4
+ 31492 35ab 03 .byte 0x3
+ 31493 35ac 91 .byte 0x91
+ 31494 35ad C044 .sleb128 -7616
+ 31495 35af 34 .uleb128 0x34
+ 31496 35b0 AF0D0000 .long 0xdaf
+ 31497 35b4 03 .byte 0x3
+ 31498 35b5 91 .byte 0x91
+ 31499 35b6 B044 .sleb128 -7632
+ 31500 35b8 34 .uleb128 0x34
+ 31501 35b9 BB0D0000 .long 0xdbb
+ 31502 35bd 03 .byte 0x3
+ 31503 35be 91 .byte 0x91
+ 31504 35bf 9C6F .sleb128 -2148
+ 31505 35c1 00 .byte 0x0
+ 31506 35c2 00 .byte 0x0
+ 31507 35c3 00 .byte 0x0
+ 31508 35c4 00 .byte 0x0
+ 31509 35c5 36 .uleb128 0x36
+ 31510 35c6 00000000 .quad .LBB739
+ 31510 00000000
+ 31511 35ce 00000000 .quad .LBE739
+ 31511 00000000
+ 31512 35d6 E4350000 .long 0x35e4
+ 31513 35da 34 .uleb128 0x34
+ 31514 35db 280C0000 .long 0xc28
+ 31515 35df 03 .byte 0x3
+ 31516 35e0 91 .byte 0x91
+ 31517 35e1 A043 .sleb128 -7776
+ 31518 35e3 00 .byte 0x0
+ 31519 35e4 31 .uleb128 0x31
+ 31520 35e5 520E0000 .long 0xe52
+ 31521 35e9 00000000 .quad .LBB740
+ 31521 00000000
+ 31522 35f1 00000000 .quad .LBE740
+ 31522 00000000
+ 31523 35f9 02 .byte 0x2
+ 31524 35fa 9606 .value 0x696
+ 31525 35fc 13360000 .long 0x3613
+ 31526 3600 32 .uleb128 0x32
+ 31527 3601 6D0E0000 .long 0xe6d
+ 31528 3605 03 .byte 0x3
+ 31529 3606 91 .byte 0x91
+ 31530 3607 A06F .sleb128 -2144
+ 31531 3609 32 .uleb128 0x32
+ 31532 360a 630E0000 .long 0xe63
+ 31533 360e 03 .byte 0x3
+ 31534 360f 91 .byte 0x91
+ 31535 3610 B06F .sleb128 -2128
+ 31536 3612 00 .byte 0x0
+ 31537 3613 36 .uleb128 0x36
+ 31538 3614 00000000 .quad .LBB742
+ 31538 00000000
+ 31539 361c 00000000 .quad .LBE742
+ 31539 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 882
+
+
+ 31540 3624 32360000 .long 0x3632
+ 31541 3628 34 .uleb128 0x34
+ 31542 3629 380C0000 .long 0xc38
+ 31543 362d 03 .byte 0x3
+ 31544 362e 91 .byte 0x91
+ 31545 362f 9043 .sleb128 -7792
+ 31546 3631 00 .byte 0x0
+ 31547 3632 31 .uleb128 0x31
+ 31548 3633 780E0000 .long 0xe78
+ 31549 3637 00000000 .quad .LBB743
+ 31549 00000000
+ 31550 363f 00000000 .quad .LBE743
+ 31550 00000000
+ 31551 3647 02 .byte 0x2
+ 31552 3648 9806 .value 0x698
+ 31553 364a 73360000 .long 0x3673
+ 31554 364e 32 .uleb128 0x32
+ 31555 364f 8A0E0000 .long 0xe8a
+ 31556 3653 03 .byte 0x3
+ 31557 3654 91 .byte 0x91
+ 31558 3655 C06F .sleb128 -2112
+ 31559 3657 33 .uleb128 0x33
+ 31560 3658 00000000 .quad .LBB744
+ 31560 00000000
+ 31561 3660 00000000 .quad .LBE744
+ 31561 00000000
+ 31562 3668 34 .uleb128 0x34
+ 31563 3669 960E0000 .long 0xe96
+ 31564 366d 03 .byte 0x3
+ 31565 366e 91 .byte 0x91
+ 31566 366f E044 .sleb128 -7584
+ 31567 3671 00 .byte 0x0
+ 31568 3672 00 .byte 0x0
+ 31569 3673 33 .uleb128 0x33
+ 31570 3674 00000000 .quad .LBB745
+ 31570 00000000
+ 31571 367c 00000000 .quad .LBE745
+ 31571 00000000
+ 31572 3684 34 .uleb128 0x34
+ 31573 3685 440C0000 .long 0xc44
+ 31574 3689 03 .byte 0x3
+ 31575 368a 91 .byte 0x91
+ 31576 368b 8043 .sleb128 -7808
+ 31577 368d 00 .byte 0x0
+ 31578 368e 00 .byte 0x0
+ 31579 368f 00 .byte 0x0
+ 31580 3690 31 .uleb128 0x31
+ 31581 3691 A30E0000 .long 0xea3
+ 31582 3695 00000000 .quad .LBB746
+ 31582 00000000
+ 31583 369d 00000000 .quad .LBE746
+ 31583 00000000
+ 31584 36a5 02 .byte 0x2
+ 31585 36a6 D606 .value 0x6d6
+ 31586 36a8 91370000 .long 0x3791
+ 31587 36ac 32 .uleb128 0x32
+ 31588 36ad B50E0000 .long 0xeb5
+
GAS LISTING /tmp/ccMa7HLZ.s page 883
+
+
+ 31589 36b1 03 .byte 0x3
+ 31590 36b2 91 .byte 0x91
+ 31591 36b3 D06F .sleb128 -2096
+ 31592 36b5 33 .uleb128 0x33
+ 31593 36b6 00000000 .quad .LBB747
+ 31593 00000000
+ 31594 36be 00000000 .quad .LBE747
+ 31594 00000000
+ 31595 36c6 34 .uleb128 0x34
+ 31596 36c7 C10E0000 .long 0xec1
+ 31597 36cb 04 .byte 0x4
+ 31598 36cc 76 .byte 0x76
+ 31599 36cd E0B37F .sleb128 -9760
+ 31600 36d0 31 .uleb128 0x31
+ 31601 36d1 CE0E0000 .long 0xece
+ 31602 36d5 00000000 .quad .LBB748
+ 31602 00000000
+ 31603 36dd 00000000 .quad .LBE748
+ 31603 00000000
+ 31604 36e5 02 .byte 0x2
+ 31605 36e6 1F06 .value 0x61f
+ 31606 36e8 11370000 .long 0x3711
+ 31607 36ec 32 .uleb128 0x32
+ 31608 36ed E00E0000 .long 0xee0
+ 31609 36f1 03 .byte 0x3
+ 31610 36f2 91 .byte 0x91
+ 31611 36f3 E06F .sleb128 -2080
+ 31612 36f5 33 .uleb128 0x33
+ 31613 36f6 00000000 .quad .LBB749
+ 31613 00000000
+ 31614 36fe 00000000 .quad .LBE749
+ 31614 00000000
+ 31615 3706 34 .uleb128 0x34
+ 31616 3707 EC0E0000 .long 0xeec
+ 31617 370b 03 .byte 0x3
+ 31618 370c 91 .byte 0x91
+ 31619 370d F044 .sleb128 -7568
+ 31620 370f 00 .byte 0x0
+ 31621 3710 00 .byte 0x0
+ 31622 3711 31 .uleb128 0x31
+ 31623 3712 CE0E0000 .long 0xece
+ 31624 3716 00000000 .quad .LBB750
+ 31624 00000000
+ 31625 371e 00000000 .quad .LBE750
+ 31625 00000000
+ 31626 3726 02 .byte 0x2
+ 31627 3727 2006 .value 0x620
+ 31628 3729 52370000 .long 0x3752
+ 31629 372d 32 .uleb128 0x32
+ 31630 372e E00E0000 .long 0xee0
+ 31631 3732 03 .byte 0x3
+ 31632 3733 91 .byte 0x91
+ 31633 3734 F06F .sleb128 -2064
+ 31634 3736 33 .uleb128 0x33
+ 31635 3737 00000000 .quad .LBB751
+ 31635 00000000
+ 31636 373f 00000000 .quad .LBE751
+
GAS LISTING /tmp/ccMa7HLZ.s page 884
+
+
+ 31636 00000000
+ 31637 3747 34 .uleb128 0x34
+ 31638 3748 EC0E0000 .long 0xeec
+ 31639 374c 03 .byte 0x3
+ 31640 374d 91 .byte 0x91
+ 31641 374e 8045 .sleb128 -7552
+ 31642 3750 00 .byte 0x0
+ 31643 3751 00 .byte 0x0
+ 31644 3752 35 .uleb128 0x35
+ 31645 3753 CE0E0000 .long 0xece
+ 31646 3757 00000000 .quad .LBB752
+ 31646 00000000
+ 31647 375f 00000000 .quad .LBE752
+ 31647 00000000
+ 31648 3767 02 .byte 0x2
+ 31649 3768 2106 .value 0x621
+ 31650 376a 32 .uleb128 0x32
+ 31651 376b E00E0000 .long 0xee0
+ 31652 376f 03 .byte 0x3
+ 31653 3770 91 .byte 0x91
+ 31654 3771 8070 .sleb128 -2048
+ 31655 3773 33 .uleb128 0x33
+ 31656 3774 00000000 .quad .LBB753
+ 31656 00000000
+ 31657 377c 00000000 .quad .LBE753
+ 31657 00000000
+ 31658 3784 34 .uleb128 0x34
+ 31659 3785 EC0E0000 .long 0xeec
+ 31660 3789 03 .byte 0x3
+ 31661 378a 91 .byte 0x91
+ 31662 378b 9045 .sleb128 -7536
+ 31663 378d 00 .byte 0x0
+ 31664 378e 00 .byte 0x0
+ 31665 378f 00 .byte 0x0
+ 31666 3790 00 .byte 0x0
+ 31667 3791 31 .uleb128 0x31
+ 31668 3792 D10B0000 .long 0xbd1
+ 31669 3796 00000000 .quad .LBB754
+ 31669 00000000
+ 31670 379e 00000000 .quad .LBE754
+ 31670 00000000
+ 31671 37a6 02 .byte 0x2
+ 31672 37a7 D706 .value 0x6d7
+ 31673 37a9 393C0000 .long 0x3c39
+ 31674 37ad 32 .uleb128 0x32
+ 31675 37ae EF0B0000 .long 0xbef
+ 31676 37b2 03 .byte 0x3
+ 31677 37b3 91 .byte 0x91
+ 31678 37b4 9C70 .sleb128 -2020
+ 31679 37b6 32 .uleb128 0x32
+ 31680 37b7 E30B0000 .long 0xbe3
+ 31681 37bb 03 .byte 0x3
+ 31682 37bc 91 .byte 0x91
+ 31683 37bd A070 .sleb128 -2016
+ 31684 37bf 33 .uleb128 0x33
+ 31685 37c0 00000000 .quad .LBB755
+ 31685 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 885
+
+
+ 31686 37c8 00000000 .quad .LBE755
+ 31686 00000000
+ 31687 37d0 34 .uleb128 0x34
+ 31688 37d1 FB0B0000 .long 0xbfb
+ 31689 37d5 04 .byte 0x4
+ 31690 37d6 76 .byte 0x76
+ 31691 37d7 80B47F .sleb128 -9728
+ 31692 37da 34 .uleb128 0x34
+ 31693 37db 070C0000 .long 0xc07
+ 31694 37df 04 .byte 0x4
+ 31695 37e0 76 .byte 0x76
+ 31696 37e1 F0B37F .sleb128 -9744
+ 31697 37e4 31 .uleb128 0x31
+ 31698 37e5 500C0000 .long 0xc50
+ 31699 37e9 00000000 .quad .LBB756
+ 31699 00000000
+ 31700 37f1 00000000 .quad .LBE756
+ 31700 00000000
+ 31701 37f9 02 .byte 0x2
+ 31702 37fa 9106 .value 0x691
+ 31703 37fc 37380000 .long 0x3837
+ 31704 3800 32 .uleb128 0x32
+ 31705 3801 7A0C0000 .long 0xc7a
+ 31706 3805 03 .byte 0x3
+ 31707 3806 91 .byte 0x91
+ 31708 3807 B870 .sleb128 -1992
+ 31709 3809 32 .uleb128 0x32
+ 31710 380a 6E0C0000 .long 0xc6e
+ 31711 380e 03 .byte 0x3
+ 31712 380f 91 .byte 0x91
+ 31713 3810 BC70 .sleb128 -1988
+ 31714 3812 32 .uleb128 0x32
+ 31715 3813 620C0000 .long 0xc62
+ 31716 3817 03 .byte 0x3
+ 31717 3818 91 .byte 0x91
+ 31718 3819 C070 .sleb128 -1984
+ 31719 381b 33 .uleb128 0x33
+ 31720 381c 00000000 .quad .LBB757
+ 31720 00000000
+ 31721 3824 00000000 .quad .LBE757
+ 31721 00000000
+ 31722 382c 34 .uleb128 0x34
+ 31723 382d 860C0000 .long 0xc86
+ 31724 3831 03 .byte 0x3
+ 31725 3832 91 .byte 0x91
+ 31726 3833 E045 .sleb128 -7456
+ 31727 3835 00 .byte 0x0
+ 31728 3836 00 .byte 0x0
+ 31729 3837 31 .uleb128 0x31
+ 31730 3838 910C0000 .long 0xc91
+ 31731 383c 00000000 .quad .LBB758
+ 31731 00000000
+ 31732 3844 00000000 .quad .LBE758
+ 31732 00000000
+ 31733 384c 02 .byte 0x2
+ 31734 384d 9206 .value 0x692
+ 31735 384f A73A0000 .long 0x3aa7
+
GAS LISTING /tmp/ccMa7HLZ.s page 886
+
+
+ 31736 3853 32 .uleb128 0x32
+ 31737 3854 A30C0000 .long 0xca3
+ 31738 3858 03 .byte 0x3
+ 31739 3859 91 .byte 0x91
+ 31740 385a D070 .sleb128 -1968
+ 31741 385c 35 .uleb128 0x35
+ 31742 385d B00C0000 .long 0xcb0
+ 31743 3861 00000000 .quad .LBB760
+ 31743 00000000
+ 31744 3869 00000000 .quad .LBE760
+ 31744 00000000
+ 31745 3871 02 .byte 0x2
+ 31746 3872 7D03 .value 0x37d
+ 31747 3874 32 .uleb128 0x32
+ 31748 3875 CE0C0000 .long 0xcce
+ 31749 3879 03 .byte 0x3
+ 31750 387a 91 .byte 0x91
+ 31751 387b E870 .sleb128 -1944
+ 31752 387d 32 .uleb128 0x32
+ 31753 387e C20C0000 .long 0xcc2
+ 31754 3882 03 .byte 0x3
+ 31755 3883 91 .byte 0x91
+ 31756 3884 F070 .sleb128 -1936
+ 31757 3886 33 .uleb128 0x33
+ 31758 3887 00000000 .quad .LBB761
+ 31758 00000000
+ 31759 388f 00000000 .quad .LBE761
+ 31759 00000000
+ 31760 3897 34 .uleb128 0x34
+ 31761 3898 DA0C0000 .long 0xcda
+ 31762 389c 03 .byte 0x3
+ 31763 389d 91 .byte 0x91
+ 31764 389e C071 .sleb128 -1856
+ 31765 38a0 34 .uleb128 0x34
+ 31766 38a1 E50C0000 .long 0xce5
+ 31767 38a5 03 .byte 0x3
+ 31768 38a6 91 .byte 0x91
+ 31769 38a7 B071 .sleb128 -1872
+ 31770 38a9 34 .uleb128 0x34
+ 31771 38aa F00C0000 .long 0xcf0
+ 31772 38ae 03 .byte 0x3
+ 31773 38af 91 .byte 0x91
+ 31774 38b0 A071 .sleb128 -1888
+ 31775 38b2 34 .uleb128 0x34
+ 31776 38b3 FC0C0000 .long 0xcfc
+ 31777 38b7 03 .byte 0x3
+ 31778 38b8 91 .byte 0x91
+ 31779 38b9 9071 .sleb128 -1904
+ 31780 38bb 34 .uleb128 0x34
+ 31781 38bc 080D0000 .long 0xd08
+ 31782 38c0 03 .byte 0x3
+ 31783 38c1 91 .byte 0x91
+ 31784 38c2 8C71 .sleb128 -1908
+ 31785 38c4 31 .uleb128 0x31
+ 31786 38c5 1F0D0000 .long 0xd1f
+ 31787 38c9 00000000 .quad .LBB762
+ 31787 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 887
+
+
+ 31788 38d1 00000000 .quad .LBE762
+ 31788 00000000
+ 31789 38d9 02 .byte 0x2
+ 31790 38da 5603 .value 0x356
+ 31791 38dc F3380000 .long 0x38f3
+ 31792 38e0 32 .uleb128 0x32
+ 31793 38e1 3A0D0000 .long 0xd3a
+ 31794 38e5 03 .byte 0x3
+ 31795 38e6 91 .byte 0x91
+ 31796 38e7 D071 .sleb128 -1840
+ 31797 38e9 32 .uleb128 0x32
+ 31798 38ea 300D0000 .long 0xd30
+ 31799 38ee 03 .byte 0x3
+ 31800 38ef 91 .byte 0x91
+ 31801 38f0 E071 .sleb128 -1824
+ 31802 38f2 00 .byte 0x0
+ 31803 38f3 31 .uleb128 0x31
+ 31804 38f4 450D0000 .long 0xd45
+ 31805 38f8 00000000 .quad .LBB764
+ 31805 00000000
+ 31806 3900 00000000 .quad .LBE764
+ 31806 00000000
+ 31807 3908 02 .byte 0x2
+ 31808 3909 5E03 .value 0x35e
+ 31809 390b 22390000 .long 0x3922
+ 31810 390f 32 .uleb128 0x32
+ 31811 3910 620D0000 .long 0xd62
+ 31812 3914 03 .byte 0x3
+ 31813 3915 91 .byte 0x91
+ 31814 3916 F071 .sleb128 -1808
+ 31815 3918 32 .uleb128 0x32
+ 31816 3919 570D0000 .long 0xd57
+ 31817 391d 03 .byte 0x3
+ 31818 391e 91 .byte 0x91
+ 31819 391f 8072 .sleb128 -1792
+ 31820 3921 00 .byte 0x0
+ 31821 3922 31 .uleb128 0x31
+ 31822 3923 6E0D0000 .long 0xd6e
+ 31823 3927 00000000 .quad .LBB766
+ 31823 00000000
+ 31824 392f 00000000 .quad .LBE766
+ 31824 00000000
+ 31825 3937 02 .byte 0x2
+ 31826 3938 6403 .value 0x364
+ 31827 393a 87390000 .long 0x3987
+ 31828 393e 32 .uleb128 0x32
+ 31829 393f 8C0D0000 .long 0xd8c
+ 31830 3943 03 .byte 0x3
+ 31831 3944 91 .byte 0x91
+ 31832 3945 9072 .sleb128 -1776
+ 31833 3947 32 .uleb128 0x32
+ 31834 3948 800D0000 .long 0xd80
+ 31835 394c 03 .byte 0x3
+ 31836 394d 91 .byte 0x91
+ 31837 394e A072 .sleb128 -1760
+ 31838 3950 33 .uleb128 0x33
+ 31839 3951 00000000 .quad .LBB767
+
GAS LISTING /tmp/ccMa7HLZ.s page 888
+
+
+ 31839 00000000
+ 31840 3959 00000000 .quad .LBE767
+ 31840 00000000
+ 31841 3961 34 .uleb128 0x34
+ 31842 3962 980D0000 .long 0xd98
+ 31843 3966 03 .byte 0x3
+ 31844 3967 91 .byte 0x91
+ 31845 3968 9046 .sleb128 -7408
+ 31846 396a 34 .uleb128 0x34
+ 31847 396b A40D0000 .long 0xda4
+ 31848 396f 03 .byte 0x3
+ 31849 3970 91 .byte 0x91
+ 31850 3971 8046 .sleb128 -7424
+ 31851 3973 34 .uleb128 0x34
+ 31852 3974 AF0D0000 .long 0xdaf
+ 31853 3978 03 .byte 0x3
+ 31854 3979 91 .byte 0x91
+ 31855 397a F045 .sleb128 -7440
+ 31856 397c 34 .uleb128 0x34
+ 31857 397d BB0D0000 .long 0xdbb
+ 31858 3981 03 .byte 0x3
+ 31859 3982 91 .byte 0x91
+ 31860 3983 BC72 .sleb128 -1732
+ 31861 3985 00 .byte 0x0
+ 31862 3986 00 .byte 0x0
+ 31863 3987 31 .uleb128 0x31
+ 31864 3988 C70D0000 .long 0xdc7
+ 31865 398c 00000000 .quad .LBB768
+ 31865 00000000
+ 31866 3994 00000000 .quad .LBE768
+ 31866 00000000
+ 31867 399c 02 .byte 0x2
+ 31868 399d 6603 .value 0x366
+ 31869 399f B6390000 .long 0x39b6
+ 31870 39a3 32 .uleb128 0x32
+ 31871 39a4 E20D0000 .long 0xde2
+ 31872 39a8 03 .byte 0x3
+ 31873 39a9 91 .byte 0x91
+ 31874 39aa C072 .sleb128 -1728
+ 31875 39ac 32 .uleb128 0x32
+ 31876 39ad D80D0000 .long 0xdd8
+ 31877 39b1 03 .byte 0x3
+ 31878 39b2 91 .byte 0x91
+ 31879 39b3 D072 .sleb128 -1712
+ 31880 39b5 00 .byte 0x0
+ 31881 39b6 31 .uleb128 0x31
+ 31882 39b7 6E0D0000 .long 0xd6e
+ 31883 39bb 00000000 .quad .LBB770
+ 31883 00000000
+ 31884 39c3 00000000 .quad .LBE770
+ 31884 00000000
+ 31885 39cb 02 .byte 0x2
+ 31886 39cc 6803 .value 0x368
+ 31887 39ce 1B3A0000 .long 0x3a1b
+ 31888 39d2 32 .uleb128 0x32
+ 31889 39d3 8C0D0000 .long 0xd8c
+ 31890 39d7 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 889
+
+
+ 31891 39d8 91 .byte 0x91
+ 31892 39d9 E072 .sleb128 -1696
+ 31893 39db 32 .uleb128 0x32
+ 31894 39dc 800D0000 .long 0xd80
+ 31895 39e0 03 .byte 0x3
+ 31896 39e1 91 .byte 0x91
+ 31897 39e2 F072 .sleb128 -1680
+ 31898 39e4 33 .uleb128 0x33
+ 31899 39e5 00000000 .quad .LBB771
+ 31899 00000000
+ 31900 39ed 00000000 .quad .LBE771
+ 31900 00000000
+ 31901 39f5 34 .uleb128 0x34
+ 31902 39f6 980D0000 .long 0xd98
+ 31903 39fa 03 .byte 0x3
+ 31904 39fb 91 .byte 0x91
+ 31905 39fc C046 .sleb128 -7360
+ 31906 39fe 34 .uleb128 0x34
+ 31907 39ff A40D0000 .long 0xda4
+ 31908 3a03 03 .byte 0x3
+ 31909 3a04 91 .byte 0x91
+ 31910 3a05 B046 .sleb128 -7376
+ 31911 3a07 34 .uleb128 0x34
+ 31912 3a08 AF0D0000 .long 0xdaf
+ 31913 3a0c 03 .byte 0x3
+ 31914 3a0d 91 .byte 0x91
+ 31915 3a0e A046 .sleb128 -7392
+ 31916 3a10 34 .uleb128 0x34
+ 31917 3a11 BB0D0000 .long 0xdbb
+ 31918 3a15 03 .byte 0x3
+ 31919 3a16 91 .byte 0x91
+ 31920 3a17 8C73 .sleb128 -1652
+ 31921 3a19 00 .byte 0x0
+ 31922 3a1a 00 .byte 0x0
+ 31923 3a1b 31 .uleb128 0x31
+ 31924 3a1c C70D0000 .long 0xdc7
+ 31925 3a20 00000000 .quad .LBB772
+ 31925 00000000
+ 31926 3a28 00000000 .quad .LBE772
+ 31926 00000000
+ 31927 3a30 02 .byte 0x2
+ 31928 3a31 6A03 .value 0x36a
+ 31929 3a33 4A3A0000 .long 0x3a4a
+ 31930 3a37 32 .uleb128 0x32
+ 31931 3a38 E20D0000 .long 0xde2
+ 31932 3a3c 03 .byte 0x3
+ 31933 3a3d 91 .byte 0x91
+ 31934 3a3e 9073 .sleb128 -1648
+ 31935 3a40 32 .uleb128 0x32
+ 31936 3a41 D80D0000 .long 0xdd8
+ 31937 3a45 03 .byte 0x3
+ 31938 3a46 91 .byte 0x91
+ 31939 3a47 A073 .sleb128 -1632
+ 31940 3a49 00 .byte 0x0
+ 31941 3a4a 31 .uleb128 0x31
+ 31942 3a4b ED0D0000 .long 0xded
+ 31943 3a4f 00000000 .quad .LBB774
+
GAS LISTING /tmp/ccMa7HLZ.s page 890
+
+
+ 31943 00000000
+ 31944 3a57 00000000 .quad .LBE774
+ 31944 00000000
+ 31945 3a5f 02 .byte 0x2
+ 31946 3a60 6C03 .value 0x36c
+ 31947 3a62 793A0000 .long 0x3a79
+ 31948 3a66 32 .uleb128 0x32
+ 31949 3a67 0A0E0000 .long 0xe0a
+ 31950 3a6b 03 .byte 0x3
+ 31951 3a6c 91 .byte 0x91
+ 31952 3a6d B073 .sleb128 -1616
+ 31953 3a6f 32 .uleb128 0x32
+ 31954 3a70 FF0D0000 .long 0xdff
+ 31955 3a74 03 .byte 0x3
+ 31956 3a75 91 .byte 0x91
+ 31957 3a76 C073 .sleb128 -1600
+ 31958 3a78 00 .byte 0x0
+ 31959 3a79 35 .uleb128 0x35
+ 31960 3a7a 1F0D0000 .long 0xd1f
+ 31961 3a7e 00000000 .quad .LBB776
+ 31961 00000000
+ 31962 3a86 00000000 .quad .LBE776
+ 31962 00000000
+ 31963 3a8e 02 .byte 0x2
+ 31964 3a8f 6E03 .value 0x36e
+ 31965 3a91 32 .uleb128 0x32
+ 31966 3a92 3A0D0000 .long 0xd3a
+ 31967 3a96 03 .byte 0x3
+ 31968 3a97 91 .byte 0x91
+ 31969 3a98 D073 .sleb128 -1584
+ 31970 3a9a 32 .uleb128 0x32
+ 31971 3a9b 300D0000 .long 0xd30
+ 31972 3a9f 03 .byte 0x3
+ 31973 3aa0 91 .byte 0x91
+ 31974 3aa1 E073 .sleb128 -1568
+ 31975 3aa3 00 .byte 0x0
+ 31976 3aa4 00 .byte 0x0
+ 31977 3aa5 00 .byte 0x0
+ 31978 3aa6 00 .byte 0x0
+ 31979 3aa7 36 .uleb128 0x36
+ 31980 3aa8 00000000 .quad .LBB778
+ 31980 00000000
+ 31981 3ab0 00000000 .quad .LBE778
+ 31981 00000000
+ 31982 3ab8 C63A0000 .long 0x3ac6
+ 31983 3abc 34 .uleb128 0x34
+ 31984 3abd 180C0000 .long 0xc18
+ 31985 3ac1 03 .byte 0x3
+ 31986 3ac2 91 .byte 0x91
+ 31987 3ac3 D045 .sleb128 -7472
+ 31988 3ac5 00 .byte 0x0
+ 31989 3ac6 31 .uleb128 0x31
+ 31990 3ac7 160E0000 .long 0xe16
+ 31991 3acb 00000000 .quad .LBB779
+ 31991 00000000
+ 31992 3ad3 00000000 .quad .LBE779
+ 31992 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 891
+
+
+ 31993 3adb 02 .byte 0x2
+ 31994 3adc 9406 .value 0x694
+ 31995 3ade 6E3B0000 .long 0x3b6e
+ 31996 3ae2 32 .uleb128 0x32
+ 31997 3ae3 280E0000 .long 0xe28
+ 31998 3ae7 03 .byte 0x3
+ 31999 3ae8 91 .byte 0x91
+ 32000 3ae9 F073 .sleb128 -1552
+ 32001 3aeb 33 .uleb128 0x33
+ 32002 3aec 00000000 .quad .LBB780
+ 32002 00000000
+ 32003 3af4 00000000 .quad .LBE780
+ 32003 00000000
+ 32004 3afc 34 .uleb128 0x34
+ 32005 3afd 340E0000 .long 0xe34
+ 32006 3b01 09 .byte 0x9
+ 32007 3b02 03 .byte 0x3
+ 32008 3b03 00000000 .quad ShiftRowTable.6768
+ 32008 00000000
+ 32009 3b0b 35 .uleb128 0x35
+ 32010 3b0c 6E0D0000 .long 0xd6e
+ 32011 3b10 00000000 .quad .LBB781
+ 32011 00000000
+ 32012 3b18 00000000 .quad .LBE781
+ 32012 00000000
+ 32013 3b20 02 .byte 0x2
+ 32014 3b21 9B02 .value 0x29b
+ 32015 3b23 32 .uleb128 0x32
+ 32016 3b24 8C0D0000 .long 0xd8c
+ 32017 3b28 03 .byte 0x3
+ 32018 3b29 91 .byte 0x91
+ 32019 3b2a 8074 .sleb128 -1536
+ 32020 3b2c 32 .uleb128 0x32
+ 32021 3b2d 800D0000 .long 0xd80
+ 32022 3b31 03 .byte 0x3
+ 32023 3b32 91 .byte 0x91
+ 32024 3b33 9074 .sleb128 -1520
+ 32025 3b35 33 .uleb128 0x33
+ 32026 3b36 00000000 .quad .LBB782
+ 32026 00000000
+ 32027 3b3e 00000000 .quad .LBE782
+ 32027 00000000
+ 32028 3b46 34 .uleb128 0x34
+ 32029 3b47 980D0000 .long 0xd98
+ 32030 3b4b 03 .byte 0x3
+ 32031 3b4c 91 .byte 0x91
+ 32032 3b4d F046 .sleb128 -7312
+ 32033 3b4f 34 .uleb128 0x34
+ 32034 3b50 A40D0000 .long 0xda4
+ 32035 3b54 03 .byte 0x3
+ 32036 3b55 91 .byte 0x91
+ 32037 3b56 E046 .sleb128 -7328
+ 32038 3b58 34 .uleb128 0x34
+ 32039 3b59 AF0D0000 .long 0xdaf
+ 32040 3b5d 03 .byte 0x3
+ 32041 3b5e 91 .byte 0x91
+ 32042 3b5f D046 .sleb128 -7344
+
GAS LISTING /tmp/ccMa7HLZ.s page 892
+
+
+ 32043 3b61 34 .uleb128 0x34
+ 32044 3b62 BB0D0000 .long 0xdbb
+ 32045 3b66 03 .byte 0x3
+ 32046 3b67 91 .byte 0x91
+ 32047 3b68 AC74 .sleb128 -1492
+ 32048 3b6a 00 .byte 0x0
+ 32049 3b6b 00 .byte 0x0
+ 32050 3b6c 00 .byte 0x0
+ 32051 3b6d 00 .byte 0x0
+ 32052 3b6e 36 .uleb128 0x36
+ 32053 3b6f 00000000 .quad .LBB783
+ 32053 00000000
+ 32054 3b77 00000000 .quad .LBE783
+ 32054 00000000
+ 32055 3b7f 8D3B0000 .long 0x3b8d
+ 32056 3b83 34 .uleb128 0x34
+ 32057 3b84 280C0000 .long 0xc28
+ 32058 3b88 03 .byte 0x3
+ 32059 3b89 91 .byte 0x91
+ 32060 3b8a C045 .sleb128 -7488
+ 32061 3b8c 00 .byte 0x0
+ 32062 3b8d 31 .uleb128 0x31
+ 32063 3b8e 520E0000 .long 0xe52
+ 32064 3b92 00000000 .quad .LBB784
+ 32064 00000000
+ 32065 3b9a 00000000 .quad .LBE784
+ 32065 00000000
+ 32066 3ba2 02 .byte 0x2
+ 32067 3ba3 9606 .value 0x696
+ 32068 3ba5 BC3B0000 .long 0x3bbc
+ 32069 3ba9 32 .uleb128 0x32
+ 32070 3baa 6D0E0000 .long 0xe6d
+ 32071 3bae 03 .byte 0x3
+ 32072 3baf 91 .byte 0x91
+ 32073 3bb0 B074 .sleb128 -1488
+ 32074 3bb2 32 .uleb128 0x32
+ 32075 3bb3 630E0000 .long 0xe63
+ 32076 3bb7 03 .byte 0x3
+ 32077 3bb8 91 .byte 0x91
+ 32078 3bb9 C074 .sleb128 -1472
+ 32079 3bbb 00 .byte 0x0
+ 32080 3bbc 36 .uleb128 0x36
+ 32081 3bbd 00000000 .quad .LBB786
+ 32081 00000000
+ 32082 3bc5 00000000 .quad .LBE786
+ 32082 00000000
+ 32083 3bcd DB3B0000 .long 0x3bdb
+ 32084 3bd1 34 .uleb128 0x34
+ 32085 3bd2 380C0000 .long 0xc38
+ 32086 3bd6 03 .byte 0x3
+ 32087 3bd7 91 .byte 0x91
+ 32088 3bd8 B045 .sleb128 -7504
+ 32089 3bda 00 .byte 0x0
+ 32090 3bdb 31 .uleb128 0x31
+ 32091 3bdc 780E0000 .long 0xe78
+ 32092 3be0 00000000 .quad .LBB787
+ 32092 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 893
+
+
+ 32093 3be8 00000000 .quad .LBE787
+ 32093 00000000
+ 32094 3bf0 02 .byte 0x2
+ 32095 3bf1 9806 .value 0x698
+ 32096 3bf3 1C3C0000 .long 0x3c1c
+ 32097 3bf7 32 .uleb128 0x32
+ 32098 3bf8 8A0E0000 .long 0xe8a
+ 32099 3bfc 03 .byte 0x3
+ 32100 3bfd 91 .byte 0x91
+ 32101 3bfe D074 .sleb128 -1456
+ 32102 3c00 33 .uleb128 0x33
+ 32103 3c01 00000000 .quad .LBB788
+ 32103 00000000
+ 32104 3c09 00000000 .quad .LBE788
+ 32104 00000000
+ 32105 3c11 34 .uleb128 0x34
+ 32106 3c12 960E0000 .long 0xe96
+ 32107 3c16 03 .byte 0x3
+ 32108 3c17 91 .byte 0x91
+ 32109 3c18 8047 .sleb128 -7296
+ 32110 3c1a 00 .byte 0x0
+ 32111 3c1b 00 .byte 0x0
+ 32112 3c1c 33 .uleb128 0x33
+ 32113 3c1d 00000000 .quad .LBB789
+ 32113 00000000
+ 32114 3c25 00000000 .quad .LBE789
+ 32114 00000000
+ 32115 3c2d 34 .uleb128 0x34
+ 32116 3c2e 440C0000 .long 0xc44
+ 32117 3c32 03 .byte 0x3
+ 32118 3c33 91 .byte 0x91
+ 32119 3c34 A045 .sleb128 -7520
+ 32120 3c36 00 .byte 0x0
+ 32121 3c37 00 .byte 0x0
+ 32122 3c38 00 .byte 0x0
+ 32123 3c39 31 .uleb128 0x31
+ 32124 3c3a A30E0000 .long 0xea3
+ 32125 3c3e 00000000 .quad .LBB790
+ 32125 00000000
+ 32126 3c46 00000000 .quad .LBE790
+ 32126 00000000
+ 32127 3c4e 02 .byte 0x2
+ 32128 3c4f D706 .value 0x6d7
+ 32129 3c51 3A3D0000 .long 0x3d3a
+ 32130 3c55 32 .uleb128 0x32
+ 32131 3c56 B50E0000 .long 0xeb5
+ 32132 3c5a 03 .byte 0x3
+ 32133 3c5b 91 .byte 0x91
+ 32134 3c5c E074 .sleb128 -1440
+ 32135 3c5e 33 .uleb128 0x33
+ 32136 3c5f 00000000 .quad .LBB791
+ 32136 00000000
+ 32137 3c67 00000000 .quad .LBE791
+ 32137 00000000
+ 32138 3c6f 34 .uleb128 0x34
+ 32139 3c70 C10E0000 .long 0xec1
+ 32140 3c74 04 .byte 0x4
+
GAS LISTING /tmp/ccMa7HLZ.s page 894
+
+
+ 32141 3c75 76 .byte 0x76
+ 32142 3c76 A0B47F .sleb128 -9696
+ 32143 3c79 31 .uleb128 0x31
+ 32144 3c7a CE0E0000 .long 0xece
+ 32145 3c7e 00000000 .quad .LBB792
+ 32145 00000000
+ 32146 3c86 00000000 .quad .LBE792
+ 32146 00000000
+ 32147 3c8e 02 .byte 0x2
+ 32148 3c8f 1F06 .value 0x61f
+ 32149 3c91 BA3C0000 .long 0x3cba
+ 32150 3c95 32 .uleb128 0x32
+ 32151 3c96 E00E0000 .long 0xee0
+ 32152 3c9a 03 .byte 0x3
+ 32153 3c9b 91 .byte 0x91
+ 32154 3c9c F074 .sleb128 -1424
+ 32155 3c9e 33 .uleb128 0x33
+ 32156 3c9f 00000000 .quad .LBB793
+ 32156 00000000
+ 32157 3ca7 00000000 .quad .LBE793
+ 32157 00000000
+ 32158 3caf 34 .uleb128 0x34
+ 32159 3cb0 EC0E0000 .long 0xeec
+ 32160 3cb4 03 .byte 0x3
+ 32161 3cb5 91 .byte 0x91
+ 32162 3cb6 9047 .sleb128 -7280
+ 32163 3cb8 00 .byte 0x0
+ 32164 3cb9 00 .byte 0x0
+ 32165 3cba 31 .uleb128 0x31
+ 32166 3cbb CE0E0000 .long 0xece
+ 32167 3cbf 00000000 .quad .LBB794
+ 32167 00000000
+ 32168 3cc7 00000000 .quad .LBE794
+ 32168 00000000
+ 32169 3ccf 02 .byte 0x2
+ 32170 3cd0 2006 .value 0x620
+ 32171 3cd2 FB3C0000 .long 0x3cfb
+ 32172 3cd6 32 .uleb128 0x32
+ 32173 3cd7 E00E0000 .long 0xee0
+ 32174 3cdb 03 .byte 0x3
+ 32175 3cdc 91 .byte 0x91
+ 32176 3cdd 8075 .sleb128 -1408
+ 32177 3cdf 33 .uleb128 0x33
+ 32178 3ce0 00000000 .quad .LBB795
+ 32178 00000000
+ 32179 3ce8 00000000 .quad .LBE795
+ 32179 00000000
+ 32180 3cf0 34 .uleb128 0x34
+ 32181 3cf1 EC0E0000 .long 0xeec
+ 32182 3cf5 03 .byte 0x3
+ 32183 3cf6 91 .byte 0x91
+ 32184 3cf7 A047 .sleb128 -7264
+ 32185 3cf9 00 .byte 0x0
+ 32186 3cfa 00 .byte 0x0
+ 32187 3cfb 35 .uleb128 0x35
+ 32188 3cfc CE0E0000 .long 0xece
+ 32189 3d00 00000000 .quad .LBB796
+
GAS LISTING /tmp/ccMa7HLZ.s page 895
+
+
+ 32189 00000000
+ 32190 3d08 00000000 .quad .LBE796
+ 32190 00000000
+ 32191 3d10 02 .byte 0x2
+ 32192 3d11 2106 .value 0x621
+ 32193 3d13 32 .uleb128 0x32
+ 32194 3d14 E00E0000 .long 0xee0
+ 32195 3d18 03 .byte 0x3
+ 32196 3d19 91 .byte 0x91
+ 32197 3d1a 9075 .sleb128 -1392
+ 32198 3d1c 33 .uleb128 0x33
+ 32199 3d1d 00000000 .quad .LBB797
+ 32199 00000000
+ 32200 3d25 00000000 .quad .LBE797
+ 32200 00000000
+ 32201 3d2d 34 .uleb128 0x34
+ 32202 3d2e EC0E0000 .long 0xeec
+ 32203 3d32 03 .byte 0x3
+ 32204 3d33 91 .byte 0x91
+ 32205 3d34 B047 .sleb128 -7248
+ 32206 3d36 00 .byte 0x0
+ 32207 3d37 00 .byte 0x0
+ 32208 3d38 00 .byte 0x0
+ 32209 3d39 00 .byte 0x0
+ 32210 3d3a 31 .uleb128 0x31
+ 32211 3d3b D10B0000 .long 0xbd1
+ 32212 3d3f 00000000 .quad .LBB798
+ 32212 00000000
+ 32213 3d47 00000000 .quad .LBE798
+ 32213 00000000
+ 32214 3d4f 02 .byte 0x2
+ 32215 3d50 D806 .value 0x6d8
+ 32216 3d52 E2410000 .long 0x41e2
+ 32217 3d56 32 .uleb128 0x32
+ 32218 3d57 EF0B0000 .long 0xbef
+ 32219 3d5b 03 .byte 0x3
+ 32220 3d5c 91 .byte 0x91
+ 32221 3d5d AC75 .sleb128 -1364
+ 32222 3d5f 32 .uleb128 0x32
+ 32223 3d60 E30B0000 .long 0xbe3
+ 32224 3d64 03 .byte 0x3
+ 32225 3d65 91 .byte 0x91
+ 32226 3d66 B075 .sleb128 -1360
+ 32227 3d68 33 .uleb128 0x33
+ 32228 3d69 00000000 .quad .LBB799
+ 32228 00000000
+ 32229 3d71 00000000 .quad .LBE799
+ 32229 00000000
+ 32230 3d79 34 .uleb128 0x34
+ 32231 3d7a FB0B0000 .long 0xbfb
+ 32232 3d7e 04 .byte 0x4
+ 32233 3d7f 76 .byte 0x76
+ 32234 3d80 C0B47F .sleb128 -9664
+ 32235 3d83 34 .uleb128 0x34
+ 32236 3d84 070C0000 .long 0xc07
+ 32237 3d88 04 .byte 0x4
+ 32238 3d89 76 .byte 0x76
+
GAS LISTING /tmp/ccMa7HLZ.s page 896
+
+
+ 32239 3d8a B0B47F .sleb128 -9680
+ 32240 3d8d 31 .uleb128 0x31
+ 32241 3d8e 500C0000 .long 0xc50
+ 32242 3d92 00000000 .quad .LBB800
+ 32242 00000000
+ 32243 3d9a 00000000 .quad .LBE800
+ 32243 00000000
+ 32244 3da2 02 .byte 0x2
+ 32245 3da3 9106 .value 0x691
+ 32246 3da5 E03D0000 .long 0x3de0
+ 32247 3da9 32 .uleb128 0x32
+ 32248 3daa 7A0C0000 .long 0xc7a
+ 32249 3dae 03 .byte 0x3
+ 32250 3daf 91 .byte 0x91
+ 32251 3db0 C875 .sleb128 -1336
+ 32252 3db2 32 .uleb128 0x32
+ 32253 3db3 6E0C0000 .long 0xc6e
+ 32254 3db7 03 .byte 0x3
+ 32255 3db8 91 .byte 0x91
+ 32256 3db9 CC75 .sleb128 -1332
+ 32257 3dbb 32 .uleb128 0x32
+ 32258 3dbc 620C0000 .long 0xc62
+ 32259 3dc0 03 .byte 0x3
+ 32260 3dc1 91 .byte 0x91
+ 32261 3dc2 D075 .sleb128 -1328
+ 32262 3dc4 33 .uleb128 0x33
+ 32263 3dc5 00000000 .quad .LBB801
+ 32263 00000000
+ 32264 3dcd 00000000 .quad .LBE801
+ 32264 00000000
+ 32265 3dd5 34 .uleb128 0x34
+ 32266 3dd6 860C0000 .long 0xc86
+ 32267 3dda 03 .byte 0x3
+ 32268 3ddb 91 .byte 0x91
+ 32269 3ddc 8048 .sleb128 -7168
+ 32270 3dde 00 .byte 0x0
+ 32271 3ddf 00 .byte 0x0
+ 32272 3de0 31 .uleb128 0x31
+ 32273 3de1 910C0000 .long 0xc91
+ 32274 3de5 00000000 .quad .LBB802
+ 32274 00000000
+ 32275 3ded 00000000 .quad .LBE802
+ 32275 00000000
+ 32276 3df5 02 .byte 0x2
+ 32277 3df6 9206 .value 0x692
+ 32278 3df8 50400000 .long 0x4050
+ 32279 3dfc 32 .uleb128 0x32
+ 32280 3dfd A30C0000 .long 0xca3
+ 32281 3e01 03 .byte 0x3
+ 32282 3e02 91 .byte 0x91
+ 32283 3e03 E075 .sleb128 -1312
+ 32284 3e05 35 .uleb128 0x35
+ 32285 3e06 B00C0000 .long 0xcb0
+ 32286 3e0a 00000000 .quad .LBB804
+ 32286 00000000
+ 32287 3e12 00000000 .quad .LBE804
+ 32287 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 897
+
+
+ 32288 3e1a 02 .byte 0x2
+ 32289 3e1b 7D03 .value 0x37d
+ 32290 3e1d 32 .uleb128 0x32
+ 32291 3e1e CE0C0000 .long 0xcce
+ 32292 3e22 03 .byte 0x3
+ 32293 3e23 91 .byte 0x91
+ 32294 3e24 F875 .sleb128 -1288
+ 32295 3e26 32 .uleb128 0x32
+ 32296 3e27 C20C0000 .long 0xcc2
+ 32297 3e2b 03 .byte 0x3
+ 32298 3e2c 91 .byte 0x91
+ 32299 3e2d 8076 .sleb128 -1280
+ 32300 3e2f 33 .uleb128 0x33
+ 32301 3e30 00000000 .quad .LBB805
+ 32301 00000000
+ 32302 3e38 00000000 .quad .LBE805
+ 32302 00000000
+ 32303 3e40 34 .uleb128 0x34
+ 32304 3e41 DA0C0000 .long 0xcda
+ 32305 3e45 03 .byte 0x3
+ 32306 3e46 91 .byte 0x91
+ 32307 3e47 D076 .sleb128 -1200
+ 32308 3e49 34 .uleb128 0x34
+ 32309 3e4a E50C0000 .long 0xce5
+ 32310 3e4e 03 .byte 0x3
+ 32311 3e4f 91 .byte 0x91
+ 32312 3e50 C076 .sleb128 -1216
+ 32313 3e52 34 .uleb128 0x34
+ 32314 3e53 F00C0000 .long 0xcf0
+ 32315 3e57 03 .byte 0x3
+ 32316 3e58 91 .byte 0x91
+ 32317 3e59 B076 .sleb128 -1232
+ 32318 3e5b 34 .uleb128 0x34
+ 32319 3e5c FC0C0000 .long 0xcfc
+ 32320 3e60 03 .byte 0x3
+ 32321 3e61 91 .byte 0x91
+ 32322 3e62 A076 .sleb128 -1248
+ 32323 3e64 34 .uleb128 0x34
+ 32324 3e65 080D0000 .long 0xd08
+ 32325 3e69 03 .byte 0x3
+ 32326 3e6a 91 .byte 0x91
+ 32327 3e6b 9C76 .sleb128 -1252
+ 32328 3e6d 31 .uleb128 0x31
+ 32329 3e6e 1F0D0000 .long 0xd1f
+ 32330 3e72 00000000 .quad .LBB806
+ 32330 00000000
+ 32331 3e7a 00000000 .quad .LBE806
+ 32331 00000000
+ 32332 3e82 02 .byte 0x2
+ 32333 3e83 5603 .value 0x356
+ 32334 3e85 9C3E0000 .long 0x3e9c
+ 32335 3e89 32 .uleb128 0x32
+ 32336 3e8a 3A0D0000 .long 0xd3a
+ 32337 3e8e 03 .byte 0x3
+ 32338 3e8f 91 .byte 0x91
+ 32339 3e90 E076 .sleb128 -1184
+ 32340 3e92 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 898
+
+
+ 32341 3e93 300D0000 .long 0xd30
+ 32342 3e97 03 .byte 0x3
+ 32343 3e98 91 .byte 0x91
+ 32344 3e99 F076 .sleb128 -1168
+ 32345 3e9b 00 .byte 0x0
+ 32346 3e9c 31 .uleb128 0x31
+ 32347 3e9d 450D0000 .long 0xd45
+ 32348 3ea1 00000000 .quad .LBB808
+ 32348 00000000
+ 32349 3ea9 00000000 .quad .LBE808
+ 32349 00000000
+ 32350 3eb1 02 .byte 0x2
+ 32351 3eb2 5E03 .value 0x35e
+ 32352 3eb4 CB3E0000 .long 0x3ecb
+ 32353 3eb8 32 .uleb128 0x32
+ 32354 3eb9 620D0000 .long 0xd62
+ 32355 3ebd 03 .byte 0x3
+ 32356 3ebe 91 .byte 0x91
+ 32357 3ebf 8077 .sleb128 -1152
+ 32358 3ec1 32 .uleb128 0x32
+ 32359 3ec2 570D0000 .long 0xd57
+ 32360 3ec6 03 .byte 0x3
+ 32361 3ec7 91 .byte 0x91
+ 32362 3ec8 9077 .sleb128 -1136
+ 32363 3eca 00 .byte 0x0
+ 32364 3ecb 31 .uleb128 0x31
+ 32365 3ecc 6E0D0000 .long 0xd6e
+ 32366 3ed0 00000000 .quad .LBB810
+ 32366 00000000
+ 32367 3ed8 00000000 .quad .LBE810
+ 32367 00000000
+ 32368 3ee0 02 .byte 0x2
+ 32369 3ee1 6403 .value 0x364
+ 32370 3ee3 303F0000 .long 0x3f30
+ 32371 3ee7 32 .uleb128 0x32
+ 32372 3ee8 8C0D0000 .long 0xd8c
+ 32373 3eec 03 .byte 0x3
+ 32374 3eed 91 .byte 0x91
+ 32375 3eee A077 .sleb128 -1120
+ 32376 3ef0 32 .uleb128 0x32
+ 32377 3ef1 800D0000 .long 0xd80
+ 32378 3ef5 03 .byte 0x3
+ 32379 3ef6 91 .byte 0x91
+ 32380 3ef7 B077 .sleb128 -1104
+ 32381 3ef9 33 .uleb128 0x33
+ 32382 3efa 00000000 .quad .LBB811
+ 32382 00000000
+ 32383 3f02 00000000 .quad .LBE811
+ 32383 00000000
+ 32384 3f0a 34 .uleb128 0x34
+ 32385 3f0b 980D0000 .long 0xd98
+ 32386 3f0f 03 .byte 0x3
+ 32387 3f10 91 .byte 0x91
+ 32388 3f11 B048 .sleb128 -7120
+ 32389 3f13 34 .uleb128 0x34
+ 32390 3f14 A40D0000 .long 0xda4
+ 32391 3f18 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 899
+
+
+ 32392 3f19 91 .byte 0x91
+ 32393 3f1a A048 .sleb128 -7136
+ 32394 3f1c 34 .uleb128 0x34
+ 32395 3f1d AF0D0000 .long 0xdaf
+ 32396 3f21 03 .byte 0x3
+ 32397 3f22 91 .byte 0x91
+ 32398 3f23 9048 .sleb128 -7152
+ 32399 3f25 34 .uleb128 0x34
+ 32400 3f26 BB0D0000 .long 0xdbb
+ 32401 3f2a 03 .byte 0x3
+ 32402 3f2b 91 .byte 0x91
+ 32403 3f2c CC77 .sleb128 -1076
+ 32404 3f2e 00 .byte 0x0
+ 32405 3f2f 00 .byte 0x0
+ 32406 3f30 31 .uleb128 0x31
+ 32407 3f31 C70D0000 .long 0xdc7
+ 32408 3f35 00000000 .quad .LBB812
+ 32408 00000000
+ 32409 3f3d 00000000 .quad .LBE812
+ 32409 00000000
+ 32410 3f45 02 .byte 0x2
+ 32411 3f46 6603 .value 0x366
+ 32412 3f48 5F3F0000 .long 0x3f5f
+ 32413 3f4c 32 .uleb128 0x32
+ 32414 3f4d E20D0000 .long 0xde2
+ 32415 3f51 03 .byte 0x3
+ 32416 3f52 91 .byte 0x91
+ 32417 3f53 D077 .sleb128 -1072
+ 32418 3f55 32 .uleb128 0x32
+ 32419 3f56 D80D0000 .long 0xdd8
+ 32420 3f5a 03 .byte 0x3
+ 32421 3f5b 91 .byte 0x91
+ 32422 3f5c E077 .sleb128 -1056
+ 32423 3f5e 00 .byte 0x0
+ 32424 3f5f 31 .uleb128 0x31
+ 32425 3f60 6E0D0000 .long 0xd6e
+ 32426 3f64 00000000 .quad .LBB814
+ 32426 00000000
+ 32427 3f6c 00000000 .quad .LBE814
+ 32427 00000000
+ 32428 3f74 02 .byte 0x2
+ 32429 3f75 6803 .value 0x368
+ 32430 3f77 C43F0000 .long 0x3fc4
+ 32431 3f7b 32 .uleb128 0x32
+ 32432 3f7c 8C0D0000 .long 0xd8c
+ 32433 3f80 03 .byte 0x3
+ 32434 3f81 91 .byte 0x91
+ 32435 3f82 F077 .sleb128 -1040
+ 32436 3f84 32 .uleb128 0x32
+ 32437 3f85 800D0000 .long 0xd80
+ 32438 3f89 03 .byte 0x3
+ 32439 3f8a 91 .byte 0x91
+ 32440 3f8b 8078 .sleb128 -1024
+ 32441 3f8d 33 .uleb128 0x33
+ 32442 3f8e 00000000 .quad .LBB815
+ 32442 00000000
+ 32443 3f96 00000000 .quad .LBE815
+
GAS LISTING /tmp/ccMa7HLZ.s page 900
+
+
+ 32443 00000000
+ 32444 3f9e 34 .uleb128 0x34
+ 32445 3f9f 980D0000 .long 0xd98
+ 32446 3fa3 03 .byte 0x3
+ 32447 3fa4 91 .byte 0x91
+ 32448 3fa5 E048 .sleb128 -7072
+ 32449 3fa7 34 .uleb128 0x34
+ 32450 3fa8 A40D0000 .long 0xda4
+ 32451 3fac 03 .byte 0x3
+ 32452 3fad 91 .byte 0x91
+ 32453 3fae D048 .sleb128 -7088
+ 32454 3fb0 34 .uleb128 0x34
+ 32455 3fb1 AF0D0000 .long 0xdaf
+ 32456 3fb5 03 .byte 0x3
+ 32457 3fb6 91 .byte 0x91
+ 32458 3fb7 C048 .sleb128 -7104
+ 32459 3fb9 34 .uleb128 0x34
+ 32460 3fba BB0D0000 .long 0xdbb
+ 32461 3fbe 03 .byte 0x3
+ 32462 3fbf 91 .byte 0x91
+ 32463 3fc0 9C78 .sleb128 -996
+ 32464 3fc2 00 .byte 0x0
+ 32465 3fc3 00 .byte 0x0
+ 32466 3fc4 31 .uleb128 0x31
+ 32467 3fc5 C70D0000 .long 0xdc7
+ 32468 3fc9 00000000 .quad .LBB816
+ 32468 00000000
+ 32469 3fd1 00000000 .quad .LBE816
+ 32469 00000000
+ 32470 3fd9 02 .byte 0x2
+ 32471 3fda 6A03 .value 0x36a
+ 32472 3fdc F33F0000 .long 0x3ff3
+ 32473 3fe0 32 .uleb128 0x32
+ 32474 3fe1 E20D0000 .long 0xde2
+ 32475 3fe5 03 .byte 0x3
+ 32476 3fe6 91 .byte 0x91
+ 32477 3fe7 A078 .sleb128 -992
+ 32478 3fe9 32 .uleb128 0x32
+ 32479 3fea D80D0000 .long 0xdd8
+ 32480 3fee 03 .byte 0x3
+ 32481 3fef 91 .byte 0x91
+ 32482 3ff0 B078 .sleb128 -976
+ 32483 3ff2 00 .byte 0x0
+ 32484 3ff3 31 .uleb128 0x31
+ 32485 3ff4 ED0D0000 .long 0xded
+ 32486 3ff8 00000000 .quad .LBB818
+ 32486 00000000
+ 32487 4000 00000000 .quad .LBE818
+ 32487 00000000
+ 32488 4008 02 .byte 0x2
+ 32489 4009 6C03 .value 0x36c
+ 32490 400b 22400000 .long 0x4022
+ 32491 400f 32 .uleb128 0x32
+ 32492 4010 0A0E0000 .long 0xe0a
+ 32493 4014 03 .byte 0x3
+ 32494 4015 91 .byte 0x91
+ 32495 4016 C078 .sleb128 -960
+
GAS LISTING /tmp/ccMa7HLZ.s page 901
+
+
+ 32496 4018 32 .uleb128 0x32
+ 32497 4019 FF0D0000 .long 0xdff
+ 32498 401d 03 .byte 0x3
+ 32499 401e 91 .byte 0x91
+ 32500 401f D078 .sleb128 -944
+ 32501 4021 00 .byte 0x0
+ 32502 4022 35 .uleb128 0x35
+ 32503 4023 1F0D0000 .long 0xd1f
+ 32504 4027 00000000 .quad .LBB820
+ 32504 00000000
+ 32505 402f 00000000 .quad .LBE820
+ 32505 00000000
+ 32506 4037 02 .byte 0x2
+ 32507 4038 6E03 .value 0x36e
+ 32508 403a 32 .uleb128 0x32
+ 32509 403b 3A0D0000 .long 0xd3a
+ 32510 403f 03 .byte 0x3
+ 32511 4040 91 .byte 0x91
+ 32512 4041 E078 .sleb128 -928
+ 32513 4043 32 .uleb128 0x32
+ 32514 4044 300D0000 .long 0xd30
+ 32515 4048 03 .byte 0x3
+ 32516 4049 91 .byte 0x91
+ 32517 404a F078 .sleb128 -912
+ 32518 404c 00 .byte 0x0
+ 32519 404d 00 .byte 0x0
+ 32520 404e 00 .byte 0x0
+ 32521 404f 00 .byte 0x0
+ 32522 4050 36 .uleb128 0x36
+ 32523 4051 00000000 .quad .LBB822
+ 32523 00000000
+ 32524 4059 00000000 .quad .LBE822
+ 32524 00000000
+ 32525 4061 6F400000 .long 0x406f
+ 32526 4065 34 .uleb128 0x34
+ 32527 4066 180C0000 .long 0xc18
+ 32528 406a 03 .byte 0x3
+ 32529 406b 91 .byte 0x91
+ 32530 406c F047 .sleb128 -7184
+ 32531 406e 00 .byte 0x0
+ 32532 406f 31 .uleb128 0x31
+ 32533 4070 160E0000 .long 0xe16
+ 32534 4074 00000000 .quad .LBB823
+ 32534 00000000
+ 32535 407c 00000000 .quad .LBE823
+ 32535 00000000
+ 32536 4084 02 .byte 0x2
+ 32537 4085 9406 .value 0x694
+ 32538 4087 17410000 .long 0x4117
+ 32539 408b 32 .uleb128 0x32
+ 32540 408c 280E0000 .long 0xe28
+ 32541 4090 03 .byte 0x3
+ 32542 4091 91 .byte 0x91
+ 32543 4092 8079 .sleb128 -896
+ 32544 4094 33 .uleb128 0x33
+ 32545 4095 00000000 .quad .LBB824
+ 32545 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 902
+
+
+ 32546 409d 00000000 .quad .LBE824
+ 32546 00000000
+ 32547 40a5 34 .uleb128 0x34
+ 32548 40a6 340E0000 .long 0xe34
+ 32549 40aa 09 .byte 0x9
+ 32550 40ab 03 .byte 0x3
+ 32551 40ac 00000000 .quad ShiftRowTable.6768
+ 32551 00000000
+ 32552 40b4 35 .uleb128 0x35
+ 32553 40b5 6E0D0000 .long 0xd6e
+ 32554 40b9 00000000 .quad .LBB825
+ 32554 00000000
+ 32555 40c1 00000000 .quad .LBE825
+ 32555 00000000
+ 32556 40c9 02 .byte 0x2
+ 32557 40ca 9B02 .value 0x29b
+ 32558 40cc 32 .uleb128 0x32
+ 32559 40cd 8C0D0000 .long 0xd8c
+ 32560 40d1 03 .byte 0x3
+ 32561 40d2 91 .byte 0x91
+ 32562 40d3 9079 .sleb128 -880
+ 32563 40d5 32 .uleb128 0x32
+ 32564 40d6 800D0000 .long 0xd80
+ 32565 40da 03 .byte 0x3
+ 32566 40db 91 .byte 0x91
+ 32567 40dc A079 .sleb128 -864
+ 32568 40de 33 .uleb128 0x33
+ 32569 40df 00000000 .quad .LBB826
+ 32569 00000000
+ 32570 40e7 00000000 .quad .LBE826
+ 32570 00000000
+ 32571 40ef 34 .uleb128 0x34
+ 32572 40f0 980D0000 .long 0xd98
+ 32573 40f4 03 .byte 0x3
+ 32574 40f5 91 .byte 0x91
+ 32575 40f6 9049 .sleb128 -7024
+ 32576 40f8 34 .uleb128 0x34
+ 32577 40f9 A40D0000 .long 0xda4
+ 32578 40fd 03 .byte 0x3
+ 32579 40fe 91 .byte 0x91
+ 32580 40ff 8049 .sleb128 -7040
+ 32581 4101 34 .uleb128 0x34
+ 32582 4102 AF0D0000 .long 0xdaf
+ 32583 4106 03 .byte 0x3
+ 32584 4107 91 .byte 0x91
+ 32585 4108 F048 .sleb128 -7056
+ 32586 410a 34 .uleb128 0x34
+ 32587 410b BB0D0000 .long 0xdbb
+ 32588 410f 03 .byte 0x3
+ 32589 4110 91 .byte 0x91
+ 32590 4111 BC79 .sleb128 -836
+ 32591 4113 00 .byte 0x0
+ 32592 4114 00 .byte 0x0
+ 32593 4115 00 .byte 0x0
+ 32594 4116 00 .byte 0x0
+ 32595 4117 36 .uleb128 0x36
+ 32596 4118 00000000 .quad .LBB827
+
GAS LISTING /tmp/ccMa7HLZ.s page 903
+
+
+ 32596 00000000
+ 32597 4120 00000000 .quad .LBE827
+ 32597 00000000
+ 32598 4128 36410000 .long 0x4136
+ 32599 412c 34 .uleb128 0x34
+ 32600 412d 280C0000 .long 0xc28
+ 32601 4131 03 .byte 0x3
+ 32602 4132 91 .byte 0x91
+ 32603 4133 E047 .sleb128 -7200
+ 32604 4135 00 .byte 0x0
+ 32605 4136 31 .uleb128 0x31
+ 32606 4137 520E0000 .long 0xe52
+ 32607 413b 00000000 .quad .LBB828
+ 32607 00000000
+ 32608 4143 00000000 .quad .LBE828
+ 32608 00000000
+ 32609 414b 02 .byte 0x2
+ 32610 414c 9606 .value 0x696
+ 32611 414e 65410000 .long 0x4165
+ 32612 4152 32 .uleb128 0x32
+ 32613 4153 6D0E0000 .long 0xe6d
+ 32614 4157 03 .byte 0x3
+ 32615 4158 91 .byte 0x91
+ 32616 4159 C079 .sleb128 -832
+ 32617 415b 32 .uleb128 0x32
+ 32618 415c 630E0000 .long 0xe63
+ 32619 4160 03 .byte 0x3
+ 32620 4161 91 .byte 0x91
+ 32621 4162 D079 .sleb128 -816
+ 32622 4164 00 .byte 0x0
+ 32623 4165 36 .uleb128 0x36
+ 32624 4166 00000000 .quad .LBB830
+ 32624 00000000
+ 32625 416e 00000000 .quad .LBE830
+ 32625 00000000
+ 32626 4176 84410000 .long 0x4184
+ 32627 417a 34 .uleb128 0x34
+ 32628 417b 380C0000 .long 0xc38
+ 32629 417f 03 .byte 0x3
+ 32630 4180 91 .byte 0x91
+ 32631 4181 D047 .sleb128 -7216
+ 32632 4183 00 .byte 0x0
+ 32633 4184 31 .uleb128 0x31
+ 32634 4185 780E0000 .long 0xe78
+ 32635 4189 00000000 .quad .LBB831
+ 32635 00000000
+ 32636 4191 00000000 .quad .LBE831
+ 32636 00000000
+ 32637 4199 02 .byte 0x2
+ 32638 419a 9806 .value 0x698
+ 32639 419c C5410000 .long 0x41c5
+ 32640 41a0 32 .uleb128 0x32
+ 32641 41a1 8A0E0000 .long 0xe8a
+ 32642 41a5 03 .byte 0x3
+ 32643 41a6 91 .byte 0x91
+ 32644 41a7 E079 .sleb128 -800
+ 32645 41a9 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 904
+
+
+ 32646 41aa 00000000 .quad .LBB832
+ 32646 00000000
+ 32647 41b2 00000000 .quad .LBE832
+ 32647 00000000
+ 32648 41ba 34 .uleb128 0x34
+ 32649 41bb 960E0000 .long 0xe96
+ 32650 41bf 03 .byte 0x3
+ 32651 41c0 91 .byte 0x91
+ 32652 41c1 A049 .sleb128 -7008
+ 32653 41c3 00 .byte 0x0
+ 32654 41c4 00 .byte 0x0
+ 32655 41c5 33 .uleb128 0x33
+ 32656 41c6 00000000 .quad .LBB833
+ 32656 00000000
+ 32657 41ce 00000000 .quad .LBE833
+ 32657 00000000
+ 32658 41d6 34 .uleb128 0x34
+ 32659 41d7 440C0000 .long 0xc44
+ 32660 41db 03 .byte 0x3
+ 32661 41dc 91 .byte 0x91
+ 32662 41dd C047 .sleb128 -7232
+ 32663 41df 00 .byte 0x0
+ 32664 41e0 00 .byte 0x0
+ 32665 41e1 00 .byte 0x0
+ 32666 41e2 31 .uleb128 0x31
+ 32667 41e3 A30E0000 .long 0xea3
+ 32668 41e7 00000000 .quad .LBB834
+ 32668 00000000
+ 32669 41ef 00000000 .quad .LBE834
+ 32669 00000000
+ 32670 41f7 02 .byte 0x2
+ 32671 41f8 D806 .value 0x6d8
+ 32672 41fa E3420000 .long 0x42e3
+ 32673 41fe 32 .uleb128 0x32
+ 32674 41ff B50E0000 .long 0xeb5
+ 32675 4203 03 .byte 0x3
+ 32676 4204 91 .byte 0x91
+ 32677 4205 F079 .sleb128 -784
+ 32678 4207 33 .uleb128 0x33
+ 32679 4208 00000000 .quad .LBB835
+ 32679 00000000
+ 32680 4210 00000000 .quad .LBE835
+ 32680 00000000
+ 32681 4218 34 .uleb128 0x34
+ 32682 4219 C10E0000 .long 0xec1
+ 32683 421d 04 .byte 0x4
+ 32684 421e 76 .byte 0x76
+ 32685 421f E0B47F .sleb128 -9632
+ 32686 4222 31 .uleb128 0x31
+ 32687 4223 CE0E0000 .long 0xece
+ 32688 4227 00000000 .quad .LBB836
+ 32688 00000000
+ 32689 422f 00000000 .quad .LBE836
+ 32689 00000000
+ 32690 4237 02 .byte 0x2
+ 32691 4238 1F06 .value 0x61f
+ 32692 423a 63420000 .long 0x4263
+
GAS LISTING /tmp/ccMa7HLZ.s page 905
+
+
+ 32693 423e 32 .uleb128 0x32
+ 32694 423f E00E0000 .long 0xee0
+ 32695 4243 03 .byte 0x3
+ 32696 4244 91 .byte 0x91
+ 32697 4245 807A .sleb128 -768
+ 32698 4247 33 .uleb128 0x33
+ 32699 4248 00000000 .quad .LBB837
+ 32699 00000000
+ 32700 4250 00000000 .quad .LBE837
+ 32700 00000000
+ 32701 4258 34 .uleb128 0x34
+ 32702 4259 EC0E0000 .long 0xeec
+ 32703 425d 03 .byte 0x3
+ 32704 425e 91 .byte 0x91
+ 32705 425f B049 .sleb128 -6992
+ 32706 4261 00 .byte 0x0
+ 32707 4262 00 .byte 0x0
+ 32708 4263 31 .uleb128 0x31
+ 32709 4264 CE0E0000 .long 0xece
+ 32710 4268 00000000 .quad .LBB838
+ 32710 00000000
+ 32711 4270 00000000 .quad .LBE838
+ 32711 00000000
+ 32712 4278 02 .byte 0x2
+ 32713 4279 2006 .value 0x620
+ 32714 427b A4420000 .long 0x42a4
+ 32715 427f 32 .uleb128 0x32
+ 32716 4280 E00E0000 .long 0xee0
+ 32717 4284 03 .byte 0x3
+ 32718 4285 91 .byte 0x91
+ 32719 4286 907A .sleb128 -752
+ 32720 4288 33 .uleb128 0x33
+ 32721 4289 00000000 .quad .LBB839
+ 32721 00000000
+ 32722 4291 00000000 .quad .LBE839
+ 32722 00000000
+ 32723 4299 34 .uleb128 0x34
+ 32724 429a EC0E0000 .long 0xeec
+ 32725 429e 03 .byte 0x3
+ 32726 429f 91 .byte 0x91
+ 32727 42a0 C049 .sleb128 -6976
+ 32728 42a2 00 .byte 0x0
+ 32729 42a3 00 .byte 0x0
+ 32730 42a4 35 .uleb128 0x35
+ 32731 42a5 CE0E0000 .long 0xece
+ 32732 42a9 00000000 .quad .LBB840
+ 32732 00000000
+ 32733 42b1 00000000 .quad .LBE840
+ 32733 00000000
+ 32734 42b9 02 .byte 0x2
+ 32735 42ba 2106 .value 0x621
+ 32736 42bc 32 .uleb128 0x32
+ 32737 42bd E00E0000 .long 0xee0
+ 32738 42c1 03 .byte 0x3
+ 32739 42c2 91 .byte 0x91
+ 32740 42c3 A07A .sleb128 -736
+ 32741 42c5 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 906
+
+
+ 32742 42c6 00000000 .quad .LBB841
+ 32742 00000000
+ 32743 42ce 00000000 .quad .LBE841
+ 32743 00000000
+ 32744 42d6 34 .uleb128 0x34
+ 32745 42d7 EC0E0000 .long 0xeec
+ 32746 42db 03 .byte 0x3
+ 32747 42dc 91 .byte 0x91
+ 32748 42dd D049 .sleb128 -6960
+ 32749 42df 00 .byte 0x0
+ 32750 42e0 00 .byte 0x0
+ 32751 42e1 00 .byte 0x0
+ 32752 42e2 00 .byte 0x0
+ 32753 42e3 31 .uleb128 0x31
+ 32754 42e4 D10B0000 .long 0xbd1
+ 32755 42e8 00000000 .quad .LBB842
+ 32755 00000000
+ 32756 42f0 00000000 .quad .LBE842
+ 32756 00000000
+ 32757 42f8 02 .byte 0x2
+ 32758 42f9 D906 .value 0x6d9
+ 32759 42fb 8B470000 .long 0x478b
+ 32760 42ff 32 .uleb128 0x32
+ 32761 4300 EF0B0000 .long 0xbef
+ 32762 4304 03 .byte 0x3
+ 32763 4305 91 .byte 0x91
+ 32764 4306 BC7A .sleb128 -708
+ 32765 4308 32 .uleb128 0x32
+ 32766 4309 E30B0000 .long 0xbe3
+ 32767 430d 03 .byte 0x3
+ 32768 430e 91 .byte 0x91
+ 32769 430f C07A .sleb128 -704
+ 32770 4311 33 .uleb128 0x33
+ 32771 4312 00000000 .quad .LBB843
+ 32771 00000000
+ 32772 431a 00000000 .quad .LBE843
+ 32772 00000000
+ 32773 4322 34 .uleb128 0x34
+ 32774 4323 FB0B0000 .long 0xbfb
+ 32775 4327 04 .byte 0x4
+ 32776 4328 76 .byte 0x76
+ 32777 4329 80B57F .sleb128 -9600
+ 32778 432c 34 .uleb128 0x34
+ 32779 432d 070C0000 .long 0xc07
+ 32780 4331 04 .byte 0x4
+ 32781 4332 76 .byte 0x76
+ 32782 4333 F0B47F .sleb128 -9616
+ 32783 4336 31 .uleb128 0x31
+ 32784 4337 500C0000 .long 0xc50
+ 32785 433b 00000000 .quad .LBB844
+ 32785 00000000
+ 32786 4343 00000000 .quad .LBE844
+ 32786 00000000
+ 32787 434b 02 .byte 0x2
+ 32788 434c 9106 .value 0x691
+ 32789 434e 89430000 .long 0x4389
+ 32790 4352 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 907
+
+
+ 32791 4353 7A0C0000 .long 0xc7a
+ 32792 4357 03 .byte 0x3
+ 32793 4358 91 .byte 0x91
+ 32794 4359 D87A .sleb128 -680
+ 32795 435b 32 .uleb128 0x32
+ 32796 435c 6E0C0000 .long 0xc6e
+ 32797 4360 03 .byte 0x3
+ 32798 4361 91 .byte 0x91
+ 32799 4362 DC7A .sleb128 -676
+ 32800 4364 32 .uleb128 0x32
+ 32801 4365 620C0000 .long 0xc62
+ 32802 4369 03 .byte 0x3
+ 32803 436a 91 .byte 0x91
+ 32804 436b E07A .sleb128 -672
+ 32805 436d 33 .uleb128 0x33
+ 32806 436e 00000000 .quad .LBB845
+ 32806 00000000
+ 32807 4376 00000000 .quad .LBE845
+ 32807 00000000
+ 32808 437e 34 .uleb128 0x34
+ 32809 437f 860C0000 .long 0xc86
+ 32810 4383 03 .byte 0x3
+ 32811 4384 91 .byte 0x91
+ 32812 4385 A04A .sleb128 -6880
+ 32813 4387 00 .byte 0x0
+ 32814 4388 00 .byte 0x0
+ 32815 4389 31 .uleb128 0x31
+ 32816 438a 910C0000 .long 0xc91
+ 32817 438e 00000000 .quad .LBB846
+ 32817 00000000
+ 32818 4396 00000000 .quad .LBE846
+ 32818 00000000
+ 32819 439e 02 .byte 0x2
+ 32820 439f 9206 .value 0x692
+ 32821 43a1 F9450000 .long 0x45f9
+ 32822 43a5 32 .uleb128 0x32
+ 32823 43a6 A30C0000 .long 0xca3
+ 32824 43aa 03 .byte 0x3
+ 32825 43ab 91 .byte 0x91
+ 32826 43ac F07A .sleb128 -656
+ 32827 43ae 35 .uleb128 0x35
+ 32828 43af B00C0000 .long 0xcb0
+ 32829 43b3 00000000 .quad .LBB848
+ 32829 00000000
+ 32830 43bb 00000000 .quad .LBE848
+ 32830 00000000
+ 32831 43c3 02 .byte 0x2
+ 32832 43c4 7D03 .value 0x37d
+ 32833 43c6 32 .uleb128 0x32
+ 32834 43c7 CE0C0000 .long 0xcce
+ 32835 43cb 03 .byte 0x3
+ 32836 43cc 91 .byte 0x91
+ 32837 43cd 887B .sleb128 -632
+ 32838 43cf 32 .uleb128 0x32
+ 32839 43d0 C20C0000 .long 0xcc2
+ 32840 43d4 03 .byte 0x3
+ 32841 43d5 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 908
+
+
+ 32842 43d6 907B .sleb128 -624
+ 32843 43d8 33 .uleb128 0x33
+ 32844 43d9 00000000 .quad .LBB849
+ 32844 00000000
+ 32845 43e1 00000000 .quad .LBE849
+ 32845 00000000
+ 32846 43e9 34 .uleb128 0x34
+ 32847 43ea DA0C0000 .long 0xcda
+ 32848 43ee 03 .byte 0x3
+ 32849 43ef 91 .byte 0x91
+ 32850 43f0 E07B .sleb128 -544
+ 32851 43f2 34 .uleb128 0x34
+ 32852 43f3 E50C0000 .long 0xce5
+ 32853 43f7 03 .byte 0x3
+ 32854 43f8 91 .byte 0x91
+ 32855 43f9 D07B .sleb128 -560
+ 32856 43fb 34 .uleb128 0x34
+ 32857 43fc F00C0000 .long 0xcf0
+ 32858 4400 03 .byte 0x3
+ 32859 4401 91 .byte 0x91
+ 32860 4402 C07B .sleb128 -576
+ 32861 4404 34 .uleb128 0x34
+ 32862 4405 FC0C0000 .long 0xcfc
+ 32863 4409 03 .byte 0x3
+ 32864 440a 91 .byte 0x91
+ 32865 440b B07B .sleb128 -592
+ 32866 440d 34 .uleb128 0x34
+ 32867 440e 080D0000 .long 0xd08
+ 32868 4412 03 .byte 0x3
+ 32869 4413 91 .byte 0x91
+ 32870 4414 AC7B .sleb128 -596
+ 32871 4416 31 .uleb128 0x31
+ 32872 4417 1F0D0000 .long 0xd1f
+ 32873 441b 00000000 .quad .LBB850
+ 32873 00000000
+ 32874 4423 00000000 .quad .LBE850
+ 32874 00000000
+ 32875 442b 02 .byte 0x2
+ 32876 442c 5603 .value 0x356
+ 32877 442e 45440000 .long 0x4445
+ 32878 4432 32 .uleb128 0x32
+ 32879 4433 3A0D0000 .long 0xd3a
+ 32880 4437 03 .byte 0x3
+ 32881 4438 91 .byte 0x91
+ 32882 4439 F07B .sleb128 -528
+ 32883 443b 32 .uleb128 0x32
+ 32884 443c 300D0000 .long 0xd30
+ 32885 4440 03 .byte 0x3
+ 32886 4441 91 .byte 0x91
+ 32887 4442 807C .sleb128 -512
+ 32888 4444 00 .byte 0x0
+ 32889 4445 31 .uleb128 0x31
+ 32890 4446 450D0000 .long 0xd45
+ 32891 444a 00000000 .quad .LBB852
+ 32891 00000000
+ 32892 4452 00000000 .quad .LBE852
+ 32892 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 909
+
+
+ 32893 445a 02 .byte 0x2
+ 32894 445b 5E03 .value 0x35e
+ 32895 445d 74440000 .long 0x4474
+ 32896 4461 32 .uleb128 0x32
+ 32897 4462 620D0000 .long 0xd62
+ 32898 4466 03 .byte 0x3
+ 32899 4467 91 .byte 0x91
+ 32900 4468 907C .sleb128 -496
+ 32901 446a 32 .uleb128 0x32
+ 32902 446b 570D0000 .long 0xd57
+ 32903 446f 03 .byte 0x3
+ 32904 4470 91 .byte 0x91
+ 32905 4471 A07C .sleb128 -480
+ 32906 4473 00 .byte 0x0
+ 32907 4474 31 .uleb128 0x31
+ 32908 4475 6E0D0000 .long 0xd6e
+ 32909 4479 00000000 .quad .LBB854
+ 32909 00000000
+ 32910 4481 00000000 .quad .LBE854
+ 32910 00000000
+ 32911 4489 02 .byte 0x2
+ 32912 448a 6403 .value 0x364
+ 32913 448c D9440000 .long 0x44d9
+ 32914 4490 32 .uleb128 0x32
+ 32915 4491 8C0D0000 .long 0xd8c
+ 32916 4495 03 .byte 0x3
+ 32917 4496 91 .byte 0x91
+ 32918 4497 B07C .sleb128 -464
+ 32919 4499 32 .uleb128 0x32
+ 32920 449a 800D0000 .long 0xd80
+ 32921 449e 03 .byte 0x3
+ 32922 449f 91 .byte 0x91
+ 32923 44a0 C07C .sleb128 -448
+ 32924 44a2 33 .uleb128 0x33
+ 32925 44a3 00000000 .quad .LBB855
+ 32925 00000000
+ 32926 44ab 00000000 .quad .LBE855
+ 32926 00000000
+ 32927 44b3 34 .uleb128 0x34
+ 32928 44b4 980D0000 .long 0xd98
+ 32929 44b8 03 .byte 0x3
+ 32930 44b9 91 .byte 0x91
+ 32931 44ba D04A .sleb128 -6832
+ 32932 44bc 34 .uleb128 0x34
+ 32933 44bd A40D0000 .long 0xda4
+ 32934 44c1 03 .byte 0x3
+ 32935 44c2 91 .byte 0x91
+ 32936 44c3 C04A .sleb128 -6848
+ 32937 44c5 34 .uleb128 0x34
+ 32938 44c6 AF0D0000 .long 0xdaf
+ 32939 44ca 03 .byte 0x3
+ 32940 44cb 91 .byte 0x91
+ 32941 44cc B04A .sleb128 -6864
+ 32942 44ce 34 .uleb128 0x34
+ 32943 44cf BB0D0000 .long 0xdbb
+ 32944 44d3 03 .byte 0x3
+ 32945 44d4 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 910
+
+
+ 32946 44d5 DC7C .sleb128 -420
+ 32947 44d7 00 .byte 0x0
+ 32948 44d8 00 .byte 0x0
+ 32949 44d9 31 .uleb128 0x31
+ 32950 44da C70D0000 .long 0xdc7
+ 32951 44de 00000000 .quad .LBB856
+ 32951 00000000
+ 32952 44e6 00000000 .quad .LBE856
+ 32952 00000000
+ 32953 44ee 02 .byte 0x2
+ 32954 44ef 6603 .value 0x366
+ 32955 44f1 08450000 .long 0x4508
+ 32956 44f5 32 .uleb128 0x32
+ 32957 44f6 E20D0000 .long 0xde2
+ 32958 44fa 03 .byte 0x3
+ 32959 44fb 91 .byte 0x91
+ 32960 44fc E07C .sleb128 -416
+ 32961 44fe 32 .uleb128 0x32
+ 32962 44ff D80D0000 .long 0xdd8
+ 32963 4503 03 .byte 0x3
+ 32964 4504 91 .byte 0x91
+ 32965 4505 F07C .sleb128 -400
+ 32966 4507 00 .byte 0x0
+ 32967 4508 31 .uleb128 0x31
+ 32968 4509 6E0D0000 .long 0xd6e
+ 32969 450d 00000000 .quad .LBB858
+ 32969 00000000
+ 32970 4515 00000000 .quad .LBE858
+ 32970 00000000
+ 32971 451d 02 .byte 0x2
+ 32972 451e 6803 .value 0x368
+ 32973 4520 6D450000 .long 0x456d
+ 32974 4524 32 .uleb128 0x32
+ 32975 4525 8C0D0000 .long 0xd8c
+ 32976 4529 03 .byte 0x3
+ 32977 452a 91 .byte 0x91
+ 32978 452b 807D .sleb128 -384
+ 32979 452d 32 .uleb128 0x32
+ 32980 452e 800D0000 .long 0xd80
+ 32981 4532 03 .byte 0x3
+ 32982 4533 91 .byte 0x91
+ 32983 4534 907D .sleb128 -368
+ 32984 4536 33 .uleb128 0x33
+ 32985 4537 00000000 .quad .LBB859
+ 32985 00000000
+ 32986 453f 00000000 .quad .LBE859
+ 32986 00000000
+ 32987 4547 34 .uleb128 0x34
+ 32988 4548 980D0000 .long 0xd98
+ 32989 454c 03 .byte 0x3
+ 32990 454d 91 .byte 0x91
+ 32991 454e 804B .sleb128 -6784
+ 32992 4550 34 .uleb128 0x34
+ 32993 4551 A40D0000 .long 0xda4
+ 32994 4555 03 .byte 0x3
+ 32995 4556 91 .byte 0x91
+ 32996 4557 F04A .sleb128 -6800
+
GAS LISTING /tmp/ccMa7HLZ.s page 911
+
+
+ 32997 4559 34 .uleb128 0x34
+ 32998 455a AF0D0000 .long 0xdaf
+ 32999 455e 03 .byte 0x3
+ 33000 455f 91 .byte 0x91
+ 33001 4560 E04A .sleb128 -6816
+ 33002 4562 34 .uleb128 0x34
+ 33003 4563 BB0D0000 .long 0xdbb
+ 33004 4567 03 .byte 0x3
+ 33005 4568 91 .byte 0x91
+ 33006 4569 AC7D .sleb128 -340
+ 33007 456b 00 .byte 0x0
+ 33008 456c 00 .byte 0x0
+ 33009 456d 31 .uleb128 0x31
+ 33010 456e C70D0000 .long 0xdc7
+ 33011 4572 00000000 .quad .LBB860
+ 33011 00000000
+ 33012 457a 00000000 .quad .LBE860
+ 33012 00000000
+ 33013 4582 02 .byte 0x2
+ 33014 4583 6A03 .value 0x36a
+ 33015 4585 9C450000 .long 0x459c
+ 33016 4589 32 .uleb128 0x32
+ 33017 458a E20D0000 .long 0xde2
+ 33018 458e 03 .byte 0x3
+ 33019 458f 91 .byte 0x91
+ 33020 4590 B07D .sleb128 -336
+ 33021 4592 32 .uleb128 0x32
+ 33022 4593 D80D0000 .long 0xdd8
+ 33023 4597 03 .byte 0x3
+ 33024 4598 91 .byte 0x91
+ 33025 4599 C07D .sleb128 -320
+ 33026 459b 00 .byte 0x0
+ 33027 459c 31 .uleb128 0x31
+ 33028 459d ED0D0000 .long 0xded
+ 33029 45a1 00000000 .quad .LBB862
+ 33029 00000000
+ 33030 45a9 00000000 .quad .LBE862
+ 33030 00000000
+ 33031 45b1 02 .byte 0x2
+ 33032 45b2 6C03 .value 0x36c
+ 33033 45b4 CB450000 .long 0x45cb
+ 33034 45b8 32 .uleb128 0x32
+ 33035 45b9 0A0E0000 .long 0xe0a
+ 33036 45bd 03 .byte 0x3
+ 33037 45be 91 .byte 0x91
+ 33038 45bf D07D .sleb128 -304
+ 33039 45c1 32 .uleb128 0x32
+ 33040 45c2 FF0D0000 .long 0xdff
+ 33041 45c6 03 .byte 0x3
+ 33042 45c7 91 .byte 0x91
+ 33043 45c8 E07D .sleb128 -288
+ 33044 45ca 00 .byte 0x0
+ 33045 45cb 35 .uleb128 0x35
+ 33046 45cc 1F0D0000 .long 0xd1f
+ 33047 45d0 00000000 .quad .LBB864
+ 33047 00000000
+ 33048 45d8 00000000 .quad .LBE864
+
GAS LISTING /tmp/ccMa7HLZ.s page 912
+
+
+ 33048 00000000
+ 33049 45e0 02 .byte 0x2
+ 33050 45e1 6E03 .value 0x36e
+ 33051 45e3 32 .uleb128 0x32
+ 33052 45e4 3A0D0000 .long 0xd3a
+ 33053 45e8 03 .byte 0x3
+ 33054 45e9 91 .byte 0x91
+ 33055 45ea F07D .sleb128 -272
+ 33056 45ec 32 .uleb128 0x32
+ 33057 45ed 300D0000 .long 0xd30
+ 33058 45f1 03 .byte 0x3
+ 33059 45f2 91 .byte 0x91
+ 33060 45f3 807E .sleb128 -256
+ 33061 45f5 00 .byte 0x0
+ 33062 45f6 00 .byte 0x0
+ 33063 45f7 00 .byte 0x0
+ 33064 45f8 00 .byte 0x0
+ 33065 45f9 36 .uleb128 0x36
+ 33066 45fa 00000000 .quad .LBB866
+ 33066 00000000
+ 33067 4602 00000000 .quad .LBE866
+ 33067 00000000
+ 33068 460a 18460000 .long 0x4618
+ 33069 460e 34 .uleb128 0x34
+ 33070 460f 180C0000 .long 0xc18
+ 33071 4613 03 .byte 0x3
+ 33072 4614 91 .byte 0x91
+ 33073 4615 904A .sleb128 -6896
+ 33074 4617 00 .byte 0x0
+ 33075 4618 31 .uleb128 0x31
+ 33076 4619 160E0000 .long 0xe16
+ 33077 461d 00000000 .quad .LBB867
+ 33077 00000000
+ 33078 4625 00000000 .quad .LBE867
+ 33078 00000000
+ 33079 462d 02 .byte 0x2
+ 33080 462e 9406 .value 0x694
+ 33081 4630 C0460000 .long 0x46c0
+ 33082 4634 32 .uleb128 0x32
+ 33083 4635 280E0000 .long 0xe28
+ 33084 4639 03 .byte 0x3
+ 33085 463a 91 .byte 0x91
+ 33086 463b 907E .sleb128 -240
+ 33087 463d 33 .uleb128 0x33
+ 33088 463e 00000000 .quad .LBB868
+ 33088 00000000
+ 33089 4646 00000000 .quad .LBE868
+ 33089 00000000
+ 33090 464e 34 .uleb128 0x34
+ 33091 464f 340E0000 .long 0xe34
+ 33092 4653 09 .byte 0x9
+ 33093 4654 03 .byte 0x3
+ 33094 4655 00000000 .quad ShiftRowTable.6768
+ 33094 00000000
+ 33095 465d 35 .uleb128 0x35
+ 33096 465e 6E0D0000 .long 0xd6e
+ 33097 4662 00000000 .quad .LBB869
+
GAS LISTING /tmp/ccMa7HLZ.s page 913
+
+
+ 33097 00000000
+ 33098 466a 00000000 .quad .LBE869
+ 33098 00000000
+ 33099 4672 02 .byte 0x2
+ 33100 4673 9B02 .value 0x29b
+ 33101 4675 32 .uleb128 0x32
+ 33102 4676 8C0D0000 .long 0xd8c
+ 33103 467a 03 .byte 0x3
+ 33104 467b 91 .byte 0x91
+ 33105 467c A07E .sleb128 -224
+ 33106 467e 32 .uleb128 0x32
+ 33107 467f 800D0000 .long 0xd80
+ 33108 4683 03 .byte 0x3
+ 33109 4684 91 .byte 0x91
+ 33110 4685 B07E .sleb128 -208
+ 33111 4687 33 .uleb128 0x33
+ 33112 4688 00000000 .quad .LBB870
+ 33112 00000000
+ 33113 4690 00000000 .quad .LBE870
+ 33113 00000000
+ 33114 4698 34 .uleb128 0x34
+ 33115 4699 980D0000 .long 0xd98
+ 33116 469d 03 .byte 0x3
+ 33117 469e 91 .byte 0x91
+ 33118 469f B04B .sleb128 -6736
+ 33119 46a1 34 .uleb128 0x34
+ 33120 46a2 A40D0000 .long 0xda4
+ 33121 46a6 03 .byte 0x3
+ 33122 46a7 91 .byte 0x91
+ 33123 46a8 A04B .sleb128 -6752
+ 33124 46aa 34 .uleb128 0x34
+ 33125 46ab AF0D0000 .long 0xdaf
+ 33126 46af 03 .byte 0x3
+ 33127 46b0 91 .byte 0x91
+ 33128 46b1 904B .sleb128 -6768
+ 33129 46b3 34 .uleb128 0x34
+ 33130 46b4 BB0D0000 .long 0xdbb
+ 33131 46b8 03 .byte 0x3
+ 33132 46b9 91 .byte 0x91
+ 33133 46ba CC7E .sleb128 -180
+ 33134 46bc 00 .byte 0x0
+ 33135 46bd 00 .byte 0x0
+ 33136 46be 00 .byte 0x0
+ 33137 46bf 00 .byte 0x0
+ 33138 46c0 36 .uleb128 0x36
+ 33139 46c1 00000000 .quad .LBB871
+ 33139 00000000
+ 33140 46c9 00000000 .quad .LBE871
+ 33140 00000000
+ 33141 46d1 DF460000 .long 0x46df
+ 33142 46d5 34 .uleb128 0x34
+ 33143 46d6 280C0000 .long 0xc28
+ 33144 46da 03 .byte 0x3
+ 33145 46db 91 .byte 0x91
+ 33146 46dc 804A .sleb128 -6912
+ 33147 46de 00 .byte 0x0
+ 33148 46df 31 .uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s page 914
+
+
+ 33149 46e0 520E0000 .long 0xe52
+ 33150 46e4 00000000 .quad .LBB872
+ 33150 00000000
+ 33151 46ec 00000000 .quad .LBE872
+ 33151 00000000
+ 33152 46f4 02 .byte 0x2
+ 33153 46f5 9606 .value 0x696
+ 33154 46f7 0E470000 .long 0x470e
+ 33155 46fb 32 .uleb128 0x32
+ 33156 46fc 6D0E0000 .long 0xe6d
+ 33157 4700 03 .byte 0x3
+ 33158 4701 91 .byte 0x91
+ 33159 4702 D07E .sleb128 -176
+ 33160 4704 32 .uleb128 0x32
+ 33161 4705 630E0000 .long 0xe63
+ 33162 4709 03 .byte 0x3
+ 33163 470a 91 .byte 0x91
+ 33164 470b E07E .sleb128 -160
+ 33165 470d 00 .byte 0x0
+ 33166 470e 36 .uleb128 0x36
+ 33167 470f 00000000 .quad .LBB874
+ 33167 00000000
+ 33168 4717 00000000 .quad .LBE874
+ 33168 00000000
+ 33169 471f 2D470000 .long 0x472d
+ 33170 4723 34 .uleb128 0x34
+ 33171 4724 380C0000 .long 0xc38
+ 33172 4728 03 .byte 0x3
+ 33173 4729 91 .byte 0x91
+ 33174 472a F049 .sleb128 -6928
+ 33175 472c 00 .byte 0x0
+ 33176 472d 31 .uleb128 0x31
+ 33177 472e 780E0000 .long 0xe78
+ 33178 4732 00000000 .quad .LBB875
+ 33178 00000000
+ 33179 473a 00000000 .quad .LBE875
+ 33179 00000000
+ 33180 4742 02 .byte 0x2
+ 33181 4743 9806 .value 0x698
+ 33182 4745 6E470000 .long 0x476e
+ 33183 4749 32 .uleb128 0x32
+ 33184 474a 8A0E0000 .long 0xe8a
+ 33185 474e 03 .byte 0x3
+ 33186 474f 91 .byte 0x91
+ 33187 4750 F07E .sleb128 -144
+ 33188 4752 33 .uleb128 0x33
+ 33189 4753 00000000 .quad .LBB876
+ 33189 00000000
+ 33190 475b 00000000 .quad .LBE876
+ 33190 00000000
+ 33191 4763 34 .uleb128 0x34
+ 33192 4764 960E0000 .long 0xe96
+ 33193 4768 03 .byte 0x3
+ 33194 4769 91 .byte 0x91
+ 33195 476a C04B .sleb128 -6720
+ 33196 476c 00 .byte 0x0
+ 33197 476d 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 915
+
+
+ 33198 476e 33 .uleb128 0x33
+ 33199 476f 00000000 .quad .LBB877
+ 33199 00000000
+ 33200 4777 00000000 .quad .LBE877
+ 33200 00000000
+ 33201 477f 34 .uleb128 0x34
+ 33202 4780 440C0000 .long 0xc44
+ 33203 4784 03 .byte 0x3
+ 33204 4785 91 .byte 0x91
+ 33205 4786 E049 .sleb128 -6944
+ 33206 4788 00 .byte 0x0
+ 33207 4789 00 .byte 0x0
+ 33208 478a 00 .byte 0x0
+ 33209 478b 35 .uleb128 0x35
+ 33210 478c A30E0000 .long 0xea3
+ 33211 4790 00000000 .quad .LBB878
+ 33211 00000000
+ 33212 4798 00000000 .quad .LBE878
+ 33212 00000000
+ 33213 47a0 02 .byte 0x2
+ 33214 47a1 D906 .value 0x6d9
+ 33215 47a3 32 .uleb128 0x32
+ 33216 47a4 B50E0000 .long 0xeb5
+ 33217 47a8 03 .byte 0x3
+ 33218 47a9 91 .byte 0x91
+ 33219 47aa 807F .sleb128 -128
+ 33220 47ac 33 .uleb128 0x33
+ 33221 47ad 00000000 .quad .LBB879
+ 33221 00000000
+ 33222 47b5 00000000 .quad .LBE879
+ 33222 00000000
+ 33223 47bd 34 .uleb128 0x34
+ 33224 47be C10E0000 .long 0xec1
+ 33225 47c2 04 .byte 0x4
+ 33226 47c3 76 .byte 0x76
+ 33227 47c4 A0B57F .sleb128 -9568
+ 33228 47c7 31 .uleb128 0x31
+ 33229 47c8 CE0E0000 .long 0xece
+ 33230 47cc 00000000 .quad .LBB880
+ 33230 00000000
+ 33231 47d4 00000000 .quad .LBE880
+ 33231 00000000
+ 33232 47dc 02 .byte 0x2
+ 33233 47dd 1F06 .value 0x61f
+ 33234 47df 08480000 .long 0x4808
+ 33235 47e3 32 .uleb128 0x32
+ 33236 47e4 E00E0000 .long 0xee0
+ 33237 47e8 03 .byte 0x3
+ 33238 47e9 91 .byte 0x91
+ 33239 47ea 907F .sleb128 -112
+ 33240 47ec 33 .uleb128 0x33
+ 33241 47ed 00000000 .quad .LBB881
+ 33241 00000000
+ 33242 47f5 00000000 .quad .LBE881
+ 33242 00000000
+ 33243 47fd 34 .uleb128 0x34
+ 33244 47fe EC0E0000 .long 0xeec
+
GAS LISTING /tmp/ccMa7HLZ.s page 916
+
+
+ 33245 4802 03 .byte 0x3
+ 33246 4803 91 .byte 0x91
+ 33247 4804 D04B .sleb128 -6704
+ 33248 4806 00 .byte 0x0
+ 33249 4807 00 .byte 0x0
+ 33250 4808 31 .uleb128 0x31
+ 33251 4809 CE0E0000 .long 0xece
+ 33252 480d 00000000 .quad .LBB882
+ 33252 00000000
+ 33253 4815 00000000 .quad .LBE882
+ 33253 00000000
+ 33254 481d 02 .byte 0x2
+ 33255 481e 2006 .value 0x620
+ 33256 4820 49480000 .long 0x4849
+ 33257 4824 32 .uleb128 0x32
+ 33258 4825 E00E0000 .long 0xee0
+ 33259 4829 03 .byte 0x3
+ 33260 482a 91 .byte 0x91
+ 33261 482b A07F .sleb128 -96
+ 33262 482d 33 .uleb128 0x33
+ 33263 482e 00000000 .quad .LBB883
+ 33263 00000000
+ 33264 4836 00000000 .quad .LBE883
+ 33264 00000000
+ 33265 483e 34 .uleb128 0x34
+ 33266 483f EC0E0000 .long 0xeec
+ 33267 4843 03 .byte 0x3
+ 33268 4844 91 .byte 0x91
+ 33269 4845 E04B .sleb128 -6688
+ 33270 4847 00 .byte 0x0
+ 33271 4848 00 .byte 0x0
+ 33272 4849 35 .uleb128 0x35
+ 33273 484a CE0E0000 .long 0xece
+ 33274 484e 00000000 .quad .LBB884
+ 33274 00000000
+ 33275 4856 00000000 .quad .LBE884
+ 33275 00000000
+ 33276 485e 02 .byte 0x2
+ 33277 485f 2106 .value 0x621
+ 33278 4861 32 .uleb128 0x32
+ 33279 4862 E00E0000 .long 0xee0
+ 33280 4866 03 .byte 0x3
+ 33281 4867 91 .byte 0x91
+ 33282 4868 B07F .sleb128 -80
+ 33283 486a 33 .uleb128 0x33
+ 33284 486b 00000000 .quad .LBB885
+ 33284 00000000
+ 33285 4873 00000000 .quad .LBE885
+ 33285 00000000
+ 33286 487b 34 .uleb128 0x34
+ 33287 487c EC0E0000 .long 0xeec
+ 33288 4880 03 .byte 0x3
+ 33289 4881 91 .byte 0x91
+ 33290 4882 F04B .sleb128 -6672
+ 33291 4884 00 .byte 0x0
+ 33292 4885 00 .byte 0x0
+ 33293 4886 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 917
+
+
+ 33294 4887 00 .byte 0x0
+ 33295 4888 00 .byte 0x0
+ 33296 4889 07 .uleb128 0x7
+ 33297 488a 08 .byte 0x8
+ 33298 488b B1010000 .long 0x1b1
+ 33299 488f 07 .uleb128 0x7
+ 33300 4890 08 .byte 0x8
+ 33301 4891 95480000 .long 0x4895
+ 33302 4895 06 .uleb128 0x6
+ 33303 4896 FC030000 .long 0x3fc
+ 33304 489a 25 .uleb128 0x25
+ 33305 489b 00000000 .long .LASF344
+ 33306 489f 02 .byte 0x2
+ 33307 48a0 1105 .value 0x511
+ 33308 48a2 01 .byte 0x1
+ 33309 48a3 B1010000 .long 0x1b1
+ 33310 48a7 03 .byte 0x3
+ 33311 48a8 C5480000 .long 0x48c5
+ 33312 48ac 26 .uleb128 0x26
+ 33313 48ad 00000000 .long .LASF66
+ 33314 48b1 02 .byte 0x2
+ 33315 48b2 1105 .value 0x511
+ 33316 48b4 B1010000 .long 0x1b1
+ 33317 48b8 27 .uleb128 0x27
+ 33318 48b9 00000000 .long .LASF339
+ 33319 48bd 02 .byte 0x2
+ 33320 48be 1705 .value 0x517
+ 33321 48c0 27050000 .long 0x527
+ 33322 48c4 00 .byte 0x0
+ 33323 48c5 25 .uleb128 0x25
+ 33324 48c6 00000000 .long .LASF345
+ 33325 48ca 02 .byte 0x2
+ 33326 48cb 5206 .value 0x652
+ 33327 48cd 01 .byte 0x1
+ 33328 48ce B1010000 .long 0x1b1
+ 33329 48d2 03 .byte 0x3
+ 33330 48d3 12490000 .long 0x4912
+ 33331 48d7 26 .uleb128 0x26
+ 33332 48d8 00000000 .long .LASF66
+ 33333 48dc 02 .byte 0x2
+ 33334 48dd 5206 .value 0x652
+ 33335 48df B1010000 .long 0x1b1
+ 33336 48e3 26 .uleb128 0x26
+ 33337 48e4 00000000 .long .LASF320
+ 33338 48e8 02 .byte 0x2
+ 33339 48e9 5206 .value 0x652
+ 33340 48eb A9000000 .long 0xa9
+ 33341 48ef 28 .uleb128 0x28
+ 33342 48f0 7500 .string "u"
+ 33343 48f2 02 .byte 0x2
+ 33344 48f3 5906 .value 0x659
+ 33345 48f5 27050000 .long 0x527
+ 33346 48f9 27 .uleb128 0x27
+ 33347 48fa 00000000 .long .LASF346
+ 33348 48fe 02 .byte 0x2
+ 33349 48ff 5A06 .value 0x65a
+ 33350 4901 07040000 .long 0x407
+
GAS LISTING /tmp/ccMa7HLZ.s page 918
+
+
+ 33351 4905 27 .uleb128 0x27
+ 33352 4906 00000000 .long .LASF339
+ 33353 490a 02 .byte 0x2
+ 33354 490b 5B06 .value 0x65b
+ 33355 490d 07040000 .long 0x407
+ 33356 4911 00 .byte 0x0
+ 33357 4912 25 .uleb128 0x25
+ 33358 4913 00000000 .long .LASF347
+ 33359 4917 02 .byte 0x2
+ 33360 4918 DF02 .value 0x2df
+ 33361 491a 01 .byte 0x1
+ 33362 491b 07040000 .long 0x407
+ 33363 491f 03 .byte 0x3
+ 33364 4920 46490000 .long 0x4946
+ 33365 4924 2B .uleb128 0x2b
+ 33366 4925 7700 .string "w"
+ 33367 4927 02 .byte 0x2
+ 33368 4928 DF02 .value 0x2df
+ 33369 492a 07040000 .long 0x407
+ 33370 492e 28 .uleb128 0x28
+ 33371 492f 636F6C00 .string "col"
+ 33372 4933 02 .byte 0x2
+ 33373 4934 E102 .value 0x2e1
+ 33374 4936 12040000 .long 0x412
+ 33375 493a 28 .uleb128 0x28
+ 33376 493b 697800 .string "ix"
+ 33377 493e 02 .byte 0x2
+ 33378 493f E202 .value 0x2e2
+ 33379 4941 6D000000 .long 0x6d
+ 33380 4945 00 .byte 0x0
+ 33381 4946 25 .uleb128 0x25
+ 33382 4947 00000000 .long .LASF348
+ 33383 494b 02 .byte 0x2
+ 33384 494c AA04 .value 0x4aa
+ 33385 494e 01 .byte 0x1
+ 33386 494f 07040000 .long 0x407
+ 33387 4953 03 .byte 0x3
+ 33388 4954 63490000 .long 0x4963
+ 33389 4958 2B .uleb128 0x2b
+ 33390 4959 7700 .string "w"
+ 33391 495b 02 .byte 0x2
+ 33392 495c AA04 .value 0x4aa
+ 33393 495e 07040000 .long 0x407
+ 33394 4962 00 .byte 0x0
+ 33395 4963 25 .uleb128 0x25
+ 33396 4964 00000000 .long .LASF349
+ 33397 4968 02 .byte 0x2
+ 33398 4969 B705 .value 0x5b7
+ 33399 496b 01 .byte 0x1
+ 33400 496c B1010000 .long 0x1b1
+ 33401 4970 03 .byte 0x3
+ 33402 4971 A0490000 .long 0x49a0
+ 33403 4975 2B .uleb128 0x2b
+ 33404 4976 7700 .string "w"
+ 33405 4978 02 .byte 0x2
+ 33406 4979 B705 .value 0x5b7
+ 33407 497b B1010000 .long 0x1b1
+
GAS LISTING /tmp/ccMa7HLZ.s page 919
+
+
+ 33408 497f 2B .uleb128 0x2b
+ 33409 4980 7800 .string "x"
+ 33410 4982 02 .byte 0x2
+ 33411 4983 B705 .value 0x5b7
+ 33412 4985 B1010000 .long 0x1b1
+ 33413 4989 28 .uleb128 0x28
+ 33414 498a 777700 .string "ww"
+ 33415 498d 02 .byte 0x2
+ 33416 498e BC05 .value 0x5bc
+ 33417 4990 27050000 .long 0x527
+ 33418 4994 28 .uleb128 0x28
+ 33419 4995 787800 .string "xx"
+ 33420 4998 02 .byte 0x2
+ 33421 4999 BD05 .value 0x5bd
+ 33422 499b 27050000 .long 0x527
+ 33423 499f 00 .byte 0x0
+ 33424 49a0 25 .uleb128 0x25
+ 33425 49a1 00000000 .long .LASF350
+ 33426 49a5 02 .byte 0x2
+ 33427 49a6 D705 .value 0x5d7
+ 33428 49a8 01 .byte 0x1
+ 33429 49a9 B1010000 .long 0x1b1
+ 33430 49ad 03 .byte 0x3
+ 33431 49ae DD490000 .long 0x49dd
+ 33432 49b2 2B .uleb128 0x2b
+ 33433 49b3 7700 .string "w"
+ 33434 49b5 02 .byte 0x2
+ 33435 49b6 D705 .value 0x5d7
+ 33436 49b8 B1010000 .long 0x1b1
+ 33437 49bc 2B .uleb128 0x2b
+ 33438 49bd 7800 .string "x"
+ 33439 49bf 02 .byte 0x2
+ 33440 49c0 D705 .value 0x5d7
+ 33441 49c2 B1010000 .long 0x1b1
+ 33442 49c6 28 .uleb128 0x28
+ 33443 49c7 777700 .string "ww"
+ 33444 49ca 02 .byte 0x2
+ 33445 49cb DC05 .value 0x5dc
+ 33446 49cd 27050000 .long 0x527
+ 33447 49d1 28 .uleb128 0x28
+ 33448 49d2 787800 .string "xx"
+ 33449 49d5 02 .byte 0x2
+ 33450 49d6 DD05 .value 0x5dd
+ 33451 49d8 27050000 .long 0x527
+ 33452 49dc 00 .byte 0x0
+ 33453 49dd 2D .uleb128 0x2d
+ 33454 49de 00000000 .long .LASF352
+ 33455 49e2 02 .byte 0x2
+ 33456 49e3 E706 .value 0x6e7
+ 33457 49e5 01 .byte 0x1
+ 33458 49e6 00000000 .quad .LFB564
+ 33458 00000000
+ 33459 49ee 00000000 .quad .LFE564
+ 33459 00000000
+ 33460 49f6 00000000 .long .LLST2
+ 33461 49fa 4E740000 .long 0x744e
+ 33462 49fe 2E .uleb128 0x2e
+
GAS LISTING /tmp/ccMa7HLZ.s page 920
+
+
+ 33463 49ff 00000000 .long .LASF64
+ 33464 4a03 02 .byte 0x2
+ 33465 4a04 E706 .value 0x6e7
+ 33466 4a06 89480000 .long 0x4889
+ 33467 4a0a 03 .byte 0x3
+ 33468 4a0b 91 .byte 0x91
+ 33469 4a0c F84E .sleb128 -6280
+ 33470 4a0e 2F .uleb128 0x2f
+ 33471 4a0f 6B657900 .string "key"
+ 33472 4a13 02 .byte 0x2
+ 33473 4a14 E706 .value 0x6e7
+ 33474 4a16 8F480000 .long 0x488f
+ 33475 4a1a 03 .byte 0x3
+ 33476 4a1b 91 .byte 0x91
+ 33477 4a1c F04E .sleb128 -6288
+ 33478 4a1e 37 .uleb128 0x37
+ 33479 4a1f 763000 .string "v0"
+ 33480 4a22 02 .byte 0x2
+ 33481 4a23 EF06 .value 0x6ef
+ 33482 4a25 B1010000 .long 0x1b1
+ 33483 4a29 03 .byte 0x3
+ 33484 4a2a 76 .byte 0x76
+ 33485 4a2b F04A .sleb128 -6800
+ 33486 4a2d 37 .uleb128 0x37
+ 33487 4a2e 763100 .string "v1"
+ 33488 4a31 02 .byte 0x2
+ 33489 4a32 EF06 .value 0x6ef
+ 33490 4a34 B1010000 .long 0x1b1
+ 33491 4a38 03 .byte 0x3
+ 33492 4a39 76 .byte 0x76
+ 33493 4a3a 804B .sleb128 -6784
+ 33494 4a3c 37 .uleb128 0x37
+ 33495 4a3d 763200 .string "v2"
+ 33496 4a40 02 .byte 0x2
+ 33497 4a41 EF06 .value 0x6ef
+ 33498 4a43 B1010000 .long 0x1b1
+ 33499 4a47 03 .byte 0x3
+ 33500 4a48 76 .byte 0x76
+ 33501 4a49 904B .sleb128 -6768
+ 33502 4a4b 37 .uleb128 0x37
+ 33503 4a4c 763300 .string "v3"
+ 33504 4a4f 02 .byte 0x2
+ 33505 4a50 EF06 .value 0x6ef
+ 33506 4a52 B1010000 .long 0x1b1
+ 33507 4a56 03 .byte 0x3
+ 33508 4a57 76 .byte 0x76
+ 33509 4a58 A04B .sleb128 -6752
+ 33510 4a5a 37 .uleb128 0x37
+ 33511 4a5b 763400 .string "v4"
+ 33512 4a5e 02 .byte 0x2
+ 33513 4a5f EF06 .value 0x6ef
+ 33514 4a61 B1010000 .long 0x1b1
+ 33515 4a65 03 .byte 0x3
+ 33516 4a66 76 .byte 0x76
+ 33517 4a67 B04B .sleb128 -6736
+ 33518 4a69 37 .uleb128 0x37
+ 33519 4a6a 6B00 .string "k"
+
GAS LISTING /tmp/ccMa7HLZ.s page 921
+
+
+ 33520 4a6c 02 .byte 0x2
+ 33521 4a6d F006 .value 0x6f0
+ 33522 4a6f B1010000 .long 0x1b1
+ 33523 4a73 03 .byte 0x3
+ 33524 4a74 76 .byte 0x76
+ 33525 4a75 C04B .sleb128 -6720
+ 33526 4a77 31 .uleb128 0x31
+ 33527 4a78 AB0B0000 .long 0xbab
+ 33528 4a7c 00000000 .quad .LBB1210
+ 33528 00000000
+ 33529 4a84 00000000 .quad .LBE1210
+ 33529 00000000
+ 33530 4a8c 02 .byte 0x2
+ 33531 4a8d F306 .value 0x6f3
+ 33532 4a8f B84A0000 .long 0x4ab8
+ 33533 4a93 32 .uleb128 0x32
+ 33534 4a94 BC0B0000 .long 0xbbc
+ 33535 4a98 03 .byte 0x3
+ 33536 4a99 91 .byte 0x91
+ 33537 4a9a B060 .sleb128 -4048
+ 33538 4a9c 33 .uleb128 0x33
+ 33539 4a9d 00000000 .quad .LBB1211
+ 33539 00000000
+ 33540 4aa5 00000000 .quad .LBE1211
+ 33540 00000000
+ 33541 4aad 34 .uleb128 0x34
+ 33542 4aae C70B0000 .long 0xbc7
+ 33543 4ab2 03 .byte 0x3
+ 33544 4ab3 91 .byte 0x91
+ 33545 4ab4 804F .sleb128 -6272
+ 33546 4ab6 00 .byte 0x0
+ 33547 4ab7 00 .byte 0x0
+ 33548 4ab8 31 .uleb128 0x31
+ 33549 4ab9 AB0B0000 .long 0xbab
+ 33550 4abd 00000000 .quad .LBB1212
+ 33550 00000000
+ 33551 4ac5 00000000 .quad .LBE1212
+ 33551 00000000
+ 33552 4acd 02 .byte 0x2
+ 33553 4ace F406 .value 0x6f4
+ 33554 4ad0 F94A0000 .long 0x4af9
+ 33555 4ad4 32 .uleb128 0x32
+ 33556 4ad5 BC0B0000 .long 0xbbc
+ 33557 4ad9 03 .byte 0x3
+ 33558 4ada 91 .byte 0x91
+ 33559 4adb B860 .sleb128 -4040
+ 33560 4add 33 .uleb128 0x33
+ 33561 4ade 00000000 .quad .LBB1213
+ 33561 00000000
+ 33562 4ae6 00000000 .quad .LBE1213
+ 33562 00000000
+ 33563 4aee 34 .uleb128 0x34
+ 33564 4aef C70B0000 .long 0xbc7
+ 33565 4af3 03 .byte 0x3
+ 33566 4af4 91 .byte 0x91
+ 33567 4af5 904F .sleb128 -6256
+ 33568 4af7 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 922
+
+
+ 33569 4af8 00 .byte 0x0
+ 33570 4af9 31 .uleb128 0x31
+ 33571 4afa 9A480000 .long 0x489a
+ 33572 4afe 00000000 .quad .LBB1214
+ 33572 00000000
+ 33573 4b06 00000000 .quad .LBE1214
+ 33573 00000000
+ 33574 4b0e 02 .byte 0x2
+ 33575 4b0f F506 .value 0x6f5
+ 33576 4b11 3A4B0000 .long 0x4b3a
+ 33577 4b15 32 .uleb128 0x32
+ 33578 4b16 AC480000 .long 0x48ac
+ 33579 4b1a 03 .byte 0x3
+ 33580 4b1b 91 .byte 0x91
+ 33581 4b1c C060 .sleb128 -4032
+ 33582 4b1e 33 .uleb128 0x33
+ 33583 4b1f 00000000 .quad .LBB1215
+ 33583 00000000
+ 33584 4b27 00000000 .quad .LBE1215
+ 33584 00000000
+ 33585 4b2f 34 .uleb128 0x34
+ 33586 4b30 B8480000 .long 0x48b8
+ 33587 4b34 03 .byte 0x3
+ 33588 4b35 91 .byte 0x91
+ 33589 4b36 A04F .sleb128 -6240
+ 33590 4b38 00 .byte 0x0
+ 33591 4b39 00 .byte 0x0
+ 33592 4b3a 31 .uleb128 0x31
+ 33593 4b3b C5480000 .long 0x48c5
+ 33594 4b3f 00000000 .quad .LBB1216
+ 33594 00000000
+ 33595 4b47 00000000 .quad .LBE1216
+ 33595 00000000
+ 33596 4b4f 02 .byte 0x2
+ 33597 4b50 FC06 .value 0x6fc
+ 33598 4b52 024C0000 .long 0x4c02
+ 33599 4b56 32 .uleb128 0x32
+ 33600 4b57 E3480000 .long 0x48e3
+ 33601 4b5b 03 .byte 0x3
+ 33602 4b5c 91 .byte 0x91
+ 33603 4b5d DC60 .sleb128 -4004
+ 33604 4b5f 32 .uleb128 0x32
+ 33605 4b60 D7480000 .long 0x48d7
+ 33606 4b64 03 .byte 0x3
+ 33607 4b65 91 .byte 0x91
+ 33608 4b66 E060 .sleb128 -4000
+ 33609 4b68 33 .uleb128 0x33
+ 33610 4b69 00000000 .quad .LBB1217
+ 33610 00000000
+ 33611 4b71 00000000 .quad .LBE1217
+ 33611 00000000
+ 33612 4b79 34 .uleb128 0x34
+ 33613 4b7a EF480000 .long 0x48ef
+ 33614 4b7e 03 .byte 0x3
+ 33615 4b7f 91 .byte 0x91
+ 33616 4b80 C04F .sleb128 -6208
+ 33617 4b82 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 923
+
+
+ 33618 4b83 F9480000 .long 0x48f9
+ 33619 4b87 03 .byte 0x3
+ 33620 4b88 91 .byte 0x91
+ 33621 4b89 8061 .sleb128 -3968
+ 33622 4b8b 34 .uleb128 0x34
+ 33623 4b8c 05490000 .long 0x4905
+ 33624 4b90 03 .byte 0x3
+ 33625 4b91 91 .byte 0x91
+ 33626 4b92 FC60 .sleb128 -3972
+ 33627 4b94 31 .uleb128 0x31
+ 33628 4b95 12490000 .long 0x4912
+ 33629 4b99 00000000 .quad .LBB1218
+ 33629 00000000
+ 33630 4ba1 00000000 .quad .LBE1218
+ 33630 00000000
+ 33631 4ba9 02 .byte 0x2
+ 33632 4baa 5F06 .value 0x65f
+ 33633 4bac DE4B0000 .long 0x4bde
+ 33634 4bb0 32 .uleb128 0x32
+ 33635 4bb1 24490000 .long 0x4924
+ 33636 4bb5 03 .byte 0x3
+ 33637 4bb6 91 .byte 0x91
+ 33638 4bb7 8461 .sleb128 -3964
+ 33639 4bb9 33 .uleb128 0x33
+ 33640 4bba 00000000 .quad .LBB1219
+ 33640 00000000
+ 33641 4bc2 00000000 .quad .LBE1219
+ 33641 00000000
+ 33642 4bca 34 .uleb128 0x34
+ 33643 4bcb 2E490000 .long 0x492e
+ 33644 4bcf 03 .byte 0x3
+ 33645 4bd0 91 .byte 0x91
+ 33646 4bd1 B04F .sleb128 -6224
+ 33647 4bd3 34 .uleb128 0x34
+ 33648 4bd4 3A490000 .long 0x493a
+ 33649 4bd8 03 .byte 0x3
+ 33650 4bd9 91 .byte 0x91
+ 33651 4bda 8861 .sleb128 -3960
+ 33652 4bdc 00 .byte 0x0
+ 33653 4bdd 00 .byte 0x0
+ 33654 4bde 35 .uleb128 0x35
+ 33655 4bdf 46490000 .long 0x4946
+ 33656 4be3 00000000 .quad .LBB1220
+ 33656 00000000
+ 33657 4beb 00000000 .quad .LBE1220
+ 33657 00000000
+ 33658 4bf3 02 .byte 0x2
+ 33659 4bf4 6006 .value 0x660
+ 33660 4bf6 32 .uleb128 0x32
+ 33661 4bf7 58490000 .long 0x4958
+ 33662 4bfb 03 .byte 0x3
+ 33663 4bfc 91 .byte 0x91
+ 33664 4bfd 8C61 .sleb128 -3956
+ 33665 4bff 00 .byte 0x0
+ 33666 4c00 00 .byte 0x0
+ 33667 4c01 00 .byte 0x0
+ 33668 4c02 31 .uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s page 924
+
+
+ 33669 4c03 A30E0000 .long 0xea3
+ 33670 4c07 00000000 .quad .LBB1222
+ 33670 00000000
+ 33671 4c0f 00000000 .quad .LBE1222
+ 33671 00000000
+ 33672 4c17 02 .byte 0x2
+ 33673 4c18 FE06 .value 0x6fe
+ 33674 4c1a 024D0000 .long 0x4d02
+ 33675 4c1e 32 .uleb128 0x32
+ 33676 4c1f B50E0000 .long 0xeb5
+ 33677 4c23 03 .byte 0x3
+ 33678 4c24 91 .byte 0x91
+ 33679 4c25 9061 .sleb128 -3952
+ 33680 4c27 33 .uleb128 0x33
+ 33681 4c28 00000000 .quad .LBB1223
+ 33681 00000000
+ 33682 4c30 00000000 .quad .LBE1223
+ 33682 00000000
+ 33683 4c38 34 .uleb128 0x34
+ 33684 4c39 C10E0000 .long 0xec1
+ 33685 4c3d 03 .byte 0x3
+ 33686 4c3e 76 .byte 0x76
+ 33687 4c3f D04B .sleb128 -6704
+ 33688 4c41 31 .uleb128 0x31
+ 33689 4c42 CE0E0000 .long 0xece
+ 33690 4c46 00000000 .quad .LBB1224
+ 33690 00000000
+ 33691 4c4e 00000000 .quad .LBE1224
+ 33691 00000000
+ 33692 4c56 02 .byte 0x2
+ 33693 4c57 1F06 .value 0x61f
+ 33694 4c59 824C0000 .long 0x4c82
+ 33695 4c5d 32 .uleb128 0x32
+ 33696 4c5e E00E0000 .long 0xee0
+ 33697 4c62 03 .byte 0x3
+ 33698 4c63 91 .byte 0x91
+ 33699 4c64 A061 .sleb128 -3936
+ 33700 4c66 33 .uleb128 0x33
+ 33701 4c67 00000000 .quad .LBB1225
+ 33701 00000000
+ 33702 4c6f 00000000 .quad .LBE1225
+ 33702 00000000
+ 33703 4c77 34 .uleb128 0x34
+ 33704 4c78 EC0E0000 .long 0xeec
+ 33705 4c7c 03 .byte 0x3
+ 33706 4c7d 91 .byte 0x91
+ 33707 4c7e D04F .sleb128 -6192
+ 33708 4c80 00 .byte 0x0
+ 33709 4c81 00 .byte 0x0
+ 33710 4c82 31 .uleb128 0x31
+ 33711 4c83 CE0E0000 .long 0xece
+ 33712 4c87 00000000 .quad .LBB1226
+ 33712 00000000
+ 33713 4c8f 00000000 .quad .LBE1226
+ 33713 00000000
+ 33714 4c97 02 .byte 0x2
+ 33715 4c98 2006 .value 0x620
+
GAS LISTING /tmp/ccMa7HLZ.s page 925
+
+
+ 33716 4c9a C34C0000 .long 0x4cc3
+ 33717 4c9e 32 .uleb128 0x32
+ 33718 4c9f E00E0000 .long 0xee0
+ 33719 4ca3 03 .byte 0x3
+ 33720 4ca4 91 .byte 0x91
+ 33721 4ca5 B061 .sleb128 -3920
+ 33722 4ca7 33 .uleb128 0x33
+ 33723 4ca8 00000000 .quad .LBB1227
+ 33723 00000000
+ 33724 4cb0 00000000 .quad .LBE1227
+ 33724 00000000
+ 33725 4cb8 34 .uleb128 0x34
+ 33726 4cb9 EC0E0000 .long 0xeec
+ 33727 4cbd 03 .byte 0x3
+ 33728 4cbe 91 .byte 0x91
+ 33729 4cbf E04F .sleb128 -6176
+ 33730 4cc1 00 .byte 0x0
+ 33731 4cc2 00 .byte 0x0
+ 33732 4cc3 35 .uleb128 0x35
+ 33733 4cc4 CE0E0000 .long 0xece
+ 33734 4cc8 00000000 .quad .LBB1228
+ 33734 00000000
+ 33735 4cd0 00000000 .quad .LBE1228
+ 33735 00000000
+ 33736 4cd8 02 .byte 0x2
+ 33737 4cd9 2106 .value 0x621
+ 33738 4cdb 32 .uleb128 0x32
+ 33739 4cdc E00E0000 .long 0xee0
+ 33740 4ce0 03 .byte 0x3
+ 33741 4ce1 91 .byte 0x91
+ 33742 4ce2 C061 .sleb128 -3904
+ 33743 4ce4 33 .uleb128 0x33
+ 33744 4ce5 00000000 .quad .LBB1229
+ 33744 00000000
+ 33745 4ced 00000000 .quad .LBE1229
+ 33745 00000000
+ 33746 4cf5 34 .uleb128 0x34
+ 33747 4cf6 EC0E0000 .long 0xeec
+ 33748 4cfa 03 .byte 0x3
+ 33749 4cfb 91 .byte 0x91
+ 33750 4cfc F04F .sleb128 -6160
+ 33751 4cfe 00 .byte 0x0
+ 33752 4cff 00 .byte 0x0
+ 33753 4d00 00 .byte 0x0
+ 33754 4d01 00 .byte 0x0
+ 33755 4d02 31 .uleb128 0x31
+ 33756 4d03 A30E0000 .long 0xea3
+ 33757 4d07 00000000 .quad .LBB1230
+ 33757 00000000
+ 33758 4d0f 00000000 .quad .LBE1230
+ 33758 00000000
+ 33759 4d17 02 .byte 0x2
+ 33760 4d18 0007 .value 0x700
+ 33761 4d1a 024E0000 .long 0x4e02
+ 33762 4d1e 32 .uleb128 0x32
+ 33763 4d1f B50E0000 .long 0xeb5
+ 33764 4d23 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 926
+
+
+ 33765 4d24 91 .byte 0x91
+ 33766 4d25 D061 .sleb128 -3888
+ 33767 4d27 33 .uleb128 0x33
+ 33768 4d28 00000000 .quad .LBB1231
+ 33768 00000000
+ 33769 4d30 00000000 .quad .LBE1231
+ 33769 00000000
+ 33770 4d38 34 .uleb128 0x34
+ 33771 4d39 C10E0000 .long 0xec1
+ 33772 4d3d 03 .byte 0x3
+ 33773 4d3e 76 .byte 0x76
+ 33774 4d3f E04B .sleb128 -6688
+ 33775 4d41 31 .uleb128 0x31
+ 33776 4d42 CE0E0000 .long 0xece
+ 33777 4d46 00000000 .quad .LBB1232
+ 33777 00000000
+ 33778 4d4e 00000000 .quad .LBE1232
+ 33778 00000000
+ 33779 4d56 02 .byte 0x2
+ 33780 4d57 1F06 .value 0x61f
+ 33781 4d59 824D0000 .long 0x4d82
+ 33782 4d5d 32 .uleb128 0x32
+ 33783 4d5e E00E0000 .long 0xee0
+ 33784 4d62 03 .byte 0x3
+ 33785 4d63 91 .byte 0x91
+ 33786 4d64 E061 .sleb128 -3872
+ 33787 4d66 33 .uleb128 0x33
+ 33788 4d67 00000000 .quad .LBB1233
+ 33788 00000000
+ 33789 4d6f 00000000 .quad .LBE1233
+ 33789 00000000
+ 33790 4d77 34 .uleb128 0x34
+ 33791 4d78 EC0E0000 .long 0xeec
+ 33792 4d7c 03 .byte 0x3
+ 33793 4d7d 91 .byte 0x91
+ 33794 4d7e 8050 .sleb128 -6144
+ 33795 4d80 00 .byte 0x0
+ 33796 4d81 00 .byte 0x0
+ 33797 4d82 31 .uleb128 0x31
+ 33798 4d83 CE0E0000 .long 0xece
+ 33799 4d87 00000000 .quad .LBB1234
+ 33799 00000000
+ 33800 4d8f 00000000 .quad .LBE1234
+ 33800 00000000
+ 33801 4d97 02 .byte 0x2
+ 33802 4d98 2006 .value 0x620
+ 33803 4d9a C34D0000 .long 0x4dc3
+ 33804 4d9e 32 .uleb128 0x32
+ 33805 4d9f E00E0000 .long 0xee0
+ 33806 4da3 03 .byte 0x3
+ 33807 4da4 91 .byte 0x91
+ 33808 4da5 F061 .sleb128 -3856
+ 33809 4da7 33 .uleb128 0x33
+ 33810 4da8 00000000 .quad .LBB1235
+ 33810 00000000
+ 33811 4db0 00000000 .quad .LBE1235
+ 33811 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 927
+
+
+ 33812 4db8 34 .uleb128 0x34
+ 33813 4db9 EC0E0000 .long 0xeec
+ 33814 4dbd 03 .byte 0x3
+ 33815 4dbe 91 .byte 0x91
+ 33816 4dbf 9050 .sleb128 -6128
+ 33817 4dc1 00 .byte 0x0
+ 33818 4dc2 00 .byte 0x0
+ 33819 4dc3 35 .uleb128 0x35
+ 33820 4dc4 CE0E0000 .long 0xece
+ 33821 4dc8 00000000 .quad .LBB1236
+ 33821 00000000
+ 33822 4dd0 00000000 .quad .LBE1236
+ 33822 00000000
+ 33823 4dd8 02 .byte 0x2
+ 33824 4dd9 2106 .value 0x621
+ 33825 4ddb 32 .uleb128 0x32
+ 33826 4ddc E00E0000 .long 0xee0
+ 33827 4de0 03 .byte 0x3
+ 33828 4de1 91 .byte 0x91
+ 33829 4de2 8062 .sleb128 -3840
+ 33830 4de4 33 .uleb128 0x33
+ 33831 4de5 00000000 .quad .LBB1237
+ 33831 00000000
+ 33832 4ded 00000000 .quad .LBE1237
+ 33832 00000000
+ 33833 4df5 34 .uleb128 0x34
+ 33834 4df6 EC0E0000 .long 0xeec
+ 33835 4dfa 03 .byte 0x3
+ 33836 4dfb 91 .byte 0x91
+ 33837 4dfc A050 .sleb128 -6112
+ 33838 4dfe 00 .byte 0x0
+ 33839 4dff 00 .byte 0x0
+ 33840 4e00 00 .byte 0x0
+ 33841 4e01 00 .byte 0x0
+ 33842 4e02 31 .uleb128 0x31
+ 33843 4e03 780E0000 .long 0xe78
+ 33844 4e07 00000000 .quad .LBB1238
+ 33844 00000000
+ 33845 4e0f 00000000 .quad .LBE1238
+ 33845 00000000
+ 33846 4e17 02 .byte 0x2
+ 33847 4e18 0107 .value 0x701
+ 33848 4e1a 434E0000 .long 0x4e43
+ 33849 4e1e 32 .uleb128 0x32
+ 33850 4e1f 8A0E0000 .long 0xe8a
+ 33851 4e23 03 .byte 0x3
+ 33852 4e24 91 .byte 0x91
+ 33853 4e25 9062 .sleb128 -3824
+ 33854 4e27 33 .uleb128 0x33
+ 33855 4e28 00000000 .quad .LBB1239
+ 33855 00000000
+ 33856 4e30 00000000 .quad .LBE1239
+ 33856 00000000
+ 33857 4e38 34 .uleb128 0x34
+ 33858 4e39 960E0000 .long 0xe96
+ 33859 4e3d 03 .byte 0x3
+ 33860 4e3e 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 928
+
+
+ 33861 4e3f B050 .sleb128 -6096
+ 33862 4e41 00 .byte 0x0
+ 33863 4e42 00 .byte 0x0
+ 33864 4e43 31 .uleb128 0x31
+ 33865 4e44 63490000 .long 0x4963
+ 33866 4e48 00000000 .quad .LBB1240
+ 33866 00000000
+ 33867 4e50 00000000 .quad .LBE1240
+ 33867 00000000
+ 33868 4e58 02 .byte 0x2
+ 33869 4e59 0307 .value 0x703
+ 33870 4e5b 964E0000 .long 0x4e96
+ 33871 4e5f 32 .uleb128 0x32
+ 33872 4e60 7F490000 .long 0x497f
+ 33873 4e64 03 .byte 0x3
+ 33874 4e65 91 .byte 0x91
+ 33875 4e66 A062 .sleb128 -3808
+ 33876 4e68 32 .uleb128 0x32
+ 33877 4e69 75490000 .long 0x4975
+ 33878 4e6d 03 .byte 0x3
+ 33879 4e6e 91 .byte 0x91
+ 33880 4e6f B062 .sleb128 -3792
+ 33881 4e71 33 .uleb128 0x33
+ 33882 4e72 00000000 .quad .LBB1241
+ 33882 00000000
+ 33883 4e7a 00000000 .quad .LBE1241
+ 33883 00000000
+ 33884 4e82 34 .uleb128 0x34
+ 33885 4e83 89490000 .long 0x4989
+ 33886 4e87 03 .byte 0x3
+ 33887 4e88 91 .byte 0x91
+ 33888 4e89 D050 .sleb128 -6064
+ 33889 4e8b 34 .uleb128 0x34
+ 33890 4e8c 94490000 .long 0x4994
+ 33891 4e90 03 .byte 0x3
+ 33892 4e91 91 .byte 0x91
+ 33893 4e92 C050 .sleb128 -6080
+ 33894 4e94 00 .byte 0x0
+ 33895 4e95 00 .byte 0x0
+ 33896 4e96 31 .uleb128 0x31
+ 33897 4e97 A0490000 .long 0x49a0
+ 33898 4e9b 00000000 .quad .LBB1242
+ 33898 00000000
+ 33899 4ea3 00000000 .quad .LBE1242
+ 33899 00000000
+ 33900 4eab 02 .byte 0x2
+ 33901 4eac 0607 .value 0x706
+ 33902 4eae E94E0000 .long 0x4ee9
+ 33903 4eb2 32 .uleb128 0x32
+ 33904 4eb3 BC490000 .long 0x49bc
+ 33905 4eb7 03 .byte 0x3
+ 33906 4eb8 91 .byte 0x91
+ 33907 4eb9 C062 .sleb128 -3776
+ 33908 4ebb 32 .uleb128 0x32
+ 33909 4ebc B2490000 .long 0x49b2
+ 33910 4ec0 03 .byte 0x3
+ 33911 4ec1 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 929
+
+
+ 33912 4ec2 D062 .sleb128 -3760
+ 33913 4ec4 33 .uleb128 0x33
+ 33914 4ec5 00000000 .quad .LBB1243
+ 33914 00000000
+ 33915 4ecd 00000000 .quad .LBE1243
+ 33915 00000000
+ 33916 4ed5 34 .uleb128 0x34
+ 33917 4ed6 C6490000 .long 0x49c6
+ 33918 4eda 03 .byte 0x3
+ 33919 4edb 91 .byte 0x91
+ 33920 4edc F050 .sleb128 -6032
+ 33921 4ede 34 .uleb128 0x34
+ 33922 4edf D1490000 .long 0x49d1
+ 33923 4ee3 03 .byte 0x3
+ 33924 4ee4 91 .byte 0x91
+ 33925 4ee5 E050 .sleb128 -6048
+ 33926 4ee7 00 .byte 0x0
+ 33927 4ee8 00 .byte 0x0
+ 33928 4ee9 31 .uleb128 0x31
+ 33929 4eea A30E0000 .long 0xea3
+ 33930 4eee 00000000 .quad .LBB1244
+ 33930 00000000
+ 33931 4ef6 00000000 .quad .LBE1244
+ 33931 00000000
+ 33932 4efe 02 .byte 0x2
+ 33933 4eff 0A07 .value 0x70a
+ 33934 4f01 E94F0000 .long 0x4fe9
+ 33935 4f05 32 .uleb128 0x32
+ 33936 4f06 B50E0000 .long 0xeb5
+ 33937 4f0a 03 .byte 0x3
+ 33938 4f0b 91 .byte 0x91
+ 33939 4f0c E062 .sleb128 -3744
+ 33940 4f0e 33 .uleb128 0x33
+ 33941 4f0f 00000000 .quad .LBB1245
+ 33941 00000000
+ 33942 4f17 00000000 .quad .LBE1245
+ 33942 00000000
+ 33943 4f1f 34 .uleb128 0x34
+ 33944 4f20 C10E0000 .long 0xec1
+ 33945 4f24 03 .byte 0x3
+ 33946 4f25 76 .byte 0x76
+ 33947 4f26 F04B .sleb128 -6672
+ 33948 4f28 31 .uleb128 0x31
+ 33949 4f29 CE0E0000 .long 0xece
+ 33950 4f2d 00000000 .quad .LBB1246
+ 33950 00000000
+ 33951 4f35 00000000 .quad .LBE1246
+ 33951 00000000
+ 33952 4f3d 02 .byte 0x2
+ 33953 4f3e 1F06 .value 0x61f
+ 33954 4f40 694F0000 .long 0x4f69
+ 33955 4f44 32 .uleb128 0x32
+ 33956 4f45 E00E0000 .long 0xee0
+ 33957 4f49 03 .byte 0x3
+ 33958 4f4a 91 .byte 0x91
+ 33959 4f4b F062 .sleb128 -3728
+ 33960 4f4d 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 930
+
+
+ 33961 4f4e 00000000 .quad .LBB1247
+ 33961 00000000
+ 33962 4f56 00000000 .quad .LBE1247
+ 33962 00000000
+ 33963 4f5e 34 .uleb128 0x34
+ 33964 4f5f EC0E0000 .long 0xeec
+ 33965 4f63 03 .byte 0x3
+ 33966 4f64 91 .byte 0x91
+ 33967 4f65 8051 .sleb128 -6016
+ 33968 4f67 00 .byte 0x0
+ 33969 4f68 00 .byte 0x0
+ 33970 4f69 31 .uleb128 0x31
+ 33971 4f6a CE0E0000 .long 0xece
+ 33972 4f6e 00000000 .quad .LBB1248
+ 33972 00000000
+ 33973 4f76 00000000 .quad .LBE1248
+ 33973 00000000
+ 33974 4f7e 02 .byte 0x2
+ 33975 4f7f 2006 .value 0x620
+ 33976 4f81 AA4F0000 .long 0x4faa
+ 33977 4f85 32 .uleb128 0x32
+ 33978 4f86 E00E0000 .long 0xee0
+ 33979 4f8a 03 .byte 0x3
+ 33980 4f8b 91 .byte 0x91
+ 33981 4f8c 8063 .sleb128 -3712
+ 33982 4f8e 33 .uleb128 0x33
+ 33983 4f8f 00000000 .quad .LBB1249
+ 33983 00000000
+ 33984 4f97 00000000 .quad .LBE1249
+ 33984 00000000
+ 33985 4f9f 34 .uleb128 0x34
+ 33986 4fa0 EC0E0000 .long 0xeec
+ 33987 4fa4 03 .byte 0x3
+ 33988 4fa5 91 .byte 0x91
+ 33989 4fa6 9051 .sleb128 -6000
+ 33990 4fa8 00 .byte 0x0
+ 33991 4fa9 00 .byte 0x0
+ 33992 4faa 35 .uleb128 0x35
+ 33993 4fab CE0E0000 .long 0xece
+ 33994 4faf 00000000 .quad .LBB1250
+ 33994 00000000
+ 33995 4fb7 00000000 .quad .LBE1250
+ 33995 00000000
+ 33996 4fbf 02 .byte 0x2
+ 33997 4fc0 2106 .value 0x621
+ 33998 4fc2 32 .uleb128 0x32
+ 33999 4fc3 E00E0000 .long 0xee0
+ 34000 4fc7 03 .byte 0x3
+ 34001 4fc8 91 .byte 0x91
+ 34002 4fc9 9063 .sleb128 -3696
+ 34003 4fcb 33 .uleb128 0x33
+ 34004 4fcc 00000000 .quad .LBB1251
+ 34004 00000000
+ 34005 4fd4 00000000 .quad .LBE1251
+ 34005 00000000
+ 34006 4fdc 34 .uleb128 0x34
+ 34007 4fdd EC0E0000 .long 0xeec
+
GAS LISTING /tmp/ccMa7HLZ.s page 931
+
+
+ 34008 4fe1 03 .byte 0x3
+ 34009 4fe2 91 .byte 0x91
+ 34010 4fe3 A051 .sleb128 -5984
+ 34011 4fe5 00 .byte 0x0
+ 34012 4fe6 00 .byte 0x0
+ 34013 4fe7 00 .byte 0x0
+ 34014 4fe8 00 .byte 0x0
+ 34015 4fe9 31 .uleb128 0x31
+ 34016 4fea A30E0000 .long 0xea3
+ 34017 4fee 00000000 .quad .LBB1252
+ 34017 00000000
+ 34018 4ff6 00000000 .quad .LBE1252
+ 34018 00000000
+ 34019 4ffe 02 .byte 0x2
+ 34020 4fff 0B07 .value 0x70b
+ 34021 5001 E9500000 .long 0x50e9
+ 34022 5005 32 .uleb128 0x32
+ 34023 5006 B50E0000 .long 0xeb5
+ 34024 500a 03 .byte 0x3
+ 34025 500b 91 .byte 0x91
+ 34026 500c A063 .sleb128 -3680
+ 34027 500e 33 .uleb128 0x33
+ 34028 500f 00000000 .quad .LBB1253
+ 34028 00000000
+ 34029 5017 00000000 .quad .LBE1253
+ 34029 00000000
+ 34030 501f 34 .uleb128 0x34
+ 34031 5020 C10E0000 .long 0xec1
+ 34032 5024 03 .byte 0x3
+ 34033 5025 76 .byte 0x76
+ 34034 5026 804C .sleb128 -6656
+ 34035 5028 31 .uleb128 0x31
+ 34036 5029 CE0E0000 .long 0xece
+ 34037 502d 00000000 .quad .LBB1254
+ 34037 00000000
+ 34038 5035 00000000 .quad .LBE1254
+ 34038 00000000
+ 34039 503d 02 .byte 0x2
+ 34040 503e 1F06 .value 0x61f
+ 34041 5040 69500000 .long 0x5069
+ 34042 5044 32 .uleb128 0x32
+ 34043 5045 E00E0000 .long 0xee0
+ 34044 5049 03 .byte 0x3
+ 34045 504a 91 .byte 0x91
+ 34046 504b B063 .sleb128 -3664
+ 34047 504d 33 .uleb128 0x33
+ 34048 504e 00000000 .quad .LBB1255
+ 34048 00000000
+ 34049 5056 00000000 .quad .LBE1255
+ 34049 00000000
+ 34050 505e 34 .uleb128 0x34
+ 34051 505f EC0E0000 .long 0xeec
+ 34052 5063 03 .byte 0x3
+ 34053 5064 91 .byte 0x91
+ 34054 5065 B051 .sleb128 -5968
+ 34055 5067 00 .byte 0x0
+ 34056 5068 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 932
+
+
+ 34057 5069 31 .uleb128 0x31
+ 34058 506a CE0E0000 .long 0xece
+ 34059 506e 00000000 .quad .LBB1256
+ 34059 00000000
+ 34060 5076 00000000 .quad .LBE1256
+ 34060 00000000
+ 34061 507e 02 .byte 0x2
+ 34062 507f 2006 .value 0x620
+ 34063 5081 AA500000 .long 0x50aa
+ 34064 5085 32 .uleb128 0x32
+ 34065 5086 E00E0000 .long 0xee0
+ 34066 508a 03 .byte 0x3
+ 34067 508b 91 .byte 0x91
+ 34068 508c C063 .sleb128 -3648
+ 34069 508e 33 .uleb128 0x33
+ 34070 508f 00000000 .quad .LBB1257
+ 34070 00000000
+ 34071 5097 00000000 .quad .LBE1257
+ 34071 00000000
+ 34072 509f 34 .uleb128 0x34
+ 34073 50a0 EC0E0000 .long 0xeec
+ 34074 50a4 03 .byte 0x3
+ 34075 50a5 91 .byte 0x91
+ 34076 50a6 C051 .sleb128 -5952
+ 34077 50a8 00 .byte 0x0
+ 34078 50a9 00 .byte 0x0
+ 34079 50aa 35 .uleb128 0x35
+ 34080 50ab CE0E0000 .long 0xece
+ 34081 50af 00000000 .quad .LBB1258
+ 34081 00000000
+ 34082 50b7 00000000 .quad .LBE1258
+ 34082 00000000
+ 34083 50bf 02 .byte 0x2
+ 34084 50c0 2106 .value 0x621
+ 34085 50c2 32 .uleb128 0x32
+ 34086 50c3 E00E0000 .long 0xee0
+ 34087 50c7 03 .byte 0x3
+ 34088 50c8 91 .byte 0x91
+ 34089 50c9 D063 .sleb128 -3632
+ 34090 50cb 33 .uleb128 0x33
+ 34091 50cc 00000000 .quad .LBB1259
+ 34091 00000000
+ 34092 50d4 00000000 .quad .LBE1259
+ 34092 00000000
+ 34093 50dc 34 .uleb128 0x34
+ 34094 50dd EC0E0000 .long 0xeec
+ 34095 50e1 03 .byte 0x3
+ 34096 50e2 91 .byte 0x91
+ 34097 50e3 D051 .sleb128 -5936
+ 34098 50e5 00 .byte 0x0
+ 34099 50e6 00 .byte 0x0
+ 34100 50e7 00 .byte 0x0
+ 34101 50e8 00 .byte 0x0
+ 34102 50e9 31 .uleb128 0x31
+ 34103 50ea D10B0000 .long 0xbd1
+ 34104 50ee 00000000 .quad .LBB1260
+ 34104 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 933
+
+
+ 34105 50f6 00000000 .quad .LBE1260
+ 34105 00000000
+ 34106 50fe 02 .byte 0x2
+ 34107 50ff 0C07 .value 0x70c
+ 34108 5101 8F550000 .long 0x558f
+ 34109 5105 32 .uleb128 0x32
+ 34110 5106 EF0B0000 .long 0xbef
+ 34111 510a 03 .byte 0x3
+ 34112 510b 91 .byte 0x91
+ 34113 510c EC63 .sleb128 -3604
+ 34114 510e 32 .uleb128 0x32
+ 34115 510f E30B0000 .long 0xbe3
+ 34116 5113 03 .byte 0x3
+ 34117 5114 91 .byte 0x91
+ 34118 5115 F063 .sleb128 -3600
+ 34119 5117 33 .uleb128 0x33
+ 34120 5118 00000000 .quad .LBB1261
+ 34120 00000000
+ 34121 5120 00000000 .quad .LBE1261
+ 34121 00000000
+ 34122 5128 34 .uleb128 0x34
+ 34123 5129 FB0B0000 .long 0xbfb
+ 34124 512d 03 .byte 0x3
+ 34125 512e 76 .byte 0x76
+ 34126 512f A04C .sleb128 -6624
+ 34127 5131 34 .uleb128 0x34
+ 34128 5132 070C0000 .long 0xc07
+ 34129 5136 03 .byte 0x3
+ 34130 5137 76 .byte 0x76
+ 34131 5138 904C .sleb128 -6640
+ 34132 513a 31 .uleb128 0x31
+ 34133 513b 500C0000 .long 0xc50
+ 34134 513f 00000000 .quad .LBB1262
+ 34134 00000000
+ 34135 5147 00000000 .quad .LBE1262
+ 34135 00000000
+ 34136 514f 02 .byte 0x2
+ 34137 5150 9106 .value 0x691
+ 34138 5152 8D510000 .long 0x518d
+ 34139 5156 32 .uleb128 0x32
+ 34140 5157 7A0C0000 .long 0xc7a
+ 34141 515b 03 .byte 0x3
+ 34142 515c 91 .byte 0x91
+ 34143 515d 8864 .sleb128 -3576
+ 34144 515f 32 .uleb128 0x32
+ 34145 5160 6E0C0000 .long 0xc6e
+ 34146 5164 03 .byte 0x3
+ 34147 5165 91 .byte 0x91
+ 34148 5166 8C64 .sleb128 -3572
+ 34149 5168 32 .uleb128 0x32
+ 34150 5169 620C0000 .long 0xc62
+ 34151 516d 03 .byte 0x3
+ 34152 516e 91 .byte 0x91
+ 34153 516f 9064 .sleb128 -3568
+ 34154 5171 33 .uleb128 0x33
+ 34155 5172 00000000 .quad .LBB1263
+ 34155 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 934
+
+
+ 34156 517a 00000000 .quad .LBE1263
+ 34156 00000000
+ 34157 5182 34 .uleb128 0x34
+ 34158 5183 860C0000 .long 0xc86
+ 34159 5187 03 .byte 0x3
+ 34160 5188 91 .byte 0x91
+ 34161 5189 A052 .sleb128 -5856
+ 34162 518b 00 .byte 0x0
+ 34163 518c 00 .byte 0x0
+ 34164 518d 31 .uleb128 0x31
+ 34165 518e 910C0000 .long 0xc91
+ 34166 5192 00000000 .quad .LBB1264
+ 34166 00000000
+ 34167 519a 00000000 .quad .LBE1264
+ 34167 00000000
+ 34168 51a2 02 .byte 0x2
+ 34169 51a3 9206 .value 0x692
+ 34170 51a5 FD530000 .long 0x53fd
+ 34171 51a9 32 .uleb128 0x32
+ 34172 51aa A30C0000 .long 0xca3
+ 34173 51ae 03 .byte 0x3
+ 34174 51af 91 .byte 0x91
+ 34175 51b0 A064 .sleb128 -3552
+ 34176 51b2 35 .uleb128 0x35
+ 34177 51b3 B00C0000 .long 0xcb0
+ 34178 51b7 00000000 .quad .LBB1266
+ 34178 00000000
+ 34179 51bf 00000000 .quad .LBE1266
+ 34179 00000000
+ 34180 51c7 02 .byte 0x2
+ 34181 51c8 7D03 .value 0x37d
+ 34182 51ca 32 .uleb128 0x32
+ 34183 51cb CE0C0000 .long 0xcce
+ 34184 51cf 03 .byte 0x3
+ 34185 51d0 91 .byte 0x91
+ 34186 51d1 B864 .sleb128 -3528
+ 34187 51d3 32 .uleb128 0x32
+ 34188 51d4 C20C0000 .long 0xcc2
+ 34189 51d8 03 .byte 0x3
+ 34190 51d9 91 .byte 0x91
+ 34191 51da C064 .sleb128 -3520
+ 34192 51dc 33 .uleb128 0x33
+ 34193 51dd 00000000 .quad .LBB1267
+ 34193 00000000
+ 34194 51e5 00000000 .quad .LBE1267
+ 34194 00000000
+ 34195 51ed 34 .uleb128 0x34
+ 34196 51ee DA0C0000 .long 0xcda
+ 34197 51f2 03 .byte 0x3
+ 34198 51f3 91 .byte 0x91
+ 34199 51f4 9065 .sleb128 -3440
+ 34200 51f6 34 .uleb128 0x34
+ 34201 51f7 E50C0000 .long 0xce5
+ 34202 51fb 03 .byte 0x3
+ 34203 51fc 91 .byte 0x91
+ 34204 51fd 8065 .sleb128 -3456
+ 34205 51ff 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 935
+
+
+ 34206 5200 F00C0000 .long 0xcf0
+ 34207 5204 03 .byte 0x3
+ 34208 5205 91 .byte 0x91
+ 34209 5206 F064 .sleb128 -3472
+ 34210 5208 34 .uleb128 0x34
+ 34211 5209 FC0C0000 .long 0xcfc
+ 34212 520d 03 .byte 0x3
+ 34213 520e 91 .byte 0x91
+ 34214 520f E064 .sleb128 -3488
+ 34215 5211 34 .uleb128 0x34
+ 34216 5212 080D0000 .long 0xd08
+ 34217 5216 03 .byte 0x3
+ 34218 5217 91 .byte 0x91
+ 34219 5218 DC64 .sleb128 -3492
+ 34220 521a 31 .uleb128 0x31
+ 34221 521b 1F0D0000 .long 0xd1f
+ 34222 521f 00000000 .quad .LBB1268
+ 34222 00000000
+ 34223 5227 00000000 .quad .LBE1268
+ 34223 00000000
+ 34224 522f 02 .byte 0x2
+ 34225 5230 5603 .value 0x356
+ 34226 5232 49520000 .long 0x5249
+ 34227 5236 32 .uleb128 0x32
+ 34228 5237 3A0D0000 .long 0xd3a
+ 34229 523b 03 .byte 0x3
+ 34230 523c 91 .byte 0x91
+ 34231 523d A065 .sleb128 -3424
+ 34232 523f 32 .uleb128 0x32
+ 34233 5240 300D0000 .long 0xd30
+ 34234 5244 03 .byte 0x3
+ 34235 5245 91 .byte 0x91
+ 34236 5246 B065 .sleb128 -3408
+ 34237 5248 00 .byte 0x0
+ 34238 5249 31 .uleb128 0x31
+ 34239 524a 450D0000 .long 0xd45
+ 34240 524e 00000000 .quad .LBB1270
+ 34240 00000000
+ 34241 5256 00000000 .quad .LBE1270
+ 34241 00000000
+ 34242 525e 02 .byte 0x2
+ 34243 525f 5E03 .value 0x35e
+ 34244 5261 78520000 .long 0x5278
+ 34245 5265 32 .uleb128 0x32
+ 34246 5266 620D0000 .long 0xd62
+ 34247 526a 03 .byte 0x3
+ 34248 526b 91 .byte 0x91
+ 34249 526c C065 .sleb128 -3392
+ 34250 526e 32 .uleb128 0x32
+ 34251 526f 570D0000 .long 0xd57
+ 34252 5273 03 .byte 0x3
+ 34253 5274 91 .byte 0x91
+ 34254 5275 D065 .sleb128 -3376
+ 34255 5277 00 .byte 0x0
+ 34256 5278 31 .uleb128 0x31
+ 34257 5279 6E0D0000 .long 0xd6e
+ 34258 527d 00000000 .quad .LBB1272
+
GAS LISTING /tmp/ccMa7HLZ.s page 936
+
+
+ 34258 00000000
+ 34259 5285 00000000 .quad .LBE1272
+ 34259 00000000
+ 34260 528d 02 .byte 0x2
+ 34261 528e 6403 .value 0x364
+ 34262 5290 DD520000 .long 0x52dd
+ 34263 5294 32 .uleb128 0x32
+ 34264 5295 8C0D0000 .long 0xd8c
+ 34265 5299 03 .byte 0x3
+ 34266 529a 91 .byte 0x91
+ 34267 529b E065 .sleb128 -3360
+ 34268 529d 32 .uleb128 0x32
+ 34269 529e 800D0000 .long 0xd80
+ 34270 52a2 03 .byte 0x3
+ 34271 52a3 91 .byte 0x91
+ 34272 52a4 F065 .sleb128 -3344
+ 34273 52a6 33 .uleb128 0x33
+ 34274 52a7 00000000 .quad .LBB1273
+ 34274 00000000
+ 34275 52af 00000000 .quad .LBE1273
+ 34275 00000000
+ 34276 52b7 34 .uleb128 0x34
+ 34277 52b8 980D0000 .long 0xd98
+ 34278 52bc 03 .byte 0x3
+ 34279 52bd 91 .byte 0x91
+ 34280 52be D052 .sleb128 -5808
+ 34281 52c0 34 .uleb128 0x34
+ 34282 52c1 A40D0000 .long 0xda4
+ 34283 52c5 03 .byte 0x3
+ 34284 52c6 91 .byte 0x91
+ 34285 52c7 C052 .sleb128 -5824
+ 34286 52c9 34 .uleb128 0x34
+ 34287 52ca AF0D0000 .long 0xdaf
+ 34288 52ce 03 .byte 0x3
+ 34289 52cf 91 .byte 0x91
+ 34290 52d0 B052 .sleb128 -5840
+ 34291 52d2 34 .uleb128 0x34
+ 34292 52d3 BB0D0000 .long 0xdbb
+ 34293 52d7 03 .byte 0x3
+ 34294 52d8 91 .byte 0x91
+ 34295 52d9 8C66 .sleb128 -3316
+ 34296 52db 00 .byte 0x0
+ 34297 52dc 00 .byte 0x0
+ 34298 52dd 31 .uleb128 0x31
+ 34299 52de C70D0000 .long 0xdc7
+ 34300 52e2 00000000 .quad .LBB1274
+ 34300 00000000
+ 34301 52ea 00000000 .quad .LBE1274
+ 34301 00000000
+ 34302 52f2 02 .byte 0x2
+ 34303 52f3 6603 .value 0x366
+ 34304 52f5 0C530000 .long 0x530c
+ 34305 52f9 32 .uleb128 0x32
+ 34306 52fa E20D0000 .long 0xde2
+ 34307 52fe 03 .byte 0x3
+ 34308 52ff 91 .byte 0x91
+ 34309 5300 9066 .sleb128 -3312
+
GAS LISTING /tmp/ccMa7HLZ.s page 937
+
+
+ 34310 5302 32 .uleb128 0x32
+ 34311 5303 D80D0000 .long 0xdd8
+ 34312 5307 03 .byte 0x3
+ 34313 5308 91 .byte 0x91
+ 34314 5309 A066 .sleb128 -3296
+ 34315 530b 00 .byte 0x0
+ 34316 530c 31 .uleb128 0x31
+ 34317 530d 6E0D0000 .long 0xd6e
+ 34318 5311 00000000 .quad .LBB1276
+ 34318 00000000
+ 34319 5319 00000000 .quad .LBE1276
+ 34319 00000000
+ 34320 5321 02 .byte 0x2
+ 34321 5322 6803 .value 0x368
+ 34322 5324 71530000 .long 0x5371
+ 34323 5328 32 .uleb128 0x32
+ 34324 5329 8C0D0000 .long 0xd8c
+ 34325 532d 03 .byte 0x3
+ 34326 532e 91 .byte 0x91
+ 34327 532f B066 .sleb128 -3280
+ 34328 5331 32 .uleb128 0x32
+ 34329 5332 800D0000 .long 0xd80
+ 34330 5336 03 .byte 0x3
+ 34331 5337 91 .byte 0x91
+ 34332 5338 C066 .sleb128 -3264
+ 34333 533a 33 .uleb128 0x33
+ 34334 533b 00000000 .quad .LBB1277
+ 34334 00000000
+ 34335 5343 00000000 .quad .LBE1277
+ 34335 00000000
+ 34336 534b 34 .uleb128 0x34
+ 34337 534c 980D0000 .long 0xd98
+ 34338 5350 03 .byte 0x3
+ 34339 5351 91 .byte 0x91
+ 34340 5352 8053 .sleb128 -5760
+ 34341 5354 34 .uleb128 0x34
+ 34342 5355 A40D0000 .long 0xda4
+ 34343 5359 03 .byte 0x3
+ 34344 535a 91 .byte 0x91
+ 34345 535b F052 .sleb128 -5776
+ 34346 535d 34 .uleb128 0x34
+ 34347 535e AF0D0000 .long 0xdaf
+ 34348 5362 03 .byte 0x3
+ 34349 5363 91 .byte 0x91
+ 34350 5364 E052 .sleb128 -5792
+ 34351 5366 34 .uleb128 0x34
+ 34352 5367 BB0D0000 .long 0xdbb
+ 34353 536b 03 .byte 0x3
+ 34354 536c 91 .byte 0x91
+ 34355 536d DC66 .sleb128 -3236
+ 34356 536f 00 .byte 0x0
+ 34357 5370 00 .byte 0x0
+ 34358 5371 31 .uleb128 0x31
+ 34359 5372 C70D0000 .long 0xdc7
+ 34360 5376 00000000 .quad .LBB1278
+ 34360 00000000
+ 34361 537e 00000000 .quad .LBE1278
+
GAS LISTING /tmp/ccMa7HLZ.s page 938
+
+
+ 34361 00000000
+ 34362 5386 02 .byte 0x2
+ 34363 5387 6A03 .value 0x36a
+ 34364 5389 A0530000 .long 0x53a0
+ 34365 538d 32 .uleb128 0x32
+ 34366 538e E20D0000 .long 0xde2
+ 34367 5392 03 .byte 0x3
+ 34368 5393 91 .byte 0x91
+ 34369 5394 E066 .sleb128 -3232
+ 34370 5396 32 .uleb128 0x32
+ 34371 5397 D80D0000 .long 0xdd8
+ 34372 539b 03 .byte 0x3
+ 34373 539c 91 .byte 0x91
+ 34374 539d F066 .sleb128 -3216
+ 34375 539f 00 .byte 0x0
+ 34376 53a0 31 .uleb128 0x31
+ 34377 53a1 ED0D0000 .long 0xded
+ 34378 53a5 00000000 .quad .LBB1280
+ 34378 00000000
+ 34379 53ad 00000000 .quad .LBE1280
+ 34379 00000000
+ 34380 53b5 02 .byte 0x2
+ 34381 53b6 6C03 .value 0x36c
+ 34382 53b8 CF530000 .long 0x53cf
+ 34383 53bc 32 .uleb128 0x32
+ 34384 53bd 0A0E0000 .long 0xe0a
+ 34385 53c1 03 .byte 0x3
+ 34386 53c2 91 .byte 0x91
+ 34387 53c3 8067 .sleb128 -3200
+ 34388 53c5 32 .uleb128 0x32
+ 34389 53c6 FF0D0000 .long 0xdff
+ 34390 53ca 03 .byte 0x3
+ 34391 53cb 91 .byte 0x91
+ 34392 53cc 9067 .sleb128 -3184
+ 34393 53ce 00 .byte 0x0
+ 34394 53cf 35 .uleb128 0x35
+ 34395 53d0 1F0D0000 .long 0xd1f
+ 34396 53d4 00000000 .quad .LBB1282
+ 34396 00000000
+ 34397 53dc 00000000 .quad .LBE1282
+ 34397 00000000
+ 34398 53e4 02 .byte 0x2
+ 34399 53e5 6E03 .value 0x36e
+ 34400 53e7 32 .uleb128 0x32
+ 34401 53e8 3A0D0000 .long 0xd3a
+ 34402 53ec 03 .byte 0x3
+ 34403 53ed 91 .byte 0x91
+ 34404 53ee A067 .sleb128 -3168
+ 34405 53f0 32 .uleb128 0x32
+ 34406 53f1 300D0000 .long 0xd30
+ 34407 53f5 03 .byte 0x3
+ 34408 53f6 91 .byte 0x91
+ 34409 53f7 B067 .sleb128 -3152
+ 34410 53f9 00 .byte 0x0
+ 34411 53fa 00 .byte 0x0
+ 34412 53fb 00 .byte 0x0
+ 34413 53fc 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 939
+
+
+ 34414 53fd 36 .uleb128 0x36
+ 34415 53fe 00000000 .quad .LBB1284
+ 34415 00000000
+ 34416 5406 00000000 .quad .LBE1284
+ 34416 00000000
+ 34417 540e 1C540000 .long 0x541c
+ 34418 5412 34 .uleb128 0x34
+ 34419 5413 180C0000 .long 0xc18
+ 34420 5417 03 .byte 0x3
+ 34421 5418 91 .byte 0x91
+ 34422 5419 9052 .sleb128 -5872
+ 34423 541b 00 .byte 0x0
+ 34424 541c 31 .uleb128 0x31
+ 34425 541d 160E0000 .long 0xe16
+ 34426 5421 00000000 .quad .LBB1285
+ 34426 00000000
+ 34427 5429 00000000 .quad .LBE1285
+ 34427 00000000
+ 34428 5431 02 .byte 0x2
+ 34429 5432 9406 .value 0x694
+ 34430 5434 C4540000 .long 0x54c4
+ 34431 5438 32 .uleb128 0x32
+ 34432 5439 280E0000 .long 0xe28
+ 34433 543d 03 .byte 0x3
+ 34434 543e 91 .byte 0x91
+ 34435 543f C067 .sleb128 -3136
+ 34436 5441 33 .uleb128 0x33
+ 34437 5442 00000000 .quad .LBB1286
+ 34437 00000000
+ 34438 544a 00000000 .quad .LBE1286
+ 34438 00000000
+ 34439 5452 34 .uleb128 0x34
+ 34440 5453 340E0000 .long 0xe34
+ 34441 5457 09 .byte 0x9
+ 34442 5458 03 .byte 0x3
+ 34443 5459 00000000 .quad ShiftRowTable.6768
+ 34443 00000000
+ 34444 5461 35 .uleb128 0x35
+ 34445 5462 6E0D0000 .long 0xd6e
+ 34446 5466 00000000 .quad .LBB1287
+ 34446 00000000
+ 34447 546e 00000000 .quad .LBE1287
+ 34447 00000000
+ 34448 5476 02 .byte 0x2
+ 34449 5477 9B02 .value 0x29b
+ 34450 5479 32 .uleb128 0x32
+ 34451 547a 8C0D0000 .long 0xd8c
+ 34452 547e 03 .byte 0x3
+ 34453 547f 91 .byte 0x91
+ 34454 5480 D067 .sleb128 -3120
+ 34455 5482 32 .uleb128 0x32
+ 34456 5483 800D0000 .long 0xd80
+ 34457 5487 03 .byte 0x3
+ 34458 5488 91 .byte 0x91
+ 34459 5489 E067 .sleb128 -3104
+ 34460 548b 33 .uleb128 0x33
+ 34461 548c 00000000 .quad .LBB1288
+
GAS LISTING /tmp/ccMa7HLZ.s page 940
+
+
+ 34461 00000000
+ 34462 5494 00000000 .quad .LBE1288
+ 34462 00000000
+ 34463 549c 34 .uleb128 0x34
+ 34464 549d 980D0000 .long 0xd98
+ 34465 54a1 03 .byte 0x3
+ 34466 54a2 91 .byte 0x91
+ 34467 54a3 B053 .sleb128 -5712
+ 34468 54a5 34 .uleb128 0x34
+ 34469 54a6 A40D0000 .long 0xda4
+ 34470 54aa 03 .byte 0x3
+ 34471 54ab 91 .byte 0x91
+ 34472 54ac A053 .sleb128 -5728
+ 34473 54ae 34 .uleb128 0x34
+ 34474 54af AF0D0000 .long 0xdaf
+ 34475 54b3 03 .byte 0x3
+ 34476 54b4 91 .byte 0x91
+ 34477 54b5 9053 .sleb128 -5744
+ 34478 54b7 34 .uleb128 0x34
+ 34479 54b8 BB0D0000 .long 0xdbb
+ 34480 54bc 03 .byte 0x3
+ 34481 54bd 91 .byte 0x91
+ 34482 54be FC67 .sleb128 -3076
+ 34483 54c0 00 .byte 0x0
+ 34484 54c1 00 .byte 0x0
+ 34485 54c2 00 .byte 0x0
+ 34486 54c3 00 .byte 0x0
+ 34487 54c4 36 .uleb128 0x36
+ 34488 54c5 00000000 .quad .LBB1289
+ 34488 00000000
+ 34489 54cd 00000000 .quad .LBE1289
+ 34489 00000000
+ 34490 54d5 E3540000 .long 0x54e3
+ 34491 54d9 34 .uleb128 0x34
+ 34492 54da 280C0000 .long 0xc28
+ 34493 54de 03 .byte 0x3
+ 34494 54df 91 .byte 0x91
+ 34495 54e0 8052 .sleb128 -5888
+ 34496 54e2 00 .byte 0x0
+ 34497 54e3 31 .uleb128 0x31
+ 34498 54e4 520E0000 .long 0xe52
+ 34499 54e8 00000000 .quad .LBB1290
+ 34499 00000000
+ 34500 54f0 00000000 .quad .LBE1290
+ 34500 00000000
+ 34501 54f8 02 .byte 0x2
+ 34502 54f9 9606 .value 0x696
+ 34503 54fb 12550000 .long 0x5512
+ 34504 54ff 32 .uleb128 0x32
+ 34505 5500 6D0E0000 .long 0xe6d
+ 34506 5504 03 .byte 0x3
+ 34507 5505 91 .byte 0x91
+ 34508 5506 8068 .sleb128 -3072
+ 34509 5508 32 .uleb128 0x32
+ 34510 5509 630E0000 .long 0xe63
+ 34511 550d 03 .byte 0x3
+ 34512 550e 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 941
+
+
+ 34513 550f 9068 .sleb128 -3056
+ 34514 5511 00 .byte 0x0
+ 34515 5512 36 .uleb128 0x36
+ 34516 5513 00000000 .quad .LBB1292
+ 34516 00000000
+ 34517 551b 00000000 .quad .LBE1292
+ 34517 00000000
+ 34518 5523 31550000 .long 0x5531
+ 34519 5527 34 .uleb128 0x34
+ 34520 5528 380C0000 .long 0xc38
+ 34521 552c 03 .byte 0x3
+ 34522 552d 91 .byte 0x91
+ 34523 552e F051 .sleb128 -5904
+ 34524 5530 00 .byte 0x0
+ 34525 5531 31 .uleb128 0x31
+ 34526 5532 780E0000 .long 0xe78
+ 34527 5536 00000000 .quad .LBB1293
+ 34527 00000000
+ 34528 553e 00000000 .quad .LBE1293
+ 34528 00000000
+ 34529 5546 02 .byte 0x2
+ 34530 5547 9806 .value 0x698
+ 34531 5549 72550000 .long 0x5572
+ 34532 554d 32 .uleb128 0x32
+ 34533 554e 8A0E0000 .long 0xe8a
+ 34534 5552 03 .byte 0x3
+ 34535 5553 91 .byte 0x91
+ 34536 5554 A068 .sleb128 -3040
+ 34537 5556 33 .uleb128 0x33
+ 34538 5557 00000000 .quad .LBB1294
+ 34538 00000000
+ 34539 555f 00000000 .quad .LBE1294
+ 34539 00000000
+ 34540 5567 34 .uleb128 0x34
+ 34541 5568 960E0000 .long 0xe96
+ 34542 556c 03 .byte 0x3
+ 34543 556d 91 .byte 0x91
+ 34544 556e C053 .sleb128 -5696
+ 34545 5570 00 .byte 0x0
+ 34546 5571 00 .byte 0x0
+ 34547 5572 33 .uleb128 0x33
+ 34548 5573 00000000 .quad .LBB1295
+ 34548 00000000
+ 34549 557b 00000000 .quad .LBE1295
+ 34549 00000000
+ 34550 5583 34 .uleb128 0x34
+ 34551 5584 440C0000 .long 0xc44
+ 34552 5588 03 .byte 0x3
+ 34553 5589 91 .byte 0x91
+ 34554 558a E051 .sleb128 -5920
+ 34555 558c 00 .byte 0x0
+ 34556 558d 00 .byte 0x0
+ 34557 558e 00 .byte 0x0
+ 34558 558f 31 .uleb128 0x31
+ 34559 5590 780E0000 .long 0xe78
+ 34560 5594 00000000 .quad .LBB1296
+ 34560 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 942
+
+
+ 34561 559c 00000000 .quad .LBE1296
+ 34561 00000000
+ 34562 55a4 02 .byte 0x2
+ 34563 55a5 1007 .value 0x710
+ 34564 55a7 D0550000 .long 0x55d0
+ 34565 55ab 32 .uleb128 0x32
+ 34566 55ac 8A0E0000 .long 0xe8a
+ 34567 55b0 03 .byte 0x3
+ 34568 55b1 91 .byte 0x91
+ 34569 55b2 B068 .sleb128 -3024
+ 34570 55b4 33 .uleb128 0x33
+ 34571 55b5 00000000 .quad .LBB1297
+ 34571 00000000
+ 34572 55bd 00000000 .quad .LBE1297
+ 34572 00000000
+ 34573 55c5 34 .uleb128 0x34
+ 34574 55c6 960E0000 .long 0xe96
+ 34575 55ca 03 .byte 0x3
+ 34576 55cb 91 .byte 0x91
+ 34577 55cc D053 .sleb128 -5680
+ 34578 55ce 00 .byte 0x0
+ 34579 55cf 00 .byte 0x0
+ 34580 55d0 31 .uleb128 0x31
+ 34581 55d1 C5480000 .long 0x48c5
+ 34582 55d5 00000000 .quad .LBB1298
+ 34582 00000000
+ 34583 55dd 00000000 .quad .LBE1298
+ 34583 00000000
+ 34584 55e5 02 .byte 0x2
+ 34585 55e6 1707 .value 0x717
+ 34586 55e8 98560000 .long 0x5698
+ 34587 55ec 32 .uleb128 0x32
+ 34588 55ed E3480000 .long 0x48e3
+ 34589 55f1 03 .byte 0x3
+ 34590 55f2 91 .byte 0x91
+ 34591 55f3 CC68 .sleb128 -2996
+ 34592 55f5 32 .uleb128 0x32
+ 34593 55f6 D7480000 .long 0x48d7
+ 34594 55fa 03 .byte 0x3
+ 34595 55fb 91 .byte 0x91
+ 34596 55fc D068 .sleb128 -2992
+ 34597 55fe 33 .uleb128 0x33
+ 34598 55ff 00000000 .quad .LBB1299
+ 34598 00000000
+ 34599 5607 00000000 .quad .LBE1299
+ 34599 00000000
+ 34600 560f 34 .uleb128 0x34
+ 34601 5610 EF480000 .long 0x48ef
+ 34602 5614 03 .byte 0x3
+ 34603 5615 91 .byte 0x91
+ 34604 5616 F053 .sleb128 -5648
+ 34605 5618 34 .uleb128 0x34
+ 34606 5619 F9480000 .long 0x48f9
+ 34607 561d 03 .byte 0x3
+ 34608 561e 91 .byte 0x91
+ 34609 561f F068 .sleb128 -2960
+ 34610 5621 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 943
+
+
+ 34611 5622 05490000 .long 0x4905
+ 34612 5626 03 .byte 0x3
+ 34613 5627 91 .byte 0x91
+ 34614 5628 EC68 .sleb128 -2964
+ 34615 562a 31 .uleb128 0x31
+ 34616 562b 12490000 .long 0x4912
+ 34617 562f 00000000 .quad .LBB1300
+ 34617 00000000
+ 34618 5637 00000000 .quad .LBE1300
+ 34618 00000000
+ 34619 563f 02 .byte 0x2
+ 34620 5640 5F06 .value 0x65f
+ 34621 5642 74560000 .long 0x5674
+ 34622 5646 32 .uleb128 0x32
+ 34623 5647 24490000 .long 0x4924
+ 34624 564b 03 .byte 0x3
+ 34625 564c 91 .byte 0x91
+ 34626 564d F468 .sleb128 -2956
+ 34627 564f 33 .uleb128 0x33
+ 34628 5650 00000000 .quad .LBB1301
+ 34628 00000000
+ 34629 5658 00000000 .quad .LBE1301
+ 34629 00000000
+ 34630 5660 34 .uleb128 0x34
+ 34631 5661 2E490000 .long 0x492e
+ 34632 5665 03 .byte 0x3
+ 34633 5666 91 .byte 0x91
+ 34634 5667 E053 .sleb128 -5664
+ 34635 5669 34 .uleb128 0x34
+ 34636 566a 3A490000 .long 0x493a
+ 34637 566e 03 .byte 0x3
+ 34638 566f 91 .byte 0x91
+ 34639 5670 F868 .sleb128 -2952
+ 34640 5672 00 .byte 0x0
+ 34641 5673 00 .byte 0x0
+ 34642 5674 35 .uleb128 0x35
+ 34643 5675 46490000 .long 0x4946
+ 34644 5679 00000000 .quad .LBB1302
+ 34644 00000000
+ 34645 5681 00000000 .quad .LBE1302
+ 34645 00000000
+ 34646 5689 02 .byte 0x2
+ 34647 568a 6006 .value 0x660
+ 34648 568c 32 .uleb128 0x32
+ 34649 568d 58490000 .long 0x4958
+ 34650 5691 03 .byte 0x3
+ 34651 5692 91 .byte 0x91
+ 34652 5693 FC68 .sleb128 -2948
+ 34653 5695 00 .byte 0x0
+ 34654 5696 00 .byte 0x0
+ 34655 5697 00 .byte 0x0
+ 34656 5698 31 .uleb128 0x31
+ 34657 5699 A30E0000 .long 0xea3
+ 34658 569d 00000000 .quad .LBB1304
+ 34658 00000000
+ 34659 56a5 00000000 .quad .LBE1304
+ 34659 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 944
+
+
+ 34660 56ad 02 .byte 0x2
+ 34661 56ae 1907 .value 0x719
+ 34662 56b0 98570000 .long 0x5798
+ 34663 56b4 32 .uleb128 0x32
+ 34664 56b5 B50E0000 .long 0xeb5
+ 34665 56b9 03 .byte 0x3
+ 34666 56ba 91 .byte 0x91
+ 34667 56bb 8069 .sleb128 -2944
+ 34668 56bd 33 .uleb128 0x33
+ 34669 56be 00000000 .quad .LBB1305
+ 34669 00000000
+ 34670 56c6 00000000 .quad .LBE1305
+ 34670 00000000
+ 34671 56ce 34 .uleb128 0x34
+ 34672 56cf C10E0000 .long 0xec1
+ 34673 56d3 03 .byte 0x3
+ 34674 56d4 76 .byte 0x76
+ 34675 56d5 C04C .sleb128 -6592
+ 34676 56d7 31 .uleb128 0x31
+ 34677 56d8 CE0E0000 .long 0xece
+ 34678 56dc 00000000 .quad .LBB1306
+ 34678 00000000
+ 34679 56e4 00000000 .quad .LBE1306
+ 34679 00000000
+ 34680 56ec 02 .byte 0x2
+ 34681 56ed 1F06 .value 0x61f
+ 34682 56ef 18570000 .long 0x5718
+ 34683 56f3 32 .uleb128 0x32
+ 34684 56f4 E00E0000 .long 0xee0
+ 34685 56f8 03 .byte 0x3
+ 34686 56f9 91 .byte 0x91
+ 34687 56fa 9069 .sleb128 -2928
+ 34688 56fc 33 .uleb128 0x33
+ 34689 56fd 00000000 .quad .LBB1307
+ 34689 00000000
+ 34690 5705 00000000 .quad .LBE1307
+ 34690 00000000
+ 34691 570d 34 .uleb128 0x34
+ 34692 570e EC0E0000 .long 0xeec
+ 34693 5712 03 .byte 0x3
+ 34694 5713 91 .byte 0x91
+ 34695 5714 8054 .sleb128 -5632
+ 34696 5716 00 .byte 0x0
+ 34697 5717 00 .byte 0x0
+ 34698 5718 31 .uleb128 0x31
+ 34699 5719 CE0E0000 .long 0xece
+ 34700 571d 00000000 .quad .LBB1308
+ 34700 00000000
+ 34701 5725 00000000 .quad .LBE1308
+ 34701 00000000
+ 34702 572d 02 .byte 0x2
+ 34703 572e 2006 .value 0x620
+ 34704 5730 59570000 .long 0x5759
+ 34705 5734 32 .uleb128 0x32
+ 34706 5735 E00E0000 .long 0xee0
+ 34707 5739 03 .byte 0x3
+ 34708 573a 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 945
+
+
+ 34709 573b A069 .sleb128 -2912
+ 34710 573d 33 .uleb128 0x33
+ 34711 573e 00000000 .quad .LBB1309
+ 34711 00000000
+ 34712 5746 00000000 .quad .LBE1309
+ 34712 00000000
+ 34713 574e 34 .uleb128 0x34
+ 34714 574f EC0E0000 .long 0xeec
+ 34715 5753 03 .byte 0x3
+ 34716 5754 91 .byte 0x91
+ 34717 5755 9054 .sleb128 -5616
+ 34718 5757 00 .byte 0x0
+ 34719 5758 00 .byte 0x0
+ 34720 5759 35 .uleb128 0x35
+ 34721 575a CE0E0000 .long 0xece
+ 34722 575e 00000000 .quad .LBB1310
+ 34722 00000000
+ 34723 5766 00000000 .quad .LBE1310
+ 34723 00000000
+ 34724 576e 02 .byte 0x2
+ 34725 576f 2106 .value 0x621
+ 34726 5771 32 .uleb128 0x32
+ 34727 5772 E00E0000 .long 0xee0
+ 34728 5776 03 .byte 0x3
+ 34729 5777 91 .byte 0x91
+ 34730 5778 B069 .sleb128 -2896
+ 34731 577a 33 .uleb128 0x33
+ 34732 577b 00000000 .quad .LBB1311
+ 34732 00000000
+ 34733 5783 00000000 .quad .LBE1311
+ 34733 00000000
+ 34734 578b 34 .uleb128 0x34
+ 34735 578c EC0E0000 .long 0xeec
+ 34736 5790 03 .byte 0x3
+ 34737 5791 91 .byte 0x91
+ 34738 5792 A054 .sleb128 -5600
+ 34739 5794 00 .byte 0x0
+ 34740 5795 00 .byte 0x0
+ 34741 5796 00 .byte 0x0
+ 34742 5797 00 .byte 0x0
+ 34743 5798 31 .uleb128 0x31
+ 34744 5799 A30E0000 .long 0xea3
+ 34745 579d 00000000 .quad .LBB1312
+ 34745 00000000
+ 34746 57a5 00000000 .quad .LBE1312
+ 34746 00000000
+ 34747 57ad 02 .byte 0x2
+ 34748 57ae 1B07 .value 0x71b
+ 34749 57b0 98580000 .long 0x5898
+ 34750 57b4 32 .uleb128 0x32
+ 34751 57b5 B50E0000 .long 0xeb5
+ 34752 57b9 03 .byte 0x3
+ 34753 57ba 91 .byte 0x91
+ 34754 57bb C069 .sleb128 -2880
+ 34755 57bd 33 .uleb128 0x33
+ 34756 57be 00000000 .quad .LBB1313
+ 34756 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 946
+
+
+ 34757 57c6 00000000 .quad .LBE1313
+ 34757 00000000
+ 34758 57ce 34 .uleb128 0x34
+ 34759 57cf C10E0000 .long 0xec1
+ 34760 57d3 03 .byte 0x3
+ 34761 57d4 76 .byte 0x76
+ 34762 57d5 D04C .sleb128 -6576
+ 34763 57d7 31 .uleb128 0x31
+ 34764 57d8 CE0E0000 .long 0xece
+ 34765 57dc 00000000 .quad .LBB1314
+ 34765 00000000
+ 34766 57e4 00000000 .quad .LBE1314
+ 34766 00000000
+ 34767 57ec 02 .byte 0x2
+ 34768 57ed 1F06 .value 0x61f
+ 34769 57ef 18580000 .long 0x5818
+ 34770 57f3 32 .uleb128 0x32
+ 34771 57f4 E00E0000 .long 0xee0
+ 34772 57f8 03 .byte 0x3
+ 34773 57f9 91 .byte 0x91
+ 34774 57fa D069 .sleb128 -2864
+ 34775 57fc 33 .uleb128 0x33
+ 34776 57fd 00000000 .quad .LBB1315
+ 34776 00000000
+ 34777 5805 00000000 .quad .LBE1315
+ 34777 00000000
+ 34778 580d 34 .uleb128 0x34
+ 34779 580e EC0E0000 .long 0xeec
+ 34780 5812 03 .byte 0x3
+ 34781 5813 91 .byte 0x91
+ 34782 5814 B054 .sleb128 -5584
+ 34783 5816 00 .byte 0x0
+ 34784 5817 00 .byte 0x0
+ 34785 5818 31 .uleb128 0x31
+ 34786 5819 CE0E0000 .long 0xece
+ 34787 581d 00000000 .quad .LBB1316
+ 34787 00000000
+ 34788 5825 00000000 .quad .LBE1316
+ 34788 00000000
+ 34789 582d 02 .byte 0x2
+ 34790 582e 2006 .value 0x620
+ 34791 5830 59580000 .long 0x5859
+ 34792 5834 32 .uleb128 0x32
+ 34793 5835 E00E0000 .long 0xee0
+ 34794 5839 03 .byte 0x3
+ 34795 583a 91 .byte 0x91
+ 34796 583b E069 .sleb128 -2848
+ 34797 583d 33 .uleb128 0x33
+ 34798 583e 00000000 .quad .LBB1317
+ 34798 00000000
+ 34799 5846 00000000 .quad .LBE1317
+ 34799 00000000
+ 34800 584e 34 .uleb128 0x34
+ 34801 584f EC0E0000 .long 0xeec
+ 34802 5853 03 .byte 0x3
+ 34803 5854 91 .byte 0x91
+ 34804 5855 C054 .sleb128 -5568
+
GAS LISTING /tmp/ccMa7HLZ.s page 947
+
+
+ 34805 5857 00 .byte 0x0
+ 34806 5858 00 .byte 0x0
+ 34807 5859 35 .uleb128 0x35
+ 34808 585a CE0E0000 .long 0xece
+ 34809 585e 00000000 .quad .LBB1318
+ 34809 00000000
+ 34810 5866 00000000 .quad .LBE1318
+ 34810 00000000
+ 34811 586e 02 .byte 0x2
+ 34812 586f 2106 .value 0x621
+ 34813 5871 32 .uleb128 0x32
+ 34814 5872 E00E0000 .long 0xee0
+ 34815 5876 03 .byte 0x3
+ 34816 5877 91 .byte 0x91
+ 34817 5878 F069 .sleb128 -2832
+ 34818 587a 33 .uleb128 0x33
+ 34819 587b 00000000 .quad .LBB1319
+ 34819 00000000
+ 34820 5883 00000000 .quad .LBE1319
+ 34820 00000000
+ 34821 588b 34 .uleb128 0x34
+ 34822 588c EC0E0000 .long 0xeec
+ 34823 5890 03 .byte 0x3
+ 34824 5891 91 .byte 0x91
+ 34825 5892 D054 .sleb128 -5552
+ 34826 5894 00 .byte 0x0
+ 34827 5895 00 .byte 0x0
+ 34828 5896 00 .byte 0x0
+ 34829 5897 00 .byte 0x0
+ 34830 5898 31 .uleb128 0x31
+ 34831 5899 780E0000 .long 0xe78
+ 34832 589d 00000000 .quad .LBB1320
+ 34832 00000000
+ 34833 58a5 00000000 .quad .LBE1320
+ 34833 00000000
+ 34834 58ad 02 .byte 0x2
+ 34835 58ae 1C07 .value 0x71c
+ 34836 58b0 D9580000 .long 0x58d9
+ 34837 58b4 32 .uleb128 0x32
+ 34838 58b5 8A0E0000 .long 0xe8a
+ 34839 58b9 03 .byte 0x3
+ 34840 58ba 91 .byte 0x91
+ 34841 58bb 806A .sleb128 -2816
+ 34842 58bd 33 .uleb128 0x33
+ 34843 58be 00000000 .quad .LBB1321
+ 34843 00000000
+ 34844 58c6 00000000 .quad .LBE1321
+ 34844 00000000
+ 34845 58ce 34 .uleb128 0x34
+ 34846 58cf 960E0000 .long 0xe96
+ 34847 58d3 03 .byte 0x3
+ 34848 58d4 91 .byte 0x91
+ 34849 58d5 E054 .sleb128 -5536
+ 34850 58d7 00 .byte 0x0
+ 34851 58d8 00 .byte 0x0
+ 34852 58d9 31 .uleb128 0x31
+ 34853 58da 63490000 .long 0x4963
+
GAS LISTING /tmp/ccMa7HLZ.s page 948
+
+
+ 34854 58de 00000000 .quad .LBB1322
+ 34854 00000000
+ 34855 58e6 00000000 .quad .LBE1322
+ 34855 00000000
+ 34856 58ee 02 .byte 0x2
+ 34857 58ef 1E07 .value 0x71e
+ 34858 58f1 2C590000 .long 0x592c
+ 34859 58f5 32 .uleb128 0x32
+ 34860 58f6 7F490000 .long 0x497f
+ 34861 58fa 03 .byte 0x3
+ 34862 58fb 91 .byte 0x91
+ 34863 58fc 906A .sleb128 -2800
+ 34864 58fe 32 .uleb128 0x32
+ 34865 58ff 75490000 .long 0x4975
+ 34866 5903 03 .byte 0x3
+ 34867 5904 91 .byte 0x91
+ 34868 5905 A06A .sleb128 -2784
+ 34869 5907 33 .uleb128 0x33
+ 34870 5908 00000000 .quad .LBB1323
+ 34870 00000000
+ 34871 5910 00000000 .quad .LBE1323
+ 34871 00000000
+ 34872 5918 34 .uleb128 0x34
+ 34873 5919 89490000 .long 0x4989
+ 34874 591d 03 .byte 0x3
+ 34875 591e 91 .byte 0x91
+ 34876 591f 8055 .sleb128 -5504
+ 34877 5921 34 .uleb128 0x34
+ 34878 5922 94490000 .long 0x4994
+ 34879 5926 03 .byte 0x3
+ 34880 5927 91 .byte 0x91
+ 34881 5928 F054 .sleb128 -5520
+ 34882 592a 00 .byte 0x0
+ 34883 592b 00 .byte 0x0
+ 34884 592c 31 .uleb128 0x31
+ 34885 592d A0490000 .long 0x49a0
+ 34886 5931 00000000 .quad .LBB1324
+ 34886 00000000
+ 34887 5939 00000000 .quad .LBE1324
+ 34887 00000000
+ 34888 5941 02 .byte 0x2
+ 34889 5942 2107 .value 0x721
+ 34890 5944 7F590000 .long 0x597f
+ 34891 5948 32 .uleb128 0x32
+ 34892 5949 BC490000 .long 0x49bc
+ 34893 594d 03 .byte 0x3
+ 34894 594e 91 .byte 0x91
+ 34895 594f B06A .sleb128 -2768
+ 34896 5951 32 .uleb128 0x32
+ 34897 5952 B2490000 .long 0x49b2
+ 34898 5956 03 .byte 0x3
+ 34899 5957 91 .byte 0x91
+ 34900 5958 C06A .sleb128 -2752
+ 34901 595a 33 .uleb128 0x33
+ 34902 595b 00000000 .quad .LBB1325
+ 34902 00000000
+ 34903 5963 00000000 .quad .LBE1325
+
GAS LISTING /tmp/ccMa7HLZ.s page 949
+
+
+ 34903 00000000
+ 34904 596b 34 .uleb128 0x34
+ 34905 596c C6490000 .long 0x49c6
+ 34906 5970 03 .byte 0x3
+ 34907 5971 91 .byte 0x91
+ 34908 5972 A055 .sleb128 -5472
+ 34909 5974 34 .uleb128 0x34
+ 34910 5975 D1490000 .long 0x49d1
+ 34911 5979 03 .byte 0x3
+ 34912 597a 91 .byte 0x91
+ 34913 597b 9055 .sleb128 -5488
+ 34914 597d 00 .byte 0x0
+ 34915 597e 00 .byte 0x0
+ 34916 597f 31 .uleb128 0x31
+ 34917 5980 A30E0000 .long 0xea3
+ 34918 5984 00000000 .quad .LBB1326
+ 34918 00000000
+ 34919 598c 00000000 .quad .LBE1326
+ 34919 00000000
+ 34920 5994 02 .byte 0x2
+ 34921 5995 2507 .value 0x725
+ 34922 5997 7F5A0000 .long 0x5a7f
+ 34923 599b 32 .uleb128 0x32
+ 34924 599c B50E0000 .long 0xeb5
+ 34925 59a0 03 .byte 0x3
+ 34926 59a1 91 .byte 0x91
+ 34927 59a2 D06A .sleb128 -2736
+ 34928 59a4 33 .uleb128 0x33
+ 34929 59a5 00000000 .quad .LBB1327
+ 34929 00000000
+ 34930 59ad 00000000 .quad .LBE1327
+ 34930 00000000
+ 34931 59b5 34 .uleb128 0x34
+ 34932 59b6 C10E0000 .long 0xec1
+ 34933 59ba 03 .byte 0x3
+ 34934 59bb 76 .byte 0x76
+ 34935 59bc E04C .sleb128 -6560
+ 34936 59be 31 .uleb128 0x31
+ 34937 59bf CE0E0000 .long 0xece
+ 34938 59c3 00000000 .quad .LBB1328
+ 34938 00000000
+ 34939 59cb 00000000 .quad .LBE1328
+ 34939 00000000
+ 34940 59d3 02 .byte 0x2
+ 34941 59d4 1F06 .value 0x61f
+ 34942 59d6 FF590000 .long 0x59ff
+ 34943 59da 32 .uleb128 0x32
+ 34944 59db E00E0000 .long 0xee0
+ 34945 59df 03 .byte 0x3
+ 34946 59e0 91 .byte 0x91
+ 34947 59e1 E06A .sleb128 -2720
+ 34948 59e3 33 .uleb128 0x33
+ 34949 59e4 00000000 .quad .LBB1329
+ 34949 00000000
+ 34950 59ec 00000000 .quad .LBE1329
+ 34950 00000000
+ 34951 59f4 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 950
+
+
+ 34952 59f5 EC0E0000 .long 0xeec
+ 34953 59f9 03 .byte 0x3
+ 34954 59fa 91 .byte 0x91
+ 34955 59fb B055 .sleb128 -5456
+ 34956 59fd 00 .byte 0x0
+ 34957 59fe 00 .byte 0x0
+ 34958 59ff 31 .uleb128 0x31
+ 34959 5a00 CE0E0000 .long 0xece
+ 34960 5a04 00000000 .quad .LBB1330
+ 34960 00000000
+ 34961 5a0c 00000000 .quad .LBE1330
+ 34961 00000000
+ 34962 5a14 02 .byte 0x2
+ 34963 5a15 2006 .value 0x620
+ 34964 5a17 405A0000 .long 0x5a40
+ 34965 5a1b 32 .uleb128 0x32
+ 34966 5a1c E00E0000 .long 0xee0
+ 34967 5a20 03 .byte 0x3
+ 34968 5a21 91 .byte 0x91
+ 34969 5a22 F06A .sleb128 -2704
+ 34970 5a24 33 .uleb128 0x33
+ 34971 5a25 00000000 .quad .LBB1331
+ 34971 00000000
+ 34972 5a2d 00000000 .quad .LBE1331
+ 34972 00000000
+ 34973 5a35 34 .uleb128 0x34
+ 34974 5a36 EC0E0000 .long 0xeec
+ 34975 5a3a 03 .byte 0x3
+ 34976 5a3b 91 .byte 0x91
+ 34977 5a3c C055 .sleb128 -5440
+ 34978 5a3e 00 .byte 0x0
+ 34979 5a3f 00 .byte 0x0
+ 34980 5a40 35 .uleb128 0x35
+ 34981 5a41 CE0E0000 .long 0xece
+ 34982 5a45 00000000 .quad .LBB1332
+ 34982 00000000
+ 34983 5a4d 00000000 .quad .LBE1332
+ 34983 00000000
+ 34984 5a55 02 .byte 0x2
+ 34985 5a56 2106 .value 0x621
+ 34986 5a58 32 .uleb128 0x32
+ 34987 5a59 E00E0000 .long 0xee0
+ 34988 5a5d 03 .byte 0x3
+ 34989 5a5e 91 .byte 0x91
+ 34990 5a5f 806B .sleb128 -2688
+ 34991 5a61 33 .uleb128 0x33
+ 34992 5a62 00000000 .quad .LBB1333
+ 34992 00000000
+ 34993 5a6a 00000000 .quad .LBE1333
+ 34993 00000000
+ 34994 5a72 34 .uleb128 0x34
+ 34995 5a73 EC0E0000 .long 0xeec
+ 34996 5a77 03 .byte 0x3
+ 34997 5a78 91 .byte 0x91
+ 34998 5a79 D055 .sleb128 -5424
+ 34999 5a7b 00 .byte 0x0
+ 35000 5a7c 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 951
+
+
+ 35001 5a7d 00 .byte 0x0
+ 35002 5a7e 00 .byte 0x0
+ 35003 5a7f 31 .uleb128 0x31
+ 35004 5a80 A30E0000 .long 0xea3
+ 35005 5a84 00000000 .quad .LBB1334
+ 35005 00000000
+ 35006 5a8c 00000000 .quad .LBE1334
+ 35006 00000000
+ 35007 5a94 02 .byte 0x2
+ 35008 5a95 2607 .value 0x726
+ 35009 5a97 7F5B0000 .long 0x5b7f
+ 35010 5a9b 32 .uleb128 0x32
+ 35011 5a9c B50E0000 .long 0xeb5
+ 35012 5aa0 03 .byte 0x3
+ 35013 5aa1 91 .byte 0x91
+ 35014 5aa2 906B .sleb128 -2672
+ 35015 5aa4 33 .uleb128 0x33
+ 35016 5aa5 00000000 .quad .LBB1335
+ 35016 00000000
+ 35017 5aad 00000000 .quad .LBE1335
+ 35017 00000000
+ 35018 5ab5 34 .uleb128 0x34
+ 35019 5ab6 C10E0000 .long 0xec1
+ 35020 5aba 03 .byte 0x3
+ 35021 5abb 76 .byte 0x76
+ 35022 5abc F04C .sleb128 -6544
+ 35023 5abe 31 .uleb128 0x31
+ 35024 5abf CE0E0000 .long 0xece
+ 35025 5ac3 00000000 .quad .LBB1336
+ 35025 00000000
+ 35026 5acb 00000000 .quad .LBE1336
+ 35026 00000000
+ 35027 5ad3 02 .byte 0x2
+ 35028 5ad4 1F06 .value 0x61f
+ 35029 5ad6 FF5A0000 .long 0x5aff
+ 35030 5ada 32 .uleb128 0x32
+ 35031 5adb E00E0000 .long 0xee0
+ 35032 5adf 03 .byte 0x3
+ 35033 5ae0 91 .byte 0x91
+ 35034 5ae1 A06B .sleb128 -2656
+ 35035 5ae3 33 .uleb128 0x33
+ 35036 5ae4 00000000 .quad .LBB1337
+ 35036 00000000
+ 35037 5aec 00000000 .quad .LBE1337
+ 35037 00000000
+ 35038 5af4 34 .uleb128 0x34
+ 35039 5af5 EC0E0000 .long 0xeec
+ 35040 5af9 03 .byte 0x3
+ 35041 5afa 91 .byte 0x91
+ 35042 5afb E055 .sleb128 -5408
+ 35043 5afd 00 .byte 0x0
+ 35044 5afe 00 .byte 0x0
+ 35045 5aff 31 .uleb128 0x31
+ 35046 5b00 CE0E0000 .long 0xece
+ 35047 5b04 00000000 .quad .LBB1338
+ 35047 00000000
+ 35048 5b0c 00000000 .quad .LBE1338
+
GAS LISTING /tmp/ccMa7HLZ.s page 952
+
+
+ 35048 00000000
+ 35049 5b14 02 .byte 0x2
+ 35050 5b15 2006 .value 0x620
+ 35051 5b17 405B0000 .long 0x5b40
+ 35052 5b1b 32 .uleb128 0x32
+ 35053 5b1c E00E0000 .long 0xee0
+ 35054 5b20 03 .byte 0x3
+ 35055 5b21 91 .byte 0x91
+ 35056 5b22 B06B .sleb128 -2640
+ 35057 5b24 33 .uleb128 0x33
+ 35058 5b25 00000000 .quad .LBB1339
+ 35058 00000000
+ 35059 5b2d 00000000 .quad .LBE1339
+ 35059 00000000
+ 35060 5b35 34 .uleb128 0x34
+ 35061 5b36 EC0E0000 .long 0xeec
+ 35062 5b3a 03 .byte 0x3
+ 35063 5b3b 91 .byte 0x91
+ 35064 5b3c F055 .sleb128 -5392
+ 35065 5b3e 00 .byte 0x0
+ 35066 5b3f 00 .byte 0x0
+ 35067 5b40 35 .uleb128 0x35
+ 35068 5b41 CE0E0000 .long 0xece
+ 35069 5b45 00000000 .quad .LBB1340
+ 35069 00000000
+ 35070 5b4d 00000000 .quad .LBE1340
+ 35070 00000000
+ 35071 5b55 02 .byte 0x2
+ 35072 5b56 2106 .value 0x621
+ 35073 5b58 32 .uleb128 0x32
+ 35074 5b59 E00E0000 .long 0xee0
+ 35075 5b5d 03 .byte 0x3
+ 35076 5b5e 91 .byte 0x91
+ 35077 5b5f C06B .sleb128 -2624
+ 35078 5b61 33 .uleb128 0x33
+ 35079 5b62 00000000 .quad .LBB1341
+ 35079 00000000
+ 35080 5b6a 00000000 .quad .LBE1341
+ 35080 00000000
+ 35081 5b72 34 .uleb128 0x34
+ 35082 5b73 EC0E0000 .long 0xeec
+ 35083 5b77 03 .byte 0x3
+ 35084 5b78 91 .byte 0x91
+ 35085 5b79 8056 .sleb128 -5376
+ 35086 5b7b 00 .byte 0x0
+ 35087 5b7c 00 .byte 0x0
+ 35088 5b7d 00 .byte 0x0
+ 35089 5b7e 00 .byte 0x0
+ 35090 5b7f 31 .uleb128 0x31
+ 35091 5b80 D10B0000 .long 0xbd1
+ 35092 5b84 00000000 .quad .LBB1342
+ 35092 00000000
+ 35093 5b8c 00000000 .quad .LBE1342
+ 35093 00000000
+ 35094 5b94 02 .byte 0x2
+ 35095 5b95 2707 .value 0x727
+ 35096 5b97 25600000 .long 0x6025
+
GAS LISTING /tmp/ccMa7HLZ.s page 953
+
+
+ 35097 5b9b 32 .uleb128 0x32
+ 35098 5b9c EF0B0000 .long 0xbef
+ 35099 5ba0 03 .byte 0x3
+ 35100 5ba1 91 .byte 0x91
+ 35101 5ba2 DC6B .sleb128 -2596
+ 35102 5ba4 32 .uleb128 0x32
+ 35103 5ba5 E30B0000 .long 0xbe3
+ 35104 5ba9 03 .byte 0x3
+ 35105 5baa 91 .byte 0x91
+ 35106 5bab E06B .sleb128 -2592
+ 35107 5bad 33 .uleb128 0x33
+ 35108 5bae 00000000 .quad .LBB1343
+ 35108 00000000
+ 35109 5bb6 00000000 .quad .LBE1343
+ 35109 00000000
+ 35110 5bbe 34 .uleb128 0x34
+ 35111 5bbf FB0B0000 .long 0xbfb
+ 35112 5bc3 03 .byte 0x3
+ 35113 5bc4 76 .byte 0x76
+ 35114 5bc5 904D .sleb128 -6512
+ 35115 5bc7 34 .uleb128 0x34
+ 35116 5bc8 070C0000 .long 0xc07
+ 35117 5bcc 03 .byte 0x3
+ 35118 5bcd 76 .byte 0x76
+ 35119 5bce 804D .sleb128 -6528
+ 35120 5bd0 31 .uleb128 0x31
+ 35121 5bd1 500C0000 .long 0xc50
+ 35122 5bd5 00000000 .quad .LBB1344
+ 35122 00000000
+ 35123 5bdd 00000000 .quad .LBE1344
+ 35123 00000000
+ 35124 5be5 02 .byte 0x2
+ 35125 5be6 9106 .value 0x691
+ 35126 5be8 235C0000 .long 0x5c23
+ 35127 5bec 32 .uleb128 0x32
+ 35128 5bed 7A0C0000 .long 0xc7a
+ 35129 5bf1 03 .byte 0x3
+ 35130 5bf2 91 .byte 0x91
+ 35131 5bf3 F86B .sleb128 -2568
+ 35132 5bf5 32 .uleb128 0x32
+ 35133 5bf6 6E0C0000 .long 0xc6e
+ 35134 5bfa 03 .byte 0x3
+ 35135 5bfb 91 .byte 0x91
+ 35136 5bfc FC6B .sleb128 -2564
+ 35137 5bfe 32 .uleb128 0x32
+ 35138 5bff 620C0000 .long 0xc62
+ 35139 5c03 03 .byte 0x3
+ 35140 5c04 91 .byte 0x91
+ 35141 5c05 806C .sleb128 -2560
+ 35142 5c07 33 .uleb128 0x33
+ 35143 5c08 00000000 .quad .LBB1345
+ 35143 00000000
+ 35144 5c10 00000000 .quad .LBE1345
+ 35144 00000000
+ 35145 5c18 34 .uleb128 0x34
+ 35146 5c19 860C0000 .long 0xc86
+ 35147 5c1d 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 954
+
+
+ 35148 5c1e 91 .byte 0x91
+ 35149 5c1f D056 .sleb128 -5296
+ 35150 5c21 00 .byte 0x0
+ 35151 5c22 00 .byte 0x0
+ 35152 5c23 31 .uleb128 0x31
+ 35153 5c24 910C0000 .long 0xc91
+ 35154 5c28 00000000 .quad .LBB1346
+ 35154 00000000
+ 35155 5c30 00000000 .quad .LBE1346
+ 35155 00000000
+ 35156 5c38 02 .byte 0x2
+ 35157 5c39 9206 .value 0x692
+ 35158 5c3b 935E0000 .long 0x5e93
+ 35159 5c3f 32 .uleb128 0x32
+ 35160 5c40 A30C0000 .long 0xca3
+ 35161 5c44 03 .byte 0x3
+ 35162 5c45 91 .byte 0x91
+ 35163 5c46 906C .sleb128 -2544
+ 35164 5c48 35 .uleb128 0x35
+ 35165 5c49 B00C0000 .long 0xcb0
+ 35166 5c4d 00000000 .quad .LBB1348
+ 35166 00000000
+ 35167 5c55 00000000 .quad .LBE1348
+ 35167 00000000
+ 35168 5c5d 02 .byte 0x2
+ 35169 5c5e 7D03 .value 0x37d
+ 35170 5c60 32 .uleb128 0x32
+ 35171 5c61 CE0C0000 .long 0xcce
+ 35172 5c65 03 .byte 0x3
+ 35173 5c66 91 .byte 0x91
+ 35174 5c67 A86C .sleb128 -2520
+ 35175 5c69 32 .uleb128 0x32
+ 35176 5c6a C20C0000 .long 0xcc2
+ 35177 5c6e 03 .byte 0x3
+ 35178 5c6f 91 .byte 0x91
+ 35179 5c70 B06C .sleb128 -2512
+ 35180 5c72 33 .uleb128 0x33
+ 35181 5c73 00000000 .quad .LBB1349
+ 35181 00000000
+ 35182 5c7b 00000000 .quad .LBE1349
+ 35182 00000000
+ 35183 5c83 34 .uleb128 0x34
+ 35184 5c84 DA0C0000 .long 0xcda
+ 35185 5c88 03 .byte 0x3
+ 35186 5c89 91 .byte 0x91
+ 35187 5c8a 806D .sleb128 -2432
+ 35188 5c8c 34 .uleb128 0x34
+ 35189 5c8d E50C0000 .long 0xce5
+ 35190 5c91 03 .byte 0x3
+ 35191 5c92 91 .byte 0x91
+ 35192 5c93 F06C .sleb128 -2448
+ 35193 5c95 34 .uleb128 0x34
+ 35194 5c96 F00C0000 .long 0xcf0
+ 35195 5c9a 03 .byte 0x3
+ 35196 5c9b 91 .byte 0x91
+ 35197 5c9c E06C .sleb128 -2464
+ 35198 5c9e 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 955
+
+
+ 35199 5c9f FC0C0000 .long 0xcfc
+ 35200 5ca3 03 .byte 0x3
+ 35201 5ca4 91 .byte 0x91
+ 35202 5ca5 D06C .sleb128 -2480
+ 35203 5ca7 34 .uleb128 0x34
+ 35204 5ca8 080D0000 .long 0xd08
+ 35205 5cac 03 .byte 0x3
+ 35206 5cad 91 .byte 0x91
+ 35207 5cae CC6C .sleb128 -2484
+ 35208 5cb0 31 .uleb128 0x31
+ 35209 5cb1 1F0D0000 .long 0xd1f
+ 35210 5cb5 00000000 .quad .LBB1350
+ 35210 00000000
+ 35211 5cbd 00000000 .quad .LBE1350
+ 35211 00000000
+ 35212 5cc5 02 .byte 0x2
+ 35213 5cc6 5603 .value 0x356
+ 35214 5cc8 DF5C0000 .long 0x5cdf
+ 35215 5ccc 32 .uleb128 0x32
+ 35216 5ccd 3A0D0000 .long 0xd3a
+ 35217 5cd1 03 .byte 0x3
+ 35218 5cd2 91 .byte 0x91
+ 35219 5cd3 906D .sleb128 -2416
+ 35220 5cd5 32 .uleb128 0x32
+ 35221 5cd6 300D0000 .long 0xd30
+ 35222 5cda 03 .byte 0x3
+ 35223 5cdb 91 .byte 0x91
+ 35224 5cdc A06D .sleb128 -2400
+ 35225 5cde 00 .byte 0x0
+ 35226 5cdf 31 .uleb128 0x31
+ 35227 5ce0 450D0000 .long 0xd45
+ 35228 5ce4 00000000 .quad .LBB1352
+ 35228 00000000
+ 35229 5cec 00000000 .quad .LBE1352
+ 35229 00000000
+ 35230 5cf4 02 .byte 0x2
+ 35231 5cf5 5E03 .value 0x35e
+ 35232 5cf7 0E5D0000 .long 0x5d0e
+ 35233 5cfb 32 .uleb128 0x32
+ 35234 5cfc 620D0000 .long 0xd62
+ 35235 5d00 03 .byte 0x3
+ 35236 5d01 91 .byte 0x91
+ 35237 5d02 B06D .sleb128 -2384
+ 35238 5d04 32 .uleb128 0x32
+ 35239 5d05 570D0000 .long 0xd57
+ 35240 5d09 03 .byte 0x3
+ 35241 5d0a 91 .byte 0x91
+ 35242 5d0b C06D .sleb128 -2368
+ 35243 5d0d 00 .byte 0x0
+ 35244 5d0e 31 .uleb128 0x31
+ 35245 5d0f 6E0D0000 .long 0xd6e
+ 35246 5d13 00000000 .quad .LBB1354
+ 35246 00000000
+ 35247 5d1b 00000000 .quad .LBE1354
+ 35247 00000000
+ 35248 5d23 02 .byte 0x2
+ 35249 5d24 6403 .value 0x364
+
GAS LISTING /tmp/ccMa7HLZ.s page 956
+
+
+ 35250 5d26 735D0000 .long 0x5d73
+ 35251 5d2a 32 .uleb128 0x32
+ 35252 5d2b 8C0D0000 .long 0xd8c
+ 35253 5d2f 03 .byte 0x3
+ 35254 5d30 91 .byte 0x91
+ 35255 5d31 D06D .sleb128 -2352
+ 35256 5d33 32 .uleb128 0x32
+ 35257 5d34 800D0000 .long 0xd80
+ 35258 5d38 03 .byte 0x3
+ 35259 5d39 91 .byte 0x91
+ 35260 5d3a E06D .sleb128 -2336
+ 35261 5d3c 33 .uleb128 0x33
+ 35262 5d3d 00000000 .quad .LBB1355
+ 35262 00000000
+ 35263 5d45 00000000 .quad .LBE1355
+ 35263 00000000
+ 35264 5d4d 34 .uleb128 0x34
+ 35265 5d4e 980D0000 .long 0xd98
+ 35266 5d52 03 .byte 0x3
+ 35267 5d53 91 .byte 0x91
+ 35268 5d54 8057 .sleb128 -5248
+ 35269 5d56 34 .uleb128 0x34
+ 35270 5d57 A40D0000 .long 0xda4
+ 35271 5d5b 03 .byte 0x3
+ 35272 5d5c 91 .byte 0x91
+ 35273 5d5d F056 .sleb128 -5264
+ 35274 5d5f 34 .uleb128 0x34
+ 35275 5d60 AF0D0000 .long 0xdaf
+ 35276 5d64 03 .byte 0x3
+ 35277 5d65 91 .byte 0x91
+ 35278 5d66 E056 .sleb128 -5280
+ 35279 5d68 34 .uleb128 0x34
+ 35280 5d69 BB0D0000 .long 0xdbb
+ 35281 5d6d 03 .byte 0x3
+ 35282 5d6e 91 .byte 0x91
+ 35283 5d6f FC6D .sleb128 -2308
+ 35284 5d71 00 .byte 0x0
+ 35285 5d72 00 .byte 0x0
+ 35286 5d73 31 .uleb128 0x31
+ 35287 5d74 C70D0000 .long 0xdc7
+ 35288 5d78 00000000 .quad .LBB1356
+ 35288 00000000
+ 35289 5d80 00000000 .quad .LBE1356
+ 35289 00000000
+ 35290 5d88 02 .byte 0x2
+ 35291 5d89 6603 .value 0x366
+ 35292 5d8b A25D0000 .long 0x5da2
+ 35293 5d8f 32 .uleb128 0x32
+ 35294 5d90 E20D0000 .long 0xde2
+ 35295 5d94 03 .byte 0x3
+ 35296 5d95 91 .byte 0x91
+ 35297 5d96 806E .sleb128 -2304
+ 35298 5d98 32 .uleb128 0x32
+ 35299 5d99 D80D0000 .long 0xdd8
+ 35300 5d9d 03 .byte 0x3
+ 35301 5d9e 91 .byte 0x91
+ 35302 5d9f 906E .sleb128 -2288
+
GAS LISTING /tmp/ccMa7HLZ.s page 957
+
+
+ 35303 5da1 00 .byte 0x0
+ 35304 5da2 31 .uleb128 0x31
+ 35305 5da3 6E0D0000 .long 0xd6e
+ 35306 5da7 00000000 .quad .LBB1358
+ 35306 00000000
+ 35307 5daf 00000000 .quad .LBE1358
+ 35307 00000000
+ 35308 5db7 02 .byte 0x2
+ 35309 5db8 6803 .value 0x368
+ 35310 5dba 075E0000 .long 0x5e07
+ 35311 5dbe 32 .uleb128 0x32
+ 35312 5dbf 8C0D0000 .long 0xd8c
+ 35313 5dc3 03 .byte 0x3
+ 35314 5dc4 91 .byte 0x91
+ 35315 5dc5 A06E .sleb128 -2272
+ 35316 5dc7 32 .uleb128 0x32
+ 35317 5dc8 800D0000 .long 0xd80
+ 35318 5dcc 03 .byte 0x3
+ 35319 5dcd 91 .byte 0x91
+ 35320 5dce B06E .sleb128 -2256
+ 35321 5dd0 33 .uleb128 0x33
+ 35322 5dd1 00000000 .quad .LBB1359
+ 35322 00000000
+ 35323 5dd9 00000000 .quad .LBE1359
+ 35323 00000000
+ 35324 5de1 34 .uleb128 0x34
+ 35325 5de2 980D0000 .long 0xd98
+ 35326 5de6 03 .byte 0x3
+ 35327 5de7 91 .byte 0x91
+ 35328 5de8 B057 .sleb128 -5200
+ 35329 5dea 34 .uleb128 0x34
+ 35330 5deb A40D0000 .long 0xda4
+ 35331 5def 03 .byte 0x3
+ 35332 5df0 91 .byte 0x91
+ 35333 5df1 A057 .sleb128 -5216
+ 35334 5df3 34 .uleb128 0x34
+ 35335 5df4 AF0D0000 .long 0xdaf
+ 35336 5df8 03 .byte 0x3
+ 35337 5df9 91 .byte 0x91
+ 35338 5dfa 9057 .sleb128 -5232
+ 35339 5dfc 34 .uleb128 0x34
+ 35340 5dfd BB0D0000 .long 0xdbb
+ 35341 5e01 03 .byte 0x3
+ 35342 5e02 91 .byte 0x91
+ 35343 5e03 CC6E .sleb128 -2228
+ 35344 5e05 00 .byte 0x0
+ 35345 5e06 00 .byte 0x0
+ 35346 5e07 31 .uleb128 0x31
+ 35347 5e08 C70D0000 .long 0xdc7
+ 35348 5e0c 00000000 .quad .LBB1360
+ 35348 00000000
+ 35349 5e14 00000000 .quad .LBE1360
+ 35349 00000000
+ 35350 5e1c 02 .byte 0x2
+ 35351 5e1d 6A03 .value 0x36a
+ 35352 5e1f 365E0000 .long 0x5e36
+ 35353 5e23 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 958
+
+
+ 35354 5e24 E20D0000 .long 0xde2
+ 35355 5e28 03 .byte 0x3
+ 35356 5e29 91 .byte 0x91
+ 35357 5e2a D06E .sleb128 -2224
+ 35358 5e2c 32 .uleb128 0x32
+ 35359 5e2d D80D0000 .long 0xdd8
+ 35360 5e31 03 .byte 0x3
+ 35361 5e32 91 .byte 0x91
+ 35362 5e33 E06E .sleb128 -2208
+ 35363 5e35 00 .byte 0x0
+ 35364 5e36 31 .uleb128 0x31
+ 35365 5e37 ED0D0000 .long 0xded
+ 35366 5e3b 00000000 .quad .LBB1362
+ 35366 00000000
+ 35367 5e43 00000000 .quad .LBE1362
+ 35367 00000000
+ 35368 5e4b 02 .byte 0x2
+ 35369 5e4c 6C03 .value 0x36c
+ 35370 5e4e 655E0000 .long 0x5e65
+ 35371 5e52 32 .uleb128 0x32
+ 35372 5e53 0A0E0000 .long 0xe0a
+ 35373 5e57 03 .byte 0x3
+ 35374 5e58 91 .byte 0x91
+ 35375 5e59 F06E .sleb128 -2192
+ 35376 5e5b 32 .uleb128 0x32
+ 35377 5e5c FF0D0000 .long 0xdff
+ 35378 5e60 03 .byte 0x3
+ 35379 5e61 91 .byte 0x91
+ 35380 5e62 806F .sleb128 -2176
+ 35381 5e64 00 .byte 0x0
+ 35382 5e65 35 .uleb128 0x35
+ 35383 5e66 1F0D0000 .long 0xd1f
+ 35384 5e6a 00000000 .quad .LBB1364
+ 35384 00000000
+ 35385 5e72 00000000 .quad .LBE1364
+ 35385 00000000
+ 35386 5e7a 02 .byte 0x2
+ 35387 5e7b 6E03 .value 0x36e
+ 35388 5e7d 32 .uleb128 0x32
+ 35389 5e7e 3A0D0000 .long 0xd3a
+ 35390 5e82 03 .byte 0x3
+ 35391 5e83 91 .byte 0x91
+ 35392 5e84 906F .sleb128 -2160
+ 35393 5e86 32 .uleb128 0x32
+ 35394 5e87 300D0000 .long 0xd30
+ 35395 5e8b 03 .byte 0x3
+ 35396 5e8c 91 .byte 0x91
+ 35397 5e8d A06F .sleb128 -2144
+ 35398 5e8f 00 .byte 0x0
+ 35399 5e90 00 .byte 0x0
+ 35400 5e91 00 .byte 0x0
+ 35401 5e92 00 .byte 0x0
+ 35402 5e93 36 .uleb128 0x36
+ 35403 5e94 00000000 .quad .LBB1366
+ 35403 00000000
+ 35404 5e9c 00000000 .quad .LBE1366
+ 35404 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 959
+
+
+ 35405 5ea4 B25E0000 .long 0x5eb2
+ 35406 5ea8 34 .uleb128 0x34
+ 35407 5ea9 180C0000 .long 0xc18
+ 35408 5ead 03 .byte 0x3
+ 35409 5eae 91 .byte 0x91
+ 35410 5eaf C056 .sleb128 -5312
+ 35411 5eb1 00 .byte 0x0
+ 35412 5eb2 31 .uleb128 0x31
+ 35413 5eb3 160E0000 .long 0xe16
+ 35414 5eb7 00000000 .quad .LBB1367
+ 35414 00000000
+ 35415 5ebf 00000000 .quad .LBE1367
+ 35415 00000000
+ 35416 5ec7 02 .byte 0x2
+ 35417 5ec8 9406 .value 0x694
+ 35418 5eca 5A5F0000 .long 0x5f5a
+ 35419 5ece 32 .uleb128 0x32
+ 35420 5ecf 280E0000 .long 0xe28
+ 35421 5ed3 03 .byte 0x3
+ 35422 5ed4 91 .byte 0x91
+ 35423 5ed5 B06F .sleb128 -2128
+ 35424 5ed7 33 .uleb128 0x33
+ 35425 5ed8 00000000 .quad .LBB1368
+ 35425 00000000
+ 35426 5ee0 00000000 .quad .LBE1368
+ 35426 00000000
+ 35427 5ee8 34 .uleb128 0x34
+ 35428 5ee9 340E0000 .long 0xe34
+ 35429 5eed 09 .byte 0x9
+ 35430 5eee 03 .byte 0x3
+ 35431 5eef 00000000 .quad ShiftRowTable.6768
+ 35431 00000000
+ 35432 5ef7 35 .uleb128 0x35
+ 35433 5ef8 6E0D0000 .long 0xd6e
+ 35434 5efc 00000000 .quad .LBB1369
+ 35434 00000000
+ 35435 5f04 00000000 .quad .LBE1369
+ 35435 00000000
+ 35436 5f0c 02 .byte 0x2
+ 35437 5f0d 9B02 .value 0x29b
+ 35438 5f0f 32 .uleb128 0x32
+ 35439 5f10 8C0D0000 .long 0xd8c
+ 35440 5f14 03 .byte 0x3
+ 35441 5f15 91 .byte 0x91
+ 35442 5f16 C06F .sleb128 -2112
+ 35443 5f18 32 .uleb128 0x32
+ 35444 5f19 800D0000 .long 0xd80
+ 35445 5f1d 03 .byte 0x3
+ 35446 5f1e 91 .byte 0x91
+ 35447 5f1f D06F .sleb128 -2096
+ 35448 5f21 33 .uleb128 0x33
+ 35449 5f22 00000000 .quad .LBB1370
+ 35449 00000000
+ 35450 5f2a 00000000 .quad .LBE1370
+ 35450 00000000
+ 35451 5f32 34 .uleb128 0x34
+ 35452 5f33 980D0000 .long 0xd98
+
GAS LISTING /tmp/ccMa7HLZ.s page 960
+
+
+ 35453 5f37 03 .byte 0x3
+ 35454 5f38 91 .byte 0x91
+ 35455 5f39 E057 .sleb128 -5152
+ 35456 5f3b 34 .uleb128 0x34
+ 35457 5f3c A40D0000 .long 0xda4
+ 35458 5f40 03 .byte 0x3
+ 35459 5f41 91 .byte 0x91
+ 35460 5f42 D057 .sleb128 -5168
+ 35461 5f44 34 .uleb128 0x34
+ 35462 5f45 AF0D0000 .long 0xdaf
+ 35463 5f49 03 .byte 0x3
+ 35464 5f4a 91 .byte 0x91
+ 35465 5f4b C057 .sleb128 -5184
+ 35466 5f4d 34 .uleb128 0x34
+ 35467 5f4e BB0D0000 .long 0xdbb
+ 35468 5f52 03 .byte 0x3
+ 35469 5f53 91 .byte 0x91
+ 35470 5f54 EC6F .sleb128 -2068
+ 35471 5f56 00 .byte 0x0
+ 35472 5f57 00 .byte 0x0
+ 35473 5f58 00 .byte 0x0
+ 35474 5f59 00 .byte 0x0
+ 35475 5f5a 36 .uleb128 0x36
+ 35476 5f5b 00000000 .quad .LBB1371
+ 35476 00000000
+ 35477 5f63 00000000 .quad .LBE1371
+ 35477 00000000
+ 35478 5f6b 795F0000 .long 0x5f79
+ 35479 5f6f 34 .uleb128 0x34
+ 35480 5f70 280C0000 .long 0xc28
+ 35481 5f74 03 .byte 0x3
+ 35482 5f75 91 .byte 0x91
+ 35483 5f76 B056 .sleb128 -5328
+ 35484 5f78 00 .byte 0x0
+ 35485 5f79 31 .uleb128 0x31
+ 35486 5f7a 520E0000 .long 0xe52
+ 35487 5f7e 00000000 .quad .LBB1372
+ 35487 00000000
+ 35488 5f86 00000000 .quad .LBE1372
+ 35488 00000000
+ 35489 5f8e 02 .byte 0x2
+ 35490 5f8f 9606 .value 0x696
+ 35491 5f91 A85F0000 .long 0x5fa8
+ 35492 5f95 32 .uleb128 0x32
+ 35493 5f96 6D0E0000 .long 0xe6d
+ 35494 5f9a 03 .byte 0x3
+ 35495 5f9b 91 .byte 0x91
+ 35496 5f9c F06F .sleb128 -2064
+ 35497 5f9e 32 .uleb128 0x32
+ 35498 5f9f 630E0000 .long 0xe63
+ 35499 5fa3 03 .byte 0x3
+ 35500 5fa4 91 .byte 0x91
+ 35501 5fa5 8070 .sleb128 -2048
+ 35502 5fa7 00 .byte 0x0
+ 35503 5fa8 36 .uleb128 0x36
+ 35504 5fa9 00000000 .quad .LBB1374
+ 35504 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 961
+
+
+ 35505 5fb1 00000000 .quad .LBE1374
+ 35505 00000000
+ 35506 5fb9 C75F0000 .long 0x5fc7
+ 35507 5fbd 34 .uleb128 0x34
+ 35508 5fbe 380C0000 .long 0xc38
+ 35509 5fc2 03 .byte 0x3
+ 35510 5fc3 91 .byte 0x91
+ 35511 5fc4 A056 .sleb128 -5344
+ 35512 5fc6 00 .byte 0x0
+ 35513 5fc7 31 .uleb128 0x31
+ 35514 5fc8 780E0000 .long 0xe78
+ 35515 5fcc 00000000 .quad .LBB1375
+ 35515 00000000
+ 35516 5fd4 00000000 .quad .LBE1375
+ 35516 00000000
+ 35517 5fdc 02 .byte 0x2
+ 35518 5fdd 9806 .value 0x698
+ 35519 5fdf 08600000 .long 0x6008
+ 35520 5fe3 32 .uleb128 0x32
+ 35521 5fe4 8A0E0000 .long 0xe8a
+ 35522 5fe8 03 .byte 0x3
+ 35523 5fe9 91 .byte 0x91
+ 35524 5fea 9070 .sleb128 -2032
+ 35525 5fec 33 .uleb128 0x33
+ 35526 5fed 00000000 .quad .LBB1376
+ 35526 00000000
+ 35527 5ff5 00000000 .quad .LBE1376
+ 35527 00000000
+ 35528 5ffd 34 .uleb128 0x34
+ 35529 5ffe 960E0000 .long 0xe96
+ 35530 6002 03 .byte 0x3
+ 35531 6003 91 .byte 0x91
+ 35532 6004 F057 .sleb128 -5136
+ 35533 6006 00 .byte 0x0
+ 35534 6007 00 .byte 0x0
+ 35535 6008 33 .uleb128 0x33
+ 35536 6009 00000000 .quad .LBB1377
+ 35536 00000000
+ 35537 6011 00000000 .quad .LBE1377
+ 35537 00000000
+ 35538 6019 34 .uleb128 0x34
+ 35539 601a 440C0000 .long 0xc44
+ 35540 601e 03 .byte 0x3
+ 35541 601f 91 .byte 0x91
+ 35542 6020 9056 .sleb128 -5360
+ 35543 6022 00 .byte 0x0
+ 35544 6023 00 .byte 0x0
+ 35545 6024 00 .byte 0x0
+ 35546 6025 31 .uleb128 0x31
+ 35547 6026 780E0000 .long 0xe78
+ 35548 602a 00000000 .quad .LBB1378
+ 35548 00000000
+ 35549 6032 00000000 .quad .LBE1378
+ 35549 00000000
+ 35550 603a 02 .byte 0x2
+ 35551 603b 2A07 .value 0x72a
+ 35552 603d 66600000 .long 0x6066
+
GAS LISTING /tmp/ccMa7HLZ.s page 962
+
+
+ 35553 6041 32 .uleb128 0x32
+ 35554 6042 8A0E0000 .long 0xe8a
+ 35555 6046 03 .byte 0x3
+ 35556 6047 91 .byte 0x91
+ 35557 6048 A070 .sleb128 -2016
+ 35558 604a 33 .uleb128 0x33
+ 35559 604b 00000000 .quad .LBB1379
+ 35559 00000000
+ 35560 6053 00000000 .quad .LBE1379
+ 35560 00000000
+ 35561 605b 34 .uleb128 0x34
+ 35562 605c 960E0000 .long 0xe96
+ 35563 6060 03 .byte 0x3
+ 35564 6061 91 .byte 0x91
+ 35565 6062 8058 .sleb128 -5120
+ 35566 6064 00 .byte 0x0
+ 35567 6065 00 .byte 0x0
+ 35568 6066 31 .uleb128 0x31
+ 35569 6067 C5480000 .long 0x48c5
+ 35570 606b 00000000 .quad .LBB1380
+ 35570 00000000
+ 35571 6073 00000000 .quad .LBE1380
+ 35571 00000000
+ 35572 607b 02 .byte 0x2
+ 35573 607c 3207 .value 0x732
+ 35574 607e 2E610000 .long 0x612e
+ 35575 6082 32 .uleb128 0x32
+ 35576 6083 E3480000 .long 0x48e3
+ 35577 6087 03 .byte 0x3
+ 35578 6088 91 .byte 0x91
+ 35579 6089 BC70 .sleb128 -1988
+ 35580 608b 32 .uleb128 0x32
+ 35581 608c D7480000 .long 0x48d7
+ 35582 6090 03 .byte 0x3
+ 35583 6091 91 .byte 0x91
+ 35584 6092 C070 .sleb128 -1984
+ 35585 6094 33 .uleb128 0x33
+ 35586 6095 00000000 .quad .LBB1381
+ 35586 00000000
+ 35587 609d 00000000 .quad .LBE1381
+ 35587 00000000
+ 35588 60a5 34 .uleb128 0x34
+ 35589 60a6 EF480000 .long 0x48ef
+ 35590 60aa 03 .byte 0x3
+ 35591 60ab 91 .byte 0x91
+ 35592 60ac A058 .sleb128 -5088
+ 35593 60ae 34 .uleb128 0x34
+ 35594 60af F9480000 .long 0x48f9
+ 35595 60b3 03 .byte 0x3
+ 35596 60b4 91 .byte 0x91
+ 35597 60b5 E070 .sleb128 -1952
+ 35598 60b7 34 .uleb128 0x34
+ 35599 60b8 05490000 .long 0x4905
+ 35600 60bc 03 .byte 0x3
+ 35601 60bd 91 .byte 0x91
+ 35602 60be DC70 .sleb128 -1956
+ 35603 60c0 31 .uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s page 963
+
+
+ 35604 60c1 12490000 .long 0x4912
+ 35605 60c5 00000000 .quad .LBB1382
+ 35605 00000000
+ 35606 60cd 00000000 .quad .LBE1382
+ 35606 00000000
+ 35607 60d5 02 .byte 0x2
+ 35608 60d6 5F06 .value 0x65f
+ 35609 60d8 0A610000 .long 0x610a
+ 35610 60dc 32 .uleb128 0x32
+ 35611 60dd 24490000 .long 0x4924
+ 35612 60e1 03 .byte 0x3
+ 35613 60e2 91 .byte 0x91
+ 35614 60e3 E470 .sleb128 -1948
+ 35615 60e5 33 .uleb128 0x33
+ 35616 60e6 00000000 .quad .LBB1383
+ 35616 00000000
+ 35617 60ee 00000000 .quad .LBE1383
+ 35617 00000000
+ 35618 60f6 34 .uleb128 0x34
+ 35619 60f7 2E490000 .long 0x492e
+ 35620 60fb 03 .byte 0x3
+ 35621 60fc 91 .byte 0x91
+ 35622 60fd 9058 .sleb128 -5104
+ 35623 60ff 34 .uleb128 0x34
+ 35624 6100 3A490000 .long 0x493a
+ 35625 6104 03 .byte 0x3
+ 35626 6105 91 .byte 0x91
+ 35627 6106 E870 .sleb128 -1944
+ 35628 6108 00 .byte 0x0
+ 35629 6109 00 .byte 0x0
+ 35630 610a 35 .uleb128 0x35
+ 35631 610b 46490000 .long 0x4946
+ 35632 610f 00000000 .quad .LBB1384
+ 35632 00000000
+ 35633 6117 00000000 .quad .LBE1384
+ 35633 00000000
+ 35634 611f 02 .byte 0x2
+ 35635 6120 6006 .value 0x660
+ 35636 6122 32 .uleb128 0x32
+ 35637 6123 58490000 .long 0x4958
+ 35638 6127 03 .byte 0x3
+ 35639 6128 91 .byte 0x91
+ 35640 6129 EC70 .sleb128 -1940
+ 35641 612b 00 .byte 0x0
+ 35642 612c 00 .byte 0x0
+ 35643 612d 00 .byte 0x0
+ 35644 612e 31 .uleb128 0x31
+ 35645 612f A30E0000 .long 0xea3
+ 35646 6133 00000000 .quad .LBB1386
+ 35646 00000000
+ 35647 613b 00000000 .quad .LBE1386
+ 35647 00000000
+ 35648 6143 02 .byte 0x2
+ 35649 6144 3407 .value 0x734
+ 35650 6146 2E620000 .long 0x622e
+ 35651 614a 32 .uleb128 0x32
+ 35652 614b B50E0000 .long 0xeb5
+
GAS LISTING /tmp/ccMa7HLZ.s page 964
+
+
+ 35653 614f 03 .byte 0x3
+ 35654 6150 91 .byte 0x91
+ 35655 6151 F070 .sleb128 -1936
+ 35656 6153 33 .uleb128 0x33
+ 35657 6154 00000000 .quad .LBB1387
+ 35657 00000000
+ 35658 615c 00000000 .quad .LBE1387
+ 35658 00000000
+ 35659 6164 34 .uleb128 0x34
+ 35660 6165 C10E0000 .long 0xec1
+ 35661 6169 03 .byte 0x3
+ 35662 616a 76 .byte 0x76
+ 35663 616b B04D .sleb128 -6480
+ 35664 616d 31 .uleb128 0x31
+ 35665 616e CE0E0000 .long 0xece
+ 35666 6172 00000000 .quad .LBB1388
+ 35666 00000000
+ 35667 617a 00000000 .quad .LBE1388
+ 35667 00000000
+ 35668 6182 02 .byte 0x2
+ 35669 6183 1F06 .value 0x61f
+ 35670 6185 AE610000 .long 0x61ae
+ 35671 6189 32 .uleb128 0x32
+ 35672 618a E00E0000 .long 0xee0
+ 35673 618e 03 .byte 0x3
+ 35674 618f 91 .byte 0x91
+ 35675 6190 8071 .sleb128 -1920
+ 35676 6192 33 .uleb128 0x33
+ 35677 6193 00000000 .quad .LBB1389
+ 35677 00000000
+ 35678 619b 00000000 .quad .LBE1389
+ 35678 00000000
+ 35679 61a3 34 .uleb128 0x34
+ 35680 61a4 EC0E0000 .long 0xeec
+ 35681 61a8 03 .byte 0x3
+ 35682 61a9 91 .byte 0x91
+ 35683 61aa B058 .sleb128 -5072
+ 35684 61ac 00 .byte 0x0
+ 35685 61ad 00 .byte 0x0
+ 35686 61ae 31 .uleb128 0x31
+ 35687 61af CE0E0000 .long 0xece
+ 35688 61b3 00000000 .quad .LBB1390
+ 35688 00000000
+ 35689 61bb 00000000 .quad .LBE1390
+ 35689 00000000
+ 35690 61c3 02 .byte 0x2
+ 35691 61c4 2006 .value 0x620
+ 35692 61c6 EF610000 .long 0x61ef
+ 35693 61ca 32 .uleb128 0x32
+ 35694 61cb E00E0000 .long 0xee0
+ 35695 61cf 03 .byte 0x3
+ 35696 61d0 91 .byte 0x91
+ 35697 61d1 9071 .sleb128 -1904
+ 35698 61d3 33 .uleb128 0x33
+ 35699 61d4 00000000 .quad .LBB1391
+ 35699 00000000
+ 35700 61dc 00000000 .quad .LBE1391
+
GAS LISTING /tmp/ccMa7HLZ.s page 965
+
+
+ 35700 00000000
+ 35701 61e4 34 .uleb128 0x34
+ 35702 61e5 EC0E0000 .long 0xeec
+ 35703 61e9 03 .byte 0x3
+ 35704 61ea 91 .byte 0x91
+ 35705 61eb C058 .sleb128 -5056
+ 35706 61ed 00 .byte 0x0
+ 35707 61ee 00 .byte 0x0
+ 35708 61ef 35 .uleb128 0x35
+ 35709 61f0 CE0E0000 .long 0xece
+ 35710 61f4 00000000 .quad .LBB1392
+ 35710 00000000
+ 35711 61fc 00000000 .quad .LBE1392
+ 35711 00000000
+ 35712 6204 02 .byte 0x2
+ 35713 6205 2106 .value 0x621
+ 35714 6207 32 .uleb128 0x32
+ 35715 6208 E00E0000 .long 0xee0
+ 35716 620c 03 .byte 0x3
+ 35717 620d 91 .byte 0x91
+ 35718 620e A071 .sleb128 -1888
+ 35719 6210 33 .uleb128 0x33
+ 35720 6211 00000000 .quad .LBB1393
+ 35720 00000000
+ 35721 6219 00000000 .quad .LBE1393
+ 35721 00000000
+ 35722 6221 34 .uleb128 0x34
+ 35723 6222 EC0E0000 .long 0xeec
+ 35724 6226 03 .byte 0x3
+ 35725 6227 91 .byte 0x91
+ 35726 6228 D058 .sleb128 -5040
+ 35727 622a 00 .byte 0x0
+ 35728 622b 00 .byte 0x0
+ 35729 622c 00 .byte 0x0
+ 35730 622d 00 .byte 0x0
+ 35731 622e 31 .uleb128 0x31
+ 35732 622f A30E0000 .long 0xea3
+ 35733 6233 00000000 .quad .LBB1394
+ 35733 00000000
+ 35734 623b 00000000 .quad .LBE1394
+ 35734 00000000
+ 35735 6243 02 .byte 0x2
+ 35736 6244 3607 .value 0x736
+ 35737 6246 2E630000 .long 0x632e
+ 35738 624a 32 .uleb128 0x32
+ 35739 624b B50E0000 .long 0xeb5
+ 35740 624f 03 .byte 0x3
+ 35741 6250 91 .byte 0x91
+ 35742 6251 B071 .sleb128 -1872
+ 35743 6253 33 .uleb128 0x33
+ 35744 6254 00000000 .quad .LBB1395
+ 35744 00000000
+ 35745 625c 00000000 .quad .LBE1395
+ 35745 00000000
+ 35746 6264 34 .uleb128 0x34
+ 35747 6265 C10E0000 .long 0xec1
+ 35748 6269 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 966
+
+
+ 35749 626a 76 .byte 0x76
+ 35750 626b C04D .sleb128 -6464
+ 35751 626d 31 .uleb128 0x31
+ 35752 626e CE0E0000 .long 0xece
+ 35753 6272 00000000 .quad .LBB1396
+ 35753 00000000
+ 35754 627a 00000000 .quad .LBE1396
+ 35754 00000000
+ 35755 6282 02 .byte 0x2
+ 35756 6283 1F06 .value 0x61f
+ 35757 6285 AE620000 .long 0x62ae
+ 35758 6289 32 .uleb128 0x32
+ 35759 628a E00E0000 .long 0xee0
+ 35760 628e 03 .byte 0x3
+ 35761 628f 91 .byte 0x91
+ 35762 6290 C071 .sleb128 -1856
+ 35763 6292 33 .uleb128 0x33
+ 35764 6293 00000000 .quad .LBB1397
+ 35764 00000000
+ 35765 629b 00000000 .quad .LBE1397
+ 35765 00000000
+ 35766 62a3 34 .uleb128 0x34
+ 35767 62a4 EC0E0000 .long 0xeec
+ 35768 62a8 03 .byte 0x3
+ 35769 62a9 91 .byte 0x91
+ 35770 62aa E058 .sleb128 -5024
+ 35771 62ac 00 .byte 0x0
+ 35772 62ad 00 .byte 0x0
+ 35773 62ae 31 .uleb128 0x31
+ 35774 62af CE0E0000 .long 0xece
+ 35775 62b3 00000000 .quad .LBB1398
+ 35775 00000000
+ 35776 62bb 00000000 .quad .LBE1398
+ 35776 00000000
+ 35777 62c3 02 .byte 0x2
+ 35778 62c4 2006 .value 0x620
+ 35779 62c6 EF620000 .long 0x62ef
+ 35780 62ca 32 .uleb128 0x32
+ 35781 62cb E00E0000 .long 0xee0
+ 35782 62cf 03 .byte 0x3
+ 35783 62d0 91 .byte 0x91
+ 35784 62d1 D071 .sleb128 -1840
+ 35785 62d3 33 .uleb128 0x33
+ 35786 62d4 00000000 .quad .LBB1399
+ 35786 00000000
+ 35787 62dc 00000000 .quad .LBE1399
+ 35787 00000000
+ 35788 62e4 34 .uleb128 0x34
+ 35789 62e5 EC0E0000 .long 0xeec
+ 35790 62e9 03 .byte 0x3
+ 35791 62ea 91 .byte 0x91
+ 35792 62eb F058 .sleb128 -5008
+ 35793 62ed 00 .byte 0x0
+ 35794 62ee 00 .byte 0x0
+ 35795 62ef 35 .uleb128 0x35
+ 35796 62f0 CE0E0000 .long 0xece
+ 35797 62f4 00000000 .quad .LBB1400
+
GAS LISTING /tmp/ccMa7HLZ.s page 967
+
+
+ 35797 00000000
+ 35798 62fc 00000000 .quad .LBE1400
+ 35798 00000000
+ 35799 6304 02 .byte 0x2
+ 35800 6305 2106 .value 0x621
+ 35801 6307 32 .uleb128 0x32
+ 35802 6308 E00E0000 .long 0xee0
+ 35803 630c 03 .byte 0x3
+ 35804 630d 91 .byte 0x91
+ 35805 630e E071 .sleb128 -1824
+ 35806 6310 33 .uleb128 0x33
+ 35807 6311 00000000 .quad .LBB1401
+ 35807 00000000
+ 35808 6319 00000000 .quad .LBE1401
+ 35808 00000000
+ 35809 6321 34 .uleb128 0x34
+ 35810 6322 EC0E0000 .long 0xeec
+ 35811 6326 03 .byte 0x3
+ 35812 6327 91 .byte 0x91
+ 35813 6328 8059 .sleb128 -4992
+ 35814 632a 00 .byte 0x0
+ 35815 632b 00 .byte 0x0
+ 35816 632c 00 .byte 0x0
+ 35817 632d 00 .byte 0x0
+ 35818 632e 31 .uleb128 0x31
+ 35819 632f 780E0000 .long 0xe78
+ 35820 6333 00000000 .quad .LBB1402
+ 35820 00000000
+ 35821 633b 00000000 .quad .LBE1402
+ 35821 00000000
+ 35822 6343 02 .byte 0x2
+ 35823 6344 3707 .value 0x737
+ 35824 6346 6F630000 .long 0x636f
+ 35825 634a 32 .uleb128 0x32
+ 35826 634b 8A0E0000 .long 0xe8a
+ 35827 634f 03 .byte 0x3
+ 35828 6350 91 .byte 0x91
+ 35829 6351 F071 .sleb128 -1808
+ 35830 6353 33 .uleb128 0x33
+ 35831 6354 00000000 .quad .LBB1403
+ 35831 00000000
+ 35832 635c 00000000 .quad .LBE1403
+ 35832 00000000
+ 35833 6364 34 .uleb128 0x34
+ 35834 6365 960E0000 .long 0xe96
+ 35835 6369 03 .byte 0x3
+ 35836 636a 91 .byte 0x91
+ 35837 636b 9059 .sleb128 -4976
+ 35838 636d 00 .byte 0x0
+ 35839 636e 00 .byte 0x0
+ 35840 636f 31 .uleb128 0x31
+ 35841 6370 63490000 .long 0x4963
+ 35842 6374 00000000 .quad .LBB1404
+ 35842 00000000
+ 35843 637c 00000000 .quad .LBE1404
+ 35843 00000000
+ 35844 6384 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 968
+
+
+ 35845 6385 3907 .value 0x739
+ 35846 6387 C2630000 .long 0x63c2
+ 35847 638b 32 .uleb128 0x32
+ 35848 638c 7F490000 .long 0x497f
+ 35849 6390 03 .byte 0x3
+ 35850 6391 91 .byte 0x91
+ 35851 6392 8072 .sleb128 -1792
+ 35852 6394 32 .uleb128 0x32
+ 35853 6395 75490000 .long 0x4975
+ 35854 6399 03 .byte 0x3
+ 35855 639a 91 .byte 0x91
+ 35856 639b 9072 .sleb128 -1776
+ 35857 639d 33 .uleb128 0x33
+ 35858 639e 00000000 .quad .LBB1405
+ 35858 00000000
+ 35859 63a6 00000000 .quad .LBE1405
+ 35859 00000000
+ 35860 63ae 34 .uleb128 0x34
+ 35861 63af 89490000 .long 0x4989
+ 35862 63b3 03 .byte 0x3
+ 35863 63b4 91 .byte 0x91
+ 35864 63b5 B059 .sleb128 -4944
+ 35865 63b7 34 .uleb128 0x34
+ 35866 63b8 94490000 .long 0x4994
+ 35867 63bc 03 .byte 0x3
+ 35868 63bd 91 .byte 0x91
+ 35869 63be A059 .sleb128 -4960
+ 35870 63c0 00 .byte 0x0
+ 35871 63c1 00 .byte 0x0
+ 35872 63c2 31 .uleb128 0x31
+ 35873 63c3 A0490000 .long 0x49a0
+ 35874 63c7 00000000 .quad .LBB1406
+ 35874 00000000
+ 35875 63cf 00000000 .quad .LBE1406
+ 35875 00000000
+ 35876 63d7 02 .byte 0x2
+ 35877 63d8 3D07 .value 0x73d
+ 35878 63da 15640000 .long 0x6415
+ 35879 63de 32 .uleb128 0x32
+ 35880 63df BC490000 .long 0x49bc
+ 35881 63e3 03 .byte 0x3
+ 35882 63e4 91 .byte 0x91
+ 35883 63e5 A072 .sleb128 -1760
+ 35884 63e7 32 .uleb128 0x32
+ 35885 63e8 B2490000 .long 0x49b2
+ 35886 63ec 03 .byte 0x3
+ 35887 63ed 91 .byte 0x91
+ 35888 63ee B072 .sleb128 -1744
+ 35889 63f0 33 .uleb128 0x33
+ 35890 63f1 00000000 .quad .LBB1407
+ 35890 00000000
+ 35891 63f9 00000000 .quad .LBE1407
+ 35891 00000000
+ 35892 6401 34 .uleb128 0x34
+ 35893 6402 C6490000 .long 0x49c6
+ 35894 6406 03 .byte 0x3
+ 35895 6407 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 969
+
+
+ 35896 6408 D059 .sleb128 -4912
+ 35897 640a 34 .uleb128 0x34
+ 35898 640b D1490000 .long 0x49d1
+ 35899 640f 03 .byte 0x3
+ 35900 6410 91 .byte 0x91
+ 35901 6411 C059 .sleb128 -4928
+ 35902 6413 00 .byte 0x0
+ 35903 6414 00 .byte 0x0
+ 35904 6415 31 .uleb128 0x31
+ 35905 6416 A30E0000 .long 0xea3
+ 35906 641a 00000000 .quad .LBB1408
+ 35906 00000000
+ 35907 6422 00000000 .quad .LBE1408
+ 35907 00000000
+ 35908 642a 02 .byte 0x2
+ 35909 642b 4007 .value 0x740
+ 35910 642d 15650000 .long 0x6515
+ 35911 6431 32 .uleb128 0x32
+ 35912 6432 B50E0000 .long 0xeb5
+ 35913 6436 03 .byte 0x3
+ 35914 6437 91 .byte 0x91
+ 35915 6438 C072 .sleb128 -1728
+ 35916 643a 33 .uleb128 0x33
+ 35917 643b 00000000 .quad .LBB1409
+ 35917 00000000
+ 35918 6443 00000000 .quad .LBE1409
+ 35918 00000000
+ 35919 644b 34 .uleb128 0x34
+ 35920 644c C10E0000 .long 0xec1
+ 35921 6450 03 .byte 0x3
+ 35922 6451 76 .byte 0x76
+ 35923 6452 D04D .sleb128 -6448
+ 35924 6454 31 .uleb128 0x31
+ 35925 6455 CE0E0000 .long 0xece
+ 35926 6459 00000000 .quad .LBB1410
+ 35926 00000000
+ 35927 6461 00000000 .quad .LBE1410
+ 35927 00000000
+ 35928 6469 02 .byte 0x2
+ 35929 646a 1F06 .value 0x61f
+ 35930 646c 95640000 .long 0x6495
+ 35931 6470 32 .uleb128 0x32
+ 35932 6471 E00E0000 .long 0xee0
+ 35933 6475 03 .byte 0x3
+ 35934 6476 91 .byte 0x91
+ 35935 6477 D072 .sleb128 -1712
+ 35936 6479 33 .uleb128 0x33
+ 35937 647a 00000000 .quad .LBB1411
+ 35937 00000000
+ 35938 6482 00000000 .quad .LBE1411
+ 35938 00000000
+ 35939 648a 34 .uleb128 0x34
+ 35940 648b EC0E0000 .long 0xeec
+ 35941 648f 03 .byte 0x3
+ 35942 6490 91 .byte 0x91
+ 35943 6491 E059 .sleb128 -4896
+ 35944 6493 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 970
+
+
+ 35945 6494 00 .byte 0x0
+ 35946 6495 31 .uleb128 0x31
+ 35947 6496 CE0E0000 .long 0xece
+ 35948 649a 00000000 .quad .LBB1412
+ 35948 00000000
+ 35949 64a2 00000000 .quad .LBE1412
+ 35949 00000000
+ 35950 64aa 02 .byte 0x2
+ 35951 64ab 2006 .value 0x620
+ 35952 64ad D6640000 .long 0x64d6
+ 35953 64b1 32 .uleb128 0x32
+ 35954 64b2 E00E0000 .long 0xee0
+ 35955 64b6 03 .byte 0x3
+ 35956 64b7 91 .byte 0x91
+ 35957 64b8 E072 .sleb128 -1696
+ 35958 64ba 33 .uleb128 0x33
+ 35959 64bb 00000000 .quad .LBB1413
+ 35959 00000000
+ 35960 64c3 00000000 .quad .LBE1413
+ 35960 00000000
+ 35961 64cb 34 .uleb128 0x34
+ 35962 64cc EC0E0000 .long 0xeec
+ 35963 64d0 03 .byte 0x3
+ 35964 64d1 91 .byte 0x91
+ 35965 64d2 F059 .sleb128 -4880
+ 35966 64d4 00 .byte 0x0
+ 35967 64d5 00 .byte 0x0
+ 35968 64d6 35 .uleb128 0x35
+ 35969 64d7 CE0E0000 .long 0xece
+ 35970 64db 00000000 .quad .LBB1414
+ 35970 00000000
+ 35971 64e3 00000000 .quad .LBE1414
+ 35971 00000000
+ 35972 64eb 02 .byte 0x2
+ 35973 64ec 2106 .value 0x621
+ 35974 64ee 32 .uleb128 0x32
+ 35975 64ef E00E0000 .long 0xee0
+ 35976 64f3 03 .byte 0x3
+ 35977 64f4 91 .byte 0x91
+ 35978 64f5 F072 .sleb128 -1680
+ 35979 64f7 33 .uleb128 0x33
+ 35980 64f8 00000000 .quad .LBB1415
+ 35980 00000000
+ 35981 6500 00000000 .quad .LBE1415
+ 35981 00000000
+ 35982 6508 34 .uleb128 0x34
+ 35983 6509 EC0E0000 .long 0xeec
+ 35984 650d 03 .byte 0x3
+ 35985 650e 91 .byte 0x91
+ 35986 650f 805A .sleb128 -4864
+ 35987 6511 00 .byte 0x0
+ 35988 6512 00 .byte 0x0
+ 35989 6513 00 .byte 0x0
+ 35990 6514 00 .byte 0x0
+ 35991 6515 31 .uleb128 0x31
+ 35992 6516 A30E0000 .long 0xea3
+ 35993 651a 00000000 .quad .LBB1416
+
GAS LISTING /tmp/ccMa7HLZ.s page 971
+
+
+ 35993 00000000
+ 35994 6522 00000000 .quad .LBE1416
+ 35994 00000000
+ 35995 652a 02 .byte 0x2
+ 35996 652b 4107 .value 0x741
+ 35997 652d 15660000 .long 0x6615
+ 35998 6531 32 .uleb128 0x32
+ 35999 6532 B50E0000 .long 0xeb5
+ 36000 6536 03 .byte 0x3
+ 36001 6537 91 .byte 0x91
+ 36002 6538 8073 .sleb128 -1664
+ 36003 653a 33 .uleb128 0x33
+ 36004 653b 00000000 .quad .LBB1417
+ 36004 00000000
+ 36005 6543 00000000 .quad .LBE1417
+ 36005 00000000
+ 36006 654b 34 .uleb128 0x34
+ 36007 654c C10E0000 .long 0xec1
+ 36008 6550 03 .byte 0x3
+ 36009 6551 76 .byte 0x76
+ 36010 6552 E04D .sleb128 -6432
+ 36011 6554 31 .uleb128 0x31
+ 36012 6555 CE0E0000 .long 0xece
+ 36013 6559 00000000 .quad .LBB1418
+ 36013 00000000
+ 36014 6561 00000000 .quad .LBE1418
+ 36014 00000000
+ 36015 6569 02 .byte 0x2
+ 36016 656a 1F06 .value 0x61f
+ 36017 656c 95650000 .long 0x6595
+ 36018 6570 32 .uleb128 0x32
+ 36019 6571 E00E0000 .long 0xee0
+ 36020 6575 03 .byte 0x3
+ 36021 6576 91 .byte 0x91
+ 36022 6577 9073 .sleb128 -1648
+ 36023 6579 33 .uleb128 0x33
+ 36024 657a 00000000 .quad .LBB1419
+ 36024 00000000
+ 36025 6582 00000000 .quad .LBE1419
+ 36025 00000000
+ 36026 658a 34 .uleb128 0x34
+ 36027 658b EC0E0000 .long 0xeec
+ 36028 658f 03 .byte 0x3
+ 36029 6590 91 .byte 0x91
+ 36030 6591 905A .sleb128 -4848
+ 36031 6593 00 .byte 0x0
+ 36032 6594 00 .byte 0x0
+ 36033 6595 31 .uleb128 0x31
+ 36034 6596 CE0E0000 .long 0xece
+ 36035 659a 00000000 .quad .LBB1420
+ 36035 00000000
+ 36036 65a2 00000000 .quad .LBE1420
+ 36036 00000000
+ 36037 65aa 02 .byte 0x2
+ 36038 65ab 2006 .value 0x620
+ 36039 65ad D6650000 .long 0x65d6
+ 36040 65b1 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 972
+
+
+ 36041 65b2 E00E0000 .long 0xee0
+ 36042 65b6 03 .byte 0x3
+ 36043 65b7 91 .byte 0x91
+ 36044 65b8 A073 .sleb128 -1632
+ 36045 65ba 33 .uleb128 0x33
+ 36046 65bb 00000000 .quad .LBB1421
+ 36046 00000000
+ 36047 65c3 00000000 .quad .LBE1421
+ 36047 00000000
+ 36048 65cb 34 .uleb128 0x34
+ 36049 65cc EC0E0000 .long 0xeec
+ 36050 65d0 03 .byte 0x3
+ 36051 65d1 91 .byte 0x91
+ 36052 65d2 A05A .sleb128 -4832
+ 36053 65d4 00 .byte 0x0
+ 36054 65d5 00 .byte 0x0
+ 36055 65d6 35 .uleb128 0x35
+ 36056 65d7 CE0E0000 .long 0xece
+ 36057 65db 00000000 .quad .LBB1422
+ 36057 00000000
+ 36058 65e3 00000000 .quad .LBE1422
+ 36058 00000000
+ 36059 65eb 02 .byte 0x2
+ 36060 65ec 2106 .value 0x621
+ 36061 65ee 32 .uleb128 0x32
+ 36062 65ef E00E0000 .long 0xee0
+ 36063 65f3 03 .byte 0x3
+ 36064 65f4 91 .byte 0x91
+ 36065 65f5 B073 .sleb128 -1616
+ 36066 65f7 33 .uleb128 0x33
+ 36067 65f8 00000000 .quad .LBB1423
+ 36067 00000000
+ 36068 6600 00000000 .quad .LBE1423
+ 36068 00000000
+ 36069 6608 34 .uleb128 0x34
+ 36070 6609 EC0E0000 .long 0xeec
+ 36071 660d 03 .byte 0x3
+ 36072 660e 91 .byte 0x91
+ 36073 660f B05A .sleb128 -4816
+ 36074 6611 00 .byte 0x0
+ 36075 6612 00 .byte 0x0
+ 36076 6613 00 .byte 0x0
+ 36077 6614 00 .byte 0x0
+ 36078 6615 31 .uleb128 0x31
+ 36079 6616 D10B0000 .long 0xbd1
+ 36080 661a 00000000 .quad .LBB1424
+ 36080 00000000
+ 36081 6622 00000000 .quad .LBE1424
+ 36081 00000000
+ 36082 662a 02 .byte 0x2
+ 36083 662b 4207 .value 0x742
+ 36084 662d BB6A0000 .long 0x6abb
+ 36085 6631 32 .uleb128 0x32
+ 36086 6632 EF0B0000 .long 0xbef
+ 36087 6636 03 .byte 0x3
+ 36088 6637 91 .byte 0x91
+ 36089 6638 CC73 .sleb128 -1588
+
GAS LISTING /tmp/ccMa7HLZ.s page 973
+
+
+ 36090 663a 32 .uleb128 0x32
+ 36091 663b E30B0000 .long 0xbe3
+ 36092 663f 03 .byte 0x3
+ 36093 6640 91 .byte 0x91
+ 36094 6641 D073 .sleb128 -1584
+ 36095 6643 33 .uleb128 0x33
+ 36096 6644 00000000 .quad .LBB1425
+ 36096 00000000
+ 36097 664c 00000000 .quad .LBE1425
+ 36097 00000000
+ 36098 6654 34 .uleb128 0x34
+ 36099 6655 FB0B0000 .long 0xbfb
+ 36100 6659 03 .byte 0x3
+ 36101 665a 76 .byte 0x76
+ 36102 665b 804E .sleb128 -6400
+ 36103 665d 34 .uleb128 0x34
+ 36104 665e 070C0000 .long 0xc07
+ 36105 6662 03 .byte 0x3
+ 36106 6663 76 .byte 0x76
+ 36107 6664 F04D .sleb128 -6416
+ 36108 6666 31 .uleb128 0x31
+ 36109 6667 500C0000 .long 0xc50
+ 36110 666b 00000000 .quad .LBB1426
+ 36110 00000000
+ 36111 6673 00000000 .quad .LBE1426
+ 36111 00000000
+ 36112 667b 02 .byte 0x2
+ 36113 667c 9106 .value 0x691
+ 36114 667e B9660000 .long 0x66b9
+ 36115 6682 32 .uleb128 0x32
+ 36116 6683 7A0C0000 .long 0xc7a
+ 36117 6687 03 .byte 0x3
+ 36118 6688 91 .byte 0x91
+ 36119 6689 E873 .sleb128 -1560
+ 36120 668b 32 .uleb128 0x32
+ 36121 668c 6E0C0000 .long 0xc6e
+ 36122 6690 03 .byte 0x3
+ 36123 6691 91 .byte 0x91
+ 36124 6692 EC73 .sleb128 -1556
+ 36125 6694 32 .uleb128 0x32
+ 36126 6695 620C0000 .long 0xc62
+ 36127 6699 03 .byte 0x3
+ 36128 669a 91 .byte 0x91
+ 36129 669b F073 .sleb128 -1552
+ 36130 669d 33 .uleb128 0x33
+ 36131 669e 00000000 .quad .LBB1427
+ 36131 00000000
+ 36132 66a6 00000000 .quad .LBE1427
+ 36132 00000000
+ 36133 66ae 34 .uleb128 0x34
+ 36134 66af 860C0000 .long 0xc86
+ 36135 66b3 03 .byte 0x3
+ 36136 66b4 91 .byte 0x91
+ 36137 66b5 805B .sleb128 -4736
+ 36138 66b7 00 .byte 0x0
+ 36139 66b8 00 .byte 0x0
+ 36140 66b9 31 .uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s page 974
+
+
+ 36141 66ba 910C0000 .long 0xc91
+ 36142 66be 00000000 .quad .LBB1428
+ 36142 00000000
+ 36143 66c6 00000000 .quad .LBE1428
+ 36143 00000000
+ 36144 66ce 02 .byte 0x2
+ 36145 66cf 9206 .value 0x692
+ 36146 66d1 29690000 .long 0x6929
+ 36147 66d5 32 .uleb128 0x32
+ 36148 66d6 A30C0000 .long 0xca3
+ 36149 66da 03 .byte 0x3
+ 36150 66db 91 .byte 0x91
+ 36151 66dc 8074 .sleb128 -1536
+ 36152 66de 35 .uleb128 0x35
+ 36153 66df B00C0000 .long 0xcb0
+ 36154 66e3 00000000 .quad .LBB1430
+ 36154 00000000
+ 36155 66eb 00000000 .quad .LBE1430
+ 36155 00000000
+ 36156 66f3 02 .byte 0x2
+ 36157 66f4 7D03 .value 0x37d
+ 36158 66f6 32 .uleb128 0x32
+ 36159 66f7 CE0C0000 .long 0xcce
+ 36160 66fb 03 .byte 0x3
+ 36161 66fc 91 .byte 0x91
+ 36162 66fd 9874 .sleb128 -1512
+ 36163 66ff 32 .uleb128 0x32
+ 36164 6700 C20C0000 .long 0xcc2
+ 36165 6704 03 .byte 0x3
+ 36166 6705 91 .byte 0x91
+ 36167 6706 A074 .sleb128 -1504
+ 36168 6708 33 .uleb128 0x33
+ 36169 6709 00000000 .quad .LBB1431
+ 36169 00000000
+ 36170 6711 00000000 .quad .LBE1431
+ 36170 00000000
+ 36171 6719 34 .uleb128 0x34
+ 36172 671a DA0C0000 .long 0xcda
+ 36173 671e 03 .byte 0x3
+ 36174 671f 91 .byte 0x91
+ 36175 6720 F074 .sleb128 -1424
+ 36176 6722 34 .uleb128 0x34
+ 36177 6723 E50C0000 .long 0xce5
+ 36178 6727 03 .byte 0x3
+ 36179 6728 91 .byte 0x91
+ 36180 6729 E074 .sleb128 -1440
+ 36181 672b 34 .uleb128 0x34
+ 36182 672c F00C0000 .long 0xcf0
+ 36183 6730 03 .byte 0x3
+ 36184 6731 91 .byte 0x91
+ 36185 6732 D074 .sleb128 -1456
+ 36186 6734 34 .uleb128 0x34
+ 36187 6735 FC0C0000 .long 0xcfc
+ 36188 6739 03 .byte 0x3
+ 36189 673a 91 .byte 0x91
+ 36190 673b C074 .sleb128 -1472
+ 36191 673d 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 975
+
+
+ 36192 673e 080D0000 .long 0xd08
+ 36193 6742 03 .byte 0x3
+ 36194 6743 91 .byte 0x91
+ 36195 6744 BC74 .sleb128 -1476
+ 36196 6746 31 .uleb128 0x31
+ 36197 6747 1F0D0000 .long 0xd1f
+ 36198 674b 00000000 .quad .LBB1432
+ 36198 00000000
+ 36199 6753 00000000 .quad .LBE1432
+ 36199 00000000
+ 36200 675b 02 .byte 0x2
+ 36201 675c 5603 .value 0x356
+ 36202 675e 75670000 .long 0x6775
+ 36203 6762 32 .uleb128 0x32
+ 36204 6763 3A0D0000 .long 0xd3a
+ 36205 6767 03 .byte 0x3
+ 36206 6768 91 .byte 0x91
+ 36207 6769 8075 .sleb128 -1408
+ 36208 676b 32 .uleb128 0x32
+ 36209 676c 300D0000 .long 0xd30
+ 36210 6770 03 .byte 0x3
+ 36211 6771 91 .byte 0x91
+ 36212 6772 9075 .sleb128 -1392
+ 36213 6774 00 .byte 0x0
+ 36214 6775 31 .uleb128 0x31
+ 36215 6776 450D0000 .long 0xd45
+ 36216 677a 00000000 .quad .LBB1434
+ 36216 00000000
+ 36217 6782 00000000 .quad .LBE1434
+ 36217 00000000
+ 36218 678a 02 .byte 0x2
+ 36219 678b 5E03 .value 0x35e
+ 36220 678d A4670000 .long 0x67a4
+ 36221 6791 32 .uleb128 0x32
+ 36222 6792 620D0000 .long 0xd62
+ 36223 6796 03 .byte 0x3
+ 36224 6797 91 .byte 0x91
+ 36225 6798 A075 .sleb128 -1376
+ 36226 679a 32 .uleb128 0x32
+ 36227 679b 570D0000 .long 0xd57
+ 36228 679f 03 .byte 0x3
+ 36229 67a0 91 .byte 0x91
+ 36230 67a1 B075 .sleb128 -1360
+ 36231 67a3 00 .byte 0x0
+ 36232 67a4 31 .uleb128 0x31
+ 36233 67a5 6E0D0000 .long 0xd6e
+ 36234 67a9 00000000 .quad .LBB1436
+ 36234 00000000
+ 36235 67b1 00000000 .quad .LBE1436
+ 36235 00000000
+ 36236 67b9 02 .byte 0x2
+ 36237 67ba 6403 .value 0x364
+ 36238 67bc 09680000 .long 0x6809
+ 36239 67c0 32 .uleb128 0x32
+ 36240 67c1 8C0D0000 .long 0xd8c
+ 36241 67c5 03 .byte 0x3
+ 36242 67c6 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 976
+
+
+ 36243 67c7 C075 .sleb128 -1344
+ 36244 67c9 32 .uleb128 0x32
+ 36245 67ca 800D0000 .long 0xd80
+ 36246 67ce 03 .byte 0x3
+ 36247 67cf 91 .byte 0x91
+ 36248 67d0 D075 .sleb128 -1328
+ 36249 67d2 33 .uleb128 0x33
+ 36250 67d3 00000000 .quad .LBB1437
+ 36250 00000000
+ 36251 67db 00000000 .quad .LBE1437
+ 36251 00000000
+ 36252 67e3 34 .uleb128 0x34
+ 36253 67e4 980D0000 .long 0xd98
+ 36254 67e8 03 .byte 0x3
+ 36255 67e9 91 .byte 0x91
+ 36256 67ea B05B .sleb128 -4688
+ 36257 67ec 34 .uleb128 0x34
+ 36258 67ed A40D0000 .long 0xda4
+ 36259 67f1 03 .byte 0x3
+ 36260 67f2 91 .byte 0x91
+ 36261 67f3 A05B .sleb128 -4704
+ 36262 67f5 34 .uleb128 0x34
+ 36263 67f6 AF0D0000 .long 0xdaf
+ 36264 67fa 03 .byte 0x3
+ 36265 67fb 91 .byte 0x91
+ 36266 67fc 905B .sleb128 -4720
+ 36267 67fe 34 .uleb128 0x34
+ 36268 67ff BB0D0000 .long 0xdbb
+ 36269 6803 03 .byte 0x3
+ 36270 6804 91 .byte 0x91
+ 36271 6805 EC75 .sleb128 -1300
+ 36272 6807 00 .byte 0x0
+ 36273 6808 00 .byte 0x0
+ 36274 6809 31 .uleb128 0x31
+ 36275 680a C70D0000 .long 0xdc7
+ 36276 680e 00000000 .quad .LBB1438
+ 36276 00000000
+ 36277 6816 00000000 .quad .LBE1438
+ 36277 00000000
+ 36278 681e 02 .byte 0x2
+ 36279 681f 6603 .value 0x366
+ 36280 6821 38680000 .long 0x6838
+ 36281 6825 32 .uleb128 0x32
+ 36282 6826 E20D0000 .long 0xde2
+ 36283 682a 03 .byte 0x3
+ 36284 682b 91 .byte 0x91
+ 36285 682c F075 .sleb128 -1296
+ 36286 682e 32 .uleb128 0x32
+ 36287 682f D80D0000 .long 0xdd8
+ 36288 6833 03 .byte 0x3
+ 36289 6834 91 .byte 0x91
+ 36290 6835 8076 .sleb128 -1280
+ 36291 6837 00 .byte 0x0
+ 36292 6838 31 .uleb128 0x31
+ 36293 6839 6E0D0000 .long 0xd6e
+ 36294 683d 00000000 .quad .LBB1440
+ 36294 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 977
+
+
+ 36295 6845 00000000 .quad .LBE1440
+ 36295 00000000
+ 36296 684d 02 .byte 0x2
+ 36297 684e 6803 .value 0x368
+ 36298 6850 9D680000 .long 0x689d
+ 36299 6854 32 .uleb128 0x32
+ 36300 6855 8C0D0000 .long 0xd8c
+ 36301 6859 03 .byte 0x3
+ 36302 685a 91 .byte 0x91
+ 36303 685b 9076 .sleb128 -1264
+ 36304 685d 32 .uleb128 0x32
+ 36305 685e 800D0000 .long 0xd80
+ 36306 6862 03 .byte 0x3
+ 36307 6863 91 .byte 0x91
+ 36308 6864 A076 .sleb128 -1248
+ 36309 6866 33 .uleb128 0x33
+ 36310 6867 00000000 .quad .LBB1441
+ 36310 00000000
+ 36311 686f 00000000 .quad .LBE1441
+ 36311 00000000
+ 36312 6877 34 .uleb128 0x34
+ 36313 6878 980D0000 .long 0xd98
+ 36314 687c 03 .byte 0x3
+ 36315 687d 91 .byte 0x91
+ 36316 687e E05B .sleb128 -4640
+ 36317 6880 34 .uleb128 0x34
+ 36318 6881 A40D0000 .long 0xda4
+ 36319 6885 03 .byte 0x3
+ 36320 6886 91 .byte 0x91
+ 36321 6887 D05B .sleb128 -4656
+ 36322 6889 34 .uleb128 0x34
+ 36323 688a AF0D0000 .long 0xdaf
+ 36324 688e 03 .byte 0x3
+ 36325 688f 91 .byte 0x91
+ 36326 6890 C05B .sleb128 -4672
+ 36327 6892 34 .uleb128 0x34
+ 36328 6893 BB0D0000 .long 0xdbb
+ 36329 6897 03 .byte 0x3
+ 36330 6898 91 .byte 0x91
+ 36331 6899 BC76 .sleb128 -1220
+ 36332 689b 00 .byte 0x0
+ 36333 689c 00 .byte 0x0
+ 36334 689d 31 .uleb128 0x31
+ 36335 689e C70D0000 .long 0xdc7
+ 36336 68a2 00000000 .quad .LBB1442
+ 36336 00000000
+ 36337 68aa 00000000 .quad .LBE1442
+ 36337 00000000
+ 36338 68b2 02 .byte 0x2
+ 36339 68b3 6A03 .value 0x36a
+ 36340 68b5 CC680000 .long 0x68cc
+ 36341 68b9 32 .uleb128 0x32
+ 36342 68ba E20D0000 .long 0xde2
+ 36343 68be 03 .byte 0x3
+ 36344 68bf 91 .byte 0x91
+ 36345 68c0 C076 .sleb128 -1216
+ 36346 68c2 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 978
+
+
+ 36347 68c3 D80D0000 .long 0xdd8
+ 36348 68c7 03 .byte 0x3
+ 36349 68c8 91 .byte 0x91
+ 36350 68c9 D076 .sleb128 -1200
+ 36351 68cb 00 .byte 0x0
+ 36352 68cc 31 .uleb128 0x31
+ 36353 68cd ED0D0000 .long 0xded
+ 36354 68d1 00000000 .quad .LBB1444
+ 36354 00000000
+ 36355 68d9 00000000 .quad .LBE1444
+ 36355 00000000
+ 36356 68e1 02 .byte 0x2
+ 36357 68e2 6C03 .value 0x36c
+ 36358 68e4 FB680000 .long 0x68fb
+ 36359 68e8 32 .uleb128 0x32
+ 36360 68e9 0A0E0000 .long 0xe0a
+ 36361 68ed 03 .byte 0x3
+ 36362 68ee 91 .byte 0x91
+ 36363 68ef E076 .sleb128 -1184
+ 36364 68f1 32 .uleb128 0x32
+ 36365 68f2 FF0D0000 .long 0xdff
+ 36366 68f6 03 .byte 0x3
+ 36367 68f7 91 .byte 0x91
+ 36368 68f8 F076 .sleb128 -1168
+ 36369 68fa 00 .byte 0x0
+ 36370 68fb 35 .uleb128 0x35
+ 36371 68fc 1F0D0000 .long 0xd1f
+ 36372 6900 00000000 .quad .LBB1446
+ 36372 00000000
+ 36373 6908 00000000 .quad .LBE1446
+ 36373 00000000
+ 36374 6910 02 .byte 0x2
+ 36375 6911 6E03 .value 0x36e
+ 36376 6913 32 .uleb128 0x32
+ 36377 6914 3A0D0000 .long 0xd3a
+ 36378 6918 03 .byte 0x3
+ 36379 6919 91 .byte 0x91
+ 36380 691a 8077 .sleb128 -1152
+ 36381 691c 32 .uleb128 0x32
+ 36382 691d 300D0000 .long 0xd30
+ 36383 6921 03 .byte 0x3
+ 36384 6922 91 .byte 0x91
+ 36385 6923 9077 .sleb128 -1136
+ 36386 6925 00 .byte 0x0
+ 36387 6926 00 .byte 0x0
+ 36388 6927 00 .byte 0x0
+ 36389 6928 00 .byte 0x0
+ 36390 6929 36 .uleb128 0x36
+ 36391 692a 00000000 .quad .LBB1448
+ 36391 00000000
+ 36392 6932 00000000 .quad .LBE1448
+ 36392 00000000
+ 36393 693a 48690000 .long 0x6948
+ 36394 693e 34 .uleb128 0x34
+ 36395 693f 180C0000 .long 0xc18
+ 36396 6943 03 .byte 0x3
+ 36397 6944 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 979
+
+
+ 36398 6945 F05A .sleb128 -4752
+ 36399 6947 00 .byte 0x0
+ 36400 6948 31 .uleb128 0x31
+ 36401 6949 160E0000 .long 0xe16
+ 36402 694d 00000000 .quad .LBB1449
+ 36402 00000000
+ 36403 6955 00000000 .quad .LBE1449
+ 36403 00000000
+ 36404 695d 02 .byte 0x2
+ 36405 695e 9406 .value 0x694
+ 36406 6960 F0690000 .long 0x69f0
+ 36407 6964 32 .uleb128 0x32
+ 36408 6965 280E0000 .long 0xe28
+ 36409 6969 03 .byte 0x3
+ 36410 696a 91 .byte 0x91
+ 36411 696b A077 .sleb128 -1120
+ 36412 696d 33 .uleb128 0x33
+ 36413 696e 00000000 .quad .LBB1450
+ 36413 00000000
+ 36414 6976 00000000 .quad .LBE1450
+ 36414 00000000
+ 36415 697e 34 .uleb128 0x34
+ 36416 697f 340E0000 .long 0xe34
+ 36417 6983 09 .byte 0x9
+ 36418 6984 03 .byte 0x3
+ 36419 6985 00000000 .quad ShiftRowTable.6768
+ 36419 00000000
+ 36420 698d 35 .uleb128 0x35
+ 36421 698e 6E0D0000 .long 0xd6e
+ 36422 6992 00000000 .quad .LBB1451
+ 36422 00000000
+ 36423 699a 00000000 .quad .LBE1451
+ 36423 00000000
+ 36424 69a2 02 .byte 0x2
+ 36425 69a3 9B02 .value 0x29b
+ 36426 69a5 32 .uleb128 0x32
+ 36427 69a6 8C0D0000 .long 0xd8c
+ 36428 69aa 03 .byte 0x3
+ 36429 69ab 91 .byte 0x91
+ 36430 69ac B077 .sleb128 -1104
+ 36431 69ae 32 .uleb128 0x32
+ 36432 69af 800D0000 .long 0xd80
+ 36433 69b3 03 .byte 0x3
+ 36434 69b4 91 .byte 0x91
+ 36435 69b5 C077 .sleb128 -1088
+ 36436 69b7 33 .uleb128 0x33
+ 36437 69b8 00000000 .quad .LBB1452
+ 36437 00000000
+ 36438 69c0 00000000 .quad .LBE1452
+ 36438 00000000
+ 36439 69c8 34 .uleb128 0x34
+ 36440 69c9 980D0000 .long 0xd98
+ 36441 69cd 03 .byte 0x3
+ 36442 69ce 91 .byte 0x91
+ 36443 69cf 905C .sleb128 -4592
+ 36444 69d1 34 .uleb128 0x34
+ 36445 69d2 A40D0000 .long 0xda4
+
GAS LISTING /tmp/ccMa7HLZ.s page 980
+
+
+ 36446 69d6 03 .byte 0x3
+ 36447 69d7 91 .byte 0x91
+ 36448 69d8 805C .sleb128 -4608
+ 36449 69da 34 .uleb128 0x34
+ 36450 69db AF0D0000 .long 0xdaf
+ 36451 69df 03 .byte 0x3
+ 36452 69e0 91 .byte 0x91
+ 36453 69e1 F05B .sleb128 -4624
+ 36454 69e3 34 .uleb128 0x34
+ 36455 69e4 BB0D0000 .long 0xdbb
+ 36456 69e8 03 .byte 0x3
+ 36457 69e9 91 .byte 0x91
+ 36458 69ea DC77 .sleb128 -1060
+ 36459 69ec 00 .byte 0x0
+ 36460 69ed 00 .byte 0x0
+ 36461 69ee 00 .byte 0x0
+ 36462 69ef 00 .byte 0x0
+ 36463 69f0 36 .uleb128 0x36
+ 36464 69f1 00000000 .quad .LBB1453
+ 36464 00000000
+ 36465 69f9 00000000 .quad .LBE1453
+ 36465 00000000
+ 36466 6a01 0F6A0000 .long 0x6a0f
+ 36467 6a05 34 .uleb128 0x34
+ 36468 6a06 280C0000 .long 0xc28
+ 36469 6a0a 03 .byte 0x3
+ 36470 6a0b 91 .byte 0x91
+ 36471 6a0c E05A .sleb128 -4768
+ 36472 6a0e 00 .byte 0x0
+ 36473 6a0f 31 .uleb128 0x31
+ 36474 6a10 520E0000 .long 0xe52
+ 36475 6a14 00000000 .quad .LBB1454
+ 36475 00000000
+ 36476 6a1c 00000000 .quad .LBE1454
+ 36476 00000000
+ 36477 6a24 02 .byte 0x2
+ 36478 6a25 9606 .value 0x696
+ 36479 6a27 3E6A0000 .long 0x6a3e
+ 36480 6a2b 32 .uleb128 0x32
+ 36481 6a2c 6D0E0000 .long 0xe6d
+ 36482 6a30 03 .byte 0x3
+ 36483 6a31 91 .byte 0x91
+ 36484 6a32 E077 .sleb128 -1056
+ 36485 6a34 32 .uleb128 0x32
+ 36486 6a35 630E0000 .long 0xe63
+ 36487 6a39 03 .byte 0x3
+ 36488 6a3a 91 .byte 0x91
+ 36489 6a3b F077 .sleb128 -1040
+ 36490 6a3d 00 .byte 0x0
+ 36491 6a3e 36 .uleb128 0x36
+ 36492 6a3f 00000000 .quad .LBB1456
+ 36492 00000000
+ 36493 6a47 00000000 .quad .LBE1456
+ 36493 00000000
+ 36494 6a4f 5D6A0000 .long 0x6a5d
+ 36495 6a53 34 .uleb128 0x34
+ 36496 6a54 380C0000 .long 0xc38
+
GAS LISTING /tmp/ccMa7HLZ.s page 981
+
+
+ 36497 6a58 03 .byte 0x3
+ 36498 6a59 91 .byte 0x91
+ 36499 6a5a D05A .sleb128 -4784
+ 36500 6a5c 00 .byte 0x0
+ 36501 6a5d 31 .uleb128 0x31
+ 36502 6a5e 780E0000 .long 0xe78
+ 36503 6a62 00000000 .quad .LBB1457
+ 36503 00000000
+ 36504 6a6a 00000000 .quad .LBE1457
+ 36504 00000000
+ 36505 6a72 02 .byte 0x2
+ 36506 6a73 9806 .value 0x698
+ 36507 6a75 9E6A0000 .long 0x6a9e
+ 36508 6a79 32 .uleb128 0x32
+ 36509 6a7a 8A0E0000 .long 0xe8a
+ 36510 6a7e 03 .byte 0x3
+ 36511 6a7f 91 .byte 0x91
+ 36512 6a80 8078 .sleb128 -1024
+ 36513 6a82 33 .uleb128 0x33
+ 36514 6a83 00000000 .quad .LBB1458
+ 36514 00000000
+ 36515 6a8b 00000000 .quad .LBE1458
+ 36515 00000000
+ 36516 6a93 34 .uleb128 0x34
+ 36517 6a94 960E0000 .long 0xe96
+ 36518 6a98 03 .byte 0x3
+ 36519 6a99 91 .byte 0x91
+ 36520 6a9a A05C .sleb128 -4576
+ 36521 6a9c 00 .byte 0x0
+ 36522 6a9d 00 .byte 0x0
+ 36523 6a9e 33 .uleb128 0x33
+ 36524 6a9f 00000000 .quad .LBB1459
+ 36524 00000000
+ 36525 6aa7 00000000 .quad .LBE1459
+ 36525 00000000
+ 36526 6aaf 34 .uleb128 0x34
+ 36527 6ab0 440C0000 .long 0xc44
+ 36528 6ab4 03 .byte 0x3
+ 36529 6ab5 91 .byte 0x91
+ 36530 6ab6 C05A .sleb128 -4800
+ 36531 6ab8 00 .byte 0x0
+ 36532 6ab9 00 .byte 0x0
+ 36533 6aba 00 .byte 0x0
+ 36534 6abb 31 .uleb128 0x31
+ 36535 6abc 780E0000 .long 0xe78
+ 36536 6ac0 00000000 .quad .LBB1460
+ 36536 00000000
+ 36537 6ac8 00000000 .quad .LBE1460
+ 36537 00000000
+ 36538 6ad0 02 .byte 0x2
+ 36539 6ad1 4507 .value 0x745
+ 36540 6ad3 FC6A0000 .long 0x6afc
+ 36541 6ad7 32 .uleb128 0x32
+ 36542 6ad8 8A0E0000 .long 0xe8a
+ 36543 6adc 03 .byte 0x3
+ 36544 6add 91 .byte 0x91
+ 36545 6ade 9078 .sleb128 -1008
+
GAS LISTING /tmp/ccMa7HLZ.s page 982
+
+
+ 36546 6ae0 33 .uleb128 0x33
+ 36547 6ae1 00000000 .quad .LBB1461
+ 36547 00000000
+ 36548 6ae9 00000000 .quad .LBE1461
+ 36548 00000000
+ 36549 6af1 34 .uleb128 0x34
+ 36550 6af2 960E0000 .long 0xe96
+ 36551 6af6 03 .byte 0x3
+ 36552 6af7 91 .byte 0x91
+ 36553 6af8 B05C .sleb128 -4560
+ 36554 6afa 00 .byte 0x0
+ 36555 6afb 00 .byte 0x0
+ 36556 6afc 31 .uleb128 0x31
+ 36557 6afd C5480000 .long 0x48c5
+ 36558 6b01 00000000 .quad .LBB1462
+ 36558 00000000
+ 36559 6b09 00000000 .quad .LBE1462
+ 36559 00000000
+ 36560 6b11 02 .byte 0x2
+ 36561 6b12 4D07 .value 0x74d
+ 36562 6b14 C46B0000 .long 0x6bc4
+ 36563 6b18 32 .uleb128 0x32
+ 36564 6b19 E3480000 .long 0x48e3
+ 36565 6b1d 03 .byte 0x3
+ 36566 6b1e 91 .byte 0x91
+ 36567 6b1f AC78 .sleb128 -980
+ 36568 6b21 32 .uleb128 0x32
+ 36569 6b22 D7480000 .long 0x48d7
+ 36570 6b26 03 .byte 0x3
+ 36571 6b27 91 .byte 0x91
+ 36572 6b28 B078 .sleb128 -976
+ 36573 6b2a 33 .uleb128 0x33
+ 36574 6b2b 00000000 .quad .LBB1463
+ 36574 00000000
+ 36575 6b33 00000000 .quad .LBE1463
+ 36575 00000000
+ 36576 6b3b 34 .uleb128 0x34
+ 36577 6b3c EF480000 .long 0x48ef
+ 36578 6b40 03 .byte 0x3
+ 36579 6b41 91 .byte 0x91
+ 36580 6b42 D05C .sleb128 -4528
+ 36581 6b44 34 .uleb128 0x34
+ 36582 6b45 F9480000 .long 0x48f9
+ 36583 6b49 03 .byte 0x3
+ 36584 6b4a 91 .byte 0x91
+ 36585 6b4b D078 .sleb128 -944
+ 36586 6b4d 34 .uleb128 0x34
+ 36587 6b4e 05490000 .long 0x4905
+ 36588 6b52 03 .byte 0x3
+ 36589 6b53 91 .byte 0x91
+ 36590 6b54 CC78 .sleb128 -948
+ 36591 6b56 31 .uleb128 0x31
+ 36592 6b57 12490000 .long 0x4912
+ 36593 6b5b 00000000 .quad .LBB1464
+ 36593 00000000
+ 36594 6b63 00000000 .quad .LBE1464
+ 36594 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 983
+
+
+ 36595 6b6b 02 .byte 0x2
+ 36596 6b6c 5F06 .value 0x65f
+ 36597 6b6e A06B0000 .long 0x6ba0
+ 36598 6b72 32 .uleb128 0x32
+ 36599 6b73 24490000 .long 0x4924
+ 36600 6b77 03 .byte 0x3
+ 36601 6b78 91 .byte 0x91
+ 36602 6b79 D478 .sleb128 -940
+ 36603 6b7b 33 .uleb128 0x33
+ 36604 6b7c 00000000 .quad .LBB1465
+ 36604 00000000
+ 36605 6b84 00000000 .quad .LBE1465
+ 36605 00000000
+ 36606 6b8c 34 .uleb128 0x34
+ 36607 6b8d 2E490000 .long 0x492e
+ 36608 6b91 03 .byte 0x3
+ 36609 6b92 91 .byte 0x91
+ 36610 6b93 C05C .sleb128 -4544
+ 36611 6b95 34 .uleb128 0x34
+ 36612 6b96 3A490000 .long 0x493a
+ 36613 6b9a 03 .byte 0x3
+ 36614 6b9b 91 .byte 0x91
+ 36615 6b9c D878 .sleb128 -936
+ 36616 6b9e 00 .byte 0x0
+ 36617 6b9f 00 .byte 0x0
+ 36618 6ba0 35 .uleb128 0x35
+ 36619 6ba1 46490000 .long 0x4946
+ 36620 6ba5 00000000 .quad .LBB1466
+ 36620 00000000
+ 36621 6bad 00000000 .quad .LBE1466
+ 36621 00000000
+ 36622 6bb5 02 .byte 0x2
+ 36623 6bb6 6006 .value 0x660
+ 36624 6bb8 32 .uleb128 0x32
+ 36625 6bb9 58490000 .long 0x4958
+ 36626 6bbd 03 .byte 0x3
+ 36627 6bbe 91 .byte 0x91
+ 36628 6bbf DC78 .sleb128 -932
+ 36629 6bc1 00 .byte 0x0
+ 36630 6bc2 00 .byte 0x0
+ 36631 6bc3 00 .byte 0x0
+ 36632 6bc4 31 .uleb128 0x31
+ 36633 6bc5 A30E0000 .long 0xea3
+ 36634 6bc9 00000000 .quad .LBB1468
+ 36634 00000000
+ 36635 6bd1 00000000 .quad .LBE1468
+ 36635 00000000
+ 36636 6bd9 02 .byte 0x2
+ 36637 6bda 4F07 .value 0x74f
+ 36638 6bdc C46C0000 .long 0x6cc4
+ 36639 6be0 32 .uleb128 0x32
+ 36640 6be1 B50E0000 .long 0xeb5
+ 36641 6be5 03 .byte 0x3
+ 36642 6be6 91 .byte 0x91
+ 36643 6be7 E078 .sleb128 -928
+ 36644 6be9 33 .uleb128 0x33
+ 36645 6bea 00000000 .quad .LBB1469
+
GAS LISTING /tmp/ccMa7HLZ.s page 984
+
+
+ 36645 00000000
+ 36646 6bf2 00000000 .quad .LBE1469
+ 36646 00000000
+ 36647 6bfa 34 .uleb128 0x34
+ 36648 6bfb C10E0000 .long 0xec1
+ 36649 6bff 03 .byte 0x3
+ 36650 6c00 76 .byte 0x76
+ 36651 6c01 A04E .sleb128 -6368
+ 36652 6c03 31 .uleb128 0x31
+ 36653 6c04 CE0E0000 .long 0xece
+ 36654 6c08 00000000 .quad .LBB1470
+ 36654 00000000
+ 36655 6c10 00000000 .quad .LBE1470
+ 36655 00000000
+ 36656 6c18 02 .byte 0x2
+ 36657 6c19 1F06 .value 0x61f
+ 36658 6c1b 446C0000 .long 0x6c44
+ 36659 6c1f 32 .uleb128 0x32
+ 36660 6c20 E00E0000 .long 0xee0
+ 36661 6c24 03 .byte 0x3
+ 36662 6c25 91 .byte 0x91
+ 36663 6c26 F078 .sleb128 -912
+ 36664 6c28 33 .uleb128 0x33
+ 36665 6c29 00000000 .quad .LBB1471
+ 36665 00000000
+ 36666 6c31 00000000 .quad .LBE1471
+ 36666 00000000
+ 36667 6c39 34 .uleb128 0x34
+ 36668 6c3a EC0E0000 .long 0xeec
+ 36669 6c3e 03 .byte 0x3
+ 36670 6c3f 91 .byte 0x91
+ 36671 6c40 E05C .sleb128 -4512
+ 36672 6c42 00 .byte 0x0
+ 36673 6c43 00 .byte 0x0
+ 36674 6c44 31 .uleb128 0x31
+ 36675 6c45 CE0E0000 .long 0xece
+ 36676 6c49 00000000 .quad .LBB1472
+ 36676 00000000
+ 36677 6c51 00000000 .quad .LBE1472
+ 36677 00000000
+ 36678 6c59 02 .byte 0x2
+ 36679 6c5a 2006 .value 0x620
+ 36680 6c5c 856C0000 .long 0x6c85
+ 36681 6c60 32 .uleb128 0x32
+ 36682 6c61 E00E0000 .long 0xee0
+ 36683 6c65 03 .byte 0x3
+ 36684 6c66 91 .byte 0x91
+ 36685 6c67 8079 .sleb128 -896
+ 36686 6c69 33 .uleb128 0x33
+ 36687 6c6a 00000000 .quad .LBB1473
+ 36687 00000000
+ 36688 6c72 00000000 .quad .LBE1473
+ 36688 00000000
+ 36689 6c7a 34 .uleb128 0x34
+ 36690 6c7b EC0E0000 .long 0xeec
+ 36691 6c7f 03 .byte 0x3
+ 36692 6c80 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 985
+
+
+ 36693 6c81 F05C .sleb128 -4496
+ 36694 6c83 00 .byte 0x0
+ 36695 6c84 00 .byte 0x0
+ 36696 6c85 35 .uleb128 0x35
+ 36697 6c86 CE0E0000 .long 0xece
+ 36698 6c8a 00000000 .quad .LBB1474
+ 36698 00000000
+ 36699 6c92 00000000 .quad .LBE1474
+ 36699 00000000
+ 36700 6c9a 02 .byte 0x2
+ 36701 6c9b 2106 .value 0x621
+ 36702 6c9d 32 .uleb128 0x32
+ 36703 6c9e E00E0000 .long 0xee0
+ 36704 6ca2 03 .byte 0x3
+ 36705 6ca3 91 .byte 0x91
+ 36706 6ca4 9079 .sleb128 -880
+ 36707 6ca6 33 .uleb128 0x33
+ 36708 6ca7 00000000 .quad .LBB1475
+ 36708 00000000
+ 36709 6caf 00000000 .quad .LBE1475
+ 36709 00000000
+ 36710 6cb7 34 .uleb128 0x34
+ 36711 6cb8 EC0E0000 .long 0xeec
+ 36712 6cbc 03 .byte 0x3
+ 36713 6cbd 91 .byte 0x91
+ 36714 6cbe 805D .sleb128 -4480
+ 36715 6cc0 00 .byte 0x0
+ 36716 6cc1 00 .byte 0x0
+ 36717 6cc2 00 .byte 0x0
+ 36718 6cc3 00 .byte 0x0
+ 36719 6cc4 31 .uleb128 0x31
+ 36720 6cc5 A30E0000 .long 0xea3
+ 36721 6cc9 00000000 .quad .LBB1476
+ 36721 00000000
+ 36722 6cd1 00000000 .quad .LBE1476
+ 36722 00000000
+ 36723 6cd9 02 .byte 0x2
+ 36724 6cda 5007 .value 0x750
+ 36725 6cdc C46D0000 .long 0x6dc4
+ 36726 6ce0 32 .uleb128 0x32
+ 36727 6ce1 B50E0000 .long 0xeb5
+ 36728 6ce5 03 .byte 0x3
+ 36729 6ce6 91 .byte 0x91
+ 36730 6ce7 A079 .sleb128 -864
+ 36731 6ce9 33 .uleb128 0x33
+ 36732 6cea 00000000 .quad .LBB1477
+ 36732 00000000
+ 36733 6cf2 00000000 .quad .LBE1477
+ 36733 00000000
+ 36734 6cfa 34 .uleb128 0x34
+ 36735 6cfb C10E0000 .long 0xec1
+ 36736 6cff 03 .byte 0x3
+ 36737 6d00 76 .byte 0x76
+ 36738 6d01 B04E .sleb128 -6352
+ 36739 6d03 31 .uleb128 0x31
+ 36740 6d04 CE0E0000 .long 0xece
+ 36741 6d08 00000000 .quad .LBB1478
+
GAS LISTING /tmp/ccMa7HLZ.s page 986
+
+
+ 36741 00000000
+ 36742 6d10 00000000 .quad .LBE1478
+ 36742 00000000
+ 36743 6d18 02 .byte 0x2
+ 36744 6d19 1F06 .value 0x61f
+ 36745 6d1b 446D0000 .long 0x6d44
+ 36746 6d1f 32 .uleb128 0x32
+ 36747 6d20 E00E0000 .long 0xee0
+ 36748 6d24 03 .byte 0x3
+ 36749 6d25 91 .byte 0x91
+ 36750 6d26 B079 .sleb128 -848
+ 36751 6d28 33 .uleb128 0x33
+ 36752 6d29 00000000 .quad .LBB1479
+ 36752 00000000
+ 36753 6d31 00000000 .quad .LBE1479
+ 36753 00000000
+ 36754 6d39 34 .uleb128 0x34
+ 36755 6d3a EC0E0000 .long 0xeec
+ 36756 6d3e 03 .byte 0x3
+ 36757 6d3f 91 .byte 0x91
+ 36758 6d40 905D .sleb128 -4464
+ 36759 6d42 00 .byte 0x0
+ 36760 6d43 00 .byte 0x0
+ 36761 6d44 31 .uleb128 0x31
+ 36762 6d45 CE0E0000 .long 0xece
+ 36763 6d49 00000000 .quad .LBB1480
+ 36763 00000000
+ 36764 6d51 00000000 .quad .LBE1480
+ 36764 00000000
+ 36765 6d59 02 .byte 0x2
+ 36766 6d5a 2006 .value 0x620
+ 36767 6d5c 856D0000 .long 0x6d85
+ 36768 6d60 32 .uleb128 0x32
+ 36769 6d61 E00E0000 .long 0xee0
+ 36770 6d65 03 .byte 0x3
+ 36771 6d66 91 .byte 0x91
+ 36772 6d67 C079 .sleb128 -832
+ 36773 6d69 33 .uleb128 0x33
+ 36774 6d6a 00000000 .quad .LBB1481
+ 36774 00000000
+ 36775 6d72 00000000 .quad .LBE1481
+ 36775 00000000
+ 36776 6d7a 34 .uleb128 0x34
+ 36777 6d7b EC0E0000 .long 0xeec
+ 36778 6d7f 03 .byte 0x3
+ 36779 6d80 91 .byte 0x91
+ 36780 6d81 A05D .sleb128 -4448
+ 36781 6d83 00 .byte 0x0
+ 36782 6d84 00 .byte 0x0
+ 36783 6d85 35 .uleb128 0x35
+ 36784 6d86 CE0E0000 .long 0xece
+ 36785 6d8a 00000000 .quad .LBB1482
+ 36785 00000000
+ 36786 6d92 00000000 .quad .LBE1482
+ 36786 00000000
+ 36787 6d9a 02 .byte 0x2
+ 36788 6d9b 2106 .value 0x621
+
GAS LISTING /tmp/ccMa7HLZ.s page 987
+
+
+ 36789 6d9d 32 .uleb128 0x32
+ 36790 6d9e E00E0000 .long 0xee0
+ 36791 6da2 03 .byte 0x3
+ 36792 6da3 91 .byte 0x91
+ 36793 6da4 D079 .sleb128 -816
+ 36794 6da6 33 .uleb128 0x33
+ 36795 6da7 00000000 .quad .LBB1483
+ 36795 00000000
+ 36796 6daf 00000000 .quad .LBE1483
+ 36796 00000000
+ 36797 6db7 34 .uleb128 0x34
+ 36798 6db8 EC0E0000 .long 0xeec
+ 36799 6dbc 03 .byte 0x3
+ 36800 6dbd 91 .byte 0x91
+ 36801 6dbe B05D .sleb128 -4432
+ 36802 6dc0 00 .byte 0x0
+ 36803 6dc1 00 .byte 0x0
+ 36804 6dc2 00 .byte 0x0
+ 36805 6dc3 00 .byte 0x0
+ 36806 6dc4 31 .uleb128 0x31
+ 36807 6dc5 780E0000 .long 0xe78
+ 36808 6dc9 00000000 .quad .LBB1484
+ 36808 00000000
+ 36809 6dd1 00000000 .quad .LBE1484
+ 36809 00000000
+ 36810 6dd9 02 .byte 0x2
+ 36811 6dda 5207 .value 0x752
+ 36812 6ddc 056E0000 .long 0x6e05
+ 36813 6de0 32 .uleb128 0x32
+ 36814 6de1 8A0E0000 .long 0xe8a
+ 36815 6de5 03 .byte 0x3
+ 36816 6de6 91 .byte 0x91
+ 36817 6de7 E079 .sleb128 -800
+ 36818 6de9 33 .uleb128 0x33
+ 36819 6dea 00000000 .quad .LBB1485
+ 36819 00000000
+ 36820 6df2 00000000 .quad .LBE1485
+ 36820 00000000
+ 36821 6dfa 34 .uleb128 0x34
+ 36822 6dfb 960E0000 .long 0xe96
+ 36823 6dff 03 .byte 0x3
+ 36824 6e00 91 .byte 0x91
+ 36825 6e01 C05D .sleb128 -4416
+ 36826 6e03 00 .byte 0x0
+ 36827 6e04 00 .byte 0x0
+ 36828 6e05 31 .uleb128 0x31
+ 36829 6e06 63490000 .long 0x4963
+ 36830 6e0a 00000000 .quad .LBB1486
+ 36830 00000000
+ 36831 6e12 00000000 .quad .LBE1486
+ 36831 00000000
+ 36832 6e1a 02 .byte 0x2
+ 36833 6e1b 5407 .value 0x754
+ 36834 6e1d 586E0000 .long 0x6e58
+ 36835 6e21 32 .uleb128 0x32
+ 36836 6e22 7F490000 .long 0x497f
+ 36837 6e26 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 988
+
+
+ 36838 6e27 91 .byte 0x91
+ 36839 6e28 F079 .sleb128 -784
+ 36840 6e2a 32 .uleb128 0x32
+ 36841 6e2b 75490000 .long 0x4975
+ 36842 6e2f 03 .byte 0x3
+ 36843 6e30 91 .byte 0x91
+ 36844 6e31 807A .sleb128 -768
+ 36845 6e33 33 .uleb128 0x33
+ 36846 6e34 00000000 .quad .LBB1487
+ 36846 00000000
+ 36847 6e3c 00000000 .quad .LBE1487
+ 36847 00000000
+ 36848 6e44 34 .uleb128 0x34
+ 36849 6e45 89490000 .long 0x4989
+ 36850 6e49 03 .byte 0x3
+ 36851 6e4a 91 .byte 0x91
+ 36852 6e4b E05D .sleb128 -4384
+ 36853 6e4d 34 .uleb128 0x34
+ 36854 6e4e 94490000 .long 0x4994
+ 36855 6e52 03 .byte 0x3
+ 36856 6e53 91 .byte 0x91
+ 36857 6e54 D05D .sleb128 -4400
+ 36858 6e56 00 .byte 0x0
+ 36859 6e57 00 .byte 0x0
+ 36860 6e58 31 .uleb128 0x31
+ 36861 6e59 A0490000 .long 0x49a0
+ 36862 6e5d 00000000 .quad .LBB1488
+ 36862 00000000
+ 36863 6e65 00000000 .quad .LBE1488
+ 36863 00000000
+ 36864 6e6d 02 .byte 0x2
+ 36865 6e6e 5607 .value 0x756
+ 36866 6e70 AB6E0000 .long 0x6eab
+ 36867 6e74 32 .uleb128 0x32
+ 36868 6e75 BC490000 .long 0x49bc
+ 36869 6e79 03 .byte 0x3
+ 36870 6e7a 91 .byte 0x91
+ 36871 6e7b 907A .sleb128 -752
+ 36872 6e7d 32 .uleb128 0x32
+ 36873 6e7e B2490000 .long 0x49b2
+ 36874 6e82 03 .byte 0x3
+ 36875 6e83 91 .byte 0x91
+ 36876 6e84 A07A .sleb128 -736
+ 36877 6e86 33 .uleb128 0x33
+ 36878 6e87 00000000 .quad .LBB1489
+ 36878 00000000
+ 36879 6e8f 00000000 .quad .LBE1489
+ 36879 00000000
+ 36880 6e97 34 .uleb128 0x34
+ 36881 6e98 C6490000 .long 0x49c6
+ 36882 6e9c 03 .byte 0x3
+ 36883 6e9d 91 .byte 0x91
+ 36884 6e9e 805E .sleb128 -4352
+ 36885 6ea0 34 .uleb128 0x34
+ 36886 6ea1 D1490000 .long 0x49d1
+ 36887 6ea5 03 .byte 0x3
+ 36888 6ea6 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 989
+
+
+ 36889 6ea7 F05D .sleb128 -4368
+ 36890 6ea9 00 .byte 0x0
+ 36891 6eaa 00 .byte 0x0
+ 36892 6eab 31 .uleb128 0x31
+ 36893 6eac A30E0000 .long 0xea3
+ 36894 6eb0 00000000 .quad .LBB1490
+ 36894 00000000
+ 36895 6eb8 00000000 .quad .LBE1490
+ 36895 00000000
+ 36896 6ec0 02 .byte 0x2
+ 36897 6ec1 5A07 .value 0x75a
+ 36898 6ec3 AB6F0000 .long 0x6fab
+ 36899 6ec7 32 .uleb128 0x32
+ 36900 6ec8 B50E0000 .long 0xeb5
+ 36901 6ecc 03 .byte 0x3
+ 36902 6ecd 91 .byte 0x91
+ 36903 6ece B07A .sleb128 -720
+ 36904 6ed0 33 .uleb128 0x33
+ 36905 6ed1 00000000 .quad .LBB1491
+ 36905 00000000
+ 36906 6ed9 00000000 .quad .LBE1491
+ 36906 00000000
+ 36907 6ee1 34 .uleb128 0x34
+ 36908 6ee2 C10E0000 .long 0xec1
+ 36909 6ee6 03 .byte 0x3
+ 36910 6ee7 76 .byte 0x76
+ 36911 6ee8 C04E .sleb128 -6336
+ 36912 6eea 31 .uleb128 0x31
+ 36913 6eeb CE0E0000 .long 0xece
+ 36914 6eef 00000000 .quad .LBB1492
+ 36914 00000000
+ 36915 6ef7 00000000 .quad .LBE1492
+ 36915 00000000
+ 36916 6eff 02 .byte 0x2
+ 36917 6f00 1F06 .value 0x61f
+ 36918 6f02 2B6F0000 .long 0x6f2b
+ 36919 6f06 32 .uleb128 0x32
+ 36920 6f07 E00E0000 .long 0xee0
+ 36921 6f0b 03 .byte 0x3
+ 36922 6f0c 91 .byte 0x91
+ 36923 6f0d C07A .sleb128 -704
+ 36924 6f0f 33 .uleb128 0x33
+ 36925 6f10 00000000 .quad .LBB1493
+ 36925 00000000
+ 36926 6f18 00000000 .quad .LBE1493
+ 36926 00000000
+ 36927 6f20 34 .uleb128 0x34
+ 36928 6f21 EC0E0000 .long 0xeec
+ 36929 6f25 03 .byte 0x3
+ 36930 6f26 91 .byte 0x91
+ 36931 6f27 905E .sleb128 -4336
+ 36932 6f29 00 .byte 0x0
+ 36933 6f2a 00 .byte 0x0
+ 36934 6f2b 31 .uleb128 0x31
+ 36935 6f2c CE0E0000 .long 0xece
+ 36936 6f30 00000000 .quad .LBB1494
+ 36936 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 990
+
+
+ 36937 6f38 00000000 .quad .LBE1494
+ 36937 00000000
+ 36938 6f40 02 .byte 0x2
+ 36939 6f41 2006 .value 0x620
+ 36940 6f43 6C6F0000 .long 0x6f6c
+ 36941 6f47 32 .uleb128 0x32
+ 36942 6f48 E00E0000 .long 0xee0
+ 36943 6f4c 03 .byte 0x3
+ 36944 6f4d 91 .byte 0x91
+ 36945 6f4e D07A .sleb128 -688
+ 36946 6f50 33 .uleb128 0x33
+ 36947 6f51 00000000 .quad .LBB1495
+ 36947 00000000
+ 36948 6f59 00000000 .quad .LBE1495
+ 36948 00000000
+ 36949 6f61 34 .uleb128 0x34
+ 36950 6f62 EC0E0000 .long 0xeec
+ 36951 6f66 03 .byte 0x3
+ 36952 6f67 91 .byte 0x91
+ 36953 6f68 A05E .sleb128 -4320
+ 36954 6f6a 00 .byte 0x0
+ 36955 6f6b 00 .byte 0x0
+ 36956 6f6c 35 .uleb128 0x35
+ 36957 6f6d CE0E0000 .long 0xece
+ 36958 6f71 00000000 .quad .LBB1496
+ 36958 00000000
+ 36959 6f79 00000000 .quad .LBE1496
+ 36959 00000000
+ 36960 6f81 02 .byte 0x2
+ 36961 6f82 2106 .value 0x621
+ 36962 6f84 32 .uleb128 0x32
+ 36963 6f85 E00E0000 .long 0xee0
+ 36964 6f89 03 .byte 0x3
+ 36965 6f8a 91 .byte 0x91
+ 36966 6f8b E07A .sleb128 -672
+ 36967 6f8d 33 .uleb128 0x33
+ 36968 6f8e 00000000 .quad .LBB1497
+ 36968 00000000
+ 36969 6f96 00000000 .quad .LBE1497
+ 36969 00000000
+ 36970 6f9e 34 .uleb128 0x34
+ 36971 6f9f EC0E0000 .long 0xeec
+ 36972 6fa3 03 .byte 0x3
+ 36973 6fa4 91 .byte 0x91
+ 36974 6fa5 B05E .sleb128 -4304
+ 36975 6fa7 00 .byte 0x0
+ 36976 6fa8 00 .byte 0x0
+ 36977 6fa9 00 .byte 0x0
+ 36978 6faa 00 .byte 0x0
+ 36979 6fab 35 .uleb128 0x35
+ 36980 6fac D10B0000 .long 0xbd1
+ 36981 6fb0 00000000 .quad .LBB1498
+ 36981 00000000
+ 36982 6fb8 00000000 .quad .LBE1498
+ 36982 00000000
+ 36983 6fc0 02 .byte 0x2
+ 36984 6fc1 5B07 .value 0x75b
+
GAS LISTING /tmp/ccMa7HLZ.s page 991
+
+
+ 36985 6fc3 32 .uleb128 0x32
+ 36986 6fc4 EF0B0000 .long 0xbef
+ 36987 6fc8 03 .byte 0x3
+ 36988 6fc9 91 .byte 0x91
+ 36989 6fca FC7A .sleb128 -644
+ 36990 6fcc 32 .uleb128 0x32
+ 36991 6fcd E30B0000 .long 0xbe3
+ 36992 6fd1 03 .byte 0x3
+ 36993 6fd2 91 .byte 0x91
+ 36994 6fd3 807B .sleb128 -640
+ 36995 6fd5 33 .uleb128 0x33
+ 36996 6fd6 00000000 .quad .LBB1499
+ 36996 00000000
+ 36997 6fde 00000000 .quad .LBE1499
+ 36997 00000000
+ 36998 6fe6 34 .uleb128 0x34
+ 36999 6fe7 FB0B0000 .long 0xbfb
+ 37000 6feb 03 .byte 0x3
+ 37001 6fec 76 .byte 0x76
+ 37002 6fed E04E .sleb128 -6304
+ 37003 6fef 34 .uleb128 0x34
+ 37004 6ff0 070C0000 .long 0xc07
+ 37005 6ff4 03 .byte 0x3
+ 37006 6ff5 76 .byte 0x76
+ 37007 6ff6 D04E .sleb128 -6320
+ 37008 6ff8 31 .uleb128 0x31
+ 37009 6ff9 500C0000 .long 0xc50
+ 37010 6ffd 00000000 .quad .LBB1500
+ 37010 00000000
+ 37011 7005 00000000 .quad .LBE1500
+ 37011 00000000
+ 37012 700d 02 .byte 0x2
+ 37013 700e 9106 .value 0x691
+ 37014 7010 4B700000 .long 0x704b
+ 37015 7014 32 .uleb128 0x32
+ 37016 7015 7A0C0000 .long 0xc7a
+ 37017 7019 03 .byte 0x3
+ 37018 701a 91 .byte 0x91
+ 37019 701b 987B .sleb128 -616
+ 37020 701d 32 .uleb128 0x32
+ 37021 701e 6E0C0000 .long 0xc6e
+ 37022 7022 03 .byte 0x3
+ 37023 7023 91 .byte 0x91
+ 37024 7024 9C7B .sleb128 -612
+ 37025 7026 32 .uleb128 0x32
+ 37026 7027 620C0000 .long 0xc62
+ 37027 702b 03 .byte 0x3
+ 37028 702c 91 .byte 0x91
+ 37029 702d A07B .sleb128 -608
+ 37030 702f 33 .uleb128 0x33
+ 37031 7030 00000000 .quad .LBB1501
+ 37031 00000000
+ 37032 7038 00000000 .quad .LBE1501
+ 37032 00000000
+ 37033 7040 34 .uleb128 0x34
+ 37034 7041 860C0000 .long 0xc86
+ 37035 7045 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 992
+
+
+ 37036 7046 91 .byte 0x91
+ 37037 7047 805F .sleb128 -4224
+ 37038 7049 00 .byte 0x0
+ 37039 704a 00 .byte 0x0
+ 37040 704b 31 .uleb128 0x31
+ 37041 704c 910C0000 .long 0xc91
+ 37042 7050 00000000 .quad .LBB1502
+ 37042 00000000
+ 37043 7058 00000000 .quad .LBE1502
+ 37043 00000000
+ 37044 7060 02 .byte 0x2
+ 37045 7061 9206 .value 0x692
+ 37046 7063 BB720000 .long 0x72bb
+ 37047 7067 32 .uleb128 0x32
+ 37048 7068 A30C0000 .long 0xca3
+ 37049 706c 03 .byte 0x3
+ 37050 706d 91 .byte 0x91
+ 37051 706e B07B .sleb128 -592
+ 37052 7070 35 .uleb128 0x35
+ 37053 7071 B00C0000 .long 0xcb0
+ 37054 7075 00000000 .quad .LBB1504
+ 37054 00000000
+ 37055 707d 00000000 .quad .LBE1504
+ 37055 00000000
+ 37056 7085 02 .byte 0x2
+ 37057 7086 7D03 .value 0x37d
+ 37058 7088 32 .uleb128 0x32
+ 37059 7089 CE0C0000 .long 0xcce
+ 37060 708d 03 .byte 0x3
+ 37061 708e 91 .byte 0x91
+ 37062 708f C87B .sleb128 -568
+ 37063 7091 32 .uleb128 0x32
+ 37064 7092 C20C0000 .long 0xcc2
+ 37065 7096 03 .byte 0x3
+ 37066 7097 91 .byte 0x91
+ 37067 7098 D07B .sleb128 -560
+ 37068 709a 33 .uleb128 0x33
+ 37069 709b 00000000 .quad .LBB1505
+ 37069 00000000
+ 37070 70a3 00000000 .quad .LBE1505
+ 37070 00000000
+ 37071 70ab 34 .uleb128 0x34
+ 37072 70ac DA0C0000 .long 0xcda
+ 37073 70b0 03 .byte 0x3
+ 37074 70b1 91 .byte 0x91
+ 37075 70b2 A07C .sleb128 -480
+ 37076 70b4 34 .uleb128 0x34
+ 37077 70b5 E50C0000 .long 0xce5
+ 37078 70b9 03 .byte 0x3
+ 37079 70ba 91 .byte 0x91
+ 37080 70bb 907C .sleb128 -496
+ 37081 70bd 34 .uleb128 0x34
+ 37082 70be F00C0000 .long 0xcf0
+ 37083 70c2 03 .byte 0x3
+ 37084 70c3 91 .byte 0x91
+ 37085 70c4 807C .sleb128 -512
+ 37086 70c6 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 993
+
+
+ 37087 70c7 FC0C0000 .long 0xcfc
+ 37088 70cb 03 .byte 0x3
+ 37089 70cc 91 .byte 0x91
+ 37090 70cd F07B .sleb128 -528
+ 37091 70cf 34 .uleb128 0x34
+ 37092 70d0 080D0000 .long 0xd08
+ 37093 70d4 03 .byte 0x3
+ 37094 70d5 91 .byte 0x91
+ 37095 70d6 EC7B .sleb128 -532
+ 37096 70d8 31 .uleb128 0x31
+ 37097 70d9 1F0D0000 .long 0xd1f
+ 37098 70dd 00000000 .quad .LBB1506
+ 37098 00000000
+ 37099 70e5 00000000 .quad .LBE1506
+ 37099 00000000
+ 37100 70ed 02 .byte 0x2
+ 37101 70ee 5603 .value 0x356
+ 37102 70f0 07710000 .long 0x7107
+ 37103 70f4 32 .uleb128 0x32
+ 37104 70f5 3A0D0000 .long 0xd3a
+ 37105 70f9 03 .byte 0x3
+ 37106 70fa 91 .byte 0x91
+ 37107 70fb B07C .sleb128 -464
+ 37108 70fd 32 .uleb128 0x32
+ 37109 70fe 300D0000 .long 0xd30
+ 37110 7102 03 .byte 0x3
+ 37111 7103 91 .byte 0x91
+ 37112 7104 C07C .sleb128 -448
+ 37113 7106 00 .byte 0x0
+ 37114 7107 31 .uleb128 0x31
+ 37115 7108 450D0000 .long 0xd45
+ 37116 710c 00000000 .quad .LBB1508
+ 37116 00000000
+ 37117 7114 00000000 .quad .LBE1508
+ 37117 00000000
+ 37118 711c 02 .byte 0x2
+ 37119 711d 5E03 .value 0x35e
+ 37120 711f 36710000 .long 0x7136
+ 37121 7123 32 .uleb128 0x32
+ 37122 7124 620D0000 .long 0xd62
+ 37123 7128 03 .byte 0x3
+ 37124 7129 91 .byte 0x91
+ 37125 712a D07C .sleb128 -432
+ 37126 712c 32 .uleb128 0x32
+ 37127 712d 570D0000 .long 0xd57
+ 37128 7131 03 .byte 0x3
+ 37129 7132 91 .byte 0x91
+ 37130 7133 E07C .sleb128 -416
+ 37131 7135 00 .byte 0x0
+ 37132 7136 31 .uleb128 0x31
+ 37133 7137 6E0D0000 .long 0xd6e
+ 37134 713b 00000000 .quad .LBB1510
+ 37134 00000000
+ 37135 7143 00000000 .quad .LBE1510
+ 37135 00000000
+ 37136 714b 02 .byte 0x2
+ 37137 714c 6403 .value 0x364
+
GAS LISTING /tmp/ccMa7HLZ.s page 994
+
+
+ 37138 714e 9B710000 .long 0x719b
+ 37139 7152 32 .uleb128 0x32
+ 37140 7153 8C0D0000 .long 0xd8c
+ 37141 7157 03 .byte 0x3
+ 37142 7158 91 .byte 0x91
+ 37143 7159 F07C .sleb128 -400
+ 37144 715b 32 .uleb128 0x32
+ 37145 715c 800D0000 .long 0xd80
+ 37146 7160 03 .byte 0x3
+ 37147 7161 91 .byte 0x91
+ 37148 7162 807D .sleb128 -384
+ 37149 7164 33 .uleb128 0x33
+ 37150 7165 00000000 .quad .LBB1511
+ 37150 00000000
+ 37151 716d 00000000 .quad .LBE1511
+ 37151 00000000
+ 37152 7175 34 .uleb128 0x34
+ 37153 7176 980D0000 .long 0xd98
+ 37154 717a 03 .byte 0x3
+ 37155 717b 91 .byte 0x91
+ 37156 717c B05F .sleb128 -4176
+ 37157 717e 34 .uleb128 0x34
+ 37158 717f A40D0000 .long 0xda4
+ 37159 7183 03 .byte 0x3
+ 37160 7184 91 .byte 0x91
+ 37161 7185 A05F .sleb128 -4192
+ 37162 7187 34 .uleb128 0x34
+ 37163 7188 AF0D0000 .long 0xdaf
+ 37164 718c 03 .byte 0x3
+ 37165 718d 91 .byte 0x91
+ 37166 718e 905F .sleb128 -4208
+ 37167 7190 34 .uleb128 0x34
+ 37168 7191 BB0D0000 .long 0xdbb
+ 37169 7195 03 .byte 0x3
+ 37170 7196 91 .byte 0x91
+ 37171 7197 9C7D .sleb128 -356
+ 37172 7199 00 .byte 0x0
+ 37173 719a 00 .byte 0x0
+ 37174 719b 31 .uleb128 0x31
+ 37175 719c C70D0000 .long 0xdc7
+ 37176 71a0 00000000 .quad .LBB1512
+ 37176 00000000
+ 37177 71a8 00000000 .quad .LBE1512
+ 37177 00000000
+ 37178 71b0 02 .byte 0x2
+ 37179 71b1 6603 .value 0x366
+ 37180 71b3 CA710000 .long 0x71ca
+ 37181 71b7 32 .uleb128 0x32
+ 37182 71b8 E20D0000 .long 0xde2
+ 37183 71bc 03 .byte 0x3
+ 37184 71bd 91 .byte 0x91
+ 37185 71be A07D .sleb128 -352
+ 37186 71c0 32 .uleb128 0x32
+ 37187 71c1 D80D0000 .long 0xdd8
+ 37188 71c5 03 .byte 0x3
+ 37189 71c6 91 .byte 0x91
+ 37190 71c7 B07D .sleb128 -336
+
GAS LISTING /tmp/ccMa7HLZ.s page 995
+
+
+ 37191 71c9 00 .byte 0x0
+ 37192 71ca 31 .uleb128 0x31
+ 37193 71cb 6E0D0000 .long 0xd6e
+ 37194 71cf 00000000 .quad .LBB1514
+ 37194 00000000
+ 37195 71d7 00000000 .quad .LBE1514
+ 37195 00000000
+ 37196 71df 02 .byte 0x2
+ 37197 71e0 6803 .value 0x368
+ 37198 71e2 2F720000 .long 0x722f
+ 37199 71e6 32 .uleb128 0x32
+ 37200 71e7 8C0D0000 .long 0xd8c
+ 37201 71eb 03 .byte 0x3
+ 37202 71ec 91 .byte 0x91
+ 37203 71ed C07D .sleb128 -320
+ 37204 71ef 32 .uleb128 0x32
+ 37205 71f0 800D0000 .long 0xd80
+ 37206 71f4 03 .byte 0x3
+ 37207 71f5 91 .byte 0x91
+ 37208 71f6 D07D .sleb128 -304
+ 37209 71f8 33 .uleb128 0x33
+ 37210 71f9 00000000 .quad .LBB1515
+ 37210 00000000
+ 37211 7201 00000000 .quad .LBE1515
+ 37211 00000000
+ 37212 7209 34 .uleb128 0x34
+ 37213 720a 980D0000 .long 0xd98
+ 37214 720e 03 .byte 0x3
+ 37215 720f 91 .byte 0x91
+ 37216 7210 E05F .sleb128 -4128
+ 37217 7212 34 .uleb128 0x34
+ 37218 7213 A40D0000 .long 0xda4
+ 37219 7217 03 .byte 0x3
+ 37220 7218 91 .byte 0x91
+ 37221 7219 D05F .sleb128 -4144
+ 37222 721b 34 .uleb128 0x34
+ 37223 721c AF0D0000 .long 0xdaf
+ 37224 7220 03 .byte 0x3
+ 37225 7221 91 .byte 0x91
+ 37226 7222 C05F .sleb128 -4160
+ 37227 7224 34 .uleb128 0x34
+ 37228 7225 BB0D0000 .long 0xdbb
+ 37229 7229 03 .byte 0x3
+ 37230 722a 91 .byte 0x91
+ 37231 722b EC7D .sleb128 -276
+ 37232 722d 00 .byte 0x0
+ 37233 722e 00 .byte 0x0
+ 37234 722f 31 .uleb128 0x31
+ 37235 7230 C70D0000 .long 0xdc7
+ 37236 7234 00000000 .quad .LBB1516
+ 37236 00000000
+ 37237 723c 00000000 .quad .LBE1516
+ 37237 00000000
+ 37238 7244 02 .byte 0x2
+ 37239 7245 6A03 .value 0x36a
+ 37240 7247 5E720000 .long 0x725e
+ 37241 724b 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 996
+
+
+ 37242 724c E20D0000 .long 0xde2
+ 37243 7250 03 .byte 0x3
+ 37244 7251 91 .byte 0x91
+ 37245 7252 F07D .sleb128 -272
+ 37246 7254 32 .uleb128 0x32
+ 37247 7255 D80D0000 .long 0xdd8
+ 37248 7259 03 .byte 0x3
+ 37249 725a 91 .byte 0x91
+ 37250 725b 807E .sleb128 -256
+ 37251 725d 00 .byte 0x0
+ 37252 725e 31 .uleb128 0x31
+ 37253 725f ED0D0000 .long 0xded
+ 37254 7263 00000000 .quad .LBB1518
+ 37254 00000000
+ 37255 726b 00000000 .quad .LBE1518
+ 37255 00000000
+ 37256 7273 02 .byte 0x2
+ 37257 7274 6C03 .value 0x36c
+ 37258 7276 8D720000 .long 0x728d
+ 37259 727a 32 .uleb128 0x32
+ 37260 727b 0A0E0000 .long 0xe0a
+ 37261 727f 03 .byte 0x3
+ 37262 7280 91 .byte 0x91
+ 37263 7281 907E .sleb128 -240
+ 37264 7283 32 .uleb128 0x32
+ 37265 7284 FF0D0000 .long 0xdff
+ 37266 7288 03 .byte 0x3
+ 37267 7289 91 .byte 0x91
+ 37268 728a A07E .sleb128 -224
+ 37269 728c 00 .byte 0x0
+ 37270 728d 35 .uleb128 0x35
+ 37271 728e 1F0D0000 .long 0xd1f
+ 37272 7292 00000000 .quad .LBB1520
+ 37272 00000000
+ 37273 729a 00000000 .quad .LBE1520
+ 37273 00000000
+ 37274 72a2 02 .byte 0x2
+ 37275 72a3 6E03 .value 0x36e
+ 37276 72a5 32 .uleb128 0x32
+ 37277 72a6 3A0D0000 .long 0xd3a
+ 37278 72aa 03 .byte 0x3
+ 37279 72ab 91 .byte 0x91
+ 37280 72ac B07E .sleb128 -208
+ 37281 72ae 32 .uleb128 0x32
+ 37282 72af 300D0000 .long 0xd30
+ 37283 72b3 03 .byte 0x3
+ 37284 72b4 91 .byte 0x91
+ 37285 72b5 C07E .sleb128 -192
+ 37286 72b7 00 .byte 0x0
+ 37287 72b8 00 .byte 0x0
+ 37288 72b9 00 .byte 0x0
+ 37289 72ba 00 .byte 0x0
+ 37290 72bb 36 .uleb128 0x36
+ 37291 72bc 00000000 .quad .LBB1522
+ 37291 00000000
+ 37292 72c4 00000000 .quad .LBE1522
+ 37292 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 997
+
+
+ 37293 72cc DA720000 .long 0x72da
+ 37294 72d0 34 .uleb128 0x34
+ 37295 72d1 180C0000 .long 0xc18
+ 37296 72d5 03 .byte 0x3
+ 37297 72d6 91 .byte 0x91
+ 37298 72d7 F05E .sleb128 -4240
+ 37299 72d9 00 .byte 0x0
+ 37300 72da 31 .uleb128 0x31
+ 37301 72db 160E0000 .long 0xe16
+ 37302 72df 00000000 .quad .LBB1523
+ 37302 00000000
+ 37303 72e7 00000000 .quad .LBE1523
+ 37303 00000000
+ 37304 72ef 02 .byte 0x2
+ 37305 72f0 9406 .value 0x694
+ 37306 72f2 82730000 .long 0x7382
+ 37307 72f6 32 .uleb128 0x32
+ 37308 72f7 280E0000 .long 0xe28
+ 37309 72fb 03 .byte 0x3
+ 37310 72fc 91 .byte 0x91
+ 37311 72fd D07E .sleb128 -176
+ 37312 72ff 33 .uleb128 0x33
+ 37313 7300 00000000 .quad .LBB1524
+ 37313 00000000
+ 37314 7308 00000000 .quad .LBE1524
+ 37314 00000000
+ 37315 7310 34 .uleb128 0x34
+ 37316 7311 340E0000 .long 0xe34
+ 37317 7315 09 .byte 0x9
+ 37318 7316 03 .byte 0x3
+ 37319 7317 00000000 .quad ShiftRowTable.6768
+ 37319 00000000
+ 37320 731f 35 .uleb128 0x35
+ 37321 7320 6E0D0000 .long 0xd6e
+ 37322 7324 00000000 .quad .LBB1525
+ 37322 00000000
+ 37323 732c 00000000 .quad .LBE1525
+ 37323 00000000
+ 37324 7334 02 .byte 0x2
+ 37325 7335 9B02 .value 0x29b
+ 37326 7337 32 .uleb128 0x32
+ 37327 7338 8C0D0000 .long 0xd8c
+ 37328 733c 03 .byte 0x3
+ 37329 733d 91 .byte 0x91
+ 37330 733e E07E .sleb128 -160
+ 37331 7340 32 .uleb128 0x32
+ 37332 7341 800D0000 .long 0xd80
+ 37333 7345 03 .byte 0x3
+ 37334 7346 91 .byte 0x91
+ 37335 7347 F07E .sleb128 -144
+ 37336 7349 33 .uleb128 0x33
+ 37337 734a 00000000 .quad .LBB1526
+ 37337 00000000
+ 37338 7352 00000000 .quad .LBE1526
+ 37338 00000000
+ 37339 735a 34 .uleb128 0x34
+ 37340 735b 980D0000 .long 0xd98
+
GAS LISTING /tmp/ccMa7HLZ.s page 998
+
+
+ 37341 735f 03 .byte 0x3
+ 37342 7360 91 .byte 0x91
+ 37343 7361 9060 .sleb128 -4080
+ 37344 7363 34 .uleb128 0x34
+ 37345 7364 A40D0000 .long 0xda4
+ 37346 7368 03 .byte 0x3
+ 37347 7369 91 .byte 0x91
+ 37348 736a 8060 .sleb128 -4096
+ 37349 736c 34 .uleb128 0x34
+ 37350 736d AF0D0000 .long 0xdaf
+ 37351 7371 03 .byte 0x3
+ 37352 7372 91 .byte 0x91
+ 37353 7373 F05F .sleb128 -4112
+ 37354 7375 34 .uleb128 0x34
+ 37355 7376 BB0D0000 .long 0xdbb
+ 37356 737a 03 .byte 0x3
+ 37357 737b 91 .byte 0x91
+ 37358 737c 8C7F .sleb128 -116
+ 37359 737e 00 .byte 0x0
+ 37360 737f 00 .byte 0x0
+ 37361 7380 00 .byte 0x0
+ 37362 7381 00 .byte 0x0
+ 37363 7382 36 .uleb128 0x36
+ 37364 7383 00000000 .quad .LBB1527
+ 37364 00000000
+ 37365 738b 00000000 .quad .LBE1527
+ 37365 00000000
+ 37366 7393 A1730000 .long 0x73a1
+ 37367 7397 34 .uleb128 0x34
+ 37368 7398 280C0000 .long 0xc28
+ 37369 739c 03 .byte 0x3
+ 37370 739d 91 .byte 0x91
+ 37371 739e E05E .sleb128 -4256
+ 37372 73a0 00 .byte 0x0
+ 37373 73a1 31 .uleb128 0x31
+ 37374 73a2 520E0000 .long 0xe52
+ 37375 73a6 00000000 .quad .LBB1528
+ 37375 00000000
+ 37376 73ae 00000000 .quad .LBE1528
+ 37376 00000000
+ 37377 73b6 02 .byte 0x2
+ 37378 73b7 9606 .value 0x696
+ 37379 73b9 D0730000 .long 0x73d0
+ 37380 73bd 32 .uleb128 0x32
+ 37381 73be 6D0E0000 .long 0xe6d
+ 37382 73c2 03 .byte 0x3
+ 37383 73c3 91 .byte 0x91
+ 37384 73c4 907F .sleb128 -112
+ 37385 73c6 32 .uleb128 0x32
+ 37386 73c7 630E0000 .long 0xe63
+ 37387 73cb 03 .byte 0x3
+ 37388 73cc 91 .byte 0x91
+ 37389 73cd A07F .sleb128 -96
+ 37390 73cf 00 .byte 0x0
+ 37391 73d0 36 .uleb128 0x36
+ 37392 73d1 00000000 .quad .LBB1530
+ 37392 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 999
+
+
+ 37393 73d9 00000000 .quad .LBE1530
+ 37393 00000000
+ 37394 73e1 EF730000 .long 0x73ef
+ 37395 73e5 34 .uleb128 0x34
+ 37396 73e6 380C0000 .long 0xc38
+ 37397 73ea 03 .byte 0x3
+ 37398 73eb 91 .byte 0x91
+ 37399 73ec D05E .sleb128 -4272
+ 37400 73ee 00 .byte 0x0
+ 37401 73ef 31 .uleb128 0x31
+ 37402 73f0 780E0000 .long 0xe78
+ 37403 73f4 00000000 .quad .LBB1531
+ 37403 00000000
+ 37404 73fc 00000000 .quad .LBE1531
+ 37404 00000000
+ 37405 7404 02 .byte 0x2
+ 37406 7405 9806 .value 0x698
+ 37407 7407 30740000 .long 0x7430
+ 37408 740b 32 .uleb128 0x32
+ 37409 740c 8A0E0000 .long 0xe8a
+ 37410 7410 03 .byte 0x3
+ 37411 7411 91 .byte 0x91
+ 37412 7412 B07F .sleb128 -80
+ 37413 7414 33 .uleb128 0x33
+ 37414 7415 00000000 .quad .LBB1532
+ 37414 00000000
+ 37415 741d 00000000 .quad .LBE1532
+ 37415 00000000
+ 37416 7425 34 .uleb128 0x34
+ 37417 7426 960E0000 .long 0xe96
+ 37418 742a 03 .byte 0x3
+ 37419 742b 91 .byte 0x91
+ 37420 742c A060 .sleb128 -4064
+ 37421 742e 00 .byte 0x0
+ 37422 742f 00 .byte 0x0
+ 37423 7430 33 .uleb128 0x33
+ 37424 7431 00000000 .quad .LBB1533
+ 37424 00000000
+ 37425 7439 00000000 .quad .LBE1533
+ 37425 00000000
+ 37426 7441 34 .uleb128 0x34
+ 37427 7442 440C0000 .long 0xc44
+ 37428 7446 03 .byte 0x3
+ 37429 7447 91 .byte 0x91
+ 37430 7448 C05E .sleb128 -4288
+ 37431 744a 00 .byte 0x0
+ 37432 744b 00 .byte 0x0
+ 37433 744c 00 .byte 0x0
+ 37434 744d 00 .byte 0x0
+ 37435 744e 25 .uleb128 0x25
+ 37436 744f 00000000 .long .LASF353
+ 37437 7453 02 .byte 0x2
+ 37438 7454 6E06 .value 0x66e
+ 37439 7456 01 .byte 0x1
+ 37440 7457 B1010000 .long 0x1b1
+ 37441 745b 03 .byte 0x3
+ 37442 745c 83740000 .long 0x7483
+
GAS LISTING /tmp/ccMa7HLZ.s page 1000
+
+
+ 37443 7460 26 .uleb128 0x26
+ 37444 7461 00000000 .long .LASF66
+ 37445 7465 02 .byte 0x2
+ 37446 7466 6E06 .value 0x66e
+ 37447 7468 B1010000 .long 0x1b1
+ 37448 746c 28 .uleb128 0x28
+ 37449 746d 7500 .string "u"
+ 37450 746f 02 .byte 0x2
+ 37451 7470 7506 .value 0x675
+ 37452 7472 27050000 .long 0x527
+ 37453 7476 27 .uleb128 0x27
+ 37454 7477 00000000 .long .LASF339
+ 37455 747b 02 .byte 0x2
+ 37456 747c 7606 .value 0x676
+ 37457 747e 07040000 .long 0x407
+ 37458 7482 00 .byte 0x0
+ 37459 7483 2D .uleb128 0x2d
+ 37460 7484 00000000 .long .LASF354
+ 37461 7488 02 .byte 0x2
+ 37462 7489 6F07 .value 0x76f
+ 37463 748b 01 .byte 0x1
+ 37464 748c 00000000 .quad .LFB565
+ 37464 00000000
+ 37465 7494 00000000 .quad .LFE565
+ 37465 00000000
+ 37466 749c 00000000 .long .LLST3
+ 37467 74a0 DCA80000 .long 0xa8dc
+ 37468 74a4 2E .uleb128 0x2e
+ 37469 74a5 00000000 .long .LASF64
+ 37470 74a9 02 .byte 0x2
+ 37471 74aa 6F07 .value 0x76f
+ 37472 74ac 89480000 .long 0x4889
+ 37473 74b0 04 .byte 0x4
+ 37474 74b1 91 .byte 0x91
+ 37475 74b2 C8BF7F .sleb128 -8248
+ 37476 74b5 2F .uleb128 0x2f
+ 37477 74b6 6B657900 .string "key"
+ 37478 74ba 02 .byte 0x2
+ 37479 74bb 6F07 .value 0x76f
+ 37480 74bd 8F480000 .long 0x488f
+ 37481 74c1 04 .byte 0x4
+ 37482 74c2 91 .byte 0x91
+ 37483 74c3 C0BF7F .sleb128 -8256
+ 37484 74c6 37 .uleb128 0x37
+ 37485 74c7 763000 .string "v0"
+ 37486 74ca 02 .byte 0x2
+ 37487 74cb 7107 .value 0x771
+ 37488 74cd B1010000 .long 0x1b1
+ 37489 74d1 03 .byte 0x3
+ 37490 74d2 91 .byte 0x91
+ 37491 74d3 B053 .sleb128 -5712
+ 37492 74d5 37 .uleb128 0x37
+ 37493 74d6 763100 .string "v1"
+ 37494 74d9 02 .byte 0x2
+ 37495 74da 7107 .value 0x771
+ 37496 74dc B1010000 .long 0x1b1
+ 37497 74e0 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1001
+
+
+ 37498 74e1 91 .byte 0x91
+ 37499 74e2 C053 .sleb128 -5696
+ 37500 74e4 37 .uleb128 0x37
+ 37501 74e5 6B00 .string "k"
+ 37502 74e7 02 .byte 0x2
+ 37503 74e8 7207 .value 0x772
+ 37504 74ea B1010000 .long 0x1b1
+ 37505 74ee 03 .byte 0x3
+ 37506 74ef 91 .byte 0x91
+ 37507 74f0 D053 .sleb128 -5680
+ 37508 74f2 31 .uleb128 0x31
+ 37509 74f3 AB0B0000 .long 0xbab
+ 37510 74f7 00000000 .quad .LBB1944
+ 37510 00000000
+ 37511 74ff 00000000 .quad .LBE1944
+ 37511 00000000
+ 37512 7507 02 .byte 0x2
+ 37513 7508 7407 .value 0x774
+ 37514 750a 34750000 .long 0x7534
+ 37515 750e 32 .uleb128 0x32
+ 37516 750f BC0B0000 .long 0xbbc
+ 37517 7513 03 .byte 0x3
+ 37518 7514 91 .byte 0x91
+ 37519 7515 E853 .sleb128 -5656
+ 37520 7517 33 .uleb128 0x33
+ 37521 7518 00000000 .quad .LBB1945
+ 37521 00000000
+ 37522 7520 00000000 .quad .LBE1945
+ 37522 00000000
+ 37523 7528 34 .uleb128 0x34
+ 37524 7529 C70B0000 .long 0xbc7
+ 37525 752d 04 .byte 0x4
+ 37526 752e 91 .byte 0x91
+ 37527 752f D0BF7F .sleb128 -8240
+ 37528 7532 00 .byte 0x0
+ 37529 7533 00 .byte 0x0
+ 37530 7534 31 .uleb128 0x31
+ 37531 7535 AB0B0000 .long 0xbab
+ 37532 7539 00000000 .quad .LBB1946
+ 37532 00000000
+ 37533 7541 00000000 .quad .LBE1946
+ 37533 00000000
+ 37534 7549 02 .byte 0x2
+ 37535 754a 7507 .value 0x775
+ 37536 754c 76750000 .long 0x7576
+ 37537 7550 32 .uleb128 0x32
+ 37538 7551 BC0B0000 .long 0xbbc
+ 37539 7555 03 .byte 0x3
+ 37540 7556 91 .byte 0x91
+ 37541 7557 F053 .sleb128 -5648
+ 37542 7559 33 .uleb128 0x33
+ 37543 755a 00000000 .quad .LBB1947
+ 37543 00000000
+ 37544 7562 00000000 .quad .LBE1947
+ 37544 00000000
+ 37545 756a 34 .uleb128 0x34
+ 37546 756b C70B0000 .long 0xbc7
+
GAS LISTING /tmp/ccMa7HLZ.s page 1002
+
+
+ 37547 756f 04 .byte 0x4
+ 37548 7570 91 .byte 0x91
+ 37549 7571 E0BF7F .sleb128 -8224
+ 37550 7574 00 .byte 0x0
+ 37551 7575 00 .byte 0x0
+ 37552 7576 31 .uleb128 0x31
+ 37553 7577 D10B0000 .long 0xbd1
+ 37554 757b 00000000 .quad .LBB1948
+ 37554 00000000
+ 37555 7583 00000000 .quad .LBE1948
+ 37555 00000000
+ 37556 758b 02 .byte 0x2
+ 37557 758c 8607 .value 0x786
+ 37558 758e 1F7A0000 .long 0x7a1f
+ 37559 7592 32 .uleb128 0x32
+ 37560 7593 EF0B0000 .long 0xbef
+ 37561 7597 03 .byte 0x3
+ 37562 7598 91 .byte 0x91
+ 37563 7599 FC53 .sleb128 -5636
+ 37564 759b 32 .uleb128 0x32
+ 37565 759c E30B0000 .long 0xbe3
+ 37566 75a0 03 .byte 0x3
+ 37567 75a1 91 .byte 0x91
+ 37568 75a2 8054 .sleb128 -5632
+ 37569 75a4 33 .uleb128 0x33
+ 37570 75a5 00000000 .quad .LBB1949
+ 37570 00000000
+ 37571 75ad 00000000 .quad .LBE1949
+ 37571 00000000
+ 37572 75b5 34 .uleb128 0x34
+ 37573 75b6 FB0B0000 .long 0xbfb
+ 37574 75ba 04 .byte 0x4
+ 37575 75bb 76 .byte 0x76
+ 37576 75bc C0BB7F .sleb128 -8768
+ 37577 75bf 34 .uleb128 0x34
+ 37578 75c0 070C0000 .long 0xc07
+ 37579 75c4 04 .byte 0x4
+ 37580 75c5 76 .byte 0x76
+ 37581 75c6 B0BB7F .sleb128 -8784
+ 37582 75c9 31 .uleb128 0x31
+ 37583 75ca 500C0000 .long 0xc50
+ 37584 75ce 00000000 .quad .LBB1950
+ 37584 00000000
+ 37585 75d6 00000000 .quad .LBE1950
+ 37585 00000000
+ 37586 75de 02 .byte 0x2
+ 37587 75df 9106 .value 0x691
+ 37588 75e1 1C760000 .long 0x761c
+ 37589 75e5 32 .uleb128 0x32
+ 37590 75e6 7A0C0000 .long 0xc7a
+ 37591 75ea 03 .byte 0x3
+ 37592 75eb 91 .byte 0x91
+ 37593 75ec 9854 .sleb128 -5608
+ 37594 75ee 32 .uleb128 0x32
+ 37595 75ef 6E0C0000 .long 0xc6e
+ 37596 75f3 03 .byte 0x3
+ 37597 75f4 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1003
+
+
+ 37598 75f5 9C54 .sleb128 -5604
+ 37599 75f7 32 .uleb128 0x32
+ 37600 75f8 620C0000 .long 0xc62
+ 37601 75fc 03 .byte 0x3
+ 37602 75fd 91 .byte 0x91
+ 37603 75fe A054 .sleb128 -5600
+ 37604 7600 33 .uleb128 0x33
+ 37605 7601 00000000 .quad .LBB1951
+ 37605 00000000
+ 37606 7609 00000000 .quad .LBE1951
+ 37606 00000000
+ 37607 7611 34 .uleb128 0x34
+ 37608 7612 860C0000 .long 0xc86
+ 37609 7616 03 .byte 0x3
+ 37610 7617 91 .byte 0x91
+ 37611 7618 B040 .sleb128 -8144
+ 37612 761a 00 .byte 0x0
+ 37613 761b 00 .byte 0x0
+ 37614 761c 31 .uleb128 0x31
+ 37615 761d 910C0000 .long 0xc91
+ 37616 7621 00000000 .quad .LBB1952
+ 37616 00000000
+ 37617 7629 00000000 .quad .LBE1952
+ 37617 00000000
+ 37618 7631 02 .byte 0x2
+ 37619 7632 9206 .value 0x692
+ 37620 7634 8C780000 .long 0x788c
+ 37621 7638 32 .uleb128 0x32
+ 37622 7639 A30C0000 .long 0xca3
+ 37623 763d 03 .byte 0x3
+ 37624 763e 91 .byte 0x91
+ 37625 763f B054 .sleb128 -5584
+ 37626 7641 35 .uleb128 0x35
+ 37627 7642 B00C0000 .long 0xcb0
+ 37628 7646 00000000 .quad .LBB1954
+ 37628 00000000
+ 37629 764e 00000000 .quad .LBE1954
+ 37629 00000000
+ 37630 7656 02 .byte 0x2
+ 37631 7657 7D03 .value 0x37d
+ 37632 7659 32 .uleb128 0x32
+ 37633 765a CE0C0000 .long 0xcce
+ 37634 765e 03 .byte 0x3
+ 37635 765f 91 .byte 0x91
+ 37636 7660 C854 .sleb128 -5560
+ 37637 7662 32 .uleb128 0x32
+ 37638 7663 C20C0000 .long 0xcc2
+ 37639 7667 03 .byte 0x3
+ 37640 7668 91 .byte 0x91
+ 37641 7669 D054 .sleb128 -5552
+ 37642 766b 33 .uleb128 0x33
+ 37643 766c 00000000 .quad .LBB1955
+ 37643 00000000
+ 37644 7674 00000000 .quad .LBE1955
+ 37644 00000000
+ 37645 767c 34 .uleb128 0x34
+ 37646 767d DA0C0000 .long 0xcda
+
GAS LISTING /tmp/ccMa7HLZ.s page 1004
+
+
+ 37647 7681 03 .byte 0x3
+ 37648 7682 91 .byte 0x91
+ 37649 7683 A055 .sleb128 -5472
+ 37650 7685 34 .uleb128 0x34
+ 37651 7686 E50C0000 .long 0xce5
+ 37652 768a 03 .byte 0x3
+ 37653 768b 91 .byte 0x91
+ 37654 768c 9055 .sleb128 -5488
+ 37655 768e 34 .uleb128 0x34
+ 37656 768f F00C0000 .long 0xcf0
+ 37657 7693 03 .byte 0x3
+ 37658 7694 91 .byte 0x91
+ 37659 7695 8055 .sleb128 -5504
+ 37660 7697 34 .uleb128 0x34
+ 37661 7698 FC0C0000 .long 0xcfc
+ 37662 769c 03 .byte 0x3
+ 37663 769d 91 .byte 0x91
+ 37664 769e F054 .sleb128 -5520
+ 37665 76a0 34 .uleb128 0x34
+ 37666 76a1 080D0000 .long 0xd08
+ 37667 76a5 03 .byte 0x3
+ 37668 76a6 91 .byte 0x91
+ 37669 76a7 EC54 .sleb128 -5524
+ 37670 76a9 31 .uleb128 0x31
+ 37671 76aa 1F0D0000 .long 0xd1f
+ 37672 76ae 00000000 .quad .LBB1956
+ 37672 00000000
+ 37673 76b6 00000000 .quad .LBE1956
+ 37673 00000000
+ 37674 76be 02 .byte 0x2
+ 37675 76bf 5603 .value 0x356
+ 37676 76c1 D8760000 .long 0x76d8
+ 37677 76c5 32 .uleb128 0x32
+ 37678 76c6 3A0D0000 .long 0xd3a
+ 37679 76ca 03 .byte 0x3
+ 37680 76cb 91 .byte 0x91
+ 37681 76cc B055 .sleb128 -5456
+ 37682 76ce 32 .uleb128 0x32
+ 37683 76cf 300D0000 .long 0xd30
+ 37684 76d3 03 .byte 0x3
+ 37685 76d4 91 .byte 0x91
+ 37686 76d5 C055 .sleb128 -5440
+ 37687 76d7 00 .byte 0x0
+ 37688 76d8 31 .uleb128 0x31
+ 37689 76d9 450D0000 .long 0xd45
+ 37690 76dd 00000000 .quad .LBB1958
+ 37690 00000000
+ 37691 76e5 00000000 .quad .LBE1958
+ 37691 00000000
+ 37692 76ed 02 .byte 0x2
+ 37693 76ee 5E03 .value 0x35e
+ 37694 76f0 07770000 .long 0x7707
+ 37695 76f4 32 .uleb128 0x32
+ 37696 76f5 620D0000 .long 0xd62
+ 37697 76f9 03 .byte 0x3
+ 37698 76fa 91 .byte 0x91
+ 37699 76fb D055 .sleb128 -5424
+
GAS LISTING /tmp/ccMa7HLZ.s page 1005
+
+
+ 37700 76fd 32 .uleb128 0x32
+ 37701 76fe 570D0000 .long 0xd57
+ 37702 7702 03 .byte 0x3
+ 37703 7703 91 .byte 0x91
+ 37704 7704 E055 .sleb128 -5408
+ 37705 7706 00 .byte 0x0
+ 37706 7707 31 .uleb128 0x31
+ 37707 7708 6E0D0000 .long 0xd6e
+ 37708 770c 00000000 .quad .LBB1960
+ 37708 00000000
+ 37709 7714 00000000 .quad .LBE1960
+ 37709 00000000
+ 37710 771c 02 .byte 0x2
+ 37711 771d 6403 .value 0x364
+ 37712 771f 6C770000 .long 0x776c
+ 37713 7723 32 .uleb128 0x32
+ 37714 7724 8C0D0000 .long 0xd8c
+ 37715 7728 03 .byte 0x3
+ 37716 7729 91 .byte 0x91
+ 37717 772a F055 .sleb128 -5392
+ 37718 772c 32 .uleb128 0x32
+ 37719 772d 800D0000 .long 0xd80
+ 37720 7731 03 .byte 0x3
+ 37721 7732 91 .byte 0x91
+ 37722 7733 8056 .sleb128 -5376
+ 37723 7735 33 .uleb128 0x33
+ 37724 7736 00000000 .quad .LBB1961
+ 37724 00000000
+ 37725 773e 00000000 .quad .LBE1961
+ 37725 00000000
+ 37726 7746 34 .uleb128 0x34
+ 37727 7747 980D0000 .long 0xd98
+ 37728 774b 03 .byte 0x3
+ 37729 774c 91 .byte 0x91
+ 37730 774d E040 .sleb128 -8096
+ 37731 774f 34 .uleb128 0x34
+ 37732 7750 A40D0000 .long 0xda4
+ 37733 7754 03 .byte 0x3
+ 37734 7755 91 .byte 0x91
+ 37735 7756 D040 .sleb128 -8112
+ 37736 7758 34 .uleb128 0x34
+ 37737 7759 AF0D0000 .long 0xdaf
+ 37738 775d 03 .byte 0x3
+ 37739 775e 91 .byte 0x91
+ 37740 775f C040 .sleb128 -8128
+ 37741 7761 34 .uleb128 0x34
+ 37742 7762 BB0D0000 .long 0xdbb
+ 37743 7766 03 .byte 0x3
+ 37744 7767 91 .byte 0x91
+ 37745 7768 9C56 .sleb128 -5348
+ 37746 776a 00 .byte 0x0
+ 37747 776b 00 .byte 0x0
+ 37748 776c 31 .uleb128 0x31
+ 37749 776d C70D0000 .long 0xdc7
+ 37750 7771 00000000 .quad .LBB1962
+ 37750 00000000
+ 37751 7779 00000000 .quad .LBE1962
+
GAS LISTING /tmp/ccMa7HLZ.s page 1006
+
+
+ 37751 00000000
+ 37752 7781 02 .byte 0x2
+ 37753 7782 6603 .value 0x366
+ 37754 7784 9B770000 .long 0x779b
+ 37755 7788 32 .uleb128 0x32
+ 37756 7789 E20D0000 .long 0xde2
+ 37757 778d 03 .byte 0x3
+ 37758 778e 91 .byte 0x91
+ 37759 778f A056 .sleb128 -5344
+ 37760 7791 32 .uleb128 0x32
+ 37761 7792 D80D0000 .long 0xdd8
+ 37762 7796 03 .byte 0x3
+ 37763 7797 91 .byte 0x91
+ 37764 7798 B056 .sleb128 -5328
+ 37765 779a 00 .byte 0x0
+ 37766 779b 31 .uleb128 0x31
+ 37767 779c 6E0D0000 .long 0xd6e
+ 37768 77a0 00000000 .quad .LBB1964
+ 37768 00000000
+ 37769 77a8 00000000 .quad .LBE1964
+ 37769 00000000
+ 37770 77b0 02 .byte 0x2
+ 37771 77b1 6803 .value 0x368
+ 37772 77b3 00780000 .long 0x7800
+ 37773 77b7 32 .uleb128 0x32
+ 37774 77b8 8C0D0000 .long 0xd8c
+ 37775 77bc 03 .byte 0x3
+ 37776 77bd 91 .byte 0x91
+ 37777 77be C056 .sleb128 -5312
+ 37778 77c0 32 .uleb128 0x32
+ 37779 77c1 800D0000 .long 0xd80
+ 37780 77c5 03 .byte 0x3
+ 37781 77c6 91 .byte 0x91
+ 37782 77c7 D056 .sleb128 -5296
+ 37783 77c9 33 .uleb128 0x33
+ 37784 77ca 00000000 .quad .LBB1965
+ 37784 00000000
+ 37785 77d2 00000000 .quad .LBE1965
+ 37785 00000000
+ 37786 77da 34 .uleb128 0x34
+ 37787 77db 980D0000 .long 0xd98
+ 37788 77df 03 .byte 0x3
+ 37789 77e0 91 .byte 0x91
+ 37790 77e1 9041 .sleb128 -8048
+ 37791 77e3 34 .uleb128 0x34
+ 37792 77e4 A40D0000 .long 0xda4
+ 37793 77e8 03 .byte 0x3
+ 37794 77e9 91 .byte 0x91
+ 37795 77ea 8041 .sleb128 -8064
+ 37796 77ec 34 .uleb128 0x34
+ 37797 77ed AF0D0000 .long 0xdaf
+ 37798 77f1 03 .byte 0x3
+ 37799 77f2 91 .byte 0x91
+ 37800 77f3 F040 .sleb128 -8080
+ 37801 77f5 34 .uleb128 0x34
+ 37802 77f6 BB0D0000 .long 0xdbb
+ 37803 77fa 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1007
+
+
+ 37804 77fb 91 .byte 0x91
+ 37805 77fc EC56 .sleb128 -5268
+ 37806 77fe 00 .byte 0x0
+ 37807 77ff 00 .byte 0x0
+ 37808 7800 31 .uleb128 0x31
+ 37809 7801 C70D0000 .long 0xdc7
+ 37810 7805 00000000 .quad .LBB1966
+ 37810 00000000
+ 37811 780d 00000000 .quad .LBE1966
+ 37811 00000000
+ 37812 7815 02 .byte 0x2
+ 37813 7816 6A03 .value 0x36a
+ 37814 7818 2F780000 .long 0x782f
+ 37815 781c 32 .uleb128 0x32
+ 37816 781d E20D0000 .long 0xde2
+ 37817 7821 03 .byte 0x3
+ 37818 7822 91 .byte 0x91
+ 37819 7823 F056 .sleb128 -5264
+ 37820 7825 32 .uleb128 0x32
+ 37821 7826 D80D0000 .long 0xdd8
+ 37822 782a 03 .byte 0x3
+ 37823 782b 91 .byte 0x91
+ 37824 782c 8057 .sleb128 -5248
+ 37825 782e 00 .byte 0x0
+ 37826 782f 31 .uleb128 0x31
+ 37827 7830 ED0D0000 .long 0xded
+ 37828 7834 00000000 .quad .LBB1968
+ 37828 00000000
+ 37829 783c 00000000 .quad .LBE1968
+ 37829 00000000
+ 37830 7844 02 .byte 0x2
+ 37831 7845 6C03 .value 0x36c
+ 37832 7847 5E780000 .long 0x785e
+ 37833 784b 32 .uleb128 0x32
+ 37834 784c 0A0E0000 .long 0xe0a
+ 37835 7850 03 .byte 0x3
+ 37836 7851 91 .byte 0x91
+ 37837 7852 9057 .sleb128 -5232
+ 37838 7854 32 .uleb128 0x32
+ 37839 7855 FF0D0000 .long 0xdff
+ 37840 7859 03 .byte 0x3
+ 37841 785a 91 .byte 0x91
+ 37842 785b A057 .sleb128 -5216
+ 37843 785d 00 .byte 0x0
+ 37844 785e 35 .uleb128 0x35
+ 37845 785f 1F0D0000 .long 0xd1f
+ 37846 7863 00000000 .quad .LBB1970
+ 37846 00000000
+ 37847 786b 00000000 .quad .LBE1970
+ 37847 00000000
+ 37848 7873 02 .byte 0x2
+ 37849 7874 6E03 .value 0x36e
+ 37850 7876 32 .uleb128 0x32
+ 37851 7877 3A0D0000 .long 0xd3a
+ 37852 787b 03 .byte 0x3
+ 37853 787c 91 .byte 0x91
+ 37854 787d B057 .sleb128 -5200
+
GAS LISTING /tmp/ccMa7HLZ.s page 1008
+
+
+ 37855 787f 32 .uleb128 0x32
+ 37856 7880 300D0000 .long 0xd30
+ 37857 7884 03 .byte 0x3
+ 37858 7885 91 .byte 0x91
+ 37859 7886 C057 .sleb128 -5184
+ 37860 7888 00 .byte 0x0
+ 37861 7889 00 .byte 0x0
+ 37862 788a 00 .byte 0x0
+ 37863 788b 00 .byte 0x0
+ 37864 788c 36 .uleb128 0x36
+ 37865 788d 00000000 .quad .LBB1972
+ 37865 00000000
+ 37866 7895 00000000 .quad .LBE1972
+ 37866 00000000
+ 37867 789d AB780000 .long 0x78ab
+ 37868 78a1 34 .uleb128 0x34
+ 37869 78a2 180C0000 .long 0xc18
+ 37870 78a6 03 .byte 0x3
+ 37871 78a7 91 .byte 0x91
+ 37872 78a8 A040 .sleb128 -8160
+ 37873 78aa 00 .byte 0x0
+ 37874 78ab 31 .uleb128 0x31
+ 37875 78ac 160E0000 .long 0xe16
+ 37876 78b0 00000000 .quad .LBB1973
+ 37876 00000000
+ 37877 78b8 00000000 .quad .LBE1973
+ 37877 00000000
+ 37878 78c0 02 .byte 0x2
+ 37879 78c1 9406 .value 0x694
+ 37880 78c3 53790000 .long 0x7953
+ 37881 78c7 32 .uleb128 0x32
+ 37882 78c8 280E0000 .long 0xe28
+ 37883 78cc 03 .byte 0x3
+ 37884 78cd 91 .byte 0x91
+ 37885 78ce D057 .sleb128 -5168
+ 37886 78d0 33 .uleb128 0x33
+ 37887 78d1 00000000 .quad .LBB1974
+ 37887 00000000
+ 37888 78d9 00000000 .quad .LBE1974
+ 37888 00000000
+ 37889 78e1 34 .uleb128 0x34
+ 37890 78e2 340E0000 .long 0xe34
+ 37891 78e6 09 .byte 0x9
+ 37892 78e7 03 .byte 0x3
+ 37893 78e8 00000000 .quad ShiftRowTable.6768
+ 37893 00000000
+ 37894 78f0 35 .uleb128 0x35
+ 37895 78f1 6E0D0000 .long 0xd6e
+ 37896 78f5 00000000 .quad .LBB1975
+ 37896 00000000
+ 37897 78fd 00000000 .quad .LBE1975
+ 37897 00000000
+ 37898 7905 02 .byte 0x2
+ 37899 7906 9B02 .value 0x29b
+ 37900 7908 32 .uleb128 0x32
+ 37901 7909 8C0D0000 .long 0xd8c
+ 37902 790d 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1009
+
+
+ 37903 790e 91 .byte 0x91
+ 37904 790f E057 .sleb128 -5152
+ 37905 7911 32 .uleb128 0x32
+ 37906 7912 800D0000 .long 0xd80
+ 37907 7916 03 .byte 0x3
+ 37908 7917 91 .byte 0x91
+ 37909 7918 F057 .sleb128 -5136
+ 37910 791a 33 .uleb128 0x33
+ 37911 791b 00000000 .quad .LBB1976
+ 37911 00000000
+ 37912 7923 00000000 .quad .LBE1976
+ 37912 00000000
+ 37913 792b 34 .uleb128 0x34
+ 37914 792c 980D0000 .long 0xd98
+ 37915 7930 03 .byte 0x3
+ 37916 7931 91 .byte 0x91
+ 37917 7932 C041 .sleb128 -8000
+ 37918 7934 34 .uleb128 0x34
+ 37919 7935 A40D0000 .long 0xda4
+ 37920 7939 03 .byte 0x3
+ 37921 793a 91 .byte 0x91
+ 37922 793b B041 .sleb128 -8016
+ 37923 793d 34 .uleb128 0x34
+ 37924 793e AF0D0000 .long 0xdaf
+ 37925 7942 03 .byte 0x3
+ 37926 7943 91 .byte 0x91
+ 37927 7944 A041 .sleb128 -8032
+ 37928 7946 34 .uleb128 0x34
+ 37929 7947 BB0D0000 .long 0xdbb
+ 37930 794b 03 .byte 0x3
+ 37931 794c 91 .byte 0x91
+ 37932 794d 8C58 .sleb128 -5108
+ 37933 794f 00 .byte 0x0
+ 37934 7950 00 .byte 0x0
+ 37935 7951 00 .byte 0x0
+ 37936 7952 00 .byte 0x0
+ 37937 7953 36 .uleb128 0x36
+ 37938 7954 00000000 .quad .LBB1977
+ 37938 00000000
+ 37939 795c 00000000 .quad .LBE1977
+ 37939 00000000
+ 37940 7964 72790000 .long 0x7972
+ 37941 7968 34 .uleb128 0x34
+ 37942 7969 280C0000 .long 0xc28
+ 37943 796d 03 .byte 0x3
+ 37944 796e 91 .byte 0x91
+ 37945 796f 9040 .sleb128 -8176
+ 37946 7971 00 .byte 0x0
+ 37947 7972 31 .uleb128 0x31
+ 37948 7973 520E0000 .long 0xe52
+ 37949 7977 00000000 .quad .LBB1978
+ 37949 00000000
+ 37950 797f 00000000 .quad .LBE1978
+ 37950 00000000
+ 37951 7987 02 .byte 0x2
+ 37952 7988 9606 .value 0x696
+ 37953 798a A1790000 .long 0x79a1
+
GAS LISTING /tmp/ccMa7HLZ.s page 1010
+
+
+ 37954 798e 32 .uleb128 0x32
+ 37955 798f 6D0E0000 .long 0xe6d
+ 37956 7993 03 .byte 0x3
+ 37957 7994 91 .byte 0x91
+ 37958 7995 9058 .sleb128 -5104
+ 37959 7997 32 .uleb128 0x32
+ 37960 7998 630E0000 .long 0xe63
+ 37961 799c 03 .byte 0x3
+ 37962 799d 91 .byte 0x91
+ 37963 799e A058 .sleb128 -5088
+ 37964 79a0 00 .byte 0x0
+ 37965 79a1 36 .uleb128 0x36
+ 37966 79a2 00000000 .quad .LBB1980
+ 37966 00000000
+ 37967 79aa 00000000 .quad .LBE1980
+ 37967 00000000
+ 37968 79b2 C0790000 .long 0x79c0
+ 37969 79b6 34 .uleb128 0x34
+ 37970 79b7 380C0000 .long 0xc38
+ 37971 79bb 03 .byte 0x3
+ 37972 79bc 91 .byte 0x91
+ 37973 79bd 8040 .sleb128 -8192
+ 37974 79bf 00 .byte 0x0
+ 37975 79c0 31 .uleb128 0x31
+ 37976 79c1 780E0000 .long 0xe78
+ 37977 79c5 00000000 .quad .LBB1981
+ 37977 00000000
+ 37978 79cd 00000000 .quad .LBE1981
+ 37978 00000000
+ 37979 79d5 02 .byte 0x2
+ 37980 79d6 9806 .value 0x698
+ 37981 79d8 017A0000 .long 0x7a01
+ 37982 79dc 32 .uleb128 0x32
+ 37983 79dd 8A0E0000 .long 0xe8a
+ 37984 79e1 03 .byte 0x3
+ 37985 79e2 91 .byte 0x91
+ 37986 79e3 B058 .sleb128 -5072
+ 37987 79e5 33 .uleb128 0x33
+ 37988 79e6 00000000 .quad .LBB1982
+ 37988 00000000
+ 37989 79ee 00000000 .quad .LBE1982
+ 37989 00000000
+ 37990 79f6 34 .uleb128 0x34
+ 37991 79f7 960E0000 .long 0xe96
+ 37992 79fb 03 .byte 0x3
+ 37993 79fc 91 .byte 0x91
+ 37994 79fd D041 .sleb128 -7984
+ 37995 79ff 00 .byte 0x0
+ 37996 7a00 00 .byte 0x0
+ 37997 7a01 33 .uleb128 0x33
+ 37998 7a02 00000000 .quad .LBB1983
+ 37998 00000000
+ 37999 7a0a 00000000 .quad .LBE1983
+ 37999 00000000
+ 38000 7a12 34 .uleb128 0x34
+ 38001 7a13 440C0000 .long 0xc44
+ 38002 7a17 04 .byte 0x4
+
GAS LISTING /tmp/ccMa7HLZ.s page 1011
+
+
+ 38003 7a18 91 .byte 0x91
+ 38004 7a19 F0BF7F .sleb128 -8208
+ 38005 7a1c 00 .byte 0x0
+ 38006 7a1d 00 .byte 0x0
+ 38007 7a1e 00 .byte 0x0
+ 38008 7a1f 31 .uleb128 0x31
+ 38009 7a20 A30E0000 .long 0xea3
+ 38010 7a24 00000000 .quad .LBB1984
+ 38010 00000000
+ 38011 7a2c 00000000 .quad .LBE1984
+ 38011 00000000
+ 38012 7a34 02 .byte 0x2
+ 38013 7a35 8607 .value 0x786
+ 38014 7a37 207B0000 .long 0x7b20
+ 38015 7a3b 32 .uleb128 0x32
+ 38016 7a3c B50E0000 .long 0xeb5
+ 38017 7a40 03 .byte 0x3
+ 38018 7a41 91 .byte 0x91
+ 38019 7a42 C058 .sleb128 -5056
+ 38020 7a44 33 .uleb128 0x33
+ 38021 7a45 00000000 .quad .LBB1985
+ 38021 00000000
+ 38022 7a4d 00000000 .quad .LBE1985
+ 38022 00000000
+ 38023 7a55 34 .uleb128 0x34
+ 38024 7a56 C10E0000 .long 0xec1
+ 38025 7a5a 04 .byte 0x4
+ 38026 7a5b 76 .byte 0x76
+ 38027 7a5c E0BB7F .sleb128 -8736
+ 38028 7a5f 31 .uleb128 0x31
+ 38029 7a60 CE0E0000 .long 0xece
+ 38030 7a64 00000000 .quad .LBB1986
+ 38030 00000000
+ 38031 7a6c 00000000 .quad .LBE1986
+ 38031 00000000
+ 38032 7a74 02 .byte 0x2
+ 38033 7a75 1F06 .value 0x61f
+ 38034 7a77 A07A0000 .long 0x7aa0
+ 38035 7a7b 32 .uleb128 0x32
+ 38036 7a7c E00E0000 .long 0xee0
+ 38037 7a80 03 .byte 0x3
+ 38038 7a81 91 .byte 0x91
+ 38039 7a82 D058 .sleb128 -5040
+ 38040 7a84 33 .uleb128 0x33
+ 38041 7a85 00000000 .quad .LBB1987
+ 38041 00000000
+ 38042 7a8d 00000000 .quad .LBE1987
+ 38042 00000000
+ 38043 7a95 34 .uleb128 0x34
+ 38044 7a96 EC0E0000 .long 0xeec
+ 38045 7a9a 03 .byte 0x3
+ 38046 7a9b 91 .byte 0x91
+ 38047 7a9c E041 .sleb128 -7968
+ 38048 7a9e 00 .byte 0x0
+ 38049 7a9f 00 .byte 0x0
+ 38050 7aa0 31 .uleb128 0x31
+ 38051 7aa1 CE0E0000 .long 0xece
+
GAS LISTING /tmp/ccMa7HLZ.s page 1012
+
+
+ 38052 7aa5 00000000 .quad .LBB1988
+ 38052 00000000
+ 38053 7aad 00000000 .quad .LBE1988
+ 38053 00000000
+ 38054 7ab5 02 .byte 0x2
+ 38055 7ab6 2006 .value 0x620
+ 38056 7ab8 E17A0000 .long 0x7ae1
+ 38057 7abc 32 .uleb128 0x32
+ 38058 7abd E00E0000 .long 0xee0
+ 38059 7ac1 03 .byte 0x3
+ 38060 7ac2 91 .byte 0x91
+ 38061 7ac3 E058 .sleb128 -5024
+ 38062 7ac5 33 .uleb128 0x33
+ 38063 7ac6 00000000 .quad .LBB1989
+ 38063 00000000
+ 38064 7ace 00000000 .quad .LBE1989
+ 38064 00000000
+ 38065 7ad6 34 .uleb128 0x34
+ 38066 7ad7 EC0E0000 .long 0xeec
+ 38067 7adb 03 .byte 0x3
+ 38068 7adc 91 .byte 0x91
+ 38069 7add F041 .sleb128 -7952
+ 38070 7adf 00 .byte 0x0
+ 38071 7ae0 00 .byte 0x0
+ 38072 7ae1 35 .uleb128 0x35
+ 38073 7ae2 CE0E0000 .long 0xece
+ 38074 7ae6 00000000 .quad .LBB1990
+ 38074 00000000
+ 38075 7aee 00000000 .quad .LBE1990
+ 38075 00000000
+ 38076 7af6 02 .byte 0x2
+ 38077 7af7 2106 .value 0x621
+ 38078 7af9 32 .uleb128 0x32
+ 38079 7afa E00E0000 .long 0xee0
+ 38080 7afe 03 .byte 0x3
+ 38081 7aff 91 .byte 0x91
+ 38082 7b00 F058 .sleb128 -5008
+ 38083 7b02 33 .uleb128 0x33
+ 38084 7b03 00000000 .quad .LBB1991
+ 38084 00000000
+ 38085 7b0b 00000000 .quad .LBE1991
+ 38085 00000000
+ 38086 7b13 34 .uleb128 0x34
+ 38087 7b14 EC0E0000 .long 0xeec
+ 38088 7b18 03 .byte 0x3
+ 38089 7b19 91 .byte 0x91
+ 38090 7b1a 8042 .sleb128 -7936
+ 38091 7b1c 00 .byte 0x0
+ 38092 7b1d 00 .byte 0x0
+ 38093 7b1e 00 .byte 0x0
+ 38094 7b1f 00 .byte 0x0
+ 38095 7b20 31 .uleb128 0x31
+ 38096 7b21 520E0000 .long 0xe52
+ 38097 7b25 00000000 .quad .LBB1992
+ 38097 00000000
+ 38098 7b2d 00000000 .quad .LBE1992
+ 38098 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1013
+
+
+ 38099 7b35 02 .byte 0x2
+ 38100 7b36 8607 .value 0x786
+ 38101 7b38 4F7B0000 .long 0x7b4f
+ 38102 7b3c 32 .uleb128 0x32
+ 38103 7b3d 6D0E0000 .long 0xe6d
+ 38104 7b41 03 .byte 0x3
+ 38105 7b42 91 .byte 0x91
+ 38106 7b43 8059 .sleb128 -4992
+ 38107 7b45 32 .uleb128 0x32
+ 38108 7b46 630E0000 .long 0xe63
+ 38109 7b4a 03 .byte 0x3
+ 38110 7b4b 91 .byte 0x91
+ 38111 7b4c 9059 .sleb128 -4976
+ 38112 7b4e 00 .byte 0x0
+ 38113 7b4f 31 .uleb128 0x31
+ 38114 7b50 4E740000 .long 0x744e
+ 38115 7b54 00000000 .quad .LBB1994
+ 38115 00000000
+ 38116 7b5c 00000000 .quad .LBE1994
+ 38116 00000000
+ 38117 7b64 02 .byte 0x2
+ 38118 7b65 8707 .value 0x787
+ 38119 7b67 DF7B0000 .long 0x7bdf
+ 38120 7b6b 32 .uleb128 0x32
+ 38121 7b6c 60740000 .long 0x7460
+ 38122 7b70 03 .byte 0x3
+ 38123 7b71 91 .byte 0x91
+ 38124 7b72 A059 .sleb128 -4960
+ 38125 7b74 33 .uleb128 0x33
+ 38126 7b75 00000000 .quad .LBB1995
+ 38126 00000000
+ 38127 7b7d 00000000 .quad .LBE1995
+ 38127 00000000
+ 38128 7b85 34 .uleb128 0x34
+ 38129 7b86 6C740000 .long 0x746c
+ 38130 7b8a 03 .byte 0x3
+ 38131 7b8b 91 .byte 0x91
+ 38132 7b8c A042 .sleb128 -7904
+ 38133 7b8e 34 .uleb128 0x34
+ 38134 7b8f 76740000 .long 0x7476
+ 38135 7b93 03 .byte 0x3
+ 38136 7b94 91 .byte 0x91
+ 38137 7b95 B459 .sleb128 -4940
+ 38138 7b97 35 .uleb128 0x35
+ 38139 7b98 12490000 .long 0x4912
+ 38140 7b9c 00000000 .quad .LBB1996
+ 38140 00000000
+ 38141 7ba4 00000000 .quad .LBE1996
+ 38141 00000000
+ 38142 7bac 02 .byte 0x2
+ 38143 7bad 7906 .value 0x679
+ 38144 7baf 32 .uleb128 0x32
+ 38145 7bb0 24490000 .long 0x4924
+ 38146 7bb4 03 .byte 0x3
+ 38147 7bb5 91 .byte 0x91
+ 38148 7bb6 B859 .sleb128 -4936
+ 38149 7bb8 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 1014
+
+
+ 38150 7bb9 00000000 .quad .LBB1997
+ 38150 00000000
+ 38151 7bc1 00000000 .quad .LBE1997
+ 38151 00000000
+ 38152 7bc9 34 .uleb128 0x34
+ 38153 7bca 2E490000 .long 0x492e
+ 38154 7bce 03 .byte 0x3
+ 38155 7bcf 91 .byte 0x91
+ 38156 7bd0 9042 .sleb128 -7920
+ 38157 7bd2 34 .uleb128 0x34
+ 38158 7bd3 3A490000 .long 0x493a
+ 38159 7bd7 03 .byte 0x3
+ 38160 7bd8 91 .byte 0x91
+ 38161 7bd9 BC59 .sleb128 -4932
+ 38162 7bdb 00 .byte 0x0
+ 38163 7bdc 00 .byte 0x0
+ 38164 7bdd 00 .byte 0x0
+ 38165 7bde 00 .byte 0x0
+ 38166 7bdf 31 .uleb128 0x31
+ 38167 7be0 A30E0000 .long 0xea3
+ 38168 7be4 00000000 .quad .LBB1998
+ 38168 00000000
+ 38169 7bec 00000000 .quad .LBE1998
+ 38169 00000000
+ 38170 7bf4 02 .byte 0x2
+ 38171 7bf5 8707 .value 0x787
+ 38172 7bf7 E07C0000 .long 0x7ce0
+ 38173 7bfb 32 .uleb128 0x32
+ 38174 7bfc B50E0000 .long 0xeb5
+ 38175 7c00 03 .byte 0x3
+ 38176 7c01 91 .byte 0x91
+ 38177 7c02 C059 .sleb128 -4928
+ 38178 7c04 33 .uleb128 0x33
+ 38179 7c05 00000000 .quad .LBB1999
+ 38179 00000000
+ 38180 7c0d 00000000 .quad .LBE1999
+ 38180 00000000
+ 38181 7c15 34 .uleb128 0x34
+ 38182 7c16 C10E0000 .long 0xec1
+ 38183 7c1a 04 .byte 0x4
+ 38184 7c1b 76 .byte 0x76
+ 38185 7c1c F0BB7F .sleb128 -8720
+ 38186 7c1f 31 .uleb128 0x31
+ 38187 7c20 CE0E0000 .long 0xece
+ 38188 7c24 00000000 .quad .LBB2000
+ 38188 00000000
+ 38189 7c2c 00000000 .quad .LBE2000
+ 38189 00000000
+ 38190 7c34 02 .byte 0x2
+ 38191 7c35 1F06 .value 0x61f
+ 38192 7c37 607C0000 .long 0x7c60
+ 38193 7c3b 32 .uleb128 0x32
+ 38194 7c3c E00E0000 .long 0xee0
+ 38195 7c40 03 .byte 0x3
+ 38196 7c41 91 .byte 0x91
+ 38197 7c42 D059 .sleb128 -4912
+ 38198 7c44 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 1015
+
+
+ 38199 7c45 00000000 .quad .LBB2001
+ 38199 00000000
+ 38200 7c4d 00000000 .quad .LBE2001
+ 38200 00000000
+ 38201 7c55 34 .uleb128 0x34
+ 38202 7c56 EC0E0000 .long 0xeec
+ 38203 7c5a 03 .byte 0x3
+ 38204 7c5b 91 .byte 0x91
+ 38205 7c5c B042 .sleb128 -7888
+ 38206 7c5e 00 .byte 0x0
+ 38207 7c5f 00 .byte 0x0
+ 38208 7c60 31 .uleb128 0x31
+ 38209 7c61 CE0E0000 .long 0xece
+ 38210 7c65 00000000 .quad .LBB2002
+ 38210 00000000
+ 38211 7c6d 00000000 .quad .LBE2002
+ 38211 00000000
+ 38212 7c75 02 .byte 0x2
+ 38213 7c76 2006 .value 0x620
+ 38214 7c78 A17C0000 .long 0x7ca1
+ 38215 7c7c 32 .uleb128 0x32
+ 38216 7c7d E00E0000 .long 0xee0
+ 38217 7c81 03 .byte 0x3
+ 38218 7c82 91 .byte 0x91
+ 38219 7c83 E059 .sleb128 -4896
+ 38220 7c85 33 .uleb128 0x33
+ 38221 7c86 00000000 .quad .LBB2003
+ 38221 00000000
+ 38222 7c8e 00000000 .quad .LBE2003
+ 38222 00000000
+ 38223 7c96 34 .uleb128 0x34
+ 38224 7c97 EC0E0000 .long 0xeec
+ 38225 7c9b 03 .byte 0x3
+ 38226 7c9c 91 .byte 0x91
+ 38227 7c9d C042 .sleb128 -7872
+ 38228 7c9f 00 .byte 0x0
+ 38229 7ca0 00 .byte 0x0
+ 38230 7ca1 35 .uleb128 0x35
+ 38231 7ca2 CE0E0000 .long 0xece
+ 38232 7ca6 00000000 .quad .LBB2004
+ 38232 00000000
+ 38233 7cae 00000000 .quad .LBE2004
+ 38233 00000000
+ 38234 7cb6 02 .byte 0x2
+ 38235 7cb7 2106 .value 0x621
+ 38236 7cb9 32 .uleb128 0x32
+ 38237 7cba E00E0000 .long 0xee0
+ 38238 7cbe 03 .byte 0x3
+ 38239 7cbf 91 .byte 0x91
+ 38240 7cc0 F059 .sleb128 -4880
+ 38241 7cc2 33 .uleb128 0x33
+ 38242 7cc3 00000000 .quad .LBB2005
+ 38242 00000000
+ 38243 7ccb 00000000 .quad .LBE2005
+ 38243 00000000
+ 38244 7cd3 34 .uleb128 0x34
+ 38245 7cd4 EC0E0000 .long 0xeec
+
GAS LISTING /tmp/ccMa7HLZ.s page 1016
+
+
+ 38246 7cd8 03 .byte 0x3
+ 38247 7cd9 91 .byte 0x91
+ 38248 7cda D042 .sleb128 -7856
+ 38249 7cdc 00 .byte 0x0
+ 38250 7cdd 00 .byte 0x0
+ 38251 7cde 00 .byte 0x0
+ 38252 7cdf 00 .byte 0x0
+ 38253 7ce0 31 .uleb128 0x31
+ 38254 7ce1 520E0000 .long 0xe52
+ 38255 7ce5 00000000 .quad .LBB2006
+ 38255 00000000
+ 38256 7ced 00000000 .quad .LBE2006
+ 38256 00000000
+ 38257 7cf5 02 .byte 0x2
+ 38258 7cf6 8707 .value 0x787
+ 38259 7cf8 0F7D0000 .long 0x7d0f
+ 38260 7cfc 32 .uleb128 0x32
+ 38261 7cfd 6D0E0000 .long 0xe6d
+ 38262 7d01 03 .byte 0x3
+ 38263 7d02 91 .byte 0x91
+ 38264 7d03 805A .sleb128 -4864
+ 38265 7d05 32 .uleb128 0x32
+ 38266 7d06 630E0000 .long 0xe63
+ 38267 7d0a 03 .byte 0x3
+ 38268 7d0b 91 .byte 0x91
+ 38269 7d0c 905A .sleb128 -4848
+ 38270 7d0e 00 .byte 0x0
+ 38271 7d0f 31 .uleb128 0x31
+ 38272 7d10 D10B0000 .long 0xbd1
+ 38273 7d14 00000000 .quad .LBB2008
+ 38273 00000000
+ 38274 7d1c 00000000 .quad .LBE2008
+ 38274 00000000
+ 38275 7d24 02 .byte 0x2
+ 38276 7d25 8807 .value 0x788
+ 38277 7d27 B7810000 .long 0x81b7
+ 38278 7d2b 32 .uleb128 0x32
+ 38279 7d2c EF0B0000 .long 0xbef
+ 38280 7d30 03 .byte 0x3
+ 38281 7d31 91 .byte 0x91
+ 38282 7d32 AC5A .sleb128 -4820
+ 38283 7d34 32 .uleb128 0x32
+ 38284 7d35 E30B0000 .long 0xbe3
+ 38285 7d39 03 .byte 0x3
+ 38286 7d3a 91 .byte 0x91
+ 38287 7d3b B05A .sleb128 -4816
+ 38288 7d3d 33 .uleb128 0x33
+ 38289 7d3e 00000000 .quad .LBB2009
+ 38289 00000000
+ 38290 7d46 00000000 .quad .LBE2009
+ 38290 00000000
+ 38291 7d4e 34 .uleb128 0x34
+ 38292 7d4f FB0B0000 .long 0xbfb
+ 38293 7d53 04 .byte 0x4
+ 38294 7d54 76 .byte 0x76
+ 38295 7d55 90BC7F .sleb128 -8688
+ 38296 7d58 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 1017
+
+
+ 38297 7d59 070C0000 .long 0xc07
+ 38298 7d5d 04 .byte 0x4
+ 38299 7d5e 76 .byte 0x76
+ 38300 7d5f 80BC7F .sleb128 -8704
+ 38301 7d62 31 .uleb128 0x31
+ 38302 7d63 500C0000 .long 0xc50
+ 38303 7d67 00000000 .quad .LBB2010
+ 38303 00000000
+ 38304 7d6f 00000000 .quad .LBE2010
+ 38304 00000000
+ 38305 7d77 02 .byte 0x2
+ 38306 7d78 9106 .value 0x691
+ 38307 7d7a B57D0000 .long 0x7db5
+ 38308 7d7e 32 .uleb128 0x32
+ 38309 7d7f 7A0C0000 .long 0xc7a
+ 38310 7d83 03 .byte 0x3
+ 38311 7d84 91 .byte 0x91
+ 38312 7d85 C85A .sleb128 -4792
+ 38313 7d87 32 .uleb128 0x32
+ 38314 7d88 6E0C0000 .long 0xc6e
+ 38315 7d8c 03 .byte 0x3
+ 38316 7d8d 91 .byte 0x91
+ 38317 7d8e CC5A .sleb128 -4788
+ 38318 7d90 32 .uleb128 0x32
+ 38319 7d91 620C0000 .long 0xc62
+ 38320 7d95 03 .byte 0x3
+ 38321 7d96 91 .byte 0x91
+ 38322 7d97 D05A .sleb128 -4784
+ 38323 7d99 33 .uleb128 0x33
+ 38324 7d9a 00000000 .quad .LBB2011
+ 38324 00000000
+ 38325 7da2 00000000 .quad .LBE2011
+ 38325 00000000
+ 38326 7daa 34 .uleb128 0x34
+ 38327 7dab 860C0000 .long 0xc86
+ 38328 7daf 03 .byte 0x3
+ 38329 7db0 91 .byte 0x91
+ 38330 7db1 A043 .sleb128 -7776
+ 38331 7db3 00 .byte 0x0
+ 38332 7db4 00 .byte 0x0
+ 38333 7db5 31 .uleb128 0x31
+ 38334 7db6 910C0000 .long 0xc91
+ 38335 7dba 00000000 .quad .LBB2012
+ 38335 00000000
+ 38336 7dc2 00000000 .quad .LBE2012
+ 38336 00000000
+ 38337 7dca 02 .byte 0x2
+ 38338 7dcb 9206 .value 0x692
+ 38339 7dcd 25800000 .long 0x8025
+ 38340 7dd1 32 .uleb128 0x32
+ 38341 7dd2 A30C0000 .long 0xca3
+ 38342 7dd6 03 .byte 0x3
+ 38343 7dd7 91 .byte 0x91
+ 38344 7dd8 E05A .sleb128 -4768
+ 38345 7dda 35 .uleb128 0x35
+ 38346 7ddb B00C0000 .long 0xcb0
+ 38347 7ddf 00000000 .quad .LBB2014
+
GAS LISTING /tmp/ccMa7HLZ.s page 1018
+
+
+ 38347 00000000
+ 38348 7de7 00000000 .quad .LBE2014
+ 38348 00000000
+ 38349 7def 02 .byte 0x2
+ 38350 7df0 7D03 .value 0x37d
+ 38351 7df2 32 .uleb128 0x32
+ 38352 7df3 CE0C0000 .long 0xcce
+ 38353 7df7 03 .byte 0x3
+ 38354 7df8 91 .byte 0x91
+ 38355 7df9 F85A .sleb128 -4744
+ 38356 7dfb 32 .uleb128 0x32
+ 38357 7dfc C20C0000 .long 0xcc2
+ 38358 7e00 03 .byte 0x3
+ 38359 7e01 91 .byte 0x91
+ 38360 7e02 805B .sleb128 -4736
+ 38361 7e04 33 .uleb128 0x33
+ 38362 7e05 00000000 .quad .LBB2015
+ 38362 00000000
+ 38363 7e0d 00000000 .quad .LBE2015
+ 38363 00000000
+ 38364 7e15 34 .uleb128 0x34
+ 38365 7e16 DA0C0000 .long 0xcda
+ 38366 7e1a 03 .byte 0x3
+ 38367 7e1b 91 .byte 0x91
+ 38368 7e1c D05B .sleb128 -4656
+ 38369 7e1e 34 .uleb128 0x34
+ 38370 7e1f E50C0000 .long 0xce5
+ 38371 7e23 03 .byte 0x3
+ 38372 7e24 91 .byte 0x91
+ 38373 7e25 C05B .sleb128 -4672
+ 38374 7e27 34 .uleb128 0x34
+ 38375 7e28 F00C0000 .long 0xcf0
+ 38376 7e2c 03 .byte 0x3
+ 38377 7e2d 91 .byte 0x91
+ 38378 7e2e B05B .sleb128 -4688
+ 38379 7e30 34 .uleb128 0x34
+ 38380 7e31 FC0C0000 .long 0xcfc
+ 38381 7e35 03 .byte 0x3
+ 38382 7e36 91 .byte 0x91
+ 38383 7e37 A05B .sleb128 -4704
+ 38384 7e39 34 .uleb128 0x34
+ 38385 7e3a 080D0000 .long 0xd08
+ 38386 7e3e 03 .byte 0x3
+ 38387 7e3f 91 .byte 0x91
+ 38388 7e40 9C5B .sleb128 -4708
+ 38389 7e42 31 .uleb128 0x31
+ 38390 7e43 1F0D0000 .long 0xd1f
+ 38391 7e47 00000000 .quad .LBB2016
+ 38391 00000000
+ 38392 7e4f 00000000 .quad .LBE2016
+ 38392 00000000
+ 38393 7e57 02 .byte 0x2
+ 38394 7e58 5603 .value 0x356
+ 38395 7e5a 717E0000 .long 0x7e71
+ 38396 7e5e 32 .uleb128 0x32
+ 38397 7e5f 3A0D0000 .long 0xd3a
+ 38398 7e63 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1019
+
+
+ 38399 7e64 91 .byte 0x91
+ 38400 7e65 E05B .sleb128 -4640
+ 38401 7e67 32 .uleb128 0x32
+ 38402 7e68 300D0000 .long 0xd30
+ 38403 7e6c 03 .byte 0x3
+ 38404 7e6d 91 .byte 0x91
+ 38405 7e6e F05B .sleb128 -4624
+ 38406 7e70 00 .byte 0x0
+ 38407 7e71 31 .uleb128 0x31
+ 38408 7e72 450D0000 .long 0xd45
+ 38409 7e76 00000000 .quad .LBB2018
+ 38409 00000000
+ 38410 7e7e 00000000 .quad .LBE2018
+ 38410 00000000
+ 38411 7e86 02 .byte 0x2
+ 38412 7e87 5E03 .value 0x35e
+ 38413 7e89 A07E0000 .long 0x7ea0
+ 38414 7e8d 32 .uleb128 0x32
+ 38415 7e8e 620D0000 .long 0xd62
+ 38416 7e92 03 .byte 0x3
+ 38417 7e93 91 .byte 0x91
+ 38418 7e94 805C .sleb128 -4608
+ 38419 7e96 32 .uleb128 0x32
+ 38420 7e97 570D0000 .long 0xd57
+ 38421 7e9b 03 .byte 0x3
+ 38422 7e9c 91 .byte 0x91
+ 38423 7e9d 905C .sleb128 -4592
+ 38424 7e9f 00 .byte 0x0
+ 38425 7ea0 31 .uleb128 0x31
+ 38426 7ea1 6E0D0000 .long 0xd6e
+ 38427 7ea5 00000000 .quad .LBB2020
+ 38427 00000000
+ 38428 7ead 00000000 .quad .LBE2020
+ 38428 00000000
+ 38429 7eb5 02 .byte 0x2
+ 38430 7eb6 6403 .value 0x364
+ 38431 7eb8 057F0000 .long 0x7f05
+ 38432 7ebc 32 .uleb128 0x32
+ 38433 7ebd 8C0D0000 .long 0xd8c
+ 38434 7ec1 03 .byte 0x3
+ 38435 7ec2 91 .byte 0x91
+ 38436 7ec3 A05C .sleb128 -4576
+ 38437 7ec5 32 .uleb128 0x32
+ 38438 7ec6 800D0000 .long 0xd80
+ 38439 7eca 03 .byte 0x3
+ 38440 7ecb 91 .byte 0x91
+ 38441 7ecc B05C .sleb128 -4560
+ 38442 7ece 33 .uleb128 0x33
+ 38443 7ecf 00000000 .quad .LBB2021
+ 38443 00000000
+ 38444 7ed7 00000000 .quad .LBE2021
+ 38444 00000000
+ 38445 7edf 34 .uleb128 0x34
+ 38446 7ee0 980D0000 .long 0xd98
+ 38447 7ee4 03 .byte 0x3
+ 38448 7ee5 91 .byte 0x91
+ 38449 7ee6 D043 .sleb128 -7728
+
GAS LISTING /tmp/ccMa7HLZ.s page 1020
+
+
+ 38450 7ee8 34 .uleb128 0x34
+ 38451 7ee9 A40D0000 .long 0xda4
+ 38452 7eed 03 .byte 0x3
+ 38453 7eee 91 .byte 0x91
+ 38454 7eef C043 .sleb128 -7744
+ 38455 7ef1 34 .uleb128 0x34
+ 38456 7ef2 AF0D0000 .long 0xdaf
+ 38457 7ef6 03 .byte 0x3
+ 38458 7ef7 91 .byte 0x91
+ 38459 7ef8 B043 .sleb128 -7760
+ 38460 7efa 34 .uleb128 0x34
+ 38461 7efb BB0D0000 .long 0xdbb
+ 38462 7eff 03 .byte 0x3
+ 38463 7f00 91 .byte 0x91
+ 38464 7f01 CC5C .sleb128 -4532
+ 38465 7f03 00 .byte 0x0
+ 38466 7f04 00 .byte 0x0
+ 38467 7f05 31 .uleb128 0x31
+ 38468 7f06 C70D0000 .long 0xdc7
+ 38469 7f0a 00000000 .quad .LBB2022
+ 38469 00000000
+ 38470 7f12 00000000 .quad .LBE2022
+ 38470 00000000
+ 38471 7f1a 02 .byte 0x2
+ 38472 7f1b 6603 .value 0x366
+ 38473 7f1d 347F0000 .long 0x7f34
+ 38474 7f21 32 .uleb128 0x32
+ 38475 7f22 E20D0000 .long 0xde2
+ 38476 7f26 03 .byte 0x3
+ 38477 7f27 91 .byte 0x91
+ 38478 7f28 D05C .sleb128 -4528
+ 38479 7f2a 32 .uleb128 0x32
+ 38480 7f2b D80D0000 .long 0xdd8
+ 38481 7f2f 03 .byte 0x3
+ 38482 7f30 91 .byte 0x91
+ 38483 7f31 E05C .sleb128 -4512
+ 38484 7f33 00 .byte 0x0
+ 38485 7f34 31 .uleb128 0x31
+ 38486 7f35 6E0D0000 .long 0xd6e
+ 38487 7f39 00000000 .quad .LBB2024
+ 38487 00000000
+ 38488 7f41 00000000 .quad .LBE2024
+ 38488 00000000
+ 38489 7f49 02 .byte 0x2
+ 38490 7f4a 6803 .value 0x368
+ 38491 7f4c 997F0000 .long 0x7f99
+ 38492 7f50 32 .uleb128 0x32
+ 38493 7f51 8C0D0000 .long 0xd8c
+ 38494 7f55 03 .byte 0x3
+ 38495 7f56 91 .byte 0x91
+ 38496 7f57 F05C .sleb128 -4496
+ 38497 7f59 32 .uleb128 0x32
+ 38498 7f5a 800D0000 .long 0xd80
+ 38499 7f5e 03 .byte 0x3
+ 38500 7f5f 91 .byte 0x91
+ 38501 7f60 805D .sleb128 -4480
+ 38502 7f62 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 1021
+
+
+ 38503 7f63 00000000 .quad .LBB2025
+ 38503 00000000
+ 38504 7f6b 00000000 .quad .LBE2025
+ 38504 00000000
+ 38505 7f73 34 .uleb128 0x34
+ 38506 7f74 980D0000 .long 0xd98
+ 38507 7f78 03 .byte 0x3
+ 38508 7f79 91 .byte 0x91
+ 38509 7f7a 8044 .sleb128 -7680
+ 38510 7f7c 34 .uleb128 0x34
+ 38511 7f7d A40D0000 .long 0xda4
+ 38512 7f81 03 .byte 0x3
+ 38513 7f82 91 .byte 0x91
+ 38514 7f83 F043 .sleb128 -7696
+ 38515 7f85 34 .uleb128 0x34
+ 38516 7f86 AF0D0000 .long 0xdaf
+ 38517 7f8a 03 .byte 0x3
+ 38518 7f8b 91 .byte 0x91
+ 38519 7f8c E043 .sleb128 -7712
+ 38520 7f8e 34 .uleb128 0x34
+ 38521 7f8f BB0D0000 .long 0xdbb
+ 38522 7f93 03 .byte 0x3
+ 38523 7f94 91 .byte 0x91
+ 38524 7f95 9C5D .sleb128 -4452
+ 38525 7f97 00 .byte 0x0
+ 38526 7f98 00 .byte 0x0
+ 38527 7f99 31 .uleb128 0x31
+ 38528 7f9a C70D0000 .long 0xdc7
+ 38529 7f9e 00000000 .quad .LBB2026
+ 38529 00000000
+ 38530 7fa6 00000000 .quad .LBE2026
+ 38530 00000000
+ 38531 7fae 02 .byte 0x2
+ 38532 7faf 6A03 .value 0x36a
+ 38533 7fb1 C87F0000 .long 0x7fc8
+ 38534 7fb5 32 .uleb128 0x32
+ 38535 7fb6 E20D0000 .long 0xde2
+ 38536 7fba 03 .byte 0x3
+ 38537 7fbb 91 .byte 0x91
+ 38538 7fbc A05D .sleb128 -4448
+ 38539 7fbe 32 .uleb128 0x32
+ 38540 7fbf D80D0000 .long 0xdd8
+ 38541 7fc3 03 .byte 0x3
+ 38542 7fc4 91 .byte 0x91
+ 38543 7fc5 B05D .sleb128 -4432
+ 38544 7fc7 00 .byte 0x0
+ 38545 7fc8 31 .uleb128 0x31
+ 38546 7fc9 ED0D0000 .long 0xded
+ 38547 7fcd 00000000 .quad .LBB2028
+ 38547 00000000
+ 38548 7fd5 00000000 .quad .LBE2028
+ 38548 00000000
+ 38549 7fdd 02 .byte 0x2
+ 38550 7fde 6C03 .value 0x36c
+ 38551 7fe0 F77F0000 .long 0x7ff7
+ 38552 7fe4 32 .uleb128 0x32
+ 38553 7fe5 0A0E0000 .long 0xe0a
+
GAS LISTING /tmp/ccMa7HLZ.s page 1022
+
+
+ 38554 7fe9 03 .byte 0x3
+ 38555 7fea 91 .byte 0x91
+ 38556 7feb C05D .sleb128 -4416
+ 38557 7fed 32 .uleb128 0x32
+ 38558 7fee FF0D0000 .long 0xdff
+ 38559 7ff2 03 .byte 0x3
+ 38560 7ff3 91 .byte 0x91
+ 38561 7ff4 D05D .sleb128 -4400
+ 38562 7ff6 00 .byte 0x0
+ 38563 7ff7 35 .uleb128 0x35
+ 38564 7ff8 1F0D0000 .long 0xd1f
+ 38565 7ffc 00000000 .quad .LBB2030
+ 38565 00000000
+ 38566 8004 00000000 .quad .LBE2030
+ 38566 00000000
+ 38567 800c 02 .byte 0x2
+ 38568 800d 6E03 .value 0x36e
+ 38569 800f 32 .uleb128 0x32
+ 38570 8010 3A0D0000 .long 0xd3a
+ 38571 8014 03 .byte 0x3
+ 38572 8015 91 .byte 0x91
+ 38573 8016 E05D .sleb128 -4384
+ 38574 8018 32 .uleb128 0x32
+ 38575 8019 300D0000 .long 0xd30
+ 38576 801d 03 .byte 0x3
+ 38577 801e 91 .byte 0x91
+ 38578 801f F05D .sleb128 -4368
+ 38579 8021 00 .byte 0x0
+ 38580 8022 00 .byte 0x0
+ 38581 8023 00 .byte 0x0
+ 38582 8024 00 .byte 0x0
+ 38583 8025 36 .uleb128 0x36
+ 38584 8026 00000000 .quad .LBB2032
+ 38584 00000000
+ 38585 802e 00000000 .quad .LBE2032
+ 38585 00000000
+ 38586 8036 44800000 .long 0x8044
+ 38587 803a 34 .uleb128 0x34
+ 38588 803b 180C0000 .long 0xc18
+ 38589 803f 03 .byte 0x3
+ 38590 8040 91 .byte 0x91
+ 38591 8041 9043 .sleb128 -7792
+ 38592 8043 00 .byte 0x0
+ 38593 8044 31 .uleb128 0x31
+ 38594 8045 160E0000 .long 0xe16
+ 38595 8049 00000000 .quad .LBB2033
+ 38595 00000000
+ 38596 8051 00000000 .quad .LBE2033
+ 38596 00000000
+ 38597 8059 02 .byte 0x2
+ 38598 805a 9406 .value 0x694
+ 38599 805c EC800000 .long 0x80ec
+ 38600 8060 32 .uleb128 0x32
+ 38601 8061 280E0000 .long 0xe28
+ 38602 8065 03 .byte 0x3
+ 38603 8066 91 .byte 0x91
+ 38604 8067 805E .sleb128 -4352
+
GAS LISTING /tmp/ccMa7HLZ.s page 1023
+
+
+ 38605 8069 33 .uleb128 0x33
+ 38606 806a 00000000 .quad .LBB2034
+ 38606 00000000
+ 38607 8072 00000000 .quad .LBE2034
+ 38607 00000000
+ 38608 807a 34 .uleb128 0x34
+ 38609 807b 340E0000 .long 0xe34
+ 38610 807f 09 .byte 0x9
+ 38611 8080 03 .byte 0x3
+ 38612 8081 00000000 .quad ShiftRowTable.6768
+ 38612 00000000
+ 38613 8089 35 .uleb128 0x35
+ 38614 808a 6E0D0000 .long 0xd6e
+ 38615 808e 00000000 .quad .LBB2035
+ 38615 00000000
+ 38616 8096 00000000 .quad .LBE2035
+ 38616 00000000
+ 38617 809e 02 .byte 0x2
+ 38618 809f 9B02 .value 0x29b
+ 38619 80a1 32 .uleb128 0x32
+ 38620 80a2 8C0D0000 .long 0xd8c
+ 38621 80a6 03 .byte 0x3
+ 38622 80a7 91 .byte 0x91
+ 38623 80a8 905E .sleb128 -4336
+ 38624 80aa 32 .uleb128 0x32
+ 38625 80ab 800D0000 .long 0xd80
+ 38626 80af 03 .byte 0x3
+ 38627 80b0 91 .byte 0x91
+ 38628 80b1 A05E .sleb128 -4320
+ 38629 80b3 33 .uleb128 0x33
+ 38630 80b4 00000000 .quad .LBB2036
+ 38630 00000000
+ 38631 80bc 00000000 .quad .LBE2036
+ 38631 00000000
+ 38632 80c4 34 .uleb128 0x34
+ 38633 80c5 980D0000 .long 0xd98
+ 38634 80c9 03 .byte 0x3
+ 38635 80ca 91 .byte 0x91
+ 38636 80cb B044 .sleb128 -7632
+ 38637 80cd 34 .uleb128 0x34
+ 38638 80ce A40D0000 .long 0xda4
+ 38639 80d2 03 .byte 0x3
+ 38640 80d3 91 .byte 0x91
+ 38641 80d4 A044 .sleb128 -7648
+ 38642 80d6 34 .uleb128 0x34
+ 38643 80d7 AF0D0000 .long 0xdaf
+ 38644 80db 03 .byte 0x3
+ 38645 80dc 91 .byte 0x91
+ 38646 80dd 9044 .sleb128 -7664
+ 38647 80df 34 .uleb128 0x34
+ 38648 80e0 BB0D0000 .long 0xdbb
+ 38649 80e4 03 .byte 0x3
+ 38650 80e5 91 .byte 0x91
+ 38651 80e6 BC5E .sleb128 -4292
+ 38652 80e8 00 .byte 0x0
+ 38653 80e9 00 .byte 0x0
+ 38654 80ea 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1024
+
+
+ 38655 80eb 00 .byte 0x0
+ 38656 80ec 36 .uleb128 0x36
+ 38657 80ed 00000000 .quad .LBB2037
+ 38657 00000000
+ 38658 80f5 00000000 .quad .LBE2037
+ 38658 00000000
+ 38659 80fd 0B810000 .long 0x810b
+ 38660 8101 34 .uleb128 0x34
+ 38661 8102 280C0000 .long 0xc28
+ 38662 8106 03 .byte 0x3
+ 38663 8107 91 .byte 0x91
+ 38664 8108 8043 .sleb128 -7808
+ 38665 810a 00 .byte 0x0
+ 38666 810b 31 .uleb128 0x31
+ 38667 810c 520E0000 .long 0xe52
+ 38668 8110 00000000 .quad .LBB2038
+ 38668 00000000
+ 38669 8118 00000000 .quad .LBE2038
+ 38669 00000000
+ 38670 8120 02 .byte 0x2
+ 38671 8121 9606 .value 0x696
+ 38672 8123 3A810000 .long 0x813a
+ 38673 8127 32 .uleb128 0x32
+ 38674 8128 6D0E0000 .long 0xe6d
+ 38675 812c 03 .byte 0x3
+ 38676 812d 91 .byte 0x91
+ 38677 812e C05E .sleb128 -4288
+ 38678 8130 32 .uleb128 0x32
+ 38679 8131 630E0000 .long 0xe63
+ 38680 8135 03 .byte 0x3
+ 38681 8136 91 .byte 0x91
+ 38682 8137 D05E .sleb128 -4272
+ 38683 8139 00 .byte 0x0
+ 38684 813a 36 .uleb128 0x36
+ 38685 813b 00000000 .quad .LBB2040
+ 38685 00000000
+ 38686 8143 00000000 .quad .LBE2040
+ 38686 00000000
+ 38687 814b 59810000 .long 0x8159
+ 38688 814f 34 .uleb128 0x34
+ 38689 8150 380C0000 .long 0xc38
+ 38690 8154 03 .byte 0x3
+ 38691 8155 91 .byte 0x91
+ 38692 8156 F042 .sleb128 -7824
+ 38693 8158 00 .byte 0x0
+ 38694 8159 31 .uleb128 0x31
+ 38695 815a 780E0000 .long 0xe78
+ 38696 815e 00000000 .quad .LBB2041
+ 38696 00000000
+ 38697 8166 00000000 .quad .LBE2041
+ 38697 00000000
+ 38698 816e 02 .byte 0x2
+ 38699 816f 9806 .value 0x698
+ 38700 8171 9A810000 .long 0x819a
+ 38701 8175 32 .uleb128 0x32
+ 38702 8176 8A0E0000 .long 0xe8a
+ 38703 817a 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1025
+
+
+ 38704 817b 91 .byte 0x91
+ 38705 817c E05E .sleb128 -4256
+ 38706 817e 33 .uleb128 0x33
+ 38707 817f 00000000 .quad .LBB2042
+ 38707 00000000
+ 38708 8187 00000000 .quad .LBE2042
+ 38708 00000000
+ 38709 818f 34 .uleb128 0x34
+ 38710 8190 960E0000 .long 0xe96
+ 38711 8194 03 .byte 0x3
+ 38712 8195 91 .byte 0x91
+ 38713 8196 C044 .sleb128 -7616
+ 38714 8198 00 .byte 0x0
+ 38715 8199 00 .byte 0x0
+ 38716 819a 33 .uleb128 0x33
+ 38717 819b 00000000 .quad .LBB2043
+ 38717 00000000
+ 38718 81a3 00000000 .quad .LBE2043
+ 38718 00000000
+ 38719 81ab 34 .uleb128 0x34
+ 38720 81ac 440C0000 .long 0xc44
+ 38721 81b0 03 .byte 0x3
+ 38722 81b1 91 .byte 0x91
+ 38723 81b2 E042 .sleb128 -7840
+ 38724 81b4 00 .byte 0x0
+ 38725 81b5 00 .byte 0x0
+ 38726 81b6 00 .byte 0x0
+ 38727 81b7 31 .uleb128 0x31
+ 38728 81b8 A30E0000 .long 0xea3
+ 38729 81bc 00000000 .quad .LBB2044
+ 38729 00000000
+ 38730 81c4 00000000 .quad .LBE2044
+ 38730 00000000
+ 38731 81cc 02 .byte 0x2
+ 38732 81cd 8807 .value 0x788
+ 38733 81cf B8820000 .long 0x82b8
+ 38734 81d3 32 .uleb128 0x32
+ 38735 81d4 B50E0000 .long 0xeb5
+ 38736 81d8 03 .byte 0x3
+ 38737 81d9 91 .byte 0x91
+ 38738 81da F05E .sleb128 -4240
+ 38739 81dc 33 .uleb128 0x33
+ 38740 81dd 00000000 .quad .LBB2045
+ 38740 00000000
+ 38741 81e5 00000000 .quad .LBE2045
+ 38741 00000000
+ 38742 81ed 34 .uleb128 0x34
+ 38743 81ee C10E0000 .long 0xec1
+ 38744 81f2 04 .byte 0x4
+ 38745 81f3 76 .byte 0x76
+ 38746 81f4 B0BC7F .sleb128 -8656
+ 38747 81f7 31 .uleb128 0x31
+ 38748 81f8 CE0E0000 .long 0xece
+ 38749 81fc 00000000 .quad .LBB2046
+ 38749 00000000
+ 38750 8204 00000000 .quad .LBE2046
+ 38750 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1026
+
+
+ 38751 820c 02 .byte 0x2
+ 38752 820d 1F06 .value 0x61f
+ 38753 820f 38820000 .long 0x8238
+ 38754 8213 32 .uleb128 0x32
+ 38755 8214 E00E0000 .long 0xee0
+ 38756 8218 03 .byte 0x3
+ 38757 8219 91 .byte 0x91
+ 38758 821a 805F .sleb128 -4224
+ 38759 821c 33 .uleb128 0x33
+ 38760 821d 00000000 .quad .LBB2047
+ 38760 00000000
+ 38761 8225 00000000 .quad .LBE2047
+ 38761 00000000
+ 38762 822d 34 .uleb128 0x34
+ 38763 822e EC0E0000 .long 0xeec
+ 38764 8232 03 .byte 0x3
+ 38765 8233 91 .byte 0x91
+ 38766 8234 D044 .sleb128 -7600
+ 38767 8236 00 .byte 0x0
+ 38768 8237 00 .byte 0x0
+ 38769 8238 31 .uleb128 0x31
+ 38770 8239 CE0E0000 .long 0xece
+ 38771 823d 00000000 .quad .LBB2048
+ 38771 00000000
+ 38772 8245 00000000 .quad .LBE2048
+ 38772 00000000
+ 38773 824d 02 .byte 0x2
+ 38774 824e 2006 .value 0x620
+ 38775 8250 79820000 .long 0x8279
+ 38776 8254 32 .uleb128 0x32
+ 38777 8255 E00E0000 .long 0xee0
+ 38778 8259 03 .byte 0x3
+ 38779 825a 91 .byte 0x91
+ 38780 825b 905F .sleb128 -4208
+ 38781 825d 33 .uleb128 0x33
+ 38782 825e 00000000 .quad .LBB2049
+ 38782 00000000
+ 38783 8266 00000000 .quad .LBE2049
+ 38783 00000000
+ 38784 826e 34 .uleb128 0x34
+ 38785 826f EC0E0000 .long 0xeec
+ 38786 8273 03 .byte 0x3
+ 38787 8274 91 .byte 0x91
+ 38788 8275 E044 .sleb128 -7584
+ 38789 8277 00 .byte 0x0
+ 38790 8278 00 .byte 0x0
+ 38791 8279 35 .uleb128 0x35
+ 38792 827a CE0E0000 .long 0xece
+ 38793 827e 00000000 .quad .LBB2050
+ 38793 00000000
+ 38794 8286 00000000 .quad .LBE2050
+ 38794 00000000
+ 38795 828e 02 .byte 0x2
+ 38796 828f 2106 .value 0x621
+ 38797 8291 32 .uleb128 0x32
+ 38798 8292 E00E0000 .long 0xee0
+ 38799 8296 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1027
+
+
+ 38800 8297 91 .byte 0x91
+ 38801 8298 A05F .sleb128 -4192
+ 38802 829a 33 .uleb128 0x33
+ 38803 829b 00000000 .quad .LBB2051
+ 38803 00000000
+ 38804 82a3 00000000 .quad .LBE2051
+ 38804 00000000
+ 38805 82ab 34 .uleb128 0x34
+ 38806 82ac EC0E0000 .long 0xeec
+ 38807 82b0 03 .byte 0x3
+ 38808 82b1 91 .byte 0x91
+ 38809 82b2 F044 .sleb128 -7568
+ 38810 82b4 00 .byte 0x0
+ 38811 82b5 00 .byte 0x0
+ 38812 82b6 00 .byte 0x0
+ 38813 82b7 00 .byte 0x0
+ 38814 82b8 31 .uleb128 0x31
+ 38815 82b9 520E0000 .long 0xe52
+ 38816 82bd 00000000 .quad .LBB2052
+ 38816 00000000
+ 38817 82c5 00000000 .quad .LBE2052
+ 38817 00000000
+ 38818 82cd 02 .byte 0x2
+ 38819 82ce 8807 .value 0x788
+ 38820 82d0 E7820000 .long 0x82e7
+ 38821 82d4 32 .uleb128 0x32
+ 38822 82d5 6D0E0000 .long 0xe6d
+ 38823 82d9 03 .byte 0x3
+ 38824 82da 91 .byte 0x91
+ 38825 82db B05F .sleb128 -4176
+ 38826 82dd 32 .uleb128 0x32
+ 38827 82de 630E0000 .long 0xe63
+ 38828 82e2 03 .byte 0x3
+ 38829 82e3 91 .byte 0x91
+ 38830 82e4 C05F .sleb128 -4160
+ 38831 82e6 00 .byte 0x0
+ 38832 82e7 31 .uleb128 0x31
+ 38833 82e8 4E740000 .long 0x744e
+ 38834 82ec 00000000 .quad .LBB2054
+ 38834 00000000
+ 38835 82f4 00000000 .quad .LBE2054
+ 38835 00000000
+ 38836 82fc 02 .byte 0x2
+ 38837 82fd 8907 .value 0x789
+ 38838 82ff 77830000 .long 0x8377
+ 38839 8303 32 .uleb128 0x32
+ 38840 8304 60740000 .long 0x7460
+ 38841 8308 03 .byte 0x3
+ 38842 8309 91 .byte 0x91
+ 38843 830a D05F .sleb128 -4144
+ 38844 830c 33 .uleb128 0x33
+ 38845 830d 00000000 .quad .LBB2055
+ 38845 00000000
+ 38846 8315 00000000 .quad .LBE2055
+ 38846 00000000
+ 38847 831d 34 .uleb128 0x34
+ 38848 831e 6C740000 .long 0x746c
+
GAS LISTING /tmp/ccMa7HLZ.s page 1028
+
+
+ 38849 8322 03 .byte 0x3
+ 38850 8323 91 .byte 0x91
+ 38851 8324 9045 .sleb128 -7536
+ 38852 8326 34 .uleb128 0x34
+ 38853 8327 76740000 .long 0x7476
+ 38854 832b 03 .byte 0x3
+ 38855 832c 91 .byte 0x91
+ 38856 832d E45F .sleb128 -4124
+ 38857 832f 35 .uleb128 0x35
+ 38858 8330 12490000 .long 0x4912
+ 38859 8334 00000000 .quad .LBB2056
+ 38859 00000000
+ 38860 833c 00000000 .quad .LBE2056
+ 38860 00000000
+ 38861 8344 02 .byte 0x2
+ 38862 8345 7906 .value 0x679
+ 38863 8347 32 .uleb128 0x32
+ 38864 8348 24490000 .long 0x4924
+ 38865 834c 03 .byte 0x3
+ 38866 834d 91 .byte 0x91
+ 38867 834e E85F .sleb128 -4120
+ 38868 8350 33 .uleb128 0x33
+ 38869 8351 00000000 .quad .LBB2057
+ 38869 00000000
+ 38870 8359 00000000 .quad .LBE2057
+ 38870 00000000
+ 38871 8361 34 .uleb128 0x34
+ 38872 8362 2E490000 .long 0x492e
+ 38873 8366 03 .byte 0x3
+ 38874 8367 91 .byte 0x91
+ 38875 8368 8045 .sleb128 -7552
+ 38876 836a 34 .uleb128 0x34
+ 38877 836b 3A490000 .long 0x493a
+ 38878 836f 03 .byte 0x3
+ 38879 8370 91 .byte 0x91
+ 38880 8371 EC5F .sleb128 -4116
+ 38881 8373 00 .byte 0x0
+ 38882 8374 00 .byte 0x0
+ 38883 8375 00 .byte 0x0
+ 38884 8376 00 .byte 0x0
+ 38885 8377 31 .uleb128 0x31
+ 38886 8378 A30E0000 .long 0xea3
+ 38887 837c 00000000 .quad .LBB2058
+ 38887 00000000
+ 38888 8384 00000000 .quad .LBE2058
+ 38888 00000000
+ 38889 838c 02 .byte 0x2
+ 38890 838d 8907 .value 0x789
+ 38891 838f 78840000 .long 0x8478
+ 38892 8393 32 .uleb128 0x32
+ 38893 8394 B50E0000 .long 0xeb5
+ 38894 8398 03 .byte 0x3
+ 38895 8399 91 .byte 0x91
+ 38896 839a F05F .sleb128 -4112
+ 38897 839c 33 .uleb128 0x33
+ 38898 839d 00000000 .quad .LBB2059
+ 38898 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1029
+
+
+ 38899 83a5 00000000 .quad .LBE2059
+ 38899 00000000
+ 38900 83ad 34 .uleb128 0x34
+ 38901 83ae C10E0000 .long 0xec1
+ 38902 83b2 04 .byte 0x4
+ 38903 83b3 76 .byte 0x76
+ 38904 83b4 C0BC7F .sleb128 -8640
+ 38905 83b7 31 .uleb128 0x31
+ 38906 83b8 CE0E0000 .long 0xece
+ 38907 83bc 00000000 .quad .LBB2060
+ 38907 00000000
+ 38908 83c4 00000000 .quad .LBE2060
+ 38908 00000000
+ 38909 83cc 02 .byte 0x2
+ 38910 83cd 1F06 .value 0x61f
+ 38911 83cf F8830000 .long 0x83f8
+ 38912 83d3 32 .uleb128 0x32
+ 38913 83d4 E00E0000 .long 0xee0
+ 38914 83d8 03 .byte 0x3
+ 38915 83d9 91 .byte 0x91
+ 38916 83da 8060 .sleb128 -4096
+ 38917 83dc 33 .uleb128 0x33
+ 38918 83dd 00000000 .quad .LBB2061
+ 38918 00000000
+ 38919 83e5 00000000 .quad .LBE2061
+ 38919 00000000
+ 38920 83ed 34 .uleb128 0x34
+ 38921 83ee EC0E0000 .long 0xeec
+ 38922 83f2 03 .byte 0x3
+ 38923 83f3 91 .byte 0x91
+ 38924 83f4 A045 .sleb128 -7520
+ 38925 83f6 00 .byte 0x0
+ 38926 83f7 00 .byte 0x0
+ 38927 83f8 31 .uleb128 0x31
+ 38928 83f9 CE0E0000 .long 0xece
+ 38929 83fd 00000000 .quad .LBB2062
+ 38929 00000000
+ 38930 8405 00000000 .quad .LBE2062
+ 38930 00000000
+ 38931 840d 02 .byte 0x2
+ 38932 840e 2006 .value 0x620
+ 38933 8410 39840000 .long 0x8439
+ 38934 8414 32 .uleb128 0x32
+ 38935 8415 E00E0000 .long 0xee0
+ 38936 8419 03 .byte 0x3
+ 38937 841a 91 .byte 0x91
+ 38938 841b 9060 .sleb128 -4080
+ 38939 841d 33 .uleb128 0x33
+ 38940 841e 00000000 .quad .LBB2063
+ 38940 00000000
+ 38941 8426 00000000 .quad .LBE2063
+ 38941 00000000
+ 38942 842e 34 .uleb128 0x34
+ 38943 842f EC0E0000 .long 0xeec
+ 38944 8433 03 .byte 0x3
+ 38945 8434 91 .byte 0x91
+ 38946 8435 B045 .sleb128 -7504
+
GAS LISTING /tmp/ccMa7HLZ.s page 1030
+
+
+ 38947 8437 00 .byte 0x0
+ 38948 8438 00 .byte 0x0
+ 38949 8439 35 .uleb128 0x35
+ 38950 843a CE0E0000 .long 0xece
+ 38951 843e 00000000 .quad .LBB2064
+ 38951 00000000
+ 38952 8446 00000000 .quad .LBE2064
+ 38952 00000000
+ 38953 844e 02 .byte 0x2
+ 38954 844f 2106 .value 0x621
+ 38955 8451 32 .uleb128 0x32
+ 38956 8452 E00E0000 .long 0xee0
+ 38957 8456 03 .byte 0x3
+ 38958 8457 91 .byte 0x91
+ 38959 8458 A060 .sleb128 -4064
+ 38960 845a 33 .uleb128 0x33
+ 38961 845b 00000000 .quad .LBB2065
+ 38961 00000000
+ 38962 8463 00000000 .quad .LBE2065
+ 38962 00000000
+ 38963 846b 34 .uleb128 0x34
+ 38964 846c EC0E0000 .long 0xeec
+ 38965 8470 03 .byte 0x3
+ 38966 8471 91 .byte 0x91
+ 38967 8472 C045 .sleb128 -7488
+ 38968 8474 00 .byte 0x0
+ 38969 8475 00 .byte 0x0
+ 38970 8476 00 .byte 0x0
+ 38971 8477 00 .byte 0x0
+ 38972 8478 31 .uleb128 0x31
+ 38973 8479 520E0000 .long 0xe52
+ 38974 847d 00000000 .quad .LBB2066
+ 38974 00000000
+ 38975 8485 00000000 .quad .LBE2066
+ 38975 00000000
+ 38976 848d 02 .byte 0x2
+ 38977 848e 8907 .value 0x789
+ 38978 8490 A7840000 .long 0x84a7
+ 38979 8494 32 .uleb128 0x32
+ 38980 8495 6D0E0000 .long 0xe6d
+ 38981 8499 03 .byte 0x3
+ 38982 849a 91 .byte 0x91
+ 38983 849b B060 .sleb128 -4048
+ 38984 849d 32 .uleb128 0x32
+ 38985 849e 630E0000 .long 0xe63
+ 38986 84a2 03 .byte 0x3
+ 38987 84a3 91 .byte 0x91
+ 38988 84a4 C060 .sleb128 -4032
+ 38989 84a6 00 .byte 0x0
+ 38990 84a7 31 .uleb128 0x31
+ 38991 84a8 D10B0000 .long 0xbd1
+ 38992 84ac 00000000 .quad .LBB2068
+ 38992 00000000
+ 38993 84b4 00000000 .quad .LBE2068
+ 38993 00000000
+ 38994 84bc 02 .byte 0x2
+ 38995 84bd 8A07 .value 0x78a
+
GAS LISTING /tmp/ccMa7HLZ.s page 1031
+
+
+ 38996 84bf 4F890000 .long 0x894f
+ 38997 84c3 32 .uleb128 0x32
+ 38998 84c4 EF0B0000 .long 0xbef
+ 38999 84c8 03 .byte 0x3
+ 39000 84c9 91 .byte 0x91
+ 39001 84ca DC60 .sleb128 -4004
+ 39002 84cc 32 .uleb128 0x32
+ 39003 84cd E30B0000 .long 0xbe3
+ 39004 84d1 03 .byte 0x3
+ 39005 84d2 91 .byte 0x91
+ 39006 84d3 E060 .sleb128 -4000
+ 39007 84d5 33 .uleb128 0x33
+ 39008 84d6 00000000 .quad .LBB2069
+ 39008 00000000
+ 39009 84de 00000000 .quad .LBE2069
+ 39009 00000000
+ 39010 84e6 34 .uleb128 0x34
+ 39011 84e7 FB0B0000 .long 0xbfb
+ 39012 84eb 04 .byte 0x4
+ 39013 84ec 76 .byte 0x76
+ 39014 84ed E0BC7F .sleb128 -8608
+ 39015 84f0 34 .uleb128 0x34
+ 39016 84f1 070C0000 .long 0xc07
+ 39017 84f5 04 .byte 0x4
+ 39018 84f6 76 .byte 0x76
+ 39019 84f7 D0BC7F .sleb128 -8624
+ 39020 84fa 31 .uleb128 0x31
+ 39021 84fb 500C0000 .long 0xc50
+ 39022 84ff 00000000 .quad .LBB2070
+ 39022 00000000
+ 39023 8507 00000000 .quad .LBE2070
+ 39023 00000000
+ 39024 850f 02 .byte 0x2
+ 39025 8510 9106 .value 0x691
+ 39026 8512 4D850000 .long 0x854d
+ 39027 8516 32 .uleb128 0x32
+ 39028 8517 7A0C0000 .long 0xc7a
+ 39029 851b 03 .byte 0x3
+ 39030 851c 91 .byte 0x91
+ 39031 851d F860 .sleb128 -3976
+ 39032 851f 32 .uleb128 0x32
+ 39033 8520 6E0C0000 .long 0xc6e
+ 39034 8524 03 .byte 0x3
+ 39035 8525 91 .byte 0x91
+ 39036 8526 FC60 .sleb128 -3972
+ 39037 8528 32 .uleb128 0x32
+ 39038 8529 620C0000 .long 0xc62
+ 39039 852d 03 .byte 0x3
+ 39040 852e 91 .byte 0x91
+ 39041 852f 8061 .sleb128 -3968
+ 39042 8531 33 .uleb128 0x33
+ 39043 8532 00000000 .quad .LBB2071
+ 39043 00000000
+ 39044 853a 00000000 .quad .LBE2071
+ 39044 00000000
+ 39045 8542 34 .uleb128 0x34
+ 39046 8543 860C0000 .long 0xc86
+
GAS LISTING /tmp/ccMa7HLZ.s page 1032
+
+
+ 39047 8547 03 .byte 0x3
+ 39048 8548 91 .byte 0x91
+ 39049 8549 9046 .sleb128 -7408
+ 39050 854b 00 .byte 0x0
+ 39051 854c 00 .byte 0x0
+ 39052 854d 31 .uleb128 0x31
+ 39053 854e 910C0000 .long 0xc91
+ 39054 8552 00000000 .quad .LBB2072
+ 39054 00000000
+ 39055 855a 00000000 .quad .LBE2072
+ 39055 00000000
+ 39056 8562 02 .byte 0x2
+ 39057 8563 9206 .value 0x692
+ 39058 8565 BD870000 .long 0x87bd
+ 39059 8569 32 .uleb128 0x32
+ 39060 856a A30C0000 .long 0xca3
+ 39061 856e 03 .byte 0x3
+ 39062 856f 91 .byte 0x91
+ 39063 8570 9061 .sleb128 -3952
+ 39064 8572 35 .uleb128 0x35
+ 39065 8573 B00C0000 .long 0xcb0
+ 39066 8577 00000000 .quad .LBB2074
+ 39066 00000000
+ 39067 857f 00000000 .quad .LBE2074
+ 39067 00000000
+ 39068 8587 02 .byte 0x2
+ 39069 8588 7D03 .value 0x37d
+ 39070 858a 32 .uleb128 0x32
+ 39071 858b CE0C0000 .long 0xcce
+ 39072 858f 03 .byte 0x3
+ 39073 8590 91 .byte 0x91
+ 39074 8591 A861 .sleb128 -3928
+ 39075 8593 32 .uleb128 0x32
+ 39076 8594 C20C0000 .long 0xcc2
+ 39077 8598 03 .byte 0x3
+ 39078 8599 91 .byte 0x91
+ 39079 859a B061 .sleb128 -3920
+ 39080 859c 33 .uleb128 0x33
+ 39081 859d 00000000 .quad .LBB2075
+ 39081 00000000
+ 39082 85a5 00000000 .quad .LBE2075
+ 39082 00000000
+ 39083 85ad 34 .uleb128 0x34
+ 39084 85ae DA0C0000 .long 0xcda
+ 39085 85b2 03 .byte 0x3
+ 39086 85b3 91 .byte 0x91
+ 39087 85b4 8062 .sleb128 -3840
+ 39088 85b6 34 .uleb128 0x34
+ 39089 85b7 E50C0000 .long 0xce5
+ 39090 85bb 03 .byte 0x3
+ 39091 85bc 91 .byte 0x91
+ 39092 85bd F061 .sleb128 -3856
+ 39093 85bf 34 .uleb128 0x34
+ 39094 85c0 F00C0000 .long 0xcf0
+ 39095 85c4 03 .byte 0x3
+ 39096 85c5 91 .byte 0x91
+ 39097 85c6 E061 .sleb128 -3872
+
GAS LISTING /tmp/ccMa7HLZ.s page 1033
+
+
+ 39098 85c8 34 .uleb128 0x34
+ 39099 85c9 FC0C0000 .long 0xcfc
+ 39100 85cd 03 .byte 0x3
+ 39101 85ce 91 .byte 0x91
+ 39102 85cf D061 .sleb128 -3888
+ 39103 85d1 34 .uleb128 0x34
+ 39104 85d2 080D0000 .long 0xd08
+ 39105 85d6 03 .byte 0x3
+ 39106 85d7 91 .byte 0x91
+ 39107 85d8 CC61 .sleb128 -3892
+ 39108 85da 31 .uleb128 0x31
+ 39109 85db 1F0D0000 .long 0xd1f
+ 39110 85df 00000000 .quad .LBB2076
+ 39110 00000000
+ 39111 85e7 00000000 .quad .LBE2076
+ 39111 00000000
+ 39112 85ef 02 .byte 0x2
+ 39113 85f0 5603 .value 0x356
+ 39114 85f2 09860000 .long 0x8609
+ 39115 85f6 32 .uleb128 0x32
+ 39116 85f7 3A0D0000 .long 0xd3a
+ 39117 85fb 03 .byte 0x3
+ 39118 85fc 91 .byte 0x91
+ 39119 85fd 9062 .sleb128 -3824
+ 39120 85ff 32 .uleb128 0x32
+ 39121 8600 300D0000 .long 0xd30
+ 39122 8604 03 .byte 0x3
+ 39123 8605 91 .byte 0x91
+ 39124 8606 A062 .sleb128 -3808
+ 39125 8608 00 .byte 0x0
+ 39126 8609 31 .uleb128 0x31
+ 39127 860a 450D0000 .long 0xd45
+ 39128 860e 00000000 .quad .LBB2078
+ 39128 00000000
+ 39129 8616 00000000 .quad .LBE2078
+ 39129 00000000
+ 39130 861e 02 .byte 0x2
+ 39131 861f 5E03 .value 0x35e
+ 39132 8621 38860000 .long 0x8638
+ 39133 8625 32 .uleb128 0x32
+ 39134 8626 620D0000 .long 0xd62
+ 39135 862a 03 .byte 0x3
+ 39136 862b 91 .byte 0x91
+ 39137 862c B062 .sleb128 -3792
+ 39138 862e 32 .uleb128 0x32
+ 39139 862f 570D0000 .long 0xd57
+ 39140 8633 03 .byte 0x3
+ 39141 8634 91 .byte 0x91
+ 39142 8635 C062 .sleb128 -3776
+ 39143 8637 00 .byte 0x0
+ 39144 8638 31 .uleb128 0x31
+ 39145 8639 6E0D0000 .long 0xd6e
+ 39146 863d 00000000 .quad .LBB2080
+ 39146 00000000
+ 39147 8645 00000000 .quad .LBE2080
+ 39147 00000000
+ 39148 864d 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 1034
+
+
+ 39149 864e 6403 .value 0x364
+ 39150 8650 9D860000 .long 0x869d
+ 39151 8654 32 .uleb128 0x32
+ 39152 8655 8C0D0000 .long 0xd8c
+ 39153 8659 03 .byte 0x3
+ 39154 865a 91 .byte 0x91
+ 39155 865b D062 .sleb128 -3760
+ 39156 865d 32 .uleb128 0x32
+ 39157 865e 800D0000 .long 0xd80
+ 39158 8662 03 .byte 0x3
+ 39159 8663 91 .byte 0x91
+ 39160 8664 E062 .sleb128 -3744
+ 39161 8666 33 .uleb128 0x33
+ 39162 8667 00000000 .quad .LBB2081
+ 39162 00000000
+ 39163 866f 00000000 .quad .LBE2081
+ 39163 00000000
+ 39164 8677 34 .uleb128 0x34
+ 39165 8678 980D0000 .long 0xd98
+ 39166 867c 03 .byte 0x3
+ 39167 867d 91 .byte 0x91
+ 39168 867e C046 .sleb128 -7360
+ 39169 8680 34 .uleb128 0x34
+ 39170 8681 A40D0000 .long 0xda4
+ 39171 8685 03 .byte 0x3
+ 39172 8686 91 .byte 0x91
+ 39173 8687 B046 .sleb128 -7376
+ 39174 8689 34 .uleb128 0x34
+ 39175 868a AF0D0000 .long 0xdaf
+ 39176 868e 03 .byte 0x3
+ 39177 868f 91 .byte 0x91
+ 39178 8690 A046 .sleb128 -7392
+ 39179 8692 34 .uleb128 0x34
+ 39180 8693 BB0D0000 .long 0xdbb
+ 39181 8697 03 .byte 0x3
+ 39182 8698 91 .byte 0x91
+ 39183 8699 FC62 .sleb128 -3716
+ 39184 869b 00 .byte 0x0
+ 39185 869c 00 .byte 0x0
+ 39186 869d 31 .uleb128 0x31
+ 39187 869e C70D0000 .long 0xdc7
+ 39188 86a2 00000000 .quad .LBB2082
+ 39188 00000000
+ 39189 86aa 00000000 .quad .LBE2082
+ 39189 00000000
+ 39190 86b2 02 .byte 0x2
+ 39191 86b3 6603 .value 0x366
+ 39192 86b5 CC860000 .long 0x86cc
+ 39193 86b9 32 .uleb128 0x32
+ 39194 86ba E20D0000 .long 0xde2
+ 39195 86be 03 .byte 0x3
+ 39196 86bf 91 .byte 0x91
+ 39197 86c0 8063 .sleb128 -3712
+ 39198 86c2 32 .uleb128 0x32
+ 39199 86c3 D80D0000 .long 0xdd8
+ 39200 86c7 03 .byte 0x3
+ 39201 86c8 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1035
+
+
+ 39202 86c9 9063 .sleb128 -3696
+ 39203 86cb 00 .byte 0x0
+ 39204 86cc 31 .uleb128 0x31
+ 39205 86cd 6E0D0000 .long 0xd6e
+ 39206 86d1 00000000 .quad .LBB2084
+ 39206 00000000
+ 39207 86d9 00000000 .quad .LBE2084
+ 39207 00000000
+ 39208 86e1 02 .byte 0x2
+ 39209 86e2 6803 .value 0x368
+ 39210 86e4 31870000 .long 0x8731
+ 39211 86e8 32 .uleb128 0x32
+ 39212 86e9 8C0D0000 .long 0xd8c
+ 39213 86ed 03 .byte 0x3
+ 39214 86ee 91 .byte 0x91
+ 39215 86ef A063 .sleb128 -3680
+ 39216 86f1 32 .uleb128 0x32
+ 39217 86f2 800D0000 .long 0xd80
+ 39218 86f6 03 .byte 0x3
+ 39219 86f7 91 .byte 0x91
+ 39220 86f8 B063 .sleb128 -3664
+ 39221 86fa 33 .uleb128 0x33
+ 39222 86fb 00000000 .quad .LBB2085
+ 39222 00000000
+ 39223 8703 00000000 .quad .LBE2085
+ 39223 00000000
+ 39224 870b 34 .uleb128 0x34
+ 39225 870c 980D0000 .long 0xd98
+ 39226 8710 03 .byte 0x3
+ 39227 8711 91 .byte 0x91
+ 39228 8712 F046 .sleb128 -7312
+ 39229 8714 34 .uleb128 0x34
+ 39230 8715 A40D0000 .long 0xda4
+ 39231 8719 03 .byte 0x3
+ 39232 871a 91 .byte 0x91
+ 39233 871b E046 .sleb128 -7328
+ 39234 871d 34 .uleb128 0x34
+ 39235 871e AF0D0000 .long 0xdaf
+ 39236 8722 03 .byte 0x3
+ 39237 8723 91 .byte 0x91
+ 39238 8724 D046 .sleb128 -7344
+ 39239 8726 34 .uleb128 0x34
+ 39240 8727 BB0D0000 .long 0xdbb
+ 39241 872b 03 .byte 0x3
+ 39242 872c 91 .byte 0x91
+ 39243 872d CC63 .sleb128 -3636
+ 39244 872f 00 .byte 0x0
+ 39245 8730 00 .byte 0x0
+ 39246 8731 31 .uleb128 0x31
+ 39247 8732 C70D0000 .long 0xdc7
+ 39248 8736 00000000 .quad .LBB2086
+ 39248 00000000
+ 39249 873e 00000000 .quad .LBE2086
+ 39249 00000000
+ 39250 8746 02 .byte 0x2
+ 39251 8747 6A03 .value 0x36a
+ 39252 8749 60870000 .long 0x8760
+
GAS LISTING /tmp/ccMa7HLZ.s page 1036
+
+
+ 39253 874d 32 .uleb128 0x32
+ 39254 874e E20D0000 .long 0xde2
+ 39255 8752 03 .byte 0x3
+ 39256 8753 91 .byte 0x91
+ 39257 8754 D063 .sleb128 -3632
+ 39258 8756 32 .uleb128 0x32
+ 39259 8757 D80D0000 .long 0xdd8
+ 39260 875b 03 .byte 0x3
+ 39261 875c 91 .byte 0x91
+ 39262 875d E063 .sleb128 -3616
+ 39263 875f 00 .byte 0x0
+ 39264 8760 31 .uleb128 0x31
+ 39265 8761 ED0D0000 .long 0xded
+ 39266 8765 00000000 .quad .LBB2088
+ 39266 00000000
+ 39267 876d 00000000 .quad .LBE2088
+ 39267 00000000
+ 39268 8775 02 .byte 0x2
+ 39269 8776 6C03 .value 0x36c
+ 39270 8778 8F870000 .long 0x878f
+ 39271 877c 32 .uleb128 0x32
+ 39272 877d 0A0E0000 .long 0xe0a
+ 39273 8781 03 .byte 0x3
+ 39274 8782 91 .byte 0x91
+ 39275 8783 F063 .sleb128 -3600
+ 39276 8785 32 .uleb128 0x32
+ 39277 8786 FF0D0000 .long 0xdff
+ 39278 878a 03 .byte 0x3
+ 39279 878b 91 .byte 0x91
+ 39280 878c 8064 .sleb128 -3584
+ 39281 878e 00 .byte 0x0
+ 39282 878f 35 .uleb128 0x35
+ 39283 8790 1F0D0000 .long 0xd1f
+ 39284 8794 00000000 .quad .LBB2090
+ 39284 00000000
+ 39285 879c 00000000 .quad .LBE2090
+ 39285 00000000
+ 39286 87a4 02 .byte 0x2
+ 39287 87a5 6E03 .value 0x36e
+ 39288 87a7 32 .uleb128 0x32
+ 39289 87a8 3A0D0000 .long 0xd3a
+ 39290 87ac 03 .byte 0x3
+ 39291 87ad 91 .byte 0x91
+ 39292 87ae 9064 .sleb128 -3568
+ 39293 87b0 32 .uleb128 0x32
+ 39294 87b1 300D0000 .long 0xd30
+ 39295 87b5 03 .byte 0x3
+ 39296 87b6 91 .byte 0x91
+ 39297 87b7 A064 .sleb128 -3552
+ 39298 87b9 00 .byte 0x0
+ 39299 87ba 00 .byte 0x0
+ 39300 87bb 00 .byte 0x0
+ 39301 87bc 00 .byte 0x0
+ 39302 87bd 36 .uleb128 0x36
+ 39303 87be 00000000 .quad .LBB2092
+ 39303 00000000
+ 39304 87c6 00000000 .quad .LBE2092
+
GAS LISTING /tmp/ccMa7HLZ.s page 1037
+
+
+ 39304 00000000
+ 39305 87ce DC870000 .long 0x87dc
+ 39306 87d2 34 .uleb128 0x34
+ 39307 87d3 180C0000 .long 0xc18
+ 39308 87d7 03 .byte 0x3
+ 39309 87d8 91 .byte 0x91
+ 39310 87d9 8046 .sleb128 -7424
+ 39311 87db 00 .byte 0x0
+ 39312 87dc 31 .uleb128 0x31
+ 39313 87dd 160E0000 .long 0xe16
+ 39314 87e1 00000000 .quad .LBB2093
+ 39314 00000000
+ 39315 87e9 00000000 .quad .LBE2093
+ 39315 00000000
+ 39316 87f1 02 .byte 0x2
+ 39317 87f2 9406 .value 0x694
+ 39318 87f4 84880000 .long 0x8884
+ 39319 87f8 32 .uleb128 0x32
+ 39320 87f9 280E0000 .long 0xe28
+ 39321 87fd 03 .byte 0x3
+ 39322 87fe 91 .byte 0x91
+ 39323 87ff B064 .sleb128 -3536
+ 39324 8801 33 .uleb128 0x33
+ 39325 8802 00000000 .quad .LBB2094
+ 39325 00000000
+ 39326 880a 00000000 .quad .LBE2094
+ 39326 00000000
+ 39327 8812 34 .uleb128 0x34
+ 39328 8813 340E0000 .long 0xe34
+ 39329 8817 09 .byte 0x9
+ 39330 8818 03 .byte 0x3
+ 39331 8819 00000000 .quad ShiftRowTable.6768
+ 39331 00000000
+ 39332 8821 35 .uleb128 0x35
+ 39333 8822 6E0D0000 .long 0xd6e
+ 39334 8826 00000000 .quad .LBB2095
+ 39334 00000000
+ 39335 882e 00000000 .quad .LBE2095
+ 39335 00000000
+ 39336 8836 02 .byte 0x2
+ 39337 8837 9B02 .value 0x29b
+ 39338 8839 32 .uleb128 0x32
+ 39339 883a 8C0D0000 .long 0xd8c
+ 39340 883e 03 .byte 0x3
+ 39341 883f 91 .byte 0x91
+ 39342 8840 C064 .sleb128 -3520
+ 39343 8842 32 .uleb128 0x32
+ 39344 8843 800D0000 .long 0xd80
+ 39345 8847 03 .byte 0x3
+ 39346 8848 91 .byte 0x91
+ 39347 8849 D064 .sleb128 -3504
+ 39348 884b 33 .uleb128 0x33
+ 39349 884c 00000000 .quad .LBB2096
+ 39349 00000000
+ 39350 8854 00000000 .quad .LBE2096
+ 39350 00000000
+ 39351 885c 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 1038
+
+
+ 39352 885d 980D0000 .long 0xd98
+ 39353 8861 03 .byte 0x3
+ 39354 8862 91 .byte 0x91
+ 39355 8863 A047 .sleb128 -7264
+ 39356 8865 34 .uleb128 0x34
+ 39357 8866 A40D0000 .long 0xda4
+ 39358 886a 03 .byte 0x3
+ 39359 886b 91 .byte 0x91
+ 39360 886c 9047 .sleb128 -7280
+ 39361 886e 34 .uleb128 0x34
+ 39362 886f AF0D0000 .long 0xdaf
+ 39363 8873 03 .byte 0x3
+ 39364 8874 91 .byte 0x91
+ 39365 8875 8047 .sleb128 -7296
+ 39366 8877 34 .uleb128 0x34
+ 39367 8878 BB0D0000 .long 0xdbb
+ 39368 887c 03 .byte 0x3
+ 39369 887d 91 .byte 0x91
+ 39370 887e EC64 .sleb128 -3476
+ 39371 8880 00 .byte 0x0
+ 39372 8881 00 .byte 0x0
+ 39373 8882 00 .byte 0x0
+ 39374 8883 00 .byte 0x0
+ 39375 8884 36 .uleb128 0x36
+ 39376 8885 00000000 .quad .LBB2097
+ 39376 00000000
+ 39377 888d 00000000 .quad .LBE2097
+ 39377 00000000
+ 39378 8895 A3880000 .long 0x88a3
+ 39379 8899 34 .uleb128 0x34
+ 39380 889a 280C0000 .long 0xc28
+ 39381 889e 03 .byte 0x3
+ 39382 889f 91 .byte 0x91
+ 39383 88a0 F045 .sleb128 -7440
+ 39384 88a2 00 .byte 0x0
+ 39385 88a3 31 .uleb128 0x31
+ 39386 88a4 520E0000 .long 0xe52
+ 39387 88a8 00000000 .quad .LBB2098
+ 39387 00000000
+ 39388 88b0 00000000 .quad .LBE2098
+ 39388 00000000
+ 39389 88b8 02 .byte 0x2
+ 39390 88b9 9606 .value 0x696
+ 39391 88bb D2880000 .long 0x88d2
+ 39392 88bf 32 .uleb128 0x32
+ 39393 88c0 6D0E0000 .long 0xe6d
+ 39394 88c4 03 .byte 0x3
+ 39395 88c5 91 .byte 0x91
+ 39396 88c6 F064 .sleb128 -3472
+ 39397 88c8 32 .uleb128 0x32
+ 39398 88c9 630E0000 .long 0xe63
+ 39399 88cd 03 .byte 0x3
+ 39400 88ce 91 .byte 0x91
+ 39401 88cf 8065 .sleb128 -3456
+ 39402 88d1 00 .byte 0x0
+ 39403 88d2 36 .uleb128 0x36
+ 39404 88d3 00000000 .quad .LBB2100
+
GAS LISTING /tmp/ccMa7HLZ.s page 1039
+
+
+ 39404 00000000
+ 39405 88db 00000000 .quad .LBE2100
+ 39405 00000000
+ 39406 88e3 F1880000 .long 0x88f1
+ 39407 88e7 34 .uleb128 0x34
+ 39408 88e8 380C0000 .long 0xc38
+ 39409 88ec 03 .byte 0x3
+ 39410 88ed 91 .byte 0x91
+ 39411 88ee E045 .sleb128 -7456
+ 39412 88f0 00 .byte 0x0
+ 39413 88f1 31 .uleb128 0x31
+ 39414 88f2 780E0000 .long 0xe78
+ 39415 88f6 00000000 .quad .LBB2101
+ 39415 00000000
+ 39416 88fe 00000000 .quad .LBE2101
+ 39416 00000000
+ 39417 8906 02 .byte 0x2
+ 39418 8907 9806 .value 0x698
+ 39419 8909 32890000 .long 0x8932
+ 39420 890d 32 .uleb128 0x32
+ 39421 890e 8A0E0000 .long 0xe8a
+ 39422 8912 03 .byte 0x3
+ 39423 8913 91 .byte 0x91
+ 39424 8914 9065 .sleb128 -3440
+ 39425 8916 33 .uleb128 0x33
+ 39426 8917 00000000 .quad .LBB2102
+ 39426 00000000
+ 39427 891f 00000000 .quad .LBE2102
+ 39427 00000000
+ 39428 8927 34 .uleb128 0x34
+ 39429 8928 960E0000 .long 0xe96
+ 39430 892c 03 .byte 0x3
+ 39431 892d 91 .byte 0x91
+ 39432 892e B047 .sleb128 -7248
+ 39433 8930 00 .byte 0x0
+ 39434 8931 00 .byte 0x0
+ 39435 8932 33 .uleb128 0x33
+ 39436 8933 00000000 .quad .LBB2103
+ 39436 00000000
+ 39437 893b 00000000 .quad .LBE2103
+ 39437 00000000
+ 39438 8943 34 .uleb128 0x34
+ 39439 8944 440C0000 .long 0xc44
+ 39440 8948 03 .byte 0x3
+ 39441 8949 91 .byte 0x91
+ 39442 894a D045 .sleb128 -7472
+ 39443 894c 00 .byte 0x0
+ 39444 894d 00 .byte 0x0
+ 39445 894e 00 .byte 0x0
+ 39446 894f 31 .uleb128 0x31
+ 39447 8950 A30E0000 .long 0xea3
+ 39448 8954 00000000 .quad .LBB2104
+ 39448 00000000
+ 39449 895c 00000000 .quad .LBE2104
+ 39449 00000000
+ 39450 8964 02 .byte 0x2
+ 39451 8965 8A07 .value 0x78a
+
GAS LISTING /tmp/ccMa7HLZ.s page 1040
+
+
+ 39452 8967 508A0000 .long 0x8a50
+ 39453 896b 32 .uleb128 0x32
+ 39454 896c B50E0000 .long 0xeb5
+ 39455 8970 03 .byte 0x3
+ 39456 8971 91 .byte 0x91
+ 39457 8972 A065 .sleb128 -3424
+ 39458 8974 33 .uleb128 0x33
+ 39459 8975 00000000 .quad .LBB2105
+ 39459 00000000
+ 39460 897d 00000000 .quad .LBE2105
+ 39460 00000000
+ 39461 8985 34 .uleb128 0x34
+ 39462 8986 C10E0000 .long 0xec1
+ 39463 898a 04 .byte 0x4
+ 39464 898b 76 .byte 0x76
+ 39465 898c 80BD7F .sleb128 -8576
+ 39466 898f 31 .uleb128 0x31
+ 39467 8990 CE0E0000 .long 0xece
+ 39468 8994 00000000 .quad .LBB2106
+ 39468 00000000
+ 39469 899c 00000000 .quad .LBE2106
+ 39469 00000000
+ 39470 89a4 02 .byte 0x2
+ 39471 89a5 1F06 .value 0x61f
+ 39472 89a7 D0890000 .long 0x89d0
+ 39473 89ab 32 .uleb128 0x32
+ 39474 89ac E00E0000 .long 0xee0
+ 39475 89b0 03 .byte 0x3
+ 39476 89b1 91 .byte 0x91
+ 39477 89b2 B065 .sleb128 -3408
+ 39478 89b4 33 .uleb128 0x33
+ 39479 89b5 00000000 .quad .LBB2107
+ 39479 00000000
+ 39480 89bd 00000000 .quad .LBE2107
+ 39480 00000000
+ 39481 89c5 34 .uleb128 0x34
+ 39482 89c6 EC0E0000 .long 0xeec
+ 39483 89ca 03 .byte 0x3
+ 39484 89cb 91 .byte 0x91
+ 39485 89cc C047 .sleb128 -7232
+ 39486 89ce 00 .byte 0x0
+ 39487 89cf 00 .byte 0x0
+ 39488 89d0 31 .uleb128 0x31
+ 39489 89d1 CE0E0000 .long 0xece
+ 39490 89d5 00000000 .quad .LBB2108
+ 39490 00000000
+ 39491 89dd 00000000 .quad .LBE2108
+ 39491 00000000
+ 39492 89e5 02 .byte 0x2
+ 39493 89e6 2006 .value 0x620
+ 39494 89e8 118A0000 .long 0x8a11
+ 39495 89ec 32 .uleb128 0x32
+ 39496 89ed E00E0000 .long 0xee0
+ 39497 89f1 03 .byte 0x3
+ 39498 89f2 91 .byte 0x91
+ 39499 89f3 C065 .sleb128 -3392
+ 39500 89f5 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 1041
+
+
+ 39501 89f6 00000000 .quad .LBB2109
+ 39501 00000000
+ 39502 89fe 00000000 .quad .LBE2109
+ 39502 00000000
+ 39503 8a06 34 .uleb128 0x34
+ 39504 8a07 EC0E0000 .long 0xeec
+ 39505 8a0b 03 .byte 0x3
+ 39506 8a0c 91 .byte 0x91
+ 39507 8a0d D047 .sleb128 -7216
+ 39508 8a0f 00 .byte 0x0
+ 39509 8a10 00 .byte 0x0
+ 39510 8a11 35 .uleb128 0x35
+ 39511 8a12 CE0E0000 .long 0xece
+ 39512 8a16 00000000 .quad .LBB2110
+ 39512 00000000
+ 39513 8a1e 00000000 .quad .LBE2110
+ 39513 00000000
+ 39514 8a26 02 .byte 0x2
+ 39515 8a27 2106 .value 0x621
+ 39516 8a29 32 .uleb128 0x32
+ 39517 8a2a E00E0000 .long 0xee0
+ 39518 8a2e 03 .byte 0x3
+ 39519 8a2f 91 .byte 0x91
+ 39520 8a30 D065 .sleb128 -3376
+ 39521 8a32 33 .uleb128 0x33
+ 39522 8a33 00000000 .quad .LBB2111
+ 39522 00000000
+ 39523 8a3b 00000000 .quad .LBE2111
+ 39523 00000000
+ 39524 8a43 34 .uleb128 0x34
+ 39525 8a44 EC0E0000 .long 0xeec
+ 39526 8a48 03 .byte 0x3
+ 39527 8a49 91 .byte 0x91
+ 39528 8a4a E047 .sleb128 -7200
+ 39529 8a4c 00 .byte 0x0
+ 39530 8a4d 00 .byte 0x0
+ 39531 8a4e 00 .byte 0x0
+ 39532 8a4f 00 .byte 0x0
+ 39533 8a50 31 .uleb128 0x31
+ 39534 8a51 520E0000 .long 0xe52
+ 39535 8a55 00000000 .quad .LBB2112
+ 39535 00000000
+ 39536 8a5d 00000000 .quad .LBE2112
+ 39536 00000000
+ 39537 8a65 02 .byte 0x2
+ 39538 8a66 8A07 .value 0x78a
+ 39539 8a68 7F8A0000 .long 0x8a7f
+ 39540 8a6c 32 .uleb128 0x32
+ 39541 8a6d 6D0E0000 .long 0xe6d
+ 39542 8a71 03 .byte 0x3
+ 39543 8a72 91 .byte 0x91
+ 39544 8a73 E065 .sleb128 -3360
+ 39545 8a75 32 .uleb128 0x32
+ 39546 8a76 630E0000 .long 0xe63
+ 39547 8a7a 03 .byte 0x3
+ 39548 8a7b 91 .byte 0x91
+ 39549 8a7c F065 .sleb128 -3344
+
GAS LISTING /tmp/ccMa7HLZ.s page 1042
+
+
+ 39550 8a7e 00 .byte 0x0
+ 39551 8a7f 31 .uleb128 0x31
+ 39552 8a80 4E740000 .long 0x744e
+ 39553 8a84 00000000 .quad .LBB2114
+ 39553 00000000
+ 39554 8a8c 00000000 .quad .LBE2114
+ 39554 00000000
+ 39555 8a94 02 .byte 0x2
+ 39556 8a95 8B07 .value 0x78b
+ 39557 8a97 0F8B0000 .long 0x8b0f
+ 39558 8a9b 32 .uleb128 0x32
+ 39559 8a9c 60740000 .long 0x7460
+ 39560 8aa0 03 .byte 0x3
+ 39561 8aa1 91 .byte 0x91
+ 39562 8aa2 8066 .sleb128 -3328
+ 39563 8aa4 33 .uleb128 0x33
+ 39564 8aa5 00000000 .quad .LBB2115
+ 39564 00000000
+ 39565 8aad 00000000 .quad .LBE2115
+ 39565 00000000
+ 39566 8ab5 34 .uleb128 0x34
+ 39567 8ab6 6C740000 .long 0x746c
+ 39568 8aba 03 .byte 0x3
+ 39569 8abb 91 .byte 0x91
+ 39570 8abc 8048 .sleb128 -7168
+ 39571 8abe 34 .uleb128 0x34
+ 39572 8abf 76740000 .long 0x7476
+ 39573 8ac3 03 .byte 0x3
+ 39574 8ac4 91 .byte 0x91
+ 39575 8ac5 9466 .sleb128 -3308
+ 39576 8ac7 35 .uleb128 0x35
+ 39577 8ac8 12490000 .long 0x4912
+ 39578 8acc 00000000 .quad .LBB2116
+ 39578 00000000
+ 39579 8ad4 00000000 .quad .LBE2116
+ 39579 00000000
+ 39580 8adc 02 .byte 0x2
+ 39581 8add 7906 .value 0x679
+ 39582 8adf 32 .uleb128 0x32
+ 39583 8ae0 24490000 .long 0x4924
+ 39584 8ae4 03 .byte 0x3
+ 39585 8ae5 91 .byte 0x91
+ 39586 8ae6 9866 .sleb128 -3304
+ 39587 8ae8 33 .uleb128 0x33
+ 39588 8ae9 00000000 .quad .LBB2117
+ 39588 00000000
+ 39589 8af1 00000000 .quad .LBE2117
+ 39589 00000000
+ 39590 8af9 34 .uleb128 0x34
+ 39591 8afa 2E490000 .long 0x492e
+ 39592 8afe 03 .byte 0x3
+ 39593 8aff 91 .byte 0x91
+ 39594 8b00 F047 .sleb128 -7184
+ 39595 8b02 34 .uleb128 0x34
+ 39596 8b03 3A490000 .long 0x493a
+ 39597 8b07 03 .byte 0x3
+ 39598 8b08 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1043
+
+
+ 39599 8b09 9C66 .sleb128 -3300
+ 39600 8b0b 00 .byte 0x0
+ 39601 8b0c 00 .byte 0x0
+ 39602 8b0d 00 .byte 0x0
+ 39603 8b0e 00 .byte 0x0
+ 39604 8b0f 31 .uleb128 0x31
+ 39605 8b10 A30E0000 .long 0xea3
+ 39606 8b14 00000000 .quad .LBB2118
+ 39606 00000000
+ 39607 8b1c 00000000 .quad .LBE2118
+ 39607 00000000
+ 39608 8b24 02 .byte 0x2
+ 39609 8b25 8B07 .value 0x78b
+ 39610 8b27 108C0000 .long 0x8c10
+ 39611 8b2b 32 .uleb128 0x32
+ 39612 8b2c B50E0000 .long 0xeb5
+ 39613 8b30 03 .byte 0x3
+ 39614 8b31 91 .byte 0x91
+ 39615 8b32 A066 .sleb128 -3296
+ 39616 8b34 33 .uleb128 0x33
+ 39617 8b35 00000000 .quad .LBB2119
+ 39617 00000000
+ 39618 8b3d 00000000 .quad .LBE2119
+ 39618 00000000
+ 39619 8b45 34 .uleb128 0x34
+ 39620 8b46 C10E0000 .long 0xec1
+ 39621 8b4a 04 .byte 0x4
+ 39622 8b4b 76 .byte 0x76
+ 39623 8b4c 90BD7F .sleb128 -8560
+ 39624 8b4f 31 .uleb128 0x31
+ 39625 8b50 CE0E0000 .long 0xece
+ 39626 8b54 00000000 .quad .LBB2120
+ 39626 00000000
+ 39627 8b5c 00000000 .quad .LBE2120
+ 39627 00000000
+ 39628 8b64 02 .byte 0x2
+ 39629 8b65 1F06 .value 0x61f
+ 39630 8b67 908B0000 .long 0x8b90
+ 39631 8b6b 32 .uleb128 0x32
+ 39632 8b6c E00E0000 .long 0xee0
+ 39633 8b70 03 .byte 0x3
+ 39634 8b71 91 .byte 0x91
+ 39635 8b72 B066 .sleb128 -3280
+ 39636 8b74 33 .uleb128 0x33
+ 39637 8b75 00000000 .quad .LBB2121
+ 39637 00000000
+ 39638 8b7d 00000000 .quad .LBE2121
+ 39638 00000000
+ 39639 8b85 34 .uleb128 0x34
+ 39640 8b86 EC0E0000 .long 0xeec
+ 39641 8b8a 03 .byte 0x3
+ 39642 8b8b 91 .byte 0x91
+ 39643 8b8c 9048 .sleb128 -7152
+ 39644 8b8e 00 .byte 0x0
+ 39645 8b8f 00 .byte 0x0
+ 39646 8b90 31 .uleb128 0x31
+ 39647 8b91 CE0E0000 .long 0xece
+
GAS LISTING /tmp/ccMa7HLZ.s page 1044
+
+
+ 39648 8b95 00000000 .quad .LBB2122
+ 39648 00000000
+ 39649 8b9d 00000000 .quad .LBE2122
+ 39649 00000000
+ 39650 8ba5 02 .byte 0x2
+ 39651 8ba6 2006 .value 0x620
+ 39652 8ba8 D18B0000 .long 0x8bd1
+ 39653 8bac 32 .uleb128 0x32
+ 39654 8bad E00E0000 .long 0xee0
+ 39655 8bb1 03 .byte 0x3
+ 39656 8bb2 91 .byte 0x91
+ 39657 8bb3 C066 .sleb128 -3264
+ 39658 8bb5 33 .uleb128 0x33
+ 39659 8bb6 00000000 .quad .LBB2123
+ 39659 00000000
+ 39660 8bbe 00000000 .quad .LBE2123
+ 39660 00000000
+ 39661 8bc6 34 .uleb128 0x34
+ 39662 8bc7 EC0E0000 .long 0xeec
+ 39663 8bcb 03 .byte 0x3
+ 39664 8bcc 91 .byte 0x91
+ 39665 8bcd A048 .sleb128 -7136
+ 39666 8bcf 00 .byte 0x0
+ 39667 8bd0 00 .byte 0x0
+ 39668 8bd1 35 .uleb128 0x35
+ 39669 8bd2 CE0E0000 .long 0xece
+ 39670 8bd6 00000000 .quad .LBB2124
+ 39670 00000000
+ 39671 8bde 00000000 .quad .LBE2124
+ 39671 00000000
+ 39672 8be6 02 .byte 0x2
+ 39673 8be7 2106 .value 0x621
+ 39674 8be9 32 .uleb128 0x32
+ 39675 8bea E00E0000 .long 0xee0
+ 39676 8bee 03 .byte 0x3
+ 39677 8bef 91 .byte 0x91
+ 39678 8bf0 D066 .sleb128 -3248
+ 39679 8bf2 33 .uleb128 0x33
+ 39680 8bf3 00000000 .quad .LBB2125
+ 39680 00000000
+ 39681 8bfb 00000000 .quad .LBE2125
+ 39681 00000000
+ 39682 8c03 34 .uleb128 0x34
+ 39683 8c04 EC0E0000 .long 0xeec
+ 39684 8c08 03 .byte 0x3
+ 39685 8c09 91 .byte 0x91
+ 39686 8c0a B048 .sleb128 -7120
+ 39687 8c0c 00 .byte 0x0
+ 39688 8c0d 00 .byte 0x0
+ 39689 8c0e 00 .byte 0x0
+ 39690 8c0f 00 .byte 0x0
+ 39691 8c10 31 .uleb128 0x31
+ 39692 8c11 520E0000 .long 0xe52
+ 39693 8c15 00000000 .quad .LBB2126
+ 39693 00000000
+ 39694 8c1d 00000000 .quad .LBE2126
+ 39694 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1045
+
+
+ 39695 8c25 02 .byte 0x2
+ 39696 8c26 8B07 .value 0x78b
+ 39697 8c28 3F8C0000 .long 0x8c3f
+ 39698 8c2c 32 .uleb128 0x32
+ 39699 8c2d 6D0E0000 .long 0xe6d
+ 39700 8c31 03 .byte 0x3
+ 39701 8c32 91 .byte 0x91
+ 39702 8c33 E066 .sleb128 -3232
+ 39703 8c35 32 .uleb128 0x32
+ 39704 8c36 630E0000 .long 0xe63
+ 39705 8c3a 03 .byte 0x3
+ 39706 8c3b 91 .byte 0x91
+ 39707 8c3c F066 .sleb128 -3216
+ 39708 8c3e 00 .byte 0x0
+ 39709 8c3f 31 .uleb128 0x31
+ 39710 8c40 D10B0000 .long 0xbd1
+ 39711 8c44 00000000 .quad .LBB2128
+ 39711 00000000
+ 39712 8c4c 00000000 .quad .LBE2128
+ 39712 00000000
+ 39713 8c54 02 .byte 0x2
+ 39714 8c55 8C07 .value 0x78c
+ 39715 8c57 E7900000 .long 0x90e7
+ 39716 8c5b 32 .uleb128 0x32
+ 39717 8c5c EF0B0000 .long 0xbef
+ 39718 8c60 03 .byte 0x3
+ 39719 8c61 91 .byte 0x91
+ 39720 8c62 8C67 .sleb128 -3188
+ 39721 8c64 32 .uleb128 0x32
+ 39722 8c65 E30B0000 .long 0xbe3
+ 39723 8c69 03 .byte 0x3
+ 39724 8c6a 91 .byte 0x91
+ 39725 8c6b 9067 .sleb128 -3184
+ 39726 8c6d 33 .uleb128 0x33
+ 39727 8c6e 00000000 .quad .LBB2129
+ 39727 00000000
+ 39728 8c76 00000000 .quad .LBE2129
+ 39728 00000000
+ 39729 8c7e 34 .uleb128 0x34
+ 39730 8c7f FB0B0000 .long 0xbfb
+ 39731 8c83 04 .byte 0x4
+ 39732 8c84 76 .byte 0x76
+ 39733 8c85 B0BD7F .sleb128 -8528
+ 39734 8c88 34 .uleb128 0x34
+ 39735 8c89 070C0000 .long 0xc07
+ 39736 8c8d 04 .byte 0x4
+ 39737 8c8e 76 .byte 0x76
+ 39738 8c8f A0BD7F .sleb128 -8544
+ 39739 8c92 31 .uleb128 0x31
+ 39740 8c93 500C0000 .long 0xc50
+ 39741 8c97 00000000 .quad .LBB2130
+ 39741 00000000
+ 39742 8c9f 00000000 .quad .LBE2130
+ 39742 00000000
+ 39743 8ca7 02 .byte 0x2
+ 39744 8ca8 9106 .value 0x691
+ 39745 8caa E58C0000 .long 0x8ce5
+
GAS LISTING /tmp/ccMa7HLZ.s page 1046
+
+
+ 39746 8cae 32 .uleb128 0x32
+ 39747 8caf 7A0C0000 .long 0xc7a
+ 39748 8cb3 03 .byte 0x3
+ 39749 8cb4 91 .byte 0x91
+ 39750 8cb5 A867 .sleb128 -3160
+ 39751 8cb7 32 .uleb128 0x32
+ 39752 8cb8 6E0C0000 .long 0xc6e
+ 39753 8cbc 03 .byte 0x3
+ 39754 8cbd 91 .byte 0x91
+ 39755 8cbe AC67 .sleb128 -3156
+ 39756 8cc0 32 .uleb128 0x32
+ 39757 8cc1 620C0000 .long 0xc62
+ 39758 8cc5 03 .byte 0x3
+ 39759 8cc6 91 .byte 0x91
+ 39760 8cc7 B067 .sleb128 -3152
+ 39761 8cc9 33 .uleb128 0x33
+ 39762 8cca 00000000 .quad .LBB2131
+ 39762 00000000
+ 39763 8cd2 00000000 .quad .LBE2131
+ 39763 00000000
+ 39764 8cda 34 .uleb128 0x34
+ 39765 8cdb 860C0000 .long 0xc86
+ 39766 8cdf 03 .byte 0x3
+ 39767 8ce0 91 .byte 0x91
+ 39768 8ce1 8049 .sleb128 -7040
+ 39769 8ce3 00 .byte 0x0
+ 39770 8ce4 00 .byte 0x0
+ 39771 8ce5 31 .uleb128 0x31
+ 39772 8ce6 910C0000 .long 0xc91
+ 39773 8cea 00000000 .quad .LBB2132
+ 39773 00000000
+ 39774 8cf2 00000000 .quad .LBE2132
+ 39774 00000000
+ 39775 8cfa 02 .byte 0x2
+ 39776 8cfb 9206 .value 0x692
+ 39777 8cfd 558F0000 .long 0x8f55
+ 39778 8d01 32 .uleb128 0x32
+ 39779 8d02 A30C0000 .long 0xca3
+ 39780 8d06 03 .byte 0x3
+ 39781 8d07 91 .byte 0x91
+ 39782 8d08 C067 .sleb128 -3136
+ 39783 8d0a 35 .uleb128 0x35
+ 39784 8d0b B00C0000 .long 0xcb0
+ 39785 8d0f 00000000 .quad .LBB2134
+ 39785 00000000
+ 39786 8d17 00000000 .quad .LBE2134
+ 39786 00000000
+ 39787 8d1f 02 .byte 0x2
+ 39788 8d20 7D03 .value 0x37d
+ 39789 8d22 32 .uleb128 0x32
+ 39790 8d23 CE0C0000 .long 0xcce
+ 39791 8d27 03 .byte 0x3
+ 39792 8d28 91 .byte 0x91
+ 39793 8d29 D867 .sleb128 -3112
+ 39794 8d2b 32 .uleb128 0x32
+ 39795 8d2c C20C0000 .long 0xcc2
+ 39796 8d30 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1047
+
+
+ 39797 8d31 91 .byte 0x91
+ 39798 8d32 E067 .sleb128 -3104
+ 39799 8d34 33 .uleb128 0x33
+ 39800 8d35 00000000 .quad .LBB2135
+ 39800 00000000
+ 39801 8d3d 00000000 .quad .LBE2135
+ 39801 00000000
+ 39802 8d45 34 .uleb128 0x34
+ 39803 8d46 DA0C0000 .long 0xcda
+ 39804 8d4a 03 .byte 0x3
+ 39805 8d4b 91 .byte 0x91
+ 39806 8d4c B068 .sleb128 -3024
+ 39807 8d4e 34 .uleb128 0x34
+ 39808 8d4f E50C0000 .long 0xce5
+ 39809 8d53 03 .byte 0x3
+ 39810 8d54 91 .byte 0x91
+ 39811 8d55 A068 .sleb128 -3040
+ 39812 8d57 34 .uleb128 0x34
+ 39813 8d58 F00C0000 .long 0xcf0
+ 39814 8d5c 03 .byte 0x3
+ 39815 8d5d 91 .byte 0x91
+ 39816 8d5e 9068 .sleb128 -3056
+ 39817 8d60 34 .uleb128 0x34
+ 39818 8d61 FC0C0000 .long 0xcfc
+ 39819 8d65 03 .byte 0x3
+ 39820 8d66 91 .byte 0x91
+ 39821 8d67 8068 .sleb128 -3072
+ 39822 8d69 34 .uleb128 0x34
+ 39823 8d6a 080D0000 .long 0xd08
+ 39824 8d6e 03 .byte 0x3
+ 39825 8d6f 91 .byte 0x91
+ 39826 8d70 FC67 .sleb128 -3076
+ 39827 8d72 31 .uleb128 0x31
+ 39828 8d73 1F0D0000 .long 0xd1f
+ 39829 8d77 00000000 .quad .LBB2136
+ 39829 00000000
+ 39830 8d7f 00000000 .quad .LBE2136
+ 39830 00000000
+ 39831 8d87 02 .byte 0x2
+ 39832 8d88 5603 .value 0x356
+ 39833 8d8a A18D0000 .long 0x8da1
+ 39834 8d8e 32 .uleb128 0x32
+ 39835 8d8f 3A0D0000 .long 0xd3a
+ 39836 8d93 03 .byte 0x3
+ 39837 8d94 91 .byte 0x91
+ 39838 8d95 C068 .sleb128 -3008
+ 39839 8d97 32 .uleb128 0x32
+ 39840 8d98 300D0000 .long 0xd30
+ 39841 8d9c 03 .byte 0x3
+ 39842 8d9d 91 .byte 0x91
+ 39843 8d9e D068 .sleb128 -2992
+ 39844 8da0 00 .byte 0x0
+ 39845 8da1 31 .uleb128 0x31
+ 39846 8da2 450D0000 .long 0xd45
+ 39847 8da6 00000000 .quad .LBB2138
+ 39847 00000000
+ 39848 8dae 00000000 .quad .LBE2138
+
GAS LISTING /tmp/ccMa7HLZ.s page 1048
+
+
+ 39848 00000000
+ 39849 8db6 02 .byte 0x2
+ 39850 8db7 5E03 .value 0x35e
+ 39851 8db9 D08D0000 .long 0x8dd0
+ 39852 8dbd 32 .uleb128 0x32
+ 39853 8dbe 620D0000 .long 0xd62
+ 39854 8dc2 03 .byte 0x3
+ 39855 8dc3 91 .byte 0x91
+ 39856 8dc4 E068 .sleb128 -2976
+ 39857 8dc6 32 .uleb128 0x32
+ 39858 8dc7 570D0000 .long 0xd57
+ 39859 8dcb 03 .byte 0x3
+ 39860 8dcc 91 .byte 0x91
+ 39861 8dcd F068 .sleb128 -2960
+ 39862 8dcf 00 .byte 0x0
+ 39863 8dd0 31 .uleb128 0x31
+ 39864 8dd1 6E0D0000 .long 0xd6e
+ 39865 8dd5 00000000 .quad .LBB2140
+ 39865 00000000
+ 39866 8ddd 00000000 .quad .LBE2140
+ 39866 00000000
+ 39867 8de5 02 .byte 0x2
+ 39868 8de6 6403 .value 0x364
+ 39869 8de8 358E0000 .long 0x8e35
+ 39870 8dec 32 .uleb128 0x32
+ 39871 8ded 8C0D0000 .long 0xd8c
+ 39872 8df1 03 .byte 0x3
+ 39873 8df2 91 .byte 0x91
+ 39874 8df3 8069 .sleb128 -2944
+ 39875 8df5 32 .uleb128 0x32
+ 39876 8df6 800D0000 .long 0xd80
+ 39877 8dfa 03 .byte 0x3
+ 39878 8dfb 91 .byte 0x91
+ 39879 8dfc 9069 .sleb128 -2928
+ 39880 8dfe 33 .uleb128 0x33
+ 39881 8dff 00000000 .quad .LBB2141
+ 39881 00000000
+ 39882 8e07 00000000 .quad .LBE2141
+ 39882 00000000
+ 39883 8e0f 34 .uleb128 0x34
+ 39884 8e10 980D0000 .long 0xd98
+ 39885 8e14 03 .byte 0x3
+ 39886 8e15 91 .byte 0x91
+ 39887 8e16 B049 .sleb128 -6992
+ 39888 8e18 34 .uleb128 0x34
+ 39889 8e19 A40D0000 .long 0xda4
+ 39890 8e1d 03 .byte 0x3
+ 39891 8e1e 91 .byte 0x91
+ 39892 8e1f A049 .sleb128 -7008
+ 39893 8e21 34 .uleb128 0x34
+ 39894 8e22 AF0D0000 .long 0xdaf
+ 39895 8e26 03 .byte 0x3
+ 39896 8e27 91 .byte 0x91
+ 39897 8e28 9049 .sleb128 -7024
+ 39898 8e2a 34 .uleb128 0x34
+ 39899 8e2b BB0D0000 .long 0xdbb
+ 39900 8e2f 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1049
+
+
+ 39901 8e30 91 .byte 0x91
+ 39902 8e31 AC69 .sleb128 -2900
+ 39903 8e33 00 .byte 0x0
+ 39904 8e34 00 .byte 0x0
+ 39905 8e35 31 .uleb128 0x31
+ 39906 8e36 C70D0000 .long 0xdc7
+ 39907 8e3a 00000000 .quad .LBB2142
+ 39907 00000000
+ 39908 8e42 00000000 .quad .LBE2142
+ 39908 00000000
+ 39909 8e4a 02 .byte 0x2
+ 39910 8e4b 6603 .value 0x366
+ 39911 8e4d 648E0000 .long 0x8e64
+ 39912 8e51 32 .uleb128 0x32
+ 39913 8e52 E20D0000 .long 0xde2
+ 39914 8e56 03 .byte 0x3
+ 39915 8e57 91 .byte 0x91
+ 39916 8e58 B069 .sleb128 -2896
+ 39917 8e5a 32 .uleb128 0x32
+ 39918 8e5b D80D0000 .long 0xdd8
+ 39919 8e5f 03 .byte 0x3
+ 39920 8e60 91 .byte 0x91
+ 39921 8e61 C069 .sleb128 -2880
+ 39922 8e63 00 .byte 0x0
+ 39923 8e64 31 .uleb128 0x31
+ 39924 8e65 6E0D0000 .long 0xd6e
+ 39925 8e69 00000000 .quad .LBB2144
+ 39925 00000000
+ 39926 8e71 00000000 .quad .LBE2144
+ 39926 00000000
+ 39927 8e79 02 .byte 0x2
+ 39928 8e7a 6803 .value 0x368
+ 39929 8e7c C98E0000 .long 0x8ec9
+ 39930 8e80 32 .uleb128 0x32
+ 39931 8e81 8C0D0000 .long 0xd8c
+ 39932 8e85 03 .byte 0x3
+ 39933 8e86 91 .byte 0x91
+ 39934 8e87 D069 .sleb128 -2864
+ 39935 8e89 32 .uleb128 0x32
+ 39936 8e8a 800D0000 .long 0xd80
+ 39937 8e8e 03 .byte 0x3
+ 39938 8e8f 91 .byte 0x91
+ 39939 8e90 E069 .sleb128 -2848
+ 39940 8e92 33 .uleb128 0x33
+ 39941 8e93 00000000 .quad .LBB2145
+ 39941 00000000
+ 39942 8e9b 00000000 .quad .LBE2145
+ 39942 00000000
+ 39943 8ea3 34 .uleb128 0x34
+ 39944 8ea4 980D0000 .long 0xd98
+ 39945 8ea8 03 .byte 0x3
+ 39946 8ea9 91 .byte 0x91
+ 39947 8eaa E049 .sleb128 -6944
+ 39948 8eac 34 .uleb128 0x34
+ 39949 8ead A40D0000 .long 0xda4
+ 39950 8eb1 03 .byte 0x3
+ 39951 8eb2 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1050
+
+
+ 39952 8eb3 D049 .sleb128 -6960
+ 39953 8eb5 34 .uleb128 0x34
+ 39954 8eb6 AF0D0000 .long 0xdaf
+ 39955 8eba 03 .byte 0x3
+ 39956 8ebb 91 .byte 0x91
+ 39957 8ebc C049 .sleb128 -6976
+ 39958 8ebe 34 .uleb128 0x34
+ 39959 8ebf BB0D0000 .long 0xdbb
+ 39960 8ec3 03 .byte 0x3
+ 39961 8ec4 91 .byte 0x91
+ 39962 8ec5 FC69 .sleb128 -2820
+ 39963 8ec7 00 .byte 0x0
+ 39964 8ec8 00 .byte 0x0
+ 39965 8ec9 31 .uleb128 0x31
+ 39966 8eca C70D0000 .long 0xdc7
+ 39967 8ece 00000000 .quad .LBB2146
+ 39967 00000000
+ 39968 8ed6 00000000 .quad .LBE2146
+ 39968 00000000
+ 39969 8ede 02 .byte 0x2
+ 39970 8edf 6A03 .value 0x36a
+ 39971 8ee1 F88E0000 .long 0x8ef8
+ 39972 8ee5 32 .uleb128 0x32
+ 39973 8ee6 E20D0000 .long 0xde2
+ 39974 8eea 03 .byte 0x3
+ 39975 8eeb 91 .byte 0x91
+ 39976 8eec 806A .sleb128 -2816
+ 39977 8eee 32 .uleb128 0x32
+ 39978 8eef D80D0000 .long 0xdd8
+ 39979 8ef3 03 .byte 0x3
+ 39980 8ef4 91 .byte 0x91
+ 39981 8ef5 906A .sleb128 -2800
+ 39982 8ef7 00 .byte 0x0
+ 39983 8ef8 31 .uleb128 0x31
+ 39984 8ef9 ED0D0000 .long 0xded
+ 39985 8efd 00000000 .quad .LBB2148
+ 39985 00000000
+ 39986 8f05 00000000 .quad .LBE2148
+ 39986 00000000
+ 39987 8f0d 02 .byte 0x2
+ 39988 8f0e 6C03 .value 0x36c
+ 39989 8f10 278F0000 .long 0x8f27
+ 39990 8f14 32 .uleb128 0x32
+ 39991 8f15 0A0E0000 .long 0xe0a
+ 39992 8f19 03 .byte 0x3
+ 39993 8f1a 91 .byte 0x91
+ 39994 8f1b A06A .sleb128 -2784
+ 39995 8f1d 32 .uleb128 0x32
+ 39996 8f1e FF0D0000 .long 0xdff
+ 39997 8f22 03 .byte 0x3
+ 39998 8f23 91 .byte 0x91
+ 39999 8f24 B06A .sleb128 -2768
+ 40000 8f26 00 .byte 0x0
+ 40001 8f27 35 .uleb128 0x35
+ 40002 8f28 1F0D0000 .long 0xd1f
+ 40003 8f2c 00000000 .quad .LBB2150
+ 40003 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1051
+
+
+ 40004 8f34 00000000 .quad .LBE2150
+ 40004 00000000
+ 40005 8f3c 02 .byte 0x2
+ 40006 8f3d 6E03 .value 0x36e
+ 40007 8f3f 32 .uleb128 0x32
+ 40008 8f40 3A0D0000 .long 0xd3a
+ 40009 8f44 03 .byte 0x3
+ 40010 8f45 91 .byte 0x91
+ 40011 8f46 C06A .sleb128 -2752
+ 40012 8f48 32 .uleb128 0x32
+ 40013 8f49 300D0000 .long 0xd30
+ 40014 8f4d 03 .byte 0x3
+ 40015 8f4e 91 .byte 0x91
+ 40016 8f4f D06A .sleb128 -2736
+ 40017 8f51 00 .byte 0x0
+ 40018 8f52 00 .byte 0x0
+ 40019 8f53 00 .byte 0x0
+ 40020 8f54 00 .byte 0x0
+ 40021 8f55 36 .uleb128 0x36
+ 40022 8f56 00000000 .quad .LBB2152
+ 40022 00000000
+ 40023 8f5e 00000000 .quad .LBE2152
+ 40023 00000000
+ 40024 8f66 748F0000 .long 0x8f74
+ 40025 8f6a 34 .uleb128 0x34
+ 40026 8f6b 180C0000 .long 0xc18
+ 40027 8f6f 03 .byte 0x3
+ 40028 8f70 91 .byte 0x91
+ 40029 8f71 F048 .sleb128 -7056
+ 40030 8f73 00 .byte 0x0
+ 40031 8f74 31 .uleb128 0x31
+ 40032 8f75 160E0000 .long 0xe16
+ 40033 8f79 00000000 .quad .LBB2153
+ 40033 00000000
+ 40034 8f81 00000000 .quad .LBE2153
+ 40034 00000000
+ 40035 8f89 02 .byte 0x2
+ 40036 8f8a 9406 .value 0x694
+ 40037 8f8c 1C900000 .long 0x901c
+ 40038 8f90 32 .uleb128 0x32
+ 40039 8f91 280E0000 .long 0xe28
+ 40040 8f95 03 .byte 0x3
+ 40041 8f96 91 .byte 0x91
+ 40042 8f97 E06A .sleb128 -2720
+ 40043 8f99 33 .uleb128 0x33
+ 40044 8f9a 00000000 .quad .LBB2154
+ 40044 00000000
+ 40045 8fa2 00000000 .quad .LBE2154
+ 40045 00000000
+ 40046 8faa 34 .uleb128 0x34
+ 40047 8fab 340E0000 .long 0xe34
+ 40048 8faf 09 .byte 0x9
+ 40049 8fb0 03 .byte 0x3
+ 40050 8fb1 00000000 .quad ShiftRowTable.6768
+ 40050 00000000
+ 40051 8fb9 35 .uleb128 0x35
+ 40052 8fba 6E0D0000 .long 0xd6e
+
GAS LISTING /tmp/ccMa7HLZ.s page 1052
+
+
+ 40053 8fbe 00000000 .quad .LBB2155
+ 40053 00000000
+ 40054 8fc6 00000000 .quad .LBE2155
+ 40054 00000000
+ 40055 8fce 02 .byte 0x2
+ 40056 8fcf 9B02 .value 0x29b
+ 40057 8fd1 32 .uleb128 0x32
+ 40058 8fd2 8C0D0000 .long 0xd8c
+ 40059 8fd6 03 .byte 0x3
+ 40060 8fd7 91 .byte 0x91
+ 40061 8fd8 F06A .sleb128 -2704
+ 40062 8fda 32 .uleb128 0x32
+ 40063 8fdb 800D0000 .long 0xd80
+ 40064 8fdf 03 .byte 0x3
+ 40065 8fe0 91 .byte 0x91
+ 40066 8fe1 806B .sleb128 -2688
+ 40067 8fe3 33 .uleb128 0x33
+ 40068 8fe4 00000000 .quad .LBB2156
+ 40068 00000000
+ 40069 8fec 00000000 .quad .LBE2156
+ 40069 00000000
+ 40070 8ff4 34 .uleb128 0x34
+ 40071 8ff5 980D0000 .long 0xd98
+ 40072 8ff9 03 .byte 0x3
+ 40073 8ffa 91 .byte 0x91
+ 40074 8ffb 904A .sleb128 -6896
+ 40075 8ffd 34 .uleb128 0x34
+ 40076 8ffe A40D0000 .long 0xda4
+ 40077 9002 03 .byte 0x3
+ 40078 9003 91 .byte 0x91
+ 40079 9004 804A .sleb128 -6912
+ 40080 9006 34 .uleb128 0x34
+ 40081 9007 AF0D0000 .long 0xdaf
+ 40082 900b 03 .byte 0x3
+ 40083 900c 91 .byte 0x91
+ 40084 900d F049 .sleb128 -6928
+ 40085 900f 34 .uleb128 0x34
+ 40086 9010 BB0D0000 .long 0xdbb
+ 40087 9014 03 .byte 0x3
+ 40088 9015 91 .byte 0x91
+ 40089 9016 9C6B .sleb128 -2660
+ 40090 9018 00 .byte 0x0
+ 40091 9019 00 .byte 0x0
+ 40092 901a 00 .byte 0x0
+ 40093 901b 00 .byte 0x0
+ 40094 901c 36 .uleb128 0x36
+ 40095 901d 00000000 .quad .LBB2157
+ 40095 00000000
+ 40096 9025 00000000 .quad .LBE2157
+ 40096 00000000
+ 40097 902d 3B900000 .long 0x903b
+ 40098 9031 34 .uleb128 0x34
+ 40099 9032 280C0000 .long 0xc28
+ 40100 9036 03 .byte 0x3
+ 40101 9037 91 .byte 0x91
+ 40102 9038 E048 .sleb128 -7072
+ 40103 903a 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1053
+
+
+ 40104 903b 31 .uleb128 0x31
+ 40105 903c 520E0000 .long 0xe52
+ 40106 9040 00000000 .quad .LBB2158
+ 40106 00000000
+ 40107 9048 00000000 .quad .LBE2158
+ 40107 00000000
+ 40108 9050 02 .byte 0x2
+ 40109 9051 9606 .value 0x696
+ 40110 9053 6A900000 .long 0x906a
+ 40111 9057 32 .uleb128 0x32
+ 40112 9058 6D0E0000 .long 0xe6d
+ 40113 905c 03 .byte 0x3
+ 40114 905d 91 .byte 0x91
+ 40115 905e A06B .sleb128 -2656
+ 40116 9060 32 .uleb128 0x32
+ 40117 9061 630E0000 .long 0xe63
+ 40118 9065 03 .byte 0x3
+ 40119 9066 91 .byte 0x91
+ 40120 9067 B06B .sleb128 -2640
+ 40121 9069 00 .byte 0x0
+ 40122 906a 36 .uleb128 0x36
+ 40123 906b 00000000 .quad .LBB2160
+ 40123 00000000
+ 40124 9073 00000000 .quad .LBE2160
+ 40124 00000000
+ 40125 907b 89900000 .long 0x9089
+ 40126 907f 34 .uleb128 0x34
+ 40127 9080 380C0000 .long 0xc38
+ 40128 9084 03 .byte 0x3
+ 40129 9085 91 .byte 0x91
+ 40130 9086 D048 .sleb128 -7088
+ 40131 9088 00 .byte 0x0
+ 40132 9089 31 .uleb128 0x31
+ 40133 908a 780E0000 .long 0xe78
+ 40134 908e 00000000 .quad .LBB2161
+ 40134 00000000
+ 40135 9096 00000000 .quad .LBE2161
+ 40135 00000000
+ 40136 909e 02 .byte 0x2
+ 40137 909f 9806 .value 0x698
+ 40138 90a1 CA900000 .long 0x90ca
+ 40139 90a5 32 .uleb128 0x32
+ 40140 90a6 8A0E0000 .long 0xe8a
+ 40141 90aa 03 .byte 0x3
+ 40142 90ab 91 .byte 0x91
+ 40143 90ac C06B .sleb128 -2624
+ 40144 90ae 33 .uleb128 0x33
+ 40145 90af 00000000 .quad .LBB2162
+ 40145 00000000
+ 40146 90b7 00000000 .quad .LBE2162
+ 40146 00000000
+ 40147 90bf 34 .uleb128 0x34
+ 40148 90c0 960E0000 .long 0xe96
+ 40149 90c4 03 .byte 0x3
+ 40150 90c5 91 .byte 0x91
+ 40151 90c6 A04A .sleb128 -6880
+ 40152 90c8 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1054
+
+
+ 40153 90c9 00 .byte 0x0
+ 40154 90ca 33 .uleb128 0x33
+ 40155 90cb 00000000 .quad .LBB2163
+ 40155 00000000
+ 40156 90d3 00000000 .quad .LBE2163
+ 40156 00000000
+ 40157 90db 34 .uleb128 0x34
+ 40158 90dc 440C0000 .long 0xc44
+ 40159 90e0 03 .byte 0x3
+ 40160 90e1 91 .byte 0x91
+ 40161 90e2 C048 .sleb128 -7104
+ 40162 90e4 00 .byte 0x0
+ 40163 90e5 00 .byte 0x0
+ 40164 90e6 00 .byte 0x0
+ 40165 90e7 31 .uleb128 0x31
+ 40166 90e8 A30E0000 .long 0xea3
+ 40167 90ec 00000000 .quad .LBB2164
+ 40167 00000000
+ 40168 90f4 00000000 .quad .LBE2164
+ 40168 00000000
+ 40169 90fc 02 .byte 0x2
+ 40170 90fd 8C07 .value 0x78c
+ 40171 90ff E8910000 .long 0x91e8
+ 40172 9103 32 .uleb128 0x32
+ 40173 9104 B50E0000 .long 0xeb5
+ 40174 9108 03 .byte 0x3
+ 40175 9109 91 .byte 0x91
+ 40176 910a D06B .sleb128 -2608
+ 40177 910c 33 .uleb128 0x33
+ 40178 910d 00000000 .quad .LBB2165
+ 40178 00000000
+ 40179 9115 00000000 .quad .LBE2165
+ 40179 00000000
+ 40180 911d 34 .uleb128 0x34
+ 40181 911e C10E0000 .long 0xec1
+ 40182 9122 04 .byte 0x4
+ 40183 9123 76 .byte 0x76
+ 40184 9124 D0BD7F .sleb128 -8496
+ 40185 9127 31 .uleb128 0x31
+ 40186 9128 CE0E0000 .long 0xece
+ 40187 912c 00000000 .quad .LBB2166
+ 40187 00000000
+ 40188 9134 00000000 .quad .LBE2166
+ 40188 00000000
+ 40189 913c 02 .byte 0x2
+ 40190 913d 1F06 .value 0x61f
+ 40191 913f 68910000 .long 0x9168
+ 40192 9143 32 .uleb128 0x32
+ 40193 9144 E00E0000 .long 0xee0
+ 40194 9148 03 .byte 0x3
+ 40195 9149 91 .byte 0x91
+ 40196 914a E06B .sleb128 -2592
+ 40197 914c 33 .uleb128 0x33
+ 40198 914d 00000000 .quad .LBB2167
+ 40198 00000000
+ 40199 9155 00000000 .quad .LBE2167
+ 40199 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1055
+
+
+ 40200 915d 34 .uleb128 0x34
+ 40201 915e EC0E0000 .long 0xeec
+ 40202 9162 03 .byte 0x3
+ 40203 9163 91 .byte 0x91
+ 40204 9164 B04A .sleb128 -6864
+ 40205 9166 00 .byte 0x0
+ 40206 9167 00 .byte 0x0
+ 40207 9168 31 .uleb128 0x31
+ 40208 9169 CE0E0000 .long 0xece
+ 40209 916d 00000000 .quad .LBB2168
+ 40209 00000000
+ 40210 9175 00000000 .quad .LBE2168
+ 40210 00000000
+ 40211 917d 02 .byte 0x2
+ 40212 917e 2006 .value 0x620
+ 40213 9180 A9910000 .long 0x91a9
+ 40214 9184 32 .uleb128 0x32
+ 40215 9185 E00E0000 .long 0xee0
+ 40216 9189 03 .byte 0x3
+ 40217 918a 91 .byte 0x91
+ 40218 918b F06B .sleb128 -2576
+ 40219 918d 33 .uleb128 0x33
+ 40220 918e 00000000 .quad .LBB2169
+ 40220 00000000
+ 40221 9196 00000000 .quad .LBE2169
+ 40221 00000000
+ 40222 919e 34 .uleb128 0x34
+ 40223 919f EC0E0000 .long 0xeec
+ 40224 91a3 03 .byte 0x3
+ 40225 91a4 91 .byte 0x91
+ 40226 91a5 C04A .sleb128 -6848
+ 40227 91a7 00 .byte 0x0
+ 40228 91a8 00 .byte 0x0
+ 40229 91a9 35 .uleb128 0x35
+ 40230 91aa CE0E0000 .long 0xece
+ 40231 91ae 00000000 .quad .LBB2170
+ 40231 00000000
+ 40232 91b6 00000000 .quad .LBE2170
+ 40232 00000000
+ 40233 91be 02 .byte 0x2
+ 40234 91bf 2106 .value 0x621
+ 40235 91c1 32 .uleb128 0x32
+ 40236 91c2 E00E0000 .long 0xee0
+ 40237 91c6 03 .byte 0x3
+ 40238 91c7 91 .byte 0x91
+ 40239 91c8 806C .sleb128 -2560
+ 40240 91ca 33 .uleb128 0x33
+ 40241 91cb 00000000 .quad .LBB2171
+ 40241 00000000
+ 40242 91d3 00000000 .quad .LBE2171
+ 40242 00000000
+ 40243 91db 34 .uleb128 0x34
+ 40244 91dc EC0E0000 .long 0xeec
+ 40245 91e0 03 .byte 0x3
+ 40246 91e1 91 .byte 0x91
+ 40247 91e2 D04A .sleb128 -6832
+ 40248 91e4 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1056
+
+
+ 40249 91e5 00 .byte 0x0
+ 40250 91e6 00 .byte 0x0
+ 40251 91e7 00 .byte 0x0
+ 40252 91e8 31 .uleb128 0x31
+ 40253 91e9 520E0000 .long 0xe52
+ 40254 91ed 00000000 .quad .LBB2172
+ 40254 00000000
+ 40255 91f5 00000000 .quad .LBE2172
+ 40255 00000000
+ 40256 91fd 02 .byte 0x2
+ 40257 91fe 8C07 .value 0x78c
+ 40258 9200 17920000 .long 0x9217
+ 40259 9204 32 .uleb128 0x32
+ 40260 9205 6D0E0000 .long 0xe6d
+ 40261 9209 03 .byte 0x3
+ 40262 920a 91 .byte 0x91
+ 40263 920b 906C .sleb128 -2544
+ 40264 920d 32 .uleb128 0x32
+ 40265 920e 630E0000 .long 0xe63
+ 40266 9212 03 .byte 0x3
+ 40267 9213 91 .byte 0x91
+ 40268 9214 A06C .sleb128 -2528
+ 40269 9216 00 .byte 0x0
+ 40270 9217 31 .uleb128 0x31
+ 40271 9218 4E740000 .long 0x744e
+ 40272 921c 00000000 .quad .LBB2174
+ 40272 00000000
+ 40273 9224 00000000 .quad .LBE2174
+ 40273 00000000
+ 40274 922c 02 .byte 0x2
+ 40275 922d 8D07 .value 0x78d
+ 40276 922f A7920000 .long 0x92a7
+ 40277 9233 32 .uleb128 0x32
+ 40278 9234 60740000 .long 0x7460
+ 40279 9238 03 .byte 0x3
+ 40280 9239 91 .byte 0x91
+ 40281 923a B06C .sleb128 -2512
+ 40282 923c 33 .uleb128 0x33
+ 40283 923d 00000000 .quad .LBB2175
+ 40283 00000000
+ 40284 9245 00000000 .quad .LBE2175
+ 40284 00000000
+ 40285 924d 34 .uleb128 0x34
+ 40286 924e 6C740000 .long 0x746c
+ 40287 9252 03 .byte 0x3
+ 40288 9253 91 .byte 0x91
+ 40289 9254 F04A .sleb128 -6800
+ 40290 9256 34 .uleb128 0x34
+ 40291 9257 76740000 .long 0x7476
+ 40292 925b 03 .byte 0x3
+ 40293 925c 91 .byte 0x91
+ 40294 925d C46C .sleb128 -2492
+ 40295 925f 35 .uleb128 0x35
+ 40296 9260 12490000 .long 0x4912
+ 40297 9264 00000000 .quad .LBB2176
+ 40297 00000000
+ 40298 926c 00000000 .quad .LBE2176
+
GAS LISTING /tmp/ccMa7HLZ.s page 1057
+
+
+ 40298 00000000
+ 40299 9274 02 .byte 0x2
+ 40300 9275 7906 .value 0x679
+ 40301 9277 32 .uleb128 0x32
+ 40302 9278 24490000 .long 0x4924
+ 40303 927c 03 .byte 0x3
+ 40304 927d 91 .byte 0x91
+ 40305 927e C86C .sleb128 -2488
+ 40306 9280 33 .uleb128 0x33
+ 40307 9281 00000000 .quad .LBB2177
+ 40307 00000000
+ 40308 9289 00000000 .quad .LBE2177
+ 40308 00000000
+ 40309 9291 34 .uleb128 0x34
+ 40310 9292 2E490000 .long 0x492e
+ 40311 9296 03 .byte 0x3
+ 40312 9297 91 .byte 0x91
+ 40313 9298 E04A .sleb128 -6816
+ 40314 929a 34 .uleb128 0x34
+ 40315 929b 3A490000 .long 0x493a
+ 40316 929f 03 .byte 0x3
+ 40317 92a0 91 .byte 0x91
+ 40318 92a1 CC6C .sleb128 -2484
+ 40319 92a3 00 .byte 0x0
+ 40320 92a4 00 .byte 0x0
+ 40321 92a5 00 .byte 0x0
+ 40322 92a6 00 .byte 0x0
+ 40323 92a7 31 .uleb128 0x31
+ 40324 92a8 A30E0000 .long 0xea3
+ 40325 92ac 00000000 .quad .LBB2178
+ 40325 00000000
+ 40326 92b4 00000000 .quad .LBE2178
+ 40326 00000000
+ 40327 92bc 02 .byte 0x2
+ 40328 92bd 8D07 .value 0x78d
+ 40329 92bf A8930000 .long 0x93a8
+ 40330 92c3 32 .uleb128 0x32
+ 40331 92c4 B50E0000 .long 0xeb5
+ 40332 92c8 03 .byte 0x3
+ 40333 92c9 91 .byte 0x91
+ 40334 92ca D06C .sleb128 -2480
+ 40335 92cc 33 .uleb128 0x33
+ 40336 92cd 00000000 .quad .LBB2179
+ 40336 00000000
+ 40337 92d5 00000000 .quad .LBE2179
+ 40337 00000000
+ 40338 92dd 34 .uleb128 0x34
+ 40339 92de C10E0000 .long 0xec1
+ 40340 92e2 04 .byte 0x4
+ 40341 92e3 76 .byte 0x76
+ 40342 92e4 E0BD7F .sleb128 -8480
+ 40343 92e7 31 .uleb128 0x31
+ 40344 92e8 CE0E0000 .long 0xece
+ 40345 92ec 00000000 .quad .LBB2180
+ 40345 00000000
+ 40346 92f4 00000000 .quad .LBE2180
+ 40346 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1058
+
+
+ 40347 92fc 02 .byte 0x2
+ 40348 92fd 1F06 .value 0x61f
+ 40349 92ff 28930000 .long 0x9328
+ 40350 9303 32 .uleb128 0x32
+ 40351 9304 E00E0000 .long 0xee0
+ 40352 9308 03 .byte 0x3
+ 40353 9309 91 .byte 0x91
+ 40354 930a E06C .sleb128 -2464
+ 40355 930c 33 .uleb128 0x33
+ 40356 930d 00000000 .quad .LBB2181
+ 40356 00000000
+ 40357 9315 00000000 .quad .LBE2181
+ 40357 00000000
+ 40358 931d 34 .uleb128 0x34
+ 40359 931e EC0E0000 .long 0xeec
+ 40360 9322 03 .byte 0x3
+ 40361 9323 91 .byte 0x91
+ 40362 9324 804B .sleb128 -6784
+ 40363 9326 00 .byte 0x0
+ 40364 9327 00 .byte 0x0
+ 40365 9328 31 .uleb128 0x31
+ 40366 9329 CE0E0000 .long 0xece
+ 40367 932d 00000000 .quad .LBB2182
+ 40367 00000000
+ 40368 9335 00000000 .quad .LBE2182
+ 40368 00000000
+ 40369 933d 02 .byte 0x2
+ 40370 933e 2006 .value 0x620
+ 40371 9340 69930000 .long 0x9369
+ 40372 9344 32 .uleb128 0x32
+ 40373 9345 E00E0000 .long 0xee0
+ 40374 9349 03 .byte 0x3
+ 40375 934a 91 .byte 0x91
+ 40376 934b F06C .sleb128 -2448
+ 40377 934d 33 .uleb128 0x33
+ 40378 934e 00000000 .quad .LBB2183
+ 40378 00000000
+ 40379 9356 00000000 .quad .LBE2183
+ 40379 00000000
+ 40380 935e 34 .uleb128 0x34
+ 40381 935f EC0E0000 .long 0xeec
+ 40382 9363 03 .byte 0x3
+ 40383 9364 91 .byte 0x91
+ 40384 9365 904B .sleb128 -6768
+ 40385 9367 00 .byte 0x0
+ 40386 9368 00 .byte 0x0
+ 40387 9369 35 .uleb128 0x35
+ 40388 936a CE0E0000 .long 0xece
+ 40389 936e 00000000 .quad .LBB2184
+ 40389 00000000
+ 40390 9376 00000000 .quad .LBE2184
+ 40390 00000000
+ 40391 937e 02 .byte 0x2
+ 40392 937f 2106 .value 0x621
+ 40393 9381 32 .uleb128 0x32
+ 40394 9382 E00E0000 .long 0xee0
+ 40395 9386 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1059
+
+
+ 40396 9387 91 .byte 0x91
+ 40397 9388 806D .sleb128 -2432
+ 40398 938a 33 .uleb128 0x33
+ 40399 938b 00000000 .quad .LBB2185
+ 40399 00000000
+ 40400 9393 00000000 .quad .LBE2185
+ 40400 00000000
+ 40401 939b 34 .uleb128 0x34
+ 40402 939c EC0E0000 .long 0xeec
+ 40403 93a0 03 .byte 0x3
+ 40404 93a1 91 .byte 0x91
+ 40405 93a2 A04B .sleb128 -6752
+ 40406 93a4 00 .byte 0x0
+ 40407 93a5 00 .byte 0x0
+ 40408 93a6 00 .byte 0x0
+ 40409 93a7 00 .byte 0x0
+ 40410 93a8 31 .uleb128 0x31
+ 40411 93a9 520E0000 .long 0xe52
+ 40412 93ad 00000000 .quad .LBB2186
+ 40412 00000000
+ 40413 93b5 00000000 .quad .LBE2186
+ 40413 00000000
+ 40414 93bd 02 .byte 0x2
+ 40415 93be 8D07 .value 0x78d
+ 40416 93c0 D7930000 .long 0x93d7
+ 40417 93c4 32 .uleb128 0x32
+ 40418 93c5 6D0E0000 .long 0xe6d
+ 40419 93c9 03 .byte 0x3
+ 40420 93ca 91 .byte 0x91
+ 40421 93cb 906D .sleb128 -2416
+ 40422 93cd 32 .uleb128 0x32
+ 40423 93ce 630E0000 .long 0xe63
+ 40424 93d2 03 .byte 0x3
+ 40425 93d3 91 .byte 0x91
+ 40426 93d4 A06D .sleb128 -2400
+ 40427 93d6 00 .byte 0x0
+ 40428 93d7 31 .uleb128 0x31
+ 40429 93d8 D10B0000 .long 0xbd1
+ 40430 93dc 00000000 .quad .LBB2188
+ 40430 00000000
+ 40431 93e4 00000000 .quad .LBE2188
+ 40431 00000000
+ 40432 93ec 02 .byte 0x2
+ 40433 93ed 8E07 .value 0x78e
+ 40434 93ef 7F980000 .long 0x987f
+ 40435 93f3 32 .uleb128 0x32
+ 40436 93f4 EF0B0000 .long 0xbef
+ 40437 93f8 03 .byte 0x3
+ 40438 93f9 91 .byte 0x91
+ 40439 93fa BC6D .sleb128 -2372
+ 40440 93fc 32 .uleb128 0x32
+ 40441 93fd E30B0000 .long 0xbe3
+ 40442 9401 03 .byte 0x3
+ 40443 9402 91 .byte 0x91
+ 40444 9403 C06D .sleb128 -2368
+ 40445 9405 33 .uleb128 0x33
+ 40446 9406 00000000 .quad .LBB2189
+
GAS LISTING /tmp/ccMa7HLZ.s page 1060
+
+
+ 40446 00000000
+ 40447 940e 00000000 .quad .LBE2189
+ 40447 00000000
+ 40448 9416 34 .uleb128 0x34
+ 40449 9417 FB0B0000 .long 0xbfb
+ 40450 941b 04 .byte 0x4
+ 40451 941c 76 .byte 0x76
+ 40452 941d 80BE7F .sleb128 -8448
+ 40453 9420 34 .uleb128 0x34
+ 40454 9421 070C0000 .long 0xc07
+ 40455 9425 04 .byte 0x4
+ 40456 9426 76 .byte 0x76
+ 40457 9427 F0BD7F .sleb128 -8464
+ 40458 942a 31 .uleb128 0x31
+ 40459 942b 500C0000 .long 0xc50
+ 40460 942f 00000000 .quad .LBB2190
+ 40460 00000000
+ 40461 9437 00000000 .quad .LBE2190
+ 40461 00000000
+ 40462 943f 02 .byte 0x2
+ 40463 9440 9106 .value 0x691
+ 40464 9442 7D940000 .long 0x947d
+ 40465 9446 32 .uleb128 0x32
+ 40466 9447 7A0C0000 .long 0xc7a
+ 40467 944b 03 .byte 0x3
+ 40468 944c 91 .byte 0x91
+ 40469 944d D86D .sleb128 -2344
+ 40470 944f 32 .uleb128 0x32
+ 40471 9450 6E0C0000 .long 0xc6e
+ 40472 9454 03 .byte 0x3
+ 40473 9455 91 .byte 0x91
+ 40474 9456 DC6D .sleb128 -2340
+ 40475 9458 32 .uleb128 0x32
+ 40476 9459 620C0000 .long 0xc62
+ 40477 945d 03 .byte 0x3
+ 40478 945e 91 .byte 0x91
+ 40479 945f E06D .sleb128 -2336
+ 40480 9461 33 .uleb128 0x33
+ 40481 9462 00000000 .quad .LBB2191
+ 40481 00000000
+ 40482 946a 00000000 .quad .LBE2191
+ 40482 00000000
+ 40483 9472 34 .uleb128 0x34
+ 40484 9473 860C0000 .long 0xc86
+ 40485 9477 03 .byte 0x3
+ 40486 9478 91 .byte 0x91
+ 40487 9479 F04B .sleb128 -6672
+ 40488 947b 00 .byte 0x0
+ 40489 947c 00 .byte 0x0
+ 40490 947d 31 .uleb128 0x31
+ 40491 947e 910C0000 .long 0xc91
+ 40492 9482 00000000 .quad .LBB2192
+ 40492 00000000
+ 40493 948a 00000000 .quad .LBE2192
+ 40493 00000000
+ 40494 9492 02 .byte 0x2
+ 40495 9493 9206 .value 0x692
+
GAS LISTING /tmp/ccMa7HLZ.s page 1061
+
+
+ 40496 9495 ED960000 .long 0x96ed
+ 40497 9499 32 .uleb128 0x32
+ 40498 949a A30C0000 .long 0xca3
+ 40499 949e 03 .byte 0x3
+ 40500 949f 91 .byte 0x91
+ 40501 94a0 F06D .sleb128 -2320
+ 40502 94a2 35 .uleb128 0x35
+ 40503 94a3 B00C0000 .long 0xcb0
+ 40504 94a7 00000000 .quad .LBB2194
+ 40504 00000000
+ 40505 94af 00000000 .quad .LBE2194
+ 40505 00000000
+ 40506 94b7 02 .byte 0x2
+ 40507 94b8 7D03 .value 0x37d
+ 40508 94ba 32 .uleb128 0x32
+ 40509 94bb CE0C0000 .long 0xcce
+ 40510 94bf 03 .byte 0x3
+ 40511 94c0 91 .byte 0x91
+ 40512 94c1 886E .sleb128 -2296
+ 40513 94c3 32 .uleb128 0x32
+ 40514 94c4 C20C0000 .long 0xcc2
+ 40515 94c8 03 .byte 0x3
+ 40516 94c9 91 .byte 0x91
+ 40517 94ca 906E .sleb128 -2288
+ 40518 94cc 33 .uleb128 0x33
+ 40519 94cd 00000000 .quad .LBB2195
+ 40519 00000000
+ 40520 94d5 00000000 .quad .LBE2195
+ 40520 00000000
+ 40521 94dd 34 .uleb128 0x34
+ 40522 94de DA0C0000 .long 0xcda
+ 40523 94e2 03 .byte 0x3
+ 40524 94e3 91 .byte 0x91
+ 40525 94e4 E06E .sleb128 -2208
+ 40526 94e6 34 .uleb128 0x34
+ 40527 94e7 E50C0000 .long 0xce5
+ 40528 94eb 03 .byte 0x3
+ 40529 94ec 91 .byte 0x91
+ 40530 94ed D06E .sleb128 -2224
+ 40531 94ef 34 .uleb128 0x34
+ 40532 94f0 F00C0000 .long 0xcf0
+ 40533 94f4 03 .byte 0x3
+ 40534 94f5 91 .byte 0x91
+ 40535 94f6 C06E .sleb128 -2240
+ 40536 94f8 34 .uleb128 0x34
+ 40537 94f9 FC0C0000 .long 0xcfc
+ 40538 94fd 03 .byte 0x3
+ 40539 94fe 91 .byte 0x91
+ 40540 94ff B06E .sleb128 -2256
+ 40541 9501 34 .uleb128 0x34
+ 40542 9502 080D0000 .long 0xd08
+ 40543 9506 03 .byte 0x3
+ 40544 9507 91 .byte 0x91
+ 40545 9508 AC6E .sleb128 -2260
+ 40546 950a 31 .uleb128 0x31
+ 40547 950b 1F0D0000 .long 0xd1f
+ 40548 950f 00000000 .quad .LBB2196
+
GAS LISTING /tmp/ccMa7HLZ.s page 1062
+
+
+ 40548 00000000
+ 40549 9517 00000000 .quad .LBE2196
+ 40549 00000000
+ 40550 951f 02 .byte 0x2
+ 40551 9520 5603 .value 0x356
+ 40552 9522 39950000 .long 0x9539
+ 40553 9526 32 .uleb128 0x32
+ 40554 9527 3A0D0000 .long 0xd3a
+ 40555 952b 03 .byte 0x3
+ 40556 952c 91 .byte 0x91
+ 40557 952d F06E .sleb128 -2192
+ 40558 952f 32 .uleb128 0x32
+ 40559 9530 300D0000 .long 0xd30
+ 40560 9534 03 .byte 0x3
+ 40561 9535 91 .byte 0x91
+ 40562 9536 806F .sleb128 -2176
+ 40563 9538 00 .byte 0x0
+ 40564 9539 31 .uleb128 0x31
+ 40565 953a 450D0000 .long 0xd45
+ 40566 953e 00000000 .quad .LBB2198
+ 40566 00000000
+ 40567 9546 00000000 .quad .LBE2198
+ 40567 00000000
+ 40568 954e 02 .byte 0x2
+ 40569 954f 5E03 .value 0x35e
+ 40570 9551 68950000 .long 0x9568
+ 40571 9555 32 .uleb128 0x32
+ 40572 9556 620D0000 .long 0xd62
+ 40573 955a 03 .byte 0x3
+ 40574 955b 91 .byte 0x91
+ 40575 955c 906F .sleb128 -2160
+ 40576 955e 32 .uleb128 0x32
+ 40577 955f 570D0000 .long 0xd57
+ 40578 9563 03 .byte 0x3
+ 40579 9564 91 .byte 0x91
+ 40580 9565 A06F .sleb128 -2144
+ 40581 9567 00 .byte 0x0
+ 40582 9568 31 .uleb128 0x31
+ 40583 9569 6E0D0000 .long 0xd6e
+ 40584 956d 00000000 .quad .LBB2200
+ 40584 00000000
+ 40585 9575 00000000 .quad .LBE2200
+ 40585 00000000
+ 40586 957d 02 .byte 0x2
+ 40587 957e 6403 .value 0x364
+ 40588 9580 CD950000 .long 0x95cd
+ 40589 9584 32 .uleb128 0x32
+ 40590 9585 8C0D0000 .long 0xd8c
+ 40591 9589 03 .byte 0x3
+ 40592 958a 91 .byte 0x91
+ 40593 958b B06F .sleb128 -2128
+ 40594 958d 32 .uleb128 0x32
+ 40595 958e 800D0000 .long 0xd80
+ 40596 9592 03 .byte 0x3
+ 40597 9593 91 .byte 0x91
+ 40598 9594 C06F .sleb128 -2112
+ 40599 9596 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 1063
+
+
+ 40600 9597 00000000 .quad .LBB2201
+ 40600 00000000
+ 40601 959f 00000000 .quad .LBE2201
+ 40601 00000000
+ 40602 95a7 34 .uleb128 0x34
+ 40603 95a8 980D0000 .long 0xd98
+ 40604 95ac 03 .byte 0x3
+ 40605 95ad 91 .byte 0x91
+ 40606 95ae A04C .sleb128 -6624
+ 40607 95b0 34 .uleb128 0x34
+ 40608 95b1 A40D0000 .long 0xda4
+ 40609 95b5 03 .byte 0x3
+ 40610 95b6 91 .byte 0x91
+ 40611 95b7 904C .sleb128 -6640
+ 40612 95b9 34 .uleb128 0x34
+ 40613 95ba AF0D0000 .long 0xdaf
+ 40614 95be 03 .byte 0x3
+ 40615 95bf 91 .byte 0x91
+ 40616 95c0 804C .sleb128 -6656
+ 40617 95c2 34 .uleb128 0x34
+ 40618 95c3 BB0D0000 .long 0xdbb
+ 40619 95c7 03 .byte 0x3
+ 40620 95c8 91 .byte 0x91
+ 40621 95c9 DC6F .sleb128 -2084
+ 40622 95cb 00 .byte 0x0
+ 40623 95cc 00 .byte 0x0
+ 40624 95cd 31 .uleb128 0x31
+ 40625 95ce C70D0000 .long 0xdc7
+ 40626 95d2 00000000 .quad .LBB2202
+ 40626 00000000
+ 40627 95da 00000000 .quad .LBE2202
+ 40627 00000000
+ 40628 95e2 02 .byte 0x2
+ 40629 95e3 6603 .value 0x366
+ 40630 95e5 FC950000 .long 0x95fc
+ 40631 95e9 32 .uleb128 0x32
+ 40632 95ea E20D0000 .long 0xde2
+ 40633 95ee 03 .byte 0x3
+ 40634 95ef 91 .byte 0x91
+ 40635 95f0 E06F .sleb128 -2080
+ 40636 95f2 32 .uleb128 0x32
+ 40637 95f3 D80D0000 .long 0xdd8
+ 40638 95f7 03 .byte 0x3
+ 40639 95f8 91 .byte 0x91
+ 40640 95f9 F06F .sleb128 -2064
+ 40641 95fb 00 .byte 0x0
+ 40642 95fc 31 .uleb128 0x31
+ 40643 95fd 6E0D0000 .long 0xd6e
+ 40644 9601 00000000 .quad .LBB2204
+ 40644 00000000
+ 40645 9609 00000000 .quad .LBE2204
+ 40645 00000000
+ 40646 9611 02 .byte 0x2
+ 40647 9612 6803 .value 0x368
+ 40648 9614 61960000 .long 0x9661
+ 40649 9618 32 .uleb128 0x32
+ 40650 9619 8C0D0000 .long 0xd8c
+
GAS LISTING /tmp/ccMa7HLZ.s page 1064
+
+
+ 40651 961d 03 .byte 0x3
+ 40652 961e 91 .byte 0x91
+ 40653 961f 8070 .sleb128 -2048
+ 40654 9621 32 .uleb128 0x32
+ 40655 9622 800D0000 .long 0xd80
+ 40656 9626 03 .byte 0x3
+ 40657 9627 91 .byte 0x91
+ 40658 9628 9070 .sleb128 -2032
+ 40659 962a 33 .uleb128 0x33
+ 40660 962b 00000000 .quad .LBB2205
+ 40660 00000000
+ 40661 9633 00000000 .quad .LBE2205
+ 40661 00000000
+ 40662 963b 34 .uleb128 0x34
+ 40663 963c 980D0000 .long 0xd98
+ 40664 9640 03 .byte 0x3
+ 40665 9641 91 .byte 0x91
+ 40666 9642 D04C .sleb128 -6576
+ 40667 9644 34 .uleb128 0x34
+ 40668 9645 A40D0000 .long 0xda4
+ 40669 9649 03 .byte 0x3
+ 40670 964a 91 .byte 0x91
+ 40671 964b C04C .sleb128 -6592
+ 40672 964d 34 .uleb128 0x34
+ 40673 964e AF0D0000 .long 0xdaf
+ 40674 9652 03 .byte 0x3
+ 40675 9653 91 .byte 0x91
+ 40676 9654 B04C .sleb128 -6608
+ 40677 9656 34 .uleb128 0x34
+ 40678 9657 BB0D0000 .long 0xdbb
+ 40679 965b 03 .byte 0x3
+ 40680 965c 91 .byte 0x91
+ 40681 965d AC70 .sleb128 -2004
+ 40682 965f 00 .byte 0x0
+ 40683 9660 00 .byte 0x0
+ 40684 9661 31 .uleb128 0x31
+ 40685 9662 C70D0000 .long 0xdc7
+ 40686 9666 00000000 .quad .LBB2206
+ 40686 00000000
+ 40687 966e 00000000 .quad .LBE2206
+ 40687 00000000
+ 40688 9676 02 .byte 0x2
+ 40689 9677 6A03 .value 0x36a
+ 40690 9679 90960000 .long 0x9690
+ 40691 967d 32 .uleb128 0x32
+ 40692 967e E20D0000 .long 0xde2
+ 40693 9682 03 .byte 0x3
+ 40694 9683 91 .byte 0x91
+ 40695 9684 B070 .sleb128 -2000
+ 40696 9686 32 .uleb128 0x32
+ 40697 9687 D80D0000 .long 0xdd8
+ 40698 968b 03 .byte 0x3
+ 40699 968c 91 .byte 0x91
+ 40700 968d C070 .sleb128 -1984
+ 40701 968f 00 .byte 0x0
+ 40702 9690 31 .uleb128 0x31
+ 40703 9691 ED0D0000 .long 0xded
+
GAS LISTING /tmp/ccMa7HLZ.s page 1065
+
+
+ 40704 9695 00000000 .quad .LBB2208
+ 40704 00000000
+ 40705 969d 00000000 .quad .LBE2208
+ 40705 00000000
+ 40706 96a5 02 .byte 0x2
+ 40707 96a6 6C03 .value 0x36c
+ 40708 96a8 BF960000 .long 0x96bf
+ 40709 96ac 32 .uleb128 0x32
+ 40710 96ad 0A0E0000 .long 0xe0a
+ 40711 96b1 03 .byte 0x3
+ 40712 96b2 91 .byte 0x91
+ 40713 96b3 D070 .sleb128 -1968
+ 40714 96b5 32 .uleb128 0x32
+ 40715 96b6 FF0D0000 .long 0xdff
+ 40716 96ba 03 .byte 0x3
+ 40717 96bb 91 .byte 0x91
+ 40718 96bc E070 .sleb128 -1952
+ 40719 96be 00 .byte 0x0
+ 40720 96bf 35 .uleb128 0x35
+ 40721 96c0 1F0D0000 .long 0xd1f
+ 40722 96c4 00000000 .quad .LBB2210
+ 40722 00000000
+ 40723 96cc 00000000 .quad .LBE2210
+ 40723 00000000
+ 40724 96d4 02 .byte 0x2
+ 40725 96d5 6E03 .value 0x36e
+ 40726 96d7 32 .uleb128 0x32
+ 40727 96d8 3A0D0000 .long 0xd3a
+ 40728 96dc 03 .byte 0x3
+ 40729 96dd 91 .byte 0x91
+ 40730 96de F070 .sleb128 -1936
+ 40731 96e0 32 .uleb128 0x32
+ 40732 96e1 300D0000 .long 0xd30
+ 40733 96e5 03 .byte 0x3
+ 40734 96e6 91 .byte 0x91
+ 40735 96e7 8071 .sleb128 -1920
+ 40736 96e9 00 .byte 0x0
+ 40737 96ea 00 .byte 0x0
+ 40738 96eb 00 .byte 0x0
+ 40739 96ec 00 .byte 0x0
+ 40740 96ed 36 .uleb128 0x36
+ 40741 96ee 00000000 .quad .LBB2212
+ 40741 00000000
+ 40742 96f6 00000000 .quad .LBE2212
+ 40742 00000000
+ 40743 96fe 0C970000 .long 0x970c
+ 40744 9702 34 .uleb128 0x34
+ 40745 9703 180C0000 .long 0xc18
+ 40746 9707 03 .byte 0x3
+ 40747 9708 91 .byte 0x91
+ 40748 9709 E04B .sleb128 -6688
+ 40749 970b 00 .byte 0x0
+ 40750 970c 31 .uleb128 0x31
+ 40751 970d 160E0000 .long 0xe16
+ 40752 9711 00000000 .quad .LBB2213
+ 40752 00000000
+ 40753 9719 00000000 .quad .LBE2213
+
GAS LISTING /tmp/ccMa7HLZ.s page 1066
+
+
+ 40753 00000000
+ 40754 9721 02 .byte 0x2
+ 40755 9722 9406 .value 0x694
+ 40756 9724 B4970000 .long 0x97b4
+ 40757 9728 32 .uleb128 0x32
+ 40758 9729 280E0000 .long 0xe28
+ 40759 972d 03 .byte 0x3
+ 40760 972e 91 .byte 0x91
+ 40761 972f 9071 .sleb128 -1904
+ 40762 9731 33 .uleb128 0x33
+ 40763 9732 00000000 .quad .LBB2214
+ 40763 00000000
+ 40764 973a 00000000 .quad .LBE2214
+ 40764 00000000
+ 40765 9742 34 .uleb128 0x34
+ 40766 9743 340E0000 .long 0xe34
+ 40767 9747 09 .byte 0x9
+ 40768 9748 03 .byte 0x3
+ 40769 9749 00000000 .quad ShiftRowTable.6768
+ 40769 00000000
+ 40770 9751 35 .uleb128 0x35
+ 40771 9752 6E0D0000 .long 0xd6e
+ 40772 9756 00000000 .quad .LBB2215
+ 40772 00000000
+ 40773 975e 00000000 .quad .LBE2215
+ 40773 00000000
+ 40774 9766 02 .byte 0x2
+ 40775 9767 9B02 .value 0x29b
+ 40776 9769 32 .uleb128 0x32
+ 40777 976a 8C0D0000 .long 0xd8c
+ 40778 976e 03 .byte 0x3
+ 40779 976f 91 .byte 0x91
+ 40780 9770 A071 .sleb128 -1888
+ 40781 9772 32 .uleb128 0x32
+ 40782 9773 800D0000 .long 0xd80
+ 40783 9777 03 .byte 0x3
+ 40784 9778 91 .byte 0x91
+ 40785 9779 B071 .sleb128 -1872
+ 40786 977b 33 .uleb128 0x33
+ 40787 977c 00000000 .quad .LBB2216
+ 40787 00000000
+ 40788 9784 00000000 .quad .LBE2216
+ 40788 00000000
+ 40789 978c 34 .uleb128 0x34
+ 40790 978d 980D0000 .long 0xd98
+ 40791 9791 03 .byte 0x3
+ 40792 9792 91 .byte 0x91
+ 40793 9793 804D .sleb128 -6528
+ 40794 9795 34 .uleb128 0x34
+ 40795 9796 A40D0000 .long 0xda4
+ 40796 979a 03 .byte 0x3
+ 40797 979b 91 .byte 0x91
+ 40798 979c F04C .sleb128 -6544
+ 40799 979e 34 .uleb128 0x34
+ 40800 979f AF0D0000 .long 0xdaf
+ 40801 97a3 03 .byte 0x3
+ 40802 97a4 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1067
+
+
+ 40803 97a5 E04C .sleb128 -6560
+ 40804 97a7 34 .uleb128 0x34
+ 40805 97a8 BB0D0000 .long 0xdbb
+ 40806 97ac 03 .byte 0x3
+ 40807 97ad 91 .byte 0x91
+ 40808 97ae CC71 .sleb128 -1844
+ 40809 97b0 00 .byte 0x0
+ 40810 97b1 00 .byte 0x0
+ 40811 97b2 00 .byte 0x0
+ 40812 97b3 00 .byte 0x0
+ 40813 97b4 36 .uleb128 0x36
+ 40814 97b5 00000000 .quad .LBB2217
+ 40814 00000000
+ 40815 97bd 00000000 .quad .LBE2217
+ 40815 00000000
+ 40816 97c5 D3970000 .long 0x97d3
+ 40817 97c9 34 .uleb128 0x34
+ 40818 97ca 280C0000 .long 0xc28
+ 40819 97ce 03 .byte 0x3
+ 40820 97cf 91 .byte 0x91
+ 40821 97d0 D04B .sleb128 -6704
+ 40822 97d2 00 .byte 0x0
+ 40823 97d3 31 .uleb128 0x31
+ 40824 97d4 520E0000 .long 0xe52
+ 40825 97d8 00000000 .quad .LBB2218
+ 40825 00000000
+ 40826 97e0 00000000 .quad .LBE2218
+ 40826 00000000
+ 40827 97e8 02 .byte 0x2
+ 40828 97e9 9606 .value 0x696
+ 40829 97eb 02980000 .long 0x9802
+ 40830 97ef 32 .uleb128 0x32
+ 40831 97f0 6D0E0000 .long 0xe6d
+ 40832 97f4 03 .byte 0x3
+ 40833 97f5 91 .byte 0x91
+ 40834 97f6 D071 .sleb128 -1840
+ 40835 97f8 32 .uleb128 0x32
+ 40836 97f9 630E0000 .long 0xe63
+ 40837 97fd 03 .byte 0x3
+ 40838 97fe 91 .byte 0x91
+ 40839 97ff E071 .sleb128 -1824
+ 40840 9801 00 .byte 0x0
+ 40841 9802 36 .uleb128 0x36
+ 40842 9803 00000000 .quad .LBB2220
+ 40842 00000000
+ 40843 980b 00000000 .quad .LBE2220
+ 40843 00000000
+ 40844 9813 21980000 .long 0x9821
+ 40845 9817 34 .uleb128 0x34
+ 40846 9818 380C0000 .long 0xc38
+ 40847 981c 03 .byte 0x3
+ 40848 981d 91 .byte 0x91
+ 40849 981e C04B .sleb128 -6720
+ 40850 9820 00 .byte 0x0
+ 40851 9821 31 .uleb128 0x31
+ 40852 9822 780E0000 .long 0xe78
+ 40853 9826 00000000 .quad .LBB2221
+
GAS LISTING /tmp/ccMa7HLZ.s page 1068
+
+
+ 40853 00000000
+ 40854 982e 00000000 .quad .LBE2221
+ 40854 00000000
+ 40855 9836 02 .byte 0x2
+ 40856 9837 9806 .value 0x698
+ 40857 9839 62980000 .long 0x9862
+ 40858 983d 32 .uleb128 0x32
+ 40859 983e 8A0E0000 .long 0xe8a
+ 40860 9842 03 .byte 0x3
+ 40861 9843 91 .byte 0x91
+ 40862 9844 F071 .sleb128 -1808
+ 40863 9846 33 .uleb128 0x33
+ 40864 9847 00000000 .quad .LBB2222
+ 40864 00000000
+ 40865 984f 00000000 .quad .LBE2222
+ 40865 00000000
+ 40866 9857 34 .uleb128 0x34
+ 40867 9858 960E0000 .long 0xe96
+ 40868 985c 03 .byte 0x3
+ 40869 985d 91 .byte 0x91
+ 40870 985e 904D .sleb128 -6512
+ 40871 9860 00 .byte 0x0
+ 40872 9861 00 .byte 0x0
+ 40873 9862 33 .uleb128 0x33
+ 40874 9863 00000000 .quad .LBB2223
+ 40874 00000000
+ 40875 986b 00000000 .quad .LBE2223
+ 40875 00000000
+ 40876 9873 34 .uleb128 0x34
+ 40877 9874 440C0000 .long 0xc44
+ 40878 9878 03 .byte 0x3
+ 40879 9879 91 .byte 0x91
+ 40880 987a B04B .sleb128 -6736
+ 40881 987c 00 .byte 0x0
+ 40882 987d 00 .byte 0x0
+ 40883 987e 00 .byte 0x0
+ 40884 987f 31 .uleb128 0x31
+ 40885 9880 A30E0000 .long 0xea3
+ 40886 9884 00000000 .quad .LBB2224
+ 40886 00000000
+ 40887 988c 00000000 .quad .LBE2224
+ 40887 00000000
+ 40888 9894 02 .byte 0x2
+ 40889 9895 8E07 .value 0x78e
+ 40890 9897 80990000 .long 0x9980
+ 40891 989b 32 .uleb128 0x32
+ 40892 989c B50E0000 .long 0xeb5
+ 40893 98a0 03 .byte 0x3
+ 40894 98a1 91 .byte 0x91
+ 40895 98a2 8072 .sleb128 -1792
+ 40896 98a4 33 .uleb128 0x33
+ 40897 98a5 00000000 .quad .LBB2225
+ 40897 00000000
+ 40898 98ad 00000000 .quad .LBE2225
+ 40898 00000000
+ 40899 98b5 34 .uleb128 0x34
+ 40900 98b6 C10E0000 .long 0xec1
+
GAS LISTING /tmp/ccMa7HLZ.s page 1069
+
+
+ 40901 98ba 04 .byte 0x4
+ 40902 98bb 76 .byte 0x76
+ 40903 98bc A0BE7F .sleb128 -8416
+ 40904 98bf 31 .uleb128 0x31
+ 40905 98c0 CE0E0000 .long 0xece
+ 40906 98c4 00000000 .quad .LBB2226
+ 40906 00000000
+ 40907 98cc 00000000 .quad .LBE2226
+ 40907 00000000
+ 40908 98d4 02 .byte 0x2
+ 40909 98d5 1F06 .value 0x61f
+ 40910 98d7 00990000 .long 0x9900
+ 40911 98db 32 .uleb128 0x32
+ 40912 98dc E00E0000 .long 0xee0
+ 40913 98e0 03 .byte 0x3
+ 40914 98e1 91 .byte 0x91
+ 40915 98e2 9072 .sleb128 -1776
+ 40916 98e4 33 .uleb128 0x33
+ 40917 98e5 00000000 .quad .LBB2227
+ 40917 00000000
+ 40918 98ed 00000000 .quad .LBE2227
+ 40918 00000000
+ 40919 98f5 34 .uleb128 0x34
+ 40920 98f6 EC0E0000 .long 0xeec
+ 40921 98fa 03 .byte 0x3
+ 40922 98fb 91 .byte 0x91
+ 40923 98fc A04D .sleb128 -6496
+ 40924 98fe 00 .byte 0x0
+ 40925 98ff 00 .byte 0x0
+ 40926 9900 31 .uleb128 0x31
+ 40927 9901 CE0E0000 .long 0xece
+ 40928 9905 00000000 .quad .LBB2228
+ 40928 00000000
+ 40929 990d 00000000 .quad .LBE2228
+ 40929 00000000
+ 40930 9915 02 .byte 0x2
+ 40931 9916 2006 .value 0x620
+ 40932 9918 41990000 .long 0x9941
+ 40933 991c 32 .uleb128 0x32
+ 40934 991d E00E0000 .long 0xee0
+ 40935 9921 03 .byte 0x3
+ 40936 9922 91 .byte 0x91
+ 40937 9923 A072 .sleb128 -1760
+ 40938 9925 33 .uleb128 0x33
+ 40939 9926 00000000 .quad .LBB2229
+ 40939 00000000
+ 40940 992e 00000000 .quad .LBE2229
+ 40940 00000000
+ 40941 9936 34 .uleb128 0x34
+ 40942 9937 EC0E0000 .long 0xeec
+ 40943 993b 03 .byte 0x3
+ 40944 993c 91 .byte 0x91
+ 40945 993d B04D .sleb128 -6480
+ 40946 993f 00 .byte 0x0
+ 40947 9940 00 .byte 0x0
+ 40948 9941 35 .uleb128 0x35
+ 40949 9942 CE0E0000 .long 0xece
+
GAS LISTING /tmp/ccMa7HLZ.s page 1070
+
+
+ 40950 9946 00000000 .quad .LBB2230
+ 40950 00000000
+ 40951 994e 00000000 .quad .LBE2230
+ 40951 00000000
+ 40952 9956 02 .byte 0x2
+ 40953 9957 2106 .value 0x621
+ 40954 9959 32 .uleb128 0x32
+ 40955 995a E00E0000 .long 0xee0
+ 40956 995e 03 .byte 0x3
+ 40957 995f 91 .byte 0x91
+ 40958 9960 B072 .sleb128 -1744
+ 40959 9962 33 .uleb128 0x33
+ 40960 9963 00000000 .quad .LBB2231
+ 40960 00000000
+ 40961 996b 00000000 .quad .LBE2231
+ 40961 00000000
+ 40962 9973 34 .uleb128 0x34
+ 40963 9974 EC0E0000 .long 0xeec
+ 40964 9978 03 .byte 0x3
+ 40965 9979 91 .byte 0x91
+ 40966 997a C04D .sleb128 -6464
+ 40967 997c 00 .byte 0x0
+ 40968 997d 00 .byte 0x0
+ 40969 997e 00 .byte 0x0
+ 40970 997f 00 .byte 0x0
+ 40971 9980 31 .uleb128 0x31
+ 40972 9981 520E0000 .long 0xe52
+ 40973 9985 00000000 .quad .LBB2232
+ 40973 00000000
+ 40974 998d 00000000 .quad .LBE2232
+ 40974 00000000
+ 40975 9995 02 .byte 0x2
+ 40976 9996 8E07 .value 0x78e
+ 40977 9998 AF990000 .long 0x99af
+ 40978 999c 32 .uleb128 0x32
+ 40979 999d 6D0E0000 .long 0xe6d
+ 40980 99a1 03 .byte 0x3
+ 40981 99a2 91 .byte 0x91
+ 40982 99a3 C072 .sleb128 -1728
+ 40983 99a5 32 .uleb128 0x32
+ 40984 99a6 630E0000 .long 0xe63
+ 40985 99aa 03 .byte 0x3
+ 40986 99ab 91 .byte 0x91
+ 40987 99ac D072 .sleb128 -1712
+ 40988 99ae 00 .byte 0x0
+ 40989 99af 31 .uleb128 0x31
+ 40990 99b0 4E740000 .long 0x744e
+ 40991 99b4 00000000 .quad .LBB2234
+ 40991 00000000
+ 40992 99bc 00000000 .quad .LBE2234
+ 40992 00000000
+ 40993 99c4 02 .byte 0x2
+ 40994 99c5 8F07 .value 0x78f
+ 40995 99c7 3F9A0000 .long 0x9a3f
+ 40996 99cb 32 .uleb128 0x32
+ 40997 99cc 60740000 .long 0x7460
+ 40998 99d0 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1071
+
+
+ 40999 99d1 91 .byte 0x91
+ 41000 99d2 E072 .sleb128 -1696
+ 41001 99d4 33 .uleb128 0x33
+ 41002 99d5 00000000 .quad .LBB2235
+ 41002 00000000
+ 41003 99dd 00000000 .quad .LBE2235
+ 41003 00000000
+ 41004 99e5 34 .uleb128 0x34
+ 41005 99e6 6C740000 .long 0x746c
+ 41006 99ea 03 .byte 0x3
+ 41007 99eb 91 .byte 0x91
+ 41008 99ec E04D .sleb128 -6432
+ 41009 99ee 34 .uleb128 0x34
+ 41010 99ef 76740000 .long 0x7476
+ 41011 99f3 03 .byte 0x3
+ 41012 99f4 91 .byte 0x91
+ 41013 99f5 F472 .sleb128 -1676
+ 41014 99f7 35 .uleb128 0x35
+ 41015 99f8 12490000 .long 0x4912
+ 41016 99fc 00000000 .quad .LBB2236
+ 41016 00000000
+ 41017 9a04 00000000 .quad .LBE2236
+ 41017 00000000
+ 41018 9a0c 02 .byte 0x2
+ 41019 9a0d 7906 .value 0x679
+ 41020 9a0f 32 .uleb128 0x32
+ 41021 9a10 24490000 .long 0x4924
+ 41022 9a14 03 .byte 0x3
+ 41023 9a15 91 .byte 0x91
+ 41024 9a16 F872 .sleb128 -1672
+ 41025 9a18 33 .uleb128 0x33
+ 41026 9a19 00000000 .quad .LBB2237
+ 41026 00000000
+ 41027 9a21 00000000 .quad .LBE2237
+ 41027 00000000
+ 41028 9a29 34 .uleb128 0x34
+ 41029 9a2a 2E490000 .long 0x492e
+ 41030 9a2e 03 .byte 0x3
+ 41031 9a2f 91 .byte 0x91
+ 41032 9a30 D04D .sleb128 -6448
+ 41033 9a32 34 .uleb128 0x34
+ 41034 9a33 3A490000 .long 0x493a
+ 41035 9a37 03 .byte 0x3
+ 41036 9a38 91 .byte 0x91
+ 41037 9a39 FC72 .sleb128 -1668
+ 41038 9a3b 00 .byte 0x0
+ 41039 9a3c 00 .byte 0x0
+ 41040 9a3d 00 .byte 0x0
+ 41041 9a3e 00 .byte 0x0
+ 41042 9a3f 31 .uleb128 0x31
+ 41043 9a40 A30E0000 .long 0xea3
+ 41044 9a44 00000000 .quad .LBB2238
+ 41044 00000000
+ 41045 9a4c 00000000 .quad .LBE2238
+ 41045 00000000
+ 41046 9a54 02 .byte 0x2
+ 41047 9a55 8F07 .value 0x78f
+
GAS LISTING /tmp/ccMa7HLZ.s page 1072
+
+
+ 41048 9a57 409B0000 .long 0x9b40
+ 41049 9a5b 32 .uleb128 0x32
+ 41050 9a5c B50E0000 .long 0xeb5
+ 41051 9a60 03 .byte 0x3
+ 41052 9a61 91 .byte 0x91
+ 41053 9a62 8073 .sleb128 -1664
+ 41054 9a64 33 .uleb128 0x33
+ 41055 9a65 00000000 .quad .LBB2239
+ 41055 00000000
+ 41056 9a6d 00000000 .quad .LBE2239
+ 41056 00000000
+ 41057 9a75 34 .uleb128 0x34
+ 41058 9a76 C10E0000 .long 0xec1
+ 41059 9a7a 04 .byte 0x4
+ 41060 9a7b 76 .byte 0x76
+ 41061 9a7c B0BE7F .sleb128 -8400
+ 41062 9a7f 31 .uleb128 0x31
+ 41063 9a80 CE0E0000 .long 0xece
+ 41064 9a84 00000000 .quad .LBB2240
+ 41064 00000000
+ 41065 9a8c 00000000 .quad .LBE2240
+ 41065 00000000
+ 41066 9a94 02 .byte 0x2
+ 41067 9a95 1F06 .value 0x61f
+ 41068 9a97 C09A0000 .long 0x9ac0
+ 41069 9a9b 32 .uleb128 0x32
+ 41070 9a9c E00E0000 .long 0xee0
+ 41071 9aa0 03 .byte 0x3
+ 41072 9aa1 91 .byte 0x91
+ 41073 9aa2 9073 .sleb128 -1648
+ 41074 9aa4 33 .uleb128 0x33
+ 41075 9aa5 00000000 .quad .LBB2241
+ 41075 00000000
+ 41076 9aad 00000000 .quad .LBE2241
+ 41076 00000000
+ 41077 9ab5 34 .uleb128 0x34
+ 41078 9ab6 EC0E0000 .long 0xeec
+ 41079 9aba 03 .byte 0x3
+ 41080 9abb 91 .byte 0x91
+ 41081 9abc F04D .sleb128 -6416
+ 41082 9abe 00 .byte 0x0
+ 41083 9abf 00 .byte 0x0
+ 41084 9ac0 31 .uleb128 0x31
+ 41085 9ac1 CE0E0000 .long 0xece
+ 41086 9ac5 00000000 .quad .LBB2242
+ 41086 00000000
+ 41087 9acd 00000000 .quad .LBE2242
+ 41087 00000000
+ 41088 9ad5 02 .byte 0x2
+ 41089 9ad6 2006 .value 0x620
+ 41090 9ad8 019B0000 .long 0x9b01
+ 41091 9adc 32 .uleb128 0x32
+ 41092 9add E00E0000 .long 0xee0
+ 41093 9ae1 03 .byte 0x3
+ 41094 9ae2 91 .byte 0x91
+ 41095 9ae3 A073 .sleb128 -1632
+ 41096 9ae5 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 1073
+
+
+ 41097 9ae6 00000000 .quad .LBB2243
+ 41097 00000000
+ 41098 9aee 00000000 .quad .LBE2243
+ 41098 00000000
+ 41099 9af6 34 .uleb128 0x34
+ 41100 9af7 EC0E0000 .long 0xeec
+ 41101 9afb 03 .byte 0x3
+ 41102 9afc 91 .byte 0x91
+ 41103 9afd 804E .sleb128 -6400
+ 41104 9aff 00 .byte 0x0
+ 41105 9b00 00 .byte 0x0
+ 41106 9b01 35 .uleb128 0x35
+ 41107 9b02 CE0E0000 .long 0xece
+ 41108 9b06 00000000 .quad .LBB2244
+ 41108 00000000
+ 41109 9b0e 00000000 .quad .LBE2244
+ 41109 00000000
+ 41110 9b16 02 .byte 0x2
+ 41111 9b17 2106 .value 0x621
+ 41112 9b19 32 .uleb128 0x32
+ 41113 9b1a E00E0000 .long 0xee0
+ 41114 9b1e 03 .byte 0x3
+ 41115 9b1f 91 .byte 0x91
+ 41116 9b20 B073 .sleb128 -1616
+ 41117 9b22 33 .uleb128 0x33
+ 41118 9b23 00000000 .quad .LBB2245
+ 41118 00000000
+ 41119 9b2b 00000000 .quad .LBE2245
+ 41119 00000000
+ 41120 9b33 34 .uleb128 0x34
+ 41121 9b34 EC0E0000 .long 0xeec
+ 41122 9b38 03 .byte 0x3
+ 41123 9b39 91 .byte 0x91
+ 41124 9b3a 904E .sleb128 -6384
+ 41125 9b3c 00 .byte 0x0
+ 41126 9b3d 00 .byte 0x0
+ 41127 9b3e 00 .byte 0x0
+ 41128 9b3f 00 .byte 0x0
+ 41129 9b40 31 .uleb128 0x31
+ 41130 9b41 520E0000 .long 0xe52
+ 41131 9b45 00000000 .quad .LBB2246
+ 41131 00000000
+ 41132 9b4d 00000000 .quad .LBE2246
+ 41132 00000000
+ 41133 9b55 02 .byte 0x2
+ 41134 9b56 8F07 .value 0x78f
+ 41135 9b58 6F9B0000 .long 0x9b6f
+ 41136 9b5c 32 .uleb128 0x32
+ 41137 9b5d 6D0E0000 .long 0xe6d
+ 41138 9b61 03 .byte 0x3
+ 41139 9b62 91 .byte 0x91
+ 41140 9b63 C073 .sleb128 -1600
+ 41141 9b65 32 .uleb128 0x32
+ 41142 9b66 630E0000 .long 0xe63
+ 41143 9b6a 03 .byte 0x3
+ 41144 9b6b 91 .byte 0x91
+ 41145 9b6c D073 .sleb128 -1584
+
GAS LISTING /tmp/ccMa7HLZ.s page 1074
+
+
+ 41146 9b6e 00 .byte 0x0
+ 41147 9b6f 31 .uleb128 0x31
+ 41148 9b70 D10B0000 .long 0xbd1
+ 41149 9b74 00000000 .quad .LBB2248
+ 41149 00000000
+ 41150 9b7c 00000000 .quad .LBE2248
+ 41150 00000000
+ 41151 9b84 02 .byte 0x2
+ 41152 9b85 9007 .value 0x790
+ 41153 9b87 17A00000 .long 0xa017
+ 41154 9b8b 32 .uleb128 0x32
+ 41155 9b8c EF0B0000 .long 0xbef
+ 41156 9b90 03 .byte 0x3
+ 41157 9b91 91 .byte 0x91
+ 41158 9b92 EC73 .sleb128 -1556
+ 41159 9b94 32 .uleb128 0x32
+ 41160 9b95 E30B0000 .long 0xbe3
+ 41161 9b99 03 .byte 0x3
+ 41162 9b9a 91 .byte 0x91
+ 41163 9b9b F073 .sleb128 -1552
+ 41164 9b9d 33 .uleb128 0x33
+ 41165 9b9e 00000000 .quad .LBB2249
+ 41165 00000000
+ 41166 9ba6 00000000 .quad .LBE2249
+ 41166 00000000
+ 41167 9bae 34 .uleb128 0x34
+ 41168 9baf FB0B0000 .long 0xbfb
+ 41169 9bb3 04 .byte 0x4
+ 41170 9bb4 76 .byte 0x76
+ 41171 9bb5 D0BE7F .sleb128 -8368
+ 41172 9bb8 34 .uleb128 0x34
+ 41173 9bb9 070C0000 .long 0xc07
+ 41174 9bbd 04 .byte 0x4
+ 41175 9bbe 76 .byte 0x76
+ 41176 9bbf C0BE7F .sleb128 -8384
+ 41177 9bc2 31 .uleb128 0x31
+ 41178 9bc3 500C0000 .long 0xc50
+ 41179 9bc7 00000000 .quad .LBB2250
+ 41179 00000000
+ 41180 9bcf 00000000 .quad .LBE2250
+ 41180 00000000
+ 41181 9bd7 02 .byte 0x2
+ 41182 9bd8 9106 .value 0x691
+ 41183 9bda 159C0000 .long 0x9c15
+ 41184 9bde 32 .uleb128 0x32
+ 41185 9bdf 7A0C0000 .long 0xc7a
+ 41186 9be3 03 .byte 0x3
+ 41187 9be4 91 .byte 0x91
+ 41188 9be5 8874 .sleb128 -1528
+ 41189 9be7 32 .uleb128 0x32
+ 41190 9be8 6E0C0000 .long 0xc6e
+ 41191 9bec 03 .byte 0x3
+ 41192 9bed 91 .byte 0x91
+ 41193 9bee 8C74 .sleb128 -1524
+ 41194 9bf0 32 .uleb128 0x32
+ 41195 9bf1 620C0000 .long 0xc62
+ 41196 9bf5 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1075
+
+
+ 41197 9bf6 91 .byte 0x91
+ 41198 9bf7 9074 .sleb128 -1520
+ 41199 9bf9 33 .uleb128 0x33
+ 41200 9bfa 00000000 .quad .LBB2251
+ 41200 00000000
+ 41201 9c02 00000000 .quad .LBE2251
+ 41201 00000000
+ 41202 9c0a 34 .uleb128 0x34
+ 41203 9c0b 860C0000 .long 0xc86
+ 41204 9c0f 03 .byte 0x3
+ 41205 9c10 91 .byte 0x91
+ 41206 9c11 E04E .sleb128 -6304
+ 41207 9c13 00 .byte 0x0
+ 41208 9c14 00 .byte 0x0
+ 41209 9c15 31 .uleb128 0x31
+ 41210 9c16 910C0000 .long 0xc91
+ 41211 9c1a 00000000 .quad .LBB2252
+ 41211 00000000
+ 41212 9c22 00000000 .quad .LBE2252
+ 41212 00000000
+ 41213 9c2a 02 .byte 0x2
+ 41214 9c2b 9206 .value 0x692
+ 41215 9c2d 859E0000 .long 0x9e85
+ 41216 9c31 32 .uleb128 0x32
+ 41217 9c32 A30C0000 .long 0xca3
+ 41218 9c36 03 .byte 0x3
+ 41219 9c37 91 .byte 0x91
+ 41220 9c38 A074 .sleb128 -1504
+ 41221 9c3a 35 .uleb128 0x35
+ 41222 9c3b B00C0000 .long 0xcb0
+ 41223 9c3f 00000000 .quad .LBB2254
+ 41223 00000000
+ 41224 9c47 00000000 .quad .LBE2254
+ 41224 00000000
+ 41225 9c4f 02 .byte 0x2
+ 41226 9c50 7D03 .value 0x37d
+ 41227 9c52 32 .uleb128 0x32
+ 41228 9c53 CE0C0000 .long 0xcce
+ 41229 9c57 03 .byte 0x3
+ 41230 9c58 91 .byte 0x91
+ 41231 9c59 B874 .sleb128 -1480
+ 41232 9c5b 32 .uleb128 0x32
+ 41233 9c5c C20C0000 .long 0xcc2
+ 41234 9c60 03 .byte 0x3
+ 41235 9c61 91 .byte 0x91
+ 41236 9c62 C074 .sleb128 -1472
+ 41237 9c64 33 .uleb128 0x33
+ 41238 9c65 00000000 .quad .LBB2255
+ 41238 00000000
+ 41239 9c6d 00000000 .quad .LBE2255
+ 41239 00000000
+ 41240 9c75 34 .uleb128 0x34
+ 41241 9c76 DA0C0000 .long 0xcda
+ 41242 9c7a 03 .byte 0x3
+ 41243 9c7b 91 .byte 0x91
+ 41244 9c7c 9075 .sleb128 -1392
+ 41245 9c7e 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 1076
+
+
+ 41246 9c7f E50C0000 .long 0xce5
+ 41247 9c83 03 .byte 0x3
+ 41248 9c84 91 .byte 0x91
+ 41249 9c85 8075 .sleb128 -1408
+ 41250 9c87 34 .uleb128 0x34
+ 41251 9c88 F00C0000 .long 0xcf0
+ 41252 9c8c 03 .byte 0x3
+ 41253 9c8d 91 .byte 0x91
+ 41254 9c8e F074 .sleb128 -1424
+ 41255 9c90 34 .uleb128 0x34
+ 41256 9c91 FC0C0000 .long 0xcfc
+ 41257 9c95 03 .byte 0x3
+ 41258 9c96 91 .byte 0x91
+ 41259 9c97 E074 .sleb128 -1440
+ 41260 9c99 34 .uleb128 0x34
+ 41261 9c9a 080D0000 .long 0xd08
+ 41262 9c9e 03 .byte 0x3
+ 41263 9c9f 91 .byte 0x91
+ 41264 9ca0 DC74 .sleb128 -1444
+ 41265 9ca2 31 .uleb128 0x31
+ 41266 9ca3 1F0D0000 .long 0xd1f
+ 41267 9ca7 00000000 .quad .LBB2256
+ 41267 00000000
+ 41268 9caf 00000000 .quad .LBE2256
+ 41268 00000000
+ 41269 9cb7 02 .byte 0x2
+ 41270 9cb8 5603 .value 0x356
+ 41271 9cba D19C0000 .long 0x9cd1
+ 41272 9cbe 32 .uleb128 0x32
+ 41273 9cbf 3A0D0000 .long 0xd3a
+ 41274 9cc3 03 .byte 0x3
+ 41275 9cc4 91 .byte 0x91
+ 41276 9cc5 A075 .sleb128 -1376
+ 41277 9cc7 32 .uleb128 0x32
+ 41278 9cc8 300D0000 .long 0xd30
+ 41279 9ccc 03 .byte 0x3
+ 41280 9ccd 91 .byte 0x91
+ 41281 9cce B075 .sleb128 -1360
+ 41282 9cd0 00 .byte 0x0
+ 41283 9cd1 31 .uleb128 0x31
+ 41284 9cd2 450D0000 .long 0xd45
+ 41285 9cd6 00000000 .quad .LBB2258
+ 41285 00000000
+ 41286 9cde 00000000 .quad .LBE2258
+ 41286 00000000
+ 41287 9ce6 02 .byte 0x2
+ 41288 9ce7 5E03 .value 0x35e
+ 41289 9ce9 009D0000 .long 0x9d00
+ 41290 9ced 32 .uleb128 0x32
+ 41291 9cee 620D0000 .long 0xd62
+ 41292 9cf2 03 .byte 0x3
+ 41293 9cf3 91 .byte 0x91
+ 41294 9cf4 C075 .sleb128 -1344
+ 41295 9cf6 32 .uleb128 0x32
+ 41296 9cf7 570D0000 .long 0xd57
+ 41297 9cfb 03 .byte 0x3
+ 41298 9cfc 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1077
+
+
+ 41299 9cfd D075 .sleb128 -1328
+ 41300 9cff 00 .byte 0x0
+ 41301 9d00 31 .uleb128 0x31
+ 41302 9d01 6E0D0000 .long 0xd6e
+ 41303 9d05 00000000 .quad .LBB2260
+ 41303 00000000
+ 41304 9d0d 00000000 .quad .LBE2260
+ 41304 00000000
+ 41305 9d15 02 .byte 0x2
+ 41306 9d16 6403 .value 0x364
+ 41307 9d18 659D0000 .long 0x9d65
+ 41308 9d1c 32 .uleb128 0x32
+ 41309 9d1d 8C0D0000 .long 0xd8c
+ 41310 9d21 03 .byte 0x3
+ 41311 9d22 91 .byte 0x91
+ 41312 9d23 E075 .sleb128 -1312
+ 41313 9d25 32 .uleb128 0x32
+ 41314 9d26 800D0000 .long 0xd80
+ 41315 9d2a 03 .byte 0x3
+ 41316 9d2b 91 .byte 0x91
+ 41317 9d2c F075 .sleb128 -1296
+ 41318 9d2e 33 .uleb128 0x33
+ 41319 9d2f 00000000 .quad .LBB2261
+ 41319 00000000
+ 41320 9d37 00000000 .quad .LBE2261
+ 41320 00000000
+ 41321 9d3f 34 .uleb128 0x34
+ 41322 9d40 980D0000 .long 0xd98
+ 41323 9d44 03 .byte 0x3
+ 41324 9d45 91 .byte 0x91
+ 41325 9d46 904F .sleb128 -6256
+ 41326 9d48 34 .uleb128 0x34
+ 41327 9d49 A40D0000 .long 0xda4
+ 41328 9d4d 03 .byte 0x3
+ 41329 9d4e 91 .byte 0x91
+ 41330 9d4f 804F .sleb128 -6272
+ 41331 9d51 34 .uleb128 0x34
+ 41332 9d52 AF0D0000 .long 0xdaf
+ 41333 9d56 03 .byte 0x3
+ 41334 9d57 91 .byte 0x91
+ 41335 9d58 F04E .sleb128 -6288
+ 41336 9d5a 34 .uleb128 0x34
+ 41337 9d5b BB0D0000 .long 0xdbb
+ 41338 9d5f 03 .byte 0x3
+ 41339 9d60 91 .byte 0x91
+ 41340 9d61 8C76 .sleb128 -1268
+ 41341 9d63 00 .byte 0x0
+ 41342 9d64 00 .byte 0x0
+ 41343 9d65 31 .uleb128 0x31
+ 41344 9d66 C70D0000 .long 0xdc7
+ 41345 9d6a 00000000 .quad .LBB2262
+ 41345 00000000
+ 41346 9d72 00000000 .quad .LBE2262
+ 41346 00000000
+ 41347 9d7a 02 .byte 0x2
+ 41348 9d7b 6603 .value 0x366
+ 41349 9d7d 949D0000 .long 0x9d94
+
GAS LISTING /tmp/ccMa7HLZ.s page 1078
+
+
+ 41350 9d81 32 .uleb128 0x32
+ 41351 9d82 E20D0000 .long 0xde2
+ 41352 9d86 03 .byte 0x3
+ 41353 9d87 91 .byte 0x91
+ 41354 9d88 9076 .sleb128 -1264
+ 41355 9d8a 32 .uleb128 0x32
+ 41356 9d8b D80D0000 .long 0xdd8
+ 41357 9d8f 03 .byte 0x3
+ 41358 9d90 91 .byte 0x91
+ 41359 9d91 A076 .sleb128 -1248
+ 41360 9d93 00 .byte 0x0
+ 41361 9d94 31 .uleb128 0x31
+ 41362 9d95 6E0D0000 .long 0xd6e
+ 41363 9d99 00000000 .quad .LBB2264
+ 41363 00000000
+ 41364 9da1 00000000 .quad .LBE2264
+ 41364 00000000
+ 41365 9da9 02 .byte 0x2
+ 41366 9daa 6803 .value 0x368
+ 41367 9dac F99D0000 .long 0x9df9
+ 41368 9db0 32 .uleb128 0x32
+ 41369 9db1 8C0D0000 .long 0xd8c
+ 41370 9db5 03 .byte 0x3
+ 41371 9db6 91 .byte 0x91
+ 41372 9db7 B076 .sleb128 -1232
+ 41373 9db9 32 .uleb128 0x32
+ 41374 9dba 800D0000 .long 0xd80
+ 41375 9dbe 03 .byte 0x3
+ 41376 9dbf 91 .byte 0x91
+ 41377 9dc0 C076 .sleb128 -1216
+ 41378 9dc2 33 .uleb128 0x33
+ 41379 9dc3 00000000 .quad .LBB2265
+ 41379 00000000
+ 41380 9dcb 00000000 .quad .LBE2265
+ 41380 00000000
+ 41381 9dd3 34 .uleb128 0x34
+ 41382 9dd4 980D0000 .long 0xd98
+ 41383 9dd8 03 .byte 0x3
+ 41384 9dd9 91 .byte 0x91
+ 41385 9dda C04F .sleb128 -6208
+ 41386 9ddc 34 .uleb128 0x34
+ 41387 9ddd A40D0000 .long 0xda4
+ 41388 9de1 03 .byte 0x3
+ 41389 9de2 91 .byte 0x91
+ 41390 9de3 B04F .sleb128 -6224
+ 41391 9de5 34 .uleb128 0x34
+ 41392 9de6 AF0D0000 .long 0xdaf
+ 41393 9dea 03 .byte 0x3
+ 41394 9deb 91 .byte 0x91
+ 41395 9dec A04F .sleb128 -6240
+ 41396 9dee 34 .uleb128 0x34
+ 41397 9def BB0D0000 .long 0xdbb
+ 41398 9df3 03 .byte 0x3
+ 41399 9df4 91 .byte 0x91
+ 41400 9df5 DC76 .sleb128 -1188
+ 41401 9df7 00 .byte 0x0
+ 41402 9df8 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1079
+
+
+ 41403 9df9 31 .uleb128 0x31
+ 41404 9dfa C70D0000 .long 0xdc7
+ 41405 9dfe 00000000 .quad .LBB2266
+ 41405 00000000
+ 41406 9e06 00000000 .quad .LBE2266
+ 41406 00000000
+ 41407 9e0e 02 .byte 0x2
+ 41408 9e0f 6A03 .value 0x36a
+ 41409 9e11 289E0000 .long 0x9e28
+ 41410 9e15 32 .uleb128 0x32
+ 41411 9e16 E20D0000 .long 0xde2
+ 41412 9e1a 03 .byte 0x3
+ 41413 9e1b 91 .byte 0x91
+ 41414 9e1c E076 .sleb128 -1184
+ 41415 9e1e 32 .uleb128 0x32
+ 41416 9e1f D80D0000 .long 0xdd8
+ 41417 9e23 03 .byte 0x3
+ 41418 9e24 91 .byte 0x91
+ 41419 9e25 F076 .sleb128 -1168
+ 41420 9e27 00 .byte 0x0
+ 41421 9e28 31 .uleb128 0x31
+ 41422 9e29 ED0D0000 .long 0xded
+ 41423 9e2d 00000000 .quad .LBB2268
+ 41423 00000000
+ 41424 9e35 00000000 .quad .LBE2268
+ 41424 00000000
+ 41425 9e3d 02 .byte 0x2
+ 41426 9e3e 6C03 .value 0x36c
+ 41427 9e40 579E0000 .long 0x9e57
+ 41428 9e44 32 .uleb128 0x32
+ 41429 9e45 0A0E0000 .long 0xe0a
+ 41430 9e49 03 .byte 0x3
+ 41431 9e4a 91 .byte 0x91
+ 41432 9e4b 8077 .sleb128 -1152
+ 41433 9e4d 32 .uleb128 0x32
+ 41434 9e4e FF0D0000 .long 0xdff
+ 41435 9e52 03 .byte 0x3
+ 41436 9e53 91 .byte 0x91
+ 41437 9e54 9077 .sleb128 -1136
+ 41438 9e56 00 .byte 0x0
+ 41439 9e57 35 .uleb128 0x35
+ 41440 9e58 1F0D0000 .long 0xd1f
+ 41441 9e5c 00000000 .quad .LBB2270
+ 41441 00000000
+ 41442 9e64 00000000 .quad .LBE2270
+ 41442 00000000
+ 41443 9e6c 02 .byte 0x2
+ 41444 9e6d 6E03 .value 0x36e
+ 41445 9e6f 32 .uleb128 0x32
+ 41446 9e70 3A0D0000 .long 0xd3a
+ 41447 9e74 03 .byte 0x3
+ 41448 9e75 91 .byte 0x91
+ 41449 9e76 A077 .sleb128 -1120
+ 41450 9e78 32 .uleb128 0x32
+ 41451 9e79 300D0000 .long 0xd30
+ 41452 9e7d 03 .byte 0x3
+ 41453 9e7e 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1080
+
+
+ 41454 9e7f B077 .sleb128 -1104
+ 41455 9e81 00 .byte 0x0
+ 41456 9e82 00 .byte 0x0
+ 41457 9e83 00 .byte 0x0
+ 41458 9e84 00 .byte 0x0
+ 41459 9e85 36 .uleb128 0x36
+ 41460 9e86 00000000 .quad .LBB2272
+ 41460 00000000
+ 41461 9e8e 00000000 .quad .LBE2272
+ 41461 00000000
+ 41462 9e96 A49E0000 .long 0x9ea4
+ 41463 9e9a 34 .uleb128 0x34
+ 41464 9e9b 180C0000 .long 0xc18
+ 41465 9e9f 03 .byte 0x3
+ 41466 9ea0 91 .byte 0x91
+ 41467 9ea1 D04E .sleb128 -6320
+ 41468 9ea3 00 .byte 0x0
+ 41469 9ea4 31 .uleb128 0x31
+ 41470 9ea5 160E0000 .long 0xe16
+ 41471 9ea9 00000000 .quad .LBB2273
+ 41471 00000000
+ 41472 9eb1 00000000 .quad .LBE2273
+ 41472 00000000
+ 41473 9eb9 02 .byte 0x2
+ 41474 9eba 9406 .value 0x694
+ 41475 9ebc 4C9F0000 .long 0x9f4c
+ 41476 9ec0 32 .uleb128 0x32
+ 41477 9ec1 280E0000 .long 0xe28
+ 41478 9ec5 03 .byte 0x3
+ 41479 9ec6 91 .byte 0x91
+ 41480 9ec7 C077 .sleb128 -1088
+ 41481 9ec9 33 .uleb128 0x33
+ 41482 9eca 00000000 .quad .LBB2274
+ 41482 00000000
+ 41483 9ed2 00000000 .quad .LBE2274
+ 41483 00000000
+ 41484 9eda 34 .uleb128 0x34
+ 41485 9edb 340E0000 .long 0xe34
+ 41486 9edf 09 .byte 0x9
+ 41487 9ee0 03 .byte 0x3
+ 41488 9ee1 00000000 .quad ShiftRowTable.6768
+ 41488 00000000
+ 41489 9ee9 35 .uleb128 0x35
+ 41490 9eea 6E0D0000 .long 0xd6e
+ 41491 9eee 00000000 .quad .LBB2275
+ 41491 00000000
+ 41492 9ef6 00000000 .quad .LBE2275
+ 41492 00000000
+ 41493 9efe 02 .byte 0x2
+ 41494 9eff 9B02 .value 0x29b
+ 41495 9f01 32 .uleb128 0x32
+ 41496 9f02 8C0D0000 .long 0xd8c
+ 41497 9f06 03 .byte 0x3
+ 41498 9f07 91 .byte 0x91
+ 41499 9f08 D077 .sleb128 -1072
+ 41500 9f0a 32 .uleb128 0x32
+ 41501 9f0b 800D0000 .long 0xd80
+
GAS LISTING /tmp/ccMa7HLZ.s page 1081
+
+
+ 41502 9f0f 03 .byte 0x3
+ 41503 9f10 91 .byte 0x91
+ 41504 9f11 E077 .sleb128 -1056
+ 41505 9f13 33 .uleb128 0x33
+ 41506 9f14 00000000 .quad .LBB2276
+ 41506 00000000
+ 41507 9f1c 00000000 .quad .LBE2276
+ 41507 00000000
+ 41508 9f24 34 .uleb128 0x34
+ 41509 9f25 980D0000 .long 0xd98
+ 41510 9f29 03 .byte 0x3
+ 41511 9f2a 91 .byte 0x91
+ 41512 9f2b F04F .sleb128 -6160
+ 41513 9f2d 34 .uleb128 0x34
+ 41514 9f2e A40D0000 .long 0xda4
+ 41515 9f32 03 .byte 0x3
+ 41516 9f33 91 .byte 0x91
+ 41517 9f34 E04F .sleb128 -6176
+ 41518 9f36 34 .uleb128 0x34
+ 41519 9f37 AF0D0000 .long 0xdaf
+ 41520 9f3b 03 .byte 0x3
+ 41521 9f3c 91 .byte 0x91
+ 41522 9f3d D04F .sleb128 -6192
+ 41523 9f3f 34 .uleb128 0x34
+ 41524 9f40 BB0D0000 .long 0xdbb
+ 41525 9f44 03 .byte 0x3
+ 41526 9f45 91 .byte 0x91
+ 41527 9f46 FC77 .sleb128 -1028
+ 41528 9f48 00 .byte 0x0
+ 41529 9f49 00 .byte 0x0
+ 41530 9f4a 00 .byte 0x0
+ 41531 9f4b 00 .byte 0x0
+ 41532 9f4c 36 .uleb128 0x36
+ 41533 9f4d 00000000 .quad .LBB2277
+ 41533 00000000
+ 41534 9f55 00000000 .quad .LBE2277
+ 41534 00000000
+ 41535 9f5d 6B9F0000 .long 0x9f6b
+ 41536 9f61 34 .uleb128 0x34
+ 41537 9f62 280C0000 .long 0xc28
+ 41538 9f66 03 .byte 0x3
+ 41539 9f67 91 .byte 0x91
+ 41540 9f68 C04E .sleb128 -6336
+ 41541 9f6a 00 .byte 0x0
+ 41542 9f6b 31 .uleb128 0x31
+ 41543 9f6c 520E0000 .long 0xe52
+ 41544 9f70 00000000 .quad .LBB2278
+ 41544 00000000
+ 41545 9f78 00000000 .quad .LBE2278
+ 41545 00000000
+ 41546 9f80 02 .byte 0x2
+ 41547 9f81 9606 .value 0x696
+ 41548 9f83 9A9F0000 .long 0x9f9a
+ 41549 9f87 32 .uleb128 0x32
+ 41550 9f88 6D0E0000 .long 0xe6d
+ 41551 9f8c 03 .byte 0x3
+ 41552 9f8d 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1082
+
+
+ 41553 9f8e 8078 .sleb128 -1024
+ 41554 9f90 32 .uleb128 0x32
+ 41555 9f91 630E0000 .long 0xe63
+ 41556 9f95 03 .byte 0x3
+ 41557 9f96 91 .byte 0x91
+ 41558 9f97 9078 .sleb128 -1008
+ 41559 9f99 00 .byte 0x0
+ 41560 9f9a 36 .uleb128 0x36
+ 41561 9f9b 00000000 .quad .LBB2280
+ 41561 00000000
+ 41562 9fa3 00000000 .quad .LBE2280
+ 41562 00000000
+ 41563 9fab B99F0000 .long 0x9fb9
+ 41564 9faf 34 .uleb128 0x34
+ 41565 9fb0 380C0000 .long 0xc38
+ 41566 9fb4 03 .byte 0x3
+ 41567 9fb5 91 .byte 0x91
+ 41568 9fb6 B04E .sleb128 -6352
+ 41569 9fb8 00 .byte 0x0
+ 41570 9fb9 31 .uleb128 0x31
+ 41571 9fba 780E0000 .long 0xe78
+ 41572 9fbe 00000000 .quad .LBB2281
+ 41572 00000000
+ 41573 9fc6 00000000 .quad .LBE2281
+ 41573 00000000
+ 41574 9fce 02 .byte 0x2
+ 41575 9fcf 9806 .value 0x698
+ 41576 9fd1 FA9F0000 .long 0x9ffa
+ 41577 9fd5 32 .uleb128 0x32
+ 41578 9fd6 8A0E0000 .long 0xe8a
+ 41579 9fda 03 .byte 0x3
+ 41580 9fdb 91 .byte 0x91
+ 41581 9fdc A078 .sleb128 -992
+ 41582 9fde 33 .uleb128 0x33
+ 41583 9fdf 00000000 .quad .LBB2282
+ 41583 00000000
+ 41584 9fe7 00000000 .quad .LBE2282
+ 41584 00000000
+ 41585 9fef 34 .uleb128 0x34
+ 41586 9ff0 960E0000 .long 0xe96
+ 41587 9ff4 03 .byte 0x3
+ 41588 9ff5 91 .byte 0x91
+ 41589 9ff6 8050 .sleb128 -6144
+ 41590 9ff8 00 .byte 0x0
+ 41591 9ff9 00 .byte 0x0
+ 41592 9ffa 33 .uleb128 0x33
+ 41593 9ffb 00000000 .quad .LBB2283
+ 41593 00000000
+ 41594 a003 00000000 .quad .LBE2283
+ 41594 00000000
+ 41595 a00b 34 .uleb128 0x34
+ 41596 a00c 440C0000 .long 0xc44
+ 41597 a010 03 .byte 0x3
+ 41598 a011 91 .byte 0x91
+ 41599 a012 A04E .sleb128 -6368
+ 41600 a014 00 .byte 0x0
+ 41601 a015 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1083
+
+
+ 41602 a016 00 .byte 0x0
+ 41603 a017 31 .uleb128 0x31
+ 41604 a018 A30E0000 .long 0xea3
+ 41605 a01c 00000000 .quad .LBB2284
+ 41605 00000000
+ 41606 a024 00000000 .quad .LBE2284
+ 41606 00000000
+ 41607 a02c 02 .byte 0x2
+ 41608 a02d 9007 .value 0x790
+ 41609 a02f 18A10000 .long 0xa118
+ 41610 a033 32 .uleb128 0x32
+ 41611 a034 B50E0000 .long 0xeb5
+ 41612 a038 03 .byte 0x3
+ 41613 a039 91 .byte 0x91
+ 41614 a03a B078 .sleb128 -976
+ 41615 a03c 33 .uleb128 0x33
+ 41616 a03d 00000000 .quad .LBB2285
+ 41616 00000000
+ 41617 a045 00000000 .quad .LBE2285
+ 41617 00000000
+ 41618 a04d 34 .uleb128 0x34
+ 41619 a04e C10E0000 .long 0xec1
+ 41620 a052 04 .byte 0x4
+ 41621 a053 76 .byte 0x76
+ 41622 a054 F0BE7F .sleb128 -8336
+ 41623 a057 31 .uleb128 0x31
+ 41624 a058 CE0E0000 .long 0xece
+ 41625 a05c 00000000 .quad .LBB2286
+ 41625 00000000
+ 41626 a064 00000000 .quad .LBE2286
+ 41626 00000000
+ 41627 a06c 02 .byte 0x2
+ 41628 a06d 1F06 .value 0x61f
+ 41629 a06f 98A00000 .long 0xa098
+ 41630 a073 32 .uleb128 0x32
+ 41631 a074 E00E0000 .long 0xee0
+ 41632 a078 03 .byte 0x3
+ 41633 a079 91 .byte 0x91
+ 41634 a07a C078 .sleb128 -960
+ 41635 a07c 33 .uleb128 0x33
+ 41636 a07d 00000000 .quad .LBB2287
+ 41636 00000000
+ 41637 a085 00000000 .quad .LBE2287
+ 41637 00000000
+ 41638 a08d 34 .uleb128 0x34
+ 41639 a08e EC0E0000 .long 0xeec
+ 41640 a092 03 .byte 0x3
+ 41641 a093 91 .byte 0x91
+ 41642 a094 9050 .sleb128 -6128
+ 41643 a096 00 .byte 0x0
+ 41644 a097 00 .byte 0x0
+ 41645 a098 31 .uleb128 0x31
+ 41646 a099 CE0E0000 .long 0xece
+ 41647 a09d 00000000 .quad .LBB2288
+ 41647 00000000
+ 41648 a0a5 00000000 .quad .LBE2288
+ 41648 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1084
+
+
+ 41649 a0ad 02 .byte 0x2
+ 41650 a0ae 2006 .value 0x620
+ 41651 a0b0 D9A00000 .long 0xa0d9
+ 41652 a0b4 32 .uleb128 0x32
+ 41653 a0b5 E00E0000 .long 0xee0
+ 41654 a0b9 03 .byte 0x3
+ 41655 a0ba 91 .byte 0x91
+ 41656 a0bb D078 .sleb128 -944
+ 41657 a0bd 33 .uleb128 0x33
+ 41658 a0be 00000000 .quad .LBB2289
+ 41658 00000000
+ 41659 a0c6 00000000 .quad .LBE2289
+ 41659 00000000
+ 41660 a0ce 34 .uleb128 0x34
+ 41661 a0cf EC0E0000 .long 0xeec
+ 41662 a0d3 03 .byte 0x3
+ 41663 a0d4 91 .byte 0x91
+ 41664 a0d5 A050 .sleb128 -6112
+ 41665 a0d7 00 .byte 0x0
+ 41666 a0d8 00 .byte 0x0
+ 41667 a0d9 35 .uleb128 0x35
+ 41668 a0da CE0E0000 .long 0xece
+ 41669 a0de 00000000 .quad .LBB2290
+ 41669 00000000
+ 41670 a0e6 00000000 .quad .LBE2290
+ 41670 00000000
+ 41671 a0ee 02 .byte 0x2
+ 41672 a0ef 2106 .value 0x621
+ 41673 a0f1 32 .uleb128 0x32
+ 41674 a0f2 E00E0000 .long 0xee0
+ 41675 a0f6 03 .byte 0x3
+ 41676 a0f7 91 .byte 0x91
+ 41677 a0f8 E078 .sleb128 -928
+ 41678 a0fa 33 .uleb128 0x33
+ 41679 a0fb 00000000 .quad .LBB2291
+ 41679 00000000
+ 41680 a103 00000000 .quad .LBE2291
+ 41680 00000000
+ 41681 a10b 34 .uleb128 0x34
+ 41682 a10c EC0E0000 .long 0xeec
+ 41683 a110 03 .byte 0x3
+ 41684 a111 91 .byte 0x91
+ 41685 a112 B050 .sleb128 -6096
+ 41686 a114 00 .byte 0x0
+ 41687 a115 00 .byte 0x0
+ 41688 a116 00 .byte 0x0
+ 41689 a117 00 .byte 0x0
+ 41690 a118 31 .uleb128 0x31
+ 41691 a119 520E0000 .long 0xe52
+ 41692 a11d 00000000 .quad .LBB2292
+ 41692 00000000
+ 41693 a125 00000000 .quad .LBE2292
+ 41693 00000000
+ 41694 a12d 02 .byte 0x2
+ 41695 a12e 9007 .value 0x790
+ 41696 a130 47A10000 .long 0xa147
+ 41697 a134 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 1085
+
+
+ 41698 a135 6D0E0000 .long 0xe6d
+ 41699 a139 03 .byte 0x3
+ 41700 a13a 91 .byte 0x91
+ 41701 a13b F078 .sleb128 -912
+ 41702 a13d 32 .uleb128 0x32
+ 41703 a13e 630E0000 .long 0xe63
+ 41704 a142 03 .byte 0x3
+ 41705 a143 91 .byte 0x91
+ 41706 a144 8079 .sleb128 -896
+ 41707 a146 00 .byte 0x0
+ 41708 a147 31 .uleb128 0x31
+ 41709 a148 4E740000 .long 0x744e
+ 41710 a14c 00000000 .quad .LBB2294
+ 41710 00000000
+ 41711 a154 00000000 .quad .LBE2294
+ 41711 00000000
+ 41712 a15c 02 .byte 0x2
+ 41713 a15d 9107 .value 0x791
+ 41714 a15f D7A10000 .long 0xa1d7
+ 41715 a163 32 .uleb128 0x32
+ 41716 a164 60740000 .long 0x7460
+ 41717 a168 03 .byte 0x3
+ 41718 a169 91 .byte 0x91
+ 41719 a16a 9079 .sleb128 -880
+ 41720 a16c 33 .uleb128 0x33
+ 41721 a16d 00000000 .quad .LBB2295
+ 41721 00000000
+ 41722 a175 00000000 .quad .LBE2295
+ 41722 00000000
+ 41723 a17d 34 .uleb128 0x34
+ 41724 a17e 6C740000 .long 0x746c
+ 41725 a182 03 .byte 0x3
+ 41726 a183 91 .byte 0x91
+ 41727 a184 D050 .sleb128 -6064
+ 41728 a186 34 .uleb128 0x34
+ 41729 a187 76740000 .long 0x7476
+ 41730 a18b 03 .byte 0x3
+ 41731 a18c 91 .byte 0x91
+ 41732 a18d A479 .sleb128 -860
+ 41733 a18f 35 .uleb128 0x35
+ 41734 a190 12490000 .long 0x4912
+ 41735 a194 00000000 .quad .LBB2296
+ 41735 00000000
+ 41736 a19c 00000000 .quad .LBE2296
+ 41736 00000000
+ 41737 a1a4 02 .byte 0x2
+ 41738 a1a5 7906 .value 0x679
+ 41739 a1a7 32 .uleb128 0x32
+ 41740 a1a8 24490000 .long 0x4924
+ 41741 a1ac 03 .byte 0x3
+ 41742 a1ad 91 .byte 0x91
+ 41743 a1ae A879 .sleb128 -856
+ 41744 a1b0 33 .uleb128 0x33
+ 41745 a1b1 00000000 .quad .LBB2297
+ 41745 00000000
+ 41746 a1b9 00000000 .quad .LBE2297
+ 41746 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1086
+
+
+ 41747 a1c1 34 .uleb128 0x34
+ 41748 a1c2 2E490000 .long 0x492e
+ 41749 a1c6 03 .byte 0x3
+ 41750 a1c7 91 .byte 0x91
+ 41751 a1c8 C050 .sleb128 -6080
+ 41752 a1ca 34 .uleb128 0x34
+ 41753 a1cb 3A490000 .long 0x493a
+ 41754 a1cf 03 .byte 0x3
+ 41755 a1d0 91 .byte 0x91
+ 41756 a1d1 AC79 .sleb128 -852
+ 41757 a1d3 00 .byte 0x0
+ 41758 a1d4 00 .byte 0x0
+ 41759 a1d5 00 .byte 0x0
+ 41760 a1d6 00 .byte 0x0
+ 41761 a1d7 31 .uleb128 0x31
+ 41762 a1d8 A30E0000 .long 0xea3
+ 41763 a1dc 00000000 .quad .LBB2298
+ 41763 00000000
+ 41764 a1e4 00000000 .quad .LBE2298
+ 41764 00000000
+ 41765 a1ec 02 .byte 0x2
+ 41766 a1ed 9107 .value 0x791
+ 41767 a1ef D8A20000 .long 0xa2d8
+ 41768 a1f3 32 .uleb128 0x32
+ 41769 a1f4 B50E0000 .long 0xeb5
+ 41770 a1f8 03 .byte 0x3
+ 41771 a1f9 91 .byte 0x91
+ 41772 a1fa B079 .sleb128 -848
+ 41773 a1fc 33 .uleb128 0x33
+ 41774 a1fd 00000000 .quad .LBB2299
+ 41774 00000000
+ 41775 a205 00000000 .quad .LBE2299
+ 41775 00000000
+ 41776 a20d 34 .uleb128 0x34
+ 41777 a20e C10E0000 .long 0xec1
+ 41778 a212 04 .byte 0x4
+ 41779 a213 76 .byte 0x76
+ 41780 a214 80BF7F .sleb128 -8320
+ 41781 a217 31 .uleb128 0x31
+ 41782 a218 CE0E0000 .long 0xece
+ 41783 a21c 00000000 .quad .LBB2300
+ 41783 00000000
+ 41784 a224 00000000 .quad .LBE2300
+ 41784 00000000
+ 41785 a22c 02 .byte 0x2
+ 41786 a22d 1F06 .value 0x61f
+ 41787 a22f 58A20000 .long 0xa258
+ 41788 a233 32 .uleb128 0x32
+ 41789 a234 E00E0000 .long 0xee0
+ 41790 a238 03 .byte 0x3
+ 41791 a239 91 .byte 0x91
+ 41792 a23a C079 .sleb128 -832
+ 41793 a23c 33 .uleb128 0x33
+ 41794 a23d 00000000 .quad .LBB2301
+ 41794 00000000
+ 41795 a245 00000000 .quad .LBE2301
+ 41795 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1087
+
+
+ 41796 a24d 34 .uleb128 0x34
+ 41797 a24e EC0E0000 .long 0xeec
+ 41798 a252 03 .byte 0x3
+ 41799 a253 91 .byte 0x91
+ 41800 a254 E050 .sleb128 -6048
+ 41801 a256 00 .byte 0x0
+ 41802 a257 00 .byte 0x0
+ 41803 a258 31 .uleb128 0x31
+ 41804 a259 CE0E0000 .long 0xece
+ 41805 a25d 00000000 .quad .LBB2302
+ 41805 00000000
+ 41806 a265 00000000 .quad .LBE2302
+ 41806 00000000
+ 41807 a26d 02 .byte 0x2
+ 41808 a26e 2006 .value 0x620
+ 41809 a270 99A20000 .long 0xa299
+ 41810 a274 32 .uleb128 0x32
+ 41811 a275 E00E0000 .long 0xee0
+ 41812 a279 03 .byte 0x3
+ 41813 a27a 91 .byte 0x91
+ 41814 a27b D079 .sleb128 -816
+ 41815 a27d 33 .uleb128 0x33
+ 41816 a27e 00000000 .quad .LBB2303
+ 41816 00000000
+ 41817 a286 00000000 .quad .LBE2303
+ 41817 00000000
+ 41818 a28e 34 .uleb128 0x34
+ 41819 a28f EC0E0000 .long 0xeec
+ 41820 a293 03 .byte 0x3
+ 41821 a294 91 .byte 0x91
+ 41822 a295 F050 .sleb128 -6032
+ 41823 a297 00 .byte 0x0
+ 41824 a298 00 .byte 0x0
+ 41825 a299 35 .uleb128 0x35
+ 41826 a29a CE0E0000 .long 0xece
+ 41827 a29e 00000000 .quad .LBB2304
+ 41827 00000000
+ 41828 a2a6 00000000 .quad .LBE2304
+ 41828 00000000
+ 41829 a2ae 02 .byte 0x2
+ 41830 a2af 2106 .value 0x621
+ 41831 a2b1 32 .uleb128 0x32
+ 41832 a2b2 E00E0000 .long 0xee0
+ 41833 a2b6 03 .byte 0x3
+ 41834 a2b7 91 .byte 0x91
+ 41835 a2b8 E079 .sleb128 -800
+ 41836 a2ba 33 .uleb128 0x33
+ 41837 a2bb 00000000 .quad .LBB2305
+ 41837 00000000
+ 41838 a2c3 00000000 .quad .LBE2305
+ 41838 00000000
+ 41839 a2cb 34 .uleb128 0x34
+ 41840 a2cc EC0E0000 .long 0xeec
+ 41841 a2d0 03 .byte 0x3
+ 41842 a2d1 91 .byte 0x91
+ 41843 a2d2 8051 .sleb128 -6016
+ 41844 a2d4 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1088
+
+
+ 41845 a2d5 00 .byte 0x0
+ 41846 a2d6 00 .byte 0x0
+ 41847 a2d7 00 .byte 0x0
+ 41848 a2d8 31 .uleb128 0x31
+ 41849 a2d9 520E0000 .long 0xe52
+ 41850 a2dd 00000000 .quad .LBB2306
+ 41850 00000000
+ 41851 a2e5 00000000 .quad .LBE2306
+ 41851 00000000
+ 41852 a2ed 02 .byte 0x2
+ 41853 a2ee 9107 .value 0x791
+ 41854 a2f0 07A30000 .long 0xa307
+ 41855 a2f4 32 .uleb128 0x32
+ 41856 a2f5 6D0E0000 .long 0xe6d
+ 41857 a2f9 03 .byte 0x3
+ 41858 a2fa 91 .byte 0x91
+ 41859 a2fb F079 .sleb128 -784
+ 41860 a2fd 32 .uleb128 0x32
+ 41861 a2fe 630E0000 .long 0xe63
+ 41862 a302 03 .byte 0x3
+ 41863 a303 91 .byte 0x91
+ 41864 a304 807A .sleb128 -768
+ 41865 a306 00 .byte 0x0
+ 41866 a307 31 .uleb128 0x31
+ 41867 a308 D10B0000 .long 0xbd1
+ 41868 a30c 00000000 .quad .LBB2308
+ 41868 00000000
+ 41869 a314 00000000 .quad .LBE2308
+ 41869 00000000
+ 41870 a31c 02 .byte 0x2
+ 41871 a31d 9207 .value 0x792
+ 41872 a31f AFA70000 .long 0xa7af
+ 41873 a323 32 .uleb128 0x32
+ 41874 a324 EF0B0000 .long 0xbef
+ 41875 a328 03 .byte 0x3
+ 41876 a329 91 .byte 0x91
+ 41877 a32a 9C7A .sleb128 -740
+ 41878 a32c 32 .uleb128 0x32
+ 41879 a32d E30B0000 .long 0xbe3
+ 41880 a331 03 .byte 0x3
+ 41881 a332 91 .byte 0x91
+ 41882 a333 A07A .sleb128 -736
+ 41883 a335 33 .uleb128 0x33
+ 41884 a336 00000000 .quad .LBB2309
+ 41884 00000000
+ 41885 a33e 00000000 .quad .LBE2309
+ 41885 00000000
+ 41886 a346 34 .uleb128 0x34
+ 41887 a347 FB0B0000 .long 0xbfb
+ 41888 a34b 04 .byte 0x4
+ 41889 a34c 76 .byte 0x76
+ 41890 a34d A0BF7F .sleb128 -8288
+ 41891 a350 34 .uleb128 0x34
+ 41892 a351 070C0000 .long 0xc07
+ 41893 a355 04 .byte 0x4
+ 41894 a356 76 .byte 0x76
+ 41895 a357 90BF7F .sleb128 -8304
+
GAS LISTING /tmp/ccMa7HLZ.s page 1089
+
+
+ 41896 a35a 31 .uleb128 0x31
+ 41897 a35b 500C0000 .long 0xc50
+ 41898 a35f 00000000 .quad .LBB2310
+ 41898 00000000
+ 41899 a367 00000000 .quad .LBE2310
+ 41899 00000000
+ 41900 a36f 02 .byte 0x2
+ 41901 a370 9106 .value 0x691
+ 41902 a372 ADA30000 .long 0xa3ad
+ 41903 a376 32 .uleb128 0x32
+ 41904 a377 7A0C0000 .long 0xc7a
+ 41905 a37b 03 .byte 0x3
+ 41906 a37c 91 .byte 0x91
+ 41907 a37d B87A .sleb128 -712
+ 41908 a37f 32 .uleb128 0x32
+ 41909 a380 6E0C0000 .long 0xc6e
+ 41910 a384 03 .byte 0x3
+ 41911 a385 91 .byte 0x91
+ 41912 a386 BC7A .sleb128 -708
+ 41913 a388 32 .uleb128 0x32
+ 41914 a389 620C0000 .long 0xc62
+ 41915 a38d 03 .byte 0x3
+ 41916 a38e 91 .byte 0x91
+ 41917 a38f C07A .sleb128 -704
+ 41918 a391 33 .uleb128 0x33
+ 41919 a392 00000000 .quad .LBB2311
+ 41919 00000000
+ 41920 a39a 00000000 .quad .LBE2311
+ 41920 00000000
+ 41921 a3a2 34 .uleb128 0x34
+ 41922 a3a3 860C0000 .long 0xc86
+ 41923 a3a7 03 .byte 0x3
+ 41924 a3a8 91 .byte 0x91
+ 41925 a3a9 D051 .sleb128 -5936
+ 41926 a3ab 00 .byte 0x0
+ 41927 a3ac 00 .byte 0x0
+ 41928 a3ad 31 .uleb128 0x31
+ 41929 a3ae 910C0000 .long 0xc91
+ 41930 a3b2 00000000 .quad .LBB2312
+ 41930 00000000
+ 41931 a3ba 00000000 .quad .LBE2312
+ 41931 00000000
+ 41932 a3c2 02 .byte 0x2
+ 41933 a3c3 9206 .value 0x692
+ 41934 a3c5 1DA60000 .long 0xa61d
+ 41935 a3c9 32 .uleb128 0x32
+ 41936 a3ca A30C0000 .long 0xca3
+ 41937 a3ce 03 .byte 0x3
+ 41938 a3cf 91 .byte 0x91
+ 41939 a3d0 D07A .sleb128 -688
+ 41940 a3d2 35 .uleb128 0x35
+ 41941 a3d3 B00C0000 .long 0xcb0
+ 41942 a3d7 00000000 .quad .LBB2314
+ 41942 00000000
+ 41943 a3df 00000000 .quad .LBE2314
+ 41943 00000000
+ 41944 a3e7 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 1090
+
+
+ 41945 a3e8 7D03 .value 0x37d
+ 41946 a3ea 32 .uleb128 0x32
+ 41947 a3eb CE0C0000 .long 0xcce
+ 41948 a3ef 03 .byte 0x3
+ 41949 a3f0 91 .byte 0x91
+ 41950 a3f1 E87A .sleb128 -664
+ 41951 a3f3 32 .uleb128 0x32
+ 41952 a3f4 C20C0000 .long 0xcc2
+ 41953 a3f8 03 .byte 0x3
+ 41954 a3f9 91 .byte 0x91
+ 41955 a3fa F07A .sleb128 -656
+ 41956 a3fc 33 .uleb128 0x33
+ 41957 a3fd 00000000 .quad .LBB2315
+ 41957 00000000
+ 41958 a405 00000000 .quad .LBE2315
+ 41958 00000000
+ 41959 a40d 34 .uleb128 0x34
+ 41960 a40e DA0C0000 .long 0xcda
+ 41961 a412 03 .byte 0x3
+ 41962 a413 91 .byte 0x91
+ 41963 a414 C07B .sleb128 -576
+ 41964 a416 34 .uleb128 0x34
+ 41965 a417 E50C0000 .long 0xce5
+ 41966 a41b 03 .byte 0x3
+ 41967 a41c 91 .byte 0x91
+ 41968 a41d B07B .sleb128 -592
+ 41969 a41f 34 .uleb128 0x34
+ 41970 a420 F00C0000 .long 0xcf0
+ 41971 a424 03 .byte 0x3
+ 41972 a425 91 .byte 0x91
+ 41973 a426 A07B .sleb128 -608
+ 41974 a428 34 .uleb128 0x34
+ 41975 a429 FC0C0000 .long 0xcfc
+ 41976 a42d 03 .byte 0x3
+ 41977 a42e 91 .byte 0x91
+ 41978 a42f 907B .sleb128 -624
+ 41979 a431 34 .uleb128 0x34
+ 41980 a432 080D0000 .long 0xd08
+ 41981 a436 03 .byte 0x3
+ 41982 a437 91 .byte 0x91
+ 41983 a438 8C7B .sleb128 -628
+ 41984 a43a 31 .uleb128 0x31
+ 41985 a43b 1F0D0000 .long 0xd1f
+ 41986 a43f 00000000 .quad .LBB2316
+ 41986 00000000
+ 41987 a447 00000000 .quad .LBE2316
+ 41987 00000000
+ 41988 a44f 02 .byte 0x2
+ 41989 a450 5603 .value 0x356
+ 41990 a452 69A40000 .long 0xa469
+ 41991 a456 32 .uleb128 0x32
+ 41992 a457 3A0D0000 .long 0xd3a
+ 41993 a45b 03 .byte 0x3
+ 41994 a45c 91 .byte 0x91
+ 41995 a45d D07B .sleb128 -560
+ 41996 a45f 32 .uleb128 0x32
+ 41997 a460 300D0000 .long 0xd30
+
GAS LISTING /tmp/ccMa7HLZ.s page 1091
+
+
+ 41998 a464 03 .byte 0x3
+ 41999 a465 91 .byte 0x91
+ 42000 a466 E07B .sleb128 -544
+ 42001 a468 00 .byte 0x0
+ 42002 a469 31 .uleb128 0x31
+ 42003 a46a 450D0000 .long 0xd45
+ 42004 a46e 00000000 .quad .LBB2318
+ 42004 00000000
+ 42005 a476 00000000 .quad .LBE2318
+ 42005 00000000
+ 42006 a47e 02 .byte 0x2
+ 42007 a47f 5E03 .value 0x35e
+ 42008 a481 98A40000 .long 0xa498
+ 42009 a485 32 .uleb128 0x32
+ 42010 a486 620D0000 .long 0xd62
+ 42011 a48a 03 .byte 0x3
+ 42012 a48b 91 .byte 0x91
+ 42013 a48c F07B .sleb128 -528
+ 42014 a48e 32 .uleb128 0x32
+ 42015 a48f 570D0000 .long 0xd57
+ 42016 a493 03 .byte 0x3
+ 42017 a494 91 .byte 0x91
+ 42018 a495 807C .sleb128 -512
+ 42019 a497 00 .byte 0x0
+ 42020 a498 31 .uleb128 0x31
+ 42021 a499 6E0D0000 .long 0xd6e
+ 42022 a49d 00000000 .quad .LBB2320
+ 42022 00000000
+ 42023 a4a5 00000000 .quad .LBE2320
+ 42023 00000000
+ 42024 a4ad 02 .byte 0x2
+ 42025 a4ae 6403 .value 0x364
+ 42026 a4b0 FDA40000 .long 0xa4fd
+ 42027 a4b4 32 .uleb128 0x32
+ 42028 a4b5 8C0D0000 .long 0xd8c
+ 42029 a4b9 03 .byte 0x3
+ 42030 a4ba 91 .byte 0x91
+ 42031 a4bb 907C .sleb128 -496
+ 42032 a4bd 32 .uleb128 0x32
+ 42033 a4be 800D0000 .long 0xd80
+ 42034 a4c2 03 .byte 0x3
+ 42035 a4c3 91 .byte 0x91
+ 42036 a4c4 A07C .sleb128 -480
+ 42037 a4c6 33 .uleb128 0x33
+ 42038 a4c7 00000000 .quad .LBB2321
+ 42038 00000000
+ 42039 a4cf 00000000 .quad .LBE2321
+ 42039 00000000
+ 42040 a4d7 34 .uleb128 0x34
+ 42041 a4d8 980D0000 .long 0xd98
+ 42042 a4dc 03 .byte 0x3
+ 42043 a4dd 91 .byte 0x91
+ 42044 a4de 8052 .sleb128 -5888
+ 42045 a4e0 34 .uleb128 0x34
+ 42046 a4e1 A40D0000 .long 0xda4
+ 42047 a4e5 03 .byte 0x3
+ 42048 a4e6 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1092
+
+
+ 42049 a4e7 F051 .sleb128 -5904
+ 42050 a4e9 34 .uleb128 0x34
+ 42051 a4ea AF0D0000 .long 0xdaf
+ 42052 a4ee 03 .byte 0x3
+ 42053 a4ef 91 .byte 0x91
+ 42054 a4f0 E051 .sleb128 -5920
+ 42055 a4f2 34 .uleb128 0x34
+ 42056 a4f3 BB0D0000 .long 0xdbb
+ 42057 a4f7 03 .byte 0x3
+ 42058 a4f8 91 .byte 0x91
+ 42059 a4f9 BC7C .sleb128 -452
+ 42060 a4fb 00 .byte 0x0
+ 42061 a4fc 00 .byte 0x0
+ 42062 a4fd 31 .uleb128 0x31
+ 42063 a4fe C70D0000 .long 0xdc7
+ 42064 a502 00000000 .quad .LBB2322
+ 42064 00000000
+ 42065 a50a 00000000 .quad .LBE2322
+ 42065 00000000
+ 42066 a512 02 .byte 0x2
+ 42067 a513 6603 .value 0x366
+ 42068 a515 2CA50000 .long 0xa52c
+ 42069 a519 32 .uleb128 0x32
+ 42070 a51a E20D0000 .long 0xde2
+ 42071 a51e 03 .byte 0x3
+ 42072 a51f 91 .byte 0x91
+ 42073 a520 C07C .sleb128 -448
+ 42074 a522 32 .uleb128 0x32
+ 42075 a523 D80D0000 .long 0xdd8
+ 42076 a527 03 .byte 0x3
+ 42077 a528 91 .byte 0x91
+ 42078 a529 D07C .sleb128 -432
+ 42079 a52b 00 .byte 0x0
+ 42080 a52c 31 .uleb128 0x31
+ 42081 a52d 6E0D0000 .long 0xd6e
+ 42082 a531 00000000 .quad .LBB2324
+ 42082 00000000
+ 42083 a539 00000000 .quad .LBE2324
+ 42083 00000000
+ 42084 a541 02 .byte 0x2
+ 42085 a542 6803 .value 0x368
+ 42086 a544 91A50000 .long 0xa591
+ 42087 a548 32 .uleb128 0x32
+ 42088 a549 8C0D0000 .long 0xd8c
+ 42089 a54d 03 .byte 0x3
+ 42090 a54e 91 .byte 0x91
+ 42091 a54f E07C .sleb128 -416
+ 42092 a551 32 .uleb128 0x32
+ 42093 a552 800D0000 .long 0xd80
+ 42094 a556 03 .byte 0x3
+ 42095 a557 91 .byte 0x91
+ 42096 a558 F07C .sleb128 -400
+ 42097 a55a 33 .uleb128 0x33
+ 42098 a55b 00000000 .quad .LBB2325
+ 42098 00000000
+ 42099 a563 00000000 .quad .LBE2325
+ 42099 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1093
+
+
+ 42100 a56b 34 .uleb128 0x34
+ 42101 a56c 980D0000 .long 0xd98
+ 42102 a570 03 .byte 0x3
+ 42103 a571 91 .byte 0x91
+ 42104 a572 B052 .sleb128 -5840
+ 42105 a574 34 .uleb128 0x34
+ 42106 a575 A40D0000 .long 0xda4
+ 42107 a579 03 .byte 0x3
+ 42108 a57a 91 .byte 0x91
+ 42109 a57b A052 .sleb128 -5856
+ 42110 a57d 34 .uleb128 0x34
+ 42111 a57e AF0D0000 .long 0xdaf
+ 42112 a582 03 .byte 0x3
+ 42113 a583 91 .byte 0x91
+ 42114 a584 9052 .sleb128 -5872
+ 42115 a586 34 .uleb128 0x34
+ 42116 a587 BB0D0000 .long 0xdbb
+ 42117 a58b 03 .byte 0x3
+ 42118 a58c 91 .byte 0x91
+ 42119 a58d 8C7D .sleb128 -372
+ 42120 a58f 00 .byte 0x0
+ 42121 a590 00 .byte 0x0
+ 42122 a591 31 .uleb128 0x31
+ 42123 a592 C70D0000 .long 0xdc7
+ 42124 a596 00000000 .quad .LBB2326
+ 42124 00000000
+ 42125 a59e 00000000 .quad .LBE2326
+ 42125 00000000
+ 42126 a5a6 02 .byte 0x2
+ 42127 a5a7 6A03 .value 0x36a
+ 42128 a5a9 C0A50000 .long 0xa5c0
+ 42129 a5ad 32 .uleb128 0x32
+ 42130 a5ae E20D0000 .long 0xde2
+ 42131 a5b2 03 .byte 0x3
+ 42132 a5b3 91 .byte 0x91
+ 42133 a5b4 907D .sleb128 -368
+ 42134 a5b6 32 .uleb128 0x32
+ 42135 a5b7 D80D0000 .long 0xdd8
+ 42136 a5bb 03 .byte 0x3
+ 42137 a5bc 91 .byte 0x91
+ 42138 a5bd A07D .sleb128 -352
+ 42139 a5bf 00 .byte 0x0
+ 42140 a5c0 31 .uleb128 0x31
+ 42141 a5c1 ED0D0000 .long 0xded
+ 42142 a5c5 00000000 .quad .LBB2328
+ 42142 00000000
+ 42143 a5cd 00000000 .quad .LBE2328
+ 42143 00000000
+ 42144 a5d5 02 .byte 0x2
+ 42145 a5d6 6C03 .value 0x36c
+ 42146 a5d8 EFA50000 .long 0xa5ef
+ 42147 a5dc 32 .uleb128 0x32
+ 42148 a5dd 0A0E0000 .long 0xe0a
+ 42149 a5e1 03 .byte 0x3
+ 42150 a5e2 91 .byte 0x91
+ 42151 a5e3 B07D .sleb128 -336
+ 42152 a5e5 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 1094
+
+
+ 42153 a5e6 FF0D0000 .long 0xdff
+ 42154 a5ea 03 .byte 0x3
+ 42155 a5eb 91 .byte 0x91
+ 42156 a5ec C07D .sleb128 -320
+ 42157 a5ee 00 .byte 0x0
+ 42158 a5ef 35 .uleb128 0x35
+ 42159 a5f0 1F0D0000 .long 0xd1f
+ 42160 a5f4 00000000 .quad .LBB2330
+ 42160 00000000
+ 42161 a5fc 00000000 .quad .LBE2330
+ 42161 00000000
+ 42162 a604 02 .byte 0x2
+ 42163 a605 6E03 .value 0x36e
+ 42164 a607 32 .uleb128 0x32
+ 42165 a608 3A0D0000 .long 0xd3a
+ 42166 a60c 03 .byte 0x3
+ 42167 a60d 91 .byte 0x91
+ 42168 a60e D07D .sleb128 -304
+ 42169 a610 32 .uleb128 0x32
+ 42170 a611 300D0000 .long 0xd30
+ 42171 a615 03 .byte 0x3
+ 42172 a616 91 .byte 0x91
+ 42173 a617 E07D .sleb128 -288
+ 42174 a619 00 .byte 0x0
+ 42175 a61a 00 .byte 0x0
+ 42176 a61b 00 .byte 0x0
+ 42177 a61c 00 .byte 0x0
+ 42178 a61d 36 .uleb128 0x36
+ 42179 a61e 00000000 .quad .LBB2332
+ 42179 00000000
+ 42180 a626 00000000 .quad .LBE2332
+ 42180 00000000
+ 42181 a62e 3CA60000 .long 0xa63c
+ 42182 a632 34 .uleb128 0x34
+ 42183 a633 180C0000 .long 0xc18
+ 42184 a637 03 .byte 0x3
+ 42185 a638 91 .byte 0x91
+ 42186 a639 C051 .sleb128 -5952
+ 42187 a63b 00 .byte 0x0
+ 42188 a63c 31 .uleb128 0x31
+ 42189 a63d 160E0000 .long 0xe16
+ 42190 a641 00000000 .quad .LBB2333
+ 42190 00000000
+ 42191 a649 00000000 .quad .LBE2333
+ 42191 00000000
+ 42192 a651 02 .byte 0x2
+ 42193 a652 9406 .value 0x694
+ 42194 a654 E4A60000 .long 0xa6e4
+ 42195 a658 32 .uleb128 0x32
+ 42196 a659 280E0000 .long 0xe28
+ 42197 a65d 03 .byte 0x3
+ 42198 a65e 91 .byte 0x91
+ 42199 a65f F07D .sleb128 -272
+ 42200 a661 33 .uleb128 0x33
+ 42201 a662 00000000 .quad .LBB2334
+ 42201 00000000
+ 42202 a66a 00000000 .quad .LBE2334
+
GAS LISTING /tmp/ccMa7HLZ.s page 1095
+
+
+ 42202 00000000
+ 42203 a672 34 .uleb128 0x34
+ 42204 a673 340E0000 .long 0xe34
+ 42205 a677 09 .byte 0x9
+ 42206 a678 03 .byte 0x3
+ 42207 a679 00000000 .quad ShiftRowTable.6768
+ 42207 00000000
+ 42208 a681 35 .uleb128 0x35
+ 42209 a682 6E0D0000 .long 0xd6e
+ 42210 a686 00000000 .quad .LBB2335
+ 42210 00000000
+ 42211 a68e 00000000 .quad .LBE2335
+ 42211 00000000
+ 42212 a696 02 .byte 0x2
+ 42213 a697 9B02 .value 0x29b
+ 42214 a699 32 .uleb128 0x32
+ 42215 a69a 8C0D0000 .long 0xd8c
+ 42216 a69e 03 .byte 0x3
+ 42217 a69f 91 .byte 0x91
+ 42218 a6a0 807E .sleb128 -256
+ 42219 a6a2 32 .uleb128 0x32
+ 42220 a6a3 800D0000 .long 0xd80
+ 42221 a6a7 03 .byte 0x3
+ 42222 a6a8 91 .byte 0x91
+ 42223 a6a9 907E .sleb128 -240
+ 42224 a6ab 33 .uleb128 0x33
+ 42225 a6ac 00000000 .quad .LBB2336
+ 42225 00000000
+ 42226 a6b4 00000000 .quad .LBE2336
+ 42226 00000000
+ 42227 a6bc 34 .uleb128 0x34
+ 42228 a6bd 980D0000 .long 0xd98
+ 42229 a6c1 03 .byte 0x3
+ 42230 a6c2 91 .byte 0x91
+ 42231 a6c3 E052 .sleb128 -5792
+ 42232 a6c5 34 .uleb128 0x34
+ 42233 a6c6 A40D0000 .long 0xda4
+ 42234 a6ca 03 .byte 0x3
+ 42235 a6cb 91 .byte 0x91
+ 42236 a6cc D052 .sleb128 -5808
+ 42237 a6ce 34 .uleb128 0x34
+ 42238 a6cf AF0D0000 .long 0xdaf
+ 42239 a6d3 03 .byte 0x3
+ 42240 a6d4 91 .byte 0x91
+ 42241 a6d5 C052 .sleb128 -5824
+ 42242 a6d7 34 .uleb128 0x34
+ 42243 a6d8 BB0D0000 .long 0xdbb
+ 42244 a6dc 03 .byte 0x3
+ 42245 a6dd 91 .byte 0x91
+ 42246 a6de AC7E .sleb128 -212
+ 42247 a6e0 00 .byte 0x0
+ 42248 a6e1 00 .byte 0x0
+ 42249 a6e2 00 .byte 0x0
+ 42250 a6e3 00 .byte 0x0
+ 42251 a6e4 36 .uleb128 0x36
+ 42252 a6e5 00000000 .quad .LBB2337
+ 42252 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1096
+
+
+ 42253 a6ed 00000000 .quad .LBE2337
+ 42253 00000000
+ 42254 a6f5 03A70000 .long 0xa703
+ 42255 a6f9 34 .uleb128 0x34
+ 42256 a6fa 280C0000 .long 0xc28
+ 42257 a6fe 03 .byte 0x3
+ 42258 a6ff 91 .byte 0x91
+ 42259 a700 B051 .sleb128 -5968
+ 42260 a702 00 .byte 0x0
+ 42261 a703 31 .uleb128 0x31
+ 42262 a704 520E0000 .long 0xe52
+ 42263 a708 00000000 .quad .LBB2338
+ 42263 00000000
+ 42264 a710 00000000 .quad .LBE2338
+ 42264 00000000
+ 42265 a718 02 .byte 0x2
+ 42266 a719 9606 .value 0x696
+ 42267 a71b 32A70000 .long 0xa732
+ 42268 a71f 32 .uleb128 0x32
+ 42269 a720 6D0E0000 .long 0xe6d
+ 42270 a724 03 .byte 0x3
+ 42271 a725 91 .byte 0x91
+ 42272 a726 B07E .sleb128 -208
+ 42273 a728 32 .uleb128 0x32
+ 42274 a729 630E0000 .long 0xe63
+ 42275 a72d 03 .byte 0x3
+ 42276 a72e 91 .byte 0x91
+ 42277 a72f C07E .sleb128 -192
+ 42278 a731 00 .byte 0x0
+ 42279 a732 36 .uleb128 0x36
+ 42280 a733 00000000 .quad .LBB2340
+ 42280 00000000
+ 42281 a73b 00000000 .quad .LBE2340
+ 42281 00000000
+ 42282 a743 51A70000 .long 0xa751
+ 42283 a747 34 .uleb128 0x34
+ 42284 a748 380C0000 .long 0xc38
+ 42285 a74c 03 .byte 0x3
+ 42286 a74d 91 .byte 0x91
+ 42287 a74e A051 .sleb128 -5984
+ 42288 a750 00 .byte 0x0
+ 42289 a751 31 .uleb128 0x31
+ 42290 a752 780E0000 .long 0xe78
+ 42291 a756 00000000 .quad .LBB2341
+ 42291 00000000
+ 42292 a75e 00000000 .quad .LBE2341
+ 42292 00000000
+ 42293 a766 02 .byte 0x2
+ 42294 a767 9806 .value 0x698
+ 42295 a769 92A70000 .long 0xa792
+ 42296 a76d 32 .uleb128 0x32
+ 42297 a76e 8A0E0000 .long 0xe8a
+ 42298 a772 03 .byte 0x3
+ 42299 a773 91 .byte 0x91
+ 42300 a774 D07E .sleb128 -176
+ 42301 a776 33 .uleb128 0x33
+ 42302 a777 00000000 .quad .LBB2342
+
GAS LISTING /tmp/ccMa7HLZ.s page 1097
+
+
+ 42302 00000000
+ 42303 a77f 00000000 .quad .LBE2342
+ 42303 00000000
+ 42304 a787 34 .uleb128 0x34
+ 42305 a788 960E0000 .long 0xe96
+ 42306 a78c 03 .byte 0x3
+ 42307 a78d 91 .byte 0x91
+ 42308 a78e F052 .sleb128 -5776
+ 42309 a790 00 .byte 0x0
+ 42310 a791 00 .byte 0x0
+ 42311 a792 33 .uleb128 0x33
+ 42312 a793 00000000 .quad .LBB2343
+ 42312 00000000
+ 42313 a79b 00000000 .quad .LBE2343
+ 42313 00000000
+ 42314 a7a3 34 .uleb128 0x34
+ 42315 a7a4 440C0000 .long 0xc44
+ 42316 a7a8 03 .byte 0x3
+ 42317 a7a9 91 .byte 0x91
+ 42318 a7aa 9051 .sleb128 -6000
+ 42319 a7ac 00 .byte 0x0
+ 42320 a7ad 00 .byte 0x0
+ 42321 a7ae 00 .byte 0x0
+ 42322 a7af 31 .uleb128 0x31
+ 42323 a7b0 A30E0000 .long 0xea3
+ 42324 a7b4 00000000 .quad .LBB2344
+ 42324 00000000
+ 42325 a7bc 00000000 .quad .LBE2344
+ 42325 00000000
+ 42326 a7c4 02 .byte 0x2
+ 42327 a7c5 9207 .value 0x792
+ 42328 a7c7 B0A80000 .long 0xa8b0
+ 42329 a7cb 32 .uleb128 0x32
+ 42330 a7cc B50E0000 .long 0xeb5
+ 42331 a7d0 03 .byte 0x3
+ 42332 a7d1 91 .byte 0x91
+ 42333 a7d2 E07E .sleb128 -160
+ 42334 a7d4 33 .uleb128 0x33
+ 42335 a7d5 00000000 .quad .LBB2345
+ 42335 00000000
+ 42336 a7dd 00000000 .quad .LBE2345
+ 42336 00000000
+ 42337 a7e5 34 .uleb128 0x34
+ 42338 a7e6 C10E0000 .long 0xec1
+ 42339 a7ea 04 .byte 0x4
+ 42340 a7eb 76 .byte 0x76
+ 42341 a7ec C0BF7F .sleb128 -8256
+ 42342 a7ef 31 .uleb128 0x31
+ 42343 a7f0 CE0E0000 .long 0xece
+ 42344 a7f4 00000000 .quad .LBB2346
+ 42344 00000000
+ 42345 a7fc 00000000 .quad .LBE2346
+ 42345 00000000
+ 42346 a804 02 .byte 0x2
+ 42347 a805 1F06 .value 0x61f
+ 42348 a807 30A80000 .long 0xa830
+ 42349 a80b 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 1098
+
+
+ 42350 a80c E00E0000 .long 0xee0
+ 42351 a810 03 .byte 0x3
+ 42352 a811 91 .byte 0x91
+ 42353 a812 F07E .sleb128 -144
+ 42354 a814 33 .uleb128 0x33
+ 42355 a815 00000000 .quad .LBB2347
+ 42355 00000000
+ 42356 a81d 00000000 .quad .LBE2347
+ 42356 00000000
+ 42357 a825 34 .uleb128 0x34
+ 42358 a826 EC0E0000 .long 0xeec
+ 42359 a82a 03 .byte 0x3
+ 42360 a82b 91 .byte 0x91
+ 42361 a82c 8053 .sleb128 -5760
+ 42362 a82e 00 .byte 0x0
+ 42363 a82f 00 .byte 0x0
+ 42364 a830 31 .uleb128 0x31
+ 42365 a831 CE0E0000 .long 0xece
+ 42366 a835 00000000 .quad .LBB2348
+ 42366 00000000
+ 42367 a83d 00000000 .quad .LBE2348
+ 42367 00000000
+ 42368 a845 02 .byte 0x2
+ 42369 a846 2006 .value 0x620
+ 42370 a848 71A80000 .long 0xa871
+ 42371 a84c 32 .uleb128 0x32
+ 42372 a84d E00E0000 .long 0xee0
+ 42373 a851 03 .byte 0x3
+ 42374 a852 91 .byte 0x91
+ 42375 a853 807F .sleb128 -128
+ 42376 a855 33 .uleb128 0x33
+ 42377 a856 00000000 .quad .LBB2349
+ 42377 00000000
+ 42378 a85e 00000000 .quad .LBE2349
+ 42378 00000000
+ 42379 a866 34 .uleb128 0x34
+ 42380 a867 EC0E0000 .long 0xeec
+ 42381 a86b 03 .byte 0x3
+ 42382 a86c 91 .byte 0x91
+ 42383 a86d 9053 .sleb128 -5744
+ 42384 a86f 00 .byte 0x0
+ 42385 a870 00 .byte 0x0
+ 42386 a871 35 .uleb128 0x35
+ 42387 a872 CE0E0000 .long 0xece
+ 42388 a876 00000000 .quad .LBB2350
+ 42388 00000000
+ 42389 a87e 00000000 .quad .LBE2350
+ 42389 00000000
+ 42390 a886 02 .byte 0x2
+ 42391 a887 2106 .value 0x621
+ 42392 a889 32 .uleb128 0x32
+ 42393 a88a E00E0000 .long 0xee0
+ 42394 a88e 03 .byte 0x3
+ 42395 a88f 91 .byte 0x91
+ 42396 a890 907F .sleb128 -112
+ 42397 a892 33 .uleb128 0x33
+ 42398 a893 00000000 .quad .LBB2351
+
GAS LISTING /tmp/ccMa7HLZ.s page 1099
+
+
+ 42398 00000000
+ 42399 a89b 00000000 .quad .LBE2351
+ 42399 00000000
+ 42400 a8a3 34 .uleb128 0x34
+ 42401 a8a4 EC0E0000 .long 0xeec
+ 42402 a8a8 03 .byte 0x3
+ 42403 a8a9 91 .byte 0x91
+ 42404 a8aa A053 .sleb128 -5728
+ 42405 a8ac 00 .byte 0x0
+ 42406 a8ad 00 .byte 0x0
+ 42407 a8ae 00 .byte 0x0
+ 42408 a8af 00 .byte 0x0
+ 42409 a8b0 35 .uleb128 0x35
+ 42410 a8b1 520E0000 .long 0xe52
+ 42411 a8b5 00000000 .quad .LBB2352
+ 42411 00000000
+ 42412 a8bd 00000000 .quad .LBE2352
+ 42412 00000000
+ 42413 a8c5 02 .byte 0x2
+ 42414 a8c6 9207 .value 0x792
+ 42415 a8c8 32 .uleb128 0x32
+ 42416 a8c9 6D0E0000 .long 0xe6d
+ 42417 a8cd 03 .byte 0x3
+ 42418 a8ce 91 .byte 0x91
+ 42419 a8cf A07F .sleb128 -96
+ 42420 a8d1 32 .uleb128 0x32
+ 42421 a8d2 630E0000 .long 0xe63
+ 42422 a8d6 03 .byte 0x3
+ 42423 a8d7 91 .byte 0x91
+ 42424 a8d8 B07F .sleb128 -80
+ 42425 a8da 00 .byte 0x0
+ 42426 a8db 00 .byte 0x0
+ 42427 a8dc 25 .uleb128 0x25
+ 42428 a8dd 00000000 .long .LASF355
+ 42429 a8e1 02 .byte 0x2
+ 42430 a8e2 4B04 .value 0x44b
+ 42431 a8e4 01 .byte 0x1
+ 42432 a8e5 B1010000 .long 0x1b1
+ 42433 a8e9 03 .byte 0x3
+ 42434 a8ea 6EA90000 .long 0xa96e
+ 42435 a8ee 26 .uleb128 0x26
+ 42436 a8ef 00000000 .long .LASF66
+ 42437 a8f3 02 .byte 0x2
+ 42438 a8f4 4B04 .value 0x44b
+ 42439 a8f6 B1010000 .long 0x1b1
+ 42440 a8fa 28 .uleb128 0x28
+ 42441 a8fb 723100 .string "r1"
+ 42442 a8fe 02 .byte 0x2
+ 42443 a8ff 5004 .value 0x450
+ 42444 a901 B1010000 .long 0x1b1
+ 42445 a905 28 .uleb128 0x28
+ 42446 a906 723200 .string "r2"
+ 42447 a909 02 .byte 0x2
+ 42448 a90a 5004 .value 0x450
+ 42449 a90c B1010000 .long 0x1b1
+ 42450 a910 28 .uleb128 0x28
+ 42451 a911 723300 .string "r3"
+
GAS LISTING /tmp/ccMa7HLZ.s page 1100
+
+
+ 42452 a914 02 .byte 0x2
+ 42453 a915 5004 .value 0x450
+ 42454 a917 B1010000 .long 0x1b1
+ 42455 a91b 28 .uleb128 0x28
+ 42456 a91c 663200 .string "f2"
+ 42457 a91f 02 .byte 0x2
+ 42458 a920 5004 .value 0x450
+ 42459 a922 B1010000 .long 0x1b1
+ 42460 a926 28 .uleb128 0x28
+ 42461 a927 663400 .string "f4"
+ 42462 a92a 02 .byte 0x2
+ 42463 a92b 5004 .value 0x450
+ 42464 a92d B1010000 .long 0x1b1
+ 42465 a931 28 .uleb128 0x28
+ 42466 a932 663800 .string "f8"
+ 42467 a935 02 .byte 0x2
+ 42468 a936 5004 .value 0x450
+ 42469 a938 B1010000 .long 0x1b1
+ 42470 a93c 2A .uleb128 0x2a
+ 42471 a93d 28 .uleb128 0x28
+ 42472 a93e 66753200 .string "fu2"
+ 42473 a942 02 .byte 0x2
+ 42474 a943 6304 .value 0x463
+ 42475 a945 27050000 .long 0x527
+ 42476 a949 28 .uleb128 0x28
+ 42477 a94a 66753400 .string "fu4"
+ 42478 a94e 02 .byte 0x2
+ 42479 a94f 6304 .value 0x463
+ 42480 a951 27050000 .long 0x527
+ 42481 a955 28 .uleb128 0x28
+ 42482 a956 66753800 .string "fu8"
+ 42483 a95a 02 .byte 0x2
+ 42484 a95b 6304 .value 0x463
+ 42485 a95d 27050000 .long 0x527
+ 42486 a961 28 .uleb128 0x28
+ 42487 a962 697800 .string "ix"
+ 42488 a965 02 .byte 0x2
+ 42489 a966 6404 .value 0x464
+ 42490 a968 6D000000 .long 0x6d
+ 42491 a96c 00 .byte 0x0
+ 42492 a96d 00 .byte 0x0
+ 42493 a96e 25 .uleb128 0x25
+ 42494 a96f 00000000 .long .LASF356
+ 42495 a973 02 .byte 0x2
+ 42496 a974 F203 .value 0x3f2
+ 42497 a976 01 .byte 0x1
+ 42498 a977 FC030000 .long 0x3fc
+ 42499 a97b 03 .byte 0x3
+ 42500 a97c 8BA90000 .long 0xa98b
+ 42501 a980 2B .uleb128 0x2b
+ 42502 a981 6200 .string "b"
+ 42503 a983 02 .byte 0x2
+ 42504 a984 F203 .value 0x3f2
+ 42505 a986 FC030000 .long 0x3fc
+ 42506 a98a 00 .byte 0x0
+ 42507 a98b 25 .uleb128 0x25
+ 42508 a98c 00000000 .long .LASF357
+
GAS LISTING /tmp/ccMa7HLZ.s page 1101
+
+
+ 42509 a990 02 .byte 0x2
+ 42510 a991 E703 .value 0x3e7
+ 42511 a993 01 .byte 0x1
+ 42512 a994 FC030000 .long 0x3fc
+ 42513 a998 03 .byte 0x3
+ 42514 a999 A8A90000 .long 0xa9a8
+ 42515 a99d 2B .uleb128 0x2b
+ 42516 a99e 7800 .string "x"
+ 42517 a9a0 02 .byte 0x2
+ 42518 a9a1 E703 .value 0x3e7
+ 42519 a9a3 49000000 .long 0x49
+ 42520 a9a7 00 .byte 0x0
+ 42521 a9a8 25 .uleb128 0x25
+ 42522 a9a9 00000000 .long .LASF358
+ 42523 a9ad 02 .byte 0x2
+ 42524 a9ae FD03 .value 0x3fd
+ 42525 a9b0 01 .byte 0x1
+ 42526 a9b1 FC030000 .long 0x3fc
+ 42527 a9b5 03 .byte 0x3
+ 42528 a9b6 C5A90000 .long 0xa9c5
+ 42529 a9ba 2B .uleb128 0x2b
+ 42530 a9bb 6200 .string "b"
+ 42531 a9bd 02 .byte 0x2
+ 42532 a9be FD03 .value 0x3fd
+ 42533 a9c0 FC030000 .long 0x3fc
+ 42534 a9c4 00 .byte 0x0
+ 42535 a9c5 25 .uleb128 0x25
+ 42536 a9c6 00000000 .long .LASF359
+ 42537 a9ca 02 .byte 0x2
+ 42538 a9cb 0804 .value 0x408
+ 42539 a9cd 01 .byte 0x1
+ 42540 a9ce FC030000 .long 0x3fc
+ 42541 a9d2 03 .byte 0x3
+ 42542 a9d3 E2A90000 .long 0xa9e2
+ 42543 a9d7 2B .uleb128 0x2b
+ 42544 a9d8 6200 .string "b"
+ 42545 a9da 02 .byte 0x2
+ 42546 a9db 0804 .value 0x408
+ 42547 a9dd FC030000 .long 0x3fc
+ 42548 a9e1 00 .byte 0x0
+ 42549 a9e2 2D .uleb128 0x2d
+ 42550 a9e3 00000000 .long .LASF360
+ 42551 a9e7 02 .byte 0x2
+ 42552 a9e8 9E07 .value 0x79e
+ 42553 a9ea 01 .byte 0x1
+ 42554 a9eb 00000000 .quad .LFB566
+ 42554 00000000
+ 42555 a9f3 00000000 .quad .LFE566
+ 42555 00000000
+ 42556 a9fb 00000000 .long .LLST4
+ 42557 a9ff 30AF0000 .long 0xaf30
+ 42558 aa03 2F .uleb128 0x2f
+ 42559 aa04 7200 .string "r"
+ 42560 aa06 02 .byte 0x2
+ 42561 aa07 9E07 .value 0x79e
+ 42562 aa09 89480000 .long 0x4889
+ 42563 aa0d 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1102
+
+
+ 42564 aa0e 91 .byte 0x91
+ 42565 aa0f 987A .sleb128 -744
+ 42566 aa11 2F .uleb128 0x2f
+ 42567 aa12 647200 .string "dr"
+ 42568 aa15 02 .byte 0x2
+ 42569 aa16 9E07 .value 0x79e
+ 42570 aa18 140D0000 .long 0xd14
+ 42571 aa1c 03 .byte 0x3
+ 42572 aa1d 91 .byte 0x91
+ 42573 aa1e 907A .sleb128 -752
+ 42574 aa20 2F .uleb128 0x2f
+ 42575 aa21 4E7200 .string "Nr"
+ 42576 aa24 02 .byte 0x2
+ 42577 aa25 9E07 .value 0x79e
+ 42578 aa27 6D000000 .long 0x6d
+ 42579 aa2b 03 .byte 0x3
+ 42580 aa2c 91 .byte 0x91
+ 42581 aa2d 8C7A .sleb128 -756
+ 42582 aa2f 37 .uleb128 0x37
+ 42583 aa30 697800 .string "ix"
+ 42584 aa33 02 .byte 0x2
+ 42585 aa34 A007 .value 0x7a0
+ 42586 aa36 6D000000 .long 0x6d
+ 42587 aa3a 03 .byte 0x3
+ 42588 aa3b 91 .byte 0x91
+ 42589 aa3c E87B .sleb128 -536
+ 42590 aa3e 37 .uleb128 0x37
+ 42591 aa3f 6A7800 .string "jx"
+ 42592 aa42 02 .byte 0x2
+ 42593 aa43 A007 .value 0x7a0
+ 42594 aa45 6D000000 .long 0x6d
+ 42595 aa49 03 .byte 0x3
+ 42596 aa4a 91 .byte 0x91
+ 42597 aa4b EC7B .sleb128 -532
+ 42598 aa4d 35 .uleb128 0x35
+ 42599 aa4e DCA80000 .long 0xa8dc
+ 42600 aa52 00000000 .quad .LBB2397
+ 42600 00000000
+ 42601 aa5a 00000000 .quad .LBE2397
+ 42601 00000000
+ 42602 aa62 02 .byte 0x2
+ 42603 aa63 A607 .value 0x7a6
+ 42604 aa65 32 .uleb128 0x32
+ 42605 aa66 EEA80000 .long 0xa8ee
+ 42606 aa6a 03 .byte 0x3
+ 42607 aa6b 91 .byte 0x91
+ 42608 aa6c F07B .sleb128 -528
+ 42609 aa6e 33 .uleb128 0x33
+ 42610 aa6f 00000000 .quad .LBB2398
+ 42610 00000000
+ 42611 aa77 00000000 .quad .LBE2398
+ 42611 00000000
+ 42612 aa7f 34 .uleb128 0x34
+ 42613 aa80 FAA80000 .long 0xa8fa
+ 42614 aa84 03 .byte 0x3
+ 42615 aa85 76 .byte 0x76
+ 42616 aa86 807A .sleb128 -768
+
GAS LISTING /tmp/ccMa7HLZ.s page 1103
+
+
+ 42617 aa88 34 .uleb128 0x34
+ 42618 aa89 05A90000 .long 0xa905
+ 42619 aa8d 03 .byte 0x3
+ 42620 aa8e 76 .byte 0x76
+ 42621 aa8f F079 .sleb128 -784
+ 42622 aa91 34 .uleb128 0x34
+ 42623 aa92 10A90000 .long 0xa910
+ 42624 aa96 03 .byte 0x3
+ 42625 aa97 76 .byte 0x76
+ 42626 aa98 E079 .sleb128 -800
+ 42627 aa9a 34 .uleb128 0x34
+ 42628 aa9b 1BA90000 .long 0xa91b
+ 42629 aa9f 03 .byte 0x3
+ 42630 aaa0 76 .byte 0x76
+ 42631 aaa1 D079 .sleb128 -816
+ 42632 aaa3 34 .uleb128 0x34
+ 42633 aaa4 26A90000 .long 0xa926
+ 42634 aaa8 03 .byte 0x3
+ 42635 aaa9 76 .byte 0x76
+ 42636 aaaa C079 .sleb128 -832
+ 42637 aaac 34 .uleb128 0x34
+ 42638 aaad 31A90000 .long 0xa931
+ 42639 aab1 03 .byte 0x3
+ 42640 aab2 76 .byte 0x76
+ 42641 aab3 B079 .sleb128 -848
+ 42642 aab5 31 .uleb128 0x31
+ 42643 aab6 160E0000 .long 0xe16
+ 42644 aaba 00000000 .quad .LBB2399
+ 42644 00000000
+ 42645 aac2 00000000 .quad .LBE2399
+ 42645 00000000
+ 42646 aaca 02 .byte 0x2
+ 42647 aacb 5204 .value 0x452
+ 42648 aacd 5DAB0000 .long 0xab5d
+ 42649 aad1 32 .uleb128 0x32
+ 42650 aad2 280E0000 .long 0xe28
+ 42651 aad6 03 .byte 0x3
+ 42652 aad7 91 .byte 0x91
+ 42653 aad8 907C .sleb128 -496
+ 42654 aada 33 .uleb128 0x33
+ 42655 aadb 00000000 .quad .LBB2400
+ 42655 00000000
+ 42656 aae3 00000000 .quad .LBE2400
+ 42656 00000000
+ 42657 aaeb 34 .uleb128 0x34
+ 42658 aaec 340E0000 .long 0xe34
+ 42659 aaf0 09 .byte 0x9
+ 42660 aaf1 03 .byte 0x3
+ 42661 aaf2 00000000 .quad ShiftRowTable.6768
+ 42661 00000000
+ 42662 aafa 35 .uleb128 0x35
+ 42663 aafb 6E0D0000 .long 0xd6e
+ 42664 aaff 00000000 .quad .LBB2401
+ 42664 00000000
+ 42665 ab07 00000000 .quad .LBE2401
+ 42665 00000000
+ 42666 ab0f 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 1104
+
+
+ 42667 ab10 9B02 .value 0x29b
+ 42668 ab12 32 .uleb128 0x32
+ 42669 ab13 8C0D0000 .long 0xd8c
+ 42670 ab17 03 .byte 0x3
+ 42671 ab18 91 .byte 0x91
+ 42672 ab19 A07C .sleb128 -480
+ 42673 ab1b 32 .uleb128 0x32
+ 42674 ab1c 800D0000 .long 0xd80
+ 42675 ab20 03 .byte 0x3
+ 42676 ab21 91 .byte 0x91
+ 42677 ab22 B07C .sleb128 -464
+ 42678 ab24 33 .uleb128 0x33
+ 42679 ab25 00000000 .quad .LBB2402
+ 42679 00000000
+ 42680 ab2d 00000000 .quad .LBE2402
+ 42680 00000000
+ 42681 ab35 34 .uleb128 0x34
+ 42682 ab36 980D0000 .long 0xd98
+ 42683 ab3a 03 .byte 0x3
+ 42684 ab3b 91 .byte 0x91
+ 42685 ab3c F07A .sleb128 -656
+ 42686 ab3e 34 .uleb128 0x34
+ 42687 ab3f A40D0000 .long 0xda4
+ 42688 ab43 03 .byte 0x3
+ 42689 ab44 91 .byte 0x91
+ 42690 ab45 E07A .sleb128 -672
+ 42691 ab47 34 .uleb128 0x34
+ 42692 ab48 AF0D0000 .long 0xdaf
+ 42693 ab4c 03 .byte 0x3
+ 42694 ab4d 91 .byte 0x91
+ 42695 ab4e D07A .sleb128 -688
+ 42696 ab50 34 .uleb128 0x34
+ 42697 ab51 BB0D0000 .long 0xdbb
+ 42698 ab55 03 .byte 0x3
+ 42699 ab56 91 .byte 0x91
+ 42700 ab57 CC7C .sleb128 -436
+ 42701 ab59 00 .byte 0x0
+ 42702 ab5a 00 .byte 0x0
+ 42703 ab5b 00 .byte 0x0
+ 42704 ab5c 00 .byte 0x0
+ 42705 ab5d 31 .uleb128 0x31
+ 42706 ab5e 160E0000 .long 0xe16
+ 42707 ab62 00000000 .quad .LBB2403
+ 42707 00000000
+ 42708 ab6a 00000000 .quad .LBE2403
+ 42708 00000000
+ 42709 ab72 02 .byte 0x2
+ 42710 ab73 5304 .value 0x453
+ 42711 ab75 05AC0000 .long 0xac05
+ 42712 ab79 32 .uleb128 0x32
+ 42713 ab7a 280E0000 .long 0xe28
+ 42714 ab7e 03 .byte 0x3
+ 42715 ab7f 91 .byte 0x91
+ 42716 ab80 D07C .sleb128 -432
+ 42717 ab82 33 .uleb128 0x33
+ 42718 ab83 00000000 .quad .LBB2404
+ 42718 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1105
+
+
+ 42719 ab8b 00000000 .quad .LBE2404
+ 42719 00000000
+ 42720 ab93 34 .uleb128 0x34
+ 42721 ab94 340E0000 .long 0xe34
+ 42722 ab98 09 .byte 0x9
+ 42723 ab99 03 .byte 0x3
+ 42724 ab9a 00000000 .quad ShiftRowTable.6768
+ 42724 00000000
+ 42725 aba2 35 .uleb128 0x35
+ 42726 aba3 6E0D0000 .long 0xd6e
+ 42727 aba7 00000000 .quad .LBB2405
+ 42727 00000000
+ 42728 abaf 00000000 .quad .LBE2405
+ 42728 00000000
+ 42729 abb7 02 .byte 0x2
+ 42730 abb8 9B02 .value 0x29b
+ 42731 abba 32 .uleb128 0x32
+ 42732 abbb 8C0D0000 .long 0xd8c
+ 42733 abbf 03 .byte 0x3
+ 42734 abc0 91 .byte 0x91
+ 42735 abc1 E07C .sleb128 -416
+ 42736 abc3 32 .uleb128 0x32
+ 42737 abc4 800D0000 .long 0xd80
+ 42738 abc8 03 .byte 0x3
+ 42739 abc9 91 .byte 0x91
+ 42740 abca F07C .sleb128 -400
+ 42741 abcc 33 .uleb128 0x33
+ 42742 abcd 00000000 .quad .LBB2406
+ 42742 00000000
+ 42743 abd5 00000000 .quad .LBE2406
+ 42743 00000000
+ 42744 abdd 34 .uleb128 0x34
+ 42745 abde 980D0000 .long 0xd98
+ 42746 abe2 03 .byte 0x3
+ 42747 abe3 91 .byte 0x91
+ 42748 abe4 A07B .sleb128 -608
+ 42749 abe6 34 .uleb128 0x34
+ 42750 abe7 A40D0000 .long 0xda4
+ 42751 abeb 03 .byte 0x3
+ 42752 abec 91 .byte 0x91
+ 42753 abed 907B .sleb128 -624
+ 42754 abef 34 .uleb128 0x34
+ 42755 abf0 AF0D0000 .long 0xdaf
+ 42756 abf4 03 .byte 0x3
+ 42757 abf5 91 .byte 0x91
+ 42758 abf6 807B .sleb128 -640
+ 42759 abf8 34 .uleb128 0x34
+ 42760 abf9 BB0D0000 .long 0xdbb
+ 42761 abfd 03 .byte 0x3
+ 42762 abfe 91 .byte 0x91
+ 42763 abff 8C7D .sleb128 -372
+ 42764 ac01 00 .byte 0x0
+ 42765 ac02 00 .byte 0x0
+ 42766 ac03 00 .byte 0x0
+ 42767 ac04 00 .byte 0x0
+ 42768 ac05 31 .uleb128 0x31
+ 42769 ac06 160E0000 .long 0xe16
+
GAS LISTING /tmp/ccMa7HLZ.s page 1106
+
+
+ 42770 ac0a 00000000 .quad .LBB2407
+ 42770 00000000
+ 42771 ac12 00000000 .quad .LBE2407
+ 42771 00000000
+ 42772 ac1a 02 .byte 0x2
+ 42773 ac1b 5404 .value 0x454
+ 42774 ac1d ADAC0000 .long 0xacad
+ 42775 ac21 32 .uleb128 0x32
+ 42776 ac22 280E0000 .long 0xe28
+ 42777 ac26 03 .byte 0x3
+ 42778 ac27 91 .byte 0x91
+ 42779 ac28 907D .sleb128 -368
+ 42780 ac2a 33 .uleb128 0x33
+ 42781 ac2b 00000000 .quad .LBB2408
+ 42781 00000000
+ 42782 ac33 00000000 .quad .LBE2408
+ 42782 00000000
+ 42783 ac3b 34 .uleb128 0x34
+ 42784 ac3c 340E0000 .long 0xe34
+ 42785 ac40 09 .byte 0x9
+ 42786 ac41 03 .byte 0x3
+ 42787 ac42 00000000 .quad ShiftRowTable.6768
+ 42787 00000000
+ 42788 ac4a 35 .uleb128 0x35
+ 42789 ac4b 6E0D0000 .long 0xd6e
+ 42790 ac4f 00000000 .quad .LBB2409
+ 42790 00000000
+ 42791 ac57 00000000 .quad .LBE2409
+ 42791 00000000
+ 42792 ac5f 02 .byte 0x2
+ 42793 ac60 9B02 .value 0x29b
+ 42794 ac62 32 .uleb128 0x32
+ 42795 ac63 8C0D0000 .long 0xd8c
+ 42796 ac67 03 .byte 0x3
+ 42797 ac68 91 .byte 0x91
+ 42798 ac69 A07D .sleb128 -352
+ 42799 ac6b 32 .uleb128 0x32
+ 42800 ac6c 800D0000 .long 0xd80
+ 42801 ac70 03 .byte 0x3
+ 42802 ac71 91 .byte 0x91
+ 42803 ac72 B07D .sleb128 -336
+ 42804 ac74 33 .uleb128 0x33
+ 42805 ac75 00000000 .quad .LBB2410
+ 42805 00000000
+ 42806 ac7d 00000000 .quad .LBE2410
+ 42806 00000000
+ 42807 ac85 34 .uleb128 0x34
+ 42808 ac86 980D0000 .long 0xd98
+ 42809 ac8a 03 .byte 0x3
+ 42810 ac8b 91 .byte 0x91
+ 42811 ac8c D07B .sleb128 -560
+ 42812 ac8e 34 .uleb128 0x34
+ 42813 ac8f A40D0000 .long 0xda4
+ 42814 ac93 03 .byte 0x3
+ 42815 ac94 91 .byte 0x91
+ 42816 ac95 C07B .sleb128 -576
+ 42817 ac97 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 1107
+
+
+ 42818 ac98 AF0D0000 .long 0xdaf
+ 42819 ac9c 03 .byte 0x3
+ 42820 ac9d 91 .byte 0x91
+ 42821 ac9e B07B .sleb128 -592
+ 42822 aca0 34 .uleb128 0x34
+ 42823 aca1 BB0D0000 .long 0xdbb
+ 42824 aca5 03 .byte 0x3
+ 42825 aca6 91 .byte 0x91
+ 42826 aca7 CC7D .sleb128 -308
+ 42827 aca9 00 .byte 0x0
+ 42828 acaa 00 .byte 0x0
+ 42829 acab 00 .byte 0x0
+ 42830 acac 00 .byte 0x0
+ 42831 acad 31 .uleb128 0x31
+ 42832 acae 520E0000 .long 0xe52
+ 42833 acb2 00000000 .quad .LBB2411
+ 42833 00000000
+ 42834 acba 00000000 .quad .LBE2411
+ 42834 00000000
+ 42835 acc2 02 .byte 0x2
+ 42836 acc3 5604 .value 0x456
+ 42837 acc5 DCAC0000 .long 0xacdc
+ 42838 acc9 32 .uleb128 0x32
+ 42839 acca 6D0E0000 .long 0xe6d
+ 42840 acce 03 .byte 0x3
+ 42841 accf 91 .byte 0x91
+ 42842 acd0 D07D .sleb128 -304
+ 42843 acd2 32 .uleb128 0x32
+ 42844 acd3 630E0000 .long 0xe63
+ 42845 acd7 03 .byte 0x3
+ 42846 acd8 91 .byte 0x91
+ 42847 acd9 E07D .sleb128 -288
+ 42848 acdb 00 .byte 0x0
+ 42849 acdc 31 .uleb128 0x31
+ 42850 acdd 520E0000 .long 0xe52
+ 42851 ace1 00000000 .quad .LBB2413
+ 42851 00000000
+ 42852 ace9 00000000 .quad .LBE2413
+ 42852 00000000
+ 42853 acf1 02 .byte 0x2
+ 42854 acf2 5704 .value 0x457
+ 42855 acf4 0BAD0000 .long 0xad0b
+ 42856 acf8 32 .uleb128 0x32
+ 42857 acf9 6D0E0000 .long 0xe6d
+ 42858 acfd 03 .byte 0x3
+ 42859 acfe 91 .byte 0x91
+ 42860 acff F07D .sleb128 -272
+ 42861 ad01 32 .uleb128 0x32
+ 42862 ad02 630E0000 .long 0xe63
+ 42863 ad06 03 .byte 0x3
+ 42864 ad07 91 .byte 0x91
+ 42865 ad08 807E .sleb128 -256
+ 42866 ad0a 00 .byte 0x0
+ 42867 ad0b 31 .uleb128 0x31
+ 42868 ad0c 520E0000 .long 0xe52
+ 42869 ad10 00000000 .quad .LBB2415
+ 42869 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1108
+
+
+ 42870 ad18 00000000 .quad .LBE2415
+ 42870 00000000
+ 42871 ad20 02 .byte 0x2
+ 42872 ad21 5804 .value 0x458
+ 42873 ad23 3AAD0000 .long 0xad3a
+ 42874 ad27 32 .uleb128 0x32
+ 42875 ad28 6D0E0000 .long 0xe6d
+ 42876 ad2c 03 .byte 0x3
+ 42877 ad2d 91 .byte 0x91
+ 42878 ad2e 907E .sleb128 -240
+ 42879 ad30 32 .uleb128 0x32
+ 42880 ad31 630E0000 .long 0xe63
+ 42881 ad35 03 .byte 0x3
+ 42882 ad36 91 .byte 0x91
+ 42883 ad37 A07E .sleb128 -224
+ 42884 ad39 00 .byte 0x0
+ 42885 ad3a 31 .uleb128 0x31
+ 42886 ad3b 520E0000 .long 0xe52
+ 42887 ad3f 00000000 .quad .LBB2417
+ 42887 00000000
+ 42888 ad47 00000000 .quad .LBE2417
+ 42888 00000000
+ 42889 ad4f 02 .byte 0x2
+ 42890 ad50 5904 .value 0x459
+ 42891 ad52 69AD0000 .long 0xad69
+ 42892 ad56 32 .uleb128 0x32
+ 42893 ad57 6D0E0000 .long 0xe6d
+ 42894 ad5b 03 .byte 0x3
+ 42895 ad5c 91 .byte 0x91
+ 42896 ad5d B07E .sleb128 -208
+ 42897 ad5f 32 .uleb128 0x32
+ 42898 ad60 630E0000 .long 0xe63
+ 42899 ad64 03 .byte 0x3
+ 42900 ad65 91 .byte 0x91
+ 42901 ad66 C07E .sleb128 -192
+ 42902 ad68 00 .byte 0x0
+ 42903 ad69 31 .uleb128 0x31
+ 42904 ad6a 520E0000 .long 0xe52
+ 42905 ad6e 00000000 .quad .LBB2419
+ 42905 00000000
+ 42906 ad76 00000000 .quad .LBE2419
+ 42906 00000000
+ 42907 ad7e 02 .byte 0x2
+ 42908 ad7f 5A04 .value 0x45a
+ 42909 ad81 98AD0000 .long 0xad98
+ 42910 ad85 32 .uleb128 0x32
+ 42911 ad86 6D0E0000 .long 0xe6d
+ 42912 ad8a 03 .byte 0x3
+ 42913 ad8b 91 .byte 0x91
+ 42914 ad8c D07E .sleb128 -176
+ 42915 ad8e 32 .uleb128 0x32
+ 42916 ad8f 630E0000 .long 0xe63
+ 42917 ad93 03 .byte 0x3
+ 42918 ad94 91 .byte 0x91
+ 42919 ad95 E07E .sleb128 -160
+ 42920 ad97 00 .byte 0x0
+ 42921 ad98 36 .uleb128 0x36
+
GAS LISTING /tmp/ccMa7HLZ.s page 1109
+
+
+ 42922 ad99 00000000 .quad .LBB2421
+ 42922 00000000
+ 42923 ada1 00000000 .quad .LBE2421
+ 42923 00000000
+ 42924 ada9 A6AE0000 .long 0xaea6
+ 42925 adad 34 .uleb128 0x34
+ 42926 adae 3DA90000 .long 0xa93d
+ 42927 adb2 03 .byte 0x3
+ 42928 adb3 91 .byte 0x91
+ 42929 adb4 C07A .sleb128 -704
+ 42930 adb6 34 .uleb128 0x34
+ 42931 adb7 49A90000 .long 0xa949
+ 42932 adbb 03 .byte 0x3
+ 42933 adbc 91 .byte 0x91
+ 42934 adbd B07A .sleb128 -720
+ 42935 adbf 34 .uleb128 0x34
+ 42936 adc0 55A90000 .long 0xa955
+ 42937 adc4 03 .byte 0x3
+ 42938 adc5 91 .byte 0x91
+ 42939 adc6 A07A .sleb128 -736
+ 42940 adc8 34 .uleb128 0x34
+ 42941 adc9 61A90000 .long 0xa961
+ 42942 adcd 03 .byte 0x3
+ 42943 adce 91 .byte 0x91
+ 42944 adcf 8C7C .sleb128 -500
+ 42945 add1 31 .uleb128 0x31
+ 42946 add2 6EA90000 .long 0xa96e
+ 42947 add6 00000000 .quad .LBB2422
+ 42947 00000000
+ 42948 adde 00000000 .quad .LBE2422
+ 42948 00000000
+ 42949 ade6 02 .byte 0x2
+ 42950 ade7 6C04 .value 0x46c
+ 42951 ade9 19AE0000 .long 0xae19
+ 42952 aded 32 .uleb128 0x32
+ 42953 adee 80A90000 .long 0xa980
+ 42954 adf2 03 .byte 0x3
+ 42955 adf3 91 .byte 0x91
+ 42956 adf4 FA7E .sleb128 -134
+ 42957 adf6 35 .uleb128 0x35
+ 42958 adf7 8BA90000 .long 0xa98b
+ 42959 adfb 00000000 .quad .LBB2424
+ 42959 00000000
+ 42960 ae03 00000000 .quad .LBE2424
+ 42960 00000000
+ 42961 ae0b 02 .byte 0x2
+ 42962 ae0c F403 .value 0x3f4
+ 42963 ae0e 32 .uleb128 0x32
+ 42964 ae0f 9DA90000 .long 0xa99d
+ 42965 ae13 03 .byte 0x3
+ 42966 ae14 91 .byte 0x91
+ 42967 ae15 FB7E .sleb128 -133
+ 42968 ae17 00 .byte 0x0
+ 42969 ae18 00 .byte 0x0
+ 42970 ae19 31 .uleb128 0x31
+ 42971 ae1a A8A90000 .long 0xa9a8
+ 42972 ae1e 00000000 .quad .LBB2426
+
GAS LISTING /tmp/ccMa7HLZ.s page 1110
+
+
+ 42972 00000000
+ 42973 ae26 00000000 .quad .LBE2426
+ 42973 00000000
+ 42974 ae2e 02 .byte 0x2
+ 42975 ae2f 6D04 .value 0x46d
+ 42976 ae31 61AE0000 .long 0xae61
+ 42977 ae35 32 .uleb128 0x32
+ 42978 ae36 BAA90000 .long 0xa9ba
+ 42979 ae3a 03 .byte 0x3
+ 42980 ae3b 91 .byte 0x91
+ 42981 ae3c FC7E .sleb128 -132
+ 42982 ae3e 35 .uleb128 0x35
+ 42983 ae3f 8BA90000 .long 0xa98b
+ 42984 ae43 00000000 .quad .LBB2428
+ 42984 00000000
+ 42985 ae4b 00000000 .quad .LBE2428
+ 42985 00000000
+ 42986 ae53 02 .byte 0x2
+ 42987 ae54 FF03 .value 0x3ff
+ 42988 ae56 32 .uleb128 0x32
+ 42989 ae57 9DA90000 .long 0xa99d
+ 42990 ae5b 03 .byte 0x3
+ 42991 ae5c 91 .byte 0x91
+ 42992 ae5d FD7E .sleb128 -131
+ 42993 ae5f 00 .byte 0x0
+ 42994 ae60 00 .byte 0x0
+ 42995 ae61 35 .uleb128 0x35
+ 42996 ae62 C5A90000 .long 0xa9c5
+ 42997 ae66 00000000 .quad .LBB2430
+ 42997 00000000
+ 42998 ae6e 00000000 .quad .LBE2430
+ 42998 00000000
+ 42999 ae76 02 .byte 0x2
+ 43000 ae77 6E04 .value 0x46e
+ 43001 ae79 32 .uleb128 0x32
+ 43002 ae7a D7A90000 .long 0xa9d7
+ 43003 ae7e 03 .byte 0x3
+ 43004 ae7f 91 .byte 0x91
+ 43005 ae80 FE7E .sleb128 -130
+ 43006 ae82 35 .uleb128 0x35
+ 43007 ae83 8BA90000 .long 0xa98b
+ 43008 ae87 00000000 .quad .LBB2432
+ 43008 00000000
+ 43009 ae8f 00000000 .quad .LBE2432
+ 43009 00000000
+ 43010 ae97 02 .byte 0x2
+ 43011 ae98 0A04 .value 0x40a
+ 43012 ae9a 32 .uleb128 0x32
+ 43013 ae9b 9DA90000 .long 0xa99d
+ 43014 ae9f 03 .byte 0x3
+ 43015 aea0 91 .byte 0x91
+ 43016 aea1 FF7E .sleb128 -129
+ 43017 aea3 00 .byte 0x0
+ 43018 aea4 00 .byte 0x0
+ 43019 aea5 00 .byte 0x0
+ 43020 aea6 31 .uleb128 0x31
+ 43021 aea7 520E0000 .long 0xe52
+
GAS LISTING /tmp/ccMa7HLZ.s page 1111
+
+
+ 43022 aeab 00000000 .quad .LBB2434
+ 43022 00000000
+ 43023 aeb3 00000000 .quad .LBE2434
+ 43023 00000000
+ 43024 aebb 02 .byte 0x2
+ 43025 aebc 7604 .value 0x476
+ 43026 aebe D5AE0000 .long 0xaed5
+ 43027 aec2 32 .uleb128 0x32
+ 43028 aec3 6D0E0000 .long 0xe6d
+ 43029 aec7 03 .byte 0x3
+ 43030 aec8 91 .byte 0x91
+ 43031 aec9 807F .sleb128 -128
+ 43032 aecb 32 .uleb128 0x32
+ 43033 aecc 630E0000 .long 0xe63
+ 43034 aed0 03 .byte 0x3
+ 43035 aed1 91 .byte 0x91
+ 43036 aed2 907F .sleb128 -112
+ 43037 aed4 00 .byte 0x0
+ 43038 aed5 31 .uleb128 0x31
+ 43039 aed6 520E0000 .long 0xe52
+ 43040 aeda 00000000 .quad .LBB2436
+ 43040 00000000
+ 43041 aee2 00000000 .quad .LBE2436
+ 43041 00000000
+ 43042 aeea 02 .byte 0x2
+ 43043 aeeb 7704 .value 0x477
+ 43044 aeed 04AF0000 .long 0xaf04
+ 43045 aef1 32 .uleb128 0x32
+ 43046 aef2 6D0E0000 .long 0xe6d
+ 43047 aef6 03 .byte 0x3
+ 43048 aef7 91 .byte 0x91
+ 43049 aef8 A07F .sleb128 -96
+ 43050 aefa 32 .uleb128 0x32
+ 43051 aefb 630E0000 .long 0xe63
+ 43052 aeff 03 .byte 0x3
+ 43053 af00 91 .byte 0x91
+ 43054 af01 B07F .sleb128 -80
+ 43055 af03 00 .byte 0x0
+ 43056 af04 35 .uleb128 0x35
+ 43057 af05 520E0000 .long 0xe52
+ 43058 af09 00000000 .quad .LBB2438
+ 43058 00000000
+ 43059 af11 00000000 .quad .LBE2438
+ 43059 00000000
+ 43060 af19 02 .byte 0x2
+ 43061 af1a 7804 .value 0x478
+ 43062 af1c 32 .uleb128 0x32
+ 43063 af1d 6D0E0000 .long 0xe6d
+ 43064 af21 02 .byte 0x2
+ 43065 af22 91 .byte 0x91
+ 43066 af23 40 .sleb128 -64
+ 43067 af24 32 .uleb128 0x32
+ 43068 af25 630E0000 .long 0xe63
+ 43069 af29 02 .byte 0x2
+ 43070 af2a 91 .byte 0x91
+ 43071 af2b 50 .sleb128 -48
+ 43072 af2c 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1112
+
+
+ 43073 af2d 00 .byte 0x0
+ 43074 af2e 00 .byte 0x0
+ 43075 af2f 00 .byte 0x0
+ 43076 af30 2D .uleb128 0x2d
+ 43077 af31 00000000 .long .LASF361
+ 43078 af35 02 .byte 0x2
+ 43079 af36 AC07 .value 0x7ac
+ 43080 af38 01 .byte 0x1
+ 43081 af39 00000000 .quad .LFB567
+ 43081 00000000
+ 43082 af41 00000000 .quad .LFE567
+ 43082 00000000
+ 43083 af49 00000000 .long .LLST5
+ 43084 af4d 6DAF0000 .long 0xaf6d
+ 43085 af51 2F .uleb128 0x2f
+ 43086 af52 7700 .string "w"
+ 43087 af54 02 .byte 0x2
+ 43088 af55 AC07 .value 0x7ac
+ 43089 af57 89480000 .long 0x4889
+ 43090 af5b 02 .byte 0x2
+ 43091 af5c 91 .byte 0x91
+ 43092 af5d 68 .sleb128 -24
+ 43093 af5e 2F .uleb128 0x2f
+ 43094 af5f 6B7700 .string "kw"
+ 43095 af62 02 .byte 0x2
+ 43096 af63 AC07 .value 0x7ac
+ 43097 af65 140D0000 .long 0xd14
+ 43098 af69 02 .byte 0x2
+ 43099 af6a 91 .byte 0x91
+ 43100 af6b 60 .sleb128 -32
+ 43101 af6c 00 .byte 0x0
+ 43102 af6d 2D .uleb128 0x2d
+ 43103 af6e 00000000 .long .LASF362
+ 43104 af72 02 .byte 0x2
+ 43105 af73 B307 .value 0x7b3
+ 43106 af75 01 .byte 0x1
+ 43107 af76 00000000 .quad .LFB568
+ 43107 00000000
+ 43108 af7e 00000000 .quad .LFE568
+ 43108 00000000
+ 43109 af86 00000000 .long .LLST6
+ 43110 af8a AAAF0000 .long 0xafaa
+ 43111 af8e 2F .uleb128 0x2f
+ 43112 af8f 7700 .string "w"
+ 43113 af91 02 .byte 0x2
+ 43114 af92 B307 .value 0x7b3
+ 43115 af94 89480000 .long 0x4889
+ 43116 af98 02 .byte 0x2
+ 43117 af99 91 .byte 0x91
+ 43118 af9a 68 .sleb128 -24
+ 43119 af9b 2F .uleb128 0x2f
+ 43120 af9c 6B7700 .string "kw"
+ 43121 af9f 02 .byte 0x2
+ 43122 afa0 B307 .value 0x7b3
+ 43123 afa2 140D0000 .long 0xd14
+ 43124 afa6 02 .byte 0x2
+ 43125 afa7 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1113
+
+
+ 43126 afa8 60 .sleb128 -32
+ 43127 afa9 00 .byte 0x0
+ 43128 afaa 2D .uleb128 0x2d
+ 43129 afab 00000000 .long .LASF363
+ 43130 afaf 02 .byte 0x2
+ 43131 afb0 BA07 .value 0x7ba
+ 43132 afb2 01 .byte 0x1
+ 43133 afb3 00000000 .quad .LFB569
+ 43133 00000000
+ 43134 afbb 00000000 .quad .LFE569
+ 43134 00000000
+ 43135 afc3 00000000 .long .LLST7
+ 43136 afc7 E7AF0000 .long 0xafe7
+ 43137 afcb 2F .uleb128 0x2f
+ 43138 afcc 7700 .string "w"
+ 43139 afce 02 .byte 0x2
+ 43140 afcf BA07 .value 0x7ba
+ 43141 afd1 89480000 .long 0x4889
+ 43142 afd5 02 .byte 0x2
+ 43143 afd6 91 .byte 0x91
+ 43144 afd7 68 .sleb128 -24
+ 43145 afd8 2F .uleb128 0x2f
+ 43146 afd9 6B7700 .string "kw"
+ 43147 afdc 02 .byte 0x2
+ 43148 afdd BA07 .value 0x7ba
+ 43149 afdf 140D0000 .long 0xd14
+ 43150 afe3 02 .byte 0x2
+ 43151 afe4 91 .byte 0x91
+ 43152 afe5 60 .sleb128 -32
+ 43153 afe6 00 .byte 0x0
+ 43154 afe7 25 .uleb128 0x25
+ 43155 afe8 00000000 .long .LASF364
+ 43156 afec 02 .byte 0x2
+ 43157 afed C807 .value 0x7c8
+ 43158 afef 01 .byte 0x1
+ 43159 aff0 B1010000 .long 0x1b1
+ 43160 aff4 03 .byte 0x3
+ 43161 aff5 3EB00000 .long 0xb03e
+ 43162 aff9 26 .uleb128 0x26
+ 43163 affa 00000000 .long .LASF66
+ 43164 affe 02 .byte 0x2
+ 43165 afff C807 .value 0x7c8
+ 43166 b001 B1010000 .long 0x1b1
+ 43167 b005 26 .uleb128 0x26
+ 43168 b006 00000000 .long .LASF64
+ 43169 b00a 02 .byte 0x2
+ 43170 b00b C807 .value 0x7c8
+ 43171 b00d 1A0D0000 .long 0xd1a
+ 43172 b011 29 .uleb128 0x29
+ 43173 b012 21B00000 .long 0xb021
+ 43174 b016 28 .uleb128 0x28
+ 43175 b017 7600 .string "v"
+ 43176 b019 02 .byte 0x2
+ 43177 b01a CA07 .value 0x7ca
+ 43178 b01c 27050000 .long 0x527
+ 43179 b020 00 .byte 0x0
+ 43180 b021 29 .uleb128 0x29
+
GAS LISTING /tmp/ccMa7HLZ.s page 1114
+
+
+ 43181 b022 31B00000 .long 0xb031
+ 43182 b026 28 .uleb128 0x28
+ 43183 b027 7600 .string "v"
+ 43184 b029 02 .byte 0x2
+ 43185 b02a CC07 .value 0x7cc
+ 43186 b02c 27050000 .long 0x527
+ 43187 b030 00 .byte 0x0
+ 43188 b031 2A .uleb128 0x2a
+ 43189 b032 28 .uleb128 0x28
+ 43190 b033 7600 .string "v"
+ 43191 b035 02 .byte 0x2
+ 43192 b036 D007 .value 0x7d0
+ 43193 b038 27050000 .long 0x527
+ 43194 b03c 00 .byte 0x0
+ 43195 b03d 00 .byte 0x0
+ 43196 b03e 25 .uleb128 0x25
+ 43197 b03f 00000000 .long .LASF365
+ 43198 b043 02 .byte 0x2
+ 43199 b044 2102 .value 0x221
+ 43200 b046 01 .byte 0x1
+ 43201 b047 B1010000 .long 0x1b1
+ 43202 b04b 03 .byte 0x3
+ 43203 b04c 69B00000 .long 0xb069
+ 43204 b050 26 .uleb128 0x26
+ 43205 b051 00000000 .long .LASF66
+ 43206 b055 02 .byte 0x2
+ 43207 b056 2102 .value 0x221
+ 43208 b058 B1010000 .long 0x1b1
+ 43209 b05c 26 .uleb128 0x26
+ 43210 b05d 00000000 .long .LASF366
+ 43211 b061 02 .byte 0x2
+ 43212 b062 2102 .value 0x221
+ 43213 b064 B1010000 .long 0x1b1
+ 43214 b068 00 .byte 0x0
+ 43215 b069 25 .uleb128 0x25
+ 43216 b06a 00000000 .long .LASF367
+ 43217 b06e 02 .byte 0x2
+ 43218 b06f DC07 .value 0x7dc
+ 43219 b071 01 .byte 0x1
+ 43220 b072 B1010000 .long 0x1b1
+ 43221 b076 03 .byte 0x3
+ 43222 b077 08B10000 .long 0xb108
+ 43223 b07b 26 .uleb128 0x26
+ 43224 b07c 00000000 .long .LASF66
+ 43225 b080 02 .byte 0x2
+ 43226 b081 DC07 .value 0x7dc
+ 43227 b083 B1010000 .long 0x1b1
+ 43228 b087 26 .uleb128 0x26
+ 43229 b088 00000000 .long .LASF64
+ 43230 b08c 02 .byte 0x2
+ 43231 b08d DD07 .value 0x7dd
+ 43232 b08f 1A0D0000 .long 0xd1a
+ 43233 b093 27 .uleb128 0x27
+ 43234 b094 00000000 .long .LASF368
+ 43235 b098 02 .byte 0x2
+ 43236 b099 E007 .value 0x7e0
+ 43237 b09b B1010000 .long 0x1b1
+
GAS LISTING /tmp/ccMa7HLZ.s page 1115
+
+
+ 43238 b09f 27 .uleb128 0x27
+ 43239 b0a0 00000000 .long .LASF369
+ 43240 b0a4 02 .byte 0x2
+ 43241 b0a5 E107 .value 0x7e1
+ 43242 b0a7 B1010000 .long 0x1b1
+ 43243 b0ab 29 .uleb128 0x29
+ 43244 b0ac BBB00000 .long 0xb0bb
+ 43245 b0b0 28 .uleb128 0x28
+ 43246 b0b1 7600 .string "v"
+ 43247 b0b3 02 .byte 0x2
+ 43248 b0b4 E607 .value 0x7e6
+ 43249 b0b6 27050000 .long 0x527
+ 43250 b0ba 00 .byte 0x0
+ 43251 b0bb 29 .uleb128 0x29
+ 43252 b0bc CBB00000 .long 0xb0cb
+ 43253 b0c0 28 .uleb128 0x28
+ 43254 b0c1 7600 .string "v"
+ 43255 b0c3 02 .byte 0x2
+ 43256 b0c4 EF07 .value 0x7ef
+ 43257 b0c6 27050000 .long 0x527
+ 43258 b0ca 00 .byte 0x0
+ 43259 b0cb 29 .uleb128 0x29
+ 43260 b0cc DBB00000 .long 0xb0db
+ 43261 b0d0 28 .uleb128 0x28
+ 43262 b0d1 7600 .string "v"
+ 43263 b0d3 02 .byte 0x2
+ 43264 b0d4 F307 .value 0x7f3
+ 43265 b0d6 27050000 .long 0x527
+ 43266 b0da 00 .byte 0x0
+ 43267 b0db 29 .uleb128 0x29
+ 43268 b0dc EBB00000 .long 0xb0eb
+ 43269 b0e0 28 .uleb128 0x28
+ 43270 b0e1 7600 .string "v"
+ 43271 b0e3 02 .byte 0x2
+ 43272 b0e4 F807 .value 0x7f8
+ 43273 b0e6 27050000 .long 0x527
+ 43274 b0ea 00 .byte 0x0
+ 43275 b0eb 29 .uleb128 0x29
+ 43276 b0ec FBB00000 .long 0xb0fb
+ 43277 b0f0 28 .uleb128 0x28
+ 43278 b0f1 7600 .string "v"
+ 43279 b0f3 02 .byte 0x2
+ 43280 b0f4 FC07 .value 0x7fc
+ 43281 b0f6 27050000 .long 0x527
+ 43282 b0fa 00 .byte 0x0
+ 43283 b0fb 2A .uleb128 0x2a
+ 43284 b0fc 28 .uleb128 0x28
+ 43285 b0fd 7600 .string "v"
+ 43286 b0ff 02 .byte 0x2
+ 43287 b100 FD07 .value 0x7fd
+ 43288 b102 27050000 .long 0x527
+ 43289 b106 00 .byte 0x0
+ 43290 b107 00 .byte 0x0
+ 43291 b108 25 .uleb128 0x25
+ 43292 b109 00000000 .long .LASF370
+ 43293 b10d 02 .byte 0x2
+ 43294 b10e 3E02 .value 0x23e
+
GAS LISTING /tmp/ccMa7HLZ.s page 1116
+
+
+ 43295 b110 01 .byte 0x1
+ 43296 b111 B1010000 .long 0x1b1
+ 43297 b115 03 .byte 0x3
+ 43298 b116 44B10000 .long 0xb144
+ 43299 b11a 26 .uleb128 0x26
+ 43300 b11b 00000000 .long .LASF66
+ 43301 b11f 02 .byte 0x2
+ 43302 b120 3E02 .value 0x23e
+ 43303 b122 B1010000 .long 0x1b1
+ 43304 b126 2C .uleb128 0x2c
+ 43305 b127 00000000 .long .LASF336
+ 43306 b12b 02 .byte 0x2
+ 43307 b12c 4102 .value 0x241
+ 43308 b12e 1A0D0000 .long 0xd1a
+ 43309 b132 10 .byte 0x10
+ 43310 b133 00 .byte 0x0
+ 43311 b134 05 .byte 0x5
+ 43312 b135 0A .byte 0xa
+ 43313 b136 0F .byte 0xf
+ 43314 b137 04 .byte 0x4
+ 43315 b138 09 .byte 0x9
+ 43316 b139 0E .byte 0xe
+ 43317 b13a 03 .byte 0x3
+ 43318 b13b 08 .byte 0x8
+ 43319 b13c 0D .byte 0xd
+ 43320 b13d 02 .byte 0x2
+ 43321 b13e 07 .byte 0x7
+ 43322 b13f 0C .byte 0xc
+ 43323 b140 01 .byte 0x1
+ 43324 b141 06 .byte 0x6
+ 43325 b142 0B .byte 0xb
+ 43326 b143 00 .byte 0x0
+ 43327 b144 25 .uleb128 0x25
+ 43328 b145 00000000 .long .LASF371
+ 43329 b149 02 .byte 0x2
+ 43330 b14a 1304 .value 0x413
+ 43331 b14c 01 .byte 0x1
+ 43332 b14d B1010000 .long 0x1b1
+ 43333 b151 03 .byte 0x3
+ 43334 b152 A8B10000 .long 0xb1a8
+ 43335 b156 26 .uleb128 0x26
+ 43336 b157 00000000 .long .LASF66
+ 43337 b15b 02 .byte 0x2
+ 43338 b15c 1304 .value 0x413
+ 43339 b15e B1010000 .long 0x1b1
+ 43340 b162 28 .uleb128 0x28
+ 43341 b163 633000 .string "c0"
+ 43342 b166 02 .byte 0x2
+ 43343 b167 1504 .value 0x415
+ 43344 b169 B1010000 .long 0x1b1
+ 43345 b16d 28 .uleb128 0x28
+ 43346 b16e 633100 .string "c1"
+ 43347 b171 02 .byte 0x2
+ 43348 b172 1504 .value 0x415
+ 43349 b174 B1010000 .long 0x1b1
+ 43350 b178 28 .uleb128 0x28
+ 43351 b179 633200 .string "c2"
+
GAS LISTING /tmp/ccMa7HLZ.s page 1117
+
+
+ 43352 b17c 02 .byte 0x2
+ 43353 b17d 1504 .value 0x415
+ 43354 b17f B1010000 .long 0x1b1
+ 43355 b183 28 .uleb128 0x28
+ 43356 b184 633300 .string "c3"
+ 43357 b187 02 .byte 0x2
+ 43358 b188 1504 .value 0x415
+ 43359 b18a B1010000 .long 0x1b1
+ 43360 b18e 2A .uleb128 0x2a
+ 43361 b18f 28 .uleb128 0x28
+ 43362 b190 746D7000 .string "tmp"
+ 43363 b194 02 .byte 0x2
+ 43364 b195 2104 .value 0x421
+ 43365 b197 27050000 .long 0x527
+ 43366 b19b 28 .uleb128 0x28
+ 43367 b19c 697800 .string "ix"
+ 43368 b19f 02 .byte 0x2
+ 43369 b1a0 2204 .value 0x422
+ 43370 b1a2 6D000000 .long 0x6d
+ 43371 b1a6 00 .byte 0x0
+ 43372 b1a7 00 .byte 0x0
+ 43373 b1a8 25 .uleb128 0x25
+ 43374 b1a9 00000000 .long .LASF372
+ 43375 b1ad 02 .byte 0x2
+ 43376 b1ae 0808 .value 0x808
+ 43377 b1b0 01 .byte 0x1
+ 43378 b1b1 B1010000 .long 0x1b1
+ 43379 b1b5 03 .byte 0x3
+ 43380 b1b6 1FB20000 .long 0xb21f
+ 43381 b1ba 26 .uleb128 0x26
+ 43382 b1bb 00000000 .long .LASF66
+ 43383 b1bf 02 .byte 0x2
+ 43384 b1c0 0808 .value 0x808
+ 43385 b1c2 B1010000 .long 0x1b1
+ 43386 b1c6 26 .uleb128 0x26
+ 43387 b1c7 00000000 .long .LASF64
+ 43388 b1cb 02 .byte 0x2
+ 43389 b1cc 0808 .value 0x808
+ 43390 b1ce B1010000 .long 0x1b1
+ 43391 b1d2 29 .uleb128 0x29
+ 43392 b1d3 E2B10000 .long 0xb1e2
+ 43393 b1d7 28 .uleb128 0x28
+ 43394 b1d8 7600 .string "v"
+ 43395 b1da 02 .byte 0x2
+ 43396 b1db 0A08 .value 0x80a
+ 43397 b1dd 27050000 .long 0x527
+ 43398 b1e1 00 .byte 0x0
+ 43399 b1e2 29 .uleb128 0x29
+ 43400 b1e3 F2B10000 .long 0xb1f2
+ 43401 b1e7 28 .uleb128 0x28
+ 43402 b1e8 7600 .string "v"
+ 43403 b1ea 02 .byte 0x2
+ 43404 b1eb 1108 .value 0x811
+ 43405 b1ed 27050000 .long 0x527
+ 43406 b1f1 00 .byte 0x0
+ 43407 b1f2 29 .uleb128 0x29
+ 43408 b1f3 02B20000 .long 0xb202
+
GAS LISTING /tmp/ccMa7HLZ.s page 1118
+
+
+ 43409 b1f7 28 .uleb128 0x28
+ 43410 b1f8 7600 .string "v"
+ 43411 b1fa 02 .byte 0x2
+ 43412 b1fb 1508 .value 0x815
+ 43413 b1fd 27050000 .long 0x527
+ 43414 b201 00 .byte 0x0
+ 43415 b202 29 .uleb128 0x29
+ 43416 b203 12B20000 .long 0xb212
+ 43417 b207 28 .uleb128 0x28
+ 43418 b208 7600 .string "v"
+ 43419 b20a 02 .byte 0x2
+ 43420 b20b 1908 .value 0x819
+ 43421 b20d 27050000 .long 0x527
+ 43422 b211 00 .byte 0x0
+ 43423 b212 2A .uleb128 0x2a
+ 43424 b213 28 .uleb128 0x28
+ 43425 b214 7600 .string "v"
+ 43426 b216 02 .byte 0x2
+ 43427 b217 1A08 .value 0x81a
+ 43428 b219 27050000 .long 0x527
+ 43429 b21d 00 .byte 0x0
+ 43430 b21e 00 .byte 0x0
+ 43431 b21f 38 .uleb128 0x38
+ 43432 b220 00000000 .long .LASF374
+ 43433 b224 02 .byte 0x2
+ 43434 b225 2C08 .value 0x82c
+ 43435 b227 01 .byte 0x1
+ 43436 b228 B1010000 .long 0x1b1
+ 43437 b22c 00000000 .quad .LFB573
+ 43437 00000000
+ 43438 b234 00000000 .quad .LFE573
+ 43438 00000000
+ 43439 b23c 00000000 .long .LLST8
+ 43440 b240 8CBF0000 .long 0xbf8c
+ 43441 b244 2E .uleb128 0x2e
+ 43442 b245 00000000 .long .LASF66
+ 43443 b249 02 .byte 0x2
+ 43444 b24a 2C08 .value 0x82c
+ 43445 b24c B1010000 .long 0x1b1
+ 43446 b250 03 .byte 0x3
+ 43447 b251 91 .byte 0x91
+ 43448 b252 906D .sleb128 -2416
+ 43449 b254 2F .uleb128 0x2f
+ 43450 b255 6B657900 .string "key"
+ 43451 b259 02 .byte 0x2
+ 43452 b25a 2C08 .value 0x82c
+ 43453 b25c 140D0000 .long 0xd14
+ 43454 b260 03 .byte 0x3
+ 43455 b261 91 .byte 0x91
+ 43456 b262 886D .sleb128 -2424
+ 43457 b264 2F .uleb128 0x2f
+ 43458 b265 4E7200 .string "Nr"
+ 43459 b268 02 .byte 0x2
+ 43460 b269 2D08 .value 0x82d
+ 43461 b26b 6D000000 .long 0x6d
+ 43462 b26f 03 .byte 0x3
+ 43463 b270 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1119
+
+
+ 43464 b271 846D .sleb128 -2428
+ 43465 b273 37 .uleb128 0x37
+ 43466 b274 697800 .string "ix"
+ 43467 b277 02 .byte 0x2
+ 43468 b278 2F08 .value 0x82f
+ 43469 b27a 6D000000 .long 0x6d
+ 43470 b27e 03 .byte 0x3
+ 43471 b27f 91 .byte 0x91
+ 43472 b280 CC72 .sleb128 -1716
+ 43473 b282 31 .uleb128 0x31
+ 43474 b283 E7AF0000 .long 0xafe7
+ 43475 b287 00000000 .quad .LBB2547
+ 43475 00000000
+ 43476 b28f 00000000 .quad .LBE2547
+ 43476 00000000
+ 43477 b297 02 .byte 0x2
+ 43478 b298 3108 .value 0x831
+ 43479 b29a 64B30000 .long 0xb364
+ 43480 b29e 32 .uleb128 0x32
+ 43481 b29f 05B00000 .long 0xb005
+ 43482 b2a3 03 .byte 0x3
+ 43483 b2a4 91 .byte 0x91
+ 43484 b2a5 D072 .sleb128 -1712
+ 43485 b2a7 32 .uleb128 0x32
+ 43486 b2a8 F9AF0000 .long 0xaff9
+ 43487 b2ac 03 .byte 0x3
+ 43488 b2ad 91 .byte 0x91
+ 43489 b2ae E072 .sleb128 -1696
+ 43490 b2b0 36 .uleb128 0x36
+ 43491 b2b1 00000000 .quad .LBB2549
+ 43491 00000000
+ 43492 b2b9 00000000 .quad .LBE2549
+ 43492 00000000
+ 43493 b2c1 CFB20000 .long 0xb2cf
+ 43494 b2c5 34 .uleb128 0x34
+ 43495 b2c6 16B00000 .long 0xb016
+ 43496 b2ca 03 .byte 0x3
+ 43497 b2cb 91 .byte 0x91
+ 43498 b2cc C06D .sleb128 -2368
+ 43499 b2ce 00 .byte 0x0
+ 43500 b2cf 36 .uleb128 0x36
+ 43501 b2d0 00000000 .quad .LBB2550
+ 43501 00000000
+ 43502 b2d8 00000000 .quad .LBE2550
+ 43502 00000000
+ 43503 b2e0 EEB20000 .long 0xb2ee
+ 43504 b2e4 34 .uleb128 0x34
+ 43505 b2e5 26B00000 .long 0xb026
+ 43506 b2e9 03 .byte 0x3
+ 43507 b2ea 91 .byte 0x91
+ 43508 b2eb B06D .sleb128 -2384
+ 43509 b2ed 00 .byte 0x0
+ 43510 b2ee 31 .uleb128 0x31
+ 43511 b2ef 3EB00000 .long 0xb03e
+ 43512 b2f3 00000000 .quad .LBB2551
+ 43512 00000000
+ 43513 b2fb 00000000 .quad .LBE2551
+
GAS LISTING /tmp/ccMa7HLZ.s page 1120
+
+
+ 43513 00000000
+ 43514 b303 02 .byte 0x2
+ 43515 b304 CE07 .value 0x7ce
+ 43516 b306 48B30000 .long 0xb348
+ 43517 b30a 32 .uleb128 0x32
+ 43518 b30b 5CB00000 .long 0xb05c
+ 43519 b30f 03 .byte 0x3
+ 43520 b310 91 .byte 0x91
+ 43521 b311 F072 .sleb128 -1680
+ 43522 b313 32 .uleb128 0x32
+ 43523 b314 50B00000 .long 0xb050
+ 43524 b318 03 .byte 0x3
+ 43525 b319 91 .byte 0x91
+ 43526 b31a 8073 .sleb128 -1664
+ 43527 b31c 35 .uleb128 0x35
+ 43528 b31d 520E0000 .long 0xe52
+ 43529 b321 00000000 .quad .LBB2553
+ 43529 00000000
+ 43530 b329 00000000 .quad .LBE2553
+ 43530 00000000
+ 43531 b331 02 .byte 0x2
+ 43532 b332 2302 .value 0x223
+ 43533 b334 32 .uleb128 0x32
+ 43534 b335 6D0E0000 .long 0xe6d
+ 43535 b339 03 .byte 0x3
+ 43536 b33a 91 .byte 0x91
+ 43537 b33b 9073 .sleb128 -1648
+ 43538 b33d 32 .uleb128 0x32
+ 43539 b33e 630E0000 .long 0xe63
+ 43540 b342 03 .byte 0x3
+ 43541 b343 91 .byte 0x91
+ 43542 b344 A073 .sleb128 -1632
+ 43543 b346 00 .byte 0x0
+ 43544 b347 00 .byte 0x0
+ 43545 b348 33 .uleb128 0x33
+ 43546 b349 00000000 .quad .LBB2555
+ 43546 00000000
+ 43547 b351 00000000 .quad .LBE2555
+ 43547 00000000
+ 43548 b359 34 .uleb128 0x34
+ 43549 b35a 32B00000 .long 0xb032
+ 43550 b35e 03 .byte 0x3
+ 43551 b35f 91 .byte 0x91
+ 43552 b360 A06D .sleb128 -2400
+ 43553 b362 00 .byte 0x0
+ 43554 b363 00 .byte 0x0
+ 43555 b364 31 .uleb128 0x31
+ 43556 b365 69B00000 .long 0xb069
+ 43557 b369 00000000 .quad .LBB2556
+ 43557 00000000
+ 43558 b371 00000000 .quad .LBE2556
+ 43558 00000000
+ 43559 b379 02 .byte 0x2
+ 43560 b37a 3408 .value 0x834
+ 43561 b37c 57BB0000 .long 0xbb57
+ 43562 b380 32 .uleb128 0x32
+ 43563 b381 87B00000 .long 0xb087
+
GAS LISTING /tmp/ccMa7HLZ.s page 1121
+
+
+ 43564 b385 03 .byte 0x3
+ 43565 b386 91 .byte 0x91
+ 43566 b387 B073 .sleb128 -1616
+ 43567 b389 32 .uleb128 0x32
+ 43568 b38a 7BB00000 .long 0xb07b
+ 43569 b38e 03 .byte 0x3
+ 43570 b38f 91 .byte 0x91
+ 43571 b390 C073 .sleb128 -1600
+ 43572 b392 33 .uleb128 0x33
+ 43573 b393 00000000 .quad .LBB2557
+ 43573 00000000
+ 43574 b39b 00000000 .quad .LBE2557
+ 43574 00000000
+ 43575 b3a3 34 .uleb128 0x34
+ 43576 b3a4 93B00000 .long 0xb093
+ 43577 b3a8 03 .byte 0x3
+ 43578 b3a9 91 .byte 0x91
+ 43579 b3aa E073 .sleb128 -1568
+ 43580 b3ac 34 .uleb128 0x34
+ 43581 b3ad 9FB00000 .long 0xb09f
+ 43582 b3b1 03 .byte 0x3
+ 43583 b3b2 91 .byte 0x91
+ 43584 b3b3 D073 .sleb128 -1584
+ 43585 b3b5 36 .uleb128 0x36
+ 43586 b3b6 00000000 .quad .LBB2558
+ 43586 00000000
+ 43587 b3be 00000000 .quad .LBE2558
+ 43587 00000000
+ 43588 b3c6 D4B30000 .long 0xb3d4
+ 43589 b3ca 34 .uleb128 0x34
+ 43590 b3cb B0B00000 .long 0xb0b0
+ 43591 b3cf 03 .byte 0x3
+ 43592 b3d0 91 .byte 0x91
+ 43593 b3d1 A06E .sleb128 -2272
+ 43594 b3d3 00 .byte 0x0
+ 43595 b3d4 31 .uleb128 0x31
+ 43596 b3d5 910C0000 .long 0xc91
+ 43597 b3d9 00000000 .quad .LBB2559
+ 43597 00000000
+ 43598 b3e1 00000000 .quad .LBE2559
+ 43598 00000000
+ 43599 b3e9 02 .byte 0x2
+ 43600 b3ea ED07 .value 0x7ed
+ 43601 b3ec 44B60000 .long 0xb644
+ 43602 b3f0 32 .uleb128 0x32
+ 43603 b3f1 A30C0000 .long 0xca3
+ 43604 b3f5 03 .byte 0x3
+ 43605 b3f6 91 .byte 0x91
+ 43606 b3f7 F073 .sleb128 -1552
+ 43607 b3f9 35 .uleb128 0x35
+ 43608 b3fa B00C0000 .long 0xcb0
+ 43609 b3fe 00000000 .quad .LBB2561
+ 43609 00000000
+ 43610 b406 00000000 .quad .LBE2561
+ 43610 00000000
+ 43611 b40e 02 .byte 0x2
+ 43612 b40f 7D03 .value 0x37d
+
GAS LISTING /tmp/ccMa7HLZ.s page 1122
+
+
+ 43613 b411 32 .uleb128 0x32
+ 43614 b412 CE0C0000 .long 0xcce
+ 43615 b416 03 .byte 0x3
+ 43616 b417 91 .byte 0x91
+ 43617 b418 8874 .sleb128 -1528
+ 43618 b41a 32 .uleb128 0x32
+ 43619 b41b C20C0000 .long 0xcc2
+ 43620 b41f 03 .byte 0x3
+ 43621 b420 91 .byte 0x91
+ 43622 b421 9074 .sleb128 -1520
+ 43623 b423 33 .uleb128 0x33
+ 43624 b424 00000000 .quad .LBB2562
+ 43624 00000000
+ 43625 b42c 00000000 .quad .LBE2562
+ 43625 00000000
+ 43626 b434 34 .uleb128 0x34
+ 43627 b435 DA0C0000 .long 0xcda
+ 43628 b439 03 .byte 0x3
+ 43629 b43a 91 .byte 0x91
+ 43630 b43b E074 .sleb128 -1440
+ 43631 b43d 34 .uleb128 0x34
+ 43632 b43e E50C0000 .long 0xce5
+ 43633 b442 03 .byte 0x3
+ 43634 b443 91 .byte 0x91
+ 43635 b444 D074 .sleb128 -1456
+ 43636 b446 34 .uleb128 0x34
+ 43637 b447 F00C0000 .long 0xcf0
+ 43638 b44b 03 .byte 0x3
+ 43639 b44c 91 .byte 0x91
+ 43640 b44d C074 .sleb128 -1472
+ 43641 b44f 34 .uleb128 0x34
+ 43642 b450 FC0C0000 .long 0xcfc
+ 43643 b454 03 .byte 0x3
+ 43644 b455 91 .byte 0x91
+ 43645 b456 B074 .sleb128 -1488
+ 43646 b458 34 .uleb128 0x34
+ 43647 b459 080D0000 .long 0xd08
+ 43648 b45d 03 .byte 0x3
+ 43649 b45e 91 .byte 0x91
+ 43650 b45f AC74 .sleb128 -1492
+ 43651 b461 31 .uleb128 0x31
+ 43652 b462 1F0D0000 .long 0xd1f
+ 43653 b466 00000000 .quad .LBB2563
+ 43653 00000000
+ 43654 b46e 00000000 .quad .LBE2563
+ 43654 00000000
+ 43655 b476 02 .byte 0x2
+ 43656 b477 5603 .value 0x356
+ 43657 b479 90B40000 .long 0xb490
+ 43658 b47d 32 .uleb128 0x32
+ 43659 b47e 3A0D0000 .long 0xd3a
+ 43660 b482 03 .byte 0x3
+ 43661 b483 91 .byte 0x91
+ 43662 b484 F074 .sleb128 -1424
+ 43663 b486 32 .uleb128 0x32
+ 43664 b487 300D0000 .long 0xd30
+ 43665 b48b 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1123
+
+
+ 43666 b48c 91 .byte 0x91
+ 43667 b48d 8075 .sleb128 -1408
+ 43668 b48f 00 .byte 0x0
+ 43669 b490 31 .uleb128 0x31
+ 43670 b491 450D0000 .long 0xd45
+ 43671 b495 00000000 .quad .LBB2565
+ 43671 00000000
+ 43672 b49d 00000000 .quad .LBE2565
+ 43672 00000000
+ 43673 b4a5 02 .byte 0x2
+ 43674 b4a6 5E03 .value 0x35e
+ 43675 b4a8 BFB40000 .long 0xb4bf
+ 43676 b4ac 32 .uleb128 0x32
+ 43677 b4ad 620D0000 .long 0xd62
+ 43678 b4b1 03 .byte 0x3
+ 43679 b4b2 91 .byte 0x91
+ 43680 b4b3 9075 .sleb128 -1392
+ 43681 b4b5 32 .uleb128 0x32
+ 43682 b4b6 570D0000 .long 0xd57
+ 43683 b4ba 03 .byte 0x3
+ 43684 b4bb 91 .byte 0x91
+ 43685 b4bc A075 .sleb128 -1376
+ 43686 b4be 00 .byte 0x0
+ 43687 b4bf 31 .uleb128 0x31
+ 43688 b4c0 6E0D0000 .long 0xd6e
+ 43689 b4c4 00000000 .quad .LBB2567
+ 43689 00000000
+ 43690 b4cc 00000000 .quad .LBE2567
+ 43690 00000000
+ 43691 b4d4 02 .byte 0x2
+ 43692 b4d5 6403 .value 0x364
+ 43693 b4d7 24B50000 .long 0xb524
+ 43694 b4db 32 .uleb128 0x32
+ 43695 b4dc 8C0D0000 .long 0xd8c
+ 43696 b4e0 03 .byte 0x3
+ 43697 b4e1 91 .byte 0x91
+ 43698 b4e2 B075 .sleb128 -1360
+ 43699 b4e4 32 .uleb128 0x32
+ 43700 b4e5 800D0000 .long 0xd80
+ 43701 b4e9 03 .byte 0x3
+ 43702 b4ea 91 .byte 0x91
+ 43703 b4eb C075 .sleb128 -1344
+ 43704 b4ed 33 .uleb128 0x33
+ 43705 b4ee 00000000 .quad .LBB2568
+ 43705 00000000
+ 43706 b4f6 00000000 .quad .LBE2568
+ 43706 00000000
+ 43707 b4fe 34 .uleb128 0x34
+ 43708 b4ff 980D0000 .long 0xd98
+ 43709 b503 03 .byte 0x3
+ 43710 b504 91 .byte 0x91
+ 43711 b505 D06E .sleb128 -2224
+ 43712 b507 34 .uleb128 0x34
+ 43713 b508 A40D0000 .long 0xda4
+ 43714 b50c 03 .byte 0x3
+ 43715 b50d 91 .byte 0x91
+ 43716 b50e C06E .sleb128 -2240
+
GAS LISTING /tmp/ccMa7HLZ.s page 1124
+
+
+ 43717 b510 34 .uleb128 0x34
+ 43718 b511 AF0D0000 .long 0xdaf
+ 43719 b515 03 .byte 0x3
+ 43720 b516 91 .byte 0x91
+ 43721 b517 B06E .sleb128 -2256
+ 43722 b519 34 .uleb128 0x34
+ 43723 b51a BB0D0000 .long 0xdbb
+ 43724 b51e 03 .byte 0x3
+ 43725 b51f 91 .byte 0x91
+ 43726 b520 DC75 .sleb128 -1316
+ 43727 b522 00 .byte 0x0
+ 43728 b523 00 .byte 0x0
+ 43729 b524 31 .uleb128 0x31
+ 43730 b525 C70D0000 .long 0xdc7
+ 43731 b529 00000000 .quad .LBB2569
+ 43731 00000000
+ 43732 b531 00000000 .quad .LBE2569
+ 43732 00000000
+ 43733 b539 02 .byte 0x2
+ 43734 b53a 6603 .value 0x366
+ 43735 b53c 53B50000 .long 0xb553
+ 43736 b540 32 .uleb128 0x32
+ 43737 b541 E20D0000 .long 0xde2
+ 43738 b545 03 .byte 0x3
+ 43739 b546 91 .byte 0x91
+ 43740 b547 E075 .sleb128 -1312
+ 43741 b549 32 .uleb128 0x32
+ 43742 b54a D80D0000 .long 0xdd8
+ 43743 b54e 03 .byte 0x3
+ 43744 b54f 91 .byte 0x91
+ 43745 b550 F075 .sleb128 -1296
+ 43746 b552 00 .byte 0x0
+ 43747 b553 31 .uleb128 0x31
+ 43748 b554 6E0D0000 .long 0xd6e
+ 43749 b558 00000000 .quad .LBB2571
+ 43749 00000000
+ 43750 b560 00000000 .quad .LBE2571
+ 43750 00000000
+ 43751 b568 02 .byte 0x2
+ 43752 b569 6803 .value 0x368
+ 43753 b56b B8B50000 .long 0xb5b8
+ 43754 b56f 32 .uleb128 0x32
+ 43755 b570 8C0D0000 .long 0xd8c
+ 43756 b574 03 .byte 0x3
+ 43757 b575 91 .byte 0x91
+ 43758 b576 8076 .sleb128 -1280
+ 43759 b578 32 .uleb128 0x32
+ 43760 b579 800D0000 .long 0xd80
+ 43761 b57d 03 .byte 0x3
+ 43762 b57e 91 .byte 0x91
+ 43763 b57f 9076 .sleb128 -1264
+ 43764 b581 33 .uleb128 0x33
+ 43765 b582 00000000 .quad .LBB2572
+ 43765 00000000
+ 43766 b58a 00000000 .quad .LBE2572
+ 43766 00000000
+ 43767 b592 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 1125
+
+
+ 43768 b593 980D0000 .long 0xd98
+ 43769 b597 03 .byte 0x3
+ 43770 b598 91 .byte 0x91
+ 43771 b599 806F .sleb128 -2176
+ 43772 b59b 34 .uleb128 0x34
+ 43773 b59c A40D0000 .long 0xda4
+ 43774 b5a0 03 .byte 0x3
+ 43775 b5a1 91 .byte 0x91
+ 43776 b5a2 F06E .sleb128 -2192
+ 43777 b5a4 34 .uleb128 0x34
+ 43778 b5a5 AF0D0000 .long 0xdaf
+ 43779 b5a9 03 .byte 0x3
+ 43780 b5aa 91 .byte 0x91
+ 43781 b5ab E06E .sleb128 -2208
+ 43782 b5ad 34 .uleb128 0x34
+ 43783 b5ae BB0D0000 .long 0xdbb
+ 43784 b5b2 03 .byte 0x3
+ 43785 b5b3 91 .byte 0x91
+ 43786 b5b4 AC76 .sleb128 -1236
+ 43787 b5b6 00 .byte 0x0
+ 43788 b5b7 00 .byte 0x0
+ 43789 b5b8 31 .uleb128 0x31
+ 43790 b5b9 C70D0000 .long 0xdc7
+ 43791 b5bd 00000000 .quad .LBB2573
+ 43791 00000000
+ 43792 b5c5 00000000 .quad .LBE2573
+ 43792 00000000
+ 43793 b5cd 02 .byte 0x2
+ 43794 b5ce 6A03 .value 0x36a
+ 43795 b5d0 E7B50000 .long 0xb5e7
+ 43796 b5d4 32 .uleb128 0x32
+ 43797 b5d5 E20D0000 .long 0xde2
+ 43798 b5d9 03 .byte 0x3
+ 43799 b5da 91 .byte 0x91
+ 43800 b5db B076 .sleb128 -1232
+ 43801 b5dd 32 .uleb128 0x32
+ 43802 b5de D80D0000 .long 0xdd8
+ 43803 b5e2 03 .byte 0x3
+ 43804 b5e3 91 .byte 0x91
+ 43805 b5e4 C076 .sleb128 -1216
+ 43806 b5e6 00 .byte 0x0
+ 43807 b5e7 31 .uleb128 0x31
+ 43808 b5e8 ED0D0000 .long 0xded
+ 43809 b5ec 00000000 .quad .LBB2575
+ 43809 00000000
+ 43810 b5f4 00000000 .quad .LBE2575
+ 43810 00000000
+ 43811 b5fc 02 .byte 0x2
+ 43812 b5fd 6C03 .value 0x36c
+ 43813 b5ff 16B60000 .long 0xb616
+ 43814 b603 32 .uleb128 0x32
+ 43815 b604 0A0E0000 .long 0xe0a
+ 43816 b608 03 .byte 0x3
+ 43817 b609 91 .byte 0x91
+ 43818 b60a D076 .sleb128 -1200
+ 43819 b60c 32 .uleb128 0x32
+ 43820 b60d FF0D0000 .long 0xdff
+
GAS LISTING /tmp/ccMa7HLZ.s page 1126
+
+
+ 43821 b611 03 .byte 0x3
+ 43822 b612 91 .byte 0x91
+ 43823 b613 E076 .sleb128 -1184
+ 43824 b615 00 .byte 0x0
+ 43825 b616 35 .uleb128 0x35
+ 43826 b617 1F0D0000 .long 0xd1f
+ 43827 b61b 00000000 .quad .LBB2577
+ 43827 00000000
+ 43828 b623 00000000 .quad .LBE2577
+ 43828 00000000
+ 43829 b62b 02 .byte 0x2
+ 43830 b62c 6E03 .value 0x36e
+ 43831 b62e 32 .uleb128 0x32
+ 43832 b62f 3A0D0000 .long 0xd3a
+ 43833 b633 03 .byte 0x3
+ 43834 b634 91 .byte 0x91
+ 43835 b635 F076 .sleb128 -1168
+ 43836 b637 32 .uleb128 0x32
+ 43837 b638 300D0000 .long 0xd30
+ 43838 b63c 03 .byte 0x3
+ 43839 b63d 91 .byte 0x91
+ 43840 b63e 8077 .sleb128 -1152
+ 43841 b640 00 .byte 0x0
+ 43842 b641 00 .byte 0x0
+ 43843 b642 00 .byte 0x0
+ 43844 b643 00 .byte 0x0
+ 43845 b644 36 .uleb128 0x36
+ 43846 b645 00000000 .quad .LBB2579
+ 43846 00000000
+ 43847 b64d 00000000 .quad .LBE2579
+ 43847 00000000
+ 43848 b655 63B60000 .long 0xb663
+ 43849 b659 34 .uleb128 0x34
+ 43850 b65a C0B00000 .long 0xb0c0
+ 43851 b65e 03 .byte 0x3
+ 43852 b65f 91 .byte 0x91
+ 43853 b660 906E .sleb128 -2288
+ 43854 b662 00 .byte 0x0
+ 43855 b663 31 .uleb128 0x31
+ 43856 b664 08B10000 .long 0xb108
+ 43857 b668 00000000 .quad .LBB2580
+ 43857 00000000
+ 43858 b670 00000000 .quad .LBE2580
+ 43858 00000000
+ 43859 b678 02 .byte 0x2
+ 43860 b679 F107 .value 0x7f1
+ 43861 b67b 0BB70000 .long 0xb70b
+ 43862 b67f 32 .uleb128 0x32
+ 43863 b680 1AB10000 .long 0xb11a
+ 43864 b684 03 .byte 0x3
+ 43865 b685 91 .byte 0x91
+ 43866 b686 9077 .sleb128 -1136
+ 43867 b688 33 .uleb128 0x33
+ 43868 b689 00000000 .quad .LBB2581
+ 43868 00000000
+ 43869 b691 00000000 .quad .LBE2581
+ 43869 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1127
+
+
+ 43870 b699 34 .uleb128 0x34
+ 43871 b69a 26B10000 .long 0xb126
+ 43872 b69e 09 .byte 0x9
+ 43873 b69f 03 .byte 0x3
+ 43874 b6a0 00000000 .quad ShiftRowTable.6741
+ 43874 00000000
+ 43875 b6a8 35 .uleb128 0x35
+ 43876 b6a9 6E0D0000 .long 0xd6e
+ 43877 b6ad 00000000 .quad .LBB2582
+ 43877 00000000
+ 43878 b6b5 00000000 .quad .LBE2582
+ 43878 00000000
+ 43879 b6bd 02 .byte 0x2
+ 43880 b6be 4502 .value 0x245
+ 43881 b6c0 32 .uleb128 0x32
+ 43882 b6c1 8C0D0000 .long 0xd8c
+ 43883 b6c5 03 .byte 0x3
+ 43884 b6c6 91 .byte 0x91
+ 43885 b6c7 A077 .sleb128 -1120
+ 43886 b6c9 32 .uleb128 0x32
+ 43887 b6ca 800D0000 .long 0xd80
+ 43888 b6ce 03 .byte 0x3
+ 43889 b6cf 91 .byte 0x91
+ 43890 b6d0 B077 .sleb128 -1104
+ 43891 b6d2 33 .uleb128 0x33
+ 43892 b6d3 00000000 .quad .LBB2583
+ 43892 00000000
+ 43893 b6db 00000000 .quad .LBE2583
+ 43893 00000000
+ 43894 b6e3 34 .uleb128 0x34
+ 43895 b6e4 980D0000 .long 0xd98
+ 43896 b6e8 03 .byte 0x3
+ 43897 b6e9 91 .byte 0x91
+ 43898 b6ea B06F .sleb128 -2128
+ 43899 b6ec 34 .uleb128 0x34
+ 43900 b6ed A40D0000 .long 0xda4
+ 43901 b6f1 03 .byte 0x3
+ 43902 b6f2 91 .byte 0x91
+ 43903 b6f3 A06F .sleb128 -2144
+ 43904 b6f5 34 .uleb128 0x34
+ 43905 b6f6 AF0D0000 .long 0xdaf
+ 43906 b6fa 03 .byte 0x3
+ 43907 b6fb 91 .byte 0x91
+ 43908 b6fc 906F .sleb128 -2160
+ 43909 b6fe 34 .uleb128 0x34
+ 43910 b6ff BB0D0000 .long 0xdbb
+ 43911 b703 03 .byte 0x3
+ 43912 b704 91 .byte 0x91
+ 43913 b705 CC77 .sleb128 -1076
+ 43914 b707 00 .byte 0x0
+ 43915 b708 00 .byte 0x0
+ 43916 b709 00 .byte 0x0
+ 43917 b70a 00 .byte 0x0
+ 43918 b70b 36 .uleb128 0x36
+ 43919 b70c 00000000 .quad .LBB2584
+ 43919 00000000
+ 43920 b714 00000000 .quad .LBE2584
+
GAS LISTING /tmp/ccMa7HLZ.s page 1128
+
+
+ 43920 00000000
+ 43921 b71c 2AB70000 .long 0xb72a
+ 43922 b720 34 .uleb128 0x34
+ 43923 b721 D0B00000 .long 0xb0d0
+ 43924 b725 03 .byte 0x3
+ 43925 b726 91 .byte 0x91
+ 43926 b727 806E .sleb128 -2304
+ 43927 b729 00 .byte 0x0
+ 43928 b72a 31 .uleb128 0x31
+ 43929 b72b 44B10000 .long 0xb144
+ 43930 b72f 00000000 .quad .LBB2585
+ 43930 00000000
+ 43931 b737 00000000 .quad .LBE2585
+ 43931 00000000
+ 43932 b73f 02 .byte 0x2
+ 43933 b740 F507 .value 0x7f5
+ 43934 b742 A2BA0000 .long 0xbaa2
+ 43935 b746 32 .uleb128 0x32
+ 43936 b747 56B10000 .long 0xb156
+ 43937 b74b 03 .byte 0x3
+ 43938 b74c 91 .byte 0x91
+ 43939 b74d D077 .sleb128 -1072
+ 43940 b74f 33 .uleb128 0x33
+ 43941 b750 00000000 .quad .LBB2586
+ 43941 00000000
+ 43942 b758 00000000 .quad .LBE2586
+ 43942 00000000
+ 43943 b760 34 .uleb128 0x34
+ 43944 b761 62B10000 .long 0xb162
+ 43945 b765 03 .byte 0x3
+ 43946 b766 76 .byte 0x76
+ 43947 b767 806D .sleb128 -2432
+ 43948 b769 34 .uleb128 0x34
+ 43949 b76a 6DB10000 .long 0xb16d
+ 43950 b76e 03 .byte 0x3
+ 43951 b76f 76 .byte 0x76
+ 43952 b770 F06C .sleb128 -2448
+ 43953 b772 34 .uleb128 0x34
+ 43954 b773 78B10000 .long 0xb178
+ 43955 b777 03 .byte 0x3
+ 43956 b778 76 .byte 0x76
+ 43957 b779 E06C .sleb128 -2464
+ 43958 b77b 34 .uleb128 0x34
+ 43959 b77c 83B10000 .long 0xb183
+ 43960 b780 03 .byte 0x3
+ 43961 b781 76 .byte 0x76
+ 43962 b782 D06C .sleb128 -2480
+ 43963 b784 31 .uleb128 0x31
+ 43964 b785 160E0000 .long 0xe16
+ 43965 b789 00000000 .quad .LBB2587
+ 43965 00000000
+ 43966 b791 00000000 .quad .LBE2587
+ 43966 00000000
+ 43967 b799 02 .byte 0x2
+ 43968 b79a 1704 .value 0x417
+ 43969 b79c 2CB80000 .long 0xb82c
+ 43970 b7a0 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 1129
+
+
+ 43971 b7a1 280E0000 .long 0xe28
+ 43972 b7a5 03 .byte 0x3
+ 43973 b7a6 91 .byte 0x91
+ 43974 b7a7 F077 .sleb128 -1040
+ 43975 b7a9 33 .uleb128 0x33
+ 43976 b7aa 00000000 .quad .LBB2588
+ 43976 00000000
+ 43977 b7b2 00000000 .quad .LBE2588
+ 43977 00000000
+ 43978 b7ba 34 .uleb128 0x34
+ 43979 b7bb 340E0000 .long 0xe34
+ 43980 b7bf 09 .byte 0x9
+ 43981 b7c0 03 .byte 0x3
+ 43982 b7c1 00000000 .quad ShiftRowTable.6768
+ 43982 00000000
+ 43983 b7c9 35 .uleb128 0x35
+ 43984 b7ca 6E0D0000 .long 0xd6e
+ 43985 b7ce 00000000 .quad .LBB2589
+ 43985 00000000
+ 43986 b7d6 00000000 .quad .LBE2589
+ 43986 00000000
+ 43987 b7de 02 .byte 0x2
+ 43988 b7df 9B02 .value 0x29b
+ 43989 b7e1 32 .uleb128 0x32
+ 43990 b7e2 8C0D0000 .long 0xd8c
+ 43991 b7e6 03 .byte 0x3
+ 43992 b7e7 91 .byte 0x91
+ 43993 b7e8 8078 .sleb128 -1024
+ 43994 b7ea 32 .uleb128 0x32
+ 43995 b7eb 800D0000 .long 0xd80
+ 43996 b7ef 03 .byte 0x3
+ 43997 b7f0 91 .byte 0x91
+ 43998 b7f1 9078 .sleb128 -1008
+ 43999 b7f3 33 .uleb128 0x33
+ 44000 b7f4 00000000 .quad .LBB2590
+ 44000 00000000
+ 44001 b7fc 00000000 .quad .LBE2590
+ 44001 00000000
+ 44002 b804 34 .uleb128 0x34
+ 44003 b805 980D0000 .long 0xd98
+ 44004 b809 03 .byte 0x3
+ 44005 b80a 91 .byte 0x91
+ 44006 b80b F06F .sleb128 -2064
+ 44007 b80d 34 .uleb128 0x34
+ 44008 b80e A40D0000 .long 0xda4
+ 44009 b812 03 .byte 0x3
+ 44010 b813 91 .byte 0x91
+ 44011 b814 E06F .sleb128 -2080
+ 44012 b816 34 .uleb128 0x34
+ 44013 b817 AF0D0000 .long 0xdaf
+ 44014 b81b 03 .byte 0x3
+ 44015 b81c 91 .byte 0x91
+ 44016 b81d D06F .sleb128 -2096
+ 44017 b81f 34 .uleb128 0x34
+ 44018 b820 BB0D0000 .long 0xdbb
+ 44019 b824 03 .byte 0x3
+ 44020 b825 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1130
+
+
+ 44021 b826 AC78 .sleb128 -980
+ 44022 b828 00 .byte 0x0
+ 44023 b829 00 .byte 0x0
+ 44024 b82a 00 .byte 0x0
+ 44025 b82b 00 .byte 0x0
+ 44026 b82c 31 .uleb128 0x31
+ 44027 b82d 160E0000 .long 0xe16
+ 44028 b831 00000000 .quad .LBB2591
+ 44028 00000000
+ 44029 b839 00000000 .quad .LBE2591
+ 44029 00000000
+ 44030 b841 02 .byte 0x2
+ 44031 b842 1804 .value 0x418
+ 44032 b844 D4B80000 .long 0xb8d4
+ 44033 b848 32 .uleb128 0x32
+ 44034 b849 280E0000 .long 0xe28
+ 44035 b84d 03 .byte 0x3
+ 44036 b84e 91 .byte 0x91
+ 44037 b84f B078 .sleb128 -976
+ 44038 b851 33 .uleb128 0x33
+ 44039 b852 00000000 .quad .LBB2592
+ 44039 00000000
+ 44040 b85a 00000000 .quad .LBE2592
+ 44040 00000000
+ 44041 b862 34 .uleb128 0x34
+ 44042 b863 340E0000 .long 0xe34
+ 44043 b867 09 .byte 0x9
+ 44044 b868 03 .byte 0x3
+ 44045 b869 00000000 .quad ShiftRowTable.6768
+ 44045 00000000
+ 44046 b871 35 .uleb128 0x35
+ 44047 b872 6E0D0000 .long 0xd6e
+ 44048 b876 00000000 .quad .LBB2593
+ 44048 00000000
+ 44049 b87e 00000000 .quad .LBE2593
+ 44049 00000000
+ 44050 b886 02 .byte 0x2
+ 44051 b887 9B02 .value 0x29b
+ 44052 b889 32 .uleb128 0x32
+ 44053 b88a 8C0D0000 .long 0xd8c
+ 44054 b88e 03 .byte 0x3
+ 44055 b88f 91 .byte 0x91
+ 44056 b890 C078 .sleb128 -960
+ 44057 b892 32 .uleb128 0x32
+ 44058 b893 800D0000 .long 0xd80
+ 44059 b897 03 .byte 0x3
+ 44060 b898 91 .byte 0x91
+ 44061 b899 D078 .sleb128 -944
+ 44062 b89b 33 .uleb128 0x33
+ 44063 b89c 00000000 .quad .LBB2594
+ 44063 00000000
+ 44064 b8a4 00000000 .quad .LBE2594
+ 44064 00000000
+ 44065 b8ac 34 .uleb128 0x34
+ 44066 b8ad 980D0000 .long 0xd98
+ 44067 b8b1 03 .byte 0x3
+ 44068 b8b2 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1131
+
+
+ 44069 b8b3 A070 .sleb128 -2016
+ 44070 b8b5 34 .uleb128 0x34
+ 44071 b8b6 A40D0000 .long 0xda4
+ 44072 b8ba 03 .byte 0x3
+ 44073 b8bb 91 .byte 0x91
+ 44074 b8bc 9070 .sleb128 -2032
+ 44075 b8be 34 .uleb128 0x34
+ 44076 b8bf AF0D0000 .long 0xdaf
+ 44077 b8c3 03 .byte 0x3
+ 44078 b8c4 91 .byte 0x91
+ 44079 b8c5 8070 .sleb128 -2048
+ 44080 b8c7 34 .uleb128 0x34
+ 44081 b8c8 BB0D0000 .long 0xdbb
+ 44082 b8cc 03 .byte 0x3
+ 44083 b8cd 91 .byte 0x91
+ 44084 b8ce EC78 .sleb128 -916
+ 44085 b8d0 00 .byte 0x0
+ 44086 b8d1 00 .byte 0x0
+ 44087 b8d2 00 .byte 0x0
+ 44088 b8d3 00 .byte 0x0
+ 44089 b8d4 31 .uleb128 0x31
+ 44090 b8d5 160E0000 .long 0xe16
+ 44091 b8d9 00000000 .quad .LBB2595
+ 44091 00000000
+ 44092 b8e1 00000000 .quad .LBE2595
+ 44092 00000000
+ 44093 b8e9 02 .byte 0x2
+ 44094 b8ea 1904 .value 0x419
+ 44095 b8ec 7CB90000 .long 0xb97c
+ 44096 b8f0 32 .uleb128 0x32
+ 44097 b8f1 280E0000 .long 0xe28
+ 44098 b8f5 03 .byte 0x3
+ 44099 b8f6 91 .byte 0x91
+ 44100 b8f7 F078 .sleb128 -912
+ 44101 b8f9 33 .uleb128 0x33
+ 44102 b8fa 00000000 .quad .LBB2596
+ 44102 00000000
+ 44103 b902 00000000 .quad .LBE2596
+ 44103 00000000
+ 44104 b90a 34 .uleb128 0x34
+ 44105 b90b 340E0000 .long 0xe34
+ 44106 b90f 09 .byte 0x9
+ 44107 b910 03 .byte 0x3
+ 44108 b911 00000000 .quad ShiftRowTable.6768
+ 44108 00000000
+ 44109 b919 35 .uleb128 0x35
+ 44110 b91a 6E0D0000 .long 0xd6e
+ 44111 b91e 00000000 .quad .LBB2597
+ 44111 00000000
+ 44112 b926 00000000 .quad .LBE2597
+ 44112 00000000
+ 44113 b92e 02 .byte 0x2
+ 44114 b92f 9B02 .value 0x29b
+ 44115 b931 32 .uleb128 0x32
+ 44116 b932 8C0D0000 .long 0xd8c
+ 44117 b936 03 .byte 0x3
+ 44118 b937 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1132
+
+
+ 44119 b938 8079 .sleb128 -896
+ 44120 b93a 32 .uleb128 0x32
+ 44121 b93b 800D0000 .long 0xd80
+ 44122 b93f 03 .byte 0x3
+ 44123 b940 91 .byte 0x91
+ 44124 b941 9079 .sleb128 -880
+ 44125 b943 33 .uleb128 0x33
+ 44126 b944 00000000 .quad .LBB2598
+ 44126 00000000
+ 44127 b94c 00000000 .quad .LBE2598
+ 44127 00000000
+ 44128 b954 34 .uleb128 0x34
+ 44129 b955 980D0000 .long 0xd98
+ 44130 b959 03 .byte 0x3
+ 44131 b95a 91 .byte 0x91
+ 44132 b95b D070 .sleb128 -1968
+ 44133 b95d 34 .uleb128 0x34
+ 44134 b95e A40D0000 .long 0xda4
+ 44135 b962 03 .byte 0x3
+ 44136 b963 91 .byte 0x91
+ 44137 b964 C070 .sleb128 -1984
+ 44138 b966 34 .uleb128 0x34
+ 44139 b967 AF0D0000 .long 0xdaf
+ 44140 b96b 03 .byte 0x3
+ 44141 b96c 91 .byte 0x91
+ 44142 b96d B070 .sleb128 -2000
+ 44143 b96f 34 .uleb128 0x34
+ 44144 b970 BB0D0000 .long 0xdbb
+ 44145 b974 03 .byte 0x3
+ 44146 b975 91 .byte 0x91
+ 44147 b976 AC79 .sleb128 -852
+ 44148 b978 00 .byte 0x0
+ 44149 b979 00 .byte 0x0
+ 44150 b97a 00 .byte 0x0
+ 44151 b97b 00 .byte 0x0
+ 44152 b97c 31 .uleb128 0x31
+ 44153 b97d 520E0000 .long 0xe52
+ 44154 b981 00000000 .quad .LBB2599
+ 44154 00000000
+ 44155 b989 00000000 .quad .LBE2599
+ 44155 00000000
+ 44156 b991 02 .byte 0x2
+ 44157 b992 1A04 .value 0x41a
+ 44158 b994 ABB90000 .long 0xb9ab
+ 44159 b998 32 .uleb128 0x32
+ 44160 b999 6D0E0000 .long 0xe6d
+ 44161 b99d 03 .byte 0x3
+ 44162 b99e 91 .byte 0x91
+ 44163 b99f B079 .sleb128 -848
+ 44164 b9a1 32 .uleb128 0x32
+ 44165 b9a2 630E0000 .long 0xe63
+ 44166 b9a6 03 .byte 0x3
+ 44167 b9a7 91 .byte 0x91
+ 44168 b9a8 C079 .sleb128 -832
+ 44169 b9aa 00 .byte 0x0
+ 44170 b9ab 36 .uleb128 0x36
+ 44171 b9ac 00000000 .quad .LBB2601
+
GAS LISTING /tmp/ccMa7HLZ.s page 1133
+
+
+ 44171 00000000
+ 44172 b9b4 00000000 .quad .LBE2601
+ 44172 00000000
+ 44173 b9bc 17BA0000 .long 0xba17
+ 44174 b9c0 34 .uleb128 0x34
+ 44175 b9c1 8FB10000 .long 0xb18f
+ 44176 b9c5 03 .byte 0x3
+ 44177 b9c6 91 .byte 0x91
+ 44178 b9c7 C06F .sleb128 -2112
+ 44179 b9c9 34 .uleb128 0x34
+ 44180 b9ca 9BB10000 .long 0xb19b
+ 44181 b9ce 03 .byte 0x3
+ 44182 b9cf 91 .byte 0x91
+ 44183 b9d0 EC77 .sleb128 -1044
+ 44184 b9d2 35 .uleb128 0x35
+ 44185 b9d3 6EA90000 .long 0xa96e
+ 44186 b9d7 00000000 .quad .LBB2602
+ 44186 00000000
+ 44187 b9df 00000000 .quad .LBE2602
+ 44187 00000000
+ 44188 b9e7 02 .byte 0x2
+ 44189 b9e8 2704 .value 0x427
+ 44190 b9ea 32 .uleb128 0x32
+ 44191 b9eb 80A90000 .long 0xa980
+ 44192 b9ef 03 .byte 0x3
+ 44193 b9f0 91 .byte 0x91
+ 44194 b9f1 DE79 .sleb128 -802
+ 44195 b9f3 35 .uleb128 0x35
+ 44196 b9f4 8BA90000 .long 0xa98b
+ 44197 b9f8 00000000 .quad .LBB2604
+ 44197 00000000
+ 44198 ba00 00000000 .quad .LBE2604
+ 44198 00000000
+ 44199 ba08 02 .byte 0x2
+ 44200 ba09 F403 .value 0x3f4
+ 44201 ba0b 32 .uleb128 0x32
+ 44202 ba0c 9DA90000 .long 0xa99d
+ 44203 ba10 03 .byte 0x3
+ 44204 ba11 91 .byte 0x91
+ 44205 ba12 DF79 .sleb128 -801
+ 44206 ba14 00 .byte 0x0
+ 44207 ba15 00 .byte 0x0
+ 44208 ba16 00 .byte 0x0
+ 44209 ba17 31 .uleb128 0x31
+ 44210 ba18 520E0000 .long 0xe52
+ 44211 ba1c 00000000 .quad .LBB2606
+ 44211 00000000
+ 44212 ba24 00000000 .quad .LBE2606
+ 44212 00000000
+ 44213 ba2c 02 .byte 0x2
+ 44214 ba2d 2B04 .value 0x42b
+ 44215 ba2f 46BA0000 .long 0xba46
+ 44216 ba33 32 .uleb128 0x32
+ 44217 ba34 6D0E0000 .long 0xe6d
+ 44218 ba38 03 .byte 0x3
+ 44219 ba39 91 .byte 0x91
+ 44220 ba3a E079 .sleb128 -800
+
GAS LISTING /tmp/ccMa7HLZ.s page 1134
+
+
+ 44221 ba3c 32 .uleb128 0x32
+ 44222 ba3d 630E0000 .long 0xe63
+ 44223 ba41 03 .byte 0x3
+ 44224 ba42 91 .byte 0x91
+ 44225 ba43 F079 .sleb128 -784
+ 44226 ba45 00 .byte 0x0
+ 44227 ba46 31 .uleb128 0x31
+ 44228 ba47 520E0000 .long 0xe52
+ 44229 ba4b 00000000 .quad .LBB2608
+ 44229 00000000
+ 44230 ba53 00000000 .quad .LBE2608
+ 44230 00000000
+ 44231 ba5b 02 .byte 0x2
+ 44232 ba5c 2C04 .value 0x42c
+ 44233 ba5e 75BA0000 .long 0xba75
+ 44234 ba62 32 .uleb128 0x32
+ 44235 ba63 6D0E0000 .long 0xe6d
+ 44236 ba67 03 .byte 0x3
+ 44237 ba68 91 .byte 0x91
+ 44238 ba69 807A .sleb128 -768
+ 44239 ba6b 32 .uleb128 0x32
+ 44240 ba6c 630E0000 .long 0xe63
+ 44241 ba70 03 .byte 0x3
+ 44242 ba71 91 .byte 0x91
+ 44243 ba72 907A .sleb128 -752
+ 44244 ba74 00 .byte 0x0
+ 44245 ba75 35 .uleb128 0x35
+ 44246 ba76 520E0000 .long 0xe52
+ 44247 ba7a 00000000 .quad .LBB2610
+ 44247 00000000
+ 44248 ba82 00000000 .quad .LBE2610
+ 44248 00000000
+ 44249 ba8a 02 .byte 0x2
+ 44250 ba8b 2D04 .value 0x42d
+ 44251 ba8d 32 .uleb128 0x32
+ 44252 ba8e 6D0E0000 .long 0xe6d
+ 44253 ba92 03 .byte 0x3
+ 44254 ba93 91 .byte 0x91
+ 44255 ba94 A07A .sleb128 -736
+ 44256 ba96 32 .uleb128 0x32
+ 44257 ba97 630E0000 .long 0xe63
+ 44258 ba9b 03 .byte 0x3
+ 44259 ba9c 91 .byte 0x91
+ 44260 ba9d B07A .sleb128 -720
+ 44261 ba9f 00 .byte 0x0
+ 44262 baa0 00 .byte 0x0
+ 44263 baa1 00 .byte 0x0
+ 44264 baa2 36 .uleb128 0x36
+ 44265 baa3 00000000 .quad .LBB2612
+ 44265 00000000
+ 44266 baab 00000000 .quad .LBE2612
+ 44266 00000000
+ 44267 bab3 C1BA0000 .long 0xbac1
+ 44268 bab7 34 .uleb128 0x34
+ 44269 bab8 E0B00000 .long 0xb0e0
+ 44270 babc 03 .byte 0x3
+ 44271 babd 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1135
+
+
+ 44272 babe F06D .sleb128 -2320
+ 44273 bac0 00 .byte 0x0
+ 44274 bac1 31 .uleb128 0x31
+ 44275 bac2 3EB00000 .long 0xb03e
+ 44276 bac6 00000000 .quad .LBB2613
+ 44276 00000000
+ 44277 bace 00000000 .quad .LBE2613
+ 44277 00000000
+ 44278 bad6 02 .byte 0x2
+ 44279 bad7 FA07 .value 0x7fa
+ 44280 bad9 1BBB0000 .long 0xbb1b
+ 44281 badd 32 .uleb128 0x32
+ 44282 bade 5CB00000 .long 0xb05c
+ 44283 bae2 03 .byte 0x3
+ 44284 bae3 91 .byte 0x91
+ 44285 bae4 C07A .sleb128 -704
+ 44286 bae6 32 .uleb128 0x32
+ 44287 bae7 50B00000 .long 0xb050
+ 44288 baeb 03 .byte 0x3
+ 44289 baec 91 .byte 0x91
+ 44290 baed D07A .sleb128 -688
+ 44291 baef 35 .uleb128 0x35
+ 44292 baf0 520E0000 .long 0xe52
+ 44293 baf4 00000000 .quad .LBB2615
+ 44293 00000000
+ 44294 bafc 00000000 .quad .LBE2615
+ 44294 00000000
+ 44295 bb04 02 .byte 0x2
+ 44296 bb05 2302 .value 0x223
+ 44297 bb07 32 .uleb128 0x32
+ 44298 bb08 6D0E0000 .long 0xe6d
+ 44299 bb0c 03 .byte 0x3
+ 44300 bb0d 91 .byte 0x91
+ 44301 bb0e E07A .sleb128 -672
+ 44302 bb10 32 .uleb128 0x32
+ 44303 bb11 630E0000 .long 0xe63
+ 44304 bb15 03 .byte 0x3
+ 44305 bb16 91 .byte 0x91
+ 44306 bb17 F07A .sleb128 -656
+ 44307 bb19 00 .byte 0x0
+ 44308 bb1a 00 .byte 0x0
+ 44309 bb1b 36 .uleb128 0x36
+ 44310 bb1c 00000000 .quad .LBB2617
+ 44310 00000000
+ 44311 bb24 00000000 .quad .LBE2617
+ 44311 00000000
+ 44312 bb2c 3ABB0000 .long 0xbb3a
+ 44313 bb30 34 .uleb128 0x34
+ 44314 bb31 F0B00000 .long 0xb0f0
+ 44315 bb35 03 .byte 0x3
+ 44316 bb36 91 .byte 0x91
+ 44317 bb37 E06D .sleb128 -2336
+ 44318 bb39 00 .byte 0x0
+ 44319 bb3a 33 .uleb128 0x33
+ 44320 bb3b 00000000 .quad .LBB2618
+ 44320 00000000
+ 44321 bb43 00000000 .quad .LBE2618
+
GAS LISTING /tmp/ccMa7HLZ.s page 1136
+
+
+ 44321 00000000
+ 44322 bb4b 34 .uleb128 0x34
+ 44323 bb4c FCB00000 .long 0xb0fc
+ 44324 bb50 03 .byte 0x3
+ 44325 bb51 91 .byte 0x91
+ 44326 bb52 D06D .sleb128 -2352
+ 44327 bb54 00 .byte 0x0
+ 44328 bb55 00 .byte 0x0
+ 44329 bb56 00 .byte 0x0
+ 44330 bb57 35 .uleb128 0x35
+ 44331 bb58 A8B10000 .long 0xb1a8
+ 44332 bb5c 00000000 .quad .LBB2619
+ 44332 00000000
+ 44333 bb64 00000000 .quad .LBE2619
+ 44333 00000000
+ 44334 bb6c 02 .byte 0x2
+ 44335 bb6d 3608 .value 0x836
+ 44336 bb6f 32 .uleb128 0x32
+ 44337 bb70 C6B10000 .long 0xb1c6
+ 44338 bb74 03 .byte 0x3
+ 44339 bb75 91 .byte 0x91
+ 44340 bb76 807B .sleb128 -640
+ 44341 bb78 32 .uleb128 0x32
+ 44342 bb79 BAB10000 .long 0xb1ba
+ 44343 bb7d 03 .byte 0x3
+ 44344 bb7e 91 .byte 0x91
+ 44345 bb7f 907B .sleb128 -624
+ 44346 bb81 36 .uleb128 0x36
+ 44347 bb82 00000000 .quad .LBB2621
+ 44347 00000000
+ 44348 bb8a 00000000 .quad .LBE2621
+ 44348 00000000
+ 44349 bb92 A0BB0000 .long 0xbba0
+ 44350 bb96 34 .uleb128 0x34
+ 44351 bb97 D7B10000 .long 0xb1d7
+ 44352 bb9b 03 .byte 0x3
+ 44353 bb9c 91 .byte 0x91
+ 44354 bb9d A071 .sleb128 -1888
+ 44355 bb9f 00 .byte 0x0
+ 44356 bba0 31 .uleb128 0x31
+ 44357 bba1 910C0000 .long 0xc91
+ 44358 bba5 00000000 .quad .LBB2622
+ 44358 00000000
+ 44359 bbad 00000000 .quad .LBE2622
+ 44359 00000000
+ 44360 bbb5 02 .byte 0x2
+ 44361 bbb6 0F08 .value 0x80f
+ 44362 bbb8 10BE0000 .long 0xbe10
+ 44363 bbbc 32 .uleb128 0x32
+ 44364 bbbd A30C0000 .long 0xca3
+ 44365 bbc1 03 .byte 0x3
+ 44366 bbc2 91 .byte 0x91
+ 44367 bbc3 A07B .sleb128 -608
+ 44368 bbc5 35 .uleb128 0x35
+ 44369 bbc6 B00C0000 .long 0xcb0
+ 44370 bbca 00000000 .quad .LBB2624
+ 44370 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1137
+
+
+ 44371 bbd2 00000000 .quad .LBE2624
+ 44371 00000000
+ 44372 bbda 02 .byte 0x2
+ 44373 bbdb 7D03 .value 0x37d
+ 44374 bbdd 32 .uleb128 0x32
+ 44375 bbde CE0C0000 .long 0xcce
+ 44376 bbe2 03 .byte 0x3
+ 44377 bbe3 91 .byte 0x91
+ 44378 bbe4 B87B .sleb128 -584
+ 44379 bbe6 32 .uleb128 0x32
+ 44380 bbe7 C20C0000 .long 0xcc2
+ 44381 bbeb 03 .byte 0x3
+ 44382 bbec 91 .byte 0x91
+ 44383 bbed C07B .sleb128 -576
+ 44384 bbef 33 .uleb128 0x33
+ 44385 bbf0 00000000 .quad .LBB2625
+ 44385 00000000
+ 44386 bbf8 00000000 .quad .LBE2625
+ 44386 00000000
+ 44387 bc00 34 .uleb128 0x34
+ 44388 bc01 DA0C0000 .long 0xcda
+ 44389 bc05 03 .byte 0x3
+ 44390 bc06 91 .byte 0x91
+ 44391 bc07 907C .sleb128 -496
+ 44392 bc09 34 .uleb128 0x34
+ 44393 bc0a E50C0000 .long 0xce5
+ 44394 bc0e 03 .byte 0x3
+ 44395 bc0f 91 .byte 0x91
+ 44396 bc10 807C .sleb128 -512
+ 44397 bc12 34 .uleb128 0x34
+ 44398 bc13 F00C0000 .long 0xcf0
+ 44399 bc17 03 .byte 0x3
+ 44400 bc18 91 .byte 0x91
+ 44401 bc19 F07B .sleb128 -528
+ 44402 bc1b 34 .uleb128 0x34
+ 44403 bc1c FC0C0000 .long 0xcfc
+ 44404 bc20 03 .byte 0x3
+ 44405 bc21 91 .byte 0x91
+ 44406 bc22 E07B .sleb128 -544
+ 44407 bc24 34 .uleb128 0x34
+ 44408 bc25 080D0000 .long 0xd08
+ 44409 bc29 03 .byte 0x3
+ 44410 bc2a 91 .byte 0x91
+ 44411 bc2b DC7B .sleb128 -548
+ 44412 bc2d 31 .uleb128 0x31
+ 44413 bc2e 1F0D0000 .long 0xd1f
+ 44414 bc32 00000000 .quad .LBB2626
+ 44414 00000000
+ 44415 bc3a 00000000 .quad .LBE2626
+ 44415 00000000
+ 44416 bc42 02 .byte 0x2
+ 44417 bc43 5603 .value 0x356
+ 44418 bc45 5CBC0000 .long 0xbc5c
+ 44419 bc49 32 .uleb128 0x32
+ 44420 bc4a 3A0D0000 .long 0xd3a
+ 44421 bc4e 03 .byte 0x3
+ 44422 bc4f 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1138
+
+
+ 44423 bc50 A07C .sleb128 -480
+ 44424 bc52 32 .uleb128 0x32
+ 44425 bc53 300D0000 .long 0xd30
+ 44426 bc57 03 .byte 0x3
+ 44427 bc58 91 .byte 0x91
+ 44428 bc59 B07C .sleb128 -464
+ 44429 bc5b 00 .byte 0x0
+ 44430 bc5c 31 .uleb128 0x31
+ 44431 bc5d 450D0000 .long 0xd45
+ 44432 bc61 00000000 .quad .LBB2628
+ 44432 00000000
+ 44433 bc69 00000000 .quad .LBE2628
+ 44433 00000000
+ 44434 bc71 02 .byte 0x2
+ 44435 bc72 5E03 .value 0x35e
+ 44436 bc74 8BBC0000 .long 0xbc8b
+ 44437 bc78 32 .uleb128 0x32
+ 44438 bc79 620D0000 .long 0xd62
+ 44439 bc7d 03 .byte 0x3
+ 44440 bc7e 91 .byte 0x91
+ 44441 bc7f C07C .sleb128 -448
+ 44442 bc81 32 .uleb128 0x32
+ 44443 bc82 570D0000 .long 0xd57
+ 44444 bc86 03 .byte 0x3
+ 44445 bc87 91 .byte 0x91
+ 44446 bc88 D07C .sleb128 -432
+ 44447 bc8a 00 .byte 0x0
+ 44448 bc8b 31 .uleb128 0x31
+ 44449 bc8c 6E0D0000 .long 0xd6e
+ 44450 bc90 00000000 .quad .LBB2630
+ 44450 00000000
+ 44451 bc98 00000000 .quad .LBE2630
+ 44451 00000000
+ 44452 bca0 02 .byte 0x2
+ 44453 bca1 6403 .value 0x364
+ 44454 bca3 F0BC0000 .long 0xbcf0
+ 44455 bca7 32 .uleb128 0x32
+ 44456 bca8 8C0D0000 .long 0xd8c
+ 44457 bcac 03 .byte 0x3
+ 44458 bcad 91 .byte 0x91
+ 44459 bcae E07C .sleb128 -416
+ 44460 bcb0 32 .uleb128 0x32
+ 44461 bcb1 800D0000 .long 0xd80
+ 44462 bcb5 03 .byte 0x3
+ 44463 bcb6 91 .byte 0x91
+ 44464 bcb7 F07C .sleb128 -400
+ 44465 bcb9 33 .uleb128 0x33
+ 44466 bcba 00000000 .quad .LBB2631
+ 44466 00000000
+ 44467 bcc2 00000000 .quad .LBE2631
+ 44467 00000000
+ 44468 bcca 34 .uleb128 0x34
+ 44469 bccb 980D0000 .long 0xd98
+ 44470 bccf 03 .byte 0x3
+ 44471 bcd0 91 .byte 0x91
+ 44472 bcd1 D071 .sleb128 -1840
+ 44473 bcd3 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 1139
+
+
+ 44474 bcd4 A40D0000 .long 0xda4
+ 44475 bcd8 03 .byte 0x3
+ 44476 bcd9 91 .byte 0x91
+ 44477 bcda C071 .sleb128 -1856
+ 44478 bcdc 34 .uleb128 0x34
+ 44479 bcdd AF0D0000 .long 0xdaf
+ 44480 bce1 03 .byte 0x3
+ 44481 bce2 91 .byte 0x91
+ 44482 bce3 B071 .sleb128 -1872
+ 44483 bce5 34 .uleb128 0x34
+ 44484 bce6 BB0D0000 .long 0xdbb
+ 44485 bcea 03 .byte 0x3
+ 44486 bceb 91 .byte 0x91
+ 44487 bcec 8C7D .sleb128 -372
+ 44488 bcee 00 .byte 0x0
+ 44489 bcef 00 .byte 0x0
+ 44490 bcf0 31 .uleb128 0x31
+ 44491 bcf1 C70D0000 .long 0xdc7
+ 44492 bcf5 00000000 .quad .LBB2632
+ 44492 00000000
+ 44493 bcfd 00000000 .quad .LBE2632
+ 44493 00000000
+ 44494 bd05 02 .byte 0x2
+ 44495 bd06 6603 .value 0x366
+ 44496 bd08 1FBD0000 .long 0xbd1f
+ 44497 bd0c 32 .uleb128 0x32
+ 44498 bd0d E20D0000 .long 0xde2
+ 44499 bd11 03 .byte 0x3
+ 44500 bd12 91 .byte 0x91
+ 44501 bd13 907D .sleb128 -368
+ 44502 bd15 32 .uleb128 0x32
+ 44503 bd16 D80D0000 .long 0xdd8
+ 44504 bd1a 03 .byte 0x3
+ 44505 bd1b 91 .byte 0x91
+ 44506 bd1c A07D .sleb128 -352
+ 44507 bd1e 00 .byte 0x0
+ 44508 bd1f 31 .uleb128 0x31
+ 44509 bd20 6E0D0000 .long 0xd6e
+ 44510 bd24 00000000 .quad .LBB2634
+ 44510 00000000
+ 44511 bd2c 00000000 .quad .LBE2634
+ 44511 00000000
+ 44512 bd34 02 .byte 0x2
+ 44513 bd35 6803 .value 0x368
+ 44514 bd37 84BD0000 .long 0xbd84
+ 44515 bd3b 32 .uleb128 0x32
+ 44516 bd3c 8C0D0000 .long 0xd8c
+ 44517 bd40 03 .byte 0x3
+ 44518 bd41 91 .byte 0x91
+ 44519 bd42 B07D .sleb128 -336
+ 44520 bd44 32 .uleb128 0x32
+ 44521 bd45 800D0000 .long 0xd80
+ 44522 bd49 03 .byte 0x3
+ 44523 bd4a 91 .byte 0x91
+ 44524 bd4b C07D .sleb128 -320
+ 44525 bd4d 33 .uleb128 0x33
+ 44526 bd4e 00000000 .quad .LBB2635
+
GAS LISTING /tmp/ccMa7HLZ.s page 1140
+
+
+ 44526 00000000
+ 44527 bd56 00000000 .quad .LBE2635
+ 44527 00000000
+ 44528 bd5e 34 .uleb128 0x34
+ 44529 bd5f 980D0000 .long 0xd98
+ 44530 bd63 03 .byte 0x3
+ 44531 bd64 91 .byte 0x91
+ 44532 bd65 8072 .sleb128 -1792
+ 44533 bd67 34 .uleb128 0x34
+ 44534 bd68 A40D0000 .long 0xda4
+ 44535 bd6c 03 .byte 0x3
+ 44536 bd6d 91 .byte 0x91
+ 44537 bd6e F071 .sleb128 -1808
+ 44538 bd70 34 .uleb128 0x34
+ 44539 bd71 AF0D0000 .long 0xdaf
+ 44540 bd75 03 .byte 0x3
+ 44541 bd76 91 .byte 0x91
+ 44542 bd77 E071 .sleb128 -1824
+ 44543 bd79 34 .uleb128 0x34
+ 44544 bd7a BB0D0000 .long 0xdbb
+ 44545 bd7e 03 .byte 0x3
+ 44546 bd7f 91 .byte 0x91
+ 44547 bd80 DC7D .sleb128 -292
+ 44548 bd82 00 .byte 0x0
+ 44549 bd83 00 .byte 0x0
+ 44550 bd84 31 .uleb128 0x31
+ 44551 bd85 C70D0000 .long 0xdc7
+ 44552 bd89 00000000 .quad .LBB2636
+ 44552 00000000
+ 44553 bd91 00000000 .quad .LBE2636
+ 44553 00000000
+ 44554 bd99 02 .byte 0x2
+ 44555 bd9a 6A03 .value 0x36a
+ 44556 bd9c B3BD0000 .long 0xbdb3
+ 44557 bda0 32 .uleb128 0x32
+ 44558 bda1 E20D0000 .long 0xde2
+ 44559 bda5 03 .byte 0x3
+ 44560 bda6 91 .byte 0x91
+ 44561 bda7 E07D .sleb128 -288
+ 44562 bda9 32 .uleb128 0x32
+ 44563 bdaa D80D0000 .long 0xdd8
+ 44564 bdae 03 .byte 0x3
+ 44565 bdaf 91 .byte 0x91
+ 44566 bdb0 F07D .sleb128 -272
+ 44567 bdb2 00 .byte 0x0
+ 44568 bdb3 31 .uleb128 0x31
+ 44569 bdb4 ED0D0000 .long 0xded
+ 44570 bdb8 00000000 .quad .LBB2638
+ 44570 00000000
+ 44571 bdc0 00000000 .quad .LBE2638
+ 44571 00000000
+ 44572 bdc8 02 .byte 0x2
+ 44573 bdc9 6C03 .value 0x36c
+ 44574 bdcb E2BD0000 .long 0xbde2
+ 44575 bdcf 32 .uleb128 0x32
+ 44576 bdd0 0A0E0000 .long 0xe0a
+ 44577 bdd4 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1141
+
+
+ 44578 bdd5 91 .byte 0x91
+ 44579 bdd6 807E .sleb128 -256
+ 44580 bdd8 32 .uleb128 0x32
+ 44581 bdd9 FF0D0000 .long 0xdff
+ 44582 bddd 03 .byte 0x3
+ 44583 bdde 91 .byte 0x91
+ 44584 bddf 907E .sleb128 -240
+ 44585 bde1 00 .byte 0x0
+ 44586 bde2 35 .uleb128 0x35
+ 44587 bde3 1F0D0000 .long 0xd1f
+ 44588 bde7 00000000 .quad .LBB2640
+ 44588 00000000
+ 44589 bdef 00000000 .quad .LBE2640
+ 44589 00000000
+ 44590 bdf7 02 .byte 0x2
+ 44591 bdf8 6E03 .value 0x36e
+ 44592 bdfa 32 .uleb128 0x32
+ 44593 bdfb 3A0D0000 .long 0xd3a
+ 44594 bdff 03 .byte 0x3
+ 44595 be00 91 .byte 0x91
+ 44596 be01 A07E .sleb128 -224
+ 44597 be03 32 .uleb128 0x32
+ 44598 be04 300D0000 .long 0xd30
+ 44599 be08 03 .byte 0x3
+ 44600 be09 91 .byte 0x91
+ 44601 be0a B07E .sleb128 -208
+ 44602 be0c 00 .byte 0x0
+ 44603 be0d 00 .byte 0x0
+ 44604 be0e 00 .byte 0x0
+ 44605 be0f 00 .byte 0x0
+ 44606 be10 36 .uleb128 0x36
+ 44607 be11 00000000 .quad .LBB2642
+ 44607 00000000
+ 44608 be19 00000000 .quad .LBE2642
+ 44608 00000000
+ 44609 be21 2FBE0000 .long 0xbe2f
+ 44610 be25 34 .uleb128 0x34
+ 44611 be26 E7B10000 .long 0xb1e7
+ 44612 be2a 03 .byte 0x3
+ 44613 be2b 91 .byte 0x91
+ 44614 be2c 9071 .sleb128 -1904
+ 44615 be2e 00 .byte 0x0
+ 44616 be2f 31 .uleb128 0x31
+ 44617 be30 08B10000 .long 0xb108
+ 44618 be34 00000000 .quad .LBB2643
+ 44618 00000000
+ 44619 be3c 00000000 .quad .LBE2643
+ 44619 00000000
+ 44620 be44 02 .byte 0x2
+ 44621 be45 1308 .value 0x813
+ 44622 be47 D7BE0000 .long 0xbed7
+ 44623 be4b 32 .uleb128 0x32
+ 44624 be4c 1AB10000 .long 0xb11a
+ 44625 be50 03 .byte 0x3
+ 44626 be51 91 .byte 0x91
+ 44627 be52 C07E .sleb128 -192
+ 44628 be54 33 .uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s page 1142
+
+
+ 44629 be55 00000000 .quad .LBB2644
+ 44629 00000000
+ 44630 be5d 00000000 .quad .LBE2644
+ 44630 00000000
+ 44631 be65 34 .uleb128 0x34
+ 44632 be66 26B10000 .long 0xb126
+ 44633 be6a 09 .byte 0x9
+ 44634 be6b 03 .byte 0x3
+ 44635 be6c 00000000 .quad ShiftRowTable.6741
+ 44635 00000000
+ 44636 be74 35 .uleb128 0x35
+ 44637 be75 6E0D0000 .long 0xd6e
+ 44638 be79 00000000 .quad .LBB2645
+ 44638 00000000
+ 44639 be81 00000000 .quad .LBE2645
+ 44639 00000000
+ 44640 be89 02 .byte 0x2
+ 44641 be8a 4502 .value 0x245
+ 44642 be8c 32 .uleb128 0x32
+ 44643 be8d 8C0D0000 .long 0xd8c
+ 44644 be91 03 .byte 0x3
+ 44645 be92 91 .byte 0x91
+ 44646 be93 D07E .sleb128 -176
+ 44647 be95 32 .uleb128 0x32
+ 44648 be96 800D0000 .long 0xd80
+ 44649 be9a 03 .byte 0x3
+ 44650 be9b 91 .byte 0x91
+ 44651 be9c E07E .sleb128 -160
+ 44652 be9e 33 .uleb128 0x33
+ 44653 be9f 00000000 .quad .LBB2646
+ 44653 00000000
+ 44654 bea7 00000000 .quad .LBE2646
+ 44654 00000000
+ 44655 beaf 34 .uleb128 0x34
+ 44656 beb0 980D0000 .long 0xd98
+ 44657 beb4 03 .byte 0x3
+ 44658 beb5 91 .byte 0x91
+ 44659 beb6 B072 .sleb128 -1744
+ 44660 beb8 34 .uleb128 0x34
+ 44661 beb9 A40D0000 .long 0xda4
+ 44662 bebd 03 .byte 0x3
+ 44663 bebe 91 .byte 0x91
+ 44664 bebf A072 .sleb128 -1760
+ 44665 bec1 34 .uleb128 0x34
+ 44666 bec2 AF0D0000 .long 0xdaf
+ 44667 bec6 03 .byte 0x3
+ 44668 bec7 91 .byte 0x91
+ 44669 bec8 9072 .sleb128 -1776
+ 44670 beca 34 .uleb128 0x34
+ 44671 becb BB0D0000 .long 0xdbb
+ 44672 becf 03 .byte 0x3
+ 44673 bed0 91 .byte 0x91
+ 44674 bed1 FC7E .sleb128 -132
+ 44675 bed3 00 .byte 0x0
+ 44676 bed4 00 .byte 0x0
+ 44677 bed5 00 .byte 0x0
+ 44678 bed6 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1143
+
+
+ 44679 bed7 36 .uleb128 0x36
+ 44680 bed8 00000000 .quad .LBB2647
+ 44680 00000000
+ 44681 bee0 00000000 .quad .LBE2647
+ 44681 00000000
+ 44682 bee8 F6BE0000 .long 0xbef6
+ 44683 beec 34 .uleb128 0x34
+ 44684 beed F7B10000 .long 0xb1f7
+ 44685 bef1 03 .byte 0x3
+ 44686 bef2 91 .byte 0x91
+ 44687 bef3 8071 .sleb128 -1920
+ 44688 bef5 00 .byte 0x0
+ 44689 bef6 31 .uleb128 0x31
+ 44690 bef7 3EB00000 .long 0xb03e
+ 44691 befb 00000000 .quad .LBB2648
+ 44691 00000000
+ 44692 bf03 00000000 .quad .LBE2648
+ 44692 00000000
+ 44693 bf0b 02 .byte 0x2
+ 44694 bf0c 1708 .value 0x817
+ 44695 bf0e 50BF0000 .long 0xbf50
+ 44696 bf12 32 .uleb128 0x32
+ 44697 bf13 5CB00000 .long 0xb05c
+ 44698 bf17 03 .byte 0x3
+ 44699 bf18 91 .byte 0x91
+ 44700 bf19 807F .sleb128 -128
+ 44701 bf1b 32 .uleb128 0x32
+ 44702 bf1c 50B00000 .long 0xb050
+ 44703 bf20 03 .byte 0x3
+ 44704 bf21 91 .byte 0x91
+ 44705 bf22 907F .sleb128 -112
+ 44706 bf24 35 .uleb128 0x35
+ 44707 bf25 520E0000 .long 0xe52
+ 44708 bf29 00000000 .quad .LBB2650
+ 44708 00000000
+ 44709 bf31 00000000 .quad .LBE2650
+ 44709 00000000
+ 44710 bf39 02 .byte 0x2
+ 44711 bf3a 2302 .value 0x223
+ 44712 bf3c 32 .uleb128 0x32
+ 44713 bf3d 6D0E0000 .long 0xe6d
+ 44714 bf41 03 .byte 0x3
+ 44715 bf42 91 .byte 0x91
+ 44716 bf43 A07F .sleb128 -96
+ 44717 bf45 32 .uleb128 0x32
+ 44718 bf46 630E0000 .long 0xe63
+ 44719 bf4a 03 .byte 0x3
+ 44720 bf4b 91 .byte 0x91
+ 44721 bf4c B07F .sleb128 -80
+ 44722 bf4e 00 .byte 0x0
+ 44723 bf4f 00 .byte 0x0
+ 44724 bf50 36 .uleb128 0x36
+ 44725 bf51 00000000 .quad .LBB2652
+ 44725 00000000
+ 44726 bf59 00000000 .quad .LBE2652
+ 44726 00000000
+ 44727 bf61 6FBF0000 .long 0xbf6f
+
GAS LISTING /tmp/ccMa7HLZ.s page 1144
+
+
+ 44728 bf65 34 .uleb128 0x34
+ 44729 bf66 07B20000 .long 0xb207
+ 44730 bf6a 03 .byte 0x3
+ 44731 bf6b 91 .byte 0x91
+ 44732 bf6c F070 .sleb128 -1936
+ 44733 bf6e 00 .byte 0x0
+ 44734 bf6f 33 .uleb128 0x33
+ 44735 bf70 00000000 .quad .LBB2653
+ 44735 00000000
+ 44736 bf78 00000000 .quad .LBE2653
+ 44736 00000000
+ 44737 bf80 34 .uleb128 0x34
+ 44738 bf81 13B20000 .long 0xb213
+ 44739 bf85 03 .byte 0x3
+ 44740 bf86 91 .byte 0x91
+ 44741 bf87 E070 .sleb128 -1952
+ 44742 bf89 00 .byte 0x0
+ 44743 bf8a 00 .byte 0x0
+ 44744 bf8b 00 .byte 0x0
+ 44745 bf8c 25 .uleb128 0x25
+ 44746 bf8d 00000000 .long .LASF375
+ 44747 bf91 02 .byte 0x2
+ 44748 bf92 5308 .value 0x853
+ 44749 bf94 01 .byte 0x1
+ 44750 bf95 B1010000 .long 0x1b1
+ 44751 bf99 03 .byte 0x3
+ 44752 bf9a E3BF0000 .long 0xbfe3
+ 44753 bf9e 26 .uleb128 0x26
+ 44754 bf9f 00000000 .long .LASF66
+ 44755 bfa3 02 .byte 0x2
+ 44756 bfa4 5308 .value 0x853
+ 44757 bfa6 B1010000 .long 0x1b1
+ 44758 bfaa 26 .uleb128 0x26
+ 44759 bfab 00000000 .long .LASF64
+ 44760 bfaf 02 .byte 0x2
+ 44761 bfb0 5308 .value 0x853
+ 44762 bfb2 B1010000 .long 0x1b1
+ 44763 bfb6 29 .uleb128 0x29
+ 44764 bfb7 C6BF0000 .long 0xbfc6
+ 44765 bfbb 28 .uleb128 0x28
+ 44766 bfbc 7600 .string "v"
+ 44767 bfbe 02 .byte 0x2
+ 44768 bfbf 5508 .value 0x855
+ 44769 bfc1 27050000 .long 0x527
+ 44770 bfc5 00 .byte 0x0
+ 44771 bfc6 29 .uleb128 0x29
+ 44772 bfc7 D6BF0000 .long 0xbfd6
+ 44773 bfcb 28 .uleb128 0x28
+ 44774 bfcc 7600 .string "v"
+ 44775 bfce 02 .byte 0x2
+ 44776 bfcf 5908 .value 0x859
+ 44777 bfd1 27050000 .long 0x527
+ 44778 bfd5 00 .byte 0x0
+ 44779 bfd6 2A .uleb128 0x2a
+ 44780 bfd7 28 .uleb128 0x28
+ 44781 bfd8 7600 .string "v"
+ 44782 bfda 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 1145
+
+
+ 44783 bfdb 5A08 .value 0x85a
+ 44784 bfdd 27050000 .long 0x527
+ 44785 bfe1 00 .byte 0x0
+ 44786 bfe2 00 .byte 0x0
+ 44787 bfe3 25 .uleb128 0x25
+ 44788 bfe4 00000000 .long .LASF376
+ 44789 bfe8 02 .byte 0x2
+ 44790 bfe9 7008 .value 0x870
+ 44791 bfeb 01 .byte 0x1
+ 44792 bfec B1010000 .long 0x1b1
+ 44793 bff0 03 .byte 0x3
+ 44794 bff1 82C00000 .long 0xc082
+ 44795 bff5 26 .uleb128 0x26
+ 44796 bff6 00000000 .long .LASF66
+ 44797 bffa 02 .byte 0x2
+ 44798 bffb 7008 .value 0x870
+ 44799 bffd B1010000 .long 0x1b1
+ 44800 c001 26 .uleb128 0x26
+ 44801 c002 00000000 .long .LASF64
+ 44802 c006 02 .byte 0x2
+ 44803 c007 7108 .value 0x871
+ 44804 c009 B1010000 .long 0x1b1
+ 44805 c00d 27 .uleb128 0x27
+ 44806 c00e 00000000 .long .LASF368
+ 44807 c012 02 .byte 0x2
+ 44808 c013 7408 .value 0x874
+ 44809 c015 B1010000 .long 0x1b1
+ 44810 c019 27 .uleb128 0x27
+ 44811 c01a 00000000 .long .LASF369
+ 44812 c01e 02 .byte 0x2
+ 44813 c01f 7508 .value 0x875
+ 44814 c021 B1010000 .long 0x1b1
+ 44815 c025 29 .uleb128 0x29
+ 44816 c026 35C00000 .long 0xc035
+ 44817 c02a 28 .uleb128 0x28
+ 44818 c02b 7600 .string "v"
+ 44819 c02d 02 .byte 0x2
+ 44820 c02e 7B08 .value 0x87b
+ 44821 c030 27050000 .long 0x527
+ 44822 c034 00 .byte 0x0
+ 44823 c035 29 .uleb128 0x29
+ 44824 c036 45C00000 .long 0xc045
+ 44825 c03a 28 .uleb128 0x28
+ 44826 c03b 7600 .string "v"
+ 44827 c03d 02 .byte 0x2
+ 44828 c03e 8E08 .value 0x88e
+ 44829 c040 27050000 .long 0x527
+ 44830 c044 00 .byte 0x0
+ 44831 c045 29 .uleb128 0x29
+ 44832 c046 55C00000 .long 0xc055
+ 44833 c04a 28 .uleb128 0x28
+ 44834 c04b 7600 .string "v"
+ 44835 c04d 02 .byte 0x2
+ 44836 c04e 9608 .value 0x896
+ 44837 c050 27050000 .long 0x527
+ 44838 c054 00 .byte 0x0
+ 44839 c055 29 .uleb128 0x29
+
GAS LISTING /tmp/ccMa7HLZ.s page 1146
+
+
+ 44840 c056 65C00000 .long 0xc065
+ 44841 c05a 28 .uleb128 0x28
+ 44842 c05b 7600 .string "v"
+ 44843 c05d 02 .byte 0x2
+ 44844 c05e 9E08 .value 0x89e
+ 44845 c060 27050000 .long 0x527
+ 44846 c064 00 .byte 0x0
+ 44847 c065 29 .uleb128 0x29
+ 44848 c066 75C00000 .long 0xc075
+ 44849 c06a 28 .uleb128 0x28
+ 44850 c06b 7600 .string "v"
+ 44851 c06d 02 .byte 0x2
+ 44852 c06e A708 .value 0x8a7
+ 44853 c070 27050000 .long 0x527
+ 44854 c074 00 .byte 0x0
+ 44855 c075 2A .uleb128 0x2a
+ 44856 c076 28 .uleb128 0x28
+ 44857 c077 7600 .string "v"
+ 44858 c079 02 .byte 0x2
+ 44859 c07a A908 .value 0x8a9
+ 44860 c07c 27050000 .long 0x527
+ 44861 c080 00 .byte 0x0
+ 44862 c081 00 .byte 0x0
+ 44863 c082 25 .uleb128 0x25
+ 44864 c083 00000000 .long .LASF377
+ 44865 c087 02 .byte 0x2
+ 44866 c088 8603 .value 0x386
+ 44867 c08a 01 .byte 0x1
+ 44868 c08b B1010000 .long 0x1b1
+ 44869 c08f 03 .byte 0x3
+ 44870 c090 A1C00000 .long 0xc0a1
+ 44871 c094 26 .uleb128 0x26
+ 44872 c095 00000000 .long .LASF66
+ 44873 c099 02 .byte 0x2
+ 44874 c09a 8603 .value 0x386
+ 44875 c09c B1010000 .long 0x1b1
+ 44876 c0a0 00 .byte 0x0
+ 44877 c0a1 25 .uleb128 0x25
+ 44878 c0a2 00000000 .long .LASF378
+ 44879 c0a6 02 .byte 0x2
+ 44880 c0a7 5E02 .value 0x25e
+ 44881 c0a9 01 .byte 0x1
+ 44882 c0aa B1010000 .long 0x1b1
+ 44883 c0ae 03 .byte 0x3
+ 44884 c0af DDC00000 .long 0xc0dd
+ 44885 c0b3 26 .uleb128 0x26
+ 44886 c0b4 00000000 .long .LASF66
+ 44887 c0b8 02 .byte 0x2
+ 44888 c0b9 5E02 .value 0x25e
+ 44889 c0bb B1010000 .long 0x1b1
+ 44890 c0bf 2C .uleb128 0x2c
+ 44891 c0c0 00000000 .long .LASF379
+ 44892 c0c4 02 .byte 0x2
+ 44893 c0c5 6002 .value 0x260
+ 44894 c0c7 DDC00000 .long 0xc0dd
+ 44895 c0cb 10 .byte 0x10
+ 44896 c0cc 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1147
+
+
+ 44897 c0cd 0D .byte 0xd
+ 44898 c0ce 0A .byte 0xa
+ 44899 c0cf 07 .byte 0x7
+ 44900 c0d0 04 .byte 0x4
+ 44901 c0d1 01 .byte 0x1
+ 44902 c0d2 0E .byte 0xe
+ 44903 c0d3 0B .byte 0xb
+ 44904 c0d4 08 .byte 0x8
+ 44905 c0d5 05 .byte 0x5
+ 44906 c0d6 02 .byte 0x2
+ 44907 c0d7 0F .byte 0xf
+ 44908 c0d8 0C .byte 0xc
+ 44909 c0d9 09 .byte 0x9
+ 44910 c0da 06 .byte 0x6
+ 44911 c0db 03 .byte 0x3
+ 44912 c0dc 00 .byte 0x0
+ 44913 c0dd 06 .uleb128 0x6
+ 44914 c0de 60040000 .long 0x460
+ 44915 c0e2 25 .uleb128 0x25
+ 44916 c0e3 00000000 .long .LASF380
+ 44917 c0e7 02 .byte 0x2
+ 44918 c0e8 BA08 .value 0x8ba
+ 44919 c0ea 01 .byte 0x1
+ 44920 c0eb B1010000 .long 0x1b1
+ 44921 c0ef 03 .byte 0x3
+ 44922 c0f0 59C10000 .long 0xc159
+ 44923 c0f4 26 .uleb128 0x26
+ 44924 c0f5 00000000 .long .LASF66
+ 44925 c0f9 02 .byte 0x2
+ 44926 c0fa BA08 .value 0x8ba
+ 44927 c0fc B1010000 .long 0x1b1
+ 44928 c100 26 .uleb128 0x26
+ 44929 c101 00000000 .long .LASF64
+ 44930 c105 02 .byte 0x2
+ 44931 c106 BB08 .value 0x8bb
+ 44932 c108 B1010000 .long 0x1b1
+ 44933 c10c 29 .uleb128 0x29
+ 44934 c10d 1CC10000 .long 0xc11c
+ 44935 c111 28 .uleb128 0x28
+ 44936 c112 7600 .string "v"
+ 44937 c114 02 .byte 0x2
+ 44938 c115 BD08 .value 0x8bd
+ 44939 c117 27050000 .long 0x527
+ 44940 c11b 00 .byte 0x0
+ 44941 c11c 29 .uleb128 0x29
+ 44942 c11d 2CC10000 .long 0xc12c
+ 44943 c121 28 .uleb128 0x28
+ 44944 c122 7600 .string "v"
+ 44945 c124 02 .byte 0x2
+ 44946 c125 C508 .value 0x8c5
+ 44947 c127 27050000 .long 0x527
+ 44948 c12b 00 .byte 0x0
+ 44949 c12c 29 .uleb128 0x29
+ 44950 c12d 3CC10000 .long 0xc13c
+ 44951 c131 28 .uleb128 0x28
+ 44952 c132 7600 .string "v"
+ 44953 c134 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 1148
+
+
+ 44954 c135 C908 .value 0x8c9
+ 44955 c137 27050000 .long 0x527
+ 44956 c13b 00 .byte 0x0
+ 44957 c13c 29 .uleb128 0x29
+ 44958 c13d 4CC10000 .long 0xc14c
+ 44959 c141 28 .uleb128 0x28
+ 44960 c142 7600 .string "v"
+ 44961 c144 02 .byte 0x2
+ 44962 c145 CD08 .value 0x8cd
+ 44963 c147 27050000 .long 0x527
+ 44964 c14b 00 .byte 0x0
+ 44965 c14c 2A .uleb128 0x2a
+ 44966 c14d 28 .uleb128 0x28
+ 44967 c14e 7600 .string "v"
+ 44968 c150 02 .byte 0x2
+ 44969 c151 CE08 .value 0x8ce
+ 44970 c153 27050000 .long 0x527
+ 44971 c157 00 .byte 0x0
+ 44972 c158 00 .byte 0x0
+ 44973 c159 38 .uleb128 0x38
+ 44974 c15a 00000000 .long .LASF381
+ 44975 c15e 02 .byte 0x2
+ 44976 c15f DD08 .value 0x8dd
+ 44977 c161 01 .byte 0x1
+ 44978 c162 B1010000 .long 0x1b1
+ 44979 c166 00000000 .quad .LFB577
+ 44979 00000000
+ 44980 c16e 00000000 .quad .LFE577
+ 44980 00000000
+ 44981 c176 00000000 .long .LLST9
+ 44982 c17a 36D00000 .long 0xd036
+ 44983 c17e 2E .uleb128 0x2e
+ 44984 c17f 00000000 .long .LASF66
+ 44985 c183 02 .byte 0x2
+ 44986 c184 DD08 .value 0x8dd
+ 44987 c186 B1010000 .long 0x1b1
+ 44988 c18a 03 .byte 0x3
+ 44989 c18b 91 .byte 0x91
+ 44990 c18c F06B .sleb128 -2576
+ 44991 c18e 2F .uleb128 0x2f
+ 44992 c18f 6B657900 .string "key"
+ 44993 c193 02 .byte 0x2
+ 44994 c194 DD08 .value 0x8dd
+ 44995 c196 140D0000 .long 0xd14
+ 44996 c19a 03 .byte 0x3
+ 44997 c19b 91 .byte 0x91
+ 44998 c19c E86B .sleb128 -2584
+ 44999 c19e 2F .uleb128 0x2f
+ 45000 c19f 4E7200 .string "Nr"
+ 45001 c1a2 02 .byte 0x2
+ 45002 c1a3 DE08 .value 0x8de
+ 45003 c1a5 6D000000 .long 0x6d
+ 45004 c1a9 03 .byte 0x3
+ 45005 c1aa 91 .byte 0x91
+ 45006 c1ab E46B .sleb128 -2588
+ 45007 c1ad 37 .uleb128 0x37
+ 45008 c1ae 697800 .string "ix"
+
GAS LISTING /tmp/ccMa7HLZ.s page 1149
+
+
+ 45009 c1b1 02 .byte 0x2
+ 45010 c1b2 E008 .value 0x8e0
+ 45011 c1b4 6D000000 .long 0x6d
+ 45012 c1b8 03 .byte 0x3
+ 45013 c1b9 91 .byte 0x91
+ 45014 c1ba CC71 .sleb128 -1844
+ 45015 c1bc 31 .uleb128 0x31
+ 45016 c1bd 8CBF0000 .long 0xbf8c
+ 45017 c1c1 00000000 .quad .LBB2777
+ 45017 00000000
+ 45018 c1c9 00000000 .quad .LBE2777
+ 45018 00000000
+ 45019 c1d1 02 .byte 0x2
+ 45020 c1d2 E208 .value 0x8e2
+ 45021 c1d4 9EC20000 .long 0xc29e
+ 45022 c1d8 32 .uleb128 0x32
+ 45023 c1d9 AABF0000 .long 0xbfaa
+ 45024 c1dd 03 .byte 0x3
+ 45025 c1de 91 .byte 0x91
+ 45026 c1df D071 .sleb128 -1840
+ 45027 c1e1 32 .uleb128 0x32
+ 45028 c1e2 9EBF0000 .long 0xbf9e
+ 45029 c1e6 03 .byte 0x3
+ 45030 c1e7 91 .byte 0x91
+ 45031 c1e8 E071 .sleb128 -1824
+ 45032 c1ea 36 .uleb128 0x36
+ 45033 c1eb 00000000 .quad .LBB2779
+ 45033 00000000
+ 45034 c1f3 00000000 .quad .LBE2779
+ 45034 00000000
+ 45035 c1fb 09C20000 .long 0xc209
+ 45036 c1ff 34 .uleb128 0x34
+ 45037 c200 BBBF0000 .long 0xbfbb
+ 45038 c204 03 .byte 0x3
+ 45039 c205 91 .byte 0x91
+ 45040 c206 A06C .sleb128 -2528
+ 45041 c208 00 .byte 0x0
+ 45042 c209 31 .uleb128 0x31
+ 45043 c20a 3EB00000 .long 0xb03e
+ 45044 c20e 00000000 .quad .LBB2780
+ 45044 00000000
+ 45045 c216 00000000 .quad .LBE2780
+ 45045 00000000
+ 45046 c21e 02 .byte 0x2
+ 45047 c21f 5708 .value 0x857
+ 45048 c221 63C20000 .long 0xc263
+ 45049 c225 32 .uleb128 0x32
+ 45050 c226 5CB00000 .long 0xb05c
+ 45051 c22a 03 .byte 0x3
+ 45052 c22b 91 .byte 0x91
+ 45053 c22c F071 .sleb128 -1808
+ 45054 c22e 32 .uleb128 0x32
+ 45055 c22f 50B00000 .long 0xb050
+ 45056 c233 03 .byte 0x3
+ 45057 c234 91 .byte 0x91
+ 45058 c235 8072 .sleb128 -1792
+ 45059 c237 35 .uleb128 0x35
+
GAS LISTING /tmp/ccMa7HLZ.s page 1150
+
+
+ 45060 c238 520E0000 .long 0xe52
+ 45061 c23c 00000000 .quad .LBB2782
+ 45061 00000000
+ 45062 c244 00000000 .quad .LBE2782
+ 45062 00000000
+ 45063 c24c 02 .byte 0x2
+ 45064 c24d 2302 .value 0x223
+ 45065 c24f 32 .uleb128 0x32
+ 45066 c250 6D0E0000 .long 0xe6d
+ 45067 c254 03 .byte 0x3
+ 45068 c255 91 .byte 0x91
+ 45069 c256 9072 .sleb128 -1776
+ 45070 c258 32 .uleb128 0x32
+ 45071 c259 630E0000 .long 0xe63
+ 45072 c25d 03 .byte 0x3
+ 45073 c25e 91 .byte 0x91
+ 45074 c25f A072 .sleb128 -1760
+ 45075 c261 00 .byte 0x0
+ 45076 c262 00 .byte 0x0
+ 45077 c263 36 .uleb128 0x36
+ 45078 c264 00000000 .quad .LBB2784
+ 45078 00000000
+ 45079 c26c 00000000 .quad .LBE2784
+ 45079 00000000
+ 45080 c274 82C20000 .long 0xc282
+ 45081 c278 34 .uleb128 0x34
+ 45082 c279 CBBF0000 .long 0xbfcb
+ 45083 c27d 03 .byte 0x3
+ 45084 c27e 91 .byte 0x91
+ 45085 c27f 906C .sleb128 -2544
+ 45086 c281 00 .byte 0x0
+ 45087 c282 33 .uleb128 0x33
+ 45088 c283 00000000 .quad .LBB2785
+ 45088 00000000
+ 45089 c28b 00000000 .quad .LBE2785
+ 45089 00000000
+ 45090 c293 34 .uleb128 0x34
+ 45091 c294 D7BF0000 .long 0xbfd7
+ 45092 c298 03 .byte 0x3
+ 45093 c299 91 .byte 0x91
+ 45094 c29a 806C .sleb128 -2560
+ 45095 c29c 00 .byte 0x0
+ 45096 c29d 00 .byte 0x0
+ 45097 c29e 31 .uleb128 0x31
+ 45098 c29f E3BF0000 .long 0xbfe3
+ 45099 c2a3 00000000 .quad .LBB2786
+ 45099 00000000
+ 45100 c2ab 00000000 .quad .LBE2786
+ 45100 00000000
+ 45101 c2b3 02 .byte 0x2
+ 45102 c2b4 E508 .value 0x8e5
+ 45103 c2b6 01CC0000 .long 0xcc01
+ 45104 c2ba 32 .uleb128 0x32
+ 45105 c2bb 01C00000 .long 0xc001
+ 45106 c2bf 03 .byte 0x3
+ 45107 c2c0 91 .byte 0x91
+ 45108 c2c1 B072 .sleb128 -1744
+
GAS LISTING /tmp/ccMa7HLZ.s page 1151
+
+
+ 45109 c2c3 32 .uleb128 0x32
+ 45110 c2c4 F5BF0000 .long 0xbff5
+ 45111 c2c8 03 .byte 0x3
+ 45112 c2c9 91 .byte 0x91
+ 45113 c2ca C072 .sleb128 -1728
+ 45114 c2cc 33 .uleb128 0x33
+ 45115 c2cd 00000000 .quad .LBB2787
+ 45115 00000000
+ 45116 c2d5 00000000 .quad .LBE2787
+ 45116 00000000
+ 45117 c2dd 34 .uleb128 0x34
+ 45118 c2de 0DC00000 .long 0xc00d
+ 45119 c2e2 03 .byte 0x3
+ 45120 c2e3 91 .byte 0x91
+ 45121 c2e4 E072 .sleb128 -1696
+ 45122 c2e6 34 .uleb128 0x34
+ 45123 c2e7 19C00000 .long 0xc019
+ 45124 c2eb 03 .byte 0x3
+ 45125 c2ec 91 .byte 0x91
+ 45126 c2ed D072 .sleb128 -1712
+ 45127 c2ef 36 .uleb128 0x36
+ 45128 c2f0 00000000 .quad .LBB2788
+ 45128 00000000
+ 45129 c2f8 00000000 .quad .LBE2788
+ 45129 00000000
+ 45130 c300 0EC30000 .long 0xc30e
+ 45131 c304 34 .uleb128 0x34
+ 45132 c305 2AC00000 .long 0xc02a
+ 45133 c309 03 .byte 0x3
+ 45134 c30a 91 .byte 0x91
+ 45135 c30b 806D .sleb128 -2432
+ 45136 c30d 00 .byte 0x0
+ 45137 c30e 31 .uleb128 0x31
+ 45138 c30f 82C00000 .long 0xc082
+ 45139 c313 00000000 .quad .LBB2789
+ 45139 00000000
+ 45140 c31b 00000000 .quad .LBE2789
+ 45140 00000000
+ 45141 c323 02 .byte 0x2
+ 45142 c324 8908 .value 0x889
+ 45143 c326 7EC50000 .long 0xc57e
+ 45144 c32a 32 .uleb128 0x32
+ 45145 c32b 94C00000 .long 0xc094
+ 45146 c32f 03 .byte 0x3
+ 45147 c330 91 .byte 0x91
+ 45148 c331 F072 .sleb128 -1680
+ 45149 c333 35 .uleb128 0x35
+ 45150 c334 B00C0000 .long 0xcb0
+ 45151 c338 00000000 .quad .LBB2791
+ 45151 00000000
+ 45152 c340 00000000 .quad .LBE2791
+ 45152 00000000
+ 45153 c348 02 .byte 0x2
+ 45154 c349 8803 .value 0x388
+ 45155 c34b 32 .uleb128 0x32
+ 45156 c34c CE0C0000 .long 0xcce
+ 45157 c350 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1152
+
+
+ 45158 c351 91 .byte 0x91
+ 45159 c352 8873 .sleb128 -1656
+ 45160 c354 32 .uleb128 0x32
+ 45161 c355 C20C0000 .long 0xcc2
+ 45162 c359 03 .byte 0x3
+ 45163 c35a 91 .byte 0x91
+ 45164 c35b 9073 .sleb128 -1648
+ 45165 c35d 33 .uleb128 0x33
+ 45166 c35e 00000000 .quad .LBB2792
+ 45166 00000000
+ 45167 c366 00000000 .quad .LBE2792
+ 45167 00000000
+ 45168 c36e 34 .uleb128 0x34
+ 45169 c36f DA0C0000 .long 0xcda
+ 45170 c373 03 .byte 0x3
+ 45171 c374 91 .byte 0x91
+ 45172 c375 E073 .sleb128 -1568
+ 45173 c377 34 .uleb128 0x34
+ 45174 c378 E50C0000 .long 0xce5
+ 45175 c37c 03 .byte 0x3
+ 45176 c37d 91 .byte 0x91
+ 45177 c37e D073 .sleb128 -1584
+ 45178 c380 34 .uleb128 0x34
+ 45179 c381 F00C0000 .long 0xcf0
+ 45180 c385 03 .byte 0x3
+ 45181 c386 91 .byte 0x91
+ 45182 c387 C073 .sleb128 -1600
+ 45183 c389 34 .uleb128 0x34
+ 45184 c38a FC0C0000 .long 0xcfc
+ 45185 c38e 03 .byte 0x3
+ 45186 c38f 91 .byte 0x91
+ 45187 c390 B073 .sleb128 -1616
+ 45188 c392 34 .uleb128 0x34
+ 45189 c393 080D0000 .long 0xd08
+ 45190 c397 03 .byte 0x3
+ 45191 c398 91 .byte 0x91
+ 45192 c399 AC73 .sleb128 -1620
+ 45193 c39b 31 .uleb128 0x31
+ 45194 c39c 1F0D0000 .long 0xd1f
+ 45195 c3a0 00000000 .quad .LBB2793
+ 45195 00000000
+ 45196 c3a8 00000000 .quad .LBE2793
+ 45196 00000000
+ 45197 c3b0 02 .byte 0x2
+ 45198 c3b1 5603 .value 0x356
+ 45199 c3b3 CAC30000 .long 0xc3ca
+ 45200 c3b7 32 .uleb128 0x32
+ 45201 c3b8 3A0D0000 .long 0xd3a
+ 45202 c3bc 03 .byte 0x3
+ 45203 c3bd 91 .byte 0x91
+ 45204 c3be F073 .sleb128 -1552
+ 45205 c3c0 32 .uleb128 0x32
+ 45206 c3c1 300D0000 .long 0xd30
+ 45207 c3c5 03 .byte 0x3
+ 45208 c3c6 91 .byte 0x91
+ 45209 c3c7 8074 .sleb128 -1536
+ 45210 c3c9 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1153
+
+
+ 45211 c3ca 31 .uleb128 0x31
+ 45212 c3cb 450D0000 .long 0xd45
+ 45213 c3cf 00000000 .quad .LBB2795
+ 45213 00000000
+ 45214 c3d7 00000000 .quad .LBE2795
+ 45214 00000000
+ 45215 c3df 02 .byte 0x2
+ 45216 c3e0 5E03 .value 0x35e
+ 45217 c3e2 F9C30000 .long 0xc3f9
+ 45218 c3e6 32 .uleb128 0x32
+ 45219 c3e7 620D0000 .long 0xd62
+ 45220 c3eb 03 .byte 0x3
+ 45221 c3ec 91 .byte 0x91
+ 45222 c3ed 9074 .sleb128 -1520
+ 45223 c3ef 32 .uleb128 0x32
+ 45224 c3f0 570D0000 .long 0xd57
+ 45225 c3f4 03 .byte 0x3
+ 45226 c3f5 91 .byte 0x91
+ 45227 c3f6 A074 .sleb128 -1504
+ 45228 c3f8 00 .byte 0x0
+ 45229 c3f9 31 .uleb128 0x31
+ 45230 c3fa 6E0D0000 .long 0xd6e
+ 45231 c3fe 00000000 .quad .LBB2797
+ 45231 00000000
+ 45232 c406 00000000 .quad .LBE2797
+ 45232 00000000
+ 45233 c40e 02 .byte 0x2
+ 45234 c40f 6403 .value 0x364
+ 45235 c411 5EC40000 .long 0xc45e
+ 45236 c415 32 .uleb128 0x32
+ 45237 c416 8C0D0000 .long 0xd8c
+ 45238 c41a 03 .byte 0x3
+ 45239 c41b 91 .byte 0x91
+ 45240 c41c B074 .sleb128 -1488
+ 45241 c41e 32 .uleb128 0x32
+ 45242 c41f 800D0000 .long 0xd80
+ 45243 c423 03 .byte 0x3
+ 45244 c424 91 .byte 0x91
+ 45245 c425 C074 .sleb128 -1472
+ 45246 c427 33 .uleb128 0x33
+ 45247 c428 00000000 .quad .LBB2798
+ 45247 00000000
+ 45248 c430 00000000 .quad .LBE2798
+ 45248 00000000
+ 45249 c438 34 .uleb128 0x34
+ 45250 c439 980D0000 .long 0xd98
+ 45251 c43d 03 .byte 0x3
+ 45252 c43e 91 .byte 0x91
+ 45253 c43f B06D .sleb128 -2384
+ 45254 c441 34 .uleb128 0x34
+ 45255 c442 A40D0000 .long 0xda4
+ 45256 c446 03 .byte 0x3
+ 45257 c447 91 .byte 0x91
+ 45258 c448 A06D .sleb128 -2400
+ 45259 c44a 34 .uleb128 0x34
+ 45260 c44b AF0D0000 .long 0xdaf
+ 45261 c44f 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1154
+
+
+ 45262 c450 91 .byte 0x91
+ 45263 c451 906D .sleb128 -2416
+ 45264 c453 34 .uleb128 0x34
+ 45265 c454 BB0D0000 .long 0xdbb
+ 45266 c458 03 .byte 0x3
+ 45267 c459 91 .byte 0x91
+ 45268 c45a DC74 .sleb128 -1444
+ 45269 c45c 00 .byte 0x0
+ 45270 c45d 00 .byte 0x0
+ 45271 c45e 31 .uleb128 0x31
+ 45272 c45f C70D0000 .long 0xdc7
+ 45273 c463 00000000 .quad .LBB2799
+ 45273 00000000
+ 45274 c46b 00000000 .quad .LBE2799
+ 45274 00000000
+ 45275 c473 02 .byte 0x2
+ 45276 c474 6603 .value 0x366
+ 45277 c476 8DC40000 .long 0xc48d
+ 45278 c47a 32 .uleb128 0x32
+ 45279 c47b E20D0000 .long 0xde2
+ 45280 c47f 03 .byte 0x3
+ 45281 c480 91 .byte 0x91
+ 45282 c481 E074 .sleb128 -1440
+ 45283 c483 32 .uleb128 0x32
+ 45284 c484 D80D0000 .long 0xdd8
+ 45285 c488 03 .byte 0x3
+ 45286 c489 91 .byte 0x91
+ 45287 c48a F074 .sleb128 -1424
+ 45288 c48c 00 .byte 0x0
+ 45289 c48d 31 .uleb128 0x31
+ 45290 c48e 6E0D0000 .long 0xd6e
+ 45291 c492 00000000 .quad .LBB2801
+ 45291 00000000
+ 45292 c49a 00000000 .quad .LBE2801
+ 45292 00000000
+ 45293 c4a2 02 .byte 0x2
+ 45294 c4a3 6803 .value 0x368
+ 45295 c4a5 F2C40000 .long 0xc4f2
+ 45296 c4a9 32 .uleb128 0x32
+ 45297 c4aa 8C0D0000 .long 0xd8c
+ 45298 c4ae 03 .byte 0x3
+ 45299 c4af 91 .byte 0x91
+ 45300 c4b0 8075 .sleb128 -1408
+ 45301 c4b2 32 .uleb128 0x32
+ 45302 c4b3 800D0000 .long 0xd80
+ 45303 c4b7 03 .byte 0x3
+ 45304 c4b8 91 .byte 0x91
+ 45305 c4b9 9075 .sleb128 -1392
+ 45306 c4bb 33 .uleb128 0x33
+ 45307 c4bc 00000000 .quad .LBB2802
+ 45307 00000000
+ 45308 c4c4 00000000 .quad .LBE2802
+ 45308 00000000
+ 45309 c4cc 34 .uleb128 0x34
+ 45310 c4cd 980D0000 .long 0xd98
+ 45311 c4d1 03 .byte 0x3
+ 45312 c4d2 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1155
+
+
+ 45313 c4d3 E06D .sleb128 -2336
+ 45314 c4d5 34 .uleb128 0x34
+ 45315 c4d6 A40D0000 .long 0xda4
+ 45316 c4da 03 .byte 0x3
+ 45317 c4db 91 .byte 0x91
+ 45318 c4dc D06D .sleb128 -2352
+ 45319 c4de 34 .uleb128 0x34
+ 45320 c4df AF0D0000 .long 0xdaf
+ 45321 c4e3 03 .byte 0x3
+ 45322 c4e4 91 .byte 0x91
+ 45323 c4e5 C06D .sleb128 -2368
+ 45324 c4e7 34 .uleb128 0x34
+ 45325 c4e8 BB0D0000 .long 0xdbb
+ 45326 c4ec 03 .byte 0x3
+ 45327 c4ed 91 .byte 0x91
+ 45328 c4ee AC75 .sleb128 -1364
+ 45329 c4f0 00 .byte 0x0
+ 45330 c4f1 00 .byte 0x0
+ 45331 c4f2 31 .uleb128 0x31
+ 45332 c4f3 C70D0000 .long 0xdc7
+ 45333 c4f7 00000000 .quad .LBB2803
+ 45333 00000000
+ 45334 c4ff 00000000 .quad .LBE2803
+ 45334 00000000
+ 45335 c507 02 .byte 0x2
+ 45336 c508 6A03 .value 0x36a
+ 45337 c50a 21C50000 .long 0xc521
+ 45338 c50e 32 .uleb128 0x32
+ 45339 c50f E20D0000 .long 0xde2
+ 45340 c513 03 .byte 0x3
+ 45341 c514 91 .byte 0x91
+ 45342 c515 B075 .sleb128 -1360
+ 45343 c517 32 .uleb128 0x32
+ 45344 c518 D80D0000 .long 0xdd8
+ 45345 c51c 03 .byte 0x3
+ 45346 c51d 91 .byte 0x91
+ 45347 c51e C075 .sleb128 -1344
+ 45348 c520 00 .byte 0x0
+ 45349 c521 31 .uleb128 0x31
+ 45350 c522 ED0D0000 .long 0xded
+ 45351 c526 00000000 .quad .LBB2805
+ 45351 00000000
+ 45352 c52e 00000000 .quad .LBE2805
+ 45352 00000000
+ 45353 c536 02 .byte 0x2
+ 45354 c537 6C03 .value 0x36c
+ 45355 c539 50C50000 .long 0xc550
+ 45356 c53d 32 .uleb128 0x32
+ 45357 c53e 0A0E0000 .long 0xe0a
+ 45358 c542 03 .byte 0x3
+ 45359 c543 91 .byte 0x91
+ 45360 c544 D075 .sleb128 -1328
+ 45361 c546 32 .uleb128 0x32
+ 45362 c547 FF0D0000 .long 0xdff
+ 45363 c54b 03 .byte 0x3
+ 45364 c54c 91 .byte 0x91
+ 45365 c54d E075 .sleb128 -1312
+
GAS LISTING /tmp/ccMa7HLZ.s page 1156
+
+
+ 45366 c54f 00 .byte 0x0
+ 45367 c550 35 .uleb128 0x35
+ 45368 c551 1F0D0000 .long 0xd1f
+ 45369 c555 00000000 .quad .LBB2807
+ 45369 00000000
+ 45370 c55d 00000000 .quad .LBE2807
+ 45370 00000000
+ 45371 c565 02 .byte 0x2
+ 45372 c566 6E03 .value 0x36e
+ 45373 c568 32 .uleb128 0x32
+ 45374 c569 3A0D0000 .long 0xd3a
+ 45375 c56d 03 .byte 0x3
+ 45376 c56e 91 .byte 0x91
+ 45377 c56f F075 .sleb128 -1296
+ 45378 c571 32 .uleb128 0x32
+ 45379 c572 300D0000 .long 0xd30
+ 45380 c576 03 .byte 0x3
+ 45381 c577 91 .byte 0x91
+ 45382 c578 8076 .sleb128 -1280
+ 45383 c57a 00 .byte 0x0
+ 45384 c57b 00 .byte 0x0
+ 45385 c57c 00 .byte 0x0
+ 45386 c57d 00 .byte 0x0
+ 45387 c57e 36 .uleb128 0x36
+ 45388 c57f 00000000 .quad .LBB2809
+ 45388 00000000
+ 45389 c587 00000000 .quad .LBE2809
+ 45389 00000000
+ 45390 c58f 9DC50000 .long 0xc59d
+ 45391 c593 34 .uleb128 0x34
+ 45392 c594 3AC00000 .long 0xc03a
+ 45393 c598 03 .byte 0x3
+ 45394 c599 91 .byte 0x91
+ 45395 c59a F06C .sleb128 -2448
+ 45396 c59c 00 .byte 0x0
+ 45397 c59d 31 .uleb128 0x31
+ 45398 c59e A1C00000 .long 0xc0a1
+ 45399 c5a2 00000000 .quad .LBB2810
+ 45399 00000000
+ 45400 c5aa 00000000 .quad .LBE2810
+ 45400 00000000
+ 45401 c5b2 02 .byte 0x2
+ 45402 c5b3 9108 .value 0x891
+ 45403 c5b5 45C60000 .long 0xc645
+ 45404 c5b9 32 .uleb128 0x32
+ 45405 c5ba B3C00000 .long 0xc0b3
+ 45406 c5be 03 .byte 0x3
+ 45407 c5bf 91 .byte 0x91
+ 45408 c5c0 9076 .sleb128 -1264
+ 45409 c5c2 33 .uleb128 0x33
+ 45410 c5c3 00000000 .quad .LBB2811
+ 45410 00000000
+ 45411 c5cb 00000000 .quad .LBE2811
+ 45411 00000000
+ 45412 c5d3 34 .uleb128 0x34
+ 45413 c5d4 BFC00000 .long 0xc0bf
+ 45414 c5d8 09 .byte 0x9
+
GAS LISTING /tmp/ccMa7HLZ.s page 1157
+
+
+ 45415 c5d9 03 .byte 0x3
+ 45416 c5da 00000000 .quad InvShiftRowTable.6750
+ 45416 00000000
+ 45417 c5e2 35 .uleb128 0x35
+ 45418 c5e3 6E0D0000 .long 0xd6e
+ 45419 c5e7 00000000 .quad .LBB2812
+ 45419 00000000
+ 45420 c5ef 00000000 .quad .LBE2812
+ 45420 00000000
+ 45421 c5f7 02 .byte 0x2
+ 45422 c5f8 6402 .value 0x264
+ 45423 c5fa 32 .uleb128 0x32
+ 45424 c5fb 8C0D0000 .long 0xd8c
+ 45425 c5ff 03 .byte 0x3
+ 45426 c600 91 .byte 0x91
+ 45427 c601 A076 .sleb128 -1248
+ 45428 c603 32 .uleb128 0x32
+ 45429 c604 800D0000 .long 0xd80
+ 45430 c608 03 .byte 0x3
+ 45431 c609 91 .byte 0x91
+ 45432 c60a B076 .sleb128 -1232
+ 45433 c60c 33 .uleb128 0x33
+ 45434 c60d 00000000 .quad .LBB2813
+ 45434 00000000
+ 45435 c615 00000000 .quad .LBE2813
+ 45435 00000000
+ 45436 c61d 34 .uleb128 0x34
+ 45437 c61e 980D0000 .long 0xd98
+ 45438 c622 03 .byte 0x3
+ 45439 c623 91 .byte 0x91
+ 45440 c624 906E .sleb128 -2288
+ 45441 c626 34 .uleb128 0x34
+ 45442 c627 A40D0000 .long 0xda4
+ 45443 c62b 03 .byte 0x3
+ 45444 c62c 91 .byte 0x91
+ 45445 c62d 806E .sleb128 -2304
+ 45446 c62f 34 .uleb128 0x34
+ 45447 c630 AF0D0000 .long 0xdaf
+ 45448 c634 03 .byte 0x3
+ 45449 c635 91 .byte 0x91
+ 45450 c636 F06D .sleb128 -2320
+ 45451 c638 34 .uleb128 0x34
+ 45452 c639 BB0D0000 .long 0xdbb
+ 45453 c63d 03 .byte 0x3
+ 45454 c63e 91 .byte 0x91
+ 45455 c63f CC76 .sleb128 -1204
+ 45456 c641 00 .byte 0x0
+ 45457 c642 00 .byte 0x0
+ 45458 c643 00 .byte 0x0
+ 45459 c644 00 .byte 0x0
+ 45460 c645 36 .uleb128 0x36
+ 45461 c646 00000000 .quad .LBB2814
+ 45461 00000000
+ 45462 c64e 00000000 .quad .LBE2814
+ 45462 00000000
+ 45463 c656 64C60000 .long 0xc664
+ 45464 c65a 34 .uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s page 1158
+
+
+ 45465 c65b 4AC00000 .long 0xc04a
+ 45466 c65f 03 .byte 0x3
+ 45467 c660 91 .byte 0x91
+ 45468 c661 E06C .sleb128 -2464
+ 45469 c663 00 .byte 0x0
+ 45470 c664 31 .uleb128 0x31
+ 45471 c665 DCA80000 .long 0xa8dc
+ 45472 c669 00000000 .quad .LBB2815
+ 45472 00000000
+ 45473 c671 00000000 .quad .LBE2815
+ 45473 00000000
+ 45474 c679 02 .byte 0x2
+ 45475 c67a 9908 .value 0x899
+ 45476 c67c 4CCB0000 .long 0xcb4c
+ 45477 c680 32 .uleb128 0x32
+ 45478 c681 EEA80000 .long 0xa8ee
+ 45479 c685 03 .byte 0x3
+ 45480 c686 91 .byte 0x91
+ 45481 c687 D076 .sleb128 -1200
+ 45482 c689 33 .uleb128 0x33
+ 45483 c68a 00000000 .quad .LBB2816
+ 45483 00000000
+ 45484 c692 00000000 .quad .LBE2816
+ 45484 00000000
+ 45485 c69a 34 .uleb128 0x34
+ 45486 c69b FAA80000 .long 0xa8fa
+ 45487 c69f 03 .byte 0x3
+ 45488 c6a0 76 .byte 0x76
+ 45489 c6a1 E06B .sleb128 -2592
+ 45490 c6a3 34 .uleb128 0x34
+ 45491 c6a4 05A90000 .long 0xa905
+ 45492 c6a8 03 .byte 0x3
+ 45493 c6a9 76 .byte 0x76
+ 45494 c6aa D06B .sleb128 -2608
+ 45495 c6ac 34 .uleb128 0x34
+ 45496 c6ad 10A90000 .long 0xa910
+ 45497 c6b1 03 .byte 0x3
+ 45498 c6b2 76 .byte 0x76
+ 45499 c6b3 C06B .sleb128 -2624
+ 45500 c6b5 34 .uleb128 0x34
+ 45501 c6b6 1BA90000 .long 0xa91b
+ 45502 c6ba 03 .byte 0x3
+ 45503 c6bb 76 .byte 0x76
+ 45504 c6bc B06B .sleb128 -2640
+ 45505 c6be 34 .uleb128 0x34
+ 45506 c6bf 26A90000 .long 0xa926
+ 45507 c6c3 03 .byte 0x3
+ 45508 c6c4 76 .byte 0x76
+ 45509 c6c5 A06B .sleb128 -2656
+ 45510 c6c7 34 .uleb128 0x34
+ 45511 c6c8 31A90000 .long 0xa931
+ 45512 c6cc 03 .byte 0x3
+ 45513 c6cd 76 .byte 0x76
+ 45514 c6ce 906B .sleb128 -2672
+ 45515 c6d0 31 .uleb128 0x31
+ 45516 c6d1 160E0000 .long 0xe16
+ 45517 c6d5 00000000 .quad .LBB2817
+
GAS LISTING /tmp/ccMa7HLZ.s page 1159
+
+
+ 45517 00000000
+ 45518 c6dd 00000000 .quad .LBE2817
+ 45518 00000000
+ 45519 c6e5 02 .byte 0x2
+ 45520 c6e6 5204 .value 0x452
+ 45521 c6e8 78C70000 .long 0xc778
+ 45522 c6ec 32 .uleb128 0x32
+ 45523 c6ed 280E0000 .long 0xe28
+ 45524 c6f1 03 .byte 0x3
+ 45525 c6f2 91 .byte 0x91
+ 45526 c6f3 F076 .sleb128 -1168
+ 45527 c6f5 33 .uleb128 0x33
+ 45528 c6f6 00000000 .quad .LBB2818
+ 45528 00000000
+ 45529 c6fe 00000000 .quad .LBE2818
+ 45529 00000000
+ 45530 c706 34 .uleb128 0x34
+ 45531 c707 340E0000 .long 0xe34
+ 45532 c70b 09 .byte 0x9
+ 45533 c70c 03 .byte 0x3
+ 45534 c70d 00000000 .quad ShiftRowTable.6768
+ 45534 00000000
+ 45535 c715 35 .uleb128 0x35
+ 45536 c716 6E0D0000 .long 0xd6e
+ 45537 c71a 00000000 .quad .LBB2819
+ 45537 00000000
+ 45538 c722 00000000 .quad .LBE2819
+ 45538 00000000
+ 45539 c72a 02 .byte 0x2
+ 45540 c72b 9B02 .value 0x29b
+ 45541 c72d 32 .uleb128 0x32
+ 45542 c72e 8C0D0000 .long 0xd8c
+ 45543 c732 03 .byte 0x3
+ 45544 c733 91 .byte 0x91
+ 45545 c734 8077 .sleb128 -1152
+ 45546 c736 32 .uleb128 0x32
+ 45547 c737 800D0000 .long 0xd80
+ 45548 c73b 03 .byte 0x3
+ 45549 c73c 91 .byte 0x91
+ 45550 c73d 9077 .sleb128 -1136
+ 45551 c73f 33 .uleb128 0x33
+ 45552 c740 00000000 .quad .LBB2820
+ 45552 00000000
+ 45553 c748 00000000 .quad .LBE2820
+ 45553 00000000
+ 45554 c750 34 .uleb128 0x34
+ 45555 c751 980D0000 .long 0xd98
+ 45556 c755 03 .byte 0x3
+ 45557 c756 91 .byte 0x91
+ 45558 c757 F06E .sleb128 -2192
+ 45559 c759 34 .uleb128 0x34
+ 45560 c75a A40D0000 .long 0xda4
+ 45561 c75e 03 .byte 0x3
+ 45562 c75f 91 .byte 0x91
+ 45563 c760 E06E .sleb128 -2208
+ 45564 c762 34 .uleb128 0x34
+ 45565 c763 AF0D0000 .long 0xdaf
+
GAS LISTING /tmp/ccMa7HLZ.s page 1160
+
+
+ 45566 c767 03 .byte 0x3
+ 45567 c768 91 .byte 0x91
+ 45568 c769 D06E .sleb128 -2224
+ 45569 c76b 34 .uleb128 0x34
+ 45570 c76c BB0D0000 .long 0xdbb
+ 45571 c770 03 .byte 0x3
+ 45572 c771 91 .byte 0x91
+ 45573 c772 AC77 .sleb128 -1108
+ 45574 c774 00 .byte 0x0
+ 45575 c775 00 .byte 0x0
+ 45576 c776 00 .byte 0x0
+ 45577 c777 00 .byte 0x0
+ 45578 c778 31 .uleb128 0x31
+ 45579 c779 160E0000 .long 0xe16
+ 45580 c77d 00000000 .quad .LBB2821
+ 45580 00000000
+ 45581 c785 00000000 .quad .LBE2821
+ 45581 00000000
+ 45582 c78d 02 .byte 0x2
+ 45583 c78e 5304 .value 0x453
+ 45584 c790 20C80000 .long 0xc820
+ 45585 c794 32 .uleb128 0x32
+ 45586 c795 280E0000 .long 0xe28
+ 45587 c799 03 .byte 0x3
+ 45588 c79a 91 .byte 0x91
+ 45589 c79b B077 .sleb128 -1104
+ 45590 c79d 33 .uleb128 0x33
+ 45591 c79e 00000000 .quad .LBB2822
+ 45591 00000000
+ 45592 c7a6 00000000 .quad .LBE2822
+ 45592 00000000
+ 45593 c7ae 34 .uleb128 0x34
+ 45594 c7af 340E0000 .long 0xe34
+ 45595 c7b3 09 .byte 0x9
+ 45596 c7b4 03 .byte 0x3
+ 45597 c7b5 00000000 .quad ShiftRowTable.6768
+ 45597 00000000
+ 45598 c7bd 35 .uleb128 0x35
+ 45599 c7be 6E0D0000 .long 0xd6e
+ 45600 c7c2 00000000 .quad .LBB2823
+ 45600 00000000
+ 45601 c7ca 00000000 .quad .LBE2823
+ 45601 00000000
+ 45602 c7d2 02 .byte 0x2
+ 45603 c7d3 9B02 .value 0x29b
+ 45604 c7d5 32 .uleb128 0x32
+ 45605 c7d6 8C0D0000 .long 0xd8c
+ 45606 c7da 03 .byte 0x3
+ 45607 c7db 91 .byte 0x91
+ 45608 c7dc C077 .sleb128 -1088
+ 45609 c7de 32 .uleb128 0x32
+ 45610 c7df 800D0000 .long 0xd80
+ 45611 c7e3 03 .byte 0x3
+ 45612 c7e4 91 .byte 0x91
+ 45613 c7e5 D077 .sleb128 -1072
+ 45614 c7e7 33 .uleb128 0x33
+ 45615 c7e8 00000000 .quad .LBB2824
+
GAS LISTING /tmp/ccMa7HLZ.s page 1161
+
+
+ 45615 00000000
+ 45616 c7f0 00000000 .quad .LBE2824
+ 45616 00000000
+ 45617 c7f8 34 .uleb128 0x34
+ 45618 c7f9 980D0000 .long 0xd98
+ 45619 c7fd 03 .byte 0x3
+ 45620 c7fe 91 .byte 0x91
+ 45621 c7ff A06F .sleb128 -2144
+ 45622 c801 34 .uleb128 0x34
+ 45623 c802 A40D0000 .long 0xda4
+ 45624 c806 03 .byte 0x3
+ 45625 c807 91 .byte 0x91
+ 45626 c808 906F .sleb128 -2160
+ 45627 c80a 34 .uleb128 0x34
+ 45628 c80b AF0D0000 .long 0xdaf
+ 45629 c80f 03 .byte 0x3
+ 45630 c810 91 .byte 0x91
+ 45631 c811 806F .sleb128 -2176
+ 45632 c813 34 .uleb128 0x34
+ 45633 c814 BB0D0000 .long 0xdbb
+ 45634 c818 03 .byte 0x3
+ 45635 c819 91 .byte 0x91
+ 45636 c81a EC77 .sleb128 -1044
+ 45637 c81c 00 .byte 0x0
+ 45638 c81d 00 .byte 0x0
+ 45639 c81e 00 .byte 0x0
+ 45640 c81f 00 .byte 0x0
+ 45641 c820 31 .uleb128 0x31
+ 45642 c821 160E0000 .long 0xe16
+ 45643 c825 00000000 .quad .LBB2825
+ 45643 00000000
+ 45644 c82d 00000000 .quad .LBE2825
+ 45644 00000000
+ 45645 c835 02 .byte 0x2
+ 45646 c836 5404 .value 0x454
+ 45647 c838 C8C80000 .long 0xc8c8
+ 45648 c83c 32 .uleb128 0x32
+ 45649 c83d 280E0000 .long 0xe28
+ 45650 c841 03 .byte 0x3
+ 45651 c842 91 .byte 0x91
+ 45652 c843 F077 .sleb128 -1040
+ 45653 c845 33 .uleb128 0x33
+ 45654 c846 00000000 .quad .LBB2826
+ 45654 00000000
+ 45655 c84e 00000000 .quad .LBE2826
+ 45655 00000000
+ 45656 c856 34 .uleb128 0x34
+ 45657 c857 340E0000 .long 0xe34
+ 45658 c85b 09 .byte 0x9
+ 45659 c85c 03 .byte 0x3
+ 45660 c85d 00000000 .quad ShiftRowTable.6768
+ 45660 00000000
+ 45661 c865 35 .uleb128 0x35
+ 45662 c866 6E0D0000 .long 0xd6e
+ 45663 c86a 00000000 .quad .LBB2827
+ 45663 00000000
+ 45664 c872 00000000 .quad .LBE2827
+
GAS LISTING /tmp/ccMa7HLZ.s page 1162
+
+
+ 45664 00000000
+ 45665 c87a 02 .byte 0x2
+ 45666 c87b 9B02 .value 0x29b
+ 45667 c87d 32 .uleb128 0x32
+ 45668 c87e 8C0D0000 .long 0xd8c
+ 45669 c882 03 .byte 0x3
+ 45670 c883 91 .byte 0x91
+ 45671 c884 8078 .sleb128 -1024
+ 45672 c886 32 .uleb128 0x32
+ 45673 c887 800D0000 .long 0xd80
+ 45674 c88b 03 .byte 0x3
+ 45675 c88c 91 .byte 0x91
+ 45676 c88d 9078 .sleb128 -1008
+ 45677 c88f 33 .uleb128 0x33
+ 45678 c890 00000000 .quad .LBB2828
+ 45678 00000000
+ 45679 c898 00000000 .quad .LBE2828
+ 45679 00000000
+ 45680 c8a0 34 .uleb128 0x34
+ 45681 c8a1 980D0000 .long 0xd98
+ 45682 c8a5 03 .byte 0x3
+ 45683 c8a6 91 .byte 0x91
+ 45684 c8a7 D06F .sleb128 -2096
+ 45685 c8a9 34 .uleb128 0x34
+ 45686 c8aa A40D0000 .long 0xda4
+ 45687 c8ae 03 .byte 0x3
+ 45688 c8af 91 .byte 0x91
+ 45689 c8b0 C06F .sleb128 -2112
+ 45690 c8b2 34 .uleb128 0x34
+ 45691 c8b3 AF0D0000 .long 0xdaf
+ 45692 c8b7 03 .byte 0x3
+ 45693 c8b8 91 .byte 0x91
+ 45694 c8b9 B06F .sleb128 -2128
+ 45695 c8bb 34 .uleb128 0x34
+ 45696 c8bc BB0D0000 .long 0xdbb
+ 45697 c8c0 03 .byte 0x3
+ 45698 c8c1 91 .byte 0x91
+ 45699 c8c2 AC78 .sleb128 -980
+ 45700 c8c4 00 .byte 0x0
+ 45701 c8c5 00 .byte 0x0
+ 45702 c8c6 00 .byte 0x0
+ 45703 c8c7 00 .byte 0x0
+ 45704 c8c8 31 .uleb128 0x31
+ 45705 c8c9 520E0000 .long 0xe52
+ 45706 c8cd 00000000 .quad .LBB2829
+ 45706 00000000
+ 45707 c8d5 00000000 .quad .LBE2829
+ 45707 00000000
+ 45708 c8dd 02 .byte 0x2
+ 45709 c8de 5604 .value 0x456
+ 45710 c8e0 F7C80000 .long 0xc8f7
+ 45711 c8e4 32 .uleb128 0x32
+ 45712 c8e5 6D0E0000 .long 0xe6d
+ 45713 c8e9 03 .byte 0x3
+ 45714 c8ea 91 .byte 0x91
+ 45715 c8eb B078 .sleb128 -976
+ 45716 c8ed 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 1163
+
+
+ 45717 c8ee 630E0000 .long 0xe63
+ 45718 c8f2 03 .byte 0x3
+ 45719 c8f3 91 .byte 0x91
+ 45720 c8f4 C078 .sleb128 -960
+ 45721 c8f6 00 .byte 0x0
+ 45722 c8f7 31 .uleb128 0x31
+ 45723 c8f8 520E0000 .long 0xe52
+ 45724 c8fc 00000000 .quad .LBB2831
+ 45724 00000000
+ 45725 c904 00000000 .quad .LBE2831
+ 45725 00000000
+ 45726 c90c 02 .byte 0x2
+ 45727 c90d 5704 .value 0x457
+ 45728 c90f 26C90000 .long 0xc926
+ 45729 c913 32 .uleb128 0x32
+ 45730 c914 6D0E0000 .long 0xe6d
+ 45731 c918 03 .byte 0x3
+ 45732 c919 91 .byte 0x91
+ 45733 c91a D078 .sleb128 -944
+ 45734 c91c 32 .uleb128 0x32
+ 45735 c91d 630E0000 .long 0xe63
+ 45736 c921 03 .byte 0x3
+ 45737 c922 91 .byte 0x91
+ 45738 c923 E078 .sleb128 -928
+ 45739 c925 00 .byte 0x0
+ 45740 c926 31 .uleb128 0x31
+ 45741 c927 520E0000 .long 0xe52
+ 45742 c92b 00000000 .quad .LBB2833
+ 45742 00000000
+ 45743 c933 00000000 .quad .LBE2833
+ 45743 00000000
+ 45744 c93b 02 .byte 0x2
+ 45745 c93c 5804 .value 0x458
+ 45746 c93e 55C90000 .long 0xc955
+ 45747 c942 32 .uleb128 0x32
+ 45748 c943 6D0E0000 .long 0xe6d
+ 45749 c947 03 .byte 0x3
+ 45750 c948 91 .byte 0x91
+ 45751 c949 F078 .sleb128 -912
+ 45752 c94b 32 .uleb128 0x32
+ 45753 c94c 630E0000 .long 0xe63
+ 45754 c950 03 .byte 0x3
+ 45755 c951 91 .byte 0x91
+ 45756 c952 8079 .sleb128 -896
+ 45757 c954 00 .byte 0x0
+ 45758 c955 31 .uleb128 0x31
+ 45759 c956 520E0000 .long 0xe52
+ 45760 c95a 00000000 .quad .LBB2835
+ 45760 00000000
+ 45761 c962 00000000 .quad .LBE2835
+ 45761 00000000
+ 45762 c96a 02 .byte 0x2
+ 45763 c96b 5904 .value 0x459
+ 45764 c96d 84C90000 .long 0xc984
+ 45765 c971 32 .uleb128 0x32
+ 45766 c972 6D0E0000 .long 0xe6d
+ 45767 c976 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1164
+
+
+ 45768 c977 91 .byte 0x91
+ 45769 c978 9079 .sleb128 -880
+ 45770 c97a 32 .uleb128 0x32
+ 45771 c97b 630E0000 .long 0xe63
+ 45772 c97f 03 .byte 0x3
+ 45773 c980 91 .byte 0x91
+ 45774 c981 A079 .sleb128 -864
+ 45775 c983 00 .byte 0x0
+ 45776 c984 31 .uleb128 0x31
+ 45777 c985 520E0000 .long 0xe52
+ 45778 c989 00000000 .quad .LBB2837
+ 45778 00000000
+ 45779 c991 00000000 .quad .LBE2837
+ 45779 00000000
+ 45780 c999 02 .byte 0x2
+ 45781 c99a 5A04 .value 0x45a
+ 45782 c99c B3C90000 .long 0xc9b3
+ 45783 c9a0 32 .uleb128 0x32
+ 45784 c9a1 6D0E0000 .long 0xe6d
+ 45785 c9a5 03 .byte 0x3
+ 45786 c9a6 91 .byte 0x91
+ 45787 c9a7 B079 .sleb128 -848
+ 45788 c9a9 32 .uleb128 0x32
+ 45789 c9aa 630E0000 .long 0xe63
+ 45790 c9ae 03 .byte 0x3
+ 45791 c9af 91 .byte 0x91
+ 45792 c9b0 C079 .sleb128 -832
+ 45793 c9b2 00 .byte 0x0
+ 45794 c9b3 36 .uleb128 0x36
+ 45795 c9b4 00000000 .quad .LBB2839
+ 45795 00000000
+ 45796 c9bc 00000000 .quad .LBE2839
+ 45796 00000000
+ 45797 c9c4 C1CA0000 .long 0xcac1
+ 45798 c9c8 34 .uleb128 0x34
+ 45799 c9c9 3DA90000 .long 0xa93d
+ 45800 c9cd 03 .byte 0x3
+ 45801 c9ce 91 .byte 0x91
+ 45802 c9cf C06E .sleb128 -2240
+ 45803 c9d1 34 .uleb128 0x34
+ 45804 c9d2 49A90000 .long 0xa949
+ 45805 c9d6 03 .byte 0x3
+ 45806 c9d7 91 .byte 0x91
+ 45807 c9d8 B06E .sleb128 -2256
+ 45808 c9da 34 .uleb128 0x34
+ 45809 c9db 55A90000 .long 0xa955
+ 45810 c9df 03 .byte 0x3
+ 45811 c9e0 91 .byte 0x91
+ 45812 c9e1 A06E .sleb128 -2272
+ 45813 c9e3 34 .uleb128 0x34
+ 45814 c9e4 61A90000 .long 0xa961
+ 45815 c9e8 03 .byte 0x3
+ 45816 c9e9 91 .byte 0x91
+ 45817 c9ea EC76 .sleb128 -1172
+ 45818 c9ec 31 .uleb128 0x31
+ 45819 c9ed 6EA90000 .long 0xa96e
+ 45820 c9f1 00000000 .quad .LBB2840
+
GAS LISTING /tmp/ccMa7HLZ.s page 1165
+
+
+ 45820 00000000
+ 45821 c9f9 00000000 .quad .LBE2840
+ 45821 00000000
+ 45822 ca01 02 .byte 0x2
+ 45823 ca02 6C04 .value 0x46c
+ 45824 ca04 34CA0000 .long 0xca34
+ 45825 ca08 32 .uleb128 0x32
+ 45826 ca09 80A90000 .long 0xa980
+ 45827 ca0d 03 .byte 0x3
+ 45828 ca0e 91 .byte 0x91
+ 45829 ca0f DA79 .sleb128 -806
+ 45830 ca11 35 .uleb128 0x35
+ 45831 ca12 8BA90000 .long 0xa98b
+ 45832 ca16 00000000 .quad .LBB2842
+ 45832 00000000
+ 45833 ca1e 00000000 .quad .LBE2842
+ 45833 00000000
+ 45834 ca26 02 .byte 0x2
+ 45835 ca27 F403 .value 0x3f4
+ 45836 ca29 32 .uleb128 0x32
+ 45837 ca2a 9DA90000 .long 0xa99d
+ 45838 ca2e 03 .byte 0x3
+ 45839 ca2f 91 .byte 0x91
+ 45840 ca30 DB79 .sleb128 -805
+ 45841 ca32 00 .byte 0x0
+ 45842 ca33 00 .byte 0x0
+ 45843 ca34 31 .uleb128 0x31
+ 45844 ca35 A8A90000 .long 0xa9a8
+ 45845 ca39 00000000 .quad .LBB2844
+ 45845 00000000
+ 45846 ca41 00000000 .quad .LBE2844
+ 45846 00000000
+ 45847 ca49 02 .byte 0x2
+ 45848 ca4a 6D04 .value 0x46d
+ 45849 ca4c 7CCA0000 .long 0xca7c
+ 45850 ca50 32 .uleb128 0x32
+ 45851 ca51 BAA90000 .long 0xa9ba
+ 45852 ca55 03 .byte 0x3
+ 45853 ca56 91 .byte 0x91
+ 45854 ca57 DC79 .sleb128 -804
+ 45855 ca59 35 .uleb128 0x35
+ 45856 ca5a 8BA90000 .long 0xa98b
+ 45857 ca5e 00000000 .quad .LBB2846
+ 45857 00000000
+ 45858 ca66 00000000 .quad .LBE2846
+ 45858 00000000
+ 45859 ca6e 02 .byte 0x2
+ 45860 ca6f FF03 .value 0x3ff
+ 45861 ca71 32 .uleb128 0x32
+ 45862 ca72 9DA90000 .long 0xa99d
+ 45863 ca76 03 .byte 0x3
+ 45864 ca77 91 .byte 0x91
+ 45865 ca78 DD79 .sleb128 -803
+ 45866 ca7a 00 .byte 0x0
+ 45867 ca7b 00 .byte 0x0
+ 45868 ca7c 35 .uleb128 0x35
+ 45869 ca7d C5A90000 .long 0xa9c5
+
GAS LISTING /tmp/ccMa7HLZ.s page 1166
+
+
+ 45870 ca81 00000000 .quad .LBB2848
+ 45870 00000000
+ 45871 ca89 00000000 .quad .LBE2848
+ 45871 00000000
+ 45872 ca91 02 .byte 0x2
+ 45873 ca92 6E04 .value 0x46e
+ 45874 ca94 32 .uleb128 0x32
+ 45875 ca95 D7A90000 .long 0xa9d7
+ 45876 ca99 03 .byte 0x3
+ 45877 ca9a 91 .byte 0x91
+ 45878 ca9b DE79 .sleb128 -802
+ 45879 ca9d 35 .uleb128 0x35
+ 45880 ca9e 8BA90000 .long 0xa98b
+ 45881 caa2 00000000 .quad .LBB2850
+ 45881 00000000
+ 45882 caaa 00000000 .quad .LBE2850
+ 45882 00000000
+ 45883 cab2 02 .byte 0x2
+ 45884 cab3 0A04 .value 0x40a
+ 45885 cab5 32 .uleb128 0x32
+ 45886 cab6 9DA90000 .long 0xa99d
+ 45887 caba 03 .byte 0x3
+ 45888 cabb 91 .byte 0x91
+ 45889 cabc DF79 .sleb128 -801
+ 45890 cabe 00 .byte 0x0
+ 45891 cabf 00 .byte 0x0
+ 45892 cac0 00 .byte 0x0
+ 45893 cac1 31 .uleb128 0x31
+ 45894 cac2 520E0000 .long 0xe52
+ 45895 cac6 00000000 .quad .LBB2852
+ 45895 00000000
+ 45896 cace 00000000 .quad .LBE2852
+ 45896 00000000
+ 45897 cad6 02 .byte 0x2
+ 45898 cad7 7604 .value 0x476
+ 45899 cad9 F0CA0000 .long 0xcaf0
+ 45900 cadd 32 .uleb128 0x32
+ 45901 cade 6D0E0000 .long 0xe6d
+ 45902 cae2 03 .byte 0x3
+ 45903 cae3 91 .byte 0x91
+ 45904 cae4 E079 .sleb128 -800
+ 45905 cae6 32 .uleb128 0x32
+ 45906 cae7 630E0000 .long 0xe63
+ 45907 caeb 03 .byte 0x3
+ 45908 caec 91 .byte 0x91
+ 45909 caed F079 .sleb128 -784
+ 45910 caef 00 .byte 0x0
+ 45911 caf0 31 .uleb128 0x31
+ 45912 caf1 520E0000 .long 0xe52
+ 45913 caf5 00000000 .quad .LBB2854
+ 45913 00000000
+ 45914 cafd 00000000 .quad .LBE2854
+ 45914 00000000
+ 45915 cb05 02 .byte 0x2
+ 45916 cb06 7704 .value 0x477
+ 45917 cb08 1FCB0000 .long 0xcb1f
+ 45918 cb0c 32 .uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s page 1167
+
+
+ 45919 cb0d 6D0E0000 .long 0xe6d
+ 45920 cb11 03 .byte 0x3
+ 45921 cb12 91 .byte 0x91
+ 45922 cb13 807A .sleb128 -768
+ 45923 cb15 32 .uleb128 0x32
+ 45924 cb16 630E0000 .long 0xe63
+ 45925 cb1a 03 .byte 0x3
+ 45926 cb1b 91 .byte 0x91
+ 45927 cb1c 907A .sleb128 -752
+ 45928 cb1e 00 .byte 0x0
+ 45929 cb1f 35 .uleb128 0x35
+ 45930 cb20 520E0000 .long 0xe52
+ 45931 cb24 00000000 .quad .LBB2856
+ 45931 00000000
+ 45932 cb2c 00000000 .quad .LBE2856
+ 45932 00000000
+ 45933 cb34 02 .byte 0x2
+ 45934 cb35 7804 .value 0x478
+ 45935 cb37 32 .uleb128 0x32
+ 45936 cb38 6D0E0000 .long 0xe6d
+ 45937 cb3c 03 .byte 0x3
+ 45938 cb3d 91 .byte 0x91
+ 45939 cb3e A07A .sleb128 -736
+ 45940 cb40 32 .uleb128 0x32
+ 45941 cb41 630E0000 .long 0xe63
+ 45942 cb45 03 .byte 0x3
+ 45943 cb46 91 .byte 0x91
+ 45944 cb47 B07A .sleb128 -720
+ 45945 cb49 00 .byte 0x0
+ 45946 cb4a 00 .byte 0x0
+ 45947 cb4b 00 .byte 0x0
+ 45948 cb4c 36 .uleb128 0x36
+ 45949 cb4d 00000000 .quad .LBB2858
+ 45949 00000000
+ 45950 cb55 00000000 .quad .LBE2858
+ 45950 00000000
+ 45951 cb5d 6BCB0000 .long 0xcb6b
+ 45952 cb61 34 .uleb128 0x34
+ 45953 cb62 5AC00000 .long 0xc05a
+ 45954 cb66 03 .byte 0x3
+ 45955 cb67 91 .byte 0x91
+ 45956 cb68 D06C .sleb128 -2480
+ 45957 cb6a 00 .byte 0x0
+ 45958 cb6b 31 .uleb128 0x31
+ 45959 cb6c 3EB00000 .long 0xb03e
+ 45960 cb70 00000000 .quad .LBB2859
+ 45960 00000000
+ 45961 cb78 00000000 .quad .LBE2859
+ 45961 00000000
+ 45962 cb80 02 .byte 0x2
+ 45963 cb81 A108 .value 0x8a1
+ 45964 cb83 C5CB0000 .long 0xcbc5
+ 45965 cb87 32 .uleb128 0x32
+ 45966 cb88 5CB00000 .long 0xb05c
+ 45967 cb8c 03 .byte 0x3
+ 45968 cb8d 91 .byte 0x91
+ 45969 cb8e C07A .sleb128 -704
+
GAS LISTING /tmp/ccMa7HLZ.s page 1168
+
+
+ 45970 cb90 32 .uleb128 0x32
+ 45971 cb91 50B00000 .long 0xb050
+ 45972 cb95 03 .byte 0x3
+ 45973 cb96 91 .byte 0x91
+ 45974 cb97 D07A .sleb128 -688
+ 45975 cb99 35 .uleb128 0x35
+ 45976 cb9a 520E0000 .long 0xe52
+ 45977 cb9e 00000000 .quad .LBB2861
+ 45977 00000000
+ 45978 cba6 00000000 .quad .LBE2861
+ 45978 00000000
+ 45979 cbae 02 .byte 0x2
+ 45980 cbaf 2302 .value 0x223
+ 45981 cbb1 32 .uleb128 0x32
+ 45982 cbb2 6D0E0000 .long 0xe6d
+ 45983 cbb6 03 .byte 0x3
+ 45984 cbb7 91 .byte 0x91
+ 45985 cbb8 E07A .sleb128 -672
+ 45986 cbba 32 .uleb128 0x32
+ 45987 cbbb 630E0000 .long 0xe63
+ 45988 cbbf 03 .byte 0x3
+ 45989 cbc0 91 .byte 0x91
+ 45990 cbc1 F07A .sleb128 -656
+ 45991 cbc3 00 .byte 0x0
+ 45992 cbc4 00 .byte 0x0
+ 45993 cbc5 36 .uleb128 0x36
+ 45994 cbc6 00000000 .quad .LBB2863
+ 45994 00000000
+ 45995 cbce 00000000 .quad .LBE2863
+ 45995 00000000
+ 45996 cbd6 E4CB0000 .long 0xcbe4
+ 45997 cbda 34 .uleb128 0x34
+ 45998 cbdb 6AC00000 .long 0xc06a
+ 45999 cbdf 03 .byte 0x3
+ 46000 cbe0 91 .byte 0x91
+ 46001 cbe1 C06C .sleb128 -2496
+ 46002 cbe3 00 .byte 0x0
+ 46003 cbe4 33 .uleb128 0x33
+ 46004 cbe5 00000000 .quad .LBB2864
+ 46004 00000000
+ 46005 cbed 00000000 .quad .LBE2864
+ 46005 00000000
+ 46006 cbf5 34 .uleb128 0x34
+ 46007 cbf6 76C00000 .long 0xc076
+ 46008 cbfa 03 .byte 0x3
+ 46009 cbfb 91 .byte 0x91
+ 46010 cbfc B06C .sleb128 -2512
+ 46011 cbfe 00 .byte 0x0
+ 46012 cbff 00 .byte 0x0
+ 46013 cc00 00 .byte 0x0
+ 46014 cc01 35 .uleb128 0x35
+ 46015 cc02 E2C00000 .long 0xc0e2
+ 46016 cc06 00000000 .quad .LBB2865
+ 46016 00000000
+ 46017 cc0e 00000000 .quad .LBE2865
+ 46017 00000000
+ 46018 cc16 02 .byte 0x2
+
GAS LISTING /tmp/ccMa7HLZ.s page 1169
+
+
+ 46019 cc17 E708 .value 0x8e7
+ 46020 cc19 32 .uleb128 0x32
+ 46021 cc1a 00C10000 .long 0xc100
+ 46022 cc1e 03 .byte 0x3
+ 46023 cc1f 91 .byte 0x91
+ 46024 cc20 807B .sleb128 -640
+ 46025 cc22 32 .uleb128 0x32
+ 46026 cc23 F4C00000 .long 0xc0f4
+ 46027 cc27 03 .byte 0x3
+ 46028 cc28 91 .byte 0x91
+ 46029 cc29 907B .sleb128 -624
+ 46030 cc2b 36 .uleb128 0x36
+ 46031 cc2c 00000000 .quad .LBB2867
+ 46031 00000000
+ 46032 cc34 00000000 .quad .LBE2867
+ 46032 00000000
+ 46033 cc3c 4ACC0000 .long 0xcc4a
+ 46034 cc40 34 .uleb128 0x34
+ 46035 cc41 11C10000 .long 0xc111
+ 46036 cc45 03 .byte 0x3
+ 46037 cc46 91 .byte 0x91
+ 46038 cc47 A070 .sleb128 -2016
+ 46039 cc49 00 .byte 0x0
+ 46040 cc4a 31 .uleb128 0x31
+ 46041 cc4b 82C00000 .long 0xc082
+ 46042 cc4f 00000000 .quad .LBB2868
+ 46042 00000000
+ 46043 cc57 00000000 .quad .LBE2868
+ 46043 00000000
+ 46044 cc5f 02 .byte 0x2
+ 46045 cc60 C308 .value 0x8c3
+ 46046 cc62 BACE0000 .long 0xceba
+ 46047 cc66 32 .uleb128 0x32
+ 46048 cc67 94C00000 .long 0xc094
+ 46049 cc6b 03 .byte 0x3
+ 46050 cc6c 91 .byte 0x91
+ 46051 cc6d A07B .sleb128 -608
+ 46052 cc6f 35 .uleb128 0x35
+ 46053 cc70 B00C0000 .long 0xcb0
+ 46054 cc74 00000000 .quad .LBB2870
+ 46054 00000000
+ 46055 cc7c 00000000 .quad .LBE2870
+ 46055 00000000
+ 46056 cc84 02 .byte 0x2
+ 46057 cc85 8803 .value 0x388
+ 46058 cc87 32 .uleb128 0x32
+ 46059 cc88 CE0C0000 .long 0xcce
+ 46060 cc8c 03 .byte 0x3
+ 46061 cc8d 91 .byte 0x91
+ 46062 cc8e B87B .sleb128 -584
+ 46063 cc90 32 .uleb128 0x32
+ 46064 cc91 C20C0000 .long 0xcc2
+ 46065 cc95 03 .byte 0x3
+ 46066 cc96 91 .byte 0x91
+ 46067 cc97 C07B .sleb128 -576
+ 46068 cc99 33 .uleb128 0x33
+ 46069 cc9a 00000000 .quad .LBB2871
+
GAS LISTING /tmp/ccMa7HLZ.s page 1170
+
+
+ 46069 00000000
+ 46070 cca2 00000000 .quad .LBE2871
+ 46070 00000000
+ 46071 ccaa 34 .uleb128 0x34
+ 46072 ccab DA0C0000 .long 0xcda
+ 46073 ccaf 03 .byte 0x3
+ 46074 ccb0 91 .byte 0x91
+ 46075 ccb1 907C .sleb128 -496
+ 46076 ccb3 34 .uleb128 0x34
+ 46077 ccb4 E50C0000 .long 0xce5
+ 46078 ccb8 03 .byte 0x3
+ 46079 ccb9 91 .byte 0x91
+ 46080 ccba 807C .sleb128 -512
+ 46081 ccbc 34 .uleb128 0x34
+ 46082 ccbd F00C0000 .long 0xcf0
+ 46083 ccc1 03 .byte 0x3
+ 46084 ccc2 91 .byte 0x91
+ 46085 ccc3 F07B .sleb128 -528
+ 46086 ccc5 34 .uleb128 0x34
+ 46087 ccc6 FC0C0000 .long 0xcfc
+ 46088 ccca 03 .byte 0x3
+ 46089 cccb 91 .byte 0x91
+ 46090 cccc E07B .sleb128 -544
+ 46091 ccce 34 .uleb128 0x34
+ 46092 cccf 080D0000 .long 0xd08
+ 46093 ccd3 03 .byte 0x3
+ 46094 ccd4 91 .byte 0x91
+ 46095 ccd5 DC7B .sleb128 -548
+ 46096 ccd7 31 .uleb128 0x31
+ 46097 ccd8 1F0D0000 .long 0xd1f
+ 46098 ccdc 00000000 .quad .LBB2872
+ 46098 00000000
+ 46099 cce4 00000000 .quad .LBE2872
+ 46099 00000000
+ 46100 ccec 02 .byte 0x2
+ 46101 cced 5603 .value 0x356
+ 46102 ccef 06CD0000 .long 0xcd06
+ 46103 ccf3 32 .uleb128 0x32
+ 46104 ccf4 3A0D0000 .long 0xd3a
+ 46105 ccf8 03 .byte 0x3
+ 46106 ccf9 91 .byte 0x91
+ 46107 ccfa A07C .sleb128 -480
+ 46108 ccfc 32 .uleb128 0x32
+ 46109 ccfd 300D0000 .long 0xd30
+ 46110 cd01 03 .byte 0x3
+ 46111 cd02 91 .byte 0x91
+ 46112 cd03 B07C .sleb128 -464
+ 46113 cd05 00 .byte 0x0
+ 46114 cd06 31 .uleb128 0x31
+ 46115 cd07 450D0000 .long 0xd45
+ 46116 cd0b 00000000 .quad .LBB2874
+ 46116 00000000
+ 46117 cd13 00000000 .quad .LBE2874
+ 46117 00000000
+ 46118 cd1b 02 .byte 0x2
+ 46119 cd1c 5E03 .value 0x35e
+ 46120 cd1e 35CD0000 .long 0xcd35
+
GAS LISTING /tmp/ccMa7HLZ.s page 1171
+
+
+ 46121 cd22 32 .uleb128 0x32
+ 46122 cd23 620D0000 .long 0xd62
+ 46123 cd27 03 .byte 0x3
+ 46124 cd28 91 .byte 0x91
+ 46125 cd29 C07C .sleb128 -448
+ 46126 cd2b 32 .uleb128 0x32
+ 46127 cd2c 570D0000 .long 0xd57
+ 46128 cd30 03 .byte 0x3
+ 46129 cd31 91 .byte 0x91
+ 46130 cd32 D07C .sleb128 -432
+ 46131 cd34 00 .byte 0x0
+ 46132 cd35 31 .uleb128 0x31
+ 46133 cd36 6E0D0000 .long 0xd6e
+ 46134 cd3a 00000000 .quad .LBB2876
+ 46134 00000000
+ 46135 cd42 00000000 .quad .LBE2876
+ 46135 00000000
+ 46136 cd4a 02 .byte 0x2
+ 46137 cd4b 6403 .value 0x364
+ 46138 cd4d 9ACD0000 .long 0xcd9a
+ 46139 cd51 32 .uleb128 0x32
+ 46140 cd52 8C0D0000 .long 0xd8c
+ 46141 cd56 03 .byte 0x3
+ 46142 cd57 91 .byte 0x91
+ 46143 cd58 E07C .sleb128 -416
+ 46144 cd5a 32 .uleb128 0x32
+ 46145 cd5b 800D0000 .long 0xd80
+ 46146 cd5f 03 .byte 0x3
+ 46147 cd60 91 .byte 0x91
+ 46148 cd61 F07C .sleb128 -400
+ 46149 cd63 33 .uleb128 0x33
+ 46150 cd64 00000000 .quad .LBB2877
+ 46150 00000000
+ 46151 cd6c 00000000 .quad .LBE2877
+ 46151 00000000
+ 46152 cd74 34 .uleb128 0x34
+ 46153 cd75 980D0000 .long 0xd98
+ 46154 cd79 03 .byte 0x3
+ 46155 cd7a 91 .byte 0x91
+ 46156 cd7b D070 .sleb128 -1968
+ 46157 cd7d 34 .uleb128 0x34
+ 46158 cd7e A40D0000 .long 0xda4
+ 46159 cd82 03 .byte 0x3
+ 46160 cd83 91 .byte 0x91
+ 46161 cd84 C070 .sleb128 -1984
+ 46162 cd86 34 .uleb128 0x34
+ 46163 cd87 AF0D0000 .long 0xdaf
+ 46164 cd8b 03 .byte 0x3
+ 46165 cd8c 91 .byte 0x91
+ 46166 cd8d B070 .sleb128 -2000
+ 46167 cd8f 34 .uleb128 0x34
+ 46168 cd90 BB0D0000 .long 0xdbb
+ 46169 cd94 03 .byte 0x3
+ 46170 cd95 91 .byte 0x91
+ 46171 cd96 8C7D .sleb128 -372
+ 46172 cd98 00 .byte 0x0
+ 46173 cd99 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1172
+
+
+ 46174 cd9a 31 .uleb128 0x31
+ 46175 cd9b C70D0000 .long 0xdc7
+ 46176 cd9f 00000000 .quad .LBB2878
+ 46176 00000000
+ 46177 cda7 00000000 .quad .LBE2878
+ 46177 00000000
+ 46178 cdaf 02 .byte 0x2
+ 46179 cdb0 6603 .value 0x366
+ 46180 cdb2 C9CD0000 .long 0xcdc9
+ 46181 cdb6 32 .uleb128 0x32
+ 46182 cdb7 E20D0000 .long 0xde2
+ 46183 cdbb 03 .byte 0x3
+ 46184 cdbc 91 .byte 0x91
+ 46185 cdbd 907D .sleb128 -368
+ 46186 cdbf 32 .uleb128 0x32
+ 46187 cdc0 D80D0000 .long 0xdd8
+ 46188 cdc4 03 .byte 0x3
+ 46189 cdc5 91 .byte 0x91
+ 46190 cdc6 A07D .sleb128 -352
+ 46191 cdc8 00 .byte 0x0
+ 46192 cdc9 31 .uleb128 0x31
+ 46193 cdca 6E0D0000 .long 0xd6e
+ 46194 cdce 00000000 .quad .LBB2880
+ 46194 00000000
+ 46195 cdd6 00000000 .quad .LBE2880
+ 46195 00000000
+ 46196 cdde 02 .byte 0x2
+ 46197 cddf 6803 .value 0x368
+ 46198 cde1 2ECE0000 .long 0xce2e
+ 46199 cde5 32 .uleb128 0x32
+ 46200 cde6 8C0D0000 .long 0xd8c
+ 46201 cdea 03 .byte 0x3
+ 46202 cdeb 91 .byte 0x91
+ 46203 cdec B07D .sleb128 -336
+ 46204 cdee 32 .uleb128 0x32
+ 46205 cdef 800D0000 .long 0xd80
+ 46206 cdf3 03 .byte 0x3
+ 46207 cdf4 91 .byte 0x91
+ 46208 cdf5 C07D .sleb128 -320
+ 46209 cdf7 33 .uleb128 0x33
+ 46210 cdf8 00000000 .quad .LBB2881
+ 46210 00000000
+ 46211 ce00 00000000 .quad .LBE2881
+ 46211 00000000
+ 46212 ce08 34 .uleb128 0x34
+ 46213 ce09 980D0000 .long 0xd98
+ 46214 ce0d 03 .byte 0x3
+ 46215 ce0e 91 .byte 0x91
+ 46216 ce0f 8071 .sleb128 -1920
+ 46217 ce11 34 .uleb128 0x34
+ 46218 ce12 A40D0000 .long 0xda4
+ 46219 ce16 03 .byte 0x3
+ 46220 ce17 91 .byte 0x91
+ 46221 ce18 F070 .sleb128 -1936
+ 46222 ce1a 34 .uleb128 0x34
+ 46223 ce1b AF0D0000 .long 0xdaf
+ 46224 ce1f 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1173
+
+
+ 46225 ce20 91 .byte 0x91
+ 46226 ce21 E070 .sleb128 -1952
+ 46227 ce23 34 .uleb128 0x34
+ 46228 ce24 BB0D0000 .long 0xdbb
+ 46229 ce28 03 .byte 0x3
+ 46230 ce29 91 .byte 0x91
+ 46231 ce2a DC7D .sleb128 -292
+ 46232 ce2c 00 .byte 0x0
+ 46233 ce2d 00 .byte 0x0
+ 46234 ce2e 31 .uleb128 0x31
+ 46235 ce2f C70D0000 .long 0xdc7
+ 46236 ce33 00000000 .quad .LBB2882
+ 46236 00000000
+ 46237 ce3b 00000000 .quad .LBE2882
+ 46237 00000000
+ 46238 ce43 02 .byte 0x2
+ 46239 ce44 6A03 .value 0x36a
+ 46240 ce46 5DCE0000 .long 0xce5d
+ 46241 ce4a 32 .uleb128 0x32
+ 46242 ce4b E20D0000 .long 0xde2
+ 46243 ce4f 03 .byte 0x3
+ 46244 ce50 91 .byte 0x91
+ 46245 ce51 E07D .sleb128 -288
+ 46246 ce53 32 .uleb128 0x32
+ 46247 ce54 D80D0000 .long 0xdd8
+ 46248 ce58 03 .byte 0x3
+ 46249 ce59 91 .byte 0x91
+ 46250 ce5a F07D .sleb128 -272
+ 46251 ce5c 00 .byte 0x0
+ 46252 ce5d 31 .uleb128 0x31
+ 46253 ce5e ED0D0000 .long 0xded
+ 46254 ce62 00000000 .quad .LBB2884
+ 46254 00000000
+ 46255 ce6a 00000000 .quad .LBE2884
+ 46255 00000000
+ 46256 ce72 02 .byte 0x2
+ 46257 ce73 6C03 .value 0x36c
+ 46258 ce75 8CCE0000 .long 0xce8c
+ 46259 ce79 32 .uleb128 0x32
+ 46260 ce7a 0A0E0000 .long 0xe0a
+ 46261 ce7e 03 .byte 0x3
+ 46262 ce7f 91 .byte 0x91
+ 46263 ce80 807E .sleb128 -256
+ 46264 ce82 32 .uleb128 0x32
+ 46265 ce83 FF0D0000 .long 0xdff
+ 46266 ce87 03 .byte 0x3
+ 46267 ce88 91 .byte 0x91
+ 46268 ce89 907E .sleb128 -240
+ 46269 ce8b 00 .byte 0x0
+ 46270 ce8c 35 .uleb128 0x35
+ 46271 ce8d 1F0D0000 .long 0xd1f
+ 46272 ce91 00000000 .quad .LBB2886
+ 46272 00000000
+ 46273 ce99 00000000 .quad .LBE2886
+ 46273 00000000
+ 46274 cea1 02 .byte 0x2
+ 46275 cea2 6E03 .value 0x36e
+
GAS LISTING /tmp/ccMa7HLZ.s page 1174
+
+
+ 46276 cea4 32 .uleb128 0x32
+ 46277 cea5 3A0D0000 .long 0xd3a
+ 46278 cea9 03 .byte 0x3
+ 46279 ceaa 91 .byte 0x91
+ 46280 ceab A07E .sleb128 -224
+ 46281 cead 32 .uleb128 0x32
+ 46282 ceae 300D0000 .long 0xd30
+ 46283 ceb2 03 .byte 0x3
+ 46284 ceb3 91 .byte 0x91
+ 46285 ceb4 B07E .sleb128 -208
+ 46286 ceb6 00 .byte 0x0
+ 46287 ceb7 00 .byte 0x0
+ 46288 ceb8 00 .byte 0x0
+ 46289 ceb9 00 .byte 0x0
+ 46290 ceba 36 .uleb128 0x36
+ 46291 cebb 00000000 .quad .LBB2888
+ 46291 00000000
+ 46292 cec3 00000000 .quad .LBE2888
+ 46292 00000000
+ 46293 cecb D9CE0000 .long 0xced9
+ 46294 cecf 34 .uleb128 0x34
+ 46295 ced0 21C10000 .long 0xc121
+ 46296 ced4 03 .byte 0x3
+ 46297 ced5 91 .byte 0x91
+ 46298 ced6 9070 .sleb128 -2032
+ 46299 ced8 00 .byte 0x0
+ 46300 ced9 31 .uleb128 0x31
+ 46301 ceda A1C00000 .long 0xc0a1
+ 46302 cede 00000000 .quad .LBB2889
+ 46302 00000000
+ 46303 cee6 00000000 .quad .LBE2889
+ 46303 00000000
+ 46304 ceee 02 .byte 0x2
+ 46305 ceef C708 .value 0x8c7
+ 46306 cef1 81CF0000 .long 0xcf81
+ 46307 cef5 32 .uleb128 0x32
+ 46308 cef6 B3C00000 .long 0xc0b3
+ 46309 cefa 03 .byte 0x3
+ 46310 cefb 91 .byte 0x91
+ 46311 cefc C07E .sleb128 -192
+ 46312 cefe 33 .uleb128 0x33
+ 46313 ceff 00000000 .quad .LBB2890
+ 46313 00000000
+ 46314 cf07 00000000 .quad .LBE2890
+ 46314 00000000
+ 46315 cf0f 34 .uleb128 0x34
+ 46316 cf10 BFC00000 .long 0xc0bf
+ 46317 cf14 09 .byte 0x9
+ 46318 cf15 03 .byte 0x3
+ 46319 cf16 00000000 .quad InvShiftRowTable.6750
+ 46319 00000000
+ 46320 cf1e 35 .uleb128 0x35
+ 46321 cf1f 6E0D0000 .long 0xd6e
+ 46322 cf23 00000000 .quad .LBB2891
+ 46322 00000000
+ 46323 cf2b 00000000 .quad .LBE2891
+ 46323 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1175
+
+
+ 46324 cf33 02 .byte 0x2
+ 46325 cf34 6402 .value 0x264
+ 46326 cf36 32 .uleb128 0x32
+ 46327 cf37 8C0D0000 .long 0xd8c
+ 46328 cf3b 03 .byte 0x3
+ 46329 cf3c 91 .byte 0x91
+ 46330 cf3d D07E .sleb128 -176
+ 46331 cf3f 32 .uleb128 0x32
+ 46332 cf40 800D0000 .long 0xd80
+ 46333 cf44 03 .byte 0x3
+ 46334 cf45 91 .byte 0x91
+ 46335 cf46 E07E .sleb128 -160
+ 46336 cf48 33 .uleb128 0x33
+ 46337 cf49 00000000 .quad .LBB2892
+ 46337 00000000
+ 46338 cf51 00000000 .quad .LBE2892
+ 46338 00000000
+ 46339 cf59 34 .uleb128 0x34
+ 46340 cf5a 980D0000 .long 0xd98
+ 46341 cf5e 03 .byte 0x3
+ 46342 cf5f 91 .byte 0x91
+ 46343 cf60 B071 .sleb128 -1872
+ 46344 cf62 34 .uleb128 0x34
+ 46345 cf63 A40D0000 .long 0xda4
+ 46346 cf67 03 .byte 0x3
+ 46347 cf68 91 .byte 0x91
+ 46348 cf69 A071 .sleb128 -1888
+ 46349 cf6b 34 .uleb128 0x34
+ 46350 cf6c AF0D0000 .long 0xdaf
+ 46351 cf70 03 .byte 0x3
+ 46352 cf71 91 .byte 0x91
+ 46353 cf72 9071 .sleb128 -1904
+ 46354 cf74 34 .uleb128 0x34
+ 46355 cf75 BB0D0000 .long 0xdbb
+ 46356 cf79 03 .byte 0x3
+ 46357 cf7a 91 .byte 0x91
+ 46358 cf7b FC7E .sleb128 -132
+ 46359 cf7d 00 .byte 0x0
+ 46360 cf7e 00 .byte 0x0
+ 46361 cf7f 00 .byte 0x0
+ 46362 cf80 00 .byte 0x0
+ 46363 cf81 36 .uleb128 0x36
+ 46364 cf82 00000000 .quad .LBB2893
+ 46364 00000000
+ 46365 cf8a 00000000 .quad .LBE2893
+ 46365 00000000
+ 46366 cf92 A0CF0000 .long 0xcfa0
+ 46367 cf96 34 .uleb128 0x34
+ 46368 cf97 31C10000 .long 0xc131
+ 46369 cf9b 03 .byte 0x3
+ 46370 cf9c 91 .byte 0x91
+ 46371 cf9d 8070 .sleb128 -2048
+ 46372 cf9f 00 .byte 0x0
+ 46373 cfa0 31 .uleb128 0x31
+ 46374 cfa1 3EB00000 .long 0xb03e
+ 46375 cfa5 00000000 .quad .LBB2894
+ 46375 00000000
+
GAS LISTING /tmp/ccMa7HLZ.s page 1176
+
+
+ 46376 cfad 00000000 .quad .LBE2894
+ 46376 00000000
+ 46377 cfb5 02 .byte 0x2
+ 46378 cfb6 CB08 .value 0x8cb
+ 46379 cfb8 FACF0000 .long 0xcffa
+ 46380 cfbc 32 .uleb128 0x32
+ 46381 cfbd 5CB00000 .long 0xb05c
+ 46382 cfc1 03 .byte 0x3
+ 46383 cfc2 91 .byte 0x91
+ 46384 cfc3 807F .sleb128 -128
+ 46385 cfc5 32 .uleb128 0x32
+ 46386 cfc6 50B00000 .long 0xb050
+ 46387 cfca 03 .byte 0x3
+ 46388 cfcb 91 .byte 0x91
+ 46389 cfcc 907F .sleb128 -112
+ 46390 cfce 35 .uleb128 0x35
+ 46391 cfcf 520E0000 .long 0xe52
+ 46392 cfd3 00000000 .quad .LBB2896
+ 46392 00000000
+ 46393 cfdb 00000000 .quad .LBE2896
+ 46393 00000000
+ 46394 cfe3 02 .byte 0x2
+ 46395 cfe4 2302 .value 0x223
+ 46396 cfe6 32 .uleb128 0x32
+ 46397 cfe7 6D0E0000 .long 0xe6d
+ 46398 cfeb 03 .byte 0x3
+ 46399 cfec 91 .byte 0x91
+ 46400 cfed A07F .sleb128 -96
+ 46401 cfef 32 .uleb128 0x32
+ 46402 cff0 630E0000 .long 0xe63
+ 46403 cff4 03 .byte 0x3
+ 46404 cff5 91 .byte 0x91
+ 46405 cff6 B07F .sleb128 -80
+ 46406 cff8 00 .byte 0x0
+ 46407 cff9 00 .byte 0x0
+ 46408 cffa 36 .uleb128 0x36
+ 46409 cffb 00000000 .quad .LBB2898
+ 46409 00000000
+ 46410 d003 00000000 .quad .LBE2898
+ 46410 00000000
+ 46411 d00b 19D00000 .long 0xd019
+ 46412 d00f 34 .uleb128 0x34
+ 46413 d010 41C10000 .long 0xc141
+ 46414 d014 03 .byte 0x3
+ 46415 d015 91 .byte 0x91
+ 46416 d016 F06F .sleb128 -2064
+ 46417 d018 00 .byte 0x0
+ 46418 d019 33 .uleb128 0x33
+ 46419 d01a 00000000 .quad .LBB2899
+ 46419 00000000
+ 46420 d022 00000000 .quad .LBE2899
+ 46420 00000000
+ 46421 d02a 34 .uleb128 0x34
+ 46422 d02b 4DC10000 .long 0xc14d
+ 46423 d02f 03 .byte 0x3
+ 46424 d030 91 .byte 0x91
+ 46425 d031 E06F .sleb128 -2080
+
GAS LISTING /tmp/ccMa7HLZ.s page 1177
+
+
+ 46426 d033 00 .byte 0x0
+ 46427 d034 00 .byte 0x0
+ 46428 d035 00 .byte 0x0
+ 46429 d036 2D .uleb128 0x2d
+ 46430 d037 00000000 .long .LASF382
+ 46431 d03b 02 .byte 0x2
+ 46432 d03c 0309 .value 0x903
+ 46433 d03e 01 .byte 0x1
+ 46434 d03f 00000000 .quad .LFB578
+ 46434 00000000
+ 46435 d047 00000000 .quad .LFE578
+ 46435 00000000
+ 46436 d04f 00000000 .long .LLST10
+ 46437 d053 67D00000 .long 0xd067
+ 46438 d057 2E .uleb128 0x2e
+ 46439 d058 00000000 .long .LASF383
+ 46440 d05c 02 .byte 0x2
+ 46441 d05d 0309 .value 0x903
+ 46442 d05f D0030000 .long 0x3d0
+ 46443 d063 02 .byte 0x2
+ 46444 d064 91 .byte 0x91
+ 46445 d065 68 .sleb128 -24
+ 46446 d066 00 .byte 0x0
+ 46447 d067 39 .uleb128 0x39
+ 46448 d068 00000000 .long .LASF384
+ 46449 d06c 02 .byte 0x2
+ 46450 d06d 0D09 .value 0x90d
+ 46451 d06f 62000000 .long 0x62
+ 46452 d073 00000000 .quad .LFB579
+ 46452 00000000
+ 46453 d07b 00000000 .quad .LFE579
+ 46453 00000000
+ 46454 d083 00000000 .long .LLST11
+ 46455 d087 39 .uleb128 0x39
+ 46456 d088 00000000 .long .LASF385
+ 46457 d08c 02 .byte 0x2
+ 46458 d08d 1C09 .value 0x91c
+ 46459 d08f 62000000 .long 0x62
+ 46460 d093 00000000 .quad .LFB580
+ 46460 00000000
+ 46461 d09b 00000000 .quad .LFE580
+ 46461 00000000
+ 46462 d0a3 00000000 .long .LLST12
+ 46463 d0a7 38 .uleb128 0x38
+ 46464 d0a8 00000000 .long .LASF386
+ 46465 d0ac 02 .byte 0x2
+ 46466 d0ad 2909 .value 0x929
+ 46467 d0af 01 .byte 0x1
+ 46468 d0b0 86000000 .long 0x86
+ 46469 d0b4 00000000 .quad .LFB581
+ 46469 00000000
+ 46470 d0bc 00000000 .quad .LFE581
+ 46470 00000000
+ 46471 d0c4 00000000 .long .LLST13
+ 46472 d0c8 3FD10000 .long 0xd13f
+ 46473 d0cc 2E .uleb128 0x2e
+ 46474 d0cd 00000000 .long .LASF387
+
GAS LISTING /tmp/ccMa7HLZ.s page 1178
+
+
+ 46475 d0d1 02 .byte 0x2
+ 46476 d0d2 2909 .value 0x929
+ 46477 d0d4 B9000000 .long 0xb9
+ 46478 d0d8 02 .byte 0x2
+ 46479 d0d9 91 .byte 0x91
+ 46480 d0da 58 .sleb128 -40
+ 46481 d0db 2E .uleb128 0x2e
+ 46482 d0dc 00000000 .long .LASF388
+ 46483 d0e0 02 .byte 0x2
+ 46484 d0e1 2909 .value 0x929
+ 46485 d0e3 AE000000 .long 0xae
+ 46486 d0e7 02 .byte 0x2
+ 46487 d0e8 91 .byte 0x91
+ 46488 d0e9 50 .sleb128 -48
+ 46489 d0ea 2E .uleb128 0x2e
+ 46490 d0eb 00000000 .long .LASF389
+ 46491 d0ef 02 .byte 0x2
+ 46492 d0f0 2A09 .value 0x92a
+ 46493 d0f2 62000000 .long 0x62
+ 46494 d0f6 02 .byte 0x2
+ 46495 d0f7 91 .byte 0x91
+ 46496 d0f8 4C .sleb128 -52
+ 46497 d0f9 37 .uleb128 0x37
+ 46498 d0fa 726300 .string "rc"
+ 46499 d0fd 02 .byte 0x2
+ 46500 d0fe 2C09 .value 0x92c
+ 46501 d100 86000000 .long 0x86
+ 46502 d104 02 .byte 0x2
+ 46503 d105 91 .byte 0x91
+ 46504 d106 64 .sleb128 -28
+ 46505 d107 37 .uleb128 0x37
+ 46506 d108 6B657900 .string "key"
+ 46507 d10c 02 .byte 0x2
+ 46508 d10d 2D09 .value 0x92d
+ 46509 d10f 3FD10000 .long 0xd13f
+ 46510 d113 02 .byte 0x2
+ 46511 d114 91 .byte 0x91
+ 46512 d115 68 .sleb128 -24
+ 46513 d116 3A .uleb128 0x3a
+ 46514 d117 00000000 .long .LASF390
+ 46515 d11b 45D10000 .long 0xd145
+ 46516 d11f 01 .byte 0x1
+ 46517 d120 09 .byte 0x9
+ 46518 d121 03 .byte 0x3
+ 46519 d122 00000000 .quad __PRETTY_FUNCTION__.8463
+ 46519 00000000
+ 46520 d12a 3A .uleb128 0x3a
+ 46521 d12b 00000000 .long .LASF391
+ 46522 d12f 4AD10000 .long 0xd14a
+ 46523 d133 01 .byte 0x1
+ 46524 d134 09 .byte 0x9
+ 46525 d135 03 .byte 0x3
+ 46526 d136 00000000 .quad __func__.8464
+ 46526 00000000
+ 46527 d13e 00 .byte 0x0
+ 46528 d13f 07 .uleb128 0x7
+ 46529 d140 08 .byte 0x8
+
GAS LISTING /tmp/ccMa7HLZ.s page 1179
+
+
+ 46530 d141 6B040000 .long 0x46b
+ 46531 d145 06 .uleb128 0x6
+ 46532 d146 C8000000 .long 0xc8
+ 46533 d14a 06 .uleb128 0x6
+ 46534 d14b C8000000 .long 0xc8
+ 46535 d14f 38 .uleb128 0x38
+ 46536 d150 00000000 .long .LASF392
+ 46537 d154 02 .byte 0x2
+ 46538 d155 5409 .value 0x954
+ 46539 d157 01 .byte 0x1
+ 46540 d158 86000000 .long 0x86
+ 46541 d15c 00000000 .quad .LFB582
+ 46541 00000000
+ 46542 d164 00000000 .quad .LFE582
+ 46542 00000000
+ 46543 d16c 00000000 .long .LLST14
+ 46544 d170 E4D10000 .long 0xd1e4
+ 46545 d174 2E .uleb128 0x2e
+ 46546 d175 00000000 .long .LASF393
+ 46547 d179 02 .byte 0x2
+ 46548 d17a 5409 .value 0x954
+ 46549 d17c B9000000 .long 0xb9
+ 46550 d180 03 .byte 0x3
+ 46551 d181 91 .byte 0x91
+ 46552 d182 D87D .sleb128 -296
+ 46553 d184 2E .uleb128 0x2e
+ 46554 d185 00000000 .long .LASF388
+ 46555 d189 02 .byte 0x2
+ 46556 d18a 5509 .value 0x955
+ 46557 d18c AE000000 .long 0xae
+ 46558 d190 03 .byte 0x3
+ 46559 d191 91 .byte 0x91
+ 46560 d192 D07D .sleb128 -304
+ 46561 d194 2E .uleb128 0x2e
+ 46562 d195 00000000 .long .LASF389
+ 46563 d199 02 .byte 0x2
+ 46564 d19a 5609 .value 0x956
+ 46565 d19c 62000000 .long 0x62
+ 46566 d1a0 03 .byte 0x3
+ 46567 d1a1 91 .byte 0x91
+ 46568 d1a2 CC7D .sleb128 -308
+ 46569 d1a4 30 .uleb128 0x30
+ 46570 d1a5 00000000 .long .LASF387
+ 46571 d1a9 02 .byte 0x2
+ 46572 d1aa 5809 .value 0x958
+ 46573 d1ac 6B040000 .long 0x46b
+ 46574 d1b0 03 .byte 0x3
+ 46575 d1b1 91 .byte 0x91
+ 46576 d1b2 E07D .sleb128 -288
+ 46577 d1b4 37 .uleb128 0x37
+ 46578 d1b5 726300 .string "rc"
+ 46579 d1b8 02 .byte 0x2
+ 46580 d1b9 5909 .value 0x959
+ 46581 d1bb 86000000 .long 0x86
+ 46582 d1bf 02 .byte 0x2
+ 46583 d1c0 91 .byte 0x91
+ 46584 d1c1 64 .sleb128 -28
+
GAS LISTING /tmp/ccMa7HLZ.s page 1180
+
+
+ 46585 d1c2 33 .uleb128 0x33
+ 46586 d1c3 00000000 .quad .LBB2900
+ 46586 00000000
+ 46587 d1cb 00000000 .quad .LBE2900
+ 46587 00000000
+ 46588 d1d3 37 .uleb128 0x37
+ 46589 d1d4 6B657900 .string "key"
+ 46590 d1d8 02 .byte 0x2
+ 46591 d1d9 5E09 .value 0x95e
+ 46592 d1db 3FD10000 .long 0xd13f
+ 46593 d1df 02 .byte 0x2
+ 46594 d1e0 91 .byte 0x91
+ 46595 d1e1 68 .sleb128 -24
+ 46596 d1e2 00 .byte 0x0
+ 46597 d1e3 00 .byte 0x0
+ 46598 d1e4 38 .uleb128 0x38
+ 46599 d1e5 00000000 .long .LASF394
+ 46600 d1e9 02 .byte 0x2
+ 46601 d1ea 8009 .value 0x980
+ 46602 d1ec 01 .byte 0x1
+ 46603 d1ed B1010000 .long 0x1b1
+ 46604 d1f1 00000000 .quad .LFB583
+ 46604 00000000
+ 46605 d1f9 00000000 .quad .LFE583
+ 46605 00000000
+ 46606 d201 00000000 .long .LLST15
+ 46607 d205 4BD20000 .long 0xd24b
+ 46608 d209 2E .uleb128 0x2e
+ 46609 d20a 00000000 .long .LASF66
+ 46610 d20e 02 .byte 0x2
+ 46611 d20f 8009 .value 0x980
+ 46612 d211 B1010000 .long 0x1b1
+ 46613 d215 02 .byte 0x2
+ 46614 d216 91 .byte 0x91
+ 46615 d217 50 .sleb128 -48
+ 46616 d218 2E .uleb128 0x2e
+ 46617 d219 00000000 .long .LASF387
+ 46618 d21d 02 .byte 0x2
+ 46619 d21e 8109 .value 0x981
+ 46620 d220 D8000000 .long 0xd8
+ 46621 d224 02 .byte 0x2
+ 46622 d225 91 .byte 0x91
+ 46623 d226 48 .sleb128 -56
+ 46624 d227 37 .uleb128 0x37
+ 46625 d228 6B657900 .string "key"
+ 46626 d22c 02 .byte 0x2
+ 46627 d22d 8309 .value 0x983
+ 46628 d22f 4BD20000 .long 0xd24b
+ 46629 d233 02 .byte 0x2
+ 46630 d234 91 .byte 0x91
+ 46631 d235 68 .sleb128 -24
+ 46632 d236 3A .uleb128 0x3a
+ 46633 d237 00000000 .long .LASF390
+ 46634 d23b 66D20000 .long 0xd266
+ 46635 d23f 01 .byte 0x1
+ 46636 d240 09 .byte 0x9
+ 46637 d241 03 .byte 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1181
+
+
+ 46638 d242 00000000 .quad __PRETTY_FUNCTION__.8500
+ 46638 00000000
+ 46639 d24a 00 .byte 0x0
+ 46640 d24b 07 .uleb128 0x7
+ 46641 d24c 08 .byte 0x8
+ 46642 d24d 51D20000 .long 0xd251
+ 46643 d251 06 .uleb128 0x6
+ 46644 d252 6B040000 .long 0x46b
+ 46645 d256 09 .uleb128 0x9
+ 46646 d257 94000000 .long 0x94
+ 46647 d25b 66D20000 .long 0xd266
+ 46648 d25f 0A .uleb128 0xa
+ 46649 d260 91000000 .long 0x91
+ 46650 d264 19 .byte 0x19
+ 46651 d265 00 .byte 0x0
+ 46652 d266 06 .uleb128 0x6
+ 46653 d267 56D20000 .long 0xd256
+ 46654 d26b 38 .uleb128 0x38
+ 46655 d26c 00000000 .long .LASF395
+ 46656 d270 02 .byte 0x2
+ 46657 d271 A409 .value 0x9a4
+ 46658 d273 01 .byte 0x1
+ 46659 d274 B1010000 .long 0x1b1
+ 46660 d278 00000000 .quad .LFB584
+ 46660 00000000
+ 46661 d280 00000000 .quad .LFE584
+ 46661 00000000
+ 46662 d288 00000000 .long .LLST16
+ 46663 d28c D2D20000 .long 0xd2d2
+ 46664 d290 2E .uleb128 0x2e
+ 46665 d291 00000000 .long .LASF66
+ 46666 d295 02 .byte 0x2
+ 46667 d296 A409 .value 0x9a4
+ 46668 d298 B1010000 .long 0x1b1
+ 46669 d29c 02 .byte 0x2
+ 46670 d29d 91 .byte 0x91
+ 46671 d29e 50 .sleb128 -48
+ 46672 d29f 2E .uleb128 0x2e
+ 46673 d2a0 00000000 .long .LASF393
+ 46674 d2a4 02 .byte 0x2
+ 46675 d2a5 A509 .value 0x9a5
+ 46676 d2a7 D8000000 .long 0xd8
+ 46677 d2ab 02 .byte 0x2
+ 46678 d2ac 91 .byte 0x91
+ 46679 d2ad 48 .sleb128 -56
+ 46680 d2ae 37 .uleb128 0x37
+ 46681 d2af 6B657900 .string "key"
+ 46682 d2b3 02 .byte 0x2
+ 46683 d2b4 A709 .value 0x9a7
+ 46684 d2b6 4BD20000 .long 0xd24b
+ 46685 d2ba 02 .byte 0x2
+ 46686 d2bb 91 .byte 0x91
+ 46687 d2bc 68 .sleb128 -24
+ 46688 d2bd 3A .uleb128 0x3a
+ 46689 d2be 00000000 .long .LASF390
+ 46690 d2c2 D2D20000 .long 0xd2d2
+ 46691 d2c6 01 .byte 0x1
+
GAS LISTING /tmp/ccMa7HLZ.s page 1182
+
+
+ 46692 d2c7 09 .byte 0x9
+ 46693 d2c8 03 .byte 0x3
+ 46694 d2c9 00000000 .quad __PRETTY_FUNCTION__.8521
+ 46694 00000000
+ 46695 d2d1 00 .byte 0x0
+ 46696 d2d2 06 .uleb128 0x6
+ 46697 d2d3 56D20000 .long 0xd256
+ 46698 d2d7 3B .uleb128 0x3b
+ 46699 d2d8 00000000 .long .LASF396
+ 46700 d2dc 02 .byte 0x2
+ 46701 d2dd CC09 .value 0x9cc
+ 46702 d2df 62D30000 .long 0xd362
+ 46703 d2e3 00000000 .quad .LFB585
+ 46703 00000000
+ 46704 d2eb 00000000 .quad .LFE585
+ 46704 00000000
+ 46705 d2f3 00000000 .long .LLST17
+ 46706 d2f7 62D30000 .long 0xd362
+ 46707 d2fb 30 .uleb128 0x30
+ 46708 d2fc 00000000 .long .LASF397
+ 46709 d300 02 .byte 0x2
+ 46710 d301 CE09 .value 0x9ce
+ 46711 d303 62000000 .long 0x62
+ 46712 d307 02 .byte 0x2
+ 46713 d308 91 .byte 0x91
+ 46714 d309 48 .sleb128 -56
+ 46715 d30a 37 .uleb128 0x37
+ 46716 d30b 6100 .string "a"
+ 46717 d30d 02 .byte 0x2
+ 46718 d30e CE09 .value 0x9ce
+ 46719 d310 62000000 .long 0x62
+ 46720 d314 02 .byte 0x2
+ 46721 d315 91 .byte 0x91
+ 46722 d316 4C .sleb128 -52
+ 46723 d317 37 .uleb128 0x37
+ 46724 d318 6200 .string "b"
+ 46725 d31a 02 .byte 0x2
+ 46726 d31b CE09 .value 0x9ce
+ 46727 d31d 62000000 .long 0x62
+ 46728 d321 02 .byte 0x2
+ 46729 d322 91 .byte 0x91
+ 46730 d323 50 .sleb128 -48
+ 46731 d324 37 .uleb128 0x37
+ 46732 d325 6300 .string "c"
+ 46733 d327 02 .byte 0x2
+ 46734 d328 CE09 .value 0x9ce
+ 46735 d32a 62000000 .long 0x62
+ 46736 d32e 02 .byte 0x2
+ 46737 d32f 91 .byte 0x91
+ 46738 d330 54 .sleb128 -44
+ 46739 d331 37 .uleb128 0x37
+ 46740 d332 6400 .string "d"
+ 46741 d334 02 .byte 0x2
+ 46742 d335 CE09 .value 0x9ce
+ 46743 d337 62000000 .long 0x62
+ 46744 d33b 02 .byte 0x2
+ 46745 d33c 91 .byte 0x91
+
GAS LISTING /tmp/ccMa7HLZ.s page 1183
+
+
+ 46746 d33d 58 .sleb128 -40
+ 46747 d33e 37 .uleb128 0x37
+ 46748 d33f 72657400 .string "ret"
+ 46749 d343 02 .byte 0x2
+ 46750 d344 CF09 .value 0x9cf
+ 46751 d346 62D30000 .long 0xd362
+ 46752 d34a 02 .byte 0x2
+ 46753 d34b 91 .byte 0x91
+ 46754 d34c 5F .sleb128 -33
+ 46755 d34d 3A .uleb128 0x3a
+ 46756 d34e 00000000 .long .LASF391
+ 46757 d352 79D30000 .long 0xd379
+ 46758 d356 01 .byte 0x1
+ 46759 d357 09 .byte 0x9
+ 46760 d358 03 .byte 0x3
+ 46761 d359 00000000 .quad __func__.8545
+ 46761 00000000
+ 46762 d361 00 .byte 0x0
+ 46763 d362 02 .uleb128 0x2
+ 46764 d363 01 .byte 0x1
+ 46765 d364 02 .byte 0x2
+ 46766 d365 00000000 .long .LASF398
+ 46767 d369 09 .uleb128 0x9
+ 46768 d36a 94000000 .long 0x94
+ 46769 d36e 79D30000 .long 0xd379
+ 46770 d372 0A .uleb128 0xa
+ 46771 d373 91000000 .long 0x91
+ 46772 d377 22 .byte 0x22
+ 46773 d378 00 .byte 0x0
+ 46774 d379 06 .uleb128 0x6
+ 46775 d37a 69D30000 .long 0xd369
+ 46776 d37e 3C .uleb128 0x3c
+ 46777 d37f 01 .byte 0x1
+ 46778 d380 00000000 .long .LASF416
+ 46779 d384 02 .byte 0x2
+ 46780 d385 390A .value 0xa39
+ 46781 d387 01 .byte 0x1
+ 46782 d388 86000000 .long 0x86
+ 46783 d38c 00000000 .quad .LFB586
+ 46783 00000000
+ 46784 d394 00000000 .quad .LFE586
+ 46784 00000000
+ 46785 d39c 00000000 .long .LLST18
+ 46786 d3a0 EAD30000 .long 0xd3ea
+ 46787 d3a4 2E .uleb128 0x2e
+ 46788 d3a5 00000000 .long .LASF399
+ 46789 d3a9 02 .byte 0x2
+ 46790 d3aa 390A .value 0xa39
+ 46791 d3ac EAD30000 .long 0xd3ea
+ 46792 d3b0 02 .byte 0x2
+ 46793 d3b1 91 .byte 0x91
+ 46794 d3b2 58 .sleb128 -40
+ 46795 d3b3 37 .uleb128 0x37
+ 46796 d3b4 726300 .string "rc"
+ 46797 d3b7 02 .byte 0x2
+ 46798 d3b8 3B0A .value 0xa3b
+ 46799 d3ba 86000000 .long 0x86
+
GAS LISTING /tmp/ccMa7HLZ.s page 1184
+
+
+ 46800 d3be 02 .byte 0x2
+ 46801 d3bf 91 .byte 0x91
+ 46802 d3c0 6C .sleb128 -20
+ 46803 d3c1 3A .uleb128 0x3a
+ 46804 d3c2 00000000 .long .LASF391
+ 46805 d3c6 06D40000 .long 0xd406
+ 46806 d3ca 01 .byte 0x1
+ 46807 d3cb 09 .byte 0x9
+ 46808 d3cc 03 .byte 0x3
+ 46809 d3cd 00000000 .quad __func__.8570
+ 46809 00000000
+ 46810 d3d5 3A .uleb128 0x3a
+ 46811 d3d6 00000000 .long .LASF390
+ 46812 d3da 0BD40000 .long 0xd40b
+ 46813 d3de 01 .byte 0x1
+ 46814 d3df 09 .byte 0x9
+ 46815 d3e0 03 .byte 0x3
+ 46816 d3e1 00000000 .quad __PRETTY_FUNCTION__.8571
+ 46816 00000000
+ 46817 d3e9 00 .byte 0x0
+ 46818 d3ea 07 .uleb128 0x7
+ 46819 d3eb 08 .byte 0x8
+ 46820 d3ec F0D30000 .long 0xd3f0
+ 46821 d3f0 07 .uleb128 0x7
+ 46822 d3f1 08 .byte 0x8
+ 46823 d3f2 32050000 .long 0x532
+ 46824 d3f6 09 .uleb128 0x9
+ 46825 d3f7 94000000 .long 0x94
+ 46826 d3fb 06D40000 .long 0xd406
+ 46827 d3ff 0A .uleb128 0xa
+ 46828 d400 91000000 .long 0x91
+ 46829 d404 16 .byte 0x16
+ 46830 d405 00 .byte 0x0
+ 46831 d406 06 .uleb128 0x6
+ 46832 d407 F6D30000 .long 0xd3f6
+ 46833 d40b 06 .uleb128 0x6
+ 46834 d40c F6D30000 .long 0xd3f6
+ 46835 d410 3D .uleb128 0x3d
+ 46836 d411 00000000 .long .LASF400
+ 46837 d415 02 .byte 0x2
+ 46838 d416 53 .byte 0x53
+ 46839 d417 1A0D0000 .long 0xd1a
+ 46840 d41b 09 .byte 0x9
+ 46841 d41c 03 .byte 0x3
+ 46842 d41d 00000000 .quad vec_00
+ 46842 00000000
+ 46843 d425 3D .uleb128 0x3d
+ 46844 d426 00000000 .long .LASF401
+ 46845 d42a 02 .byte 0x2
+ 46846 d42b 57 .byte 0x57
+ 46847 d42c 1A0D0000 .long 0xd1a
+ 46848 d430 09 .byte 0x9
+ 46849 d431 03 .byte 0x3
+ 46850 d432 00000000 .quad vec_01
+ 46850 00000000
+ 46851 d43a 3D .uleb128 0x3d
+ 46852 d43b 00000000 .long .LASF402
+
GAS LISTING /tmp/ccMa7HLZ.s page 1185
+
+
+ 46853 d43f 02 .byte 0x2
+ 46854 d440 5B .byte 0x5b
+ 46855 d441 1A0D0000 .long 0xd1a
+ 46856 d445 09 .byte 0x9
+ 46857 d446 03 .byte 0x3
+ 46858 d447 00000000 .quad vec_0F
+ 46858 00000000
+ 46859 d44f 3D .uleb128 0x3d
+ 46860 d450 00000000 .long .LASF403
+ 46861 d454 02 .byte 0x2
+ 46862 d455 5F .byte 0x5f
+ 46863 d456 1A0D0000 .long 0xd1a
+ 46864 d45a 09 .byte 0x9
+ 46865 d45b 03 .byte 0x3
+ 46866 d45c 00000000 .quad vec_10
+ 46866 00000000
+ 46867 d464 09 .uleb128 0x9
+ 46868 d465 FC030000 .long 0x3fc
+ 46869 d469 74D40000 .long 0xd474
+ 46870 d46d 0A .uleb128 0xa
+ 46871 d46e 91000000 .long 0x91
+ 46872 d472 FF .byte 0xff
+ 46873 d473 00 .byte 0x0
+ 46874 d474 30 .uleb128 0x30
+ 46875 d475 00000000 .long .LASF404
+ 46876 d479 02 .byte 0x2
+ 46877 d47a AA02 .value 0x2aa
+ 46878 d47c 8AD40000 .long 0xd48a
+ 46879 d480 09 .byte 0x9
+ 46880 d481 03 .byte 0x3
+ 46881 d482 00000000 .quad KAESBlockCipherVecRijndaelSBox
+ 46881 00000000
+ 46882 d48a 06 .uleb128 0x6
+ 46883 d48b 64D40000 .long 0xd464
+ 46884 d48f 09 .uleb128 0x9
+ 46885 d490 B1010000 .long 0x1b1
+ 46886 d494 9FD40000 .long 0xd49f
+ 46887 d498 0A .uleb128 0xa
+ 46888 d499 91000000 .long 0x91
+ 46889 d49d 0F .byte 0xf
+ 46890 d49e 00 .byte 0x0
+ 46891 d49f 30 .uleb128 0x30
+ 46892 d4a0 00000000 .long .LASF405
+ 46893 d4a4 02 .byte 0x2
+ 46894 d4a5 1903 .value 0x319
+ 46895 d4a7 B5D40000 .long 0xd4b5
+ 46896 d4ab 09 .byte 0x9
+ 46897 d4ac 03 .byte 0x3
+ 46898 d4ad 00000000 .quad KAESBlockCipherVecRijndaelSBoxV
+ 46898 00000000
+ 46899 d4b5 06 .uleb128 0x6
+ 46900 d4b6 8FD40000 .long 0xd48f
+ 46901 d4ba 30 .uleb128 0x30
+ 46902 d4bb 00000000 .long .LASF406
+ 46903 d4bf 02 .byte 0x2
+ 46904 d4c0 2F03 .value 0x32f
+ 46905 d4c2 D0D40000 .long 0xd4d0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1186
+
+
+ 46906 d4c6 09 .byte 0x9
+ 46907 d4c7 03 .byte 0x3
+ 46908 d4c8 00000000 .quad KAESBlockCipherVecRijndaelInvSBoxV
+ 46908 00000000
+ 46909 d4d0 06 .uleb128 0x6
+ 46910 d4d1 8FD40000 .long 0xd48f
+ 46911 d4d5 30 .uleb128 0x30
+ 46912 d4d6 00000000 .long .LASF407
+ 46913 d4da 02 .byte 0x2
+ 46914 d4db 4603 .value 0x346
+ 46915 d4dd 1A0D0000 .long 0xd1a
+ 46916 d4e1 09 .byte 0x9
+ 46917 d4e2 03 .byte 0x3
+ 46918 d4e3 00000000 .quad lo_filter
+ 46918 00000000
+ 46919 d4eb 30 .uleb128 0x30
+ 46920 d4ec 00000000 .long .LASF408
+ 46921 d4f0 02 .byte 0x2
+ 46922 d4f1 9703 .value 0x397
+ 46923 d4f3 1A0D0000 .long 0xd1a
+ 46924 d4f7 09 .byte 0x9
+ 46925 d4f8 03 .byte 0x3
+ 46926 d4f9 00000000 .quad FF_tab
+ 46926 00000000
+ 46927 d501 09 .uleb128 0x9
+ 46928 d502 FC030000 .long 0x3fc
+ 46929 d506 11D50000 .long 0xd511
+ 46930 d50a 0A .uleb128 0xa
+ 46931 d50b 91000000 .long 0x91
+ 46932 d50f 07 .byte 0x7
+ 46933 d510 00 .byte 0x0
+ 46934 d511 30 .uleb128 0x30
+ 46935 d512 00000000 .long .LASF409
+ 46936 d516 02 .byte 0x2
+ 46937 d517 DF03 .value 0x3df
+ 46938 d519 01D50000 .long 0xd501
+ 46939 d51d 09 .byte 0x9
+ 46940 d51e 03 .byte 0x3
+ 46941 d51f 00000000 .quad KAESBlockCipherVecFFtable
+ 46941 00000000
+ 46942 d527 09 .uleb128 0x9
+ 46943 d528 07040000 .long 0x407
+ 46944 d52c 37D50000 .long 0xd537
+ 46945 d530 0A .uleb128 0xa
+ 46946 d531 91000000 .long 0x91
+ 46947 d535 09 .byte 0x9
+ 46948 d536 00 .byte 0x0
+ 46949 d537 30 .uleb128 0x30
+ 46950 d538 00000000 .long .LASF410
+ 46951 d53c 02 .byte 0x2
+ 46952 d53d 9E04 .value 0x49e
+ 46953 d53f 4DD50000 .long 0xd54d
+ 46954 d543 09 .byte 0x9
+ 46955 d544 03 .byte 0x3
+ 46956 d545 00000000 .quad KAESBlockCipherVecRcon
+ 46956 00000000
+ 46957 d54d 06 .uleb128 0x6
+
GAS LISTING /tmp/ccMa7HLZ.s page 1187
+
+
+ 46958 d54e 27D50000 .long 0xd527
+ 46959 d552 09 .uleb128 0x9
+ 46960 d553 94000000 .long 0x94
+ 46961 d557 62D50000 .long 0xd562
+ 46962 d55b 0A .uleb128 0xa
+ 46963 d55c 91000000 .long 0x91
+ 46964 d560 09 .byte 0x9
+ 46965 d561 00 .byte 0x0
+ 46966 d562 30 .uleb128 0x30
+ 46967 d563 00000000 .long .LASF411
+ 46968 d567 02 .byte 0x2
+ 46969 d568 F708 .value 0x8f7
+ 46970 d56a 78D50000 .long 0xd578
+ 46971 d56e 09 .byte 0x9
+ 46972 d56f 03 .byte 0x3
+ 46973 d570 00000000 .quad KAESBlockCipherVecaes_ncbi_name
+ 46973 00000000
+ 46974 d578 06 .uleb128 0x6
+ 46975 d579 52D50000 .long 0xd552
+ 46976 d57d 30 .uleb128 0x30
+ 46977 d57e 00000000 .long .LASF412
+ 46978 d582 02 .byte 0x2
+ 46979 d583 240A .value 0xa24
+ 46980 d585 93D50000 .long 0xd593
+ 46981 d589 09 .byte 0x9
+ 46982 d58a 03 .byte 0x3
+ 46983 d58b 00000000 .quad KAESBlockCipherVec_vt_
+ 46983 00000000
+ 46984 d593 06 .uleb128 0x6
+ 46985 d594 0F030000 .long 0x30f
+ 46986 d598 00 .byte 0x0
+ 46987 .section .debug_abbrev
+ 46988 0000 01 .uleb128 0x1
+ 46989 0001 11 .uleb128 0x11
+ 46990 0002 01 .byte 0x1
+ 46991 0003 25 .uleb128 0x25
+ 46992 0004 0E .uleb128 0xe
+ 46993 0005 13 .uleb128 0x13
+ 46994 0006 0B .uleb128 0xb
+ 46995 0007 03 .uleb128 0x3
+ 46996 0008 0E .uleb128 0xe
+ 46997 0009 1B .uleb128 0x1b
+ 46998 000a 0E .uleb128 0xe
+ 46999 000b 11 .uleb128 0x11
+ 47000 000c 01 .uleb128 0x1
+ 47001 000d 12 .uleb128 0x12
+ 47002 000e 01 .uleb128 0x1
+ 47003 000f 10 .uleb128 0x10
+ 47004 0010 06 .uleb128 0x6
+ 47005 0011 00 .byte 0x0
+ 47006 0012 00 .byte 0x0
+ 47007 0013 02 .uleb128 0x2
+ 47008 0014 24 .uleb128 0x24
+ 47009 0015 00 .byte 0x0
+ 47010 0016 0B .uleb128 0xb
+ 47011 0017 0B .uleb128 0xb
+ 47012 0018 3E .uleb128 0x3e
+
GAS LISTING /tmp/ccMa7HLZ.s page 1188
+
+
+ 47013 0019 0B .uleb128 0xb
+ 47014 001a 03 .uleb128 0x3
+ 47015 001b 0E .uleb128 0xe
+ 47016 001c 00 .byte 0x0
+ 47017 001d 00 .byte 0x0
+ 47018 001e 03 .uleb128 0x3
+ 47019 001f 24 .uleb128 0x24
+ 47020 0020 00 .byte 0x0
+ 47021 0021 0B .uleb128 0xb
+ 47022 0022 0B .uleb128 0xb
+ 47023 0023 3E .uleb128 0x3e
+ 47024 0024 0B .uleb128 0xb
+ 47025 0025 03 .uleb128 0x3
+ 47026 0026 08 .uleb128 0x8
+ 47027 0027 00 .byte 0x0
+ 47028 0028 00 .byte 0x0
+ 47029 0029 04 .uleb128 0x4
+ 47030 002a 16 .uleb128 0x16
+ 47031 002b 00 .byte 0x0
+ 47032 002c 03 .uleb128 0x3
+ 47033 002d 0E .uleb128 0xe
+ 47034 002e 3A .uleb128 0x3a
+ 47035 002f 0B .uleb128 0xb
+ 47036 0030 3B .uleb128 0x3b
+ 47037 0031 0B .uleb128 0xb
+ 47038 0032 49 .uleb128 0x49
+ 47039 0033 13 .uleb128 0x13
+ 47040 0034 00 .byte 0x0
+ 47041 0035 00 .byte 0x0
+ 47042 0036 05 .uleb128 0x5
+ 47043 0037 24 .uleb128 0x24
+ 47044 0038 00 .byte 0x0
+ 47045 0039 0B .uleb128 0xb
+ 47046 003a 0B .uleb128 0xb
+ 47047 003b 3E .uleb128 0x3e
+ 47048 003c 0B .uleb128 0xb
+ 47049 003d 00 .byte 0x0
+ 47050 003e 00 .byte 0x0
+ 47051 003f 06 .uleb128 0x6
+ 47052 0040 26 .uleb128 0x26
+ 47053 0041 00 .byte 0x0
+ 47054 0042 49 .uleb128 0x49
+ 47055 0043 13 .uleb128 0x13
+ 47056 0044 00 .byte 0x0
+ 47057 0045 00 .byte 0x0
+ 47058 0046 07 .uleb128 0x7
+ 47059 0047 0F .uleb128 0xf
+ 47060 0048 00 .byte 0x0
+ 47061 0049 0B .uleb128 0xb
+ 47062 004a 0B .uleb128 0xb
+ 47063 004b 49 .uleb128 0x49
+ 47064 004c 13 .uleb128 0x13
+ 47065 004d 00 .byte 0x0
+ 47066 004e 00 .byte 0x0
+ 47067 004f 08 .uleb128 0x8
+ 47068 0050 0F .uleb128 0xf
+ 47069 0051 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1189
+
+
+ 47070 0052 0B .uleb128 0xb
+ 47071 0053 0B .uleb128 0xb
+ 47072 0054 00 .byte 0x0
+ 47073 0055 00 .byte 0x0
+ 47074 0056 09 .uleb128 0x9
+ 47075 0057 01 .uleb128 0x1
+ 47076 0058 01 .byte 0x1
+ 47077 0059 49 .uleb128 0x49
+ 47078 005a 13 .uleb128 0x13
+ 47079 005b 01 .uleb128 0x1
+ 47080 005c 13 .uleb128 0x13
+ 47081 005d 00 .byte 0x0
+ 47082 005e 00 .byte 0x0
+ 47083 005f 0A .uleb128 0xa
+ 47084 0060 21 .uleb128 0x21
+ 47085 0061 00 .byte 0x0
+ 47086 0062 49 .uleb128 0x49
+ 47087 0063 13 .uleb128 0x13
+ 47088 0064 2F .uleb128 0x2f
+ 47089 0065 0B .uleb128 0xb
+ 47090 0066 00 .byte 0x0
+ 47091 0067 00 .byte 0x0
+ 47092 0068 0B .uleb128 0xb
+ 47093 0069 26 .uleb128 0x26
+ 47094 006a 00 .byte 0x0
+ 47095 006b 00 .byte 0x0
+ 47096 006c 00 .byte 0x0
+ 47097 006d 0C .uleb128 0xc
+ 47098 006e 01 .uleb128 0x1
+ 47099 006f 01 .byte 0x1
+ 47100 0070 8742 .uleb128 0x2107
+ 47101 0072 0C .uleb128 0xc
+ 47102 0073 49 .uleb128 0x49
+ 47103 0074 13 .uleb128 0x13
+ 47104 0075 01 .uleb128 0x1
+ 47105 0076 13 .uleb128 0x13
+ 47106 0077 00 .byte 0x0
+ 47107 0078 00 .byte 0x0
+ 47108 0079 0D .uleb128 0xd
+ 47109 007a 04 .uleb128 0x4
+ 47110 007b 01 .byte 0x1
+ 47111 007c 0B .uleb128 0xb
+ 47112 007d 0B .uleb128 0xb
+ 47113 007e 3A .uleb128 0x3a
+ 47114 007f 0B .uleb128 0xb
+ 47115 0080 3B .uleb128 0x3b
+ 47116 0081 0B .uleb128 0xb
+ 47117 0082 01 .uleb128 0x1
+ 47118 0083 13 .uleb128 0x13
+ 47119 0084 00 .byte 0x0
+ 47120 0085 00 .byte 0x0
+ 47121 0086 0E .uleb128 0xe
+ 47122 0087 28 .uleb128 0x28
+ 47123 0088 00 .byte 0x0
+ 47124 0089 03 .uleb128 0x3
+ 47125 008a 0E .uleb128 0xe
+ 47126 008b 1C .uleb128 0x1c
+
GAS LISTING /tmp/ccMa7HLZ.s page 1190
+
+
+ 47127 008c 0D .uleb128 0xd
+ 47128 008d 00 .byte 0x0
+ 47129 008e 00 .byte 0x0
+ 47130 008f 0F .uleb128 0xf
+ 47131 0090 04 .uleb128 0x4
+ 47132 0091 01 .byte 0x1
+ 47133 0092 0B .uleb128 0xb
+ 47134 0093 0B .uleb128 0xb
+ 47135 0094 3A .uleb128 0x3a
+ 47136 0095 0B .uleb128 0xb
+ 47137 0096 3B .uleb128 0x3b
+ 47138 0097 05 .uleb128 0x5
+ 47139 0098 01 .uleb128 0x1
+ 47140 0099 13 .uleb128 0x13
+ 47141 009a 00 .byte 0x0
+ 47142 009b 00 .byte 0x0
+ 47143 009c 10 .uleb128 0x10
+ 47144 009d 13 .uleb128 0x13
+ 47145 009e 01 .byte 0x1
+ 47146 009f 03 .uleb128 0x3
+ 47147 00a0 0E .uleb128 0xe
+ 47148 00a1 0B .uleb128 0xb
+ 47149 00a2 0B .uleb128 0xb
+ 47150 00a3 3A .uleb128 0x3a
+ 47151 00a4 0B .uleb128 0xb
+ 47152 00a5 3B .uleb128 0x3b
+ 47153 00a6 0B .uleb128 0xb
+ 47154 00a7 01 .uleb128 0x1
+ 47155 00a8 13 .uleb128 0x13
+ 47156 00a9 00 .byte 0x0
+ 47157 00aa 00 .byte 0x0
+ 47158 00ab 11 .uleb128 0x11
+ 47159 00ac 0D .uleb128 0xd
+ 47160 00ad 00 .byte 0x0
+ 47161 00ae 03 .uleb128 0x3
+ 47162 00af 08 .uleb128 0x8
+ 47163 00b0 3A .uleb128 0x3a
+ 47164 00b1 0B .uleb128 0xb
+ 47165 00b2 3B .uleb128 0x3b
+ 47166 00b3 0B .uleb128 0xb
+ 47167 00b4 49 .uleb128 0x49
+ 47168 00b5 13 .uleb128 0x13
+ 47169 00b6 38 .uleb128 0x38
+ 47170 00b7 0A .uleb128 0xa
+ 47171 00b8 00 .byte 0x0
+ 47172 00b9 00 .byte 0x0
+ 47173 00ba 12 .uleb128 0x12
+ 47174 00bb 0D .uleb128 0xd
+ 47175 00bc 00 .byte 0x0
+ 47176 00bd 03 .uleb128 0x3
+ 47177 00be 0E .uleb128 0xe
+ 47178 00bf 3A .uleb128 0x3a
+ 47179 00c0 0B .uleb128 0xb
+ 47180 00c1 3B .uleb128 0x3b
+ 47181 00c2 0B .uleb128 0xb
+ 47182 00c3 49 .uleb128 0x49
+ 47183 00c4 13 .uleb128 0x13
+
GAS LISTING /tmp/ccMa7HLZ.s page 1191
+
+
+ 47184 00c5 38 .uleb128 0x38
+ 47185 00c6 0A .uleb128 0xa
+ 47186 00c7 00 .byte 0x0
+ 47187 00c8 00 .byte 0x0
+ 47188 00c9 13 .uleb128 0x13
+ 47189 00ca 17 .uleb128 0x17
+ 47190 00cb 01 .byte 0x1
+ 47191 00cc 03 .uleb128 0x3
+ 47192 00cd 0E .uleb128 0xe
+ 47193 00ce 0B .uleb128 0xb
+ 47194 00cf 0B .uleb128 0xb
+ 47195 00d0 3A .uleb128 0x3a
+ 47196 00d1 0B .uleb128 0xb
+ 47197 00d2 3B .uleb128 0x3b
+ 47198 00d3 0B .uleb128 0xb
+ 47199 00d4 01 .uleb128 0x1
+ 47200 00d5 13 .uleb128 0x13
+ 47201 00d6 00 .byte 0x0
+ 47202 00d7 00 .byte 0x0
+ 47203 00d8 14 .uleb128 0x14
+ 47204 00d9 0D .uleb128 0xd
+ 47205 00da 00 .byte 0x0
+ 47206 00db 03 .uleb128 0x3
+ 47207 00dc 0E .uleb128 0xe
+ 47208 00dd 3A .uleb128 0x3a
+ 47209 00de 0B .uleb128 0xb
+ 47210 00df 3B .uleb128 0x3b
+ 47211 00e0 0B .uleb128 0xb
+ 47212 00e1 49 .uleb128 0x49
+ 47213 00e2 13 .uleb128 0x13
+ 47214 00e3 00 .byte 0x0
+ 47215 00e4 00 .byte 0x0
+ 47216 00e5 15 .uleb128 0x15
+ 47217 00e6 0D .uleb128 0xd
+ 47218 00e7 00 .byte 0x0
+ 47219 00e8 03 .uleb128 0x3
+ 47220 00e9 08 .uleb128 0x8
+ 47221 00ea 3A .uleb128 0x3a
+ 47222 00eb 0B .uleb128 0xb
+ 47223 00ec 3B .uleb128 0x3b
+ 47224 00ed 0B .uleb128 0xb
+ 47225 00ee 49 .uleb128 0x49
+ 47226 00ef 13 .uleb128 0x13
+ 47227 00f0 00 .byte 0x0
+ 47228 00f1 00 .byte 0x0
+ 47229 00f2 16 .uleb128 0x16
+ 47230 00f3 15 .uleb128 0x15
+ 47231 00f4 01 .byte 0x1
+ 47232 00f5 27 .uleb128 0x27
+ 47233 00f6 0C .uleb128 0xc
+ 47234 00f7 01 .uleb128 0x1
+ 47235 00f8 13 .uleb128 0x13
+ 47236 00f9 00 .byte 0x0
+ 47237 00fa 00 .byte 0x0
+ 47238 00fb 17 .uleb128 0x17
+ 47239 00fc 05 .uleb128 0x5
+ 47240 00fd 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1192
+
+
+ 47241 00fe 49 .uleb128 0x49
+ 47242 00ff 13 .uleb128 0x13
+ 47243 0100 00 .byte 0x0
+ 47244 0101 00 .byte 0x0
+ 47245 0102 18 .uleb128 0x18
+ 47246 0103 15 .uleb128 0x15
+ 47247 0104 01 .byte 0x1
+ 47248 0105 49 .uleb128 0x49
+ 47249 0106 13 .uleb128 0x13
+ 47250 0107 01 .uleb128 0x1
+ 47251 0108 13 .uleb128 0x13
+ 47252 0109 00 .byte 0x0
+ 47253 010a 00 .byte 0x0
+ 47254 010b 19 .uleb128 0x19
+ 47255 010c 18 .uleb128 0x18
+ 47256 010d 00 .byte 0x0
+ 47257 010e 00 .byte 0x0
+ 47258 010f 00 .byte 0x0
+ 47259 0110 1A .uleb128 0x1a
+ 47260 0111 15 .uleb128 0x15
+ 47261 0112 01 .byte 0x1
+ 47262 0113 27 .uleb128 0x27
+ 47263 0114 0C .uleb128 0xc
+ 47264 0115 49 .uleb128 0x49
+ 47265 0116 13 .uleb128 0x13
+ 47266 0117 01 .uleb128 0x1
+ 47267 0118 13 .uleb128 0x13
+ 47268 0119 00 .byte 0x0
+ 47269 011a 00 .byte 0x0
+ 47270 011b 1B .uleb128 0x1b
+ 47271 011c 13 .uleb128 0x13
+ 47272 011d 01 .byte 0x1
+ 47273 011e 03 .uleb128 0x3
+ 47274 011f 0E .uleb128 0xe
+ 47275 0120 0B .uleb128 0xb
+ 47276 0121 05 .uleb128 0x5
+ 47277 0122 3A .uleb128 0x3a
+ 47278 0123 0B .uleb128 0xb
+ 47279 0124 3B .uleb128 0x3b
+ 47280 0125 0B .uleb128 0xb
+ 47281 0126 01 .uleb128 0x1
+ 47282 0127 13 .uleb128 0x13
+ 47283 0128 00 .byte 0x0
+ 47284 0129 00 .byte 0x0
+ 47285 012a 1C .uleb128 0x1c
+ 47286 012b 17 .uleb128 0x17
+ 47287 012c 01 .byte 0x1
+ 47288 012d 0B .uleb128 0xb
+ 47289 012e 0B .uleb128 0xb
+ 47290 012f 3A .uleb128 0x3a
+ 47291 0130 0B .uleb128 0xb
+ 47292 0131 3B .uleb128 0x3b
+ 47293 0132 0B .uleb128 0xb
+ 47294 0133 01 .uleb128 0x1
+ 47295 0134 13 .uleb128 0x13
+ 47296 0135 00 .byte 0x0
+ 47297 0136 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1193
+
+
+ 47298 0137 1D .uleb128 0x1d
+ 47299 0138 04 .uleb128 0x4
+ 47300 0139 01 .byte 0x1
+ 47301 013a 03 .uleb128 0x3
+ 47302 013b 0E .uleb128 0xe
+ 47303 013c 0B .uleb128 0xb
+ 47304 013d 0B .uleb128 0xb
+ 47305 013e 3A .uleb128 0x3a
+ 47306 013f 0B .uleb128 0xb
+ 47307 0140 3B .uleb128 0x3b
+ 47308 0141 0B .uleb128 0xb
+ 47309 0142 01 .uleb128 0x1
+ 47310 0143 13 .uleb128 0x13
+ 47311 0144 00 .byte 0x0
+ 47312 0145 00 .byte 0x0
+ 47313 0146 1E .uleb128 0x1e
+ 47314 0147 04 .uleb128 0x4
+ 47315 0148 01 .byte 0x1
+ 47316 0149 03 .uleb128 0x3
+ 47317 014a 0E .uleb128 0xe
+ 47318 014b 0B .uleb128 0xb
+ 47319 014c 0B .uleb128 0xb
+ 47320 014d 3A .uleb128 0x3a
+ 47321 014e 0B .uleb128 0xb
+ 47322 014f 3B .uleb128 0x3b
+ 47323 0150 05 .uleb128 0x5
+ 47324 0151 01 .uleb128 0x1
+ 47325 0152 13 .uleb128 0x13
+ 47326 0153 00 .byte 0x0
+ 47327 0154 00 .byte 0x0
+ 47328 0155 1F .uleb128 0x1f
+ 47329 0156 2E .uleb128 0x2e
+ 47330 0157 01 .byte 0x1
+ 47331 0158 03 .uleb128 0x3
+ 47332 0159 0E .uleb128 0xe
+ 47333 015a 3A .uleb128 0x3a
+ 47334 015b 0B .uleb128 0xb
+ 47335 015c 3B .uleb128 0x3b
+ 47336 015d 0B .uleb128 0xb
+ 47337 015e 27 .uleb128 0x27
+ 47338 015f 0C .uleb128 0xc
+ 47339 0160 49 .uleb128 0x49
+ 47340 0161 13 .uleb128 0x13
+ 47341 0162 11 .uleb128 0x11
+ 47342 0163 01 .uleb128 0x1
+ 47343 0164 12 .uleb128 0x12
+ 47344 0165 01 .uleb128 0x1
+ 47345 0166 40 .uleb128 0x40
+ 47346 0167 06 .uleb128 0x6
+ 47347 0168 01 .uleb128 0x1
+ 47348 0169 13 .uleb128 0x13
+ 47349 016a 00 .byte 0x0
+ 47350 016b 00 .byte 0x0
+ 47351 016c 20 .uleb128 0x20
+ 47352 016d 05 .uleb128 0x5
+ 47353 016e 00 .byte 0x0
+ 47354 016f 03 .uleb128 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s page 1194
+
+
+ 47355 0170 08 .uleb128 0x8
+ 47356 0171 3A .uleb128 0x3a
+ 47357 0172 0B .uleb128 0xb
+ 47358 0173 3B .uleb128 0x3b
+ 47359 0174 0B .uleb128 0xb
+ 47360 0175 49 .uleb128 0x49
+ 47361 0176 13 .uleb128 0x13
+ 47362 0177 02 .uleb128 0x2
+ 47363 0178 0A .uleb128 0xa
+ 47364 0179 00 .byte 0x0
+ 47365 017a 00 .byte 0x0
+ 47366 017b 21 .uleb128 0x21
+ 47367 017c 34 .uleb128 0x34
+ 47368 017d 00 .byte 0x0
+ 47369 017e 03 .uleb128 0x3
+ 47370 017f 08 .uleb128 0x8
+ 47371 0180 3A .uleb128 0x3a
+ 47372 0181 0B .uleb128 0xb
+ 47373 0182 3B .uleb128 0x3b
+ 47374 0183 0B .uleb128 0xb
+ 47375 0184 49 .uleb128 0x49
+ 47376 0185 13 .uleb128 0x13
+ 47377 0186 02 .uleb128 0x2
+ 47378 0187 0A .uleb128 0xa
+ 47379 0188 00 .byte 0x0
+ 47380 0189 00 .byte 0x0
+ 47381 018a 22 .uleb128 0x22
+ 47382 018b 2E .uleb128 0x2e
+ 47383 018c 01 .byte 0x1
+ 47384 018d 03 .uleb128 0x3
+ 47385 018e 0E .uleb128 0xe
+ 47386 018f 3A .uleb128 0x3a
+ 47387 0190 0B .uleb128 0xb
+ 47388 0191 3B .uleb128 0x3b
+ 47389 0192 0B .uleb128 0xb
+ 47390 0193 27 .uleb128 0x27
+ 47391 0194 0C .uleb128 0xc
+ 47392 0195 49 .uleb128 0x49
+ 47393 0196 13 .uleb128 0x13
+ 47394 0197 20 .uleb128 0x20
+ 47395 0198 0B .uleb128 0xb
+ 47396 0199 01 .uleb128 0x1
+ 47397 019a 13 .uleb128 0x13
+ 47398 019b 00 .byte 0x0
+ 47399 019c 00 .byte 0x0
+ 47400 019d 23 .uleb128 0x23
+ 47401 019e 05 .uleb128 0x5
+ 47402 019f 00 .byte 0x0
+ 47403 01a0 03 .uleb128 0x3
+ 47404 01a1 08 .uleb128 0x8
+ 47405 01a2 3A .uleb128 0x3a
+ 47406 01a3 0B .uleb128 0xb
+ 47407 01a4 3B .uleb128 0x3b
+ 47408 01a5 0B .uleb128 0xb
+ 47409 01a6 49 .uleb128 0x49
+ 47410 01a7 13 .uleb128 0x13
+ 47411 01a8 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1195
+
+
+ 47412 01a9 00 .byte 0x0
+ 47413 01aa 24 .uleb128 0x24
+ 47414 01ab 34 .uleb128 0x34
+ 47415 01ac 00 .byte 0x0
+ 47416 01ad 03 .uleb128 0x3
+ 47417 01ae 08 .uleb128 0x8
+ 47418 01af 3A .uleb128 0x3a
+ 47419 01b0 0B .uleb128 0xb
+ 47420 01b1 3B .uleb128 0x3b
+ 47421 01b2 0B .uleb128 0xb
+ 47422 01b3 49 .uleb128 0x49
+ 47423 01b4 13 .uleb128 0x13
+ 47424 01b5 00 .byte 0x0
+ 47425 01b6 00 .byte 0x0
+ 47426 01b7 25 .uleb128 0x25
+ 47427 01b8 2E .uleb128 0x2e
+ 47428 01b9 01 .byte 0x1
+ 47429 01ba 03 .uleb128 0x3
+ 47430 01bb 0E .uleb128 0xe
+ 47431 01bc 3A .uleb128 0x3a
+ 47432 01bd 0B .uleb128 0xb
+ 47433 01be 3B .uleb128 0x3b
+ 47434 01bf 05 .uleb128 0x5
+ 47435 01c0 27 .uleb128 0x27
+ 47436 01c1 0C .uleb128 0xc
+ 47437 01c2 49 .uleb128 0x49
+ 47438 01c3 13 .uleb128 0x13
+ 47439 01c4 20 .uleb128 0x20
+ 47440 01c5 0B .uleb128 0xb
+ 47441 01c6 01 .uleb128 0x1
+ 47442 01c7 13 .uleb128 0x13
+ 47443 01c8 00 .byte 0x0
+ 47444 01c9 00 .byte 0x0
+ 47445 01ca 26 .uleb128 0x26
+ 47446 01cb 05 .uleb128 0x5
+ 47447 01cc 00 .byte 0x0
+ 47448 01cd 03 .uleb128 0x3
+ 47449 01ce 0E .uleb128 0xe
+ 47450 01cf 3A .uleb128 0x3a
+ 47451 01d0 0B .uleb128 0xb
+ 47452 01d1 3B .uleb128 0x3b
+ 47453 01d2 05 .uleb128 0x5
+ 47454 01d3 49 .uleb128 0x49
+ 47455 01d4 13 .uleb128 0x13
+ 47456 01d5 00 .byte 0x0
+ 47457 01d6 00 .byte 0x0
+ 47458 01d7 27 .uleb128 0x27
+ 47459 01d8 34 .uleb128 0x34
+ 47460 01d9 00 .byte 0x0
+ 47461 01da 03 .uleb128 0x3
+ 47462 01db 0E .uleb128 0xe
+ 47463 01dc 3A .uleb128 0x3a
+ 47464 01dd 0B .uleb128 0xb
+ 47465 01de 3B .uleb128 0x3b
+ 47466 01df 05 .uleb128 0x5
+ 47467 01e0 49 .uleb128 0x49
+ 47468 01e1 13 .uleb128 0x13
+
GAS LISTING /tmp/ccMa7HLZ.s page 1196
+
+
+ 47469 01e2 00 .byte 0x0
+ 47470 01e3 00 .byte 0x0
+ 47471 01e4 28 .uleb128 0x28
+ 47472 01e5 34 .uleb128 0x34
+ 47473 01e6 00 .byte 0x0
+ 47474 01e7 03 .uleb128 0x3
+ 47475 01e8 08 .uleb128 0x8
+ 47476 01e9 3A .uleb128 0x3a
+ 47477 01ea 0B .uleb128 0xb
+ 47478 01eb 3B .uleb128 0x3b
+ 47479 01ec 05 .uleb128 0x5
+ 47480 01ed 49 .uleb128 0x49
+ 47481 01ee 13 .uleb128 0x13
+ 47482 01ef 00 .byte 0x0
+ 47483 01f0 00 .byte 0x0
+ 47484 01f1 29 .uleb128 0x29
+ 47485 01f2 0B .uleb128 0xb
+ 47486 01f3 01 .byte 0x1
+ 47487 01f4 01 .uleb128 0x1
+ 47488 01f5 13 .uleb128 0x13
+ 47489 01f6 00 .byte 0x0
+ 47490 01f7 00 .byte 0x0
+ 47491 01f8 2A .uleb128 0x2a
+ 47492 01f9 0B .uleb128 0xb
+ 47493 01fa 01 .byte 0x1
+ 47494 01fb 00 .byte 0x0
+ 47495 01fc 00 .byte 0x0
+ 47496 01fd 2B .uleb128 0x2b
+ 47497 01fe 05 .uleb128 0x5
+ 47498 01ff 00 .byte 0x0
+ 47499 0200 03 .uleb128 0x3
+ 47500 0201 08 .uleb128 0x8
+ 47501 0202 3A .uleb128 0x3a
+ 47502 0203 0B .uleb128 0xb
+ 47503 0204 3B .uleb128 0x3b
+ 47504 0205 05 .uleb128 0x5
+ 47505 0206 49 .uleb128 0x49
+ 47506 0207 13 .uleb128 0x13
+ 47507 0208 00 .byte 0x0
+ 47508 0209 00 .byte 0x0
+ 47509 020a 2C .uleb128 0x2c
+ 47510 020b 34 .uleb128 0x34
+ 47511 020c 00 .byte 0x0
+ 47512 020d 03 .uleb128 0x3
+ 47513 020e 0E .uleb128 0xe
+ 47514 020f 3A .uleb128 0x3a
+ 47515 0210 0B .uleb128 0xb
+ 47516 0211 3B .uleb128 0x3b
+ 47517 0212 05 .uleb128 0x5
+ 47518 0213 49 .uleb128 0x49
+ 47519 0214 13 .uleb128 0x13
+ 47520 0215 1C .uleb128 0x1c
+ 47521 0216 0A .uleb128 0xa
+ 47522 0217 00 .byte 0x0
+ 47523 0218 00 .byte 0x0
+ 47524 0219 2D .uleb128 0x2d
+ 47525 021a 2E .uleb128 0x2e
+
GAS LISTING /tmp/ccMa7HLZ.s page 1197
+
+
+ 47526 021b 01 .byte 0x1
+ 47527 021c 03 .uleb128 0x3
+ 47528 021d 0E .uleb128 0xe
+ 47529 021e 3A .uleb128 0x3a
+ 47530 021f 0B .uleb128 0xb
+ 47531 0220 3B .uleb128 0x3b
+ 47532 0221 05 .uleb128 0x5
+ 47533 0222 27 .uleb128 0x27
+ 47534 0223 0C .uleb128 0xc
+ 47535 0224 11 .uleb128 0x11
+ 47536 0225 01 .uleb128 0x1
+ 47537 0226 12 .uleb128 0x12
+ 47538 0227 01 .uleb128 0x1
+ 47539 0228 40 .uleb128 0x40
+ 47540 0229 06 .uleb128 0x6
+ 47541 022a 01 .uleb128 0x1
+ 47542 022b 13 .uleb128 0x13
+ 47543 022c 00 .byte 0x0
+ 47544 022d 00 .byte 0x0
+ 47545 022e 2E .uleb128 0x2e
+ 47546 022f 05 .uleb128 0x5
+ 47547 0230 00 .byte 0x0
+ 47548 0231 03 .uleb128 0x3
+ 47549 0232 0E .uleb128 0xe
+ 47550 0233 3A .uleb128 0x3a
+ 47551 0234 0B .uleb128 0xb
+ 47552 0235 3B .uleb128 0x3b
+ 47553 0236 05 .uleb128 0x5
+ 47554 0237 49 .uleb128 0x49
+ 47555 0238 13 .uleb128 0x13
+ 47556 0239 02 .uleb128 0x2
+ 47557 023a 0A .uleb128 0xa
+ 47558 023b 00 .byte 0x0
+ 47559 023c 00 .byte 0x0
+ 47560 023d 2F .uleb128 0x2f
+ 47561 023e 05 .uleb128 0x5
+ 47562 023f 00 .byte 0x0
+ 47563 0240 03 .uleb128 0x3
+ 47564 0241 08 .uleb128 0x8
+ 47565 0242 3A .uleb128 0x3a
+ 47566 0243 0B .uleb128 0xb
+ 47567 0244 3B .uleb128 0x3b
+ 47568 0245 05 .uleb128 0x5
+ 47569 0246 49 .uleb128 0x49
+ 47570 0247 13 .uleb128 0x13
+ 47571 0248 02 .uleb128 0x2
+ 47572 0249 0A .uleb128 0xa
+ 47573 024a 00 .byte 0x0
+ 47574 024b 00 .byte 0x0
+ 47575 024c 30 .uleb128 0x30
+ 47576 024d 34 .uleb128 0x34
+ 47577 024e 00 .byte 0x0
+ 47578 024f 03 .uleb128 0x3
+ 47579 0250 0E .uleb128 0xe
+ 47580 0251 3A .uleb128 0x3a
+ 47581 0252 0B .uleb128 0xb
+ 47582 0253 3B .uleb128 0x3b
+
GAS LISTING /tmp/ccMa7HLZ.s page 1198
+
+
+ 47583 0254 05 .uleb128 0x5
+ 47584 0255 49 .uleb128 0x49
+ 47585 0256 13 .uleb128 0x13
+ 47586 0257 02 .uleb128 0x2
+ 47587 0258 0A .uleb128 0xa
+ 47588 0259 00 .byte 0x0
+ 47589 025a 00 .byte 0x0
+ 47590 025b 31 .uleb128 0x31
+ 47591 025c 1D .uleb128 0x1d
+ 47592 025d 01 .byte 0x1
+ 47593 025e 31 .uleb128 0x31
+ 47594 025f 13 .uleb128 0x13
+ 47595 0260 11 .uleb128 0x11
+ 47596 0261 01 .uleb128 0x1
+ 47597 0262 12 .uleb128 0x12
+ 47598 0263 01 .uleb128 0x1
+ 47599 0264 58 .uleb128 0x58
+ 47600 0265 0B .uleb128 0xb
+ 47601 0266 59 .uleb128 0x59
+ 47602 0267 05 .uleb128 0x5
+ 47603 0268 01 .uleb128 0x1
+ 47604 0269 13 .uleb128 0x13
+ 47605 026a 00 .byte 0x0
+ 47606 026b 00 .byte 0x0
+ 47607 026c 32 .uleb128 0x32
+ 47608 026d 05 .uleb128 0x5
+ 47609 026e 00 .byte 0x0
+ 47610 026f 31 .uleb128 0x31
+ 47611 0270 13 .uleb128 0x13
+ 47612 0271 02 .uleb128 0x2
+ 47613 0272 0A .uleb128 0xa
+ 47614 0273 00 .byte 0x0
+ 47615 0274 00 .byte 0x0
+ 47616 0275 33 .uleb128 0x33
+ 47617 0276 0B .uleb128 0xb
+ 47618 0277 01 .byte 0x1
+ 47619 0278 11 .uleb128 0x11
+ 47620 0279 01 .uleb128 0x1
+ 47621 027a 12 .uleb128 0x12
+ 47622 027b 01 .uleb128 0x1
+ 47623 027c 00 .byte 0x0
+ 47624 027d 00 .byte 0x0
+ 47625 027e 34 .uleb128 0x34
+ 47626 027f 34 .uleb128 0x34
+ 47627 0280 00 .byte 0x0
+ 47628 0281 31 .uleb128 0x31
+ 47629 0282 13 .uleb128 0x13
+ 47630 0283 02 .uleb128 0x2
+ 47631 0284 0A .uleb128 0xa
+ 47632 0285 00 .byte 0x0
+ 47633 0286 00 .byte 0x0
+ 47634 0287 35 .uleb128 0x35
+ 47635 0288 1D .uleb128 0x1d
+ 47636 0289 01 .byte 0x1
+ 47637 028a 31 .uleb128 0x31
+ 47638 028b 13 .uleb128 0x13
+ 47639 028c 11 .uleb128 0x11
+
GAS LISTING /tmp/ccMa7HLZ.s page 1199
+
+
+ 47640 028d 01 .uleb128 0x1
+ 47641 028e 12 .uleb128 0x12
+ 47642 028f 01 .uleb128 0x1
+ 47643 0290 58 .uleb128 0x58
+ 47644 0291 0B .uleb128 0xb
+ 47645 0292 59 .uleb128 0x59
+ 47646 0293 05 .uleb128 0x5
+ 47647 0294 00 .byte 0x0
+ 47648 0295 00 .byte 0x0
+ 47649 0296 36 .uleb128 0x36
+ 47650 0297 0B .uleb128 0xb
+ 47651 0298 01 .byte 0x1
+ 47652 0299 11 .uleb128 0x11
+ 47653 029a 01 .uleb128 0x1
+ 47654 029b 12 .uleb128 0x12
+ 47655 029c 01 .uleb128 0x1
+ 47656 029d 01 .uleb128 0x1
+ 47657 029e 13 .uleb128 0x13
+ 47658 029f 00 .byte 0x0
+ 47659 02a0 00 .byte 0x0
+ 47660 02a1 37 .uleb128 0x37
+ 47661 02a2 34 .uleb128 0x34
+ 47662 02a3 00 .byte 0x0
+ 47663 02a4 03 .uleb128 0x3
+ 47664 02a5 08 .uleb128 0x8
+ 47665 02a6 3A .uleb128 0x3a
+ 47666 02a7 0B .uleb128 0xb
+ 47667 02a8 3B .uleb128 0x3b
+ 47668 02a9 05 .uleb128 0x5
+ 47669 02aa 49 .uleb128 0x49
+ 47670 02ab 13 .uleb128 0x13
+ 47671 02ac 02 .uleb128 0x2
+ 47672 02ad 0A .uleb128 0xa
+ 47673 02ae 00 .byte 0x0
+ 47674 02af 00 .byte 0x0
+ 47675 02b0 38 .uleb128 0x38
+ 47676 02b1 2E .uleb128 0x2e
+ 47677 02b2 01 .byte 0x1
+ 47678 02b3 03 .uleb128 0x3
+ 47679 02b4 0E .uleb128 0xe
+ 47680 02b5 3A .uleb128 0x3a
+ 47681 02b6 0B .uleb128 0xb
+ 47682 02b7 3B .uleb128 0x3b
+ 47683 02b8 05 .uleb128 0x5
+ 47684 02b9 27 .uleb128 0x27
+ 47685 02ba 0C .uleb128 0xc
+ 47686 02bb 49 .uleb128 0x49
+ 47687 02bc 13 .uleb128 0x13
+ 47688 02bd 11 .uleb128 0x11
+ 47689 02be 01 .uleb128 0x1
+ 47690 02bf 12 .uleb128 0x12
+ 47691 02c0 01 .uleb128 0x1
+ 47692 02c1 40 .uleb128 0x40
+ 47693 02c2 06 .uleb128 0x6
+ 47694 02c3 01 .uleb128 0x1
+ 47695 02c4 13 .uleb128 0x13
+ 47696 02c5 00 .byte 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1200
+
+
+ 47697 02c6 00 .byte 0x0
+ 47698 02c7 39 .uleb128 0x39
+ 47699 02c8 2E .uleb128 0x2e
+ 47700 02c9 00 .byte 0x0
+ 47701 02ca 03 .uleb128 0x3
+ 47702 02cb 0E .uleb128 0xe
+ 47703 02cc 3A .uleb128 0x3a
+ 47704 02cd 0B .uleb128 0xb
+ 47705 02ce 3B .uleb128 0x3b
+ 47706 02cf 05 .uleb128 0x5
+ 47707 02d0 49 .uleb128 0x49
+ 47708 02d1 13 .uleb128 0x13
+ 47709 02d2 11 .uleb128 0x11
+ 47710 02d3 01 .uleb128 0x1
+ 47711 02d4 12 .uleb128 0x12
+ 47712 02d5 01 .uleb128 0x1
+ 47713 02d6 40 .uleb128 0x40
+ 47714 02d7 06 .uleb128 0x6
+ 47715 02d8 00 .byte 0x0
+ 47716 02d9 00 .byte 0x0
+ 47717 02da 3A .uleb128 0x3a
+ 47718 02db 34 .uleb128 0x34
+ 47719 02dc 00 .byte 0x0
+ 47720 02dd 03 .uleb128 0x3
+ 47721 02de 0E .uleb128 0xe
+ 47722 02df 49 .uleb128 0x49
+ 47723 02e0 13 .uleb128 0x13
+ 47724 02e1 34 .uleb128 0x34
+ 47725 02e2 0C .uleb128 0xc
+ 47726 02e3 02 .uleb128 0x2
+ 47727 02e4 0A .uleb128 0xa
+ 47728 02e5 00 .byte 0x0
+ 47729 02e6 00 .byte 0x0
+ 47730 02e7 3B .uleb128 0x3b
+ 47731 02e8 2E .uleb128 0x2e
+ 47732 02e9 01 .byte 0x1
+ 47733 02ea 03 .uleb128 0x3
+ 47734 02eb 0E .uleb128 0xe
+ 47735 02ec 3A .uleb128 0x3a
+ 47736 02ed 0B .uleb128 0xb
+ 47737 02ee 3B .uleb128 0x3b
+ 47738 02ef 05 .uleb128 0x5
+ 47739 02f0 49 .uleb128 0x49
+ 47740 02f1 13 .uleb128 0x13
+ 47741 02f2 11 .uleb128 0x11
+ 47742 02f3 01 .uleb128 0x1
+ 47743 02f4 12 .uleb128 0x12
+ 47744 02f5 01 .uleb128 0x1
+ 47745 02f6 40 .uleb128 0x40
+ 47746 02f7 06 .uleb128 0x6
+ 47747 02f8 01 .uleb128 0x1
+ 47748 02f9 13 .uleb128 0x13
+ 47749 02fa 00 .byte 0x0
+ 47750 02fb 00 .byte 0x0
+ 47751 02fc 3C .uleb128 0x3c
+ 47752 02fd 2E .uleb128 0x2e
+ 47753 02fe 01 .byte 0x1
+
GAS LISTING /tmp/ccMa7HLZ.s page 1201
+
+
+ 47754 02ff 3F .uleb128 0x3f
+ 47755 0300 0C .uleb128 0xc
+ 47756 0301 03 .uleb128 0x3
+ 47757 0302 0E .uleb128 0xe
+ 47758 0303 3A .uleb128 0x3a
+ 47759 0304 0B .uleb128 0xb
+ 47760 0305 3B .uleb128 0x3b
+ 47761 0306 05 .uleb128 0x5
+ 47762 0307 27 .uleb128 0x27
+ 47763 0308 0C .uleb128 0xc
+ 47764 0309 49 .uleb128 0x49
+ 47765 030a 13 .uleb128 0x13
+ 47766 030b 11 .uleb128 0x11
+ 47767 030c 01 .uleb128 0x1
+ 47768 030d 12 .uleb128 0x12
+ 47769 030e 01 .uleb128 0x1
+ 47770 030f 40 .uleb128 0x40
+ 47771 0310 06 .uleb128 0x6
+ 47772 0311 01 .uleb128 0x1
+ 47773 0312 13 .uleb128 0x13
+ 47774 0313 00 .byte 0x0
+ 47775 0314 00 .byte 0x0
+ 47776 0315 3D .uleb128 0x3d
+ 47777 0316 34 .uleb128 0x34
+ 47778 0317 00 .byte 0x0
+ 47779 0318 03 .uleb128 0x3
+ 47780 0319 0E .uleb128 0xe
+ 47781 031a 3A .uleb128 0x3a
+ 47782 031b 0B .uleb128 0xb
+ 47783 031c 3B .uleb128 0x3b
+ 47784 031d 0B .uleb128 0xb
+ 47785 031e 49 .uleb128 0x49
+ 47786 031f 13 .uleb128 0x13
+ 47787 0320 02 .uleb128 0x2
+ 47788 0321 0A .uleb128 0xa
+ 47789 0322 00 .byte 0x0
+ 47790 0323 00 .byte 0x0
+ 47791 0324 00 .byte 0x0
+ 47792 .section .debug_pubnames,"", at progbits
+ 47793 0000 29000000 .long 0x29
+ 47794 0004 0200 .value 0x2
+ 47795 0006 00000000 .long .Ldebug_info0
+ 47796 000a 99D50000 .long 0xd599
+ 47797 000e 7ED30000 .long 0xd37e
+ 47798 0012 4B414553 .string "KAESBlockCipherVecMake"
+ 47798 426C6F63
+ 47798 6B436970
+ 47798 68657256
+ 47798 65634D61
+ 47799 0029 00000000 .long 0x0
+ 47800 .section .debug_aranges,"", at progbits
+ 47801 0000 2C000000 .long 0x2c
+ 47802 0004 0200 .value 0x2
+ 47803 0006 00000000 .long .Ldebug_info0
+ 47804 000a 08 .byte 0x8
+ 47805 000b 00 .byte 0x0
+ 47806 000c 0000 .value 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s page 1202
+
+
+ 47807 000e 0000 .value 0x0
+ 47808 0010 00000000 .quad .Ltext0
+ 47808 00000000
+ 47809 0018 2C7D0100 .quad .Letext0-.Ltext0
+ 47809 00000000
+ 47810 0020 00000000 .quad 0x0
+ 47810 00000000
+ 47811 0028 00000000 .quad 0x0
+ 47811 00000000
+ 47812 .section .debug_str,"MS", at progbits,1
+ 47813 .LASF69:
+ 47814 0000 43697068 .string "CipherVec_AES_u"
+ 47814 65725665
+ 47814 635F4145
+ 47814 535F7500
+ 47815 .LASF287:
+ 47816 0010 7263496E .string "rcInsufficient"
+ 47816 73756666
+ 47816 69636965
+ 47816 6E7400
+ 47817 .LASF304:
+ 47818 001f 72634475 .string "rcDuplicate"
+ 47818 706C6963
+ 47818 61746500
+ 47819 .LASF349:
+ 47820 002b 4B414553 .string "KAESBlockCipherVecStateMerge1"
+ 47820 426C6F63
+ 47820 6B436970
+ 47820 68657256
+ 47820 65635374
+ 47821 .LASF107:
+ 47822 0049 7263436F .string "rcCondition"
+ 47822 6E646974
+ 47822 696F6E00
+ 47823 .LASF221:
+ 47824 0055 7263456E .string "rcEncrypting"
+ 47824 63727970
+ 47824 74696E67
+ 47824 00
+ 47825 .LASF334:
+ 47826 0062 4B414553 .string "KAESBlockCipherVecVecSub"
+ 47826 426C6F63
+ 47826 6B436970
+ 47826 68657256
+ 47826 65635665
+ 47827 .LASF360:
+ 47828 007b 4B414553 .string "KAESBlockCipherVecEqInvKeyExpansion"
+ 47828 426C6F63
+ 47828 6B436970
+ 47828 68657256
+ 47828 65634571
+ 47829 .LASF180:
+ 47830 009f 72634F70 .string "rcOpening"
+ 47830 656E696E
+ 47830 6700
+ 47831 .LASF188:
+ 47832 00a9 72635065 .string "rcPersisting"
+
GAS LISTING /tmp/ccMa7HLZ.s page 1203
+
+
+ 47832 72736973
+ 47832 74696E67
+ 47832 00
+ 47833 .LASF226:
+ 47834 00b6 72635365 .string "rcSending"
+ 47834 6E64696E
+ 47834 6700
+ 47835 .LASF220:
+ 47836 00c0 72634170 .string "rcAppending"
+ 47836 70656E64
+ 47836 696E6700
+ 47837 .LASF206:
+ 47838 00cc 72635369 .string "rcSignaling"
+ 47838 676E616C
+ 47838 696E6700
+ 47839 .LASF19:
+ 47840 00d8 4442475F .string "DBG_BLAST"
+ 47840 424C4153
+ 47840 5400
+ 47841 .LASF262:
+ 47842 00e2 72635369 .string "rcSignalSet"
+ 47842 676E616C
+ 47842 53657400
+ 47843 .LASF208:
+ 47844 00ee 72634174 .string "rcAttaching"
+ 47844 74616368
+ 47844 696E6700
+ 47845 .LASF140:
+ 47846 00fa 72635461 .string "rcTable"
+ 47846 626C6500
+ 47847 .LASF374:
+ 47848 0102 4B414553 .string "KAESBlockCipherVecCipher"
+ 47848 426C6F63
+ 47848 6B436970
+ 47848 68657256
+ 47848 65634369
+ 47849 .LASF407:
+ 47850 011b 6C6F5F66 .string "lo_filter"
+ 47850 696C7465
+ 47850 7200
+ 47851 .LASF104:
+ 47852 0125 72634275 .string "rcBuffer"
+ 47852 66666572
+ 47852 00
+ 47853 .LASF236:
+ 47854 012e 72634D65 .string "rcMemory"
+ 47854 6D6F7279
+ 47854 00
+ 47855 .LASF169:
+ 47856 0137 72634C6F .string "rcLocking"
+ 47856 636B696E
+ 47856 6700
+ 47857 .LASF204:
+ 47858 0141 72635061 .string "rcParsing"
+ 47858 7273696E
+ 47858 6700
+ 47859 .LASF233:
+
GAS LISTING /tmp/ccMa7HLZ.s page 1204
+
+
+ 47860 014b 72635365 .string "rcSelf"
+ 47860 6C6600
+ 47861 .LASF126:
+ 47862 0152 72634D65 .string "rcMetadata"
+ 47862 74616461
+ 47862 746100
+ 47863 .LASF249:
+ 47864 015d 72634172 .string "rcArcHardLink"
+ 47864 63486172
+ 47864 644C696E
+ 47864 6B00
+ 47865 .LASF386:
+ 47866 016b 4B414553 .string "KAESBlockCipherVecSetEncryptKey"
+ 47866 426C6F63
+ 47866 6B436970
+ 47866 68657256
+ 47866 65635365
+ 47867 .LASF75:
+ 47868 018b 7263436F .string "rcCont"
+ 47868 6E7400
+ 47869 .LASF257:
+ 47870 0192 72634368 .string "rcChecksum"
+ 47870 65636B73
+ 47870 756D00
+ 47871 .LASF391:
+ 47872 019d 5F5F6675 .string "__func__"
+ 47872 6E635F5F
+ 47872 00
+ 47873 .LASF301:
+ 47874 01a6 7263546F .string "rcTooShort"
+ 47874 6F53686F
+ 47874 727400
+ 47875 .LASF131:
+ 47876 01b1 72635061 .string "rcPagemap"
+ 47876 67656D61
+ 47876 7000
+ 47877 .LASF83:
+ 47878 01bb 72634170 .string "rcApp"
+ 47878 7000
+ 47879 .LASF114:
+ 47880 01c1 72634669 .string "rcFileDesc"
+ 47880 6C654465
+ 47880 736300
+ 47881 .LASF253:
+ 47882 01cc 72634974 .string "rcItem"
+ 47882 656D00
+ 47883 .LASF354:
+ 47884 01d3 4B414553 .string "KAESBlockCipherVecKeyExpansion256"
+ 47884 426C6F63
+ 47884 6B436970
+ 47884 68657256
+ 47884 65634B65
+ 47885 .LASF145:
+ 47886 01f5 72635472 .string "rcTrie"
+ 47886 696500
+ 47887 .LASF86:
+ 47888 01fc 72634C61 .string "rcLastModule_v1_0"
+
GAS LISTING /tmp/ccMa7HLZ.s page 1205
+
+
+ 47888 73744D6F
+ 47888 64756C65
+ 47888 5F76315F
+ 47888 3000
+ 47889 .LASF66:
+ 47890 020e 73746174 .string "state"
+ 47890 6500
+ 47891 .LASF355:
+ 47892 0214 4B414553 .string "KAESBlockCipherVecInvMixColumns"
+ 47892 426C6F63
+ 47892 6B436970
+ 47892 68657256
+ 47892 6563496E
+ 47893 .LASF244:
+ 47894 0234 72634279 .string "rcByteOrder"
+ 47894 74654F72
+ 47894 64657200
+ 47895 .LASF63:
+ 47896 0240 4145534B .string "AESKeySchedule"
+ 47896 65795363
+ 47896 68656475
+ 47896 6C6500
+ 47897 .LASF64:
+ 47898 024f 726F756E .string "round_keys"
+ 47898 645F6B65
+ 47898 797300
+ 47899 .LASF162:
+ 47900 025a 7263436F .string "rcConstructing"
+ 47900 6E737472
+ 47900 75637469
+ 47900 6E6700
+ 47901 .LASF10:
+ 47902 0269 72635F74 .string "rc_t"
+ 47902 00
+ 47903 .LASF238:
+ 47904 026e 7263466F .string "rcFormat"
+ 47904 726D6174
+ 47904 00
+ 47905 .LASF296:
+ 47906 0277 7263556E .string "rcUnauthorized"
+ 47906 61757468
+ 47906 6F72697A
+ 47906 656400
+ 47907 .LASF335:
+ 47908 0286 4B414553 .string "KAESBlockCipherVecRotBytesLeft"
+ 47908 426C6F63
+ 47908 6B436970
+ 47908 68657256
+ 47908 6563526F
+ 47909 .LASF368:
+ 47910 02a5 6D737461 .string "mstate"
+ 47910 746500
+ 47911 .LASF176:
+ 47912 02ac 72635265 .string "rcRemoving"
+ 47912 6D6F7669
+ 47912 6E6700
+ 47913 .LASF89:
+
GAS LISTING /tmp/ccMa7HLZ.s page 1206
+
+
+ 47914 02b7 72634B72 .string "rcKrypto"
+ 47914 7970746F
+ 47914 00
+ 47915 .LASF167:
+ 47916 02c0 72635669 .string "rcVisiting"
+ 47916 73697469
+ 47916 6E6700
+ 47917 .LASF97:
+ 47918 02cb 72634172 .string "rcArc"
+ 47918 6300
+ 47919 .LASF72:
+ 47920 02d1 72634578 .string "rcExe"
+ 47920 6500
+ 47921 .LASF302:
+ 47922 02d7 7263546F .string "rcTooLong"
+ 47922 6F4C6F6E
+ 47922 6700
+ 47923 .LASF230:
+ 47924 02e1 52434F62 .string "RCObject"
+ 47924 6A656374
+ 47924 00
+ 47925 .LASF240:
+ 47926 02ea 7263496E .string "rcInterface"
+ 47926 74657266
+ 47926 61636500
+ 47927 .LASF409:
+ 47928 02f6 4B414553 .string "KAESBlockCipherVecFFtable"
+ 47928 426C6F63
+ 47928 6B436970
+ 47928 68657256
+ 47928 65634646
+ 47929 .LASF168:
+ 47930 0310 72635265 .string "rcResolving"
+ 47930 736F6C76
+ 47930 696E6700
+ 47931 .LASF110:
+ 47932 031c 72634469 .string "rcDirectory"
+ 47932 72656374
+ 47932 6F727900
+ 47933 .LASF2:
+ 47934 0328 6C6F6E67 .string "long int"
+ 47934 20696E74
+ 47934 00
+ 47935 .LASF58:
+ 47936 0331 41455357 .string "AESWord"
+ 47936 6F726400
+ 47937 .LASF198:
+ 47938 0339 72635661 .string "rcValidating"
+ 47938 6C696461
+ 47938 74696E67
+ 47938 00
+ 47939 .LASF327:
+ 47940 0346 4B414553 .string "KAESBlockCipherVecVecAnd"
+ 47940 426C6F63
+ 47940 6B436970
+ 47940 68657256
+ 47940 65635665
+
GAS LISTING /tmp/ccMa7HLZ.s page 1207
+
+
+ 47941 .LASF100:
+ 47942 035f 72634172 .string "rcArgv"
+ 47942 677600
+ 47943 .LASF76:
+ 47944 0366 72634353 .string "rcCS"
+ 47944 00
+ 47945 .LASF157:
+ 47946 036b 72635572 .string "rcUri"
+ 47946 6900
+ 47947 .LASF179:
+ 47948 0371 72634372 .string "rcCreating"
+ 47948 65617469
+ 47948 6E6700
+ 47949 .LASF343:
+ 47950 037c 6B676173 .string "kgastate"
+ 47950 74617465
+ 47950 00
+ 47951 .LASF337:
+ 47952 0385 4B414553 .string "KAESBlockCipherVecVecXor"
+ 47952 426C6F63
+ 47952 6B436970
+ 47952 68657256
+ 47952 65635665
+ 47953 .LASF52:
+ 47954 039e 656E6372 .string "encrypt"
+ 47954 79707400
+ 47955 .LASF405:
+ 47956 03a6 4B414553 .string "KAESBlockCipherVecRijndaelSBoxV"
+ 47956 426C6F63
+ 47956 6B436970
+ 47956 68657256
+ 47956 65635269
+ 47957 .LASF16:
+ 47958 03c6 76313238 .string "v128_u8_t"
+ 47958 5F75385F
+ 47958 7400
+ 47959 .LASF24:
+ 47960 03d0 4442475F .string "DBG_XML"
+ 47960 584D4C00
+ 47961 .LASF341:
+ 47962 03d8 73686966 .string "shift"
+ 47962 7400
+ 47963 .LASF36:
+ 47964 03de 4442475F .string "DBG_MOD_COUNT"
+ 47964 4D4F445F
+ 47964 434F554E
+ 47964 5400
+ 47965 .LASF81:
+ 47966 03ec 72634442 .string "rcDB"
+ 47966 00
+ 47967 .LASF375:
+ 47968 03f1 4B414553 .string "KAESBlockCipherVecEqInvFirstRound"
+ 47968 426C6F63
+ 47968 6B436970
+ 47968 68657256
+ 47968 65634571
+ 47969 .LASF259:
+
GAS LISTING /tmp/ccMa7HLZ.s page 1208
+
+
+ 47970 0413 7263436F .string "rcConnection"
+ 47970 6E6E6563
+ 47970 74696F6E
+ 47970 00
+ 47971 .LASF127:
+ 47972 0420 72634D67 .string "rcMgr"
+ 47972 7200
+ 47973 .LASF289:
+ 47974 0426 72635669 .string "rcViolated"
+ 47974 6F6C6174
+ 47974 656400
+ 47975 .LASF364:
+ 47976 0431 4B414553 .string "KAESBlockCipherVecFirstRound"
+ 47976 426C6F63
+ 47976 6B436970
+ 47976 68657256
+ 47976 65634669
+ 47977 .LASF222:
+ 47978 044e 72634465 .string "rcDecrypting"
+ 47978 63727970
+ 47978 74696E67
+ 47978 00
+ 47979 .LASF0:
+ 47980 045b 7369676E .string "signed char"
+ 47980 65642063
+ 47980 68617200
+ 47981 .LASF5:
+ 47982 0467 75696E74 .string "uint8_t"
+ 47982 385F7400
+ 47983 .LASF105:
+ 47984 046f 72634368 .string "rcChar"
+ 47984 617200
+ 47985 .LASF90:
+ 47986 0476 72635244 .string "rcRDBMS"
+ 47986 424D5300
+ 47987 .LASF379:
+ 47988 047e 496E7653 .string "InvShiftRowTable"
+ 47988 68696674
+ 47988 526F7754
+ 47988 61626C65
+ 47988 00
+ 47989 .LASF199:
+ 47990 048f 72634578 .string "rcExecuting"
+ 47990 65637574
+ 47990 696E6700
+ 47991 .LASF390:
+ 47992 049b 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 47992 45545459
+ 47992 5F46554E
+ 47992 4354494F
+ 47992 4E5F5F00
+ 47993 .LASF17:
+ 47994 04af 4442475F .string "DBG_MOD_NOT_FOUND"
+ 47994 4D4F445F
+ 47994 4E4F545F
+ 47994 464F554E
+ 47994 4400
+
GAS LISTING /tmp/ccMa7HLZ.s page 1209
+
+
+ 47995 .LASF323:
+ 47996 04c1 636F6C75 .string "column"
+ 47996 6D6E00
+ 47997 .LASF186:
+ 47998 04c8 72635265 .string "rcReverting"
+ 47998 76657274
+ 47998 696E6700
+ 47999 .LASF102:
+ 48000 04d4 72634261 .string "rcBarrier"
+ 48000 72726965
+ 48000 7200
+ 48001 .LASF286:
+ 48002 04de 72634578 .string "rcExhausted"
+ 48002 68617573
+ 48002 74656400
+ 48003 .LASF3:
+ 48004 04ea 756E7369 .string "unsigned char"
+ 48004 676E6564
+ 48004 20636861
+ 48004 7200
+ 48005 .LASF159:
+ 48006 04f8 5243436F .string "RCContext"
+ 48006 6E746578
+ 48006 7400
+ 48007 .LASF122:
+ 48008 0502 72634C6F .string "rcLock"
+ 48008 636B00
+ 48009 .LASF275:
+ 48010 0509 72634261 .string "rcBadVersion"
+ 48010 64566572
+ 48010 73696F6E
+ 48010 00
+ 48011 .LASF276:
+ 48012 0516 72634465 .string "rcDestroyed"
+ 48012 7374726F
+ 48012 79656400
+ 48013 .LASF139:
+ 48014 0522 72635374 .string "rcString"
+ 48014 72696E67
+ 48014 00
+ 48015 .LASF101:
+ 48016 052b 72634174 .string "rcAttr"
+ 48016 747200
+ 48017 .LASF123:
+ 48018 0532 72634C6F .string "rcLog"
+ 48018 6700
+ 48019 .LASF399:
+ 48020 0538 6E65775F .string "new_obj"
+ 48020 6F626A00
+ 48021 .LASF20:
+ 48022 0540 4442475F .string "DBG_KDB"
+ 48022 4B444200
+ 48023 .LASF227:
+ 48024 0548 72635072 .string "rcProcessing"
+ 48024 6F636573
+ 48024 73696E67
+ 48024 00
+
GAS LISTING /tmp/ccMa7HLZ.s page 1210
+
+
+ 48025 .LASF77:
+ 48026 0555 72634646 .string "rcFF"
+ 48026 00
+ 48027 .LASF398:
+ 48028 055a 5F426F6F .string "_Bool"
+ 48028 6C00
+ 48029 .LASF78:
+ 48030 0560 72634653 .string "rcFS"
+ 48030 00
+ 48031 .LASF61:
+ 48032 0565 62797465 .string "bytes"
+ 48032 7300
+ 48033 .LASF165:
+ 48034 056b 72634163 .string "rcAccessing"
+ 48034 63657373
+ 48034 696E6700
+ 48035 .LASF283:
+ 48036 0577 7263496E .string "rcInterrupted"
+ 48036 74657272
+ 48036 75707465
+ 48036 6400
+ 48037 .LASF291:
+ 48038 0585 72634E6F .string "rcNotFound"
+ 48038 74466F75
+ 48038 6E6400
+ 48039 .LASF336:
+ 48040 0590 53686966 .string "ShiftRowTable"
+ 48040 74526F77
+ 48040 5461626C
+ 48040 6500
+ 48041 .LASF11:
+ 48042 059e 63686172 .string "char"
+ 48042 00
+ 48043 .LASF129:
+ 48044 05a3 72634E6F .string "rcNode"
+ 48044 646500
+ 48045 .LASF367:
+ 48046 05aa 4B414553 .string "KAESBlockCipherVecMiddleRound"
+ 48046 426C6F63
+ 48046 6B436970
+ 48046 68657256
+ 48046 65634D69
+ 48047 .LASF34:
+ 48048 05c8 4442475F .string "DBG_AES"
+ 48048 41455300
+ 48049 .LASF260:
+ 48050 05d0 72634572 .string "rcError"
+ 48050 726F7200
+ 48051 .LASF346:
+ 48052 05d8 72636F6E .string "rconw"
+ 48052 7700
+ 48053 .LASF348:
+ 48054 05de 4B414553 .string "KAESBlockCipherVecRotWord"
+ 48054 426C6F63
+ 48054 6B436970
+ 48054 68657256
+ 48054 6563526F
+
GAS LISTING /tmp/ccMa7HLZ.s page 1211
+
+
+ 48055 .LASF177:
+ 48056 05f8 7263436C .string "rcClearing"
+ 48056 65617269
+ 48056 6E6700
+ 48057 .LASF235:
+ 48058 0603 72634F66 .string "rcOffset"
+ 48058 66736574
+ 48058 00
+ 48059 .LASF181:
+ 48060 060c 7263436C .string "rcClosing"
+ 48060 6F73696E
+ 48060 6700
+ 48061 .LASF113:
+ 48062 0616 72634669 .string "rcFile"
+ 48062 6C6500
+ 48063 .LASF142:
+ 48064 061d 72635469 .string "rcTimeout"
+ 48064 6D656F75
+ 48064 7400
+ 48065 .LASF130:
+ 48066 0627 72634E75 .string "rcNumeral"
+ 48066 6D657261
+ 48066 6C00
+ 48067 .LASF207:
+ 48068 0631 72635761 .string "rcWaiting"
+ 48068 6974696E
+ 48068 6700
+ 48069 .LASF366:
+ 48070 063b 726F756E .string "round_key"
+ 48070 645F6B65
+ 48070 7900
+ 48071 .LASF211:
+ 48072 0645 72634650 .string "rcFPCoding"
+ 48072 436F6469
+ 48072 6E6700
+ 48073 .LASF344:
+ 48074 0650 4B414553 .string "KAESBlockCipherVecStateShiftRight64"
+ 48074 426C6F63
+ 48074 6B436970
+ 48074 68657256
+ 48074 65635374
+ 48075 .LASF263:
+ 48076 0674 72635369 .string "rcSize"
+ 48076 7A6500
+ 48077 .LASF248:
+ 48078 067b 72634469 .string "rcDirEntry"
+ 48078 72456E74
+ 48078 727900
+ 48079 .LASF200:
+ 48080 0686 72634875 .string "rcHuffmanCoding"
+ 48080 66666D61
+ 48080 6E436F64
+ 48080 696E6700
+ 48081 .LASF29:
+ 48082 0696 4442475F .string "DBG_KFG"
+ 48082 4B464700
+ 48083 .LASF67:
+
GAS LISTING /tmp/ccMa7HLZ.s page 1212
+
+
+ 48084 069e 636F6C75 .string "columns"
+ 48084 6D6E7300
+ 48085 .LASF281:
+ 48086 06a6 72634275 .string "rcBusy"
+ 48086 737900
+ 48087 .LASF26:
+ 48088 06ad 4442475F .string "DBG_SRA"
+ 48088 53524100
+ 48089 .LASF239:
+ 48090 06b5 72635472 .string "rcTransfer"
+ 48090 616E7366
+ 48090 657200
+ 48091 .LASF23:
+ 48092 06c0 4442475F .string "DBG_KFS"
+ 48092 4B465300
+ 48093 .LASF194:
+ 48094 06c8 72635061 .string "rcPacking"
+ 48094 636B696E
+ 48094 6700
+ 48095 .LASF190:
+ 48096 06d2 7263436F .string "rcCopying"
+ 48096 7079696E
+ 48096 6700
+ 48097 .LASF416:
+ 48098 06dc 4B414553 .string "KAESBlockCipherVecMake"
+ 48098 426C6F63
+ 48098 6B436970
+ 48098 68657256
+ 48098 65634D61
+ 48099 .LASF197:
+ 48100 06f3 72634465 .string "rcDecoding"
+ 48100 636F6469
+ 48100 6E6700
+ 48101 .LASF170:
+ 48102 06fe 7263556E .string "rcUnlocking"
+ 48102 6C6F636B
+ 48102 696E6700
+ 48103 .LASF356:
+ 48104 070a 4B414553 .string "KAESBlockCipherVecFFmul02"
+ 48104 426C6F63
+ 48104 6B436970
+ 48104 68657256
+ 48104 65634646
+ 48105 .LASF55:
+ 48106 0724 4B426C6F .string "KBlockCipherVec_vt_v1"
+ 48106 636B4369
+ 48106 70686572
+ 48106 5665635F
+ 48106 76745F76
+ 48107 .LASF22:
+ 48108 073a 4442475F .string "DBG_LEGREF"
+ 48108 4C454752
+ 48108 454600
+ 48109 .LASF359:
+ 48110 0745 4B414553 .string "KAESBlockCipherVecFFmul08"
+ 48110 426C6F63
+ 48110 6B436970
+
GAS LISTING /tmp/ccMa7HLZ.s page 1213
+
+
+ 48110 68657256
+ 48110 65634646
+ 48111 .LASF171:
+ 48112 075f 72635265 .string "rcRenaming"
+ 48112 6E616D69
+ 48112 6E6700
+ 48113 .LASF388:
+ 48114 076a 75736572 .string "user_key"
+ 48114 5F6B6579
+ 48114 00
+ 48115 .LASF395:
+ 48116 0773 4B414553 .string "KAESBlockCipherVecDecrypt"
+ 48116 426C6F63
+ 48116 6B436970
+ 48116 68657256
+ 48116 65634465
+ 48117 .LASF241:
+ 48118 078d 72634964 .string "rcId"
+ 48118 00
+ 48119 .LASF154:
+ 48120 0792 7263436D .string "rcCmd"
+ 48120 6400
+ 48121 .LASF32:
+ 48122 0798 4442475F .string "DBG_LOADLIB"
+ 48122 4C4F4144
+ 48122 4C494200
+ 48123 .LASF350:
+ 48124 07a4 4B414553 .string "KAESBlockCipherVecStateMerge2"
+ 48124 426C6F63
+ 48124 6B436970
+ 48124 68657256
+ 48124 65635374
+ 48125 .LASF293:
+ 48126 07c2 7263556E .string "rcUnlocked"
+ 48126 6C6F636B
+ 48126 656400
+ 48127 .LASF94:
+ 48128 07cd 52434D6F .string "RCModule"
+ 48128 64756C65
+ 48128 00
+ 48129 .LASF255:
+ 48130 07d6 7263456E .string "rcEncryption"
+ 48130 63727970
+ 48130 74696F6E
+ 48130 00
+ 48131 .LASF290:
+ 48132 07e3 72634578 .string "rcExists"
+ 48132 69737473
+ 48132 00
+ 48133 .LASF43:
+ 48134 07ec 43697068 .string "CipherVec"
+ 48134 65725665
+ 48134 6300
+ 48135 .LASF396:
+ 48136 07f6 4B414553 .string "KAESBlockCipherVecProcessorSupport"
+ 48136 426C6F63
+ 48136 6B436970
+
GAS LISTING /tmp/ccMa7HLZ.s page 1214
+
+
+ 48136 68657256
+ 48136 65635072
+ 48137 .LASF309:
+ 48138 0819 72634F70 .string "rcOpen"
+ 48138 656E00
+ 48139 .LASF295:
+ 48140 0820 72634465 .string "rcDeadlock"
+ 48140 61646C6F
+ 48140 636B00
+ 48141 .LASF340:
+ 48142 082b 4B414553 .string "KAESBlockCipherVecShiftXorColumns"
+ 48142 426C6F63
+ 48142 6B436970
+ 48142 68657256
+ 48142 65635368
+ 48143 .LASF232:
+ 48144 084d 72634C69 .string "rcLink"
+ 48144 6E6B00
+ 48145 .LASF219:
+ 48146 0854 7263466C .string "rcFlushing"
+ 48146 75736869
+ 48146 6E6700
+ 48147 .LASF267:
+ 48148 085f 72634E6F .string "rcNoErr"
+ 48148 45727200
+ 48149 .LASF400:
+ 48150 0867 7665635F .string "vec_00"
+ 48150 303000
+ 48151 .LASF401:
+ 48152 086e 7665635F .string "vec_01"
+ 48152 303100
+ 48153 .LASF246:
+ 48154 0875 72635461 .string "rcTag"
+ 48154 6700
+ 48155 .LASF28:
+ 48156 087b 4442475F .string "DBG_ALIGN"
+ 48156 414C4947
+ 48156 4E00
+ 48157 .LASF210:
+ 48158 0885 72634C6F .string "rcLogging"
+ 48158 6767696E
+ 48158 6700
+ 48159 .LASF410:
+ 48160 088f 4B414553 .string "KAESBlockCipherVecRcon"
+ 48160 426C6F63
+ 48160 6B436970
+ 48160 68657256
+ 48160 65635263
+ 48161 .LASF303:
+ 48162 08a6 7263546F .string "rcTooBig"
+ 48162 6F426967
+ 48162 00
+ 48163 .LASF381:
+ 48164 08af 4B414553 .string "KAESBlockCipherVecEqInvCipher"
+ 48164 426C6F63
+ 48164 6B436970
+ 48164 68657256
+
GAS LISTING /tmp/ccMa7HLZ.s page 1215
+
+
+ 48164 65634571
+ 48165 .LASF147:
+ 48166 08cd 72635665 .string "rcVector"
+ 48166 63746F72
+ 48166 00
+ 48167 .LASF182:
+ 48168 08d6 72635265 .string "rcResizing"
+ 48168 73697A69
+ 48168 6E6700
+ 48169 .LASF156:
+ 48170 08e1 72635175 .string "rcQuery"
+ 48170 65727900
+ 48171 .LASF378:
+ 48172 08e9 4B414553 .string "KAESBlockCipherVecInvShiftRows"
+ 48172 426C6F63
+ 48172 6B436970
+ 48172 68657256
+ 48172 6563496E
+ 48173 .LASF9:
+ 48174 0908 6C6F6E67 .string "long unsigned int"
+ 48174 20756E73
+ 48174 69676E65
+ 48174 6420696E
+ 48174 7400
+ 48175 .LASF288:
+ 48176 091a 72634578 .string "rcExcessive"
+ 48176 63657373
+ 48176 69766500
+ 48177 .LASF216:
+ 48178 0926 72634576 .string "rcEvaluating"
+ 48178 616C7561
+ 48178 74696E67
+ 48178 00
+ 48179 .LASF153:
+ 48180 0933 7263526E .string "rcRng"
+ 48180 6700
+ 48181 .LASF161:
+ 48182 0939 72634361 .string "rcCasting"
+ 48182 7374696E
+ 48182 6700
+ 48183 .LASF383:
+ 48184 0943 73656C66 .string "self"
+ 48184 00
+ 48185 .LASF121:
+ 48186 0948 72634974 .string "rcIterator"
+ 48186 65726174
+ 48186 6F7200
+ 48187 .LASF365:
+ 48188 0953 4B414553 .string "KAESBlockCipherVecAddRoundKey"
+ 48188 426C6F63
+ 48188 6B436970
+ 48188 68657256
+ 48188 65634164
+ 48189 .LASF56:
+ 48190 0971 4B426C6F .string "KBlockCipherVec"
+ 48190 636B4369
+ 48190 70686572
+
GAS LISTING /tmp/ccMa7HLZ.s page 1216
+
+
+ 48190 56656300
+ 48191 .LASF403:
+ 48192 0981 7665635F .string "vec_10"
+ 48192 313000
+ 48193 .LASF138:
+ 48194 0988 72635374 .string "rcStorage"
+ 48194 6F726167
+ 48194 6500
+ 48195 .LASF324:
+ 48196 0992 77686963 .string "which"
+ 48196 6800
+ 48197 .LASF382:
+ 48198 0998 4B414553 .string "KAESBlockCipherVecDestroy"
+ 48198 426C6F63
+ 48198 6B436970
+ 48198 68657256
+ 48198 65634465
+ 48199 .LASF305:
+ 48200 09b2 72634F75 .string "rcOutOfKDirectory"
+ 48200 744F664B
+ 48200 44697265
+ 48200 63746F72
+ 48200 7900
+ 48201 .LASF347:
+ 48202 09c4 4B414553 .string "KAESBlockCipherVecSubWord"
+ 48202 426C6F63
+ 48202 6B436970
+ 48202 68657256
+ 48202 65635375
+ 48203 .LASF250:
+ 48204 09de 7263526F .string "rcRow"
+ 48204 7700
+ 48205 .LASF25:
+ 48206 09e4 4442475F .string "DBG_VDB"
+ 48206 56444200
+ 48207 .LASF150:
+ 48208 09ec 72634C61 .string "rcLastTarget_v1_0"
+ 48208 73745461
+ 48208 72676574
+ 48208 5F76315F
+ 48208 3000
+ 48209 .LASF158:
+ 48210 09fe 72634C61 .string "rcLastTarget_v1_1"
+ 48210 73745461
+ 48210 72676574
+ 48210 5F76315F
+ 48210 3100
+ 48211 .LASF137:
+ 48212 0a10 72635365 .string "rcSemaphore"
+ 48212 6D617068
+ 48212 6F726500
+ 48213 .LASF282:
+ 48214 0a1c 7263496E .string "rcIncomplete"
+ 48214 636F6D70
+ 48214 6C657465
+ 48214 00
+ 48215 .LASF311:
+
GAS LISTING /tmp/ccMa7HLZ.s page 1217
+
+
+ 48216 0a29 72634E6F .string "rcNotOpen"
+ 48216 744F7065
+ 48216 6E00
+ 48217 .LASF120:
+ 48218 0a33 7263496E .string "rcIndex"
+ 48218 64657800
+ 48219 .LASF27:
+ 48220 0a3b 4442475F .string "DBG_XARC"
+ 48220 58415243
+ 48220 00
+ 48221 .LASF413:
+ 48222 0a44 474E5520 .string "GNU C 4.4.2"
+ 48222 4320342E
+ 48222 342E3200
+ 48223 .LASF73:
+ 48224 0a50 72635275 .string "rcRuntime"
+ 48224 6E74696D
+ 48224 6500
+ 48225 .LASF112:
+ 48226 0a5a 7263586D .string "rcXmlDoc"
+ 48226 6C446F63
+ 48226 00
+ 48227 .LASF332:
+ 48228 0a63 67617465 .string "gate"
+ 48228 00
+ 48229 .LASF12:
+ 48230 0a68 6C6F6E67 .string "long long int"
+ 48230 206C6F6E
+ 48230 6720696E
+ 48230 7400
+ 48231 .LASF193:
+ 48232 0a76 7263506F .string "rcPositioning"
+ 48232 73697469
+ 48232 6F6E696E
+ 48232 6700
+ 48233 .LASF134:
+ 48234 0a84 72635175 .string "rcQueue"
+ 48234 65756500
+ 48235 .LASF209:
+ 48236 0a8c 72634465 .string "rcDetaching"
+ 48236 74616368
+ 48236 696E6700
+ 48237 .LASF124:
+ 48238 0a98 72634D44 .string "rcMD5SumFmt"
+ 48238 3553756D
+ 48238 466D7400
+ 48239 .LASF175:
+ 48240 0aa4 7263496E .string "rcInserting"
+ 48240 73657274
+ 48240 696E6700
+ 48241 .LASF223:
+ 48242 0ab0 7263436F .string "rcComparing"
+ 48242 6D706172
+ 48242 696E6700
+ 48243 .LASF285:
+ 48244 0abc 7263456D .string "rcEmpty"
+ 48244 70747900
+
GAS LISTING /tmp/ccMa7HLZ.s page 1218
+
+
+ 48245 .LASF117:
+ 48246 0ac4 7263466F .string "rcFormatter"
+ 48246 726D6174
+ 48246 74657200
+ 48247 .LASF369:
+ 48248 0ad0 6D726F75 .string "mround_keys"
+ 48248 6E645F6B
+ 48248 65797300
+ 48249 .LASF15:
+ 48250 0adc 646F7562 .string "double"
+ 48250 6C6500
+ 48251 .LASF202:
+ 48252 0ae3 72635265 .string "rcRegistering"
+ 48252 67697374
+ 48252 6572696E
+ 48252 6700
+ 48253 .LASF91:
+ 48254 0af1 72634E53 .string "rcNS"
+ 48254 00
+ 48255 .LASF234:
+ 48256 0af6 72635061 .string "rcParam"
+ 48256 72616D00
+ 48257 .LASF95:
+ 48258 0afe 52435461 .string "RCTarget"
+ 48258 72676574
+ 48258 00
+ 48259 .LASF370:
+ 48260 0b07 4B414553 .string "KAESBlockCipherVecShiftRows"
+ 48260 426C6F63
+ 48260 6B436970
+ 48260 68657256
+ 48260 65635368
+ 48261 .LASF41:
+ 48262 0b23 4442475F .string "DBG_AES_OBJECT"
+ 48262 4145535F
+ 48262 4F424A45
+ 48262 435400
+ 48263 .LASF331:
+ 48264 0b32 6D61736B .string "mask"
+ 48264 00
+ 48265 .LASF256:
+ 48266 0b37 72634372 .string "rcCrc"
+ 48266 6300
+ 48267 .LASF373:
+ 48268 0b3d 62737761 .string "bswap_32"
+ 48268 705F3332
+ 48268 00
+ 48269 .LASF31:
+ 48270 0b46 4442475F .string "DBG_SEARCH"
+ 48270 53454152
+ 48270 434800
+ 48271 .LASF84:
+ 48272 0b51 7263584D .string "rcXML"
+ 48272 4C00
+ 48273 .LASF361:
+ 48274 0b57 4B414553 .string "KAESBlockCipherVecEqInvKeyExpansion128"
+ 48274 426C6F63
+
GAS LISTING /tmp/ccMa7HLZ.s page 1219
+
+
+ 48274 6B436970
+ 48274 68657256
+ 48274 65634571
+ 48275 .LASF33:
+ 48276 0b7e 4442475F .string "DBG_VFS"
+ 48276 56465300
+ 48277 .LASF37:
+ 48278 0b86 4442475F .string "DBG_AES_KEYEXP"
+ 48278 4145535F
+ 48278 4B455945
+ 48278 585000
+ 48279 .LASF414:
+ 48280 0b95 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 48280 652F726F
+ 48280 6461726D
+ 48280 65722F73
+ 48280 72615F73
+ 48281 .LASF13:
+ 48282 0bcb 666C6F61 .string "float"
+ 48282 7400
+ 48283 .LASF178:
+ 48284 0bd1 72635570 .string "rcUpdating"
+ 48284 64617469
+ 48284 6E6700
+ 48285 .LASF384:
+ 48286 0bdc 4B414553 .string "KAESBlockCipherVecBlockSize"
+ 48286 426C6F63
+ 48286 6B436970
+ 48286 68657256
+ 48286 6563426C
+ 48287 .LASF205:
+ 48288 0bf8 7263436F .string "rcConverting"
+ 48288 6E766572
+ 48288 74696E67
+ 48288 00
+ 48289 .LASF191:
+ 48290 0c05 7263436F .string "rcConcatenating"
+ 48290 6E636174
+ 48290 656E6174
+ 48290 696E6700
+ 48291 .LASF70:
+ 48292 0c15 4B426C6F .string "KBlockCipher"
+ 48292 636B4369
+ 48292 70686572
+ 48292 00
+ 48293 .LASF148:
+ 48294 0c22 72634479 .string "rcDylib"
+ 48294 6C696200
+ 48295 .LASF297:
+ 48296 0c2a 72635265 .string "rcReadonly"
+ 48296 61646F6E
+ 48296 6C7900
+ 48297 .LASF392:
+ 48298 0c35 4B414553 .string "KAESBlockCipherVecSetDecryptKey"
+ 48298 426C6F63
+ 48298 6B436970
+ 48298 68657256
+
GAS LISTING /tmp/ccMa7HLZ.s page 1220
+
+
+ 48298 65635365
+ 48299 .LASF7:
+ 48300 0c55 756E7369 .string "unsigned int"
+ 48300 676E6564
+ 48300 20696E74
+ 48300 00
+ 48301 .LASF68:
+ 48302 0c62 67726964 .string "grid"
+ 48302 00
+ 48303 .LASF40:
+ 48304 0c67 4442475F .string "DBG_AES_INVCIPHER"
+ 48304 4145535F
+ 48304 494E5643
+ 48304 49504845
+ 48304 5200
+ 48305 .LASF298:
+ 48306 0c79 72635772 .string "rcWriteonly"
+ 48306 6974656F
+ 48306 6E6C7900
+ 48307 .LASF358:
+ 48308 0c85 4B414553 .string "KAESBlockCipherVecFFmul04"
+ 48308 426C6F63
+ 48308 6B436970
+ 48308 68657256
+ 48308 65634646
+ 48309 .LASF292:
+ 48310 0c9f 72634C6F .string "rcLocked"
+ 48310 636B6564
+ 48310 00
+ 48311 .LASF174:
+ 48312 0ca8 72635072 .string "rcProjecting"
+ 48312 6F6A6563
+ 48312 74696E67
+ 48312 00
+ 48313 .LASF79:
+ 48314 0cb5 72635053 .string "rcPS"
+ 48314 00
+ 48315 .LASF264:
+ 48316 0cba 72635265 .string "rcRefcount"
+ 48316 66636F75
+ 48316 6E7400
+ 48317 .LASF99:
+ 48318 0cc5 7263546F .string "rcTocEntry"
+ 48318 63456E74
+ 48318 727900
+ 48319 .LASF254:
+ 48320 0cd0 72634D6F .string "rcMode"
+ 48320 646500
+ 48321 .LASF313:
+ 48322 0cd7 7263556E .string "rcUnequal"
+ 48322 65717561
+ 48322 6C00
+ 48323 .LASF294:
+ 48324 0ce1 72634465 .string "rcDetached"
+ 48324 74616368
+ 48324 656400
+ 48325 .LASF300:
+
GAS LISTING /tmp/ccMa7HLZ.s page 1221
+
+
+ 48326 0cec 7263496E .string "rcInPlaceNotAllowed"
+ 48326 506C6163
+ 48326 654E6F74
+ 48326 416C6C6F
+ 48326 77656400
+ 48327 .LASF242:
+ 48328 0d00 72635261 .string "rcRange"
+ 48328 6E676500
+ 48329 .LASF415:
+ 48330 0d08 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 48330 652F726F
+ 48330 6461726D
+ 48330 65722F73
+ 48330 72615F73
+ 48331 .LASF328:
+ 48332 0d50 4B414553 .string "KAESBlockCipherVecVecDiv"
+ 48332 426C6F63
+ 48332 6B436970
+ 48332 68657256
+ 48332 65635665
+ 48333 .LASF252:
+ 48334 0d69 72634C61 .string "rcLastObject_v1_0"
+ 48334 73744F62
+ 48334 6A656374
+ 48334 5F76315F
+ 48334 3000
+ 48335 .LASF265:
+ 48336 0d7b 72634C61 .string "rcLastObject_v1_1"
+ 48336 73744F62
+ 48336 6A656374
+ 48336 5F76315F
+ 48336 3100
+ 48337 .LASF371:
+ 48338 0d8d 4B414553 .string "KAESBlockCipherVecMixColumns"
+ 48338 426C6F63
+ 48338 6B436970
+ 48338 68657256
+ 48338 65634D69
+ 48339 .LASF329:
+ 48340 0daa 4B414553 .string "KAESBlockCipherVecPackShuffleBytes"
+ 48340 426C6F63
+ 48340 6B436970
+ 48340 68657256
+ 48340 65635061
+ 48341 .LASF218:
+ 48342 0dcd 72634C61 .string "rcLastContext_v1_0"
+ 48342 7374436F
+ 48342 6E746578
+ 48342 745F7631
+ 48342 5F3000
+ 48343 .LASF229:
+ 48344 0de0 72634C61 .string "rcLastContext_v1_1"
+ 48344 7374436F
+ 48344 6E746578
+ 48344 745F7631
+ 48344 5F3100
+ 48345 .LASF320:
+
GAS LISTING /tmp/ccMa7HLZ.s page 1222
+
+
+ 48346 0df3 72636F6E .string "rcon"
+ 48346 00
+ 48347 .LASF363:
+ 48348 0df8 4B414553 .string "KAESBlockCipherVecEqInvKeyExpansion256"
+ 48348 426C6F63
+ 48348 6B436970
+ 48348 68657256
+ 48348 65634571
+ 48349 .LASF125:
+ 48350 0e1f 72634D65 .string "rcMemMap"
+ 48350 6D4D6170
+ 48350 00
+ 48351 .LASF57:
+ 48352 0e28 41455342 .string "AESByte"
+ 48352 79746500
+ 48353 .LASF149:
+ 48354 0e30 72634578 .string "rcExpression"
+ 48354 70726573
+ 48354 73696F6E
+ 48354 00
+ 48355 .LASF195:
+ 48356 0e3d 7263556E .string "rcUnpacking"
+ 48356 7061636B
+ 48356 696E6700
+ 48357 .LASF111:
+ 48358 0e49 7263446F .string "rcDoc"
+ 48358 6300
+ 48359 .LASF18:
+ 48360 0e4f 4442475F .string "DBG_APP"
+ 48360 41505000
+ 48361 .LASF212:
+ 48362 0e57 72634D75 .string "rcMultiplexing"
+ 48362 6C746970
+ 48362 6C657869
+ 48362 6E6700
+ 48363 .LASF214:
+ 48364 0e66 72635365 .string "rcSearching"
+ 48364 61726368
+ 48364 696E6700
+ 48365 .LASF408:
+ 48366 0e72 46465F74 .string "FF_tab"
+ 48366 616200
+ 48367 .LASF314:
+ 48368 0e79 72634661 .string "rcFailed"
+ 48368 696C6564
+ 48368 00
+ 48369 .LASF39:
+ 48370 0e82 4442475F .string "DBG_AES_INVKEYEXP"
+ 48370 4145535F
+ 48370 494E564B
+ 48370 45594558
+ 48370 5000
+ 48371 .LASF357:
+ 48372 0e94 4B414553 .string "KAESBlockCipherVecFFtab"
+ 48372 426C6F63
+ 48372 6B436970
+ 48372 68657256
+
GAS LISTING /tmp/ccMa7HLZ.s page 1223
+
+
+ 48372 65634646
+ 48373 .LASF118:
+ 48374 0eac 72634675 .string "rcFunctParam"
+ 48374 6E637450
+ 48374 6172616D
+ 48374 00
+ 48375 .LASF279:
+ 48376 0eb9 7263496E .string "rcIncorrect"
+ 48376 636F7272
+ 48376 65637400
+ 48377 .LASF60:
+ 48378 0ec5 776F7264 .string "word"
+ 48378 00
+ 48379 .LASF228:
+ 48380 0eca 72634964 .string "rcIdentifying"
+ 48380 656E7469
+ 48380 6679696E
+ 48380 6700
+ 48381 .LASF243:
+ 48382 0ed8 7263436F .string "rcConstraint"
+ 48382 6E737472
+ 48382 61696E74
+ 48382 00
+ 48383 .LASF269:
+ 48384 0ee5 7263556E .string "rcUnknown"
+ 48384 6B6E6F77
+ 48384 6E00
+ 48385 .LASF108:
+ 48386 0eef 72634375 .string "rcCursor"
+ 48386 72736F72
+ 48386 00
+ 48387 .LASF266:
+ 48388 0ef8 52435374 .string "RCState"
+ 48388 61746500
+ 48389 .LASF54:
+ 48390 0f00 4B426C6F .string "KBlockCipherByte"
+ 48390 636B4369
+ 48390 70686572
+ 48390 42797465
+ 48390 00
+ 48391 .LASF45:
+ 48392 0f11 4B426C6F .string "KBlockCipherByte_vt_v1"
+ 48392 636B4369
+ 48392 70686572
+ 48392 42797465
+ 48392 5F76745F
+ 48393 .LASF306:
+ 48394 0f28 72634967 .string "rcIgnored"
+ 48394 6E6F7265
+ 48394 6400
+ 48395 .LASF164:
+ 48396 0f32 72635265 .string "rcReleasing"
+ 48396 6C656173
+ 48396 696E6700
+ 48397 .LASF87:
+ 48398 0f3e 72634B46 .string "rcKFG"
+ 48398 4700
+
GAS LISTING /tmp/ccMa7HLZ.s page 1224
+
+
+ 48399 .LASF245:
+ 48400 0f44 72634D65 .string "rcMessage"
+ 48400 73736167
+ 48400 6500
+ 48401 .LASF192:
+ 48402 0f4e 7263466F .string "rcFormatting"
+ 48402 726D6174
+ 48402 74696E67
+ 48402 00
+ 48403 .LASF85:
+ 48404 0f5b 72635352 .string "rcSRA"
+ 48404 4100
+ 48405 .LASF261:
+ 48406 0f61 7263456E .string "rcEnvironment"
+ 48406 7669726F
+ 48406 6E6D656E
+ 48406 7400
+ 48407 .LASF14:
+ 48408 0f6f 6C6F6E67 .string "long long unsigned int"
+ 48408 206C6F6E
+ 48408 6720756E
+ 48408 7369676E
+ 48408 65642069
+ 48409 .LASF47:
+ 48410 0f86 64657374 .string "destroy"
+ 48410 726F7900
+ 48411 .LASF143:
+ 48412 0f8e 7263546F .string "rcToken"
+ 48412 6B656E00
+ 48413 .LASF203:
+ 48414 0f96 7263546F .string "rcTokenizing"
+ 48414 6B656E69
+ 48414 7A696E67
+ 48414 00
+ 48415 .LASF21:
+ 48416 0fa3 4442475F .string "DBG_REF"
+ 48416 52454600
+ 48417 .LASF404:
+ 48418 0fab 4B414553 .string "KAESBlockCipherVecRijndaelSBox"
+ 48418 426C6F63
+ 48418 6B436970
+ 48418 68657256
+ 48418 65635269
+ 48419 .LASF184:
+ 48420 0fca 72635772 .string "rcWriting"
+ 48420 6974696E
+ 48420 6700
+ 48421 .LASF160:
+ 48422 0fd4 7263416C .string "rcAllocating"
+ 48422 6C6F6361
+ 48422 74696E67
+ 48422 00
+ 48423 .LASF146:
+ 48424 0fe1 72635479 .string "rcType"
+ 48424 706500
+ 48425 .LASF342:
+ 48426 0fe8 4B414553 .string "KAESBlockCipherVecStateShiftLeft32"
+
GAS LISTING /tmp/ccMa7HLZ.s page 1225
+
+
+ 48426 426C6F63
+ 48426 6B436970
+ 48426 68657256
+ 48426 65635374
+ 48427 .LASF247:
+ 48428 100b 72635265 .string "rcResources"
+ 48428 736F7572
+ 48428 63657300
+ 48429 .LASF128:
+ 48430 1017 72634E61 .string "rcNamelist"
+ 48430 6D656C69
+ 48430 737400
+ 48431 .LASF338:
+ 48432 1022 4B414553 .string "KAESBlockCipherVecStateDupColumn3"
+ 48432 426C6F63
+ 48432 6B436970
+ 48432 68657256
+ 48432 65635374
+ 48433 .LASF380:
+ 48434 1044 4B414553 .string "KAESBlockCipherVecEqInvLastRound"
+ 48434 426C6F63
+ 48434 6B436970
+ 48434 68657256
+ 48434 65634571
+ 48435 .LASF312:
+ 48436 1065 7263556E .string "rcUndefined"
+ 48436 64656669
+ 48436 6E656400
+ 48437 .LASF280:
+ 48438 1071 7263496E .string "rcInconsistent"
+ 48438 636F6E73
+ 48438 69737465
+ 48438 6E7400
+ 48439 .LASF385:
+ 48440 1080 4B414553 .string "KAESBlockCipherVecKeySize"
+ 48440 426C6F63
+ 48440 6B436970
+ 48440 68657256
+ 48440 65634B65
+ 48441 .LASF225:
+ 48442 109a 72635265 .string "rcRetrieving"
+ 48442 74726965
+ 48442 76696E67
+ 48442 00
+ 48443 .LASF387:
+ 48444 10a7 656E6372 .string "encrypt_key"
+ 48444 7970745F
+ 48444 6B657900
+ 48445 .LASF53:
+ 48446 10b3 64656372 .string "decrypt"
+ 48446 79707400
+ 48447 .LASF46:
+ 48448 10bb 76657273 .string "version"
+ 48448 696F6E00
+ 48449 .LASF237:
+ 48450 10c3 72634E61 .string "rcName"
+ 48450 6D6500
+
GAS LISTING /tmp/ccMa7HLZ.s page 1226
+
+
+ 48451 .LASF406:
+ 48452 10ca 4B414553 .string "KAESBlockCipherVecRijndaelInvSBoxV"
+ 48452 426C6F63
+ 48452 6B436970
+ 48452 68657256
+ 48452 65635269
+ 48453 .LASF274:
+ 48454 10ed 72634E75 .string "rcNull"
+ 48454 6C6C00
+ 48455 .LASF196:
+ 48456 10f4 7263456E .string "rcEncoding"
+ 48456 636F6469
+ 48456 6E6700
+ 48457 .LASF115:
+ 48458 10ff 72634669 .string "rcFileFormat"
+ 48458 6C65466F
+ 48458 726D6174
+ 48458 00
+ 48459 .LASF152:
+ 48460 110c 7263456E .string "rcEncryptionKey"
+ 48460 63727970
+ 48460 74696F6E
+ 48460 4B657900
+ 48461 .LASF217:
+ 48462 111c 7263496E .string "rcInflating"
+ 48462 666C6174
+ 48462 696E6700
+ 48463 .LASF299:
+ 48464 1128 72634E6F .string "rcNoPerm"
+ 48464 5065726D
+ 48464 00
+ 48465 .LASF330:
+ 48466 1131 64657374 .string "dest"
+ 48466 00
+ 48467 .LASF372:
+ 48468 1136 4B414553 .string "KAESBlockCipherVecLastRound"
+ 48468 426C6F63
+ 48468 6B436970
+ 48468 68657256
+ 48468 65634C61
+ 48469 .LASF362:
+ 48470 1152 4B414553 .string "KAESBlockCipherVecEqInvKeyExpansion192"
+ 48470 426C6F63
+ 48470 6B436970
+ 48470 68657256
+ 48470 65634571
+ 48471 .LASF187:
+ 48472 1179 72635265 .string "rcResetting"
+ 48472 73657474
+ 48472 696E6700
+ 48473 .LASF48:
+ 48474 1185 626C6F63 .string "block_size"
+ 48474 6B5F7369
+ 48474 7A6500
+ 48475 .LASF135:
+ 48476 1190 72635257 .string "rcRWLock"
+ 48476 4C6F636B
+
GAS LISTING /tmp/ccMa7HLZ.s page 1227
+
+
+ 48476 00
+ 48477 .LASF166:
+ 48478 1199 72634C69 .string "rcListing"
+ 48478 7374696E
+ 48478 6700
+ 48479 .LASF351:
+ 48480 11a3 4B414553 .string "KAESBlockCipherVecKeyExpansion128"
+ 48480 426C6F63
+ 48480 6B436970
+ 48480 68657256
+ 48480 65634B65
+ 48481 .LASF402:
+ 48482 11c5 7665635F .string "vec_0F"
+ 48482 304600
+ 48483 .LASF116:
+ 48484 11cc 72634675 .string "rcFunction"
+ 48484 6E637469
+ 48484 6F6E00
+ 48485 .LASF38:
+ 48486 11d7 4442475F .string "DBG_AES_CIPHER"
+ 48486 4145535F
+ 48486 43495048
+ 48486 455200
+ 48487 .LASF272:
+ 48488 11e6 7263556E .string "rcUnrecognized"
+ 48488 7265636F
+ 48488 676E697A
+ 48488 656400
+ 48489 .LASF65:
+ 48490 11f5 6E756D62 .string "number_of_rounds"
+ 48490 65725F6F
+ 48490 665F726F
+ 48490 756E6473
+ 48490 00
+ 48491 .LASF88:
+ 48492 1206 7263416C .string "rcAlign"
+ 48492 69676E00
+ 48493 .LASF151:
+ 48494 120e 72635072 .string "rcProduction"
+ 48494 6F647563
+ 48494 74696F6E
+ 48494 00
+ 48495 .LASF93:
+ 48496 121b 72634C61 .string "rcLastModule_v1_1"
+ 48496 73744D6F
+ 48496 64756C65
+ 48496 5F76315F
+ 48496 3100
+ 48497 .LASF376:
+ 48498 122d 4B414553 .string "KAESBlockCipherVecEqInvMiddleRound"
+ 48498 426C6F63
+ 48498 6B436970
+ 48498 68657256
+ 48498 65634571
+ 48499 .LASF141:
+ 48500 1250 72635468 .string "rcThread"
+ 48500 72656164
+
GAS LISTING /tmp/ccMa7HLZ.s page 1228
+
+
+ 48500 00
+ 48501 .LASF189:
+ 48502 1259 72634672 .string "rcFreezing"
+ 48502 65657A69
+ 48502 6E6700
+ 48503 .LASF51:
+ 48504 1264 7365745F .string "set_decrypt_key"
+ 48504 64656372
+ 48504 7970745F
+ 48504 6B657900
+ 48505 .LASF71:
+ 48506 1274 62797465 .string "byte"
+ 48506 00
+ 48507 .LASF44:
+ 48508 1279 4B426C6F .string "KBlockCipher_vt"
+ 48508 636B4369
+ 48508 70686572
+ 48508 5F767400
+ 48509 .LASF393:
+ 48510 1289 64656372 .string "decrypt_key"
+ 48510 7970745F
+ 48510 6B657900
+ 48511 .LASF258:
+ 48512 1295 72635365 .string "rcSeed"
+ 48512 656400
+ 48513 .LASF333:
+ 48514 129c 4B414553 .string "KAESBlockCipherVecVecOr"
+ 48514 426C6F63
+ 48514 6B436970
+ 48514 68657256
+ 48514 65635665
+ 48515 .LASF215:
+ 48516 12b4 72634C6F .string "rcLoading"
+ 48516 6164696E
+ 48516 6700
+ 48517 .LASF1:
+ 48518 12be 73686F72 .string "short int"
+ 48518 7420696E
+ 48518 7400
+ 48519 .LASF8:
+ 48520 12c8 75696E74 .string "uint64_t"
+ 48520 36345F74
+ 48520 00
+ 48521 .LASF308:
+ 48522 12d1 72634C61 .string "rcLastState_v1_0"
+ 48522 73745374
+ 48522 6174655F
+ 48522 76315F30
+ 48522 00
+ 48523 .LASF317:
+ 48524 12e2 72634C61 .string "rcLastState_v1_1"
+ 48524 73745374
+ 48524 6174655F
+ 48524 76315F31
+ 48524 00
+ 48525 .LASF82:
+ 48526 12f3 72635644 .string "rcVDB"
+
GAS LISTING /tmp/ccMa7HLZ.s page 1229
+
+
+ 48526 4200
+ 48527 .LASF345:
+ 48528 12f9 4B414553 .string "KAESBlockCipherVecAesKeyGenAssistColumn1"
+ 48528 426C6F63
+ 48528 6B436970
+ 48528 68657256
+ 48528 65634165
+ 48529 .LASF353:
+ 48530 1322 4B414553 .string "KAESBlockCipherVecAesKeyGenAssistColumn2"
+ 48530 426C6F63
+ 48530 6B436970
+ 48530 68657256
+ 48530 65634165
+ 48531 .LASF319:
+ 48532 134b 4B414553 .string "KAESBlockCipherVecAesKeyGenAssistColumn3"
+ 48532 426C6F63
+ 48532 6B436970
+ 48532 68657256
+ 48532 65634165
+ 48533 .LASF50:
+ 48534 1374 7365745F .string "set_encrypt_key"
+ 48534 656E6372
+ 48534 7970745F
+ 48534 6B657900
+ 48535 .LASF80:
+ 48536 1384 72635846 .string "rcXF"
+ 48536 00
+ 48537 .LASF321:
+ 48538 1389 7672636F .string "vrcon"
+ 48538 6E00
+ 48539 .LASF322:
+ 48540 138f 4B414553 .string "KAESBlockCipherVecSetColumn"
+ 48540 426C6F63
+ 48540 6B436970
+ 48540 68657256
+ 48540 65635365
+ 48541 .LASF163:
+ 48542 13ab 72634465 .string "rcDestroying"
+ 48542 7374726F
+ 48542 79696E67
+ 48542 00
+ 48543 .LASF268:
+ 48544 13b8 7263446F .string "rcDone"
+ 48544 6E6500
+ 48545 .LASF98:
+ 48546 13bf 7263546F .string "rcToc"
+ 48546 6300
+ 48547 .LASF62:
+ 48548 13c5 43697068 .string "CipherVecByte"
+ 48548 65725665
+ 48548 63427974
+ 48548 6500
+ 48549 .LASF172:
+ 48550 13d3 7263416C .string "rcAliasing"
+ 48550 69617369
+ 48550 6E6700
+ 48551 .LASF133:
+
GAS LISTING /tmp/ccMa7HLZ.s page 1230
+
+
+ 48552 13de 72635072 .string "rcProcess"
+ 48552 6F636573
+ 48552 7300
+ 48553 .LASF231:
+ 48554 13e8 72634E6F .string "rcNoObj"
+ 48554 4F626A00
+ 48555 .LASF270:
+ 48556 13f0 7263556E .string "rcUnsupported"
+ 48556 73757070
+ 48556 6F727465
+ 48556 6400
+ 48557 .LASF106:
+ 48558 13fe 7263436F .string "rcColumn"
+ 48558 6C756D6E
+ 48558 00
+ 48559 .LASF271:
+ 48560 1407 7263556E .string "rcUnexpected"
+ 48560 65787065
+ 48560 63746564
+ 48560 00
+ 48561 .LASF411:
+ 48562 1414 4B414553 .string "KAESBlockCipherVecaes_ncbi_name"
+ 48562 426C6F63
+ 48562 6B436970
+ 48562 68657256
+ 48562 65636165
+ 48563 .LASF6:
+ 48564 1434 75696E74 .string "uint32_t"
+ 48564 33325F74
+ 48564 00
+ 48565 .LASF92:
+ 48566 143d 72635646 .string "rcVFS"
+ 48566 5300
+ 48567 .LASF30:
+ 48568 1443 4442475F .string "DBG_KRYPTO"
+ 48568 4B525950
+ 48568 544F00
+ 48569 .LASF42:
+ 48570 144e 4442475F .string "DBG_AES_COUNT"
+ 48570 4145535F
+ 48570 434F554E
+ 48570 5400
+ 48571 .LASF59:
+ 48572 145c 41455343 .string "AESColumn"
+ 48572 6F6C756D
+ 48572 6E00
+ 48573 .LASF397:
+ 48574 1466 6C657665 .string "level"
+ 48574 6C00
+ 48575 .LASF316:
+ 48576 146c 72635772 .string "rcWrongType"
+ 48576 6F6E6754
+ 48576 79706500
+ 48577 .LASF251:
+ 48578 1478 72634C69 .string "rcLibrary"
+ 48578 62726172
+ 48578 7900
+
GAS LISTING /tmp/ccMa7HLZ.s page 1231
+
+
+ 48579 .LASF284:
+ 48580 1482 72634361 .string "rcCanceled"
+ 48580 6E63656C
+ 48580 656400
+ 48581 .LASF155:
+ 48582 148d 72634461 .string "rcData"
+ 48582 746100
+ 48583 .LASF394:
+ 48584 1494 4B414553 .string "KAESBlockCipherVecEncrypt"
+ 48584 426C6F63
+ 48584 6B436970
+ 48584 68657256
+ 48584 6563456E
+ 48585 .LASF119:
+ 48586 14ae 72634865 .string "rcHeader"
+ 48586 61646572
+ 48586 00
+ 48587 .LASF4:
+ 48588 14b7 73686F72 .string "short unsigned int"
+ 48588 7420756E
+ 48588 7369676E
+ 48588 65642069
+ 48588 6E7400
+ 48589 .LASF325:
+ 48590 14ca 4B414553 .string "KAESBlockCipherVecSubBytes"
+ 48590 426C6F63
+ 48590 6B436970
+ 48590 68657256
+ 48590 65635375
+ 48591 .LASF109:
+ 48592 14e5 72634461 .string "rcDatabase"
+ 48592 74616261
+ 48592 736500
+ 48593 .LASF185:
+ 48594 14f0 7263436F .string "rcCommitting"
+ 48594 6D6D6974
+ 48594 74696E67
+ 48594 00
+ 48595 .LASF213:
+ 48596 14fd 7263436C .string "rcClassifying"
+ 48596 61737369
+ 48596 6679696E
+ 48596 6700
+ 48597 .LASF144:
+ 48598 150b 72635472 .string "rcTree"
+ 48598 656500
+ 48599 .LASF35:
+ 48600 1512 4442475F .string "DBG_ARGS"
+ 48600 41524753
+ 48600 00
+ 48601 .LASF173:
+ 48602 151b 72635365 .string "rcSelecting"
+ 48602 6C656374
+ 48602 696E6700
+ 48603 .LASF74:
+ 48604 1527 72635465 .string "rcText"
+ 48604 787400
+
GAS LISTING /tmp/ccMa7HLZ.s page 1232
+
+
+ 48605 .LASF310:
+ 48606 152e 72634F75 .string "rcOutoforder"
+ 48606 746F666F
+ 48606 72646572
+ 48606 00
+ 48607 .LASF412:
+ 48608 153b 4B414553 .string "KAESBlockCipherVec_vt_"
+ 48608 426C6F63
+ 48608 6B436970
+ 48608 68657256
+ 48608 65635F76
+ 48609 .LASF277:
+ 48610 1552 7263496E .string "rcInvalid"
+ 48610 76616C69
+ 48610 6400
+ 48611 .LASF389:
+ 48612 155c 75736572 .string "user_key_size"
+ 48612 5F6B6579
+ 48612 5F73697A
+ 48612 6500
+ 48613 .LASF224:
+ 48614 156a 7263496E .string "rcInitializing"
+ 48614 69746961
+ 48614 6C697A69
+ 48614 6E6700
+ 48615 .LASF377:
+ 48616 1579 4B414553 .string "KAESBlockCipherVecInvSubBytes"
+ 48616 426C6F63
+ 48616 6B436970
+ 48616 68657256
+ 48616 6563496E
+ 48617 .LASF103:
+ 48618 1597 7263426C .string "rcBlob"
+ 48618 6F6200
+ 48619 .LASF339:
+ 48620 159e 74656D70 .string "temp"
+ 48620 00
+ 48621 .LASF201:
+ 48622 15a3 72635265 .string "rcReindexing"
+ 48622 696E6465
+ 48622 78696E67
+ 48622 00
+ 48623 .LASF318:
+ 48624 15b0 4B414553 .string "KAESBlockCipherVecStateIn"
+ 48624 426C6F63
+ 48624 6B436970
+ 48624 68657256
+ 48624 65635374
+ 48625 .LASF96:
+ 48626 15ca 72634E6F .string "rcNoTarg"
+ 48626 54617267
+ 48626 00
+ 48627 .LASF278:
+ 48628 15d3 7263436F .string "rcCorrupt"
+ 48628 72727570
+ 48628 7400
+ 48629 .LASF307:
+
GAS LISTING /tmp/ccMa7HLZ.s page 1233
+
+
+ 48630 15dd 72634F75 .string "rcOutofrange"
+ 48630 746F6672
+ 48630 616E6765
+ 48630 00
+ 48631 .LASF136:
+ 48632 15ea 72635363 .string "rcSchema"
+ 48632 68656D61
+ 48632 00
+ 48633 .LASF326:
+ 48634 15f3 4B414553 .string "KAESBlockCipherVecSubBytesInt"
+ 48634 426C6F63
+ 48634 6B436970
+ 48634 68657256
+ 48634 65635375
+ 48635 .LASF132:
+ 48636 1611 72635061 .string "rcPath"
+ 48636 746800
+ 48637 .LASF183:
+ 48638 1618 72635265 .string "rcReading"
+ 48638 6164696E
+ 48638 6700
+ 48639 .LASF49:
+ 48640 1622 6B65795F .string "key_size"
+ 48640 73697A65
+ 48640 00
+ 48641 .LASF315:
+ 48642 162b 72634E6F .string "rcNotAvailable"
+ 48642 74417661
+ 48642 696C6162
+ 48642 6C6500
+ 48643 .LASF352:
+ 48644 163a 4B414553 .string "KAESBlockCipherVecKeyExpansion192"
+ 48644 426C6F63
+ 48644 6B436970
+ 48644 68657256
+ 48644 65634B65
+ 48645 .LASF273:
+ 48646 165c 7263416D .string "rcAmbiguous"
+ 48646 62696775
+ 48646 6F757300
+ 48647 .ident "GCC: (GNU) 4.4.2"
+ 48648 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccMa7HLZ.s page 1234
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 aes-ncbi.c
+ /tmp/ccMa7HLZ.s:11 .text:0000000000000000 bswap_32
+ /tmp/ccMa7HLZ.s:47 .rodata:0000000000000000 vec_00
+ /tmp/ccMa7HLZ.s:52 .rodata:0000000000000010 vec_01
+ /tmp/ccMa7HLZ.s:72 .rodata:0000000000000020 vec_0F
+ /tmp/ccMa7HLZ.s:92 .rodata:0000000000000030 vec_10
+ /tmp/ccMa7HLZ.s:112 .rodata:0000000000000040 KAESBlockCipherVecRijndaelSBox
+ /tmp/ccMa7HLZ.s:372 .rodata:0000000000000140 KAESBlockCipherVecRijndaelSBoxV
+ /tmp/ccMa7HLZ.s:632 .rodata:0000000000000240 KAESBlockCipherVecRijndaelInvSBoxV
+ /tmp/ccMa7HLZ.s:892 .rodata:0000000000000340 lo_filter
+ /tmp/ccMa7HLZ.s:912 .rodata:0000000000000350 FF_tab
+ /tmp/ccMa7HLZ.s:932 .data:0000000000000000 KAESBlockCipherVecFFtable
+ /tmp/ccMa7HLZ.s:945 .rodata:0000000000000360 KAESBlockCipherVecRcon
+ /tmp/ccMa7HLZ.s:968 .text:0000000000000014 KAESBlockCipherVecKeyExpansion128
+ /tmp/ccMa7HLZ.s:25534 .rodata:00000000000005c0 ShiftRowTable.6768
+ /tmp/ccMa7HLZ.s:8748 .text:0000000000007c1e KAESBlockCipherVecKeyExpansion192
+ /tmp/ccMa7HLZ.s:13764 .text:000000000000cc56 KAESBlockCipherVecKeyExpansion256
+ /tmp/ccMa7HLZ.s:20329 .text:00000000000134cf KAESBlockCipherVecEqInvKeyExpansion
+ /tmp/ccMa7HLZ.s:20835 .text:0000000000013ba2 KAESBlockCipherVecEqInvKeyExpansion128
+ /tmp/ccMa7HLZ.s:20863 .text:0000000000013bcc KAESBlockCipherVecEqInvKeyExpansion192
+ /tmp/ccMa7HLZ.s:20891 .text:0000000000013bf6 KAESBlockCipherVecEqInvKeyExpansion256
+ /tmp/ccMa7HLZ.s:20935 .text:0000000000013c20 KAESBlockCipherVecCipher
+ /tmp/ccMa7HLZ.s:25514 .rodata:00000000000005b0 ShiftRowTable.6741
+ /tmp/ccMa7HLZ.s:22848 .text:0000000000015916 KAESBlockCipherVecEqInvCipher
+ /tmp/ccMa7HLZ.s:25564 .rodata:0000000000000620 InvShiftRowTable.6750
+ /tmp/ccMa7HLZ.s:24903 .rodata:0000000000000460 KAESBlockCipherVecaes_ncbi_name
+ /tmp/ccMa7HLZ.s:24907 .text:0000000000017843 KAESBlockCipherVecDestroy
+ /tmp/ccMa7HLZ.s:24926 .text:000000000001784d KAESBlockCipherVecBlockSize
+ /tmp/ccMa7HLZ.s:24946 .text:0000000000017858 KAESBlockCipherVecKeySize
+ /tmp/ccMa7HLZ.s:24971 .text:0000000000017863 KAESBlockCipherVecSetEncryptKey
+ /tmp/ccMa7HLZ.s:25554 .rodata:00000000000005e0 __func__.8464
+ /tmp/ccMa7HLZ.s:25062 .text:000000000001794c KAESBlockCipherVecSetDecryptKey
+ /tmp/ccMa7HLZ.s:25144 .text:0000000000017a0f KAESBlockCipherVecEncrypt
+ /tmp/ccMa7HLZ.s:25509 .rodata:0000000000000590 __PRETTY_FUNCTION__.8500
+ /tmp/ccMa7HLZ.s:25222 .text:0000000000017ad2 KAESBlockCipherVecDecrypt
+ /tmp/ccMa7HLZ.s:25504 .rodata:0000000000000570 __PRETTY_FUNCTION__.8521
+ /tmp/ccMa7HLZ.s:25307 .text:0000000000017b95 KAESBlockCipherVecProcessorSupport
+ /tmp/ccMa7HLZ.s:25499 .rodata:0000000000000540 __func__.8545
+ /tmp/ccMa7HLZ.s:25393 .data.rel.ro.local:0000000000000000 KAESBlockCipherVec_vt_
+ /tmp/ccMa7HLZ.s:25409 .text:0000000000017c5b KAESBlockCipherVecMake
+ /tmp/ccMa7HLZ.s:25489 .rodata:00000000000004f0 __func__.8570
+ /tmp/ccMa7HLZ.s:25494 .rodata:0000000000000510 __PRETTY_FUNCTION__.8571
+ /tmp/ccMa7HLZ.s:25559 .rodata:0000000000000600 __PRETTY_FUNCTION__.8463
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+memmove
+KDbgWriterGet
+KDbgCondToFlag
+KDbgTestModConds
+KDbgMsg
+memset
+SetRCFileFuncLine
+__assert_fail
diff --git a/libs/krypto/aes-ncbi.vecreg.pic.o.list b/libs/krypto/aes-ncbi.vecreg.pic.o.list
new file mode 100644
index 0000000..9088ee6
--- /dev/null
+++ b/libs/krypto/aes-ncbi.vecreg.pic.o.list
@@ -0,0 +1,75192 @@
+GAS LISTING /tmp/ccjbMjHD.s page 1
+
+
+ 1 .file "aes-ncbi.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 A62A0000 .text
+ 8 02007101
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .type bswap_32, @function
+ 11 bswap_32:
+ 12 .LFB591:
+ 13 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** */
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifndef _h_byteswap_
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _h_byteswap_
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef _BYTESWAP_H
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #warning "GNU byteswap.h being used"
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #else
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _BYTESWAP_H 1234
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #include <stdint.h>
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef __cplusplus
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** extern "C" {
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #endif
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+
GAS LISTING /tmp/ccjbMjHD.s page 2
+
+
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint16_t bswap_16 ( uint16_t i )
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** register uint16_t rtn;
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** __asm__
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** (
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** "rorw $8, %w0"
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "=r" ( rtn )
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "0" ( i )
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "cc"
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** );
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** return rtn;
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint32_t bswap_32 ( uint32_t i )
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+ 14 .loc 1 57 0
+ 15 .cfi_startproc
+ 16 0000 55 pushq %rbp
+ 17 .LCFI0:
+ 18 .cfi_def_cfa_offset 16
+ 19 0001 4889E5 movq %rsp, %rbp
+ 20 .cfi_offset 6, -16
+ 21 .LCFI1:
+ 22 .cfi_def_cfa_register 6
+ 23 0004 53 pushq %rbx
+ 24 0005 897DF4 movl %edi, -12(%rbp)
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** register uint32_t rtn;
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** __asm__
+ 25 .loc 1 59 0
+ 26 0008 8B45F4 movl -12(%rbp), %eax
+ 27 000b 89C3 movl %eax, %ebx
+ 28 .cfi_offset 3, -24
+ 29 #APP
+ 30 # 59 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h" 1
+ 60 (
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** "bswap %0"
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "=r" ( rtn )
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "0" ( i )
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** : "cc"
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** );
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** return rtn;
+ 31 bswap %ebx
+ 32 # 0 "" 2
+ 33 .loc 1 66 0
+ 34 #NO_APP
+ 35 000f 89D8 movl %ebx, %eax
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+ 36 .loc 1 67 0
+ 37 0011 5B popq %rbx
+ 38 0012 C9 leave
+ 39 0013 C3 ret
+ 40 .cfi_endproc
+ 41 .LFE591:
+ 42 .size bswap_32, .-bswap_32
+ 43 .section .rodata
+
GAS LISTING /tmp/ccjbMjHD.s page 3
+
+
+ 44 .align 16
+ 45 .type vec_00, @object
+ 46 .size vec_00, 16
+ 47 vec_00:
+ 48 0000 00000000 .zero 16
+ 48 00000000
+ 48 00000000
+ 48 00000000
+ 49 .align 16
+ 50 .type vec_01, @object
+ 51 .size vec_01, 16
+ 52 vec_01:
+ 53 0010 01 .byte 1
+ 54 0011 01 .byte 1
+ 55 0012 01 .byte 1
+ 56 0013 01 .byte 1
+ 57 0014 01 .byte 1
+ 58 0015 01 .byte 1
+ 59 0016 01 .byte 1
+ 60 0017 01 .byte 1
+ 61 0018 01 .byte 1
+ 62 0019 01 .byte 1
+ 63 001a 01 .byte 1
+ 64 001b 01 .byte 1
+ 65 001c 01 .byte 1
+ 66 001d 01 .byte 1
+ 67 001e 01 .byte 1
+ 68 001f 01 .byte 1
+ 69 .align 16
+ 70 .type vec_0F, @object
+ 71 .size vec_0F, 16
+ 72 vec_0F:
+ 73 0020 0F .byte 15
+ 74 0021 0F .byte 15
+ 75 0022 0F .byte 15
+ 76 0023 0F .byte 15
+ 77 0024 0F .byte 15
+ 78 0025 0F .byte 15
+ 79 0026 0F .byte 15
+ 80 0027 0F .byte 15
+ 81 0028 0F .byte 15
+ 82 0029 0F .byte 15
+ 83 002a 0F .byte 15
+ 84 002b 0F .byte 15
+ 85 002c 0F .byte 15
+ 86 002d 0F .byte 15
+ 87 002e 0F .byte 15
+ 88 002f 0F .byte 15
+ 89 .align 16
+ 90 .type vec_10, @object
+ 91 .size vec_10, 16
+ 92 vec_10:
+ 93 0030 10 .byte 16
+ 94 0031 10 .byte 16
+ 95 0032 10 .byte 16
+ 96 0033 10 .byte 16
+ 97 0034 10 .byte 16
+
GAS LISTING /tmp/ccjbMjHD.s page 4
+
+
+ 98 0035 10 .byte 16
+ 99 0036 10 .byte 16
+ 100 0037 10 .byte 16
+ 101 0038 10 .byte 16
+ 102 0039 10 .byte 16
+ 103 003a 10 .byte 16
+ 104 003b 10 .byte 16
+ 105 003c 10 .byte 16
+ 106 003d 10 .byte 16
+ 107 003e 10 .byte 16
+ 108 003f 10 .byte 16
+ 109 .align 32
+ 110 .type KAESBlockCipherVecRegRijndaelSBox, @object
+ 111 .size KAESBlockCipherVecRegRijndaelSBox, 256
+ 112 KAESBlockCipherVecRegRijndaelSBox:
+ 113 0040 63 .byte 99
+ 114 0041 7C .byte 124
+ 115 0042 77 .byte 119
+ 116 0043 7B .byte 123
+ 117 0044 F2 .byte -14
+ 118 0045 6B .byte 107
+ 119 0046 6F .byte 111
+ 120 0047 C5 .byte -59
+ 121 0048 30 .byte 48
+ 122 0049 01 .byte 1
+ 123 004a 67 .byte 103
+ 124 004b 2B .byte 43
+ 125 004c FE .byte -2
+ 126 004d D7 .byte -41
+ 127 004e AB .byte -85
+ 128 004f 76 .byte 118
+ 129 0050 CA .byte -54
+ 130 0051 82 .byte -126
+ 131 0052 C9 .byte -55
+ 132 0053 7D .byte 125
+ 133 0054 FA .byte -6
+ 134 0055 59 .byte 89
+ 135 0056 47 .byte 71
+ 136 0057 F0 .byte -16
+ 137 0058 AD .byte -83
+ 138 0059 D4 .byte -44
+ 139 005a A2 .byte -94
+ 140 005b AF .byte -81
+ 141 005c 9C .byte -100
+ 142 005d A4 .byte -92
+ 143 005e 72 .byte 114
+ 144 005f C0 .byte -64
+ 145 0060 B7 .byte -73
+ 146 0061 FD .byte -3
+ 147 0062 93 .byte -109
+ 148 0063 26 .byte 38
+ 149 0064 36 .byte 54
+ 150 0065 3F .byte 63
+ 151 0066 F7 .byte -9
+ 152 0067 CC .byte -52
+ 153 0068 34 .byte 52
+ 154 0069 A5 .byte -91
+
GAS LISTING /tmp/ccjbMjHD.s page 5
+
+
+ 155 006a E5 .byte -27
+ 156 006b F1 .byte -15
+ 157 006c 71 .byte 113
+ 158 006d D8 .byte -40
+ 159 006e 31 .byte 49
+ 160 006f 15 .byte 21
+ 161 0070 04 .byte 4
+ 162 0071 C7 .byte -57
+ 163 0072 23 .byte 35
+ 164 0073 C3 .byte -61
+ 165 0074 18 .byte 24
+ 166 0075 96 .byte -106
+ 167 0076 05 .byte 5
+ 168 0077 9A .byte -102
+ 169 0078 07 .byte 7
+ 170 0079 12 .byte 18
+ 171 007a 80 .byte -128
+ 172 007b E2 .byte -30
+ 173 007c EB .byte -21
+ 174 007d 27 .byte 39
+ 175 007e B2 .byte -78
+ 176 007f 75 .byte 117
+ 177 0080 09 .byte 9
+ 178 0081 83 .byte -125
+ 179 0082 2C .byte 44
+ 180 0083 1A .byte 26
+ 181 0084 1B .byte 27
+ 182 0085 6E .byte 110
+ 183 0086 5A .byte 90
+ 184 0087 A0 .byte -96
+ 185 0088 52 .byte 82
+ 186 0089 3B .byte 59
+ 187 008a D6 .byte -42
+ 188 008b B3 .byte -77
+ 189 008c 29 .byte 41
+ 190 008d E3 .byte -29
+ 191 008e 2F .byte 47
+ 192 008f 84 .byte -124
+ 193 0090 53 .byte 83
+ 194 0091 D1 .byte -47
+ 195 0092 00 .byte 0
+ 196 0093 ED .byte -19
+ 197 0094 20 .byte 32
+ 198 0095 FC .byte -4
+ 199 0096 B1 .byte -79
+ 200 0097 5B .byte 91
+ 201 0098 6A .byte 106
+ 202 0099 CB .byte -53
+ 203 009a BE .byte -66
+ 204 009b 39 .byte 57
+ 205 009c 4A .byte 74
+ 206 009d 4C .byte 76
+ 207 009e 58 .byte 88
+ 208 009f CF .byte -49
+ 209 00a0 D0 .byte -48
+ 210 00a1 EF .byte -17
+ 211 00a2 AA .byte -86
+
GAS LISTING /tmp/ccjbMjHD.s page 6
+
+
+ 212 00a3 FB .byte -5
+ 213 00a4 43 .byte 67
+ 214 00a5 4D .byte 77
+ 215 00a6 33 .byte 51
+ 216 00a7 85 .byte -123
+ 217 00a8 45 .byte 69
+ 218 00a9 F9 .byte -7
+ 219 00aa 02 .byte 2
+ 220 00ab 7F .byte 127
+ 221 00ac 50 .byte 80
+ 222 00ad 3C .byte 60
+ 223 00ae 9F .byte -97
+ 224 00af A8 .byte -88
+ 225 00b0 51 .byte 81
+ 226 00b1 A3 .byte -93
+ 227 00b2 40 .byte 64
+ 228 00b3 8F .byte -113
+ 229 00b4 92 .byte -110
+ 230 00b5 9D .byte -99
+ 231 00b6 38 .byte 56
+ 232 00b7 F5 .byte -11
+ 233 00b8 BC .byte -68
+ 234 00b9 B6 .byte -74
+ 235 00ba DA .byte -38
+ 236 00bb 21 .byte 33
+ 237 00bc 10 .byte 16
+ 238 00bd FF .byte -1
+ 239 00be F3 .byte -13
+ 240 00bf D2 .byte -46
+ 241 00c0 CD .byte -51
+ 242 00c1 0C .byte 12
+ 243 00c2 13 .byte 19
+ 244 00c3 EC .byte -20
+ 245 00c4 5F .byte 95
+ 246 00c5 97 .byte -105
+ 247 00c6 44 .byte 68
+ 248 00c7 17 .byte 23
+ 249 00c8 C4 .byte -60
+ 250 00c9 A7 .byte -89
+ 251 00ca 7E .byte 126
+ 252 00cb 3D .byte 61
+ 253 00cc 64 .byte 100
+ 254 00cd 5D .byte 93
+ 255 00ce 19 .byte 25
+ 256 00cf 73 .byte 115
+ 257 00d0 60 .byte 96
+ 258 00d1 81 .byte -127
+ 259 00d2 4F .byte 79
+ 260 00d3 DC .byte -36
+ 261 00d4 22 .byte 34
+ 262 00d5 2A .byte 42
+ 263 00d6 90 .byte -112
+ 264 00d7 88 .byte -120
+ 265 00d8 46 .byte 70
+ 266 00d9 EE .byte -18
+ 267 00da B8 .byte -72
+ 268 00db 14 .byte 20
+
GAS LISTING /tmp/ccjbMjHD.s page 7
+
+
+ 269 00dc DE .byte -34
+ 270 00dd 5E .byte 94
+ 271 00de 0B .byte 11
+ 272 00df DB .byte -37
+ 273 00e0 E0 .byte -32
+ 274 00e1 32 .byte 50
+ 275 00e2 3A .byte 58
+ 276 00e3 0A .byte 10
+ 277 00e4 49 .byte 73
+ 278 00e5 06 .byte 6
+ 279 00e6 24 .byte 36
+ 280 00e7 5C .byte 92
+ 281 00e8 C2 .byte -62
+ 282 00e9 D3 .byte -45
+ 283 00ea AC .byte -84
+ 284 00eb 62 .byte 98
+ 285 00ec 91 .byte -111
+ 286 00ed 95 .byte -107
+ 287 00ee E4 .byte -28
+ 288 00ef 79 .byte 121
+ 289 00f0 E7 .byte -25
+ 290 00f1 C8 .byte -56
+ 291 00f2 37 .byte 55
+ 292 00f3 6D .byte 109
+ 293 00f4 8D .byte -115
+ 294 00f5 D5 .byte -43
+ 295 00f6 4E .byte 78
+ 296 00f7 A9 .byte -87
+ 297 00f8 6C .byte 108
+ 298 00f9 56 .byte 86
+ 299 00fa F4 .byte -12
+ 300 00fb EA .byte -22
+ 301 00fc 65 .byte 101
+ 302 00fd 7A .byte 122
+ 303 00fe AE .byte -82
+ 304 00ff 08 .byte 8
+ 305 0100 BA .byte -70
+ 306 0101 78 .byte 120
+ 307 0102 25 .byte 37
+ 308 0103 2E .byte 46
+ 309 0104 1C .byte 28
+ 310 0105 A6 .byte -90
+ 311 0106 B4 .byte -76
+ 312 0107 C6 .byte -58
+ 313 0108 E8 .byte -24
+ 314 0109 DD .byte -35
+ 315 010a 74 .byte 116
+ 316 010b 1F .byte 31
+ 317 010c 4B .byte 75
+ 318 010d BD .byte -67
+ 319 010e 8B .byte -117
+ 320 010f 8A .byte -118
+ 321 0110 70 .byte 112
+ 322 0111 3E .byte 62
+ 323 0112 B5 .byte -75
+ 324 0113 66 .byte 102
+ 325 0114 48 .byte 72
+
GAS LISTING /tmp/ccjbMjHD.s page 8
+
+
+ 326 0115 03 .byte 3
+ 327 0116 F6 .byte -10
+ 328 0117 0E .byte 14
+ 329 0118 61 .byte 97
+ 330 0119 35 .byte 53
+ 331 011a 57 .byte 87
+ 332 011b B9 .byte -71
+ 333 011c 86 .byte -122
+ 334 011d C1 .byte -63
+ 335 011e 1D .byte 29
+ 336 011f 9E .byte -98
+ 337 0120 E1 .byte -31
+ 338 0121 F8 .byte -8
+ 339 0122 98 .byte -104
+ 340 0123 11 .byte 17
+ 341 0124 69 .byte 105
+ 342 0125 D9 .byte -39
+ 343 0126 8E .byte -114
+ 344 0127 94 .byte -108
+ 345 0128 9B .byte -101
+ 346 0129 1E .byte 30
+ 347 012a 87 .byte -121
+ 348 012b E9 .byte -23
+ 349 012c CE .byte -50
+ 350 012d 55 .byte 85
+ 351 012e 28 .byte 40
+ 352 012f DF .byte -33
+ 353 0130 8C .byte -116
+ 354 0131 A1 .byte -95
+ 355 0132 89 .byte -119
+ 356 0133 0D .byte 13
+ 357 0134 BF .byte -65
+ 358 0135 E6 .byte -26
+ 359 0136 42 .byte 66
+ 360 0137 68 .byte 104
+ 361 0138 41 .byte 65
+ 362 0139 99 .byte -103
+ 363 013a 2D .byte 45
+ 364 013b 0F .byte 15
+ 365 013c B0 .byte -80
+ 366 013d 54 .byte 84
+ 367 013e BB .byte -69
+ 368 013f 16 .byte 22
+ 369 .align 32
+ 370 .type KAESBlockCipherVecRegRijndaelSBoxV, @object
+ 371 .size KAESBlockCipherVecRegRijndaelSBoxV, 256
+ 372 KAESBlockCipherVecRegRijndaelSBoxV:
+ 373 0140 63 .byte 99
+ 374 0141 7C .byte 124
+ 375 0142 77 .byte 119
+ 376 0143 7B .byte 123
+ 377 0144 F2 .byte -14
+ 378 0145 6B .byte 107
+ 379 0146 6F .byte 111
+ 380 0147 C5 .byte -59
+ 381 0148 30 .byte 48
+ 382 0149 01 .byte 1
+
GAS LISTING /tmp/ccjbMjHD.s page 9
+
+
+ 383 014a 67 .byte 103
+ 384 014b 2B .byte 43
+ 385 014c FE .byte -2
+ 386 014d D7 .byte -41
+ 387 014e AB .byte -85
+ 388 014f 76 .byte 118
+ 389 0150 CA .byte -54
+ 390 0151 82 .byte -126
+ 391 0152 C9 .byte -55
+ 392 0153 7D .byte 125
+ 393 0154 FA .byte -6
+ 394 0155 59 .byte 89
+ 395 0156 47 .byte 71
+ 396 0157 F0 .byte -16
+ 397 0158 AD .byte -83
+ 398 0159 D4 .byte -44
+ 399 015a A2 .byte -94
+ 400 015b AF .byte -81
+ 401 015c 9C .byte -100
+ 402 015d A4 .byte -92
+ 403 015e 72 .byte 114
+ 404 015f C0 .byte -64
+ 405 0160 B7 .byte -73
+ 406 0161 FD .byte -3
+ 407 0162 93 .byte -109
+ 408 0163 26 .byte 38
+ 409 0164 36 .byte 54
+ 410 0165 3F .byte 63
+ 411 0166 F7 .byte -9
+ 412 0167 CC .byte -52
+ 413 0168 34 .byte 52
+ 414 0169 A5 .byte -91
+ 415 016a E5 .byte -27
+ 416 016b F1 .byte -15
+ 417 016c 71 .byte 113
+ 418 016d D8 .byte -40
+ 419 016e 31 .byte 49
+ 420 016f 15 .byte 21
+ 421 0170 04 .byte 4
+ 422 0171 C7 .byte -57
+ 423 0172 23 .byte 35
+ 424 0173 C3 .byte -61
+ 425 0174 18 .byte 24
+ 426 0175 96 .byte -106
+ 427 0176 05 .byte 5
+ 428 0177 9A .byte -102
+ 429 0178 07 .byte 7
+ 430 0179 12 .byte 18
+ 431 017a 80 .byte -128
+ 432 017b E2 .byte -30
+ 433 017c EB .byte -21
+ 434 017d 27 .byte 39
+ 435 017e B2 .byte -78
+ 436 017f 75 .byte 117
+ 437 0180 09 .byte 9
+ 438 0181 83 .byte -125
+ 439 0182 2C .byte 44
+
GAS LISTING /tmp/ccjbMjHD.s page 10
+
+
+ 440 0183 1A .byte 26
+ 441 0184 1B .byte 27
+ 442 0185 6E .byte 110
+ 443 0186 5A .byte 90
+ 444 0187 A0 .byte -96
+ 445 0188 52 .byte 82
+ 446 0189 3B .byte 59
+ 447 018a D6 .byte -42
+ 448 018b B3 .byte -77
+ 449 018c 29 .byte 41
+ 450 018d E3 .byte -29
+ 451 018e 2F .byte 47
+ 452 018f 84 .byte -124
+ 453 0190 53 .byte 83
+ 454 0191 D1 .byte -47
+ 455 0192 00 .byte 0
+ 456 0193 ED .byte -19
+ 457 0194 20 .byte 32
+ 458 0195 FC .byte -4
+ 459 0196 B1 .byte -79
+ 460 0197 5B .byte 91
+ 461 0198 6A .byte 106
+ 462 0199 CB .byte -53
+ 463 019a BE .byte -66
+ 464 019b 39 .byte 57
+ 465 019c 4A .byte 74
+ 466 019d 4C .byte 76
+ 467 019e 58 .byte 88
+ 468 019f CF .byte -49
+ 469 01a0 D0 .byte -48
+ 470 01a1 EF .byte -17
+ 471 01a2 AA .byte -86
+ 472 01a3 FB .byte -5
+ 473 01a4 43 .byte 67
+ 474 01a5 4D .byte 77
+ 475 01a6 33 .byte 51
+ 476 01a7 85 .byte -123
+ 477 01a8 45 .byte 69
+ 478 01a9 F9 .byte -7
+ 479 01aa 02 .byte 2
+ 480 01ab 7F .byte 127
+ 481 01ac 50 .byte 80
+ 482 01ad 3C .byte 60
+ 483 01ae 9F .byte -97
+ 484 01af A8 .byte -88
+ 485 01b0 51 .byte 81
+ 486 01b1 A3 .byte -93
+ 487 01b2 40 .byte 64
+ 488 01b3 8F .byte -113
+ 489 01b4 92 .byte -110
+ 490 01b5 9D .byte -99
+ 491 01b6 38 .byte 56
+ 492 01b7 F5 .byte -11
+ 493 01b8 BC .byte -68
+ 494 01b9 B6 .byte -74
+ 495 01ba DA .byte -38
+ 496 01bb 21 .byte 33
+
GAS LISTING /tmp/ccjbMjHD.s page 11
+
+
+ 497 01bc 10 .byte 16
+ 498 01bd FF .byte -1
+ 499 01be F3 .byte -13
+ 500 01bf D2 .byte -46
+ 501 01c0 CD .byte -51
+ 502 01c1 0C .byte 12
+ 503 01c2 13 .byte 19
+ 504 01c3 EC .byte -20
+ 505 01c4 5F .byte 95
+ 506 01c5 97 .byte -105
+ 507 01c6 44 .byte 68
+ 508 01c7 17 .byte 23
+ 509 01c8 C4 .byte -60
+ 510 01c9 A7 .byte -89
+ 511 01ca 7E .byte 126
+ 512 01cb 3D .byte 61
+ 513 01cc 64 .byte 100
+ 514 01cd 5D .byte 93
+ 515 01ce 19 .byte 25
+ 516 01cf 73 .byte 115
+ 517 01d0 60 .byte 96
+ 518 01d1 81 .byte -127
+ 519 01d2 4F .byte 79
+ 520 01d3 DC .byte -36
+ 521 01d4 22 .byte 34
+ 522 01d5 2A .byte 42
+ 523 01d6 90 .byte -112
+ 524 01d7 88 .byte -120
+ 525 01d8 46 .byte 70
+ 526 01d9 EE .byte -18
+ 527 01da B8 .byte -72
+ 528 01db 14 .byte 20
+ 529 01dc DE .byte -34
+ 530 01dd 5E .byte 94
+ 531 01de 0B .byte 11
+ 532 01df DB .byte -37
+ 533 01e0 E0 .byte -32
+ 534 01e1 32 .byte 50
+ 535 01e2 3A .byte 58
+ 536 01e3 0A .byte 10
+ 537 01e4 49 .byte 73
+ 538 01e5 06 .byte 6
+ 539 01e6 24 .byte 36
+ 540 01e7 5C .byte 92
+ 541 01e8 C2 .byte -62
+ 542 01e9 D3 .byte -45
+ 543 01ea AC .byte -84
+ 544 01eb 62 .byte 98
+ 545 01ec 91 .byte -111
+ 546 01ed 95 .byte -107
+ 547 01ee E4 .byte -28
+ 548 01ef 79 .byte 121
+ 549 01f0 E7 .byte -25
+ 550 01f1 C8 .byte -56
+ 551 01f2 37 .byte 55
+ 552 01f3 6D .byte 109
+ 553 01f4 8D .byte -115
+
GAS LISTING /tmp/ccjbMjHD.s page 12
+
+
+ 554 01f5 D5 .byte -43
+ 555 01f6 4E .byte 78
+ 556 01f7 A9 .byte -87
+ 557 01f8 6C .byte 108
+ 558 01f9 56 .byte 86
+ 559 01fa F4 .byte -12
+ 560 01fb EA .byte -22
+ 561 01fc 65 .byte 101
+ 562 01fd 7A .byte 122
+ 563 01fe AE .byte -82
+ 564 01ff 08 .byte 8
+ 565 0200 BA .byte -70
+ 566 0201 78 .byte 120
+ 567 0202 25 .byte 37
+ 568 0203 2E .byte 46
+ 569 0204 1C .byte 28
+ 570 0205 A6 .byte -90
+ 571 0206 B4 .byte -76
+ 572 0207 C6 .byte -58
+ 573 0208 E8 .byte -24
+ 574 0209 DD .byte -35
+ 575 020a 74 .byte 116
+ 576 020b 1F .byte 31
+ 577 020c 4B .byte 75
+ 578 020d BD .byte -67
+ 579 020e 8B .byte -117
+ 580 020f 8A .byte -118
+ 581 0210 70 .byte 112
+ 582 0211 3E .byte 62
+ 583 0212 B5 .byte -75
+ 584 0213 66 .byte 102
+ 585 0214 48 .byte 72
+ 586 0215 03 .byte 3
+ 587 0216 F6 .byte -10
+ 588 0217 0E .byte 14
+ 589 0218 61 .byte 97
+ 590 0219 35 .byte 53
+ 591 021a 57 .byte 87
+ 592 021b B9 .byte -71
+ 593 021c 86 .byte -122
+ 594 021d C1 .byte -63
+ 595 021e 1D .byte 29
+ 596 021f 9E .byte -98
+ 597 0220 E1 .byte -31
+ 598 0221 F8 .byte -8
+ 599 0222 98 .byte -104
+ 600 0223 11 .byte 17
+ 601 0224 69 .byte 105
+ 602 0225 D9 .byte -39
+ 603 0226 8E .byte -114
+ 604 0227 94 .byte -108
+ 605 0228 9B .byte -101
+ 606 0229 1E .byte 30
+ 607 022a 87 .byte -121
+ 608 022b E9 .byte -23
+ 609 022c CE .byte -50
+ 610 022d 55 .byte 85
+
GAS LISTING /tmp/ccjbMjHD.s page 13
+
+
+ 611 022e 28 .byte 40
+ 612 022f DF .byte -33
+ 613 0230 8C .byte -116
+ 614 0231 A1 .byte -95
+ 615 0232 89 .byte -119
+ 616 0233 0D .byte 13
+ 617 0234 BF .byte -65
+ 618 0235 E6 .byte -26
+ 619 0236 42 .byte 66
+ 620 0237 68 .byte 104
+ 621 0238 41 .byte 65
+ 622 0239 99 .byte -103
+ 623 023a 2D .byte 45
+ 624 023b 0F .byte 15
+ 625 023c B0 .byte -80
+ 626 023d 54 .byte 84
+ 627 023e BB .byte -69
+ 628 023f 16 .byte 22
+ 629 .align 32
+ 630 .type KAESBlockCipherVecRegRijndaelInvSBoxV, @object
+ 631 .size KAESBlockCipherVecRegRijndaelInvSBoxV, 256
+ 632 KAESBlockCipherVecRegRijndaelInvSBoxV:
+ 633 0240 52 .byte 82
+ 634 0241 09 .byte 9
+ 635 0242 6A .byte 106
+ 636 0243 D5 .byte -43
+ 637 0244 30 .byte 48
+ 638 0245 36 .byte 54
+ 639 0246 A5 .byte -91
+ 640 0247 38 .byte 56
+ 641 0248 BF .byte -65
+ 642 0249 40 .byte 64
+ 643 024a A3 .byte -93
+ 644 024b 9E .byte -98
+ 645 024c 81 .byte -127
+ 646 024d F3 .byte -13
+ 647 024e D7 .byte -41
+ 648 024f FB .byte -5
+ 649 0250 7C .byte 124
+ 650 0251 E3 .byte -29
+ 651 0252 39 .byte 57
+ 652 0253 82 .byte -126
+ 653 0254 9B .byte -101
+ 654 0255 2F .byte 47
+ 655 0256 FF .byte -1
+ 656 0257 87 .byte -121
+ 657 0258 34 .byte 52
+ 658 0259 8E .byte -114
+ 659 025a 43 .byte 67
+ 660 025b 44 .byte 68
+ 661 025c C4 .byte -60
+ 662 025d DE .byte -34
+ 663 025e E9 .byte -23
+ 664 025f CB .byte -53
+ 665 0260 54 .byte 84
+ 666 0261 7B .byte 123
+ 667 0262 94 .byte -108
+
GAS LISTING /tmp/ccjbMjHD.s page 14
+
+
+ 668 0263 32 .byte 50
+ 669 0264 A6 .byte -90
+ 670 0265 C2 .byte -62
+ 671 0266 23 .byte 35
+ 672 0267 3D .byte 61
+ 673 0268 EE .byte -18
+ 674 0269 4C .byte 76
+ 675 026a 95 .byte -107
+ 676 026b 0B .byte 11
+ 677 026c 42 .byte 66
+ 678 026d FA .byte -6
+ 679 026e C3 .byte -61
+ 680 026f 4E .byte 78
+ 681 0270 08 .byte 8
+ 682 0271 2E .byte 46
+ 683 0272 A1 .byte -95
+ 684 0273 66 .byte 102
+ 685 0274 28 .byte 40
+ 686 0275 D9 .byte -39
+ 687 0276 24 .byte 36
+ 688 0277 B2 .byte -78
+ 689 0278 76 .byte 118
+ 690 0279 5B .byte 91
+ 691 027a A2 .byte -94
+ 692 027b 49 .byte 73
+ 693 027c 6D .byte 109
+ 694 027d 8B .byte -117
+ 695 027e D1 .byte -47
+ 696 027f 25 .byte 37
+ 697 0280 72 .byte 114
+ 698 0281 F8 .byte -8
+ 699 0282 F6 .byte -10
+ 700 0283 64 .byte 100
+ 701 0284 86 .byte -122
+ 702 0285 68 .byte 104
+ 703 0286 98 .byte -104
+ 704 0287 16 .byte 22
+ 705 0288 D4 .byte -44
+ 706 0289 A4 .byte -92
+ 707 028a 5C .byte 92
+ 708 028b CC .byte -52
+ 709 028c 5D .byte 93
+ 710 028d 65 .byte 101
+ 711 028e B6 .byte -74
+ 712 028f 92 .byte -110
+ 713 0290 6C .byte 108
+ 714 0291 70 .byte 112
+ 715 0292 48 .byte 72
+ 716 0293 50 .byte 80
+ 717 0294 FD .byte -3
+ 718 0295 ED .byte -19
+ 719 0296 B9 .byte -71
+ 720 0297 DA .byte -38
+ 721 0298 5E .byte 94
+ 722 0299 15 .byte 21
+ 723 029a 46 .byte 70
+ 724 029b 57 .byte 87
+
GAS LISTING /tmp/ccjbMjHD.s page 15
+
+
+ 725 029c A7 .byte -89
+ 726 029d 8D .byte -115
+ 727 029e 9D .byte -99
+ 728 029f 84 .byte -124
+ 729 02a0 90 .byte -112
+ 730 02a1 D8 .byte -40
+ 731 02a2 AB .byte -85
+ 732 02a3 00 .byte 0
+ 733 02a4 8C .byte -116
+ 734 02a5 BC .byte -68
+ 735 02a6 D3 .byte -45
+ 736 02a7 0A .byte 10
+ 737 02a8 F7 .byte -9
+ 738 02a9 E4 .byte -28
+ 739 02aa 58 .byte 88
+ 740 02ab 05 .byte 5
+ 741 02ac B8 .byte -72
+ 742 02ad B3 .byte -77
+ 743 02ae 45 .byte 69
+ 744 02af 06 .byte 6
+ 745 02b0 D0 .byte -48
+ 746 02b1 2C .byte 44
+ 747 02b2 1E .byte 30
+ 748 02b3 8F .byte -113
+ 749 02b4 CA .byte -54
+ 750 02b5 3F .byte 63
+ 751 02b6 0F .byte 15
+ 752 02b7 02 .byte 2
+ 753 02b8 C1 .byte -63
+ 754 02b9 AF .byte -81
+ 755 02ba BD .byte -67
+ 756 02bb 03 .byte 3
+ 757 02bc 01 .byte 1
+ 758 02bd 13 .byte 19
+ 759 02be 8A .byte -118
+ 760 02bf 6B .byte 107
+ 761 02c0 3A .byte 58
+ 762 02c1 91 .byte -111
+ 763 02c2 11 .byte 17
+ 764 02c3 41 .byte 65
+ 765 02c4 4F .byte 79
+ 766 02c5 67 .byte 103
+ 767 02c6 DC .byte -36
+ 768 02c7 EA .byte -22
+ 769 02c8 97 .byte -105
+ 770 02c9 F2 .byte -14
+ 771 02ca CF .byte -49
+ 772 02cb CE .byte -50
+ 773 02cc F0 .byte -16
+ 774 02cd B4 .byte -76
+ 775 02ce E6 .byte -26
+ 776 02cf 73 .byte 115
+ 777 02d0 96 .byte -106
+ 778 02d1 AC .byte -84
+ 779 02d2 74 .byte 116
+ 780 02d3 22 .byte 34
+ 781 02d4 E7 .byte -25
+
GAS LISTING /tmp/ccjbMjHD.s page 16
+
+
+ 782 02d5 AD .byte -83
+ 783 02d6 35 .byte 53
+ 784 02d7 85 .byte -123
+ 785 02d8 E2 .byte -30
+ 786 02d9 F9 .byte -7
+ 787 02da 37 .byte 55
+ 788 02db E8 .byte -24
+ 789 02dc 1C .byte 28
+ 790 02dd 75 .byte 117
+ 791 02de DF .byte -33
+ 792 02df 6E .byte 110
+ 793 02e0 47 .byte 71
+ 794 02e1 F1 .byte -15
+ 795 02e2 1A .byte 26
+ 796 02e3 71 .byte 113
+ 797 02e4 1D .byte 29
+ 798 02e5 29 .byte 41
+ 799 02e6 C5 .byte -59
+ 800 02e7 89 .byte -119
+ 801 02e8 6F .byte 111
+ 802 02e9 B7 .byte -73
+ 803 02ea 62 .byte 98
+ 804 02eb 0E .byte 14
+ 805 02ec AA .byte -86
+ 806 02ed 18 .byte 24
+ 807 02ee BE .byte -66
+ 808 02ef 1B .byte 27
+ 809 02f0 FC .byte -4
+ 810 02f1 56 .byte 86
+ 811 02f2 3E .byte 62
+ 812 02f3 4B .byte 75
+ 813 02f4 C6 .byte -58
+ 814 02f5 D2 .byte -46
+ 815 02f6 79 .byte 121
+ 816 02f7 20 .byte 32
+ 817 02f8 9A .byte -102
+ 818 02f9 DB .byte -37
+ 819 02fa C0 .byte -64
+ 820 02fb FE .byte -2
+ 821 02fc 78 .byte 120
+ 822 02fd CD .byte -51
+ 823 02fe 5A .byte 90
+ 824 02ff F4 .byte -12
+ 825 0300 1F .byte 31
+ 826 0301 DD .byte -35
+ 827 0302 A8 .byte -88
+ 828 0303 33 .byte 51
+ 829 0304 88 .byte -120
+ 830 0305 07 .byte 7
+ 831 0306 C7 .byte -57
+ 832 0307 31 .byte 49
+ 833 0308 B1 .byte -79
+ 834 0309 12 .byte 18
+ 835 030a 10 .byte 16
+ 836 030b 59 .byte 89
+ 837 030c 27 .byte 39
+ 838 030d 80 .byte -128
+
GAS LISTING /tmp/ccjbMjHD.s page 17
+
+
+ 839 030e EC .byte -20
+ 840 030f 5F .byte 95
+ 841 0310 60 .byte 96
+ 842 0311 51 .byte 81
+ 843 0312 7F .byte 127
+ 844 0313 A9 .byte -87
+ 845 0314 19 .byte 25
+ 846 0315 B5 .byte -75
+ 847 0316 4A .byte 74
+ 848 0317 0D .byte 13
+ 849 0318 2D .byte 45
+ 850 0319 E5 .byte -27
+ 851 031a 7A .byte 122
+ 852 031b 9F .byte -97
+ 853 031c 93 .byte -109
+ 854 031d C9 .byte -55
+ 855 031e 9C .byte -100
+ 856 031f EF .byte -17
+ 857 0320 A0 .byte -96
+ 858 0321 E0 .byte -32
+ 859 0322 3B .byte 59
+ 860 0323 4D .byte 77
+ 861 0324 AE .byte -82
+ 862 0325 2A .byte 42
+ 863 0326 F5 .byte -11
+ 864 0327 B0 .byte -80
+ 865 0328 C8 .byte -56
+ 866 0329 EB .byte -21
+ 867 032a BB .byte -69
+ 868 032b 3C .byte 60
+ 869 032c 83 .byte -125
+ 870 032d 53 .byte 83
+ 871 032e 99 .byte -103
+ 872 032f 61 .byte 97
+ 873 0330 17 .byte 23
+ 874 0331 2B .byte 43
+ 875 0332 04 .byte 4
+ 876 0333 7E .byte 126
+ 877 0334 BA .byte -70
+ 878 0335 77 .byte 119
+ 879 0336 D6 .byte -42
+ 880 0337 26 .byte 38
+ 881 0338 E1 .byte -31
+ 882 0339 69 .byte 105
+ 883 033a 14 .byte 20
+ 884 033b 63 .byte 99
+ 885 033c 55 .byte 85
+ 886 033d 21 .byte 33
+ 887 033e 0C .byte 12
+ 888 033f 7D .byte 125
+ 889 .align 16
+ 890 .type lo_filter, @object
+ 891 .size lo_filter, 16
+ 892 lo_filter:
+ 893 0340 00 .byte 0
+ 894 0341 FF .byte -1
+ 895 0342 FF .byte -1
+
GAS LISTING /tmp/ccjbMjHD.s page 18
+
+
+ 896 0343 FF .byte -1
+ 897 0344 FF .byte -1
+ 898 0345 FF .byte -1
+ 899 0346 FF .byte -1
+ 900 0347 FF .byte -1
+ 901 0348 FF .byte -1
+ 902 0349 FF .byte -1
+ 903 034a FF .byte -1
+ 904 034b FF .byte -1
+ 905 034c FF .byte -1
+ 906 034d FF .byte -1
+ 907 034e FF .byte -1
+ 908 034f FF .byte -1
+ 909 .align 16
+ 910 .type FF_tab, @object
+ 911 .size FF_tab, 16
+ 912 FF_tab:
+ 913 0350 00 .byte 0
+ 914 0351 1B .byte 27
+ 915 0352 36 .byte 54
+ 916 0353 2D .byte 45
+ 917 0354 6C .byte 108
+ 918 0355 77 .byte 119
+ 919 0356 5A .byte 90
+ 920 0357 41 .byte 65
+ 921 0358 00 .byte 0
+ 922 0359 00 .byte 0
+ 923 035a 00 .byte 0
+ 924 035b 00 .byte 0
+ 925 035c 00 .byte 0
+ 926 035d 00 .byte 0
+ 927 035e 00 .byte 0
+ 928 035f 00 .byte 0
+ 929 .data
+ 930 .type KAESBlockCipherVecRegFFtable, @object
+ 931 .size KAESBlockCipherVecRegFFtable, 8
+ 932 KAESBlockCipherVecRegFFtable:
+ 933 0000 00 .byte 0
+ 934 0001 1B .byte 27
+ 935 0002 36 .byte 54
+ 936 0003 2D .byte 45
+ 937 0004 6C .byte 108
+ 938 0005 77 .byte 119
+ 939 0006 5A .byte 90
+ 940 0007 41 .byte 65
+ 941 .section .rodata
+ 942 .align 32
+ 943 .type KAESBlockCipherVecRegRcon, @object
+ 944 .size KAESBlockCipherVecRegRcon, 40
+ 945 KAESBlockCipherVecRegRcon:
+ 946 0360 01000000 .long 1
+ 947 0364 02000000 .long 2
+ 948 0368 04000000 .long 4
+ 949 036c 08000000 .long 8
+ 950 0370 10000000 .long 16
+ 951 0374 20000000 .long 32
+ 952 0378 40000000 .long 64
+
GAS LISTING /tmp/ccjbMjHD.s page 19
+
+
+ 953 037c 80000000 .long 128
+ 954 0380 1B000000 .long 27
+ 955 0384 36000000 .long 54
+ 956 .LC0:
+ 957 0388 53756242 .string "SubBytes"
+ 957 79746573
+ 957 00
+ 958 .LC1:
+ 959 0391 25733A09 .string "%s:\t%0.8x %0.8x %0.8x %0.8x\n"
+ 959 25302E38
+ 959 78202530
+ 959 2E387820
+ 959 25302E38
+ 960 .LC2:
+ 961 03ae 526F7442 .string "RotBytesLeft"
+ 961 79746573
+ 961 4C656674
+ 961 00
+ 962 .LC3:
+ 963 03bb 56656358 .string "VecXor"
+ 963 6F7200
+ 964 .LC4:
+ 965 03c2 53746174 .string "StateDupColumn3"
+ 965 65447570
+ 965 436F6C75
+ 965 6D6E3300
+ 966 .text
+ 967 .type KAESBlockCipherVecRegKeyExpansion128, @function
+ 968 KAESBlockCipherVecRegKeyExpansion128:
+ 969 .LFB645:
+ 970 .file 2 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 20
+
+
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <krypto/extern.h>
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "ncbi-priv.h"
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "aes-ncbi-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "cipher-priv.h"
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-priv.h"
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/debug.h>
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/out.h>
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/rc.h>
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <byteswap.h>
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <string.h>
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdint.h>
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdlib.h>
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <assert.h>
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <sysalloc.h>
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <cpuid.h>
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VECREG
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <v128.h>
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This implements the AES cipher as defined by FIPS-197 from NIST
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Notes on implmentation:
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Byte ordering in AES is not critical but unllike the original implmentation
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * bytes are not re-ordered to a big endian order upon reading them in and this
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * code will expect to run on an Intel/AMD type processor and might have issues
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * on some big endian processors.
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Many functions are written as static inline functions to
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * facilitate GCC type assembly language optimization on various processors
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This implements the Equivalent Inverse Cipher not the Inverse Cipher. In
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * general functions will match those defined in the FIPS-197 document where they
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * do not get optimized away for Intel/AMD XMM registers and AES-NI instructions.
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * NOTE:
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * C-99 types are used for specific sized types. An unaddornded unsigned type
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * is used for many index type variables to allow the compiler choice in
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * size where size does not matter very much. As these index variables do
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * not go above 16 any size would do but the compiler can choose the size most
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * suited for array subscripting.
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_00 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
GAS LISTING /tmp/ccjbMjHD.s page 21
+
+
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_01 = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_0F = { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_10 = { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * These functions implment the Advanced Encryption Standard AES as defined
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * in the FIPS (Federal Information Processing Standars Publication 197
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Of Nevember 26, 2001.
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Read a blocks worth of bytes into an CipherVec
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * With vector registers it is a single instruction, without them it
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * is a memmove call
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec vec;
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** "movdqu (%[a]),%[s]" : [s] "=x" (vec) : [a] "D" (ain)
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** );
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (&u.bytes, ain, sizeof (u));
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 22
+
+
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Write a block's worth of bytes out from an CipherVec
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * With vector registers it is a single instruction, without them it
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * is a memmove call
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec rvec = vec;
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** "movdqu %[s],(%[a])" : : [s] "x" (rvec), [a] "D" (rout)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** );
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memmove (rout, &vec, sizeof (vec));
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] ^= u2.columns[ix];
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+
GAS LISTING /tmp/ccjbMjHD.s page 23
+
+
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] &= u2.columns[ix];
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] |= u2.columns[ix];
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+
GAS LISTING /tmp/ccjbMjHD.s page 24
+
+
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 + v2;
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] += u2.columns[ix];
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] -= u2.columns[ix];
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+
GAS LISTING /tmp/ccjbMjHD.s page 25
+
+
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 * v2;
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] *= u2.columns[ix];
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 / v2;
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.state = v1;
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u2.state = v2;
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < AES_Nb; ++ix)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u1.columns[ix] /= u2.columns[ix];
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u1.state;
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+
GAS LISTING /tmp/ccjbMjHD.s page 26
+
+
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFB128 (dest, mask);
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u out, in, gate;
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = dest;
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** gate.state = mask;
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof dest; ++ix)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (gate.bytes[ix] & 0x80)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = 0;
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec sl_mask [9] =
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC },
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8 },
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 },
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0 },
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0 },
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+
GAS LISTING /tmp/ccjbMjHD.s page 27
+
+
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (k <= 8);
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("mask", sl_mask[k]); */
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("v 1", vv); */
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("v 2", vv); */
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("v 3", vv); */
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u vv; /* state and key not countries :) */
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.state = v;
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (v); ++ix)
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("SLLBI %d %x ", k, vv.bytes[ix]);
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.bytes[ix] <<= k;
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("%x\n", vv.bytes[ix]);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv.state;
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec sr_mask [9] =
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F },
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F },
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F },
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F },
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 },
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+
GAS LISTING /tmp/ccjbMjHD.s page 28
+
+
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u vv; /* state and key not countries :) */
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.state = v;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (v); ++ix)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("SRLBI %d %x ", k, vv.bytes[ix]);
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv.bytes[ix] >>= k;
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KOutMsg ("%x\n", vv.bytes[ix]);
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv.state;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [which] = column;
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = u.state;
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.4
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The AddRoundKey transformation is a sinple exclusive or of all 128 bits
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * in the current block against a round key. This operation is used in all
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Cipher and EqInvCipher rounds
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * With vector types it is a single operation that with vector registers is
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * a single op-code.
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+
GAS LISTING /tmp/ccjbMjHD.s page 29
+
+
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(VecXor) (state, round_key);
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.2
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS 197 describes the state in column major format
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * while C and assembly programmers tend to think in row major
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The byte order is 0,1,2,3,,...F as shown in the first diagram.
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * ShiftRows() is defined as leaving this state
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 0 | 4 | 8 | C |
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | 5 | 9 | D | 1 |
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | A | E | 2 | 6 |
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | F | 3 | 7 | B |
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec ShiftRowTable
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11 };
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.3.1
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvShiftRows() is defined as leaving this state
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 0 | 4 | 8 | C |
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | D | 1 | 5 | 9 |
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | A | E | 2 | 6 |
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+
GAS LISTING /tmp/ccjbMjHD.s page 30
+
+
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | 7 | B | F | 3 |
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVecByte InvShiftRowTable
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3 };
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 3 | 7 | B | F |
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | 0 | 4 | 8 | C |
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | 1 | 5 | 9 | D |
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | 2 | 6 | A | E |
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec ShiftRowTable
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 3, 0, 1, 2, 7, 4, 5, 6, 11, 8, 9, 10, 15, 12, 13, 14 };
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 0 | 4 | 8 | C | | 1 | 5 | B | D |
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 1 | 5 | 9 | D | | 2 | 6 | 8 | E |
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 2 | 6 | A | E | | 3 | 7 | 9 | F |
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * | 3 | 7 | B | F | | 0 | 4 | 8 | C |
+
GAS LISTING /tmp/ccjbMjHD.s page 31
+
+
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * +---+---+---+---+ +---+---+---+---+
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec ShiftRowTable
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** = { 1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12 };
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.1
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SubBytes replaces each byte in a state with a specific byte value from
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * A Rijndael Substitution box
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(RijndaelSBox)[256] =
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB,
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72,
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31,
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2,
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F,
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58,
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F,
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3,
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19,
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B,
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4,
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE,
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B,
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D,
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28,
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB,
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+
GAS LISTING /tmp/ccjbMjHD.s page 32
+
+
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.bytes[ix] = AESBCMEMBER(RijndaelSBox)[u.bytes[ix]];
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SubWord performs the same operation as SubBytes but on
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the four bytes of a column and not a whole state
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESColumn col;
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvSubBytes replaces each byte in a state with a specific byte value from
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * an Inversze Rijndael Substitution box. That is InvSubBytes undoes SubBytes
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint8_t AESBCMEMBER(RijndaelInvSBox)[256] =
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7,
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9,
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3,
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1,
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6,
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D,
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45,
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A,
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6,
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF,
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE,
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A,
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC,
+
GAS LISTING /tmp/ccjbMjHD.s page 33
+
+
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C,
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99,
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C,
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.bytes[ix] = AESBCMEMBER(RijndaelInvSBox)[u.bytes[ix]];
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelSBoxV)[16] =
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x7
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x1
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x7
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x8
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xC
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x7
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xD
+ 806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x7
+ 807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x0
+ 808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8
+ 809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9
+ 810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xD
+ 811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x1
+ 812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelInvSBoxV)[16] =
+ 816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
+ 818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xF
+ 819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xC
+ 820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4
+ 821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x2
+ 822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x9
+ 823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x8
+ 824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 34
+
+
+ 825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6
+ 826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x7
+ 827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6
+ 828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1
+ 829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF
+ 830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5
+ 831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xE
+ 832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x6
+ 833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7
+ 834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec lo_filter = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ 840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec lo, hi, tmp, out;
+ 849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+ 850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("state", state); */
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("lo", lo); */
+ 856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("out", out); */
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* DEBUG_CIPHER_VECTOR ("out", out); */
+
GAS LISTING /tmp/ccjbMjHD.s page 35
+
+
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelSBoxV));
+ 894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelInvSBoxV));
+ 905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.1.3
+ 910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * there are no psllb or psrlb instructions so shift words not bytes
+ 914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * and then cut off bits that would have been zeroed if there were
+ 915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * such instructions
+ 916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+ 918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+ 919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec FF_tab =
+ 920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x1B, 0x36, 0x2D, 0x6C, 0x77, 0x5A, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec sl, sr;
+ 930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (bits <= 8);
+ 932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+
GAS LISTING /tmp/ccjbMjHD.s page 36
+
+
+ 939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(VecXor)(sl, sr);
+ 940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (CipherVec state)
+ 945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (register CipherVec state)
+ 949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 1);
+ 953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 2);
+ 969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 3);
+ 985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static AESByte AESBCMEMBER(FFtable)[] = { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41 };
+ 992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+
GAS LISTING /tmp/ccjbMjHD.s page 37
+
+
+ 996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+ 997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+ 998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+1000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(FFtable)[x];
+1002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+1013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+1024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+1035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec c0, c1, c2, c3;
+1046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(RotBytesLeft) (state);
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c2 = AESBCMEMBER(RotBytesLeft) (c1);
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c3 = AESBCMEMBER(RotBytesLeft) (c2);
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = AESBCMEMBER(VecXor) (state, c1);
+1051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 38
+
+
+1053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = AESBCMEMBER(FF_mul_02) (c0);
+1055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u tmp;
+1058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp.state = c0;
+1061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof tmp; ++ix)
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+1064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = tmp.state;
+1065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c2);
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c3);
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c0);
+1070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return c1;
+1072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* obsoleted
+1073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u in, out;
+1074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = state;
+1077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (out.bytes); ix += 4)
+1079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s0 = in.bytes[ix + 0];
+1081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s1 = in.bytes[ix + 1];
+1082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s2 = in.bytes[ix + 2];
+1083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned const s3 = in.bytes[ix + 3];
+1084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 0] = s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1);
+1086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 1] = s0 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2);
+1087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 2] = s0 ^ s1 ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3);
+1088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 3] = s0 ^ s1 ^ s2 ^ AESBCMEMBER(FFmul02)(s3 ^ s0);
+1089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+1091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+1102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESIMC (state);
+1103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec r1, r2, r3, f2, f4, f8;
+1105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r1 = AESBCMEMBER(RotBytesLeft) (state);
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r2 = AESBCMEMBER(RotBytesLeft) (r1);
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r3 = AESBCMEMBER(RotBytesLeft) (r2);
+1109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 39
+
+
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(VecXor) (state, r2);
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(VecXor) (state, r1);
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (r2, r3);
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (f8, r1);
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (f8, f2);
+1115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(FF_mul) (f2,1);
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(FF_mul) (f4,2);
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(FF_mul) (f8,3);
+1121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u fu2, fu4, fu8;
+1124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.state = f2;
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.state = f4;
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.state = f8;
+1129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof fu2; ++ix)
+1131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+1135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = fu2.state;
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = fu4.state;
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = fu8.state;
+1139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f2);
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f4);
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f8);
+1145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+1149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u in, out;
+1151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix;
+1152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = state;
+1154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (out.bytes); ix += AES_Nb)
+1156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s0 = in.bytes[ix + 0];
+1158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s1 = in.bytes[ix + 1];
+1159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s2 = in.bytes[ix + 2];
+1160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord s3 = in.bytes[ix + 3];
+1161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord p, q;
+1162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** q = AESBCMEMBER(FFmul08)(s0 ^ s1 ^ s2 ^ s3);
+1164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** p = q ^ AESBCMEMBER(FFmul04)(s0 ^ s2);
+1165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** q = q ^ AESBCMEMBER(FFmul04)(s1 ^ s3);
+1166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 40
+
+
+1167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 0] = s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1) ^ p;
+1168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 1] = s0 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2) ^ q;
+1169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 2] = s0 ^ s1 ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3) ^ p;
+1170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.bytes[ix + 3] = s0 ^ s1 ^ s2 ^ AESBCMEMBER(FFmul02)(s3 ^ s0) ^ q;
+1171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+1174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+1179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 5.2
+1180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+1182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(Rcon)[] = {
+1183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00000001, 0x00000002, 0x00000004, 0x00000008,
+1184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x00000010, 0x00000020, 0x00000040, 0x00000080,
+1185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 0x0000001B, 0x00000036
+1186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+1187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+1197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * not portable to architectures which require aligned multibyte reads
+1209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but as this only runs on Intel at this point it is fine for now
+1210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return *(AESWord*)pointer;
+1212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion) (CipherVec * r, const AESByte * key, unsigned Nr, unsigned Nk)
+1218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord * w = (AESWord*)r;
+1220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESWord * pRcon;
+1221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix, limit;
+1222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 41
+
+
+1224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("%s (w (%p), key (%p), Nr (%u) Nk (%u))\n", __func__, w, key, Nr, Nk));
+1226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < Nk; ++ix)
+1228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("i (dec): %u\n", ix));
+1230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(GetWord) (key+(ix*4));
+1231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** w[ix] = temp;
+1232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("kw[%i]: %0.8x\n", ix, temp));
+1233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** limit = AES_Nb * (Nr + 1);
+1236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** pRcon = AESBCMEMBER(Rcon);
+1237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("Nk (%u) Nr (%u) limit (%u)\n", Nk, Nr, limit));
+1238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (; ix < limit; ++ix)
+1240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("i (dec): %u %u\n", ix, limit));
+1243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* temp should already be set */
+1245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("temp: %0.8x\n", temp));
+1246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ((ix % Nk) == 0)
+1247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+1249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after RotWord: %0.8x \n", temp));
+1250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord) (temp);
+1251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("Rcon [i/Nk]: %0.8x\n", *pRcon));
+1253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= *pRcon++;
+1254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after XOR with Rcon: %0.8x \n", temp));
+1255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ((Nk > 6) && ((ix % Nk) == 4))
+1257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord) (temp);
+1259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("w[i-Nk]: %0.8x\n", w[ix-Nk]));
+1262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= w [ix - Nk];
+1263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_KEYEXP(("kw[ix]: %0.8x\n", temp));
+1264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** w [ix] = temp;
+1265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+
GAS LISTING /tmp/ccjbMjHD.s page 42
+
+
+1281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec mask = { 8, 9, 10, 11, 12, 13, 14, 15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[2];
+1307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+1308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = 0;
+1309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = 0;
+1310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4,
+1324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+1330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+1331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+1332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = 0;
+1333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 43
+
+
+1338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W3:W3:W3:W3
+1344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0xFF);
+1354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[3];
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[3];
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[3];
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W2:W2:W2:W2
+1372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0xAA);
+1382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[2];
+1387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[2];
+1388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[2];
+1389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+
GAS LISTING /tmp/ccjbMjHD.s page 44
+
+
+1395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W2:W2:W2:W2
+1400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0x55);
+1410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[1];
+1415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[1];
+1416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[0] = temp.columns[1];
+1417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W0:W0:W0
+1428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_PSHUFD128 (state,0x00);
+1438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] = temp.columns[0];
+1443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] = temp.columns[0];
+1444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] = temp.columns[0];
+1445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+
GAS LISTING /tmp/ccjbMjHD.s page 45
+
+
+1452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X0:X1:X2:X3
+1454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:X0:X1
+1457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_SHUFPD (w, x, 0x00);
+1467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u ww;
+1469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u xx;
+1470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+1473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+1476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+1478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X0:X1:X2:X3
+1486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X2:X3:W0:W1
+1489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_SHUFPD (w, x, 0x01);
+1499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u ww;
+1501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u xx;
+1502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.state = w;
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** xx.state = x;
+1505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[0] = ww.columns[2];
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[1] = ww.columns[3];
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[2] = xx.columns[0];
+
GAS LISTING /tmp/ccjbMjHD.s page 46
+
+
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ww.columns[3] = xx.columns[1];
+1510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ww.state;
+1512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X0:X1:X2:X3
+1520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * X2:X3:W0:W1
+1523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_SHUFPD (v0, v1, 0x02);
+1533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u t0;
+1535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u t1;
+1536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.state = v0;
+1538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t1.state = v1;
+1539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[2] = t0.columns[0];
+1541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[3] = t0.columns[1];
+1542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[0] = t1.columns[2];
+1543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** t0.columns[1] = t1.columns[3];
+1544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return t0.state;
+1546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * incoming vector in words
+1552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W1:W2:W3
+1553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+1554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * output vector in words
+1555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * W0:W0^W1:W0^W1^W2:W0^W1^W2^W3
+1556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+
GAS LISTING /tmp/ccjbMjHD.s page 47
+
+
+1566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+1572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u temp;
+1574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.state = state;
+1576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[1] ^= temp.columns[0];
+1578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[2] ^= temp.columns[1];
+1579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp.columns[3] ^= temp.columns[2];
+1580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return temp.state;
+1582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return op_AESKEYGENASSIST (state, rcon);
+1595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u in;
+1597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u out;
+1598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord rconw;
+1599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+1601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** in.state = state;
+1602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[0] = AESBCMEMBER(SubWord)(in.columns[1]);
+1604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[1] = AESBCMEMBER(RotWord)(out.columns[0]) ^ rconw;
+1605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[2] = AESBCMEMBER(SubWord)(in.columns[3]);
+1606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out.columns[3] = AESBCMEMBER(RotWord)(out.columns[2]) ^ rconw;
+1607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out.state;
+1609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+
GAS LISTING /tmp/ccjbMjHD.s page 48
+
+
+1623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(StateDupColumn1) (tmp);
+1624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord rconw;
+1627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+1634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+1637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, 0);
+1651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(StateDupColumn2) (tmp);
+1652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+1658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+1661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp = state;
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = op_AESKEYGENASSIST (tmp, rcon);
+1675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(StateDupColumn3) (tmp);
+1676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec vrcon;
+1679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp;
+
GAS LISTING /tmp/ccjbMjHD.s page 49
+
+
+1680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+1691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #elif USE_VEC && 1
+1695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec tmp;
+1696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [3] = rcon;
+1699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+1701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, u.state);
+1705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+1709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec_AES_u u;
+1712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord rconw;
+1713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord temp;
+1714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+1716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+1717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+1718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+1719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+1720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+1723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * round_keys, const AESByte * key)
+1731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 971 .loc 2 1731 0
+ 972 .cfi_startproc
+ 973 0014 55 pushq %rbp
+ 974 .LCFI2:
+ 975 .cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccjbMjHD.s page 50
+
+
+ 976 0015 4889E5 movq %rsp, %rbp
+ 977 .cfi_offset 6, -16
+ 978 .LCFI3:
+ 979 .cfi_def_cfa_register 6
+ 980 0018 4155 pushq %r13
+ 981 001a 4154 pushq %r12
+ 982 001c 53 pushq %rbx
+ 983 001d 4881EC68 subq $11112, %rsp
+ 983 2B0000
+ 984 0024 4889BD78 movq %rdi, -10632(%rbp)
+ 984 D6FFFF
+ 985 002b 4889B570 movq %rsi, -10640(%rbp)
+ 985 D6FFFF
+ 986 .loc 2 1731 0
+ 987 0032 488B8570 movq -10640(%rbp), %rax
+ 987 D6FFFF
+ 988 0039 48898520 movq %rax, -9952(%rbp)
+ 988 D9FFFF
+ 989 .LBB684:
+ 990 .LBB685:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 991 .loc 2 126 0
+ 992 0040 488B8520 movq -9952(%rbp), %rax
+ 992 D9FFFF
+ 993 0047 4889C7 movq %rax, %rdi
+ 994 #APP
+ 995 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 996 movdqu (%rdi),%xmm0
+ 997 # 0 "" 2
+ 998 #NO_APP
+ 999 004e 660F7F85 movdqa %xmm0, -11136(%rbp)
+ 999 80D4FFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 1000 .loc 2 129 0
+ 1001 0056 660F6F85 movdqa -11136(%rbp), %xmm0
+ 1001 80D4FFFF
+ 1002 .LBE685:
+ 1003 .LBE684:
+1732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec state;
+1733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec kgastate;
+1734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(StateIn) (key);
+ 1004 .loc 2 1735 0
+ 1005 005e F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 1005 00D9FFFF
+1736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = state;
+ 1006 .loc 2 1736 0
+ 1007 0066 488B8578 movq -10632(%rbp), %rax
+ 1007 D6FFFF
+ 1008 006d F30F6F85 movdqu -9984(%rbp), %xmm0
+ 1008 00D9FFFF
+ 1009 0075 F30F7F00 movdqu %xmm0, (%rax)
+ 1010 0079 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 1010 00D9FFFF
+ 1011 0081 F30F7F85 movdqu %xmm0, -9936(%rbp)
+ 1011 30D9FFFF
+ 1012 .LBB686:
+
GAS LISTING /tmp/ccjbMjHD.s page 51
+
+
+ 1013 .LBB687:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1014 .loc 2 1681 0
+ 1015 0089 B8010000 movl $1, %eax
+ 1015 00
+ 1016 008e 660F6F05 movdqa vec_00(%rip), %xmm0
+ 1016 00000000
+ 1017 0096 F30F7F85 movdqu %xmm0, -9904(%rbp)
+ 1017 50D9FFFF
+ 1018 009e 89854CD9 movl %eax, -9908(%rbp)
+ 1018 FFFF
+ 1019 00a4 F30F6F85 movdqu -9904(%rbp), %xmm0
+ 1019 50D9FFFF
+ 1020 00ac F30F7F85 movdqu %xmm0, -9872(%rbp)
+ 1020 70D9FFFF
+ 1021 00b4 8B854CD9 movl -9908(%rbp), %eax
+ 1021 FFFF
+ 1022 00ba 89856CD9 movl %eax, -9876(%rbp)
+ 1022 FFFF
+ 1023 .LBB688:
+ 1024 .LBB689:
+ 1025 .LBB690:
+ 1026 .LBB691:
+ 1027 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifndef _h_v128_
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #define _h_v128_
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #include <stdint.h>
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #include <x86intrin.h>
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __cplusplus
+
GAS LISTING /tmp/ccjbMjHD.s page 52
+
+
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** extern "C" {
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int8_t v128_i8_t __attribute__ ((vector_size (16),__may_alias__));
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint8_t v128_u8_t __attribute__ ((vector_size (16),__may_alias__));
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int16_t v128_i16_t __attribute__ ((vector_size (16),__may_alias__));
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int32_t v128_i32_t __attribute__ ((vector_size (16),__may_alias__));
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int64_t v128_i64_t __attribute__ ((vector_size (16),__may_alias__));
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint16_t v128_u16_t __attribute__ ((vector_size (16),__may_alias__));
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint32_t v128_u32_t __attribute__ ((vector_size (16),__may_alias__));
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint64_t v128_u64_t __attribute__ ((vector_size (16),__may_alias__));
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef float v128_f_t __attribute__ ((vector_size (16),__may_alias__));
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef double v128_d_t __attribute__ ((vector_size (16),__may_alias__));
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* NOTE:
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * these types are to hide perceived flaws in the Intel/GCC code
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * don't use them outside of this file. uint8_t, int8_t and int64_t all
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * fail to compile so the above types can't be used within this file in some
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * places.
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef char v128_c_t __attribute__ ((vector_size (16),__may_alias__));
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef long long int v128_lli_t __attribute__ ((vector_size (16),__may_alias__));
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #if USE_VEC_REG
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* SSE
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movss
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movaps
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movups
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movlps
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movhps
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movlhps
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** movhlps
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __MMX__
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* MMX
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_paddb (v8qi, v8qi)
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_paddw (v4hi, v4hi)
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_paddd (v2si, v2si)
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_psubb (v8qi, v8qi)
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psubw (v4hi, v4hi)
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psubd (v2si, v2si)
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_paddsb (v8qi, v8qi)
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_paddsw (v4hi, v4hi)
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_psubsb (v8qi, v8qi)
+ 81:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psubsw (v4hi, v4hi)
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_paddusb (v8qi, v8qi)
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_paddusw (v4hi, v4hi)
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_psubusb (v8qi, v8qi)
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psubusw (v4hi, v4hi)
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmullw (v4hi, v4hi)
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** di __builtin_ia32_pand (di, di)
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** di __builtin_ia32_pandn (di,di)
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** di __builtin_ia32_por (di, di)
+
GAS LISTING /tmp/ccjbMjHD.s page 53
+
+
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** di __builtin_ia32_pxor (di, di)
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pcmpeqd (v2si, v2si)
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pcmpgtd (v2si, v2si)
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_punpckhdq (v2si, v2si)
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_punpckldq (v2si, v2si)
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_packsswb (v4hi, v4hi)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_packssdw (v2si, v2si)
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_packuswb (v4hi, v4hi)
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psllw (v4hi, v4hi)
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pslld (v2si, v2si)
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psllq (v1di, v1di)
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psrlw (v4hi, v4hi)
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psrld (v2si, v2si)
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psrlq (v1di, v1di)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psraw (v4hi, v4hi)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psrad (v2si, v2si)
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psllwi (v4hi, int)
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pslldi (v2si, int)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psllqi (v1di, int)
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psrlwi (v4hi, int)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psrldi (v2si, int)
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psrlqi (v1di, int)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psrawi (v4hi, int)
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psradi (v2si, int)
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE__
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* SSE
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pavgb (v8qi, v8qi)
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pavgw (v4hi, v4hi)
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_psadbw (v8qi, v8qi)
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pminub (v8qi, v8qi)
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pminsw (v4hi, v4hi)
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pextrw (v4hi, int)
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pinsrw (v4hi, int, int)
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pmovmskb (v8qi)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movntq (di *, di)
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_sfence (void)
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comieq (v4sf, v4sf)
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comineq (v4sf, v4sf)
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comilt (v4sf, v4sf)
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comile (v4sf, v4sf)
+
GAS LISTING /tmp/ccjbMjHD.s page 54
+
+
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comigt (v4sf, v4sf)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comige (v4sf, v4sf)
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomieq (v4sf, v4sf)
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomineq (v4sf, v4sf)
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomilt (v4sf, v4sf)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomile (v4sf, v4sf)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomigt (v4sf, v4sf)
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomige (v4sf, v4sf)
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_addps (v4sf, v4sf)
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_subps (v4sf, v4sf)
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_mulps (v4sf, v4sf)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_divps (v4sf, v4sf)
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_addss (v4sf, v4sf)
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_subss (v4sf, v4sf)
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_mulss (v4sf, v4sf)
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_divss (v4sf, v4sf)
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpltps (v4sf, v4sf)
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpleps (v4sf, v4sf)
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpordps (v4sf, v4sf)
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpltss (v4sf, v4sf)
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpless (v4sf, v4sf)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpnless (v4sf, v4sf)
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cmpordss (v4sf, v4sf)
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_maxps (v4sf, v4sf)
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_maxss (v4sf, v4sf)
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_minps (v4sf, v4sf)
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_minss (v4sf, v4sf)
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_andps (v4sf, v4sf)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_andnps (v4sf, v4sf)
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_orps (v4sf, v4sf)
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_xorps (v4sf, v4sf)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movss (v4sf, v4sf)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movhlps (v4sf, v4sf)
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movlhps (v4sf, v4sf)
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_cvtps2pi (v4sf)
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_cvtss2si (v4sf)
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_cvttps2pi (v4sf)
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_cvttss2si (v4sf)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_rcpps (v4sf)
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_rsqrtps (v4sf)
+
GAS LISTING /tmp/ccjbMjHD.s page 55
+
+
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_sqrtps (v4sf)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_rcpss (v4sf)
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_rsqrtss (v4sf)
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_sqrtss (v4sf)
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPS ( v128_u8_t vin1, v128_u8_t vin2, const int mask )
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPS (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufps ((v128_f_t)vin1, (v128_f_t)vin2, mask);
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movntps (float *, v4sf)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_movmskps (v4sf)
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadaps (float *)
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movaps machine instruction as a load from memory.
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeaps (float *, v4sf)
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movaps machine instruction as a store to memory.
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadups (float *)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movups machine instruction as a load from memory.
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeups (float *, v4sf)
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movups machine instruction as a store to memory.
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadsss (float *)
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movss machine instruction as a load from memory.
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storess (float *, v4sf)
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movss machine instruction as a store to memory.
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movhps machine instruction as a load from memory.
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movlps machine instruction as a load from memory
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storehps (v2sf *, v4sf)
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movhps machine instruction as a store to memory.
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storelps (v2sf *, v4sf)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movlps machine instruction as a store to memory.
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE2__
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse2
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdeq (v2df, v2df)
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdlt (v2df, v2df)
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdle (v2df, v2df)
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdgt (v2df, v2df)
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdge (v2df, v2df)
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_comisdneq (v2df, v2df)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdeq (v2df, v2df)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdlt (v2df, v2df)
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdle (v2df, v2df)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdgt (v2df, v2df)
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdge (v2df, v2df)
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ucomisdneq (v2df, v2df)
+
GAS LISTING /tmp/ccjbMjHD.s page 56
+
+
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpeqpd (v2df, v2df)
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpltpd (v2df, v2df)
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmplepd (v2df, v2df)
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpgtpd (v2df, v2df)
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpgepd (v2df, v2df)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpunordpd (v2df, v2df)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpneqpd (v2df, v2df)
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpnltpd (v2df, v2df)
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpnlepd (v2df, v2df)
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpngtpd (v2df, v2df)
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpngepd (v2df, v2df)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpordpd (v2df, v2df)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpeqsd (v2df, v2df)
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpltsd (v2df, v2df)
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmplesd (v2df, v2df)
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpunordsd (v2df, v2df)
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpneqsd (v2df, v2df)
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpnltsd (v2df, v2df)
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpnlesd (v2df, v2df)
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cmpordsd (v2df, v2df)
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_paddq (v2di, v2di)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psubq (v2di, v2di)
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_addpd (v2df, v2df)
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_subpd (v2df, v2df)
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_mulpd (v2df, v2df)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_divpd (v2df, v2df)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_addsd (v2df, v2df)
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_subsd (v2df, v2df)
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_mulsd (v2df, v2df)
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_divsd (v2df, v2df)
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_minpd (v2df, v2df)
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_maxpd (v2df, v2df)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_minsd (v2df, v2df)
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_maxsd (v2df, v2df)
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_andpd (v2df, v2df)
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_andnpd (v2df, v2df)
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_orpd (v2df, v2df)
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_xorpd (v2df, v2df)
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_movsd (v2df, v2df)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_unpckhpd (v2df, v2df)
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_unpcklpd (v2df, v2df)
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_paddd128 (v4si, v4si)
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_paddq128 (v2di, v2di)
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psubd128 (v4si, v4si)
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psubq128 (v2di, v2di)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pand128 (v2di, v2di)
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pandn128 (v2di, v2di)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_por128 (v2di, v2di)
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pxor128 (v2di, v2di)
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
+
GAS LISTING /tmp/ccjbMjHD.s page 57
+
+
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_punpckldq128 (v4si, v4si)
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_packssdw128 (v4si, v4si)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_maskmovdqu (v16qi, v16qi)
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadupd (double *)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeupd (double *, v2df)
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadhpd (v2df, double const *)
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadlpd (v2df, double const *)
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_movmskpd (v2df)
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_pmovmskb128 (v16qi)
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movnti (int *, int)
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movntpd (double *, v2df)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_movntdq (v2df *, v2df)
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pshufd (v4si, int)
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pshuflw (v8hi, int)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pshufhw (v8hi, int)
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_sqrtpd (v2df)
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_sqrtsd (v2df)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_shufpd (v2df, v2df, int)
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtdq2pd (v4si)
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtdq2ps (v4si)
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvtpd2dq (v2df)
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_cvtpd2pi (v2df)
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtpd2ps (v2df)
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvttpd2dq (v2df)
+
GAS LISTING /tmp/ccjbMjHD.s page 58
+
+
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_cvttpd2pi (v2df)
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtpi2pd (v2si)
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_cvtsd2si (v2df)
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_cvttsd2si (v2df)
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** long long __builtin_ia32_cvtsd2si64 (v2df)
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** long long __builtin_ia32_cvttsd2si64 (v2df)
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvtps2dq (v4sf)
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtps2pd (v4sf)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_cvttps2dq (v4sf)
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtsi2sd (v2df, int)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtsi642sd (v2df, long long)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_clflush (const void *)
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_lfence (void)
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_mfence (void)
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_loaddqu (const char *)
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storedqu (char *, v16qi)
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_pmuludq (v2si, v2si)
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmuludq128 (v4si, v4si)
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pslld128 (v4si, v4si)
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psllq128 (v2di, v2di)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psrld128 (v4si, v4si)
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psrlq128 (v2di, v2di)
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psrad128 (v4si, v4si)
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pslldqi128 (v2di, int)
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psllwi128 (v8hi, int)
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pslldi128 (v4si, int)
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSLLDI128 ( v128_u8_t vin, const int bit_count )
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSLLDI128 (v128_u8_t vin, const int bit_count)
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psllqi128 (v2di, int)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psrldqi128 (v2di, int)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psrlwi128 (v8hi, int)
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psrldi128 (v4si, int)
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSRLDI128 ( v128_u8_t vin, const int bit_count )
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSRLDI128 (v128_u8_t vin, const int bit_count)
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+
GAS LISTING /tmp/ccjbMjHD.s page 59
+
+
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_psrlqi128 (v2di, int)
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psrawi128 (v8hi, int)
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psradi128 (v4si, int)
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_movq128 (v2di)
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFD128 ( v128_u8_t vin, const int mask )
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFD128 (v128_u8_t vin, const int mask)
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE3__
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse3
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_addsubpd (v2df, v2df)
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_addsubps (v4sf, v4sf)
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_haddpd (v2df, v2df)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_haddps (v4sf, v4sf)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_hsubpd (v2df, v2df)
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_hsubps (v4sf, v4sf)
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_lddqu (char const *)
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_movddup (v2df)
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movshdup (v4sf)
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_movsldup (v4sf)
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_mwait (unsigned int, unsigned int)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadddup (double const *)
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSSE3__
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* ssse3
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * The following built-in functions are available when -mssse3 is used. All of
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * them generate the machine instruction that is part of the name with MMX
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * registers.
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_phaddd (v2si, v2si)
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_phaddw (v4hi, v4hi)
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_phsubd (v2si, v2si)
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_phsubw (v4hi, v4hi)
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
+
GAS LISTING /tmp/ccjbMjHD.s page 60
+
+
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pshufb (v8qi, v8qi)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_psignb (v8qi, v8qi)
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_psignd (v2si, v2si)
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_psignw (v4hi, v4hi)
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v1di __builtin_ia32_palignr (v1di, v1di, int)
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8qi __builtin_ia32_pabsb (v8qi)
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2si __builtin_ia32_pabsd (v2si)
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4hi __builtin_ia32_pabsw (v4hi)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -mssse3 is used.
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** with SSE registers.
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_phaddd128 (v4si, v4si)
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_phsubd128 (v4si, v4si)
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** + v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_psignd128 (v4si, v4si)
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_palignr128 (v2di, v2di, int)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pabsb128 (v16qi)
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pabsd128 (v4si)
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pabsw128 (v8hi)
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE4_1__
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse4.1
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.1 is used.
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name.
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_blendpd (v2df, v2df, const int)
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_dppd (v2df, v2df, const int)
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_movntdqa (v2di *);
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
+
GAS LISTING /tmp/ccjbMjHD.s page 61
+
+
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_packusdw128 (v4si, v4si)
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pcmpeqq (v2di, v2di)
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_phminposuw128 (v8hi)
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmaxud128 (v4si, v4si)
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pminsd128 (v4si, v4si)
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pminud128 (v4si, v4si)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmovsxbd128 (v16qi)
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovsxbq128 (v16qi)
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmovsxbw128 (v16qi)
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovsxdq128 (v4si)
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmovsxwd128 (v8hi)
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovsxwq128 (v8hi)
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmovzxbd128 (v16qi)
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovzxbq128 (v16qi)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v8hi __builtin_ia32_pmovzxbw128 (v16qi)
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovzxdq128 (v4si)
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmovzxwd128 (v8hi)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmovzxwq128 (v8hi)
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_pmuldq128 (v4si, v4si)
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_pmulld128 (v4si, v4si)
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ptestc128 (v2di, v2di)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ptestnzc128 (v2di, v2di)
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_ptestz128 (v2di, v2di)
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_roundpd (v2df, const int)
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_roundps (v4sf, const int)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_roundsd (v2df, v2df, const int)
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.1 is used.
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the insertps machine instruction.
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vec_ext_v16qi (v16qi, const int)
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pextrb machine instruction.
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrb machine instruction.
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrd machine instruction.
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** __attribute__ ((always_inline));
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_vec_set_v4si ((v128_i32_t)vin, ii, off);
+ 1028 .loc 3 598 0
+ 1029 00c0 8B856CD9 movl -9876(%rbp), %eax
+ 1029 FFFF
+ 1030 00c6 F30F6F85 movdqu -9872(%rbp), %xmm0
+ 1030 70D9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 62
+
+
+ 1031 00ce 660F3A22 pinsrd $3, %eax, %xmm0
+ 1031 C003
+ 1032 .LBE691:
+ 1033 .LBE690:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 1034 .loc 2 519 0
+ 1035 00d4 F30F7F85 movdqu %xmm0, -9904(%rbp)
+ 1035 50D9FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1036 .loc 2 526 0
+ 1037 00dc F30F6F85 movdqu -9904(%rbp), %xmm0
+ 1037 50D9FFFF
+ 1038 .LBE689:
+ 1039 .LBE688:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1040 .loc 2 1681 0
+ 1041 00e4 660F7F85 movdqa %xmm0, -11104(%rbp)
+ 1041 A0D4FFFF
+ 1042 00ec F30F6F85 movdqu -9936(%rbp), %xmm0
+ 1042 30D9FFFF
+ 1043 00f4 F30F7F85 movdqu %xmm0, -9856(%rbp)
+ 1043 80D9FFFF
+ 1044 00fc F30F6F85 movdqu -9856(%rbp), %xmm0
+ 1044 80D9FFFF
+ 1045 0104 F30F7F85 movdqu %xmm0, -9824(%rbp)
+ 1045 A0D9FFFF
+ 1046 010c 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 1046 000000
+ 1047 0113 48898598 movq %rax, -9832(%rbp)
+ 1047 D9FFFF
+ 1048 .LBB692:
+ 1049 .LBB693:
+ 1050 .LBB694:
+ 1051 .LBB695:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 1052 .loc 2 851 0
+ 1053 011a 660F6F05 movdqa vec_00(%rip), %xmm0
+ 1053 00000000
+ 1054 0122 F30F7F85 movdqu %xmm0, -9792(%rbp)
+ 1054 C0D9FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1055 .loc 2 854 0
+ 1056 012a 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 1056 00000000
+ 1057 0132 F30F6F8D movdqu -9824(%rbp), %xmm1
+ 1057 A0D9FFFF
+ 1058 013a F30F7F8D movdqu %xmm1, -9712(%rbp)
+ 1058 10DAFFFF
+ 1059 0142 F30F7F85 movdqu %xmm0, -9728(%rbp)
+ 1059 00DAFFFF
+ 1060 .LBB696:
+ 1061 .LBB697:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 1062 .loc 2 206 0
+ 1063 014a F30F6F85 movdqu -9728(%rbp), %xmm0
+ 1063 00DAFFFF
+ 1064 0152 F30F6F8D movdqu -9712(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 63
+
+
+ 1064 10DAFFFF
+ 1065 015a 660FDBC1 pand %xmm1, %xmm0
+ 1066 .LBE697:
+ 1067 .LBE696:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1068 .loc 2 854 0
+ 1069 015e F30F7F85 movdqu %xmm0, -9744(%rbp)
+ 1069 F0D9FFFF
+ 1070 0166 F30F6F85 movdqu -9824(%rbp), %xmm0
+ 1070 A0D9FFFF
+ 1071 016e F30F7F85 movdqu %xmm0, -9680(%rbp)
+ 1071 30DAFFFF
+ 1072 .LBB698:
+ 1073 .LBB699:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 1074 .loc 3 433 0
+ 1075 0176 F30F6F85 movdqu -9680(%rbp), %xmm0
+ 1075 30DAFFFF
+ 1076 017e 660F72D0 psrld $4, %xmm0
+ 1076 04
+ 1077 .LBE699:
+ 1078 .LBE698:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 1079 .loc 2 857 0
+ 1080 0183 F30F7F85 movdqu %xmm0, -9760(%rbp)
+ 1080 E0D9FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1081 .loc 2 859 0
+ 1082 018b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 1082 00000000
+ 1083 0193 F30F6F8D movdqu -9760(%rbp), %xmm1
+ 1083 E0D9FFFF
+ 1084 019b F30F7F8D movdqu %xmm1, -9648(%rbp)
+ 1084 50DAFFFF
+ 1085 01a3 F30F7F85 movdqu %xmm0, -9664(%rbp)
+ 1085 40DAFFFF
+ 1086 .LBB700:
+ 1087 .LBB701:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 1088 .loc 2 206 0
+ 1089 01ab F30F6F85 movdqu -9664(%rbp), %xmm0
+ 1089 40DAFFFF
+ 1090 01b3 F30F6F8D movdqu -9648(%rbp), %xmm1
+ 1090 50DAFFFF
+ 1091 01bb 660FDBC1 pand %xmm1, %xmm0
+ 1092 .LBE701:
+ 1093 .LBE700:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1094 .loc 2 859 0
+ 1095 01bf F30F7F85 movdqu %xmm0, -9760(%rbp)
+ 1095 E0D9FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 1096 .loc 2 866 0
+ 1097 01c7 C785BCD9 movl $0, -9796(%rbp)
+ 1097 FFFF0000
+ 1097 0000
+ 1098 01d1 E9BE0100 jmp .L4
+
GAS LISTING /tmp/ccjbMjHD.s page 64
+
+
+ 1098 00
+ 1099 .cfi_offset 3, -40
+ 1100 .cfi_offset 12, -32
+ 1101 .cfi_offset 13, -24
+ 1102 .L5:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1103 .loc 2 868 0
+ 1104 01d6 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 1104 00000000
+ 1105 01de F30F7F85 movdqu %xmm0, -9616(%rbp)
+ 1105 70DAFFFF
+ 1106 01e6 F30F6F85 movdqu -9760(%rbp), %xmm0
+ 1106 E0D9FFFF
+ 1107 01ee F30F7F85 movdqu %xmm0, -9632(%rbp)
+ 1107 60DAFFFF
+ 1108 01f6 F30F6F85 movdqu -9616(%rbp), %xmm0
+ 1108 70DAFFFF
+ 1109 01fe F30F7F85 movdqu %xmm0, -9584(%rbp)
+ 1109 90DAFFFF
+ 1110 0206 F30F6F85 movdqu -9632(%rbp), %xmm0
+ 1110 60DAFFFF
+ 1111 020e F30F7F85 movdqu %xmm0, -9600(%rbp)
+ 1111 80DAFFFF
+ 1112 .LBB702:
+ 1113 .LBB703:
+ 1114 .LBB704:
+ 1115 .LBB705:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1116 .loc 3 529 0
+ 1117 0216 F30F6F8D movdqu -9600(%rbp), %xmm1
+ 1117 80DAFFFF
+ 1118 021e F30F6F85 movdqu -9584(%rbp), %xmm0
+ 1118 90DAFFFF
+ 1119 0226 660F3800 pshufb %xmm1, %xmm0
+ 1119 C1
+ 1120 .LBE705:
+ 1121 .LBE704:
+ 1122 .LBE703:
+ 1123 .LBE702:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1124 .loc 2 868 0
+ 1125 022b F30F7F85 movdqu %xmm0, -9776(%rbp)
+ 1125 D0D9FFFF
+ 1126 0233 F30F6F85 movdqu -9744(%rbp), %xmm0
+ 1126 F0D9FFFF
+ 1127 023b F30F7F85 movdqu %xmm0, -9552(%rbp)
+ 1127 B0DAFFFF
+ 1128 0243 F30F6F85 movdqu -9776(%rbp), %xmm0
+ 1128 D0D9FFFF
+ 1129 024b F30F7F85 movdqu %xmm0, -9568(%rbp)
+ 1129 A0DAFFFF
+ 1130 .LBB706:
+ 1131 .LBB707:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 1132 .loc 2 234 0
+ 1133 0253 F30F6F85 movdqu -9568(%rbp), %xmm0
+ 1133 A0DAFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 65
+
+
+ 1134 025b F30F6F8D movdqu -9552(%rbp), %xmm1
+ 1134 B0DAFFFF
+ 1135 0263 660FEBC1 por %xmm1, %xmm0
+ 1136 .LBE707:
+ 1137 .LBE706:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 1138 .loc 2 870 0
+ 1139 0267 F30F7F85 movdqu %xmm0, -9776(%rbp)
+ 1139 D0D9FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1140 .loc 2 872 0
+ 1141 026f 8B85BCD9 mov -9796(%rbp), %eax
+ 1141 FFFF
+ 1142 0275 48C1E004 salq $4, %rax
+ 1143 0279 48038598 addq -9832(%rbp), %rax
+ 1143 D9FFFF
+ 1144 0280 660F6F00 movdqa (%rax), %xmm0
+ 1145 0284 F30F7F85 movdqu %xmm0, -9520(%rbp)
+ 1145 D0DAFFFF
+ 1146 028c F30F6F85 movdqu -9776(%rbp), %xmm0
+ 1146 D0D9FFFF
+ 1147 0294 F30F7F85 movdqu %xmm0, -9536(%rbp)
+ 1147 C0DAFFFF
+ 1148 029c F30F6F85 movdqu -9520(%rbp), %xmm0
+ 1148 D0DAFFFF
+ 1149 02a4 F30F7F85 movdqu %xmm0, -9488(%rbp)
+ 1149 F0DAFFFF
+ 1150 02ac F30F6F85 movdqu -9536(%rbp), %xmm0
+ 1150 C0DAFFFF
+ 1151 02b4 F30F7F85 movdqu %xmm0, -9504(%rbp)
+ 1151 E0DAFFFF
+ 1152 .LBB708:
+ 1153 .LBB709:
+ 1154 .LBB710:
+ 1155 .LBB711:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1156 .loc 3 529 0
+ 1157 02bc F30F6F8D movdqu -9504(%rbp), %xmm1
+ 1157 E0DAFFFF
+ 1158 02c4 F30F6F85 movdqu -9488(%rbp), %xmm0
+ 1158 F0DAFFFF
+ 1159 02cc 660F3800 pshufb %xmm1, %xmm0
+ 1159 C1
+ 1160 .LBE711:
+ 1161 .LBE710:
+ 1162 .LBE709:
+ 1163 .LBE708:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1164 .loc 2 872 0
+ 1165 02d1 F30F7F85 movdqu %xmm0, -9776(%rbp)
+ 1165 D0D9FFFF
+ 1166 02d9 F30F6F85 movdqu -9792(%rbp), %xmm0
+ 1166 C0D9FFFF
+ 1167 02e1 F30F7F85 movdqu %xmm0, -9456(%rbp)
+ 1167 10DBFFFF
+ 1168 02e9 F30F6F85 movdqu -9776(%rbp), %xmm0
+ 1168 D0D9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 66
+
+
+ 1169 02f1 F30F7F85 movdqu %xmm0, -9472(%rbp)
+ 1169 00DBFFFF
+ 1170 .LBB712:
+ 1171 .LBB713:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 1172 .loc 2 234 0
+ 1173 02f9 F30F6F85 movdqu -9472(%rbp), %xmm0
+ 1173 00DBFFFF
+ 1174 0301 F30F6F8D movdqu -9456(%rbp), %xmm1
+ 1174 10DBFFFF
+ 1175 0309 660FEBC1 por %xmm1, %xmm0
+ 1176 .LBE713:
+ 1177 .LBE712:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 1178 .loc 2 874 0
+ 1179 030d F30F7F85 movdqu %xmm0, -9792(%rbp)
+ 1179 C0D9FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1180 .loc 2 876 0
+ 1181 0315 660F6F05 movdqa vec_01(%rip), %xmm0
+ 1181 00000000
+ 1182 031d F30F6F8D movdqu -9760(%rbp), %xmm1
+ 1182 E0D9FFFF
+ 1183 0325 F30F7F8D movdqu %xmm1, -9424(%rbp)
+ 1183 30DBFFFF
+ 1184 032d F30F7F85 movdqu %xmm0, -9440(%rbp)
+ 1184 20DBFFFF
+ 1185 .LBB714:
+ 1186 .LBB715:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 1187 .loc 2 290 0
+ 1188 0335 F30F6F8D movdqu -9440(%rbp), %xmm1
+ 1188 20DBFFFF
+ 1189 033d F30F6F85 movdqu -9424(%rbp), %xmm0
+ 1189 30DBFFFF
+ 1190 0345 660FF8C1 psubb %xmm1, %xmm0
+ 1191 .LBE715:
+ 1192 .LBE714:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1193 .loc 2 876 0
+ 1194 0349 F30F7F85 movdqu %xmm0, -9760(%rbp)
+ 1194 E0D9FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1195 .loc 2 878 0
+ 1196 0351 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 1196 00000000
+ 1197 0359 F30F6F8D movdqu -9760(%rbp), %xmm1
+ 1197 E0D9FFFF
+ 1198 0361 F30F7F8D movdqu %xmm1, -9392(%rbp)
+ 1198 50DBFFFF
+ 1199 0369 F30F7F85 movdqu %xmm0, -9408(%rbp)
+ 1199 40DBFFFF
+ 1200 .LBB716:
+ 1201 .LBB717:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 1202 .loc 2 206 0
+ 1203 0371 F30F6F85 movdqu -9408(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 67
+
+
+ 1203 40DBFFFF
+ 1204 0379 F30F6F8D movdqu -9392(%rbp), %xmm1
+ 1204 50DBFFFF
+ 1205 0381 660FDBC1 pand %xmm1, %xmm0
+ 1206 .LBE717:
+ 1207 .LBE716:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1208 .loc 2 878 0
+ 1209 0385 F30F7F85 movdqu %xmm0, -9760(%rbp)
+ 1209 E0D9FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 1210 .loc 2 866 0
+ 1211 038d 8385BCD9 addl $1, -9796(%rbp)
+ 1211 FFFF01
+ 1212 .L4:
+ 1213 0394 83BDBCD9 cmpl $15, -9796(%rbp)
+ 1213 FFFF0F
+ 1214 039b 0F8635FE jbe .L5
+ 1214 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 1215 .loc 2 882 0
+ 1216 03a1 F30F6F85 movdqu -9792(%rbp), %xmm0
+ 1216 C0D9FFFF
+ 1217 .LBE695:
+ 1218 .LBE694:
+ 1219 .LBE693:
+ 1220 .LBE692:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 1221 .loc 2 1682 0
+ 1222 03a9 660F7F85 movdqa %xmm0, -11120(%rbp)
+ 1222 90D4FFFF
+ 1223 .LBB718:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 1224 .loc 2 1683 0
+ 1225 03b1 660F6F85 movdqa -11120(%rbp), %xmm0
+ 1225 90D4FFFF
+ 1226 03b9 F30F7F85 movdqu %xmm0, -10576(%rbp)
+ 1226 B0D6FFFF
+ 1227 03c1 E8000000 call KDbgWriterGet at PLT
+ 1227 00
+ 1228 03c6 4885C0 testq %rax, %rax
+ 1229 03c9 7479 je .L7
+ 1230 03cb BF010000 movl $1, %edi
+ 1230 00
+ 1231 03d0 E8000000 call KDbgCondToFlag at PLT
+ 1231 00
+ 1232 03d5 4889C6 movq %rax, %rsi
+ 1233 03d8 BF100000 movl $16, %edi
+ 1233 00
+ 1234 03dd E8000000 call KDbgTestModConds at PLT
+ 1234 00
+ 1235 03e2 84C0 testb %al, %al
+ 1236 03e4 745E je .L7
+ 1237 03e6 8B85BCD6 movl -10564(%rbp), %eax
+ 1237 FFFF
+ 1238 03ec 89C7 movl %eax, %edi
+ 1239 03ee E80DFCFF call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 68
+
+
+ 1239 FF
+ 1240 03f3 4189C5 movl %eax, %r13d
+ 1241 03f6 8B85B8D6 movl -10568(%rbp), %eax
+ 1241 FFFF
+ 1242 03fc 89C7 movl %eax, %edi
+ 1243 03fe E8FDFBFF call bswap_32
+ 1243 FF
+ 1244 0403 4189C4 movl %eax, %r12d
+ 1245 0406 8B85B4D6 movl -10572(%rbp), %eax
+ 1245 FFFF
+ 1246 040c 89C7 movl %eax, %edi
+ 1247 040e E8EDFBFF call bswap_32
+ 1247 FF
+ 1248 0413 89C3 movl %eax, %ebx
+ 1249 0415 8B85B0D6 movl -10576(%rbp), %eax
+ 1249 FFFF
+ 1250 041b 89C7 movl %eax, %edi
+ 1251 041d E8DEFBFF call bswap_32
+ 1251 FF
+ 1252 0422 4589E9 movl %r13d, %r9d
+ 1253 0425 4589E0 movl %r12d, %r8d
+ 1254 0428 89D9 movl %ebx, %ecx
+ 1255 042a 89C2 movl %eax, %edx
+ 1256 042c 488D3500 leaq .LC0(%rip), %rsi
+ 1256 000000
+ 1257 0433 488D3D00 leaq .LC1(%rip), %rdi
+ 1257 000000
+ 1258 043a B8000000 movl $0, %eax
+ 1258 00
+ 1259 043f E8000000 call KDbgMsg at PLT
+ 1259 00
+ 1260 .L7:
+ 1261 0444 660F6F85 movdqa -11120(%rbp), %xmm0
+ 1261 90D4FFFF
+ 1262 044c F30F7F85 movdqu %xmm0, -9376(%rbp)
+ 1262 60DBFFFF
+ 1263 .LBE718:
+ 1264 .LBB719:
+ 1265 .LBB720:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1266 .loc 2 667 0
+ 1267 0454 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 1267 00000000
+ 1268 045c F30F6F8D movdqu -9376(%rbp), %xmm1
+ 1268 60DBFFFF
+ 1269 0464 F30F7F8D movdqu %xmm1, -9344(%rbp)
+ 1269 80DBFFFF
+ 1270 046c F30F7F85 movdqu %xmm0, -9360(%rbp)
+ 1270 70DBFFFF
+ 1271 0474 F30F6F85 movdqu -9344(%rbp), %xmm0
+ 1271 80DBFFFF
+ 1272 047c F30F7F85 movdqu %xmm0, -9312(%rbp)
+ 1272 A0DBFFFF
+ 1273 0484 F30F6F85 movdqu -9360(%rbp), %xmm0
+ 1273 70DBFFFF
+ 1274 048c F30F7F85 movdqu %xmm0, -9328(%rbp)
+ 1274 90DBFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 69
+
+
+ 1275 .LBB721:
+ 1276 .LBB722:
+ 1277 .LBB723:
+ 1278 .LBB724:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1279 .loc 3 529 0
+ 1280 0494 F30F6F8D movdqu -9328(%rbp), %xmm1
+ 1280 90DBFFFF
+ 1281 049c F30F6F85 movdqu -9312(%rbp), %xmm0
+ 1281 A0DBFFFF
+ 1282 04a4 660F3800 pshufb %xmm1, %xmm0
+ 1282 C1
+ 1283 .LBE724:
+ 1284 .LBE723:
+ 1285 .LBE722:
+ 1286 .LBE721:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1287 .loc 2 667 0
+ 1288 04a9 F30F7F85 movdqu %xmm0, -9376(%rbp)
+ 1288 60DBFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1289 .loc 2 668 0
+ 1290 04b1 F30F6F85 movdqu -9376(%rbp), %xmm0
+ 1290 60DBFFFF
+ 1291 .LBE720:
+ 1292 .LBE719:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 1293 .loc 2 1684 0
+ 1294 04b9 660F7F85 movdqa %xmm0, -11120(%rbp)
+ 1294 90D4FFFF
+ 1295 .LBB725:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 1296 .loc 2 1685 0
+ 1297 04c1 660F6F85 movdqa -11120(%rbp), %xmm0
+ 1297 90D4FFFF
+ 1298 04c9 F30F7F85 movdqu %xmm0, -10592(%rbp)
+ 1298 A0D6FFFF
+ 1299 04d1 E8000000 call KDbgWriterGet at PLT
+ 1299 00
+ 1300 04d6 4885C0 testq %rax, %rax
+ 1301 04d9 7479 je .L9
+ 1302 04db BF010000 movl $1, %edi
+ 1302 00
+ 1303 04e0 E8000000 call KDbgCondToFlag at PLT
+ 1303 00
+ 1304 04e5 4889C6 movq %rax, %rsi
+ 1305 04e8 BF100000 movl $16, %edi
+ 1305 00
+ 1306 04ed E8000000 call KDbgTestModConds at PLT
+ 1306 00
+ 1307 04f2 84C0 testb %al, %al
+ 1308 04f4 745E je .L9
+ 1309 04f6 8B85ACD6 movl -10580(%rbp), %eax
+ 1309 FFFF
+ 1310 04fc 89C7 movl %eax, %edi
+ 1311 04fe E8FDFAFF call bswap_32
+ 1311 FF
+
GAS LISTING /tmp/ccjbMjHD.s page 70
+
+
+ 1312 0503 4189C5 movl %eax, %r13d
+ 1313 0506 8B85A8D6 movl -10584(%rbp), %eax
+ 1313 FFFF
+ 1314 050c 89C7 movl %eax, %edi
+ 1315 050e E8EDFAFF call bswap_32
+ 1315 FF
+ 1316 0513 4189C4 movl %eax, %r12d
+ 1317 0516 8B85A4D6 movl -10588(%rbp), %eax
+ 1317 FFFF
+ 1318 051c 89C7 movl %eax, %edi
+ 1319 051e E8DDFAFF call bswap_32
+ 1319 FF
+ 1320 0523 89C3 movl %eax, %ebx
+ 1321 0525 8B85A0D6 movl -10592(%rbp), %eax
+ 1321 FFFF
+ 1322 052b 89C7 movl %eax, %edi
+ 1323 052d E8CEFAFF call bswap_32
+ 1323 FF
+ 1324 0532 4589E9 movl %r13d, %r9d
+ 1325 0535 4589E0 movl %r12d, %r8d
+ 1326 0538 89D9 movl %ebx, %ecx
+ 1327 053a 89C2 movl %eax, %edx
+ 1328 053c 488D3500 leaq .LC2(%rip), %rsi
+ 1328 000000
+ 1329 0543 488D3D00 leaq .LC1(%rip), %rdi
+ 1329 000000
+ 1330 054a B8000000 movl $0, %eax
+ 1330 00
+ 1331 054f E8000000 call KDbgMsg at PLT
+ 1331 00
+ 1332 .L9:
+ 1333 0554 660F6F85 movdqa -11120(%rbp), %xmm0
+ 1333 90D4FFFF
+ 1334 055c F30F7F85 movdqu %xmm0, -9280(%rbp)
+ 1334 C0DBFFFF
+ 1335 0564 660F6F85 movdqa -11104(%rbp), %xmm0
+ 1335 A0D4FFFF
+ 1336 056c F30F7F85 movdqu %xmm0, -9296(%rbp)
+ 1336 B0DBFFFF
+ 1337 .LBE725:
+ 1338 .LBB726:
+ 1339 .LBB727:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 1340 .loc 2 178 0
+ 1341 0574 F30F6F85 movdqu -9296(%rbp), %xmm0
+ 1341 B0DBFFFF
+ 1342 057c F30F6F8D movdqu -9280(%rbp), %xmm1
+ 1342 C0DBFFFF
+ 1343 0584 660FEFC1 pxor %xmm1, %xmm0
+ 1344 .LBE727:
+ 1345 .LBE726:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 1346 .loc 2 1686 0
+ 1347 0588 660F7F85 movdqa %xmm0, -11120(%rbp)
+ 1347 90D4FFFF
+ 1348 .LBB728:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+
GAS LISTING /tmp/ccjbMjHD.s page 71
+
+
+ 1349 .loc 2 1687 0
+ 1350 0590 660F6F85 movdqa -11120(%rbp), %xmm0
+ 1350 90D4FFFF
+ 1351 0598 F30F7F85 movdqu %xmm0, -10608(%rbp)
+ 1351 90D6FFFF
+ 1352 05a0 E8000000 call KDbgWriterGet at PLT
+ 1352 00
+ 1353 05a5 4885C0 testq %rax, %rax
+ 1354 05a8 7479 je .L11
+ 1355 05aa BF010000 movl $1, %edi
+ 1355 00
+ 1356 05af E8000000 call KDbgCondToFlag at PLT
+ 1356 00
+ 1357 05b4 4889C6 movq %rax, %rsi
+ 1358 05b7 BF100000 movl $16, %edi
+ 1358 00
+ 1359 05bc E8000000 call KDbgTestModConds at PLT
+ 1359 00
+ 1360 05c1 84C0 testb %al, %al
+ 1361 05c3 745E je .L11
+ 1362 05c5 8B859CD6 movl -10596(%rbp), %eax
+ 1362 FFFF
+ 1363 05cb 89C7 movl %eax, %edi
+ 1364 05cd E82EFAFF call bswap_32
+ 1364 FF
+ 1365 05d2 4189C5 movl %eax, %r13d
+ 1366 05d5 8B8598D6 movl -10600(%rbp), %eax
+ 1366 FFFF
+ 1367 05db 89C7 movl %eax, %edi
+ 1368 05dd E81EFAFF call bswap_32
+ 1368 FF
+ 1369 05e2 4189C4 movl %eax, %r12d
+ 1370 05e5 8B8594D6 movl -10604(%rbp), %eax
+ 1370 FFFF
+ 1371 05eb 89C7 movl %eax, %edi
+ 1372 05ed E80EFAFF call bswap_32
+ 1372 FF
+ 1373 05f2 89C3 movl %eax, %ebx
+ 1374 05f4 8B8590D6 movl -10608(%rbp), %eax
+ 1374 FFFF
+ 1375 05fa 89C7 movl %eax, %edi
+ 1376 05fc E8FFF9FF call bswap_32
+ 1376 FF
+ 1377 0601 4589E9 movl %r13d, %r9d
+ 1378 0604 4589E0 movl %r12d, %r8d
+ 1379 0607 89D9 movl %ebx, %ecx
+ 1380 0609 89C2 movl %eax, %edx
+ 1381 060b 488D3500 leaq .LC3(%rip), %rsi
+ 1381 000000
+ 1382 0612 488D3D00 leaq .LC1(%rip), %rdi
+ 1382 000000
+ 1383 0619 B8000000 movl $0, %eax
+ 1383 00
+ 1384 061e E8000000 call KDbgMsg at PLT
+ 1384 00
+ 1385 .L11:
+ 1386 0623 660F6F85 movdqa -11120(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 72
+
+
+ 1386 90D4FFFF
+ 1387 062b F30F7F85 movdqu %xmm0, -9264(%rbp)
+ 1387 D0DBFFFF
+ 1388 0633 F30F6F85 movdqu -9264(%rbp), %xmm0
+ 1388 D0DBFFFF
+ 1389 063b F30F7F85 movdqu %xmm0, -9232(%rbp)
+ 1389 F0DBFFFF
+ 1390 .LBE728:
+ 1391 .LBB729:
+ 1392 .LBB730:
+ 1393 .LBB731:
+ 1394 .LBB732:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1395 .loc 3 450 0
+ 1396 0643 F30F6F85 movdqu -9232(%rbp), %xmm0
+ 1396 F0DBFFFF
+ 1397 064b 660F70C0 pshufd $255, %xmm0, %xmm0
+ 1397 FF
+ 1398 .LBE732:
+ 1399 .LBE731:
+ 1400 .LBE730:
+ 1401 .LBE729:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 1402 .loc 2 1688 0
+ 1403 0650 660F7F85 movdqa %xmm0, -11120(%rbp)
+ 1403 90D4FFFF
+ 1404 .LBB733:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 1405 .loc 2 1689 0
+ 1406 0658 660F6F85 movdqa -11120(%rbp), %xmm0
+ 1406 90D4FFFF
+ 1407 0660 F30F7F85 movdqu %xmm0, -10624(%rbp)
+ 1407 80D6FFFF
+ 1408 0668 E8000000 call KDbgWriterGet at PLT
+ 1408 00
+ 1409 066d 4885C0 testq %rax, %rax
+ 1410 0670 7479 je .L13
+ 1411 0672 BF010000 movl $1, %edi
+ 1411 00
+ 1412 0677 E8000000 call KDbgCondToFlag at PLT
+ 1412 00
+ 1413 067c 4889C6 movq %rax, %rsi
+ 1414 067f BF100000 movl $16, %edi
+ 1414 00
+ 1415 0684 E8000000 call KDbgTestModConds at PLT
+ 1415 00
+ 1416 0689 84C0 testb %al, %al
+ 1417 068b 745E je .L13
+ 1418 068d 8B858CD6 movl -10612(%rbp), %eax
+ 1418 FFFF
+ 1419 0693 89C7 movl %eax, %edi
+ 1420 0695 E866F9FF call bswap_32
+ 1420 FF
+ 1421 069a 4189C5 movl %eax, %r13d
+ 1422 069d 8B8588D6 movl -10616(%rbp), %eax
+ 1422 FFFF
+ 1423 06a3 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 73
+
+
+ 1424 06a5 E856F9FF call bswap_32
+ 1424 FF
+ 1425 06aa 4189C4 movl %eax, %r12d
+ 1426 06ad 8B8584D6 movl -10620(%rbp), %eax
+ 1426 FFFF
+ 1427 06b3 89C7 movl %eax, %edi
+ 1428 06b5 E846F9FF call bswap_32
+ 1428 FF
+ 1429 06ba 89C3 movl %eax, %ebx
+ 1430 06bc 8B8580D6 movl -10624(%rbp), %eax
+ 1430 FFFF
+ 1431 06c2 89C7 movl %eax, %edi
+ 1432 06c4 E837F9FF call bswap_32
+ 1432 FF
+ 1433 06c9 4589E9 movl %r13d, %r9d
+ 1434 06cc 4589E0 movl %r12d, %r8d
+ 1435 06cf 89D9 movl %ebx, %ecx
+ 1436 06d1 89C2 movl %eax, %edx
+ 1437 06d3 488D3500 leaq .LC4(%rip), %rsi
+ 1437 000000
+ 1438 06da 488D3D00 leaq .LC1(%rip), %rdi
+ 1438 000000
+ 1439 06e1 B8000000 movl $0, %eax
+ 1439 00
+ 1440 06e6 E8000000 call KDbgMsg at PLT
+ 1440 00
+ 1441 .L13:
+ 1442 .LBE733:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 1443 .loc 2 1690 0
+ 1444 06eb 660F6F85 movdqa -11120(%rbp), %xmm0
+ 1444 90D4FFFF
+ 1445 .LBE687:
+ 1446 .LBE686:
+1737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE128(rcon,offset) \
+1739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** kgastate = AESBCMEMBER(AesKeyGenAssistColumn3) (state, rcon); \
+1740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftXorColumns) (state); \
+1741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= kgastate; \
+1742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[offset] = state
+1743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x01,1);
+ 1447 .loc 2 1744 0
+ 1448 06f3 F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 1448 10D9FFFF
+ 1449 06fb F30F6F85 movdqu -9984(%rbp), %xmm0
+ 1449 00D9FFFF
+ 1450 0703 F30F7F85 movdqu %xmm0, -9216(%rbp)
+ 1450 00DCFFFF
+ 1451 .LBB734:
+ 1452 .LBB735:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 1453 .loc 2 1565 0
+ 1454 070b F30F6F85 movdqu -9216(%rbp), %xmm0
+ 1454 00DCFFFF
+ 1455 0713 660F7F85 movdqa %xmm0, -11088(%rbp)
+ 1455 B0D4FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 74
+
+
+ 1456 071b 660F6F85 movdqa -11088(%rbp), %xmm0
+ 1456 B0D4FFFF
+ 1457 0723 F30F7F85 movdqu %xmm0, -9200(%rbp)
+ 1457 10DCFFFF
+ 1458 .LBB736:
+ 1459 .LBB737:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1460 .loc 2 1278 0
+ 1461 072b 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 1461 00000000
+ 1462 0733 F30F6F8D movdqu -9200(%rbp), %xmm1
+ 1462 10DCFFFF
+ 1463 073b F30F7F8D movdqu %xmm1, -9168(%rbp)
+ 1463 30DCFFFF
+ 1464 0743 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 1464 20DCFFFF
+ 1465 074b F30F6F85 movdqu -9168(%rbp), %xmm0
+ 1465 30DCFFFF
+ 1466 0753 F30F7F85 movdqu %xmm0, -9136(%rbp)
+ 1466 50DCFFFF
+ 1467 075b F30F6F85 movdqu -9184(%rbp), %xmm0
+ 1467 20DCFFFF
+ 1468 0763 F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 1468 40DCFFFF
+ 1469 .LBB738:
+ 1470 .LBB739:
+ 1471 .LBB740:
+ 1472 .LBB741:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1473 .loc 3 529 0
+ 1474 076b F30F6F8D movdqu -9152(%rbp), %xmm1
+ 1474 40DCFFFF
+ 1475 0773 F30F6F85 movdqu -9136(%rbp), %xmm0
+ 1475 50DCFFFF
+ 1476 077b 660F3800 pshufb %xmm1, %xmm0
+ 1476 C1
+ 1477 .LBE741:
+ 1478 .LBE740:
+ 1479 .LBE739:
+ 1480 .LBE738:
+ 1481 .LBE737:
+ 1482 .LBE736:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1483 .loc 2 1567 0
+ 1484 0780 660F7F85 movdqa %xmm0, -11088(%rbp)
+ 1484 B0D4FFFF
+ 1485 0788 660F6F85 movdqa -11088(%rbp), %xmm0
+ 1485 B0D4FFFF
+ 1486 0790 660FEF85 pxor -9216(%rbp), %xmm0
+ 1486 00DCFFFF
+ 1487 0798 F30F7F85 movdqu %xmm0, -9216(%rbp)
+ 1487 00DCFFFF
+ 1488 07a0 660F6F85 movdqa -11088(%rbp), %xmm0
+ 1488 B0D4FFFF
+ 1489 07a8 F30F7F85 movdqu %xmm0, -9120(%rbp)
+ 1489 60DCFFFF
+ 1490 .LBB742:
+
GAS LISTING /tmp/ccjbMjHD.s page 75
+
+
+ 1491 .LBB743:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1492 .loc 2 1278 0
+ 1493 07b0 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 1493 00000000
+ 1494 07b8 F30F6F8D movdqu -9120(%rbp), %xmm1
+ 1494 60DCFFFF
+ 1495 07c0 F30F7F8D movdqu %xmm1, -9088(%rbp)
+ 1495 80DCFFFF
+ 1496 07c8 F30F7F85 movdqu %xmm0, -9104(%rbp)
+ 1496 70DCFFFF
+ 1497 07d0 F30F6F85 movdqu -9088(%rbp), %xmm0
+ 1497 80DCFFFF
+ 1498 07d8 F30F7F85 movdqu %xmm0, -9056(%rbp)
+ 1498 A0DCFFFF
+ 1499 07e0 F30F6F85 movdqu -9104(%rbp), %xmm0
+ 1499 70DCFFFF
+ 1500 07e8 F30F7F85 movdqu %xmm0, -9072(%rbp)
+ 1500 90DCFFFF
+ 1501 .LBB744:
+ 1502 .LBB745:
+ 1503 .LBB746:
+ 1504 .LBB747:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1505 .loc 3 529 0
+ 1506 07f0 F30F6F8D movdqu -9072(%rbp), %xmm1
+ 1506 90DCFFFF
+ 1507 07f8 F30F6F85 movdqu -9056(%rbp), %xmm0
+ 1507 A0DCFFFF
+ 1508 0800 660F3800 pshufb %xmm1, %xmm0
+ 1508 C1
+ 1509 .LBE747:
+ 1510 .LBE746:
+ 1511 .LBE745:
+ 1512 .LBE744:
+ 1513 .LBE743:
+ 1514 .LBE742:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1515 .loc 2 1568 0
+ 1516 0805 660F7F85 movdqa %xmm0, -11088(%rbp)
+ 1516 B0D4FFFF
+ 1517 080d 660F6F85 movdqa -11088(%rbp), %xmm0
+ 1517 B0D4FFFF
+ 1518 0815 660FEF85 pxor -9216(%rbp), %xmm0
+ 1518 00DCFFFF
+ 1519 081d F30F7F85 movdqu %xmm0, -9216(%rbp)
+ 1519 00DCFFFF
+ 1520 0825 660F6F85 movdqa -11088(%rbp), %xmm0
+ 1520 B0D4FFFF
+ 1521 082d F30F7F85 movdqu %xmm0, -9040(%rbp)
+ 1521 B0DCFFFF
+ 1522 .LBB748:
+ 1523 .LBB749:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1524 .loc 2 1278 0
+ 1525 0835 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 1525 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 76
+
+
+ 1526 083d F30F6F8D movdqu -9040(%rbp), %xmm1
+ 1526 B0DCFFFF
+ 1527 0845 F30F7F8D movdqu %xmm1, -9008(%rbp)
+ 1527 D0DCFFFF
+ 1528 084d F30F7F85 movdqu %xmm0, -9024(%rbp)
+ 1528 C0DCFFFF
+ 1529 0855 F30F6F85 movdqu -9008(%rbp), %xmm0
+ 1529 D0DCFFFF
+ 1530 085d F30F7F85 movdqu %xmm0, -8976(%rbp)
+ 1530 F0DCFFFF
+ 1531 0865 F30F6F85 movdqu -9024(%rbp), %xmm0
+ 1531 C0DCFFFF
+ 1532 086d F30F7F85 movdqu %xmm0, -8992(%rbp)
+ 1532 E0DCFFFF
+ 1533 .LBB750:
+ 1534 .LBB751:
+ 1535 .LBB752:
+ 1536 .LBB753:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1537 .loc 3 529 0
+ 1538 0875 F30F6F8D movdqu -8992(%rbp), %xmm1
+ 1538 E0DCFFFF
+ 1539 087d F30F6F85 movdqu -8976(%rbp), %xmm0
+ 1539 F0DCFFFF
+ 1540 0885 660F3800 pshufb %xmm1, %xmm0
+ 1540 C1
+ 1541 .LBE753:
+ 1542 .LBE752:
+ 1543 .LBE751:
+ 1544 .LBE750:
+ 1545 .LBE749:
+ 1546 .LBE748:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1547 .loc 2 1569 0
+ 1548 088a 660F7F85 movdqa %xmm0, -11088(%rbp)
+ 1548 B0D4FFFF
+ 1549 0892 660F6F85 movdqa -11088(%rbp), %xmm0
+ 1549 B0D4FFFF
+ 1550 089a 660FEF85 pxor -9216(%rbp), %xmm0
+ 1550 00DCFFFF
+ 1551 08a2 F30F7F85 movdqu %xmm0, -9216(%rbp)
+ 1551 00DCFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1552 .loc 2 1571 0
+ 1553 08aa F30F6F85 movdqu -9216(%rbp), %xmm0
+ 1553 00DCFFFF
+ 1554 .LBE735:
+ 1555 .LBE734:
+ 1556 .loc 2 1744 0
+ 1557 08b2 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 1557 00D9FFFF
+ 1558 08ba F30F6F85 movdqu -9968(%rbp), %xmm0
+ 1558 10D9FFFF
+ 1559 08c2 F30F6F8D movdqu -9984(%rbp), %xmm1
+ 1559 00D9FFFF
+ 1560 08ca 660FEFC1 pxor %xmm1, %xmm0
+ 1561 08ce F30F7F85 movdqu %xmm0, -9984(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 77
+
+
+ 1561 00D9FFFF
+ 1562 08d6 488B8578 movq -10632(%rbp), %rax
+ 1562 D6FFFF
+ 1563 08dd 4883C010 addq $16, %rax
+ 1564 08e1 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 1564 00D9FFFF
+ 1565 08e9 F30F7F00 movdqu %xmm0, (%rax)
+ 1566 08ed F30F6F85 movdqu -9984(%rbp), %xmm0
+ 1566 00D9FFFF
+ 1567 08f5 F30F7F85 movdqu %xmm0, -8944(%rbp)
+ 1567 10DDFFFF
+ 1568 .LBB754:
+ 1569 .LBB755:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1570 .loc 2 1681 0
+ 1571 08fd B8020000 movl $2, %eax
+ 1571 00
+ 1572 0902 660F6F05 movdqa vec_00(%rip), %xmm0
+ 1572 00000000
+ 1573 090a F30F7F85 movdqu %xmm0, -8912(%rbp)
+ 1573 30DDFFFF
+ 1574 0912 89852CDD movl %eax, -8916(%rbp)
+ 1574 FFFF
+ 1575 0918 F30F6F85 movdqu -8912(%rbp), %xmm0
+ 1575 30DDFFFF
+ 1576 0920 F30F7F85 movdqu %xmm0, -8880(%rbp)
+ 1576 50DDFFFF
+ 1577 0928 8B852CDD movl -8916(%rbp), %eax
+ 1577 FFFF
+ 1578 092e 89854CDD movl %eax, -8884(%rbp)
+ 1578 FFFF
+ 1579 .LBB756:
+ 1580 .LBB757:
+ 1581 .LBB758:
+ 1582 .LBB759:
+ 1583 .loc 3 598 0
+ 1584 0934 8B854CDD movl -8884(%rbp), %eax
+ 1584 FFFF
+ 1585 093a F30F6F85 movdqu -8880(%rbp), %xmm0
+ 1585 50DDFFFF
+ 1586 0942 660F3A22 pinsrd $3, %eax, %xmm0
+ 1586 C003
+ 1587 .LBE759:
+ 1588 .LBE758:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 1589 .loc 2 519 0
+ 1590 0948 F30F7F85 movdqu %xmm0, -8912(%rbp)
+ 1590 30DDFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1591 .loc 2 526 0
+ 1592 0950 F30F6F85 movdqu -8912(%rbp), %xmm0
+ 1592 30DDFFFF
+ 1593 .LBE757:
+ 1594 .LBE756:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1595 .loc 2 1681 0
+ 1596 0958 660F7F85 movdqa %xmm0, -11056(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 78
+
+
+ 1596 D0D4FFFF
+ 1597 0960 F30F6F85 movdqu -8944(%rbp), %xmm0
+ 1597 10DDFFFF
+ 1598 0968 F30F7F85 movdqu %xmm0, -8864(%rbp)
+ 1598 60DDFFFF
+ 1599 0970 F30F6F85 movdqu -8864(%rbp), %xmm0
+ 1599 60DDFFFF
+ 1600 0978 F30F7F85 movdqu %xmm0, -8832(%rbp)
+ 1600 80DDFFFF
+ 1601 0980 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 1601 000000
+ 1602 0987 48898578 movq %rax, -8840(%rbp)
+ 1602 DDFFFF
+ 1603 .LBB760:
+ 1604 .LBB761:
+ 1605 .LBB762:
+ 1606 .LBB763:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 1607 .loc 2 851 0
+ 1608 098e 660F6F05 movdqa vec_00(%rip), %xmm0
+ 1608 00000000
+ 1609 0996 F30F7F85 movdqu %xmm0, -8800(%rbp)
+ 1609 A0DDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1610 .loc 2 854 0
+ 1611 099e 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 1611 00000000
+ 1612 09a6 F30F6F8D movdqu -8832(%rbp), %xmm1
+ 1612 80DDFFFF
+ 1613 09ae F30F7F8D movdqu %xmm1, -8720(%rbp)
+ 1613 F0DDFFFF
+ 1614 09b6 F30F7F85 movdqu %xmm0, -8736(%rbp)
+ 1614 E0DDFFFF
+ 1615 .LBB764:
+ 1616 .LBB765:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 1617 .loc 2 206 0
+ 1618 09be F30F6F85 movdqu -8736(%rbp), %xmm0
+ 1618 E0DDFFFF
+ 1619 09c6 F30F6F8D movdqu -8720(%rbp), %xmm1
+ 1619 F0DDFFFF
+ 1620 09ce 660FDBC1 pand %xmm1, %xmm0
+ 1621 .LBE765:
+ 1622 .LBE764:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1623 .loc 2 854 0
+ 1624 09d2 F30F7F85 movdqu %xmm0, -8752(%rbp)
+ 1624 D0DDFFFF
+ 1625 09da F30F6F85 movdqu -8832(%rbp), %xmm0
+ 1625 80DDFFFF
+ 1626 09e2 F30F7F85 movdqu %xmm0, -8688(%rbp)
+ 1626 10DEFFFF
+ 1627 .LBB766:
+ 1628 .LBB767:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 1629 .loc 3 433 0
+ 1630 09ea F30F6F85 movdqu -8688(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 79
+
+
+ 1630 10DEFFFF
+ 1631 09f2 660F72D0 psrld $4, %xmm0
+ 1631 04
+ 1632 .LBE767:
+ 1633 .LBE766:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 1634 .loc 2 857 0
+ 1635 09f7 F30F7F85 movdqu %xmm0, -8768(%rbp)
+ 1635 C0DDFFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1636 .loc 2 859 0
+ 1637 09ff 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 1637 00000000
+ 1638 0a07 F30F6F8D movdqu -8768(%rbp), %xmm1
+ 1638 C0DDFFFF
+ 1639 0a0f F30F7F8D movdqu %xmm1, -8656(%rbp)
+ 1639 30DEFFFF
+ 1640 0a17 F30F7F85 movdqu %xmm0, -8672(%rbp)
+ 1640 20DEFFFF
+ 1641 .LBB768:
+ 1642 .LBB769:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 1643 .loc 2 206 0
+ 1644 0a1f F30F6F85 movdqu -8672(%rbp), %xmm0
+ 1644 20DEFFFF
+ 1645 0a27 F30F6F8D movdqu -8656(%rbp), %xmm1
+ 1645 30DEFFFF
+ 1646 0a2f 660FDBC1 pand %xmm1, %xmm0
+ 1647 .LBE769:
+ 1648 .LBE768:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1649 .loc 2 859 0
+ 1650 0a33 F30F7F85 movdqu %xmm0, -8768(%rbp)
+ 1650 C0DDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 1651 .loc 2 866 0
+ 1652 0a3b C7859CDD movl $0, -8804(%rbp)
+ 1652 FFFF0000
+ 1652 0000
+ 1653 0a45 E9BE0100 jmp .L14
+ 1653 00
+ 1654 .L15:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1655 .loc 2 868 0
+ 1656 0a4a 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 1656 00000000
+ 1657 0a52 F30F7F85 movdqu %xmm0, -8624(%rbp)
+ 1657 50DEFFFF
+ 1658 0a5a F30F6F85 movdqu -8768(%rbp), %xmm0
+ 1658 C0DDFFFF
+ 1659 0a62 F30F7F85 movdqu %xmm0, -8640(%rbp)
+ 1659 40DEFFFF
+ 1660 0a6a F30F6F85 movdqu -8624(%rbp), %xmm0
+ 1660 50DEFFFF
+ 1661 0a72 F30F7F85 movdqu %xmm0, -8592(%rbp)
+ 1661 70DEFFFF
+ 1662 0a7a F30F6F85 movdqu -8640(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 80
+
+
+ 1662 40DEFFFF
+ 1663 0a82 F30F7F85 movdqu %xmm0, -8608(%rbp)
+ 1663 60DEFFFF
+ 1664 .LBB770:
+ 1665 .LBB771:
+ 1666 .LBB772:
+ 1667 .LBB773:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1668 .loc 3 529 0
+ 1669 0a8a F30F6F8D movdqu -8608(%rbp), %xmm1
+ 1669 60DEFFFF
+ 1670 0a92 F30F6F85 movdqu -8592(%rbp), %xmm0
+ 1670 70DEFFFF
+ 1671 0a9a 660F3800 pshufb %xmm1, %xmm0
+ 1671 C1
+ 1672 .LBE773:
+ 1673 .LBE772:
+ 1674 .LBE771:
+ 1675 .LBE770:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1676 .loc 2 868 0
+ 1677 0a9f F30F7F85 movdqu %xmm0, -8784(%rbp)
+ 1677 B0DDFFFF
+ 1678 0aa7 F30F6F85 movdqu -8752(%rbp), %xmm0
+ 1678 D0DDFFFF
+ 1679 0aaf F30F7F85 movdqu %xmm0, -8560(%rbp)
+ 1679 90DEFFFF
+ 1680 0ab7 F30F6F85 movdqu -8784(%rbp), %xmm0
+ 1680 B0DDFFFF
+ 1681 0abf F30F7F85 movdqu %xmm0, -8576(%rbp)
+ 1681 80DEFFFF
+ 1682 .LBB774:
+ 1683 .LBB775:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 1684 .loc 2 234 0
+ 1685 0ac7 F30F6F85 movdqu -8576(%rbp), %xmm0
+ 1685 80DEFFFF
+ 1686 0acf F30F6F8D movdqu -8560(%rbp), %xmm1
+ 1686 90DEFFFF
+ 1687 0ad7 660FEBC1 por %xmm1, %xmm0
+ 1688 .LBE775:
+ 1689 .LBE774:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 1690 .loc 2 870 0
+ 1691 0adb F30F7F85 movdqu %xmm0, -8784(%rbp)
+ 1691 B0DDFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1692 .loc 2 872 0
+ 1693 0ae3 8B859CDD mov -8804(%rbp), %eax
+ 1693 FFFF
+ 1694 0ae9 48C1E004 salq $4, %rax
+ 1695 0aed 48038578 addq -8840(%rbp), %rax
+ 1695 DDFFFF
+ 1696 0af4 660F6F00 movdqa (%rax), %xmm0
+ 1697 0af8 F30F7F85 movdqu %xmm0, -8528(%rbp)
+ 1697 B0DEFFFF
+ 1698 0b00 F30F6F85 movdqu -8784(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 81
+
+
+ 1698 B0DDFFFF
+ 1699 0b08 F30F7F85 movdqu %xmm0, -8544(%rbp)
+ 1699 A0DEFFFF
+ 1700 0b10 F30F6F85 movdqu -8528(%rbp), %xmm0
+ 1700 B0DEFFFF
+ 1701 0b18 F30F7F85 movdqu %xmm0, -8496(%rbp)
+ 1701 D0DEFFFF
+ 1702 0b20 F30F6F85 movdqu -8544(%rbp), %xmm0
+ 1702 A0DEFFFF
+ 1703 0b28 F30F7F85 movdqu %xmm0, -8512(%rbp)
+ 1703 C0DEFFFF
+ 1704 .LBB776:
+ 1705 .LBB777:
+ 1706 .LBB778:
+ 1707 .LBB779:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1708 .loc 3 529 0
+ 1709 0b30 F30F6F8D movdqu -8512(%rbp), %xmm1
+ 1709 C0DEFFFF
+ 1710 0b38 F30F6F85 movdqu -8496(%rbp), %xmm0
+ 1710 D0DEFFFF
+ 1711 0b40 660F3800 pshufb %xmm1, %xmm0
+ 1711 C1
+ 1712 .LBE779:
+ 1713 .LBE778:
+ 1714 .LBE777:
+ 1715 .LBE776:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1716 .loc 2 872 0
+ 1717 0b45 F30F7F85 movdqu %xmm0, -8784(%rbp)
+ 1717 B0DDFFFF
+ 1718 0b4d F30F6F85 movdqu -8800(%rbp), %xmm0
+ 1718 A0DDFFFF
+ 1719 0b55 F30F7F85 movdqu %xmm0, -8464(%rbp)
+ 1719 F0DEFFFF
+ 1720 0b5d F30F6F85 movdqu -8784(%rbp), %xmm0
+ 1720 B0DDFFFF
+ 1721 0b65 F30F7F85 movdqu %xmm0, -8480(%rbp)
+ 1721 E0DEFFFF
+ 1722 .LBB780:
+ 1723 .LBB781:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 1724 .loc 2 234 0
+ 1725 0b6d F30F6F85 movdqu -8480(%rbp), %xmm0
+ 1725 E0DEFFFF
+ 1726 0b75 F30F6F8D movdqu -8464(%rbp), %xmm1
+ 1726 F0DEFFFF
+ 1727 0b7d 660FEBC1 por %xmm1, %xmm0
+ 1728 .LBE781:
+ 1729 .LBE780:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 1730 .loc 2 874 0
+ 1731 0b81 F30F7F85 movdqu %xmm0, -8800(%rbp)
+ 1731 A0DDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1732 .loc 2 876 0
+ 1733 0b89 660F6F05 movdqa vec_01(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 82
+
+
+ 1733 00000000
+ 1734 0b91 F30F6F8D movdqu -8768(%rbp), %xmm1
+ 1734 C0DDFFFF
+ 1735 0b99 F30F7F8D movdqu %xmm1, -8432(%rbp)
+ 1735 10DFFFFF
+ 1736 0ba1 F30F7F85 movdqu %xmm0, -8448(%rbp)
+ 1736 00DFFFFF
+ 1737 .LBB782:
+ 1738 .LBB783:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 1739 .loc 2 290 0
+ 1740 0ba9 F30F6F8D movdqu -8448(%rbp), %xmm1
+ 1740 00DFFFFF
+ 1741 0bb1 F30F6F85 movdqu -8432(%rbp), %xmm0
+ 1741 10DFFFFF
+ 1742 0bb9 660FF8C1 psubb %xmm1, %xmm0
+ 1743 .LBE783:
+ 1744 .LBE782:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1745 .loc 2 876 0
+ 1746 0bbd F30F7F85 movdqu %xmm0, -8768(%rbp)
+ 1746 C0DDFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1747 .loc 2 878 0
+ 1748 0bc5 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 1748 00000000
+ 1749 0bcd F30F6F8D movdqu -8768(%rbp), %xmm1
+ 1749 C0DDFFFF
+ 1750 0bd5 F30F7F8D movdqu %xmm1, -8400(%rbp)
+ 1750 30DFFFFF
+ 1751 0bdd F30F7F85 movdqu %xmm0, -8416(%rbp)
+ 1751 20DFFFFF
+ 1752 .LBB784:
+ 1753 .LBB785:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 1754 .loc 2 206 0
+ 1755 0be5 F30F6F85 movdqu -8416(%rbp), %xmm0
+ 1755 20DFFFFF
+ 1756 0bed F30F6F8D movdqu -8400(%rbp), %xmm1
+ 1756 30DFFFFF
+ 1757 0bf5 660FDBC1 pand %xmm1, %xmm0
+ 1758 .LBE785:
+ 1759 .LBE784:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1760 .loc 2 878 0
+ 1761 0bf9 F30F7F85 movdqu %xmm0, -8768(%rbp)
+ 1761 C0DDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 1762 .loc 2 866 0
+ 1763 0c01 83859CDD addl $1, -8804(%rbp)
+ 1763 FFFF01
+ 1764 .L14:
+ 1765 0c08 83BD9CDD cmpl $15, -8804(%rbp)
+ 1765 FFFF0F
+ 1766 0c0f 0F8635FE jbe .L15
+ 1766 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+
GAS LISTING /tmp/ccjbMjHD.s page 83
+
+
+ 1767 .loc 2 882 0
+ 1768 0c15 F30F6F85 movdqu -8800(%rbp), %xmm0
+ 1768 A0DDFFFF
+ 1769 .LBE763:
+ 1770 .LBE762:
+ 1771 .LBE761:
+ 1772 .LBE760:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 1773 .loc 2 1682 0
+ 1774 0c1d 660F7F85 movdqa %xmm0, -11072(%rbp)
+ 1774 C0D4FFFF
+ 1775 .LBB786:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 1776 .loc 2 1683 0
+ 1777 0c25 660F6F85 movdqa -11072(%rbp), %xmm0
+ 1777 C0D4FFFF
+ 1778 0c2d F30F7F85 movdqu %xmm0, -10512(%rbp)
+ 1778 F0D6FFFF
+ 1779 0c35 E8000000 call KDbgWriterGet at PLT
+ 1779 00
+ 1780 0c3a 4885C0 testq %rax, %rax
+ 1781 0c3d 7479 je .L17
+ 1782 0c3f BF010000 movl $1, %edi
+ 1782 00
+ 1783 0c44 E8000000 call KDbgCondToFlag at PLT
+ 1783 00
+ 1784 0c49 4889C6 movq %rax, %rsi
+ 1785 0c4c BF100000 movl $16, %edi
+ 1785 00
+ 1786 0c51 E8000000 call KDbgTestModConds at PLT
+ 1786 00
+ 1787 0c56 84C0 testb %al, %al
+ 1788 0c58 745E je .L17
+ 1789 0c5a 8B85FCD6 movl -10500(%rbp), %eax
+ 1789 FFFF
+ 1790 0c60 89C7 movl %eax, %edi
+ 1791 0c62 E899F3FF call bswap_32
+ 1791 FF
+ 1792 0c67 4189C5 movl %eax, %r13d
+ 1793 0c6a 8B85F8D6 movl -10504(%rbp), %eax
+ 1793 FFFF
+ 1794 0c70 89C7 movl %eax, %edi
+ 1795 0c72 E889F3FF call bswap_32
+ 1795 FF
+ 1796 0c77 4189C4 movl %eax, %r12d
+ 1797 0c7a 8B85F4D6 movl -10508(%rbp), %eax
+ 1797 FFFF
+ 1798 0c80 89C7 movl %eax, %edi
+ 1799 0c82 E879F3FF call bswap_32
+ 1799 FF
+ 1800 0c87 89C3 movl %eax, %ebx
+ 1801 0c89 8B85F0D6 movl -10512(%rbp), %eax
+ 1801 FFFF
+ 1802 0c8f 89C7 movl %eax, %edi
+ 1803 0c91 E86AF3FF call bswap_32
+ 1803 FF
+ 1804 0c96 4589E9 movl %r13d, %r9d
+
GAS LISTING /tmp/ccjbMjHD.s page 84
+
+
+ 1805 0c99 4589E0 movl %r12d, %r8d
+ 1806 0c9c 89D9 movl %ebx, %ecx
+ 1807 0c9e 89C2 movl %eax, %edx
+ 1808 0ca0 488D3500 leaq .LC0(%rip), %rsi
+ 1808 000000
+ 1809 0ca7 488D3D00 leaq .LC1(%rip), %rdi
+ 1809 000000
+ 1810 0cae B8000000 movl $0, %eax
+ 1810 00
+ 1811 0cb3 E8000000 call KDbgMsg at PLT
+ 1811 00
+ 1812 .L17:
+ 1813 0cb8 660F6F85 movdqa -11072(%rbp), %xmm0
+ 1813 C0D4FFFF
+ 1814 0cc0 F30F7F85 movdqu %xmm0, -8384(%rbp)
+ 1814 40DFFFFF
+ 1815 .LBE786:
+ 1816 .LBB787:
+ 1817 .LBB788:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1818 .loc 2 667 0
+ 1819 0cc8 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 1819 00000000
+ 1820 0cd0 F30F6F8D movdqu -8384(%rbp), %xmm1
+ 1820 40DFFFFF
+ 1821 0cd8 F30F7F8D movdqu %xmm1, -8352(%rbp)
+ 1821 60DFFFFF
+ 1822 0ce0 F30F7F85 movdqu %xmm0, -8368(%rbp)
+ 1822 50DFFFFF
+ 1823 0ce8 F30F6F85 movdqu -8352(%rbp), %xmm0
+ 1823 60DFFFFF
+ 1824 0cf0 F30F7F85 movdqu %xmm0, -8320(%rbp)
+ 1824 80DFFFFF
+ 1825 0cf8 F30F6F85 movdqu -8368(%rbp), %xmm0
+ 1825 50DFFFFF
+ 1826 0d00 F30F7F85 movdqu %xmm0, -8336(%rbp)
+ 1826 70DFFFFF
+ 1827 .LBB789:
+ 1828 .LBB790:
+ 1829 .LBB791:
+ 1830 .LBB792:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1831 .loc 3 529 0
+ 1832 0d08 F30F6F8D movdqu -8336(%rbp), %xmm1
+ 1832 70DFFFFF
+ 1833 0d10 F30F6F85 movdqu -8320(%rbp), %xmm0
+ 1833 80DFFFFF
+ 1834 0d18 660F3800 pshufb %xmm1, %xmm0
+ 1834 C1
+ 1835 .LBE792:
+ 1836 .LBE791:
+ 1837 .LBE790:
+ 1838 .LBE789:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1839 .loc 2 667 0
+ 1840 0d1d F30F7F85 movdqu %xmm0, -8384(%rbp)
+ 1840 40DFFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 85
+
+
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 1841 .loc 2 668 0
+ 1842 0d25 F30F6F85 movdqu -8384(%rbp), %xmm0
+ 1842 40DFFFFF
+ 1843 .LBE788:
+ 1844 .LBE787:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 1845 .loc 2 1684 0
+ 1846 0d2d 660F7F85 movdqa %xmm0, -11072(%rbp)
+ 1846 C0D4FFFF
+ 1847 .LBB793:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 1848 .loc 2 1685 0
+ 1849 0d35 660F6F85 movdqa -11072(%rbp), %xmm0
+ 1849 C0D4FFFF
+ 1850 0d3d F30F7F85 movdqu %xmm0, -10528(%rbp)
+ 1850 E0D6FFFF
+ 1851 0d45 E8000000 call KDbgWriterGet at PLT
+ 1851 00
+ 1852 0d4a 4885C0 testq %rax, %rax
+ 1853 0d4d 7479 je .L19
+ 1854 0d4f BF010000 movl $1, %edi
+ 1854 00
+ 1855 0d54 E8000000 call KDbgCondToFlag at PLT
+ 1855 00
+ 1856 0d59 4889C6 movq %rax, %rsi
+ 1857 0d5c BF100000 movl $16, %edi
+ 1857 00
+ 1858 0d61 E8000000 call KDbgTestModConds at PLT
+ 1858 00
+ 1859 0d66 84C0 testb %al, %al
+ 1860 0d68 745E je .L19
+ 1861 0d6a 8B85ECD6 movl -10516(%rbp), %eax
+ 1861 FFFF
+ 1862 0d70 89C7 movl %eax, %edi
+ 1863 0d72 E889F2FF call bswap_32
+ 1863 FF
+ 1864 0d77 4189C5 movl %eax, %r13d
+ 1865 0d7a 8B85E8D6 movl -10520(%rbp), %eax
+ 1865 FFFF
+ 1866 0d80 89C7 movl %eax, %edi
+ 1867 0d82 E879F2FF call bswap_32
+ 1867 FF
+ 1868 0d87 4189C4 movl %eax, %r12d
+ 1869 0d8a 8B85E4D6 movl -10524(%rbp), %eax
+ 1869 FFFF
+ 1870 0d90 89C7 movl %eax, %edi
+ 1871 0d92 E869F2FF call bswap_32
+ 1871 FF
+ 1872 0d97 89C3 movl %eax, %ebx
+ 1873 0d99 8B85E0D6 movl -10528(%rbp), %eax
+ 1873 FFFF
+ 1874 0d9f 89C7 movl %eax, %edi
+ 1875 0da1 E85AF2FF call bswap_32
+ 1875 FF
+ 1876 0da6 4589E9 movl %r13d, %r9d
+ 1877 0da9 4589E0 movl %r12d, %r8d
+
GAS LISTING /tmp/ccjbMjHD.s page 86
+
+
+ 1878 0dac 89D9 movl %ebx, %ecx
+ 1879 0dae 89C2 movl %eax, %edx
+ 1880 0db0 488D3500 leaq .LC2(%rip), %rsi
+ 1880 000000
+ 1881 0db7 488D3D00 leaq .LC1(%rip), %rdi
+ 1881 000000
+ 1882 0dbe B8000000 movl $0, %eax
+ 1882 00
+ 1883 0dc3 E8000000 call KDbgMsg at PLT
+ 1883 00
+ 1884 .L19:
+ 1885 0dc8 660F6F85 movdqa -11072(%rbp), %xmm0
+ 1885 C0D4FFFF
+ 1886 0dd0 F30F7F85 movdqu %xmm0, -8288(%rbp)
+ 1886 A0DFFFFF
+ 1887 0dd8 660F6F85 movdqa -11056(%rbp), %xmm0
+ 1887 D0D4FFFF
+ 1888 0de0 F30F7F85 movdqu %xmm0, -8304(%rbp)
+ 1888 90DFFFFF
+ 1889 .LBE793:
+ 1890 .LBB794:
+ 1891 .LBB795:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 1892 .loc 2 178 0
+ 1893 0de8 F30F6F85 movdqu -8304(%rbp), %xmm0
+ 1893 90DFFFFF
+ 1894 0df0 F30F6F8D movdqu -8288(%rbp), %xmm1
+ 1894 A0DFFFFF
+ 1895 0df8 660FEFC1 pxor %xmm1, %xmm0
+ 1896 .LBE795:
+ 1897 .LBE794:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 1898 .loc 2 1686 0
+ 1899 0dfc 660F7F85 movdqa %xmm0, -11072(%rbp)
+ 1899 C0D4FFFF
+ 1900 .LBB796:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 1901 .loc 2 1687 0
+ 1902 0e04 660F6F85 movdqa -11072(%rbp), %xmm0
+ 1902 C0D4FFFF
+ 1903 0e0c F30F7F85 movdqu %xmm0, -10544(%rbp)
+ 1903 D0D6FFFF
+ 1904 0e14 E8000000 call KDbgWriterGet at PLT
+ 1904 00
+ 1905 0e19 4885C0 testq %rax, %rax
+ 1906 0e1c 7479 je .L21
+ 1907 0e1e BF010000 movl $1, %edi
+ 1907 00
+ 1908 0e23 E8000000 call KDbgCondToFlag at PLT
+ 1908 00
+ 1909 0e28 4889C6 movq %rax, %rsi
+ 1910 0e2b BF100000 movl $16, %edi
+ 1910 00
+ 1911 0e30 E8000000 call KDbgTestModConds at PLT
+ 1911 00
+ 1912 0e35 84C0 testb %al, %al
+ 1913 0e37 745E je .L21
+
GAS LISTING /tmp/ccjbMjHD.s page 87
+
+
+ 1914 0e39 8B85DCD6 movl -10532(%rbp), %eax
+ 1914 FFFF
+ 1915 0e3f 89C7 movl %eax, %edi
+ 1916 0e41 E8BAF1FF call bswap_32
+ 1916 FF
+ 1917 0e46 4189C5 movl %eax, %r13d
+ 1918 0e49 8B85D8D6 movl -10536(%rbp), %eax
+ 1918 FFFF
+ 1919 0e4f 89C7 movl %eax, %edi
+ 1920 0e51 E8AAF1FF call bswap_32
+ 1920 FF
+ 1921 0e56 4189C4 movl %eax, %r12d
+ 1922 0e59 8B85D4D6 movl -10540(%rbp), %eax
+ 1922 FFFF
+ 1923 0e5f 89C7 movl %eax, %edi
+ 1924 0e61 E89AF1FF call bswap_32
+ 1924 FF
+ 1925 0e66 89C3 movl %eax, %ebx
+ 1926 0e68 8B85D0D6 movl -10544(%rbp), %eax
+ 1926 FFFF
+ 1927 0e6e 89C7 movl %eax, %edi
+ 1928 0e70 E88BF1FF call bswap_32
+ 1928 FF
+ 1929 0e75 4589E9 movl %r13d, %r9d
+ 1930 0e78 4589E0 movl %r12d, %r8d
+ 1931 0e7b 89D9 movl %ebx, %ecx
+ 1932 0e7d 89C2 movl %eax, %edx
+ 1933 0e7f 488D3500 leaq .LC3(%rip), %rsi
+ 1933 000000
+ 1934 0e86 488D3D00 leaq .LC1(%rip), %rdi
+ 1934 000000
+ 1935 0e8d B8000000 movl $0, %eax
+ 1935 00
+ 1936 0e92 E8000000 call KDbgMsg at PLT
+ 1936 00
+ 1937 .L21:
+ 1938 0e97 660F6F85 movdqa -11072(%rbp), %xmm0
+ 1938 C0D4FFFF
+ 1939 0e9f F30F7F85 movdqu %xmm0, -8272(%rbp)
+ 1939 B0DFFFFF
+ 1940 0ea7 F30F6F85 movdqu -8272(%rbp), %xmm0
+ 1940 B0DFFFFF
+ 1941 0eaf F30F7F85 movdqu %xmm0, -8240(%rbp)
+ 1941 D0DFFFFF
+ 1942 .LBE796:
+ 1943 .LBB797:
+ 1944 .LBB798:
+ 1945 .LBB799:
+ 1946 .LBB800:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1947 .loc 3 450 0
+ 1948 0eb7 F30F6F85 movdqu -8240(%rbp), %xmm0
+ 1948 D0DFFFFF
+ 1949 0ebf 660F70C0 pshufd $255, %xmm0, %xmm0
+ 1949 FF
+ 1950 .LBE800:
+ 1951 .LBE799:
+
GAS LISTING /tmp/ccjbMjHD.s page 88
+
+
+ 1952 .LBE798:
+ 1953 .LBE797:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 1954 .loc 2 1688 0
+ 1955 0ec4 660F7F85 movdqa %xmm0, -11072(%rbp)
+ 1955 C0D4FFFF
+ 1956 .LBB801:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 1957 .loc 2 1689 0
+ 1958 0ecc 660F6F85 movdqa -11072(%rbp), %xmm0
+ 1958 C0D4FFFF
+ 1959 0ed4 F30F7F85 movdqu %xmm0, -10560(%rbp)
+ 1959 C0D6FFFF
+ 1960 0edc E8000000 call KDbgWriterGet at PLT
+ 1960 00
+ 1961 0ee1 4885C0 testq %rax, %rax
+ 1962 0ee4 7479 je .L23
+ 1963 0ee6 BF010000 movl $1, %edi
+ 1963 00
+ 1964 0eeb E8000000 call KDbgCondToFlag at PLT
+ 1964 00
+ 1965 0ef0 4889C6 movq %rax, %rsi
+ 1966 0ef3 BF100000 movl $16, %edi
+ 1966 00
+ 1967 0ef8 E8000000 call KDbgTestModConds at PLT
+ 1967 00
+ 1968 0efd 84C0 testb %al, %al
+ 1969 0eff 745E je .L23
+ 1970 0f01 8B85CCD6 movl -10548(%rbp), %eax
+ 1970 FFFF
+ 1971 0f07 89C7 movl %eax, %edi
+ 1972 0f09 E8F2F0FF call bswap_32
+ 1972 FF
+ 1973 0f0e 4189C5 movl %eax, %r13d
+ 1974 0f11 8B85C8D6 movl -10552(%rbp), %eax
+ 1974 FFFF
+ 1975 0f17 89C7 movl %eax, %edi
+ 1976 0f19 E8E2F0FF call bswap_32
+ 1976 FF
+ 1977 0f1e 4189C4 movl %eax, %r12d
+ 1978 0f21 8B85C4D6 movl -10556(%rbp), %eax
+ 1978 FFFF
+ 1979 0f27 89C7 movl %eax, %edi
+ 1980 0f29 E8D2F0FF call bswap_32
+ 1980 FF
+ 1981 0f2e 89C3 movl %eax, %ebx
+ 1982 0f30 8B85C0D6 movl -10560(%rbp), %eax
+ 1982 FFFF
+ 1983 0f36 89C7 movl %eax, %edi
+ 1984 0f38 E8C3F0FF call bswap_32
+ 1984 FF
+ 1985 0f3d 4589E9 movl %r13d, %r9d
+ 1986 0f40 4589E0 movl %r12d, %r8d
+ 1987 0f43 89D9 movl %ebx, %ecx
+ 1988 0f45 89C2 movl %eax, %edx
+ 1989 0f47 488D3500 leaq .LC4(%rip), %rsi
+ 1989 000000
+
GAS LISTING /tmp/ccjbMjHD.s page 89
+
+
+ 1990 0f4e 488D3D00 leaq .LC1(%rip), %rdi
+ 1990 000000
+ 1991 0f55 B8000000 movl $0, %eax
+ 1991 00
+ 1992 0f5a E8000000 call KDbgMsg at PLT
+ 1992 00
+ 1993 .L23:
+ 1994 .LBE801:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 1995 .loc 2 1690 0
+ 1996 0f5f 660F6F85 movdqa -11072(%rbp), %xmm0
+ 1996 C0D4FFFF
+ 1997 .LBE755:
+ 1998 .LBE754:
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x02,2);
+ 1999 .loc 2 1745 0
+ 2000 0f67 F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 2000 10D9FFFF
+ 2001 0f6f F30F6F85 movdqu -9984(%rbp), %xmm0
+ 2001 00D9FFFF
+ 2002 0f77 F30F7F85 movdqu %xmm0, -8224(%rbp)
+ 2002 E0DFFFFF
+ 2003 .LBB802:
+ 2004 .LBB803:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 2005 .loc 2 1565 0
+ 2006 0f7f F30F6F85 movdqu -8224(%rbp), %xmm0
+ 2006 E0DFFFFF
+ 2007 0f87 660F7F85 movdqa %xmm0, -11040(%rbp)
+ 2007 E0D4FFFF
+ 2008 0f8f 660F6F85 movdqa -11040(%rbp), %xmm0
+ 2008 E0D4FFFF
+ 2009 0f97 F30F7F85 movdqu %xmm0, -8208(%rbp)
+ 2009 F0DFFFFF
+ 2010 .LBB804:
+ 2011 .LBB805:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2012 .loc 2 1278 0
+ 2013 0f9f 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 2013 00000000
+ 2014 0fa7 F30F6F8D movdqu -8208(%rbp), %xmm1
+ 2014 F0DFFFFF
+ 2015 0faf F30F7F8D movdqu %xmm1, -8176(%rbp)
+ 2015 10E0FFFF
+ 2016 0fb7 F30F7F85 movdqu %xmm0, -8192(%rbp)
+ 2016 00E0FFFF
+ 2017 0fbf F30F6F85 movdqu -8176(%rbp), %xmm0
+ 2017 10E0FFFF
+ 2018 0fc7 F30F7F85 movdqu %xmm0, -8144(%rbp)
+ 2018 30E0FFFF
+ 2019 0fcf F30F6F85 movdqu -8192(%rbp), %xmm0
+ 2019 00E0FFFF
+ 2020 0fd7 F30F7F85 movdqu %xmm0, -8160(%rbp)
+ 2020 20E0FFFF
+ 2021 .LBB806:
+ 2022 .LBB807:
+ 2023 .LBB808:
+
GAS LISTING /tmp/ccjbMjHD.s page 90
+
+
+ 2024 .LBB809:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2025 .loc 3 529 0
+ 2026 0fdf F30F6F8D movdqu -8160(%rbp), %xmm1
+ 2026 20E0FFFF
+ 2027 0fe7 F30F6F85 movdqu -8144(%rbp), %xmm0
+ 2027 30E0FFFF
+ 2028 0fef 660F3800 pshufb %xmm1, %xmm0
+ 2028 C1
+ 2029 .LBE809:
+ 2030 .LBE808:
+ 2031 .LBE807:
+ 2032 .LBE806:
+ 2033 .LBE805:
+ 2034 .LBE804:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2035 .loc 2 1567 0
+ 2036 0ff4 660F7F85 movdqa %xmm0, -11040(%rbp)
+ 2036 E0D4FFFF
+ 2037 0ffc 660F6F85 movdqa -11040(%rbp), %xmm0
+ 2037 E0D4FFFF
+ 2038 1004 660FEF85 pxor -8224(%rbp), %xmm0
+ 2038 E0DFFFFF
+ 2039 100c F30F7F85 movdqu %xmm0, -8224(%rbp)
+ 2039 E0DFFFFF
+ 2040 1014 660F6F85 movdqa -11040(%rbp), %xmm0
+ 2040 E0D4FFFF
+ 2041 101c F30F7F85 movdqu %xmm0, -8128(%rbp)
+ 2041 40E0FFFF
+ 2042 .LBB810:
+ 2043 .LBB811:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2044 .loc 2 1278 0
+ 2045 1024 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 2045 00000000
+ 2046 102c F30F6F8D movdqu -8128(%rbp), %xmm1
+ 2046 40E0FFFF
+ 2047 1034 F30F7F8D movdqu %xmm1, -8096(%rbp)
+ 2047 60E0FFFF
+ 2048 103c F30F7F85 movdqu %xmm0, -8112(%rbp)
+ 2048 50E0FFFF
+ 2049 1044 F30F6F85 movdqu -8096(%rbp), %xmm0
+ 2049 60E0FFFF
+ 2050 104c F30F7F85 movdqu %xmm0, -8064(%rbp)
+ 2050 80E0FFFF
+ 2051 1054 F30F6F85 movdqu -8112(%rbp), %xmm0
+ 2051 50E0FFFF
+ 2052 105c F30F7F85 movdqu %xmm0, -8080(%rbp)
+ 2052 70E0FFFF
+ 2053 .LBB812:
+ 2054 .LBB813:
+ 2055 .LBB814:
+ 2056 .LBB815:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2057 .loc 3 529 0
+ 2058 1064 F30F6F8D movdqu -8080(%rbp), %xmm1
+ 2058 70E0FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 91
+
+
+ 2059 106c F30F6F85 movdqu -8064(%rbp), %xmm0
+ 2059 80E0FFFF
+ 2060 1074 660F3800 pshufb %xmm1, %xmm0
+ 2060 C1
+ 2061 .LBE815:
+ 2062 .LBE814:
+ 2063 .LBE813:
+ 2064 .LBE812:
+ 2065 .LBE811:
+ 2066 .LBE810:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2067 .loc 2 1568 0
+ 2068 1079 660F7F85 movdqa %xmm0, -11040(%rbp)
+ 2068 E0D4FFFF
+ 2069 1081 660F6F85 movdqa -11040(%rbp), %xmm0
+ 2069 E0D4FFFF
+ 2070 1089 660FEF85 pxor -8224(%rbp), %xmm0
+ 2070 E0DFFFFF
+ 2071 1091 F30F7F85 movdqu %xmm0, -8224(%rbp)
+ 2071 E0DFFFFF
+ 2072 1099 660F6F85 movdqa -11040(%rbp), %xmm0
+ 2072 E0D4FFFF
+ 2073 10a1 F30F7F85 movdqu %xmm0, -8048(%rbp)
+ 2073 90E0FFFF
+ 2074 .LBB816:
+ 2075 .LBB817:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2076 .loc 2 1278 0
+ 2077 10a9 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 2077 00000000
+ 2078 10b1 F30F6F8D movdqu -8048(%rbp), %xmm1
+ 2078 90E0FFFF
+ 2079 10b9 F30F7F8D movdqu %xmm1, -8016(%rbp)
+ 2079 B0E0FFFF
+ 2080 10c1 F30F7F85 movdqu %xmm0, -8032(%rbp)
+ 2080 A0E0FFFF
+ 2081 10c9 F30F6F85 movdqu -8016(%rbp), %xmm0
+ 2081 B0E0FFFF
+ 2082 10d1 F30F7F85 movdqu %xmm0, -7984(%rbp)
+ 2082 D0E0FFFF
+ 2083 10d9 F30F6F85 movdqu -8032(%rbp), %xmm0
+ 2083 A0E0FFFF
+ 2084 10e1 F30F7F85 movdqu %xmm0, -8000(%rbp)
+ 2084 C0E0FFFF
+ 2085 .LBB818:
+ 2086 .LBB819:
+ 2087 .LBB820:
+ 2088 .LBB821:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2089 .loc 3 529 0
+ 2090 10e9 F30F6F8D movdqu -8000(%rbp), %xmm1
+ 2090 C0E0FFFF
+ 2091 10f1 F30F6F85 movdqu -7984(%rbp), %xmm0
+ 2091 D0E0FFFF
+ 2092 10f9 660F3800 pshufb %xmm1, %xmm0
+ 2092 C1
+ 2093 .LBE821:
+
GAS LISTING /tmp/ccjbMjHD.s page 92
+
+
+ 2094 .LBE820:
+ 2095 .LBE819:
+ 2096 .LBE818:
+ 2097 .LBE817:
+ 2098 .LBE816:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2099 .loc 2 1569 0
+ 2100 10fe 660F7F85 movdqa %xmm0, -11040(%rbp)
+ 2100 E0D4FFFF
+ 2101 1106 660F6F85 movdqa -11040(%rbp), %xmm0
+ 2101 E0D4FFFF
+ 2102 110e 660FEF85 pxor -8224(%rbp), %xmm0
+ 2102 E0DFFFFF
+ 2103 1116 F30F7F85 movdqu %xmm0, -8224(%rbp)
+ 2103 E0DFFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2104 .loc 2 1571 0
+ 2105 111e F30F6F85 movdqu -8224(%rbp), %xmm0
+ 2105 E0DFFFFF
+ 2106 .LBE803:
+ 2107 .LBE802:
+ 2108 .loc 2 1745 0
+ 2109 1126 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 2109 00D9FFFF
+ 2110 112e F30F6F85 movdqu -9968(%rbp), %xmm0
+ 2110 10D9FFFF
+ 2111 1136 F30F6F8D movdqu -9984(%rbp), %xmm1
+ 2111 00D9FFFF
+ 2112 113e 660FEFC1 pxor %xmm1, %xmm0
+ 2113 1142 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 2113 00D9FFFF
+ 2114 114a 488B8578 movq -10632(%rbp), %rax
+ 2114 D6FFFF
+ 2115 1151 4883C020 addq $32, %rax
+ 2116 1155 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 2116 00D9FFFF
+ 2117 115d F30F7F00 movdqu %xmm0, (%rax)
+ 2118 1161 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 2118 00D9FFFF
+ 2119 1169 F30F7F85 movdqu %xmm0, -7952(%rbp)
+ 2119 F0E0FFFF
+ 2120 .LBB822:
+ 2121 .LBB823:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2122 .loc 2 1681 0
+ 2123 1171 B8040000 movl $4, %eax
+ 2123 00
+ 2124 1176 660F6F05 movdqa vec_00(%rip), %xmm0
+ 2124 00000000
+ 2125 117e F30F7F85 movdqu %xmm0, -7920(%rbp)
+ 2125 10E1FFFF
+ 2126 1186 89850CE1 movl %eax, -7924(%rbp)
+ 2126 FFFF
+ 2127 118c F30F6F85 movdqu -7920(%rbp), %xmm0
+ 2127 10E1FFFF
+ 2128 1194 F30F7F85 movdqu %xmm0, -7888(%rbp)
+ 2128 30E1FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 93
+
+
+ 2129 119c 8B850CE1 movl -7924(%rbp), %eax
+ 2129 FFFF
+ 2130 11a2 89852CE1 movl %eax, -7892(%rbp)
+ 2130 FFFF
+ 2131 .LBB824:
+ 2132 .LBB825:
+ 2133 .LBB826:
+ 2134 .LBB827:
+ 2135 .loc 3 598 0
+ 2136 11a8 8B852CE1 movl -7892(%rbp), %eax
+ 2136 FFFF
+ 2137 11ae F30F6F85 movdqu -7888(%rbp), %xmm0
+ 2137 30E1FFFF
+ 2138 11b6 660F3A22 pinsrd $3, %eax, %xmm0
+ 2138 C003
+ 2139 .LBE827:
+ 2140 .LBE826:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 2141 .loc 2 519 0
+ 2142 11bc F30F7F85 movdqu %xmm0, -7920(%rbp)
+ 2142 10E1FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2143 .loc 2 526 0
+ 2144 11c4 F30F6F85 movdqu -7920(%rbp), %xmm0
+ 2144 10E1FFFF
+ 2145 .LBE825:
+ 2146 .LBE824:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2147 .loc 2 1681 0
+ 2148 11cc 660F7F85 movdqa %xmm0, -11008(%rbp)
+ 2148 00D5FFFF
+ 2149 11d4 F30F6F85 movdqu -7952(%rbp), %xmm0
+ 2149 F0E0FFFF
+ 2150 11dc F30F7F85 movdqu %xmm0, -7872(%rbp)
+ 2150 40E1FFFF
+ 2151 11e4 F30F6F85 movdqu -7872(%rbp), %xmm0
+ 2151 40E1FFFF
+ 2152 11ec F30F7F85 movdqu %xmm0, -7840(%rbp)
+ 2152 60E1FFFF
+ 2153 11f4 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 2153 000000
+ 2154 11fb 48898558 movq %rax, -7848(%rbp)
+ 2154 E1FFFF
+ 2155 .LBB828:
+ 2156 .LBB829:
+ 2157 .LBB830:
+ 2158 .LBB831:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 2159 .loc 2 851 0
+ 2160 1202 660F6F05 movdqa vec_00(%rip), %xmm0
+ 2160 00000000
+ 2161 120a F30F7F85 movdqu %xmm0, -7808(%rbp)
+ 2161 80E1FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2162 .loc 2 854 0
+ 2163 1212 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 2163 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 94
+
+
+ 2164 121a F30F6F8D movdqu -7840(%rbp), %xmm1
+ 2164 60E1FFFF
+ 2165 1222 F30F7F8D movdqu %xmm1, -7728(%rbp)
+ 2165 D0E1FFFF
+ 2166 122a F30F7F85 movdqu %xmm0, -7744(%rbp)
+ 2166 C0E1FFFF
+ 2167 .LBB832:
+ 2168 .LBB833:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 2169 .loc 2 206 0
+ 2170 1232 F30F6F85 movdqu -7744(%rbp), %xmm0
+ 2170 C0E1FFFF
+ 2171 123a F30F6F8D movdqu -7728(%rbp), %xmm1
+ 2171 D0E1FFFF
+ 2172 1242 660FDBC1 pand %xmm1, %xmm0
+ 2173 .LBE833:
+ 2174 .LBE832:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2175 .loc 2 854 0
+ 2176 1246 F30F7F85 movdqu %xmm0, -7760(%rbp)
+ 2176 B0E1FFFF
+ 2177 124e F30F6F85 movdqu -7840(%rbp), %xmm0
+ 2177 60E1FFFF
+ 2178 1256 F30F7F85 movdqu %xmm0, -7696(%rbp)
+ 2178 F0E1FFFF
+ 2179 .LBB834:
+ 2180 .LBB835:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 2181 .loc 3 433 0
+ 2182 125e F30F6F85 movdqu -7696(%rbp), %xmm0
+ 2182 F0E1FFFF
+ 2183 1266 660F72D0 psrld $4, %xmm0
+ 2183 04
+ 2184 .LBE835:
+ 2185 .LBE834:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 2186 .loc 2 857 0
+ 2187 126b F30F7F85 movdqu %xmm0, -7776(%rbp)
+ 2187 A0E1FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2188 .loc 2 859 0
+ 2189 1273 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 2189 00000000
+ 2190 127b F30F6F8D movdqu -7776(%rbp), %xmm1
+ 2190 A0E1FFFF
+ 2191 1283 F30F7F8D movdqu %xmm1, -7664(%rbp)
+ 2191 10E2FFFF
+ 2192 128b F30F7F85 movdqu %xmm0, -7680(%rbp)
+ 2192 00E2FFFF
+ 2193 .LBB836:
+ 2194 .LBB837:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 2195 .loc 2 206 0
+ 2196 1293 F30F6F85 movdqu -7680(%rbp), %xmm0
+ 2196 00E2FFFF
+ 2197 129b F30F6F8D movdqu -7664(%rbp), %xmm1
+ 2197 10E2FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 95
+
+
+ 2198 12a3 660FDBC1 pand %xmm1, %xmm0
+ 2199 .LBE837:
+ 2200 .LBE836:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2201 .loc 2 859 0
+ 2202 12a7 F30F7F85 movdqu %xmm0, -7776(%rbp)
+ 2202 A0E1FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 2203 .loc 2 866 0
+ 2204 12af C7857CE1 movl $0, -7812(%rbp)
+ 2204 FFFF0000
+ 2204 0000
+ 2205 12b9 E9BE0100 jmp .L24
+ 2205 00
+ 2206 .L25:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2207 .loc 2 868 0
+ 2208 12be 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 2208 00000000
+ 2209 12c6 F30F7F85 movdqu %xmm0, -7632(%rbp)
+ 2209 30E2FFFF
+ 2210 12ce F30F6F85 movdqu -7776(%rbp), %xmm0
+ 2210 A0E1FFFF
+ 2211 12d6 F30F7F85 movdqu %xmm0, -7648(%rbp)
+ 2211 20E2FFFF
+ 2212 12de F30F6F85 movdqu -7632(%rbp), %xmm0
+ 2212 30E2FFFF
+ 2213 12e6 F30F7F85 movdqu %xmm0, -7600(%rbp)
+ 2213 50E2FFFF
+ 2214 12ee F30F6F85 movdqu -7648(%rbp), %xmm0
+ 2214 20E2FFFF
+ 2215 12f6 F30F7F85 movdqu %xmm0, -7616(%rbp)
+ 2215 40E2FFFF
+ 2216 .LBB838:
+ 2217 .LBB839:
+ 2218 .LBB840:
+ 2219 .LBB841:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2220 .loc 3 529 0
+ 2221 12fe F30F6F8D movdqu -7616(%rbp), %xmm1
+ 2221 40E2FFFF
+ 2222 1306 F30F6F85 movdqu -7600(%rbp), %xmm0
+ 2222 50E2FFFF
+ 2223 130e 660F3800 pshufb %xmm1, %xmm0
+ 2223 C1
+ 2224 .LBE841:
+ 2225 .LBE840:
+ 2226 .LBE839:
+ 2227 .LBE838:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2228 .loc 2 868 0
+ 2229 1313 F30F7F85 movdqu %xmm0, -7792(%rbp)
+ 2229 90E1FFFF
+ 2230 131b F30F6F85 movdqu -7760(%rbp), %xmm0
+ 2230 B0E1FFFF
+ 2231 1323 F30F7F85 movdqu %xmm0, -7568(%rbp)
+ 2231 70E2FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 96
+
+
+ 2232 132b F30F6F85 movdqu -7792(%rbp), %xmm0
+ 2232 90E1FFFF
+ 2233 1333 F30F7F85 movdqu %xmm0, -7584(%rbp)
+ 2233 60E2FFFF
+ 2234 .LBB842:
+ 2235 .LBB843:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 2236 .loc 2 234 0
+ 2237 133b F30F6F85 movdqu -7584(%rbp), %xmm0
+ 2237 60E2FFFF
+ 2238 1343 F30F6F8D movdqu -7568(%rbp), %xmm1
+ 2238 70E2FFFF
+ 2239 134b 660FEBC1 por %xmm1, %xmm0
+ 2240 .LBE843:
+ 2241 .LBE842:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 2242 .loc 2 870 0
+ 2243 134f F30F7F85 movdqu %xmm0, -7792(%rbp)
+ 2243 90E1FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2244 .loc 2 872 0
+ 2245 1357 8B857CE1 mov -7812(%rbp), %eax
+ 2245 FFFF
+ 2246 135d 48C1E004 salq $4, %rax
+ 2247 1361 48038558 addq -7848(%rbp), %rax
+ 2247 E1FFFF
+ 2248 1368 660F6F00 movdqa (%rax), %xmm0
+ 2249 136c F30F7F85 movdqu %xmm0, -7536(%rbp)
+ 2249 90E2FFFF
+ 2250 1374 F30F6F85 movdqu -7792(%rbp), %xmm0
+ 2250 90E1FFFF
+ 2251 137c F30F7F85 movdqu %xmm0, -7552(%rbp)
+ 2251 80E2FFFF
+ 2252 1384 F30F6F85 movdqu -7536(%rbp), %xmm0
+ 2252 90E2FFFF
+ 2253 138c F30F7F85 movdqu %xmm0, -7504(%rbp)
+ 2253 B0E2FFFF
+ 2254 1394 F30F6F85 movdqu -7552(%rbp), %xmm0
+ 2254 80E2FFFF
+ 2255 139c F30F7F85 movdqu %xmm0, -7520(%rbp)
+ 2255 A0E2FFFF
+ 2256 .LBB844:
+ 2257 .LBB845:
+ 2258 .LBB846:
+ 2259 .LBB847:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2260 .loc 3 529 0
+ 2261 13a4 F30F6F8D movdqu -7520(%rbp), %xmm1
+ 2261 A0E2FFFF
+ 2262 13ac F30F6F85 movdqu -7504(%rbp), %xmm0
+ 2262 B0E2FFFF
+ 2263 13b4 660F3800 pshufb %xmm1, %xmm0
+ 2263 C1
+ 2264 .LBE847:
+ 2265 .LBE846:
+ 2266 .LBE845:
+ 2267 .LBE844:
+
GAS LISTING /tmp/ccjbMjHD.s page 97
+
+
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2268 .loc 2 872 0
+ 2269 13b9 F30F7F85 movdqu %xmm0, -7792(%rbp)
+ 2269 90E1FFFF
+ 2270 13c1 F30F6F85 movdqu -7808(%rbp), %xmm0
+ 2270 80E1FFFF
+ 2271 13c9 F30F7F85 movdqu %xmm0, -7472(%rbp)
+ 2271 D0E2FFFF
+ 2272 13d1 F30F6F85 movdqu -7792(%rbp), %xmm0
+ 2272 90E1FFFF
+ 2273 13d9 F30F7F85 movdqu %xmm0, -7488(%rbp)
+ 2273 C0E2FFFF
+ 2274 .LBB848:
+ 2275 .LBB849:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 2276 .loc 2 234 0
+ 2277 13e1 F30F6F85 movdqu -7488(%rbp), %xmm0
+ 2277 C0E2FFFF
+ 2278 13e9 F30F6F8D movdqu -7472(%rbp), %xmm1
+ 2278 D0E2FFFF
+ 2279 13f1 660FEBC1 por %xmm1, %xmm0
+ 2280 .LBE849:
+ 2281 .LBE848:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 2282 .loc 2 874 0
+ 2283 13f5 F30F7F85 movdqu %xmm0, -7808(%rbp)
+ 2283 80E1FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2284 .loc 2 876 0
+ 2285 13fd 660F6F05 movdqa vec_01(%rip), %xmm0
+ 2285 00000000
+ 2286 1405 F30F6F8D movdqu -7776(%rbp), %xmm1
+ 2286 A0E1FFFF
+ 2287 140d F30F7F8D movdqu %xmm1, -7440(%rbp)
+ 2287 F0E2FFFF
+ 2288 1415 F30F7F85 movdqu %xmm0, -7456(%rbp)
+ 2288 E0E2FFFF
+ 2289 .LBB850:
+ 2290 .LBB851:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 2291 .loc 2 290 0
+ 2292 141d F30F6F8D movdqu -7456(%rbp), %xmm1
+ 2292 E0E2FFFF
+ 2293 1425 F30F6F85 movdqu -7440(%rbp), %xmm0
+ 2293 F0E2FFFF
+ 2294 142d 660FF8C1 psubb %xmm1, %xmm0
+ 2295 .LBE851:
+ 2296 .LBE850:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2297 .loc 2 876 0
+ 2298 1431 F30F7F85 movdqu %xmm0, -7776(%rbp)
+ 2298 A0E1FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2299 .loc 2 878 0
+ 2300 1439 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 2300 00000000
+ 2301 1441 F30F6F8D movdqu -7776(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 98
+
+
+ 2301 A0E1FFFF
+ 2302 1449 F30F7F8D movdqu %xmm1, -7408(%rbp)
+ 2302 10E3FFFF
+ 2303 1451 F30F7F85 movdqu %xmm0, -7424(%rbp)
+ 2303 00E3FFFF
+ 2304 .LBB852:
+ 2305 .LBB853:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 2306 .loc 2 206 0
+ 2307 1459 F30F6F85 movdqu -7424(%rbp), %xmm0
+ 2307 00E3FFFF
+ 2308 1461 F30F6F8D movdqu -7408(%rbp), %xmm1
+ 2308 10E3FFFF
+ 2309 1469 660FDBC1 pand %xmm1, %xmm0
+ 2310 .LBE853:
+ 2311 .LBE852:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2312 .loc 2 878 0
+ 2313 146d F30F7F85 movdqu %xmm0, -7776(%rbp)
+ 2313 A0E1FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 2314 .loc 2 866 0
+ 2315 1475 83857CE1 addl $1, -7812(%rbp)
+ 2315 FFFF01
+ 2316 .L24:
+ 2317 147c 83BD7CE1 cmpl $15, -7812(%rbp)
+ 2317 FFFF0F
+ 2318 1483 0F8635FE jbe .L25
+ 2318 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 2319 .loc 2 882 0
+ 2320 1489 F30F6F85 movdqu -7808(%rbp), %xmm0
+ 2320 80E1FFFF
+ 2321 .LBE831:
+ 2322 .LBE830:
+ 2323 .LBE829:
+ 2324 .LBE828:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 2325 .loc 2 1682 0
+ 2326 1491 660F7F85 movdqa %xmm0, -11024(%rbp)
+ 2326 F0D4FFFF
+ 2327 .LBB854:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 2328 .loc 2 1683 0
+ 2329 1499 660F6F85 movdqa -11024(%rbp), %xmm0
+ 2329 F0D4FFFF
+ 2330 14a1 F30F7F85 movdqu %xmm0, -10448(%rbp)
+ 2330 30D7FFFF
+ 2331 14a9 E8000000 call KDbgWriterGet at PLT
+ 2331 00
+ 2332 14ae 4885C0 testq %rax, %rax
+ 2333 14b1 7479 je .L27
+ 2334 14b3 BF010000 movl $1, %edi
+ 2334 00
+ 2335 14b8 E8000000 call KDbgCondToFlag at PLT
+ 2335 00
+ 2336 14bd 4889C6 movq %rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s page 99
+
+
+ 2337 14c0 BF100000 movl $16, %edi
+ 2337 00
+ 2338 14c5 E8000000 call KDbgTestModConds at PLT
+ 2338 00
+ 2339 14ca 84C0 testb %al, %al
+ 2340 14cc 745E je .L27
+ 2341 14ce 8B853CD7 movl -10436(%rbp), %eax
+ 2341 FFFF
+ 2342 14d4 89C7 movl %eax, %edi
+ 2343 14d6 E825EBFF call bswap_32
+ 2343 FF
+ 2344 14db 4189C5 movl %eax, %r13d
+ 2345 14de 8B8538D7 movl -10440(%rbp), %eax
+ 2345 FFFF
+ 2346 14e4 89C7 movl %eax, %edi
+ 2347 14e6 E815EBFF call bswap_32
+ 2347 FF
+ 2348 14eb 4189C4 movl %eax, %r12d
+ 2349 14ee 8B8534D7 movl -10444(%rbp), %eax
+ 2349 FFFF
+ 2350 14f4 89C7 movl %eax, %edi
+ 2351 14f6 E805EBFF call bswap_32
+ 2351 FF
+ 2352 14fb 89C3 movl %eax, %ebx
+ 2353 14fd 8B8530D7 movl -10448(%rbp), %eax
+ 2353 FFFF
+ 2354 1503 89C7 movl %eax, %edi
+ 2355 1505 E8F6EAFF call bswap_32
+ 2355 FF
+ 2356 150a 4589E9 movl %r13d, %r9d
+ 2357 150d 4589E0 movl %r12d, %r8d
+ 2358 1510 89D9 movl %ebx, %ecx
+ 2359 1512 89C2 movl %eax, %edx
+ 2360 1514 488D3500 leaq .LC0(%rip), %rsi
+ 2360 000000
+ 2361 151b 488D3D00 leaq .LC1(%rip), %rdi
+ 2361 000000
+ 2362 1522 B8000000 movl $0, %eax
+ 2362 00
+ 2363 1527 E8000000 call KDbgMsg at PLT
+ 2363 00
+ 2364 .L27:
+ 2365 152c 660F6F85 movdqa -11024(%rbp), %xmm0
+ 2365 F0D4FFFF
+ 2366 1534 F30F7F85 movdqu %xmm0, -7392(%rbp)
+ 2366 20E3FFFF
+ 2367 .LBE854:
+ 2368 .LBB855:
+ 2369 .LBB856:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2370 .loc 2 667 0
+ 2371 153c 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 2371 00000000
+ 2372 1544 F30F6F8D movdqu -7392(%rbp), %xmm1
+ 2372 20E3FFFF
+ 2373 154c F30F7F8D movdqu %xmm1, -7360(%rbp)
+ 2373 40E3FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 100
+
+
+ 2374 1554 F30F7F85 movdqu %xmm0, -7376(%rbp)
+ 2374 30E3FFFF
+ 2375 155c F30F6F85 movdqu -7360(%rbp), %xmm0
+ 2375 40E3FFFF
+ 2376 1564 F30F7F85 movdqu %xmm0, -7328(%rbp)
+ 2376 60E3FFFF
+ 2377 156c F30F6F85 movdqu -7376(%rbp), %xmm0
+ 2377 30E3FFFF
+ 2378 1574 F30F7F85 movdqu %xmm0, -7344(%rbp)
+ 2378 50E3FFFF
+ 2379 .LBB857:
+ 2380 .LBB858:
+ 2381 .LBB859:
+ 2382 .LBB860:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2383 .loc 3 529 0
+ 2384 157c F30F6F8D movdqu -7344(%rbp), %xmm1
+ 2384 50E3FFFF
+ 2385 1584 F30F6F85 movdqu -7328(%rbp), %xmm0
+ 2385 60E3FFFF
+ 2386 158c 660F3800 pshufb %xmm1, %xmm0
+ 2386 C1
+ 2387 .LBE860:
+ 2388 .LBE859:
+ 2389 .LBE858:
+ 2390 .LBE857:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2391 .loc 2 667 0
+ 2392 1591 F30F7F85 movdqu %xmm0, -7392(%rbp)
+ 2392 20E3FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2393 .loc 2 668 0
+ 2394 1599 F30F6F85 movdqu -7392(%rbp), %xmm0
+ 2394 20E3FFFF
+ 2395 .LBE856:
+ 2396 .LBE855:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 2397 .loc 2 1684 0
+ 2398 15a1 660F7F85 movdqa %xmm0, -11024(%rbp)
+ 2398 F0D4FFFF
+ 2399 .LBB861:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 2400 .loc 2 1685 0
+ 2401 15a9 660F6F85 movdqa -11024(%rbp), %xmm0
+ 2401 F0D4FFFF
+ 2402 15b1 F30F7F85 movdqu %xmm0, -10464(%rbp)
+ 2402 20D7FFFF
+ 2403 15b9 E8000000 call KDbgWriterGet at PLT
+ 2403 00
+ 2404 15be 4885C0 testq %rax, %rax
+ 2405 15c1 7479 je .L29
+ 2406 15c3 BF010000 movl $1, %edi
+ 2406 00
+ 2407 15c8 E8000000 call KDbgCondToFlag at PLT
+ 2407 00
+ 2408 15cd 4889C6 movq %rax, %rsi
+ 2409 15d0 BF100000 movl $16, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 101
+
+
+ 2409 00
+ 2410 15d5 E8000000 call KDbgTestModConds at PLT
+ 2410 00
+ 2411 15da 84C0 testb %al, %al
+ 2412 15dc 745E je .L29
+ 2413 15de 8B852CD7 movl -10452(%rbp), %eax
+ 2413 FFFF
+ 2414 15e4 89C7 movl %eax, %edi
+ 2415 15e6 E815EAFF call bswap_32
+ 2415 FF
+ 2416 15eb 4189C5 movl %eax, %r13d
+ 2417 15ee 8B8528D7 movl -10456(%rbp), %eax
+ 2417 FFFF
+ 2418 15f4 89C7 movl %eax, %edi
+ 2419 15f6 E805EAFF call bswap_32
+ 2419 FF
+ 2420 15fb 4189C4 movl %eax, %r12d
+ 2421 15fe 8B8524D7 movl -10460(%rbp), %eax
+ 2421 FFFF
+ 2422 1604 89C7 movl %eax, %edi
+ 2423 1606 E8F5E9FF call bswap_32
+ 2423 FF
+ 2424 160b 89C3 movl %eax, %ebx
+ 2425 160d 8B8520D7 movl -10464(%rbp), %eax
+ 2425 FFFF
+ 2426 1613 89C7 movl %eax, %edi
+ 2427 1615 E8E6E9FF call bswap_32
+ 2427 FF
+ 2428 161a 4589E9 movl %r13d, %r9d
+ 2429 161d 4589E0 movl %r12d, %r8d
+ 2430 1620 89D9 movl %ebx, %ecx
+ 2431 1622 89C2 movl %eax, %edx
+ 2432 1624 488D3500 leaq .LC2(%rip), %rsi
+ 2432 000000
+ 2433 162b 488D3D00 leaq .LC1(%rip), %rdi
+ 2433 000000
+ 2434 1632 B8000000 movl $0, %eax
+ 2434 00
+ 2435 1637 E8000000 call KDbgMsg at PLT
+ 2435 00
+ 2436 .L29:
+ 2437 163c 660F6F85 movdqa -11024(%rbp), %xmm0
+ 2437 F0D4FFFF
+ 2438 1644 F30F7F85 movdqu %xmm0, -7296(%rbp)
+ 2438 80E3FFFF
+ 2439 164c 660F6F85 movdqa -11008(%rbp), %xmm0
+ 2439 00D5FFFF
+ 2440 1654 F30F7F85 movdqu %xmm0, -7312(%rbp)
+ 2440 70E3FFFF
+ 2441 .LBE861:
+ 2442 .LBB862:
+ 2443 .LBB863:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 2444 .loc 2 178 0
+ 2445 165c F30F6F85 movdqu -7312(%rbp), %xmm0
+ 2445 70E3FFFF
+ 2446 1664 F30F6F8D movdqu -7296(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 102
+
+
+ 2446 80E3FFFF
+ 2447 166c 660FEFC1 pxor %xmm1, %xmm0
+ 2448 .LBE863:
+ 2449 .LBE862:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 2450 .loc 2 1686 0
+ 2451 1670 660F7F85 movdqa %xmm0, -11024(%rbp)
+ 2451 F0D4FFFF
+ 2452 .LBB864:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 2453 .loc 2 1687 0
+ 2454 1678 660F6F85 movdqa -11024(%rbp), %xmm0
+ 2454 F0D4FFFF
+ 2455 1680 F30F7F85 movdqu %xmm0, -10480(%rbp)
+ 2455 10D7FFFF
+ 2456 1688 E8000000 call KDbgWriterGet at PLT
+ 2456 00
+ 2457 168d 4885C0 testq %rax, %rax
+ 2458 1690 7479 je .L31
+ 2459 1692 BF010000 movl $1, %edi
+ 2459 00
+ 2460 1697 E8000000 call KDbgCondToFlag at PLT
+ 2460 00
+ 2461 169c 4889C6 movq %rax, %rsi
+ 2462 169f BF100000 movl $16, %edi
+ 2462 00
+ 2463 16a4 E8000000 call KDbgTestModConds at PLT
+ 2463 00
+ 2464 16a9 84C0 testb %al, %al
+ 2465 16ab 745E je .L31
+ 2466 16ad 8B851CD7 movl -10468(%rbp), %eax
+ 2466 FFFF
+ 2467 16b3 89C7 movl %eax, %edi
+ 2468 16b5 E846E9FF call bswap_32
+ 2468 FF
+ 2469 16ba 4189C5 movl %eax, %r13d
+ 2470 16bd 8B8518D7 movl -10472(%rbp), %eax
+ 2470 FFFF
+ 2471 16c3 89C7 movl %eax, %edi
+ 2472 16c5 E836E9FF call bswap_32
+ 2472 FF
+ 2473 16ca 4189C4 movl %eax, %r12d
+ 2474 16cd 8B8514D7 movl -10476(%rbp), %eax
+ 2474 FFFF
+ 2475 16d3 89C7 movl %eax, %edi
+ 2476 16d5 E826E9FF call bswap_32
+ 2476 FF
+ 2477 16da 89C3 movl %eax, %ebx
+ 2478 16dc 8B8510D7 movl -10480(%rbp), %eax
+ 2478 FFFF
+ 2479 16e2 89C7 movl %eax, %edi
+ 2480 16e4 E817E9FF call bswap_32
+ 2480 FF
+ 2481 16e9 4589E9 movl %r13d, %r9d
+ 2482 16ec 4589E0 movl %r12d, %r8d
+ 2483 16ef 89D9 movl %ebx, %ecx
+ 2484 16f1 89C2 movl %eax, %edx
+
GAS LISTING /tmp/ccjbMjHD.s page 103
+
+
+ 2485 16f3 488D3500 leaq .LC3(%rip), %rsi
+ 2485 000000
+ 2486 16fa 488D3D00 leaq .LC1(%rip), %rdi
+ 2486 000000
+ 2487 1701 B8000000 movl $0, %eax
+ 2487 00
+ 2488 1706 E8000000 call KDbgMsg at PLT
+ 2488 00
+ 2489 .L31:
+ 2490 170b 660F6F85 movdqa -11024(%rbp), %xmm0
+ 2490 F0D4FFFF
+ 2491 1713 F30F7F85 movdqu %xmm0, -7280(%rbp)
+ 2491 90E3FFFF
+ 2492 171b F30F6F85 movdqu -7280(%rbp), %xmm0
+ 2492 90E3FFFF
+ 2493 1723 F30F7F85 movdqu %xmm0, -7248(%rbp)
+ 2493 B0E3FFFF
+ 2494 .LBE864:
+ 2495 .LBB865:
+ 2496 .LBB866:
+ 2497 .LBB867:
+ 2498 .LBB868:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2499 .loc 3 450 0
+ 2500 172b F30F6F85 movdqu -7248(%rbp), %xmm0
+ 2500 B0E3FFFF
+ 2501 1733 660F70C0 pshufd $255, %xmm0, %xmm0
+ 2501 FF
+ 2502 .LBE868:
+ 2503 .LBE867:
+ 2504 .LBE866:
+ 2505 .LBE865:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 2506 .loc 2 1688 0
+ 2507 1738 660F7F85 movdqa %xmm0, -11024(%rbp)
+ 2507 F0D4FFFF
+ 2508 .LBB869:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 2509 .loc 2 1689 0
+ 2510 1740 660F6F85 movdqa -11024(%rbp), %xmm0
+ 2510 F0D4FFFF
+ 2511 1748 F30F7F85 movdqu %xmm0, -10496(%rbp)
+ 2511 00D7FFFF
+ 2512 1750 E8000000 call KDbgWriterGet at PLT
+ 2512 00
+ 2513 1755 4885C0 testq %rax, %rax
+ 2514 1758 7479 je .L33
+ 2515 175a BF010000 movl $1, %edi
+ 2515 00
+ 2516 175f E8000000 call KDbgCondToFlag at PLT
+ 2516 00
+ 2517 1764 4889C6 movq %rax, %rsi
+ 2518 1767 BF100000 movl $16, %edi
+ 2518 00
+ 2519 176c E8000000 call KDbgTestModConds at PLT
+ 2519 00
+ 2520 1771 84C0 testb %al, %al
+
GAS LISTING /tmp/ccjbMjHD.s page 104
+
+
+ 2521 1773 745E je .L33
+ 2522 1775 8B850CD7 movl -10484(%rbp), %eax
+ 2522 FFFF
+ 2523 177b 89C7 movl %eax, %edi
+ 2524 177d E87EE8FF call bswap_32
+ 2524 FF
+ 2525 1782 4189C5 movl %eax, %r13d
+ 2526 1785 8B8508D7 movl -10488(%rbp), %eax
+ 2526 FFFF
+ 2527 178b 89C7 movl %eax, %edi
+ 2528 178d E86EE8FF call bswap_32
+ 2528 FF
+ 2529 1792 4189C4 movl %eax, %r12d
+ 2530 1795 8B8504D7 movl -10492(%rbp), %eax
+ 2530 FFFF
+ 2531 179b 89C7 movl %eax, %edi
+ 2532 179d E85EE8FF call bswap_32
+ 2532 FF
+ 2533 17a2 89C3 movl %eax, %ebx
+ 2534 17a4 8B8500D7 movl -10496(%rbp), %eax
+ 2534 FFFF
+ 2535 17aa 89C7 movl %eax, %edi
+ 2536 17ac E84FE8FF call bswap_32
+ 2536 FF
+ 2537 17b1 4589E9 movl %r13d, %r9d
+ 2538 17b4 4589E0 movl %r12d, %r8d
+ 2539 17b7 89D9 movl %ebx, %ecx
+ 2540 17b9 89C2 movl %eax, %edx
+ 2541 17bb 488D3500 leaq .LC4(%rip), %rsi
+ 2541 000000
+ 2542 17c2 488D3D00 leaq .LC1(%rip), %rdi
+ 2542 000000
+ 2543 17c9 B8000000 movl $0, %eax
+ 2543 00
+ 2544 17ce E8000000 call KDbgMsg at PLT
+ 2544 00
+ 2545 .L33:
+ 2546 .LBE869:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 2547 .loc 2 1690 0
+ 2548 17d3 660F6F85 movdqa -11024(%rbp), %xmm0
+ 2548 F0D4FFFF
+ 2549 .LBE823:
+ 2550 .LBE822:
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x04,3);
+ 2551 .loc 2 1746 0
+ 2552 17db F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 2552 10D9FFFF
+ 2553 17e3 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 2553 00D9FFFF
+ 2554 17eb F30F7F85 movdqu %xmm0, -7232(%rbp)
+ 2554 C0E3FFFF
+ 2555 .LBB870:
+ 2556 .LBB871:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 2557 .loc 2 1565 0
+ 2558 17f3 F30F6F85 movdqu -7232(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 105
+
+
+ 2558 C0E3FFFF
+ 2559 17fb 660F7F85 movdqa %xmm0, -10992(%rbp)
+ 2559 10D5FFFF
+ 2560 1803 660F6F85 movdqa -10992(%rbp), %xmm0
+ 2560 10D5FFFF
+ 2561 180b F30F7F85 movdqu %xmm0, -7216(%rbp)
+ 2561 D0E3FFFF
+ 2562 .LBB872:
+ 2563 .LBB873:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2564 .loc 2 1278 0
+ 2565 1813 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 2565 00000000
+ 2566 181b F30F6F8D movdqu -7216(%rbp), %xmm1
+ 2566 D0E3FFFF
+ 2567 1823 F30F7F8D movdqu %xmm1, -7184(%rbp)
+ 2567 F0E3FFFF
+ 2568 182b F30F7F85 movdqu %xmm0, -7200(%rbp)
+ 2568 E0E3FFFF
+ 2569 1833 F30F6F85 movdqu -7184(%rbp), %xmm0
+ 2569 F0E3FFFF
+ 2570 183b F30F7F85 movdqu %xmm0, -7152(%rbp)
+ 2570 10E4FFFF
+ 2571 1843 F30F6F85 movdqu -7200(%rbp), %xmm0
+ 2571 E0E3FFFF
+ 2572 184b F30F7F85 movdqu %xmm0, -7168(%rbp)
+ 2572 00E4FFFF
+ 2573 .LBB874:
+ 2574 .LBB875:
+ 2575 .LBB876:
+ 2576 .LBB877:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2577 .loc 3 529 0
+ 2578 1853 F30F6F8D movdqu -7168(%rbp), %xmm1
+ 2578 00E4FFFF
+ 2579 185b F30F6F85 movdqu -7152(%rbp), %xmm0
+ 2579 10E4FFFF
+ 2580 1863 660F3800 pshufb %xmm1, %xmm0
+ 2580 C1
+ 2581 .LBE877:
+ 2582 .LBE876:
+ 2583 .LBE875:
+ 2584 .LBE874:
+ 2585 .LBE873:
+ 2586 .LBE872:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2587 .loc 2 1567 0
+ 2588 1868 660F7F85 movdqa %xmm0, -10992(%rbp)
+ 2588 10D5FFFF
+ 2589 1870 660F6F85 movdqa -10992(%rbp), %xmm0
+ 2589 10D5FFFF
+ 2590 1878 660FEF85 pxor -7232(%rbp), %xmm0
+ 2590 C0E3FFFF
+ 2591 1880 F30F7F85 movdqu %xmm0, -7232(%rbp)
+ 2591 C0E3FFFF
+ 2592 1888 660F6F85 movdqa -10992(%rbp), %xmm0
+ 2592 10D5FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 106
+
+
+ 2593 1890 F30F7F85 movdqu %xmm0, -7136(%rbp)
+ 2593 20E4FFFF
+ 2594 .LBB878:
+ 2595 .LBB879:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2596 .loc 2 1278 0
+ 2597 1898 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 2597 00000000
+ 2598 18a0 F30F6F8D movdqu -7136(%rbp), %xmm1
+ 2598 20E4FFFF
+ 2599 18a8 F30F7F8D movdqu %xmm1, -7104(%rbp)
+ 2599 40E4FFFF
+ 2600 18b0 F30F7F85 movdqu %xmm0, -7120(%rbp)
+ 2600 30E4FFFF
+ 2601 18b8 F30F6F85 movdqu -7104(%rbp), %xmm0
+ 2601 40E4FFFF
+ 2602 18c0 F30F7F85 movdqu %xmm0, -7072(%rbp)
+ 2602 60E4FFFF
+ 2603 18c8 F30F6F85 movdqu -7120(%rbp), %xmm0
+ 2603 30E4FFFF
+ 2604 18d0 F30F7F85 movdqu %xmm0, -7088(%rbp)
+ 2604 50E4FFFF
+ 2605 .LBB880:
+ 2606 .LBB881:
+ 2607 .LBB882:
+ 2608 .LBB883:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2609 .loc 3 529 0
+ 2610 18d8 F30F6F8D movdqu -7088(%rbp), %xmm1
+ 2610 50E4FFFF
+ 2611 18e0 F30F6F85 movdqu -7072(%rbp), %xmm0
+ 2611 60E4FFFF
+ 2612 18e8 660F3800 pshufb %xmm1, %xmm0
+ 2612 C1
+ 2613 .LBE883:
+ 2614 .LBE882:
+ 2615 .LBE881:
+ 2616 .LBE880:
+ 2617 .LBE879:
+ 2618 .LBE878:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2619 .loc 2 1568 0
+ 2620 18ed 660F7F85 movdqa %xmm0, -10992(%rbp)
+ 2620 10D5FFFF
+ 2621 18f5 660F6F85 movdqa -10992(%rbp), %xmm0
+ 2621 10D5FFFF
+ 2622 18fd 660FEF85 pxor -7232(%rbp), %xmm0
+ 2622 C0E3FFFF
+ 2623 1905 F30F7F85 movdqu %xmm0, -7232(%rbp)
+ 2623 C0E3FFFF
+ 2624 190d 660F6F85 movdqa -10992(%rbp), %xmm0
+ 2624 10D5FFFF
+ 2625 1915 F30F7F85 movdqu %xmm0, -7056(%rbp)
+ 2625 70E4FFFF
+ 2626 .LBB884:
+ 2627 .LBB885:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccjbMjHD.s page 107
+
+
+ 2628 .loc 2 1278 0
+ 2629 191d 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 2629 00000000
+ 2630 1925 F30F6F8D movdqu -7056(%rbp), %xmm1
+ 2630 70E4FFFF
+ 2631 192d F30F7F8D movdqu %xmm1, -7024(%rbp)
+ 2631 90E4FFFF
+ 2632 1935 F30F7F85 movdqu %xmm0, -7040(%rbp)
+ 2632 80E4FFFF
+ 2633 193d F30F6F85 movdqu -7024(%rbp), %xmm0
+ 2633 90E4FFFF
+ 2634 1945 F30F7F85 movdqu %xmm0, -6992(%rbp)
+ 2634 B0E4FFFF
+ 2635 194d F30F6F85 movdqu -7040(%rbp), %xmm0
+ 2635 80E4FFFF
+ 2636 1955 F30F7F85 movdqu %xmm0, -7008(%rbp)
+ 2636 A0E4FFFF
+ 2637 .LBB886:
+ 2638 .LBB887:
+ 2639 .LBB888:
+ 2640 .LBB889:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2641 .loc 3 529 0
+ 2642 195d F30F6F8D movdqu -7008(%rbp), %xmm1
+ 2642 A0E4FFFF
+ 2643 1965 F30F6F85 movdqu -6992(%rbp), %xmm0
+ 2643 B0E4FFFF
+ 2644 196d 660F3800 pshufb %xmm1, %xmm0
+ 2644 C1
+ 2645 .LBE889:
+ 2646 .LBE888:
+ 2647 .LBE887:
+ 2648 .LBE886:
+ 2649 .LBE885:
+ 2650 .LBE884:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2651 .loc 2 1569 0
+ 2652 1972 660F7F85 movdqa %xmm0, -10992(%rbp)
+ 2652 10D5FFFF
+ 2653 197a 660F6F85 movdqa -10992(%rbp), %xmm0
+ 2653 10D5FFFF
+ 2654 1982 660FEF85 pxor -7232(%rbp), %xmm0
+ 2654 C0E3FFFF
+ 2655 198a F30F7F85 movdqu %xmm0, -7232(%rbp)
+ 2655 C0E3FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2656 .loc 2 1571 0
+ 2657 1992 F30F6F85 movdqu -7232(%rbp), %xmm0
+ 2657 C0E3FFFF
+ 2658 .LBE871:
+ 2659 .LBE870:
+ 2660 .loc 2 1746 0
+ 2661 199a F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 2661 00D9FFFF
+ 2662 19a2 F30F6F85 movdqu -9968(%rbp), %xmm0
+ 2662 10D9FFFF
+ 2663 19aa F30F6F8D movdqu -9984(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 108
+
+
+ 2663 00D9FFFF
+ 2664 19b2 660FEFC1 pxor %xmm1, %xmm0
+ 2665 19b6 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 2665 00D9FFFF
+ 2666 19be 488B8578 movq -10632(%rbp), %rax
+ 2666 D6FFFF
+ 2667 19c5 4883C030 addq $48, %rax
+ 2668 19c9 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 2668 00D9FFFF
+ 2669 19d1 F30F7F00 movdqu %xmm0, (%rax)
+ 2670 19d5 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 2670 00D9FFFF
+ 2671 19dd F30F7F85 movdqu %xmm0, -6960(%rbp)
+ 2671 D0E4FFFF
+ 2672 .LBB890:
+ 2673 .LBB891:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2674 .loc 2 1681 0
+ 2675 19e5 B8080000 movl $8, %eax
+ 2675 00
+ 2676 19ea 660F6F05 movdqa vec_00(%rip), %xmm0
+ 2676 00000000
+ 2677 19f2 F30F7F85 movdqu %xmm0, -6928(%rbp)
+ 2677 F0E4FFFF
+ 2678 19fa 8985ECE4 movl %eax, -6932(%rbp)
+ 2678 FFFF
+ 2679 1a00 F30F6F85 movdqu -6928(%rbp), %xmm0
+ 2679 F0E4FFFF
+ 2680 1a08 F30F7F85 movdqu %xmm0, -6896(%rbp)
+ 2680 10E5FFFF
+ 2681 1a10 8B85ECE4 movl -6932(%rbp), %eax
+ 2681 FFFF
+ 2682 1a16 89850CE5 movl %eax, -6900(%rbp)
+ 2682 FFFF
+ 2683 .LBB892:
+ 2684 .LBB893:
+ 2685 .LBB894:
+ 2686 .LBB895:
+ 2687 .loc 3 598 0
+ 2688 1a1c 8B850CE5 movl -6900(%rbp), %eax
+ 2688 FFFF
+ 2689 1a22 F30F6F85 movdqu -6896(%rbp), %xmm0
+ 2689 10E5FFFF
+ 2690 1a2a 660F3A22 pinsrd $3, %eax, %xmm0
+ 2690 C003
+ 2691 .LBE895:
+ 2692 .LBE894:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 2693 .loc 2 519 0
+ 2694 1a30 F30F7F85 movdqu %xmm0, -6928(%rbp)
+ 2694 F0E4FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2695 .loc 2 526 0
+ 2696 1a38 F30F6F85 movdqu -6928(%rbp), %xmm0
+ 2696 F0E4FFFF
+ 2697 .LBE893:
+ 2698 .LBE892:
+
GAS LISTING /tmp/ccjbMjHD.s page 109
+
+
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2699 .loc 2 1681 0
+ 2700 1a40 660F7F85 movdqa %xmm0, -10960(%rbp)
+ 2700 30D5FFFF
+ 2701 1a48 F30F6F85 movdqu -6960(%rbp), %xmm0
+ 2701 D0E4FFFF
+ 2702 1a50 F30F7F85 movdqu %xmm0, -6880(%rbp)
+ 2702 20E5FFFF
+ 2703 1a58 F30F6F85 movdqu -6880(%rbp), %xmm0
+ 2703 20E5FFFF
+ 2704 1a60 F30F7F85 movdqu %xmm0, -6848(%rbp)
+ 2704 40E5FFFF
+ 2705 1a68 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 2705 000000
+ 2706 1a6f 48898538 movq %rax, -6856(%rbp)
+ 2706 E5FFFF
+ 2707 .LBB896:
+ 2708 .LBB897:
+ 2709 .LBB898:
+ 2710 .LBB899:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 2711 .loc 2 851 0
+ 2712 1a76 660F6F05 movdqa vec_00(%rip), %xmm0
+ 2712 00000000
+ 2713 1a7e F30F7F85 movdqu %xmm0, -6816(%rbp)
+ 2713 60E5FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2714 .loc 2 854 0
+ 2715 1a86 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 2715 00000000
+ 2716 1a8e F30F6F8D movdqu -6848(%rbp), %xmm1
+ 2716 40E5FFFF
+ 2717 1a96 F30F7F8D movdqu %xmm1, -6736(%rbp)
+ 2717 B0E5FFFF
+ 2718 1a9e F30F7F85 movdqu %xmm0, -6752(%rbp)
+ 2718 A0E5FFFF
+ 2719 .LBB900:
+ 2720 .LBB901:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 2721 .loc 2 206 0
+ 2722 1aa6 F30F6F85 movdqu -6752(%rbp), %xmm0
+ 2722 A0E5FFFF
+ 2723 1aae F30F6F8D movdqu -6736(%rbp), %xmm1
+ 2723 B0E5FFFF
+ 2724 1ab6 660FDBC1 pand %xmm1, %xmm0
+ 2725 .LBE901:
+ 2726 .LBE900:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2727 .loc 2 854 0
+ 2728 1aba F30F7F85 movdqu %xmm0, -6768(%rbp)
+ 2728 90E5FFFF
+ 2729 1ac2 F30F6F85 movdqu -6848(%rbp), %xmm0
+ 2729 40E5FFFF
+ 2730 1aca F30F7F85 movdqu %xmm0, -6704(%rbp)
+ 2730 D0E5FFFF
+ 2731 .LBB902:
+ 2732 .LBB903:
+
GAS LISTING /tmp/ccjbMjHD.s page 110
+
+
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 2733 .loc 3 433 0
+ 2734 1ad2 F30F6F85 movdqu -6704(%rbp), %xmm0
+ 2734 D0E5FFFF
+ 2735 1ada 660F72D0 psrld $4, %xmm0
+ 2735 04
+ 2736 .LBE903:
+ 2737 .LBE902:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 2738 .loc 2 857 0
+ 2739 1adf F30F7F85 movdqu %xmm0, -6784(%rbp)
+ 2739 80E5FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2740 .loc 2 859 0
+ 2741 1ae7 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 2741 00000000
+ 2742 1aef F30F6F8D movdqu -6784(%rbp), %xmm1
+ 2742 80E5FFFF
+ 2743 1af7 F30F7F8D movdqu %xmm1, -6672(%rbp)
+ 2743 F0E5FFFF
+ 2744 1aff F30F7F85 movdqu %xmm0, -6688(%rbp)
+ 2744 E0E5FFFF
+ 2745 .LBB904:
+ 2746 .LBB905:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 2747 .loc 2 206 0
+ 2748 1b07 F30F6F85 movdqu -6688(%rbp), %xmm0
+ 2748 E0E5FFFF
+ 2749 1b0f F30F6F8D movdqu -6672(%rbp), %xmm1
+ 2749 F0E5FFFF
+ 2750 1b17 660FDBC1 pand %xmm1, %xmm0
+ 2751 .LBE905:
+ 2752 .LBE904:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2753 .loc 2 859 0
+ 2754 1b1b F30F7F85 movdqu %xmm0, -6784(%rbp)
+ 2754 80E5FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 2755 .loc 2 866 0
+ 2756 1b23 C7855CE5 movl $0, -6820(%rbp)
+ 2756 FFFF0000
+ 2756 0000
+ 2757 1b2d E9BE0100 jmp .L34
+ 2757 00
+ 2758 .L35:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2759 .loc 2 868 0
+ 2760 1b32 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 2760 00000000
+ 2761 1b3a F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 2761 10E6FFFF
+ 2762 1b42 F30F6F85 movdqu -6784(%rbp), %xmm0
+ 2762 80E5FFFF
+ 2763 1b4a F30F7F85 movdqu %xmm0, -6656(%rbp)
+ 2763 00E6FFFF
+ 2764 1b52 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 2764 10E6FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 111
+
+
+ 2765 1b5a F30F7F85 movdqu %xmm0, -6608(%rbp)
+ 2765 30E6FFFF
+ 2766 1b62 F30F6F85 movdqu -6656(%rbp), %xmm0
+ 2766 00E6FFFF
+ 2767 1b6a F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 2767 20E6FFFF
+ 2768 .LBB906:
+ 2769 .LBB907:
+ 2770 .LBB908:
+ 2771 .LBB909:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2772 .loc 3 529 0
+ 2773 1b72 F30F6F8D movdqu -6624(%rbp), %xmm1
+ 2773 20E6FFFF
+ 2774 1b7a F30F6F85 movdqu -6608(%rbp), %xmm0
+ 2774 30E6FFFF
+ 2775 1b82 660F3800 pshufb %xmm1, %xmm0
+ 2775 C1
+ 2776 .LBE909:
+ 2777 .LBE908:
+ 2778 .LBE907:
+ 2779 .LBE906:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2780 .loc 2 868 0
+ 2781 1b87 F30F7F85 movdqu %xmm0, -6800(%rbp)
+ 2781 70E5FFFF
+ 2782 1b8f F30F6F85 movdqu -6768(%rbp), %xmm0
+ 2782 90E5FFFF
+ 2783 1b97 F30F7F85 movdqu %xmm0, -6576(%rbp)
+ 2783 50E6FFFF
+ 2784 1b9f F30F6F85 movdqu -6800(%rbp), %xmm0
+ 2784 70E5FFFF
+ 2785 1ba7 F30F7F85 movdqu %xmm0, -6592(%rbp)
+ 2785 40E6FFFF
+ 2786 .LBB910:
+ 2787 .LBB911:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 2788 .loc 2 234 0
+ 2789 1baf F30F6F85 movdqu -6592(%rbp), %xmm0
+ 2789 40E6FFFF
+ 2790 1bb7 F30F6F8D movdqu -6576(%rbp), %xmm1
+ 2790 50E6FFFF
+ 2791 1bbf 660FEBC1 por %xmm1, %xmm0
+ 2792 .LBE911:
+ 2793 .LBE910:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 2794 .loc 2 870 0
+ 2795 1bc3 F30F7F85 movdqu %xmm0, -6800(%rbp)
+ 2795 70E5FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2796 .loc 2 872 0
+ 2797 1bcb 8B855CE5 mov -6820(%rbp), %eax
+ 2797 FFFF
+ 2798 1bd1 48C1E004 salq $4, %rax
+ 2799 1bd5 48038538 addq -6856(%rbp), %rax
+ 2799 E5FFFF
+ 2800 1bdc 660F6F00 movdqa (%rax), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 112
+
+
+ 2801 1be0 F30F7F85 movdqu %xmm0, -6544(%rbp)
+ 2801 70E6FFFF
+ 2802 1be8 F30F6F85 movdqu -6800(%rbp), %xmm0
+ 2802 70E5FFFF
+ 2803 1bf0 F30F7F85 movdqu %xmm0, -6560(%rbp)
+ 2803 60E6FFFF
+ 2804 1bf8 F30F6F85 movdqu -6544(%rbp), %xmm0
+ 2804 70E6FFFF
+ 2805 1c00 F30F7F85 movdqu %xmm0, -6512(%rbp)
+ 2805 90E6FFFF
+ 2806 1c08 F30F6F85 movdqu -6560(%rbp), %xmm0
+ 2806 60E6FFFF
+ 2807 1c10 F30F7F85 movdqu %xmm0, -6528(%rbp)
+ 2807 80E6FFFF
+ 2808 .LBB912:
+ 2809 .LBB913:
+ 2810 .LBB914:
+ 2811 .LBB915:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2812 .loc 3 529 0
+ 2813 1c18 F30F6F8D movdqu -6528(%rbp), %xmm1
+ 2813 80E6FFFF
+ 2814 1c20 F30F6F85 movdqu -6512(%rbp), %xmm0
+ 2814 90E6FFFF
+ 2815 1c28 660F3800 pshufb %xmm1, %xmm0
+ 2815 C1
+ 2816 .LBE915:
+ 2817 .LBE914:
+ 2818 .LBE913:
+ 2819 .LBE912:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2820 .loc 2 872 0
+ 2821 1c2d F30F7F85 movdqu %xmm0, -6800(%rbp)
+ 2821 70E5FFFF
+ 2822 1c35 F30F6F85 movdqu -6816(%rbp), %xmm0
+ 2822 60E5FFFF
+ 2823 1c3d F30F7F85 movdqu %xmm0, -6480(%rbp)
+ 2823 B0E6FFFF
+ 2824 1c45 F30F6F85 movdqu -6800(%rbp), %xmm0
+ 2824 70E5FFFF
+ 2825 1c4d F30F7F85 movdqu %xmm0, -6496(%rbp)
+ 2825 A0E6FFFF
+ 2826 .LBB916:
+ 2827 .LBB917:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 2828 .loc 2 234 0
+ 2829 1c55 F30F6F85 movdqu -6496(%rbp), %xmm0
+ 2829 A0E6FFFF
+ 2830 1c5d F30F6F8D movdqu -6480(%rbp), %xmm1
+ 2830 B0E6FFFF
+ 2831 1c65 660FEBC1 por %xmm1, %xmm0
+ 2832 .LBE917:
+ 2833 .LBE916:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 2834 .loc 2 874 0
+ 2835 1c69 F30F7F85 movdqu %xmm0, -6816(%rbp)
+ 2835 60E5FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 113
+
+
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2836 .loc 2 876 0
+ 2837 1c71 660F6F05 movdqa vec_01(%rip), %xmm0
+ 2837 00000000
+ 2838 1c79 F30F6F8D movdqu -6784(%rbp), %xmm1
+ 2838 80E5FFFF
+ 2839 1c81 F30F7F8D movdqu %xmm1, -6448(%rbp)
+ 2839 D0E6FFFF
+ 2840 1c89 F30F7F85 movdqu %xmm0, -6464(%rbp)
+ 2840 C0E6FFFF
+ 2841 .LBB918:
+ 2842 .LBB919:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 2843 .loc 2 290 0
+ 2844 1c91 F30F6F8D movdqu -6464(%rbp), %xmm1
+ 2844 C0E6FFFF
+ 2845 1c99 F30F6F85 movdqu -6448(%rbp), %xmm0
+ 2845 D0E6FFFF
+ 2846 1ca1 660FF8C1 psubb %xmm1, %xmm0
+ 2847 .LBE919:
+ 2848 .LBE918:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2849 .loc 2 876 0
+ 2850 1ca5 F30F7F85 movdqu %xmm0, -6784(%rbp)
+ 2850 80E5FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2851 .loc 2 878 0
+ 2852 1cad 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 2852 00000000
+ 2853 1cb5 F30F6F8D movdqu -6784(%rbp), %xmm1
+ 2853 80E5FFFF
+ 2854 1cbd F30F7F8D movdqu %xmm1, -6416(%rbp)
+ 2854 F0E6FFFF
+ 2855 1cc5 F30F7F85 movdqu %xmm0, -6432(%rbp)
+ 2855 E0E6FFFF
+ 2856 .LBB920:
+ 2857 .LBB921:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 2858 .loc 2 206 0
+ 2859 1ccd F30F6F85 movdqu -6432(%rbp), %xmm0
+ 2859 E0E6FFFF
+ 2860 1cd5 F30F6F8D movdqu -6416(%rbp), %xmm1
+ 2860 F0E6FFFF
+ 2861 1cdd 660FDBC1 pand %xmm1, %xmm0
+ 2862 .LBE921:
+ 2863 .LBE920:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2864 .loc 2 878 0
+ 2865 1ce1 F30F7F85 movdqu %xmm0, -6784(%rbp)
+ 2865 80E5FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 2866 .loc 2 866 0
+ 2867 1ce9 83855CE5 addl $1, -6820(%rbp)
+ 2867 FFFF01
+ 2868 .L34:
+ 2869 1cf0 83BD5CE5 cmpl $15, -6820(%rbp)
+ 2869 FFFF0F
+
GAS LISTING /tmp/ccjbMjHD.s page 114
+
+
+ 2870 1cf7 0F8635FE jbe .L35
+ 2870 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 2871 .loc 2 882 0
+ 2872 1cfd F30F6F85 movdqu -6816(%rbp), %xmm0
+ 2872 60E5FFFF
+ 2873 .LBE899:
+ 2874 .LBE898:
+ 2875 .LBE897:
+ 2876 .LBE896:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 2877 .loc 2 1682 0
+ 2878 1d05 660F7F85 movdqa %xmm0, -10976(%rbp)
+ 2878 20D5FFFF
+ 2879 .LBB922:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 2880 .loc 2 1683 0
+ 2881 1d0d 660F6F85 movdqa -10976(%rbp), %xmm0
+ 2881 20D5FFFF
+ 2882 1d15 F30F7F85 movdqu %xmm0, -10384(%rbp)
+ 2882 70D7FFFF
+ 2883 1d1d E8000000 call KDbgWriterGet at PLT
+ 2883 00
+ 2884 1d22 4885C0 testq %rax, %rax
+ 2885 1d25 7479 je .L37
+ 2886 1d27 BF010000 movl $1, %edi
+ 2886 00
+ 2887 1d2c E8000000 call KDbgCondToFlag at PLT
+ 2887 00
+ 2888 1d31 4889C6 movq %rax, %rsi
+ 2889 1d34 BF100000 movl $16, %edi
+ 2889 00
+ 2890 1d39 E8000000 call KDbgTestModConds at PLT
+ 2890 00
+ 2891 1d3e 84C0 testb %al, %al
+ 2892 1d40 745E je .L37
+ 2893 1d42 8B857CD7 movl -10372(%rbp), %eax
+ 2893 FFFF
+ 2894 1d48 89C7 movl %eax, %edi
+ 2895 1d4a E8B1E2FF call bswap_32
+ 2895 FF
+ 2896 1d4f 4189C5 movl %eax, %r13d
+ 2897 1d52 8B8578D7 movl -10376(%rbp), %eax
+ 2897 FFFF
+ 2898 1d58 89C7 movl %eax, %edi
+ 2899 1d5a E8A1E2FF call bswap_32
+ 2899 FF
+ 2900 1d5f 4189C4 movl %eax, %r12d
+ 2901 1d62 8B8574D7 movl -10380(%rbp), %eax
+ 2901 FFFF
+ 2902 1d68 89C7 movl %eax, %edi
+ 2903 1d6a E891E2FF call bswap_32
+ 2903 FF
+ 2904 1d6f 89C3 movl %eax, %ebx
+ 2905 1d71 8B8570D7 movl -10384(%rbp), %eax
+ 2905 FFFF
+ 2906 1d77 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 115
+
+
+ 2907 1d79 E882E2FF call bswap_32
+ 2907 FF
+ 2908 1d7e 4589E9 movl %r13d, %r9d
+ 2909 1d81 4589E0 movl %r12d, %r8d
+ 2910 1d84 89D9 movl %ebx, %ecx
+ 2911 1d86 89C2 movl %eax, %edx
+ 2912 1d88 488D3500 leaq .LC0(%rip), %rsi
+ 2912 000000
+ 2913 1d8f 488D3D00 leaq .LC1(%rip), %rdi
+ 2913 000000
+ 2914 1d96 B8000000 movl $0, %eax
+ 2914 00
+ 2915 1d9b E8000000 call KDbgMsg at PLT
+ 2915 00
+ 2916 .L37:
+ 2917 1da0 660F6F85 movdqa -10976(%rbp), %xmm0
+ 2917 20D5FFFF
+ 2918 1da8 F30F7F85 movdqu %xmm0, -6400(%rbp)
+ 2918 00E7FFFF
+ 2919 .LBE922:
+ 2920 .LBB923:
+ 2921 .LBB924:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2922 .loc 2 667 0
+ 2923 1db0 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 2923 00000000
+ 2924 1db8 F30F6F8D movdqu -6400(%rbp), %xmm1
+ 2924 00E7FFFF
+ 2925 1dc0 F30F7F8D movdqu %xmm1, -6368(%rbp)
+ 2925 20E7FFFF
+ 2926 1dc8 F30F7F85 movdqu %xmm0, -6384(%rbp)
+ 2926 10E7FFFF
+ 2927 1dd0 F30F6F85 movdqu -6368(%rbp), %xmm0
+ 2927 20E7FFFF
+ 2928 1dd8 F30F7F85 movdqu %xmm0, -6336(%rbp)
+ 2928 40E7FFFF
+ 2929 1de0 F30F6F85 movdqu -6384(%rbp), %xmm0
+ 2929 10E7FFFF
+ 2930 1de8 F30F7F85 movdqu %xmm0, -6352(%rbp)
+ 2930 30E7FFFF
+ 2931 .LBB925:
+ 2932 .LBB926:
+ 2933 .LBB927:
+ 2934 .LBB928:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2935 .loc 3 529 0
+ 2936 1df0 F30F6F8D movdqu -6352(%rbp), %xmm1
+ 2936 30E7FFFF
+ 2937 1df8 F30F6F85 movdqu -6336(%rbp), %xmm0
+ 2937 40E7FFFF
+ 2938 1e00 660F3800 pshufb %xmm1, %xmm0
+ 2938 C1
+ 2939 .LBE928:
+ 2940 .LBE927:
+ 2941 .LBE926:
+ 2942 .LBE925:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+
GAS LISTING /tmp/ccjbMjHD.s page 116
+
+
+ 2943 .loc 2 667 0
+ 2944 1e05 F30F7F85 movdqu %xmm0, -6400(%rbp)
+ 2944 00E7FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 2945 .loc 2 668 0
+ 2946 1e0d F30F6F85 movdqu -6400(%rbp), %xmm0
+ 2946 00E7FFFF
+ 2947 .LBE924:
+ 2948 .LBE923:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 2949 .loc 2 1684 0
+ 2950 1e15 660F7F85 movdqa %xmm0, -10976(%rbp)
+ 2950 20D5FFFF
+ 2951 .LBB929:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 2952 .loc 2 1685 0
+ 2953 1e1d 660F6F85 movdqa -10976(%rbp), %xmm0
+ 2953 20D5FFFF
+ 2954 1e25 F30F7F85 movdqu %xmm0, -10400(%rbp)
+ 2954 60D7FFFF
+ 2955 1e2d E8000000 call KDbgWriterGet at PLT
+ 2955 00
+ 2956 1e32 4885C0 testq %rax, %rax
+ 2957 1e35 7479 je .L39
+ 2958 1e37 BF010000 movl $1, %edi
+ 2958 00
+ 2959 1e3c E8000000 call KDbgCondToFlag at PLT
+ 2959 00
+ 2960 1e41 4889C6 movq %rax, %rsi
+ 2961 1e44 BF100000 movl $16, %edi
+ 2961 00
+ 2962 1e49 E8000000 call KDbgTestModConds at PLT
+ 2962 00
+ 2963 1e4e 84C0 testb %al, %al
+ 2964 1e50 745E je .L39
+ 2965 1e52 8B856CD7 movl -10388(%rbp), %eax
+ 2965 FFFF
+ 2966 1e58 89C7 movl %eax, %edi
+ 2967 1e5a E8A1E1FF call bswap_32
+ 2967 FF
+ 2968 1e5f 4189C5 movl %eax, %r13d
+ 2969 1e62 8B8568D7 movl -10392(%rbp), %eax
+ 2969 FFFF
+ 2970 1e68 89C7 movl %eax, %edi
+ 2971 1e6a E891E1FF call bswap_32
+ 2971 FF
+ 2972 1e6f 4189C4 movl %eax, %r12d
+ 2973 1e72 8B8564D7 movl -10396(%rbp), %eax
+ 2973 FFFF
+ 2974 1e78 89C7 movl %eax, %edi
+ 2975 1e7a E881E1FF call bswap_32
+ 2975 FF
+ 2976 1e7f 89C3 movl %eax, %ebx
+ 2977 1e81 8B8560D7 movl -10400(%rbp), %eax
+ 2977 FFFF
+ 2978 1e87 89C7 movl %eax, %edi
+ 2979 1e89 E872E1FF call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 117
+
+
+ 2979 FF
+ 2980 1e8e 4589E9 movl %r13d, %r9d
+ 2981 1e91 4589E0 movl %r12d, %r8d
+ 2982 1e94 89D9 movl %ebx, %ecx
+ 2983 1e96 89C2 movl %eax, %edx
+ 2984 1e98 488D3500 leaq .LC2(%rip), %rsi
+ 2984 000000
+ 2985 1e9f 488D3D00 leaq .LC1(%rip), %rdi
+ 2985 000000
+ 2986 1ea6 B8000000 movl $0, %eax
+ 2986 00
+ 2987 1eab E8000000 call KDbgMsg at PLT
+ 2987 00
+ 2988 .L39:
+ 2989 1eb0 660F6F85 movdqa -10976(%rbp), %xmm0
+ 2989 20D5FFFF
+ 2990 1eb8 F30F7F85 movdqu %xmm0, -6304(%rbp)
+ 2990 60E7FFFF
+ 2991 1ec0 660F6F85 movdqa -10960(%rbp), %xmm0
+ 2991 30D5FFFF
+ 2992 1ec8 F30F7F85 movdqu %xmm0, -6320(%rbp)
+ 2992 50E7FFFF
+ 2993 .LBE929:
+ 2994 .LBB930:
+ 2995 .LBB931:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 2996 .loc 2 178 0
+ 2997 1ed0 F30F6F85 movdqu -6320(%rbp), %xmm0
+ 2997 50E7FFFF
+ 2998 1ed8 F30F6F8D movdqu -6304(%rbp), %xmm1
+ 2998 60E7FFFF
+ 2999 1ee0 660FEFC1 pxor %xmm1, %xmm0
+ 3000 .LBE931:
+ 3001 .LBE930:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 3002 .loc 2 1686 0
+ 3003 1ee4 660F7F85 movdqa %xmm0, -10976(%rbp)
+ 3003 20D5FFFF
+ 3004 .LBB932:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 3005 .loc 2 1687 0
+ 3006 1eec 660F6F85 movdqa -10976(%rbp), %xmm0
+ 3006 20D5FFFF
+ 3007 1ef4 F30F7F85 movdqu %xmm0, -10416(%rbp)
+ 3007 50D7FFFF
+ 3008 1efc E8000000 call KDbgWriterGet at PLT
+ 3008 00
+ 3009 1f01 4885C0 testq %rax, %rax
+ 3010 1f04 7479 je .L41
+ 3011 1f06 BF010000 movl $1, %edi
+ 3011 00
+ 3012 1f0b E8000000 call KDbgCondToFlag at PLT
+ 3012 00
+ 3013 1f10 4889C6 movq %rax, %rsi
+ 3014 1f13 BF100000 movl $16, %edi
+ 3014 00
+ 3015 1f18 E8000000 call KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 118
+
+
+ 3015 00
+ 3016 1f1d 84C0 testb %al, %al
+ 3017 1f1f 745E je .L41
+ 3018 1f21 8B855CD7 movl -10404(%rbp), %eax
+ 3018 FFFF
+ 3019 1f27 89C7 movl %eax, %edi
+ 3020 1f29 E8D2E0FF call bswap_32
+ 3020 FF
+ 3021 1f2e 4189C5 movl %eax, %r13d
+ 3022 1f31 8B8558D7 movl -10408(%rbp), %eax
+ 3022 FFFF
+ 3023 1f37 89C7 movl %eax, %edi
+ 3024 1f39 E8C2E0FF call bswap_32
+ 3024 FF
+ 3025 1f3e 4189C4 movl %eax, %r12d
+ 3026 1f41 8B8554D7 movl -10412(%rbp), %eax
+ 3026 FFFF
+ 3027 1f47 89C7 movl %eax, %edi
+ 3028 1f49 E8B2E0FF call bswap_32
+ 3028 FF
+ 3029 1f4e 89C3 movl %eax, %ebx
+ 3030 1f50 8B8550D7 movl -10416(%rbp), %eax
+ 3030 FFFF
+ 3031 1f56 89C7 movl %eax, %edi
+ 3032 1f58 E8A3E0FF call bswap_32
+ 3032 FF
+ 3033 1f5d 4589E9 movl %r13d, %r9d
+ 3034 1f60 4589E0 movl %r12d, %r8d
+ 3035 1f63 89D9 movl %ebx, %ecx
+ 3036 1f65 89C2 movl %eax, %edx
+ 3037 1f67 488D3500 leaq .LC3(%rip), %rsi
+ 3037 000000
+ 3038 1f6e 488D3D00 leaq .LC1(%rip), %rdi
+ 3038 000000
+ 3039 1f75 B8000000 movl $0, %eax
+ 3039 00
+ 3040 1f7a E8000000 call KDbgMsg at PLT
+ 3040 00
+ 3041 .L41:
+ 3042 1f7f 660F6F85 movdqa -10976(%rbp), %xmm0
+ 3042 20D5FFFF
+ 3043 1f87 F30F7F85 movdqu %xmm0, -6288(%rbp)
+ 3043 70E7FFFF
+ 3044 1f8f F30F6F85 movdqu -6288(%rbp), %xmm0
+ 3044 70E7FFFF
+ 3045 1f97 F30F7F85 movdqu %xmm0, -6256(%rbp)
+ 3045 90E7FFFF
+ 3046 .LBE932:
+ 3047 .LBB933:
+ 3048 .LBB934:
+ 3049 .LBB935:
+ 3050 .LBB936:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3051 .loc 3 450 0
+ 3052 1f9f F30F6F85 movdqu -6256(%rbp), %xmm0
+ 3052 90E7FFFF
+ 3053 1fa7 660F70C0 pshufd $255, %xmm0, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 119
+
+
+ 3053 FF
+ 3054 .LBE936:
+ 3055 .LBE935:
+ 3056 .LBE934:
+ 3057 .LBE933:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 3058 .loc 2 1688 0
+ 3059 1fac 660F7F85 movdqa %xmm0, -10976(%rbp)
+ 3059 20D5FFFF
+ 3060 .LBB937:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 3061 .loc 2 1689 0
+ 3062 1fb4 660F6F85 movdqa -10976(%rbp), %xmm0
+ 3062 20D5FFFF
+ 3063 1fbc F30F7F85 movdqu %xmm0, -10432(%rbp)
+ 3063 40D7FFFF
+ 3064 1fc4 E8000000 call KDbgWriterGet at PLT
+ 3064 00
+ 3065 1fc9 4885C0 testq %rax, %rax
+ 3066 1fcc 7479 je .L43
+ 3067 1fce BF010000 movl $1, %edi
+ 3067 00
+ 3068 1fd3 E8000000 call KDbgCondToFlag at PLT
+ 3068 00
+ 3069 1fd8 4889C6 movq %rax, %rsi
+ 3070 1fdb BF100000 movl $16, %edi
+ 3070 00
+ 3071 1fe0 E8000000 call KDbgTestModConds at PLT
+ 3071 00
+ 3072 1fe5 84C0 testb %al, %al
+ 3073 1fe7 745E je .L43
+ 3074 1fe9 8B854CD7 movl -10420(%rbp), %eax
+ 3074 FFFF
+ 3075 1fef 89C7 movl %eax, %edi
+ 3076 1ff1 E80AE0FF call bswap_32
+ 3076 FF
+ 3077 1ff6 4189C5 movl %eax, %r13d
+ 3078 1ff9 8B8548D7 movl -10424(%rbp), %eax
+ 3078 FFFF
+ 3079 1fff 89C7 movl %eax, %edi
+ 3080 2001 E8FADFFF call bswap_32
+ 3080 FF
+ 3081 2006 4189C4 movl %eax, %r12d
+ 3082 2009 8B8544D7 movl -10428(%rbp), %eax
+ 3082 FFFF
+ 3083 200f 89C7 movl %eax, %edi
+ 3084 2011 E8EADFFF call bswap_32
+ 3084 FF
+ 3085 2016 89C3 movl %eax, %ebx
+ 3086 2018 8B8540D7 movl -10432(%rbp), %eax
+ 3086 FFFF
+ 3087 201e 89C7 movl %eax, %edi
+ 3088 2020 E8DBDFFF call bswap_32
+ 3088 FF
+ 3089 2025 4589E9 movl %r13d, %r9d
+ 3090 2028 4589E0 movl %r12d, %r8d
+ 3091 202b 89D9 movl %ebx, %ecx
+
GAS LISTING /tmp/ccjbMjHD.s page 120
+
+
+ 3092 202d 89C2 movl %eax, %edx
+ 3093 202f 488D3500 leaq .LC4(%rip), %rsi
+ 3093 000000
+ 3094 2036 488D3D00 leaq .LC1(%rip), %rdi
+ 3094 000000
+ 3095 203d B8000000 movl $0, %eax
+ 3095 00
+ 3096 2042 E8000000 call KDbgMsg at PLT
+ 3096 00
+ 3097 .L43:
+ 3098 .LBE937:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 3099 .loc 2 1690 0
+ 3100 2047 660F6F85 movdqa -10976(%rbp), %xmm0
+ 3100 20D5FFFF
+ 3101 .LBE891:
+ 3102 .LBE890:
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x08,4);
+ 3103 .loc 2 1747 0
+ 3104 204f F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 3104 10D9FFFF
+ 3105 2057 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 3105 00D9FFFF
+ 3106 205f F30F7F85 movdqu %xmm0, -6240(%rbp)
+ 3106 A0E7FFFF
+ 3107 .LBB938:
+ 3108 .LBB939:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 3109 .loc 2 1565 0
+ 3110 2067 F30F6F85 movdqu -6240(%rbp), %xmm0
+ 3110 A0E7FFFF
+ 3111 206f 660F7F85 movdqa %xmm0, -10944(%rbp)
+ 3111 40D5FFFF
+ 3112 2077 660F6F85 movdqa -10944(%rbp), %xmm0
+ 3112 40D5FFFF
+ 3113 207f F30F7F85 movdqu %xmm0, -6224(%rbp)
+ 3113 B0E7FFFF
+ 3114 .LBB940:
+ 3115 .LBB941:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3116 .loc 2 1278 0
+ 3117 2087 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 3117 00000000
+ 3118 208f F30F6F8D movdqu -6224(%rbp), %xmm1
+ 3118 B0E7FFFF
+ 3119 2097 F30F7F8D movdqu %xmm1, -6192(%rbp)
+ 3119 D0E7FFFF
+ 3120 209f F30F7F85 movdqu %xmm0, -6208(%rbp)
+ 3120 C0E7FFFF
+ 3121 20a7 F30F6F85 movdqu -6192(%rbp), %xmm0
+ 3121 D0E7FFFF
+ 3122 20af F30F7F85 movdqu %xmm0, -6160(%rbp)
+ 3122 F0E7FFFF
+ 3123 20b7 F30F6F85 movdqu -6208(%rbp), %xmm0
+ 3123 C0E7FFFF
+ 3124 20bf F30F7F85 movdqu %xmm0, -6176(%rbp)
+ 3124 E0E7FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 121
+
+
+ 3125 .LBB942:
+ 3126 .LBB943:
+ 3127 .LBB944:
+ 3128 .LBB945:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3129 .loc 3 529 0
+ 3130 20c7 F30F6F8D movdqu -6176(%rbp), %xmm1
+ 3130 E0E7FFFF
+ 3131 20cf F30F6F85 movdqu -6160(%rbp), %xmm0
+ 3131 F0E7FFFF
+ 3132 20d7 660F3800 pshufb %xmm1, %xmm0
+ 3132 C1
+ 3133 .LBE945:
+ 3134 .LBE944:
+ 3135 .LBE943:
+ 3136 .LBE942:
+ 3137 .LBE941:
+ 3138 .LBE940:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3139 .loc 2 1567 0
+ 3140 20dc 660F7F85 movdqa %xmm0, -10944(%rbp)
+ 3140 40D5FFFF
+ 3141 20e4 660F6F85 movdqa -10944(%rbp), %xmm0
+ 3141 40D5FFFF
+ 3142 20ec 660FEF85 pxor -6240(%rbp), %xmm0
+ 3142 A0E7FFFF
+ 3143 20f4 F30F7F85 movdqu %xmm0, -6240(%rbp)
+ 3143 A0E7FFFF
+ 3144 20fc 660F6F85 movdqa -10944(%rbp), %xmm0
+ 3144 40D5FFFF
+ 3145 2104 F30F7F85 movdqu %xmm0, -6144(%rbp)
+ 3145 00E8FFFF
+ 3146 .LBB946:
+ 3147 .LBB947:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3148 .loc 2 1278 0
+ 3149 210c 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 3149 00000000
+ 3150 2114 F30F6F8D movdqu -6144(%rbp), %xmm1
+ 3150 00E8FFFF
+ 3151 211c F30F7F8D movdqu %xmm1, -6112(%rbp)
+ 3151 20E8FFFF
+ 3152 2124 F30F7F85 movdqu %xmm0, -6128(%rbp)
+ 3152 10E8FFFF
+ 3153 212c F30F6F85 movdqu -6112(%rbp), %xmm0
+ 3153 20E8FFFF
+ 3154 2134 F30F7F85 movdqu %xmm0, -6080(%rbp)
+ 3154 40E8FFFF
+ 3155 213c F30F6F85 movdqu -6128(%rbp), %xmm0
+ 3155 10E8FFFF
+ 3156 2144 F30F7F85 movdqu %xmm0, -6096(%rbp)
+ 3156 30E8FFFF
+ 3157 .LBB948:
+ 3158 .LBB949:
+ 3159 .LBB950:
+ 3160 .LBB951:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccjbMjHD.s page 122
+
+
+ 3161 .loc 3 529 0
+ 3162 214c F30F6F8D movdqu -6096(%rbp), %xmm1
+ 3162 30E8FFFF
+ 3163 2154 F30F6F85 movdqu -6080(%rbp), %xmm0
+ 3163 40E8FFFF
+ 3164 215c 660F3800 pshufb %xmm1, %xmm0
+ 3164 C1
+ 3165 .LBE951:
+ 3166 .LBE950:
+ 3167 .LBE949:
+ 3168 .LBE948:
+ 3169 .LBE947:
+ 3170 .LBE946:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3171 .loc 2 1568 0
+ 3172 2161 660F7F85 movdqa %xmm0, -10944(%rbp)
+ 3172 40D5FFFF
+ 3173 2169 660F6F85 movdqa -10944(%rbp), %xmm0
+ 3173 40D5FFFF
+ 3174 2171 660FEF85 pxor -6240(%rbp), %xmm0
+ 3174 A0E7FFFF
+ 3175 2179 F30F7F85 movdqu %xmm0, -6240(%rbp)
+ 3175 A0E7FFFF
+ 3176 2181 660F6F85 movdqa -10944(%rbp), %xmm0
+ 3176 40D5FFFF
+ 3177 2189 F30F7F85 movdqu %xmm0, -6064(%rbp)
+ 3177 50E8FFFF
+ 3178 .LBB952:
+ 3179 .LBB953:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3180 .loc 2 1278 0
+ 3181 2191 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 3181 00000000
+ 3182 2199 F30F6F8D movdqu -6064(%rbp), %xmm1
+ 3182 50E8FFFF
+ 3183 21a1 F30F7F8D movdqu %xmm1, -6032(%rbp)
+ 3183 70E8FFFF
+ 3184 21a9 F30F7F85 movdqu %xmm0, -6048(%rbp)
+ 3184 60E8FFFF
+ 3185 21b1 F30F6F85 movdqu -6032(%rbp), %xmm0
+ 3185 70E8FFFF
+ 3186 21b9 F30F7F85 movdqu %xmm0, -6000(%rbp)
+ 3186 90E8FFFF
+ 3187 21c1 F30F6F85 movdqu -6048(%rbp), %xmm0
+ 3187 60E8FFFF
+ 3188 21c9 F30F7F85 movdqu %xmm0, -6016(%rbp)
+ 3188 80E8FFFF
+ 3189 .LBB954:
+ 3190 .LBB955:
+ 3191 .LBB956:
+ 3192 .LBB957:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3193 .loc 3 529 0
+ 3194 21d1 F30F6F8D movdqu -6016(%rbp), %xmm1
+ 3194 80E8FFFF
+ 3195 21d9 F30F6F85 movdqu -6000(%rbp), %xmm0
+ 3195 90E8FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 123
+
+
+ 3196 21e1 660F3800 pshufb %xmm1, %xmm0
+ 3196 C1
+ 3197 .LBE957:
+ 3198 .LBE956:
+ 3199 .LBE955:
+ 3200 .LBE954:
+ 3201 .LBE953:
+ 3202 .LBE952:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3203 .loc 2 1569 0
+ 3204 21e6 660F7F85 movdqa %xmm0, -10944(%rbp)
+ 3204 40D5FFFF
+ 3205 21ee 660F6F85 movdqa -10944(%rbp), %xmm0
+ 3205 40D5FFFF
+ 3206 21f6 660FEF85 pxor -6240(%rbp), %xmm0
+ 3206 A0E7FFFF
+ 3207 21fe F30F7F85 movdqu %xmm0, -6240(%rbp)
+ 3207 A0E7FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3208 .loc 2 1571 0
+ 3209 2206 F30F6F85 movdqu -6240(%rbp), %xmm0
+ 3209 A0E7FFFF
+ 3210 .LBE939:
+ 3211 .LBE938:
+ 3212 .loc 2 1747 0
+ 3213 220e F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 3213 00D9FFFF
+ 3214 2216 F30F6F85 movdqu -9968(%rbp), %xmm0
+ 3214 10D9FFFF
+ 3215 221e F30F6F8D movdqu -9984(%rbp), %xmm1
+ 3215 00D9FFFF
+ 3216 2226 660FEFC1 pxor %xmm1, %xmm0
+ 3217 222a F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 3217 00D9FFFF
+ 3218 2232 488B8578 movq -10632(%rbp), %rax
+ 3218 D6FFFF
+ 3219 2239 4883C040 addq $64, %rax
+ 3220 223d F30F6F85 movdqu -9984(%rbp), %xmm0
+ 3220 00D9FFFF
+ 3221 2245 F30F7F00 movdqu %xmm0, (%rax)
+ 3222 2249 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 3222 00D9FFFF
+ 3223 2251 F30F7F85 movdqu %xmm0, -5968(%rbp)
+ 3223 B0E8FFFF
+ 3224 .LBB958:
+ 3225 .LBB959:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3226 .loc 2 1681 0
+ 3227 2259 B8100000 movl $16, %eax
+ 3227 00
+ 3228 225e 660F6F05 movdqa vec_00(%rip), %xmm0
+ 3228 00000000
+ 3229 2266 F30F7F85 movdqu %xmm0, -5936(%rbp)
+ 3229 D0E8FFFF
+ 3230 226e 8985CCE8 movl %eax, -5940(%rbp)
+ 3230 FFFF
+ 3231 2274 F30F6F85 movdqu -5936(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 124
+
+
+ 3231 D0E8FFFF
+ 3232 227c F30F7F85 movdqu %xmm0, -5904(%rbp)
+ 3232 F0E8FFFF
+ 3233 2284 8B85CCE8 movl -5940(%rbp), %eax
+ 3233 FFFF
+ 3234 228a 8985ECE8 movl %eax, -5908(%rbp)
+ 3234 FFFF
+ 3235 .LBB960:
+ 3236 .LBB961:
+ 3237 .LBB962:
+ 3238 .LBB963:
+ 3239 .loc 3 598 0
+ 3240 2290 8B85ECE8 movl -5908(%rbp), %eax
+ 3240 FFFF
+ 3241 2296 F30F6F85 movdqu -5904(%rbp), %xmm0
+ 3241 F0E8FFFF
+ 3242 229e 660F3A22 pinsrd $3, %eax, %xmm0
+ 3242 C003
+ 3243 .LBE963:
+ 3244 .LBE962:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 3245 .loc 2 519 0
+ 3246 22a4 F30F7F85 movdqu %xmm0, -5936(%rbp)
+ 3246 D0E8FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3247 .loc 2 526 0
+ 3248 22ac F30F6F85 movdqu -5936(%rbp), %xmm0
+ 3248 D0E8FFFF
+ 3249 .LBE961:
+ 3250 .LBE960:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3251 .loc 2 1681 0
+ 3252 22b4 660F7F85 movdqa %xmm0, -10912(%rbp)
+ 3252 60D5FFFF
+ 3253 22bc F30F6F85 movdqu -5968(%rbp), %xmm0
+ 3253 B0E8FFFF
+ 3254 22c4 F30F7F85 movdqu %xmm0, -5888(%rbp)
+ 3254 00E9FFFF
+ 3255 22cc F30F6F85 movdqu -5888(%rbp), %xmm0
+ 3255 00E9FFFF
+ 3256 22d4 F30F7F85 movdqu %xmm0, -5856(%rbp)
+ 3256 20E9FFFF
+ 3257 22dc 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 3257 000000
+ 3258 22e3 48898518 movq %rax, -5864(%rbp)
+ 3258 E9FFFF
+ 3259 .LBB964:
+ 3260 .LBB965:
+ 3261 .LBB966:
+ 3262 .LBB967:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 3263 .loc 2 851 0
+ 3264 22ea 660F6F05 movdqa vec_00(%rip), %xmm0
+ 3264 00000000
+ 3265 22f2 F30F7F85 movdqu %xmm0, -5824(%rbp)
+ 3265 40E9FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+
GAS LISTING /tmp/ccjbMjHD.s page 125
+
+
+ 3266 .loc 2 854 0
+ 3267 22fa 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 3267 00000000
+ 3268 2302 F30F6F8D movdqu -5856(%rbp), %xmm1
+ 3268 20E9FFFF
+ 3269 230a F30F7F8D movdqu %xmm1, -5744(%rbp)
+ 3269 90E9FFFF
+ 3270 2312 F30F7F85 movdqu %xmm0, -5760(%rbp)
+ 3270 80E9FFFF
+ 3271 .LBB968:
+ 3272 .LBB969:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 3273 .loc 2 206 0
+ 3274 231a F30F6F85 movdqu -5760(%rbp), %xmm0
+ 3274 80E9FFFF
+ 3275 2322 F30F6F8D movdqu -5744(%rbp), %xmm1
+ 3275 90E9FFFF
+ 3276 232a 660FDBC1 pand %xmm1, %xmm0
+ 3277 .LBE969:
+ 3278 .LBE968:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3279 .loc 2 854 0
+ 3280 232e F30F7F85 movdqu %xmm0, -5776(%rbp)
+ 3280 70E9FFFF
+ 3281 2336 F30F6F85 movdqu -5856(%rbp), %xmm0
+ 3281 20E9FFFF
+ 3282 233e F30F7F85 movdqu %xmm0, -5712(%rbp)
+ 3282 B0E9FFFF
+ 3283 .LBB970:
+ 3284 .LBB971:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 3285 .loc 3 433 0
+ 3286 2346 F30F6F85 movdqu -5712(%rbp), %xmm0
+ 3286 B0E9FFFF
+ 3287 234e 660F72D0 psrld $4, %xmm0
+ 3287 04
+ 3288 .LBE971:
+ 3289 .LBE970:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 3290 .loc 2 857 0
+ 3291 2353 F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 3291 60E9FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3292 .loc 2 859 0
+ 3293 235b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 3293 00000000
+ 3294 2363 F30F6F8D movdqu -5792(%rbp), %xmm1
+ 3294 60E9FFFF
+ 3295 236b F30F7F8D movdqu %xmm1, -5680(%rbp)
+ 3295 D0E9FFFF
+ 3296 2373 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 3296 C0E9FFFF
+ 3297 .LBB972:
+ 3298 .LBB973:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 3299 .loc 2 206 0
+ 3300 237b F30F6F85 movdqu -5696(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 126
+
+
+ 3300 C0E9FFFF
+ 3301 2383 F30F6F8D movdqu -5680(%rbp), %xmm1
+ 3301 D0E9FFFF
+ 3302 238b 660FDBC1 pand %xmm1, %xmm0
+ 3303 .LBE973:
+ 3304 .LBE972:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3305 .loc 2 859 0
+ 3306 238f F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 3306 60E9FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 3307 .loc 2 866 0
+ 3308 2397 C7853CE9 movl $0, -5828(%rbp)
+ 3308 FFFF0000
+ 3308 0000
+ 3309 23a1 E9BE0100 jmp .L44
+ 3309 00
+ 3310 .L45:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3311 .loc 2 868 0
+ 3312 23a6 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 3312 00000000
+ 3313 23ae F30F7F85 movdqu %xmm0, -5648(%rbp)
+ 3313 F0E9FFFF
+ 3314 23b6 F30F6F85 movdqu -5792(%rbp), %xmm0
+ 3314 60E9FFFF
+ 3315 23be F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 3315 E0E9FFFF
+ 3316 23c6 F30F6F85 movdqu -5648(%rbp), %xmm0
+ 3316 F0E9FFFF
+ 3317 23ce F30F7F85 movdqu %xmm0, -5616(%rbp)
+ 3317 10EAFFFF
+ 3318 23d6 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 3318 E0E9FFFF
+ 3319 23de F30F7F85 movdqu %xmm0, -5632(%rbp)
+ 3319 00EAFFFF
+ 3320 .LBB974:
+ 3321 .LBB975:
+ 3322 .LBB976:
+ 3323 .LBB977:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3324 .loc 3 529 0
+ 3325 23e6 F30F6F8D movdqu -5632(%rbp), %xmm1
+ 3325 00EAFFFF
+ 3326 23ee F30F6F85 movdqu -5616(%rbp), %xmm0
+ 3326 10EAFFFF
+ 3327 23f6 660F3800 pshufb %xmm1, %xmm0
+ 3327 C1
+ 3328 .LBE977:
+ 3329 .LBE976:
+ 3330 .LBE975:
+ 3331 .LBE974:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3332 .loc 2 868 0
+ 3333 23fb F30F7F85 movdqu %xmm0, -5808(%rbp)
+ 3333 50E9FFFF
+ 3334 2403 F30F6F85 movdqu -5776(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 127
+
+
+ 3334 70E9FFFF
+ 3335 240b F30F7F85 movdqu %xmm0, -5584(%rbp)
+ 3335 30EAFFFF
+ 3336 2413 F30F6F85 movdqu -5808(%rbp), %xmm0
+ 3336 50E9FFFF
+ 3337 241b F30F7F85 movdqu %xmm0, -5600(%rbp)
+ 3337 20EAFFFF
+ 3338 .LBB978:
+ 3339 .LBB979:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 3340 .loc 2 234 0
+ 3341 2423 F30F6F85 movdqu -5600(%rbp), %xmm0
+ 3341 20EAFFFF
+ 3342 242b F30F6F8D movdqu -5584(%rbp), %xmm1
+ 3342 30EAFFFF
+ 3343 2433 660FEBC1 por %xmm1, %xmm0
+ 3344 .LBE979:
+ 3345 .LBE978:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 3346 .loc 2 870 0
+ 3347 2437 F30F7F85 movdqu %xmm0, -5808(%rbp)
+ 3347 50E9FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3348 .loc 2 872 0
+ 3349 243f 8B853CE9 mov -5828(%rbp), %eax
+ 3349 FFFF
+ 3350 2445 48C1E004 salq $4, %rax
+ 3351 2449 48038518 addq -5864(%rbp), %rax
+ 3351 E9FFFF
+ 3352 2450 660F6F00 movdqa (%rax), %xmm0
+ 3353 2454 F30F7F85 movdqu %xmm0, -5552(%rbp)
+ 3353 50EAFFFF
+ 3354 245c F30F6F85 movdqu -5808(%rbp), %xmm0
+ 3354 50E9FFFF
+ 3355 2464 F30F7F85 movdqu %xmm0, -5568(%rbp)
+ 3355 40EAFFFF
+ 3356 246c F30F6F85 movdqu -5552(%rbp), %xmm0
+ 3356 50EAFFFF
+ 3357 2474 F30F7F85 movdqu %xmm0, -5520(%rbp)
+ 3357 70EAFFFF
+ 3358 247c F30F6F85 movdqu -5568(%rbp), %xmm0
+ 3358 40EAFFFF
+ 3359 2484 F30F7F85 movdqu %xmm0, -5536(%rbp)
+ 3359 60EAFFFF
+ 3360 .LBB980:
+ 3361 .LBB981:
+ 3362 .LBB982:
+ 3363 .LBB983:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3364 .loc 3 529 0
+ 3365 248c F30F6F8D movdqu -5536(%rbp), %xmm1
+ 3365 60EAFFFF
+ 3366 2494 F30F6F85 movdqu -5520(%rbp), %xmm0
+ 3366 70EAFFFF
+ 3367 249c 660F3800 pshufb %xmm1, %xmm0
+ 3367 C1
+ 3368 .LBE983:
+
GAS LISTING /tmp/ccjbMjHD.s page 128
+
+
+ 3369 .LBE982:
+ 3370 .LBE981:
+ 3371 .LBE980:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3372 .loc 2 872 0
+ 3373 24a1 F30F7F85 movdqu %xmm0, -5808(%rbp)
+ 3373 50E9FFFF
+ 3374 24a9 F30F6F85 movdqu -5824(%rbp), %xmm0
+ 3374 40E9FFFF
+ 3375 24b1 F30F7F85 movdqu %xmm0, -5488(%rbp)
+ 3375 90EAFFFF
+ 3376 24b9 F30F6F85 movdqu -5808(%rbp), %xmm0
+ 3376 50E9FFFF
+ 3377 24c1 F30F7F85 movdqu %xmm0, -5504(%rbp)
+ 3377 80EAFFFF
+ 3378 .LBB984:
+ 3379 .LBB985:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 3380 .loc 2 234 0
+ 3381 24c9 F30F6F85 movdqu -5504(%rbp), %xmm0
+ 3381 80EAFFFF
+ 3382 24d1 F30F6F8D movdqu -5488(%rbp), %xmm1
+ 3382 90EAFFFF
+ 3383 24d9 660FEBC1 por %xmm1, %xmm0
+ 3384 .LBE985:
+ 3385 .LBE984:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 3386 .loc 2 874 0
+ 3387 24dd F30F7F85 movdqu %xmm0, -5824(%rbp)
+ 3387 40E9FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3388 .loc 2 876 0
+ 3389 24e5 660F6F05 movdqa vec_01(%rip), %xmm0
+ 3389 00000000
+ 3390 24ed F30F6F8D movdqu -5792(%rbp), %xmm1
+ 3390 60E9FFFF
+ 3391 24f5 F30F7F8D movdqu %xmm1, -5456(%rbp)
+ 3391 B0EAFFFF
+ 3392 24fd F30F7F85 movdqu %xmm0, -5472(%rbp)
+ 3392 A0EAFFFF
+ 3393 .LBB986:
+ 3394 .LBB987:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 3395 .loc 2 290 0
+ 3396 2505 F30F6F8D movdqu -5472(%rbp), %xmm1
+ 3396 A0EAFFFF
+ 3397 250d F30F6F85 movdqu -5456(%rbp), %xmm0
+ 3397 B0EAFFFF
+ 3398 2515 660FF8C1 psubb %xmm1, %xmm0
+ 3399 .LBE987:
+ 3400 .LBE986:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3401 .loc 2 876 0
+ 3402 2519 F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 3402 60E9FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3403 .loc 2 878 0
+
GAS LISTING /tmp/ccjbMjHD.s page 129
+
+
+ 3404 2521 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 3404 00000000
+ 3405 2529 F30F6F8D movdqu -5792(%rbp), %xmm1
+ 3405 60E9FFFF
+ 3406 2531 F30F7F8D movdqu %xmm1, -5424(%rbp)
+ 3406 D0EAFFFF
+ 3407 2539 F30F7F85 movdqu %xmm0, -5440(%rbp)
+ 3407 C0EAFFFF
+ 3408 .LBB988:
+ 3409 .LBB989:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 3410 .loc 2 206 0
+ 3411 2541 F30F6F85 movdqu -5440(%rbp), %xmm0
+ 3411 C0EAFFFF
+ 3412 2549 F30F6F8D movdqu -5424(%rbp), %xmm1
+ 3412 D0EAFFFF
+ 3413 2551 660FDBC1 pand %xmm1, %xmm0
+ 3414 .LBE989:
+ 3415 .LBE988:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3416 .loc 2 878 0
+ 3417 2555 F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 3417 60E9FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 3418 .loc 2 866 0
+ 3419 255d 83853CE9 addl $1, -5828(%rbp)
+ 3419 FFFF01
+ 3420 .L44:
+ 3421 2564 83BD3CE9 cmpl $15, -5828(%rbp)
+ 3421 FFFF0F
+ 3422 256b 0F8635FE jbe .L45
+ 3422 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 3423 .loc 2 882 0
+ 3424 2571 F30F6F85 movdqu -5824(%rbp), %xmm0
+ 3424 40E9FFFF
+ 3425 .LBE967:
+ 3426 .LBE966:
+ 3427 .LBE965:
+ 3428 .LBE964:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 3429 .loc 2 1682 0
+ 3430 2579 660F7F85 movdqa %xmm0, -10928(%rbp)
+ 3430 50D5FFFF
+ 3431 .LBB990:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 3432 .loc 2 1683 0
+ 3433 2581 660F6F85 movdqa -10928(%rbp), %xmm0
+ 3433 50D5FFFF
+ 3434 2589 F30F7F85 movdqu %xmm0, -10320(%rbp)
+ 3434 B0D7FFFF
+ 3435 2591 E8000000 call KDbgWriterGet at PLT
+ 3435 00
+ 3436 2596 4885C0 testq %rax, %rax
+ 3437 2599 7479 je .L47
+ 3438 259b BF010000 movl $1, %edi
+ 3438 00
+
GAS LISTING /tmp/ccjbMjHD.s page 130
+
+
+ 3439 25a0 E8000000 call KDbgCondToFlag at PLT
+ 3439 00
+ 3440 25a5 4889C6 movq %rax, %rsi
+ 3441 25a8 BF100000 movl $16, %edi
+ 3441 00
+ 3442 25ad E8000000 call KDbgTestModConds at PLT
+ 3442 00
+ 3443 25b2 84C0 testb %al, %al
+ 3444 25b4 745E je .L47
+ 3445 25b6 8B85BCD7 movl -10308(%rbp), %eax
+ 3445 FFFF
+ 3446 25bc 89C7 movl %eax, %edi
+ 3447 25be E83DDAFF call bswap_32
+ 3447 FF
+ 3448 25c3 4189C5 movl %eax, %r13d
+ 3449 25c6 8B85B8D7 movl -10312(%rbp), %eax
+ 3449 FFFF
+ 3450 25cc 89C7 movl %eax, %edi
+ 3451 25ce E82DDAFF call bswap_32
+ 3451 FF
+ 3452 25d3 4189C4 movl %eax, %r12d
+ 3453 25d6 8B85B4D7 movl -10316(%rbp), %eax
+ 3453 FFFF
+ 3454 25dc 89C7 movl %eax, %edi
+ 3455 25de E81DDAFF call bswap_32
+ 3455 FF
+ 3456 25e3 89C3 movl %eax, %ebx
+ 3457 25e5 8B85B0D7 movl -10320(%rbp), %eax
+ 3457 FFFF
+ 3458 25eb 89C7 movl %eax, %edi
+ 3459 25ed E80EDAFF call bswap_32
+ 3459 FF
+ 3460 25f2 4589E9 movl %r13d, %r9d
+ 3461 25f5 4589E0 movl %r12d, %r8d
+ 3462 25f8 89D9 movl %ebx, %ecx
+ 3463 25fa 89C2 movl %eax, %edx
+ 3464 25fc 488D3500 leaq .LC0(%rip), %rsi
+ 3464 000000
+ 3465 2603 488D3D00 leaq .LC1(%rip), %rdi
+ 3465 000000
+ 3466 260a B8000000 movl $0, %eax
+ 3466 00
+ 3467 260f E8000000 call KDbgMsg at PLT
+ 3467 00
+ 3468 .L47:
+ 3469 2614 660F6F85 movdqa -10928(%rbp), %xmm0
+ 3469 50D5FFFF
+ 3470 261c F30F7F85 movdqu %xmm0, -5408(%rbp)
+ 3470 E0EAFFFF
+ 3471 .LBE990:
+ 3472 .LBB991:
+ 3473 .LBB992:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3474 .loc 2 667 0
+ 3475 2624 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 3475 00000000
+ 3476 262c F30F6F8D movdqu -5408(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 131
+
+
+ 3476 E0EAFFFF
+ 3477 2634 F30F7F8D movdqu %xmm1, -5376(%rbp)
+ 3477 00EBFFFF
+ 3478 263c F30F7F85 movdqu %xmm0, -5392(%rbp)
+ 3478 F0EAFFFF
+ 3479 2644 F30F6F85 movdqu -5376(%rbp), %xmm0
+ 3479 00EBFFFF
+ 3480 264c F30F7F85 movdqu %xmm0, -5344(%rbp)
+ 3480 20EBFFFF
+ 3481 2654 F30F6F85 movdqu -5392(%rbp), %xmm0
+ 3481 F0EAFFFF
+ 3482 265c F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 3482 10EBFFFF
+ 3483 .LBB993:
+ 3484 .LBB994:
+ 3485 .LBB995:
+ 3486 .LBB996:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3487 .loc 3 529 0
+ 3488 2664 F30F6F8D movdqu -5360(%rbp), %xmm1
+ 3488 10EBFFFF
+ 3489 266c F30F6F85 movdqu -5344(%rbp), %xmm0
+ 3489 20EBFFFF
+ 3490 2674 660F3800 pshufb %xmm1, %xmm0
+ 3490 C1
+ 3491 .LBE996:
+ 3492 .LBE995:
+ 3493 .LBE994:
+ 3494 .LBE993:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3495 .loc 2 667 0
+ 3496 2679 F30F7F85 movdqu %xmm0, -5408(%rbp)
+ 3496 E0EAFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3497 .loc 2 668 0
+ 3498 2681 F30F6F85 movdqu -5408(%rbp), %xmm0
+ 3498 E0EAFFFF
+ 3499 .LBE992:
+ 3500 .LBE991:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 3501 .loc 2 1684 0
+ 3502 2689 660F7F85 movdqa %xmm0, -10928(%rbp)
+ 3502 50D5FFFF
+ 3503 .LBB997:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 3504 .loc 2 1685 0
+ 3505 2691 660F6F85 movdqa -10928(%rbp), %xmm0
+ 3505 50D5FFFF
+ 3506 2699 F30F7F85 movdqu %xmm0, -10336(%rbp)
+ 3506 A0D7FFFF
+ 3507 26a1 E8000000 call KDbgWriterGet at PLT
+ 3507 00
+ 3508 26a6 4885C0 testq %rax, %rax
+ 3509 26a9 7479 je .L49
+ 3510 26ab BF010000 movl $1, %edi
+ 3510 00
+ 3511 26b0 E8000000 call KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 132
+
+
+ 3511 00
+ 3512 26b5 4889C6 movq %rax, %rsi
+ 3513 26b8 BF100000 movl $16, %edi
+ 3513 00
+ 3514 26bd E8000000 call KDbgTestModConds at PLT
+ 3514 00
+ 3515 26c2 84C0 testb %al, %al
+ 3516 26c4 745E je .L49
+ 3517 26c6 8B85ACD7 movl -10324(%rbp), %eax
+ 3517 FFFF
+ 3518 26cc 89C7 movl %eax, %edi
+ 3519 26ce E82DD9FF call bswap_32
+ 3519 FF
+ 3520 26d3 4189C5 movl %eax, %r13d
+ 3521 26d6 8B85A8D7 movl -10328(%rbp), %eax
+ 3521 FFFF
+ 3522 26dc 89C7 movl %eax, %edi
+ 3523 26de E81DD9FF call bswap_32
+ 3523 FF
+ 3524 26e3 4189C4 movl %eax, %r12d
+ 3525 26e6 8B85A4D7 movl -10332(%rbp), %eax
+ 3525 FFFF
+ 3526 26ec 89C7 movl %eax, %edi
+ 3527 26ee E80DD9FF call bswap_32
+ 3527 FF
+ 3528 26f3 89C3 movl %eax, %ebx
+ 3529 26f5 8B85A0D7 movl -10336(%rbp), %eax
+ 3529 FFFF
+ 3530 26fb 89C7 movl %eax, %edi
+ 3531 26fd E8FED8FF call bswap_32
+ 3531 FF
+ 3532 2702 4589E9 movl %r13d, %r9d
+ 3533 2705 4589E0 movl %r12d, %r8d
+ 3534 2708 89D9 movl %ebx, %ecx
+ 3535 270a 89C2 movl %eax, %edx
+ 3536 270c 488D3500 leaq .LC2(%rip), %rsi
+ 3536 000000
+ 3537 2713 488D3D00 leaq .LC1(%rip), %rdi
+ 3537 000000
+ 3538 271a B8000000 movl $0, %eax
+ 3538 00
+ 3539 271f E8000000 call KDbgMsg at PLT
+ 3539 00
+ 3540 .L49:
+ 3541 2724 660F6F85 movdqa -10928(%rbp), %xmm0
+ 3541 50D5FFFF
+ 3542 272c F30F7F85 movdqu %xmm0, -5312(%rbp)
+ 3542 40EBFFFF
+ 3543 2734 660F6F85 movdqa -10912(%rbp), %xmm0
+ 3543 60D5FFFF
+ 3544 273c F30F7F85 movdqu %xmm0, -5328(%rbp)
+ 3544 30EBFFFF
+ 3545 .LBE997:
+ 3546 .LBB998:
+ 3547 .LBB999:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 3548 .loc 2 178 0
+
GAS LISTING /tmp/ccjbMjHD.s page 133
+
+
+ 3549 2744 F30F6F85 movdqu -5328(%rbp), %xmm0
+ 3549 30EBFFFF
+ 3550 274c F30F6F8D movdqu -5312(%rbp), %xmm1
+ 3550 40EBFFFF
+ 3551 2754 660FEFC1 pxor %xmm1, %xmm0
+ 3552 .LBE999:
+ 3553 .LBE998:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 3554 .loc 2 1686 0
+ 3555 2758 660F7F85 movdqa %xmm0, -10928(%rbp)
+ 3555 50D5FFFF
+ 3556 .LBB1000:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 3557 .loc 2 1687 0
+ 3558 2760 660F6F85 movdqa -10928(%rbp), %xmm0
+ 3558 50D5FFFF
+ 3559 2768 F30F7F85 movdqu %xmm0, -10352(%rbp)
+ 3559 90D7FFFF
+ 3560 2770 E8000000 call KDbgWriterGet at PLT
+ 3560 00
+ 3561 2775 4885C0 testq %rax, %rax
+ 3562 2778 7479 je .L51
+ 3563 277a BF010000 movl $1, %edi
+ 3563 00
+ 3564 277f E8000000 call KDbgCondToFlag at PLT
+ 3564 00
+ 3565 2784 4889C6 movq %rax, %rsi
+ 3566 2787 BF100000 movl $16, %edi
+ 3566 00
+ 3567 278c E8000000 call KDbgTestModConds at PLT
+ 3567 00
+ 3568 2791 84C0 testb %al, %al
+ 3569 2793 745E je .L51
+ 3570 2795 8B859CD7 movl -10340(%rbp), %eax
+ 3570 FFFF
+ 3571 279b 89C7 movl %eax, %edi
+ 3572 279d E85ED8FF call bswap_32
+ 3572 FF
+ 3573 27a2 4189C5 movl %eax, %r13d
+ 3574 27a5 8B8598D7 movl -10344(%rbp), %eax
+ 3574 FFFF
+ 3575 27ab 89C7 movl %eax, %edi
+ 3576 27ad E84ED8FF call bswap_32
+ 3576 FF
+ 3577 27b2 4189C4 movl %eax, %r12d
+ 3578 27b5 8B8594D7 movl -10348(%rbp), %eax
+ 3578 FFFF
+ 3579 27bb 89C7 movl %eax, %edi
+ 3580 27bd E83ED8FF call bswap_32
+ 3580 FF
+ 3581 27c2 89C3 movl %eax, %ebx
+ 3582 27c4 8B8590D7 movl -10352(%rbp), %eax
+ 3582 FFFF
+ 3583 27ca 89C7 movl %eax, %edi
+ 3584 27cc E82FD8FF call bswap_32
+ 3584 FF
+ 3585 27d1 4589E9 movl %r13d, %r9d
+
GAS LISTING /tmp/ccjbMjHD.s page 134
+
+
+ 3586 27d4 4589E0 movl %r12d, %r8d
+ 3587 27d7 89D9 movl %ebx, %ecx
+ 3588 27d9 89C2 movl %eax, %edx
+ 3589 27db 488D3500 leaq .LC3(%rip), %rsi
+ 3589 000000
+ 3590 27e2 488D3D00 leaq .LC1(%rip), %rdi
+ 3590 000000
+ 3591 27e9 B8000000 movl $0, %eax
+ 3591 00
+ 3592 27ee E8000000 call KDbgMsg at PLT
+ 3592 00
+ 3593 .L51:
+ 3594 27f3 660F6F85 movdqa -10928(%rbp), %xmm0
+ 3594 50D5FFFF
+ 3595 27fb F30F7F85 movdqu %xmm0, -5296(%rbp)
+ 3595 50EBFFFF
+ 3596 2803 F30F6F85 movdqu -5296(%rbp), %xmm0
+ 3596 50EBFFFF
+ 3597 280b F30F7F85 movdqu %xmm0, -5264(%rbp)
+ 3597 70EBFFFF
+ 3598 .LBE1000:
+ 3599 .LBB1001:
+ 3600 .LBB1002:
+ 3601 .LBB1003:
+ 3602 .LBB1004:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3603 .loc 3 450 0
+ 3604 2813 F30F6F85 movdqu -5264(%rbp), %xmm0
+ 3604 70EBFFFF
+ 3605 281b 660F70C0 pshufd $255, %xmm0, %xmm0
+ 3605 FF
+ 3606 .LBE1004:
+ 3607 .LBE1003:
+ 3608 .LBE1002:
+ 3609 .LBE1001:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 3610 .loc 2 1688 0
+ 3611 2820 660F7F85 movdqa %xmm0, -10928(%rbp)
+ 3611 50D5FFFF
+ 3612 .LBB1005:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 3613 .loc 2 1689 0
+ 3614 2828 660F6F85 movdqa -10928(%rbp), %xmm0
+ 3614 50D5FFFF
+ 3615 2830 F30F7F85 movdqu %xmm0, -10368(%rbp)
+ 3615 80D7FFFF
+ 3616 2838 E8000000 call KDbgWriterGet at PLT
+ 3616 00
+ 3617 283d 4885C0 testq %rax, %rax
+ 3618 2840 7479 je .L53
+ 3619 2842 BF010000 movl $1, %edi
+ 3619 00
+ 3620 2847 E8000000 call KDbgCondToFlag at PLT
+ 3620 00
+ 3621 284c 4889C6 movq %rax, %rsi
+ 3622 284f BF100000 movl $16, %edi
+ 3622 00
+
GAS LISTING /tmp/ccjbMjHD.s page 135
+
+
+ 3623 2854 E8000000 call KDbgTestModConds at PLT
+ 3623 00
+ 3624 2859 84C0 testb %al, %al
+ 3625 285b 745E je .L53
+ 3626 285d 8B858CD7 movl -10356(%rbp), %eax
+ 3626 FFFF
+ 3627 2863 89C7 movl %eax, %edi
+ 3628 2865 E896D7FF call bswap_32
+ 3628 FF
+ 3629 286a 4189C5 movl %eax, %r13d
+ 3630 286d 8B8588D7 movl -10360(%rbp), %eax
+ 3630 FFFF
+ 3631 2873 89C7 movl %eax, %edi
+ 3632 2875 E886D7FF call bswap_32
+ 3632 FF
+ 3633 287a 4189C4 movl %eax, %r12d
+ 3634 287d 8B8584D7 movl -10364(%rbp), %eax
+ 3634 FFFF
+ 3635 2883 89C7 movl %eax, %edi
+ 3636 2885 E876D7FF call bswap_32
+ 3636 FF
+ 3637 288a 89C3 movl %eax, %ebx
+ 3638 288c 8B8580D7 movl -10368(%rbp), %eax
+ 3638 FFFF
+ 3639 2892 89C7 movl %eax, %edi
+ 3640 2894 E867D7FF call bswap_32
+ 3640 FF
+ 3641 2899 4589E9 movl %r13d, %r9d
+ 3642 289c 4589E0 movl %r12d, %r8d
+ 3643 289f 89D9 movl %ebx, %ecx
+ 3644 28a1 89C2 movl %eax, %edx
+ 3645 28a3 488D3500 leaq .LC4(%rip), %rsi
+ 3645 000000
+ 3646 28aa 488D3D00 leaq .LC1(%rip), %rdi
+ 3646 000000
+ 3647 28b1 B8000000 movl $0, %eax
+ 3647 00
+ 3648 28b6 E8000000 call KDbgMsg at PLT
+ 3648 00
+ 3649 .L53:
+ 3650 .LBE1005:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 3651 .loc 2 1690 0
+ 3652 28bb 660F6F85 movdqa -10928(%rbp), %xmm0
+ 3652 50D5FFFF
+ 3653 .LBE959:
+ 3654 .LBE958:
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x10,5);
+ 3655 .loc 2 1748 0
+ 3656 28c3 F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 3656 10D9FFFF
+ 3657 28cb F30F6F85 movdqu -9984(%rbp), %xmm0
+ 3657 00D9FFFF
+ 3658 28d3 F30F7F85 movdqu %xmm0, -5248(%rbp)
+ 3658 80EBFFFF
+ 3659 .LBB1006:
+ 3660 .LBB1007:
+
GAS LISTING /tmp/ccjbMjHD.s page 136
+
+
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 3661 .loc 2 1565 0
+ 3662 28db F30F6F85 movdqu -5248(%rbp), %xmm0
+ 3662 80EBFFFF
+ 3663 28e3 660F7F85 movdqa %xmm0, -10896(%rbp)
+ 3663 70D5FFFF
+ 3664 28eb 660F6F85 movdqa -10896(%rbp), %xmm0
+ 3664 70D5FFFF
+ 3665 28f3 F30F7F85 movdqu %xmm0, -5232(%rbp)
+ 3665 90EBFFFF
+ 3666 .LBB1008:
+ 3667 .LBB1009:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3668 .loc 2 1278 0
+ 3669 28fb 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 3669 00000000
+ 3670 2903 F30F6F8D movdqu -5232(%rbp), %xmm1
+ 3670 90EBFFFF
+ 3671 290b F30F7F8D movdqu %xmm1, -5200(%rbp)
+ 3671 B0EBFFFF
+ 3672 2913 F30F7F85 movdqu %xmm0, -5216(%rbp)
+ 3672 A0EBFFFF
+ 3673 291b F30F6F85 movdqu -5200(%rbp), %xmm0
+ 3673 B0EBFFFF
+ 3674 2923 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 3674 D0EBFFFF
+ 3675 292b F30F6F85 movdqu -5216(%rbp), %xmm0
+ 3675 A0EBFFFF
+ 3676 2933 F30F7F85 movdqu %xmm0, -5184(%rbp)
+ 3676 C0EBFFFF
+ 3677 .LBB1010:
+ 3678 .LBB1011:
+ 3679 .LBB1012:
+ 3680 .LBB1013:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3681 .loc 3 529 0
+ 3682 293b F30F6F8D movdqu -5184(%rbp), %xmm1
+ 3682 C0EBFFFF
+ 3683 2943 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 3683 D0EBFFFF
+ 3684 294b 660F3800 pshufb %xmm1, %xmm0
+ 3684 C1
+ 3685 .LBE1013:
+ 3686 .LBE1012:
+ 3687 .LBE1011:
+ 3688 .LBE1010:
+ 3689 .LBE1009:
+ 3690 .LBE1008:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3691 .loc 2 1567 0
+ 3692 2950 660F7F85 movdqa %xmm0, -10896(%rbp)
+ 3692 70D5FFFF
+ 3693 2958 660F6F85 movdqa -10896(%rbp), %xmm0
+ 3693 70D5FFFF
+ 3694 2960 660FEF85 pxor -5248(%rbp), %xmm0
+ 3694 80EBFFFF
+ 3695 2968 F30F7F85 movdqu %xmm0, -5248(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 137
+
+
+ 3695 80EBFFFF
+ 3696 2970 660F6F85 movdqa -10896(%rbp), %xmm0
+ 3696 70D5FFFF
+ 3697 2978 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 3697 E0EBFFFF
+ 3698 .LBB1014:
+ 3699 .LBB1015:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3700 .loc 2 1278 0
+ 3701 2980 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 3701 00000000
+ 3702 2988 F30F6F8D movdqu -5152(%rbp), %xmm1
+ 3702 E0EBFFFF
+ 3703 2990 F30F7F8D movdqu %xmm1, -5120(%rbp)
+ 3703 00ECFFFF
+ 3704 2998 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 3704 F0EBFFFF
+ 3705 29a0 F30F6F85 movdqu -5120(%rbp), %xmm0
+ 3705 00ECFFFF
+ 3706 29a8 F30F7F85 movdqu %xmm0, -5088(%rbp)
+ 3706 20ECFFFF
+ 3707 29b0 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 3707 F0EBFFFF
+ 3708 29b8 F30F7F85 movdqu %xmm0, -5104(%rbp)
+ 3708 10ECFFFF
+ 3709 .LBB1016:
+ 3710 .LBB1017:
+ 3711 .LBB1018:
+ 3712 .LBB1019:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3713 .loc 3 529 0
+ 3714 29c0 F30F6F8D movdqu -5104(%rbp), %xmm1
+ 3714 10ECFFFF
+ 3715 29c8 F30F6F85 movdqu -5088(%rbp), %xmm0
+ 3715 20ECFFFF
+ 3716 29d0 660F3800 pshufb %xmm1, %xmm0
+ 3716 C1
+ 3717 .LBE1019:
+ 3718 .LBE1018:
+ 3719 .LBE1017:
+ 3720 .LBE1016:
+ 3721 .LBE1015:
+ 3722 .LBE1014:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3723 .loc 2 1568 0
+ 3724 29d5 660F7F85 movdqa %xmm0, -10896(%rbp)
+ 3724 70D5FFFF
+ 3725 29dd 660F6F85 movdqa -10896(%rbp), %xmm0
+ 3725 70D5FFFF
+ 3726 29e5 660FEF85 pxor -5248(%rbp), %xmm0
+ 3726 80EBFFFF
+ 3727 29ed F30F7F85 movdqu %xmm0, -5248(%rbp)
+ 3727 80EBFFFF
+ 3728 29f5 660F6F85 movdqa -10896(%rbp), %xmm0
+ 3728 70D5FFFF
+ 3729 29fd F30F7F85 movdqu %xmm0, -5072(%rbp)
+ 3729 30ECFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 138
+
+
+ 3730 .LBB1020:
+ 3731 .LBB1021:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3732 .loc 2 1278 0
+ 3733 2a05 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 3733 00000000
+ 3734 2a0d F30F6F8D movdqu -5072(%rbp), %xmm1
+ 3734 30ECFFFF
+ 3735 2a15 F30F7F8D movdqu %xmm1, -5040(%rbp)
+ 3735 50ECFFFF
+ 3736 2a1d F30F7F85 movdqu %xmm0, -5056(%rbp)
+ 3736 40ECFFFF
+ 3737 2a25 F30F6F85 movdqu -5040(%rbp), %xmm0
+ 3737 50ECFFFF
+ 3738 2a2d F30F7F85 movdqu %xmm0, -5008(%rbp)
+ 3738 70ECFFFF
+ 3739 2a35 F30F6F85 movdqu -5056(%rbp), %xmm0
+ 3739 40ECFFFF
+ 3740 2a3d F30F7F85 movdqu %xmm0, -5024(%rbp)
+ 3740 60ECFFFF
+ 3741 .LBB1022:
+ 3742 .LBB1023:
+ 3743 .LBB1024:
+ 3744 .LBB1025:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3745 .loc 3 529 0
+ 3746 2a45 F30F6F8D movdqu -5024(%rbp), %xmm1
+ 3746 60ECFFFF
+ 3747 2a4d F30F6F85 movdqu -5008(%rbp), %xmm0
+ 3747 70ECFFFF
+ 3748 2a55 660F3800 pshufb %xmm1, %xmm0
+ 3748 C1
+ 3749 .LBE1025:
+ 3750 .LBE1024:
+ 3751 .LBE1023:
+ 3752 .LBE1022:
+ 3753 .LBE1021:
+ 3754 .LBE1020:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3755 .loc 2 1569 0
+ 3756 2a5a 660F7F85 movdqa %xmm0, -10896(%rbp)
+ 3756 70D5FFFF
+ 3757 2a62 660F6F85 movdqa -10896(%rbp), %xmm0
+ 3757 70D5FFFF
+ 3758 2a6a 660FEF85 pxor -5248(%rbp), %xmm0
+ 3758 80EBFFFF
+ 3759 2a72 F30F7F85 movdqu %xmm0, -5248(%rbp)
+ 3759 80EBFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3760 .loc 2 1571 0
+ 3761 2a7a F30F6F85 movdqu -5248(%rbp), %xmm0
+ 3761 80EBFFFF
+ 3762 .LBE1007:
+ 3763 .LBE1006:
+ 3764 .loc 2 1748 0
+ 3765 2a82 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 3765 00D9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 139
+
+
+ 3766 2a8a F30F6F85 movdqu -9968(%rbp), %xmm0
+ 3766 10D9FFFF
+ 3767 2a92 F30F6F8D movdqu -9984(%rbp), %xmm1
+ 3767 00D9FFFF
+ 3768 2a9a 660FEFC1 pxor %xmm1, %xmm0
+ 3769 2a9e F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 3769 00D9FFFF
+ 3770 2aa6 488B8578 movq -10632(%rbp), %rax
+ 3770 D6FFFF
+ 3771 2aad 4883C050 addq $80, %rax
+ 3772 2ab1 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 3772 00D9FFFF
+ 3773 2ab9 F30F7F00 movdqu %xmm0, (%rax)
+ 3774 2abd F30F6F85 movdqu -9984(%rbp), %xmm0
+ 3774 00D9FFFF
+ 3775 2ac5 F30F7F85 movdqu %xmm0, -4976(%rbp)
+ 3775 90ECFFFF
+ 3776 .LBB1026:
+ 3777 .LBB1027:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3778 .loc 2 1681 0
+ 3779 2acd B8200000 movl $32, %eax
+ 3779 00
+ 3780 2ad2 660F6F05 movdqa vec_00(%rip), %xmm0
+ 3780 00000000
+ 3781 2ada F30F7F85 movdqu %xmm0, -4944(%rbp)
+ 3781 B0ECFFFF
+ 3782 2ae2 8985ACEC movl %eax, -4948(%rbp)
+ 3782 FFFF
+ 3783 2ae8 F30F6F85 movdqu -4944(%rbp), %xmm0
+ 3783 B0ECFFFF
+ 3784 2af0 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 3784 D0ECFFFF
+ 3785 2af8 8B85ACEC movl -4948(%rbp), %eax
+ 3785 FFFF
+ 3786 2afe 8985CCEC movl %eax, -4916(%rbp)
+ 3786 FFFF
+ 3787 .LBB1028:
+ 3788 .LBB1029:
+ 3789 .LBB1030:
+ 3790 .LBB1031:
+ 3791 .loc 3 598 0
+ 3792 2b04 8B85CCEC movl -4916(%rbp), %eax
+ 3792 FFFF
+ 3793 2b0a F30F6F85 movdqu -4912(%rbp), %xmm0
+ 3793 D0ECFFFF
+ 3794 2b12 660F3A22 pinsrd $3, %eax, %xmm0
+ 3794 C003
+ 3795 .LBE1031:
+ 3796 .LBE1030:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 3797 .loc 2 519 0
+ 3798 2b18 F30F7F85 movdqu %xmm0, -4944(%rbp)
+ 3798 B0ECFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 3799 .loc 2 526 0
+ 3800 2b20 F30F6F85 movdqu -4944(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 140
+
+
+ 3800 B0ECFFFF
+ 3801 .LBE1029:
+ 3802 .LBE1028:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3803 .loc 2 1681 0
+ 3804 2b28 660F7F85 movdqa %xmm0, -10864(%rbp)
+ 3804 90D5FFFF
+ 3805 2b30 F30F6F85 movdqu -4976(%rbp), %xmm0
+ 3805 90ECFFFF
+ 3806 2b38 F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 3806 E0ECFFFF
+ 3807 2b40 F30F6F85 movdqu -4896(%rbp), %xmm0
+ 3807 E0ECFFFF
+ 3808 2b48 F30F7F85 movdqu %xmm0, -4864(%rbp)
+ 3808 00EDFFFF
+ 3809 2b50 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 3809 000000
+ 3810 2b57 488985F8 movq %rax, -4872(%rbp)
+ 3810 ECFFFF
+ 3811 .LBB1032:
+ 3812 .LBB1033:
+ 3813 .LBB1034:
+ 3814 .LBB1035:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 3815 .loc 2 851 0
+ 3816 2b5e 660F6F05 movdqa vec_00(%rip), %xmm0
+ 3816 00000000
+ 3817 2b66 F30F7F85 movdqu %xmm0, -4832(%rbp)
+ 3817 20EDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3818 .loc 2 854 0
+ 3819 2b6e 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 3819 00000000
+ 3820 2b76 F30F6F8D movdqu -4864(%rbp), %xmm1
+ 3820 00EDFFFF
+ 3821 2b7e F30F7F8D movdqu %xmm1, -4752(%rbp)
+ 3821 70EDFFFF
+ 3822 2b86 F30F7F85 movdqu %xmm0, -4768(%rbp)
+ 3822 60EDFFFF
+ 3823 .LBB1036:
+ 3824 .LBB1037:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 3825 .loc 2 206 0
+ 3826 2b8e F30F6F85 movdqu -4768(%rbp), %xmm0
+ 3826 60EDFFFF
+ 3827 2b96 F30F6F8D movdqu -4752(%rbp), %xmm1
+ 3827 70EDFFFF
+ 3828 2b9e 660FDBC1 pand %xmm1, %xmm0
+ 3829 .LBE1037:
+ 3830 .LBE1036:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3831 .loc 2 854 0
+ 3832 2ba2 F30F7F85 movdqu %xmm0, -4784(%rbp)
+ 3832 50EDFFFF
+ 3833 2baa F30F6F85 movdqu -4864(%rbp), %xmm0
+ 3833 00EDFFFF
+ 3834 2bb2 F30F7F85 movdqu %xmm0, -4720(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 141
+
+
+ 3834 90EDFFFF
+ 3835 .LBB1038:
+ 3836 .LBB1039:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 3837 .loc 3 433 0
+ 3838 2bba F30F6F85 movdqu -4720(%rbp), %xmm0
+ 3838 90EDFFFF
+ 3839 2bc2 660F72D0 psrld $4, %xmm0
+ 3839 04
+ 3840 .LBE1039:
+ 3841 .LBE1038:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 3842 .loc 2 857 0
+ 3843 2bc7 F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 3843 40EDFFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3844 .loc 2 859 0
+ 3845 2bcf 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 3845 00000000
+ 3846 2bd7 F30F6F8D movdqu -4800(%rbp), %xmm1
+ 3846 40EDFFFF
+ 3847 2bdf F30F7F8D movdqu %xmm1, -4688(%rbp)
+ 3847 B0EDFFFF
+ 3848 2be7 F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 3848 A0EDFFFF
+ 3849 .LBB1040:
+ 3850 .LBB1041:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 3851 .loc 2 206 0
+ 3852 2bef F30F6F85 movdqu -4704(%rbp), %xmm0
+ 3852 A0EDFFFF
+ 3853 2bf7 F30F6F8D movdqu -4688(%rbp), %xmm1
+ 3853 B0EDFFFF
+ 3854 2bff 660FDBC1 pand %xmm1, %xmm0
+ 3855 .LBE1041:
+ 3856 .LBE1040:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3857 .loc 2 859 0
+ 3858 2c03 F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 3858 40EDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 3859 .loc 2 866 0
+ 3860 2c0b C7851CED movl $0, -4836(%rbp)
+ 3860 FFFF0000
+ 3860 0000
+ 3861 2c15 E9BE0100 jmp .L54
+ 3861 00
+ 3862 .L55:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3863 .loc 2 868 0
+ 3864 2c1a 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 3864 00000000
+ 3865 2c22 F30F7F85 movdqu %xmm0, -4656(%rbp)
+ 3865 D0EDFFFF
+ 3866 2c2a F30F6F85 movdqu -4800(%rbp), %xmm0
+ 3866 40EDFFFF
+ 3867 2c32 F30F7F85 movdqu %xmm0, -4672(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 142
+
+
+ 3867 C0EDFFFF
+ 3868 2c3a F30F6F85 movdqu -4656(%rbp), %xmm0
+ 3868 D0EDFFFF
+ 3869 2c42 F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 3869 F0EDFFFF
+ 3870 2c4a F30F6F85 movdqu -4672(%rbp), %xmm0
+ 3870 C0EDFFFF
+ 3871 2c52 F30F7F85 movdqu %xmm0, -4640(%rbp)
+ 3871 E0EDFFFF
+ 3872 .LBB1042:
+ 3873 .LBB1043:
+ 3874 .LBB1044:
+ 3875 .LBB1045:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3876 .loc 3 529 0
+ 3877 2c5a F30F6F8D movdqu -4640(%rbp), %xmm1
+ 3877 E0EDFFFF
+ 3878 2c62 F30F6F85 movdqu -4624(%rbp), %xmm0
+ 3878 F0EDFFFF
+ 3879 2c6a 660F3800 pshufb %xmm1, %xmm0
+ 3879 C1
+ 3880 .LBE1045:
+ 3881 .LBE1044:
+ 3882 .LBE1043:
+ 3883 .LBE1042:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3884 .loc 2 868 0
+ 3885 2c6f F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 3885 30EDFFFF
+ 3886 2c77 F30F6F85 movdqu -4784(%rbp), %xmm0
+ 3886 50EDFFFF
+ 3887 2c7f F30F7F85 movdqu %xmm0, -4592(%rbp)
+ 3887 10EEFFFF
+ 3888 2c87 F30F6F85 movdqu -4816(%rbp), %xmm0
+ 3888 30EDFFFF
+ 3889 2c8f F30F7F85 movdqu %xmm0, -4608(%rbp)
+ 3889 00EEFFFF
+ 3890 .LBB1046:
+ 3891 .LBB1047:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 3892 .loc 2 234 0
+ 3893 2c97 F30F6F85 movdqu -4608(%rbp), %xmm0
+ 3893 00EEFFFF
+ 3894 2c9f F30F6F8D movdqu -4592(%rbp), %xmm1
+ 3894 10EEFFFF
+ 3895 2ca7 660FEBC1 por %xmm1, %xmm0
+ 3896 .LBE1047:
+ 3897 .LBE1046:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 3898 .loc 2 870 0
+ 3899 2cab F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 3899 30EDFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3900 .loc 2 872 0
+ 3901 2cb3 8B851CED mov -4836(%rbp), %eax
+ 3901 FFFF
+ 3902 2cb9 48C1E004 salq $4, %rax
+
GAS LISTING /tmp/ccjbMjHD.s page 143
+
+
+ 3903 2cbd 480385F8 addq -4872(%rbp), %rax
+ 3903 ECFFFF
+ 3904 2cc4 660F6F00 movdqa (%rax), %xmm0
+ 3905 2cc8 F30F7F85 movdqu %xmm0, -4560(%rbp)
+ 3905 30EEFFFF
+ 3906 2cd0 F30F6F85 movdqu -4816(%rbp), %xmm0
+ 3906 30EDFFFF
+ 3907 2cd8 F30F7F85 movdqu %xmm0, -4576(%rbp)
+ 3907 20EEFFFF
+ 3908 2ce0 F30F6F85 movdqu -4560(%rbp), %xmm0
+ 3908 30EEFFFF
+ 3909 2ce8 F30F7F85 movdqu %xmm0, -4528(%rbp)
+ 3909 50EEFFFF
+ 3910 2cf0 F30F6F85 movdqu -4576(%rbp), %xmm0
+ 3910 20EEFFFF
+ 3911 2cf8 F30F7F85 movdqu %xmm0, -4544(%rbp)
+ 3911 40EEFFFF
+ 3912 .LBB1048:
+ 3913 .LBB1049:
+ 3914 .LBB1050:
+ 3915 .LBB1051:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3916 .loc 3 529 0
+ 3917 2d00 F30F6F8D movdqu -4544(%rbp), %xmm1
+ 3917 40EEFFFF
+ 3918 2d08 F30F6F85 movdqu -4528(%rbp), %xmm0
+ 3918 50EEFFFF
+ 3919 2d10 660F3800 pshufb %xmm1, %xmm0
+ 3919 C1
+ 3920 .LBE1051:
+ 3921 .LBE1050:
+ 3922 .LBE1049:
+ 3923 .LBE1048:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3924 .loc 2 872 0
+ 3925 2d15 F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 3925 30EDFFFF
+ 3926 2d1d F30F6F85 movdqu -4832(%rbp), %xmm0
+ 3926 20EDFFFF
+ 3927 2d25 F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 3927 70EEFFFF
+ 3928 2d2d F30F6F85 movdqu -4816(%rbp), %xmm0
+ 3928 30EDFFFF
+ 3929 2d35 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 3929 60EEFFFF
+ 3930 .LBB1052:
+ 3931 .LBB1053:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 3932 .loc 2 234 0
+ 3933 2d3d F30F6F85 movdqu -4512(%rbp), %xmm0
+ 3933 60EEFFFF
+ 3934 2d45 F30F6F8D movdqu -4496(%rbp), %xmm1
+ 3934 70EEFFFF
+ 3935 2d4d 660FEBC1 por %xmm1, %xmm0
+ 3936 .LBE1053:
+ 3937 .LBE1052:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+
GAS LISTING /tmp/ccjbMjHD.s page 144
+
+
+ 3938 .loc 2 874 0
+ 3939 2d51 F30F7F85 movdqu %xmm0, -4832(%rbp)
+ 3939 20EDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3940 .loc 2 876 0
+ 3941 2d59 660F6F05 movdqa vec_01(%rip), %xmm0
+ 3941 00000000
+ 3942 2d61 F30F6F8D movdqu -4800(%rbp), %xmm1
+ 3942 40EDFFFF
+ 3943 2d69 F30F7F8D movdqu %xmm1, -4464(%rbp)
+ 3943 90EEFFFF
+ 3944 2d71 F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 3944 80EEFFFF
+ 3945 .LBB1054:
+ 3946 .LBB1055:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 3947 .loc 2 290 0
+ 3948 2d79 F30F6F8D movdqu -4480(%rbp), %xmm1
+ 3948 80EEFFFF
+ 3949 2d81 F30F6F85 movdqu -4464(%rbp), %xmm0
+ 3949 90EEFFFF
+ 3950 2d89 660FF8C1 psubb %xmm1, %xmm0
+ 3951 .LBE1055:
+ 3952 .LBE1054:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3953 .loc 2 876 0
+ 3954 2d8d F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 3954 40EDFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3955 .loc 2 878 0
+ 3956 2d95 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 3956 00000000
+ 3957 2d9d F30F6F8D movdqu -4800(%rbp), %xmm1
+ 3957 40EDFFFF
+ 3958 2da5 F30F7F8D movdqu %xmm1, -4432(%rbp)
+ 3958 B0EEFFFF
+ 3959 2dad F30F7F85 movdqu %xmm0, -4448(%rbp)
+ 3959 A0EEFFFF
+ 3960 .LBB1056:
+ 3961 .LBB1057:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 3962 .loc 2 206 0
+ 3963 2db5 F30F6F85 movdqu -4448(%rbp), %xmm0
+ 3963 A0EEFFFF
+ 3964 2dbd F30F6F8D movdqu -4432(%rbp), %xmm1
+ 3964 B0EEFFFF
+ 3965 2dc5 660FDBC1 pand %xmm1, %xmm0
+ 3966 .LBE1057:
+ 3967 .LBE1056:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3968 .loc 2 878 0
+ 3969 2dc9 F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 3969 40EDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 3970 .loc 2 866 0
+ 3971 2dd1 83851CED addl $1, -4836(%rbp)
+ 3971 FFFF01
+
GAS LISTING /tmp/ccjbMjHD.s page 145
+
+
+ 3972 .L54:
+ 3973 2dd8 83BD1CED cmpl $15, -4836(%rbp)
+ 3973 FFFF0F
+ 3974 2ddf 0F8635FE jbe .L55
+ 3974 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 3975 .loc 2 882 0
+ 3976 2de5 F30F6F85 movdqu -4832(%rbp), %xmm0
+ 3976 20EDFFFF
+ 3977 .LBE1035:
+ 3978 .LBE1034:
+ 3979 .LBE1033:
+ 3980 .LBE1032:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 3981 .loc 2 1682 0
+ 3982 2ded 660F7F85 movdqa %xmm0, -10880(%rbp)
+ 3982 80D5FFFF
+ 3983 .LBB1058:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 3984 .loc 2 1683 0
+ 3985 2df5 660F6F85 movdqa -10880(%rbp), %xmm0
+ 3985 80D5FFFF
+ 3986 2dfd F30F7F85 movdqu %xmm0, -10256(%rbp)
+ 3986 F0D7FFFF
+ 3987 2e05 E8000000 call KDbgWriterGet at PLT
+ 3987 00
+ 3988 2e0a 4885C0 testq %rax, %rax
+ 3989 2e0d 7479 je .L57
+ 3990 2e0f BF010000 movl $1, %edi
+ 3990 00
+ 3991 2e14 E8000000 call KDbgCondToFlag at PLT
+ 3991 00
+ 3992 2e19 4889C6 movq %rax, %rsi
+ 3993 2e1c BF100000 movl $16, %edi
+ 3993 00
+ 3994 2e21 E8000000 call KDbgTestModConds at PLT
+ 3994 00
+ 3995 2e26 84C0 testb %al, %al
+ 3996 2e28 745E je .L57
+ 3997 2e2a 8B85FCD7 movl -10244(%rbp), %eax
+ 3997 FFFF
+ 3998 2e30 89C7 movl %eax, %edi
+ 3999 2e32 E8C9D1FF call bswap_32
+ 3999 FF
+ 4000 2e37 4189C5 movl %eax, %r13d
+ 4001 2e3a 8B85F8D7 movl -10248(%rbp), %eax
+ 4001 FFFF
+ 4002 2e40 89C7 movl %eax, %edi
+ 4003 2e42 E8B9D1FF call bswap_32
+ 4003 FF
+ 4004 2e47 4189C4 movl %eax, %r12d
+ 4005 2e4a 8B85F4D7 movl -10252(%rbp), %eax
+ 4005 FFFF
+ 4006 2e50 89C7 movl %eax, %edi
+ 4007 2e52 E8A9D1FF call bswap_32
+ 4007 FF
+ 4008 2e57 89C3 movl %eax, %ebx
+
GAS LISTING /tmp/ccjbMjHD.s page 146
+
+
+ 4009 2e59 8B85F0D7 movl -10256(%rbp), %eax
+ 4009 FFFF
+ 4010 2e5f 89C7 movl %eax, %edi
+ 4011 2e61 E89AD1FF call bswap_32
+ 4011 FF
+ 4012 2e66 4589E9 movl %r13d, %r9d
+ 4013 2e69 4589E0 movl %r12d, %r8d
+ 4014 2e6c 89D9 movl %ebx, %ecx
+ 4015 2e6e 89C2 movl %eax, %edx
+ 4016 2e70 488D3500 leaq .LC0(%rip), %rsi
+ 4016 000000
+ 4017 2e77 488D3D00 leaq .LC1(%rip), %rdi
+ 4017 000000
+ 4018 2e7e B8000000 movl $0, %eax
+ 4018 00
+ 4019 2e83 E8000000 call KDbgMsg at PLT
+ 4019 00
+ 4020 .L57:
+ 4021 2e88 660F6F85 movdqa -10880(%rbp), %xmm0
+ 4021 80D5FFFF
+ 4022 2e90 F30F7F85 movdqu %xmm0, -4416(%rbp)
+ 4022 C0EEFFFF
+ 4023 .LBE1058:
+ 4024 .LBB1059:
+ 4025 .LBB1060:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4026 .loc 2 667 0
+ 4027 2e98 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 4027 00000000
+ 4028 2ea0 F30F6F8D movdqu -4416(%rbp), %xmm1
+ 4028 C0EEFFFF
+ 4029 2ea8 F30F7F8D movdqu %xmm1, -4384(%rbp)
+ 4029 E0EEFFFF
+ 4030 2eb0 F30F7F85 movdqu %xmm0, -4400(%rbp)
+ 4030 D0EEFFFF
+ 4031 2eb8 F30F6F85 movdqu -4384(%rbp), %xmm0
+ 4031 E0EEFFFF
+ 4032 2ec0 F30F7F85 movdqu %xmm0, -4352(%rbp)
+ 4032 00EFFFFF
+ 4033 2ec8 F30F6F85 movdqu -4400(%rbp), %xmm0
+ 4033 D0EEFFFF
+ 4034 2ed0 F30F7F85 movdqu %xmm0, -4368(%rbp)
+ 4034 F0EEFFFF
+ 4035 .LBB1061:
+ 4036 .LBB1062:
+ 4037 .LBB1063:
+ 4038 .LBB1064:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4039 .loc 3 529 0
+ 4040 2ed8 F30F6F8D movdqu -4368(%rbp), %xmm1
+ 4040 F0EEFFFF
+ 4041 2ee0 F30F6F85 movdqu -4352(%rbp), %xmm0
+ 4041 00EFFFFF
+ 4042 2ee8 660F3800 pshufb %xmm1, %xmm0
+ 4042 C1
+ 4043 .LBE1064:
+ 4044 .LBE1063:
+
GAS LISTING /tmp/ccjbMjHD.s page 147
+
+
+ 4045 .LBE1062:
+ 4046 .LBE1061:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4047 .loc 2 667 0
+ 4048 2eed F30F7F85 movdqu %xmm0, -4416(%rbp)
+ 4048 C0EEFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4049 .loc 2 668 0
+ 4050 2ef5 F30F6F85 movdqu -4416(%rbp), %xmm0
+ 4050 C0EEFFFF
+ 4051 .LBE1060:
+ 4052 .LBE1059:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 4053 .loc 2 1684 0
+ 4054 2efd 660F7F85 movdqa %xmm0, -10880(%rbp)
+ 4054 80D5FFFF
+ 4055 .LBB1065:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 4056 .loc 2 1685 0
+ 4057 2f05 660F6F85 movdqa -10880(%rbp), %xmm0
+ 4057 80D5FFFF
+ 4058 2f0d F30F7F85 movdqu %xmm0, -10272(%rbp)
+ 4058 E0D7FFFF
+ 4059 2f15 E8000000 call KDbgWriterGet at PLT
+ 4059 00
+ 4060 2f1a 4885C0 testq %rax, %rax
+ 4061 2f1d 7479 je .L59
+ 4062 2f1f BF010000 movl $1, %edi
+ 4062 00
+ 4063 2f24 E8000000 call KDbgCondToFlag at PLT
+ 4063 00
+ 4064 2f29 4889C6 movq %rax, %rsi
+ 4065 2f2c BF100000 movl $16, %edi
+ 4065 00
+ 4066 2f31 E8000000 call KDbgTestModConds at PLT
+ 4066 00
+ 4067 2f36 84C0 testb %al, %al
+ 4068 2f38 745E je .L59
+ 4069 2f3a 8B85ECD7 movl -10260(%rbp), %eax
+ 4069 FFFF
+ 4070 2f40 89C7 movl %eax, %edi
+ 4071 2f42 E8B9D0FF call bswap_32
+ 4071 FF
+ 4072 2f47 4189C5 movl %eax, %r13d
+ 4073 2f4a 8B85E8D7 movl -10264(%rbp), %eax
+ 4073 FFFF
+ 4074 2f50 89C7 movl %eax, %edi
+ 4075 2f52 E8A9D0FF call bswap_32
+ 4075 FF
+ 4076 2f57 4189C4 movl %eax, %r12d
+ 4077 2f5a 8B85E4D7 movl -10268(%rbp), %eax
+ 4077 FFFF
+ 4078 2f60 89C7 movl %eax, %edi
+ 4079 2f62 E899D0FF call bswap_32
+ 4079 FF
+ 4080 2f67 89C3 movl %eax, %ebx
+ 4081 2f69 8B85E0D7 movl -10272(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 148
+
+
+ 4081 FFFF
+ 4082 2f6f 89C7 movl %eax, %edi
+ 4083 2f71 E88AD0FF call bswap_32
+ 4083 FF
+ 4084 2f76 4589E9 movl %r13d, %r9d
+ 4085 2f79 4589E0 movl %r12d, %r8d
+ 4086 2f7c 89D9 movl %ebx, %ecx
+ 4087 2f7e 89C2 movl %eax, %edx
+ 4088 2f80 488D3500 leaq .LC2(%rip), %rsi
+ 4088 000000
+ 4089 2f87 488D3D00 leaq .LC1(%rip), %rdi
+ 4089 000000
+ 4090 2f8e B8000000 movl $0, %eax
+ 4090 00
+ 4091 2f93 E8000000 call KDbgMsg at PLT
+ 4091 00
+ 4092 .L59:
+ 4093 2f98 660F6F85 movdqa -10880(%rbp), %xmm0
+ 4093 80D5FFFF
+ 4094 2fa0 F30F7F85 movdqu %xmm0, -4320(%rbp)
+ 4094 20EFFFFF
+ 4095 2fa8 660F6F85 movdqa -10864(%rbp), %xmm0
+ 4095 90D5FFFF
+ 4096 2fb0 F30F7F85 movdqu %xmm0, -4336(%rbp)
+ 4096 10EFFFFF
+ 4097 .LBE1065:
+ 4098 .LBB1066:
+ 4099 .LBB1067:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 4100 .loc 2 178 0
+ 4101 2fb8 F30F6F85 movdqu -4336(%rbp), %xmm0
+ 4101 10EFFFFF
+ 4102 2fc0 F30F6F8D movdqu -4320(%rbp), %xmm1
+ 4102 20EFFFFF
+ 4103 2fc8 660FEFC1 pxor %xmm1, %xmm0
+ 4104 .LBE1067:
+ 4105 .LBE1066:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 4106 .loc 2 1686 0
+ 4107 2fcc 660F7F85 movdqa %xmm0, -10880(%rbp)
+ 4107 80D5FFFF
+ 4108 .LBB1068:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 4109 .loc 2 1687 0
+ 4110 2fd4 660F6F85 movdqa -10880(%rbp), %xmm0
+ 4110 80D5FFFF
+ 4111 2fdc F30F7F85 movdqu %xmm0, -10288(%rbp)
+ 4111 D0D7FFFF
+ 4112 2fe4 E8000000 call KDbgWriterGet at PLT
+ 4112 00
+ 4113 2fe9 4885C0 testq %rax, %rax
+ 4114 2fec 7479 je .L61
+ 4115 2fee BF010000 movl $1, %edi
+ 4115 00
+ 4116 2ff3 E8000000 call KDbgCondToFlag at PLT
+ 4116 00
+ 4117 2ff8 4889C6 movq %rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s page 149
+
+
+ 4118 2ffb BF100000 movl $16, %edi
+ 4118 00
+ 4119 3000 E8000000 call KDbgTestModConds at PLT
+ 4119 00
+ 4120 3005 84C0 testb %al, %al
+ 4121 3007 745E je .L61
+ 4122 3009 8B85DCD7 movl -10276(%rbp), %eax
+ 4122 FFFF
+ 4123 300f 89C7 movl %eax, %edi
+ 4124 3011 E8EACFFF call bswap_32
+ 4124 FF
+ 4125 3016 4189C5 movl %eax, %r13d
+ 4126 3019 8B85D8D7 movl -10280(%rbp), %eax
+ 4126 FFFF
+ 4127 301f 89C7 movl %eax, %edi
+ 4128 3021 E8DACFFF call bswap_32
+ 4128 FF
+ 4129 3026 4189C4 movl %eax, %r12d
+ 4130 3029 8B85D4D7 movl -10284(%rbp), %eax
+ 4130 FFFF
+ 4131 302f 89C7 movl %eax, %edi
+ 4132 3031 E8CACFFF call bswap_32
+ 4132 FF
+ 4133 3036 89C3 movl %eax, %ebx
+ 4134 3038 8B85D0D7 movl -10288(%rbp), %eax
+ 4134 FFFF
+ 4135 303e 89C7 movl %eax, %edi
+ 4136 3040 E8BBCFFF call bswap_32
+ 4136 FF
+ 4137 3045 4589E9 movl %r13d, %r9d
+ 4138 3048 4589E0 movl %r12d, %r8d
+ 4139 304b 89D9 movl %ebx, %ecx
+ 4140 304d 89C2 movl %eax, %edx
+ 4141 304f 488D3500 leaq .LC3(%rip), %rsi
+ 4141 000000
+ 4142 3056 488D3D00 leaq .LC1(%rip), %rdi
+ 4142 000000
+ 4143 305d B8000000 movl $0, %eax
+ 4143 00
+ 4144 3062 E8000000 call KDbgMsg at PLT
+ 4144 00
+ 4145 .L61:
+ 4146 3067 660F6F85 movdqa -10880(%rbp), %xmm0
+ 4146 80D5FFFF
+ 4147 306f F30F7F85 movdqu %xmm0, -4304(%rbp)
+ 4147 30EFFFFF
+ 4148 3077 F30F6F85 movdqu -4304(%rbp), %xmm0
+ 4148 30EFFFFF
+ 4149 307f F30F7F85 movdqu %xmm0, -4272(%rbp)
+ 4149 50EFFFFF
+ 4150 .LBE1068:
+ 4151 .LBB1069:
+ 4152 .LBB1070:
+ 4153 .LBB1071:
+ 4154 .LBB1072:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4155 .loc 3 450 0
+
GAS LISTING /tmp/ccjbMjHD.s page 150
+
+
+ 4156 3087 F30F6F85 movdqu -4272(%rbp), %xmm0
+ 4156 50EFFFFF
+ 4157 308f 660F70C0 pshufd $255, %xmm0, %xmm0
+ 4157 FF
+ 4158 .LBE1072:
+ 4159 .LBE1071:
+ 4160 .LBE1070:
+ 4161 .LBE1069:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 4162 .loc 2 1688 0
+ 4163 3094 660F7F85 movdqa %xmm0, -10880(%rbp)
+ 4163 80D5FFFF
+ 4164 .LBB1073:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 4165 .loc 2 1689 0
+ 4166 309c 660F6F85 movdqa -10880(%rbp), %xmm0
+ 4166 80D5FFFF
+ 4167 30a4 F30F7F85 movdqu %xmm0, -10304(%rbp)
+ 4167 C0D7FFFF
+ 4168 30ac E8000000 call KDbgWriterGet at PLT
+ 4168 00
+ 4169 30b1 4885C0 testq %rax, %rax
+ 4170 30b4 7479 je .L63
+ 4171 30b6 BF010000 movl $1, %edi
+ 4171 00
+ 4172 30bb E8000000 call KDbgCondToFlag at PLT
+ 4172 00
+ 4173 30c0 4889C6 movq %rax, %rsi
+ 4174 30c3 BF100000 movl $16, %edi
+ 4174 00
+ 4175 30c8 E8000000 call KDbgTestModConds at PLT
+ 4175 00
+ 4176 30cd 84C0 testb %al, %al
+ 4177 30cf 745E je .L63
+ 4178 30d1 8B85CCD7 movl -10292(%rbp), %eax
+ 4178 FFFF
+ 4179 30d7 89C7 movl %eax, %edi
+ 4180 30d9 E822CFFF call bswap_32
+ 4180 FF
+ 4181 30de 4189C5 movl %eax, %r13d
+ 4182 30e1 8B85C8D7 movl -10296(%rbp), %eax
+ 4182 FFFF
+ 4183 30e7 89C7 movl %eax, %edi
+ 4184 30e9 E812CFFF call bswap_32
+ 4184 FF
+ 4185 30ee 4189C4 movl %eax, %r12d
+ 4186 30f1 8B85C4D7 movl -10300(%rbp), %eax
+ 4186 FFFF
+ 4187 30f7 89C7 movl %eax, %edi
+ 4188 30f9 E802CFFF call bswap_32
+ 4188 FF
+ 4189 30fe 89C3 movl %eax, %ebx
+ 4190 3100 8B85C0D7 movl -10304(%rbp), %eax
+ 4190 FFFF
+ 4191 3106 89C7 movl %eax, %edi
+ 4192 3108 E8F3CEFF call bswap_32
+ 4192 FF
+
GAS LISTING /tmp/ccjbMjHD.s page 151
+
+
+ 4193 310d 4589E9 movl %r13d, %r9d
+ 4194 3110 4589E0 movl %r12d, %r8d
+ 4195 3113 89D9 movl %ebx, %ecx
+ 4196 3115 89C2 movl %eax, %edx
+ 4197 3117 488D3500 leaq .LC4(%rip), %rsi
+ 4197 000000
+ 4198 311e 488D3D00 leaq .LC1(%rip), %rdi
+ 4198 000000
+ 4199 3125 B8000000 movl $0, %eax
+ 4199 00
+ 4200 312a E8000000 call KDbgMsg at PLT
+ 4200 00
+ 4201 .L63:
+ 4202 .LBE1073:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 4203 .loc 2 1690 0
+ 4204 312f 660F6F85 movdqa -10880(%rbp), %xmm0
+ 4204 80D5FFFF
+ 4205 .LBE1027:
+ 4206 .LBE1026:
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x20,6);
+ 4207 .loc 2 1749 0
+ 4208 3137 F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 4208 10D9FFFF
+ 4209 313f F30F6F85 movdqu -9984(%rbp), %xmm0
+ 4209 00D9FFFF
+ 4210 3147 F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 4210 60EFFFFF
+ 4211 .LBB1074:
+ 4212 .LBB1075:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4213 .loc 2 1565 0
+ 4214 314f F30F6F85 movdqu -4256(%rbp), %xmm0
+ 4214 60EFFFFF
+ 4215 3157 660F7F85 movdqa %xmm0, -10848(%rbp)
+ 4215 A0D5FFFF
+ 4216 315f 660F6F85 movdqa -10848(%rbp), %xmm0
+ 4216 A0D5FFFF
+ 4217 3167 F30F7F85 movdqu %xmm0, -4240(%rbp)
+ 4217 70EFFFFF
+ 4218 .LBB1076:
+ 4219 .LBB1077:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4220 .loc 2 1278 0
+ 4221 316f 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 4221 00000000
+ 4222 3177 F30F6F8D movdqu -4240(%rbp), %xmm1
+ 4222 70EFFFFF
+ 4223 317f F30F7F8D movdqu %xmm1, -4208(%rbp)
+ 4223 90EFFFFF
+ 4224 3187 F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 4224 80EFFFFF
+ 4225 318f F30F6F85 movdqu -4208(%rbp), %xmm0
+ 4225 90EFFFFF
+ 4226 3197 F30F7F85 movdqu %xmm0, -4176(%rbp)
+ 4226 B0EFFFFF
+ 4227 319f F30F6F85 movdqu -4224(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 152
+
+
+ 4227 80EFFFFF
+ 4228 31a7 F30F7F85 movdqu %xmm0, -4192(%rbp)
+ 4228 A0EFFFFF
+ 4229 .LBB1078:
+ 4230 .LBB1079:
+ 4231 .LBB1080:
+ 4232 .LBB1081:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4233 .loc 3 529 0
+ 4234 31af F30F6F8D movdqu -4192(%rbp), %xmm1
+ 4234 A0EFFFFF
+ 4235 31b7 F30F6F85 movdqu -4176(%rbp), %xmm0
+ 4235 B0EFFFFF
+ 4236 31bf 660F3800 pshufb %xmm1, %xmm0
+ 4236 C1
+ 4237 .LBE1081:
+ 4238 .LBE1080:
+ 4239 .LBE1079:
+ 4240 .LBE1078:
+ 4241 .LBE1077:
+ 4242 .LBE1076:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4243 .loc 2 1567 0
+ 4244 31c4 660F7F85 movdqa %xmm0, -10848(%rbp)
+ 4244 A0D5FFFF
+ 4245 31cc 660F6F85 movdqa -10848(%rbp), %xmm0
+ 4245 A0D5FFFF
+ 4246 31d4 660FEF85 pxor -4256(%rbp), %xmm0
+ 4246 60EFFFFF
+ 4247 31dc F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 4247 60EFFFFF
+ 4248 31e4 660F6F85 movdqa -10848(%rbp), %xmm0
+ 4248 A0D5FFFF
+ 4249 31ec F30F7F85 movdqu %xmm0, -4160(%rbp)
+ 4249 C0EFFFFF
+ 4250 .LBB1082:
+ 4251 .LBB1083:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4252 .loc 2 1278 0
+ 4253 31f4 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 4253 00000000
+ 4254 31fc F30F6F8D movdqu -4160(%rbp), %xmm1
+ 4254 C0EFFFFF
+ 4255 3204 F30F7F8D movdqu %xmm1, -4128(%rbp)
+ 4255 E0EFFFFF
+ 4256 320c F30F7F85 movdqu %xmm0, -4144(%rbp)
+ 4256 D0EFFFFF
+ 4257 3214 F30F6F85 movdqu -4128(%rbp), %xmm0
+ 4257 E0EFFFFF
+ 4258 321c F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 4258 00F0FFFF
+ 4259 3224 F30F6F85 movdqu -4144(%rbp), %xmm0
+ 4259 D0EFFFFF
+ 4260 322c F30F7F85 movdqu %xmm0, -4112(%rbp)
+ 4260 F0EFFFFF
+ 4261 .LBB1084:
+ 4262 .LBB1085:
+
GAS LISTING /tmp/ccjbMjHD.s page 153
+
+
+ 4263 .LBB1086:
+ 4264 .LBB1087:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4265 .loc 3 529 0
+ 4266 3234 F30F6F8D movdqu -4112(%rbp), %xmm1
+ 4266 F0EFFFFF
+ 4267 323c F30F6F85 movdqu -4096(%rbp), %xmm0
+ 4267 00F0FFFF
+ 4268 3244 660F3800 pshufb %xmm1, %xmm0
+ 4268 C1
+ 4269 .LBE1087:
+ 4270 .LBE1086:
+ 4271 .LBE1085:
+ 4272 .LBE1084:
+ 4273 .LBE1083:
+ 4274 .LBE1082:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4275 .loc 2 1568 0
+ 4276 3249 660F7F85 movdqa %xmm0, -10848(%rbp)
+ 4276 A0D5FFFF
+ 4277 3251 660F6F85 movdqa -10848(%rbp), %xmm0
+ 4277 A0D5FFFF
+ 4278 3259 660FEF85 pxor -4256(%rbp), %xmm0
+ 4278 60EFFFFF
+ 4279 3261 F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 4279 60EFFFFF
+ 4280 3269 660F6F85 movdqa -10848(%rbp), %xmm0
+ 4280 A0D5FFFF
+ 4281 3271 F30F7F85 movdqu %xmm0, -4080(%rbp)
+ 4281 10F0FFFF
+ 4282 .LBB1088:
+ 4283 .LBB1089:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4284 .loc 2 1278 0
+ 4285 3279 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 4285 00000000
+ 4286 3281 F30F6F8D movdqu -4080(%rbp), %xmm1
+ 4286 10F0FFFF
+ 4287 3289 F30F7F8D movdqu %xmm1, -4048(%rbp)
+ 4287 30F0FFFF
+ 4288 3291 F30F7F85 movdqu %xmm0, -4064(%rbp)
+ 4288 20F0FFFF
+ 4289 3299 F30F6F85 movdqu -4048(%rbp), %xmm0
+ 4289 30F0FFFF
+ 4290 32a1 F30F7F85 movdqu %xmm0, -4016(%rbp)
+ 4290 50F0FFFF
+ 4291 32a9 F30F6F85 movdqu -4064(%rbp), %xmm0
+ 4291 20F0FFFF
+ 4292 32b1 F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 4292 40F0FFFF
+ 4293 .LBB1090:
+ 4294 .LBB1091:
+ 4295 .LBB1092:
+ 4296 .LBB1093:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4297 .loc 3 529 0
+ 4298 32b9 F30F6F8D movdqu -4032(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 154
+
+
+ 4298 40F0FFFF
+ 4299 32c1 F30F6F85 movdqu -4016(%rbp), %xmm0
+ 4299 50F0FFFF
+ 4300 32c9 660F3800 pshufb %xmm1, %xmm0
+ 4300 C1
+ 4301 .LBE1093:
+ 4302 .LBE1092:
+ 4303 .LBE1091:
+ 4304 .LBE1090:
+ 4305 .LBE1089:
+ 4306 .LBE1088:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4307 .loc 2 1569 0
+ 4308 32ce 660F7F85 movdqa %xmm0, -10848(%rbp)
+ 4308 A0D5FFFF
+ 4309 32d6 660F6F85 movdqa -10848(%rbp), %xmm0
+ 4309 A0D5FFFF
+ 4310 32de 660FEF85 pxor -4256(%rbp), %xmm0
+ 4310 60EFFFFF
+ 4311 32e6 F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 4311 60EFFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4312 .loc 2 1571 0
+ 4313 32ee F30F6F85 movdqu -4256(%rbp), %xmm0
+ 4313 60EFFFFF
+ 4314 .LBE1075:
+ 4315 .LBE1074:
+ 4316 .loc 2 1749 0
+ 4317 32f6 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 4317 00D9FFFF
+ 4318 32fe F30F6F85 movdqu -9968(%rbp), %xmm0
+ 4318 10D9FFFF
+ 4319 3306 F30F6F8D movdqu -9984(%rbp), %xmm1
+ 4319 00D9FFFF
+ 4320 330e 660FEFC1 pxor %xmm1, %xmm0
+ 4321 3312 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 4321 00D9FFFF
+ 4322 331a 488B8578 movq -10632(%rbp), %rax
+ 4322 D6FFFF
+ 4323 3321 4883C060 addq $96, %rax
+ 4324 3325 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 4324 00D9FFFF
+ 4325 332d F30F7F00 movdqu %xmm0, (%rax)
+ 4326 3331 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 4326 00D9FFFF
+ 4327 3339 F30F7F85 movdqu %xmm0, -3984(%rbp)
+ 4327 70F0FFFF
+ 4328 .LBB1094:
+ 4329 .LBB1095:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4330 .loc 2 1681 0
+ 4331 3341 B8400000 movl $64, %eax
+ 4331 00
+ 4332 3346 660F6F05 movdqa vec_00(%rip), %xmm0
+ 4332 00000000
+ 4333 334e F30F7F85 movdqu %xmm0, -3952(%rbp)
+ 4333 90F0FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 155
+
+
+ 4334 3356 89858CF0 movl %eax, -3956(%rbp)
+ 4334 FFFF
+ 4335 335c F30F6F85 movdqu -3952(%rbp), %xmm0
+ 4335 90F0FFFF
+ 4336 3364 F30F7F85 movdqu %xmm0, -3920(%rbp)
+ 4336 B0F0FFFF
+ 4337 336c 8B858CF0 movl -3956(%rbp), %eax
+ 4337 FFFF
+ 4338 3372 8985ACF0 movl %eax, -3924(%rbp)
+ 4338 FFFF
+ 4339 .LBB1096:
+ 4340 .LBB1097:
+ 4341 .LBB1098:
+ 4342 .LBB1099:
+ 4343 .loc 3 598 0
+ 4344 3378 8B85ACF0 movl -3924(%rbp), %eax
+ 4344 FFFF
+ 4345 337e F30F6F85 movdqu -3920(%rbp), %xmm0
+ 4345 B0F0FFFF
+ 4346 3386 660F3A22 pinsrd $3, %eax, %xmm0
+ 4346 C003
+ 4347 .LBE1099:
+ 4348 .LBE1098:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 4349 .loc 2 519 0
+ 4350 338c F30F7F85 movdqu %xmm0, -3952(%rbp)
+ 4350 90F0FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4351 .loc 2 526 0
+ 4352 3394 F30F6F85 movdqu -3952(%rbp), %xmm0
+ 4352 90F0FFFF
+ 4353 .LBE1097:
+ 4354 .LBE1096:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4355 .loc 2 1681 0
+ 4356 339c 660F7F85 movdqa %xmm0, -10816(%rbp)
+ 4356 C0D5FFFF
+ 4357 33a4 F30F6F85 movdqu -3984(%rbp), %xmm0
+ 4357 70F0FFFF
+ 4358 33ac F30F7F85 movdqu %xmm0, -3904(%rbp)
+ 4358 C0F0FFFF
+ 4359 33b4 F30F6F85 movdqu -3904(%rbp), %xmm0
+ 4359 C0F0FFFF
+ 4360 33bc F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 4360 E0F0FFFF
+ 4361 33c4 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 4361 000000
+ 4362 33cb 488985D8 movq %rax, -3880(%rbp)
+ 4362 F0FFFF
+ 4363 .LBB1100:
+ 4364 .LBB1101:
+ 4365 .LBB1102:
+ 4366 .LBB1103:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 4367 .loc 2 851 0
+ 4368 33d2 660F6F05 movdqa vec_00(%rip), %xmm0
+ 4368 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 156
+
+
+ 4369 33da F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 4369 00F1FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4370 .loc 2 854 0
+ 4371 33e2 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 4371 00000000
+ 4372 33ea F30F6F8D movdqu -3872(%rbp), %xmm1
+ 4372 E0F0FFFF
+ 4373 33f2 F30F7F8D movdqu %xmm1, -3760(%rbp)
+ 4373 50F1FFFF
+ 4374 33fa F30F7F85 movdqu %xmm0, -3776(%rbp)
+ 4374 40F1FFFF
+ 4375 .LBB1104:
+ 4376 .LBB1105:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 4377 .loc 2 206 0
+ 4378 3402 F30F6F85 movdqu -3776(%rbp), %xmm0
+ 4378 40F1FFFF
+ 4379 340a F30F6F8D movdqu -3760(%rbp), %xmm1
+ 4379 50F1FFFF
+ 4380 3412 660FDBC1 pand %xmm1, %xmm0
+ 4381 .LBE1105:
+ 4382 .LBE1104:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4383 .loc 2 854 0
+ 4384 3416 F30F7F85 movdqu %xmm0, -3792(%rbp)
+ 4384 30F1FFFF
+ 4385 341e F30F6F85 movdqu -3872(%rbp), %xmm0
+ 4385 E0F0FFFF
+ 4386 3426 F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 4386 70F1FFFF
+ 4387 .LBB1106:
+ 4388 .LBB1107:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 4389 .loc 3 433 0
+ 4390 342e F30F6F85 movdqu -3728(%rbp), %xmm0
+ 4390 70F1FFFF
+ 4391 3436 660F72D0 psrld $4, %xmm0
+ 4391 04
+ 4392 .LBE1107:
+ 4393 .LBE1106:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 4394 .loc 2 857 0
+ 4395 343b F30F7F85 movdqu %xmm0, -3808(%rbp)
+ 4395 20F1FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4396 .loc 2 859 0
+ 4397 3443 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 4397 00000000
+ 4398 344b F30F6F8D movdqu -3808(%rbp), %xmm1
+ 4398 20F1FFFF
+ 4399 3453 F30F7F8D movdqu %xmm1, -3696(%rbp)
+ 4399 90F1FFFF
+ 4400 345b F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 4400 80F1FFFF
+ 4401 .LBB1108:
+ 4402 .LBB1109:
+
GAS LISTING /tmp/ccjbMjHD.s page 157
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 4403 .loc 2 206 0
+ 4404 3463 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 4404 80F1FFFF
+ 4405 346b F30F6F8D movdqu -3696(%rbp), %xmm1
+ 4405 90F1FFFF
+ 4406 3473 660FDBC1 pand %xmm1, %xmm0
+ 4407 .LBE1109:
+ 4408 .LBE1108:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4409 .loc 2 859 0
+ 4410 3477 F30F7F85 movdqu %xmm0, -3808(%rbp)
+ 4410 20F1FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 4411 .loc 2 866 0
+ 4412 347f C785FCF0 movl $0, -3844(%rbp)
+ 4412 FFFF0000
+ 4412 0000
+ 4413 3489 E9BE0100 jmp .L64
+ 4413 00
+ 4414 .L65:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4415 .loc 2 868 0
+ 4416 348e 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 4416 00000000
+ 4417 3496 F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 4417 B0F1FFFF
+ 4418 349e F30F6F85 movdqu -3808(%rbp), %xmm0
+ 4418 20F1FFFF
+ 4419 34a6 F30F7F85 movdqu %xmm0, -3680(%rbp)
+ 4419 A0F1FFFF
+ 4420 34ae F30F6F85 movdqu -3664(%rbp), %xmm0
+ 4420 B0F1FFFF
+ 4421 34b6 F30F7F85 movdqu %xmm0, -3632(%rbp)
+ 4421 D0F1FFFF
+ 4422 34be F30F6F85 movdqu -3680(%rbp), %xmm0
+ 4422 A0F1FFFF
+ 4423 34c6 F30F7F85 movdqu %xmm0, -3648(%rbp)
+ 4423 C0F1FFFF
+ 4424 .LBB1110:
+ 4425 .LBB1111:
+ 4426 .LBB1112:
+ 4427 .LBB1113:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4428 .loc 3 529 0
+ 4429 34ce F30F6F8D movdqu -3648(%rbp), %xmm1
+ 4429 C0F1FFFF
+ 4430 34d6 F30F6F85 movdqu -3632(%rbp), %xmm0
+ 4430 D0F1FFFF
+ 4431 34de 660F3800 pshufb %xmm1, %xmm0
+ 4431 C1
+ 4432 .LBE1113:
+ 4433 .LBE1112:
+ 4434 .LBE1111:
+ 4435 .LBE1110:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4436 .loc 2 868 0
+
GAS LISTING /tmp/ccjbMjHD.s page 158
+
+
+ 4437 34e3 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 4437 10F1FFFF
+ 4438 34eb F30F6F85 movdqu -3792(%rbp), %xmm0
+ 4438 30F1FFFF
+ 4439 34f3 F30F7F85 movdqu %xmm0, -3600(%rbp)
+ 4439 F0F1FFFF
+ 4440 34fb F30F6F85 movdqu -3824(%rbp), %xmm0
+ 4440 10F1FFFF
+ 4441 3503 F30F7F85 movdqu %xmm0, -3616(%rbp)
+ 4441 E0F1FFFF
+ 4442 .LBB1114:
+ 4443 .LBB1115:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 4444 .loc 2 234 0
+ 4445 350b F30F6F85 movdqu -3616(%rbp), %xmm0
+ 4445 E0F1FFFF
+ 4446 3513 F30F6F8D movdqu -3600(%rbp), %xmm1
+ 4446 F0F1FFFF
+ 4447 351b 660FEBC1 por %xmm1, %xmm0
+ 4448 .LBE1115:
+ 4449 .LBE1114:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 4450 .loc 2 870 0
+ 4451 351f F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 4451 10F1FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 4452 .loc 2 872 0
+ 4453 3527 8B85FCF0 mov -3844(%rbp), %eax
+ 4453 FFFF
+ 4454 352d 48C1E004 salq $4, %rax
+ 4455 3531 480385D8 addq -3880(%rbp), %rax
+ 4455 F0FFFF
+ 4456 3538 660F6F00 movdqa (%rax), %xmm0
+ 4457 353c F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 4457 10F2FFFF
+ 4458 3544 F30F6F85 movdqu -3824(%rbp), %xmm0
+ 4458 10F1FFFF
+ 4459 354c F30F7F85 movdqu %xmm0, -3584(%rbp)
+ 4459 00F2FFFF
+ 4460 3554 F30F6F85 movdqu -3568(%rbp), %xmm0
+ 4460 10F2FFFF
+ 4461 355c F30F7F85 movdqu %xmm0, -3536(%rbp)
+ 4461 30F2FFFF
+ 4462 3564 F30F6F85 movdqu -3584(%rbp), %xmm0
+ 4462 00F2FFFF
+ 4463 356c F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 4463 20F2FFFF
+ 4464 .LBB1116:
+ 4465 .LBB1117:
+ 4466 .LBB1118:
+ 4467 .LBB1119:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4468 .loc 3 529 0
+ 4469 3574 F30F6F8D movdqu -3552(%rbp), %xmm1
+ 4469 20F2FFFF
+ 4470 357c F30F6F85 movdqu -3536(%rbp), %xmm0
+ 4470 30F2FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 159
+
+
+ 4471 3584 660F3800 pshufb %xmm1, %xmm0
+ 4471 C1
+ 4472 .LBE1119:
+ 4473 .LBE1118:
+ 4474 .LBE1117:
+ 4475 .LBE1116:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 4476 .loc 2 872 0
+ 4477 3589 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 4477 10F1FFFF
+ 4478 3591 F30F6F85 movdqu -3840(%rbp), %xmm0
+ 4478 00F1FFFF
+ 4479 3599 F30F7F85 movdqu %xmm0, -3504(%rbp)
+ 4479 50F2FFFF
+ 4480 35a1 F30F6F85 movdqu -3824(%rbp), %xmm0
+ 4480 10F1FFFF
+ 4481 35a9 F30F7F85 movdqu %xmm0, -3520(%rbp)
+ 4481 40F2FFFF
+ 4482 .LBB1120:
+ 4483 .LBB1121:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 4484 .loc 2 234 0
+ 4485 35b1 F30F6F85 movdqu -3520(%rbp), %xmm0
+ 4485 40F2FFFF
+ 4486 35b9 F30F6F8D movdqu -3504(%rbp), %xmm1
+ 4486 50F2FFFF
+ 4487 35c1 660FEBC1 por %xmm1, %xmm0
+ 4488 .LBE1121:
+ 4489 .LBE1120:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 4490 .loc 2 874 0
+ 4491 35c5 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 4491 00F1FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 4492 .loc 2 876 0
+ 4493 35cd 660F6F05 movdqa vec_01(%rip), %xmm0
+ 4493 00000000
+ 4494 35d5 F30F6F8D movdqu -3808(%rbp), %xmm1
+ 4494 20F1FFFF
+ 4495 35dd F30F7F8D movdqu %xmm1, -3472(%rbp)
+ 4495 70F2FFFF
+ 4496 35e5 F30F7F85 movdqu %xmm0, -3488(%rbp)
+ 4496 60F2FFFF
+ 4497 .LBB1122:
+ 4498 .LBB1123:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 4499 .loc 2 290 0
+ 4500 35ed F30F6F8D movdqu -3488(%rbp), %xmm1
+ 4500 60F2FFFF
+ 4501 35f5 F30F6F85 movdqu -3472(%rbp), %xmm0
+ 4501 70F2FFFF
+ 4502 35fd 660FF8C1 psubb %xmm1, %xmm0
+ 4503 .LBE1123:
+ 4504 .LBE1122:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 4505 .loc 2 876 0
+ 4506 3601 F30F7F85 movdqu %xmm0, -3808(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 160
+
+
+ 4506 20F1FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4507 .loc 2 878 0
+ 4508 3609 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 4508 00000000
+ 4509 3611 F30F6F8D movdqu -3808(%rbp), %xmm1
+ 4509 20F1FFFF
+ 4510 3619 F30F7F8D movdqu %xmm1, -3440(%rbp)
+ 4510 90F2FFFF
+ 4511 3621 F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 4511 80F2FFFF
+ 4512 .LBB1124:
+ 4513 .LBB1125:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 4514 .loc 2 206 0
+ 4515 3629 F30F6F85 movdqu -3456(%rbp), %xmm0
+ 4515 80F2FFFF
+ 4516 3631 F30F6F8D movdqu -3440(%rbp), %xmm1
+ 4516 90F2FFFF
+ 4517 3639 660FDBC1 pand %xmm1, %xmm0
+ 4518 .LBE1125:
+ 4519 .LBE1124:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4520 .loc 2 878 0
+ 4521 363d F30F7F85 movdqu %xmm0, -3808(%rbp)
+ 4521 20F1FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 4522 .loc 2 866 0
+ 4523 3645 8385FCF0 addl $1, -3844(%rbp)
+ 4523 FFFF01
+ 4524 .L64:
+ 4525 364c 83BDFCF0 cmpl $15, -3844(%rbp)
+ 4525 FFFF0F
+ 4526 3653 0F8635FE jbe .L65
+ 4526 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 4527 .loc 2 882 0
+ 4528 3659 F30F6F85 movdqu -3840(%rbp), %xmm0
+ 4528 00F1FFFF
+ 4529 .LBE1103:
+ 4530 .LBE1102:
+ 4531 .LBE1101:
+ 4532 .LBE1100:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 4533 .loc 2 1682 0
+ 4534 3661 660F7F85 movdqa %xmm0, -10832(%rbp)
+ 4534 B0D5FFFF
+ 4535 .LBB1126:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 4536 .loc 2 1683 0
+ 4537 3669 660F6F85 movdqa -10832(%rbp), %xmm0
+ 4537 B0D5FFFF
+ 4538 3671 F30F7F85 movdqu %xmm0, -10192(%rbp)
+ 4538 30D8FFFF
+ 4539 3679 E8000000 call KDbgWriterGet at PLT
+ 4539 00
+ 4540 367e 4885C0 testq %rax, %rax
+
GAS LISTING /tmp/ccjbMjHD.s page 161
+
+
+ 4541 3681 7479 je .L67
+ 4542 3683 BF010000 movl $1, %edi
+ 4542 00
+ 4543 3688 E8000000 call KDbgCondToFlag at PLT
+ 4543 00
+ 4544 368d 4889C6 movq %rax, %rsi
+ 4545 3690 BF100000 movl $16, %edi
+ 4545 00
+ 4546 3695 E8000000 call KDbgTestModConds at PLT
+ 4546 00
+ 4547 369a 84C0 testb %al, %al
+ 4548 369c 745E je .L67
+ 4549 369e 8B853CD8 movl -10180(%rbp), %eax
+ 4549 FFFF
+ 4550 36a4 89C7 movl %eax, %edi
+ 4551 36a6 E855C9FF call bswap_32
+ 4551 FF
+ 4552 36ab 4189C5 movl %eax, %r13d
+ 4553 36ae 8B8538D8 movl -10184(%rbp), %eax
+ 4553 FFFF
+ 4554 36b4 89C7 movl %eax, %edi
+ 4555 36b6 E845C9FF call bswap_32
+ 4555 FF
+ 4556 36bb 4189C4 movl %eax, %r12d
+ 4557 36be 8B8534D8 movl -10188(%rbp), %eax
+ 4557 FFFF
+ 4558 36c4 89C7 movl %eax, %edi
+ 4559 36c6 E835C9FF call bswap_32
+ 4559 FF
+ 4560 36cb 89C3 movl %eax, %ebx
+ 4561 36cd 8B8530D8 movl -10192(%rbp), %eax
+ 4561 FFFF
+ 4562 36d3 89C7 movl %eax, %edi
+ 4563 36d5 E826C9FF call bswap_32
+ 4563 FF
+ 4564 36da 4589E9 movl %r13d, %r9d
+ 4565 36dd 4589E0 movl %r12d, %r8d
+ 4566 36e0 89D9 movl %ebx, %ecx
+ 4567 36e2 89C2 movl %eax, %edx
+ 4568 36e4 488D3500 leaq .LC0(%rip), %rsi
+ 4568 000000
+ 4569 36eb 488D3D00 leaq .LC1(%rip), %rdi
+ 4569 000000
+ 4570 36f2 B8000000 movl $0, %eax
+ 4570 00
+ 4571 36f7 E8000000 call KDbgMsg at PLT
+ 4571 00
+ 4572 .L67:
+ 4573 36fc 660F6F85 movdqa -10832(%rbp), %xmm0
+ 4573 B0D5FFFF
+ 4574 3704 F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 4574 A0F2FFFF
+ 4575 .LBE1126:
+ 4576 .LBB1127:
+ 4577 .LBB1128:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4578 .loc 2 667 0
+
GAS LISTING /tmp/ccjbMjHD.s page 162
+
+
+ 4579 370c 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 4579 00000000
+ 4580 3714 F30F6F8D movdqu -3424(%rbp), %xmm1
+ 4580 A0F2FFFF
+ 4581 371c F30F7F8D movdqu %xmm1, -3392(%rbp)
+ 4581 C0F2FFFF
+ 4582 3724 F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 4582 B0F2FFFF
+ 4583 372c F30F6F85 movdqu -3392(%rbp), %xmm0
+ 4583 C0F2FFFF
+ 4584 3734 F30F7F85 movdqu %xmm0, -3360(%rbp)
+ 4584 E0F2FFFF
+ 4585 373c F30F6F85 movdqu -3408(%rbp), %xmm0
+ 4585 B0F2FFFF
+ 4586 3744 F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 4586 D0F2FFFF
+ 4587 .LBB1129:
+ 4588 .LBB1130:
+ 4589 .LBB1131:
+ 4590 .LBB1132:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4591 .loc 3 529 0
+ 4592 374c F30F6F8D movdqu -3376(%rbp), %xmm1
+ 4592 D0F2FFFF
+ 4593 3754 F30F6F85 movdqu -3360(%rbp), %xmm0
+ 4593 E0F2FFFF
+ 4594 375c 660F3800 pshufb %xmm1, %xmm0
+ 4594 C1
+ 4595 .LBE1132:
+ 4596 .LBE1131:
+ 4597 .LBE1130:
+ 4598 .LBE1129:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4599 .loc 2 667 0
+ 4600 3761 F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 4600 A0F2FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4601 .loc 2 668 0
+ 4602 3769 F30F6F85 movdqu -3424(%rbp), %xmm0
+ 4602 A0F2FFFF
+ 4603 .LBE1128:
+ 4604 .LBE1127:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 4605 .loc 2 1684 0
+ 4606 3771 660F7F85 movdqa %xmm0, -10832(%rbp)
+ 4606 B0D5FFFF
+ 4607 .LBB1133:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 4608 .loc 2 1685 0
+ 4609 3779 660F6F85 movdqa -10832(%rbp), %xmm0
+ 4609 B0D5FFFF
+ 4610 3781 F30F7F85 movdqu %xmm0, -10208(%rbp)
+ 4610 20D8FFFF
+ 4611 3789 E8000000 call KDbgWriterGet at PLT
+ 4611 00
+ 4612 378e 4885C0 testq %rax, %rax
+ 4613 3791 7479 je .L69
+
GAS LISTING /tmp/ccjbMjHD.s page 163
+
+
+ 4614 3793 BF010000 movl $1, %edi
+ 4614 00
+ 4615 3798 E8000000 call KDbgCondToFlag at PLT
+ 4615 00
+ 4616 379d 4889C6 movq %rax, %rsi
+ 4617 37a0 BF100000 movl $16, %edi
+ 4617 00
+ 4618 37a5 E8000000 call KDbgTestModConds at PLT
+ 4618 00
+ 4619 37aa 84C0 testb %al, %al
+ 4620 37ac 745E je .L69
+ 4621 37ae 8B852CD8 movl -10196(%rbp), %eax
+ 4621 FFFF
+ 4622 37b4 89C7 movl %eax, %edi
+ 4623 37b6 E845C8FF call bswap_32
+ 4623 FF
+ 4624 37bb 4189C5 movl %eax, %r13d
+ 4625 37be 8B8528D8 movl -10200(%rbp), %eax
+ 4625 FFFF
+ 4626 37c4 89C7 movl %eax, %edi
+ 4627 37c6 E835C8FF call bswap_32
+ 4627 FF
+ 4628 37cb 4189C4 movl %eax, %r12d
+ 4629 37ce 8B8524D8 movl -10204(%rbp), %eax
+ 4629 FFFF
+ 4630 37d4 89C7 movl %eax, %edi
+ 4631 37d6 E825C8FF call bswap_32
+ 4631 FF
+ 4632 37db 89C3 movl %eax, %ebx
+ 4633 37dd 8B8520D8 movl -10208(%rbp), %eax
+ 4633 FFFF
+ 4634 37e3 89C7 movl %eax, %edi
+ 4635 37e5 E816C8FF call bswap_32
+ 4635 FF
+ 4636 37ea 4589E9 movl %r13d, %r9d
+ 4637 37ed 4589E0 movl %r12d, %r8d
+ 4638 37f0 89D9 movl %ebx, %ecx
+ 4639 37f2 89C2 movl %eax, %edx
+ 4640 37f4 488D3500 leaq .LC2(%rip), %rsi
+ 4640 000000
+ 4641 37fb 488D3D00 leaq .LC1(%rip), %rdi
+ 4641 000000
+ 4642 3802 B8000000 movl $0, %eax
+ 4642 00
+ 4643 3807 E8000000 call KDbgMsg at PLT
+ 4643 00
+ 4644 .L69:
+ 4645 380c 660F6F85 movdqa -10832(%rbp), %xmm0
+ 4645 B0D5FFFF
+ 4646 3814 F30F7F85 movdqu %xmm0, -3328(%rbp)
+ 4646 00F3FFFF
+ 4647 381c 660F6F85 movdqa -10816(%rbp), %xmm0
+ 4647 C0D5FFFF
+ 4648 3824 F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 4648 F0F2FFFF
+ 4649 .LBE1133:
+ 4650 .LBB1134:
+
GAS LISTING /tmp/ccjbMjHD.s page 164
+
+
+ 4651 .LBB1135:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 4652 .loc 2 178 0
+ 4653 382c F30F6F85 movdqu -3344(%rbp), %xmm0
+ 4653 F0F2FFFF
+ 4654 3834 F30F6F8D movdqu -3328(%rbp), %xmm1
+ 4654 00F3FFFF
+ 4655 383c 660FEFC1 pxor %xmm1, %xmm0
+ 4656 .LBE1135:
+ 4657 .LBE1134:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 4658 .loc 2 1686 0
+ 4659 3840 660F7F85 movdqa %xmm0, -10832(%rbp)
+ 4659 B0D5FFFF
+ 4660 .LBB1136:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 4661 .loc 2 1687 0
+ 4662 3848 660F6F85 movdqa -10832(%rbp), %xmm0
+ 4662 B0D5FFFF
+ 4663 3850 F30F7F85 movdqu %xmm0, -10224(%rbp)
+ 4663 10D8FFFF
+ 4664 3858 E8000000 call KDbgWriterGet at PLT
+ 4664 00
+ 4665 385d 4885C0 testq %rax, %rax
+ 4666 3860 7479 je .L71
+ 4667 3862 BF010000 movl $1, %edi
+ 4667 00
+ 4668 3867 E8000000 call KDbgCondToFlag at PLT
+ 4668 00
+ 4669 386c 4889C6 movq %rax, %rsi
+ 4670 386f BF100000 movl $16, %edi
+ 4670 00
+ 4671 3874 E8000000 call KDbgTestModConds at PLT
+ 4671 00
+ 4672 3879 84C0 testb %al, %al
+ 4673 387b 745E je .L71
+ 4674 387d 8B851CD8 movl -10212(%rbp), %eax
+ 4674 FFFF
+ 4675 3883 89C7 movl %eax, %edi
+ 4676 3885 E876C7FF call bswap_32
+ 4676 FF
+ 4677 388a 4189C5 movl %eax, %r13d
+ 4678 388d 8B8518D8 movl -10216(%rbp), %eax
+ 4678 FFFF
+ 4679 3893 89C7 movl %eax, %edi
+ 4680 3895 E866C7FF call bswap_32
+ 4680 FF
+ 4681 389a 4189C4 movl %eax, %r12d
+ 4682 389d 8B8514D8 movl -10220(%rbp), %eax
+ 4682 FFFF
+ 4683 38a3 89C7 movl %eax, %edi
+ 4684 38a5 E856C7FF call bswap_32
+ 4684 FF
+ 4685 38aa 89C3 movl %eax, %ebx
+ 4686 38ac 8B8510D8 movl -10224(%rbp), %eax
+ 4686 FFFF
+ 4687 38b2 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 165
+
+
+ 4688 38b4 E847C7FF call bswap_32
+ 4688 FF
+ 4689 38b9 4589E9 movl %r13d, %r9d
+ 4690 38bc 4589E0 movl %r12d, %r8d
+ 4691 38bf 89D9 movl %ebx, %ecx
+ 4692 38c1 89C2 movl %eax, %edx
+ 4693 38c3 488D3500 leaq .LC3(%rip), %rsi
+ 4693 000000
+ 4694 38ca 488D3D00 leaq .LC1(%rip), %rdi
+ 4694 000000
+ 4695 38d1 B8000000 movl $0, %eax
+ 4695 00
+ 4696 38d6 E8000000 call KDbgMsg at PLT
+ 4696 00
+ 4697 .L71:
+ 4698 38db 660F6F85 movdqa -10832(%rbp), %xmm0
+ 4698 B0D5FFFF
+ 4699 38e3 F30F7F85 movdqu %xmm0, -3312(%rbp)
+ 4699 10F3FFFF
+ 4700 38eb F30F6F85 movdqu -3312(%rbp), %xmm0
+ 4700 10F3FFFF
+ 4701 38f3 F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 4701 30F3FFFF
+ 4702 .LBE1136:
+ 4703 .LBB1137:
+ 4704 .LBB1138:
+ 4705 .LBB1139:
+ 4706 .LBB1140:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4707 .loc 3 450 0
+ 4708 38fb F30F6F85 movdqu -3280(%rbp), %xmm0
+ 4708 30F3FFFF
+ 4709 3903 660F70C0 pshufd $255, %xmm0, %xmm0
+ 4709 FF
+ 4710 .LBE1140:
+ 4711 .LBE1139:
+ 4712 .LBE1138:
+ 4713 .LBE1137:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 4714 .loc 2 1688 0
+ 4715 3908 660F7F85 movdqa %xmm0, -10832(%rbp)
+ 4715 B0D5FFFF
+ 4716 .LBB1141:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 4717 .loc 2 1689 0
+ 4718 3910 660F6F85 movdqa -10832(%rbp), %xmm0
+ 4718 B0D5FFFF
+ 4719 3918 F30F7F85 movdqu %xmm0, -10240(%rbp)
+ 4719 00D8FFFF
+ 4720 3920 E8000000 call KDbgWriterGet at PLT
+ 4720 00
+ 4721 3925 4885C0 testq %rax, %rax
+ 4722 3928 7479 je .L73
+ 4723 392a BF010000 movl $1, %edi
+ 4723 00
+ 4724 392f E8000000 call KDbgCondToFlag at PLT
+ 4724 00
+
GAS LISTING /tmp/ccjbMjHD.s page 166
+
+
+ 4725 3934 4889C6 movq %rax, %rsi
+ 4726 3937 BF100000 movl $16, %edi
+ 4726 00
+ 4727 393c E8000000 call KDbgTestModConds at PLT
+ 4727 00
+ 4728 3941 84C0 testb %al, %al
+ 4729 3943 745E je .L73
+ 4730 3945 8B850CD8 movl -10228(%rbp), %eax
+ 4730 FFFF
+ 4731 394b 89C7 movl %eax, %edi
+ 4732 394d E8AEC6FF call bswap_32
+ 4732 FF
+ 4733 3952 4189C5 movl %eax, %r13d
+ 4734 3955 8B8508D8 movl -10232(%rbp), %eax
+ 4734 FFFF
+ 4735 395b 89C7 movl %eax, %edi
+ 4736 395d E89EC6FF call bswap_32
+ 4736 FF
+ 4737 3962 4189C4 movl %eax, %r12d
+ 4738 3965 8B8504D8 movl -10236(%rbp), %eax
+ 4738 FFFF
+ 4739 396b 89C7 movl %eax, %edi
+ 4740 396d E88EC6FF call bswap_32
+ 4740 FF
+ 4741 3972 89C3 movl %eax, %ebx
+ 4742 3974 8B8500D8 movl -10240(%rbp), %eax
+ 4742 FFFF
+ 4743 397a 89C7 movl %eax, %edi
+ 4744 397c E87FC6FF call bswap_32
+ 4744 FF
+ 4745 3981 4589E9 movl %r13d, %r9d
+ 4746 3984 4589E0 movl %r12d, %r8d
+ 4747 3987 89D9 movl %ebx, %ecx
+ 4748 3989 89C2 movl %eax, %edx
+ 4749 398b 488D3500 leaq .LC4(%rip), %rsi
+ 4749 000000
+ 4750 3992 488D3D00 leaq .LC1(%rip), %rdi
+ 4750 000000
+ 4751 3999 B8000000 movl $0, %eax
+ 4751 00
+ 4752 399e E8000000 call KDbgMsg at PLT
+ 4752 00
+ 4753 .L73:
+ 4754 .LBE1141:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 4755 .loc 2 1690 0
+ 4756 39a3 660F6F85 movdqa -10832(%rbp), %xmm0
+ 4756 B0D5FFFF
+ 4757 .LBE1095:
+ 4758 .LBE1094:
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x40,7);
+ 4759 .loc 2 1750 0
+ 4760 39ab F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 4760 10D9FFFF
+ 4761 39b3 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 4761 00D9FFFF
+ 4762 39bb F30F7F85 movdqu %xmm0, -3264(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 167
+
+
+ 4762 40F3FFFF
+ 4763 .LBB1142:
+ 4764 .LBB1143:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 4765 .loc 2 1565 0
+ 4766 39c3 F30F6F85 movdqu -3264(%rbp), %xmm0
+ 4766 40F3FFFF
+ 4767 39cb 660F7F85 movdqa %xmm0, -10800(%rbp)
+ 4767 D0D5FFFF
+ 4768 39d3 660F6F85 movdqa -10800(%rbp), %xmm0
+ 4768 D0D5FFFF
+ 4769 39db F30F7F85 movdqu %xmm0, -3248(%rbp)
+ 4769 50F3FFFF
+ 4770 .LBB1144:
+ 4771 .LBB1145:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4772 .loc 2 1278 0
+ 4773 39e3 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 4773 00000000
+ 4774 39eb F30F6F8D movdqu -3248(%rbp), %xmm1
+ 4774 50F3FFFF
+ 4775 39f3 F30F7F8D movdqu %xmm1, -3216(%rbp)
+ 4775 70F3FFFF
+ 4776 39fb F30F7F85 movdqu %xmm0, -3232(%rbp)
+ 4776 60F3FFFF
+ 4777 3a03 F30F6F85 movdqu -3216(%rbp), %xmm0
+ 4777 70F3FFFF
+ 4778 3a0b F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 4778 90F3FFFF
+ 4779 3a13 F30F6F85 movdqu -3232(%rbp), %xmm0
+ 4779 60F3FFFF
+ 4780 3a1b F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 4780 80F3FFFF
+ 4781 .LBB1146:
+ 4782 .LBB1147:
+ 4783 .LBB1148:
+ 4784 .LBB1149:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4785 .loc 3 529 0
+ 4786 3a23 F30F6F8D movdqu -3200(%rbp), %xmm1
+ 4786 80F3FFFF
+ 4787 3a2b F30F6F85 movdqu -3184(%rbp), %xmm0
+ 4787 90F3FFFF
+ 4788 3a33 660F3800 pshufb %xmm1, %xmm0
+ 4788 C1
+ 4789 .LBE1149:
+ 4790 .LBE1148:
+ 4791 .LBE1147:
+ 4792 .LBE1146:
+ 4793 .LBE1145:
+ 4794 .LBE1144:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4795 .loc 2 1567 0
+ 4796 3a38 660F7F85 movdqa %xmm0, -10800(%rbp)
+ 4796 D0D5FFFF
+ 4797 3a40 660F6F85 movdqa -10800(%rbp), %xmm0
+ 4797 D0D5FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 168
+
+
+ 4798 3a48 660FEF85 pxor -3264(%rbp), %xmm0
+ 4798 40F3FFFF
+ 4799 3a50 F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 4799 40F3FFFF
+ 4800 3a58 660F6F85 movdqa -10800(%rbp), %xmm0
+ 4800 D0D5FFFF
+ 4801 3a60 F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 4801 A0F3FFFF
+ 4802 .LBB1150:
+ 4803 .LBB1151:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4804 .loc 2 1278 0
+ 4805 3a68 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 4805 00000000
+ 4806 3a70 F30F6F8D movdqu -3168(%rbp), %xmm1
+ 4806 A0F3FFFF
+ 4807 3a78 F30F7F8D movdqu %xmm1, -3136(%rbp)
+ 4807 C0F3FFFF
+ 4808 3a80 F30F7F85 movdqu %xmm0, -3152(%rbp)
+ 4808 B0F3FFFF
+ 4809 3a88 F30F6F85 movdqu -3136(%rbp), %xmm0
+ 4809 C0F3FFFF
+ 4810 3a90 F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 4810 E0F3FFFF
+ 4811 3a98 F30F6F85 movdqu -3152(%rbp), %xmm0
+ 4811 B0F3FFFF
+ 4812 3aa0 F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 4812 D0F3FFFF
+ 4813 .LBB1152:
+ 4814 .LBB1153:
+ 4815 .LBB1154:
+ 4816 .LBB1155:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4817 .loc 3 529 0
+ 4818 3aa8 F30F6F8D movdqu -3120(%rbp), %xmm1
+ 4818 D0F3FFFF
+ 4819 3ab0 F30F6F85 movdqu -3104(%rbp), %xmm0
+ 4819 E0F3FFFF
+ 4820 3ab8 660F3800 pshufb %xmm1, %xmm0
+ 4820 C1
+ 4821 .LBE1155:
+ 4822 .LBE1154:
+ 4823 .LBE1153:
+ 4824 .LBE1152:
+ 4825 .LBE1151:
+ 4826 .LBE1150:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4827 .loc 2 1568 0
+ 4828 3abd 660F7F85 movdqa %xmm0, -10800(%rbp)
+ 4828 D0D5FFFF
+ 4829 3ac5 660F6F85 movdqa -10800(%rbp), %xmm0
+ 4829 D0D5FFFF
+ 4830 3acd 660FEF85 pxor -3264(%rbp), %xmm0
+ 4830 40F3FFFF
+ 4831 3ad5 F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 4831 40F3FFFF
+ 4832 3add 660F6F85 movdqa -10800(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 169
+
+
+ 4832 D0D5FFFF
+ 4833 3ae5 F30F7F85 movdqu %xmm0, -3088(%rbp)
+ 4833 F0F3FFFF
+ 4834 .LBB1156:
+ 4835 .LBB1157:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4836 .loc 2 1278 0
+ 4837 3aed 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 4837 00000000
+ 4838 3af5 F30F6F8D movdqu -3088(%rbp), %xmm1
+ 4838 F0F3FFFF
+ 4839 3afd F30F7F8D movdqu %xmm1, -3056(%rbp)
+ 4839 10F4FFFF
+ 4840 3b05 F30F7F85 movdqu %xmm0, -3072(%rbp)
+ 4840 00F4FFFF
+ 4841 3b0d F30F6F85 movdqu -3056(%rbp), %xmm0
+ 4841 10F4FFFF
+ 4842 3b15 F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 4842 30F4FFFF
+ 4843 3b1d F30F6F85 movdqu -3072(%rbp), %xmm0
+ 4843 00F4FFFF
+ 4844 3b25 F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 4844 20F4FFFF
+ 4845 .LBB1158:
+ 4846 .LBB1159:
+ 4847 .LBB1160:
+ 4848 .LBB1161:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4849 .loc 3 529 0
+ 4850 3b2d F30F6F8D movdqu -3040(%rbp), %xmm1
+ 4850 20F4FFFF
+ 4851 3b35 F30F6F85 movdqu -3024(%rbp), %xmm0
+ 4851 30F4FFFF
+ 4852 3b3d 660F3800 pshufb %xmm1, %xmm0
+ 4852 C1
+ 4853 .LBE1161:
+ 4854 .LBE1160:
+ 4855 .LBE1159:
+ 4856 .LBE1158:
+ 4857 .LBE1157:
+ 4858 .LBE1156:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4859 .loc 2 1569 0
+ 4860 3b42 660F7F85 movdqa %xmm0, -10800(%rbp)
+ 4860 D0D5FFFF
+ 4861 3b4a 660F6F85 movdqa -10800(%rbp), %xmm0
+ 4861 D0D5FFFF
+ 4862 3b52 660FEF85 pxor -3264(%rbp), %xmm0
+ 4862 40F3FFFF
+ 4863 3b5a F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 4863 40F3FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4864 .loc 2 1571 0
+ 4865 3b62 F30F6F85 movdqu -3264(%rbp), %xmm0
+ 4865 40F3FFFF
+ 4866 .LBE1143:
+ 4867 .LBE1142:
+
GAS LISTING /tmp/ccjbMjHD.s page 170
+
+
+ 4868 .loc 2 1750 0
+ 4869 3b6a F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 4869 00D9FFFF
+ 4870 3b72 F30F6F85 movdqu -9968(%rbp), %xmm0
+ 4870 10D9FFFF
+ 4871 3b7a F30F6F8D movdqu -9984(%rbp), %xmm1
+ 4871 00D9FFFF
+ 4872 3b82 660FEFC1 pxor %xmm1, %xmm0
+ 4873 3b86 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 4873 00D9FFFF
+ 4874 3b8e 488B8578 movq -10632(%rbp), %rax
+ 4874 D6FFFF
+ 4875 3b95 4883C070 addq $112, %rax
+ 4876 3b99 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 4876 00D9FFFF
+ 4877 3ba1 F30F7F00 movdqu %xmm0, (%rax)
+ 4878 3ba5 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 4878 00D9FFFF
+ 4879 3bad F30F7F85 movdqu %xmm0, -2992(%rbp)
+ 4879 50F4FFFF
+ 4880 .LBB1162:
+ 4881 .LBB1163:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4882 .loc 2 1681 0
+ 4883 3bb5 B8800000 movl $128, %eax
+ 4883 00
+ 4884 3bba 660F6F05 movdqa vec_00(%rip), %xmm0
+ 4884 00000000
+ 4885 3bc2 F30F7F85 movdqu %xmm0, -2960(%rbp)
+ 4885 70F4FFFF
+ 4886 3bca 89856CF4 movl %eax, -2964(%rbp)
+ 4886 FFFF
+ 4887 3bd0 F30F6F85 movdqu -2960(%rbp), %xmm0
+ 4887 70F4FFFF
+ 4888 3bd8 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 4888 90F4FFFF
+ 4889 3be0 8B856CF4 movl -2964(%rbp), %eax
+ 4889 FFFF
+ 4890 3be6 89858CF4 movl %eax, -2932(%rbp)
+ 4890 FFFF
+ 4891 .LBB1164:
+ 4892 .LBB1165:
+ 4893 .LBB1166:
+ 4894 .LBB1167:
+ 4895 .loc 3 598 0
+ 4896 3bec 8B858CF4 movl -2932(%rbp), %eax
+ 4896 FFFF
+ 4897 3bf2 F30F6F85 movdqu -2928(%rbp), %xmm0
+ 4897 90F4FFFF
+ 4898 3bfa 660F3A22 pinsrd $3, %eax, %xmm0
+ 4898 C003
+ 4899 .LBE1167:
+ 4900 .LBE1166:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 4901 .loc 2 519 0
+ 4902 3c00 F30F7F85 movdqu %xmm0, -2960(%rbp)
+ 4902 70F4FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 171
+
+
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 4903 .loc 2 526 0
+ 4904 3c08 F30F6F85 movdqu -2960(%rbp), %xmm0
+ 4904 70F4FFFF
+ 4905 .LBE1165:
+ 4906 .LBE1164:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4907 .loc 2 1681 0
+ 4908 3c10 660F7F85 movdqa %xmm0, -10768(%rbp)
+ 4908 F0D5FFFF
+ 4909 3c18 F30F6F85 movdqu -2992(%rbp), %xmm0
+ 4909 50F4FFFF
+ 4910 3c20 F30F7F85 movdqu %xmm0, -2912(%rbp)
+ 4910 A0F4FFFF
+ 4911 3c28 F30F6F85 movdqu -2912(%rbp), %xmm0
+ 4911 A0F4FFFF
+ 4912 3c30 F30F7F85 movdqu %xmm0, -2880(%rbp)
+ 4912 C0F4FFFF
+ 4913 3c38 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 4913 000000
+ 4914 3c3f 488985B8 movq %rax, -2888(%rbp)
+ 4914 F4FFFF
+ 4915 .LBB1168:
+ 4916 .LBB1169:
+ 4917 .LBB1170:
+ 4918 .LBB1171:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 4919 .loc 2 851 0
+ 4920 3c46 660F6F05 movdqa vec_00(%rip), %xmm0
+ 4920 00000000
+ 4921 3c4e F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 4921 E0F4FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4922 .loc 2 854 0
+ 4923 3c56 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 4923 00000000
+ 4924 3c5e F30F6F8D movdqu -2880(%rbp), %xmm1
+ 4924 C0F4FFFF
+ 4925 3c66 F30F7F8D movdqu %xmm1, -2768(%rbp)
+ 4925 30F5FFFF
+ 4926 3c6e F30F7F85 movdqu %xmm0, -2784(%rbp)
+ 4926 20F5FFFF
+ 4927 .LBB1172:
+ 4928 .LBB1173:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 4929 .loc 2 206 0
+ 4930 3c76 F30F6F85 movdqu -2784(%rbp), %xmm0
+ 4930 20F5FFFF
+ 4931 3c7e F30F6F8D movdqu -2768(%rbp), %xmm1
+ 4931 30F5FFFF
+ 4932 3c86 660FDBC1 pand %xmm1, %xmm0
+ 4933 .LBE1173:
+ 4934 .LBE1172:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4935 .loc 2 854 0
+ 4936 3c8a F30F7F85 movdqu %xmm0, -2800(%rbp)
+ 4936 10F5FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 172
+
+
+ 4937 3c92 F30F6F85 movdqu -2880(%rbp), %xmm0
+ 4937 C0F4FFFF
+ 4938 3c9a F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 4938 50F5FFFF
+ 4939 .LBB1174:
+ 4940 .LBB1175:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 4941 .loc 3 433 0
+ 4942 3ca2 F30F6F85 movdqu -2736(%rbp), %xmm0
+ 4942 50F5FFFF
+ 4943 3caa 660F72D0 psrld $4, %xmm0
+ 4943 04
+ 4944 .LBE1175:
+ 4945 .LBE1174:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 4946 .loc 2 857 0
+ 4947 3caf F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 4947 00F5FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4948 .loc 2 859 0
+ 4949 3cb7 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 4949 00000000
+ 4950 3cbf F30F6F8D movdqu -2816(%rbp), %xmm1
+ 4950 00F5FFFF
+ 4951 3cc7 F30F7F8D movdqu %xmm1, -2704(%rbp)
+ 4951 70F5FFFF
+ 4952 3ccf F30F7F85 movdqu %xmm0, -2720(%rbp)
+ 4952 60F5FFFF
+ 4953 .LBB1176:
+ 4954 .LBB1177:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 4955 .loc 2 206 0
+ 4956 3cd7 F30F6F85 movdqu -2720(%rbp), %xmm0
+ 4956 60F5FFFF
+ 4957 3cdf F30F6F8D movdqu -2704(%rbp), %xmm1
+ 4957 70F5FFFF
+ 4958 3ce7 660FDBC1 pand %xmm1, %xmm0
+ 4959 .LBE1177:
+ 4960 .LBE1176:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4961 .loc 2 859 0
+ 4962 3ceb F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 4962 00F5FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 4963 .loc 2 866 0
+ 4964 3cf3 C785DCF4 movl $0, -2852(%rbp)
+ 4964 FFFF0000
+ 4964 0000
+ 4965 3cfd E9BE0100 jmp .L74
+ 4965 00
+ 4966 .L75:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4967 .loc 2 868 0
+ 4968 3d02 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 4968 00000000
+ 4969 3d0a F30F7F85 movdqu %xmm0, -2672(%rbp)
+ 4969 90F5FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 173
+
+
+ 4970 3d12 F30F6F85 movdqu -2816(%rbp), %xmm0
+ 4970 00F5FFFF
+ 4971 3d1a F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 4971 80F5FFFF
+ 4972 3d22 F30F6F85 movdqu -2672(%rbp), %xmm0
+ 4972 90F5FFFF
+ 4973 3d2a F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 4973 B0F5FFFF
+ 4974 3d32 F30F6F85 movdqu -2688(%rbp), %xmm0
+ 4974 80F5FFFF
+ 4975 3d3a F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 4975 A0F5FFFF
+ 4976 .LBB1178:
+ 4977 .LBB1179:
+ 4978 .LBB1180:
+ 4979 .LBB1181:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4980 .loc 3 529 0
+ 4981 3d42 F30F6F8D movdqu -2656(%rbp), %xmm1
+ 4981 A0F5FFFF
+ 4982 3d4a F30F6F85 movdqu -2640(%rbp), %xmm0
+ 4982 B0F5FFFF
+ 4983 3d52 660F3800 pshufb %xmm1, %xmm0
+ 4983 C1
+ 4984 .LBE1181:
+ 4985 .LBE1180:
+ 4986 .LBE1179:
+ 4987 .LBE1178:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4988 .loc 2 868 0
+ 4989 3d57 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 4989 F0F4FFFF
+ 4990 3d5f F30F6F85 movdqu -2800(%rbp), %xmm0
+ 4990 10F5FFFF
+ 4991 3d67 F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 4991 D0F5FFFF
+ 4992 3d6f F30F6F85 movdqu -2832(%rbp), %xmm0
+ 4992 F0F4FFFF
+ 4993 3d77 F30F7F85 movdqu %xmm0, -2624(%rbp)
+ 4993 C0F5FFFF
+ 4994 .LBB1182:
+ 4995 .LBB1183:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 4996 .loc 2 234 0
+ 4997 3d7f F30F6F85 movdqu -2624(%rbp), %xmm0
+ 4997 C0F5FFFF
+ 4998 3d87 F30F6F8D movdqu -2608(%rbp), %xmm1
+ 4998 D0F5FFFF
+ 4999 3d8f 660FEBC1 por %xmm1, %xmm0
+ 5000 .LBE1183:
+ 5001 .LBE1182:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 5002 .loc 2 870 0
+ 5003 3d93 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 5003 F0F4FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5004 .loc 2 872 0
+
GAS LISTING /tmp/ccjbMjHD.s page 174
+
+
+ 5005 3d9b 8B85DCF4 mov -2852(%rbp), %eax
+ 5005 FFFF
+ 5006 3da1 48C1E004 salq $4, %rax
+ 5007 3da5 480385B8 addq -2888(%rbp), %rax
+ 5007 F4FFFF
+ 5008 3dac 660F6F00 movdqa (%rax), %xmm0
+ 5009 3db0 F30F7F85 movdqu %xmm0, -2576(%rbp)
+ 5009 F0F5FFFF
+ 5010 3db8 F30F6F85 movdqu -2832(%rbp), %xmm0
+ 5010 F0F4FFFF
+ 5011 3dc0 F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 5011 E0F5FFFF
+ 5012 3dc8 F30F6F85 movdqu -2576(%rbp), %xmm0
+ 5012 F0F5FFFF
+ 5013 3dd0 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 5013 10F6FFFF
+ 5014 3dd8 F30F6F85 movdqu -2592(%rbp), %xmm0
+ 5014 E0F5FFFF
+ 5015 3de0 F30F7F85 movdqu %xmm0, -2560(%rbp)
+ 5015 00F6FFFF
+ 5016 .LBB1184:
+ 5017 .LBB1185:
+ 5018 .LBB1186:
+ 5019 .LBB1187:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5020 .loc 3 529 0
+ 5021 3de8 F30F6F8D movdqu -2560(%rbp), %xmm1
+ 5021 00F6FFFF
+ 5022 3df0 F30F6F85 movdqu -2544(%rbp), %xmm0
+ 5022 10F6FFFF
+ 5023 3df8 660F3800 pshufb %xmm1, %xmm0
+ 5023 C1
+ 5024 .LBE1187:
+ 5025 .LBE1186:
+ 5026 .LBE1185:
+ 5027 .LBE1184:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5028 .loc 2 872 0
+ 5029 3dfd F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 5029 F0F4FFFF
+ 5030 3e05 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 5030 E0F4FFFF
+ 5031 3e0d F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 5031 30F6FFFF
+ 5032 3e15 F30F6F85 movdqu -2832(%rbp), %xmm0
+ 5032 F0F4FFFF
+ 5033 3e1d F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 5033 20F6FFFF
+ 5034 .LBB1188:
+ 5035 .LBB1189:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 5036 .loc 2 234 0
+ 5037 3e25 F30F6F85 movdqu -2528(%rbp), %xmm0
+ 5037 20F6FFFF
+ 5038 3e2d F30F6F8D movdqu -2512(%rbp), %xmm1
+ 5038 30F6FFFF
+ 5039 3e35 660FEBC1 por %xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 175
+
+
+ 5040 .LBE1189:
+ 5041 .LBE1188:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 5042 .loc 2 874 0
+ 5043 3e39 F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 5043 E0F4FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5044 .loc 2 876 0
+ 5045 3e41 660F6F05 movdqa vec_01(%rip), %xmm0
+ 5045 00000000
+ 5046 3e49 F30F6F8D movdqu -2816(%rbp), %xmm1
+ 5046 00F5FFFF
+ 5047 3e51 F30F7F8D movdqu %xmm1, -2480(%rbp)
+ 5047 50F6FFFF
+ 5048 3e59 F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 5048 40F6FFFF
+ 5049 .LBB1190:
+ 5050 .LBB1191:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 5051 .loc 2 290 0
+ 5052 3e61 F30F6F8D movdqu -2496(%rbp), %xmm1
+ 5052 40F6FFFF
+ 5053 3e69 F30F6F85 movdqu -2480(%rbp), %xmm0
+ 5053 50F6FFFF
+ 5054 3e71 660FF8C1 psubb %xmm1, %xmm0
+ 5055 .LBE1191:
+ 5056 .LBE1190:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5057 .loc 2 876 0
+ 5058 3e75 F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 5058 00F5FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5059 .loc 2 878 0
+ 5060 3e7d 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 5060 00000000
+ 5061 3e85 F30F6F8D movdqu -2816(%rbp), %xmm1
+ 5061 00F5FFFF
+ 5062 3e8d F30F7F8D movdqu %xmm1, -2448(%rbp)
+ 5062 70F6FFFF
+ 5063 3e95 F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 5063 60F6FFFF
+ 5064 .LBB1192:
+ 5065 .LBB1193:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 5066 .loc 2 206 0
+ 5067 3e9d F30F6F85 movdqu -2464(%rbp), %xmm0
+ 5067 60F6FFFF
+ 5068 3ea5 F30F6F8D movdqu -2448(%rbp), %xmm1
+ 5068 70F6FFFF
+ 5069 3ead 660FDBC1 pand %xmm1, %xmm0
+ 5070 .LBE1193:
+ 5071 .LBE1192:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5072 .loc 2 878 0
+ 5073 3eb1 F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 5073 00F5FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+
GAS LISTING /tmp/ccjbMjHD.s page 176
+
+
+ 5074 .loc 2 866 0
+ 5075 3eb9 8385DCF4 addl $1, -2852(%rbp)
+ 5075 FFFF01
+ 5076 .L74:
+ 5077 3ec0 83BDDCF4 cmpl $15, -2852(%rbp)
+ 5077 FFFF0F
+ 5078 3ec7 0F8635FE jbe .L75
+ 5078 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 5079 .loc 2 882 0
+ 5080 3ecd F30F6F85 movdqu -2848(%rbp), %xmm0
+ 5080 E0F4FFFF
+ 5081 .LBE1171:
+ 5082 .LBE1170:
+ 5083 .LBE1169:
+ 5084 .LBE1168:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 5085 .loc 2 1682 0
+ 5086 3ed5 660F7F85 movdqa %xmm0, -10784(%rbp)
+ 5086 E0D5FFFF
+ 5087 .LBB1194:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 5088 .loc 2 1683 0
+ 5089 3edd 660F6F85 movdqa -10784(%rbp), %xmm0
+ 5089 E0D5FFFF
+ 5090 3ee5 F30F7F85 movdqu %xmm0, -10128(%rbp)
+ 5090 70D8FFFF
+ 5091 3eed E8000000 call KDbgWriterGet at PLT
+ 5091 00
+ 5092 3ef2 4885C0 testq %rax, %rax
+ 5093 3ef5 7479 je .L77
+ 5094 3ef7 BF010000 movl $1, %edi
+ 5094 00
+ 5095 3efc E8000000 call KDbgCondToFlag at PLT
+ 5095 00
+ 5096 3f01 4889C6 movq %rax, %rsi
+ 5097 3f04 BF100000 movl $16, %edi
+ 5097 00
+ 5098 3f09 E8000000 call KDbgTestModConds at PLT
+ 5098 00
+ 5099 3f0e 84C0 testb %al, %al
+ 5100 3f10 745E je .L77
+ 5101 3f12 8B857CD8 movl -10116(%rbp), %eax
+ 5101 FFFF
+ 5102 3f18 89C7 movl %eax, %edi
+ 5103 3f1a E8E1C0FF call bswap_32
+ 5103 FF
+ 5104 3f1f 4189C5 movl %eax, %r13d
+ 5105 3f22 8B8578D8 movl -10120(%rbp), %eax
+ 5105 FFFF
+ 5106 3f28 89C7 movl %eax, %edi
+ 5107 3f2a E8D1C0FF call bswap_32
+ 5107 FF
+ 5108 3f2f 4189C4 movl %eax, %r12d
+ 5109 3f32 8B8574D8 movl -10124(%rbp), %eax
+ 5109 FFFF
+ 5110 3f38 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 177
+
+
+ 5111 3f3a E8C1C0FF call bswap_32
+ 5111 FF
+ 5112 3f3f 89C3 movl %eax, %ebx
+ 5113 3f41 8B8570D8 movl -10128(%rbp), %eax
+ 5113 FFFF
+ 5114 3f47 89C7 movl %eax, %edi
+ 5115 3f49 E8B2C0FF call bswap_32
+ 5115 FF
+ 5116 3f4e 4589E9 movl %r13d, %r9d
+ 5117 3f51 4589E0 movl %r12d, %r8d
+ 5118 3f54 89D9 movl %ebx, %ecx
+ 5119 3f56 89C2 movl %eax, %edx
+ 5120 3f58 488D3500 leaq .LC0(%rip), %rsi
+ 5120 000000
+ 5121 3f5f 488D3D00 leaq .LC1(%rip), %rdi
+ 5121 000000
+ 5122 3f66 B8000000 movl $0, %eax
+ 5122 00
+ 5123 3f6b E8000000 call KDbgMsg at PLT
+ 5123 00
+ 5124 .L77:
+ 5125 3f70 660F6F85 movdqa -10784(%rbp), %xmm0
+ 5125 E0D5FFFF
+ 5126 3f78 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 5126 80F6FFFF
+ 5127 .LBE1194:
+ 5128 .LBB1195:
+ 5129 .LBB1196:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5130 .loc 2 667 0
+ 5131 3f80 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 5131 00000000
+ 5132 3f88 F30F6F8D movdqu -2432(%rbp), %xmm1
+ 5132 80F6FFFF
+ 5133 3f90 F30F7F8D movdqu %xmm1, -2400(%rbp)
+ 5133 A0F6FFFF
+ 5134 3f98 F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 5134 90F6FFFF
+ 5135 3fa0 F30F6F85 movdqu -2400(%rbp), %xmm0
+ 5135 A0F6FFFF
+ 5136 3fa8 F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 5136 C0F6FFFF
+ 5137 3fb0 F30F6F85 movdqu -2416(%rbp), %xmm0
+ 5137 90F6FFFF
+ 5138 3fb8 F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 5138 B0F6FFFF
+ 5139 .LBB1197:
+ 5140 .LBB1198:
+ 5141 .LBB1199:
+ 5142 .LBB1200:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5143 .loc 3 529 0
+ 5144 3fc0 F30F6F8D movdqu -2384(%rbp), %xmm1
+ 5144 B0F6FFFF
+ 5145 3fc8 F30F6F85 movdqu -2368(%rbp), %xmm0
+ 5145 C0F6FFFF
+ 5146 3fd0 660F3800 pshufb %xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 178
+
+
+ 5146 C1
+ 5147 .LBE1200:
+ 5148 .LBE1199:
+ 5149 .LBE1198:
+ 5150 .LBE1197:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5151 .loc 2 667 0
+ 5152 3fd5 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 5152 80F6FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5153 .loc 2 668 0
+ 5154 3fdd F30F6F85 movdqu -2432(%rbp), %xmm0
+ 5154 80F6FFFF
+ 5155 .LBE1196:
+ 5156 .LBE1195:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 5157 .loc 2 1684 0
+ 5158 3fe5 660F7F85 movdqa %xmm0, -10784(%rbp)
+ 5158 E0D5FFFF
+ 5159 .LBB1201:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 5160 .loc 2 1685 0
+ 5161 3fed 660F6F85 movdqa -10784(%rbp), %xmm0
+ 5161 E0D5FFFF
+ 5162 3ff5 F30F7F85 movdqu %xmm0, -10144(%rbp)
+ 5162 60D8FFFF
+ 5163 3ffd E8000000 call KDbgWriterGet at PLT
+ 5163 00
+ 5164 4002 4885C0 testq %rax, %rax
+ 5165 4005 7479 je .L79
+ 5166 4007 BF010000 movl $1, %edi
+ 5166 00
+ 5167 400c E8000000 call KDbgCondToFlag at PLT
+ 5167 00
+ 5168 4011 4889C6 movq %rax, %rsi
+ 5169 4014 BF100000 movl $16, %edi
+ 5169 00
+ 5170 4019 E8000000 call KDbgTestModConds at PLT
+ 5170 00
+ 5171 401e 84C0 testb %al, %al
+ 5172 4020 745E je .L79
+ 5173 4022 8B856CD8 movl -10132(%rbp), %eax
+ 5173 FFFF
+ 5174 4028 89C7 movl %eax, %edi
+ 5175 402a E8D1BFFF call bswap_32
+ 5175 FF
+ 5176 402f 4189C5 movl %eax, %r13d
+ 5177 4032 8B8568D8 movl -10136(%rbp), %eax
+ 5177 FFFF
+ 5178 4038 89C7 movl %eax, %edi
+ 5179 403a E8C1BFFF call bswap_32
+ 5179 FF
+ 5180 403f 4189C4 movl %eax, %r12d
+ 5181 4042 8B8564D8 movl -10140(%rbp), %eax
+ 5181 FFFF
+ 5182 4048 89C7 movl %eax, %edi
+ 5183 404a E8B1BFFF call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 179
+
+
+ 5183 FF
+ 5184 404f 89C3 movl %eax, %ebx
+ 5185 4051 8B8560D8 movl -10144(%rbp), %eax
+ 5185 FFFF
+ 5186 4057 89C7 movl %eax, %edi
+ 5187 4059 E8A2BFFF call bswap_32
+ 5187 FF
+ 5188 405e 4589E9 movl %r13d, %r9d
+ 5189 4061 4589E0 movl %r12d, %r8d
+ 5190 4064 89D9 movl %ebx, %ecx
+ 5191 4066 89C2 movl %eax, %edx
+ 5192 4068 488D3500 leaq .LC2(%rip), %rsi
+ 5192 000000
+ 5193 406f 488D3D00 leaq .LC1(%rip), %rdi
+ 5193 000000
+ 5194 4076 B8000000 movl $0, %eax
+ 5194 00
+ 5195 407b E8000000 call KDbgMsg at PLT
+ 5195 00
+ 5196 .L79:
+ 5197 4080 660F6F85 movdqa -10784(%rbp), %xmm0
+ 5197 E0D5FFFF
+ 5198 4088 F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 5198 E0F6FFFF
+ 5199 4090 660F6F85 movdqa -10768(%rbp), %xmm0
+ 5199 F0D5FFFF
+ 5200 4098 F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 5200 D0F6FFFF
+ 5201 .LBE1201:
+ 5202 .LBB1202:
+ 5203 .LBB1203:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 5204 .loc 2 178 0
+ 5205 40a0 F30F6F85 movdqu -2352(%rbp), %xmm0
+ 5205 D0F6FFFF
+ 5206 40a8 F30F6F8D movdqu -2336(%rbp), %xmm1
+ 5206 E0F6FFFF
+ 5207 40b0 660FEFC1 pxor %xmm1, %xmm0
+ 5208 .LBE1203:
+ 5209 .LBE1202:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 5210 .loc 2 1686 0
+ 5211 40b4 660F7F85 movdqa %xmm0, -10784(%rbp)
+ 5211 E0D5FFFF
+ 5212 .LBB1204:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 5213 .loc 2 1687 0
+ 5214 40bc 660F6F85 movdqa -10784(%rbp), %xmm0
+ 5214 E0D5FFFF
+ 5215 40c4 F30F7F85 movdqu %xmm0, -10160(%rbp)
+ 5215 50D8FFFF
+ 5216 40cc E8000000 call KDbgWriterGet at PLT
+ 5216 00
+ 5217 40d1 4885C0 testq %rax, %rax
+ 5218 40d4 7479 je .L81
+ 5219 40d6 BF010000 movl $1, %edi
+ 5219 00
+
GAS LISTING /tmp/ccjbMjHD.s page 180
+
+
+ 5220 40db E8000000 call KDbgCondToFlag at PLT
+ 5220 00
+ 5221 40e0 4889C6 movq %rax, %rsi
+ 5222 40e3 BF100000 movl $16, %edi
+ 5222 00
+ 5223 40e8 E8000000 call KDbgTestModConds at PLT
+ 5223 00
+ 5224 40ed 84C0 testb %al, %al
+ 5225 40ef 745E je .L81
+ 5226 40f1 8B855CD8 movl -10148(%rbp), %eax
+ 5226 FFFF
+ 5227 40f7 89C7 movl %eax, %edi
+ 5228 40f9 E802BFFF call bswap_32
+ 5228 FF
+ 5229 40fe 4189C5 movl %eax, %r13d
+ 5230 4101 8B8558D8 movl -10152(%rbp), %eax
+ 5230 FFFF
+ 5231 4107 89C7 movl %eax, %edi
+ 5232 4109 E8F2BEFF call bswap_32
+ 5232 FF
+ 5233 410e 4189C4 movl %eax, %r12d
+ 5234 4111 8B8554D8 movl -10156(%rbp), %eax
+ 5234 FFFF
+ 5235 4117 89C7 movl %eax, %edi
+ 5236 4119 E8E2BEFF call bswap_32
+ 5236 FF
+ 5237 411e 89C3 movl %eax, %ebx
+ 5238 4120 8B8550D8 movl -10160(%rbp), %eax
+ 5238 FFFF
+ 5239 4126 89C7 movl %eax, %edi
+ 5240 4128 E8D3BEFF call bswap_32
+ 5240 FF
+ 5241 412d 4589E9 movl %r13d, %r9d
+ 5242 4130 4589E0 movl %r12d, %r8d
+ 5243 4133 89D9 movl %ebx, %ecx
+ 5244 4135 89C2 movl %eax, %edx
+ 5245 4137 488D3500 leaq .LC3(%rip), %rsi
+ 5245 000000
+ 5246 413e 488D3D00 leaq .LC1(%rip), %rdi
+ 5246 000000
+ 5247 4145 B8000000 movl $0, %eax
+ 5247 00
+ 5248 414a E8000000 call KDbgMsg at PLT
+ 5248 00
+ 5249 .L81:
+ 5250 414f 660F6F85 movdqa -10784(%rbp), %xmm0
+ 5250 E0D5FFFF
+ 5251 4157 F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 5251 F0F6FFFF
+ 5252 415f F30F6F85 movdqu -2320(%rbp), %xmm0
+ 5252 F0F6FFFF
+ 5253 4167 F30F7F85 movdqu %xmm0, -2288(%rbp)
+ 5253 10F7FFFF
+ 5254 .LBE1204:
+ 5255 .LBB1205:
+ 5256 .LBB1206:
+ 5257 .LBB1207:
+
GAS LISTING /tmp/ccjbMjHD.s page 181
+
+
+ 5258 .LBB1208:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5259 .loc 3 450 0
+ 5260 416f F30F6F85 movdqu -2288(%rbp), %xmm0
+ 5260 10F7FFFF
+ 5261 4177 660F70C0 pshufd $255, %xmm0, %xmm0
+ 5261 FF
+ 5262 .LBE1208:
+ 5263 .LBE1207:
+ 5264 .LBE1206:
+ 5265 .LBE1205:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 5266 .loc 2 1688 0
+ 5267 417c 660F7F85 movdqa %xmm0, -10784(%rbp)
+ 5267 E0D5FFFF
+ 5268 .LBB1209:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 5269 .loc 2 1689 0
+ 5270 4184 660F6F85 movdqa -10784(%rbp), %xmm0
+ 5270 E0D5FFFF
+ 5271 418c F30F7F85 movdqu %xmm0, -10176(%rbp)
+ 5271 40D8FFFF
+ 5272 4194 E8000000 call KDbgWriterGet at PLT
+ 5272 00
+ 5273 4199 4885C0 testq %rax, %rax
+ 5274 419c 7479 je .L83
+ 5275 419e BF010000 movl $1, %edi
+ 5275 00
+ 5276 41a3 E8000000 call KDbgCondToFlag at PLT
+ 5276 00
+ 5277 41a8 4889C6 movq %rax, %rsi
+ 5278 41ab BF100000 movl $16, %edi
+ 5278 00
+ 5279 41b0 E8000000 call KDbgTestModConds at PLT
+ 5279 00
+ 5280 41b5 84C0 testb %al, %al
+ 5281 41b7 745E je .L83
+ 5282 41b9 8B854CD8 movl -10164(%rbp), %eax
+ 5282 FFFF
+ 5283 41bf 89C7 movl %eax, %edi
+ 5284 41c1 E83ABEFF call bswap_32
+ 5284 FF
+ 5285 41c6 4189C5 movl %eax, %r13d
+ 5286 41c9 8B8548D8 movl -10168(%rbp), %eax
+ 5286 FFFF
+ 5287 41cf 89C7 movl %eax, %edi
+ 5288 41d1 E82ABEFF call bswap_32
+ 5288 FF
+ 5289 41d6 4189C4 movl %eax, %r12d
+ 5290 41d9 8B8544D8 movl -10172(%rbp), %eax
+ 5290 FFFF
+ 5291 41df 89C7 movl %eax, %edi
+ 5292 41e1 E81ABEFF call bswap_32
+ 5292 FF
+ 5293 41e6 89C3 movl %eax, %ebx
+ 5294 41e8 8B8540D8 movl -10176(%rbp), %eax
+ 5294 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 182
+
+
+ 5295 41ee 89C7 movl %eax, %edi
+ 5296 41f0 E80BBEFF call bswap_32
+ 5296 FF
+ 5297 41f5 4589E9 movl %r13d, %r9d
+ 5298 41f8 4589E0 movl %r12d, %r8d
+ 5299 41fb 89D9 movl %ebx, %ecx
+ 5300 41fd 89C2 movl %eax, %edx
+ 5301 41ff 488D3500 leaq .LC4(%rip), %rsi
+ 5301 000000
+ 5302 4206 488D3D00 leaq .LC1(%rip), %rdi
+ 5302 000000
+ 5303 420d B8000000 movl $0, %eax
+ 5303 00
+ 5304 4212 E8000000 call KDbgMsg at PLT
+ 5304 00
+ 5305 .L83:
+ 5306 .LBE1209:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 5307 .loc 2 1690 0
+ 5308 4217 660F6F85 movdqa -10784(%rbp), %xmm0
+ 5308 E0D5FFFF
+ 5309 .LBE1163:
+ 5310 .LBE1162:
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x80,8);
+ 5311 .loc 2 1751 0
+ 5312 421f F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 5312 10D9FFFF
+ 5313 4227 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 5313 00D9FFFF
+ 5314 422f F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 5314 20F7FFFF
+ 5315 .LBB1210:
+ 5316 .LBB1211:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 5317 .loc 2 1565 0
+ 5318 4237 F30F6F85 movdqu -2272(%rbp), %xmm0
+ 5318 20F7FFFF
+ 5319 423f 660F7F85 movdqa %xmm0, -10752(%rbp)
+ 5319 00D6FFFF
+ 5320 4247 660F6F85 movdqa -10752(%rbp), %xmm0
+ 5320 00D6FFFF
+ 5321 424f F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 5321 30F7FFFF
+ 5322 .LBB1212:
+ 5323 .LBB1213:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5324 .loc 2 1278 0
+ 5325 4257 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 5325 00000000
+ 5326 425f F30F6F8D movdqu -2256(%rbp), %xmm1
+ 5326 30F7FFFF
+ 5327 4267 F30F7F8D movdqu %xmm1, -2224(%rbp)
+ 5327 50F7FFFF
+ 5328 426f F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 5328 40F7FFFF
+ 5329 4277 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 5329 50F7FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 183
+
+
+ 5330 427f F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 5330 70F7FFFF
+ 5331 4287 F30F6F85 movdqu -2240(%rbp), %xmm0
+ 5331 40F7FFFF
+ 5332 428f F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 5332 60F7FFFF
+ 5333 .LBB1214:
+ 5334 .LBB1215:
+ 5335 .LBB1216:
+ 5336 .LBB1217:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5337 .loc 3 529 0
+ 5338 4297 F30F6F8D movdqu -2208(%rbp), %xmm1
+ 5338 60F7FFFF
+ 5339 429f F30F6F85 movdqu -2192(%rbp), %xmm0
+ 5339 70F7FFFF
+ 5340 42a7 660F3800 pshufb %xmm1, %xmm0
+ 5340 C1
+ 5341 .LBE1217:
+ 5342 .LBE1216:
+ 5343 .LBE1215:
+ 5344 .LBE1214:
+ 5345 .LBE1213:
+ 5346 .LBE1212:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5347 .loc 2 1567 0
+ 5348 42ac 660F7F85 movdqa %xmm0, -10752(%rbp)
+ 5348 00D6FFFF
+ 5349 42b4 660F6F85 movdqa -10752(%rbp), %xmm0
+ 5349 00D6FFFF
+ 5350 42bc 660FEF85 pxor -2272(%rbp), %xmm0
+ 5350 20F7FFFF
+ 5351 42c4 F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 5351 20F7FFFF
+ 5352 42cc 660F6F85 movdqa -10752(%rbp), %xmm0
+ 5352 00D6FFFF
+ 5353 42d4 F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 5353 80F7FFFF
+ 5354 .LBB1218:
+ 5355 .LBB1219:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5356 .loc 2 1278 0
+ 5357 42dc 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 5357 00000000
+ 5358 42e4 F30F6F8D movdqu -2176(%rbp), %xmm1
+ 5358 80F7FFFF
+ 5359 42ec F30F7F8D movdqu %xmm1, -2144(%rbp)
+ 5359 A0F7FFFF
+ 5360 42f4 F30F7F85 movdqu %xmm0, -2160(%rbp)
+ 5360 90F7FFFF
+ 5361 42fc F30F6F85 movdqu -2144(%rbp), %xmm0
+ 5361 A0F7FFFF
+ 5362 4304 F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 5362 C0F7FFFF
+ 5363 430c F30F6F85 movdqu -2160(%rbp), %xmm0
+ 5363 90F7FFFF
+ 5364 4314 F30F7F85 movdqu %xmm0, -2128(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 184
+
+
+ 5364 B0F7FFFF
+ 5365 .LBB1220:
+ 5366 .LBB1221:
+ 5367 .LBB1222:
+ 5368 .LBB1223:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5369 .loc 3 529 0
+ 5370 431c F30F6F8D movdqu -2128(%rbp), %xmm1
+ 5370 B0F7FFFF
+ 5371 4324 F30F6F85 movdqu -2112(%rbp), %xmm0
+ 5371 C0F7FFFF
+ 5372 432c 660F3800 pshufb %xmm1, %xmm0
+ 5372 C1
+ 5373 .LBE1223:
+ 5374 .LBE1222:
+ 5375 .LBE1221:
+ 5376 .LBE1220:
+ 5377 .LBE1219:
+ 5378 .LBE1218:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5379 .loc 2 1568 0
+ 5380 4331 660F7F85 movdqa %xmm0, -10752(%rbp)
+ 5380 00D6FFFF
+ 5381 4339 660F6F85 movdqa -10752(%rbp), %xmm0
+ 5381 00D6FFFF
+ 5382 4341 660FEF85 pxor -2272(%rbp), %xmm0
+ 5382 20F7FFFF
+ 5383 4349 F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 5383 20F7FFFF
+ 5384 4351 660F6F85 movdqa -10752(%rbp), %xmm0
+ 5384 00D6FFFF
+ 5385 4359 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 5385 D0F7FFFF
+ 5386 .LBB1224:
+ 5387 .LBB1225:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5388 .loc 2 1278 0
+ 5389 4361 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 5389 00000000
+ 5390 4369 F30F6F8D movdqu -2096(%rbp), %xmm1
+ 5390 D0F7FFFF
+ 5391 4371 F30F7F8D movdqu %xmm1, -2064(%rbp)
+ 5391 F0F7FFFF
+ 5392 4379 F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 5392 E0F7FFFF
+ 5393 4381 F30F6F85 movdqu -2064(%rbp), %xmm0
+ 5393 F0F7FFFF
+ 5394 4389 F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 5394 10F8FFFF
+ 5395 4391 F30F6F85 movdqu -2080(%rbp), %xmm0
+ 5395 E0F7FFFF
+ 5396 4399 F30F7F85 movdqu %xmm0, -2048(%rbp)
+ 5396 00F8FFFF
+ 5397 .LBB1226:
+ 5398 .LBB1227:
+ 5399 .LBB1228:
+ 5400 .LBB1229:
+
GAS LISTING /tmp/ccjbMjHD.s page 185
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5401 .loc 3 529 0
+ 5402 43a1 F30F6F8D movdqu -2048(%rbp), %xmm1
+ 5402 00F8FFFF
+ 5403 43a9 F30F6F85 movdqu -2032(%rbp), %xmm0
+ 5403 10F8FFFF
+ 5404 43b1 660F3800 pshufb %xmm1, %xmm0
+ 5404 C1
+ 5405 .LBE1229:
+ 5406 .LBE1228:
+ 5407 .LBE1227:
+ 5408 .LBE1226:
+ 5409 .LBE1225:
+ 5410 .LBE1224:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5411 .loc 2 1569 0
+ 5412 43b6 660F7F85 movdqa %xmm0, -10752(%rbp)
+ 5412 00D6FFFF
+ 5413 43be 660F6F85 movdqa -10752(%rbp), %xmm0
+ 5413 00D6FFFF
+ 5414 43c6 660FEF85 pxor -2272(%rbp), %xmm0
+ 5414 20F7FFFF
+ 5415 43ce F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 5415 20F7FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5416 .loc 2 1571 0
+ 5417 43d6 F30F6F85 movdqu -2272(%rbp), %xmm0
+ 5417 20F7FFFF
+ 5418 .LBE1211:
+ 5419 .LBE1210:
+ 5420 .loc 2 1751 0
+ 5421 43de F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 5421 00D9FFFF
+ 5422 43e6 F30F6F85 movdqu -9968(%rbp), %xmm0
+ 5422 10D9FFFF
+ 5423 43ee F30F6F8D movdqu -9984(%rbp), %xmm1
+ 5423 00D9FFFF
+ 5424 43f6 660FEFC1 pxor %xmm1, %xmm0
+ 5425 43fa F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 5425 00D9FFFF
+ 5426 4402 488B8578 movq -10632(%rbp), %rax
+ 5426 D6FFFF
+ 5427 4409 4883E880 subq $-128, %rax
+ 5428 440d F30F6F85 movdqu -9984(%rbp), %xmm0
+ 5428 00D9FFFF
+ 5429 4415 F30F7F00 movdqu %xmm0, (%rax)
+ 5430 4419 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 5430 00D9FFFF
+ 5431 4421 F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 5431 30F8FFFF
+ 5432 .LBB1230:
+ 5433 .LBB1231:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5434 .loc 2 1681 0
+ 5435 4429 B81B0000 movl $27, %eax
+ 5435 00
+ 5436 442e 660F6F05 movdqa vec_00(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 186
+
+
+ 5436 00000000
+ 5437 4436 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 5437 50F8FFFF
+ 5438 443e 89854CF8 movl %eax, -1972(%rbp)
+ 5438 FFFF
+ 5439 4444 F30F6F85 movdqu -1968(%rbp), %xmm0
+ 5439 50F8FFFF
+ 5440 444c F30F7F85 movdqu %xmm0, -1936(%rbp)
+ 5440 70F8FFFF
+ 5441 4454 8B854CF8 movl -1972(%rbp), %eax
+ 5441 FFFF
+ 5442 445a 89856CF8 movl %eax, -1940(%rbp)
+ 5442 FFFF
+ 5443 .LBB1232:
+ 5444 .LBB1233:
+ 5445 .LBB1234:
+ 5446 .LBB1235:
+ 5447 .loc 3 598 0
+ 5448 4460 8B856CF8 movl -1940(%rbp), %eax
+ 5448 FFFF
+ 5449 4466 F30F6F85 movdqu -1936(%rbp), %xmm0
+ 5449 70F8FFFF
+ 5450 446e 660F3A22 pinsrd $3, %eax, %xmm0
+ 5450 C003
+ 5451 .LBE1235:
+ 5452 .LBE1234:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 5453 .loc 2 519 0
+ 5454 4474 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 5454 50F8FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5455 .loc 2 526 0
+ 5456 447c F30F6F85 movdqu -1968(%rbp), %xmm0
+ 5456 50F8FFFF
+ 5457 .LBE1233:
+ 5458 .LBE1232:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5459 .loc 2 1681 0
+ 5460 4484 660F7F85 movdqa %xmm0, -10720(%rbp)
+ 5460 20D6FFFF
+ 5461 448c F30F6F85 movdqu -2000(%rbp), %xmm0
+ 5461 30F8FFFF
+ 5462 4494 F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 5462 80F8FFFF
+ 5463 449c F30F6F85 movdqu -1920(%rbp), %xmm0
+ 5463 80F8FFFF
+ 5464 44a4 F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 5464 A0F8FFFF
+ 5465 44ac 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 5465 000000
+ 5466 44b3 48898598 movq %rax, -1896(%rbp)
+ 5466 F8FFFF
+ 5467 .LBB1236:
+ 5468 .LBB1237:
+ 5469 .LBB1238:
+ 5470 .LBB1239:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+
GAS LISTING /tmp/ccjbMjHD.s page 187
+
+
+ 5471 .loc 2 851 0
+ 5472 44ba 660F6F05 movdqa vec_00(%rip), %xmm0
+ 5472 00000000
+ 5473 44c2 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 5473 C0F8FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 5474 .loc 2 854 0
+ 5475 44ca 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 5475 00000000
+ 5476 44d2 F30F6F8D movdqu -1888(%rbp), %xmm1
+ 5476 A0F8FFFF
+ 5477 44da F30F7F8D movdqu %xmm1, -1776(%rbp)
+ 5477 10F9FFFF
+ 5478 44e2 F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 5478 00F9FFFF
+ 5479 .LBB1240:
+ 5480 .LBB1241:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 5481 .loc 2 206 0
+ 5482 44ea F30F6F85 movdqu -1792(%rbp), %xmm0
+ 5482 00F9FFFF
+ 5483 44f2 F30F6F8D movdqu -1776(%rbp), %xmm1
+ 5483 10F9FFFF
+ 5484 44fa 660FDBC1 pand %xmm1, %xmm0
+ 5485 .LBE1241:
+ 5486 .LBE1240:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 5487 .loc 2 854 0
+ 5488 44fe F30F7F85 movdqu %xmm0, -1808(%rbp)
+ 5488 F0F8FFFF
+ 5489 4506 F30F6F85 movdqu -1888(%rbp), %xmm0
+ 5489 A0F8FFFF
+ 5490 450e F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 5490 30F9FFFF
+ 5491 .LBB1242:
+ 5492 .LBB1243:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 5493 .loc 3 433 0
+ 5494 4516 F30F6F85 movdqu -1744(%rbp), %xmm0
+ 5494 30F9FFFF
+ 5495 451e 660F72D0 psrld $4, %xmm0
+ 5495 04
+ 5496 .LBE1243:
+ 5497 .LBE1242:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 5498 .loc 2 857 0
+ 5499 4523 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 5499 E0F8FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5500 .loc 2 859 0
+ 5501 452b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 5501 00000000
+ 5502 4533 F30F6F8D movdqu -1824(%rbp), %xmm1
+ 5502 E0F8FFFF
+ 5503 453b F30F7F8D movdqu %xmm1, -1712(%rbp)
+ 5503 50F9FFFF
+ 5504 4543 F30F7F85 movdqu %xmm0, -1728(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 188
+
+
+ 5504 40F9FFFF
+ 5505 .LBB1244:
+ 5506 .LBB1245:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 5507 .loc 2 206 0
+ 5508 454b F30F6F85 movdqu -1728(%rbp), %xmm0
+ 5508 40F9FFFF
+ 5509 4553 F30F6F8D movdqu -1712(%rbp), %xmm1
+ 5509 50F9FFFF
+ 5510 455b 660FDBC1 pand %xmm1, %xmm0
+ 5511 .LBE1245:
+ 5512 .LBE1244:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5513 .loc 2 859 0
+ 5514 455f F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 5514 E0F8FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 5515 .loc 2 866 0
+ 5516 4567 C785BCF8 movl $0, -1860(%rbp)
+ 5516 FFFF0000
+ 5516 0000
+ 5517 4571 E9BE0100 jmp .L84
+ 5517 00
+ 5518 .L85:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5519 .loc 2 868 0
+ 5520 4576 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 5520 00000000
+ 5521 457e F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 5521 70F9FFFF
+ 5522 4586 F30F6F85 movdqu -1824(%rbp), %xmm0
+ 5522 E0F8FFFF
+ 5523 458e F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 5523 60F9FFFF
+ 5524 4596 F30F6F85 movdqu -1680(%rbp), %xmm0
+ 5524 70F9FFFF
+ 5525 459e F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 5525 90F9FFFF
+ 5526 45a6 F30F6F85 movdqu -1696(%rbp), %xmm0
+ 5526 60F9FFFF
+ 5527 45ae F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 5527 80F9FFFF
+ 5528 .LBB1246:
+ 5529 .LBB1247:
+ 5530 .LBB1248:
+ 5531 .LBB1249:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5532 .loc 3 529 0
+ 5533 45b6 F30F6F8D movdqu -1664(%rbp), %xmm1
+ 5533 80F9FFFF
+ 5534 45be F30F6F85 movdqu -1648(%rbp), %xmm0
+ 5534 90F9FFFF
+ 5535 45c6 660F3800 pshufb %xmm1, %xmm0
+ 5535 C1
+ 5536 .LBE1249:
+ 5537 .LBE1248:
+ 5538 .LBE1247:
+
GAS LISTING /tmp/ccjbMjHD.s page 189
+
+
+ 5539 .LBE1246:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5540 .loc 2 868 0
+ 5541 45cb F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 5541 D0F8FFFF
+ 5542 45d3 F30F6F85 movdqu -1808(%rbp), %xmm0
+ 5542 F0F8FFFF
+ 5543 45db F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 5543 B0F9FFFF
+ 5544 45e3 F30F6F85 movdqu -1840(%rbp), %xmm0
+ 5544 D0F8FFFF
+ 5545 45eb F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 5545 A0F9FFFF
+ 5546 .LBB1250:
+ 5547 .LBB1251:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 5548 .loc 2 234 0
+ 5549 45f3 F30F6F85 movdqu -1632(%rbp), %xmm0
+ 5549 A0F9FFFF
+ 5550 45fb F30F6F8D movdqu -1616(%rbp), %xmm1
+ 5550 B0F9FFFF
+ 5551 4603 660FEBC1 por %xmm1, %xmm0
+ 5552 .LBE1251:
+ 5553 .LBE1250:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 5554 .loc 2 870 0
+ 5555 4607 F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 5555 D0F8FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5556 .loc 2 872 0
+ 5557 460f 8B85BCF8 mov -1860(%rbp), %eax
+ 5557 FFFF
+ 5558 4615 48C1E004 salq $4, %rax
+ 5559 4619 48038598 addq -1896(%rbp), %rax
+ 5559 F8FFFF
+ 5560 4620 660F6F00 movdqa (%rax), %xmm0
+ 5561 4624 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 5561 D0F9FFFF
+ 5562 462c F30F6F85 movdqu -1840(%rbp), %xmm0
+ 5562 D0F8FFFF
+ 5563 4634 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 5563 C0F9FFFF
+ 5564 463c F30F6F85 movdqu -1584(%rbp), %xmm0
+ 5564 D0F9FFFF
+ 5565 4644 F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 5565 F0F9FFFF
+ 5566 464c F30F6F85 movdqu -1600(%rbp), %xmm0
+ 5566 C0F9FFFF
+ 5567 4654 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 5567 E0F9FFFF
+ 5568 .LBB1252:
+ 5569 .LBB1253:
+ 5570 .LBB1254:
+ 5571 .LBB1255:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5572 .loc 3 529 0
+ 5573 465c F30F6F8D movdqu -1568(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 190
+
+
+ 5573 E0F9FFFF
+ 5574 4664 F30F6F85 movdqu -1552(%rbp), %xmm0
+ 5574 F0F9FFFF
+ 5575 466c 660F3800 pshufb %xmm1, %xmm0
+ 5575 C1
+ 5576 .LBE1255:
+ 5577 .LBE1254:
+ 5578 .LBE1253:
+ 5579 .LBE1252:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5580 .loc 2 872 0
+ 5581 4671 F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 5581 D0F8FFFF
+ 5582 4679 F30F6F85 movdqu -1856(%rbp), %xmm0
+ 5582 C0F8FFFF
+ 5583 4681 F30F7F85 movdqu %xmm0, -1520(%rbp)
+ 5583 10FAFFFF
+ 5584 4689 F30F6F85 movdqu -1840(%rbp), %xmm0
+ 5584 D0F8FFFF
+ 5585 4691 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 5585 00FAFFFF
+ 5586 .LBB1256:
+ 5587 .LBB1257:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 5588 .loc 2 234 0
+ 5589 4699 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 5589 00FAFFFF
+ 5590 46a1 F30F6F8D movdqu -1520(%rbp), %xmm1
+ 5590 10FAFFFF
+ 5591 46a9 660FEBC1 por %xmm1, %xmm0
+ 5592 .LBE1257:
+ 5593 .LBE1256:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 5594 .loc 2 874 0
+ 5595 46ad F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 5595 C0F8FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5596 .loc 2 876 0
+ 5597 46b5 660F6F05 movdqa vec_01(%rip), %xmm0
+ 5597 00000000
+ 5598 46bd F30F6F8D movdqu -1824(%rbp), %xmm1
+ 5598 E0F8FFFF
+ 5599 46c5 F30F7F8D movdqu %xmm1, -1488(%rbp)
+ 5599 30FAFFFF
+ 5600 46cd F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 5600 20FAFFFF
+ 5601 .LBB1258:
+ 5602 .LBB1259:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 5603 .loc 2 290 0
+ 5604 46d5 F30F6F8D movdqu -1504(%rbp), %xmm1
+ 5604 20FAFFFF
+ 5605 46dd F30F6F85 movdqu -1488(%rbp), %xmm0
+ 5605 30FAFFFF
+ 5606 46e5 660FF8C1 psubb %xmm1, %xmm0
+ 5607 .LBE1259:
+ 5608 .LBE1258:
+
GAS LISTING /tmp/ccjbMjHD.s page 191
+
+
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5609 .loc 2 876 0
+ 5610 46e9 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 5610 E0F8FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5611 .loc 2 878 0
+ 5612 46f1 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 5612 00000000
+ 5613 46f9 F30F6F8D movdqu -1824(%rbp), %xmm1
+ 5613 E0F8FFFF
+ 5614 4701 F30F7F8D movdqu %xmm1, -1456(%rbp)
+ 5614 50FAFFFF
+ 5615 4709 F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 5615 40FAFFFF
+ 5616 .LBB1260:
+ 5617 .LBB1261:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 5618 .loc 2 206 0
+ 5619 4711 F30F6F85 movdqu -1472(%rbp), %xmm0
+ 5619 40FAFFFF
+ 5620 4719 F30F6F8D movdqu -1456(%rbp), %xmm1
+ 5620 50FAFFFF
+ 5621 4721 660FDBC1 pand %xmm1, %xmm0
+ 5622 .LBE1261:
+ 5623 .LBE1260:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5624 .loc 2 878 0
+ 5625 4725 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 5625 E0F8FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 5626 .loc 2 866 0
+ 5627 472d 8385BCF8 addl $1, -1860(%rbp)
+ 5627 FFFF01
+ 5628 .L84:
+ 5629 4734 83BDBCF8 cmpl $15, -1860(%rbp)
+ 5629 FFFF0F
+ 5630 473b 0F8635FE jbe .L85
+ 5630 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 5631 .loc 2 882 0
+ 5632 4741 F30F6F85 movdqu -1856(%rbp), %xmm0
+ 5632 C0F8FFFF
+ 5633 .LBE1239:
+ 5634 .LBE1238:
+ 5635 .LBE1237:
+ 5636 .LBE1236:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 5637 .loc 2 1682 0
+ 5638 4749 660F7F85 movdqa %xmm0, -10736(%rbp)
+ 5638 10D6FFFF
+ 5639 .LBB1262:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 5640 .loc 2 1683 0
+ 5641 4751 660F6F85 movdqa -10736(%rbp), %xmm0
+ 5641 10D6FFFF
+ 5642 4759 F30F7F85 movdqu %xmm0, -10064(%rbp)
+ 5642 B0D8FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 192
+
+
+ 5643 4761 E8000000 call KDbgWriterGet at PLT
+ 5643 00
+ 5644 4766 4885C0 testq %rax, %rax
+ 5645 4769 7479 je .L87
+ 5646 476b BF010000 movl $1, %edi
+ 5646 00
+ 5647 4770 E8000000 call KDbgCondToFlag at PLT
+ 5647 00
+ 5648 4775 4889C6 movq %rax, %rsi
+ 5649 4778 BF100000 movl $16, %edi
+ 5649 00
+ 5650 477d E8000000 call KDbgTestModConds at PLT
+ 5650 00
+ 5651 4782 84C0 testb %al, %al
+ 5652 4784 745E je .L87
+ 5653 4786 8B85BCD8 movl -10052(%rbp), %eax
+ 5653 FFFF
+ 5654 478c 89C7 movl %eax, %edi
+ 5655 478e E86DB8FF call bswap_32
+ 5655 FF
+ 5656 4793 4189C5 movl %eax, %r13d
+ 5657 4796 8B85B8D8 movl -10056(%rbp), %eax
+ 5657 FFFF
+ 5658 479c 89C7 movl %eax, %edi
+ 5659 479e E85DB8FF call bswap_32
+ 5659 FF
+ 5660 47a3 4189C4 movl %eax, %r12d
+ 5661 47a6 8B85B4D8 movl -10060(%rbp), %eax
+ 5661 FFFF
+ 5662 47ac 89C7 movl %eax, %edi
+ 5663 47ae E84DB8FF call bswap_32
+ 5663 FF
+ 5664 47b3 89C3 movl %eax, %ebx
+ 5665 47b5 8B85B0D8 movl -10064(%rbp), %eax
+ 5665 FFFF
+ 5666 47bb 89C7 movl %eax, %edi
+ 5667 47bd E83EB8FF call bswap_32
+ 5667 FF
+ 5668 47c2 4589E9 movl %r13d, %r9d
+ 5669 47c5 4589E0 movl %r12d, %r8d
+ 5670 47c8 89D9 movl %ebx, %ecx
+ 5671 47ca 89C2 movl %eax, %edx
+ 5672 47cc 488D3500 leaq .LC0(%rip), %rsi
+ 5672 000000
+ 5673 47d3 488D3D00 leaq .LC1(%rip), %rdi
+ 5673 000000
+ 5674 47da B8000000 movl $0, %eax
+ 5674 00
+ 5675 47df E8000000 call KDbgMsg at PLT
+ 5675 00
+ 5676 .L87:
+ 5677 47e4 660F6F85 movdqa -10736(%rbp), %xmm0
+ 5677 10D6FFFF
+ 5678 47ec F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 5678 60FAFFFF
+ 5679 .LBE1262:
+ 5680 .LBB1263:
+
GAS LISTING /tmp/ccjbMjHD.s page 193
+
+
+ 5681 .LBB1264:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5682 .loc 2 667 0
+ 5683 47f4 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 5683 00000000
+ 5684 47fc F30F6F8D movdqu -1440(%rbp), %xmm1
+ 5684 60FAFFFF
+ 5685 4804 F30F7F8D movdqu %xmm1, -1408(%rbp)
+ 5685 80FAFFFF
+ 5686 480c F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 5686 70FAFFFF
+ 5687 4814 F30F6F85 movdqu -1408(%rbp), %xmm0
+ 5687 80FAFFFF
+ 5688 481c F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 5688 A0FAFFFF
+ 5689 4824 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 5689 70FAFFFF
+ 5690 482c F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 5690 90FAFFFF
+ 5691 .LBB1265:
+ 5692 .LBB1266:
+ 5693 .LBB1267:
+ 5694 .LBB1268:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5695 .loc 3 529 0
+ 5696 4834 F30F6F8D movdqu -1392(%rbp), %xmm1
+ 5696 90FAFFFF
+ 5697 483c F30F6F85 movdqu -1376(%rbp), %xmm0
+ 5697 A0FAFFFF
+ 5698 4844 660F3800 pshufb %xmm1, %xmm0
+ 5698 C1
+ 5699 .LBE1268:
+ 5700 .LBE1267:
+ 5701 .LBE1266:
+ 5702 .LBE1265:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5703 .loc 2 667 0
+ 5704 4849 F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 5704 60FAFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5705 .loc 2 668 0
+ 5706 4851 F30F6F85 movdqu -1440(%rbp), %xmm0
+ 5706 60FAFFFF
+ 5707 .LBE1264:
+ 5708 .LBE1263:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 5709 .loc 2 1684 0
+ 5710 4859 660F7F85 movdqa %xmm0, -10736(%rbp)
+ 5710 10D6FFFF
+ 5711 .LBB1269:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 5712 .loc 2 1685 0
+ 5713 4861 660F6F85 movdqa -10736(%rbp), %xmm0
+ 5713 10D6FFFF
+ 5714 4869 F30F7F85 movdqu %xmm0, -10080(%rbp)
+ 5714 A0D8FFFF
+ 5715 4871 E8000000 call KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 194
+
+
+ 5715 00
+ 5716 4876 4885C0 testq %rax, %rax
+ 5717 4879 7479 je .L89
+ 5718 487b BF010000 movl $1, %edi
+ 5718 00
+ 5719 4880 E8000000 call KDbgCondToFlag at PLT
+ 5719 00
+ 5720 4885 4889C6 movq %rax, %rsi
+ 5721 4888 BF100000 movl $16, %edi
+ 5721 00
+ 5722 488d E8000000 call KDbgTestModConds at PLT
+ 5722 00
+ 5723 4892 84C0 testb %al, %al
+ 5724 4894 745E je .L89
+ 5725 4896 8B85ACD8 movl -10068(%rbp), %eax
+ 5725 FFFF
+ 5726 489c 89C7 movl %eax, %edi
+ 5727 489e E85DB7FF call bswap_32
+ 5727 FF
+ 5728 48a3 4189C5 movl %eax, %r13d
+ 5729 48a6 8B85A8D8 movl -10072(%rbp), %eax
+ 5729 FFFF
+ 5730 48ac 89C7 movl %eax, %edi
+ 5731 48ae E84DB7FF call bswap_32
+ 5731 FF
+ 5732 48b3 4189C4 movl %eax, %r12d
+ 5733 48b6 8B85A4D8 movl -10076(%rbp), %eax
+ 5733 FFFF
+ 5734 48bc 89C7 movl %eax, %edi
+ 5735 48be E83DB7FF call bswap_32
+ 5735 FF
+ 5736 48c3 89C3 movl %eax, %ebx
+ 5737 48c5 8B85A0D8 movl -10080(%rbp), %eax
+ 5737 FFFF
+ 5738 48cb 89C7 movl %eax, %edi
+ 5739 48cd E82EB7FF call bswap_32
+ 5739 FF
+ 5740 48d2 4589E9 movl %r13d, %r9d
+ 5741 48d5 4589E0 movl %r12d, %r8d
+ 5742 48d8 89D9 movl %ebx, %ecx
+ 5743 48da 89C2 movl %eax, %edx
+ 5744 48dc 488D3500 leaq .LC2(%rip), %rsi
+ 5744 000000
+ 5745 48e3 488D3D00 leaq .LC1(%rip), %rdi
+ 5745 000000
+ 5746 48ea B8000000 movl $0, %eax
+ 5746 00
+ 5747 48ef E8000000 call KDbgMsg at PLT
+ 5747 00
+ 5748 .L89:
+ 5749 48f4 660F6F85 movdqa -10736(%rbp), %xmm0
+ 5749 10D6FFFF
+ 5750 48fc F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 5750 C0FAFFFF
+ 5751 4904 660F6F85 movdqa -10720(%rbp), %xmm0
+ 5751 20D6FFFF
+ 5752 490c F30F7F85 movdqu %xmm0, -1360(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 195
+
+
+ 5752 B0FAFFFF
+ 5753 .LBE1269:
+ 5754 .LBB1270:
+ 5755 .LBB1271:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 5756 .loc 2 178 0
+ 5757 4914 F30F6F85 movdqu -1360(%rbp), %xmm0
+ 5757 B0FAFFFF
+ 5758 491c F30F6F8D movdqu -1344(%rbp), %xmm1
+ 5758 C0FAFFFF
+ 5759 4924 660FEFC1 pxor %xmm1, %xmm0
+ 5760 .LBE1271:
+ 5761 .LBE1270:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 5762 .loc 2 1686 0
+ 5763 4928 660F7F85 movdqa %xmm0, -10736(%rbp)
+ 5763 10D6FFFF
+ 5764 .LBB1272:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 5765 .loc 2 1687 0
+ 5766 4930 660F6F85 movdqa -10736(%rbp), %xmm0
+ 5766 10D6FFFF
+ 5767 4938 F30F7F85 movdqu %xmm0, -10096(%rbp)
+ 5767 90D8FFFF
+ 5768 4940 E8000000 call KDbgWriterGet at PLT
+ 5768 00
+ 5769 4945 4885C0 testq %rax, %rax
+ 5770 4948 7479 je .L91
+ 5771 494a BF010000 movl $1, %edi
+ 5771 00
+ 5772 494f E8000000 call KDbgCondToFlag at PLT
+ 5772 00
+ 5773 4954 4889C6 movq %rax, %rsi
+ 5774 4957 BF100000 movl $16, %edi
+ 5774 00
+ 5775 495c E8000000 call KDbgTestModConds at PLT
+ 5775 00
+ 5776 4961 84C0 testb %al, %al
+ 5777 4963 745E je .L91
+ 5778 4965 8B859CD8 movl -10084(%rbp), %eax
+ 5778 FFFF
+ 5779 496b 89C7 movl %eax, %edi
+ 5780 496d E88EB6FF call bswap_32
+ 5780 FF
+ 5781 4972 4189C5 movl %eax, %r13d
+ 5782 4975 8B8598D8 movl -10088(%rbp), %eax
+ 5782 FFFF
+ 5783 497b 89C7 movl %eax, %edi
+ 5784 497d E87EB6FF call bswap_32
+ 5784 FF
+ 5785 4982 4189C4 movl %eax, %r12d
+ 5786 4985 8B8594D8 movl -10092(%rbp), %eax
+ 5786 FFFF
+ 5787 498b 89C7 movl %eax, %edi
+ 5788 498d E86EB6FF call bswap_32
+ 5788 FF
+ 5789 4992 89C3 movl %eax, %ebx
+
GAS LISTING /tmp/ccjbMjHD.s page 196
+
+
+ 5790 4994 8B8590D8 movl -10096(%rbp), %eax
+ 5790 FFFF
+ 5791 499a 89C7 movl %eax, %edi
+ 5792 499c E85FB6FF call bswap_32
+ 5792 FF
+ 5793 49a1 4589E9 movl %r13d, %r9d
+ 5794 49a4 4589E0 movl %r12d, %r8d
+ 5795 49a7 89D9 movl %ebx, %ecx
+ 5796 49a9 89C2 movl %eax, %edx
+ 5797 49ab 488D3500 leaq .LC3(%rip), %rsi
+ 5797 000000
+ 5798 49b2 488D3D00 leaq .LC1(%rip), %rdi
+ 5798 000000
+ 5799 49b9 B8000000 movl $0, %eax
+ 5799 00
+ 5800 49be E8000000 call KDbgMsg at PLT
+ 5800 00
+ 5801 .L91:
+ 5802 49c3 660F6F85 movdqa -10736(%rbp), %xmm0
+ 5802 10D6FFFF
+ 5803 49cb F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 5803 D0FAFFFF
+ 5804 49d3 F30F6F85 movdqu -1328(%rbp), %xmm0
+ 5804 D0FAFFFF
+ 5805 49db F30F7F85 movdqu %xmm0, -1296(%rbp)
+ 5805 F0FAFFFF
+ 5806 .LBE1272:
+ 5807 .LBB1273:
+ 5808 .LBB1274:
+ 5809 .LBB1275:
+ 5810 .LBB1276:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5811 .loc 3 450 0
+ 5812 49e3 F30F6F85 movdqu -1296(%rbp), %xmm0
+ 5812 F0FAFFFF
+ 5813 49eb 660F70C0 pshufd $255, %xmm0, %xmm0
+ 5813 FF
+ 5814 .LBE1276:
+ 5815 .LBE1275:
+ 5816 .LBE1274:
+ 5817 .LBE1273:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 5818 .loc 2 1688 0
+ 5819 49f0 660F7F85 movdqa %xmm0, -10736(%rbp)
+ 5819 10D6FFFF
+ 5820 .LBB1277:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 5821 .loc 2 1689 0
+ 5822 49f8 660F6F85 movdqa -10736(%rbp), %xmm0
+ 5822 10D6FFFF
+ 5823 4a00 F30F7F85 movdqu %xmm0, -10112(%rbp)
+ 5823 80D8FFFF
+ 5824 4a08 E8000000 call KDbgWriterGet at PLT
+ 5824 00
+ 5825 4a0d 4885C0 testq %rax, %rax
+ 5826 4a10 7479 je .L93
+ 5827 4a12 BF010000 movl $1, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 197
+
+
+ 5827 00
+ 5828 4a17 E8000000 call KDbgCondToFlag at PLT
+ 5828 00
+ 5829 4a1c 4889C6 movq %rax, %rsi
+ 5830 4a1f BF100000 movl $16, %edi
+ 5830 00
+ 5831 4a24 E8000000 call KDbgTestModConds at PLT
+ 5831 00
+ 5832 4a29 84C0 testb %al, %al
+ 5833 4a2b 745E je .L93
+ 5834 4a2d 8B858CD8 movl -10100(%rbp), %eax
+ 5834 FFFF
+ 5835 4a33 89C7 movl %eax, %edi
+ 5836 4a35 E8C6B5FF call bswap_32
+ 5836 FF
+ 5837 4a3a 4189C5 movl %eax, %r13d
+ 5838 4a3d 8B8588D8 movl -10104(%rbp), %eax
+ 5838 FFFF
+ 5839 4a43 89C7 movl %eax, %edi
+ 5840 4a45 E8B6B5FF call bswap_32
+ 5840 FF
+ 5841 4a4a 4189C4 movl %eax, %r12d
+ 5842 4a4d 8B8584D8 movl -10108(%rbp), %eax
+ 5842 FFFF
+ 5843 4a53 89C7 movl %eax, %edi
+ 5844 4a55 E8A6B5FF call bswap_32
+ 5844 FF
+ 5845 4a5a 89C3 movl %eax, %ebx
+ 5846 4a5c 8B8580D8 movl -10112(%rbp), %eax
+ 5846 FFFF
+ 5847 4a62 89C7 movl %eax, %edi
+ 5848 4a64 E897B5FF call bswap_32
+ 5848 FF
+ 5849 4a69 4589E9 movl %r13d, %r9d
+ 5850 4a6c 4589E0 movl %r12d, %r8d
+ 5851 4a6f 89D9 movl %ebx, %ecx
+ 5852 4a71 89C2 movl %eax, %edx
+ 5853 4a73 488D3500 leaq .LC4(%rip), %rsi
+ 5853 000000
+ 5854 4a7a 488D3D00 leaq .LC1(%rip), %rdi
+ 5854 000000
+ 5855 4a81 B8000000 movl $0, %eax
+ 5855 00
+ 5856 4a86 E8000000 call KDbgMsg at PLT
+ 5856 00
+ 5857 .L93:
+ 5858 .LBE1277:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 5859 .loc 2 1690 0
+ 5860 4a8b 660F6F85 movdqa -10736(%rbp), %xmm0
+ 5860 10D6FFFF
+ 5861 .LBE1231:
+ 5862 .LBE1230:
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x1B,9);
+ 5863 .loc 2 1752 0
+ 5864 4a93 F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 5864 10D9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 198
+
+
+ 5865 4a9b F30F6F85 movdqu -9984(%rbp), %xmm0
+ 5865 00D9FFFF
+ 5866 4aa3 F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 5866 00FBFFFF
+ 5867 .LBB1278:
+ 5868 .LBB1279:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 5869 .loc 2 1565 0
+ 5870 4aab F30F6F85 movdqu -1280(%rbp), %xmm0
+ 5870 00FBFFFF
+ 5871 4ab3 660F7F85 movdqa %xmm0, -10704(%rbp)
+ 5871 30D6FFFF
+ 5872 4abb 660F6F85 movdqa -10704(%rbp), %xmm0
+ 5872 30D6FFFF
+ 5873 4ac3 F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 5873 10FBFFFF
+ 5874 .LBB1280:
+ 5875 .LBB1281:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5876 .loc 2 1278 0
+ 5877 4acb 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 5877 00000000
+ 5878 4ad3 F30F6F8D movdqu -1264(%rbp), %xmm1
+ 5878 10FBFFFF
+ 5879 4adb F30F7F8D movdqu %xmm1, -1232(%rbp)
+ 5879 30FBFFFF
+ 5880 4ae3 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 5880 20FBFFFF
+ 5881 4aeb F30F6F85 movdqu -1232(%rbp), %xmm0
+ 5881 30FBFFFF
+ 5882 4af3 F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 5882 50FBFFFF
+ 5883 4afb F30F6F85 movdqu -1248(%rbp), %xmm0
+ 5883 20FBFFFF
+ 5884 4b03 F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 5884 40FBFFFF
+ 5885 .LBB1282:
+ 5886 .LBB1283:
+ 5887 .LBB1284:
+ 5888 .LBB1285:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5889 .loc 3 529 0
+ 5890 4b0b F30F6F8D movdqu -1216(%rbp), %xmm1
+ 5890 40FBFFFF
+ 5891 4b13 F30F6F85 movdqu -1200(%rbp), %xmm0
+ 5891 50FBFFFF
+ 5892 4b1b 660F3800 pshufb %xmm1, %xmm0
+ 5892 C1
+ 5893 .LBE1285:
+ 5894 .LBE1284:
+ 5895 .LBE1283:
+ 5896 .LBE1282:
+ 5897 .LBE1281:
+ 5898 .LBE1280:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5899 .loc 2 1567 0
+ 5900 4b20 660F7F85 movdqa %xmm0, -10704(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 199
+
+
+ 5900 30D6FFFF
+ 5901 4b28 660F6F85 movdqa -10704(%rbp), %xmm0
+ 5901 30D6FFFF
+ 5902 4b30 660FEF85 pxor -1280(%rbp), %xmm0
+ 5902 00FBFFFF
+ 5903 4b38 F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 5903 00FBFFFF
+ 5904 4b40 660F6F85 movdqa -10704(%rbp), %xmm0
+ 5904 30D6FFFF
+ 5905 4b48 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 5905 60FBFFFF
+ 5906 .LBB1286:
+ 5907 .LBB1287:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5908 .loc 2 1278 0
+ 5909 4b50 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 5909 00000000
+ 5910 4b58 F30F6F8D movdqu -1184(%rbp), %xmm1
+ 5910 60FBFFFF
+ 5911 4b60 F30F7F8D movdqu %xmm1, -1152(%rbp)
+ 5911 80FBFFFF
+ 5912 4b68 F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 5912 70FBFFFF
+ 5913 4b70 F30F6F85 movdqu -1152(%rbp), %xmm0
+ 5913 80FBFFFF
+ 5914 4b78 F30F7F85 movdqu %xmm0, -1120(%rbp)
+ 5914 A0FBFFFF
+ 5915 4b80 F30F6F85 movdqu -1168(%rbp), %xmm0
+ 5915 70FBFFFF
+ 5916 4b88 F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 5916 90FBFFFF
+ 5917 .LBB1288:
+ 5918 .LBB1289:
+ 5919 .LBB1290:
+ 5920 .LBB1291:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5921 .loc 3 529 0
+ 5922 4b90 F30F6F8D movdqu -1136(%rbp), %xmm1
+ 5922 90FBFFFF
+ 5923 4b98 F30F6F85 movdqu -1120(%rbp), %xmm0
+ 5923 A0FBFFFF
+ 5924 4ba0 660F3800 pshufb %xmm1, %xmm0
+ 5924 C1
+ 5925 .LBE1291:
+ 5926 .LBE1290:
+ 5927 .LBE1289:
+ 5928 .LBE1288:
+ 5929 .LBE1287:
+ 5930 .LBE1286:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5931 .loc 2 1568 0
+ 5932 4ba5 660F7F85 movdqa %xmm0, -10704(%rbp)
+ 5932 30D6FFFF
+ 5933 4bad 660F6F85 movdqa -10704(%rbp), %xmm0
+ 5933 30D6FFFF
+ 5934 4bb5 660FEF85 pxor -1280(%rbp), %xmm0
+ 5934 00FBFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 200
+
+
+ 5935 4bbd F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 5935 00FBFFFF
+ 5936 4bc5 660F6F85 movdqa -10704(%rbp), %xmm0
+ 5936 30D6FFFF
+ 5937 4bcd F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 5937 B0FBFFFF
+ 5938 .LBB1292:
+ 5939 .LBB1293:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5940 .loc 2 1278 0
+ 5941 4bd5 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 5941 00000000
+ 5942 4bdd F30F6F8D movdqu -1104(%rbp), %xmm1
+ 5942 B0FBFFFF
+ 5943 4be5 F30F7F8D movdqu %xmm1, -1072(%rbp)
+ 5943 D0FBFFFF
+ 5944 4bed F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 5944 C0FBFFFF
+ 5945 4bf5 F30F6F85 movdqu -1072(%rbp), %xmm0
+ 5945 D0FBFFFF
+ 5946 4bfd F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 5946 F0FBFFFF
+ 5947 4c05 F30F6F85 movdqu -1088(%rbp), %xmm0
+ 5947 C0FBFFFF
+ 5948 4c0d F30F7F85 movdqu %xmm0, -1056(%rbp)
+ 5948 E0FBFFFF
+ 5949 .LBB1294:
+ 5950 .LBB1295:
+ 5951 .LBB1296:
+ 5952 .LBB1297:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5953 .loc 3 529 0
+ 5954 4c15 F30F6F8D movdqu -1056(%rbp), %xmm1
+ 5954 E0FBFFFF
+ 5955 4c1d F30F6F85 movdqu -1040(%rbp), %xmm0
+ 5955 F0FBFFFF
+ 5956 4c25 660F3800 pshufb %xmm1, %xmm0
+ 5956 C1
+ 5957 .LBE1297:
+ 5958 .LBE1296:
+ 5959 .LBE1295:
+ 5960 .LBE1294:
+ 5961 .LBE1293:
+ 5962 .LBE1292:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5963 .loc 2 1569 0
+ 5964 4c2a 660F7F85 movdqa %xmm0, -10704(%rbp)
+ 5964 30D6FFFF
+ 5965 4c32 660F6F85 movdqa -10704(%rbp), %xmm0
+ 5965 30D6FFFF
+ 5966 4c3a 660FEF85 pxor -1280(%rbp), %xmm0
+ 5966 00FBFFFF
+ 5967 4c42 F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 5967 00FBFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 5968 .loc 2 1571 0
+ 5969 4c4a F30F6F85 movdqu -1280(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 201
+
+
+ 5969 00FBFFFF
+ 5970 .LBE1279:
+ 5971 .LBE1278:
+ 5972 .loc 2 1752 0
+ 5973 4c52 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 5973 00D9FFFF
+ 5974 4c5a F30F6F85 movdqu -9968(%rbp), %xmm0
+ 5974 10D9FFFF
+ 5975 4c62 F30F6F8D movdqu -9984(%rbp), %xmm1
+ 5975 00D9FFFF
+ 5976 4c6a 660FEFC1 pxor %xmm1, %xmm0
+ 5977 4c6e F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 5977 00D9FFFF
+ 5978 4c76 488B8578 movq -10632(%rbp), %rax
+ 5978 D6FFFF
+ 5979 4c7d 48059000 addq $144, %rax
+ 5979 0000
+ 5980 4c83 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 5980 00D9FFFF
+ 5981 4c8b F30F7F00 movdqu %xmm0, (%rax)
+ 5982 4c8f F30F6F85 movdqu -9984(%rbp), %xmm0
+ 5982 00D9FFFF
+ 5983 4c97 F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 5983 10FCFFFF
+ 5984 .LBB1298:
+ 5985 .LBB1299:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5986 .loc 2 1681 0
+ 5987 4c9f B8360000 movl $54, %eax
+ 5987 00
+ 5988 4ca4 660F6F05 movdqa vec_00(%rip), %xmm0
+ 5988 00000000
+ 5989 4cac F30F7F85 movdqu %xmm0, -976(%rbp)
+ 5989 30FCFFFF
+ 5990 4cb4 89852CFC movl %eax, -980(%rbp)
+ 5990 FFFF
+ 5991 4cba F30F6F85 movdqu -976(%rbp), %xmm0
+ 5991 30FCFFFF
+ 5992 4cc2 F30F7F85 movdqu %xmm0, -944(%rbp)
+ 5992 50FCFFFF
+ 5993 4cca 8B852CFC movl -980(%rbp), %eax
+ 5993 FFFF
+ 5994 4cd0 89854CFC movl %eax, -948(%rbp)
+ 5994 FFFF
+ 5995 .LBB1300:
+ 5996 .LBB1301:
+ 5997 .LBB1302:
+ 5998 .LBB1303:
+ 5999 .loc 3 598 0
+ 6000 4cd6 8B854CFC movl -948(%rbp), %eax
+ 6000 FFFF
+ 6001 4cdc F30F6F85 movdqu -944(%rbp), %xmm0
+ 6001 50FCFFFF
+ 6002 4ce4 660F3A22 pinsrd $3, %eax, %xmm0
+ 6002 C003
+ 6003 .LBE1303:
+ 6004 .LBE1302:
+
GAS LISTING /tmp/ccjbMjHD.s page 202
+
+
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 6005 .loc 2 519 0
+ 6006 4cea F30F7F85 movdqu %xmm0, -976(%rbp)
+ 6006 30FCFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6007 .loc 2 526 0
+ 6008 4cf2 F30F6F85 movdqu -976(%rbp), %xmm0
+ 6008 30FCFFFF
+ 6009 .LBE1301:
+ 6010 .LBE1300:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 6011 .loc 2 1681 0
+ 6012 4cfa 660F7F85 movdqa %xmm0, -10672(%rbp)
+ 6012 50D6FFFF
+ 6013 4d02 F30F6F85 movdqu -1008(%rbp), %xmm0
+ 6013 10FCFFFF
+ 6014 4d0a F30F7F85 movdqu %xmm0, -928(%rbp)
+ 6014 60FCFFFF
+ 6015 4d12 F30F6F85 movdqu -928(%rbp), %xmm0
+ 6015 60FCFFFF
+ 6016 4d1a F30F7F85 movdqu %xmm0, -896(%rbp)
+ 6016 80FCFFFF
+ 6017 4d22 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 6017 000000
+ 6018 4d29 48898578 movq %rax, -904(%rbp)
+ 6018 FCFFFF
+ 6019 .LBB1304:
+ 6020 .LBB1305:
+ 6021 .LBB1306:
+ 6022 .LBB1307:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 6023 .loc 2 851 0
+ 6024 4d30 660F6F05 movdqa vec_00(%rip), %xmm0
+ 6024 00000000
+ 6025 4d38 F30F7F85 movdqu %xmm0, -864(%rbp)
+ 6025 A0FCFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 6026 .loc 2 854 0
+ 6027 4d40 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 6027 00000000
+ 6028 4d48 F30F6F8D movdqu -896(%rbp), %xmm1
+ 6028 80FCFFFF
+ 6029 4d50 F30F7F8D movdqu %xmm1, -784(%rbp)
+ 6029 F0FCFFFF
+ 6030 4d58 F30F7F85 movdqu %xmm0, -800(%rbp)
+ 6030 E0FCFFFF
+ 6031 .LBB1308:
+ 6032 .LBB1309:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 6033 .loc 2 206 0
+ 6034 4d60 F30F6F85 movdqu -800(%rbp), %xmm0
+ 6034 E0FCFFFF
+ 6035 4d68 F30F6F8D movdqu -784(%rbp), %xmm1
+ 6035 F0FCFFFF
+ 6036 4d70 660FDBC1 pand %xmm1, %xmm0
+ 6037 .LBE1309:
+ 6038 .LBE1308:
+
GAS LISTING /tmp/ccjbMjHD.s page 203
+
+
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 6039 .loc 2 854 0
+ 6040 4d74 F30F7F85 movdqu %xmm0, -816(%rbp)
+ 6040 D0FCFFFF
+ 6041 4d7c F30F6F85 movdqu -896(%rbp), %xmm0
+ 6041 80FCFFFF
+ 6042 4d84 F30F7F85 movdqu %xmm0, -752(%rbp)
+ 6042 10FDFFFF
+ 6043 .LBB1310:
+ 6044 .LBB1311:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 6045 .loc 3 433 0
+ 6046 4d8c F30F6F85 movdqu -752(%rbp), %xmm0
+ 6046 10FDFFFF
+ 6047 4d94 660F72D0 psrld $4, %xmm0
+ 6047 04
+ 6048 .LBE1311:
+ 6049 .LBE1310:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 6050 .loc 2 857 0
+ 6051 4d99 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 6051 C0FCFFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6052 .loc 2 859 0
+ 6053 4da1 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 6053 00000000
+ 6054 4da9 F30F6F8D movdqu -832(%rbp), %xmm1
+ 6054 C0FCFFFF
+ 6055 4db1 F30F7F8D movdqu %xmm1, -720(%rbp)
+ 6055 30FDFFFF
+ 6056 4db9 F30F7F85 movdqu %xmm0, -736(%rbp)
+ 6056 20FDFFFF
+ 6057 .LBB1312:
+ 6058 .LBB1313:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 6059 .loc 2 206 0
+ 6060 4dc1 F30F6F85 movdqu -736(%rbp), %xmm0
+ 6060 20FDFFFF
+ 6061 4dc9 F30F6F8D movdqu -720(%rbp), %xmm1
+ 6061 30FDFFFF
+ 6062 4dd1 660FDBC1 pand %xmm1, %xmm0
+ 6063 .LBE1313:
+ 6064 .LBE1312:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6065 .loc 2 859 0
+ 6066 4dd5 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 6066 C0FCFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 6067 .loc 2 866 0
+ 6068 4ddd C7859CFC movl $0, -868(%rbp)
+ 6068 FFFF0000
+ 6068 0000
+ 6069 4de7 E9BE0100 jmp .L94
+ 6069 00
+ 6070 .L95:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 6071 .loc 2 868 0
+
GAS LISTING /tmp/ccjbMjHD.s page 204
+
+
+ 6072 4dec 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 6072 00000000
+ 6073 4df4 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 6073 50FDFFFF
+ 6074 4dfc F30F6F85 movdqu -832(%rbp), %xmm0
+ 6074 C0FCFFFF
+ 6075 4e04 F30F7F85 movdqu %xmm0, -704(%rbp)
+ 6075 40FDFFFF
+ 6076 4e0c F30F6F85 movdqu -688(%rbp), %xmm0
+ 6076 50FDFFFF
+ 6077 4e14 F30F7F85 movdqu %xmm0, -656(%rbp)
+ 6077 70FDFFFF
+ 6078 4e1c F30F6F85 movdqu -704(%rbp), %xmm0
+ 6078 40FDFFFF
+ 6079 4e24 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 6079 60FDFFFF
+ 6080 .LBB1314:
+ 6081 .LBB1315:
+ 6082 .LBB1316:
+ 6083 .LBB1317:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6084 .loc 3 529 0
+ 6085 4e2c F30F6F8D movdqu -672(%rbp), %xmm1
+ 6085 60FDFFFF
+ 6086 4e34 F30F6F85 movdqu -656(%rbp), %xmm0
+ 6086 70FDFFFF
+ 6087 4e3c 660F3800 pshufb %xmm1, %xmm0
+ 6087 C1
+ 6088 .LBE1317:
+ 6089 .LBE1316:
+ 6090 .LBE1315:
+ 6091 .LBE1314:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 6092 .loc 2 868 0
+ 6093 4e41 F30F7F85 movdqu %xmm0, -848(%rbp)
+ 6093 B0FCFFFF
+ 6094 4e49 F30F6F85 movdqu -816(%rbp), %xmm0
+ 6094 D0FCFFFF
+ 6095 4e51 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 6095 90FDFFFF
+ 6096 4e59 F30F6F85 movdqu -848(%rbp), %xmm0
+ 6096 B0FCFFFF
+ 6097 4e61 F30F7F85 movdqu %xmm0, -640(%rbp)
+ 6097 80FDFFFF
+ 6098 .LBB1318:
+ 6099 .LBB1319:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 6100 .loc 2 234 0
+ 6101 4e69 F30F6F85 movdqu -640(%rbp), %xmm0
+ 6101 80FDFFFF
+ 6102 4e71 F30F6F8D movdqu -624(%rbp), %xmm1
+ 6102 90FDFFFF
+ 6103 4e79 660FEBC1 por %xmm1, %xmm0
+ 6104 .LBE1319:
+ 6105 .LBE1318:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 6106 .loc 2 870 0
+
GAS LISTING /tmp/ccjbMjHD.s page 205
+
+
+ 6107 4e7d F30F7F85 movdqu %xmm0, -848(%rbp)
+ 6107 B0FCFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 6108 .loc 2 872 0
+ 6109 4e85 8B859CFC mov -868(%rbp), %eax
+ 6109 FFFF
+ 6110 4e8b 48C1E004 salq $4, %rax
+ 6111 4e8f 48038578 addq -904(%rbp), %rax
+ 6111 FCFFFF
+ 6112 4e96 660F6F00 movdqa (%rax), %xmm0
+ 6113 4e9a F30F7F85 movdqu %xmm0, -592(%rbp)
+ 6113 B0FDFFFF
+ 6114 4ea2 F30F6F85 movdqu -848(%rbp), %xmm0
+ 6114 B0FCFFFF
+ 6115 4eaa F30F7F85 movdqu %xmm0, -608(%rbp)
+ 6115 A0FDFFFF
+ 6116 4eb2 F30F6F85 movdqu -592(%rbp), %xmm0
+ 6116 B0FDFFFF
+ 6117 4eba F30F7F85 movdqu %xmm0, -560(%rbp)
+ 6117 D0FDFFFF
+ 6118 4ec2 F30F6F85 movdqu -608(%rbp), %xmm0
+ 6118 A0FDFFFF
+ 6119 4eca F30F7F85 movdqu %xmm0, -576(%rbp)
+ 6119 C0FDFFFF
+ 6120 .LBB1320:
+ 6121 .LBB1321:
+ 6122 .LBB1322:
+ 6123 .LBB1323:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6124 .loc 3 529 0
+ 6125 4ed2 F30F6F8D movdqu -576(%rbp), %xmm1
+ 6125 C0FDFFFF
+ 6126 4eda F30F6F85 movdqu -560(%rbp), %xmm0
+ 6126 D0FDFFFF
+ 6127 4ee2 660F3800 pshufb %xmm1, %xmm0
+ 6127 C1
+ 6128 .LBE1323:
+ 6129 .LBE1322:
+ 6130 .LBE1321:
+ 6131 .LBE1320:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 6132 .loc 2 872 0
+ 6133 4ee7 F30F7F85 movdqu %xmm0, -848(%rbp)
+ 6133 B0FCFFFF
+ 6134 4eef F30F6F85 movdqu -864(%rbp), %xmm0
+ 6134 A0FCFFFF
+ 6135 4ef7 F30F7F85 movdqu %xmm0, -528(%rbp)
+ 6135 F0FDFFFF
+ 6136 4eff F30F6F85 movdqu -848(%rbp), %xmm0
+ 6136 B0FCFFFF
+ 6137 4f07 F30F7F85 movdqu %xmm0, -544(%rbp)
+ 6137 E0FDFFFF
+ 6138 .LBB1324:
+ 6139 .LBB1325:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 6140 .loc 2 234 0
+ 6141 4f0f F30F6F85 movdqu -544(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 206
+
+
+ 6141 E0FDFFFF
+ 6142 4f17 F30F6F8D movdqu -528(%rbp), %xmm1
+ 6142 F0FDFFFF
+ 6143 4f1f 660FEBC1 por %xmm1, %xmm0
+ 6144 .LBE1325:
+ 6145 .LBE1324:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 6146 .loc 2 874 0
+ 6147 4f23 F30F7F85 movdqu %xmm0, -864(%rbp)
+ 6147 A0FCFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6148 .loc 2 876 0
+ 6149 4f2b 660F6F05 movdqa vec_01(%rip), %xmm0
+ 6149 00000000
+ 6150 4f33 F30F6F8D movdqu -832(%rbp), %xmm1
+ 6150 C0FCFFFF
+ 6151 4f3b F30F7F8D movdqu %xmm1, -496(%rbp)
+ 6151 10FEFFFF
+ 6152 4f43 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 6152 00FEFFFF
+ 6153 .LBB1326:
+ 6154 .LBB1327:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 6155 .loc 2 290 0
+ 6156 4f4b F30F6F8D movdqu -512(%rbp), %xmm1
+ 6156 00FEFFFF
+ 6157 4f53 F30F6F85 movdqu -496(%rbp), %xmm0
+ 6157 10FEFFFF
+ 6158 4f5b 660FF8C1 psubb %xmm1, %xmm0
+ 6159 .LBE1327:
+ 6160 .LBE1326:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6161 .loc 2 876 0
+ 6162 4f5f F30F7F85 movdqu %xmm0, -832(%rbp)
+ 6162 C0FCFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6163 .loc 2 878 0
+ 6164 4f67 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 6164 00000000
+ 6165 4f6f F30F6F8D movdqu -832(%rbp), %xmm1
+ 6165 C0FCFFFF
+ 6166 4f77 F30F7F8D movdqu %xmm1, -464(%rbp)
+ 6166 30FEFFFF
+ 6167 4f7f F30F7F85 movdqu %xmm0, -480(%rbp)
+ 6167 20FEFFFF
+ 6168 .LBB1328:
+ 6169 .LBB1329:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 6170 .loc 2 206 0
+ 6171 4f87 F30F6F85 movdqu -480(%rbp), %xmm0
+ 6171 20FEFFFF
+ 6172 4f8f F30F6F8D movdqu -464(%rbp), %xmm1
+ 6172 30FEFFFF
+ 6173 4f97 660FDBC1 pand %xmm1, %xmm0
+ 6174 .LBE1329:
+ 6175 .LBE1328:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+
GAS LISTING /tmp/ccjbMjHD.s page 207
+
+
+ 6176 .loc 2 878 0
+ 6177 4f9b F30F7F85 movdqu %xmm0, -832(%rbp)
+ 6177 C0FCFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 6178 .loc 2 866 0
+ 6179 4fa3 83859CFC addl $1, -868(%rbp)
+ 6179 FFFF01
+ 6180 .L94:
+ 6181 4faa 83BD9CFC cmpl $15, -868(%rbp)
+ 6181 FFFF0F
+ 6182 4fb1 0F8635FE jbe .L95
+ 6182 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 6183 .loc 2 882 0
+ 6184 4fb7 F30F6F85 movdqu -864(%rbp), %xmm0
+ 6184 A0FCFFFF
+ 6185 .LBE1307:
+ 6186 .LBE1306:
+ 6187 .LBE1305:
+ 6188 .LBE1304:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 6189 .loc 2 1682 0
+ 6190 4fbf 660F7F85 movdqa %xmm0, -10688(%rbp)
+ 6190 40D6FFFF
+ 6191 .LBB1330:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 6192 .loc 2 1683 0
+ 6193 4fc7 660F6F85 movdqa -10688(%rbp), %xmm0
+ 6193 40D6FFFF
+ 6194 4fcf F30F7F85 movdqu %xmm0, -10000(%rbp)
+ 6194 F0D8FFFF
+ 6195 4fd7 E8000000 call KDbgWriterGet at PLT
+ 6195 00
+ 6196 4fdc 4885C0 testq %rax, %rax
+ 6197 4fdf 7479 je .L97
+ 6198 4fe1 BF010000 movl $1, %edi
+ 6198 00
+ 6199 4fe6 E8000000 call KDbgCondToFlag at PLT
+ 6199 00
+ 6200 4feb 4889C6 movq %rax, %rsi
+ 6201 4fee BF100000 movl $16, %edi
+ 6201 00
+ 6202 4ff3 E8000000 call KDbgTestModConds at PLT
+ 6202 00
+ 6203 4ff8 84C0 testb %al, %al
+ 6204 4ffa 745E je .L97
+ 6205 4ffc 8B85FCD8 movl -9988(%rbp), %eax
+ 6205 FFFF
+ 6206 5002 89C7 movl %eax, %edi
+ 6207 5004 E8F7AFFF call bswap_32
+ 6207 FF
+ 6208 5009 4189C5 movl %eax, %r13d
+ 6209 500c 8B85F8D8 movl -9992(%rbp), %eax
+ 6209 FFFF
+ 6210 5012 89C7 movl %eax, %edi
+ 6211 5014 E8E7AFFF call bswap_32
+ 6211 FF
+
GAS LISTING /tmp/ccjbMjHD.s page 208
+
+
+ 6212 5019 4189C4 movl %eax, %r12d
+ 6213 501c 8B85F4D8 movl -9996(%rbp), %eax
+ 6213 FFFF
+ 6214 5022 89C7 movl %eax, %edi
+ 6215 5024 E8D7AFFF call bswap_32
+ 6215 FF
+ 6216 5029 89C3 movl %eax, %ebx
+ 6217 502b 8B85F0D8 movl -10000(%rbp), %eax
+ 6217 FFFF
+ 6218 5031 89C7 movl %eax, %edi
+ 6219 5033 E8C8AFFF call bswap_32
+ 6219 FF
+ 6220 5038 4589E9 movl %r13d, %r9d
+ 6221 503b 4589E0 movl %r12d, %r8d
+ 6222 503e 89D9 movl %ebx, %ecx
+ 6223 5040 89C2 movl %eax, %edx
+ 6224 5042 488D3500 leaq .LC0(%rip), %rsi
+ 6224 000000
+ 6225 5049 488D3D00 leaq .LC1(%rip), %rdi
+ 6225 000000
+ 6226 5050 B8000000 movl $0, %eax
+ 6226 00
+ 6227 5055 E8000000 call KDbgMsg at PLT
+ 6227 00
+ 6228 .L97:
+ 6229 505a 660F6F85 movdqa -10688(%rbp), %xmm0
+ 6229 40D6FFFF
+ 6230 5062 F30F7F85 movdqu %xmm0, -448(%rbp)
+ 6230 40FEFFFF
+ 6231 .LBE1330:
+ 6232 .LBB1331:
+ 6233 .LBB1332:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6234 .loc 2 667 0
+ 6235 506a 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 6235 00000000
+ 6236 5072 F30F6F8D movdqu -448(%rbp), %xmm1
+ 6236 40FEFFFF
+ 6237 507a F30F7F8D movdqu %xmm1, -416(%rbp)
+ 6237 60FEFFFF
+ 6238 5082 F30F7F85 movdqu %xmm0, -432(%rbp)
+ 6238 50FEFFFF
+ 6239 508a F30F6F85 movdqu -416(%rbp), %xmm0
+ 6239 60FEFFFF
+ 6240 5092 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 6240 80FEFFFF
+ 6241 509a F30F6F85 movdqu -432(%rbp), %xmm0
+ 6241 50FEFFFF
+ 6242 50a2 F30F7F85 movdqu %xmm0, -400(%rbp)
+ 6242 70FEFFFF
+ 6243 .LBB1333:
+ 6244 .LBB1334:
+ 6245 .LBB1335:
+ 6246 .LBB1336:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6247 .loc 3 529 0
+ 6248 50aa F30F6F8D movdqu -400(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 209
+
+
+ 6248 70FEFFFF
+ 6249 50b2 F30F6F85 movdqu -384(%rbp), %xmm0
+ 6249 80FEFFFF
+ 6250 50ba 660F3800 pshufb %xmm1, %xmm0
+ 6250 C1
+ 6251 .LBE1336:
+ 6252 .LBE1335:
+ 6253 .LBE1334:
+ 6254 .LBE1333:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6255 .loc 2 667 0
+ 6256 50bf F30F7F85 movdqu %xmm0, -448(%rbp)
+ 6256 40FEFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6257 .loc 2 668 0
+ 6258 50c7 F30F6F85 movdqu -448(%rbp), %xmm0
+ 6258 40FEFFFF
+ 6259 .LBE1332:
+ 6260 .LBE1331:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 6261 .loc 2 1684 0
+ 6262 50cf 660F7F85 movdqa %xmm0, -10688(%rbp)
+ 6262 40D6FFFF
+ 6263 .LBB1337:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 6264 .loc 2 1685 0
+ 6265 50d7 660F6F85 movdqa -10688(%rbp), %xmm0
+ 6265 40D6FFFF
+ 6266 50df F30F7F85 movdqu %xmm0, -10016(%rbp)
+ 6266 E0D8FFFF
+ 6267 50e7 E8000000 call KDbgWriterGet at PLT
+ 6267 00
+ 6268 50ec 4885C0 testq %rax, %rax
+ 6269 50ef 7479 je .L99
+ 6270 50f1 BF010000 movl $1, %edi
+ 6270 00
+ 6271 50f6 E8000000 call KDbgCondToFlag at PLT
+ 6271 00
+ 6272 50fb 4889C6 movq %rax, %rsi
+ 6273 50fe BF100000 movl $16, %edi
+ 6273 00
+ 6274 5103 E8000000 call KDbgTestModConds at PLT
+ 6274 00
+ 6275 5108 84C0 testb %al, %al
+ 6276 510a 745E je .L99
+ 6277 510c 8B85ECD8 movl -10004(%rbp), %eax
+ 6277 FFFF
+ 6278 5112 89C7 movl %eax, %edi
+ 6279 5114 E8E7AEFF call bswap_32
+ 6279 FF
+ 6280 5119 4189C5 movl %eax, %r13d
+ 6281 511c 8B85E8D8 movl -10008(%rbp), %eax
+ 6281 FFFF
+ 6282 5122 89C7 movl %eax, %edi
+ 6283 5124 E8D7AEFF call bswap_32
+ 6283 FF
+ 6284 5129 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccjbMjHD.s page 210
+
+
+ 6285 512c 8B85E4D8 movl -10012(%rbp), %eax
+ 6285 FFFF
+ 6286 5132 89C7 movl %eax, %edi
+ 6287 5134 E8C7AEFF call bswap_32
+ 6287 FF
+ 6288 5139 89C3 movl %eax, %ebx
+ 6289 513b 8B85E0D8 movl -10016(%rbp), %eax
+ 6289 FFFF
+ 6290 5141 89C7 movl %eax, %edi
+ 6291 5143 E8B8AEFF call bswap_32
+ 6291 FF
+ 6292 5148 4589E9 movl %r13d, %r9d
+ 6293 514b 4589E0 movl %r12d, %r8d
+ 6294 514e 89D9 movl %ebx, %ecx
+ 6295 5150 89C2 movl %eax, %edx
+ 6296 5152 488D3500 leaq .LC2(%rip), %rsi
+ 6296 000000
+ 6297 5159 488D3D00 leaq .LC1(%rip), %rdi
+ 6297 000000
+ 6298 5160 B8000000 movl $0, %eax
+ 6298 00
+ 6299 5165 E8000000 call KDbgMsg at PLT
+ 6299 00
+ 6300 .L99:
+ 6301 516a 660F6F85 movdqa -10688(%rbp), %xmm0
+ 6301 40D6FFFF
+ 6302 5172 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 6302 A0FEFFFF
+ 6303 517a 660F6F85 movdqa -10672(%rbp), %xmm0
+ 6303 50D6FFFF
+ 6304 5182 F30F7F85 movdqu %xmm0, -368(%rbp)
+ 6304 90FEFFFF
+ 6305 .LBE1337:
+ 6306 .LBB1338:
+ 6307 .LBB1339:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 6308 .loc 2 178 0
+ 6309 518a F30F6F85 movdqu -368(%rbp), %xmm0
+ 6309 90FEFFFF
+ 6310 5192 F30F6F8D movdqu -352(%rbp), %xmm1
+ 6310 A0FEFFFF
+ 6311 519a 660FEFC1 pxor %xmm1, %xmm0
+ 6312 .LBE1339:
+ 6313 .LBE1338:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 6314 .loc 2 1686 0
+ 6315 519e 660F7F85 movdqa %xmm0, -10688(%rbp)
+ 6315 40D6FFFF
+ 6316 .LBB1340:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 6317 .loc 2 1687 0
+ 6318 51a6 660F6F85 movdqa -10688(%rbp), %xmm0
+ 6318 40D6FFFF
+ 6319 51ae F30F7F85 movdqu %xmm0, -10032(%rbp)
+ 6319 D0D8FFFF
+ 6320 51b6 E8000000 call KDbgWriterGet at PLT
+ 6320 00
+
GAS LISTING /tmp/ccjbMjHD.s page 211
+
+
+ 6321 51bb 4885C0 testq %rax, %rax
+ 6322 51be 7479 je .L101
+ 6323 51c0 BF010000 movl $1, %edi
+ 6323 00
+ 6324 51c5 E8000000 call KDbgCondToFlag at PLT
+ 6324 00
+ 6325 51ca 4889C6 movq %rax, %rsi
+ 6326 51cd BF100000 movl $16, %edi
+ 6326 00
+ 6327 51d2 E8000000 call KDbgTestModConds at PLT
+ 6327 00
+ 6328 51d7 84C0 testb %al, %al
+ 6329 51d9 745E je .L101
+ 6330 51db 8B85DCD8 movl -10020(%rbp), %eax
+ 6330 FFFF
+ 6331 51e1 89C7 movl %eax, %edi
+ 6332 51e3 E818AEFF call bswap_32
+ 6332 FF
+ 6333 51e8 4189C5 movl %eax, %r13d
+ 6334 51eb 8B85D8D8 movl -10024(%rbp), %eax
+ 6334 FFFF
+ 6335 51f1 89C7 movl %eax, %edi
+ 6336 51f3 E808AEFF call bswap_32
+ 6336 FF
+ 6337 51f8 4189C4 movl %eax, %r12d
+ 6338 51fb 8B85D4D8 movl -10028(%rbp), %eax
+ 6338 FFFF
+ 6339 5201 89C7 movl %eax, %edi
+ 6340 5203 E8F8ADFF call bswap_32
+ 6340 FF
+ 6341 5208 89C3 movl %eax, %ebx
+ 6342 520a 8B85D0D8 movl -10032(%rbp), %eax
+ 6342 FFFF
+ 6343 5210 89C7 movl %eax, %edi
+ 6344 5212 E8E9ADFF call bswap_32
+ 6344 FF
+ 6345 5217 4589E9 movl %r13d, %r9d
+ 6346 521a 4589E0 movl %r12d, %r8d
+ 6347 521d 89D9 movl %ebx, %ecx
+ 6348 521f 89C2 movl %eax, %edx
+ 6349 5221 488D3500 leaq .LC3(%rip), %rsi
+ 6349 000000
+ 6350 5228 488D3D00 leaq .LC1(%rip), %rdi
+ 6350 000000
+ 6351 522f B8000000 movl $0, %eax
+ 6351 00
+ 6352 5234 E8000000 call KDbgMsg at PLT
+ 6352 00
+ 6353 .L101:
+ 6354 5239 660F6F85 movdqa -10688(%rbp), %xmm0
+ 6354 40D6FFFF
+ 6355 5241 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 6355 B0FEFFFF
+ 6356 5249 F30F6F85 movdqu -336(%rbp), %xmm0
+ 6356 B0FEFFFF
+ 6357 5251 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 6357 D0FEFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 212
+
+
+ 6358 .LBE1340:
+ 6359 .LBB1341:
+ 6360 .LBB1342:
+ 6361 .LBB1343:
+ 6362 .LBB1344:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6363 .loc 3 450 0
+ 6364 5259 F30F6F85 movdqu -304(%rbp), %xmm0
+ 6364 D0FEFFFF
+ 6365 5261 660F70C0 pshufd $255, %xmm0, %xmm0
+ 6365 FF
+ 6366 .LBE1344:
+ 6367 .LBE1343:
+ 6368 .LBE1342:
+ 6369 .LBE1341:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 6370 .loc 2 1688 0
+ 6371 5266 660F7F85 movdqa %xmm0, -10688(%rbp)
+ 6371 40D6FFFF
+ 6372 .LBB1345:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 6373 .loc 2 1689 0
+ 6374 526e 660F6F85 movdqa -10688(%rbp), %xmm0
+ 6374 40D6FFFF
+ 6375 5276 F30F7F85 movdqu %xmm0, -10048(%rbp)
+ 6375 C0D8FFFF
+ 6376 527e E8000000 call KDbgWriterGet at PLT
+ 6376 00
+ 6377 5283 4885C0 testq %rax, %rax
+ 6378 5286 7479 je .L103
+ 6379 5288 BF010000 movl $1, %edi
+ 6379 00
+ 6380 528d E8000000 call KDbgCondToFlag at PLT
+ 6380 00
+ 6381 5292 4889C6 movq %rax, %rsi
+ 6382 5295 BF100000 movl $16, %edi
+ 6382 00
+ 6383 529a E8000000 call KDbgTestModConds at PLT
+ 6383 00
+ 6384 529f 84C0 testb %al, %al
+ 6385 52a1 745E je .L103
+ 6386 52a3 8B85CCD8 movl -10036(%rbp), %eax
+ 6386 FFFF
+ 6387 52a9 89C7 movl %eax, %edi
+ 6388 52ab E850ADFF call bswap_32
+ 6388 FF
+ 6389 52b0 4189C5 movl %eax, %r13d
+ 6390 52b3 8B85C8D8 movl -10040(%rbp), %eax
+ 6390 FFFF
+ 6391 52b9 89C7 movl %eax, %edi
+ 6392 52bb E840ADFF call bswap_32
+ 6392 FF
+ 6393 52c0 4189C4 movl %eax, %r12d
+ 6394 52c3 8B85C4D8 movl -10044(%rbp), %eax
+ 6394 FFFF
+ 6395 52c9 89C7 movl %eax, %edi
+ 6396 52cb E830ADFF call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 213
+
+
+ 6396 FF
+ 6397 52d0 89C3 movl %eax, %ebx
+ 6398 52d2 8B85C0D8 movl -10048(%rbp), %eax
+ 6398 FFFF
+ 6399 52d8 89C7 movl %eax, %edi
+ 6400 52da E821ADFF call bswap_32
+ 6400 FF
+ 6401 52df 4589E9 movl %r13d, %r9d
+ 6402 52e2 4589E0 movl %r12d, %r8d
+ 6403 52e5 89D9 movl %ebx, %ecx
+ 6404 52e7 89C2 movl %eax, %edx
+ 6405 52e9 488D3500 leaq .LC4(%rip), %rsi
+ 6405 000000
+ 6406 52f0 488D3D00 leaq .LC1(%rip), %rdi
+ 6406 000000
+ 6407 52f7 B8000000 movl $0, %eax
+ 6407 00
+ 6408 52fc E8000000 call KDbgMsg at PLT
+ 6408 00
+ 6409 .L103:
+ 6410 .LBE1345:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 6411 .loc 2 1690 0
+ 6412 5301 660F6F85 movdqa -10688(%rbp), %xmm0
+ 6412 40D6FFFF
+ 6413 .LBE1299:
+ 6414 .LBE1298:
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE128(0x36,10);
+ 6415 .loc 2 1753 0
+ 6416 5309 F30F7F85 movdqu %xmm0, -9968(%rbp)
+ 6416 10D9FFFF
+ 6417 5311 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 6417 00D9FFFF
+ 6418 5319 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 6418 E0FEFFFF
+ 6419 .LBB1346:
+ 6420 .LBB1347:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6421 .loc 2 1565 0
+ 6422 5321 F30F6F85 movdqu -288(%rbp), %xmm0
+ 6422 E0FEFFFF
+ 6423 5329 660F7F85 movdqa %xmm0, -10656(%rbp)
+ 6423 60D6FFFF
+ 6424 5331 660F6F85 movdqa -10656(%rbp), %xmm0
+ 6424 60D6FFFF
+ 6425 5339 F30F7F85 movdqu %xmm0, -272(%rbp)
+ 6425 F0FEFFFF
+ 6426 .LBB1348:
+ 6427 .LBB1349:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6428 .loc 2 1278 0
+ 6429 5341 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 6429 00000000
+ 6430 5349 F30F6F8D movdqu -272(%rbp), %xmm1
+ 6430 F0FEFFFF
+ 6431 5351 F30F7F8D movdqu %xmm1, -240(%rbp)
+ 6431 10FFFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 214
+
+
+ 6432 5359 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 6432 00FFFFFF
+ 6433 5361 F30F6F85 movdqu -240(%rbp), %xmm0
+ 6433 10FFFFFF
+ 6434 5369 F30F7F85 movdqu %xmm0, -208(%rbp)
+ 6434 30FFFFFF
+ 6435 5371 F30F6F85 movdqu -256(%rbp), %xmm0
+ 6435 00FFFFFF
+ 6436 5379 F30F7F85 movdqu %xmm0, -224(%rbp)
+ 6436 20FFFFFF
+ 6437 .LBB1350:
+ 6438 .LBB1351:
+ 6439 .LBB1352:
+ 6440 .LBB1353:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6441 .loc 3 529 0
+ 6442 5381 F30F6F8D movdqu -224(%rbp), %xmm1
+ 6442 20FFFFFF
+ 6443 5389 F30F6F85 movdqu -208(%rbp), %xmm0
+ 6443 30FFFFFF
+ 6444 5391 660F3800 pshufb %xmm1, %xmm0
+ 6444 C1
+ 6445 .LBE1353:
+ 6446 .LBE1352:
+ 6447 .LBE1351:
+ 6448 .LBE1350:
+ 6449 .LBE1349:
+ 6450 .LBE1348:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6451 .loc 2 1567 0
+ 6452 5396 660F7F85 movdqa %xmm0, -10656(%rbp)
+ 6452 60D6FFFF
+ 6453 539e 660F6F85 movdqa -10656(%rbp), %xmm0
+ 6453 60D6FFFF
+ 6454 53a6 660FEF85 pxor -288(%rbp), %xmm0
+ 6454 E0FEFFFF
+ 6455 53ae F30F7F85 movdqu %xmm0, -288(%rbp)
+ 6455 E0FEFFFF
+ 6456 53b6 660F6F85 movdqa -10656(%rbp), %xmm0
+ 6456 60D6FFFF
+ 6457 53be F30F7F85 movdqu %xmm0, -192(%rbp)
+ 6457 40FFFFFF
+ 6458 .LBB1354:
+ 6459 .LBB1355:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6460 .loc 2 1278 0
+ 6461 53c6 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 6461 00000000
+ 6462 53ce F30F6F8D movdqu -192(%rbp), %xmm1
+ 6462 40FFFFFF
+ 6463 53d6 F30F7F8D movdqu %xmm1, -160(%rbp)
+ 6463 60FFFFFF
+ 6464 53de F30F7F85 movdqu %xmm0, -176(%rbp)
+ 6464 50FFFFFF
+ 6465 53e6 F30F6F85 movdqu -160(%rbp), %xmm0
+ 6465 60FFFFFF
+ 6466 53ee F30F7F45 movdqu %xmm0, -128(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 215
+
+
+ 6466 80
+ 6467 53f3 F30F6F85 movdqu -176(%rbp), %xmm0
+ 6467 50FFFFFF
+ 6468 53fb F30F7F85 movdqu %xmm0, -144(%rbp)
+ 6468 70FFFFFF
+ 6469 .LBB1356:
+ 6470 .LBB1357:
+ 6471 .LBB1358:
+ 6472 .LBB1359:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6473 .loc 3 529 0
+ 6474 5403 F30F6F8D movdqu -144(%rbp), %xmm1
+ 6474 70FFFFFF
+ 6475 540b F30F6F45 movdqu -128(%rbp), %xmm0
+ 6475 80
+ 6476 5410 660F3800 pshufb %xmm1, %xmm0
+ 6476 C1
+ 6477 .LBE1359:
+ 6478 .LBE1358:
+ 6479 .LBE1357:
+ 6480 .LBE1356:
+ 6481 .LBE1355:
+ 6482 .LBE1354:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6483 .loc 2 1568 0
+ 6484 5415 660F7F85 movdqa %xmm0, -10656(%rbp)
+ 6484 60D6FFFF
+ 6485 541d 660F6F85 movdqa -10656(%rbp), %xmm0
+ 6485 60D6FFFF
+ 6486 5425 660FEF85 pxor -288(%rbp), %xmm0
+ 6486 E0FEFFFF
+ 6487 542d F30F7F85 movdqu %xmm0, -288(%rbp)
+ 6487 E0FEFFFF
+ 6488 5435 660F6F85 movdqa -10656(%rbp), %xmm0
+ 6488 60D6FFFF
+ 6489 543d F30F7F45 movdqu %xmm0, -112(%rbp)
+ 6489 90
+ 6490 .LBB1360:
+ 6491 .LBB1361:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6492 .loc 2 1278 0
+ 6493 5442 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 6493 00000000
+ 6494 544a F30F6F4D movdqu -112(%rbp), %xmm1
+ 6494 90
+ 6495 544f F30F7F4D movdqu %xmm1, -80(%rbp)
+ 6495 B0
+ 6496 5454 F30F7F45 movdqu %xmm0, -96(%rbp)
+ 6496 A0
+ 6497 5459 F30F6F45 movdqu -80(%rbp), %xmm0
+ 6497 B0
+ 6498 545e F30F7F45 movdqu %xmm0, -48(%rbp)
+ 6498 D0
+ 6499 5463 F30F6F45 movdqu -96(%rbp), %xmm0
+ 6499 A0
+ 6500 5468 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 6500 C0
+
GAS LISTING /tmp/ccjbMjHD.s page 216
+
+
+ 6501 .LBB1362:
+ 6502 .LBB1363:
+ 6503 .LBB1364:
+ 6504 .LBB1365:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6505 .loc 3 529 0
+ 6506 546d F30F6F4D movdqu -64(%rbp), %xmm1
+ 6506 C0
+ 6507 5472 F30F6F45 movdqu -48(%rbp), %xmm0
+ 6507 D0
+ 6508 5477 660F3800 pshufb %xmm1, %xmm0
+ 6508 C1
+ 6509 .LBE1365:
+ 6510 .LBE1364:
+ 6511 .LBE1363:
+ 6512 .LBE1362:
+ 6513 .LBE1361:
+ 6514 .LBE1360:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6515 .loc 2 1569 0
+ 6516 547c 660F7F85 movdqa %xmm0, -10656(%rbp)
+ 6516 60D6FFFF
+ 6517 5484 660F6F85 movdqa -10656(%rbp), %xmm0
+ 6517 60D6FFFF
+ 6518 548c 660FEF85 pxor -288(%rbp), %xmm0
+ 6518 E0FEFFFF
+ 6519 5494 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 6519 E0FEFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6520 .loc 2 1571 0
+ 6521 549c F30F6F85 movdqu -288(%rbp), %xmm0
+ 6521 E0FEFFFF
+ 6522 .LBE1347:
+ 6523 .LBE1346:
+ 6524 .loc 2 1753 0
+ 6525 54a4 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 6525 00D9FFFF
+ 6526 54ac F30F6F85 movdqu -9968(%rbp), %xmm0
+ 6526 10D9FFFF
+ 6527 54b4 F30F6F8D movdqu -9984(%rbp), %xmm1
+ 6527 00D9FFFF
+ 6528 54bc 660FEFC1 pxor %xmm1, %xmm0
+ 6529 54c0 F30F7F85 movdqu %xmm0, -9984(%rbp)
+ 6529 00D9FFFF
+ 6530 54c8 488B8578 movq -10632(%rbp), %rax
+ 6530 D6FFFF
+ 6531 54cf 4805A000 addq $160, %rax
+ 6531 0000
+ 6532 54d5 F30F6F85 movdqu -9984(%rbp), %xmm0
+ 6532 00D9FFFF
+ 6533 54dd F30F7F00 movdqu %xmm0, (%rax)
+1754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 6534 .loc 2 1754 0
+ 6535 54e1 4881C468 addq $11112, %rsp
+ 6535 2B0000
+ 6536 54e8 5B popq %rbx
+ 6537 54e9 415C popq %r12
+
GAS LISTING /tmp/ccjbMjHD.s page 217
+
+
+ 6538 54eb 415D popq %r13
+ 6539 54ed C9 leave
+ 6540 54ee C3 ret
+ 6541 .cfi_endproc
+ 6542 .LFE645:
+ 6543 .size KAESBlockCipherVecRegKeyExpansion128, .-KAESBlockCipherVecRegKeyExpansion128
+ 6544 .type KAESBlockCipherVecRegKeyExpansion192, @function
+ 6545 KAESBlockCipherVecRegKeyExpansion192:
+ 6546 .LFB646:
+1755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * w, const AESByte * key)
+1758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** OUTMSG(("\n\n\n%s: Not my code\n\n\n",__func__));
+1760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_128, AES_Nk_128);
+1761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * round_keys, const AESByte * key)
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 6547 .loc 2 1768 0
+ 6548 .cfi_startproc
+ 6549 54ef 55 pushq %rbp
+ 6550 .LCFI4:
+ 6551 .cfi_def_cfa_offset 16
+ 6552 54f0 4889E5 movq %rsp, %rbp
+ 6553 .cfi_offset 6, -16
+ 6554 .LCFI5:
+ 6555 .cfi_def_cfa_register 6
+ 6556 54f3 4155 pushq %r13
+ 6557 54f5 4154 pushq %r12
+ 6558 54f7 53 pushq %rbx
+ 6559 54f8 4881EC38 subq $9016, %rsp
+ 6559 230000
+ 6560 54ff 4889BDA8 movq %rdi, -8536(%rbp)
+ 6560 DEFFFF
+ 6561 5506 4889B5A0 movq %rsi, -8544(%rbp)
+ 6561 DEFFFF
+ 6562 .loc 2 1768 0
+ 6563 550d 488B85A0 movq -8544(%rbp), %rax
+ 6563 DEFFFF
+ 6564 5514 48898530 movq %rax, -8144(%rbp)
+ 6564 E0FFFF
+ 6565 .LBB1952:
+ 6566 .LBB1953:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 6567 .loc 2 126 0
+ 6568 551b 488B8530 movq -8144(%rbp), %rax
+ 6568 E0FFFF
+ 6569 5522 4889C7 movq %rax, %rdi
+ 6570 #APP
+ 6571 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 6572 movdqu (%rdi),%xmm0
+ 6573 # 0 "" 2
+
GAS LISTING /tmp/ccjbMjHD.s page 218
+
+
+ 6574 #NO_APP
+ 6575 5529 660F7F85 movdqa %xmm0, -8944(%rbp)
+ 6575 10DDFFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 6576 .loc 2 129 0
+ 6577 5531 660F6F85 movdqa -8944(%rbp), %xmm0
+ 6577 10DDFFFF
+ 6578 .LBE1953:
+ 6579 .LBE1952:
+1769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* work on three blocks at a time which is two Nr worth
+1770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * we'll build it with 6 words in v0:v1 and 6 words in w0:w1
+1771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but move them them into v0:v1:v2 before writing them to
+1772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the key schedule
+1773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec v0, v1, v2, v3, v4;
+1776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec k; /* we'll only need one of the key gen assist blocks at a time */
+1777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 0 */
+1779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(StateIn) (key); /* k0 : k1 : k2 : k3 */
+ 6580 .loc 2 1779 0
+ 6581 5539 660F7F85 movdqa %xmm0, -9040(%rbp)
+ 6581 B0DCFFFF
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateIn) (key+8); /* k2 : k3 : k4 : k5 */
+ 6582 .loc 2 1780 0
+ 6583 5541 488B85A0 movq -8544(%rbp), %rax
+ 6583 DEFFFF
+ 6584 5548 4883C008 addq $8, %rax
+ 6585 554c 48898538 movq %rax, -8136(%rbp)
+ 6585 E0FFFF
+ 6586 .LBB1954:
+ 6587 .LBB1955:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 6588 .loc 2 126 0
+ 6589 5553 488B8538 movq -8136(%rbp), %rax
+ 6589 E0FFFF
+ 6590 555a 4889C7 movq %rax, %rdi
+ 6591 #APP
+ 6592 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 6593 movdqu (%rdi),%xmm0
+ 6594 # 0 "" 2
+ 6595 #NO_APP
+ 6596 5561 660F7F85 movdqa %xmm0, -8928(%rbp)
+ 6596 20DDFFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 6597 .loc 2 129 0
+ 6598 5569 660F6F85 movdqa -8928(%rbp), %xmm0
+ 6598 20DDFFFF
+ 6599 .LBE1955:
+ 6600 .LBE1954:
+ 6601 .loc 2 1780 0
+ 6602 5571 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 6602 C0DCFFFF
+ 6603 5579 660F6F95 movdqa -9024(%rbp), %xmm2
+ 6603 C0DCFFFF
+ 6604 5581 F30F7F95 movdqu %xmm2, -8128(%rbp)
+ 6604 40E0FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 219
+
+
+ 6605 .LBB1956:
+ 6606 .LBB1957:
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6607 .loc 2 1301 0
+ 6608 5589 660F6F05 movdqa mask.7952(%rip), %xmm0
+ 6608 00000000
+ 6609 5591 F30F6F8D movdqu -8128(%rbp), %xmm1
+ 6609 40E0FFFF
+ 6610 5599 F30F7F8D movdqu %xmm1, -8096(%rbp)
+ 6610 60E0FFFF
+ 6611 55a1 F30F7F85 movdqu %xmm0, -8112(%rbp)
+ 6611 50E0FFFF
+ 6612 55a9 F30F6F85 movdqu -8096(%rbp), %xmm0
+ 6612 60E0FFFF
+ 6613 55b1 F30F7F85 movdqu %xmm0, -8064(%rbp)
+ 6613 80E0FFFF
+ 6614 55b9 F30F6F85 movdqu -8112(%rbp), %xmm0
+ 6614 50E0FFFF
+ 6615 55c1 F30F7F85 movdqu %xmm0, -8080(%rbp)
+ 6615 70E0FFFF
+ 6616 .LBB1958:
+ 6617 .LBB1959:
+ 6618 .LBB1960:
+ 6619 .LBB1961:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6620 .loc 3 529 0
+ 6621 55c9 F30F6F8D movdqu -8080(%rbp), %xmm1
+ 6621 70E0FFFF
+ 6622 55d1 F30F6F85 movdqu -8064(%rbp), %xmm0
+ 6622 80E0FFFF
+ 6623 55d9 660F3800 pshufb %xmm1, %xmm0
+ 6623 C1
+ 6624 .LBE1961:
+ 6625 .LBE1960:
+ 6626 .LBE1959:
+ 6627 .LBE1958:
+ 6628 .LBE1957:
+ 6629 .LBE1956:
+1781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateShiftRight64) (v1); /* k4 : k5 : 0 : 0 */
+ 6630 .loc 2 1781 0
+ 6631 55de 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 6631 C0DCFFFF
+1782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = v0; /* K0:K1:K2:K3 */
+ 6632 .loc 2 1783 0
+ 6633 55e6 488B85A8 movq -8536(%rbp), %rax
+ 6633 DEFFFF
+ 6634 55ed 660F6F85 movdqa -9040(%rbp), %xmm0
+ 6634 B0DCFFFF
+ 6635 55f5 660F7F00 movdqa %xmm0, (%rax)
+1784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 6636 .loc 2 1788 0
+ 6637 55f9 660F6F95 movdqa -9024(%rbp), %xmm2
+
GAS LISTING /tmp/ccjbMjHD.s page 220
+
+
+ 6637 C0DCFFFF
+ 6638 5601 660F7F95 movdqa %xmm2, -8960(%rbp)
+ 6638 00DDFFFF
+ 6639 5609 660F6F85 movdqa -8960(%rbp), %xmm0
+ 6639 00DDFFFF
+ 6640 5611 F30F7F85 movdqu %xmm0, -8032(%rbp)
+ 6640 A0E0FFFF
+ 6641 .LBB1962:
+ 6642 .LBB1963:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+ 6643 .loc 2 1629 0
+ 6644 5619 B8010000 movl $1, %eax
+ 6644 00
+ 6645 561e 0FB6C0 movzbl %al, %eax
+ 6646 5621 8985C0E0 movl %eax, -8000(%rbp)
+ 6646 FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 6647 .loc 2 1630 0
+ 6648 5627 F30F6F85 movdqu -8032(%rbp), %xmm0
+ 6648 A0E0FFFF
+ 6649 562f F30F7F85 movdqu %xmm0, -8512(%rbp)
+ 6649 C0DEFFFF
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 6650 .loc 2 1631 0
+ 6651 5637 8B85C4DE movl -8508(%rbp), %eax
+ 6651 FFFF
+ 6652 563d 8985C4E0 movl %eax, -7996(%rbp)
+ 6652 FFFF
+ 6653 .LBB1964:
+ 6654 .LBB1965:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 6655 .loc 2 740 0
+ 6656 5643 8B85C4E0 movl -7996(%rbp), %eax
+ 6656 FFFF
+ 6657 5649 8985B0DE movl %eax, -8528(%rbp)
+ 6657 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 6658 .loc 2 741 0
+ 6659 564f C785C8E0 movl $0, -7992(%rbp)
+ 6659 FFFF0000
+ 6659 0000
+ 6660 5659 EB36 jmp .L106
+ 6661 .cfi_offset 3, -40
+ 6662 .cfi_offset 12, -32
+ 6663 .cfi_offset 13, -24
+ 6664 .L107:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 6665 .loc 2 742 0
+ 6666 565b 8B8DC8E0 movl -7992(%rbp), %ecx
+ 6666 FFFF
+ 6667 5661 8B85C8E0 movl -7992(%rbp), %eax
+ 6667 FFFF
+ 6668 5667 89C0 mov %eax, %eax
+ 6669 5669 0FB68405 movzbl -8528(%rbp,%rax), %eax
+ 6669 B0DEFFFF
+ 6670 5671 0FB6C0 movzbl %al, %eax
+ 6671 5674 89C2 mov %eax, %edx
+
GAS LISTING /tmp/ccjbMjHD.s page 221
+
+
+ 6672 5676 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 6672 000000
+ 6673 567d 0FB61402 movzbl (%rdx,%rax), %edx
+ 6674 5681 89C8 mov %ecx, %eax
+ 6675 5683 889405B0 movb %dl, -8528(%rbp,%rax)
+ 6675 DEFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 6676 .loc 2 741 0
+ 6677 568a 8385C8E0 addl $1, -7992(%rbp)
+ 6677 FFFF01
+ 6678 .L106:
+ 6679 5691 83BDC8E0 cmpl $3, -7992(%rbp)
+ 6679 FFFF03
+ 6680 5698 76C1 jbe .L107
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 6681 .loc 2 743 0
+ 6682 569a 8B85B0DE movl -8528(%rbp), %eax
+ 6682 FFFF
+ 6683 .LBE1965:
+ 6684 .LBE1964:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 6685 .loc 2 1631 0
+ 6686 56a0 8985BCE0 movl %eax, -8004(%rbp)
+ 6686 FFFF
+ 6687 56a6 8B85BCE0 movl -8004(%rbp), %eax
+ 6687 FFFF
+ 6688 56ac 8985CCE0 movl %eax, -7988(%rbp)
+ 6688 FFFF
+ 6689 .LBB1966:
+ 6690 .LBB1967:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+ 6691 .loc 2 1196 0
+ 6692 56b2 8B85CCE0 movl -7988(%rbp), %eax
+ 6692 FFFF
+ 6693 56b8 C1C808 rorl $8, %eax
+ 6694 .LBE1967:
+ 6695 .LBE1966:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+ 6696 .loc 2 1632 0
+ 6697 56bb 8985BCE0 movl %eax, -8004(%rbp)
+ 6697 FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+ 6698 .loc 2 1633 0
+ 6699 56c1 8B85C0E0 movl -8000(%rbp), %eax
+ 6699 FFFF
+ 6700 56c7 3185BCE0 xorl %eax, -8004(%rbp)
+ 6700 FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 6701 .loc 2 1635 0
+ 6702 56cd 8B85BCE0 movl -8004(%rbp), %eax
+ 6702 FFFF
+ 6703 56d3 8985CCDE movl %eax, -8500(%rbp)
+ 6703 FFFF
+ 6704 56d9 8B85CCDE movl -8500(%rbp), %eax
+ 6704 FFFF
+ 6705 56df 8985C8DE movl %eax, -8504(%rbp)
+ 6705 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 222
+
+
+ 6706 56e5 8B85C8DE movl -8504(%rbp), %eax
+ 6706 FFFF
+ 6707 56eb 8985C4DE movl %eax, -8508(%rbp)
+ 6707 FFFF
+ 6708 56f1 8B85C4DE movl -8508(%rbp), %eax
+ 6708 FFFF
+ 6709 56f7 8985C0DE movl %eax, -8512(%rbp)
+ 6709 FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 6710 .loc 2 1636 0
+ 6711 56fd F30F6F85 movdqu -8512(%rbp), %xmm0
+ 6711 C0DEFFFF
+ 6712 .LBE1963:
+ 6713 .LBE1962:
+ 6714 .loc 2 1788 0
+ 6715 5705 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 6715 00DDFFFF
+ 6716 570d 660F6F95 movdqa -9040(%rbp), %xmm2
+ 6716 B0DCFFFF
+ 6717 5715 F30F7F95 movdqu %xmm2, -7984(%rbp)
+ 6717 D0E0FFFF
+ 6718 .LBB1968:
+ 6719 .LBB1969:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6720 .loc 2 1565 0
+ 6721 571d F30F6F85 movdqu -7984(%rbp), %xmm0
+ 6721 D0E0FFFF
+ 6722 5725 660F7F85 movdqa %xmm0, -8912(%rbp)
+ 6722 30DDFFFF
+ 6723 572d 660F6F95 movdqa -8912(%rbp), %xmm2
+ 6723 30DDFFFF
+ 6724 5735 F30F7F95 movdqu %xmm2, -7968(%rbp)
+ 6724 E0E0FFFF
+ 6725 .LBB1970:
+ 6726 .LBB1971:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6727 .loc 2 1278 0
+ 6728 573d 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 6728 00000000
+ 6729 5745 F30F6F8D movdqu -7968(%rbp), %xmm1
+ 6729 E0E0FFFF
+ 6730 574d F30F7F8D movdqu %xmm1, -7936(%rbp)
+ 6730 00E1FFFF
+ 6731 5755 F30F7F85 movdqu %xmm0, -7952(%rbp)
+ 6731 F0E0FFFF
+ 6732 575d F30F6F85 movdqu -7936(%rbp), %xmm0
+ 6732 00E1FFFF
+ 6733 5765 F30F7F85 movdqu %xmm0, -7904(%rbp)
+ 6733 20E1FFFF
+ 6734 576d F30F6F85 movdqu -7952(%rbp), %xmm0
+ 6734 F0E0FFFF
+ 6735 5775 F30F7F85 movdqu %xmm0, -7920(%rbp)
+ 6735 10E1FFFF
+ 6736 .LBB1972:
+ 6737 .LBB1973:
+ 6738 .LBB1974:
+ 6739 .LBB1975:
+
GAS LISTING /tmp/ccjbMjHD.s page 223
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6740 .loc 3 529 0
+ 6741 577d F30F6F8D movdqu -7920(%rbp), %xmm1
+ 6741 10E1FFFF
+ 6742 5785 F30F6F85 movdqu -7904(%rbp), %xmm0
+ 6742 20E1FFFF
+ 6743 578d 660F3800 pshufb %xmm1, %xmm0
+ 6743 C1
+ 6744 .LBE1975:
+ 6745 .LBE1974:
+ 6746 .LBE1973:
+ 6747 .LBE1972:
+ 6748 .LBE1971:
+ 6749 .LBE1970:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6750 .loc 2 1567 0
+ 6751 5792 660F7F85 movdqa %xmm0, -8912(%rbp)
+ 6751 30DDFFFF
+ 6752 579a 660F6F85 movdqa -8912(%rbp), %xmm0
+ 6752 30DDFFFF
+ 6753 57a2 660FEF85 pxor -7984(%rbp), %xmm0
+ 6753 D0E0FFFF
+ 6754 57aa F30F7F85 movdqu %xmm0, -7984(%rbp)
+ 6754 D0E0FFFF
+ 6755 57b2 660F6F85 movdqa -8912(%rbp), %xmm0
+ 6755 30DDFFFF
+ 6756 57ba F30F7F85 movdqu %xmm0, -7888(%rbp)
+ 6756 30E1FFFF
+ 6757 .LBB1976:
+ 6758 .LBB1977:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6759 .loc 2 1278 0
+ 6760 57c2 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 6760 00000000
+ 6761 57ca F30F6F8D movdqu -7888(%rbp), %xmm1
+ 6761 30E1FFFF
+ 6762 57d2 F30F7F8D movdqu %xmm1, -7856(%rbp)
+ 6762 50E1FFFF
+ 6763 57da F30F7F85 movdqu %xmm0, -7872(%rbp)
+ 6763 40E1FFFF
+ 6764 57e2 F30F6F85 movdqu -7856(%rbp), %xmm0
+ 6764 50E1FFFF
+ 6765 57ea F30F7F85 movdqu %xmm0, -7824(%rbp)
+ 6765 70E1FFFF
+ 6766 57f2 F30F6F85 movdqu -7872(%rbp), %xmm0
+ 6766 40E1FFFF
+ 6767 57fa F30F7F85 movdqu %xmm0, -7840(%rbp)
+ 6767 60E1FFFF
+ 6768 .LBB1978:
+ 6769 .LBB1979:
+ 6770 .LBB1980:
+ 6771 .LBB1981:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6772 .loc 3 529 0
+ 6773 5802 F30F6F8D movdqu -7840(%rbp), %xmm1
+ 6773 60E1FFFF
+ 6774 580a F30F6F85 movdqu -7824(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 224
+
+
+ 6774 70E1FFFF
+ 6775 5812 660F3800 pshufb %xmm1, %xmm0
+ 6775 C1
+ 6776 .LBE1981:
+ 6777 .LBE1980:
+ 6778 .LBE1979:
+ 6779 .LBE1978:
+ 6780 .LBE1977:
+ 6781 .LBE1976:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6782 .loc 2 1568 0
+ 6783 5817 660F7F85 movdqa %xmm0, -8912(%rbp)
+ 6783 30DDFFFF
+ 6784 581f 660F6F85 movdqa -8912(%rbp), %xmm0
+ 6784 30DDFFFF
+ 6785 5827 660FEF85 pxor -7984(%rbp), %xmm0
+ 6785 D0E0FFFF
+ 6786 582f F30F7F85 movdqu %xmm0, -7984(%rbp)
+ 6786 D0E0FFFF
+ 6787 5837 660F6F95 movdqa -8912(%rbp), %xmm2
+ 6787 30DDFFFF
+ 6788 583f F30F7F95 movdqu %xmm2, -7808(%rbp)
+ 6788 80E1FFFF
+ 6789 .LBB1982:
+ 6790 .LBB1983:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6791 .loc 2 1278 0
+ 6792 5847 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 6792 00000000
+ 6793 584f F30F6F8D movdqu -7808(%rbp), %xmm1
+ 6793 80E1FFFF
+ 6794 5857 F30F7F8D movdqu %xmm1, -7776(%rbp)
+ 6794 A0E1FFFF
+ 6795 585f F30F7F85 movdqu %xmm0, -7792(%rbp)
+ 6795 90E1FFFF
+ 6796 5867 F30F6F85 movdqu -7776(%rbp), %xmm0
+ 6796 A0E1FFFF
+ 6797 586f F30F7F85 movdqu %xmm0, -7744(%rbp)
+ 6797 C0E1FFFF
+ 6798 5877 F30F6F85 movdqu -7792(%rbp), %xmm0
+ 6798 90E1FFFF
+ 6799 587f F30F7F85 movdqu %xmm0, -7760(%rbp)
+ 6799 B0E1FFFF
+ 6800 .LBB1984:
+ 6801 .LBB1985:
+ 6802 .LBB1986:
+ 6803 .LBB1987:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6804 .loc 3 529 0
+ 6805 5887 F30F6F8D movdqu -7760(%rbp), %xmm1
+ 6805 B0E1FFFF
+ 6806 588f F30F6F85 movdqu -7744(%rbp), %xmm0
+ 6806 C0E1FFFF
+ 6807 5897 660F3800 pshufb %xmm1, %xmm0
+ 6807 C1
+ 6808 .LBE1987:
+ 6809 .LBE1986:
+
GAS LISTING /tmp/ccjbMjHD.s page 225
+
+
+ 6810 .LBE1985:
+ 6811 .LBE1984:
+ 6812 .LBE1983:
+ 6813 .LBE1982:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6814 .loc 2 1569 0
+ 6815 589c 660F7F85 movdqa %xmm0, -8912(%rbp)
+ 6815 30DDFFFF
+ 6816 58a4 660F6F85 movdqa -8912(%rbp), %xmm0
+ 6816 30DDFFFF
+ 6817 58ac 660FEF85 pxor -7984(%rbp), %xmm0
+ 6817 D0E0FFFF
+ 6818 58b4 F30F7F85 movdqu %xmm0, -7984(%rbp)
+ 6818 D0E0FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6819 .loc 2 1571 0
+ 6820 58bc F30F6F85 movdqu -7984(%rbp), %xmm0
+ 6820 D0E0FFFF
+ 6821 .LBE1969:
+ 6822 .LBE1968:
+1789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1, 0x01); /* F(k5) : F(k5) : F(k5) : F(k5) */
+1790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k0 : k0^k1 :k0^k1^k2:k0^k1^k2^k3 */
+ 6823 .loc 2 1790 0
+ 6824 58c4 660F7F85 movdqa %xmm0, -8992(%rbp)
+ 6824 E0DCFFFF
+1791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k6 : k7 : k8 : k9 */
+ 6825 .loc 2 1791 0
+ 6826 58cc 660F6F85 movdqa -8992(%rbp), %xmm0
+ 6826 E0DCFFFF
+ 6827 58d4 660FEF85 pxor -8960(%rbp), %xmm0
+ 6827 00DDFFFF
+ 6828 58dc 660F7F85 movdqa %xmm0, -8992(%rbp)
+ 6828 E0DCFFFF
+ 6829 58e4 660F6F95 movdqa -9024(%rbp), %xmm2
+ 6829 C0DCFFFF
+ 6830 58ec F30F7F95 movdqu %xmm2, -7728(%rbp)
+ 6830 D0E1FFFF
+ 6831 .LBB1988:
+ 6832 .LBB1989:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 6833 .loc 2 1565 0
+ 6834 58f4 F30F6F85 movdqu -7728(%rbp), %xmm0
+ 6834 D0E1FFFF
+ 6835 58fc 660F7F85 movdqa %xmm0, -8896(%rbp)
+ 6835 40DDFFFF
+ 6836 5904 660F6F95 movdqa -8896(%rbp), %xmm2
+ 6836 40DDFFFF
+ 6837 590c F30F7F95 movdqu %xmm2, -7712(%rbp)
+ 6837 E0E1FFFF
+ 6838 .LBB1990:
+ 6839 .LBB1991:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6840 .loc 2 1278 0
+ 6841 5914 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 6841 00000000
+ 6842 591c F30F6F8D movdqu -7712(%rbp), %xmm1
+ 6842 E0E1FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 226
+
+
+ 6843 5924 F30F7F8D movdqu %xmm1, -7680(%rbp)
+ 6843 00E2FFFF
+ 6844 592c F30F7F85 movdqu %xmm0, -7696(%rbp)
+ 6844 F0E1FFFF
+ 6845 5934 F30F6F85 movdqu -7680(%rbp), %xmm0
+ 6845 00E2FFFF
+ 6846 593c F30F7F85 movdqu %xmm0, -7648(%rbp)
+ 6846 20E2FFFF
+ 6847 5944 F30F6F85 movdqu -7696(%rbp), %xmm0
+ 6847 F0E1FFFF
+ 6848 594c F30F7F85 movdqu %xmm0, -7664(%rbp)
+ 6848 10E2FFFF
+ 6849 .LBB1992:
+ 6850 .LBB1993:
+ 6851 .LBB1994:
+ 6852 .LBB1995:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6853 .loc 3 529 0
+ 6854 5954 F30F6F8D movdqu -7664(%rbp), %xmm1
+ 6854 10E2FFFF
+ 6855 595c F30F6F85 movdqu -7648(%rbp), %xmm0
+ 6855 20E2FFFF
+ 6856 5964 660F3800 pshufb %xmm1, %xmm0
+ 6856 C1
+ 6857 .LBE1995:
+ 6858 .LBE1994:
+ 6859 .LBE1993:
+ 6860 .LBE1992:
+ 6861 .LBE1991:
+ 6862 .LBE1990:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6863 .loc 2 1567 0
+ 6864 5969 660F7F85 movdqa %xmm0, -8896(%rbp)
+ 6864 40DDFFFF
+ 6865 5971 660F6F85 movdqa -8896(%rbp), %xmm0
+ 6865 40DDFFFF
+ 6866 5979 660FEF85 pxor -7728(%rbp), %xmm0
+ 6866 D0E1FFFF
+ 6867 5981 F30F7F85 movdqu %xmm0, -7728(%rbp)
+ 6867 D0E1FFFF
+ 6868 5989 660F6F85 movdqa -8896(%rbp), %xmm0
+ 6868 40DDFFFF
+ 6869 5991 F30F7F85 movdqu %xmm0, -7632(%rbp)
+ 6869 30E2FFFF
+ 6870 .LBB1996:
+ 6871 .LBB1997:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6872 .loc 2 1278 0
+ 6873 5999 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 6873 00000000
+ 6874 59a1 F30F6F8D movdqu -7632(%rbp), %xmm1
+ 6874 30E2FFFF
+ 6875 59a9 F30F7F8D movdqu %xmm1, -7600(%rbp)
+ 6875 50E2FFFF
+ 6876 59b1 F30F7F85 movdqu %xmm0, -7616(%rbp)
+ 6876 40E2FFFF
+ 6877 59b9 F30F6F85 movdqu -7600(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 227
+
+
+ 6877 50E2FFFF
+ 6878 59c1 F30F7F85 movdqu %xmm0, -7568(%rbp)
+ 6878 70E2FFFF
+ 6879 59c9 F30F6F85 movdqu -7616(%rbp), %xmm0
+ 6879 40E2FFFF
+ 6880 59d1 F30F7F85 movdqu %xmm0, -7584(%rbp)
+ 6880 60E2FFFF
+ 6881 .LBB1998:
+ 6882 .LBB1999:
+ 6883 .LBB2000:
+ 6884 .LBB2001:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6885 .loc 3 529 0
+ 6886 59d9 F30F6F8D movdqu -7584(%rbp), %xmm1
+ 6886 60E2FFFF
+ 6887 59e1 F30F6F85 movdqu -7568(%rbp), %xmm0
+ 6887 70E2FFFF
+ 6888 59e9 660F3800 pshufb %xmm1, %xmm0
+ 6888 C1
+ 6889 .LBE2001:
+ 6890 .LBE2000:
+ 6891 .LBE1999:
+ 6892 .LBE1998:
+ 6893 .LBE1997:
+ 6894 .LBE1996:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6895 .loc 2 1568 0
+ 6896 59ee 660F7F85 movdqa %xmm0, -8896(%rbp)
+ 6896 40DDFFFF
+ 6897 59f6 660F6F85 movdqa -8896(%rbp), %xmm0
+ 6897 40DDFFFF
+ 6898 59fe 660FEF85 pxor -7728(%rbp), %xmm0
+ 6898 D0E1FFFF
+ 6899 5a06 F30F7F85 movdqu %xmm0, -7728(%rbp)
+ 6899 D0E1FFFF
+ 6900 5a0e 660F6F95 movdqa -8896(%rbp), %xmm2
+ 6900 40DDFFFF
+ 6901 5a16 F30F7F95 movdqu %xmm2, -7552(%rbp)
+ 6901 80E2FFFF
+ 6902 .LBB2002:
+ 6903 .LBB2003:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6904 .loc 2 1278 0
+ 6905 5a1e 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 6905 00000000
+ 6906 5a26 F30F6F8D movdqu -7552(%rbp), %xmm1
+ 6906 80E2FFFF
+ 6907 5a2e F30F7F8D movdqu %xmm1, -7520(%rbp)
+ 6907 A0E2FFFF
+ 6908 5a36 F30F7F85 movdqu %xmm0, -7536(%rbp)
+ 6908 90E2FFFF
+ 6909 5a3e F30F6F85 movdqu -7520(%rbp), %xmm0
+ 6909 A0E2FFFF
+ 6910 5a46 F30F7F85 movdqu %xmm0, -7488(%rbp)
+ 6910 C0E2FFFF
+ 6911 5a4e F30F6F85 movdqu -7536(%rbp), %xmm0
+ 6911 90E2FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 228
+
+
+ 6912 5a56 F30F7F85 movdqu %xmm0, -7504(%rbp)
+ 6912 B0E2FFFF
+ 6913 .LBB2004:
+ 6914 .LBB2005:
+ 6915 .LBB2006:
+ 6916 .LBB2007:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6917 .loc 3 529 0
+ 6918 5a5e F30F6F8D movdqu -7504(%rbp), %xmm1
+ 6918 B0E2FFFF
+ 6919 5a66 F30F6F85 movdqu -7488(%rbp), %xmm0
+ 6919 C0E2FFFF
+ 6920 5a6e 660F3800 pshufb %xmm1, %xmm0
+ 6920 C1
+ 6921 .LBE2007:
+ 6922 .LBE2006:
+ 6923 .LBE2005:
+ 6924 .LBE2004:
+ 6925 .LBE2003:
+ 6926 .LBE2002:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6927 .loc 2 1569 0
+ 6928 5a73 660F7F85 movdqa %xmm0, -8896(%rbp)
+ 6928 40DDFFFF
+ 6929 5a7b 660F6F85 movdqa -8896(%rbp), %xmm0
+ 6929 40DDFFFF
+ 6930 5a83 660FEF85 pxor -7728(%rbp), %xmm0
+ 6930 D0E1FFFF
+ 6931 5a8b F30F7F85 movdqu %xmm0, -7728(%rbp)
+ 6931 D0E1FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 6932 .loc 2 1571 0
+ 6933 5a93 F30F6F85 movdqu -7728(%rbp), %xmm0
+ 6933 D0E1FFFF
+ 6934 .LBE1989:
+ 6935 .LBE1988:
+1792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k4 : k4^k5 : k4^k5 : k4^k5 */
+ 6936 .loc 2 1792 0
+ 6937 5a9b 660F7F85 movdqa %xmm0, -8976(%rbp)
+ 6937 F0DCFFFF
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k9 : k9 : k9 : k9 */
+ 6938 .loc 2 1793 0
+ 6939 5aa3 660F6F85 movdqa -8992(%rbp), %xmm0
+ 6939 E0DCFFFF
+ 6940 5aab 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 6940 00DDFFFF
+ 6941 5ab3 660F6F95 movdqa -8960(%rbp), %xmm2
+ 6941 00DDFFFF
+ 6942 5abb F30F7F95 movdqu %xmm2, -7472(%rbp)
+ 6942 D0E2FFFF
+ 6943 5ac3 F30F6F85 movdqu -7472(%rbp), %xmm0
+ 6943 D0E2FFFF
+ 6944 5acb F30F7F85 movdqu %xmm0, -7440(%rbp)
+ 6944 F0E2FFFF
+ 6945 .LBB2008:
+ 6946 .LBB2009:
+ 6947 .LBB2010:
+
GAS LISTING /tmp/ccjbMjHD.s page 229
+
+
+ 6948 .LBB2011:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6949 .loc 3 450 0
+ 6950 5ad3 F30F6F85 movdqu -7440(%rbp), %xmm0
+ 6950 F0E2FFFF
+ 6951 5adb 660F70C0 pshufd $255, %xmm0, %xmm0
+ 6951 FF
+ 6952 .LBE2011:
+ 6953 .LBE2010:
+ 6954 .LBE2009:
+ 6955 .LBE2008:
+ 6956 .loc 2 1793 0
+ 6957 5ae0 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 6957 00DDFFFF
+1794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k10 : k11 : k10 : k11 */
+ 6958 .loc 2 1794 0
+ 6959 5ae8 660F6F85 movdqa -8976(%rbp), %xmm0
+ 6959 F0DCFFFF
+ 6960 5af0 660FEF85 pxor -8960(%rbp), %xmm0
+ 6960 00DDFFFF
+ 6961 5af8 660F7F85 movdqa %xmm0, -8976(%rbp)
+ 6961 F0DCFFFF
+ 6962 5b00 660F6F95 movdqa -9024(%rbp), %xmm2
+ 6962 C0DCFFFF
+ 6963 5b08 F30F7F95 movdqu %xmm2, -7408(%rbp)
+ 6963 10E3FFFF
+ 6964 5b10 660F6F85 movdqa -8992(%rbp), %xmm0
+ 6964 E0DCFFFF
+ 6965 5b18 F30F7F85 movdqu %xmm0, -7424(%rbp)
+ 6965 00E3FFFF
+ 6966 5b20 F30F6F85 movdqu -7408(%rbp), %xmm0
+ 6966 10E3FFFF
+ 6967 5b28 F30F7F85 movdqu %xmm0, -7360(%rbp)
+ 6967 40E3FFFF
+ 6968 5b30 F30F6F85 movdqu -7424(%rbp), %xmm0
+ 6968 00E3FFFF
+ 6969 5b38 F30F7F85 movdqu %xmm0, -7376(%rbp)
+ 6969 30E3FFFF
+ 6970 .LBB2012:
+ 6971 .LBB2013:
+ 6972 .LBB2014:
+ 6973 .LBB2015:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 6974 .loc 3 366 0
+ 6975 5b40 F20F1085 movsd -7376(%rbp), %xmm0
+ 6975 30E3FFFF
+ 6976 5b48 660F1685 movhpd -7368(%rbp), %xmm0
+ 6976 38E3FFFF
+ 6977 5b50 F20F108D movsd -7360(%rbp), %xmm1
+ 6977 40E3FFFF
+ 6978 5b58 660F168D movhpd -7352(%rbp), %xmm1
+ 6978 48E3FFFF
+ 6979 5b60 660F28D1 movapd %xmm1, %xmm2
+ 6980 5b64 660F14D0 unpcklpd %xmm0, %xmm2
+ 6981 5b68 660F28C2 movapd %xmm2, %xmm0
+ 6982 .LBE2015:
+ 6983 .LBE2014:
+
GAS LISTING /tmp/ccjbMjHD.s page 230
+
+
+ 6984 .LBE2013:
+ 6985 .LBE2012:
+1795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k4 : k5 : k6 : k7 */
+ 6986 .loc 2 1795 0
+ 6987 5b6c 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 6987 C0DCFFFF
+1796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[1] = v1; /* K4:K5:K6:K7 */
+ 6988 .loc 2 1796 0
+ 6989 5b74 488B85A8 movq -8536(%rbp), %rax
+ 6989 DEFFFF
+ 6990 5b7b 4883C010 addq $16, %rax
+ 6991 5b7f 660F6F85 movdqa -9024(%rbp), %xmm0
+ 6991 C0DCFFFF
+ 6992 5b87 660F7F00 movdqa %xmm0, (%rax)
+ 6993 5b8b 660F6F95 movdqa -8992(%rbp), %xmm2
+ 6993 E0DCFFFF
+ 6994 5b93 F30F7F95 movdqu %xmm2, -7328(%rbp)
+ 6994 60E3FFFF
+ 6995 5b9b 660F6F85 movdqa -8976(%rbp), %xmm0
+ 6995 F0DCFFFF
+ 6996 5ba3 F30F7F85 movdqu %xmm0, -7344(%rbp)
+ 6996 50E3FFFF
+ 6997 5bab F30F6F85 movdqu -7328(%rbp), %xmm0
+ 6997 60E3FFFF
+ 6998 5bb3 F30F7F85 movdqu %xmm0, -7280(%rbp)
+ 6998 90E3FFFF
+ 6999 5bbb F30F6F85 movdqu -7344(%rbp), %xmm0
+ 6999 50E3FFFF
+ 7000 5bc3 F30F7F85 movdqu %xmm0, -7296(%rbp)
+ 7000 80E3FFFF
+ 7001 .LBB2016:
+ 7002 .LBB2017:
+ 7003 .LBB2018:
+ 7004 .LBB2019:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 7005 .loc 3 366 0
+ 7006 5bcb F20F108D movsd -7296(%rbp), %xmm1
+ 7006 80E3FFFF
+ 7007 5bd3 660F168D movhpd -7288(%rbp), %xmm1
+ 7007 88E3FFFF
+ 7008 5bdb F20F1085 movsd -7280(%rbp), %xmm0
+ 7008 90E3FFFF
+ 7009 5be3 660F1685 movhpd -7272(%rbp), %xmm0
+ 7009 98E3FFFF
+ 7010 5beb 660FC6C1 shufpd $1, %xmm1, %xmm0
+ 7010 01
+ 7011 .LBE2019:
+ 7012 .LBE2018:
+ 7013 .LBE2017:
+ 7014 .LBE2016:
+1797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k8 : k9 : k10 : k11 */
+ 7015 .loc 2 1798 0
+ 7016 5bf0 660F7F85 movdqa %xmm0, -9008(%rbp)
+ 7016 D0DCFFFF
+1799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[2] = v2; /* K8:K9:K10:K11 */
+ 7017 .loc 2 1799 0
+
GAS LISTING /tmp/ccjbMjHD.s page 231
+
+
+ 7018 5bf8 488B85A8 movq -8536(%rbp), %rax
+ 7018 DEFFFF
+ 7019 5bff 4883C020 addq $32, %rax
+ 7020 5c03 660F6F95 movdqa -9008(%rbp), %xmm2
+ 7020 D0DCFFFF
+ 7021 5c0b 660F7F10 movdqa %xmm2, (%rax)
+ 7022 5c0f 660F6F85 movdqa -8992(%rbp), %xmm0
+ 7022 E0DCFFFF
+ 7023 5c17 F30F7F85 movdqu %xmm0, -7264(%rbp)
+ 7023 A0E3FFFF
+ 7024 .LBB2020:
+ 7025 .LBB2021:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 7026 .loc 2 1565 0
+ 7027 5c1f F30F6F95 movdqu -7264(%rbp), %xmm2
+ 7027 A0E3FFFF
+ 7028 5c27 660F7F95 movdqa %xmm2, -8880(%rbp)
+ 7028 50DDFFFF
+ 7029 5c2f 660F6F85 movdqa -8880(%rbp), %xmm0
+ 7029 50DDFFFF
+ 7030 5c37 F30F7F85 movdqu %xmm0, -7248(%rbp)
+ 7030 B0E3FFFF
+ 7031 .LBB2022:
+ 7032 .LBB2023:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7033 .loc 2 1278 0
+ 7034 5c3f 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7034 00000000
+ 7035 5c47 F30F6F8D movdqu -7248(%rbp), %xmm1
+ 7035 B0E3FFFF
+ 7036 5c4f F30F7F8D movdqu %xmm1, -7216(%rbp)
+ 7036 D0E3FFFF
+ 7037 5c57 F30F7F85 movdqu %xmm0, -7232(%rbp)
+ 7037 C0E3FFFF
+ 7038 5c5f F30F6F85 movdqu -7216(%rbp), %xmm0
+ 7038 D0E3FFFF
+ 7039 5c67 F30F7F85 movdqu %xmm0, -7184(%rbp)
+ 7039 F0E3FFFF
+ 7040 5c6f F30F6F85 movdqu -7232(%rbp), %xmm0
+ 7040 C0E3FFFF
+ 7041 5c77 F30F7F85 movdqu %xmm0, -7200(%rbp)
+ 7041 E0E3FFFF
+ 7042 .LBB2024:
+ 7043 .LBB2025:
+ 7044 .LBB2026:
+ 7045 .LBB2027:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7046 .loc 3 529 0
+ 7047 5c7f F30F6F8D movdqu -7200(%rbp), %xmm1
+ 7047 E0E3FFFF
+ 7048 5c87 F30F6F85 movdqu -7184(%rbp), %xmm0
+ 7048 F0E3FFFF
+ 7049 5c8f 660F3800 pshufb %xmm1, %xmm0
+ 7049 C1
+ 7050 .LBE2027:
+ 7051 .LBE2026:
+ 7052 .LBE2025:
+
GAS LISTING /tmp/ccjbMjHD.s page 232
+
+
+ 7053 .LBE2024:
+ 7054 .LBE2023:
+ 7055 .LBE2022:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7056 .loc 2 1567 0
+ 7057 5c94 660F7F85 movdqa %xmm0, -8880(%rbp)
+ 7057 50DDFFFF
+ 7058 5c9c 660F6F85 movdqa -8880(%rbp), %xmm0
+ 7058 50DDFFFF
+ 7059 5ca4 660FEF85 pxor -7264(%rbp), %xmm0
+ 7059 A0E3FFFF
+ 7060 5cac F30F7F85 movdqu %xmm0, -7264(%rbp)
+ 7060 A0E3FFFF
+ 7061 5cb4 660F6F95 movdqa -8880(%rbp), %xmm2
+ 7061 50DDFFFF
+ 7062 5cbc F30F7F95 movdqu %xmm2, -7168(%rbp)
+ 7062 00E4FFFF
+ 7063 .LBB2028:
+ 7064 .LBB2029:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7065 .loc 2 1278 0
+ 7066 5cc4 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7066 00000000
+ 7067 5ccc F30F6F8D movdqu -7168(%rbp), %xmm1
+ 7067 00E4FFFF
+ 7068 5cd4 F30F7F8D movdqu %xmm1, -7136(%rbp)
+ 7068 20E4FFFF
+ 7069 5cdc F30F7F85 movdqu %xmm0, -7152(%rbp)
+ 7069 10E4FFFF
+ 7070 5ce4 F30F6F85 movdqu -7136(%rbp), %xmm0
+ 7070 20E4FFFF
+ 7071 5cec F30F7F85 movdqu %xmm0, -7104(%rbp)
+ 7071 40E4FFFF
+ 7072 5cf4 F30F6F85 movdqu -7152(%rbp), %xmm0
+ 7072 10E4FFFF
+ 7073 5cfc F30F7F85 movdqu %xmm0, -7120(%rbp)
+ 7073 30E4FFFF
+ 7074 .LBB2030:
+ 7075 .LBB2031:
+ 7076 .LBB2032:
+ 7077 .LBB2033:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7078 .loc 3 529 0
+ 7079 5d04 F30F6F8D movdqu -7120(%rbp), %xmm1
+ 7079 30E4FFFF
+ 7080 5d0c F30F6F85 movdqu -7104(%rbp), %xmm0
+ 7080 40E4FFFF
+ 7081 5d14 660F3800 pshufb %xmm1, %xmm0
+ 7081 C1
+ 7082 .LBE2033:
+ 7083 .LBE2032:
+ 7084 .LBE2031:
+ 7085 .LBE2030:
+ 7086 .LBE2029:
+ 7087 .LBE2028:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7088 .loc 2 1568 0
+
GAS LISTING /tmp/ccjbMjHD.s page 233
+
+
+ 7089 5d19 660F7F85 movdqa %xmm0, -8880(%rbp)
+ 7089 50DDFFFF
+ 7090 5d21 660F6F85 movdqa -8880(%rbp), %xmm0
+ 7090 50DDFFFF
+ 7091 5d29 660FEF85 pxor -7264(%rbp), %xmm0
+ 7091 A0E3FFFF
+ 7092 5d31 F30F7F85 movdqu %xmm0, -7264(%rbp)
+ 7092 A0E3FFFF
+ 7093 5d39 660F6F85 movdqa -8880(%rbp), %xmm0
+ 7093 50DDFFFF
+ 7094 5d41 F30F7F85 movdqu %xmm0, -7088(%rbp)
+ 7094 50E4FFFF
+ 7095 .LBB2034:
+ 7096 .LBB2035:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7097 .loc 2 1278 0
+ 7098 5d49 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7098 00000000
+ 7099 5d51 F30F6F8D movdqu -7088(%rbp), %xmm1
+ 7099 50E4FFFF
+ 7100 5d59 F30F7F8D movdqu %xmm1, -7056(%rbp)
+ 7100 70E4FFFF
+ 7101 5d61 F30F7F85 movdqu %xmm0, -7072(%rbp)
+ 7101 60E4FFFF
+ 7102 5d69 F30F6F85 movdqu -7056(%rbp), %xmm0
+ 7102 70E4FFFF
+ 7103 5d71 F30F7F85 movdqu %xmm0, -7024(%rbp)
+ 7103 90E4FFFF
+ 7104 5d79 F30F6F85 movdqu -7072(%rbp), %xmm0
+ 7104 60E4FFFF
+ 7105 5d81 F30F7F85 movdqu %xmm0, -7040(%rbp)
+ 7105 80E4FFFF
+ 7106 .LBB2036:
+ 7107 .LBB2037:
+ 7108 .LBB2038:
+ 7109 .LBB2039:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7110 .loc 3 529 0
+ 7111 5d89 F30F6F8D movdqu -7040(%rbp), %xmm1
+ 7111 80E4FFFF
+ 7112 5d91 F30F6F85 movdqu -7024(%rbp), %xmm0
+ 7112 90E4FFFF
+ 7113 5d99 660F3800 pshufb %xmm1, %xmm0
+ 7113 C1
+ 7114 .LBE2039:
+ 7115 .LBE2038:
+ 7116 .LBE2037:
+ 7117 .LBE2036:
+ 7118 .LBE2035:
+ 7119 .LBE2034:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7120 .loc 2 1569 0
+ 7121 5d9e 660F7F85 movdqa %xmm0, -8880(%rbp)
+ 7121 50DDFFFF
+ 7122 5da6 660F6F85 movdqa -8880(%rbp), %xmm0
+ 7122 50DDFFFF
+ 7123 5dae 660FEF85 pxor -7264(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 234
+
+
+ 7123 A0E3FFFF
+ 7124 5db6 F30F7F85 movdqu %xmm0, -7264(%rbp)
+ 7124 A0E3FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7125 .loc 2 1571 0
+ 7126 5dbe F30F6F85 movdqu -7264(%rbp), %xmm0
+ 7126 A0E3FFFF
+ 7127 .LBE2021:
+ 7128 .LBE2020:
+1800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k6 : k6^k7 :k6^k7^k8:k6^k7^k8^k9 */
+ 7129 .loc 2 1802 0
+ 7130 5dc6 660F7F85 movdqa %xmm0, -9040(%rbp)
+ 7130 B0DCFFFF
+ 7131 5dce 660F6F95 movdqa -8976(%rbp), %xmm2
+ 7131 F0DCFFFF
+ 7132 5dd6 F30F7F95 movdqu %xmm2, -7008(%rbp)
+ 7132 A0E4FFFF
+ 7133 .LBB2040:
+ 7134 .LBB2041:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 7135 .loc 2 1565 0
+ 7136 5dde F30F6F85 movdqu -7008(%rbp), %xmm0
+ 7136 A0E4FFFF
+ 7137 5de6 660F7F85 movdqa %xmm0, -8864(%rbp)
+ 7137 60DDFFFF
+ 7138 5dee 660F6F95 movdqa -8864(%rbp), %xmm2
+ 7138 60DDFFFF
+ 7139 5df6 F30F7F95 movdqu %xmm2, -6992(%rbp)
+ 7139 B0E4FFFF
+ 7140 .LBB2042:
+ 7141 .LBB2043:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7142 .loc 2 1278 0
+ 7143 5dfe 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7143 00000000
+ 7144 5e06 F30F6F8D movdqu -6992(%rbp), %xmm1
+ 7144 B0E4FFFF
+ 7145 5e0e F30F7F8D movdqu %xmm1, -6960(%rbp)
+ 7145 D0E4FFFF
+ 7146 5e16 F30F7F85 movdqu %xmm0, -6976(%rbp)
+ 7146 C0E4FFFF
+ 7147 5e1e F30F6F85 movdqu -6960(%rbp), %xmm0
+ 7147 D0E4FFFF
+ 7148 5e26 F30F7F85 movdqu %xmm0, -6928(%rbp)
+ 7148 F0E4FFFF
+ 7149 5e2e F30F6F85 movdqu -6976(%rbp), %xmm0
+ 7149 C0E4FFFF
+ 7150 5e36 F30F7F85 movdqu %xmm0, -6944(%rbp)
+ 7150 E0E4FFFF
+ 7151 .LBB2044:
+ 7152 .LBB2045:
+ 7153 .LBB2046:
+ 7154 .LBB2047:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7155 .loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s page 235
+
+
+ 7156 5e3e F30F6F8D movdqu -6944(%rbp), %xmm1
+ 7156 E0E4FFFF
+ 7157 5e46 F30F6F85 movdqu -6928(%rbp), %xmm0
+ 7157 F0E4FFFF
+ 7158 5e4e 660F3800 pshufb %xmm1, %xmm0
+ 7158 C1
+ 7159 .LBE2047:
+ 7160 .LBE2046:
+ 7161 .LBE2045:
+ 7162 .LBE2044:
+ 7163 .LBE2043:
+ 7164 .LBE2042:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7165 .loc 2 1567 0
+ 7166 5e53 660F7F85 movdqa %xmm0, -8864(%rbp)
+ 7166 60DDFFFF
+ 7167 5e5b 660F6F85 movdqa -8864(%rbp), %xmm0
+ 7167 60DDFFFF
+ 7168 5e63 660FEF85 pxor -7008(%rbp), %xmm0
+ 7168 A0E4FFFF
+ 7169 5e6b F30F7F85 movdqu %xmm0, -7008(%rbp)
+ 7169 A0E4FFFF
+ 7170 5e73 660F6F85 movdqa -8864(%rbp), %xmm0
+ 7170 60DDFFFF
+ 7171 5e7b F30F7F85 movdqu %xmm0, -6912(%rbp)
+ 7171 00E5FFFF
+ 7172 .LBB2048:
+ 7173 .LBB2049:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7174 .loc 2 1278 0
+ 7175 5e83 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7175 00000000
+ 7176 5e8b F30F6F8D movdqu -6912(%rbp), %xmm1
+ 7176 00E5FFFF
+ 7177 5e93 F30F7F8D movdqu %xmm1, -6880(%rbp)
+ 7177 20E5FFFF
+ 7178 5e9b F30F7F85 movdqu %xmm0, -6896(%rbp)
+ 7178 10E5FFFF
+ 7179 5ea3 F30F6F85 movdqu -6880(%rbp), %xmm0
+ 7179 20E5FFFF
+ 7180 5eab F30F7F85 movdqu %xmm0, -6848(%rbp)
+ 7180 40E5FFFF
+ 7181 5eb3 F30F6F85 movdqu -6896(%rbp), %xmm0
+ 7181 10E5FFFF
+ 7182 5ebb F30F7F85 movdqu %xmm0, -6864(%rbp)
+ 7182 30E5FFFF
+ 7183 .LBB2050:
+ 7184 .LBB2051:
+ 7185 .LBB2052:
+ 7186 .LBB2053:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7187 .loc 3 529 0
+ 7188 5ec3 F30F6F8D movdqu -6864(%rbp), %xmm1
+ 7188 30E5FFFF
+ 7189 5ecb F30F6F85 movdqu -6848(%rbp), %xmm0
+ 7189 40E5FFFF
+ 7190 5ed3 660F3800 pshufb %xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 236
+
+
+ 7190 C1
+ 7191 .LBE2053:
+ 7192 .LBE2052:
+ 7193 .LBE2051:
+ 7194 .LBE2050:
+ 7195 .LBE2049:
+ 7196 .LBE2048:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7197 .loc 2 1568 0
+ 7198 5ed8 660F7F85 movdqa %xmm0, -8864(%rbp)
+ 7198 60DDFFFF
+ 7199 5ee0 660F6F85 movdqa -8864(%rbp), %xmm0
+ 7199 60DDFFFF
+ 7200 5ee8 660FEF85 pxor -7008(%rbp), %xmm0
+ 7200 A0E4FFFF
+ 7201 5ef0 F30F7F85 movdqu %xmm0, -7008(%rbp)
+ 7201 A0E4FFFF
+ 7202 5ef8 660F6F95 movdqa -8864(%rbp), %xmm2
+ 7202 60DDFFFF
+ 7203 5f00 F30F7F95 movdqu %xmm2, -6832(%rbp)
+ 7203 50E5FFFF
+ 7204 .LBB2054:
+ 7205 .LBB2055:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7206 .loc 2 1278 0
+ 7207 5f08 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7207 00000000
+ 7208 5f10 F30F6F8D movdqu -6832(%rbp), %xmm1
+ 7208 50E5FFFF
+ 7209 5f18 F30F7F8D movdqu %xmm1, -6800(%rbp)
+ 7209 70E5FFFF
+ 7210 5f20 F30F7F85 movdqu %xmm0, -6816(%rbp)
+ 7210 60E5FFFF
+ 7211 5f28 F30F6F85 movdqu -6800(%rbp), %xmm0
+ 7211 70E5FFFF
+ 7212 5f30 F30F7F85 movdqu %xmm0, -6768(%rbp)
+ 7212 90E5FFFF
+ 7213 5f38 F30F6F85 movdqu -6816(%rbp), %xmm0
+ 7213 60E5FFFF
+ 7214 5f40 F30F7F85 movdqu %xmm0, -6784(%rbp)
+ 7214 80E5FFFF
+ 7215 .LBB2056:
+ 7216 .LBB2057:
+ 7217 .LBB2058:
+ 7218 .LBB2059:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7219 .loc 3 529 0
+ 7220 5f48 F30F6F8D movdqu -6784(%rbp), %xmm1
+ 7220 80E5FFFF
+ 7221 5f50 F30F6F85 movdqu -6768(%rbp), %xmm0
+ 7221 90E5FFFF
+ 7222 5f58 660F3800 pshufb %xmm1, %xmm0
+ 7222 C1
+ 7223 .LBE2059:
+ 7224 .LBE2058:
+ 7225 .LBE2057:
+ 7226 .LBE2056:
+
GAS LISTING /tmp/ccjbMjHD.s page 237
+
+
+ 7227 .LBE2055:
+ 7228 .LBE2054:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7229 .loc 2 1569 0
+ 7230 5f5d 660F7F85 movdqa %xmm0, -8864(%rbp)
+ 7230 60DDFFFF
+ 7231 5f65 660F6F85 movdqa -8864(%rbp), %xmm0
+ 7231 60DDFFFF
+ 7232 5f6d 660FEF85 pxor -7008(%rbp), %xmm0
+ 7232 A0E4FFFF
+ 7233 5f75 F30F7F85 movdqu %xmm0, -7008(%rbp)
+ 7233 A0E4FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7234 .loc 2 1571 0
+ 7235 5f7d F30F6F85 movdqu -7008(%rbp), %xmm0
+ 7235 A0E4FFFF
+ 7236 .LBE2041:
+ 7237 .LBE2040:
+1803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k10 :k10^k11: k10^k11: k10^k11 */
+ 7238 .loc 2 1803 0
+ 7239 5f85 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 7239 C0DCFFFF
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 7240 .loc 2 1804 0
+ 7241 5f8d 660F6F85 movdqa -9008(%rbp), %xmm0
+ 7241 D0DCFFFF
+ 7242 5f95 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 7242 00DDFFFF
+ 7243 5f9d 660F6F95 movdqa -8960(%rbp), %xmm2
+ 7243 00DDFFFF
+ 7244 5fa5 F30F7F95 movdqu %xmm2, -6736(%rbp)
+ 7244 B0E5FFFF
+ 7245 .LBB2060:
+ 7246 .LBB2061:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7247 .loc 2 1681 0
+ 7248 5fad B8020000 movl $2, %eax
+ 7248 00
+ 7249 5fb2 660F6F05 movdqa vec_00(%rip), %xmm0
+ 7249 00000000
+ 7250 5fba F30F7F85 movdqu %xmm0, -6704(%rbp)
+ 7250 D0E5FFFF
+ 7251 5fc2 8985CCE5 movl %eax, -6708(%rbp)
+ 7251 FFFF
+ 7252 5fc8 F30F6F85 movdqu -6704(%rbp), %xmm0
+ 7252 D0E5FFFF
+ 7253 5fd0 F30F7F85 movdqu %xmm0, -6672(%rbp)
+ 7253 F0E5FFFF
+ 7254 5fd8 8B85CCE5 movl -6708(%rbp), %eax
+ 7254 FFFF
+ 7255 5fde 8985ECE5 movl %eax, -6676(%rbp)
+ 7255 FFFF
+ 7256 .LBB2062:
+ 7257 .LBB2063:
+ 7258 .LBB2064:
+ 7259 .LBB2065:
+ 7260 .loc 3 598 0
+
GAS LISTING /tmp/ccjbMjHD.s page 238
+
+
+ 7261 5fe4 8B85ECE5 movl -6676(%rbp), %eax
+ 7261 FFFF
+ 7262 5fea F30F6F85 movdqu -6672(%rbp), %xmm0
+ 7262 F0E5FFFF
+ 7263 5ff2 660F3A22 pinsrd $3, %eax, %xmm0
+ 7263 C003
+ 7264 .LBE2065:
+ 7265 .LBE2064:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 7266 .loc 2 519 0
+ 7267 5ff8 F30F7F85 movdqu %xmm0, -6704(%rbp)
+ 7267 D0E5FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7268 .loc 2 526 0
+ 7269 6000 F30F6F85 movdqu -6704(%rbp), %xmm0
+ 7269 D0E5FFFF
+ 7270 .LBE2063:
+ 7271 .LBE2062:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7272 .loc 2 1681 0
+ 7273 6008 660F7F85 movdqa %xmm0, -8832(%rbp)
+ 7273 80DDFFFF
+ 7274 6010 F30F6F85 movdqu -6736(%rbp), %xmm0
+ 7274 B0E5FFFF
+ 7275 6018 F30F7F85 movdqu %xmm0, -6656(%rbp)
+ 7275 00E6FFFF
+ 7276 6020 F30F6F85 movdqu -6656(%rbp), %xmm0
+ 7276 00E6FFFF
+ 7277 6028 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 7277 20E6FFFF
+ 7278 6030 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 7278 000000
+ 7279 6037 48898518 movq %rax, -6632(%rbp)
+ 7279 E6FFFF
+ 7280 .LBB2066:
+ 7281 .LBB2067:
+ 7282 .LBB2068:
+ 7283 .LBB2069:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 7284 .loc 2 851 0
+ 7285 603e 660F6F05 movdqa vec_00(%rip), %xmm0
+ 7285 00000000
+ 7286 6046 F30F7F85 movdqu %xmm0, -6592(%rbp)
+ 7286 40E6FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 7287 .loc 2 854 0
+ 7288 604e 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 7288 00000000
+ 7289 6056 F30F6F8D movdqu -6624(%rbp), %xmm1
+ 7289 20E6FFFF
+ 7290 605e F30F7F8D movdqu %xmm1, -6512(%rbp)
+ 7290 90E6FFFF
+ 7291 6066 F30F7F85 movdqu %xmm0, -6528(%rbp)
+ 7291 80E6FFFF
+ 7292 .LBB2070:
+ 7293 .LBB2071:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+
GAS LISTING /tmp/ccjbMjHD.s page 239
+
+
+ 7294 .loc 2 206 0
+ 7295 606e F30F6F85 movdqu -6528(%rbp), %xmm0
+ 7295 80E6FFFF
+ 7296 6076 F30F6F8D movdqu -6512(%rbp), %xmm1
+ 7296 90E6FFFF
+ 7297 607e 660FDBC1 pand %xmm1, %xmm0
+ 7298 .LBE2071:
+ 7299 .LBE2070:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 7300 .loc 2 854 0
+ 7301 6082 F30F7F85 movdqu %xmm0, -6544(%rbp)
+ 7301 70E6FFFF
+ 7302 608a F30F6F85 movdqu -6624(%rbp), %xmm0
+ 7302 20E6FFFF
+ 7303 6092 F30F7F85 movdqu %xmm0, -6480(%rbp)
+ 7303 B0E6FFFF
+ 7304 .LBB2072:
+ 7305 .LBB2073:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 7306 .loc 3 433 0
+ 7307 609a F30F6F85 movdqu -6480(%rbp), %xmm0
+ 7307 B0E6FFFF
+ 7308 60a2 660F72D0 psrld $4, %xmm0
+ 7308 04
+ 7309 .LBE2073:
+ 7310 .LBE2072:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 7311 .loc 2 857 0
+ 7312 60a7 F30F7F85 movdqu %xmm0, -6560(%rbp)
+ 7312 60E6FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7313 .loc 2 859 0
+ 7314 60af 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 7314 00000000
+ 7315 60b7 F30F6F8D movdqu -6560(%rbp), %xmm1
+ 7315 60E6FFFF
+ 7316 60bf F30F7F8D movdqu %xmm1, -6448(%rbp)
+ 7316 D0E6FFFF
+ 7317 60c7 F30F7F85 movdqu %xmm0, -6464(%rbp)
+ 7317 C0E6FFFF
+ 7318 .LBB2074:
+ 7319 .LBB2075:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 7320 .loc 2 206 0
+ 7321 60cf F30F6F85 movdqu -6464(%rbp), %xmm0
+ 7321 C0E6FFFF
+ 7322 60d7 F30F6F8D movdqu -6448(%rbp), %xmm1
+ 7322 D0E6FFFF
+ 7323 60df 660FDBC1 pand %xmm1, %xmm0
+ 7324 .LBE2075:
+ 7325 .LBE2074:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7326 .loc 2 859 0
+ 7327 60e3 F30F7F85 movdqu %xmm0, -6560(%rbp)
+ 7327 60E6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 7328 .loc 2 866 0
+
GAS LISTING /tmp/ccjbMjHD.s page 240
+
+
+ 7329 60eb C7853CE6 movl $0, -6596(%rbp)
+ 7329 FFFF0000
+ 7329 0000
+ 7330 60f5 E9BE0100 jmp .L108
+ 7330 00
+ 7331 .L109:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 7332 .loc 2 868 0
+ 7333 60fa 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 7333 00000000
+ 7334 6102 F30F7F85 movdqu %xmm0, -6416(%rbp)
+ 7334 F0E6FFFF
+ 7335 610a F30F6F85 movdqu -6560(%rbp), %xmm0
+ 7335 60E6FFFF
+ 7336 6112 F30F7F85 movdqu %xmm0, -6432(%rbp)
+ 7336 E0E6FFFF
+ 7337 611a F30F6F85 movdqu -6416(%rbp), %xmm0
+ 7337 F0E6FFFF
+ 7338 6122 F30F7F85 movdqu %xmm0, -6384(%rbp)
+ 7338 10E7FFFF
+ 7339 612a F30F6F85 movdqu -6432(%rbp), %xmm0
+ 7339 E0E6FFFF
+ 7340 6132 F30F7F85 movdqu %xmm0, -6400(%rbp)
+ 7340 00E7FFFF
+ 7341 .LBB2076:
+ 7342 .LBB2077:
+ 7343 .LBB2078:
+ 7344 .LBB2079:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7345 .loc 3 529 0
+ 7346 613a F30F6F8D movdqu -6400(%rbp), %xmm1
+ 7346 00E7FFFF
+ 7347 6142 F30F6F85 movdqu -6384(%rbp), %xmm0
+ 7347 10E7FFFF
+ 7348 614a 660F3800 pshufb %xmm1, %xmm0
+ 7348 C1
+ 7349 .LBE2079:
+ 7350 .LBE2078:
+ 7351 .LBE2077:
+ 7352 .LBE2076:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 7353 .loc 2 868 0
+ 7354 614f F30F7F85 movdqu %xmm0, -6576(%rbp)
+ 7354 50E6FFFF
+ 7355 6157 F30F6F85 movdqu -6544(%rbp), %xmm0
+ 7355 70E6FFFF
+ 7356 615f F30F7F85 movdqu %xmm0, -6352(%rbp)
+ 7356 30E7FFFF
+ 7357 6167 F30F6F85 movdqu -6576(%rbp), %xmm0
+ 7357 50E6FFFF
+ 7358 616f F30F7F85 movdqu %xmm0, -6368(%rbp)
+ 7358 20E7FFFF
+ 7359 .LBB2080:
+ 7360 .LBB2081:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 7361 .loc 2 234 0
+ 7362 6177 F30F6F85 movdqu -6368(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 241
+
+
+ 7362 20E7FFFF
+ 7363 617f F30F6F8D movdqu -6352(%rbp), %xmm1
+ 7363 30E7FFFF
+ 7364 6187 660FEBC1 por %xmm1, %xmm0
+ 7365 .LBE2081:
+ 7366 .LBE2080:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 7367 .loc 2 870 0
+ 7368 618b F30F7F85 movdqu %xmm0, -6576(%rbp)
+ 7368 50E6FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 7369 .loc 2 872 0
+ 7370 6193 8B853CE6 mov -6596(%rbp), %eax
+ 7370 FFFF
+ 7371 6199 48C1E004 salq $4, %rax
+ 7372 619d 48038518 addq -6632(%rbp), %rax
+ 7372 E6FFFF
+ 7373 61a4 660F6F00 movdqa (%rax), %xmm0
+ 7374 61a8 F30F7F85 movdqu %xmm0, -6320(%rbp)
+ 7374 50E7FFFF
+ 7375 61b0 F30F6F85 movdqu -6576(%rbp), %xmm0
+ 7375 50E6FFFF
+ 7376 61b8 F30F7F85 movdqu %xmm0, -6336(%rbp)
+ 7376 40E7FFFF
+ 7377 61c0 F30F6F85 movdqu -6320(%rbp), %xmm0
+ 7377 50E7FFFF
+ 7378 61c8 F30F7F85 movdqu %xmm0, -6288(%rbp)
+ 7378 70E7FFFF
+ 7379 61d0 F30F6F85 movdqu -6336(%rbp), %xmm0
+ 7379 40E7FFFF
+ 7380 61d8 F30F7F85 movdqu %xmm0, -6304(%rbp)
+ 7380 60E7FFFF
+ 7381 .LBB2082:
+ 7382 .LBB2083:
+ 7383 .LBB2084:
+ 7384 .LBB2085:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7385 .loc 3 529 0
+ 7386 61e0 F30F6F8D movdqu -6304(%rbp), %xmm1
+ 7386 60E7FFFF
+ 7387 61e8 F30F6F85 movdqu -6288(%rbp), %xmm0
+ 7387 70E7FFFF
+ 7388 61f0 660F3800 pshufb %xmm1, %xmm0
+ 7388 C1
+ 7389 .LBE2085:
+ 7390 .LBE2084:
+ 7391 .LBE2083:
+ 7392 .LBE2082:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 7393 .loc 2 872 0
+ 7394 61f5 F30F7F85 movdqu %xmm0, -6576(%rbp)
+ 7394 50E6FFFF
+ 7395 61fd F30F6F85 movdqu -6592(%rbp), %xmm0
+ 7395 40E6FFFF
+ 7396 6205 F30F7F85 movdqu %xmm0, -6256(%rbp)
+ 7396 90E7FFFF
+ 7397 620d F30F6F85 movdqu -6576(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 242
+
+
+ 7397 50E6FFFF
+ 7398 6215 F30F7F85 movdqu %xmm0, -6272(%rbp)
+ 7398 80E7FFFF
+ 7399 .LBB2086:
+ 7400 .LBB2087:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 7401 .loc 2 234 0
+ 7402 621d F30F6F85 movdqu -6272(%rbp), %xmm0
+ 7402 80E7FFFF
+ 7403 6225 F30F6F8D movdqu -6256(%rbp), %xmm1
+ 7403 90E7FFFF
+ 7404 622d 660FEBC1 por %xmm1, %xmm0
+ 7405 .LBE2087:
+ 7406 .LBE2086:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 7407 .loc 2 874 0
+ 7408 6231 F30F7F85 movdqu %xmm0, -6592(%rbp)
+ 7408 40E6FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 7409 .loc 2 876 0
+ 7410 6239 660F6F05 movdqa vec_01(%rip), %xmm0
+ 7410 00000000
+ 7411 6241 F30F6F8D movdqu -6560(%rbp), %xmm1
+ 7411 60E6FFFF
+ 7412 6249 F30F7F8D movdqu %xmm1, -6224(%rbp)
+ 7412 B0E7FFFF
+ 7413 6251 F30F7F85 movdqu %xmm0, -6240(%rbp)
+ 7413 A0E7FFFF
+ 7414 .LBB2088:
+ 7415 .LBB2089:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 7416 .loc 2 290 0
+ 7417 6259 F30F6F8D movdqu -6240(%rbp), %xmm1
+ 7417 A0E7FFFF
+ 7418 6261 F30F6F85 movdqu -6224(%rbp), %xmm0
+ 7418 B0E7FFFF
+ 7419 6269 660FF8C1 psubb %xmm1, %xmm0
+ 7420 .LBE2089:
+ 7421 .LBE2088:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 7422 .loc 2 876 0
+ 7423 626d F30F7F85 movdqu %xmm0, -6560(%rbp)
+ 7423 60E6FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7424 .loc 2 878 0
+ 7425 6275 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 7425 00000000
+ 7426 627d F30F6F8D movdqu -6560(%rbp), %xmm1
+ 7426 60E6FFFF
+ 7427 6285 F30F7F8D movdqu %xmm1, -6192(%rbp)
+ 7427 D0E7FFFF
+ 7428 628d F30F7F85 movdqu %xmm0, -6208(%rbp)
+ 7428 C0E7FFFF
+ 7429 .LBB2090:
+ 7430 .LBB2091:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 7431 .loc 2 206 0
+
GAS LISTING /tmp/ccjbMjHD.s page 243
+
+
+ 7432 6295 F30F6F85 movdqu -6208(%rbp), %xmm0
+ 7432 C0E7FFFF
+ 7433 629d F30F6F8D movdqu -6192(%rbp), %xmm1
+ 7433 D0E7FFFF
+ 7434 62a5 660FDBC1 pand %xmm1, %xmm0
+ 7435 .LBE2091:
+ 7436 .LBE2090:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7437 .loc 2 878 0
+ 7438 62a9 F30F7F85 movdqu %xmm0, -6560(%rbp)
+ 7438 60E6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 7439 .loc 2 866 0
+ 7440 62b1 83853CE6 addl $1, -6596(%rbp)
+ 7440 FFFF01
+ 7441 .L108:
+ 7442 62b8 83BD3CE6 cmpl $15, -6596(%rbp)
+ 7442 FFFF0F
+ 7443 62bf 0F8635FE jbe .L109
+ 7443 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 7444 .loc 2 882 0
+ 7445 62c5 F30F6F85 movdqu -6592(%rbp), %xmm0
+ 7445 40E6FFFF
+ 7446 .LBE2069:
+ 7447 .LBE2068:
+ 7448 .LBE2067:
+ 7449 .LBE2066:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 7450 .loc 2 1682 0
+ 7451 62cd 660F7F85 movdqa %xmm0, -8848(%rbp)
+ 7451 70DDFFFF
+ 7452 .LBB2092:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 7453 .loc 2 1683 0
+ 7454 62d5 660F6F85 movdqa -8848(%rbp), %xmm0
+ 7454 70DDFFFF
+ 7455 62dd F30F7F85 movdqu %xmm0, -8448(%rbp)
+ 7455 00DFFFFF
+ 7456 62e5 E8000000 call KDbgWriterGet at PLT
+ 7456 00
+ 7457 62ea 4885C0 testq %rax, %rax
+ 7458 62ed 7479 je .L111
+ 7459 62ef BF010000 movl $1, %edi
+ 7459 00
+ 7460 62f4 E8000000 call KDbgCondToFlag at PLT
+ 7460 00
+ 7461 62f9 4889C6 movq %rax, %rsi
+ 7462 62fc BF100000 movl $16, %edi
+ 7462 00
+ 7463 6301 E8000000 call KDbgTestModConds at PLT
+ 7463 00
+ 7464 6306 84C0 testb %al, %al
+ 7465 6308 745E je .L111
+ 7466 630a 8B850CDF movl -8436(%rbp), %eax
+ 7466 FFFF
+ 7467 6310 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 244
+
+
+ 7468 6312 E8E99CFF call bswap_32
+ 7468 FF
+ 7469 6317 4189C5 movl %eax, %r13d
+ 7470 631a 8B8508DF movl -8440(%rbp), %eax
+ 7470 FFFF
+ 7471 6320 89C7 movl %eax, %edi
+ 7472 6322 E8D99CFF call bswap_32
+ 7472 FF
+ 7473 6327 4189C4 movl %eax, %r12d
+ 7474 632a 8B8504DF movl -8444(%rbp), %eax
+ 7474 FFFF
+ 7475 6330 89C7 movl %eax, %edi
+ 7476 6332 E8C99CFF call bswap_32
+ 7476 FF
+ 7477 6337 89C3 movl %eax, %ebx
+ 7478 6339 8B8500DF movl -8448(%rbp), %eax
+ 7478 FFFF
+ 7479 633f 89C7 movl %eax, %edi
+ 7480 6341 E8BA9CFF call bswap_32
+ 7480 FF
+ 7481 6346 4589E9 movl %r13d, %r9d
+ 7482 6349 4589E0 movl %r12d, %r8d
+ 7483 634c 89D9 movl %ebx, %ecx
+ 7484 634e 89C2 movl %eax, %edx
+ 7485 6350 488D3500 leaq .LC0(%rip), %rsi
+ 7485 000000
+ 7486 6357 488D3D00 leaq .LC1(%rip), %rdi
+ 7486 000000
+ 7487 635e B8000000 movl $0, %eax
+ 7487 00
+ 7488 6363 E8000000 call KDbgMsg at PLT
+ 7488 00
+ 7489 .L111:
+ 7490 6368 660F6F95 movdqa -8848(%rbp), %xmm2
+ 7490 70DDFFFF
+ 7491 6370 F30F7F95 movdqu %xmm2, -6176(%rbp)
+ 7491 E0E7FFFF
+ 7492 .LBE2092:
+ 7493 .LBB2093:
+ 7494 .LBB2094:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 7495 .loc 2 667 0
+ 7496 6378 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 7496 00000000
+ 7497 6380 F30F6F8D movdqu -6176(%rbp), %xmm1
+ 7497 E0E7FFFF
+ 7498 6388 F30F7F8D movdqu %xmm1, -6144(%rbp)
+ 7498 00E8FFFF
+ 7499 6390 F30F7F85 movdqu %xmm0, -6160(%rbp)
+ 7499 F0E7FFFF
+ 7500 6398 F30F6F85 movdqu -6144(%rbp), %xmm0
+ 7500 00E8FFFF
+ 7501 63a0 F30F7F85 movdqu %xmm0, -6112(%rbp)
+ 7501 20E8FFFF
+ 7502 63a8 F30F6F85 movdqu -6160(%rbp), %xmm0
+ 7502 F0E7FFFF
+ 7503 63b0 F30F7F85 movdqu %xmm0, -6128(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 245
+
+
+ 7503 10E8FFFF
+ 7504 .LBB2095:
+ 7505 .LBB2096:
+ 7506 .LBB2097:
+ 7507 .LBB2098:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7508 .loc 3 529 0
+ 7509 63b8 F30F6F8D movdqu -6128(%rbp), %xmm1
+ 7509 10E8FFFF
+ 7510 63c0 F30F6F85 movdqu -6112(%rbp), %xmm0
+ 7510 20E8FFFF
+ 7511 63c8 660F3800 pshufb %xmm1, %xmm0
+ 7511 C1
+ 7512 .LBE2098:
+ 7513 .LBE2097:
+ 7514 .LBE2096:
+ 7515 .LBE2095:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 7516 .loc 2 667 0
+ 7517 63cd F30F7F85 movdqu %xmm0, -6176(%rbp)
+ 7517 E0E7FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 7518 .loc 2 668 0
+ 7519 63d5 F30F6F85 movdqu -6176(%rbp), %xmm0
+ 7519 E0E7FFFF
+ 7520 .LBE2094:
+ 7521 .LBE2093:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 7522 .loc 2 1684 0
+ 7523 63dd 660F7F85 movdqa %xmm0, -8848(%rbp)
+ 7523 70DDFFFF
+ 7524 .LBB2099:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 7525 .loc 2 1685 0
+ 7526 63e5 660F6F85 movdqa -8848(%rbp), %xmm0
+ 7526 70DDFFFF
+ 7527 63ed F30F7F85 movdqu %xmm0, -8464(%rbp)
+ 7527 F0DEFFFF
+ 7528 63f5 E8000000 call KDbgWriterGet at PLT
+ 7528 00
+ 7529 63fa 4885C0 testq %rax, %rax
+ 7530 63fd 7479 je .L113
+ 7531 63ff BF010000 movl $1, %edi
+ 7531 00
+ 7532 6404 E8000000 call KDbgCondToFlag at PLT
+ 7532 00
+ 7533 6409 4889C6 movq %rax, %rsi
+ 7534 640c BF100000 movl $16, %edi
+ 7534 00
+ 7535 6411 E8000000 call KDbgTestModConds at PLT
+ 7535 00
+ 7536 6416 84C0 testb %al, %al
+ 7537 6418 745E je .L113
+ 7538 641a 8B85FCDE movl -8452(%rbp), %eax
+ 7538 FFFF
+ 7539 6420 89C7 movl %eax, %edi
+ 7540 6422 E8D99BFF call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 246
+
+
+ 7540 FF
+ 7541 6427 4189C5 movl %eax, %r13d
+ 7542 642a 8B85F8DE movl -8456(%rbp), %eax
+ 7542 FFFF
+ 7543 6430 89C7 movl %eax, %edi
+ 7544 6432 E8C99BFF call bswap_32
+ 7544 FF
+ 7545 6437 4189C4 movl %eax, %r12d
+ 7546 643a 8B85F4DE movl -8460(%rbp), %eax
+ 7546 FFFF
+ 7547 6440 89C7 movl %eax, %edi
+ 7548 6442 E8B99BFF call bswap_32
+ 7548 FF
+ 7549 6447 89C3 movl %eax, %ebx
+ 7550 6449 8B85F0DE movl -8464(%rbp), %eax
+ 7550 FFFF
+ 7551 644f 89C7 movl %eax, %edi
+ 7552 6451 E8AA9BFF call bswap_32
+ 7552 FF
+ 7553 6456 4589E9 movl %r13d, %r9d
+ 7554 6459 4589E0 movl %r12d, %r8d
+ 7555 645c 89D9 movl %ebx, %ecx
+ 7556 645e 89C2 movl %eax, %edx
+ 7557 6460 488D3500 leaq .LC2(%rip), %rsi
+ 7557 000000
+ 7558 6467 488D3D00 leaq .LC1(%rip), %rdi
+ 7558 000000
+ 7559 646e B8000000 movl $0, %eax
+ 7559 00
+ 7560 6473 E8000000 call KDbgMsg at PLT
+ 7560 00
+ 7561 .L113:
+ 7562 6478 660F6F95 movdqa -8848(%rbp), %xmm2
+ 7562 70DDFFFF
+ 7563 6480 F30F7F95 movdqu %xmm2, -6080(%rbp)
+ 7563 40E8FFFF
+ 7564 6488 660F6F85 movdqa -8832(%rbp), %xmm0
+ 7564 80DDFFFF
+ 7565 6490 F30F7F85 movdqu %xmm0, -6096(%rbp)
+ 7565 30E8FFFF
+ 7566 .LBE2099:
+ 7567 .LBB2100:
+ 7568 .LBB2101:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 7569 .loc 2 178 0
+ 7570 6498 F30F6F85 movdqu -6096(%rbp), %xmm0
+ 7570 30E8FFFF
+ 7571 64a0 F30F6F8D movdqu -6080(%rbp), %xmm1
+ 7571 40E8FFFF
+ 7572 64a8 660FEFC1 pxor %xmm1, %xmm0
+ 7573 .LBE2101:
+ 7574 .LBE2100:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 7575 .loc 2 1686 0
+ 7576 64ac 660F7F85 movdqa %xmm0, -8848(%rbp)
+ 7576 70DDFFFF
+ 7577 .LBB2102:
+
GAS LISTING /tmp/ccjbMjHD.s page 247
+
+
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 7578 .loc 2 1687 0
+ 7579 64b4 660F6F95 movdqa -8848(%rbp), %xmm2
+ 7579 70DDFFFF
+ 7580 64bc F30F7F95 movdqu %xmm2, -8480(%rbp)
+ 7580 E0DEFFFF
+ 7581 64c4 E8000000 call KDbgWriterGet at PLT
+ 7581 00
+ 7582 64c9 4885C0 testq %rax, %rax
+ 7583 64cc 7479 je .L115
+ 7584 64ce BF010000 movl $1, %edi
+ 7584 00
+ 7585 64d3 E8000000 call KDbgCondToFlag at PLT
+ 7585 00
+ 7586 64d8 4889C6 movq %rax, %rsi
+ 7587 64db BF100000 movl $16, %edi
+ 7587 00
+ 7588 64e0 E8000000 call KDbgTestModConds at PLT
+ 7588 00
+ 7589 64e5 84C0 testb %al, %al
+ 7590 64e7 745E je .L115
+ 7591 64e9 8B85ECDE movl -8468(%rbp), %eax
+ 7591 FFFF
+ 7592 64ef 89C7 movl %eax, %edi
+ 7593 64f1 E80A9BFF call bswap_32
+ 7593 FF
+ 7594 64f6 4189C5 movl %eax, %r13d
+ 7595 64f9 8B85E8DE movl -8472(%rbp), %eax
+ 7595 FFFF
+ 7596 64ff 89C7 movl %eax, %edi
+ 7597 6501 E8FA9AFF call bswap_32
+ 7597 FF
+ 7598 6506 4189C4 movl %eax, %r12d
+ 7599 6509 8B85E4DE movl -8476(%rbp), %eax
+ 7599 FFFF
+ 7600 650f 89C7 movl %eax, %edi
+ 7601 6511 E8EA9AFF call bswap_32
+ 7601 FF
+ 7602 6516 89C3 movl %eax, %ebx
+ 7603 6518 8B85E0DE movl -8480(%rbp), %eax
+ 7603 FFFF
+ 7604 651e 89C7 movl %eax, %edi
+ 7605 6520 E8DB9AFF call bswap_32
+ 7605 FF
+ 7606 6525 4589E9 movl %r13d, %r9d
+ 7607 6528 4589E0 movl %r12d, %r8d
+ 7608 652b 89D9 movl %ebx, %ecx
+ 7609 652d 89C2 movl %eax, %edx
+ 7610 652f 488D3500 leaq .LC3(%rip), %rsi
+ 7610 000000
+ 7611 6536 488D3D00 leaq .LC1(%rip), %rdi
+ 7611 000000
+ 7612 653d B8000000 movl $0, %eax
+ 7612 00
+ 7613 6542 E8000000 call KDbgMsg at PLT
+ 7613 00
+ 7614 .L115:
+
GAS LISTING /tmp/ccjbMjHD.s page 248
+
+
+ 7615 6547 660F6F85 movdqa -8848(%rbp), %xmm0
+ 7615 70DDFFFF
+ 7616 654f F30F7F85 movdqu %xmm0, -6064(%rbp)
+ 7616 50E8FFFF
+ 7617 6557 F30F6F85 movdqu -6064(%rbp), %xmm0
+ 7617 50E8FFFF
+ 7618 655f F30F7F85 movdqu %xmm0, -6032(%rbp)
+ 7618 70E8FFFF
+ 7619 .LBE2102:
+ 7620 .LBB2103:
+ 7621 .LBB2104:
+ 7622 .LBB2105:
+ 7623 .LBB2106:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 7624 .loc 3 450 0
+ 7625 6567 F30F6F85 movdqu -6032(%rbp), %xmm0
+ 7625 70E8FFFF
+ 7626 656f 660F70C0 pshufd $255, %xmm0, %xmm0
+ 7626 FF
+ 7627 .LBE2106:
+ 7628 .LBE2105:
+ 7629 .LBE2104:
+ 7630 .LBE2103:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 7631 .loc 2 1688 0
+ 7632 6574 660F7F85 movdqa %xmm0, -8848(%rbp)
+ 7632 70DDFFFF
+ 7633 .LBB2107:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 7634 .loc 2 1689 0
+ 7635 657c 660F6F95 movdqa -8848(%rbp), %xmm2
+ 7635 70DDFFFF
+ 7636 6584 F30F7F95 movdqu %xmm2, -8496(%rbp)
+ 7636 D0DEFFFF
+ 7637 658c E8000000 call KDbgWriterGet at PLT
+ 7637 00
+ 7638 6591 4885C0 testq %rax, %rax
+ 7639 6594 7479 je .L117
+ 7640 6596 BF010000 movl $1, %edi
+ 7640 00
+ 7641 659b E8000000 call KDbgCondToFlag at PLT
+ 7641 00
+ 7642 65a0 4889C6 movq %rax, %rsi
+ 7643 65a3 BF100000 movl $16, %edi
+ 7643 00
+ 7644 65a8 E8000000 call KDbgTestModConds at PLT
+ 7644 00
+ 7645 65ad 84C0 testb %al, %al
+ 7646 65af 745E je .L117
+ 7647 65b1 8B85DCDE movl -8484(%rbp), %eax
+ 7647 FFFF
+ 7648 65b7 89C7 movl %eax, %edi
+ 7649 65b9 E8429AFF call bswap_32
+ 7649 FF
+ 7650 65be 4189C5 movl %eax, %r13d
+ 7651 65c1 8B85D8DE movl -8488(%rbp), %eax
+ 7651 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 249
+
+
+ 7652 65c7 89C7 movl %eax, %edi
+ 7653 65c9 E8329AFF call bswap_32
+ 7653 FF
+ 7654 65ce 4189C4 movl %eax, %r12d
+ 7655 65d1 8B85D4DE movl -8492(%rbp), %eax
+ 7655 FFFF
+ 7656 65d7 89C7 movl %eax, %edi
+ 7657 65d9 E8229AFF call bswap_32
+ 7657 FF
+ 7658 65de 89C3 movl %eax, %ebx
+ 7659 65e0 8B85D0DE movl -8496(%rbp), %eax
+ 7659 FFFF
+ 7660 65e6 89C7 movl %eax, %edi
+ 7661 65e8 E8139AFF call bswap_32
+ 7661 FF
+ 7662 65ed 4589E9 movl %r13d, %r9d
+ 7663 65f0 4589E0 movl %r12d, %r8d
+ 7664 65f3 89D9 movl %ebx, %ecx
+ 7665 65f5 89C2 movl %eax, %edx
+ 7666 65f7 488D3500 leaq .LC4(%rip), %rsi
+ 7666 000000
+ 7667 65fe 488D3D00 leaq .LC1(%rip), %rdi
+ 7667 000000
+ 7668 6605 B8000000 movl $0, %eax
+ 7668 00
+ 7669 660a E8000000 call KDbgMsg at PLT
+ 7669 00
+ 7670 .L117:
+ 7671 .LBE2107:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 7672 .loc 2 1690 0
+ 7673 660f 660F6F85 movdqa -8848(%rbp), %xmm0
+ 7673 70DDFFFF
+ 7674 .LBE2061:
+ 7675 .LBE2060:
+ 7676 .loc 2 1804 0
+ 7677 6617 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 7677 00DDFFFF
+1805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v2,0x02); /* F(k11): F(k11): F(k11) : F(k11) */
+1806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k12 : k13 : k14 : k15 */
+ 7678 .loc 2 1806 0
+ 7679 661f 660F6F85 movdqa -9040(%rbp), %xmm0
+ 7679 B0DCFFFF
+ 7680 6627 660FEF85 pxor -8960(%rbp), %xmm0
+ 7680 00DDFFFF
+ 7681 662f 660F7F85 movdqa %xmm0, -9040(%rbp)
+ 7681 B0DCFFFF
+1807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[3] = v0; /* K12:K13:K14:K15 */
+ 7682 .loc 2 1807 0
+ 7683 6637 488B85A8 movq -8536(%rbp), %rax
+ 7683 DEFFFF
+ 7684 663e 4883C030 addq $48, %rax
+ 7685 6642 660F6F95 movdqa -9040(%rbp), %xmm2
+ 7685 B0DCFFFF
+ 7686 664a 660F7F10 movdqa %xmm2, (%rax)
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k15 : k15 : k15 : k15 */
+ 7687 .loc 2 1808 0
+
GAS LISTING /tmp/ccjbMjHD.s page 250
+
+
+ 7688 664e 660F6F85 movdqa -9040(%rbp), %xmm0
+ 7688 B0DCFFFF
+ 7689 6656 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 7689 00DDFFFF
+ 7690 665e 660F6F95 movdqa -8960(%rbp), %xmm2
+ 7690 00DDFFFF
+ 7691 6666 F30F7F95 movdqu %xmm2, -6016(%rbp)
+ 7691 80E8FFFF
+ 7692 666e F30F6F85 movdqu -6016(%rbp), %xmm0
+ 7692 80E8FFFF
+ 7693 6676 F30F7F85 movdqu %xmm0, -5984(%rbp)
+ 7693 A0E8FFFF
+ 7694 .LBB2108:
+ 7695 .LBB2109:
+ 7696 .LBB2110:
+ 7697 .LBB2111:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 7698 .loc 3 450 0
+ 7699 667e F30F6F85 movdqu -5984(%rbp), %xmm0
+ 7699 A0E8FFFF
+ 7700 6686 660F70C0 pshufd $255, %xmm0, %xmm0
+ 7700 FF
+ 7701 .LBE2111:
+ 7702 .LBE2110:
+ 7703 .LBE2109:
+ 7704 .LBE2108:
+ 7705 .loc 2 1808 0
+ 7706 668b 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 7706 00DDFFFF
+1809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k16 : k17 : k16 : k17 */
+ 7707 .loc 2 1809 0
+ 7708 6693 660F6F85 movdqa -9024(%rbp), %xmm0
+ 7708 C0DCFFFF
+ 7709 669b 660FEF85 pxor -8960(%rbp), %xmm0
+ 7709 00DDFFFF
+ 7710 66a3 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 7710 C0DCFFFF
+1810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 7711 .loc 2 1815 0
+ 7712 66ab 660F6F95 movdqa -9024(%rbp), %xmm2
+ 7712 C0DCFFFF
+ 7713 66b3 660F7F95 movdqa %xmm2, -8960(%rbp)
+ 7713 00DDFFFF
+ 7714 66bb 660F6F85 movdqa -8960(%rbp), %xmm0
+ 7714 00DDFFFF
+ 7715 66c3 F30F7F85 movdqu %xmm0, -5952(%rbp)
+ 7715 C0E8FFFF
+ 7716 .LBB2112:
+ 7717 .LBB2113:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+ 7718 .loc 2 1629 0
+ 7719 66cb B8040000 movl $4, %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 251
+
+
+ 7719 00
+ 7720 66d0 0FB6C0 movzbl %al, %eax
+ 7721 66d3 8985E0E8 movl %eax, -5920(%rbp)
+ 7721 FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 7722 .loc 2 1630 0
+ 7723 66d9 F30F6F85 movdqu -5952(%rbp), %xmm0
+ 7723 C0E8FFFF
+ 7724 66e1 F30F7F85 movdqu %xmm0, -8416(%rbp)
+ 7724 20DFFFFF
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 7725 .loc 2 1631 0
+ 7726 66e9 8B8524DF movl -8412(%rbp), %eax
+ 7726 FFFF
+ 7727 66ef 8985E4E8 movl %eax, -5916(%rbp)
+ 7727 FFFF
+ 7728 .LBB2114:
+ 7729 .LBB2115:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 7730 .loc 2 740 0
+ 7731 66f5 8B85E4E8 movl -5916(%rbp), %eax
+ 7731 FFFF
+ 7732 66fb 898510DF movl %eax, -8432(%rbp)
+ 7732 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 7733 .loc 2 741 0
+ 7734 6701 C785E8E8 movl $0, -5912(%rbp)
+ 7734 FFFF0000
+ 7734 0000
+ 7735 670b EB36 jmp .L118
+ 7736 .L119:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 7737 .loc 2 742 0
+ 7738 670d 8B8DE8E8 movl -5912(%rbp), %ecx
+ 7738 FFFF
+ 7739 6713 8B85E8E8 movl -5912(%rbp), %eax
+ 7739 FFFF
+ 7740 6719 89C0 mov %eax, %eax
+ 7741 671b 0FB68405 movzbl -8432(%rbp,%rax), %eax
+ 7741 10DFFFFF
+ 7742 6723 0FB6C0 movzbl %al, %eax
+ 7743 6726 89C2 mov %eax, %edx
+ 7744 6728 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 7744 000000
+ 7745 672f 0FB61402 movzbl (%rdx,%rax), %edx
+ 7746 6733 89C8 mov %ecx, %eax
+ 7747 6735 88940510 movb %dl, -8432(%rbp,%rax)
+ 7747 DFFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 7748 .loc 2 741 0
+ 7749 673c 8385E8E8 addl $1, -5912(%rbp)
+ 7749 FFFF01
+ 7750 .L118:
+ 7751 6743 83BDE8E8 cmpl $3, -5912(%rbp)
+ 7751 FFFF03
+ 7752 674a 76C1 jbe .L119
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+
GAS LISTING /tmp/ccjbMjHD.s page 252
+
+
+ 7753 .loc 2 743 0
+ 7754 674c 8B8510DF movl -8432(%rbp), %eax
+ 7754 FFFF
+ 7755 .LBE2115:
+ 7756 .LBE2114:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 7757 .loc 2 1631 0
+ 7758 6752 8985DCE8 movl %eax, -5924(%rbp)
+ 7758 FFFF
+ 7759 6758 8B85DCE8 movl -5924(%rbp), %eax
+ 7759 FFFF
+ 7760 675e 8985ECE8 movl %eax, -5908(%rbp)
+ 7760 FFFF
+ 7761 .LBB2116:
+ 7762 .LBB2117:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+ 7763 .loc 2 1196 0
+ 7764 6764 8B85ECE8 movl -5908(%rbp), %eax
+ 7764 FFFF
+ 7765 676a C1C808 rorl $8, %eax
+ 7766 .LBE2117:
+ 7767 .LBE2116:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+ 7768 .loc 2 1632 0
+ 7769 676d 8985DCE8 movl %eax, -5924(%rbp)
+ 7769 FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+ 7770 .loc 2 1633 0
+ 7771 6773 8B85E0E8 movl -5920(%rbp), %eax
+ 7771 FFFF
+ 7772 6779 3185DCE8 xorl %eax, -5924(%rbp)
+ 7772 FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 7773 .loc 2 1635 0
+ 7774 677f 8B85DCE8 movl -5924(%rbp), %eax
+ 7774 FFFF
+ 7775 6785 89852CDF movl %eax, -8404(%rbp)
+ 7775 FFFF
+ 7776 678b 8B852CDF movl -8404(%rbp), %eax
+ 7776 FFFF
+ 7777 6791 898528DF movl %eax, -8408(%rbp)
+ 7777 FFFF
+ 7778 6797 8B8528DF movl -8408(%rbp), %eax
+ 7778 FFFF
+ 7779 679d 898524DF movl %eax, -8412(%rbp)
+ 7779 FFFF
+ 7780 67a3 8B8524DF movl -8412(%rbp), %eax
+ 7780 FFFF
+ 7781 67a9 898520DF movl %eax, -8416(%rbp)
+ 7781 FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 7782 .loc 2 1636 0
+ 7783 67af F30F6F85 movdqu -8416(%rbp), %xmm0
+ 7783 20DFFFFF
+ 7784 .LBE2113:
+ 7785 .LBE2112:
+ 7786 .loc 2 1815 0
+
GAS LISTING /tmp/ccjbMjHD.s page 253
+
+
+ 7787 67b7 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 7787 00DDFFFF
+ 7788 67bf 660F6F95 movdqa -9040(%rbp), %xmm2
+ 7788 B0DCFFFF
+ 7789 67c7 F30F7F95 movdqu %xmm2, -5904(%rbp)
+ 7789 F0E8FFFF
+ 7790 .LBB2118:
+ 7791 .LBB2119:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 7792 .loc 2 1565 0
+ 7793 67cf F30F6F85 movdqu -5904(%rbp), %xmm0
+ 7793 F0E8FFFF
+ 7794 67d7 660F7F85 movdqa %xmm0, -8816(%rbp)
+ 7794 90DDFFFF
+ 7795 67df 660F6F95 movdqa -8816(%rbp), %xmm2
+ 7795 90DDFFFF
+ 7796 67e7 F30F7F95 movdqu %xmm2, -5888(%rbp)
+ 7796 00E9FFFF
+ 7797 .LBB2120:
+ 7798 .LBB2121:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7799 .loc 2 1278 0
+ 7800 67ef 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7800 00000000
+ 7801 67f7 F30F6F8D movdqu -5888(%rbp), %xmm1
+ 7801 00E9FFFF
+ 7802 67ff F30F7F8D movdqu %xmm1, -5856(%rbp)
+ 7802 20E9FFFF
+ 7803 6807 F30F7F85 movdqu %xmm0, -5872(%rbp)
+ 7803 10E9FFFF
+ 7804 680f F30F6F85 movdqu -5856(%rbp), %xmm0
+ 7804 20E9FFFF
+ 7805 6817 F30F7F85 movdqu %xmm0, -5824(%rbp)
+ 7805 40E9FFFF
+ 7806 681f F30F6F85 movdqu -5872(%rbp), %xmm0
+ 7806 10E9FFFF
+ 7807 6827 F30F7F85 movdqu %xmm0, -5840(%rbp)
+ 7807 30E9FFFF
+ 7808 .LBB2122:
+ 7809 .LBB2123:
+ 7810 .LBB2124:
+ 7811 .LBB2125:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7812 .loc 3 529 0
+ 7813 682f F30F6F8D movdqu -5840(%rbp), %xmm1
+ 7813 30E9FFFF
+ 7814 6837 F30F6F85 movdqu -5824(%rbp), %xmm0
+ 7814 40E9FFFF
+ 7815 683f 660F3800 pshufb %xmm1, %xmm0
+ 7815 C1
+ 7816 .LBE2125:
+ 7817 .LBE2124:
+ 7818 .LBE2123:
+ 7819 .LBE2122:
+ 7820 .LBE2121:
+ 7821 .LBE2120:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccjbMjHD.s page 254
+
+
+ 7822 .loc 2 1567 0
+ 7823 6844 660F7F85 movdqa %xmm0, -8816(%rbp)
+ 7823 90DDFFFF
+ 7824 684c 660F6F85 movdqa -8816(%rbp), %xmm0
+ 7824 90DDFFFF
+ 7825 6854 660FEF85 pxor -5904(%rbp), %xmm0
+ 7825 F0E8FFFF
+ 7826 685c F30F7F85 movdqu %xmm0, -5904(%rbp)
+ 7826 F0E8FFFF
+ 7827 6864 660F6F85 movdqa -8816(%rbp), %xmm0
+ 7827 90DDFFFF
+ 7828 686c F30F7F85 movdqu %xmm0, -5808(%rbp)
+ 7828 50E9FFFF
+ 7829 .LBB2126:
+ 7830 .LBB2127:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7831 .loc 2 1278 0
+ 7832 6874 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7832 00000000
+ 7833 687c F30F6F8D movdqu -5808(%rbp), %xmm1
+ 7833 50E9FFFF
+ 7834 6884 F30F7F8D movdqu %xmm1, -5776(%rbp)
+ 7834 70E9FFFF
+ 7835 688c F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 7835 60E9FFFF
+ 7836 6894 F30F6F85 movdqu -5776(%rbp), %xmm0
+ 7836 70E9FFFF
+ 7837 689c F30F7F85 movdqu %xmm0, -5744(%rbp)
+ 7837 90E9FFFF
+ 7838 68a4 F30F6F85 movdqu -5792(%rbp), %xmm0
+ 7838 60E9FFFF
+ 7839 68ac F30F7F85 movdqu %xmm0, -5760(%rbp)
+ 7839 80E9FFFF
+ 7840 .LBB2128:
+ 7841 .LBB2129:
+ 7842 .LBB2130:
+ 7843 .LBB2131:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7844 .loc 3 529 0
+ 7845 68b4 F30F6F8D movdqu -5760(%rbp), %xmm1
+ 7845 80E9FFFF
+ 7846 68bc F30F6F85 movdqu -5744(%rbp), %xmm0
+ 7846 90E9FFFF
+ 7847 68c4 660F3800 pshufb %xmm1, %xmm0
+ 7847 C1
+ 7848 .LBE2131:
+ 7849 .LBE2130:
+ 7850 .LBE2129:
+ 7851 .LBE2128:
+ 7852 .LBE2127:
+ 7853 .LBE2126:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7854 .loc 2 1568 0
+ 7855 68c9 660F7F85 movdqa %xmm0, -8816(%rbp)
+ 7855 90DDFFFF
+ 7856 68d1 660F6F85 movdqa -8816(%rbp), %xmm0
+ 7856 90DDFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 255
+
+
+ 7857 68d9 660FEF85 pxor -5904(%rbp), %xmm0
+ 7857 F0E8FFFF
+ 7858 68e1 F30F7F85 movdqu %xmm0, -5904(%rbp)
+ 7858 F0E8FFFF
+ 7859 68e9 660F6F95 movdqa -8816(%rbp), %xmm2
+ 7859 90DDFFFF
+ 7860 68f1 F30F7F95 movdqu %xmm2, -5728(%rbp)
+ 7860 A0E9FFFF
+ 7861 .LBB2132:
+ 7862 .LBB2133:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7863 .loc 2 1278 0
+ 7864 68f9 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7864 00000000
+ 7865 6901 F30F6F8D movdqu -5728(%rbp), %xmm1
+ 7865 A0E9FFFF
+ 7866 6909 F30F7F8D movdqu %xmm1, -5696(%rbp)
+ 7866 C0E9FFFF
+ 7867 6911 F30F7F85 movdqu %xmm0, -5712(%rbp)
+ 7867 B0E9FFFF
+ 7868 6919 F30F6F85 movdqu -5696(%rbp), %xmm0
+ 7868 C0E9FFFF
+ 7869 6921 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 7869 E0E9FFFF
+ 7870 6929 F30F6F85 movdqu -5712(%rbp), %xmm0
+ 7870 B0E9FFFF
+ 7871 6931 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 7871 D0E9FFFF
+ 7872 .LBB2134:
+ 7873 .LBB2135:
+ 7874 .LBB2136:
+ 7875 .LBB2137:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7876 .loc 3 529 0
+ 7877 6939 F30F6F8D movdqu -5680(%rbp), %xmm1
+ 7877 D0E9FFFF
+ 7878 6941 F30F6F85 movdqu -5664(%rbp), %xmm0
+ 7878 E0E9FFFF
+ 7879 6949 660F3800 pshufb %xmm1, %xmm0
+ 7879 C1
+ 7880 .LBE2137:
+ 7881 .LBE2136:
+ 7882 .LBE2135:
+ 7883 .LBE2134:
+ 7884 .LBE2133:
+ 7885 .LBE2132:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7886 .loc 2 1569 0
+ 7887 694e 660F7F85 movdqa %xmm0, -8816(%rbp)
+ 7887 90DDFFFF
+ 7888 6956 660F6F85 movdqa -8816(%rbp), %xmm0
+ 7888 90DDFFFF
+ 7889 695e 660FEF85 pxor -5904(%rbp), %xmm0
+ 7889 F0E8FFFF
+ 7890 6966 F30F7F85 movdqu %xmm0, -5904(%rbp)
+ 7890 F0E8FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+
GAS LISTING /tmp/ccjbMjHD.s page 256
+
+
+ 7891 .loc 2 1571 0
+ 7892 696e F30F6F85 movdqu -5904(%rbp), %xmm0
+ 7892 F0E8FFFF
+ 7893 .LBE2119:
+ 7894 .LBE2118:
+1816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1,0x04); /* F(k17): F(k17): F(k17) : F(k17) */
+1817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k12 :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+ 7895 .loc 2 1817 0
+ 7896 6976 660F7F85 movdqa %xmm0, -8992(%rbp)
+ 7896 E0DCFFFF
+1818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k18 : k19 : k20 : k21 */
+ 7897 .loc 2 1818 0
+ 7898 697e 660F6F85 movdqa -8992(%rbp), %xmm0
+ 7898 E0DCFFFF
+ 7899 6986 660FEF85 pxor -8960(%rbp), %xmm0
+ 7899 00DDFFFF
+ 7900 698e 660F7F85 movdqa %xmm0, -8992(%rbp)
+ 7900 E0DCFFFF
+ 7901 6996 660F6F95 movdqa -9024(%rbp), %xmm2
+ 7901 C0DCFFFF
+ 7902 699e F30F7F95 movdqu %xmm2, -5648(%rbp)
+ 7902 F0E9FFFF
+ 7903 .LBB2138:
+ 7904 .LBB2139:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 7905 .loc 2 1565 0
+ 7906 69a6 F30F6F85 movdqu -5648(%rbp), %xmm0
+ 7906 F0E9FFFF
+ 7907 69ae 660F7F85 movdqa %xmm0, -8800(%rbp)
+ 7907 A0DDFFFF
+ 7908 69b6 660F6F95 movdqa -8800(%rbp), %xmm2
+ 7908 A0DDFFFF
+ 7909 69be F30F7F95 movdqu %xmm2, -5632(%rbp)
+ 7909 00EAFFFF
+ 7910 .LBB2140:
+ 7911 .LBB2141:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7912 .loc 2 1278 0
+ 7913 69c6 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7913 00000000
+ 7914 69ce F30F6F8D movdqu -5632(%rbp), %xmm1
+ 7914 00EAFFFF
+ 7915 69d6 F30F7F8D movdqu %xmm1, -5600(%rbp)
+ 7915 20EAFFFF
+ 7916 69de F30F7F85 movdqu %xmm0, -5616(%rbp)
+ 7916 10EAFFFF
+ 7917 69e6 F30F6F85 movdqu -5600(%rbp), %xmm0
+ 7917 20EAFFFF
+ 7918 69ee F30F7F85 movdqu %xmm0, -5568(%rbp)
+ 7918 40EAFFFF
+ 7919 69f6 F30F6F85 movdqu -5616(%rbp), %xmm0
+ 7919 10EAFFFF
+ 7920 69fe F30F7F85 movdqu %xmm0, -5584(%rbp)
+ 7920 30EAFFFF
+ 7921 .LBB2142:
+ 7922 .LBB2143:
+ 7923 .LBB2144:
+
GAS LISTING /tmp/ccjbMjHD.s page 257
+
+
+ 7924 .LBB2145:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7925 .loc 3 529 0
+ 7926 6a06 F30F6F8D movdqu -5584(%rbp), %xmm1
+ 7926 30EAFFFF
+ 7927 6a0e F30F6F85 movdqu -5568(%rbp), %xmm0
+ 7927 40EAFFFF
+ 7928 6a16 660F3800 pshufb %xmm1, %xmm0
+ 7928 C1
+ 7929 .LBE2145:
+ 7930 .LBE2144:
+ 7931 .LBE2143:
+ 7932 .LBE2142:
+ 7933 .LBE2141:
+ 7934 .LBE2140:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7935 .loc 2 1567 0
+ 7936 6a1b 660F7F85 movdqa %xmm0, -8800(%rbp)
+ 7936 A0DDFFFF
+ 7937 6a23 660F6F85 movdqa -8800(%rbp), %xmm0
+ 7937 A0DDFFFF
+ 7938 6a2b 660FEF85 pxor -5648(%rbp), %xmm0
+ 7938 F0E9FFFF
+ 7939 6a33 F30F7F85 movdqu %xmm0, -5648(%rbp)
+ 7939 F0E9FFFF
+ 7940 6a3b 660F6F85 movdqa -8800(%rbp), %xmm0
+ 7940 A0DDFFFF
+ 7941 6a43 F30F7F85 movdqu %xmm0, -5552(%rbp)
+ 7941 50EAFFFF
+ 7942 .LBB2146:
+ 7943 .LBB2147:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7944 .loc 2 1278 0
+ 7945 6a4b 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7945 00000000
+ 7946 6a53 F30F6F8D movdqu -5552(%rbp), %xmm1
+ 7946 50EAFFFF
+ 7947 6a5b F30F7F8D movdqu %xmm1, -5520(%rbp)
+ 7947 70EAFFFF
+ 7948 6a63 F30F7F85 movdqu %xmm0, -5536(%rbp)
+ 7948 60EAFFFF
+ 7949 6a6b F30F6F85 movdqu -5520(%rbp), %xmm0
+ 7949 70EAFFFF
+ 7950 6a73 F30F7F85 movdqu %xmm0, -5488(%rbp)
+ 7950 90EAFFFF
+ 7951 6a7b F30F6F85 movdqu -5536(%rbp), %xmm0
+ 7951 60EAFFFF
+ 7952 6a83 F30F7F85 movdqu %xmm0, -5504(%rbp)
+ 7952 80EAFFFF
+ 7953 .LBB2148:
+ 7954 .LBB2149:
+ 7955 .LBB2150:
+ 7956 .LBB2151:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7957 .loc 3 529 0
+ 7958 6a8b F30F6F8D movdqu -5504(%rbp), %xmm1
+ 7958 80EAFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 258
+
+
+ 7959 6a93 F30F6F85 movdqu -5488(%rbp), %xmm0
+ 7959 90EAFFFF
+ 7960 6a9b 660F3800 pshufb %xmm1, %xmm0
+ 7960 C1
+ 7961 .LBE2151:
+ 7962 .LBE2150:
+ 7963 .LBE2149:
+ 7964 .LBE2148:
+ 7965 .LBE2147:
+ 7966 .LBE2146:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7967 .loc 2 1568 0
+ 7968 6aa0 660F7F85 movdqa %xmm0, -8800(%rbp)
+ 7968 A0DDFFFF
+ 7969 6aa8 660F6F85 movdqa -8800(%rbp), %xmm0
+ 7969 A0DDFFFF
+ 7970 6ab0 660FEF85 pxor -5648(%rbp), %xmm0
+ 7970 F0E9FFFF
+ 7971 6ab8 F30F7F85 movdqu %xmm0, -5648(%rbp)
+ 7971 F0E9FFFF
+ 7972 6ac0 660F6F95 movdqa -8800(%rbp), %xmm2
+ 7972 A0DDFFFF
+ 7973 6ac8 F30F7F95 movdqu %xmm2, -5472(%rbp)
+ 7973 A0EAFFFF
+ 7974 .LBB2152:
+ 7975 .LBB2153:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7976 .loc 2 1278 0
+ 7977 6ad0 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 7977 00000000
+ 7978 6ad8 F30F6F8D movdqu -5472(%rbp), %xmm1
+ 7978 A0EAFFFF
+ 7979 6ae0 F30F7F8D movdqu %xmm1, -5440(%rbp)
+ 7979 C0EAFFFF
+ 7980 6ae8 F30F7F85 movdqu %xmm0, -5456(%rbp)
+ 7980 B0EAFFFF
+ 7981 6af0 F30F6F85 movdqu -5440(%rbp), %xmm0
+ 7981 C0EAFFFF
+ 7982 6af8 F30F7F85 movdqu %xmm0, -5408(%rbp)
+ 7982 E0EAFFFF
+ 7983 6b00 F30F6F85 movdqu -5456(%rbp), %xmm0
+ 7983 B0EAFFFF
+ 7984 6b08 F30F7F85 movdqu %xmm0, -5424(%rbp)
+ 7984 D0EAFFFF
+ 7985 .LBB2154:
+ 7986 .LBB2155:
+ 7987 .LBB2156:
+ 7988 .LBB2157:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7989 .loc 3 529 0
+ 7990 6b10 F30F6F8D movdqu -5424(%rbp), %xmm1
+ 7990 D0EAFFFF
+ 7991 6b18 F30F6F85 movdqu -5408(%rbp), %xmm0
+ 7991 E0EAFFFF
+ 7992 6b20 660F3800 pshufb %xmm1, %xmm0
+ 7992 C1
+ 7993 .LBE2157:
+
GAS LISTING /tmp/ccjbMjHD.s page 259
+
+
+ 7994 .LBE2156:
+ 7995 .LBE2155:
+ 7996 .LBE2154:
+ 7997 .LBE2153:
+ 7998 .LBE2152:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7999 .loc 2 1569 0
+ 8000 6b25 660F7F85 movdqa %xmm0, -8800(%rbp)
+ 8000 A0DDFFFF
+ 8001 6b2d 660F6F85 movdqa -8800(%rbp), %xmm0
+ 8001 A0DDFFFF
+ 8002 6b35 660FEF85 pxor -5648(%rbp), %xmm0
+ 8002 F0E9FFFF
+ 8003 6b3d F30F7F85 movdqu %xmm0, -5648(%rbp)
+ 8003 F0E9FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8004 .loc 2 1571 0
+ 8005 6b45 F30F6F85 movdqu -5648(%rbp), %xmm0
+ 8005 F0E9FFFF
+ 8006 .LBE2139:
+ 8007 .LBE2138:
+1819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k16 :k16^k17: k17 : 0 */
+ 8008 .loc 2 1819 0
+ 8009 6b4d 660F7F85 movdqa %xmm0, -8976(%rbp)
+ 8009 F0DCFFFF
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k21 : k21 : k21 : k21 */
+ 8010 .loc 2 1820 0
+ 8011 6b55 660F6F85 movdqa -8992(%rbp), %xmm0
+ 8011 E0DCFFFF
+ 8012 6b5d 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 8012 00DDFFFF
+ 8013 6b65 660F6F95 movdqa -8960(%rbp), %xmm2
+ 8013 00DDFFFF
+ 8014 6b6d F30F7F95 movdqu %xmm2, -5392(%rbp)
+ 8014 F0EAFFFF
+ 8015 6b75 F30F6F85 movdqu -5392(%rbp), %xmm0
+ 8015 F0EAFFFF
+ 8016 6b7d F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 8016 10EBFFFF
+ 8017 .LBB2158:
+ 8018 .LBB2159:
+ 8019 .LBB2160:
+ 8020 .LBB2161:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 8021 .loc 3 450 0
+ 8022 6b85 F30F6F85 movdqu -5360(%rbp), %xmm0
+ 8022 10EBFFFF
+ 8023 6b8d 660F70C0 pshufd $255, %xmm0, %xmm0
+ 8023 FF
+ 8024 .LBE2161:
+ 8025 .LBE2160:
+ 8026 .LBE2159:
+ 8027 .LBE2158:
+ 8028 .loc 2 1820 0
+ 8029 6b92 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 8029 00DDFFFF
+1821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k22 : k23 : x : x */
+
GAS LISTING /tmp/ccjbMjHD.s page 260
+
+
+ 8030 .loc 2 1821 0
+ 8031 6b9a 660F6F85 movdqa -8976(%rbp), %xmm0
+ 8031 F0DCFFFF
+ 8032 6ba2 660FEF85 pxor -8960(%rbp), %xmm0
+ 8032 00DDFFFF
+ 8033 6baa 660F7F85 movdqa %xmm0, -8976(%rbp)
+ 8033 F0DCFFFF
+ 8034 6bb2 660F6F95 movdqa -9024(%rbp), %xmm2
+ 8034 C0DCFFFF
+ 8035 6bba F30F7F95 movdqu %xmm2, -5328(%rbp)
+ 8035 30EBFFFF
+ 8036 6bc2 660F6F85 movdqa -8992(%rbp), %xmm0
+ 8036 E0DCFFFF
+ 8037 6bca F30F7F85 movdqu %xmm0, -5344(%rbp)
+ 8037 20EBFFFF
+ 8038 6bd2 F30F6F85 movdqu -5328(%rbp), %xmm0
+ 8038 30EBFFFF
+ 8039 6bda F30F7F85 movdqu %xmm0, -5280(%rbp)
+ 8039 60EBFFFF
+ 8040 6be2 F30F6F85 movdqu -5344(%rbp), %xmm0
+ 8040 20EBFFFF
+ 8041 6bea F30F7F85 movdqu %xmm0, -5296(%rbp)
+ 8041 50EBFFFF
+ 8042 .LBB2162:
+ 8043 .LBB2163:
+ 8044 .LBB2164:
+ 8045 .LBB2165:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 8046 .loc 3 366 0
+ 8047 6bf2 F20F1085 movsd -5296(%rbp), %xmm0
+ 8047 50EBFFFF
+ 8048 6bfa 660F1685 movhpd -5288(%rbp), %xmm0
+ 8048 58EBFFFF
+ 8049 6c02 F20F108D movsd -5280(%rbp), %xmm1
+ 8049 60EBFFFF
+ 8050 6c0a 660F168D movhpd -5272(%rbp), %xmm1
+ 8050 68EBFFFF
+ 8051 6c12 660F28D1 movapd %xmm1, %xmm2
+ 8052 6c16 660F14D0 unpcklpd %xmm0, %xmm2
+ 8053 6c1a 660F28C2 movapd %xmm2, %xmm0
+ 8054 .LBE2165:
+ 8055 .LBE2164:
+ 8056 .LBE2163:
+ 8057 .LBE2162:
+1822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k16 : k17 : k18 : k19 */
+ 8058 .loc 2 1822 0
+ 8059 6c1e 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 8059 C0DCFFFF
+1823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[4] = v1; /* K16:K17:K18:K19 */
+ 8060 .loc 2 1823 0
+ 8061 6c26 488B85A8 movq -8536(%rbp), %rax
+ 8061 DEFFFF
+ 8062 6c2d 4883C040 addq $64, %rax
+ 8063 6c31 660F6F85 movdqa -9024(%rbp), %xmm0
+ 8063 C0DCFFFF
+ 8064 6c39 660F7F00 movdqa %xmm0, (%rax)
+ 8065 6c3d 660F6F95 movdqa -8992(%rbp), %xmm2
+
GAS LISTING /tmp/ccjbMjHD.s page 261
+
+
+ 8065 E0DCFFFF
+ 8066 6c45 F30F7F95 movdqu %xmm2, -5248(%rbp)
+ 8066 80EBFFFF
+ 8067 6c4d 660F6F85 movdqa -8976(%rbp), %xmm0
+ 8067 F0DCFFFF
+ 8068 6c55 F30F7F85 movdqu %xmm0, -5264(%rbp)
+ 8068 70EBFFFF
+ 8069 6c5d F30F6F85 movdqu -5248(%rbp), %xmm0
+ 8069 80EBFFFF
+ 8070 6c65 F30F7F85 movdqu %xmm0, -5200(%rbp)
+ 8070 B0EBFFFF
+ 8071 6c6d F30F6F85 movdqu -5264(%rbp), %xmm0
+ 8071 70EBFFFF
+ 8072 6c75 F30F7F85 movdqu %xmm0, -5216(%rbp)
+ 8072 A0EBFFFF
+ 8073 .LBB2166:
+ 8074 .LBB2167:
+ 8075 .LBB2168:
+ 8076 .LBB2169:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 8077 .loc 3 366 0
+ 8078 6c7d F20F108D movsd -5216(%rbp), %xmm1
+ 8078 A0EBFFFF
+ 8079 6c85 660F168D movhpd -5208(%rbp), %xmm1
+ 8079 A8EBFFFF
+ 8080 6c8d F20F1085 movsd -5200(%rbp), %xmm0
+ 8080 B0EBFFFF
+ 8081 6c95 660F1685 movhpd -5192(%rbp), %xmm0
+ 8081 B8EBFFFF
+ 8082 6c9d 660FC6C1 shufpd $1, %xmm1, %xmm0
+ 8082 01
+ 8083 .LBE2169:
+ 8084 .LBE2168:
+ 8085 .LBE2167:
+ 8086 .LBE2166:
+1824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k20 : k21 : k22 : k23 */
+ 8087 .loc 2 1825 0
+ 8088 6ca2 660F7F85 movdqa %xmm0, -9008(%rbp)
+ 8088 D0DCFFFF
+1826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[5] = v2; /* K20:K21:K22:K23 */
+ 8089 .loc 2 1826 0
+ 8090 6caa 488B85A8 movq -8536(%rbp), %rax
+ 8090 DEFFFF
+ 8091 6cb1 4883C050 addq $80, %rax
+ 8092 6cb5 660F6F95 movdqa -9008(%rbp), %xmm2
+ 8092 D0DCFFFF
+ 8093 6cbd 660F7F10 movdqa %xmm2, (%rax)
+ 8094 6cc1 660F6F85 movdqa -8992(%rbp), %xmm0
+ 8094 E0DCFFFF
+ 8095 6cc9 F30F7F85 movdqu %xmm0, -5184(%rbp)
+ 8095 C0EBFFFF
+ 8096 .LBB2170:
+ 8097 .LBB2171:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 8098 .loc 2 1565 0
+ 8099 6cd1 F30F6F95 movdqu -5184(%rbp), %xmm2
+
GAS LISTING /tmp/ccjbMjHD.s page 262
+
+
+ 8099 C0EBFFFF
+ 8100 6cd9 660F7F95 movdqa %xmm2, -8784(%rbp)
+ 8100 B0DDFFFF
+ 8101 6ce1 660F6F85 movdqa -8784(%rbp), %xmm0
+ 8101 B0DDFFFF
+ 8102 6ce9 F30F7F85 movdqu %xmm0, -5168(%rbp)
+ 8102 D0EBFFFF
+ 8103 .LBB2172:
+ 8104 .LBB2173:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8105 .loc 2 1278 0
+ 8106 6cf1 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8106 00000000
+ 8107 6cf9 F30F6F8D movdqu -5168(%rbp), %xmm1
+ 8107 D0EBFFFF
+ 8108 6d01 F30F7F8D movdqu %xmm1, -5136(%rbp)
+ 8108 F0EBFFFF
+ 8109 6d09 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 8109 E0EBFFFF
+ 8110 6d11 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 8110 F0EBFFFF
+ 8111 6d19 F30F7F85 movdqu %xmm0, -5104(%rbp)
+ 8111 10ECFFFF
+ 8112 6d21 F30F6F85 movdqu -5152(%rbp), %xmm0
+ 8112 E0EBFFFF
+ 8113 6d29 F30F7F85 movdqu %xmm0, -5120(%rbp)
+ 8113 00ECFFFF
+ 8114 .LBB2174:
+ 8115 .LBB2175:
+ 8116 .LBB2176:
+ 8117 .LBB2177:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8118 .loc 3 529 0
+ 8119 6d31 F30F6F8D movdqu -5120(%rbp), %xmm1
+ 8119 00ECFFFF
+ 8120 6d39 F30F6F85 movdqu -5104(%rbp), %xmm0
+ 8120 10ECFFFF
+ 8121 6d41 660F3800 pshufb %xmm1, %xmm0
+ 8121 C1
+ 8122 .LBE2177:
+ 8123 .LBE2176:
+ 8124 .LBE2175:
+ 8125 .LBE2174:
+ 8126 .LBE2173:
+ 8127 .LBE2172:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8128 .loc 2 1567 0
+ 8129 6d46 660F7F85 movdqa %xmm0, -8784(%rbp)
+ 8129 B0DDFFFF
+ 8130 6d4e 660F6F85 movdqa -8784(%rbp), %xmm0
+ 8130 B0DDFFFF
+ 8131 6d56 660FEF85 pxor -5184(%rbp), %xmm0
+ 8131 C0EBFFFF
+ 8132 6d5e F30F7F85 movdqu %xmm0, -5184(%rbp)
+ 8132 C0EBFFFF
+ 8133 6d66 660F6F95 movdqa -8784(%rbp), %xmm2
+ 8133 B0DDFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 263
+
+
+ 8134 6d6e F30F7F95 movdqu %xmm2, -5088(%rbp)
+ 8134 20ECFFFF
+ 8135 .LBB2178:
+ 8136 .LBB2179:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8137 .loc 2 1278 0
+ 8138 6d76 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8138 00000000
+ 8139 6d7e F30F6F8D movdqu -5088(%rbp), %xmm1
+ 8139 20ECFFFF
+ 8140 6d86 F30F7F8D movdqu %xmm1, -5056(%rbp)
+ 8140 40ECFFFF
+ 8141 6d8e F30F7F85 movdqu %xmm0, -5072(%rbp)
+ 8141 30ECFFFF
+ 8142 6d96 F30F6F85 movdqu -5056(%rbp), %xmm0
+ 8142 40ECFFFF
+ 8143 6d9e F30F7F85 movdqu %xmm0, -5024(%rbp)
+ 8143 60ECFFFF
+ 8144 6da6 F30F6F85 movdqu -5072(%rbp), %xmm0
+ 8144 30ECFFFF
+ 8145 6dae F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 8145 50ECFFFF
+ 8146 .LBB2180:
+ 8147 .LBB2181:
+ 8148 .LBB2182:
+ 8149 .LBB2183:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8150 .loc 3 529 0
+ 8151 6db6 F30F6F8D movdqu -5040(%rbp), %xmm1
+ 8151 50ECFFFF
+ 8152 6dbe F30F6F85 movdqu -5024(%rbp), %xmm0
+ 8152 60ECFFFF
+ 8153 6dc6 660F3800 pshufb %xmm1, %xmm0
+ 8153 C1
+ 8154 .LBE2183:
+ 8155 .LBE2182:
+ 8156 .LBE2181:
+ 8157 .LBE2180:
+ 8158 .LBE2179:
+ 8159 .LBE2178:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8160 .loc 2 1568 0
+ 8161 6dcb 660F7F85 movdqa %xmm0, -8784(%rbp)
+ 8161 B0DDFFFF
+ 8162 6dd3 660F6F85 movdqa -8784(%rbp), %xmm0
+ 8162 B0DDFFFF
+ 8163 6ddb 660FEF85 pxor -5184(%rbp), %xmm0
+ 8163 C0EBFFFF
+ 8164 6de3 F30F7F85 movdqu %xmm0, -5184(%rbp)
+ 8164 C0EBFFFF
+ 8165 6deb 660F6F85 movdqa -8784(%rbp), %xmm0
+ 8165 B0DDFFFF
+ 8166 6df3 F30F7F85 movdqu %xmm0, -5008(%rbp)
+ 8166 70ECFFFF
+ 8167 .LBB2184:
+ 8168 .LBB2185:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccjbMjHD.s page 264
+
+
+ 8169 .loc 2 1278 0
+ 8170 6dfb 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8170 00000000
+ 8171 6e03 F30F6F8D movdqu -5008(%rbp), %xmm1
+ 8171 70ECFFFF
+ 8172 6e0b F30F7F8D movdqu %xmm1, -4976(%rbp)
+ 8172 90ECFFFF
+ 8173 6e13 F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 8173 80ECFFFF
+ 8174 6e1b F30F6F85 movdqu -4976(%rbp), %xmm0
+ 8174 90ECFFFF
+ 8175 6e23 F30F7F85 movdqu %xmm0, -4944(%rbp)
+ 8175 B0ECFFFF
+ 8176 6e2b F30F6F85 movdqu -4992(%rbp), %xmm0
+ 8176 80ECFFFF
+ 8177 6e33 F30F7F85 movdqu %xmm0, -4960(%rbp)
+ 8177 A0ECFFFF
+ 8178 .LBB2186:
+ 8179 .LBB2187:
+ 8180 .LBB2188:
+ 8181 .LBB2189:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8182 .loc 3 529 0
+ 8183 6e3b F30F6F8D movdqu -4960(%rbp), %xmm1
+ 8183 A0ECFFFF
+ 8184 6e43 F30F6F85 movdqu -4944(%rbp), %xmm0
+ 8184 B0ECFFFF
+ 8185 6e4b 660F3800 pshufb %xmm1, %xmm0
+ 8185 C1
+ 8186 .LBE2189:
+ 8187 .LBE2188:
+ 8188 .LBE2187:
+ 8189 .LBE2186:
+ 8190 .LBE2185:
+ 8191 .LBE2184:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8192 .loc 2 1569 0
+ 8193 6e50 660F7F85 movdqa %xmm0, -8784(%rbp)
+ 8193 B0DDFFFF
+ 8194 6e58 660F6F85 movdqa -8784(%rbp), %xmm0
+ 8194 B0DDFFFF
+ 8195 6e60 660FEF85 pxor -5184(%rbp), %xmm0
+ 8195 C0EBFFFF
+ 8196 6e68 F30F7F85 movdqu %xmm0, -5184(%rbp)
+ 8196 C0EBFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8197 .loc 2 1571 0
+ 8198 6e70 F30F6F85 movdqu -5184(%rbp), %xmm0
+ 8198 C0EBFFFF
+ 8199 .LBE2171:
+ 8200 .LBE2170:
+1827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k18 :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+ 8201 .loc 2 1829 0
+ 8202 6e78 660F7F85 movdqa %xmm0, -9040(%rbp)
+ 8202 B0DCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 265
+
+
+ 8203 6e80 660F6F95 movdqa -8976(%rbp), %xmm2
+ 8203 F0DCFFFF
+ 8204 6e88 F30F7F95 movdqu %xmm2, -4928(%rbp)
+ 8204 C0ECFFFF
+ 8205 .LBB2190:
+ 8206 .LBB2191:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 8207 .loc 2 1565 0
+ 8208 6e90 F30F6F85 movdqu -4928(%rbp), %xmm0
+ 8208 C0ECFFFF
+ 8209 6e98 660F7F85 movdqa %xmm0, -8768(%rbp)
+ 8209 C0DDFFFF
+ 8210 6ea0 660F6F95 movdqa -8768(%rbp), %xmm2
+ 8210 C0DDFFFF
+ 8211 6ea8 F30F7F95 movdqu %xmm2, -4912(%rbp)
+ 8211 D0ECFFFF
+ 8212 .LBB2192:
+ 8213 .LBB2193:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8214 .loc 2 1278 0
+ 8215 6eb0 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8215 00000000
+ 8216 6eb8 F30F6F8D movdqu -4912(%rbp), %xmm1
+ 8216 D0ECFFFF
+ 8217 6ec0 F30F7F8D movdqu %xmm1, -4880(%rbp)
+ 8217 F0ECFFFF
+ 8218 6ec8 F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 8218 E0ECFFFF
+ 8219 6ed0 F30F6F85 movdqu -4880(%rbp), %xmm0
+ 8219 F0ECFFFF
+ 8220 6ed8 F30F7F85 movdqu %xmm0, -4848(%rbp)
+ 8220 10EDFFFF
+ 8221 6ee0 F30F6F85 movdqu -4896(%rbp), %xmm0
+ 8221 E0ECFFFF
+ 8222 6ee8 F30F7F85 movdqu %xmm0, -4864(%rbp)
+ 8222 00EDFFFF
+ 8223 .LBB2194:
+ 8224 .LBB2195:
+ 8225 .LBB2196:
+ 8226 .LBB2197:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8227 .loc 3 529 0
+ 8228 6ef0 F30F6F8D movdqu -4864(%rbp), %xmm1
+ 8228 00EDFFFF
+ 8229 6ef8 F30F6F85 movdqu -4848(%rbp), %xmm0
+ 8229 10EDFFFF
+ 8230 6f00 660F3800 pshufb %xmm1, %xmm0
+ 8230 C1
+ 8231 .LBE2197:
+ 8232 .LBE2196:
+ 8233 .LBE2195:
+ 8234 .LBE2194:
+ 8235 .LBE2193:
+ 8236 .LBE2192:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8237 .loc 2 1567 0
+ 8238 6f05 660F7F85 movdqa %xmm0, -8768(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 266
+
+
+ 8238 C0DDFFFF
+ 8239 6f0d 660F6F85 movdqa -8768(%rbp), %xmm0
+ 8239 C0DDFFFF
+ 8240 6f15 660FEF85 pxor -4928(%rbp), %xmm0
+ 8240 C0ECFFFF
+ 8241 6f1d F30F7F85 movdqu %xmm0, -4928(%rbp)
+ 8241 C0ECFFFF
+ 8242 6f25 660F6F85 movdqa -8768(%rbp), %xmm0
+ 8242 C0DDFFFF
+ 8243 6f2d F30F7F85 movdqu %xmm0, -4832(%rbp)
+ 8243 20EDFFFF
+ 8244 .LBB2198:
+ 8245 .LBB2199:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8246 .loc 2 1278 0
+ 8247 6f35 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8247 00000000
+ 8248 6f3d F30F6F8D movdqu -4832(%rbp), %xmm1
+ 8248 20EDFFFF
+ 8249 6f45 F30F7F8D movdqu %xmm1, -4800(%rbp)
+ 8249 40EDFFFF
+ 8250 6f4d F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 8250 30EDFFFF
+ 8251 6f55 F30F6F85 movdqu -4800(%rbp), %xmm0
+ 8251 40EDFFFF
+ 8252 6f5d F30F7F85 movdqu %xmm0, -4768(%rbp)
+ 8252 60EDFFFF
+ 8253 6f65 F30F6F85 movdqu -4816(%rbp), %xmm0
+ 8253 30EDFFFF
+ 8254 6f6d F30F7F85 movdqu %xmm0, -4784(%rbp)
+ 8254 50EDFFFF
+ 8255 .LBB2200:
+ 8256 .LBB2201:
+ 8257 .LBB2202:
+ 8258 .LBB2203:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8259 .loc 3 529 0
+ 8260 6f75 F30F6F8D movdqu -4784(%rbp), %xmm1
+ 8260 50EDFFFF
+ 8261 6f7d F30F6F85 movdqu -4768(%rbp), %xmm0
+ 8261 60EDFFFF
+ 8262 6f85 660F3800 pshufb %xmm1, %xmm0
+ 8262 C1
+ 8263 .LBE2203:
+ 8264 .LBE2202:
+ 8265 .LBE2201:
+ 8266 .LBE2200:
+ 8267 .LBE2199:
+ 8268 .LBE2198:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8269 .loc 2 1568 0
+ 8270 6f8a 660F7F85 movdqa %xmm0, -8768(%rbp)
+ 8270 C0DDFFFF
+ 8271 6f92 660F6F85 movdqa -8768(%rbp), %xmm0
+ 8271 C0DDFFFF
+ 8272 6f9a 660FEF85 pxor -4928(%rbp), %xmm0
+ 8272 C0ECFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 267
+
+
+ 8273 6fa2 F30F7F85 movdqu %xmm0, -4928(%rbp)
+ 8273 C0ECFFFF
+ 8274 6faa 660F6F95 movdqa -8768(%rbp), %xmm2
+ 8274 C0DDFFFF
+ 8275 6fb2 F30F7F95 movdqu %xmm2, -4752(%rbp)
+ 8275 70EDFFFF
+ 8276 .LBB2204:
+ 8277 .LBB2205:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8278 .loc 2 1278 0
+ 8279 6fba 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8279 00000000
+ 8280 6fc2 F30F6F8D movdqu -4752(%rbp), %xmm1
+ 8280 70EDFFFF
+ 8281 6fca F30F7F8D movdqu %xmm1, -4720(%rbp)
+ 8281 90EDFFFF
+ 8282 6fd2 F30F7F85 movdqu %xmm0, -4736(%rbp)
+ 8282 80EDFFFF
+ 8283 6fda F30F6F85 movdqu -4720(%rbp), %xmm0
+ 8283 90EDFFFF
+ 8284 6fe2 F30F7F85 movdqu %xmm0, -4688(%rbp)
+ 8284 B0EDFFFF
+ 8285 6fea F30F6F85 movdqu -4736(%rbp), %xmm0
+ 8285 80EDFFFF
+ 8286 6ff2 F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 8286 A0EDFFFF
+ 8287 .LBB2206:
+ 8288 .LBB2207:
+ 8289 .LBB2208:
+ 8290 .LBB2209:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8291 .loc 3 529 0
+ 8292 6ffa F30F6F8D movdqu -4704(%rbp), %xmm1
+ 8292 A0EDFFFF
+ 8293 7002 F30F6F85 movdqu -4688(%rbp), %xmm0
+ 8293 B0EDFFFF
+ 8294 700a 660F3800 pshufb %xmm1, %xmm0
+ 8294 C1
+ 8295 .LBE2209:
+ 8296 .LBE2208:
+ 8297 .LBE2207:
+ 8298 .LBE2206:
+ 8299 .LBE2205:
+ 8300 .LBE2204:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8301 .loc 2 1569 0
+ 8302 700f 660F7F85 movdqa %xmm0, -8768(%rbp)
+ 8302 C0DDFFFF
+ 8303 7017 660F6F85 movdqa -8768(%rbp), %xmm0
+ 8303 C0DDFFFF
+ 8304 701f 660FEF85 pxor -4928(%rbp), %xmm0
+ 8304 C0ECFFFF
+ 8305 7027 F30F7F85 movdqu %xmm0, -4928(%rbp)
+ 8305 C0ECFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8306 .loc 2 1571 0
+ 8307 702f F30F6F85 movdqu -4928(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 268
+
+
+ 8307 C0ECFFFF
+ 8308 .LBE2191:
+ 8309 .LBE2190:
+1830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k22 :k22^k23: k23 : 0 */
+ 8310 .loc 2 1830 0
+ 8311 7037 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 8311 C0DCFFFF
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 8312 .loc 2 1831 0
+ 8313 703f 660F6F85 movdqa -9008(%rbp), %xmm0
+ 8313 D0DCFFFF
+ 8314 7047 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 8314 00DDFFFF
+ 8315 704f 660F6F95 movdqa -8960(%rbp), %xmm2
+ 8315 00DDFFFF
+ 8316 7057 F30F7F95 movdqu %xmm2, -4656(%rbp)
+ 8316 D0EDFFFF
+ 8317 .LBB2210:
+ 8318 .LBB2211:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 8319 .loc 2 1681 0
+ 8320 705f B8080000 movl $8, %eax
+ 8320 00
+ 8321 7064 660F6F05 movdqa vec_00(%rip), %xmm0
+ 8321 00000000
+ 8322 706c F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 8322 F0EDFFFF
+ 8323 7074 8985ECED movl %eax, -4628(%rbp)
+ 8323 FFFF
+ 8324 707a F30F6F85 movdqu -4624(%rbp), %xmm0
+ 8324 F0EDFFFF
+ 8325 7082 F30F7F85 movdqu %xmm0, -4592(%rbp)
+ 8325 10EEFFFF
+ 8326 708a 8B85ECED movl -4628(%rbp), %eax
+ 8326 FFFF
+ 8327 7090 89850CEE movl %eax, -4596(%rbp)
+ 8327 FFFF
+ 8328 .LBB2212:
+ 8329 .LBB2213:
+ 8330 .LBB2214:
+ 8331 .LBB2215:
+ 8332 .loc 3 598 0
+ 8333 7096 8B850CEE movl -4596(%rbp), %eax
+ 8333 FFFF
+ 8334 709c F30F6F85 movdqu -4592(%rbp), %xmm0
+ 8334 10EEFFFF
+ 8335 70a4 660F3A22 pinsrd $3, %eax, %xmm0
+ 8335 C003
+ 8336 .LBE2215:
+ 8337 .LBE2214:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 8338 .loc 2 519 0
+ 8339 70aa F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 8339 F0EDFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8340 .loc 2 526 0
+ 8341 70b2 F30F6F85 movdqu -4624(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 269
+
+
+ 8341 F0EDFFFF
+ 8342 .LBE2213:
+ 8343 .LBE2212:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 8344 .loc 2 1681 0
+ 8345 70ba 660F7F85 movdqa %xmm0, -8736(%rbp)
+ 8345 E0DDFFFF
+ 8346 70c2 F30F6F85 movdqu -4656(%rbp), %xmm0
+ 8346 D0EDFFFF
+ 8347 70ca F30F7F85 movdqu %xmm0, -4576(%rbp)
+ 8347 20EEFFFF
+ 8348 70d2 F30F6F85 movdqu -4576(%rbp), %xmm0
+ 8348 20EEFFFF
+ 8349 70da F30F7F85 movdqu %xmm0, -4544(%rbp)
+ 8349 40EEFFFF
+ 8350 70e2 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 8350 000000
+ 8351 70e9 48898538 movq %rax, -4552(%rbp)
+ 8351 EEFFFF
+ 8352 .LBB2216:
+ 8353 .LBB2217:
+ 8354 .LBB2218:
+ 8355 .LBB2219:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 8356 .loc 2 851 0
+ 8357 70f0 660F6F05 movdqa vec_00(%rip), %xmm0
+ 8357 00000000
+ 8358 70f8 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 8358 60EEFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 8359 .loc 2 854 0
+ 8360 7100 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 8360 00000000
+ 8361 7108 F30F6F8D movdqu -4544(%rbp), %xmm1
+ 8361 40EEFFFF
+ 8362 7110 F30F7F8D movdqu %xmm1, -4432(%rbp)
+ 8362 B0EEFFFF
+ 8363 7118 F30F7F85 movdqu %xmm0, -4448(%rbp)
+ 8363 A0EEFFFF
+ 8364 .LBB2220:
+ 8365 .LBB2221:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 8366 .loc 2 206 0
+ 8367 7120 F30F6F85 movdqu -4448(%rbp), %xmm0
+ 8367 A0EEFFFF
+ 8368 7128 F30F6F8D movdqu -4432(%rbp), %xmm1
+ 8368 B0EEFFFF
+ 8369 7130 660FDBC1 pand %xmm1, %xmm0
+ 8370 .LBE2221:
+ 8371 .LBE2220:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 8372 .loc 2 854 0
+ 8373 7134 F30F7F85 movdqu %xmm0, -4464(%rbp)
+ 8373 90EEFFFF
+ 8374 713c F30F6F85 movdqu -4544(%rbp), %xmm0
+ 8374 40EEFFFF
+ 8375 7144 F30F7F85 movdqu %xmm0, -4400(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 270
+
+
+ 8375 D0EEFFFF
+ 8376 .LBB2222:
+ 8377 .LBB2223:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 8378 .loc 3 433 0
+ 8379 714c F30F6F85 movdqu -4400(%rbp), %xmm0
+ 8379 D0EEFFFF
+ 8380 7154 660F72D0 psrld $4, %xmm0
+ 8380 04
+ 8381 .LBE2223:
+ 8382 .LBE2222:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 8383 .loc 2 857 0
+ 8384 7159 F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 8384 80EEFFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8385 .loc 2 859 0
+ 8386 7161 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 8386 00000000
+ 8387 7169 F30F6F8D movdqu -4480(%rbp), %xmm1
+ 8387 80EEFFFF
+ 8388 7171 F30F7F8D movdqu %xmm1, -4368(%rbp)
+ 8388 F0EEFFFF
+ 8389 7179 F30F7F85 movdqu %xmm0, -4384(%rbp)
+ 8389 E0EEFFFF
+ 8390 .LBB2224:
+ 8391 .LBB2225:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 8392 .loc 2 206 0
+ 8393 7181 F30F6F85 movdqu -4384(%rbp), %xmm0
+ 8393 E0EEFFFF
+ 8394 7189 F30F6F8D movdqu -4368(%rbp), %xmm1
+ 8394 F0EEFFFF
+ 8395 7191 660FDBC1 pand %xmm1, %xmm0
+ 8396 .LBE2225:
+ 8397 .LBE2224:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8398 .loc 2 859 0
+ 8399 7195 F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 8399 80EEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 8400 .loc 2 866 0
+ 8401 719d C7855CEE movl $0, -4516(%rbp)
+ 8401 FFFF0000
+ 8401 0000
+ 8402 71a7 E9BE0100 jmp .L120
+ 8402 00
+ 8403 .L121:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 8404 .loc 2 868 0
+ 8405 71ac 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 8405 00000000
+ 8406 71b4 F30F7F85 movdqu %xmm0, -4336(%rbp)
+ 8406 10EFFFFF
+ 8407 71bc F30F6F85 movdqu -4480(%rbp), %xmm0
+ 8407 80EEFFFF
+ 8408 71c4 F30F7F85 movdqu %xmm0, -4352(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 271
+
+
+ 8408 00EFFFFF
+ 8409 71cc F30F6F85 movdqu -4336(%rbp), %xmm0
+ 8409 10EFFFFF
+ 8410 71d4 F30F7F85 movdqu %xmm0, -4304(%rbp)
+ 8410 30EFFFFF
+ 8411 71dc F30F6F85 movdqu -4352(%rbp), %xmm0
+ 8411 00EFFFFF
+ 8412 71e4 F30F7F85 movdqu %xmm0, -4320(%rbp)
+ 8412 20EFFFFF
+ 8413 .LBB2226:
+ 8414 .LBB2227:
+ 8415 .LBB2228:
+ 8416 .LBB2229:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8417 .loc 3 529 0
+ 8418 71ec F30F6F8D movdqu -4320(%rbp), %xmm1
+ 8418 20EFFFFF
+ 8419 71f4 F30F6F85 movdqu -4304(%rbp), %xmm0
+ 8419 30EFFFFF
+ 8420 71fc 660F3800 pshufb %xmm1, %xmm0
+ 8420 C1
+ 8421 .LBE2229:
+ 8422 .LBE2228:
+ 8423 .LBE2227:
+ 8424 .LBE2226:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 8425 .loc 2 868 0
+ 8426 7201 F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 8426 70EEFFFF
+ 8427 7209 F30F6F85 movdqu -4464(%rbp), %xmm0
+ 8427 90EEFFFF
+ 8428 7211 F30F7F85 movdqu %xmm0, -4272(%rbp)
+ 8428 50EFFFFF
+ 8429 7219 F30F6F85 movdqu -4496(%rbp), %xmm0
+ 8429 70EEFFFF
+ 8430 7221 F30F7F85 movdqu %xmm0, -4288(%rbp)
+ 8430 40EFFFFF
+ 8431 .LBB2230:
+ 8432 .LBB2231:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 8433 .loc 2 234 0
+ 8434 7229 F30F6F85 movdqu -4288(%rbp), %xmm0
+ 8434 40EFFFFF
+ 8435 7231 F30F6F8D movdqu -4272(%rbp), %xmm1
+ 8435 50EFFFFF
+ 8436 7239 660FEBC1 por %xmm1, %xmm0
+ 8437 .LBE2231:
+ 8438 .LBE2230:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 8439 .loc 2 870 0
+ 8440 723d F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 8440 70EEFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 8441 .loc 2 872 0
+ 8442 7245 8B855CEE mov -4516(%rbp), %eax
+ 8442 FFFF
+ 8443 724b 48C1E004 salq $4, %rax
+
GAS LISTING /tmp/ccjbMjHD.s page 272
+
+
+ 8444 724f 48038538 addq -4552(%rbp), %rax
+ 8444 EEFFFF
+ 8445 7256 660F6F00 movdqa (%rax), %xmm0
+ 8446 725a F30F7F85 movdqu %xmm0, -4240(%rbp)
+ 8446 70EFFFFF
+ 8447 7262 F30F6F85 movdqu -4496(%rbp), %xmm0
+ 8447 70EEFFFF
+ 8448 726a F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 8448 60EFFFFF
+ 8449 7272 F30F6F85 movdqu -4240(%rbp), %xmm0
+ 8449 70EFFFFF
+ 8450 727a F30F7F85 movdqu %xmm0, -4208(%rbp)
+ 8450 90EFFFFF
+ 8451 7282 F30F6F85 movdqu -4256(%rbp), %xmm0
+ 8451 60EFFFFF
+ 8452 728a F30F7F85 movdqu %xmm0, -4224(%rbp)
+ 8452 80EFFFFF
+ 8453 .LBB2232:
+ 8454 .LBB2233:
+ 8455 .LBB2234:
+ 8456 .LBB2235:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8457 .loc 3 529 0
+ 8458 7292 F30F6F8D movdqu -4224(%rbp), %xmm1
+ 8458 80EFFFFF
+ 8459 729a F30F6F85 movdqu -4208(%rbp), %xmm0
+ 8459 90EFFFFF
+ 8460 72a2 660F3800 pshufb %xmm1, %xmm0
+ 8460 C1
+ 8461 .LBE2235:
+ 8462 .LBE2234:
+ 8463 .LBE2233:
+ 8464 .LBE2232:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 8465 .loc 2 872 0
+ 8466 72a7 F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 8466 70EEFFFF
+ 8467 72af F30F6F85 movdqu -4512(%rbp), %xmm0
+ 8467 60EEFFFF
+ 8468 72b7 F30F7F85 movdqu %xmm0, -4176(%rbp)
+ 8468 B0EFFFFF
+ 8469 72bf F30F6F85 movdqu -4496(%rbp), %xmm0
+ 8469 70EEFFFF
+ 8470 72c7 F30F7F85 movdqu %xmm0, -4192(%rbp)
+ 8470 A0EFFFFF
+ 8471 .LBB2236:
+ 8472 .LBB2237:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 8473 .loc 2 234 0
+ 8474 72cf F30F6F85 movdqu -4192(%rbp), %xmm0
+ 8474 A0EFFFFF
+ 8475 72d7 F30F6F8D movdqu -4176(%rbp), %xmm1
+ 8475 B0EFFFFF
+ 8476 72df 660FEBC1 por %xmm1, %xmm0
+ 8477 .LBE2237:
+ 8478 .LBE2236:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+
GAS LISTING /tmp/ccjbMjHD.s page 273
+
+
+ 8479 .loc 2 874 0
+ 8480 72e3 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 8480 60EEFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 8481 .loc 2 876 0
+ 8482 72eb 660F6F05 movdqa vec_01(%rip), %xmm0
+ 8482 00000000
+ 8483 72f3 F30F6F8D movdqu -4480(%rbp), %xmm1
+ 8483 80EEFFFF
+ 8484 72fb F30F7F8D movdqu %xmm1, -4144(%rbp)
+ 8484 D0EFFFFF
+ 8485 7303 F30F7F85 movdqu %xmm0, -4160(%rbp)
+ 8485 C0EFFFFF
+ 8486 .LBB2238:
+ 8487 .LBB2239:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 8488 .loc 2 290 0
+ 8489 730b F30F6F8D movdqu -4160(%rbp), %xmm1
+ 8489 C0EFFFFF
+ 8490 7313 F30F6F85 movdqu -4144(%rbp), %xmm0
+ 8490 D0EFFFFF
+ 8491 731b 660FF8C1 psubb %xmm1, %xmm0
+ 8492 .LBE2239:
+ 8493 .LBE2238:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 8494 .loc 2 876 0
+ 8495 731f F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 8495 80EEFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8496 .loc 2 878 0
+ 8497 7327 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 8497 00000000
+ 8498 732f F30F6F8D movdqu -4480(%rbp), %xmm1
+ 8498 80EEFFFF
+ 8499 7337 F30F7F8D movdqu %xmm1, -4112(%rbp)
+ 8499 F0EFFFFF
+ 8500 733f F30F7F85 movdqu %xmm0, -4128(%rbp)
+ 8500 E0EFFFFF
+ 8501 .LBB2240:
+ 8502 .LBB2241:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 8503 .loc 2 206 0
+ 8504 7347 F30F6F85 movdqu -4128(%rbp), %xmm0
+ 8504 E0EFFFFF
+ 8505 734f F30F6F8D movdqu -4112(%rbp), %xmm1
+ 8505 F0EFFFFF
+ 8506 7357 660FDBC1 pand %xmm1, %xmm0
+ 8507 .LBE2241:
+ 8508 .LBE2240:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8509 .loc 2 878 0
+ 8510 735b F30F7F85 movdqu %xmm0, -4480(%rbp)
+ 8510 80EEFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 8511 .loc 2 866 0
+ 8512 7363 83855CEE addl $1, -4516(%rbp)
+ 8512 FFFF01
+
GAS LISTING /tmp/ccjbMjHD.s page 274
+
+
+ 8513 .L120:
+ 8514 736a 83BD5CEE cmpl $15, -4516(%rbp)
+ 8514 FFFF0F
+ 8515 7371 0F8635FE jbe .L121
+ 8515 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 8516 .loc 2 882 0
+ 8517 7377 F30F6F85 movdqu -4512(%rbp), %xmm0
+ 8517 60EEFFFF
+ 8518 .LBE2219:
+ 8519 .LBE2218:
+ 8520 .LBE2217:
+ 8521 .LBE2216:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 8522 .loc 2 1682 0
+ 8523 737f 660F7F85 movdqa %xmm0, -8752(%rbp)
+ 8523 D0DDFFFF
+ 8524 .LBB2242:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 8525 .loc 2 1683 0
+ 8526 7387 660F6F85 movdqa -8752(%rbp), %xmm0
+ 8526 D0DDFFFF
+ 8527 738f F30F7F85 movdqu %xmm0, -8352(%rbp)
+ 8527 60DFFFFF
+ 8528 7397 E8000000 call KDbgWriterGet at PLT
+ 8528 00
+ 8529 739c 4885C0 testq %rax, %rax
+ 8530 739f 7479 je .L123
+ 8531 73a1 BF010000 movl $1, %edi
+ 8531 00
+ 8532 73a6 E8000000 call KDbgCondToFlag at PLT
+ 8532 00
+ 8533 73ab 4889C6 movq %rax, %rsi
+ 8534 73ae BF100000 movl $16, %edi
+ 8534 00
+ 8535 73b3 E8000000 call KDbgTestModConds at PLT
+ 8535 00
+ 8536 73b8 84C0 testb %al, %al
+ 8537 73ba 745E je .L123
+ 8538 73bc 8B856CDF movl -8340(%rbp), %eax
+ 8538 FFFF
+ 8539 73c2 89C7 movl %eax, %edi
+ 8540 73c4 E8378CFF call bswap_32
+ 8540 FF
+ 8541 73c9 4189C5 movl %eax, %r13d
+ 8542 73cc 8B8568DF movl -8344(%rbp), %eax
+ 8542 FFFF
+ 8543 73d2 89C7 movl %eax, %edi
+ 8544 73d4 E8278CFF call bswap_32
+ 8544 FF
+ 8545 73d9 4189C4 movl %eax, %r12d
+ 8546 73dc 8B8564DF movl -8348(%rbp), %eax
+ 8546 FFFF
+ 8547 73e2 89C7 movl %eax, %edi
+ 8548 73e4 E8178CFF call bswap_32
+ 8548 FF
+ 8549 73e9 89C3 movl %eax, %ebx
+
GAS LISTING /tmp/ccjbMjHD.s page 275
+
+
+ 8550 73eb 8B8560DF movl -8352(%rbp), %eax
+ 8550 FFFF
+ 8551 73f1 89C7 movl %eax, %edi
+ 8552 73f3 E8088CFF call bswap_32
+ 8552 FF
+ 8553 73f8 4589E9 movl %r13d, %r9d
+ 8554 73fb 4589E0 movl %r12d, %r8d
+ 8555 73fe 89D9 movl %ebx, %ecx
+ 8556 7400 89C2 movl %eax, %edx
+ 8557 7402 488D3500 leaq .LC0(%rip), %rsi
+ 8557 000000
+ 8558 7409 488D3D00 leaq .LC1(%rip), %rdi
+ 8558 000000
+ 8559 7410 B8000000 movl $0, %eax
+ 8559 00
+ 8560 7415 E8000000 call KDbgMsg at PLT
+ 8560 00
+ 8561 .L123:
+ 8562 741a 660F6F95 movdqa -8752(%rbp), %xmm2
+ 8562 D0DDFFFF
+ 8563 7422 F30F7F95 movdqu %xmm2, -4096(%rbp)
+ 8563 00F0FFFF
+ 8564 .LBE2242:
+ 8565 .LBB2243:
+ 8566 .LBB2244:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 8567 .loc 2 667 0
+ 8568 742a 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 8568 00000000
+ 8569 7432 F30F6F8D movdqu -4096(%rbp), %xmm1
+ 8569 00F0FFFF
+ 8570 743a F30F7F8D movdqu %xmm1, -4064(%rbp)
+ 8570 20F0FFFF
+ 8571 7442 F30F7F85 movdqu %xmm0, -4080(%rbp)
+ 8571 10F0FFFF
+ 8572 744a F30F6F85 movdqu -4064(%rbp), %xmm0
+ 8572 20F0FFFF
+ 8573 7452 F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 8573 40F0FFFF
+ 8574 745a F30F6F85 movdqu -4080(%rbp), %xmm0
+ 8574 10F0FFFF
+ 8575 7462 F30F7F85 movdqu %xmm0, -4048(%rbp)
+ 8575 30F0FFFF
+ 8576 .LBB2245:
+ 8577 .LBB2246:
+ 8578 .LBB2247:
+ 8579 .LBB2248:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8580 .loc 3 529 0
+ 8581 746a F30F6F8D movdqu -4048(%rbp), %xmm1
+ 8581 30F0FFFF
+ 8582 7472 F30F6F85 movdqu -4032(%rbp), %xmm0
+ 8582 40F0FFFF
+ 8583 747a 660F3800 pshufb %xmm1, %xmm0
+ 8583 C1
+ 8584 .LBE2248:
+ 8585 .LBE2247:
+
GAS LISTING /tmp/ccjbMjHD.s page 276
+
+
+ 8586 .LBE2246:
+ 8587 .LBE2245:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 8588 .loc 2 667 0
+ 8589 747f F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 8589 00F0FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8590 .loc 2 668 0
+ 8591 7487 F30F6F85 movdqu -4096(%rbp), %xmm0
+ 8591 00F0FFFF
+ 8592 .LBE2244:
+ 8593 .LBE2243:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 8594 .loc 2 1684 0
+ 8595 748f 660F7F85 movdqa %xmm0, -8752(%rbp)
+ 8595 D0DDFFFF
+ 8596 .LBB2249:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 8597 .loc 2 1685 0
+ 8598 7497 660F6F85 movdqa -8752(%rbp), %xmm0
+ 8598 D0DDFFFF
+ 8599 749f F30F7F85 movdqu %xmm0, -8368(%rbp)
+ 8599 50DFFFFF
+ 8600 74a7 E8000000 call KDbgWriterGet at PLT
+ 8600 00
+ 8601 74ac 4885C0 testq %rax, %rax
+ 8602 74af 7479 je .L125
+ 8603 74b1 BF010000 movl $1, %edi
+ 8603 00
+ 8604 74b6 E8000000 call KDbgCondToFlag at PLT
+ 8604 00
+ 8605 74bb 4889C6 movq %rax, %rsi
+ 8606 74be BF100000 movl $16, %edi
+ 8606 00
+ 8607 74c3 E8000000 call KDbgTestModConds at PLT
+ 8607 00
+ 8608 74c8 84C0 testb %al, %al
+ 8609 74ca 745E je .L125
+ 8610 74cc 8B855CDF movl -8356(%rbp), %eax
+ 8610 FFFF
+ 8611 74d2 89C7 movl %eax, %edi
+ 8612 74d4 E8278BFF call bswap_32
+ 8612 FF
+ 8613 74d9 4189C5 movl %eax, %r13d
+ 8614 74dc 8B8558DF movl -8360(%rbp), %eax
+ 8614 FFFF
+ 8615 74e2 89C7 movl %eax, %edi
+ 8616 74e4 E8178BFF call bswap_32
+ 8616 FF
+ 8617 74e9 4189C4 movl %eax, %r12d
+ 8618 74ec 8B8554DF movl -8364(%rbp), %eax
+ 8618 FFFF
+ 8619 74f2 89C7 movl %eax, %edi
+ 8620 74f4 E8078BFF call bswap_32
+ 8620 FF
+ 8621 74f9 89C3 movl %eax, %ebx
+ 8622 74fb 8B8550DF movl -8368(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 277
+
+
+ 8622 FFFF
+ 8623 7501 89C7 movl %eax, %edi
+ 8624 7503 E8F88AFF call bswap_32
+ 8624 FF
+ 8625 7508 4589E9 movl %r13d, %r9d
+ 8626 750b 4589E0 movl %r12d, %r8d
+ 8627 750e 89D9 movl %ebx, %ecx
+ 8628 7510 89C2 movl %eax, %edx
+ 8629 7512 488D3500 leaq .LC2(%rip), %rsi
+ 8629 000000
+ 8630 7519 488D3D00 leaq .LC1(%rip), %rdi
+ 8630 000000
+ 8631 7520 B8000000 movl $0, %eax
+ 8631 00
+ 8632 7525 E8000000 call KDbgMsg at PLT
+ 8632 00
+ 8633 .L125:
+ 8634 752a 660F6F95 movdqa -8752(%rbp), %xmm2
+ 8634 D0DDFFFF
+ 8635 7532 F30F7F95 movdqu %xmm2, -4000(%rbp)
+ 8635 60F0FFFF
+ 8636 753a 660F6F85 movdqa -8736(%rbp), %xmm0
+ 8636 E0DDFFFF
+ 8637 7542 F30F7F85 movdqu %xmm0, -4016(%rbp)
+ 8637 50F0FFFF
+ 8638 .LBE2249:
+ 8639 .LBB2250:
+ 8640 .LBB2251:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 8641 .loc 2 178 0
+ 8642 754a F30F6F85 movdqu -4016(%rbp), %xmm0
+ 8642 50F0FFFF
+ 8643 7552 F30F6F8D movdqu -4000(%rbp), %xmm1
+ 8643 60F0FFFF
+ 8644 755a 660FEFC1 pxor %xmm1, %xmm0
+ 8645 .LBE2251:
+ 8646 .LBE2250:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 8647 .loc 2 1686 0
+ 8648 755e 660F7F85 movdqa %xmm0, -8752(%rbp)
+ 8648 D0DDFFFF
+ 8649 .LBB2252:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 8650 .loc 2 1687 0
+ 8651 7566 660F6F95 movdqa -8752(%rbp), %xmm2
+ 8651 D0DDFFFF
+ 8652 756e F30F7F95 movdqu %xmm2, -8384(%rbp)
+ 8652 40DFFFFF
+ 8653 7576 E8000000 call KDbgWriterGet at PLT
+ 8653 00
+ 8654 757b 4885C0 testq %rax, %rax
+ 8655 757e 7479 je .L127
+ 8656 7580 BF010000 movl $1, %edi
+ 8656 00
+ 8657 7585 E8000000 call KDbgCondToFlag at PLT
+ 8657 00
+ 8658 758a 4889C6 movq %rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s page 278
+
+
+ 8659 758d BF100000 movl $16, %edi
+ 8659 00
+ 8660 7592 E8000000 call KDbgTestModConds at PLT
+ 8660 00
+ 8661 7597 84C0 testb %al, %al
+ 8662 7599 745E je .L127
+ 8663 759b 8B854CDF movl -8372(%rbp), %eax
+ 8663 FFFF
+ 8664 75a1 89C7 movl %eax, %edi
+ 8665 75a3 E8588AFF call bswap_32
+ 8665 FF
+ 8666 75a8 4189C5 movl %eax, %r13d
+ 8667 75ab 8B8548DF movl -8376(%rbp), %eax
+ 8667 FFFF
+ 8668 75b1 89C7 movl %eax, %edi
+ 8669 75b3 E8488AFF call bswap_32
+ 8669 FF
+ 8670 75b8 4189C4 movl %eax, %r12d
+ 8671 75bb 8B8544DF movl -8380(%rbp), %eax
+ 8671 FFFF
+ 8672 75c1 89C7 movl %eax, %edi
+ 8673 75c3 E8388AFF call bswap_32
+ 8673 FF
+ 8674 75c8 89C3 movl %eax, %ebx
+ 8675 75ca 8B8540DF movl -8384(%rbp), %eax
+ 8675 FFFF
+ 8676 75d0 89C7 movl %eax, %edi
+ 8677 75d2 E8298AFF call bswap_32
+ 8677 FF
+ 8678 75d7 4589E9 movl %r13d, %r9d
+ 8679 75da 4589E0 movl %r12d, %r8d
+ 8680 75dd 89D9 movl %ebx, %ecx
+ 8681 75df 89C2 movl %eax, %edx
+ 8682 75e1 488D3500 leaq .LC3(%rip), %rsi
+ 8682 000000
+ 8683 75e8 488D3D00 leaq .LC1(%rip), %rdi
+ 8683 000000
+ 8684 75ef B8000000 movl $0, %eax
+ 8684 00
+ 8685 75f4 E8000000 call KDbgMsg at PLT
+ 8685 00
+ 8686 .L127:
+ 8687 75f9 660F6F85 movdqa -8752(%rbp), %xmm0
+ 8687 D0DDFFFF
+ 8688 7601 F30F7F85 movdqu %xmm0, -3984(%rbp)
+ 8688 70F0FFFF
+ 8689 7609 F30F6F85 movdqu -3984(%rbp), %xmm0
+ 8689 70F0FFFF
+ 8690 7611 F30F7F85 movdqu %xmm0, -3952(%rbp)
+ 8690 90F0FFFF
+ 8691 .LBE2252:
+ 8692 .LBB2253:
+ 8693 .LBB2254:
+ 8694 .LBB2255:
+ 8695 .LBB2256:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 8696 .loc 3 450 0
+
GAS LISTING /tmp/ccjbMjHD.s page 279
+
+
+ 8697 7619 F30F6F85 movdqu -3952(%rbp), %xmm0
+ 8697 90F0FFFF
+ 8698 7621 660F70C0 pshufd $255, %xmm0, %xmm0
+ 8698 FF
+ 8699 .LBE2256:
+ 8700 .LBE2255:
+ 8701 .LBE2254:
+ 8702 .LBE2253:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 8703 .loc 2 1688 0
+ 8704 7626 660F7F85 movdqa %xmm0, -8752(%rbp)
+ 8704 D0DDFFFF
+ 8705 .LBB2257:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 8706 .loc 2 1689 0
+ 8707 762e 660F6F95 movdqa -8752(%rbp), %xmm2
+ 8707 D0DDFFFF
+ 8708 7636 F30F7F95 movdqu %xmm2, -8400(%rbp)
+ 8708 30DFFFFF
+ 8709 763e E8000000 call KDbgWriterGet at PLT
+ 8709 00
+ 8710 7643 4885C0 testq %rax, %rax
+ 8711 7646 7479 je .L129
+ 8712 7648 BF010000 movl $1, %edi
+ 8712 00
+ 8713 764d E8000000 call KDbgCondToFlag at PLT
+ 8713 00
+ 8714 7652 4889C6 movq %rax, %rsi
+ 8715 7655 BF100000 movl $16, %edi
+ 8715 00
+ 8716 765a E8000000 call KDbgTestModConds at PLT
+ 8716 00
+ 8717 765f 84C0 testb %al, %al
+ 8718 7661 745E je .L129
+ 8719 7663 8B853CDF movl -8388(%rbp), %eax
+ 8719 FFFF
+ 8720 7669 89C7 movl %eax, %edi
+ 8721 766b E89089FF call bswap_32
+ 8721 FF
+ 8722 7670 4189C5 movl %eax, %r13d
+ 8723 7673 8B8538DF movl -8392(%rbp), %eax
+ 8723 FFFF
+ 8724 7679 89C7 movl %eax, %edi
+ 8725 767b E88089FF call bswap_32
+ 8725 FF
+ 8726 7680 4189C4 movl %eax, %r12d
+ 8727 7683 8B8534DF movl -8396(%rbp), %eax
+ 8727 FFFF
+ 8728 7689 89C7 movl %eax, %edi
+ 8729 768b E87089FF call bswap_32
+ 8729 FF
+ 8730 7690 89C3 movl %eax, %ebx
+ 8731 7692 8B8530DF movl -8400(%rbp), %eax
+ 8731 FFFF
+ 8732 7698 89C7 movl %eax, %edi
+ 8733 769a E86189FF call bswap_32
+ 8733 FF
+
GAS LISTING /tmp/ccjbMjHD.s page 280
+
+
+ 8734 769f 4589E9 movl %r13d, %r9d
+ 8735 76a2 4589E0 movl %r12d, %r8d
+ 8736 76a5 89D9 movl %ebx, %ecx
+ 8737 76a7 89C2 movl %eax, %edx
+ 8738 76a9 488D3500 leaq .LC4(%rip), %rsi
+ 8738 000000
+ 8739 76b0 488D3D00 leaq .LC1(%rip), %rdi
+ 8739 000000
+ 8740 76b7 B8000000 movl $0, %eax
+ 8740 00
+ 8741 76bc E8000000 call KDbgMsg at PLT
+ 8741 00
+ 8742 .L129:
+ 8743 .LBE2257:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 8744 .loc 2 1690 0
+ 8745 76c1 660F6F85 movdqa -8752(%rbp), %xmm0
+ 8745 D0DDFFFF
+ 8746 .LBE2211:
+ 8747 .LBE2210:
+ 8748 .loc 2 1831 0
+ 8749 76c9 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 8749 00DDFFFF
+1832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v2,0x08); /* F(k23): F(k23): F(k23) : F(k23) */
+1833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k24 : k25 : k26 : k27 */
+ 8750 .loc 2 1833 0
+ 8751 76d1 660F6F85 movdqa -9040(%rbp), %xmm0
+ 8751 B0DCFFFF
+ 8752 76d9 660FEF85 pxor -8960(%rbp), %xmm0
+ 8752 00DDFFFF
+ 8753 76e1 660F7F85 movdqa %xmm0, -9040(%rbp)
+ 8753 B0DCFFFF
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v0); /* k27 : k27 : k27 : k27 */
+ 8754 .loc 2 1834 0
+ 8755 76e9 660F6F95 movdqa -9040(%rbp), %xmm2
+ 8755 B0DCFFFF
+ 8756 76f1 660F7F95 movdqa %xmm2, -8960(%rbp)
+ 8756 00DDFFFF
+ 8757 76f9 660F6F85 movdqa -8960(%rbp), %xmm0
+ 8757 00DDFFFF
+ 8758 7701 F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 8758 A0F0FFFF
+ 8759 7709 F30F6F85 movdqu -3936(%rbp), %xmm0
+ 8759 A0F0FFFF
+ 8760 7711 F30F7F85 movdqu %xmm0, -3904(%rbp)
+ 8760 C0F0FFFF
+ 8761 .LBB2258:
+ 8762 .LBB2259:
+ 8763 .LBB2260:
+ 8764 .LBB2261:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 8765 .loc 3 450 0
+ 8766 7719 F30F6F85 movdqu -3904(%rbp), %xmm0
+ 8766 C0F0FFFF
+ 8767 7721 660F70C0 pshufd $255, %xmm0, %xmm0
+ 8767 FF
+ 8768 .LBE2261:
+
GAS LISTING /tmp/ccjbMjHD.s page 281
+
+
+ 8769 .LBE2260:
+ 8770 .LBE2259:
+ 8771 .LBE2258:
+ 8772 .loc 2 1834 0
+ 8773 7726 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 8773 00DDFFFF
+1835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k28 : k29 : x : x */
+ 8774 .loc 2 1835 0
+ 8775 772e 660F6F95 movdqa -9024(%rbp), %xmm2
+ 8775 C0DCFFFF
+ 8776 7736 660FEF95 pxor -8960(%rbp), %xmm2
+ 8776 00DDFFFF
+ 8777 773e 660F7F95 movdqa %xmm2, -9024(%rbp)
+ 8777 C0DCFFFF
+1836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[6] = v0; /* K24:K25:K26:K27 */
+ 8778 .loc 2 1837 0
+ 8779 7746 488B85A8 movq -8536(%rbp), %rax
+ 8779 DEFFFF
+ 8780 774d 4883C060 addq $96, %rax
+ 8781 7751 660F6F85 movdqa -9040(%rbp), %xmm0
+ 8781 B0DCFFFF
+ 8782 7759 660F7F00 movdqa %xmm0, (%rax)
+1838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 28-39 */
+1840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 8783 .loc 2 1842 0
+ 8784 775d 660F6F95 movdqa -9024(%rbp), %xmm2
+ 8784 C0DCFFFF
+ 8785 7765 660F7F95 movdqa %xmm2, -8960(%rbp)
+ 8785 00DDFFFF
+ 8786 776d 660F6F85 movdqa -8960(%rbp), %xmm0
+ 8786 00DDFFFF
+ 8787 7775 F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 8787 E0F0FFFF
+ 8788 .LBB2262:
+ 8789 .LBB2263:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+ 8790 .loc 2 1629 0
+ 8791 777d B8100000 movl $16, %eax
+ 8791 00
+ 8792 7782 0FB6C0 movzbl %al, %eax
+ 8793 7785 898500F1 movl %eax, -3840(%rbp)
+ 8793 FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 8794 .loc 2 1630 0
+ 8795 778b F30F6F85 movdqu -3872(%rbp), %xmm0
+ 8795 E0F0FFFF
+ 8796 7793 F30F7F85 movdqu %xmm0, -8320(%rbp)
+ 8796 80DFFFFF
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 8797 .loc 2 1631 0
+ 8798 779b 8B8584DF movl -8316(%rbp), %eax
+ 8798 FFFF
+ 8799 77a1 898504F1 movl %eax, -3836(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 282
+
+
+ 8799 FFFF
+ 8800 .LBB2264:
+ 8801 .LBB2265:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 8802 .loc 2 740 0
+ 8803 77a7 8B8504F1 movl -3836(%rbp), %eax
+ 8803 FFFF
+ 8804 77ad 898570DF movl %eax, -8336(%rbp)
+ 8804 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 8805 .loc 2 741 0
+ 8806 77b3 C78508F1 movl $0, -3832(%rbp)
+ 8806 FFFF0000
+ 8806 0000
+ 8807 77bd EB36 jmp .L130
+ 8808 .L131:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 8809 .loc 2 742 0
+ 8810 77bf 8B8D08F1 movl -3832(%rbp), %ecx
+ 8810 FFFF
+ 8811 77c5 8B8508F1 movl -3832(%rbp), %eax
+ 8811 FFFF
+ 8812 77cb 89C0 mov %eax, %eax
+ 8813 77cd 0FB68405 movzbl -8336(%rbp,%rax), %eax
+ 8813 70DFFFFF
+ 8814 77d5 0FB6C0 movzbl %al, %eax
+ 8815 77d8 89C2 mov %eax, %edx
+ 8816 77da 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 8816 000000
+ 8817 77e1 0FB61402 movzbl (%rdx,%rax), %edx
+ 8818 77e5 89C8 mov %ecx, %eax
+ 8819 77e7 88940570 movb %dl, -8336(%rbp,%rax)
+ 8819 DFFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 8820 .loc 2 741 0
+ 8821 77ee 838508F1 addl $1, -3832(%rbp)
+ 8821 FFFF01
+ 8822 .L130:
+ 8823 77f5 83BD08F1 cmpl $3, -3832(%rbp)
+ 8823 FFFF03
+ 8824 77fc 76C1 jbe .L131
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 8825 .loc 2 743 0
+ 8826 77fe 8B8570DF movl -8336(%rbp), %eax
+ 8826 FFFF
+ 8827 .LBE2265:
+ 8828 .LBE2264:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 8829 .loc 2 1631 0
+ 8830 7804 8985FCF0 movl %eax, -3844(%rbp)
+ 8830 FFFF
+ 8831 780a 8B85FCF0 movl -3844(%rbp), %eax
+ 8831 FFFF
+ 8832 7810 89850CF1 movl %eax, -3828(%rbp)
+ 8832 FFFF
+ 8833 .LBB2266:
+ 8834 .LBB2267:
+
GAS LISTING /tmp/ccjbMjHD.s page 283
+
+
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+ 8835 .loc 2 1196 0
+ 8836 7816 8B850CF1 movl -3828(%rbp), %eax
+ 8836 FFFF
+ 8837 781c C1C808 rorl $8, %eax
+ 8838 .LBE2267:
+ 8839 .LBE2266:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+ 8840 .loc 2 1632 0
+ 8841 781f 8985FCF0 movl %eax, -3844(%rbp)
+ 8841 FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+ 8842 .loc 2 1633 0
+ 8843 7825 8B8500F1 movl -3840(%rbp), %eax
+ 8843 FFFF
+ 8844 782b 3185FCF0 xorl %eax, -3844(%rbp)
+ 8844 FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 8845 .loc 2 1635 0
+ 8846 7831 8B85FCF0 movl -3844(%rbp), %eax
+ 8846 FFFF
+ 8847 7837 89858CDF movl %eax, -8308(%rbp)
+ 8847 FFFF
+ 8848 783d 8B858CDF movl -8308(%rbp), %eax
+ 8848 FFFF
+ 8849 7843 898588DF movl %eax, -8312(%rbp)
+ 8849 FFFF
+ 8850 7849 8B8588DF movl -8312(%rbp), %eax
+ 8850 FFFF
+ 8851 784f 898584DF movl %eax, -8316(%rbp)
+ 8851 FFFF
+ 8852 7855 8B8584DF movl -8316(%rbp), %eax
+ 8852 FFFF
+ 8853 785b 898580DF movl %eax, -8320(%rbp)
+ 8853 FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 8854 .loc 2 1636 0
+ 8855 7861 F30F6F85 movdqu -8320(%rbp), %xmm0
+ 8855 80DFFFFF
+ 8856 .LBE2263:
+ 8857 .LBE2262:
+ 8858 .loc 2 1842 0
+ 8859 7869 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 8859 00DDFFFF
+ 8860 7871 660F6F95 movdqa -9040(%rbp), %xmm2
+ 8860 B0DCFFFF
+ 8861 7879 F30F7F95 movdqu %xmm2, -3824(%rbp)
+ 8861 10F1FFFF
+ 8862 .LBB2268:
+ 8863 .LBB2269:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 8864 .loc 2 1565 0
+ 8865 7881 F30F6F85 movdqu -3824(%rbp), %xmm0
+ 8865 10F1FFFF
+ 8866 7889 660F7F85 movdqa %xmm0, -8720(%rbp)
+ 8866 F0DDFFFF
+ 8867 7891 660F6F95 movdqa -8720(%rbp), %xmm2
+
GAS LISTING /tmp/ccjbMjHD.s page 284
+
+
+ 8867 F0DDFFFF
+ 8868 7899 F30F7F95 movdqu %xmm2, -3808(%rbp)
+ 8868 20F1FFFF
+ 8869 .LBB2270:
+ 8870 .LBB2271:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8871 .loc 2 1278 0
+ 8872 78a1 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8872 00000000
+ 8873 78a9 F30F6F8D movdqu -3808(%rbp), %xmm1
+ 8873 20F1FFFF
+ 8874 78b1 F30F7F8D movdqu %xmm1, -3776(%rbp)
+ 8874 40F1FFFF
+ 8875 78b9 F30F7F85 movdqu %xmm0, -3792(%rbp)
+ 8875 30F1FFFF
+ 8876 78c1 F30F6F85 movdqu -3776(%rbp), %xmm0
+ 8876 40F1FFFF
+ 8877 78c9 F30F7F85 movdqu %xmm0, -3744(%rbp)
+ 8877 60F1FFFF
+ 8878 78d1 F30F6F85 movdqu -3792(%rbp), %xmm0
+ 8878 30F1FFFF
+ 8879 78d9 F30F7F85 movdqu %xmm0, -3760(%rbp)
+ 8879 50F1FFFF
+ 8880 .LBB2272:
+ 8881 .LBB2273:
+ 8882 .LBB2274:
+ 8883 .LBB2275:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8884 .loc 3 529 0
+ 8885 78e1 F30F6F8D movdqu -3760(%rbp), %xmm1
+ 8885 50F1FFFF
+ 8886 78e9 F30F6F85 movdqu -3744(%rbp), %xmm0
+ 8886 60F1FFFF
+ 8887 78f1 660F3800 pshufb %xmm1, %xmm0
+ 8887 C1
+ 8888 .LBE2275:
+ 8889 .LBE2274:
+ 8890 .LBE2273:
+ 8891 .LBE2272:
+ 8892 .LBE2271:
+ 8893 .LBE2270:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8894 .loc 2 1567 0
+ 8895 78f6 660F7F85 movdqa %xmm0, -8720(%rbp)
+ 8895 F0DDFFFF
+ 8896 78fe 660F6F85 movdqa -8720(%rbp), %xmm0
+ 8896 F0DDFFFF
+ 8897 7906 660FEF85 pxor -3824(%rbp), %xmm0
+ 8897 10F1FFFF
+ 8898 790e F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 8898 10F1FFFF
+ 8899 7916 660F6F85 movdqa -8720(%rbp), %xmm0
+ 8899 F0DDFFFF
+ 8900 791e F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 8900 70F1FFFF
+ 8901 .LBB2276:
+ 8902 .LBB2277:
+
GAS LISTING /tmp/ccjbMjHD.s page 285
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8903 .loc 2 1278 0
+ 8904 7926 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8904 00000000
+ 8905 792e F30F6F8D movdqu -3728(%rbp), %xmm1
+ 8905 70F1FFFF
+ 8906 7936 F30F7F8D movdqu %xmm1, -3696(%rbp)
+ 8906 90F1FFFF
+ 8907 793e F30F7F85 movdqu %xmm0, -3712(%rbp)
+ 8907 80F1FFFF
+ 8908 7946 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 8908 90F1FFFF
+ 8909 794e F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 8909 B0F1FFFF
+ 8910 7956 F30F6F85 movdqu -3712(%rbp), %xmm0
+ 8910 80F1FFFF
+ 8911 795e F30F7F85 movdqu %xmm0, -3680(%rbp)
+ 8911 A0F1FFFF
+ 8912 .LBB2278:
+ 8913 .LBB2279:
+ 8914 .LBB2280:
+ 8915 .LBB2281:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8916 .loc 3 529 0
+ 8917 7966 F30F6F8D movdqu -3680(%rbp), %xmm1
+ 8917 A0F1FFFF
+ 8918 796e F30F6F85 movdqu -3664(%rbp), %xmm0
+ 8918 B0F1FFFF
+ 8919 7976 660F3800 pshufb %xmm1, %xmm0
+ 8919 C1
+ 8920 .LBE2281:
+ 8921 .LBE2280:
+ 8922 .LBE2279:
+ 8923 .LBE2278:
+ 8924 .LBE2277:
+ 8925 .LBE2276:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8926 .loc 2 1568 0
+ 8927 797b 660F7F85 movdqa %xmm0, -8720(%rbp)
+ 8927 F0DDFFFF
+ 8928 7983 660F6F85 movdqa -8720(%rbp), %xmm0
+ 8928 F0DDFFFF
+ 8929 798b 660FEF85 pxor -3824(%rbp), %xmm0
+ 8929 10F1FFFF
+ 8930 7993 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 8930 10F1FFFF
+ 8931 799b 660F6F95 movdqa -8720(%rbp), %xmm2
+ 8931 F0DDFFFF
+ 8932 79a3 F30F7F95 movdqu %xmm2, -3648(%rbp)
+ 8932 C0F1FFFF
+ 8933 .LBB2282:
+ 8934 .LBB2283:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8935 .loc 2 1278 0
+ 8936 79ab 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8936 00000000
+ 8937 79b3 F30F6F8D movdqu -3648(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 286
+
+
+ 8937 C0F1FFFF
+ 8938 79bb F30F7F8D movdqu %xmm1, -3616(%rbp)
+ 8938 E0F1FFFF
+ 8939 79c3 F30F7F85 movdqu %xmm0, -3632(%rbp)
+ 8939 D0F1FFFF
+ 8940 79cb F30F6F85 movdqu -3616(%rbp), %xmm0
+ 8940 E0F1FFFF
+ 8941 79d3 F30F7F85 movdqu %xmm0, -3584(%rbp)
+ 8941 00F2FFFF
+ 8942 79db F30F6F85 movdqu -3632(%rbp), %xmm0
+ 8942 D0F1FFFF
+ 8943 79e3 F30F7F85 movdqu %xmm0, -3600(%rbp)
+ 8943 F0F1FFFF
+ 8944 .LBB2284:
+ 8945 .LBB2285:
+ 8946 .LBB2286:
+ 8947 .LBB2287:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8948 .loc 3 529 0
+ 8949 79eb F30F6F8D movdqu -3600(%rbp), %xmm1
+ 8949 F0F1FFFF
+ 8950 79f3 F30F6F85 movdqu -3584(%rbp), %xmm0
+ 8950 00F2FFFF
+ 8951 79fb 660F3800 pshufb %xmm1, %xmm0
+ 8951 C1
+ 8952 .LBE2287:
+ 8953 .LBE2286:
+ 8954 .LBE2285:
+ 8955 .LBE2284:
+ 8956 .LBE2283:
+ 8957 .LBE2282:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8958 .loc 2 1569 0
+ 8959 7a00 660F7F85 movdqa %xmm0, -8720(%rbp)
+ 8959 F0DDFFFF
+ 8960 7a08 660F6F85 movdqa -8720(%rbp), %xmm0
+ 8960 F0DDFFFF
+ 8961 7a10 660FEF85 pxor -3824(%rbp), %xmm0
+ 8961 10F1FFFF
+ 8962 7a18 F30F7F85 movdqu %xmm0, -3824(%rbp)
+ 8962 10F1FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 8963 .loc 2 1571 0
+ 8964 7a20 F30F6F85 movdqu -3824(%rbp), %xmm0
+ 8964 10F1FFFF
+ 8965 .LBE2269:
+ 8966 .LBE2268:
+1843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1,0x10); /* F(k29): F(k29): F(k29) : F(k29) */
+1844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k24 :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+ 8967 .loc 2 1844 0
+ 8968 7a28 660F7F85 movdqa %xmm0, -8992(%rbp)
+ 8968 E0DCFFFF
+1845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k30 : k31 : k32 : k33 */
+ 8969 .loc 2 1845 0
+ 8970 7a30 660F6F85 movdqa -8992(%rbp), %xmm0
+ 8970 E0DCFFFF
+ 8971 7a38 660FEF85 pxor -8960(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 287
+
+
+ 8971 00DDFFFF
+ 8972 7a40 660F7F85 movdqa %xmm0, -8992(%rbp)
+ 8972 E0DCFFFF
+ 8973 7a48 660F6F95 movdqa -9024(%rbp), %xmm2
+ 8973 C0DCFFFF
+ 8974 7a50 F30F7F95 movdqu %xmm2, -3568(%rbp)
+ 8974 10F2FFFF
+ 8975 .LBB2288:
+ 8976 .LBB2289:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 8977 .loc 2 1565 0
+ 8978 7a58 F30F6F85 movdqu -3568(%rbp), %xmm0
+ 8978 10F2FFFF
+ 8979 7a60 660F7F85 movdqa %xmm0, -8704(%rbp)
+ 8979 00DEFFFF
+ 8980 7a68 660F6F95 movdqa -8704(%rbp), %xmm2
+ 8980 00DEFFFF
+ 8981 7a70 F30F7F95 movdqu %xmm2, -3552(%rbp)
+ 8981 20F2FFFF
+ 8982 .LBB2290:
+ 8983 .LBB2291:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8984 .loc 2 1278 0
+ 8985 7a78 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 8985 00000000
+ 8986 7a80 F30F6F8D movdqu -3552(%rbp), %xmm1
+ 8986 20F2FFFF
+ 8987 7a88 F30F7F8D movdqu %xmm1, -3520(%rbp)
+ 8987 40F2FFFF
+ 8988 7a90 F30F7F85 movdqu %xmm0, -3536(%rbp)
+ 8988 30F2FFFF
+ 8989 7a98 F30F6F85 movdqu -3520(%rbp), %xmm0
+ 8989 40F2FFFF
+ 8990 7aa0 F30F7F85 movdqu %xmm0, -3488(%rbp)
+ 8990 60F2FFFF
+ 8991 7aa8 F30F6F85 movdqu -3536(%rbp), %xmm0
+ 8991 30F2FFFF
+ 8992 7ab0 F30F7F85 movdqu %xmm0, -3504(%rbp)
+ 8992 50F2FFFF
+ 8993 .LBB2292:
+ 8994 .LBB2293:
+ 8995 .LBB2294:
+ 8996 .LBB2295:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8997 .loc 3 529 0
+ 8998 7ab8 F30F6F8D movdqu -3504(%rbp), %xmm1
+ 8998 50F2FFFF
+ 8999 7ac0 F30F6F85 movdqu -3488(%rbp), %xmm0
+ 8999 60F2FFFF
+ 9000 7ac8 660F3800 pshufb %xmm1, %xmm0
+ 9000 C1
+ 9001 .LBE2295:
+ 9002 .LBE2294:
+ 9003 .LBE2293:
+ 9004 .LBE2292:
+ 9005 .LBE2291:
+ 9006 .LBE2290:
+
GAS LISTING /tmp/ccjbMjHD.s page 288
+
+
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9007 .loc 2 1567 0
+ 9008 7acd 660F7F85 movdqa %xmm0, -8704(%rbp)
+ 9008 00DEFFFF
+ 9009 7ad5 660F6F85 movdqa -8704(%rbp), %xmm0
+ 9009 00DEFFFF
+ 9010 7add 660FEF85 pxor -3568(%rbp), %xmm0
+ 9010 10F2FFFF
+ 9011 7ae5 F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 9011 10F2FFFF
+ 9012 7aed 660F6F85 movdqa -8704(%rbp), %xmm0
+ 9012 00DEFFFF
+ 9013 7af5 F30F7F85 movdqu %xmm0, -3472(%rbp)
+ 9013 70F2FFFF
+ 9014 .LBB2296:
+ 9015 .LBB2297:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9016 .loc 2 1278 0
+ 9017 7afd 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9017 00000000
+ 9018 7b05 F30F6F8D movdqu -3472(%rbp), %xmm1
+ 9018 70F2FFFF
+ 9019 7b0d F30F7F8D movdqu %xmm1, -3440(%rbp)
+ 9019 90F2FFFF
+ 9020 7b15 F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 9020 80F2FFFF
+ 9021 7b1d F30F6F85 movdqu -3440(%rbp), %xmm0
+ 9021 90F2FFFF
+ 9022 7b25 F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 9022 B0F2FFFF
+ 9023 7b2d F30F6F85 movdqu -3456(%rbp), %xmm0
+ 9023 80F2FFFF
+ 9024 7b35 F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 9024 A0F2FFFF
+ 9025 .LBB2298:
+ 9026 .LBB2299:
+ 9027 .LBB2300:
+ 9028 .LBB2301:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9029 .loc 3 529 0
+ 9030 7b3d F30F6F8D movdqu -3424(%rbp), %xmm1
+ 9030 A0F2FFFF
+ 9031 7b45 F30F6F85 movdqu -3408(%rbp), %xmm0
+ 9031 B0F2FFFF
+ 9032 7b4d 660F3800 pshufb %xmm1, %xmm0
+ 9032 C1
+ 9033 .LBE2301:
+ 9034 .LBE2300:
+ 9035 .LBE2299:
+ 9036 .LBE2298:
+ 9037 .LBE2297:
+ 9038 .LBE2296:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9039 .loc 2 1568 0
+ 9040 7b52 660F7F85 movdqa %xmm0, -8704(%rbp)
+ 9040 00DEFFFF
+ 9041 7b5a 660F6F85 movdqa -8704(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 289
+
+
+ 9041 00DEFFFF
+ 9042 7b62 660FEF85 pxor -3568(%rbp), %xmm0
+ 9042 10F2FFFF
+ 9043 7b6a F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 9043 10F2FFFF
+ 9044 7b72 660F6F95 movdqa -8704(%rbp), %xmm2
+ 9044 00DEFFFF
+ 9045 7b7a F30F7F95 movdqu %xmm2, -3392(%rbp)
+ 9045 C0F2FFFF
+ 9046 .LBB2302:
+ 9047 .LBB2303:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9048 .loc 2 1278 0
+ 9049 7b82 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9049 00000000
+ 9050 7b8a F30F6F8D movdqu -3392(%rbp), %xmm1
+ 9050 C0F2FFFF
+ 9051 7b92 F30F7F8D movdqu %xmm1, -3360(%rbp)
+ 9051 E0F2FFFF
+ 9052 7b9a F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 9052 D0F2FFFF
+ 9053 7ba2 F30F6F85 movdqu -3360(%rbp), %xmm0
+ 9053 E0F2FFFF
+ 9054 7baa F30F7F85 movdqu %xmm0, -3328(%rbp)
+ 9054 00F3FFFF
+ 9055 7bb2 F30F6F85 movdqu -3376(%rbp), %xmm0
+ 9055 D0F2FFFF
+ 9056 7bba F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 9056 F0F2FFFF
+ 9057 .LBB2304:
+ 9058 .LBB2305:
+ 9059 .LBB2306:
+ 9060 .LBB2307:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9061 .loc 3 529 0
+ 9062 7bc2 F30F6F8D movdqu -3344(%rbp), %xmm1
+ 9062 F0F2FFFF
+ 9063 7bca F30F6F85 movdqu -3328(%rbp), %xmm0
+ 9063 00F3FFFF
+ 9064 7bd2 660F3800 pshufb %xmm1, %xmm0
+ 9064 C1
+ 9065 .LBE2307:
+ 9066 .LBE2306:
+ 9067 .LBE2305:
+ 9068 .LBE2304:
+ 9069 .LBE2303:
+ 9070 .LBE2302:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9071 .loc 2 1569 0
+ 9072 7bd7 660F7F85 movdqa %xmm0, -8704(%rbp)
+ 9072 00DEFFFF
+ 9073 7bdf 660F6F85 movdqa -8704(%rbp), %xmm0
+ 9073 00DEFFFF
+ 9074 7be7 660FEF85 pxor -3568(%rbp), %xmm0
+ 9074 10F2FFFF
+ 9075 7bef F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 9075 10F2FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 290
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9076 .loc 2 1571 0
+ 9077 7bf7 F30F6F85 movdqu -3568(%rbp), %xmm0
+ 9077 10F2FFFF
+ 9078 .LBE2289:
+ 9079 .LBE2288:
+1846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k26 :k28^k29: k29 : 0 */
+ 9080 .loc 2 1846 0
+ 9081 7bff 660F7F85 movdqa %xmm0, -8976(%rbp)
+ 9081 F0DCFFFF
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k33 : k33 : k33 : k33 */
+ 9082 .loc 2 1847 0
+ 9083 7c07 660F6F85 movdqa -8992(%rbp), %xmm0
+ 9083 E0DCFFFF
+ 9084 7c0f 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 9084 00DDFFFF
+ 9085 7c17 660F6F95 movdqa -8960(%rbp), %xmm2
+ 9085 00DDFFFF
+ 9086 7c1f F30F7F95 movdqu %xmm2, -3312(%rbp)
+ 9086 10F3FFFF
+ 9087 7c27 F30F6F85 movdqu -3312(%rbp), %xmm0
+ 9087 10F3FFFF
+ 9088 7c2f F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 9088 30F3FFFF
+ 9089 .LBB2308:
+ 9090 .LBB2309:
+ 9091 .LBB2310:
+ 9092 .LBB2311:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 9093 .loc 3 450 0
+ 9094 7c37 F30F6F85 movdqu -3280(%rbp), %xmm0
+ 9094 30F3FFFF
+ 9095 7c3f 660F70C0 pshufd $255, %xmm0, %xmm0
+ 9095 FF
+ 9096 .LBE2311:
+ 9097 .LBE2310:
+ 9098 .LBE2309:
+ 9099 .LBE2308:
+ 9100 .loc 2 1847 0
+ 9101 7c44 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 9101 00DDFFFF
+1848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k34 : k35 : x : x */
+ 9102 .loc 2 1848 0
+ 9103 7c4c 660F6F85 movdqa -8976(%rbp), %xmm0
+ 9103 F0DCFFFF
+ 9104 7c54 660FEF85 pxor -8960(%rbp), %xmm0
+ 9104 00DDFFFF
+ 9105 7c5c 660F7F85 movdqa %xmm0, -8976(%rbp)
+ 9105 F0DCFFFF
+ 9106 7c64 660F6F95 movdqa -9024(%rbp), %xmm2
+ 9106 C0DCFFFF
+ 9107 7c6c F30F7F95 movdqu %xmm2, -3248(%rbp)
+ 9107 50F3FFFF
+ 9108 7c74 660F6F85 movdqa -8992(%rbp), %xmm0
+ 9108 E0DCFFFF
+ 9109 7c7c F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 9109 40F3FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 291
+
+
+ 9110 7c84 F30F6F85 movdqu -3248(%rbp), %xmm0
+ 9110 50F3FFFF
+ 9111 7c8c F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 9111 80F3FFFF
+ 9112 7c94 F30F6F85 movdqu -3264(%rbp), %xmm0
+ 9112 40F3FFFF
+ 9113 7c9c F30F7F85 movdqu %xmm0, -3216(%rbp)
+ 9113 70F3FFFF
+ 9114 .LBB2312:
+ 9115 .LBB2313:
+ 9116 .LBB2314:
+ 9117 .LBB2315:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 9118 .loc 3 366 0
+ 9119 7ca4 F20F1085 movsd -3216(%rbp), %xmm0
+ 9119 70F3FFFF
+ 9120 7cac 660F1685 movhpd -3208(%rbp), %xmm0
+ 9120 78F3FFFF
+ 9121 7cb4 F20F108D movsd -3200(%rbp), %xmm1
+ 9121 80F3FFFF
+ 9122 7cbc 660F168D movhpd -3192(%rbp), %xmm1
+ 9122 88F3FFFF
+ 9123 7cc4 660F28D1 movapd %xmm1, %xmm2
+ 9124 7cc8 660F14D0 unpcklpd %xmm0, %xmm2
+ 9125 7ccc 660F28C2 movapd %xmm2, %xmm0
+ 9126 .LBE2315:
+ 9127 .LBE2314:
+ 9128 .LBE2313:
+ 9129 .LBE2312:
+1849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k28 : k29 : k30 : k31 */
+ 9130 .loc 2 1849 0
+ 9131 7cd0 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 9131 C0DCFFFF
+1850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[7] = v1; /* K28:K29:K30:K31 */
+ 9132 .loc 2 1851 0
+ 9133 7cd8 488B85A8 movq -8536(%rbp), %rax
+ 9133 DEFFFF
+ 9134 7cdf 4883C070 addq $112, %rax
+ 9135 7ce3 660F6F85 movdqa -9024(%rbp), %xmm0
+ 9135 C0DCFFFF
+ 9136 7ceb 660F7F00 movdqa %xmm0, (%rax)
+ 9137 7cef 660F6F95 movdqa -8992(%rbp), %xmm2
+ 9137 E0DCFFFF
+ 9138 7cf7 F30F7F95 movdqu %xmm2, -3168(%rbp)
+ 9138 A0F3FFFF
+ 9139 7cff 660F6F85 movdqa -8976(%rbp), %xmm0
+ 9139 F0DCFFFF
+ 9140 7d07 F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 9140 90F3FFFF
+ 9141 7d0f F30F6F85 movdqu -3168(%rbp), %xmm0
+ 9141 A0F3FFFF
+ 9142 7d17 F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 9142 D0F3FFFF
+ 9143 7d1f F30F6F85 movdqu -3184(%rbp), %xmm0
+ 9143 90F3FFFF
+ 9144 7d27 F30F7F85 movdqu %xmm0, -3136(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 292
+
+
+ 9144 C0F3FFFF
+ 9145 .LBB2316:
+ 9146 .LBB2317:
+ 9147 .LBB2318:
+ 9148 .LBB2319:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 9149 .loc 3 366 0
+ 9150 7d2f F20F108D movsd -3136(%rbp), %xmm1
+ 9150 C0F3FFFF
+ 9151 7d37 660F168D movhpd -3128(%rbp), %xmm1
+ 9151 C8F3FFFF
+ 9152 7d3f F20F1085 movsd -3120(%rbp), %xmm0
+ 9152 D0F3FFFF
+ 9153 7d47 660F1685 movhpd -3112(%rbp), %xmm0
+ 9153 D8F3FFFF
+ 9154 7d4f 660FC6C1 shufpd $1, %xmm1, %xmm0
+ 9154 01
+ 9155 .LBE2319:
+ 9156 .LBE2318:
+ 9157 .LBE2317:
+ 9158 .LBE2316:
+1852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k32 : k33 : k34 : k35 */
+ 9159 .loc 2 1853 0
+ 9160 7d54 660F7F85 movdqa %xmm0, -9008(%rbp)
+ 9160 D0DCFFFF
+1854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[8] = v2; /* K32:K33:K34:K35 */
+ 9161 .loc 2 1854 0
+ 9162 7d5c 488B85A8 movq -8536(%rbp), %rax
+ 9162 DEFFFF
+ 9163 7d63 4883E880 subq $-128, %rax
+ 9164 7d67 660F6F95 movdqa -9008(%rbp), %xmm2
+ 9164 D0DCFFFF
+ 9165 7d6f 660F7F10 movdqa %xmm2, (%rax)
+ 9166 7d73 660F6F85 movdqa -8992(%rbp), %xmm0
+ 9166 E0DCFFFF
+ 9167 7d7b F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 9167 E0F3FFFF
+ 9168 .LBB2320:
+ 9169 .LBB2321:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 9170 .loc 2 1565 0
+ 9171 7d83 F30F6F95 movdqu -3104(%rbp), %xmm2
+ 9171 E0F3FFFF
+ 9172 7d8b 660F7F95 movdqa %xmm2, -8688(%rbp)
+ 9172 10DEFFFF
+ 9173 7d93 660F6F85 movdqa -8688(%rbp), %xmm0
+ 9173 10DEFFFF
+ 9174 7d9b F30F7F85 movdqu %xmm0, -3088(%rbp)
+ 9174 F0F3FFFF
+ 9175 .LBB2322:
+ 9176 .LBB2323:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9177 .loc 2 1278 0
+ 9178 7da3 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9178 00000000
+ 9179 7dab F30F6F8D movdqu -3088(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 293
+
+
+ 9179 F0F3FFFF
+ 9180 7db3 F30F7F8D movdqu %xmm1, -3056(%rbp)
+ 9180 10F4FFFF
+ 9181 7dbb F30F7F85 movdqu %xmm0, -3072(%rbp)
+ 9181 00F4FFFF
+ 9182 7dc3 F30F6F85 movdqu -3056(%rbp), %xmm0
+ 9182 10F4FFFF
+ 9183 7dcb F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 9183 30F4FFFF
+ 9184 7dd3 F30F6F85 movdqu -3072(%rbp), %xmm0
+ 9184 00F4FFFF
+ 9185 7ddb F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 9185 20F4FFFF
+ 9186 .LBB2324:
+ 9187 .LBB2325:
+ 9188 .LBB2326:
+ 9189 .LBB2327:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9190 .loc 3 529 0
+ 9191 7de3 F30F6F8D movdqu -3040(%rbp), %xmm1
+ 9191 20F4FFFF
+ 9192 7deb F30F6F85 movdqu -3024(%rbp), %xmm0
+ 9192 30F4FFFF
+ 9193 7df3 660F3800 pshufb %xmm1, %xmm0
+ 9193 C1
+ 9194 .LBE2327:
+ 9195 .LBE2326:
+ 9196 .LBE2325:
+ 9197 .LBE2324:
+ 9198 .LBE2323:
+ 9199 .LBE2322:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9200 .loc 2 1567 0
+ 9201 7df8 660F7F85 movdqa %xmm0, -8688(%rbp)
+ 9201 10DEFFFF
+ 9202 7e00 660F6F85 movdqa -8688(%rbp), %xmm0
+ 9202 10DEFFFF
+ 9203 7e08 660FEF85 pxor -3104(%rbp), %xmm0
+ 9203 E0F3FFFF
+ 9204 7e10 F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 9204 E0F3FFFF
+ 9205 7e18 660F6F95 movdqa -8688(%rbp), %xmm2
+ 9205 10DEFFFF
+ 9206 7e20 F30F7F95 movdqu %xmm2, -3008(%rbp)
+ 9206 40F4FFFF
+ 9207 .LBB2328:
+ 9208 .LBB2329:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9209 .loc 2 1278 0
+ 9210 7e28 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9210 00000000
+ 9211 7e30 F30F6F8D movdqu -3008(%rbp), %xmm1
+ 9211 40F4FFFF
+ 9212 7e38 F30F7F8D movdqu %xmm1, -2976(%rbp)
+ 9212 60F4FFFF
+ 9213 7e40 F30F7F85 movdqu %xmm0, -2992(%rbp)
+ 9213 50F4FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 294
+
+
+ 9214 7e48 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 9214 60F4FFFF
+ 9215 7e50 F30F7F85 movdqu %xmm0, -2944(%rbp)
+ 9215 80F4FFFF
+ 9216 7e58 F30F6F85 movdqu -2992(%rbp), %xmm0
+ 9216 50F4FFFF
+ 9217 7e60 F30F7F85 movdqu %xmm0, -2960(%rbp)
+ 9217 70F4FFFF
+ 9218 .LBB2330:
+ 9219 .LBB2331:
+ 9220 .LBB2332:
+ 9221 .LBB2333:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9222 .loc 3 529 0
+ 9223 7e68 F30F6F8D movdqu -2960(%rbp), %xmm1
+ 9223 70F4FFFF
+ 9224 7e70 F30F6F85 movdqu -2944(%rbp), %xmm0
+ 9224 80F4FFFF
+ 9225 7e78 660F3800 pshufb %xmm1, %xmm0
+ 9225 C1
+ 9226 .LBE2333:
+ 9227 .LBE2332:
+ 9228 .LBE2331:
+ 9229 .LBE2330:
+ 9230 .LBE2329:
+ 9231 .LBE2328:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9232 .loc 2 1568 0
+ 9233 7e7d 660F7F85 movdqa %xmm0, -8688(%rbp)
+ 9233 10DEFFFF
+ 9234 7e85 660F6F85 movdqa -8688(%rbp), %xmm0
+ 9234 10DEFFFF
+ 9235 7e8d 660FEF85 pxor -3104(%rbp), %xmm0
+ 9235 E0F3FFFF
+ 9236 7e95 F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 9236 E0F3FFFF
+ 9237 7e9d 660F6F85 movdqa -8688(%rbp), %xmm0
+ 9237 10DEFFFF
+ 9238 7ea5 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 9238 90F4FFFF
+ 9239 .LBB2334:
+ 9240 .LBB2335:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9241 .loc 2 1278 0
+ 9242 7ead 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9242 00000000
+ 9243 7eb5 F30F6F8D movdqu -2928(%rbp), %xmm1
+ 9243 90F4FFFF
+ 9244 7ebd F30F7F8D movdqu %xmm1, -2896(%rbp)
+ 9244 B0F4FFFF
+ 9245 7ec5 F30F7F85 movdqu %xmm0, -2912(%rbp)
+ 9245 A0F4FFFF
+ 9246 7ecd F30F6F85 movdqu -2896(%rbp), %xmm0
+ 9246 B0F4FFFF
+ 9247 7ed5 F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 9247 D0F4FFFF
+ 9248 7edd F30F6F85 movdqu -2912(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 295
+
+
+ 9248 A0F4FFFF
+ 9249 7ee5 F30F7F85 movdqu %xmm0, -2880(%rbp)
+ 9249 C0F4FFFF
+ 9250 .LBB2336:
+ 9251 .LBB2337:
+ 9252 .LBB2338:
+ 9253 .LBB2339:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9254 .loc 3 529 0
+ 9255 7eed F30F6F8D movdqu -2880(%rbp), %xmm1
+ 9255 C0F4FFFF
+ 9256 7ef5 F30F6F85 movdqu -2864(%rbp), %xmm0
+ 9256 D0F4FFFF
+ 9257 7efd 660F3800 pshufb %xmm1, %xmm0
+ 9257 C1
+ 9258 .LBE2339:
+ 9259 .LBE2338:
+ 9260 .LBE2337:
+ 9261 .LBE2336:
+ 9262 .LBE2335:
+ 9263 .LBE2334:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9264 .loc 2 1569 0
+ 9265 7f02 660F7F85 movdqa %xmm0, -8688(%rbp)
+ 9265 10DEFFFF
+ 9266 7f0a 660F6F85 movdqa -8688(%rbp), %xmm0
+ 9266 10DEFFFF
+ 9267 7f12 660FEF85 pxor -3104(%rbp), %xmm0
+ 9267 E0F3FFFF
+ 9268 7f1a F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 9268 E0F3FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9269 .loc 2 1571 0
+ 9270 7f22 F30F6F85 movdqu -3104(%rbp), %xmm0
+ 9270 E0F3FFFF
+ 9271 .LBE2321:
+ 9272 .LBE2320:
+1855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k30 :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+ 9273 .loc 2 1856 0
+ 9274 7f2a 660F7F85 movdqa %xmm0, -9040(%rbp)
+ 9274 B0DCFFFF
+ 9275 7f32 660F6F95 movdqa -8976(%rbp), %xmm2
+ 9275 F0DCFFFF
+ 9276 7f3a F30F7F95 movdqu %xmm2, -2848(%rbp)
+ 9276 E0F4FFFF
+ 9277 .LBB2340:
+ 9278 .LBB2341:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 9279 .loc 2 1565 0
+ 9280 7f42 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 9280 E0F4FFFF
+ 9281 7f4a 660F7F85 movdqa %xmm0, -8672(%rbp)
+ 9281 20DEFFFF
+ 9282 7f52 660F6F95 movdqa -8672(%rbp), %xmm2
+ 9282 20DEFFFF
+ 9283 7f5a F30F7F95 movdqu %xmm2, -2832(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 296
+
+
+ 9283 F0F4FFFF
+ 9284 .LBB2342:
+ 9285 .LBB2343:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9286 .loc 2 1278 0
+ 9287 7f62 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9287 00000000
+ 9288 7f6a F30F6F8D movdqu -2832(%rbp), %xmm1
+ 9288 F0F4FFFF
+ 9289 7f72 F30F7F8D movdqu %xmm1, -2800(%rbp)
+ 9289 10F5FFFF
+ 9290 7f7a F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 9290 00F5FFFF
+ 9291 7f82 F30F6F85 movdqu -2800(%rbp), %xmm0
+ 9291 10F5FFFF
+ 9292 7f8a F30F7F85 movdqu %xmm0, -2768(%rbp)
+ 9292 30F5FFFF
+ 9293 7f92 F30F6F85 movdqu -2816(%rbp), %xmm0
+ 9293 00F5FFFF
+ 9294 7f9a F30F7F85 movdqu %xmm0, -2784(%rbp)
+ 9294 20F5FFFF
+ 9295 .LBB2344:
+ 9296 .LBB2345:
+ 9297 .LBB2346:
+ 9298 .LBB2347:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9299 .loc 3 529 0
+ 9300 7fa2 F30F6F8D movdqu -2784(%rbp), %xmm1
+ 9300 20F5FFFF
+ 9301 7faa F30F6F85 movdqu -2768(%rbp), %xmm0
+ 9301 30F5FFFF
+ 9302 7fb2 660F3800 pshufb %xmm1, %xmm0
+ 9302 C1
+ 9303 .LBE2347:
+ 9304 .LBE2346:
+ 9305 .LBE2345:
+ 9306 .LBE2344:
+ 9307 .LBE2343:
+ 9308 .LBE2342:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9309 .loc 2 1567 0
+ 9310 7fb7 660F7F85 movdqa %xmm0, -8672(%rbp)
+ 9310 20DEFFFF
+ 9311 7fbf 660F6F85 movdqa -8672(%rbp), %xmm0
+ 9311 20DEFFFF
+ 9312 7fc7 660FEF85 pxor -2848(%rbp), %xmm0
+ 9312 E0F4FFFF
+ 9313 7fcf F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 9313 E0F4FFFF
+ 9314 7fd7 660F6F85 movdqa -8672(%rbp), %xmm0
+ 9314 20DEFFFF
+ 9315 7fdf F30F7F85 movdqu %xmm0, -2752(%rbp)
+ 9315 40F5FFFF
+ 9316 .LBB2348:
+ 9317 .LBB2349:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9318 .loc 2 1278 0
+
GAS LISTING /tmp/ccjbMjHD.s page 297
+
+
+ 9319 7fe7 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9319 00000000
+ 9320 7fef F30F6F8D movdqu -2752(%rbp), %xmm1
+ 9320 40F5FFFF
+ 9321 7ff7 F30F7F8D movdqu %xmm1, -2720(%rbp)
+ 9321 60F5FFFF
+ 9322 7fff F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 9322 50F5FFFF
+ 9323 8007 F30F6F85 movdqu -2720(%rbp), %xmm0
+ 9323 60F5FFFF
+ 9324 800f F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 9324 80F5FFFF
+ 9325 8017 F30F6F85 movdqu -2736(%rbp), %xmm0
+ 9325 50F5FFFF
+ 9326 801f F30F7F85 movdqu %xmm0, -2704(%rbp)
+ 9326 70F5FFFF
+ 9327 .LBB2350:
+ 9328 .LBB2351:
+ 9329 .LBB2352:
+ 9330 .LBB2353:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9331 .loc 3 529 0
+ 9332 8027 F30F6F8D movdqu -2704(%rbp), %xmm1
+ 9332 70F5FFFF
+ 9333 802f F30F6F85 movdqu -2688(%rbp), %xmm0
+ 9333 80F5FFFF
+ 9334 8037 660F3800 pshufb %xmm1, %xmm0
+ 9334 C1
+ 9335 .LBE2353:
+ 9336 .LBE2352:
+ 9337 .LBE2351:
+ 9338 .LBE2350:
+ 9339 .LBE2349:
+ 9340 .LBE2348:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9341 .loc 2 1568 0
+ 9342 803c 660F7F85 movdqa %xmm0, -8672(%rbp)
+ 9342 20DEFFFF
+ 9343 8044 660F6F85 movdqa -8672(%rbp), %xmm0
+ 9343 20DEFFFF
+ 9344 804c 660FEF85 pxor -2848(%rbp), %xmm0
+ 9344 E0F4FFFF
+ 9345 8054 F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 9345 E0F4FFFF
+ 9346 805c 660F6F95 movdqa -8672(%rbp), %xmm2
+ 9346 20DEFFFF
+ 9347 8064 F30F7F95 movdqu %xmm2, -2672(%rbp)
+ 9347 90F5FFFF
+ 9348 .LBB2354:
+ 9349 .LBB2355:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9350 .loc 2 1278 0
+ 9351 806c 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9351 00000000
+ 9352 8074 F30F6F8D movdqu -2672(%rbp), %xmm1
+ 9352 90F5FFFF
+ 9353 807c F30F7F8D movdqu %xmm1, -2640(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 298
+
+
+ 9353 B0F5FFFF
+ 9354 8084 F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 9354 A0F5FFFF
+ 9355 808c F30F6F85 movdqu -2640(%rbp), %xmm0
+ 9355 B0F5FFFF
+ 9356 8094 F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 9356 D0F5FFFF
+ 9357 809c F30F6F85 movdqu -2656(%rbp), %xmm0
+ 9357 A0F5FFFF
+ 9358 80a4 F30F7F85 movdqu %xmm0, -2624(%rbp)
+ 9358 C0F5FFFF
+ 9359 .LBB2356:
+ 9360 .LBB2357:
+ 9361 .LBB2358:
+ 9362 .LBB2359:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9363 .loc 3 529 0
+ 9364 80ac F30F6F8D movdqu -2624(%rbp), %xmm1
+ 9364 C0F5FFFF
+ 9365 80b4 F30F6F85 movdqu -2608(%rbp), %xmm0
+ 9365 D0F5FFFF
+ 9366 80bc 660F3800 pshufb %xmm1, %xmm0
+ 9366 C1
+ 9367 .LBE2359:
+ 9368 .LBE2358:
+ 9369 .LBE2357:
+ 9370 .LBE2356:
+ 9371 .LBE2355:
+ 9372 .LBE2354:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9373 .loc 2 1569 0
+ 9374 80c1 660F7F85 movdqa %xmm0, -8672(%rbp)
+ 9374 20DEFFFF
+ 9375 80c9 660F6F85 movdqa -8672(%rbp), %xmm0
+ 9375 20DEFFFF
+ 9376 80d1 660FEF85 pxor -2848(%rbp), %xmm0
+ 9376 E0F4FFFF
+ 9377 80d9 F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 9377 E0F4FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9378 .loc 2 1571 0
+ 9379 80e1 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 9379 E0F4FFFF
+ 9380 .LBE2341:
+ 9381 .LBE2340:
+1857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v4); /* k26 :k26^k27: k27 : 0 */
+ 9382 .loc 2 1857 0
+ 9383 80e9 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 9383 C0DCFFFF
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 9384 .loc 2 1858 0
+ 9385 80f1 660F6F85 movdqa -9008(%rbp), %xmm0
+ 9385 D0DCFFFF
+ 9386 80f9 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 9386 00DDFFFF
+ 9387 8101 660F6F95 movdqa -8960(%rbp), %xmm2
+ 9387 00DDFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 299
+
+
+ 9388 8109 F30F7F95 movdqu %xmm2, -2576(%rbp)
+ 9388 F0F5FFFF
+ 9389 .LBB2360:
+ 9390 .LBB2361:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 9391 .loc 2 1681 0
+ 9392 8111 B8200000 movl $32, %eax
+ 9392 00
+ 9393 8116 660F6F05 movdqa vec_00(%rip), %xmm0
+ 9393 00000000
+ 9394 811e F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 9394 10F6FFFF
+ 9395 8126 89850CF6 movl %eax, -2548(%rbp)
+ 9395 FFFF
+ 9396 812c F30F6F85 movdqu -2544(%rbp), %xmm0
+ 9396 10F6FFFF
+ 9397 8134 F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 9397 30F6FFFF
+ 9398 813c 8B850CF6 movl -2548(%rbp), %eax
+ 9398 FFFF
+ 9399 8142 89852CF6 movl %eax, -2516(%rbp)
+ 9399 FFFF
+ 9400 .LBB2362:
+ 9401 .LBB2363:
+ 9402 .LBB2364:
+ 9403 .LBB2365:
+ 9404 .loc 3 598 0
+ 9405 8148 8B852CF6 movl -2516(%rbp), %eax
+ 9405 FFFF
+ 9406 814e F30F6F85 movdqu -2512(%rbp), %xmm0
+ 9406 30F6FFFF
+ 9407 8156 660F3A22 pinsrd $3, %eax, %xmm0
+ 9407 C003
+ 9408 .LBE2365:
+ 9409 .LBE2364:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 9410 .loc 2 519 0
+ 9411 815c F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 9411 10F6FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9412 .loc 2 526 0
+ 9413 8164 F30F6F85 movdqu -2544(%rbp), %xmm0
+ 9413 10F6FFFF
+ 9414 .LBE2363:
+ 9415 .LBE2362:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 9416 .loc 2 1681 0
+ 9417 816c 660F7F85 movdqa %xmm0, -8640(%rbp)
+ 9417 40DEFFFF
+ 9418 8174 F30F6F85 movdqu -2576(%rbp), %xmm0
+ 9418 F0F5FFFF
+ 9419 817c F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 9419 40F6FFFF
+ 9420 8184 F30F6F85 movdqu -2496(%rbp), %xmm0
+ 9420 40F6FFFF
+ 9421 818c F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 9421 60F6FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 300
+
+
+ 9422 8194 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 9422 000000
+ 9423 819b 48898558 movq %rax, -2472(%rbp)
+ 9423 F6FFFF
+ 9424 .LBB2366:
+ 9425 .LBB2367:
+ 9426 .LBB2368:
+ 9427 .LBB2369:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 9428 .loc 2 851 0
+ 9429 81a2 660F6F05 movdqa vec_00(%rip), %xmm0
+ 9429 00000000
+ 9430 81aa F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 9430 80F6FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 9431 .loc 2 854 0
+ 9432 81b2 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 9432 00000000
+ 9433 81ba F30F6F8D movdqu -2464(%rbp), %xmm1
+ 9433 60F6FFFF
+ 9434 81c2 F30F7F8D movdqu %xmm1, -2352(%rbp)
+ 9434 D0F6FFFF
+ 9435 81ca F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 9435 C0F6FFFF
+ 9436 .LBB2370:
+ 9437 .LBB2371:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 9438 .loc 2 206 0
+ 9439 81d2 F30F6F85 movdqu -2368(%rbp), %xmm0
+ 9439 C0F6FFFF
+ 9440 81da F30F6F8D movdqu -2352(%rbp), %xmm1
+ 9440 D0F6FFFF
+ 9441 81e2 660FDBC1 pand %xmm1, %xmm0
+ 9442 .LBE2371:
+ 9443 .LBE2370:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 9444 .loc 2 854 0
+ 9445 81e6 F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 9445 B0F6FFFF
+ 9446 81ee F30F6F85 movdqu -2464(%rbp), %xmm0
+ 9446 60F6FFFF
+ 9447 81f6 F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 9447 F0F6FFFF
+ 9448 .LBB2372:
+ 9449 .LBB2373:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 9450 .loc 3 433 0
+ 9451 81fe F30F6F85 movdqu -2320(%rbp), %xmm0
+ 9451 F0F6FFFF
+ 9452 8206 660F72D0 psrld $4, %xmm0
+ 9452 04
+ 9453 .LBE2373:
+ 9454 .LBE2372:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 9455 .loc 2 857 0
+ 9456 820b F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 9456 A0F6FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 301
+
+
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9457 .loc 2 859 0
+ 9458 8213 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 9458 00000000
+ 9459 821b F30F6F8D movdqu -2400(%rbp), %xmm1
+ 9459 A0F6FFFF
+ 9460 8223 F30F7F8D movdqu %xmm1, -2288(%rbp)
+ 9460 10F7FFFF
+ 9461 822b F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 9461 00F7FFFF
+ 9462 .LBB2374:
+ 9463 .LBB2375:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 9464 .loc 2 206 0
+ 9465 8233 F30F6F85 movdqu -2304(%rbp), %xmm0
+ 9465 00F7FFFF
+ 9466 823b F30F6F8D movdqu -2288(%rbp), %xmm1
+ 9466 10F7FFFF
+ 9467 8243 660FDBC1 pand %xmm1, %xmm0
+ 9468 .LBE2375:
+ 9469 .LBE2374:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9470 .loc 2 859 0
+ 9471 8247 F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 9471 A0F6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 9472 .loc 2 866 0
+ 9473 824f C7857CF6 movl $0, -2436(%rbp)
+ 9473 FFFF0000
+ 9473 0000
+ 9474 8259 E9BE0100 jmp .L132
+ 9474 00
+ 9475 .L133:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 9476 .loc 2 868 0
+ 9477 825e 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 9477 00000000
+ 9478 8266 F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 9478 30F7FFFF
+ 9479 826e F30F6F85 movdqu -2400(%rbp), %xmm0
+ 9479 A0F6FFFF
+ 9480 8276 F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 9480 20F7FFFF
+ 9481 827e F30F6F85 movdqu -2256(%rbp), %xmm0
+ 9481 30F7FFFF
+ 9482 8286 F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 9482 50F7FFFF
+ 9483 828e F30F6F85 movdqu -2272(%rbp), %xmm0
+ 9483 20F7FFFF
+ 9484 8296 F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 9484 40F7FFFF
+ 9485 .LBB2376:
+ 9486 .LBB2377:
+ 9487 .LBB2378:
+ 9488 .LBB2379:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9489 .loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s page 302
+
+
+ 9490 829e F30F6F8D movdqu -2240(%rbp), %xmm1
+ 9490 40F7FFFF
+ 9491 82a6 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 9491 50F7FFFF
+ 9492 82ae 660F3800 pshufb %xmm1, %xmm0
+ 9492 C1
+ 9493 .LBE2379:
+ 9494 .LBE2378:
+ 9495 .LBE2377:
+ 9496 .LBE2376:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 9497 .loc 2 868 0
+ 9498 82b3 F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 9498 90F6FFFF
+ 9499 82bb F30F6F85 movdqu -2384(%rbp), %xmm0
+ 9499 B0F6FFFF
+ 9500 82c3 F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 9500 70F7FFFF
+ 9501 82cb F30F6F85 movdqu -2416(%rbp), %xmm0
+ 9501 90F6FFFF
+ 9502 82d3 F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 9502 60F7FFFF
+ 9503 .LBB2380:
+ 9504 .LBB2381:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 9505 .loc 2 234 0
+ 9506 82db F30F6F85 movdqu -2208(%rbp), %xmm0
+ 9506 60F7FFFF
+ 9507 82e3 F30F6F8D movdqu -2192(%rbp), %xmm1
+ 9507 70F7FFFF
+ 9508 82eb 660FEBC1 por %xmm1, %xmm0
+ 9509 .LBE2381:
+ 9510 .LBE2380:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 9511 .loc 2 870 0
+ 9512 82ef F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 9512 90F6FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 9513 .loc 2 872 0
+ 9514 82f7 8B857CF6 mov -2436(%rbp), %eax
+ 9514 FFFF
+ 9515 82fd 48C1E004 salq $4, %rax
+ 9516 8301 48038558 addq -2472(%rbp), %rax
+ 9516 F6FFFF
+ 9517 8308 660F6F00 movdqa (%rax), %xmm0
+ 9518 830c F30F7F85 movdqu %xmm0, -2160(%rbp)
+ 9518 90F7FFFF
+ 9519 8314 F30F6F85 movdqu -2416(%rbp), %xmm0
+ 9519 90F6FFFF
+ 9520 831c F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 9520 80F7FFFF
+ 9521 8324 F30F6F85 movdqu -2160(%rbp), %xmm0
+ 9521 90F7FFFF
+ 9522 832c F30F7F85 movdqu %xmm0, -2128(%rbp)
+ 9522 B0F7FFFF
+ 9523 8334 F30F6F85 movdqu -2176(%rbp), %xmm0
+ 9523 80F7FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 303
+
+
+ 9524 833c F30F7F85 movdqu %xmm0, -2144(%rbp)
+ 9524 A0F7FFFF
+ 9525 .LBB2382:
+ 9526 .LBB2383:
+ 9527 .LBB2384:
+ 9528 .LBB2385:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9529 .loc 3 529 0
+ 9530 8344 F30F6F8D movdqu -2144(%rbp), %xmm1
+ 9530 A0F7FFFF
+ 9531 834c F30F6F85 movdqu -2128(%rbp), %xmm0
+ 9531 B0F7FFFF
+ 9532 8354 660F3800 pshufb %xmm1, %xmm0
+ 9532 C1
+ 9533 .LBE2385:
+ 9534 .LBE2384:
+ 9535 .LBE2383:
+ 9536 .LBE2382:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 9537 .loc 2 872 0
+ 9538 8359 F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 9538 90F6FFFF
+ 9539 8361 F30F6F85 movdqu -2432(%rbp), %xmm0
+ 9539 80F6FFFF
+ 9540 8369 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 9540 D0F7FFFF
+ 9541 8371 F30F6F85 movdqu -2416(%rbp), %xmm0
+ 9541 90F6FFFF
+ 9542 8379 F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 9542 C0F7FFFF
+ 9543 .LBB2386:
+ 9544 .LBB2387:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 9545 .loc 2 234 0
+ 9546 8381 F30F6F85 movdqu -2112(%rbp), %xmm0
+ 9546 C0F7FFFF
+ 9547 8389 F30F6F8D movdqu -2096(%rbp), %xmm1
+ 9547 D0F7FFFF
+ 9548 8391 660FEBC1 por %xmm1, %xmm0
+ 9549 .LBE2387:
+ 9550 .LBE2386:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 9551 .loc 2 874 0
+ 9552 8395 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 9552 80F6FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 9553 .loc 2 876 0
+ 9554 839d 660F6F05 movdqa vec_01(%rip), %xmm0
+ 9554 00000000
+ 9555 83a5 F30F6F8D movdqu -2400(%rbp), %xmm1
+ 9555 A0F6FFFF
+ 9556 83ad F30F7F8D movdqu %xmm1, -2064(%rbp)
+ 9556 F0F7FFFF
+ 9557 83b5 F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 9557 E0F7FFFF
+ 9558 .LBB2388:
+ 9559 .LBB2389:
+
GAS LISTING /tmp/ccjbMjHD.s page 304
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 9560 .loc 2 290 0
+ 9561 83bd F30F6F8D movdqu -2080(%rbp), %xmm1
+ 9561 E0F7FFFF
+ 9562 83c5 F30F6F85 movdqu -2064(%rbp), %xmm0
+ 9562 F0F7FFFF
+ 9563 83cd 660FF8C1 psubb %xmm1, %xmm0
+ 9564 .LBE2389:
+ 9565 .LBE2388:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 9566 .loc 2 876 0
+ 9567 83d1 F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 9567 A0F6FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9568 .loc 2 878 0
+ 9569 83d9 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 9569 00000000
+ 9570 83e1 F30F6F8D movdqu -2400(%rbp), %xmm1
+ 9570 A0F6FFFF
+ 9571 83e9 F30F7F8D movdqu %xmm1, -2032(%rbp)
+ 9571 10F8FFFF
+ 9572 83f1 F30F7F85 movdqu %xmm0, -2048(%rbp)
+ 9572 00F8FFFF
+ 9573 .LBB2390:
+ 9574 .LBB2391:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 9575 .loc 2 206 0
+ 9576 83f9 F30F6F85 movdqu -2048(%rbp), %xmm0
+ 9576 00F8FFFF
+ 9577 8401 F30F6F8D movdqu -2032(%rbp), %xmm1
+ 9577 10F8FFFF
+ 9578 8409 660FDBC1 pand %xmm1, %xmm0
+ 9579 .LBE2391:
+ 9580 .LBE2390:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9581 .loc 2 878 0
+ 9582 840d F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 9582 A0F6FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 9583 .loc 2 866 0
+ 9584 8415 83857CF6 addl $1, -2436(%rbp)
+ 9584 FFFF01
+ 9585 .L132:
+ 9586 841c 83BD7CF6 cmpl $15, -2436(%rbp)
+ 9586 FFFF0F
+ 9587 8423 0F8635FE jbe .L133
+ 9587 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 9588 .loc 2 882 0
+ 9589 8429 F30F6F85 movdqu -2432(%rbp), %xmm0
+ 9589 80F6FFFF
+ 9590 .LBE2369:
+ 9591 .LBE2368:
+ 9592 .LBE2367:
+ 9593 .LBE2366:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 9594 .loc 2 1682 0
+
GAS LISTING /tmp/ccjbMjHD.s page 305
+
+
+ 9595 8431 660F7F85 movdqa %xmm0, -8656(%rbp)
+ 9595 30DEFFFF
+ 9596 .LBB2392:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 9597 .loc 2 1683 0
+ 9598 8439 660F6F85 movdqa -8656(%rbp), %xmm0
+ 9598 30DEFFFF
+ 9599 8441 F30F7F85 movdqu %xmm0, -8256(%rbp)
+ 9599 C0DFFFFF
+ 9600 8449 E8000000 call KDbgWriterGet at PLT
+ 9600 00
+ 9601 844e 4885C0 testq %rax, %rax
+ 9602 8451 7479 je .L135
+ 9603 8453 BF010000 movl $1, %edi
+ 9603 00
+ 9604 8458 E8000000 call KDbgCondToFlag at PLT
+ 9604 00
+ 9605 845d 4889C6 movq %rax, %rsi
+ 9606 8460 BF100000 movl $16, %edi
+ 9606 00
+ 9607 8465 E8000000 call KDbgTestModConds at PLT
+ 9607 00
+ 9608 846a 84C0 testb %al, %al
+ 9609 846c 745E je .L135
+ 9610 846e 8B85CCDF movl -8244(%rbp), %eax
+ 9610 FFFF
+ 9611 8474 89C7 movl %eax, %edi
+ 9612 8476 E8857BFF call bswap_32
+ 9612 FF
+ 9613 847b 4189C5 movl %eax, %r13d
+ 9614 847e 8B85C8DF movl -8248(%rbp), %eax
+ 9614 FFFF
+ 9615 8484 89C7 movl %eax, %edi
+ 9616 8486 E8757BFF call bswap_32
+ 9616 FF
+ 9617 848b 4189C4 movl %eax, %r12d
+ 9618 848e 8B85C4DF movl -8252(%rbp), %eax
+ 9618 FFFF
+ 9619 8494 89C7 movl %eax, %edi
+ 9620 8496 E8657BFF call bswap_32
+ 9620 FF
+ 9621 849b 89C3 movl %eax, %ebx
+ 9622 849d 8B85C0DF movl -8256(%rbp), %eax
+ 9622 FFFF
+ 9623 84a3 89C7 movl %eax, %edi
+ 9624 84a5 E8567BFF call bswap_32
+ 9624 FF
+ 9625 84aa 4589E9 movl %r13d, %r9d
+ 9626 84ad 4589E0 movl %r12d, %r8d
+ 9627 84b0 89D9 movl %ebx, %ecx
+ 9628 84b2 89C2 movl %eax, %edx
+ 9629 84b4 488D3500 leaq .LC0(%rip), %rsi
+ 9629 000000
+ 9630 84bb 488D3D00 leaq .LC1(%rip), %rdi
+ 9630 000000
+ 9631 84c2 B8000000 movl $0, %eax
+ 9631 00
+
GAS LISTING /tmp/ccjbMjHD.s page 306
+
+
+ 9632 84c7 E8000000 call KDbgMsg at PLT
+ 9632 00
+ 9633 .L135:
+ 9634 84cc 660F6F95 movdqa -8656(%rbp), %xmm2
+ 9634 30DEFFFF
+ 9635 84d4 F30F7F95 movdqu %xmm2, -2016(%rbp)
+ 9635 20F8FFFF
+ 9636 .LBE2392:
+ 9637 .LBB2393:
+ 9638 .LBB2394:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 9639 .loc 2 667 0
+ 9640 84dc 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 9640 00000000
+ 9641 84e4 F30F6F8D movdqu -2016(%rbp), %xmm1
+ 9641 20F8FFFF
+ 9642 84ec F30F7F8D movdqu %xmm1, -1984(%rbp)
+ 9642 40F8FFFF
+ 9643 84f4 F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 9643 30F8FFFF
+ 9644 84fc F30F6F85 movdqu -1984(%rbp), %xmm0
+ 9644 40F8FFFF
+ 9645 8504 F30F7F85 movdqu %xmm0, -1952(%rbp)
+ 9645 60F8FFFF
+ 9646 850c F30F6F85 movdqu -2000(%rbp), %xmm0
+ 9646 30F8FFFF
+ 9647 8514 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 9647 50F8FFFF
+ 9648 .LBB2395:
+ 9649 .LBB2396:
+ 9650 .LBB2397:
+ 9651 .LBB2398:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9652 .loc 3 529 0
+ 9653 851c F30F6F8D movdqu -1968(%rbp), %xmm1
+ 9653 50F8FFFF
+ 9654 8524 F30F6F85 movdqu -1952(%rbp), %xmm0
+ 9654 60F8FFFF
+ 9655 852c 660F3800 pshufb %xmm1, %xmm0
+ 9655 C1
+ 9656 .LBE2398:
+ 9657 .LBE2397:
+ 9658 .LBE2396:
+ 9659 .LBE2395:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 9660 .loc 2 667 0
+ 9661 8531 F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 9661 20F8FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 9662 .loc 2 668 0
+ 9663 8539 F30F6F85 movdqu -2016(%rbp), %xmm0
+ 9663 20F8FFFF
+ 9664 .LBE2394:
+ 9665 .LBE2393:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 9666 .loc 2 1684 0
+ 9667 8541 660F7F85 movdqa %xmm0, -8656(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 307
+
+
+ 9667 30DEFFFF
+ 9668 .LBB2399:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 9669 .loc 2 1685 0
+ 9670 8549 660F6F85 movdqa -8656(%rbp), %xmm0
+ 9670 30DEFFFF
+ 9671 8551 F30F7F85 movdqu %xmm0, -8272(%rbp)
+ 9671 B0DFFFFF
+ 9672 8559 E8000000 call KDbgWriterGet at PLT
+ 9672 00
+ 9673 855e 4885C0 testq %rax, %rax
+ 9674 8561 7479 je .L137
+ 9675 8563 BF010000 movl $1, %edi
+ 9675 00
+ 9676 8568 E8000000 call KDbgCondToFlag at PLT
+ 9676 00
+ 9677 856d 4889C6 movq %rax, %rsi
+ 9678 8570 BF100000 movl $16, %edi
+ 9678 00
+ 9679 8575 E8000000 call KDbgTestModConds at PLT
+ 9679 00
+ 9680 857a 84C0 testb %al, %al
+ 9681 857c 745E je .L137
+ 9682 857e 8B85BCDF movl -8260(%rbp), %eax
+ 9682 FFFF
+ 9683 8584 89C7 movl %eax, %edi
+ 9684 8586 E8757AFF call bswap_32
+ 9684 FF
+ 9685 858b 4189C5 movl %eax, %r13d
+ 9686 858e 8B85B8DF movl -8264(%rbp), %eax
+ 9686 FFFF
+ 9687 8594 89C7 movl %eax, %edi
+ 9688 8596 E8657AFF call bswap_32
+ 9688 FF
+ 9689 859b 4189C4 movl %eax, %r12d
+ 9690 859e 8B85B4DF movl -8268(%rbp), %eax
+ 9690 FFFF
+ 9691 85a4 89C7 movl %eax, %edi
+ 9692 85a6 E8557AFF call bswap_32
+ 9692 FF
+ 9693 85ab 89C3 movl %eax, %ebx
+ 9694 85ad 8B85B0DF movl -8272(%rbp), %eax
+ 9694 FFFF
+ 9695 85b3 89C7 movl %eax, %edi
+ 9696 85b5 E8467AFF call bswap_32
+ 9696 FF
+ 9697 85ba 4589E9 movl %r13d, %r9d
+ 9698 85bd 4589E0 movl %r12d, %r8d
+ 9699 85c0 89D9 movl %ebx, %ecx
+ 9700 85c2 89C2 movl %eax, %edx
+ 9701 85c4 488D3500 leaq .LC2(%rip), %rsi
+ 9701 000000
+ 9702 85cb 488D3D00 leaq .LC1(%rip), %rdi
+ 9702 000000
+ 9703 85d2 B8000000 movl $0, %eax
+ 9703 00
+ 9704 85d7 E8000000 call KDbgMsg at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 308
+
+
+ 9704 00
+ 9705 .L137:
+ 9706 85dc 660F6F95 movdqa -8656(%rbp), %xmm2
+ 9706 30DEFFFF
+ 9707 85e4 F30F7F95 movdqu %xmm2, -1920(%rbp)
+ 9707 80F8FFFF
+ 9708 85ec 660F6F85 movdqa -8640(%rbp), %xmm0
+ 9708 40DEFFFF
+ 9709 85f4 F30F7F85 movdqu %xmm0, -1936(%rbp)
+ 9709 70F8FFFF
+ 9710 .LBE2399:
+ 9711 .LBB2400:
+ 9712 .LBB2401:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 9713 .loc 2 178 0
+ 9714 85fc F30F6F85 movdqu -1936(%rbp), %xmm0
+ 9714 70F8FFFF
+ 9715 8604 F30F6F8D movdqu -1920(%rbp), %xmm1
+ 9715 80F8FFFF
+ 9716 860c 660FEFC1 pxor %xmm1, %xmm0
+ 9717 .LBE2401:
+ 9718 .LBE2400:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 9719 .loc 2 1686 0
+ 9720 8610 660F7F85 movdqa %xmm0, -8656(%rbp)
+ 9720 30DEFFFF
+ 9721 .LBB2402:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 9722 .loc 2 1687 0
+ 9723 8618 660F6F95 movdqa -8656(%rbp), %xmm2
+ 9723 30DEFFFF
+ 9724 8620 F30F7F95 movdqu %xmm2, -8288(%rbp)
+ 9724 A0DFFFFF
+ 9725 8628 E8000000 call KDbgWriterGet at PLT
+ 9725 00
+ 9726 862d 4885C0 testq %rax, %rax
+ 9727 8630 7479 je .L139
+ 9728 8632 BF010000 movl $1, %edi
+ 9728 00
+ 9729 8637 E8000000 call KDbgCondToFlag at PLT
+ 9729 00
+ 9730 863c 4889C6 movq %rax, %rsi
+ 9731 863f BF100000 movl $16, %edi
+ 9731 00
+ 9732 8644 E8000000 call KDbgTestModConds at PLT
+ 9732 00
+ 9733 8649 84C0 testb %al, %al
+ 9734 864b 745E je .L139
+ 9735 864d 8B85ACDF movl -8276(%rbp), %eax
+ 9735 FFFF
+ 9736 8653 89C7 movl %eax, %edi
+ 9737 8655 E8A679FF call bswap_32
+ 9737 FF
+ 9738 865a 4189C5 movl %eax, %r13d
+ 9739 865d 8B85A8DF movl -8280(%rbp), %eax
+ 9739 FFFF
+ 9740 8663 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 309
+
+
+ 9741 8665 E89679FF call bswap_32
+ 9741 FF
+ 9742 866a 4189C4 movl %eax, %r12d
+ 9743 866d 8B85A4DF movl -8284(%rbp), %eax
+ 9743 FFFF
+ 9744 8673 89C7 movl %eax, %edi
+ 9745 8675 E88679FF call bswap_32
+ 9745 FF
+ 9746 867a 89C3 movl %eax, %ebx
+ 9747 867c 8B85A0DF movl -8288(%rbp), %eax
+ 9747 FFFF
+ 9748 8682 89C7 movl %eax, %edi
+ 9749 8684 E87779FF call bswap_32
+ 9749 FF
+ 9750 8689 4589E9 movl %r13d, %r9d
+ 9751 868c 4589E0 movl %r12d, %r8d
+ 9752 868f 89D9 movl %ebx, %ecx
+ 9753 8691 89C2 movl %eax, %edx
+ 9754 8693 488D3500 leaq .LC3(%rip), %rsi
+ 9754 000000
+ 9755 869a 488D3D00 leaq .LC1(%rip), %rdi
+ 9755 000000
+ 9756 86a1 B8000000 movl $0, %eax
+ 9756 00
+ 9757 86a6 E8000000 call KDbgMsg at PLT
+ 9757 00
+ 9758 .L139:
+ 9759 86ab 660F6F85 movdqa -8656(%rbp), %xmm0
+ 9759 30DEFFFF
+ 9760 86b3 F30F7F85 movdqu %xmm0, -1904(%rbp)
+ 9760 90F8FFFF
+ 9761 86bb F30F6F85 movdqu -1904(%rbp), %xmm0
+ 9761 90F8FFFF
+ 9762 86c3 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 9762 B0F8FFFF
+ 9763 .LBE2402:
+ 9764 .LBB2403:
+ 9765 .LBB2404:
+ 9766 .LBB2405:
+ 9767 .LBB2406:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 9768 .loc 3 450 0
+ 9769 86cb F30F6F85 movdqu -1872(%rbp), %xmm0
+ 9769 B0F8FFFF
+ 9770 86d3 660F70C0 pshufd $255, %xmm0, %xmm0
+ 9770 FF
+ 9771 .LBE2406:
+ 9772 .LBE2405:
+ 9773 .LBE2404:
+ 9774 .LBE2403:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 9775 .loc 2 1688 0
+ 9776 86d8 660F7F85 movdqa %xmm0, -8656(%rbp)
+ 9776 30DEFFFF
+ 9777 .LBB2407:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 9778 .loc 2 1689 0
+
GAS LISTING /tmp/ccjbMjHD.s page 310
+
+
+ 9779 86e0 660F6F95 movdqa -8656(%rbp), %xmm2
+ 9779 30DEFFFF
+ 9780 86e8 F30F7F95 movdqu %xmm2, -8304(%rbp)
+ 9780 90DFFFFF
+ 9781 86f0 E8000000 call KDbgWriterGet at PLT
+ 9781 00
+ 9782 86f5 4885C0 testq %rax, %rax
+ 9783 86f8 7479 je .L141
+ 9784 86fa BF010000 movl $1, %edi
+ 9784 00
+ 9785 86ff E8000000 call KDbgCondToFlag at PLT
+ 9785 00
+ 9786 8704 4889C6 movq %rax, %rsi
+ 9787 8707 BF100000 movl $16, %edi
+ 9787 00
+ 9788 870c E8000000 call KDbgTestModConds at PLT
+ 9788 00
+ 9789 8711 84C0 testb %al, %al
+ 9790 8713 745E je .L141
+ 9791 8715 8B859CDF movl -8292(%rbp), %eax
+ 9791 FFFF
+ 9792 871b 89C7 movl %eax, %edi
+ 9793 871d E8DE78FF call bswap_32
+ 9793 FF
+ 9794 8722 4189C5 movl %eax, %r13d
+ 9795 8725 8B8598DF movl -8296(%rbp), %eax
+ 9795 FFFF
+ 9796 872b 89C7 movl %eax, %edi
+ 9797 872d E8CE78FF call bswap_32
+ 9797 FF
+ 9798 8732 4189C4 movl %eax, %r12d
+ 9799 8735 8B8594DF movl -8300(%rbp), %eax
+ 9799 FFFF
+ 9800 873b 89C7 movl %eax, %edi
+ 9801 873d E8BE78FF call bswap_32
+ 9801 FF
+ 9802 8742 89C3 movl %eax, %ebx
+ 9803 8744 8B8590DF movl -8304(%rbp), %eax
+ 9803 FFFF
+ 9804 874a 89C7 movl %eax, %edi
+ 9805 874c E8AF78FF call bswap_32
+ 9805 FF
+ 9806 8751 4589E9 movl %r13d, %r9d
+ 9807 8754 4589E0 movl %r12d, %r8d
+ 9808 8757 89D9 movl %ebx, %ecx
+ 9809 8759 89C2 movl %eax, %edx
+ 9810 875b 488D3500 leaq .LC4(%rip), %rsi
+ 9810 000000
+ 9811 8762 488D3D00 leaq .LC1(%rip), %rdi
+ 9811 000000
+ 9812 8769 B8000000 movl $0, %eax
+ 9812 00
+ 9813 876e E8000000 call KDbgMsg at PLT
+ 9813 00
+ 9814 .L141:
+ 9815 .LBE2407:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+
GAS LISTING /tmp/ccjbMjHD.s page 311
+
+
+ 9816 .loc 2 1690 0
+ 9817 8773 660F6F85 movdqa -8656(%rbp), %xmm0
+ 9817 30DEFFFF
+ 9818 .LBE2361:
+ 9819 .LBE2360:
+ 9820 .loc 2 1858 0
+ 9821 877b 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 9821 00DDFFFF
+1859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v2,0x20); /* F(k35): F(k35): F(k35) : F(k35) */
+1860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k36 : k37 : k38 : k39 */
+ 9822 .loc 2 1860 0
+ 9823 8783 660F6F85 movdqa -9040(%rbp), %xmm0
+ 9823 B0DCFFFF
+ 9824 878b 660FEF85 pxor -8960(%rbp), %xmm0
+ 9824 00DDFFFF
+ 9825 8793 660F7F85 movdqa %xmm0, -9040(%rbp)
+ 9825 B0DCFFFF
+ 9826 879b 660F6F95 movdqa -9040(%rbp), %xmm2
+ 9826 B0DCFFFF
+ 9827 87a3 F30F7F95 movdqu %xmm2, -1856(%rbp)
+ 9827 C0F8FFFF
+ 9828 87ab F30F6F85 movdqu -1856(%rbp), %xmm0
+ 9828 C0F8FFFF
+ 9829 87b3 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 9829 E0F8FFFF
+ 9830 .LBB2408:
+ 9831 .LBB2409:
+ 9832 .LBB2410:
+ 9833 .LBB2411:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 9834 .loc 3 450 0
+ 9835 87bb F30F6F85 movdqu -1824(%rbp), %xmm0
+ 9835 E0F8FFFF
+ 9836 87c3 660F70C0 pshufd $255, %xmm0, %xmm0
+ 9836 FF
+ 9837 .LBE2411:
+ 9838 .LBE2410:
+ 9839 .LBE2409:
+ 9840 .LBE2408:
+1861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (v0); /* k39 : k39 : k39 : k39 */
+ 9841 .loc 2 1861 0
+ 9842 87c8 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 9842 00DDFFFF
+1862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 ^= k; /* k40 : k41 : x : x */
+ 9843 .loc 2 1862 0
+ 9844 87d0 660F6F85 movdqa -9024(%rbp), %xmm0
+ 9844 C0DCFFFF
+ 9845 87d8 660FEF85 pxor -8960(%rbp), %xmm0
+ 9845 00DDFFFF
+ 9846 87e0 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 9846 C0DCFFFF
+1863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[9] = v0; /* K36:K37:K38:K39 */
+ 9847 .loc 2 1864 0
+ 9848 87e8 488B85A8 movq -8536(%rbp), %rax
+ 9848 DEFFFF
+ 9849 87ef 48059000 addq $144, %rax
+
GAS LISTING /tmp/ccjbMjHD.s page 312
+
+
+ 9849 0000
+ 9850 87f5 660F6F95 movdqa -9040(%rbp), %xmm2
+ 9850 B0DCFFFF
+ 9851 87fd 660F7F10 movdqa %xmm2, (%rax)
+1865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 40-55 but we only need through 51 so we change from pattern 2 to pattern 3 */
+1867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 9852 .loc 2 1869 0
+ 9853 8801 660F6F85 movdqa -9024(%rbp), %xmm0
+ 9853 C0DCFFFF
+ 9854 8809 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 9854 00DDFFFF
+ 9855 8811 660F6F95 movdqa -8960(%rbp), %xmm2
+ 9855 00DDFFFF
+ 9856 8819 F30F7F95 movdqu %xmm2, -1792(%rbp)
+ 9856 00F9FFFF
+ 9857 .LBB2412:
+ 9858 .LBB2413:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rconw = (AESWord)(AESByte)rcon;
+ 9859 .loc 2 1629 0
+ 9860 8821 B8400000 movl $64, %eax
+ 9860 00
+ 9861 8826 0FB6C0 movzbl %al, %eax
+ 9862 8829 898520F9 movl %eax, -1760(%rbp)
+ 9862 FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 9863 .loc 2 1630 0
+ 9864 882f F30F6F85 movdqu -1792(%rbp), %xmm0
+ 9864 00F9FFFF
+ 9865 8837 F30F7F85 movdqu %xmm0, -8224(%rbp)
+ 9865 E0DFFFFF
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 9866 .loc 2 1631 0
+ 9867 883f 8B85E4DF movl -8220(%rbp), %eax
+ 9867 FFFF
+ 9868 8845 898524F9 movl %eax, -1756(%rbp)
+ 9868 FFFF
+ 9869 .LBB2414:
+ 9870 .LBB2415:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 9871 .loc 2 740 0
+ 9872 884b 8B8524F9 movl -1756(%rbp), %eax
+ 9872 FFFF
+ 9873 8851 8985D0DF movl %eax, -8240(%rbp)
+ 9873 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 9874 .loc 2 741 0
+ 9875 8857 C78528F9 movl $0, -1752(%rbp)
+ 9875 FFFF0000
+ 9875 0000
+ 9876 8861 EB36 jmp .L142
+ 9877 .L143:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 9878 .loc 2 742 0
+ 9879 8863 8B8D28F9 movl -1752(%rbp), %ecx
+
GAS LISTING /tmp/ccjbMjHD.s page 313
+
+
+ 9879 FFFF
+ 9880 8869 8B8528F9 movl -1752(%rbp), %eax
+ 9880 FFFF
+ 9881 886f 89C0 mov %eax, %eax
+ 9882 8871 0FB68405 movzbl -8240(%rbp,%rax), %eax
+ 9882 D0DFFFFF
+ 9883 8879 0FB6C0 movzbl %al, %eax
+ 9884 887c 89C2 mov %eax, %edx
+ 9885 887e 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 9885 000000
+ 9886 8885 0FB61402 movzbl (%rdx,%rax), %edx
+ 9887 8889 89C8 mov %ecx, %eax
+ 9888 888b 889405D0 movb %dl, -8240(%rbp,%rax)
+ 9888 DFFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 9889 .loc 2 741 0
+ 9890 8892 838528F9 addl $1, -1752(%rbp)
+ 9890 FFFF01
+ 9891 .L142:
+ 9892 8899 83BD28F9 cmpl $3, -1752(%rbp)
+ 9892 FFFF03
+ 9893 88a0 76C1 jbe .L143
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 9894 .loc 2 743 0
+ 9895 88a2 8B85D0DF movl -8240(%rbp), %eax
+ 9895 FFFF
+ 9896 .LBE2415:
+ 9897 .LBE2414:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[1]);
+ 9898 .loc 2 1631 0
+ 9899 88a8 89851CF9 movl %eax, -1764(%rbp)
+ 9899 FFFF
+ 9900 88ae 8B851CF9 movl -1764(%rbp), %eax
+ 9900 FFFF
+ 9901 88b4 89852CF9 movl %eax, -1748(%rbp)
+ 9901 FFFF
+ 9902 .LBB2416:
+ 9903 .LBB2417:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (w >> 8) | (w << 24);
+ 9904 .loc 2 1196 0
+ 9905 88ba 8B852CF9 movl -1748(%rbp), %eax
+ 9905 FFFF
+ 9906 88c0 C1C808 rorl $8, %eax
+ 9907 .LBE2417:
+ 9908 .LBE2416:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(RotWord)(temp);
+ 9909 .loc 2 1632 0
+ 9910 88c3 89851CF9 movl %eax, -1764(%rbp)
+ 9910 FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp ^= rconw;
+ 9911 .loc 2 1633 0
+ 9912 88c9 8B8520F9 movl -1760(%rbp), %eax
+ 9912 FFFF
+ 9913 88cf 31851CF9 xorl %eax, -1764(%rbp)
+ 9913 FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 9914 .loc 2 1635 0
+
GAS LISTING /tmp/ccjbMjHD.s page 314
+
+
+ 9915 88d5 8B851CF9 movl -1764(%rbp), %eax
+ 9915 FFFF
+ 9916 88db 8985ECDF movl %eax, -8212(%rbp)
+ 9916 FFFF
+ 9917 88e1 8B85ECDF movl -8212(%rbp), %eax
+ 9917 FFFF
+ 9918 88e7 8985E8DF movl %eax, -8216(%rbp)
+ 9918 FFFF
+ 9919 88ed 8B85E8DF movl -8216(%rbp), %eax
+ 9919 FFFF
+ 9920 88f3 8985E4DF movl %eax, -8220(%rbp)
+ 9920 FFFF
+ 9921 88f9 8B85E4DF movl -8220(%rbp), %eax
+ 9921 FFFF
+ 9922 88ff 8985E0DF movl %eax, -8224(%rbp)
+ 9922 FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 9923 .loc 2 1636 0
+ 9924 8905 F30F6F85 movdqu -8224(%rbp), %xmm0
+ 9924 E0DFFFFF
+ 9925 .LBE2413:
+ 9926 .LBE2412:
+ 9927 .loc 2 1869 0
+ 9928 890d 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 9928 00DDFFFF
+ 9929 8915 660F6F85 movdqa -9040(%rbp), %xmm0
+ 9929 B0DCFFFF
+ 9930 891d F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 9930 30F9FFFF
+ 9931 .LBB2418:
+ 9932 .LBB2419:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 9933 .loc 2 1565 0
+ 9934 8925 F30F6F95 movdqu -1744(%rbp), %xmm2
+ 9934 30F9FFFF
+ 9935 892d 660F7F95 movdqa %xmm2, -8624(%rbp)
+ 9935 50DEFFFF
+ 9936 8935 660F6F85 movdqa -8624(%rbp), %xmm0
+ 9936 50DEFFFF
+ 9937 893d F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 9937 40F9FFFF
+ 9938 .LBB2420:
+ 9939 .LBB2421:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9940 .loc 2 1278 0
+ 9941 8945 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9941 00000000
+ 9942 894d F30F6F8D movdqu -1728(%rbp), %xmm1
+ 9942 40F9FFFF
+ 9943 8955 F30F7F8D movdqu %xmm1, -1696(%rbp)
+ 9943 60F9FFFF
+ 9944 895d F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 9944 50F9FFFF
+ 9945 8965 F30F6F85 movdqu -1696(%rbp), %xmm0
+ 9945 60F9FFFF
+ 9946 896d F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 9946 80F9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 315
+
+
+ 9947 8975 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 9947 50F9FFFF
+ 9948 897d F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 9948 70F9FFFF
+ 9949 .LBB2422:
+ 9950 .LBB2423:
+ 9951 .LBB2424:
+ 9952 .LBB2425:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9953 .loc 3 529 0
+ 9954 8985 F30F6F8D movdqu -1680(%rbp), %xmm1
+ 9954 70F9FFFF
+ 9955 898d F30F6F85 movdqu -1664(%rbp), %xmm0
+ 9955 80F9FFFF
+ 9956 8995 660F3800 pshufb %xmm1, %xmm0
+ 9956 C1
+ 9957 .LBE2425:
+ 9958 .LBE2424:
+ 9959 .LBE2423:
+ 9960 .LBE2422:
+ 9961 .LBE2421:
+ 9962 .LBE2420:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9963 .loc 2 1567 0
+ 9964 899a 660F7F85 movdqa %xmm0, -8624(%rbp)
+ 9964 50DEFFFF
+ 9965 89a2 660F6F85 movdqa -8624(%rbp), %xmm0
+ 9965 50DEFFFF
+ 9966 89aa 660FEF85 pxor -1744(%rbp), %xmm0
+ 9966 30F9FFFF
+ 9967 89b2 F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 9967 30F9FFFF
+ 9968 89ba 660F6F95 movdqa -8624(%rbp), %xmm2
+ 9968 50DEFFFF
+ 9969 89c2 F30F7F95 movdqu %xmm2, -1648(%rbp)
+ 9969 90F9FFFF
+ 9970 .LBB2426:
+ 9971 .LBB2427:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9972 .loc 2 1278 0
+ 9973 89ca 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 9973 00000000
+ 9974 89d2 F30F6F8D movdqu -1648(%rbp), %xmm1
+ 9974 90F9FFFF
+ 9975 89da F30F7F8D movdqu %xmm1, -1616(%rbp)
+ 9975 B0F9FFFF
+ 9976 89e2 F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 9976 A0F9FFFF
+ 9977 89ea F30F6F85 movdqu -1616(%rbp), %xmm0
+ 9977 B0F9FFFF
+ 9978 89f2 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 9978 D0F9FFFF
+ 9979 89fa F30F6F85 movdqu -1632(%rbp), %xmm0
+ 9979 A0F9FFFF
+ 9980 8a02 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 9980 C0F9FFFF
+ 9981 .LBB2428:
+
GAS LISTING /tmp/ccjbMjHD.s page 316
+
+
+ 9982 .LBB2429:
+ 9983 .LBB2430:
+ 9984 .LBB2431:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9985 .loc 3 529 0
+ 9986 8a0a F30F6F8D movdqu -1600(%rbp), %xmm1
+ 9986 C0F9FFFF
+ 9987 8a12 F30F6F85 movdqu -1584(%rbp), %xmm0
+ 9987 D0F9FFFF
+ 9988 8a1a 660F3800 pshufb %xmm1, %xmm0
+ 9988 C1
+ 9989 .LBE2431:
+ 9990 .LBE2430:
+ 9991 .LBE2429:
+ 9992 .LBE2428:
+ 9993 .LBE2427:
+ 9994 .LBE2426:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9995 .loc 2 1568 0
+ 9996 8a1f 660F7F85 movdqa %xmm0, -8624(%rbp)
+ 9996 50DEFFFF
+ 9997 8a27 660F6F85 movdqa -8624(%rbp), %xmm0
+ 9997 50DEFFFF
+ 9998 8a2f 660FEF85 pxor -1744(%rbp), %xmm0
+ 9998 30F9FFFF
+ 9999 8a37 F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 9999 30F9FFFF
+ 10000 8a3f 660F6F85 movdqa -8624(%rbp), %xmm0
+ 10000 50DEFFFF
+ 10001 8a47 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 10001 E0F9FFFF
+ 10002 .LBB2432:
+ 10003 .LBB2433:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10004 .loc 2 1278 0
+ 10005 8a4f 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 10005 00000000
+ 10006 8a57 F30F6F8D movdqu -1568(%rbp), %xmm1
+ 10006 E0F9FFFF
+ 10007 8a5f F30F7F8D movdqu %xmm1, -1536(%rbp)
+ 10007 00FAFFFF
+ 10008 8a67 F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 10008 F0F9FFFF
+ 10009 8a6f F30F6F85 movdqu -1536(%rbp), %xmm0
+ 10009 00FAFFFF
+ 10010 8a77 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 10010 20FAFFFF
+ 10011 8a7f F30F6F85 movdqu -1552(%rbp), %xmm0
+ 10011 F0F9FFFF
+ 10012 8a87 F30F7F85 movdqu %xmm0, -1520(%rbp)
+ 10012 10FAFFFF
+ 10013 .LBB2434:
+ 10014 .LBB2435:
+ 10015 .LBB2436:
+ 10016 .LBB2437:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10017 .loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s page 317
+
+
+ 10018 8a8f F30F6F8D movdqu -1520(%rbp), %xmm1
+ 10018 10FAFFFF
+ 10019 8a97 F30F6F85 movdqu -1504(%rbp), %xmm0
+ 10019 20FAFFFF
+ 10020 8a9f 660F3800 pshufb %xmm1, %xmm0
+ 10020 C1
+ 10021 .LBE2437:
+ 10022 .LBE2436:
+ 10023 .LBE2435:
+ 10024 .LBE2434:
+ 10025 .LBE2433:
+ 10026 .LBE2432:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10027 .loc 2 1569 0
+ 10028 8aa4 660F7F85 movdqa %xmm0, -8624(%rbp)
+ 10028 50DEFFFF
+ 10029 8aac 660F6F85 movdqa -8624(%rbp), %xmm0
+ 10029 50DEFFFF
+ 10030 8ab4 660FEF85 pxor -1744(%rbp), %xmm0
+ 10030 30F9FFFF
+ 10031 8abc F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 10031 30F9FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10032 .loc 2 1571 0
+ 10033 8ac4 F30F6F85 movdqu -1744(%rbp), %xmm0
+ 10033 30F9FFFF
+ 10034 .LBE2419:
+ 10035 .LBE2418:
+1870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (k = v1,0x40); /* F(k41): F(k41): F(k41) : F(k41) */
+1871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 = AESBCMEMBER(ShiftXorColumns) (v0); /* k36 :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+ 10036 .loc 2 1871 0
+ 10037 8acc 660F7F85 movdqa %xmm0, -8992(%rbp)
+ 10037 E0DCFFFF
+ 10038 8ad4 660F6F95 movdqa -9024(%rbp), %xmm2
+ 10038 C0DCFFFF
+ 10039 8adc F30F7F95 movdqu %xmm2, -1488(%rbp)
+ 10039 30FAFFFF
+ 10040 .LBB2438:
+ 10041 .LBB2439:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 10042 .loc 2 1565 0
+ 10043 8ae4 F30F6F85 movdqu -1488(%rbp), %xmm0
+ 10043 30FAFFFF
+ 10044 8aec 660F7F85 movdqa %xmm0, -8608(%rbp)
+ 10044 60DEFFFF
+ 10045 8af4 660F6F95 movdqa -8608(%rbp), %xmm2
+ 10045 60DEFFFF
+ 10046 8afc F30F7F95 movdqu %xmm2, -1472(%rbp)
+ 10046 40FAFFFF
+ 10047 .LBB2440:
+ 10048 .LBB2441:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10049 .loc 2 1278 0
+ 10050 8b04 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 10050 00000000
+ 10051 8b0c F30F6F8D movdqu -1472(%rbp), %xmm1
+ 10051 40FAFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 318
+
+
+ 10052 8b14 F30F7F8D movdqu %xmm1, -1440(%rbp)
+ 10052 60FAFFFF
+ 10053 8b1c F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 10053 50FAFFFF
+ 10054 8b24 F30F6F85 movdqu -1440(%rbp), %xmm0
+ 10054 60FAFFFF
+ 10055 8b2c F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 10055 80FAFFFF
+ 10056 8b34 F30F6F85 movdqu -1456(%rbp), %xmm0
+ 10056 50FAFFFF
+ 10057 8b3c F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 10057 70FAFFFF
+ 10058 .LBB2442:
+ 10059 .LBB2443:
+ 10060 .LBB2444:
+ 10061 .LBB2445:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10062 .loc 3 529 0
+ 10063 8b44 F30F6F8D movdqu -1424(%rbp), %xmm1
+ 10063 70FAFFFF
+ 10064 8b4c F30F6F85 movdqu -1408(%rbp), %xmm0
+ 10064 80FAFFFF
+ 10065 8b54 660F3800 pshufb %xmm1, %xmm0
+ 10065 C1
+ 10066 .LBE2445:
+ 10067 .LBE2444:
+ 10068 .LBE2443:
+ 10069 .LBE2442:
+ 10070 .LBE2441:
+ 10071 .LBE2440:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10072 .loc 2 1567 0
+ 10073 8b59 660F7F85 movdqa %xmm0, -8608(%rbp)
+ 10073 60DEFFFF
+ 10074 8b61 660F6F85 movdqa -8608(%rbp), %xmm0
+ 10074 60DEFFFF
+ 10075 8b69 660FEF85 pxor -1488(%rbp), %xmm0
+ 10075 30FAFFFF
+ 10076 8b71 F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 10076 30FAFFFF
+ 10077 8b79 660F6F85 movdqa -8608(%rbp), %xmm0
+ 10077 60DEFFFF
+ 10078 8b81 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 10078 90FAFFFF
+ 10079 .LBB2446:
+ 10080 .LBB2447:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10081 .loc 2 1278 0
+ 10082 8b89 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 10082 00000000
+ 10083 8b91 F30F6F8D movdqu -1392(%rbp), %xmm1
+ 10083 90FAFFFF
+ 10084 8b99 F30F7F8D movdqu %xmm1, -1360(%rbp)
+ 10084 B0FAFFFF
+ 10085 8ba1 F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 10085 A0FAFFFF
+ 10086 8ba9 F30F6F85 movdqu -1360(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 319
+
+
+ 10086 B0FAFFFF
+ 10087 8bb1 F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 10087 D0FAFFFF
+ 10088 8bb9 F30F6F85 movdqu -1376(%rbp), %xmm0
+ 10088 A0FAFFFF
+ 10089 8bc1 F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 10089 C0FAFFFF
+ 10090 .LBB2448:
+ 10091 .LBB2449:
+ 10092 .LBB2450:
+ 10093 .LBB2451:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10094 .loc 3 529 0
+ 10095 8bc9 F30F6F8D movdqu -1344(%rbp), %xmm1
+ 10095 C0FAFFFF
+ 10096 8bd1 F30F6F85 movdqu -1328(%rbp), %xmm0
+ 10096 D0FAFFFF
+ 10097 8bd9 660F3800 pshufb %xmm1, %xmm0
+ 10097 C1
+ 10098 .LBE2451:
+ 10099 .LBE2450:
+ 10100 .LBE2449:
+ 10101 .LBE2448:
+ 10102 .LBE2447:
+ 10103 .LBE2446:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10104 .loc 2 1568 0
+ 10105 8bde 660F7F85 movdqa %xmm0, -8608(%rbp)
+ 10105 60DEFFFF
+ 10106 8be6 660F6F85 movdqa -8608(%rbp), %xmm0
+ 10106 60DEFFFF
+ 10107 8bee 660FEF85 pxor -1488(%rbp), %xmm0
+ 10107 30FAFFFF
+ 10108 8bf6 F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 10108 30FAFFFF
+ 10109 8bfe 660F6F95 movdqa -8608(%rbp), %xmm2
+ 10109 60DEFFFF
+ 10110 8c06 F30F7F95 movdqu %xmm2, -1312(%rbp)
+ 10110 E0FAFFFF
+ 10111 .LBB2452:
+ 10112 .LBB2453:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10113 .loc 2 1278 0
+ 10114 8c0e 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 10114 00000000
+ 10115 8c16 F30F6F8D movdqu -1312(%rbp), %xmm1
+ 10115 E0FAFFFF
+ 10116 8c1e F30F7F8D movdqu %xmm1, -1280(%rbp)
+ 10116 00FBFFFF
+ 10117 8c26 F30F7F85 movdqu %xmm0, -1296(%rbp)
+ 10117 F0FAFFFF
+ 10118 8c2e F30F6F85 movdqu -1280(%rbp), %xmm0
+ 10118 00FBFFFF
+ 10119 8c36 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 10119 20FBFFFF
+ 10120 8c3e F30F6F85 movdqu -1296(%rbp), %xmm0
+ 10120 F0FAFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 320
+
+
+ 10121 8c46 F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 10121 10FBFFFF
+ 10122 .LBB2454:
+ 10123 .LBB2455:
+ 10124 .LBB2456:
+ 10125 .LBB2457:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10126 .loc 3 529 0
+ 10127 8c4e F30F6F8D movdqu -1264(%rbp), %xmm1
+ 10127 10FBFFFF
+ 10128 8c56 F30F6F85 movdqu -1248(%rbp), %xmm0
+ 10128 20FBFFFF
+ 10129 8c5e 660F3800 pshufb %xmm1, %xmm0
+ 10129 C1
+ 10130 .LBE2457:
+ 10131 .LBE2456:
+ 10132 .LBE2455:
+ 10133 .LBE2454:
+ 10134 .LBE2453:
+ 10135 .LBE2452:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10136 .loc 2 1569 0
+ 10137 8c63 660F7F85 movdqa %xmm0, -8608(%rbp)
+ 10137 60DEFFFF
+ 10138 8c6b 660F6F85 movdqa -8608(%rbp), %xmm0
+ 10138 60DEFFFF
+ 10139 8c73 660FEF85 pxor -1488(%rbp), %xmm0
+ 10139 30FAFFFF
+ 10140 8c7b F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 10140 30FAFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10141 .loc 2 1571 0
+ 10142 8c83 F30F6F85 movdqu -1488(%rbp), %xmm0
+ 10142 30FAFFFF
+ 10143 .LBE2439:
+ 10144 .LBE2438:
+1872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 = AESBCMEMBER(ShiftXorColumns) (v1); /* k40 :k40^k41: x 5 : x */
+ 10145 .loc 2 1872 0
+ 10146 8c8b 660F7F85 movdqa %xmm0, -8976(%rbp)
+ 10146 F0DCFFFF
+1873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v3 ^= k; /* k42 : k43 : k44 : k45 */
+ 10147 .loc 2 1873 0
+ 10148 8c93 660F6F85 movdqa -8992(%rbp), %xmm0
+ 10148 E0DCFFFF
+ 10149 8c9b 660FEF85 pxor -8960(%rbp), %xmm0
+ 10149 00DDFFFF
+ 10150 8ca3 660F7F85 movdqa %xmm0, -8992(%rbp)
+ 10150 E0DCFFFF
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(StateDupColumn3) (k = v3); /* k45 : k45 : k45 : k45 */
+ 10151 .loc 2 1874 0
+ 10152 8cab 660F6F95 movdqa -8992(%rbp), %xmm2
+ 10152 E0DCFFFF
+ 10153 8cb3 660F7F95 movdqa %xmm2, -8960(%rbp)
+ 10153 00DDFFFF
+ 10154 8cbb 660F6F85 movdqa -8960(%rbp), %xmm0
+ 10154 00DDFFFF
+ 10155 8cc3 F30F7F85 movdqu %xmm0, -1232(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 321
+
+
+ 10155 30FBFFFF
+ 10156 8ccb F30F6F85 movdqu -1232(%rbp), %xmm0
+ 10156 30FBFFFF
+ 10157 8cd3 F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 10157 50FBFFFF
+ 10158 .LBB2458:
+ 10159 .LBB2459:
+ 10160 .LBB2460:
+ 10161 .LBB2461:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 10162 .loc 3 450 0
+ 10163 8cdb F30F6F85 movdqu -1200(%rbp), %xmm0
+ 10163 50FBFFFF
+ 10164 8ce3 660F70C0 pshufd $255, %xmm0, %xmm0
+ 10164 FF
+ 10165 .LBE2461:
+ 10166 .LBE2460:
+ 10167 .LBE2459:
+ 10168 .LBE2458:
+ 10169 .loc 2 1874 0
+ 10170 8ce8 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 10170 00DDFFFF
+1875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v4 ^= k; /* k46 : k47 : x : x */
+ 10171 .loc 2 1875 0
+ 10172 8cf0 660F6F95 movdqa -8976(%rbp), %xmm2
+ 10172 F0DCFFFF
+ 10173 8cf8 660FEF95 pxor -8960(%rbp), %xmm2
+ 10173 00DDFFFF
+ 10174 8d00 660F7F95 movdqa %xmm2, -8976(%rbp)
+ 10174 F0DCFFFF
+ 10175 8d08 660F6F85 movdqa -9024(%rbp), %xmm0
+ 10175 C0DCFFFF
+ 10176 8d10 F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 10176 70FBFFFF
+ 10177 8d18 660F6F95 movdqa -8992(%rbp), %xmm2
+ 10177 E0DCFFFF
+ 10178 8d20 F30F7F95 movdqu %xmm2, -1184(%rbp)
+ 10178 60FBFFFF
+ 10179 8d28 F30F6F85 movdqu -1168(%rbp), %xmm0
+ 10179 70FBFFFF
+ 10180 8d30 F30F7F85 movdqu %xmm0, -1120(%rbp)
+ 10180 A0FBFFFF
+ 10181 8d38 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 10181 60FBFFFF
+ 10182 8d40 F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 10182 90FBFFFF
+ 10183 .LBB2462:
+ 10184 .LBB2463:
+ 10185 .LBB2464:
+ 10186 .LBB2465:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 10187 .loc 3 366 0
+ 10188 8d48 F20F1085 movsd -1136(%rbp), %xmm0
+ 10188 90FBFFFF
+ 10189 8d50 660F1685 movhpd -1128(%rbp), %xmm0
+ 10189 98FBFFFF
+ 10190 8d58 F20F108D movsd -1120(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 322
+
+
+ 10190 A0FBFFFF
+ 10191 8d60 660F168D movhpd -1112(%rbp), %xmm1
+ 10191 A8FBFFFF
+ 10192 8d68 660F28D1 movapd %xmm1, %xmm2
+ 10193 8d6c 660F14D0 unpcklpd %xmm0, %xmm2
+ 10194 8d70 660F28C2 movapd %xmm2, %xmm0
+ 10195 .LBE2465:
+ 10196 .LBE2464:
+ 10197 .LBE2463:
+ 10198 .LBE2462:
+1876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(StateMerge1) (v1,v3); /* k40 : k41 : k42 : k43 */
+ 10199 .loc 2 1876 0
+ 10200 8d74 660F7F85 movdqa %xmm0, -9024(%rbp)
+ 10200 C0DCFFFF
+1877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[10] = v1; /* K40:K41:K42:K43 */
+ 10201 .loc 2 1877 0
+ 10202 8d7c 488B85A8 movq -8536(%rbp), %rax
+ 10202 DEFFFF
+ 10203 8d83 4805A000 addq $160, %rax
+ 10203 0000
+ 10204 8d89 660F6F85 movdqa -9024(%rbp), %xmm0
+ 10204 C0DCFFFF
+ 10205 8d91 660F7F00 movdqa %xmm0, (%rax)
+ 10206 8d95 660F6F95 movdqa -8992(%rbp), %xmm2
+ 10206 E0DCFFFF
+ 10207 8d9d F30F7F95 movdqu %xmm2, -1088(%rbp)
+ 10207 C0FBFFFF
+ 10208 8da5 660F6F85 movdqa -8976(%rbp), %xmm0
+ 10208 F0DCFFFF
+ 10209 8dad F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 10209 B0FBFFFF
+ 10210 8db5 F30F6F85 movdqu -1088(%rbp), %xmm0
+ 10210 C0FBFFFF
+ 10211 8dbd F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 10211 F0FBFFFF
+ 10212 8dc5 F30F6F85 movdqu -1104(%rbp), %xmm0
+ 10212 B0FBFFFF
+ 10213 8dcd F30F7F85 movdqu %xmm0, -1056(%rbp)
+ 10213 E0FBFFFF
+ 10214 .LBB2466:
+ 10215 .LBB2467:
+ 10216 .LBB2468:
+ 10217 .LBB2469:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 10218 .loc 3 366 0
+ 10219 8dd5 F20F108D movsd -1056(%rbp), %xmm1
+ 10219 E0FBFFFF
+ 10220 8ddd 660F168D movhpd -1048(%rbp), %xmm1
+ 10220 E8FBFFFF
+ 10221 8de5 F20F1085 movsd -1040(%rbp), %xmm0
+ 10221 F0FBFFFF
+ 10222 8ded 660F1685 movhpd -1032(%rbp), %xmm0
+ 10222 F8FBFFFF
+ 10223 8df5 660FC6C1 shufpd $1, %xmm1, %xmm0
+ 10223 01
+ 10224 .LBE2469:
+ 10225 .LBE2468:
+
GAS LISTING /tmp/ccjbMjHD.s page 323
+
+
+ 10226 .LBE2467:
+ 10227 .LBE2466:
+1878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v2 = AESBCMEMBER(StateMerge2) (v3,v4); /* k44 : k45 : k46 : k47 */
+ 10228 .loc 2 1878 0
+ 10229 8dfa 660F7F85 movdqa %xmm0, -9008(%rbp)
+ 10229 D0DCFFFF
+1879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[11] = v2; /* K44:K45:K46:K47 */
+ 10230 .loc 2 1879 0
+ 10231 8e02 488B85A8 movq -8536(%rbp), %rax
+ 10231 DEFFFF
+ 10232 8e09 4805B000 addq $176, %rax
+ 10232 0000
+ 10233 8e0f 660F6F95 movdqa -9008(%rbp), %xmm2
+ 10233 D0DCFFFF
+ 10234 8e17 660F7F10 movdqa %xmm2, (%rax)
+ 10235 8e1b 660F6F85 movdqa -8992(%rbp), %xmm0
+ 10235 E0DCFFFF
+ 10236 8e23 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 10236 00FCFFFF
+ 10237 .LBB2470:
+ 10238 .LBB2471:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 10239 .loc 2 1565 0
+ 10240 8e2b F30F6F95 movdqu -1024(%rbp), %xmm2
+ 10240 00FCFFFF
+ 10241 8e33 660F7F95 movdqa %xmm2, -8592(%rbp)
+ 10241 70DEFFFF
+ 10242 8e3b 660F6F85 movdqa -8592(%rbp), %xmm0
+ 10242 70DEFFFF
+ 10243 8e43 F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 10243 10FCFFFF
+ 10244 .LBB2472:
+ 10245 .LBB2473:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10246 .loc 2 1278 0
+ 10247 8e4b 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 10247 00000000
+ 10248 8e53 F30F6F8D movdqu -1008(%rbp), %xmm1
+ 10248 10FCFFFF
+ 10249 8e5b F30F7F8D movdqu %xmm1, -976(%rbp)
+ 10249 30FCFFFF
+ 10250 8e63 F30F7F85 movdqu %xmm0, -992(%rbp)
+ 10250 20FCFFFF
+ 10251 8e6b F30F6F85 movdqu -976(%rbp), %xmm0
+ 10251 30FCFFFF
+ 10252 8e73 F30F7F85 movdqu %xmm0, -944(%rbp)
+ 10252 50FCFFFF
+ 10253 8e7b F30F6F85 movdqu -992(%rbp), %xmm0
+ 10253 20FCFFFF
+ 10254 8e83 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 10254 40FCFFFF
+ 10255 .LBB2474:
+ 10256 .LBB2475:
+ 10257 .LBB2476:
+ 10258 .LBB2477:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10259 .loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s page 324
+
+
+ 10260 8e8b F30F6F8D movdqu -960(%rbp), %xmm1
+ 10260 40FCFFFF
+ 10261 8e93 F30F6F85 movdqu -944(%rbp), %xmm0
+ 10261 50FCFFFF
+ 10262 8e9b 660F3800 pshufb %xmm1, %xmm0
+ 10262 C1
+ 10263 .LBE2477:
+ 10264 .LBE2476:
+ 10265 .LBE2475:
+ 10266 .LBE2474:
+ 10267 .LBE2473:
+ 10268 .LBE2472:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10269 .loc 2 1567 0
+ 10270 8ea0 660F7F85 movdqa %xmm0, -8592(%rbp)
+ 10270 70DEFFFF
+ 10271 8ea8 660F6F85 movdqa -8592(%rbp), %xmm0
+ 10271 70DEFFFF
+ 10272 8eb0 660FEF85 pxor -1024(%rbp), %xmm0
+ 10272 00FCFFFF
+ 10273 8eb8 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 10273 00FCFFFF
+ 10274 8ec0 660F6F95 movdqa -8592(%rbp), %xmm2
+ 10274 70DEFFFF
+ 10275 8ec8 F30F7F95 movdqu %xmm2, -928(%rbp)
+ 10275 60FCFFFF
+ 10276 .LBB2478:
+ 10277 .LBB2479:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10278 .loc 2 1278 0
+ 10279 8ed0 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 10279 00000000
+ 10280 8ed8 F30F6F8D movdqu -928(%rbp), %xmm1
+ 10280 60FCFFFF
+ 10281 8ee0 F30F7F8D movdqu %xmm1, -896(%rbp)
+ 10281 80FCFFFF
+ 10282 8ee8 F30F7F85 movdqu %xmm0, -912(%rbp)
+ 10282 70FCFFFF
+ 10283 8ef0 F30F6F85 movdqu -896(%rbp), %xmm0
+ 10283 80FCFFFF
+ 10284 8ef8 F30F7F85 movdqu %xmm0, -864(%rbp)
+ 10284 A0FCFFFF
+ 10285 8f00 F30F6F85 movdqu -912(%rbp), %xmm0
+ 10285 70FCFFFF
+ 10286 8f08 F30F7F85 movdqu %xmm0, -880(%rbp)
+ 10286 90FCFFFF
+ 10287 .LBB2480:
+ 10288 .LBB2481:
+ 10289 .LBB2482:
+ 10290 .LBB2483:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10291 .loc 3 529 0
+ 10292 8f10 F30F6F8D movdqu -880(%rbp), %xmm1
+ 10292 90FCFFFF
+ 10293 8f18 F30F6F85 movdqu -864(%rbp), %xmm0
+ 10293 A0FCFFFF
+ 10294 8f20 660F3800 pshufb %xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 325
+
+
+ 10294 C1
+ 10295 .LBE2483:
+ 10296 .LBE2482:
+ 10297 .LBE2481:
+ 10298 .LBE2480:
+ 10299 .LBE2479:
+ 10300 .LBE2478:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10301 .loc 2 1568 0
+ 10302 8f25 660F7F85 movdqa %xmm0, -8592(%rbp)
+ 10302 70DEFFFF
+ 10303 8f2d 660F6F85 movdqa -8592(%rbp), %xmm0
+ 10303 70DEFFFF
+ 10304 8f35 660FEF85 pxor -1024(%rbp), %xmm0
+ 10304 00FCFFFF
+ 10305 8f3d F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 10305 00FCFFFF
+ 10306 8f45 660F6F85 movdqa -8592(%rbp), %xmm0
+ 10306 70DEFFFF
+ 10307 8f4d F30F7F85 movdqu %xmm0, -848(%rbp)
+ 10307 B0FCFFFF
+ 10308 .LBB2484:
+ 10309 .LBB2485:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10310 .loc 2 1278 0
+ 10311 8f55 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 10311 00000000
+ 10312 8f5d F30F6F8D movdqu -848(%rbp), %xmm1
+ 10312 B0FCFFFF
+ 10313 8f65 F30F7F8D movdqu %xmm1, -816(%rbp)
+ 10313 D0FCFFFF
+ 10314 8f6d F30F7F85 movdqu %xmm0, -832(%rbp)
+ 10314 C0FCFFFF
+ 10315 8f75 F30F6F85 movdqu -816(%rbp), %xmm0
+ 10315 D0FCFFFF
+ 10316 8f7d F30F7F85 movdqu %xmm0, -784(%rbp)
+ 10316 F0FCFFFF
+ 10317 8f85 F30F6F85 movdqu -832(%rbp), %xmm0
+ 10317 C0FCFFFF
+ 10318 8f8d F30F7F85 movdqu %xmm0, -800(%rbp)
+ 10318 E0FCFFFF
+ 10319 .LBB2486:
+ 10320 .LBB2487:
+ 10321 .LBB2488:
+ 10322 .LBB2489:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10323 .loc 3 529 0
+ 10324 8f95 F30F6F8D movdqu -800(%rbp), %xmm1
+ 10324 E0FCFFFF
+ 10325 8f9d F30F6F85 movdqu -784(%rbp), %xmm0
+ 10325 F0FCFFFF
+ 10326 8fa5 660F3800 pshufb %xmm1, %xmm0
+ 10326 C1
+ 10327 .LBE2489:
+ 10328 .LBE2488:
+ 10329 .LBE2487:
+ 10330 .LBE2486:
+
GAS LISTING /tmp/ccjbMjHD.s page 326
+
+
+ 10331 .LBE2485:
+ 10332 .LBE2484:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10333 .loc 2 1569 0
+ 10334 8faa 660F7F85 movdqa %xmm0, -8592(%rbp)
+ 10334 70DEFFFF
+ 10335 8fb2 660F6F85 movdqa -8592(%rbp), %xmm0
+ 10335 70DEFFFF
+ 10336 8fba 660FEF85 pxor -1024(%rbp), %xmm0
+ 10336 00FCFFFF
+ 10337 8fc2 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 10337 00FCFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10338 .loc 2 1571 0
+ 10339 8fca F30F6F85 movdqu -1024(%rbp), %xmm0
+ 10339 00FCFFFF
+ 10340 .LBE2471:
+ 10341 .LBE2470:
+1880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 3 */
+1882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v3); /* k42 :k42^k43:k42^k43^k44:k42^k43^k44^k45 *
+ 10342 .loc 2 1882 0
+ 10343 8fd2 660F7F85 movdqa %xmm0, -9040(%rbp)
+ 10343 B0DCFFFF
+ 10344 8fda 660F6F95 movdqa -9008(%rbp), %xmm2
+ 10344 D0DCFFFF
+ 10345 8fe2 F30F7F95 movdqu %xmm2, -752(%rbp)
+ 10345 10FDFFFF
+ 10346 .LBB2490:
+ 10347 .LBB2491:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10348 .loc 2 1681 0
+ 10349 8fea B8800000 movl $128, %eax
+ 10349 00
+ 10350 8fef 660F6F05 movdqa vec_00(%rip), %xmm0
+ 10350 00000000
+ 10351 8ff7 F30F7F85 movdqu %xmm0, -720(%rbp)
+ 10351 30FDFFFF
+ 10352 8fff 89852CFD movl %eax, -724(%rbp)
+ 10352 FFFF
+ 10353 9005 F30F6F85 movdqu -720(%rbp), %xmm0
+ 10353 30FDFFFF
+ 10354 900d F30F7F85 movdqu %xmm0, -688(%rbp)
+ 10354 50FDFFFF
+ 10355 9015 8B852CFD movl -724(%rbp), %eax
+ 10355 FFFF
+ 10356 901b 89854CFD movl %eax, -692(%rbp)
+ 10356 FFFF
+ 10357 .LBB2492:
+ 10358 .LBB2493:
+ 10359 .LBB2494:
+ 10360 .LBB2495:
+ 10361 .loc 3 598 0
+ 10362 9021 8B854CFD movl -692(%rbp), %eax
+ 10362 FFFF
+ 10363 9027 F30F6F85 movdqu -688(%rbp), %xmm0
+ 10363 50FDFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 327
+
+
+ 10364 902f 660F3A22 pinsrd $3, %eax, %xmm0
+ 10364 C003
+ 10365 .LBE2495:
+ 10366 .LBE2494:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 10367 .loc 2 519 0
+ 10368 9035 F30F7F85 movdqu %xmm0, -720(%rbp)
+ 10368 30FDFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10369 .loc 2 526 0
+ 10370 903d F30F6F85 movdqu -720(%rbp), %xmm0
+ 10370 30FDFFFF
+ 10371 .LBE2493:
+ 10372 .LBE2492:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10373 .loc 2 1681 0
+ 10374 9045 660F7F85 movdqa %xmm0, -8560(%rbp)
+ 10374 90DEFFFF
+ 10375 904d F30F6F85 movdqu -752(%rbp), %xmm0
+ 10375 10FDFFFF
+ 10376 9055 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 10376 60FDFFFF
+ 10377 905d F30F6F85 movdqu -672(%rbp), %xmm0
+ 10377 60FDFFFF
+ 10378 9065 F30F7F85 movdqu %xmm0, -640(%rbp)
+ 10378 80FDFFFF
+ 10379 906d 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 10379 000000
+ 10380 9074 48898578 movq %rax, -648(%rbp)
+ 10380 FDFFFF
+ 10381 .LBB2496:
+ 10382 .LBB2497:
+ 10383 .LBB2498:
+ 10384 .LBB2499:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 10385 .loc 2 851 0
+ 10386 907b 660F6F05 movdqa vec_00(%rip), %xmm0
+ 10386 00000000
+ 10387 9083 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 10387 A0FDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10388 .loc 2 854 0
+ 10389 908b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 10389 00000000
+ 10390 9093 F30F6F8D movdqu -640(%rbp), %xmm1
+ 10390 80FDFFFF
+ 10391 909b F30F7F8D movdqu %xmm1, -528(%rbp)
+ 10391 F0FDFFFF
+ 10392 90a3 F30F7F85 movdqu %xmm0, -544(%rbp)
+ 10392 E0FDFFFF
+ 10393 .LBB2500:
+ 10394 .LBB2501:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 10395 .loc 2 206 0
+ 10396 90ab F30F6F85 movdqu -544(%rbp), %xmm0
+ 10396 E0FDFFFF
+ 10397 90b3 F30F6F8D movdqu -528(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 328
+
+
+ 10397 F0FDFFFF
+ 10398 90bb 660FDBC1 pand %xmm1, %xmm0
+ 10399 .LBE2501:
+ 10400 .LBE2500:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10401 .loc 2 854 0
+ 10402 90bf F30F7F85 movdqu %xmm0, -560(%rbp)
+ 10402 D0FDFFFF
+ 10403 90c7 F30F6F85 movdqu -640(%rbp), %xmm0
+ 10403 80FDFFFF
+ 10404 90cf F30F7F85 movdqu %xmm0, -496(%rbp)
+ 10404 10FEFFFF
+ 10405 .LBB2502:
+ 10406 .LBB2503:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 10407 .loc 3 433 0
+ 10408 90d7 F30F6F85 movdqu -496(%rbp), %xmm0
+ 10408 10FEFFFF
+ 10409 90df 660F72D0 psrld $4, %xmm0
+ 10409 04
+ 10410 .LBE2503:
+ 10411 .LBE2502:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 10412 .loc 2 857 0
+ 10413 90e4 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 10413 C0FDFFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10414 .loc 2 859 0
+ 10415 90ec 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 10415 00000000
+ 10416 90f4 F30F6F8D movdqu -576(%rbp), %xmm1
+ 10416 C0FDFFFF
+ 10417 90fc F30F7F8D movdqu %xmm1, -464(%rbp)
+ 10417 30FEFFFF
+ 10418 9104 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 10418 20FEFFFF
+ 10419 .LBB2504:
+ 10420 .LBB2505:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 10421 .loc 2 206 0
+ 10422 910c F30F6F85 movdqu -480(%rbp), %xmm0
+ 10422 20FEFFFF
+ 10423 9114 F30F6F8D movdqu -464(%rbp), %xmm1
+ 10423 30FEFFFF
+ 10424 911c 660FDBC1 pand %xmm1, %xmm0
+ 10425 .LBE2505:
+ 10426 .LBE2504:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10427 .loc 2 859 0
+ 10428 9120 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 10428 C0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 10429 .loc 2 866 0
+ 10430 9128 C7859CFD movl $0, -612(%rbp)
+ 10430 FFFF0000
+ 10430 0000
+ 10431 9132 E9BE0100 jmp .L144
+
GAS LISTING /tmp/ccjbMjHD.s page 329
+
+
+ 10431 00
+ 10432 .L145:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10433 .loc 2 868 0
+ 10434 9137 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 10434 00000000
+ 10435 913f F30F7F85 movdqu %xmm0, -432(%rbp)
+ 10435 50FEFFFF
+ 10436 9147 F30F6F85 movdqu -576(%rbp), %xmm0
+ 10436 C0FDFFFF
+ 10437 914f F30F7F85 movdqu %xmm0, -448(%rbp)
+ 10437 40FEFFFF
+ 10438 9157 F30F6F85 movdqu -432(%rbp), %xmm0
+ 10438 50FEFFFF
+ 10439 915f F30F7F85 movdqu %xmm0, -400(%rbp)
+ 10439 70FEFFFF
+ 10440 9167 F30F6F85 movdqu -448(%rbp), %xmm0
+ 10440 40FEFFFF
+ 10441 916f F30F7F85 movdqu %xmm0, -416(%rbp)
+ 10441 60FEFFFF
+ 10442 .LBB2506:
+ 10443 .LBB2507:
+ 10444 .LBB2508:
+ 10445 .LBB2509:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10446 .loc 3 529 0
+ 10447 9177 F30F6F8D movdqu -416(%rbp), %xmm1
+ 10447 60FEFFFF
+ 10448 917f F30F6F85 movdqu -400(%rbp), %xmm0
+ 10448 70FEFFFF
+ 10449 9187 660F3800 pshufb %xmm1, %xmm0
+ 10449 C1
+ 10450 .LBE2509:
+ 10451 .LBE2508:
+ 10452 .LBE2507:
+ 10453 .LBE2506:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10454 .loc 2 868 0
+ 10455 918c F30F7F85 movdqu %xmm0, -592(%rbp)
+ 10455 B0FDFFFF
+ 10456 9194 F30F6F85 movdqu -560(%rbp), %xmm0
+ 10456 D0FDFFFF
+ 10457 919c F30F7F85 movdqu %xmm0, -368(%rbp)
+ 10457 90FEFFFF
+ 10458 91a4 F30F6F85 movdqu -592(%rbp), %xmm0
+ 10458 B0FDFFFF
+ 10459 91ac F30F7F85 movdqu %xmm0, -384(%rbp)
+ 10459 80FEFFFF
+ 10460 .LBB2510:
+ 10461 .LBB2511:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 10462 .loc 2 234 0
+ 10463 91b4 F30F6F85 movdqu -384(%rbp), %xmm0
+ 10463 80FEFFFF
+ 10464 91bc F30F6F8D movdqu -368(%rbp), %xmm1
+ 10464 90FEFFFF
+ 10465 91c4 660FEBC1 por %xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 330
+
+
+ 10466 .LBE2511:
+ 10467 .LBE2510:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 10468 .loc 2 870 0
+ 10469 91c8 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 10469 B0FDFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 10470 .loc 2 872 0
+ 10471 91d0 8B859CFD mov -612(%rbp), %eax
+ 10471 FFFF
+ 10472 91d6 48C1E004 salq $4, %rax
+ 10473 91da 48038578 addq -648(%rbp), %rax
+ 10473 FDFFFF
+ 10474 91e1 660F6F00 movdqa (%rax), %xmm0
+ 10475 91e5 F30F7F85 movdqu %xmm0, -336(%rbp)
+ 10475 B0FEFFFF
+ 10476 91ed F30F6F85 movdqu -592(%rbp), %xmm0
+ 10476 B0FDFFFF
+ 10477 91f5 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 10477 A0FEFFFF
+ 10478 91fd F30F6F85 movdqu -336(%rbp), %xmm0
+ 10478 B0FEFFFF
+ 10479 9205 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 10479 D0FEFFFF
+ 10480 920d F30F6F85 movdqu -352(%rbp), %xmm0
+ 10480 A0FEFFFF
+ 10481 9215 F30F7F85 movdqu %xmm0, -320(%rbp)
+ 10481 C0FEFFFF
+ 10482 .LBB2512:
+ 10483 .LBB2513:
+ 10484 .LBB2514:
+ 10485 .LBB2515:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10486 .loc 3 529 0
+ 10487 921d F30F6F8D movdqu -320(%rbp), %xmm1
+ 10487 C0FEFFFF
+ 10488 9225 F30F6F85 movdqu -304(%rbp), %xmm0
+ 10488 D0FEFFFF
+ 10489 922d 660F3800 pshufb %xmm1, %xmm0
+ 10489 C1
+ 10490 .LBE2515:
+ 10491 .LBE2514:
+ 10492 .LBE2513:
+ 10493 .LBE2512:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 10494 .loc 2 872 0
+ 10495 9232 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 10495 B0FDFFFF
+ 10496 923a F30F6F85 movdqu -608(%rbp), %xmm0
+ 10496 A0FDFFFF
+ 10497 9242 F30F7F85 movdqu %xmm0, -272(%rbp)
+ 10497 F0FEFFFF
+ 10498 924a F30F6F85 movdqu -592(%rbp), %xmm0
+ 10498 B0FDFFFF
+ 10499 9252 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 10499 E0FEFFFF
+ 10500 .LBB2516:
+
GAS LISTING /tmp/ccjbMjHD.s page 331
+
+
+ 10501 .LBB2517:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 10502 .loc 2 234 0
+ 10503 925a F30F6F85 movdqu -288(%rbp), %xmm0
+ 10503 E0FEFFFF
+ 10504 9262 F30F6F8D movdqu -272(%rbp), %xmm1
+ 10504 F0FEFFFF
+ 10505 926a 660FEBC1 por %xmm1, %xmm0
+ 10506 .LBE2517:
+ 10507 .LBE2516:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 10508 .loc 2 874 0
+ 10509 926e F30F7F85 movdqu %xmm0, -608(%rbp)
+ 10509 A0FDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 10510 .loc 2 876 0
+ 10511 9276 660F6F05 movdqa vec_01(%rip), %xmm0
+ 10511 00000000
+ 10512 927e F30F6F8D movdqu -576(%rbp), %xmm1
+ 10512 C0FDFFFF
+ 10513 9286 F30F7F8D movdqu %xmm1, -240(%rbp)
+ 10513 10FFFFFF
+ 10514 928e F30F7F85 movdqu %xmm0, -256(%rbp)
+ 10514 00FFFFFF
+ 10515 .LBB2518:
+ 10516 .LBB2519:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 10517 .loc 2 290 0
+ 10518 9296 F30F6F8D movdqu -256(%rbp), %xmm1
+ 10518 00FFFFFF
+ 10519 929e F30F6F85 movdqu -240(%rbp), %xmm0
+ 10519 10FFFFFF
+ 10520 92a6 660FF8C1 psubb %xmm1, %xmm0
+ 10521 .LBE2519:
+ 10522 .LBE2518:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 10523 .loc 2 876 0
+ 10524 92aa F30F7F85 movdqu %xmm0, -576(%rbp)
+ 10524 C0FDFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10525 .loc 2 878 0
+ 10526 92b2 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 10526 00000000
+ 10527 92ba F30F6F8D movdqu -576(%rbp), %xmm1
+ 10527 C0FDFFFF
+ 10528 92c2 F30F7F8D movdqu %xmm1, -208(%rbp)
+ 10528 30FFFFFF
+ 10529 92ca F30F7F85 movdqu %xmm0, -224(%rbp)
+ 10529 20FFFFFF
+ 10530 .LBB2520:
+ 10531 .LBB2521:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 10532 .loc 2 206 0
+ 10533 92d2 F30F6F85 movdqu -224(%rbp), %xmm0
+ 10533 20FFFFFF
+ 10534 92da F30F6F8D movdqu -208(%rbp), %xmm1
+ 10534 30FFFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 332
+
+
+ 10535 92e2 660FDBC1 pand %xmm1, %xmm0
+ 10536 .LBE2521:
+ 10537 .LBE2520:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10538 .loc 2 878 0
+ 10539 92e6 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 10539 C0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 10540 .loc 2 866 0
+ 10541 92ee 83859CFD addl $1, -612(%rbp)
+ 10541 FFFF01
+ 10542 .L144:
+ 10543 92f5 83BD9CFD cmpl $15, -612(%rbp)
+ 10543 FFFF0F
+ 10544 92fc 0F8635FE jbe .L145
+ 10544 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 10545 .loc 2 882 0
+ 10546 9302 F30F6F85 movdqu -608(%rbp), %xmm0
+ 10546 A0FDFFFF
+ 10547 .LBE2499:
+ 10548 .LBE2498:
+ 10549 .LBE2497:
+ 10550 .LBE2496:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 10551 .loc 2 1682 0
+ 10552 930a 660F7F85 movdqa %xmm0, -8576(%rbp)
+ 10552 80DEFFFF
+ 10553 .LBB2522:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 10554 .loc 2 1683 0
+ 10555 9312 660F6F85 movdqa -8576(%rbp), %xmm0
+ 10555 80DEFFFF
+ 10556 931a F30F7F85 movdqu %xmm0, -8160(%rbp)
+ 10556 20E0FFFF
+ 10557 9322 E8000000 call KDbgWriterGet at PLT
+ 10557 00
+ 10558 9327 4885C0 testq %rax, %rax
+ 10559 932a 7479 je .L147
+ 10560 932c BF010000 movl $1, %edi
+ 10560 00
+ 10561 9331 E8000000 call KDbgCondToFlag at PLT
+ 10561 00
+ 10562 9336 4889C6 movq %rax, %rsi
+ 10563 9339 BF100000 movl $16, %edi
+ 10563 00
+ 10564 933e E8000000 call KDbgTestModConds at PLT
+ 10564 00
+ 10565 9343 84C0 testb %al, %al
+ 10566 9345 745E je .L147
+ 10567 9347 8B852CE0 movl -8148(%rbp), %eax
+ 10567 FFFF
+ 10568 934d 89C7 movl %eax, %edi
+ 10569 934f E8AC6CFF call bswap_32
+ 10569 FF
+ 10570 9354 4189C5 movl %eax, %r13d
+ 10571 9357 8B8528E0 movl -8152(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 333
+
+
+ 10571 FFFF
+ 10572 935d 89C7 movl %eax, %edi
+ 10573 935f E89C6CFF call bswap_32
+ 10573 FF
+ 10574 9364 4189C4 movl %eax, %r12d
+ 10575 9367 8B8524E0 movl -8156(%rbp), %eax
+ 10575 FFFF
+ 10576 936d 89C7 movl %eax, %edi
+ 10577 936f E88C6CFF call bswap_32
+ 10577 FF
+ 10578 9374 89C3 movl %eax, %ebx
+ 10579 9376 8B8520E0 movl -8160(%rbp), %eax
+ 10579 FFFF
+ 10580 937c 89C7 movl %eax, %edi
+ 10581 937e E87D6CFF call bswap_32
+ 10581 FF
+ 10582 9383 4589E9 movl %r13d, %r9d
+ 10583 9386 4589E0 movl %r12d, %r8d
+ 10584 9389 89D9 movl %ebx, %ecx
+ 10585 938b 89C2 movl %eax, %edx
+ 10586 938d 488D3500 leaq .LC0(%rip), %rsi
+ 10586 000000
+ 10587 9394 488D3D00 leaq .LC1(%rip), %rdi
+ 10587 000000
+ 10588 939b B8000000 movl $0, %eax
+ 10588 00
+ 10589 93a0 E8000000 call KDbgMsg at PLT
+ 10589 00
+ 10590 .L147:
+ 10591 93a5 660F6F95 movdqa -8576(%rbp), %xmm2
+ 10591 80DEFFFF
+ 10592 93ad F30F7F95 movdqu %xmm2, -192(%rbp)
+ 10592 40FFFFFF
+ 10593 .LBE2522:
+ 10594 .LBB2523:
+ 10595 .LBB2524:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 10596 .loc 2 667 0
+ 10597 93b5 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 10597 00000000
+ 10598 93bd F30F6F8D movdqu -192(%rbp), %xmm1
+ 10598 40FFFFFF
+ 10599 93c5 F30F7F8D movdqu %xmm1, -160(%rbp)
+ 10599 60FFFFFF
+ 10600 93cd F30F7F85 movdqu %xmm0, -176(%rbp)
+ 10600 50FFFFFF
+ 10601 93d5 F30F6F85 movdqu -160(%rbp), %xmm0
+ 10601 60FFFFFF
+ 10602 93dd F30F7F45 movdqu %xmm0, -128(%rbp)
+ 10602 80
+ 10603 93e2 F30F6F85 movdqu -176(%rbp), %xmm0
+ 10603 50FFFFFF
+ 10604 93ea F30F7F85 movdqu %xmm0, -144(%rbp)
+ 10604 70FFFFFF
+ 10605 .LBB2525:
+ 10606 .LBB2526:
+ 10607 .LBB2527:
+
GAS LISTING /tmp/ccjbMjHD.s page 334
+
+
+ 10608 .LBB2528:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10609 .loc 3 529 0
+ 10610 93f2 F30F6F8D movdqu -144(%rbp), %xmm1
+ 10610 70FFFFFF
+ 10611 93fa F30F6F45 movdqu -128(%rbp), %xmm0
+ 10611 80
+ 10612 93ff 660F3800 pshufb %xmm1, %xmm0
+ 10612 C1
+ 10613 .LBE2528:
+ 10614 .LBE2527:
+ 10615 .LBE2526:
+ 10616 .LBE2525:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 10617 .loc 2 667 0
+ 10618 9404 F30F7F85 movdqu %xmm0, -192(%rbp)
+ 10618 40FFFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10619 .loc 2 668 0
+ 10620 940c F30F6F85 movdqu -192(%rbp), %xmm0
+ 10620 40FFFFFF
+ 10621 .LBE2524:
+ 10622 .LBE2523:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 10623 .loc 2 1684 0
+ 10624 9414 660F7F85 movdqa %xmm0, -8576(%rbp)
+ 10624 80DEFFFF
+ 10625 .LBB2529:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 10626 .loc 2 1685 0
+ 10627 941c 660F6F85 movdqa -8576(%rbp), %xmm0
+ 10627 80DEFFFF
+ 10628 9424 F30F7F85 movdqu %xmm0, -8176(%rbp)
+ 10628 10E0FFFF
+ 10629 942c E8000000 call KDbgWriterGet at PLT
+ 10629 00
+ 10630 9431 4885C0 testq %rax, %rax
+ 10631 9434 7479 je .L149
+ 10632 9436 BF010000 movl $1, %edi
+ 10632 00
+ 10633 943b E8000000 call KDbgCondToFlag at PLT
+ 10633 00
+ 10634 9440 4889C6 movq %rax, %rsi
+ 10635 9443 BF100000 movl $16, %edi
+ 10635 00
+ 10636 9448 E8000000 call KDbgTestModConds at PLT
+ 10636 00
+ 10637 944d 84C0 testb %al, %al
+ 10638 944f 745E je .L149
+ 10639 9451 8B851CE0 movl -8164(%rbp), %eax
+ 10639 FFFF
+ 10640 9457 89C7 movl %eax, %edi
+ 10641 9459 E8A26BFF call bswap_32
+ 10641 FF
+ 10642 945e 4189C5 movl %eax, %r13d
+ 10643 9461 8B8518E0 movl -8168(%rbp), %eax
+ 10643 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 335
+
+
+ 10644 9467 89C7 movl %eax, %edi
+ 10645 9469 E8926BFF call bswap_32
+ 10645 FF
+ 10646 946e 4189C4 movl %eax, %r12d
+ 10647 9471 8B8514E0 movl -8172(%rbp), %eax
+ 10647 FFFF
+ 10648 9477 89C7 movl %eax, %edi
+ 10649 9479 E8826BFF call bswap_32
+ 10649 FF
+ 10650 947e 89C3 movl %eax, %ebx
+ 10651 9480 8B8510E0 movl -8176(%rbp), %eax
+ 10651 FFFF
+ 10652 9486 89C7 movl %eax, %edi
+ 10653 9488 E8736BFF call bswap_32
+ 10653 FF
+ 10654 948d 4589E9 movl %r13d, %r9d
+ 10655 9490 4589E0 movl %r12d, %r8d
+ 10656 9493 89D9 movl %ebx, %ecx
+ 10657 9495 89C2 movl %eax, %edx
+ 10658 9497 488D3500 leaq .LC2(%rip), %rsi
+ 10658 000000
+ 10659 949e 488D3D00 leaq .LC1(%rip), %rdi
+ 10659 000000
+ 10660 94a5 B8000000 movl $0, %eax
+ 10660 00
+ 10661 94aa E8000000 call KDbgMsg at PLT
+ 10661 00
+ 10662 .L149:
+ 10663 94af 660F6F95 movdqa -8576(%rbp), %xmm2
+ 10663 80DEFFFF
+ 10664 94b7 F30F7F55 movdqu %xmm2, -96(%rbp)
+ 10664 A0
+ 10665 94bc 660F6F85 movdqa -8560(%rbp), %xmm0
+ 10665 90DEFFFF
+ 10666 94c4 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 10666 90
+ 10667 .LBE2529:
+ 10668 .LBB2530:
+ 10669 .LBB2531:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 10670 .loc 2 178 0
+ 10671 94c9 F30F6F45 movdqu -112(%rbp), %xmm0
+ 10671 90
+ 10672 94ce F30F6F4D movdqu -96(%rbp), %xmm1
+ 10672 A0
+ 10673 94d3 660FEFC1 pxor %xmm1, %xmm0
+ 10674 .LBE2531:
+ 10675 .LBE2530:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 10676 .loc 2 1686 0
+ 10677 94d7 660F7F85 movdqa %xmm0, -8576(%rbp)
+ 10677 80DEFFFF
+ 10678 .LBB2532:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 10679 .loc 2 1687 0
+ 10680 94df 660F6F95 movdqa -8576(%rbp), %xmm2
+ 10680 80DEFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 336
+
+
+ 10681 94e7 F30F7F95 movdqu %xmm2, -8192(%rbp)
+ 10681 00E0FFFF
+ 10682 94ef E8000000 call KDbgWriterGet at PLT
+ 10682 00
+ 10683 94f4 4885C0 testq %rax, %rax
+ 10684 94f7 7479 je .L151
+ 10685 94f9 BF010000 movl $1, %edi
+ 10685 00
+ 10686 94fe E8000000 call KDbgCondToFlag at PLT
+ 10686 00
+ 10687 9503 4889C6 movq %rax, %rsi
+ 10688 9506 BF100000 movl $16, %edi
+ 10688 00
+ 10689 950b E8000000 call KDbgTestModConds at PLT
+ 10689 00
+ 10690 9510 84C0 testb %al, %al
+ 10691 9512 745E je .L151
+ 10692 9514 8B850CE0 movl -8180(%rbp), %eax
+ 10692 FFFF
+ 10693 951a 89C7 movl %eax, %edi
+ 10694 951c E8DF6AFF call bswap_32
+ 10694 FF
+ 10695 9521 4189C5 movl %eax, %r13d
+ 10696 9524 8B8508E0 movl -8184(%rbp), %eax
+ 10696 FFFF
+ 10697 952a 89C7 movl %eax, %edi
+ 10698 952c E8CF6AFF call bswap_32
+ 10698 FF
+ 10699 9531 4189C4 movl %eax, %r12d
+ 10700 9534 8B8504E0 movl -8188(%rbp), %eax
+ 10700 FFFF
+ 10701 953a 89C7 movl %eax, %edi
+ 10702 953c E8BF6AFF call bswap_32
+ 10702 FF
+ 10703 9541 89C3 movl %eax, %ebx
+ 10704 9543 8B8500E0 movl -8192(%rbp), %eax
+ 10704 FFFF
+ 10705 9549 89C7 movl %eax, %edi
+ 10706 954b E8B06AFF call bswap_32
+ 10706 FF
+ 10707 9550 4589E9 movl %r13d, %r9d
+ 10708 9553 4589E0 movl %r12d, %r8d
+ 10709 9556 89D9 movl %ebx, %ecx
+ 10710 9558 89C2 movl %eax, %edx
+ 10711 955a 488D3500 leaq .LC3(%rip), %rsi
+ 10711 000000
+ 10712 9561 488D3D00 leaq .LC1(%rip), %rdi
+ 10712 000000
+ 10713 9568 B8000000 movl $0, %eax
+ 10713 00
+ 10714 956d E8000000 call KDbgMsg at PLT
+ 10714 00
+ 10715 .L151:
+ 10716 9572 660F6F85 movdqa -8576(%rbp), %xmm0
+ 10716 80DEFFFF
+ 10717 957a F30F7F45 movdqu %xmm0, -80(%rbp)
+ 10717 B0
+
GAS LISTING /tmp/ccjbMjHD.s page 337
+
+
+ 10718 957f F30F6F45 movdqu -80(%rbp), %xmm0
+ 10718 B0
+ 10719 9584 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 10719 D0
+ 10720 .LBE2532:
+ 10721 .LBB2533:
+ 10722 .LBB2534:
+ 10723 .LBB2535:
+ 10724 .LBB2536:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 10725 .loc 3 450 0
+ 10726 9589 F30F6F45 movdqu -48(%rbp), %xmm0
+ 10726 D0
+ 10727 958e 660F70C0 pshufd $255, %xmm0, %xmm0
+ 10727 FF
+ 10728 .LBE2536:
+ 10729 .LBE2535:
+ 10730 .LBE2534:
+ 10731 .LBE2533:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 10732 .loc 2 1688 0
+ 10733 9593 660F7F85 movdqa %xmm0, -8576(%rbp)
+ 10733 80DEFFFF
+ 10734 .LBB2537:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 10735 .loc 2 1689 0
+ 10736 959b 660F6F95 movdqa -8576(%rbp), %xmm2
+ 10736 80DEFFFF
+ 10737 95a3 F30F7F95 movdqu %xmm2, -8208(%rbp)
+ 10737 F0DFFFFF
+ 10738 95ab E8000000 call KDbgWriterGet at PLT
+ 10738 00
+ 10739 95b0 4885C0 testq %rax, %rax
+ 10740 95b3 7479 je .L153
+ 10741 95b5 BF010000 movl $1, %edi
+ 10741 00
+ 10742 95ba E8000000 call KDbgCondToFlag at PLT
+ 10742 00
+ 10743 95bf 4889C6 movq %rax, %rsi
+ 10744 95c2 BF100000 movl $16, %edi
+ 10744 00
+ 10745 95c7 E8000000 call KDbgTestModConds at PLT
+ 10745 00
+ 10746 95cc 84C0 testb %al, %al
+ 10747 95ce 745E je .L153
+ 10748 95d0 8B85FCDF movl -8196(%rbp), %eax
+ 10748 FFFF
+ 10749 95d6 89C7 movl %eax, %edi
+ 10750 95d8 E8236AFF call bswap_32
+ 10750 FF
+ 10751 95dd 4189C5 movl %eax, %r13d
+ 10752 95e0 8B85F8DF movl -8200(%rbp), %eax
+ 10752 FFFF
+ 10753 95e6 89C7 movl %eax, %edi
+ 10754 95e8 E8136AFF call bswap_32
+ 10754 FF
+ 10755 95ed 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccjbMjHD.s page 338
+
+
+ 10756 95f0 8B85F4DF movl -8204(%rbp), %eax
+ 10756 FFFF
+ 10757 95f6 89C7 movl %eax, %edi
+ 10758 95f8 E8036AFF call bswap_32
+ 10758 FF
+ 10759 95fd 89C3 movl %eax, %ebx
+ 10760 95ff 8B85F0DF movl -8208(%rbp), %eax
+ 10760 FFFF
+ 10761 9605 89C7 movl %eax, %edi
+ 10762 9607 E8F469FF call bswap_32
+ 10762 FF
+ 10763 960c 4589E9 movl %r13d, %r9d
+ 10764 960f 4589E0 movl %r12d, %r8d
+ 10765 9612 89D9 movl %ebx, %ecx
+ 10766 9614 89C2 movl %eax, %edx
+ 10767 9616 488D3500 leaq .LC4(%rip), %rsi
+ 10767 000000
+ 10768 961d 488D3D00 leaq .LC1(%rip), %rdi
+ 10768 000000
+ 10769 9624 B8000000 movl $0, %eax
+ 10769 00
+ 10770 9629 E8000000 call KDbgMsg at PLT
+ 10770 00
+ 10771 .L153:
+ 10772 .LBE2537:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 10773 .loc 2 1690 0
+ 10774 962e 660F6F85 movdqa -8576(%rbp), %xmm0
+ 10774 80DEFFFF
+ 10775 .LBE2491:
+ 10776 .LBE2490:
+1883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 10777 .loc 2 1883 0
+ 10778 9636 660F7F85 movdqa %xmm0, -8960(%rbp)
+ 10778 00DDFFFF
+1884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** (v2,0x80); /* F(k47): F(k47): F(k47) : F(k47) */
+1885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 ^= k; /* k48 : k49 : k50 : k51 */
+ 10779 .loc 2 1885 0
+ 10780 963e 660F6F85 movdqa -9040(%rbp), %xmm0
+ 10780 B0DCFFFF
+ 10781 9646 660FEF85 pxor -8960(%rbp), %xmm0
+ 10781 00DDFFFF
+ 10782 964e 660F7F85 movdqa %xmm0, -9040(%rbp)
+ 10782 B0DCFFFF
+1886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[12] = v0; /* K48:K49:K50:K51 */
+ 10783 .loc 2 1886 0
+ 10784 9656 488B85A8 movq -8536(%rbp), %rax
+ 10784 DEFFFF
+ 10785 965d 4805C000 addq $192, %rax
+ 10785 0000
+ 10786 9663 660F6F95 movdqa -9040(%rbp), %xmm2
+ 10786 B0DCFFFF
+ 10787 966b 660F7F10 movdqa %xmm2, (%rax)
+1887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 10788 .loc 2 1887 0
+ 10789 966f 4881C438 addq $9016, %rsp
+ 10789 230000
+
GAS LISTING /tmp/ccjbMjHD.s page 339
+
+
+ 10790 9676 5B popq %rbx
+ 10791 9677 415C popq %r12
+ 10792 9679 415D popq %r13
+ 10793 967b C9 leave
+ 10794 967c C3 ret
+ 10795 .cfi_endproc
+ 10796 .LFE646:
+ 10797 .size KAESBlockCipherVecRegKeyExpansion192, .-KAESBlockCipherVecRegKeyExpansion192
+ 10798 .type KAESBlockCipherVecRegKeyExpansion256, @function
+ 10799 KAESBlockCipherVecRegKeyExpansion256:
+ 10800 .LFB647:
+1888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * w, const AESByte * key)
+1891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_192, AES_Nk_192);
+1893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----- */
+1900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC || 1
+1902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * round_keys, const AESByte * key)
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 10801 .loc 2 1904 0
+ 10802 .cfi_startproc
+ 10803 967d 55 pushq %rbp
+ 10804 .LCFI6:
+ 10805 .cfi_def_cfa_offset 16
+ 10806 967e 4889E5 movq %rsp, %rbp
+ 10807 .cfi_offset 6, -16
+ 10808 .LCFI7:
+ 10809 .cfi_def_cfa_register 6
+ 10810 9681 4155 pushq %r13
+ 10811 9683 4154 pushq %r12
+ 10812 9685 53 pushq %rbx
+ 10813 9686 4881EC28 subq $10280, %rsp
+ 10813 280000
+ 10814 968d 4889BD98 movq %rdi, -9832(%rbp)
+ 10814 D9FFFF
+ 10815 9694 4889B590 movq %rsi, -9840(%rbp)
+ 10815 D9FFFF
+ 10816 .loc 2 1904 0
+ 10817 969b 488B8590 movq -9840(%rbp), %rax
+ 10817 D9FFFF
+ 10818 96a2 48898558 movq %rax, -9128(%rbp)
+ 10818 DCFFFF
+ 10819 .LBB3188:
+ 10820 .LBB3189:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 10821 .loc 2 126 0
+ 10822 96a9 488B8558 movq -9128(%rbp), %rax
+ 10822 DCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 340
+
+
+ 10823 96b0 4889C7 movq %rax, %rdi
+ 10824 #APP
+ 10825 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 10826 movdqu (%rdi),%xmm0
+ 10827 # 0 "" 2
+ 10828 #NO_APP
+ 10829 96b7 660F7F85 movdqa %xmm0, -10304(%rbp)
+ 10829 C0D7FFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 10830 .loc 2 129 0
+ 10831 96bf 660F6F85 movdqa -10304(%rbp), %xmm0
+ 10831 C0D7FFFF
+ 10832 .LBE3189:
+ 10833 .LBE3188:
+1905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec v0, v1;
+1906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec k;
+1907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER (StateIn) (key);
+ 10834 .loc 2 1908 0
+ 10835 96c7 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 10835 20DCFFFF
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+ 10836 .loc 2 1909 0
+ 10837 96cf 488B8590 movq -9840(%rbp), %rax
+ 10837 D9FFFF
+ 10838 96d6 4883C010 addq $16, %rax
+ 10839 96da 48898560 movq %rax, -9120(%rbp)
+ 10839 DCFFFF
+ 10840 .LBB3190:
+ 10841 .LBB3191:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __asm__ (
+ 10842 .loc 2 126 0
+ 10843 96e1 488B8560 movq -9120(%rbp), %rax
+ 10843 DCFFFF
+ 10844 96e8 4889C7 movq %rax, %rdi
+ 10845 #APP
+ 10846 # 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 10847 movdqu (%rdi),%xmm0
+ 10848 # 0 "" 2
+ 10849 #NO_APP
+ 10850 96ef 660F7F85 movdqa %xmm0, -10288(%rbp)
+ 10850 D0D7FFFF
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vec;
+ 10851 .loc 2 129 0
+ 10852 96f7 660F6F85 movdqa -10288(%rbp), %xmm0
+ 10852 D0D7FFFF
+ 10853 .LBE3191:
+ 10854 .LBE3190:
+ 10855 .loc 2 1909 0
+ 10856 96ff F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 10856 30DCFFFF
+1910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[0] = v0; /* k0 : k1 : k2 : k3 */
+ 10857 .loc 2 1911 0
+ 10858 9707 488B8598 movq -9832(%rbp), %rax
+ 10858 D9FFFF
+ 10859 970e F30F6F85 movdqu -9184(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 341
+
+
+ 10859 20DCFFFF
+ 10860 9716 F30F7F00 movdqu %xmm0, (%rax)
+1912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[1] = v1; /* k4 : k5 : k6 : k7 */
+ 10861 .loc 2 1912 0
+ 10862 971a 488B8598 movq -9832(%rbp), %rax
+ 10862 D9FFFF
+ 10863 9721 4883C010 addq $16, %rax
+ 10864 9725 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 10864 30DCFFFF
+ 10865 972d F30F7F00 movdqu %xmm0, (%rax)
+ 10866 9731 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 10866 30DCFFFF
+ 10867 9739 F30F7F85 movdqu %xmm0, -9104(%rbp)
+ 10867 70DCFFFF
+ 10868 .LBB3192:
+ 10869 .LBB3193:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10870 .loc 2 1681 0
+ 10871 9741 B8010000 movl $1, %eax
+ 10871 00
+ 10872 9746 660F6F05 movdqa vec_00(%rip), %xmm0
+ 10872 00000000
+ 10873 974e F30F7F85 movdqu %xmm0, -9072(%rbp)
+ 10873 90DCFFFF
+ 10874 9756 89858CDC movl %eax, -9076(%rbp)
+ 10874 FFFF
+ 10875 975c F30F6F85 movdqu -9072(%rbp), %xmm0
+ 10875 90DCFFFF
+ 10876 9764 F30F7F85 movdqu %xmm0, -9040(%rbp)
+ 10876 B0DCFFFF
+ 10877 976c 8B858CDC movl -9076(%rbp), %eax
+ 10877 FFFF
+ 10878 9772 8985ACDC movl %eax, -9044(%rbp)
+ 10878 FFFF
+ 10879 .LBB3194:
+ 10880 .LBB3195:
+ 10881 .LBB3196:
+ 10882 .LBB3197:
+ 10883 .loc 3 598 0
+ 10884 9778 8B85ACDC movl -9044(%rbp), %eax
+ 10884 FFFF
+ 10885 977e F30F6F85 movdqu -9040(%rbp), %xmm0
+ 10885 B0DCFFFF
+ 10886 9786 660F3A22 pinsrd $3, %eax, %xmm0
+ 10886 C003
+ 10887 .LBE3197:
+ 10888 .LBE3196:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 10889 .loc 2 519 0
+ 10890 978c F30F7F85 movdqu %xmm0, -9072(%rbp)
+ 10890 90DCFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 10891 .loc 2 526 0
+ 10892 9794 F30F6F85 movdqu -9072(%rbp), %xmm0
+ 10892 90DCFFFF
+ 10893 .LBE3195:
+ 10894 .LBE3194:
+
GAS LISTING /tmp/ccjbMjHD.s page 342
+
+
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10895 .loc 2 1681 0
+ 10896 979c 660F7F85 movdqa %xmm0, -10256(%rbp)
+ 10896 F0D7FFFF
+ 10897 97a4 F30F6F85 movdqu -9104(%rbp), %xmm0
+ 10897 70DCFFFF
+ 10898 97ac F30F7F85 movdqu %xmm0, -9024(%rbp)
+ 10898 C0DCFFFF
+ 10899 97b4 F30F6F85 movdqu -9024(%rbp), %xmm0
+ 10899 C0DCFFFF
+ 10900 97bc F30F7F85 movdqu %xmm0, -8992(%rbp)
+ 10900 E0DCFFFF
+ 10901 97c4 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 10901 000000
+ 10902 97cb 488985D8 movq %rax, -9000(%rbp)
+ 10902 DCFFFF
+ 10903 .LBB3198:
+ 10904 .LBB3199:
+ 10905 .LBB3200:
+ 10906 .LBB3201:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 10907 .loc 2 851 0
+ 10908 97d2 660F6F05 movdqa vec_00(%rip), %xmm0
+ 10908 00000000
+ 10909 97da F30F7F85 movdqu %xmm0, -8960(%rbp)
+ 10909 00DDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10910 .loc 2 854 0
+ 10911 97e2 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 10911 00000000
+ 10912 97ea F30F6F8D movdqu -8992(%rbp), %xmm1
+ 10912 E0DCFFFF
+ 10913 97f2 F30F7F8D movdqu %xmm1, -8880(%rbp)
+ 10913 50DDFFFF
+ 10914 97fa F30F7F85 movdqu %xmm0, -8896(%rbp)
+ 10914 40DDFFFF
+ 10915 .LBB3202:
+ 10916 .LBB3203:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 10917 .loc 2 206 0
+ 10918 9802 F30F6F85 movdqu -8896(%rbp), %xmm0
+ 10918 40DDFFFF
+ 10919 980a F30F6F8D movdqu -8880(%rbp), %xmm1
+ 10919 50DDFFFF
+ 10920 9812 660FDBC1 pand %xmm1, %xmm0
+ 10921 .LBE3203:
+ 10922 .LBE3202:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10923 .loc 2 854 0
+ 10924 9816 F30F7F85 movdqu %xmm0, -8912(%rbp)
+ 10924 30DDFFFF
+ 10925 981e F30F6F85 movdqu -8992(%rbp), %xmm0
+ 10925 E0DCFFFF
+ 10926 9826 F30F7F85 movdqu %xmm0, -8848(%rbp)
+ 10926 70DDFFFF
+ 10927 .LBB3204:
+ 10928 .LBB3205:
+
GAS LISTING /tmp/ccjbMjHD.s page 343
+
+
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 10929 .loc 3 433 0
+ 10930 982e F30F6F85 movdqu -8848(%rbp), %xmm0
+ 10930 70DDFFFF
+ 10931 9836 660F72D0 psrld $4, %xmm0
+ 10931 04
+ 10932 .LBE3205:
+ 10933 .LBE3204:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 10934 .loc 2 857 0
+ 10935 983b F30F7F85 movdqu %xmm0, -8928(%rbp)
+ 10935 20DDFFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10936 .loc 2 859 0
+ 10937 9843 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 10937 00000000
+ 10938 984b F30F6F8D movdqu -8928(%rbp), %xmm1
+ 10938 20DDFFFF
+ 10939 9853 F30F7F8D movdqu %xmm1, -8816(%rbp)
+ 10939 90DDFFFF
+ 10940 985b F30F7F85 movdqu %xmm0, -8832(%rbp)
+ 10940 80DDFFFF
+ 10941 .LBB3206:
+ 10942 .LBB3207:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 10943 .loc 2 206 0
+ 10944 9863 F30F6F85 movdqu -8832(%rbp), %xmm0
+ 10944 80DDFFFF
+ 10945 986b F30F6F8D movdqu -8816(%rbp), %xmm1
+ 10945 90DDFFFF
+ 10946 9873 660FDBC1 pand %xmm1, %xmm0
+ 10947 .LBE3207:
+ 10948 .LBE3206:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10949 .loc 2 859 0
+ 10950 9877 F30F7F85 movdqu %xmm0, -8928(%rbp)
+ 10950 20DDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 10951 .loc 2 866 0
+ 10952 987f C785FCDC movl $0, -8964(%rbp)
+ 10952 FFFF0000
+ 10952 0000
+ 10953 9889 E9BE0100 jmp .L156
+ 10953 00
+ 10954 .cfi_offset 3, -40
+ 10955 .cfi_offset 12, -32
+ 10956 .cfi_offset 13, -24
+ 10957 .L157:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10958 .loc 2 868 0
+ 10959 988e 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 10959 00000000
+ 10960 9896 F30F7F85 movdqu %xmm0, -8784(%rbp)
+ 10960 B0DDFFFF
+ 10961 989e F30F6F85 movdqu -8928(%rbp), %xmm0
+ 10961 20DDFFFF
+ 10962 98a6 F30F7F85 movdqu %xmm0, -8800(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 344
+
+
+ 10962 A0DDFFFF
+ 10963 98ae F30F6F85 movdqu -8784(%rbp), %xmm0
+ 10963 B0DDFFFF
+ 10964 98b6 F30F7F85 movdqu %xmm0, -8752(%rbp)
+ 10964 D0DDFFFF
+ 10965 98be F30F6F85 movdqu -8800(%rbp), %xmm0
+ 10965 A0DDFFFF
+ 10966 98c6 F30F7F85 movdqu %xmm0, -8768(%rbp)
+ 10966 C0DDFFFF
+ 10967 .LBB3208:
+ 10968 .LBB3209:
+ 10969 .LBB3210:
+ 10970 .LBB3211:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10971 .loc 3 529 0
+ 10972 98ce F30F6F8D movdqu -8768(%rbp), %xmm1
+ 10972 C0DDFFFF
+ 10973 98d6 F30F6F85 movdqu -8752(%rbp), %xmm0
+ 10973 D0DDFFFF
+ 10974 98de 660F3800 pshufb %xmm1, %xmm0
+ 10974 C1
+ 10975 .LBE3211:
+ 10976 .LBE3210:
+ 10977 .LBE3209:
+ 10978 .LBE3208:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10979 .loc 2 868 0
+ 10980 98e3 F30F7F85 movdqu %xmm0, -8944(%rbp)
+ 10980 10DDFFFF
+ 10981 98eb F30F6F85 movdqu -8912(%rbp), %xmm0
+ 10981 30DDFFFF
+ 10982 98f3 F30F7F85 movdqu %xmm0, -8720(%rbp)
+ 10982 F0DDFFFF
+ 10983 98fb F30F6F85 movdqu -8944(%rbp), %xmm0
+ 10983 10DDFFFF
+ 10984 9903 F30F7F85 movdqu %xmm0, -8736(%rbp)
+ 10984 E0DDFFFF
+ 10985 .LBB3212:
+ 10986 .LBB3213:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 10987 .loc 2 234 0
+ 10988 990b F30F6F85 movdqu -8736(%rbp), %xmm0
+ 10988 E0DDFFFF
+ 10989 9913 F30F6F8D movdqu -8720(%rbp), %xmm1
+ 10989 F0DDFFFF
+ 10990 991b 660FEBC1 por %xmm1, %xmm0
+ 10991 .LBE3213:
+ 10992 .LBE3212:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 10993 .loc 2 870 0
+ 10994 991f F30F7F85 movdqu %xmm0, -8944(%rbp)
+ 10994 10DDFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 10995 .loc 2 872 0
+ 10996 9927 8B85FCDC mov -8964(%rbp), %eax
+ 10996 FFFF
+ 10997 992d 48C1E004 salq $4, %rax
+
GAS LISTING /tmp/ccjbMjHD.s page 345
+
+
+ 10998 9931 480385D8 addq -9000(%rbp), %rax
+ 10998 DCFFFF
+ 10999 9938 660F6F00 movdqa (%rax), %xmm0
+ 11000 993c F30F7F85 movdqu %xmm0, -8688(%rbp)
+ 11000 10DEFFFF
+ 11001 9944 F30F6F85 movdqu -8944(%rbp), %xmm0
+ 11001 10DDFFFF
+ 11002 994c F30F7F85 movdqu %xmm0, -8704(%rbp)
+ 11002 00DEFFFF
+ 11003 9954 F30F6F85 movdqu -8688(%rbp), %xmm0
+ 11003 10DEFFFF
+ 11004 995c F30F7F85 movdqu %xmm0, -8656(%rbp)
+ 11004 30DEFFFF
+ 11005 9964 F30F6F85 movdqu -8704(%rbp), %xmm0
+ 11005 00DEFFFF
+ 11006 996c F30F7F85 movdqu %xmm0, -8672(%rbp)
+ 11006 20DEFFFF
+ 11007 .LBB3214:
+ 11008 .LBB3215:
+ 11009 .LBB3216:
+ 11010 .LBB3217:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11011 .loc 3 529 0
+ 11012 9974 F30F6F8D movdqu -8672(%rbp), %xmm1
+ 11012 20DEFFFF
+ 11013 997c F30F6F85 movdqu -8656(%rbp), %xmm0
+ 11013 30DEFFFF
+ 11014 9984 660F3800 pshufb %xmm1, %xmm0
+ 11014 C1
+ 11015 .LBE3217:
+ 11016 .LBE3216:
+ 11017 .LBE3215:
+ 11018 .LBE3214:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 11019 .loc 2 872 0
+ 11020 9989 F30F7F85 movdqu %xmm0, -8944(%rbp)
+ 11020 10DDFFFF
+ 11021 9991 F30F6F85 movdqu -8960(%rbp), %xmm0
+ 11021 00DDFFFF
+ 11022 9999 F30F7F85 movdqu %xmm0, -8624(%rbp)
+ 11022 50DEFFFF
+ 11023 99a1 F30F6F85 movdqu -8944(%rbp), %xmm0
+ 11023 10DDFFFF
+ 11024 99a9 F30F7F85 movdqu %xmm0, -8640(%rbp)
+ 11024 40DEFFFF
+ 11025 .LBB3218:
+ 11026 .LBB3219:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 11027 .loc 2 234 0
+ 11028 99b1 F30F6F85 movdqu -8640(%rbp), %xmm0
+ 11028 40DEFFFF
+ 11029 99b9 F30F6F8D movdqu -8624(%rbp), %xmm1
+ 11029 50DEFFFF
+ 11030 99c1 660FEBC1 por %xmm1, %xmm0
+ 11031 .LBE3219:
+ 11032 .LBE3218:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+
GAS LISTING /tmp/ccjbMjHD.s page 346
+
+
+ 11033 .loc 2 874 0
+ 11034 99c5 F30F7F85 movdqu %xmm0, -8960(%rbp)
+ 11034 00DDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11035 .loc 2 876 0
+ 11036 99cd 660F6F05 movdqa vec_01(%rip), %xmm0
+ 11036 00000000
+ 11037 99d5 F30F6F8D movdqu -8928(%rbp), %xmm1
+ 11037 20DDFFFF
+ 11038 99dd F30F7F8D movdqu %xmm1, -8592(%rbp)
+ 11038 70DEFFFF
+ 11039 99e5 F30F7F85 movdqu %xmm0, -8608(%rbp)
+ 11039 60DEFFFF
+ 11040 .LBB3220:
+ 11041 .LBB3221:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 11042 .loc 2 290 0
+ 11043 99ed F30F6F8D movdqu -8608(%rbp), %xmm1
+ 11043 60DEFFFF
+ 11044 99f5 F30F6F85 movdqu -8592(%rbp), %xmm0
+ 11044 70DEFFFF
+ 11045 99fd 660FF8C1 psubb %xmm1, %xmm0
+ 11046 .LBE3221:
+ 11047 .LBE3220:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11048 .loc 2 876 0
+ 11049 9a01 F30F7F85 movdqu %xmm0, -8928(%rbp)
+ 11049 20DDFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11050 .loc 2 878 0
+ 11051 9a09 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 11051 00000000
+ 11052 9a11 F30F6F8D movdqu -8928(%rbp), %xmm1
+ 11052 20DDFFFF
+ 11053 9a19 F30F7F8D movdqu %xmm1, -8560(%rbp)
+ 11053 90DEFFFF
+ 11054 9a21 F30F7F85 movdqu %xmm0, -8576(%rbp)
+ 11054 80DEFFFF
+ 11055 .LBB3222:
+ 11056 .LBB3223:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 11057 .loc 2 206 0
+ 11058 9a29 F30F6F85 movdqu -8576(%rbp), %xmm0
+ 11058 80DEFFFF
+ 11059 9a31 F30F6F8D movdqu -8560(%rbp), %xmm1
+ 11059 90DEFFFF
+ 11060 9a39 660FDBC1 pand %xmm1, %xmm0
+ 11061 .LBE3223:
+ 11062 .LBE3222:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11063 .loc 2 878 0
+ 11064 9a3d F30F7F85 movdqu %xmm0, -8928(%rbp)
+ 11064 20DDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 11065 .loc 2 866 0
+ 11066 9a45 8385FCDC addl $1, -8964(%rbp)
+ 11066 FFFF01
+
GAS LISTING /tmp/ccjbMjHD.s page 347
+
+
+ 11067 .L156:
+ 11068 9a4c 83BDFCDC cmpl $15, -8964(%rbp)
+ 11068 FFFF0F
+ 11069 9a53 0F8635FE jbe .L157
+ 11069 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 11070 .loc 2 882 0
+ 11071 9a59 F30F6F85 movdqu -8960(%rbp), %xmm0
+ 11071 00DDFFFF
+ 11072 .LBE3201:
+ 11073 .LBE3200:
+ 11074 .LBE3199:
+ 11075 .LBE3198:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 11076 .loc 2 1682 0
+ 11077 9a61 660F7F85 movdqa %xmm0, -10272(%rbp)
+ 11077 E0D7FFFF
+ 11078 .LBB3224:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 11079 .loc 2 1683 0
+ 11080 9a69 660F6F85 movdqa -10272(%rbp), %xmm0
+ 11080 E0D7FFFF
+ 11081 9a71 F30F7F85 movdqu %xmm0, -9776(%rbp)
+ 11081 D0D9FFFF
+ 11082 9a79 E8000000 call KDbgWriterGet at PLT
+ 11082 00
+ 11083 9a7e 4885C0 testq %rax, %rax
+ 11084 9a81 7479 je .L159
+ 11085 9a83 BF010000 movl $1, %edi
+ 11085 00
+ 11086 9a88 E8000000 call KDbgCondToFlag at PLT
+ 11086 00
+ 11087 9a8d 4889C6 movq %rax, %rsi
+ 11088 9a90 BF100000 movl $16, %edi
+ 11088 00
+ 11089 9a95 E8000000 call KDbgTestModConds at PLT
+ 11089 00
+ 11090 9a9a 84C0 testb %al, %al
+ 11091 9a9c 745E je .L159
+ 11092 9a9e 8B85DCD9 movl -9764(%rbp), %eax
+ 11092 FFFF
+ 11093 9aa4 89C7 movl %eax, %edi
+ 11094 9aa6 E85565FF call bswap_32
+ 11094 FF
+ 11095 9aab 4189C5 movl %eax, %r13d
+ 11096 9aae 8B85D8D9 movl -9768(%rbp), %eax
+ 11096 FFFF
+ 11097 9ab4 89C7 movl %eax, %edi
+ 11098 9ab6 E84565FF call bswap_32
+ 11098 FF
+ 11099 9abb 4189C4 movl %eax, %r12d
+ 11100 9abe 8B85D4D9 movl -9772(%rbp), %eax
+ 11100 FFFF
+ 11101 9ac4 89C7 movl %eax, %edi
+ 11102 9ac6 E83565FF call bswap_32
+ 11102 FF
+ 11103 9acb 89C3 movl %eax, %ebx
+
GAS LISTING /tmp/ccjbMjHD.s page 348
+
+
+ 11104 9acd 8B85D0D9 movl -9776(%rbp), %eax
+ 11104 FFFF
+ 11105 9ad3 89C7 movl %eax, %edi
+ 11106 9ad5 E82665FF call bswap_32
+ 11106 FF
+ 11107 9ada 4589E9 movl %r13d, %r9d
+ 11108 9add 4589E0 movl %r12d, %r8d
+ 11109 9ae0 89D9 movl %ebx, %ecx
+ 11110 9ae2 89C2 movl %eax, %edx
+ 11111 9ae4 488D3500 leaq .LC0(%rip), %rsi
+ 11111 000000
+ 11112 9aeb 488D3D00 leaq .LC1(%rip), %rdi
+ 11112 000000
+ 11113 9af2 B8000000 movl $0, %eax
+ 11113 00
+ 11114 9af7 E8000000 call KDbgMsg at PLT
+ 11114 00
+ 11115 .L159:
+ 11116 9afc 660F6F85 movdqa -10272(%rbp), %xmm0
+ 11116 E0D7FFFF
+ 11117 9b04 F30F7F85 movdqu %xmm0, -8544(%rbp)
+ 11117 A0DEFFFF
+ 11118 .LBE3224:
+ 11119 .LBB3225:
+ 11120 .LBB3226:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11121 .loc 2 667 0
+ 11122 9b0c 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 11122 00000000
+ 11123 9b14 F30F6F8D movdqu -8544(%rbp), %xmm1
+ 11123 A0DEFFFF
+ 11124 9b1c F30F7F8D movdqu %xmm1, -8512(%rbp)
+ 11124 C0DEFFFF
+ 11125 9b24 F30F7F85 movdqu %xmm0, -8528(%rbp)
+ 11125 B0DEFFFF
+ 11126 9b2c F30F6F85 movdqu -8512(%rbp), %xmm0
+ 11126 C0DEFFFF
+ 11127 9b34 F30F7F85 movdqu %xmm0, -8480(%rbp)
+ 11127 E0DEFFFF
+ 11128 9b3c F30F6F85 movdqu -8528(%rbp), %xmm0
+ 11128 B0DEFFFF
+ 11129 9b44 F30F7F85 movdqu %xmm0, -8496(%rbp)
+ 11129 D0DEFFFF
+ 11130 .LBB3227:
+ 11131 .LBB3228:
+ 11132 .LBB3229:
+ 11133 .LBB3230:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11134 .loc 3 529 0
+ 11135 9b4c F30F6F8D movdqu -8496(%rbp), %xmm1
+ 11135 D0DEFFFF
+ 11136 9b54 F30F6F85 movdqu -8480(%rbp), %xmm0
+ 11136 E0DEFFFF
+ 11137 9b5c 660F3800 pshufb %xmm1, %xmm0
+ 11137 C1
+ 11138 .LBE3230:
+ 11139 .LBE3229:
+
GAS LISTING /tmp/ccjbMjHD.s page 349
+
+
+ 11140 .LBE3228:
+ 11141 .LBE3227:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11142 .loc 2 667 0
+ 11143 9b61 F30F7F85 movdqu %xmm0, -8544(%rbp)
+ 11143 A0DEFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11144 .loc 2 668 0
+ 11145 9b69 F30F6F85 movdqu -8544(%rbp), %xmm0
+ 11145 A0DEFFFF
+ 11146 .LBE3226:
+ 11147 .LBE3225:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 11148 .loc 2 1684 0
+ 11149 9b71 660F7F85 movdqa %xmm0, -10272(%rbp)
+ 11149 E0D7FFFF
+ 11150 .LBB3231:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 11151 .loc 2 1685 0
+ 11152 9b79 660F6F85 movdqa -10272(%rbp), %xmm0
+ 11152 E0D7FFFF
+ 11153 9b81 F30F7F85 movdqu %xmm0, -9792(%rbp)
+ 11153 C0D9FFFF
+ 11154 9b89 E8000000 call KDbgWriterGet at PLT
+ 11154 00
+ 11155 9b8e 4885C0 testq %rax, %rax
+ 11156 9b91 7479 je .L161
+ 11157 9b93 BF010000 movl $1, %edi
+ 11157 00
+ 11158 9b98 E8000000 call KDbgCondToFlag at PLT
+ 11158 00
+ 11159 9b9d 4889C6 movq %rax, %rsi
+ 11160 9ba0 BF100000 movl $16, %edi
+ 11160 00
+ 11161 9ba5 E8000000 call KDbgTestModConds at PLT
+ 11161 00
+ 11162 9baa 84C0 testb %al, %al
+ 11163 9bac 745E je .L161
+ 11164 9bae 8B85CCD9 movl -9780(%rbp), %eax
+ 11164 FFFF
+ 11165 9bb4 89C7 movl %eax, %edi
+ 11166 9bb6 E84564FF call bswap_32
+ 11166 FF
+ 11167 9bbb 4189C5 movl %eax, %r13d
+ 11168 9bbe 8B85C8D9 movl -9784(%rbp), %eax
+ 11168 FFFF
+ 11169 9bc4 89C7 movl %eax, %edi
+ 11170 9bc6 E83564FF call bswap_32
+ 11170 FF
+ 11171 9bcb 4189C4 movl %eax, %r12d
+ 11172 9bce 8B85C4D9 movl -9788(%rbp), %eax
+ 11172 FFFF
+ 11173 9bd4 89C7 movl %eax, %edi
+ 11174 9bd6 E82564FF call bswap_32
+ 11174 FF
+ 11175 9bdb 89C3 movl %eax, %ebx
+ 11176 9bdd 8B85C0D9 movl -9792(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 350
+
+
+ 11176 FFFF
+ 11177 9be3 89C7 movl %eax, %edi
+ 11178 9be5 E81664FF call bswap_32
+ 11178 FF
+ 11179 9bea 4589E9 movl %r13d, %r9d
+ 11180 9bed 4589E0 movl %r12d, %r8d
+ 11181 9bf0 89D9 movl %ebx, %ecx
+ 11182 9bf2 89C2 movl %eax, %edx
+ 11183 9bf4 488D3500 leaq .LC2(%rip), %rsi
+ 11183 000000
+ 11184 9bfb 488D3D00 leaq .LC1(%rip), %rdi
+ 11184 000000
+ 11185 9c02 B8000000 movl $0, %eax
+ 11185 00
+ 11186 9c07 E8000000 call KDbgMsg at PLT
+ 11186 00
+ 11187 .L161:
+ 11188 9c0c 660F6F85 movdqa -10272(%rbp), %xmm0
+ 11188 E0D7FFFF
+ 11189 9c14 F30F7F85 movdqu %xmm0, -8448(%rbp)
+ 11189 00DFFFFF
+ 11190 9c1c 660F6F85 movdqa -10256(%rbp), %xmm0
+ 11190 F0D7FFFF
+ 11191 9c24 F30F7F85 movdqu %xmm0, -8464(%rbp)
+ 11191 F0DEFFFF
+ 11192 .LBE3231:
+ 11193 .LBB3232:
+ 11194 .LBB3233:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 11195 .loc 2 178 0
+ 11196 9c2c F30F6F85 movdqu -8464(%rbp), %xmm0
+ 11196 F0DEFFFF
+ 11197 9c34 F30F6F8D movdqu -8448(%rbp), %xmm1
+ 11197 00DFFFFF
+ 11198 9c3c 660FEFC1 pxor %xmm1, %xmm0
+ 11199 .LBE3233:
+ 11200 .LBE3232:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 11201 .loc 2 1686 0
+ 11202 9c40 660F7F85 movdqa %xmm0, -10272(%rbp)
+ 11202 E0D7FFFF
+ 11203 .LBB3234:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 11204 .loc 2 1687 0
+ 11205 9c48 660F6F85 movdqa -10272(%rbp), %xmm0
+ 11205 E0D7FFFF
+ 11206 9c50 F30F7F85 movdqu %xmm0, -9808(%rbp)
+ 11206 B0D9FFFF
+ 11207 9c58 E8000000 call KDbgWriterGet at PLT
+ 11207 00
+ 11208 9c5d 4885C0 testq %rax, %rax
+ 11209 9c60 7479 je .L163
+ 11210 9c62 BF010000 movl $1, %edi
+ 11210 00
+ 11211 9c67 E8000000 call KDbgCondToFlag at PLT
+ 11211 00
+ 11212 9c6c 4889C6 movq %rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s page 351
+
+
+ 11213 9c6f BF100000 movl $16, %edi
+ 11213 00
+ 11214 9c74 E8000000 call KDbgTestModConds at PLT
+ 11214 00
+ 11215 9c79 84C0 testb %al, %al
+ 11216 9c7b 745E je .L163
+ 11217 9c7d 8B85BCD9 movl -9796(%rbp), %eax
+ 11217 FFFF
+ 11218 9c83 89C7 movl %eax, %edi
+ 11219 9c85 E87663FF call bswap_32
+ 11219 FF
+ 11220 9c8a 4189C5 movl %eax, %r13d
+ 11221 9c8d 8B85B8D9 movl -9800(%rbp), %eax
+ 11221 FFFF
+ 11222 9c93 89C7 movl %eax, %edi
+ 11223 9c95 E86663FF call bswap_32
+ 11223 FF
+ 11224 9c9a 4189C4 movl %eax, %r12d
+ 11225 9c9d 8B85B4D9 movl -9804(%rbp), %eax
+ 11225 FFFF
+ 11226 9ca3 89C7 movl %eax, %edi
+ 11227 9ca5 E85663FF call bswap_32
+ 11227 FF
+ 11228 9caa 89C3 movl %eax, %ebx
+ 11229 9cac 8B85B0D9 movl -9808(%rbp), %eax
+ 11229 FFFF
+ 11230 9cb2 89C7 movl %eax, %edi
+ 11231 9cb4 E84763FF call bswap_32
+ 11231 FF
+ 11232 9cb9 4589E9 movl %r13d, %r9d
+ 11233 9cbc 4589E0 movl %r12d, %r8d
+ 11234 9cbf 89D9 movl %ebx, %ecx
+ 11235 9cc1 89C2 movl %eax, %edx
+ 11236 9cc3 488D3500 leaq .LC3(%rip), %rsi
+ 11236 000000
+ 11237 9cca 488D3D00 leaq .LC1(%rip), %rdi
+ 11237 000000
+ 11238 9cd1 B8000000 movl $0, %eax
+ 11238 00
+ 11239 9cd6 E8000000 call KDbgMsg at PLT
+ 11239 00
+ 11240 .L163:
+ 11241 9cdb 660F6F85 movdqa -10272(%rbp), %xmm0
+ 11241 E0D7FFFF
+ 11242 9ce3 F30F7F85 movdqu %xmm0, -8432(%rbp)
+ 11242 10DFFFFF
+ 11243 9ceb F30F6F85 movdqu -8432(%rbp), %xmm0
+ 11243 10DFFFFF
+ 11244 9cf3 F30F7F85 movdqu %xmm0, -8400(%rbp)
+ 11244 30DFFFFF
+ 11245 .LBE3234:
+ 11246 .LBB3235:
+ 11247 .LBB3236:
+ 11248 .LBB3237:
+ 11249 .LBB3238:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 11250 .loc 3 450 0
+
GAS LISTING /tmp/ccjbMjHD.s page 352
+
+
+ 11251 9cfb F30F6F85 movdqu -8400(%rbp), %xmm0
+ 11251 30DFFFFF
+ 11252 9d03 660F70C0 pshufd $255, %xmm0, %xmm0
+ 11252 FF
+ 11253 .LBE3238:
+ 11254 .LBE3237:
+ 11255 .LBE3236:
+ 11256 .LBE3235:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 11257 .loc 2 1688 0
+ 11258 9d08 660F7F85 movdqa %xmm0, -10272(%rbp)
+ 11258 E0D7FFFF
+ 11259 .LBB3239:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 11260 .loc 2 1689 0
+ 11261 9d10 660F6F85 movdqa -10272(%rbp), %xmm0
+ 11261 E0D7FFFF
+ 11262 9d18 F30F7F85 movdqu %xmm0, -9824(%rbp)
+ 11262 A0D9FFFF
+ 11263 9d20 E8000000 call KDbgWriterGet at PLT
+ 11263 00
+ 11264 9d25 4885C0 testq %rax, %rax
+ 11265 9d28 7479 je .L165
+ 11266 9d2a BF010000 movl $1, %edi
+ 11266 00
+ 11267 9d2f E8000000 call KDbgCondToFlag at PLT
+ 11267 00
+ 11268 9d34 4889C6 movq %rax, %rsi
+ 11269 9d37 BF100000 movl $16, %edi
+ 11269 00
+ 11270 9d3c E8000000 call KDbgTestModConds at PLT
+ 11270 00
+ 11271 9d41 84C0 testb %al, %al
+ 11272 9d43 745E je .L165
+ 11273 9d45 8B85ACD9 movl -9812(%rbp), %eax
+ 11273 FFFF
+ 11274 9d4b 89C7 movl %eax, %edi
+ 11275 9d4d E8AE62FF call bswap_32
+ 11275 FF
+ 11276 9d52 4189C5 movl %eax, %r13d
+ 11277 9d55 8B85A8D9 movl -9816(%rbp), %eax
+ 11277 FFFF
+ 11278 9d5b 89C7 movl %eax, %edi
+ 11279 9d5d E89E62FF call bswap_32
+ 11279 FF
+ 11280 9d62 4189C4 movl %eax, %r12d
+ 11281 9d65 8B85A4D9 movl -9820(%rbp), %eax
+ 11281 FFFF
+ 11282 9d6b 89C7 movl %eax, %edi
+ 11283 9d6d E88E62FF call bswap_32
+ 11283 FF
+ 11284 9d72 89C3 movl %eax, %ebx
+ 11285 9d74 8B85A0D9 movl -9824(%rbp), %eax
+ 11285 FFFF
+ 11286 9d7a 89C7 movl %eax, %edi
+ 11287 9d7c E87F62FF call bswap_32
+ 11287 FF
+
GAS LISTING /tmp/ccjbMjHD.s page 353
+
+
+ 11288 9d81 4589E9 movl %r13d, %r9d
+ 11289 9d84 4589E0 movl %r12d, %r8d
+ 11290 9d87 89D9 movl %ebx, %ecx
+ 11291 9d89 89C2 movl %eax, %edx
+ 11292 9d8b 488D3500 leaq .LC4(%rip), %rsi
+ 11292 000000
+ 11293 9d92 488D3D00 leaq .LC1(%rip), %rdi
+ 11293 000000
+ 11294 9d99 B8000000 movl $0, %eax
+ 11294 00
+ 11295 9d9e E8000000 call KDbgMsg at PLT
+ 11295 00
+ 11296 .L165:
+ 11297 .LBE3239:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 11298 .loc 2 1690 0
+ 11299 9da3 660F6F85 movdqa -10272(%rbp), %xmm0
+ 11299 E0D7FFFF
+ 11300 .LBE3193:
+ 11301 .LBE3192:
+1913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_1(offset,rcon) \
+1915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn3)(v1,rcon); \
+1916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(ShiftXorColumns) (v0); \
+1917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v0 = AESBCMEMBER(VecXor) (v0, k); \
+1918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[offset] = v0
+1919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_2(offset) \
+1921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** k = AESBCMEMBER(AesKeyGenAssistColumn2)(v0); \
+1922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(ShiftXorColumns) (v1); \
+1923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v1 = AESBCMEMBER(VecXor) (v1, k); \
+1924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** round_keys[offset] = v1
+1925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(2,0x01); /* k8 : k9 : k10 : k11 */
+ 11302 .loc 2 1926 0
+ 11303 9dab F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 11303 40DCFFFF
+ 11304 9db3 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 11304 20DCFFFF
+ 11305 9dbb F30F7F85 movdqu %xmm0, -8384(%rbp)
+ 11305 40DFFFFF
+ 11306 .LBB3240:
+ 11307 .LBB3241:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 11308 .loc 2 1565 0
+ 11309 9dc3 F30F6F85 movdqu -8384(%rbp), %xmm0
+ 11309 40DFFFFF
+ 11310 9dcb 660F7F85 movdqa %xmm0, -10240(%rbp)
+ 11310 00D8FFFF
+ 11311 9dd3 660F6F85 movdqa -10240(%rbp), %xmm0
+ 11311 00D8FFFF
+ 11312 9ddb F30F7F85 movdqu %xmm0, -8368(%rbp)
+ 11312 50DFFFFF
+ 11313 .LBB3242:
+ 11314 .LBB3243:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11315 .loc 2 1278 0
+
GAS LISTING /tmp/ccjbMjHD.s page 354
+
+
+ 11316 9de3 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 11316 00000000
+ 11317 9deb F30F6F8D movdqu -8368(%rbp), %xmm1
+ 11317 50DFFFFF
+ 11318 9df3 F30F7F8D movdqu %xmm1, -8336(%rbp)
+ 11318 70DFFFFF
+ 11319 9dfb F30F7F85 movdqu %xmm0, -8352(%rbp)
+ 11319 60DFFFFF
+ 11320 9e03 F30F6F85 movdqu -8336(%rbp), %xmm0
+ 11320 70DFFFFF
+ 11321 9e0b F30F7F85 movdqu %xmm0, -8304(%rbp)
+ 11321 90DFFFFF
+ 11322 9e13 F30F6F85 movdqu -8352(%rbp), %xmm0
+ 11322 60DFFFFF
+ 11323 9e1b F30F7F85 movdqu %xmm0, -8320(%rbp)
+ 11323 80DFFFFF
+ 11324 .LBB3244:
+ 11325 .LBB3245:
+ 11326 .LBB3246:
+ 11327 .LBB3247:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11328 .loc 3 529 0
+ 11329 9e23 F30F6F8D movdqu -8320(%rbp), %xmm1
+ 11329 80DFFFFF
+ 11330 9e2b F30F6F85 movdqu -8304(%rbp), %xmm0
+ 11330 90DFFFFF
+ 11331 9e33 660F3800 pshufb %xmm1, %xmm0
+ 11331 C1
+ 11332 .LBE3247:
+ 11333 .LBE3246:
+ 11334 .LBE3245:
+ 11335 .LBE3244:
+ 11336 .LBE3243:
+ 11337 .LBE3242:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11338 .loc 2 1567 0
+ 11339 9e38 660F7F85 movdqa %xmm0, -10240(%rbp)
+ 11339 00D8FFFF
+ 11340 9e40 660F6F85 movdqa -10240(%rbp), %xmm0
+ 11340 00D8FFFF
+ 11341 9e48 660FEF85 pxor -8384(%rbp), %xmm0
+ 11341 40DFFFFF
+ 11342 9e50 F30F7F85 movdqu %xmm0, -8384(%rbp)
+ 11342 40DFFFFF
+ 11343 9e58 660F6F85 movdqa -10240(%rbp), %xmm0
+ 11343 00D8FFFF
+ 11344 9e60 F30F7F85 movdqu %xmm0, -8288(%rbp)
+ 11344 A0DFFFFF
+ 11345 .LBB3248:
+ 11346 .LBB3249:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11347 .loc 2 1278 0
+ 11348 9e68 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 11348 00000000
+ 11349 9e70 F30F6F8D movdqu -8288(%rbp), %xmm1
+ 11349 A0DFFFFF
+ 11350 9e78 F30F7F8D movdqu %xmm1, -8256(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 355
+
+
+ 11350 C0DFFFFF
+ 11351 9e80 F30F7F85 movdqu %xmm0, -8272(%rbp)
+ 11351 B0DFFFFF
+ 11352 9e88 F30F6F85 movdqu -8256(%rbp), %xmm0
+ 11352 C0DFFFFF
+ 11353 9e90 F30F7F85 movdqu %xmm0, -8224(%rbp)
+ 11353 E0DFFFFF
+ 11354 9e98 F30F6F85 movdqu -8272(%rbp), %xmm0
+ 11354 B0DFFFFF
+ 11355 9ea0 F30F7F85 movdqu %xmm0, -8240(%rbp)
+ 11355 D0DFFFFF
+ 11356 .LBB3250:
+ 11357 .LBB3251:
+ 11358 .LBB3252:
+ 11359 .LBB3253:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11360 .loc 3 529 0
+ 11361 9ea8 F30F6F8D movdqu -8240(%rbp), %xmm1
+ 11361 D0DFFFFF
+ 11362 9eb0 F30F6F85 movdqu -8224(%rbp), %xmm0
+ 11362 E0DFFFFF
+ 11363 9eb8 660F3800 pshufb %xmm1, %xmm0
+ 11363 C1
+ 11364 .LBE3253:
+ 11365 .LBE3252:
+ 11366 .LBE3251:
+ 11367 .LBE3250:
+ 11368 .LBE3249:
+ 11369 .LBE3248:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11370 .loc 2 1568 0
+ 11371 9ebd 660F7F85 movdqa %xmm0, -10240(%rbp)
+ 11371 00D8FFFF
+ 11372 9ec5 660F6F85 movdqa -10240(%rbp), %xmm0
+ 11372 00D8FFFF
+ 11373 9ecd 660FEF85 pxor -8384(%rbp), %xmm0
+ 11373 40DFFFFF
+ 11374 9ed5 F30F7F85 movdqu %xmm0, -8384(%rbp)
+ 11374 40DFFFFF
+ 11375 9edd 660F6F85 movdqa -10240(%rbp), %xmm0
+ 11375 00D8FFFF
+ 11376 9ee5 F30F7F85 movdqu %xmm0, -8208(%rbp)
+ 11376 F0DFFFFF
+ 11377 .LBB3254:
+ 11378 .LBB3255:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11379 .loc 2 1278 0
+ 11380 9eed 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 11380 00000000
+ 11381 9ef5 F30F6F8D movdqu -8208(%rbp), %xmm1
+ 11381 F0DFFFFF
+ 11382 9efd F30F7F8D movdqu %xmm1, -8176(%rbp)
+ 11382 10E0FFFF
+ 11383 9f05 F30F7F85 movdqu %xmm0, -8192(%rbp)
+ 11383 00E0FFFF
+ 11384 9f0d F30F6F85 movdqu -8176(%rbp), %xmm0
+ 11384 10E0FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 356
+
+
+ 11385 9f15 F30F7F85 movdqu %xmm0, -8144(%rbp)
+ 11385 30E0FFFF
+ 11386 9f1d F30F6F85 movdqu -8192(%rbp), %xmm0
+ 11386 00E0FFFF
+ 11387 9f25 F30F7F85 movdqu %xmm0, -8160(%rbp)
+ 11387 20E0FFFF
+ 11388 .LBB3256:
+ 11389 .LBB3257:
+ 11390 .LBB3258:
+ 11391 .LBB3259:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11392 .loc 3 529 0
+ 11393 9f2d F30F6F8D movdqu -8160(%rbp), %xmm1
+ 11393 20E0FFFF
+ 11394 9f35 F30F6F85 movdqu -8144(%rbp), %xmm0
+ 11394 30E0FFFF
+ 11395 9f3d 660F3800 pshufb %xmm1, %xmm0
+ 11395 C1
+ 11396 .LBE3259:
+ 11397 .LBE3258:
+ 11398 .LBE3257:
+ 11399 .LBE3256:
+ 11400 .LBE3255:
+ 11401 .LBE3254:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11402 .loc 2 1569 0
+ 11403 9f42 660F7F85 movdqa %xmm0, -10240(%rbp)
+ 11403 00D8FFFF
+ 11404 9f4a 660F6F85 movdqa -10240(%rbp), %xmm0
+ 11404 00D8FFFF
+ 11405 9f52 660FEF85 pxor -8384(%rbp), %xmm0
+ 11405 40DFFFFF
+ 11406 9f5a F30F7F85 movdqu %xmm0, -8384(%rbp)
+ 11406 40DFFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11407 .loc 2 1571 0
+ 11408 9f62 F30F6F85 movdqu -8384(%rbp), %xmm0
+ 11408 40DFFFFF
+ 11409 .LBE3241:
+ 11410 .LBE3240:
+ 11411 .loc 2 1926 0
+ 11412 9f6a F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 11412 20DCFFFF
+ 11413 9f72 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 11413 20DCFFFF
+ 11414 9f7a F30F7F85 movdqu %xmm0, -8112(%rbp)
+ 11414 50E0FFFF
+ 11415 9f82 F30F6F85 movdqu -9152(%rbp), %xmm0
+ 11415 40DCFFFF
+ 11416 9f8a F30F7F85 movdqu %xmm0, -8128(%rbp)
+ 11416 40E0FFFF
+ 11417 .LBB3260:
+ 11418 .LBB3261:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 11419 .loc 2 178 0
+ 11420 9f92 F30F6F85 movdqu -8128(%rbp), %xmm0
+ 11420 40E0FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 357
+
+
+ 11421 9f9a F30F6F8D movdqu -8112(%rbp), %xmm1
+ 11421 50E0FFFF
+ 11422 9fa2 660FEFC1 pxor %xmm1, %xmm0
+ 11423 .LBE3261:
+ 11424 .LBE3260:
+ 11425 .loc 2 1926 0
+ 11426 9fa6 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 11426 20DCFFFF
+ 11427 9fae 488B8598 movq -9832(%rbp), %rax
+ 11427 D9FFFF
+ 11428 9fb5 4883C020 addq $32, %rax
+ 11429 9fb9 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 11429 20DCFFFF
+ 11430 9fc1 F30F7F00 movdqu %xmm0, (%rax)
+ 11431 9fc5 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 11431 20DCFFFF
+ 11432 9fcd F30F7F85 movdqu %xmm0, -8096(%rbp)
+ 11432 60E0FFFF
+ 11433 .LBB3262:
+ 11434 .LBB3263:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 11435 .loc 2 1656 0
+ 11436 9fd5 F30F6F85 movdqu -8096(%rbp), %xmm0
+ 11436 60E0FFFF
+ 11437 9fdd F30F7F85 movdqu %xmm0, -9744(%rbp)
+ 11437 F0D9FFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 11438 .loc 2 1657 0
+ 11439 9fe5 8B85FCD9 movl -9732(%rbp), %eax
+ 11439 FFFF
+ 11440 9feb 898578E0 movl %eax, -8072(%rbp)
+ 11440 FFFF
+ 11441 .LBB3264:
+ 11442 .LBB3265:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 11443 .loc 2 740 0
+ 11444 9ff1 8B8578E0 movl -8072(%rbp), %eax
+ 11444 FFFF
+ 11445 9ff7 8985E0D9 movl %eax, -9760(%rbp)
+ 11445 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 11446 .loc 2 741 0
+ 11447 9ffd C7857CE0 movl $0, -8068(%rbp)
+ 11447 FFFF0000
+ 11447 0000
+ 11448 a007 EB36 jmp .L166
+ 11449 .L167:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 11450 .loc 2 742 0
+ 11451 a009 8B8D7CE0 movl -8068(%rbp), %ecx
+ 11451 FFFF
+ 11452 a00f 8B857CE0 movl -8068(%rbp), %eax
+ 11452 FFFF
+ 11453 a015 89C0 mov %eax, %eax
+ 11454 a017 0FB68405 movzbl -9760(%rbp,%rax), %eax
+ 11454 E0D9FFFF
+ 11455 a01f 0FB6C0 movzbl %al, %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 358
+
+
+ 11456 a022 89C2 mov %eax, %edx
+ 11457 a024 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 11457 000000
+ 11458 a02b 0FB61402 movzbl (%rdx,%rax), %edx
+ 11459 a02f 89C8 mov %ecx, %eax
+ 11460 a031 889405E0 movb %dl, -9760(%rbp,%rax)
+ 11460 D9FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 11461 .loc 2 741 0
+ 11462 a038 83857CE0 addl $1, -8068(%rbp)
+ 11462 FFFF01
+ 11463 .L166:
+ 11464 a03f 83BD7CE0 cmpl $3, -8068(%rbp)
+ 11464 FFFF03
+ 11465 a046 76C1 jbe .L167
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 11466 .loc 2 743 0
+ 11467 a048 8B85E0D9 movl -9760(%rbp), %eax
+ 11467 FFFF
+ 11468 .LBE3265:
+ 11469 .LBE3264:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 11470 .loc 2 1657 0
+ 11471 a04e 898574E0 movl %eax, -8076(%rbp)
+ 11471 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 11472 .loc 2 1659 0
+ 11473 a054 8B8574E0 movl -8076(%rbp), %eax
+ 11473 FFFF
+ 11474 a05a 8985FCD9 movl %eax, -9732(%rbp)
+ 11474 FFFF
+ 11475 a060 8B85FCD9 movl -9732(%rbp), %eax
+ 11475 FFFF
+ 11476 a066 8985F8D9 movl %eax, -9736(%rbp)
+ 11476 FFFF
+ 11477 a06c 8B85F8D9 movl -9736(%rbp), %eax
+ 11477 FFFF
+ 11478 a072 8985F4D9 movl %eax, -9740(%rbp)
+ 11478 FFFF
+ 11479 a078 8B85F4D9 movl -9740(%rbp), %eax
+ 11479 FFFF
+ 11480 a07e 8985F0D9 movl %eax, -9744(%rbp)
+ 11480 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 11481 .loc 2 1660 0
+ 11482 a084 F30F6F85 movdqu -9744(%rbp), %xmm0
+ 11482 F0D9FFFF
+ 11483 .LBE3263:
+ 11484 .LBE3262:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(3); /* k12 : k13 : k14 : k15 */
+ 11485 .loc 2 1927 0
+ 11486 a08c F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 11486 40DCFFFF
+ 11487 a094 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 11487 30DCFFFF
+ 11488 a09c F30F7F85 movdqu %xmm0, -8064(%rbp)
+ 11488 80E0FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 359
+
+
+ 11489 .LBB3266:
+ 11490 .LBB3267:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 11491 .loc 2 1565 0
+ 11492 a0a4 F30F6F85 movdqu -8064(%rbp), %xmm0
+ 11492 80E0FFFF
+ 11493 a0ac 660F7F85 movdqa %xmm0, -10224(%rbp)
+ 11493 10D8FFFF
+ 11494 a0b4 660F6F85 movdqa -10224(%rbp), %xmm0
+ 11494 10D8FFFF
+ 11495 a0bc F30F7F85 movdqu %xmm0, -8048(%rbp)
+ 11495 90E0FFFF
+ 11496 .LBB3268:
+ 11497 .LBB3269:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11498 .loc 2 1278 0
+ 11499 a0c4 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 11499 00000000
+ 11500 a0cc F30F6F8D movdqu -8048(%rbp), %xmm1
+ 11500 90E0FFFF
+ 11501 a0d4 F30F7F8D movdqu %xmm1, -8016(%rbp)
+ 11501 B0E0FFFF
+ 11502 a0dc F30F7F85 movdqu %xmm0, -8032(%rbp)
+ 11502 A0E0FFFF
+ 11503 a0e4 F30F6F85 movdqu -8016(%rbp), %xmm0
+ 11503 B0E0FFFF
+ 11504 a0ec F30F7F85 movdqu %xmm0, -7984(%rbp)
+ 11504 D0E0FFFF
+ 11505 a0f4 F30F6F85 movdqu -8032(%rbp), %xmm0
+ 11505 A0E0FFFF
+ 11506 a0fc F30F7F85 movdqu %xmm0, -8000(%rbp)
+ 11506 C0E0FFFF
+ 11507 .LBB3270:
+ 11508 .LBB3271:
+ 11509 .LBB3272:
+ 11510 .LBB3273:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11511 .loc 3 529 0
+ 11512 a104 F30F6F8D movdqu -8000(%rbp), %xmm1
+ 11512 C0E0FFFF
+ 11513 a10c F30F6F85 movdqu -7984(%rbp), %xmm0
+ 11513 D0E0FFFF
+ 11514 a114 660F3800 pshufb %xmm1, %xmm0
+ 11514 C1
+ 11515 .LBE3273:
+ 11516 .LBE3272:
+ 11517 .LBE3271:
+ 11518 .LBE3270:
+ 11519 .LBE3269:
+ 11520 .LBE3268:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11521 .loc 2 1567 0
+ 11522 a119 660F7F85 movdqa %xmm0, -10224(%rbp)
+ 11522 10D8FFFF
+ 11523 a121 660F6F85 movdqa -10224(%rbp), %xmm0
+ 11523 10D8FFFF
+ 11524 a129 660FEF85 pxor -8064(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 360
+
+
+ 11524 80E0FFFF
+ 11525 a131 F30F7F85 movdqu %xmm0, -8064(%rbp)
+ 11525 80E0FFFF
+ 11526 a139 660F6F85 movdqa -10224(%rbp), %xmm0
+ 11526 10D8FFFF
+ 11527 a141 F30F7F85 movdqu %xmm0, -7968(%rbp)
+ 11527 E0E0FFFF
+ 11528 .LBB3274:
+ 11529 .LBB3275:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11530 .loc 2 1278 0
+ 11531 a149 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 11531 00000000
+ 11532 a151 F30F6F8D movdqu -7968(%rbp), %xmm1
+ 11532 E0E0FFFF
+ 11533 a159 F30F7F8D movdqu %xmm1, -7936(%rbp)
+ 11533 00E1FFFF
+ 11534 a161 F30F7F85 movdqu %xmm0, -7952(%rbp)
+ 11534 F0E0FFFF
+ 11535 a169 F30F6F85 movdqu -7936(%rbp), %xmm0
+ 11535 00E1FFFF
+ 11536 a171 F30F7F85 movdqu %xmm0, -7904(%rbp)
+ 11536 20E1FFFF
+ 11537 a179 F30F6F85 movdqu -7952(%rbp), %xmm0
+ 11537 F0E0FFFF
+ 11538 a181 F30F7F85 movdqu %xmm0, -7920(%rbp)
+ 11538 10E1FFFF
+ 11539 .LBB3276:
+ 11540 .LBB3277:
+ 11541 .LBB3278:
+ 11542 .LBB3279:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11543 .loc 3 529 0
+ 11544 a189 F30F6F8D movdqu -7920(%rbp), %xmm1
+ 11544 10E1FFFF
+ 11545 a191 F30F6F85 movdqu -7904(%rbp), %xmm0
+ 11545 20E1FFFF
+ 11546 a199 660F3800 pshufb %xmm1, %xmm0
+ 11546 C1
+ 11547 .LBE3279:
+ 11548 .LBE3278:
+ 11549 .LBE3277:
+ 11550 .LBE3276:
+ 11551 .LBE3275:
+ 11552 .LBE3274:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11553 .loc 2 1568 0
+ 11554 a19e 660F7F85 movdqa %xmm0, -10224(%rbp)
+ 11554 10D8FFFF
+ 11555 a1a6 660F6F85 movdqa -10224(%rbp), %xmm0
+ 11555 10D8FFFF
+ 11556 a1ae 660FEF85 pxor -8064(%rbp), %xmm0
+ 11556 80E0FFFF
+ 11557 a1b6 F30F7F85 movdqu %xmm0, -8064(%rbp)
+ 11557 80E0FFFF
+ 11558 a1be 660F6F85 movdqa -10224(%rbp), %xmm0
+ 11558 10D8FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 361
+
+
+ 11559 a1c6 F30F7F85 movdqu %xmm0, -7888(%rbp)
+ 11559 30E1FFFF
+ 11560 .LBB3280:
+ 11561 .LBB3281:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11562 .loc 2 1278 0
+ 11563 a1ce 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 11563 00000000
+ 11564 a1d6 F30F6F8D movdqu -7888(%rbp), %xmm1
+ 11564 30E1FFFF
+ 11565 a1de F30F7F8D movdqu %xmm1, -7856(%rbp)
+ 11565 50E1FFFF
+ 11566 a1e6 F30F7F85 movdqu %xmm0, -7872(%rbp)
+ 11566 40E1FFFF
+ 11567 a1ee F30F6F85 movdqu -7856(%rbp), %xmm0
+ 11567 50E1FFFF
+ 11568 a1f6 F30F7F85 movdqu %xmm0, -7824(%rbp)
+ 11568 70E1FFFF
+ 11569 a1fe F30F6F85 movdqu -7872(%rbp), %xmm0
+ 11569 40E1FFFF
+ 11570 a206 F30F7F85 movdqu %xmm0, -7840(%rbp)
+ 11570 60E1FFFF
+ 11571 .LBB3282:
+ 11572 .LBB3283:
+ 11573 .LBB3284:
+ 11574 .LBB3285:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11575 .loc 3 529 0
+ 11576 a20e F30F6F8D movdqu -7840(%rbp), %xmm1
+ 11576 60E1FFFF
+ 11577 a216 F30F6F85 movdqu -7824(%rbp), %xmm0
+ 11577 70E1FFFF
+ 11578 a21e 660F3800 pshufb %xmm1, %xmm0
+ 11578 C1
+ 11579 .LBE3285:
+ 11580 .LBE3284:
+ 11581 .LBE3283:
+ 11582 .LBE3282:
+ 11583 .LBE3281:
+ 11584 .LBE3280:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11585 .loc 2 1569 0
+ 11586 a223 660F7F85 movdqa %xmm0, -10224(%rbp)
+ 11586 10D8FFFF
+ 11587 a22b 660F6F85 movdqa -10224(%rbp), %xmm0
+ 11587 10D8FFFF
+ 11588 a233 660FEF85 pxor -8064(%rbp), %xmm0
+ 11588 80E0FFFF
+ 11589 a23b F30F7F85 movdqu %xmm0, -8064(%rbp)
+ 11589 80E0FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11590 .loc 2 1571 0
+ 11591 a243 F30F6F85 movdqu -8064(%rbp), %xmm0
+ 11591 80E0FFFF
+ 11592 .LBE3267:
+ 11593 .LBE3266:
+ 11594 .loc 2 1927 0
+
GAS LISTING /tmp/ccjbMjHD.s page 362
+
+
+ 11595 a24b F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 11595 30DCFFFF
+ 11596 a253 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 11596 30DCFFFF
+ 11597 a25b F30F7F85 movdqu %xmm0, -7792(%rbp)
+ 11597 90E1FFFF
+ 11598 a263 F30F6F85 movdqu -9152(%rbp), %xmm0
+ 11598 40DCFFFF
+ 11599 a26b F30F7F85 movdqu %xmm0, -7808(%rbp)
+ 11599 80E1FFFF
+ 11600 .LBB3286:
+ 11601 .LBB3287:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 11602 .loc 2 178 0
+ 11603 a273 F30F6F85 movdqu -7808(%rbp), %xmm0
+ 11603 80E1FFFF
+ 11604 a27b F30F6F8D movdqu -7792(%rbp), %xmm1
+ 11604 90E1FFFF
+ 11605 a283 660FEFC1 pxor %xmm1, %xmm0
+ 11606 .LBE3287:
+ 11607 .LBE3286:
+ 11608 .loc 2 1927 0
+ 11609 a287 F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 11609 30DCFFFF
+ 11610 a28f 488B8598 movq -9832(%rbp), %rax
+ 11610 D9FFFF
+ 11611 a296 4883C030 addq $48, %rax
+ 11612 a29a F30F6F85 movdqu -9168(%rbp), %xmm0
+ 11612 30DCFFFF
+ 11613 a2a2 F30F7F00 movdqu %xmm0, (%rax)
+ 11614 a2a6 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 11614 30DCFFFF
+ 11615 a2ae F30F7F85 movdqu %xmm0, -7760(%rbp)
+ 11615 B0E1FFFF
+ 11616 .LBB3288:
+ 11617 .LBB3289:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 11618 .loc 2 1681 0
+ 11619 a2b6 B8020000 movl $2, %eax
+ 11619 00
+ 11620 a2bb 660F6F05 movdqa vec_00(%rip), %xmm0
+ 11620 00000000
+ 11621 a2c3 F30F7F85 movdqu %xmm0, -7728(%rbp)
+ 11621 D0E1FFFF
+ 11622 a2cb 8985CCE1 movl %eax, -7732(%rbp)
+ 11622 FFFF
+ 11623 a2d1 F30F6F85 movdqu -7728(%rbp), %xmm0
+ 11623 D0E1FFFF
+ 11624 a2d9 F30F7F85 movdqu %xmm0, -7696(%rbp)
+ 11624 F0E1FFFF
+ 11625 a2e1 8B85CCE1 movl -7732(%rbp), %eax
+ 11625 FFFF
+ 11626 a2e7 8985ECE1 movl %eax, -7700(%rbp)
+ 11626 FFFF
+ 11627 .LBB3290:
+ 11628 .LBB3291:
+ 11629 .LBB3292:
+
GAS LISTING /tmp/ccjbMjHD.s page 363
+
+
+ 11630 .LBB3293:
+ 11631 .loc 3 598 0
+ 11632 a2ed 8B85ECE1 movl -7700(%rbp), %eax
+ 11632 FFFF
+ 11633 a2f3 F30F6F85 movdqu -7696(%rbp), %xmm0
+ 11633 F0E1FFFF
+ 11634 a2fb 660F3A22 pinsrd $3, %eax, %xmm0
+ 11634 C003
+ 11635 .LBE3293:
+ 11636 .LBE3292:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 11637 .loc 2 519 0
+ 11638 a301 F30F7F85 movdqu %xmm0, -7728(%rbp)
+ 11638 D0E1FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11639 .loc 2 526 0
+ 11640 a309 F30F6F85 movdqu -7728(%rbp), %xmm0
+ 11640 D0E1FFFF
+ 11641 .LBE3291:
+ 11642 .LBE3290:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 11643 .loc 2 1681 0
+ 11644 a311 660F7F85 movdqa %xmm0, -10192(%rbp)
+ 11644 30D8FFFF
+ 11645 a319 F30F6F85 movdqu -7760(%rbp), %xmm0
+ 11645 B0E1FFFF
+ 11646 a321 F30F7F85 movdqu %xmm0, -7680(%rbp)
+ 11646 00E2FFFF
+ 11647 a329 F30F6F85 movdqu -7680(%rbp), %xmm0
+ 11647 00E2FFFF
+ 11648 a331 F30F7F85 movdqu %xmm0, -7648(%rbp)
+ 11648 20E2FFFF
+ 11649 a339 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 11649 000000
+ 11650 a340 48898518 movq %rax, -7656(%rbp)
+ 11650 E2FFFF
+ 11651 .LBB3294:
+ 11652 .LBB3295:
+ 11653 .LBB3296:
+ 11654 .LBB3297:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 11655 .loc 2 851 0
+ 11656 a347 660F6F05 movdqa vec_00(%rip), %xmm0
+ 11656 00000000
+ 11657 a34f F30F7F85 movdqu %xmm0, -7616(%rbp)
+ 11657 40E2FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 11658 .loc 2 854 0
+ 11659 a357 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 11659 00000000
+ 11660 a35f F30F6F8D movdqu -7648(%rbp), %xmm1
+ 11660 20E2FFFF
+ 11661 a367 F30F7F8D movdqu %xmm1, -7536(%rbp)
+ 11661 90E2FFFF
+ 11662 a36f F30F7F85 movdqu %xmm0, -7552(%rbp)
+ 11662 80E2FFFF
+ 11663 .LBB3298:
+
GAS LISTING /tmp/ccjbMjHD.s page 364
+
+
+ 11664 .LBB3299:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 11665 .loc 2 206 0
+ 11666 a377 F30F6F85 movdqu -7552(%rbp), %xmm0
+ 11666 80E2FFFF
+ 11667 a37f F30F6F8D movdqu -7536(%rbp), %xmm1
+ 11667 90E2FFFF
+ 11668 a387 660FDBC1 pand %xmm1, %xmm0
+ 11669 .LBE3299:
+ 11670 .LBE3298:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 11671 .loc 2 854 0
+ 11672 a38b F30F7F85 movdqu %xmm0, -7568(%rbp)
+ 11672 70E2FFFF
+ 11673 a393 F30F6F85 movdqu -7648(%rbp), %xmm0
+ 11673 20E2FFFF
+ 11674 a39b F30F7F85 movdqu %xmm0, -7504(%rbp)
+ 11674 B0E2FFFF
+ 11675 .LBB3300:
+ 11676 .LBB3301:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 11677 .loc 3 433 0
+ 11678 a3a3 F30F6F85 movdqu -7504(%rbp), %xmm0
+ 11678 B0E2FFFF
+ 11679 a3ab 660F72D0 psrld $4, %xmm0
+ 11679 04
+ 11680 .LBE3301:
+ 11681 .LBE3300:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 11682 .loc 2 857 0
+ 11683 a3b0 F30F7F85 movdqu %xmm0, -7584(%rbp)
+ 11683 60E2FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11684 .loc 2 859 0
+ 11685 a3b8 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 11685 00000000
+ 11686 a3c0 F30F6F8D movdqu -7584(%rbp), %xmm1
+ 11686 60E2FFFF
+ 11687 a3c8 F30F7F8D movdqu %xmm1, -7472(%rbp)
+ 11687 D0E2FFFF
+ 11688 a3d0 F30F7F85 movdqu %xmm0, -7488(%rbp)
+ 11688 C0E2FFFF
+ 11689 .LBB3302:
+ 11690 .LBB3303:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 11691 .loc 2 206 0
+ 11692 a3d8 F30F6F85 movdqu -7488(%rbp), %xmm0
+ 11692 C0E2FFFF
+ 11693 a3e0 F30F6F8D movdqu -7472(%rbp), %xmm1
+ 11693 D0E2FFFF
+ 11694 a3e8 660FDBC1 pand %xmm1, %xmm0
+ 11695 .LBE3303:
+ 11696 .LBE3302:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11697 .loc 2 859 0
+ 11698 a3ec F30F7F85 movdqu %xmm0, -7584(%rbp)
+ 11698 60E2FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 365
+
+
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 11699 .loc 2 866 0
+ 11700 a3f4 C7853CE2 movl $0, -7620(%rbp)
+ 11700 FFFF0000
+ 11700 0000
+ 11701 a3fe E9BE0100 jmp .L168
+ 11701 00
+ 11702 .L169:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 11703 .loc 2 868 0
+ 11704 a403 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 11704 00000000
+ 11705 a40b F30F7F85 movdqu %xmm0, -7440(%rbp)
+ 11705 F0E2FFFF
+ 11706 a413 F30F6F85 movdqu -7584(%rbp), %xmm0
+ 11706 60E2FFFF
+ 11707 a41b F30F7F85 movdqu %xmm0, -7456(%rbp)
+ 11707 E0E2FFFF
+ 11708 a423 F30F6F85 movdqu -7440(%rbp), %xmm0
+ 11708 F0E2FFFF
+ 11709 a42b F30F7F85 movdqu %xmm0, -7408(%rbp)
+ 11709 10E3FFFF
+ 11710 a433 F30F6F85 movdqu -7456(%rbp), %xmm0
+ 11710 E0E2FFFF
+ 11711 a43b F30F7F85 movdqu %xmm0, -7424(%rbp)
+ 11711 00E3FFFF
+ 11712 .LBB3304:
+ 11713 .LBB3305:
+ 11714 .LBB3306:
+ 11715 .LBB3307:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11716 .loc 3 529 0
+ 11717 a443 F30F6F8D movdqu -7424(%rbp), %xmm1
+ 11717 00E3FFFF
+ 11718 a44b F30F6F85 movdqu -7408(%rbp), %xmm0
+ 11718 10E3FFFF
+ 11719 a453 660F3800 pshufb %xmm1, %xmm0
+ 11719 C1
+ 11720 .LBE3307:
+ 11721 .LBE3306:
+ 11722 .LBE3305:
+ 11723 .LBE3304:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 11724 .loc 2 868 0
+ 11725 a458 F30F7F85 movdqu %xmm0, -7600(%rbp)
+ 11725 50E2FFFF
+ 11726 a460 F30F6F85 movdqu -7568(%rbp), %xmm0
+ 11726 70E2FFFF
+ 11727 a468 F30F7F85 movdqu %xmm0, -7376(%rbp)
+ 11727 30E3FFFF
+ 11728 a470 F30F6F85 movdqu -7600(%rbp), %xmm0
+ 11728 50E2FFFF
+ 11729 a478 F30F7F85 movdqu %xmm0, -7392(%rbp)
+ 11729 20E3FFFF
+ 11730 .LBB3308:
+ 11731 .LBB3309:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+
GAS LISTING /tmp/ccjbMjHD.s page 366
+
+
+ 11732 .loc 2 234 0
+ 11733 a480 F30F6F85 movdqu -7392(%rbp), %xmm0
+ 11733 20E3FFFF
+ 11734 a488 F30F6F8D movdqu -7376(%rbp), %xmm1
+ 11734 30E3FFFF
+ 11735 a490 660FEBC1 por %xmm1, %xmm0
+ 11736 .LBE3309:
+ 11737 .LBE3308:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 11738 .loc 2 870 0
+ 11739 a494 F30F7F85 movdqu %xmm0, -7600(%rbp)
+ 11739 50E2FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 11740 .loc 2 872 0
+ 11741 a49c 8B853CE2 mov -7620(%rbp), %eax
+ 11741 FFFF
+ 11742 a4a2 48C1E004 salq $4, %rax
+ 11743 a4a6 48038518 addq -7656(%rbp), %rax
+ 11743 E2FFFF
+ 11744 a4ad 660F6F00 movdqa (%rax), %xmm0
+ 11745 a4b1 F30F7F85 movdqu %xmm0, -7344(%rbp)
+ 11745 50E3FFFF
+ 11746 a4b9 F30F6F85 movdqu -7600(%rbp), %xmm0
+ 11746 50E2FFFF
+ 11747 a4c1 F30F7F85 movdqu %xmm0, -7360(%rbp)
+ 11747 40E3FFFF
+ 11748 a4c9 F30F6F85 movdqu -7344(%rbp), %xmm0
+ 11748 50E3FFFF
+ 11749 a4d1 F30F7F85 movdqu %xmm0, -7312(%rbp)
+ 11749 70E3FFFF
+ 11750 a4d9 F30F6F85 movdqu -7360(%rbp), %xmm0
+ 11750 40E3FFFF
+ 11751 a4e1 F30F7F85 movdqu %xmm0, -7328(%rbp)
+ 11751 60E3FFFF
+ 11752 .LBB3310:
+ 11753 .LBB3311:
+ 11754 .LBB3312:
+ 11755 .LBB3313:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11756 .loc 3 529 0
+ 11757 a4e9 F30F6F8D movdqu -7328(%rbp), %xmm1
+ 11757 60E3FFFF
+ 11758 a4f1 F30F6F85 movdqu -7312(%rbp), %xmm0
+ 11758 70E3FFFF
+ 11759 a4f9 660F3800 pshufb %xmm1, %xmm0
+ 11759 C1
+ 11760 .LBE3313:
+ 11761 .LBE3312:
+ 11762 .LBE3311:
+ 11763 .LBE3310:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 11764 .loc 2 872 0
+ 11765 a4fe F30F7F85 movdqu %xmm0, -7600(%rbp)
+ 11765 50E2FFFF
+ 11766 a506 F30F6F85 movdqu -7616(%rbp), %xmm0
+ 11766 40E2FFFF
+ 11767 a50e F30F7F85 movdqu %xmm0, -7280(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 367
+
+
+ 11767 90E3FFFF
+ 11768 a516 F30F6F85 movdqu -7600(%rbp), %xmm0
+ 11768 50E2FFFF
+ 11769 a51e F30F7F85 movdqu %xmm0, -7296(%rbp)
+ 11769 80E3FFFF
+ 11770 .LBB3314:
+ 11771 .LBB3315:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 11772 .loc 2 234 0
+ 11773 a526 F30F6F85 movdqu -7296(%rbp), %xmm0
+ 11773 80E3FFFF
+ 11774 a52e F30F6F8D movdqu -7280(%rbp), %xmm1
+ 11774 90E3FFFF
+ 11775 a536 660FEBC1 por %xmm1, %xmm0
+ 11776 .LBE3315:
+ 11777 .LBE3314:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 11778 .loc 2 874 0
+ 11779 a53a F30F7F85 movdqu %xmm0, -7616(%rbp)
+ 11779 40E2FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11780 .loc 2 876 0
+ 11781 a542 660F6F05 movdqa vec_01(%rip), %xmm0
+ 11781 00000000
+ 11782 a54a F30F6F8D movdqu -7584(%rbp), %xmm1
+ 11782 60E2FFFF
+ 11783 a552 F30F7F8D movdqu %xmm1, -7248(%rbp)
+ 11783 B0E3FFFF
+ 11784 a55a F30F7F85 movdqu %xmm0, -7264(%rbp)
+ 11784 A0E3FFFF
+ 11785 .LBB3316:
+ 11786 .LBB3317:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 11787 .loc 2 290 0
+ 11788 a562 F30F6F8D movdqu -7264(%rbp), %xmm1
+ 11788 A0E3FFFF
+ 11789 a56a F30F6F85 movdqu -7248(%rbp), %xmm0
+ 11789 B0E3FFFF
+ 11790 a572 660FF8C1 psubb %xmm1, %xmm0
+ 11791 .LBE3317:
+ 11792 .LBE3316:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11793 .loc 2 876 0
+ 11794 a576 F30F7F85 movdqu %xmm0, -7584(%rbp)
+ 11794 60E2FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11795 .loc 2 878 0
+ 11796 a57e 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 11796 00000000
+ 11797 a586 F30F6F8D movdqu -7584(%rbp), %xmm1
+ 11797 60E2FFFF
+ 11798 a58e F30F7F8D movdqu %xmm1, -7216(%rbp)
+ 11798 D0E3FFFF
+ 11799 a596 F30F7F85 movdqu %xmm0, -7232(%rbp)
+ 11799 C0E3FFFF
+ 11800 .LBB3318:
+ 11801 .LBB3319:
+
GAS LISTING /tmp/ccjbMjHD.s page 368
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 11802 .loc 2 206 0
+ 11803 a59e F30F6F85 movdqu -7232(%rbp), %xmm0
+ 11803 C0E3FFFF
+ 11804 a5a6 F30F6F8D movdqu -7216(%rbp), %xmm1
+ 11804 D0E3FFFF
+ 11805 a5ae 660FDBC1 pand %xmm1, %xmm0
+ 11806 .LBE3319:
+ 11807 .LBE3318:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11808 .loc 2 878 0
+ 11809 a5b2 F30F7F85 movdqu %xmm0, -7584(%rbp)
+ 11809 60E2FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 11810 .loc 2 866 0
+ 11811 a5ba 83853CE2 addl $1, -7620(%rbp)
+ 11811 FFFF01
+ 11812 .L168:
+ 11813 a5c1 83BD3CE2 cmpl $15, -7620(%rbp)
+ 11813 FFFF0F
+ 11814 a5c8 0F8635FE jbe .L169
+ 11814 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 11815 .loc 2 882 0
+ 11816 a5ce F30F6F85 movdqu -7616(%rbp), %xmm0
+ 11816 40E2FFFF
+ 11817 .LBE3297:
+ 11818 .LBE3296:
+ 11819 .LBE3295:
+ 11820 .LBE3294:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 11821 .loc 2 1682 0
+ 11822 a5d6 660F7F85 movdqa %xmm0, -10208(%rbp)
+ 11822 20D8FFFF
+ 11823 .LBB3320:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 11824 .loc 2 1683 0
+ 11825 a5de 660F6F85 movdqa -10208(%rbp), %xmm0
+ 11825 20D8FFFF
+ 11826 a5e6 F30F7F85 movdqu %xmm0, -9680(%rbp)
+ 11826 30DAFFFF
+ 11827 a5ee E8000000 call KDbgWriterGet at PLT
+ 11827 00
+ 11828 a5f3 4885C0 testq %rax, %rax
+ 11829 a5f6 7479 je .L171
+ 11830 a5f8 BF010000 movl $1, %edi
+ 11830 00
+ 11831 a5fd E8000000 call KDbgCondToFlag at PLT
+ 11831 00
+ 11832 a602 4889C6 movq %rax, %rsi
+ 11833 a605 BF100000 movl $16, %edi
+ 11833 00
+ 11834 a60a E8000000 call KDbgTestModConds at PLT
+ 11834 00
+ 11835 a60f 84C0 testb %al, %al
+ 11836 a611 745E je .L171
+ 11837 a613 8B853CDA movl -9668(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 369
+
+
+ 11837 FFFF
+ 11838 a619 89C7 movl %eax, %edi
+ 11839 a61b E8E059FF call bswap_32
+ 11839 FF
+ 11840 a620 4189C5 movl %eax, %r13d
+ 11841 a623 8B8538DA movl -9672(%rbp), %eax
+ 11841 FFFF
+ 11842 a629 89C7 movl %eax, %edi
+ 11843 a62b E8D059FF call bswap_32
+ 11843 FF
+ 11844 a630 4189C4 movl %eax, %r12d
+ 11845 a633 8B8534DA movl -9676(%rbp), %eax
+ 11845 FFFF
+ 11846 a639 89C7 movl %eax, %edi
+ 11847 a63b E8C059FF call bswap_32
+ 11847 FF
+ 11848 a640 89C3 movl %eax, %ebx
+ 11849 a642 8B8530DA movl -9680(%rbp), %eax
+ 11849 FFFF
+ 11850 a648 89C7 movl %eax, %edi
+ 11851 a64a E8B159FF call bswap_32
+ 11851 FF
+ 11852 a64f 4589E9 movl %r13d, %r9d
+ 11853 a652 4589E0 movl %r12d, %r8d
+ 11854 a655 89D9 movl %ebx, %ecx
+ 11855 a657 89C2 movl %eax, %edx
+ 11856 a659 488D3500 leaq .LC0(%rip), %rsi
+ 11856 000000
+ 11857 a660 488D3D00 leaq .LC1(%rip), %rdi
+ 11857 000000
+ 11858 a667 B8000000 movl $0, %eax
+ 11858 00
+ 11859 a66c E8000000 call KDbgMsg at PLT
+ 11859 00
+ 11860 .L171:
+ 11861 a671 660F6F85 movdqa -10208(%rbp), %xmm0
+ 11861 20D8FFFF
+ 11862 a679 F30F7F85 movdqu %xmm0, -7200(%rbp)
+ 11862 E0E3FFFF
+ 11863 .LBE3320:
+ 11864 .LBB3321:
+ 11865 .LBB3322:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11866 .loc 2 667 0
+ 11867 a681 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 11867 00000000
+ 11868 a689 F30F6F8D movdqu -7200(%rbp), %xmm1
+ 11868 E0E3FFFF
+ 11869 a691 F30F7F8D movdqu %xmm1, -7168(%rbp)
+ 11869 00E4FFFF
+ 11870 a699 F30F7F85 movdqu %xmm0, -7184(%rbp)
+ 11870 F0E3FFFF
+ 11871 a6a1 F30F6F85 movdqu -7168(%rbp), %xmm0
+ 11871 00E4FFFF
+ 11872 a6a9 F30F7F85 movdqu %xmm0, -7136(%rbp)
+ 11872 20E4FFFF
+ 11873 a6b1 F30F6F85 movdqu -7184(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 370
+
+
+ 11873 F0E3FFFF
+ 11874 a6b9 F30F7F85 movdqu %xmm0, -7152(%rbp)
+ 11874 10E4FFFF
+ 11875 .LBB3323:
+ 11876 .LBB3324:
+ 11877 .LBB3325:
+ 11878 .LBB3326:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11879 .loc 3 529 0
+ 11880 a6c1 F30F6F8D movdqu -7152(%rbp), %xmm1
+ 11880 10E4FFFF
+ 11881 a6c9 F30F6F85 movdqu -7136(%rbp), %xmm0
+ 11881 20E4FFFF
+ 11882 a6d1 660F3800 pshufb %xmm1, %xmm0
+ 11882 C1
+ 11883 .LBE3326:
+ 11884 .LBE3325:
+ 11885 .LBE3324:
+ 11886 .LBE3323:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11887 .loc 2 667 0
+ 11888 a6d6 F30F7F85 movdqu %xmm0, -7200(%rbp)
+ 11888 E0E3FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 11889 .loc 2 668 0
+ 11890 a6de F30F6F85 movdqu -7200(%rbp), %xmm0
+ 11890 E0E3FFFF
+ 11891 .LBE3322:
+ 11892 .LBE3321:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 11893 .loc 2 1684 0
+ 11894 a6e6 660F7F85 movdqa %xmm0, -10208(%rbp)
+ 11894 20D8FFFF
+ 11895 .LBB3327:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 11896 .loc 2 1685 0
+ 11897 a6ee 660F6F85 movdqa -10208(%rbp), %xmm0
+ 11897 20D8FFFF
+ 11898 a6f6 F30F7F85 movdqu %xmm0, -9696(%rbp)
+ 11898 20DAFFFF
+ 11899 a6fe E8000000 call KDbgWriterGet at PLT
+ 11899 00
+ 11900 a703 4885C0 testq %rax, %rax
+ 11901 a706 7479 je .L173
+ 11902 a708 BF010000 movl $1, %edi
+ 11902 00
+ 11903 a70d E8000000 call KDbgCondToFlag at PLT
+ 11903 00
+ 11904 a712 4889C6 movq %rax, %rsi
+ 11905 a715 BF100000 movl $16, %edi
+ 11905 00
+ 11906 a71a E8000000 call KDbgTestModConds at PLT
+ 11906 00
+ 11907 a71f 84C0 testb %al, %al
+ 11908 a721 745E je .L173
+ 11909 a723 8B852CDA movl -9684(%rbp), %eax
+ 11909 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 371
+
+
+ 11910 a729 89C7 movl %eax, %edi
+ 11911 a72b E8D058FF call bswap_32
+ 11911 FF
+ 11912 a730 4189C5 movl %eax, %r13d
+ 11913 a733 8B8528DA movl -9688(%rbp), %eax
+ 11913 FFFF
+ 11914 a739 89C7 movl %eax, %edi
+ 11915 a73b E8C058FF call bswap_32
+ 11915 FF
+ 11916 a740 4189C4 movl %eax, %r12d
+ 11917 a743 8B8524DA movl -9692(%rbp), %eax
+ 11917 FFFF
+ 11918 a749 89C7 movl %eax, %edi
+ 11919 a74b E8B058FF call bswap_32
+ 11919 FF
+ 11920 a750 89C3 movl %eax, %ebx
+ 11921 a752 8B8520DA movl -9696(%rbp), %eax
+ 11921 FFFF
+ 11922 a758 89C7 movl %eax, %edi
+ 11923 a75a E8A158FF call bswap_32
+ 11923 FF
+ 11924 a75f 4589E9 movl %r13d, %r9d
+ 11925 a762 4589E0 movl %r12d, %r8d
+ 11926 a765 89D9 movl %ebx, %ecx
+ 11927 a767 89C2 movl %eax, %edx
+ 11928 a769 488D3500 leaq .LC2(%rip), %rsi
+ 11928 000000
+ 11929 a770 488D3D00 leaq .LC1(%rip), %rdi
+ 11929 000000
+ 11930 a777 B8000000 movl $0, %eax
+ 11930 00
+ 11931 a77c E8000000 call KDbgMsg at PLT
+ 11931 00
+ 11932 .L173:
+ 11933 a781 660F6F85 movdqa -10208(%rbp), %xmm0
+ 11933 20D8FFFF
+ 11934 a789 F30F7F85 movdqu %xmm0, -7104(%rbp)
+ 11934 40E4FFFF
+ 11935 a791 660F6F85 movdqa -10192(%rbp), %xmm0
+ 11935 30D8FFFF
+ 11936 a799 F30F7F85 movdqu %xmm0, -7120(%rbp)
+ 11936 30E4FFFF
+ 11937 .LBE3327:
+ 11938 .LBB3328:
+ 11939 .LBB3329:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 11940 .loc 2 178 0
+ 11941 a7a1 F30F6F85 movdqu -7120(%rbp), %xmm0
+ 11941 30E4FFFF
+ 11942 a7a9 F30F6F8D movdqu -7104(%rbp), %xmm1
+ 11942 40E4FFFF
+ 11943 a7b1 660FEFC1 pxor %xmm1, %xmm0
+ 11944 .LBE3329:
+ 11945 .LBE3328:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 11946 .loc 2 1686 0
+ 11947 a7b5 660F7F85 movdqa %xmm0, -10208(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 372
+
+
+ 11947 20D8FFFF
+ 11948 .LBB3330:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 11949 .loc 2 1687 0
+ 11950 a7bd 660F6F85 movdqa -10208(%rbp), %xmm0
+ 11950 20D8FFFF
+ 11951 a7c5 F30F7F85 movdqu %xmm0, -9712(%rbp)
+ 11951 10DAFFFF
+ 11952 a7cd E8000000 call KDbgWriterGet at PLT
+ 11952 00
+ 11953 a7d2 4885C0 testq %rax, %rax
+ 11954 a7d5 7479 je .L175
+ 11955 a7d7 BF010000 movl $1, %edi
+ 11955 00
+ 11956 a7dc E8000000 call KDbgCondToFlag at PLT
+ 11956 00
+ 11957 a7e1 4889C6 movq %rax, %rsi
+ 11958 a7e4 BF100000 movl $16, %edi
+ 11958 00
+ 11959 a7e9 E8000000 call KDbgTestModConds at PLT
+ 11959 00
+ 11960 a7ee 84C0 testb %al, %al
+ 11961 a7f0 745E je .L175
+ 11962 a7f2 8B851CDA movl -9700(%rbp), %eax
+ 11962 FFFF
+ 11963 a7f8 89C7 movl %eax, %edi
+ 11964 a7fa E80158FF call bswap_32
+ 11964 FF
+ 11965 a7ff 4189C5 movl %eax, %r13d
+ 11966 a802 8B8518DA movl -9704(%rbp), %eax
+ 11966 FFFF
+ 11967 a808 89C7 movl %eax, %edi
+ 11968 a80a E8F157FF call bswap_32
+ 11968 FF
+ 11969 a80f 4189C4 movl %eax, %r12d
+ 11970 a812 8B8514DA movl -9708(%rbp), %eax
+ 11970 FFFF
+ 11971 a818 89C7 movl %eax, %edi
+ 11972 a81a E8E157FF call bswap_32
+ 11972 FF
+ 11973 a81f 89C3 movl %eax, %ebx
+ 11974 a821 8B8510DA movl -9712(%rbp), %eax
+ 11974 FFFF
+ 11975 a827 89C7 movl %eax, %edi
+ 11976 a829 E8D257FF call bswap_32
+ 11976 FF
+ 11977 a82e 4589E9 movl %r13d, %r9d
+ 11978 a831 4589E0 movl %r12d, %r8d
+ 11979 a834 89D9 movl %ebx, %ecx
+ 11980 a836 89C2 movl %eax, %edx
+ 11981 a838 488D3500 leaq .LC3(%rip), %rsi
+ 11981 000000
+ 11982 a83f 488D3D00 leaq .LC1(%rip), %rdi
+ 11982 000000
+ 11983 a846 B8000000 movl $0, %eax
+ 11983 00
+ 11984 a84b E8000000 call KDbgMsg at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 373
+
+
+ 11984 00
+ 11985 .L175:
+ 11986 a850 660F6F85 movdqa -10208(%rbp), %xmm0
+ 11986 20D8FFFF
+ 11987 a858 F30F7F85 movdqu %xmm0, -7088(%rbp)
+ 11987 50E4FFFF
+ 11988 a860 F30F6F85 movdqu -7088(%rbp), %xmm0
+ 11988 50E4FFFF
+ 11989 a868 F30F7F85 movdqu %xmm0, -7056(%rbp)
+ 11989 70E4FFFF
+ 11990 .LBE3330:
+ 11991 .LBB3331:
+ 11992 .LBB3332:
+ 11993 .LBB3333:
+ 11994 .LBB3334:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 11995 .loc 3 450 0
+ 11996 a870 F30F6F85 movdqu -7056(%rbp), %xmm0
+ 11996 70E4FFFF
+ 11997 a878 660F70C0 pshufd $255, %xmm0, %xmm0
+ 11997 FF
+ 11998 .LBE3334:
+ 11999 .LBE3333:
+ 12000 .LBE3332:
+ 12001 .LBE3331:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 12002 .loc 2 1688 0
+ 12003 a87d 660F7F85 movdqa %xmm0, -10208(%rbp)
+ 12003 20D8FFFF
+ 12004 .LBB3335:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 12005 .loc 2 1689 0
+ 12006 a885 660F6F85 movdqa -10208(%rbp), %xmm0
+ 12006 20D8FFFF
+ 12007 a88d F30F7F85 movdqu %xmm0, -9728(%rbp)
+ 12007 00DAFFFF
+ 12008 a895 E8000000 call KDbgWriterGet at PLT
+ 12008 00
+ 12009 a89a 4885C0 testq %rax, %rax
+ 12010 a89d 7479 je .L177
+ 12011 a89f BF010000 movl $1, %edi
+ 12011 00
+ 12012 a8a4 E8000000 call KDbgCondToFlag at PLT
+ 12012 00
+ 12013 a8a9 4889C6 movq %rax, %rsi
+ 12014 a8ac BF100000 movl $16, %edi
+ 12014 00
+ 12015 a8b1 E8000000 call KDbgTestModConds at PLT
+ 12015 00
+ 12016 a8b6 84C0 testb %al, %al
+ 12017 a8b8 745E je .L177
+ 12018 a8ba 8B850CDA movl -9716(%rbp), %eax
+ 12018 FFFF
+ 12019 a8c0 89C7 movl %eax, %edi
+ 12020 a8c2 E83957FF call bswap_32
+ 12020 FF
+ 12021 a8c7 4189C5 movl %eax, %r13d
+
GAS LISTING /tmp/ccjbMjHD.s page 374
+
+
+ 12022 a8ca 8B8508DA movl -9720(%rbp), %eax
+ 12022 FFFF
+ 12023 a8d0 89C7 movl %eax, %edi
+ 12024 a8d2 E82957FF call bswap_32
+ 12024 FF
+ 12025 a8d7 4189C4 movl %eax, %r12d
+ 12026 a8da 8B8504DA movl -9724(%rbp), %eax
+ 12026 FFFF
+ 12027 a8e0 89C7 movl %eax, %edi
+ 12028 a8e2 E81957FF call bswap_32
+ 12028 FF
+ 12029 a8e7 89C3 movl %eax, %ebx
+ 12030 a8e9 8B8500DA movl -9728(%rbp), %eax
+ 12030 FFFF
+ 12031 a8ef 89C7 movl %eax, %edi
+ 12032 a8f1 E80A57FF call bswap_32
+ 12032 FF
+ 12033 a8f6 4589E9 movl %r13d, %r9d
+ 12034 a8f9 4589E0 movl %r12d, %r8d
+ 12035 a8fc 89D9 movl %ebx, %ecx
+ 12036 a8fe 89C2 movl %eax, %edx
+ 12037 a900 488D3500 leaq .LC4(%rip), %rsi
+ 12037 000000
+ 12038 a907 488D3D00 leaq .LC1(%rip), %rdi
+ 12038 000000
+ 12039 a90e B8000000 movl $0, %eax
+ 12039 00
+ 12040 a913 E8000000 call KDbgMsg at PLT
+ 12040 00
+ 12041 .L177:
+ 12042 .LBE3335:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 12043 .loc 2 1690 0
+ 12044 a918 660F6F85 movdqa -10208(%rbp), %xmm0
+ 12044 20D8FFFF
+ 12045 .LBE3289:
+ 12046 .LBE3288:
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(4,0x02); /* k16 : k17 : k18 : k19 */
+ 12047 .loc 2 1928 0
+ 12048 a920 F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 12048 40DCFFFF
+ 12049 a928 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 12049 20DCFFFF
+ 12050 a930 F30F7F85 movdqu %xmm0, -7040(%rbp)
+ 12050 80E4FFFF
+ 12051 .LBB3336:
+ 12052 .LBB3337:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 12053 .loc 2 1565 0
+ 12054 a938 F30F6F85 movdqu -7040(%rbp), %xmm0
+ 12054 80E4FFFF
+ 12055 a940 660F7F85 movdqa %xmm0, -10176(%rbp)
+ 12055 40D8FFFF
+ 12056 a948 660F6F85 movdqa -10176(%rbp), %xmm0
+ 12056 40D8FFFF
+ 12057 a950 F30F7F85 movdqu %xmm0, -7024(%rbp)
+ 12057 90E4FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 375
+
+
+ 12058 .LBB3338:
+ 12059 .LBB3339:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12060 .loc 2 1278 0
+ 12061 a958 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 12061 00000000
+ 12062 a960 F30F6F8D movdqu -7024(%rbp), %xmm1
+ 12062 90E4FFFF
+ 12063 a968 F30F7F8D movdqu %xmm1, -6992(%rbp)
+ 12063 B0E4FFFF
+ 12064 a970 F30F7F85 movdqu %xmm0, -7008(%rbp)
+ 12064 A0E4FFFF
+ 12065 a978 F30F6F85 movdqu -6992(%rbp), %xmm0
+ 12065 B0E4FFFF
+ 12066 a980 F30F7F85 movdqu %xmm0, -6960(%rbp)
+ 12066 D0E4FFFF
+ 12067 a988 F30F6F85 movdqu -7008(%rbp), %xmm0
+ 12067 A0E4FFFF
+ 12068 a990 F30F7F85 movdqu %xmm0, -6976(%rbp)
+ 12068 C0E4FFFF
+ 12069 .LBB3340:
+ 12070 .LBB3341:
+ 12071 .LBB3342:
+ 12072 .LBB3343:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12073 .loc 3 529 0
+ 12074 a998 F30F6F8D movdqu -6976(%rbp), %xmm1
+ 12074 C0E4FFFF
+ 12075 a9a0 F30F6F85 movdqu -6960(%rbp), %xmm0
+ 12075 D0E4FFFF
+ 12076 a9a8 660F3800 pshufb %xmm1, %xmm0
+ 12076 C1
+ 12077 .LBE3343:
+ 12078 .LBE3342:
+ 12079 .LBE3341:
+ 12080 .LBE3340:
+ 12081 .LBE3339:
+ 12082 .LBE3338:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12083 .loc 2 1567 0
+ 12084 a9ad 660F7F85 movdqa %xmm0, -10176(%rbp)
+ 12084 40D8FFFF
+ 12085 a9b5 660F6F85 movdqa -10176(%rbp), %xmm0
+ 12085 40D8FFFF
+ 12086 a9bd 660FEF85 pxor -7040(%rbp), %xmm0
+ 12086 80E4FFFF
+ 12087 a9c5 F30F7F85 movdqu %xmm0, -7040(%rbp)
+ 12087 80E4FFFF
+ 12088 a9cd 660F6F85 movdqa -10176(%rbp), %xmm0
+ 12088 40D8FFFF
+ 12089 a9d5 F30F7F85 movdqu %xmm0, -6944(%rbp)
+ 12089 E0E4FFFF
+ 12090 .LBB3344:
+ 12091 .LBB3345:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12092 .loc 2 1278 0
+ 12093 a9dd 660F6F05 movdqa mask.7943(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 376
+
+
+ 12093 00000000
+ 12094 a9e5 F30F6F8D movdqu -6944(%rbp), %xmm1
+ 12094 E0E4FFFF
+ 12095 a9ed F30F7F8D movdqu %xmm1, -6912(%rbp)
+ 12095 00E5FFFF
+ 12096 a9f5 F30F7F85 movdqu %xmm0, -6928(%rbp)
+ 12096 F0E4FFFF
+ 12097 a9fd F30F6F85 movdqu -6912(%rbp), %xmm0
+ 12097 00E5FFFF
+ 12098 aa05 F30F7F85 movdqu %xmm0, -6880(%rbp)
+ 12098 20E5FFFF
+ 12099 aa0d F30F6F85 movdqu -6928(%rbp), %xmm0
+ 12099 F0E4FFFF
+ 12100 aa15 F30F7F85 movdqu %xmm0, -6896(%rbp)
+ 12100 10E5FFFF
+ 12101 .LBB3346:
+ 12102 .LBB3347:
+ 12103 .LBB3348:
+ 12104 .LBB3349:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12105 .loc 3 529 0
+ 12106 aa1d F30F6F8D movdqu -6896(%rbp), %xmm1
+ 12106 10E5FFFF
+ 12107 aa25 F30F6F85 movdqu -6880(%rbp), %xmm0
+ 12107 20E5FFFF
+ 12108 aa2d 660F3800 pshufb %xmm1, %xmm0
+ 12108 C1
+ 12109 .LBE3349:
+ 12110 .LBE3348:
+ 12111 .LBE3347:
+ 12112 .LBE3346:
+ 12113 .LBE3345:
+ 12114 .LBE3344:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12115 .loc 2 1568 0
+ 12116 aa32 660F7F85 movdqa %xmm0, -10176(%rbp)
+ 12116 40D8FFFF
+ 12117 aa3a 660F6F85 movdqa -10176(%rbp), %xmm0
+ 12117 40D8FFFF
+ 12118 aa42 660FEF85 pxor -7040(%rbp), %xmm0
+ 12118 80E4FFFF
+ 12119 aa4a F30F7F85 movdqu %xmm0, -7040(%rbp)
+ 12119 80E4FFFF
+ 12120 aa52 660F6F85 movdqa -10176(%rbp), %xmm0
+ 12120 40D8FFFF
+ 12121 aa5a F30F7F85 movdqu %xmm0, -6864(%rbp)
+ 12121 30E5FFFF
+ 12122 .LBB3350:
+ 12123 .LBB3351:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12124 .loc 2 1278 0
+ 12125 aa62 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 12125 00000000
+ 12126 aa6a F30F6F8D movdqu -6864(%rbp), %xmm1
+ 12126 30E5FFFF
+ 12127 aa72 F30F7F8D movdqu %xmm1, -6832(%rbp)
+ 12127 50E5FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 377
+
+
+ 12128 aa7a F30F7F85 movdqu %xmm0, -6848(%rbp)
+ 12128 40E5FFFF
+ 12129 aa82 F30F6F85 movdqu -6832(%rbp), %xmm0
+ 12129 50E5FFFF
+ 12130 aa8a F30F7F85 movdqu %xmm0, -6800(%rbp)
+ 12130 70E5FFFF
+ 12131 aa92 F30F6F85 movdqu -6848(%rbp), %xmm0
+ 12131 40E5FFFF
+ 12132 aa9a F30F7F85 movdqu %xmm0, -6816(%rbp)
+ 12132 60E5FFFF
+ 12133 .LBB3352:
+ 12134 .LBB3353:
+ 12135 .LBB3354:
+ 12136 .LBB3355:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12137 .loc 3 529 0
+ 12138 aaa2 F30F6F8D movdqu -6816(%rbp), %xmm1
+ 12138 60E5FFFF
+ 12139 aaaa F30F6F85 movdqu -6800(%rbp), %xmm0
+ 12139 70E5FFFF
+ 12140 aab2 660F3800 pshufb %xmm1, %xmm0
+ 12140 C1
+ 12141 .LBE3355:
+ 12142 .LBE3354:
+ 12143 .LBE3353:
+ 12144 .LBE3352:
+ 12145 .LBE3351:
+ 12146 .LBE3350:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12147 .loc 2 1569 0
+ 12148 aab7 660F7F85 movdqa %xmm0, -10176(%rbp)
+ 12148 40D8FFFF
+ 12149 aabf 660F6F85 movdqa -10176(%rbp), %xmm0
+ 12149 40D8FFFF
+ 12150 aac7 660FEF85 pxor -7040(%rbp), %xmm0
+ 12150 80E4FFFF
+ 12151 aacf F30F7F85 movdqu %xmm0, -7040(%rbp)
+ 12151 80E4FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 12152 .loc 2 1571 0
+ 12153 aad7 F30F6F85 movdqu -7040(%rbp), %xmm0
+ 12153 80E4FFFF
+ 12154 .LBE3337:
+ 12155 .LBE3336:
+ 12156 .loc 2 1928 0
+ 12157 aadf F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 12157 20DCFFFF
+ 12158 aae7 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 12158 20DCFFFF
+ 12159 aaef F30F7F85 movdqu %xmm0, -6768(%rbp)
+ 12159 90E5FFFF
+ 12160 aaf7 F30F6F85 movdqu -9152(%rbp), %xmm0
+ 12160 40DCFFFF
+ 12161 aaff F30F7F85 movdqu %xmm0, -6784(%rbp)
+ 12161 80E5FFFF
+ 12162 .LBB3356:
+ 12163 .LBB3357:
+
GAS LISTING /tmp/ccjbMjHD.s page 378
+
+
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 12164 .loc 2 178 0
+ 12165 ab07 F30F6F85 movdqu -6784(%rbp), %xmm0
+ 12165 80E5FFFF
+ 12166 ab0f F30F6F8D movdqu -6768(%rbp), %xmm1
+ 12166 90E5FFFF
+ 12167 ab17 660FEFC1 pxor %xmm1, %xmm0
+ 12168 .LBE3357:
+ 12169 .LBE3356:
+ 12170 .loc 2 1928 0
+ 12171 ab1b F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 12171 20DCFFFF
+ 12172 ab23 488B8598 movq -9832(%rbp), %rax
+ 12172 D9FFFF
+ 12173 ab2a 4883C040 addq $64, %rax
+ 12174 ab2e F30F6F85 movdqu -9184(%rbp), %xmm0
+ 12174 20DCFFFF
+ 12175 ab36 F30F7F00 movdqu %xmm0, (%rax)
+ 12176 ab3a F30F6F85 movdqu -9184(%rbp), %xmm0
+ 12176 20DCFFFF
+ 12177 ab42 F30F7F85 movdqu %xmm0, -6752(%rbp)
+ 12177 A0E5FFFF
+ 12178 .LBB3358:
+ 12179 .LBB3359:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 12180 .loc 2 1656 0
+ 12181 ab4a F30F6F85 movdqu -6752(%rbp), %xmm0
+ 12181 A0E5FFFF
+ 12182 ab52 F30F7F85 movdqu %xmm0, -9648(%rbp)
+ 12182 50DAFFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 12183 .loc 2 1657 0
+ 12184 ab5a 8B855CDA movl -9636(%rbp), %eax
+ 12184 FFFF
+ 12185 ab60 8985B8E5 movl %eax, -6728(%rbp)
+ 12185 FFFF
+ 12186 .LBB3360:
+ 12187 .LBB3361:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 12188 .loc 2 740 0
+ 12189 ab66 8B85B8E5 movl -6728(%rbp), %eax
+ 12189 FFFF
+ 12190 ab6c 898540DA movl %eax, -9664(%rbp)
+ 12190 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 12191 .loc 2 741 0
+ 12192 ab72 C785BCE5 movl $0, -6724(%rbp)
+ 12192 FFFF0000
+ 12192 0000
+ 12193 ab7c EB36 jmp .L178
+ 12194 .L179:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 12195 .loc 2 742 0
+ 12196 ab7e 8B8DBCE5 movl -6724(%rbp), %ecx
+ 12196 FFFF
+ 12197 ab84 8B85BCE5 movl -6724(%rbp), %eax
+ 12197 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 379
+
+
+ 12198 ab8a 89C0 mov %eax, %eax
+ 12199 ab8c 0FB68405 movzbl -9664(%rbp,%rax), %eax
+ 12199 40DAFFFF
+ 12200 ab94 0FB6C0 movzbl %al, %eax
+ 12201 ab97 89C2 mov %eax, %edx
+ 12202 ab99 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 12202 000000
+ 12203 aba0 0FB61402 movzbl (%rdx,%rax), %edx
+ 12204 aba4 89C8 mov %ecx, %eax
+ 12205 aba6 88940540 movb %dl, -9664(%rbp,%rax)
+ 12205 DAFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 12206 .loc 2 741 0
+ 12207 abad 8385BCE5 addl $1, -6724(%rbp)
+ 12207 FFFF01
+ 12208 .L178:
+ 12209 abb4 83BDBCE5 cmpl $3, -6724(%rbp)
+ 12209 FFFF03
+ 12210 abbb 76C1 jbe .L179
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 12211 .loc 2 743 0
+ 12212 abbd 8B8540DA movl -9664(%rbp), %eax
+ 12212 FFFF
+ 12213 .LBE3361:
+ 12214 .LBE3360:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 12215 .loc 2 1657 0
+ 12216 abc3 8985B4E5 movl %eax, -6732(%rbp)
+ 12216 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 12217 .loc 2 1659 0
+ 12218 abc9 8B85B4E5 movl -6732(%rbp), %eax
+ 12218 FFFF
+ 12219 abcf 89855CDA movl %eax, -9636(%rbp)
+ 12219 FFFF
+ 12220 abd5 8B855CDA movl -9636(%rbp), %eax
+ 12220 FFFF
+ 12221 abdb 898558DA movl %eax, -9640(%rbp)
+ 12221 FFFF
+ 12222 abe1 8B8558DA movl -9640(%rbp), %eax
+ 12222 FFFF
+ 12223 abe7 898554DA movl %eax, -9644(%rbp)
+ 12223 FFFF
+ 12224 abed 8B8554DA movl -9644(%rbp), %eax
+ 12224 FFFF
+ 12225 abf3 898550DA movl %eax, -9648(%rbp)
+ 12225 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 12226 .loc 2 1660 0
+ 12227 abf9 F30F6F85 movdqu -9648(%rbp), %xmm0
+ 12227 50DAFFFF
+ 12228 .LBE3359:
+ 12229 .LBE3358:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(5); /* k20 : k21 : k22 : k23 */
+ 12230 .loc 2 1929 0
+ 12231 ac01 F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 12231 40DCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 380
+
+
+ 12232 ac09 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 12232 30DCFFFF
+ 12233 ac11 F30F7F85 movdqu %xmm0, -6720(%rbp)
+ 12233 C0E5FFFF
+ 12234 .LBB3362:
+ 12235 .LBB3363:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 12236 .loc 2 1565 0
+ 12237 ac19 F30F6F85 movdqu -6720(%rbp), %xmm0
+ 12237 C0E5FFFF
+ 12238 ac21 660F7F85 movdqa %xmm0, -10160(%rbp)
+ 12238 50D8FFFF
+ 12239 ac29 660F6F85 movdqa -10160(%rbp), %xmm0
+ 12239 50D8FFFF
+ 12240 ac31 F30F7F85 movdqu %xmm0, -6704(%rbp)
+ 12240 D0E5FFFF
+ 12241 .LBB3364:
+ 12242 .LBB3365:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12243 .loc 2 1278 0
+ 12244 ac39 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 12244 00000000
+ 12245 ac41 F30F6F8D movdqu -6704(%rbp), %xmm1
+ 12245 D0E5FFFF
+ 12246 ac49 F30F7F8D movdqu %xmm1, -6672(%rbp)
+ 12246 F0E5FFFF
+ 12247 ac51 F30F7F85 movdqu %xmm0, -6688(%rbp)
+ 12247 E0E5FFFF
+ 12248 ac59 F30F6F85 movdqu -6672(%rbp), %xmm0
+ 12248 F0E5FFFF
+ 12249 ac61 F30F7F85 movdqu %xmm0, -6640(%rbp)
+ 12249 10E6FFFF
+ 12250 ac69 F30F6F85 movdqu -6688(%rbp), %xmm0
+ 12250 E0E5FFFF
+ 12251 ac71 F30F7F85 movdqu %xmm0, -6656(%rbp)
+ 12251 00E6FFFF
+ 12252 .LBB3366:
+ 12253 .LBB3367:
+ 12254 .LBB3368:
+ 12255 .LBB3369:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12256 .loc 3 529 0
+ 12257 ac79 F30F6F8D movdqu -6656(%rbp), %xmm1
+ 12257 00E6FFFF
+ 12258 ac81 F30F6F85 movdqu -6640(%rbp), %xmm0
+ 12258 10E6FFFF
+ 12259 ac89 660F3800 pshufb %xmm1, %xmm0
+ 12259 C1
+ 12260 .LBE3369:
+ 12261 .LBE3368:
+ 12262 .LBE3367:
+ 12263 .LBE3366:
+ 12264 .LBE3365:
+ 12265 .LBE3364:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12266 .loc 2 1567 0
+ 12267 ac8e 660F7F85 movdqa %xmm0, -10160(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 381
+
+
+ 12267 50D8FFFF
+ 12268 ac96 660F6F85 movdqa -10160(%rbp), %xmm0
+ 12268 50D8FFFF
+ 12269 ac9e 660FEF85 pxor -6720(%rbp), %xmm0
+ 12269 C0E5FFFF
+ 12270 aca6 F30F7F85 movdqu %xmm0, -6720(%rbp)
+ 12270 C0E5FFFF
+ 12271 acae 660F6F85 movdqa -10160(%rbp), %xmm0
+ 12271 50D8FFFF
+ 12272 acb6 F30F7F85 movdqu %xmm0, -6624(%rbp)
+ 12272 20E6FFFF
+ 12273 .LBB3370:
+ 12274 .LBB3371:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12275 .loc 2 1278 0
+ 12276 acbe 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 12276 00000000
+ 12277 acc6 F30F6F8D movdqu -6624(%rbp), %xmm1
+ 12277 20E6FFFF
+ 12278 acce F30F7F8D movdqu %xmm1, -6592(%rbp)
+ 12278 40E6FFFF
+ 12279 acd6 F30F7F85 movdqu %xmm0, -6608(%rbp)
+ 12279 30E6FFFF
+ 12280 acde F30F6F85 movdqu -6592(%rbp), %xmm0
+ 12280 40E6FFFF
+ 12281 ace6 F30F7F85 movdqu %xmm0, -6560(%rbp)
+ 12281 60E6FFFF
+ 12282 acee F30F6F85 movdqu -6608(%rbp), %xmm0
+ 12282 30E6FFFF
+ 12283 acf6 F30F7F85 movdqu %xmm0, -6576(%rbp)
+ 12283 50E6FFFF
+ 12284 .LBB3372:
+ 12285 .LBB3373:
+ 12286 .LBB3374:
+ 12287 .LBB3375:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12288 .loc 3 529 0
+ 12289 acfe F30F6F8D movdqu -6576(%rbp), %xmm1
+ 12289 50E6FFFF
+ 12290 ad06 F30F6F85 movdqu -6560(%rbp), %xmm0
+ 12290 60E6FFFF
+ 12291 ad0e 660F3800 pshufb %xmm1, %xmm0
+ 12291 C1
+ 12292 .LBE3375:
+ 12293 .LBE3374:
+ 12294 .LBE3373:
+ 12295 .LBE3372:
+ 12296 .LBE3371:
+ 12297 .LBE3370:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12298 .loc 2 1568 0
+ 12299 ad13 660F7F85 movdqa %xmm0, -10160(%rbp)
+ 12299 50D8FFFF
+ 12300 ad1b 660F6F85 movdqa -10160(%rbp), %xmm0
+ 12300 50D8FFFF
+ 12301 ad23 660FEF85 pxor -6720(%rbp), %xmm0
+ 12301 C0E5FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 382
+
+
+ 12302 ad2b F30F7F85 movdqu %xmm0, -6720(%rbp)
+ 12302 C0E5FFFF
+ 12303 ad33 660F6F85 movdqa -10160(%rbp), %xmm0
+ 12303 50D8FFFF
+ 12304 ad3b F30F7F85 movdqu %xmm0, -6544(%rbp)
+ 12304 70E6FFFF
+ 12305 .LBB3376:
+ 12306 .LBB3377:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12307 .loc 2 1278 0
+ 12308 ad43 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 12308 00000000
+ 12309 ad4b F30F6F8D movdqu -6544(%rbp), %xmm1
+ 12309 70E6FFFF
+ 12310 ad53 F30F7F8D movdqu %xmm1, -6512(%rbp)
+ 12310 90E6FFFF
+ 12311 ad5b F30F7F85 movdqu %xmm0, -6528(%rbp)
+ 12311 80E6FFFF
+ 12312 ad63 F30F6F85 movdqu -6512(%rbp), %xmm0
+ 12312 90E6FFFF
+ 12313 ad6b F30F7F85 movdqu %xmm0, -6480(%rbp)
+ 12313 B0E6FFFF
+ 12314 ad73 F30F6F85 movdqu -6528(%rbp), %xmm0
+ 12314 80E6FFFF
+ 12315 ad7b F30F7F85 movdqu %xmm0, -6496(%rbp)
+ 12315 A0E6FFFF
+ 12316 .LBB3378:
+ 12317 .LBB3379:
+ 12318 .LBB3380:
+ 12319 .LBB3381:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12320 .loc 3 529 0
+ 12321 ad83 F30F6F8D movdqu -6496(%rbp), %xmm1
+ 12321 A0E6FFFF
+ 12322 ad8b F30F6F85 movdqu -6480(%rbp), %xmm0
+ 12322 B0E6FFFF
+ 12323 ad93 660F3800 pshufb %xmm1, %xmm0
+ 12323 C1
+ 12324 .LBE3381:
+ 12325 .LBE3380:
+ 12326 .LBE3379:
+ 12327 .LBE3378:
+ 12328 .LBE3377:
+ 12329 .LBE3376:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12330 .loc 2 1569 0
+ 12331 ad98 660F7F85 movdqa %xmm0, -10160(%rbp)
+ 12331 50D8FFFF
+ 12332 ada0 660F6F85 movdqa -10160(%rbp), %xmm0
+ 12332 50D8FFFF
+ 12333 ada8 660FEF85 pxor -6720(%rbp), %xmm0
+ 12333 C0E5FFFF
+ 12334 adb0 F30F7F85 movdqu %xmm0, -6720(%rbp)
+ 12334 C0E5FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 12335 .loc 2 1571 0
+ 12336 adb8 F30F6F85 movdqu -6720(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 383
+
+
+ 12336 C0E5FFFF
+ 12337 .LBE3363:
+ 12338 .LBE3362:
+ 12339 .loc 2 1929 0
+ 12340 adc0 F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 12340 30DCFFFF
+ 12341 adc8 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 12341 30DCFFFF
+ 12342 add0 F30F7F85 movdqu %xmm0, -6448(%rbp)
+ 12342 D0E6FFFF
+ 12343 add8 F30F6F85 movdqu -9152(%rbp), %xmm0
+ 12343 40DCFFFF
+ 12344 ade0 F30F7F85 movdqu %xmm0, -6464(%rbp)
+ 12344 C0E6FFFF
+ 12345 .LBB3382:
+ 12346 .LBB3383:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 12347 .loc 2 178 0
+ 12348 ade8 F30F6F85 movdqu -6464(%rbp), %xmm0
+ 12348 C0E6FFFF
+ 12349 adf0 F30F6F8D movdqu -6448(%rbp), %xmm1
+ 12349 D0E6FFFF
+ 12350 adf8 660FEFC1 pxor %xmm1, %xmm0
+ 12351 .LBE3383:
+ 12352 .LBE3382:
+ 12353 .loc 2 1929 0
+ 12354 adfc F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 12354 30DCFFFF
+ 12355 ae04 488B8598 movq -9832(%rbp), %rax
+ 12355 D9FFFF
+ 12356 ae0b 4883C050 addq $80, %rax
+ 12357 ae0f F30F6F85 movdqu -9168(%rbp), %xmm0
+ 12357 30DCFFFF
+ 12358 ae17 F30F7F00 movdqu %xmm0, (%rax)
+ 12359 ae1b F30F6F85 movdqu -9168(%rbp), %xmm0
+ 12359 30DCFFFF
+ 12360 ae23 F30F7F85 movdqu %xmm0, -6416(%rbp)
+ 12360 F0E6FFFF
+ 12361 .LBB3384:
+ 12362 .LBB3385:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 12363 .loc 2 1681 0
+ 12364 ae2b B8040000 movl $4, %eax
+ 12364 00
+ 12365 ae30 660F6F05 movdqa vec_00(%rip), %xmm0
+ 12365 00000000
+ 12366 ae38 F30F7F85 movdqu %xmm0, -6384(%rbp)
+ 12366 10E7FFFF
+ 12367 ae40 89850CE7 movl %eax, -6388(%rbp)
+ 12367 FFFF
+ 12368 ae46 F30F6F85 movdqu -6384(%rbp), %xmm0
+ 12368 10E7FFFF
+ 12369 ae4e F30F7F85 movdqu %xmm0, -6352(%rbp)
+ 12369 30E7FFFF
+ 12370 ae56 8B850CE7 movl -6388(%rbp), %eax
+ 12370 FFFF
+ 12371 ae5c 89852CE7 movl %eax, -6356(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 384
+
+
+ 12371 FFFF
+ 12372 .LBB3386:
+ 12373 .LBB3387:
+ 12374 .LBB3388:
+ 12375 .LBB3389:
+ 12376 .loc 3 598 0
+ 12377 ae62 8B852CE7 movl -6356(%rbp), %eax
+ 12377 FFFF
+ 12378 ae68 F30F6F85 movdqu -6352(%rbp), %xmm0
+ 12378 30E7FFFF
+ 12379 ae70 660F3A22 pinsrd $3, %eax, %xmm0
+ 12379 C003
+ 12380 .LBE3389:
+ 12381 .LBE3388:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 12382 .loc 2 519 0
+ 12383 ae76 F30F7F85 movdqu %xmm0, -6384(%rbp)
+ 12383 10E7FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 12384 .loc 2 526 0
+ 12385 ae7e F30F6F85 movdqu -6384(%rbp), %xmm0
+ 12385 10E7FFFF
+ 12386 .LBE3387:
+ 12387 .LBE3386:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 12388 .loc 2 1681 0
+ 12389 ae86 660F7F85 movdqa %xmm0, -10128(%rbp)
+ 12389 70D8FFFF
+ 12390 ae8e F30F6F85 movdqu -6416(%rbp), %xmm0
+ 12390 F0E6FFFF
+ 12391 ae96 F30F7F85 movdqu %xmm0, -6336(%rbp)
+ 12391 40E7FFFF
+ 12392 ae9e F30F6F85 movdqu -6336(%rbp), %xmm0
+ 12392 40E7FFFF
+ 12393 aea6 F30F7F85 movdqu %xmm0, -6304(%rbp)
+ 12393 60E7FFFF
+ 12394 aeae 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 12394 000000
+ 12395 aeb5 48898558 movq %rax, -6312(%rbp)
+ 12395 E7FFFF
+ 12396 .LBB3390:
+ 12397 .LBB3391:
+ 12398 .LBB3392:
+ 12399 .LBB3393:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 12400 .loc 2 851 0
+ 12401 aebc 660F6F05 movdqa vec_00(%rip), %xmm0
+ 12401 00000000
+ 12402 aec4 F30F7F85 movdqu %xmm0, -6272(%rbp)
+ 12402 80E7FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 12403 .loc 2 854 0
+ 12404 aecc 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 12404 00000000
+ 12405 aed4 F30F6F8D movdqu -6304(%rbp), %xmm1
+ 12405 60E7FFFF
+ 12406 aedc F30F7F8D movdqu %xmm1, -6192(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 385
+
+
+ 12406 D0E7FFFF
+ 12407 aee4 F30F7F85 movdqu %xmm0, -6208(%rbp)
+ 12407 C0E7FFFF
+ 12408 .LBB3394:
+ 12409 .LBB3395:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 12410 .loc 2 206 0
+ 12411 aeec F30F6F85 movdqu -6208(%rbp), %xmm0
+ 12411 C0E7FFFF
+ 12412 aef4 F30F6F8D movdqu -6192(%rbp), %xmm1
+ 12412 D0E7FFFF
+ 12413 aefc 660FDBC1 pand %xmm1, %xmm0
+ 12414 .LBE3395:
+ 12415 .LBE3394:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 12416 .loc 2 854 0
+ 12417 af00 F30F7F85 movdqu %xmm0, -6224(%rbp)
+ 12417 B0E7FFFF
+ 12418 af08 F30F6F85 movdqu -6304(%rbp), %xmm0
+ 12418 60E7FFFF
+ 12419 af10 F30F7F85 movdqu %xmm0, -6160(%rbp)
+ 12419 F0E7FFFF
+ 12420 .LBB3396:
+ 12421 .LBB3397:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 12422 .loc 3 433 0
+ 12423 af18 F30F6F85 movdqu -6160(%rbp), %xmm0
+ 12423 F0E7FFFF
+ 12424 af20 660F72D0 psrld $4, %xmm0
+ 12424 04
+ 12425 .LBE3397:
+ 12426 .LBE3396:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 12427 .loc 2 857 0
+ 12428 af25 F30F7F85 movdqu %xmm0, -6240(%rbp)
+ 12428 A0E7FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12429 .loc 2 859 0
+ 12430 af2d 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 12430 00000000
+ 12431 af35 F30F6F8D movdqu -6240(%rbp), %xmm1
+ 12431 A0E7FFFF
+ 12432 af3d F30F7F8D movdqu %xmm1, -6128(%rbp)
+ 12432 10E8FFFF
+ 12433 af45 F30F7F85 movdqu %xmm0, -6144(%rbp)
+ 12433 00E8FFFF
+ 12434 .LBB3398:
+ 12435 .LBB3399:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 12436 .loc 2 206 0
+ 12437 af4d F30F6F85 movdqu -6144(%rbp), %xmm0
+ 12437 00E8FFFF
+ 12438 af55 F30F6F8D movdqu -6128(%rbp), %xmm1
+ 12438 10E8FFFF
+ 12439 af5d 660FDBC1 pand %xmm1, %xmm0
+ 12440 .LBE3399:
+ 12441 .LBE3398:
+
GAS LISTING /tmp/ccjbMjHD.s page 386
+
+
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12442 .loc 2 859 0
+ 12443 af61 F30F7F85 movdqu %xmm0, -6240(%rbp)
+ 12443 A0E7FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 12444 .loc 2 866 0
+ 12445 af69 C7857CE7 movl $0, -6276(%rbp)
+ 12445 FFFF0000
+ 12445 0000
+ 12446 af73 E9BE0100 jmp .L180
+ 12446 00
+ 12447 .L181:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 12448 .loc 2 868 0
+ 12449 af78 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 12449 00000000
+ 12450 af80 F30F7F85 movdqu %xmm0, -6096(%rbp)
+ 12450 30E8FFFF
+ 12451 af88 F30F6F85 movdqu -6240(%rbp), %xmm0
+ 12451 A0E7FFFF
+ 12452 af90 F30F7F85 movdqu %xmm0, -6112(%rbp)
+ 12452 20E8FFFF
+ 12453 af98 F30F6F85 movdqu -6096(%rbp), %xmm0
+ 12453 30E8FFFF
+ 12454 afa0 F30F7F85 movdqu %xmm0, -6064(%rbp)
+ 12454 50E8FFFF
+ 12455 afa8 F30F6F85 movdqu -6112(%rbp), %xmm0
+ 12455 20E8FFFF
+ 12456 afb0 F30F7F85 movdqu %xmm0, -6080(%rbp)
+ 12456 40E8FFFF
+ 12457 .LBB3400:
+ 12458 .LBB3401:
+ 12459 .LBB3402:
+ 12460 .LBB3403:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12461 .loc 3 529 0
+ 12462 afb8 F30F6F8D movdqu -6080(%rbp), %xmm1
+ 12462 40E8FFFF
+ 12463 afc0 F30F6F85 movdqu -6064(%rbp), %xmm0
+ 12463 50E8FFFF
+ 12464 afc8 660F3800 pshufb %xmm1, %xmm0
+ 12464 C1
+ 12465 .LBE3403:
+ 12466 .LBE3402:
+ 12467 .LBE3401:
+ 12468 .LBE3400:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 12469 .loc 2 868 0
+ 12470 afcd F30F7F85 movdqu %xmm0, -6256(%rbp)
+ 12470 90E7FFFF
+ 12471 afd5 F30F6F85 movdqu -6224(%rbp), %xmm0
+ 12471 B0E7FFFF
+ 12472 afdd F30F7F85 movdqu %xmm0, -6032(%rbp)
+ 12472 70E8FFFF
+ 12473 afe5 F30F6F85 movdqu -6256(%rbp), %xmm0
+ 12473 90E7FFFF
+ 12474 afed F30F7F85 movdqu %xmm0, -6048(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 387
+
+
+ 12474 60E8FFFF
+ 12475 .LBB3404:
+ 12476 .LBB3405:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 12477 .loc 2 234 0
+ 12478 aff5 F30F6F85 movdqu -6048(%rbp), %xmm0
+ 12478 60E8FFFF
+ 12479 affd F30F6F8D movdqu -6032(%rbp), %xmm1
+ 12479 70E8FFFF
+ 12480 b005 660FEBC1 por %xmm1, %xmm0
+ 12481 .LBE3405:
+ 12482 .LBE3404:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 12483 .loc 2 870 0
+ 12484 b009 F30F7F85 movdqu %xmm0, -6256(%rbp)
+ 12484 90E7FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 12485 .loc 2 872 0
+ 12486 b011 8B857CE7 mov -6276(%rbp), %eax
+ 12486 FFFF
+ 12487 b017 48C1E004 salq $4, %rax
+ 12488 b01b 48038558 addq -6312(%rbp), %rax
+ 12488 E7FFFF
+ 12489 b022 660F6F00 movdqa (%rax), %xmm0
+ 12490 b026 F30F7F85 movdqu %xmm0, -6000(%rbp)
+ 12490 90E8FFFF
+ 12491 b02e F30F6F85 movdqu -6256(%rbp), %xmm0
+ 12491 90E7FFFF
+ 12492 b036 F30F7F85 movdqu %xmm0, -6016(%rbp)
+ 12492 80E8FFFF
+ 12493 b03e F30F6F85 movdqu -6000(%rbp), %xmm0
+ 12493 90E8FFFF
+ 12494 b046 F30F7F85 movdqu %xmm0, -5968(%rbp)
+ 12494 B0E8FFFF
+ 12495 b04e F30F6F85 movdqu -6016(%rbp), %xmm0
+ 12495 80E8FFFF
+ 12496 b056 F30F7F85 movdqu %xmm0, -5984(%rbp)
+ 12496 A0E8FFFF
+ 12497 .LBB3406:
+ 12498 .LBB3407:
+ 12499 .LBB3408:
+ 12500 .LBB3409:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12501 .loc 3 529 0
+ 12502 b05e F30F6F8D movdqu -5984(%rbp), %xmm1
+ 12502 A0E8FFFF
+ 12503 b066 F30F6F85 movdqu -5968(%rbp), %xmm0
+ 12503 B0E8FFFF
+ 12504 b06e 660F3800 pshufb %xmm1, %xmm0
+ 12504 C1
+ 12505 .LBE3409:
+ 12506 .LBE3408:
+ 12507 .LBE3407:
+ 12508 .LBE3406:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 12509 .loc 2 872 0
+ 12510 b073 F30F7F85 movdqu %xmm0, -6256(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 388
+
+
+ 12510 90E7FFFF
+ 12511 b07b F30F6F85 movdqu -6272(%rbp), %xmm0
+ 12511 80E7FFFF
+ 12512 b083 F30F7F85 movdqu %xmm0, -5936(%rbp)
+ 12512 D0E8FFFF
+ 12513 b08b F30F6F85 movdqu -6256(%rbp), %xmm0
+ 12513 90E7FFFF
+ 12514 b093 F30F7F85 movdqu %xmm0, -5952(%rbp)
+ 12514 C0E8FFFF
+ 12515 .LBB3410:
+ 12516 .LBB3411:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 12517 .loc 2 234 0
+ 12518 b09b F30F6F85 movdqu -5952(%rbp), %xmm0
+ 12518 C0E8FFFF
+ 12519 b0a3 F30F6F8D movdqu -5936(%rbp), %xmm1
+ 12519 D0E8FFFF
+ 12520 b0ab 660FEBC1 por %xmm1, %xmm0
+ 12521 .LBE3411:
+ 12522 .LBE3410:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 12523 .loc 2 874 0
+ 12524 b0af F30F7F85 movdqu %xmm0, -6272(%rbp)
+ 12524 80E7FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 12525 .loc 2 876 0
+ 12526 b0b7 660F6F05 movdqa vec_01(%rip), %xmm0
+ 12526 00000000
+ 12527 b0bf F30F6F8D movdqu -6240(%rbp), %xmm1
+ 12527 A0E7FFFF
+ 12528 b0c7 F30F7F8D movdqu %xmm1, -5904(%rbp)
+ 12528 F0E8FFFF
+ 12529 b0cf F30F7F85 movdqu %xmm0, -5920(%rbp)
+ 12529 E0E8FFFF
+ 12530 .LBB3412:
+ 12531 .LBB3413:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 12532 .loc 2 290 0
+ 12533 b0d7 F30F6F8D movdqu -5920(%rbp), %xmm1
+ 12533 E0E8FFFF
+ 12534 b0df F30F6F85 movdqu -5904(%rbp), %xmm0
+ 12534 F0E8FFFF
+ 12535 b0e7 660FF8C1 psubb %xmm1, %xmm0
+ 12536 .LBE3413:
+ 12537 .LBE3412:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 12538 .loc 2 876 0
+ 12539 b0eb F30F7F85 movdqu %xmm0, -6240(%rbp)
+ 12539 A0E7FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12540 .loc 2 878 0
+ 12541 b0f3 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 12541 00000000
+ 12542 b0fb F30F6F8D movdqu -6240(%rbp), %xmm1
+ 12542 A0E7FFFF
+ 12543 b103 F30F7F8D movdqu %xmm1, -5872(%rbp)
+ 12543 10E9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 389
+
+
+ 12544 b10b F30F7F85 movdqu %xmm0, -5888(%rbp)
+ 12544 00E9FFFF
+ 12545 .LBB3414:
+ 12546 .LBB3415:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 12547 .loc 2 206 0
+ 12548 b113 F30F6F85 movdqu -5888(%rbp), %xmm0
+ 12548 00E9FFFF
+ 12549 b11b F30F6F8D movdqu -5872(%rbp), %xmm1
+ 12549 10E9FFFF
+ 12550 b123 660FDBC1 pand %xmm1, %xmm0
+ 12551 .LBE3415:
+ 12552 .LBE3414:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12553 .loc 2 878 0
+ 12554 b127 F30F7F85 movdqu %xmm0, -6240(%rbp)
+ 12554 A0E7FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 12555 .loc 2 866 0
+ 12556 b12f 83857CE7 addl $1, -6276(%rbp)
+ 12556 FFFF01
+ 12557 .L180:
+ 12558 b136 83BD7CE7 cmpl $15, -6276(%rbp)
+ 12558 FFFF0F
+ 12559 b13d 0F8635FE jbe .L181
+ 12559 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 12560 .loc 2 882 0
+ 12561 b143 F30F6F85 movdqu -6272(%rbp), %xmm0
+ 12561 80E7FFFF
+ 12562 .LBE3393:
+ 12563 .LBE3392:
+ 12564 .LBE3391:
+ 12565 .LBE3390:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 12566 .loc 2 1682 0
+ 12567 b14b 660F7F85 movdqa %xmm0, -10144(%rbp)
+ 12567 60D8FFFF
+ 12568 .LBB3416:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 12569 .loc 2 1683 0
+ 12570 b153 660F6F85 movdqa -10144(%rbp), %xmm0
+ 12570 60D8FFFF
+ 12571 b15b F30F7F85 movdqu %xmm0, -9584(%rbp)
+ 12571 90DAFFFF
+ 12572 b163 E8000000 call KDbgWriterGet at PLT
+ 12572 00
+ 12573 b168 4885C0 testq %rax, %rax
+ 12574 b16b 7479 je .L183
+ 12575 b16d BF010000 movl $1, %edi
+ 12575 00
+ 12576 b172 E8000000 call KDbgCondToFlag at PLT
+ 12576 00
+ 12577 b177 4889C6 movq %rax, %rsi
+ 12578 b17a BF100000 movl $16, %edi
+ 12578 00
+ 12579 b17f E8000000 call KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 390
+
+
+ 12579 00
+ 12580 b184 84C0 testb %al, %al
+ 12581 b186 745E je .L183
+ 12582 b188 8B859CDA movl -9572(%rbp), %eax
+ 12582 FFFF
+ 12583 b18e 89C7 movl %eax, %edi
+ 12584 b190 E86B4EFF call bswap_32
+ 12584 FF
+ 12585 b195 4189C5 movl %eax, %r13d
+ 12586 b198 8B8598DA movl -9576(%rbp), %eax
+ 12586 FFFF
+ 12587 b19e 89C7 movl %eax, %edi
+ 12588 b1a0 E85B4EFF call bswap_32
+ 12588 FF
+ 12589 b1a5 4189C4 movl %eax, %r12d
+ 12590 b1a8 8B8594DA movl -9580(%rbp), %eax
+ 12590 FFFF
+ 12591 b1ae 89C7 movl %eax, %edi
+ 12592 b1b0 E84B4EFF call bswap_32
+ 12592 FF
+ 12593 b1b5 89C3 movl %eax, %ebx
+ 12594 b1b7 8B8590DA movl -9584(%rbp), %eax
+ 12594 FFFF
+ 12595 b1bd 89C7 movl %eax, %edi
+ 12596 b1bf E83C4EFF call bswap_32
+ 12596 FF
+ 12597 b1c4 4589E9 movl %r13d, %r9d
+ 12598 b1c7 4589E0 movl %r12d, %r8d
+ 12599 b1ca 89D9 movl %ebx, %ecx
+ 12600 b1cc 89C2 movl %eax, %edx
+ 12601 b1ce 488D3500 leaq .LC0(%rip), %rsi
+ 12601 000000
+ 12602 b1d5 488D3D00 leaq .LC1(%rip), %rdi
+ 12602 000000
+ 12603 b1dc B8000000 movl $0, %eax
+ 12603 00
+ 12604 b1e1 E8000000 call KDbgMsg at PLT
+ 12604 00
+ 12605 .L183:
+ 12606 b1e6 660F6F85 movdqa -10144(%rbp), %xmm0
+ 12606 60D8FFFF
+ 12607 b1ee F30F7F85 movdqu %xmm0, -5856(%rbp)
+ 12607 20E9FFFF
+ 12608 .LBE3416:
+ 12609 .LBB3417:
+ 12610 .LBB3418:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 12611 .loc 2 667 0
+ 12612 b1f6 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 12612 00000000
+ 12613 b1fe F30F6F8D movdqu -5856(%rbp), %xmm1
+ 12613 20E9FFFF
+ 12614 b206 F30F7F8D movdqu %xmm1, -5824(%rbp)
+ 12614 40E9FFFF
+ 12615 b20e F30F7F85 movdqu %xmm0, -5840(%rbp)
+ 12615 30E9FFFF
+ 12616 b216 F30F6F85 movdqu -5824(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 391
+
+
+ 12616 40E9FFFF
+ 12617 b21e F30F7F85 movdqu %xmm0, -5792(%rbp)
+ 12617 60E9FFFF
+ 12618 b226 F30F6F85 movdqu -5840(%rbp), %xmm0
+ 12618 30E9FFFF
+ 12619 b22e F30F7F85 movdqu %xmm0, -5808(%rbp)
+ 12619 50E9FFFF
+ 12620 .LBB3419:
+ 12621 .LBB3420:
+ 12622 .LBB3421:
+ 12623 .LBB3422:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12624 .loc 3 529 0
+ 12625 b236 F30F6F8D movdqu -5808(%rbp), %xmm1
+ 12625 50E9FFFF
+ 12626 b23e F30F6F85 movdqu -5792(%rbp), %xmm0
+ 12626 60E9FFFF
+ 12627 b246 660F3800 pshufb %xmm1, %xmm0
+ 12627 C1
+ 12628 .LBE3422:
+ 12629 .LBE3421:
+ 12630 .LBE3420:
+ 12631 .LBE3419:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 12632 .loc 2 667 0
+ 12633 b24b F30F7F85 movdqu %xmm0, -5856(%rbp)
+ 12633 20E9FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 12634 .loc 2 668 0
+ 12635 b253 F30F6F85 movdqu -5856(%rbp), %xmm0
+ 12635 20E9FFFF
+ 12636 .LBE3418:
+ 12637 .LBE3417:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 12638 .loc 2 1684 0
+ 12639 b25b 660F7F85 movdqa %xmm0, -10144(%rbp)
+ 12639 60D8FFFF
+ 12640 .LBB3423:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 12641 .loc 2 1685 0
+ 12642 b263 660F6F85 movdqa -10144(%rbp), %xmm0
+ 12642 60D8FFFF
+ 12643 b26b F30F7F85 movdqu %xmm0, -9600(%rbp)
+ 12643 80DAFFFF
+ 12644 b273 E8000000 call KDbgWriterGet at PLT
+ 12644 00
+ 12645 b278 4885C0 testq %rax, %rax
+ 12646 b27b 7479 je .L185
+ 12647 b27d BF010000 movl $1, %edi
+ 12647 00
+ 12648 b282 E8000000 call KDbgCondToFlag at PLT
+ 12648 00
+ 12649 b287 4889C6 movq %rax, %rsi
+ 12650 b28a BF100000 movl $16, %edi
+ 12650 00
+ 12651 b28f E8000000 call KDbgTestModConds at PLT
+ 12651 00
+
GAS LISTING /tmp/ccjbMjHD.s page 392
+
+
+ 12652 b294 84C0 testb %al, %al
+ 12653 b296 745E je .L185
+ 12654 b298 8B858CDA movl -9588(%rbp), %eax
+ 12654 FFFF
+ 12655 b29e 89C7 movl %eax, %edi
+ 12656 b2a0 E85B4DFF call bswap_32
+ 12656 FF
+ 12657 b2a5 4189C5 movl %eax, %r13d
+ 12658 b2a8 8B8588DA movl -9592(%rbp), %eax
+ 12658 FFFF
+ 12659 b2ae 89C7 movl %eax, %edi
+ 12660 b2b0 E84B4DFF call bswap_32
+ 12660 FF
+ 12661 b2b5 4189C4 movl %eax, %r12d
+ 12662 b2b8 8B8584DA movl -9596(%rbp), %eax
+ 12662 FFFF
+ 12663 b2be 89C7 movl %eax, %edi
+ 12664 b2c0 E83B4DFF call bswap_32
+ 12664 FF
+ 12665 b2c5 89C3 movl %eax, %ebx
+ 12666 b2c7 8B8580DA movl -9600(%rbp), %eax
+ 12666 FFFF
+ 12667 b2cd 89C7 movl %eax, %edi
+ 12668 b2cf E82C4DFF call bswap_32
+ 12668 FF
+ 12669 b2d4 4589E9 movl %r13d, %r9d
+ 12670 b2d7 4589E0 movl %r12d, %r8d
+ 12671 b2da 89D9 movl %ebx, %ecx
+ 12672 b2dc 89C2 movl %eax, %edx
+ 12673 b2de 488D3500 leaq .LC2(%rip), %rsi
+ 12673 000000
+ 12674 b2e5 488D3D00 leaq .LC1(%rip), %rdi
+ 12674 000000
+ 12675 b2ec B8000000 movl $0, %eax
+ 12675 00
+ 12676 b2f1 E8000000 call KDbgMsg at PLT
+ 12676 00
+ 12677 .L185:
+ 12678 b2f6 660F6F85 movdqa -10144(%rbp), %xmm0
+ 12678 60D8FFFF
+ 12679 b2fe F30F7F85 movdqu %xmm0, -5760(%rbp)
+ 12679 80E9FFFF
+ 12680 b306 660F6F85 movdqa -10128(%rbp), %xmm0
+ 12680 70D8FFFF
+ 12681 b30e F30F7F85 movdqu %xmm0, -5776(%rbp)
+ 12681 70E9FFFF
+ 12682 .LBE3423:
+ 12683 .LBB3424:
+ 12684 .LBB3425:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 12685 .loc 2 178 0
+ 12686 b316 F30F6F85 movdqu -5776(%rbp), %xmm0
+ 12686 70E9FFFF
+ 12687 b31e F30F6F8D movdqu -5760(%rbp), %xmm1
+ 12687 80E9FFFF
+ 12688 b326 660FEFC1 pxor %xmm1, %xmm0
+ 12689 .LBE3425:
+
GAS LISTING /tmp/ccjbMjHD.s page 393
+
+
+ 12690 .LBE3424:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 12691 .loc 2 1686 0
+ 12692 b32a 660F7F85 movdqa %xmm0, -10144(%rbp)
+ 12692 60D8FFFF
+ 12693 .LBB3426:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 12694 .loc 2 1687 0
+ 12695 b332 660F6F85 movdqa -10144(%rbp), %xmm0
+ 12695 60D8FFFF
+ 12696 b33a F30F7F85 movdqu %xmm0, -9616(%rbp)
+ 12696 70DAFFFF
+ 12697 b342 E8000000 call KDbgWriterGet at PLT
+ 12697 00
+ 12698 b347 4885C0 testq %rax, %rax
+ 12699 b34a 7479 je .L187
+ 12700 b34c BF010000 movl $1, %edi
+ 12700 00
+ 12701 b351 E8000000 call KDbgCondToFlag at PLT
+ 12701 00
+ 12702 b356 4889C6 movq %rax, %rsi
+ 12703 b359 BF100000 movl $16, %edi
+ 12703 00
+ 12704 b35e E8000000 call KDbgTestModConds at PLT
+ 12704 00
+ 12705 b363 84C0 testb %al, %al
+ 12706 b365 745E je .L187
+ 12707 b367 8B857CDA movl -9604(%rbp), %eax
+ 12707 FFFF
+ 12708 b36d 89C7 movl %eax, %edi
+ 12709 b36f E88C4CFF call bswap_32
+ 12709 FF
+ 12710 b374 4189C5 movl %eax, %r13d
+ 12711 b377 8B8578DA movl -9608(%rbp), %eax
+ 12711 FFFF
+ 12712 b37d 89C7 movl %eax, %edi
+ 12713 b37f E87C4CFF call bswap_32
+ 12713 FF
+ 12714 b384 4189C4 movl %eax, %r12d
+ 12715 b387 8B8574DA movl -9612(%rbp), %eax
+ 12715 FFFF
+ 12716 b38d 89C7 movl %eax, %edi
+ 12717 b38f E86C4CFF call bswap_32
+ 12717 FF
+ 12718 b394 89C3 movl %eax, %ebx
+ 12719 b396 8B8570DA movl -9616(%rbp), %eax
+ 12719 FFFF
+ 12720 b39c 89C7 movl %eax, %edi
+ 12721 b39e E85D4CFF call bswap_32
+ 12721 FF
+ 12722 b3a3 4589E9 movl %r13d, %r9d
+ 12723 b3a6 4589E0 movl %r12d, %r8d
+ 12724 b3a9 89D9 movl %ebx, %ecx
+ 12725 b3ab 89C2 movl %eax, %edx
+ 12726 b3ad 488D3500 leaq .LC3(%rip), %rsi
+ 12726 000000
+ 12727 b3b4 488D3D00 leaq .LC1(%rip), %rdi
+
GAS LISTING /tmp/ccjbMjHD.s page 394
+
+
+ 12727 000000
+ 12728 b3bb B8000000 movl $0, %eax
+ 12728 00
+ 12729 b3c0 E8000000 call KDbgMsg at PLT
+ 12729 00
+ 12730 .L187:
+ 12731 b3c5 660F6F85 movdqa -10144(%rbp), %xmm0
+ 12731 60D8FFFF
+ 12732 b3cd F30F7F85 movdqu %xmm0, -5744(%rbp)
+ 12732 90E9FFFF
+ 12733 b3d5 F30F6F85 movdqu -5744(%rbp), %xmm0
+ 12733 90E9FFFF
+ 12734 b3dd F30F7F85 movdqu %xmm0, -5712(%rbp)
+ 12734 B0E9FFFF
+ 12735 .LBE3426:
+ 12736 .LBB3427:
+ 12737 .LBB3428:
+ 12738 .LBB3429:
+ 12739 .LBB3430:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 12740 .loc 3 450 0
+ 12741 b3e5 F30F6F85 movdqu -5712(%rbp), %xmm0
+ 12741 B0E9FFFF
+ 12742 b3ed 660F70C0 pshufd $255, %xmm0, %xmm0
+ 12742 FF
+ 12743 .LBE3430:
+ 12744 .LBE3429:
+ 12745 .LBE3428:
+ 12746 .LBE3427:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 12747 .loc 2 1688 0
+ 12748 b3f2 660F7F85 movdqa %xmm0, -10144(%rbp)
+ 12748 60D8FFFF
+ 12749 .LBB3431:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 12750 .loc 2 1689 0
+ 12751 b3fa 660F6F85 movdqa -10144(%rbp), %xmm0
+ 12751 60D8FFFF
+ 12752 b402 F30F7F85 movdqu %xmm0, -9632(%rbp)
+ 12752 60DAFFFF
+ 12753 b40a E8000000 call KDbgWriterGet at PLT
+ 12753 00
+ 12754 b40f 4885C0 testq %rax, %rax
+ 12755 b412 7479 je .L189
+ 12756 b414 BF010000 movl $1, %edi
+ 12756 00
+ 12757 b419 E8000000 call KDbgCondToFlag at PLT
+ 12757 00
+ 12758 b41e 4889C6 movq %rax, %rsi
+ 12759 b421 BF100000 movl $16, %edi
+ 12759 00
+ 12760 b426 E8000000 call KDbgTestModConds at PLT
+ 12760 00
+ 12761 b42b 84C0 testb %al, %al
+ 12762 b42d 745E je .L189
+ 12763 b42f 8B856CDA movl -9620(%rbp), %eax
+ 12763 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 395
+
+
+ 12764 b435 89C7 movl %eax, %edi
+ 12765 b437 E8C44BFF call bswap_32
+ 12765 FF
+ 12766 b43c 4189C5 movl %eax, %r13d
+ 12767 b43f 8B8568DA movl -9624(%rbp), %eax
+ 12767 FFFF
+ 12768 b445 89C7 movl %eax, %edi
+ 12769 b447 E8B44BFF call bswap_32
+ 12769 FF
+ 12770 b44c 4189C4 movl %eax, %r12d
+ 12771 b44f 8B8564DA movl -9628(%rbp), %eax
+ 12771 FFFF
+ 12772 b455 89C7 movl %eax, %edi
+ 12773 b457 E8A44BFF call bswap_32
+ 12773 FF
+ 12774 b45c 89C3 movl %eax, %ebx
+ 12775 b45e 8B8560DA movl -9632(%rbp), %eax
+ 12775 FFFF
+ 12776 b464 89C7 movl %eax, %edi
+ 12777 b466 E8954BFF call bswap_32
+ 12777 FF
+ 12778 b46b 4589E9 movl %r13d, %r9d
+ 12779 b46e 4589E0 movl %r12d, %r8d
+ 12780 b471 89D9 movl %ebx, %ecx
+ 12781 b473 89C2 movl %eax, %edx
+ 12782 b475 488D3500 leaq .LC4(%rip), %rsi
+ 12782 000000
+ 12783 b47c 488D3D00 leaq .LC1(%rip), %rdi
+ 12783 000000
+ 12784 b483 B8000000 movl $0, %eax
+ 12784 00
+ 12785 b488 E8000000 call KDbgMsg at PLT
+ 12785 00
+ 12786 .L189:
+ 12787 .LBE3431:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 12788 .loc 2 1690 0
+ 12789 b48d 660F6F85 movdqa -10144(%rbp), %xmm0
+ 12789 60D8FFFF
+ 12790 .LBE3385:
+ 12791 .LBE3384:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(6,0x04); /* k24 : k25 : k26 : k27 */
+ 12792 .loc 2 1930 0
+ 12793 b495 F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 12793 40DCFFFF
+ 12794 b49d F30F6F85 movdqu -9184(%rbp), %xmm0
+ 12794 20DCFFFF
+ 12795 b4a5 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 12795 C0E9FFFF
+ 12796 .LBB3432:
+ 12797 .LBB3433:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 12798 .loc 2 1565 0
+ 12799 b4ad F30F6F85 movdqu -5696(%rbp), %xmm0
+ 12799 C0E9FFFF
+ 12800 b4b5 660F7F85 movdqa %xmm0, -10112(%rbp)
+ 12800 80D8FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 396
+
+
+ 12801 b4bd 660F6F85 movdqa -10112(%rbp), %xmm0
+ 12801 80D8FFFF
+ 12802 b4c5 F30F7F85 movdqu %xmm0, -5680(%rbp)
+ 12802 D0E9FFFF
+ 12803 .LBB3434:
+ 12804 .LBB3435:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12805 .loc 2 1278 0
+ 12806 b4cd 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 12806 00000000
+ 12807 b4d5 F30F6F8D movdqu -5680(%rbp), %xmm1
+ 12807 D0E9FFFF
+ 12808 b4dd F30F7F8D movdqu %xmm1, -5648(%rbp)
+ 12808 F0E9FFFF
+ 12809 b4e5 F30F7F85 movdqu %xmm0, -5664(%rbp)
+ 12809 E0E9FFFF
+ 12810 b4ed F30F6F85 movdqu -5648(%rbp), %xmm0
+ 12810 F0E9FFFF
+ 12811 b4f5 F30F7F85 movdqu %xmm0, -5616(%rbp)
+ 12811 10EAFFFF
+ 12812 b4fd F30F6F85 movdqu -5664(%rbp), %xmm0
+ 12812 E0E9FFFF
+ 12813 b505 F30F7F85 movdqu %xmm0, -5632(%rbp)
+ 12813 00EAFFFF
+ 12814 .LBB3436:
+ 12815 .LBB3437:
+ 12816 .LBB3438:
+ 12817 .LBB3439:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12818 .loc 3 529 0
+ 12819 b50d F30F6F8D movdqu -5632(%rbp), %xmm1
+ 12819 00EAFFFF
+ 12820 b515 F30F6F85 movdqu -5616(%rbp), %xmm0
+ 12820 10EAFFFF
+ 12821 b51d 660F3800 pshufb %xmm1, %xmm0
+ 12821 C1
+ 12822 .LBE3439:
+ 12823 .LBE3438:
+ 12824 .LBE3437:
+ 12825 .LBE3436:
+ 12826 .LBE3435:
+ 12827 .LBE3434:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12828 .loc 2 1567 0
+ 12829 b522 660F7F85 movdqa %xmm0, -10112(%rbp)
+ 12829 80D8FFFF
+ 12830 b52a 660F6F85 movdqa -10112(%rbp), %xmm0
+ 12830 80D8FFFF
+ 12831 b532 660FEF85 pxor -5696(%rbp), %xmm0
+ 12831 C0E9FFFF
+ 12832 b53a F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 12832 C0E9FFFF
+ 12833 b542 660F6F85 movdqa -10112(%rbp), %xmm0
+ 12833 80D8FFFF
+ 12834 b54a F30F7F85 movdqu %xmm0, -5600(%rbp)
+ 12834 20EAFFFF
+ 12835 .LBB3440:
+
GAS LISTING /tmp/ccjbMjHD.s page 397
+
+
+ 12836 .LBB3441:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12837 .loc 2 1278 0
+ 12838 b552 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 12838 00000000
+ 12839 b55a F30F6F8D movdqu -5600(%rbp), %xmm1
+ 12839 20EAFFFF
+ 12840 b562 F30F7F8D movdqu %xmm1, -5568(%rbp)
+ 12840 40EAFFFF
+ 12841 b56a F30F7F85 movdqu %xmm0, -5584(%rbp)
+ 12841 30EAFFFF
+ 12842 b572 F30F6F85 movdqu -5568(%rbp), %xmm0
+ 12842 40EAFFFF
+ 12843 b57a F30F7F85 movdqu %xmm0, -5536(%rbp)
+ 12843 60EAFFFF
+ 12844 b582 F30F6F85 movdqu -5584(%rbp), %xmm0
+ 12844 30EAFFFF
+ 12845 b58a F30F7F85 movdqu %xmm0, -5552(%rbp)
+ 12845 50EAFFFF
+ 12846 .LBB3442:
+ 12847 .LBB3443:
+ 12848 .LBB3444:
+ 12849 .LBB3445:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12850 .loc 3 529 0
+ 12851 b592 F30F6F8D movdqu -5552(%rbp), %xmm1
+ 12851 50EAFFFF
+ 12852 b59a F30F6F85 movdqu -5536(%rbp), %xmm0
+ 12852 60EAFFFF
+ 12853 b5a2 660F3800 pshufb %xmm1, %xmm0
+ 12853 C1
+ 12854 .LBE3445:
+ 12855 .LBE3444:
+ 12856 .LBE3443:
+ 12857 .LBE3442:
+ 12858 .LBE3441:
+ 12859 .LBE3440:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12860 .loc 2 1568 0
+ 12861 b5a7 660F7F85 movdqa %xmm0, -10112(%rbp)
+ 12861 80D8FFFF
+ 12862 b5af 660F6F85 movdqa -10112(%rbp), %xmm0
+ 12862 80D8FFFF
+ 12863 b5b7 660FEF85 pxor -5696(%rbp), %xmm0
+ 12863 C0E9FFFF
+ 12864 b5bf F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 12864 C0E9FFFF
+ 12865 b5c7 660F6F85 movdqa -10112(%rbp), %xmm0
+ 12865 80D8FFFF
+ 12866 b5cf F30F7F85 movdqu %xmm0, -5520(%rbp)
+ 12866 70EAFFFF
+ 12867 .LBB3446:
+ 12868 .LBB3447:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12869 .loc 2 1278 0
+ 12870 b5d7 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 12870 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 398
+
+
+ 12871 b5df F30F6F8D movdqu -5520(%rbp), %xmm1
+ 12871 70EAFFFF
+ 12872 b5e7 F30F7F8D movdqu %xmm1, -5488(%rbp)
+ 12872 90EAFFFF
+ 12873 b5ef F30F7F85 movdqu %xmm0, -5504(%rbp)
+ 12873 80EAFFFF
+ 12874 b5f7 F30F6F85 movdqu -5488(%rbp), %xmm0
+ 12874 90EAFFFF
+ 12875 b5ff F30F7F85 movdqu %xmm0, -5456(%rbp)
+ 12875 B0EAFFFF
+ 12876 b607 F30F6F85 movdqu -5504(%rbp), %xmm0
+ 12876 80EAFFFF
+ 12877 b60f F30F7F85 movdqu %xmm0, -5472(%rbp)
+ 12877 A0EAFFFF
+ 12878 .LBB3448:
+ 12879 .LBB3449:
+ 12880 .LBB3450:
+ 12881 .LBB3451:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12882 .loc 3 529 0
+ 12883 b617 F30F6F8D movdqu -5472(%rbp), %xmm1
+ 12883 A0EAFFFF
+ 12884 b61f F30F6F85 movdqu -5456(%rbp), %xmm0
+ 12884 B0EAFFFF
+ 12885 b627 660F3800 pshufb %xmm1, %xmm0
+ 12885 C1
+ 12886 .LBE3451:
+ 12887 .LBE3450:
+ 12888 .LBE3449:
+ 12889 .LBE3448:
+ 12890 .LBE3447:
+ 12891 .LBE3446:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12892 .loc 2 1569 0
+ 12893 b62c 660F7F85 movdqa %xmm0, -10112(%rbp)
+ 12893 80D8FFFF
+ 12894 b634 660F6F85 movdqa -10112(%rbp), %xmm0
+ 12894 80D8FFFF
+ 12895 b63c 660FEF85 pxor -5696(%rbp), %xmm0
+ 12895 C0E9FFFF
+ 12896 b644 F30F7F85 movdqu %xmm0, -5696(%rbp)
+ 12896 C0E9FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 12897 .loc 2 1571 0
+ 12898 b64c F30F6F85 movdqu -5696(%rbp), %xmm0
+ 12898 C0E9FFFF
+ 12899 .LBE3433:
+ 12900 .LBE3432:
+ 12901 .loc 2 1930 0
+ 12902 b654 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 12902 20DCFFFF
+ 12903 b65c F30F6F85 movdqu -9184(%rbp), %xmm0
+ 12903 20DCFFFF
+ 12904 b664 F30F7F85 movdqu %xmm0, -5424(%rbp)
+ 12904 D0EAFFFF
+ 12905 b66c F30F6F85 movdqu -9152(%rbp), %xmm0
+ 12905 40DCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 399
+
+
+ 12906 b674 F30F7F85 movdqu %xmm0, -5440(%rbp)
+ 12906 C0EAFFFF
+ 12907 .LBB3452:
+ 12908 .LBB3453:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 12909 .loc 2 178 0
+ 12910 b67c F30F6F85 movdqu -5440(%rbp), %xmm0
+ 12910 C0EAFFFF
+ 12911 b684 F30F6F8D movdqu -5424(%rbp), %xmm1
+ 12911 D0EAFFFF
+ 12912 b68c 660FEFC1 pxor %xmm1, %xmm0
+ 12913 .LBE3453:
+ 12914 .LBE3452:
+ 12915 .loc 2 1930 0
+ 12916 b690 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 12916 20DCFFFF
+ 12917 b698 488B8598 movq -9832(%rbp), %rax
+ 12917 D9FFFF
+ 12918 b69f 4883C060 addq $96, %rax
+ 12919 b6a3 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 12919 20DCFFFF
+ 12920 b6ab F30F7F00 movdqu %xmm0, (%rax)
+ 12921 b6af F30F6F85 movdqu -9184(%rbp), %xmm0
+ 12921 20DCFFFF
+ 12922 b6b7 F30F7F85 movdqu %xmm0, -5408(%rbp)
+ 12922 E0EAFFFF
+ 12923 .LBB3454:
+ 12924 .LBB3455:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 12925 .loc 2 1656 0
+ 12926 b6bf F30F6F85 movdqu -5408(%rbp), %xmm0
+ 12926 E0EAFFFF
+ 12927 b6c7 F30F7F85 movdqu %xmm0, -9552(%rbp)
+ 12927 B0DAFFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 12928 .loc 2 1657 0
+ 12929 b6cf 8B85BCDA movl -9540(%rbp), %eax
+ 12929 FFFF
+ 12930 b6d5 8985F8EA movl %eax, -5384(%rbp)
+ 12930 FFFF
+ 12931 .LBB3456:
+ 12932 .LBB3457:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 12933 .loc 2 740 0
+ 12934 b6db 8B85F8EA movl -5384(%rbp), %eax
+ 12934 FFFF
+ 12935 b6e1 8985A0DA movl %eax, -9568(%rbp)
+ 12935 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 12936 .loc 2 741 0
+ 12937 b6e7 C785FCEA movl $0, -5380(%rbp)
+ 12937 FFFF0000
+ 12937 0000
+ 12938 b6f1 EB36 jmp .L190
+ 12939 .L191:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 12940 .loc 2 742 0
+
GAS LISTING /tmp/ccjbMjHD.s page 400
+
+
+ 12941 b6f3 8B8DFCEA movl -5380(%rbp), %ecx
+ 12941 FFFF
+ 12942 b6f9 8B85FCEA movl -5380(%rbp), %eax
+ 12942 FFFF
+ 12943 b6ff 89C0 mov %eax, %eax
+ 12944 b701 0FB68405 movzbl -9568(%rbp,%rax), %eax
+ 12944 A0DAFFFF
+ 12945 b709 0FB6C0 movzbl %al, %eax
+ 12946 b70c 89C2 mov %eax, %edx
+ 12947 b70e 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 12947 000000
+ 12948 b715 0FB61402 movzbl (%rdx,%rax), %edx
+ 12949 b719 89C8 mov %ecx, %eax
+ 12950 b71b 889405A0 movb %dl, -9568(%rbp,%rax)
+ 12950 DAFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 12951 .loc 2 741 0
+ 12952 b722 8385FCEA addl $1, -5380(%rbp)
+ 12952 FFFF01
+ 12953 .L190:
+ 12954 b729 83BDFCEA cmpl $3, -5380(%rbp)
+ 12954 FFFF03
+ 12955 b730 76C1 jbe .L191
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 12956 .loc 2 743 0
+ 12957 b732 8B85A0DA movl -9568(%rbp), %eax
+ 12957 FFFF
+ 12958 .LBE3457:
+ 12959 .LBE3456:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 12960 .loc 2 1657 0
+ 12961 b738 8985F4EA movl %eax, -5388(%rbp)
+ 12961 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 12962 .loc 2 1659 0
+ 12963 b73e 8B85F4EA movl -5388(%rbp), %eax
+ 12963 FFFF
+ 12964 b744 8985BCDA movl %eax, -9540(%rbp)
+ 12964 FFFF
+ 12965 b74a 8B85BCDA movl -9540(%rbp), %eax
+ 12965 FFFF
+ 12966 b750 8985B8DA movl %eax, -9544(%rbp)
+ 12966 FFFF
+ 12967 b756 8B85B8DA movl -9544(%rbp), %eax
+ 12967 FFFF
+ 12968 b75c 8985B4DA movl %eax, -9548(%rbp)
+ 12968 FFFF
+ 12969 b762 8B85B4DA movl -9548(%rbp), %eax
+ 12969 FFFF
+ 12970 b768 8985B0DA movl %eax, -9552(%rbp)
+ 12970 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 12971 .loc 2 1660 0
+ 12972 b76e F30F6F85 movdqu -9552(%rbp), %xmm0
+ 12972 B0DAFFFF
+ 12973 .LBE3455:
+ 12974 .LBE3454:
+
GAS LISTING /tmp/ccjbMjHD.s page 401
+
+
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(7); /* k28 : k29 : k30 : k31 */
+ 12975 .loc 2 1931 0
+ 12976 b776 F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 12976 40DCFFFF
+ 12977 b77e F30F6F85 movdqu -9168(%rbp), %xmm0
+ 12977 30DCFFFF
+ 12978 b786 F30F7F85 movdqu %xmm0, -5376(%rbp)
+ 12978 00EBFFFF
+ 12979 .LBB3458:
+ 12980 .LBB3459:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 12981 .loc 2 1565 0
+ 12982 b78e F30F6F85 movdqu -5376(%rbp), %xmm0
+ 12982 00EBFFFF
+ 12983 b796 660F7F85 movdqa %xmm0, -10096(%rbp)
+ 12983 90D8FFFF
+ 12984 b79e 660F6F85 movdqa -10096(%rbp), %xmm0
+ 12984 90D8FFFF
+ 12985 b7a6 F30F7F85 movdqu %xmm0, -5360(%rbp)
+ 12985 10EBFFFF
+ 12986 .LBB3460:
+ 12987 .LBB3461:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12988 .loc 2 1278 0
+ 12989 b7ae 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 12989 00000000
+ 12990 b7b6 F30F6F8D movdqu -5360(%rbp), %xmm1
+ 12990 10EBFFFF
+ 12991 b7be F30F7F8D movdqu %xmm1, -5328(%rbp)
+ 12991 30EBFFFF
+ 12992 b7c6 F30F7F85 movdqu %xmm0, -5344(%rbp)
+ 12992 20EBFFFF
+ 12993 b7ce F30F6F85 movdqu -5328(%rbp), %xmm0
+ 12993 30EBFFFF
+ 12994 b7d6 F30F7F85 movdqu %xmm0, -5296(%rbp)
+ 12994 50EBFFFF
+ 12995 b7de F30F6F85 movdqu -5344(%rbp), %xmm0
+ 12995 20EBFFFF
+ 12996 b7e6 F30F7F85 movdqu %xmm0, -5312(%rbp)
+ 12996 40EBFFFF
+ 12997 .LBB3462:
+ 12998 .LBB3463:
+ 12999 .LBB3464:
+ 13000 .LBB3465:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13001 .loc 3 529 0
+ 13002 b7ee F30F6F8D movdqu -5312(%rbp), %xmm1
+ 13002 40EBFFFF
+ 13003 b7f6 F30F6F85 movdqu -5296(%rbp), %xmm0
+ 13003 50EBFFFF
+ 13004 b7fe 660F3800 pshufb %xmm1, %xmm0
+ 13004 C1
+ 13005 .LBE3465:
+ 13006 .LBE3464:
+ 13007 .LBE3463:
+ 13008 .LBE3462:
+ 13009 .LBE3461:
+
GAS LISTING /tmp/ccjbMjHD.s page 402
+
+
+ 13010 .LBE3460:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13011 .loc 2 1567 0
+ 13012 b803 660F7F85 movdqa %xmm0, -10096(%rbp)
+ 13012 90D8FFFF
+ 13013 b80b 660F6F85 movdqa -10096(%rbp), %xmm0
+ 13013 90D8FFFF
+ 13014 b813 660FEF85 pxor -5376(%rbp), %xmm0
+ 13014 00EBFFFF
+ 13015 b81b F30F7F85 movdqu %xmm0, -5376(%rbp)
+ 13015 00EBFFFF
+ 13016 b823 660F6F85 movdqa -10096(%rbp), %xmm0
+ 13016 90D8FFFF
+ 13017 b82b F30F7F85 movdqu %xmm0, -5280(%rbp)
+ 13017 60EBFFFF
+ 13018 .LBB3466:
+ 13019 .LBB3467:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13020 .loc 2 1278 0
+ 13021 b833 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 13021 00000000
+ 13022 b83b F30F6F8D movdqu -5280(%rbp), %xmm1
+ 13022 60EBFFFF
+ 13023 b843 F30F7F8D movdqu %xmm1, -5248(%rbp)
+ 13023 80EBFFFF
+ 13024 b84b F30F7F85 movdqu %xmm0, -5264(%rbp)
+ 13024 70EBFFFF
+ 13025 b853 F30F6F85 movdqu -5248(%rbp), %xmm0
+ 13025 80EBFFFF
+ 13026 b85b F30F7F85 movdqu %xmm0, -5216(%rbp)
+ 13026 A0EBFFFF
+ 13027 b863 F30F6F85 movdqu -5264(%rbp), %xmm0
+ 13027 70EBFFFF
+ 13028 b86b F30F7F85 movdqu %xmm0, -5232(%rbp)
+ 13028 90EBFFFF
+ 13029 .LBB3468:
+ 13030 .LBB3469:
+ 13031 .LBB3470:
+ 13032 .LBB3471:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13033 .loc 3 529 0
+ 13034 b873 F30F6F8D movdqu -5232(%rbp), %xmm1
+ 13034 90EBFFFF
+ 13035 b87b F30F6F85 movdqu -5216(%rbp), %xmm0
+ 13035 A0EBFFFF
+ 13036 b883 660F3800 pshufb %xmm1, %xmm0
+ 13036 C1
+ 13037 .LBE3471:
+ 13038 .LBE3470:
+ 13039 .LBE3469:
+ 13040 .LBE3468:
+ 13041 .LBE3467:
+ 13042 .LBE3466:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13043 .loc 2 1568 0
+ 13044 b888 660F7F85 movdqa %xmm0, -10096(%rbp)
+ 13044 90D8FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 403
+
+
+ 13045 b890 660F6F85 movdqa -10096(%rbp), %xmm0
+ 13045 90D8FFFF
+ 13046 b898 660FEF85 pxor -5376(%rbp), %xmm0
+ 13046 00EBFFFF
+ 13047 b8a0 F30F7F85 movdqu %xmm0, -5376(%rbp)
+ 13047 00EBFFFF
+ 13048 b8a8 660F6F85 movdqa -10096(%rbp), %xmm0
+ 13048 90D8FFFF
+ 13049 b8b0 F30F7F85 movdqu %xmm0, -5200(%rbp)
+ 13049 B0EBFFFF
+ 13050 .LBB3472:
+ 13051 .LBB3473:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13052 .loc 2 1278 0
+ 13053 b8b8 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 13053 00000000
+ 13054 b8c0 F30F6F8D movdqu -5200(%rbp), %xmm1
+ 13054 B0EBFFFF
+ 13055 b8c8 F30F7F8D movdqu %xmm1, -5168(%rbp)
+ 13055 D0EBFFFF
+ 13056 b8d0 F30F7F85 movdqu %xmm0, -5184(%rbp)
+ 13056 C0EBFFFF
+ 13057 b8d8 F30F6F85 movdqu -5168(%rbp), %xmm0
+ 13057 D0EBFFFF
+ 13058 b8e0 F30F7F85 movdqu %xmm0, -5136(%rbp)
+ 13058 F0EBFFFF
+ 13059 b8e8 F30F6F85 movdqu -5184(%rbp), %xmm0
+ 13059 C0EBFFFF
+ 13060 b8f0 F30F7F85 movdqu %xmm0, -5152(%rbp)
+ 13060 E0EBFFFF
+ 13061 .LBB3474:
+ 13062 .LBB3475:
+ 13063 .LBB3476:
+ 13064 .LBB3477:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13065 .loc 3 529 0
+ 13066 b8f8 F30F6F8D movdqu -5152(%rbp), %xmm1
+ 13066 E0EBFFFF
+ 13067 b900 F30F6F85 movdqu -5136(%rbp), %xmm0
+ 13067 F0EBFFFF
+ 13068 b908 660F3800 pshufb %xmm1, %xmm0
+ 13068 C1
+ 13069 .LBE3477:
+ 13070 .LBE3476:
+ 13071 .LBE3475:
+ 13072 .LBE3474:
+ 13073 .LBE3473:
+ 13074 .LBE3472:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13075 .loc 2 1569 0
+ 13076 b90d 660F7F85 movdqa %xmm0, -10096(%rbp)
+ 13076 90D8FFFF
+ 13077 b915 660F6F85 movdqa -10096(%rbp), %xmm0
+ 13077 90D8FFFF
+ 13078 b91d 660FEF85 pxor -5376(%rbp), %xmm0
+ 13078 00EBFFFF
+ 13079 b925 F30F7F85 movdqu %xmm0, -5376(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 404
+
+
+ 13079 00EBFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13080 .loc 2 1571 0
+ 13081 b92d F30F6F85 movdqu -5376(%rbp), %xmm0
+ 13081 00EBFFFF
+ 13082 .LBE3459:
+ 13083 .LBE3458:
+ 13084 .loc 2 1931 0
+ 13085 b935 F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 13085 30DCFFFF
+ 13086 b93d F30F6F85 movdqu -9168(%rbp), %xmm0
+ 13086 30DCFFFF
+ 13087 b945 F30F7F85 movdqu %xmm0, -5104(%rbp)
+ 13087 10ECFFFF
+ 13088 b94d F30F6F85 movdqu -9152(%rbp), %xmm0
+ 13088 40DCFFFF
+ 13089 b955 F30F7F85 movdqu %xmm0, -5120(%rbp)
+ 13089 00ECFFFF
+ 13090 .LBB3478:
+ 13091 .LBB3479:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 13092 .loc 2 178 0
+ 13093 b95d F30F6F85 movdqu -5120(%rbp), %xmm0
+ 13093 00ECFFFF
+ 13094 b965 F30F6F8D movdqu -5104(%rbp), %xmm1
+ 13094 10ECFFFF
+ 13095 b96d 660FEFC1 pxor %xmm1, %xmm0
+ 13096 .LBE3479:
+ 13097 .LBE3478:
+ 13098 .loc 2 1931 0
+ 13099 b971 F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 13099 30DCFFFF
+ 13100 b979 488B8598 movq -9832(%rbp), %rax
+ 13100 D9FFFF
+ 13101 b980 4883C070 addq $112, %rax
+ 13102 b984 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 13102 30DCFFFF
+ 13103 b98c F30F7F00 movdqu %xmm0, (%rax)
+ 13104 b990 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 13104 30DCFFFF
+ 13105 b998 F30F7F85 movdqu %xmm0, -5072(%rbp)
+ 13105 30ECFFFF
+ 13106 .LBB3480:
+ 13107 .LBB3481:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13108 .loc 2 1681 0
+ 13109 b9a0 B8080000 movl $8, %eax
+ 13109 00
+ 13110 b9a5 660F6F05 movdqa vec_00(%rip), %xmm0
+ 13110 00000000
+ 13111 b9ad F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 13111 50ECFFFF
+ 13112 b9b5 89854CEC movl %eax, -5044(%rbp)
+ 13112 FFFF
+ 13113 b9bb F30F6F85 movdqu -5040(%rbp), %xmm0
+ 13113 50ECFFFF
+ 13114 b9c3 F30F7F85 movdqu %xmm0, -5008(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 405
+
+
+ 13114 70ECFFFF
+ 13115 b9cb 8B854CEC movl -5044(%rbp), %eax
+ 13115 FFFF
+ 13116 b9d1 89856CEC movl %eax, -5012(%rbp)
+ 13116 FFFF
+ 13117 .LBB3482:
+ 13118 .LBB3483:
+ 13119 .LBB3484:
+ 13120 .LBB3485:
+ 13121 .loc 3 598 0
+ 13122 b9d7 8B856CEC movl -5012(%rbp), %eax
+ 13122 FFFF
+ 13123 b9dd F30F6F85 movdqu -5008(%rbp), %xmm0
+ 13123 70ECFFFF
+ 13124 b9e5 660F3A22 pinsrd $3, %eax, %xmm0
+ 13124 C003
+ 13125 .LBE3485:
+ 13126 .LBE3484:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 13127 .loc 2 519 0
+ 13128 b9eb F30F7F85 movdqu %xmm0, -5040(%rbp)
+ 13128 50ECFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13129 .loc 2 526 0
+ 13130 b9f3 F30F6F85 movdqu -5040(%rbp), %xmm0
+ 13130 50ECFFFF
+ 13131 .LBE3483:
+ 13132 .LBE3482:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13133 .loc 2 1681 0
+ 13134 b9fb 660F7F85 movdqa %xmm0, -10064(%rbp)
+ 13134 B0D8FFFF
+ 13135 ba03 F30F6F85 movdqu -5072(%rbp), %xmm0
+ 13135 30ECFFFF
+ 13136 ba0b F30F7F85 movdqu %xmm0, -4992(%rbp)
+ 13136 80ECFFFF
+ 13137 ba13 F30F6F85 movdqu -4992(%rbp), %xmm0
+ 13137 80ECFFFF
+ 13138 ba1b F30F7F85 movdqu %xmm0, -4960(%rbp)
+ 13138 A0ECFFFF
+ 13139 ba23 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 13139 000000
+ 13140 ba2a 48898598 movq %rax, -4968(%rbp)
+ 13140 ECFFFF
+ 13141 .LBB3486:
+ 13142 .LBB3487:
+ 13143 .LBB3488:
+ 13144 .LBB3489:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 13145 .loc 2 851 0
+ 13146 ba31 660F6F05 movdqa vec_00(%rip), %xmm0
+ 13146 00000000
+ 13147 ba39 F30F7F85 movdqu %xmm0, -4928(%rbp)
+ 13147 C0ECFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13148 .loc 2 854 0
+ 13149 ba41 660F6F05 movdqa vec_0F(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 406
+
+
+ 13149 00000000
+ 13150 ba49 F30F6F8D movdqu -4960(%rbp), %xmm1
+ 13150 A0ECFFFF
+ 13151 ba51 F30F7F8D movdqu %xmm1, -4848(%rbp)
+ 13151 10EDFFFF
+ 13152 ba59 F30F7F85 movdqu %xmm0, -4864(%rbp)
+ 13152 00EDFFFF
+ 13153 .LBB3490:
+ 13154 .LBB3491:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 13155 .loc 2 206 0
+ 13156 ba61 F30F6F85 movdqu -4864(%rbp), %xmm0
+ 13156 00EDFFFF
+ 13157 ba69 F30F6F8D movdqu -4848(%rbp), %xmm1
+ 13157 10EDFFFF
+ 13158 ba71 660FDBC1 pand %xmm1, %xmm0
+ 13159 .LBE3491:
+ 13160 .LBE3490:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13161 .loc 2 854 0
+ 13162 ba75 F30F7F85 movdqu %xmm0, -4880(%rbp)
+ 13162 F0ECFFFF
+ 13163 ba7d F30F6F85 movdqu -4960(%rbp), %xmm0
+ 13163 A0ECFFFF
+ 13164 ba85 F30F7F85 movdqu %xmm0, -4816(%rbp)
+ 13164 30EDFFFF
+ 13165 .LBB3492:
+ 13166 .LBB3493:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 13167 .loc 3 433 0
+ 13168 ba8d F30F6F85 movdqu -4816(%rbp), %xmm0
+ 13168 30EDFFFF
+ 13169 ba95 660F72D0 psrld $4, %xmm0
+ 13169 04
+ 13170 .LBE3493:
+ 13171 .LBE3492:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 13172 .loc 2 857 0
+ 13173 ba9a F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 13173 E0ECFFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13174 .loc 2 859 0
+ 13175 baa2 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 13175 00000000
+ 13176 baaa F30F6F8D movdqu -4896(%rbp), %xmm1
+ 13176 E0ECFFFF
+ 13177 bab2 F30F7F8D movdqu %xmm1, -4784(%rbp)
+ 13177 50EDFFFF
+ 13178 baba F30F7F85 movdqu %xmm0, -4800(%rbp)
+ 13178 40EDFFFF
+ 13179 .LBB3494:
+ 13180 .LBB3495:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 13181 .loc 2 206 0
+ 13182 bac2 F30F6F85 movdqu -4800(%rbp), %xmm0
+ 13182 40EDFFFF
+ 13183 baca F30F6F8D movdqu -4784(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 407
+
+
+ 13183 50EDFFFF
+ 13184 bad2 660FDBC1 pand %xmm1, %xmm0
+ 13185 .LBE3495:
+ 13186 .LBE3494:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13187 .loc 2 859 0
+ 13188 bad6 F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 13188 E0ECFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 13189 .loc 2 866 0
+ 13190 bade C785BCEC movl $0, -4932(%rbp)
+ 13190 FFFF0000
+ 13190 0000
+ 13191 bae8 E9BE0100 jmp .L192
+ 13191 00
+ 13192 .L193:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13193 .loc 2 868 0
+ 13194 baed 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 13194 00000000
+ 13195 baf5 F30F7F85 movdqu %xmm0, -4752(%rbp)
+ 13195 70EDFFFF
+ 13196 bafd F30F6F85 movdqu -4896(%rbp), %xmm0
+ 13196 E0ECFFFF
+ 13197 bb05 F30F7F85 movdqu %xmm0, -4768(%rbp)
+ 13197 60EDFFFF
+ 13198 bb0d F30F6F85 movdqu -4752(%rbp), %xmm0
+ 13198 70EDFFFF
+ 13199 bb15 F30F7F85 movdqu %xmm0, -4720(%rbp)
+ 13199 90EDFFFF
+ 13200 bb1d F30F6F85 movdqu -4768(%rbp), %xmm0
+ 13200 60EDFFFF
+ 13201 bb25 F30F7F85 movdqu %xmm0, -4736(%rbp)
+ 13201 80EDFFFF
+ 13202 .LBB3496:
+ 13203 .LBB3497:
+ 13204 .LBB3498:
+ 13205 .LBB3499:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13206 .loc 3 529 0
+ 13207 bb2d F30F6F8D movdqu -4736(%rbp), %xmm1
+ 13207 80EDFFFF
+ 13208 bb35 F30F6F85 movdqu -4720(%rbp), %xmm0
+ 13208 90EDFFFF
+ 13209 bb3d 660F3800 pshufb %xmm1, %xmm0
+ 13209 C1
+ 13210 .LBE3499:
+ 13211 .LBE3498:
+ 13212 .LBE3497:
+ 13213 .LBE3496:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13214 .loc 2 868 0
+ 13215 bb42 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 13215 D0ECFFFF
+ 13216 bb4a F30F6F85 movdqu -4880(%rbp), %xmm0
+ 13216 F0ECFFFF
+ 13217 bb52 F30F7F85 movdqu %xmm0, -4688(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 408
+
+
+ 13217 B0EDFFFF
+ 13218 bb5a F30F6F85 movdqu -4912(%rbp), %xmm0
+ 13218 D0ECFFFF
+ 13219 bb62 F30F7F85 movdqu %xmm0, -4704(%rbp)
+ 13219 A0EDFFFF
+ 13220 .LBB3500:
+ 13221 .LBB3501:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 13222 .loc 2 234 0
+ 13223 bb6a F30F6F85 movdqu -4704(%rbp), %xmm0
+ 13223 A0EDFFFF
+ 13224 bb72 F30F6F8D movdqu -4688(%rbp), %xmm1
+ 13224 B0EDFFFF
+ 13225 bb7a 660FEBC1 por %xmm1, %xmm0
+ 13226 .LBE3501:
+ 13227 .LBE3500:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 13228 .loc 2 870 0
+ 13229 bb7e F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 13229 D0ECFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13230 .loc 2 872 0
+ 13231 bb86 8B85BCEC mov -4932(%rbp), %eax
+ 13231 FFFF
+ 13232 bb8c 48C1E004 salq $4, %rax
+ 13233 bb90 48038598 addq -4968(%rbp), %rax
+ 13233 ECFFFF
+ 13234 bb97 660F6F00 movdqa (%rax), %xmm0
+ 13235 bb9b F30F7F85 movdqu %xmm0, -4656(%rbp)
+ 13235 D0EDFFFF
+ 13236 bba3 F30F6F85 movdqu -4912(%rbp), %xmm0
+ 13236 D0ECFFFF
+ 13237 bbab F30F7F85 movdqu %xmm0, -4672(%rbp)
+ 13237 C0EDFFFF
+ 13238 bbb3 F30F6F85 movdqu -4656(%rbp), %xmm0
+ 13238 D0EDFFFF
+ 13239 bbbb F30F7F85 movdqu %xmm0, -4624(%rbp)
+ 13239 F0EDFFFF
+ 13240 bbc3 F30F6F85 movdqu -4672(%rbp), %xmm0
+ 13240 C0EDFFFF
+ 13241 bbcb F30F7F85 movdqu %xmm0, -4640(%rbp)
+ 13241 E0EDFFFF
+ 13242 .LBB3502:
+ 13243 .LBB3503:
+ 13244 .LBB3504:
+ 13245 .LBB3505:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13246 .loc 3 529 0
+ 13247 bbd3 F30F6F8D movdqu -4640(%rbp), %xmm1
+ 13247 E0EDFFFF
+ 13248 bbdb F30F6F85 movdqu -4624(%rbp), %xmm0
+ 13248 F0EDFFFF
+ 13249 bbe3 660F3800 pshufb %xmm1, %xmm0
+ 13249 C1
+ 13250 .LBE3505:
+ 13251 .LBE3504:
+ 13252 .LBE3503:
+
GAS LISTING /tmp/ccjbMjHD.s page 409
+
+
+ 13253 .LBE3502:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13254 .loc 2 872 0
+ 13255 bbe8 F30F7F85 movdqu %xmm0, -4912(%rbp)
+ 13255 D0ECFFFF
+ 13256 bbf0 F30F6F85 movdqu -4928(%rbp), %xmm0
+ 13256 C0ECFFFF
+ 13257 bbf8 F30F7F85 movdqu %xmm0, -4592(%rbp)
+ 13257 10EEFFFF
+ 13258 bc00 F30F6F85 movdqu -4912(%rbp), %xmm0
+ 13258 D0ECFFFF
+ 13259 bc08 F30F7F85 movdqu %xmm0, -4608(%rbp)
+ 13259 00EEFFFF
+ 13260 .LBB3506:
+ 13261 .LBB3507:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 13262 .loc 2 234 0
+ 13263 bc10 F30F6F85 movdqu -4608(%rbp), %xmm0
+ 13263 00EEFFFF
+ 13264 bc18 F30F6F8D movdqu -4592(%rbp), %xmm1
+ 13264 10EEFFFF
+ 13265 bc20 660FEBC1 por %xmm1, %xmm0
+ 13266 .LBE3507:
+ 13267 .LBE3506:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 13268 .loc 2 874 0
+ 13269 bc24 F30F7F85 movdqu %xmm0, -4928(%rbp)
+ 13269 C0ECFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 13270 .loc 2 876 0
+ 13271 bc2c 660F6F05 movdqa vec_01(%rip), %xmm0
+ 13271 00000000
+ 13272 bc34 F30F6F8D movdqu -4896(%rbp), %xmm1
+ 13272 E0ECFFFF
+ 13273 bc3c F30F7F8D movdqu %xmm1, -4560(%rbp)
+ 13273 30EEFFFF
+ 13274 bc44 F30F7F85 movdqu %xmm0, -4576(%rbp)
+ 13274 20EEFFFF
+ 13275 .LBB3508:
+ 13276 .LBB3509:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 13277 .loc 2 290 0
+ 13278 bc4c F30F6F8D movdqu -4576(%rbp), %xmm1
+ 13278 20EEFFFF
+ 13279 bc54 F30F6F85 movdqu -4560(%rbp), %xmm0
+ 13279 30EEFFFF
+ 13280 bc5c 660FF8C1 psubb %xmm1, %xmm0
+ 13281 .LBE3509:
+ 13282 .LBE3508:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 13283 .loc 2 876 0
+ 13284 bc60 F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 13284 E0ECFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13285 .loc 2 878 0
+ 13286 bc68 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 13286 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 410
+
+
+ 13287 bc70 F30F6F8D movdqu -4896(%rbp), %xmm1
+ 13287 E0ECFFFF
+ 13288 bc78 F30F7F8D movdqu %xmm1, -4528(%rbp)
+ 13288 50EEFFFF
+ 13289 bc80 F30F7F85 movdqu %xmm0, -4544(%rbp)
+ 13289 40EEFFFF
+ 13290 .LBB3510:
+ 13291 .LBB3511:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 13292 .loc 2 206 0
+ 13293 bc88 F30F6F85 movdqu -4544(%rbp), %xmm0
+ 13293 40EEFFFF
+ 13294 bc90 F30F6F8D movdqu -4528(%rbp), %xmm1
+ 13294 50EEFFFF
+ 13295 bc98 660FDBC1 pand %xmm1, %xmm0
+ 13296 .LBE3511:
+ 13297 .LBE3510:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13298 .loc 2 878 0
+ 13299 bc9c F30F7F85 movdqu %xmm0, -4896(%rbp)
+ 13299 E0ECFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 13300 .loc 2 866 0
+ 13301 bca4 8385BCEC addl $1, -4932(%rbp)
+ 13301 FFFF01
+ 13302 .L192:
+ 13303 bcab 83BDBCEC cmpl $15, -4932(%rbp)
+ 13303 FFFF0F
+ 13304 bcb2 0F8635FE jbe .L193
+ 13304 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 13305 .loc 2 882 0
+ 13306 bcb8 F30F6F85 movdqu -4928(%rbp), %xmm0
+ 13306 C0ECFFFF
+ 13307 .LBE3489:
+ 13308 .LBE3488:
+ 13309 .LBE3487:
+ 13310 .LBE3486:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 13311 .loc 2 1682 0
+ 13312 bcc0 660F7F85 movdqa %xmm0, -10080(%rbp)
+ 13312 A0D8FFFF
+ 13313 .LBB3512:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 13314 .loc 2 1683 0
+ 13315 bcc8 660F6F85 movdqa -10080(%rbp), %xmm0
+ 13315 A0D8FFFF
+ 13316 bcd0 F30F7F85 movdqu %xmm0, -9488(%rbp)
+ 13316 F0DAFFFF
+ 13317 bcd8 E8000000 call KDbgWriterGet at PLT
+ 13317 00
+ 13318 bcdd 4885C0 testq %rax, %rax
+ 13319 bce0 7479 je .L195
+ 13320 bce2 BF010000 movl $1, %edi
+ 13320 00
+ 13321 bce7 E8000000 call KDbgCondToFlag at PLT
+ 13321 00
+
GAS LISTING /tmp/ccjbMjHD.s page 411
+
+
+ 13322 bcec 4889C6 movq %rax, %rsi
+ 13323 bcef BF100000 movl $16, %edi
+ 13323 00
+ 13324 bcf4 E8000000 call KDbgTestModConds at PLT
+ 13324 00
+ 13325 bcf9 84C0 testb %al, %al
+ 13326 bcfb 745E je .L195
+ 13327 bcfd 8B85FCDA movl -9476(%rbp), %eax
+ 13327 FFFF
+ 13328 bd03 89C7 movl %eax, %edi
+ 13329 bd05 E8F642FF call bswap_32
+ 13329 FF
+ 13330 bd0a 4189C5 movl %eax, %r13d
+ 13331 bd0d 8B85F8DA movl -9480(%rbp), %eax
+ 13331 FFFF
+ 13332 bd13 89C7 movl %eax, %edi
+ 13333 bd15 E8E642FF call bswap_32
+ 13333 FF
+ 13334 bd1a 4189C4 movl %eax, %r12d
+ 13335 bd1d 8B85F4DA movl -9484(%rbp), %eax
+ 13335 FFFF
+ 13336 bd23 89C7 movl %eax, %edi
+ 13337 bd25 E8D642FF call bswap_32
+ 13337 FF
+ 13338 bd2a 89C3 movl %eax, %ebx
+ 13339 bd2c 8B85F0DA movl -9488(%rbp), %eax
+ 13339 FFFF
+ 13340 bd32 89C7 movl %eax, %edi
+ 13341 bd34 E8C742FF call bswap_32
+ 13341 FF
+ 13342 bd39 4589E9 movl %r13d, %r9d
+ 13343 bd3c 4589E0 movl %r12d, %r8d
+ 13344 bd3f 89D9 movl %ebx, %ecx
+ 13345 bd41 89C2 movl %eax, %edx
+ 13346 bd43 488D3500 leaq .LC0(%rip), %rsi
+ 13346 000000
+ 13347 bd4a 488D3D00 leaq .LC1(%rip), %rdi
+ 13347 000000
+ 13348 bd51 B8000000 movl $0, %eax
+ 13348 00
+ 13349 bd56 E8000000 call KDbgMsg at PLT
+ 13349 00
+ 13350 .L195:
+ 13351 bd5b 660F6F85 movdqa -10080(%rbp), %xmm0
+ 13351 A0D8FFFF
+ 13352 bd63 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 13352 60EEFFFF
+ 13353 .LBE3512:
+ 13354 .LBB3513:
+ 13355 .LBB3514:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 13356 .loc 2 667 0
+ 13357 bd6b 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 13357 00000000
+ 13358 bd73 F30F6F8D movdqu -4512(%rbp), %xmm1
+ 13358 60EEFFFF
+ 13359 bd7b F30F7F8D movdqu %xmm1, -4480(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 412
+
+
+ 13359 80EEFFFF
+ 13360 bd83 F30F7F85 movdqu %xmm0, -4496(%rbp)
+ 13360 70EEFFFF
+ 13361 bd8b F30F6F85 movdqu -4480(%rbp), %xmm0
+ 13361 80EEFFFF
+ 13362 bd93 F30F7F85 movdqu %xmm0, -4448(%rbp)
+ 13362 A0EEFFFF
+ 13363 bd9b F30F6F85 movdqu -4496(%rbp), %xmm0
+ 13363 70EEFFFF
+ 13364 bda3 F30F7F85 movdqu %xmm0, -4464(%rbp)
+ 13364 90EEFFFF
+ 13365 .LBB3515:
+ 13366 .LBB3516:
+ 13367 .LBB3517:
+ 13368 .LBB3518:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13369 .loc 3 529 0
+ 13370 bdab F30F6F8D movdqu -4464(%rbp), %xmm1
+ 13370 90EEFFFF
+ 13371 bdb3 F30F6F85 movdqu -4448(%rbp), %xmm0
+ 13371 A0EEFFFF
+ 13372 bdbb 660F3800 pshufb %xmm1, %xmm0
+ 13372 C1
+ 13373 .LBE3518:
+ 13374 .LBE3517:
+ 13375 .LBE3516:
+ 13376 .LBE3515:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 13377 .loc 2 667 0
+ 13378 bdc0 F30F7F85 movdqu %xmm0, -4512(%rbp)
+ 13378 60EEFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13379 .loc 2 668 0
+ 13380 bdc8 F30F6F85 movdqu -4512(%rbp), %xmm0
+ 13380 60EEFFFF
+ 13381 .LBE3514:
+ 13382 .LBE3513:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 13383 .loc 2 1684 0
+ 13384 bdd0 660F7F85 movdqa %xmm0, -10080(%rbp)
+ 13384 A0D8FFFF
+ 13385 .LBB3519:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 13386 .loc 2 1685 0
+ 13387 bdd8 660F6F85 movdqa -10080(%rbp), %xmm0
+ 13387 A0D8FFFF
+ 13388 bde0 F30F7F85 movdqu %xmm0, -9504(%rbp)
+ 13388 E0DAFFFF
+ 13389 bde8 E8000000 call KDbgWriterGet at PLT
+ 13389 00
+ 13390 bded 4885C0 testq %rax, %rax
+ 13391 bdf0 7479 je .L197
+ 13392 bdf2 BF010000 movl $1, %edi
+ 13392 00
+ 13393 bdf7 E8000000 call KDbgCondToFlag at PLT
+ 13393 00
+ 13394 bdfc 4889C6 movq %rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s page 413
+
+
+ 13395 bdff BF100000 movl $16, %edi
+ 13395 00
+ 13396 be04 E8000000 call KDbgTestModConds at PLT
+ 13396 00
+ 13397 be09 84C0 testb %al, %al
+ 13398 be0b 745E je .L197
+ 13399 be0d 8B85ECDA movl -9492(%rbp), %eax
+ 13399 FFFF
+ 13400 be13 89C7 movl %eax, %edi
+ 13401 be15 E8E641FF call bswap_32
+ 13401 FF
+ 13402 be1a 4189C5 movl %eax, %r13d
+ 13403 be1d 8B85E8DA movl -9496(%rbp), %eax
+ 13403 FFFF
+ 13404 be23 89C7 movl %eax, %edi
+ 13405 be25 E8D641FF call bswap_32
+ 13405 FF
+ 13406 be2a 4189C4 movl %eax, %r12d
+ 13407 be2d 8B85E4DA movl -9500(%rbp), %eax
+ 13407 FFFF
+ 13408 be33 89C7 movl %eax, %edi
+ 13409 be35 E8C641FF call bswap_32
+ 13409 FF
+ 13410 be3a 89C3 movl %eax, %ebx
+ 13411 be3c 8B85E0DA movl -9504(%rbp), %eax
+ 13411 FFFF
+ 13412 be42 89C7 movl %eax, %edi
+ 13413 be44 E8B741FF call bswap_32
+ 13413 FF
+ 13414 be49 4589E9 movl %r13d, %r9d
+ 13415 be4c 4589E0 movl %r12d, %r8d
+ 13416 be4f 89D9 movl %ebx, %ecx
+ 13417 be51 89C2 movl %eax, %edx
+ 13418 be53 488D3500 leaq .LC2(%rip), %rsi
+ 13418 000000
+ 13419 be5a 488D3D00 leaq .LC1(%rip), %rdi
+ 13419 000000
+ 13420 be61 B8000000 movl $0, %eax
+ 13420 00
+ 13421 be66 E8000000 call KDbgMsg at PLT
+ 13421 00
+ 13422 .L197:
+ 13423 be6b 660F6F85 movdqa -10080(%rbp), %xmm0
+ 13423 A0D8FFFF
+ 13424 be73 F30F7F85 movdqu %xmm0, -4416(%rbp)
+ 13424 C0EEFFFF
+ 13425 be7b 660F6F85 movdqa -10064(%rbp), %xmm0
+ 13425 B0D8FFFF
+ 13426 be83 F30F7F85 movdqu %xmm0, -4432(%rbp)
+ 13426 B0EEFFFF
+ 13427 .LBE3519:
+ 13428 .LBB3520:
+ 13429 .LBB3521:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 13430 .loc 2 178 0
+ 13431 be8b F30F6F85 movdqu -4432(%rbp), %xmm0
+ 13431 B0EEFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 414
+
+
+ 13432 be93 F30F6F8D movdqu -4416(%rbp), %xmm1
+ 13432 C0EEFFFF
+ 13433 be9b 660FEFC1 pxor %xmm1, %xmm0
+ 13434 .LBE3521:
+ 13435 .LBE3520:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 13436 .loc 2 1686 0
+ 13437 be9f 660F7F85 movdqa %xmm0, -10080(%rbp)
+ 13437 A0D8FFFF
+ 13438 .LBB3522:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 13439 .loc 2 1687 0
+ 13440 bea7 660F6F85 movdqa -10080(%rbp), %xmm0
+ 13440 A0D8FFFF
+ 13441 beaf F30F7F85 movdqu %xmm0, -9520(%rbp)
+ 13441 D0DAFFFF
+ 13442 beb7 E8000000 call KDbgWriterGet at PLT
+ 13442 00
+ 13443 bebc 4885C0 testq %rax, %rax
+ 13444 bebf 7479 je .L199
+ 13445 bec1 BF010000 movl $1, %edi
+ 13445 00
+ 13446 bec6 E8000000 call KDbgCondToFlag at PLT
+ 13446 00
+ 13447 becb 4889C6 movq %rax, %rsi
+ 13448 bece BF100000 movl $16, %edi
+ 13448 00
+ 13449 bed3 E8000000 call KDbgTestModConds at PLT
+ 13449 00
+ 13450 bed8 84C0 testb %al, %al
+ 13451 beda 745E je .L199
+ 13452 bedc 8B85DCDA movl -9508(%rbp), %eax
+ 13452 FFFF
+ 13453 bee2 89C7 movl %eax, %edi
+ 13454 bee4 E81741FF call bswap_32
+ 13454 FF
+ 13455 bee9 4189C5 movl %eax, %r13d
+ 13456 beec 8B85D8DA movl -9512(%rbp), %eax
+ 13456 FFFF
+ 13457 bef2 89C7 movl %eax, %edi
+ 13458 bef4 E80741FF call bswap_32
+ 13458 FF
+ 13459 bef9 4189C4 movl %eax, %r12d
+ 13460 befc 8B85D4DA movl -9516(%rbp), %eax
+ 13460 FFFF
+ 13461 bf02 89C7 movl %eax, %edi
+ 13462 bf04 E8F740FF call bswap_32
+ 13462 FF
+ 13463 bf09 89C3 movl %eax, %ebx
+ 13464 bf0b 8B85D0DA movl -9520(%rbp), %eax
+ 13464 FFFF
+ 13465 bf11 89C7 movl %eax, %edi
+ 13466 bf13 E8E840FF call bswap_32
+ 13466 FF
+ 13467 bf18 4589E9 movl %r13d, %r9d
+ 13468 bf1b 4589E0 movl %r12d, %r8d
+ 13469 bf1e 89D9 movl %ebx, %ecx
+
GAS LISTING /tmp/ccjbMjHD.s page 415
+
+
+ 13470 bf20 89C2 movl %eax, %edx
+ 13471 bf22 488D3500 leaq .LC3(%rip), %rsi
+ 13471 000000
+ 13472 bf29 488D3D00 leaq .LC1(%rip), %rdi
+ 13472 000000
+ 13473 bf30 B8000000 movl $0, %eax
+ 13473 00
+ 13474 bf35 E8000000 call KDbgMsg at PLT
+ 13474 00
+ 13475 .L199:
+ 13476 bf3a 660F6F85 movdqa -10080(%rbp), %xmm0
+ 13476 A0D8FFFF
+ 13477 bf42 F30F7F85 movdqu %xmm0, -4400(%rbp)
+ 13477 D0EEFFFF
+ 13478 bf4a F30F6F85 movdqu -4400(%rbp), %xmm0
+ 13478 D0EEFFFF
+ 13479 bf52 F30F7F85 movdqu %xmm0, -4368(%rbp)
+ 13479 F0EEFFFF
+ 13480 .LBE3522:
+ 13481 .LBB3523:
+ 13482 .LBB3524:
+ 13483 .LBB3525:
+ 13484 .LBB3526:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 13485 .loc 3 450 0
+ 13486 bf5a F30F6F85 movdqu -4368(%rbp), %xmm0
+ 13486 F0EEFFFF
+ 13487 bf62 660F70C0 pshufd $255, %xmm0, %xmm0
+ 13487 FF
+ 13488 .LBE3526:
+ 13489 .LBE3525:
+ 13490 .LBE3524:
+ 13491 .LBE3523:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 13492 .loc 2 1688 0
+ 13493 bf67 660F7F85 movdqa %xmm0, -10080(%rbp)
+ 13493 A0D8FFFF
+ 13494 .LBB3527:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 13495 .loc 2 1689 0
+ 13496 bf6f 660F6F85 movdqa -10080(%rbp), %xmm0
+ 13496 A0D8FFFF
+ 13497 bf77 F30F7F85 movdqu %xmm0, -9536(%rbp)
+ 13497 C0DAFFFF
+ 13498 bf7f E8000000 call KDbgWriterGet at PLT
+ 13498 00
+ 13499 bf84 4885C0 testq %rax, %rax
+ 13500 bf87 7479 je .L201
+ 13501 bf89 BF010000 movl $1, %edi
+ 13501 00
+ 13502 bf8e E8000000 call KDbgCondToFlag at PLT
+ 13502 00
+ 13503 bf93 4889C6 movq %rax, %rsi
+ 13504 bf96 BF100000 movl $16, %edi
+ 13504 00
+ 13505 bf9b E8000000 call KDbgTestModConds at PLT
+ 13505 00
+
GAS LISTING /tmp/ccjbMjHD.s page 416
+
+
+ 13506 bfa0 84C0 testb %al, %al
+ 13507 bfa2 745E je .L201
+ 13508 bfa4 8B85CCDA movl -9524(%rbp), %eax
+ 13508 FFFF
+ 13509 bfaa 89C7 movl %eax, %edi
+ 13510 bfac E84F40FF call bswap_32
+ 13510 FF
+ 13511 bfb1 4189C5 movl %eax, %r13d
+ 13512 bfb4 8B85C8DA movl -9528(%rbp), %eax
+ 13512 FFFF
+ 13513 bfba 89C7 movl %eax, %edi
+ 13514 bfbc E83F40FF call bswap_32
+ 13514 FF
+ 13515 bfc1 4189C4 movl %eax, %r12d
+ 13516 bfc4 8B85C4DA movl -9532(%rbp), %eax
+ 13516 FFFF
+ 13517 bfca 89C7 movl %eax, %edi
+ 13518 bfcc E82F40FF call bswap_32
+ 13518 FF
+ 13519 bfd1 89C3 movl %eax, %ebx
+ 13520 bfd3 8B85C0DA movl -9536(%rbp), %eax
+ 13520 FFFF
+ 13521 bfd9 89C7 movl %eax, %edi
+ 13522 bfdb E82040FF call bswap_32
+ 13522 FF
+ 13523 bfe0 4589E9 movl %r13d, %r9d
+ 13524 bfe3 4589E0 movl %r12d, %r8d
+ 13525 bfe6 89D9 movl %ebx, %ecx
+ 13526 bfe8 89C2 movl %eax, %edx
+ 13527 bfea 488D3500 leaq .LC4(%rip), %rsi
+ 13527 000000
+ 13528 bff1 488D3D00 leaq .LC1(%rip), %rdi
+ 13528 000000
+ 13529 bff8 B8000000 movl $0, %eax
+ 13529 00
+ 13530 bffd E8000000 call KDbgMsg at PLT
+ 13530 00
+ 13531 .L201:
+ 13532 .LBE3527:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 13533 .loc 2 1690 0
+ 13534 c002 660F6F85 movdqa -10080(%rbp), %xmm0
+ 13534 A0D8FFFF
+ 13535 .LBE3481:
+ 13536 .LBE3480:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(8,0x08); /* k32 : k33 : k34 : k35 */
+ 13537 .loc 2 1932 0
+ 13538 c00a F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 13538 40DCFFFF
+ 13539 c012 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 13539 20DCFFFF
+ 13540 c01a F30F7F85 movdqu %xmm0, -4352(%rbp)
+ 13540 00EFFFFF
+ 13541 .LBB3528:
+ 13542 .LBB3529:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 13543 .loc 2 1565 0
+
GAS LISTING /tmp/ccjbMjHD.s page 417
+
+
+ 13544 c022 F30F6F85 movdqu -4352(%rbp), %xmm0
+ 13544 00EFFFFF
+ 13545 c02a 660F7F85 movdqa %xmm0, -10048(%rbp)
+ 13545 C0D8FFFF
+ 13546 c032 660F6F85 movdqa -10048(%rbp), %xmm0
+ 13546 C0D8FFFF
+ 13547 c03a F30F7F85 movdqu %xmm0, -4336(%rbp)
+ 13547 10EFFFFF
+ 13548 .LBB3530:
+ 13549 .LBB3531:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13550 .loc 2 1278 0
+ 13551 c042 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 13551 00000000
+ 13552 c04a F30F6F8D movdqu -4336(%rbp), %xmm1
+ 13552 10EFFFFF
+ 13553 c052 F30F7F8D movdqu %xmm1, -4304(%rbp)
+ 13553 30EFFFFF
+ 13554 c05a F30F7F85 movdqu %xmm0, -4320(%rbp)
+ 13554 20EFFFFF
+ 13555 c062 F30F6F85 movdqu -4304(%rbp), %xmm0
+ 13555 30EFFFFF
+ 13556 c06a F30F7F85 movdqu %xmm0, -4272(%rbp)
+ 13556 50EFFFFF
+ 13557 c072 F30F6F85 movdqu -4320(%rbp), %xmm0
+ 13557 20EFFFFF
+ 13558 c07a F30F7F85 movdqu %xmm0, -4288(%rbp)
+ 13558 40EFFFFF
+ 13559 .LBB3532:
+ 13560 .LBB3533:
+ 13561 .LBB3534:
+ 13562 .LBB3535:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13563 .loc 3 529 0
+ 13564 c082 F30F6F8D movdqu -4288(%rbp), %xmm1
+ 13564 40EFFFFF
+ 13565 c08a F30F6F85 movdqu -4272(%rbp), %xmm0
+ 13565 50EFFFFF
+ 13566 c092 660F3800 pshufb %xmm1, %xmm0
+ 13566 C1
+ 13567 .LBE3535:
+ 13568 .LBE3534:
+ 13569 .LBE3533:
+ 13570 .LBE3532:
+ 13571 .LBE3531:
+ 13572 .LBE3530:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13573 .loc 2 1567 0
+ 13574 c097 660F7F85 movdqa %xmm0, -10048(%rbp)
+ 13574 C0D8FFFF
+ 13575 c09f 660F6F85 movdqa -10048(%rbp), %xmm0
+ 13575 C0D8FFFF
+ 13576 c0a7 660FEF85 pxor -4352(%rbp), %xmm0
+ 13576 00EFFFFF
+ 13577 c0af F30F7F85 movdqu %xmm0, -4352(%rbp)
+ 13577 00EFFFFF
+ 13578 c0b7 660F6F85 movdqa -10048(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 418
+
+
+ 13578 C0D8FFFF
+ 13579 c0bf F30F7F85 movdqu %xmm0, -4256(%rbp)
+ 13579 60EFFFFF
+ 13580 .LBB3536:
+ 13581 .LBB3537:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13582 .loc 2 1278 0
+ 13583 c0c7 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 13583 00000000
+ 13584 c0cf F30F6F8D movdqu -4256(%rbp), %xmm1
+ 13584 60EFFFFF
+ 13585 c0d7 F30F7F8D movdqu %xmm1, -4224(%rbp)
+ 13585 80EFFFFF
+ 13586 c0df F30F7F85 movdqu %xmm0, -4240(%rbp)
+ 13586 70EFFFFF
+ 13587 c0e7 F30F6F85 movdqu -4224(%rbp), %xmm0
+ 13587 80EFFFFF
+ 13588 c0ef F30F7F85 movdqu %xmm0, -4192(%rbp)
+ 13588 A0EFFFFF
+ 13589 c0f7 F30F6F85 movdqu -4240(%rbp), %xmm0
+ 13589 70EFFFFF
+ 13590 c0ff F30F7F85 movdqu %xmm0, -4208(%rbp)
+ 13590 90EFFFFF
+ 13591 .LBB3538:
+ 13592 .LBB3539:
+ 13593 .LBB3540:
+ 13594 .LBB3541:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13595 .loc 3 529 0
+ 13596 c107 F30F6F8D movdqu -4208(%rbp), %xmm1
+ 13596 90EFFFFF
+ 13597 c10f F30F6F85 movdqu -4192(%rbp), %xmm0
+ 13597 A0EFFFFF
+ 13598 c117 660F3800 pshufb %xmm1, %xmm0
+ 13598 C1
+ 13599 .LBE3541:
+ 13600 .LBE3540:
+ 13601 .LBE3539:
+ 13602 .LBE3538:
+ 13603 .LBE3537:
+ 13604 .LBE3536:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13605 .loc 2 1568 0
+ 13606 c11c 660F7F85 movdqa %xmm0, -10048(%rbp)
+ 13606 C0D8FFFF
+ 13607 c124 660F6F85 movdqa -10048(%rbp), %xmm0
+ 13607 C0D8FFFF
+ 13608 c12c 660FEF85 pxor -4352(%rbp), %xmm0
+ 13608 00EFFFFF
+ 13609 c134 F30F7F85 movdqu %xmm0, -4352(%rbp)
+ 13609 00EFFFFF
+ 13610 c13c 660F6F85 movdqa -10048(%rbp), %xmm0
+ 13610 C0D8FFFF
+ 13611 c144 F30F7F85 movdqu %xmm0, -4176(%rbp)
+ 13611 B0EFFFFF
+ 13612 .LBB3542:
+ 13613 .LBB3543:
+
GAS LISTING /tmp/ccjbMjHD.s page 419
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13614 .loc 2 1278 0
+ 13615 c14c 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 13615 00000000
+ 13616 c154 F30F6F8D movdqu -4176(%rbp), %xmm1
+ 13616 B0EFFFFF
+ 13617 c15c F30F7F8D movdqu %xmm1, -4144(%rbp)
+ 13617 D0EFFFFF
+ 13618 c164 F30F7F85 movdqu %xmm0, -4160(%rbp)
+ 13618 C0EFFFFF
+ 13619 c16c F30F6F85 movdqu -4144(%rbp), %xmm0
+ 13619 D0EFFFFF
+ 13620 c174 F30F7F85 movdqu %xmm0, -4112(%rbp)
+ 13620 F0EFFFFF
+ 13621 c17c F30F6F85 movdqu -4160(%rbp), %xmm0
+ 13621 C0EFFFFF
+ 13622 c184 F30F7F85 movdqu %xmm0, -4128(%rbp)
+ 13622 E0EFFFFF
+ 13623 .LBB3544:
+ 13624 .LBB3545:
+ 13625 .LBB3546:
+ 13626 .LBB3547:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13627 .loc 3 529 0
+ 13628 c18c F30F6F8D movdqu -4128(%rbp), %xmm1
+ 13628 E0EFFFFF
+ 13629 c194 F30F6F85 movdqu -4112(%rbp), %xmm0
+ 13629 F0EFFFFF
+ 13630 c19c 660F3800 pshufb %xmm1, %xmm0
+ 13630 C1
+ 13631 .LBE3547:
+ 13632 .LBE3546:
+ 13633 .LBE3545:
+ 13634 .LBE3544:
+ 13635 .LBE3543:
+ 13636 .LBE3542:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13637 .loc 2 1569 0
+ 13638 c1a1 660F7F85 movdqa %xmm0, -10048(%rbp)
+ 13638 C0D8FFFF
+ 13639 c1a9 660F6F85 movdqa -10048(%rbp), %xmm0
+ 13639 C0D8FFFF
+ 13640 c1b1 660FEF85 pxor -4352(%rbp), %xmm0
+ 13640 00EFFFFF
+ 13641 c1b9 F30F7F85 movdqu %xmm0, -4352(%rbp)
+ 13641 00EFFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13642 .loc 2 1571 0
+ 13643 c1c1 F30F6F85 movdqu -4352(%rbp), %xmm0
+ 13643 00EFFFFF
+ 13644 .LBE3529:
+ 13645 .LBE3528:
+ 13646 .loc 2 1932 0
+ 13647 c1c9 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 13647 20DCFFFF
+ 13648 c1d1 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 13648 20DCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 420
+
+
+ 13649 c1d9 F30F7F85 movdqu %xmm0, -4080(%rbp)
+ 13649 10F0FFFF
+ 13650 c1e1 F30F6F85 movdqu -9152(%rbp), %xmm0
+ 13650 40DCFFFF
+ 13651 c1e9 F30F7F85 movdqu %xmm0, -4096(%rbp)
+ 13651 00F0FFFF
+ 13652 .LBB3548:
+ 13653 .LBB3549:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 13654 .loc 2 178 0
+ 13655 c1f1 F30F6F85 movdqu -4096(%rbp), %xmm0
+ 13655 00F0FFFF
+ 13656 c1f9 F30F6F8D movdqu -4080(%rbp), %xmm1
+ 13656 10F0FFFF
+ 13657 c201 660FEFC1 pxor %xmm1, %xmm0
+ 13658 .LBE3549:
+ 13659 .LBE3548:
+ 13660 .loc 2 1932 0
+ 13661 c205 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 13661 20DCFFFF
+ 13662 c20d 488B8598 movq -9832(%rbp), %rax
+ 13662 D9FFFF
+ 13663 c214 4883E880 subq $-128, %rax
+ 13664 c218 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 13664 20DCFFFF
+ 13665 c220 F30F7F00 movdqu %xmm0, (%rax)
+ 13666 c224 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 13666 20DCFFFF
+ 13667 c22c F30F7F85 movdqu %xmm0, -4064(%rbp)
+ 13667 20F0FFFF
+ 13668 .LBB3550:
+ 13669 .LBB3551:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 13670 .loc 2 1656 0
+ 13671 c234 F30F6F85 movdqu -4064(%rbp), %xmm0
+ 13671 20F0FFFF
+ 13672 c23c F30F7F85 movdqu %xmm0, -9456(%rbp)
+ 13672 10DBFFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 13673 .loc 2 1657 0
+ 13674 c244 8B851CDB movl -9444(%rbp), %eax
+ 13674 FFFF
+ 13675 c24a 898538F0 movl %eax, -4040(%rbp)
+ 13675 FFFF
+ 13676 .LBB3552:
+ 13677 .LBB3553:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 13678 .loc 2 740 0
+ 13679 c250 8B8538F0 movl -4040(%rbp), %eax
+ 13679 FFFF
+ 13680 c256 898500DB movl %eax, -9472(%rbp)
+ 13680 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 13681 .loc 2 741 0
+ 13682 c25c C7853CF0 movl $0, -4036(%rbp)
+ 13682 FFFF0000
+ 13682 0000
+
GAS LISTING /tmp/ccjbMjHD.s page 421
+
+
+ 13683 c266 EB36 jmp .L202
+ 13684 .L203:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 13685 .loc 2 742 0
+ 13686 c268 8B8D3CF0 movl -4036(%rbp), %ecx
+ 13686 FFFF
+ 13687 c26e 8B853CF0 movl -4036(%rbp), %eax
+ 13687 FFFF
+ 13688 c274 89C0 mov %eax, %eax
+ 13689 c276 0FB68405 movzbl -9472(%rbp,%rax), %eax
+ 13689 00DBFFFF
+ 13690 c27e 0FB6C0 movzbl %al, %eax
+ 13691 c281 89C2 mov %eax, %edx
+ 13692 c283 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 13692 000000
+ 13693 c28a 0FB61402 movzbl (%rdx,%rax), %edx
+ 13694 c28e 89C8 mov %ecx, %eax
+ 13695 c290 88940500 movb %dl, -9472(%rbp,%rax)
+ 13695 DBFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 13696 .loc 2 741 0
+ 13697 c297 83853CF0 addl $1, -4036(%rbp)
+ 13697 FFFF01
+ 13698 .L202:
+ 13699 c29e 83BD3CF0 cmpl $3, -4036(%rbp)
+ 13699 FFFF03
+ 13700 c2a5 76C1 jbe .L203
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 13701 .loc 2 743 0
+ 13702 c2a7 8B8500DB movl -9472(%rbp), %eax
+ 13702 FFFF
+ 13703 .LBE3553:
+ 13704 .LBE3552:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 13705 .loc 2 1657 0
+ 13706 c2ad 898534F0 movl %eax, -4044(%rbp)
+ 13706 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 13707 .loc 2 1659 0
+ 13708 c2b3 8B8534F0 movl -4044(%rbp), %eax
+ 13708 FFFF
+ 13709 c2b9 89851CDB movl %eax, -9444(%rbp)
+ 13709 FFFF
+ 13710 c2bf 8B851CDB movl -9444(%rbp), %eax
+ 13710 FFFF
+ 13711 c2c5 898518DB movl %eax, -9448(%rbp)
+ 13711 FFFF
+ 13712 c2cb 8B8518DB movl -9448(%rbp), %eax
+ 13712 FFFF
+ 13713 c2d1 898514DB movl %eax, -9452(%rbp)
+ 13713 FFFF
+ 13714 c2d7 8B8514DB movl -9452(%rbp), %eax
+ 13714 FFFF
+ 13715 c2dd 898510DB movl %eax, -9456(%rbp)
+ 13715 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 13716 .loc 2 1660 0
+
GAS LISTING /tmp/ccjbMjHD.s page 422
+
+
+ 13717 c2e3 F30F6F85 movdqu -9456(%rbp), %xmm0
+ 13717 10DBFFFF
+ 13718 .LBE3551:
+ 13719 .LBE3550:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(9); /* k36 : k37 : k38 : k39 */
+ 13720 .loc 2 1933 0
+ 13721 c2eb F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 13721 40DCFFFF
+ 13722 c2f3 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 13722 30DCFFFF
+ 13723 c2fb F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 13723 40F0FFFF
+ 13724 .LBB3554:
+ 13725 .LBB3555:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 13726 .loc 2 1565 0
+ 13727 c303 F30F6F85 movdqu -4032(%rbp), %xmm0
+ 13727 40F0FFFF
+ 13728 c30b 660F7F85 movdqa %xmm0, -10032(%rbp)
+ 13728 D0D8FFFF
+ 13729 c313 660F6F85 movdqa -10032(%rbp), %xmm0
+ 13729 D0D8FFFF
+ 13730 c31b F30F7F85 movdqu %xmm0, -4016(%rbp)
+ 13730 50F0FFFF
+ 13731 .LBB3556:
+ 13732 .LBB3557:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13733 .loc 2 1278 0
+ 13734 c323 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 13734 00000000
+ 13735 c32b F30F6F8D movdqu -4016(%rbp), %xmm1
+ 13735 50F0FFFF
+ 13736 c333 F30F7F8D movdqu %xmm1, -3984(%rbp)
+ 13736 70F0FFFF
+ 13737 c33b F30F7F85 movdqu %xmm0, -4000(%rbp)
+ 13737 60F0FFFF
+ 13738 c343 F30F6F85 movdqu -3984(%rbp), %xmm0
+ 13738 70F0FFFF
+ 13739 c34b F30F7F85 movdqu %xmm0, -3952(%rbp)
+ 13739 90F0FFFF
+ 13740 c353 F30F6F85 movdqu -4000(%rbp), %xmm0
+ 13740 60F0FFFF
+ 13741 c35b F30F7F85 movdqu %xmm0, -3968(%rbp)
+ 13741 80F0FFFF
+ 13742 .LBB3558:
+ 13743 .LBB3559:
+ 13744 .LBB3560:
+ 13745 .LBB3561:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13746 .loc 3 529 0
+ 13747 c363 F30F6F8D movdqu -3968(%rbp), %xmm1
+ 13747 80F0FFFF
+ 13748 c36b F30F6F85 movdqu -3952(%rbp), %xmm0
+ 13748 90F0FFFF
+ 13749 c373 660F3800 pshufb %xmm1, %xmm0
+ 13749 C1
+ 13750 .LBE3561:
+
GAS LISTING /tmp/ccjbMjHD.s page 423
+
+
+ 13751 .LBE3560:
+ 13752 .LBE3559:
+ 13753 .LBE3558:
+ 13754 .LBE3557:
+ 13755 .LBE3556:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13756 .loc 2 1567 0
+ 13757 c378 660F7F85 movdqa %xmm0, -10032(%rbp)
+ 13757 D0D8FFFF
+ 13758 c380 660F6F85 movdqa -10032(%rbp), %xmm0
+ 13758 D0D8FFFF
+ 13759 c388 660FEF85 pxor -4032(%rbp), %xmm0
+ 13759 40F0FFFF
+ 13760 c390 F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 13760 40F0FFFF
+ 13761 c398 660F6F85 movdqa -10032(%rbp), %xmm0
+ 13761 D0D8FFFF
+ 13762 c3a0 F30F7F85 movdqu %xmm0, -3936(%rbp)
+ 13762 A0F0FFFF
+ 13763 .LBB3562:
+ 13764 .LBB3563:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13765 .loc 2 1278 0
+ 13766 c3a8 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 13766 00000000
+ 13767 c3b0 F30F6F8D movdqu -3936(%rbp), %xmm1
+ 13767 A0F0FFFF
+ 13768 c3b8 F30F7F8D movdqu %xmm1, -3904(%rbp)
+ 13768 C0F0FFFF
+ 13769 c3c0 F30F7F85 movdqu %xmm0, -3920(%rbp)
+ 13769 B0F0FFFF
+ 13770 c3c8 F30F6F85 movdqu -3904(%rbp), %xmm0
+ 13770 C0F0FFFF
+ 13771 c3d0 F30F7F85 movdqu %xmm0, -3872(%rbp)
+ 13771 E0F0FFFF
+ 13772 c3d8 F30F6F85 movdqu -3920(%rbp), %xmm0
+ 13772 B0F0FFFF
+ 13773 c3e0 F30F7F85 movdqu %xmm0, -3888(%rbp)
+ 13773 D0F0FFFF
+ 13774 .LBB3564:
+ 13775 .LBB3565:
+ 13776 .LBB3566:
+ 13777 .LBB3567:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13778 .loc 3 529 0
+ 13779 c3e8 F30F6F8D movdqu -3888(%rbp), %xmm1
+ 13779 D0F0FFFF
+ 13780 c3f0 F30F6F85 movdqu -3872(%rbp), %xmm0
+ 13780 E0F0FFFF
+ 13781 c3f8 660F3800 pshufb %xmm1, %xmm0
+ 13781 C1
+ 13782 .LBE3567:
+ 13783 .LBE3566:
+ 13784 .LBE3565:
+ 13785 .LBE3564:
+ 13786 .LBE3563:
+ 13787 .LBE3562:
+
GAS LISTING /tmp/ccjbMjHD.s page 424
+
+
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13788 .loc 2 1568 0
+ 13789 c3fd 660F7F85 movdqa %xmm0, -10032(%rbp)
+ 13789 D0D8FFFF
+ 13790 c405 660F6F85 movdqa -10032(%rbp), %xmm0
+ 13790 D0D8FFFF
+ 13791 c40d 660FEF85 pxor -4032(%rbp), %xmm0
+ 13791 40F0FFFF
+ 13792 c415 F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 13792 40F0FFFF
+ 13793 c41d 660F6F85 movdqa -10032(%rbp), %xmm0
+ 13793 D0D8FFFF
+ 13794 c425 F30F7F85 movdqu %xmm0, -3856(%rbp)
+ 13794 F0F0FFFF
+ 13795 .LBB3568:
+ 13796 .LBB3569:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13797 .loc 2 1278 0
+ 13798 c42d 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 13798 00000000
+ 13799 c435 F30F6F8D movdqu -3856(%rbp), %xmm1
+ 13799 F0F0FFFF
+ 13800 c43d F30F7F8D movdqu %xmm1, -3824(%rbp)
+ 13800 10F1FFFF
+ 13801 c445 F30F7F85 movdqu %xmm0, -3840(%rbp)
+ 13801 00F1FFFF
+ 13802 c44d F30F6F85 movdqu -3824(%rbp), %xmm0
+ 13802 10F1FFFF
+ 13803 c455 F30F7F85 movdqu %xmm0, -3792(%rbp)
+ 13803 30F1FFFF
+ 13804 c45d F30F6F85 movdqu -3840(%rbp), %xmm0
+ 13804 00F1FFFF
+ 13805 c465 F30F7F85 movdqu %xmm0, -3808(%rbp)
+ 13805 20F1FFFF
+ 13806 .LBB3570:
+ 13807 .LBB3571:
+ 13808 .LBB3572:
+ 13809 .LBB3573:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13810 .loc 3 529 0
+ 13811 c46d F30F6F8D movdqu -3808(%rbp), %xmm1
+ 13811 20F1FFFF
+ 13812 c475 F30F6F85 movdqu -3792(%rbp), %xmm0
+ 13812 30F1FFFF
+ 13813 c47d 660F3800 pshufb %xmm1, %xmm0
+ 13813 C1
+ 13814 .LBE3573:
+ 13815 .LBE3572:
+ 13816 .LBE3571:
+ 13817 .LBE3570:
+ 13818 .LBE3569:
+ 13819 .LBE3568:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13820 .loc 2 1569 0
+ 13821 c482 660F7F85 movdqa %xmm0, -10032(%rbp)
+ 13821 D0D8FFFF
+ 13822 c48a 660F6F85 movdqa -10032(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 425
+
+
+ 13822 D0D8FFFF
+ 13823 c492 660FEF85 pxor -4032(%rbp), %xmm0
+ 13823 40F0FFFF
+ 13824 c49a F30F7F85 movdqu %xmm0, -4032(%rbp)
+ 13824 40F0FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13825 .loc 2 1571 0
+ 13826 c4a2 F30F6F85 movdqu -4032(%rbp), %xmm0
+ 13826 40F0FFFF
+ 13827 .LBE3555:
+ 13828 .LBE3554:
+ 13829 .loc 2 1933 0
+ 13830 c4aa F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 13830 30DCFFFF
+ 13831 c4b2 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 13831 30DCFFFF
+ 13832 c4ba F30F7F85 movdqu %xmm0, -3760(%rbp)
+ 13832 50F1FFFF
+ 13833 c4c2 F30F6F85 movdqu -9152(%rbp), %xmm0
+ 13833 40DCFFFF
+ 13834 c4ca F30F7F85 movdqu %xmm0, -3776(%rbp)
+ 13834 40F1FFFF
+ 13835 .LBB3574:
+ 13836 .LBB3575:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 13837 .loc 2 178 0
+ 13838 c4d2 F30F6F85 movdqu -3776(%rbp), %xmm0
+ 13838 40F1FFFF
+ 13839 c4da F30F6F8D movdqu -3760(%rbp), %xmm1
+ 13839 50F1FFFF
+ 13840 c4e2 660FEFC1 pxor %xmm1, %xmm0
+ 13841 .LBE3575:
+ 13842 .LBE3574:
+ 13843 .loc 2 1933 0
+ 13844 c4e6 F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 13844 30DCFFFF
+ 13845 c4ee 488B8598 movq -9832(%rbp), %rax
+ 13845 D9FFFF
+ 13846 c4f5 48059000 addq $144, %rax
+ 13846 0000
+ 13847 c4fb F30F6F85 movdqu -9168(%rbp), %xmm0
+ 13847 30DCFFFF
+ 13848 c503 F30F7F00 movdqu %xmm0, (%rax)
+ 13849 c507 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 13849 30DCFFFF
+ 13850 c50f F30F7F85 movdqu %xmm0, -3728(%rbp)
+ 13850 70F1FFFF
+ 13851 .LBB3576:
+ 13852 .LBB3577:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13853 .loc 2 1681 0
+ 13854 c517 B8100000 movl $16, %eax
+ 13854 00
+ 13855 c51c 660F6F05 movdqa vec_00(%rip), %xmm0
+ 13855 00000000
+ 13856 c524 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 13856 90F1FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 426
+
+
+ 13857 c52c 89858CF1 movl %eax, -3700(%rbp)
+ 13857 FFFF
+ 13858 c532 F30F6F85 movdqu -3696(%rbp), %xmm0
+ 13858 90F1FFFF
+ 13859 c53a F30F7F85 movdqu %xmm0, -3664(%rbp)
+ 13859 B0F1FFFF
+ 13860 c542 8B858CF1 movl -3700(%rbp), %eax
+ 13860 FFFF
+ 13861 c548 8985ACF1 movl %eax, -3668(%rbp)
+ 13861 FFFF
+ 13862 .LBB3578:
+ 13863 .LBB3579:
+ 13864 .LBB3580:
+ 13865 .LBB3581:
+ 13866 .loc 3 598 0
+ 13867 c54e 8B85ACF1 movl -3668(%rbp), %eax
+ 13867 FFFF
+ 13868 c554 F30F6F85 movdqu -3664(%rbp), %xmm0
+ 13868 B0F1FFFF
+ 13869 c55c 660F3A22 pinsrd $3, %eax, %xmm0
+ 13869 C003
+ 13870 .LBE3581:
+ 13871 .LBE3580:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 13872 .loc 2 519 0
+ 13873 c562 F30F7F85 movdqu %xmm0, -3696(%rbp)
+ 13873 90F1FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 13874 .loc 2 526 0
+ 13875 c56a F30F6F85 movdqu -3696(%rbp), %xmm0
+ 13875 90F1FFFF
+ 13876 .LBE3579:
+ 13877 .LBE3578:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13878 .loc 2 1681 0
+ 13879 c572 660F7F85 movdqa %xmm0, -10000(%rbp)
+ 13879 F0D8FFFF
+ 13880 c57a F30F6F85 movdqu -3728(%rbp), %xmm0
+ 13880 70F1FFFF
+ 13881 c582 F30F7F85 movdqu %xmm0, -3648(%rbp)
+ 13881 C0F1FFFF
+ 13882 c58a F30F6F85 movdqu -3648(%rbp), %xmm0
+ 13882 C0F1FFFF
+ 13883 c592 F30F7F85 movdqu %xmm0, -3616(%rbp)
+ 13883 E0F1FFFF
+ 13884 c59a 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 13884 000000
+ 13885 c5a1 488985D8 movq %rax, -3624(%rbp)
+ 13885 F1FFFF
+ 13886 .LBB3582:
+ 13887 .LBB3583:
+ 13888 .LBB3584:
+ 13889 .LBB3585:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 13890 .loc 2 851 0
+ 13891 c5a8 660F6F05 movdqa vec_00(%rip), %xmm0
+ 13891 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 427
+
+
+ 13892 c5b0 F30F7F85 movdqu %xmm0, -3584(%rbp)
+ 13892 00F2FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13893 .loc 2 854 0
+ 13894 c5b8 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 13894 00000000
+ 13895 c5c0 F30F6F8D movdqu -3616(%rbp), %xmm1
+ 13895 E0F1FFFF
+ 13896 c5c8 F30F7F8D movdqu %xmm1, -3504(%rbp)
+ 13896 50F2FFFF
+ 13897 c5d0 F30F7F85 movdqu %xmm0, -3520(%rbp)
+ 13897 40F2FFFF
+ 13898 .LBB3586:
+ 13899 .LBB3587:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 13900 .loc 2 206 0
+ 13901 c5d8 F30F6F85 movdqu -3520(%rbp), %xmm0
+ 13901 40F2FFFF
+ 13902 c5e0 F30F6F8D movdqu -3504(%rbp), %xmm1
+ 13902 50F2FFFF
+ 13903 c5e8 660FDBC1 pand %xmm1, %xmm0
+ 13904 .LBE3587:
+ 13905 .LBE3586:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13906 .loc 2 854 0
+ 13907 c5ec F30F7F85 movdqu %xmm0, -3536(%rbp)
+ 13907 30F2FFFF
+ 13908 c5f4 F30F6F85 movdqu -3616(%rbp), %xmm0
+ 13908 E0F1FFFF
+ 13909 c5fc F30F7F85 movdqu %xmm0, -3472(%rbp)
+ 13909 70F2FFFF
+ 13910 .LBB3588:
+ 13911 .LBB3589:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 13912 .loc 3 433 0
+ 13913 c604 F30F6F85 movdqu -3472(%rbp), %xmm0
+ 13913 70F2FFFF
+ 13914 c60c 660F72D0 psrld $4, %xmm0
+ 13914 04
+ 13915 .LBE3589:
+ 13916 .LBE3588:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 13917 .loc 2 857 0
+ 13918 c611 F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 13918 20F2FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13919 .loc 2 859 0
+ 13920 c619 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 13920 00000000
+ 13921 c621 F30F6F8D movdqu -3552(%rbp), %xmm1
+ 13921 20F2FFFF
+ 13922 c629 F30F7F8D movdqu %xmm1, -3440(%rbp)
+ 13922 90F2FFFF
+ 13923 c631 F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 13923 80F2FFFF
+ 13924 .LBB3590:
+ 13925 .LBB3591:
+
GAS LISTING /tmp/ccjbMjHD.s page 428
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 13926 .loc 2 206 0
+ 13927 c639 F30F6F85 movdqu -3456(%rbp), %xmm0
+ 13927 80F2FFFF
+ 13928 c641 F30F6F8D movdqu -3440(%rbp), %xmm1
+ 13928 90F2FFFF
+ 13929 c649 660FDBC1 pand %xmm1, %xmm0
+ 13930 .LBE3591:
+ 13931 .LBE3590:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13932 .loc 2 859 0
+ 13933 c64d F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 13933 20F2FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 13934 .loc 2 866 0
+ 13935 c655 C785FCF1 movl $0, -3588(%rbp)
+ 13935 FFFF0000
+ 13935 0000
+ 13936 c65f E9BE0100 jmp .L204
+ 13936 00
+ 13937 .L205:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13938 .loc 2 868 0
+ 13939 c664 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 13939 00000000
+ 13940 c66c F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 13940 B0F2FFFF
+ 13941 c674 F30F6F85 movdqu -3552(%rbp), %xmm0
+ 13941 20F2FFFF
+ 13942 c67c F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 13942 A0F2FFFF
+ 13943 c684 F30F6F85 movdqu -3408(%rbp), %xmm0
+ 13943 B0F2FFFF
+ 13944 c68c F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 13944 D0F2FFFF
+ 13945 c694 F30F6F85 movdqu -3424(%rbp), %xmm0
+ 13945 A0F2FFFF
+ 13946 c69c F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 13946 C0F2FFFF
+ 13947 .LBB3592:
+ 13948 .LBB3593:
+ 13949 .LBB3594:
+ 13950 .LBB3595:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13951 .loc 3 529 0
+ 13952 c6a4 F30F6F8D movdqu -3392(%rbp), %xmm1
+ 13952 C0F2FFFF
+ 13953 c6ac F30F6F85 movdqu -3376(%rbp), %xmm0
+ 13953 D0F2FFFF
+ 13954 c6b4 660F3800 pshufb %xmm1, %xmm0
+ 13954 C1
+ 13955 .LBE3595:
+ 13956 .LBE3594:
+ 13957 .LBE3593:
+ 13958 .LBE3592:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13959 .loc 2 868 0
+
GAS LISTING /tmp/ccjbMjHD.s page 429
+
+
+ 13960 c6b9 F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 13960 10F2FFFF
+ 13961 c6c1 F30F6F85 movdqu -3536(%rbp), %xmm0
+ 13961 30F2FFFF
+ 13962 c6c9 F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 13962 F0F2FFFF
+ 13963 c6d1 F30F6F85 movdqu -3568(%rbp), %xmm0
+ 13963 10F2FFFF
+ 13964 c6d9 F30F7F85 movdqu %xmm0, -3360(%rbp)
+ 13964 E0F2FFFF
+ 13965 .LBB3596:
+ 13966 .LBB3597:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 13967 .loc 2 234 0
+ 13968 c6e1 F30F6F85 movdqu -3360(%rbp), %xmm0
+ 13968 E0F2FFFF
+ 13969 c6e9 F30F6F8D movdqu -3344(%rbp), %xmm1
+ 13969 F0F2FFFF
+ 13970 c6f1 660FEBC1 por %xmm1, %xmm0
+ 13971 .LBE3597:
+ 13972 .LBE3596:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 13973 .loc 2 870 0
+ 13974 c6f5 F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 13974 10F2FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13975 .loc 2 872 0
+ 13976 c6fd 8B85FCF1 mov -3588(%rbp), %eax
+ 13976 FFFF
+ 13977 c703 48C1E004 salq $4, %rax
+ 13978 c707 480385D8 addq -3624(%rbp), %rax
+ 13978 F1FFFF
+ 13979 c70e 660F6F00 movdqa (%rax), %xmm0
+ 13980 c712 F30F7F85 movdqu %xmm0, -3312(%rbp)
+ 13980 10F3FFFF
+ 13981 c71a F30F6F85 movdqu -3568(%rbp), %xmm0
+ 13981 10F2FFFF
+ 13982 c722 F30F7F85 movdqu %xmm0, -3328(%rbp)
+ 13982 00F3FFFF
+ 13983 c72a F30F6F85 movdqu -3312(%rbp), %xmm0
+ 13983 10F3FFFF
+ 13984 c732 F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 13984 30F3FFFF
+ 13985 c73a F30F6F85 movdqu -3328(%rbp), %xmm0
+ 13985 00F3FFFF
+ 13986 c742 F30F7F85 movdqu %xmm0, -3296(%rbp)
+ 13986 20F3FFFF
+ 13987 .LBB3598:
+ 13988 .LBB3599:
+ 13989 .LBB3600:
+ 13990 .LBB3601:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13991 .loc 3 529 0
+ 13992 c74a F30F6F8D movdqu -3296(%rbp), %xmm1
+ 13992 20F3FFFF
+ 13993 c752 F30F6F85 movdqu -3280(%rbp), %xmm0
+ 13993 30F3FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 430
+
+
+ 13994 c75a 660F3800 pshufb %xmm1, %xmm0
+ 13994 C1
+ 13995 .LBE3601:
+ 13996 .LBE3600:
+ 13997 .LBE3599:
+ 13998 .LBE3598:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13999 .loc 2 872 0
+ 14000 c75f F30F7F85 movdqu %xmm0, -3568(%rbp)
+ 14000 10F2FFFF
+ 14001 c767 F30F6F85 movdqu -3584(%rbp), %xmm0
+ 14001 00F2FFFF
+ 14002 c76f F30F7F85 movdqu %xmm0, -3248(%rbp)
+ 14002 50F3FFFF
+ 14003 c777 F30F6F85 movdqu -3568(%rbp), %xmm0
+ 14003 10F2FFFF
+ 14004 c77f F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 14004 40F3FFFF
+ 14005 .LBB3602:
+ 14006 .LBB3603:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 14007 .loc 2 234 0
+ 14008 c787 F30F6F85 movdqu -3264(%rbp), %xmm0
+ 14008 40F3FFFF
+ 14009 c78f F30F6F8D movdqu -3248(%rbp), %xmm1
+ 14009 50F3FFFF
+ 14010 c797 660FEBC1 por %xmm1, %xmm0
+ 14011 .LBE3603:
+ 14012 .LBE3602:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 14013 .loc 2 874 0
+ 14014 c79b F30F7F85 movdqu %xmm0, -3584(%rbp)
+ 14014 00F2FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14015 .loc 2 876 0
+ 14016 c7a3 660F6F05 movdqa vec_01(%rip), %xmm0
+ 14016 00000000
+ 14017 c7ab F30F6F8D movdqu -3552(%rbp), %xmm1
+ 14017 20F2FFFF
+ 14018 c7b3 F30F7F8D movdqu %xmm1, -3216(%rbp)
+ 14018 70F3FFFF
+ 14019 c7bb F30F7F85 movdqu %xmm0, -3232(%rbp)
+ 14019 60F3FFFF
+ 14020 .LBB3604:
+ 14021 .LBB3605:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 14022 .loc 2 290 0
+ 14023 c7c3 F30F6F8D movdqu -3232(%rbp), %xmm1
+ 14023 60F3FFFF
+ 14024 c7cb F30F6F85 movdqu -3216(%rbp), %xmm0
+ 14024 70F3FFFF
+ 14025 c7d3 660FF8C1 psubb %xmm1, %xmm0
+ 14026 .LBE3605:
+ 14027 .LBE3604:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14028 .loc 2 876 0
+ 14029 c7d7 F30F7F85 movdqu %xmm0, -3552(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 431
+
+
+ 14029 20F2FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14030 .loc 2 878 0
+ 14031 c7df 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 14031 00000000
+ 14032 c7e7 F30F6F8D movdqu -3552(%rbp), %xmm1
+ 14032 20F2FFFF
+ 14033 c7ef F30F7F8D movdqu %xmm1, -3184(%rbp)
+ 14033 90F3FFFF
+ 14034 c7f7 F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 14034 80F3FFFF
+ 14035 .LBB3606:
+ 14036 .LBB3607:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 14037 .loc 2 206 0
+ 14038 c7ff F30F6F85 movdqu -3200(%rbp), %xmm0
+ 14038 80F3FFFF
+ 14039 c807 F30F6F8D movdqu -3184(%rbp), %xmm1
+ 14039 90F3FFFF
+ 14040 c80f 660FDBC1 pand %xmm1, %xmm0
+ 14041 .LBE3607:
+ 14042 .LBE3606:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14043 .loc 2 878 0
+ 14044 c813 F30F7F85 movdqu %xmm0, -3552(%rbp)
+ 14044 20F2FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 14045 .loc 2 866 0
+ 14046 c81b 8385FCF1 addl $1, -3588(%rbp)
+ 14046 FFFF01
+ 14047 .L204:
+ 14048 c822 83BDFCF1 cmpl $15, -3588(%rbp)
+ 14048 FFFF0F
+ 14049 c829 0F8635FE jbe .L205
+ 14049 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 14050 .loc 2 882 0
+ 14051 c82f F30F6F85 movdqu -3584(%rbp), %xmm0
+ 14051 00F2FFFF
+ 14052 .LBE3585:
+ 14053 .LBE3584:
+ 14054 .LBE3583:
+ 14055 .LBE3582:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 14056 .loc 2 1682 0
+ 14057 c837 660F7F85 movdqa %xmm0, -10016(%rbp)
+ 14057 E0D8FFFF
+ 14058 .LBB3608:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 14059 .loc 2 1683 0
+ 14060 c83f 660F6F85 movdqa -10016(%rbp), %xmm0
+ 14060 E0D8FFFF
+ 14061 c847 F30F7F85 movdqu %xmm0, -9392(%rbp)
+ 14061 50DBFFFF
+ 14062 c84f E8000000 call KDbgWriterGet at PLT
+ 14062 00
+ 14063 c854 4885C0 testq %rax, %rax
+
GAS LISTING /tmp/ccjbMjHD.s page 432
+
+
+ 14064 c857 7479 je .L207
+ 14065 c859 BF010000 movl $1, %edi
+ 14065 00
+ 14066 c85e E8000000 call KDbgCondToFlag at PLT
+ 14066 00
+ 14067 c863 4889C6 movq %rax, %rsi
+ 14068 c866 BF100000 movl $16, %edi
+ 14068 00
+ 14069 c86b E8000000 call KDbgTestModConds at PLT
+ 14069 00
+ 14070 c870 84C0 testb %al, %al
+ 14071 c872 745E je .L207
+ 14072 c874 8B855CDB movl -9380(%rbp), %eax
+ 14072 FFFF
+ 14073 c87a 89C7 movl %eax, %edi
+ 14074 c87c E87F37FF call bswap_32
+ 14074 FF
+ 14075 c881 4189C5 movl %eax, %r13d
+ 14076 c884 8B8558DB movl -9384(%rbp), %eax
+ 14076 FFFF
+ 14077 c88a 89C7 movl %eax, %edi
+ 14078 c88c E86F37FF call bswap_32
+ 14078 FF
+ 14079 c891 4189C4 movl %eax, %r12d
+ 14080 c894 8B8554DB movl -9388(%rbp), %eax
+ 14080 FFFF
+ 14081 c89a 89C7 movl %eax, %edi
+ 14082 c89c E85F37FF call bswap_32
+ 14082 FF
+ 14083 c8a1 89C3 movl %eax, %ebx
+ 14084 c8a3 8B8550DB movl -9392(%rbp), %eax
+ 14084 FFFF
+ 14085 c8a9 89C7 movl %eax, %edi
+ 14086 c8ab E85037FF call bswap_32
+ 14086 FF
+ 14087 c8b0 4589E9 movl %r13d, %r9d
+ 14088 c8b3 4589E0 movl %r12d, %r8d
+ 14089 c8b6 89D9 movl %ebx, %ecx
+ 14090 c8b8 89C2 movl %eax, %edx
+ 14091 c8ba 488D3500 leaq .LC0(%rip), %rsi
+ 14091 000000
+ 14092 c8c1 488D3D00 leaq .LC1(%rip), %rdi
+ 14092 000000
+ 14093 c8c8 B8000000 movl $0, %eax
+ 14093 00
+ 14094 c8cd E8000000 call KDbgMsg at PLT
+ 14094 00
+ 14095 .L207:
+ 14096 c8d2 660F6F85 movdqa -10016(%rbp), %xmm0
+ 14096 E0D8FFFF
+ 14097 c8da F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 14097 A0F3FFFF
+ 14098 .LBE3608:
+ 14099 .LBB3609:
+ 14100 .LBB3610:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14101 .loc 2 667 0
+
GAS LISTING /tmp/ccjbMjHD.s page 433
+
+
+ 14102 c8e2 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 14102 00000000
+ 14103 c8ea F30F6F8D movdqu -3168(%rbp), %xmm1
+ 14103 A0F3FFFF
+ 14104 c8f2 F30F7F8D movdqu %xmm1, -3136(%rbp)
+ 14104 C0F3FFFF
+ 14105 c8fa F30F7F85 movdqu %xmm0, -3152(%rbp)
+ 14105 B0F3FFFF
+ 14106 c902 F30F6F85 movdqu -3136(%rbp), %xmm0
+ 14106 C0F3FFFF
+ 14107 c90a F30F7F85 movdqu %xmm0, -3104(%rbp)
+ 14107 E0F3FFFF
+ 14108 c912 F30F6F85 movdqu -3152(%rbp), %xmm0
+ 14108 B0F3FFFF
+ 14109 c91a F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 14109 D0F3FFFF
+ 14110 .LBB3611:
+ 14111 .LBB3612:
+ 14112 .LBB3613:
+ 14113 .LBB3614:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14114 .loc 3 529 0
+ 14115 c922 F30F6F8D movdqu -3120(%rbp), %xmm1
+ 14115 D0F3FFFF
+ 14116 c92a F30F6F85 movdqu -3104(%rbp), %xmm0
+ 14116 E0F3FFFF
+ 14117 c932 660F3800 pshufb %xmm1, %xmm0
+ 14117 C1
+ 14118 .LBE3614:
+ 14119 .LBE3613:
+ 14120 .LBE3612:
+ 14121 .LBE3611:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14122 .loc 2 667 0
+ 14123 c937 F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 14123 A0F3FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 14124 .loc 2 668 0
+ 14125 c93f F30F6F85 movdqu -3168(%rbp), %xmm0
+ 14125 A0F3FFFF
+ 14126 .LBE3610:
+ 14127 .LBE3609:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 14128 .loc 2 1684 0
+ 14129 c947 660F7F85 movdqa %xmm0, -10016(%rbp)
+ 14129 E0D8FFFF
+ 14130 .LBB3615:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 14131 .loc 2 1685 0
+ 14132 c94f 660F6F85 movdqa -10016(%rbp), %xmm0
+ 14132 E0D8FFFF
+ 14133 c957 F30F7F85 movdqu %xmm0, -9408(%rbp)
+ 14133 40DBFFFF
+ 14134 c95f E8000000 call KDbgWriterGet at PLT
+ 14134 00
+ 14135 c964 4885C0 testq %rax, %rax
+ 14136 c967 7479 je .L209
+
GAS LISTING /tmp/ccjbMjHD.s page 434
+
+
+ 14137 c969 BF010000 movl $1, %edi
+ 14137 00
+ 14138 c96e E8000000 call KDbgCondToFlag at PLT
+ 14138 00
+ 14139 c973 4889C6 movq %rax, %rsi
+ 14140 c976 BF100000 movl $16, %edi
+ 14140 00
+ 14141 c97b E8000000 call KDbgTestModConds at PLT
+ 14141 00
+ 14142 c980 84C0 testb %al, %al
+ 14143 c982 745E je .L209
+ 14144 c984 8B854CDB movl -9396(%rbp), %eax
+ 14144 FFFF
+ 14145 c98a 89C7 movl %eax, %edi
+ 14146 c98c E86F36FF call bswap_32
+ 14146 FF
+ 14147 c991 4189C5 movl %eax, %r13d
+ 14148 c994 8B8548DB movl -9400(%rbp), %eax
+ 14148 FFFF
+ 14149 c99a 89C7 movl %eax, %edi
+ 14150 c99c E85F36FF call bswap_32
+ 14150 FF
+ 14151 c9a1 4189C4 movl %eax, %r12d
+ 14152 c9a4 8B8544DB movl -9404(%rbp), %eax
+ 14152 FFFF
+ 14153 c9aa 89C7 movl %eax, %edi
+ 14154 c9ac E84F36FF call bswap_32
+ 14154 FF
+ 14155 c9b1 89C3 movl %eax, %ebx
+ 14156 c9b3 8B8540DB movl -9408(%rbp), %eax
+ 14156 FFFF
+ 14157 c9b9 89C7 movl %eax, %edi
+ 14158 c9bb E84036FF call bswap_32
+ 14158 FF
+ 14159 c9c0 4589E9 movl %r13d, %r9d
+ 14160 c9c3 4589E0 movl %r12d, %r8d
+ 14161 c9c6 89D9 movl %ebx, %ecx
+ 14162 c9c8 89C2 movl %eax, %edx
+ 14163 c9ca 488D3500 leaq .LC2(%rip), %rsi
+ 14163 000000
+ 14164 c9d1 488D3D00 leaq .LC1(%rip), %rdi
+ 14164 000000
+ 14165 c9d8 B8000000 movl $0, %eax
+ 14165 00
+ 14166 c9dd E8000000 call KDbgMsg at PLT
+ 14166 00
+ 14167 .L209:
+ 14168 c9e2 660F6F85 movdqa -10016(%rbp), %xmm0
+ 14168 E0D8FFFF
+ 14169 c9ea F30F7F85 movdqu %xmm0, -3072(%rbp)
+ 14169 00F4FFFF
+ 14170 c9f2 660F6F85 movdqa -10000(%rbp), %xmm0
+ 14170 F0D8FFFF
+ 14171 c9fa F30F7F85 movdqu %xmm0, -3088(%rbp)
+ 14171 F0F3FFFF
+ 14172 .LBE3615:
+ 14173 .LBB3616:
+
GAS LISTING /tmp/ccjbMjHD.s page 435
+
+
+ 14174 .LBB3617:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 14175 .loc 2 178 0
+ 14176 ca02 F30F6F85 movdqu -3088(%rbp), %xmm0
+ 14176 F0F3FFFF
+ 14177 ca0a F30F6F8D movdqu -3072(%rbp), %xmm1
+ 14177 00F4FFFF
+ 14178 ca12 660FEFC1 pxor %xmm1, %xmm0
+ 14179 .LBE3617:
+ 14180 .LBE3616:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 14181 .loc 2 1686 0
+ 14182 ca16 660F7F85 movdqa %xmm0, -10016(%rbp)
+ 14182 E0D8FFFF
+ 14183 .LBB3618:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 14184 .loc 2 1687 0
+ 14185 ca1e 660F6F85 movdqa -10016(%rbp), %xmm0
+ 14185 E0D8FFFF
+ 14186 ca26 F30F7F85 movdqu %xmm0, -9424(%rbp)
+ 14186 30DBFFFF
+ 14187 ca2e E8000000 call KDbgWriterGet at PLT
+ 14187 00
+ 14188 ca33 4885C0 testq %rax, %rax
+ 14189 ca36 7479 je .L211
+ 14190 ca38 BF010000 movl $1, %edi
+ 14190 00
+ 14191 ca3d E8000000 call KDbgCondToFlag at PLT
+ 14191 00
+ 14192 ca42 4889C6 movq %rax, %rsi
+ 14193 ca45 BF100000 movl $16, %edi
+ 14193 00
+ 14194 ca4a E8000000 call KDbgTestModConds at PLT
+ 14194 00
+ 14195 ca4f 84C0 testb %al, %al
+ 14196 ca51 745E je .L211
+ 14197 ca53 8B853CDB movl -9412(%rbp), %eax
+ 14197 FFFF
+ 14198 ca59 89C7 movl %eax, %edi
+ 14199 ca5b E8A035FF call bswap_32
+ 14199 FF
+ 14200 ca60 4189C5 movl %eax, %r13d
+ 14201 ca63 8B8538DB movl -9416(%rbp), %eax
+ 14201 FFFF
+ 14202 ca69 89C7 movl %eax, %edi
+ 14203 ca6b E89035FF call bswap_32
+ 14203 FF
+ 14204 ca70 4189C4 movl %eax, %r12d
+ 14205 ca73 8B8534DB movl -9420(%rbp), %eax
+ 14205 FFFF
+ 14206 ca79 89C7 movl %eax, %edi
+ 14207 ca7b E88035FF call bswap_32
+ 14207 FF
+ 14208 ca80 89C3 movl %eax, %ebx
+ 14209 ca82 8B8530DB movl -9424(%rbp), %eax
+ 14209 FFFF
+ 14210 ca88 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 436
+
+
+ 14211 ca8a E87135FF call bswap_32
+ 14211 FF
+ 14212 ca8f 4589E9 movl %r13d, %r9d
+ 14213 ca92 4589E0 movl %r12d, %r8d
+ 14214 ca95 89D9 movl %ebx, %ecx
+ 14215 ca97 89C2 movl %eax, %edx
+ 14216 ca99 488D3500 leaq .LC3(%rip), %rsi
+ 14216 000000
+ 14217 caa0 488D3D00 leaq .LC1(%rip), %rdi
+ 14217 000000
+ 14218 caa7 B8000000 movl $0, %eax
+ 14218 00
+ 14219 caac E8000000 call KDbgMsg at PLT
+ 14219 00
+ 14220 .L211:
+ 14221 cab1 660F6F85 movdqa -10016(%rbp), %xmm0
+ 14221 E0D8FFFF
+ 14222 cab9 F30F7F85 movdqu %xmm0, -3056(%rbp)
+ 14222 10F4FFFF
+ 14223 cac1 F30F6F85 movdqu -3056(%rbp), %xmm0
+ 14223 10F4FFFF
+ 14224 cac9 F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 14224 30F4FFFF
+ 14225 .LBE3618:
+ 14226 .LBB3619:
+ 14227 .LBB3620:
+ 14228 .LBB3621:
+ 14229 .LBB3622:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 14230 .loc 3 450 0
+ 14231 cad1 F30F6F85 movdqu -3024(%rbp), %xmm0
+ 14231 30F4FFFF
+ 14232 cad9 660F70C0 pshufd $255, %xmm0, %xmm0
+ 14232 FF
+ 14233 .LBE3622:
+ 14234 .LBE3621:
+ 14235 .LBE3620:
+ 14236 .LBE3619:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 14237 .loc 2 1688 0
+ 14238 cade 660F7F85 movdqa %xmm0, -10016(%rbp)
+ 14238 E0D8FFFF
+ 14239 .LBB3623:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 14240 .loc 2 1689 0
+ 14241 cae6 660F6F85 movdqa -10016(%rbp), %xmm0
+ 14241 E0D8FFFF
+ 14242 caee F30F7F85 movdqu %xmm0, -9440(%rbp)
+ 14242 20DBFFFF
+ 14243 caf6 E8000000 call KDbgWriterGet at PLT
+ 14243 00
+ 14244 cafb 4885C0 testq %rax, %rax
+ 14245 cafe 7479 je .L213
+ 14246 cb00 BF010000 movl $1, %edi
+ 14246 00
+ 14247 cb05 E8000000 call KDbgCondToFlag at PLT
+ 14247 00
+
GAS LISTING /tmp/ccjbMjHD.s page 437
+
+
+ 14248 cb0a 4889C6 movq %rax, %rsi
+ 14249 cb0d BF100000 movl $16, %edi
+ 14249 00
+ 14250 cb12 E8000000 call KDbgTestModConds at PLT
+ 14250 00
+ 14251 cb17 84C0 testb %al, %al
+ 14252 cb19 745E je .L213
+ 14253 cb1b 8B852CDB movl -9428(%rbp), %eax
+ 14253 FFFF
+ 14254 cb21 89C7 movl %eax, %edi
+ 14255 cb23 E8D834FF call bswap_32
+ 14255 FF
+ 14256 cb28 4189C5 movl %eax, %r13d
+ 14257 cb2b 8B8528DB movl -9432(%rbp), %eax
+ 14257 FFFF
+ 14258 cb31 89C7 movl %eax, %edi
+ 14259 cb33 E8C834FF call bswap_32
+ 14259 FF
+ 14260 cb38 4189C4 movl %eax, %r12d
+ 14261 cb3b 8B8524DB movl -9436(%rbp), %eax
+ 14261 FFFF
+ 14262 cb41 89C7 movl %eax, %edi
+ 14263 cb43 E8B834FF call bswap_32
+ 14263 FF
+ 14264 cb48 89C3 movl %eax, %ebx
+ 14265 cb4a 8B8520DB movl -9440(%rbp), %eax
+ 14265 FFFF
+ 14266 cb50 89C7 movl %eax, %edi
+ 14267 cb52 E8A934FF call bswap_32
+ 14267 FF
+ 14268 cb57 4589E9 movl %r13d, %r9d
+ 14269 cb5a 4589E0 movl %r12d, %r8d
+ 14270 cb5d 89D9 movl %ebx, %ecx
+ 14271 cb5f 89C2 movl %eax, %edx
+ 14272 cb61 488D3500 leaq .LC4(%rip), %rsi
+ 14272 000000
+ 14273 cb68 488D3D00 leaq .LC1(%rip), %rdi
+ 14273 000000
+ 14274 cb6f B8000000 movl $0, %eax
+ 14274 00
+ 14275 cb74 E8000000 call KDbgMsg at PLT
+ 14275 00
+ 14276 .L213:
+ 14277 .LBE3623:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 14278 .loc 2 1690 0
+ 14279 cb79 660F6F85 movdqa -10016(%rbp), %xmm0
+ 14279 E0D8FFFF
+ 14280 .LBE3577:
+ 14281 .LBE3576:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(10,0x10); /* k40 : k41 : k42 : k43 */
+ 14282 .loc 2 1934 0
+ 14283 cb81 F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 14283 40DCFFFF
+ 14284 cb89 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 14284 20DCFFFF
+ 14285 cb91 F30F7F85 movdqu %xmm0, -3008(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 438
+
+
+ 14285 40F4FFFF
+ 14286 .LBB3624:
+ 14287 .LBB3625:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 14288 .loc 2 1565 0
+ 14289 cb99 F30F6F85 movdqu -3008(%rbp), %xmm0
+ 14289 40F4FFFF
+ 14290 cba1 660F7F85 movdqa %xmm0, -9984(%rbp)
+ 14290 00D9FFFF
+ 14291 cba9 660F6F85 movdqa -9984(%rbp), %xmm0
+ 14291 00D9FFFF
+ 14292 cbb1 F30F7F85 movdqu %xmm0, -2992(%rbp)
+ 14292 50F4FFFF
+ 14293 .LBB3626:
+ 14294 .LBB3627:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14295 .loc 2 1278 0
+ 14296 cbb9 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 14296 00000000
+ 14297 cbc1 F30F6F8D movdqu -2992(%rbp), %xmm1
+ 14297 50F4FFFF
+ 14298 cbc9 F30F7F8D movdqu %xmm1, -2960(%rbp)
+ 14298 70F4FFFF
+ 14299 cbd1 F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 14299 60F4FFFF
+ 14300 cbd9 F30F6F85 movdqu -2960(%rbp), %xmm0
+ 14300 70F4FFFF
+ 14301 cbe1 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 14301 90F4FFFF
+ 14302 cbe9 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 14302 60F4FFFF
+ 14303 cbf1 F30F7F85 movdqu %xmm0, -2944(%rbp)
+ 14303 80F4FFFF
+ 14304 .LBB3628:
+ 14305 .LBB3629:
+ 14306 .LBB3630:
+ 14307 .LBB3631:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14308 .loc 3 529 0
+ 14309 cbf9 F30F6F8D movdqu -2944(%rbp), %xmm1
+ 14309 80F4FFFF
+ 14310 cc01 F30F6F85 movdqu -2928(%rbp), %xmm0
+ 14310 90F4FFFF
+ 14311 cc09 660F3800 pshufb %xmm1, %xmm0
+ 14311 C1
+ 14312 .LBE3631:
+ 14313 .LBE3630:
+ 14314 .LBE3629:
+ 14315 .LBE3628:
+ 14316 .LBE3627:
+ 14317 .LBE3626:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14318 .loc 2 1567 0
+ 14319 cc0e 660F7F85 movdqa %xmm0, -9984(%rbp)
+ 14319 00D9FFFF
+ 14320 cc16 660F6F85 movdqa -9984(%rbp), %xmm0
+ 14320 00D9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 439
+
+
+ 14321 cc1e 660FEF85 pxor -3008(%rbp), %xmm0
+ 14321 40F4FFFF
+ 14322 cc26 F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 14322 40F4FFFF
+ 14323 cc2e 660F6F85 movdqa -9984(%rbp), %xmm0
+ 14323 00D9FFFF
+ 14324 cc36 F30F7F85 movdqu %xmm0, -2912(%rbp)
+ 14324 A0F4FFFF
+ 14325 .LBB3632:
+ 14326 .LBB3633:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14327 .loc 2 1278 0
+ 14328 cc3e 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 14328 00000000
+ 14329 cc46 F30F6F8D movdqu -2912(%rbp), %xmm1
+ 14329 A0F4FFFF
+ 14330 cc4e F30F7F8D movdqu %xmm1, -2880(%rbp)
+ 14330 C0F4FFFF
+ 14331 cc56 F30F7F85 movdqu %xmm0, -2896(%rbp)
+ 14331 B0F4FFFF
+ 14332 cc5e F30F6F85 movdqu -2880(%rbp), %xmm0
+ 14332 C0F4FFFF
+ 14333 cc66 F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 14333 E0F4FFFF
+ 14334 cc6e F30F6F85 movdqu -2896(%rbp), %xmm0
+ 14334 B0F4FFFF
+ 14335 cc76 F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 14335 D0F4FFFF
+ 14336 .LBB3634:
+ 14337 .LBB3635:
+ 14338 .LBB3636:
+ 14339 .LBB3637:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14340 .loc 3 529 0
+ 14341 cc7e F30F6F8D movdqu -2864(%rbp), %xmm1
+ 14341 D0F4FFFF
+ 14342 cc86 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 14342 E0F4FFFF
+ 14343 cc8e 660F3800 pshufb %xmm1, %xmm0
+ 14343 C1
+ 14344 .LBE3637:
+ 14345 .LBE3636:
+ 14346 .LBE3635:
+ 14347 .LBE3634:
+ 14348 .LBE3633:
+ 14349 .LBE3632:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14350 .loc 2 1568 0
+ 14351 cc93 660F7F85 movdqa %xmm0, -9984(%rbp)
+ 14351 00D9FFFF
+ 14352 cc9b 660F6F85 movdqa -9984(%rbp), %xmm0
+ 14352 00D9FFFF
+ 14353 cca3 660FEF85 pxor -3008(%rbp), %xmm0
+ 14353 40F4FFFF
+ 14354 ccab F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 14354 40F4FFFF
+ 14355 ccb3 660F6F85 movdqa -9984(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 440
+
+
+ 14355 00D9FFFF
+ 14356 ccbb F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 14356 F0F4FFFF
+ 14357 .LBB3638:
+ 14358 .LBB3639:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14359 .loc 2 1278 0
+ 14360 ccc3 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 14360 00000000
+ 14361 cccb F30F6F8D movdqu -2832(%rbp), %xmm1
+ 14361 F0F4FFFF
+ 14362 ccd3 F30F7F8D movdqu %xmm1, -2800(%rbp)
+ 14362 10F5FFFF
+ 14363 ccdb F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 14363 00F5FFFF
+ 14364 cce3 F30F6F85 movdqu -2800(%rbp), %xmm0
+ 14364 10F5FFFF
+ 14365 cceb F30F7F85 movdqu %xmm0, -2768(%rbp)
+ 14365 30F5FFFF
+ 14366 ccf3 F30F6F85 movdqu -2816(%rbp), %xmm0
+ 14366 00F5FFFF
+ 14367 ccfb F30F7F85 movdqu %xmm0, -2784(%rbp)
+ 14367 20F5FFFF
+ 14368 .LBB3640:
+ 14369 .LBB3641:
+ 14370 .LBB3642:
+ 14371 .LBB3643:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14372 .loc 3 529 0
+ 14373 cd03 F30F6F8D movdqu -2784(%rbp), %xmm1
+ 14373 20F5FFFF
+ 14374 cd0b F30F6F85 movdqu -2768(%rbp), %xmm0
+ 14374 30F5FFFF
+ 14375 cd13 660F3800 pshufb %xmm1, %xmm0
+ 14375 C1
+ 14376 .LBE3643:
+ 14377 .LBE3642:
+ 14378 .LBE3641:
+ 14379 .LBE3640:
+ 14380 .LBE3639:
+ 14381 .LBE3638:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14382 .loc 2 1569 0
+ 14383 cd18 660F7F85 movdqa %xmm0, -9984(%rbp)
+ 14383 00D9FFFF
+ 14384 cd20 660F6F85 movdqa -9984(%rbp), %xmm0
+ 14384 00D9FFFF
+ 14385 cd28 660FEF85 pxor -3008(%rbp), %xmm0
+ 14385 40F4FFFF
+ 14386 cd30 F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 14386 40F4FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 14387 .loc 2 1571 0
+ 14388 cd38 F30F6F85 movdqu -3008(%rbp), %xmm0
+ 14388 40F4FFFF
+ 14389 .LBE3625:
+ 14390 .LBE3624:
+
GAS LISTING /tmp/ccjbMjHD.s page 441
+
+
+ 14391 .loc 2 1934 0
+ 14392 cd40 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 14392 20DCFFFF
+ 14393 cd48 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 14393 20DCFFFF
+ 14394 cd50 F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 14394 50F5FFFF
+ 14395 cd58 F30F6F85 movdqu -9152(%rbp), %xmm0
+ 14395 40DCFFFF
+ 14396 cd60 F30F7F85 movdqu %xmm0, -2752(%rbp)
+ 14396 40F5FFFF
+ 14397 .LBB3644:
+ 14398 .LBB3645:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 14399 .loc 2 178 0
+ 14400 cd68 F30F6F85 movdqu -2752(%rbp), %xmm0
+ 14400 40F5FFFF
+ 14401 cd70 F30F6F8D movdqu -2736(%rbp), %xmm1
+ 14401 50F5FFFF
+ 14402 cd78 660FEFC1 pxor %xmm1, %xmm0
+ 14403 .LBE3645:
+ 14404 .LBE3644:
+ 14405 .loc 2 1934 0
+ 14406 cd7c F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 14406 20DCFFFF
+ 14407 cd84 488B8598 movq -9832(%rbp), %rax
+ 14407 D9FFFF
+ 14408 cd8b 4805A000 addq $160, %rax
+ 14408 0000
+ 14409 cd91 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 14409 20DCFFFF
+ 14410 cd99 F30F7F00 movdqu %xmm0, (%rax)
+ 14411 cd9d F30F6F85 movdqu -9184(%rbp), %xmm0
+ 14411 20DCFFFF
+ 14412 cda5 F30F7F85 movdqu %xmm0, -2720(%rbp)
+ 14412 60F5FFFF
+ 14413 .LBB3646:
+ 14414 .LBB3647:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 14415 .loc 2 1656 0
+ 14416 cdad F30F6F85 movdqu -2720(%rbp), %xmm0
+ 14416 60F5FFFF
+ 14417 cdb5 F30F7F85 movdqu %xmm0, -9360(%rbp)
+ 14417 70DBFFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 14418 .loc 2 1657 0
+ 14419 cdbd 8B857CDB movl -9348(%rbp), %eax
+ 14419 FFFF
+ 14420 cdc3 898578F5 movl %eax, -2696(%rbp)
+ 14420 FFFF
+ 14421 .LBB3648:
+ 14422 .LBB3649:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 14423 .loc 2 740 0
+ 14424 cdc9 8B8578F5 movl -2696(%rbp), %eax
+ 14424 FFFF
+ 14425 cdcf 898560DB movl %eax, -9376(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 442
+
+
+ 14425 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 14426 .loc 2 741 0
+ 14427 cdd5 C7857CF5 movl $0, -2692(%rbp)
+ 14427 FFFF0000
+ 14427 0000
+ 14428 cddf EB36 jmp .L214
+ 14429 .L215:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 14430 .loc 2 742 0
+ 14431 cde1 8B8D7CF5 movl -2692(%rbp), %ecx
+ 14431 FFFF
+ 14432 cde7 8B857CF5 movl -2692(%rbp), %eax
+ 14432 FFFF
+ 14433 cded 89C0 mov %eax, %eax
+ 14434 cdef 0FB68405 movzbl -9376(%rbp,%rax), %eax
+ 14434 60DBFFFF
+ 14435 cdf7 0FB6C0 movzbl %al, %eax
+ 14436 cdfa 89C2 mov %eax, %edx
+ 14437 cdfc 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 14437 000000
+ 14438 ce03 0FB61402 movzbl (%rdx,%rax), %edx
+ 14439 ce07 89C8 mov %ecx, %eax
+ 14440 ce09 88940560 movb %dl, -9376(%rbp,%rax)
+ 14440 DBFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 14441 .loc 2 741 0
+ 14442 ce10 83857CF5 addl $1, -2692(%rbp)
+ 14442 FFFF01
+ 14443 .L214:
+ 14444 ce17 83BD7CF5 cmpl $3, -2692(%rbp)
+ 14444 FFFF03
+ 14445 ce1e 76C1 jbe .L215
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 14446 .loc 2 743 0
+ 14447 ce20 8B8560DB movl -9376(%rbp), %eax
+ 14447 FFFF
+ 14448 .LBE3649:
+ 14449 .LBE3648:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 14450 .loc 2 1657 0
+ 14451 ce26 898574F5 movl %eax, -2700(%rbp)
+ 14451 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 14452 .loc 2 1659 0
+ 14453 ce2c 8B8574F5 movl -2700(%rbp), %eax
+ 14453 FFFF
+ 14454 ce32 89857CDB movl %eax, -9348(%rbp)
+ 14454 FFFF
+ 14455 ce38 8B857CDB movl -9348(%rbp), %eax
+ 14455 FFFF
+ 14456 ce3e 898578DB movl %eax, -9352(%rbp)
+ 14456 FFFF
+ 14457 ce44 8B8578DB movl -9352(%rbp), %eax
+ 14457 FFFF
+ 14458 ce4a 898574DB movl %eax, -9356(%rbp)
+ 14458 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 443
+
+
+ 14459 ce50 8B8574DB movl -9356(%rbp), %eax
+ 14459 FFFF
+ 14460 ce56 898570DB movl %eax, -9360(%rbp)
+ 14460 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 14461 .loc 2 1660 0
+ 14462 ce5c F30F6F85 movdqu -9360(%rbp), %xmm0
+ 14462 70DBFFFF
+ 14463 .LBE3647:
+ 14464 .LBE3646:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(11); /* k44 : k45 : k46 : k47 */
+ 14465 .loc 2 1935 0
+ 14466 ce64 F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 14466 40DCFFFF
+ 14467 ce6c F30F6F85 movdqu -9168(%rbp), %xmm0
+ 14467 30DCFFFF
+ 14468 ce74 F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 14468 80F5FFFF
+ 14469 .LBB3650:
+ 14470 .LBB3651:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 14471 .loc 2 1565 0
+ 14472 ce7c F30F6F85 movdqu -2688(%rbp), %xmm0
+ 14472 80F5FFFF
+ 14473 ce84 660F7F85 movdqa %xmm0, -9968(%rbp)
+ 14473 10D9FFFF
+ 14474 ce8c 660F6F85 movdqa -9968(%rbp), %xmm0
+ 14474 10D9FFFF
+ 14475 ce94 F30F7F85 movdqu %xmm0, -2672(%rbp)
+ 14475 90F5FFFF
+ 14476 .LBB3652:
+ 14477 .LBB3653:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14478 .loc 2 1278 0
+ 14479 ce9c 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 14479 00000000
+ 14480 cea4 F30F6F8D movdqu -2672(%rbp), %xmm1
+ 14480 90F5FFFF
+ 14481 ceac F30F7F8D movdqu %xmm1, -2640(%rbp)
+ 14481 B0F5FFFF
+ 14482 ceb4 F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 14482 A0F5FFFF
+ 14483 cebc F30F6F85 movdqu -2640(%rbp), %xmm0
+ 14483 B0F5FFFF
+ 14484 cec4 F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 14484 D0F5FFFF
+ 14485 cecc F30F6F85 movdqu -2656(%rbp), %xmm0
+ 14485 A0F5FFFF
+ 14486 ced4 F30F7F85 movdqu %xmm0, -2624(%rbp)
+ 14486 C0F5FFFF
+ 14487 .LBB3654:
+ 14488 .LBB3655:
+ 14489 .LBB3656:
+ 14490 .LBB3657:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14491 .loc 3 529 0
+ 14492 cedc F30F6F8D movdqu -2624(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 444
+
+
+ 14492 C0F5FFFF
+ 14493 cee4 F30F6F85 movdqu -2608(%rbp), %xmm0
+ 14493 D0F5FFFF
+ 14494 ceec 660F3800 pshufb %xmm1, %xmm0
+ 14494 C1
+ 14495 .LBE3657:
+ 14496 .LBE3656:
+ 14497 .LBE3655:
+ 14498 .LBE3654:
+ 14499 .LBE3653:
+ 14500 .LBE3652:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14501 .loc 2 1567 0
+ 14502 cef1 660F7F85 movdqa %xmm0, -9968(%rbp)
+ 14502 10D9FFFF
+ 14503 cef9 660F6F85 movdqa -9968(%rbp), %xmm0
+ 14503 10D9FFFF
+ 14504 cf01 660FEF85 pxor -2688(%rbp), %xmm0
+ 14504 80F5FFFF
+ 14505 cf09 F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 14505 80F5FFFF
+ 14506 cf11 660F6F85 movdqa -9968(%rbp), %xmm0
+ 14506 10D9FFFF
+ 14507 cf19 F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 14507 E0F5FFFF
+ 14508 .LBB3658:
+ 14509 .LBB3659:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14510 .loc 2 1278 0
+ 14511 cf21 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 14511 00000000
+ 14512 cf29 F30F6F8D movdqu -2592(%rbp), %xmm1
+ 14512 E0F5FFFF
+ 14513 cf31 F30F7F8D movdqu %xmm1, -2560(%rbp)
+ 14513 00F6FFFF
+ 14514 cf39 F30F7F85 movdqu %xmm0, -2576(%rbp)
+ 14514 F0F5FFFF
+ 14515 cf41 F30F6F85 movdqu -2560(%rbp), %xmm0
+ 14515 00F6FFFF
+ 14516 cf49 F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 14516 20F6FFFF
+ 14517 cf51 F30F6F85 movdqu -2576(%rbp), %xmm0
+ 14517 F0F5FFFF
+ 14518 cf59 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 14518 10F6FFFF
+ 14519 .LBB3660:
+ 14520 .LBB3661:
+ 14521 .LBB3662:
+ 14522 .LBB3663:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14523 .loc 3 529 0
+ 14524 cf61 F30F6F8D movdqu -2544(%rbp), %xmm1
+ 14524 10F6FFFF
+ 14525 cf69 F30F6F85 movdqu -2528(%rbp), %xmm0
+ 14525 20F6FFFF
+ 14526 cf71 660F3800 pshufb %xmm1, %xmm0
+ 14526 C1
+
GAS LISTING /tmp/ccjbMjHD.s page 445
+
+
+ 14527 .LBE3663:
+ 14528 .LBE3662:
+ 14529 .LBE3661:
+ 14530 .LBE3660:
+ 14531 .LBE3659:
+ 14532 .LBE3658:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14533 .loc 2 1568 0
+ 14534 cf76 660F7F85 movdqa %xmm0, -9968(%rbp)
+ 14534 10D9FFFF
+ 14535 cf7e 660F6F85 movdqa -9968(%rbp), %xmm0
+ 14535 10D9FFFF
+ 14536 cf86 660FEF85 pxor -2688(%rbp), %xmm0
+ 14536 80F5FFFF
+ 14537 cf8e F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 14537 80F5FFFF
+ 14538 cf96 660F6F85 movdqa -9968(%rbp), %xmm0
+ 14538 10D9FFFF
+ 14539 cf9e F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 14539 30F6FFFF
+ 14540 .LBB3664:
+ 14541 .LBB3665:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14542 .loc 2 1278 0
+ 14543 cfa6 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 14543 00000000
+ 14544 cfae F30F6F8D movdqu -2512(%rbp), %xmm1
+ 14544 30F6FFFF
+ 14545 cfb6 F30F7F8D movdqu %xmm1, -2480(%rbp)
+ 14545 50F6FFFF
+ 14546 cfbe F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 14546 40F6FFFF
+ 14547 cfc6 F30F6F85 movdqu -2480(%rbp), %xmm0
+ 14547 50F6FFFF
+ 14548 cfce F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 14548 70F6FFFF
+ 14549 cfd6 F30F6F85 movdqu -2496(%rbp), %xmm0
+ 14549 40F6FFFF
+ 14550 cfde F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 14550 60F6FFFF
+ 14551 .LBB3666:
+ 14552 .LBB3667:
+ 14553 .LBB3668:
+ 14554 .LBB3669:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14555 .loc 3 529 0
+ 14556 cfe6 F30F6F8D movdqu -2464(%rbp), %xmm1
+ 14556 60F6FFFF
+ 14557 cfee F30F6F85 movdqu -2448(%rbp), %xmm0
+ 14557 70F6FFFF
+ 14558 cff6 660F3800 pshufb %xmm1, %xmm0
+ 14558 C1
+ 14559 .LBE3669:
+ 14560 .LBE3668:
+ 14561 .LBE3667:
+ 14562 .LBE3666:
+ 14563 .LBE3665:
+
GAS LISTING /tmp/ccjbMjHD.s page 446
+
+
+ 14564 .LBE3664:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14565 .loc 2 1569 0
+ 14566 cffb 660F7F85 movdqa %xmm0, -9968(%rbp)
+ 14566 10D9FFFF
+ 14567 d003 660F6F85 movdqa -9968(%rbp), %xmm0
+ 14567 10D9FFFF
+ 14568 d00b 660FEF85 pxor -2688(%rbp), %xmm0
+ 14568 80F5FFFF
+ 14569 d013 F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 14569 80F5FFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 14570 .loc 2 1571 0
+ 14571 d01b F30F6F85 movdqu -2688(%rbp), %xmm0
+ 14571 80F5FFFF
+ 14572 .LBE3651:
+ 14573 .LBE3650:
+ 14574 .loc 2 1935 0
+ 14575 d023 F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 14575 30DCFFFF
+ 14576 d02b F30F6F85 movdqu -9168(%rbp), %xmm0
+ 14576 30DCFFFF
+ 14577 d033 F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 14577 90F6FFFF
+ 14578 d03b F30F6F85 movdqu -9152(%rbp), %xmm0
+ 14578 40DCFFFF
+ 14579 d043 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 14579 80F6FFFF
+ 14580 .LBB3670:
+ 14581 .LBB3671:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 14582 .loc 2 178 0
+ 14583 d04b F30F6F85 movdqu -2432(%rbp), %xmm0
+ 14583 80F6FFFF
+ 14584 d053 F30F6F8D movdqu -2416(%rbp), %xmm1
+ 14584 90F6FFFF
+ 14585 d05b 660FEFC1 pxor %xmm1, %xmm0
+ 14586 .LBE3671:
+ 14587 .LBE3670:
+ 14588 .loc 2 1935 0
+ 14589 d05f F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 14589 30DCFFFF
+ 14590 d067 488B8598 movq -9832(%rbp), %rax
+ 14590 D9FFFF
+ 14591 d06e 4805B000 addq $176, %rax
+ 14591 0000
+ 14592 d074 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 14592 30DCFFFF
+ 14593 d07c F30F7F00 movdqu %xmm0, (%rax)
+ 14594 d080 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 14594 30DCFFFF
+ 14595 d088 F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 14595 B0F6FFFF
+ 14596 .LBB3672:
+ 14597 .LBB3673:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 14598 .loc 2 1681 0
+
GAS LISTING /tmp/ccjbMjHD.s page 447
+
+
+ 14599 d090 B8200000 movl $32, %eax
+ 14599 00
+ 14600 d095 660F6F05 movdqa vec_00(%rip), %xmm0
+ 14600 00000000
+ 14601 d09d F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 14601 D0F6FFFF
+ 14602 d0a5 8985CCF6 movl %eax, -2356(%rbp)
+ 14602 FFFF
+ 14603 d0ab F30F6F85 movdqu -2352(%rbp), %xmm0
+ 14603 D0F6FFFF
+ 14604 d0b3 F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 14604 F0F6FFFF
+ 14605 d0bb 8B85CCF6 movl -2356(%rbp), %eax
+ 14605 FFFF
+ 14606 d0c1 8985ECF6 movl %eax, -2324(%rbp)
+ 14606 FFFF
+ 14607 .LBB3674:
+ 14608 .LBB3675:
+ 14609 .LBB3676:
+ 14610 .LBB3677:
+ 14611 .loc 3 598 0
+ 14612 d0c7 8B85ECF6 movl -2324(%rbp), %eax
+ 14612 FFFF
+ 14613 d0cd F30F6F85 movdqu -2320(%rbp), %xmm0
+ 14613 F0F6FFFF
+ 14614 d0d5 660F3A22 pinsrd $3, %eax, %xmm0
+ 14614 C003
+ 14615 .LBE3677:
+ 14616 .LBE3676:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 14617 .loc 2 519 0
+ 14618 d0db F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 14618 D0F6FFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 14619 .loc 2 526 0
+ 14620 d0e3 F30F6F85 movdqu -2352(%rbp), %xmm0
+ 14620 D0F6FFFF
+ 14621 .LBE3675:
+ 14622 .LBE3674:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 14623 .loc 2 1681 0
+ 14624 d0eb 660F7F85 movdqa %xmm0, -9936(%rbp)
+ 14624 30D9FFFF
+ 14625 d0f3 F30F6F85 movdqu -2384(%rbp), %xmm0
+ 14625 B0F6FFFF
+ 14626 d0fb F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 14626 00F7FFFF
+ 14627 d103 F30F6F85 movdqu -2304(%rbp), %xmm0
+ 14627 00F7FFFF
+ 14628 d10b F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 14628 20F7FFFF
+ 14629 d113 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 14629 000000
+ 14630 d11a 48898518 movq %rax, -2280(%rbp)
+ 14630 F7FFFF
+ 14631 .LBB3678:
+ 14632 .LBB3679:
+
GAS LISTING /tmp/ccjbMjHD.s page 448
+
+
+ 14633 .LBB3680:
+ 14634 .LBB3681:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 14635 .loc 2 851 0
+ 14636 d121 660F6F05 movdqa vec_00(%rip), %xmm0
+ 14636 00000000
+ 14637 d129 F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 14637 40F7FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 14638 .loc 2 854 0
+ 14639 d131 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 14639 00000000
+ 14640 d139 F30F6F8D movdqu -2272(%rbp), %xmm1
+ 14640 20F7FFFF
+ 14641 d141 F30F7F8D movdqu %xmm1, -2160(%rbp)
+ 14641 90F7FFFF
+ 14642 d149 F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 14642 80F7FFFF
+ 14643 .LBB3682:
+ 14644 .LBB3683:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 14645 .loc 2 206 0
+ 14646 d151 F30F6F85 movdqu -2176(%rbp), %xmm0
+ 14646 80F7FFFF
+ 14647 d159 F30F6F8D movdqu -2160(%rbp), %xmm1
+ 14647 90F7FFFF
+ 14648 d161 660FDBC1 pand %xmm1, %xmm0
+ 14649 .LBE3683:
+ 14650 .LBE3682:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 14651 .loc 2 854 0
+ 14652 d165 F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 14652 70F7FFFF
+ 14653 d16d F30F6F85 movdqu -2272(%rbp), %xmm0
+ 14653 20F7FFFF
+ 14654 d175 F30F7F85 movdqu %xmm0, -2128(%rbp)
+ 14654 B0F7FFFF
+ 14655 .LBB3684:
+ 14656 .LBB3685:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 14657 .loc 3 433 0
+ 14658 d17d F30F6F85 movdqu -2128(%rbp), %xmm0
+ 14658 B0F7FFFF
+ 14659 d185 660F72D0 psrld $4, %xmm0
+ 14659 04
+ 14660 .LBE3685:
+ 14661 .LBE3684:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 14662 .loc 2 857 0
+ 14663 d18a F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 14663 60F7FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14664 .loc 2 859 0
+ 14665 d192 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 14665 00000000
+ 14666 d19a F30F6F8D movdqu -2208(%rbp), %xmm1
+ 14666 60F7FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 449
+
+
+ 14667 d1a2 F30F7F8D movdqu %xmm1, -2096(%rbp)
+ 14667 D0F7FFFF
+ 14668 d1aa F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 14668 C0F7FFFF
+ 14669 .LBB3686:
+ 14670 .LBB3687:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 14671 .loc 2 206 0
+ 14672 d1b2 F30F6F85 movdqu -2112(%rbp), %xmm0
+ 14672 C0F7FFFF
+ 14673 d1ba F30F6F8D movdqu -2096(%rbp), %xmm1
+ 14673 D0F7FFFF
+ 14674 d1c2 660FDBC1 pand %xmm1, %xmm0
+ 14675 .LBE3687:
+ 14676 .LBE3686:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14677 .loc 2 859 0
+ 14678 d1c6 F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 14678 60F7FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 14679 .loc 2 866 0
+ 14680 d1ce C7853CF7 movl $0, -2244(%rbp)
+ 14680 FFFF0000
+ 14680 0000
+ 14681 d1d8 E9BE0100 jmp .L216
+ 14681 00
+ 14682 .L217:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 14683 .loc 2 868 0
+ 14684 d1dd 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 14684 00000000
+ 14685 d1e5 F30F7F85 movdqu %xmm0, -2064(%rbp)
+ 14685 F0F7FFFF
+ 14686 d1ed F30F6F85 movdqu -2208(%rbp), %xmm0
+ 14686 60F7FFFF
+ 14687 d1f5 F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 14687 E0F7FFFF
+ 14688 d1fd F30F6F85 movdqu -2064(%rbp), %xmm0
+ 14688 F0F7FFFF
+ 14689 d205 F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 14689 10F8FFFF
+ 14690 d20d F30F6F85 movdqu -2080(%rbp), %xmm0
+ 14690 E0F7FFFF
+ 14691 d215 F30F7F85 movdqu %xmm0, -2048(%rbp)
+ 14691 00F8FFFF
+ 14692 .LBB3688:
+ 14693 .LBB3689:
+ 14694 .LBB3690:
+ 14695 .LBB3691:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14696 .loc 3 529 0
+ 14697 d21d F30F6F8D movdqu -2048(%rbp), %xmm1
+ 14697 00F8FFFF
+ 14698 d225 F30F6F85 movdqu -2032(%rbp), %xmm0
+ 14698 10F8FFFF
+ 14699 d22d 660F3800 pshufb %xmm1, %xmm0
+ 14699 C1
+
GAS LISTING /tmp/ccjbMjHD.s page 450
+
+
+ 14700 .LBE3691:
+ 14701 .LBE3690:
+ 14702 .LBE3689:
+ 14703 .LBE3688:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 14704 .loc 2 868 0
+ 14705 d232 F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 14705 50F7FFFF
+ 14706 d23a F30F6F85 movdqu -2192(%rbp), %xmm0
+ 14706 70F7FFFF
+ 14707 d242 F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 14707 30F8FFFF
+ 14708 d24a F30F6F85 movdqu -2224(%rbp), %xmm0
+ 14708 50F7FFFF
+ 14709 d252 F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 14709 20F8FFFF
+ 14710 .LBB3692:
+ 14711 .LBB3693:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 14712 .loc 2 234 0
+ 14713 d25a F30F6F85 movdqu -2016(%rbp), %xmm0
+ 14713 20F8FFFF
+ 14714 d262 F30F6F8D movdqu -2000(%rbp), %xmm1
+ 14714 30F8FFFF
+ 14715 d26a 660FEBC1 por %xmm1, %xmm0
+ 14716 .LBE3693:
+ 14717 .LBE3692:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 14718 .loc 2 870 0
+ 14719 d26e F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 14719 50F7FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 14720 .loc 2 872 0
+ 14721 d276 8B853CF7 mov -2244(%rbp), %eax
+ 14721 FFFF
+ 14722 d27c 48C1E004 salq $4, %rax
+ 14723 d280 48038518 addq -2280(%rbp), %rax
+ 14723 F7FFFF
+ 14724 d287 660F6F00 movdqa (%rax), %xmm0
+ 14725 d28b F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 14725 50F8FFFF
+ 14726 d293 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 14726 50F7FFFF
+ 14727 d29b F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 14727 40F8FFFF
+ 14728 d2a3 F30F6F85 movdqu -1968(%rbp), %xmm0
+ 14728 50F8FFFF
+ 14729 d2ab F30F7F85 movdqu %xmm0, -1936(%rbp)
+ 14729 70F8FFFF
+ 14730 d2b3 F30F6F85 movdqu -1984(%rbp), %xmm0
+ 14730 40F8FFFF
+ 14731 d2bb F30F7F85 movdqu %xmm0, -1952(%rbp)
+ 14731 60F8FFFF
+ 14732 .LBB3694:
+ 14733 .LBB3695:
+ 14734 .LBB3696:
+ 14735 .LBB3697:
+
GAS LISTING /tmp/ccjbMjHD.s page 451
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14736 .loc 3 529 0
+ 14737 d2c3 F30F6F8D movdqu -1952(%rbp), %xmm1
+ 14737 60F8FFFF
+ 14738 d2cb F30F6F85 movdqu -1936(%rbp), %xmm0
+ 14738 70F8FFFF
+ 14739 d2d3 660F3800 pshufb %xmm1, %xmm0
+ 14739 C1
+ 14740 .LBE3697:
+ 14741 .LBE3696:
+ 14742 .LBE3695:
+ 14743 .LBE3694:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 14744 .loc 2 872 0
+ 14745 d2d8 F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 14745 50F7FFFF
+ 14746 d2e0 F30F6F85 movdqu -2240(%rbp), %xmm0
+ 14746 40F7FFFF
+ 14747 d2e8 F30F7F85 movdqu %xmm0, -1904(%rbp)
+ 14747 90F8FFFF
+ 14748 d2f0 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 14748 50F7FFFF
+ 14749 d2f8 F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 14749 80F8FFFF
+ 14750 .LBB3698:
+ 14751 .LBB3699:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 14752 .loc 2 234 0
+ 14753 d300 F30F6F85 movdqu -1920(%rbp), %xmm0
+ 14753 80F8FFFF
+ 14754 d308 F30F6F8D movdqu -1904(%rbp), %xmm1
+ 14754 90F8FFFF
+ 14755 d310 660FEBC1 por %xmm1, %xmm0
+ 14756 .LBE3699:
+ 14757 .LBE3698:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 14758 .loc 2 874 0
+ 14759 d314 F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 14759 40F7FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14760 .loc 2 876 0
+ 14761 d31c 660F6F05 movdqa vec_01(%rip), %xmm0
+ 14761 00000000
+ 14762 d324 F30F6F8D movdqu -2208(%rbp), %xmm1
+ 14762 60F7FFFF
+ 14763 d32c F30F7F8D movdqu %xmm1, -1872(%rbp)
+ 14763 B0F8FFFF
+ 14764 d334 F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 14764 A0F8FFFF
+ 14765 .LBB3700:
+ 14766 .LBB3701:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 14767 .loc 2 290 0
+ 14768 d33c F30F6F8D movdqu -1888(%rbp), %xmm1
+ 14768 A0F8FFFF
+ 14769 d344 F30F6F85 movdqu -1872(%rbp), %xmm0
+ 14769 B0F8FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 452
+
+
+ 14770 d34c 660FF8C1 psubb %xmm1, %xmm0
+ 14771 .LBE3701:
+ 14772 .LBE3700:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14773 .loc 2 876 0
+ 14774 d350 F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 14774 60F7FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14775 .loc 2 878 0
+ 14776 d358 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 14776 00000000
+ 14777 d360 F30F6F8D movdqu -2208(%rbp), %xmm1
+ 14777 60F7FFFF
+ 14778 d368 F30F7F8D movdqu %xmm1, -1840(%rbp)
+ 14778 D0F8FFFF
+ 14779 d370 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 14779 C0F8FFFF
+ 14780 .LBB3702:
+ 14781 .LBB3703:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 14782 .loc 2 206 0
+ 14783 d378 F30F6F85 movdqu -1856(%rbp), %xmm0
+ 14783 C0F8FFFF
+ 14784 d380 F30F6F8D movdqu -1840(%rbp), %xmm1
+ 14784 D0F8FFFF
+ 14785 d388 660FDBC1 pand %xmm1, %xmm0
+ 14786 .LBE3703:
+ 14787 .LBE3702:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14788 .loc 2 878 0
+ 14789 d38c F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 14789 60F7FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 14790 .loc 2 866 0
+ 14791 d394 83853CF7 addl $1, -2244(%rbp)
+ 14791 FFFF01
+ 14792 .L216:
+ 14793 d39b 83BD3CF7 cmpl $15, -2244(%rbp)
+ 14793 FFFF0F
+ 14794 d3a2 0F8635FE jbe .L217
+ 14794 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 14795 .loc 2 882 0
+ 14796 d3a8 F30F6F85 movdqu -2240(%rbp), %xmm0
+ 14796 40F7FFFF
+ 14797 .LBE3681:
+ 14798 .LBE3680:
+ 14799 .LBE3679:
+ 14800 .LBE3678:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 14801 .loc 2 1682 0
+ 14802 d3b0 660F7F85 movdqa %xmm0, -9952(%rbp)
+ 14802 20D9FFFF
+ 14803 .LBB3704:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 14804 .loc 2 1683 0
+ 14805 d3b8 660F6F85 movdqa -9952(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 453
+
+
+ 14805 20D9FFFF
+ 14806 d3c0 F30F7F85 movdqu %xmm0, -9296(%rbp)
+ 14806 B0DBFFFF
+ 14807 d3c8 E8000000 call KDbgWriterGet at PLT
+ 14807 00
+ 14808 d3cd 4885C0 testq %rax, %rax
+ 14809 d3d0 7479 je .L219
+ 14810 d3d2 BF010000 movl $1, %edi
+ 14810 00
+ 14811 d3d7 E8000000 call KDbgCondToFlag at PLT
+ 14811 00
+ 14812 d3dc 4889C6 movq %rax, %rsi
+ 14813 d3df BF100000 movl $16, %edi
+ 14813 00
+ 14814 d3e4 E8000000 call KDbgTestModConds at PLT
+ 14814 00
+ 14815 d3e9 84C0 testb %al, %al
+ 14816 d3eb 745E je .L219
+ 14817 d3ed 8B85BCDB movl -9284(%rbp), %eax
+ 14817 FFFF
+ 14818 d3f3 89C7 movl %eax, %edi
+ 14819 d3f5 E8062CFF call bswap_32
+ 14819 FF
+ 14820 d3fa 4189C5 movl %eax, %r13d
+ 14821 d3fd 8B85B8DB movl -9288(%rbp), %eax
+ 14821 FFFF
+ 14822 d403 89C7 movl %eax, %edi
+ 14823 d405 E8F62BFF call bswap_32
+ 14823 FF
+ 14824 d40a 4189C4 movl %eax, %r12d
+ 14825 d40d 8B85B4DB movl -9292(%rbp), %eax
+ 14825 FFFF
+ 14826 d413 89C7 movl %eax, %edi
+ 14827 d415 E8E62BFF call bswap_32
+ 14827 FF
+ 14828 d41a 89C3 movl %eax, %ebx
+ 14829 d41c 8B85B0DB movl -9296(%rbp), %eax
+ 14829 FFFF
+ 14830 d422 89C7 movl %eax, %edi
+ 14831 d424 E8D72BFF call bswap_32
+ 14831 FF
+ 14832 d429 4589E9 movl %r13d, %r9d
+ 14833 d42c 4589E0 movl %r12d, %r8d
+ 14834 d42f 89D9 movl %ebx, %ecx
+ 14835 d431 89C2 movl %eax, %edx
+ 14836 d433 488D3500 leaq .LC0(%rip), %rsi
+ 14836 000000
+ 14837 d43a 488D3D00 leaq .LC1(%rip), %rdi
+ 14837 000000
+ 14838 d441 B8000000 movl $0, %eax
+ 14838 00
+ 14839 d446 E8000000 call KDbgMsg at PLT
+ 14839 00
+ 14840 .L219:
+ 14841 d44b 660F6F85 movdqa -9952(%rbp), %xmm0
+ 14841 20D9FFFF
+ 14842 d453 F30F7F85 movdqu %xmm0, -1824(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 454
+
+
+ 14842 E0F8FFFF
+ 14843 .LBE3704:
+ 14844 .LBB3705:
+ 14845 .LBB3706:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14846 .loc 2 667 0
+ 14847 d45b 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 14847 00000000
+ 14848 d463 F30F6F8D movdqu -1824(%rbp), %xmm1
+ 14848 E0F8FFFF
+ 14849 d46b F30F7F8D movdqu %xmm1, -1792(%rbp)
+ 14849 00F9FFFF
+ 14850 d473 F30F7F85 movdqu %xmm0, -1808(%rbp)
+ 14850 F0F8FFFF
+ 14851 d47b F30F6F85 movdqu -1792(%rbp), %xmm0
+ 14851 00F9FFFF
+ 14852 d483 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 14852 20F9FFFF
+ 14853 d48b F30F6F85 movdqu -1808(%rbp), %xmm0
+ 14853 F0F8FFFF
+ 14854 d493 F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 14854 10F9FFFF
+ 14855 .LBB3707:
+ 14856 .LBB3708:
+ 14857 .LBB3709:
+ 14858 .LBB3710:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14859 .loc 3 529 0
+ 14860 d49b F30F6F8D movdqu -1776(%rbp), %xmm1
+ 14860 10F9FFFF
+ 14861 d4a3 F30F6F85 movdqu -1760(%rbp), %xmm0
+ 14861 20F9FFFF
+ 14862 d4ab 660F3800 pshufb %xmm1, %xmm0
+ 14862 C1
+ 14863 .LBE3710:
+ 14864 .LBE3709:
+ 14865 .LBE3708:
+ 14866 .LBE3707:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14867 .loc 2 667 0
+ 14868 d4b0 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 14868 E0F8FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 14869 .loc 2 668 0
+ 14870 d4b8 F30F6F85 movdqu -1824(%rbp), %xmm0
+ 14870 E0F8FFFF
+ 14871 .LBE3706:
+ 14872 .LBE3705:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 14873 .loc 2 1684 0
+ 14874 d4c0 660F7F85 movdqa %xmm0, -9952(%rbp)
+ 14874 20D9FFFF
+ 14875 .LBB3711:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 14876 .loc 2 1685 0
+ 14877 d4c8 660F6F85 movdqa -9952(%rbp), %xmm0
+ 14877 20D9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 455
+
+
+ 14878 d4d0 F30F7F85 movdqu %xmm0, -9312(%rbp)
+ 14878 A0DBFFFF
+ 14879 d4d8 E8000000 call KDbgWriterGet at PLT
+ 14879 00
+ 14880 d4dd 4885C0 testq %rax, %rax
+ 14881 d4e0 7479 je .L221
+ 14882 d4e2 BF010000 movl $1, %edi
+ 14882 00
+ 14883 d4e7 E8000000 call KDbgCondToFlag at PLT
+ 14883 00
+ 14884 d4ec 4889C6 movq %rax, %rsi
+ 14885 d4ef BF100000 movl $16, %edi
+ 14885 00
+ 14886 d4f4 E8000000 call KDbgTestModConds at PLT
+ 14886 00
+ 14887 d4f9 84C0 testb %al, %al
+ 14888 d4fb 745E je .L221
+ 14889 d4fd 8B85ACDB movl -9300(%rbp), %eax
+ 14889 FFFF
+ 14890 d503 89C7 movl %eax, %edi
+ 14891 d505 E8F62AFF call bswap_32
+ 14891 FF
+ 14892 d50a 4189C5 movl %eax, %r13d
+ 14893 d50d 8B85A8DB movl -9304(%rbp), %eax
+ 14893 FFFF
+ 14894 d513 89C7 movl %eax, %edi
+ 14895 d515 E8E62AFF call bswap_32
+ 14895 FF
+ 14896 d51a 4189C4 movl %eax, %r12d
+ 14897 d51d 8B85A4DB movl -9308(%rbp), %eax
+ 14897 FFFF
+ 14898 d523 89C7 movl %eax, %edi
+ 14899 d525 E8D62AFF call bswap_32
+ 14899 FF
+ 14900 d52a 89C3 movl %eax, %ebx
+ 14901 d52c 8B85A0DB movl -9312(%rbp), %eax
+ 14901 FFFF
+ 14902 d532 89C7 movl %eax, %edi
+ 14903 d534 E8C72AFF call bswap_32
+ 14903 FF
+ 14904 d539 4589E9 movl %r13d, %r9d
+ 14905 d53c 4589E0 movl %r12d, %r8d
+ 14906 d53f 89D9 movl %ebx, %ecx
+ 14907 d541 89C2 movl %eax, %edx
+ 14908 d543 488D3500 leaq .LC2(%rip), %rsi
+ 14908 000000
+ 14909 d54a 488D3D00 leaq .LC1(%rip), %rdi
+ 14909 000000
+ 14910 d551 B8000000 movl $0, %eax
+ 14910 00
+ 14911 d556 E8000000 call KDbgMsg at PLT
+ 14911 00
+ 14912 .L221:
+ 14913 d55b 660F6F85 movdqa -9952(%rbp), %xmm0
+ 14913 20D9FFFF
+ 14914 d563 F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 14914 40F9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 456
+
+
+ 14915 d56b 660F6F85 movdqa -9936(%rbp), %xmm0
+ 14915 30D9FFFF
+ 14916 d573 F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 14916 30F9FFFF
+ 14917 .LBE3711:
+ 14918 .LBB3712:
+ 14919 .LBB3713:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 14920 .loc 2 178 0
+ 14921 d57b F30F6F85 movdqu -1744(%rbp), %xmm0
+ 14921 30F9FFFF
+ 14922 d583 F30F6F8D movdqu -1728(%rbp), %xmm1
+ 14922 40F9FFFF
+ 14923 d58b 660FEFC1 pxor %xmm1, %xmm0
+ 14924 .LBE3713:
+ 14925 .LBE3712:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 14926 .loc 2 1686 0
+ 14927 d58f 660F7F85 movdqa %xmm0, -9952(%rbp)
+ 14927 20D9FFFF
+ 14928 .LBB3714:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 14929 .loc 2 1687 0
+ 14930 d597 660F6F85 movdqa -9952(%rbp), %xmm0
+ 14930 20D9FFFF
+ 14931 d59f F30F7F85 movdqu %xmm0, -9328(%rbp)
+ 14931 90DBFFFF
+ 14932 d5a7 E8000000 call KDbgWriterGet at PLT
+ 14932 00
+ 14933 d5ac 4885C0 testq %rax, %rax
+ 14934 d5af 7479 je .L223
+ 14935 d5b1 BF010000 movl $1, %edi
+ 14935 00
+ 14936 d5b6 E8000000 call KDbgCondToFlag at PLT
+ 14936 00
+ 14937 d5bb 4889C6 movq %rax, %rsi
+ 14938 d5be BF100000 movl $16, %edi
+ 14938 00
+ 14939 d5c3 E8000000 call KDbgTestModConds at PLT
+ 14939 00
+ 14940 d5c8 84C0 testb %al, %al
+ 14941 d5ca 745E je .L223
+ 14942 d5cc 8B859CDB movl -9316(%rbp), %eax
+ 14942 FFFF
+ 14943 d5d2 89C7 movl %eax, %edi
+ 14944 d5d4 E8272AFF call bswap_32
+ 14944 FF
+ 14945 d5d9 4189C5 movl %eax, %r13d
+ 14946 d5dc 8B8598DB movl -9320(%rbp), %eax
+ 14946 FFFF
+ 14947 d5e2 89C7 movl %eax, %edi
+ 14948 d5e4 E8172AFF call bswap_32
+ 14948 FF
+ 14949 d5e9 4189C4 movl %eax, %r12d
+ 14950 d5ec 8B8594DB movl -9324(%rbp), %eax
+ 14950 FFFF
+ 14951 d5f2 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 457
+
+
+ 14952 d5f4 E8072AFF call bswap_32
+ 14952 FF
+ 14953 d5f9 89C3 movl %eax, %ebx
+ 14954 d5fb 8B8590DB movl -9328(%rbp), %eax
+ 14954 FFFF
+ 14955 d601 89C7 movl %eax, %edi
+ 14956 d603 E8F829FF call bswap_32
+ 14956 FF
+ 14957 d608 4589E9 movl %r13d, %r9d
+ 14958 d60b 4589E0 movl %r12d, %r8d
+ 14959 d60e 89D9 movl %ebx, %ecx
+ 14960 d610 89C2 movl %eax, %edx
+ 14961 d612 488D3500 leaq .LC3(%rip), %rsi
+ 14961 000000
+ 14962 d619 488D3D00 leaq .LC1(%rip), %rdi
+ 14962 000000
+ 14963 d620 B8000000 movl $0, %eax
+ 14963 00
+ 14964 d625 E8000000 call KDbgMsg at PLT
+ 14964 00
+ 14965 .L223:
+ 14966 d62a 660F6F85 movdqa -9952(%rbp), %xmm0
+ 14966 20D9FFFF
+ 14967 d632 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 14967 50F9FFFF
+ 14968 d63a F30F6F85 movdqu -1712(%rbp), %xmm0
+ 14968 50F9FFFF
+ 14969 d642 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 14969 70F9FFFF
+ 14970 .LBE3714:
+ 14971 .LBB3715:
+ 14972 .LBB3716:
+ 14973 .LBB3717:
+ 14974 .LBB3718:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 14975 .loc 3 450 0
+ 14976 d64a F30F6F85 movdqu -1680(%rbp), %xmm0
+ 14976 70F9FFFF
+ 14977 d652 660F70C0 pshufd $255, %xmm0, %xmm0
+ 14977 FF
+ 14978 .LBE3718:
+ 14979 .LBE3717:
+ 14980 .LBE3716:
+ 14981 .LBE3715:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 14982 .loc 2 1688 0
+ 14983 d657 660F7F85 movdqa %xmm0, -9952(%rbp)
+ 14983 20D9FFFF
+ 14984 .LBB3719:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 14985 .loc 2 1689 0
+ 14986 d65f 660F6F85 movdqa -9952(%rbp), %xmm0
+ 14986 20D9FFFF
+ 14987 d667 F30F7F85 movdqu %xmm0, -9344(%rbp)
+ 14987 80DBFFFF
+ 14988 d66f E8000000 call KDbgWriterGet at PLT
+ 14988 00
+
GAS LISTING /tmp/ccjbMjHD.s page 458
+
+
+ 14989 d674 4885C0 testq %rax, %rax
+ 14990 d677 7479 je .L225
+ 14991 d679 BF010000 movl $1, %edi
+ 14991 00
+ 14992 d67e E8000000 call KDbgCondToFlag at PLT
+ 14992 00
+ 14993 d683 4889C6 movq %rax, %rsi
+ 14994 d686 BF100000 movl $16, %edi
+ 14994 00
+ 14995 d68b E8000000 call KDbgTestModConds at PLT
+ 14995 00
+ 14996 d690 84C0 testb %al, %al
+ 14997 d692 745E je .L225
+ 14998 d694 8B858CDB movl -9332(%rbp), %eax
+ 14998 FFFF
+ 14999 d69a 89C7 movl %eax, %edi
+ 15000 d69c E85F29FF call bswap_32
+ 15000 FF
+ 15001 d6a1 4189C5 movl %eax, %r13d
+ 15002 d6a4 8B8588DB movl -9336(%rbp), %eax
+ 15002 FFFF
+ 15003 d6aa 89C7 movl %eax, %edi
+ 15004 d6ac E84F29FF call bswap_32
+ 15004 FF
+ 15005 d6b1 4189C4 movl %eax, %r12d
+ 15006 d6b4 8B8584DB movl -9340(%rbp), %eax
+ 15006 FFFF
+ 15007 d6ba 89C7 movl %eax, %edi
+ 15008 d6bc E83F29FF call bswap_32
+ 15008 FF
+ 15009 d6c1 89C3 movl %eax, %ebx
+ 15010 d6c3 8B8580DB movl -9344(%rbp), %eax
+ 15010 FFFF
+ 15011 d6c9 89C7 movl %eax, %edi
+ 15012 d6cb E83029FF call bswap_32
+ 15012 FF
+ 15013 d6d0 4589E9 movl %r13d, %r9d
+ 15014 d6d3 4589E0 movl %r12d, %r8d
+ 15015 d6d6 89D9 movl %ebx, %ecx
+ 15016 d6d8 89C2 movl %eax, %edx
+ 15017 d6da 488D3500 leaq .LC4(%rip), %rsi
+ 15017 000000
+ 15018 d6e1 488D3D00 leaq .LC1(%rip), %rdi
+ 15018 000000
+ 15019 d6e8 B8000000 movl $0, %eax
+ 15019 00
+ 15020 d6ed E8000000 call KDbgMsg at PLT
+ 15020 00
+ 15021 .L225:
+ 15022 .LBE3719:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+ 15023 .loc 2 1690 0
+ 15024 d6f2 660F6F85 movdqa -9952(%rbp), %xmm0
+ 15024 20D9FFFF
+ 15025 .LBE3673:
+ 15026 .LBE3672:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(12,0x20); /* k48 : k49 : k50 : k51 */
+
GAS LISTING /tmp/ccjbMjHD.s page 459
+
+
+ 15027 .loc 2 1936 0
+ 15028 d6fa F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 15028 40DCFFFF
+ 15029 d702 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 15029 20DCFFFF
+ 15030 d70a F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 15030 80F9FFFF
+ 15031 .LBB3720:
+ 15032 .LBB3721:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 15033 .loc 2 1565 0
+ 15034 d712 F30F6F85 movdqu -1664(%rbp), %xmm0
+ 15034 80F9FFFF
+ 15035 d71a 660F7F85 movdqa %xmm0, -9920(%rbp)
+ 15035 40D9FFFF
+ 15036 d722 660F6F85 movdqa -9920(%rbp), %xmm0
+ 15036 40D9FFFF
+ 15037 d72a F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 15037 90F9FFFF
+ 15038 .LBB3722:
+ 15039 .LBB3723:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15040 .loc 2 1278 0
+ 15041 d732 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 15041 00000000
+ 15042 d73a F30F6F8D movdqu -1648(%rbp), %xmm1
+ 15042 90F9FFFF
+ 15043 d742 F30F7F8D movdqu %xmm1, -1616(%rbp)
+ 15043 B0F9FFFF
+ 15044 d74a F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 15044 A0F9FFFF
+ 15045 d752 F30F6F85 movdqu -1616(%rbp), %xmm0
+ 15045 B0F9FFFF
+ 15046 d75a F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 15046 D0F9FFFF
+ 15047 d762 F30F6F85 movdqu -1632(%rbp), %xmm0
+ 15047 A0F9FFFF
+ 15048 d76a F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 15048 C0F9FFFF
+ 15049 .LBB3724:
+ 15050 .LBB3725:
+ 15051 .LBB3726:
+ 15052 .LBB3727:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15053 .loc 3 529 0
+ 15054 d772 F30F6F8D movdqu -1600(%rbp), %xmm1
+ 15054 C0F9FFFF
+ 15055 d77a F30F6F85 movdqu -1584(%rbp), %xmm0
+ 15055 D0F9FFFF
+ 15056 d782 660F3800 pshufb %xmm1, %xmm0
+ 15056 C1
+ 15057 .LBE3727:
+ 15058 .LBE3726:
+ 15059 .LBE3725:
+ 15060 .LBE3724:
+ 15061 .LBE3723:
+ 15062 .LBE3722:
+
GAS LISTING /tmp/ccjbMjHD.s page 460
+
+
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15063 .loc 2 1567 0
+ 15064 d787 660F7F85 movdqa %xmm0, -9920(%rbp)
+ 15064 40D9FFFF
+ 15065 d78f 660F6F85 movdqa -9920(%rbp), %xmm0
+ 15065 40D9FFFF
+ 15066 d797 660FEF85 pxor -1664(%rbp), %xmm0
+ 15066 80F9FFFF
+ 15067 d79f F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 15067 80F9FFFF
+ 15068 d7a7 660F6F85 movdqa -9920(%rbp), %xmm0
+ 15068 40D9FFFF
+ 15069 d7af F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 15069 E0F9FFFF
+ 15070 .LBB3728:
+ 15071 .LBB3729:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15072 .loc 2 1278 0
+ 15073 d7b7 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 15073 00000000
+ 15074 d7bf F30F6F8D movdqu -1568(%rbp), %xmm1
+ 15074 E0F9FFFF
+ 15075 d7c7 F30F7F8D movdqu %xmm1, -1536(%rbp)
+ 15075 00FAFFFF
+ 15076 d7cf F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 15076 F0F9FFFF
+ 15077 d7d7 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 15077 00FAFFFF
+ 15078 d7df F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 15078 20FAFFFF
+ 15079 d7e7 F30F6F85 movdqu -1552(%rbp), %xmm0
+ 15079 F0F9FFFF
+ 15080 d7ef F30F7F85 movdqu %xmm0, -1520(%rbp)
+ 15080 10FAFFFF
+ 15081 .LBB3730:
+ 15082 .LBB3731:
+ 15083 .LBB3732:
+ 15084 .LBB3733:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15085 .loc 3 529 0
+ 15086 d7f7 F30F6F8D movdqu -1520(%rbp), %xmm1
+ 15086 10FAFFFF
+ 15087 d7ff F30F6F85 movdqu -1504(%rbp), %xmm0
+ 15087 20FAFFFF
+ 15088 d807 660F3800 pshufb %xmm1, %xmm0
+ 15088 C1
+ 15089 .LBE3733:
+ 15090 .LBE3732:
+ 15091 .LBE3731:
+ 15092 .LBE3730:
+ 15093 .LBE3729:
+ 15094 .LBE3728:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15095 .loc 2 1568 0
+ 15096 d80c 660F7F85 movdqa %xmm0, -9920(%rbp)
+ 15096 40D9FFFF
+ 15097 d814 660F6F85 movdqa -9920(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 461
+
+
+ 15097 40D9FFFF
+ 15098 d81c 660FEF85 pxor -1664(%rbp), %xmm0
+ 15098 80F9FFFF
+ 15099 d824 F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 15099 80F9FFFF
+ 15100 d82c 660F6F85 movdqa -9920(%rbp), %xmm0
+ 15100 40D9FFFF
+ 15101 d834 F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 15101 30FAFFFF
+ 15102 .LBB3734:
+ 15103 .LBB3735:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15104 .loc 2 1278 0
+ 15105 d83c 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 15105 00000000
+ 15106 d844 F30F6F8D movdqu -1488(%rbp), %xmm1
+ 15106 30FAFFFF
+ 15107 d84c F30F7F8D movdqu %xmm1, -1456(%rbp)
+ 15107 50FAFFFF
+ 15108 d854 F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 15108 40FAFFFF
+ 15109 d85c F30F6F85 movdqu -1456(%rbp), %xmm0
+ 15109 50FAFFFF
+ 15110 d864 F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 15110 70FAFFFF
+ 15111 d86c F30F6F85 movdqu -1472(%rbp), %xmm0
+ 15111 40FAFFFF
+ 15112 d874 F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 15112 60FAFFFF
+ 15113 .LBB3736:
+ 15114 .LBB3737:
+ 15115 .LBB3738:
+ 15116 .LBB3739:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15117 .loc 3 529 0
+ 15118 d87c F30F6F8D movdqu -1440(%rbp), %xmm1
+ 15118 60FAFFFF
+ 15119 d884 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 15119 70FAFFFF
+ 15120 d88c 660F3800 pshufb %xmm1, %xmm0
+ 15120 C1
+ 15121 .LBE3739:
+ 15122 .LBE3738:
+ 15123 .LBE3737:
+ 15124 .LBE3736:
+ 15125 .LBE3735:
+ 15126 .LBE3734:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15127 .loc 2 1569 0
+ 15128 d891 660F7F85 movdqa %xmm0, -9920(%rbp)
+ 15128 40D9FFFF
+ 15129 d899 660F6F85 movdqa -9920(%rbp), %xmm0
+ 15129 40D9FFFF
+ 15130 d8a1 660FEF85 pxor -1664(%rbp), %xmm0
+ 15130 80F9FFFF
+ 15131 d8a9 F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 15131 80F9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 462
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 15132 .loc 2 1571 0
+ 15133 d8b1 F30F6F85 movdqu -1664(%rbp), %xmm0
+ 15133 80F9FFFF
+ 15134 .LBE3721:
+ 15135 .LBE3720:
+ 15136 .loc 2 1936 0
+ 15137 d8b9 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 15137 20DCFFFF
+ 15138 d8c1 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 15138 20DCFFFF
+ 15139 d8c9 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 15139 90FAFFFF
+ 15140 d8d1 F30F6F85 movdqu -9152(%rbp), %xmm0
+ 15140 40DCFFFF
+ 15141 d8d9 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 15141 80FAFFFF
+ 15142 .LBB3740:
+ 15143 .LBB3741:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 15144 .loc 2 178 0
+ 15145 d8e1 F30F6F85 movdqu -1408(%rbp), %xmm0
+ 15145 80FAFFFF
+ 15146 d8e9 F30F6F8D movdqu -1392(%rbp), %xmm1
+ 15146 90FAFFFF
+ 15147 d8f1 660FEFC1 pxor %xmm1, %xmm0
+ 15148 .LBE3741:
+ 15149 .LBE3740:
+ 15150 .loc 2 1936 0
+ 15151 d8f5 F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 15151 20DCFFFF
+ 15152 d8fd 488B8598 movq -9832(%rbp), %rax
+ 15152 D9FFFF
+ 15153 d904 4805C000 addq $192, %rax
+ 15153 0000
+ 15154 d90a F30F6F85 movdqu -9184(%rbp), %xmm0
+ 15154 20DCFFFF
+ 15155 d912 F30F7F00 movdqu %xmm0, (%rax)
+ 15156 d916 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 15156 20DCFFFF
+ 15157 d91e F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 15157 A0FAFFFF
+ 15158 .LBB3742:
+ 15159 .LBB3743:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.state = state;
+ 15160 .loc 2 1656 0
+ 15161 d926 F30F6F85 movdqu -1376(%rbp), %xmm0
+ 15161 A0FAFFFF
+ 15162 d92e F30F7F85 movdqu %xmm0, -9264(%rbp)
+ 15162 D0DBFFFF
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 15163 .loc 2 1657 0
+ 15164 d936 8B85DCDB movl -9252(%rbp), %eax
+ 15164 FFFF
+ 15165 d93c 8985B8FA movl %eax, -1352(%rbp)
+ 15165 FFFF
+ 15166 .LBB3744:
+
GAS LISTING /tmp/ccjbMjHD.s page 463
+
+
+ 15167 .LBB3745:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.word = w;
+ 15168 .loc 2 740 0
+ 15169 d942 8B85B8FA movl -1352(%rbp), %eax
+ 15169 FFFF
+ 15170 d948 8985C0DB movl %eax, -9280(%rbp)
+ 15170 FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 15171 .loc 2 741 0
+ 15172 d94e C785BCFA movl $0, -1348(%rbp)
+ 15172 FFFF0000
+ 15172 0000
+ 15173 d958 EB36 jmp .L226
+ 15174 .L227:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 15175 .loc 2 742 0
+ 15176 d95a 8B8DBCFA movl -1348(%rbp), %ecx
+ 15176 FFFF
+ 15177 d960 8B85BCFA movl -1348(%rbp), %eax
+ 15177 FFFF
+ 15178 d966 89C0 mov %eax, %eax
+ 15179 d968 0FB68405 movzbl -9280(%rbp,%rax), %eax
+ 15179 C0DBFFFF
+ 15180 d970 0FB6C0 movzbl %al, %eax
+ 15181 d973 89C2 mov %eax, %edx
+ 15182 d975 488D0500 leaq KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 15182 000000
+ 15183 d97c 0FB61402 movzbl (%rdx,%rax), %edx
+ 15184 d980 89C8 mov %ecx, %eax
+ 15185 d982 889405C0 movb %dl, -9280(%rbp,%rax)
+ 15185 DBFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (col); ++ix)
+ 15186 .loc 2 741 0
+ 15187 d989 8385BCFA addl $1, -1348(%rbp)
+ 15187 FFFF01
+ 15188 .L226:
+ 15189 d990 83BDBCFA cmpl $3, -1348(%rbp)
+ 15189 FFFF03
+ 15190 d997 76C1 jbe .L227
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return col.word;
+ 15191 .loc 2 743 0
+ 15192 d999 8B85C0DB movl -9280(%rbp), %eax
+ 15192 FFFF
+ 15193 .LBE3745:
+ 15194 .LBE3744:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** temp = AESBCMEMBER(SubWord)(u.columns[3]);
+ 15195 .loc 2 1657 0
+ 15196 d99f 8985B4FA movl %eax, -1356(%rbp)
+ 15196 FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 15197 .loc 2 1659 0
+ 15198 d9a5 8B85B4FA movl -1356(%rbp), %eax
+ 15198 FFFF
+ 15199 d9ab 8985DCDB movl %eax, -9252(%rbp)
+ 15199 FFFF
+ 15200 d9b1 8B85DCDB movl -9252(%rbp), %eax
+ 15200 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 464
+
+
+ 15201 d9b7 8985D8DB movl %eax, -9256(%rbp)
+ 15201 FFFF
+ 15202 d9bd 8B85D8DB movl -9256(%rbp), %eax
+ 15202 FFFF
+ 15203 d9c3 8985D4DB movl %eax, -9260(%rbp)
+ 15203 FFFF
+ 15204 d9c9 8B85D4DB movl -9260(%rbp), %eax
+ 15204 FFFF
+ 15205 d9cf 8985D0DB movl %eax, -9264(%rbp)
+ 15205 FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return u.state;
+ 15206 .loc 2 1660 0
+ 15207 d9d5 F30F6F85 movdqu -9264(%rbp), %xmm0
+ 15207 D0DBFFFF
+ 15208 .LBE3743:
+ 15209 .LBE3742:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_2(13); /* k52 : k53 : k54 : k55 */
+ 15210 .loc 2 1937 0
+ 15211 d9dd F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 15211 40DCFFFF
+ 15212 d9e5 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 15212 30DCFFFF
+ 15213 d9ed F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 15213 C0FAFFFF
+ 15214 .LBB3746:
+ 15215 .LBB3747:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 15216 .loc 2 1565 0
+ 15217 d9f5 F30F6F85 movdqu -1344(%rbp), %xmm0
+ 15217 C0FAFFFF
+ 15218 d9fd 660F7F85 movdqa %xmm0, -9904(%rbp)
+ 15218 50D9FFFF
+ 15219 da05 660F6F85 movdqa -9904(%rbp), %xmm0
+ 15219 50D9FFFF
+ 15220 da0d F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 15220 D0FAFFFF
+ 15221 .LBB3748:
+ 15222 .LBB3749:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15223 .loc 2 1278 0
+ 15224 da15 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 15224 00000000
+ 15225 da1d F30F6F8D movdqu -1328(%rbp), %xmm1
+ 15225 D0FAFFFF
+ 15226 da25 F30F7F8D movdqu %xmm1, -1296(%rbp)
+ 15226 F0FAFFFF
+ 15227 da2d F30F7F85 movdqu %xmm0, -1312(%rbp)
+ 15227 E0FAFFFF
+ 15228 da35 F30F6F85 movdqu -1296(%rbp), %xmm0
+ 15228 F0FAFFFF
+ 15229 da3d F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 15229 10FBFFFF
+ 15230 da45 F30F6F85 movdqu -1312(%rbp), %xmm0
+ 15230 E0FAFFFF
+ 15231 da4d F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 15231 00FBFFFF
+ 15232 .LBB3750:
+
GAS LISTING /tmp/ccjbMjHD.s page 465
+
+
+ 15233 .LBB3751:
+ 15234 .LBB3752:
+ 15235 .LBB3753:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15236 .loc 3 529 0
+ 15237 da55 F30F6F8D movdqu -1280(%rbp), %xmm1
+ 15237 00FBFFFF
+ 15238 da5d F30F6F85 movdqu -1264(%rbp), %xmm0
+ 15238 10FBFFFF
+ 15239 da65 660F3800 pshufb %xmm1, %xmm0
+ 15239 C1
+ 15240 .LBE3753:
+ 15241 .LBE3752:
+ 15242 .LBE3751:
+ 15243 .LBE3750:
+ 15244 .LBE3749:
+ 15245 .LBE3748:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15246 .loc 2 1567 0
+ 15247 da6a 660F7F85 movdqa %xmm0, -9904(%rbp)
+ 15247 50D9FFFF
+ 15248 da72 660F6F85 movdqa -9904(%rbp), %xmm0
+ 15248 50D9FFFF
+ 15249 da7a 660FEF85 pxor -1344(%rbp), %xmm0
+ 15249 C0FAFFFF
+ 15250 da82 F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 15250 C0FAFFFF
+ 15251 da8a 660F6F85 movdqa -9904(%rbp), %xmm0
+ 15251 50D9FFFF
+ 15252 da92 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 15252 20FBFFFF
+ 15253 .LBB3754:
+ 15254 .LBB3755:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15255 .loc 2 1278 0
+ 15256 da9a 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 15256 00000000
+ 15257 daa2 F30F6F8D movdqu -1248(%rbp), %xmm1
+ 15257 20FBFFFF
+ 15258 daaa F30F7F8D movdqu %xmm1, -1216(%rbp)
+ 15258 40FBFFFF
+ 15259 dab2 F30F7F85 movdqu %xmm0, -1232(%rbp)
+ 15259 30FBFFFF
+ 15260 daba F30F6F85 movdqu -1216(%rbp), %xmm0
+ 15260 40FBFFFF
+ 15261 dac2 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 15261 60FBFFFF
+ 15262 daca F30F6F85 movdqu -1232(%rbp), %xmm0
+ 15262 30FBFFFF
+ 15263 dad2 F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 15263 50FBFFFF
+ 15264 .LBB3756:
+ 15265 .LBB3757:
+ 15266 .LBB3758:
+ 15267 .LBB3759:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15268 .loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s page 466
+
+
+ 15269 dada F30F6F8D movdqu -1200(%rbp), %xmm1
+ 15269 50FBFFFF
+ 15270 dae2 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 15270 60FBFFFF
+ 15271 daea 660F3800 pshufb %xmm1, %xmm0
+ 15271 C1
+ 15272 .LBE3759:
+ 15273 .LBE3758:
+ 15274 .LBE3757:
+ 15275 .LBE3756:
+ 15276 .LBE3755:
+ 15277 .LBE3754:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15278 .loc 2 1568 0
+ 15279 daef 660F7F85 movdqa %xmm0, -9904(%rbp)
+ 15279 50D9FFFF
+ 15280 daf7 660F6F85 movdqa -9904(%rbp), %xmm0
+ 15280 50D9FFFF
+ 15281 daff 660FEF85 pxor -1344(%rbp), %xmm0
+ 15281 C0FAFFFF
+ 15282 db07 F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 15282 C0FAFFFF
+ 15283 db0f 660F6F85 movdqa -9904(%rbp), %xmm0
+ 15283 50D9FFFF
+ 15284 db17 F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 15284 70FBFFFF
+ 15285 .LBB3760:
+ 15286 .LBB3761:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15287 .loc 2 1278 0
+ 15288 db1f 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 15288 00000000
+ 15289 db27 F30F6F8D movdqu -1168(%rbp), %xmm1
+ 15289 70FBFFFF
+ 15290 db2f F30F7F8D movdqu %xmm1, -1136(%rbp)
+ 15290 90FBFFFF
+ 15291 db37 F30F7F85 movdqu %xmm0, -1152(%rbp)
+ 15291 80FBFFFF
+ 15292 db3f F30F6F85 movdqu -1136(%rbp), %xmm0
+ 15292 90FBFFFF
+ 15293 db47 F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 15293 B0FBFFFF
+ 15294 db4f F30F6F85 movdqu -1152(%rbp), %xmm0
+ 15294 80FBFFFF
+ 15295 db57 F30F7F85 movdqu %xmm0, -1120(%rbp)
+ 15295 A0FBFFFF
+ 15296 .LBB3762:
+ 15297 .LBB3763:
+ 15298 .LBB3764:
+ 15299 .LBB3765:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15300 .loc 3 529 0
+ 15301 db5f F30F6F8D movdqu -1120(%rbp), %xmm1
+ 15301 A0FBFFFF
+ 15302 db67 F30F6F85 movdqu -1104(%rbp), %xmm0
+ 15302 B0FBFFFF
+ 15303 db6f 660F3800 pshufb %xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 467
+
+
+ 15303 C1
+ 15304 .LBE3765:
+ 15305 .LBE3764:
+ 15306 .LBE3763:
+ 15307 .LBE3762:
+ 15308 .LBE3761:
+ 15309 .LBE3760:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15310 .loc 2 1569 0
+ 15311 db74 660F7F85 movdqa %xmm0, -9904(%rbp)
+ 15311 50D9FFFF
+ 15312 db7c 660F6F85 movdqa -9904(%rbp), %xmm0
+ 15312 50D9FFFF
+ 15313 db84 660FEF85 pxor -1344(%rbp), %xmm0
+ 15313 C0FAFFFF
+ 15314 db8c F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 15314 C0FAFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 15315 .loc 2 1571 0
+ 15316 db94 F30F6F85 movdqu -1344(%rbp), %xmm0
+ 15316 C0FAFFFF
+ 15317 .LBE3747:
+ 15318 .LBE3746:
+ 15319 .loc 2 1937 0
+ 15320 db9c F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 15320 30DCFFFF
+ 15321 dba4 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 15321 30DCFFFF
+ 15322 dbac F30F7F85 movdqu %xmm0, -1072(%rbp)
+ 15322 D0FBFFFF
+ 15323 dbb4 F30F6F85 movdqu -9152(%rbp), %xmm0
+ 15323 40DCFFFF
+ 15324 dbbc F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 15324 C0FBFFFF
+ 15325 .LBB3766:
+ 15326 .LBB3767:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 15327 .loc 2 178 0
+ 15328 dbc4 F30F6F85 movdqu -1088(%rbp), %xmm0
+ 15328 C0FBFFFF
+ 15329 dbcc F30F6F8D movdqu -1072(%rbp), %xmm1
+ 15329 D0FBFFFF
+ 15330 dbd4 660FEFC1 pxor %xmm1, %xmm0
+ 15331 .LBE3767:
+ 15332 .LBE3766:
+ 15333 .loc 2 1937 0
+ 15334 dbd8 F30F7F85 movdqu %xmm0, -9168(%rbp)
+ 15334 30DCFFFF
+ 15335 dbe0 488B8598 movq -9832(%rbp), %rax
+ 15335 D9FFFF
+ 15336 dbe7 4805D000 addq $208, %rax
+ 15336 0000
+ 15337 dbed F30F6F85 movdqu -9168(%rbp), %xmm0
+ 15337 30DCFFFF
+ 15338 dbf5 F30F7F00 movdqu %xmm0, (%rax)
+ 15339 dbf9 F30F6F85 movdqu -9168(%rbp), %xmm0
+ 15339 30DCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 468
+
+
+ 15340 dc01 F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 15340 F0FBFFFF
+ 15341 .LBB3768:
+ 15342 .LBB3769:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 15343 .loc 2 1681 0
+ 15344 dc09 B8400000 movl $64, %eax
+ 15344 00
+ 15345 dc0e 660F6F05 movdqa vec_00(%rip), %xmm0
+ 15345 00000000
+ 15346 dc16 F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 15346 10FCFFFF
+ 15347 dc1e 89850CFC movl %eax, -1012(%rbp)
+ 15347 FFFF
+ 15348 dc24 F30F6F85 movdqu -1008(%rbp), %xmm0
+ 15348 10FCFFFF
+ 15349 dc2c F30F7F85 movdqu %xmm0, -976(%rbp)
+ 15349 30FCFFFF
+ 15350 dc34 8B850CFC movl -1012(%rbp), %eax
+ 15350 FFFF
+ 15351 dc3a 89852CFC movl %eax, -980(%rbp)
+ 15351 FFFF
+ 15352 .LBB3770:
+ 15353 .LBB3771:
+ 15354 .LBB3772:
+ 15355 .LBB3773:
+ 15356 .loc 3 598 0
+ 15357 dc40 8B852CFC movl -980(%rbp), %eax
+ 15357 FFFF
+ 15358 dc46 F30F6F85 movdqu -976(%rbp), %xmm0
+ 15358 30FCFFFF
+ 15359 dc4e 660F3A22 pinsrd $3, %eax, %xmm0
+ 15359 C003
+ 15360 .LBE3773:
+ 15361 .LBE3772:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_PINSRUD (state, column, which);
+ 15362 .loc 2 519 0
+ 15363 dc54 F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 15363 10FCFFFF
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 15364 .loc 2 526 0
+ 15365 dc5c F30F6F85 movdqu -1008(%rbp), %xmm0
+ 15365 10FCFFFF
+ 15366 .LBE3771:
+ 15367 .LBE3770:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 15368 .loc 2 1681 0
+ 15369 dc64 660F7F85 movdqa %xmm0, -9872(%rbp)
+ 15369 70D9FFFF
+ 15370 dc6c F30F6F85 movdqu -1040(%rbp), %xmm0
+ 15370 F0FBFFFF
+ 15371 dc74 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 15371 40FCFFFF
+ 15372 dc7c F30F6F85 movdqu -960(%rbp), %xmm0
+ 15372 40FCFFFF
+ 15373 dc84 F30F7F85 movdqu %xmm0, -928(%rbp)
+ 15373 60FCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 469
+
+
+ 15374 dc8c 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 15374 000000
+ 15375 dc93 48898558 movq %rax, -936(%rbp)
+ 15375 FCFFFF
+ 15376 .LBB3774:
+ 15377 .LBB3775:
+ 15378 .LBB3776:
+ 15379 .LBB3777:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 15380 .loc 2 851 0
+ 15381 dc9a 660F6F05 movdqa vec_00(%rip), %xmm0
+ 15381 00000000
+ 15382 dca2 F30F7F85 movdqu %xmm0, -896(%rbp)
+ 15382 80FCFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 15383 .loc 2 854 0
+ 15384 dcaa 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 15384 00000000
+ 15385 dcb2 F30F6F8D movdqu -928(%rbp), %xmm1
+ 15385 60FCFFFF
+ 15386 dcba F30F7F8D movdqu %xmm1, -816(%rbp)
+ 15386 D0FCFFFF
+ 15387 dcc2 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 15387 C0FCFFFF
+ 15388 .LBB3778:
+ 15389 .LBB3779:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 15390 .loc 2 206 0
+ 15391 dcca F30F6F85 movdqu -832(%rbp), %xmm0
+ 15391 C0FCFFFF
+ 15392 dcd2 F30F6F8D movdqu -816(%rbp), %xmm1
+ 15392 D0FCFFFF
+ 15393 dcda 660FDBC1 pand %xmm1, %xmm0
+ 15394 .LBE3779:
+ 15395 .LBE3778:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 15396 .loc 2 854 0
+ 15397 dcde F30F7F85 movdqu %xmm0, -848(%rbp)
+ 15397 B0FCFFFF
+ 15398 dce6 F30F6F85 movdqu -928(%rbp), %xmm0
+ 15398 60FCFFFF
+ 15399 dcee F30F7F85 movdqu %xmm0, -784(%rbp)
+ 15399 F0FCFFFF
+ 15400 .LBB3780:
+ 15401 .LBB3781:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 15402 .loc 3 433 0
+ 15403 dcf6 F30F6F85 movdqu -784(%rbp), %xmm0
+ 15403 F0FCFFFF
+ 15404 dcfe 660F72D0 psrld $4, %xmm0
+ 15404 04
+ 15405 .LBE3781:
+ 15406 .LBE3780:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 15407 .loc 2 857 0
+ 15408 dd03 F30F7F85 movdqu %xmm0, -864(%rbp)
+ 15408 A0FCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 470
+
+
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15409 .loc 2 859 0
+ 15410 dd0b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 15410 00000000
+ 15411 dd13 F30F6F8D movdqu -864(%rbp), %xmm1
+ 15411 A0FCFFFF
+ 15412 dd1b F30F7F8D movdqu %xmm1, -752(%rbp)
+ 15412 10FDFFFF
+ 15413 dd23 F30F7F85 movdqu %xmm0, -768(%rbp)
+ 15413 00FDFFFF
+ 15414 .LBB3782:
+ 15415 .LBB3783:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 15416 .loc 2 206 0
+ 15417 dd2b F30F6F85 movdqu -768(%rbp), %xmm0
+ 15417 00FDFFFF
+ 15418 dd33 F30F6F8D movdqu -752(%rbp), %xmm1
+ 15418 10FDFFFF
+ 15419 dd3b 660FDBC1 pand %xmm1, %xmm0
+ 15420 .LBE3783:
+ 15421 .LBE3782:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15422 .loc 2 859 0
+ 15423 dd3f F30F7F85 movdqu %xmm0, -864(%rbp)
+ 15423 A0FCFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 15424 .loc 2 866 0
+ 15425 dd47 C7857CFC movl $0, -900(%rbp)
+ 15425 FFFF0000
+ 15425 0000
+ 15426 dd51 E9BE0100 jmp .L228
+ 15426 00
+ 15427 .L229:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15428 .loc 2 868 0
+ 15429 dd56 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 15429 00000000
+ 15430 dd5e F30F7F85 movdqu %xmm0, -720(%rbp)
+ 15430 30FDFFFF
+ 15431 dd66 F30F6F85 movdqu -864(%rbp), %xmm0
+ 15431 A0FCFFFF
+ 15432 dd6e F30F7F85 movdqu %xmm0, -736(%rbp)
+ 15432 20FDFFFF
+ 15433 dd76 F30F6F85 movdqu -720(%rbp), %xmm0
+ 15433 30FDFFFF
+ 15434 dd7e F30F7F85 movdqu %xmm0, -688(%rbp)
+ 15434 50FDFFFF
+ 15435 dd86 F30F6F85 movdqu -736(%rbp), %xmm0
+ 15435 20FDFFFF
+ 15436 dd8e F30F7F85 movdqu %xmm0, -704(%rbp)
+ 15436 40FDFFFF
+ 15437 .LBB3784:
+ 15438 .LBB3785:
+ 15439 .LBB3786:
+ 15440 .LBB3787:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15441 .loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s page 471
+
+
+ 15442 dd96 F30F6F8D movdqu -704(%rbp), %xmm1
+ 15442 40FDFFFF
+ 15443 dd9e F30F6F85 movdqu -688(%rbp), %xmm0
+ 15443 50FDFFFF
+ 15444 dda6 660F3800 pshufb %xmm1, %xmm0
+ 15444 C1
+ 15445 .LBE3787:
+ 15446 .LBE3786:
+ 15447 .LBE3785:
+ 15448 .LBE3784:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15449 .loc 2 868 0
+ 15450 ddab F30F7F85 movdqu %xmm0, -880(%rbp)
+ 15450 90FCFFFF
+ 15451 ddb3 F30F6F85 movdqu -848(%rbp), %xmm0
+ 15451 B0FCFFFF
+ 15452 ddbb F30F7F85 movdqu %xmm0, -656(%rbp)
+ 15452 70FDFFFF
+ 15453 ddc3 F30F6F85 movdqu -880(%rbp), %xmm0
+ 15453 90FCFFFF
+ 15454 ddcb F30F7F85 movdqu %xmm0, -672(%rbp)
+ 15454 60FDFFFF
+ 15455 .LBB3788:
+ 15456 .LBB3789:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 15457 .loc 2 234 0
+ 15458 ddd3 F30F6F85 movdqu -672(%rbp), %xmm0
+ 15458 60FDFFFF
+ 15459 dddb F30F6F8D movdqu -656(%rbp), %xmm1
+ 15459 70FDFFFF
+ 15460 dde3 660FEBC1 por %xmm1, %xmm0
+ 15461 .LBE3789:
+ 15462 .LBE3788:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 15463 .loc 2 870 0
+ 15464 dde7 F30F7F85 movdqu %xmm0, -880(%rbp)
+ 15464 90FCFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 15465 .loc 2 872 0
+ 15466 ddef 8B857CFC mov -900(%rbp), %eax
+ 15466 FFFF
+ 15467 ddf5 48C1E004 salq $4, %rax
+ 15468 ddf9 48038558 addq -936(%rbp), %rax
+ 15468 FCFFFF
+ 15469 de00 660F6F00 movdqa (%rax), %xmm0
+ 15470 de04 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 15470 90FDFFFF
+ 15471 de0c F30F6F85 movdqu -880(%rbp), %xmm0
+ 15471 90FCFFFF
+ 15472 de14 F30F7F85 movdqu %xmm0, -640(%rbp)
+ 15472 80FDFFFF
+ 15473 de1c F30F6F85 movdqu -624(%rbp), %xmm0
+ 15473 90FDFFFF
+ 15474 de24 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 15474 B0FDFFFF
+ 15475 de2c F30F6F85 movdqu -640(%rbp), %xmm0
+ 15475 80FDFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 472
+
+
+ 15476 de34 F30F7F85 movdqu %xmm0, -608(%rbp)
+ 15476 A0FDFFFF
+ 15477 .LBB3790:
+ 15478 .LBB3791:
+ 15479 .LBB3792:
+ 15480 .LBB3793:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15481 .loc 3 529 0
+ 15482 de3c F30F6F8D movdqu -608(%rbp), %xmm1
+ 15482 A0FDFFFF
+ 15483 de44 F30F6F85 movdqu -592(%rbp), %xmm0
+ 15483 B0FDFFFF
+ 15484 de4c 660F3800 pshufb %xmm1, %xmm0
+ 15484 C1
+ 15485 .LBE3793:
+ 15486 .LBE3792:
+ 15487 .LBE3791:
+ 15488 .LBE3790:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 15489 .loc 2 872 0
+ 15490 de51 F30F7F85 movdqu %xmm0, -880(%rbp)
+ 15490 90FCFFFF
+ 15491 de59 F30F6F85 movdqu -896(%rbp), %xmm0
+ 15491 80FCFFFF
+ 15492 de61 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 15492 D0FDFFFF
+ 15493 de69 F30F6F85 movdqu -880(%rbp), %xmm0
+ 15493 90FCFFFF
+ 15494 de71 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 15494 C0FDFFFF
+ 15495 .LBB3794:
+ 15496 .LBB3795:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 15497 .loc 2 234 0
+ 15498 de79 F30F6F85 movdqu -576(%rbp), %xmm0
+ 15498 C0FDFFFF
+ 15499 de81 F30F6F8D movdqu -560(%rbp), %xmm1
+ 15499 D0FDFFFF
+ 15500 de89 660FEBC1 por %xmm1, %xmm0
+ 15501 .LBE3795:
+ 15502 .LBE3794:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 15503 .loc 2 874 0
+ 15504 de8d F30F7F85 movdqu %xmm0, -896(%rbp)
+ 15504 80FCFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 15505 .loc 2 876 0
+ 15506 de95 660F6F05 movdqa vec_01(%rip), %xmm0
+ 15506 00000000
+ 15507 de9d F30F6F8D movdqu -864(%rbp), %xmm1
+ 15507 A0FCFFFF
+ 15508 dea5 F30F7F8D movdqu %xmm1, -528(%rbp)
+ 15508 F0FDFFFF
+ 15509 dead F30F7F85 movdqu %xmm0, -544(%rbp)
+ 15509 E0FDFFFF
+ 15510 .LBB3796:
+ 15511 .LBB3797:
+
GAS LISTING /tmp/ccjbMjHD.s page 473
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 15512 .loc 2 290 0
+ 15513 deb5 F30F6F8D movdqu -544(%rbp), %xmm1
+ 15513 E0FDFFFF
+ 15514 debd F30F6F85 movdqu -528(%rbp), %xmm0
+ 15514 F0FDFFFF
+ 15515 dec5 660FF8C1 psubb %xmm1, %xmm0
+ 15516 .LBE3797:
+ 15517 .LBE3796:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 15518 .loc 2 876 0
+ 15519 dec9 F30F7F85 movdqu %xmm0, -864(%rbp)
+ 15519 A0FCFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15520 .loc 2 878 0
+ 15521 ded1 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 15521 00000000
+ 15522 ded9 F30F6F8D movdqu -864(%rbp), %xmm1
+ 15522 A0FCFFFF
+ 15523 dee1 F30F7F8D movdqu %xmm1, -496(%rbp)
+ 15523 10FEFFFF
+ 15524 dee9 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 15524 00FEFFFF
+ 15525 .LBB3798:
+ 15526 .LBB3799:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 15527 .loc 2 206 0
+ 15528 def1 F30F6F85 movdqu -512(%rbp), %xmm0
+ 15528 00FEFFFF
+ 15529 def9 F30F6F8D movdqu -496(%rbp), %xmm1
+ 15529 10FEFFFF
+ 15530 df01 660FDBC1 pand %xmm1, %xmm0
+ 15531 .LBE3799:
+ 15532 .LBE3798:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15533 .loc 2 878 0
+ 15534 df05 F30F7F85 movdqu %xmm0, -864(%rbp)
+ 15534 A0FCFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 15535 .loc 2 866 0
+ 15536 df0d 83857CFC addl $1, -900(%rbp)
+ 15536 FFFF01
+ 15537 .L228:
+ 15538 df14 83BD7CFC cmpl $15, -900(%rbp)
+ 15538 FFFF0F
+ 15539 df1b 0F8635FE jbe .L229
+ 15539 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 15540 .loc 2 882 0
+ 15541 df21 F30F6F85 movdqu -896(%rbp), %xmm0
+ 15541 80FCFFFF
+ 15542 .LBE3777:
+ 15543 .LBE3776:
+ 15544 .LBE3775:
+ 15545 .LBE3774:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(SubBytes) (state);
+ 15546 .loc 2 1682 0
+
GAS LISTING /tmp/ccjbMjHD.s page 474
+
+
+ 15547 df29 660F7F85 movdqa %xmm0, -9888(%rbp)
+ 15547 60D9FFFF
+ 15548 .LBB3800:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 15549 .loc 2 1683 0
+ 15550 df31 660F6F85 movdqa -9888(%rbp), %xmm0
+ 15550 60D9FFFF
+ 15551 df39 F30F7F85 movdqu %xmm0, -9200(%rbp)
+ 15551 10DCFFFF
+ 15552 df41 E8000000 call KDbgWriterGet at PLT
+ 15552 00
+ 15553 df46 4885C0 testq %rax, %rax
+ 15554 df49 7479 je .L231
+ 15555 df4b BF010000 movl $1, %edi
+ 15555 00
+ 15556 df50 E8000000 call KDbgCondToFlag at PLT
+ 15556 00
+ 15557 df55 4889C6 movq %rax, %rsi
+ 15558 df58 BF100000 movl $16, %edi
+ 15558 00
+ 15559 df5d E8000000 call KDbgTestModConds at PLT
+ 15559 00
+ 15560 df62 84C0 testb %al, %al
+ 15561 df64 745E je .L231
+ 15562 df66 8B851CDC movl -9188(%rbp), %eax
+ 15562 FFFF
+ 15563 df6c 89C7 movl %eax, %edi
+ 15564 df6e E88D20FF call bswap_32
+ 15564 FF
+ 15565 df73 4189C5 movl %eax, %r13d
+ 15566 df76 8B8518DC movl -9192(%rbp), %eax
+ 15566 FFFF
+ 15567 df7c 89C7 movl %eax, %edi
+ 15568 df7e E87D20FF call bswap_32
+ 15568 FF
+ 15569 df83 4189C4 movl %eax, %r12d
+ 15570 df86 8B8514DC movl -9196(%rbp), %eax
+ 15570 FFFF
+ 15571 df8c 89C7 movl %eax, %edi
+ 15572 df8e E86D20FF call bswap_32
+ 15572 FF
+ 15573 df93 89C3 movl %eax, %ebx
+ 15574 df95 8B8510DC movl -9200(%rbp), %eax
+ 15574 FFFF
+ 15575 df9b 89C7 movl %eax, %edi
+ 15576 df9d E85E20FF call bswap_32
+ 15576 FF
+ 15577 dfa2 4589E9 movl %r13d, %r9d
+ 15578 dfa5 4589E0 movl %r12d, %r8d
+ 15579 dfa8 89D9 movl %ebx, %ecx
+ 15580 dfaa 89C2 movl %eax, %edx
+ 15581 dfac 488D3500 leaq .LC0(%rip), %rsi
+ 15581 000000
+ 15582 dfb3 488D3D00 leaq .LC1(%rip), %rdi
+ 15582 000000
+ 15583 dfba B8000000 movl $0, %eax
+ 15583 00
+
GAS LISTING /tmp/ccjbMjHD.s page 475
+
+
+ 15584 dfbf E8000000 call KDbgMsg at PLT
+ 15584 00
+ 15585 .L231:
+ 15586 dfc4 660F6F85 movdqa -9888(%rbp), %xmm0
+ 15586 60D9FFFF
+ 15587 dfcc F30F7F85 movdqu %xmm0, -480(%rbp)
+ 15587 20FEFFFF
+ 15588 .LBE3800:
+ 15589 .LBB3801:
+ 15590 .LBB3802:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15591 .loc 2 667 0
+ 15592 dfd4 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 15592 00000000
+ 15593 dfdc F30F6F8D movdqu -480(%rbp), %xmm1
+ 15593 20FEFFFF
+ 15594 dfe4 F30F7F8D movdqu %xmm1, -448(%rbp)
+ 15594 40FEFFFF
+ 15595 dfec F30F7F85 movdqu %xmm0, -464(%rbp)
+ 15595 30FEFFFF
+ 15596 dff4 F30F6F85 movdqu -448(%rbp), %xmm0
+ 15596 40FEFFFF
+ 15597 dffc F30F7F85 movdqu %xmm0, -416(%rbp)
+ 15597 60FEFFFF
+ 15598 e004 F30F6F85 movdqu -464(%rbp), %xmm0
+ 15598 30FEFFFF
+ 15599 e00c F30F7F85 movdqu %xmm0, -432(%rbp)
+ 15599 50FEFFFF
+ 15600 .LBB3803:
+ 15601 .LBB3804:
+ 15602 .LBB3805:
+ 15603 .LBB3806:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15604 .loc 3 529 0
+ 15605 e014 F30F6F8D movdqu -432(%rbp), %xmm1
+ 15605 50FEFFFF
+ 15606 e01c F30F6F85 movdqu -416(%rbp), %xmm0
+ 15606 60FEFFFF
+ 15607 e024 660F3800 pshufb %xmm1, %xmm0
+ 15607 C1
+ 15608 .LBE3806:
+ 15609 .LBE3805:
+ 15610 .LBE3804:
+ 15611 .LBE3803:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15612 .loc 2 667 0
+ 15613 e029 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 15613 20FEFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 15614 .loc 2 668 0
+ 15615 e031 F30F6F85 movdqu -480(%rbp), %xmm0
+ 15615 20FEFFFF
+ 15616 .LBE3802:
+ 15617 .LBE3801:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 15618 .loc 2 1684 0
+ 15619 e039 660F7F85 movdqa %xmm0, -9888(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 476
+
+
+ 15619 60D9FFFF
+ 15620 .LBB3807:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 15621 .loc 2 1685 0
+ 15622 e041 660F6F85 movdqa -9888(%rbp), %xmm0
+ 15622 60D9FFFF
+ 15623 e049 F30F7F85 movdqu %xmm0, -9216(%rbp)
+ 15623 00DCFFFF
+ 15624 e051 E8000000 call KDbgWriterGet at PLT
+ 15624 00
+ 15625 e056 4885C0 testq %rax, %rax
+ 15626 e059 7479 je .L233
+ 15627 e05b BF010000 movl $1, %edi
+ 15627 00
+ 15628 e060 E8000000 call KDbgCondToFlag at PLT
+ 15628 00
+ 15629 e065 4889C6 movq %rax, %rsi
+ 15630 e068 BF100000 movl $16, %edi
+ 15630 00
+ 15631 e06d E8000000 call KDbgTestModConds at PLT
+ 15631 00
+ 15632 e072 84C0 testb %al, %al
+ 15633 e074 745E je .L233
+ 15634 e076 8B850CDC movl -9204(%rbp), %eax
+ 15634 FFFF
+ 15635 e07c 89C7 movl %eax, %edi
+ 15636 e07e E87D1FFF call bswap_32
+ 15636 FF
+ 15637 e083 4189C5 movl %eax, %r13d
+ 15638 e086 8B8508DC movl -9208(%rbp), %eax
+ 15638 FFFF
+ 15639 e08c 89C7 movl %eax, %edi
+ 15640 e08e E86D1FFF call bswap_32
+ 15640 FF
+ 15641 e093 4189C4 movl %eax, %r12d
+ 15642 e096 8B8504DC movl -9212(%rbp), %eax
+ 15642 FFFF
+ 15643 e09c 89C7 movl %eax, %edi
+ 15644 e09e E85D1FFF call bswap_32
+ 15644 FF
+ 15645 e0a3 89C3 movl %eax, %ebx
+ 15646 e0a5 8B8500DC movl -9216(%rbp), %eax
+ 15646 FFFF
+ 15647 e0ab 89C7 movl %eax, %edi
+ 15648 e0ad E84E1FFF call bswap_32
+ 15648 FF
+ 15649 e0b2 4589E9 movl %r13d, %r9d
+ 15650 e0b5 4589E0 movl %r12d, %r8d
+ 15651 e0b8 89D9 movl %ebx, %ecx
+ 15652 e0ba 89C2 movl %eax, %edx
+ 15653 e0bc 488D3500 leaq .LC2(%rip), %rsi
+ 15653 000000
+ 15654 e0c3 488D3D00 leaq .LC1(%rip), %rdi
+ 15654 000000
+ 15655 e0ca B8000000 movl $0, %eax
+ 15655 00
+ 15656 e0cf E8000000 call KDbgMsg at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 477
+
+
+ 15656 00
+ 15657 .L233:
+ 15658 e0d4 660F6F85 movdqa -9888(%rbp), %xmm0
+ 15658 60D9FFFF
+ 15659 e0dc F30F7F85 movdqu %xmm0, -384(%rbp)
+ 15659 80FEFFFF
+ 15660 e0e4 660F6F85 movdqa -9872(%rbp), %xmm0
+ 15660 70D9FFFF
+ 15661 e0ec F30F7F85 movdqu %xmm0, -400(%rbp)
+ 15661 70FEFFFF
+ 15662 .LBE3807:
+ 15663 .LBB3808:
+ 15664 .LBB3809:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 15665 .loc 2 178 0
+ 15666 e0f4 F30F6F85 movdqu -400(%rbp), %xmm0
+ 15666 70FEFFFF
+ 15667 e0fc F30F6F8D movdqu -384(%rbp), %xmm1
+ 15667 80FEFFFF
+ 15668 e104 660FEFC1 pxor %xmm1, %xmm0
+ 15669 .LBE3809:
+ 15670 .LBE3808:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 15671 .loc 2 1686 0
+ 15672 e108 660F7F85 movdqa %xmm0, -9888(%rbp)
+ 15672 60D9FFFF
+ 15673 .LBB3810:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 15674 .loc 2 1687 0
+ 15675 e110 660F6F85 movdqa -9888(%rbp), %xmm0
+ 15675 60D9FFFF
+ 15676 e118 F30F7F85 movdqu %xmm0, -9232(%rbp)
+ 15676 F0DBFFFF
+ 15677 e120 E8000000 call KDbgWriterGet at PLT
+ 15677 00
+ 15678 e125 4885C0 testq %rax, %rax
+ 15679 e128 7479 je .L235
+ 15680 e12a BF010000 movl $1, %edi
+ 15680 00
+ 15681 e12f E8000000 call KDbgCondToFlag at PLT
+ 15681 00
+ 15682 e134 4889C6 movq %rax, %rsi
+ 15683 e137 BF100000 movl $16, %edi
+ 15683 00
+ 15684 e13c E8000000 call KDbgTestModConds at PLT
+ 15684 00
+ 15685 e141 84C0 testb %al, %al
+ 15686 e143 745E je .L235
+ 15687 e145 8B85FCDB movl -9220(%rbp), %eax
+ 15687 FFFF
+ 15688 e14b 89C7 movl %eax, %edi
+ 15689 e14d E8AE1EFF call bswap_32
+ 15689 FF
+ 15690 e152 4189C5 movl %eax, %r13d
+ 15691 e155 8B85F8DB movl -9224(%rbp), %eax
+ 15691 FFFF
+ 15692 e15b 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 478
+
+
+ 15693 e15d E89E1EFF call bswap_32
+ 15693 FF
+ 15694 e162 4189C4 movl %eax, %r12d
+ 15695 e165 8B85F4DB movl -9228(%rbp), %eax
+ 15695 FFFF
+ 15696 e16b 89C7 movl %eax, %edi
+ 15697 e16d E88E1EFF call bswap_32
+ 15697 FF
+ 15698 e172 89C3 movl %eax, %ebx
+ 15699 e174 8B85F0DB movl -9232(%rbp), %eax
+ 15699 FFFF
+ 15700 e17a 89C7 movl %eax, %edi
+ 15701 e17c E87F1EFF call bswap_32
+ 15701 FF
+ 15702 e181 4589E9 movl %r13d, %r9d
+ 15703 e184 4589E0 movl %r12d, %r8d
+ 15704 e187 89D9 movl %ebx, %ecx
+ 15705 e189 89C2 movl %eax, %edx
+ 15706 e18b 488D3500 leaq .LC3(%rip), %rsi
+ 15706 000000
+ 15707 e192 488D3D00 leaq .LC1(%rip), %rdi
+ 15707 000000
+ 15708 e199 B8000000 movl $0, %eax
+ 15708 00
+ 15709 e19e E8000000 call KDbgMsg at PLT
+ 15709 00
+ 15710 .L235:
+ 15711 e1a3 660F6F85 movdqa -9888(%rbp), %xmm0
+ 15711 60D9FFFF
+ 15712 e1ab F30F7F85 movdqu %xmm0, -368(%rbp)
+ 15712 90FEFFFF
+ 15713 e1b3 F30F6F85 movdqu -368(%rbp), %xmm0
+ 15713 90FEFFFF
+ 15714 e1bb F30F7F85 movdqu %xmm0, -336(%rbp)
+ 15714 B0FEFFFF
+ 15715 .LBE3810:
+ 15716 .LBB3811:
+ 15717 .LBB3812:
+ 15718 .LBB3813:
+ 15719 .LBB3814:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 15720 .loc 3 450 0
+ 15721 e1c3 F30F6F85 movdqu -336(%rbp), %xmm0
+ 15721 B0FEFFFF
+ 15722 e1cb 660F70C0 pshufd $255, %xmm0, %xmm0
+ 15722 FF
+ 15723 .LBE3814:
+ 15724 .LBE3813:
+ 15725 .LBE3812:
+ 15726 .LBE3811:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 15727 .loc 2 1688 0
+ 15728 e1d0 660F7F85 movdqa %xmm0, -9888(%rbp)
+ 15728 60D9FFFF
+ 15729 .LBB3815:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 15730 .loc 2 1689 0
+
GAS LISTING /tmp/ccjbMjHD.s page 479
+
+
+ 15731 e1d8 660F6F85 movdqa -9888(%rbp), %xmm0
+ 15731 60D9FFFF
+ 15732 e1e0 F30F7F85 movdqu %xmm0, -9248(%rbp)
+ 15732 E0DBFFFF
+ 15733 e1e8 E8000000 call KDbgWriterGet at PLT
+ 15733 00
+ 15734 e1ed 4885C0 testq %rax, %rax
+ 15735 e1f0 7479 je .L237
+ 15736 e1f2 BF010000 movl $1, %edi
+ 15736 00
+ 15737 e1f7 E8000000 call KDbgCondToFlag at PLT
+ 15737 00
+ 15738 e1fc 4889C6 movq %rax, %rsi
+ 15739 e1ff BF100000 movl $16, %edi
+ 15739 00
+ 15740 e204 E8000000 call KDbgTestModConds at PLT
+ 15740 00
+ 15741 e209 84C0 testb %al, %al
+ 15742 e20b 745E je .L237
+ 15743 e20d 8B85ECDB movl -9236(%rbp), %eax
+ 15743 FFFF
+ 15744 e213 89C7 movl %eax, %edi
+ 15745 e215 E8E61DFF call bswap_32
+ 15745 FF
+ 15746 e21a 4189C5 movl %eax, %r13d
+ 15747 e21d 8B85E8DB movl -9240(%rbp), %eax
+ 15747 FFFF
+ 15748 e223 89C7 movl %eax, %edi
+ 15749 e225 E8D61DFF call bswap_32
+ 15749 FF
+ 15750 e22a 4189C4 movl %eax, %r12d
+ 15751 e22d 8B85E4DB movl -9244(%rbp), %eax
+ 15751 FFFF
+ 15752 e233 89C7 movl %eax, %edi
+ 15753 e235 E8C61DFF call bswap_32
+ 15753 FF
+ 15754 e23a 89C3 movl %eax, %ebx
+ 15755 e23c 8B85E0DB movl -9248(%rbp), %eax
+ 15755 FFFF
+ 15756 e242 89C7 movl %eax, %edi
+ 15757 e244 E8B71DFF call bswap_32
+ 15757 FF
+ 15758 e249 4589E9 movl %r13d, %r9d
+ 15759 e24c 4589E0 movl %r12d, %r8d
+ 15760 e24f 89D9 movl %ebx, %ecx
+ 15761 e251 89C2 movl %eax, %edx
+ 15762 e253 488D3500 leaq .LC4(%rip), %rsi
+ 15762 000000
+ 15763 e25a 488D3D00 leaq .LC1(%rip), %rdi
+ 15763 000000
+ 15764 e261 B8000000 movl $0, %eax
+ 15764 00
+ 15765 e266 E8000000 call KDbgMsg at PLT
+ 15765 00
+ 15766 .L237:
+ 15767 .LBE3815:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return tmp;
+
GAS LISTING /tmp/ccjbMjHD.s page 480
+
+
+ 15768 .loc 2 1690 0
+ 15769 e26b 660F6F85 movdqa -9888(%rbp), %xmm0
+ 15769 60D9FFFF
+ 15770 .LBE3769:
+ 15771 .LBE3768:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KE256_1(14,0x40); /* k56 : k57 : k58 : k59 */
+ 15772 .loc 2 1938 0
+ 15773 e273 F30F7F85 movdqu %xmm0, -9152(%rbp)
+ 15773 40DCFFFF
+ 15774 e27b F30F6F85 movdqu -9184(%rbp), %xmm0
+ 15774 20DCFFFF
+ 15775 e283 F30F7F85 movdqu %xmm0, -320(%rbp)
+ 15775 C0FEFFFF
+ 15776 .LBB3816:
+ 15777 .LBB3817:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec shift = state;
+ 15778 .loc 2 1565 0
+ 15779 e28b F30F6F85 movdqu -320(%rbp), %xmm0
+ 15779 C0FEFFFF
+ 15780 e293 660F7F85 movdqa %xmm0, -9856(%rbp)
+ 15780 80D9FFFF
+ 15781 e29b 660F6F85 movdqa -9856(%rbp), %xmm0
+ 15781 80D9FFFF
+ 15782 e2a3 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 15782 D0FEFFFF
+ 15783 .LBB3818:
+ 15784 .LBB3819:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15785 .loc 2 1278 0
+ 15786 e2ab 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 15786 00000000
+ 15787 e2b3 F30F6F8D movdqu -304(%rbp), %xmm1
+ 15787 D0FEFFFF
+ 15788 e2bb F30F7F8D movdqu %xmm1, -272(%rbp)
+ 15788 F0FEFFFF
+ 15789 e2c3 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 15789 E0FEFFFF
+ 15790 e2cb F30F6F85 movdqu -272(%rbp), %xmm0
+ 15790 F0FEFFFF
+ 15791 e2d3 F30F7F85 movdqu %xmm0, -240(%rbp)
+ 15791 10FFFFFF
+ 15792 e2db F30F6F85 movdqu -288(%rbp), %xmm0
+ 15792 E0FEFFFF
+ 15793 e2e3 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 15793 00FFFFFF
+ 15794 .LBB3820:
+ 15795 .LBB3821:
+ 15796 .LBB3822:
+ 15797 .LBB3823:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15798 .loc 3 529 0
+ 15799 e2eb F30F6F8D movdqu -256(%rbp), %xmm1
+ 15799 00FFFFFF
+ 15800 e2f3 F30F6F85 movdqu -240(%rbp), %xmm0
+ 15800 10FFFFFF
+ 15801 e2fb 660F3800 pshufb %xmm1, %xmm0
+ 15801 C1
+
GAS LISTING /tmp/ccjbMjHD.s page 481
+
+
+ 15802 .LBE3823:
+ 15803 .LBE3822:
+ 15804 .LBE3821:
+ 15805 .LBE3820:
+ 15806 .LBE3819:
+ 15807 .LBE3818:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15808 .loc 2 1567 0
+ 15809 e300 660F7F85 movdqa %xmm0, -9856(%rbp)
+ 15809 80D9FFFF
+ 15810 e308 660F6F85 movdqa -9856(%rbp), %xmm0
+ 15810 80D9FFFF
+ 15811 e310 660FEF85 pxor -320(%rbp), %xmm0
+ 15811 C0FEFFFF
+ 15812 e318 F30F7F85 movdqu %xmm0, -320(%rbp)
+ 15812 C0FEFFFF
+ 15813 e320 660F6F85 movdqa -9856(%rbp), %xmm0
+ 15813 80D9FFFF
+ 15814 e328 F30F7F85 movdqu %xmm0, -224(%rbp)
+ 15814 20FFFFFF
+ 15815 .LBB3824:
+ 15816 .LBB3825:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15817 .loc 2 1278 0
+ 15818 e330 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 15818 00000000
+ 15819 e338 F30F6F8D movdqu -224(%rbp), %xmm1
+ 15819 20FFFFFF
+ 15820 e340 F30F7F8D movdqu %xmm1, -192(%rbp)
+ 15820 40FFFFFF
+ 15821 e348 F30F7F85 movdqu %xmm0, -208(%rbp)
+ 15821 30FFFFFF
+ 15822 e350 F30F6F85 movdqu -192(%rbp), %xmm0
+ 15822 40FFFFFF
+ 15823 e358 F30F7F85 movdqu %xmm0, -160(%rbp)
+ 15823 60FFFFFF
+ 15824 e360 F30F6F85 movdqu -208(%rbp), %xmm0
+ 15824 30FFFFFF
+ 15825 e368 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 15825 50FFFFFF
+ 15826 .LBB3826:
+ 15827 .LBB3827:
+ 15828 .LBB3828:
+ 15829 .LBB3829:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15830 .loc 3 529 0
+ 15831 e370 F30F6F8D movdqu -176(%rbp), %xmm1
+ 15831 50FFFFFF
+ 15832 e378 F30F6F85 movdqu -160(%rbp), %xmm0
+ 15832 60FFFFFF
+ 15833 e380 660F3800 pshufb %xmm1, %xmm0
+ 15833 C1
+ 15834 .LBE3829:
+ 15835 .LBE3828:
+ 15836 .LBE3827:
+ 15837 .LBE3826:
+ 15838 .LBE3825:
+
GAS LISTING /tmp/ccjbMjHD.s page 482
+
+
+ 15839 .LBE3824:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15840 .loc 2 1568 0
+ 15841 e385 660F7F85 movdqa %xmm0, -9856(%rbp)
+ 15841 80D9FFFF
+ 15842 e38d 660F6F85 movdqa -9856(%rbp), %xmm0
+ 15842 80D9FFFF
+ 15843 e395 660FEF85 pxor -320(%rbp), %xmm0
+ 15843 C0FEFFFF
+ 15844 e39d F30F7F85 movdqu %xmm0, -320(%rbp)
+ 15844 C0FEFFFF
+ 15845 e3a5 660F6F85 movdqa -9856(%rbp), %xmm0
+ 15845 80D9FFFF
+ 15846 e3ad F30F7F85 movdqu %xmm0, -144(%rbp)
+ 15846 70FFFFFF
+ 15847 .LBB3830:
+ 15848 .LBB3831:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15849 .loc 2 1278 0
+ 15850 e3b5 660F6F05 movdqa mask.7943(%rip), %xmm0
+ 15850 00000000
+ 15851 e3bd F30F6F8D movdqu -144(%rbp), %xmm1
+ 15851 70FFFFFF
+ 15852 e3c5 F30F7F4D movdqu %xmm1, -112(%rbp)
+ 15852 90
+ 15853 e3ca F30F7F45 movdqu %xmm0, -128(%rbp)
+ 15853 80
+ 15854 e3cf F30F6F45 movdqu -112(%rbp), %xmm0
+ 15854 90
+ 15855 e3d4 F30F7F45 movdqu %xmm0, -80(%rbp)
+ 15855 B0
+ 15856 e3d9 F30F6F45 movdqu -128(%rbp), %xmm0
+ 15856 80
+ 15857 e3de F30F7F45 movdqu %xmm0, -96(%rbp)
+ 15857 A0
+ 15858 .LBB3832:
+ 15859 .LBB3833:
+ 15860 .LBB3834:
+ 15861 .LBB3835:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15862 .loc 3 529 0
+ 15863 e3e3 F30F6F4D movdqu -96(%rbp), %xmm1
+ 15863 A0
+ 15864 e3e8 F30F6F45 movdqu -80(%rbp), %xmm0
+ 15864 B0
+ 15865 e3ed 660F3800 pshufb %xmm1, %xmm0
+ 15865 C1
+ 15866 .LBE3835:
+ 15867 .LBE3834:
+ 15868 .LBE3833:
+ 15869 .LBE3832:
+ 15870 .LBE3831:
+ 15871 .LBE3830:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15872 .loc 2 1569 0
+ 15873 e3f2 660F7F85 movdqa %xmm0, -9856(%rbp)
+ 15873 80D9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 483
+
+
+ 15874 e3fa 660F6F85 movdqa -9856(%rbp), %xmm0
+ 15874 80D9FFFF
+ 15875 e402 660FEF85 pxor -320(%rbp), %xmm0
+ 15875 C0FEFFFF
+ 15876 e40a F30F7F85 movdqu %xmm0, -320(%rbp)
+ 15876 C0FEFFFF
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 15877 .loc 2 1571 0
+ 15878 e412 F30F6F85 movdqu -320(%rbp), %xmm0
+ 15878 C0FEFFFF
+ 15879 .LBE3817:
+ 15880 .LBE3816:
+ 15881 .loc 2 1938 0
+ 15882 e41a F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 15882 20DCFFFF
+ 15883 e422 F30F6F85 movdqu -9184(%rbp), %xmm0
+ 15883 20DCFFFF
+ 15884 e42a F30F7F45 movdqu %xmm0, -48(%rbp)
+ 15884 D0
+ 15885 e42f F30F6F85 movdqu -9152(%rbp), %xmm0
+ 15885 40DCFFFF
+ 15886 e437 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 15886 C0
+ 15887 .LBB3836:
+ 15888 .LBB3837:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 15889 .loc 2 178 0
+ 15890 e43c F30F6F45 movdqu -64(%rbp), %xmm0
+ 15890 C0
+ 15891 e441 F30F6F4D movdqu -48(%rbp), %xmm1
+ 15891 D0
+ 15892 e446 660FEFC1 pxor %xmm1, %xmm0
+ 15893 .LBE3837:
+ 15894 .LBE3836:
+ 15895 .loc 2 1938 0
+ 15896 e44a F30F7F85 movdqu %xmm0, -9184(%rbp)
+ 15896 20DCFFFF
+ 15897 e452 488B8598 movq -9832(%rbp), %rax
+ 15897 D9FFFF
+ 15898 e459 4805E000 addq $224, %rax
+ 15898 0000
+ 15899 e45f F30F6F85 movdqu -9184(%rbp), %xmm0
+ 15899 20DCFFFF
+ 15900 e467 F30F7F00 movdqu %xmm0, (%rax)
+1939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 15901 .loc 2 1939 0
+ 15902 e46b 4881C428 addq $10280, %rsp
+ 15902 280000
+ 15903 e472 5B popq %rbx
+ 15904 e473 415C popq %r12
+ 15905 e475 415D popq %r13
+ 15906 e477 C9 leave
+ 15907 e478 C3 ret
+ 15908 .cfi_endproc
+ 15909 .LFE647:
+ 15910 .size KAESBlockCipherVecRegKeyExpansion256, .-KAESBlockCipherVecRegKeyExpansion256
+ 15911 .section .rodata
+
GAS LISTING /tmp/ccjbMjHD.s page 484
+
+
+ 15912 .LC5:
+ 15913 03d2 73746174 .string "state"
+ 15913 6500
+ 15914 .LC6:
+ 15915 03d8 737200 .string "sr"
+ 15916 .LC7:
+ 15917 03db 736C00 .string "sl"
+ 15918 .text
+ 15919 .type KAESBlockCipherVecRegEqInvKeyExpansion, @function
+ 15920 KAESBlockCipherVecRegEqInvKeyExpansion:
+ 15921 .LFB648:
+1940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * w, const AESByte * key)
+1943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_256, AES_Nk_256);
+1945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion) (CipherVec * r, const CipherVec * dr, unsigned Nr)
+1951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 15922 .loc 2 1951 0
+ 15923 .cfi_startproc
+ 15924 e479 55 pushq %rbp
+ 15925 .LCFI8:
+ 15926 .cfi_def_cfa_offset 16
+ 15927 e47a 4889E5 movq %rsp, %rbp
+ 15928 .cfi_offset 6, -16
+ 15929 .LCFI9:
+ 15930 .cfi_def_cfa_register 6
+ 15931 e47d 4156 pushq %r14
+ 15932 e47f 4155 pushq %r13
+ 15933 e481 4154 pushq %r12
+ 15934 e483 53 pushq %rbx
+ 15935 e484 4881EC80 subq $1920, %rsp
+ 15935 070000
+ 15936 e48b 4889BDE8 movq %rdi, -1816(%rbp)
+ 15936 F8FFFF
+ 15937 e492 4889B5E0 movq %rsi, -1824(%rbp)
+ 15937 F8FFFF
+ 15938 e499 8995DCF8 movl %edx, -1828(%rbp)
+ 15938 FFFF
+1952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix, jx;
+1953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** jx = Nr;
+ 15939 .loc 2 1954 0
+ 15940 e49f 8B85DCF8 movl -1828(%rbp), %eax
+ 15940 FFFF
+ 15941 e4a5 89858CF9 movl %eax, -1652(%rbp)
+ 15941 FFFF
+1955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ix = 0;
+ 15942 .loc 2 1955 0
+ 15943 e4ab C78588F9 movl $0, -1656(%rbp)
+ 15943 FFFF0000
+ 15943 0000
+
GAS LISTING /tmp/ccjbMjHD.s page 485
+
+
+1956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix++] = dr[jx--];
+ 15944 .loc 2 1956 0
+ 15945 e4b5 8B8588F9 mov -1656(%rbp), %eax
+ 15945 FFFF
+ 15946 e4bb 48C1E004 salq $4, %rax
+ 15947 e4bf 480385E8 addq -1816(%rbp), %rax
+ 15947 F8FFFF
+ 15948 e4c6 8B958CF9 mov -1652(%rbp), %edx
+ 15948 FFFF
+ 15949 e4cc 48C1E204 salq $4, %rdx
+ 15950 e4d0 480395E0 addq -1824(%rbp), %rdx
+ 15950 F8FFFF
+ 15951 e4d7 660F6F02 movdqa (%rdx), %xmm0
+ 15952 e4db 660F7F00 movdqa %xmm0, (%rax)
+ 15953 e4df 838588F9 addl $1, -1656(%rbp)
+ 15953 FFFF01
+ 15954 e4e6 83AD8CF9 subl $1, -1652(%rbp)
+ 15954 FFFF01
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** while (jx)
+ 15955 .loc 2 1957 0
+ 15956 e4ed E9000F00 jmp .L240
+ 15956 00
+ 15957 .cfi_offset 3, -48
+ 15958 .cfi_offset 12, -40
+ 15959 .cfi_offset 13, -32
+ 15960 .cfi_offset 14, -24
+ 15961 .L259:
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+ 15962 .loc 2 1958 0
+ 15963 e4f2 8B8588F9 mov -1656(%rbp), %eax
+ 15963 FFFF
+ 15964 e4f8 48C1E004 salq $4, %rax
+ 15965 e4fc 4889C3 movq %rax, %rbx
+ 15966 e4ff 48039DE8 addq -1816(%rbp), %rbx
+ 15966 F8FFFF
+ 15967 e506 8B858CF9 mov -1652(%rbp), %eax
+ 15967 FFFF
+ 15968 e50c 48C1E004 salq $4, %rax
+ 15969 e510 480385E0 addq -1824(%rbp), %rax
+ 15969 F8FFFF
+ 15970 e517 660F6F00 movdqa (%rax), %xmm0
+ 15971 e51b 83AD8CF9 subl $1, -1652(%rbp)
+ 15971 FFFF01
+ 15972 e522 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 15972 90F9FFFF
+ 15973 e52a F30F6F85 movdqu -1648(%rbp), %xmm0
+ 15973 90F9FFFF
+ 15974 e532 F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 15974 A0F9FFFF
+ 15975 .LBB3943:
+ 15976 .LBB3944:
+ 15977 .LBB3945:
+ 15978 .LBB3946:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15979 .loc 2 667 0
+ 15980 e53a 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 15980 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 486
+
+
+ 15981 e542 F30F6F8D movdqu -1632(%rbp), %xmm1
+ 15981 A0F9FFFF
+ 15982 e54a F30F7F8D movdqu %xmm1, -1600(%rbp)
+ 15982 C0F9FFFF
+ 15983 e552 F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 15983 B0F9FFFF
+ 15984 e55a F30F6F85 movdqu -1600(%rbp), %xmm0
+ 15984 C0F9FFFF
+ 15985 e562 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 15985 E0F9FFFF
+ 15986 e56a F30F6F85 movdqu -1616(%rbp), %xmm0
+ 15986 B0F9FFFF
+ 15987 e572 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 15987 D0F9FFFF
+ 15988 .LBB3947:
+ 15989 .LBB3948:
+ 15990 .LBB3949:
+ 15991 .LBB3950:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15992 .loc 3 529 0
+ 15993 e57a F30F6F8D movdqu -1584(%rbp), %xmm1
+ 15993 D0F9FFFF
+ 15994 e582 F30F6F85 movdqu -1568(%rbp), %xmm0
+ 15994 E0F9FFFF
+ 15995 e58a 660F3800 pshufb %xmm1, %xmm0
+ 15995 C1
+ 15996 .LBE3950:
+ 15997 .LBE3949:
+ 15998 .LBE3948:
+ 15999 .LBE3947:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16000 .loc 2 667 0
+ 16001 e58f F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 16001 A0F9FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 16002 .loc 2 668 0
+ 16003 e597 F30F6F85 movdqu -1632(%rbp), %xmm0
+ 16003 A0F9FFFF
+ 16004 .LBE3946:
+ 16005 .LBE3945:
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r1 = AESBCMEMBER(RotBytesLeft) (state);
+ 16006 .loc 2 1106 0
+ 16007 e59f 660F7F85 movdqa %xmm0, -1856(%rbp)
+ 16007 C0F8FFFF
+ 16008 e5a7 660F6F85 movdqa -1856(%rbp), %xmm0
+ 16008 C0F8FFFF
+ 16009 e5af F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 16009 F0F9FFFF
+ 16010 .LBB3951:
+ 16011 .LBB3952:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16012 .loc 2 667 0
+ 16013 e5b7 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 16013 00000000
+ 16014 e5bf F30F6F8D movdqu -1552(%rbp), %xmm1
+ 16014 F0F9FFFF
+ 16015 e5c7 F30F7F8D movdqu %xmm1, -1520(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 487
+
+
+ 16015 10FAFFFF
+ 16016 e5cf F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 16016 00FAFFFF
+ 16017 e5d7 F30F6F85 movdqu -1520(%rbp), %xmm0
+ 16017 10FAFFFF
+ 16018 e5df F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 16018 30FAFFFF
+ 16019 e5e7 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 16019 00FAFFFF
+ 16020 e5ef F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 16020 20FAFFFF
+ 16021 .LBB3953:
+ 16022 .LBB3954:
+ 16023 .LBB3955:
+ 16024 .LBB3956:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16025 .loc 3 529 0
+ 16026 e5f7 F30F6F8D movdqu -1504(%rbp), %xmm1
+ 16026 20FAFFFF
+ 16027 e5ff F30F6F85 movdqu -1488(%rbp), %xmm0
+ 16027 30FAFFFF
+ 16028 e607 660F3800 pshufb %xmm1, %xmm0
+ 16028 C1
+ 16029 .LBE3956:
+ 16030 .LBE3955:
+ 16031 .LBE3954:
+ 16032 .LBE3953:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16033 .loc 2 667 0
+ 16034 e60c F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 16034 F0F9FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 16035 .loc 2 668 0
+ 16036 e614 F30F6F85 movdqu -1552(%rbp), %xmm0
+ 16036 F0F9FFFF
+ 16037 .LBE3952:
+ 16038 .LBE3951:
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r2 = AESBCMEMBER(RotBytesLeft) (r1);
+ 16039 .loc 2 1107 0
+ 16040 e61c 660F7F85 movdqa %xmm0, -1872(%rbp)
+ 16040 B0F8FFFF
+ 16041 e624 660F6F8D movdqa -1872(%rbp), %xmm1
+ 16041 B0F8FFFF
+ 16042 e62c F30F7F8D movdqu %xmm1, -1472(%rbp)
+ 16042 40FAFFFF
+ 16043 .LBB3957:
+ 16044 .LBB3958:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16045 .loc 2 667 0
+ 16046 e634 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 16046 00000000
+ 16047 e63c F30F6F8D movdqu -1472(%rbp), %xmm1
+ 16047 40FAFFFF
+ 16048 e644 F30F7F8D movdqu %xmm1, -1440(%rbp)
+ 16048 60FAFFFF
+ 16049 e64c F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 16049 50FAFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 488
+
+
+ 16050 e654 F30F6F85 movdqu -1440(%rbp), %xmm0
+ 16050 60FAFFFF
+ 16051 e65c F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 16051 80FAFFFF
+ 16052 e664 F30F6F85 movdqu -1456(%rbp), %xmm0
+ 16052 50FAFFFF
+ 16053 e66c F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 16053 70FAFFFF
+ 16054 .LBB3959:
+ 16055 .LBB3960:
+ 16056 .LBB3961:
+ 16057 .LBB3962:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16058 .loc 3 529 0
+ 16059 e674 F30F6F8D movdqu -1424(%rbp), %xmm1
+ 16059 70FAFFFF
+ 16060 e67c F30F6F85 movdqu -1408(%rbp), %xmm0
+ 16060 80FAFFFF
+ 16061 e684 660F3800 pshufb %xmm1, %xmm0
+ 16061 C1
+ 16062 .LBE3962:
+ 16063 .LBE3961:
+ 16064 .LBE3960:
+ 16065 .LBE3959:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16066 .loc 2 667 0
+ 16067 e689 F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 16067 40FAFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 16068 .loc 2 668 0
+ 16069 e691 F30F6F85 movdqu -1472(%rbp), %xmm0
+ 16069 40FAFFFF
+ 16070 .LBE3958:
+ 16071 .LBE3957:
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r3 = AESBCMEMBER(RotBytesLeft) (r2);
+ 16072 .loc 2 1108 0
+ 16073 e699 660F7F85 movdqa %xmm0, -1888(%rbp)
+ 16073 A0F8FFFF
+ 16074 e6a1 F30F6F85 movdqu -1648(%rbp), %xmm0
+ 16074 90F9FFFF
+ 16075 e6a9 F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 16075 A0FAFFFF
+ 16076 e6b1 660F6F85 movdqa -1872(%rbp), %xmm0
+ 16076 B0F8FFFF
+ 16077 e6b9 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 16077 90FAFFFF
+ 16078 .LBB3963:
+ 16079 .LBB3964:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16080 .loc 2 178 0
+ 16081 e6c1 F30F6F85 movdqu -1392(%rbp), %xmm0
+ 16081 90FAFFFF
+ 16082 e6c9 F30F6F8D movdqu -1376(%rbp), %xmm1
+ 16082 A0FAFFFF
+ 16083 e6d1 660FEFC1 pxor %xmm1, %xmm0
+ 16084 .LBE3964:
+ 16085 .LBE3963:
+
GAS LISTING /tmp/ccjbMjHD.s page 489
+
+
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(VecXor) (state, r2);
+ 16086 .loc 2 1110 0
+ 16087 e6d5 660F7F85 movdqa %xmm0, -1920(%rbp)
+ 16087 80F8FFFF
+ 16088 e6dd F30F6F85 movdqu -1648(%rbp), %xmm0
+ 16088 90F9FFFF
+ 16089 e6e5 F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 16089 C0FAFFFF
+ 16090 e6ed 660F6F8D movdqa -1856(%rbp), %xmm1
+ 16090 C0F8FFFF
+ 16091 e6f5 F30F7F8D movdqu %xmm1, -1360(%rbp)
+ 16091 B0FAFFFF
+ 16092 .LBB3965:
+ 16093 .LBB3966:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16094 .loc 2 178 0
+ 16095 e6fd F30F6F85 movdqu -1360(%rbp), %xmm0
+ 16095 B0FAFFFF
+ 16096 e705 F30F6F8D movdqu -1344(%rbp), %xmm1
+ 16096 C0FAFFFF
+ 16097 e70d 660FEFC1 pxor %xmm1, %xmm0
+ 16098 .LBE3966:
+ 16099 .LBE3965:
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(VecXor) (state, r1);
+ 16100 .loc 2 1111 0
+ 16101 e711 660F7F85 movdqa %xmm0, -1904(%rbp)
+ 16101 90F8FFFF
+ 16102 e719 660F6F85 movdqa -1872(%rbp), %xmm0
+ 16102 B0F8FFFF
+ 16103 e721 F30F7F85 movdqu %xmm0, -1312(%rbp)
+ 16103 E0FAFFFF
+ 16104 e729 660F6F8D movdqa -1888(%rbp), %xmm1
+ 16104 A0F8FFFF
+ 16105 e731 F30F7F8D movdqu %xmm1, -1328(%rbp)
+ 16105 D0FAFFFF
+ 16106 .LBB3967:
+ 16107 .LBB3968:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16108 .loc 2 178 0
+ 16109 e739 F30F6F85 movdqu -1328(%rbp), %xmm0
+ 16109 D0FAFFFF
+ 16110 e741 F30F6F8D movdqu -1312(%rbp), %xmm1
+ 16110 E0FAFFFF
+ 16111 e749 660FEFC1 pxor %xmm1, %xmm0
+ 16112 .LBE3968:
+ 16113 .LBE3967:
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (r2, r3);
+ 16114 .loc 2 1112 0
+ 16115 e74d 660F7F85 movdqa %xmm0, -1936(%rbp)
+ 16115 70F8FFFF
+ 16116 e755 660F6F85 movdqa -1936(%rbp), %xmm0
+ 16116 70F8FFFF
+ 16117 e75d F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 16117 00FBFFFF
+ 16118 e765 660F6F8D movdqa -1856(%rbp), %xmm1
+ 16118 C0F8FFFF
+ 16119 e76d F30F7F8D movdqu %xmm1, -1296(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 490
+
+
+ 16119 F0FAFFFF
+ 16120 .LBB3969:
+ 16121 .LBB3970:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16122 .loc 2 178 0
+ 16123 e775 F30F6F85 movdqu -1296(%rbp), %xmm0
+ 16123 F0FAFFFF
+ 16124 e77d F30F6F8D movdqu -1280(%rbp), %xmm1
+ 16124 00FBFFFF
+ 16125 e785 660FEFC1 pxor %xmm1, %xmm0
+ 16126 .LBE3970:
+ 16127 .LBE3969:
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (f8, r1);
+ 16128 .loc 2 1113 0
+ 16129 e789 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 16129 90F9FFFF
+ 16130 e791 660F6F85 movdqa -1936(%rbp), %xmm0
+ 16130 70F8FFFF
+ 16131 e799 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 16131 20FBFFFF
+ 16132 e7a1 660F6F8D movdqa -1904(%rbp), %xmm1
+ 16132 90F8FFFF
+ 16133 e7a9 F30F7F8D movdqu %xmm1, -1264(%rbp)
+ 16133 10FBFFFF
+ 16134 .LBB3971:
+ 16135 .LBB3972:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16136 .loc 2 178 0
+ 16137 e7b1 F30F6F85 movdqu -1264(%rbp), %xmm0
+ 16137 10FBFFFF
+ 16138 e7b9 F30F6F8D movdqu -1248(%rbp), %xmm1
+ 16138 20FBFFFF
+ 16139 e7c1 660FEFC1 pxor %xmm1, %xmm0
+ 16140 .LBE3972:
+ 16141 .LBE3971:
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (f8, f2);
+ 16142 .loc 2 1114 0
+ 16143 e7c5 660F7F85 movdqa %xmm0, -1936(%rbp)
+ 16143 70F8FFFF
+ 16144 e7cd 660F6F85 movdqa -1904(%rbp), %xmm0
+ 16144 90F8FFFF
+ 16145 e7d5 F30F7F85 movdqu %xmm0, -1216(%rbp)
+ 16145 40FBFFFF
+ 16146 .LBB3973:
+ 16147 .LBB3974:
+ 16148 .LBB3975:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 16149 .loc 2 933 0
+ 16150 e7dd F30F6F85 movdqu -1216(%rbp), %xmm0
+ 16150 40FBFFFF
+ 16151 e7e5 F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 16151 10F9FFFF
+ 16152 e7ed E8000000 call KDbgWriterGet at PLT
+ 16152 00
+ 16153 e7f2 4885C0 testq %rax, %rax
+ 16154 e7f5 747B je .L242
+ 16155 e7f7 BF010000 movl $1, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 491
+
+
+ 16155 00
+ 16156 e7fc E8000000 call KDbgCondToFlag at PLT
+ 16156 00
+ 16157 e801 4889C6 movq %rax, %rsi
+ 16158 e804 BF100000 movl $16, %edi
+ 16158 00
+ 16159 e809 E8000000 call KDbgTestModConds at PLT
+ 16159 00
+ 16160 e80e 84C0 testb %al, %al
+ 16161 e810 7460 je .L242
+ 16162 e812 8B851CF9 movl -1764(%rbp), %eax
+ 16162 FFFF
+ 16163 e818 89C7 movl %eax, %edi
+ 16164 e81a E8E117FF call bswap_32
+ 16164 FF
+ 16165 e81f 4189C6 movl %eax, %r14d
+ 16166 e822 8B8518F9 movl -1768(%rbp), %eax
+ 16166 FFFF
+ 16167 e828 89C7 movl %eax, %edi
+ 16168 e82a E8D117FF call bswap_32
+ 16168 FF
+ 16169 e82f 4189C5 movl %eax, %r13d
+ 16170 e832 8B8514F9 movl -1772(%rbp), %eax
+ 16170 FFFF
+ 16171 e838 89C7 movl %eax, %edi
+ 16172 e83a E8C117FF call bswap_32
+ 16172 FF
+ 16173 e83f 4189C4 movl %eax, %r12d
+ 16174 e842 8B8510F9 movl -1776(%rbp), %eax
+ 16174 FFFF
+ 16175 e848 89C7 movl %eax, %edi
+ 16176 e84a E8B117FF call bswap_32
+ 16176 FF
+ 16177 e84f 4589F1 movl %r14d, %r9d
+ 16178 e852 4589E8 movl %r13d, %r8d
+ 16179 e855 4489E1 movl %r12d, %ecx
+ 16180 e858 89C2 movl %eax, %edx
+ 16181 e85a 488D3500 leaq .LC5(%rip), %rsi
+ 16181 000000
+ 16182 e861 488D3D00 leaq .LC1(%rip), %rdi
+ 16182 000000
+ 16183 e868 B8000000 movl $0, %eax
+ 16183 00
+ 16184 e86d E8000000 call KDbgMsg at PLT
+ 16184 00
+ 16185 .L242:
+ 16186 .LBE3975:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16187 .loc 2 934 0
+ 16188 e872 B8070000 movl $7, %eax
+ 16188 00
+ 16189 e877 F30F6F85 movdqu -1216(%rbp), %xmm0
+ 16189 40FBFFFF
+ 16190 e87f F30F7F85 movdqu %xmm0, -1152(%rbp)
+ 16190 80FBFFFF
+ 16191 e887 89857CFB movl %eax, -1156(%rbp)
+ 16191 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 492
+
+
+ 16192 e88d F30F6F85 movdqu -1152(%rbp), %xmm0
+ 16192 80FBFFFF
+ 16193 e895 F30F7F85 movdqu %xmm0, -1120(%rbp)
+ 16193 A0FBFFFF
+ 16194 e89d 8B857CFB movl -1156(%rbp), %eax
+ 16194 FFFF
+ 16195 e8a3 89859CFB movl %eax, -1124(%rbp)
+ 16195 FFFF
+ 16196 .LBB3976:
+ 16197 .LBB3977:
+ 16198 .LBB3978:
+ 16199 .LBB3979:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 16200 .loc 3 433 0
+ 16201 e8a9 F30F6F85 movdqu -1120(%rbp), %xmm0
+ 16201 A0FBFFFF
+ 16202 e8b1 8B859CFB movl -1124(%rbp), %eax
+ 16202 FFFF
+ 16203 e8b7 89856CF8 movl %eax, -1940(%rbp)
+ 16203 FFFF
+ 16204 e8bd 660F6E8D movd -1940(%rbp), %xmm1
+ 16204 6CF8FFFF
+ 16205 e8c5 660FD2C1 psrld %xmm1, %xmm0
+ 16206 .LBE3979:
+ 16207 .LBE3978:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 16208 .loc 2 488 0
+ 16209 e8c9 F30F7F85 movdqu %xmm0, -1152(%rbp)
+ 16209 80FBFFFF
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16210 .loc 2 489 0
+ 16211 e8d1 B8080000 movl $8, %eax
+ 16211 00
+ 16212 e8d6 83BD7CFB cmpl $8, -1156(%rbp)
+ 16212 FFFF08
+ 16213 e8dd 0F4E857C cmovle -1156(%rbp), %eax
+ 16213 FBFFFF
+ 16214 e8e4 4898 cltq
+ 16215 e8e6 4889C2 movq %rax, %rdx
+ 16216 e8e9 48C1E204 salq $4, %rdx
+ 16217 e8ed 488D0500 leaq sr_mask.7327(%rip), %rax
+ 16217 000000
+ 16218 e8f4 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 16218 02
+ 16219 e8f9 F30F6F8D movdqu -1152(%rbp), %xmm1
+ 16219 80FBFFFF
+ 16220 e901 F30F7F8D movdqu %xmm1, -1088(%rbp)
+ 16220 C0FBFFFF
+ 16221 e909 F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 16221 B0FBFFFF
+ 16222 .LBB3980:
+ 16223 .LBB3981:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 16224 .loc 2 206 0
+ 16225 e911 F30F6F85 movdqu -1104(%rbp), %xmm0
+ 16225 B0FBFFFF
+ 16226 e919 F30F6F8D movdqu -1088(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 493
+
+
+ 16226 C0FBFFFF
+ 16227 e921 660FDBC1 pand %xmm1, %xmm0
+ 16228 .LBE3981:
+ 16229 .LBE3980:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16230 .loc 2 489 0
+ 16231 e925 F30F7F85 movdqu %xmm0, -1152(%rbp)
+ 16231 80FBFFFF
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 16232 .loc 2 490 0
+ 16233 e92d F30F6F85 movdqu -1152(%rbp), %xmm0
+ 16233 80FBFFFF
+ 16234 .LBE3977:
+ 16235 .LBE3976:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16236 .loc 2 934 0
+ 16237 e935 F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 16237 50FBFFFF
+ 16238 .LBB3982:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 16239 .loc 2 935 0
+ 16240 e93d F30F6F85 movdqu -1200(%rbp), %xmm0
+ 16240 50FBFFFF
+ 16241 e945 F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 16241 00F9FFFF
+ 16242 e94d E8000000 call KDbgWriterGet at PLT
+ 16242 00
+ 16243 e952 4885C0 testq %rax, %rax
+ 16244 e955 747B je .L244
+ 16245 e957 BF010000 movl $1, %edi
+ 16245 00
+ 16246 e95c E8000000 call KDbgCondToFlag at PLT
+ 16246 00
+ 16247 e961 4889C6 movq %rax, %rsi
+ 16248 e964 BF100000 movl $16, %edi
+ 16248 00
+ 16249 e969 E8000000 call KDbgTestModConds at PLT
+ 16249 00
+ 16250 e96e 84C0 testb %al, %al
+ 16251 e970 7460 je .L244
+ 16252 e972 8B850CF9 movl -1780(%rbp), %eax
+ 16252 FFFF
+ 16253 e978 89C7 movl %eax, %edi
+ 16254 e97a E88116FF call bswap_32
+ 16254 FF
+ 16255 e97f 4189C6 movl %eax, %r14d
+ 16256 e982 8B8508F9 movl -1784(%rbp), %eax
+ 16256 FFFF
+ 16257 e988 89C7 movl %eax, %edi
+ 16258 e98a E87116FF call bswap_32
+ 16258 FF
+ 16259 e98f 4189C5 movl %eax, %r13d
+ 16260 e992 8B8504F9 movl -1788(%rbp), %eax
+ 16260 FFFF
+ 16261 e998 89C7 movl %eax, %edi
+ 16262 e99a E86116FF call bswap_32
+ 16262 FF
+
GAS LISTING /tmp/ccjbMjHD.s page 494
+
+
+ 16263 e99f 4189C4 movl %eax, %r12d
+ 16264 e9a2 8B8500F9 movl -1792(%rbp), %eax
+ 16264 FFFF
+ 16265 e9a8 89C7 movl %eax, %edi
+ 16266 e9aa E85116FF call bswap_32
+ 16266 FF
+ 16267 e9af 4589F1 movl %r14d, %r9d
+ 16268 e9b2 4589E8 movl %r13d, %r8d
+ 16269 e9b5 4489E1 movl %r12d, %ecx
+ 16270 e9b8 89C2 movl %eax, %edx
+ 16271 e9ba 488D3500 leaq .LC6(%rip), %rsi
+ 16271 000000
+ 16272 e9c1 488D3D00 leaq .LC1(%rip), %rdi
+ 16272 000000
+ 16273 e9c8 B8000000 movl $0, %eax
+ 16273 00
+ 16274 e9cd E8000000 call KDbgMsg at PLT
+ 16274 00
+ 16275 .L244:
+ 16276 e9d2 F30F6F85 movdqu -1216(%rbp), %xmm0
+ 16276 40FBFFFF
+ 16277 e9da F30F7F85 movdqu %xmm0, -1056(%rbp)
+ 16277 E0FBFFFF
+ 16278 .LBE3982:
+ 16279 .LBB3983:
+ 16280 .LBB3984:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 16281 .loc 2 426 0
+ 16282 e9e2 F30F6F85 movdqu -1056(%rbp), %xmm0
+ 16282 E0FBFFFF
+ 16283 e9ea F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 16283 F0FBFFFF
+ 16284 e9f2 F30F6F85 movdqu -1040(%rbp), %xmm0
+ 16284 F0FBFFFF
+ 16285 e9fa F30F7F85 movdqu %xmm0, -1008(%rbp)
+ 16285 10FCFFFF
+ 16286 .LBB3985:
+ 16287 .LBB3986:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 16288 .loc 3 416 0
+ 16289 ea02 F30F6F85 movdqu -1008(%rbp), %xmm0
+ 16289 10FCFFFF
+ 16290 ea0a 660F72F0 pslld $1, %xmm0
+ 16290 01
+ 16291 .LBE3986:
+ 16292 .LBE3985:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 16293 .loc 2 433 0
+ 16294 ea0f F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 16294 F0FBFFFF
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16295 .loc 2 435 0
+ 16296 ea17 B8010000 movl $1, %eax
+ 16296 00
+ 16297 ea1c 4898 cltq
+ 16298 ea1e 4889C2 movq %rax, %rdx
+ 16299 ea21 48C1E204 salq $4, %rdx
+
GAS LISTING /tmp/ccjbMjHD.s page 495
+
+
+ 16300 ea25 488D0500 leaq sl_mask.7310(%rip), %rax
+ 16300 000000
+ 16301 ea2c 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 16301 02
+ 16302 ea31 F30F6F8D movdqu -1040(%rbp), %xmm1
+ 16302 F0FBFFFF
+ 16303 ea39 F30F7F8D movdqu %xmm1, -976(%rbp)
+ 16303 30FCFFFF
+ 16304 ea41 F30F7F85 movdqu %xmm0, -992(%rbp)
+ 16304 20FCFFFF
+ 16305 .LBB3987:
+ 16306 .LBB3988:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 16307 .loc 2 206 0
+ 16308 ea49 F30F6F85 movdqu -992(%rbp), %xmm0
+ 16308 20FCFFFF
+ 16309 ea51 F30F6F8D movdqu -976(%rbp), %xmm1
+ 16309 30FCFFFF
+ 16310 ea59 660FDBC1 pand %xmm1, %xmm0
+ 16311 .LBE3988:
+ 16312 .LBE3987:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16313 .loc 2 435 0
+ 16314 ea5d F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 16314 F0FBFFFF
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 16315 .loc 2 437 0
+ 16316 ea65 F30F6F85 movdqu -1040(%rbp), %xmm0
+ 16316 F0FBFFFF
+ 16317 .LBE3984:
+ 16318 .LBE3983:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 16319 .loc 2 936 0
+ 16320 ea6d F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 16320 60FBFFFF
+ 16321 .LBB3989:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 16322 .loc 2 937 0
+ 16323 ea75 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 16323 60FBFFFF
+ 16324 ea7d F30F7F85 movdqu %xmm0, -1808(%rbp)
+ 16324 F0F8FFFF
+ 16325 ea85 E8000000 call KDbgWriterGet at PLT
+ 16325 00
+ 16326 ea8a 4885C0 testq %rax, %rax
+ 16327 ea8d 747B je .L246
+ 16328 ea8f BF010000 movl $1, %edi
+ 16328 00
+ 16329 ea94 E8000000 call KDbgCondToFlag at PLT
+ 16329 00
+ 16330 ea99 4889C6 movq %rax, %rsi
+ 16331 ea9c BF100000 movl $16, %edi
+ 16331 00
+ 16332 eaa1 E8000000 call KDbgTestModConds at PLT
+ 16332 00
+ 16333 eaa6 84C0 testb %al, %al
+ 16334 eaa8 7460 je .L246
+
GAS LISTING /tmp/ccjbMjHD.s page 496
+
+
+ 16335 eaaa 8B85FCF8 movl -1796(%rbp), %eax
+ 16335 FFFF
+ 16336 eab0 89C7 movl %eax, %edi
+ 16337 eab2 E84915FF call bswap_32
+ 16337 FF
+ 16338 eab7 4189C6 movl %eax, %r14d
+ 16339 eaba 8B85F8F8 movl -1800(%rbp), %eax
+ 16339 FFFF
+ 16340 eac0 89C7 movl %eax, %edi
+ 16341 eac2 E83915FF call bswap_32
+ 16341 FF
+ 16342 eac7 4189C5 movl %eax, %r13d
+ 16343 eaca 8B85F4F8 movl -1804(%rbp), %eax
+ 16343 FFFF
+ 16344 ead0 89C7 movl %eax, %edi
+ 16345 ead2 E82915FF call bswap_32
+ 16345 FF
+ 16346 ead7 4189C4 movl %eax, %r12d
+ 16347 eada 8B85F0F8 movl -1808(%rbp), %eax
+ 16347 FFFF
+ 16348 eae0 89C7 movl %eax, %edi
+ 16349 eae2 E81915FF call bswap_32
+ 16349 FF
+ 16350 eae7 4589F1 movl %r14d, %r9d
+ 16351 eaea 4589E8 movl %r13d, %r8d
+ 16352 eaed 4489E1 movl %r12d, %ecx
+ 16353 eaf0 89C2 movl %eax, %edx
+ 16354 eaf2 488D3500 leaq .LC7(%rip), %rsi
+ 16354 000000
+ 16355 eaf9 488D3D00 leaq .LC1(%rip), %rdi
+ 16355 000000
+ 16356 eb00 B8000000 movl $0, %eax
+ 16356 00
+ 16357 eb05 E8000000 call KDbgMsg at PLT
+ 16357 00
+ 16358 .L246:
+ 16359 .LBE3989:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16360 .loc 2 938 0
+ 16361 eb0a 660F6F05 movdqa FF_tab(%rip), %xmm0
+ 16361 00000000
+ 16362 eb12 F30F7F85 movdqu %xmm0, -944(%rbp)
+ 16362 50FCFFFF
+ 16363 eb1a F30F6F85 movdqu -1200(%rbp), %xmm0
+ 16363 50FBFFFF
+ 16364 eb22 F30F7F85 movdqu %xmm0, -960(%rbp)
+ 16364 40FCFFFF
+ 16365 eb2a F30F6F85 movdqu -944(%rbp), %xmm0
+ 16365 50FCFFFF
+ 16366 eb32 F30F7F85 movdqu %xmm0, -912(%rbp)
+ 16366 70FCFFFF
+ 16367 eb3a F30F6F85 movdqu -960(%rbp), %xmm0
+ 16367 40FCFFFF
+ 16368 eb42 F30F7F85 movdqu %xmm0, -928(%rbp)
+ 16368 60FCFFFF
+ 16369 .LBB3990:
+ 16370 .LBB3991:
+
GAS LISTING /tmp/ccjbMjHD.s page 497
+
+
+ 16371 .LBB3992:
+ 16372 .LBB3993:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16373 .loc 3 529 0
+ 16374 eb4a F30F6F8D movdqu -928(%rbp), %xmm1
+ 16374 60FCFFFF
+ 16375 eb52 F30F6F85 movdqu -912(%rbp), %xmm0
+ 16375 70FCFFFF
+ 16376 eb5a 660F3800 pshufb %xmm1, %xmm0
+ 16376 C1
+ 16377 .LBE3993:
+ 16378 .LBE3992:
+ 16379 .LBE3991:
+ 16380 .LBE3990:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16381 .loc 2 938 0
+ 16382 eb5f F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 16382 50FBFFFF
+ 16383 eb67 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 16383 60FBFFFF
+ 16384 eb6f F30F7F85 movdqu %xmm0, -880(%rbp)
+ 16384 90FCFFFF
+ 16385 eb77 F30F6F85 movdqu -1200(%rbp), %xmm0
+ 16385 50FBFFFF
+ 16386 eb7f F30F7F85 movdqu %xmm0, -896(%rbp)
+ 16386 80FCFFFF
+ 16387 .LBB3994:
+ 16388 .LBB3995:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16389 .loc 2 178 0
+ 16390 eb87 F30F6F85 movdqu -896(%rbp), %xmm0
+ 16390 80FCFFFF
+ 16391 eb8f F30F6F8D movdqu -880(%rbp), %xmm1
+ 16391 90FCFFFF
+ 16392 eb97 660FEFC1 pxor %xmm1, %xmm0
+ 16393 .LBE3995:
+ 16394 .LBE3994:
+ 16395 .LBE3974:
+ 16396 .LBE3973:
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(FF_mul) (f2,1);
+ 16397 .loc 2 1118 0
+ 16398 eb9b 660F7F85 movdqa %xmm0, -1904(%rbp)
+ 16398 90F8FFFF
+ 16399 eba3 660F6F85 movdqa -1920(%rbp), %xmm0
+ 16399 80F8FFFF
+ 16400 ebab F30F7F85 movdqu %xmm0, -848(%rbp)
+ 16400 B0FCFFFF
+ 16401 .LBB3996:
+ 16402 .LBB3997:
+ 16403 .LBB3998:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 16404 .loc 2 933 0
+ 16405 ebb3 F30F6F85 movdqu -848(%rbp), %xmm0
+ 16405 B0FCFFFF
+ 16406 ebbb F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 16406 40F9FFFF
+ 16407 ebc3 E8000000 call KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 498
+
+
+ 16407 00
+ 16408 ebc8 4885C0 testq %rax, %rax
+ 16409 ebcb 747B je .L248
+ 16410 ebcd BF010000 movl $1, %edi
+ 16410 00
+ 16411 ebd2 E8000000 call KDbgCondToFlag at PLT
+ 16411 00
+ 16412 ebd7 4889C6 movq %rax, %rsi
+ 16413 ebda BF100000 movl $16, %edi
+ 16413 00
+ 16414 ebdf E8000000 call KDbgTestModConds at PLT
+ 16414 00
+ 16415 ebe4 84C0 testb %al, %al
+ 16416 ebe6 7460 je .L248
+ 16417 ebe8 8B854CF9 movl -1716(%rbp), %eax
+ 16417 FFFF
+ 16418 ebee 89C7 movl %eax, %edi
+ 16419 ebf0 E80B14FF call bswap_32
+ 16419 FF
+ 16420 ebf5 4189C6 movl %eax, %r14d
+ 16421 ebf8 8B8548F9 movl -1720(%rbp), %eax
+ 16421 FFFF
+ 16422 ebfe 89C7 movl %eax, %edi
+ 16423 ec00 E8FB13FF call bswap_32
+ 16423 FF
+ 16424 ec05 4189C5 movl %eax, %r13d
+ 16425 ec08 8B8544F9 movl -1724(%rbp), %eax
+ 16425 FFFF
+ 16426 ec0e 89C7 movl %eax, %edi
+ 16427 ec10 E8EB13FF call bswap_32
+ 16427 FF
+ 16428 ec15 4189C4 movl %eax, %r12d
+ 16429 ec18 8B8540F9 movl -1728(%rbp), %eax
+ 16429 FFFF
+ 16430 ec1e 89C7 movl %eax, %edi
+ 16431 ec20 E8DB13FF call bswap_32
+ 16431 FF
+ 16432 ec25 4589F1 movl %r14d, %r9d
+ 16433 ec28 4589E8 movl %r13d, %r8d
+ 16434 ec2b 4489E1 movl %r12d, %ecx
+ 16435 ec2e 89C2 movl %eax, %edx
+ 16436 ec30 488D3500 leaq .LC5(%rip), %rsi
+ 16436 000000
+ 16437 ec37 488D3D00 leaq .LC1(%rip), %rdi
+ 16437 000000
+ 16438 ec3e B8000000 movl $0, %eax
+ 16438 00
+ 16439 ec43 E8000000 call KDbgMsg at PLT
+ 16439 00
+ 16440 .L248:
+ 16441 .LBE3998:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16442 .loc 2 934 0
+ 16443 ec48 B8060000 movl $6, %eax
+ 16443 00
+ 16444 ec4d F30F6F85 movdqu -848(%rbp), %xmm0
+ 16444 B0FCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 499
+
+
+ 16445 ec55 F30F7F85 movdqu %xmm0, -784(%rbp)
+ 16445 F0FCFFFF
+ 16446 ec5d 8985ECFC movl %eax, -788(%rbp)
+ 16446 FFFF
+ 16447 ec63 F30F6F85 movdqu -784(%rbp), %xmm0
+ 16447 F0FCFFFF
+ 16448 ec6b F30F7F85 movdqu %xmm0, -752(%rbp)
+ 16448 10FDFFFF
+ 16449 ec73 8B85ECFC movl -788(%rbp), %eax
+ 16449 FFFF
+ 16450 ec79 89850CFD movl %eax, -756(%rbp)
+ 16450 FFFF
+ 16451 .LBB3999:
+ 16452 .LBB4000:
+ 16453 .LBB4001:
+ 16454 .LBB4002:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 16455 .loc 3 433 0
+ 16456 ec7f F30F6F85 movdqu -752(%rbp), %xmm0
+ 16456 10FDFFFF
+ 16457 ec87 8B850CFD movl -756(%rbp), %eax
+ 16457 FFFF
+ 16458 ec8d 898568F8 movl %eax, -1944(%rbp)
+ 16458 FFFF
+ 16459 ec93 660F6E8D movd -1944(%rbp), %xmm1
+ 16459 68F8FFFF
+ 16460 ec9b 660FD2C1 psrld %xmm1, %xmm0
+ 16461 .LBE4002:
+ 16462 .LBE4001:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 16463 .loc 2 488 0
+ 16464 ec9f F30F7F85 movdqu %xmm0, -784(%rbp)
+ 16464 F0FCFFFF
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16465 .loc 2 489 0
+ 16466 eca7 B8080000 movl $8, %eax
+ 16466 00
+ 16467 ecac 83BDECFC cmpl $8, -788(%rbp)
+ 16467 FFFF08
+ 16468 ecb3 0F4E85EC cmovle -788(%rbp), %eax
+ 16468 FCFFFF
+ 16469 ecba 4898 cltq
+ 16470 ecbc 4889C2 movq %rax, %rdx
+ 16471 ecbf 48C1E204 salq $4, %rdx
+ 16472 ecc3 488D0500 leaq sr_mask.7327(%rip), %rax
+ 16472 000000
+ 16473 ecca 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 16473 02
+ 16474 eccf F30F6F8D movdqu -784(%rbp), %xmm1
+ 16474 F0FCFFFF
+ 16475 ecd7 F30F7F8D movdqu %xmm1, -720(%rbp)
+ 16475 30FDFFFF
+ 16476 ecdf F30F7F85 movdqu %xmm0, -736(%rbp)
+ 16476 20FDFFFF
+ 16477 .LBB4003:
+ 16478 .LBB4004:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+
GAS LISTING /tmp/ccjbMjHD.s page 500
+
+
+ 16479 .loc 2 206 0
+ 16480 ece7 F30F6F85 movdqu -736(%rbp), %xmm0
+ 16480 20FDFFFF
+ 16481 ecef F30F6F8D movdqu -720(%rbp), %xmm1
+ 16481 30FDFFFF
+ 16482 ecf7 660FDBC1 pand %xmm1, %xmm0
+ 16483 .LBE4004:
+ 16484 .LBE4003:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16485 .loc 2 489 0
+ 16486 ecfb F30F7F85 movdqu %xmm0, -784(%rbp)
+ 16486 F0FCFFFF
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 16487 .loc 2 490 0
+ 16488 ed03 F30F6F85 movdqu -784(%rbp), %xmm0
+ 16488 F0FCFFFF
+ 16489 .LBE4000:
+ 16490 .LBE3999:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16491 .loc 2 934 0
+ 16492 ed0b F30F7F85 movdqu %xmm0, -832(%rbp)
+ 16492 C0FCFFFF
+ 16493 .LBB4005:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 16494 .loc 2 935 0
+ 16495 ed13 F30F6F85 movdqu -832(%rbp), %xmm0
+ 16495 C0FCFFFF
+ 16496 ed1b F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 16496 30F9FFFF
+ 16497 ed23 E8000000 call KDbgWriterGet at PLT
+ 16497 00
+ 16498 ed28 4885C0 testq %rax, %rax
+ 16499 ed2b 747B je .L250
+ 16500 ed2d BF010000 movl $1, %edi
+ 16500 00
+ 16501 ed32 E8000000 call KDbgCondToFlag at PLT
+ 16501 00
+ 16502 ed37 4889C6 movq %rax, %rsi
+ 16503 ed3a BF100000 movl $16, %edi
+ 16503 00
+ 16504 ed3f E8000000 call KDbgTestModConds at PLT
+ 16504 00
+ 16505 ed44 84C0 testb %al, %al
+ 16506 ed46 7460 je .L250
+ 16507 ed48 8B853CF9 movl -1732(%rbp), %eax
+ 16507 FFFF
+ 16508 ed4e 89C7 movl %eax, %edi
+ 16509 ed50 E8AB12FF call bswap_32
+ 16509 FF
+ 16510 ed55 4189C6 movl %eax, %r14d
+ 16511 ed58 8B8538F9 movl -1736(%rbp), %eax
+ 16511 FFFF
+ 16512 ed5e 89C7 movl %eax, %edi
+ 16513 ed60 E89B12FF call bswap_32
+ 16513 FF
+ 16514 ed65 4189C5 movl %eax, %r13d
+ 16515 ed68 8B8534F9 movl -1740(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 501
+
+
+ 16515 FFFF
+ 16516 ed6e 89C7 movl %eax, %edi
+ 16517 ed70 E88B12FF call bswap_32
+ 16517 FF
+ 16518 ed75 4189C4 movl %eax, %r12d
+ 16519 ed78 8B8530F9 movl -1744(%rbp), %eax
+ 16519 FFFF
+ 16520 ed7e 89C7 movl %eax, %edi
+ 16521 ed80 E87B12FF call bswap_32
+ 16521 FF
+ 16522 ed85 4589F1 movl %r14d, %r9d
+ 16523 ed88 4589E8 movl %r13d, %r8d
+ 16524 ed8b 4489E1 movl %r12d, %ecx
+ 16525 ed8e 89C2 movl %eax, %edx
+ 16526 ed90 488D3500 leaq .LC6(%rip), %rsi
+ 16526 000000
+ 16527 ed97 488D3D00 leaq .LC1(%rip), %rdi
+ 16527 000000
+ 16528 ed9e B8000000 movl $0, %eax
+ 16528 00
+ 16529 eda3 E8000000 call KDbgMsg at PLT
+ 16529 00
+ 16530 .L250:
+ 16531 eda8 F30F6F85 movdqu -848(%rbp), %xmm0
+ 16531 B0FCFFFF
+ 16532 edb0 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 16532 50FDFFFF
+ 16533 .LBE4005:
+ 16534 .LBB4006:
+ 16535 .LBB4007:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 16536 .loc 2 426 0
+ 16537 edb8 F30F6F85 movdqu -688(%rbp), %xmm0
+ 16537 50FDFFFF
+ 16538 edc0 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 16538 60FDFFFF
+ 16539 edc8 F30F6F85 movdqu -672(%rbp), %xmm0
+ 16539 60FDFFFF
+ 16540 edd0 F30F7F85 movdqu %xmm0, -640(%rbp)
+ 16540 80FDFFFF
+ 16541 .LBB4008:
+ 16542 .LBB4009:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 16543 .loc 3 416 0
+ 16544 edd8 F30F6F85 movdqu -640(%rbp), %xmm0
+ 16544 80FDFFFF
+ 16545 ede0 660F72F0 pslld $2, %xmm0
+ 16545 02
+ 16546 .LBE4009:
+ 16547 .LBE4008:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 16548 .loc 2 433 0
+ 16549 ede5 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 16549 60FDFFFF
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16550 .loc 2 435 0
+ 16551 eded B8020000 movl $2, %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 502
+
+
+ 16551 00
+ 16552 edf2 4898 cltq
+ 16553 edf4 4889C2 movq %rax, %rdx
+ 16554 edf7 48C1E204 salq $4, %rdx
+ 16555 edfb 488D0500 leaq sl_mask.7310(%rip), %rax
+ 16555 000000
+ 16556 ee02 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 16556 02
+ 16557 ee07 F30F6F8D movdqu -672(%rbp), %xmm1
+ 16557 60FDFFFF
+ 16558 ee0f F30F7F8D movdqu %xmm1, -608(%rbp)
+ 16558 A0FDFFFF
+ 16559 ee17 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 16559 90FDFFFF
+ 16560 .LBB4010:
+ 16561 .LBB4011:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 16562 .loc 2 206 0
+ 16563 ee1f F30F6F85 movdqu -624(%rbp), %xmm0
+ 16563 90FDFFFF
+ 16564 ee27 F30F6F8D movdqu -608(%rbp), %xmm1
+ 16564 A0FDFFFF
+ 16565 ee2f 660FDBC1 pand %xmm1, %xmm0
+ 16566 .LBE4011:
+ 16567 .LBE4010:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16568 .loc 2 435 0
+ 16569 ee33 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 16569 60FDFFFF
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 16570 .loc 2 437 0
+ 16571 ee3b F30F6F85 movdqu -672(%rbp), %xmm0
+ 16571 60FDFFFF
+ 16572 .LBE4007:
+ 16573 .LBE4006:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 16574 .loc 2 936 0
+ 16575 ee43 F30F7F85 movdqu %xmm0, -816(%rbp)
+ 16575 D0FCFFFF
+ 16576 .LBB4012:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 16577 .loc 2 937 0
+ 16578 ee4b F30F6F85 movdqu -816(%rbp), %xmm0
+ 16578 D0FCFFFF
+ 16579 ee53 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 16579 20F9FFFF
+ 16580 ee5b E8000000 call KDbgWriterGet at PLT
+ 16580 00
+ 16581 ee60 4885C0 testq %rax, %rax
+ 16582 ee63 747B je .L252
+ 16583 ee65 BF010000 movl $1, %edi
+ 16583 00
+ 16584 ee6a E8000000 call KDbgCondToFlag at PLT
+ 16584 00
+ 16585 ee6f 4889C6 movq %rax, %rsi
+ 16586 ee72 BF100000 movl $16, %edi
+ 16586 00
+
GAS LISTING /tmp/ccjbMjHD.s page 503
+
+
+ 16587 ee77 E8000000 call KDbgTestModConds at PLT
+ 16587 00
+ 16588 ee7c 84C0 testb %al, %al
+ 16589 ee7e 7460 je .L252
+ 16590 ee80 8B852CF9 movl -1748(%rbp), %eax
+ 16590 FFFF
+ 16591 ee86 89C7 movl %eax, %edi
+ 16592 ee88 E87311FF call bswap_32
+ 16592 FF
+ 16593 ee8d 4189C6 movl %eax, %r14d
+ 16594 ee90 8B8528F9 movl -1752(%rbp), %eax
+ 16594 FFFF
+ 16595 ee96 89C7 movl %eax, %edi
+ 16596 ee98 E86311FF call bswap_32
+ 16596 FF
+ 16597 ee9d 4189C5 movl %eax, %r13d
+ 16598 eea0 8B8524F9 movl -1756(%rbp), %eax
+ 16598 FFFF
+ 16599 eea6 89C7 movl %eax, %edi
+ 16600 eea8 E85311FF call bswap_32
+ 16600 FF
+ 16601 eead 4189C4 movl %eax, %r12d
+ 16602 eeb0 8B8520F9 movl -1760(%rbp), %eax
+ 16602 FFFF
+ 16603 eeb6 89C7 movl %eax, %edi
+ 16604 eeb8 E84311FF call bswap_32
+ 16604 FF
+ 16605 eebd 4589F1 movl %r14d, %r9d
+ 16606 eec0 4589E8 movl %r13d, %r8d
+ 16607 eec3 4489E1 movl %r12d, %ecx
+ 16608 eec6 89C2 movl %eax, %edx
+ 16609 eec8 488D3500 leaq .LC7(%rip), %rsi
+ 16609 000000
+ 16610 eecf 488D3D00 leaq .LC1(%rip), %rdi
+ 16610 000000
+ 16611 eed6 B8000000 movl $0, %eax
+ 16611 00
+ 16612 eedb E8000000 call KDbgMsg at PLT
+ 16612 00
+ 16613 .L252:
+ 16614 .LBE4012:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16615 .loc 2 938 0
+ 16616 eee0 660F6F05 movdqa FF_tab(%rip), %xmm0
+ 16616 00000000
+ 16617 eee8 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 16617 C0FDFFFF
+ 16618 eef0 F30F6F85 movdqu -832(%rbp), %xmm0
+ 16618 C0FCFFFF
+ 16619 eef8 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 16619 B0FDFFFF
+ 16620 ef00 F30F6F85 movdqu -576(%rbp), %xmm0
+ 16620 C0FDFFFF
+ 16621 ef08 F30F7F85 movdqu %xmm0, -544(%rbp)
+ 16621 E0FDFFFF
+ 16622 ef10 F30F6F85 movdqu -592(%rbp), %xmm0
+ 16622 B0FDFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 504
+
+
+ 16623 ef18 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 16623 D0FDFFFF
+ 16624 .LBB4013:
+ 16625 .LBB4014:
+ 16626 .LBB4015:
+ 16627 .LBB4016:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16628 .loc 3 529 0
+ 16629 ef20 F30F6F8D movdqu -560(%rbp), %xmm1
+ 16629 D0FDFFFF
+ 16630 ef28 F30F6F85 movdqu -544(%rbp), %xmm0
+ 16630 E0FDFFFF
+ 16631 ef30 660F3800 pshufb %xmm1, %xmm0
+ 16631 C1
+ 16632 .LBE4016:
+ 16633 .LBE4015:
+ 16634 .LBE4014:
+ 16635 .LBE4013:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16636 .loc 2 938 0
+ 16637 ef35 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 16637 C0FCFFFF
+ 16638 ef3d F30F6F85 movdqu -816(%rbp), %xmm0
+ 16638 D0FCFFFF
+ 16639 ef45 F30F7F85 movdqu %xmm0, -512(%rbp)
+ 16639 00FEFFFF
+ 16640 ef4d F30F6F85 movdqu -832(%rbp), %xmm0
+ 16640 C0FCFFFF
+ 16641 ef55 F30F7F85 movdqu %xmm0, -528(%rbp)
+ 16641 F0FDFFFF
+ 16642 .LBB4017:
+ 16643 .LBB4018:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16644 .loc 2 178 0
+ 16645 ef5d F30F6F85 movdqu -528(%rbp), %xmm0
+ 16645 F0FDFFFF
+ 16646 ef65 F30F6F8D movdqu -512(%rbp), %xmm1
+ 16646 00FEFFFF
+ 16647 ef6d 660FEFC1 pxor %xmm1, %xmm0
+ 16648 .LBE4018:
+ 16649 .LBE4017:
+ 16650 .LBE3997:
+ 16651 .LBE3996:
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(FF_mul) (f4,2);
+ 16652 .loc 2 1119 0
+ 16653 ef71 660F7F85 movdqa %xmm0, -1920(%rbp)
+ 16653 80F8FFFF
+ 16654 ef79 660F6F85 movdqa -1936(%rbp), %xmm0
+ 16654 70F8FFFF
+ 16655 ef81 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 16655 20FEFFFF
+ 16656 .LBB4019:
+ 16657 .LBB4020:
+ 16658 .LBB4021:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 16659 .loc 2 933 0
+ 16660 ef89 F30F6F85 movdqu -480(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 505
+
+
+ 16660 20FEFFFF
+ 16661 ef91 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 16661 70F9FFFF
+ 16662 ef99 E8000000 call KDbgWriterGet at PLT
+ 16662 00
+ 16663 ef9e 4885C0 testq %rax, %rax
+ 16664 efa1 747B je .L254
+ 16665 efa3 BF010000 movl $1, %edi
+ 16665 00
+ 16666 efa8 E8000000 call KDbgCondToFlag at PLT
+ 16666 00
+ 16667 efad 4889C6 movq %rax, %rsi
+ 16668 efb0 BF100000 movl $16, %edi
+ 16668 00
+ 16669 efb5 E8000000 call KDbgTestModConds at PLT
+ 16669 00
+ 16670 efba 84C0 testb %al, %al
+ 16671 efbc 7460 je .L254
+ 16672 efbe 8B857CF9 movl -1668(%rbp), %eax
+ 16672 FFFF
+ 16673 efc4 89C7 movl %eax, %edi
+ 16674 efc6 E83510FF call bswap_32
+ 16674 FF
+ 16675 efcb 4189C6 movl %eax, %r14d
+ 16676 efce 8B8578F9 movl -1672(%rbp), %eax
+ 16676 FFFF
+ 16677 efd4 89C7 movl %eax, %edi
+ 16678 efd6 E82510FF call bswap_32
+ 16678 FF
+ 16679 efdb 4189C5 movl %eax, %r13d
+ 16680 efde 8B8574F9 movl -1676(%rbp), %eax
+ 16680 FFFF
+ 16681 efe4 89C7 movl %eax, %edi
+ 16682 efe6 E81510FF call bswap_32
+ 16682 FF
+ 16683 efeb 4189C4 movl %eax, %r12d
+ 16684 efee 8B8570F9 movl -1680(%rbp), %eax
+ 16684 FFFF
+ 16685 eff4 89C7 movl %eax, %edi
+ 16686 eff6 E80510FF call bswap_32
+ 16686 FF
+ 16687 effb 4589F1 movl %r14d, %r9d
+ 16688 effe 4589E8 movl %r13d, %r8d
+ 16689 f001 4489E1 movl %r12d, %ecx
+ 16690 f004 89C2 movl %eax, %edx
+ 16691 f006 488D3500 leaq .LC5(%rip), %rsi
+ 16691 000000
+ 16692 f00d 488D3D00 leaq .LC1(%rip), %rdi
+ 16692 000000
+ 16693 f014 B8000000 movl $0, %eax
+ 16693 00
+ 16694 f019 E8000000 call KDbgMsg at PLT
+ 16694 00
+ 16695 .L254:
+ 16696 .LBE4021:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16697 .loc 2 934 0
+
GAS LISTING /tmp/ccjbMjHD.s page 506
+
+
+ 16698 f01e B8050000 movl $5, %eax
+ 16698 00
+ 16699 f023 F30F6F85 movdqu -480(%rbp), %xmm0
+ 16699 20FEFFFF
+ 16700 f02b F30F7F85 movdqu %xmm0, -416(%rbp)
+ 16700 60FEFFFF
+ 16701 f033 89855CFE movl %eax, -420(%rbp)
+ 16701 FFFF
+ 16702 f039 F30F6F85 movdqu -416(%rbp), %xmm0
+ 16702 60FEFFFF
+ 16703 f041 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 16703 80FEFFFF
+ 16704 f049 8B855CFE movl -420(%rbp), %eax
+ 16704 FFFF
+ 16705 f04f 89857CFE movl %eax, -388(%rbp)
+ 16705 FFFF
+ 16706 .LBB4022:
+ 16707 .LBB4023:
+ 16708 .LBB4024:
+ 16709 .LBB4025:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 16710 .loc 3 433 0
+ 16711 f055 F30F6F85 movdqu -384(%rbp), %xmm0
+ 16711 80FEFFFF
+ 16712 f05d 8B857CFE movl -388(%rbp), %eax
+ 16712 FFFF
+ 16713 f063 898564F8 movl %eax, -1948(%rbp)
+ 16713 FFFF
+ 16714 f069 660F6E8D movd -1948(%rbp), %xmm1
+ 16714 64F8FFFF
+ 16715 f071 660FD2C1 psrld %xmm1, %xmm0
+ 16716 .LBE4025:
+ 16717 .LBE4024:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 16718 .loc 2 488 0
+ 16719 f075 F30F7F85 movdqu %xmm0, -416(%rbp)
+ 16719 60FEFFFF
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16720 .loc 2 489 0
+ 16721 f07d B8080000 movl $8, %eax
+ 16721 00
+ 16722 f082 83BD5CFE cmpl $8, -420(%rbp)
+ 16722 FFFF08
+ 16723 f089 0F4E855C cmovle -420(%rbp), %eax
+ 16723 FEFFFF
+ 16724 f090 4898 cltq
+ 16725 f092 4889C2 movq %rax, %rdx
+ 16726 f095 48C1E204 salq $4, %rdx
+ 16727 f099 488D0500 leaq sr_mask.7327(%rip), %rax
+ 16727 000000
+ 16728 f0a0 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 16728 02
+ 16729 f0a5 F30F6F8D movdqu -416(%rbp), %xmm1
+ 16729 60FEFFFF
+ 16730 f0ad F30F7F8D movdqu %xmm1, -352(%rbp)
+ 16730 A0FEFFFF
+ 16731 f0b5 F30F7F85 movdqu %xmm0, -368(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 507
+
+
+ 16731 90FEFFFF
+ 16732 .LBB4026:
+ 16733 .LBB4027:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 16734 .loc 2 206 0
+ 16735 f0bd F30F6F85 movdqu -368(%rbp), %xmm0
+ 16735 90FEFFFF
+ 16736 f0c5 F30F6F8D movdqu -352(%rbp), %xmm1
+ 16736 A0FEFFFF
+ 16737 f0cd 660FDBC1 pand %xmm1, %xmm0
+ 16738 .LBE4027:
+ 16739 .LBE4026:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16740 .loc 2 489 0
+ 16741 f0d1 F30F7F85 movdqu %xmm0, -416(%rbp)
+ 16741 60FEFFFF
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 16742 .loc 2 490 0
+ 16743 f0d9 F30F6F85 movdqu -416(%rbp), %xmm0
+ 16743 60FEFFFF
+ 16744 .LBE4023:
+ 16745 .LBE4022:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16746 .loc 2 934 0
+ 16747 f0e1 F30F7F85 movdqu %xmm0, -464(%rbp)
+ 16747 30FEFFFF
+ 16748 .LBB4028:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 16749 .loc 2 935 0
+ 16750 f0e9 F30F6F85 movdqu -464(%rbp), %xmm0
+ 16750 30FEFFFF
+ 16751 f0f1 F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 16751 60F9FFFF
+ 16752 f0f9 E8000000 call KDbgWriterGet at PLT
+ 16752 00
+ 16753 f0fe 4885C0 testq %rax, %rax
+ 16754 f101 747B je .L256
+ 16755 f103 BF010000 movl $1, %edi
+ 16755 00
+ 16756 f108 E8000000 call KDbgCondToFlag at PLT
+ 16756 00
+ 16757 f10d 4889C6 movq %rax, %rsi
+ 16758 f110 BF100000 movl $16, %edi
+ 16758 00
+ 16759 f115 E8000000 call KDbgTestModConds at PLT
+ 16759 00
+ 16760 f11a 84C0 testb %al, %al
+ 16761 f11c 7460 je .L256
+ 16762 f11e 8B856CF9 movl -1684(%rbp), %eax
+ 16762 FFFF
+ 16763 f124 89C7 movl %eax, %edi
+ 16764 f126 E8D50EFF call bswap_32
+ 16764 FF
+ 16765 f12b 4189C6 movl %eax, %r14d
+ 16766 f12e 8B8568F9 movl -1688(%rbp), %eax
+ 16766 FFFF
+ 16767 f134 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 508
+
+
+ 16768 f136 E8C50EFF call bswap_32
+ 16768 FF
+ 16769 f13b 4189C5 movl %eax, %r13d
+ 16770 f13e 8B8564F9 movl -1692(%rbp), %eax
+ 16770 FFFF
+ 16771 f144 89C7 movl %eax, %edi
+ 16772 f146 E8B50EFF call bswap_32
+ 16772 FF
+ 16773 f14b 4189C4 movl %eax, %r12d
+ 16774 f14e 8B8560F9 movl -1696(%rbp), %eax
+ 16774 FFFF
+ 16775 f154 89C7 movl %eax, %edi
+ 16776 f156 E8A50EFF call bswap_32
+ 16776 FF
+ 16777 f15b 4589F1 movl %r14d, %r9d
+ 16778 f15e 4589E8 movl %r13d, %r8d
+ 16779 f161 4489E1 movl %r12d, %ecx
+ 16780 f164 89C2 movl %eax, %edx
+ 16781 f166 488D3500 leaq .LC6(%rip), %rsi
+ 16781 000000
+ 16782 f16d 488D3D00 leaq .LC1(%rip), %rdi
+ 16782 000000
+ 16783 f174 B8000000 movl $0, %eax
+ 16783 00
+ 16784 f179 E8000000 call KDbgMsg at PLT
+ 16784 00
+ 16785 .L256:
+ 16786 f17e F30F6F85 movdqu -480(%rbp), %xmm0
+ 16786 20FEFFFF
+ 16787 f186 F30F7F85 movdqu %xmm0, -320(%rbp)
+ 16787 C0FEFFFF
+ 16788 .LBE4028:
+ 16789 .LBB4029:
+ 16790 .LBB4030:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 16791 .loc 2 426 0
+ 16792 f18e F30F6F85 movdqu -320(%rbp), %xmm0
+ 16792 C0FEFFFF
+ 16793 f196 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 16793 D0FEFFFF
+ 16794 f19e F30F6F85 movdqu -304(%rbp), %xmm0
+ 16794 D0FEFFFF
+ 16795 f1a6 F30F7F85 movdqu %xmm0, -272(%rbp)
+ 16795 F0FEFFFF
+ 16796 .LBB4031:
+ 16797 .LBB4032:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 16798 .loc 3 416 0
+ 16799 f1ae F30F6F85 movdqu -272(%rbp), %xmm0
+ 16799 F0FEFFFF
+ 16800 f1b6 660F72F0 pslld $3, %xmm0
+ 16800 03
+ 16801 .LBE4032:
+ 16802 .LBE4031:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 16803 .loc 2 433 0
+ 16804 f1bb F30F7F85 movdqu %xmm0, -304(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 509
+
+
+ 16804 D0FEFFFF
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16805 .loc 2 435 0
+ 16806 f1c3 B8030000 movl $3, %eax
+ 16806 00
+ 16807 f1c8 4898 cltq
+ 16808 f1ca 4889C2 movq %rax, %rdx
+ 16809 f1cd 48C1E204 salq $4, %rdx
+ 16810 f1d1 488D0500 leaq sl_mask.7310(%rip), %rax
+ 16810 000000
+ 16811 f1d8 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 16811 02
+ 16812 f1dd F30F6F8D movdqu -304(%rbp), %xmm1
+ 16812 D0FEFFFF
+ 16813 f1e5 F30F7F8D movdqu %xmm1, -240(%rbp)
+ 16813 10FFFFFF
+ 16814 f1ed F30F7F85 movdqu %xmm0, -256(%rbp)
+ 16814 00FFFFFF
+ 16815 .LBB4033:
+ 16816 .LBB4034:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 16817 .loc 2 206 0
+ 16818 f1f5 F30F6F85 movdqu -256(%rbp), %xmm0
+ 16818 00FFFFFF
+ 16819 f1fd F30F6F8D movdqu -240(%rbp), %xmm1
+ 16819 10FFFFFF
+ 16820 f205 660FDBC1 pand %xmm1, %xmm0
+ 16821 .LBE4034:
+ 16822 .LBE4033:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16823 .loc 2 435 0
+ 16824 f209 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 16824 D0FEFFFF
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 16825 .loc 2 437 0
+ 16826 f211 F30F6F85 movdqu -304(%rbp), %xmm0
+ 16826 D0FEFFFF
+ 16827 .LBE4030:
+ 16828 .LBE4029:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 16829 .loc 2 936 0
+ 16830 f219 F30F7F85 movdqu %xmm0, -448(%rbp)
+ 16830 40FEFFFF
+ 16831 .LBB4035:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 16832 .loc 2 937 0
+ 16833 f221 F30F6F85 movdqu -448(%rbp), %xmm0
+ 16833 40FEFFFF
+ 16834 f229 F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 16834 50F9FFFF
+ 16835 f231 E8000000 call KDbgWriterGet at PLT
+ 16835 00
+ 16836 f236 4885C0 testq %rax, %rax
+ 16837 f239 747B je .L258
+ 16838 f23b BF010000 movl $1, %edi
+ 16838 00
+ 16839 f240 E8000000 call KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 510
+
+
+ 16839 00
+ 16840 f245 4889C6 movq %rax, %rsi
+ 16841 f248 BF100000 movl $16, %edi
+ 16841 00
+ 16842 f24d E8000000 call KDbgTestModConds at PLT
+ 16842 00
+ 16843 f252 84C0 testb %al, %al
+ 16844 f254 7460 je .L258
+ 16845 f256 8B855CF9 movl -1700(%rbp), %eax
+ 16845 FFFF
+ 16846 f25c 89C7 movl %eax, %edi
+ 16847 f25e E89D0DFF call bswap_32
+ 16847 FF
+ 16848 f263 4189C6 movl %eax, %r14d
+ 16849 f266 8B8558F9 movl -1704(%rbp), %eax
+ 16849 FFFF
+ 16850 f26c 89C7 movl %eax, %edi
+ 16851 f26e E88D0DFF call bswap_32
+ 16851 FF
+ 16852 f273 4189C5 movl %eax, %r13d
+ 16853 f276 8B8554F9 movl -1708(%rbp), %eax
+ 16853 FFFF
+ 16854 f27c 89C7 movl %eax, %edi
+ 16855 f27e E87D0DFF call bswap_32
+ 16855 FF
+ 16856 f283 4189C4 movl %eax, %r12d
+ 16857 f286 8B8550F9 movl -1712(%rbp), %eax
+ 16857 FFFF
+ 16858 f28c 89C7 movl %eax, %edi
+ 16859 f28e E86D0DFF call bswap_32
+ 16859 FF
+ 16860 f293 4589F1 movl %r14d, %r9d
+ 16861 f296 4589E8 movl %r13d, %r8d
+ 16862 f299 4489E1 movl %r12d, %ecx
+ 16863 f29c 89C2 movl %eax, %edx
+ 16864 f29e 488D3500 leaq .LC7(%rip), %rsi
+ 16864 000000
+ 16865 f2a5 488D3D00 leaq .LC1(%rip), %rdi
+ 16865 000000
+ 16866 f2ac B8000000 movl $0, %eax
+ 16866 00
+ 16867 f2b1 E8000000 call KDbgMsg at PLT
+ 16867 00
+ 16868 .L258:
+ 16869 .LBE4035:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16870 .loc 2 938 0
+ 16871 f2b6 660F6F05 movdqa FF_tab(%rip), %xmm0
+ 16871 00000000
+ 16872 f2be F30F7F85 movdqu %xmm0, -208(%rbp)
+ 16872 30FFFFFF
+ 16873 f2c6 F30F6F85 movdqu -464(%rbp), %xmm0
+ 16873 30FEFFFF
+ 16874 f2ce F30F7F85 movdqu %xmm0, -224(%rbp)
+ 16874 20FFFFFF
+ 16875 f2d6 F30F6F85 movdqu -208(%rbp), %xmm0
+ 16875 30FFFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 511
+
+
+ 16876 f2de F30F7F85 movdqu %xmm0, -176(%rbp)
+ 16876 50FFFFFF
+ 16877 f2e6 F30F6F85 movdqu -224(%rbp), %xmm0
+ 16877 20FFFFFF
+ 16878 f2ee F30F7F85 movdqu %xmm0, -192(%rbp)
+ 16878 40FFFFFF
+ 16879 .LBB4036:
+ 16880 .LBB4037:
+ 16881 .LBB4038:
+ 16882 .LBB4039:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16883 .loc 3 529 0
+ 16884 f2f6 F30F6F8D movdqu -192(%rbp), %xmm1
+ 16884 40FFFFFF
+ 16885 f2fe F30F6F85 movdqu -176(%rbp), %xmm0
+ 16885 50FFFFFF
+ 16886 f306 660F3800 pshufb %xmm1, %xmm0
+ 16886 C1
+ 16887 .LBE4039:
+ 16888 .LBE4038:
+ 16889 .LBE4037:
+ 16890 .LBE4036:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16891 .loc 2 938 0
+ 16892 f30b F30F7F85 movdqu %xmm0, -464(%rbp)
+ 16892 30FEFFFF
+ 16893 f313 F30F6F85 movdqu -448(%rbp), %xmm0
+ 16893 40FEFFFF
+ 16894 f31b F30F7F85 movdqu %xmm0, -144(%rbp)
+ 16894 70FFFFFF
+ 16895 f323 F30F6F85 movdqu -464(%rbp), %xmm0
+ 16895 30FEFFFF
+ 16896 f32b F30F7F85 movdqu %xmm0, -160(%rbp)
+ 16896 60FFFFFF
+ 16897 .LBB4040:
+ 16898 .LBB4041:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16899 .loc 2 178 0
+ 16900 f333 F30F6F85 movdqu -160(%rbp), %xmm0
+ 16900 60FFFFFF
+ 16901 f33b F30F6F8D movdqu -144(%rbp), %xmm1
+ 16901 70FFFFFF
+ 16902 f343 660FEFC1 pxor %xmm1, %xmm0
+ 16903 .LBE4041:
+ 16904 .LBE4040:
+ 16905 .LBE4020:
+ 16906 .LBE4019:
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(FF_mul) (f8,3);
+ 16907 .loc 2 1120 0
+ 16908 f347 660F7F85 movdqa %xmm0, -1936(%rbp)
+ 16908 70F8FFFF
+ 16909 f34f F30F6F85 movdqu -1648(%rbp), %xmm0
+ 16909 90F9FFFF
+ 16910 f357 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 16910 90
+ 16911 f35c 660F6F85 movdqa -1904(%rbp), %xmm0
+ 16911 90F8FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 512
+
+
+ 16912 f364 F30F7F45 movdqu %xmm0, -128(%rbp)
+ 16912 80
+ 16913 .LBB4042:
+ 16914 .LBB4043:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16915 .loc 2 178 0
+ 16916 f369 F30F6F45 movdqu -128(%rbp), %xmm0
+ 16916 80
+ 16917 f36e F30F6F4D movdqu -112(%rbp), %xmm1
+ 16917 90
+ 16918 f373 660FEFC1 pxor %xmm1, %xmm0
+ 16919 .LBE4043:
+ 16920 .LBE4042:
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f2);
+ 16921 .loc 2 1142 0
+ 16922 f377 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 16922 90F9FFFF
+ 16923 f37f F30F6F85 movdqu -1648(%rbp), %xmm0
+ 16923 90F9FFFF
+ 16924 f387 F30F7F45 movdqu %xmm0, -80(%rbp)
+ 16924 B0
+ 16925 f38c 660F6F8D movdqa -1920(%rbp), %xmm1
+ 16925 80F8FFFF
+ 16926 f394 F30F7F4D movdqu %xmm1, -96(%rbp)
+ 16926 A0
+ 16927 .LBB4044:
+ 16928 .LBB4045:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16929 .loc 2 178 0
+ 16930 f399 F30F6F45 movdqu -96(%rbp), %xmm0
+ 16930 A0
+ 16931 f39e F30F6F4D movdqu -80(%rbp), %xmm1
+ 16931 B0
+ 16932 f3a3 660FEFC1 pxor %xmm1, %xmm0
+ 16933 .LBE4045:
+ 16934 .LBE4044:
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f4);
+ 16935 .loc 2 1143 0
+ 16936 f3a7 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 16936 90F9FFFF
+ 16937 f3af F30F6F85 movdqu -1648(%rbp), %xmm0
+ 16937 90F9FFFF
+ 16938 f3b7 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 16938 D0
+ 16939 f3bc 660F6F85 movdqa -1936(%rbp), %xmm0
+ 16939 70F8FFFF
+ 16940 f3c4 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 16940 C0
+ 16941 .LBB4046:
+ 16942 .LBB4047:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 16943 .loc 2 178 0
+ 16944 f3c9 F30F6F45 movdqu -64(%rbp), %xmm0
+ 16944 C0
+ 16945 f3ce F30F6F4D movdqu -48(%rbp), %xmm1
+ 16945 D0
+ 16946 f3d3 660FEFC1 pxor %xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 513
+
+
+ 16947 .LBE4047:
+ 16948 .LBE4046:
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f8);
+ 16949 .loc 2 1144 0
+ 16950 f3d7 F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 16950 90F9FFFF
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 16951 .loc 2 1148 0
+ 16952 f3df F30F6F85 movdqu -1648(%rbp), %xmm0
+ 16952 90F9FFFF
+ 16953 .LBE3944:
+ 16954 .LBE3943:
+ 16955 .loc 2 1958 0
+ 16956 f3e7 660F7F03 movdqa %xmm0, (%rbx)
+ 16957 f3eb 838588F9 addl $1, -1656(%rbp)
+ 16957 FFFF01
+ 16958 .L240:
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** while (jx)
+ 16959 .loc 2 1957 0
+ 16960 f3f2 83BD8CF9 cmpl $0, -1652(%rbp)
+ 16960 FFFF00
+ 16961 f3f9 0F85F3F0 jne .L259
+ 16961 FFFF
+1959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r[ix] = dr[jx];
+ 16962 .loc 2 1959 0
+ 16963 f3ff 8B8588F9 mov -1656(%rbp), %eax
+ 16963 FFFF
+ 16964 f405 48C1E004 salq $4, %rax
+ 16965 f409 480385E8 addq -1816(%rbp), %rax
+ 16965 F8FFFF
+ 16966 f410 8B958CF9 mov -1652(%rbp), %edx
+ 16966 FFFF
+ 16967 f416 48C1E204 salq $4, %rdx
+ 16968 f41a 480395E0 addq -1824(%rbp), %rdx
+ 16968 F8FFFF
+ 16969 f421 660F6F02 movdqa (%rdx), %xmm0
+ 16970 f425 660F7F00 movdqa %xmm0, (%rax)
+1960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 16971 .loc 2 1960 0
+ 16972 f429 4881C480 addq $1920, %rsp
+ 16972 070000
+ 16973 f430 5B popq %rbx
+ 16974 f431 415C popq %r12
+ 16975 f433 415D popq %r13
+ 16976 f435 415E popq %r14
+ 16977 f437 C9 leave
+ 16978 f438 C3 ret
+ 16979 .cfi_endproc
+ 16980 .LFE648:
+ 16981 .size KAESBlockCipherVecRegEqInvKeyExpansion, .-KAESBlockCipherVecRegEqInvKeyExpansion
+ 16982 .type KAESBlockCipherVecRegEqInvKeyExpansion128, @function
+ 16983 KAESBlockCipherVecRegEqInvKeyExpansion128:
+ 16984 .LFB649:
+1961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion128) (CipherVec * w, const CipherVec * kw)
+
GAS LISTING /tmp/ccjbMjHD.s page 514
+
+
+1965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 16985 .loc 2 1965 0
+ 16986 .cfi_startproc
+ 16987 f439 55 pushq %rbp
+ 16988 .LCFI10:
+ 16989 .cfi_def_cfa_offset 16
+ 16990 f43a 4889E5 movq %rsp, %rbp
+ 16991 .cfi_offset 6, -16
+ 16992 .LCFI11:
+ 16993 .cfi_def_cfa_register 6
+ 16994 f43d 4883EC10 subq $16, %rsp
+ 16995 f441 48897DF8 movq %rdi, -8(%rbp)
+ 16996 f445 488975F0 movq %rsi, -16(%rbp)
+1966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+ 16997 .loc 2 1966 0
+ 16998 f449 488B4DF0 movq -16(%rbp), %rcx
+ 16999 f44d 488B45F8 movq -8(%rbp), %rax
+ 17000 f451 BA0A0000 movl $10, %edx
+ 17000 00
+ 17001 f456 4889CE movq %rcx, %rsi
+ 17002 f459 4889C7 movq %rax, %rdi
+ 17003 f45c E818F0FF call KAESBlockCipherVecRegEqInvKeyExpansion
+ 17003 FF
+1967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 17004 .loc 2 1967 0
+ 17005 f461 C9 leave
+ 17006 f462 C3 ret
+ 17007 .cfi_endproc
+ 17008 .LFE649:
+ 17009 .size KAESBlockCipherVecRegEqInvKeyExpansion128, .-KAESBlockCipherVecRegEqInvKeyExpansion128
+ 17010 .type KAESBlockCipherVecRegEqInvKeyExpansion192, @function
+ 17011 KAESBlockCipherVecRegEqInvKeyExpansion192:
+ 17012 .LFB650:
+1968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion192) (CipherVec * w, const CipherVec * kw)
+1972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 17013 .loc 2 1972 0
+ 17014 .cfi_startproc
+ 17015 f463 55 pushq %rbp
+ 17016 .LCFI12:
+ 17017 .cfi_def_cfa_offset 16
+ 17018 f464 4889E5 movq %rsp, %rbp
+ 17019 .cfi_offset 6, -16
+ 17020 .LCFI13:
+ 17021 .cfi_def_cfa_register 6
+ 17022 f467 4883EC10 subq $16, %rsp
+ 17023 f46b 48897DF8 movq %rdi, -8(%rbp)
+ 17024 f46f 488975F0 movq %rsi, -16(%rbp)
+1973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+ 17025 .loc 2 1973 0
+ 17026 f473 488B4DF0 movq -16(%rbp), %rcx
+ 17027 f477 488B45F8 movq -8(%rbp), %rax
+ 17028 f47b BA0C0000 movl $12, %edx
+ 17028 00
+ 17029 f480 4889CE movq %rcx, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s page 515
+
+
+ 17030 f483 4889C7 movq %rax, %rdi
+ 17031 f486 E8EEEFFF call KAESBlockCipherVecRegEqInvKeyExpansion
+ 17031 FF
+1974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 17032 .loc 2 1974 0
+ 17033 f48b C9 leave
+ 17034 f48c C3 ret
+ 17035 .cfi_endproc
+ 17036 .LFE650:
+ 17037 .size KAESBlockCipherVecRegEqInvKeyExpansion192, .-KAESBlockCipherVecRegEqInvKeyExpansion192
+ 17038 .type KAESBlockCipherVecRegEqInvKeyExpansion256, @function
+ 17039 KAESBlockCipherVecRegEqInvKeyExpansion256:
+ 17040 .LFB651:
+1975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion256) (CipherVec * w, const CipherVec * kw)
+1979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 17041 .loc 2 1979 0
+ 17042 .cfi_startproc
+ 17043 f48d 55 pushq %rbp
+ 17044 .LCFI14:
+ 17045 .cfi_def_cfa_offset 16
+ 17046 f48e 4889E5 movq %rsp, %rbp
+ 17047 .cfi_offset 6, -16
+ 17048 .LCFI15:
+ 17049 .cfi_def_cfa_register 6
+ 17050 f491 4883EC10 subq $16, %rsp
+ 17051 f495 48897DF8 movq %rdi, -8(%rbp)
+ 17052 f499 488975F0 movq %rsi, -16(%rbp)
+1980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+ 17053 .loc 2 1980 0
+ 17054 f49d 488B4DF0 movq -16(%rbp), %rcx
+ 17055 f4a1 488B45F8 movq -8(%rbp), %rax
+ 17056 f4a5 BA0E0000 movl $14, %edx
+ 17056 00
+ 17057 f4aa 4889CE movq %rcx, %rsi
+ 17058 f4ad 4889C7 movq %rax, %rdi
+ 17059 f4b0 E8C4EFFF call KAESBlockCipherVecRegEqInvKeyExpansion
+ 17059 FF
+1981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 17060 .loc 2 1981 0
+ 17061 f4b5 C9 leave
+ 17062 f4b6 C3 ret
+ 17063 .cfi_endproc
+ 17064 .LFE651:
+ 17065 .size KAESBlockCipherVecRegEqInvKeyExpansion256, .-KAESBlockCipherVecRegEqInvKeyExpansion256
+ 17066 .section .rodata
+ 17067 .LC8:
+ 17068 03de 53746172 .string "Start of Round"
+ 17068 74206F66
+ 17068 20526F75
+ 17068 6E6400
+ 17069 .LC9:
+ 17070 03ed 526F756E .string "Round Key"
+ 17070 64204B65
+ 17070 7900
+
GAS LISTING /tmp/ccjbMjHD.s page 516
+
+
+ 17071 .LC10:
+ 17072 03f7 456E6420 .string "End 1st Round"
+ 17072 31737420
+ 17072 526F756E
+ 17072 6400
+ 17073 .LC11:
+ 17074 0405 41667465 .string "After SubBytes"
+ 17074 72205375
+ 17074 62427974
+ 17074 657300
+ 17075 .LC12:
+ 17076 0414 41667465 .string "After ShiftRow"
+ 17076 72205368
+ 17076 69667452
+ 17076 6F7700
+ 17077 .LC13:
+ 17078 0423 41667465 .string "After MixColum"
+ 17078 72204D69
+ 17078 78436F6C
+ 17078 756D00
+ 17079 .LC14:
+ 17080 0432 456E6420 .string "End of Round"
+ 17080 6F662052
+ 17080 6F756E64
+ 17080 00
+ 17081 .text
+ 17082 .type KAESBlockCipherVecRegCipher, @function
+ 17083 KAESBlockCipherVecRegCipher:
+ 17084 .LFB655:
+1982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Cipher First Round
+1986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+1990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+1995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+1997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+1999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End 1st Round", state);
+2001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register const CipherVec round_keys)
+2009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+
GAS LISTING /tmp/ccjbMjHD.s page 517
+
+
+2010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register const CipherVec round_keys)
+2014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mstate;
+2017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mround_keys;
+2018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+2021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+2023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESENC (state, round_keys);
+2028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+2030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+2034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MixColumns) (state);
+2038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ommited n on purpose */
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After MixColum", state);
+2041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+2046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+2059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESENCLAST (state, round_keys);
+2062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+2064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 518
+
+
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+2068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+2075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Cipher
+2082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** This implementation as stated
+2086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * above for simplifaction broke out the three types of rounds into
+2087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * first round, middle rounds, and last round. This approach was taken
+2088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * for ease of coding for optimization using smaller bytes of code
+2089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but inlining of the functions for efficiency
+2090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Cipher) (CipherVec state, const CipherVec * key,
+2093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned Nr)
+2094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 17085 .loc 2 2094 0
+ 17086 .cfi_startproc
+ 17087 f4b7 55 pushq %rbp
+ 17088 .LCFI16:
+ 17089 .cfi_def_cfa_offset 16
+ 17090 f4b8 4889E5 movq %rsp, %rbp
+ 17091 .cfi_offset 6, -16
+ 17092 .LCFI17:
+ 17093 .cfi_def_cfa_register 6
+ 17094 f4bb 4155 pushq %r13
+ 17095 f4bd 4154 pushq %r12
+ 17096 f4bf 53 pushq %rbx
+ 17097 f4c0 4881EC58 subq $2648, %rsp
+ 17097 0A0000
+ 17098 f4c7 660F7F85 movdqa %xmm0, -2576(%rbp)
+ 17098 F0F5FFFF
+ 17099 f4cf 4889BDE8 movq %rdi, -2584(%rbp)
+ 17099 F5FFFF
+ 17100 f4d6 89B5E4F5 movl %esi, -2588(%rbp)
+ 17100 FFFF
+2095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix = 0;
+ 17101 .loc 2 2095 0
+ 17102 f4dc C7853CF7 movl $0, -2244(%rbp)
+ 17102 FFFF0000
+ 17102 0000
+2096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+ 17103 .loc 2 2097 0
+ 17104 f4e6 8B853CF7 mov -2244(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 519
+
+
+ 17104 FFFF
+ 17105 f4ec 48C1E004 salq $4, %rax
+ 17106 f4f0 480385E8 addq -2584(%rbp), %rax
+ 17106 F5FFFF
+ 17107 f4f7 660F6F00 movdqa (%rax), %xmm0
+ 17108 f4fb 83853CF7 addl $1, -2244(%rbp)
+ 17108 FFFF01
+ 17109 f502 660F6F8D movdqa -2576(%rbp), %xmm1
+ 17109 F0F5FFFF
+ 17110 f50a F30F7F8D movdqu %xmm1, -2224(%rbp)
+ 17110 50F7FFFF
+ 17111 f512 F30F7F85 movdqu %xmm0, -2240(%rbp)
+ 17111 40F7FFFF
+ 17112 .LBB4199:
+ 17113 .LBB4200:
+ 17114 .LBB4201:
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 17115 .loc 2 1994 0
+ 17116 f51a F30F6F85 movdqu -2224(%rbp), %xmm0
+ 17116 50F7FFFF
+ 17117 f522 F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 17117 20F6FFFF
+ 17118 .cfi_offset 3, -40
+ 17119 .cfi_offset 12, -32
+ 17120 .cfi_offset 13, -24
+ 17121 f52a E8000000 call KDbgWriterGet at PLT
+ 17121 00
+ 17122 f52f 4885C0 testq %rax, %rax
+ 17123 f532 7479 je .L269
+ 17124 f534 BF010000 movl $1, %edi
+ 17124 00
+ 17125 f539 E8000000 call KDbgCondToFlag at PLT
+ 17125 00
+ 17126 f53e 4889C6 movq %rax, %rsi
+ 17127 f541 BF100000 movl $16, %edi
+ 17127 00
+ 17128 f546 E8000000 call KDbgTestModConds at PLT
+ 17128 00
+ 17129 f54b 84C0 testb %al, %al
+ 17130 f54d 745E je .L269
+ 17131 f54f 8B852CF6 movl -2516(%rbp), %eax
+ 17131 FFFF
+ 17132 f555 89C7 movl %eax, %edi
+ 17133 f557 E8A40AFF call bswap_32
+ 17133 FF
+ 17134 f55c 4189C5 movl %eax, %r13d
+ 17135 f55f 8B8528F6 movl -2520(%rbp), %eax
+ 17135 FFFF
+ 17136 f565 89C7 movl %eax, %edi
+ 17137 f567 E8940AFF call bswap_32
+ 17137 FF
+ 17138 f56c 4189C4 movl %eax, %r12d
+ 17139 f56f 8B8524F6 movl -2524(%rbp), %eax
+ 17139 FFFF
+ 17140 f575 89C7 movl %eax, %edi
+ 17141 f577 E8840AFF call bswap_32
+ 17141 FF
+
GAS LISTING /tmp/ccjbMjHD.s page 520
+
+
+ 17142 f57c 89C3 movl %eax, %ebx
+ 17143 f57e 8B8520F6 movl -2528(%rbp), %eax
+ 17143 FFFF
+ 17144 f584 89C7 movl %eax, %edi
+ 17145 f586 E8750AFF call bswap_32
+ 17145 FF
+ 17146 f58b 4589E9 movl %r13d, %r9d
+ 17147 f58e 4589E0 movl %r12d, %r8d
+ 17148 f591 89D9 movl %ebx, %ecx
+ 17149 f593 89C2 movl %eax, %edx
+ 17150 f595 488D3500 leaq .LC8(%rip), %rsi
+ 17150 000000
+ 17151 f59c 488D3D00 leaq .LC1(%rip), %rdi
+ 17151 000000
+ 17152 f5a3 B8000000 movl $0, %eax
+ 17152 00
+ 17153 f5a8 E8000000 call KDbgMsg at PLT
+ 17153 00
+ 17154 .L269:
+ 17155 .LBE4201:
+ 17156 .LBB4202:
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 17157 .loc 2 1996 0
+ 17158 f5ad F30F6F85 movdqu -2240(%rbp), %xmm0
+ 17158 40F7FFFF
+ 17159 f5b5 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 17159 10F6FFFF
+ 17160 f5bd E8000000 call KDbgWriterGet at PLT
+ 17160 00
+ 17161 f5c2 4885C0 testq %rax, %rax
+ 17162 f5c5 7479 je .L271
+ 17163 f5c7 BF010000 movl $1, %edi
+ 17163 00
+ 17164 f5cc E8000000 call KDbgCondToFlag at PLT
+ 17164 00
+ 17165 f5d1 4889C6 movq %rax, %rsi
+ 17166 f5d4 BF100000 movl $16, %edi
+ 17166 00
+ 17167 f5d9 E8000000 call KDbgTestModConds at PLT
+ 17167 00
+ 17168 f5de 84C0 testb %al, %al
+ 17169 f5e0 745E je .L271
+ 17170 f5e2 8B851CF6 movl -2532(%rbp), %eax
+ 17170 FFFF
+ 17171 f5e8 89C7 movl %eax, %edi
+ 17172 f5ea E8110AFF call bswap_32
+ 17172 FF
+ 17173 f5ef 4189C5 movl %eax, %r13d
+ 17174 f5f2 8B8518F6 movl -2536(%rbp), %eax
+ 17174 FFFF
+ 17175 f5f8 89C7 movl %eax, %edi
+ 17176 f5fa E8010AFF call bswap_32
+ 17176 FF
+ 17177 f5ff 4189C4 movl %eax, %r12d
+ 17178 f602 8B8514F6 movl -2540(%rbp), %eax
+ 17178 FFFF
+ 17179 f608 89C7 movl %eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 521
+
+
+ 17180 f60a E8F109FF call bswap_32
+ 17180 FF
+ 17181 f60f 89C3 movl %eax, %ebx
+ 17182 f611 8B8510F6 movl -2544(%rbp), %eax
+ 17182 FFFF
+ 17183 f617 89C7 movl %eax, %edi
+ 17184 f619 E8E209FF call bswap_32
+ 17184 FF
+ 17185 f61e 4589E9 movl %r13d, %r9d
+ 17186 f621 4589E0 movl %r12d, %r8d
+ 17187 f624 89D9 movl %ebx, %ecx
+ 17188 f626 89C2 movl %eax, %edx
+ 17189 f628 488D3500 leaq .LC9(%rip), %rsi
+ 17189 000000
+ 17190 f62f 488D3D00 leaq .LC1(%rip), %rdi
+ 17190 000000
+ 17191 f636 B8000000 movl $0, %eax
+ 17191 00
+ 17192 f63b E8000000 call KDbgMsg at PLT
+ 17192 00
+ 17193 .L271:
+ 17194 f640 F30F6F85 movdqu -2224(%rbp), %xmm0
+ 17194 50F7FFFF
+ 17195 f648 F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 17195 70F7FFFF
+ 17196 f650 F30F6F85 movdqu -2240(%rbp), %xmm0
+ 17196 40F7FFFF
+ 17197 f658 F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 17197 60F7FFFF
+ 17198 f660 F30F6F85 movdqu -2192(%rbp), %xmm0
+ 17198 70F7FFFF
+ 17199 f668 F30F7F85 movdqu %xmm0, -2160(%rbp)
+ 17199 90F7FFFF
+ 17200 f670 F30F6F85 movdqu -2208(%rbp), %xmm0
+ 17200 60F7FFFF
+ 17201 f678 F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 17201 80F7FFFF
+ 17202 .LBE4202:
+ 17203 .LBB4203:
+ 17204 .LBB4204:
+ 17205 .LBB4205:
+ 17206 .LBB4206:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 17207 .loc 2 178 0
+ 17208 f680 F30F6F85 movdqu -2176(%rbp), %xmm0
+ 17208 80F7FFFF
+ 17209 f688 F30F6F8D movdqu -2160(%rbp), %xmm1
+ 17209 90F7FFFF
+ 17210 f690 660FEFC1 pxor %xmm1, %xmm0
+ 17211 .LBE4206:
+ 17212 .LBE4205:
+ 17213 .LBE4204:
+ 17214 .LBE4203:
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 17215 .loc 2 1998 0
+ 17216 f694 F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 17216 50F7FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 522
+
+
+ 17217 .LBB4207:
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End 1st Round", state);
+ 17218 .loc 2 2000 0
+ 17219 f69c F30F6F85 movdqu -2224(%rbp), %xmm0
+ 17219 50F7FFFF
+ 17220 f6a4 F30F7F85 movdqu %xmm0, -2560(%rbp)
+ 17220 00F6FFFF
+ 17221 f6ac E8000000 call KDbgWriterGet at PLT
+ 17221 00
+ 17222 f6b1 4885C0 testq %rax, %rax
+ 17223 f6b4 7479 je .L273
+ 17224 f6b6 BF010000 movl $1, %edi
+ 17224 00
+ 17225 f6bb E8000000 call KDbgCondToFlag at PLT
+ 17225 00
+ 17226 f6c0 4889C6 movq %rax, %rsi
+ 17227 f6c3 BF100000 movl $16, %edi
+ 17227 00
+ 17228 f6c8 E8000000 call KDbgTestModConds at PLT
+ 17228 00
+ 17229 f6cd 84C0 testb %al, %al
+ 17230 f6cf 745E je .L273
+ 17231 f6d1 8B850CF6 movl -2548(%rbp), %eax
+ 17231 FFFF
+ 17232 f6d7 89C7 movl %eax, %edi
+ 17233 f6d9 E82209FF call bswap_32
+ 17233 FF
+ 17234 f6de 4189C5 movl %eax, %r13d
+ 17235 f6e1 8B8508F6 movl -2552(%rbp), %eax
+ 17235 FFFF
+ 17236 f6e7 89C7 movl %eax, %edi
+ 17237 f6e9 E81209FF call bswap_32
+ 17237 FF
+ 17238 f6ee 4189C4 movl %eax, %r12d
+ 17239 f6f1 8B8504F6 movl -2556(%rbp), %eax
+ 17239 FFFF
+ 17240 f6f7 89C7 movl %eax, %edi
+ 17241 f6f9 E80209FF call bswap_32
+ 17241 FF
+ 17242 f6fe 89C3 movl %eax, %ebx
+ 17243 f700 8B8500F6 movl -2560(%rbp), %eax
+ 17243 FFFF
+ 17244 f706 89C7 movl %eax, %edi
+ 17245 f708 E8F308FF call bswap_32
+ 17245 FF
+ 17246 f70d 4589E9 movl %r13d, %r9d
+ 17247 f710 4589E0 movl %r12d, %r8d
+ 17248 f713 89D9 movl %ebx, %ecx
+ 17249 f715 89C2 movl %eax, %edx
+ 17250 f717 488D3500 leaq .LC10(%rip), %rsi
+ 17250 000000
+ 17251 f71e 488D3D00 leaq .LC1(%rip), %rdi
+ 17251 000000
+ 17252 f725 B8000000 movl $0, %eax
+ 17252 00
+ 17253 f72a E8000000 call KDbgMsg at PLT
+ 17253 00
+
GAS LISTING /tmp/ccjbMjHD.s page 523
+
+
+ 17254 .L273:
+ 17255 .LBE4207:
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 17256 .loc 2 2002 0
+ 17257 f72f F30F6F85 movdqu -2224(%rbp), %xmm0
+ 17257 50F7FFFF
+ 17258 .LBE4200:
+ 17259 .LBE4199:
+ 17260 .loc 2 2097 0
+ 17261 f737 660F7F85 movdqa %xmm0, -2576(%rbp)
+ 17261 F0F5FFFF
+2098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 17262 .loc 2 2099 0
+ 17263 f73f E9110F00 jmp .L274
+ 17263 00
+ 17264 .L299:
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+ 17265 .loc 2 2100 0
+ 17266 f744 8B853CF7 mov -2244(%rbp), %eax
+ 17266 FFFF
+ 17267 f74a 48C1E004 salq $4, %rax
+ 17268 f74e 480385E8 addq -2584(%rbp), %rax
+ 17268 F5FFFF
+ 17269 f755 660F6F00 movdqa (%rax), %xmm0
+ 17270 f759 660F6F8D movdqa -2576(%rbp), %xmm1
+ 17270 F0F5FFFF
+ 17271 f761 F30F7F8D movdqu %xmm1, -2128(%rbp)
+ 17271 B0F7FFFF
+ 17272 f769 F30F7F85 movdqu %xmm0, -2144(%rbp)
+ 17272 A0F7FFFF
+ 17273 .LBB4208:
+ 17274 .LBB4209:
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 17275 .loc 2 2019 0
+ 17276 f771 F30F6F85 movdqu -2128(%rbp), %xmm0
+ 17276 B0F7FFFF
+ 17277 f779 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 17277 D0F7FFFF
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+ 17278 .loc 2 2020 0
+ 17279 f781 F30F6F85 movdqu -2144(%rbp), %xmm0
+ 17279 A0F7FFFF
+ 17280 f789 F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 17280 C0F7FFFF
+ 17281 .LBB4210:
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+ 17282 .loc 2 2022 0
+ 17283 f791 F30F6F85 movdqu -2096(%rbp), %xmm0
+ 17283 D0F7FFFF
+ 17284 f799 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 17284 80F6FFFF
+ 17285 f7a1 E8000000 call KDbgWriterGet at PLT
+ 17285 00
+ 17286 f7a6 4885C0 testq %rax, %rax
+ 17287 f7a9 7479 je .L276
+ 17288 f7ab BF010000 movl $1, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 524
+
+
+ 17288 00
+ 17289 f7b0 E8000000 call KDbgCondToFlag at PLT
+ 17289 00
+ 17290 f7b5 4889C6 movq %rax, %rsi
+ 17291 f7b8 BF100000 movl $16, %edi
+ 17291 00
+ 17292 f7bd E8000000 call KDbgTestModConds at PLT
+ 17292 00
+ 17293 f7c2 84C0 testb %al, %al
+ 17294 f7c4 745E je .L276
+ 17295 f7c6 8B858CF6 movl -2420(%rbp), %eax
+ 17295 FFFF
+ 17296 f7cc 89C7 movl %eax, %edi
+ 17297 f7ce E82D08FF call bswap_32
+ 17297 FF
+ 17298 f7d3 4189C5 movl %eax, %r13d
+ 17299 f7d6 8B8588F6 movl -2424(%rbp), %eax
+ 17299 FFFF
+ 17300 f7dc 89C7 movl %eax, %edi
+ 17301 f7de E81D08FF call bswap_32
+ 17301 FF
+ 17302 f7e3 4189C4 movl %eax, %r12d
+ 17303 f7e6 8B8584F6 movl -2428(%rbp), %eax
+ 17303 FFFF
+ 17304 f7ec 89C7 movl %eax, %edi
+ 17305 f7ee E80D08FF call bswap_32
+ 17305 FF
+ 17306 f7f3 89C3 movl %eax, %ebx
+ 17307 f7f5 8B8580F6 movl -2432(%rbp), %eax
+ 17307 FFFF
+ 17308 f7fb 89C7 movl %eax, %edi
+ 17309 f7fd E8FE07FF call bswap_32
+ 17309 FF
+ 17310 f802 4589E9 movl %r13d, %r9d
+ 17311 f805 4589E0 movl %r12d, %r8d
+ 17312 f808 89D9 movl %ebx, %ecx
+ 17313 f80a 89C2 movl %eax, %edx
+ 17314 f80c 488D3500 leaq .LC8(%rip), %rsi
+ 17314 000000
+ 17315 f813 488D3D00 leaq .LC1(%rip), %rdi
+ 17315 000000
+ 17316 f81a B8000000 movl $0, %eax
+ 17316 00
+ 17317 f81f E8000000 call KDbgMsg at PLT
+ 17317 00
+ 17318 .L276:
+ 17319 f824 F30F6F85 movdqu -2128(%rbp), %xmm0
+ 17319 B0F7FFFF
+ 17320 f82c F30F7F85 movdqu %xmm0, -2080(%rbp)
+ 17320 E0F7FFFF
+ 17321 f834 F30F6F85 movdqu -2080(%rbp), %xmm0
+ 17321 E0F7FFFF
+ 17322 f83c F30F7F85 movdqu %xmm0, -2048(%rbp)
+ 17322 00F8FFFF
+ 17323 f844 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 17323 000000
+ 17324 f84b 488985F8 movq %rax, -2056(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 525
+
+
+ 17324 F7FFFF
+ 17325 .LBE4210:
+ 17326 .LBB4211:
+ 17327 .LBB4212:
+ 17328 .LBB4213:
+ 17329 .LBB4214:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 17330 .loc 2 851 0
+ 17331 f852 660F6F05 movdqa vec_00(%rip), %xmm0
+ 17331 00000000
+ 17332 f85a F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 17332 20F8FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 17333 .loc 2 854 0
+ 17334 f862 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 17334 00000000
+ 17335 f86a F30F6F8D movdqu -2048(%rbp), %xmm1
+ 17335 00F8FFFF
+ 17336 f872 F30F7F8D movdqu %xmm1, -1936(%rbp)
+ 17336 70F8FFFF
+ 17337 f87a F30F7F85 movdqu %xmm0, -1952(%rbp)
+ 17337 60F8FFFF
+ 17338 .LBB4215:
+ 17339 .LBB4216:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 17340 .loc 2 206 0
+ 17341 f882 F30F6F85 movdqu -1952(%rbp), %xmm0
+ 17341 60F8FFFF
+ 17342 f88a F30F6F8D movdqu -1936(%rbp), %xmm1
+ 17342 70F8FFFF
+ 17343 f892 660FDBC1 pand %xmm1, %xmm0
+ 17344 .LBE4216:
+ 17345 .LBE4215:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 17346 .loc 2 854 0
+ 17347 f896 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 17347 50F8FFFF
+ 17348 f89e F30F6F85 movdqu -2048(%rbp), %xmm0
+ 17348 00F8FFFF
+ 17349 f8a6 F30F7F85 movdqu %xmm0, -1904(%rbp)
+ 17349 90F8FFFF
+ 17350 .LBB4217:
+ 17351 .LBB4218:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 17352 .loc 3 433 0
+ 17353 f8ae F30F6F85 movdqu -1904(%rbp), %xmm0
+ 17353 90F8FFFF
+ 17354 f8b6 660F72D0 psrld $4, %xmm0
+ 17354 04
+ 17355 .LBE4218:
+ 17356 .LBE4217:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 17357 .loc 2 857 0
+ 17358 f8bb F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 17358 40F8FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17359 .loc 2 859 0
+
GAS LISTING /tmp/ccjbMjHD.s page 526
+
+
+ 17360 f8c3 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 17360 00000000
+ 17361 f8cb F30F6F8D movdqu -1984(%rbp), %xmm1
+ 17361 40F8FFFF
+ 17362 f8d3 F30F7F8D movdqu %xmm1, -1872(%rbp)
+ 17362 B0F8FFFF
+ 17363 f8db F30F7F85 movdqu %xmm0, -1888(%rbp)
+ 17363 A0F8FFFF
+ 17364 .LBB4219:
+ 17365 .LBB4220:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 17366 .loc 2 206 0
+ 17367 f8e3 F30F6F85 movdqu -1888(%rbp), %xmm0
+ 17367 A0F8FFFF
+ 17368 f8eb F30F6F8D movdqu -1872(%rbp), %xmm1
+ 17368 B0F8FFFF
+ 17369 f8f3 660FDBC1 pand %xmm1, %xmm0
+ 17370 .LBE4220:
+ 17371 .LBE4219:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17372 .loc 2 859 0
+ 17373 f8f7 F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 17373 40F8FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 17374 .loc 2 866 0
+ 17375 f8ff C7851CF8 movl $0, -2020(%rbp)
+ 17375 FFFF0000
+ 17375 0000
+ 17376 f909 E9BE0100 jmp .L277
+ 17376 00
+ 17377 .L278:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 17378 .loc 2 868 0
+ 17379 f90e 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 17379 00000000
+ 17380 f916 F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 17380 D0F8FFFF
+ 17381 f91e F30F6F85 movdqu -1984(%rbp), %xmm0
+ 17381 40F8FFFF
+ 17382 f926 F30F7F85 movdqu %xmm0, -1856(%rbp)
+ 17382 C0F8FFFF
+ 17383 f92e F30F6F85 movdqu -1840(%rbp), %xmm0
+ 17383 D0F8FFFF
+ 17384 f936 F30F7F85 movdqu %xmm0, -1808(%rbp)
+ 17384 F0F8FFFF
+ 17385 f93e F30F6F85 movdqu -1856(%rbp), %xmm0
+ 17385 C0F8FFFF
+ 17386 f946 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 17386 E0F8FFFF
+ 17387 .LBB4221:
+ 17388 .LBB4222:
+ 17389 .LBB4223:
+ 17390 .LBB4224:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17391 .loc 3 529 0
+ 17392 f94e F30F6F8D movdqu -1824(%rbp), %xmm1
+ 17392 E0F8FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 527
+
+
+ 17393 f956 F30F6F85 movdqu -1808(%rbp), %xmm0
+ 17393 F0F8FFFF
+ 17394 f95e 660F3800 pshufb %xmm1, %xmm0
+ 17394 C1
+ 17395 .LBE4224:
+ 17396 .LBE4223:
+ 17397 .LBE4222:
+ 17398 .LBE4221:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 17399 .loc 2 868 0
+ 17400 f963 F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 17400 30F8FFFF
+ 17401 f96b F30F6F85 movdqu -1968(%rbp), %xmm0
+ 17401 50F8FFFF
+ 17402 f973 F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 17402 10F9FFFF
+ 17403 f97b F30F6F85 movdqu -2000(%rbp), %xmm0
+ 17403 30F8FFFF
+ 17404 f983 F30F7F85 movdqu %xmm0, -1792(%rbp)
+ 17404 00F9FFFF
+ 17405 .LBB4225:
+ 17406 .LBB4226:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 17407 .loc 2 234 0
+ 17408 f98b F30F6F85 movdqu -1792(%rbp), %xmm0
+ 17408 00F9FFFF
+ 17409 f993 F30F6F8D movdqu -1776(%rbp), %xmm1
+ 17409 10F9FFFF
+ 17410 f99b 660FEBC1 por %xmm1, %xmm0
+ 17411 .LBE4226:
+ 17412 .LBE4225:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 17413 .loc 2 870 0
+ 17414 f99f F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 17414 30F8FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17415 .loc 2 872 0
+ 17416 f9a7 8B851CF8 mov -2020(%rbp), %eax
+ 17416 FFFF
+ 17417 f9ad 48C1E004 salq $4, %rax
+ 17418 f9b1 480385F8 addq -2056(%rbp), %rax
+ 17418 F7FFFF
+ 17419 f9b8 660F6F00 movdqa (%rax), %xmm0
+ 17420 f9bc F30F7F85 movdqu %xmm0, -1744(%rbp)
+ 17420 30F9FFFF
+ 17421 f9c4 F30F6F85 movdqu -2000(%rbp), %xmm0
+ 17421 30F8FFFF
+ 17422 f9cc F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 17422 20F9FFFF
+ 17423 f9d4 F30F6F85 movdqu -1744(%rbp), %xmm0
+ 17423 30F9FFFF
+ 17424 f9dc F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 17424 50F9FFFF
+ 17425 f9e4 F30F6F85 movdqu -1760(%rbp), %xmm0
+ 17425 20F9FFFF
+ 17426 f9ec F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 17426 40F9FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 528
+
+
+ 17427 .LBB4227:
+ 17428 .LBB4228:
+ 17429 .LBB4229:
+ 17430 .LBB4230:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17431 .loc 3 529 0
+ 17432 f9f4 F30F6F8D movdqu -1728(%rbp), %xmm1
+ 17432 40F9FFFF
+ 17433 f9fc F30F6F85 movdqu -1712(%rbp), %xmm0
+ 17433 50F9FFFF
+ 17434 fa04 660F3800 pshufb %xmm1, %xmm0
+ 17434 C1
+ 17435 .LBE4230:
+ 17436 .LBE4229:
+ 17437 .LBE4228:
+ 17438 .LBE4227:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17439 .loc 2 872 0
+ 17440 fa09 F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 17440 30F8FFFF
+ 17441 fa11 F30F6F85 movdqu -2016(%rbp), %xmm0
+ 17441 20F8FFFF
+ 17442 fa19 F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 17442 70F9FFFF
+ 17443 fa21 F30F6F85 movdqu -2000(%rbp), %xmm0
+ 17443 30F8FFFF
+ 17444 fa29 F30F7F85 movdqu %xmm0, -1696(%rbp)
+ 17444 60F9FFFF
+ 17445 .LBB4231:
+ 17446 .LBB4232:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 17447 .loc 2 234 0
+ 17448 fa31 F30F6F85 movdqu -1696(%rbp), %xmm0
+ 17448 60F9FFFF
+ 17449 fa39 F30F6F8D movdqu -1680(%rbp), %xmm1
+ 17449 70F9FFFF
+ 17450 fa41 660FEBC1 por %xmm1, %xmm0
+ 17451 .LBE4232:
+ 17452 .LBE4231:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 17453 .loc 2 874 0
+ 17454 fa45 F30F7F85 movdqu %xmm0, -2016(%rbp)
+ 17454 20F8FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 17455 .loc 2 876 0
+ 17456 fa4d 660F6F05 movdqa vec_01(%rip), %xmm0
+ 17456 00000000
+ 17457 fa55 F30F6F8D movdqu -1984(%rbp), %xmm1
+ 17457 40F8FFFF
+ 17458 fa5d F30F7F8D movdqu %xmm1, -1648(%rbp)
+ 17458 90F9FFFF
+ 17459 fa65 F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 17459 80F9FFFF
+ 17460 .LBB4233:
+ 17461 .LBB4234:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 17462 .loc 2 290 0
+
GAS LISTING /tmp/ccjbMjHD.s page 529
+
+
+ 17463 fa6d F30F6F8D movdqu -1664(%rbp), %xmm1
+ 17463 80F9FFFF
+ 17464 fa75 F30F6F85 movdqu -1648(%rbp), %xmm0
+ 17464 90F9FFFF
+ 17465 fa7d 660FF8C1 psubb %xmm1, %xmm0
+ 17466 .LBE4234:
+ 17467 .LBE4233:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 17468 .loc 2 876 0
+ 17469 fa81 F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 17469 40F8FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17470 .loc 2 878 0
+ 17471 fa89 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 17471 00000000
+ 17472 fa91 F30F6F8D movdqu -1984(%rbp), %xmm1
+ 17472 40F8FFFF
+ 17473 fa99 F30F7F8D movdqu %xmm1, -1616(%rbp)
+ 17473 B0F9FFFF
+ 17474 faa1 F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 17474 A0F9FFFF
+ 17475 .LBB4235:
+ 17476 .LBB4236:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 17477 .loc 2 206 0
+ 17478 faa9 F30F6F85 movdqu -1632(%rbp), %xmm0
+ 17478 A0F9FFFF
+ 17479 fab1 F30F6F8D movdqu -1616(%rbp), %xmm1
+ 17479 B0F9FFFF
+ 17480 fab9 660FDBC1 pand %xmm1, %xmm0
+ 17481 .LBE4236:
+ 17482 .LBE4235:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17483 .loc 2 878 0
+ 17484 fabd F30F7F85 movdqu %xmm0, -1984(%rbp)
+ 17484 40F8FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 17485 .loc 2 866 0
+ 17486 fac5 83851CF8 addl $1, -2020(%rbp)
+ 17486 FFFF01
+ 17487 .L277:
+ 17488 facc 83BD1CF8 cmpl $15, -2020(%rbp)
+ 17488 FFFF0F
+ 17489 fad3 0F8635FE jbe .L278
+ 17489 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 17490 .loc 2 882 0
+ 17491 fad9 F30F6F85 movdqu -2016(%rbp), %xmm0
+ 17491 20F8FFFF
+ 17492 .LBE4214:
+ 17493 .LBE4213:
+ 17494 .LBE4212:
+ 17495 .LBE4211:
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+ 17496 .loc 2 2029 0
+ 17497 fae1 F30F7F85 movdqu %xmm0, -2128(%rbp)
+ 17497 B0F7FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 530
+
+
+ 17498 .LBB4237:
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+ 17499 .loc 2 2031 0
+ 17500 fae9 F30F6F85 movdqu -2128(%rbp), %xmm0
+ 17500 B0F7FFFF
+ 17501 faf1 F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 17501 70F6FFFF
+ 17502 faf9 E8000000 call KDbgWriterGet at PLT
+ 17502 00
+ 17503 fafe 4885C0 testq %rax, %rax
+ 17504 fb01 7479 je .L280
+ 17505 fb03 BF010000 movl $1, %edi
+ 17505 00
+ 17506 fb08 E8000000 call KDbgCondToFlag at PLT
+ 17506 00
+ 17507 fb0d 4889C6 movq %rax, %rsi
+ 17508 fb10 BF100000 movl $16, %edi
+ 17508 00
+ 17509 fb15 E8000000 call KDbgTestModConds at PLT
+ 17509 00
+ 17510 fb1a 84C0 testb %al, %al
+ 17511 fb1c 745E je .L280
+ 17512 fb1e 8B857CF6 movl -2436(%rbp), %eax
+ 17512 FFFF
+ 17513 fb24 89C7 movl %eax, %edi
+ 17514 fb26 E8D504FF call bswap_32
+ 17514 FF
+ 17515 fb2b 4189C5 movl %eax, %r13d
+ 17516 fb2e 8B8578F6 movl -2440(%rbp), %eax
+ 17516 FFFF
+ 17517 fb34 89C7 movl %eax, %edi
+ 17518 fb36 E8C504FF call bswap_32
+ 17518 FF
+ 17519 fb3b 4189C4 movl %eax, %r12d
+ 17520 fb3e 8B8574F6 movl -2444(%rbp), %eax
+ 17520 FFFF
+ 17521 fb44 89C7 movl %eax, %edi
+ 17522 fb46 E8B504FF call bswap_32
+ 17522 FF
+ 17523 fb4b 89C3 movl %eax, %ebx
+ 17524 fb4d 8B8570F6 movl -2448(%rbp), %eax
+ 17524 FFFF
+ 17525 fb53 89C7 movl %eax, %edi
+ 17526 fb55 E8A604FF call bswap_32
+ 17526 FF
+ 17527 fb5a 4589E9 movl %r13d, %r9d
+ 17528 fb5d 4589E0 movl %r12d, %r8d
+ 17529 fb60 89D9 movl %ebx, %ecx
+ 17530 fb62 89C2 movl %eax, %edx
+ 17531 fb64 488D3500 leaq .LC11(%rip), %rsi
+ 17531 000000
+ 17532 fb6b 488D3D00 leaq .LC1(%rip), %rdi
+ 17532 000000
+ 17533 fb72 B8000000 movl $0, %eax
+ 17533 00
+ 17534 fb77 E8000000 call KDbgMsg at PLT
+ 17534 00
+
GAS LISTING /tmp/ccjbMjHD.s page 531
+
+
+ 17535 .L280:
+ 17536 fb7c F30F6F85 movdqu -2128(%rbp), %xmm0
+ 17536 B0F7FFFF
+ 17537 fb84 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 17537 C0F9FFFF
+ 17538 .LBE4237:
+ 17539 .LBB4238:
+ 17540 .LBB4239:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17541 .loc 2 581 0
+ 17542 fb8c 660F6F05 movdqa ShiftRowTable.7358(%rip), %xmm0
+ 17542 00000000
+ 17543 fb94 F30F6F8D movdqu -1600(%rbp), %xmm1
+ 17543 C0F9FFFF
+ 17544 fb9c F30F7F8D movdqu %xmm1, -1568(%rbp)
+ 17544 E0F9FFFF
+ 17545 fba4 F30F7F85 movdqu %xmm0, -1584(%rbp)
+ 17545 D0F9FFFF
+ 17546 fbac F30F6F85 movdqu -1568(%rbp), %xmm0
+ 17546 E0F9FFFF
+ 17547 fbb4 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 17547 00FAFFFF
+ 17548 fbbc F30F6F85 movdqu -1584(%rbp), %xmm0
+ 17548 D0F9FFFF
+ 17549 fbc4 F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 17549 F0F9FFFF
+ 17550 .LBB4240:
+ 17551 .LBB4241:
+ 17552 .LBB4242:
+ 17553 .LBB4243:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17554 .loc 3 529 0
+ 17555 fbcc F30F6F8D movdqu -1552(%rbp), %xmm1
+ 17555 F0F9FFFF
+ 17556 fbd4 F30F6F85 movdqu -1536(%rbp), %xmm0
+ 17556 00FAFFFF
+ 17557 fbdc 660F3800 pshufb %xmm1, %xmm0
+ 17557 C1
+ 17558 .LBE4243:
+ 17559 .LBE4242:
+ 17560 .LBE4241:
+ 17561 .LBE4240:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17562 .loc 2 581 0
+ 17563 fbe1 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 17563 C0F9FFFF
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 17564 .loc 2 582 0
+ 17565 fbe9 F30F6F85 movdqu -1600(%rbp), %xmm0
+ 17565 C0F9FFFF
+ 17566 .LBE4239:
+ 17567 .LBE4238:
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+ 17568 .loc 2 2033 0
+ 17569 fbf1 F30F7F85 movdqu %xmm0, -2128(%rbp)
+ 17569 B0F7FFFF
+ 17570 .LBB4244:
+
GAS LISTING /tmp/ccjbMjHD.s page 532
+
+
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+ 17571 .loc 2 2035 0
+ 17572 fbf9 F30F6F85 movdqu -2128(%rbp), %xmm0
+ 17572 B0F7FFFF
+ 17573 fc01 F30F7F85 movdqu %xmm0, -2464(%rbp)
+ 17573 60F6FFFF
+ 17574 fc09 E8000000 call KDbgWriterGet at PLT
+ 17574 00
+ 17575 fc0e 4885C0 testq %rax, %rax
+ 17576 fc11 7479 je .L282
+ 17577 fc13 BF010000 movl $1, %edi
+ 17577 00
+ 17578 fc18 E8000000 call KDbgCondToFlag at PLT
+ 17578 00
+ 17579 fc1d 4889C6 movq %rax, %rsi
+ 17580 fc20 BF100000 movl $16, %edi
+ 17580 00
+ 17581 fc25 E8000000 call KDbgTestModConds at PLT
+ 17581 00
+ 17582 fc2a 84C0 testb %al, %al
+ 17583 fc2c 745E je .L282
+ 17584 fc2e 8B856CF6 movl -2452(%rbp), %eax
+ 17584 FFFF
+ 17585 fc34 89C7 movl %eax, %edi
+ 17586 fc36 E8C503FF call bswap_32
+ 17586 FF
+ 17587 fc3b 4189C5 movl %eax, %r13d
+ 17588 fc3e 8B8568F6 movl -2456(%rbp), %eax
+ 17588 FFFF
+ 17589 fc44 89C7 movl %eax, %edi
+ 17590 fc46 E8B503FF call bswap_32
+ 17590 FF
+ 17591 fc4b 4189C4 movl %eax, %r12d
+ 17592 fc4e 8B8564F6 movl -2460(%rbp), %eax
+ 17592 FFFF
+ 17593 fc54 89C7 movl %eax, %edi
+ 17594 fc56 E8A503FF call bswap_32
+ 17594 FF
+ 17595 fc5b 89C3 movl %eax, %ebx
+ 17596 fc5d 8B8560F6 movl -2464(%rbp), %eax
+ 17596 FFFF
+ 17597 fc63 89C7 movl %eax, %edi
+ 17598 fc65 E89603FF call bswap_32
+ 17598 FF
+ 17599 fc6a 4589E9 movl %r13d, %r9d
+ 17600 fc6d 4589E0 movl %r12d, %r8d
+ 17601 fc70 89D9 movl %ebx, %ecx
+ 17602 fc72 89C2 movl %eax, %edx
+ 17603 fc74 488D3500 leaq .LC12(%rip), %rsi
+ 17603 000000
+ 17604 fc7b 488D3D00 leaq .LC1(%rip), %rdi
+ 17604 000000
+ 17605 fc82 B8000000 movl $0, %eax
+ 17605 00
+ 17606 fc87 E8000000 call KDbgMsg at PLT
+ 17606 00
+ 17607 .L282:
+
GAS LISTING /tmp/ccjbMjHD.s page 533
+
+
+ 17608 fc8c F30F6F85 movdqu -2128(%rbp), %xmm0
+ 17608 B0F7FFFF
+ 17609 fc94 F30F7F85 movdqu %xmm0, -1520(%rbp)
+ 17609 10FAFFFF
+ 17610 fc9c F30F6F85 movdqu -1520(%rbp), %xmm0
+ 17610 10FAFFFF
+ 17611 fca4 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 17611 20FAFFFF
+ 17612 .LBE4244:
+ 17613 .LBB4245:
+ 17614 .LBB4246:
+ 17615 .LBB4247:
+ 17616 .LBB4248:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17617 .loc 2 667 0
+ 17618 fcac 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 17618 00000000
+ 17619 fcb4 F30F6F8D movdqu -1504(%rbp), %xmm1
+ 17619 20FAFFFF
+ 17620 fcbc F30F7F8D movdqu %xmm1, -1472(%rbp)
+ 17620 40FAFFFF
+ 17621 fcc4 F30F7F85 movdqu %xmm0, -1488(%rbp)
+ 17621 30FAFFFF
+ 17622 fccc F30F6F85 movdqu -1472(%rbp), %xmm0
+ 17622 40FAFFFF
+ 17623 fcd4 F30F7F85 movdqu %xmm0, -1440(%rbp)
+ 17623 60FAFFFF
+ 17624 fcdc F30F6F85 movdqu -1488(%rbp), %xmm0
+ 17624 30FAFFFF
+ 17625 fce4 F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 17625 50FAFFFF
+ 17626 .LBB4249:
+ 17627 .LBB4250:
+ 17628 .LBB4251:
+ 17629 .LBB4252:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17630 .loc 3 529 0
+ 17631 fcec F30F6F8D movdqu -1456(%rbp), %xmm1
+ 17631 50FAFFFF
+ 17632 fcf4 F30F6F85 movdqu -1440(%rbp), %xmm0
+ 17632 60FAFFFF
+ 17633 fcfc 660F3800 pshufb %xmm1, %xmm0
+ 17633 C1
+ 17634 .LBE4252:
+ 17635 .LBE4251:
+ 17636 .LBE4250:
+ 17637 .LBE4249:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17638 .loc 2 667 0
+ 17639 fd01 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 17639 20FAFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 17640 .loc 2 668 0
+ 17641 fd09 F30F6F85 movdqu -1504(%rbp), %xmm0
+ 17641 20FAFFFF
+ 17642 .LBE4248:
+ 17643 .LBE4247:
+
GAS LISTING /tmp/ccjbMjHD.s page 534
+
+
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(RotBytesLeft) (state);
+ 17644 .loc 2 1047 0
+ 17645 fd11 660F7F85 movdqa %xmm0, -2624(%rbp)
+ 17645 C0F5FFFF
+ 17646 fd19 660F6F85 movdqa -2624(%rbp), %xmm0
+ 17646 C0F5FFFF
+ 17647 fd21 F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 17647 70FAFFFF
+ 17648 .LBB4253:
+ 17649 .LBB4254:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17650 .loc 2 667 0
+ 17651 fd29 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 17651 00000000
+ 17652 fd31 F30F6F8D movdqu -1424(%rbp), %xmm1
+ 17652 70FAFFFF
+ 17653 fd39 F30F7F8D movdqu %xmm1, -1392(%rbp)
+ 17653 90FAFFFF
+ 17654 fd41 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 17654 80FAFFFF
+ 17655 fd49 F30F6F85 movdqu -1392(%rbp), %xmm0
+ 17655 90FAFFFF
+ 17656 fd51 F30F7F85 movdqu %xmm0, -1360(%rbp)
+ 17656 B0FAFFFF
+ 17657 fd59 F30F6F85 movdqu -1408(%rbp), %xmm0
+ 17657 80FAFFFF
+ 17658 fd61 F30F7F85 movdqu %xmm0, -1376(%rbp)
+ 17658 A0FAFFFF
+ 17659 .LBB4255:
+ 17660 .LBB4256:
+ 17661 .LBB4257:
+ 17662 .LBB4258:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17663 .loc 3 529 0
+ 17664 fd69 F30F6F8D movdqu -1376(%rbp), %xmm1
+ 17664 A0FAFFFF
+ 17665 fd71 F30F6F85 movdqu -1360(%rbp), %xmm0
+ 17665 B0FAFFFF
+ 17666 fd79 660F3800 pshufb %xmm1, %xmm0
+ 17666 C1
+ 17667 .LBE4258:
+ 17668 .LBE4257:
+ 17669 .LBE4256:
+ 17670 .LBE4255:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17671 .loc 2 667 0
+ 17672 fd7e F30F7F85 movdqu %xmm0, -1424(%rbp)
+ 17672 70FAFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 17673 .loc 2 668 0
+ 17674 fd86 F30F6F85 movdqu -1424(%rbp), %xmm0
+ 17674 70FAFFFF
+ 17675 .LBE4254:
+ 17676 .LBE4253:
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c2 = AESBCMEMBER(RotBytesLeft) (c1);
+ 17677 .loc 2 1048 0
+ 17678 fd8e 660F7F85 movdqa %xmm0, -2640(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 535
+
+
+ 17678 B0F5FFFF
+ 17679 fd96 660F6F8D movdqa -2640(%rbp), %xmm1
+ 17679 B0F5FFFF
+ 17680 fd9e F30F7F8D movdqu %xmm1, -1344(%rbp)
+ 17680 C0FAFFFF
+ 17681 .LBB4259:
+ 17682 .LBB4260:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17683 .loc 2 667 0
+ 17684 fda6 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 17684 00000000
+ 17685 fdae F30F6F8D movdqu -1344(%rbp), %xmm1
+ 17685 C0FAFFFF
+ 17686 fdb6 F30F7F8D movdqu %xmm1, -1312(%rbp)
+ 17686 E0FAFFFF
+ 17687 fdbe F30F7F85 movdqu %xmm0, -1328(%rbp)
+ 17687 D0FAFFFF
+ 17688 fdc6 F30F6F85 movdqu -1312(%rbp), %xmm0
+ 17688 E0FAFFFF
+ 17689 fdce F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 17689 00FBFFFF
+ 17690 fdd6 F30F6F85 movdqu -1328(%rbp), %xmm0
+ 17690 D0FAFFFF
+ 17691 fdde F30F7F85 movdqu %xmm0, -1296(%rbp)
+ 17691 F0FAFFFF
+ 17692 .LBB4261:
+ 17693 .LBB4262:
+ 17694 .LBB4263:
+ 17695 .LBB4264:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17696 .loc 3 529 0
+ 17697 fde6 F30F6F8D movdqu -1296(%rbp), %xmm1
+ 17697 F0FAFFFF
+ 17698 fdee F30F6F85 movdqu -1280(%rbp), %xmm0
+ 17698 00FBFFFF
+ 17699 fdf6 660F3800 pshufb %xmm1, %xmm0
+ 17699 C1
+ 17700 .LBE4264:
+ 17701 .LBE4263:
+ 17702 .LBE4262:
+ 17703 .LBE4261:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17704 .loc 2 667 0
+ 17705 fdfb F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 17705 C0FAFFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 17706 .loc 2 668 0
+ 17707 fe03 F30F6F85 movdqu -1344(%rbp), %xmm0
+ 17707 C0FAFFFF
+ 17708 .LBE4260:
+ 17709 .LBE4259:
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c3 = AESBCMEMBER(RotBytesLeft) (c2);
+ 17710 .loc 2 1049 0
+ 17711 fe0b 660F7F85 movdqa %xmm0, -2656(%rbp)
+ 17711 A0F5FFFF
+ 17712 fe13 F30F6F85 movdqu -1520(%rbp), %xmm0
+ 17712 10FAFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 536
+
+
+ 17713 fe1b F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 17713 20FBFFFF
+ 17714 fe23 660F6F85 movdqa -2624(%rbp), %xmm0
+ 17714 C0F5FFFF
+ 17715 fe2b F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 17715 10FBFFFF
+ 17716 .LBB4265:
+ 17717 .LBB4266:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 17718 .loc 2 178 0
+ 17719 fe33 F30F6F85 movdqu -1264(%rbp), %xmm0
+ 17719 10FBFFFF
+ 17720 fe3b F30F6F8D movdqu -1248(%rbp), %xmm1
+ 17720 20FBFFFF
+ 17721 fe43 660FEFC1 pxor %xmm1, %xmm0
+ 17722 .LBE4266:
+ 17723 .LBE4265:
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = AESBCMEMBER(VecXor) (state, c1);
+ 17724 .loc 2 1050 0
+ 17725 fe47 660F7F85 movdqa %xmm0, -2608(%rbp)
+ 17725 D0F5FFFF
+ 17726 fe4f 660F6F8D movdqa -2608(%rbp), %xmm1
+ 17726 D0F5FFFF
+ 17727 fe57 F30F7F8D movdqu %xmm1, -1232(%rbp)
+ 17727 30FBFFFF
+ 17728 .LBB4267:
+ 17729 .LBB4268:
+ 17730 .LBB4269:
+ 950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 17731 .loc 2 950 0
+ 17732 fe5f F30F6F85 movdqu -1232(%rbp), %xmm0
+ 17732 30FBFFFF
+ 17733 fe67 F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 17733 A0F6FFFF
+ 17734 fe6f E8000000 call KDbgWriterGet at PLT
+ 17734 00
+ 17735 fe74 4885C0 testq %rax, %rax
+ 17736 fe77 7479 je .L284
+ 17737 fe79 BF010000 movl $1, %edi
+ 17737 00
+ 17738 fe7e E8000000 call KDbgCondToFlag at PLT
+ 17738 00
+ 17739 fe83 4889C6 movq %rax, %rsi
+ 17740 fe86 BF100000 movl $16, %edi
+ 17740 00
+ 17741 fe8b E8000000 call KDbgTestModConds at PLT
+ 17741 00
+ 17742 fe90 84C0 testb %al, %al
+ 17743 fe92 745E je .L284
+ 17744 fe94 8B85ACF6 movl -2388(%rbp), %eax
+ 17744 FFFF
+ 17745 fe9a 89C7 movl %eax, %edi
+ 17746 fe9c E85F01FF call bswap_32
+ 17746 FF
+ 17747 fea1 4189C5 movl %eax, %r13d
+ 17748 fea4 8B85A8F6 movl -2392(%rbp), %eax
+ 17748 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 537
+
+
+ 17749 feaa 89C7 movl %eax, %edi
+ 17750 feac E84F01FF call bswap_32
+ 17750 FF
+ 17751 feb1 4189C4 movl %eax, %r12d
+ 17752 feb4 8B85A4F6 movl -2396(%rbp), %eax
+ 17752 FFFF
+ 17753 feba 89C7 movl %eax, %edi
+ 17754 febc E83F01FF call bswap_32
+ 17754 FF
+ 17755 fec1 89C3 movl %eax, %ebx
+ 17756 fec3 8B85A0F6 movl -2400(%rbp), %eax
+ 17756 FFFF
+ 17757 fec9 89C7 movl %eax, %edi
+ 17758 fecb E83001FF call bswap_32
+ 17758 FF
+ 17759 fed0 4589E9 movl %r13d, %r9d
+ 17760 fed3 4589E0 movl %r12d, %r8d
+ 17761 fed6 89D9 movl %ebx, %ecx
+ 17762 fed8 89C2 movl %eax, %edx
+ 17763 feda 488D3500 leaq .LC5(%rip), %rsi
+ 17763 000000
+ 17764 fee1 488D3D00 leaq .LC1(%rip), %rdi
+ 17764 000000
+ 17765 fee8 B8000000 movl $0, %eax
+ 17765 00
+ 17766 feed E8000000 call KDbgMsg at PLT
+ 17766 00
+ 17767 .L284:
+ 17768 fef2 F30F6F85 movdqu -1232(%rbp), %xmm0
+ 17768 30FBFFFF
+ 17769 fefa F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 17769 50FBFFFF
+ 17770 .LBE4269:
+ 17771 .LBB4270:
+ 17772 .LBB4271:
+ 17773 .LBB4272:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 17774 .loc 2 933 0
+ 17775 ff02 F30F6F85 movdqu -1200(%rbp), %xmm0
+ 17775 50FBFFFF
+ 17776 ff0a F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 17776 D0F6FFFF
+ 17777 ff12 E8000000 call KDbgWriterGet at PLT
+ 17777 00
+ 17778 ff17 4885C0 testq %rax, %rax
+ 17779 ff1a 7479 je .L286
+ 17780 ff1c BF010000 movl $1, %edi
+ 17780 00
+ 17781 ff21 E8000000 call KDbgCondToFlag at PLT
+ 17781 00
+ 17782 ff26 4889C6 movq %rax, %rsi
+ 17783 ff29 BF100000 movl $16, %edi
+ 17783 00
+ 17784 ff2e E8000000 call KDbgTestModConds at PLT
+ 17784 00
+ 17785 ff33 84C0 testb %al, %al
+ 17786 ff35 745E je .L286
+
GAS LISTING /tmp/ccjbMjHD.s page 538
+
+
+ 17787 ff37 8B85DCF6 movl -2340(%rbp), %eax
+ 17787 FFFF
+ 17788 ff3d 89C7 movl %eax, %edi
+ 17789 ff3f E8BC00FF call bswap_32
+ 17789 FF
+ 17790 ff44 4189C5 movl %eax, %r13d
+ 17791 ff47 8B85D8F6 movl -2344(%rbp), %eax
+ 17791 FFFF
+ 17792 ff4d 89C7 movl %eax, %edi
+ 17793 ff4f E8AC00FF call bswap_32
+ 17793 FF
+ 17794 ff54 4189C4 movl %eax, %r12d
+ 17795 ff57 8B85D4F6 movl -2348(%rbp), %eax
+ 17795 FFFF
+ 17796 ff5d 89C7 movl %eax, %edi
+ 17797 ff5f E89C00FF call bswap_32
+ 17797 FF
+ 17798 ff64 89C3 movl %eax, %ebx
+ 17799 ff66 8B85D0F6 movl -2352(%rbp), %eax
+ 17799 FFFF
+ 17800 ff6c 89C7 movl %eax, %edi
+ 17801 ff6e E88D00FF call bswap_32
+ 17801 FF
+ 17802 ff73 4589E9 movl %r13d, %r9d
+ 17803 ff76 4589E0 movl %r12d, %r8d
+ 17804 ff79 89D9 movl %ebx, %ecx
+ 17805 ff7b 89C2 movl %eax, %edx
+ 17806 ff7d 488D3500 leaq .LC5(%rip), %rsi
+ 17806 000000
+ 17807 ff84 488D3D00 leaq .LC1(%rip), %rdi
+ 17807 000000
+ 17808 ff8b B8000000 movl $0, %eax
+ 17808 00
+ 17809 ff90 E8000000 call KDbgMsg at PLT
+ 17809 00
+ 17810 .L286:
+ 17811 .LBE4272:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 17812 .loc 2 934 0
+ 17813 ff95 B8070000 movl $7, %eax
+ 17813 00
+ 17814 ff9a F30F6F85 movdqu -1200(%rbp), %xmm0
+ 17814 50FBFFFF
+ 17815 ffa2 F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 17815 90FBFFFF
+ 17816 ffaa 89858CFB movl %eax, -1140(%rbp)
+ 17816 FFFF
+ 17817 ffb0 F30F6F85 movdqu -1136(%rbp), %xmm0
+ 17817 90FBFFFF
+ 17818 ffb8 F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 17818 B0FBFFFF
+ 17819 ffc0 8B858CFB movl -1140(%rbp), %eax
+ 17819 FFFF
+ 17820 ffc6 8985ACFB movl %eax, -1108(%rbp)
+ 17820 FFFF
+ 17821 .LBB4273:
+ 17822 .LBB4274:
+
GAS LISTING /tmp/ccjbMjHD.s page 539
+
+
+ 17823 .LBB4275:
+ 17824 .LBB4276:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 17825 .loc 3 433 0
+ 17826 ffcc F30F6F85 movdqu -1104(%rbp), %xmm0
+ 17826 B0FBFFFF
+ 17827 ffd4 8B85ACFB movl -1108(%rbp), %eax
+ 17827 FFFF
+ 17828 ffda 89859CF5 movl %eax, -2660(%rbp)
+ 17828 FFFF
+ 17829 ffe0 660F6E8D movd -2660(%rbp), %xmm1
+ 17829 9CF5FFFF
+ 17830 ffe8 660FD2C1 psrld %xmm1, %xmm0
+ 17831 .LBE4276:
+ 17832 .LBE4275:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 17833 .loc 2 488 0
+ 17834 ffec F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 17834 90FBFFFF
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 17835 .loc 2 489 0
+ 17836 fff4 B8080000 movl $8, %eax
+ 17836 00
+ 17837 fff9 83BD8CFB cmpl $8, -1140(%rbp)
+ 17837 FFFF08
+ 17838 10000 0F4E858C cmovle -1140(%rbp), %eax
+ 17838 FBFFFF
+ 17839 10007 4898 cltq
+ 17840 10009 4889C2 movq %rax, %rdx
+ 17841 1000c 48C1E204 salq $4, %rdx
+ 17842 10010 488D0500 leaq sr_mask.7327(%rip), %rax
+ 17842 000000
+ 17843 10017 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 17843 02
+ 17844 1001c F30F6F8D movdqu -1136(%rbp), %xmm1
+ 17844 90FBFFFF
+ 17845 10024 F30F7F8D movdqu %xmm1, -1072(%rbp)
+ 17845 D0FBFFFF
+ 17846 1002c F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 17846 C0FBFFFF
+ 17847 .LBB4277:
+ 17848 .LBB4278:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 17849 .loc 2 206 0
+ 17850 10034 F30F6F85 movdqu -1088(%rbp), %xmm0
+ 17850 C0FBFFFF
+ 17851 1003c F30F6F8D movdqu -1072(%rbp), %xmm1
+ 17851 D0FBFFFF
+ 17852 10044 660FDBC1 pand %xmm1, %xmm0
+ 17853 .LBE4278:
+ 17854 .LBE4277:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 17855 .loc 2 489 0
+ 17856 10048 F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 17856 90FBFFFF
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 17857 .loc 2 490 0
+
GAS LISTING /tmp/ccjbMjHD.s page 540
+
+
+ 17858 10050 F30F6F85 movdqu -1136(%rbp), %xmm0
+ 17858 90FBFFFF
+ 17859 .LBE4274:
+ 17860 .LBE4273:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 17861 .loc 2 934 0
+ 17862 10058 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 17862 60FBFFFF
+ 17863 .LBB4279:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 17864 .loc 2 935 0
+ 17865 10060 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 17865 60FBFFFF
+ 17866 10068 F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 17866 C0F6FFFF
+ 17867 10070 E8000000 call KDbgWriterGet at PLT
+ 17867 00
+ 17868 10075 4885C0 testq %rax, %rax
+ 17869 10078 7479 je .L288
+ 17870 1007a BF010000 movl $1, %edi
+ 17870 00
+ 17871 1007f E8000000 call KDbgCondToFlag at PLT
+ 17871 00
+ 17872 10084 4889C6 movq %rax, %rsi
+ 17873 10087 BF100000 movl $16, %edi
+ 17873 00
+ 17874 1008c E8000000 call KDbgTestModConds at PLT
+ 17874 00
+ 17875 10091 84C0 testb %al, %al
+ 17876 10093 745E je .L288
+ 17877 10095 8B85CCF6 movl -2356(%rbp), %eax
+ 17877 FFFF
+ 17878 1009b 89C7 movl %eax, %edi
+ 17879 1009d E85EFFFE call bswap_32
+ 17879 FF
+ 17880 100a2 4189C5 movl %eax, %r13d
+ 17881 100a5 8B85C8F6 movl -2360(%rbp), %eax
+ 17881 FFFF
+ 17882 100ab 89C7 movl %eax, %edi
+ 17883 100ad E84EFFFE call bswap_32
+ 17883 FF
+ 17884 100b2 4189C4 movl %eax, %r12d
+ 17885 100b5 8B85C4F6 movl -2364(%rbp), %eax
+ 17885 FFFF
+ 17886 100bb 89C7 movl %eax, %edi
+ 17887 100bd E83EFFFE call bswap_32
+ 17887 FF
+ 17888 100c2 89C3 movl %eax, %ebx
+ 17889 100c4 8B85C0F6 movl -2368(%rbp), %eax
+ 17889 FFFF
+ 17890 100ca 89C7 movl %eax, %edi
+ 17891 100cc E82FFFFE call bswap_32
+ 17891 FF
+ 17892 100d1 4589E9 movl %r13d, %r9d
+ 17893 100d4 4589E0 movl %r12d, %r8d
+ 17894 100d7 89D9 movl %ebx, %ecx
+ 17895 100d9 89C2 movl %eax, %edx
+
GAS LISTING /tmp/ccjbMjHD.s page 541
+
+
+ 17896 100db 488D3500 leaq .LC6(%rip), %rsi
+ 17896 000000
+ 17897 100e2 488D3D00 leaq .LC1(%rip), %rdi
+ 17897 000000
+ 17898 100e9 B8000000 movl $0, %eax
+ 17898 00
+ 17899 100ee E8000000 call KDbgMsg at PLT
+ 17899 00
+ 17900 .L288:
+ 17901 100f3 F30F6F85 movdqu -1200(%rbp), %xmm0
+ 17901 50FBFFFF
+ 17902 100fb F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 17902 F0FBFFFF
+ 17903 .LBE4279:
+ 17904 .LBB4280:
+ 17905 .LBB4281:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 17906 .loc 2 426 0
+ 17907 10103 F30F6F85 movdqu -1040(%rbp), %xmm0
+ 17907 F0FBFFFF
+ 17908 1010b F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 17908 00FCFFFF
+ 17909 10113 F30F6F85 movdqu -1024(%rbp), %xmm0
+ 17909 00FCFFFF
+ 17910 1011b F30F7F85 movdqu %xmm0, -992(%rbp)
+ 17910 20FCFFFF
+ 17911 .LBB4282:
+ 17912 .LBB4283:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 17913 .loc 3 416 0
+ 17914 10123 F30F6F85 movdqu -992(%rbp), %xmm0
+ 17914 20FCFFFF
+ 17915 1012b 660F72F0 pslld $1, %xmm0
+ 17915 01
+ 17916 .LBE4283:
+ 17917 .LBE4282:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 17918 .loc 2 433 0
+ 17919 10130 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 17919 00FCFFFF
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 17920 .loc 2 435 0
+ 17921 10138 B8010000 movl $1, %eax
+ 17921 00
+ 17922 1013d 4898 cltq
+ 17923 1013f 4889C2 movq %rax, %rdx
+ 17924 10142 48C1E204 salq $4, %rdx
+ 17925 10146 488D0500 leaq sl_mask.7310(%rip), %rax
+ 17925 000000
+ 17926 1014d 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 17926 02
+ 17927 10152 F30F6F8D movdqu -1024(%rbp), %xmm1
+ 17927 00FCFFFF
+ 17928 1015a F30F7F8D movdqu %xmm1, -960(%rbp)
+ 17928 40FCFFFF
+ 17929 10162 F30F7F85 movdqu %xmm0, -976(%rbp)
+ 17929 30FCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 542
+
+
+ 17930 .LBB4284:
+ 17931 .LBB4285:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 17932 .loc 2 206 0
+ 17933 1016a F30F6F85 movdqu -976(%rbp), %xmm0
+ 17933 30FCFFFF
+ 17934 10172 F30F6F8D movdqu -960(%rbp), %xmm1
+ 17934 40FCFFFF
+ 17935 1017a 660FDBC1 pand %xmm1, %xmm0
+ 17936 .LBE4285:
+ 17937 .LBE4284:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 17938 .loc 2 435 0
+ 17939 1017e F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 17939 00FCFFFF
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 17940 .loc 2 437 0
+ 17941 10186 F30F6F85 movdqu -1024(%rbp), %xmm0
+ 17941 00FCFFFF
+ 17942 .LBE4281:
+ 17943 .LBE4280:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 17944 .loc 2 936 0
+ 17945 1018e F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 17945 70FBFFFF
+ 17946 .LBB4286:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 17947 .loc 2 937 0
+ 17948 10196 F30F6F85 movdqu -1168(%rbp), %xmm0
+ 17948 70FBFFFF
+ 17949 1019e F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 17949 B0F6FFFF
+ 17950 101a6 E8000000 call KDbgWriterGet at PLT
+ 17950 00
+ 17951 101ab 4885C0 testq %rax, %rax
+ 17952 101ae 7479 je .L290
+ 17953 101b0 BF010000 movl $1, %edi
+ 17953 00
+ 17954 101b5 E8000000 call KDbgCondToFlag at PLT
+ 17954 00
+ 17955 101ba 4889C6 movq %rax, %rsi
+ 17956 101bd BF100000 movl $16, %edi
+ 17956 00
+ 17957 101c2 E8000000 call KDbgTestModConds at PLT
+ 17957 00
+ 17958 101c7 84C0 testb %al, %al
+ 17959 101c9 745E je .L290
+ 17960 101cb 8B85BCF6 movl -2372(%rbp), %eax
+ 17960 FFFF
+ 17961 101d1 89C7 movl %eax, %edi
+ 17962 101d3 E828FEFE call bswap_32
+ 17962 FF
+ 17963 101d8 4189C5 movl %eax, %r13d
+ 17964 101db 8B85B8F6 movl -2376(%rbp), %eax
+ 17964 FFFF
+ 17965 101e1 89C7 movl %eax, %edi
+ 17966 101e3 E818FEFE call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 543
+
+
+ 17966 FF
+ 17967 101e8 4189C4 movl %eax, %r12d
+ 17968 101eb 8B85B4F6 movl -2380(%rbp), %eax
+ 17968 FFFF
+ 17969 101f1 89C7 movl %eax, %edi
+ 17970 101f3 E808FEFE call bswap_32
+ 17970 FF
+ 17971 101f8 89C3 movl %eax, %ebx
+ 17972 101fa 8B85B0F6 movl -2384(%rbp), %eax
+ 17972 FFFF
+ 17973 10200 89C7 movl %eax, %edi
+ 17974 10202 E8F9FDFE call bswap_32
+ 17974 FF
+ 17975 10207 4589E9 movl %r13d, %r9d
+ 17976 1020a 4589E0 movl %r12d, %r8d
+ 17977 1020d 89D9 movl %ebx, %ecx
+ 17978 1020f 89C2 movl %eax, %edx
+ 17979 10211 488D3500 leaq .LC7(%rip), %rsi
+ 17979 000000
+ 17980 10218 488D3D00 leaq .LC1(%rip), %rdi
+ 17980 000000
+ 17981 1021f B8000000 movl $0, %eax
+ 17981 00
+ 17982 10224 E8000000 call KDbgMsg at PLT
+ 17982 00
+ 17983 .L290:
+ 17984 .LBE4286:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 17985 .loc 2 938 0
+ 17986 10229 660F6F05 movdqa FF_tab(%rip), %xmm0
+ 17986 00000000
+ 17987 10231 F30F7F85 movdqu %xmm0, -928(%rbp)
+ 17987 60FCFFFF
+ 17988 10239 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 17988 60FBFFFF
+ 17989 10241 F30F7F85 movdqu %xmm0, -944(%rbp)
+ 17989 50FCFFFF
+ 17990 10249 F30F6F85 movdqu -928(%rbp), %xmm0
+ 17990 60FCFFFF
+ 17991 10251 F30F7F85 movdqu %xmm0, -896(%rbp)
+ 17991 80FCFFFF
+ 17992 10259 F30F6F85 movdqu -944(%rbp), %xmm0
+ 17992 50FCFFFF
+ 17993 10261 F30F7F85 movdqu %xmm0, -912(%rbp)
+ 17993 70FCFFFF
+ 17994 .LBB4287:
+ 17995 .LBB4288:
+ 17996 .LBB4289:
+ 17997 .LBB4290:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17998 .loc 3 529 0
+ 17999 10269 F30F6F8D movdqu -912(%rbp), %xmm1
+ 17999 70FCFFFF
+ 18000 10271 F30F6F85 movdqu -896(%rbp), %xmm0
+ 18000 80FCFFFF
+ 18001 10279 660F3800 pshufb %xmm1, %xmm0
+ 18001 C1
+
GAS LISTING /tmp/ccjbMjHD.s page 544
+
+
+ 18002 .LBE4290:
+ 18003 .LBE4289:
+ 18004 .LBE4288:
+ 18005 .LBE4287:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 18006 .loc 2 938 0
+ 18007 1027e F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 18007 60FBFFFF
+ 18008 10286 F30F6F85 movdqu -1168(%rbp), %xmm0
+ 18008 70FBFFFF
+ 18009 1028e F30F7F85 movdqu %xmm0, -864(%rbp)
+ 18009 A0FCFFFF
+ 18010 10296 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 18010 60FBFFFF
+ 18011 1029e F30F7F85 movdqu %xmm0, -880(%rbp)
+ 18011 90FCFFFF
+ 18012 .LBB4291:
+ 18013 .LBB4292:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18014 .loc 2 178 0
+ 18015 102a6 F30F6F85 movdqu -880(%rbp), %xmm0
+ 18015 90FCFFFF
+ 18016 102ae F30F6F8D movdqu -864(%rbp), %xmm1
+ 18016 A0FCFFFF
+ 18017 102b6 660FEFC1 pxor %xmm1, %xmm0
+ 18018 .LBE4292:
+ 18019 .LBE4291:
+ 18020 .LBE4271:
+ 18021 .LBE4270:
+ 952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(FF_mul) (state, 1);
+ 18022 .loc 2 952 0
+ 18023 102ba F30F7F85 movdqu %xmm0, -1232(%rbp)
+ 18023 30FBFFFF
+ 18024 .LBB4293:
+ 953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 18025 .loc 2 953 0
+ 18026 102c2 F30F6F85 movdqu -1232(%rbp), %xmm0
+ 18026 30FBFFFF
+ 18027 102ca F30F7F85 movdqu %xmm0, -2416(%rbp)
+ 18027 90F6FFFF
+ 18028 102d2 E8000000 call KDbgWriterGet at PLT
+ 18028 00
+ 18029 102d7 4885C0 testq %rax, %rax
+ 18030 102da 7479 je .L292
+ 18031 102dc BF010000 movl $1, %edi
+ 18031 00
+ 18032 102e1 E8000000 call KDbgCondToFlag at PLT
+ 18032 00
+ 18033 102e6 4889C6 movq %rax, %rsi
+ 18034 102e9 BF100000 movl $16, %edi
+ 18034 00
+ 18035 102ee E8000000 call KDbgTestModConds at PLT
+ 18035 00
+ 18036 102f3 84C0 testb %al, %al
+ 18037 102f5 745E je .L292
+ 18038 102f7 8B859CF6 movl -2404(%rbp), %eax
+ 18038 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 545
+
+
+ 18039 102fd 89C7 movl %eax, %edi
+ 18040 102ff E8FCFCFE call bswap_32
+ 18040 FF
+ 18041 10304 4189C5 movl %eax, %r13d
+ 18042 10307 8B8598F6 movl -2408(%rbp), %eax
+ 18042 FFFF
+ 18043 1030d 89C7 movl %eax, %edi
+ 18044 1030f E8ECFCFE call bswap_32
+ 18044 FF
+ 18045 10314 4189C4 movl %eax, %r12d
+ 18046 10317 8B8594F6 movl -2412(%rbp), %eax
+ 18046 FFFF
+ 18047 1031d 89C7 movl %eax, %edi
+ 18048 1031f E8DCFCFE call bswap_32
+ 18048 FF
+ 18049 10324 89C3 movl %eax, %ebx
+ 18050 10326 8B8590F6 movl -2416(%rbp), %eax
+ 18050 FFFF
+ 18051 1032c 89C7 movl %eax, %edi
+ 18052 1032e E8CDFCFE call bswap_32
+ 18052 FF
+ 18053 10333 4589E9 movl %r13d, %r9d
+ 18054 10336 4589E0 movl %r12d, %r8d
+ 18055 10339 89D9 movl %ebx, %ecx
+ 18056 1033b 89C2 movl %eax, %edx
+ 18057 1033d 488D3500 leaq .LC5(%rip), %rsi
+ 18057 000000
+ 18058 10344 488D3D00 leaq .LC1(%rip), %rdi
+ 18058 000000
+ 18059 1034b B8000000 movl $0, %eax
+ 18059 00
+ 18060 10350 E8000000 call KDbgMsg at PLT
+ 18060 00
+ 18061 .L292:
+ 18062 .LBE4293:
+ 955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 18063 .loc 2 955 0
+ 18064 10355 F30F6F85 movdqu -1232(%rbp), %xmm0
+ 18064 30FBFFFF
+ 18065 .LBE4268:
+ 18066 .LBE4267:
+1054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c0 = AESBCMEMBER(FF_mul_02) (c0);
+ 18067 .loc 2 1054 0
+ 18068 1035d 660F7F85 movdqa %xmm0, -2608(%rbp)
+ 18068 D0F5FFFF
+ 18069 10365 660F6F85 movdqa -2624(%rbp), %xmm0
+ 18069 C0F5FFFF
+ 18070 1036d F30F7F85 movdqu %xmm0, -832(%rbp)
+ 18070 C0FCFFFF
+ 18071 10375 660F6F8D movdqa -2640(%rbp), %xmm1
+ 18071 B0F5FFFF
+ 18072 1037d F30F7F8D movdqu %xmm1, -848(%rbp)
+ 18072 B0FCFFFF
+ 18073 .LBB4294:
+ 18074 .LBB4295:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18075 .loc 2 178 0
+
GAS LISTING /tmp/ccjbMjHD.s page 546
+
+
+ 18076 10385 F30F6F85 movdqu -848(%rbp), %xmm0
+ 18076 B0FCFFFF
+ 18077 1038d F30F6F8D movdqu -832(%rbp), %xmm1
+ 18077 C0FCFFFF
+ 18078 10395 660FEFC1 pxor %xmm1, %xmm0
+ 18079 .LBE4295:
+ 18080 .LBE4294:
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c2);
+ 18081 .loc 2 1067 0
+ 18082 10399 660F7F85 movdqa %xmm0, -2624(%rbp)
+ 18082 C0F5FFFF
+ 18083 103a1 660F6F85 movdqa -2624(%rbp), %xmm0
+ 18083 C0F5FFFF
+ 18084 103a9 F30F7F85 movdqu %xmm0, -800(%rbp)
+ 18084 E0FCFFFF
+ 18085 103b1 660F6F8D movdqa -2656(%rbp), %xmm1
+ 18085 A0F5FFFF
+ 18086 103b9 F30F7F8D movdqu %xmm1, -816(%rbp)
+ 18086 D0FCFFFF
+ 18087 .LBB4296:
+ 18088 .LBB4297:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18089 .loc 2 178 0
+ 18090 103c1 F30F6F85 movdqu -816(%rbp), %xmm0
+ 18090 D0FCFFFF
+ 18091 103c9 F30F6F8D movdqu -800(%rbp), %xmm1
+ 18091 E0FCFFFF
+ 18092 103d1 660FEFC1 pxor %xmm1, %xmm0
+ 18093 .LBE4297:
+ 18094 .LBE4296:
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c3);
+ 18095 .loc 2 1068 0
+ 18096 103d5 660F7F85 movdqa %xmm0, -2624(%rbp)
+ 18096 C0F5FFFF
+ 18097 103dd 660F6F85 movdqa -2624(%rbp), %xmm0
+ 18097 C0F5FFFF
+ 18098 103e5 F30F7F85 movdqu %xmm0, -768(%rbp)
+ 18098 00FDFFFF
+ 18099 103ed 660F6F8D movdqa -2608(%rbp), %xmm1
+ 18099 D0F5FFFF
+ 18100 103f5 F30F7F8D movdqu %xmm1, -784(%rbp)
+ 18100 F0FCFFFF
+ 18101 .LBB4298:
+ 18102 .LBB4299:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18103 .loc 2 178 0
+ 18104 103fd F30F6F85 movdqu -784(%rbp), %xmm0
+ 18104 F0FCFFFF
+ 18105 10405 F30F6F8D movdqu -768(%rbp), %xmm1
+ 18105 00FDFFFF
+ 18106 1040d 660FEFC1 pxor %xmm1, %xmm0
+ 18107 .LBE4299:
+ 18108 .LBE4298:
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** c1 = AESBCMEMBER(VecXor) (c1, c0);
+ 18109 .loc 2 1069 0
+ 18110 10411 660F7F85 movdqa %xmm0, -2624(%rbp)
+ 18110 C0F5FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 547
+
+
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return c1;
+ 18111 .loc 2 1071 0
+ 18112 10419 660F6F85 movdqa -2624(%rbp), %xmm0
+ 18112 C0F5FFFF
+ 18113 .LBE4246:
+ 18114 .LBE4245:
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(MixColumns) (state);
+ 18115 .loc 2 2037 0
+ 18116 10421 F30F7F85 movdqu %xmm0, -2128(%rbp)
+ 18116 B0F7FFFF
+ 18117 .LBB4300:
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After MixColum", state);
+ 18118 .loc 2 2040 0
+ 18119 10429 F30F6F85 movdqu -2128(%rbp), %xmm0
+ 18119 B0F7FFFF
+ 18120 10431 F30F7F85 movdqu %xmm0, -2480(%rbp)
+ 18120 50F6FFFF
+ 18121 10439 E8000000 call KDbgWriterGet at PLT
+ 18121 00
+ 18122 1043e 4885C0 testq %rax, %rax
+ 18123 10441 7479 je .L294
+ 18124 10443 BF010000 movl $1, %edi
+ 18124 00
+ 18125 10448 E8000000 call KDbgCondToFlag at PLT
+ 18125 00
+ 18126 1044d 4889C6 movq %rax, %rsi
+ 18127 10450 BF100000 movl $16, %edi
+ 18127 00
+ 18128 10455 E8000000 call KDbgTestModConds at PLT
+ 18128 00
+ 18129 1045a 84C0 testb %al, %al
+ 18130 1045c 745E je .L294
+ 18131 1045e 8B855CF6 movl -2468(%rbp), %eax
+ 18131 FFFF
+ 18132 10464 89C7 movl %eax, %edi
+ 18133 10466 E895FBFE call bswap_32
+ 18133 FF
+ 18134 1046b 4189C5 movl %eax, %r13d
+ 18135 1046e 8B8558F6 movl -2472(%rbp), %eax
+ 18135 FFFF
+ 18136 10474 89C7 movl %eax, %edi
+ 18137 10476 E885FBFE call bswap_32
+ 18137 FF
+ 18138 1047b 4189C4 movl %eax, %r12d
+ 18139 1047e 8B8554F6 movl -2476(%rbp), %eax
+ 18139 FFFF
+ 18140 10484 89C7 movl %eax, %edi
+ 18141 10486 E875FBFE call bswap_32
+ 18141 FF
+ 18142 1048b 89C3 movl %eax, %ebx
+ 18143 1048d 8B8550F6 movl -2480(%rbp), %eax
+ 18143 FFFF
+ 18144 10493 89C7 movl %eax, %edi
+ 18145 10495 E866FBFE call bswap_32
+ 18145 FF
+ 18146 1049a 4589E9 movl %r13d, %r9d
+ 18147 1049d 4589E0 movl %r12d, %r8d
+
GAS LISTING /tmp/ccjbMjHD.s page 548
+
+
+ 18148 104a0 89D9 movl %ebx, %ecx
+ 18149 104a2 89C2 movl %eax, %edx
+ 18150 104a4 488D3500 leaq .LC13(%rip), %rsi
+ 18150 000000
+ 18151 104ab 488D3D00 leaq .LC1(%rip), %rdi
+ 18151 000000
+ 18152 104b2 B8000000 movl $0, %eax
+ 18152 00
+ 18153 104b7 E8000000 call KDbgMsg at PLT
+ 18153 00
+ 18154 .L294:
+ 18155 104bc F30F6F85 movdqu -2128(%rbp), %xmm0
+ 18155 B0F7FFFF
+ 18156 104c4 F30F7F85 movdqu %xmm0, -736(%rbp)
+ 18156 20FDFFFF
+ 18157 104cc F30F6F85 movdqu -2144(%rbp), %xmm0
+ 18157 A0F7FFFF
+ 18158 104d4 F30F7F85 movdqu %xmm0, -752(%rbp)
+ 18158 10FDFFFF
+ 18159 104dc F30F6F85 movdqu -736(%rbp), %xmm0
+ 18159 20FDFFFF
+ 18160 104e4 F30F7F85 movdqu %xmm0, -704(%rbp)
+ 18160 40FDFFFF
+ 18161 104ec F30F6F85 movdqu -752(%rbp), %xmm0
+ 18161 10FDFFFF
+ 18162 104f4 F30F7F85 movdqu %xmm0, -720(%rbp)
+ 18162 30FDFFFF
+ 18163 .LBE4300:
+ 18164 .LBB4301:
+ 18165 .LBB4302:
+ 18166 .LBB4303:
+ 18167 .LBB4304:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18168 .loc 2 178 0
+ 18169 104fc F30F6F85 movdqu -720(%rbp), %xmm0
+ 18169 30FDFFFF
+ 18170 10504 F30F6F8D movdqu -704(%rbp), %xmm1
+ 18170 40FDFFFF
+ 18171 1050c 660FEFC1 pxor %xmm1, %xmm0
+ 18172 .LBE4304:
+ 18173 .LBE4303:
+ 18174 .LBE4302:
+ 18175 .LBE4301:
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 18176 .loc 2 2042 0
+ 18177 10510 F30F7F85 movdqu %xmm0, -2128(%rbp)
+ 18177 B0F7FFFF
+ 18178 .LBB4305:
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 18179 .loc 2 2044 0
+ 18180 10518 F30F6F85 movdqu -2144(%rbp), %xmm0
+ 18180 A0F7FFFF
+ 18181 10520 F30F7F85 movdqu %xmm0, -2496(%rbp)
+ 18181 40F6FFFF
+ 18182 10528 E8000000 call KDbgWriterGet at PLT
+ 18182 00
+ 18183 1052d 4885C0 testq %rax, %rax
+
GAS LISTING /tmp/ccjbMjHD.s page 549
+
+
+ 18184 10530 7479 je .L296
+ 18185 10532 BF010000 movl $1, %edi
+ 18185 00
+ 18186 10537 E8000000 call KDbgCondToFlag at PLT
+ 18186 00
+ 18187 1053c 4889C6 movq %rax, %rsi
+ 18188 1053f BF100000 movl $16, %edi
+ 18188 00
+ 18189 10544 E8000000 call KDbgTestModConds at PLT
+ 18189 00
+ 18190 10549 84C0 testb %al, %al
+ 18191 1054b 745E je .L296
+ 18192 1054d 8B854CF6 movl -2484(%rbp), %eax
+ 18192 FFFF
+ 18193 10553 89C7 movl %eax, %edi
+ 18194 10555 E8A6FAFE call bswap_32
+ 18194 FF
+ 18195 1055a 4189C5 movl %eax, %r13d
+ 18196 1055d 8B8548F6 movl -2488(%rbp), %eax
+ 18196 FFFF
+ 18197 10563 89C7 movl %eax, %edi
+ 18198 10565 E896FAFE call bswap_32
+ 18198 FF
+ 18199 1056a 4189C4 movl %eax, %r12d
+ 18200 1056d 8B8544F6 movl -2492(%rbp), %eax
+ 18200 FFFF
+ 18201 10573 89C7 movl %eax, %edi
+ 18202 10575 E886FAFE call bswap_32
+ 18202 FF
+ 18203 1057a 89C3 movl %eax, %ebx
+ 18204 1057c 8B8540F6 movl -2496(%rbp), %eax
+ 18204 FFFF
+ 18205 10582 89C7 movl %eax, %edi
+ 18206 10584 E877FAFE call bswap_32
+ 18206 FF
+ 18207 10589 4589E9 movl %r13d, %r9d
+ 18208 1058c 4589E0 movl %r12d, %r8d
+ 18209 1058f 89D9 movl %ebx, %ecx
+ 18210 10591 89C2 movl %eax, %edx
+ 18211 10593 488D3500 leaq .LC9(%rip), %rsi
+ 18211 000000
+ 18212 1059a 488D3D00 leaq .LC1(%rip), %rdi
+ 18212 000000
+ 18213 105a1 B8000000 movl $0, %eax
+ 18213 00
+ 18214 105a6 E8000000 call KDbgMsg at PLT
+ 18214 00
+ 18215 .L296:
+ 18216 .LBE4305:
+ 18217 .LBB4306:
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+ 18218 .loc 2 2045 0
+ 18219 105ab F30F6F85 movdqu -2128(%rbp), %xmm0
+ 18219 B0F7FFFF
+ 18220 105b3 F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 18220 30F6FFFF
+ 18221 105bb E8000000 call KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 550
+
+
+ 18221 00
+ 18222 105c0 4885C0 testq %rax, %rax
+ 18223 105c3 7479 je .L298
+ 18224 105c5 BF010000 movl $1, %edi
+ 18224 00
+ 18225 105ca E8000000 call KDbgCondToFlag at PLT
+ 18225 00
+ 18226 105cf 4889C6 movq %rax, %rsi
+ 18227 105d2 BF100000 movl $16, %edi
+ 18227 00
+ 18228 105d7 E8000000 call KDbgTestModConds at PLT
+ 18228 00
+ 18229 105dc 84C0 testb %al, %al
+ 18230 105de 745E je .L298
+ 18231 105e0 8B853CF6 movl -2500(%rbp), %eax
+ 18231 FFFF
+ 18232 105e6 89C7 movl %eax, %edi
+ 18233 105e8 E813FAFE call bswap_32
+ 18233 FF
+ 18234 105ed 4189C5 movl %eax, %r13d
+ 18235 105f0 8B8538F6 movl -2504(%rbp), %eax
+ 18235 FFFF
+ 18236 105f6 89C7 movl %eax, %edi
+ 18237 105f8 E803FAFE call bswap_32
+ 18237 FF
+ 18238 105fd 4189C4 movl %eax, %r12d
+ 18239 10600 8B8534F6 movl -2508(%rbp), %eax
+ 18239 FFFF
+ 18240 10606 89C7 movl %eax, %edi
+ 18241 10608 E8F3F9FE call bswap_32
+ 18241 FF
+ 18242 1060d 89C3 movl %eax, %ebx
+ 18243 1060f 8B8530F6 movl -2512(%rbp), %eax
+ 18243 FFFF
+ 18244 10615 89C7 movl %eax, %edi
+ 18245 10617 E8E4F9FE call bswap_32
+ 18245 FF
+ 18246 1061c 4589E9 movl %r13d, %r9d
+ 18247 1061f 4589E0 movl %r12d, %r8d
+ 18248 10622 89D9 movl %ebx, %ecx
+ 18249 10624 89C2 movl %eax, %edx
+ 18250 10626 488D3500 leaq .LC14(%rip), %rsi
+ 18250 000000
+ 18251 1062d 488D3D00 leaq .LC1(%rip), %rdi
+ 18251 000000
+ 18252 10634 B8000000 movl $0, %eax
+ 18252 00
+ 18253 10639 E8000000 call KDbgMsg at PLT
+ 18253 00
+ 18254 .L298:
+ 18255 .LBE4306:
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 18256 .loc 2 2047 0
+ 18257 1063e F30F6F85 movdqu -2128(%rbp), %xmm0
+ 18257 B0F7FFFF
+ 18258 .LBE4209:
+ 18259 .LBE4208:
+
GAS LISTING /tmp/ccjbMjHD.s page 551
+
+
+ 18260 .loc 2 2100 0
+ 18261 10646 660F7F85 movdqa %xmm0, -2576(%rbp)
+ 18261 F0F5FFFF
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 18262 .loc 2 2099 0
+ 18263 1064e 83853CF7 addl $1, -2244(%rbp)
+ 18263 FFFF01
+ 18264 .L274:
+ 18265 10655 8B853CF7 movl -2244(%rbp), %eax
+ 18265 FFFF
+ 18266 1065b 3B85E4F5 cmpl -2588(%rbp), %eax
+ 18266 FFFF
+ 18267 10661 0F82DDF0 jb .L299
+ 18267 FFFF
+2101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(LastRound) (state, key[ix]);
+ 18268 .loc 2 2102 0
+ 18269 10667 8B853CF7 mov -2244(%rbp), %eax
+ 18269 FFFF
+ 18270 1066d 48C1E004 salq $4, %rax
+ 18271 10671 480385E8 addq -2584(%rbp), %rax
+ 18271 F5FFFF
+ 18272 10678 660F6F00 movdqa (%rax), %xmm0
+ 18273 1067c 660F6F8D movdqa -2576(%rbp), %xmm1
+ 18273 F0F5FFFF
+ 18274 10684 F30F7F8D movdqu %xmm1, -672(%rbp)
+ 18274 60FDFFFF
+ 18275 1068c F30F7F85 movdqu %xmm0, -688(%rbp)
+ 18275 50FDFFFF
+ 18276 .LBB4307:
+ 18277 .LBB4308:
+ 18278 .LBB4309:
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 18279 .loc 2 2058 0
+ 18280 10694 F30F6F85 movdqu -672(%rbp), %xmm0
+ 18280 60FDFFFF
+ 18281 1069c F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 18281 20F7FFFF
+ 18282 106a4 E8000000 call KDbgWriterGet at PLT
+ 18282 00
+ 18283 106a9 4885C0 testq %rax, %rax
+ 18284 106ac 7479 je .L301
+ 18285 106ae BF010000 movl $1, %edi
+ 18285 00
+ 18286 106b3 E8000000 call KDbgCondToFlag at PLT
+ 18286 00
+ 18287 106b8 4889C6 movq %rax, %rsi
+ 18288 106bb BF100000 movl $16, %edi
+ 18288 00
+ 18289 106c0 E8000000 call KDbgTestModConds at PLT
+ 18289 00
+ 18290 106c5 84C0 testb %al, %al
+ 18291 106c7 745E je .L301
+ 18292 106c9 8B852CF7 movl -2260(%rbp), %eax
+ 18292 FFFF
+ 18293 106cf 89C7 movl %eax, %edi
+ 18294 106d1 E82AF9FE call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 552
+
+
+ 18294 FF
+ 18295 106d6 4189C5 movl %eax, %r13d
+ 18296 106d9 8B8528F7 movl -2264(%rbp), %eax
+ 18296 FFFF
+ 18297 106df 89C7 movl %eax, %edi
+ 18298 106e1 E81AF9FE call bswap_32
+ 18298 FF
+ 18299 106e6 4189C4 movl %eax, %r12d
+ 18300 106e9 8B8524F7 movl -2268(%rbp), %eax
+ 18300 FFFF
+ 18301 106ef 89C7 movl %eax, %edi
+ 18302 106f1 E80AF9FE call bswap_32
+ 18302 FF
+ 18303 106f6 89C3 movl %eax, %ebx
+ 18304 106f8 8B8520F7 movl -2272(%rbp), %eax
+ 18304 FFFF
+ 18305 106fe 89C7 movl %eax, %edi
+ 18306 10700 E8FBF8FE call bswap_32
+ 18306 FF
+ 18307 10705 4589E9 movl %r13d, %r9d
+ 18308 10708 4589E0 movl %r12d, %r8d
+ 18309 1070b 89D9 movl %ebx, %ecx
+ 18310 1070d 89C2 movl %eax, %edx
+ 18311 1070f 488D3500 leaq .LC8(%rip), %rsi
+ 18311 000000
+ 18312 10716 488D3D00 leaq .LC1(%rip), %rdi
+ 18312 000000
+ 18313 1071d B8000000 movl $0, %eax
+ 18313 00
+ 18314 10722 E8000000 call KDbgMsg at PLT
+ 18314 00
+ 18315 .L301:
+ 18316 10727 F30F6F85 movdqu -672(%rbp), %xmm0
+ 18316 60FDFFFF
+ 18317 1072f F30F7F85 movdqu %xmm0, -656(%rbp)
+ 18317 70FDFFFF
+ 18318 10737 F30F6F85 movdqu -656(%rbp), %xmm0
+ 18318 70FDFFFF
+ 18319 1073f F30F7F85 movdqu %xmm0, -624(%rbp)
+ 18319 90FDFFFF
+ 18320 10747 488D0500 leaq KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 18320 000000
+ 18321 1074e 48898588 movq %rax, -632(%rbp)
+ 18321 FDFFFF
+ 18322 .LBE4309:
+ 18323 .LBB4310:
+ 18324 .LBB4311:
+ 18325 .LBB4312:
+ 18326 .LBB4313:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 18327 .loc 2 851 0
+ 18328 10755 660F6F05 movdqa vec_00(%rip), %xmm0
+ 18328 00000000
+ 18329 1075d F30F7F85 movdqu %xmm0, -592(%rbp)
+ 18329 B0FDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18330 .loc 2 854 0
+
GAS LISTING /tmp/ccjbMjHD.s page 553
+
+
+ 18331 10765 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 18331 00000000
+ 18332 1076d F30F6F8D movdqu -624(%rbp), %xmm1
+ 18332 90FDFFFF
+ 18333 10775 F30F7F8D movdqu %xmm1, -512(%rbp)
+ 18333 00FEFFFF
+ 18334 1077d F30F7F85 movdqu %xmm0, -528(%rbp)
+ 18334 F0FDFFFF
+ 18335 .LBB4314:
+ 18336 .LBB4315:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 18337 .loc 2 206 0
+ 18338 10785 F30F6F85 movdqu -528(%rbp), %xmm0
+ 18338 F0FDFFFF
+ 18339 1078d F30F6F8D movdqu -512(%rbp), %xmm1
+ 18339 00FEFFFF
+ 18340 10795 660FDBC1 pand %xmm1, %xmm0
+ 18341 .LBE4315:
+ 18342 .LBE4314:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18343 .loc 2 854 0
+ 18344 10799 F30F7F85 movdqu %xmm0, -544(%rbp)
+ 18344 E0FDFFFF
+ 18345 107a1 F30F6F85 movdqu -624(%rbp), %xmm0
+ 18345 90FDFFFF
+ 18346 107a9 F30F7F85 movdqu %xmm0, -480(%rbp)
+ 18346 20FEFFFF
+ 18347 .LBB4316:
+ 18348 .LBB4317:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 18349 .loc 3 433 0
+ 18350 107b1 F30F6F85 movdqu -480(%rbp), %xmm0
+ 18350 20FEFFFF
+ 18351 107b9 660F72D0 psrld $4, %xmm0
+ 18351 04
+ 18352 .LBE4317:
+ 18353 .LBE4316:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 18354 .loc 2 857 0
+ 18355 107be F30F7F85 movdqu %xmm0, -560(%rbp)
+ 18355 D0FDFFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18356 .loc 2 859 0
+ 18357 107c6 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 18357 00000000
+ 18358 107ce F30F6F8D movdqu -560(%rbp), %xmm1
+ 18358 D0FDFFFF
+ 18359 107d6 F30F7F8D movdqu %xmm1, -448(%rbp)
+ 18359 40FEFFFF
+ 18360 107de F30F7F85 movdqu %xmm0, -464(%rbp)
+ 18360 30FEFFFF
+ 18361 .LBB4318:
+ 18362 .LBB4319:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 18363 .loc 2 206 0
+ 18364 107e6 F30F6F85 movdqu -464(%rbp), %xmm0
+ 18364 30FEFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 554
+
+
+ 18365 107ee F30F6F8D movdqu -448(%rbp), %xmm1
+ 18365 40FEFFFF
+ 18366 107f6 660FDBC1 pand %xmm1, %xmm0
+ 18367 .LBE4319:
+ 18368 .LBE4318:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18369 .loc 2 859 0
+ 18370 107fa F30F7F85 movdqu %xmm0, -560(%rbp)
+ 18370 D0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 18371 .loc 2 866 0
+ 18372 10802 C785ACFD movl $0, -596(%rbp)
+ 18372 FFFF0000
+ 18372 0000
+ 18373 1080c E9BE0100 jmp .L302
+ 18373 00
+ 18374 .L303:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 18375 .loc 2 868 0
+ 18376 10811 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 18376 00000000
+ 18377 10819 F30F7F85 movdqu %xmm0, -416(%rbp)
+ 18377 60FEFFFF
+ 18378 10821 F30F6F85 movdqu -560(%rbp), %xmm0
+ 18378 D0FDFFFF
+ 18379 10829 F30F7F85 movdqu %xmm0, -432(%rbp)
+ 18379 50FEFFFF
+ 18380 10831 F30F6F85 movdqu -416(%rbp), %xmm0
+ 18380 60FEFFFF
+ 18381 10839 F30F7F85 movdqu %xmm0, -384(%rbp)
+ 18381 80FEFFFF
+ 18382 10841 F30F6F85 movdqu -432(%rbp), %xmm0
+ 18382 50FEFFFF
+ 18383 10849 F30F7F85 movdqu %xmm0, -400(%rbp)
+ 18383 70FEFFFF
+ 18384 .LBB4320:
+ 18385 .LBB4321:
+ 18386 .LBB4322:
+ 18387 .LBB4323:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 18388 .loc 3 529 0
+ 18389 10851 F30F6F8D movdqu -400(%rbp), %xmm1
+ 18389 70FEFFFF
+ 18390 10859 F30F6F85 movdqu -384(%rbp), %xmm0
+ 18390 80FEFFFF
+ 18391 10861 660F3800 pshufb %xmm1, %xmm0
+ 18391 C1
+ 18392 .LBE4323:
+ 18393 .LBE4322:
+ 18394 .LBE4321:
+ 18395 .LBE4320:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 18396 .loc 2 868 0
+ 18397 10866 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 18397 C0FDFFFF
+ 18398 1086e F30F6F85 movdqu -544(%rbp), %xmm0
+ 18398 E0FDFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 555
+
+
+ 18399 10876 F30F7F85 movdqu %xmm0, -352(%rbp)
+ 18399 A0FEFFFF
+ 18400 1087e F30F6F85 movdqu -576(%rbp), %xmm0
+ 18400 C0FDFFFF
+ 18401 10886 F30F7F85 movdqu %xmm0, -368(%rbp)
+ 18401 90FEFFFF
+ 18402 .LBB4324:
+ 18403 .LBB4325:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 18404 .loc 2 234 0
+ 18405 1088e F30F6F85 movdqu -368(%rbp), %xmm0
+ 18405 90FEFFFF
+ 18406 10896 F30F6F8D movdqu -352(%rbp), %xmm1
+ 18406 A0FEFFFF
+ 18407 1089e 660FEBC1 por %xmm1, %xmm0
+ 18408 .LBE4325:
+ 18409 .LBE4324:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 18410 .loc 2 870 0
+ 18411 108a2 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 18411 C0FDFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 18412 .loc 2 872 0
+ 18413 108aa 8B85ACFD mov -596(%rbp), %eax
+ 18413 FFFF
+ 18414 108b0 48C1E004 salq $4, %rax
+ 18415 108b4 48038588 addq -632(%rbp), %rax
+ 18415 FDFFFF
+ 18416 108bb 660F6F00 movdqa (%rax), %xmm0
+ 18417 108bf F30F7F85 movdqu %xmm0, -320(%rbp)
+ 18417 C0FEFFFF
+ 18418 108c7 F30F6F85 movdqu -576(%rbp), %xmm0
+ 18418 C0FDFFFF
+ 18419 108cf F30F7F85 movdqu %xmm0, -336(%rbp)
+ 18419 B0FEFFFF
+ 18420 108d7 F30F6F85 movdqu -320(%rbp), %xmm0
+ 18420 C0FEFFFF
+ 18421 108df F30F7F85 movdqu %xmm0, -288(%rbp)
+ 18421 E0FEFFFF
+ 18422 108e7 F30F6F85 movdqu -336(%rbp), %xmm0
+ 18422 B0FEFFFF
+ 18423 108ef F30F7F85 movdqu %xmm0, -304(%rbp)
+ 18423 D0FEFFFF
+ 18424 .LBB4326:
+ 18425 .LBB4327:
+ 18426 .LBB4328:
+ 18427 .LBB4329:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 18428 .loc 3 529 0
+ 18429 108f7 F30F6F8D movdqu -304(%rbp), %xmm1
+ 18429 D0FEFFFF
+ 18430 108ff F30F6F85 movdqu -288(%rbp), %xmm0
+ 18430 E0FEFFFF
+ 18431 10907 660F3800 pshufb %xmm1, %xmm0
+ 18431 C1
+ 18432 .LBE4329:
+ 18433 .LBE4328:
+
GAS LISTING /tmp/ccjbMjHD.s page 556
+
+
+ 18434 .LBE4327:
+ 18435 .LBE4326:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 18436 .loc 2 872 0
+ 18437 1090c F30F7F85 movdqu %xmm0, -576(%rbp)
+ 18437 C0FDFFFF
+ 18438 10914 F30F6F85 movdqu -592(%rbp), %xmm0
+ 18438 B0FDFFFF
+ 18439 1091c F30F7F85 movdqu %xmm0, -256(%rbp)
+ 18439 00FFFFFF
+ 18440 10924 F30F6F85 movdqu -576(%rbp), %xmm0
+ 18440 C0FDFFFF
+ 18441 1092c F30F7F85 movdqu %xmm0, -272(%rbp)
+ 18441 F0FEFFFF
+ 18442 .LBB4330:
+ 18443 .LBB4331:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 18444 .loc 2 234 0
+ 18445 10934 F30F6F85 movdqu -272(%rbp), %xmm0
+ 18445 F0FEFFFF
+ 18446 1093c F30F6F8D movdqu -256(%rbp), %xmm1
+ 18446 00FFFFFF
+ 18447 10944 660FEBC1 por %xmm1, %xmm0
+ 18448 .LBE4331:
+ 18449 .LBE4330:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 18450 .loc 2 874 0
+ 18451 10948 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 18451 B0FDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18452 .loc 2 876 0
+ 18453 10950 660F6F05 movdqa vec_01(%rip), %xmm0
+ 18453 00000000
+ 18454 10958 F30F6F8D movdqu -560(%rbp), %xmm1
+ 18454 D0FDFFFF
+ 18455 10960 F30F7F8D movdqu %xmm1, -224(%rbp)
+ 18455 20FFFFFF
+ 18456 10968 F30F7F85 movdqu %xmm0, -240(%rbp)
+ 18456 10FFFFFF
+ 18457 .LBB4332:
+ 18458 .LBB4333:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 18459 .loc 2 290 0
+ 18460 10970 F30F6F8D movdqu -240(%rbp), %xmm1
+ 18460 10FFFFFF
+ 18461 10978 F30F6F85 movdqu -224(%rbp), %xmm0
+ 18461 20FFFFFF
+ 18462 10980 660FF8C1 psubb %xmm1, %xmm0
+ 18463 .LBE4333:
+ 18464 .LBE4332:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18465 .loc 2 876 0
+ 18466 10984 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 18466 D0FDFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18467 .loc 2 878 0
+ 18468 1098c 660F6F05 movdqa vec_0F(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 557
+
+
+ 18468 00000000
+ 18469 10994 F30F6F8D movdqu -560(%rbp), %xmm1
+ 18469 D0FDFFFF
+ 18470 1099c F30F7F8D movdqu %xmm1, -192(%rbp)
+ 18470 40FFFFFF
+ 18471 109a4 F30F7F85 movdqu %xmm0, -208(%rbp)
+ 18471 30FFFFFF
+ 18472 .LBB4334:
+ 18473 .LBB4335:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 18474 .loc 2 206 0
+ 18475 109ac F30F6F85 movdqu -208(%rbp), %xmm0
+ 18475 30FFFFFF
+ 18476 109b4 F30F6F8D movdqu -192(%rbp), %xmm1
+ 18476 40FFFFFF
+ 18477 109bc 660FDBC1 pand %xmm1, %xmm0
+ 18478 .LBE4335:
+ 18479 .LBE4334:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18480 .loc 2 878 0
+ 18481 109c0 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 18481 D0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 18482 .loc 2 866 0
+ 18483 109c8 8385ACFD addl $1, -596(%rbp)
+ 18483 FFFF01
+ 18484 .L302:
+ 18485 109cf 83BDACFD cmpl $15, -596(%rbp)
+ 18485 FFFF0F
+ 18486 109d6 0F8635FE jbe .L303
+ 18486 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 18487 .loc 2 882 0
+ 18488 109dc F30F6F85 movdqu -592(%rbp), %xmm0
+ 18488 B0FDFFFF
+ 18489 .LBE4313:
+ 18490 .LBE4312:
+ 18491 .LBE4311:
+ 18492 .LBE4310:
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(SubBytes) (state);
+ 18493 .loc 2 2063 0
+ 18494 109e4 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 18494 60FDFFFF
+ 18495 .LBB4336:
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After SubBytes", state);
+ 18496 .loc 2 2065 0
+ 18497 109ec F30F6F85 movdqu -672(%rbp), %xmm0
+ 18497 60FDFFFF
+ 18498 109f4 F30F7F85 movdqu %xmm0, -2288(%rbp)
+ 18498 10F7FFFF
+ 18499 109fc E8000000 call KDbgWriterGet at PLT
+ 18499 00
+ 18500 10a01 4885C0 testq %rax, %rax
+ 18501 10a04 7479 je .L305
+ 18502 10a06 BF010000 movl $1, %edi
+ 18502 00
+ 18503 10a0b E8000000 call KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 558
+
+
+ 18503 00
+ 18504 10a10 4889C6 movq %rax, %rsi
+ 18505 10a13 BF100000 movl $16, %edi
+ 18505 00
+ 18506 10a18 E8000000 call KDbgTestModConds at PLT
+ 18506 00
+ 18507 10a1d 84C0 testb %al, %al
+ 18508 10a1f 745E je .L305
+ 18509 10a21 8B851CF7 movl -2276(%rbp), %eax
+ 18509 FFFF
+ 18510 10a27 89C7 movl %eax, %edi
+ 18511 10a29 E8D2F5FE call bswap_32
+ 18511 FF
+ 18512 10a2e 4189C5 movl %eax, %r13d
+ 18513 10a31 8B8518F7 movl -2280(%rbp), %eax
+ 18513 FFFF
+ 18514 10a37 89C7 movl %eax, %edi
+ 18515 10a39 E8C2F5FE call bswap_32
+ 18515 FF
+ 18516 10a3e 4189C4 movl %eax, %r12d
+ 18517 10a41 8B8514F7 movl -2284(%rbp), %eax
+ 18517 FFFF
+ 18518 10a47 89C7 movl %eax, %edi
+ 18519 10a49 E8B2F5FE call bswap_32
+ 18519 FF
+ 18520 10a4e 89C3 movl %eax, %ebx
+ 18521 10a50 8B8510F7 movl -2288(%rbp), %eax
+ 18521 FFFF
+ 18522 10a56 89C7 movl %eax, %edi
+ 18523 10a58 E8A3F5FE call bswap_32
+ 18523 FF
+ 18524 10a5d 4589E9 movl %r13d, %r9d
+ 18525 10a60 4589E0 movl %r12d, %r8d
+ 18526 10a63 89D9 movl %ebx, %ecx
+ 18527 10a65 89C2 movl %eax, %edx
+ 18528 10a67 488D3500 leaq .LC11(%rip), %rsi
+ 18528 000000
+ 18529 10a6e 488D3D00 leaq .LC1(%rip), %rdi
+ 18529 000000
+ 18530 10a75 B8000000 movl $0, %eax
+ 18530 00
+ 18531 10a7a E8000000 call KDbgMsg at PLT
+ 18531 00
+ 18532 .L305:
+ 18533 10a7f F30F6F85 movdqu -672(%rbp), %xmm0
+ 18533 60FDFFFF
+ 18534 10a87 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 18534 50FFFFFF
+ 18535 .LBE4336:
+ 18536 .LBB4337:
+ 18537 .LBB4338:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 18538 .loc 2 581 0
+ 18539 10a8f 660F6F05 movdqa ShiftRowTable.7358(%rip), %xmm0
+ 18539 00000000
+ 18540 10a97 F30F6F8D movdqu -176(%rbp), %xmm1
+ 18540 50FFFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 559
+
+
+ 18541 10a9f F30F7F8D movdqu %xmm1, -144(%rbp)
+ 18541 70FFFFFF
+ 18542 10aa7 F30F7F85 movdqu %xmm0, -160(%rbp)
+ 18542 60FFFFFF
+ 18543 10aaf F30F6F85 movdqu -144(%rbp), %xmm0
+ 18543 70FFFFFF
+ 18544 10ab7 F30F7F45 movdqu %xmm0, -112(%rbp)
+ 18544 90
+ 18545 10abc F30F6F85 movdqu -160(%rbp), %xmm0
+ 18545 60FFFFFF
+ 18546 10ac4 F30F7F45 movdqu %xmm0, -128(%rbp)
+ 18546 80
+ 18547 .LBB4339:
+ 18548 .LBB4340:
+ 18549 .LBB4341:
+ 18550 .LBB4342:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 18551 .loc 3 529 0
+ 18552 10ac9 F30F6F4D movdqu -128(%rbp), %xmm1
+ 18552 80
+ 18553 10ace F30F6F45 movdqu -112(%rbp), %xmm0
+ 18553 90
+ 18554 10ad3 660F3800 pshufb %xmm1, %xmm0
+ 18554 C1
+ 18555 .LBE4342:
+ 18556 .LBE4341:
+ 18557 .LBE4340:
+ 18558 .LBE4339:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 18559 .loc 2 581 0
+ 18560 10ad8 F30F7F85 movdqu %xmm0, -176(%rbp)
+ 18560 50FFFFFF
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 18561 .loc 2 582 0
+ 18562 10ae0 F30F6F85 movdqu -176(%rbp), %xmm0
+ 18562 50FFFFFF
+ 18563 .LBE4338:
+ 18564 .LBE4337:
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(ShiftRows) (state);
+ 18565 .loc 2 2067 0
+ 18566 10ae8 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 18566 60FDFFFF
+ 18567 .LBB4343:
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+ 18568 .loc 2 2069 0
+ 18569 10af0 F30F6F85 movdqu -672(%rbp), %xmm0
+ 18569 60FDFFFF
+ 18570 10af8 F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 18570 00F7FFFF
+ 18571 10b00 E8000000 call KDbgWriterGet at PLT
+ 18571 00
+ 18572 10b05 4885C0 testq %rax, %rax
+ 18573 10b08 7479 je .L307
+ 18574 10b0a BF010000 movl $1, %edi
+ 18574 00
+ 18575 10b0f E8000000 call KDbgCondToFlag at PLT
+ 18575 00
+
GAS LISTING /tmp/ccjbMjHD.s page 560
+
+
+ 18576 10b14 4889C6 movq %rax, %rsi
+ 18577 10b17 BF100000 movl $16, %edi
+ 18577 00
+ 18578 10b1c E8000000 call KDbgTestModConds at PLT
+ 18578 00
+ 18579 10b21 84C0 testb %al, %al
+ 18580 10b23 745E je .L307
+ 18581 10b25 8B850CF7 movl -2292(%rbp), %eax
+ 18581 FFFF
+ 18582 10b2b 89C7 movl %eax, %edi
+ 18583 10b2d E8CEF4FE call bswap_32
+ 18583 FF
+ 18584 10b32 4189C5 movl %eax, %r13d
+ 18585 10b35 8B8508F7 movl -2296(%rbp), %eax
+ 18585 FFFF
+ 18586 10b3b 89C7 movl %eax, %edi
+ 18587 10b3d E8BEF4FE call bswap_32
+ 18587 FF
+ 18588 10b42 4189C4 movl %eax, %r12d
+ 18589 10b45 8B8504F7 movl -2300(%rbp), %eax
+ 18589 FFFF
+ 18590 10b4b 89C7 movl %eax, %edi
+ 18591 10b4d E8AEF4FE call bswap_32
+ 18591 FF
+ 18592 10b52 89C3 movl %eax, %ebx
+ 18593 10b54 8B8500F7 movl -2304(%rbp), %eax
+ 18593 FFFF
+ 18594 10b5a 89C7 movl %eax, %edi
+ 18595 10b5c E89FF4FE call bswap_32
+ 18595 FF
+ 18596 10b61 4589E9 movl %r13d, %r9d
+ 18597 10b64 4589E0 movl %r12d, %r8d
+ 18598 10b67 89D9 movl %ebx, %ecx
+ 18599 10b69 89C2 movl %eax, %edx
+ 18600 10b6b 488D3500 leaq .LC12(%rip), %rsi
+ 18600 000000
+ 18601 10b72 488D3D00 leaq .LC1(%rip), %rdi
+ 18601 000000
+ 18602 10b79 B8000000 movl $0, %eax
+ 18602 00
+ 18603 10b7e E8000000 call KDbgMsg at PLT
+ 18603 00
+ 18604 .L307:
+ 18605 10b83 F30F6F85 movdqu -672(%rbp), %xmm0
+ 18605 60FDFFFF
+ 18606 10b8b F30F7F45 movdqu %xmm0, -80(%rbp)
+ 18606 B0
+ 18607 10b90 F30F6F85 movdqu -688(%rbp), %xmm0
+ 18607 50FDFFFF
+ 18608 10b98 F30F7F45 movdqu %xmm0, -96(%rbp)
+ 18608 A0
+ 18609 10b9d F30F6F45 movdqu -80(%rbp), %xmm0
+ 18609 B0
+ 18610 10ba2 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 18610 D0
+ 18611 10ba7 F30F6F45 movdqu -96(%rbp), %xmm0
+ 18611 A0
+
GAS LISTING /tmp/ccjbMjHD.s page 561
+
+
+ 18612 10bac F30F7F45 movdqu %xmm0, -64(%rbp)
+ 18612 C0
+ 18613 .LBE4343:
+ 18614 .LBB4344:
+ 18615 .LBB4345:
+ 18616 .LBB4346:
+ 18617 .LBB4347:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18618 .loc 2 178 0
+ 18619 10bb1 F30F6F45 movdqu -64(%rbp), %xmm0
+ 18619 C0
+ 18620 10bb6 F30F6F4D movdqu -48(%rbp), %xmm1
+ 18620 D0
+ 18621 10bbb 660FEFC1 pxor %xmm1, %xmm0
+ 18622 .LBE4347:
+ 18623 .LBE4346:
+ 18624 .LBE4345:
+ 18625 .LBE4344:
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 18626 .loc 2 2071 0
+ 18627 10bbf F30F7F85 movdqu %xmm0, -672(%rbp)
+ 18627 60FDFFFF
+ 18628 .LBB4348:
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 18629 .loc 2 2073 0
+ 18630 10bc7 F30F6F85 movdqu -688(%rbp), %xmm0
+ 18630 50FDFFFF
+ 18631 10bcf F30F7F85 movdqu %xmm0, -2320(%rbp)
+ 18631 F0F6FFFF
+ 18632 10bd7 E8000000 call KDbgWriterGet at PLT
+ 18632 00
+ 18633 10bdc 4885C0 testq %rax, %rax
+ 18634 10bdf 7479 je .L309
+ 18635 10be1 BF010000 movl $1, %edi
+ 18635 00
+ 18636 10be6 E8000000 call KDbgCondToFlag at PLT
+ 18636 00
+ 18637 10beb 4889C6 movq %rax, %rsi
+ 18638 10bee BF100000 movl $16, %edi
+ 18638 00
+ 18639 10bf3 E8000000 call KDbgTestModConds at PLT
+ 18639 00
+ 18640 10bf8 84C0 testb %al, %al
+ 18641 10bfa 745E je .L309
+ 18642 10bfc 8B85FCF6 movl -2308(%rbp), %eax
+ 18642 FFFF
+ 18643 10c02 89C7 movl %eax, %edi
+ 18644 10c04 E8F7F3FE call bswap_32
+ 18644 FF
+ 18645 10c09 4189C5 movl %eax, %r13d
+ 18646 10c0c 8B85F8F6 movl -2312(%rbp), %eax
+ 18646 FFFF
+ 18647 10c12 89C7 movl %eax, %edi
+ 18648 10c14 E8E7F3FE call bswap_32
+ 18648 FF
+ 18649 10c19 4189C4 movl %eax, %r12d
+ 18650 10c1c 8B85F4F6 movl -2316(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s page 562
+
+
+ 18650 FFFF
+ 18651 10c22 89C7 movl %eax, %edi
+ 18652 10c24 E8D7F3FE call bswap_32
+ 18652 FF
+ 18653 10c29 89C3 movl %eax, %ebx
+ 18654 10c2b 8B85F0F6 movl -2320(%rbp), %eax
+ 18654 FFFF
+ 18655 10c31 89C7 movl %eax, %edi
+ 18656 10c33 E8C8F3FE call bswap_32
+ 18656 FF
+ 18657 10c38 4589E9 movl %r13d, %r9d
+ 18658 10c3b 4589E0 movl %r12d, %r8d
+ 18659 10c3e 89D9 movl %ebx, %ecx
+ 18660 10c40 89C2 movl %eax, %edx
+ 18661 10c42 488D3500 leaq .LC9(%rip), %rsi
+ 18661 000000
+ 18662 10c49 488D3D00 leaq .LC1(%rip), %rdi
+ 18662 000000
+ 18663 10c50 B8000000 movl $0, %eax
+ 18663 00
+ 18664 10c55 E8000000 call KDbgMsg at PLT
+ 18664 00
+ 18665 .L309:
+ 18666 .LBE4348:
+ 18667 .LBB4349:
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR("End of Round", state);
+ 18668 .loc 2 2074 0
+ 18669 10c5a F30F6F85 movdqu -672(%rbp), %xmm0
+ 18669 60FDFFFF
+ 18670 10c62 F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 18670 E0F6FFFF
+ 18671 10c6a E8000000 call KDbgWriterGet at PLT
+ 18671 00
+ 18672 10c6f 4885C0 testq %rax, %rax
+ 18673 10c72 7479 je .L311
+ 18674 10c74 BF010000 movl $1, %edi
+ 18674 00
+ 18675 10c79 E8000000 call KDbgCondToFlag at PLT
+ 18675 00
+ 18676 10c7e 4889C6 movq %rax, %rsi
+ 18677 10c81 BF100000 movl $16, %edi
+ 18677 00
+ 18678 10c86 E8000000 call KDbgTestModConds at PLT
+ 18678 00
+ 18679 10c8b 84C0 testb %al, %al
+ 18680 10c8d 745E je .L311
+ 18681 10c8f 8B85ECF6 movl -2324(%rbp), %eax
+ 18681 FFFF
+ 18682 10c95 89C7 movl %eax, %edi
+ 18683 10c97 E864F3FE call bswap_32
+ 18683 FF
+ 18684 10c9c 4189C5 movl %eax, %r13d
+ 18685 10c9f 8B85E8F6 movl -2328(%rbp), %eax
+ 18685 FFFF
+ 18686 10ca5 89C7 movl %eax, %edi
+ 18687 10ca7 E854F3FE call bswap_32
+ 18687 FF
+
GAS LISTING /tmp/ccjbMjHD.s page 563
+
+
+ 18688 10cac 4189C4 movl %eax, %r12d
+ 18689 10caf 8B85E4F6 movl -2332(%rbp), %eax
+ 18689 FFFF
+ 18690 10cb5 89C7 movl %eax, %edi
+ 18691 10cb7 E844F3FE call bswap_32
+ 18691 FF
+ 18692 10cbc 89C3 movl %eax, %ebx
+ 18693 10cbe 8B85E0F6 movl -2336(%rbp), %eax
+ 18693 FFFF
+ 18694 10cc4 89C7 movl %eax, %edi
+ 18695 10cc6 E835F3FE call bswap_32
+ 18695 FF
+ 18696 10ccb 4589E9 movl %r13d, %r9d
+ 18697 10cce 4589E0 movl %r12d, %r8d
+ 18698 10cd1 89D9 movl %ebx, %ecx
+ 18699 10cd3 89C2 movl %eax, %edx
+ 18700 10cd5 488D3500 leaq .LC14(%rip), %rsi
+ 18700 000000
+ 18701 10cdc 488D3D00 leaq .LC1(%rip), %rdi
+ 18701 000000
+ 18702 10ce3 B8000000 movl $0, %eax
+ 18702 00
+ 18703 10ce8 E8000000 call KDbgMsg at PLT
+ 18703 00
+ 18704 .L311:
+ 18705 .LBE4349:
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 18706 .loc 2 2076 0
+ 18707 10ced F30F6F85 movdqu -672(%rbp), %xmm0
+ 18707 60FDFFFF
+ 18708 .LBE4308:
+ 18709 .LBE4307:
+2103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 18710 .loc 2 2103 0
+ 18711 10cf5 4881C458 addq $2648, %rsp
+ 18711 0A0000
+ 18712 10cfc 5B popq %rbx
+ 18713 10cfd 415C popq %r12
+ 18714 10cff 415D popq %r13
+ 18715 10d01 C9 leave
+ 18716 10d02 C3 ret
+ 18717 .cfi_endproc
+ 18718 .LFE655:
+ 18719 .size KAESBlockCipherVecRegCipher, .-KAESBlockCipherVecRegCipher
+ 18720 .section .rodata
+ 18721 .LC15:
+ 18722 043f 41667465 .string "After InvSubBy"
+ 18722 7220496E
+ 18722 76537562
+ 18722 427900
+ 18723 .LC16:
+ 18724 044e 41667465 .string "After InvShift"
+ 18724 7220496E
+ 18724 76536869
+ 18724 667400
+ 18725 .LC17:
+ 18726 045d 41667465 .string "After InvMixCo"
+
GAS LISTING /tmp/ccjbMjHD.s page 564
+
+
+ 18726 7220496E
+ 18726 764D6978
+ 18726 436F00
+ 18727 .text
+ 18728 .type KAESBlockCipherVecRegEqInvCipher, @function
+ 18729 KAESBlockCipherVecRegEqInvCipher:
+ 18730 .LFB659:
+2104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Section 5.1 of FIPS 197
+2108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This set of routines implements our structured wrapping of the
+2110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * FIPS-197 Section 5.3.5 Equivalent Inverse Cipher. In particular
+2111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * figure 15 Pseudo Code for the Equivalent Inverse Cipher.
+2112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The FIPS pseudocode has a single function which we have broken out
+2114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * into three kinds of rounds - first round, middle rounds and last
+2115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * round as we have also done with the cipher rountine.
+2116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The EqInvCipher operates on whole cipher blocks so the Byte and Block
+2118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * code is the same here until subroutines of the round functions are
+2119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * called.
+2120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * First round of equivalent inverse cipher is merely an XOR against the
+2124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * round key.
+2125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * middle rounds of the equivalent inverse cipher perform four steps
+2145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvSubBytes (inverse substitute bytes
+2146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvShiftRows (inverse shift rows
+2147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * InvMixColumns (inverse mix columns)
+2148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * AddRoundKey (xor against the round key)
+2149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the AES-NI instruction set from until implments all four steps with
+2151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * a single instruction
+2152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 565
+
+
+2154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mstate;
+2165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec mround_keys;
+2166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+2169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+2172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * AES-NI implmentation
+2175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESDEC (state, round_keys);
+2179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else /* #if USE_AES_NI */
+2181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * All other implementations
+2184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+2186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+2191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+2194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+2199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvMixColumns) (state);
+2202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+2207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+
GAS LISTING /tmp/ccjbMjHD.s page 566
+
+
+2211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+2214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+2216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+2218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif /* #if USE_AES_NI */
+2219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The final round of the equivalent inverse cipher is the same as
+2226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the middle rounds with the ommission of the InvMixColumns step.
+2227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __attribute__ ((always_inline));
+2232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** register CipherVec round_keys)
+2236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = op_AESDECLAST (state, round_keys);
+2241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+2244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+2246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+2248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+2250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+2257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The EqInvCipher functions (is defined in Figure 15 'Pseudo Code for
+2262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * for the Equivalent Inverse Cipher. This implementation as stated
+2263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * above for simplifaction broke out the three types of rounds into
+2264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * first round, middle rounds, and last round. This approach was taken
+2265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * for ease of coding for optimization using smaller bytes of code
+2266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * but inlining of the functions for efficiency
+2267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+
GAS LISTING /tmp/ccjbMjHD.s page 567
+
+
+2268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static /*__inline__*/
+2269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvCipher) (CipherVec state, const CipherVec * key,
+2270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned Nr)
+2271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 18731 .loc 2 2271 0
+ 18732 .cfi_startproc
+ 18733 10d03 55 pushq %rbp
+ 18734 .LCFI18:
+ 18735 .cfi_def_cfa_offset 16
+ 18736 10d04 4889E5 movq %rsp, %rbp
+ 18737 .cfi_offset 6, -16
+ 18738 .LCFI19:
+ 18739 .cfi_def_cfa_register 6
+ 18740 10d07 4155 pushq %r13
+ 18741 10d09 4154 pushq %r12
+ 18742 10d0b 53 pushq %rbx
+ 18743 10d0c 4881EC08 subq $3592, %rsp
+ 18743 0E0000
+ 18744 10d13 660F7F85 movdqa %xmm0, -3488(%rbp)
+ 18744 60F2FFFF
+ 18745 10d1b 4889BD58 movq %rdi, -3496(%rbp)
+ 18745 F2FFFF
+ 18746 10d22 89B554F2 movl %esi, -3500(%rbp)
+ 18746 FFFF
+2272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** unsigned ix = 0;
+ 18747 .loc 2 2272 0
+ 18748 10d28 C785ECF3 movl $0, -3092(%rbp)
+ 18748 FFFF0000
+ 18748 0000
+2273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+ 18749 .loc 2 2274 0
+ 18750 10d32 8B85ECF3 mov -3092(%rbp), %eax
+ 18750 FFFF
+ 18751 10d38 48C1E004 salq $4, %rax
+ 18752 10d3c 48038558 addq -3496(%rbp), %rax
+ 18752 F2FFFF
+ 18753 10d43 660F6F00 movdqa (%rax), %xmm0
+ 18754 10d47 8385ECF3 addl $1, -3092(%rbp)
+ 18754 FFFF01
+ 18755 10d4e 660F6F8D movdqa -3488(%rbp), %xmm1
+ 18755 60F2FFFF
+ 18756 10d56 F30F7F8D movdqu %xmm1, -3072(%rbp)
+ 18756 00F4FFFF
+ 18757 10d5e F30F7F85 movdqu %xmm0, -3088(%rbp)
+ 18757 F0F3FFFF
+ 18758 .LBB4551:
+ 18759 .LBB4552:
+ 18760 .LBB4553:
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 18761 .loc 2 2133 0
+ 18762 10d66 F30F6F85 movdqu -3072(%rbp), %xmm0
+ 18762 00F4FFFF
+ 18763 10d6e F30F7F85 movdqu %xmm0, -3440(%rbp)
+ 18763 90F2FFFF
+ 18764 .cfi_offset 3, -40
+ 18765 .cfi_offset 12, -32
+
GAS LISTING /tmp/ccjbMjHD.s page 568
+
+
+ 18766 .cfi_offset 13, -24
+ 18767 10d76 E8000000 call KDbgWriterGet at PLT
+ 18767 00
+ 18768 10d7b 4885C0 testq %rax, %rax
+ 18769 10d7e 7479 je .L315
+ 18770 10d80 BF030000 movl $3, %edi
+ 18770 00
+ 18771 10d85 E8000000 call KDbgCondToFlag at PLT
+ 18771 00
+ 18772 10d8a 4889C6 movq %rax, %rsi
+ 18773 10d8d BF100000 movl $16, %edi
+ 18773 00
+ 18774 10d92 E8000000 call KDbgTestModConds at PLT
+ 18774 00
+ 18775 10d97 84C0 testb %al, %al
+ 18776 10d99 745E je .L315
+ 18777 10d9b 8B859CF2 movl -3428(%rbp), %eax
+ 18777 FFFF
+ 18778 10da1 89C7 movl %eax, %edi
+ 18779 10da3 E858F2FE call bswap_32
+ 18779 FF
+ 18780 10da8 4189C5 movl %eax, %r13d
+ 18781 10dab 8B8598F2 movl -3432(%rbp), %eax
+ 18781 FFFF
+ 18782 10db1 89C7 movl %eax, %edi
+ 18783 10db3 E848F2FE call bswap_32
+ 18783 FF
+ 18784 10db8 4189C4 movl %eax, %r12d
+ 18785 10dbb 8B8594F2 movl -3436(%rbp), %eax
+ 18785 FFFF
+ 18786 10dc1 89C7 movl %eax, %edi
+ 18787 10dc3 E838F2FE call bswap_32
+ 18787 FF
+ 18788 10dc8 89C3 movl %eax, %ebx
+ 18789 10dca 8B8590F2 movl -3440(%rbp), %eax
+ 18789 FFFF
+ 18790 10dd0 89C7 movl %eax, %edi
+ 18791 10dd2 E829F2FE call bswap_32
+ 18791 FF
+ 18792 10dd7 4589E9 movl %r13d, %r9d
+ 18793 10dda 4589E0 movl %r12d, %r8d
+ 18794 10ddd 89D9 movl %ebx, %ecx
+ 18795 10ddf 89C2 movl %eax, %edx
+ 18796 10de1 488D3500 leaq .LC8(%rip), %rsi
+ 18796 000000
+ 18797 10de8 488D3D00 leaq .LC1(%rip), %rdi
+ 18797 000000
+ 18798 10def B8000000 movl $0, %eax
+ 18798 00
+ 18799 10df4 E8000000 call KDbgMsg at PLT
+ 18799 00
+ 18800 .L315:
+ 18801 10df9 F30F6F85 movdqu -3072(%rbp), %xmm0
+ 18801 00F4FFFF
+ 18802 10e01 F30F7F85 movdqu %xmm0, -3040(%rbp)
+ 18802 20F4FFFF
+ 18803 10e09 F30F6F85 movdqu -3088(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 569
+
+
+ 18803 F0F3FFFF
+ 18804 10e11 F30F7F85 movdqu %xmm0, -3056(%rbp)
+ 18804 10F4FFFF
+ 18805 10e19 F30F6F85 movdqu -3040(%rbp), %xmm0
+ 18805 20F4FFFF
+ 18806 10e21 F30F7F85 movdqu %xmm0, -3008(%rbp)
+ 18806 40F4FFFF
+ 18807 10e29 F30F6F85 movdqu -3056(%rbp), %xmm0
+ 18807 10F4FFFF
+ 18808 10e31 F30F7F85 movdqu %xmm0, -3024(%rbp)
+ 18808 30F4FFFF
+ 18809 .LBE4553:
+ 18810 .LBB4554:
+ 18811 .LBB4555:
+ 18812 .LBB4556:
+ 18813 .LBB4557:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 18814 .loc 2 178 0
+ 18815 10e39 F30F6F85 movdqu -3024(%rbp), %xmm0
+ 18815 30F4FFFF
+ 18816 10e41 F30F6F8D movdqu -3008(%rbp), %xmm1
+ 18816 40F4FFFF
+ 18817 10e49 660FEFC1 pxor %xmm1, %xmm0
+ 18818 .LBE4557:
+ 18819 .LBE4556:
+ 18820 .LBE4555:
+ 18821 .LBE4554:
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 18822 .loc 2 2135 0
+ 18823 10e4d F30F7F85 movdqu %xmm0, -3072(%rbp)
+ 18823 00F4FFFF
+ 18824 .LBB4558:
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 18825 .loc 2 2137 0
+ 18826 10e55 F30F6F85 movdqu -3088(%rbp), %xmm0
+ 18826 F0F3FFFF
+ 18827 10e5d F30F7F85 movdqu %xmm0, -3456(%rbp)
+ 18827 80F2FFFF
+ 18828 10e65 E8000000 call KDbgWriterGet at PLT
+ 18828 00
+ 18829 10e6a 4885C0 testq %rax, %rax
+ 18830 10e6d 7479 je .L317
+ 18831 10e6f BF030000 movl $3, %edi
+ 18831 00
+ 18832 10e74 E8000000 call KDbgCondToFlag at PLT
+ 18832 00
+ 18833 10e79 4889C6 movq %rax, %rsi
+ 18834 10e7c BF100000 movl $16, %edi
+ 18834 00
+ 18835 10e81 E8000000 call KDbgTestModConds at PLT
+ 18835 00
+ 18836 10e86 84C0 testb %al, %al
+ 18837 10e88 745E je .L317
+ 18838 10e8a 8B858CF2 movl -3444(%rbp), %eax
+ 18838 FFFF
+ 18839 10e90 89C7 movl %eax, %edi
+ 18840 10e92 E869F1FE call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 570
+
+
+ 18840 FF
+ 18841 10e97 4189C5 movl %eax, %r13d
+ 18842 10e9a 8B8588F2 movl -3448(%rbp), %eax
+ 18842 FFFF
+ 18843 10ea0 89C7 movl %eax, %edi
+ 18844 10ea2 E859F1FE call bswap_32
+ 18844 FF
+ 18845 10ea7 4189C4 movl %eax, %r12d
+ 18846 10eaa 8B8584F2 movl -3452(%rbp), %eax
+ 18846 FFFF
+ 18847 10eb0 89C7 movl %eax, %edi
+ 18848 10eb2 E849F1FE call bswap_32
+ 18848 FF
+ 18849 10eb7 89C3 movl %eax, %ebx
+ 18850 10eb9 8B8580F2 movl -3456(%rbp), %eax
+ 18850 FFFF
+ 18851 10ebf 89C7 movl %eax, %edi
+ 18852 10ec1 E83AF1FE call bswap_32
+ 18852 FF
+ 18853 10ec6 4589E9 movl %r13d, %r9d
+ 18854 10ec9 4589E0 movl %r12d, %r8d
+ 18855 10ecc 89D9 movl %ebx, %ecx
+ 18856 10ece 89C2 movl %eax, %edx
+ 18857 10ed0 488D3500 leaq .LC9(%rip), %rsi
+ 18857 000000
+ 18858 10ed7 488D3D00 leaq .LC1(%rip), %rdi
+ 18858 000000
+ 18859 10ede B8000000 movl $0, %eax
+ 18859 00
+ 18860 10ee3 E8000000 call KDbgMsg at PLT
+ 18860 00
+ 18861 .L317:
+ 18862 .LBE4558:
+ 18863 .LBB4559:
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 18864 .loc 2 2138 0
+ 18865 10ee8 F30F6F85 movdqu -3072(%rbp), %xmm0
+ 18865 00F4FFFF
+ 18866 10ef0 F30F7F85 movdqu %xmm0, -3472(%rbp)
+ 18866 70F2FFFF
+ 18867 10ef8 E8000000 call KDbgWriterGet at PLT
+ 18867 00
+ 18868 10efd 4885C0 testq %rax, %rax
+ 18869 10f00 7479 je .L319
+ 18870 10f02 BF030000 movl $3, %edi
+ 18870 00
+ 18871 10f07 E8000000 call KDbgCondToFlag at PLT
+ 18871 00
+ 18872 10f0c 4889C6 movq %rax, %rsi
+ 18873 10f0f BF100000 movl $16, %edi
+ 18873 00
+ 18874 10f14 E8000000 call KDbgTestModConds at PLT
+ 18874 00
+ 18875 10f19 84C0 testb %al, %al
+ 18876 10f1b 745E je .L319
+ 18877 10f1d 8B857CF2 movl -3460(%rbp), %eax
+ 18877 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 571
+
+
+ 18878 10f23 89C7 movl %eax, %edi
+ 18879 10f25 E8D6F0FE call bswap_32
+ 18879 FF
+ 18880 10f2a 4189C5 movl %eax, %r13d
+ 18881 10f2d 8B8578F2 movl -3464(%rbp), %eax
+ 18881 FFFF
+ 18882 10f33 89C7 movl %eax, %edi
+ 18883 10f35 E8C6F0FE call bswap_32
+ 18883 FF
+ 18884 10f3a 4189C4 movl %eax, %r12d
+ 18885 10f3d 8B8574F2 movl -3468(%rbp), %eax
+ 18885 FFFF
+ 18886 10f43 89C7 movl %eax, %edi
+ 18887 10f45 E8B6F0FE call bswap_32
+ 18887 FF
+ 18888 10f4a 89C3 movl %eax, %ebx
+ 18889 10f4c 8B8570F2 movl -3472(%rbp), %eax
+ 18889 FFFF
+ 18890 10f52 89C7 movl %eax, %edi
+ 18891 10f54 E8A7F0FE call bswap_32
+ 18891 FF
+ 18892 10f59 4589E9 movl %r13d, %r9d
+ 18893 10f5c 4589E0 movl %r12d, %r8d
+ 18894 10f5f 89D9 movl %ebx, %ecx
+ 18895 10f61 89C2 movl %eax, %edx
+ 18896 10f63 488D3500 leaq .LC14(%rip), %rsi
+ 18896 000000
+ 18897 10f6a 488D3D00 leaq .LC1(%rip), %rdi
+ 18897 000000
+ 18898 10f71 B8000000 movl $0, %eax
+ 18898 00
+ 18899 10f76 E8000000 call KDbgMsg at PLT
+ 18899 00
+ 18900 .L319:
+ 18901 .LBE4559:
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 18902 .loc 2 2139 0
+ 18903 10f7b F30F6F85 movdqu -3072(%rbp), %xmm0
+ 18903 00F4FFFF
+ 18904 .LBE4552:
+ 18905 .LBE4551:
+ 18906 .loc 2 2274 0
+ 18907 10f83 660F7F85 movdqa %xmm0, -3488(%rbp)
+ 18907 60F2FFFF
+2275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 18908 .loc 2 2276 0
+ 18909 10f8b E99B1600 jmp .L320
+ 18909 00
+ 18910 .L353:
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+ 18911 .loc 2 2277 0
+ 18912 10f90 8B85ECF3 mov -3092(%rbp), %eax
+ 18912 FFFF
+ 18913 10f96 48C1E004 salq $4, %rax
+ 18914 10f9a 48038558 addq -3496(%rbp), %rax
+ 18914 F2FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 572
+
+
+ 18915 10fa1 660F6F00 movdqa (%rax), %xmm0
+ 18916 10fa5 660F6F8D movdqa -3488(%rbp), %xmm1
+ 18916 60F2FFFF
+ 18917 10fad F30F7F8D movdqu %xmm1, -2976(%rbp)
+ 18917 60F4FFFF
+ 18918 10fb5 F30F7F85 movdqu %xmm0, -2992(%rbp)
+ 18918 50F4FFFF
+ 18919 .LBB4560:
+ 18920 .LBB4561:
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 18921 .loc 2 2167 0
+ 18922 10fbd F30F6F85 movdqu -2976(%rbp), %xmm0
+ 18922 60F4FFFF
+ 18923 10fc5 F30F7F85 movdqu %xmm0, -2944(%rbp)
+ 18923 80F4FFFF
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mround_keys = round_keys;
+ 18924 .loc 2 2168 0
+ 18925 10fcd F30F6F85 movdqu -2992(%rbp), %xmm0
+ 18925 50F4FFFF
+ 18926 10fd5 F30F7F85 movdqu %xmm0, -2960(%rbp)
+ 18926 70F4FFFF
+ 18927 .LBB4562:
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+ 18928 .loc 2 2171 0
+ 18929 10fdd F30F6F85 movdqu -2944(%rbp), %xmm0
+ 18929 80F4FFFF
+ 18930 10fe5 F30F7F85 movdqu %xmm0, -3344(%rbp)
+ 18930 F0F2FFFF
+ 18931 10fed E8000000 call KDbgWriterGet at PLT
+ 18931 00
+ 18932 10ff2 4885C0 testq %rax, %rax
+ 18933 10ff5 7479 je .L322
+ 18934 10ff7 BF030000 movl $3, %edi
+ 18934 00
+ 18935 10ffc E8000000 call KDbgCondToFlag at PLT
+ 18935 00
+ 18936 11001 4889C6 movq %rax, %rsi
+ 18937 11004 BF100000 movl $16, %edi
+ 18937 00
+ 18938 11009 E8000000 call KDbgTestModConds at PLT
+ 18938 00
+ 18939 1100e 84C0 testb %al, %al
+ 18940 11010 745E je .L322
+ 18941 11012 8B85FCF2 movl -3332(%rbp), %eax
+ 18941 FFFF
+ 18942 11018 89C7 movl %eax, %edi
+ 18943 1101a E8E1EFFE call bswap_32
+ 18943 FF
+ 18944 1101f 4189C5 movl %eax, %r13d
+ 18945 11022 8B85F8F2 movl -3336(%rbp), %eax
+ 18945 FFFF
+ 18946 11028 89C7 movl %eax, %edi
+ 18947 1102a E8D1EFFE call bswap_32
+ 18947 FF
+ 18948 1102f 4189C4 movl %eax, %r12d
+ 18949 11032 8B85F4F2 movl -3340(%rbp), %eax
+ 18949 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 573
+
+
+ 18950 11038 89C7 movl %eax, %edi
+ 18951 1103a E8C1EFFE call bswap_32
+ 18951 FF
+ 18952 1103f 89C3 movl %eax, %ebx
+ 18953 11041 8B85F0F2 movl -3344(%rbp), %eax
+ 18953 FFFF
+ 18954 11047 89C7 movl %eax, %edi
+ 18955 11049 E8B2EFFE call bswap_32
+ 18955 FF
+ 18956 1104e 4589E9 movl %r13d, %r9d
+ 18957 11051 4589E0 movl %r12d, %r8d
+ 18958 11054 89D9 movl %ebx, %ecx
+ 18959 11056 89C2 movl %eax, %edx
+ 18960 11058 488D3500 leaq .LC8(%rip), %rsi
+ 18960 000000
+ 18961 1105f 488D3D00 leaq .LC1(%rip), %rdi
+ 18961 000000
+ 18962 11066 B8000000 movl $0, %eax
+ 18962 00
+ 18963 1106b E8000000 call KDbgMsg at PLT
+ 18963 00
+ 18964 .L322:
+ 18965 11070 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 18965 60F4FFFF
+ 18966 11078 F30F7F85 movdqu %xmm0, -2928(%rbp)
+ 18966 90F4FFFF
+ 18967 11080 F30F6F85 movdqu -2928(%rbp), %xmm0
+ 18967 90F4FFFF
+ 18968 11088 F30F7F85 movdqu %xmm0, -2896(%rbp)
+ 18968 B0F4FFFF
+ 18969 11090 488D0500 leaq KAESBlockCipherVecRegRijndaelInvSBoxV(%rip), %rax
+ 18969 000000
+ 18970 11097 488985A8 movq %rax, -2904(%rbp)
+ 18970 F4FFFF
+ 18971 .LBE4562:
+ 18972 .LBB4563:
+ 18973 .LBB4564:
+ 18974 .LBB4565:
+ 18975 .LBB4566:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 18976 .loc 2 851 0
+ 18977 1109e 660F6F05 movdqa vec_00(%rip), %xmm0
+ 18977 00000000
+ 18978 110a6 F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 18978 D0F4FFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18979 .loc 2 854 0
+ 18980 110ae 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 18980 00000000
+ 18981 110b6 F30F6F8D movdqu -2896(%rbp), %xmm1
+ 18981 B0F4FFFF
+ 18982 110be F30F7F8D movdqu %xmm1, -2784(%rbp)
+ 18982 20F5FFFF
+ 18983 110c6 F30F7F85 movdqu %xmm0, -2800(%rbp)
+ 18983 10F5FFFF
+ 18984 .LBB4567:
+ 18985 .LBB4568:
+
GAS LISTING /tmp/ccjbMjHD.s page 574
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 18986 .loc 2 206 0
+ 18987 110ce F30F6F85 movdqu -2800(%rbp), %xmm0
+ 18987 10F5FFFF
+ 18988 110d6 F30F6F8D movdqu -2784(%rbp), %xmm1
+ 18988 20F5FFFF
+ 18989 110de 660FDBC1 pand %xmm1, %xmm0
+ 18990 .LBE4568:
+ 18991 .LBE4567:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18992 .loc 2 854 0
+ 18993 110e2 F30F7F85 movdqu %xmm0, -2816(%rbp)
+ 18993 00F5FFFF
+ 18994 110ea F30F6F85 movdqu -2896(%rbp), %xmm0
+ 18994 B0F4FFFF
+ 18995 110f2 F30F7F85 movdqu %xmm0, -2752(%rbp)
+ 18995 40F5FFFF
+ 18996 .LBB4569:
+ 18997 .LBB4570:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 18998 .loc 3 433 0
+ 18999 110fa F30F6F85 movdqu -2752(%rbp), %xmm0
+ 18999 40F5FFFF
+ 19000 11102 660F72D0 psrld $4, %xmm0
+ 19000 04
+ 19001 .LBE4570:
+ 19002 .LBE4569:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 19003 .loc 2 857 0
+ 19004 11107 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 19004 F0F4FFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19005 .loc 2 859 0
+ 19006 1110f 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 19006 00000000
+ 19007 11117 F30F6F8D movdqu -2832(%rbp), %xmm1
+ 19007 F0F4FFFF
+ 19008 1111f F30F7F8D movdqu %xmm1, -2720(%rbp)
+ 19008 60F5FFFF
+ 19009 11127 F30F7F85 movdqu %xmm0, -2736(%rbp)
+ 19009 50F5FFFF
+ 19010 .LBB4571:
+ 19011 .LBB4572:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 19012 .loc 2 206 0
+ 19013 1112f F30F6F85 movdqu -2736(%rbp), %xmm0
+ 19013 50F5FFFF
+ 19014 11137 F30F6F8D movdqu -2720(%rbp), %xmm1
+ 19014 60F5FFFF
+ 19015 1113f 660FDBC1 pand %xmm1, %xmm0
+ 19016 .LBE4572:
+ 19017 .LBE4571:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19018 .loc 2 859 0
+ 19019 11143 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 19019 F0F4FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+
GAS LISTING /tmp/ccjbMjHD.s page 575
+
+
+ 19020 .loc 2 866 0
+ 19021 1114b C785CCF4 movl $0, -2868(%rbp)
+ 19021 FFFF0000
+ 19021 0000
+ 19022 11155 E9BE0100 jmp .L323
+ 19022 00
+ 19023 .L324:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 19024 .loc 2 868 0
+ 19025 1115a 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 19025 00000000
+ 19026 11162 F30F7F85 movdqu %xmm0, -2688(%rbp)
+ 19026 80F5FFFF
+ 19027 1116a F30F6F85 movdqu -2832(%rbp), %xmm0
+ 19027 F0F4FFFF
+ 19028 11172 F30F7F85 movdqu %xmm0, -2704(%rbp)
+ 19028 70F5FFFF
+ 19029 1117a F30F6F85 movdqu -2688(%rbp), %xmm0
+ 19029 80F5FFFF
+ 19030 11182 F30F7F85 movdqu %xmm0, -2656(%rbp)
+ 19030 A0F5FFFF
+ 19031 1118a F30F6F85 movdqu -2704(%rbp), %xmm0
+ 19031 70F5FFFF
+ 19032 11192 F30F7F85 movdqu %xmm0, -2672(%rbp)
+ 19032 90F5FFFF
+ 19033 .LBB4573:
+ 19034 .LBB4574:
+ 19035 .LBB4575:
+ 19036 .LBB4576:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19037 .loc 3 529 0
+ 19038 1119a F30F6F8D movdqu -2672(%rbp), %xmm1
+ 19038 90F5FFFF
+ 19039 111a2 F30F6F85 movdqu -2656(%rbp), %xmm0
+ 19039 A0F5FFFF
+ 19040 111aa 660F3800 pshufb %xmm1, %xmm0
+ 19040 C1
+ 19041 .LBE4576:
+ 19042 .LBE4575:
+ 19043 .LBE4574:
+ 19044 .LBE4573:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 19045 .loc 2 868 0
+ 19046 111af F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 19046 E0F4FFFF
+ 19047 111b7 F30F6F85 movdqu -2816(%rbp), %xmm0
+ 19047 00F5FFFF
+ 19048 111bf F30F7F85 movdqu %xmm0, -2624(%rbp)
+ 19048 C0F5FFFF
+ 19049 111c7 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 19049 E0F4FFFF
+ 19050 111cf F30F7F85 movdqu %xmm0, -2640(%rbp)
+ 19050 B0F5FFFF
+ 19051 .LBB4577:
+ 19052 .LBB4578:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 19053 .loc 2 234 0
+
GAS LISTING /tmp/ccjbMjHD.s page 576
+
+
+ 19054 111d7 F30F6F85 movdqu -2640(%rbp), %xmm0
+ 19054 B0F5FFFF
+ 19055 111df F30F6F8D movdqu -2624(%rbp), %xmm1
+ 19055 C0F5FFFF
+ 19056 111e7 660FEBC1 por %xmm1, %xmm0
+ 19057 .LBE4578:
+ 19058 .LBE4577:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 19059 .loc 2 870 0
+ 19060 111eb F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 19060 E0F4FFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 19061 .loc 2 872 0
+ 19062 111f3 8B85CCF4 mov -2868(%rbp), %eax
+ 19062 FFFF
+ 19063 111f9 48C1E004 salq $4, %rax
+ 19064 111fd 480385A8 addq -2904(%rbp), %rax
+ 19064 F4FFFF
+ 19065 11204 660F6F00 movdqa (%rax), %xmm0
+ 19066 11208 F30F7F85 movdqu %xmm0, -2592(%rbp)
+ 19066 E0F5FFFF
+ 19067 11210 F30F6F85 movdqu -2848(%rbp), %xmm0
+ 19067 E0F4FFFF
+ 19068 11218 F30F7F85 movdqu %xmm0, -2608(%rbp)
+ 19068 D0F5FFFF
+ 19069 11220 F30F6F85 movdqu -2592(%rbp), %xmm0
+ 19069 E0F5FFFF
+ 19070 11228 F30F7F85 movdqu %xmm0, -2560(%rbp)
+ 19070 00F6FFFF
+ 19071 11230 F30F6F85 movdqu -2608(%rbp), %xmm0
+ 19071 D0F5FFFF
+ 19072 11238 F30F7F85 movdqu %xmm0, -2576(%rbp)
+ 19072 F0F5FFFF
+ 19073 .LBB4579:
+ 19074 .LBB4580:
+ 19075 .LBB4581:
+ 19076 .LBB4582:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19077 .loc 3 529 0
+ 19078 11240 F30F6F8D movdqu -2576(%rbp), %xmm1
+ 19078 F0F5FFFF
+ 19079 11248 F30F6F85 movdqu -2560(%rbp), %xmm0
+ 19079 00F6FFFF
+ 19080 11250 660F3800 pshufb %xmm1, %xmm0
+ 19080 C1
+ 19081 .LBE4582:
+ 19082 .LBE4581:
+ 19083 .LBE4580:
+ 19084 .LBE4579:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 19085 .loc 2 872 0
+ 19086 11255 F30F7F85 movdqu %xmm0, -2848(%rbp)
+ 19086 E0F4FFFF
+ 19087 1125d F30F6F85 movdqu -2864(%rbp), %xmm0
+ 19087 D0F4FFFF
+ 19088 11265 F30F7F85 movdqu %xmm0, -2528(%rbp)
+ 19088 20F6FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 577
+
+
+ 19089 1126d F30F6F85 movdqu -2848(%rbp), %xmm0
+ 19089 E0F4FFFF
+ 19090 11275 F30F7F85 movdqu %xmm0, -2544(%rbp)
+ 19090 10F6FFFF
+ 19091 .LBB4583:
+ 19092 .LBB4584:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 19093 .loc 2 234 0
+ 19094 1127d F30F6F85 movdqu -2544(%rbp), %xmm0
+ 19094 10F6FFFF
+ 19095 11285 F30F6F8D movdqu -2528(%rbp), %xmm1
+ 19095 20F6FFFF
+ 19096 1128d 660FEBC1 por %xmm1, %xmm0
+ 19097 .LBE4584:
+ 19098 .LBE4583:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 19099 .loc 2 874 0
+ 19100 11291 F30F7F85 movdqu %xmm0, -2864(%rbp)
+ 19100 D0F4FFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 19101 .loc 2 876 0
+ 19102 11299 660F6F05 movdqa vec_01(%rip), %xmm0
+ 19102 00000000
+ 19103 112a1 F30F6F8D movdqu -2832(%rbp), %xmm1
+ 19103 F0F4FFFF
+ 19104 112a9 F30F7F8D movdqu %xmm1, -2496(%rbp)
+ 19104 40F6FFFF
+ 19105 112b1 F30F7F85 movdqu %xmm0, -2512(%rbp)
+ 19105 30F6FFFF
+ 19106 .LBB4585:
+ 19107 .LBB4586:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 19108 .loc 2 290 0
+ 19109 112b9 F30F6F8D movdqu -2512(%rbp), %xmm1
+ 19109 30F6FFFF
+ 19110 112c1 F30F6F85 movdqu -2496(%rbp), %xmm0
+ 19110 40F6FFFF
+ 19111 112c9 660FF8C1 psubb %xmm1, %xmm0
+ 19112 .LBE4586:
+ 19113 .LBE4585:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 19114 .loc 2 876 0
+ 19115 112cd F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 19115 F0F4FFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19116 .loc 2 878 0
+ 19117 112d5 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 19117 00000000
+ 19118 112dd F30F6F8D movdqu -2832(%rbp), %xmm1
+ 19118 F0F4FFFF
+ 19119 112e5 F30F7F8D movdqu %xmm1, -2464(%rbp)
+ 19119 60F6FFFF
+ 19120 112ed F30F7F85 movdqu %xmm0, -2480(%rbp)
+ 19120 50F6FFFF
+ 19121 .LBB4587:
+ 19122 .LBB4588:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+
GAS LISTING /tmp/ccjbMjHD.s page 578
+
+
+ 19123 .loc 2 206 0
+ 19124 112f5 F30F6F85 movdqu -2480(%rbp), %xmm0
+ 19124 50F6FFFF
+ 19125 112fd F30F6F8D movdqu -2464(%rbp), %xmm1
+ 19125 60F6FFFF
+ 19126 11305 660FDBC1 pand %xmm1, %xmm0
+ 19127 .LBE4588:
+ 19128 .LBE4587:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19129 .loc 2 878 0
+ 19130 11309 F30F7F85 movdqu %xmm0, -2832(%rbp)
+ 19130 F0F4FFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 19131 .loc 2 866 0
+ 19132 11311 8385CCF4 addl $1, -2868(%rbp)
+ 19132 FFFF01
+ 19133 .L323:
+ 19134 11318 83BDCCF4 cmpl $15, -2868(%rbp)
+ 19134 FFFF0F
+ 19135 1131f 0F8635FE jbe .L324
+ 19135 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 19136 .loc 2 882 0
+ 19137 11325 F30F6F85 movdqu -2864(%rbp), %xmm0
+ 19137 D0F4FFFF
+ 19138 .LBE4566:
+ 19139 .LBE4565:
+ 19140 .LBE4564:
+ 19141 .LBE4563:
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+ 19142 .loc 2 2185 0
+ 19143 1132d F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 19143 60F4FFFF
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 19144 .loc 2 2188 0
+ 19145 11335 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 19145 60F4FFFF
+ 19146 1133d F30F7F85 movdqu %xmm0, -2944(%rbp)
+ 19146 80F4FFFF
+ 19147 .LBB4589:
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+ 19148 .loc 2 2190 0
+ 19149 11345 F30F6F85 movdqu -2944(%rbp), %xmm0
+ 19149 80F4FFFF
+ 19150 1134d F30F7F85 movdqu %xmm0, -3360(%rbp)
+ 19150 E0F2FFFF
+ 19151 11355 E8000000 call KDbgWriterGet at PLT
+ 19151 00
+ 19152 1135a 4885C0 testq %rax, %rax
+ 19153 1135d 7479 je .L326
+ 19154 1135f BF030000 movl $3, %edi
+ 19154 00
+ 19155 11364 E8000000 call KDbgCondToFlag at PLT
+ 19155 00
+ 19156 11369 4889C6 movq %rax, %rsi
+ 19157 1136c BF100000 movl $16, %edi
+ 19157 00
+
GAS LISTING /tmp/ccjbMjHD.s page 579
+
+
+ 19158 11371 E8000000 call KDbgTestModConds at PLT
+ 19158 00
+ 19159 11376 84C0 testb %al, %al
+ 19160 11378 745E je .L326
+ 19161 1137a 8B85ECF2 movl -3348(%rbp), %eax
+ 19161 FFFF
+ 19162 11380 89C7 movl %eax, %edi
+ 19163 11382 E879ECFE call bswap_32
+ 19163 FF
+ 19164 11387 4189C5 movl %eax, %r13d
+ 19165 1138a 8B85E8F2 movl -3352(%rbp), %eax
+ 19165 FFFF
+ 19166 11390 89C7 movl %eax, %edi
+ 19167 11392 E869ECFE call bswap_32
+ 19167 FF
+ 19168 11397 4189C4 movl %eax, %r12d
+ 19169 1139a 8B85E4F2 movl -3356(%rbp), %eax
+ 19169 FFFF
+ 19170 113a0 89C7 movl %eax, %edi
+ 19171 113a2 E859ECFE call bswap_32
+ 19171 FF
+ 19172 113a7 89C3 movl %eax, %ebx
+ 19173 113a9 8B85E0F2 movl -3360(%rbp), %eax
+ 19173 FFFF
+ 19174 113af 89C7 movl %eax, %edi
+ 19175 113b1 E84AECFE call bswap_32
+ 19175 FF
+ 19176 113b6 4589E9 movl %r13d, %r9d
+ 19177 113b9 4589E0 movl %r12d, %r8d
+ 19178 113bc 89D9 movl %ebx, %ecx
+ 19179 113be 89C2 movl %eax, %edx
+ 19180 113c0 488D3500 leaq .LC15(%rip), %rsi
+ 19180 000000
+ 19181 113c7 488D3D00 leaq .LC1(%rip), %rdi
+ 19181 000000
+ 19182 113ce B8000000 movl $0, %eax
+ 19182 00
+ 19183 113d3 E8000000 call KDbgMsg at PLT
+ 19183 00
+ 19184 .L326:
+ 19185 113d8 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 19185 60F4FFFF
+ 19186 113e0 F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 19186 70F6FFFF
+ 19187 .LBE4589:
+ 19188 .LBB4590:
+ 19189 .LBB4591:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 19190 .loc 2 612 0
+ 19191 113e8 660F6F05 movdqa InvShiftRowTable.7367(%rip), %xmm0
+ 19191 00000000
+ 19192 113f0 F30F6F8D movdqu -2448(%rbp), %xmm1
+ 19192 70F6FFFF
+ 19193 113f8 F30F7F8D movdqu %xmm1, -2416(%rbp)
+ 19193 90F6FFFF
+ 19194 11400 F30F7F85 movdqu %xmm0, -2432(%rbp)
+ 19194 80F6FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 580
+
+
+ 19195 11408 F30F6F85 movdqu -2416(%rbp), %xmm0
+ 19195 90F6FFFF
+ 19196 11410 F30F7F85 movdqu %xmm0, -2384(%rbp)
+ 19196 B0F6FFFF
+ 19197 11418 F30F6F85 movdqu -2432(%rbp), %xmm0
+ 19197 80F6FFFF
+ 19198 11420 F30F7F85 movdqu %xmm0, -2400(%rbp)
+ 19198 A0F6FFFF
+ 19199 .LBB4592:
+ 19200 .LBB4593:
+ 19201 .LBB4594:
+ 19202 .LBB4595:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19203 .loc 3 529 0
+ 19204 11428 F30F6F8D movdqu -2400(%rbp), %xmm1
+ 19204 A0F6FFFF
+ 19205 11430 F30F6F85 movdqu -2384(%rbp), %xmm0
+ 19205 B0F6FFFF
+ 19206 11438 660F3800 pshufb %xmm1, %xmm0
+ 19206 C1
+ 19207 .LBE4595:
+ 19208 .LBE4594:
+ 19209 .LBE4593:
+ 19210 .LBE4592:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 19211 .loc 2 612 0
+ 19212 1143d F30F7F85 movdqu %xmm0, -2448(%rbp)
+ 19212 70F6FFFF
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 19213 .loc 2 613 0
+ 19214 11445 F30F6F85 movdqu -2448(%rbp), %xmm0
+ 19214 70F6FFFF
+ 19215 .LBE4591:
+ 19216 .LBE4590:
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+ 19217 .loc 2 2193 0
+ 19218 1144d F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 19218 60F4FFFF
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 19219 .loc 2 2196 0
+ 19220 11455 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 19220 60F4FFFF
+ 19221 1145d F30F7F85 movdqu %xmm0, -2944(%rbp)
+ 19221 80F4FFFF
+ 19222 .LBB4596:
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+ 19223 .loc 2 2198 0
+ 19224 11465 F30F6F85 movdqu -2944(%rbp), %xmm0
+ 19224 80F4FFFF
+ 19225 1146d F30F7F85 movdqu %xmm0, -3376(%rbp)
+ 19225 D0F2FFFF
+ 19226 11475 E8000000 call KDbgWriterGet at PLT
+ 19226 00
+ 19227 1147a 4885C0 testq %rax, %rax
+ 19228 1147d 7479 je .L328
+ 19229 1147f BF030000 movl $3, %edi
+ 19229 00
+
GAS LISTING /tmp/ccjbMjHD.s page 581
+
+
+ 19230 11484 E8000000 call KDbgCondToFlag at PLT
+ 19230 00
+ 19231 11489 4889C6 movq %rax, %rsi
+ 19232 1148c BF100000 movl $16, %edi
+ 19232 00
+ 19233 11491 E8000000 call KDbgTestModConds at PLT
+ 19233 00
+ 19234 11496 84C0 testb %al, %al
+ 19235 11498 745E je .L328
+ 19236 1149a 8B85DCF2 movl -3364(%rbp), %eax
+ 19236 FFFF
+ 19237 114a0 89C7 movl %eax, %edi
+ 19238 114a2 E859EBFE call bswap_32
+ 19238 FF
+ 19239 114a7 4189C5 movl %eax, %r13d
+ 19240 114aa 8B85D8F2 movl -3368(%rbp), %eax
+ 19240 FFFF
+ 19241 114b0 89C7 movl %eax, %edi
+ 19242 114b2 E849EBFE call bswap_32
+ 19242 FF
+ 19243 114b7 4189C4 movl %eax, %r12d
+ 19244 114ba 8B85D4F2 movl -3372(%rbp), %eax
+ 19244 FFFF
+ 19245 114c0 89C7 movl %eax, %edi
+ 19246 114c2 E839EBFE call bswap_32
+ 19246 FF
+ 19247 114c7 89C3 movl %eax, %ebx
+ 19248 114c9 8B85D0F2 movl -3376(%rbp), %eax
+ 19248 FFFF
+ 19249 114cf 89C7 movl %eax, %edi
+ 19250 114d1 E82AEBFE call bswap_32
+ 19250 FF
+ 19251 114d6 4589E9 movl %r13d, %r9d
+ 19252 114d9 4589E0 movl %r12d, %r8d
+ 19253 114dc 89D9 movl %ebx, %ecx
+ 19254 114de 89C2 movl %eax, %edx
+ 19255 114e0 488D3500 leaq .LC16(%rip), %rsi
+ 19255 000000
+ 19256 114e7 488D3D00 leaq .LC1(%rip), %rdi
+ 19256 000000
+ 19257 114ee B8000000 movl $0, %eax
+ 19257 00
+ 19258 114f3 E8000000 call KDbgMsg at PLT
+ 19258 00
+ 19259 .L328:
+ 19260 114f8 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 19260 60F4FFFF
+ 19261 11500 F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 19261 C0F6FFFF
+ 19262 11508 F30F6F85 movdqu -2368(%rbp), %xmm0
+ 19262 C0F6FFFF
+ 19263 11510 F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 19263 D0F6FFFF
+ 19264 .LBE4596:
+ 19265 .LBB4597:
+ 19266 .LBB4598:
+ 19267 .LBB4599:
+
GAS LISTING /tmp/ccjbMjHD.s page 582
+
+
+ 19268 .LBB4600:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19269 .loc 2 667 0
+ 19270 11518 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 19270 00000000
+ 19271 11520 F30F6F8D movdqu -2352(%rbp), %xmm1
+ 19271 D0F6FFFF
+ 19272 11528 F30F7F8D movdqu %xmm1, -2320(%rbp)
+ 19272 F0F6FFFF
+ 19273 11530 F30F7F85 movdqu %xmm0, -2336(%rbp)
+ 19273 E0F6FFFF
+ 19274 11538 F30F6F85 movdqu -2320(%rbp), %xmm0
+ 19274 F0F6FFFF
+ 19275 11540 F30F7F85 movdqu %xmm0, -2288(%rbp)
+ 19275 10F7FFFF
+ 19276 11548 F30F6F85 movdqu -2336(%rbp), %xmm0
+ 19276 E0F6FFFF
+ 19277 11550 F30F7F85 movdqu %xmm0, -2304(%rbp)
+ 19277 00F7FFFF
+ 19278 .LBB4601:
+ 19279 .LBB4602:
+ 19280 .LBB4603:
+ 19281 .LBB4604:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19282 .loc 3 529 0
+ 19283 11558 F30F6F8D movdqu -2304(%rbp), %xmm1
+ 19283 00F7FFFF
+ 19284 11560 F30F6F85 movdqu -2288(%rbp), %xmm0
+ 19284 10F7FFFF
+ 19285 11568 660F3800 pshufb %xmm1, %xmm0
+ 19285 C1
+ 19286 .LBE4604:
+ 19287 .LBE4603:
+ 19288 .LBE4602:
+ 19289 .LBE4601:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19290 .loc 2 667 0
+ 19291 1156d F30F7F85 movdqu %xmm0, -2352(%rbp)
+ 19291 D0F6FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 19292 .loc 2 668 0
+ 19293 11575 F30F6F85 movdqu -2352(%rbp), %xmm0
+ 19293 D0F6FFFF
+ 19294 .LBE4600:
+ 19295 .LBE4599:
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r1 = AESBCMEMBER(RotBytesLeft) (state);
+ 19296 .loc 2 1106 0
+ 19297 1157d 660F7F85 movdqa %xmm0, -3520(%rbp)
+ 19297 40F2FFFF
+ 19298 11585 660F6F85 movdqa -3520(%rbp), %xmm0
+ 19298 40F2FFFF
+ 19299 1158d F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 19299 20F7FFFF
+ 19300 .LBB4605:
+ 19301 .LBB4606:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19302 .loc 2 667 0
+
GAS LISTING /tmp/ccjbMjHD.s page 583
+
+
+ 19303 11595 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 19303 00000000
+ 19304 1159d F30F6F8D movdqu -2272(%rbp), %xmm1
+ 19304 20F7FFFF
+ 19305 115a5 F30F7F8D movdqu %xmm1, -2240(%rbp)
+ 19305 40F7FFFF
+ 19306 115ad F30F7F85 movdqu %xmm0, -2256(%rbp)
+ 19306 30F7FFFF
+ 19307 115b5 F30F6F85 movdqu -2240(%rbp), %xmm0
+ 19307 40F7FFFF
+ 19308 115bd F30F7F85 movdqu %xmm0, -2208(%rbp)
+ 19308 60F7FFFF
+ 19309 115c5 F30F6F85 movdqu -2256(%rbp), %xmm0
+ 19309 30F7FFFF
+ 19310 115cd F30F7F85 movdqu %xmm0, -2224(%rbp)
+ 19310 50F7FFFF
+ 19311 .LBB4607:
+ 19312 .LBB4608:
+ 19313 .LBB4609:
+ 19314 .LBB4610:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19315 .loc 3 529 0
+ 19316 115d5 F30F6F8D movdqu -2224(%rbp), %xmm1
+ 19316 50F7FFFF
+ 19317 115dd F30F6F85 movdqu -2208(%rbp), %xmm0
+ 19317 60F7FFFF
+ 19318 115e5 660F3800 pshufb %xmm1, %xmm0
+ 19318 C1
+ 19319 .LBE4610:
+ 19320 .LBE4609:
+ 19321 .LBE4608:
+ 19322 .LBE4607:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19323 .loc 2 667 0
+ 19324 115ea F30F7F85 movdqu %xmm0, -2272(%rbp)
+ 19324 20F7FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 19325 .loc 2 668 0
+ 19326 115f2 F30F6F85 movdqu -2272(%rbp), %xmm0
+ 19326 20F7FFFF
+ 19327 .LBE4606:
+ 19328 .LBE4605:
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r2 = AESBCMEMBER(RotBytesLeft) (r1);
+ 19329 .loc 2 1107 0
+ 19330 115fa 660F7F85 movdqa %xmm0, -3536(%rbp)
+ 19330 30F2FFFF
+ 19331 11602 660F6F8D movdqa -3536(%rbp), %xmm1
+ 19331 30F2FFFF
+ 19332 1160a F30F7F8D movdqu %xmm1, -2192(%rbp)
+ 19332 70F7FFFF
+ 19333 .LBB4611:
+ 19334 .LBB4612:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19335 .loc 2 667 0
+ 19336 11612 660F6F05 movdqa ShiftRowTable.7385(%rip), %xmm0
+ 19336 00000000
+ 19337 1161a F30F6F8D movdqu -2192(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 584
+
+
+ 19337 70F7FFFF
+ 19338 11622 F30F7F8D movdqu %xmm1, -2160(%rbp)
+ 19338 90F7FFFF
+ 19339 1162a F30F7F85 movdqu %xmm0, -2176(%rbp)
+ 19339 80F7FFFF
+ 19340 11632 F30F6F85 movdqu -2160(%rbp), %xmm0
+ 19340 90F7FFFF
+ 19341 1163a F30F7F85 movdqu %xmm0, -2128(%rbp)
+ 19341 B0F7FFFF
+ 19342 11642 F30F6F85 movdqu -2176(%rbp), %xmm0
+ 19342 80F7FFFF
+ 19343 1164a F30F7F85 movdqu %xmm0, -2144(%rbp)
+ 19343 A0F7FFFF
+ 19344 .LBB4613:
+ 19345 .LBB4614:
+ 19346 .LBB4615:
+ 19347 .LBB4616:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19348 .loc 3 529 0
+ 19349 11652 F30F6F8D movdqu -2144(%rbp), %xmm1
+ 19349 A0F7FFFF
+ 19350 1165a F30F6F85 movdqu -2128(%rbp), %xmm0
+ 19350 B0F7FFFF
+ 19351 11662 660F3800 pshufb %xmm1, %xmm0
+ 19351 C1
+ 19352 .LBE4616:
+ 19353 .LBE4615:
+ 19354 .LBE4614:
+ 19355 .LBE4613:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19356 .loc 2 667 0
+ 19357 11667 F30F7F85 movdqu %xmm0, -2192(%rbp)
+ 19357 70F7FFFF
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 19358 .loc 2 668 0
+ 19359 1166f F30F6F85 movdqu -2192(%rbp), %xmm0
+ 19359 70F7FFFF
+ 19360 .LBE4612:
+ 19361 .LBE4611:
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** r3 = AESBCMEMBER(RotBytesLeft) (r2);
+ 19362 .loc 2 1108 0
+ 19363 11677 660F7F85 movdqa %xmm0, -3552(%rbp)
+ 19363 20F2FFFF
+ 19364 1167f F30F6F85 movdqu -2368(%rbp), %xmm0
+ 19364 C0F6FFFF
+ 19365 11687 F30F7F85 movdqu %xmm0, -2096(%rbp)
+ 19365 D0F7FFFF
+ 19366 1168f 660F6F85 movdqa -3536(%rbp), %xmm0
+ 19366 30F2FFFF
+ 19367 11697 F30F7F85 movdqu %xmm0, -2112(%rbp)
+ 19367 C0F7FFFF
+ 19368 .LBB4617:
+ 19369 .LBB4618:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19370 .loc 2 178 0
+ 19371 1169f F30F6F85 movdqu -2112(%rbp), %xmm0
+ 19371 C0F7FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 585
+
+
+ 19372 116a7 F30F6F8D movdqu -2096(%rbp), %xmm1
+ 19372 D0F7FFFF
+ 19373 116af 660FEFC1 pxor %xmm1, %xmm0
+ 19374 .LBE4618:
+ 19375 .LBE4617:
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(VecXor) (state, r2);
+ 19376 .loc 2 1110 0
+ 19377 116b3 660F7F85 movdqa %xmm0, -3584(%rbp)
+ 19377 00F2FFFF
+ 19378 116bb F30F6F85 movdqu -2368(%rbp), %xmm0
+ 19378 C0F6FFFF
+ 19379 116c3 F30F7F85 movdqu %xmm0, -2064(%rbp)
+ 19379 F0F7FFFF
+ 19380 116cb 660F6F8D movdqa -3520(%rbp), %xmm1
+ 19380 40F2FFFF
+ 19381 116d3 F30F7F8D movdqu %xmm1, -2080(%rbp)
+ 19381 E0F7FFFF
+ 19382 .LBB4619:
+ 19383 .LBB4620:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19384 .loc 2 178 0
+ 19385 116db F30F6F85 movdqu -2080(%rbp), %xmm0
+ 19385 E0F7FFFF
+ 19386 116e3 F30F6F8D movdqu -2064(%rbp), %xmm1
+ 19386 F0F7FFFF
+ 19387 116eb 660FEFC1 pxor %xmm1, %xmm0
+ 19388 .LBE4620:
+ 19389 .LBE4619:
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(VecXor) (state, r1);
+ 19390 .loc 2 1111 0
+ 19391 116ef 660F7F85 movdqa %xmm0, -3568(%rbp)
+ 19391 10F2FFFF
+ 19392 116f7 660F6F85 movdqa -3536(%rbp), %xmm0
+ 19392 30F2FFFF
+ 19393 116ff F30F7F85 movdqu %xmm0, -2032(%rbp)
+ 19393 10F8FFFF
+ 19394 11707 660F6F8D movdqa -3552(%rbp), %xmm1
+ 19394 20F2FFFF
+ 19395 1170f F30F7F8D movdqu %xmm1, -2048(%rbp)
+ 19395 00F8FFFF
+ 19396 .LBB4621:
+ 19397 .LBB4622:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19398 .loc 2 178 0
+ 19399 11717 F30F6F85 movdqu -2048(%rbp), %xmm0
+ 19399 00F8FFFF
+ 19400 1171f F30F6F8D movdqu -2032(%rbp), %xmm1
+ 19400 10F8FFFF
+ 19401 11727 660FEFC1 pxor %xmm1, %xmm0
+ 19402 .LBE4622:
+ 19403 .LBE4621:
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (r2, r3);
+ 19404 .loc 2 1112 0
+ 19405 1172b 660F7F85 movdqa %xmm0, -3600(%rbp)
+ 19405 F0F1FFFF
+ 19406 11733 660F6F85 movdqa -3600(%rbp), %xmm0
+ 19406 F0F1FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 586
+
+
+ 19407 1173b F30F7F85 movdqu %xmm0, -2000(%rbp)
+ 19407 30F8FFFF
+ 19408 11743 660F6F8D movdqa -3520(%rbp), %xmm1
+ 19408 40F2FFFF
+ 19409 1174b F30F7F8D movdqu %xmm1, -2016(%rbp)
+ 19409 20F8FFFF
+ 19410 .LBB4623:
+ 19411 .LBB4624:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19412 .loc 2 178 0
+ 19413 11753 F30F6F85 movdqu -2016(%rbp), %xmm0
+ 19413 20F8FFFF
+ 19414 1175b F30F6F8D movdqu -2000(%rbp), %xmm1
+ 19414 30F8FFFF
+ 19415 11763 660FEFC1 pxor %xmm1, %xmm0
+ 19416 .LBE4624:
+ 19417 .LBE4623:
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (f8, r1);
+ 19418 .loc 2 1113 0
+ 19419 11767 F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 19419 C0F6FFFF
+ 19420 1176f 660F6F85 movdqa -3600(%rbp), %xmm0
+ 19420 F0F1FFFF
+ 19421 11777 F30F7F85 movdqu %xmm0, -1968(%rbp)
+ 19421 50F8FFFF
+ 19422 1177f 660F6F8D movdqa -3568(%rbp), %xmm1
+ 19422 10F2FFFF
+ 19423 11787 F30F7F8D movdqu %xmm1, -1984(%rbp)
+ 19423 40F8FFFF
+ 19424 .LBB4625:
+ 19425 .LBB4626:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19426 .loc 2 178 0
+ 19427 1178f F30F6F85 movdqu -1984(%rbp), %xmm0
+ 19427 40F8FFFF
+ 19428 11797 F30F6F8D movdqu -1968(%rbp), %xmm1
+ 19428 50F8FFFF
+ 19429 1179f 660FEFC1 pxor %xmm1, %xmm0
+ 19430 .LBE4626:
+ 19431 .LBE4625:
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(VecXor) (f8, f2);
+ 19432 .loc 2 1114 0
+ 19433 117a3 660F7F85 movdqa %xmm0, -3600(%rbp)
+ 19433 F0F1FFFF
+ 19434 117ab 660F6F85 movdqa -3568(%rbp), %xmm0
+ 19434 10F2FFFF
+ 19435 117b3 F30F7F85 movdqu %xmm0, -1936(%rbp)
+ 19435 70F8FFFF
+ 19436 .LBB4627:
+ 19437 .LBB4628:
+ 19438 .LBB4629:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 19439 .loc 2 933 0
+ 19440 117bb F30F6F85 movdqu -1936(%rbp), %xmm0
+ 19440 70F8FFFF
+ 19441 117c3 F30F7F85 movdqu %xmm0, -3296(%rbp)
+ 19441 20F3FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 587
+
+
+ 19442 117cb E8000000 call KDbgWriterGet at PLT
+ 19442 00
+ 19443 117d0 4885C0 testq %rax, %rax
+ 19444 117d3 7479 je .L330
+ 19445 117d5 BF010000 movl $1, %edi
+ 19445 00
+ 19446 117da E8000000 call KDbgCondToFlag at PLT
+ 19446 00
+ 19447 117df 4889C6 movq %rax, %rsi
+ 19448 117e2 BF100000 movl $16, %edi
+ 19448 00
+ 19449 117e7 E8000000 call KDbgTestModConds at PLT
+ 19449 00
+ 19450 117ec 84C0 testb %al, %al
+ 19451 117ee 745E je .L330
+ 19452 117f0 8B852CF3 movl -3284(%rbp), %eax
+ 19452 FFFF
+ 19453 117f6 89C7 movl %eax, %edi
+ 19454 117f8 E803E8FE call bswap_32
+ 19454 FF
+ 19455 117fd 4189C5 movl %eax, %r13d
+ 19456 11800 8B8528F3 movl -3288(%rbp), %eax
+ 19456 FFFF
+ 19457 11806 89C7 movl %eax, %edi
+ 19458 11808 E8F3E7FE call bswap_32
+ 19458 FF
+ 19459 1180d 4189C4 movl %eax, %r12d
+ 19460 11810 8B8524F3 movl -3292(%rbp), %eax
+ 19460 FFFF
+ 19461 11816 89C7 movl %eax, %edi
+ 19462 11818 E8E3E7FE call bswap_32
+ 19462 FF
+ 19463 1181d 89C3 movl %eax, %ebx
+ 19464 1181f 8B8520F3 movl -3296(%rbp), %eax
+ 19464 FFFF
+ 19465 11825 89C7 movl %eax, %edi
+ 19466 11827 E8D4E7FE call bswap_32
+ 19466 FF
+ 19467 1182c 4589E9 movl %r13d, %r9d
+ 19468 1182f 4589E0 movl %r12d, %r8d
+ 19469 11832 89D9 movl %ebx, %ecx
+ 19470 11834 89C2 movl %eax, %edx
+ 19471 11836 488D3500 leaq .LC5(%rip), %rsi
+ 19471 000000
+ 19472 1183d 488D3D00 leaq .LC1(%rip), %rdi
+ 19472 000000
+ 19473 11844 B8000000 movl $0, %eax
+ 19473 00
+ 19474 11849 E8000000 call KDbgMsg at PLT
+ 19474 00
+ 19475 .L330:
+ 19476 .LBE4629:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 19477 .loc 2 934 0
+ 19478 1184e B8070000 movl $7, %eax
+ 19478 00
+ 19479 11853 F30F6F85 movdqu -1936(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 588
+
+
+ 19479 70F8FFFF
+ 19480 1185b F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 19480 B0F8FFFF
+ 19481 11863 8985ACF8 movl %eax, -1876(%rbp)
+ 19481 FFFF
+ 19482 11869 F30F6F85 movdqu -1872(%rbp), %xmm0
+ 19482 B0F8FFFF
+ 19483 11871 F30F7F85 movdqu %xmm0, -1840(%rbp)
+ 19483 D0F8FFFF
+ 19484 11879 8B85ACF8 movl -1876(%rbp), %eax
+ 19484 FFFF
+ 19485 1187f 8985CCF8 movl %eax, -1844(%rbp)
+ 19485 FFFF
+ 19486 .LBB4630:
+ 19487 .LBB4631:
+ 19488 .LBB4632:
+ 19489 .LBB4633:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 19490 .loc 3 433 0
+ 19491 11885 F30F6F85 movdqu -1840(%rbp), %xmm0
+ 19491 D0F8FFFF
+ 19492 1188d 8B85CCF8 movl -1844(%rbp), %eax
+ 19492 FFFF
+ 19493 11893 8985ECF1 movl %eax, -3604(%rbp)
+ 19493 FFFF
+ 19494 11899 660F6E8D movd -3604(%rbp), %xmm1
+ 19494 ECF1FFFF
+ 19495 118a1 660FD2C1 psrld %xmm1, %xmm0
+ 19496 .LBE4633:
+ 19497 .LBE4632:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 19498 .loc 2 488 0
+ 19499 118a5 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 19499 B0F8FFFF
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 19500 .loc 2 489 0
+ 19501 118ad B8080000 movl $8, %eax
+ 19501 00
+ 19502 118b2 83BDACF8 cmpl $8, -1876(%rbp)
+ 19502 FFFF08
+ 19503 118b9 0F4E85AC cmovle -1876(%rbp), %eax
+ 19503 F8FFFF
+ 19504 118c0 4898 cltq
+ 19505 118c2 4889C2 movq %rax, %rdx
+ 19506 118c5 48C1E204 salq $4, %rdx
+ 19507 118c9 488D0500 leaq sr_mask.7327(%rip), %rax
+ 19507 000000
+ 19508 118d0 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 19508 02
+ 19509 118d5 F30F6F8D movdqu -1872(%rbp), %xmm1
+ 19509 B0F8FFFF
+ 19510 118dd F30F7F8D movdqu %xmm1, -1808(%rbp)
+ 19510 F0F8FFFF
+ 19511 118e5 F30F7F85 movdqu %xmm0, -1824(%rbp)
+ 19511 E0F8FFFF
+ 19512 .LBB4634:
+ 19513 .LBB4635:
+
GAS LISTING /tmp/ccjbMjHD.s page 589
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 19514 .loc 2 206 0
+ 19515 118ed F30F6F85 movdqu -1824(%rbp), %xmm0
+ 19515 E0F8FFFF
+ 19516 118f5 F30F6F8D movdqu -1808(%rbp), %xmm1
+ 19516 F0F8FFFF
+ 19517 118fd 660FDBC1 pand %xmm1, %xmm0
+ 19518 .LBE4635:
+ 19519 .LBE4634:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 19520 .loc 2 489 0
+ 19521 11901 F30F7F85 movdqu %xmm0, -1872(%rbp)
+ 19521 B0F8FFFF
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 19522 .loc 2 490 0
+ 19523 11909 F30F6F85 movdqu -1872(%rbp), %xmm0
+ 19523 B0F8FFFF
+ 19524 .LBE4631:
+ 19525 .LBE4630:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 19526 .loc 2 934 0
+ 19527 11911 F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 19527 80F8FFFF
+ 19528 .LBB4636:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 19529 .loc 2 935 0
+ 19530 11919 F30F6F85 movdqu -1920(%rbp), %xmm0
+ 19530 80F8FFFF
+ 19531 11921 F30F7F85 movdqu %xmm0, -3312(%rbp)
+ 19531 10F3FFFF
+ 19532 11929 E8000000 call KDbgWriterGet at PLT
+ 19532 00
+ 19533 1192e 4885C0 testq %rax, %rax
+ 19534 11931 7479 je .L332
+ 19535 11933 BF010000 movl $1, %edi
+ 19535 00
+ 19536 11938 E8000000 call KDbgCondToFlag at PLT
+ 19536 00
+ 19537 1193d 4889C6 movq %rax, %rsi
+ 19538 11940 BF100000 movl $16, %edi
+ 19538 00
+ 19539 11945 E8000000 call KDbgTestModConds at PLT
+ 19539 00
+ 19540 1194a 84C0 testb %al, %al
+ 19541 1194c 745E je .L332
+ 19542 1194e 8B851CF3 movl -3300(%rbp), %eax
+ 19542 FFFF
+ 19543 11954 89C7 movl %eax, %edi
+ 19544 11956 E8A5E6FE call bswap_32
+ 19544 FF
+ 19545 1195b 4189C5 movl %eax, %r13d
+ 19546 1195e 8B8518F3 movl -3304(%rbp), %eax
+ 19546 FFFF
+ 19547 11964 89C7 movl %eax, %edi
+ 19548 11966 E895E6FE call bswap_32
+ 19548 FF
+ 19549 1196b 4189C4 movl %eax, %r12d
+
GAS LISTING /tmp/ccjbMjHD.s page 590
+
+
+ 19550 1196e 8B8514F3 movl -3308(%rbp), %eax
+ 19550 FFFF
+ 19551 11974 89C7 movl %eax, %edi
+ 19552 11976 E885E6FE call bswap_32
+ 19552 FF
+ 19553 1197b 89C3 movl %eax, %ebx
+ 19554 1197d 8B8510F3 movl -3312(%rbp), %eax
+ 19554 FFFF
+ 19555 11983 89C7 movl %eax, %edi
+ 19556 11985 E876E6FE call bswap_32
+ 19556 FF
+ 19557 1198a 4589E9 movl %r13d, %r9d
+ 19558 1198d 4589E0 movl %r12d, %r8d
+ 19559 11990 89D9 movl %ebx, %ecx
+ 19560 11992 89C2 movl %eax, %edx
+ 19561 11994 488D3500 leaq .LC6(%rip), %rsi
+ 19561 000000
+ 19562 1199b 488D3D00 leaq .LC1(%rip), %rdi
+ 19562 000000
+ 19563 119a2 B8000000 movl $0, %eax
+ 19563 00
+ 19564 119a7 E8000000 call KDbgMsg at PLT
+ 19564 00
+ 19565 .L332:
+ 19566 119ac F30F6F85 movdqu -1936(%rbp), %xmm0
+ 19566 70F8FFFF
+ 19567 119b4 F30F7F85 movdqu %xmm0, -1776(%rbp)
+ 19567 10F9FFFF
+ 19568 .LBE4636:
+ 19569 .LBB4637:
+ 19570 .LBB4638:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 19571 .loc 2 426 0
+ 19572 119bc F30F6F85 movdqu -1776(%rbp), %xmm0
+ 19572 10F9FFFF
+ 19573 119c4 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 19573 20F9FFFF
+ 19574 119cc F30F6F85 movdqu -1760(%rbp), %xmm0
+ 19574 20F9FFFF
+ 19575 119d4 F30F7F85 movdqu %xmm0, -1728(%rbp)
+ 19575 40F9FFFF
+ 19576 .LBB4639:
+ 19577 .LBB4640:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 19578 .loc 3 416 0
+ 19579 119dc F30F6F85 movdqu -1728(%rbp), %xmm0
+ 19579 40F9FFFF
+ 19580 119e4 660F72F0 pslld $1, %xmm0
+ 19580 01
+ 19581 .LBE4640:
+ 19582 .LBE4639:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 19583 .loc 2 433 0
+ 19584 119e9 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 19584 20F9FFFF
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 19585 .loc 2 435 0
+
GAS LISTING /tmp/ccjbMjHD.s page 591
+
+
+ 19586 119f1 B8010000 movl $1, %eax
+ 19586 00
+ 19587 119f6 4898 cltq
+ 19588 119f8 4889C2 movq %rax, %rdx
+ 19589 119fb 48C1E204 salq $4, %rdx
+ 19590 119ff 488D0500 leaq sl_mask.7310(%rip), %rax
+ 19590 000000
+ 19591 11a06 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 19591 02
+ 19592 11a0b F30F6F8D movdqu -1760(%rbp), %xmm1
+ 19592 20F9FFFF
+ 19593 11a13 F30F7F8D movdqu %xmm1, -1696(%rbp)
+ 19593 60F9FFFF
+ 19594 11a1b F30F7F85 movdqu %xmm0, -1712(%rbp)
+ 19594 50F9FFFF
+ 19595 .LBB4641:
+ 19596 .LBB4642:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 19597 .loc 2 206 0
+ 19598 11a23 F30F6F85 movdqu -1712(%rbp), %xmm0
+ 19598 50F9FFFF
+ 19599 11a2b F30F6F8D movdqu -1696(%rbp), %xmm1
+ 19599 60F9FFFF
+ 19600 11a33 660FDBC1 pand %xmm1, %xmm0
+ 19601 .LBE4642:
+ 19602 .LBE4641:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 19603 .loc 2 435 0
+ 19604 11a37 F30F7F85 movdqu %xmm0, -1760(%rbp)
+ 19604 20F9FFFF
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 19605 .loc 2 437 0
+ 19606 11a3f F30F6F85 movdqu -1760(%rbp), %xmm0
+ 19606 20F9FFFF
+ 19607 .LBE4638:
+ 19608 .LBE4637:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 19609 .loc 2 936 0
+ 19610 11a47 F30F7F85 movdqu %xmm0, -1904(%rbp)
+ 19610 90F8FFFF
+ 19611 .LBB4643:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 19612 .loc 2 937 0
+ 19613 11a4f F30F6F85 movdqu -1904(%rbp), %xmm0
+ 19613 90F8FFFF
+ 19614 11a57 F30F7F85 movdqu %xmm0, -3328(%rbp)
+ 19614 00F3FFFF
+ 19615 11a5f E8000000 call KDbgWriterGet at PLT
+ 19615 00
+ 19616 11a64 4885C0 testq %rax, %rax
+ 19617 11a67 7479 je .L334
+ 19618 11a69 BF010000 movl $1, %edi
+ 19618 00
+ 19619 11a6e E8000000 call KDbgCondToFlag at PLT
+ 19619 00
+ 19620 11a73 4889C6 movq %rax, %rsi
+ 19621 11a76 BF100000 movl $16, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 592
+
+
+ 19621 00
+ 19622 11a7b E8000000 call KDbgTestModConds at PLT
+ 19622 00
+ 19623 11a80 84C0 testb %al, %al
+ 19624 11a82 745E je .L334
+ 19625 11a84 8B850CF3 movl -3316(%rbp), %eax
+ 19625 FFFF
+ 19626 11a8a 89C7 movl %eax, %edi
+ 19627 11a8c E86FE5FE call bswap_32
+ 19627 FF
+ 19628 11a91 4189C5 movl %eax, %r13d
+ 19629 11a94 8B8508F3 movl -3320(%rbp), %eax
+ 19629 FFFF
+ 19630 11a9a 89C7 movl %eax, %edi
+ 19631 11a9c E85FE5FE call bswap_32
+ 19631 FF
+ 19632 11aa1 4189C4 movl %eax, %r12d
+ 19633 11aa4 8B8504F3 movl -3324(%rbp), %eax
+ 19633 FFFF
+ 19634 11aaa 89C7 movl %eax, %edi
+ 19635 11aac E84FE5FE call bswap_32
+ 19635 FF
+ 19636 11ab1 89C3 movl %eax, %ebx
+ 19637 11ab3 8B8500F3 movl -3328(%rbp), %eax
+ 19637 FFFF
+ 19638 11ab9 89C7 movl %eax, %edi
+ 19639 11abb E840E5FE call bswap_32
+ 19639 FF
+ 19640 11ac0 4589E9 movl %r13d, %r9d
+ 19641 11ac3 4589E0 movl %r12d, %r8d
+ 19642 11ac6 89D9 movl %ebx, %ecx
+ 19643 11ac8 89C2 movl %eax, %edx
+ 19644 11aca 488D3500 leaq .LC7(%rip), %rsi
+ 19644 000000
+ 19645 11ad1 488D3D00 leaq .LC1(%rip), %rdi
+ 19645 000000
+ 19646 11ad8 B8000000 movl $0, %eax
+ 19646 00
+ 19647 11add E8000000 call KDbgMsg at PLT
+ 19647 00
+ 19648 .L334:
+ 19649 .LBE4643:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 19650 .loc 2 938 0
+ 19651 11ae2 660F6F05 movdqa FF_tab(%rip), %xmm0
+ 19651 00000000
+ 19652 11aea F30F7F85 movdqu %xmm0, -1664(%rbp)
+ 19652 80F9FFFF
+ 19653 11af2 F30F6F85 movdqu -1920(%rbp), %xmm0
+ 19653 80F8FFFF
+ 19654 11afa F30F7F85 movdqu %xmm0, -1680(%rbp)
+ 19654 70F9FFFF
+ 19655 11b02 F30F6F85 movdqu -1664(%rbp), %xmm0
+ 19655 80F9FFFF
+ 19656 11b0a F30F7F85 movdqu %xmm0, -1632(%rbp)
+ 19656 A0F9FFFF
+ 19657 11b12 F30F6F85 movdqu -1680(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 593
+
+
+ 19657 70F9FFFF
+ 19658 11b1a F30F7F85 movdqu %xmm0, -1648(%rbp)
+ 19658 90F9FFFF
+ 19659 .LBB4644:
+ 19660 .LBB4645:
+ 19661 .LBB4646:
+ 19662 .LBB4647:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19663 .loc 3 529 0
+ 19664 11b22 F30F6F8D movdqu -1648(%rbp), %xmm1
+ 19664 90F9FFFF
+ 19665 11b2a F30F6F85 movdqu -1632(%rbp), %xmm0
+ 19665 A0F9FFFF
+ 19666 11b32 660F3800 pshufb %xmm1, %xmm0
+ 19666 C1
+ 19667 .LBE4647:
+ 19668 .LBE4646:
+ 19669 .LBE4645:
+ 19670 .LBE4644:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 19671 .loc 2 938 0
+ 19672 11b37 F30F7F85 movdqu %xmm0, -1920(%rbp)
+ 19672 80F8FFFF
+ 19673 11b3f F30F6F85 movdqu -1904(%rbp), %xmm0
+ 19673 90F8FFFF
+ 19674 11b47 F30F7F85 movdqu %xmm0, -1600(%rbp)
+ 19674 C0F9FFFF
+ 19675 11b4f F30F6F85 movdqu -1920(%rbp), %xmm0
+ 19675 80F8FFFF
+ 19676 11b57 F30F7F85 movdqu %xmm0, -1616(%rbp)
+ 19676 B0F9FFFF
+ 19677 .LBB4648:
+ 19678 .LBB4649:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19679 .loc 2 178 0
+ 19680 11b5f F30F6F85 movdqu -1616(%rbp), %xmm0
+ 19680 B0F9FFFF
+ 19681 11b67 F30F6F8D movdqu -1600(%rbp), %xmm1
+ 19681 C0F9FFFF
+ 19682 11b6f 660FEFC1 pxor %xmm1, %xmm0
+ 19683 .LBE4649:
+ 19684 .LBE4648:
+ 19685 .LBE4628:
+ 19686 .LBE4627:
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f2 = AESBCMEMBER(FF_mul) (f2,1);
+ 19687 .loc 2 1118 0
+ 19688 11b73 660F7F85 movdqa %xmm0, -3568(%rbp)
+ 19688 10F2FFFF
+ 19689 11b7b 660F6F85 movdqa -3584(%rbp), %xmm0
+ 19689 00F2FFFF
+ 19690 11b83 F30F7F85 movdqu %xmm0, -1568(%rbp)
+ 19690 E0F9FFFF
+ 19691 .LBB4650:
+ 19692 .LBB4651:
+ 19693 .LBB4652:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 19694 .loc 2 933 0
+
GAS LISTING /tmp/ccjbMjHD.s page 594
+
+
+ 19695 11b8b F30F6F85 movdqu -1568(%rbp), %xmm0
+ 19695 E0F9FFFF
+ 19696 11b93 F30F7F85 movdqu %xmm0, -3248(%rbp)
+ 19696 50F3FFFF
+ 19697 11b9b E8000000 call KDbgWriterGet at PLT
+ 19697 00
+ 19698 11ba0 4885C0 testq %rax, %rax
+ 19699 11ba3 7479 je .L336
+ 19700 11ba5 BF010000 movl $1, %edi
+ 19700 00
+ 19701 11baa E8000000 call KDbgCondToFlag at PLT
+ 19701 00
+ 19702 11baf 4889C6 movq %rax, %rsi
+ 19703 11bb2 BF100000 movl $16, %edi
+ 19703 00
+ 19704 11bb7 E8000000 call KDbgTestModConds at PLT
+ 19704 00
+ 19705 11bbc 84C0 testb %al, %al
+ 19706 11bbe 745E je .L336
+ 19707 11bc0 8B855CF3 movl -3236(%rbp), %eax
+ 19707 FFFF
+ 19708 11bc6 89C7 movl %eax, %edi
+ 19709 11bc8 E833E4FE call bswap_32
+ 19709 FF
+ 19710 11bcd 4189C5 movl %eax, %r13d
+ 19711 11bd0 8B8558F3 movl -3240(%rbp), %eax
+ 19711 FFFF
+ 19712 11bd6 89C7 movl %eax, %edi
+ 19713 11bd8 E823E4FE call bswap_32
+ 19713 FF
+ 19714 11bdd 4189C4 movl %eax, %r12d
+ 19715 11be0 8B8554F3 movl -3244(%rbp), %eax
+ 19715 FFFF
+ 19716 11be6 89C7 movl %eax, %edi
+ 19717 11be8 E813E4FE call bswap_32
+ 19717 FF
+ 19718 11bed 89C3 movl %eax, %ebx
+ 19719 11bef 8B8550F3 movl -3248(%rbp), %eax
+ 19719 FFFF
+ 19720 11bf5 89C7 movl %eax, %edi
+ 19721 11bf7 E804E4FE call bswap_32
+ 19721 FF
+ 19722 11bfc 4589E9 movl %r13d, %r9d
+ 19723 11bff 4589E0 movl %r12d, %r8d
+ 19724 11c02 89D9 movl %ebx, %ecx
+ 19725 11c04 89C2 movl %eax, %edx
+ 19726 11c06 488D3500 leaq .LC5(%rip), %rsi
+ 19726 000000
+ 19727 11c0d 488D3D00 leaq .LC1(%rip), %rdi
+ 19727 000000
+ 19728 11c14 B8000000 movl $0, %eax
+ 19728 00
+ 19729 11c19 E8000000 call KDbgMsg at PLT
+ 19729 00
+ 19730 .L336:
+ 19731 .LBE4652:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+
GAS LISTING /tmp/ccjbMjHD.s page 595
+
+
+ 19732 .loc 2 934 0
+ 19733 11c1e B8060000 movl $6, %eax
+ 19733 00
+ 19734 11c23 F30F6F85 movdqu -1568(%rbp), %xmm0
+ 19734 E0F9FFFF
+ 19735 11c2b F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 19735 20FAFFFF
+ 19736 11c33 89851CFA movl %eax, -1508(%rbp)
+ 19736 FFFF
+ 19737 11c39 F30F6F85 movdqu -1504(%rbp), %xmm0
+ 19737 20FAFFFF
+ 19738 11c41 F30F7F85 movdqu %xmm0, -1472(%rbp)
+ 19738 40FAFFFF
+ 19739 11c49 8B851CFA movl -1508(%rbp), %eax
+ 19739 FFFF
+ 19740 11c4f 89853CFA movl %eax, -1476(%rbp)
+ 19740 FFFF
+ 19741 .LBB4653:
+ 19742 .LBB4654:
+ 19743 .LBB4655:
+ 19744 .LBB4656:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 19745 .loc 3 433 0
+ 19746 11c55 F30F6F85 movdqu -1472(%rbp), %xmm0
+ 19746 40FAFFFF
+ 19747 11c5d 8B853CFA movl -1476(%rbp), %eax
+ 19747 FFFF
+ 19748 11c63 8985E8F1 movl %eax, -3608(%rbp)
+ 19748 FFFF
+ 19749 11c69 660F6E8D movd -3608(%rbp), %xmm1
+ 19749 E8F1FFFF
+ 19750 11c71 660FD2C1 psrld %xmm1, %xmm0
+ 19751 .LBE4656:
+ 19752 .LBE4655:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 19753 .loc 2 488 0
+ 19754 11c75 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 19754 20FAFFFF
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 19755 .loc 2 489 0
+ 19756 11c7d B8080000 movl $8, %eax
+ 19756 00
+ 19757 11c82 83BD1CFA cmpl $8, -1508(%rbp)
+ 19757 FFFF08
+ 19758 11c89 0F4E851C cmovle -1508(%rbp), %eax
+ 19758 FAFFFF
+ 19759 11c90 4898 cltq
+ 19760 11c92 4889C2 movq %rax, %rdx
+ 19761 11c95 48C1E204 salq $4, %rdx
+ 19762 11c99 488D0500 leaq sr_mask.7327(%rip), %rax
+ 19762 000000
+ 19763 11ca0 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 19763 02
+ 19764 11ca5 F30F6F8D movdqu -1504(%rbp), %xmm1
+ 19764 20FAFFFF
+ 19765 11cad F30F7F8D movdqu %xmm1, -1440(%rbp)
+ 19765 60FAFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 596
+
+
+ 19766 11cb5 F30F7F85 movdqu %xmm0, -1456(%rbp)
+ 19766 50FAFFFF
+ 19767 .LBB4657:
+ 19768 .LBB4658:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 19769 .loc 2 206 0
+ 19770 11cbd F30F6F85 movdqu -1456(%rbp), %xmm0
+ 19770 50FAFFFF
+ 19771 11cc5 F30F6F8D movdqu -1440(%rbp), %xmm1
+ 19771 60FAFFFF
+ 19772 11ccd 660FDBC1 pand %xmm1, %xmm0
+ 19773 .LBE4658:
+ 19774 .LBE4657:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 19775 .loc 2 489 0
+ 19776 11cd1 F30F7F85 movdqu %xmm0, -1504(%rbp)
+ 19776 20FAFFFF
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 19777 .loc 2 490 0
+ 19778 11cd9 F30F6F85 movdqu -1504(%rbp), %xmm0
+ 19778 20FAFFFF
+ 19779 .LBE4654:
+ 19780 .LBE4653:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 19781 .loc 2 934 0
+ 19782 11ce1 F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 19782 F0F9FFFF
+ 19783 .LBB4659:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 19784 .loc 2 935 0
+ 19785 11ce9 F30F6F85 movdqu -1552(%rbp), %xmm0
+ 19785 F0F9FFFF
+ 19786 11cf1 F30F7F85 movdqu %xmm0, -3264(%rbp)
+ 19786 40F3FFFF
+ 19787 11cf9 E8000000 call KDbgWriterGet at PLT
+ 19787 00
+ 19788 11cfe 4885C0 testq %rax, %rax
+ 19789 11d01 7479 je .L338
+ 19790 11d03 BF010000 movl $1, %edi
+ 19790 00
+ 19791 11d08 E8000000 call KDbgCondToFlag at PLT
+ 19791 00
+ 19792 11d0d 4889C6 movq %rax, %rsi
+ 19793 11d10 BF100000 movl $16, %edi
+ 19793 00
+ 19794 11d15 E8000000 call KDbgTestModConds at PLT
+ 19794 00
+ 19795 11d1a 84C0 testb %al, %al
+ 19796 11d1c 745E je .L338
+ 19797 11d1e 8B854CF3 movl -3252(%rbp), %eax
+ 19797 FFFF
+ 19798 11d24 89C7 movl %eax, %edi
+ 19799 11d26 E8D5E2FE call bswap_32
+ 19799 FF
+ 19800 11d2b 4189C5 movl %eax, %r13d
+ 19801 11d2e 8B8548F3 movl -3256(%rbp), %eax
+ 19801 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 597
+
+
+ 19802 11d34 89C7 movl %eax, %edi
+ 19803 11d36 E8C5E2FE call bswap_32
+ 19803 FF
+ 19804 11d3b 4189C4 movl %eax, %r12d
+ 19805 11d3e 8B8544F3 movl -3260(%rbp), %eax
+ 19805 FFFF
+ 19806 11d44 89C7 movl %eax, %edi
+ 19807 11d46 E8B5E2FE call bswap_32
+ 19807 FF
+ 19808 11d4b 89C3 movl %eax, %ebx
+ 19809 11d4d 8B8540F3 movl -3264(%rbp), %eax
+ 19809 FFFF
+ 19810 11d53 89C7 movl %eax, %edi
+ 19811 11d55 E8A6E2FE call bswap_32
+ 19811 FF
+ 19812 11d5a 4589E9 movl %r13d, %r9d
+ 19813 11d5d 4589E0 movl %r12d, %r8d
+ 19814 11d60 89D9 movl %ebx, %ecx
+ 19815 11d62 89C2 movl %eax, %edx
+ 19816 11d64 488D3500 leaq .LC6(%rip), %rsi
+ 19816 000000
+ 19817 11d6b 488D3D00 leaq .LC1(%rip), %rdi
+ 19817 000000
+ 19818 11d72 B8000000 movl $0, %eax
+ 19818 00
+ 19819 11d77 E8000000 call KDbgMsg at PLT
+ 19819 00
+ 19820 .L338:
+ 19821 11d7c F30F6F85 movdqu -1568(%rbp), %xmm0
+ 19821 E0F9FFFF
+ 19822 11d84 F30F7F85 movdqu %xmm0, -1408(%rbp)
+ 19822 80FAFFFF
+ 19823 .LBE4659:
+ 19824 .LBB4660:
+ 19825 .LBB4661:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 19826 .loc 2 426 0
+ 19827 11d8c F30F6F85 movdqu -1408(%rbp), %xmm0
+ 19827 80FAFFFF
+ 19828 11d94 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 19828 90FAFFFF
+ 19829 11d9c F30F6F85 movdqu -1392(%rbp), %xmm0
+ 19829 90FAFFFF
+ 19830 11da4 F30F7F85 movdqu %xmm0, -1360(%rbp)
+ 19830 B0FAFFFF
+ 19831 .LBB4662:
+ 19832 .LBB4663:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 19833 .loc 3 416 0
+ 19834 11dac F30F6F85 movdqu -1360(%rbp), %xmm0
+ 19834 B0FAFFFF
+ 19835 11db4 660F72F0 pslld $2, %xmm0
+ 19835 02
+ 19836 .LBE4663:
+ 19837 .LBE4662:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 19838 .loc 2 433 0
+
GAS LISTING /tmp/ccjbMjHD.s page 598
+
+
+ 19839 11db9 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 19839 90FAFFFF
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 19840 .loc 2 435 0
+ 19841 11dc1 B8020000 movl $2, %eax
+ 19841 00
+ 19842 11dc6 4898 cltq
+ 19843 11dc8 4889C2 movq %rax, %rdx
+ 19844 11dcb 48C1E204 salq $4, %rdx
+ 19845 11dcf 488D0500 leaq sl_mask.7310(%rip), %rax
+ 19845 000000
+ 19846 11dd6 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 19846 02
+ 19847 11ddb F30F6F8D movdqu -1392(%rbp), %xmm1
+ 19847 90FAFFFF
+ 19848 11de3 F30F7F8D movdqu %xmm1, -1328(%rbp)
+ 19848 D0FAFFFF
+ 19849 11deb F30F7F85 movdqu %xmm0, -1344(%rbp)
+ 19849 C0FAFFFF
+ 19850 .LBB4664:
+ 19851 .LBB4665:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 19852 .loc 2 206 0
+ 19853 11df3 F30F6F85 movdqu -1344(%rbp), %xmm0
+ 19853 C0FAFFFF
+ 19854 11dfb F30F6F8D movdqu -1328(%rbp), %xmm1
+ 19854 D0FAFFFF
+ 19855 11e03 660FDBC1 pand %xmm1, %xmm0
+ 19856 .LBE4665:
+ 19857 .LBE4664:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 19858 .loc 2 435 0
+ 19859 11e07 F30F7F85 movdqu %xmm0, -1392(%rbp)
+ 19859 90FAFFFF
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 19860 .loc 2 437 0
+ 19861 11e0f F30F6F85 movdqu -1392(%rbp), %xmm0
+ 19861 90FAFFFF
+ 19862 .LBE4661:
+ 19863 .LBE4660:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 19864 .loc 2 936 0
+ 19865 11e17 F30F7F85 movdqu %xmm0, -1536(%rbp)
+ 19865 00FAFFFF
+ 19866 .LBB4666:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 19867 .loc 2 937 0
+ 19868 11e1f F30F6F85 movdqu -1536(%rbp), %xmm0
+ 19868 00FAFFFF
+ 19869 11e27 F30F7F85 movdqu %xmm0, -3280(%rbp)
+ 19869 30F3FFFF
+ 19870 11e2f E8000000 call KDbgWriterGet at PLT
+ 19870 00
+ 19871 11e34 4885C0 testq %rax, %rax
+ 19872 11e37 7479 je .L340
+ 19873 11e39 BF010000 movl $1, %edi
+ 19873 00
+
GAS LISTING /tmp/ccjbMjHD.s page 599
+
+
+ 19874 11e3e E8000000 call KDbgCondToFlag at PLT
+ 19874 00
+ 19875 11e43 4889C6 movq %rax, %rsi
+ 19876 11e46 BF100000 movl $16, %edi
+ 19876 00
+ 19877 11e4b E8000000 call KDbgTestModConds at PLT
+ 19877 00
+ 19878 11e50 84C0 testb %al, %al
+ 19879 11e52 745E je .L340
+ 19880 11e54 8B853CF3 movl -3268(%rbp), %eax
+ 19880 FFFF
+ 19881 11e5a 89C7 movl %eax, %edi
+ 19882 11e5c E89FE1FE call bswap_32
+ 19882 FF
+ 19883 11e61 4189C5 movl %eax, %r13d
+ 19884 11e64 8B8538F3 movl -3272(%rbp), %eax
+ 19884 FFFF
+ 19885 11e6a 89C7 movl %eax, %edi
+ 19886 11e6c E88FE1FE call bswap_32
+ 19886 FF
+ 19887 11e71 4189C4 movl %eax, %r12d
+ 19888 11e74 8B8534F3 movl -3276(%rbp), %eax
+ 19888 FFFF
+ 19889 11e7a 89C7 movl %eax, %edi
+ 19890 11e7c E87FE1FE call bswap_32
+ 19890 FF
+ 19891 11e81 89C3 movl %eax, %ebx
+ 19892 11e83 8B8530F3 movl -3280(%rbp), %eax
+ 19892 FFFF
+ 19893 11e89 89C7 movl %eax, %edi
+ 19894 11e8b E870E1FE call bswap_32
+ 19894 FF
+ 19895 11e90 4589E9 movl %r13d, %r9d
+ 19896 11e93 4589E0 movl %r12d, %r8d
+ 19897 11e96 89D9 movl %ebx, %ecx
+ 19898 11e98 89C2 movl %eax, %edx
+ 19899 11e9a 488D3500 leaq .LC7(%rip), %rsi
+ 19899 000000
+ 19900 11ea1 488D3D00 leaq .LC1(%rip), %rdi
+ 19900 000000
+ 19901 11ea8 B8000000 movl $0, %eax
+ 19901 00
+ 19902 11ead E8000000 call KDbgMsg at PLT
+ 19902 00
+ 19903 .L340:
+ 19904 .LBE4666:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 19905 .loc 2 938 0
+ 19906 11eb2 660F6F05 movdqa FF_tab(%rip), %xmm0
+ 19906 00000000
+ 19907 11eba F30F7F85 movdqu %xmm0, -1296(%rbp)
+ 19907 F0FAFFFF
+ 19908 11ec2 F30F6F85 movdqu -1552(%rbp), %xmm0
+ 19908 F0F9FFFF
+ 19909 11eca F30F7F85 movdqu %xmm0, -1312(%rbp)
+ 19909 E0FAFFFF
+ 19910 11ed2 F30F6F85 movdqu -1296(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 600
+
+
+ 19910 F0FAFFFF
+ 19911 11eda F30F7F85 movdqu %xmm0, -1264(%rbp)
+ 19911 10FBFFFF
+ 19912 11ee2 F30F6F85 movdqu -1312(%rbp), %xmm0
+ 19912 E0FAFFFF
+ 19913 11eea F30F7F85 movdqu %xmm0, -1280(%rbp)
+ 19913 00FBFFFF
+ 19914 .LBB4667:
+ 19915 .LBB4668:
+ 19916 .LBB4669:
+ 19917 .LBB4670:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19918 .loc 3 529 0
+ 19919 11ef2 F30F6F8D movdqu -1280(%rbp), %xmm1
+ 19919 00FBFFFF
+ 19920 11efa F30F6F85 movdqu -1264(%rbp), %xmm0
+ 19920 10FBFFFF
+ 19921 11f02 660F3800 pshufb %xmm1, %xmm0
+ 19921 C1
+ 19922 .LBE4670:
+ 19923 .LBE4669:
+ 19924 .LBE4668:
+ 19925 .LBE4667:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 19926 .loc 2 938 0
+ 19927 11f07 F30F7F85 movdqu %xmm0, -1552(%rbp)
+ 19927 F0F9FFFF
+ 19928 11f0f F30F6F85 movdqu -1536(%rbp), %xmm0
+ 19928 00FAFFFF
+ 19929 11f17 F30F7F85 movdqu %xmm0, -1232(%rbp)
+ 19929 30FBFFFF
+ 19930 11f1f F30F6F85 movdqu -1552(%rbp), %xmm0
+ 19930 F0F9FFFF
+ 19931 11f27 F30F7F85 movdqu %xmm0, -1248(%rbp)
+ 19931 20FBFFFF
+ 19932 .LBB4671:
+ 19933 .LBB4672:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 19934 .loc 2 178 0
+ 19935 11f2f F30F6F85 movdqu -1248(%rbp), %xmm0
+ 19935 20FBFFFF
+ 19936 11f37 F30F6F8D movdqu -1232(%rbp), %xmm1
+ 19936 30FBFFFF
+ 19937 11f3f 660FEFC1 pxor %xmm1, %xmm0
+ 19938 .LBE4672:
+ 19939 .LBE4671:
+ 19940 .LBE4651:
+ 19941 .LBE4650:
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f4 = AESBCMEMBER(FF_mul) (f4,2);
+ 19942 .loc 2 1119 0
+ 19943 11f43 660F7F85 movdqa %xmm0, -3584(%rbp)
+ 19943 00F2FFFF
+ 19944 11f4b 660F6F85 movdqa -3600(%rbp), %xmm0
+ 19944 F0F1FFFF
+ 19945 11f53 F30F7F85 movdqu %xmm0, -1200(%rbp)
+ 19945 50FBFFFF
+ 19946 .LBB4673:
+
GAS LISTING /tmp/ccjbMjHD.s page 601
+
+
+ 19947 .LBB4674:
+ 19948 .LBB4675:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("state", state);
+ 19949 .loc 2 933 0
+ 19950 11f5b F30F6F85 movdqu -1200(%rbp), %xmm0
+ 19950 50FBFFFF
+ 19951 11f63 F30F7F85 movdqu %xmm0, -3200(%rbp)
+ 19951 80F3FFFF
+ 19952 11f6b E8000000 call KDbgWriterGet at PLT
+ 19952 00
+ 19953 11f70 4885C0 testq %rax, %rax
+ 19954 11f73 7479 je .L342
+ 19955 11f75 BF010000 movl $1, %edi
+ 19955 00
+ 19956 11f7a E8000000 call KDbgCondToFlag at PLT
+ 19956 00
+ 19957 11f7f 4889C6 movq %rax, %rsi
+ 19958 11f82 BF100000 movl $16, %edi
+ 19958 00
+ 19959 11f87 E8000000 call KDbgTestModConds at PLT
+ 19959 00
+ 19960 11f8c 84C0 testb %al, %al
+ 19961 11f8e 745E je .L342
+ 19962 11f90 8B858CF3 movl -3188(%rbp), %eax
+ 19962 FFFF
+ 19963 11f96 89C7 movl %eax, %edi
+ 19964 11f98 E863E0FE call bswap_32
+ 19964 FF
+ 19965 11f9d 4189C5 movl %eax, %r13d
+ 19966 11fa0 8B8588F3 movl -3192(%rbp), %eax
+ 19966 FFFF
+ 19967 11fa6 89C7 movl %eax, %edi
+ 19968 11fa8 E853E0FE call bswap_32
+ 19968 FF
+ 19969 11fad 4189C4 movl %eax, %r12d
+ 19970 11fb0 8B8584F3 movl -3196(%rbp), %eax
+ 19970 FFFF
+ 19971 11fb6 89C7 movl %eax, %edi
+ 19972 11fb8 E843E0FE call bswap_32
+ 19972 FF
+ 19973 11fbd 89C3 movl %eax, %ebx
+ 19974 11fbf 8B8580F3 movl -3200(%rbp), %eax
+ 19974 FFFF
+ 19975 11fc5 89C7 movl %eax, %edi
+ 19976 11fc7 E834E0FE call bswap_32
+ 19976 FF
+ 19977 11fcc 4589E9 movl %r13d, %r9d
+ 19978 11fcf 4589E0 movl %r12d, %r8d
+ 19979 11fd2 89D9 movl %ebx, %ecx
+ 19980 11fd4 89C2 movl %eax, %edx
+ 19981 11fd6 488D3500 leaq .LC5(%rip), %rsi
+ 19981 000000
+ 19982 11fdd 488D3D00 leaq .LC1(%rip), %rdi
+ 19982 000000
+ 19983 11fe4 B8000000 movl $0, %eax
+ 19983 00
+ 19984 11fe9 E8000000 call KDbgMsg at PLT
+
GAS LISTING /tmp/ccjbMjHD.s page 602
+
+
+ 19984 00
+ 19985 .L342:
+ 19986 .LBE4675:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 19987 .loc 2 934 0
+ 19988 11fee B8050000 movl $5, %eax
+ 19988 00
+ 19989 11ff3 F30F6F85 movdqu -1200(%rbp), %xmm0
+ 19989 50FBFFFF
+ 19990 11ffb F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 19990 90FBFFFF
+ 19991 12003 89858CFB movl %eax, -1140(%rbp)
+ 19991 FFFF
+ 19992 12009 F30F6F85 movdqu -1136(%rbp), %xmm0
+ 19992 90FBFFFF
+ 19993 12011 F30F7F85 movdqu %xmm0, -1104(%rbp)
+ 19993 B0FBFFFF
+ 19994 12019 8B858CFB movl -1140(%rbp), %eax
+ 19994 FFFF
+ 19995 1201f 8985ACFB movl %eax, -1108(%rbp)
+ 19995 FFFF
+ 19996 .LBB4676:
+ 19997 .LBB4677:
+ 19998 .LBB4678:
+ 19999 .LBB4679:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 20000 .loc 3 433 0
+ 20001 12025 F30F6F85 movdqu -1104(%rbp), %xmm0
+ 20001 B0FBFFFF
+ 20002 1202d 8B85ACFB movl -1108(%rbp), %eax
+ 20002 FFFF
+ 20003 12033 8985E4F1 movl %eax, -3612(%rbp)
+ 20003 FFFF
+ 20004 12039 660F6E8D movd -3612(%rbp), %xmm1
+ 20004 E4F1FFFF
+ 20005 12041 660FD2C1 psrld %xmm1, %xmm0
+ 20006 .LBE4679:
+ 20007 .LBE4678:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = op_PSRLDI128 (v, k);
+ 20008 .loc 2 488 0
+ 20009 12045 F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 20009 90FBFFFF
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 20010 .loc 2 489 0
+ 20011 1204d B8080000 movl $8, %eax
+ 20011 00
+ 20012 12052 83BD8CFB cmpl $8, -1140(%rbp)
+ 20012 FFFF08
+ 20013 12059 0F4E858C cmovle -1140(%rbp), %eax
+ 20013 FBFFFF
+ 20014 12060 4898 cltq
+ 20015 12062 4889C2 movq %rax, %rdx
+ 20016 12065 48C1E204 salq $4, %rdx
+ 20017 12069 488D0500 leaq sr_mask.7327(%rip), %rax
+ 20017 000000
+ 20018 12070 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 20018 02
+
GAS LISTING /tmp/ccjbMjHD.s page 603
+
+
+ 20019 12075 F30F6F8D movdqu -1136(%rbp), %xmm1
+ 20019 90FBFFFF
+ 20020 1207d F30F7F8D movdqu %xmm1, -1072(%rbp)
+ 20020 D0FBFFFF
+ 20021 12085 F30F7F85 movdqu %xmm0, -1088(%rbp)
+ 20021 C0FBFFFF
+ 20022 .LBB4680:
+ 20023 .LBB4681:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 20024 .loc 2 206 0
+ 20025 1208d F30F6F85 movdqu -1088(%rbp), %xmm0
+ 20025 C0FBFFFF
+ 20026 12095 F30F6F8D movdqu -1072(%rbp), %xmm1
+ 20026 D0FBFFFF
+ 20027 1209d 660FDBC1 pand %xmm1, %xmm0
+ 20028 .LBE4681:
+ 20029 .LBE4680:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 20030 .loc 2 489 0
+ 20031 120a1 F30F7F85 movdqu %xmm0, -1136(%rbp)
+ 20031 90FBFFFF
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v;
+ 20032 .loc 2 490 0
+ 20033 120a9 F30F6F85 movdqu -1136(%rbp), %xmm0
+ 20033 90FBFFFF
+ 20034 .LBE4677:
+ 20035 .LBE4676:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 20036 .loc 2 934 0
+ 20037 120b1 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 20037 60FBFFFF
+ 20038 .LBB4682:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sr", sr);
+ 20039 .loc 2 935 0
+ 20040 120b9 F30F6F85 movdqu -1184(%rbp), %xmm0
+ 20040 60FBFFFF
+ 20041 120c1 F30F7F85 movdqu %xmm0, -3216(%rbp)
+ 20041 70F3FFFF
+ 20042 120c9 E8000000 call KDbgWriterGet at PLT
+ 20042 00
+ 20043 120ce 4885C0 testq %rax, %rax
+ 20044 120d1 7479 je .L344
+ 20045 120d3 BF010000 movl $1, %edi
+ 20045 00
+ 20046 120d8 E8000000 call KDbgCondToFlag at PLT
+ 20046 00
+ 20047 120dd 4889C6 movq %rax, %rsi
+ 20048 120e0 BF100000 movl $16, %edi
+ 20048 00
+ 20049 120e5 E8000000 call KDbgTestModConds at PLT
+ 20049 00
+ 20050 120ea 84C0 testb %al, %al
+ 20051 120ec 745E je .L344
+ 20052 120ee 8B857CF3 movl -3204(%rbp), %eax
+ 20052 FFFF
+ 20053 120f4 89C7 movl %eax, %edi
+ 20054 120f6 E805DFFE call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 604
+
+
+ 20054 FF
+ 20055 120fb 4189C5 movl %eax, %r13d
+ 20056 120fe 8B8578F3 movl -3208(%rbp), %eax
+ 20056 FFFF
+ 20057 12104 89C7 movl %eax, %edi
+ 20058 12106 E8F5DEFE call bswap_32
+ 20058 FF
+ 20059 1210b 4189C4 movl %eax, %r12d
+ 20060 1210e 8B8574F3 movl -3212(%rbp), %eax
+ 20060 FFFF
+ 20061 12114 89C7 movl %eax, %edi
+ 20062 12116 E8E5DEFE call bswap_32
+ 20062 FF
+ 20063 1211b 89C3 movl %eax, %ebx
+ 20064 1211d 8B8570F3 movl -3216(%rbp), %eax
+ 20064 FFFF
+ 20065 12123 89C7 movl %eax, %edi
+ 20066 12125 E8D6DEFE call bswap_32
+ 20066 FF
+ 20067 1212a 4589E9 movl %r13d, %r9d
+ 20068 1212d 4589E0 movl %r12d, %r8d
+ 20069 12130 89D9 movl %ebx, %ecx
+ 20070 12132 89C2 movl %eax, %edx
+ 20071 12134 488D3500 leaq .LC6(%rip), %rsi
+ 20071 000000
+ 20072 1213b 488D3D00 leaq .LC1(%rip), %rdi
+ 20072 000000
+ 20073 12142 B8000000 movl $0, %eax
+ 20073 00
+ 20074 12147 E8000000 call KDbgMsg at PLT
+ 20074 00
+ 20075 .L344:
+ 20076 1214c F30F6F85 movdqu -1200(%rbp), %xmm0
+ 20076 50FBFFFF
+ 20077 12154 F30F7F85 movdqu %xmm0, -1040(%rbp)
+ 20077 F0FBFFFF
+ 20078 .LBE4682:
+ 20079 .LBB4683:
+ 20080 .LBB4684:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vv = v;
+ 20081 .loc 2 426 0
+ 20082 1215c F30F6F85 movdqu -1040(%rbp), %xmm0
+ 20082 F0FBFFFF
+ 20083 12164 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 20083 00FCFFFF
+ 20084 1216c F30F6F85 movdqu -1024(%rbp), %xmm0
+ 20084 00FCFFFF
+ 20085 12174 F30F7F85 movdqu %xmm0, -992(%rbp)
+ 20085 20FCFFFF
+ 20086 .LBB4685:
+ 20087 .LBB4686:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 20088 .loc 3 416 0
+ 20089 1217c F30F6F85 movdqu -992(%rbp), %xmm0
+ 20089 20FCFFFF
+ 20090 12184 660F72F0 pslld $3, %xmm0
+ 20090 03
+
GAS LISTING /tmp/ccjbMjHD.s page 605
+
+
+ 20091 .LBE4686:
+ 20092 .LBE4685:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = op_PSLLDI128 (vv, k);
+ 20093 .loc 2 433 0
+ 20094 12189 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 20094 00FCFFFF
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 20095 .loc 2 435 0
+ 20096 12191 B8030000 movl $3, %eax
+ 20096 00
+ 20097 12196 4898 cltq
+ 20098 12198 4889C2 movq %rax, %rdx
+ 20099 1219b 48C1E204 salq $4, %rdx
+ 20100 1219f 488D0500 leaq sl_mask.7310(%rip), %rax
+ 20100 000000
+ 20101 121a6 660F6F04 movdqa (%rdx,%rax), %xmm0
+ 20101 02
+ 20102 121ab F30F6F8D movdqu -1024(%rbp), %xmm1
+ 20102 00FCFFFF
+ 20103 121b3 F30F7F8D movdqu %xmm1, -960(%rbp)
+ 20103 40FCFFFF
+ 20104 121bb F30F7F85 movdqu %xmm0, -976(%rbp)
+ 20104 30FCFFFF
+ 20105 .LBB4687:
+ 20106 .LBB4688:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 20107 .loc 2 206 0
+ 20108 121c3 F30F6F85 movdqu -976(%rbp), %xmm0
+ 20108 30FCFFFF
+ 20109 121cb F30F6F8D movdqu -960(%rbp), %xmm1
+ 20109 40FCFFFF
+ 20110 121d3 660FDBC1 pand %xmm1, %xmm0
+ 20111 .LBE4688:
+ 20112 .LBE4687:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 20113 .loc 2 435 0
+ 20114 121d7 F30F7F85 movdqu %xmm0, -1024(%rbp)
+ 20114 00FCFFFF
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return vv;
+ 20115 .loc 2 437 0
+ 20116 121df F30F6F85 movdqu -1024(%rbp), %xmm0
+ 20116 00FCFFFF
+ 20117 .LBE4684:
+ 20118 .LBE4683:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 20119 .loc 2 936 0
+ 20120 121e7 F30F7F85 movdqu %xmm0, -1168(%rbp)
+ 20120 70FBFFFF
+ 20121 .LBB4689:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_CIPHER_VECTOR ("sl", sl);
+ 20122 .loc 2 937 0
+ 20123 121ef F30F6F85 movdqu -1168(%rbp), %xmm0
+ 20123 70FBFFFF
+ 20124 121f7 F30F7F85 movdqu %xmm0, -3232(%rbp)
+ 20124 60F3FFFF
+ 20125 121ff E8000000 call KDbgWriterGet at PLT
+ 20125 00
+
GAS LISTING /tmp/ccjbMjHD.s page 606
+
+
+ 20126 12204 4885C0 testq %rax, %rax
+ 20127 12207 7479 je .L346
+ 20128 12209 BF010000 movl $1, %edi
+ 20128 00
+ 20129 1220e E8000000 call KDbgCondToFlag at PLT
+ 20129 00
+ 20130 12213 4889C6 movq %rax, %rsi
+ 20131 12216 BF100000 movl $16, %edi
+ 20131 00
+ 20132 1221b E8000000 call KDbgTestModConds at PLT
+ 20132 00
+ 20133 12220 84C0 testb %al, %al
+ 20134 12222 745E je .L346
+ 20135 12224 8B856CF3 movl -3220(%rbp), %eax
+ 20135 FFFF
+ 20136 1222a 89C7 movl %eax, %edi
+ 20137 1222c E8CFDDFE call bswap_32
+ 20137 FF
+ 20138 12231 4189C5 movl %eax, %r13d
+ 20139 12234 8B8568F3 movl -3224(%rbp), %eax
+ 20139 FFFF
+ 20140 1223a 89C7 movl %eax, %edi
+ 20141 1223c E8BFDDFE call bswap_32
+ 20141 FF
+ 20142 12241 4189C4 movl %eax, %r12d
+ 20143 12244 8B8564F3 movl -3228(%rbp), %eax
+ 20143 FFFF
+ 20144 1224a 89C7 movl %eax, %edi
+ 20145 1224c E8AFDDFE call bswap_32
+ 20145 FF
+ 20146 12251 89C3 movl %eax, %ebx
+ 20147 12253 8B8560F3 movl -3232(%rbp), %eax
+ 20147 FFFF
+ 20148 12259 89C7 movl %eax, %edi
+ 20149 1225b E8A0DDFE call bswap_32
+ 20149 FF
+ 20150 12260 4589E9 movl %r13d, %r9d
+ 20151 12263 4589E0 movl %r12d, %r8d
+ 20152 12266 89D9 movl %ebx, %ecx
+ 20153 12268 89C2 movl %eax, %edx
+ 20154 1226a 488D3500 leaq .LC7(%rip), %rsi
+ 20154 000000
+ 20155 12271 488D3D00 leaq .LC1(%rip), %rdi
+ 20155 000000
+ 20156 12278 B8000000 movl $0, %eax
+ 20156 00
+ 20157 1227d E8000000 call KDbgMsg at PLT
+ 20157 00
+ 20158 .L346:
+ 20159 .LBE4689:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 20160 .loc 2 938 0
+ 20161 12282 660F6F05 movdqa FF_tab(%rip), %xmm0
+ 20161 00000000
+ 20162 1228a F30F7F85 movdqu %xmm0, -928(%rbp)
+ 20162 60FCFFFF
+ 20163 12292 F30F6F85 movdqu -1184(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 607
+
+
+ 20163 60FBFFFF
+ 20164 1229a F30F7F85 movdqu %xmm0, -944(%rbp)
+ 20164 50FCFFFF
+ 20165 122a2 F30F6F85 movdqu -928(%rbp), %xmm0
+ 20165 60FCFFFF
+ 20166 122aa F30F7F85 movdqu %xmm0, -896(%rbp)
+ 20166 80FCFFFF
+ 20167 122b2 F30F6F85 movdqu -944(%rbp), %xmm0
+ 20167 50FCFFFF
+ 20168 122ba F30F7F85 movdqu %xmm0, -912(%rbp)
+ 20168 70FCFFFF
+ 20169 .LBB4690:
+ 20170 .LBB4691:
+ 20171 .LBB4692:
+ 20172 .LBB4693:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 20173 .loc 3 529 0
+ 20174 122c2 F30F6F8D movdqu -912(%rbp), %xmm1
+ 20174 70FCFFFF
+ 20175 122ca F30F6F85 movdqu -896(%rbp), %xmm0
+ 20175 80FCFFFF
+ 20176 122d2 660F3800 pshufb %xmm1, %xmm0
+ 20176 C1
+ 20177 .LBE4693:
+ 20178 .LBE4692:
+ 20179 .LBE4691:
+ 20180 .LBE4690:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 20181 .loc 2 938 0
+ 20182 122d7 F30F7F85 movdqu %xmm0, -1184(%rbp)
+ 20182 60FBFFFF
+ 20183 122df F30F6F85 movdqu -1168(%rbp), %xmm0
+ 20183 70FBFFFF
+ 20184 122e7 F30F7F85 movdqu %xmm0, -864(%rbp)
+ 20184 A0FCFFFF
+ 20185 122ef F30F6F85 movdqu -1184(%rbp), %xmm0
+ 20185 60FBFFFF
+ 20186 122f7 F30F7F85 movdqu %xmm0, -880(%rbp)
+ 20186 90FCFFFF
+ 20187 .LBB4694:
+ 20188 .LBB4695:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20189 .loc 2 178 0
+ 20190 122ff F30F6F85 movdqu -880(%rbp), %xmm0
+ 20190 90FCFFFF
+ 20191 12307 F30F6F8D movdqu -864(%rbp), %xmm1
+ 20191 A0FCFFFF
+ 20192 1230f 660FEFC1 pxor %xmm1, %xmm0
+ 20193 .LBE4695:
+ 20194 .LBE4694:
+ 20195 .LBE4674:
+ 20196 .LBE4673:
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** f8 = AESBCMEMBER(FF_mul) (f8,3);
+ 20197 .loc 2 1120 0
+ 20198 12313 660F7F85 movdqa %xmm0, -3600(%rbp)
+ 20198 F0F1FFFF
+ 20199 1231b F30F6F85 movdqu -2368(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 608
+
+
+ 20199 C0F6FFFF
+ 20200 12323 F30F7F85 movdqu %xmm0, -832(%rbp)
+ 20200 C0FCFFFF
+ 20201 1232b 660F6F85 movdqa -3568(%rbp), %xmm0
+ 20201 10F2FFFF
+ 20202 12333 F30F7F85 movdqu %xmm0, -848(%rbp)
+ 20202 B0FCFFFF
+ 20203 .LBB4696:
+ 20204 .LBB4697:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20205 .loc 2 178 0
+ 20206 1233b F30F6F85 movdqu -848(%rbp), %xmm0
+ 20206 B0FCFFFF
+ 20207 12343 F30F6F8D movdqu -832(%rbp), %xmm1
+ 20207 C0FCFFFF
+ 20208 1234b 660FEFC1 pxor %xmm1, %xmm0
+ 20209 .LBE4697:
+ 20210 .LBE4696:
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f2);
+ 20211 .loc 2 1142 0
+ 20212 1234f F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 20212 C0F6FFFF
+ 20213 12357 F30F6F85 movdqu -2368(%rbp), %xmm0
+ 20213 C0F6FFFF
+ 20214 1235f F30F7F85 movdqu %xmm0, -800(%rbp)
+ 20214 E0FCFFFF
+ 20215 12367 660F6F8D movdqa -3584(%rbp), %xmm1
+ 20215 00F2FFFF
+ 20216 1236f F30F7F8D movdqu %xmm1, -816(%rbp)
+ 20216 D0FCFFFF
+ 20217 .LBB4698:
+ 20218 .LBB4699:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20219 .loc 2 178 0
+ 20220 12377 F30F6F85 movdqu -816(%rbp), %xmm0
+ 20220 D0FCFFFF
+ 20221 1237f F30F6F8D movdqu -800(%rbp), %xmm1
+ 20221 E0FCFFFF
+ 20222 12387 660FEFC1 pxor %xmm1, %xmm0
+ 20223 .LBE4699:
+ 20224 .LBE4698:
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f4);
+ 20225 .loc 2 1143 0
+ 20226 1238b F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 20226 C0F6FFFF
+ 20227 12393 F30F6F85 movdqu -2368(%rbp), %xmm0
+ 20227 C0F6FFFF
+ 20228 1239b F30F7F85 movdqu %xmm0, -768(%rbp)
+ 20228 00FDFFFF
+ 20229 123a3 660F6F85 movdqa -3600(%rbp), %xmm0
+ 20229 F0F1FFFF
+ 20230 123ab F30F7F85 movdqu %xmm0, -784(%rbp)
+ 20230 F0FCFFFF
+ 20231 .LBB4700:
+ 20232 .LBB4701:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20233 .loc 2 178 0
+
GAS LISTING /tmp/ccjbMjHD.s page 609
+
+
+ 20234 123b3 F30F6F85 movdqu -784(%rbp), %xmm0
+ 20234 F0FCFFFF
+ 20235 123bb F30F6F8D movdqu -768(%rbp), %xmm1
+ 20235 00FDFFFF
+ 20236 123c3 660FEFC1 pxor %xmm1, %xmm0
+ 20237 .LBE4701:
+ 20238 .LBE4700:
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(VecXor) (state, f8);
+ 20239 .loc 2 1144 0
+ 20240 123c7 F30F7F85 movdqu %xmm0, -2368(%rbp)
+ 20240 C0F6FFFF
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20241 .loc 2 1148 0
+ 20242 123cf F30F6F85 movdqu -2368(%rbp), %xmm0
+ 20242 C0F6FFFF
+ 20243 .LBE4598:
+ 20244 .LBE4597:
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvMixColumns) (state);
+ 20245 .loc 2 2201 0
+ 20246 123d7 F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 20246 60F4FFFF
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 20247 .loc 2 2204 0
+ 20248 123df F30F6F85 movdqu -2976(%rbp), %xmm0
+ 20248 60F4FFFF
+ 20249 123e7 F30F7F85 movdqu %xmm0, -2944(%rbp)
+ 20249 80F4FFFF
+ 20250 .LBB4702:
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+ 20251 .loc 2 2206 0
+ 20252 123ef F30F6F85 movdqu -2944(%rbp), %xmm0
+ 20252 80F4FFFF
+ 20253 123f7 F30F7F85 movdqu %xmm0, -3392(%rbp)
+ 20253 C0F2FFFF
+ 20254 123ff E8000000 call KDbgWriterGet at PLT
+ 20254 00
+ 20255 12404 4885C0 testq %rax, %rax
+ 20256 12407 7479 je .L348
+ 20257 12409 BF030000 movl $3, %edi
+ 20257 00
+ 20258 1240e E8000000 call KDbgCondToFlag at PLT
+ 20258 00
+ 20259 12413 4889C6 movq %rax, %rsi
+ 20260 12416 BF100000 movl $16, %edi
+ 20260 00
+ 20261 1241b E8000000 call KDbgTestModConds at PLT
+ 20261 00
+ 20262 12420 84C0 testb %al, %al
+ 20263 12422 745E je .L348
+ 20264 12424 8B85CCF2 movl -3380(%rbp), %eax
+ 20264 FFFF
+ 20265 1242a 89C7 movl %eax, %edi
+ 20266 1242c E8CFDBFE call bswap_32
+ 20266 FF
+ 20267 12431 4189C5 movl %eax, %r13d
+ 20268 12434 8B85C8F2 movl -3384(%rbp), %eax
+ 20268 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 610
+
+
+ 20269 1243a 89C7 movl %eax, %edi
+ 20270 1243c E8BFDBFE call bswap_32
+ 20270 FF
+ 20271 12441 4189C4 movl %eax, %r12d
+ 20272 12444 8B85C4F2 movl -3388(%rbp), %eax
+ 20272 FFFF
+ 20273 1244a 89C7 movl %eax, %edi
+ 20274 1244c E8AFDBFE call bswap_32
+ 20274 FF
+ 20275 12451 89C3 movl %eax, %ebx
+ 20276 12453 8B85C0F2 movl -3392(%rbp), %eax
+ 20276 FFFF
+ 20277 12459 89C7 movl %eax, %edi
+ 20278 1245b E8A0DBFE call bswap_32
+ 20278 FF
+ 20279 12460 4589E9 movl %r13d, %r9d
+ 20280 12463 4589E0 movl %r12d, %r8d
+ 20281 12466 89D9 movl %ebx, %ecx
+ 20282 12468 89C2 movl %eax, %edx
+ 20283 1246a 488D3500 leaq .LC17(%rip), %rsi
+ 20283 000000
+ 20284 12471 488D3D00 leaq .LC1(%rip), %rdi
+ 20284 000000
+ 20285 12478 B8000000 movl $0, %eax
+ 20285 00
+ 20286 1247d E8000000 call KDbgMsg at PLT
+ 20286 00
+ 20287 .L348:
+ 20288 12482 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 20288 60F4FFFF
+ 20289 1248a F30F7F85 movdqu %xmm0, -736(%rbp)
+ 20289 20FDFFFF
+ 20290 12492 F30F6F85 movdqu -2992(%rbp), %xmm0
+ 20290 50F4FFFF
+ 20291 1249a F30F7F85 movdqu %xmm0, -752(%rbp)
+ 20291 10FDFFFF
+ 20292 124a2 F30F6F85 movdqu -736(%rbp), %xmm0
+ 20292 20FDFFFF
+ 20293 124aa F30F7F85 movdqu %xmm0, -704(%rbp)
+ 20293 40FDFFFF
+ 20294 124b2 F30F6F85 movdqu -752(%rbp), %xmm0
+ 20294 10FDFFFF
+ 20295 124ba F30F7F85 movdqu %xmm0, -720(%rbp)
+ 20295 30FDFFFF
+ 20296 .LBE4702:
+ 20297 .LBB4703:
+ 20298 .LBB4704:
+ 20299 .LBB4705:
+ 20300 .LBB4706:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20301 .loc 2 178 0
+ 20302 124c2 F30F6F85 movdqu -720(%rbp), %xmm0
+ 20302 30FDFFFF
+ 20303 124ca F30F6F8D movdqu -704(%rbp), %xmm1
+ 20303 40FDFFFF
+ 20304 124d2 660FEFC1 pxor %xmm1, %xmm0
+ 20305 .LBE4706:
+
GAS LISTING /tmp/ccjbMjHD.s page 611
+
+
+ 20306 .LBE4705:
+ 20307 .LBE4704:
+ 20308 .LBE4703:
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 20309 .loc 2 2209 0
+ 20310 124d6 F30F7F85 movdqu %xmm0, -2976(%rbp)
+ 20310 60F4FFFF
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** mstate = state;
+ 20311 .loc 2 2213 0
+ 20312 124de F30F6F85 movdqu -2976(%rbp), %xmm0
+ 20312 60F4FFFF
+ 20313 124e6 F30F7F85 movdqu %xmm0, -2944(%rbp)
+ 20313 80F4FFFF
+ 20314 .LBB4707:
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+ 20315 .loc 2 2215 0
+ 20316 124ee F30F6F85 movdqu -2960(%rbp), %xmm0
+ 20316 70F4FFFF
+ 20317 124f6 F30F7F85 movdqu %xmm0, -3408(%rbp)
+ 20317 B0F2FFFF
+ 20318 124fe E8000000 call KDbgWriterGet at PLT
+ 20318 00
+ 20319 12503 4885C0 testq %rax, %rax
+ 20320 12506 7479 je .L350
+ 20321 12508 BF030000 movl $3, %edi
+ 20321 00
+ 20322 1250d E8000000 call KDbgCondToFlag at PLT
+ 20322 00
+ 20323 12512 4889C6 movq %rax, %rsi
+ 20324 12515 BF100000 movl $16, %edi
+ 20324 00
+ 20325 1251a E8000000 call KDbgTestModConds at PLT
+ 20325 00
+ 20326 1251f 84C0 testb %al, %al
+ 20327 12521 745E je .L350
+ 20328 12523 8B85BCF2 movl -3396(%rbp), %eax
+ 20328 FFFF
+ 20329 12529 89C7 movl %eax, %edi
+ 20330 1252b E8D0DAFE call bswap_32
+ 20330 FF
+ 20331 12530 4189C5 movl %eax, %r13d
+ 20332 12533 8B85B8F2 movl -3400(%rbp), %eax
+ 20332 FFFF
+ 20333 12539 89C7 movl %eax, %edi
+ 20334 1253b E8C0DAFE call bswap_32
+ 20334 FF
+ 20335 12540 4189C4 movl %eax, %r12d
+ 20336 12543 8B85B4F2 movl -3404(%rbp), %eax
+ 20336 FFFF
+ 20337 12549 89C7 movl %eax, %edi
+ 20338 1254b E8B0DAFE call bswap_32
+ 20338 FF
+ 20339 12550 89C3 movl %eax, %ebx
+ 20340 12552 8B85B0F2 movl -3408(%rbp), %eax
+ 20340 FFFF
+ 20341 12558 89C7 movl %eax, %edi
+ 20342 1255a E8A1DAFE call bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s page 612
+
+
+ 20342 FF
+ 20343 1255f 4589E9 movl %r13d, %r9d
+ 20344 12562 4589E0 movl %r12d, %r8d
+ 20345 12565 89D9 movl %ebx, %ecx
+ 20346 12567 89C2 movl %eax, %edx
+ 20347 12569 488D3500 leaq .LC9(%rip), %rsi
+ 20347 000000
+ 20348 12570 488D3D00 leaq .LC1(%rip), %rdi
+ 20348 000000
+ 20349 12577 B8000000 movl $0, %eax
+ 20349 00
+ 20350 1257c E8000000 call KDbgMsg at PLT
+ 20350 00
+ 20351 .L350:
+ 20352 .LBE4707:
+ 20353 .LBB4708:
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+ 20354 .loc 2 2217 0
+ 20355 12581 F30F6F85 movdqu -2944(%rbp), %xmm0
+ 20355 80F4FFFF
+ 20356 12589 F30F7F85 movdqu %xmm0, -3424(%rbp)
+ 20356 A0F2FFFF
+ 20357 12591 E8000000 call KDbgWriterGet at PLT
+ 20357 00
+ 20358 12596 4885C0 testq %rax, %rax
+ 20359 12599 7479 je .L352
+ 20360 1259b BF030000 movl $3, %edi
+ 20360 00
+ 20361 125a0 E8000000 call KDbgCondToFlag at PLT
+ 20361 00
+ 20362 125a5 4889C6 movq %rax, %rsi
+ 20363 125a8 BF100000 movl $16, %edi
+ 20363 00
+ 20364 125ad E8000000 call KDbgTestModConds at PLT
+ 20364 00
+ 20365 125b2 84C0 testb %al, %al
+ 20366 125b4 745E je .L352
+ 20367 125b6 8B85ACF2 movl -3412(%rbp), %eax
+ 20367 FFFF
+ 20368 125bc 89C7 movl %eax, %edi
+ 20369 125be E83DDAFE call bswap_32
+ 20369 FF
+ 20370 125c3 4189C5 movl %eax, %r13d
+ 20371 125c6 8B85A8F2 movl -3416(%rbp), %eax
+ 20371 FFFF
+ 20372 125cc 89C7 movl %eax, %edi
+ 20373 125ce E82DDAFE call bswap_32
+ 20373 FF
+ 20374 125d3 4189C4 movl %eax, %r12d
+ 20375 125d6 8B85A4F2 movl -3420(%rbp), %eax
+ 20375 FFFF
+ 20376 125dc 89C7 movl %eax, %edi
+ 20377 125de E81DDAFE call bswap_32
+ 20377 FF
+ 20378 125e3 89C3 movl %eax, %ebx
+ 20379 125e5 8B85A0F2 movl -3424(%rbp), %eax
+ 20379 FFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 613
+
+
+ 20380 125eb 89C7 movl %eax, %edi
+ 20381 125ed E80EDAFE call bswap_32
+ 20381 FF
+ 20382 125f2 4589E9 movl %r13d, %r9d
+ 20383 125f5 4589E0 movl %r12d, %r8d
+ 20384 125f8 89D9 movl %ebx, %ecx
+ 20385 125fa 89C2 movl %eax, %edx
+ 20386 125fc 488D3500 leaq .LC14(%rip), %rsi
+ 20386 000000
+ 20387 12603 488D3D00 leaq .LC1(%rip), %rdi
+ 20387 000000
+ 20388 1260a B8000000 movl $0, %eax
+ 20388 00
+ 20389 1260f E8000000 call KDbgMsg at PLT
+ 20389 00
+ 20390 .L352:
+ 20391 .LBE4708:
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20392 .loc 2 2220 0
+ 20393 12614 F30F6F85 movdqu -2976(%rbp), %xmm0
+ 20393 60F4FFFF
+ 20394 .LBE4561:
+ 20395 .LBE4560:
+ 20396 .loc 2 2277 0
+ 20397 1261c 660F7F85 movdqa %xmm0, -3488(%rbp)
+ 20397 60F2FFFF
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for ( ; ix < Nr; ++ix)
+ 20398 .loc 2 2276 0
+ 20399 12624 8385ECF3 addl $1, -3092(%rbp)
+ 20399 FFFF01
+ 20400 .L320:
+ 20401 1262b 8B85ECF3 movl -3092(%rbp), %eax
+ 20401 FFFF
+ 20402 12631 3B8554F2 cmpl -3500(%rbp), %eax
+ 20402 FFFF
+ 20403 12637 0F8253E9 jb .L353
+ 20403 FFFF
+2278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+ 20404 .loc 2 2279 0
+ 20405 1263d 8B85ECF3 mov -3092(%rbp), %eax
+ 20405 FFFF
+ 20406 12643 48C1E004 salq $4, %rax
+ 20407 12647 48038558 addq -3496(%rbp), %rax
+ 20407 F2FFFF
+ 20408 1264e 660F6F00 movdqa (%rax), %xmm0
+ 20409 12652 660F6F8D movdqa -3488(%rbp), %xmm1
+ 20409 60F2FFFF
+ 20410 1265a F30F7F8D movdqu %xmm1, -672(%rbp)
+ 20410 60FDFFFF
+ 20411 12662 F30F7F85 movdqu %xmm0, -688(%rbp)
+ 20411 50FDFFFF
+ 20412 .LBB4709:
+ 20413 .LBB4710:
+ 20414 .LBB4711:
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 20415 .loc 2 2237 0
+
GAS LISTING /tmp/ccjbMjHD.s page 614
+
+
+ 20416 1266a F30F6F85 movdqu -672(%rbp), %xmm0
+ 20416 60FDFFFF
+ 20417 12672 F30F7F85 movdqu %xmm0, -3120(%rbp)
+ 20417 D0F3FFFF
+ 20418 1267a E8000000 call KDbgWriterGet at PLT
+ 20418 00
+ 20419 1267f 4885C0 testq %rax, %rax
+ 20420 12682 7479 je .L355
+ 20421 12684 BF030000 movl $3, %edi
+ 20421 00
+ 20422 12689 E8000000 call KDbgCondToFlag at PLT
+ 20422 00
+ 20423 1268e 4889C6 movq %rax, %rsi
+ 20424 12691 BF100000 movl $16, %edi
+ 20424 00
+ 20425 12696 E8000000 call KDbgTestModConds at PLT
+ 20425 00
+ 20426 1269b 84C0 testb %al, %al
+ 20427 1269d 745E je .L355
+ 20428 1269f 8B85DCF3 movl -3108(%rbp), %eax
+ 20428 FFFF
+ 20429 126a5 89C7 movl %eax, %edi
+ 20430 126a7 E854D9FE call bswap_32
+ 20430 FF
+ 20431 126ac 4189C5 movl %eax, %r13d
+ 20432 126af 8B85D8F3 movl -3112(%rbp), %eax
+ 20432 FFFF
+ 20433 126b5 89C7 movl %eax, %edi
+ 20434 126b7 E844D9FE call bswap_32
+ 20434 FF
+ 20435 126bc 4189C4 movl %eax, %r12d
+ 20436 126bf 8B85D4F3 movl -3116(%rbp), %eax
+ 20436 FFFF
+ 20437 126c5 89C7 movl %eax, %edi
+ 20438 126c7 E834D9FE call bswap_32
+ 20438 FF
+ 20439 126cc 89C3 movl %eax, %ebx
+ 20440 126ce 8B85D0F3 movl -3120(%rbp), %eax
+ 20440 FFFF
+ 20441 126d4 89C7 movl %eax, %edi
+ 20442 126d6 E825D9FE call bswap_32
+ 20442 FF
+ 20443 126db 4589E9 movl %r13d, %r9d
+ 20444 126de 4589E0 movl %r12d, %r8d
+ 20445 126e1 89D9 movl %ebx, %ecx
+ 20446 126e3 89C2 movl %eax, %edx
+ 20447 126e5 488D3500 leaq .LC8(%rip), %rsi
+ 20447 000000
+ 20448 126ec 488D3D00 leaq .LC1(%rip), %rdi
+ 20448 000000
+ 20449 126f3 B8000000 movl $0, %eax
+ 20449 00
+ 20450 126f8 E8000000 call KDbgMsg at PLT
+ 20450 00
+ 20451 .L355:
+ 20452 126fd F30F6F85 movdqu -672(%rbp), %xmm0
+ 20452 60FDFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 615
+
+
+ 20453 12705 F30F7F85 movdqu %xmm0, -656(%rbp)
+ 20453 70FDFFFF
+ 20454 1270d F30F6F85 movdqu -656(%rbp), %xmm0
+ 20454 70FDFFFF
+ 20455 12715 F30F7F85 movdqu %xmm0, -624(%rbp)
+ 20455 90FDFFFF
+ 20456 1271d 488D0500 leaq KAESBlockCipherVecRegRijndaelInvSBoxV(%rip), %rax
+ 20456 000000
+ 20457 12724 48898588 movq %rax, -632(%rbp)
+ 20457 FDFFFF
+ 20458 .LBE4711:
+ 20459 .LBB4712:
+ 20460 .LBB4713:
+ 20461 .LBB4714:
+ 20462 .LBB4715:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = vec_00;
+ 20463 .loc 2 851 0
+ 20464 1272b 660F6F05 movdqa vec_00(%rip), %xmm0
+ 20464 00000000
+ 20465 12733 F30F7F85 movdqu %xmm0, -592(%rbp)
+ 20465 B0FDFFFF
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 20466 .loc 2 854 0
+ 20467 1273b 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 20467 00000000
+ 20468 12743 F30F6F8D movdqu -624(%rbp), %xmm1
+ 20468 90FDFFFF
+ 20469 1274b F30F7F8D movdqu %xmm1, -512(%rbp)
+ 20469 00FEFFFF
+ 20470 12753 F30F7F85 movdqu %xmm0, -528(%rbp)
+ 20470 F0FDFFFF
+ 20471 .LBB4716:
+ 20472 .LBB4717:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 20473 .loc 2 206 0
+ 20474 1275b F30F6F85 movdqu -528(%rbp), %xmm0
+ 20474 F0FDFFFF
+ 20475 12763 F30F6F8D movdqu -512(%rbp), %xmm1
+ 20475 00FEFFFF
+ 20476 1276b 660FDBC1 pand %xmm1, %xmm0
+ 20477 .LBE4717:
+ 20478 .LBE4716:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 20479 .loc 2 854 0
+ 20480 1276f F30F7F85 movdqu %xmm0, -544(%rbp)
+ 20480 E0FDFFFF
+ 20481 12777 F30F6F85 movdqu -624(%rbp), %xmm0
+ 20481 90FDFFFF
+ 20482 1277f F30F7F85 movdqu %xmm0, -480(%rbp)
+ 20482 20FEFFFF
+ 20483 .LBB4718:
+ 20484 .LBB4719:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 20485 .loc 3 433 0
+ 20486 12787 F30F6F85 movdqu -480(%rbp), %xmm0
+ 20486 20FEFFFF
+ 20487 1278f 660F72D0 psrld $4, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 616
+
+
+ 20487 04
+ 20488 .LBE4719:
+ 20489 .LBE4718:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = op_PSRLDI128 (state, 4);
+ 20490 .loc 2 857 0
+ 20491 12794 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 20491 D0FDFFFF
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 20492 .loc 2 859 0
+ 20493 1279c 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 20493 00000000
+ 20494 127a4 F30F6F8D movdqu -560(%rbp), %xmm1
+ 20494 D0FDFFFF
+ 20495 127ac F30F7F8D movdqu %xmm1, -448(%rbp)
+ 20495 40FEFFFF
+ 20496 127b4 F30F7F85 movdqu %xmm0, -464(%rbp)
+ 20496 30FEFFFF
+ 20497 .LBB4720:
+ 20498 .LBB4721:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 20499 .loc 2 206 0
+ 20500 127bc F30F6F85 movdqu -464(%rbp), %xmm0
+ 20500 30FEFFFF
+ 20501 127c4 F30F6F8D movdqu -448(%rbp), %xmm1
+ 20501 40FEFFFF
+ 20502 127cc 660FDBC1 pand %xmm1, %xmm0
+ 20503 .LBE4721:
+ 20504 .LBE4720:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 20505 .loc 2 859 0
+ 20506 127d0 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 20506 D0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 20507 .loc 2 866 0
+ 20508 127d8 C785ACFD movl $0, -596(%rbp)
+ 20508 FFFF0000
+ 20508 0000
+ 20509 127e2 E9BE0100 jmp .L356
+ 20509 00
+ 20510 .L357:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 20511 .loc 2 868 0
+ 20512 127e7 660F6F05 movdqa lo_filter(%rip), %xmm0
+ 20512 00000000
+ 20513 127ef F30F7F85 movdqu %xmm0, -416(%rbp)
+ 20513 60FEFFFF
+ 20514 127f7 F30F6F85 movdqu -560(%rbp), %xmm0
+ 20514 D0FDFFFF
+ 20515 127ff F30F7F85 movdqu %xmm0, -432(%rbp)
+ 20515 50FEFFFF
+ 20516 12807 F30F6F85 movdqu -416(%rbp), %xmm0
+ 20516 60FEFFFF
+ 20517 1280f F30F7F85 movdqu %xmm0, -384(%rbp)
+ 20517 80FEFFFF
+ 20518 12817 F30F6F85 movdqu -432(%rbp), %xmm0
+ 20518 50FEFFFF
+ 20519 1281f F30F7F85 movdqu %xmm0, -400(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 617
+
+
+ 20519 70FEFFFF
+ 20520 .LBB4722:
+ 20521 .LBB4723:
+ 20522 .LBB4724:
+ 20523 .LBB4725:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 20524 .loc 3 529 0
+ 20525 12827 F30F6F8D movdqu -400(%rbp), %xmm1
+ 20525 70FEFFFF
+ 20526 1282f F30F6F85 movdqu -384(%rbp), %xmm0
+ 20526 80FEFFFF
+ 20527 12837 660F3800 pshufb %xmm1, %xmm0
+ 20527 C1
+ 20528 .LBE4725:
+ 20529 .LBE4724:
+ 20530 .LBE4723:
+ 20531 .LBE4722:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 20532 .loc 2 868 0
+ 20533 1283c F30F7F85 movdqu %xmm0, -576(%rbp)
+ 20533 C0FDFFFF
+ 20534 12844 F30F6F85 movdqu -544(%rbp), %xmm0
+ 20534 E0FDFFFF
+ 20535 1284c F30F7F85 movdqu %xmm0, -352(%rbp)
+ 20535 A0FEFFFF
+ 20536 12854 F30F6F85 movdqu -576(%rbp), %xmm0
+ 20536 C0FDFFFF
+ 20537 1285c F30F7F85 movdqu %xmm0, -368(%rbp)
+ 20537 90FEFFFF
+ 20538 .LBB4726:
+ 20539 .LBB4727:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 20540 .loc 2 234 0
+ 20541 12864 F30F6F85 movdqu -368(%rbp), %xmm0
+ 20541 90FEFFFF
+ 20542 1286c F30F6F8D movdqu -352(%rbp), %xmm1
+ 20542 A0FEFFFF
+ 20543 12874 660FEBC1 por %xmm1, %xmm0
+ 20544 .LBE4727:
+ 20545 .LBE4726:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 20546 .loc 2 870 0
+ 20547 12878 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 20547 C0FDFFFF
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 20548 .loc 2 872 0
+ 20549 12880 8B85ACFD mov -596(%rbp), %eax
+ 20549 FFFF
+ 20550 12886 48C1E004 salq $4, %rax
+ 20551 1288a 48038588 addq -632(%rbp), %rax
+ 20551 FDFFFF
+ 20552 12891 660F6F00 movdqa (%rax), %xmm0
+ 20553 12895 F30F7F85 movdqu %xmm0, -320(%rbp)
+ 20553 C0FEFFFF
+ 20554 1289d F30F6F85 movdqu -576(%rbp), %xmm0
+ 20554 C0FDFFFF
+ 20555 128a5 F30F7F85 movdqu %xmm0, -336(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 618
+
+
+ 20555 B0FEFFFF
+ 20556 128ad F30F6F85 movdqu -320(%rbp), %xmm0
+ 20556 C0FEFFFF
+ 20557 128b5 F30F7F85 movdqu %xmm0, -288(%rbp)
+ 20557 E0FEFFFF
+ 20558 128bd F30F6F85 movdqu -336(%rbp), %xmm0
+ 20558 B0FEFFFF
+ 20559 128c5 F30F7F85 movdqu %xmm0, -304(%rbp)
+ 20559 D0FEFFFF
+ 20560 .LBB4728:
+ 20561 .LBB4729:
+ 20562 .LBB4730:
+ 20563 .LBB4731:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 20564 .loc 3 529 0
+ 20565 128cd F30F6F8D movdqu -304(%rbp), %xmm1
+ 20565 D0FEFFFF
+ 20566 128d5 F30F6F85 movdqu -288(%rbp), %xmm0
+ 20566 E0FEFFFF
+ 20567 128dd 660F3800 pshufb %xmm1, %xmm0
+ 20567 C1
+ 20568 .LBE4731:
+ 20569 .LBE4730:
+ 20570 .LBE4729:
+ 20571 .LBE4728:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 20572 .loc 2 872 0
+ 20573 128e2 F30F7F85 movdqu %xmm0, -576(%rbp)
+ 20573 C0FDFFFF
+ 20574 128ea F30F6F85 movdqu -592(%rbp), %xmm0
+ 20574 B0FDFFFF
+ 20575 128f2 F30F7F85 movdqu %xmm0, -256(%rbp)
+ 20575 00FFFFFF
+ 20576 128fa F30F6F85 movdqu -576(%rbp), %xmm0
+ 20576 C0FDFFFF
+ 20577 12902 F30F7F85 movdqu %xmm0, -272(%rbp)
+ 20577 F0FEFFFF
+ 20578 .LBB4732:
+ 20579 .LBB4733:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 | v2;
+ 20580 .loc 2 234 0
+ 20581 1290a F30F6F85 movdqu -272(%rbp), %xmm0
+ 20581 F0FEFFFF
+ 20582 12912 F30F6F8D movdqu -256(%rbp), %xmm1
+ 20582 00FFFFFF
+ 20583 1291a 660FEBC1 por %xmm1, %xmm0
+ 20584 .LBE4733:
+ 20585 .LBE4732:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** out = AESBCMEMBER(VecOr) (out, tmp);
+ 20586 .loc 2 874 0
+ 20587 1291e F30F7F85 movdqu %xmm0, -592(%rbp)
+ 20587 B0FDFFFF
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 20588 .loc 2 876 0
+ 20589 12926 660F6F05 movdqa vec_01(%rip), %xmm0
+ 20589 00000000
+ 20590 1292e F30F6F8D movdqu -560(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s page 619
+
+
+ 20590 D0FDFFFF
+ 20591 12936 F30F7F8D movdqu %xmm1, -224(%rbp)
+ 20591 20FFFFFF
+ 20592 1293e F30F7F85 movdqu %xmm0, -240(%rbp)
+ 20592 10FFFFFF
+ 20593 .LBB4734:
+ 20594 .LBB4735:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 - v2;
+ 20595 .loc 2 290 0
+ 20596 12946 F30F6F8D movdqu -240(%rbp), %xmm1
+ 20596 10FFFFFF
+ 20597 1294e F30F6F85 movdqu -224(%rbp), %xmm0
+ 20597 20FFFFFF
+ 20598 12956 660FF8C1 psubb %xmm1, %xmm0
+ 20599 .LBE4735:
+ 20600 .LBE4734:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecSub) (hi, vec_01);
+ 20601 .loc 2 876 0
+ 20602 1295a F30F7F85 movdqu %xmm0, -560(%rbp)
+ 20602 D0FDFFFF
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 20603 .loc 2 878 0
+ 20604 12962 660F6F05 movdqa vec_0F(%rip), %xmm0
+ 20604 00000000
+ 20605 1296a F30F6F8D movdqu -560(%rbp), %xmm1
+ 20605 D0FDFFFF
+ 20606 12972 F30F7F8D movdqu %xmm1, -192(%rbp)
+ 20606 40FFFFFF
+ 20607 1297a F30F7F85 movdqu %xmm0, -208(%rbp)
+ 20607 30FFFFFF
+ 20608 .LBB4736:
+ 20609 .LBB4737:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 & v2;
+ 20610 .loc 2 206 0
+ 20611 12982 F30F6F85 movdqu -208(%rbp), %xmm0
+ 20611 30FFFFFF
+ 20612 1298a F30F6F8D movdqu -192(%rbp), %xmm1
+ 20612 40FFFFFF
+ 20613 12992 660FDBC1 pand %xmm1, %xmm0
+ 20614 .LBE4737:
+ 20615 .LBE4736:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 20616 .loc 2 878 0
+ 20617 12996 F30F7F85 movdqu %xmm0, -560(%rbp)
+ 20617 D0FDFFFF
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** for (ix = 0; ix < sizeof (state); ++ix)
+ 20618 .loc 2 866 0
+ 20619 1299e 8385ACFD addl $1, -596(%rbp)
+ 20619 FFFF01
+ 20620 .L356:
+ 20621 129a5 83BDACFD cmpl $15, -596(%rbp)
+ 20621 FFFF0F
+ 20622 129ac 0F8635FE jbe .L357
+ 20622 FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return out;
+ 20623 .loc 2 882 0
+ 20624 129b2 F30F6F85 movdqu -592(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 620
+
+
+ 20624 B0FDFFFF
+ 20625 .LBE4715:
+ 20626 .LBE4714:
+ 20627 .LBE4713:
+ 20628 .LBE4712:
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvSubBytes) (state);
+ 20629 .loc 2 2243 0
+ 20630 129ba F30F7F85 movdqu %xmm0, -672(%rbp)
+ 20630 60FDFFFF
+ 20631 .LBB4738:
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+ 20632 .loc 2 2245 0
+ 20633 129c2 F30F6F85 movdqu -672(%rbp), %xmm0
+ 20633 60FDFFFF
+ 20634 129ca F30F7F85 movdqu %xmm0, -3136(%rbp)
+ 20634 C0F3FFFF
+ 20635 129d2 E8000000 call KDbgWriterGet at PLT
+ 20635 00
+ 20636 129d7 4885C0 testq %rax, %rax
+ 20637 129da 7479 je .L359
+ 20638 129dc BF030000 movl $3, %edi
+ 20638 00
+ 20639 129e1 E8000000 call KDbgCondToFlag at PLT
+ 20639 00
+ 20640 129e6 4889C6 movq %rax, %rsi
+ 20641 129e9 BF100000 movl $16, %edi
+ 20641 00
+ 20642 129ee E8000000 call KDbgTestModConds at PLT
+ 20642 00
+ 20643 129f3 84C0 testb %al, %al
+ 20644 129f5 745E je .L359
+ 20645 129f7 8B85CCF3 movl -3124(%rbp), %eax
+ 20645 FFFF
+ 20646 129fd 89C7 movl %eax, %edi
+ 20647 129ff E8FCD5FE call bswap_32
+ 20647 FF
+ 20648 12a04 4189C5 movl %eax, %r13d
+ 20649 12a07 8B85C8F3 movl -3128(%rbp), %eax
+ 20649 FFFF
+ 20650 12a0d 89C7 movl %eax, %edi
+ 20651 12a0f E8ECD5FE call bswap_32
+ 20651 FF
+ 20652 12a14 4189C4 movl %eax, %r12d
+ 20653 12a17 8B85C4F3 movl -3132(%rbp), %eax
+ 20653 FFFF
+ 20654 12a1d 89C7 movl %eax, %edi
+ 20655 12a1f E8DCD5FE call bswap_32
+ 20655 FF
+ 20656 12a24 89C3 movl %eax, %ebx
+ 20657 12a26 8B85C0F3 movl -3136(%rbp), %eax
+ 20657 FFFF
+ 20658 12a2c 89C7 movl %eax, %edi
+ 20659 12a2e E8CDD5FE call bswap_32
+ 20659 FF
+ 20660 12a33 4589E9 movl %r13d, %r9d
+ 20661 12a36 4589E0 movl %r12d, %r8d
+ 20662 12a39 89D9 movl %ebx, %ecx
+
GAS LISTING /tmp/ccjbMjHD.s page 621
+
+
+ 20663 12a3b 89C2 movl %eax, %edx
+ 20664 12a3d 488D3500 leaq .LC15(%rip), %rsi
+ 20664 000000
+ 20665 12a44 488D3D00 leaq .LC1(%rip), %rdi
+ 20665 000000
+ 20666 12a4b B8000000 movl $0, %eax
+ 20666 00
+ 20667 12a50 E8000000 call KDbgMsg at PLT
+ 20667 00
+ 20668 .L359:
+ 20669 12a55 F30F6F85 movdqu -672(%rbp), %xmm0
+ 20669 60FDFFFF
+ 20670 12a5d F30F7F85 movdqu %xmm0, -176(%rbp)
+ 20670 50FFFFFF
+ 20671 .LBE4738:
+ 20672 .LBB4739:
+ 20673 .LBB4740:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 20674 .loc 2 612 0
+ 20675 12a65 660F6F05 movdqa InvShiftRowTable.7367(%rip), %xmm0
+ 20675 00000000
+ 20676 12a6d F30F6F8D movdqu -176(%rbp), %xmm1
+ 20676 50FFFFFF
+ 20677 12a75 F30F7F8D movdqu %xmm1, -144(%rbp)
+ 20677 70FFFFFF
+ 20678 12a7d F30F7F85 movdqu %xmm0, -160(%rbp)
+ 20678 60FFFFFF
+ 20679 12a85 F30F6F85 movdqu -144(%rbp), %xmm0
+ 20679 70FFFFFF
+ 20680 12a8d F30F7F45 movdqu %xmm0, -112(%rbp)
+ 20680 90
+ 20681 12a92 F30F6F85 movdqu -160(%rbp), %xmm0
+ 20681 60FFFFFF
+ 20682 12a9a F30F7F45 movdqu %xmm0, -128(%rbp)
+ 20682 80
+ 20683 .LBB4741:
+ 20684 .LBB4742:
+ 20685 .LBB4743:
+ 20686 .LBB4744:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 20687 .loc 3 529 0
+ 20688 12a9f F30F6F4D movdqu -128(%rbp), %xmm1
+ 20688 80
+ 20689 12aa4 F30F6F45 movdqu -112(%rbp), %xmm0
+ 20689 90
+ 20690 12aa9 660F3800 pshufb %xmm1, %xmm0
+ 20690 C1
+ 20691 .LBE4744:
+ 20692 .LBE4743:
+ 20693 .LBE4742:
+ 20694 .LBE4741:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 20695 .loc 2 612 0
+ 20696 12aae F30F7F85 movdqu %xmm0, -176(%rbp)
+ 20696 50FFFFFF
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20697 .loc 2 613 0
+
GAS LISTING /tmp/ccjbMjHD.s page 622
+
+
+ 20698 12ab6 F30F6F85 movdqu -176(%rbp), %xmm0
+ 20698 50FFFFFF
+ 20699 .LBE4740:
+ 20700 .LBE4739:
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(InvShiftRows) (state);
+ 20701 .loc 2 2247 0
+ 20702 12abe F30F7F85 movdqu %xmm0, -672(%rbp)
+ 20702 60FDFFFF
+ 20703 .LBB4745:
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+ 20704 .loc 2 2249 0
+ 20705 12ac6 F30F6F85 movdqu -672(%rbp), %xmm0
+ 20705 60FDFFFF
+ 20706 12ace F30F7F85 movdqu %xmm0, -3152(%rbp)
+ 20706 B0F3FFFF
+ 20707 12ad6 E8000000 call KDbgWriterGet at PLT
+ 20707 00
+ 20708 12adb 4885C0 testq %rax, %rax
+ 20709 12ade 7479 je .L361
+ 20710 12ae0 BF030000 movl $3, %edi
+ 20710 00
+ 20711 12ae5 E8000000 call KDbgCondToFlag at PLT
+ 20711 00
+ 20712 12aea 4889C6 movq %rax, %rsi
+ 20713 12aed BF100000 movl $16, %edi
+ 20713 00
+ 20714 12af2 E8000000 call KDbgTestModConds at PLT
+ 20714 00
+ 20715 12af7 84C0 testb %al, %al
+ 20716 12af9 745E je .L361
+ 20717 12afb 8B85BCF3 movl -3140(%rbp), %eax
+ 20717 FFFF
+ 20718 12b01 89C7 movl %eax, %edi
+ 20719 12b03 E8F8D4FE call bswap_32
+ 20719 FF
+ 20720 12b08 4189C5 movl %eax, %r13d
+ 20721 12b0b 8B85B8F3 movl -3144(%rbp), %eax
+ 20721 FFFF
+ 20722 12b11 89C7 movl %eax, %edi
+ 20723 12b13 E8E8D4FE call bswap_32
+ 20723 FF
+ 20724 12b18 4189C4 movl %eax, %r12d
+ 20725 12b1b 8B85B4F3 movl -3148(%rbp), %eax
+ 20725 FFFF
+ 20726 12b21 89C7 movl %eax, %edi
+ 20727 12b23 E8D8D4FE call bswap_32
+ 20727 FF
+ 20728 12b28 89C3 movl %eax, %ebx
+ 20729 12b2a 8B85B0F3 movl -3152(%rbp), %eax
+ 20729 FFFF
+ 20730 12b30 89C7 movl %eax, %edi
+ 20731 12b32 E8C9D4FE call bswap_32
+ 20731 FF
+ 20732 12b37 4589E9 movl %r13d, %r9d
+ 20733 12b3a 4589E0 movl %r12d, %r8d
+ 20734 12b3d 89D9 movl %ebx, %ecx
+ 20735 12b3f 89C2 movl %eax, %edx
+
GAS LISTING /tmp/ccjbMjHD.s page 623
+
+
+ 20736 12b41 488D3500 leaq .LC16(%rip), %rsi
+ 20736 000000
+ 20737 12b48 488D3D00 leaq .LC1(%rip), %rdi
+ 20737 000000
+ 20738 12b4f B8000000 movl $0, %eax
+ 20738 00
+ 20739 12b54 E8000000 call KDbgMsg at PLT
+ 20739 00
+ 20740 .L361:
+ 20741 12b59 F30F6F85 movdqu -672(%rbp), %xmm0
+ 20741 60FDFFFF
+ 20742 12b61 F30F7F45 movdqu %xmm0, -80(%rbp)
+ 20742 B0
+ 20743 12b66 F30F6F85 movdqu -688(%rbp), %xmm0
+ 20743 50FDFFFF
+ 20744 12b6e F30F7F45 movdqu %xmm0, -96(%rbp)
+ 20744 A0
+ 20745 12b73 F30F6F45 movdqu -80(%rbp), %xmm0
+ 20745 B0
+ 20746 12b78 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 20746 D0
+ 20747 12b7d F30F6F45 movdqu -96(%rbp), %xmm0
+ 20747 A0
+ 20748 12b82 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 20748 C0
+ 20749 .LBE4745:
+ 20750 .LBB4746:
+ 20751 .LBB4747:
+ 20752 .LBB4748:
+ 20753 .LBB4749:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return v1 ^ v2;
+ 20754 .loc 2 178 0
+ 20755 12b87 F30F6F45 movdqu -64(%rbp), %xmm0
+ 20755 C0
+ 20756 12b8c F30F6F4D movdqu -48(%rbp), %xmm1
+ 20756 D0
+ 20757 12b91 660FEFC1 pxor %xmm1, %xmm0
+ 20758 .LBE4749:
+ 20759 .LBE4748:
+ 20760 .LBE4747:
+ 20761 .LBE4746:
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 20762 .loc 2 2251 0
+ 20763 12b95 F30F7F85 movdqu %xmm0, -672(%rbp)
+ 20763 60FDFFFF
+ 20764 .LBB4750:
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 20765 .loc 2 2253 0
+ 20766 12b9d F30F6F85 movdqu -688(%rbp), %xmm0
+ 20766 50FDFFFF
+ 20767 12ba5 F30F7F85 movdqu %xmm0, -3168(%rbp)
+ 20767 A0F3FFFF
+ 20768 12bad E8000000 call KDbgWriterGet at PLT
+ 20768 00
+ 20769 12bb2 4885C0 testq %rax, %rax
+ 20770 12bb5 7479 je .L363
+ 20771 12bb7 BF030000 movl $3, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 624
+
+
+ 20771 00
+ 20772 12bbc E8000000 call KDbgCondToFlag at PLT
+ 20772 00
+ 20773 12bc1 4889C6 movq %rax, %rsi
+ 20774 12bc4 BF100000 movl $16, %edi
+ 20774 00
+ 20775 12bc9 E8000000 call KDbgTestModConds at PLT
+ 20775 00
+ 20776 12bce 84C0 testb %al, %al
+ 20777 12bd0 745E je .L363
+ 20778 12bd2 8B85ACF3 movl -3156(%rbp), %eax
+ 20778 FFFF
+ 20779 12bd8 89C7 movl %eax, %edi
+ 20780 12bda E821D4FE call bswap_32
+ 20780 FF
+ 20781 12bdf 4189C5 movl %eax, %r13d
+ 20782 12be2 8B85A8F3 movl -3160(%rbp), %eax
+ 20782 FFFF
+ 20783 12be8 89C7 movl %eax, %edi
+ 20784 12bea E811D4FE call bswap_32
+ 20784 FF
+ 20785 12bef 4189C4 movl %eax, %r12d
+ 20786 12bf2 8B85A4F3 movl -3164(%rbp), %eax
+ 20786 FFFF
+ 20787 12bf8 89C7 movl %eax, %edi
+ 20788 12bfa E801D4FE call bswap_32
+ 20788 FF
+ 20789 12bff 89C3 movl %eax, %ebx
+ 20790 12c01 8B85A0F3 movl -3168(%rbp), %eax
+ 20790 FFFF
+ 20791 12c07 89C7 movl %eax, %edi
+ 20792 12c09 E8F2D3FE call bswap_32
+ 20792 FF
+ 20793 12c0e 4589E9 movl %r13d, %r9d
+ 20794 12c11 4589E0 movl %r12d, %r8d
+ 20795 12c14 89D9 movl %ebx, %ecx
+ 20796 12c16 89C2 movl %eax, %edx
+ 20797 12c18 488D3500 leaq .LC9(%rip), %rsi
+ 20797 000000
+ 20798 12c1f 488D3D00 leaq .LC1(%rip), %rdi
+ 20798 000000
+ 20799 12c26 B8000000 movl $0, %eax
+ 20799 00
+ 20800 12c2b E8000000 call KDbgMsg at PLT
+ 20800 00
+ 20801 .L363:
+ 20802 .LBE4750:
+ 20803 .LBB4751:
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 20804 .loc 2 2254 0
+ 20805 12c30 F30F6F85 movdqu -672(%rbp), %xmm0
+ 20805 60FDFFFF
+ 20806 12c38 F30F7F85 movdqu %xmm0, -3184(%rbp)
+ 20806 90F3FFFF
+ 20807 12c40 E8000000 call KDbgWriterGet at PLT
+ 20807 00
+ 20808 12c45 4885C0 testq %rax, %rax
+
GAS LISTING /tmp/ccjbMjHD.s page 625
+
+
+ 20809 12c48 7479 je .L365
+ 20810 12c4a BF030000 movl $3, %edi
+ 20810 00
+ 20811 12c4f E8000000 call KDbgCondToFlag at PLT
+ 20811 00
+ 20812 12c54 4889C6 movq %rax, %rsi
+ 20813 12c57 BF100000 movl $16, %edi
+ 20813 00
+ 20814 12c5c E8000000 call KDbgTestModConds at PLT
+ 20814 00
+ 20815 12c61 84C0 testb %al, %al
+ 20816 12c63 745E je .L365
+ 20817 12c65 8B859CF3 movl -3172(%rbp), %eax
+ 20817 FFFF
+ 20818 12c6b 89C7 movl %eax, %edi
+ 20819 12c6d E88ED3FE call bswap_32
+ 20819 FF
+ 20820 12c72 4189C5 movl %eax, %r13d
+ 20821 12c75 8B8598F3 movl -3176(%rbp), %eax
+ 20821 FFFF
+ 20822 12c7b 89C7 movl %eax, %edi
+ 20823 12c7d E87ED3FE call bswap_32
+ 20823 FF
+ 20824 12c82 4189C4 movl %eax, %r12d
+ 20825 12c85 8B8594F3 movl -3180(%rbp), %eax
+ 20825 FFFF
+ 20826 12c8b 89C7 movl %eax, %edi
+ 20827 12c8d E86ED3FE call bswap_32
+ 20827 FF
+ 20828 12c92 89C3 movl %eax, %ebx
+ 20829 12c94 8B8590F3 movl -3184(%rbp), %eax
+ 20829 FFFF
+ 20830 12c9a 89C7 movl %eax, %edi
+ 20831 12c9c E85FD3FE call bswap_32
+ 20831 FF
+ 20832 12ca1 4589E9 movl %r13d, %r9d
+ 20833 12ca4 4589E0 movl %r12d, %r8d
+ 20834 12ca7 89D9 movl %ebx, %ecx
+ 20835 12ca9 89C2 movl %eax, %edx
+ 20836 12cab 488D3500 leaq .LC14(%rip), %rsi
+ 20836 000000
+ 20837 12cb2 488D3D00 leaq .LC1(%rip), %rdi
+ 20837 000000
+ 20838 12cb9 B8000000 movl $0, %eax
+ 20838 00
+ 20839 12cbe E8000000 call KDbgMsg at PLT
+ 20839 00
+ 20840 .L365:
+ 20841 .LBE4751:
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 20842 .loc 2 2256 0
+ 20843 12cc3 F30F6F85 movdqu -672(%rbp), %xmm0
+ 20843 60FDFFFF
+ 20844 .LBE4710:
+ 20845 .LBE4709:
+2280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20846 .loc 2 2280 0
+
GAS LISTING /tmp/ccjbMjHD.s page 626
+
+
+ 20847 12ccb 4881C408 addq $3592, %rsp
+ 20847 0E0000
+ 20848 12cd2 5B popq %rbx
+ 20849 12cd3 415C popq %r12
+ 20850 12cd5 415D popq %r13
+ 20851 12cd7 C9 leave
+ 20852 12cd8 C3 ret
+ 20853 .cfi_endproc
+ 20854 .LFE659:
+ 20855 .size KAESBlockCipherVecRegEqInvCipher, .-KAESBlockCipherVecRegEqInvCipher
+ 20856 .section .rodata
+ 20857 .type KAESBlockCipherVecRegaes_ncbi_name, @object
+ 20858 .size KAESBlockCipherVecRegaes_ncbi_name, 10
+ 20859 KAESBlockCipherVecRegaes_ncbi_name:
+ 20860 046c 4145535F .string "AES_CLASS"
+ 20860 434C4153
+ 20860 5300
+ 20861 .text
+ 20862 .type KAESBlockCipherVecRegDestroy, @function
+ 20863 KAESBlockCipherVecRegDestroy:
+ 20864 .LFB660:
+2281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+2284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This section of the file is the use of the cipher defined above within
+2285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * our BlockCipherObject.
+2286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * These are the functions that will be directly referenced in the vector
+2288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * table for the block cipher. These are not specifically derived from
+2289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the FIPS-197 document.
+2290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-impl.h"
+2292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** typedef struct AES_CLASS AES_CLASS;
+2294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const char AESBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+2296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Destroy
+2300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+2301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * to create this key (key schedule)
+2302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+2304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+2305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(Destroy) (const BLOCKCIPHER_VEC_IMPL * self)
+2308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20865 .loc 2 2308 0
+ 20866 .cfi_startproc
+ 20867 12cd9 55 pushq %rbp
+ 20868 .LCFI20:
+ 20869 .cfi_def_cfa_offset 16
+ 20870 12cda 4889E5 movq %rsp, %rbp
+ 20871 .cfi_offset 6, -16
+ 20872 .LCFI21:
+
GAS LISTING /tmp/ccjbMjHD.s page 627
+
+
+ 20873 .cfi_def_cfa_register 6
+ 20874 12cdd 48897DF8 movq %rdi, -8(%rbp)
+2309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* we use a constant object so do nothing */
+2310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20875 .loc 2 2310 0
+ 20876 12ce1 C9 leave
+ 20877 12ce2 C3 ret
+ 20878 .cfi_endproc
+ 20879 .LFE660:
+ 20880 .size KAESBlockCipherVecRegDestroy, .-KAESBlockCipherVecRegDestroy
+ 20881 .type KAESBlockCipherVecRegBlockSize, @function
+ 20882 KAESBlockCipherVecRegBlockSize:
+ 20883 .LFB661:
+2311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * BlockSize
+2315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(BlockSize) ()
+2318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20884 .loc 2 2318 0
+ 20885 .cfi_startproc
+ 20886 12ce3 55 pushq %rbp
+ 20887 .LCFI22:
+ 20888 .cfi_def_cfa_offset 16
+ 20889 12ce4 4889E5 movq %rsp, %rbp
+ 20890 .cfi_offset 6, -16
+ 20891 .LCFI23:
+ 20892 .cfi_def_cfa_register 6
+2319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (uint32_t) sizeof (AESBlock);
+ 20893 .loc 2 2319 0
+ 20894 12ce7 B8100000 movl $16, %eax
+ 20894 00
+2320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20895 .loc 2 2320 0
+ 20896 12cec C9 leave
+ 20897 12ced C3 ret
+ 20898 .cfi_endproc
+ 20899 .LFE661:
+ 20900 .size KAESBlockCipherVecRegBlockSize, .-KAESBlockCipherVecRegBlockSize
+ 20901 .type KAESBlockCipherVecRegKeySize, @function
+ 20902 KAESBlockCipherVecRegKeySize:
+ 20903 .LFB662:
+2321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * KeySize
+2325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+2326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * to create this key (key schedule)
+2327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+2329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+2330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(KeySize) ()
+2333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+
GAS LISTING /tmp/ccjbMjHD.s page 628
+
+
+ 20904 .loc 2 2333 0
+ 20905 .cfi_startproc
+ 20906 12cee 55 pushq %rbp
+ 20907 .LCFI24:
+ 20908 .cfi_def_cfa_offset 16
+ 20909 12cef 4889E5 movq %rsp, %rbp
+ 20910 .cfi_offset 6, -16
+ 20911 .LCFI25:
+ 20912 .cfi_def_cfa_register 6
+2334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return (uint32_t) sizeof (AESKeySchedule);
+ 20913 .loc 2 2334 0
+ 20914 12cf2 B8000100 movl $256, %eax
+ 20914 00
+2335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20915 .loc 2 2335 0
+ 20916 12cf7 C9 leave
+ 20917 12cf8 C3 ret
+ 20918 .cfi_endproc
+ 20919 .LFE662:
+ 20920 .size KAESBlockCipherVecRegKeySize, .-KAESBlockCipherVecRegKeySize
+ 20921 .section .rodata
+ 20922 0476 0000 .align 8
+ 20923 .LC18:
+ 20924 0478 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 20924 652F726F
+ 20924 6461726D
+ 20924 65722F73
+ 20924 72615F73
+ 20925 .text
+ 20926 .type KAESBlockCipherVecRegSetEncryptKey, @function
+ 20927 KAESBlockCipherVecRegSetEncryptKey:
+ 20928 .LFB663:
+2336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SetEncryptKey
+2340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The KCipher calls this to have the block cipher build an encryption
+2341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * key in the KCipher object
+2342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+2346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t user_key_size)
+2347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20929 .loc 2 2347 0
+ 20930 .cfi_startproc
+ 20931 12cf9 55 pushq %rbp
+ 20932 .LCFI26:
+ 20933 .cfi_def_cfa_offset 16
+ 20934 12cfa 4889E5 movq %rsp, %rbp
+ 20935 .cfi_offset 6, -16
+ 20936 .LCFI27:
+ 20937 .cfi_def_cfa_register 6
+ 20938 12cfd 4883EC30 subq $48, %rsp
+ 20939 12d01 48897DE8 movq %rdi, -24(%rbp)
+ 20940 12d05 488975E0 movq %rsi, -32(%rbp)
+ 20941 12d09 8955DC movl %edx, -36(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 629
+
+
+2348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t rc;
+2349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESKeySchedule * key;
+2350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = 0;
+ 20942 .loc 2 2351 0
+ 20943 12d0c C745F400 movl $0, -12(%rbp)
+ 20943 000000
+2352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key = encrypt_key;
+ 20944 .loc 2 2352 0
+ 20945 12d13 488B45E8 movq -24(%rbp), %rax
+ 20946 12d17 488945F8 movq %rax, -8(%rbp)
+2353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (user_key_size)
+ 20947 .loc 2 2354 0
+ 20948 12d1b 8B45DC movl -36(%rbp), %eax
+ 20949 12d1e 83F818 cmpl $24, %eax
+ 20950 12d21 7430 je .L376
+ 20951 12d23 83F820 cmpl $32, %eax
+ 20952 12d26 744E je .L377
+ 20953 12d28 83F810 cmpl $16, %eax
+ 20954 12d2b 756C jne .L380
+ 20955 .L375:
+2355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nk_128 * sizeof (AESWord):
+2357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_128;
+ 20956 .loc 2 2357 0
+ 20957 12d2d 488B45F8 movq -8(%rbp), %rax
+ 20958 12d31 C780F000 movl $10, 240(%rax)
+ 20958 00000A00
+ 20958 0000
+2358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+ 20959 .loc 2 2358 0
+ 20960 12d3b 488B55E0 movq -32(%rbp), %rdx
+ 20961 12d3f 488B45F8 movq -8(%rbp), %rax
+ 20962 12d43 4889D6 movq %rdx, %rsi
+ 20963 12d46 4889C7 movq %rax, %rdi
+ 20964 12d49 E8C6D2FE call KAESBlockCipherVecRegKeyExpansion128
+ 20964 FF
+2359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 20965 .loc 2 2359 0
+ 20966 12d4e E98A0000 jmp .L378
+ 20966 00
+ 20967 .L376:
+2360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nk_192 * sizeof (AESWord):
+2362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_192;
+ 20968 .loc 2 2362 0
+ 20969 12d53 488B45F8 movq -8(%rbp), %rax
+ 20970 12d57 C780F000 movl $12, 240(%rax)
+ 20970 00000C00
+ 20970 0000
+2363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+ 20971 .loc 2 2363 0
+ 20972 12d61 488B55E0 movq -32(%rbp), %rdx
+ 20973 12d65 488B45F8 movq -8(%rbp), %rax
+ 20974 12d69 4889D6 movq %rdx, %rsi
+ 20975 12d6c 4889C7 movq %rax, %rdi
+
GAS LISTING /tmp/ccjbMjHD.s page 630
+
+
+ 20976 12d6f E87B27FF call KAESBlockCipherVecRegKeyExpansion192
+ 20976 FF
+2364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 20977 .loc 2 2364 0
+ 20978 12d74 EB67 jmp .L378
+ 20979 .L377:
+2365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nk_256 * sizeof (AESWord):
+2367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = AES_Nr_256;
+ 20980 .loc 2 2367 0
+ 20981 12d76 488B45F8 movq -8(%rbp), %rax
+ 20982 12d7a C780F000 movl $14, 240(%rax)
+ 20982 00000E00
+ 20982 0000
+2368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+ 20983 .loc 2 2368 0
+ 20984 12d84 488B55E0 movq -32(%rbp), %rdx
+ 20985 12d88 488B45F8 movq -8(%rbp), %rax
+ 20986 12d8c 4889D6 movq %rdx, %rsi
+ 20987 12d8f 4889C7 movq %rax, %rdi
+ 20988 12d92 E8E668FF call KAESBlockCipherVecRegKeyExpansion256
+ 20988 FF
+2369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 20989 .loc 2 2369 0
+ 20990 12d97 EB44 jmp .L378
+ 20991 .L380:
+2370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** default:
+2372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key->number_of_rounds = 0;
+ 20992 .loc 2 2372 0
+ 20993 12d99 488B45F8 movq -8(%rbp), %rax
+ 20994 12d9d C780F000 movl $0, 240(%rax)
+ 20994 00000000
+ 20994 0000
+2373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** memset (key, 0, sizeof (*key));
+ 20995 .loc 2 2373 0
+ 20996 12da7 488B45F8 movq -8(%rbp), %rax
+ 20997 12dab BA000100 movl $256, %edx
+ 20997 00
+ 20998 12db0 BE000000 movl $0, %esi
+ 20998 00
+ 20999 12db5 4889C7 movq %rax, %rdi
+ 21000 12db8 E8000000 call memset at PLT
+ 21000 00
+2374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+ 21001 .loc 2 2374 0
+ 21002 12dbd B9460900 movl $2374, %ecx
+ 21002 00
+ 21003 12dc2 488D1500 leaq __func__.9027(%rip), %rdx
+ 21003 000000
+ 21004 12dc9 488D3500 leaq .LC18(%rip), %rsi
+ 21004 000000
+ 21005 12dd0 BFCA8F04 movl $-2029744182, %edi
+ 21005 87
+ 21006 12dd5 E8000000 call SetRCFileFuncLine at PLT
+ 21006 00
+ 21007 12dda 8945F4 movl %eax, -12(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s page 631
+
+
+ 21008 .L378:
+2375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+ 21009 .loc 2 2377 0
+ 21010 12ddd 8B45F4 movl -12(%rbp), %eax
+2378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21011 .loc 2 2378 0
+ 21012 12de0 C9 leave
+ 21013 12de1 C3 ret
+ 21014 .cfi_endproc
+ 21015 .LFE663:
+ 21016 .size KAESBlockCipherVecRegSetEncryptKey, .-KAESBlockCipherVecRegSetEncryptKey
+ 21017 .type KAESBlockCipherVecRegSetDecryptKey, @function
+ 21018 KAESBlockCipherVecRegSetDecryptKey:
+ 21019 .LFB664:
+2379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * SetDecryptKey
+2383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The KCipher calls this to have the block cipher build an decryption
+2384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * key in the KCipher object
+2385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetDecryptKey) (void * decrypt_key,
+2389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const char * user_key,
+2390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t user_key_size)
+2391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 21020 .loc 2 2391 0
+ 21021 .cfi_startproc
+ 21022 12de2 55 pushq %rbp
+ 21023 .LCFI28:
+ 21024 .cfi_def_cfa_offset 16
+ 21025 12de3 4889E5 movq %rsp, %rbp
+ 21026 .cfi_offset 6, -16
+ 21027 .LCFI29:
+ 21028 .cfi_def_cfa_register 6
+ 21029 12de6 4881EC30 subq $304, %rsp
+ 21029 010000
+ 21030 12ded 4889BDE8 movq %rdi, -280(%rbp)
+ 21030 FEFFFF
+ 21031 12df4 4889B5E0 movq %rsi, -288(%rbp)
+ 21031 FEFFFF
+ 21032 12dfb 8995DCFE movl %edx, -292(%rbp)
+ 21032 FFFF
+2392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESKeySchedule encrypt_key;
+2393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t rc;
+2394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+ 21033 .loc 2 2395 0
+ 21034 12e01 8B95DCFE movl -292(%rbp), %edx
+ 21034 FFFF
+ 21035 12e07 488B8DE0 movq -288(%rbp), %rcx
+ 21035 FEFFFF
+ 21036 12e0e 488D85F0 leaq -272(%rbp), %rax
+ 21036 FEFFFF
+
GAS LISTING /tmp/ccjbMjHD.s page 632
+
+
+ 21037 12e15 4889CE movq %rcx, %rsi
+ 21038 12e18 4889C7 movq %rax, %rdi
+ 21039 12e1b E8D9FEFF call KAESBlockCipherVecRegSetEncryptKey
+ 21039 FF
+ 21040 12e20 8945F4 movl %eax, -12(%rbp)
+2396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (rc == 0)
+ 21041 .loc 2 2396 0
+ 21042 12e23 837DF400 cmpl $0, -12(%rbp)
+ 21043 12e27 7577 jne .L382
+ 21044 .LBB4752:
+2397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESKeySchedule * key;
+2399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** key = decrypt_key;
+ 21045 .loc 2 2400 0
+ 21046 12e29 488B85E8 movq -280(%rbp), %rax
+ 21046 FEFFFF
+ 21047 12e30 488945F8 movq %rax, -8(%rbp)
+2401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+ 21048 .loc 2 2402 0
+ 21049 12e34 8B55E0 movl -32(%rbp), %edx
+ 21050 12e37 488B45F8 movq -8(%rbp), %rax
+ 21051 12e3b 8990F000 movl %edx, 240(%rax)
+ 21051 0000
+ 21052 12e41 488B45F8 movq -8(%rbp), %rax
+ 21053 12e45 8B80F000 movl 240(%rax), %eax
+ 21053 0000
+ 21054 12e4b 83F80C cmpl $12, %eax
+ 21055 12e4e 7422 je .L384
+ 21056 12e50 83F80E cmpl $14, %eax
+ 21057 12e53 7435 je .L385
+ 21058 12e55 83F80A cmpl $10, %eax
+ 21059 12e58 7546 jne .L382
+ 21060 .L383:
+2403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_128:
+2405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+ 21061 .loc 2 2405 0
+ 21062 12e5a 488B45F8 movq -8(%rbp), %rax
+ 21063 12e5e 488D95F0 leaq -272(%rbp), %rdx
+ 21063 FEFFFF
+ 21064 12e65 4889D6 movq %rdx, %rsi
+ 21065 12e68 4889C7 movq %rax, %rdi
+ 21066 12e6b E8C9C5FF call KAESBlockCipherVecRegEqInvKeyExpansion128
+ 21066 FF
+2406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** encrypt_key.round_keys);
+2407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 21067 .loc 2 2407 0
+ 21068 12e70 EB2E jmp .L382
+ 21069 .L384:
+2408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_192:
+2410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+ 21070 .loc 2 2410 0
+ 21071 12e72 488B45F8 movq -8(%rbp), %rax
+ 21072 12e76 488D95F0 leaq -272(%rbp), %rdx
+
GAS LISTING /tmp/ccjbMjHD.s page 633
+
+
+ 21072 FEFFFF
+ 21073 12e7d 4889D6 movq %rdx, %rsi
+ 21074 12e80 4889C7 movq %rax, %rdi
+ 21075 12e83 E8DBC5FF call KAESBlockCipherVecRegEqInvKeyExpansion192
+ 21075 FF
+2411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** encrypt_key.round_keys);
+2412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 21076 .loc 2 2412 0
+ 21077 12e88 EB16 jmp .L382
+ 21078 .L385:
+2413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_256:
+2415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+ 21079 .loc 2 2415 0
+ 21080 12e8a 488B45F8 movq -8(%rbp), %rax
+ 21081 12e8e 488D95F0 leaq -272(%rbp), %rdx
+ 21081 FEFFFF
+ 21082 12e95 4889D6 movq %rdx, %rsi
+ 21083 12e98 4889C7 movq %rax, %rdi
+ 21084 12e9b E8EDC5FF call KAESBlockCipherVecRegEqInvKeyExpansion256
+ 21084 FF
+ 21085 .L382:
+ 21086 .LBE4752:
+2416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** encrypt_key.round_keys);
+2417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+ 21087 .loc 2 2420 0
+ 21088 12ea0 8B45F4 movl -12(%rbp), %eax
+2421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21089 .loc 2 2421 0
+ 21090 12ea3 C9 leave
+ 21091 12ea4 C3 ret
+ 21092 .cfi_endproc
+ 21093 .LFE664:
+ 21094 .size KAESBlockCipherVecRegSetDecryptKey, .-KAESBlockCipherVecRegSetDecryptKey
+ 21095 .section .rodata
+ 21096 .LC19:
+ 21097 04ae 6B657900 .string "key"
+ 21098 .text
+ 21099 .type KAESBlockCipherVecRegEncrypt, @function
+ 21100 KAESBlockCipherVecRegEncrypt:
+ 21101 .LFB665:
+2422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Encrypt
+2426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Perform an encryption of a single block. Chained modes and stream
+2428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * cipher modes will call this multiple times.
+2429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Encrypt) (CipherVec state,
+2433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const void * encrypt_key)
+2434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+
GAS LISTING /tmp/ccjbMjHD.s page 634
+
+
+ 21102 .loc 2 2434 0
+ 21103 .cfi_startproc
+ 21104 12ea5 55 pushq %rbp
+ 21105 .LCFI30:
+ 21106 .cfi_def_cfa_offset 16
+ 21107 12ea6 4889E5 movq %rsp, %rbp
+ 21108 .cfi_offset 6, -16
+ 21109 .LCFI31:
+ 21110 .cfi_def_cfa_register 6
+ 21111 12ea9 4883EC30 subq $48, %rsp
+ 21112 12ead 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21112 E0
+ 21113 12eb2 48897DD8 movq %rdi, -40(%rbp)
+2435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESKeySchedule * key = encrypt_key;
+ 21114 .loc 2 2435 0
+ 21115 12eb6 488B45D8 movq -40(%rbp), %rax
+ 21116 12eba 488945F8 movq %rax, -8(%rbp)
+2436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (key);
+ 21117 .loc 2 2436 0
+ 21118 12ebe 48837DF8 cmpq $0, -8(%rbp)
+ 21118 00
+ 21119 12ec3 751F jne .L388
+ 21120 12ec5 488D0D00 leaq __PRETTY_FUNCTION__.9063(%rip), %rcx
+ 21120 000000
+ 21121 12ecc BA840900 movl $2436, %edx
+ 21121 00
+ 21122 12ed1 488D3500 leaq .LC18(%rip), %rsi
+ 21122 000000
+ 21123 12ed8 488D3D00 leaq .LC19(%rip), %rdi
+ 21123 000000
+ 21124 12edf E8000000 call __assert_fail at PLT
+ 21124 00
+ 21125 .L388:
+2437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds)
+ 21126 .loc 2 2438 0
+ 21127 12ee4 488B45F8 movq -8(%rbp), %rax
+ 21128 12ee8 8B80F000 movl 240(%rax), %eax
+ 21128 0000
+ 21129 12eee 83F80C cmpl $12, %eax
+ 21130 12ef1 7436 je .L391
+ 21131 12ef3 83F80E cmpl $14, %eax
+ 21132 12ef6 744E je .L392
+ 21133 12ef8 83F80A cmpl $10, %eax
+ 21134 12efb 740F je .L390
+2439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** default:
+2441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = vec_00;
+ 21135 .loc 2 2441 0
+ 21136 12efd 660F6F05 movdqa vec_00(%rip), %xmm0
+ 21136 00000000
+ 21137 12f05 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21137 E0
+2442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 21138 .loc 2 2442 0
+ 21139 12f0a EB55 jmp .L393
+ 21140 .L390:
+
GAS LISTING /tmp/ccjbMjHD.s page 635
+
+
+2443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_128:
+2445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+ 21141 .loc 2 2445 0
+ 21142 12f0c 488B45F8 movq -8(%rbp), %rax
+ 21143 12f10 660F6F45 movdqa -32(%rbp), %xmm0
+ 21143 E0
+ 21144 12f15 BE0A0000 movl $10, %esi
+ 21144 00
+ 21145 12f1a 4889C7 movq %rax, %rdi
+ 21146 12f1d E895C5FF call KAESBlockCipherVecRegCipher
+ 21146 FF
+ 21147 12f22 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21147 E0
+2446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 21148 .loc 2 2446 0
+ 21149 12f27 EB38 jmp .L393
+ 21150 .L391:
+2447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_192:
+2449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+ 21151 .loc 2 2449 0
+ 21152 12f29 488B45F8 movq -8(%rbp), %rax
+ 21153 12f2d 660F6F45 movdqa -32(%rbp), %xmm0
+ 21153 E0
+ 21154 12f32 BE0C0000 movl $12, %esi
+ 21154 00
+ 21155 12f37 4889C7 movq %rax, %rdi
+ 21156 12f3a E878C5FF call KAESBlockCipherVecRegCipher
+ 21156 FF
+ 21157 12f3f 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21157 E0
+2450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 21158 .loc 2 2450 0
+ 21159 12f44 EB1B jmp .L393
+ 21160 .L392:
+2451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_256:
+2453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+ 21161 .loc 2 2453 0
+ 21162 12f46 488B45F8 movq -8(%rbp), %rax
+ 21163 12f4a 660F6F45 movdqa -32(%rbp), %xmm0
+ 21163 E0
+ 21164 12f4f BE0E0000 movl $14, %esi
+ 21164 00
+ 21165 12f54 4889C7 movq %rax, %rdi
+ 21166 12f57 E85BC5FF call KAESBlockCipherVecRegCipher
+ 21166 FF
+ 21167 12f5c 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21167 E0
+ 21168 .L393:
+2454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 21169 .loc 2 2457 0
+ 21170 12f61 660F6F45 movdqa -32(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s page 636
+
+
+ 21170 E0
+2458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21171 .loc 2 2458 0
+ 21172 12f66 C9 leave
+ 21173 12f67 C3 ret
+ 21174 .cfi_endproc
+ 21175 .LFE665:
+ 21176 .size KAESBlockCipherVecRegEncrypt, .-KAESBlockCipherVecRegEncrypt
+ 21177 .type KAESBlockCipherVecRegDecrypt, @function
+ 21178 KAESBlockCipherVecRegDecrypt:
+ 21179 .LFB666:
+2459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Decrypt
+2463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Perform a decryption of a single block. Chained modes and stream
+2465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * cipher modes will call this multiple times.
+2466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Decrypt) (CipherVec state,
+2469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const void * decrypt_key)
+2470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 21180 .loc 2 2470 0
+ 21181 .cfi_startproc
+ 21182 12f68 55 pushq %rbp
+ 21183 .LCFI32:
+ 21184 .cfi_def_cfa_offset 16
+ 21185 12f69 4889E5 movq %rsp, %rbp
+ 21186 .cfi_offset 6, -16
+ 21187 .LCFI33:
+ 21188 .cfi_def_cfa_register 6
+ 21189 12f6c 4883EC30 subq $48, %rsp
+ 21190 12f70 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21190 E0
+ 21191 12f75 48897DD8 movq %rdi, -40(%rbp)
+2471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** const AESKeySchedule * key = decrypt_key;
+ 21192 .loc 2 2471 0
+ 21193 12f79 488B45D8 movq -40(%rbp), %rax
+ 21194 12f7d 488945F8 movq %rax, -8(%rbp)
+2472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** assert (key);
+ 21195 .loc 2 2473 0
+ 21196 12f81 48837DF8 cmpq $0, -8(%rbp)
+ 21196 00
+ 21197 12f86 751F jne .L396
+ 21198 12f88 488D0D00 leaq __PRETTY_FUNCTION__.9084(%rip), %rcx
+ 21198 000000
+ 21199 12f8f BAA90900 movl $2473, %edx
+ 21199 00
+ 21200 12f94 488D3500 leaq .LC18(%rip), %rsi
+ 21200 000000
+ 21201 12f9b 488D3D00 leaq .LC19(%rip), %rdi
+ 21201 000000
+ 21202 12fa2 E8000000 call __assert_fail at PLT
+ 21202 00
+ 21203 .L396:
+
GAS LISTING /tmp/ccjbMjHD.s page 637
+
+
+2474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** switch (key->number_of_rounds)
+ 21204 .loc 2 2475 0
+ 21205 12fa7 488B45F8 movq -8(%rbp), %rax
+ 21206 12fab 8B80F000 movl 240(%rax), %eax
+ 21206 0000
+ 21207 12fb1 83F80C cmpl $12, %eax
+ 21208 12fb4 7436 je .L399
+ 21209 12fb6 83F80E cmpl $14, %eax
+ 21210 12fb9 744E je .L400
+ 21211 12fbb 83F80A cmpl $10, %eax
+ 21212 12fbe 740F je .L398
+2476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** default:
+2478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+ 21213 .loc 2 2478 0
+ 21214 12fc0 660F6F05 movdqa vec_00(%rip), %xmm0
+ 21214 00000000
+ 21215 12fc8 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21215 E0
+2479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 21216 .loc 2 2479 0
+ 21217 12fcd EB55 jmp .L401
+ 21218 .L398:
+2480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_128:
+2482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 21219 .loc 2 2482 0
+ 21220 12fcf 488B45F8 movq -8(%rbp), %rax
+ 21221 12fd3 660F6F45 movdqa -32(%rbp), %xmm0
+ 21221 E0
+ 21222 12fd8 BE0A0000 movl $10, %esi
+ 21222 00
+ 21223 12fdd 4889C7 movq %rax, %rdi
+ 21224 12fe0 E81EDDFF call KAESBlockCipherVecRegEqInvCipher
+ 21224 FF
+ 21225 12fe5 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21225 E0
+2483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AES_Nr_128);
+2484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 21226 .loc 2 2484 0
+ 21227 12fea EB38 jmp .L401
+ 21228 .L399:
+2485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_192:
+2487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 21229 .loc 2 2487 0
+ 21230 12fec 488B45F8 movq -8(%rbp), %rax
+ 21231 12ff0 660F6F45 movdqa -32(%rbp), %xmm0
+ 21231 E0
+ 21232 12ff5 BE0C0000 movl $12, %esi
+ 21232 00
+ 21233 12ffa 4889C7 movq %rax, %rdi
+ 21234 12ffd E801DDFF call KAESBlockCipherVecRegEqInvCipher
+ 21234 FF
+ 21235 13002 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21235 E0
+
GAS LISTING /tmp/ccjbMjHD.s page 638
+
+
+2488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AES_Nr_192);
+2489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+ 21236 .loc 2 2489 0
+ 21237 13007 EB1B jmp .L401
+ 21238 .L400:
+2490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** case AES_Nr_256:
+2492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 21239 .loc 2 2492 0
+ 21240 13009 488B45F8 movq -8(%rbp), %rax
+ 21241 1300d 660F6F45 movdqa -32(%rbp), %xmm0
+ 21241 E0
+ 21242 13012 BE0E0000 movl $14, %esi
+ 21242 00
+ 21243 13017 4889C7 movq %rax, %rdi
+ 21244 1301a E8E4DCFF call KAESBlockCipherVecRegEqInvCipher
+ 21244 FF
+ 21245 1301f 660F7F45 movdqa %xmm0, -32(%rbp)
+ 21245 E0
+ 21246 .L401:
+2493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AES_Nr_256);
+2494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** break;
+2495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return state;
+ 21247 .loc 2 2497 0
+ 21248 13024 660F6F45 movdqa -32(%rbp), %xmm0
+ 21248 E0
+2498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21249 .loc 2 2498 0
+ 21250 13029 C9 leave
+ 21251 1302a C3 ret
+ 21252 .cfi_endproc
+ 21253 .LFE666:
+ 21254 .size KAESBlockCipherVecRegDecrypt, .-KAESBlockCipherVecRegDecrypt
+ 21255 .section .rodata
+ 21256 04b2 00000000 .align 8
+ 21256 0000
+ 21257 .LC20:
+ 21258 04b8 25733A20 .string "%s: level %x a %x, b %x c %x d %x\n"
+ 21258 6C657665
+ 21258 6C202578
+ 21258 20612025
+ 21258 782C2062
+ 21259 .LC21:
+ 21260 04db 25733A20 .string "%s: failed no SSSE3\n"
+ 21260 6661696C
+ 21260 6564206E
+ 21260 6F205353
+ 21260 5345330A
+ 21261 .LC22:
+ 21262 04f0 25733A20 .string "%s: failed no SSE3\n"
+ 21262 6661696C
+ 21262 6564206E
+ 21262 6F205353
+ 21262 45330A00
+ 21263 .LC23:
+
GAS LISTING /tmp/ccjbMjHD.s page 639
+
+
+ 21264 0504 25733A20 .string "%s: failed no SSE2\n"
+ 21264 6661696C
+ 21264 6564206E
+ 21264 6F205353
+ 21264 45320A00
+ 21265 .LC24:
+ 21266 0518 25733A20 .string "%s: failed no SSE\n"
+ 21266 6661696C
+ 21266 6564206E
+ 21266 6F205353
+ 21266 450A00
+ 21267 .LC25:
+ 21268 052b 25733A20 .string "%s: passed\n"
+ 21268 70617373
+ 21268 65640A00
+ 21269 .text
+ 21270 .type KAESBlockCipherVecRegProcessorSupport, @function
+ 21271 KAESBlockCipherVecRegProcessorSupport:
+ 21272 .LFB667:
+2499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * MakeProcessorSupport
+2503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Run-time check for support of this particular AES implmentation by
+2505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * checking the flags given via the cpuid instruction.
+2506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool AESBCMEMBER(ProcessorSupport) ()
+2509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 21273 .loc 2 2509 0
+ 21274 .cfi_startproc
+ 21275 1302b 55 pushq %rbp
+ 21276 .LCFI34:
+ 21277 .cfi_def_cfa_offset 16
+ 21278 1302c 4889E5 movq %rsp, %rbp
+ 21279 .cfi_offset 6, -16
+ 21280 .LCFI35:
+ 21281 .cfi_def_cfa_register 6
+ 21282 1302f 53 pushq %rbx
+ 21283 13030 4883EC38 subq $56, %rsp
+2510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t level = 1, a, b, c, d;
+ 21284 .loc 2 2510 0
+ 21285 13034 C745D801 movl $1, -40(%rbp)
+ 21285 000000
+2511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool ret = true;
+ 21286 .loc 2 2511 0
+ 21287 1303b C645EF01 movb $1, -17(%rbp)
+2512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** __cpuid (level, a, b, c, d);
+ 21288 .loc 2 2513 0
+ 21289 1303f 8B45D8 movl -40(%rbp), %eax
+ 21290 #APP
+ 21291 # 2513 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 2514
+ 2515 DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+ 21292 cpuid
+
GAS LISTING /tmp/ccjbMjHD.s page 640
+
+
+ 21293
+ 21294 # 0 "" 2
+ 21295 #NO_APP
+ 21296 13044 8945DC movl %eax, -36(%rbp)
+ 21297 13047 895DE0 movl %ebx, -32(%rbp)
+ 21298 1304a 894DE4 movl %ecx, -28(%rbp)
+ 21299 1304d 8955E8 movl %edx, -24(%rbp)
+ 21300 .loc 2 2515 0
+ 21301 .cfi_offset 3, -24
+ 21302 13050 E8000000 call KDbgWriterGet at PLT
+ 21302 00
+ 21303 13055 4885C0 testq %rax, %rax
+ 21304 13058 744F je .L405
+ 21305 1305a BF040000 movl $4, %edi
+ 21305 00
+ 21306 1305f E8000000 call KDbgCondToFlag at PLT
+ 21306 00
+ 21307 13064 4889C6 movq %rax, %rsi
+ 21308 13067 BF100000 movl $16, %edi
+ 21308 00
+ 21309 1306c E8000000 call KDbgTestModConds at PLT
+ 21309 00
+ 21310 13071 84C0 testb %al, %al
+ 21311 13073 7434 je .L405
+ 21312 13075 8B75E4 movl -28(%rbp), %esi
+ 21313 13078 8B5DE0 movl -32(%rbp), %ebx
+ 21314 1307b 8B55DC movl -36(%rbp), %edx
+ 21315 1307e 8B45D8 movl -40(%rbp), %eax
+ 21316 13081 8B4DE8 movl -24(%rbp), %ecx
+ 21317 13084 890C24 movl %ecx, (%rsp)
+ 21318 13087 4189F1 movl %esi, %r9d
+ 21319 1308a 4189D8 movl %ebx, %r8d
+ 21320 1308d 89D1 movl %edx, %ecx
+ 21321 1308f 89C2 movl %eax, %edx
+ 21322 13091 488D3500 leaq __func__.9108(%rip), %rsi
+ 21322 000000
+ 21323 13098 488D3D00 leaq .LC20(%rip), %rdi
+ 21323 000000
+ 21324 1309f B8000000 movl $0, %eax
+ 21324 00
+ 21325 130a4 E8000000 call KDbgMsg at PLT
+ 21325 00
+ 21326 .L405:
+2516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Only one flag tells whether the AES-NI instructions
+2520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * are implmented in this CPU
+2521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! (c & bit_AES))
+2523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no AES\n",__func__));
+2525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** } else
+2527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+
GAS LISTING /tmp/ccjbMjHD.s page 641
+
+
+2530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Several flags indicate different levels of SSE
+2532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * instruction implmentation
+2533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * we require SSE4.1
+2535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * that dates from 2006 so is most likely good enough
+2537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* if ( ! (c & (bit_SSE4_2))
+2539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+2542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else */
+2545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! (c & bit_SSE4_1))
+ 21327 .loc 2 2545 0
+ 21328 130a9 8B45E4 movl -28(%rbp), %eax
+ 21329 130ac 25000008 andl $524288, %eax
+ 21329 00
+ 21330 130b1 85C0 testl %eax, %eax
+ 21331 130b3 7546 jne .L406
+2546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ 21332 .loc 2 2547 0
+ 21333 130b5 E8000000 call KDbgWriterGet at PLT
+ 21333 00
+ 21334 130ba 4885C0 testq %rax, %rax
+ 21335 130bd 7433 je .L408
+ 21336 130bf BF040000 movl $4, %edi
+ 21336 00
+ 21337 130c4 E8000000 call KDbgCondToFlag at PLT
+ 21337 00
+ 21338 130c9 4889C6 movq %rax, %rsi
+ 21339 130cc BF100000 movl $16, %edi
+ 21339 00
+ 21340 130d1 E8000000 call KDbgTestModConds at PLT
+ 21340 00
+ 21341 130d6 84C0 testb %al, %al
+ 21342 130d8 7418 je .L408
+ 21343 130da 488D3500 leaq __func__.9108(%rip), %rsi
+ 21343 000000
+ 21344 130e1 488D3D00 leaq .LC21(%rip), %rdi
+ 21344 000000
+ 21345 130e8 B8000000 movl $0, %eax
+ 21345 00
+ 21346 130ed E8000000 call KDbgMsg at PLT
+ 21346 00
+ 21347 .L408:
+2548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 21348 .loc 2 2548 0
+ 21349 130f2 C645EF00 movb $0, -17(%rbp)
+ 21350 130f6 E93E0100 jmp .L409
+ 21350 00
+ 21351 .L406:
+2549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+
GAS LISTING /tmp/ccjbMjHD.s page 642
+
+
+2551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (c & bit_SSSE3))
+ 21352 .loc 2 2551 0
+ 21353 130fb 8B45E4 movl -28(%rbp), %eax
+ 21354 130fe 25000200 andl $512, %eax
+ 21354 00
+ 21355 13103 85C0 testl %eax, %eax
+ 21356 13105 7546 jne .L410
+2552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ 21357 .loc 2 2553 0
+ 21358 13107 E8000000 call KDbgWriterGet at PLT
+ 21358 00
+ 21359 1310c 4885C0 testq %rax, %rax
+ 21360 1310f 7433 je .L412
+ 21361 13111 BF040000 movl $4, %edi
+ 21361 00
+ 21362 13116 E8000000 call KDbgCondToFlag at PLT
+ 21362 00
+ 21363 1311b 4889C6 movq %rax, %rsi
+ 21364 1311e BF100000 movl $16, %edi
+ 21364 00
+ 21365 13123 E8000000 call KDbgTestModConds at PLT
+ 21365 00
+ 21366 13128 84C0 testb %al, %al
+ 21367 1312a 7418 je .L412
+ 21368 1312c 488D3500 leaq __func__.9108(%rip), %rsi
+ 21368 000000
+ 21369 13133 488D3D00 leaq .LC21(%rip), %rdi
+ 21369 000000
+ 21370 1313a B8000000 movl $0, %eax
+ 21370 00
+ 21371 1313f E8000000 call KDbgMsg at PLT
+ 21371 00
+ 21372 .L412:
+2554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 21373 .loc 2 2554 0
+ 21374 13144 C645EF00 movb $0, -17(%rbp)
+ 21375 13148 E9EC0000 jmp .L409
+ 21375 00
+ 21376 .L410:
+2555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (c & bit_SSE3))
+ 21377 .loc 2 2557 0
+ 21378 1314d 8B45E4 movl -28(%rbp), %eax
+ 21379 13150 83E001 andl $1, %eax
+ 21380 13153 85C0 testl %eax, %eax
+ 21381 13155 7546 jne .L413
+2558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSE3\n",__func__));
+ 21382 .loc 2 2559 0
+ 21383 13157 E8000000 call KDbgWriterGet at PLT
+ 21383 00
+ 21384 1315c 4885C0 testq %rax, %rax
+ 21385 1315f 7433 je .L415
+ 21386 13161 BF040000 movl $4, %edi
+ 21386 00
+
GAS LISTING /tmp/ccjbMjHD.s page 643
+
+
+ 21387 13166 E8000000 call KDbgCondToFlag at PLT
+ 21387 00
+ 21388 1316b 4889C6 movq %rax, %rsi
+ 21389 1316e BF100000 movl $16, %edi
+ 21389 00
+ 21390 13173 E8000000 call KDbgTestModConds at PLT
+ 21390 00
+ 21391 13178 84C0 testb %al, %al
+ 21392 1317a 7418 je .L415
+ 21393 1317c 488D3500 leaq __func__.9108(%rip), %rsi
+ 21393 000000
+ 21394 13183 488D3D00 leaq .LC22(%rip), %rdi
+ 21394 000000
+ 21395 1318a B8000000 movl $0, %eax
+ 21395 00
+ 21396 1318f E8000000 call KDbgMsg at PLT
+ 21396 00
+ 21397 .L415:
+2560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 21398 .loc 2 2560 0
+ 21399 13194 C645EF00 movb $0, -17(%rbp)
+ 21400 13198 E99C0000 jmp .L409
+ 21400 00
+ 21401 .L413:
+2561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (d & bit_SSE2))
+ 21402 .loc 2 2563 0
+ 21403 1319d 8B45E8 movl -24(%rbp), %eax
+ 21404 131a0 25000000 andl $67108864, %eax
+ 21404 04
+ 21405 131a5 85C0 testl %eax, %eax
+ 21406 131a7 7543 jne .L416
+2564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSE2\n",__func__));
+ 21407 .loc 2 2565 0
+ 21408 131a9 E8000000 call KDbgWriterGet at PLT
+ 21408 00
+ 21409 131ae 4885C0 testq %rax, %rax
+ 21410 131b1 7433 je .L418
+ 21411 131b3 BF040000 movl $4, %edi
+ 21411 00
+ 21412 131b8 E8000000 call KDbgCondToFlag at PLT
+ 21412 00
+ 21413 131bd 4889C6 movq %rax, %rsi
+ 21414 131c0 BF100000 movl $16, %edi
+ 21414 00
+ 21415 131c5 E8000000 call KDbgTestModConds at PLT
+ 21415 00
+ 21416 131ca 84C0 testb %al, %al
+ 21417 131cc 7418 je .L418
+ 21418 131ce 488D3500 leaq __func__.9108(%rip), %rsi
+ 21418 000000
+ 21419 131d5 488D3D00 leaq .LC23(%rip), %rdi
+ 21419 000000
+ 21420 131dc B8000000 movl $0, %eax
+ 21420 00
+
GAS LISTING /tmp/ccjbMjHD.s page 644
+
+
+ 21421 131e1 E8000000 call KDbgMsg at PLT
+ 21421 00
+ 21422 .L418:
+2566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 21423 .loc 2 2566 0
+ 21424 131e6 C645EF00 movb $0, -17(%rbp)
+ 21425 131ea EB4D jmp .L409
+ 21426 .L416:
+2567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else if ( ! (d & bit_SSE))
+ 21427 .loc 2 2569 0
+ 21428 131ec 8B45E8 movl -24(%rbp), %eax
+ 21429 131ef 25000000 andl $33554432, %eax
+ 21429 02
+ 21430 131f4 85C0 testl %eax, %eax
+ 21431 131f6 7541 jne .L409
+2570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: failed no SSE\n",__func__));
+ 21432 .loc 2 2571 0
+ 21433 131f8 E8000000 call KDbgWriterGet at PLT
+ 21433 00
+ 21434 131fd 4885C0 testq %rax, %rax
+ 21435 13200 7433 je .L420
+ 21436 13202 BF040000 movl $4, %edi
+ 21436 00
+ 21437 13207 E8000000 call KDbgCondToFlag at PLT
+ 21437 00
+ 21438 1320c 4889C6 movq %rax, %rsi
+ 21439 1320f BF100000 movl $16, %edi
+ 21439 00
+ 21440 13214 E8000000 call KDbgTestModConds at PLT
+ 21440 00
+ 21441 13219 84C0 testb %al, %al
+ 21442 1321b 7418 je .L420
+ 21443 1321d 488D3500 leaq __func__.9108(%rip), %rsi
+ 21443 000000
+ 21444 13224 488D3D00 leaq .LC24(%rip), %rdi
+ 21444 000000
+ 21445 1322b B8000000 movl $0, %eax
+ 21445 00
+ 21446 13230 E8000000 call KDbgMsg at PLT
+ 21446 00
+ 21447 .L420:
+2572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** ret = false;
+ 21448 .loc 2 2572 0
+ 21449 13235 C645EF00 movb $0, -17(%rbp)
+ 21450 .L409:
+2573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: passed\n",__func__));
+ 21451 .loc 2 2575 0
+ 21452 13239 E8000000 call KDbgWriterGet at PLT
+ 21452 00
+ 21453 1323e 4885C0 testq %rax, %rax
+ 21454 13241 7433 je .L422
+ 21455 13243 BF040000 movl $4, %edi
+
GAS LISTING /tmp/ccjbMjHD.s page 645
+
+
+ 21455 00
+ 21456 13248 E8000000 call KDbgCondToFlag at PLT
+ 21456 00
+ 21457 1324d 4889C6 movq %rax, %rsi
+ 21458 13250 BF100000 movl $16, %edi
+ 21458 00
+ 21459 13255 E8000000 call KDbgTestModConds at PLT
+ 21459 00
+ 21460 1325a 84C0 testb %al, %al
+ 21461 1325c 7418 je .L422
+ 21462 1325e 488D3500 leaq __func__.9108(%rip), %rsi
+ 21462 000000
+ 21463 13265 488D3D00 leaq .LC25(%rip), %rdi
+ 21463 000000
+ 21464 1326c B8000000 movl $0, %eax
+ 21464 00
+ 21465 13271 E8000000 call KDbgMsg at PLT
+ 21465 00
+ 21466 .L422:
+2576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return ret;
+ 21467 .loc 2 2576 0
+ 21468 13276 0FB645EF movzbl -17(%rbp), %eax
+2577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21469 .loc 2 2577 0
+ 21470 1327a 4883C438 addq $56, %rsp
+ 21471 1327e 5B popq %rbx
+ 21472 1327f C9 leave
+ 21473 13280 C3 ret
+ 21474 .cfi_endproc
+ 21475 .LFE667:
+ 21476 .size KAESBlockCipherVecRegProcessorSupport, .-KAESBlockCipherVecRegProcessorSupport
+ 21477 .section .data.rel.ro.local,"aw", at progbits
+ 21478 .align 32
+ 21479 .type KAESBlockCipherVecReg_vt_, @object
+ 21480 .size KAESBlockCipherVecReg_vt_, 64
+ 21481 KAESBlockCipherVecReg_vt_:
+ 21482 0000 01000000 .long 1
+ 21483 0004 01000000 .long 1
+ 21484 0008 00000000 .quad KAESBlockCipherVecRegDestroy
+ 21484 00000000
+ 21485 0010 00000000 .quad KAESBlockCipherVecRegBlockSize
+ 21485 00000000
+ 21486 0018 00000000 .quad KAESBlockCipherVecRegKeySize
+ 21486 00000000
+ 21487 0020 00000000 .quad KAESBlockCipherVecRegSetEncryptKey
+ 21487 00000000
+ 21488 0028 00000000 .quad KAESBlockCipherVecRegSetDecryptKey
+ 21488 00000000
+ 21489 0030 00000000 .quad KAESBlockCipherVecRegEncrypt
+ 21489 00000000
+ 21490 0038 00000000 .quad KAESBlockCipherVecRegDecrypt
+ 21490 00000000
+ 21491 .section .rodata
+ 21492 .LC26:
+ 21493 0537 25733A20 .string "%s: %p\n"
+ 21493 25700A00
+ 21494 .text
+
GAS LISTING /tmp/ccjbMjHD.s page 646
+
+
+ 21495 .globl KAESBlockCipherVecRegMake
+ 21496 .type KAESBlockCipherVecRegMake, @function
+ 21497 KAESBlockCipherVecRegMake:
+ 21498 .LFB668:
+2578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Init
+2582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Initialize the fields of this object. The derived class will call this
+2584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * during it's initialization.
+2585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * self object to initialze
+2587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * vt the virtual table of the derived class
+2588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * mgr the cipher manager that is the construction factory block cipher
+2589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * objects hold references to the manager while the manager merely
+2590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * points at the block ciphers when all block ciphers are destroyed
+2591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * the manager loses its references and it too can be destroyed if not
+2592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * held elsewhere
+2593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * name ASCIZ c-string the name of this class
+2594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+2596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KBlockCipherVec_vt_v1 AESBCMEMBER(_vt_) =
+2597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 1, 1 },
+2599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(Destroy),
+2601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(BlockSize),
+2602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(KeySize),
+2603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(SetEncryptKey),
+2604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(SetDecryptKey),
+2605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(Encrypt),
+2606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESBCMEMBER(Decrypt)
+2607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+2608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Make
+2612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *
+2613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * Create a new AES Block Cipher object.
+2614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * The processor is checked to see if this particular version is supported on
+2615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** * this particular CPU.
+2616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+2617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(Make) (KBlockCipher ** new_obj)
+2618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 21499 .loc 2 2618 0
+ 21500 .cfi_startproc
+ 21501 13281 55 pushq %rbp
+ 21502 .LCFI36:
+ 21503 .cfi_def_cfa_offset 16
+ 21504 13282 4889E5 movq %rsp, %rbp
+ 21505 .cfi_offset 6, -16
+ 21506 .LCFI37:
+ 21507 .cfi_def_cfa_register 6
+ 21508 13285 4883EC20 subq $32, %rsp
+ 21509 13289 48897DE8 movq %rdi, -24(%rbp)
+2619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t rc;
+
GAS LISTING /tmp/ccjbMjHD.s page 647
+
+
+2620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+ 21510 .loc 2 2621 0
+ 21511 1328d E8000000 call KDbgWriterGet at PLT
+ 21511 00
+ 21512 13292 4885C0 testq %rax, %rax
+ 21513 13295 743A je .L426
+ 21514 13297 BF040000 movl $4, %edi
+ 21514 00
+ 21515 1329c E8000000 call KDbgCondToFlag at PLT
+ 21515 00
+ 21516 132a1 4889C6 movq %rax, %rsi
+ 21517 132a4 BF100000 movl $16, %edi
+ 21517 00
+ 21518 132a9 E8000000 call KDbgTestModConds at PLT
+ 21518 00
+ 21519 132ae 84C0 testb %al, %al
+ 21520 132b0 741F je .L426
+ 21521 132b2 488B45E8 movq -24(%rbp), %rax
+ 21522 132b6 4889C2 movq %rax, %rdx
+ 21523 132b9 488D3500 leaq __func__.9198(%rip), %rsi
+ 21523 000000
+ 21524 132c0 488D3D00 leaq .LC26(%rip), %rdi
+ 21524 000000
+ 21525 132c7 B8000000 movl $0, %eax
+ 21525 00
+ 21526 132cc E8000000 call KDbgMsg at PLT
+ 21526 00
+ 21527 .L426:
+2622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* Check parameter first */
+2624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if (new_obj == NULL)
+ 21528 .loc 2 2624 0
+ 21529 132d1 48837DE8 cmpq $0, -24(%rbp)
+ 21529 00
+ 21530 132d6 7522 jne .L427
+2625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 21531 .loc 2 2625 0
+ 21532 132d8 B9410A00 movl $2625, %ecx
+ 21532 00
+ 21533 132dd 488D1500 leaq __func__.9198(%rip), %rdx
+ 21533 000000
+ 21534 132e4 488D3500 leaq .LC18(%rip), %rsi
+ 21534 000000
+ 21535 132eb BF878F00 movl $-2030006393, %edi
+ 21535 87
+ 21536 132f0 E8000000 call SetRCFileFuncLine at PLT
+ 21536 00
+ 21537 132f5 8945FC movl %eax, -4(%rbp)
+ 21538 132f8 EB53 jmp .L428
+ 21539 .L427:
+2626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else
+2628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *new_obj = NULL;
+ 21540 .loc 2 2629 0
+ 21541 132fa 488B45E8 movq -24(%rbp), %rax
+
GAS LISTING /tmp/ccjbMjHD.s page 648
+
+
+ 21542 132fe 48C70000 movq $0, (%rax)
+ 21542 000000
+2630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* check for processor support of this flavor */
+2632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** if ( ! AESBCMEMBER(ProcessorSupport)())
+ 21543 .loc 2 2632 0
+ 21544 13305 B8000000 movl $0, %eax
+ 21544 00
+ 21545 1330a E81CFDFF call KAESBlockCipherVecRegProcessorSupport
+ 21545 FF
+ 21546 1330f 83F001 xorl $1, %eax
+ 21547 13312 84C0 testb %al, %al
+ 21548 13314 7422 je .L429
+2633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 21549 .loc 2 2633 0
+ 21550 13316 B9490A00 movl $2633, %ecx
+ 21550 00
+ 21551 1331b 488D1500 leaq __func__.9198(%rip), %rdx
+ 21551 000000
+ 21552 13322 488D3500 leaq .LC18(%rip), %rsi
+ 21552 000000
+ 21553 13329 BF038500 movl $-2030009085, %edi
+ 21553 87
+ 21554 1332e E8000000 call SetRCFileFuncLine at PLT
+ 21554 00
+ 21555 13333 8945FC movl %eax, -4(%rbp)
+ 21556 13336 EB15 jmp .L428
+ 21557 .L429:
+2634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****
+2635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** else
+2636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc = 0;
+ 21558 .loc 2 2637 0
+ 21559 13338 C745FC00 movl $0, -4(%rbp)
+ 21559 000000
+2638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+ 21560 .loc 2 2638 0
+ 21561 1333f 488D1500 leaq KAESBlockCipherVecReg_vt_(%rip), %rdx
+ 21561 000000
+ 21562 13346 488B45E8 movq -24(%rbp), %rax
+ 21563 1334a 488910 movq %rdx, (%rax)
+ 21564 .L428:
+2639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** return rc;
+ 21565 .loc 2 2641 0
+ 21566 1334d 8B45FC movl -4(%rbp), %eax
+2642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21567 .loc 2 2642 0
+ 21568 13350 C9 leave
+ 21569 13351 C3 ret
+ 21570 .cfi_endproc
+ 21571 .LFE668:
+ 21572 .size KAESBlockCipherVecRegMake, .-KAESBlockCipherVecRegMake
+ 21573 .section .rodata
+ 21574 053f 00 .align 16
+ 21575 .type __func__.9198, @object
+
GAS LISTING /tmp/ccjbMjHD.s page 649
+
+
+ 21576 .size __func__.9198, 26
+ 21577 __func__.9198:
+ 21578 0540 4B414553 .string "KAESBlockCipherVecRegMake"
+ 21578 426C6F63
+ 21578 6B436970
+ 21578 68657256
+ 21578 65635265
+ 21579 055a 00000000 .align 16
+ 21579 0000
+ 21580 .type __PRETTY_FUNCTION__.9199, @object
+ 21581 .size __PRETTY_FUNCTION__.9199, 26
+ 21582 __PRETTY_FUNCTION__.9199:
+ 21583 0560 4B414553 .string "KAESBlockCipherVecRegMake"
+ 21583 426C6F63
+ 21583 6B436970
+ 21583 68657256
+ 21583 65635265
+ 21584 057a 00000000 .align 32
+ 21584 0000
+ 21585 .type __func__.9108, @object
+ 21586 .size __func__.9108, 38
+ 21587 __func__.9108:
+ 21588 0580 4B414553 .string "KAESBlockCipherVecRegProcessorSupport"
+ 21588 426C6F63
+ 21588 6B436970
+ 21588 68657256
+ 21588 65635265
+ 21589 05a6 00000000 .align 16
+ 21589 00000000
+ 21589 0000
+ 21590 .type __PRETTY_FUNCTION__.9084, @object
+ 21591 .size __PRETTY_FUNCTION__.9084, 29
+ 21592 __PRETTY_FUNCTION__.9084:
+ 21593 05b0 4B414553 .string "KAESBlockCipherVecRegDecrypt"
+ 21593 426C6F63
+ 21593 6B436970
+ 21593 68657256
+ 21593 65635265
+ 21594 05cd 000000 .align 16
+ 21595 .type __PRETTY_FUNCTION__.9063, @object
+ 21596 .size __PRETTY_FUNCTION__.9063, 29
+ 21597 __PRETTY_FUNCTION__.9063:
+ 21598 05d0 4B414553 .string "KAESBlockCipherVecRegEncrypt"
+ 21598 426C6F63
+ 21598 6B436970
+ 21598 68657256
+ 21598 65635265
+ 21599 05ed 000000 .align 16
+ 21600 .type ShiftRowTable.7358, @object
+ 21601 .size ShiftRowTable.7358, 16
+ 21602 ShiftRowTable.7358:
+ 21603 05f0 00 .byte 0
+ 21604 05f1 05 .byte 5
+ 21605 05f2 0A .byte 10
+ 21606 05f3 0F .byte 15
+ 21607 05f4 04 .byte 4
+ 21608 05f5 09 .byte 9
+
GAS LISTING /tmp/ccjbMjHD.s page 650
+
+
+ 21609 05f6 0E .byte 14
+ 21610 05f7 03 .byte 3
+ 21611 05f8 08 .byte 8
+ 21612 05f9 0D .byte 13
+ 21613 05fa 02 .byte 2
+ 21614 05fb 07 .byte 7
+ 21615 05fc 0C .byte 12
+ 21616 05fd 01 .byte 1
+ 21617 05fe 06 .byte 6
+ 21618 05ff 0B .byte 11
+ 21619 .align 16
+ 21620 .type ShiftRowTable.7385, @object
+ 21621 .size ShiftRowTable.7385, 16
+ 21622 ShiftRowTable.7385:
+ 21623 0600 01 .byte 1
+ 21624 0601 02 .byte 2
+ 21625 0602 03 .byte 3
+ 21626 0603 00 .byte 0
+ 21627 0604 05 .byte 5
+ 21628 0605 06 .byte 6
+ 21629 0606 07 .byte 7
+ 21630 0607 04 .byte 4
+ 21631 0608 09 .byte 9
+ 21632 0609 0A .byte 10
+ 21633 060a 0B .byte 11
+ 21634 060b 08 .byte 8
+ 21635 060c 0D .byte 13
+ 21636 060d 0E .byte 14
+ 21637 060e 0F .byte 15
+ 21638 060f 0C .byte 12
+ 21639 .align 16
+ 21640 .type __PRETTY_FUNCTION__.7467, @object
+ 21641 .size __PRETTY_FUNCTION__.7467, 28
+ 21642 __PRETTY_FUNCTION__.7467:
+ 21643 0610 4B414553 .string "KAESBlockCipherVecRegFF_mul"
+ 21643 426C6F63
+ 21643 6B436970
+ 21643 68657256
+ 21643 65635265
+ 21644 062c 00000000 .align 32
+ 21644 00000000
+ 21644 00000000
+ 21644 00000000
+ 21644 00000000
+ 21645 .type sr_mask.7327, @object
+ 21646 .size sr_mask.7327, 144
+ 21647 sr_mask.7327:
+ 21648 0640 FF .byte -1
+ 21649 0641 FF .byte -1
+ 21650 0642 FF .byte -1
+ 21651 0643 FF .byte -1
+ 21652 0644 FF .byte -1
+ 21653 0645 FF .byte -1
+ 21654 0646 FF .byte -1
+ 21655 0647 FF .byte -1
+ 21656 0648 FF .byte -1
+ 21657 0649 FF .byte -1
+
GAS LISTING /tmp/ccjbMjHD.s page 651
+
+
+ 21658 064a FF .byte -1
+ 21659 064b FF .byte -1
+ 21660 064c FF .byte -1
+ 21661 064d FF .byte -1
+ 21662 064e FF .byte -1
+ 21663 064f FF .byte -1
+ 21664 0650 7F .byte 127
+ 21665 0651 7F .byte 127
+ 21666 0652 7F .byte 127
+ 21667 0653 7F .byte 127
+ 21668 0654 7F .byte 127
+ 21669 0655 7F .byte 127
+ 21670 0656 7F .byte 127
+ 21671 0657 7F .byte 127
+ 21672 0658 7F .byte 127
+ 21673 0659 7F .byte 127
+ 21674 065a 7F .byte 127
+ 21675 065b 7F .byte 127
+ 21676 065c 7F .byte 127
+ 21677 065d 7F .byte 127
+ 21678 065e 7F .byte 127
+ 21679 065f 7F .byte 127
+ 21680 0660 3F .byte 63
+ 21681 0661 3F .byte 63
+ 21682 0662 3F .byte 63
+ 21683 0663 3F .byte 63
+ 21684 0664 3F .byte 63
+ 21685 0665 3F .byte 63
+ 21686 0666 3F .byte 63
+ 21687 0667 3F .byte 63
+ 21688 0668 3F .byte 63
+ 21689 0669 3F .byte 63
+ 21690 066a 3F .byte 63
+ 21691 066b 3F .byte 63
+ 21692 066c 3F .byte 63
+ 21693 066d 3F .byte 63
+ 21694 066e 3F .byte 63
+ 21695 066f 3F .byte 63
+ 21696 0670 1F .byte 31
+ 21697 0671 1F .byte 31
+ 21698 0672 1F .byte 31
+ 21699 0673 1F .byte 31
+ 21700 0674 1F .byte 31
+ 21701 0675 1F .byte 31
+ 21702 0676 1F .byte 31
+ 21703 0677 1F .byte 31
+ 21704 0678 1F .byte 31
+ 21705 0679 1F .byte 31
+ 21706 067a 1F .byte 31
+ 21707 067b 1F .byte 31
+ 21708 067c 1F .byte 31
+ 21709 067d 1F .byte 31
+ 21710 067e 1F .byte 31
+ 21711 067f 1F .byte 31
+ 21712 0680 0F .byte 15
+ 21713 0681 0F .byte 15
+ 21714 0682 0F .byte 15
+
GAS LISTING /tmp/ccjbMjHD.s page 652
+
+
+ 21715 0683 0F .byte 15
+ 21716 0684 0F .byte 15
+ 21717 0685 0F .byte 15
+ 21718 0686 0F .byte 15
+ 21719 0687 0F .byte 15
+ 21720 0688 0F .byte 15
+ 21721 0689 0F .byte 15
+ 21722 068a 0F .byte 15
+ 21723 068b 0F .byte 15
+ 21724 068c 0F .byte 15
+ 21725 068d 0F .byte 15
+ 21726 068e 0F .byte 15
+ 21727 068f 0F .byte 15
+ 21728 0690 07 .byte 7
+ 21729 0691 07 .byte 7
+ 21730 0692 07 .byte 7
+ 21731 0693 07 .byte 7
+ 21732 0694 07 .byte 7
+ 21733 0695 07 .byte 7
+ 21734 0696 07 .byte 7
+ 21735 0697 07 .byte 7
+ 21736 0698 07 .byte 7
+ 21737 0699 07 .byte 7
+ 21738 069a 07 .byte 7
+ 21739 069b 07 .byte 7
+ 21740 069c 07 .byte 7
+ 21741 069d 07 .byte 7
+ 21742 069e 07 .byte 7
+ 21743 069f 07 .byte 7
+ 21744 06a0 03 .byte 3
+ 21745 06a1 03 .byte 3
+ 21746 06a2 03 .byte 3
+ 21747 06a3 03 .byte 3
+ 21748 06a4 03 .byte 3
+ 21749 06a5 03 .byte 3
+ 21750 06a6 03 .byte 3
+ 21751 06a7 03 .byte 3
+ 21752 06a8 03 .byte 3
+ 21753 06a9 03 .byte 3
+ 21754 06aa 03 .byte 3
+ 21755 06ab 03 .byte 3
+ 21756 06ac 03 .byte 3
+ 21757 06ad 03 .byte 3
+ 21758 06ae 03 .byte 3
+ 21759 06af 03 .byte 3
+ 21760 06b0 01 .byte 1
+ 21761 06b1 01 .byte 1
+ 21762 06b2 01 .byte 1
+ 21763 06b3 01 .byte 1
+ 21764 06b4 01 .byte 1
+ 21765 06b5 01 .byte 1
+ 21766 06b6 01 .byte 1
+ 21767 06b7 01 .byte 1
+ 21768 06b8 01 .byte 1
+ 21769 06b9 01 .byte 1
+ 21770 06ba 01 .byte 1
+ 21771 06bb 01 .byte 1
+
GAS LISTING /tmp/ccjbMjHD.s page 653
+
+
+ 21772 06bc 01 .byte 1
+ 21773 06bd 01 .byte 1
+ 21774 06be 01 .byte 1
+ 21775 06bf 01 .byte 1
+ 21776 06c0 00 .byte 0
+ 21777 06c1 00 .byte 0
+ 21778 06c2 00 .byte 0
+ 21779 06c3 00 .byte 0
+ 21780 06c4 00 .byte 0
+ 21781 06c5 00 .byte 0
+ 21782 06c6 00 .byte 0
+ 21783 06c7 00 .byte 0
+ 21784 06c8 00 .byte 0
+ 21785 06c9 00 .byte 0
+ 21786 06ca 00 .byte 0
+ 21787 06cb 00 .byte 0
+ 21788 06cc 00 .byte 0
+ 21789 06cd 00 .byte 0
+ 21790 06ce 00 .byte 0
+ 21791 06cf 00 .byte 0
+ 21792 .align 16
+ 21793 .type __PRETTY_FUNCTION__.7312, @object
+ 21794 .size __PRETTY_FUNCTION__.7312, 30
+ 21795 __PRETTY_FUNCTION__.7312:
+ 21796 06d0 4B414553 .string "KAESBlockCipherVecRegVecSLLBI"
+ 21796 426C6F63
+ 21796 6B436970
+ 21796 68657256
+ 21796 65635265
+ 21797 06ee 00000000 .align 32
+ 21797 00000000
+ 21797 00000000
+ 21797 00000000
+ 21797 0000
+ 21798 .type sl_mask.7310, @object
+ 21799 .size sl_mask.7310, 144
+ 21800 sl_mask.7310:
+ 21801 0700 FF .byte -1
+ 21802 0701 FF .byte -1
+ 21803 0702 FF .byte -1
+ 21804 0703 FF .byte -1
+ 21805 0704 FF .byte -1
+ 21806 0705 FF .byte -1
+ 21807 0706 FF .byte -1
+ 21808 0707 FF .byte -1
+ 21809 0708 FF .byte -1
+ 21810 0709 FF .byte -1
+ 21811 070a FF .byte -1
+ 21812 070b FF .byte -1
+ 21813 070c FF .byte -1
+ 21814 070d FF .byte -1
+ 21815 070e FF .byte -1
+ 21816 070f FF .byte -1
+ 21817 0710 FE .byte -2
+ 21818 0711 FE .byte -2
+ 21819 0712 FE .byte -2
+ 21820 0713 FE .byte -2
+
GAS LISTING /tmp/ccjbMjHD.s page 654
+
+
+ 21821 0714 FE .byte -2
+ 21822 0715 FE .byte -2
+ 21823 0716 FE .byte -2
+ 21824 0717 FE .byte -2
+ 21825 0718 FE .byte -2
+ 21826 0719 FE .byte -2
+ 21827 071a FE .byte -2
+ 21828 071b FE .byte -2
+ 21829 071c FE .byte -2
+ 21830 071d FE .byte -2
+ 21831 071e FE .byte -2
+ 21832 071f FE .byte -2
+ 21833 0720 FC .byte -4
+ 21834 0721 FC .byte -4
+ 21835 0722 FC .byte -4
+ 21836 0723 FC .byte -4
+ 21837 0724 FC .byte -4
+ 21838 0725 FC .byte -4
+ 21839 0726 FC .byte -4
+ 21840 0727 FC .byte -4
+ 21841 0728 FC .byte -4
+ 21842 0729 FC .byte -4
+ 21843 072a FC .byte -4
+ 21844 072b FC .byte -4
+ 21845 072c FC .byte -4
+ 21846 072d FC .byte -4
+ 21847 072e FC .byte -4
+ 21848 072f FC .byte -4
+ 21849 0730 F8 .byte -8
+ 21850 0731 F8 .byte -8
+ 21851 0732 F8 .byte -8
+ 21852 0733 F8 .byte -8
+ 21853 0734 F8 .byte -8
+ 21854 0735 F8 .byte -8
+ 21855 0736 F8 .byte -8
+ 21856 0737 F8 .byte -8
+ 21857 0738 F8 .byte -8
+ 21858 0739 F8 .byte -8
+ 21859 073a F8 .byte -8
+ 21860 073b F8 .byte -8
+ 21861 073c F8 .byte -8
+ 21862 073d F8 .byte -8
+ 21863 073e F8 .byte -8
+ 21864 073f F8 .byte -8
+ 21865 0740 F0 .byte -16
+ 21866 0741 F0 .byte -16
+ 21867 0742 F0 .byte -16
+ 21868 0743 F0 .byte -16
+ 21869 0744 F0 .byte -16
+ 21870 0745 F0 .byte -16
+ 21871 0746 F0 .byte -16
+ 21872 0747 F0 .byte -16
+ 21873 0748 F0 .byte -16
+ 21874 0749 F0 .byte -16
+ 21875 074a F0 .byte -16
+ 21876 074b F0 .byte -16
+ 21877 074c F0 .byte -16
+
GAS LISTING /tmp/ccjbMjHD.s page 655
+
+
+ 21878 074d F0 .byte -16
+ 21879 074e F0 .byte -16
+ 21880 074f F0 .byte -16
+ 21881 0750 E0 .byte -32
+ 21882 0751 E0 .byte -32
+ 21883 0752 E0 .byte -32
+ 21884 0753 E0 .byte -32
+ 21885 0754 E0 .byte -32
+ 21886 0755 E0 .byte -32
+ 21887 0756 E0 .byte -32
+ 21888 0757 E0 .byte -32
+ 21889 0758 E0 .byte -32
+ 21890 0759 E0 .byte -32
+ 21891 075a E0 .byte -32
+ 21892 075b E0 .byte -32
+ 21893 075c E0 .byte -32
+ 21894 075d E0 .byte -32
+ 21895 075e E0 .byte -32
+ 21896 075f E0 .byte -32
+ 21897 0760 C0 .byte -64
+ 21898 0761 C0 .byte -64
+ 21899 0762 C0 .byte -64
+ 21900 0763 C0 .byte -64
+ 21901 0764 C0 .byte -64
+ 21902 0765 C0 .byte -64
+ 21903 0766 C0 .byte -64
+ 21904 0767 C0 .byte -64
+ 21905 0768 C0 .byte -64
+ 21906 0769 C0 .byte -64
+ 21907 076a C0 .byte -64
+ 21908 076b C0 .byte -64
+ 21909 076c C0 .byte -64
+ 21910 076d C0 .byte -64
+ 21911 076e C0 .byte -64
+ 21912 076f C0 .byte -64
+ 21913 0770 80 .byte -128
+ 21914 0771 80 .byte -128
+ 21915 0772 80 .byte -128
+ 21916 0773 80 .byte -128
+ 21917 0774 80 .byte -128
+ 21918 0775 80 .byte -128
+ 21919 0776 80 .byte -128
+ 21920 0777 80 .byte -128
+ 21921 0778 80 .byte -128
+ 21922 0779 80 .byte -128
+ 21923 077a 80 .byte -128
+ 21924 077b 80 .byte -128
+ 21925 077c 80 .byte -128
+ 21926 077d 80 .byte -128
+ 21927 077e 80 .byte -128
+ 21928 077f 80 .byte -128
+ 21929 0780 00 .byte 0
+ 21930 0781 00 .byte 0
+ 21931 0782 00 .byte 0
+ 21932 0783 00 .byte 0
+ 21933 0784 00 .byte 0
+ 21934 0785 00 .byte 0
+
GAS LISTING /tmp/ccjbMjHD.s page 656
+
+
+ 21935 0786 00 .byte 0
+ 21936 0787 00 .byte 0
+ 21937 0788 00 .byte 0
+ 21938 0789 00 .byte 0
+ 21939 078a 00 .byte 0
+ 21940 078b 00 .byte 0
+ 21941 078c 00 .byte 0
+ 21942 078d 00 .byte 0
+ 21943 078e 00 .byte 0
+ 21944 078f 00 .byte 0
+ 21945 0790 00000000 .align 32
+ 21945 00000000
+ 21945 00000000
+ 21945 00000000
+ 21946 .type __func__.9027, @object
+ 21947 .size __func__.9027, 35
+ 21948 __func__.9027:
+ 21949 07a0 4B414553 .string "KAESBlockCipherVecRegSetEncryptKey"
+ 21949 426C6F63
+ 21949 6B436970
+ 21949 68657256
+ 21949 65635265
+ 21950 07c3 00000000 .align 32
+ 21950 00000000
+ 21950 00000000
+ 21950 00000000
+ 21950 00000000
+ 21951 .type __PRETTY_FUNCTION__.9026, @object
+ 21952 .size __PRETTY_FUNCTION__.9026, 35
+ 21953 __PRETTY_FUNCTION__.9026:
+ 21954 07e0 4B414553 .string "KAESBlockCipherVecRegSetEncryptKey"
+ 21954 426C6F63
+ 21954 6B436970
+ 21954 68657256
+ 21954 65635265
+ 21955 0803 00000000 .align 16
+ 21955 00000000
+ 21955 00000000
+ 21955 00
+ 21956 .type mask.7943, @object
+ 21957 .size mask.7943, 16
+ 21958 mask.7943:
+ 21959 0810 FF .byte -1
+ 21960 0811 FF .byte -1
+ 21961 0812 FF .byte -1
+ 21962 0813 FF .byte -1
+ 21963 0814 00 .byte 0
+ 21964 0815 01 .byte 1
+ 21965 0816 02 .byte 2
+ 21966 0817 03 .byte 3
+ 21967 0818 04 .byte 4
+ 21968 0819 05 .byte 5
+ 21969 081a 06 .byte 6
+ 21970 081b 07 .byte 7
+ 21971 081c 08 .byte 8
+ 21972 081d 09 .byte 9
+ 21973 081e 0A .byte 10
+
GAS LISTING /tmp/ccjbMjHD.s page 657
+
+
+ 21974 081f 0B .byte 11
+ 21975 .align 16
+ 21976 .type mask.7952, @object
+ 21977 .size mask.7952, 16
+ 21978 mask.7952:
+ 21979 0820 08 .byte 8
+ 21980 0821 09 .byte 9
+ 21981 0822 0A .byte 10
+ 21982 0823 0B .byte 11
+ 21983 0824 0C .byte 12
+ 21984 0825 0D .byte 13
+ 21985 0826 0E .byte 14
+ 21986 0827 0F .byte 15
+ 21987 0828 FF .byte -1
+ 21988 0829 FF .byte -1
+ 21989 082a FF .byte -1
+ 21990 082b FF .byte -1
+ 21991 082c FF .byte -1
+ 21992 082d FF .byte -1
+ 21993 082e FF .byte -1
+ 21994 082f FF .byte -1
+ 21995 .align 16
+ 21996 .type InvShiftRowTable.7367, @object
+ 21997 .size InvShiftRowTable.7367, 16
+ 21998 InvShiftRowTable.7367:
+ 21999 0830 00 .byte 0
+ 22000 0831 0D .byte 13
+ 22001 0832 0A .byte 10
+ 22002 0833 07 .byte 7
+ 22003 0834 04 .byte 4
+ 22004 0835 01 .byte 1
+ 22005 0836 0E .byte 14
+ 22006 0837 0B .byte 11
+ 22007 0838 08 .byte 8
+ 22008 0839 05 .byte 5
+ 22009 083a 02 .byte 2
+ 22010 083b 0F .byte 15
+ 22011 083c 0C .byte 12
+ 22012 083d 09 .byte 9
+ 22013 083e 06 .byte 6
+ 22014 083f 03 .byte 3
+ 22015 .text
+ 22016 .Letext0:
+ 22017 .section .debug_loc,"", at progbits
+ 22018 .Ldebug_loc0:
+ 22019 .LLST0:
+ 22020 0000 00000000 .quad .LFB591-.Ltext0
+ 22020 00000000
+ 22021 0008 01000000 .quad .LCFI0-.Ltext0
+ 22021 00000000
+ 22022 0010 0200 .value 0x2
+ 22023 0012 77 .byte 0x77
+ 22024 0013 08 .sleb128 8
+ 22025 0014 01000000 .quad .LCFI0-.Ltext0
+ 22025 00000000
+ 22026 001c 04000000 .quad .LCFI1-.Ltext0
+ 22026 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 658
+
+
+ 22027 0024 0200 .value 0x2
+ 22028 0026 77 .byte 0x77
+ 22029 0027 10 .sleb128 16
+ 22030 0028 04000000 .quad .LCFI1-.Ltext0
+ 22030 00000000
+ 22031 0030 14000000 .quad .LFE591-.Ltext0
+ 22031 00000000
+ 22032 0038 0200 .value 0x2
+ 22033 003a 76 .byte 0x76
+ 22034 003b 10 .sleb128 16
+ 22035 003c 00000000 .quad 0x0
+ 22035 00000000
+ 22036 0044 00000000 .quad 0x0
+ 22036 00000000
+ 22037 .LLST1:
+ 22038 004c 14000000 .quad .LFB645-.Ltext0
+ 22038 00000000
+ 22039 0054 15000000 .quad .LCFI2-.Ltext0
+ 22039 00000000
+ 22040 005c 0200 .value 0x2
+ 22041 005e 77 .byte 0x77
+ 22042 005f 08 .sleb128 8
+ 22043 0060 15000000 .quad .LCFI2-.Ltext0
+ 22043 00000000
+ 22044 0068 18000000 .quad .LCFI3-.Ltext0
+ 22044 00000000
+ 22045 0070 0200 .value 0x2
+ 22046 0072 77 .byte 0x77
+ 22047 0073 10 .sleb128 16
+ 22048 0074 18000000 .quad .LCFI3-.Ltext0
+ 22048 00000000
+ 22049 007c EF540000 .quad .LFE645-.Ltext0
+ 22049 00000000
+ 22050 0084 0200 .value 0x2
+ 22051 0086 76 .byte 0x76
+ 22052 0087 10 .sleb128 16
+ 22053 0088 00000000 .quad 0x0
+ 22053 00000000
+ 22054 0090 00000000 .quad 0x0
+ 22054 00000000
+ 22055 .LLST2:
+ 22056 0098 EF540000 .quad .LFB646-.Ltext0
+ 22056 00000000
+ 22057 00a0 F0540000 .quad .LCFI4-.Ltext0
+ 22057 00000000
+ 22058 00a8 0200 .value 0x2
+ 22059 00aa 77 .byte 0x77
+ 22060 00ab 08 .sleb128 8
+ 22061 00ac F0540000 .quad .LCFI4-.Ltext0
+ 22061 00000000
+ 22062 00b4 F3540000 .quad .LCFI5-.Ltext0
+ 22062 00000000
+ 22063 00bc 0200 .value 0x2
+ 22064 00be 77 .byte 0x77
+ 22065 00bf 10 .sleb128 16
+ 22066 00c0 F3540000 .quad .LCFI5-.Ltext0
+ 22066 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 659
+
+
+ 22067 00c8 7D960000 .quad .LFE646-.Ltext0
+ 22067 00000000
+ 22068 00d0 0200 .value 0x2
+ 22069 00d2 76 .byte 0x76
+ 22070 00d3 10 .sleb128 16
+ 22071 00d4 00000000 .quad 0x0
+ 22071 00000000
+ 22072 00dc 00000000 .quad 0x0
+ 22072 00000000
+ 22073 .LLST3:
+ 22074 00e4 7D960000 .quad .LFB647-.Ltext0
+ 22074 00000000
+ 22075 00ec 7E960000 .quad .LCFI6-.Ltext0
+ 22075 00000000
+ 22076 00f4 0200 .value 0x2
+ 22077 00f6 77 .byte 0x77
+ 22078 00f7 08 .sleb128 8
+ 22079 00f8 7E960000 .quad .LCFI6-.Ltext0
+ 22079 00000000
+ 22080 0100 81960000 .quad .LCFI7-.Ltext0
+ 22080 00000000
+ 22081 0108 0200 .value 0x2
+ 22082 010a 77 .byte 0x77
+ 22083 010b 10 .sleb128 16
+ 22084 010c 81960000 .quad .LCFI7-.Ltext0
+ 22084 00000000
+ 22085 0114 79E40000 .quad .LFE647-.Ltext0
+ 22085 00000000
+ 22086 011c 0200 .value 0x2
+ 22087 011e 76 .byte 0x76
+ 22088 011f 10 .sleb128 16
+ 22089 0120 00000000 .quad 0x0
+ 22089 00000000
+ 22090 0128 00000000 .quad 0x0
+ 22090 00000000
+ 22091 .LLST4:
+ 22092 0130 79E40000 .quad .LFB648-.Ltext0
+ 22092 00000000
+ 22093 0138 7AE40000 .quad .LCFI8-.Ltext0
+ 22093 00000000
+ 22094 0140 0200 .value 0x2
+ 22095 0142 77 .byte 0x77
+ 22096 0143 08 .sleb128 8
+ 22097 0144 7AE40000 .quad .LCFI8-.Ltext0
+ 22097 00000000
+ 22098 014c 7DE40000 .quad .LCFI9-.Ltext0
+ 22098 00000000
+ 22099 0154 0200 .value 0x2
+ 22100 0156 77 .byte 0x77
+ 22101 0157 10 .sleb128 16
+ 22102 0158 7DE40000 .quad .LCFI9-.Ltext0
+ 22102 00000000
+ 22103 0160 39F40000 .quad .LFE648-.Ltext0
+ 22103 00000000
+ 22104 0168 0200 .value 0x2
+ 22105 016a 76 .byte 0x76
+ 22106 016b 10 .sleb128 16
+
GAS LISTING /tmp/ccjbMjHD.s page 660
+
+
+ 22107 016c 00000000 .quad 0x0
+ 22107 00000000
+ 22108 0174 00000000 .quad 0x0
+ 22108 00000000
+ 22109 .LLST5:
+ 22110 017c 39F40000 .quad .LFB649-.Ltext0
+ 22110 00000000
+ 22111 0184 3AF40000 .quad .LCFI10-.Ltext0
+ 22111 00000000
+ 22112 018c 0200 .value 0x2
+ 22113 018e 77 .byte 0x77
+ 22114 018f 08 .sleb128 8
+ 22115 0190 3AF40000 .quad .LCFI10-.Ltext0
+ 22115 00000000
+ 22116 0198 3DF40000 .quad .LCFI11-.Ltext0
+ 22116 00000000
+ 22117 01a0 0200 .value 0x2
+ 22118 01a2 77 .byte 0x77
+ 22119 01a3 10 .sleb128 16
+ 22120 01a4 3DF40000 .quad .LCFI11-.Ltext0
+ 22120 00000000
+ 22121 01ac 63F40000 .quad .LFE649-.Ltext0
+ 22121 00000000
+ 22122 01b4 0200 .value 0x2
+ 22123 01b6 76 .byte 0x76
+ 22124 01b7 10 .sleb128 16
+ 22125 01b8 00000000 .quad 0x0
+ 22125 00000000
+ 22126 01c0 00000000 .quad 0x0
+ 22126 00000000
+ 22127 .LLST6:
+ 22128 01c8 63F40000 .quad .LFB650-.Ltext0
+ 22128 00000000
+ 22129 01d0 64F40000 .quad .LCFI12-.Ltext0
+ 22129 00000000
+ 22130 01d8 0200 .value 0x2
+ 22131 01da 77 .byte 0x77
+ 22132 01db 08 .sleb128 8
+ 22133 01dc 64F40000 .quad .LCFI12-.Ltext0
+ 22133 00000000
+ 22134 01e4 67F40000 .quad .LCFI13-.Ltext0
+ 22134 00000000
+ 22135 01ec 0200 .value 0x2
+ 22136 01ee 77 .byte 0x77
+ 22137 01ef 10 .sleb128 16
+ 22138 01f0 67F40000 .quad .LCFI13-.Ltext0
+ 22138 00000000
+ 22139 01f8 8DF40000 .quad .LFE650-.Ltext0
+ 22139 00000000
+ 22140 0200 0200 .value 0x2
+ 22141 0202 76 .byte 0x76
+ 22142 0203 10 .sleb128 16
+ 22143 0204 00000000 .quad 0x0
+ 22143 00000000
+ 22144 020c 00000000 .quad 0x0
+ 22144 00000000
+ 22145 .LLST7:
+
GAS LISTING /tmp/ccjbMjHD.s page 661
+
+
+ 22146 0214 8DF40000 .quad .LFB651-.Ltext0
+ 22146 00000000
+ 22147 021c 8EF40000 .quad .LCFI14-.Ltext0
+ 22147 00000000
+ 22148 0224 0200 .value 0x2
+ 22149 0226 77 .byte 0x77
+ 22150 0227 08 .sleb128 8
+ 22151 0228 8EF40000 .quad .LCFI14-.Ltext0
+ 22151 00000000
+ 22152 0230 91F40000 .quad .LCFI15-.Ltext0
+ 22152 00000000
+ 22153 0238 0200 .value 0x2
+ 22154 023a 77 .byte 0x77
+ 22155 023b 10 .sleb128 16
+ 22156 023c 91F40000 .quad .LCFI15-.Ltext0
+ 22156 00000000
+ 22157 0244 B7F40000 .quad .LFE651-.Ltext0
+ 22157 00000000
+ 22158 024c 0200 .value 0x2
+ 22159 024e 76 .byte 0x76
+ 22160 024f 10 .sleb128 16
+ 22161 0250 00000000 .quad 0x0
+ 22161 00000000
+ 22162 0258 00000000 .quad 0x0
+ 22162 00000000
+ 22163 .LLST8:
+ 22164 0260 B7F40000 .quad .LFB655-.Ltext0
+ 22164 00000000
+ 22165 0268 B8F40000 .quad .LCFI16-.Ltext0
+ 22165 00000000
+ 22166 0270 0200 .value 0x2
+ 22167 0272 77 .byte 0x77
+ 22168 0273 08 .sleb128 8
+ 22169 0274 B8F40000 .quad .LCFI16-.Ltext0
+ 22169 00000000
+ 22170 027c BBF40000 .quad .LCFI17-.Ltext0
+ 22170 00000000
+ 22171 0284 0200 .value 0x2
+ 22172 0286 77 .byte 0x77
+ 22173 0287 10 .sleb128 16
+ 22174 0288 BBF40000 .quad .LCFI17-.Ltext0
+ 22174 00000000
+ 22175 0290 030D0100 .quad .LFE655-.Ltext0
+ 22175 00000000
+ 22176 0298 0200 .value 0x2
+ 22177 029a 76 .byte 0x76
+ 22178 029b 10 .sleb128 16
+ 22179 029c 00000000 .quad 0x0
+ 22179 00000000
+ 22180 02a4 00000000 .quad 0x0
+ 22180 00000000
+ 22181 .LLST9:
+ 22182 02ac 030D0100 .quad .LFB659-.Ltext0
+ 22182 00000000
+ 22183 02b4 040D0100 .quad .LCFI18-.Ltext0
+ 22183 00000000
+ 22184 02bc 0200 .value 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 662
+
+
+ 22185 02be 77 .byte 0x77
+ 22186 02bf 08 .sleb128 8
+ 22187 02c0 040D0100 .quad .LCFI18-.Ltext0
+ 22187 00000000
+ 22188 02c8 070D0100 .quad .LCFI19-.Ltext0
+ 22188 00000000
+ 22189 02d0 0200 .value 0x2
+ 22190 02d2 77 .byte 0x77
+ 22191 02d3 10 .sleb128 16
+ 22192 02d4 070D0100 .quad .LCFI19-.Ltext0
+ 22192 00000000
+ 22193 02dc D92C0100 .quad .LFE659-.Ltext0
+ 22193 00000000
+ 22194 02e4 0200 .value 0x2
+ 22195 02e6 76 .byte 0x76
+ 22196 02e7 10 .sleb128 16
+ 22197 02e8 00000000 .quad 0x0
+ 22197 00000000
+ 22198 02f0 00000000 .quad 0x0
+ 22198 00000000
+ 22199 .LLST10:
+ 22200 02f8 D92C0100 .quad .LFB660-.Ltext0
+ 22200 00000000
+ 22201 0300 DA2C0100 .quad .LCFI20-.Ltext0
+ 22201 00000000
+ 22202 0308 0200 .value 0x2
+ 22203 030a 77 .byte 0x77
+ 22204 030b 08 .sleb128 8
+ 22205 030c DA2C0100 .quad .LCFI20-.Ltext0
+ 22205 00000000
+ 22206 0314 DD2C0100 .quad .LCFI21-.Ltext0
+ 22206 00000000
+ 22207 031c 0200 .value 0x2
+ 22208 031e 77 .byte 0x77
+ 22209 031f 10 .sleb128 16
+ 22210 0320 DD2C0100 .quad .LCFI21-.Ltext0
+ 22210 00000000
+ 22211 0328 E32C0100 .quad .LFE660-.Ltext0
+ 22211 00000000
+ 22212 0330 0200 .value 0x2
+ 22213 0332 76 .byte 0x76
+ 22214 0333 10 .sleb128 16
+ 22215 0334 00000000 .quad 0x0
+ 22215 00000000
+ 22216 033c 00000000 .quad 0x0
+ 22216 00000000
+ 22217 .LLST11:
+ 22218 0344 E32C0100 .quad .LFB661-.Ltext0
+ 22218 00000000
+ 22219 034c E42C0100 .quad .LCFI22-.Ltext0
+ 22219 00000000
+ 22220 0354 0200 .value 0x2
+ 22221 0356 77 .byte 0x77
+ 22222 0357 08 .sleb128 8
+ 22223 0358 E42C0100 .quad .LCFI22-.Ltext0
+ 22223 00000000
+ 22224 0360 E72C0100 .quad .LCFI23-.Ltext0
+
GAS LISTING /tmp/ccjbMjHD.s page 663
+
+
+ 22224 00000000
+ 22225 0368 0200 .value 0x2
+ 22226 036a 77 .byte 0x77
+ 22227 036b 10 .sleb128 16
+ 22228 036c E72C0100 .quad .LCFI23-.Ltext0
+ 22228 00000000
+ 22229 0374 EE2C0100 .quad .LFE661-.Ltext0
+ 22229 00000000
+ 22230 037c 0200 .value 0x2
+ 22231 037e 76 .byte 0x76
+ 22232 037f 10 .sleb128 16
+ 22233 0380 00000000 .quad 0x0
+ 22233 00000000
+ 22234 0388 00000000 .quad 0x0
+ 22234 00000000
+ 22235 .LLST12:
+ 22236 0390 EE2C0100 .quad .LFB662-.Ltext0
+ 22236 00000000
+ 22237 0398 EF2C0100 .quad .LCFI24-.Ltext0
+ 22237 00000000
+ 22238 03a0 0200 .value 0x2
+ 22239 03a2 77 .byte 0x77
+ 22240 03a3 08 .sleb128 8
+ 22241 03a4 EF2C0100 .quad .LCFI24-.Ltext0
+ 22241 00000000
+ 22242 03ac F22C0100 .quad .LCFI25-.Ltext0
+ 22242 00000000
+ 22243 03b4 0200 .value 0x2
+ 22244 03b6 77 .byte 0x77
+ 22245 03b7 10 .sleb128 16
+ 22246 03b8 F22C0100 .quad .LCFI25-.Ltext0
+ 22246 00000000
+ 22247 03c0 F92C0100 .quad .LFE662-.Ltext0
+ 22247 00000000
+ 22248 03c8 0200 .value 0x2
+ 22249 03ca 76 .byte 0x76
+ 22250 03cb 10 .sleb128 16
+ 22251 03cc 00000000 .quad 0x0
+ 22251 00000000
+ 22252 03d4 00000000 .quad 0x0
+ 22252 00000000
+ 22253 .LLST13:
+ 22254 03dc F92C0100 .quad .LFB663-.Ltext0
+ 22254 00000000
+ 22255 03e4 FA2C0100 .quad .LCFI26-.Ltext0
+ 22255 00000000
+ 22256 03ec 0200 .value 0x2
+ 22257 03ee 77 .byte 0x77
+ 22258 03ef 08 .sleb128 8
+ 22259 03f0 FA2C0100 .quad .LCFI26-.Ltext0
+ 22259 00000000
+ 22260 03f8 FD2C0100 .quad .LCFI27-.Ltext0
+ 22260 00000000
+ 22261 0400 0200 .value 0x2
+ 22262 0402 77 .byte 0x77
+ 22263 0403 10 .sleb128 16
+ 22264 0404 FD2C0100 .quad .LCFI27-.Ltext0
+
GAS LISTING /tmp/ccjbMjHD.s page 664
+
+
+ 22264 00000000
+ 22265 040c E22D0100 .quad .LFE663-.Ltext0
+ 22265 00000000
+ 22266 0414 0200 .value 0x2
+ 22267 0416 76 .byte 0x76
+ 22268 0417 10 .sleb128 16
+ 22269 0418 00000000 .quad 0x0
+ 22269 00000000
+ 22270 0420 00000000 .quad 0x0
+ 22270 00000000
+ 22271 .LLST14:
+ 22272 0428 E22D0100 .quad .LFB664-.Ltext0
+ 22272 00000000
+ 22273 0430 E32D0100 .quad .LCFI28-.Ltext0
+ 22273 00000000
+ 22274 0438 0200 .value 0x2
+ 22275 043a 77 .byte 0x77
+ 22276 043b 08 .sleb128 8
+ 22277 043c E32D0100 .quad .LCFI28-.Ltext0
+ 22277 00000000
+ 22278 0444 E62D0100 .quad .LCFI29-.Ltext0
+ 22278 00000000
+ 22279 044c 0200 .value 0x2
+ 22280 044e 77 .byte 0x77
+ 22281 044f 10 .sleb128 16
+ 22282 0450 E62D0100 .quad .LCFI29-.Ltext0
+ 22282 00000000
+ 22283 0458 A52E0100 .quad .LFE664-.Ltext0
+ 22283 00000000
+ 22284 0460 0200 .value 0x2
+ 22285 0462 76 .byte 0x76
+ 22286 0463 10 .sleb128 16
+ 22287 0464 00000000 .quad 0x0
+ 22287 00000000
+ 22288 046c 00000000 .quad 0x0
+ 22288 00000000
+ 22289 .LLST15:
+ 22290 0474 A52E0100 .quad .LFB665-.Ltext0
+ 22290 00000000
+ 22291 047c A62E0100 .quad .LCFI30-.Ltext0
+ 22291 00000000
+ 22292 0484 0200 .value 0x2
+ 22293 0486 77 .byte 0x77
+ 22294 0487 08 .sleb128 8
+ 22295 0488 A62E0100 .quad .LCFI30-.Ltext0
+ 22295 00000000
+ 22296 0490 A92E0100 .quad .LCFI31-.Ltext0
+ 22296 00000000
+ 22297 0498 0200 .value 0x2
+ 22298 049a 77 .byte 0x77
+ 22299 049b 10 .sleb128 16
+ 22300 049c A92E0100 .quad .LCFI31-.Ltext0
+ 22300 00000000
+ 22301 04a4 682F0100 .quad .LFE665-.Ltext0
+ 22301 00000000
+ 22302 04ac 0200 .value 0x2
+ 22303 04ae 76 .byte 0x76
+
GAS LISTING /tmp/ccjbMjHD.s page 665
+
+
+ 22304 04af 10 .sleb128 16
+ 22305 04b0 00000000 .quad 0x0
+ 22305 00000000
+ 22306 04b8 00000000 .quad 0x0
+ 22306 00000000
+ 22307 .LLST16:
+ 22308 04c0 682F0100 .quad .LFB666-.Ltext0
+ 22308 00000000
+ 22309 04c8 692F0100 .quad .LCFI32-.Ltext0
+ 22309 00000000
+ 22310 04d0 0200 .value 0x2
+ 22311 04d2 77 .byte 0x77
+ 22312 04d3 08 .sleb128 8
+ 22313 04d4 692F0100 .quad .LCFI32-.Ltext0
+ 22313 00000000
+ 22314 04dc 6C2F0100 .quad .LCFI33-.Ltext0
+ 22314 00000000
+ 22315 04e4 0200 .value 0x2
+ 22316 04e6 77 .byte 0x77
+ 22317 04e7 10 .sleb128 16
+ 22318 04e8 6C2F0100 .quad .LCFI33-.Ltext0
+ 22318 00000000
+ 22319 04f0 2B300100 .quad .LFE666-.Ltext0
+ 22319 00000000
+ 22320 04f8 0200 .value 0x2
+ 22321 04fa 76 .byte 0x76
+ 22322 04fb 10 .sleb128 16
+ 22323 04fc 00000000 .quad 0x0
+ 22323 00000000
+ 22324 0504 00000000 .quad 0x0
+ 22324 00000000
+ 22325 .LLST17:
+ 22326 050c 2B300100 .quad .LFB667-.Ltext0
+ 22326 00000000
+ 22327 0514 2C300100 .quad .LCFI34-.Ltext0
+ 22327 00000000
+ 22328 051c 0200 .value 0x2
+ 22329 051e 77 .byte 0x77
+ 22330 051f 08 .sleb128 8
+ 22331 0520 2C300100 .quad .LCFI34-.Ltext0
+ 22331 00000000
+ 22332 0528 2F300100 .quad .LCFI35-.Ltext0
+ 22332 00000000
+ 22333 0530 0200 .value 0x2
+ 22334 0532 77 .byte 0x77
+ 22335 0533 10 .sleb128 16
+ 22336 0534 2F300100 .quad .LCFI35-.Ltext0
+ 22336 00000000
+ 22337 053c 81320100 .quad .LFE667-.Ltext0
+ 22337 00000000
+ 22338 0544 0200 .value 0x2
+ 22339 0546 76 .byte 0x76
+ 22340 0547 10 .sleb128 16
+ 22341 0548 00000000 .quad 0x0
+ 22341 00000000
+ 22342 0550 00000000 .quad 0x0
+ 22342 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 666
+
+
+ 22343 .LLST18:
+ 22344 0558 81320100 .quad .LFB668-.Ltext0
+ 22344 00000000
+ 22345 0560 82320100 .quad .LCFI36-.Ltext0
+ 22345 00000000
+ 22346 0568 0200 .value 0x2
+ 22347 056a 77 .byte 0x77
+ 22348 056b 08 .sleb128 8
+ 22349 056c 82320100 .quad .LCFI36-.Ltext0
+ 22349 00000000
+ 22350 0574 85320100 .quad .LCFI37-.Ltext0
+ 22350 00000000
+ 22351 057c 0200 .value 0x2
+ 22352 057e 77 .byte 0x77
+ 22353 057f 10 .sleb128 16
+ 22354 0580 85320100 .quad .LCFI37-.Ltext0
+ 22354 00000000
+ 22355 0588 52330100 .quad .LFE668-.Ltext0
+ 22355 00000000
+ 22356 0590 0200 .value 0x2
+ 22357 0592 76 .byte 0x76
+ 22358 0593 10 .sleb128 16
+ 22359 0594 00000000 .quad 0x0
+ 22359 00000000
+ 22360 059c 00000000 .quad 0x0
+ 22360 00000000
+ 22361 .file 4 "/usr/include/stdint.h"
+ 22362 .file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 22363 .file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 22364 .file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 22365 .file 8 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 22366 .file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 22367 .file 10 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 22368 .section .debug_info
+ 22369 0000 57180100 .long 0x11857
+ 22370 0004 0200 .value 0x2
+ 22371 0006 00000000 .long .Ldebug_abbrev0
+ 22372 000a 08 .byte 0x8
+ 22373 000b 01 .uleb128 0x1
+ 22374 000c 00000000 .long .LASF425
+ 22375 0010 01 .byte 0x1
+ 22376 0011 00000000 .long .LASF426
+ 22377 0015 00000000 .long .LASF427
+ 22378 0019 00000000 .quad .Ltext0
+ 22378 00000000
+ 22379 0021 00000000 .quad .Letext0
+ 22379 00000000
+ 22380 0029 00000000 .long .Ldebug_line0
+ 22381 002d 02 .uleb128 0x2
+ 22382 002e 01 .byte 0x1
+ 22383 002f 06 .byte 0x6
+ 22384 0030 00000000 .long .LASF0
+ 22385 0034 02 .uleb128 0x2
+ 22386 0035 02 .byte 0x2
+ 22387 0036 05 .byte 0x5
+ 22388 0037 00000000 .long .LASF1
+ 22389 003b 03 .uleb128 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 667
+
+
+ 22390 003c 00000000 .long .LASF3
+ 22391 0040 04 .byte 0x4
+ 22392 0041 27 .byte 0x27
+ 22393 0042 46000000 .long 0x46
+ 22394 0046 04 .uleb128 0x4
+ 22395 0047 04 .byte 0x4
+ 22396 0048 05 .byte 0x5
+ 22397 0049 696E7400 .string "int"
+ 22398 004d 02 .uleb128 0x2
+ 22399 004e 08 .byte 0x8
+ 22400 004f 05 .byte 0x5
+ 22401 0050 00000000 .long .LASF2
+ 22402 0054 03 .uleb128 0x3
+ 22403 0055 00000000 .long .LASF4
+ 22404 0059 04 .byte 0x4
+ 22405 005a 31 .byte 0x31
+ 22406 005b 5F000000 .long 0x5f
+ 22407 005f 02 .uleb128 0x2
+ 22408 0060 01 .byte 0x1
+ 22409 0061 08 .byte 0x8
+ 22410 0062 00000000 .long .LASF5
+ 22411 0066 02 .uleb128 0x2
+ 22412 0067 02 .byte 0x2
+ 22413 0068 07 .byte 0x7
+ 22414 0069 00000000 .long .LASF6
+ 22415 006d 03 .uleb128 0x3
+ 22416 006e 00000000 .long .LASF7
+ 22417 0072 04 .byte 0x4
+ 22418 0073 34 .byte 0x34
+ 22419 0074 78000000 .long 0x78
+ 22420 0078 02 .uleb128 0x2
+ 22421 0079 04 .byte 0x4
+ 22422 007a 07 .byte 0x7
+ 22423 007b 00000000 .long .LASF8
+ 22424 007f 03 .uleb128 0x3
+ 22425 0080 00000000 .long .LASF9
+ 22426 0084 04 .byte 0x4
+ 22427 0085 38 .byte 0x38
+ 22428 0086 8A000000 .long 0x8a
+ 22429 008a 02 .uleb128 0x2
+ 22430 008b 08 .byte 0x8
+ 22431 008c 07 .byte 0x7
+ 22432 008d 00000000 .long .LASF10
+ 22433 0091 03 .uleb128 0x3
+ 22434 0092 00000000 .long .LASF11
+ 22435 0096 05 .byte 0x5
+ 22436 0097 30 .byte 0x30
+ 22437 0098 6D000000 .long 0x6d
+ 22438 009c 05 .uleb128 0x5
+ 22439 009d 08 .byte 0x8
+ 22440 009e 07 .byte 0x7
+ 22441 009f 02 .uleb128 0x2
+ 22442 00a0 01 .byte 0x1
+ 22443 00a1 06 .byte 0x6
+ 22444 00a2 00000000 .long .LASF12
+ 22445 00a6 02 .uleb128 0x2
+ 22446 00a7 08 .byte 0x8
+
GAS LISTING /tmp/ccjbMjHD.s page 668
+
+
+ 22447 00a8 05 .byte 0x5
+ 22448 00a9 00000000 .long .LASF13
+ 22449 00ad 02 .uleb128 0x2
+ 22450 00ae 04 .byte 0x4
+ 22451 00af 04 .byte 0x4
+ 22452 00b0 00000000 .long .LASF14
+ 22453 00b4 06 .uleb128 0x6
+ 22454 00b5 46000000 .long 0x46
+ 22455 00b9 07 .uleb128 0x7
+ 22456 00ba 08 .byte 0x8
+ 22457 00bb BF000000 .long 0xbf
+ 22458 00bf 06 .uleb128 0x6
+ 22459 00c0 9F000000 .long 0x9f
+ 22460 00c4 08 .uleb128 0x8
+ 22461 00c5 08 .byte 0x8
+ 22462 00c6 07 .uleb128 0x7
+ 22463 00c7 08 .byte 0x8
+ 22464 00c8 9F000000 .long 0x9f
+ 22465 00cc 02 .uleb128 0x2
+ 22466 00cd 08 .byte 0x8
+ 22467 00ce 07 .byte 0x7
+ 22468 00cf 00000000 .long .LASF15
+ 22469 00d3 07 .uleb128 0x7
+ 22470 00d4 08 .byte 0x8
+ 22471 00d5 D9000000 .long 0xd9
+ 22472 00d9 09 .uleb128 0x9
+ 22473 00da 02 .uleb128 0x2
+ 22474 00db 08 .byte 0x8
+ 22475 00dc 04 .byte 0x4
+ 22476 00dd 00000000 .long .LASF16
+ 22477 00e1 0A .uleb128 0xa
+ 22478 00e2 01 .byte 0x1
+ 22479 00e3 DA000000 .long 0xda
+ 22480 00e7 03 .uleb128 0x3
+ 22481 00e8 00000000 .long .LASF17
+ 22482 00ec 03 .byte 0x3
+ 22483 00ed 26 .byte 0x26
+ 22484 00ee F2000000 .long 0xf2
+ 22485 00f2 0A .uleb128 0xa
+ 22486 00f3 01 .byte 0x1
+ 22487 00f4 54000000 .long 0x54
+ 22488 00f8 0A .uleb128 0xa
+ 22489 00f9 01 .byte 0x1
+ 22490 00fa 3B000000 .long 0x3b
+ 22491 00fe 0A .uleb128 0xa
+ 22492 00ff 01 .byte 0x1
+ 22493 0100 9F000000 .long 0x9f
+ 22494 0104 0B .uleb128 0xb
+ 22495 0105 04 .byte 0x4
+ 22496 0106 06 .byte 0x6
+ 22497 0107 D6 .byte 0xd6
+ 22498 0108 85010000 .long 0x185
+ 22499 010c 0C .uleb128 0xc
+ 22500 010d 00000000 .long .LASF18
+ 22501 0111 7F .sleb128 -1
+ 22502 0112 0C .uleb128 0xc
+ 22503 0113 00000000 .long .LASF19
+
GAS LISTING /tmp/ccjbMjHD.s page 669
+
+
+ 22504 0117 00 .sleb128 0
+ 22505 0118 0C .uleb128 0xc
+ 22506 0119 00000000 .long .LASF20
+ 22507 011d 01 .sleb128 1
+ 22508 011e 0C .uleb128 0xc
+ 22509 011f 00000000 .long .LASF21
+ 22510 0123 02 .sleb128 2
+ 22511 0124 0C .uleb128 0xc
+ 22512 0125 00000000 .long .LASF22
+ 22513 0129 03 .sleb128 3
+ 22514 012a 0C .uleb128 0xc
+ 22515 012b 00000000 .long .LASF23
+ 22516 012f 04 .sleb128 4
+ 22517 0130 0C .uleb128 0xc
+ 22518 0131 00000000 .long .LASF24
+ 22519 0135 05 .sleb128 5
+ 22520 0136 0C .uleb128 0xc
+ 22521 0137 00000000 .long .LASF25
+ 22522 013b 06 .sleb128 6
+ 22523 013c 0C .uleb128 0xc
+ 22524 013d 00000000 .long .LASF26
+ 22525 0141 07 .sleb128 7
+ 22526 0142 0C .uleb128 0xc
+ 22527 0143 00000000 .long .LASF27
+ 22528 0147 08 .sleb128 8
+ 22529 0148 0C .uleb128 0xc
+ 22530 0149 00000000 .long .LASF28
+ 22531 014d 09 .sleb128 9
+ 22532 014e 0C .uleb128 0xc
+ 22533 014f 00000000 .long .LASF29
+ 22534 0153 0A .sleb128 10
+ 22535 0154 0C .uleb128 0xc
+ 22536 0155 00000000 .long .LASF30
+ 22537 0159 0B .sleb128 11
+ 22538 015a 0C .uleb128 0xc
+ 22539 015b 00000000 .long .LASF31
+ 22540 015f 0C .sleb128 12
+ 22541 0160 0C .uleb128 0xc
+ 22542 0161 00000000 .long .LASF32
+ 22543 0165 0D .sleb128 13
+ 22544 0166 0C .uleb128 0xc
+ 22545 0167 00000000 .long .LASF33
+ 22546 016b 0E .sleb128 14
+ 22547 016c 0C .uleb128 0xc
+ 22548 016d 00000000 .long .LASF34
+ 22549 0171 0F .sleb128 15
+ 22550 0172 0C .uleb128 0xc
+ 22551 0173 00000000 .long .LASF35
+ 22552 0177 10 .sleb128 16
+ 22553 0178 0C .uleb128 0xc
+ 22554 0179 00000000 .long .LASF36
+ 22555 017d 11 .sleb128 17
+ 22556 017e 0C .uleb128 0xc
+ 22557 017f 00000000 .long .LASF37
+ 22558 0183 12 .sleb128 18
+ 22559 0184 00 .byte 0x0
+ 22560 0185 0D .uleb128 0xd
+
GAS LISTING /tmp/ccjbMjHD.s page 670
+
+
+ 22561 0186 04 .byte 0x4
+ 22562 0187 06 .byte 0x6
+ 22563 0188 6701 .value 0x167
+ 22564 018a B3010000 .long 0x1b3
+ 22565 018e 0C .uleb128 0xc
+ 22566 018f 00000000 .long .LASF38
+ 22567 0193 00 .sleb128 0
+ 22568 0194 0C .uleb128 0xc
+ 22569 0195 00000000 .long .LASF39
+ 22570 0199 01 .sleb128 1
+ 22571 019a 0C .uleb128 0xc
+ 22572 019b 00000000 .long .LASF40
+ 22573 019f 02 .sleb128 2
+ 22574 01a0 0C .uleb128 0xc
+ 22575 01a1 00000000 .long .LASF41
+ 22576 01a5 03 .sleb128 3
+ 22577 01a6 0C .uleb128 0xc
+ 22578 01a7 00000000 .long .LASF42
+ 22579 01ab 04 .sleb128 4
+ 22580 01ac 0C .uleb128 0xc
+ 22581 01ad 00000000 .long .LASF43
+ 22582 01b1 05 .sleb128 5
+ 22583 01b2 00 .byte 0x0
+ 22584 01b3 03 .uleb128 0x3
+ 22585 01b4 00000000 .long .LASF44
+ 22586 01b8 07 .byte 0x7
+ 22587 01b9 3B .byte 0x3b
+ 22588 01ba E7000000 .long 0xe7
+ 22589 01be 03 .uleb128 0x3
+ 22590 01bf 00000000 .long .LASF45
+ 22591 01c3 07 .byte 0x7
+ 22592 01c4 43 .byte 0x43
+ 22593 01c5 C9010000 .long 0x1c9
+ 22594 01c9 0E .uleb128 0xe
+ 22595 01ca 00000000 .long .LASF45
+ 22596 01ce 08 .byte 0x8
+ 22597 01cf 07 .byte 0x7
+ 22598 01d0 43 .byte 0x43
+ 22599 01d1 F2010000 .long 0x1f2
+ 22600 01d5 0F .uleb128 0xf
+ 22601 01d6 6D616A00 .string "maj"
+ 22602 01da 07 .byte 0x7
+ 22603 01db 46 .byte 0x46
+ 22604 01dc 6D000000 .long 0x6d
+ 22605 01e0 02 .byte 0x2
+ 22606 01e1 23 .byte 0x23
+ 22607 01e2 00 .uleb128 0x0
+ 22608 01e3 0F .uleb128 0xf
+ 22609 01e4 6D696E00 .string "min"
+ 22610 01e8 07 .byte 0x7
+ 22611 01e9 47 .byte 0x47
+ 22612 01ea 6D000000 .long 0x6d
+ 22613 01ee 02 .byte 0x2
+ 22614 01ef 23 .byte 0x23
+ 22615 01f0 04 .uleb128 0x4
+ 22616 01f1 00 .byte 0x0
+ 22617 01f2 03 .uleb128 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 671
+
+
+ 22618 01f3 00000000 .long .LASF46
+ 22619 01f7 07 .byte 0x7
+ 22620 01f8 52 .byte 0x52
+ 22621 01f9 FD010000 .long 0x1fd
+ 22622 01fd 0E .uleb128 0xe
+ 22623 01fe 00000000 .long .LASF46
+ 22624 0202 40 .byte 0x40
+ 22625 0203 07 .byte 0x7
+ 22626 0204 52 .byte 0x52
+ 22627 0205 7A020000 .long 0x27a
+ 22628 0209 10 .uleb128 0x10
+ 22629 020a 00000000 .long .LASF47
+ 22630 020e 07 .byte 0x7
+ 22631 020f 5E .byte 0x5e
+ 22632 0210 BE010000 .long 0x1be
+ 22633 0214 02 .byte 0x2
+ 22634 0215 23 .byte 0x23
+ 22635 0216 00 .uleb128 0x0
+ 22636 0217 10 .uleb128 0x10
+ 22637 0218 00000000 .long .LASF48
+ 22638 021c 07 .byte 0x7
+ 22639 021d 63 .byte 0x63
+ 22640 021e BE020000 .long 0x2be
+ 22641 0222 02 .byte 0x2
+ 22642 0223 23 .byte 0x23
+ 22643 0224 08 .uleb128 0x8
+ 22644 0225 10 .uleb128 0x10
+ 22645 0226 00000000 .long .LASF49
+ 22646 022a 07 .byte 0x7
+ 22647 022b 65 .byte 0x65
+ 22648 022c CF020000 .long 0x2cf
+ 22649 0230 02 .byte 0x2
+ 22650 0231 23 .byte 0x23
+ 22651 0232 10 .uleb128 0x10
+ 22652 0233 10 .uleb128 0x10
+ 22653 0234 00000000 .long .LASF50
+ 22654 0238 07 .byte 0x7
+ 22655 0239 67 .byte 0x67
+ 22656 023a CF020000 .long 0x2cf
+ 22657 023e 02 .byte 0x2
+ 22658 023f 23 .byte 0x23
+ 22659 0240 18 .uleb128 0x18
+ 22660 0241 10 .uleb128 0x10
+ 22661 0242 00000000 .long .LASF51
+ 22662 0246 07 .byte 0x7
+ 22663 0247 69 .byte 0x69
+ 22664 0248 EF020000 .long 0x2ef
+ 22665 024c 02 .byte 0x2
+ 22666 024d 23 .byte 0x23
+ 22667 024e 20 .uleb128 0x20
+ 22668 024f 10 .uleb128 0x10
+ 22669 0250 00000000 .long .LASF52
+ 22670 0254 07 .byte 0x7
+ 22671 0255 6D .byte 0x6d
+ 22672 0256 EF020000 .long 0x2ef
+ 22673 025a 02 .byte 0x2
+ 22674 025b 23 .byte 0x23
+
GAS LISTING /tmp/ccjbMjHD.s page 672
+
+
+ 22675 025c 28 .uleb128 0x28
+ 22676 025d 10 .uleb128 0x10
+ 22677 025e 00000000 .long .LASF53
+ 22678 0262 07 .byte 0x7
+ 22679 0263 71 .byte 0x71
+ 22680 0264 0B030000 .long 0x30b
+ 22681 0268 02 .byte 0x2
+ 22682 0269 23 .byte 0x23
+ 22683 026a 30 .uleb128 0x30
+ 22684 026b 10 .uleb128 0x10
+ 22685 026c 00000000 .long .LASF54
+ 22686 0270 07 .byte 0x7
+ 22687 0271 75 .byte 0x75
+ 22688 0272 0B030000 .long 0x30b
+ 22689 0276 02 .byte 0x2
+ 22690 0277 23 .byte 0x23
+ 22691 0278 38 .uleb128 0x38
+ 22692 0279 00 .byte 0x0
+ 22693 027a 03 .uleb128 0x3
+ 22694 027b 00000000 .long .LASF55
+ 22695 027f 07 .byte 0x7
+ 22696 0280 53 .byte 0x53
+ 22697 0281 85020000 .long 0x285
+ 22698 0285 11 .uleb128 0x11
+ 22699 0286 00000000 .long .LASF55
+ 22700 028a 40 .byte 0x40
+ 22701 028b 07 .byte 0x7
+ 22702 028c 53 .byte 0x53
+ 22703 028d A7020000 .long 0x2a7
+ 22704 0291 12 .uleb128 0x12
+ 22705 0292 00000000 .long .LASF47
+ 22706 0296 07 .byte 0x7
+ 22707 0297 7F .byte 0x7f
+ 22708 0298 BE010000 .long 0x1be
+ 22709 029c 13 .uleb128 0x13
+ 22710 029d 763100 .string "v1"
+ 22711 02a0 07 .byte 0x7
+ 22712 02a1 80 .byte 0x80
+ 22713 02a2 F2010000 .long 0x1f2
+ 22714 02a6 00 .byte 0x0
+ 22715 02a7 14 .uleb128 0x14
+ 22716 02a8 01 .byte 0x1
+ 22717 02a9 B3020000 .long 0x2b3
+ 22718 02ad 15 .uleb128 0x15
+ 22719 02ae B3020000 .long 0x2b3
+ 22720 02b2 00 .byte 0x0
+ 22721 02b3 07 .uleb128 0x7
+ 22722 02b4 08 .byte 0x8
+ 22723 02b5 B9020000 .long 0x2b9
+ 22724 02b9 06 .uleb128 0x6
+ 22725 02ba 7A020000 .long 0x27a
+ 22726 02be 07 .uleb128 0x7
+ 22727 02bf 08 .byte 0x8
+ 22728 02c0 A7020000 .long 0x2a7
+ 22729 02c4 16 .uleb128 0x16
+ 22730 02c5 6D000000 .long 0x6d
+ 22731 02c9 CF020000 .long 0x2cf
+
GAS LISTING /tmp/ccjbMjHD.s page 673
+
+
+ 22732 02cd 17 .uleb128 0x17
+ 22733 02ce 00 .byte 0x0
+ 22734 02cf 07 .uleb128 0x7
+ 22735 02d0 08 .byte 0x8
+ 22736 02d1 C4020000 .long 0x2c4
+ 22737 02d5 18 .uleb128 0x18
+ 22738 02d6 01 .byte 0x1
+ 22739 02d7 91000000 .long 0x91
+ 22740 02db EF020000 .long 0x2ef
+ 22741 02df 15 .uleb128 0x15
+ 22742 02e0 C4000000 .long 0xc4
+ 22743 02e4 15 .uleb128 0x15
+ 22744 02e5 B9000000 .long 0xb9
+ 22745 02e9 15 .uleb128 0x15
+ 22746 02ea 6D000000 .long 0x6d
+ 22747 02ee 00 .byte 0x0
+ 22748 02ef 07 .uleb128 0x7
+ 22749 02f0 08 .byte 0x8
+ 22750 02f1 D5020000 .long 0x2d5
+ 22751 02f5 14 .uleb128 0x14
+ 22752 02f6 01 .byte 0x1
+ 22753 02f7 0B030000 .long 0x30b
+ 22754 02fb 15 .uleb128 0x15
+ 22755 02fc B9000000 .long 0xb9
+ 22756 0300 15 .uleb128 0x15
+ 22757 0301 C6000000 .long 0xc6
+ 22758 0305 15 .uleb128 0x15
+ 22759 0306 D3000000 .long 0xd3
+ 22760 030a 00 .byte 0x0
+ 22761 030b 07 .uleb128 0x7
+ 22762 030c 08 .byte 0x8
+ 22763 030d F5020000 .long 0x2f5
+ 22764 0311 03 .uleb128 0x3
+ 22765 0312 00000000 .long .LASF56
+ 22766 0316 07 .byte 0x7
+ 22767 0317 84 .byte 0x84
+ 22768 0318 1C030000 .long 0x31c
+ 22769 031c 0E .uleb128 0xe
+ 22770 031d 00000000 .long .LASF56
+ 22771 0321 40 .byte 0x40
+ 22772 0322 07 .byte 0x7
+ 22773 0323 84 .byte 0x84
+ 22774 0324 99030000 .long 0x399
+ 22775 0328 10 .uleb128 0x10
+ 22776 0329 00000000 .long .LASF47
+ 22777 032d 07 .byte 0x7
+ 22778 032e 90 .byte 0x90
+ 22779 032f BE010000 .long 0x1be
+ 22780 0333 02 .byte 0x2
+ 22781 0334 23 .byte 0x23
+ 22782 0335 00 .uleb128 0x0
+ 22783 0336 10 .uleb128 0x10
+ 22784 0337 00000000 .long .LASF48
+ 22785 033b 07 .byte 0x7
+ 22786 033c 95 .byte 0x95
+ 22787 033d DD030000 .long 0x3dd
+ 22788 0341 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 674
+
+
+ 22789 0342 23 .byte 0x23
+ 22790 0343 08 .uleb128 0x8
+ 22791 0344 10 .uleb128 0x10
+ 22792 0345 00000000 .long .LASF49
+ 22793 0349 07 .byte 0x7
+ 22794 034a 97 .byte 0x97
+ 22795 034b CF020000 .long 0x2cf
+ 22796 034f 02 .byte 0x2
+ 22797 0350 23 .byte 0x23
+ 22798 0351 10 .uleb128 0x10
+ 22799 0352 10 .uleb128 0x10
+ 22800 0353 00000000 .long .LASF50
+ 22801 0357 07 .byte 0x7
+ 22802 0358 99 .byte 0x99
+ 22803 0359 CF020000 .long 0x2cf
+ 22804 035d 02 .byte 0x2
+ 22805 035e 23 .byte 0x23
+ 22806 035f 18 .uleb128 0x18
+ 22807 0360 10 .uleb128 0x10
+ 22808 0361 00000000 .long .LASF51
+ 22809 0365 07 .byte 0x7
+ 22810 0366 9B .byte 0x9b
+ 22811 0367 EF020000 .long 0x2ef
+ 22812 036b 02 .byte 0x2
+ 22813 036c 23 .byte 0x23
+ 22814 036d 20 .uleb128 0x20
+ 22815 036e 10 .uleb128 0x10
+ 22816 036f 00000000 .long .LASF52
+ 22817 0373 07 .byte 0x7
+ 22818 0374 9F .byte 0x9f
+ 22819 0375 EF020000 .long 0x2ef
+ 22820 0379 02 .byte 0x2
+ 22821 037a 23 .byte 0x23
+ 22822 037b 28 .uleb128 0x28
+ 22823 037c 10 .uleb128 0x10
+ 22824 037d 00000000 .long .LASF53
+ 22825 0381 07 .byte 0x7
+ 22826 0382 A3 .byte 0xa3
+ 22827 0383 F8030000 .long 0x3f8
+ 22828 0387 02 .byte 0x2
+ 22829 0388 23 .byte 0x23
+ 22830 0389 30 .uleb128 0x30
+ 22831 038a 10 .uleb128 0x10
+ 22832 038b 00000000 .long .LASF54
+ 22833 038f 07 .byte 0x7
+ 22834 0390 A6 .byte 0xa6
+ 22835 0391 F8030000 .long 0x3f8
+ 22836 0395 02 .byte 0x2
+ 22837 0396 23 .byte 0x23
+ 22838 0397 38 .uleb128 0x38
+ 22839 0398 00 .byte 0x0
+ 22840 0399 03 .uleb128 0x3
+ 22841 039a 00000000 .long .LASF57
+ 22842 039e 07 .byte 0x7
+ 22843 039f 85 .byte 0x85
+ 22844 03a0 A4030000 .long 0x3a4
+ 22845 03a4 11 .uleb128 0x11
+
GAS LISTING /tmp/ccjbMjHD.s page 675
+
+
+ 22846 03a5 00000000 .long .LASF57
+ 22847 03a9 40 .byte 0x40
+ 22848 03aa 07 .byte 0x7
+ 22849 03ab 85 .byte 0x85
+ 22850 03ac C6030000 .long 0x3c6
+ 22851 03b0 12 .uleb128 0x12
+ 22852 03b1 00000000 .long .LASF47
+ 22853 03b5 07 .byte 0x7
+ 22854 03b6 AF .byte 0xaf
+ 22855 03b7 BE010000 .long 0x1be
+ 22856 03bb 13 .uleb128 0x13
+ 22857 03bc 763100 .string "v1"
+ 22858 03bf 07 .byte 0x7
+ 22859 03c0 B0 .byte 0xb0
+ 22860 03c1 11030000 .long 0x311
+ 22861 03c5 00 .byte 0x0
+ 22862 03c6 14 .uleb128 0x14
+ 22863 03c7 01 .byte 0x1
+ 22864 03c8 D2030000 .long 0x3d2
+ 22865 03cc 15 .uleb128 0x15
+ 22866 03cd D2030000 .long 0x3d2
+ 22867 03d1 00 .byte 0x0
+ 22868 03d2 07 .uleb128 0x7
+ 22869 03d3 08 .byte 0x8
+ 22870 03d4 D8030000 .long 0x3d8
+ 22871 03d8 06 .uleb128 0x6
+ 22872 03d9 99030000 .long 0x399
+ 22873 03dd 07 .uleb128 0x7
+ 22874 03de 08 .byte 0x8
+ 22875 03df C6030000 .long 0x3c6
+ 22876 03e3 18 .uleb128 0x18
+ 22877 03e4 01 .byte 0x1
+ 22878 03e5 B3010000 .long 0x1b3
+ 22879 03e9 F8030000 .long 0x3f8
+ 22880 03ed 15 .uleb128 0x15
+ 22881 03ee B3010000 .long 0x1b3
+ 22882 03f2 15 .uleb128 0x15
+ 22883 03f3 D3000000 .long 0xd3
+ 22884 03f7 00 .byte 0x0
+ 22885 03f8 07 .uleb128 0x7
+ 22886 03f9 08 .byte 0x8
+ 22887 03fa E3030000 .long 0x3e3
+ 22888 03fe 03 .uleb128 0x3
+ 22889 03ff 00000000 .long .LASF58
+ 22890 0403 08 .byte 0x8
+ 22891 0404 9D .byte 0x9d
+ 22892 0405 54000000 .long 0x54
+ 22893 0409 03 .uleb128 0x3
+ 22894 040a 00000000 .long .LASF59
+ 22895 040e 08 .byte 0x8
+ 22896 040f 9E .byte 0x9e
+ 22897 0410 6D000000 .long 0x6d
+ 22898 0414 03 .uleb128 0x3
+ 22899 0415 00000000 .long .LASF60
+ 22900 0419 08 .byte 0x8
+ 22901 041a 9F .byte 0x9f
+ 22902 041b 1F040000 .long 0x41f
+
GAS LISTING /tmp/ccjbMjHD.s page 676
+
+
+ 22903 041f 11 .uleb128 0x11
+ 22904 0420 00000000 .long .LASF60
+ 22905 0424 04 .byte 0x4
+ 22906 0425 08 .byte 0x8
+ 22907 0426 9F .byte 0x9f
+ 22908 0427 42040000 .long 0x442
+ 22909 042b 12 .uleb128 0x12
+ 22910 042c 00000000 .long .LASF61
+ 22911 0430 08 .byte 0x8
+ 22912 0431 A2 .byte 0xa2
+ 22913 0432 09040000 .long 0x409
+ 22914 0436 12 .uleb128 0x12
+ 22915 0437 00000000 .long .LASF62
+ 22916 043b 08 .byte 0x8
+ 22917 043c A3 .byte 0xa3
+ 22918 043d 42040000 .long 0x442
+ 22919 0441 00 .byte 0x0
+ 22920 0442 19 .uleb128 0x19
+ 22921 0443 FE030000 .long 0x3fe
+ 22922 0447 52040000 .long 0x452
+ 22923 044b 1A .uleb128 0x1a
+ 22924 044c 9C000000 .long 0x9c
+ 22925 0450 03 .byte 0x3
+ 22926 0451 00 .byte 0x0
+ 22927 0452 19 .uleb128 0x19
+ 22928 0453 FE030000 .long 0x3fe
+ 22929 0457 62040000 .long 0x462
+ 22930 045b 1A .uleb128 0x1a
+ 22931 045c 9C000000 .long 0x9c
+ 22932 0460 0F .byte 0xf
+ 22933 0461 00 .byte 0x0
+ 22934 0462 03 .uleb128 0x3
+ 22935 0463 00000000 .long .LASF63
+ 22936 0467 08 .byte 0x8
+ 22937 0468 AC .byte 0xac
+ 22938 0469 E7000000 .long 0xe7
+ 22939 046d 03 .uleb128 0x3
+ 22940 046e 00000000 .long .LASF64
+ 22941 0472 08 .byte 0x8
+ 22942 0473 B0 .byte 0xb0
+ 22943 0474 78040000 .long 0x478
+ 22944 0478 1B .uleb128 0x1b
+ 22945 0479 00000000 .long .LASF64
+ 22946 047d 0001 .value 0x100
+ 22947 047f 08 .byte 0x8
+ 22948 0480 B0 .byte 0xb0
+ 22949 0481 A3040000 .long 0x4a3
+ 22950 0485 10 .uleb128 0x10
+ 22951 0486 00000000 .long .LASF65
+ 22952 048a 08 .byte 0x8
+ 22953 048b B3 .byte 0xb3
+ 22954 048c A3040000 .long 0x4a3
+ 22955 0490 02 .byte 0x2
+ 22956 0491 23 .byte 0x23
+ 22957 0492 00 .uleb128 0x0
+ 22958 0493 10 .uleb128 0x10
+ 22959 0494 00000000 .long .LASF66
+
GAS LISTING /tmp/ccjbMjHD.s page 677
+
+
+ 22960 0498 08 .byte 0x8
+ 22961 0499 B4 .byte 0xb4
+ 22962 049a 6D000000 .long 0x6d
+ 22963 049e 03 .byte 0x3
+ 22964 049f 23 .byte 0x23
+ 22965 04a0 F001 .uleb128 0xf0
+ 22966 04a2 00 .byte 0x0
+ 22967 04a3 19 .uleb128 0x19
+ 22968 04a4 B3010000 .long 0x1b3
+ 22969 04a8 B3040000 .long 0x4b3
+ 22970 04ac 1A .uleb128 0x1a
+ 22971 04ad 9C000000 .long 0x9c
+ 22972 04b1 0E .byte 0xe
+ 22973 04b2 00 .byte 0x0
+ 22974 04b3 1C .uleb128 0x1c
+ 22975 04b4 10 .byte 0x10
+ 22976 04b5 08 .byte 0x8
+ 22977 04b6 C0 .byte 0xc0
+ 22978 04b7 F3040000 .long 0x4f3
+ 22979 04bb 12 .uleb128 0x12
+ 22980 04bc 00000000 .long .LASF67
+ 22981 04c0 08 .byte 0x8
+ 22982 04c1 C1 .byte 0xc1
+ 22983 04c2 B3010000 .long 0x1b3
+ 22984 04c6 13 .uleb128 0x13
+ 22985 04c7 75363400 .string "u64"
+ 22986 04cb 08 .byte 0x8
+ 22987 04cc C2 .byte 0xc2
+ 22988 04cd F3040000 .long 0x4f3
+ 22989 04d1 12 .uleb128 0x12
+ 22990 04d2 00000000 .long .LASF68
+ 22991 04d6 08 .byte 0x8
+ 22992 04d7 C3 .byte 0xc3
+ 22993 04d8 03050000 .long 0x503
+ 22994 04dc 12 .uleb128 0x12
+ 22995 04dd 00000000 .long .LASF62
+ 22996 04e1 08 .byte 0x8
+ 22997 04e2 C4 .byte 0xc4
+ 22998 04e3 52040000 .long 0x452
+ 22999 04e7 12 .uleb128 0x12
+ 23000 04e8 00000000 .long .LASF69
+ 23001 04ec 08 .byte 0x8
+ 23002 04ed C5 .byte 0xc5
+ 23003 04ee 13050000 .long 0x513
+ 23004 04f2 00 .byte 0x0
+ 23005 04f3 19 .uleb128 0x19
+ 23006 04f4 7F000000 .long 0x7f
+ 23007 04f8 03050000 .long 0x503
+ 23008 04fc 1A .uleb128 0x1a
+ 23009 04fd 9C000000 .long 0x9c
+ 23010 0501 01 .byte 0x1
+ 23011 0502 00 .byte 0x0
+ 23012 0503 19 .uleb128 0x19
+ 23013 0504 09040000 .long 0x409
+ 23014 0508 13050000 .long 0x513
+ 23015 050c 1A .uleb128 0x1a
+ 23016 050d 9C000000 .long 0x9c
+
GAS LISTING /tmp/ccjbMjHD.s page 678
+
+
+ 23017 0511 03 .byte 0x3
+ 23018 0512 00 .byte 0x0
+ 23019 0513 19 .uleb128 0x19
+ 23020 0514 FE030000 .long 0x3fe
+ 23021 0518 29050000 .long 0x529
+ 23022 051c 1A .uleb128 0x1a
+ 23023 051d 9C000000 .long 0x9c
+ 23024 0521 03 .byte 0x3
+ 23025 0522 1A .uleb128 0x1a
+ 23026 0523 9C000000 .long 0x9c
+ 23027 0527 03 .byte 0x3
+ 23028 0528 00 .byte 0x0
+ 23029 0529 03 .uleb128 0x3
+ 23030 052a 00000000 .long .LASF70
+ 23031 052e 08 .byte 0x8
+ 23032 052f C6 .byte 0xc6
+ 23033 0530 B3040000 .long 0x4b3
+ 23034 0534 03 .uleb128 0x3
+ 23035 0535 00000000 .long .LASF71
+ 23036 0539 09 .byte 0x9
+ 23037 053a 40 .byte 0x40
+ 23038 053b 3F050000 .long 0x53f
+ 23039 053f 11 .uleb128 0x11
+ 23040 0540 00000000 .long .LASF71
+ 23041 0544 40 .byte 0x40
+ 23042 0545 09 .byte 0x9
+ 23043 0546 40 .byte 0x40
+ 23044 0547 62050000 .long 0x562
+ 23045 054b 12 .uleb128 0x12
+ 23046 054c 00000000 .long .LASF72
+ 23047 0550 09 .byte 0x9
+ 23048 0551 43 .byte 0x43
+ 23049 0552 7A020000 .long 0x27a
+ 23050 0556 13 .uleb128 0x13
+ 23051 0557 76656300 .string "vec"
+ 23052 055b 09 .byte 0x9
+ 23053 055c 44 .byte 0x44
+ 23054 055d 99030000 .long 0x399
+ 23055 0561 00 .byte 0x0
+ 23056 0562 1D .uleb128 0x1d
+ 23057 0563 00000000 .long .LASF95
+ 23058 0567 04 .byte 0x4
+ 23059 0568 0A .byte 0xa
+ 23060 0569 5A .byte 0x5a
+ 23061 056a F3050000 .long 0x5f3
+ 23062 056e 0C .uleb128 0xc
+ 23063 056f 00000000 .long .LASF73
+ 23064 0573 00 .sleb128 0
+ 23065 0574 0C .uleb128 0xc
+ 23066 0575 00000000 .long .LASF74
+ 23067 0579 01 .sleb128 1
+ 23068 057a 0C .uleb128 0xc
+ 23069 057b 00000000 .long .LASF75
+ 23070 057f 02 .sleb128 2
+ 23071 0580 0C .uleb128 0xc
+ 23072 0581 00000000 .long .LASF76
+ 23073 0585 03 .sleb128 3
+
GAS LISTING /tmp/ccjbMjHD.s page 679
+
+
+ 23074 0586 0C .uleb128 0xc
+ 23075 0587 00000000 .long .LASF77
+ 23076 058b 04 .sleb128 4
+ 23077 058c 0C .uleb128 0xc
+ 23078 058d 00000000 .long .LASF78
+ 23079 0591 05 .sleb128 5
+ 23080 0592 0C .uleb128 0xc
+ 23081 0593 00000000 .long .LASF79
+ 23082 0597 06 .sleb128 6
+ 23083 0598 0C .uleb128 0xc
+ 23084 0599 00000000 .long .LASF80
+ 23085 059d 07 .sleb128 7
+ 23086 059e 0C .uleb128 0xc
+ 23087 059f 00000000 .long .LASF81
+ 23088 05a3 08 .sleb128 8
+ 23089 05a4 0C .uleb128 0xc
+ 23090 05a5 00000000 .long .LASF82
+ 23091 05a9 09 .sleb128 9
+ 23092 05aa 0C .uleb128 0xc
+ 23093 05ab 00000000 .long .LASF83
+ 23094 05af 0A .sleb128 10
+ 23095 05b0 0C .uleb128 0xc
+ 23096 05b1 00000000 .long .LASF84
+ 23097 05b5 0B .sleb128 11
+ 23098 05b6 0C .uleb128 0xc
+ 23099 05b7 00000000 .long .LASF85
+ 23100 05bb 0C .sleb128 12
+ 23101 05bc 0C .uleb128 0xc
+ 23102 05bd 00000000 .long .LASF86
+ 23103 05c1 0D .sleb128 13
+ 23104 05c2 0C .uleb128 0xc
+ 23105 05c3 00000000 .long .LASF87
+ 23106 05c7 0E .sleb128 14
+ 23107 05c8 0C .uleb128 0xc
+ 23108 05c9 00000000 .long .LASF88
+ 23109 05cd 0E .sleb128 14
+ 23110 05ce 0C .uleb128 0xc
+ 23111 05cf 00000000 .long .LASF89
+ 23112 05d3 0F .sleb128 15
+ 23113 05d4 0C .uleb128 0xc
+ 23114 05d5 00000000 .long .LASF90
+ 23115 05d9 10 .sleb128 16
+ 23116 05da 0C .uleb128 0xc
+ 23117 05db 00000000 .long .LASF91
+ 23118 05df 11 .sleb128 17
+ 23119 05e0 0C .uleb128 0xc
+ 23120 05e1 00000000 .long .LASF92
+ 23121 05e5 12 .sleb128 18
+ 23122 05e6 0C .uleb128 0xc
+ 23123 05e7 00000000 .long .LASF93
+ 23124 05eb 13 .sleb128 19
+ 23125 05ec 0C .uleb128 0xc
+ 23126 05ed 00000000 .long .LASF94
+ 23127 05f1 14 .sleb128 20
+ 23128 05f2 00 .byte 0x0
+ 23129 05f3 1D .uleb128 0x1d
+ 23130 05f4 00000000 .long .LASF96
+
GAS LISTING /tmp/ccjbMjHD.s page 680
+
+
+ 23131 05f8 04 .byte 0x4
+ 23132 05f9 0A .byte 0xa
+ 23133 05fa 77 .byte 0x77
+ 23134 05fb 7A070000 .long 0x77a
+ 23135 05ff 0C .uleb128 0xc
+ 23136 0600 00000000 .long .LASF97
+ 23137 0604 00 .sleb128 0
+ 23138 0605 0C .uleb128 0xc
+ 23139 0606 00000000 .long .LASF98
+ 23140 060a 01 .sleb128 1
+ 23141 060b 0C .uleb128 0xc
+ 23142 060c 00000000 .long .LASF99
+ 23143 0610 02 .sleb128 2
+ 23144 0611 0C .uleb128 0xc
+ 23145 0612 00000000 .long .LASF100
+ 23146 0616 03 .sleb128 3
+ 23147 0617 0C .uleb128 0xc
+ 23148 0618 00000000 .long .LASF101
+ 23149 061c 04 .sleb128 4
+ 23150 061d 0C .uleb128 0xc
+ 23151 061e 00000000 .long .LASF102
+ 23152 0622 05 .sleb128 5
+ 23153 0623 0C .uleb128 0xc
+ 23154 0624 00000000 .long .LASF103
+ 23155 0628 06 .sleb128 6
+ 23156 0629 0C .uleb128 0xc
+ 23157 062a 00000000 .long .LASF104
+ 23158 062e 07 .sleb128 7
+ 23159 062f 0C .uleb128 0xc
+ 23160 0630 00000000 .long .LASF105
+ 23161 0634 08 .sleb128 8
+ 23162 0635 0C .uleb128 0xc
+ 23163 0636 00000000 .long .LASF106
+ 23164 063a 09 .sleb128 9
+ 23165 063b 0C .uleb128 0xc
+ 23166 063c 00000000 .long .LASF107
+ 23167 0640 0A .sleb128 10
+ 23168 0641 0C .uleb128 0xc
+ 23169 0642 00000000 .long .LASF108
+ 23170 0646 0B .sleb128 11
+ 23171 0647 0C .uleb128 0xc
+ 23172 0648 00000000 .long .LASF109
+ 23173 064c 0C .sleb128 12
+ 23174 064d 0C .uleb128 0xc
+ 23175 064e 00000000 .long .LASF110
+ 23176 0652 0D .sleb128 13
+ 23177 0653 0C .uleb128 0xc
+ 23178 0654 00000000 .long .LASF111
+ 23179 0658 0E .sleb128 14
+ 23180 0659 0C .uleb128 0xc
+ 23181 065a 00000000 .long .LASF112
+ 23182 065e 0F .sleb128 15
+ 23183 065f 0C .uleb128 0xc
+ 23184 0660 00000000 .long .LASF113
+ 23185 0664 10 .sleb128 16
+ 23186 0665 0C .uleb128 0xc
+ 23187 0666 00000000 .long .LASF114
+
GAS LISTING /tmp/ccjbMjHD.s page 681
+
+
+ 23188 066a 11 .sleb128 17
+ 23189 066b 0C .uleb128 0xc
+ 23190 066c 00000000 .long .LASF115
+ 23191 0670 12 .sleb128 18
+ 23192 0671 0C .uleb128 0xc
+ 23193 0672 00000000 .long .LASF116
+ 23194 0676 13 .sleb128 19
+ 23195 0677 0C .uleb128 0xc
+ 23196 0678 00000000 .long .LASF117
+ 23197 067c 14 .sleb128 20
+ 23198 067d 0C .uleb128 0xc
+ 23199 067e 00000000 .long .LASF118
+ 23200 0682 15 .sleb128 21
+ 23201 0683 0C .uleb128 0xc
+ 23202 0684 00000000 .long .LASF119
+ 23203 0688 16 .sleb128 22
+ 23204 0689 0C .uleb128 0xc
+ 23205 068a 00000000 .long .LASF120
+ 23206 068e 17 .sleb128 23
+ 23207 068f 0C .uleb128 0xc
+ 23208 0690 00000000 .long .LASF121
+ 23209 0694 18 .sleb128 24
+ 23210 0695 0C .uleb128 0xc
+ 23211 0696 00000000 .long .LASF122
+ 23212 069a 19 .sleb128 25
+ 23213 069b 0C .uleb128 0xc
+ 23214 069c 00000000 .long .LASF123
+ 23215 06a0 1A .sleb128 26
+ 23216 06a1 0C .uleb128 0xc
+ 23217 06a2 00000000 .long .LASF124
+ 23218 06a6 1B .sleb128 27
+ 23219 06a7 0C .uleb128 0xc
+ 23220 06a8 00000000 .long .LASF125
+ 23221 06ac 1C .sleb128 28
+ 23222 06ad 0C .uleb128 0xc
+ 23223 06ae 00000000 .long .LASF126
+ 23224 06b2 1D .sleb128 29
+ 23225 06b3 0C .uleb128 0xc
+ 23226 06b4 00000000 .long .LASF127
+ 23227 06b8 1E .sleb128 30
+ 23228 06b9 0C .uleb128 0xc
+ 23229 06ba 00000000 .long .LASF128
+ 23230 06be 1F .sleb128 31
+ 23231 06bf 0C .uleb128 0xc
+ 23232 06c0 00000000 .long .LASF129
+ 23233 06c4 20 .sleb128 32
+ 23234 06c5 0C .uleb128 0xc
+ 23235 06c6 00000000 .long .LASF130
+ 23236 06ca 21 .sleb128 33
+ 23237 06cb 0C .uleb128 0xc
+ 23238 06cc 00000000 .long .LASF131
+ 23239 06d0 22 .sleb128 34
+ 23240 06d1 0C .uleb128 0xc
+ 23241 06d2 00000000 .long .LASF132
+ 23242 06d6 23 .sleb128 35
+ 23243 06d7 0C .uleb128 0xc
+ 23244 06d8 00000000 .long .LASF133
+
GAS LISTING /tmp/ccjbMjHD.s page 682
+
+
+ 23245 06dc 24 .sleb128 36
+ 23246 06dd 0C .uleb128 0xc
+ 23247 06de 00000000 .long .LASF134
+ 23248 06e2 25 .sleb128 37
+ 23249 06e3 0C .uleb128 0xc
+ 23250 06e4 00000000 .long .LASF135
+ 23251 06e8 26 .sleb128 38
+ 23252 06e9 0C .uleb128 0xc
+ 23253 06ea 00000000 .long .LASF136
+ 23254 06ee 27 .sleb128 39
+ 23255 06ef 0C .uleb128 0xc
+ 23256 06f0 00000000 .long .LASF137
+ 23257 06f4 28 .sleb128 40
+ 23258 06f5 0C .uleb128 0xc
+ 23259 06f6 00000000 .long .LASF138
+ 23260 06fa 29 .sleb128 41
+ 23261 06fb 0C .uleb128 0xc
+ 23262 06fc 00000000 .long .LASF139
+ 23263 0700 2A .sleb128 42
+ 23264 0701 0C .uleb128 0xc
+ 23265 0702 00000000 .long .LASF140
+ 23266 0706 2B .sleb128 43
+ 23267 0707 0C .uleb128 0xc
+ 23268 0708 00000000 .long .LASF141
+ 23269 070c 2C .sleb128 44
+ 23270 070d 0C .uleb128 0xc
+ 23271 070e 00000000 .long .LASF142
+ 23272 0712 2D .sleb128 45
+ 23273 0713 0C .uleb128 0xc
+ 23274 0714 00000000 .long .LASF143
+ 23275 0718 2E .sleb128 46
+ 23276 0719 0C .uleb128 0xc
+ 23277 071a 00000000 .long .LASF144
+ 23278 071e 2F .sleb128 47
+ 23279 071f 0C .uleb128 0xc
+ 23280 0720 00000000 .long .LASF145
+ 23281 0724 30 .sleb128 48
+ 23282 0725 0C .uleb128 0xc
+ 23283 0726 00000000 .long .LASF146
+ 23284 072a 31 .sleb128 49
+ 23285 072b 0C .uleb128 0xc
+ 23286 072c 00000000 .long .LASF147
+ 23287 0730 32 .sleb128 50
+ 23288 0731 0C .uleb128 0xc
+ 23289 0732 00000000 .long .LASF148
+ 23290 0736 33 .sleb128 51
+ 23291 0737 0C .uleb128 0xc
+ 23292 0738 00000000 .long .LASF149
+ 23293 073c 34 .sleb128 52
+ 23294 073d 0C .uleb128 0xc
+ 23295 073e 00000000 .long .LASF150
+ 23296 0742 35 .sleb128 53
+ 23297 0743 0C .uleb128 0xc
+ 23298 0744 00000000 .long .LASF151
+ 23299 0748 36 .sleb128 54
+ 23300 0749 0C .uleb128 0xc
+ 23301 074a 00000000 .long .LASF152
+
GAS LISTING /tmp/ccjbMjHD.s page 683
+
+
+ 23302 074e 36 .sleb128 54
+ 23303 074f 0C .uleb128 0xc
+ 23304 0750 00000000 .long .LASF153
+ 23305 0754 37 .sleb128 55
+ 23306 0755 0C .uleb128 0xc
+ 23307 0756 00000000 .long .LASF154
+ 23308 075a 38 .sleb128 56
+ 23309 075b 0C .uleb128 0xc
+ 23310 075c 00000000 .long .LASF155
+ 23311 0760 39 .sleb128 57
+ 23312 0761 0C .uleb128 0xc
+ 23313 0762 00000000 .long .LASF156
+ 23314 0766 3A .sleb128 58
+ 23315 0767 0C .uleb128 0xc
+ 23316 0768 00000000 .long .LASF157
+ 23317 076c 3B .sleb128 59
+ 23318 076d 0C .uleb128 0xc
+ 23319 076e 00000000 .long .LASF158
+ 23320 0772 3C .sleb128 60
+ 23321 0773 0C .uleb128 0xc
+ 23322 0774 00000000 .long .LASF159
+ 23323 0778 3D .sleb128 61
+ 23324 0779 00 .byte 0x0
+ 23325 077a 1D .uleb128 0x1d
+ 23326 077b 00000000 .long .LASF160
+ 23327 077f 04 .byte 0x4
+ 23328 0780 0A .byte 0xa
+ 23329 0781 BD .byte 0xbd
+ 23330 0782 30090000 .long 0x930
+ 23331 0786 0C .uleb128 0xc
+ 23332 0787 00000000 .long .LASF161
+ 23333 078b 00 .sleb128 0
+ 23334 078c 0C .uleb128 0xc
+ 23335 078d 00000000 .long .LASF162
+ 23336 0791 01 .sleb128 1
+ 23337 0792 0C .uleb128 0xc
+ 23338 0793 00000000 .long .LASF163
+ 23339 0797 02 .sleb128 2
+ 23340 0798 0C .uleb128 0xc
+ 23341 0799 00000000 .long .LASF164
+ 23342 079d 03 .sleb128 3
+ 23343 079e 0C .uleb128 0xc
+ 23344 079f 00000000 .long .LASF165
+ 23345 07a3 04 .sleb128 4
+ 23346 07a4 0C .uleb128 0xc
+ 23347 07a5 00000000 .long .LASF166
+ 23348 07a9 05 .sleb128 5
+ 23349 07aa 0C .uleb128 0xc
+ 23350 07ab 00000000 .long .LASF167
+ 23351 07af 06 .sleb128 6
+ 23352 07b0 0C .uleb128 0xc
+ 23353 07b1 00000000 .long .LASF168
+ 23354 07b5 07 .sleb128 7
+ 23355 07b6 0C .uleb128 0xc
+ 23356 07b7 00000000 .long .LASF169
+ 23357 07bb 08 .sleb128 8
+ 23358 07bc 0C .uleb128 0xc
+
GAS LISTING /tmp/ccjbMjHD.s page 684
+
+
+ 23359 07bd 00000000 .long .LASF170
+ 23360 07c1 09 .sleb128 9
+ 23361 07c2 0C .uleb128 0xc
+ 23362 07c3 00000000 .long .LASF171
+ 23363 07c7 0A .sleb128 10
+ 23364 07c8 0C .uleb128 0xc
+ 23365 07c9 00000000 .long .LASF172
+ 23366 07cd 0B .sleb128 11
+ 23367 07ce 0C .uleb128 0xc
+ 23368 07cf 00000000 .long .LASF173
+ 23369 07d3 0C .sleb128 12
+ 23370 07d4 0C .uleb128 0xc
+ 23371 07d5 00000000 .long .LASF174
+ 23372 07d9 0D .sleb128 13
+ 23373 07da 0C .uleb128 0xc
+ 23374 07db 00000000 .long .LASF175
+ 23375 07df 0E .sleb128 14
+ 23376 07e0 0C .uleb128 0xc
+ 23377 07e1 00000000 .long .LASF176
+ 23378 07e5 0F .sleb128 15
+ 23379 07e6 0C .uleb128 0xc
+ 23380 07e7 00000000 .long .LASF177
+ 23381 07eb 10 .sleb128 16
+ 23382 07ec 0C .uleb128 0xc
+ 23383 07ed 00000000 .long .LASF178
+ 23384 07f1 11 .sleb128 17
+ 23385 07f2 0C .uleb128 0xc
+ 23386 07f3 00000000 .long .LASF179
+ 23387 07f7 12 .sleb128 18
+ 23388 07f8 0C .uleb128 0xc
+ 23389 07f9 00000000 .long .LASF180
+ 23390 07fd 13 .sleb128 19
+ 23391 07fe 0C .uleb128 0xc
+ 23392 07ff 00000000 .long .LASF181
+ 23393 0803 14 .sleb128 20
+ 23394 0804 0C .uleb128 0xc
+ 23395 0805 00000000 .long .LASF182
+ 23396 0809 15 .sleb128 21
+ 23397 080a 0C .uleb128 0xc
+ 23398 080b 00000000 .long .LASF183
+ 23399 080f 16 .sleb128 22
+ 23400 0810 0C .uleb128 0xc
+ 23401 0811 00000000 .long .LASF184
+ 23402 0815 17 .sleb128 23
+ 23403 0816 0C .uleb128 0xc
+ 23404 0817 00000000 .long .LASF185
+ 23405 081b 18 .sleb128 24
+ 23406 081c 0C .uleb128 0xc
+ 23407 081d 00000000 .long .LASF186
+ 23408 0821 19 .sleb128 25
+ 23409 0822 0C .uleb128 0xc
+ 23410 0823 00000000 .long .LASF187
+ 23411 0827 1A .sleb128 26
+ 23412 0828 0C .uleb128 0xc
+ 23413 0829 00000000 .long .LASF188
+ 23414 082d 1B .sleb128 27
+ 23415 082e 0C .uleb128 0xc
+
GAS LISTING /tmp/ccjbMjHD.s page 685
+
+
+ 23416 082f 00000000 .long .LASF189
+ 23417 0833 1C .sleb128 28
+ 23418 0834 0C .uleb128 0xc
+ 23419 0835 00000000 .long .LASF190
+ 23420 0839 1D .sleb128 29
+ 23421 083a 0C .uleb128 0xc
+ 23422 083b 00000000 .long .LASF191
+ 23423 083f 1E .sleb128 30
+ 23424 0840 0C .uleb128 0xc
+ 23425 0841 00000000 .long .LASF192
+ 23426 0845 1F .sleb128 31
+ 23427 0846 0C .uleb128 0xc
+ 23428 0847 00000000 .long .LASF193
+ 23429 084b 20 .sleb128 32
+ 23430 084c 0C .uleb128 0xc
+ 23431 084d 00000000 .long .LASF194
+ 23432 0851 21 .sleb128 33
+ 23433 0852 0C .uleb128 0xc
+ 23434 0853 00000000 .long .LASF195
+ 23435 0857 22 .sleb128 34
+ 23436 0858 0C .uleb128 0xc
+ 23437 0859 00000000 .long .LASF196
+ 23438 085d 23 .sleb128 35
+ 23439 085e 0C .uleb128 0xc
+ 23440 085f 00000000 .long .LASF197
+ 23441 0863 24 .sleb128 36
+ 23442 0864 0C .uleb128 0xc
+ 23443 0865 00000000 .long .LASF198
+ 23444 0869 25 .sleb128 37
+ 23445 086a 0C .uleb128 0xc
+ 23446 086b 00000000 .long .LASF199
+ 23447 086f 26 .sleb128 38
+ 23448 0870 0C .uleb128 0xc
+ 23449 0871 00000000 .long .LASF200
+ 23450 0875 27 .sleb128 39
+ 23451 0876 0C .uleb128 0xc
+ 23452 0877 00000000 .long .LASF201
+ 23453 087b 28 .sleb128 40
+ 23454 087c 0C .uleb128 0xc
+ 23455 087d 00000000 .long .LASF202
+ 23456 0881 29 .sleb128 41
+ 23457 0882 0C .uleb128 0xc
+ 23458 0883 00000000 .long .LASF203
+ 23459 0887 2A .sleb128 42
+ 23460 0888 0C .uleb128 0xc
+ 23461 0889 00000000 .long .LASF204
+ 23462 088d 2B .sleb128 43
+ 23463 088e 0C .uleb128 0xc
+ 23464 088f 00000000 .long .LASF205
+ 23465 0893 2C .sleb128 44
+ 23466 0894 0C .uleb128 0xc
+ 23467 0895 00000000 .long .LASF206
+ 23468 0899 2D .sleb128 45
+ 23469 089a 0C .uleb128 0xc
+ 23470 089b 00000000 .long .LASF207
+ 23471 089f 2E .sleb128 46
+ 23472 08a0 0C .uleb128 0xc
+
GAS LISTING /tmp/ccjbMjHD.s page 686
+
+
+ 23473 08a1 00000000 .long .LASF208
+ 23474 08a5 2F .sleb128 47
+ 23475 08a6 0C .uleb128 0xc
+ 23476 08a7 00000000 .long .LASF209
+ 23477 08ab 30 .sleb128 48
+ 23478 08ac 0C .uleb128 0xc
+ 23479 08ad 00000000 .long .LASF210
+ 23480 08b1 31 .sleb128 49
+ 23481 08b2 0C .uleb128 0xc
+ 23482 08b3 00000000 .long .LASF211
+ 23483 08b7 32 .sleb128 50
+ 23484 08b8 0C .uleb128 0xc
+ 23485 08b9 00000000 .long .LASF212
+ 23486 08bd 33 .sleb128 51
+ 23487 08be 0C .uleb128 0xc
+ 23488 08bf 00000000 .long .LASF213
+ 23489 08c3 34 .sleb128 52
+ 23490 08c4 0C .uleb128 0xc
+ 23491 08c5 00000000 .long .LASF214
+ 23492 08c9 35 .sleb128 53
+ 23493 08ca 0C .uleb128 0xc
+ 23494 08cb 00000000 .long .LASF215
+ 23495 08cf 36 .sleb128 54
+ 23496 08d0 0C .uleb128 0xc
+ 23497 08d1 00000000 .long .LASF216
+ 23498 08d5 37 .sleb128 55
+ 23499 08d6 0C .uleb128 0xc
+ 23500 08d7 00000000 .long .LASF217
+ 23501 08db 38 .sleb128 56
+ 23502 08dc 0C .uleb128 0xc
+ 23503 08dd 00000000 .long .LASF218
+ 23504 08e1 39 .sleb128 57
+ 23505 08e2 0C .uleb128 0xc
+ 23506 08e3 00000000 .long .LASF219
+ 23507 08e7 3A .sleb128 58
+ 23508 08e8 0C .uleb128 0xc
+ 23509 08e9 00000000 .long .LASF220
+ 23510 08ed 3A .sleb128 58
+ 23511 08ee 0C .uleb128 0xc
+ 23512 08ef 00000000 .long .LASF221
+ 23513 08f3 3B .sleb128 59
+ 23514 08f4 0C .uleb128 0xc
+ 23515 08f5 00000000 .long .LASF222
+ 23516 08f9 3C .sleb128 60
+ 23517 08fa 0C .uleb128 0xc
+ 23518 08fb 00000000 .long .LASF223
+ 23519 08ff 3D .sleb128 61
+ 23520 0900 0C .uleb128 0xc
+ 23521 0901 00000000 .long .LASF224
+ 23522 0905 3E .sleb128 62
+ 23523 0906 0C .uleb128 0xc
+ 23524 0907 00000000 .long .LASF225
+ 23525 090b 3F .sleb128 63
+ 23526 090c 0C .uleb128 0xc
+ 23527 090d 00000000 .long .LASF226
+ 23528 0911 C000 .sleb128 64
+ 23529 0913 0C .uleb128 0xc
+
GAS LISTING /tmp/ccjbMjHD.s page 687
+
+
+ 23530 0914 00000000 .long .LASF227
+ 23531 0918 C100 .sleb128 65
+ 23532 091a 0C .uleb128 0xc
+ 23533 091b 00000000 .long .LASF228
+ 23534 091f C200 .sleb128 66
+ 23535 0921 0C .uleb128 0xc
+ 23536 0922 00000000 .long .LASF229
+ 23537 0926 C300 .sleb128 67
+ 23538 0928 0C .uleb128 0xc
+ 23539 0929 00000000 .long .LASF230
+ 23540 092d C400 .sleb128 68
+ 23541 092f 00 .byte 0x0
+ 23542 0930 1E .uleb128 0x1e
+ 23543 0931 00000000 .long .LASF231
+ 23544 0935 04 .byte 0x4
+ 23545 0936 0A .byte 0xa
+ 23546 0937 0A01 .value 0x10a
+ 23547 0939 2F0A0000 .long 0xa2f
+ 23548 093d 0C .uleb128 0xc
+ 23549 093e 00000000 .long .LASF232
+ 23550 0942 00 .sleb128 0
+ 23551 0943 0C .uleb128 0xc
+ 23552 0944 00000000 .long .LASF233
+ 23553 0948 3D .sleb128 61
+ 23554 0949 0C .uleb128 0xc
+ 23555 094a 00000000 .long .LASF234
+ 23556 094e 3E .sleb128 62
+ 23557 094f 0C .uleb128 0xc
+ 23558 0950 00000000 .long .LASF235
+ 23559 0954 3F .sleb128 63
+ 23560 0955 0C .uleb128 0xc
+ 23561 0956 00000000 .long .LASF236
+ 23562 095a C000 .sleb128 64
+ 23563 095c 0C .uleb128 0xc
+ 23564 095d 00000000 .long .LASF237
+ 23565 0961 C100 .sleb128 65
+ 23566 0963 0C .uleb128 0xc
+ 23567 0964 00000000 .long .LASF238
+ 23568 0968 C200 .sleb128 66
+ 23569 096a 0C .uleb128 0xc
+ 23570 096b 00000000 .long .LASF239
+ 23571 096f C300 .sleb128 67
+ 23572 0971 0C .uleb128 0xc
+ 23573 0972 00000000 .long .LASF240
+ 23574 0976 C400 .sleb128 68
+ 23575 0978 0C .uleb128 0xc
+ 23576 0979 00000000 .long .LASF241
+ 23577 097d C500 .sleb128 69
+ 23578 097f 0C .uleb128 0xc
+ 23579 0980 00000000 .long .LASF242
+ 23580 0984 C600 .sleb128 70
+ 23581 0986 0C .uleb128 0xc
+ 23582 0987 00000000 .long .LASF243
+ 23583 098b C700 .sleb128 71
+ 23584 098d 0C .uleb128 0xc
+ 23585 098e 00000000 .long .LASF244
+ 23586 0992 C800 .sleb128 72
+
GAS LISTING /tmp/ccjbMjHD.s page 688
+
+
+ 23587 0994 0C .uleb128 0xc
+ 23588 0995 00000000 .long .LASF245
+ 23589 0999 C900 .sleb128 73
+ 23590 099b 0C .uleb128 0xc
+ 23591 099c 00000000 .long .LASF246
+ 23592 09a0 CA00 .sleb128 74
+ 23593 09a2 0C .uleb128 0xc
+ 23594 09a3 00000000 .long .LASF247
+ 23595 09a7 CB00 .sleb128 75
+ 23596 09a9 0C .uleb128 0xc
+ 23597 09aa 00000000 .long .LASF248
+ 23598 09ae CC00 .sleb128 76
+ 23599 09b0 0C .uleb128 0xc
+ 23600 09b1 00000000 .long .LASF249
+ 23601 09b5 CD00 .sleb128 77
+ 23602 09b7 0C .uleb128 0xc
+ 23603 09b8 00000000 .long .LASF250
+ 23604 09bc CE00 .sleb128 78
+ 23605 09be 0C .uleb128 0xc
+ 23606 09bf 00000000 .long .LASF251
+ 23607 09c3 CF00 .sleb128 79
+ 23608 09c5 0C .uleb128 0xc
+ 23609 09c6 00000000 .long .LASF252
+ 23610 09ca D000 .sleb128 80
+ 23611 09cc 0C .uleb128 0xc
+ 23612 09cd 00000000 .long .LASF253
+ 23613 09d1 D100 .sleb128 81
+ 23614 09d3 0C .uleb128 0xc
+ 23615 09d4 00000000 .long .LASF254
+ 23616 09d8 D100 .sleb128 81
+ 23617 09da 0C .uleb128 0xc
+ 23618 09db 00000000 .long .LASF255
+ 23619 09df D200 .sleb128 82
+ 23620 09e1 0C .uleb128 0xc
+ 23621 09e2 00000000 .long .LASF256
+ 23622 09e6 D300 .sleb128 83
+ 23623 09e8 0C .uleb128 0xc
+ 23624 09e9 00000000 .long .LASF257
+ 23625 09ed D400 .sleb128 84
+ 23626 09ef 0C .uleb128 0xc
+ 23627 09f0 00000000 .long .LASF258
+ 23628 09f4 D500 .sleb128 85
+ 23629 09f6 0C .uleb128 0xc
+ 23630 09f7 00000000 .long .LASF259
+ 23631 09fb D600 .sleb128 86
+ 23632 09fd 0C .uleb128 0xc
+ 23633 09fe 00000000 .long .LASF260
+ 23634 0a02 D700 .sleb128 87
+ 23635 0a04 0C .uleb128 0xc
+ 23636 0a05 00000000 .long .LASF261
+ 23637 0a09 D800 .sleb128 88
+ 23638 0a0b 0C .uleb128 0xc
+ 23639 0a0c 00000000 .long .LASF262
+ 23640 0a10 D900 .sleb128 89
+ 23641 0a12 0C .uleb128 0xc
+ 23642 0a13 00000000 .long .LASF263
+ 23643 0a17 DA00 .sleb128 90
+
GAS LISTING /tmp/ccjbMjHD.s page 689
+
+
+ 23644 0a19 0C .uleb128 0xc
+ 23645 0a1a 00000000 .long .LASF264
+ 23646 0a1e DB00 .sleb128 91
+ 23647 0a20 0C .uleb128 0xc
+ 23648 0a21 00000000 .long .LASF265
+ 23649 0a25 DC00 .sleb128 92
+ 23650 0a27 0C .uleb128 0xc
+ 23651 0a28 00000000 .long .LASF266
+ 23652 0a2c DD00 .sleb128 93
+ 23653 0a2e 00 .byte 0x0
+ 23654 0a2f 1E .uleb128 0x1e
+ 23655 0a30 00000000 .long .LASF267
+ 23656 0a34 04 .byte 0x4
+ 23657 0a35 0A .byte 0xa
+ 23658 0a36 3401 .value 0x134
+ 23659 0a38 6F0B0000 .long 0xb6f
+ 23660 0a3c 0C .uleb128 0xc
+ 23661 0a3d 00000000 .long .LASF268
+ 23662 0a41 00 .sleb128 0
+ 23663 0a42 0C .uleb128 0xc
+ 23664 0a43 00000000 .long .LASF269
+ 23665 0a47 01 .sleb128 1
+ 23666 0a48 0C .uleb128 0xc
+ 23667 0a49 00000000 .long .LASF270
+ 23668 0a4d 02 .sleb128 2
+ 23669 0a4e 0C .uleb128 0xc
+ 23670 0a4f 00000000 .long .LASF271
+ 23671 0a53 03 .sleb128 3
+ 23672 0a54 0C .uleb128 0xc
+ 23673 0a55 00000000 .long .LASF272
+ 23674 0a59 04 .sleb128 4
+ 23675 0a5a 0C .uleb128 0xc
+ 23676 0a5b 00000000 .long .LASF273
+ 23677 0a5f 05 .sleb128 5
+ 23678 0a60 0C .uleb128 0xc
+ 23679 0a61 00000000 .long .LASF274
+ 23680 0a65 06 .sleb128 6
+ 23681 0a66 0C .uleb128 0xc
+ 23682 0a67 00000000 .long .LASF275
+ 23683 0a6b 07 .sleb128 7
+ 23684 0a6c 0C .uleb128 0xc
+ 23685 0a6d 00000000 .long .LASF276
+ 23686 0a71 08 .sleb128 8
+ 23687 0a72 0C .uleb128 0xc
+ 23688 0a73 00000000 .long .LASF277
+ 23689 0a77 09 .sleb128 9
+ 23690 0a78 0C .uleb128 0xc
+ 23691 0a79 00000000 .long .LASF278
+ 23692 0a7d 0A .sleb128 10
+ 23693 0a7e 0C .uleb128 0xc
+ 23694 0a7f 00000000 .long .LASF279
+ 23695 0a83 0B .sleb128 11
+ 23696 0a84 0C .uleb128 0xc
+ 23697 0a85 00000000 .long .LASF280
+ 23698 0a89 0C .sleb128 12
+ 23699 0a8a 0C .uleb128 0xc
+ 23700 0a8b 00000000 .long .LASF281
+
GAS LISTING /tmp/ccjbMjHD.s page 690
+
+
+ 23701 0a8f 0D .sleb128 13
+ 23702 0a90 0C .uleb128 0xc
+ 23703 0a91 00000000 .long .LASF282
+ 23704 0a95 0E .sleb128 14
+ 23705 0a96 0C .uleb128 0xc
+ 23706 0a97 00000000 .long .LASF283
+ 23707 0a9b 0F .sleb128 15
+ 23708 0a9c 0C .uleb128 0xc
+ 23709 0a9d 00000000 .long .LASF284
+ 23710 0aa1 10 .sleb128 16
+ 23711 0aa2 0C .uleb128 0xc
+ 23712 0aa3 00000000 .long .LASF285
+ 23713 0aa7 11 .sleb128 17
+ 23714 0aa8 0C .uleb128 0xc
+ 23715 0aa9 00000000 .long .LASF286
+ 23716 0aad 12 .sleb128 18
+ 23717 0aae 0C .uleb128 0xc
+ 23718 0aaf 00000000 .long .LASF287
+ 23719 0ab3 13 .sleb128 19
+ 23720 0ab4 0C .uleb128 0xc
+ 23721 0ab5 00000000 .long .LASF288
+ 23722 0ab9 14 .sleb128 20
+ 23723 0aba 0C .uleb128 0xc
+ 23724 0abb 00000000 .long .LASF289
+ 23725 0abf 15 .sleb128 21
+ 23726 0ac0 0C .uleb128 0xc
+ 23727 0ac1 00000000 .long .LASF290
+ 23728 0ac5 16 .sleb128 22
+ 23729 0ac6 0C .uleb128 0xc
+ 23730 0ac7 00000000 .long .LASF291
+ 23731 0acb 17 .sleb128 23
+ 23732 0acc 0C .uleb128 0xc
+ 23733 0acd 00000000 .long .LASF292
+ 23734 0ad1 18 .sleb128 24
+ 23735 0ad2 0C .uleb128 0xc
+ 23736 0ad3 00000000 .long .LASF293
+ 23737 0ad7 19 .sleb128 25
+ 23738 0ad8 0C .uleb128 0xc
+ 23739 0ad9 00000000 .long .LASF294
+ 23740 0add 1A .sleb128 26
+ 23741 0ade 0C .uleb128 0xc
+ 23742 0adf 00000000 .long .LASF295
+ 23743 0ae3 1B .sleb128 27
+ 23744 0ae4 0C .uleb128 0xc
+ 23745 0ae5 00000000 .long .LASF296
+ 23746 0ae9 1C .sleb128 28
+ 23747 0aea 0C .uleb128 0xc
+ 23748 0aeb 00000000 .long .LASF297
+ 23749 0aef 1D .sleb128 29
+ 23750 0af0 0C .uleb128 0xc
+ 23751 0af1 00000000 .long .LASF298
+ 23752 0af5 1E .sleb128 30
+ 23753 0af6 0C .uleb128 0xc
+ 23754 0af7 00000000 .long .LASF299
+ 23755 0afb 1F .sleb128 31
+ 23756 0afc 0C .uleb128 0xc
+ 23757 0afd 00000000 .long .LASF300
+
GAS LISTING /tmp/ccjbMjHD.s page 691
+
+
+ 23758 0b01 20 .sleb128 32
+ 23759 0b02 0C .uleb128 0xc
+ 23760 0b03 00000000 .long .LASF301
+ 23761 0b07 21 .sleb128 33
+ 23762 0b08 0C .uleb128 0xc
+ 23763 0b09 00000000 .long .LASF302
+ 23764 0b0d 22 .sleb128 34
+ 23765 0b0e 0C .uleb128 0xc
+ 23766 0b0f 00000000 .long .LASF303
+ 23767 0b13 23 .sleb128 35
+ 23768 0b14 0C .uleb128 0xc
+ 23769 0b15 00000000 .long .LASF304
+ 23770 0b19 24 .sleb128 36
+ 23771 0b1a 0C .uleb128 0xc
+ 23772 0b1b 00000000 .long .LASF305
+ 23773 0b1f 25 .sleb128 37
+ 23774 0b20 0C .uleb128 0xc
+ 23775 0b21 00000000 .long .LASF306
+ 23776 0b25 26 .sleb128 38
+ 23777 0b26 0C .uleb128 0xc
+ 23778 0b27 00000000 .long .LASF307
+ 23779 0b2b 27 .sleb128 39
+ 23780 0b2c 0C .uleb128 0xc
+ 23781 0b2d 00000000 .long .LASF308
+ 23782 0b31 28 .sleb128 40
+ 23783 0b32 0C .uleb128 0xc
+ 23784 0b33 00000000 .long .LASF309
+ 23785 0b37 29 .sleb128 41
+ 23786 0b38 0C .uleb128 0xc
+ 23787 0b39 00000000 .long .LASF310
+ 23788 0b3d 29 .sleb128 41
+ 23789 0b3e 0C .uleb128 0xc
+ 23790 0b3f 00000000 .long .LASF311
+ 23791 0b43 2A .sleb128 42
+ 23792 0b44 0C .uleb128 0xc
+ 23793 0b45 00000000 .long .LASF312
+ 23794 0b49 2B .sleb128 43
+ 23795 0b4a 0C .uleb128 0xc
+ 23796 0b4b 00000000 .long .LASF313
+ 23797 0b4f 2C .sleb128 44
+ 23798 0b50 0C .uleb128 0xc
+ 23799 0b51 00000000 .long .LASF314
+ 23800 0b55 2D .sleb128 45
+ 23801 0b56 0C .uleb128 0xc
+ 23802 0b57 00000000 .long .LASF315
+ 23803 0b5b 2E .sleb128 46
+ 23804 0b5c 0C .uleb128 0xc
+ 23805 0b5d 00000000 .long .LASF316
+ 23806 0b61 2F .sleb128 47
+ 23807 0b62 0C .uleb128 0xc
+ 23808 0b63 00000000 .long .LASF317
+ 23809 0b67 30 .sleb128 48
+ 23810 0b68 0C .uleb128 0xc
+ 23811 0b69 00000000 .long .LASF318
+ 23812 0b6d 31 .sleb128 49
+ 23813 0b6e 00 .byte 0x0
+ 23814 0b6f 1F .uleb128 0x1f
+
GAS LISTING /tmp/ccjbMjHD.s page 692
+
+
+ 23815 0b70 00000000 .long .LASF386
+ 23816 0b74 01 .byte 0x1
+ 23817 0b75 38 .byte 0x38
+ 23818 0b76 01 .byte 0x1
+ 23819 0b77 6D000000 .long 0x6d
+ 23820 0b7b 00000000 .quad .LFB591
+ 23820 00000000
+ 23821 0b83 00000000 .quad .LFE591
+ 23821 00000000
+ 23822 0b8b 00000000 .long .LLST0
+ 23823 0b8f AD0B0000 .long 0xbad
+ 23824 0b93 20 .uleb128 0x20
+ 23825 0b94 6900 .string "i"
+ 23826 0b96 01 .byte 0x1
+ 23827 0b97 38 .byte 0x38
+ 23828 0b98 6D000000 .long 0x6d
+ 23829 0b9c 02 .byte 0x2
+ 23830 0b9d 91 .byte 0x91
+ 23831 0b9e 64 .sleb128 -28
+ 23832 0b9f 21 .uleb128 0x21
+ 23833 0ba0 72746E00 .string "rtn"
+ 23834 0ba4 01 .byte 0x1
+ 23835 0ba5 3A .byte 0x3a
+ 23836 0ba6 6D000000 .long 0x6d
+ 23837 0baa 01 .byte 0x1
+ 23838 0bab 53 .byte 0x53
+ 23839 0bac 00 .byte 0x0
+ 23840 0bad 22 .uleb128 0x22
+ 23841 0bae 00000000 .long .LASF319
+ 23842 0bb2 02 .byte 0x2
+ 23843 0bb3 79 .byte 0x79
+ 23844 0bb4 01 .byte 0x1
+ 23845 0bb5 B3010000 .long 0x1b3
+ 23846 0bb9 03 .byte 0x3
+ 23847 0bba D50B0000 .long 0xbd5
+ 23848 0bbe 23 .uleb128 0x23
+ 23849 0bbf 61696E00 .string "ain"
+ 23850 0bc3 02 .byte 0x2
+ 23851 0bc4 79 .byte 0x79
+ 23852 0bc5 D3000000 .long 0xd3
+ 23853 0bc9 24 .uleb128 0x24
+ 23854 0bca 76656300 .string "vec"
+ 23855 0bce 02 .byte 0x2
+ 23856 0bcf 7D .byte 0x7d
+ 23857 0bd0 B3010000 .long 0x1b3
+ 23858 0bd4 00 .byte 0x0
+ 23859 0bd5 25 .uleb128 0x25
+ 23860 0bd6 00000000 .long .LASF320
+ 23861 0bda 02 .byte 0x2
+ 23862 0bdb 8606 .value 0x686
+ 23863 0bdd 01 .byte 0x1
+ 23864 0bde B3010000 .long 0x1b3
+ 23865 0be2 03 .byte 0x3
+ 23866 0be3 540C0000 .long 0xc54
+ 23867 0be7 26 .uleb128 0x26
+ 23868 0be8 00000000 .long .LASF67
+ 23869 0bec 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 693
+
+
+ 23870 0bed 8606 .value 0x686
+ 23871 0bef B3010000 .long 0x1b3
+ 23872 0bf3 26 .uleb128 0x26
+ 23873 0bf4 00000000 .long .LASF321
+ 23874 0bf8 02 .byte 0x2
+ 23875 0bf9 8606 .value 0x686
+ 23876 0bfb B4000000 .long 0xb4
+ 23877 0bff 27 .uleb128 0x27
+ 23878 0c00 00000000 .long .LASF322
+ 23879 0c04 02 .byte 0x2
+ 23880 0c05 8E06 .value 0x68e
+ 23881 0c07 B3010000 .long 0x1b3
+ 23882 0c0b 28 .uleb128 0x28
+ 23883 0c0c 746D7000 .string "tmp"
+ 23884 0c10 02 .byte 0x2
+ 23885 0c11 8F06 .value 0x68f
+ 23886 0c13 B3010000 .long 0x1b3
+ 23887 0c17 29 .uleb128 0x29
+ 23888 0c18 270C0000 .long 0xc27
+ 23889 0c1c 28 .uleb128 0x28
+ 23890 0c1d 7600 .string "v"
+ 23891 0c1f 02 .byte 0x2
+ 23892 0c20 9306 .value 0x693
+ 23893 0c22 29050000 .long 0x529
+ 23894 0c26 00 .byte 0x0
+ 23895 0c27 29 .uleb128 0x29
+ 23896 0c28 370C0000 .long 0xc37
+ 23897 0c2c 28 .uleb128 0x28
+ 23898 0c2d 7600 .string "v"
+ 23899 0c2f 02 .byte 0x2
+ 23900 0c30 9506 .value 0x695
+ 23901 0c32 29050000 .long 0x529
+ 23902 0c36 00 .byte 0x0
+ 23903 0c37 29 .uleb128 0x29
+ 23904 0c38 470C0000 .long 0xc47
+ 23905 0c3c 28 .uleb128 0x28
+ 23906 0c3d 7600 .string "v"
+ 23907 0c3f 02 .byte 0x2
+ 23908 0c40 9706 .value 0x697
+ 23909 0c42 29050000 .long 0x529
+ 23910 0c46 00 .byte 0x0
+ 23911 0c47 2A .uleb128 0x2a
+ 23912 0c48 28 .uleb128 0x28
+ 23913 0c49 7600 .string "v"
+ 23914 0c4b 02 .byte 0x2
+ 23915 0c4c 9906 .value 0x699
+ 23916 0c4e 29050000 .long 0x529
+ 23917 0c52 00 .byte 0x0
+ 23918 0c53 00 .byte 0x0
+ 23919 0c54 25 .uleb128 0x25
+ 23920 0c55 00000000 .long .LASF323
+ 23921 0c59 02 .byte 0x2
+ 23922 0c5a 0402 .value 0x204
+ 23923 0c5c 01 .byte 0x1
+ 23924 0c5d B3010000 .long 0x1b3
+ 23925 0c61 03 .byte 0x3
+ 23926 0c62 8B0C0000 .long 0xc8b
+
GAS LISTING /tmp/ccjbMjHD.s page 694
+
+
+ 23927 0c66 26 .uleb128 0x26
+ 23928 0c67 00000000 .long .LASF67
+ 23929 0c6b 02 .byte 0x2
+ 23930 0c6c 0402 .value 0x204
+ 23931 0c6e B3010000 .long 0x1b3
+ 23932 0c72 26 .uleb128 0x26
+ 23933 0c73 00000000 .long .LASF324
+ 23934 0c77 02 .byte 0x2
+ 23935 0c78 0402 .value 0x204
+ 23936 0c7a 09040000 .long 0x409
+ 23937 0c7e 26 .uleb128 0x26
+ 23938 0c7f 00000000 .long .LASF325
+ 23939 0c83 02 .byte 0x2
+ 23940 0c84 0402 .value 0x204
+ 23941 0c86 B4000000 .long 0xb4
+ 23942 0c8a 00 .byte 0x0
+ 23943 0c8b 25 .uleb128 0x25
+ 23944 0c8c 00000000 .long .LASF326
+ 23945 0c90 03 .byte 0x3
+ 23946 0c91 5402 .value 0x254
+ 23947 0c93 01 .byte 0x1
+ 23948 0c94 E7000000 .long 0xe7
+ 23949 0c98 03 .byte 0x3
+ 23950 0c99 C10C0000 .long 0xcc1
+ 23951 0c9d 2B .uleb128 0x2b
+ 23952 0c9e 76696E00 .string "vin"
+ 23953 0ca2 03 .byte 0x3
+ 23954 0ca3 5402 .value 0x254
+ 23955 0ca5 E7000000 .long 0xe7
+ 23956 0ca9 2B .uleb128 0x2b
+ 23957 0caa 696900 .string "ii"
+ 23958 0cad 03 .byte 0x3
+ 23959 0cae 5402 .value 0x254
+ 23960 0cb0 6D000000 .long 0x6d
+ 23961 0cb4 2B .uleb128 0x2b
+ 23962 0cb5 6F666600 .string "off"
+ 23963 0cb9 03 .byte 0x3
+ 23964 0cba 5402 .value 0x254
+ 23965 0cbc B4000000 .long 0xb4
+ 23966 0cc0 00 .byte 0x0
+ 23967 0cc1 25 .uleb128 0x25
+ 23968 0cc2 00000000 .long .LASF327
+ 23969 0cc6 02 .byte 0x2
+ 23970 0cc7 7B03 .value 0x37b
+ 23971 0cc9 01 .byte 0x1
+ 23972 0cca B3010000 .long 0x1b3
+ 23973 0cce 03 .byte 0x3
+ 23974 0ccf E00C0000 .long 0xce0
+ 23975 0cd3 26 .uleb128 0x26
+ 23976 0cd4 00000000 .long .LASF67
+ 23977 0cd8 02 .byte 0x2
+ 23978 0cd9 7B03 .value 0x37b
+ 23979 0cdb B3010000 .long 0x1b3
+ 23980 0cdf 00 .byte 0x0
+ 23981 0ce0 25 .uleb128 0x25
+ 23982 0ce1 00000000 .long .LASF328
+ 23983 0ce5 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 695
+
+
+ 23984 0ce6 4E03 .value 0x34e
+ 23985 0ce8 01 .byte 0x1
+ 23986 0ce9 B3010000 .long 0x1b3
+ 23987 0ced 03 .byte 0x3
+ 23988 0cee 440D0000 .long 0xd44
+ 23989 0cf2 26 .uleb128 0x26
+ 23990 0cf3 00000000 .long .LASF67
+ 23991 0cf7 02 .byte 0x2
+ 23992 0cf8 4E03 .value 0x34e
+ 23993 0cfa B3010000 .long 0x1b3
+ 23994 0cfe 2B .uleb128 0x2b
+ 23995 0cff 626F7800 .string "box"
+ 23996 0d03 02 .byte 0x2
+ 23997 0d04 4E03 .value 0x34e
+ 23998 0d06 440D0000 .long 0xd44
+ 23999 0d0a 28 .uleb128 0x28
+ 24000 0d0b 6C6F00 .string "lo"
+ 24001 0d0e 02 .byte 0x2
+ 24002 0d0f 5003 .value 0x350
+ 24003 0d11 B3010000 .long 0x1b3
+ 24004 0d15 28 .uleb128 0x28
+ 24005 0d16 686900 .string "hi"
+ 24006 0d19 02 .byte 0x2
+ 24007 0d1a 5003 .value 0x350
+ 24008 0d1c B3010000 .long 0x1b3
+ 24009 0d20 28 .uleb128 0x28
+ 24010 0d21 746D7000 .string "tmp"
+ 24011 0d25 02 .byte 0x2
+ 24012 0d26 5003 .value 0x350
+ 24013 0d28 B3010000 .long 0x1b3
+ 24014 0d2c 28 .uleb128 0x28
+ 24015 0d2d 6F757400 .string "out"
+ 24016 0d31 02 .byte 0x2
+ 24017 0d32 5003 .value 0x350
+ 24018 0d34 B3010000 .long 0x1b3
+ 24019 0d38 28 .uleb128 0x28
+ 24020 0d39 697800 .string "ix"
+ 24021 0d3c 02 .byte 0x2
+ 24022 0d3d 5103 .value 0x351
+ 24023 0d3f 78000000 .long 0x78
+ 24024 0d43 00 .byte 0x0
+ 24025 0d44 07 .uleb128 0x7
+ 24026 0d45 08 .byte 0x8
+ 24027 0d46 4A0D0000 .long 0xd4a
+ 24028 0d4a 06 .uleb128 0x6
+ 24029 0d4b B3010000 .long 0x1b3
+ 24030 0d4f 22 .uleb128 0x22
+ 24031 0d50 00000000 .long .LASF329
+ 24032 0d54 02 .byte 0x2
+ 24033 0d55 CA .byte 0xca
+ 24034 0d56 01 .byte 0x1
+ 24035 0d57 B3010000 .long 0x1b3
+ 24036 0d5b 03 .byte 0x3
+ 24037 0d5c 750D0000 .long 0xd75
+ 24038 0d60 23 .uleb128 0x23
+ 24039 0d61 763100 .string "v1"
+ 24040 0d64 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 696
+
+
+ 24041 0d65 CA .byte 0xca
+ 24042 0d66 B3010000 .long 0x1b3
+ 24043 0d6a 23 .uleb128 0x23
+ 24044 0d6b 763200 .string "v2"
+ 24045 0d6e 02 .byte 0x2
+ 24046 0d6f CA .byte 0xca
+ 24047 0d70 B3010000 .long 0x1b3
+ 24048 0d74 00 .byte 0x0
+ 24049 0d75 25 .uleb128 0x25
+ 24050 0d76 00000000 .long .LASF330
+ 24051 0d7a 03 .byte 0x3
+ 24052 0d7b AF01 .value 0x1af
+ 24053 0d7d 01 .byte 0x1
+ 24054 0d7e E7000000 .long 0xe7
+ 24055 0d82 03 .byte 0x3
+ 24056 0d83 A00D0000 .long 0xda0
+ 24057 0d87 2B .uleb128 0x2b
+ 24058 0d88 76696E00 .string "vin"
+ 24059 0d8c 03 .byte 0x3
+ 24060 0d8d AF01 .value 0x1af
+ 24061 0d8f E7000000 .long 0xe7
+ 24062 0d93 26 .uleb128 0x26
+ 24063 0d94 00000000 .long .LASF331
+ 24064 0d98 03 .byte 0x3
+ 24065 0d99 AF01 .value 0x1af
+ 24066 0d9b B4000000 .long 0xb4
+ 24067 0d9f 00 .byte 0x0
+ 24068 0da0 25 .uleb128 0x25
+ 24069 0da1 00000000 .long .LASF332
+ 24070 0da5 02 .byte 0x2
+ 24071 0da6 7101 .value 0x171
+ 24072 0da8 01 .byte 0x1
+ 24073 0da9 B3010000 .long 0x1b3
+ 24074 0dad 03 .byte 0x3
+ 24075 0dae CB0D0000 .long 0xdcb
+ 24076 0db2 26 .uleb128 0x26
+ 24077 0db3 00000000 .long .LASF333
+ 24078 0db7 02 .byte 0x2
+ 24079 0db8 7101 .value 0x171
+ 24080 0dba B3010000 .long 0x1b3
+ 24081 0dbe 26 .uleb128 0x26
+ 24082 0dbf 00000000 .long .LASF334
+ 24083 0dc3 02 .byte 0x2
+ 24084 0dc4 7101 .value 0x171
+ 24085 0dc6 B3010000 .long 0x1b3
+ 24086 0dca 00 .byte 0x0
+ 24087 0dcb 25 .uleb128 0x25
+ 24088 0dcc 00000000 .long .LASF335
+ 24089 0dd0 03 .byte 0x3
+ 24090 0dd1 0F02 .value 0x20f
+ 24091 0dd3 01 .byte 0x1
+ 24092 0dd4 E7000000 .long 0xe7
+ 24093 0dd8 03 .byte 0x3
+ 24094 0dd9 F60D0000 .long 0xdf6
+ 24095 0ddd 2B .uleb128 0x2b
+ 24096 0dde 76696E00 .string "vin"
+ 24097 0de2 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 697
+
+
+ 24098 0de3 0F02 .value 0x20f
+ 24099 0de5 E7000000 .long 0xe7
+ 24100 0de9 26 .uleb128 0x26
+ 24101 0dea 00000000 .long .LASF336
+ 24102 0dee 03 .byte 0x3
+ 24103 0def 0F02 .value 0x20f
+ 24104 0df1 F60D0000 .long 0xdf6
+ 24105 0df5 00 .byte 0x0
+ 24106 0df6 06 .uleb128 0x6
+ 24107 0df7 E7000000 .long 0xe7
+ 24108 0dfb 22 .uleb128 0x22
+ 24109 0dfc 00000000 .long .LASF337
+ 24110 0e00 02 .byte 0x2
+ 24111 0e01 E6 .byte 0xe6
+ 24112 0e02 01 .byte 0x1
+ 24113 0e03 B3010000 .long 0x1b3
+ 24114 0e07 03 .byte 0x3
+ 24115 0e08 210E0000 .long 0xe21
+ 24116 0e0c 23 .uleb128 0x23
+ 24117 0e0d 763100 .string "v1"
+ 24118 0e10 02 .byte 0x2
+ 24119 0e11 E6 .byte 0xe6
+ 24120 0e12 B3010000 .long 0x1b3
+ 24121 0e16 23 .uleb128 0x23
+ 24122 0e17 763200 .string "v2"
+ 24123 0e1a 02 .byte 0x2
+ 24124 0e1b E6 .byte 0xe6
+ 24125 0e1c B3010000 .long 0x1b3
+ 24126 0e20 00 .byte 0x0
+ 24127 0e21 25 .uleb128 0x25
+ 24128 0e22 00000000 .long .LASF338
+ 24129 0e26 02 .byte 0x2
+ 24130 0e27 1E01 .value 0x11e
+ 24131 0e29 01 .byte 0x1
+ 24132 0e2a B3010000 .long 0x1b3
+ 24133 0e2e 03 .byte 0x3
+ 24134 0e2f 4A0E0000 .long 0xe4a
+ 24135 0e33 2B .uleb128 0x2b
+ 24136 0e34 763100 .string "v1"
+ 24137 0e37 02 .byte 0x2
+ 24138 0e38 1E01 .value 0x11e
+ 24139 0e3a B3010000 .long 0x1b3
+ 24140 0e3e 2B .uleb128 0x2b
+ 24141 0e3f 763200 .string "v2"
+ 24142 0e42 02 .byte 0x2
+ 24143 0e43 1E01 .value 0x11e
+ 24144 0e45 B3010000 .long 0x1b3
+ 24145 0e49 00 .byte 0x0
+ 24146 0e4a 25 .uleb128 0x25
+ 24147 0e4b 00000000 .long .LASF339
+ 24148 0e4f 02 .byte 0x2
+ 24149 0e50 9502 .value 0x295
+ 24150 0e52 01 .byte 0x1
+ 24151 0e53 B3010000 .long 0x1b3
+ 24152 0e57 03 .byte 0x3
+ 24153 0e58 860E0000 .long 0xe86
+ 24154 0e5c 26 .uleb128 0x26
+
GAS LISTING /tmp/ccjbMjHD.s page 698
+
+
+ 24155 0e5d 00000000 .long .LASF67
+ 24156 0e61 02 .byte 0x2
+ 24157 0e62 9502 .value 0x295
+ 24158 0e64 B3010000 .long 0x1b3
+ 24159 0e68 2C .uleb128 0x2c
+ 24160 0e69 00000000 .long .LASF340
+ 24161 0e6d 02 .byte 0x2
+ 24162 0e6e 9702 .value 0x297
+ 24163 0e70 4A0D0000 .long 0xd4a
+ 24164 0e74 10 .byte 0x10
+ 24165 0e75 01 .byte 0x1
+ 24166 0e76 02 .byte 0x2
+ 24167 0e77 03 .byte 0x3
+ 24168 0e78 00 .byte 0x0
+ 24169 0e79 05 .byte 0x5
+ 24170 0e7a 06 .byte 0x6
+ 24171 0e7b 07 .byte 0x7
+ 24172 0e7c 04 .byte 0x4
+ 24173 0e7d 09 .byte 0x9
+ 24174 0e7e 0A .byte 0xa
+ 24175 0e7f 0B .byte 0xb
+ 24176 0e80 08 .byte 0x8
+ 24177 0e81 0D .byte 0xd
+ 24178 0e82 0E .byte 0xe
+ 24179 0e83 0F .byte 0xf
+ 24180 0e84 0C .byte 0xc
+ 24181 0e85 00 .byte 0x0
+ 24182 0e86 22 .uleb128 0x22
+ 24183 0e87 00000000 .long .LASF341
+ 24184 0e8b 02 .byte 0x2
+ 24185 0e8c AE .byte 0xae
+ 24186 0e8d 01 .byte 0x1
+ 24187 0e8e B3010000 .long 0x1b3
+ 24188 0e92 03 .byte 0x3
+ 24189 0e93 AC0E0000 .long 0xeac
+ 24190 0e97 23 .uleb128 0x23
+ 24191 0e98 763100 .string "v1"
+ 24192 0e9b 02 .byte 0x2
+ 24193 0e9c AE .byte 0xae
+ 24194 0e9d B3010000 .long 0x1b3
+ 24195 0ea1 23 .uleb128 0x23
+ 24196 0ea2 763200 .string "v2"
+ 24197 0ea5 02 .byte 0x2
+ 24198 0ea6 AE .byte 0xae
+ 24199 0ea7 B3010000 .long 0x1b3
+ 24200 0eab 00 .byte 0x0
+ 24201 0eac 25 .uleb128 0x25
+ 24202 0ead 00000000 .long .LASF342
+ 24203 0eb1 02 .byte 0x2
+ 24204 0eb2 4605 .value 0x546
+ 24205 0eb4 01 .byte 0x1
+ 24206 0eb5 B3010000 .long 0x1b3
+ 24207 0eb9 03 .byte 0x3
+ 24208 0eba CB0E0000 .long 0xecb
+ 24209 0ebe 26 .uleb128 0x26
+ 24210 0ebf 00000000 .long .LASF67
+ 24211 0ec3 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 699
+
+
+ 24212 0ec4 4605 .value 0x546
+ 24213 0ec6 B3010000 .long 0x1b3
+ 24214 0eca 00 .byte 0x0
+ 24215 0ecb 25 .uleb128 0x25
+ 24216 0ecc 00000000 .long .LASF343
+ 24217 0ed0 03 .byte 0x3
+ 24218 0ed1 C001 .value 0x1c0
+ 24219 0ed3 01 .byte 0x1
+ 24220 0ed4 E7000000 .long 0xe7
+ 24221 0ed8 03 .byte 0x3
+ 24222 0ed9 F60E0000 .long 0xef6
+ 24223 0edd 2B .uleb128 0x2b
+ 24224 0ede 76696E00 .string "vin"
+ 24225 0ee2 03 .byte 0x3
+ 24226 0ee3 C001 .value 0x1c0
+ 24227 0ee5 E7000000 .long 0xe7
+ 24228 0ee9 26 .uleb128 0x26
+ 24229 0eea 00000000 .long .LASF334
+ 24230 0eee 03 .byte 0x3
+ 24231 0eef C001 .value 0x1c0
+ 24232 0ef1 B4000000 .long 0xb4
+ 24233 0ef5 00 .byte 0x0
+ 24234 0ef6 25 .uleb128 0x25
+ 24235 0ef7 00000000 .long .LASF344
+ 24236 0efb 02 .byte 0x2
+ 24237 0efc 1A06 .value 0x61a
+ 24238 0efe 01 .byte 0x1
+ 24239 0eff B3010000 .long 0x1b3
+ 24240 0f03 03 .byte 0x3
+ 24241 0f04 210F0000 .long 0xf21
+ 24242 0f08 26 .uleb128 0x26
+ 24243 0f09 00000000 .long .LASF67
+ 24244 0f0d 02 .byte 0x2
+ 24245 0f0e 1A06 .value 0x61a
+ 24246 0f10 B3010000 .long 0x1b3
+ 24247 0f14 27 .uleb128 0x27
+ 24248 0f15 00000000 .long .LASF345
+ 24249 0f19 02 .byte 0x2
+ 24250 0f1a 1D06 .value 0x61d
+ 24251 0f1c B3010000 .long 0x1b3
+ 24252 0f20 00 .byte 0x0
+ 24253 0f21 25 .uleb128 0x25
+ 24254 0f22 00000000 .long .LASF346
+ 24255 0f26 02 .byte 0x2
+ 24256 0f27 FA04 .value 0x4fa
+ 24257 0f29 01 .byte 0x1
+ 24258 0f2a B3010000 .long 0x1b3
+ 24259 0f2e 03 .byte 0x3
+ 24260 0f2f 5D0F0000 .long 0xf5d
+ 24261 0f33 26 .uleb128 0x26
+ 24262 0f34 00000000 .long .LASF67
+ 24263 0f38 02 .byte 0x2
+ 24264 0f39 FA04 .value 0x4fa
+ 24265 0f3b B3010000 .long 0x1b3
+ 24266 0f3f 2C .uleb128 0x2c
+ 24267 0f40 00000000 .long .LASF334
+ 24268 0f44 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 700
+
+
+ 24269 0f45 FD04 .value 0x4fd
+ 24270 0f47 4A0D0000 .long 0xd4a
+ 24271 0f4b 10 .byte 0x10
+ 24272 0f4c FF .byte 0xff
+ 24273 0f4d FF .byte 0xff
+ 24274 0f4e FF .byte 0xff
+ 24275 0f4f FF .byte 0xff
+ 24276 0f50 00 .byte 0x0
+ 24277 0f51 01 .byte 0x1
+ 24278 0f52 02 .byte 0x2
+ 24279 0f53 03 .byte 0x3
+ 24280 0f54 04 .byte 0x4
+ 24281 0f55 05 .byte 0x5
+ 24282 0f56 06 .byte 0x6
+ 24283 0f57 07 .byte 0x7
+ 24284 0f58 08 .byte 0x8
+ 24285 0f59 09 .byte 0x9
+ 24286 0f5a 0A .byte 0xa
+ 24287 0f5b 0B .byte 0xb
+ 24288 0f5c 00 .byte 0x0
+ 24289 0f5d 2D .uleb128 0x2d
+ 24290 0f5e 00000000 .long .LASF359
+ 24291 0f62 02 .byte 0x2
+ 24292 0f63 C206 .value 0x6c2
+ 24293 0f65 01 .byte 0x1
+ 24294 0f66 00000000 .quad .LFB645
+ 24294 00000000
+ 24295 0f6e 00000000 .quad .LFE645
+ 24295 00000000
+ 24296 0f76 00000000 .long .LLST1
+ 24297 0f7a 24560000 .long 0x5624
+ 24298 0f7e 2E .uleb128 0x2e
+ 24299 0f7f 00000000 .long .LASF65
+ 24300 0f83 02 .byte 0x2
+ 24301 0f84 C206 .value 0x6c2
+ 24302 0f86 24560000 .long 0x5624
+ 24303 0f8a 04 .byte 0x4
+ 24304 0f8b 91 .byte 0x91
+ 24305 0f8c E8AC7F .sleb128 -10648
+ 24306 0f8f 2F .uleb128 0x2f
+ 24307 0f90 6B657900 .string "key"
+ 24308 0f94 02 .byte 0x2
+ 24309 0f95 C206 .value 0x6c2
+ 24310 0f97 2A560000 .long 0x562a
+ 24311 0f9b 04 .byte 0x4
+ 24312 0f9c 91 .byte 0x91
+ 24313 0f9d E0AC7F .sleb128 -10656
+ 24314 0fa0 30 .uleb128 0x30
+ 24315 0fa1 00000000 .long .LASF67
+ 24316 0fa5 02 .byte 0x2
+ 24317 0fa6 C406 .value 0x6c4
+ 24318 0fa8 B3010000 .long 0x1b3
+ 24319 0fac 04 .byte 0x4
+ 24320 0fad 91 .byte 0x91
+ 24321 0fae F0B17F .sleb128 -10000
+ 24322 0fb1 30 .uleb128 0x30
+ 24323 0fb2 00000000 .long .LASF347
+
GAS LISTING /tmp/ccjbMjHD.s page 701
+
+
+ 24324 0fb6 02 .byte 0x2
+ 24325 0fb7 C506 .value 0x6c5
+ 24326 0fb9 B3010000 .long 0x1b3
+ 24327 0fbd 04 .byte 0x4
+ 24328 0fbe 91 .byte 0x91
+ 24329 0fbf 80B27F .sleb128 -9984
+ 24330 0fc2 31 .uleb128 0x31
+ 24331 0fc3 AD0B0000 .long 0xbad
+ 24332 0fc7 00000000 .quad .LBB684
+ 24332 00000000
+ 24333 0fcf 00000000 .quad .LBE684
+ 24333 00000000
+ 24334 0fd7 02 .byte 0x2
+ 24335 0fd8 C706 .value 0x6c7
+ 24336 0fda 05100000 .long 0x1005
+ 24337 0fde 32 .uleb128 0x32
+ 24338 0fdf BE0B0000 .long 0xbbe
+ 24339 0fe3 04 .byte 0x4
+ 24340 0fe4 91 .byte 0x91
+ 24341 0fe5 90B27F .sleb128 -9968
+ 24342 0fe8 33 .uleb128 0x33
+ 24343 0fe9 00000000 .quad .LBB685
+ 24343 00000000
+ 24344 0ff1 00000000 .quad .LBE685
+ 24344 00000000
+ 24345 0ff9 34 .uleb128 0x34
+ 24346 0ffa C90B0000 .long 0xbc9
+ 24347 0ffe 04 .byte 0x4
+ 24348 0fff 76 .byte 0x76
+ 24349 1000 80A97F .sleb128 -11136
+ 24350 1003 00 .byte 0x0
+ 24351 1004 00 .byte 0x0
+ 24352 1005 31 .uleb128 0x31
+ 24353 1006 D50B0000 .long 0xbd5
+ 24354 100a 00000000 .quad .LBB686
+ 24354 00000000
+ 24355 1012 00000000 .quad .LBE686
+ 24355 00000000
+ 24356 101a 02 .byte 0x2
+ 24357 101b D006 .value 0x6d0
+ 24358 101d 18150000 .long 0x1518
+ 24359 1021 32 .uleb128 0x32
+ 24360 1022 F30B0000 .long 0xbf3
+ 24361 1026 04 .byte 0x4
+ 24362 1027 91 .byte 0x91
+ 24363 1028 9CB27F .sleb128 -9956
+ 24364 102b 32 .uleb128 0x32
+ 24365 102c E70B0000 .long 0xbe7
+ 24366 1030 04 .byte 0x4
+ 24367 1031 91 .byte 0x91
+ 24368 1032 A0B27F .sleb128 -9952
+ 24369 1035 33 .uleb128 0x33
+ 24370 1036 00000000 .quad .LBB687
+ 24370 00000000
+ 24371 103e 00000000 .quad .LBE687
+ 24371 00000000
+ 24372 1046 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 702
+
+
+ 24373 1047 FF0B0000 .long 0xbff
+ 24374 104b 04 .byte 0x4
+ 24375 104c 76 .byte 0x76
+ 24376 104d A0A97F .sleb128 -11104
+ 24377 1050 34 .uleb128 0x34
+ 24378 1051 0B0C0000 .long 0xc0b
+ 24379 1055 04 .byte 0x4
+ 24380 1056 76 .byte 0x76
+ 24381 1057 90A97F .sleb128 -11120
+ 24382 105a 31 .uleb128 0x31
+ 24383 105b 540C0000 .long 0xc54
+ 24384 105f 00000000 .quad .LBB688
+ 24384 00000000
+ 24385 1067 00000000 .quad .LBE688
+ 24385 00000000
+ 24386 106f 02 .byte 0x2
+ 24387 1070 9106 .value 0x691
+ 24388 1072 CC100000 .long 0x10cc
+ 24389 1076 32 .uleb128 0x32
+ 24390 1077 7E0C0000 .long 0xc7e
+ 24391 107b 04 .byte 0x4
+ 24392 107c 91 .byte 0x91
+ 24393 107d B8B27F .sleb128 -9928
+ 24394 1080 32 .uleb128 0x32
+ 24395 1081 720C0000 .long 0xc72
+ 24396 1085 04 .byte 0x4
+ 24397 1086 91 .byte 0x91
+ 24398 1087 BCB27F .sleb128 -9924
+ 24399 108a 32 .uleb128 0x32
+ 24400 108b 660C0000 .long 0xc66
+ 24401 108f 04 .byte 0x4
+ 24402 1090 91 .byte 0x91
+ 24403 1091 C0B27F .sleb128 -9920
+ 24404 1094 35 .uleb128 0x35
+ 24405 1095 8B0C0000 .long 0xc8b
+ 24406 1099 00000000 .quad .LBB690
+ 24406 00000000
+ 24407 10a1 00000000 .quad .LBE690
+ 24407 00000000
+ 24408 10a9 02 .byte 0x2
+ 24409 10aa 0702 .value 0x207
+ 24410 10ac 32 .uleb128 0x32
+ 24411 10ad B40C0000 .long 0xcb4
+ 24412 10b1 04 .byte 0x4
+ 24413 10b2 91 .byte 0x91
+ 24414 10b3 D8B27F .sleb128 -9896
+ 24415 10b6 32 .uleb128 0x32
+ 24416 10b7 A90C0000 .long 0xca9
+ 24417 10bb 04 .byte 0x4
+ 24418 10bc 91 .byte 0x91
+ 24419 10bd DCB27F .sleb128 -9892
+ 24420 10c0 32 .uleb128 0x32
+ 24421 10c1 9D0C0000 .long 0xc9d
+ 24422 10c5 04 .byte 0x4
+ 24423 10c6 91 .byte 0x91
+ 24424 10c7 E0B27F .sleb128 -9888
+ 24425 10ca 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 703
+
+
+ 24426 10cb 00 .byte 0x0
+ 24427 10cc 31 .uleb128 0x31
+ 24428 10cd C10C0000 .long 0xcc1
+ 24429 10d1 00000000 .quad .LBB692
+ 24429 00000000
+ 24430 10d9 00000000 .quad .LBE692
+ 24430 00000000
+ 24431 10e1 02 .byte 0x2
+ 24432 10e2 9206 .value 0x692
+ 24433 10e4 73130000 .long 0x1373
+ 24434 10e8 32 .uleb128 0x32
+ 24435 10e9 D30C0000 .long 0xcd3
+ 24436 10ed 04 .byte 0x4
+ 24437 10ee 91 .byte 0x91
+ 24438 10ef F0B27F .sleb128 -9872
+ 24439 10f2 35 .uleb128 0x35
+ 24440 10f3 E00C0000 .long 0xce0
+ 24441 10f7 00000000 .quad .LBB694
+ 24441 00000000
+ 24442 10ff 00000000 .quad .LBE694
+ 24442 00000000
+ 24443 1107 02 .byte 0x2
+ 24444 1108 7D03 .value 0x37d
+ 24445 110a 32 .uleb128 0x32
+ 24446 110b FE0C0000 .long 0xcfe
+ 24447 110f 04 .byte 0x4
+ 24448 1110 91 .byte 0x91
+ 24449 1111 88B37F .sleb128 -9848
+ 24450 1114 32 .uleb128 0x32
+ 24451 1115 F20C0000 .long 0xcf2
+ 24452 1119 04 .byte 0x4
+ 24453 111a 91 .byte 0x91
+ 24454 111b 90B37F .sleb128 -9840
+ 24455 111e 33 .uleb128 0x33
+ 24456 111f 00000000 .quad .LBB695
+ 24456 00000000
+ 24457 1127 00000000 .quad .LBE695
+ 24457 00000000
+ 24458 112f 34 .uleb128 0x34
+ 24459 1130 0A0D0000 .long 0xd0a
+ 24460 1134 04 .byte 0x4
+ 24461 1135 91 .byte 0x91
+ 24462 1136 E0B37F .sleb128 -9760
+ 24463 1139 34 .uleb128 0x34
+ 24464 113a 150D0000 .long 0xd15
+ 24465 113e 04 .byte 0x4
+ 24466 113f 91 .byte 0x91
+ 24467 1140 D0B37F .sleb128 -9776
+ 24468 1143 34 .uleb128 0x34
+ 24469 1144 200D0000 .long 0xd20
+ 24470 1148 04 .byte 0x4
+ 24471 1149 91 .byte 0x91
+ 24472 114a C0B37F .sleb128 -9792
+ 24473 114d 34 .uleb128 0x34
+ 24474 114e 2C0D0000 .long 0xd2c
+ 24475 1152 04 .byte 0x4
+ 24476 1153 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 704
+
+
+ 24477 1154 B0B37F .sleb128 -9808
+ 24478 1157 34 .uleb128 0x34
+ 24479 1158 380D0000 .long 0xd38
+ 24480 115c 04 .byte 0x4
+ 24481 115d 91 .byte 0x91
+ 24482 115e ACB37F .sleb128 -9812
+ 24483 1161 31 .uleb128 0x31
+ 24484 1162 4F0D0000 .long 0xd4f
+ 24485 1166 00000000 .quad .LBB696
+ 24485 00000000
+ 24486 116e 00000000 .quad .LBE696
+ 24486 00000000
+ 24487 1176 02 .byte 0x2
+ 24488 1177 5603 .value 0x356
+ 24489 1179 92110000 .long 0x1192
+ 24490 117d 32 .uleb128 0x32
+ 24491 117e 6A0D0000 .long 0xd6a
+ 24492 1182 04 .byte 0x4
+ 24493 1183 91 .byte 0x91
+ 24494 1184 F0B37F .sleb128 -9744
+ 24495 1187 32 .uleb128 0x32
+ 24496 1188 600D0000 .long 0xd60
+ 24497 118c 04 .byte 0x4
+ 24498 118d 91 .byte 0x91
+ 24499 118e 80B47F .sleb128 -9728
+ 24500 1191 00 .byte 0x0
+ 24501 1192 31 .uleb128 0x31
+ 24502 1193 750D0000 .long 0xd75
+ 24503 1197 00000000 .quad .LBB698
+ 24503 00000000
+ 24504 119f 00000000 .quad .LBE698
+ 24504 00000000
+ 24505 11a7 02 .byte 0x2
+ 24506 11a8 5903 .value 0x359
+ 24507 11aa C3110000 .long 0x11c3
+ 24508 11ae 32 .uleb128 0x32
+ 24509 11af 930D0000 .long 0xd93
+ 24510 11b3 04 .byte 0x4
+ 24511 11b4 91 .byte 0x91
+ 24512 11b5 9CB47F .sleb128 -9700
+ 24513 11b8 32 .uleb128 0x32
+ 24514 11b9 870D0000 .long 0xd87
+ 24515 11bd 04 .byte 0x4
+ 24516 11be 91 .byte 0x91
+ 24517 11bf A0B47F .sleb128 -9696
+ 24518 11c2 00 .byte 0x0
+ 24519 11c3 31 .uleb128 0x31
+ 24520 11c4 4F0D0000 .long 0xd4f
+ 24521 11c8 00000000 .quad .LBB700
+ 24521 00000000
+ 24522 11d0 00000000 .quad .LBE700
+ 24522 00000000
+ 24523 11d8 02 .byte 0x2
+ 24524 11d9 5B03 .value 0x35b
+ 24525 11db F4110000 .long 0x11f4
+ 24526 11df 32 .uleb128 0x32
+ 24527 11e0 6A0D0000 .long 0xd6a
+
GAS LISTING /tmp/ccjbMjHD.s page 705
+
+
+ 24528 11e4 04 .byte 0x4
+ 24529 11e5 91 .byte 0x91
+ 24530 11e6 B0B47F .sleb128 -9680
+ 24531 11e9 32 .uleb128 0x32
+ 24532 11ea 600D0000 .long 0xd60
+ 24533 11ee 04 .byte 0x4
+ 24534 11ef 91 .byte 0x91
+ 24535 11f0 C0B47F .sleb128 -9664
+ 24536 11f3 00 .byte 0x0
+ 24537 11f4 31 .uleb128 0x31
+ 24538 11f5 A00D0000 .long 0xda0
+ 24539 11f9 00000000 .quad .LBB702
+ 24539 00000000
+ 24540 1201 00000000 .quad .LBE702
+ 24540 00000000
+ 24541 1209 02 .byte 0x2
+ 24542 120a 6403 .value 0x364
+ 24543 120c 52120000 .long 0x1252
+ 24544 1210 32 .uleb128 0x32
+ 24545 1211 BE0D0000 .long 0xdbe
+ 24546 1215 04 .byte 0x4
+ 24547 1216 91 .byte 0x91
+ 24548 1217 D0B47F .sleb128 -9648
+ 24549 121a 32 .uleb128 0x32
+ 24550 121b B20D0000 .long 0xdb2
+ 24551 121f 04 .byte 0x4
+ 24552 1220 91 .byte 0x91
+ 24553 1221 E0B47F .sleb128 -9632
+ 24554 1224 35 .uleb128 0x35
+ 24555 1225 CB0D0000 .long 0xdcb
+ 24556 1229 00000000 .quad .LBB704
+ 24556 00000000
+ 24557 1231 00000000 .quad .LBE704
+ 24557 00000000
+ 24558 1239 02 .byte 0x2
+ 24559 123a 7501 .value 0x175
+ 24560 123c 32 .uleb128 0x32
+ 24561 123d E90D0000 .long 0xde9
+ 24562 1241 04 .byte 0x4
+ 24563 1242 91 .byte 0x91
+ 24564 1243 F0B47F .sleb128 -9616
+ 24565 1246 32 .uleb128 0x32
+ 24566 1247 DD0D0000 .long 0xddd
+ 24567 124b 04 .byte 0x4
+ 24568 124c 91 .byte 0x91
+ 24569 124d 80B57F .sleb128 -9600
+ 24570 1250 00 .byte 0x0
+ 24571 1251 00 .byte 0x0
+ 24572 1252 31 .uleb128 0x31
+ 24573 1253 FB0D0000 .long 0xdfb
+ 24574 1257 00000000 .quad .LBB706
+ 24574 00000000
+ 24575 125f 00000000 .quad .LBE706
+ 24575 00000000
+ 24576 1267 02 .byte 0x2
+ 24577 1268 6603 .value 0x366
+ 24578 126a 83120000 .long 0x1283
+
GAS LISTING /tmp/ccjbMjHD.s page 706
+
+
+ 24579 126e 32 .uleb128 0x32
+ 24580 126f 160E0000 .long 0xe16
+ 24581 1273 04 .byte 0x4
+ 24582 1274 91 .byte 0x91
+ 24583 1275 90B57F .sleb128 -9584
+ 24584 1278 32 .uleb128 0x32
+ 24585 1279 0C0E0000 .long 0xe0c
+ 24586 127d 04 .byte 0x4
+ 24587 127e 91 .byte 0x91
+ 24588 127f A0B57F .sleb128 -9568
+ 24589 1282 00 .byte 0x0
+ 24590 1283 31 .uleb128 0x31
+ 24591 1284 A00D0000 .long 0xda0
+ 24592 1288 00000000 .quad .LBB708
+ 24592 00000000
+ 24593 1290 00000000 .quad .LBE708
+ 24593 00000000
+ 24594 1298 02 .byte 0x2
+ 24595 1299 6803 .value 0x368
+ 24596 129b E1120000 .long 0x12e1
+ 24597 129f 32 .uleb128 0x32
+ 24598 12a0 BE0D0000 .long 0xdbe
+ 24599 12a4 04 .byte 0x4
+ 24600 12a5 91 .byte 0x91
+ 24601 12a6 B0B57F .sleb128 -9552
+ 24602 12a9 32 .uleb128 0x32
+ 24603 12aa B20D0000 .long 0xdb2
+ 24604 12ae 04 .byte 0x4
+ 24605 12af 91 .byte 0x91
+ 24606 12b0 C0B57F .sleb128 -9536
+ 24607 12b3 35 .uleb128 0x35
+ 24608 12b4 CB0D0000 .long 0xdcb
+ 24609 12b8 00000000 .quad .LBB710
+ 24609 00000000
+ 24610 12c0 00000000 .quad .LBE710
+ 24610 00000000
+ 24611 12c8 02 .byte 0x2
+ 24612 12c9 7501 .value 0x175
+ 24613 12cb 32 .uleb128 0x32
+ 24614 12cc E90D0000 .long 0xde9
+ 24615 12d0 04 .byte 0x4
+ 24616 12d1 91 .byte 0x91
+ 24617 12d2 D0B57F .sleb128 -9520
+ 24618 12d5 32 .uleb128 0x32
+ 24619 12d6 DD0D0000 .long 0xddd
+ 24620 12da 04 .byte 0x4
+ 24621 12db 91 .byte 0x91
+ 24622 12dc E0B57F .sleb128 -9504
+ 24623 12df 00 .byte 0x0
+ 24624 12e0 00 .byte 0x0
+ 24625 12e1 31 .uleb128 0x31
+ 24626 12e2 FB0D0000 .long 0xdfb
+ 24627 12e6 00000000 .quad .LBB712
+ 24627 00000000
+ 24628 12ee 00000000 .quad .LBE712
+ 24628 00000000
+ 24629 12f6 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 707
+
+
+ 24630 12f7 6A03 .value 0x36a
+ 24631 12f9 12130000 .long 0x1312
+ 24632 12fd 32 .uleb128 0x32
+ 24633 12fe 160E0000 .long 0xe16
+ 24634 1302 04 .byte 0x4
+ 24635 1303 91 .byte 0x91
+ 24636 1304 F0B57F .sleb128 -9488
+ 24637 1307 32 .uleb128 0x32
+ 24638 1308 0C0E0000 .long 0xe0c
+ 24639 130c 04 .byte 0x4
+ 24640 130d 91 .byte 0x91
+ 24641 130e 80B67F .sleb128 -9472
+ 24642 1311 00 .byte 0x0
+ 24643 1312 31 .uleb128 0x31
+ 24644 1313 210E0000 .long 0xe21
+ 24645 1317 00000000 .quad .LBB714
+ 24645 00000000
+ 24646 131f 00000000 .quad .LBE714
+ 24646 00000000
+ 24647 1327 02 .byte 0x2
+ 24648 1328 6C03 .value 0x36c
+ 24649 132a 43130000 .long 0x1343
+ 24650 132e 32 .uleb128 0x32
+ 24651 132f 3E0E0000 .long 0xe3e
+ 24652 1333 04 .byte 0x4
+ 24653 1334 91 .byte 0x91
+ 24654 1335 90B67F .sleb128 -9456
+ 24655 1338 32 .uleb128 0x32
+ 24656 1339 330E0000 .long 0xe33
+ 24657 133d 04 .byte 0x4
+ 24658 133e 91 .byte 0x91
+ 24659 133f A0B67F .sleb128 -9440
+ 24660 1342 00 .byte 0x0
+ 24661 1343 35 .uleb128 0x35
+ 24662 1344 4F0D0000 .long 0xd4f
+ 24663 1348 00000000 .quad .LBB716
+ 24663 00000000
+ 24664 1350 00000000 .quad .LBE716
+ 24664 00000000
+ 24665 1358 02 .byte 0x2
+ 24666 1359 6E03 .value 0x36e
+ 24667 135b 32 .uleb128 0x32
+ 24668 135c 6A0D0000 .long 0xd6a
+ 24669 1360 04 .byte 0x4
+ 24670 1361 91 .byte 0x91
+ 24671 1362 B0B67F .sleb128 -9424
+ 24672 1365 32 .uleb128 0x32
+ 24673 1366 600D0000 .long 0xd60
+ 24674 136a 04 .byte 0x4
+ 24675 136b 91 .byte 0x91
+ 24676 136c C0B67F .sleb128 -9408
+ 24677 136f 00 .byte 0x0
+ 24678 1370 00 .byte 0x0
+ 24679 1371 00 .byte 0x0
+ 24680 1372 00 .byte 0x0
+ 24681 1373 36 .uleb128 0x36
+ 24682 1374 00000000 .quad .LBB718
+
GAS LISTING /tmp/ccjbMjHD.s page 708
+
+
+ 24682 00000000
+ 24683 137c 00000000 .quad .LBE718
+ 24683 00000000
+ 24684 1384 93130000 .long 0x1393
+ 24685 1388 34 .uleb128 0x34
+ 24686 1389 1C0C0000 .long 0xc1c
+ 24687 138d 04 .byte 0x4
+ 24688 138e 91 .byte 0x91
+ 24689 138f A0AD7F .sleb128 -10592
+ 24690 1392 00 .byte 0x0
+ 24691 1393 31 .uleb128 0x31
+ 24692 1394 4A0E0000 .long 0xe4a
+ 24693 1398 00000000 .quad .LBB719
+ 24693 00000000
+ 24694 13a0 00000000 .quad .LBE719
+ 24694 00000000
+ 24695 13a8 02 .byte 0x2
+ 24696 13a9 9406 .value 0x694
+ 24697 13ab 35140000 .long 0x1435
+ 24698 13af 32 .uleb128 0x32
+ 24699 13b0 5C0E0000 .long 0xe5c
+ 24700 13b4 04 .byte 0x4
+ 24701 13b5 91 .byte 0x91
+ 24702 13b6 D0B67F .sleb128 -9392
+ 24703 13b9 33 .uleb128 0x33
+ 24704 13ba 00000000 .quad .LBB720
+ 24704 00000000
+ 24705 13c2 00000000 .quad .LBE720
+ 24705 00000000
+ 24706 13ca 34 .uleb128 0x34
+ 24707 13cb 680E0000 .long 0xe68
+ 24708 13cf 09 .byte 0x9
+ 24709 13d0 03 .byte 0x3
+ 24710 13d1 00000000 .quad ShiftRowTable.7385
+ 24710 00000000
+ 24711 13d9 35 .uleb128 0x35
+ 24712 13da A00D0000 .long 0xda0
+ 24713 13de 00000000 .quad .LBB721
+ 24713 00000000
+ 24714 13e6 00000000 .quad .LBE721
+ 24714 00000000
+ 24715 13ee 02 .byte 0x2
+ 24716 13ef 9B02 .value 0x29b
+ 24717 13f1 32 .uleb128 0x32
+ 24718 13f2 BE0D0000 .long 0xdbe
+ 24719 13f6 04 .byte 0x4
+ 24720 13f7 91 .byte 0x91
+ 24721 13f8 E0B67F .sleb128 -9376
+ 24722 13fb 32 .uleb128 0x32
+ 24723 13fc B20D0000 .long 0xdb2
+ 24724 1400 04 .byte 0x4
+ 24725 1401 91 .byte 0x91
+ 24726 1402 F0B67F .sleb128 -9360
+ 24727 1405 35 .uleb128 0x35
+ 24728 1406 CB0D0000 .long 0xdcb
+ 24729 140a 00000000 .quad .LBB723
+ 24729 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 709
+
+
+ 24730 1412 00000000 .quad .LBE723
+ 24730 00000000
+ 24731 141a 02 .byte 0x2
+ 24732 141b 7501 .value 0x175
+ 24733 141d 32 .uleb128 0x32
+ 24734 141e E90D0000 .long 0xde9
+ 24735 1422 04 .byte 0x4
+ 24736 1423 91 .byte 0x91
+ 24737 1424 80B77F .sleb128 -9344
+ 24738 1427 32 .uleb128 0x32
+ 24739 1428 DD0D0000 .long 0xddd
+ 24740 142c 04 .byte 0x4
+ 24741 142d 91 .byte 0x91
+ 24742 142e 90B77F .sleb128 -9328
+ 24743 1431 00 .byte 0x0
+ 24744 1432 00 .byte 0x0
+ 24745 1433 00 .byte 0x0
+ 24746 1434 00 .byte 0x0
+ 24747 1435 36 .uleb128 0x36
+ 24748 1436 00000000 .quad .LBB725
+ 24748 00000000
+ 24749 143e 00000000 .quad .LBE725
+ 24749 00000000
+ 24750 1446 55140000 .long 0x1455
+ 24751 144a 34 .uleb128 0x34
+ 24752 144b 2C0C0000 .long 0xc2c
+ 24753 144f 04 .byte 0x4
+ 24754 1450 91 .byte 0x91
+ 24755 1451 90AD7F .sleb128 -10608
+ 24756 1454 00 .byte 0x0
+ 24757 1455 31 .uleb128 0x31
+ 24758 1456 860E0000 .long 0xe86
+ 24759 145a 00000000 .quad .LBB726
+ 24759 00000000
+ 24760 1462 00000000 .quad .LBE726
+ 24760 00000000
+ 24761 146a 02 .byte 0x2
+ 24762 146b 9606 .value 0x696
+ 24763 146d 86140000 .long 0x1486
+ 24764 1471 32 .uleb128 0x32
+ 24765 1472 A10E0000 .long 0xea1
+ 24766 1476 04 .byte 0x4
+ 24767 1477 91 .byte 0x91
+ 24768 1478 A0B77F .sleb128 -9312
+ 24769 147b 32 .uleb128 0x32
+ 24770 147c 970E0000 .long 0xe97
+ 24771 1480 04 .byte 0x4
+ 24772 1481 91 .byte 0x91
+ 24773 1482 B0B77F .sleb128 -9296
+ 24774 1485 00 .byte 0x0
+ 24775 1486 36 .uleb128 0x36
+ 24776 1487 00000000 .quad .LBB728
+ 24776 00000000
+ 24777 148f 00000000 .quad .LBE728
+ 24777 00000000
+ 24778 1497 A6140000 .long 0x14a6
+ 24779 149b 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 710
+
+
+ 24780 149c 3C0C0000 .long 0xc3c
+ 24781 14a0 04 .byte 0x4
+ 24782 14a1 91 .byte 0x91
+ 24783 14a2 80AD7F .sleb128 -10624
+ 24784 14a5 00 .byte 0x0
+ 24785 14a6 31 .uleb128 0x31
+ 24786 14a7 AC0E0000 .long 0xeac
+ 24787 14ab 00000000 .quad .LBB729
+ 24787 00000000
+ 24788 14b3 00000000 .quad .LBE729
+ 24788 00000000
+ 24789 14bb 02 .byte 0x2
+ 24790 14bc 9806 .value 0x698
+ 24791 14be FA140000 .long 0x14fa
+ 24792 14c2 32 .uleb128 0x32
+ 24793 14c3 BE0E0000 .long 0xebe
+ 24794 14c7 04 .byte 0x4
+ 24795 14c8 91 .byte 0x91
+ 24796 14c9 C0B77F .sleb128 -9280
+ 24797 14cc 35 .uleb128 0x35
+ 24798 14cd CB0E0000 .long 0xecb
+ 24799 14d1 00000000 .quad .LBB731
+ 24799 00000000
+ 24800 14d9 00000000 .quad .LBE731
+ 24800 00000000
+ 24801 14e1 02 .byte 0x2
+ 24802 14e2 4905 .value 0x549
+ 24803 14e4 32 .uleb128 0x32
+ 24804 14e5 E90E0000 .long 0xee9
+ 24805 14e9 04 .byte 0x4
+ 24806 14ea 91 .byte 0x91
+ 24807 14eb DCB77F .sleb128 -9252
+ 24808 14ee 32 .uleb128 0x32
+ 24809 14ef DD0E0000 .long 0xedd
+ 24810 14f3 04 .byte 0x4
+ 24811 14f4 91 .byte 0x91
+ 24812 14f5 E0B77F .sleb128 -9248
+ 24813 14f8 00 .byte 0x0
+ 24814 14f9 00 .byte 0x0
+ 24815 14fa 33 .uleb128 0x33
+ 24816 14fb 00000000 .quad .LBB733
+ 24816 00000000
+ 24817 1503 00000000 .quad .LBE733
+ 24817 00000000
+ 24818 150b 34 .uleb128 0x34
+ 24819 150c 480C0000 .long 0xc48
+ 24820 1510 04 .byte 0x4
+ 24821 1511 91 .byte 0x91
+ 24822 1512 F0AC7F .sleb128 -10640
+ 24823 1515 00 .byte 0x0
+ 24824 1516 00 .byte 0x0
+ 24825 1517 00 .byte 0x0
+ 24826 1518 31 .uleb128 0x31
+ 24827 1519 F60E0000 .long 0xef6
+ 24828 151d 00000000 .quad .LBB734
+ 24828 00000000
+ 24829 1525 00000000 .quad .LBE734
+
GAS LISTING /tmp/ccjbMjHD.s page 711
+
+
+ 24829 00000000
+ 24830 152d 02 .byte 0x2
+ 24831 152e D006 .value 0x6d0
+ 24832 1530 3D170000 .long 0x173d
+ 24833 1534 32 .uleb128 0x32
+ 24834 1535 080F0000 .long 0xf08
+ 24835 1539 04 .byte 0x4
+ 24836 153a 91 .byte 0x91
+ 24837 153b F0B77F .sleb128 -9232
+ 24838 153e 33 .uleb128 0x33
+ 24839 153f 00000000 .quad .LBB735
+ 24839 00000000
+ 24840 1547 00000000 .quad .LBE735
+ 24840 00000000
+ 24841 154f 34 .uleb128 0x34
+ 24842 1550 140F0000 .long 0xf14
+ 24843 1554 04 .byte 0x4
+ 24844 1555 76 .byte 0x76
+ 24845 1556 B0A97F .sleb128 -11088
+ 24846 1559 31 .uleb128 0x31
+ 24847 155a 210F0000 .long 0xf21
+ 24848 155e 00000000 .quad .LBB736
+ 24848 00000000
+ 24849 1566 00000000 .quad .LBE736
+ 24849 00000000
+ 24850 156e 02 .byte 0x2
+ 24851 156f 1F06 .value 0x61f
+ 24852 1571 FB150000 .long 0x15fb
+ 24853 1575 32 .uleb128 0x32
+ 24854 1576 330F0000 .long 0xf33
+ 24855 157a 04 .byte 0x4
+ 24856 157b 91 .byte 0x91
+ 24857 157c 80B87F .sleb128 -9216
+ 24858 157f 33 .uleb128 0x33
+ 24859 1580 00000000 .quad .LBB737
+ 24859 00000000
+ 24860 1588 00000000 .quad .LBE737
+ 24860 00000000
+ 24861 1590 34 .uleb128 0x34
+ 24862 1591 3F0F0000 .long 0xf3f
+ 24863 1595 09 .byte 0x9
+ 24864 1596 03 .byte 0x3
+ 24865 1597 00000000 .quad mask.7943
+ 24865 00000000
+ 24866 159f 35 .uleb128 0x35
+ 24867 15a0 A00D0000 .long 0xda0
+ 24868 15a4 00000000 .quad .LBB738
+ 24868 00000000
+ 24869 15ac 00000000 .quad .LBE738
+ 24869 00000000
+ 24870 15b4 02 .byte 0x2
+ 24871 15b5 FE04 .value 0x4fe
+ 24872 15b7 32 .uleb128 0x32
+ 24873 15b8 BE0D0000 .long 0xdbe
+ 24874 15bc 04 .byte 0x4
+ 24875 15bd 91 .byte 0x91
+ 24876 15be 90B87F .sleb128 -9200
+
GAS LISTING /tmp/ccjbMjHD.s page 712
+
+
+ 24877 15c1 32 .uleb128 0x32
+ 24878 15c2 B20D0000 .long 0xdb2
+ 24879 15c6 04 .byte 0x4
+ 24880 15c7 91 .byte 0x91
+ 24881 15c8 A0B87F .sleb128 -9184
+ 24882 15cb 35 .uleb128 0x35
+ 24883 15cc CB0D0000 .long 0xdcb
+ 24884 15d0 00000000 .quad .LBB740
+ 24884 00000000
+ 24885 15d8 00000000 .quad .LBE740
+ 24885 00000000
+ 24886 15e0 02 .byte 0x2
+ 24887 15e1 7501 .value 0x175
+ 24888 15e3 32 .uleb128 0x32
+ 24889 15e4 E90D0000 .long 0xde9
+ 24890 15e8 04 .byte 0x4
+ 24891 15e9 91 .byte 0x91
+ 24892 15ea B0B87F .sleb128 -9168
+ 24893 15ed 32 .uleb128 0x32
+ 24894 15ee DD0D0000 .long 0xddd
+ 24895 15f2 04 .byte 0x4
+ 24896 15f3 91 .byte 0x91
+ 24897 15f4 C0B87F .sleb128 -9152
+ 24898 15f7 00 .byte 0x0
+ 24899 15f8 00 .byte 0x0
+ 24900 15f9 00 .byte 0x0
+ 24901 15fa 00 .byte 0x0
+ 24902 15fb 31 .uleb128 0x31
+ 24903 15fc 210F0000 .long 0xf21
+ 24904 1600 00000000 .quad .LBB742
+ 24904 00000000
+ 24905 1608 00000000 .quad .LBE742
+ 24905 00000000
+ 24906 1610 02 .byte 0x2
+ 24907 1611 2006 .value 0x620
+ 24908 1613 9D160000 .long 0x169d
+ 24909 1617 32 .uleb128 0x32
+ 24910 1618 330F0000 .long 0xf33
+ 24911 161c 04 .byte 0x4
+ 24912 161d 91 .byte 0x91
+ 24913 161e D0B87F .sleb128 -9136
+ 24914 1621 33 .uleb128 0x33
+ 24915 1622 00000000 .quad .LBB743
+ 24915 00000000
+ 24916 162a 00000000 .quad .LBE743
+ 24916 00000000
+ 24917 1632 34 .uleb128 0x34
+ 24918 1633 3F0F0000 .long 0xf3f
+ 24919 1637 09 .byte 0x9
+ 24920 1638 03 .byte 0x3
+ 24921 1639 00000000 .quad mask.7943
+ 24921 00000000
+ 24922 1641 35 .uleb128 0x35
+ 24923 1642 A00D0000 .long 0xda0
+ 24924 1646 00000000 .quad .LBB744
+ 24924 00000000
+ 24925 164e 00000000 .quad .LBE744
+
GAS LISTING /tmp/ccjbMjHD.s page 713
+
+
+ 24925 00000000
+ 24926 1656 02 .byte 0x2
+ 24927 1657 FE04 .value 0x4fe
+ 24928 1659 32 .uleb128 0x32
+ 24929 165a BE0D0000 .long 0xdbe
+ 24930 165e 04 .byte 0x4
+ 24931 165f 91 .byte 0x91
+ 24932 1660 E0B87F .sleb128 -9120
+ 24933 1663 32 .uleb128 0x32
+ 24934 1664 B20D0000 .long 0xdb2
+ 24935 1668 04 .byte 0x4
+ 24936 1669 91 .byte 0x91
+ 24937 166a F0B87F .sleb128 -9104
+ 24938 166d 35 .uleb128 0x35
+ 24939 166e CB0D0000 .long 0xdcb
+ 24940 1672 00000000 .quad .LBB746
+ 24940 00000000
+ 24941 167a 00000000 .quad .LBE746
+ 24941 00000000
+ 24942 1682 02 .byte 0x2
+ 24943 1683 7501 .value 0x175
+ 24944 1685 32 .uleb128 0x32
+ 24945 1686 E90D0000 .long 0xde9
+ 24946 168a 04 .byte 0x4
+ 24947 168b 91 .byte 0x91
+ 24948 168c 80B97F .sleb128 -9088
+ 24949 168f 32 .uleb128 0x32
+ 24950 1690 DD0D0000 .long 0xddd
+ 24951 1694 04 .byte 0x4
+ 24952 1695 91 .byte 0x91
+ 24953 1696 90B97F .sleb128 -9072
+ 24954 1699 00 .byte 0x0
+ 24955 169a 00 .byte 0x0
+ 24956 169b 00 .byte 0x0
+ 24957 169c 00 .byte 0x0
+ 24958 169d 35 .uleb128 0x35
+ 24959 169e 210F0000 .long 0xf21
+ 24960 16a2 00000000 .quad .LBB748
+ 24960 00000000
+ 24961 16aa 00000000 .quad .LBE748
+ 24961 00000000
+ 24962 16b2 02 .byte 0x2
+ 24963 16b3 2106 .value 0x621
+ 24964 16b5 32 .uleb128 0x32
+ 24965 16b6 330F0000 .long 0xf33
+ 24966 16ba 04 .byte 0x4
+ 24967 16bb 91 .byte 0x91
+ 24968 16bc A0B97F .sleb128 -9056
+ 24969 16bf 33 .uleb128 0x33
+ 24970 16c0 00000000 .quad .LBB749
+ 24970 00000000
+ 24971 16c8 00000000 .quad .LBE749
+ 24971 00000000
+ 24972 16d0 34 .uleb128 0x34
+ 24973 16d1 3F0F0000 .long 0xf3f
+ 24974 16d5 09 .byte 0x9
+ 24975 16d6 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 714
+
+
+ 24976 16d7 00000000 .quad mask.7943
+ 24976 00000000
+ 24977 16df 35 .uleb128 0x35
+ 24978 16e0 A00D0000 .long 0xda0
+ 24979 16e4 00000000 .quad .LBB750
+ 24979 00000000
+ 24980 16ec 00000000 .quad .LBE750
+ 24980 00000000
+ 24981 16f4 02 .byte 0x2
+ 24982 16f5 FE04 .value 0x4fe
+ 24983 16f7 32 .uleb128 0x32
+ 24984 16f8 BE0D0000 .long 0xdbe
+ 24985 16fc 04 .byte 0x4
+ 24986 16fd 91 .byte 0x91
+ 24987 16fe B0B97F .sleb128 -9040
+ 24988 1701 32 .uleb128 0x32
+ 24989 1702 B20D0000 .long 0xdb2
+ 24990 1706 04 .byte 0x4
+ 24991 1707 91 .byte 0x91
+ 24992 1708 C0B97F .sleb128 -9024
+ 24993 170b 35 .uleb128 0x35
+ 24994 170c CB0D0000 .long 0xdcb
+ 24995 1710 00000000 .quad .LBB752
+ 24995 00000000
+ 24996 1718 00000000 .quad .LBE752
+ 24996 00000000
+ 24997 1720 02 .byte 0x2
+ 24998 1721 7501 .value 0x175
+ 24999 1723 32 .uleb128 0x32
+ 25000 1724 E90D0000 .long 0xde9
+ 25001 1728 04 .byte 0x4
+ 25002 1729 91 .byte 0x91
+ 25003 172a D0B97F .sleb128 -9008
+ 25004 172d 32 .uleb128 0x32
+ 25005 172e DD0D0000 .long 0xddd
+ 25006 1732 04 .byte 0x4
+ 25007 1733 91 .byte 0x91
+ 25008 1734 E0B97F .sleb128 -8992
+ 25009 1737 00 .byte 0x0
+ 25010 1738 00 .byte 0x0
+ 25011 1739 00 .byte 0x0
+ 25012 173a 00 .byte 0x0
+ 25013 173b 00 .byte 0x0
+ 25014 173c 00 .byte 0x0
+ 25015 173d 31 .uleb128 0x31
+ 25016 173e D50B0000 .long 0xbd5
+ 25017 1742 00000000 .quad .LBB754
+ 25017 00000000
+ 25018 174a 00000000 .quad .LBE754
+ 25018 00000000
+ 25019 1752 02 .byte 0x2
+ 25020 1753 D106 .value 0x6d1
+ 25021 1755 501C0000 .long 0x1c50
+ 25022 1759 32 .uleb128 0x32
+ 25023 175a F30B0000 .long 0xbf3
+ 25024 175e 04 .byte 0x4
+ 25025 175f 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 715
+
+
+ 25026 1760 FCB97F .sleb128 -8964
+ 25027 1763 32 .uleb128 0x32
+ 25028 1764 E70B0000 .long 0xbe7
+ 25029 1768 04 .byte 0x4
+ 25030 1769 91 .byte 0x91
+ 25031 176a 80BA7F .sleb128 -8960
+ 25032 176d 33 .uleb128 0x33
+ 25033 176e 00000000 .quad .LBB755
+ 25033 00000000
+ 25034 1776 00000000 .quad .LBE755
+ 25034 00000000
+ 25035 177e 34 .uleb128 0x34
+ 25036 177f FF0B0000 .long 0xbff
+ 25037 1783 04 .byte 0x4
+ 25038 1784 76 .byte 0x76
+ 25039 1785 D0A97F .sleb128 -11056
+ 25040 1788 34 .uleb128 0x34
+ 25041 1789 0B0C0000 .long 0xc0b
+ 25042 178d 04 .byte 0x4
+ 25043 178e 76 .byte 0x76
+ 25044 178f C0A97F .sleb128 -11072
+ 25045 1792 31 .uleb128 0x31
+ 25046 1793 540C0000 .long 0xc54
+ 25047 1797 00000000 .quad .LBB756
+ 25047 00000000
+ 25048 179f 00000000 .quad .LBE756
+ 25048 00000000
+ 25049 17a7 02 .byte 0x2
+ 25050 17a8 9106 .value 0x691
+ 25051 17aa 04180000 .long 0x1804
+ 25052 17ae 32 .uleb128 0x32
+ 25053 17af 7E0C0000 .long 0xc7e
+ 25054 17b3 04 .byte 0x4
+ 25055 17b4 91 .byte 0x91
+ 25056 17b5 98BA7F .sleb128 -8936
+ 25057 17b8 32 .uleb128 0x32
+ 25058 17b9 720C0000 .long 0xc72
+ 25059 17bd 04 .byte 0x4
+ 25060 17be 91 .byte 0x91
+ 25061 17bf 9CBA7F .sleb128 -8932
+ 25062 17c2 32 .uleb128 0x32
+ 25063 17c3 660C0000 .long 0xc66
+ 25064 17c7 04 .byte 0x4
+ 25065 17c8 91 .byte 0x91
+ 25066 17c9 A0BA7F .sleb128 -8928
+ 25067 17cc 35 .uleb128 0x35
+ 25068 17cd 8B0C0000 .long 0xc8b
+ 25069 17d1 00000000 .quad .LBB758
+ 25069 00000000
+ 25070 17d9 00000000 .quad .LBE758
+ 25070 00000000
+ 25071 17e1 02 .byte 0x2
+ 25072 17e2 0702 .value 0x207
+ 25073 17e4 32 .uleb128 0x32
+ 25074 17e5 B40C0000 .long 0xcb4
+ 25075 17e9 04 .byte 0x4
+ 25076 17ea 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 716
+
+
+ 25077 17eb B8BA7F .sleb128 -8904
+ 25078 17ee 32 .uleb128 0x32
+ 25079 17ef A90C0000 .long 0xca9
+ 25080 17f3 04 .byte 0x4
+ 25081 17f4 91 .byte 0x91
+ 25082 17f5 BCBA7F .sleb128 -8900
+ 25083 17f8 32 .uleb128 0x32
+ 25084 17f9 9D0C0000 .long 0xc9d
+ 25085 17fd 04 .byte 0x4
+ 25086 17fe 91 .byte 0x91
+ 25087 17ff C0BA7F .sleb128 -8896
+ 25088 1802 00 .byte 0x0
+ 25089 1803 00 .byte 0x0
+ 25090 1804 31 .uleb128 0x31
+ 25091 1805 C10C0000 .long 0xcc1
+ 25092 1809 00000000 .quad .LBB760
+ 25092 00000000
+ 25093 1811 00000000 .quad .LBE760
+ 25093 00000000
+ 25094 1819 02 .byte 0x2
+ 25095 181a 9206 .value 0x692
+ 25096 181c AB1A0000 .long 0x1aab
+ 25097 1820 32 .uleb128 0x32
+ 25098 1821 D30C0000 .long 0xcd3
+ 25099 1825 04 .byte 0x4
+ 25100 1826 91 .byte 0x91
+ 25101 1827 D0BA7F .sleb128 -8880
+ 25102 182a 35 .uleb128 0x35
+ 25103 182b E00C0000 .long 0xce0
+ 25104 182f 00000000 .quad .LBB762
+ 25104 00000000
+ 25105 1837 00000000 .quad .LBE762
+ 25105 00000000
+ 25106 183f 02 .byte 0x2
+ 25107 1840 7D03 .value 0x37d
+ 25108 1842 32 .uleb128 0x32
+ 25109 1843 FE0C0000 .long 0xcfe
+ 25110 1847 04 .byte 0x4
+ 25111 1848 91 .byte 0x91
+ 25112 1849 E8BA7F .sleb128 -8856
+ 25113 184c 32 .uleb128 0x32
+ 25114 184d F20C0000 .long 0xcf2
+ 25115 1851 04 .byte 0x4
+ 25116 1852 91 .byte 0x91
+ 25117 1853 F0BA7F .sleb128 -8848
+ 25118 1856 33 .uleb128 0x33
+ 25119 1857 00000000 .quad .LBB763
+ 25119 00000000
+ 25120 185f 00000000 .quad .LBE763
+ 25120 00000000
+ 25121 1867 34 .uleb128 0x34
+ 25122 1868 0A0D0000 .long 0xd0a
+ 25123 186c 04 .byte 0x4
+ 25124 186d 91 .byte 0x91
+ 25125 186e C0BB7F .sleb128 -8768
+ 25126 1871 34 .uleb128 0x34
+ 25127 1872 150D0000 .long 0xd15
+
GAS LISTING /tmp/ccjbMjHD.s page 717
+
+
+ 25128 1876 04 .byte 0x4
+ 25129 1877 91 .byte 0x91
+ 25130 1878 B0BB7F .sleb128 -8784
+ 25131 187b 34 .uleb128 0x34
+ 25132 187c 200D0000 .long 0xd20
+ 25133 1880 04 .byte 0x4
+ 25134 1881 91 .byte 0x91
+ 25135 1882 A0BB7F .sleb128 -8800
+ 25136 1885 34 .uleb128 0x34
+ 25137 1886 2C0D0000 .long 0xd2c
+ 25138 188a 04 .byte 0x4
+ 25139 188b 91 .byte 0x91
+ 25140 188c 90BB7F .sleb128 -8816
+ 25141 188f 34 .uleb128 0x34
+ 25142 1890 380D0000 .long 0xd38
+ 25143 1894 04 .byte 0x4
+ 25144 1895 91 .byte 0x91
+ 25145 1896 8CBB7F .sleb128 -8820
+ 25146 1899 31 .uleb128 0x31
+ 25147 189a 4F0D0000 .long 0xd4f
+ 25148 189e 00000000 .quad .LBB764
+ 25148 00000000
+ 25149 18a6 00000000 .quad .LBE764
+ 25149 00000000
+ 25150 18ae 02 .byte 0x2
+ 25151 18af 5603 .value 0x356
+ 25152 18b1 CA180000 .long 0x18ca
+ 25153 18b5 32 .uleb128 0x32
+ 25154 18b6 6A0D0000 .long 0xd6a
+ 25155 18ba 04 .byte 0x4
+ 25156 18bb 91 .byte 0x91
+ 25157 18bc D0BB7F .sleb128 -8752
+ 25158 18bf 32 .uleb128 0x32
+ 25159 18c0 600D0000 .long 0xd60
+ 25160 18c4 04 .byte 0x4
+ 25161 18c5 91 .byte 0x91
+ 25162 18c6 E0BB7F .sleb128 -8736
+ 25163 18c9 00 .byte 0x0
+ 25164 18ca 31 .uleb128 0x31
+ 25165 18cb 750D0000 .long 0xd75
+ 25166 18cf 00000000 .quad .LBB766
+ 25166 00000000
+ 25167 18d7 00000000 .quad .LBE766
+ 25167 00000000
+ 25168 18df 02 .byte 0x2
+ 25169 18e0 5903 .value 0x359
+ 25170 18e2 FB180000 .long 0x18fb
+ 25171 18e6 32 .uleb128 0x32
+ 25172 18e7 930D0000 .long 0xd93
+ 25173 18eb 04 .byte 0x4
+ 25174 18ec 91 .byte 0x91
+ 25175 18ed FCBB7F .sleb128 -8708
+ 25176 18f0 32 .uleb128 0x32
+ 25177 18f1 870D0000 .long 0xd87
+ 25178 18f5 04 .byte 0x4
+ 25179 18f6 91 .byte 0x91
+ 25180 18f7 80BC7F .sleb128 -8704
+
GAS LISTING /tmp/ccjbMjHD.s page 718
+
+
+ 25181 18fa 00 .byte 0x0
+ 25182 18fb 31 .uleb128 0x31
+ 25183 18fc 4F0D0000 .long 0xd4f
+ 25184 1900 00000000 .quad .LBB768
+ 25184 00000000
+ 25185 1908 00000000 .quad .LBE768
+ 25185 00000000
+ 25186 1910 02 .byte 0x2
+ 25187 1911 5B03 .value 0x35b
+ 25188 1913 2C190000 .long 0x192c
+ 25189 1917 32 .uleb128 0x32
+ 25190 1918 6A0D0000 .long 0xd6a
+ 25191 191c 04 .byte 0x4
+ 25192 191d 91 .byte 0x91
+ 25193 191e 90BC7F .sleb128 -8688
+ 25194 1921 32 .uleb128 0x32
+ 25195 1922 600D0000 .long 0xd60
+ 25196 1926 04 .byte 0x4
+ 25197 1927 91 .byte 0x91
+ 25198 1928 A0BC7F .sleb128 -8672
+ 25199 192b 00 .byte 0x0
+ 25200 192c 31 .uleb128 0x31
+ 25201 192d A00D0000 .long 0xda0
+ 25202 1931 00000000 .quad .LBB770
+ 25202 00000000
+ 25203 1939 00000000 .quad .LBE770
+ 25203 00000000
+ 25204 1941 02 .byte 0x2
+ 25205 1942 6403 .value 0x364
+ 25206 1944 8A190000 .long 0x198a
+ 25207 1948 32 .uleb128 0x32
+ 25208 1949 BE0D0000 .long 0xdbe
+ 25209 194d 04 .byte 0x4
+ 25210 194e 91 .byte 0x91
+ 25211 194f B0BC7F .sleb128 -8656
+ 25212 1952 32 .uleb128 0x32
+ 25213 1953 B20D0000 .long 0xdb2
+ 25214 1957 04 .byte 0x4
+ 25215 1958 91 .byte 0x91
+ 25216 1959 C0BC7F .sleb128 -8640
+ 25217 195c 35 .uleb128 0x35
+ 25218 195d CB0D0000 .long 0xdcb
+ 25219 1961 00000000 .quad .LBB772
+ 25219 00000000
+ 25220 1969 00000000 .quad .LBE772
+ 25220 00000000
+ 25221 1971 02 .byte 0x2
+ 25222 1972 7501 .value 0x175
+ 25223 1974 32 .uleb128 0x32
+ 25224 1975 E90D0000 .long 0xde9
+ 25225 1979 04 .byte 0x4
+ 25226 197a 91 .byte 0x91
+ 25227 197b D0BC7F .sleb128 -8624
+ 25228 197e 32 .uleb128 0x32
+ 25229 197f DD0D0000 .long 0xddd
+ 25230 1983 04 .byte 0x4
+ 25231 1984 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 719
+
+
+ 25232 1985 E0BC7F .sleb128 -8608
+ 25233 1988 00 .byte 0x0
+ 25234 1989 00 .byte 0x0
+ 25235 198a 31 .uleb128 0x31
+ 25236 198b FB0D0000 .long 0xdfb
+ 25237 198f 00000000 .quad .LBB774
+ 25237 00000000
+ 25238 1997 00000000 .quad .LBE774
+ 25238 00000000
+ 25239 199f 02 .byte 0x2
+ 25240 19a0 6603 .value 0x366
+ 25241 19a2 BB190000 .long 0x19bb
+ 25242 19a6 32 .uleb128 0x32
+ 25243 19a7 160E0000 .long 0xe16
+ 25244 19ab 04 .byte 0x4
+ 25245 19ac 91 .byte 0x91
+ 25246 19ad F0BC7F .sleb128 -8592
+ 25247 19b0 32 .uleb128 0x32
+ 25248 19b1 0C0E0000 .long 0xe0c
+ 25249 19b5 04 .byte 0x4
+ 25250 19b6 91 .byte 0x91
+ 25251 19b7 80BD7F .sleb128 -8576
+ 25252 19ba 00 .byte 0x0
+ 25253 19bb 31 .uleb128 0x31
+ 25254 19bc A00D0000 .long 0xda0
+ 25255 19c0 00000000 .quad .LBB776
+ 25255 00000000
+ 25256 19c8 00000000 .quad .LBE776
+ 25256 00000000
+ 25257 19d0 02 .byte 0x2
+ 25258 19d1 6803 .value 0x368
+ 25259 19d3 191A0000 .long 0x1a19
+ 25260 19d7 32 .uleb128 0x32
+ 25261 19d8 BE0D0000 .long 0xdbe
+ 25262 19dc 04 .byte 0x4
+ 25263 19dd 91 .byte 0x91
+ 25264 19de 90BD7F .sleb128 -8560
+ 25265 19e1 32 .uleb128 0x32
+ 25266 19e2 B20D0000 .long 0xdb2
+ 25267 19e6 04 .byte 0x4
+ 25268 19e7 91 .byte 0x91
+ 25269 19e8 A0BD7F .sleb128 -8544
+ 25270 19eb 35 .uleb128 0x35
+ 25271 19ec CB0D0000 .long 0xdcb
+ 25272 19f0 00000000 .quad .LBB778
+ 25272 00000000
+ 25273 19f8 00000000 .quad .LBE778
+ 25273 00000000
+ 25274 1a00 02 .byte 0x2
+ 25275 1a01 7501 .value 0x175
+ 25276 1a03 32 .uleb128 0x32
+ 25277 1a04 E90D0000 .long 0xde9
+ 25278 1a08 04 .byte 0x4
+ 25279 1a09 91 .byte 0x91
+ 25280 1a0a B0BD7F .sleb128 -8528
+ 25281 1a0d 32 .uleb128 0x32
+ 25282 1a0e DD0D0000 .long 0xddd
+
GAS LISTING /tmp/ccjbMjHD.s page 720
+
+
+ 25283 1a12 04 .byte 0x4
+ 25284 1a13 91 .byte 0x91
+ 25285 1a14 C0BD7F .sleb128 -8512
+ 25286 1a17 00 .byte 0x0
+ 25287 1a18 00 .byte 0x0
+ 25288 1a19 31 .uleb128 0x31
+ 25289 1a1a FB0D0000 .long 0xdfb
+ 25290 1a1e 00000000 .quad .LBB780
+ 25290 00000000
+ 25291 1a26 00000000 .quad .LBE780
+ 25291 00000000
+ 25292 1a2e 02 .byte 0x2
+ 25293 1a2f 6A03 .value 0x36a
+ 25294 1a31 4A1A0000 .long 0x1a4a
+ 25295 1a35 32 .uleb128 0x32
+ 25296 1a36 160E0000 .long 0xe16
+ 25297 1a3a 04 .byte 0x4
+ 25298 1a3b 91 .byte 0x91
+ 25299 1a3c D0BD7F .sleb128 -8496
+ 25300 1a3f 32 .uleb128 0x32
+ 25301 1a40 0C0E0000 .long 0xe0c
+ 25302 1a44 04 .byte 0x4
+ 25303 1a45 91 .byte 0x91
+ 25304 1a46 E0BD7F .sleb128 -8480
+ 25305 1a49 00 .byte 0x0
+ 25306 1a4a 31 .uleb128 0x31
+ 25307 1a4b 210E0000 .long 0xe21
+ 25308 1a4f 00000000 .quad .LBB782
+ 25308 00000000
+ 25309 1a57 00000000 .quad .LBE782
+ 25309 00000000
+ 25310 1a5f 02 .byte 0x2
+ 25311 1a60 6C03 .value 0x36c
+ 25312 1a62 7B1A0000 .long 0x1a7b
+ 25313 1a66 32 .uleb128 0x32
+ 25314 1a67 3E0E0000 .long 0xe3e
+ 25315 1a6b 04 .byte 0x4
+ 25316 1a6c 91 .byte 0x91
+ 25317 1a6d F0BD7F .sleb128 -8464
+ 25318 1a70 32 .uleb128 0x32
+ 25319 1a71 330E0000 .long 0xe33
+ 25320 1a75 04 .byte 0x4
+ 25321 1a76 91 .byte 0x91
+ 25322 1a77 80BE7F .sleb128 -8448
+ 25323 1a7a 00 .byte 0x0
+ 25324 1a7b 35 .uleb128 0x35
+ 25325 1a7c 4F0D0000 .long 0xd4f
+ 25326 1a80 00000000 .quad .LBB784
+ 25326 00000000
+ 25327 1a88 00000000 .quad .LBE784
+ 25327 00000000
+ 25328 1a90 02 .byte 0x2
+ 25329 1a91 6E03 .value 0x36e
+ 25330 1a93 32 .uleb128 0x32
+ 25331 1a94 6A0D0000 .long 0xd6a
+ 25332 1a98 04 .byte 0x4
+ 25333 1a99 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 721
+
+
+ 25334 1a9a 90BE7F .sleb128 -8432
+ 25335 1a9d 32 .uleb128 0x32
+ 25336 1a9e 600D0000 .long 0xd60
+ 25337 1aa2 04 .byte 0x4
+ 25338 1aa3 91 .byte 0x91
+ 25339 1aa4 A0BE7F .sleb128 -8416
+ 25340 1aa7 00 .byte 0x0
+ 25341 1aa8 00 .byte 0x0
+ 25342 1aa9 00 .byte 0x0
+ 25343 1aaa 00 .byte 0x0
+ 25344 1aab 36 .uleb128 0x36
+ 25345 1aac 00000000 .quad .LBB786
+ 25345 00000000
+ 25346 1ab4 00000000 .quad .LBE786
+ 25346 00000000
+ 25347 1abc CB1A0000 .long 0x1acb
+ 25348 1ac0 34 .uleb128 0x34
+ 25349 1ac1 1C0C0000 .long 0xc1c
+ 25350 1ac5 04 .byte 0x4
+ 25351 1ac6 91 .byte 0x91
+ 25352 1ac7 E0AD7F .sleb128 -10528
+ 25353 1aca 00 .byte 0x0
+ 25354 1acb 31 .uleb128 0x31
+ 25355 1acc 4A0E0000 .long 0xe4a
+ 25356 1ad0 00000000 .quad .LBB787
+ 25356 00000000
+ 25357 1ad8 00000000 .quad .LBE787
+ 25357 00000000
+ 25358 1ae0 02 .byte 0x2
+ 25359 1ae1 9406 .value 0x694
+ 25360 1ae3 6D1B0000 .long 0x1b6d
+ 25361 1ae7 32 .uleb128 0x32
+ 25362 1ae8 5C0E0000 .long 0xe5c
+ 25363 1aec 04 .byte 0x4
+ 25364 1aed 91 .byte 0x91
+ 25365 1aee B0BE7F .sleb128 -8400
+ 25366 1af1 33 .uleb128 0x33
+ 25367 1af2 00000000 .quad .LBB788
+ 25367 00000000
+ 25368 1afa 00000000 .quad .LBE788
+ 25368 00000000
+ 25369 1b02 34 .uleb128 0x34
+ 25370 1b03 680E0000 .long 0xe68
+ 25371 1b07 09 .byte 0x9
+ 25372 1b08 03 .byte 0x3
+ 25373 1b09 00000000 .quad ShiftRowTable.7385
+ 25373 00000000
+ 25374 1b11 35 .uleb128 0x35
+ 25375 1b12 A00D0000 .long 0xda0
+ 25376 1b16 00000000 .quad .LBB789
+ 25376 00000000
+ 25377 1b1e 00000000 .quad .LBE789
+ 25377 00000000
+ 25378 1b26 02 .byte 0x2
+ 25379 1b27 9B02 .value 0x29b
+ 25380 1b29 32 .uleb128 0x32
+ 25381 1b2a BE0D0000 .long 0xdbe
+
GAS LISTING /tmp/ccjbMjHD.s page 722
+
+
+ 25382 1b2e 04 .byte 0x4
+ 25383 1b2f 91 .byte 0x91
+ 25384 1b30 C0BE7F .sleb128 -8384
+ 25385 1b33 32 .uleb128 0x32
+ 25386 1b34 B20D0000 .long 0xdb2
+ 25387 1b38 04 .byte 0x4
+ 25388 1b39 91 .byte 0x91
+ 25389 1b3a D0BE7F .sleb128 -8368
+ 25390 1b3d 35 .uleb128 0x35
+ 25391 1b3e CB0D0000 .long 0xdcb
+ 25392 1b42 00000000 .quad .LBB791
+ 25392 00000000
+ 25393 1b4a 00000000 .quad .LBE791
+ 25393 00000000
+ 25394 1b52 02 .byte 0x2
+ 25395 1b53 7501 .value 0x175
+ 25396 1b55 32 .uleb128 0x32
+ 25397 1b56 E90D0000 .long 0xde9
+ 25398 1b5a 04 .byte 0x4
+ 25399 1b5b 91 .byte 0x91
+ 25400 1b5c E0BE7F .sleb128 -8352
+ 25401 1b5f 32 .uleb128 0x32
+ 25402 1b60 DD0D0000 .long 0xddd
+ 25403 1b64 04 .byte 0x4
+ 25404 1b65 91 .byte 0x91
+ 25405 1b66 F0BE7F .sleb128 -8336
+ 25406 1b69 00 .byte 0x0
+ 25407 1b6a 00 .byte 0x0
+ 25408 1b6b 00 .byte 0x0
+ 25409 1b6c 00 .byte 0x0
+ 25410 1b6d 36 .uleb128 0x36
+ 25411 1b6e 00000000 .quad .LBB793
+ 25411 00000000
+ 25412 1b76 00000000 .quad .LBE793
+ 25412 00000000
+ 25413 1b7e 8D1B0000 .long 0x1b8d
+ 25414 1b82 34 .uleb128 0x34
+ 25415 1b83 2C0C0000 .long 0xc2c
+ 25416 1b87 04 .byte 0x4
+ 25417 1b88 91 .byte 0x91
+ 25418 1b89 D0AD7F .sleb128 -10544
+ 25419 1b8c 00 .byte 0x0
+ 25420 1b8d 31 .uleb128 0x31
+ 25421 1b8e 860E0000 .long 0xe86
+ 25422 1b92 00000000 .quad .LBB794
+ 25422 00000000
+ 25423 1b9a 00000000 .quad .LBE794
+ 25423 00000000
+ 25424 1ba2 02 .byte 0x2
+ 25425 1ba3 9606 .value 0x696
+ 25426 1ba5 BE1B0000 .long 0x1bbe
+ 25427 1ba9 32 .uleb128 0x32
+ 25428 1baa A10E0000 .long 0xea1
+ 25429 1bae 04 .byte 0x4
+ 25430 1baf 91 .byte 0x91
+ 25431 1bb0 80BF7F .sleb128 -8320
+ 25432 1bb3 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 723
+
+
+ 25433 1bb4 970E0000 .long 0xe97
+ 25434 1bb8 04 .byte 0x4
+ 25435 1bb9 91 .byte 0x91
+ 25436 1bba 90BF7F .sleb128 -8304
+ 25437 1bbd 00 .byte 0x0
+ 25438 1bbe 36 .uleb128 0x36
+ 25439 1bbf 00000000 .quad .LBB796
+ 25439 00000000
+ 25440 1bc7 00000000 .quad .LBE796
+ 25440 00000000
+ 25441 1bcf DE1B0000 .long 0x1bde
+ 25442 1bd3 34 .uleb128 0x34
+ 25443 1bd4 3C0C0000 .long 0xc3c
+ 25444 1bd8 04 .byte 0x4
+ 25445 1bd9 91 .byte 0x91
+ 25446 1bda C0AD7F .sleb128 -10560
+ 25447 1bdd 00 .byte 0x0
+ 25448 1bde 31 .uleb128 0x31
+ 25449 1bdf AC0E0000 .long 0xeac
+ 25450 1be3 00000000 .quad .LBB797
+ 25450 00000000
+ 25451 1beb 00000000 .quad .LBE797
+ 25451 00000000
+ 25452 1bf3 02 .byte 0x2
+ 25453 1bf4 9806 .value 0x698
+ 25454 1bf6 321C0000 .long 0x1c32
+ 25455 1bfa 32 .uleb128 0x32
+ 25456 1bfb BE0E0000 .long 0xebe
+ 25457 1bff 04 .byte 0x4
+ 25458 1c00 91 .byte 0x91
+ 25459 1c01 A0BF7F .sleb128 -8288
+ 25460 1c04 35 .uleb128 0x35
+ 25461 1c05 CB0E0000 .long 0xecb
+ 25462 1c09 00000000 .quad .LBB799
+ 25462 00000000
+ 25463 1c11 00000000 .quad .LBE799
+ 25463 00000000
+ 25464 1c19 02 .byte 0x2
+ 25465 1c1a 4905 .value 0x549
+ 25466 1c1c 32 .uleb128 0x32
+ 25467 1c1d E90E0000 .long 0xee9
+ 25468 1c21 04 .byte 0x4
+ 25469 1c22 91 .byte 0x91
+ 25470 1c23 BCBF7F .sleb128 -8260
+ 25471 1c26 32 .uleb128 0x32
+ 25472 1c27 DD0E0000 .long 0xedd
+ 25473 1c2b 04 .byte 0x4
+ 25474 1c2c 91 .byte 0x91
+ 25475 1c2d C0BF7F .sleb128 -8256
+ 25476 1c30 00 .byte 0x0
+ 25477 1c31 00 .byte 0x0
+ 25478 1c32 33 .uleb128 0x33
+ 25479 1c33 00000000 .quad .LBB801
+ 25479 00000000
+ 25480 1c3b 00000000 .quad .LBE801
+ 25480 00000000
+ 25481 1c43 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 724
+
+
+ 25482 1c44 480C0000 .long 0xc48
+ 25483 1c48 04 .byte 0x4
+ 25484 1c49 91 .byte 0x91
+ 25485 1c4a B0AD7F .sleb128 -10576
+ 25486 1c4d 00 .byte 0x0
+ 25487 1c4e 00 .byte 0x0
+ 25488 1c4f 00 .byte 0x0
+ 25489 1c50 31 .uleb128 0x31
+ 25490 1c51 F60E0000 .long 0xef6
+ 25491 1c55 00000000 .quad .LBB802
+ 25491 00000000
+ 25492 1c5d 00000000 .quad .LBE802
+ 25492 00000000
+ 25493 1c65 02 .byte 0x2
+ 25494 1c66 D106 .value 0x6d1
+ 25495 1c68 681E0000 .long 0x1e68
+ 25496 1c6c 32 .uleb128 0x32
+ 25497 1c6d 080F0000 .long 0xf08
+ 25498 1c71 04 .byte 0x4
+ 25499 1c72 91 .byte 0x91
+ 25500 1c73 D0BF7F .sleb128 -8240
+ 25501 1c76 33 .uleb128 0x33
+ 25502 1c77 00000000 .quad .LBB803
+ 25502 00000000
+ 25503 1c7f 00000000 .quad .LBE803
+ 25503 00000000
+ 25504 1c87 34 .uleb128 0x34
+ 25505 1c88 140F0000 .long 0xf14
+ 25506 1c8c 04 .byte 0x4
+ 25507 1c8d 76 .byte 0x76
+ 25508 1c8e E0A97F .sleb128 -11040
+ 25509 1c91 31 .uleb128 0x31
+ 25510 1c92 210F0000 .long 0xf21
+ 25511 1c96 00000000 .quad .LBB804
+ 25511 00000000
+ 25512 1c9e 00000000 .quad .LBE804
+ 25512 00000000
+ 25513 1ca6 02 .byte 0x2
+ 25514 1ca7 1F06 .value 0x61f
+ 25515 1ca9 301D0000 .long 0x1d30
+ 25516 1cad 32 .uleb128 0x32
+ 25517 1cae 330F0000 .long 0xf33
+ 25518 1cb2 04 .byte 0x4
+ 25519 1cb3 91 .byte 0x91
+ 25520 1cb4 E0BF7F .sleb128 -8224
+ 25521 1cb7 33 .uleb128 0x33
+ 25522 1cb8 00000000 .quad .LBB805
+ 25522 00000000
+ 25523 1cc0 00000000 .quad .LBE805
+ 25523 00000000
+ 25524 1cc8 34 .uleb128 0x34
+ 25525 1cc9 3F0F0000 .long 0xf3f
+ 25526 1ccd 09 .byte 0x9
+ 25527 1cce 03 .byte 0x3
+ 25528 1ccf 00000000 .quad mask.7943
+ 25528 00000000
+ 25529 1cd7 35 .uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s page 725
+
+
+ 25530 1cd8 A00D0000 .long 0xda0
+ 25531 1cdc 00000000 .quad .LBB806
+ 25531 00000000
+ 25532 1ce4 00000000 .quad .LBE806
+ 25532 00000000
+ 25533 1cec 02 .byte 0x2
+ 25534 1ced FE04 .value 0x4fe
+ 25535 1cef 32 .uleb128 0x32
+ 25536 1cf0 BE0D0000 .long 0xdbe
+ 25537 1cf4 04 .byte 0x4
+ 25538 1cf5 91 .byte 0x91
+ 25539 1cf6 F0BF7F .sleb128 -8208
+ 25540 1cf9 32 .uleb128 0x32
+ 25541 1cfa B20D0000 .long 0xdb2
+ 25542 1cfe 03 .byte 0x3
+ 25543 1cff 91 .byte 0x91
+ 25544 1d00 8040 .sleb128 -8192
+ 25545 1d02 35 .uleb128 0x35
+ 25546 1d03 CB0D0000 .long 0xdcb
+ 25547 1d07 00000000 .quad .LBB808
+ 25547 00000000
+ 25548 1d0f 00000000 .quad .LBE808
+ 25548 00000000
+ 25549 1d17 02 .byte 0x2
+ 25550 1d18 7501 .value 0x175
+ 25551 1d1a 32 .uleb128 0x32
+ 25552 1d1b E90D0000 .long 0xde9
+ 25553 1d1f 03 .byte 0x3
+ 25554 1d20 91 .byte 0x91
+ 25555 1d21 9040 .sleb128 -8176
+ 25556 1d23 32 .uleb128 0x32
+ 25557 1d24 DD0D0000 .long 0xddd
+ 25558 1d28 03 .byte 0x3
+ 25559 1d29 91 .byte 0x91
+ 25560 1d2a A040 .sleb128 -8160
+ 25561 1d2c 00 .byte 0x0
+ 25562 1d2d 00 .byte 0x0
+ 25563 1d2e 00 .byte 0x0
+ 25564 1d2f 00 .byte 0x0
+ 25565 1d30 31 .uleb128 0x31
+ 25566 1d31 210F0000 .long 0xf21
+ 25567 1d35 00000000 .quad .LBB810
+ 25567 00000000
+ 25568 1d3d 00000000 .quad .LBE810
+ 25568 00000000
+ 25569 1d45 02 .byte 0x2
+ 25570 1d46 2006 .value 0x620
+ 25571 1d48 CD1D0000 .long 0x1dcd
+ 25572 1d4c 32 .uleb128 0x32
+ 25573 1d4d 330F0000 .long 0xf33
+ 25574 1d51 03 .byte 0x3
+ 25575 1d52 91 .byte 0x91
+ 25576 1d53 B040 .sleb128 -8144
+ 25577 1d55 33 .uleb128 0x33
+ 25578 1d56 00000000 .quad .LBB811
+ 25578 00000000
+ 25579 1d5e 00000000 .quad .LBE811
+
GAS LISTING /tmp/ccjbMjHD.s page 726
+
+
+ 25579 00000000
+ 25580 1d66 34 .uleb128 0x34
+ 25581 1d67 3F0F0000 .long 0xf3f
+ 25582 1d6b 09 .byte 0x9
+ 25583 1d6c 03 .byte 0x3
+ 25584 1d6d 00000000 .quad mask.7943
+ 25584 00000000
+ 25585 1d75 35 .uleb128 0x35
+ 25586 1d76 A00D0000 .long 0xda0
+ 25587 1d7a 00000000 .quad .LBB812
+ 25587 00000000
+ 25588 1d82 00000000 .quad .LBE812
+ 25588 00000000
+ 25589 1d8a 02 .byte 0x2
+ 25590 1d8b FE04 .value 0x4fe
+ 25591 1d8d 32 .uleb128 0x32
+ 25592 1d8e BE0D0000 .long 0xdbe
+ 25593 1d92 03 .byte 0x3
+ 25594 1d93 91 .byte 0x91
+ 25595 1d94 C040 .sleb128 -8128
+ 25596 1d96 32 .uleb128 0x32
+ 25597 1d97 B20D0000 .long 0xdb2
+ 25598 1d9b 03 .byte 0x3
+ 25599 1d9c 91 .byte 0x91
+ 25600 1d9d D040 .sleb128 -8112
+ 25601 1d9f 35 .uleb128 0x35
+ 25602 1da0 CB0D0000 .long 0xdcb
+ 25603 1da4 00000000 .quad .LBB814
+ 25603 00000000
+ 25604 1dac 00000000 .quad .LBE814
+ 25604 00000000
+ 25605 1db4 02 .byte 0x2
+ 25606 1db5 7501 .value 0x175
+ 25607 1db7 32 .uleb128 0x32
+ 25608 1db8 E90D0000 .long 0xde9
+ 25609 1dbc 03 .byte 0x3
+ 25610 1dbd 91 .byte 0x91
+ 25611 1dbe E040 .sleb128 -8096
+ 25612 1dc0 32 .uleb128 0x32
+ 25613 1dc1 DD0D0000 .long 0xddd
+ 25614 1dc5 03 .byte 0x3
+ 25615 1dc6 91 .byte 0x91
+ 25616 1dc7 F040 .sleb128 -8080
+ 25617 1dc9 00 .byte 0x0
+ 25618 1dca 00 .byte 0x0
+ 25619 1dcb 00 .byte 0x0
+ 25620 1dcc 00 .byte 0x0
+ 25621 1dcd 35 .uleb128 0x35
+ 25622 1dce 210F0000 .long 0xf21
+ 25623 1dd2 00000000 .quad .LBB816
+ 25623 00000000
+ 25624 1dda 00000000 .quad .LBE816
+ 25624 00000000
+ 25625 1de2 02 .byte 0x2
+ 25626 1de3 2106 .value 0x621
+ 25627 1de5 32 .uleb128 0x32
+ 25628 1de6 330F0000 .long 0xf33
+
GAS LISTING /tmp/ccjbMjHD.s page 727
+
+
+ 25629 1dea 03 .byte 0x3
+ 25630 1deb 91 .byte 0x91
+ 25631 1dec 8041 .sleb128 -8064
+ 25632 1dee 33 .uleb128 0x33
+ 25633 1def 00000000 .quad .LBB817
+ 25633 00000000
+ 25634 1df7 00000000 .quad .LBE817
+ 25634 00000000
+ 25635 1dff 34 .uleb128 0x34
+ 25636 1e00 3F0F0000 .long 0xf3f
+ 25637 1e04 09 .byte 0x9
+ 25638 1e05 03 .byte 0x3
+ 25639 1e06 00000000 .quad mask.7943
+ 25639 00000000
+ 25640 1e0e 35 .uleb128 0x35
+ 25641 1e0f A00D0000 .long 0xda0
+ 25642 1e13 00000000 .quad .LBB818
+ 25642 00000000
+ 25643 1e1b 00000000 .quad .LBE818
+ 25643 00000000
+ 25644 1e23 02 .byte 0x2
+ 25645 1e24 FE04 .value 0x4fe
+ 25646 1e26 32 .uleb128 0x32
+ 25647 1e27 BE0D0000 .long 0xdbe
+ 25648 1e2b 03 .byte 0x3
+ 25649 1e2c 91 .byte 0x91
+ 25650 1e2d 9041 .sleb128 -8048
+ 25651 1e2f 32 .uleb128 0x32
+ 25652 1e30 B20D0000 .long 0xdb2
+ 25653 1e34 03 .byte 0x3
+ 25654 1e35 91 .byte 0x91
+ 25655 1e36 A041 .sleb128 -8032
+ 25656 1e38 35 .uleb128 0x35
+ 25657 1e39 CB0D0000 .long 0xdcb
+ 25658 1e3d 00000000 .quad .LBB820
+ 25658 00000000
+ 25659 1e45 00000000 .quad .LBE820
+ 25659 00000000
+ 25660 1e4d 02 .byte 0x2
+ 25661 1e4e 7501 .value 0x175
+ 25662 1e50 32 .uleb128 0x32
+ 25663 1e51 E90D0000 .long 0xde9
+ 25664 1e55 03 .byte 0x3
+ 25665 1e56 91 .byte 0x91
+ 25666 1e57 B041 .sleb128 -8016
+ 25667 1e59 32 .uleb128 0x32
+ 25668 1e5a DD0D0000 .long 0xddd
+ 25669 1e5e 03 .byte 0x3
+ 25670 1e5f 91 .byte 0x91
+ 25671 1e60 C041 .sleb128 -8000
+ 25672 1e62 00 .byte 0x0
+ 25673 1e63 00 .byte 0x0
+ 25674 1e64 00 .byte 0x0
+ 25675 1e65 00 .byte 0x0
+ 25676 1e66 00 .byte 0x0
+ 25677 1e67 00 .byte 0x0
+ 25678 1e68 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 728
+
+
+ 25679 1e69 D50B0000 .long 0xbd5
+ 25680 1e6d 00000000 .quad .LBB822
+ 25680 00000000
+ 25681 1e75 00000000 .quad .LBE822
+ 25681 00000000
+ 25682 1e7d 02 .byte 0x2
+ 25683 1e7e D206 .value 0x6d2
+ 25684 1e80 4B230000 .long 0x234b
+ 25685 1e84 32 .uleb128 0x32
+ 25686 1e85 F30B0000 .long 0xbf3
+ 25687 1e89 03 .byte 0x3
+ 25688 1e8a 91 .byte 0x91
+ 25689 1e8b DC41 .sleb128 -7972
+ 25690 1e8d 32 .uleb128 0x32
+ 25691 1e8e E70B0000 .long 0xbe7
+ 25692 1e92 03 .byte 0x3
+ 25693 1e93 91 .byte 0x91
+ 25694 1e94 E041 .sleb128 -7968
+ 25695 1e96 33 .uleb128 0x33
+ 25696 1e97 00000000 .quad .LBB823
+ 25696 00000000
+ 25697 1e9f 00000000 .quad .LBE823
+ 25697 00000000
+ 25698 1ea7 34 .uleb128 0x34
+ 25699 1ea8 FF0B0000 .long 0xbff
+ 25700 1eac 04 .byte 0x4
+ 25701 1ead 76 .byte 0x76
+ 25702 1eae 80AA7F .sleb128 -11008
+ 25703 1eb1 34 .uleb128 0x34
+ 25704 1eb2 0B0C0000 .long 0xc0b
+ 25705 1eb6 04 .byte 0x4
+ 25706 1eb7 76 .byte 0x76
+ 25707 1eb8 F0A97F .sleb128 -11024
+ 25708 1ebb 31 .uleb128 0x31
+ 25709 1ebc 540C0000 .long 0xc54
+ 25710 1ec0 00000000 .quad .LBB824
+ 25710 00000000
+ 25711 1ec8 00000000 .quad .LBE824
+ 25711 00000000
+ 25712 1ed0 02 .byte 0x2
+ 25713 1ed1 9106 .value 0x691
+ 25714 1ed3 271F0000 .long 0x1f27
+ 25715 1ed7 32 .uleb128 0x32
+ 25716 1ed8 7E0C0000 .long 0xc7e
+ 25717 1edc 03 .byte 0x3
+ 25718 1edd 91 .byte 0x91
+ 25719 1ede F841 .sleb128 -7944
+ 25720 1ee0 32 .uleb128 0x32
+ 25721 1ee1 720C0000 .long 0xc72
+ 25722 1ee5 03 .byte 0x3
+ 25723 1ee6 91 .byte 0x91
+ 25724 1ee7 FC41 .sleb128 -7940
+ 25725 1ee9 32 .uleb128 0x32
+ 25726 1eea 660C0000 .long 0xc66
+ 25727 1eee 03 .byte 0x3
+ 25728 1eef 91 .byte 0x91
+ 25729 1ef0 8042 .sleb128 -7936
+
GAS LISTING /tmp/ccjbMjHD.s page 729
+
+
+ 25730 1ef2 35 .uleb128 0x35
+ 25731 1ef3 8B0C0000 .long 0xc8b
+ 25732 1ef7 00000000 .quad .LBB826
+ 25732 00000000
+ 25733 1eff 00000000 .quad .LBE826
+ 25733 00000000
+ 25734 1f07 02 .byte 0x2
+ 25735 1f08 0702 .value 0x207
+ 25736 1f0a 32 .uleb128 0x32
+ 25737 1f0b B40C0000 .long 0xcb4
+ 25738 1f0f 03 .byte 0x3
+ 25739 1f10 91 .byte 0x91
+ 25740 1f11 9842 .sleb128 -7912
+ 25741 1f13 32 .uleb128 0x32
+ 25742 1f14 A90C0000 .long 0xca9
+ 25743 1f18 03 .byte 0x3
+ 25744 1f19 91 .byte 0x91
+ 25745 1f1a 9C42 .sleb128 -7908
+ 25746 1f1c 32 .uleb128 0x32
+ 25747 1f1d 9D0C0000 .long 0xc9d
+ 25748 1f21 03 .byte 0x3
+ 25749 1f22 91 .byte 0x91
+ 25750 1f23 A042 .sleb128 -7904
+ 25751 1f25 00 .byte 0x0
+ 25752 1f26 00 .byte 0x0
+ 25753 1f27 31 .uleb128 0x31
+ 25754 1f28 C10C0000 .long 0xcc1
+ 25755 1f2c 00000000 .quad .LBB828
+ 25755 00000000
+ 25756 1f34 00000000 .quad .LBE828
+ 25756 00000000
+ 25757 1f3c 02 .byte 0x2
+ 25758 1f3d 9206 .value 0x692
+ 25759 1f3f B0210000 .long 0x21b0
+ 25760 1f43 32 .uleb128 0x32
+ 25761 1f44 D30C0000 .long 0xcd3
+ 25762 1f48 03 .byte 0x3
+ 25763 1f49 91 .byte 0x91
+ 25764 1f4a B042 .sleb128 -7888
+ 25765 1f4c 35 .uleb128 0x35
+ 25766 1f4d E00C0000 .long 0xce0
+ 25767 1f51 00000000 .quad .LBB830
+ 25767 00000000
+ 25768 1f59 00000000 .quad .LBE830
+ 25768 00000000
+ 25769 1f61 02 .byte 0x2
+ 25770 1f62 7D03 .value 0x37d
+ 25771 1f64 32 .uleb128 0x32
+ 25772 1f65 FE0C0000 .long 0xcfe
+ 25773 1f69 03 .byte 0x3
+ 25774 1f6a 91 .byte 0x91
+ 25775 1f6b C842 .sleb128 -7864
+ 25776 1f6d 32 .uleb128 0x32
+ 25777 1f6e F20C0000 .long 0xcf2
+ 25778 1f72 03 .byte 0x3
+ 25779 1f73 91 .byte 0x91
+ 25780 1f74 D042 .sleb128 -7856
+
GAS LISTING /tmp/ccjbMjHD.s page 730
+
+
+ 25781 1f76 33 .uleb128 0x33
+ 25782 1f77 00000000 .quad .LBB831
+ 25782 00000000
+ 25783 1f7f 00000000 .quad .LBE831
+ 25783 00000000
+ 25784 1f87 34 .uleb128 0x34
+ 25785 1f88 0A0D0000 .long 0xd0a
+ 25786 1f8c 03 .byte 0x3
+ 25787 1f8d 91 .byte 0x91
+ 25788 1f8e A043 .sleb128 -7776
+ 25789 1f90 34 .uleb128 0x34
+ 25790 1f91 150D0000 .long 0xd15
+ 25791 1f95 03 .byte 0x3
+ 25792 1f96 91 .byte 0x91
+ 25793 1f97 9043 .sleb128 -7792
+ 25794 1f99 34 .uleb128 0x34
+ 25795 1f9a 200D0000 .long 0xd20
+ 25796 1f9e 03 .byte 0x3
+ 25797 1f9f 91 .byte 0x91
+ 25798 1fa0 8043 .sleb128 -7808
+ 25799 1fa2 34 .uleb128 0x34
+ 25800 1fa3 2C0D0000 .long 0xd2c
+ 25801 1fa7 03 .byte 0x3
+ 25802 1fa8 91 .byte 0x91
+ 25803 1fa9 F042 .sleb128 -7824
+ 25804 1fab 34 .uleb128 0x34
+ 25805 1fac 380D0000 .long 0xd38
+ 25806 1fb0 03 .byte 0x3
+ 25807 1fb1 91 .byte 0x91
+ 25808 1fb2 EC42 .sleb128 -7828
+ 25809 1fb4 31 .uleb128 0x31
+ 25810 1fb5 4F0D0000 .long 0xd4f
+ 25811 1fb9 00000000 .quad .LBB832
+ 25811 00000000
+ 25812 1fc1 00000000 .quad .LBE832
+ 25812 00000000
+ 25813 1fc9 02 .byte 0x2
+ 25814 1fca 5603 .value 0x356
+ 25815 1fcc E31F0000 .long 0x1fe3
+ 25816 1fd0 32 .uleb128 0x32
+ 25817 1fd1 6A0D0000 .long 0xd6a
+ 25818 1fd5 03 .byte 0x3
+ 25819 1fd6 91 .byte 0x91
+ 25820 1fd7 B043 .sleb128 -7760
+ 25821 1fd9 32 .uleb128 0x32
+ 25822 1fda 600D0000 .long 0xd60
+ 25823 1fde 03 .byte 0x3
+ 25824 1fdf 91 .byte 0x91
+ 25825 1fe0 C043 .sleb128 -7744
+ 25826 1fe2 00 .byte 0x0
+ 25827 1fe3 31 .uleb128 0x31
+ 25828 1fe4 750D0000 .long 0xd75
+ 25829 1fe8 00000000 .quad .LBB834
+ 25829 00000000
+ 25830 1ff0 00000000 .quad .LBE834
+ 25830 00000000
+ 25831 1ff8 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 731
+
+
+ 25832 1ff9 5903 .value 0x359
+ 25833 1ffb 12200000 .long 0x2012
+ 25834 1fff 32 .uleb128 0x32
+ 25835 2000 930D0000 .long 0xd93
+ 25836 2004 03 .byte 0x3
+ 25837 2005 91 .byte 0x91
+ 25838 2006 DC43 .sleb128 -7716
+ 25839 2008 32 .uleb128 0x32
+ 25840 2009 870D0000 .long 0xd87
+ 25841 200d 03 .byte 0x3
+ 25842 200e 91 .byte 0x91
+ 25843 200f E043 .sleb128 -7712
+ 25844 2011 00 .byte 0x0
+ 25845 2012 31 .uleb128 0x31
+ 25846 2013 4F0D0000 .long 0xd4f
+ 25847 2017 00000000 .quad .LBB836
+ 25847 00000000
+ 25848 201f 00000000 .quad .LBE836
+ 25848 00000000
+ 25849 2027 02 .byte 0x2
+ 25850 2028 5B03 .value 0x35b
+ 25851 202a 41200000 .long 0x2041
+ 25852 202e 32 .uleb128 0x32
+ 25853 202f 6A0D0000 .long 0xd6a
+ 25854 2033 03 .byte 0x3
+ 25855 2034 91 .byte 0x91
+ 25856 2035 F043 .sleb128 -7696
+ 25857 2037 32 .uleb128 0x32
+ 25858 2038 600D0000 .long 0xd60
+ 25859 203c 03 .byte 0x3
+ 25860 203d 91 .byte 0x91
+ 25861 203e 8044 .sleb128 -7680
+ 25862 2040 00 .byte 0x0
+ 25863 2041 31 .uleb128 0x31
+ 25864 2042 A00D0000 .long 0xda0
+ 25865 2046 00000000 .quad .LBB838
+ 25865 00000000
+ 25866 204e 00000000 .quad .LBE838
+ 25866 00000000
+ 25867 2056 02 .byte 0x2
+ 25868 2057 6403 .value 0x364
+ 25869 2059 9B200000 .long 0x209b
+ 25870 205d 32 .uleb128 0x32
+ 25871 205e BE0D0000 .long 0xdbe
+ 25872 2062 03 .byte 0x3
+ 25873 2063 91 .byte 0x91
+ 25874 2064 9044 .sleb128 -7664
+ 25875 2066 32 .uleb128 0x32
+ 25876 2067 B20D0000 .long 0xdb2
+ 25877 206b 03 .byte 0x3
+ 25878 206c 91 .byte 0x91
+ 25879 206d A044 .sleb128 -7648
+ 25880 206f 35 .uleb128 0x35
+ 25881 2070 CB0D0000 .long 0xdcb
+ 25882 2074 00000000 .quad .LBB840
+ 25882 00000000
+ 25883 207c 00000000 .quad .LBE840
+
GAS LISTING /tmp/ccjbMjHD.s page 732
+
+
+ 25883 00000000
+ 25884 2084 02 .byte 0x2
+ 25885 2085 7501 .value 0x175
+ 25886 2087 32 .uleb128 0x32
+ 25887 2088 E90D0000 .long 0xde9
+ 25888 208c 03 .byte 0x3
+ 25889 208d 91 .byte 0x91
+ 25890 208e B044 .sleb128 -7632
+ 25891 2090 32 .uleb128 0x32
+ 25892 2091 DD0D0000 .long 0xddd
+ 25893 2095 03 .byte 0x3
+ 25894 2096 91 .byte 0x91
+ 25895 2097 C044 .sleb128 -7616
+ 25896 2099 00 .byte 0x0
+ 25897 209a 00 .byte 0x0
+ 25898 209b 31 .uleb128 0x31
+ 25899 209c FB0D0000 .long 0xdfb
+ 25900 20a0 00000000 .quad .LBB842
+ 25900 00000000
+ 25901 20a8 00000000 .quad .LBE842
+ 25901 00000000
+ 25902 20b0 02 .byte 0x2
+ 25903 20b1 6603 .value 0x366
+ 25904 20b3 CA200000 .long 0x20ca
+ 25905 20b7 32 .uleb128 0x32
+ 25906 20b8 160E0000 .long 0xe16
+ 25907 20bc 03 .byte 0x3
+ 25908 20bd 91 .byte 0x91
+ 25909 20be D044 .sleb128 -7600
+ 25910 20c0 32 .uleb128 0x32
+ 25911 20c1 0C0E0000 .long 0xe0c
+ 25912 20c5 03 .byte 0x3
+ 25913 20c6 91 .byte 0x91
+ 25914 20c7 E044 .sleb128 -7584
+ 25915 20c9 00 .byte 0x0
+ 25916 20ca 31 .uleb128 0x31
+ 25917 20cb A00D0000 .long 0xda0
+ 25918 20cf 00000000 .quad .LBB844
+ 25918 00000000
+ 25919 20d7 00000000 .quad .LBE844
+ 25919 00000000
+ 25920 20df 02 .byte 0x2
+ 25921 20e0 6803 .value 0x368
+ 25922 20e2 24210000 .long 0x2124
+ 25923 20e6 32 .uleb128 0x32
+ 25924 20e7 BE0D0000 .long 0xdbe
+ 25925 20eb 03 .byte 0x3
+ 25926 20ec 91 .byte 0x91
+ 25927 20ed F044 .sleb128 -7568
+ 25928 20ef 32 .uleb128 0x32
+ 25929 20f0 B20D0000 .long 0xdb2
+ 25930 20f4 03 .byte 0x3
+ 25931 20f5 91 .byte 0x91
+ 25932 20f6 8045 .sleb128 -7552
+ 25933 20f8 35 .uleb128 0x35
+ 25934 20f9 CB0D0000 .long 0xdcb
+ 25935 20fd 00000000 .quad .LBB846
+
GAS LISTING /tmp/ccjbMjHD.s page 733
+
+
+ 25935 00000000
+ 25936 2105 00000000 .quad .LBE846
+ 25936 00000000
+ 25937 210d 02 .byte 0x2
+ 25938 210e 7501 .value 0x175
+ 25939 2110 32 .uleb128 0x32
+ 25940 2111 E90D0000 .long 0xde9
+ 25941 2115 03 .byte 0x3
+ 25942 2116 91 .byte 0x91
+ 25943 2117 9045 .sleb128 -7536
+ 25944 2119 32 .uleb128 0x32
+ 25945 211a DD0D0000 .long 0xddd
+ 25946 211e 03 .byte 0x3
+ 25947 211f 91 .byte 0x91
+ 25948 2120 A045 .sleb128 -7520
+ 25949 2122 00 .byte 0x0
+ 25950 2123 00 .byte 0x0
+ 25951 2124 31 .uleb128 0x31
+ 25952 2125 FB0D0000 .long 0xdfb
+ 25953 2129 00000000 .quad .LBB848
+ 25953 00000000
+ 25954 2131 00000000 .quad .LBE848
+ 25954 00000000
+ 25955 2139 02 .byte 0x2
+ 25956 213a 6A03 .value 0x36a
+ 25957 213c 53210000 .long 0x2153
+ 25958 2140 32 .uleb128 0x32
+ 25959 2141 160E0000 .long 0xe16
+ 25960 2145 03 .byte 0x3
+ 25961 2146 91 .byte 0x91
+ 25962 2147 B045 .sleb128 -7504
+ 25963 2149 32 .uleb128 0x32
+ 25964 214a 0C0E0000 .long 0xe0c
+ 25965 214e 03 .byte 0x3
+ 25966 214f 91 .byte 0x91
+ 25967 2150 C045 .sleb128 -7488
+ 25968 2152 00 .byte 0x0
+ 25969 2153 31 .uleb128 0x31
+ 25970 2154 210E0000 .long 0xe21
+ 25971 2158 00000000 .quad .LBB850
+ 25971 00000000
+ 25972 2160 00000000 .quad .LBE850
+ 25972 00000000
+ 25973 2168 02 .byte 0x2
+ 25974 2169 6C03 .value 0x36c
+ 25975 216b 82210000 .long 0x2182
+ 25976 216f 32 .uleb128 0x32
+ 25977 2170 3E0E0000 .long 0xe3e
+ 25978 2174 03 .byte 0x3
+ 25979 2175 91 .byte 0x91
+ 25980 2176 D045 .sleb128 -7472
+ 25981 2178 32 .uleb128 0x32
+ 25982 2179 330E0000 .long 0xe33
+ 25983 217d 03 .byte 0x3
+ 25984 217e 91 .byte 0x91
+ 25985 217f E045 .sleb128 -7456
+ 25986 2181 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 734
+
+
+ 25987 2182 35 .uleb128 0x35
+ 25988 2183 4F0D0000 .long 0xd4f
+ 25989 2187 00000000 .quad .LBB852
+ 25989 00000000
+ 25990 218f 00000000 .quad .LBE852
+ 25990 00000000
+ 25991 2197 02 .byte 0x2
+ 25992 2198 6E03 .value 0x36e
+ 25993 219a 32 .uleb128 0x32
+ 25994 219b 6A0D0000 .long 0xd6a
+ 25995 219f 03 .byte 0x3
+ 25996 21a0 91 .byte 0x91
+ 25997 21a1 F045 .sleb128 -7440
+ 25998 21a3 32 .uleb128 0x32
+ 25999 21a4 600D0000 .long 0xd60
+ 26000 21a8 03 .byte 0x3
+ 26001 21a9 91 .byte 0x91
+ 26002 21aa 8046 .sleb128 -7424
+ 26003 21ac 00 .byte 0x0
+ 26004 21ad 00 .byte 0x0
+ 26005 21ae 00 .byte 0x0
+ 26006 21af 00 .byte 0x0
+ 26007 21b0 36 .uleb128 0x36
+ 26008 21b1 00000000 .quad .LBB854
+ 26008 00000000
+ 26009 21b9 00000000 .quad .LBE854
+ 26009 00000000
+ 26010 21c1 D0210000 .long 0x21d0
+ 26011 21c5 34 .uleb128 0x34
+ 26012 21c6 1C0C0000 .long 0xc1c
+ 26013 21ca 04 .byte 0x4
+ 26014 21cb 91 .byte 0x91
+ 26015 21cc A0AE7F .sleb128 -10464
+ 26016 21cf 00 .byte 0x0
+ 26017 21d0 31 .uleb128 0x31
+ 26018 21d1 4A0E0000 .long 0xe4a
+ 26019 21d5 00000000 .quad .LBB855
+ 26019 00000000
+ 26020 21dd 00000000 .quad .LBE855
+ 26020 00000000
+ 26021 21e5 02 .byte 0x2
+ 26022 21e6 9406 .value 0x694
+ 26023 21e8 6D220000 .long 0x226d
+ 26024 21ec 32 .uleb128 0x32
+ 26025 21ed 5C0E0000 .long 0xe5c
+ 26026 21f1 03 .byte 0x3
+ 26027 21f2 91 .byte 0x91
+ 26028 21f3 9046 .sleb128 -7408
+ 26029 21f5 33 .uleb128 0x33
+ 26030 21f6 00000000 .quad .LBB856
+ 26030 00000000
+ 26031 21fe 00000000 .quad .LBE856
+ 26031 00000000
+ 26032 2206 34 .uleb128 0x34
+ 26033 2207 680E0000 .long 0xe68
+ 26034 220b 09 .byte 0x9
+ 26035 220c 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 735
+
+
+ 26036 220d 00000000 .quad ShiftRowTable.7385
+ 26036 00000000
+ 26037 2215 35 .uleb128 0x35
+ 26038 2216 A00D0000 .long 0xda0
+ 26039 221a 00000000 .quad .LBB857
+ 26039 00000000
+ 26040 2222 00000000 .quad .LBE857
+ 26040 00000000
+ 26041 222a 02 .byte 0x2
+ 26042 222b 9B02 .value 0x29b
+ 26043 222d 32 .uleb128 0x32
+ 26044 222e BE0D0000 .long 0xdbe
+ 26045 2232 03 .byte 0x3
+ 26046 2233 91 .byte 0x91
+ 26047 2234 A046 .sleb128 -7392
+ 26048 2236 32 .uleb128 0x32
+ 26049 2237 B20D0000 .long 0xdb2
+ 26050 223b 03 .byte 0x3
+ 26051 223c 91 .byte 0x91
+ 26052 223d B046 .sleb128 -7376
+ 26053 223f 35 .uleb128 0x35
+ 26054 2240 CB0D0000 .long 0xdcb
+ 26055 2244 00000000 .quad .LBB859
+ 26055 00000000
+ 26056 224c 00000000 .quad .LBE859
+ 26056 00000000
+ 26057 2254 02 .byte 0x2
+ 26058 2255 7501 .value 0x175
+ 26059 2257 32 .uleb128 0x32
+ 26060 2258 E90D0000 .long 0xde9
+ 26061 225c 03 .byte 0x3
+ 26062 225d 91 .byte 0x91
+ 26063 225e C046 .sleb128 -7360
+ 26064 2260 32 .uleb128 0x32
+ 26065 2261 DD0D0000 .long 0xddd
+ 26066 2265 03 .byte 0x3
+ 26067 2266 91 .byte 0x91
+ 26068 2267 D046 .sleb128 -7344
+ 26069 2269 00 .byte 0x0
+ 26070 226a 00 .byte 0x0
+ 26071 226b 00 .byte 0x0
+ 26072 226c 00 .byte 0x0
+ 26073 226d 36 .uleb128 0x36
+ 26074 226e 00000000 .quad .LBB861
+ 26074 00000000
+ 26075 2276 00000000 .quad .LBE861
+ 26075 00000000
+ 26076 227e 8D220000 .long 0x228d
+ 26077 2282 34 .uleb128 0x34
+ 26078 2283 2C0C0000 .long 0xc2c
+ 26079 2287 04 .byte 0x4
+ 26080 2288 91 .byte 0x91
+ 26081 2289 90AE7F .sleb128 -10480
+ 26082 228c 00 .byte 0x0
+ 26083 228d 31 .uleb128 0x31
+ 26084 228e 860E0000 .long 0xe86
+ 26085 2292 00000000 .quad .LBB862
+
GAS LISTING /tmp/ccjbMjHD.s page 736
+
+
+ 26085 00000000
+ 26086 229a 00000000 .quad .LBE862
+ 26086 00000000
+ 26087 22a2 02 .byte 0x2
+ 26088 22a3 9606 .value 0x696
+ 26089 22a5 BC220000 .long 0x22bc
+ 26090 22a9 32 .uleb128 0x32
+ 26091 22aa A10E0000 .long 0xea1
+ 26092 22ae 03 .byte 0x3
+ 26093 22af 91 .byte 0x91
+ 26094 22b0 E046 .sleb128 -7328
+ 26095 22b2 32 .uleb128 0x32
+ 26096 22b3 970E0000 .long 0xe97
+ 26097 22b7 03 .byte 0x3
+ 26098 22b8 91 .byte 0x91
+ 26099 22b9 F046 .sleb128 -7312
+ 26100 22bb 00 .byte 0x0
+ 26101 22bc 36 .uleb128 0x36
+ 26102 22bd 00000000 .quad .LBB864
+ 26102 00000000
+ 26103 22c5 00000000 .quad .LBE864
+ 26103 00000000
+ 26104 22cd DC220000 .long 0x22dc
+ 26105 22d1 34 .uleb128 0x34
+ 26106 22d2 3C0C0000 .long 0xc3c
+ 26107 22d6 04 .byte 0x4
+ 26108 22d7 91 .byte 0x91
+ 26109 22d8 80AE7F .sleb128 -10496
+ 26110 22db 00 .byte 0x0
+ 26111 22dc 31 .uleb128 0x31
+ 26112 22dd AC0E0000 .long 0xeac
+ 26113 22e1 00000000 .quad .LBB865
+ 26113 00000000
+ 26114 22e9 00000000 .quad .LBE865
+ 26114 00000000
+ 26115 22f1 02 .byte 0x2
+ 26116 22f2 9806 .value 0x698
+ 26117 22f4 2D230000 .long 0x232d
+ 26118 22f8 32 .uleb128 0x32
+ 26119 22f9 BE0E0000 .long 0xebe
+ 26120 22fd 03 .byte 0x3
+ 26121 22fe 91 .byte 0x91
+ 26122 22ff 8047 .sleb128 -7296
+ 26123 2301 35 .uleb128 0x35
+ 26124 2302 CB0E0000 .long 0xecb
+ 26125 2306 00000000 .quad .LBB867
+ 26125 00000000
+ 26126 230e 00000000 .quad .LBE867
+ 26126 00000000
+ 26127 2316 02 .byte 0x2
+ 26128 2317 4905 .value 0x549
+ 26129 2319 32 .uleb128 0x32
+ 26130 231a E90E0000 .long 0xee9
+ 26131 231e 03 .byte 0x3
+ 26132 231f 91 .byte 0x91
+ 26133 2320 9C47 .sleb128 -7268
+ 26134 2322 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 737
+
+
+ 26135 2323 DD0E0000 .long 0xedd
+ 26136 2327 03 .byte 0x3
+ 26137 2328 91 .byte 0x91
+ 26138 2329 A047 .sleb128 -7264
+ 26139 232b 00 .byte 0x0
+ 26140 232c 00 .byte 0x0
+ 26141 232d 33 .uleb128 0x33
+ 26142 232e 00000000 .quad .LBB869
+ 26142 00000000
+ 26143 2336 00000000 .quad .LBE869
+ 26143 00000000
+ 26144 233e 34 .uleb128 0x34
+ 26145 233f 480C0000 .long 0xc48
+ 26146 2343 04 .byte 0x4
+ 26147 2344 91 .byte 0x91
+ 26148 2345 F0AD7F .sleb128 -10512
+ 26149 2348 00 .byte 0x0
+ 26150 2349 00 .byte 0x0
+ 26151 234a 00 .byte 0x0
+ 26152 234b 31 .uleb128 0x31
+ 26153 234c F60E0000 .long 0xef6
+ 26154 2350 00000000 .quad .LBB870
+ 26154 00000000
+ 26155 2358 00000000 .quad .LBE870
+ 26155 00000000
+ 26156 2360 02 .byte 0x2
+ 26157 2361 D206 .value 0x6d2
+ 26158 2363 60250000 .long 0x2560
+ 26159 2367 32 .uleb128 0x32
+ 26160 2368 080F0000 .long 0xf08
+ 26161 236c 03 .byte 0x3
+ 26162 236d 91 .byte 0x91
+ 26163 236e B047 .sleb128 -7248
+ 26164 2370 33 .uleb128 0x33
+ 26165 2371 00000000 .quad .LBB871
+ 26165 00000000
+ 26166 2379 00000000 .quad .LBE871
+ 26166 00000000
+ 26167 2381 34 .uleb128 0x34
+ 26168 2382 140F0000 .long 0xf14
+ 26169 2386 04 .byte 0x4
+ 26170 2387 76 .byte 0x76
+ 26171 2388 90AA7F .sleb128 -10992
+ 26172 238b 31 .uleb128 0x31
+ 26173 238c 210F0000 .long 0xf21
+ 26174 2390 00000000 .quad .LBB872
+ 26174 00000000
+ 26175 2398 00000000 .quad .LBE872
+ 26175 00000000
+ 26176 23a0 02 .byte 0x2
+ 26177 23a1 1F06 .value 0x61f
+ 26178 23a3 28240000 .long 0x2428
+ 26179 23a7 32 .uleb128 0x32
+ 26180 23a8 330F0000 .long 0xf33
+ 26181 23ac 03 .byte 0x3
+ 26182 23ad 91 .byte 0x91
+ 26183 23ae C047 .sleb128 -7232
+
GAS LISTING /tmp/ccjbMjHD.s page 738
+
+
+ 26184 23b0 33 .uleb128 0x33
+ 26185 23b1 00000000 .quad .LBB873
+ 26185 00000000
+ 26186 23b9 00000000 .quad .LBE873
+ 26186 00000000
+ 26187 23c1 34 .uleb128 0x34
+ 26188 23c2 3F0F0000 .long 0xf3f
+ 26189 23c6 09 .byte 0x9
+ 26190 23c7 03 .byte 0x3
+ 26191 23c8 00000000 .quad mask.7943
+ 26191 00000000
+ 26192 23d0 35 .uleb128 0x35
+ 26193 23d1 A00D0000 .long 0xda0
+ 26194 23d5 00000000 .quad .LBB874
+ 26194 00000000
+ 26195 23dd 00000000 .quad .LBE874
+ 26195 00000000
+ 26196 23e5 02 .byte 0x2
+ 26197 23e6 FE04 .value 0x4fe
+ 26198 23e8 32 .uleb128 0x32
+ 26199 23e9 BE0D0000 .long 0xdbe
+ 26200 23ed 03 .byte 0x3
+ 26201 23ee 91 .byte 0x91
+ 26202 23ef D047 .sleb128 -7216
+ 26203 23f1 32 .uleb128 0x32
+ 26204 23f2 B20D0000 .long 0xdb2
+ 26205 23f6 03 .byte 0x3
+ 26206 23f7 91 .byte 0x91
+ 26207 23f8 E047 .sleb128 -7200
+ 26208 23fa 35 .uleb128 0x35
+ 26209 23fb CB0D0000 .long 0xdcb
+ 26210 23ff 00000000 .quad .LBB876
+ 26210 00000000
+ 26211 2407 00000000 .quad .LBE876
+ 26211 00000000
+ 26212 240f 02 .byte 0x2
+ 26213 2410 7501 .value 0x175
+ 26214 2412 32 .uleb128 0x32
+ 26215 2413 E90D0000 .long 0xde9
+ 26216 2417 03 .byte 0x3
+ 26217 2418 91 .byte 0x91
+ 26218 2419 F047 .sleb128 -7184
+ 26219 241b 32 .uleb128 0x32
+ 26220 241c DD0D0000 .long 0xddd
+ 26221 2420 03 .byte 0x3
+ 26222 2421 91 .byte 0x91
+ 26223 2422 8048 .sleb128 -7168
+ 26224 2424 00 .byte 0x0
+ 26225 2425 00 .byte 0x0
+ 26226 2426 00 .byte 0x0
+ 26227 2427 00 .byte 0x0
+ 26228 2428 31 .uleb128 0x31
+ 26229 2429 210F0000 .long 0xf21
+ 26230 242d 00000000 .quad .LBB878
+ 26230 00000000
+ 26231 2435 00000000 .quad .LBE878
+ 26231 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 739
+
+
+ 26232 243d 02 .byte 0x2
+ 26233 243e 2006 .value 0x620
+ 26234 2440 C5240000 .long 0x24c5
+ 26235 2444 32 .uleb128 0x32
+ 26236 2445 330F0000 .long 0xf33
+ 26237 2449 03 .byte 0x3
+ 26238 244a 91 .byte 0x91
+ 26239 244b 9048 .sleb128 -7152
+ 26240 244d 33 .uleb128 0x33
+ 26241 244e 00000000 .quad .LBB879
+ 26241 00000000
+ 26242 2456 00000000 .quad .LBE879
+ 26242 00000000
+ 26243 245e 34 .uleb128 0x34
+ 26244 245f 3F0F0000 .long 0xf3f
+ 26245 2463 09 .byte 0x9
+ 26246 2464 03 .byte 0x3
+ 26247 2465 00000000 .quad mask.7943
+ 26247 00000000
+ 26248 246d 35 .uleb128 0x35
+ 26249 246e A00D0000 .long 0xda0
+ 26250 2472 00000000 .quad .LBB880
+ 26250 00000000
+ 26251 247a 00000000 .quad .LBE880
+ 26251 00000000
+ 26252 2482 02 .byte 0x2
+ 26253 2483 FE04 .value 0x4fe
+ 26254 2485 32 .uleb128 0x32
+ 26255 2486 BE0D0000 .long 0xdbe
+ 26256 248a 03 .byte 0x3
+ 26257 248b 91 .byte 0x91
+ 26258 248c A048 .sleb128 -7136
+ 26259 248e 32 .uleb128 0x32
+ 26260 248f B20D0000 .long 0xdb2
+ 26261 2493 03 .byte 0x3
+ 26262 2494 91 .byte 0x91
+ 26263 2495 B048 .sleb128 -7120
+ 26264 2497 35 .uleb128 0x35
+ 26265 2498 CB0D0000 .long 0xdcb
+ 26266 249c 00000000 .quad .LBB882
+ 26266 00000000
+ 26267 24a4 00000000 .quad .LBE882
+ 26267 00000000
+ 26268 24ac 02 .byte 0x2
+ 26269 24ad 7501 .value 0x175
+ 26270 24af 32 .uleb128 0x32
+ 26271 24b0 E90D0000 .long 0xde9
+ 26272 24b4 03 .byte 0x3
+ 26273 24b5 91 .byte 0x91
+ 26274 24b6 C048 .sleb128 -7104
+ 26275 24b8 32 .uleb128 0x32
+ 26276 24b9 DD0D0000 .long 0xddd
+ 26277 24bd 03 .byte 0x3
+ 26278 24be 91 .byte 0x91
+ 26279 24bf D048 .sleb128 -7088
+ 26280 24c1 00 .byte 0x0
+ 26281 24c2 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 740
+
+
+ 26282 24c3 00 .byte 0x0
+ 26283 24c4 00 .byte 0x0
+ 26284 24c5 35 .uleb128 0x35
+ 26285 24c6 210F0000 .long 0xf21
+ 26286 24ca 00000000 .quad .LBB884
+ 26286 00000000
+ 26287 24d2 00000000 .quad .LBE884
+ 26287 00000000
+ 26288 24da 02 .byte 0x2
+ 26289 24db 2106 .value 0x621
+ 26290 24dd 32 .uleb128 0x32
+ 26291 24de 330F0000 .long 0xf33
+ 26292 24e2 03 .byte 0x3
+ 26293 24e3 91 .byte 0x91
+ 26294 24e4 E048 .sleb128 -7072
+ 26295 24e6 33 .uleb128 0x33
+ 26296 24e7 00000000 .quad .LBB885
+ 26296 00000000
+ 26297 24ef 00000000 .quad .LBE885
+ 26297 00000000
+ 26298 24f7 34 .uleb128 0x34
+ 26299 24f8 3F0F0000 .long 0xf3f
+ 26300 24fc 09 .byte 0x9
+ 26301 24fd 03 .byte 0x3
+ 26302 24fe 00000000 .quad mask.7943
+ 26302 00000000
+ 26303 2506 35 .uleb128 0x35
+ 26304 2507 A00D0000 .long 0xda0
+ 26305 250b 00000000 .quad .LBB886
+ 26305 00000000
+ 26306 2513 00000000 .quad .LBE886
+ 26306 00000000
+ 26307 251b 02 .byte 0x2
+ 26308 251c FE04 .value 0x4fe
+ 26309 251e 32 .uleb128 0x32
+ 26310 251f BE0D0000 .long 0xdbe
+ 26311 2523 03 .byte 0x3
+ 26312 2524 91 .byte 0x91
+ 26313 2525 F048 .sleb128 -7056
+ 26314 2527 32 .uleb128 0x32
+ 26315 2528 B20D0000 .long 0xdb2
+ 26316 252c 03 .byte 0x3
+ 26317 252d 91 .byte 0x91
+ 26318 252e 8049 .sleb128 -7040
+ 26319 2530 35 .uleb128 0x35
+ 26320 2531 CB0D0000 .long 0xdcb
+ 26321 2535 00000000 .quad .LBB888
+ 26321 00000000
+ 26322 253d 00000000 .quad .LBE888
+ 26322 00000000
+ 26323 2545 02 .byte 0x2
+ 26324 2546 7501 .value 0x175
+ 26325 2548 32 .uleb128 0x32
+ 26326 2549 E90D0000 .long 0xde9
+ 26327 254d 03 .byte 0x3
+ 26328 254e 91 .byte 0x91
+ 26329 254f 9049 .sleb128 -7024
+
GAS LISTING /tmp/ccjbMjHD.s page 741
+
+
+ 26330 2551 32 .uleb128 0x32
+ 26331 2552 DD0D0000 .long 0xddd
+ 26332 2556 03 .byte 0x3
+ 26333 2557 91 .byte 0x91
+ 26334 2558 A049 .sleb128 -7008
+ 26335 255a 00 .byte 0x0
+ 26336 255b 00 .byte 0x0
+ 26337 255c 00 .byte 0x0
+ 26338 255d 00 .byte 0x0
+ 26339 255e 00 .byte 0x0
+ 26340 255f 00 .byte 0x0
+ 26341 2560 31 .uleb128 0x31
+ 26342 2561 D50B0000 .long 0xbd5
+ 26343 2565 00000000 .quad .LBB890
+ 26343 00000000
+ 26344 256d 00000000 .quad .LBE890
+ 26344 00000000
+ 26345 2575 02 .byte 0x2
+ 26346 2576 D306 .value 0x6d3
+ 26347 2578 432A0000 .long 0x2a43
+ 26348 257c 32 .uleb128 0x32
+ 26349 257d F30B0000 .long 0xbf3
+ 26350 2581 03 .byte 0x3
+ 26351 2582 91 .byte 0x91
+ 26352 2583 BC49 .sleb128 -6980
+ 26353 2585 32 .uleb128 0x32
+ 26354 2586 E70B0000 .long 0xbe7
+ 26355 258a 03 .byte 0x3
+ 26356 258b 91 .byte 0x91
+ 26357 258c C049 .sleb128 -6976
+ 26358 258e 33 .uleb128 0x33
+ 26359 258f 00000000 .quad .LBB891
+ 26359 00000000
+ 26360 2597 00000000 .quad .LBE891
+ 26360 00000000
+ 26361 259f 34 .uleb128 0x34
+ 26362 25a0 FF0B0000 .long 0xbff
+ 26363 25a4 04 .byte 0x4
+ 26364 25a5 76 .byte 0x76
+ 26365 25a6 B0AA7F .sleb128 -10960
+ 26366 25a9 34 .uleb128 0x34
+ 26367 25aa 0B0C0000 .long 0xc0b
+ 26368 25ae 04 .byte 0x4
+ 26369 25af 76 .byte 0x76
+ 26370 25b0 A0AA7F .sleb128 -10976
+ 26371 25b3 31 .uleb128 0x31
+ 26372 25b4 540C0000 .long 0xc54
+ 26373 25b8 00000000 .quad .LBB892
+ 26373 00000000
+ 26374 25c0 00000000 .quad .LBE892
+ 26374 00000000
+ 26375 25c8 02 .byte 0x2
+ 26376 25c9 9106 .value 0x691
+ 26377 25cb 1F260000 .long 0x261f
+ 26378 25cf 32 .uleb128 0x32
+ 26379 25d0 7E0C0000 .long 0xc7e
+ 26380 25d4 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 742
+
+
+ 26381 25d5 91 .byte 0x91
+ 26382 25d6 D849 .sleb128 -6952
+ 26383 25d8 32 .uleb128 0x32
+ 26384 25d9 720C0000 .long 0xc72
+ 26385 25dd 03 .byte 0x3
+ 26386 25de 91 .byte 0x91
+ 26387 25df DC49 .sleb128 -6948
+ 26388 25e1 32 .uleb128 0x32
+ 26389 25e2 660C0000 .long 0xc66
+ 26390 25e6 03 .byte 0x3
+ 26391 25e7 91 .byte 0x91
+ 26392 25e8 E049 .sleb128 -6944
+ 26393 25ea 35 .uleb128 0x35
+ 26394 25eb 8B0C0000 .long 0xc8b
+ 26395 25ef 00000000 .quad .LBB894
+ 26395 00000000
+ 26396 25f7 00000000 .quad .LBE894
+ 26396 00000000
+ 26397 25ff 02 .byte 0x2
+ 26398 2600 0702 .value 0x207
+ 26399 2602 32 .uleb128 0x32
+ 26400 2603 B40C0000 .long 0xcb4
+ 26401 2607 03 .byte 0x3
+ 26402 2608 91 .byte 0x91
+ 26403 2609 F849 .sleb128 -6920
+ 26404 260b 32 .uleb128 0x32
+ 26405 260c A90C0000 .long 0xca9
+ 26406 2610 03 .byte 0x3
+ 26407 2611 91 .byte 0x91
+ 26408 2612 FC49 .sleb128 -6916
+ 26409 2614 32 .uleb128 0x32
+ 26410 2615 9D0C0000 .long 0xc9d
+ 26411 2619 03 .byte 0x3
+ 26412 261a 91 .byte 0x91
+ 26413 261b 804A .sleb128 -6912
+ 26414 261d 00 .byte 0x0
+ 26415 261e 00 .byte 0x0
+ 26416 261f 31 .uleb128 0x31
+ 26417 2620 C10C0000 .long 0xcc1
+ 26418 2624 00000000 .quad .LBB896
+ 26418 00000000
+ 26419 262c 00000000 .quad .LBE896
+ 26419 00000000
+ 26420 2634 02 .byte 0x2
+ 26421 2635 9206 .value 0x692
+ 26422 2637 A8280000 .long 0x28a8
+ 26423 263b 32 .uleb128 0x32
+ 26424 263c D30C0000 .long 0xcd3
+ 26425 2640 03 .byte 0x3
+ 26426 2641 91 .byte 0x91
+ 26427 2642 904A .sleb128 -6896
+ 26428 2644 35 .uleb128 0x35
+ 26429 2645 E00C0000 .long 0xce0
+ 26430 2649 00000000 .quad .LBB898
+ 26430 00000000
+ 26431 2651 00000000 .quad .LBE898
+ 26431 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 743
+
+
+ 26432 2659 02 .byte 0x2
+ 26433 265a 7D03 .value 0x37d
+ 26434 265c 32 .uleb128 0x32
+ 26435 265d FE0C0000 .long 0xcfe
+ 26436 2661 03 .byte 0x3
+ 26437 2662 91 .byte 0x91
+ 26438 2663 A84A .sleb128 -6872
+ 26439 2665 32 .uleb128 0x32
+ 26440 2666 F20C0000 .long 0xcf2
+ 26441 266a 03 .byte 0x3
+ 26442 266b 91 .byte 0x91
+ 26443 266c B04A .sleb128 -6864
+ 26444 266e 33 .uleb128 0x33
+ 26445 266f 00000000 .quad .LBB899
+ 26445 00000000
+ 26446 2677 00000000 .quad .LBE899
+ 26446 00000000
+ 26447 267f 34 .uleb128 0x34
+ 26448 2680 0A0D0000 .long 0xd0a
+ 26449 2684 03 .byte 0x3
+ 26450 2685 91 .byte 0x91
+ 26451 2686 804B .sleb128 -6784
+ 26452 2688 34 .uleb128 0x34
+ 26453 2689 150D0000 .long 0xd15
+ 26454 268d 03 .byte 0x3
+ 26455 268e 91 .byte 0x91
+ 26456 268f F04A .sleb128 -6800
+ 26457 2691 34 .uleb128 0x34
+ 26458 2692 200D0000 .long 0xd20
+ 26459 2696 03 .byte 0x3
+ 26460 2697 91 .byte 0x91
+ 26461 2698 E04A .sleb128 -6816
+ 26462 269a 34 .uleb128 0x34
+ 26463 269b 2C0D0000 .long 0xd2c
+ 26464 269f 03 .byte 0x3
+ 26465 26a0 91 .byte 0x91
+ 26466 26a1 D04A .sleb128 -6832
+ 26467 26a3 34 .uleb128 0x34
+ 26468 26a4 380D0000 .long 0xd38
+ 26469 26a8 03 .byte 0x3
+ 26470 26a9 91 .byte 0x91
+ 26471 26aa CC4A .sleb128 -6836
+ 26472 26ac 31 .uleb128 0x31
+ 26473 26ad 4F0D0000 .long 0xd4f
+ 26474 26b1 00000000 .quad .LBB900
+ 26474 00000000
+ 26475 26b9 00000000 .quad .LBE900
+ 26475 00000000
+ 26476 26c1 02 .byte 0x2
+ 26477 26c2 5603 .value 0x356
+ 26478 26c4 DB260000 .long 0x26db
+ 26479 26c8 32 .uleb128 0x32
+ 26480 26c9 6A0D0000 .long 0xd6a
+ 26481 26cd 03 .byte 0x3
+ 26482 26ce 91 .byte 0x91
+ 26483 26cf 904B .sleb128 -6768
+ 26484 26d1 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 744
+
+
+ 26485 26d2 600D0000 .long 0xd60
+ 26486 26d6 03 .byte 0x3
+ 26487 26d7 91 .byte 0x91
+ 26488 26d8 A04B .sleb128 -6752
+ 26489 26da 00 .byte 0x0
+ 26490 26db 31 .uleb128 0x31
+ 26491 26dc 750D0000 .long 0xd75
+ 26492 26e0 00000000 .quad .LBB902
+ 26492 00000000
+ 26493 26e8 00000000 .quad .LBE902
+ 26493 00000000
+ 26494 26f0 02 .byte 0x2
+ 26495 26f1 5903 .value 0x359
+ 26496 26f3 0A270000 .long 0x270a
+ 26497 26f7 32 .uleb128 0x32
+ 26498 26f8 930D0000 .long 0xd93
+ 26499 26fc 03 .byte 0x3
+ 26500 26fd 91 .byte 0x91
+ 26501 26fe BC4B .sleb128 -6724
+ 26502 2700 32 .uleb128 0x32
+ 26503 2701 870D0000 .long 0xd87
+ 26504 2705 03 .byte 0x3
+ 26505 2706 91 .byte 0x91
+ 26506 2707 C04B .sleb128 -6720
+ 26507 2709 00 .byte 0x0
+ 26508 270a 31 .uleb128 0x31
+ 26509 270b 4F0D0000 .long 0xd4f
+ 26510 270f 00000000 .quad .LBB904
+ 26510 00000000
+ 26511 2717 00000000 .quad .LBE904
+ 26511 00000000
+ 26512 271f 02 .byte 0x2
+ 26513 2720 5B03 .value 0x35b
+ 26514 2722 39270000 .long 0x2739
+ 26515 2726 32 .uleb128 0x32
+ 26516 2727 6A0D0000 .long 0xd6a
+ 26517 272b 03 .byte 0x3
+ 26518 272c 91 .byte 0x91
+ 26519 272d D04B .sleb128 -6704
+ 26520 272f 32 .uleb128 0x32
+ 26521 2730 600D0000 .long 0xd60
+ 26522 2734 03 .byte 0x3
+ 26523 2735 91 .byte 0x91
+ 26524 2736 E04B .sleb128 -6688
+ 26525 2738 00 .byte 0x0
+ 26526 2739 31 .uleb128 0x31
+ 26527 273a A00D0000 .long 0xda0
+ 26528 273e 00000000 .quad .LBB906
+ 26528 00000000
+ 26529 2746 00000000 .quad .LBE906
+ 26529 00000000
+ 26530 274e 02 .byte 0x2
+ 26531 274f 6403 .value 0x364
+ 26532 2751 93270000 .long 0x2793
+ 26533 2755 32 .uleb128 0x32
+ 26534 2756 BE0D0000 .long 0xdbe
+ 26535 275a 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 745
+
+
+ 26536 275b 91 .byte 0x91
+ 26537 275c F04B .sleb128 -6672
+ 26538 275e 32 .uleb128 0x32
+ 26539 275f B20D0000 .long 0xdb2
+ 26540 2763 03 .byte 0x3
+ 26541 2764 91 .byte 0x91
+ 26542 2765 804C .sleb128 -6656
+ 26543 2767 35 .uleb128 0x35
+ 26544 2768 CB0D0000 .long 0xdcb
+ 26545 276c 00000000 .quad .LBB908
+ 26545 00000000
+ 26546 2774 00000000 .quad .LBE908
+ 26546 00000000
+ 26547 277c 02 .byte 0x2
+ 26548 277d 7501 .value 0x175
+ 26549 277f 32 .uleb128 0x32
+ 26550 2780 E90D0000 .long 0xde9
+ 26551 2784 03 .byte 0x3
+ 26552 2785 91 .byte 0x91
+ 26553 2786 904C .sleb128 -6640
+ 26554 2788 32 .uleb128 0x32
+ 26555 2789 DD0D0000 .long 0xddd
+ 26556 278d 03 .byte 0x3
+ 26557 278e 91 .byte 0x91
+ 26558 278f A04C .sleb128 -6624
+ 26559 2791 00 .byte 0x0
+ 26560 2792 00 .byte 0x0
+ 26561 2793 31 .uleb128 0x31
+ 26562 2794 FB0D0000 .long 0xdfb
+ 26563 2798 00000000 .quad .LBB910
+ 26563 00000000
+ 26564 27a0 00000000 .quad .LBE910
+ 26564 00000000
+ 26565 27a8 02 .byte 0x2
+ 26566 27a9 6603 .value 0x366
+ 26567 27ab C2270000 .long 0x27c2
+ 26568 27af 32 .uleb128 0x32
+ 26569 27b0 160E0000 .long 0xe16
+ 26570 27b4 03 .byte 0x3
+ 26571 27b5 91 .byte 0x91
+ 26572 27b6 B04C .sleb128 -6608
+ 26573 27b8 32 .uleb128 0x32
+ 26574 27b9 0C0E0000 .long 0xe0c
+ 26575 27bd 03 .byte 0x3
+ 26576 27be 91 .byte 0x91
+ 26577 27bf C04C .sleb128 -6592
+ 26578 27c1 00 .byte 0x0
+ 26579 27c2 31 .uleb128 0x31
+ 26580 27c3 A00D0000 .long 0xda0
+ 26581 27c7 00000000 .quad .LBB912
+ 26581 00000000
+ 26582 27cf 00000000 .quad .LBE912
+ 26582 00000000
+ 26583 27d7 02 .byte 0x2
+ 26584 27d8 6803 .value 0x368
+ 26585 27da 1C280000 .long 0x281c
+ 26586 27de 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 746
+
+
+ 26587 27df BE0D0000 .long 0xdbe
+ 26588 27e3 03 .byte 0x3
+ 26589 27e4 91 .byte 0x91
+ 26590 27e5 D04C .sleb128 -6576
+ 26591 27e7 32 .uleb128 0x32
+ 26592 27e8 B20D0000 .long 0xdb2
+ 26593 27ec 03 .byte 0x3
+ 26594 27ed 91 .byte 0x91
+ 26595 27ee E04C .sleb128 -6560
+ 26596 27f0 35 .uleb128 0x35
+ 26597 27f1 CB0D0000 .long 0xdcb
+ 26598 27f5 00000000 .quad .LBB914
+ 26598 00000000
+ 26599 27fd 00000000 .quad .LBE914
+ 26599 00000000
+ 26600 2805 02 .byte 0x2
+ 26601 2806 7501 .value 0x175
+ 26602 2808 32 .uleb128 0x32
+ 26603 2809 E90D0000 .long 0xde9
+ 26604 280d 03 .byte 0x3
+ 26605 280e 91 .byte 0x91
+ 26606 280f F04C .sleb128 -6544
+ 26607 2811 32 .uleb128 0x32
+ 26608 2812 DD0D0000 .long 0xddd
+ 26609 2816 03 .byte 0x3
+ 26610 2817 91 .byte 0x91
+ 26611 2818 804D .sleb128 -6528
+ 26612 281a 00 .byte 0x0
+ 26613 281b 00 .byte 0x0
+ 26614 281c 31 .uleb128 0x31
+ 26615 281d FB0D0000 .long 0xdfb
+ 26616 2821 00000000 .quad .LBB916
+ 26616 00000000
+ 26617 2829 00000000 .quad .LBE916
+ 26617 00000000
+ 26618 2831 02 .byte 0x2
+ 26619 2832 6A03 .value 0x36a
+ 26620 2834 4B280000 .long 0x284b
+ 26621 2838 32 .uleb128 0x32
+ 26622 2839 160E0000 .long 0xe16
+ 26623 283d 03 .byte 0x3
+ 26624 283e 91 .byte 0x91
+ 26625 283f 904D .sleb128 -6512
+ 26626 2841 32 .uleb128 0x32
+ 26627 2842 0C0E0000 .long 0xe0c
+ 26628 2846 03 .byte 0x3
+ 26629 2847 91 .byte 0x91
+ 26630 2848 A04D .sleb128 -6496
+ 26631 284a 00 .byte 0x0
+ 26632 284b 31 .uleb128 0x31
+ 26633 284c 210E0000 .long 0xe21
+ 26634 2850 00000000 .quad .LBB918
+ 26634 00000000
+ 26635 2858 00000000 .quad .LBE918
+ 26635 00000000
+ 26636 2860 02 .byte 0x2
+ 26637 2861 6C03 .value 0x36c
+
GAS LISTING /tmp/ccjbMjHD.s page 747
+
+
+ 26638 2863 7A280000 .long 0x287a
+ 26639 2867 32 .uleb128 0x32
+ 26640 2868 3E0E0000 .long 0xe3e
+ 26641 286c 03 .byte 0x3
+ 26642 286d 91 .byte 0x91
+ 26643 286e B04D .sleb128 -6480
+ 26644 2870 32 .uleb128 0x32
+ 26645 2871 330E0000 .long 0xe33
+ 26646 2875 03 .byte 0x3
+ 26647 2876 91 .byte 0x91
+ 26648 2877 C04D .sleb128 -6464
+ 26649 2879 00 .byte 0x0
+ 26650 287a 35 .uleb128 0x35
+ 26651 287b 4F0D0000 .long 0xd4f
+ 26652 287f 00000000 .quad .LBB920
+ 26652 00000000
+ 26653 2887 00000000 .quad .LBE920
+ 26653 00000000
+ 26654 288f 02 .byte 0x2
+ 26655 2890 6E03 .value 0x36e
+ 26656 2892 32 .uleb128 0x32
+ 26657 2893 6A0D0000 .long 0xd6a
+ 26658 2897 03 .byte 0x3
+ 26659 2898 91 .byte 0x91
+ 26660 2899 D04D .sleb128 -6448
+ 26661 289b 32 .uleb128 0x32
+ 26662 289c 600D0000 .long 0xd60
+ 26663 28a0 03 .byte 0x3
+ 26664 28a1 91 .byte 0x91
+ 26665 28a2 E04D .sleb128 -6432
+ 26666 28a4 00 .byte 0x0
+ 26667 28a5 00 .byte 0x0
+ 26668 28a6 00 .byte 0x0
+ 26669 28a7 00 .byte 0x0
+ 26670 28a8 36 .uleb128 0x36
+ 26671 28a9 00000000 .quad .LBB922
+ 26671 00000000
+ 26672 28b1 00000000 .quad .LBE922
+ 26672 00000000
+ 26673 28b9 C8280000 .long 0x28c8
+ 26674 28bd 34 .uleb128 0x34
+ 26675 28be 1C0C0000 .long 0xc1c
+ 26676 28c2 04 .byte 0x4
+ 26677 28c3 91 .byte 0x91
+ 26678 28c4 E0AE7F .sleb128 -10400
+ 26679 28c7 00 .byte 0x0
+ 26680 28c8 31 .uleb128 0x31
+ 26681 28c9 4A0E0000 .long 0xe4a
+ 26682 28cd 00000000 .quad .LBB923
+ 26682 00000000
+ 26683 28d5 00000000 .quad .LBE923
+ 26683 00000000
+ 26684 28dd 02 .byte 0x2
+ 26685 28de 9406 .value 0x694
+ 26686 28e0 65290000 .long 0x2965
+ 26687 28e4 32 .uleb128 0x32
+ 26688 28e5 5C0E0000 .long 0xe5c
+
GAS LISTING /tmp/ccjbMjHD.s page 748
+
+
+ 26689 28e9 03 .byte 0x3
+ 26690 28ea 91 .byte 0x91
+ 26691 28eb F04D .sleb128 -6416
+ 26692 28ed 33 .uleb128 0x33
+ 26693 28ee 00000000 .quad .LBB924
+ 26693 00000000
+ 26694 28f6 00000000 .quad .LBE924
+ 26694 00000000
+ 26695 28fe 34 .uleb128 0x34
+ 26696 28ff 680E0000 .long 0xe68
+ 26697 2903 09 .byte 0x9
+ 26698 2904 03 .byte 0x3
+ 26699 2905 00000000 .quad ShiftRowTable.7385
+ 26699 00000000
+ 26700 290d 35 .uleb128 0x35
+ 26701 290e A00D0000 .long 0xda0
+ 26702 2912 00000000 .quad .LBB925
+ 26702 00000000
+ 26703 291a 00000000 .quad .LBE925
+ 26703 00000000
+ 26704 2922 02 .byte 0x2
+ 26705 2923 9B02 .value 0x29b
+ 26706 2925 32 .uleb128 0x32
+ 26707 2926 BE0D0000 .long 0xdbe
+ 26708 292a 03 .byte 0x3
+ 26709 292b 91 .byte 0x91
+ 26710 292c 804E .sleb128 -6400
+ 26711 292e 32 .uleb128 0x32
+ 26712 292f B20D0000 .long 0xdb2
+ 26713 2933 03 .byte 0x3
+ 26714 2934 91 .byte 0x91
+ 26715 2935 904E .sleb128 -6384
+ 26716 2937 35 .uleb128 0x35
+ 26717 2938 CB0D0000 .long 0xdcb
+ 26718 293c 00000000 .quad .LBB927
+ 26718 00000000
+ 26719 2944 00000000 .quad .LBE927
+ 26719 00000000
+ 26720 294c 02 .byte 0x2
+ 26721 294d 7501 .value 0x175
+ 26722 294f 32 .uleb128 0x32
+ 26723 2950 E90D0000 .long 0xde9
+ 26724 2954 03 .byte 0x3
+ 26725 2955 91 .byte 0x91
+ 26726 2956 A04E .sleb128 -6368
+ 26727 2958 32 .uleb128 0x32
+ 26728 2959 DD0D0000 .long 0xddd
+ 26729 295d 03 .byte 0x3
+ 26730 295e 91 .byte 0x91
+ 26731 295f B04E .sleb128 -6352
+ 26732 2961 00 .byte 0x0
+ 26733 2962 00 .byte 0x0
+ 26734 2963 00 .byte 0x0
+ 26735 2964 00 .byte 0x0
+ 26736 2965 36 .uleb128 0x36
+ 26737 2966 00000000 .quad .LBB929
+ 26737 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 749
+
+
+ 26738 296e 00000000 .quad .LBE929
+ 26738 00000000
+ 26739 2976 85290000 .long 0x2985
+ 26740 297a 34 .uleb128 0x34
+ 26741 297b 2C0C0000 .long 0xc2c
+ 26742 297f 04 .byte 0x4
+ 26743 2980 91 .byte 0x91
+ 26744 2981 D0AE7F .sleb128 -10416
+ 26745 2984 00 .byte 0x0
+ 26746 2985 31 .uleb128 0x31
+ 26747 2986 860E0000 .long 0xe86
+ 26748 298a 00000000 .quad .LBB930
+ 26748 00000000
+ 26749 2992 00000000 .quad .LBE930
+ 26749 00000000
+ 26750 299a 02 .byte 0x2
+ 26751 299b 9606 .value 0x696
+ 26752 299d B4290000 .long 0x29b4
+ 26753 29a1 32 .uleb128 0x32
+ 26754 29a2 A10E0000 .long 0xea1
+ 26755 29a6 03 .byte 0x3
+ 26756 29a7 91 .byte 0x91
+ 26757 29a8 C04E .sleb128 -6336
+ 26758 29aa 32 .uleb128 0x32
+ 26759 29ab 970E0000 .long 0xe97
+ 26760 29af 03 .byte 0x3
+ 26761 29b0 91 .byte 0x91
+ 26762 29b1 D04E .sleb128 -6320
+ 26763 29b3 00 .byte 0x0
+ 26764 29b4 36 .uleb128 0x36
+ 26765 29b5 00000000 .quad .LBB932
+ 26765 00000000
+ 26766 29bd 00000000 .quad .LBE932
+ 26766 00000000
+ 26767 29c5 D4290000 .long 0x29d4
+ 26768 29c9 34 .uleb128 0x34
+ 26769 29ca 3C0C0000 .long 0xc3c
+ 26770 29ce 04 .byte 0x4
+ 26771 29cf 91 .byte 0x91
+ 26772 29d0 C0AE7F .sleb128 -10432
+ 26773 29d3 00 .byte 0x0
+ 26774 29d4 31 .uleb128 0x31
+ 26775 29d5 AC0E0000 .long 0xeac
+ 26776 29d9 00000000 .quad .LBB933
+ 26776 00000000
+ 26777 29e1 00000000 .quad .LBE933
+ 26777 00000000
+ 26778 29e9 02 .byte 0x2
+ 26779 29ea 9806 .value 0x698
+ 26780 29ec 252A0000 .long 0x2a25
+ 26781 29f0 32 .uleb128 0x32
+ 26782 29f1 BE0E0000 .long 0xebe
+ 26783 29f5 03 .byte 0x3
+ 26784 29f6 91 .byte 0x91
+ 26785 29f7 E04E .sleb128 -6304
+ 26786 29f9 35 .uleb128 0x35
+ 26787 29fa CB0E0000 .long 0xecb
+
GAS LISTING /tmp/ccjbMjHD.s page 750
+
+
+ 26788 29fe 00000000 .quad .LBB935
+ 26788 00000000
+ 26789 2a06 00000000 .quad .LBE935
+ 26789 00000000
+ 26790 2a0e 02 .byte 0x2
+ 26791 2a0f 4905 .value 0x549
+ 26792 2a11 32 .uleb128 0x32
+ 26793 2a12 E90E0000 .long 0xee9
+ 26794 2a16 03 .byte 0x3
+ 26795 2a17 91 .byte 0x91
+ 26796 2a18 FC4E .sleb128 -6276
+ 26797 2a1a 32 .uleb128 0x32
+ 26798 2a1b DD0E0000 .long 0xedd
+ 26799 2a1f 03 .byte 0x3
+ 26800 2a20 91 .byte 0x91
+ 26801 2a21 804F .sleb128 -6272
+ 26802 2a23 00 .byte 0x0
+ 26803 2a24 00 .byte 0x0
+ 26804 2a25 33 .uleb128 0x33
+ 26805 2a26 00000000 .quad .LBB937
+ 26805 00000000
+ 26806 2a2e 00000000 .quad .LBE937
+ 26806 00000000
+ 26807 2a36 34 .uleb128 0x34
+ 26808 2a37 480C0000 .long 0xc48
+ 26809 2a3b 04 .byte 0x4
+ 26810 2a3c 91 .byte 0x91
+ 26811 2a3d B0AE7F .sleb128 -10448
+ 26812 2a40 00 .byte 0x0
+ 26813 2a41 00 .byte 0x0
+ 26814 2a42 00 .byte 0x0
+ 26815 2a43 31 .uleb128 0x31
+ 26816 2a44 F60E0000 .long 0xef6
+ 26817 2a48 00000000 .quad .LBB938
+ 26817 00000000
+ 26818 2a50 00000000 .quad .LBE938
+ 26818 00000000
+ 26819 2a58 02 .byte 0x2
+ 26820 2a59 D306 .value 0x6d3
+ 26821 2a5b 582C0000 .long 0x2c58
+ 26822 2a5f 32 .uleb128 0x32
+ 26823 2a60 080F0000 .long 0xf08
+ 26824 2a64 03 .byte 0x3
+ 26825 2a65 91 .byte 0x91
+ 26826 2a66 904F .sleb128 -6256
+ 26827 2a68 33 .uleb128 0x33
+ 26828 2a69 00000000 .quad .LBB939
+ 26828 00000000
+ 26829 2a71 00000000 .quad .LBE939
+ 26829 00000000
+ 26830 2a79 34 .uleb128 0x34
+ 26831 2a7a 140F0000 .long 0xf14
+ 26832 2a7e 04 .byte 0x4
+ 26833 2a7f 76 .byte 0x76
+ 26834 2a80 C0AA7F .sleb128 -10944
+ 26835 2a83 31 .uleb128 0x31
+ 26836 2a84 210F0000 .long 0xf21
+
GAS LISTING /tmp/ccjbMjHD.s page 751
+
+
+ 26837 2a88 00000000 .quad .LBB940
+ 26837 00000000
+ 26838 2a90 00000000 .quad .LBE940
+ 26838 00000000
+ 26839 2a98 02 .byte 0x2
+ 26840 2a99 1F06 .value 0x61f
+ 26841 2a9b 202B0000 .long 0x2b20
+ 26842 2a9f 32 .uleb128 0x32
+ 26843 2aa0 330F0000 .long 0xf33
+ 26844 2aa4 03 .byte 0x3
+ 26845 2aa5 91 .byte 0x91
+ 26846 2aa6 A04F .sleb128 -6240
+ 26847 2aa8 33 .uleb128 0x33
+ 26848 2aa9 00000000 .quad .LBB941
+ 26848 00000000
+ 26849 2ab1 00000000 .quad .LBE941
+ 26849 00000000
+ 26850 2ab9 34 .uleb128 0x34
+ 26851 2aba 3F0F0000 .long 0xf3f
+ 26852 2abe 09 .byte 0x9
+ 26853 2abf 03 .byte 0x3
+ 26854 2ac0 00000000 .quad mask.7943
+ 26854 00000000
+ 26855 2ac8 35 .uleb128 0x35
+ 26856 2ac9 A00D0000 .long 0xda0
+ 26857 2acd 00000000 .quad .LBB942
+ 26857 00000000
+ 26858 2ad5 00000000 .quad .LBE942
+ 26858 00000000
+ 26859 2add 02 .byte 0x2
+ 26860 2ade FE04 .value 0x4fe
+ 26861 2ae0 32 .uleb128 0x32
+ 26862 2ae1 BE0D0000 .long 0xdbe
+ 26863 2ae5 03 .byte 0x3
+ 26864 2ae6 91 .byte 0x91
+ 26865 2ae7 B04F .sleb128 -6224
+ 26866 2ae9 32 .uleb128 0x32
+ 26867 2aea B20D0000 .long 0xdb2
+ 26868 2aee 03 .byte 0x3
+ 26869 2aef 91 .byte 0x91
+ 26870 2af0 C04F .sleb128 -6208
+ 26871 2af2 35 .uleb128 0x35
+ 26872 2af3 CB0D0000 .long 0xdcb
+ 26873 2af7 00000000 .quad .LBB944
+ 26873 00000000
+ 26874 2aff 00000000 .quad .LBE944
+ 26874 00000000
+ 26875 2b07 02 .byte 0x2
+ 26876 2b08 7501 .value 0x175
+ 26877 2b0a 32 .uleb128 0x32
+ 26878 2b0b E90D0000 .long 0xde9
+ 26879 2b0f 03 .byte 0x3
+ 26880 2b10 91 .byte 0x91
+ 26881 2b11 D04F .sleb128 -6192
+ 26882 2b13 32 .uleb128 0x32
+ 26883 2b14 DD0D0000 .long 0xddd
+ 26884 2b18 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 752
+
+
+ 26885 2b19 91 .byte 0x91
+ 26886 2b1a E04F .sleb128 -6176
+ 26887 2b1c 00 .byte 0x0
+ 26888 2b1d 00 .byte 0x0
+ 26889 2b1e 00 .byte 0x0
+ 26890 2b1f 00 .byte 0x0
+ 26891 2b20 31 .uleb128 0x31
+ 26892 2b21 210F0000 .long 0xf21
+ 26893 2b25 00000000 .quad .LBB946
+ 26893 00000000
+ 26894 2b2d 00000000 .quad .LBE946
+ 26894 00000000
+ 26895 2b35 02 .byte 0x2
+ 26896 2b36 2006 .value 0x620
+ 26897 2b38 BD2B0000 .long 0x2bbd
+ 26898 2b3c 32 .uleb128 0x32
+ 26899 2b3d 330F0000 .long 0xf33
+ 26900 2b41 03 .byte 0x3
+ 26901 2b42 91 .byte 0x91
+ 26902 2b43 F04F .sleb128 -6160
+ 26903 2b45 33 .uleb128 0x33
+ 26904 2b46 00000000 .quad .LBB947
+ 26904 00000000
+ 26905 2b4e 00000000 .quad .LBE947
+ 26905 00000000
+ 26906 2b56 34 .uleb128 0x34
+ 26907 2b57 3F0F0000 .long 0xf3f
+ 26908 2b5b 09 .byte 0x9
+ 26909 2b5c 03 .byte 0x3
+ 26910 2b5d 00000000 .quad mask.7943
+ 26910 00000000
+ 26911 2b65 35 .uleb128 0x35
+ 26912 2b66 A00D0000 .long 0xda0
+ 26913 2b6a 00000000 .quad .LBB948
+ 26913 00000000
+ 26914 2b72 00000000 .quad .LBE948
+ 26914 00000000
+ 26915 2b7a 02 .byte 0x2
+ 26916 2b7b FE04 .value 0x4fe
+ 26917 2b7d 32 .uleb128 0x32
+ 26918 2b7e BE0D0000 .long 0xdbe
+ 26919 2b82 03 .byte 0x3
+ 26920 2b83 91 .byte 0x91
+ 26921 2b84 8050 .sleb128 -6144
+ 26922 2b86 32 .uleb128 0x32
+ 26923 2b87 B20D0000 .long 0xdb2
+ 26924 2b8b 03 .byte 0x3
+ 26925 2b8c 91 .byte 0x91
+ 26926 2b8d 9050 .sleb128 -6128
+ 26927 2b8f 35 .uleb128 0x35
+ 26928 2b90 CB0D0000 .long 0xdcb
+ 26929 2b94 00000000 .quad .LBB950
+ 26929 00000000
+ 26930 2b9c 00000000 .quad .LBE950
+ 26930 00000000
+ 26931 2ba4 02 .byte 0x2
+ 26932 2ba5 7501 .value 0x175
+
GAS LISTING /tmp/ccjbMjHD.s page 753
+
+
+ 26933 2ba7 32 .uleb128 0x32
+ 26934 2ba8 E90D0000 .long 0xde9
+ 26935 2bac 03 .byte 0x3
+ 26936 2bad 91 .byte 0x91
+ 26937 2bae A050 .sleb128 -6112
+ 26938 2bb0 32 .uleb128 0x32
+ 26939 2bb1 DD0D0000 .long 0xddd
+ 26940 2bb5 03 .byte 0x3
+ 26941 2bb6 91 .byte 0x91
+ 26942 2bb7 B050 .sleb128 -6096
+ 26943 2bb9 00 .byte 0x0
+ 26944 2bba 00 .byte 0x0
+ 26945 2bbb 00 .byte 0x0
+ 26946 2bbc 00 .byte 0x0
+ 26947 2bbd 35 .uleb128 0x35
+ 26948 2bbe 210F0000 .long 0xf21
+ 26949 2bc2 00000000 .quad .LBB952
+ 26949 00000000
+ 26950 2bca 00000000 .quad .LBE952
+ 26950 00000000
+ 26951 2bd2 02 .byte 0x2
+ 26952 2bd3 2106 .value 0x621
+ 26953 2bd5 32 .uleb128 0x32
+ 26954 2bd6 330F0000 .long 0xf33
+ 26955 2bda 03 .byte 0x3
+ 26956 2bdb 91 .byte 0x91
+ 26957 2bdc C050 .sleb128 -6080
+ 26958 2bde 33 .uleb128 0x33
+ 26959 2bdf 00000000 .quad .LBB953
+ 26959 00000000
+ 26960 2be7 00000000 .quad .LBE953
+ 26960 00000000
+ 26961 2bef 34 .uleb128 0x34
+ 26962 2bf0 3F0F0000 .long 0xf3f
+ 26963 2bf4 09 .byte 0x9
+ 26964 2bf5 03 .byte 0x3
+ 26965 2bf6 00000000 .quad mask.7943
+ 26965 00000000
+ 26966 2bfe 35 .uleb128 0x35
+ 26967 2bff A00D0000 .long 0xda0
+ 26968 2c03 00000000 .quad .LBB954
+ 26968 00000000
+ 26969 2c0b 00000000 .quad .LBE954
+ 26969 00000000
+ 26970 2c13 02 .byte 0x2
+ 26971 2c14 FE04 .value 0x4fe
+ 26972 2c16 32 .uleb128 0x32
+ 26973 2c17 BE0D0000 .long 0xdbe
+ 26974 2c1b 03 .byte 0x3
+ 26975 2c1c 91 .byte 0x91
+ 26976 2c1d D050 .sleb128 -6064
+ 26977 2c1f 32 .uleb128 0x32
+ 26978 2c20 B20D0000 .long 0xdb2
+ 26979 2c24 03 .byte 0x3
+ 26980 2c25 91 .byte 0x91
+ 26981 2c26 E050 .sleb128 -6048
+ 26982 2c28 35 .uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s page 754
+
+
+ 26983 2c29 CB0D0000 .long 0xdcb
+ 26984 2c2d 00000000 .quad .LBB956
+ 26984 00000000
+ 26985 2c35 00000000 .quad .LBE956
+ 26985 00000000
+ 26986 2c3d 02 .byte 0x2
+ 26987 2c3e 7501 .value 0x175
+ 26988 2c40 32 .uleb128 0x32
+ 26989 2c41 E90D0000 .long 0xde9
+ 26990 2c45 03 .byte 0x3
+ 26991 2c46 91 .byte 0x91
+ 26992 2c47 F050 .sleb128 -6032
+ 26993 2c49 32 .uleb128 0x32
+ 26994 2c4a DD0D0000 .long 0xddd
+ 26995 2c4e 03 .byte 0x3
+ 26996 2c4f 91 .byte 0x91
+ 26997 2c50 8051 .sleb128 -6016
+ 26998 2c52 00 .byte 0x0
+ 26999 2c53 00 .byte 0x0
+ 27000 2c54 00 .byte 0x0
+ 27001 2c55 00 .byte 0x0
+ 27002 2c56 00 .byte 0x0
+ 27003 2c57 00 .byte 0x0
+ 27004 2c58 31 .uleb128 0x31
+ 27005 2c59 D50B0000 .long 0xbd5
+ 27006 2c5d 00000000 .quad .LBB958
+ 27006 00000000
+ 27007 2c65 00000000 .quad .LBE958
+ 27007 00000000
+ 27008 2c6d 02 .byte 0x2
+ 27009 2c6e D406 .value 0x6d4
+ 27010 2c70 3B310000 .long 0x313b
+ 27011 2c74 32 .uleb128 0x32
+ 27012 2c75 F30B0000 .long 0xbf3
+ 27013 2c79 03 .byte 0x3
+ 27014 2c7a 91 .byte 0x91
+ 27015 2c7b 9C51 .sleb128 -5988
+ 27016 2c7d 32 .uleb128 0x32
+ 27017 2c7e E70B0000 .long 0xbe7
+ 27018 2c82 03 .byte 0x3
+ 27019 2c83 91 .byte 0x91
+ 27020 2c84 A051 .sleb128 -5984
+ 27021 2c86 33 .uleb128 0x33
+ 27022 2c87 00000000 .quad .LBB959
+ 27022 00000000
+ 27023 2c8f 00000000 .quad .LBE959
+ 27023 00000000
+ 27024 2c97 34 .uleb128 0x34
+ 27025 2c98 FF0B0000 .long 0xbff
+ 27026 2c9c 04 .byte 0x4
+ 27027 2c9d 76 .byte 0x76
+ 27028 2c9e E0AA7F .sleb128 -10912
+ 27029 2ca1 34 .uleb128 0x34
+ 27030 2ca2 0B0C0000 .long 0xc0b
+ 27031 2ca6 04 .byte 0x4
+ 27032 2ca7 76 .byte 0x76
+ 27033 2ca8 D0AA7F .sleb128 -10928
+
GAS LISTING /tmp/ccjbMjHD.s page 755
+
+
+ 27034 2cab 31 .uleb128 0x31
+ 27035 2cac 540C0000 .long 0xc54
+ 27036 2cb0 00000000 .quad .LBB960
+ 27036 00000000
+ 27037 2cb8 00000000 .quad .LBE960
+ 27037 00000000
+ 27038 2cc0 02 .byte 0x2
+ 27039 2cc1 9106 .value 0x691
+ 27040 2cc3 172D0000 .long 0x2d17
+ 27041 2cc7 32 .uleb128 0x32
+ 27042 2cc8 7E0C0000 .long 0xc7e
+ 27043 2ccc 03 .byte 0x3
+ 27044 2ccd 91 .byte 0x91
+ 27045 2cce B851 .sleb128 -5960
+ 27046 2cd0 32 .uleb128 0x32
+ 27047 2cd1 720C0000 .long 0xc72
+ 27048 2cd5 03 .byte 0x3
+ 27049 2cd6 91 .byte 0x91
+ 27050 2cd7 BC51 .sleb128 -5956
+ 27051 2cd9 32 .uleb128 0x32
+ 27052 2cda 660C0000 .long 0xc66
+ 27053 2cde 03 .byte 0x3
+ 27054 2cdf 91 .byte 0x91
+ 27055 2ce0 C051 .sleb128 -5952
+ 27056 2ce2 35 .uleb128 0x35
+ 27057 2ce3 8B0C0000 .long 0xc8b
+ 27058 2ce7 00000000 .quad .LBB962
+ 27058 00000000
+ 27059 2cef 00000000 .quad .LBE962
+ 27059 00000000
+ 27060 2cf7 02 .byte 0x2
+ 27061 2cf8 0702 .value 0x207
+ 27062 2cfa 32 .uleb128 0x32
+ 27063 2cfb B40C0000 .long 0xcb4
+ 27064 2cff 03 .byte 0x3
+ 27065 2d00 91 .byte 0x91
+ 27066 2d01 D851 .sleb128 -5928
+ 27067 2d03 32 .uleb128 0x32
+ 27068 2d04 A90C0000 .long 0xca9
+ 27069 2d08 03 .byte 0x3
+ 27070 2d09 91 .byte 0x91
+ 27071 2d0a DC51 .sleb128 -5924
+ 27072 2d0c 32 .uleb128 0x32
+ 27073 2d0d 9D0C0000 .long 0xc9d
+ 27074 2d11 03 .byte 0x3
+ 27075 2d12 91 .byte 0x91
+ 27076 2d13 E051 .sleb128 -5920
+ 27077 2d15 00 .byte 0x0
+ 27078 2d16 00 .byte 0x0
+ 27079 2d17 31 .uleb128 0x31
+ 27080 2d18 C10C0000 .long 0xcc1
+ 27081 2d1c 00000000 .quad .LBB964
+ 27081 00000000
+ 27082 2d24 00000000 .quad .LBE964
+ 27082 00000000
+ 27083 2d2c 02 .byte 0x2
+ 27084 2d2d 9206 .value 0x692
+
GAS LISTING /tmp/ccjbMjHD.s page 756
+
+
+ 27085 2d2f A02F0000 .long 0x2fa0
+ 27086 2d33 32 .uleb128 0x32
+ 27087 2d34 D30C0000 .long 0xcd3
+ 27088 2d38 03 .byte 0x3
+ 27089 2d39 91 .byte 0x91
+ 27090 2d3a F051 .sleb128 -5904
+ 27091 2d3c 35 .uleb128 0x35
+ 27092 2d3d E00C0000 .long 0xce0
+ 27093 2d41 00000000 .quad .LBB966
+ 27093 00000000
+ 27094 2d49 00000000 .quad .LBE966
+ 27094 00000000
+ 27095 2d51 02 .byte 0x2
+ 27096 2d52 7D03 .value 0x37d
+ 27097 2d54 32 .uleb128 0x32
+ 27098 2d55 FE0C0000 .long 0xcfe
+ 27099 2d59 03 .byte 0x3
+ 27100 2d5a 91 .byte 0x91
+ 27101 2d5b 8852 .sleb128 -5880
+ 27102 2d5d 32 .uleb128 0x32
+ 27103 2d5e F20C0000 .long 0xcf2
+ 27104 2d62 03 .byte 0x3
+ 27105 2d63 91 .byte 0x91
+ 27106 2d64 9052 .sleb128 -5872
+ 27107 2d66 33 .uleb128 0x33
+ 27108 2d67 00000000 .quad .LBB967
+ 27108 00000000
+ 27109 2d6f 00000000 .quad .LBE967
+ 27109 00000000
+ 27110 2d77 34 .uleb128 0x34
+ 27111 2d78 0A0D0000 .long 0xd0a
+ 27112 2d7c 03 .byte 0x3
+ 27113 2d7d 91 .byte 0x91
+ 27114 2d7e E052 .sleb128 -5792
+ 27115 2d80 34 .uleb128 0x34
+ 27116 2d81 150D0000 .long 0xd15
+ 27117 2d85 03 .byte 0x3
+ 27118 2d86 91 .byte 0x91
+ 27119 2d87 D052 .sleb128 -5808
+ 27120 2d89 34 .uleb128 0x34
+ 27121 2d8a 200D0000 .long 0xd20
+ 27122 2d8e 03 .byte 0x3
+ 27123 2d8f 91 .byte 0x91
+ 27124 2d90 C052 .sleb128 -5824
+ 27125 2d92 34 .uleb128 0x34
+ 27126 2d93 2C0D0000 .long 0xd2c
+ 27127 2d97 03 .byte 0x3
+ 27128 2d98 91 .byte 0x91
+ 27129 2d99 B052 .sleb128 -5840
+ 27130 2d9b 34 .uleb128 0x34
+ 27131 2d9c 380D0000 .long 0xd38
+ 27132 2da0 03 .byte 0x3
+ 27133 2da1 91 .byte 0x91
+ 27134 2da2 AC52 .sleb128 -5844
+ 27135 2da4 31 .uleb128 0x31
+ 27136 2da5 4F0D0000 .long 0xd4f
+ 27137 2da9 00000000 .quad .LBB968
+
GAS LISTING /tmp/ccjbMjHD.s page 757
+
+
+ 27137 00000000
+ 27138 2db1 00000000 .quad .LBE968
+ 27138 00000000
+ 27139 2db9 02 .byte 0x2
+ 27140 2dba 5603 .value 0x356
+ 27141 2dbc D32D0000 .long 0x2dd3
+ 27142 2dc0 32 .uleb128 0x32
+ 27143 2dc1 6A0D0000 .long 0xd6a
+ 27144 2dc5 03 .byte 0x3
+ 27145 2dc6 91 .byte 0x91
+ 27146 2dc7 F052 .sleb128 -5776
+ 27147 2dc9 32 .uleb128 0x32
+ 27148 2dca 600D0000 .long 0xd60
+ 27149 2dce 03 .byte 0x3
+ 27150 2dcf 91 .byte 0x91
+ 27151 2dd0 8053 .sleb128 -5760
+ 27152 2dd2 00 .byte 0x0
+ 27153 2dd3 31 .uleb128 0x31
+ 27154 2dd4 750D0000 .long 0xd75
+ 27155 2dd8 00000000 .quad .LBB970
+ 27155 00000000
+ 27156 2de0 00000000 .quad .LBE970
+ 27156 00000000
+ 27157 2de8 02 .byte 0x2
+ 27158 2de9 5903 .value 0x359
+ 27159 2deb 022E0000 .long 0x2e02
+ 27160 2def 32 .uleb128 0x32
+ 27161 2df0 930D0000 .long 0xd93
+ 27162 2df4 03 .byte 0x3
+ 27163 2df5 91 .byte 0x91
+ 27164 2df6 9C53 .sleb128 -5732
+ 27165 2df8 32 .uleb128 0x32
+ 27166 2df9 870D0000 .long 0xd87
+ 27167 2dfd 03 .byte 0x3
+ 27168 2dfe 91 .byte 0x91
+ 27169 2dff A053 .sleb128 -5728
+ 27170 2e01 00 .byte 0x0
+ 27171 2e02 31 .uleb128 0x31
+ 27172 2e03 4F0D0000 .long 0xd4f
+ 27173 2e07 00000000 .quad .LBB972
+ 27173 00000000
+ 27174 2e0f 00000000 .quad .LBE972
+ 27174 00000000
+ 27175 2e17 02 .byte 0x2
+ 27176 2e18 5B03 .value 0x35b
+ 27177 2e1a 312E0000 .long 0x2e31
+ 27178 2e1e 32 .uleb128 0x32
+ 27179 2e1f 6A0D0000 .long 0xd6a
+ 27180 2e23 03 .byte 0x3
+ 27181 2e24 91 .byte 0x91
+ 27182 2e25 B053 .sleb128 -5712
+ 27183 2e27 32 .uleb128 0x32
+ 27184 2e28 600D0000 .long 0xd60
+ 27185 2e2c 03 .byte 0x3
+ 27186 2e2d 91 .byte 0x91
+ 27187 2e2e C053 .sleb128 -5696
+ 27188 2e30 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 758
+
+
+ 27189 2e31 31 .uleb128 0x31
+ 27190 2e32 A00D0000 .long 0xda0
+ 27191 2e36 00000000 .quad .LBB974
+ 27191 00000000
+ 27192 2e3e 00000000 .quad .LBE974
+ 27192 00000000
+ 27193 2e46 02 .byte 0x2
+ 27194 2e47 6403 .value 0x364
+ 27195 2e49 8B2E0000 .long 0x2e8b
+ 27196 2e4d 32 .uleb128 0x32
+ 27197 2e4e BE0D0000 .long 0xdbe
+ 27198 2e52 03 .byte 0x3
+ 27199 2e53 91 .byte 0x91
+ 27200 2e54 D053 .sleb128 -5680
+ 27201 2e56 32 .uleb128 0x32
+ 27202 2e57 B20D0000 .long 0xdb2
+ 27203 2e5b 03 .byte 0x3
+ 27204 2e5c 91 .byte 0x91
+ 27205 2e5d E053 .sleb128 -5664
+ 27206 2e5f 35 .uleb128 0x35
+ 27207 2e60 CB0D0000 .long 0xdcb
+ 27208 2e64 00000000 .quad .LBB976
+ 27208 00000000
+ 27209 2e6c 00000000 .quad .LBE976
+ 27209 00000000
+ 27210 2e74 02 .byte 0x2
+ 27211 2e75 7501 .value 0x175
+ 27212 2e77 32 .uleb128 0x32
+ 27213 2e78 E90D0000 .long 0xde9
+ 27214 2e7c 03 .byte 0x3
+ 27215 2e7d 91 .byte 0x91
+ 27216 2e7e F053 .sleb128 -5648
+ 27217 2e80 32 .uleb128 0x32
+ 27218 2e81 DD0D0000 .long 0xddd
+ 27219 2e85 03 .byte 0x3
+ 27220 2e86 91 .byte 0x91
+ 27221 2e87 8054 .sleb128 -5632
+ 27222 2e89 00 .byte 0x0
+ 27223 2e8a 00 .byte 0x0
+ 27224 2e8b 31 .uleb128 0x31
+ 27225 2e8c FB0D0000 .long 0xdfb
+ 27226 2e90 00000000 .quad .LBB978
+ 27226 00000000
+ 27227 2e98 00000000 .quad .LBE978
+ 27227 00000000
+ 27228 2ea0 02 .byte 0x2
+ 27229 2ea1 6603 .value 0x366
+ 27230 2ea3 BA2E0000 .long 0x2eba
+ 27231 2ea7 32 .uleb128 0x32
+ 27232 2ea8 160E0000 .long 0xe16
+ 27233 2eac 03 .byte 0x3
+ 27234 2ead 91 .byte 0x91
+ 27235 2eae 9054 .sleb128 -5616
+ 27236 2eb0 32 .uleb128 0x32
+ 27237 2eb1 0C0E0000 .long 0xe0c
+ 27238 2eb5 03 .byte 0x3
+ 27239 2eb6 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 759
+
+
+ 27240 2eb7 A054 .sleb128 -5600
+ 27241 2eb9 00 .byte 0x0
+ 27242 2eba 31 .uleb128 0x31
+ 27243 2ebb A00D0000 .long 0xda0
+ 27244 2ebf 00000000 .quad .LBB980
+ 27244 00000000
+ 27245 2ec7 00000000 .quad .LBE980
+ 27245 00000000
+ 27246 2ecf 02 .byte 0x2
+ 27247 2ed0 6803 .value 0x368
+ 27248 2ed2 142F0000 .long 0x2f14
+ 27249 2ed6 32 .uleb128 0x32
+ 27250 2ed7 BE0D0000 .long 0xdbe
+ 27251 2edb 03 .byte 0x3
+ 27252 2edc 91 .byte 0x91
+ 27253 2edd B054 .sleb128 -5584
+ 27254 2edf 32 .uleb128 0x32
+ 27255 2ee0 B20D0000 .long 0xdb2
+ 27256 2ee4 03 .byte 0x3
+ 27257 2ee5 91 .byte 0x91
+ 27258 2ee6 C054 .sleb128 -5568
+ 27259 2ee8 35 .uleb128 0x35
+ 27260 2ee9 CB0D0000 .long 0xdcb
+ 27261 2eed 00000000 .quad .LBB982
+ 27261 00000000
+ 27262 2ef5 00000000 .quad .LBE982
+ 27262 00000000
+ 27263 2efd 02 .byte 0x2
+ 27264 2efe 7501 .value 0x175
+ 27265 2f00 32 .uleb128 0x32
+ 27266 2f01 E90D0000 .long 0xde9
+ 27267 2f05 03 .byte 0x3
+ 27268 2f06 91 .byte 0x91
+ 27269 2f07 D054 .sleb128 -5552
+ 27270 2f09 32 .uleb128 0x32
+ 27271 2f0a DD0D0000 .long 0xddd
+ 27272 2f0e 03 .byte 0x3
+ 27273 2f0f 91 .byte 0x91
+ 27274 2f10 E054 .sleb128 -5536
+ 27275 2f12 00 .byte 0x0
+ 27276 2f13 00 .byte 0x0
+ 27277 2f14 31 .uleb128 0x31
+ 27278 2f15 FB0D0000 .long 0xdfb
+ 27279 2f19 00000000 .quad .LBB984
+ 27279 00000000
+ 27280 2f21 00000000 .quad .LBE984
+ 27280 00000000
+ 27281 2f29 02 .byte 0x2
+ 27282 2f2a 6A03 .value 0x36a
+ 27283 2f2c 432F0000 .long 0x2f43
+ 27284 2f30 32 .uleb128 0x32
+ 27285 2f31 160E0000 .long 0xe16
+ 27286 2f35 03 .byte 0x3
+ 27287 2f36 91 .byte 0x91
+ 27288 2f37 F054 .sleb128 -5520
+ 27289 2f39 32 .uleb128 0x32
+ 27290 2f3a 0C0E0000 .long 0xe0c
+
GAS LISTING /tmp/ccjbMjHD.s page 760
+
+
+ 27291 2f3e 03 .byte 0x3
+ 27292 2f3f 91 .byte 0x91
+ 27293 2f40 8055 .sleb128 -5504
+ 27294 2f42 00 .byte 0x0
+ 27295 2f43 31 .uleb128 0x31
+ 27296 2f44 210E0000 .long 0xe21
+ 27297 2f48 00000000 .quad .LBB986
+ 27297 00000000
+ 27298 2f50 00000000 .quad .LBE986
+ 27298 00000000
+ 27299 2f58 02 .byte 0x2
+ 27300 2f59 6C03 .value 0x36c
+ 27301 2f5b 722F0000 .long 0x2f72
+ 27302 2f5f 32 .uleb128 0x32
+ 27303 2f60 3E0E0000 .long 0xe3e
+ 27304 2f64 03 .byte 0x3
+ 27305 2f65 91 .byte 0x91
+ 27306 2f66 9055 .sleb128 -5488
+ 27307 2f68 32 .uleb128 0x32
+ 27308 2f69 330E0000 .long 0xe33
+ 27309 2f6d 03 .byte 0x3
+ 27310 2f6e 91 .byte 0x91
+ 27311 2f6f A055 .sleb128 -5472
+ 27312 2f71 00 .byte 0x0
+ 27313 2f72 35 .uleb128 0x35
+ 27314 2f73 4F0D0000 .long 0xd4f
+ 27315 2f77 00000000 .quad .LBB988
+ 27315 00000000
+ 27316 2f7f 00000000 .quad .LBE988
+ 27316 00000000
+ 27317 2f87 02 .byte 0x2
+ 27318 2f88 6E03 .value 0x36e
+ 27319 2f8a 32 .uleb128 0x32
+ 27320 2f8b 6A0D0000 .long 0xd6a
+ 27321 2f8f 03 .byte 0x3
+ 27322 2f90 91 .byte 0x91
+ 27323 2f91 B055 .sleb128 -5456
+ 27324 2f93 32 .uleb128 0x32
+ 27325 2f94 600D0000 .long 0xd60
+ 27326 2f98 03 .byte 0x3
+ 27327 2f99 91 .byte 0x91
+ 27328 2f9a C055 .sleb128 -5440
+ 27329 2f9c 00 .byte 0x0
+ 27330 2f9d 00 .byte 0x0
+ 27331 2f9e 00 .byte 0x0
+ 27332 2f9f 00 .byte 0x0
+ 27333 2fa0 36 .uleb128 0x36
+ 27334 2fa1 00000000 .quad .LBB990
+ 27334 00000000
+ 27335 2fa9 00000000 .quad .LBE990
+ 27335 00000000
+ 27336 2fb1 C02F0000 .long 0x2fc0
+ 27337 2fb5 34 .uleb128 0x34
+ 27338 2fb6 1C0C0000 .long 0xc1c
+ 27339 2fba 04 .byte 0x4
+ 27340 2fbb 91 .byte 0x91
+ 27341 2fbc A0AF7F .sleb128 -10336
+
GAS LISTING /tmp/ccjbMjHD.s page 761
+
+
+ 27342 2fbf 00 .byte 0x0
+ 27343 2fc0 31 .uleb128 0x31
+ 27344 2fc1 4A0E0000 .long 0xe4a
+ 27345 2fc5 00000000 .quad .LBB991
+ 27345 00000000
+ 27346 2fcd 00000000 .quad .LBE991
+ 27346 00000000
+ 27347 2fd5 02 .byte 0x2
+ 27348 2fd6 9406 .value 0x694
+ 27349 2fd8 5D300000 .long 0x305d
+ 27350 2fdc 32 .uleb128 0x32
+ 27351 2fdd 5C0E0000 .long 0xe5c
+ 27352 2fe1 03 .byte 0x3
+ 27353 2fe2 91 .byte 0x91
+ 27354 2fe3 D055 .sleb128 -5424
+ 27355 2fe5 33 .uleb128 0x33
+ 27356 2fe6 00000000 .quad .LBB992
+ 27356 00000000
+ 27357 2fee 00000000 .quad .LBE992
+ 27357 00000000
+ 27358 2ff6 34 .uleb128 0x34
+ 27359 2ff7 680E0000 .long 0xe68
+ 27360 2ffb 09 .byte 0x9
+ 27361 2ffc 03 .byte 0x3
+ 27362 2ffd 00000000 .quad ShiftRowTable.7385
+ 27362 00000000
+ 27363 3005 35 .uleb128 0x35
+ 27364 3006 A00D0000 .long 0xda0
+ 27365 300a 00000000 .quad .LBB993
+ 27365 00000000
+ 27366 3012 00000000 .quad .LBE993
+ 27366 00000000
+ 27367 301a 02 .byte 0x2
+ 27368 301b 9B02 .value 0x29b
+ 27369 301d 32 .uleb128 0x32
+ 27370 301e BE0D0000 .long 0xdbe
+ 27371 3022 03 .byte 0x3
+ 27372 3023 91 .byte 0x91
+ 27373 3024 E055 .sleb128 -5408
+ 27374 3026 32 .uleb128 0x32
+ 27375 3027 B20D0000 .long 0xdb2
+ 27376 302b 03 .byte 0x3
+ 27377 302c 91 .byte 0x91
+ 27378 302d F055 .sleb128 -5392
+ 27379 302f 35 .uleb128 0x35
+ 27380 3030 CB0D0000 .long 0xdcb
+ 27381 3034 00000000 .quad .LBB995
+ 27381 00000000
+ 27382 303c 00000000 .quad .LBE995
+ 27382 00000000
+ 27383 3044 02 .byte 0x2
+ 27384 3045 7501 .value 0x175
+ 27385 3047 32 .uleb128 0x32
+ 27386 3048 E90D0000 .long 0xde9
+ 27387 304c 03 .byte 0x3
+ 27388 304d 91 .byte 0x91
+ 27389 304e 8056 .sleb128 -5376
+
GAS LISTING /tmp/ccjbMjHD.s page 762
+
+
+ 27390 3050 32 .uleb128 0x32
+ 27391 3051 DD0D0000 .long 0xddd
+ 27392 3055 03 .byte 0x3
+ 27393 3056 91 .byte 0x91
+ 27394 3057 9056 .sleb128 -5360
+ 27395 3059 00 .byte 0x0
+ 27396 305a 00 .byte 0x0
+ 27397 305b 00 .byte 0x0
+ 27398 305c 00 .byte 0x0
+ 27399 305d 36 .uleb128 0x36
+ 27400 305e 00000000 .quad .LBB997
+ 27400 00000000
+ 27401 3066 00000000 .quad .LBE997
+ 27401 00000000
+ 27402 306e 7D300000 .long 0x307d
+ 27403 3072 34 .uleb128 0x34
+ 27404 3073 2C0C0000 .long 0xc2c
+ 27405 3077 04 .byte 0x4
+ 27406 3078 91 .byte 0x91
+ 27407 3079 90AF7F .sleb128 -10352
+ 27408 307c 00 .byte 0x0
+ 27409 307d 31 .uleb128 0x31
+ 27410 307e 860E0000 .long 0xe86
+ 27411 3082 00000000 .quad .LBB998
+ 27411 00000000
+ 27412 308a 00000000 .quad .LBE998
+ 27412 00000000
+ 27413 3092 02 .byte 0x2
+ 27414 3093 9606 .value 0x696
+ 27415 3095 AC300000 .long 0x30ac
+ 27416 3099 32 .uleb128 0x32
+ 27417 309a A10E0000 .long 0xea1
+ 27418 309e 03 .byte 0x3
+ 27419 309f 91 .byte 0x91
+ 27420 30a0 A056 .sleb128 -5344
+ 27421 30a2 32 .uleb128 0x32
+ 27422 30a3 970E0000 .long 0xe97
+ 27423 30a7 03 .byte 0x3
+ 27424 30a8 91 .byte 0x91
+ 27425 30a9 B056 .sleb128 -5328
+ 27426 30ab 00 .byte 0x0
+ 27427 30ac 36 .uleb128 0x36
+ 27428 30ad 00000000 .quad .LBB1000
+ 27428 00000000
+ 27429 30b5 00000000 .quad .LBE1000
+ 27429 00000000
+ 27430 30bd CC300000 .long 0x30cc
+ 27431 30c1 34 .uleb128 0x34
+ 27432 30c2 3C0C0000 .long 0xc3c
+ 27433 30c6 04 .byte 0x4
+ 27434 30c7 91 .byte 0x91
+ 27435 30c8 80AF7F .sleb128 -10368
+ 27436 30cb 00 .byte 0x0
+ 27437 30cc 31 .uleb128 0x31
+ 27438 30cd AC0E0000 .long 0xeac
+ 27439 30d1 00000000 .quad .LBB1001
+ 27439 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 763
+
+
+ 27440 30d9 00000000 .quad .LBE1001
+ 27440 00000000
+ 27441 30e1 02 .byte 0x2
+ 27442 30e2 9806 .value 0x698
+ 27443 30e4 1D310000 .long 0x311d
+ 27444 30e8 32 .uleb128 0x32
+ 27445 30e9 BE0E0000 .long 0xebe
+ 27446 30ed 03 .byte 0x3
+ 27447 30ee 91 .byte 0x91
+ 27448 30ef C056 .sleb128 -5312
+ 27449 30f1 35 .uleb128 0x35
+ 27450 30f2 CB0E0000 .long 0xecb
+ 27451 30f6 00000000 .quad .LBB1003
+ 27451 00000000
+ 27452 30fe 00000000 .quad .LBE1003
+ 27452 00000000
+ 27453 3106 02 .byte 0x2
+ 27454 3107 4905 .value 0x549
+ 27455 3109 32 .uleb128 0x32
+ 27456 310a E90E0000 .long 0xee9
+ 27457 310e 03 .byte 0x3
+ 27458 310f 91 .byte 0x91
+ 27459 3110 DC56 .sleb128 -5284
+ 27460 3112 32 .uleb128 0x32
+ 27461 3113 DD0E0000 .long 0xedd
+ 27462 3117 03 .byte 0x3
+ 27463 3118 91 .byte 0x91
+ 27464 3119 E056 .sleb128 -5280
+ 27465 311b 00 .byte 0x0
+ 27466 311c 00 .byte 0x0
+ 27467 311d 33 .uleb128 0x33
+ 27468 311e 00000000 .quad .LBB1005
+ 27468 00000000
+ 27469 3126 00000000 .quad .LBE1005
+ 27469 00000000
+ 27470 312e 34 .uleb128 0x34
+ 27471 312f 480C0000 .long 0xc48
+ 27472 3133 04 .byte 0x4
+ 27473 3134 91 .byte 0x91
+ 27474 3135 F0AE7F .sleb128 -10384
+ 27475 3138 00 .byte 0x0
+ 27476 3139 00 .byte 0x0
+ 27477 313a 00 .byte 0x0
+ 27478 313b 31 .uleb128 0x31
+ 27479 313c F60E0000 .long 0xef6
+ 27480 3140 00000000 .quad .LBB1006
+ 27480 00000000
+ 27481 3148 00000000 .quad .LBE1006
+ 27481 00000000
+ 27482 3150 02 .byte 0x2
+ 27483 3151 D406 .value 0x6d4
+ 27484 3153 50330000 .long 0x3350
+ 27485 3157 32 .uleb128 0x32
+ 27486 3158 080F0000 .long 0xf08
+ 27487 315c 03 .byte 0x3
+ 27488 315d 91 .byte 0x91
+ 27489 315e F056 .sleb128 -5264
+
GAS LISTING /tmp/ccjbMjHD.s page 764
+
+
+ 27490 3160 33 .uleb128 0x33
+ 27491 3161 00000000 .quad .LBB1007
+ 27491 00000000
+ 27492 3169 00000000 .quad .LBE1007
+ 27492 00000000
+ 27493 3171 34 .uleb128 0x34
+ 27494 3172 140F0000 .long 0xf14
+ 27495 3176 04 .byte 0x4
+ 27496 3177 76 .byte 0x76
+ 27497 3178 F0AA7F .sleb128 -10896
+ 27498 317b 31 .uleb128 0x31
+ 27499 317c 210F0000 .long 0xf21
+ 27500 3180 00000000 .quad .LBB1008
+ 27500 00000000
+ 27501 3188 00000000 .quad .LBE1008
+ 27501 00000000
+ 27502 3190 02 .byte 0x2
+ 27503 3191 1F06 .value 0x61f
+ 27504 3193 18320000 .long 0x3218
+ 27505 3197 32 .uleb128 0x32
+ 27506 3198 330F0000 .long 0xf33
+ 27507 319c 03 .byte 0x3
+ 27508 319d 91 .byte 0x91
+ 27509 319e 8057 .sleb128 -5248
+ 27510 31a0 33 .uleb128 0x33
+ 27511 31a1 00000000 .quad .LBB1009
+ 27511 00000000
+ 27512 31a9 00000000 .quad .LBE1009
+ 27512 00000000
+ 27513 31b1 34 .uleb128 0x34
+ 27514 31b2 3F0F0000 .long 0xf3f
+ 27515 31b6 09 .byte 0x9
+ 27516 31b7 03 .byte 0x3
+ 27517 31b8 00000000 .quad mask.7943
+ 27517 00000000
+ 27518 31c0 35 .uleb128 0x35
+ 27519 31c1 A00D0000 .long 0xda0
+ 27520 31c5 00000000 .quad .LBB1010
+ 27520 00000000
+ 27521 31cd 00000000 .quad .LBE1010
+ 27521 00000000
+ 27522 31d5 02 .byte 0x2
+ 27523 31d6 FE04 .value 0x4fe
+ 27524 31d8 32 .uleb128 0x32
+ 27525 31d9 BE0D0000 .long 0xdbe
+ 27526 31dd 03 .byte 0x3
+ 27527 31de 91 .byte 0x91
+ 27528 31df 9057 .sleb128 -5232
+ 27529 31e1 32 .uleb128 0x32
+ 27530 31e2 B20D0000 .long 0xdb2
+ 27531 31e6 03 .byte 0x3
+ 27532 31e7 91 .byte 0x91
+ 27533 31e8 A057 .sleb128 -5216
+ 27534 31ea 35 .uleb128 0x35
+ 27535 31eb CB0D0000 .long 0xdcb
+ 27536 31ef 00000000 .quad .LBB1012
+ 27536 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 765
+
+
+ 27537 31f7 00000000 .quad .LBE1012
+ 27537 00000000
+ 27538 31ff 02 .byte 0x2
+ 27539 3200 7501 .value 0x175
+ 27540 3202 32 .uleb128 0x32
+ 27541 3203 E90D0000 .long 0xde9
+ 27542 3207 03 .byte 0x3
+ 27543 3208 91 .byte 0x91
+ 27544 3209 B057 .sleb128 -5200
+ 27545 320b 32 .uleb128 0x32
+ 27546 320c DD0D0000 .long 0xddd
+ 27547 3210 03 .byte 0x3
+ 27548 3211 91 .byte 0x91
+ 27549 3212 C057 .sleb128 -5184
+ 27550 3214 00 .byte 0x0
+ 27551 3215 00 .byte 0x0
+ 27552 3216 00 .byte 0x0
+ 27553 3217 00 .byte 0x0
+ 27554 3218 31 .uleb128 0x31
+ 27555 3219 210F0000 .long 0xf21
+ 27556 321d 00000000 .quad .LBB1014
+ 27556 00000000
+ 27557 3225 00000000 .quad .LBE1014
+ 27557 00000000
+ 27558 322d 02 .byte 0x2
+ 27559 322e 2006 .value 0x620
+ 27560 3230 B5320000 .long 0x32b5
+ 27561 3234 32 .uleb128 0x32
+ 27562 3235 330F0000 .long 0xf33
+ 27563 3239 03 .byte 0x3
+ 27564 323a 91 .byte 0x91
+ 27565 323b D057 .sleb128 -5168
+ 27566 323d 33 .uleb128 0x33
+ 27567 323e 00000000 .quad .LBB1015
+ 27567 00000000
+ 27568 3246 00000000 .quad .LBE1015
+ 27568 00000000
+ 27569 324e 34 .uleb128 0x34
+ 27570 324f 3F0F0000 .long 0xf3f
+ 27571 3253 09 .byte 0x9
+ 27572 3254 03 .byte 0x3
+ 27573 3255 00000000 .quad mask.7943
+ 27573 00000000
+ 27574 325d 35 .uleb128 0x35
+ 27575 325e A00D0000 .long 0xda0
+ 27576 3262 00000000 .quad .LBB1016
+ 27576 00000000
+ 27577 326a 00000000 .quad .LBE1016
+ 27577 00000000
+ 27578 3272 02 .byte 0x2
+ 27579 3273 FE04 .value 0x4fe
+ 27580 3275 32 .uleb128 0x32
+ 27581 3276 BE0D0000 .long 0xdbe
+ 27582 327a 03 .byte 0x3
+ 27583 327b 91 .byte 0x91
+ 27584 327c E057 .sleb128 -5152
+ 27585 327e 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 766
+
+
+ 27586 327f B20D0000 .long 0xdb2
+ 27587 3283 03 .byte 0x3
+ 27588 3284 91 .byte 0x91
+ 27589 3285 F057 .sleb128 -5136
+ 27590 3287 35 .uleb128 0x35
+ 27591 3288 CB0D0000 .long 0xdcb
+ 27592 328c 00000000 .quad .LBB1018
+ 27592 00000000
+ 27593 3294 00000000 .quad .LBE1018
+ 27593 00000000
+ 27594 329c 02 .byte 0x2
+ 27595 329d 7501 .value 0x175
+ 27596 329f 32 .uleb128 0x32
+ 27597 32a0 E90D0000 .long 0xde9
+ 27598 32a4 03 .byte 0x3
+ 27599 32a5 91 .byte 0x91
+ 27600 32a6 8058 .sleb128 -5120
+ 27601 32a8 32 .uleb128 0x32
+ 27602 32a9 DD0D0000 .long 0xddd
+ 27603 32ad 03 .byte 0x3
+ 27604 32ae 91 .byte 0x91
+ 27605 32af 9058 .sleb128 -5104
+ 27606 32b1 00 .byte 0x0
+ 27607 32b2 00 .byte 0x0
+ 27608 32b3 00 .byte 0x0
+ 27609 32b4 00 .byte 0x0
+ 27610 32b5 35 .uleb128 0x35
+ 27611 32b6 210F0000 .long 0xf21
+ 27612 32ba 00000000 .quad .LBB1020
+ 27612 00000000
+ 27613 32c2 00000000 .quad .LBE1020
+ 27613 00000000
+ 27614 32ca 02 .byte 0x2
+ 27615 32cb 2106 .value 0x621
+ 27616 32cd 32 .uleb128 0x32
+ 27617 32ce 330F0000 .long 0xf33
+ 27618 32d2 03 .byte 0x3
+ 27619 32d3 91 .byte 0x91
+ 27620 32d4 A058 .sleb128 -5088
+ 27621 32d6 33 .uleb128 0x33
+ 27622 32d7 00000000 .quad .LBB1021
+ 27622 00000000
+ 27623 32df 00000000 .quad .LBE1021
+ 27623 00000000
+ 27624 32e7 34 .uleb128 0x34
+ 27625 32e8 3F0F0000 .long 0xf3f
+ 27626 32ec 09 .byte 0x9
+ 27627 32ed 03 .byte 0x3
+ 27628 32ee 00000000 .quad mask.7943
+ 27628 00000000
+ 27629 32f6 35 .uleb128 0x35
+ 27630 32f7 A00D0000 .long 0xda0
+ 27631 32fb 00000000 .quad .LBB1022
+ 27631 00000000
+ 27632 3303 00000000 .quad .LBE1022
+ 27632 00000000
+ 27633 330b 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 767
+
+
+ 27634 330c FE04 .value 0x4fe
+ 27635 330e 32 .uleb128 0x32
+ 27636 330f BE0D0000 .long 0xdbe
+ 27637 3313 03 .byte 0x3
+ 27638 3314 91 .byte 0x91
+ 27639 3315 B058 .sleb128 -5072
+ 27640 3317 32 .uleb128 0x32
+ 27641 3318 B20D0000 .long 0xdb2
+ 27642 331c 03 .byte 0x3
+ 27643 331d 91 .byte 0x91
+ 27644 331e C058 .sleb128 -5056
+ 27645 3320 35 .uleb128 0x35
+ 27646 3321 CB0D0000 .long 0xdcb
+ 27647 3325 00000000 .quad .LBB1024
+ 27647 00000000
+ 27648 332d 00000000 .quad .LBE1024
+ 27648 00000000
+ 27649 3335 02 .byte 0x2
+ 27650 3336 7501 .value 0x175
+ 27651 3338 32 .uleb128 0x32
+ 27652 3339 E90D0000 .long 0xde9
+ 27653 333d 03 .byte 0x3
+ 27654 333e 91 .byte 0x91
+ 27655 333f D058 .sleb128 -5040
+ 27656 3341 32 .uleb128 0x32
+ 27657 3342 DD0D0000 .long 0xddd
+ 27658 3346 03 .byte 0x3
+ 27659 3347 91 .byte 0x91
+ 27660 3348 E058 .sleb128 -5024
+ 27661 334a 00 .byte 0x0
+ 27662 334b 00 .byte 0x0
+ 27663 334c 00 .byte 0x0
+ 27664 334d 00 .byte 0x0
+ 27665 334e 00 .byte 0x0
+ 27666 334f 00 .byte 0x0
+ 27667 3350 31 .uleb128 0x31
+ 27668 3351 D50B0000 .long 0xbd5
+ 27669 3355 00000000 .quad .LBB1026
+ 27669 00000000
+ 27670 335d 00000000 .quad .LBE1026
+ 27670 00000000
+ 27671 3365 02 .byte 0x2
+ 27672 3366 D506 .value 0x6d5
+ 27673 3368 33380000 .long 0x3833
+ 27674 336c 32 .uleb128 0x32
+ 27675 336d F30B0000 .long 0xbf3
+ 27676 3371 03 .byte 0x3
+ 27677 3372 91 .byte 0x91
+ 27678 3373 FC58 .sleb128 -4996
+ 27679 3375 32 .uleb128 0x32
+ 27680 3376 E70B0000 .long 0xbe7
+ 27681 337a 03 .byte 0x3
+ 27682 337b 91 .byte 0x91
+ 27683 337c 8059 .sleb128 -4992
+ 27684 337e 33 .uleb128 0x33
+ 27685 337f 00000000 .quad .LBB1027
+ 27685 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 768
+
+
+ 27686 3387 00000000 .quad .LBE1027
+ 27686 00000000
+ 27687 338f 34 .uleb128 0x34
+ 27688 3390 FF0B0000 .long 0xbff
+ 27689 3394 04 .byte 0x4
+ 27690 3395 76 .byte 0x76
+ 27691 3396 90AB7F .sleb128 -10864
+ 27692 3399 34 .uleb128 0x34
+ 27693 339a 0B0C0000 .long 0xc0b
+ 27694 339e 04 .byte 0x4
+ 27695 339f 76 .byte 0x76
+ 27696 33a0 80AB7F .sleb128 -10880
+ 27697 33a3 31 .uleb128 0x31
+ 27698 33a4 540C0000 .long 0xc54
+ 27699 33a8 00000000 .quad .LBB1028
+ 27699 00000000
+ 27700 33b0 00000000 .quad .LBE1028
+ 27700 00000000
+ 27701 33b8 02 .byte 0x2
+ 27702 33b9 9106 .value 0x691
+ 27703 33bb 0F340000 .long 0x340f
+ 27704 33bf 32 .uleb128 0x32
+ 27705 33c0 7E0C0000 .long 0xc7e
+ 27706 33c4 03 .byte 0x3
+ 27707 33c5 91 .byte 0x91
+ 27708 33c6 9859 .sleb128 -4968
+ 27709 33c8 32 .uleb128 0x32
+ 27710 33c9 720C0000 .long 0xc72
+ 27711 33cd 03 .byte 0x3
+ 27712 33ce 91 .byte 0x91
+ 27713 33cf 9C59 .sleb128 -4964
+ 27714 33d1 32 .uleb128 0x32
+ 27715 33d2 660C0000 .long 0xc66
+ 27716 33d6 03 .byte 0x3
+ 27717 33d7 91 .byte 0x91
+ 27718 33d8 A059 .sleb128 -4960
+ 27719 33da 35 .uleb128 0x35
+ 27720 33db 8B0C0000 .long 0xc8b
+ 27721 33df 00000000 .quad .LBB1030
+ 27721 00000000
+ 27722 33e7 00000000 .quad .LBE1030
+ 27722 00000000
+ 27723 33ef 02 .byte 0x2
+ 27724 33f0 0702 .value 0x207
+ 27725 33f2 32 .uleb128 0x32
+ 27726 33f3 B40C0000 .long 0xcb4
+ 27727 33f7 03 .byte 0x3
+ 27728 33f8 91 .byte 0x91
+ 27729 33f9 B859 .sleb128 -4936
+ 27730 33fb 32 .uleb128 0x32
+ 27731 33fc A90C0000 .long 0xca9
+ 27732 3400 03 .byte 0x3
+ 27733 3401 91 .byte 0x91
+ 27734 3402 BC59 .sleb128 -4932
+ 27735 3404 32 .uleb128 0x32
+ 27736 3405 9D0C0000 .long 0xc9d
+ 27737 3409 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 769
+
+
+ 27738 340a 91 .byte 0x91
+ 27739 340b C059 .sleb128 -4928
+ 27740 340d 00 .byte 0x0
+ 27741 340e 00 .byte 0x0
+ 27742 340f 31 .uleb128 0x31
+ 27743 3410 C10C0000 .long 0xcc1
+ 27744 3414 00000000 .quad .LBB1032
+ 27744 00000000
+ 27745 341c 00000000 .quad .LBE1032
+ 27745 00000000
+ 27746 3424 02 .byte 0x2
+ 27747 3425 9206 .value 0x692
+ 27748 3427 98360000 .long 0x3698
+ 27749 342b 32 .uleb128 0x32
+ 27750 342c D30C0000 .long 0xcd3
+ 27751 3430 03 .byte 0x3
+ 27752 3431 91 .byte 0x91
+ 27753 3432 D059 .sleb128 -4912
+ 27754 3434 35 .uleb128 0x35
+ 27755 3435 E00C0000 .long 0xce0
+ 27756 3439 00000000 .quad .LBB1034
+ 27756 00000000
+ 27757 3441 00000000 .quad .LBE1034
+ 27757 00000000
+ 27758 3449 02 .byte 0x2
+ 27759 344a 7D03 .value 0x37d
+ 27760 344c 32 .uleb128 0x32
+ 27761 344d FE0C0000 .long 0xcfe
+ 27762 3451 03 .byte 0x3
+ 27763 3452 91 .byte 0x91
+ 27764 3453 E859 .sleb128 -4888
+ 27765 3455 32 .uleb128 0x32
+ 27766 3456 F20C0000 .long 0xcf2
+ 27767 345a 03 .byte 0x3
+ 27768 345b 91 .byte 0x91
+ 27769 345c F059 .sleb128 -4880
+ 27770 345e 33 .uleb128 0x33
+ 27771 345f 00000000 .quad .LBB1035
+ 27771 00000000
+ 27772 3467 00000000 .quad .LBE1035
+ 27772 00000000
+ 27773 346f 34 .uleb128 0x34
+ 27774 3470 0A0D0000 .long 0xd0a
+ 27775 3474 03 .byte 0x3
+ 27776 3475 91 .byte 0x91
+ 27777 3476 C05A .sleb128 -4800
+ 27778 3478 34 .uleb128 0x34
+ 27779 3479 150D0000 .long 0xd15
+ 27780 347d 03 .byte 0x3
+ 27781 347e 91 .byte 0x91
+ 27782 347f B05A .sleb128 -4816
+ 27783 3481 34 .uleb128 0x34
+ 27784 3482 200D0000 .long 0xd20
+ 27785 3486 03 .byte 0x3
+ 27786 3487 91 .byte 0x91
+ 27787 3488 A05A .sleb128 -4832
+ 27788 348a 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 770
+
+
+ 27789 348b 2C0D0000 .long 0xd2c
+ 27790 348f 03 .byte 0x3
+ 27791 3490 91 .byte 0x91
+ 27792 3491 905A .sleb128 -4848
+ 27793 3493 34 .uleb128 0x34
+ 27794 3494 380D0000 .long 0xd38
+ 27795 3498 03 .byte 0x3
+ 27796 3499 91 .byte 0x91
+ 27797 349a 8C5A .sleb128 -4852
+ 27798 349c 31 .uleb128 0x31
+ 27799 349d 4F0D0000 .long 0xd4f
+ 27800 34a1 00000000 .quad .LBB1036
+ 27800 00000000
+ 27801 34a9 00000000 .quad .LBE1036
+ 27801 00000000
+ 27802 34b1 02 .byte 0x2
+ 27803 34b2 5603 .value 0x356
+ 27804 34b4 CB340000 .long 0x34cb
+ 27805 34b8 32 .uleb128 0x32
+ 27806 34b9 6A0D0000 .long 0xd6a
+ 27807 34bd 03 .byte 0x3
+ 27808 34be 91 .byte 0x91
+ 27809 34bf D05A .sleb128 -4784
+ 27810 34c1 32 .uleb128 0x32
+ 27811 34c2 600D0000 .long 0xd60
+ 27812 34c6 03 .byte 0x3
+ 27813 34c7 91 .byte 0x91
+ 27814 34c8 E05A .sleb128 -4768
+ 27815 34ca 00 .byte 0x0
+ 27816 34cb 31 .uleb128 0x31
+ 27817 34cc 750D0000 .long 0xd75
+ 27818 34d0 00000000 .quad .LBB1038
+ 27818 00000000
+ 27819 34d8 00000000 .quad .LBE1038
+ 27819 00000000
+ 27820 34e0 02 .byte 0x2
+ 27821 34e1 5903 .value 0x359
+ 27822 34e3 FA340000 .long 0x34fa
+ 27823 34e7 32 .uleb128 0x32
+ 27824 34e8 930D0000 .long 0xd93
+ 27825 34ec 03 .byte 0x3
+ 27826 34ed 91 .byte 0x91
+ 27827 34ee FC5A .sleb128 -4740
+ 27828 34f0 32 .uleb128 0x32
+ 27829 34f1 870D0000 .long 0xd87
+ 27830 34f5 03 .byte 0x3
+ 27831 34f6 91 .byte 0x91
+ 27832 34f7 805B .sleb128 -4736
+ 27833 34f9 00 .byte 0x0
+ 27834 34fa 31 .uleb128 0x31
+ 27835 34fb 4F0D0000 .long 0xd4f
+ 27836 34ff 00000000 .quad .LBB1040
+ 27836 00000000
+ 27837 3507 00000000 .quad .LBE1040
+ 27837 00000000
+ 27838 350f 02 .byte 0x2
+ 27839 3510 5B03 .value 0x35b
+
GAS LISTING /tmp/ccjbMjHD.s page 771
+
+
+ 27840 3512 29350000 .long 0x3529
+ 27841 3516 32 .uleb128 0x32
+ 27842 3517 6A0D0000 .long 0xd6a
+ 27843 351b 03 .byte 0x3
+ 27844 351c 91 .byte 0x91
+ 27845 351d 905B .sleb128 -4720
+ 27846 351f 32 .uleb128 0x32
+ 27847 3520 600D0000 .long 0xd60
+ 27848 3524 03 .byte 0x3
+ 27849 3525 91 .byte 0x91
+ 27850 3526 A05B .sleb128 -4704
+ 27851 3528 00 .byte 0x0
+ 27852 3529 31 .uleb128 0x31
+ 27853 352a A00D0000 .long 0xda0
+ 27854 352e 00000000 .quad .LBB1042
+ 27854 00000000
+ 27855 3536 00000000 .quad .LBE1042
+ 27855 00000000
+ 27856 353e 02 .byte 0x2
+ 27857 353f 6403 .value 0x364
+ 27858 3541 83350000 .long 0x3583
+ 27859 3545 32 .uleb128 0x32
+ 27860 3546 BE0D0000 .long 0xdbe
+ 27861 354a 03 .byte 0x3
+ 27862 354b 91 .byte 0x91
+ 27863 354c B05B .sleb128 -4688
+ 27864 354e 32 .uleb128 0x32
+ 27865 354f B20D0000 .long 0xdb2
+ 27866 3553 03 .byte 0x3
+ 27867 3554 91 .byte 0x91
+ 27868 3555 C05B .sleb128 -4672
+ 27869 3557 35 .uleb128 0x35
+ 27870 3558 CB0D0000 .long 0xdcb
+ 27871 355c 00000000 .quad .LBB1044
+ 27871 00000000
+ 27872 3564 00000000 .quad .LBE1044
+ 27872 00000000
+ 27873 356c 02 .byte 0x2
+ 27874 356d 7501 .value 0x175
+ 27875 356f 32 .uleb128 0x32
+ 27876 3570 E90D0000 .long 0xde9
+ 27877 3574 03 .byte 0x3
+ 27878 3575 91 .byte 0x91
+ 27879 3576 D05B .sleb128 -4656
+ 27880 3578 32 .uleb128 0x32
+ 27881 3579 DD0D0000 .long 0xddd
+ 27882 357d 03 .byte 0x3
+ 27883 357e 91 .byte 0x91
+ 27884 357f E05B .sleb128 -4640
+ 27885 3581 00 .byte 0x0
+ 27886 3582 00 .byte 0x0
+ 27887 3583 31 .uleb128 0x31
+ 27888 3584 FB0D0000 .long 0xdfb
+ 27889 3588 00000000 .quad .LBB1046
+ 27889 00000000
+ 27890 3590 00000000 .quad .LBE1046
+ 27890 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 772
+
+
+ 27891 3598 02 .byte 0x2
+ 27892 3599 6603 .value 0x366
+ 27893 359b B2350000 .long 0x35b2
+ 27894 359f 32 .uleb128 0x32
+ 27895 35a0 160E0000 .long 0xe16
+ 27896 35a4 03 .byte 0x3
+ 27897 35a5 91 .byte 0x91
+ 27898 35a6 F05B .sleb128 -4624
+ 27899 35a8 32 .uleb128 0x32
+ 27900 35a9 0C0E0000 .long 0xe0c
+ 27901 35ad 03 .byte 0x3
+ 27902 35ae 91 .byte 0x91
+ 27903 35af 805C .sleb128 -4608
+ 27904 35b1 00 .byte 0x0
+ 27905 35b2 31 .uleb128 0x31
+ 27906 35b3 A00D0000 .long 0xda0
+ 27907 35b7 00000000 .quad .LBB1048
+ 27907 00000000
+ 27908 35bf 00000000 .quad .LBE1048
+ 27908 00000000
+ 27909 35c7 02 .byte 0x2
+ 27910 35c8 6803 .value 0x368
+ 27911 35ca 0C360000 .long 0x360c
+ 27912 35ce 32 .uleb128 0x32
+ 27913 35cf BE0D0000 .long 0xdbe
+ 27914 35d3 03 .byte 0x3
+ 27915 35d4 91 .byte 0x91
+ 27916 35d5 905C .sleb128 -4592
+ 27917 35d7 32 .uleb128 0x32
+ 27918 35d8 B20D0000 .long 0xdb2
+ 27919 35dc 03 .byte 0x3
+ 27920 35dd 91 .byte 0x91
+ 27921 35de A05C .sleb128 -4576
+ 27922 35e0 35 .uleb128 0x35
+ 27923 35e1 CB0D0000 .long 0xdcb
+ 27924 35e5 00000000 .quad .LBB1050
+ 27924 00000000
+ 27925 35ed 00000000 .quad .LBE1050
+ 27925 00000000
+ 27926 35f5 02 .byte 0x2
+ 27927 35f6 7501 .value 0x175
+ 27928 35f8 32 .uleb128 0x32
+ 27929 35f9 E90D0000 .long 0xde9
+ 27930 35fd 03 .byte 0x3
+ 27931 35fe 91 .byte 0x91
+ 27932 35ff B05C .sleb128 -4560
+ 27933 3601 32 .uleb128 0x32
+ 27934 3602 DD0D0000 .long 0xddd
+ 27935 3606 03 .byte 0x3
+ 27936 3607 91 .byte 0x91
+ 27937 3608 C05C .sleb128 -4544
+ 27938 360a 00 .byte 0x0
+ 27939 360b 00 .byte 0x0
+ 27940 360c 31 .uleb128 0x31
+ 27941 360d FB0D0000 .long 0xdfb
+ 27942 3611 00000000 .quad .LBB1052
+ 27942 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 773
+
+
+ 27943 3619 00000000 .quad .LBE1052
+ 27943 00000000
+ 27944 3621 02 .byte 0x2
+ 27945 3622 6A03 .value 0x36a
+ 27946 3624 3B360000 .long 0x363b
+ 27947 3628 32 .uleb128 0x32
+ 27948 3629 160E0000 .long 0xe16
+ 27949 362d 03 .byte 0x3
+ 27950 362e 91 .byte 0x91
+ 27951 362f D05C .sleb128 -4528
+ 27952 3631 32 .uleb128 0x32
+ 27953 3632 0C0E0000 .long 0xe0c
+ 27954 3636 03 .byte 0x3
+ 27955 3637 91 .byte 0x91
+ 27956 3638 E05C .sleb128 -4512
+ 27957 363a 00 .byte 0x0
+ 27958 363b 31 .uleb128 0x31
+ 27959 363c 210E0000 .long 0xe21
+ 27960 3640 00000000 .quad .LBB1054
+ 27960 00000000
+ 27961 3648 00000000 .quad .LBE1054
+ 27961 00000000
+ 27962 3650 02 .byte 0x2
+ 27963 3651 6C03 .value 0x36c
+ 27964 3653 6A360000 .long 0x366a
+ 27965 3657 32 .uleb128 0x32
+ 27966 3658 3E0E0000 .long 0xe3e
+ 27967 365c 03 .byte 0x3
+ 27968 365d 91 .byte 0x91
+ 27969 365e F05C .sleb128 -4496
+ 27970 3660 32 .uleb128 0x32
+ 27971 3661 330E0000 .long 0xe33
+ 27972 3665 03 .byte 0x3
+ 27973 3666 91 .byte 0x91
+ 27974 3667 805D .sleb128 -4480
+ 27975 3669 00 .byte 0x0
+ 27976 366a 35 .uleb128 0x35
+ 27977 366b 4F0D0000 .long 0xd4f
+ 27978 366f 00000000 .quad .LBB1056
+ 27978 00000000
+ 27979 3677 00000000 .quad .LBE1056
+ 27979 00000000
+ 27980 367f 02 .byte 0x2
+ 27981 3680 6E03 .value 0x36e
+ 27982 3682 32 .uleb128 0x32
+ 27983 3683 6A0D0000 .long 0xd6a
+ 27984 3687 03 .byte 0x3
+ 27985 3688 91 .byte 0x91
+ 27986 3689 905D .sleb128 -4464
+ 27987 368b 32 .uleb128 0x32
+ 27988 368c 600D0000 .long 0xd60
+ 27989 3690 03 .byte 0x3
+ 27990 3691 91 .byte 0x91
+ 27991 3692 A05D .sleb128 -4448
+ 27992 3694 00 .byte 0x0
+ 27993 3695 00 .byte 0x0
+ 27994 3696 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 774
+
+
+ 27995 3697 00 .byte 0x0
+ 27996 3698 36 .uleb128 0x36
+ 27997 3699 00000000 .quad .LBB1058
+ 27997 00000000
+ 27998 36a1 00000000 .quad .LBE1058
+ 27998 00000000
+ 27999 36a9 B8360000 .long 0x36b8
+ 28000 36ad 34 .uleb128 0x34
+ 28001 36ae 1C0C0000 .long 0xc1c
+ 28002 36b2 04 .byte 0x4
+ 28003 36b3 91 .byte 0x91
+ 28004 36b4 E0AF7F .sleb128 -10272
+ 28005 36b7 00 .byte 0x0
+ 28006 36b8 31 .uleb128 0x31
+ 28007 36b9 4A0E0000 .long 0xe4a
+ 28008 36bd 00000000 .quad .LBB1059
+ 28008 00000000
+ 28009 36c5 00000000 .quad .LBE1059
+ 28009 00000000
+ 28010 36cd 02 .byte 0x2
+ 28011 36ce 9406 .value 0x694
+ 28012 36d0 55370000 .long 0x3755
+ 28013 36d4 32 .uleb128 0x32
+ 28014 36d5 5C0E0000 .long 0xe5c
+ 28015 36d9 03 .byte 0x3
+ 28016 36da 91 .byte 0x91
+ 28017 36db B05D .sleb128 -4432
+ 28018 36dd 33 .uleb128 0x33
+ 28019 36de 00000000 .quad .LBB1060
+ 28019 00000000
+ 28020 36e6 00000000 .quad .LBE1060
+ 28020 00000000
+ 28021 36ee 34 .uleb128 0x34
+ 28022 36ef 680E0000 .long 0xe68
+ 28023 36f3 09 .byte 0x9
+ 28024 36f4 03 .byte 0x3
+ 28025 36f5 00000000 .quad ShiftRowTable.7385
+ 28025 00000000
+ 28026 36fd 35 .uleb128 0x35
+ 28027 36fe A00D0000 .long 0xda0
+ 28028 3702 00000000 .quad .LBB1061
+ 28028 00000000
+ 28029 370a 00000000 .quad .LBE1061
+ 28029 00000000
+ 28030 3712 02 .byte 0x2
+ 28031 3713 9B02 .value 0x29b
+ 28032 3715 32 .uleb128 0x32
+ 28033 3716 BE0D0000 .long 0xdbe
+ 28034 371a 03 .byte 0x3
+ 28035 371b 91 .byte 0x91
+ 28036 371c C05D .sleb128 -4416
+ 28037 371e 32 .uleb128 0x32
+ 28038 371f B20D0000 .long 0xdb2
+ 28039 3723 03 .byte 0x3
+ 28040 3724 91 .byte 0x91
+ 28041 3725 D05D .sleb128 -4400
+ 28042 3727 35 .uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s page 775
+
+
+ 28043 3728 CB0D0000 .long 0xdcb
+ 28044 372c 00000000 .quad .LBB1063
+ 28044 00000000
+ 28045 3734 00000000 .quad .LBE1063
+ 28045 00000000
+ 28046 373c 02 .byte 0x2
+ 28047 373d 7501 .value 0x175
+ 28048 373f 32 .uleb128 0x32
+ 28049 3740 E90D0000 .long 0xde9
+ 28050 3744 03 .byte 0x3
+ 28051 3745 91 .byte 0x91
+ 28052 3746 E05D .sleb128 -4384
+ 28053 3748 32 .uleb128 0x32
+ 28054 3749 DD0D0000 .long 0xddd
+ 28055 374d 03 .byte 0x3
+ 28056 374e 91 .byte 0x91
+ 28057 374f F05D .sleb128 -4368
+ 28058 3751 00 .byte 0x0
+ 28059 3752 00 .byte 0x0
+ 28060 3753 00 .byte 0x0
+ 28061 3754 00 .byte 0x0
+ 28062 3755 36 .uleb128 0x36
+ 28063 3756 00000000 .quad .LBB1065
+ 28063 00000000
+ 28064 375e 00000000 .quad .LBE1065
+ 28064 00000000
+ 28065 3766 75370000 .long 0x3775
+ 28066 376a 34 .uleb128 0x34
+ 28067 376b 2C0C0000 .long 0xc2c
+ 28068 376f 04 .byte 0x4
+ 28069 3770 91 .byte 0x91
+ 28070 3771 D0AF7F .sleb128 -10288
+ 28071 3774 00 .byte 0x0
+ 28072 3775 31 .uleb128 0x31
+ 28073 3776 860E0000 .long 0xe86
+ 28074 377a 00000000 .quad .LBB1066
+ 28074 00000000
+ 28075 3782 00000000 .quad .LBE1066
+ 28075 00000000
+ 28076 378a 02 .byte 0x2
+ 28077 378b 9606 .value 0x696
+ 28078 378d A4370000 .long 0x37a4
+ 28079 3791 32 .uleb128 0x32
+ 28080 3792 A10E0000 .long 0xea1
+ 28081 3796 03 .byte 0x3
+ 28082 3797 91 .byte 0x91
+ 28083 3798 805E .sleb128 -4352
+ 28084 379a 32 .uleb128 0x32
+ 28085 379b 970E0000 .long 0xe97
+ 28086 379f 03 .byte 0x3
+ 28087 37a0 91 .byte 0x91
+ 28088 37a1 905E .sleb128 -4336
+ 28089 37a3 00 .byte 0x0
+ 28090 37a4 36 .uleb128 0x36
+ 28091 37a5 00000000 .quad .LBB1068
+ 28091 00000000
+ 28092 37ad 00000000 .quad .LBE1068
+
GAS LISTING /tmp/ccjbMjHD.s page 776
+
+
+ 28092 00000000
+ 28093 37b5 C4370000 .long 0x37c4
+ 28094 37b9 34 .uleb128 0x34
+ 28095 37ba 3C0C0000 .long 0xc3c
+ 28096 37be 04 .byte 0x4
+ 28097 37bf 91 .byte 0x91
+ 28098 37c0 C0AF7F .sleb128 -10304
+ 28099 37c3 00 .byte 0x0
+ 28100 37c4 31 .uleb128 0x31
+ 28101 37c5 AC0E0000 .long 0xeac
+ 28102 37c9 00000000 .quad .LBB1069
+ 28102 00000000
+ 28103 37d1 00000000 .quad .LBE1069
+ 28103 00000000
+ 28104 37d9 02 .byte 0x2
+ 28105 37da 9806 .value 0x698
+ 28106 37dc 15380000 .long 0x3815
+ 28107 37e0 32 .uleb128 0x32
+ 28108 37e1 BE0E0000 .long 0xebe
+ 28109 37e5 03 .byte 0x3
+ 28110 37e6 91 .byte 0x91
+ 28111 37e7 A05E .sleb128 -4320
+ 28112 37e9 35 .uleb128 0x35
+ 28113 37ea CB0E0000 .long 0xecb
+ 28114 37ee 00000000 .quad .LBB1071
+ 28114 00000000
+ 28115 37f6 00000000 .quad .LBE1071
+ 28115 00000000
+ 28116 37fe 02 .byte 0x2
+ 28117 37ff 4905 .value 0x549
+ 28118 3801 32 .uleb128 0x32
+ 28119 3802 E90E0000 .long 0xee9
+ 28120 3806 03 .byte 0x3
+ 28121 3807 91 .byte 0x91
+ 28122 3808 BC5E .sleb128 -4292
+ 28123 380a 32 .uleb128 0x32
+ 28124 380b DD0E0000 .long 0xedd
+ 28125 380f 03 .byte 0x3
+ 28126 3810 91 .byte 0x91
+ 28127 3811 C05E .sleb128 -4288
+ 28128 3813 00 .byte 0x0
+ 28129 3814 00 .byte 0x0
+ 28130 3815 33 .uleb128 0x33
+ 28131 3816 00000000 .quad .LBB1073
+ 28131 00000000
+ 28132 381e 00000000 .quad .LBE1073
+ 28132 00000000
+ 28133 3826 34 .uleb128 0x34
+ 28134 3827 480C0000 .long 0xc48
+ 28135 382b 04 .byte 0x4
+ 28136 382c 91 .byte 0x91
+ 28137 382d B0AF7F .sleb128 -10320
+ 28138 3830 00 .byte 0x0
+ 28139 3831 00 .byte 0x0
+ 28140 3832 00 .byte 0x0
+ 28141 3833 31 .uleb128 0x31
+ 28142 3834 F60E0000 .long 0xef6
+
GAS LISTING /tmp/ccjbMjHD.s page 777
+
+
+ 28143 3838 00000000 .quad .LBB1074
+ 28143 00000000
+ 28144 3840 00000000 .quad .LBE1074
+ 28144 00000000
+ 28145 3848 02 .byte 0x2
+ 28146 3849 D506 .value 0x6d5
+ 28147 384b 483A0000 .long 0x3a48
+ 28148 384f 32 .uleb128 0x32
+ 28149 3850 080F0000 .long 0xf08
+ 28150 3854 03 .byte 0x3
+ 28151 3855 91 .byte 0x91
+ 28152 3856 D05E .sleb128 -4272
+ 28153 3858 33 .uleb128 0x33
+ 28154 3859 00000000 .quad .LBB1075
+ 28154 00000000
+ 28155 3861 00000000 .quad .LBE1075
+ 28155 00000000
+ 28156 3869 34 .uleb128 0x34
+ 28157 386a 140F0000 .long 0xf14
+ 28158 386e 04 .byte 0x4
+ 28159 386f 76 .byte 0x76
+ 28160 3870 A0AB7F .sleb128 -10848
+ 28161 3873 31 .uleb128 0x31
+ 28162 3874 210F0000 .long 0xf21
+ 28163 3878 00000000 .quad .LBB1076
+ 28163 00000000
+ 28164 3880 00000000 .quad .LBE1076
+ 28164 00000000
+ 28165 3888 02 .byte 0x2
+ 28166 3889 1F06 .value 0x61f
+ 28167 388b 10390000 .long 0x3910
+ 28168 388f 32 .uleb128 0x32
+ 28169 3890 330F0000 .long 0xf33
+ 28170 3894 03 .byte 0x3
+ 28171 3895 91 .byte 0x91
+ 28172 3896 E05E .sleb128 -4256
+ 28173 3898 33 .uleb128 0x33
+ 28174 3899 00000000 .quad .LBB1077
+ 28174 00000000
+ 28175 38a1 00000000 .quad .LBE1077
+ 28175 00000000
+ 28176 38a9 34 .uleb128 0x34
+ 28177 38aa 3F0F0000 .long 0xf3f
+ 28178 38ae 09 .byte 0x9
+ 28179 38af 03 .byte 0x3
+ 28180 38b0 00000000 .quad mask.7943
+ 28180 00000000
+ 28181 38b8 35 .uleb128 0x35
+ 28182 38b9 A00D0000 .long 0xda0
+ 28183 38bd 00000000 .quad .LBB1078
+ 28183 00000000
+ 28184 38c5 00000000 .quad .LBE1078
+ 28184 00000000
+ 28185 38cd 02 .byte 0x2
+ 28186 38ce FE04 .value 0x4fe
+ 28187 38d0 32 .uleb128 0x32
+ 28188 38d1 BE0D0000 .long 0xdbe
+
GAS LISTING /tmp/ccjbMjHD.s page 778
+
+
+ 28189 38d5 03 .byte 0x3
+ 28190 38d6 91 .byte 0x91
+ 28191 38d7 F05E .sleb128 -4240
+ 28192 38d9 32 .uleb128 0x32
+ 28193 38da B20D0000 .long 0xdb2
+ 28194 38de 03 .byte 0x3
+ 28195 38df 91 .byte 0x91
+ 28196 38e0 805F .sleb128 -4224
+ 28197 38e2 35 .uleb128 0x35
+ 28198 38e3 CB0D0000 .long 0xdcb
+ 28199 38e7 00000000 .quad .LBB1080
+ 28199 00000000
+ 28200 38ef 00000000 .quad .LBE1080
+ 28200 00000000
+ 28201 38f7 02 .byte 0x2
+ 28202 38f8 7501 .value 0x175
+ 28203 38fa 32 .uleb128 0x32
+ 28204 38fb E90D0000 .long 0xde9
+ 28205 38ff 03 .byte 0x3
+ 28206 3900 91 .byte 0x91
+ 28207 3901 905F .sleb128 -4208
+ 28208 3903 32 .uleb128 0x32
+ 28209 3904 DD0D0000 .long 0xddd
+ 28210 3908 03 .byte 0x3
+ 28211 3909 91 .byte 0x91
+ 28212 390a A05F .sleb128 -4192
+ 28213 390c 00 .byte 0x0
+ 28214 390d 00 .byte 0x0
+ 28215 390e 00 .byte 0x0
+ 28216 390f 00 .byte 0x0
+ 28217 3910 31 .uleb128 0x31
+ 28218 3911 210F0000 .long 0xf21
+ 28219 3915 00000000 .quad .LBB1082
+ 28219 00000000
+ 28220 391d 00000000 .quad .LBE1082
+ 28220 00000000
+ 28221 3925 02 .byte 0x2
+ 28222 3926 2006 .value 0x620
+ 28223 3928 AD390000 .long 0x39ad
+ 28224 392c 32 .uleb128 0x32
+ 28225 392d 330F0000 .long 0xf33
+ 28226 3931 03 .byte 0x3
+ 28227 3932 91 .byte 0x91
+ 28228 3933 B05F .sleb128 -4176
+ 28229 3935 33 .uleb128 0x33
+ 28230 3936 00000000 .quad .LBB1083
+ 28230 00000000
+ 28231 393e 00000000 .quad .LBE1083
+ 28231 00000000
+ 28232 3946 34 .uleb128 0x34
+ 28233 3947 3F0F0000 .long 0xf3f
+ 28234 394b 09 .byte 0x9
+ 28235 394c 03 .byte 0x3
+ 28236 394d 00000000 .quad mask.7943
+ 28236 00000000
+ 28237 3955 35 .uleb128 0x35
+ 28238 3956 A00D0000 .long 0xda0
+
GAS LISTING /tmp/ccjbMjHD.s page 779
+
+
+ 28239 395a 00000000 .quad .LBB1084
+ 28239 00000000
+ 28240 3962 00000000 .quad .LBE1084
+ 28240 00000000
+ 28241 396a 02 .byte 0x2
+ 28242 396b FE04 .value 0x4fe
+ 28243 396d 32 .uleb128 0x32
+ 28244 396e BE0D0000 .long 0xdbe
+ 28245 3972 03 .byte 0x3
+ 28246 3973 91 .byte 0x91
+ 28247 3974 C05F .sleb128 -4160
+ 28248 3976 32 .uleb128 0x32
+ 28249 3977 B20D0000 .long 0xdb2
+ 28250 397b 03 .byte 0x3
+ 28251 397c 91 .byte 0x91
+ 28252 397d D05F .sleb128 -4144
+ 28253 397f 35 .uleb128 0x35
+ 28254 3980 CB0D0000 .long 0xdcb
+ 28255 3984 00000000 .quad .LBB1086
+ 28255 00000000
+ 28256 398c 00000000 .quad .LBE1086
+ 28256 00000000
+ 28257 3994 02 .byte 0x2
+ 28258 3995 7501 .value 0x175
+ 28259 3997 32 .uleb128 0x32
+ 28260 3998 E90D0000 .long 0xde9
+ 28261 399c 03 .byte 0x3
+ 28262 399d 91 .byte 0x91
+ 28263 399e E05F .sleb128 -4128
+ 28264 39a0 32 .uleb128 0x32
+ 28265 39a1 DD0D0000 .long 0xddd
+ 28266 39a5 03 .byte 0x3
+ 28267 39a6 91 .byte 0x91
+ 28268 39a7 F05F .sleb128 -4112
+ 28269 39a9 00 .byte 0x0
+ 28270 39aa 00 .byte 0x0
+ 28271 39ab 00 .byte 0x0
+ 28272 39ac 00 .byte 0x0
+ 28273 39ad 35 .uleb128 0x35
+ 28274 39ae 210F0000 .long 0xf21
+ 28275 39b2 00000000 .quad .LBB1088
+ 28275 00000000
+ 28276 39ba 00000000 .quad .LBE1088
+ 28276 00000000
+ 28277 39c2 02 .byte 0x2
+ 28278 39c3 2106 .value 0x621
+ 28279 39c5 32 .uleb128 0x32
+ 28280 39c6 330F0000 .long 0xf33
+ 28281 39ca 03 .byte 0x3
+ 28282 39cb 91 .byte 0x91
+ 28283 39cc 8060 .sleb128 -4096
+ 28284 39ce 33 .uleb128 0x33
+ 28285 39cf 00000000 .quad .LBB1089
+ 28285 00000000
+ 28286 39d7 00000000 .quad .LBE1089
+ 28286 00000000
+ 28287 39df 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 780
+
+
+ 28288 39e0 3F0F0000 .long 0xf3f
+ 28289 39e4 09 .byte 0x9
+ 28290 39e5 03 .byte 0x3
+ 28291 39e6 00000000 .quad mask.7943
+ 28291 00000000
+ 28292 39ee 35 .uleb128 0x35
+ 28293 39ef A00D0000 .long 0xda0
+ 28294 39f3 00000000 .quad .LBB1090
+ 28294 00000000
+ 28295 39fb 00000000 .quad .LBE1090
+ 28295 00000000
+ 28296 3a03 02 .byte 0x2
+ 28297 3a04 FE04 .value 0x4fe
+ 28298 3a06 32 .uleb128 0x32
+ 28299 3a07 BE0D0000 .long 0xdbe
+ 28300 3a0b 03 .byte 0x3
+ 28301 3a0c 91 .byte 0x91
+ 28302 3a0d 9060 .sleb128 -4080
+ 28303 3a0f 32 .uleb128 0x32
+ 28304 3a10 B20D0000 .long 0xdb2
+ 28305 3a14 03 .byte 0x3
+ 28306 3a15 91 .byte 0x91
+ 28307 3a16 A060 .sleb128 -4064
+ 28308 3a18 35 .uleb128 0x35
+ 28309 3a19 CB0D0000 .long 0xdcb
+ 28310 3a1d 00000000 .quad .LBB1092
+ 28310 00000000
+ 28311 3a25 00000000 .quad .LBE1092
+ 28311 00000000
+ 28312 3a2d 02 .byte 0x2
+ 28313 3a2e 7501 .value 0x175
+ 28314 3a30 32 .uleb128 0x32
+ 28315 3a31 E90D0000 .long 0xde9
+ 28316 3a35 03 .byte 0x3
+ 28317 3a36 91 .byte 0x91
+ 28318 3a37 B060 .sleb128 -4048
+ 28319 3a39 32 .uleb128 0x32
+ 28320 3a3a DD0D0000 .long 0xddd
+ 28321 3a3e 03 .byte 0x3
+ 28322 3a3f 91 .byte 0x91
+ 28323 3a40 C060 .sleb128 -4032
+ 28324 3a42 00 .byte 0x0
+ 28325 3a43 00 .byte 0x0
+ 28326 3a44 00 .byte 0x0
+ 28327 3a45 00 .byte 0x0
+ 28328 3a46 00 .byte 0x0
+ 28329 3a47 00 .byte 0x0
+ 28330 3a48 31 .uleb128 0x31
+ 28331 3a49 D50B0000 .long 0xbd5
+ 28332 3a4d 00000000 .quad .LBB1094
+ 28332 00000000
+ 28333 3a55 00000000 .quad .LBE1094
+ 28333 00000000
+ 28334 3a5d 02 .byte 0x2
+ 28335 3a5e D606 .value 0x6d6
+ 28336 3a60 2B3F0000 .long 0x3f2b
+ 28337 3a64 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 781
+
+
+ 28338 3a65 F30B0000 .long 0xbf3
+ 28339 3a69 03 .byte 0x3
+ 28340 3a6a 91 .byte 0x91
+ 28341 3a6b DC60 .sleb128 -4004
+ 28342 3a6d 32 .uleb128 0x32
+ 28343 3a6e E70B0000 .long 0xbe7
+ 28344 3a72 03 .byte 0x3
+ 28345 3a73 91 .byte 0x91
+ 28346 3a74 E060 .sleb128 -4000
+ 28347 3a76 33 .uleb128 0x33
+ 28348 3a77 00000000 .quad .LBB1095
+ 28348 00000000
+ 28349 3a7f 00000000 .quad .LBE1095
+ 28349 00000000
+ 28350 3a87 34 .uleb128 0x34
+ 28351 3a88 FF0B0000 .long 0xbff
+ 28352 3a8c 04 .byte 0x4
+ 28353 3a8d 76 .byte 0x76
+ 28354 3a8e C0AB7F .sleb128 -10816
+ 28355 3a91 34 .uleb128 0x34
+ 28356 3a92 0B0C0000 .long 0xc0b
+ 28357 3a96 04 .byte 0x4
+ 28358 3a97 76 .byte 0x76
+ 28359 3a98 B0AB7F .sleb128 -10832
+ 28360 3a9b 31 .uleb128 0x31
+ 28361 3a9c 540C0000 .long 0xc54
+ 28362 3aa0 00000000 .quad .LBB1096
+ 28362 00000000
+ 28363 3aa8 00000000 .quad .LBE1096
+ 28363 00000000
+ 28364 3ab0 02 .byte 0x2
+ 28365 3ab1 9106 .value 0x691
+ 28366 3ab3 073B0000 .long 0x3b07
+ 28367 3ab7 32 .uleb128 0x32
+ 28368 3ab8 7E0C0000 .long 0xc7e
+ 28369 3abc 03 .byte 0x3
+ 28370 3abd 91 .byte 0x91
+ 28371 3abe F860 .sleb128 -3976
+ 28372 3ac0 32 .uleb128 0x32
+ 28373 3ac1 720C0000 .long 0xc72
+ 28374 3ac5 03 .byte 0x3
+ 28375 3ac6 91 .byte 0x91
+ 28376 3ac7 FC60 .sleb128 -3972
+ 28377 3ac9 32 .uleb128 0x32
+ 28378 3aca 660C0000 .long 0xc66
+ 28379 3ace 03 .byte 0x3
+ 28380 3acf 91 .byte 0x91
+ 28381 3ad0 8061 .sleb128 -3968
+ 28382 3ad2 35 .uleb128 0x35
+ 28383 3ad3 8B0C0000 .long 0xc8b
+ 28384 3ad7 00000000 .quad .LBB1098
+ 28384 00000000
+ 28385 3adf 00000000 .quad .LBE1098
+ 28385 00000000
+ 28386 3ae7 02 .byte 0x2
+ 28387 3ae8 0702 .value 0x207
+ 28388 3aea 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 782
+
+
+ 28389 3aeb B40C0000 .long 0xcb4
+ 28390 3aef 03 .byte 0x3
+ 28391 3af0 91 .byte 0x91
+ 28392 3af1 9861 .sleb128 -3944
+ 28393 3af3 32 .uleb128 0x32
+ 28394 3af4 A90C0000 .long 0xca9
+ 28395 3af8 03 .byte 0x3
+ 28396 3af9 91 .byte 0x91
+ 28397 3afa 9C61 .sleb128 -3940
+ 28398 3afc 32 .uleb128 0x32
+ 28399 3afd 9D0C0000 .long 0xc9d
+ 28400 3b01 03 .byte 0x3
+ 28401 3b02 91 .byte 0x91
+ 28402 3b03 A061 .sleb128 -3936
+ 28403 3b05 00 .byte 0x0
+ 28404 3b06 00 .byte 0x0
+ 28405 3b07 31 .uleb128 0x31
+ 28406 3b08 C10C0000 .long 0xcc1
+ 28407 3b0c 00000000 .quad .LBB1100
+ 28407 00000000
+ 28408 3b14 00000000 .quad .LBE1100
+ 28408 00000000
+ 28409 3b1c 02 .byte 0x2
+ 28410 3b1d 9206 .value 0x692
+ 28411 3b1f 903D0000 .long 0x3d90
+ 28412 3b23 32 .uleb128 0x32
+ 28413 3b24 D30C0000 .long 0xcd3
+ 28414 3b28 03 .byte 0x3
+ 28415 3b29 91 .byte 0x91
+ 28416 3b2a B061 .sleb128 -3920
+ 28417 3b2c 35 .uleb128 0x35
+ 28418 3b2d E00C0000 .long 0xce0
+ 28419 3b31 00000000 .quad .LBB1102
+ 28419 00000000
+ 28420 3b39 00000000 .quad .LBE1102
+ 28420 00000000
+ 28421 3b41 02 .byte 0x2
+ 28422 3b42 7D03 .value 0x37d
+ 28423 3b44 32 .uleb128 0x32
+ 28424 3b45 FE0C0000 .long 0xcfe
+ 28425 3b49 03 .byte 0x3
+ 28426 3b4a 91 .byte 0x91
+ 28427 3b4b C861 .sleb128 -3896
+ 28428 3b4d 32 .uleb128 0x32
+ 28429 3b4e F20C0000 .long 0xcf2
+ 28430 3b52 03 .byte 0x3
+ 28431 3b53 91 .byte 0x91
+ 28432 3b54 D061 .sleb128 -3888
+ 28433 3b56 33 .uleb128 0x33
+ 28434 3b57 00000000 .quad .LBB1103
+ 28434 00000000
+ 28435 3b5f 00000000 .quad .LBE1103
+ 28435 00000000
+ 28436 3b67 34 .uleb128 0x34
+ 28437 3b68 0A0D0000 .long 0xd0a
+ 28438 3b6c 03 .byte 0x3
+ 28439 3b6d 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 783
+
+
+ 28440 3b6e A062 .sleb128 -3808
+ 28441 3b70 34 .uleb128 0x34
+ 28442 3b71 150D0000 .long 0xd15
+ 28443 3b75 03 .byte 0x3
+ 28444 3b76 91 .byte 0x91
+ 28445 3b77 9062 .sleb128 -3824
+ 28446 3b79 34 .uleb128 0x34
+ 28447 3b7a 200D0000 .long 0xd20
+ 28448 3b7e 03 .byte 0x3
+ 28449 3b7f 91 .byte 0x91
+ 28450 3b80 8062 .sleb128 -3840
+ 28451 3b82 34 .uleb128 0x34
+ 28452 3b83 2C0D0000 .long 0xd2c
+ 28453 3b87 03 .byte 0x3
+ 28454 3b88 91 .byte 0x91
+ 28455 3b89 F061 .sleb128 -3856
+ 28456 3b8b 34 .uleb128 0x34
+ 28457 3b8c 380D0000 .long 0xd38
+ 28458 3b90 03 .byte 0x3
+ 28459 3b91 91 .byte 0x91
+ 28460 3b92 EC61 .sleb128 -3860
+ 28461 3b94 31 .uleb128 0x31
+ 28462 3b95 4F0D0000 .long 0xd4f
+ 28463 3b99 00000000 .quad .LBB1104
+ 28463 00000000
+ 28464 3ba1 00000000 .quad .LBE1104
+ 28464 00000000
+ 28465 3ba9 02 .byte 0x2
+ 28466 3baa 5603 .value 0x356
+ 28467 3bac C33B0000 .long 0x3bc3
+ 28468 3bb0 32 .uleb128 0x32
+ 28469 3bb1 6A0D0000 .long 0xd6a
+ 28470 3bb5 03 .byte 0x3
+ 28471 3bb6 91 .byte 0x91
+ 28472 3bb7 B062 .sleb128 -3792
+ 28473 3bb9 32 .uleb128 0x32
+ 28474 3bba 600D0000 .long 0xd60
+ 28475 3bbe 03 .byte 0x3
+ 28476 3bbf 91 .byte 0x91
+ 28477 3bc0 C062 .sleb128 -3776
+ 28478 3bc2 00 .byte 0x0
+ 28479 3bc3 31 .uleb128 0x31
+ 28480 3bc4 750D0000 .long 0xd75
+ 28481 3bc8 00000000 .quad .LBB1106
+ 28481 00000000
+ 28482 3bd0 00000000 .quad .LBE1106
+ 28482 00000000
+ 28483 3bd8 02 .byte 0x2
+ 28484 3bd9 5903 .value 0x359
+ 28485 3bdb F23B0000 .long 0x3bf2
+ 28486 3bdf 32 .uleb128 0x32
+ 28487 3be0 930D0000 .long 0xd93
+ 28488 3be4 03 .byte 0x3
+ 28489 3be5 91 .byte 0x91
+ 28490 3be6 DC62 .sleb128 -3748
+ 28491 3be8 32 .uleb128 0x32
+ 28492 3be9 870D0000 .long 0xd87
+
GAS LISTING /tmp/ccjbMjHD.s page 784
+
+
+ 28493 3bed 03 .byte 0x3
+ 28494 3bee 91 .byte 0x91
+ 28495 3bef E062 .sleb128 -3744
+ 28496 3bf1 00 .byte 0x0
+ 28497 3bf2 31 .uleb128 0x31
+ 28498 3bf3 4F0D0000 .long 0xd4f
+ 28499 3bf7 00000000 .quad .LBB1108
+ 28499 00000000
+ 28500 3bff 00000000 .quad .LBE1108
+ 28500 00000000
+ 28501 3c07 02 .byte 0x2
+ 28502 3c08 5B03 .value 0x35b
+ 28503 3c0a 213C0000 .long 0x3c21
+ 28504 3c0e 32 .uleb128 0x32
+ 28505 3c0f 6A0D0000 .long 0xd6a
+ 28506 3c13 03 .byte 0x3
+ 28507 3c14 91 .byte 0x91
+ 28508 3c15 F062 .sleb128 -3728
+ 28509 3c17 32 .uleb128 0x32
+ 28510 3c18 600D0000 .long 0xd60
+ 28511 3c1c 03 .byte 0x3
+ 28512 3c1d 91 .byte 0x91
+ 28513 3c1e 8063 .sleb128 -3712
+ 28514 3c20 00 .byte 0x0
+ 28515 3c21 31 .uleb128 0x31
+ 28516 3c22 A00D0000 .long 0xda0
+ 28517 3c26 00000000 .quad .LBB1110
+ 28517 00000000
+ 28518 3c2e 00000000 .quad .LBE1110
+ 28518 00000000
+ 28519 3c36 02 .byte 0x2
+ 28520 3c37 6403 .value 0x364
+ 28521 3c39 7B3C0000 .long 0x3c7b
+ 28522 3c3d 32 .uleb128 0x32
+ 28523 3c3e BE0D0000 .long 0xdbe
+ 28524 3c42 03 .byte 0x3
+ 28525 3c43 91 .byte 0x91
+ 28526 3c44 9063 .sleb128 -3696
+ 28527 3c46 32 .uleb128 0x32
+ 28528 3c47 B20D0000 .long 0xdb2
+ 28529 3c4b 03 .byte 0x3
+ 28530 3c4c 91 .byte 0x91
+ 28531 3c4d A063 .sleb128 -3680
+ 28532 3c4f 35 .uleb128 0x35
+ 28533 3c50 CB0D0000 .long 0xdcb
+ 28534 3c54 00000000 .quad .LBB1112
+ 28534 00000000
+ 28535 3c5c 00000000 .quad .LBE1112
+ 28535 00000000
+ 28536 3c64 02 .byte 0x2
+ 28537 3c65 7501 .value 0x175
+ 28538 3c67 32 .uleb128 0x32
+ 28539 3c68 E90D0000 .long 0xde9
+ 28540 3c6c 03 .byte 0x3
+ 28541 3c6d 91 .byte 0x91
+ 28542 3c6e B063 .sleb128 -3664
+ 28543 3c70 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 785
+
+
+ 28544 3c71 DD0D0000 .long 0xddd
+ 28545 3c75 03 .byte 0x3
+ 28546 3c76 91 .byte 0x91
+ 28547 3c77 C063 .sleb128 -3648
+ 28548 3c79 00 .byte 0x0
+ 28549 3c7a 00 .byte 0x0
+ 28550 3c7b 31 .uleb128 0x31
+ 28551 3c7c FB0D0000 .long 0xdfb
+ 28552 3c80 00000000 .quad .LBB1114
+ 28552 00000000
+ 28553 3c88 00000000 .quad .LBE1114
+ 28553 00000000
+ 28554 3c90 02 .byte 0x2
+ 28555 3c91 6603 .value 0x366
+ 28556 3c93 AA3C0000 .long 0x3caa
+ 28557 3c97 32 .uleb128 0x32
+ 28558 3c98 160E0000 .long 0xe16
+ 28559 3c9c 03 .byte 0x3
+ 28560 3c9d 91 .byte 0x91
+ 28561 3c9e D063 .sleb128 -3632
+ 28562 3ca0 32 .uleb128 0x32
+ 28563 3ca1 0C0E0000 .long 0xe0c
+ 28564 3ca5 03 .byte 0x3
+ 28565 3ca6 91 .byte 0x91
+ 28566 3ca7 E063 .sleb128 -3616
+ 28567 3ca9 00 .byte 0x0
+ 28568 3caa 31 .uleb128 0x31
+ 28569 3cab A00D0000 .long 0xda0
+ 28570 3caf 00000000 .quad .LBB1116
+ 28570 00000000
+ 28571 3cb7 00000000 .quad .LBE1116
+ 28571 00000000
+ 28572 3cbf 02 .byte 0x2
+ 28573 3cc0 6803 .value 0x368
+ 28574 3cc2 043D0000 .long 0x3d04
+ 28575 3cc6 32 .uleb128 0x32
+ 28576 3cc7 BE0D0000 .long 0xdbe
+ 28577 3ccb 03 .byte 0x3
+ 28578 3ccc 91 .byte 0x91
+ 28579 3ccd F063 .sleb128 -3600
+ 28580 3ccf 32 .uleb128 0x32
+ 28581 3cd0 B20D0000 .long 0xdb2
+ 28582 3cd4 03 .byte 0x3
+ 28583 3cd5 91 .byte 0x91
+ 28584 3cd6 8064 .sleb128 -3584
+ 28585 3cd8 35 .uleb128 0x35
+ 28586 3cd9 CB0D0000 .long 0xdcb
+ 28587 3cdd 00000000 .quad .LBB1118
+ 28587 00000000
+ 28588 3ce5 00000000 .quad .LBE1118
+ 28588 00000000
+ 28589 3ced 02 .byte 0x2
+ 28590 3cee 7501 .value 0x175
+ 28591 3cf0 32 .uleb128 0x32
+ 28592 3cf1 E90D0000 .long 0xde9
+ 28593 3cf5 03 .byte 0x3
+ 28594 3cf6 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 786
+
+
+ 28595 3cf7 9064 .sleb128 -3568
+ 28596 3cf9 32 .uleb128 0x32
+ 28597 3cfa DD0D0000 .long 0xddd
+ 28598 3cfe 03 .byte 0x3
+ 28599 3cff 91 .byte 0x91
+ 28600 3d00 A064 .sleb128 -3552
+ 28601 3d02 00 .byte 0x0
+ 28602 3d03 00 .byte 0x0
+ 28603 3d04 31 .uleb128 0x31
+ 28604 3d05 FB0D0000 .long 0xdfb
+ 28605 3d09 00000000 .quad .LBB1120
+ 28605 00000000
+ 28606 3d11 00000000 .quad .LBE1120
+ 28606 00000000
+ 28607 3d19 02 .byte 0x2
+ 28608 3d1a 6A03 .value 0x36a
+ 28609 3d1c 333D0000 .long 0x3d33
+ 28610 3d20 32 .uleb128 0x32
+ 28611 3d21 160E0000 .long 0xe16
+ 28612 3d25 03 .byte 0x3
+ 28613 3d26 91 .byte 0x91
+ 28614 3d27 B064 .sleb128 -3536
+ 28615 3d29 32 .uleb128 0x32
+ 28616 3d2a 0C0E0000 .long 0xe0c
+ 28617 3d2e 03 .byte 0x3
+ 28618 3d2f 91 .byte 0x91
+ 28619 3d30 C064 .sleb128 -3520
+ 28620 3d32 00 .byte 0x0
+ 28621 3d33 31 .uleb128 0x31
+ 28622 3d34 210E0000 .long 0xe21
+ 28623 3d38 00000000 .quad .LBB1122
+ 28623 00000000
+ 28624 3d40 00000000 .quad .LBE1122
+ 28624 00000000
+ 28625 3d48 02 .byte 0x2
+ 28626 3d49 6C03 .value 0x36c
+ 28627 3d4b 623D0000 .long 0x3d62
+ 28628 3d4f 32 .uleb128 0x32
+ 28629 3d50 3E0E0000 .long 0xe3e
+ 28630 3d54 03 .byte 0x3
+ 28631 3d55 91 .byte 0x91
+ 28632 3d56 D064 .sleb128 -3504
+ 28633 3d58 32 .uleb128 0x32
+ 28634 3d59 330E0000 .long 0xe33
+ 28635 3d5d 03 .byte 0x3
+ 28636 3d5e 91 .byte 0x91
+ 28637 3d5f E064 .sleb128 -3488
+ 28638 3d61 00 .byte 0x0
+ 28639 3d62 35 .uleb128 0x35
+ 28640 3d63 4F0D0000 .long 0xd4f
+ 28641 3d67 00000000 .quad .LBB1124
+ 28641 00000000
+ 28642 3d6f 00000000 .quad .LBE1124
+ 28642 00000000
+ 28643 3d77 02 .byte 0x2
+ 28644 3d78 6E03 .value 0x36e
+ 28645 3d7a 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 787
+
+
+ 28646 3d7b 6A0D0000 .long 0xd6a
+ 28647 3d7f 03 .byte 0x3
+ 28648 3d80 91 .byte 0x91
+ 28649 3d81 F064 .sleb128 -3472
+ 28650 3d83 32 .uleb128 0x32
+ 28651 3d84 600D0000 .long 0xd60
+ 28652 3d88 03 .byte 0x3
+ 28653 3d89 91 .byte 0x91
+ 28654 3d8a 8065 .sleb128 -3456
+ 28655 3d8c 00 .byte 0x0
+ 28656 3d8d 00 .byte 0x0
+ 28657 3d8e 00 .byte 0x0
+ 28658 3d8f 00 .byte 0x0
+ 28659 3d90 36 .uleb128 0x36
+ 28660 3d91 00000000 .quad .LBB1126
+ 28660 00000000
+ 28661 3d99 00000000 .quad .LBE1126
+ 28661 00000000
+ 28662 3da1 B03D0000 .long 0x3db0
+ 28663 3da5 34 .uleb128 0x34
+ 28664 3da6 1C0C0000 .long 0xc1c
+ 28665 3daa 04 .byte 0x4
+ 28666 3dab 91 .byte 0x91
+ 28667 3dac A0B07F .sleb128 -10208
+ 28668 3daf 00 .byte 0x0
+ 28669 3db0 31 .uleb128 0x31
+ 28670 3db1 4A0E0000 .long 0xe4a
+ 28671 3db5 00000000 .quad .LBB1127
+ 28671 00000000
+ 28672 3dbd 00000000 .quad .LBE1127
+ 28672 00000000
+ 28673 3dc5 02 .byte 0x2
+ 28674 3dc6 9406 .value 0x694
+ 28675 3dc8 4D3E0000 .long 0x3e4d
+ 28676 3dcc 32 .uleb128 0x32
+ 28677 3dcd 5C0E0000 .long 0xe5c
+ 28678 3dd1 03 .byte 0x3
+ 28679 3dd2 91 .byte 0x91
+ 28680 3dd3 9065 .sleb128 -3440
+ 28681 3dd5 33 .uleb128 0x33
+ 28682 3dd6 00000000 .quad .LBB1128
+ 28682 00000000
+ 28683 3dde 00000000 .quad .LBE1128
+ 28683 00000000
+ 28684 3de6 34 .uleb128 0x34
+ 28685 3de7 680E0000 .long 0xe68
+ 28686 3deb 09 .byte 0x9
+ 28687 3dec 03 .byte 0x3
+ 28688 3ded 00000000 .quad ShiftRowTable.7385
+ 28688 00000000
+ 28689 3df5 35 .uleb128 0x35
+ 28690 3df6 A00D0000 .long 0xda0
+ 28691 3dfa 00000000 .quad .LBB1129
+ 28691 00000000
+ 28692 3e02 00000000 .quad .LBE1129
+ 28692 00000000
+ 28693 3e0a 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 788
+
+
+ 28694 3e0b 9B02 .value 0x29b
+ 28695 3e0d 32 .uleb128 0x32
+ 28696 3e0e BE0D0000 .long 0xdbe
+ 28697 3e12 03 .byte 0x3
+ 28698 3e13 91 .byte 0x91
+ 28699 3e14 A065 .sleb128 -3424
+ 28700 3e16 32 .uleb128 0x32
+ 28701 3e17 B20D0000 .long 0xdb2
+ 28702 3e1b 03 .byte 0x3
+ 28703 3e1c 91 .byte 0x91
+ 28704 3e1d B065 .sleb128 -3408
+ 28705 3e1f 35 .uleb128 0x35
+ 28706 3e20 CB0D0000 .long 0xdcb
+ 28707 3e24 00000000 .quad .LBB1131
+ 28707 00000000
+ 28708 3e2c 00000000 .quad .LBE1131
+ 28708 00000000
+ 28709 3e34 02 .byte 0x2
+ 28710 3e35 7501 .value 0x175
+ 28711 3e37 32 .uleb128 0x32
+ 28712 3e38 E90D0000 .long 0xde9
+ 28713 3e3c 03 .byte 0x3
+ 28714 3e3d 91 .byte 0x91
+ 28715 3e3e C065 .sleb128 -3392
+ 28716 3e40 32 .uleb128 0x32
+ 28717 3e41 DD0D0000 .long 0xddd
+ 28718 3e45 03 .byte 0x3
+ 28719 3e46 91 .byte 0x91
+ 28720 3e47 D065 .sleb128 -3376
+ 28721 3e49 00 .byte 0x0
+ 28722 3e4a 00 .byte 0x0
+ 28723 3e4b 00 .byte 0x0
+ 28724 3e4c 00 .byte 0x0
+ 28725 3e4d 36 .uleb128 0x36
+ 28726 3e4e 00000000 .quad .LBB1133
+ 28726 00000000
+ 28727 3e56 00000000 .quad .LBE1133
+ 28727 00000000
+ 28728 3e5e 6D3E0000 .long 0x3e6d
+ 28729 3e62 34 .uleb128 0x34
+ 28730 3e63 2C0C0000 .long 0xc2c
+ 28731 3e67 04 .byte 0x4
+ 28732 3e68 91 .byte 0x91
+ 28733 3e69 90B07F .sleb128 -10224
+ 28734 3e6c 00 .byte 0x0
+ 28735 3e6d 31 .uleb128 0x31
+ 28736 3e6e 860E0000 .long 0xe86
+ 28737 3e72 00000000 .quad .LBB1134
+ 28737 00000000
+ 28738 3e7a 00000000 .quad .LBE1134
+ 28738 00000000
+ 28739 3e82 02 .byte 0x2
+ 28740 3e83 9606 .value 0x696
+ 28741 3e85 9C3E0000 .long 0x3e9c
+ 28742 3e89 32 .uleb128 0x32
+ 28743 3e8a A10E0000 .long 0xea1
+ 28744 3e8e 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 789
+
+
+ 28745 3e8f 91 .byte 0x91
+ 28746 3e90 E065 .sleb128 -3360
+ 28747 3e92 32 .uleb128 0x32
+ 28748 3e93 970E0000 .long 0xe97
+ 28749 3e97 03 .byte 0x3
+ 28750 3e98 91 .byte 0x91
+ 28751 3e99 F065 .sleb128 -3344
+ 28752 3e9b 00 .byte 0x0
+ 28753 3e9c 36 .uleb128 0x36
+ 28754 3e9d 00000000 .quad .LBB1136
+ 28754 00000000
+ 28755 3ea5 00000000 .quad .LBE1136
+ 28755 00000000
+ 28756 3ead BC3E0000 .long 0x3ebc
+ 28757 3eb1 34 .uleb128 0x34
+ 28758 3eb2 3C0C0000 .long 0xc3c
+ 28759 3eb6 04 .byte 0x4
+ 28760 3eb7 91 .byte 0x91
+ 28761 3eb8 80B07F .sleb128 -10240
+ 28762 3ebb 00 .byte 0x0
+ 28763 3ebc 31 .uleb128 0x31
+ 28764 3ebd AC0E0000 .long 0xeac
+ 28765 3ec1 00000000 .quad .LBB1137
+ 28765 00000000
+ 28766 3ec9 00000000 .quad .LBE1137
+ 28766 00000000
+ 28767 3ed1 02 .byte 0x2
+ 28768 3ed2 9806 .value 0x698
+ 28769 3ed4 0D3F0000 .long 0x3f0d
+ 28770 3ed8 32 .uleb128 0x32
+ 28771 3ed9 BE0E0000 .long 0xebe
+ 28772 3edd 03 .byte 0x3
+ 28773 3ede 91 .byte 0x91
+ 28774 3edf 8066 .sleb128 -3328
+ 28775 3ee1 35 .uleb128 0x35
+ 28776 3ee2 CB0E0000 .long 0xecb
+ 28777 3ee6 00000000 .quad .LBB1139
+ 28777 00000000
+ 28778 3eee 00000000 .quad .LBE1139
+ 28778 00000000
+ 28779 3ef6 02 .byte 0x2
+ 28780 3ef7 4905 .value 0x549
+ 28781 3ef9 32 .uleb128 0x32
+ 28782 3efa E90E0000 .long 0xee9
+ 28783 3efe 03 .byte 0x3
+ 28784 3eff 91 .byte 0x91
+ 28785 3f00 9C66 .sleb128 -3300
+ 28786 3f02 32 .uleb128 0x32
+ 28787 3f03 DD0E0000 .long 0xedd
+ 28788 3f07 03 .byte 0x3
+ 28789 3f08 91 .byte 0x91
+ 28790 3f09 A066 .sleb128 -3296
+ 28791 3f0b 00 .byte 0x0
+ 28792 3f0c 00 .byte 0x0
+ 28793 3f0d 33 .uleb128 0x33
+ 28794 3f0e 00000000 .quad .LBB1141
+ 28794 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 790
+
+
+ 28795 3f16 00000000 .quad .LBE1141
+ 28795 00000000
+ 28796 3f1e 34 .uleb128 0x34
+ 28797 3f1f 480C0000 .long 0xc48
+ 28798 3f23 04 .byte 0x4
+ 28799 3f24 91 .byte 0x91
+ 28800 3f25 F0AF7F .sleb128 -10256
+ 28801 3f28 00 .byte 0x0
+ 28802 3f29 00 .byte 0x0
+ 28803 3f2a 00 .byte 0x0
+ 28804 3f2b 31 .uleb128 0x31
+ 28805 3f2c F60E0000 .long 0xef6
+ 28806 3f30 00000000 .quad .LBB1142
+ 28806 00000000
+ 28807 3f38 00000000 .quad .LBE1142
+ 28807 00000000
+ 28808 3f40 02 .byte 0x2
+ 28809 3f41 D606 .value 0x6d6
+ 28810 3f43 40410000 .long 0x4140
+ 28811 3f47 32 .uleb128 0x32
+ 28812 3f48 080F0000 .long 0xf08
+ 28813 3f4c 03 .byte 0x3
+ 28814 3f4d 91 .byte 0x91
+ 28815 3f4e B066 .sleb128 -3280
+ 28816 3f50 33 .uleb128 0x33
+ 28817 3f51 00000000 .quad .LBB1143
+ 28817 00000000
+ 28818 3f59 00000000 .quad .LBE1143
+ 28818 00000000
+ 28819 3f61 34 .uleb128 0x34
+ 28820 3f62 140F0000 .long 0xf14
+ 28821 3f66 04 .byte 0x4
+ 28822 3f67 76 .byte 0x76
+ 28823 3f68 D0AB7F .sleb128 -10800
+ 28824 3f6b 31 .uleb128 0x31
+ 28825 3f6c 210F0000 .long 0xf21
+ 28826 3f70 00000000 .quad .LBB1144
+ 28826 00000000
+ 28827 3f78 00000000 .quad .LBE1144
+ 28827 00000000
+ 28828 3f80 02 .byte 0x2
+ 28829 3f81 1F06 .value 0x61f
+ 28830 3f83 08400000 .long 0x4008
+ 28831 3f87 32 .uleb128 0x32
+ 28832 3f88 330F0000 .long 0xf33
+ 28833 3f8c 03 .byte 0x3
+ 28834 3f8d 91 .byte 0x91
+ 28835 3f8e C066 .sleb128 -3264
+ 28836 3f90 33 .uleb128 0x33
+ 28837 3f91 00000000 .quad .LBB1145
+ 28837 00000000
+ 28838 3f99 00000000 .quad .LBE1145
+ 28838 00000000
+ 28839 3fa1 34 .uleb128 0x34
+ 28840 3fa2 3F0F0000 .long 0xf3f
+ 28841 3fa6 09 .byte 0x9
+ 28842 3fa7 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 791
+
+
+ 28843 3fa8 00000000 .quad mask.7943
+ 28843 00000000
+ 28844 3fb0 35 .uleb128 0x35
+ 28845 3fb1 A00D0000 .long 0xda0
+ 28846 3fb5 00000000 .quad .LBB1146
+ 28846 00000000
+ 28847 3fbd 00000000 .quad .LBE1146
+ 28847 00000000
+ 28848 3fc5 02 .byte 0x2
+ 28849 3fc6 FE04 .value 0x4fe
+ 28850 3fc8 32 .uleb128 0x32
+ 28851 3fc9 BE0D0000 .long 0xdbe
+ 28852 3fcd 03 .byte 0x3
+ 28853 3fce 91 .byte 0x91
+ 28854 3fcf D066 .sleb128 -3248
+ 28855 3fd1 32 .uleb128 0x32
+ 28856 3fd2 B20D0000 .long 0xdb2
+ 28857 3fd6 03 .byte 0x3
+ 28858 3fd7 91 .byte 0x91
+ 28859 3fd8 E066 .sleb128 -3232
+ 28860 3fda 35 .uleb128 0x35
+ 28861 3fdb CB0D0000 .long 0xdcb
+ 28862 3fdf 00000000 .quad .LBB1148
+ 28862 00000000
+ 28863 3fe7 00000000 .quad .LBE1148
+ 28863 00000000
+ 28864 3fef 02 .byte 0x2
+ 28865 3ff0 7501 .value 0x175
+ 28866 3ff2 32 .uleb128 0x32
+ 28867 3ff3 E90D0000 .long 0xde9
+ 28868 3ff7 03 .byte 0x3
+ 28869 3ff8 91 .byte 0x91
+ 28870 3ff9 F066 .sleb128 -3216
+ 28871 3ffb 32 .uleb128 0x32
+ 28872 3ffc DD0D0000 .long 0xddd
+ 28873 4000 03 .byte 0x3
+ 28874 4001 91 .byte 0x91
+ 28875 4002 8067 .sleb128 -3200
+ 28876 4004 00 .byte 0x0
+ 28877 4005 00 .byte 0x0
+ 28878 4006 00 .byte 0x0
+ 28879 4007 00 .byte 0x0
+ 28880 4008 31 .uleb128 0x31
+ 28881 4009 210F0000 .long 0xf21
+ 28882 400d 00000000 .quad .LBB1150
+ 28882 00000000
+ 28883 4015 00000000 .quad .LBE1150
+ 28883 00000000
+ 28884 401d 02 .byte 0x2
+ 28885 401e 2006 .value 0x620
+ 28886 4020 A5400000 .long 0x40a5
+ 28887 4024 32 .uleb128 0x32
+ 28888 4025 330F0000 .long 0xf33
+ 28889 4029 03 .byte 0x3
+ 28890 402a 91 .byte 0x91
+ 28891 402b 9067 .sleb128 -3184
+ 28892 402d 33 .uleb128 0x33
+
GAS LISTING /tmp/ccjbMjHD.s page 792
+
+
+ 28893 402e 00000000 .quad .LBB1151
+ 28893 00000000
+ 28894 4036 00000000 .quad .LBE1151
+ 28894 00000000
+ 28895 403e 34 .uleb128 0x34
+ 28896 403f 3F0F0000 .long 0xf3f
+ 28897 4043 09 .byte 0x9
+ 28898 4044 03 .byte 0x3
+ 28899 4045 00000000 .quad mask.7943
+ 28899 00000000
+ 28900 404d 35 .uleb128 0x35
+ 28901 404e A00D0000 .long 0xda0
+ 28902 4052 00000000 .quad .LBB1152
+ 28902 00000000
+ 28903 405a 00000000 .quad .LBE1152
+ 28903 00000000
+ 28904 4062 02 .byte 0x2
+ 28905 4063 FE04 .value 0x4fe
+ 28906 4065 32 .uleb128 0x32
+ 28907 4066 BE0D0000 .long 0xdbe
+ 28908 406a 03 .byte 0x3
+ 28909 406b 91 .byte 0x91
+ 28910 406c A067 .sleb128 -3168
+ 28911 406e 32 .uleb128 0x32
+ 28912 406f B20D0000 .long 0xdb2
+ 28913 4073 03 .byte 0x3
+ 28914 4074 91 .byte 0x91
+ 28915 4075 B067 .sleb128 -3152
+ 28916 4077 35 .uleb128 0x35
+ 28917 4078 CB0D0000 .long 0xdcb
+ 28918 407c 00000000 .quad .LBB1154
+ 28918 00000000
+ 28919 4084 00000000 .quad .LBE1154
+ 28919 00000000
+ 28920 408c 02 .byte 0x2
+ 28921 408d 7501 .value 0x175
+ 28922 408f 32 .uleb128 0x32
+ 28923 4090 E90D0000 .long 0xde9
+ 28924 4094 03 .byte 0x3
+ 28925 4095 91 .byte 0x91
+ 28926 4096 C067 .sleb128 -3136
+ 28927 4098 32 .uleb128 0x32
+ 28928 4099 DD0D0000 .long 0xddd
+ 28929 409d 03 .byte 0x3
+ 28930 409e 91 .byte 0x91
+ 28931 409f D067 .sleb128 -3120
+ 28932 40a1 00 .byte 0x0
+ 28933 40a2 00 .byte 0x0
+ 28934 40a3 00 .byte 0x0
+ 28935 40a4 00 .byte 0x0
+ 28936 40a5 35 .uleb128 0x35
+ 28937 40a6 210F0000 .long 0xf21
+ 28938 40aa 00000000 .quad .LBB1156
+ 28938 00000000
+ 28939 40b2 00000000 .quad .LBE1156
+ 28939 00000000
+ 28940 40ba 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 793
+
+
+ 28941 40bb 2106 .value 0x621
+ 28942 40bd 32 .uleb128 0x32
+ 28943 40be 330F0000 .long 0xf33
+ 28944 40c2 03 .byte 0x3
+ 28945 40c3 91 .byte 0x91
+ 28946 40c4 E067 .sleb128 -3104
+ 28947 40c6 33 .uleb128 0x33
+ 28948 40c7 00000000 .quad .LBB1157
+ 28948 00000000
+ 28949 40cf 00000000 .quad .LBE1157
+ 28949 00000000
+ 28950 40d7 34 .uleb128 0x34
+ 28951 40d8 3F0F0000 .long 0xf3f
+ 28952 40dc 09 .byte 0x9
+ 28953 40dd 03 .byte 0x3
+ 28954 40de 00000000 .quad mask.7943
+ 28954 00000000
+ 28955 40e6 35 .uleb128 0x35
+ 28956 40e7 A00D0000 .long 0xda0
+ 28957 40eb 00000000 .quad .LBB1158
+ 28957 00000000
+ 28958 40f3 00000000 .quad .LBE1158
+ 28958 00000000
+ 28959 40fb 02 .byte 0x2
+ 28960 40fc FE04 .value 0x4fe
+ 28961 40fe 32 .uleb128 0x32
+ 28962 40ff BE0D0000 .long 0xdbe
+ 28963 4103 03 .byte 0x3
+ 28964 4104 91 .byte 0x91
+ 28965 4105 F067 .sleb128 -3088
+ 28966 4107 32 .uleb128 0x32
+ 28967 4108 B20D0000 .long 0xdb2
+ 28968 410c 03 .byte 0x3
+ 28969 410d 91 .byte 0x91
+ 28970 410e 8068 .sleb128 -3072
+ 28971 4110 35 .uleb128 0x35
+ 28972 4111 CB0D0000 .long 0xdcb
+ 28973 4115 00000000 .quad .LBB1160
+ 28973 00000000
+ 28974 411d 00000000 .quad .LBE1160
+ 28974 00000000
+ 28975 4125 02 .byte 0x2
+ 28976 4126 7501 .value 0x175
+ 28977 4128 32 .uleb128 0x32
+ 28978 4129 E90D0000 .long 0xde9
+ 28979 412d 03 .byte 0x3
+ 28980 412e 91 .byte 0x91
+ 28981 412f 9068 .sleb128 -3056
+ 28982 4131 32 .uleb128 0x32
+ 28983 4132 DD0D0000 .long 0xddd
+ 28984 4136 03 .byte 0x3
+ 28985 4137 91 .byte 0x91
+ 28986 4138 A068 .sleb128 -3040
+ 28987 413a 00 .byte 0x0
+ 28988 413b 00 .byte 0x0
+ 28989 413c 00 .byte 0x0
+ 28990 413d 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 794
+
+
+ 28991 413e 00 .byte 0x0
+ 28992 413f 00 .byte 0x0
+ 28993 4140 31 .uleb128 0x31
+ 28994 4141 D50B0000 .long 0xbd5
+ 28995 4145 00000000 .quad .LBB1162
+ 28995 00000000
+ 28996 414d 00000000 .quad .LBE1162
+ 28996 00000000
+ 28997 4155 02 .byte 0x2
+ 28998 4156 D706 .value 0x6d7
+ 28999 4158 23460000 .long 0x4623
+ 29000 415c 32 .uleb128 0x32
+ 29001 415d F30B0000 .long 0xbf3
+ 29002 4161 03 .byte 0x3
+ 29003 4162 91 .byte 0x91
+ 29004 4163 BC68 .sleb128 -3012
+ 29005 4165 32 .uleb128 0x32
+ 29006 4166 E70B0000 .long 0xbe7
+ 29007 416a 03 .byte 0x3
+ 29008 416b 91 .byte 0x91
+ 29009 416c C068 .sleb128 -3008
+ 29010 416e 33 .uleb128 0x33
+ 29011 416f 00000000 .quad .LBB1163
+ 29011 00000000
+ 29012 4177 00000000 .quad .LBE1163
+ 29012 00000000
+ 29013 417f 34 .uleb128 0x34
+ 29014 4180 FF0B0000 .long 0xbff
+ 29015 4184 04 .byte 0x4
+ 29016 4185 76 .byte 0x76
+ 29017 4186 F0AB7F .sleb128 -10768
+ 29018 4189 34 .uleb128 0x34
+ 29019 418a 0B0C0000 .long 0xc0b
+ 29020 418e 04 .byte 0x4
+ 29021 418f 76 .byte 0x76
+ 29022 4190 E0AB7F .sleb128 -10784
+ 29023 4193 31 .uleb128 0x31
+ 29024 4194 540C0000 .long 0xc54
+ 29025 4198 00000000 .quad .LBB1164
+ 29025 00000000
+ 29026 41a0 00000000 .quad .LBE1164
+ 29026 00000000
+ 29027 41a8 02 .byte 0x2
+ 29028 41a9 9106 .value 0x691
+ 29029 41ab FF410000 .long 0x41ff
+ 29030 41af 32 .uleb128 0x32
+ 29031 41b0 7E0C0000 .long 0xc7e
+ 29032 41b4 03 .byte 0x3
+ 29033 41b5 91 .byte 0x91
+ 29034 41b6 D868 .sleb128 -2984
+ 29035 41b8 32 .uleb128 0x32
+ 29036 41b9 720C0000 .long 0xc72
+ 29037 41bd 03 .byte 0x3
+ 29038 41be 91 .byte 0x91
+ 29039 41bf DC68 .sleb128 -2980
+ 29040 41c1 32 .uleb128 0x32
+ 29041 41c2 660C0000 .long 0xc66
+
GAS LISTING /tmp/ccjbMjHD.s page 795
+
+
+ 29042 41c6 03 .byte 0x3
+ 29043 41c7 91 .byte 0x91
+ 29044 41c8 E068 .sleb128 -2976
+ 29045 41ca 35 .uleb128 0x35
+ 29046 41cb 8B0C0000 .long 0xc8b
+ 29047 41cf 00000000 .quad .LBB1166
+ 29047 00000000
+ 29048 41d7 00000000 .quad .LBE1166
+ 29048 00000000
+ 29049 41df 02 .byte 0x2
+ 29050 41e0 0702 .value 0x207
+ 29051 41e2 32 .uleb128 0x32
+ 29052 41e3 B40C0000 .long 0xcb4
+ 29053 41e7 03 .byte 0x3
+ 29054 41e8 91 .byte 0x91
+ 29055 41e9 F868 .sleb128 -2952
+ 29056 41eb 32 .uleb128 0x32
+ 29057 41ec A90C0000 .long 0xca9
+ 29058 41f0 03 .byte 0x3
+ 29059 41f1 91 .byte 0x91
+ 29060 41f2 FC68 .sleb128 -2948
+ 29061 41f4 32 .uleb128 0x32
+ 29062 41f5 9D0C0000 .long 0xc9d
+ 29063 41f9 03 .byte 0x3
+ 29064 41fa 91 .byte 0x91
+ 29065 41fb 8069 .sleb128 -2944
+ 29066 41fd 00 .byte 0x0
+ 29067 41fe 00 .byte 0x0
+ 29068 41ff 31 .uleb128 0x31
+ 29069 4200 C10C0000 .long 0xcc1
+ 29070 4204 00000000 .quad .LBB1168
+ 29070 00000000
+ 29071 420c 00000000 .quad .LBE1168
+ 29071 00000000
+ 29072 4214 02 .byte 0x2
+ 29073 4215 9206 .value 0x692
+ 29074 4217 88440000 .long 0x4488
+ 29075 421b 32 .uleb128 0x32
+ 29076 421c D30C0000 .long 0xcd3
+ 29077 4220 03 .byte 0x3
+ 29078 4221 91 .byte 0x91
+ 29079 4222 9069 .sleb128 -2928
+ 29080 4224 35 .uleb128 0x35
+ 29081 4225 E00C0000 .long 0xce0
+ 29082 4229 00000000 .quad .LBB1170
+ 29082 00000000
+ 29083 4231 00000000 .quad .LBE1170
+ 29083 00000000
+ 29084 4239 02 .byte 0x2
+ 29085 423a 7D03 .value 0x37d
+ 29086 423c 32 .uleb128 0x32
+ 29087 423d FE0C0000 .long 0xcfe
+ 29088 4241 03 .byte 0x3
+ 29089 4242 91 .byte 0x91
+ 29090 4243 A869 .sleb128 -2904
+ 29091 4245 32 .uleb128 0x32
+ 29092 4246 F20C0000 .long 0xcf2
+
GAS LISTING /tmp/ccjbMjHD.s page 796
+
+
+ 29093 424a 03 .byte 0x3
+ 29094 424b 91 .byte 0x91
+ 29095 424c B069 .sleb128 -2896
+ 29096 424e 33 .uleb128 0x33
+ 29097 424f 00000000 .quad .LBB1171
+ 29097 00000000
+ 29098 4257 00000000 .quad .LBE1171
+ 29098 00000000
+ 29099 425f 34 .uleb128 0x34
+ 29100 4260 0A0D0000 .long 0xd0a
+ 29101 4264 03 .byte 0x3
+ 29102 4265 91 .byte 0x91
+ 29103 4266 806A .sleb128 -2816
+ 29104 4268 34 .uleb128 0x34
+ 29105 4269 150D0000 .long 0xd15
+ 29106 426d 03 .byte 0x3
+ 29107 426e 91 .byte 0x91
+ 29108 426f F069 .sleb128 -2832
+ 29109 4271 34 .uleb128 0x34
+ 29110 4272 200D0000 .long 0xd20
+ 29111 4276 03 .byte 0x3
+ 29112 4277 91 .byte 0x91
+ 29113 4278 E069 .sleb128 -2848
+ 29114 427a 34 .uleb128 0x34
+ 29115 427b 2C0D0000 .long 0xd2c
+ 29116 427f 03 .byte 0x3
+ 29117 4280 91 .byte 0x91
+ 29118 4281 D069 .sleb128 -2864
+ 29119 4283 34 .uleb128 0x34
+ 29120 4284 380D0000 .long 0xd38
+ 29121 4288 03 .byte 0x3
+ 29122 4289 91 .byte 0x91
+ 29123 428a CC69 .sleb128 -2868
+ 29124 428c 31 .uleb128 0x31
+ 29125 428d 4F0D0000 .long 0xd4f
+ 29126 4291 00000000 .quad .LBB1172
+ 29126 00000000
+ 29127 4299 00000000 .quad .LBE1172
+ 29127 00000000
+ 29128 42a1 02 .byte 0x2
+ 29129 42a2 5603 .value 0x356
+ 29130 42a4 BB420000 .long 0x42bb
+ 29131 42a8 32 .uleb128 0x32
+ 29132 42a9 6A0D0000 .long 0xd6a
+ 29133 42ad 03 .byte 0x3
+ 29134 42ae 91 .byte 0x91
+ 29135 42af 906A .sleb128 -2800
+ 29136 42b1 32 .uleb128 0x32
+ 29137 42b2 600D0000 .long 0xd60
+ 29138 42b6 03 .byte 0x3
+ 29139 42b7 91 .byte 0x91
+ 29140 42b8 A06A .sleb128 -2784
+ 29141 42ba 00 .byte 0x0
+ 29142 42bb 31 .uleb128 0x31
+ 29143 42bc 750D0000 .long 0xd75
+ 29144 42c0 00000000 .quad .LBB1174
+ 29144 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 797
+
+
+ 29145 42c8 00000000 .quad .LBE1174
+ 29145 00000000
+ 29146 42d0 02 .byte 0x2
+ 29147 42d1 5903 .value 0x359
+ 29148 42d3 EA420000 .long 0x42ea
+ 29149 42d7 32 .uleb128 0x32
+ 29150 42d8 930D0000 .long 0xd93
+ 29151 42dc 03 .byte 0x3
+ 29152 42dd 91 .byte 0x91
+ 29153 42de BC6A .sleb128 -2756
+ 29154 42e0 32 .uleb128 0x32
+ 29155 42e1 870D0000 .long 0xd87
+ 29156 42e5 03 .byte 0x3
+ 29157 42e6 91 .byte 0x91
+ 29158 42e7 C06A .sleb128 -2752
+ 29159 42e9 00 .byte 0x0
+ 29160 42ea 31 .uleb128 0x31
+ 29161 42eb 4F0D0000 .long 0xd4f
+ 29162 42ef 00000000 .quad .LBB1176
+ 29162 00000000
+ 29163 42f7 00000000 .quad .LBE1176
+ 29163 00000000
+ 29164 42ff 02 .byte 0x2
+ 29165 4300 5B03 .value 0x35b
+ 29166 4302 19430000 .long 0x4319
+ 29167 4306 32 .uleb128 0x32
+ 29168 4307 6A0D0000 .long 0xd6a
+ 29169 430b 03 .byte 0x3
+ 29170 430c 91 .byte 0x91
+ 29171 430d D06A .sleb128 -2736
+ 29172 430f 32 .uleb128 0x32
+ 29173 4310 600D0000 .long 0xd60
+ 29174 4314 03 .byte 0x3
+ 29175 4315 91 .byte 0x91
+ 29176 4316 E06A .sleb128 -2720
+ 29177 4318 00 .byte 0x0
+ 29178 4319 31 .uleb128 0x31
+ 29179 431a A00D0000 .long 0xda0
+ 29180 431e 00000000 .quad .LBB1178
+ 29180 00000000
+ 29181 4326 00000000 .quad .LBE1178
+ 29181 00000000
+ 29182 432e 02 .byte 0x2
+ 29183 432f 6403 .value 0x364
+ 29184 4331 73430000 .long 0x4373
+ 29185 4335 32 .uleb128 0x32
+ 29186 4336 BE0D0000 .long 0xdbe
+ 29187 433a 03 .byte 0x3
+ 29188 433b 91 .byte 0x91
+ 29189 433c F06A .sleb128 -2704
+ 29190 433e 32 .uleb128 0x32
+ 29191 433f B20D0000 .long 0xdb2
+ 29192 4343 03 .byte 0x3
+ 29193 4344 91 .byte 0x91
+ 29194 4345 806B .sleb128 -2688
+ 29195 4347 35 .uleb128 0x35
+ 29196 4348 CB0D0000 .long 0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s page 798
+
+
+ 29197 434c 00000000 .quad .LBB1180
+ 29197 00000000
+ 29198 4354 00000000 .quad .LBE1180
+ 29198 00000000
+ 29199 435c 02 .byte 0x2
+ 29200 435d 7501 .value 0x175
+ 29201 435f 32 .uleb128 0x32
+ 29202 4360 E90D0000 .long 0xde9
+ 29203 4364 03 .byte 0x3
+ 29204 4365 91 .byte 0x91
+ 29205 4366 906B .sleb128 -2672
+ 29206 4368 32 .uleb128 0x32
+ 29207 4369 DD0D0000 .long 0xddd
+ 29208 436d 03 .byte 0x3
+ 29209 436e 91 .byte 0x91
+ 29210 436f A06B .sleb128 -2656
+ 29211 4371 00 .byte 0x0
+ 29212 4372 00 .byte 0x0
+ 29213 4373 31 .uleb128 0x31
+ 29214 4374 FB0D0000 .long 0xdfb
+ 29215 4378 00000000 .quad .LBB1182
+ 29215 00000000
+ 29216 4380 00000000 .quad .LBE1182
+ 29216 00000000
+ 29217 4388 02 .byte 0x2
+ 29218 4389 6603 .value 0x366
+ 29219 438b A2430000 .long 0x43a2
+ 29220 438f 32 .uleb128 0x32
+ 29221 4390 160E0000 .long 0xe16
+ 29222 4394 03 .byte 0x3
+ 29223 4395 91 .byte 0x91
+ 29224 4396 B06B .sleb128 -2640
+ 29225 4398 32 .uleb128 0x32
+ 29226 4399 0C0E0000 .long 0xe0c
+ 29227 439d 03 .byte 0x3
+ 29228 439e 91 .byte 0x91
+ 29229 439f C06B .sleb128 -2624
+ 29230 43a1 00 .byte 0x0
+ 29231 43a2 31 .uleb128 0x31
+ 29232 43a3 A00D0000 .long 0xda0
+ 29233 43a7 00000000 .quad .LBB1184
+ 29233 00000000
+ 29234 43af 00000000 .quad .LBE1184
+ 29234 00000000
+ 29235 43b7 02 .byte 0x2
+ 29236 43b8 6803 .value 0x368
+ 29237 43ba FC430000 .long 0x43fc
+ 29238 43be 32 .uleb128 0x32
+ 29239 43bf BE0D0000 .long 0xdbe
+ 29240 43c3 03 .byte 0x3
+ 29241 43c4 91 .byte 0x91
+ 29242 43c5 D06B .sleb128 -2608
+ 29243 43c7 32 .uleb128 0x32
+ 29244 43c8 B20D0000 .long 0xdb2
+ 29245 43cc 03 .byte 0x3
+ 29246 43cd 91 .byte 0x91
+ 29247 43ce E06B .sleb128 -2592
+
GAS LISTING /tmp/ccjbMjHD.s page 799
+
+
+ 29248 43d0 35 .uleb128 0x35
+ 29249 43d1 CB0D0000 .long 0xdcb
+ 29250 43d5 00000000 .quad .LBB1186
+ 29250 00000000
+ 29251 43dd 00000000 .quad .LBE1186
+ 29251 00000000
+ 29252 43e5 02 .byte 0x2
+ 29253 43e6 7501 .value 0x175
+ 29254 43e8 32 .uleb128 0x32
+ 29255 43e9 E90D0000 .long 0xde9
+ 29256 43ed 03 .byte 0x3
+ 29257 43ee 91 .byte 0x91
+ 29258 43ef F06B .sleb128 -2576
+ 29259 43f1 32 .uleb128 0x32
+ 29260 43f2 DD0D0000 .long 0xddd
+ 29261 43f6 03 .byte 0x3
+ 29262 43f7 91 .byte 0x91
+ 29263 43f8 806C .sleb128 -2560
+ 29264 43fa 00 .byte 0x0
+ 29265 43fb 00 .byte 0x0
+ 29266 43fc 31 .uleb128 0x31
+ 29267 43fd FB0D0000 .long 0xdfb
+ 29268 4401 00000000 .quad .LBB1188
+ 29268 00000000
+ 29269 4409 00000000 .quad .LBE1188
+ 29269 00000000
+ 29270 4411 02 .byte 0x2
+ 29271 4412 6A03 .value 0x36a
+ 29272 4414 2B440000 .long 0x442b
+ 29273 4418 32 .uleb128 0x32
+ 29274 4419 160E0000 .long 0xe16
+ 29275 441d 03 .byte 0x3
+ 29276 441e 91 .byte 0x91
+ 29277 441f 906C .sleb128 -2544
+ 29278 4421 32 .uleb128 0x32
+ 29279 4422 0C0E0000 .long 0xe0c
+ 29280 4426 03 .byte 0x3
+ 29281 4427 91 .byte 0x91
+ 29282 4428 A06C .sleb128 -2528
+ 29283 442a 00 .byte 0x0
+ 29284 442b 31 .uleb128 0x31
+ 29285 442c 210E0000 .long 0xe21
+ 29286 4430 00000000 .quad .LBB1190
+ 29286 00000000
+ 29287 4438 00000000 .quad .LBE1190
+ 29287 00000000
+ 29288 4440 02 .byte 0x2
+ 29289 4441 6C03 .value 0x36c
+ 29290 4443 5A440000 .long 0x445a
+ 29291 4447 32 .uleb128 0x32
+ 29292 4448 3E0E0000 .long 0xe3e
+ 29293 444c 03 .byte 0x3
+ 29294 444d 91 .byte 0x91
+ 29295 444e B06C .sleb128 -2512
+ 29296 4450 32 .uleb128 0x32
+ 29297 4451 330E0000 .long 0xe33
+ 29298 4455 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 800
+
+
+ 29299 4456 91 .byte 0x91
+ 29300 4457 C06C .sleb128 -2496
+ 29301 4459 00 .byte 0x0
+ 29302 445a 35 .uleb128 0x35
+ 29303 445b 4F0D0000 .long 0xd4f
+ 29304 445f 00000000 .quad .LBB1192
+ 29304 00000000
+ 29305 4467 00000000 .quad .LBE1192
+ 29305 00000000
+ 29306 446f 02 .byte 0x2
+ 29307 4470 6E03 .value 0x36e
+ 29308 4472 32 .uleb128 0x32
+ 29309 4473 6A0D0000 .long 0xd6a
+ 29310 4477 03 .byte 0x3
+ 29311 4478 91 .byte 0x91
+ 29312 4479 D06C .sleb128 -2480
+ 29313 447b 32 .uleb128 0x32
+ 29314 447c 600D0000 .long 0xd60
+ 29315 4480 03 .byte 0x3
+ 29316 4481 91 .byte 0x91
+ 29317 4482 E06C .sleb128 -2464
+ 29318 4484 00 .byte 0x0
+ 29319 4485 00 .byte 0x0
+ 29320 4486 00 .byte 0x0
+ 29321 4487 00 .byte 0x0
+ 29322 4488 36 .uleb128 0x36
+ 29323 4489 00000000 .quad .LBB1194
+ 29323 00000000
+ 29324 4491 00000000 .quad .LBE1194
+ 29324 00000000
+ 29325 4499 A8440000 .long 0x44a8
+ 29326 449d 34 .uleb128 0x34
+ 29327 449e 1C0C0000 .long 0xc1c
+ 29328 44a2 04 .byte 0x4
+ 29329 44a3 91 .byte 0x91
+ 29330 44a4 E0B07F .sleb128 -10144
+ 29331 44a7 00 .byte 0x0
+ 29332 44a8 31 .uleb128 0x31
+ 29333 44a9 4A0E0000 .long 0xe4a
+ 29334 44ad 00000000 .quad .LBB1195
+ 29334 00000000
+ 29335 44b5 00000000 .quad .LBE1195
+ 29335 00000000
+ 29336 44bd 02 .byte 0x2
+ 29337 44be 9406 .value 0x694
+ 29338 44c0 45450000 .long 0x4545
+ 29339 44c4 32 .uleb128 0x32
+ 29340 44c5 5C0E0000 .long 0xe5c
+ 29341 44c9 03 .byte 0x3
+ 29342 44ca 91 .byte 0x91
+ 29343 44cb F06C .sleb128 -2448
+ 29344 44cd 33 .uleb128 0x33
+ 29345 44ce 00000000 .quad .LBB1196
+ 29345 00000000
+ 29346 44d6 00000000 .quad .LBE1196
+ 29346 00000000
+ 29347 44de 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 801
+
+
+ 29348 44df 680E0000 .long 0xe68
+ 29349 44e3 09 .byte 0x9
+ 29350 44e4 03 .byte 0x3
+ 29351 44e5 00000000 .quad ShiftRowTable.7385
+ 29351 00000000
+ 29352 44ed 35 .uleb128 0x35
+ 29353 44ee A00D0000 .long 0xda0
+ 29354 44f2 00000000 .quad .LBB1197
+ 29354 00000000
+ 29355 44fa 00000000 .quad .LBE1197
+ 29355 00000000
+ 29356 4502 02 .byte 0x2
+ 29357 4503 9B02 .value 0x29b
+ 29358 4505 32 .uleb128 0x32
+ 29359 4506 BE0D0000 .long 0xdbe
+ 29360 450a 03 .byte 0x3
+ 29361 450b 91 .byte 0x91
+ 29362 450c 806D .sleb128 -2432
+ 29363 450e 32 .uleb128 0x32
+ 29364 450f B20D0000 .long 0xdb2
+ 29365 4513 03 .byte 0x3
+ 29366 4514 91 .byte 0x91
+ 29367 4515 906D .sleb128 -2416
+ 29368 4517 35 .uleb128 0x35
+ 29369 4518 CB0D0000 .long 0xdcb
+ 29370 451c 00000000 .quad .LBB1199
+ 29370 00000000
+ 29371 4524 00000000 .quad .LBE1199
+ 29371 00000000
+ 29372 452c 02 .byte 0x2
+ 29373 452d 7501 .value 0x175
+ 29374 452f 32 .uleb128 0x32
+ 29375 4530 E90D0000 .long 0xde9
+ 29376 4534 03 .byte 0x3
+ 29377 4535 91 .byte 0x91
+ 29378 4536 A06D .sleb128 -2400
+ 29379 4538 32 .uleb128 0x32
+ 29380 4539 DD0D0000 .long 0xddd
+ 29381 453d 03 .byte 0x3
+ 29382 453e 91 .byte 0x91
+ 29383 453f B06D .sleb128 -2384
+ 29384 4541 00 .byte 0x0
+ 29385 4542 00 .byte 0x0
+ 29386 4543 00 .byte 0x0
+ 29387 4544 00 .byte 0x0
+ 29388 4545 36 .uleb128 0x36
+ 29389 4546 00000000 .quad .LBB1201
+ 29389 00000000
+ 29390 454e 00000000 .quad .LBE1201
+ 29390 00000000
+ 29391 4556 65450000 .long 0x4565
+ 29392 455a 34 .uleb128 0x34
+ 29393 455b 2C0C0000 .long 0xc2c
+ 29394 455f 04 .byte 0x4
+ 29395 4560 91 .byte 0x91
+ 29396 4561 D0B07F .sleb128 -10160
+ 29397 4564 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 802
+
+
+ 29398 4565 31 .uleb128 0x31
+ 29399 4566 860E0000 .long 0xe86
+ 29400 456a 00000000 .quad .LBB1202
+ 29400 00000000
+ 29401 4572 00000000 .quad .LBE1202
+ 29401 00000000
+ 29402 457a 02 .byte 0x2
+ 29403 457b 9606 .value 0x696
+ 29404 457d 94450000 .long 0x4594
+ 29405 4581 32 .uleb128 0x32
+ 29406 4582 A10E0000 .long 0xea1
+ 29407 4586 03 .byte 0x3
+ 29408 4587 91 .byte 0x91
+ 29409 4588 C06D .sleb128 -2368
+ 29410 458a 32 .uleb128 0x32
+ 29411 458b 970E0000 .long 0xe97
+ 29412 458f 03 .byte 0x3
+ 29413 4590 91 .byte 0x91
+ 29414 4591 D06D .sleb128 -2352
+ 29415 4593 00 .byte 0x0
+ 29416 4594 36 .uleb128 0x36
+ 29417 4595 00000000 .quad .LBB1204
+ 29417 00000000
+ 29418 459d 00000000 .quad .LBE1204
+ 29418 00000000
+ 29419 45a5 B4450000 .long 0x45b4
+ 29420 45a9 34 .uleb128 0x34
+ 29421 45aa 3C0C0000 .long 0xc3c
+ 29422 45ae 04 .byte 0x4
+ 29423 45af 91 .byte 0x91
+ 29424 45b0 C0B07F .sleb128 -10176
+ 29425 45b3 00 .byte 0x0
+ 29426 45b4 31 .uleb128 0x31
+ 29427 45b5 AC0E0000 .long 0xeac
+ 29428 45b9 00000000 .quad .LBB1205
+ 29428 00000000
+ 29429 45c1 00000000 .quad .LBE1205
+ 29429 00000000
+ 29430 45c9 02 .byte 0x2
+ 29431 45ca 9806 .value 0x698
+ 29432 45cc 05460000 .long 0x4605
+ 29433 45d0 32 .uleb128 0x32
+ 29434 45d1 BE0E0000 .long 0xebe
+ 29435 45d5 03 .byte 0x3
+ 29436 45d6 91 .byte 0x91
+ 29437 45d7 E06D .sleb128 -2336
+ 29438 45d9 35 .uleb128 0x35
+ 29439 45da CB0E0000 .long 0xecb
+ 29440 45de 00000000 .quad .LBB1207
+ 29440 00000000
+ 29441 45e6 00000000 .quad .LBE1207
+ 29441 00000000
+ 29442 45ee 02 .byte 0x2
+ 29443 45ef 4905 .value 0x549
+ 29444 45f1 32 .uleb128 0x32
+ 29445 45f2 E90E0000 .long 0xee9
+ 29446 45f6 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 803
+
+
+ 29447 45f7 91 .byte 0x91
+ 29448 45f8 FC6D .sleb128 -2308
+ 29449 45fa 32 .uleb128 0x32
+ 29450 45fb DD0E0000 .long 0xedd
+ 29451 45ff 03 .byte 0x3
+ 29452 4600 91 .byte 0x91
+ 29453 4601 806E .sleb128 -2304
+ 29454 4603 00 .byte 0x0
+ 29455 4604 00 .byte 0x0
+ 29456 4605 33 .uleb128 0x33
+ 29457 4606 00000000 .quad .LBB1209
+ 29457 00000000
+ 29458 460e 00000000 .quad .LBE1209
+ 29458 00000000
+ 29459 4616 34 .uleb128 0x34
+ 29460 4617 480C0000 .long 0xc48
+ 29461 461b 04 .byte 0x4
+ 29462 461c 91 .byte 0x91
+ 29463 461d B0B07F .sleb128 -10192
+ 29464 4620 00 .byte 0x0
+ 29465 4621 00 .byte 0x0
+ 29466 4622 00 .byte 0x0
+ 29467 4623 31 .uleb128 0x31
+ 29468 4624 F60E0000 .long 0xef6
+ 29469 4628 00000000 .quad .LBB1210
+ 29469 00000000
+ 29470 4630 00000000 .quad .LBE1210
+ 29470 00000000
+ 29471 4638 02 .byte 0x2
+ 29472 4639 D706 .value 0x6d7
+ 29473 463b 38480000 .long 0x4838
+ 29474 463f 32 .uleb128 0x32
+ 29475 4640 080F0000 .long 0xf08
+ 29476 4644 03 .byte 0x3
+ 29477 4645 91 .byte 0x91
+ 29478 4646 906E .sleb128 -2288
+ 29479 4648 33 .uleb128 0x33
+ 29480 4649 00000000 .quad .LBB1211
+ 29480 00000000
+ 29481 4651 00000000 .quad .LBE1211
+ 29481 00000000
+ 29482 4659 34 .uleb128 0x34
+ 29483 465a 140F0000 .long 0xf14
+ 29484 465e 04 .byte 0x4
+ 29485 465f 76 .byte 0x76
+ 29486 4660 80AC7F .sleb128 -10752
+ 29487 4663 31 .uleb128 0x31
+ 29488 4664 210F0000 .long 0xf21
+ 29489 4668 00000000 .quad .LBB1212
+ 29489 00000000
+ 29490 4670 00000000 .quad .LBE1212
+ 29490 00000000
+ 29491 4678 02 .byte 0x2
+ 29492 4679 1F06 .value 0x61f
+ 29493 467b 00470000 .long 0x4700
+ 29494 467f 32 .uleb128 0x32
+ 29495 4680 330F0000 .long 0xf33
+
GAS LISTING /tmp/ccjbMjHD.s page 804
+
+
+ 29496 4684 03 .byte 0x3
+ 29497 4685 91 .byte 0x91
+ 29498 4686 A06E .sleb128 -2272
+ 29499 4688 33 .uleb128 0x33
+ 29500 4689 00000000 .quad .LBB1213
+ 29500 00000000
+ 29501 4691 00000000 .quad .LBE1213
+ 29501 00000000
+ 29502 4699 34 .uleb128 0x34
+ 29503 469a 3F0F0000 .long 0xf3f
+ 29504 469e 09 .byte 0x9
+ 29505 469f 03 .byte 0x3
+ 29506 46a0 00000000 .quad mask.7943
+ 29506 00000000
+ 29507 46a8 35 .uleb128 0x35
+ 29508 46a9 A00D0000 .long 0xda0
+ 29509 46ad 00000000 .quad .LBB1214
+ 29509 00000000
+ 29510 46b5 00000000 .quad .LBE1214
+ 29510 00000000
+ 29511 46bd 02 .byte 0x2
+ 29512 46be FE04 .value 0x4fe
+ 29513 46c0 32 .uleb128 0x32
+ 29514 46c1 BE0D0000 .long 0xdbe
+ 29515 46c5 03 .byte 0x3
+ 29516 46c6 91 .byte 0x91
+ 29517 46c7 B06E .sleb128 -2256
+ 29518 46c9 32 .uleb128 0x32
+ 29519 46ca B20D0000 .long 0xdb2
+ 29520 46ce 03 .byte 0x3
+ 29521 46cf 91 .byte 0x91
+ 29522 46d0 C06E .sleb128 -2240
+ 29523 46d2 35 .uleb128 0x35
+ 29524 46d3 CB0D0000 .long 0xdcb
+ 29525 46d7 00000000 .quad .LBB1216
+ 29525 00000000
+ 29526 46df 00000000 .quad .LBE1216
+ 29526 00000000
+ 29527 46e7 02 .byte 0x2
+ 29528 46e8 7501 .value 0x175
+ 29529 46ea 32 .uleb128 0x32
+ 29530 46eb E90D0000 .long 0xde9
+ 29531 46ef 03 .byte 0x3
+ 29532 46f0 91 .byte 0x91
+ 29533 46f1 D06E .sleb128 -2224
+ 29534 46f3 32 .uleb128 0x32
+ 29535 46f4 DD0D0000 .long 0xddd
+ 29536 46f8 03 .byte 0x3
+ 29537 46f9 91 .byte 0x91
+ 29538 46fa E06E .sleb128 -2208
+ 29539 46fc 00 .byte 0x0
+ 29540 46fd 00 .byte 0x0
+ 29541 46fe 00 .byte 0x0
+ 29542 46ff 00 .byte 0x0
+ 29543 4700 31 .uleb128 0x31
+ 29544 4701 210F0000 .long 0xf21
+ 29545 4705 00000000 .quad .LBB1218
+
GAS LISTING /tmp/ccjbMjHD.s page 805
+
+
+ 29545 00000000
+ 29546 470d 00000000 .quad .LBE1218
+ 29546 00000000
+ 29547 4715 02 .byte 0x2
+ 29548 4716 2006 .value 0x620
+ 29549 4718 9D470000 .long 0x479d
+ 29550 471c 32 .uleb128 0x32
+ 29551 471d 330F0000 .long 0xf33
+ 29552 4721 03 .byte 0x3
+ 29553 4722 91 .byte 0x91
+ 29554 4723 F06E .sleb128 -2192
+ 29555 4725 33 .uleb128 0x33
+ 29556 4726 00000000 .quad .LBB1219
+ 29556 00000000
+ 29557 472e 00000000 .quad .LBE1219
+ 29557 00000000
+ 29558 4736 34 .uleb128 0x34
+ 29559 4737 3F0F0000 .long 0xf3f
+ 29560 473b 09 .byte 0x9
+ 29561 473c 03 .byte 0x3
+ 29562 473d 00000000 .quad mask.7943
+ 29562 00000000
+ 29563 4745 35 .uleb128 0x35
+ 29564 4746 A00D0000 .long 0xda0
+ 29565 474a 00000000 .quad .LBB1220
+ 29565 00000000
+ 29566 4752 00000000 .quad .LBE1220
+ 29566 00000000
+ 29567 475a 02 .byte 0x2
+ 29568 475b FE04 .value 0x4fe
+ 29569 475d 32 .uleb128 0x32
+ 29570 475e BE0D0000 .long 0xdbe
+ 29571 4762 03 .byte 0x3
+ 29572 4763 91 .byte 0x91
+ 29573 4764 806F .sleb128 -2176
+ 29574 4766 32 .uleb128 0x32
+ 29575 4767 B20D0000 .long 0xdb2
+ 29576 476b 03 .byte 0x3
+ 29577 476c 91 .byte 0x91
+ 29578 476d 906F .sleb128 -2160
+ 29579 476f 35 .uleb128 0x35
+ 29580 4770 CB0D0000 .long 0xdcb
+ 29581 4774 00000000 .quad .LBB1222
+ 29581 00000000
+ 29582 477c 00000000 .quad .LBE1222
+ 29582 00000000
+ 29583 4784 02 .byte 0x2
+ 29584 4785 7501 .value 0x175
+ 29585 4787 32 .uleb128 0x32
+ 29586 4788 E90D0000 .long 0xde9
+ 29587 478c 03 .byte 0x3
+ 29588 478d 91 .byte 0x91
+ 29589 478e A06F .sleb128 -2144
+ 29590 4790 32 .uleb128 0x32
+ 29591 4791 DD0D0000 .long 0xddd
+ 29592 4795 03 .byte 0x3
+ 29593 4796 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 806
+
+
+ 29594 4797 B06F .sleb128 -2128
+ 29595 4799 00 .byte 0x0
+ 29596 479a 00 .byte 0x0
+ 29597 479b 00 .byte 0x0
+ 29598 479c 00 .byte 0x0
+ 29599 479d 35 .uleb128 0x35
+ 29600 479e 210F0000 .long 0xf21
+ 29601 47a2 00000000 .quad .LBB1224
+ 29601 00000000
+ 29602 47aa 00000000 .quad .LBE1224
+ 29602 00000000
+ 29603 47b2 02 .byte 0x2
+ 29604 47b3 2106 .value 0x621
+ 29605 47b5 32 .uleb128 0x32
+ 29606 47b6 330F0000 .long 0xf33
+ 29607 47ba 03 .byte 0x3
+ 29608 47bb 91 .byte 0x91
+ 29609 47bc C06F .sleb128 -2112
+ 29610 47be 33 .uleb128 0x33
+ 29611 47bf 00000000 .quad .LBB1225
+ 29611 00000000
+ 29612 47c7 00000000 .quad .LBE1225
+ 29612 00000000
+ 29613 47cf 34 .uleb128 0x34
+ 29614 47d0 3F0F0000 .long 0xf3f
+ 29615 47d4 09 .byte 0x9
+ 29616 47d5 03 .byte 0x3
+ 29617 47d6 00000000 .quad mask.7943
+ 29617 00000000
+ 29618 47de 35 .uleb128 0x35
+ 29619 47df A00D0000 .long 0xda0
+ 29620 47e3 00000000 .quad .LBB1226
+ 29620 00000000
+ 29621 47eb 00000000 .quad .LBE1226
+ 29621 00000000
+ 29622 47f3 02 .byte 0x2
+ 29623 47f4 FE04 .value 0x4fe
+ 29624 47f6 32 .uleb128 0x32
+ 29625 47f7 BE0D0000 .long 0xdbe
+ 29626 47fb 03 .byte 0x3
+ 29627 47fc 91 .byte 0x91
+ 29628 47fd D06F .sleb128 -2096
+ 29629 47ff 32 .uleb128 0x32
+ 29630 4800 B20D0000 .long 0xdb2
+ 29631 4804 03 .byte 0x3
+ 29632 4805 91 .byte 0x91
+ 29633 4806 E06F .sleb128 -2080
+ 29634 4808 35 .uleb128 0x35
+ 29635 4809 CB0D0000 .long 0xdcb
+ 29636 480d 00000000 .quad .LBB1228
+ 29636 00000000
+ 29637 4815 00000000 .quad .LBE1228
+ 29637 00000000
+ 29638 481d 02 .byte 0x2
+ 29639 481e 7501 .value 0x175
+ 29640 4820 32 .uleb128 0x32
+ 29641 4821 E90D0000 .long 0xde9
+
GAS LISTING /tmp/ccjbMjHD.s page 807
+
+
+ 29642 4825 03 .byte 0x3
+ 29643 4826 91 .byte 0x91
+ 29644 4827 F06F .sleb128 -2064
+ 29645 4829 32 .uleb128 0x32
+ 29646 482a DD0D0000 .long 0xddd
+ 29647 482e 03 .byte 0x3
+ 29648 482f 91 .byte 0x91
+ 29649 4830 8070 .sleb128 -2048
+ 29650 4832 00 .byte 0x0
+ 29651 4833 00 .byte 0x0
+ 29652 4834 00 .byte 0x0
+ 29653 4835 00 .byte 0x0
+ 29654 4836 00 .byte 0x0
+ 29655 4837 00 .byte 0x0
+ 29656 4838 31 .uleb128 0x31
+ 29657 4839 D50B0000 .long 0xbd5
+ 29658 483d 00000000 .quad .LBB1230
+ 29658 00000000
+ 29659 4845 00000000 .quad .LBE1230
+ 29659 00000000
+ 29660 484d 02 .byte 0x2
+ 29661 484e D806 .value 0x6d8
+ 29662 4850 1B4D0000 .long 0x4d1b
+ 29663 4854 32 .uleb128 0x32
+ 29664 4855 F30B0000 .long 0xbf3
+ 29665 4859 03 .byte 0x3
+ 29666 485a 91 .byte 0x91
+ 29667 485b 9C70 .sleb128 -2020
+ 29668 485d 32 .uleb128 0x32
+ 29669 485e E70B0000 .long 0xbe7
+ 29670 4862 03 .byte 0x3
+ 29671 4863 91 .byte 0x91
+ 29672 4864 A070 .sleb128 -2016
+ 29673 4866 33 .uleb128 0x33
+ 29674 4867 00000000 .quad .LBB1231
+ 29674 00000000
+ 29675 486f 00000000 .quad .LBE1231
+ 29675 00000000
+ 29676 4877 34 .uleb128 0x34
+ 29677 4878 FF0B0000 .long 0xbff
+ 29678 487c 04 .byte 0x4
+ 29679 487d 76 .byte 0x76
+ 29680 487e A0AC7F .sleb128 -10720
+ 29681 4881 34 .uleb128 0x34
+ 29682 4882 0B0C0000 .long 0xc0b
+ 29683 4886 04 .byte 0x4
+ 29684 4887 76 .byte 0x76
+ 29685 4888 90AC7F .sleb128 -10736
+ 29686 488b 31 .uleb128 0x31
+ 29687 488c 540C0000 .long 0xc54
+ 29688 4890 00000000 .quad .LBB1232
+ 29688 00000000
+ 29689 4898 00000000 .quad .LBE1232
+ 29689 00000000
+ 29690 48a0 02 .byte 0x2
+ 29691 48a1 9106 .value 0x691
+ 29692 48a3 F7480000 .long 0x48f7
+
GAS LISTING /tmp/ccjbMjHD.s page 808
+
+
+ 29693 48a7 32 .uleb128 0x32
+ 29694 48a8 7E0C0000 .long 0xc7e
+ 29695 48ac 03 .byte 0x3
+ 29696 48ad 91 .byte 0x91
+ 29697 48ae B870 .sleb128 -1992
+ 29698 48b0 32 .uleb128 0x32
+ 29699 48b1 720C0000 .long 0xc72
+ 29700 48b5 03 .byte 0x3
+ 29701 48b6 91 .byte 0x91
+ 29702 48b7 BC70 .sleb128 -1988
+ 29703 48b9 32 .uleb128 0x32
+ 29704 48ba 660C0000 .long 0xc66
+ 29705 48be 03 .byte 0x3
+ 29706 48bf 91 .byte 0x91
+ 29707 48c0 C070 .sleb128 -1984
+ 29708 48c2 35 .uleb128 0x35
+ 29709 48c3 8B0C0000 .long 0xc8b
+ 29710 48c7 00000000 .quad .LBB1234
+ 29710 00000000
+ 29711 48cf 00000000 .quad .LBE1234
+ 29711 00000000
+ 29712 48d7 02 .byte 0x2
+ 29713 48d8 0702 .value 0x207
+ 29714 48da 32 .uleb128 0x32
+ 29715 48db B40C0000 .long 0xcb4
+ 29716 48df 03 .byte 0x3
+ 29717 48e0 91 .byte 0x91
+ 29718 48e1 D870 .sleb128 -1960
+ 29719 48e3 32 .uleb128 0x32
+ 29720 48e4 A90C0000 .long 0xca9
+ 29721 48e8 03 .byte 0x3
+ 29722 48e9 91 .byte 0x91
+ 29723 48ea DC70 .sleb128 -1956
+ 29724 48ec 32 .uleb128 0x32
+ 29725 48ed 9D0C0000 .long 0xc9d
+ 29726 48f1 03 .byte 0x3
+ 29727 48f2 91 .byte 0x91
+ 29728 48f3 E070 .sleb128 -1952
+ 29729 48f5 00 .byte 0x0
+ 29730 48f6 00 .byte 0x0
+ 29731 48f7 31 .uleb128 0x31
+ 29732 48f8 C10C0000 .long 0xcc1
+ 29733 48fc 00000000 .quad .LBB1236
+ 29733 00000000
+ 29734 4904 00000000 .quad .LBE1236
+ 29734 00000000
+ 29735 490c 02 .byte 0x2
+ 29736 490d 9206 .value 0x692
+ 29737 490f 804B0000 .long 0x4b80
+ 29738 4913 32 .uleb128 0x32
+ 29739 4914 D30C0000 .long 0xcd3
+ 29740 4918 03 .byte 0x3
+ 29741 4919 91 .byte 0x91
+ 29742 491a F070 .sleb128 -1936
+ 29743 491c 35 .uleb128 0x35
+ 29744 491d E00C0000 .long 0xce0
+ 29745 4921 00000000 .quad .LBB1238
+
GAS LISTING /tmp/ccjbMjHD.s page 809
+
+
+ 29745 00000000
+ 29746 4929 00000000 .quad .LBE1238
+ 29746 00000000
+ 29747 4931 02 .byte 0x2
+ 29748 4932 7D03 .value 0x37d
+ 29749 4934 32 .uleb128 0x32
+ 29750 4935 FE0C0000 .long 0xcfe
+ 29751 4939 03 .byte 0x3
+ 29752 493a 91 .byte 0x91
+ 29753 493b 8871 .sleb128 -1912
+ 29754 493d 32 .uleb128 0x32
+ 29755 493e F20C0000 .long 0xcf2
+ 29756 4942 03 .byte 0x3
+ 29757 4943 91 .byte 0x91
+ 29758 4944 9071 .sleb128 -1904
+ 29759 4946 33 .uleb128 0x33
+ 29760 4947 00000000 .quad .LBB1239
+ 29760 00000000
+ 29761 494f 00000000 .quad .LBE1239
+ 29761 00000000
+ 29762 4957 34 .uleb128 0x34
+ 29763 4958 0A0D0000 .long 0xd0a
+ 29764 495c 03 .byte 0x3
+ 29765 495d 91 .byte 0x91
+ 29766 495e E071 .sleb128 -1824
+ 29767 4960 34 .uleb128 0x34
+ 29768 4961 150D0000 .long 0xd15
+ 29769 4965 03 .byte 0x3
+ 29770 4966 91 .byte 0x91
+ 29771 4967 D071 .sleb128 -1840
+ 29772 4969 34 .uleb128 0x34
+ 29773 496a 200D0000 .long 0xd20
+ 29774 496e 03 .byte 0x3
+ 29775 496f 91 .byte 0x91
+ 29776 4970 C071 .sleb128 -1856
+ 29777 4972 34 .uleb128 0x34
+ 29778 4973 2C0D0000 .long 0xd2c
+ 29779 4977 03 .byte 0x3
+ 29780 4978 91 .byte 0x91
+ 29781 4979 B071 .sleb128 -1872
+ 29782 497b 34 .uleb128 0x34
+ 29783 497c 380D0000 .long 0xd38
+ 29784 4980 03 .byte 0x3
+ 29785 4981 91 .byte 0x91
+ 29786 4982 AC71 .sleb128 -1876
+ 29787 4984 31 .uleb128 0x31
+ 29788 4985 4F0D0000 .long 0xd4f
+ 29789 4989 00000000 .quad .LBB1240
+ 29789 00000000
+ 29790 4991 00000000 .quad .LBE1240
+ 29790 00000000
+ 29791 4999 02 .byte 0x2
+ 29792 499a 5603 .value 0x356
+ 29793 499c B3490000 .long 0x49b3
+ 29794 49a0 32 .uleb128 0x32
+ 29795 49a1 6A0D0000 .long 0xd6a
+ 29796 49a5 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 810
+
+
+ 29797 49a6 91 .byte 0x91
+ 29798 49a7 F071 .sleb128 -1808
+ 29799 49a9 32 .uleb128 0x32
+ 29800 49aa 600D0000 .long 0xd60
+ 29801 49ae 03 .byte 0x3
+ 29802 49af 91 .byte 0x91
+ 29803 49b0 8072 .sleb128 -1792
+ 29804 49b2 00 .byte 0x0
+ 29805 49b3 31 .uleb128 0x31
+ 29806 49b4 750D0000 .long 0xd75
+ 29807 49b8 00000000 .quad .LBB1242
+ 29807 00000000
+ 29808 49c0 00000000 .quad .LBE1242
+ 29808 00000000
+ 29809 49c8 02 .byte 0x2
+ 29810 49c9 5903 .value 0x359
+ 29811 49cb E2490000 .long 0x49e2
+ 29812 49cf 32 .uleb128 0x32
+ 29813 49d0 930D0000 .long 0xd93
+ 29814 49d4 03 .byte 0x3
+ 29815 49d5 91 .byte 0x91
+ 29816 49d6 9C72 .sleb128 -1764
+ 29817 49d8 32 .uleb128 0x32
+ 29818 49d9 870D0000 .long 0xd87
+ 29819 49dd 03 .byte 0x3
+ 29820 49de 91 .byte 0x91
+ 29821 49df A072 .sleb128 -1760
+ 29822 49e1 00 .byte 0x0
+ 29823 49e2 31 .uleb128 0x31
+ 29824 49e3 4F0D0000 .long 0xd4f
+ 29825 49e7 00000000 .quad .LBB1244
+ 29825 00000000
+ 29826 49ef 00000000 .quad .LBE1244
+ 29826 00000000
+ 29827 49f7 02 .byte 0x2
+ 29828 49f8 5B03 .value 0x35b
+ 29829 49fa 114A0000 .long 0x4a11
+ 29830 49fe 32 .uleb128 0x32
+ 29831 49ff 6A0D0000 .long 0xd6a
+ 29832 4a03 03 .byte 0x3
+ 29833 4a04 91 .byte 0x91
+ 29834 4a05 B072 .sleb128 -1744
+ 29835 4a07 32 .uleb128 0x32
+ 29836 4a08 600D0000 .long 0xd60
+ 29837 4a0c 03 .byte 0x3
+ 29838 4a0d 91 .byte 0x91
+ 29839 4a0e C072 .sleb128 -1728
+ 29840 4a10 00 .byte 0x0
+ 29841 4a11 31 .uleb128 0x31
+ 29842 4a12 A00D0000 .long 0xda0
+ 29843 4a16 00000000 .quad .LBB1246
+ 29843 00000000
+ 29844 4a1e 00000000 .quad .LBE1246
+ 29844 00000000
+ 29845 4a26 02 .byte 0x2
+ 29846 4a27 6403 .value 0x364
+ 29847 4a29 6B4A0000 .long 0x4a6b
+
GAS LISTING /tmp/ccjbMjHD.s page 811
+
+
+ 29848 4a2d 32 .uleb128 0x32
+ 29849 4a2e BE0D0000 .long 0xdbe
+ 29850 4a32 03 .byte 0x3
+ 29851 4a33 91 .byte 0x91
+ 29852 4a34 D072 .sleb128 -1712
+ 29853 4a36 32 .uleb128 0x32
+ 29854 4a37 B20D0000 .long 0xdb2
+ 29855 4a3b 03 .byte 0x3
+ 29856 4a3c 91 .byte 0x91
+ 29857 4a3d E072 .sleb128 -1696
+ 29858 4a3f 35 .uleb128 0x35
+ 29859 4a40 CB0D0000 .long 0xdcb
+ 29860 4a44 00000000 .quad .LBB1248
+ 29860 00000000
+ 29861 4a4c 00000000 .quad .LBE1248
+ 29861 00000000
+ 29862 4a54 02 .byte 0x2
+ 29863 4a55 7501 .value 0x175
+ 29864 4a57 32 .uleb128 0x32
+ 29865 4a58 E90D0000 .long 0xde9
+ 29866 4a5c 03 .byte 0x3
+ 29867 4a5d 91 .byte 0x91
+ 29868 4a5e F072 .sleb128 -1680
+ 29869 4a60 32 .uleb128 0x32
+ 29870 4a61 DD0D0000 .long 0xddd
+ 29871 4a65 03 .byte 0x3
+ 29872 4a66 91 .byte 0x91
+ 29873 4a67 8073 .sleb128 -1664
+ 29874 4a69 00 .byte 0x0
+ 29875 4a6a 00 .byte 0x0
+ 29876 4a6b 31 .uleb128 0x31
+ 29877 4a6c FB0D0000 .long 0xdfb
+ 29878 4a70 00000000 .quad .LBB1250
+ 29878 00000000
+ 29879 4a78 00000000 .quad .LBE1250
+ 29879 00000000
+ 29880 4a80 02 .byte 0x2
+ 29881 4a81 6603 .value 0x366
+ 29882 4a83 9A4A0000 .long 0x4a9a
+ 29883 4a87 32 .uleb128 0x32
+ 29884 4a88 160E0000 .long 0xe16
+ 29885 4a8c 03 .byte 0x3
+ 29886 4a8d 91 .byte 0x91
+ 29887 4a8e 9073 .sleb128 -1648
+ 29888 4a90 32 .uleb128 0x32
+ 29889 4a91 0C0E0000 .long 0xe0c
+ 29890 4a95 03 .byte 0x3
+ 29891 4a96 91 .byte 0x91
+ 29892 4a97 A073 .sleb128 -1632
+ 29893 4a99 00 .byte 0x0
+ 29894 4a9a 31 .uleb128 0x31
+ 29895 4a9b A00D0000 .long 0xda0
+ 29896 4a9f 00000000 .quad .LBB1252
+ 29896 00000000
+ 29897 4aa7 00000000 .quad .LBE1252
+ 29897 00000000
+ 29898 4aaf 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 812
+
+
+ 29899 4ab0 6803 .value 0x368
+ 29900 4ab2 F44A0000 .long 0x4af4
+ 29901 4ab6 32 .uleb128 0x32
+ 29902 4ab7 BE0D0000 .long 0xdbe
+ 29903 4abb 03 .byte 0x3
+ 29904 4abc 91 .byte 0x91
+ 29905 4abd B073 .sleb128 -1616
+ 29906 4abf 32 .uleb128 0x32
+ 29907 4ac0 B20D0000 .long 0xdb2
+ 29908 4ac4 03 .byte 0x3
+ 29909 4ac5 91 .byte 0x91
+ 29910 4ac6 C073 .sleb128 -1600
+ 29911 4ac8 35 .uleb128 0x35
+ 29912 4ac9 CB0D0000 .long 0xdcb
+ 29913 4acd 00000000 .quad .LBB1254
+ 29913 00000000
+ 29914 4ad5 00000000 .quad .LBE1254
+ 29914 00000000
+ 29915 4add 02 .byte 0x2
+ 29916 4ade 7501 .value 0x175
+ 29917 4ae0 32 .uleb128 0x32
+ 29918 4ae1 E90D0000 .long 0xde9
+ 29919 4ae5 03 .byte 0x3
+ 29920 4ae6 91 .byte 0x91
+ 29921 4ae7 D073 .sleb128 -1584
+ 29922 4ae9 32 .uleb128 0x32
+ 29923 4aea DD0D0000 .long 0xddd
+ 29924 4aee 03 .byte 0x3
+ 29925 4aef 91 .byte 0x91
+ 29926 4af0 E073 .sleb128 -1568
+ 29927 4af2 00 .byte 0x0
+ 29928 4af3 00 .byte 0x0
+ 29929 4af4 31 .uleb128 0x31
+ 29930 4af5 FB0D0000 .long 0xdfb
+ 29931 4af9 00000000 .quad .LBB1256
+ 29931 00000000
+ 29932 4b01 00000000 .quad .LBE1256
+ 29932 00000000
+ 29933 4b09 02 .byte 0x2
+ 29934 4b0a 6A03 .value 0x36a
+ 29935 4b0c 234B0000 .long 0x4b23
+ 29936 4b10 32 .uleb128 0x32
+ 29937 4b11 160E0000 .long 0xe16
+ 29938 4b15 03 .byte 0x3
+ 29939 4b16 91 .byte 0x91
+ 29940 4b17 F073 .sleb128 -1552
+ 29941 4b19 32 .uleb128 0x32
+ 29942 4b1a 0C0E0000 .long 0xe0c
+ 29943 4b1e 03 .byte 0x3
+ 29944 4b1f 91 .byte 0x91
+ 29945 4b20 8074 .sleb128 -1536
+ 29946 4b22 00 .byte 0x0
+ 29947 4b23 31 .uleb128 0x31
+ 29948 4b24 210E0000 .long 0xe21
+ 29949 4b28 00000000 .quad .LBB1258
+ 29949 00000000
+ 29950 4b30 00000000 .quad .LBE1258
+
GAS LISTING /tmp/ccjbMjHD.s page 813
+
+
+ 29950 00000000
+ 29951 4b38 02 .byte 0x2
+ 29952 4b39 6C03 .value 0x36c
+ 29953 4b3b 524B0000 .long 0x4b52
+ 29954 4b3f 32 .uleb128 0x32
+ 29955 4b40 3E0E0000 .long 0xe3e
+ 29956 4b44 03 .byte 0x3
+ 29957 4b45 91 .byte 0x91
+ 29958 4b46 9074 .sleb128 -1520
+ 29959 4b48 32 .uleb128 0x32
+ 29960 4b49 330E0000 .long 0xe33
+ 29961 4b4d 03 .byte 0x3
+ 29962 4b4e 91 .byte 0x91
+ 29963 4b4f A074 .sleb128 -1504
+ 29964 4b51 00 .byte 0x0
+ 29965 4b52 35 .uleb128 0x35
+ 29966 4b53 4F0D0000 .long 0xd4f
+ 29967 4b57 00000000 .quad .LBB1260
+ 29967 00000000
+ 29968 4b5f 00000000 .quad .LBE1260
+ 29968 00000000
+ 29969 4b67 02 .byte 0x2
+ 29970 4b68 6E03 .value 0x36e
+ 29971 4b6a 32 .uleb128 0x32
+ 29972 4b6b 6A0D0000 .long 0xd6a
+ 29973 4b6f 03 .byte 0x3
+ 29974 4b70 91 .byte 0x91
+ 29975 4b71 B074 .sleb128 -1488
+ 29976 4b73 32 .uleb128 0x32
+ 29977 4b74 600D0000 .long 0xd60
+ 29978 4b78 03 .byte 0x3
+ 29979 4b79 91 .byte 0x91
+ 29980 4b7a C074 .sleb128 -1472
+ 29981 4b7c 00 .byte 0x0
+ 29982 4b7d 00 .byte 0x0
+ 29983 4b7e 00 .byte 0x0
+ 29984 4b7f 00 .byte 0x0
+ 29985 4b80 36 .uleb128 0x36
+ 29986 4b81 00000000 .quad .LBB1262
+ 29986 00000000
+ 29987 4b89 00000000 .quad .LBE1262
+ 29987 00000000
+ 29988 4b91 A04B0000 .long 0x4ba0
+ 29989 4b95 34 .uleb128 0x34
+ 29990 4b96 1C0C0000 .long 0xc1c
+ 29991 4b9a 04 .byte 0x4
+ 29992 4b9b 91 .byte 0x91
+ 29993 4b9c A0B17F .sleb128 -10080
+ 29994 4b9f 00 .byte 0x0
+ 29995 4ba0 31 .uleb128 0x31
+ 29996 4ba1 4A0E0000 .long 0xe4a
+ 29997 4ba5 00000000 .quad .LBB1263
+ 29997 00000000
+ 29998 4bad 00000000 .quad .LBE1263
+ 29998 00000000
+ 29999 4bb5 02 .byte 0x2
+ 30000 4bb6 9406 .value 0x694
+
GAS LISTING /tmp/ccjbMjHD.s page 814
+
+
+ 30001 4bb8 3D4C0000 .long 0x4c3d
+ 30002 4bbc 32 .uleb128 0x32
+ 30003 4bbd 5C0E0000 .long 0xe5c
+ 30004 4bc1 03 .byte 0x3
+ 30005 4bc2 91 .byte 0x91
+ 30006 4bc3 D074 .sleb128 -1456
+ 30007 4bc5 33 .uleb128 0x33
+ 30008 4bc6 00000000 .quad .LBB1264
+ 30008 00000000
+ 30009 4bce 00000000 .quad .LBE1264
+ 30009 00000000
+ 30010 4bd6 34 .uleb128 0x34
+ 30011 4bd7 680E0000 .long 0xe68
+ 30012 4bdb 09 .byte 0x9
+ 30013 4bdc 03 .byte 0x3
+ 30014 4bdd 00000000 .quad ShiftRowTable.7385
+ 30014 00000000
+ 30015 4be5 35 .uleb128 0x35
+ 30016 4be6 A00D0000 .long 0xda0
+ 30017 4bea 00000000 .quad .LBB1265
+ 30017 00000000
+ 30018 4bf2 00000000 .quad .LBE1265
+ 30018 00000000
+ 30019 4bfa 02 .byte 0x2
+ 30020 4bfb 9B02 .value 0x29b
+ 30021 4bfd 32 .uleb128 0x32
+ 30022 4bfe BE0D0000 .long 0xdbe
+ 30023 4c02 03 .byte 0x3
+ 30024 4c03 91 .byte 0x91
+ 30025 4c04 E074 .sleb128 -1440
+ 30026 4c06 32 .uleb128 0x32
+ 30027 4c07 B20D0000 .long 0xdb2
+ 30028 4c0b 03 .byte 0x3
+ 30029 4c0c 91 .byte 0x91
+ 30030 4c0d F074 .sleb128 -1424
+ 30031 4c0f 35 .uleb128 0x35
+ 30032 4c10 CB0D0000 .long 0xdcb
+ 30033 4c14 00000000 .quad .LBB1267
+ 30033 00000000
+ 30034 4c1c 00000000 .quad .LBE1267
+ 30034 00000000
+ 30035 4c24 02 .byte 0x2
+ 30036 4c25 7501 .value 0x175
+ 30037 4c27 32 .uleb128 0x32
+ 30038 4c28 E90D0000 .long 0xde9
+ 30039 4c2c 03 .byte 0x3
+ 30040 4c2d 91 .byte 0x91
+ 30041 4c2e 8075 .sleb128 -1408
+ 30042 4c30 32 .uleb128 0x32
+ 30043 4c31 DD0D0000 .long 0xddd
+ 30044 4c35 03 .byte 0x3
+ 30045 4c36 91 .byte 0x91
+ 30046 4c37 9075 .sleb128 -1392
+ 30047 4c39 00 .byte 0x0
+ 30048 4c3a 00 .byte 0x0
+ 30049 4c3b 00 .byte 0x0
+ 30050 4c3c 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 815
+
+
+ 30051 4c3d 36 .uleb128 0x36
+ 30052 4c3e 00000000 .quad .LBB1269
+ 30052 00000000
+ 30053 4c46 00000000 .quad .LBE1269
+ 30053 00000000
+ 30054 4c4e 5D4C0000 .long 0x4c5d
+ 30055 4c52 34 .uleb128 0x34
+ 30056 4c53 2C0C0000 .long 0xc2c
+ 30057 4c57 04 .byte 0x4
+ 30058 4c58 91 .byte 0x91
+ 30059 4c59 90B17F .sleb128 -10096
+ 30060 4c5c 00 .byte 0x0
+ 30061 4c5d 31 .uleb128 0x31
+ 30062 4c5e 860E0000 .long 0xe86
+ 30063 4c62 00000000 .quad .LBB1270
+ 30063 00000000
+ 30064 4c6a 00000000 .quad .LBE1270
+ 30064 00000000
+ 30065 4c72 02 .byte 0x2
+ 30066 4c73 9606 .value 0x696
+ 30067 4c75 8C4C0000 .long 0x4c8c
+ 30068 4c79 32 .uleb128 0x32
+ 30069 4c7a A10E0000 .long 0xea1
+ 30070 4c7e 03 .byte 0x3
+ 30071 4c7f 91 .byte 0x91
+ 30072 4c80 A075 .sleb128 -1376
+ 30073 4c82 32 .uleb128 0x32
+ 30074 4c83 970E0000 .long 0xe97
+ 30075 4c87 03 .byte 0x3
+ 30076 4c88 91 .byte 0x91
+ 30077 4c89 B075 .sleb128 -1360
+ 30078 4c8b 00 .byte 0x0
+ 30079 4c8c 36 .uleb128 0x36
+ 30080 4c8d 00000000 .quad .LBB1272
+ 30080 00000000
+ 30081 4c95 00000000 .quad .LBE1272
+ 30081 00000000
+ 30082 4c9d AC4C0000 .long 0x4cac
+ 30083 4ca1 34 .uleb128 0x34
+ 30084 4ca2 3C0C0000 .long 0xc3c
+ 30085 4ca6 04 .byte 0x4
+ 30086 4ca7 91 .byte 0x91
+ 30087 4ca8 80B17F .sleb128 -10112
+ 30088 4cab 00 .byte 0x0
+ 30089 4cac 31 .uleb128 0x31
+ 30090 4cad AC0E0000 .long 0xeac
+ 30091 4cb1 00000000 .quad .LBB1273
+ 30091 00000000
+ 30092 4cb9 00000000 .quad .LBE1273
+ 30092 00000000
+ 30093 4cc1 02 .byte 0x2
+ 30094 4cc2 9806 .value 0x698
+ 30095 4cc4 FD4C0000 .long 0x4cfd
+ 30096 4cc8 32 .uleb128 0x32
+ 30097 4cc9 BE0E0000 .long 0xebe
+ 30098 4ccd 03 .byte 0x3
+ 30099 4cce 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 816
+
+
+ 30100 4ccf C075 .sleb128 -1344
+ 30101 4cd1 35 .uleb128 0x35
+ 30102 4cd2 CB0E0000 .long 0xecb
+ 30103 4cd6 00000000 .quad .LBB1275
+ 30103 00000000
+ 30104 4cde 00000000 .quad .LBE1275
+ 30104 00000000
+ 30105 4ce6 02 .byte 0x2
+ 30106 4ce7 4905 .value 0x549
+ 30107 4ce9 32 .uleb128 0x32
+ 30108 4cea E90E0000 .long 0xee9
+ 30109 4cee 03 .byte 0x3
+ 30110 4cef 91 .byte 0x91
+ 30111 4cf0 DC75 .sleb128 -1316
+ 30112 4cf2 32 .uleb128 0x32
+ 30113 4cf3 DD0E0000 .long 0xedd
+ 30114 4cf7 03 .byte 0x3
+ 30115 4cf8 91 .byte 0x91
+ 30116 4cf9 E075 .sleb128 -1312
+ 30117 4cfb 00 .byte 0x0
+ 30118 4cfc 00 .byte 0x0
+ 30119 4cfd 33 .uleb128 0x33
+ 30120 4cfe 00000000 .quad .LBB1277
+ 30120 00000000
+ 30121 4d06 00000000 .quad .LBE1277
+ 30121 00000000
+ 30122 4d0e 34 .uleb128 0x34
+ 30123 4d0f 480C0000 .long 0xc48
+ 30124 4d13 04 .byte 0x4
+ 30125 4d14 91 .byte 0x91
+ 30126 4d15 F0B07F .sleb128 -10128
+ 30127 4d18 00 .byte 0x0
+ 30128 4d19 00 .byte 0x0
+ 30129 4d1a 00 .byte 0x0
+ 30130 4d1b 31 .uleb128 0x31
+ 30131 4d1c F60E0000 .long 0xef6
+ 30132 4d20 00000000 .quad .LBB1278
+ 30132 00000000
+ 30133 4d28 00000000 .quad .LBE1278
+ 30133 00000000
+ 30134 4d30 02 .byte 0x2
+ 30135 4d31 D806 .value 0x6d8
+ 30136 4d33 304F0000 .long 0x4f30
+ 30137 4d37 32 .uleb128 0x32
+ 30138 4d38 080F0000 .long 0xf08
+ 30139 4d3c 03 .byte 0x3
+ 30140 4d3d 91 .byte 0x91
+ 30141 4d3e F075 .sleb128 -1296
+ 30142 4d40 33 .uleb128 0x33
+ 30143 4d41 00000000 .quad .LBB1279
+ 30143 00000000
+ 30144 4d49 00000000 .quad .LBE1279
+ 30144 00000000
+ 30145 4d51 34 .uleb128 0x34
+ 30146 4d52 140F0000 .long 0xf14
+ 30147 4d56 04 .byte 0x4
+ 30148 4d57 76 .byte 0x76
+
GAS LISTING /tmp/ccjbMjHD.s page 817
+
+
+ 30149 4d58 B0AC7F .sleb128 -10704
+ 30150 4d5b 31 .uleb128 0x31
+ 30151 4d5c 210F0000 .long 0xf21
+ 30152 4d60 00000000 .quad .LBB1280
+ 30152 00000000
+ 30153 4d68 00000000 .quad .LBE1280
+ 30153 00000000
+ 30154 4d70 02 .byte 0x2
+ 30155 4d71 1F06 .value 0x61f
+ 30156 4d73 F84D0000 .long 0x4df8
+ 30157 4d77 32 .uleb128 0x32
+ 30158 4d78 330F0000 .long 0xf33
+ 30159 4d7c 03 .byte 0x3
+ 30160 4d7d 91 .byte 0x91
+ 30161 4d7e 8076 .sleb128 -1280
+ 30162 4d80 33 .uleb128 0x33
+ 30163 4d81 00000000 .quad .LBB1281
+ 30163 00000000
+ 30164 4d89 00000000 .quad .LBE1281
+ 30164 00000000
+ 30165 4d91 34 .uleb128 0x34
+ 30166 4d92 3F0F0000 .long 0xf3f
+ 30167 4d96 09 .byte 0x9
+ 30168 4d97 03 .byte 0x3
+ 30169 4d98 00000000 .quad mask.7943
+ 30169 00000000
+ 30170 4da0 35 .uleb128 0x35
+ 30171 4da1 A00D0000 .long 0xda0
+ 30172 4da5 00000000 .quad .LBB1282
+ 30172 00000000
+ 30173 4dad 00000000 .quad .LBE1282
+ 30173 00000000
+ 30174 4db5 02 .byte 0x2
+ 30175 4db6 FE04 .value 0x4fe
+ 30176 4db8 32 .uleb128 0x32
+ 30177 4db9 BE0D0000 .long 0xdbe
+ 30178 4dbd 03 .byte 0x3
+ 30179 4dbe 91 .byte 0x91
+ 30180 4dbf 9076 .sleb128 -1264
+ 30181 4dc1 32 .uleb128 0x32
+ 30182 4dc2 B20D0000 .long 0xdb2
+ 30183 4dc6 03 .byte 0x3
+ 30184 4dc7 91 .byte 0x91
+ 30185 4dc8 A076 .sleb128 -1248
+ 30186 4dca 35 .uleb128 0x35
+ 30187 4dcb CB0D0000 .long 0xdcb
+ 30188 4dcf 00000000 .quad .LBB1284
+ 30188 00000000
+ 30189 4dd7 00000000 .quad .LBE1284
+ 30189 00000000
+ 30190 4ddf 02 .byte 0x2
+ 30191 4de0 7501 .value 0x175
+ 30192 4de2 32 .uleb128 0x32
+ 30193 4de3 E90D0000 .long 0xde9
+ 30194 4de7 03 .byte 0x3
+ 30195 4de8 91 .byte 0x91
+ 30196 4de9 B076 .sleb128 -1232
+
GAS LISTING /tmp/ccjbMjHD.s page 818
+
+
+ 30197 4deb 32 .uleb128 0x32
+ 30198 4dec DD0D0000 .long 0xddd
+ 30199 4df0 03 .byte 0x3
+ 30200 4df1 91 .byte 0x91
+ 30201 4df2 C076 .sleb128 -1216
+ 30202 4df4 00 .byte 0x0
+ 30203 4df5 00 .byte 0x0
+ 30204 4df6 00 .byte 0x0
+ 30205 4df7 00 .byte 0x0
+ 30206 4df8 31 .uleb128 0x31
+ 30207 4df9 210F0000 .long 0xf21
+ 30208 4dfd 00000000 .quad .LBB1286
+ 30208 00000000
+ 30209 4e05 00000000 .quad .LBE1286
+ 30209 00000000
+ 30210 4e0d 02 .byte 0x2
+ 30211 4e0e 2006 .value 0x620
+ 30212 4e10 954E0000 .long 0x4e95
+ 30213 4e14 32 .uleb128 0x32
+ 30214 4e15 330F0000 .long 0xf33
+ 30215 4e19 03 .byte 0x3
+ 30216 4e1a 91 .byte 0x91
+ 30217 4e1b D076 .sleb128 -1200
+ 30218 4e1d 33 .uleb128 0x33
+ 30219 4e1e 00000000 .quad .LBB1287
+ 30219 00000000
+ 30220 4e26 00000000 .quad .LBE1287
+ 30220 00000000
+ 30221 4e2e 34 .uleb128 0x34
+ 30222 4e2f 3F0F0000 .long 0xf3f
+ 30223 4e33 09 .byte 0x9
+ 30224 4e34 03 .byte 0x3
+ 30225 4e35 00000000 .quad mask.7943
+ 30225 00000000
+ 30226 4e3d 35 .uleb128 0x35
+ 30227 4e3e A00D0000 .long 0xda0
+ 30228 4e42 00000000 .quad .LBB1288
+ 30228 00000000
+ 30229 4e4a 00000000 .quad .LBE1288
+ 30229 00000000
+ 30230 4e52 02 .byte 0x2
+ 30231 4e53 FE04 .value 0x4fe
+ 30232 4e55 32 .uleb128 0x32
+ 30233 4e56 BE0D0000 .long 0xdbe
+ 30234 4e5a 03 .byte 0x3
+ 30235 4e5b 91 .byte 0x91
+ 30236 4e5c E076 .sleb128 -1184
+ 30237 4e5e 32 .uleb128 0x32
+ 30238 4e5f B20D0000 .long 0xdb2
+ 30239 4e63 03 .byte 0x3
+ 30240 4e64 91 .byte 0x91
+ 30241 4e65 F076 .sleb128 -1168
+ 30242 4e67 35 .uleb128 0x35
+ 30243 4e68 CB0D0000 .long 0xdcb
+ 30244 4e6c 00000000 .quad .LBB1290
+ 30244 00000000
+ 30245 4e74 00000000 .quad .LBE1290
+
GAS LISTING /tmp/ccjbMjHD.s page 819
+
+
+ 30245 00000000
+ 30246 4e7c 02 .byte 0x2
+ 30247 4e7d 7501 .value 0x175
+ 30248 4e7f 32 .uleb128 0x32
+ 30249 4e80 E90D0000 .long 0xde9
+ 30250 4e84 03 .byte 0x3
+ 30251 4e85 91 .byte 0x91
+ 30252 4e86 8077 .sleb128 -1152
+ 30253 4e88 32 .uleb128 0x32
+ 30254 4e89 DD0D0000 .long 0xddd
+ 30255 4e8d 03 .byte 0x3
+ 30256 4e8e 91 .byte 0x91
+ 30257 4e8f 9077 .sleb128 -1136
+ 30258 4e91 00 .byte 0x0
+ 30259 4e92 00 .byte 0x0
+ 30260 4e93 00 .byte 0x0
+ 30261 4e94 00 .byte 0x0
+ 30262 4e95 35 .uleb128 0x35
+ 30263 4e96 210F0000 .long 0xf21
+ 30264 4e9a 00000000 .quad .LBB1292
+ 30264 00000000
+ 30265 4ea2 00000000 .quad .LBE1292
+ 30265 00000000
+ 30266 4eaa 02 .byte 0x2
+ 30267 4eab 2106 .value 0x621
+ 30268 4ead 32 .uleb128 0x32
+ 30269 4eae 330F0000 .long 0xf33
+ 30270 4eb2 03 .byte 0x3
+ 30271 4eb3 91 .byte 0x91
+ 30272 4eb4 A077 .sleb128 -1120
+ 30273 4eb6 33 .uleb128 0x33
+ 30274 4eb7 00000000 .quad .LBB1293
+ 30274 00000000
+ 30275 4ebf 00000000 .quad .LBE1293
+ 30275 00000000
+ 30276 4ec7 34 .uleb128 0x34
+ 30277 4ec8 3F0F0000 .long 0xf3f
+ 30278 4ecc 09 .byte 0x9
+ 30279 4ecd 03 .byte 0x3
+ 30280 4ece 00000000 .quad mask.7943
+ 30280 00000000
+ 30281 4ed6 35 .uleb128 0x35
+ 30282 4ed7 A00D0000 .long 0xda0
+ 30283 4edb 00000000 .quad .LBB1294
+ 30283 00000000
+ 30284 4ee3 00000000 .quad .LBE1294
+ 30284 00000000
+ 30285 4eeb 02 .byte 0x2
+ 30286 4eec FE04 .value 0x4fe
+ 30287 4eee 32 .uleb128 0x32
+ 30288 4eef BE0D0000 .long 0xdbe
+ 30289 4ef3 03 .byte 0x3
+ 30290 4ef4 91 .byte 0x91
+ 30291 4ef5 B077 .sleb128 -1104
+ 30292 4ef7 32 .uleb128 0x32
+ 30293 4ef8 B20D0000 .long 0xdb2
+ 30294 4efc 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 820
+
+
+ 30295 4efd 91 .byte 0x91
+ 30296 4efe C077 .sleb128 -1088
+ 30297 4f00 35 .uleb128 0x35
+ 30298 4f01 CB0D0000 .long 0xdcb
+ 30299 4f05 00000000 .quad .LBB1296
+ 30299 00000000
+ 30300 4f0d 00000000 .quad .LBE1296
+ 30300 00000000
+ 30301 4f15 02 .byte 0x2
+ 30302 4f16 7501 .value 0x175
+ 30303 4f18 32 .uleb128 0x32
+ 30304 4f19 E90D0000 .long 0xde9
+ 30305 4f1d 03 .byte 0x3
+ 30306 4f1e 91 .byte 0x91
+ 30307 4f1f D077 .sleb128 -1072
+ 30308 4f21 32 .uleb128 0x32
+ 30309 4f22 DD0D0000 .long 0xddd
+ 30310 4f26 03 .byte 0x3
+ 30311 4f27 91 .byte 0x91
+ 30312 4f28 E077 .sleb128 -1056
+ 30313 4f2a 00 .byte 0x0
+ 30314 4f2b 00 .byte 0x0
+ 30315 4f2c 00 .byte 0x0
+ 30316 4f2d 00 .byte 0x0
+ 30317 4f2e 00 .byte 0x0
+ 30318 4f2f 00 .byte 0x0
+ 30319 4f30 31 .uleb128 0x31
+ 30320 4f31 D50B0000 .long 0xbd5
+ 30321 4f35 00000000 .quad .LBB1298
+ 30321 00000000
+ 30322 4f3d 00000000 .quad .LBE1298
+ 30322 00000000
+ 30323 4f45 02 .byte 0x2
+ 30324 4f46 D906 .value 0x6d9
+ 30325 4f48 13540000 .long 0x5413
+ 30326 4f4c 32 .uleb128 0x32
+ 30327 4f4d F30B0000 .long 0xbf3
+ 30328 4f51 03 .byte 0x3
+ 30329 4f52 91 .byte 0x91
+ 30330 4f53 FC77 .sleb128 -1028
+ 30331 4f55 32 .uleb128 0x32
+ 30332 4f56 E70B0000 .long 0xbe7
+ 30333 4f5a 03 .byte 0x3
+ 30334 4f5b 91 .byte 0x91
+ 30335 4f5c 8078 .sleb128 -1024
+ 30336 4f5e 33 .uleb128 0x33
+ 30337 4f5f 00000000 .quad .LBB1299
+ 30337 00000000
+ 30338 4f67 00000000 .quad .LBE1299
+ 30338 00000000
+ 30339 4f6f 34 .uleb128 0x34
+ 30340 4f70 FF0B0000 .long 0xbff
+ 30341 4f74 04 .byte 0x4
+ 30342 4f75 76 .byte 0x76
+ 30343 4f76 D0AC7F .sleb128 -10672
+ 30344 4f79 34 .uleb128 0x34
+ 30345 4f7a 0B0C0000 .long 0xc0b
+
GAS LISTING /tmp/ccjbMjHD.s page 821
+
+
+ 30346 4f7e 04 .byte 0x4
+ 30347 4f7f 76 .byte 0x76
+ 30348 4f80 C0AC7F .sleb128 -10688
+ 30349 4f83 31 .uleb128 0x31
+ 30350 4f84 540C0000 .long 0xc54
+ 30351 4f88 00000000 .quad .LBB1300
+ 30351 00000000
+ 30352 4f90 00000000 .quad .LBE1300
+ 30352 00000000
+ 30353 4f98 02 .byte 0x2
+ 30354 4f99 9106 .value 0x691
+ 30355 4f9b EF4F0000 .long 0x4fef
+ 30356 4f9f 32 .uleb128 0x32
+ 30357 4fa0 7E0C0000 .long 0xc7e
+ 30358 4fa4 03 .byte 0x3
+ 30359 4fa5 91 .byte 0x91
+ 30360 4fa6 9878 .sleb128 -1000
+ 30361 4fa8 32 .uleb128 0x32
+ 30362 4fa9 720C0000 .long 0xc72
+ 30363 4fad 03 .byte 0x3
+ 30364 4fae 91 .byte 0x91
+ 30365 4faf 9C78 .sleb128 -996
+ 30366 4fb1 32 .uleb128 0x32
+ 30367 4fb2 660C0000 .long 0xc66
+ 30368 4fb6 03 .byte 0x3
+ 30369 4fb7 91 .byte 0x91
+ 30370 4fb8 A078 .sleb128 -992
+ 30371 4fba 35 .uleb128 0x35
+ 30372 4fbb 8B0C0000 .long 0xc8b
+ 30373 4fbf 00000000 .quad .LBB1302
+ 30373 00000000
+ 30374 4fc7 00000000 .quad .LBE1302
+ 30374 00000000
+ 30375 4fcf 02 .byte 0x2
+ 30376 4fd0 0702 .value 0x207
+ 30377 4fd2 32 .uleb128 0x32
+ 30378 4fd3 B40C0000 .long 0xcb4
+ 30379 4fd7 03 .byte 0x3
+ 30380 4fd8 91 .byte 0x91
+ 30381 4fd9 B878 .sleb128 -968
+ 30382 4fdb 32 .uleb128 0x32
+ 30383 4fdc A90C0000 .long 0xca9
+ 30384 4fe0 03 .byte 0x3
+ 30385 4fe1 91 .byte 0x91
+ 30386 4fe2 BC78 .sleb128 -964
+ 30387 4fe4 32 .uleb128 0x32
+ 30388 4fe5 9D0C0000 .long 0xc9d
+ 30389 4fe9 03 .byte 0x3
+ 30390 4fea 91 .byte 0x91
+ 30391 4feb C078 .sleb128 -960
+ 30392 4fed 00 .byte 0x0
+ 30393 4fee 00 .byte 0x0
+ 30394 4fef 31 .uleb128 0x31
+ 30395 4ff0 C10C0000 .long 0xcc1
+ 30396 4ff4 00000000 .quad .LBB1304
+ 30396 00000000
+ 30397 4ffc 00000000 .quad .LBE1304
+
GAS LISTING /tmp/ccjbMjHD.s page 822
+
+
+ 30397 00000000
+ 30398 5004 02 .byte 0x2
+ 30399 5005 9206 .value 0x692
+ 30400 5007 78520000 .long 0x5278
+ 30401 500b 32 .uleb128 0x32
+ 30402 500c D30C0000 .long 0xcd3
+ 30403 5010 03 .byte 0x3
+ 30404 5011 91 .byte 0x91
+ 30405 5012 D078 .sleb128 -944
+ 30406 5014 35 .uleb128 0x35
+ 30407 5015 E00C0000 .long 0xce0
+ 30408 5019 00000000 .quad .LBB1306
+ 30408 00000000
+ 30409 5021 00000000 .quad .LBE1306
+ 30409 00000000
+ 30410 5029 02 .byte 0x2
+ 30411 502a 7D03 .value 0x37d
+ 30412 502c 32 .uleb128 0x32
+ 30413 502d FE0C0000 .long 0xcfe
+ 30414 5031 03 .byte 0x3
+ 30415 5032 91 .byte 0x91
+ 30416 5033 E878 .sleb128 -920
+ 30417 5035 32 .uleb128 0x32
+ 30418 5036 F20C0000 .long 0xcf2
+ 30419 503a 03 .byte 0x3
+ 30420 503b 91 .byte 0x91
+ 30421 503c F078 .sleb128 -912
+ 30422 503e 33 .uleb128 0x33
+ 30423 503f 00000000 .quad .LBB1307
+ 30423 00000000
+ 30424 5047 00000000 .quad .LBE1307
+ 30424 00000000
+ 30425 504f 34 .uleb128 0x34
+ 30426 5050 0A0D0000 .long 0xd0a
+ 30427 5054 03 .byte 0x3
+ 30428 5055 91 .byte 0x91
+ 30429 5056 C079 .sleb128 -832
+ 30430 5058 34 .uleb128 0x34
+ 30431 5059 150D0000 .long 0xd15
+ 30432 505d 03 .byte 0x3
+ 30433 505e 91 .byte 0x91
+ 30434 505f B079 .sleb128 -848
+ 30435 5061 34 .uleb128 0x34
+ 30436 5062 200D0000 .long 0xd20
+ 30437 5066 03 .byte 0x3
+ 30438 5067 91 .byte 0x91
+ 30439 5068 A079 .sleb128 -864
+ 30440 506a 34 .uleb128 0x34
+ 30441 506b 2C0D0000 .long 0xd2c
+ 30442 506f 03 .byte 0x3
+ 30443 5070 91 .byte 0x91
+ 30444 5071 9079 .sleb128 -880
+ 30445 5073 34 .uleb128 0x34
+ 30446 5074 380D0000 .long 0xd38
+ 30447 5078 03 .byte 0x3
+ 30448 5079 91 .byte 0x91
+ 30449 507a 8C79 .sleb128 -884
+
GAS LISTING /tmp/ccjbMjHD.s page 823
+
+
+ 30450 507c 31 .uleb128 0x31
+ 30451 507d 4F0D0000 .long 0xd4f
+ 30452 5081 00000000 .quad .LBB1308
+ 30452 00000000
+ 30453 5089 00000000 .quad .LBE1308
+ 30453 00000000
+ 30454 5091 02 .byte 0x2
+ 30455 5092 5603 .value 0x356
+ 30456 5094 AB500000 .long 0x50ab
+ 30457 5098 32 .uleb128 0x32
+ 30458 5099 6A0D0000 .long 0xd6a
+ 30459 509d 03 .byte 0x3
+ 30460 509e 91 .byte 0x91
+ 30461 509f D079 .sleb128 -816
+ 30462 50a1 32 .uleb128 0x32
+ 30463 50a2 600D0000 .long 0xd60
+ 30464 50a6 03 .byte 0x3
+ 30465 50a7 91 .byte 0x91
+ 30466 50a8 E079 .sleb128 -800
+ 30467 50aa 00 .byte 0x0
+ 30468 50ab 31 .uleb128 0x31
+ 30469 50ac 750D0000 .long 0xd75
+ 30470 50b0 00000000 .quad .LBB1310
+ 30470 00000000
+ 30471 50b8 00000000 .quad .LBE1310
+ 30471 00000000
+ 30472 50c0 02 .byte 0x2
+ 30473 50c1 5903 .value 0x359
+ 30474 50c3 DA500000 .long 0x50da
+ 30475 50c7 32 .uleb128 0x32
+ 30476 50c8 930D0000 .long 0xd93
+ 30477 50cc 03 .byte 0x3
+ 30478 50cd 91 .byte 0x91
+ 30479 50ce FC79 .sleb128 -772
+ 30480 50d0 32 .uleb128 0x32
+ 30481 50d1 870D0000 .long 0xd87
+ 30482 50d5 03 .byte 0x3
+ 30483 50d6 91 .byte 0x91
+ 30484 50d7 807A .sleb128 -768
+ 30485 50d9 00 .byte 0x0
+ 30486 50da 31 .uleb128 0x31
+ 30487 50db 4F0D0000 .long 0xd4f
+ 30488 50df 00000000 .quad .LBB1312
+ 30488 00000000
+ 30489 50e7 00000000 .quad .LBE1312
+ 30489 00000000
+ 30490 50ef 02 .byte 0x2
+ 30491 50f0 5B03 .value 0x35b
+ 30492 50f2 09510000 .long 0x5109
+ 30493 50f6 32 .uleb128 0x32
+ 30494 50f7 6A0D0000 .long 0xd6a
+ 30495 50fb 03 .byte 0x3
+ 30496 50fc 91 .byte 0x91
+ 30497 50fd 907A .sleb128 -752
+ 30498 50ff 32 .uleb128 0x32
+ 30499 5100 600D0000 .long 0xd60
+ 30500 5104 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 824
+
+
+ 30501 5105 91 .byte 0x91
+ 30502 5106 A07A .sleb128 -736
+ 30503 5108 00 .byte 0x0
+ 30504 5109 31 .uleb128 0x31
+ 30505 510a A00D0000 .long 0xda0
+ 30506 510e 00000000 .quad .LBB1314
+ 30506 00000000
+ 30507 5116 00000000 .quad .LBE1314
+ 30507 00000000
+ 30508 511e 02 .byte 0x2
+ 30509 511f 6403 .value 0x364
+ 30510 5121 63510000 .long 0x5163
+ 30511 5125 32 .uleb128 0x32
+ 30512 5126 BE0D0000 .long 0xdbe
+ 30513 512a 03 .byte 0x3
+ 30514 512b 91 .byte 0x91
+ 30515 512c B07A .sleb128 -720
+ 30516 512e 32 .uleb128 0x32
+ 30517 512f B20D0000 .long 0xdb2
+ 30518 5133 03 .byte 0x3
+ 30519 5134 91 .byte 0x91
+ 30520 5135 C07A .sleb128 -704
+ 30521 5137 35 .uleb128 0x35
+ 30522 5138 CB0D0000 .long 0xdcb
+ 30523 513c 00000000 .quad .LBB1316
+ 30523 00000000
+ 30524 5144 00000000 .quad .LBE1316
+ 30524 00000000
+ 30525 514c 02 .byte 0x2
+ 30526 514d 7501 .value 0x175
+ 30527 514f 32 .uleb128 0x32
+ 30528 5150 E90D0000 .long 0xde9
+ 30529 5154 03 .byte 0x3
+ 30530 5155 91 .byte 0x91
+ 30531 5156 D07A .sleb128 -688
+ 30532 5158 32 .uleb128 0x32
+ 30533 5159 DD0D0000 .long 0xddd
+ 30534 515d 03 .byte 0x3
+ 30535 515e 91 .byte 0x91
+ 30536 515f E07A .sleb128 -672
+ 30537 5161 00 .byte 0x0
+ 30538 5162 00 .byte 0x0
+ 30539 5163 31 .uleb128 0x31
+ 30540 5164 FB0D0000 .long 0xdfb
+ 30541 5168 00000000 .quad .LBB1318
+ 30541 00000000
+ 30542 5170 00000000 .quad .LBE1318
+ 30542 00000000
+ 30543 5178 02 .byte 0x2
+ 30544 5179 6603 .value 0x366
+ 30545 517b 92510000 .long 0x5192
+ 30546 517f 32 .uleb128 0x32
+ 30547 5180 160E0000 .long 0xe16
+ 30548 5184 03 .byte 0x3
+ 30549 5185 91 .byte 0x91
+ 30550 5186 F07A .sleb128 -656
+ 30551 5188 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 825
+
+
+ 30552 5189 0C0E0000 .long 0xe0c
+ 30553 518d 03 .byte 0x3
+ 30554 518e 91 .byte 0x91
+ 30555 518f 807B .sleb128 -640
+ 30556 5191 00 .byte 0x0
+ 30557 5192 31 .uleb128 0x31
+ 30558 5193 A00D0000 .long 0xda0
+ 30559 5197 00000000 .quad .LBB1320
+ 30559 00000000
+ 30560 519f 00000000 .quad .LBE1320
+ 30560 00000000
+ 30561 51a7 02 .byte 0x2
+ 30562 51a8 6803 .value 0x368
+ 30563 51aa EC510000 .long 0x51ec
+ 30564 51ae 32 .uleb128 0x32
+ 30565 51af BE0D0000 .long 0xdbe
+ 30566 51b3 03 .byte 0x3
+ 30567 51b4 91 .byte 0x91
+ 30568 51b5 907B .sleb128 -624
+ 30569 51b7 32 .uleb128 0x32
+ 30570 51b8 B20D0000 .long 0xdb2
+ 30571 51bc 03 .byte 0x3
+ 30572 51bd 91 .byte 0x91
+ 30573 51be A07B .sleb128 -608
+ 30574 51c0 35 .uleb128 0x35
+ 30575 51c1 CB0D0000 .long 0xdcb
+ 30576 51c5 00000000 .quad .LBB1322
+ 30576 00000000
+ 30577 51cd 00000000 .quad .LBE1322
+ 30577 00000000
+ 30578 51d5 02 .byte 0x2
+ 30579 51d6 7501 .value 0x175
+ 30580 51d8 32 .uleb128 0x32
+ 30581 51d9 E90D0000 .long 0xde9
+ 30582 51dd 03 .byte 0x3
+ 30583 51de 91 .byte 0x91
+ 30584 51df B07B .sleb128 -592
+ 30585 51e1 32 .uleb128 0x32
+ 30586 51e2 DD0D0000 .long 0xddd
+ 30587 51e6 03 .byte 0x3
+ 30588 51e7 91 .byte 0x91
+ 30589 51e8 C07B .sleb128 -576
+ 30590 51ea 00 .byte 0x0
+ 30591 51eb 00 .byte 0x0
+ 30592 51ec 31 .uleb128 0x31
+ 30593 51ed FB0D0000 .long 0xdfb
+ 30594 51f1 00000000 .quad .LBB1324
+ 30594 00000000
+ 30595 51f9 00000000 .quad .LBE1324
+ 30595 00000000
+ 30596 5201 02 .byte 0x2
+ 30597 5202 6A03 .value 0x36a
+ 30598 5204 1B520000 .long 0x521b
+ 30599 5208 32 .uleb128 0x32
+ 30600 5209 160E0000 .long 0xe16
+ 30601 520d 03 .byte 0x3
+ 30602 520e 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 826
+
+
+ 30603 520f D07B .sleb128 -560
+ 30604 5211 32 .uleb128 0x32
+ 30605 5212 0C0E0000 .long 0xe0c
+ 30606 5216 03 .byte 0x3
+ 30607 5217 91 .byte 0x91
+ 30608 5218 E07B .sleb128 -544
+ 30609 521a 00 .byte 0x0
+ 30610 521b 31 .uleb128 0x31
+ 30611 521c 210E0000 .long 0xe21
+ 30612 5220 00000000 .quad .LBB1326
+ 30612 00000000
+ 30613 5228 00000000 .quad .LBE1326
+ 30613 00000000
+ 30614 5230 02 .byte 0x2
+ 30615 5231 6C03 .value 0x36c
+ 30616 5233 4A520000 .long 0x524a
+ 30617 5237 32 .uleb128 0x32
+ 30618 5238 3E0E0000 .long 0xe3e
+ 30619 523c 03 .byte 0x3
+ 30620 523d 91 .byte 0x91
+ 30621 523e F07B .sleb128 -528
+ 30622 5240 32 .uleb128 0x32
+ 30623 5241 330E0000 .long 0xe33
+ 30624 5245 03 .byte 0x3
+ 30625 5246 91 .byte 0x91
+ 30626 5247 807C .sleb128 -512
+ 30627 5249 00 .byte 0x0
+ 30628 524a 35 .uleb128 0x35
+ 30629 524b 4F0D0000 .long 0xd4f
+ 30630 524f 00000000 .quad .LBB1328
+ 30630 00000000
+ 30631 5257 00000000 .quad .LBE1328
+ 30631 00000000
+ 30632 525f 02 .byte 0x2
+ 30633 5260 6E03 .value 0x36e
+ 30634 5262 32 .uleb128 0x32
+ 30635 5263 6A0D0000 .long 0xd6a
+ 30636 5267 03 .byte 0x3
+ 30637 5268 91 .byte 0x91
+ 30638 5269 907C .sleb128 -496
+ 30639 526b 32 .uleb128 0x32
+ 30640 526c 600D0000 .long 0xd60
+ 30641 5270 03 .byte 0x3
+ 30642 5271 91 .byte 0x91
+ 30643 5272 A07C .sleb128 -480
+ 30644 5274 00 .byte 0x0
+ 30645 5275 00 .byte 0x0
+ 30646 5276 00 .byte 0x0
+ 30647 5277 00 .byte 0x0
+ 30648 5278 36 .uleb128 0x36
+ 30649 5279 00000000 .quad .LBB1330
+ 30649 00000000
+ 30650 5281 00000000 .quad .LBE1330
+ 30650 00000000
+ 30651 5289 98520000 .long 0x5298
+ 30652 528d 34 .uleb128 0x34
+ 30653 528e 1C0C0000 .long 0xc1c
+
GAS LISTING /tmp/ccjbMjHD.s page 827
+
+
+ 30654 5292 04 .byte 0x4
+ 30655 5293 91 .byte 0x91
+ 30656 5294 E0B17F .sleb128 -10016
+ 30657 5297 00 .byte 0x0
+ 30658 5298 31 .uleb128 0x31
+ 30659 5299 4A0E0000 .long 0xe4a
+ 30660 529d 00000000 .quad .LBB1331
+ 30660 00000000
+ 30661 52a5 00000000 .quad .LBE1331
+ 30661 00000000
+ 30662 52ad 02 .byte 0x2
+ 30663 52ae 9406 .value 0x694
+ 30664 52b0 35530000 .long 0x5335
+ 30665 52b4 32 .uleb128 0x32
+ 30666 52b5 5C0E0000 .long 0xe5c
+ 30667 52b9 03 .byte 0x3
+ 30668 52ba 91 .byte 0x91
+ 30669 52bb B07C .sleb128 -464
+ 30670 52bd 33 .uleb128 0x33
+ 30671 52be 00000000 .quad .LBB1332
+ 30671 00000000
+ 30672 52c6 00000000 .quad .LBE1332
+ 30672 00000000
+ 30673 52ce 34 .uleb128 0x34
+ 30674 52cf 680E0000 .long 0xe68
+ 30675 52d3 09 .byte 0x9
+ 30676 52d4 03 .byte 0x3
+ 30677 52d5 00000000 .quad ShiftRowTable.7385
+ 30677 00000000
+ 30678 52dd 35 .uleb128 0x35
+ 30679 52de A00D0000 .long 0xda0
+ 30680 52e2 00000000 .quad .LBB1333
+ 30680 00000000
+ 30681 52ea 00000000 .quad .LBE1333
+ 30681 00000000
+ 30682 52f2 02 .byte 0x2
+ 30683 52f3 9B02 .value 0x29b
+ 30684 52f5 32 .uleb128 0x32
+ 30685 52f6 BE0D0000 .long 0xdbe
+ 30686 52fa 03 .byte 0x3
+ 30687 52fb 91 .byte 0x91
+ 30688 52fc C07C .sleb128 -448
+ 30689 52fe 32 .uleb128 0x32
+ 30690 52ff B20D0000 .long 0xdb2
+ 30691 5303 03 .byte 0x3
+ 30692 5304 91 .byte 0x91
+ 30693 5305 D07C .sleb128 -432
+ 30694 5307 35 .uleb128 0x35
+ 30695 5308 CB0D0000 .long 0xdcb
+ 30696 530c 00000000 .quad .LBB1335
+ 30696 00000000
+ 30697 5314 00000000 .quad .LBE1335
+ 30697 00000000
+ 30698 531c 02 .byte 0x2
+ 30699 531d 7501 .value 0x175
+ 30700 531f 32 .uleb128 0x32
+ 30701 5320 E90D0000 .long 0xde9
+
GAS LISTING /tmp/ccjbMjHD.s page 828
+
+
+ 30702 5324 03 .byte 0x3
+ 30703 5325 91 .byte 0x91
+ 30704 5326 E07C .sleb128 -416
+ 30705 5328 32 .uleb128 0x32
+ 30706 5329 DD0D0000 .long 0xddd
+ 30707 532d 03 .byte 0x3
+ 30708 532e 91 .byte 0x91
+ 30709 532f F07C .sleb128 -400
+ 30710 5331 00 .byte 0x0
+ 30711 5332 00 .byte 0x0
+ 30712 5333 00 .byte 0x0
+ 30713 5334 00 .byte 0x0
+ 30714 5335 36 .uleb128 0x36
+ 30715 5336 00000000 .quad .LBB1337
+ 30715 00000000
+ 30716 533e 00000000 .quad .LBE1337
+ 30716 00000000
+ 30717 5346 55530000 .long 0x5355
+ 30718 534a 34 .uleb128 0x34
+ 30719 534b 2C0C0000 .long 0xc2c
+ 30720 534f 04 .byte 0x4
+ 30721 5350 91 .byte 0x91
+ 30722 5351 D0B17F .sleb128 -10032
+ 30723 5354 00 .byte 0x0
+ 30724 5355 31 .uleb128 0x31
+ 30725 5356 860E0000 .long 0xe86
+ 30726 535a 00000000 .quad .LBB1338
+ 30726 00000000
+ 30727 5362 00000000 .quad .LBE1338
+ 30727 00000000
+ 30728 536a 02 .byte 0x2
+ 30729 536b 9606 .value 0x696
+ 30730 536d 84530000 .long 0x5384
+ 30731 5371 32 .uleb128 0x32
+ 30732 5372 A10E0000 .long 0xea1
+ 30733 5376 03 .byte 0x3
+ 30734 5377 91 .byte 0x91
+ 30735 5378 807D .sleb128 -384
+ 30736 537a 32 .uleb128 0x32
+ 30737 537b 970E0000 .long 0xe97
+ 30738 537f 03 .byte 0x3
+ 30739 5380 91 .byte 0x91
+ 30740 5381 907D .sleb128 -368
+ 30741 5383 00 .byte 0x0
+ 30742 5384 36 .uleb128 0x36
+ 30743 5385 00000000 .quad .LBB1340
+ 30743 00000000
+ 30744 538d 00000000 .quad .LBE1340
+ 30744 00000000
+ 30745 5395 A4530000 .long 0x53a4
+ 30746 5399 34 .uleb128 0x34
+ 30747 539a 3C0C0000 .long 0xc3c
+ 30748 539e 04 .byte 0x4
+ 30749 539f 91 .byte 0x91
+ 30750 53a0 C0B17F .sleb128 -10048
+ 30751 53a3 00 .byte 0x0
+ 30752 53a4 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 829
+
+
+ 30753 53a5 AC0E0000 .long 0xeac
+ 30754 53a9 00000000 .quad .LBB1341
+ 30754 00000000
+ 30755 53b1 00000000 .quad .LBE1341
+ 30755 00000000
+ 30756 53b9 02 .byte 0x2
+ 30757 53ba 9806 .value 0x698
+ 30758 53bc F5530000 .long 0x53f5
+ 30759 53c0 32 .uleb128 0x32
+ 30760 53c1 BE0E0000 .long 0xebe
+ 30761 53c5 03 .byte 0x3
+ 30762 53c6 91 .byte 0x91
+ 30763 53c7 A07D .sleb128 -352
+ 30764 53c9 35 .uleb128 0x35
+ 30765 53ca CB0E0000 .long 0xecb
+ 30766 53ce 00000000 .quad .LBB1343
+ 30766 00000000
+ 30767 53d6 00000000 .quad .LBE1343
+ 30767 00000000
+ 30768 53de 02 .byte 0x2
+ 30769 53df 4905 .value 0x549
+ 30770 53e1 32 .uleb128 0x32
+ 30771 53e2 E90E0000 .long 0xee9
+ 30772 53e6 03 .byte 0x3
+ 30773 53e7 91 .byte 0x91
+ 30774 53e8 BC7D .sleb128 -324
+ 30775 53ea 32 .uleb128 0x32
+ 30776 53eb DD0E0000 .long 0xedd
+ 30777 53ef 03 .byte 0x3
+ 30778 53f0 91 .byte 0x91
+ 30779 53f1 C07D .sleb128 -320
+ 30780 53f3 00 .byte 0x0
+ 30781 53f4 00 .byte 0x0
+ 30782 53f5 33 .uleb128 0x33
+ 30783 53f6 00000000 .quad .LBB1345
+ 30783 00000000
+ 30784 53fe 00000000 .quad .LBE1345
+ 30784 00000000
+ 30785 5406 34 .uleb128 0x34
+ 30786 5407 480C0000 .long 0xc48
+ 30787 540b 04 .byte 0x4
+ 30788 540c 91 .byte 0x91
+ 30789 540d B0B17F .sleb128 -10064
+ 30790 5410 00 .byte 0x0
+ 30791 5411 00 .byte 0x0
+ 30792 5412 00 .byte 0x0
+ 30793 5413 35 .uleb128 0x35
+ 30794 5414 F60E0000 .long 0xef6
+ 30795 5418 00000000 .quad .LBB1346
+ 30795 00000000
+ 30796 5420 00000000 .quad .LBE1346
+ 30796 00000000
+ 30797 5428 02 .byte 0x2
+ 30798 5429 D906 .value 0x6d9
+ 30799 542b 32 .uleb128 0x32
+ 30800 542c 080F0000 .long 0xf08
+ 30801 5430 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 830
+
+
+ 30802 5431 91 .byte 0x91
+ 30803 5432 D07D .sleb128 -304
+ 30804 5434 33 .uleb128 0x33
+ 30805 5435 00000000 .quad .LBB1347
+ 30805 00000000
+ 30806 543d 00000000 .quad .LBE1347
+ 30806 00000000
+ 30807 5445 34 .uleb128 0x34
+ 30808 5446 140F0000 .long 0xf14
+ 30809 544a 04 .byte 0x4
+ 30810 544b 76 .byte 0x76
+ 30811 544c E0AC7F .sleb128 -10656
+ 30812 544f 31 .uleb128 0x31
+ 30813 5450 210F0000 .long 0xf21
+ 30814 5454 00000000 .quad .LBB1348
+ 30814 00000000
+ 30815 545c 00000000 .quad .LBE1348
+ 30815 00000000
+ 30816 5464 02 .byte 0x2
+ 30817 5465 1F06 .value 0x61f
+ 30818 5467 EC540000 .long 0x54ec
+ 30819 546b 32 .uleb128 0x32
+ 30820 546c 330F0000 .long 0xf33
+ 30821 5470 03 .byte 0x3
+ 30822 5471 91 .byte 0x91
+ 30823 5472 E07D .sleb128 -288
+ 30824 5474 33 .uleb128 0x33
+ 30825 5475 00000000 .quad .LBB1349
+ 30825 00000000
+ 30826 547d 00000000 .quad .LBE1349
+ 30826 00000000
+ 30827 5485 34 .uleb128 0x34
+ 30828 5486 3F0F0000 .long 0xf3f
+ 30829 548a 09 .byte 0x9
+ 30830 548b 03 .byte 0x3
+ 30831 548c 00000000 .quad mask.7943
+ 30831 00000000
+ 30832 5494 35 .uleb128 0x35
+ 30833 5495 A00D0000 .long 0xda0
+ 30834 5499 00000000 .quad .LBB1350
+ 30834 00000000
+ 30835 54a1 00000000 .quad .LBE1350
+ 30835 00000000
+ 30836 54a9 02 .byte 0x2
+ 30837 54aa FE04 .value 0x4fe
+ 30838 54ac 32 .uleb128 0x32
+ 30839 54ad BE0D0000 .long 0xdbe
+ 30840 54b1 03 .byte 0x3
+ 30841 54b2 91 .byte 0x91
+ 30842 54b3 F07D .sleb128 -272
+ 30843 54b5 32 .uleb128 0x32
+ 30844 54b6 B20D0000 .long 0xdb2
+ 30845 54ba 03 .byte 0x3
+ 30846 54bb 91 .byte 0x91
+ 30847 54bc 807E .sleb128 -256
+ 30848 54be 35 .uleb128 0x35
+ 30849 54bf CB0D0000 .long 0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s page 831
+
+
+ 30850 54c3 00000000 .quad .LBB1352
+ 30850 00000000
+ 30851 54cb 00000000 .quad .LBE1352
+ 30851 00000000
+ 30852 54d3 02 .byte 0x2
+ 30853 54d4 7501 .value 0x175
+ 30854 54d6 32 .uleb128 0x32
+ 30855 54d7 E90D0000 .long 0xde9
+ 30856 54db 03 .byte 0x3
+ 30857 54dc 91 .byte 0x91
+ 30858 54dd 907E .sleb128 -240
+ 30859 54df 32 .uleb128 0x32
+ 30860 54e0 DD0D0000 .long 0xddd
+ 30861 54e4 03 .byte 0x3
+ 30862 54e5 91 .byte 0x91
+ 30863 54e6 A07E .sleb128 -224
+ 30864 54e8 00 .byte 0x0
+ 30865 54e9 00 .byte 0x0
+ 30866 54ea 00 .byte 0x0
+ 30867 54eb 00 .byte 0x0
+ 30868 54ec 31 .uleb128 0x31
+ 30869 54ed 210F0000 .long 0xf21
+ 30870 54f1 00000000 .quad .LBB1354
+ 30870 00000000
+ 30871 54f9 00000000 .quad .LBE1354
+ 30871 00000000
+ 30872 5501 02 .byte 0x2
+ 30873 5502 2006 .value 0x620
+ 30874 5504 89550000 .long 0x5589
+ 30875 5508 32 .uleb128 0x32
+ 30876 5509 330F0000 .long 0xf33
+ 30877 550d 03 .byte 0x3
+ 30878 550e 91 .byte 0x91
+ 30879 550f B07E .sleb128 -208
+ 30880 5511 33 .uleb128 0x33
+ 30881 5512 00000000 .quad .LBB1355
+ 30881 00000000
+ 30882 551a 00000000 .quad .LBE1355
+ 30882 00000000
+ 30883 5522 34 .uleb128 0x34
+ 30884 5523 3F0F0000 .long 0xf3f
+ 30885 5527 09 .byte 0x9
+ 30886 5528 03 .byte 0x3
+ 30887 5529 00000000 .quad mask.7943
+ 30887 00000000
+ 30888 5531 35 .uleb128 0x35
+ 30889 5532 A00D0000 .long 0xda0
+ 30890 5536 00000000 .quad .LBB1356
+ 30890 00000000
+ 30891 553e 00000000 .quad .LBE1356
+ 30891 00000000
+ 30892 5546 02 .byte 0x2
+ 30893 5547 FE04 .value 0x4fe
+ 30894 5549 32 .uleb128 0x32
+ 30895 554a BE0D0000 .long 0xdbe
+ 30896 554e 03 .byte 0x3
+ 30897 554f 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 832
+
+
+ 30898 5550 C07E .sleb128 -192
+ 30899 5552 32 .uleb128 0x32
+ 30900 5553 B20D0000 .long 0xdb2
+ 30901 5557 03 .byte 0x3
+ 30902 5558 91 .byte 0x91
+ 30903 5559 D07E .sleb128 -176
+ 30904 555b 35 .uleb128 0x35
+ 30905 555c CB0D0000 .long 0xdcb
+ 30906 5560 00000000 .quad .LBB1358
+ 30906 00000000
+ 30907 5568 00000000 .quad .LBE1358
+ 30907 00000000
+ 30908 5570 02 .byte 0x2
+ 30909 5571 7501 .value 0x175
+ 30910 5573 32 .uleb128 0x32
+ 30911 5574 E90D0000 .long 0xde9
+ 30912 5578 03 .byte 0x3
+ 30913 5579 91 .byte 0x91
+ 30914 557a E07E .sleb128 -160
+ 30915 557c 32 .uleb128 0x32
+ 30916 557d DD0D0000 .long 0xddd
+ 30917 5581 03 .byte 0x3
+ 30918 5582 91 .byte 0x91
+ 30919 5583 F07E .sleb128 -144
+ 30920 5585 00 .byte 0x0
+ 30921 5586 00 .byte 0x0
+ 30922 5587 00 .byte 0x0
+ 30923 5588 00 .byte 0x0
+ 30924 5589 35 .uleb128 0x35
+ 30925 558a 210F0000 .long 0xf21
+ 30926 558e 00000000 .quad .LBB1360
+ 30926 00000000
+ 30927 5596 00000000 .quad .LBE1360
+ 30927 00000000
+ 30928 559e 02 .byte 0x2
+ 30929 559f 2106 .value 0x621
+ 30930 55a1 32 .uleb128 0x32
+ 30931 55a2 330F0000 .long 0xf33
+ 30932 55a6 03 .byte 0x3
+ 30933 55a7 91 .byte 0x91
+ 30934 55a8 807F .sleb128 -128
+ 30935 55aa 33 .uleb128 0x33
+ 30936 55ab 00000000 .quad .LBB1361
+ 30936 00000000
+ 30937 55b3 00000000 .quad .LBE1361
+ 30937 00000000
+ 30938 55bb 34 .uleb128 0x34
+ 30939 55bc 3F0F0000 .long 0xf3f
+ 30940 55c0 09 .byte 0x9
+ 30941 55c1 03 .byte 0x3
+ 30942 55c2 00000000 .quad mask.7943
+ 30942 00000000
+ 30943 55ca 35 .uleb128 0x35
+ 30944 55cb A00D0000 .long 0xda0
+ 30945 55cf 00000000 .quad .LBB1362
+ 30945 00000000
+ 30946 55d7 00000000 .quad .LBE1362
+
GAS LISTING /tmp/ccjbMjHD.s page 833
+
+
+ 30946 00000000
+ 30947 55df 02 .byte 0x2
+ 30948 55e0 FE04 .value 0x4fe
+ 30949 55e2 32 .uleb128 0x32
+ 30950 55e3 BE0D0000 .long 0xdbe
+ 30951 55e7 03 .byte 0x3
+ 30952 55e8 91 .byte 0x91
+ 30953 55e9 907F .sleb128 -112
+ 30954 55eb 32 .uleb128 0x32
+ 30955 55ec B20D0000 .long 0xdb2
+ 30956 55f0 03 .byte 0x3
+ 30957 55f1 91 .byte 0x91
+ 30958 55f2 A07F .sleb128 -96
+ 30959 55f4 35 .uleb128 0x35
+ 30960 55f5 CB0D0000 .long 0xdcb
+ 30961 55f9 00000000 .quad .LBB1364
+ 30961 00000000
+ 30962 5601 00000000 .quad .LBE1364
+ 30962 00000000
+ 30963 5609 02 .byte 0x2
+ 30964 560a 7501 .value 0x175
+ 30965 560c 32 .uleb128 0x32
+ 30966 560d E90D0000 .long 0xde9
+ 30967 5611 03 .byte 0x3
+ 30968 5612 91 .byte 0x91
+ 30969 5613 B07F .sleb128 -80
+ 30970 5615 32 .uleb128 0x32
+ 30971 5616 DD0D0000 .long 0xddd
+ 30972 561a 02 .byte 0x2
+ 30973 561b 91 .byte 0x91
+ 30974 561c 40 .sleb128 -64
+ 30975 561d 00 .byte 0x0
+ 30976 561e 00 .byte 0x0
+ 30977 561f 00 .byte 0x0
+ 30978 5620 00 .byte 0x0
+ 30979 5621 00 .byte 0x0
+ 30980 5622 00 .byte 0x0
+ 30981 5623 00 .byte 0x0
+ 30982 5624 07 .uleb128 0x7
+ 30983 5625 08 .byte 0x8
+ 30984 5626 B3010000 .long 0x1b3
+ 30985 562a 07 .uleb128 0x7
+ 30986 562b 08 .byte 0x8
+ 30987 562c 30560000 .long 0x5630
+ 30988 5630 06 .uleb128 0x6
+ 30989 5631 FE030000 .long 0x3fe
+ 30990 5635 25 .uleb128 0x25
+ 30991 5636 00000000 .long .LASF348
+ 30992 563a 02 .byte 0x2
+ 30993 563b 1105 .value 0x511
+ 30994 563d 01 .byte 0x1
+ 30995 563e B3010000 .long 0x1b3
+ 30996 5642 03 .byte 0x3
+ 30997 5643 71560000 .long 0x5671
+ 30998 5647 26 .uleb128 0x26
+ 30999 5648 00000000 .long .LASF67
+ 31000 564c 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 834
+
+
+ 31001 564d 1105 .value 0x511
+ 31002 564f B3010000 .long 0x1b3
+ 31003 5653 2C .uleb128 0x2c
+ 31004 5654 00000000 .long .LASF334
+ 31005 5658 02 .byte 0x2
+ 31006 5659 1405 .value 0x514
+ 31007 565b 4A0D0000 .long 0xd4a
+ 31008 565f 10 .byte 0x10
+ 31009 5660 08 .byte 0x8
+ 31010 5661 09 .byte 0x9
+ 31011 5662 0A .byte 0xa
+ 31012 5663 0B .byte 0xb
+ 31013 5664 0C .byte 0xc
+ 31014 5665 0D .byte 0xd
+ 31015 5666 0E .byte 0xe
+ 31016 5667 0F .byte 0xf
+ 31017 5668 FF .byte 0xff
+ 31018 5669 FF .byte 0xff
+ 31019 566a FF .byte 0xff
+ 31020 566b FF .byte 0xff
+ 31021 566c FF .byte 0xff
+ 31022 566d FF .byte 0xff
+ 31023 566e FF .byte 0xff
+ 31024 566f FF .byte 0xff
+ 31025 5670 00 .byte 0x0
+ 31026 5671 25 .uleb128 0x25
+ 31027 5672 00000000 .long .LASF349
+ 31028 5676 02 .byte 0x2
+ 31029 5677 5206 .value 0x652
+ 31030 5679 01 .byte 0x1
+ 31031 567a B3010000 .long 0x1b3
+ 31032 567e 03 .byte 0x3
+ 31033 567f BE560000 .long 0x56be
+ 31034 5683 26 .uleb128 0x26
+ 31035 5684 00000000 .long .LASF67
+ 31036 5688 02 .byte 0x2
+ 31037 5689 5206 .value 0x652
+ 31038 568b B3010000 .long 0x1b3
+ 31039 568f 26 .uleb128 0x26
+ 31040 5690 00000000 .long .LASF321
+ 31041 5694 02 .byte 0x2
+ 31042 5695 5206 .value 0x652
+ 31043 5697 B4000000 .long 0xb4
+ 31044 569b 28 .uleb128 0x28
+ 31045 569c 7500 .string "u"
+ 31046 569e 02 .byte 0x2
+ 31047 569f 5906 .value 0x659
+ 31048 56a1 29050000 .long 0x529
+ 31049 56a5 27 .uleb128 0x27
+ 31050 56a6 00000000 .long .LASF350
+ 31051 56aa 02 .byte 0x2
+ 31052 56ab 5A06 .value 0x65a
+ 31053 56ad 09040000 .long 0x409
+ 31054 56b1 27 .uleb128 0x27
+ 31055 56b2 00000000 .long .LASF351
+ 31056 56b6 02 .byte 0x2
+ 31057 56b7 5B06 .value 0x65b
+
GAS LISTING /tmp/ccjbMjHD.s page 835
+
+
+ 31058 56b9 09040000 .long 0x409
+ 31059 56bd 00 .byte 0x0
+ 31060 56be 25 .uleb128 0x25
+ 31061 56bf 00000000 .long .LASF352
+ 31062 56c3 02 .byte 0x2
+ 31063 56c4 DF02 .value 0x2df
+ 31064 56c6 01 .byte 0x1
+ 31065 56c7 09040000 .long 0x409
+ 31066 56cb 03 .byte 0x3
+ 31067 56cc F2560000 .long 0x56f2
+ 31068 56d0 2B .uleb128 0x2b
+ 31069 56d1 7700 .string "w"
+ 31070 56d3 02 .byte 0x2
+ 31071 56d4 DF02 .value 0x2df
+ 31072 56d6 09040000 .long 0x409
+ 31073 56da 28 .uleb128 0x28
+ 31074 56db 636F6C00 .string "col"
+ 31075 56df 02 .byte 0x2
+ 31076 56e0 E102 .value 0x2e1
+ 31077 56e2 14040000 .long 0x414
+ 31078 56e6 28 .uleb128 0x28
+ 31079 56e7 697800 .string "ix"
+ 31080 56ea 02 .byte 0x2
+ 31081 56eb E202 .value 0x2e2
+ 31082 56ed 78000000 .long 0x78
+ 31083 56f1 00 .byte 0x0
+ 31084 56f2 25 .uleb128 0x25
+ 31085 56f3 00000000 .long .LASF353
+ 31086 56f7 02 .byte 0x2
+ 31087 56f8 AA04 .value 0x4aa
+ 31088 56fa 01 .byte 0x1
+ 31089 56fb 09040000 .long 0x409
+ 31090 56ff 03 .byte 0x3
+ 31091 5700 0F570000 .long 0x570f
+ 31092 5704 2B .uleb128 0x2b
+ 31093 5705 7700 .string "w"
+ 31094 5707 02 .byte 0x2
+ 31095 5708 AA04 .value 0x4aa
+ 31096 570a 09040000 .long 0x409
+ 31097 570e 00 .byte 0x0
+ 31098 570f 25 .uleb128 0x25
+ 31099 5710 00000000 .long .LASF354
+ 31100 5714 02 .byte 0x2
+ 31101 5715 B705 .value 0x5b7
+ 31102 5717 01 .byte 0x1
+ 31103 5718 B3010000 .long 0x1b3
+ 31104 571c 03 .byte 0x3
+ 31105 571d 36570000 .long 0x5736
+ 31106 5721 2B .uleb128 0x2b
+ 31107 5722 7700 .string "w"
+ 31108 5724 02 .byte 0x2
+ 31109 5725 B705 .value 0x5b7
+ 31110 5727 B3010000 .long 0x1b3
+ 31111 572b 2B .uleb128 0x2b
+ 31112 572c 7800 .string "x"
+ 31113 572e 02 .byte 0x2
+ 31114 572f B705 .value 0x5b7
+
GAS LISTING /tmp/ccjbMjHD.s page 836
+
+
+ 31115 5731 B3010000 .long 0x1b3
+ 31116 5735 00 .byte 0x0
+ 31117 5736 25 .uleb128 0x25
+ 31118 5737 00000000 .long .LASF355
+ 31119 573b 03 .byte 0x3
+ 31120 573c 6C01 .value 0x16c
+ 31121 573e 01 .byte 0x1
+ 31122 573f E7000000 .long 0xe7
+ 31123 5743 03 .byte 0x3
+ 31124 5744 6D570000 .long 0x576d
+ 31125 5748 26 .uleb128 0x26
+ 31126 5749 00000000 .long .LASF356
+ 31127 574d 03 .byte 0x3
+ 31128 574e 6C01 .value 0x16c
+ 31129 5750 E7000000 .long 0xe7
+ 31130 5754 26 .uleb128 0x26
+ 31131 5755 00000000 .long .LASF357
+ 31132 5759 03 .byte 0x3
+ 31133 575a 6C01 .value 0x16c
+ 31134 575c E7000000 .long 0xe7
+ 31135 5760 26 .uleb128 0x26
+ 31136 5761 00000000 .long .LASF334
+ 31137 5765 03 .byte 0x3
+ 31138 5766 6C01 .value 0x16c
+ 31139 5768 B4000000 .long 0xb4
+ 31140 576c 00 .byte 0x0
+ 31141 576d 25 .uleb128 0x25
+ 31142 576e 00000000 .long .LASF358
+ 31143 5772 02 .byte 0x2
+ 31144 5773 D705 .value 0x5d7
+ 31145 5775 01 .byte 0x1
+ 31146 5776 B3010000 .long 0x1b3
+ 31147 577a 03 .byte 0x3
+ 31148 577b 94570000 .long 0x5794
+ 31149 577f 2B .uleb128 0x2b
+ 31150 5780 7700 .string "w"
+ 31151 5782 02 .byte 0x2
+ 31152 5783 D705 .value 0x5d7
+ 31153 5785 B3010000 .long 0x1b3
+ 31154 5789 2B .uleb128 0x2b
+ 31155 578a 7800 .string "x"
+ 31156 578c 02 .byte 0x2
+ 31157 578d D705 .value 0x5d7
+ 31158 578f B3010000 .long 0x1b3
+ 31159 5793 00 .byte 0x0
+ 31160 5794 2D .uleb128 0x2d
+ 31161 5795 00000000 .long .LASF360
+ 31162 5799 02 .byte 0x2
+ 31163 579a E706 .value 0x6e7
+ 31164 579c 01 .byte 0x1
+ 31165 579d 00000000 .quad .LFB646
+ 31165 00000000
+ 31166 57a5 00000000 .quad .LFE646
+ 31166 00000000
+ 31167 57ad 00000000 .long .LLST2
+ 31168 57b1 8F940000 .long 0x948f
+ 31169 57b5 2E .uleb128 0x2e
+
GAS LISTING /tmp/ccjbMjHD.s page 837
+
+
+ 31170 57b6 00000000 .long .LASF65
+ 31171 57ba 02 .byte 0x2
+ 31172 57bb E706 .value 0x6e7
+ 31173 57bd 24560000 .long 0x5624
+ 31174 57c1 04 .byte 0x4
+ 31175 57c2 91 .byte 0x91
+ 31176 57c3 98BD7F .sleb128 -8552
+ 31177 57c6 2F .uleb128 0x2f
+ 31178 57c7 6B657900 .string "key"
+ 31179 57cb 02 .byte 0x2
+ 31180 57cc E706 .value 0x6e7
+ 31181 57ce 2A560000 .long 0x562a
+ 31182 57d2 04 .byte 0x4
+ 31183 57d3 91 .byte 0x91
+ 31184 57d4 90BD7F .sleb128 -8560
+ 31185 57d7 37 .uleb128 0x37
+ 31186 57d8 763000 .string "v0"
+ 31187 57db 02 .byte 0x2
+ 31188 57dc EF06 .value 0x6ef
+ 31189 57de B3010000 .long 0x1b3
+ 31190 57e2 04 .byte 0x4
+ 31191 57e3 76 .byte 0x76
+ 31192 57e4 B0B97F .sleb128 -9040
+ 31193 57e7 37 .uleb128 0x37
+ 31194 57e8 763100 .string "v1"
+ 31195 57eb 02 .byte 0x2
+ 31196 57ec EF06 .value 0x6ef
+ 31197 57ee B3010000 .long 0x1b3
+ 31198 57f2 04 .byte 0x4
+ 31199 57f3 76 .byte 0x76
+ 31200 57f4 C0B97F .sleb128 -9024
+ 31201 57f7 37 .uleb128 0x37
+ 31202 57f8 763200 .string "v2"
+ 31203 57fb 02 .byte 0x2
+ 31204 57fc EF06 .value 0x6ef
+ 31205 57fe B3010000 .long 0x1b3
+ 31206 5802 04 .byte 0x4
+ 31207 5803 76 .byte 0x76
+ 31208 5804 D0B97F .sleb128 -9008
+ 31209 5807 37 .uleb128 0x37
+ 31210 5808 763300 .string "v3"
+ 31211 580b 02 .byte 0x2
+ 31212 580c EF06 .value 0x6ef
+ 31213 580e B3010000 .long 0x1b3
+ 31214 5812 04 .byte 0x4
+ 31215 5813 76 .byte 0x76
+ 31216 5814 E0B97F .sleb128 -8992
+ 31217 5817 37 .uleb128 0x37
+ 31218 5818 763400 .string "v4"
+ 31219 581b 02 .byte 0x2
+ 31220 581c EF06 .value 0x6ef
+ 31221 581e B3010000 .long 0x1b3
+ 31222 5822 04 .byte 0x4
+ 31223 5823 76 .byte 0x76
+ 31224 5824 F0B97F .sleb128 -8976
+ 31225 5827 37 .uleb128 0x37
+ 31226 5828 6B00 .string "k"
+
GAS LISTING /tmp/ccjbMjHD.s page 838
+
+
+ 31227 582a 02 .byte 0x2
+ 31228 582b F006 .value 0x6f0
+ 31229 582d B3010000 .long 0x1b3
+ 31230 5831 04 .byte 0x4
+ 31231 5832 76 .byte 0x76
+ 31232 5833 80BA7F .sleb128 -8960
+ 31233 5836 31 .uleb128 0x31
+ 31234 5837 AD0B0000 .long 0xbad
+ 31235 583b 00000000 .quad .LBB1952
+ 31235 00000000
+ 31236 5843 00000000 .quad .LBE1952
+ 31236 00000000
+ 31237 584b 02 .byte 0x2
+ 31238 584c F306 .value 0x6f3
+ 31239 584e 78580000 .long 0x5878
+ 31240 5852 32 .uleb128 0x32
+ 31241 5853 BE0B0000 .long 0xbbe
+ 31242 5857 03 .byte 0x3
+ 31243 5858 91 .byte 0x91
+ 31244 5859 A040 .sleb128 -8160
+ 31245 585b 33 .uleb128 0x33
+ 31246 585c 00000000 .quad .LBB1953
+ 31246 00000000
+ 31247 5864 00000000 .quad .LBE1953
+ 31247 00000000
+ 31248 586c 34 .uleb128 0x34
+ 31249 586d C90B0000 .long 0xbc9
+ 31250 5871 04 .byte 0x4
+ 31251 5872 76 .byte 0x76
+ 31252 5873 90BA7F .sleb128 -8944
+ 31253 5876 00 .byte 0x0
+ 31254 5877 00 .byte 0x0
+ 31255 5878 31 .uleb128 0x31
+ 31256 5879 AD0B0000 .long 0xbad
+ 31257 587d 00000000 .quad .LBB1954
+ 31257 00000000
+ 31258 5885 00000000 .quad .LBE1954
+ 31258 00000000
+ 31259 588d 02 .byte 0x2
+ 31260 588e F406 .value 0x6f4
+ 31261 5890 BA580000 .long 0x58ba
+ 31262 5894 32 .uleb128 0x32
+ 31263 5895 BE0B0000 .long 0xbbe
+ 31264 5899 03 .byte 0x3
+ 31265 589a 91 .byte 0x91
+ 31266 589b A840 .sleb128 -8152
+ 31267 589d 33 .uleb128 0x33
+ 31268 589e 00000000 .quad .LBB1955
+ 31268 00000000
+ 31269 58a6 00000000 .quad .LBE1955
+ 31269 00000000
+ 31270 58ae 34 .uleb128 0x34
+ 31271 58af C90B0000 .long 0xbc9
+ 31272 58b3 04 .byte 0x4
+ 31273 58b4 76 .byte 0x76
+ 31274 58b5 A0BA7F .sleb128 -8928
+ 31275 58b8 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 839
+
+
+ 31276 58b9 00 .byte 0x0
+ 31277 58ba 31 .uleb128 0x31
+ 31278 58bb 35560000 .long 0x5635
+ 31279 58bf 00000000 .quad .LBB1956
+ 31279 00000000
+ 31280 58c7 00000000 .quad .LBE1956
+ 31280 00000000
+ 31281 58cf 02 .byte 0x2
+ 31282 58d0 F506 .value 0x6f5
+ 31283 58d2 57590000 .long 0x5957
+ 31284 58d6 32 .uleb128 0x32
+ 31285 58d7 47560000 .long 0x5647
+ 31286 58db 03 .byte 0x3
+ 31287 58dc 91 .byte 0x91
+ 31288 58dd B040 .sleb128 -8144
+ 31289 58df 33 .uleb128 0x33
+ 31290 58e0 00000000 .quad .LBB1957
+ 31290 00000000
+ 31291 58e8 00000000 .quad .LBE1957
+ 31291 00000000
+ 31292 58f0 34 .uleb128 0x34
+ 31293 58f1 53560000 .long 0x5653
+ 31294 58f5 09 .byte 0x9
+ 31295 58f6 03 .byte 0x3
+ 31296 58f7 00000000 .quad mask.7952
+ 31296 00000000
+ 31297 58ff 35 .uleb128 0x35
+ 31298 5900 A00D0000 .long 0xda0
+ 31299 5904 00000000 .quad .LBB1958
+ 31299 00000000
+ 31300 590c 00000000 .quad .LBE1958
+ 31300 00000000
+ 31301 5914 02 .byte 0x2
+ 31302 5915 1505 .value 0x515
+ 31303 5917 32 .uleb128 0x32
+ 31304 5918 BE0D0000 .long 0xdbe
+ 31305 591c 03 .byte 0x3
+ 31306 591d 91 .byte 0x91
+ 31307 591e C040 .sleb128 -8128
+ 31308 5920 32 .uleb128 0x32
+ 31309 5921 B20D0000 .long 0xdb2
+ 31310 5925 03 .byte 0x3
+ 31311 5926 91 .byte 0x91
+ 31312 5927 D040 .sleb128 -8112
+ 31313 5929 35 .uleb128 0x35
+ 31314 592a CB0D0000 .long 0xdcb
+ 31315 592e 00000000 .quad .LBB1960
+ 31315 00000000
+ 31316 5936 00000000 .quad .LBE1960
+ 31316 00000000
+ 31317 593e 02 .byte 0x2
+ 31318 593f 7501 .value 0x175
+ 31319 5941 32 .uleb128 0x32
+ 31320 5942 E90D0000 .long 0xde9
+ 31321 5946 03 .byte 0x3
+ 31322 5947 91 .byte 0x91
+ 31323 5948 E040 .sleb128 -8096
+
GAS LISTING /tmp/ccjbMjHD.s page 840
+
+
+ 31324 594a 32 .uleb128 0x32
+ 31325 594b DD0D0000 .long 0xddd
+ 31326 594f 03 .byte 0x3
+ 31327 5950 91 .byte 0x91
+ 31328 5951 F040 .sleb128 -8080
+ 31329 5953 00 .byte 0x0
+ 31330 5954 00 .byte 0x0
+ 31331 5955 00 .byte 0x0
+ 31332 5956 00 .byte 0x0
+ 31333 5957 31 .uleb128 0x31
+ 31334 5958 71560000 .long 0x5671
+ 31335 595c 00000000 .quad .LBB1962
+ 31335 00000000
+ 31336 5964 00000000 .quad .LBE1962
+ 31336 00000000
+ 31337 596c 02 .byte 0x2
+ 31338 596d FC06 .value 0x6fc
+ 31339 596f 215A0000 .long 0x5a21
+ 31340 5973 32 .uleb128 0x32
+ 31341 5974 8F560000 .long 0x568f
+ 31342 5978 03 .byte 0x3
+ 31343 5979 91 .byte 0x91
+ 31344 597a 8C41 .sleb128 -8052
+ 31345 597c 32 .uleb128 0x32
+ 31346 597d 83560000 .long 0x5683
+ 31347 5981 03 .byte 0x3
+ 31348 5982 91 .byte 0x91
+ 31349 5983 9041 .sleb128 -8048
+ 31350 5985 33 .uleb128 0x33
+ 31351 5986 00000000 .quad .LBB1963
+ 31351 00000000
+ 31352 598e 00000000 .quad .LBE1963
+ 31352 00000000
+ 31353 5996 34 .uleb128 0x34
+ 31354 5997 9B560000 .long 0x569b
+ 31355 599b 04 .byte 0x4
+ 31356 599c 91 .byte 0x91
+ 31357 599d B0BD7F .sleb128 -8528
+ 31358 59a0 34 .uleb128 0x34
+ 31359 59a1 A5560000 .long 0x56a5
+ 31360 59a5 03 .byte 0x3
+ 31361 59a6 91 .byte 0x91
+ 31362 59a7 B041 .sleb128 -8016
+ 31363 59a9 34 .uleb128 0x34
+ 31364 59aa B1560000 .long 0x56b1
+ 31365 59ae 03 .byte 0x3
+ 31366 59af 91 .byte 0x91
+ 31367 59b0 AC41 .sleb128 -8020
+ 31368 59b2 31 .uleb128 0x31
+ 31369 59b3 BE560000 .long 0x56be
+ 31370 59b7 00000000 .quad .LBB1964
+ 31370 00000000
+ 31371 59bf 00000000 .quad .LBE1964
+ 31371 00000000
+ 31372 59c7 02 .byte 0x2
+ 31373 59c8 5F06 .value 0x65f
+ 31374 59ca FD590000 .long 0x59fd
+
GAS LISTING /tmp/ccjbMjHD.s page 841
+
+
+ 31375 59ce 32 .uleb128 0x32
+ 31376 59cf D0560000 .long 0x56d0
+ 31377 59d3 03 .byte 0x3
+ 31378 59d4 91 .byte 0x91
+ 31379 59d5 B441 .sleb128 -8012
+ 31380 59d7 33 .uleb128 0x33
+ 31381 59d8 00000000 .quad .LBB1965
+ 31381 00000000
+ 31382 59e0 00000000 .quad .LBE1965
+ 31382 00000000
+ 31383 59e8 34 .uleb128 0x34
+ 31384 59e9 DA560000 .long 0x56da
+ 31385 59ed 04 .byte 0x4
+ 31386 59ee 91 .byte 0x91
+ 31387 59ef A0BD7F .sleb128 -8544
+ 31388 59f2 34 .uleb128 0x34
+ 31389 59f3 E6560000 .long 0x56e6
+ 31390 59f7 03 .byte 0x3
+ 31391 59f8 91 .byte 0x91
+ 31392 59f9 B841 .sleb128 -8008
+ 31393 59fb 00 .byte 0x0
+ 31394 59fc 00 .byte 0x0
+ 31395 59fd 35 .uleb128 0x35
+ 31396 59fe F2560000 .long 0x56f2
+ 31397 5a02 00000000 .quad .LBB1966
+ 31397 00000000
+ 31398 5a0a 00000000 .quad .LBE1966
+ 31398 00000000
+ 31399 5a12 02 .byte 0x2
+ 31400 5a13 6006 .value 0x660
+ 31401 5a15 32 .uleb128 0x32
+ 31402 5a16 04570000 .long 0x5704
+ 31403 5a1a 03 .byte 0x3
+ 31404 5a1b 91 .byte 0x91
+ 31405 5a1c BC41 .sleb128 -8004
+ 31406 5a1e 00 .byte 0x0
+ 31407 5a1f 00 .byte 0x0
+ 31408 5a20 00 .byte 0x0
+ 31409 5a21 31 .uleb128 0x31
+ 31410 5a22 F60E0000 .long 0xef6
+ 31411 5a26 00000000 .quad .LBB1968
+ 31411 00000000
+ 31412 5a2e 00000000 .quad .LBE1968
+ 31412 00000000
+ 31413 5a36 02 .byte 0x2
+ 31414 5a37 FE06 .value 0x6fe
+ 31415 5a39 365C0000 .long 0x5c36
+ 31416 5a3d 32 .uleb128 0x32
+ 31417 5a3e 080F0000 .long 0xf08
+ 31418 5a42 03 .byte 0x3
+ 31419 5a43 91 .byte 0x91
+ 31420 5a44 C041 .sleb128 -8000
+ 31421 5a46 33 .uleb128 0x33
+ 31422 5a47 00000000 .quad .LBB1969
+ 31422 00000000
+ 31423 5a4f 00000000 .quad .LBE1969
+ 31423 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 842
+
+
+ 31424 5a57 34 .uleb128 0x34
+ 31425 5a58 140F0000 .long 0xf14
+ 31426 5a5c 04 .byte 0x4
+ 31427 5a5d 76 .byte 0x76
+ 31428 5a5e B0BA7F .sleb128 -8912
+ 31429 5a61 31 .uleb128 0x31
+ 31430 5a62 210F0000 .long 0xf21
+ 31431 5a66 00000000 .quad .LBB1970
+ 31431 00000000
+ 31432 5a6e 00000000 .quad .LBE1970
+ 31432 00000000
+ 31433 5a76 02 .byte 0x2
+ 31434 5a77 1F06 .value 0x61f
+ 31435 5a79 FE5A0000 .long 0x5afe
+ 31436 5a7d 32 .uleb128 0x32
+ 31437 5a7e 330F0000 .long 0xf33
+ 31438 5a82 03 .byte 0x3
+ 31439 5a83 91 .byte 0x91
+ 31440 5a84 D041 .sleb128 -7984
+ 31441 5a86 33 .uleb128 0x33
+ 31442 5a87 00000000 .quad .LBB1971
+ 31442 00000000
+ 31443 5a8f 00000000 .quad .LBE1971
+ 31443 00000000
+ 31444 5a97 34 .uleb128 0x34
+ 31445 5a98 3F0F0000 .long 0xf3f
+ 31446 5a9c 09 .byte 0x9
+ 31447 5a9d 03 .byte 0x3
+ 31448 5a9e 00000000 .quad mask.7943
+ 31448 00000000
+ 31449 5aa6 35 .uleb128 0x35
+ 31450 5aa7 A00D0000 .long 0xda0
+ 31451 5aab 00000000 .quad .LBB1972
+ 31451 00000000
+ 31452 5ab3 00000000 .quad .LBE1972
+ 31452 00000000
+ 31453 5abb 02 .byte 0x2
+ 31454 5abc FE04 .value 0x4fe
+ 31455 5abe 32 .uleb128 0x32
+ 31456 5abf BE0D0000 .long 0xdbe
+ 31457 5ac3 03 .byte 0x3
+ 31458 5ac4 91 .byte 0x91
+ 31459 5ac5 E041 .sleb128 -7968
+ 31460 5ac7 32 .uleb128 0x32
+ 31461 5ac8 B20D0000 .long 0xdb2
+ 31462 5acc 03 .byte 0x3
+ 31463 5acd 91 .byte 0x91
+ 31464 5ace F041 .sleb128 -7952
+ 31465 5ad0 35 .uleb128 0x35
+ 31466 5ad1 CB0D0000 .long 0xdcb
+ 31467 5ad5 00000000 .quad .LBB1974
+ 31467 00000000
+ 31468 5add 00000000 .quad .LBE1974
+ 31468 00000000
+ 31469 5ae5 02 .byte 0x2
+ 31470 5ae6 7501 .value 0x175
+ 31471 5ae8 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 843
+
+
+ 31472 5ae9 E90D0000 .long 0xde9
+ 31473 5aed 03 .byte 0x3
+ 31474 5aee 91 .byte 0x91
+ 31475 5aef 8042 .sleb128 -7936
+ 31476 5af1 32 .uleb128 0x32
+ 31477 5af2 DD0D0000 .long 0xddd
+ 31478 5af6 03 .byte 0x3
+ 31479 5af7 91 .byte 0x91
+ 31480 5af8 9042 .sleb128 -7920
+ 31481 5afa 00 .byte 0x0
+ 31482 5afb 00 .byte 0x0
+ 31483 5afc 00 .byte 0x0
+ 31484 5afd 00 .byte 0x0
+ 31485 5afe 31 .uleb128 0x31
+ 31486 5aff 210F0000 .long 0xf21
+ 31487 5b03 00000000 .quad .LBB1976
+ 31487 00000000
+ 31488 5b0b 00000000 .quad .LBE1976
+ 31488 00000000
+ 31489 5b13 02 .byte 0x2
+ 31490 5b14 2006 .value 0x620
+ 31491 5b16 9B5B0000 .long 0x5b9b
+ 31492 5b1a 32 .uleb128 0x32
+ 31493 5b1b 330F0000 .long 0xf33
+ 31494 5b1f 03 .byte 0x3
+ 31495 5b20 91 .byte 0x91
+ 31496 5b21 A042 .sleb128 -7904
+ 31497 5b23 33 .uleb128 0x33
+ 31498 5b24 00000000 .quad .LBB1977
+ 31498 00000000
+ 31499 5b2c 00000000 .quad .LBE1977
+ 31499 00000000
+ 31500 5b34 34 .uleb128 0x34
+ 31501 5b35 3F0F0000 .long 0xf3f
+ 31502 5b39 09 .byte 0x9
+ 31503 5b3a 03 .byte 0x3
+ 31504 5b3b 00000000 .quad mask.7943
+ 31504 00000000
+ 31505 5b43 35 .uleb128 0x35
+ 31506 5b44 A00D0000 .long 0xda0
+ 31507 5b48 00000000 .quad .LBB1978
+ 31507 00000000
+ 31508 5b50 00000000 .quad .LBE1978
+ 31508 00000000
+ 31509 5b58 02 .byte 0x2
+ 31510 5b59 FE04 .value 0x4fe
+ 31511 5b5b 32 .uleb128 0x32
+ 31512 5b5c BE0D0000 .long 0xdbe
+ 31513 5b60 03 .byte 0x3
+ 31514 5b61 91 .byte 0x91
+ 31515 5b62 B042 .sleb128 -7888
+ 31516 5b64 32 .uleb128 0x32
+ 31517 5b65 B20D0000 .long 0xdb2
+ 31518 5b69 03 .byte 0x3
+ 31519 5b6a 91 .byte 0x91
+ 31520 5b6b C042 .sleb128 -7872
+ 31521 5b6d 35 .uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s page 844
+
+
+ 31522 5b6e CB0D0000 .long 0xdcb
+ 31523 5b72 00000000 .quad .LBB1980
+ 31523 00000000
+ 31524 5b7a 00000000 .quad .LBE1980
+ 31524 00000000
+ 31525 5b82 02 .byte 0x2
+ 31526 5b83 7501 .value 0x175
+ 31527 5b85 32 .uleb128 0x32
+ 31528 5b86 E90D0000 .long 0xde9
+ 31529 5b8a 03 .byte 0x3
+ 31530 5b8b 91 .byte 0x91
+ 31531 5b8c D042 .sleb128 -7856
+ 31532 5b8e 32 .uleb128 0x32
+ 31533 5b8f DD0D0000 .long 0xddd
+ 31534 5b93 03 .byte 0x3
+ 31535 5b94 91 .byte 0x91
+ 31536 5b95 E042 .sleb128 -7840
+ 31537 5b97 00 .byte 0x0
+ 31538 5b98 00 .byte 0x0
+ 31539 5b99 00 .byte 0x0
+ 31540 5b9a 00 .byte 0x0
+ 31541 5b9b 35 .uleb128 0x35
+ 31542 5b9c 210F0000 .long 0xf21
+ 31543 5ba0 00000000 .quad .LBB1982
+ 31543 00000000
+ 31544 5ba8 00000000 .quad .LBE1982
+ 31544 00000000
+ 31545 5bb0 02 .byte 0x2
+ 31546 5bb1 2106 .value 0x621
+ 31547 5bb3 32 .uleb128 0x32
+ 31548 5bb4 330F0000 .long 0xf33
+ 31549 5bb8 03 .byte 0x3
+ 31550 5bb9 91 .byte 0x91
+ 31551 5bba F042 .sleb128 -7824
+ 31552 5bbc 33 .uleb128 0x33
+ 31553 5bbd 00000000 .quad .LBB1983
+ 31553 00000000
+ 31554 5bc5 00000000 .quad .LBE1983
+ 31554 00000000
+ 31555 5bcd 34 .uleb128 0x34
+ 31556 5bce 3F0F0000 .long 0xf3f
+ 31557 5bd2 09 .byte 0x9
+ 31558 5bd3 03 .byte 0x3
+ 31559 5bd4 00000000 .quad mask.7943
+ 31559 00000000
+ 31560 5bdc 35 .uleb128 0x35
+ 31561 5bdd A00D0000 .long 0xda0
+ 31562 5be1 00000000 .quad .LBB1984
+ 31562 00000000
+ 31563 5be9 00000000 .quad .LBE1984
+ 31563 00000000
+ 31564 5bf1 02 .byte 0x2
+ 31565 5bf2 FE04 .value 0x4fe
+ 31566 5bf4 32 .uleb128 0x32
+ 31567 5bf5 BE0D0000 .long 0xdbe
+ 31568 5bf9 03 .byte 0x3
+ 31569 5bfa 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 845
+
+
+ 31570 5bfb 8043 .sleb128 -7808
+ 31571 5bfd 32 .uleb128 0x32
+ 31572 5bfe B20D0000 .long 0xdb2
+ 31573 5c02 03 .byte 0x3
+ 31574 5c03 91 .byte 0x91
+ 31575 5c04 9043 .sleb128 -7792
+ 31576 5c06 35 .uleb128 0x35
+ 31577 5c07 CB0D0000 .long 0xdcb
+ 31578 5c0b 00000000 .quad .LBB1986
+ 31578 00000000
+ 31579 5c13 00000000 .quad .LBE1986
+ 31579 00000000
+ 31580 5c1b 02 .byte 0x2
+ 31581 5c1c 7501 .value 0x175
+ 31582 5c1e 32 .uleb128 0x32
+ 31583 5c1f E90D0000 .long 0xde9
+ 31584 5c23 03 .byte 0x3
+ 31585 5c24 91 .byte 0x91
+ 31586 5c25 A043 .sleb128 -7776
+ 31587 5c27 32 .uleb128 0x32
+ 31588 5c28 DD0D0000 .long 0xddd
+ 31589 5c2c 03 .byte 0x3
+ 31590 5c2d 91 .byte 0x91
+ 31591 5c2e B043 .sleb128 -7760
+ 31592 5c30 00 .byte 0x0
+ 31593 5c31 00 .byte 0x0
+ 31594 5c32 00 .byte 0x0
+ 31595 5c33 00 .byte 0x0
+ 31596 5c34 00 .byte 0x0
+ 31597 5c35 00 .byte 0x0
+ 31598 5c36 31 .uleb128 0x31
+ 31599 5c37 F60E0000 .long 0xef6
+ 31600 5c3b 00000000 .quad .LBB1988
+ 31600 00000000
+ 31601 5c43 00000000 .quad .LBE1988
+ 31601 00000000
+ 31602 5c4b 02 .byte 0x2
+ 31603 5c4c 0007 .value 0x700
+ 31604 5c4e 4B5E0000 .long 0x5e4b
+ 31605 5c52 32 .uleb128 0x32
+ 31606 5c53 080F0000 .long 0xf08
+ 31607 5c57 03 .byte 0x3
+ 31608 5c58 91 .byte 0x91
+ 31609 5c59 C043 .sleb128 -7744
+ 31610 5c5b 33 .uleb128 0x33
+ 31611 5c5c 00000000 .quad .LBB1989
+ 31611 00000000
+ 31612 5c64 00000000 .quad .LBE1989
+ 31612 00000000
+ 31613 5c6c 34 .uleb128 0x34
+ 31614 5c6d 140F0000 .long 0xf14
+ 31615 5c71 04 .byte 0x4
+ 31616 5c72 76 .byte 0x76
+ 31617 5c73 C0BA7F .sleb128 -8896
+ 31618 5c76 31 .uleb128 0x31
+ 31619 5c77 210F0000 .long 0xf21
+ 31620 5c7b 00000000 .quad .LBB1990
+
GAS LISTING /tmp/ccjbMjHD.s page 846
+
+
+ 31620 00000000
+ 31621 5c83 00000000 .quad .LBE1990
+ 31621 00000000
+ 31622 5c8b 02 .byte 0x2
+ 31623 5c8c 1F06 .value 0x61f
+ 31624 5c8e 135D0000 .long 0x5d13
+ 31625 5c92 32 .uleb128 0x32
+ 31626 5c93 330F0000 .long 0xf33
+ 31627 5c97 03 .byte 0x3
+ 31628 5c98 91 .byte 0x91
+ 31629 5c99 D043 .sleb128 -7728
+ 31630 5c9b 33 .uleb128 0x33
+ 31631 5c9c 00000000 .quad .LBB1991
+ 31631 00000000
+ 31632 5ca4 00000000 .quad .LBE1991
+ 31632 00000000
+ 31633 5cac 34 .uleb128 0x34
+ 31634 5cad 3F0F0000 .long 0xf3f
+ 31635 5cb1 09 .byte 0x9
+ 31636 5cb2 03 .byte 0x3
+ 31637 5cb3 00000000 .quad mask.7943
+ 31637 00000000
+ 31638 5cbb 35 .uleb128 0x35
+ 31639 5cbc A00D0000 .long 0xda0
+ 31640 5cc0 00000000 .quad .LBB1992
+ 31640 00000000
+ 31641 5cc8 00000000 .quad .LBE1992
+ 31641 00000000
+ 31642 5cd0 02 .byte 0x2
+ 31643 5cd1 FE04 .value 0x4fe
+ 31644 5cd3 32 .uleb128 0x32
+ 31645 5cd4 BE0D0000 .long 0xdbe
+ 31646 5cd8 03 .byte 0x3
+ 31647 5cd9 91 .byte 0x91
+ 31648 5cda E043 .sleb128 -7712
+ 31649 5cdc 32 .uleb128 0x32
+ 31650 5cdd B20D0000 .long 0xdb2
+ 31651 5ce1 03 .byte 0x3
+ 31652 5ce2 91 .byte 0x91
+ 31653 5ce3 F043 .sleb128 -7696
+ 31654 5ce5 35 .uleb128 0x35
+ 31655 5ce6 CB0D0000 .long 0xdcb
+ 31656 5cea 00000000 .quad .LBB1994
+ 31656 00000000
+ 31657 5cf2 00000000 .quad .LBE1994
+ 31657 00000000
+ 31658 5cfa 02 .byte 0x2
+ 31659 5cfb 7501 .value 0x175
+ 31660 5cfd 32 .uleb128 0x32
+ 31661 5cfe E90D0000 .long 0xde9
+ 31662 5d02 03 .byte 0x3
+ 31663 5d03 91 .byte 0x91
+ 31664 5d04 8044 .sleb128 -7680
+ 31665 5d06 32 .uleb128 0x32
+ 31666 5d07 DD0D0000 .long 0xddd
+ 31667 5d0b 03 .byte 0x3
+ 31668 5d0c 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 847
+
+
+ 31669 5d0d 9044 .sleb128 -7664
+ 31670 5d0f 00 .byte 0x0
+ 31671 5d10 00 .byte 0x0
+ 31672 5d11 00 .byte 0x0
+ 31673 5d12 00 .byte 0x0
+ 31674 5d13 31 .uleb128 0x31
+ 31675 5d14 210F0000 .long 0xf21
+ 31676 5d18 00000000 .quad .LBB1996
+ 31676 00000000
+ 31677 5d20 00000000 .quad .LBE1996
+ 31677 00000000
+ 31678 5d28 02 .byte 0x2
+ 31679 5d29 2006 .value 0x620
+ 31680 5d2b B05D0000 .long 0x5db0
+ 31681 5d2f 32 .uleb128 0x32
+ 31682 5d30 330F0000 .long 0xf33
+ 31683 5d34 03 .byte 0x3
+ 31684 5d35 91 .byte 0x91
+ 31685 5d36 A044 .sleb128 -7648
+ 31686 5d38 33 .uleb128 0x33
+ 31687 5d39 00000000 .quad .LBB1997
+ 31687 00000000
+ 31688 5d41 00000000 .quad .LBE1997
+ 31688 00000000
+ 31689 5d49 34 .uleb128 0x34
+ 31690 5d4a 3F0F0000 .long 0xf3f
+ 31691 5d4e 09 .byte 0x9
+ 31692 5d4f 03 .byte 0x3
+ 31693 5d50 00000000 .quad mask.7943
+ 31693 00000000
+ 31694 5d58 35 .uleb128 0x35
+ 31695 5d59 A00D0000 .long 0xda0
+ 31696 5d5d 00000000 .quad .LBB1998
+ 31696 00000000
+ 31697 5d65 00000000 .quad .LBE1998
+ 31697 00000000
+ 31698 5d6d 02 .byte 0x2
+ 31699 5d6e FE04 .value 0x4fe
+ 31700 5d70 32 .uleb128 0x32
+ 31701 5d71 BE0D0000 .long 0xdbe
+ 31702 5d75 03 .byte 0x3
+ 31703 5d76 91 .byte 0x91
+ 31704 5d77 B044 .sleb128 -7632
+ 31705 5d79 32 .uleb128 0x32
+ 31706 5d7a B20D0000 .long 0xdb2
+ 31707 5d7e 03 .byte 0x3
+ 31708 5d7f 91 .byte 0x91
+ 31709 5d80 C044 .sleb128 -7616
+ 31710 5d82 35 .uleb128 0x35
+ 31711 5d83 CB0D0000 .long 0xdcb
+ 31712 5d87 00000000 .quad .LBB2000
+ 31712 00000000
+ 31713 5d8f 00000000 .quad .LBE2000
+ 31713 00000000
+ 31714 5d97 02 .byte 0x2
+ 31715 5d98 7501 .value 0x175
+ 31716 5d9a 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 848
+
+
+ 31717 5d9b E90D0000 .long 0xde9
+ 31718 5d9f 03 .byte 0x3
+ 31719 5da0 91 .byte 0x91
+ 31720 5da1 D044 .sleb128 -7600
+ 31721 5da3 32 .uleb128 0x32
+ 31722 5da4 DD0D0000 .long 0xddd
+ 31723 5da8 03 .byte 0x3
+ 31724 5da9 91 .byte 0x91
+ 31725 5daa E044 .sleb128 -7584
+ 31726 5dac 00 .byte 0x0
+ 31727 5dad 00 .byte 0x0
+ 31728 5dae 00 .byte 0x0
+ 31729 5daf 00 .byte 0x0
+ 31730 5db0 35 .uleb128 0x35
+ 31731 5db1 210F0000 .long 0xf21
+ 31732 5db5 00000000 .quad .LBB2002
+ 31732 00000000
+ 31733 5dbd 00000000 .quad .LBE2002
+ 31733 00000000
+ 31734 5dc5 02 .byte 0x2
+ 31735 5dc6 2106 .value 0x621
+ 31736 5dc8 32 .uleb128 0x32
+ 31737 5dc9 330F0000 .long 0xf33
+ 31738 5dcd 03 .byte 0x3
+ 31739 5dce 91 .byte 0x91
+ 31740 5dcf F044 .sleb128 -7568
+ 31741 5dd1 33 .uleb128 0x33
+ 31742 5dd2 00000000 .quad .LBB2003
+ 31742 00000000
+ 31743 5dda 00000000 .quad .LBE2003
+ 31743 00000000
+ 31744 5de2 34 .uleb128 0x34
+ 31745 5de3 3F0F0000 .long 0xf3f
+ 31746 5de7 09 .byte 0x9
+ 31747 5de8 03 .byte 0x3
+ 31748 5de9 00000000 .quad mask.7943
+ 31748 00000000
+ 31749 5df1 35 .uleb128 0x35
+ 31750 5df2 A00D0000 .long 0xda0
+ 31751 5df6 00000000 .quad .LBB2004
+ 31751 00000000
+ 31752 5dfe 00000000 .quad .LBE2004
+ 31752 00000000
+ 31753 5e06 02 .byte 0x2
+ 31754 5e07 FE04 .value 0x4fe
+ 31755 5e09 32 .uleb128 0x32
+ 31756 5e0a BE0D0000 .long 0xdbe
+ 31757 5e0e 03 .byte 0x3
+ 31758 5e0f 91 .byte 0x91
+ 31759 5e10 8045 .sleb128 -7552
+ 31760 5e12 32 .uleb128 0x32
+ 31761 5e13 B20D0000 .long 0xdb2
+ 31762 5e17 03 .byte 0x3
+ 31763 5e18 91 .byte 0x91
+ 31764 5e19 9045 .sleb128 -7536
+ 31765 5e1b 35 .uleb128 0x35
+ 31766 5e1c CB0D0000 .long 0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s page 849
+
+
+ 31767 5e20 00000000 .quad .LBB2006
+ 31767 00000000
+ 31768 5e28 00000000 .quad .LBE2006
+ 31768 00000000
+ 31769 5e30 02 .byte 0x2
+ 31770 5e31 7501 .value 0x175
+ 31771 5e33 32 .uleb128 0x32
+ 31772 5e34 E90D0000 .long 0xde9
+ 31773 5e38 03 .byte 0x3
+ 31774 5e39 91 .byte 0x91
+ 31775 5e3a A045 .sleb128 -7520
+ 31776 5e3c 32 .uleb128 0x32
+ 31777 5e3d DD0D0000 .long 0xddd
+ 31778 5e41 03 .byte 0x3
+ 31779 5e42 91 .byte 0x91
+ 31780 5e43 B045 .sleb128 -7504
+ 31781 5e45 00 .byte 0x0
+ 31782 5e46 00 .byte 0x0
+ 31783 5e47 00 .byte 0x0
+ 31784 5e48 00 .byte 0x0
+ 31785 5e49 00 .byte 0x0
+ 31786 5e4a 00 .byte 0x0
+ 31787 5e4b 31 .uleb128 0x31
+ 31788 5e4c AC0E0000 .long 0xeac
+ 31789 5e50 00000000 .quad .LBB2008
+ 31789 00000000
+ 31790 5e58 00000000 .quad .LBE2008
+ 31790 00000000
+ 31791 5e60 02 .byte 0x2
+ 31792 5e61 0107 .value 0x701
+ 31793 5e63 9C5E0000 .long 0x5e9c
+ 31794 5e67 32 .uleb128 0x32
+ 31795 5e68 BE0E0000 .long 0xebe
+ 31796 5e6c 03 .byte 0x3
+ 31797 5e6d 91 .byte 0x91
+ 31798 5e6e C045 .sleb128 -7488
+ 31799 5e70 35 .uleb128 0x35
+ 31800 5e71 CB0E0000 .long 0xecb
+ 31801 5e75 00000000 .quad .LBB2010
+ 31801 00000000
+ 31802 5e7d 00000000 .quad .LBE2010
+ 31802 00000000
+ 31803 5e85 02 .byte 0x2
+ 31804 5e86 4905 .value 0x549
+ 31805 5e88 32 .uleb128 0x32
+ 31806 5e89 E90E0000 .long 0xee9
+ 31807 5e8d 03 .byte 0x3
+ 31808 5e8e 91 .byte 0x91
+ 31809 5e8f DC45 .sleb128 -7460
+ 31810 5e91 32 .uleb128 0x32
+ 31811 5e92 DD0E0000 .long 0xedd
+ 31812 5e96 03 .byte 0x3
+ 31813 5e97 91 .byte 0x91
+ 31814 5e98 E045 .sleb128 -7456
+ 31815 5e9a 00 .byte 0x0
+ 31816 5e9b 00 .byte 0x0
+ 31817 5e9c 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 850
+
+
+ 31818 5e9d 0F570000 .long 0x570f
+ 31819 5ea1 00000000 .quad .LBB2012
+ 31819 00000000
+ 31820 5ea9 00000000 .quad .LBE2012
+ 31820 00000000
+ 31821 5eb1 02 .byte 0x2
+ 31822 5eb2 0307 .value 0x703
+ 31823 5eb4 FF5E0000 .long 0x5eff
+ 31824 5eb8 32 .uleb128 0x32
+ 31825 5eb9 2B570000 .long 0x572b
+ 31826 5ebd 03 .byte 0x3
+ 31827 5ebe 91 .byte 0x91
+ 31828 5ebf F045 .sleb128 -7440
+ 31829 5ec1 32 .uleb128 0x32
+ 31830 5ec2 21570000 .long 0x5721
+ 31831 5ec6 03 .byte 0x3
+ 31832 5ec7 91 .byte 0x91
+ 31833 5ec8 8046 .sleb128 -7424
+ 31834 5eca 35 .uleb128 0x35
+ 31835 5ecb 36570000 .long 0x5736
+ 31836 5ecf 00000000 .quad .LBB2014
+ 31836 00000000
+ 31837 5ed7 00000000 .quad .LBE2014
+ 31837 00000000
+ 31838 5edf 02 .byte 0x2
+ 31839 5ee0 BA05 .value 0x5ba
+ 31840 5ee2 32 .uleb128 0x32
+ 31841 5ee3 60570000 .long 0x5760
+ 31842 5ee7 03 .byte 0x3
+ 31843 5ee8 91 .byte 0x91
+ 31844 5ee9 9C46 .sleb128 -7396
+ 31845 5eeb 32 .uleb128 0x32
+ 31846 5eec 54570000 .long 0x5754
+ 31847 5ef0 03 .byte 0x3
+ 31848 5ef1 91 .byte 0x91
+ 31849 5ef2 A046 .sleb128 -7392
+ 31850 5ef4 32 .uleb128 0x32
+ 31851 5ef5 48570000 .long 0x5748
+ 31852 5ef9 03 .byte 0x3
+ 31853 5efa 91 .byte 0x91
+ 31854 5efb B046 .sleb128 -7376
+ 31855 5efd 00 .byte 0x0
+ 31856 5efe 00 .byte 0x0
+ 31857 5eff 31 .uleb128 0x31
+ 31858 5f00 6D570000 .long 0x576d
+ 31859 5f04 00000000 .quad .LBB2016
+ 31859 00000000
+ 31860 5f0c 00000000 .quad .LBE2016
+ 31860 00000000
+ 31861 5f14 02 .byte 0x2
+ 31862 5f15 0607 .value 0x706
+ 31863 5f17 625F0000 .long 0x5f62
+ 31864 5f1b 32 .uleb128 0x32
+ 31865 5f1c 89570000 .long 0x5789
+ 31866 5f20 03 .byte 0x3
+ 31867 5f21 91 .byte 0x91
+ 31868 5f22 C046 .sleb128 -7360
+
GAS LISTING /tmp/ccjbMjHD.s page 851
+
+
+ 31869 5f24 32 .uleb128 0x32
+ 31870 5f25 7F570000 .long 0x577f
+ 31871 5f29 03 .byte 0x3
+ 31872 5f2a 91 .byte 0x91
+ 31873 5f2b D046 .sleb128 -7344
+ 31874 5f2d 35 .uleb128 0x35
+ 31875 5f2e 36570000 .long 0x5736
+ 31876 5f32 00000000 .quad .LBB2018
+ 31876 00000000
+ 31877 5f3a 00000000 .quad .LBE2018
+ 31877 00000000
+ 31878 5f42 02 .byte 0x2
+ 31879 5f43 DA05 .value 0x5da
+ 31880 5f45 32 .uleb128 0x32
+ 31881 5f46 60570000 .long 0x5760
+ 31882 5f4a 03 .byte 0x3
+ 31883 5f4b 91 .byte 0x91
+ 31884 5f4c EC46 .sleb128 -7316
+ 31885 5f4e 32 .uleb128 0x32
+ 31886 5f4f 54570000 .long 0x5754
+ 31887 5f53 03 .byte 0x3
+ 31888 5f54 91 .byte 0x91
+ 31889 5f55 F046 .sleb128 -7312
+ 31890 5f57 32 .uleb128 0x32
+ 31891 5f58 48570000 .long 0x5748
+ 31892 5f5c 03 .byte 0x3
+ 31893 5f5d 91 .byte 0x91
+ 31894 5f5e 8047 .sleb128 -7296
+ 31895 5f60 00 .byte 0x0
+ 31896 5f61 00 .byte 0x0
+ 31897 5f62 31 .uleb128 0x31
+ 31898 5f63 F60E0000 .long 0xef6
+ 31899 5f67 00000000 .quad .LBB2020
+ 31899 00000000
+ 31900 5f6f 00000000 .quad .LBE2020
+ 31900 00000000
+ 31901 5f77 02 .byte 0x2
+ 31902 5f78 0A07 .value 0x70a
+ 31903 5f7a 77610000 .long 0x6177
+ 31904 5f7e 32 .uleb128 0x32
+ 31905 5f7f 080F0000 .long 0xf08
+ 31906 5f83 03 .byte 0x3
+ 31907 5f84 91 .byte 0x91
+ 31908 5f85 9047 .sleb128 -7280
+ 31909 5f87 33 .uleb128 0x33
+ 31910 5f88 00000000 .quad .LBB2021
+ 31910 00000000
+ 31911 5f90 00000000 .quad .LBE2021
+ 31911 00000000
+ 31912 5f98 34 .uleb128 0x34
+ 31913 5f99 140F0000 .long 0xf14
+ 31914 5f9d 04 .byte 0x4
+ 31915 5f9e 76 .byte 0x76
+ 31916 5f9f D0BA7F .sleb128 -8880
+ 31917 5fa2 31 .uleb128 0x31
+ 31918 5fa3 210F0000 .long 0xf21
+ 31919 5fa7 00000000 .quad .LBB2022
+
GAS LISTING /tmp/ccjbMjHD.s page 852
+
+
+ 31919 00000000
+ 31920 5faf 00000000 .quad .LBE2022
+ 31920 00000000
+ 31921 5fb7 02 .byte 0x2
+ 31922 5fb8 1F06 .value 0x61f
+ 31923 5fba 3F600000 .long 0x603f
+ 31924 5fbe 32 .uleb128 0x32
+ 31925 5fbf 330F0000 .long 0xf33
+ 31926 5fc3 03 .byte 0x3
+ 31927 5fc4 91 .byte 0x91
+ 31928 5fc5 A047 .sleb128 -7264
+ 31929 5fc7 33 .uleb128 0x33
+ 31930 5fc8 00000000 .quad .LBB2023
+ 31930 00000000
+ 31931 5fd0 00000000 .quad .LBE2023
+ 31931 00000000
+ 31932 5fd8 34 .uleb128 0x34
+ 31933 5fd9 3F0F0000 .long 0xf3f
+ 31934 5fdd 09 .byte 0x9
+ 31935 5fde 03 .byte 0x3
+ 31936 5fdf 00000000 .quad mask.7943
+ 31936 00000000
+ 31937 5fe7 35 .uleb128 0x35
+ 31938 5fe8 A00D0000 .long 0xda0
+ 31939 5fec 00000000 .quad .LBB2024
+ 31939 00000000
+ 31940 5ff4 00000000 .quad .LBE2024
+ 31940 00000000
+ 31941 5ffc 02 .byte 0x2
+ 31942 5ffd FE04 .value 0x4fe
+ 31943 5fff 32 .uleb128 0x32
+ 31944 6000 BE0D0000 .long 0xdbe
+ 31945 6004 03 .byte 0x3
+ 31946 6005 91 .byte 0x91
+ 31947 6006 B047 .sleb128 -7248
+ 31948 6008 32 .uleb128 0x32
+ 31949 6009 B20D0000 .long 0xdb2
+ 31950 600d 03 .byte 0x3
+ 31951 600e 91 .byte 0x91
+ 31952 600f C047 .sleb128 -7232
+ 31953 6011 35 .uleb128 0x35
+ 31954 6012 CB0D0000 .long 0xdcb
+ 31955 6016 00000000 .quad .LBB2026
+ 31955 00000000
+ 31956 601e 00000000 .quad .LBE2026
+ 31956 00000000
+ 31957 6026 02 .byte 0x2
+ 31958 6027 7501 .value 0x175
+ 31959 6029 32 .uleb128 0x32
+ 31960 602a E90D0000 .long 0xde9
+ 31961 602e 03 .byte 0x3
+ 31962 602f 91 .byte 0x91
+ 31963 6030 D047 .sleb128 -7216
+ 31964 6032 32 .uleb128 0x32
+ 31965 6033 DD0D0000 .long 0xddd
+ 31966 6037 03 .byte 0x3
+ 31967 6038 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 853
+
+
+ 31968 6039 E047 .sleb128 -7200
+ 31969 603b 00 .byte 0x0
+ 31970 603c 00 .byte 0x0
+ 31971 603d 00 .byte 0x0
+ 31972 603e 00 .byte 0x0
+ 31973 603f 31 .uleb128 0x31
+ 31974 6040 210F0000 .long 0xf21
+ 31975 6044 00000000 .quad .LBB2028
+ 31975 00000000
+ 31976 604c 00000000 .quad .LBE2028
+ 31976 00000000
+ 31977 6054 02 .byte 0x2
+ 31978 6055 2006 .value 0x620
+ 31979 6057 DC600000 .long 0x60dc
+ 31980 605b 32 .uleb128 0x32
+ 31981 605c 330F0000 .long 0xf33
+ 31982 6060 03 .byte 0x3
+ 31983 6061 91 .byte 0x91
+ 31984 6062 F047 .sleb128 -7184
+ 31985 6064 33 .uleb128 0x33
+ 31986 6065 00000000 .quad .LBB2029
+ 31986 00000000
+ 31987 606d 00000000 .quad .LBE2029
+ 31987 00000000
+ 31988 6075 34 .uleb128 0x34
+ 31989 6076 3F0F0000 .long 0xf3f
+ 31990 607a 09 .byte 0x9
+ 31991 607b 03 .byte 0x3
+ 31992 607c 00000000 .quad mask.7943
+ 31992 00000000
+ 31993 6084 35 .uleb128 0x35
+ 31994 6085 A00D0000 .long 0xda0
+ 31995 6089 00000000 .quad .LBB2030
+ 31995 00000000
+ 31996 6091 00000000 .quad .LBE2030
+ 31996 00000000
+ 31997 6099 02 .byte 0x2
+ 31998 609a FE04 .value 0x4fe
+ 31999 609c 32 .uleb128 0x32
+ 32000 609d BE0D0000 .long 0xdbe
+ 32001 60a1 03 .byte 0x3
+ 32002 60a2 91 .byte 0x91
+ 32003 60a3 8048 .sleb128 -7168
+ 32004 60a5 32 .uleb128 0x32
+ 32005 60a6 B20D0000 .long 0xdb2
+ 32006 60aa 03 .byte 0x3
+ 32007 60ab 91 .byte 0x91
+ 32008 60ac 9048 .sleb128 -7152
+ 32009 60ae 35 .uleb128 0x35
+ 32010 60af CB0D0000 .long 0xdcb
+ 32011 60b3 00000000 .quad .LBB2032
+ 32011 00000000
+ 32012 60bb 00000000 .quad .LBE2032
+ 32012 00000000
+ 32013 60c3 02 .byte 0x2
+ 32014 60c4 7501 .value 0x175
+ 32015 60c6 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 854
+
+
+ 32016 60c7 E90D0000 .long 0xde9
+ 32017 60cb 03 .byte 0x3
+ 32018 60cc 91 .byte 0x91
+ 32019 60cd A048 .sleb128 -7136
+ 32020 60cf 32 .uleb128 0x32
+ 32021 60d0 DD0D0000 .long 0xddd
+ 32022 60d4 03 .byte 0x3
+ 32023 60d5 91 .byte 0x91
+ 32024 60d6 B048 .sleb128 -7120
+ 32025 60d8 00 .byte 0x0
+ 32026 60d9 00 .byte 0x0
+ 32027 60da 00 .byte 0x0
+ 32028 60db 00 .byte 0x0
+ 32029 60dc 35 .uleb128 0x35
+ 32030 60dd 210F0000 .long 0xf21
+ 32031 60e1 00000000 .quad .LBB2034
+ 32031 00000000
+ 32032 60e9 00000000 .quad .LBE2034
+ 32032 00000000
+ 32033 60f1 02 .byte 0x2
+ 32034 60f2 2106 .value 0x621
+ 32035 60f4 32 .uleb128 0x32
+ 32036 60f5 330F0000 .long 0xf33
+ 32037 60f9 03 .byte 0x3
+ 32038 60fa 91 .byte 0x91
+ 32039 60fb C048 .sleb128 -7104
+ 32040 60fd 33 .uleb128 0x33
+ 32041 60fe 00000000 .quad .LBB2035
+ 32041 00000000
+ 32042 6106 00000000 .quad .LBE2035
+ 32042 00000000
+ 32043 610e 34 .uleb128 0x34
+ 32044 610f 3F0F0000 .long 0xf3f
+ 32045 6113 09 .byte 0x9
+ 32046 6114 03 .byte 0x3
+ 32047 6115 00000000 .quad mask.7943
+ 32047 00000000
+ 32048 611d 35 .uleb128 0x35
+ 32049 611e A00D0000 .long 0xda0
+ 32050 6122 00000000 .quad .LBB2036
+ 32050 00000000
+ 32051 612a 00000000 .quad .LBE2036
+ 32051 00000000
+ 32052 6132 02 .byte 0x2
+ 32053 6133 FE04 .value 0x4fe
+ 32054 6135 32 .uleb128 0x32
+ 32055 6136 BE0D0000 .long 0xdbe
+ 32056 613a 03 .byte 0x3
+ 32057 613b 91 .byte 0x91
+ 32058 613c D048 .sleb128 -7088
+ 32059 613e 32 .uleb128 0x32
+ 32060 613f B20D0000 .long 0xdb2
+ 32061 6143 03 .byte 0x3
+ 32062 6144 91 .byte 0x91
+ 32063 6145 E048 .sleb128 -7072
+ 32064 6147 35 .uleb128 0x35
+ 32065 6148 CB0D0000 .long 0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s page 855
+
+
+ 32066 614c 00000000 .quad .LBB2038
+ 32066 00000000
+ 32067 6154 00000000 .quad .LBE2038
+ 32067 00000000
+ 32068 615c 02 .byte 0x2
+ 32069 615d 7501 .value 0x175
+ 32070 615f 32 .uleb128 0x32
+ 32071 6160 E90D0000 .long 0xde9
+ 32072 6164 03 .byte 0x3
+ 32073 6165 91 .byte 0x91
+ 32074 6166 F048 .sleb128 -7056
+ 32075 6168 32 .uleb128 0x32
+ 32076 6169 DD0D0000 .long 0xddd
+ 32077 616d 03 .byte 0x3
+ 32078 616e 91 .byte 0x91
+ 32079 616f 8049 .sleb128 -7040
+ 32080 6171 00 .byte 0x0
+ 32081 6172 00 .byte 0x0
+ 32082 6173 00 .byte 0x0
+ 32083 6174 00 .byte 0x0
+ 32084 6175 00 .byte 0x0
+ 32085 6176 00 .byte 0x0
+ 32086 6177 31 .uleb128 0x31
+ 32087 6178 F60E0000 .long 0xef6
+ 32088 617c 00000000 .quad .LBB2040
+ 32088 00000000
+ 32089 6184 00000000 .quad .LBE2040
+ 32089 00000000
+ 32090 618c 02 .byte 0x2
+ 32091 618d 0B07 .value 0x70b
+ 32092 618f 8C630000 .long 0x638c
+ 32093 6193 32 .uleb128 0x32
+ 32094 6194 080F0000 .long 0xf08
+ 32095 6198 03 .byte 0x3
+ 32096 6199 91 .byte 0x91
+ 32097 619a 9049 .sleb128 -7024
+ 32098 619c 33 .uleb128 0x33
+ 32099 619d 00000000 .quad .LBB2041
+ 32099 00000000
+ 32100 61a5 00000000 .quad .LBE2041
+ 32100 00000000
+ 32101 61ad 34 .uleb128 0x34
+ 32102 61ae 140F0000 .long 0xf14
+ 32103 61b2 04 .byte 0x4
+ 32104 61b3 76 .byte 0x76
+ 32105 61b4 E0BA7F .sleb128 -8864
+ 32106 61b7 31 .uleb128 0x31
+ 32107 61b8 210F0000 .long 0xf21
+ 32108 61bc 00000000 .quad .LBB2042
+ 32108 00000000
+ 32109 61c4 00000000 .quad .LBE2042
+ 32109 00000000
+ 32110 61cc 02 .byte 0x2
+ 32111 61cd 1F06 .value 0x61f
+ 32112 61cf 54620000 .long 0x6254
+ 32113 61d3 32 .uleb128 0x32
+ 32114 61d4 330F0000 .long 0xf33
+
GAS LISTING /tmp/ccjbMjHD.s page 856
+
+
+ 32115 61d8 03 .byte 0x3
+ 32116 61d9 91 .byte 0x91
+ 32117 61da A049 .sleb128 -7008
+ 32118 61dc 33 .uleb128 0x33
+ 32119 61dd 00000000 .quad .LBB2043
+ 32119 00000000
+ 32120 61e5 00000000 .quad .LBE2043
+ 32120 00000000
+ 32121 61ed 34 .uleb128 0x34
+ 32122 61ee 3F0F0000 .long 0xf3f
+ 32123 61f2 09 .byte 0x9
+ 32124 61f3 03 .byte 0x3
+ 32125 61f4 00000000 .quad mask.7943
+ 32125 00000000
+ 32126 61fc 35 .uleb128 0x35
+ 32127 61fd A00D0000 .long 0xda0
+ 32128 6201 00000000 .quad .LBB2044
+ 32128 00000000
+ 32129 6209 00000000 .quad .LBE2044
+ 32129 00000000
+ 32130 6211 02 .byte 0x2
+ 32131 6212 FE04 .value 0x4fe
+ 32132 6214 32 .uleb128 0x32
+ 32133 6215 BE0D0000 .long 0xdbe
+ 32134 6219 03 .byte 0x3
+ 32135 621a 91 .byte 0x91
+ 32136 621b B049 .sleb128 -6992
+ 32137 621d 32 .uleb128 0x32
+ 32138 621e B20D0000 .long 0xdb2
+ 32139 6222 03 .byte 0x3
+ 32140 6223 91 .byte 0x91
+ 32141 6224 C049 .sleb128 -6976
+ 32142 6226 35 .uleb128 0x35
+ 32143 6227 CB0D0000 .long 0xdcb
+ 32144 622b 00000000 .quad .LBB2046
+ 32144 00000000
+ 32145 6233 00000000 .quad .LBE2046
+ 32145 00000000
+ 32146 623b 02 .byte 0x2
+ 32147 623c 7501 .value 0x175
+ 32148 623e 32 .uleb128 0x32
+ 32149 623f E90D0000 .long 0xde9
+ 32150 6243 03 .byte 0x3
+ 32151 6244 91 .byte 0x91
+ 32152 6245 D049 .sleb128 -6960
+ 32153 6247 32 .uleb128 0x32
+ 32154 6248 DD0D0000 .long 0xddd
+ 32155 624c 03 .byte 0x3
+ 32156 624d 91 .byte 0x91
+ 32157 624e E049 .sleb128 -6944
+ 32158 6250 00 .byte 0x0
+ 32159 6251 00 .byte 0x0
+ 32160 6252 00 .byte 0x0
+ 32161 6253 00 .byte 0x0
+ 32162 6254 31 .uleb128 0x31
+ 32163 6255 210F0000 .long 0xf21
+ 32164 6259 00000000 .quad .LBB2048
+
GAS LISTING /tmp/ccjbMjHD.s page 857
+
+
+ 32164 00000000
+ 32165 6261 00000000 .quad .LBE2048
+ 32165 00000000
+ 32166 6269 02 .byte 0x2
+ 32167 626a 2006 .value 0x620
+ 32168 626c F1620000 .long 0x62f1
+ 32169 6270 32 .uleb128 0x32
+ 32170 6271 330F0000 .long 0xf33
+ 32171 6275 03 .byte 0x3
+ 32172 6276 91 .byte 0x91
+ 32173 6277 F049 .sleb128 -6928
+ 32174 6279 33 .uleb128 0x33
+ 32175 627a 00000000 .quad .LBB2049
+ 32175 00000000
+ 32176 6282 00000000 .quad .LBE2049
+ 32176 00000000
+ 32177 628a 34 .uleb128 0x34
+ 32178 628b 3F0F0000 .long 0xf3f
+ 32179 628f 09 .byte 0x9
+ 32180 6290 03 .byte 0x3
+ 32181 6291 00000000 .quad mask.7943
+ 32181 00000000
+ 32182 6299 35 .uleb128 0x35
+ 32183 629a A00D0000 .long 0xda0
+ 32184 629e 00000000 .quad .LBB2050
+ 32184 00000000
+ 32185 62a6 00000000 .quad .LBE2050
+ 32185 00000000
+ 32186 62ae 02 .byte 0x2
+ 32187 62af FE04 .value 0x4fe
+ 32188 62b1 32 .uleb128 0x32
+ 32189 62b2 BE0D0000 .long 0xdbe
+ 32190 62b6 03 .byte 0x3
+ 32191 62b7 91 .byte 0x91
+ 32192 62b8 804A .sleb128 -6912
+ 32193 62ba 32 .uleb128 0x32
+ 32194 62bb B20D0000 .long 0xdb2
+ 32195 62bf 03 .byte 0x3
+ 32196 62c0 91 .byte 0x91
+ 32197 62c1 904A .sleb128 -6896
+ 32198 62c3 35 .uleb128 0x35
+ 32199 62c4 CB0D0000 .long 0xdcb
+ 32200 62c8 00000000 .quad .LBB2052
+ 32200 00000000
+ 32201 62d0 00000000 .quad .LBE2052
+ 32201 00000000
+ 32202 62d8 02 .byte 0x2
+ 32203 62d9 7501 .value 0x175
+ 32204 62db 32 .uleb128 0x32
+ 32205 62dc E90D0000 .long 0xde9
+ 32206 62e0 03 .byte 0x3
+ 32207 62e1 91 .byte 0x91
+ 32208 62e2 A04A .sleb128 -6880
+ 32209 62e4 32 .uleb128 0x32
+ 32210 62e5 DD0D0000 .long 0xddd
+ 32211 62e9 03 .byte 0x3
+ 32212 62ea 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 858
+
+
+ 32213 62eb B04A .sleb128 -6864
+ 32214 62ed 00 .byte 0x0
+ 32215 62ee 00 .byte 0x0
+ 32216 62ef 00 .byte 0x0
+ 32217 62f0 00 .byte 0x0
+ 32218 62f1 35 .uleb128 0x35
+ 32219 62f2 210F0000 .long 0xf21
+ 32220 62f6 00000000 .quad .LBB2054
+ 32220 00000000
+ 32221 62fe 00000000 .quad .LBE2054
+ 32221 00000000
+ 32222 6306 02 .byte 0x2
+ 32223 6307 2106 .value 0x621
+ 32224 6309 32 .uleb128 0x32
+ 32225 630a 330F0000 .long 0xf33
+ 32226 630e 03 .byte 0x3
+ 32227 630f 91 .byte 0x91
+ 32228 6310 C04A .sleb128 -6848
+ 32229 6312 33 .uleb128 0x33
+ 32230 6313 00000000 .quad .LBB2055
+ 32230 00000000
+ 32231 631b 00000000 .quad .LBE2055
+ 32231 00000000
+ 32232 6323 34 .uleb128 0x34
+ 32233 6324 3F0F0000 .long 0xf3f
+ 32234 6328 09 .byte 0x9
+ 32235 6329 03 .byte 0x3
+ 32236 632a 00000000 .quad mask.7943
+ 32236 00000000
+ 32237 6332 35 .uleb128 0x35
+ 32238 6333 A00D0000 .long 0xda0
+ 32239 6337 00000000 .quad .LBB2056
+ 32239 00000000
+ 32240 633f 00000000 .quad .LBE2056
+ 32240 00000000
+ 32241 6347 02 .byte 0x2
+ 32242 6348 FE04 .value 0x4fe
+ 32243 634a 32 .uleb128 0x32
+ 32244 634b BE0D0000 .long 0xdbe
+ 32245 634f 03 .byte 0x3
+ 32246 6350 91 .byte 0x91
+ 32247 6351 D04A .sleb128 -6832
+ 32248 6353 32 .uleb128 0x32
+ 32249 6354 B20D0000 .long 0xdb2
+ 32250 6358 03 .byte 0x3
+ 32251 6359 91 .byte 0x91
+ 32252 635a E04A .sleb128 -6816
+ 32253 635c 35 .uleb128 0x35
+ 32254 635d CB0D0000 .long 0xdcb
+ 32255 6361 00000000 .quad .LBB2058
+ 32255 00000000
+ 32256 6369 00000000 .quad .LBE2058
+ 32256 00000000
+ 32257 6371 02 .byte 0x2
+ 32258 6372 7501 .value 0x175
+ 32259 6374 32 .uleb128 0x32
+ 32260 6375 E90D0000 .long 0xde9
+
GAS LISTING /tmp/ccjbMjHD.s page 859
+
+
+ 32261 6379 03 .byte 0x3
+ 32262 637a 91 .byte 0x91
+ 32263 637b F04A .sleb128 -6800
+ 32264 637d 32 .uleb128 0x32
+ 32265 637e DD0D0000 .long 0xddd
+ 32266 6382 03 .byte 0x3
+ 32267 6383 91 .byte 0x91
+ 32268 6384 804B .sleb128 -6784
+ 32269 6386 00 .byte 0x0
+ 32270 6387 00 .byte 0x0
+ 32271 6388 00 .byte 0x0
+ 32272 6389 00 .byte 0x0
+ 32273 638a 00 .byte 0x0
+ 32274 638b 00 .byte 0x0
+ 32275 638c 31 .uleb128 0x31
+ 32276 638d D50B0000 .long 0xbd5
+ 32277 6391 00000000 .quad .LBB2060
+ 32277 00000000
+ 32278 6399 00000000 .quad .LBE2060
+ 32278 00000000
+ 32279 63a1 02 .byte 0x2
+ 32280 63a2 0C07 .value 0x70c
+ 32281 63a4 6F680000 .long 0x686f
+ 32282 63a8 32 .uleb128 0x32
+ 32283 63a9 F30B0000 .long 0xbf3
+ 32284 63ad 03 .byte 0x3
+ 32285 63ae 91 .byte 0x91
+ 32286 63af 9C4B .sleb128 -6756
+ 32287 63b1 32 .uleb128 0x32
+ 32288 63b2 E70B0000 .long 0xbe7
+ 32289 63b6 03 .byte 0x3
+ 32290 63b7 91 .byte 0x91
+ 32291 63b8 A04B .sleb128 -6752
+ 32292 63ba 33 .uleb128 0x33
+ 32293 63bb 00000000 .quad .LBB2061
+ 32293 00000000
+ 32294 63c3 00000000 .quad .LBE2061
+ 32294 00000000
+ 32295 63cb 34 .uleb128 0x34
+ 32296 63cc FF0B0000 .long 0xbff
+ 32297 63d0 04 .byte 0x4
+ 32298 63d1 76 .byte 0x76
+ 32299 63d2 80BB7F .sleb128 -8832
+ 32300 63d5 34 .uleb128 0x34
+ 32301 63d6 0B0C0000 .long 0xc0b
+ 32302 63da 04 .byte 0x4
+ 32303 63db 76 .byte 0x76
+ 32304 63dc F0BA7F .sleb128 -8848
+ 32305 63df 31 .uleb128 0x31
+ 32306 63e0 540C0000 .long 0xc54
+ 32307 63e4 00000000 .quad .LBB2062
+ 32307 00000000
+ 32308 63ec 00000000 .quad .LBE2062
+ 32308 00000000
+ 32309 63f4 02 .byte 0x2
+ 32310 63f5 9106 .value 0x691
+ 32311 63f7 4B640000 .long 0x644b
+
GAS LISTING /tmp/ccjbMjHD.s page 860
+
+
+ 32312 63fb 32 .uleb128 0x32
+ 32313 63fc 7E0C0000 .long 0xc7e
+ 32314 6400 03 .byte 0x3
+ 32315 6401 91 .byte 0x91
+ 32316 6402 B84B .sleb128 -6728
+ 32317 6404 32 .uleb128 0x32
+ 32318 6405 720C0000 .long 0xc72
+ 32319 6409 03 .byte 0x3
+ 32320 640a 91 .byte 0x91
+ 32321 640b BC4B .sleb128 -6724
+ 32322 640d 32 .uleb128 0x32
+ 32323 640e 660C0000 .long 0xc66
+ 32324 6412 03 .byte 0x3
+ 32325 6413 91 .byte 0x91
+ 32326 6414 C04B .sleb128 -6720
+ 32327 6416 35 .uleb128 0x35
+ 32328 6417 8B0C0000 .long 0xc8b
+ 32329 641b 00000000 .quad .LBB2064
+ 32329 00000000
+ 32330 6423 00000000 .quad .LBE2064
+ 32330 00000000
+ 32331 642b 02 .byte 0x2
+ 32332 642c 0702 .value 0x207
+ 32333 642e 32 .uleb128 0x32
+ 32334 642f B40C0000 .long 0xcb4
+ 32335 6433 03 .byte 0x3
+ 32336 6434 91 .byte 0x91
+ 32337 6435 D84B .sleb128 -6696
+ 32338 6437 32 .uleb128 0x32
+ 32339 6438 A90C0000 .long 0xca9
+ 32340 643c 03 .byte 0x3
+ 32341 643d 91 .byte 0x91
+ 32342 643e DC4B .sleb128 -6692
+ 32343 6440 32 .uleb128 0x32
+ 32344 6441 9D0C0000 .long 0xc9d
+ 32345 6445 03 .byte 0x3
+ 32346 6446 91 .byte 0x91
+ 32347 6447 E04B .sleb128 -6688
+ 32348 6449 00 .byte 0x0
+ 32349 644a 00 .byte 0x0
+ 32350 644b 31 .uleb128 0x31
+ 32351 644c C10C0000 .long 0xcc1
+ 32352 6450 00000000 .quad .LBB2066
+ 32352 00000000
+ 32353 6458 00000000 .quad .LBE2066
+ 32353 00000000
+ 32354 6460 02 .byte 0x2
+ 32355 6461 9206 .value 0x692
+ 32356 6463 D4660000 .long 0x66d4
+ 32357 6467 32 .uleb128 0x32
+ 32358 6468 D30C0000 .long 0xcd3
+ 32359 646c 03 .byte 0x3
+ 32360 646d 91 .byte 0x91
+ 32361 646e F04B .sleb128 -6672
+ 32362 6470 35 .uleb128 0x35
+ 32363 6471 E00C0000 .long 0xce0
+ 32364 6475 00000000 .quad .LBB2068
+
GAS LISTING /tmp/ccjbMjHD.s page 861
+
+
+ 32364 00000000
+ 32365 647d 00000000 .quad .LBE2068
+ 32365 00000000
+ 32366 6485 02 .byte 0x2
+ 32367 6486 7D03 .value 0x37d
+ 32368 6488 32 .uleb128 0x32
+ 32369 6489 FE0C0000 .long 0xcfe
+ 32370 648d 03 .byte 0x3
+ 32371 648e 91 .byte 0x91
+ 32372 648f 884C .sleb128 -6648
+ 32373 6491 32 .uleb128 0x32
+ 32374 6492 F20C0000 .long 0xcf2
+ 32375 6496 03 .byte 0x3
+ 32376 6497 91 .byte 0x91
+ 32377 6498 904C .sleb128 -6640
+ 32378 649a 33 .uleb128 0x33
+ 32379 649b 00000000 .quad .LBB2069
+ 32379 00000000
+ 32380 64a3 00000000 .quad .LBE2069
+ 32380 00000000
+ 32381 64ab 34 .uleb128 0x34
+ 32382 64ac 0A0D0000 .long 0xd0a
+ 32383 64b0 03 .byte 0x3
+ 32384 64b1 91 .byte 0x91
+ 32385 64b2 E04C .sleb128 -6560
+ 32386 64b4 34 .uleb128 0x34
+ 32387 64b5 150D0000 .long 0xd15
+ 32388 64b9 03 .byte 0x3
+ 32389 64ba 91 .byte 0x91
+ 32390 64bb D04C .sleb128 -6576
+ 32391 64bd 34 .uleb128 0x34
+ 32392 64be 200D0000 .long 0xd20
+ 32393 64c2 03 .byte 0x3
+ 32394 64c3 91 .byte 0x91
+ 32395 64c4 C04C .sleb128 -6592
+ 32396 64c6 34 .uleb128 0x34
+ 32397 64c7 2C0D0000 .long 0xd2c
+ 32398 64cb 03 .byte 0x3
+ 32399 64cc 91 .byte 0x91
+ 32400 64cd B04C .sleb128 -6608
+ 32401 64cf 34 .uleb128 0x34
+ 32402 64d0 380D0000 .long 0xd38
+ 32403 64d4 03 .byte 0x3
+ 32404 64d5 91 .byte 0x91
+ 32405 64d6 AC4C .sleb128 -6612
+ 32406 64d8 31 .uleb128 0x31
+ 32407 64d9 4F0D0000 .long 0xd4f
+ 32408 64dd 00000000 .quad .LBB2070
+ 32408 00000000
+ 32409 64e5 00000000 .quad .LBE2070
+ 32409 00000000
+ 32410 64ed 02 .byte 0x2
+ 32411 64ee 5603 .value 0x356
+ 32412 64f0 07650000 .long 0x6507
+ 32413 64f4 32 .uleb128 0x32
+ 32414 64f5 6A0D0000 .long 0xd6a
+ 32415 64f9 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 862
+
+
+ 32416 64fa 91 .byte 0x91
+ 32417 64fb F04C .sleb128 -6544
+ 32418 64fd 32 .uleb128 0x32
+ 32419 64fe 600D0000 .long 0xd60
+ 32420 6502 03 .byte 0x3
+ 32421 6503 91 .byte 0x91
+ 32422 6504 804D .sleb128 -6528
+ 32423 6506 00 .byte 0x0
+ 32424 6507 31 .uleb128 0x31
+ 32425 6508 750D0000 .long 0xd75
+ 32426 650c 00000000 .quad .LBB2072
+ 32426 00000000
+ 32427 6514 00000000 .quad .LBE2072
+ 32427 00000000
+ 32428 651c 02 .byte 0x2
+ 32429 651d 5903 .value 0x359
+ 32430 651f 36650000 .long 0x6536
+ 32431 6523 32 .uleb128 0x32
+ 32432 6524 930D0000 .long 0xd93
+ 32433 6528 03 .byte 0x3
+ 32434 6529 91 .byte 0x91
+ 32435 652a 9C4D .sleb128 -6500
+ 32436 652c 32 .uleb128 0x32
+ 32437 652d 870D0000 .long 0xd87
+ 32438 6531 03 .byte 0x3
+ 32439 6532 91 .byte 0x91
+ 32440 6533 A04D .sleb128 -6496
+ 32441 6535 00 .byte 0x0
+ 32442 6536 31 .uleb128 0x31
+ 32443 6537 4F0D0000 .long 0xd4f
+ 32444 653b 00000000 .quad .LBB2074
+ 32444 00000000
+ 32445 6543 00000000 .quad .LBE2074
+ 32445 00000000
+ 32446 654b 02 .byte 0x2
+ 32447 654c 5B03 .value 0x35b
+ 32448 654e 65650000 .long 0x6565
+ 32449 6552 32 .uleb128 0x32
+ 32450 6553 6A0D0000 .long 0xd6a
+ 32451 6557 03 .byte 0x3
+ 32452 6558 91 .byte 0x91
+ 32453 6559 B04D .sleb128 -6480
+ 32454 655b 32 .uleb128 0x32
+ 32455 655c 600D0000 .long 0xd60
+ 32456 6560 03 .byte 0x3
+ 32457 6561 91 .byte 0x91
+ 32458 6562 C04D .sleb128 -6464
+ 32459 6564 00 .byte 0x0
+ 32460 6565 31 .uleb128 0x31
+ 32461 6566 A00D0000 .long 0xda0
+ 32462 656a 00000000 .quad .LBB2076
+ 32462 00000000
+ 32463 6572 00000000 .quad .LBE2076
+ 32463 00000000
+ 32464 657a 02 .byte 0x2
+ 32465 657b 6403 .value 0x364
+ 32466 657d BF650000 .long 0x65bf
+
GAS LISTING /tmp/ccjbMjHD.s page 863
+
+
+ 32467 6581 32 .uleb128 0x32
+ 32468 6582 BE0D0000 .long 0xdbe
+ 32469 6586 03 .byte 0x3
+ 32470 6587 91 .byte 0x91
+ 32471 6588 D04D .sleb128 -6448
+ 32472 658a 32 .uleb128 0x32
+ 32473 658b B20D0000 .long 0xdb2
+ 32474 658f 03 .byte 0x3
+ 32475 6590 91 .byte 0x91
+ 32476 6591 E04D .sleb128 -6432
+ 32477 6593 35 .uleb128 0x35
+ 32478 6594 CB0D0000 .long 0xdcb
+ 32479 6598 00000000 .quad .LBB2078
+ 32479 00000000
+ 32480 65a0 00000000 .quad .LBE2078
+ 32480 00000000
+ 32481 65a8 02 .byte 0x2
+ 32482 65a9 7501 .value 0x175
+ 32483 65ab 32 .uleb128 0x32
+ 32484 65ac E90D0000 .long 0xde9
+ 32485 65b0 03 .byte 0x3
+ 32486 65b1 91 .byte 0x91
+ 32487 65b2 F04D .sleb128 -6416
+ 32488 65b4 32 .uleb128 0x32
+ 32489 65b5 DD0D0000 .long 0xddd
+ 32490 65b9 03 .byte 0x3
+ 32491 65ba 91 .byte 0x91
+ 32492 65bb 804E .sleb128 -6400
+ 32493 65bd 00 .byte 0x0
+ 32494 65be 00 .byte 0x0
+ 32495 65bf 31 .uleb128 0x31
+ 32496 65c0 FB0D0000 .long 0xdfb
+ 32497 65c4 00000000 .quad .LBB2080
+ 32497 00000000
+ 32498 65cc 00000000 .quad .LBE2080
+ 32498 00000000
+ 32499 65d4 02 .byte 0x2
+ 32500 65d5 6603 .value 0x366
+ 32501 65d7 EE650000 .long 0x65ee
+ 32502 65db 32 .uleb128 0x32
+ 32503 65dc 160E0000 .long 0xe16
+ 32504 65e0 03 .byte 0x3
+ 32505 65e1 91 .byte 0x91
+ 32506 65e2 904E .sleb128 -6384
+ 32507 65e4 32 .uleb128 0x32
+ 32508 65e5 0C0E0000 .long 0xe0c
+ 32509 65e9 03 .byte 0x3
+ 32510 65ea 91 .byte 0x91
+ 32511 65eb A04E .sleb128 -6368
+ 32512 65ed 00 .byte 0x0
+ 32513 65ee 31 .uleb128 0x31
+ 32514 65ef A00D0000 .long 0xda0
+ 32515 65f3 00000000 .quad .LBB2082
+ 32515 00000000
+ 32516 65fb 00000000 .quad .LBE2082
+ 32516 00000000
+ 32517 6603 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 864
+
+
+ 32518 6604 6803 .value 0x368
+ 32519 6606 48660000 .long 0x6648
+ 32520 660a 32 .uleb128 0x32
+ 32521 660b BE0D0000 .long 0xdbe
+ 32522 660f 03 .byte 0x3
+ 32523 6610 91 .byte 0x91
+ 32524 6611 B04E .sleb128 -6352
+ 32525 6613 32 .uleb128 0x32
+ 32526 6614 B20D0000 .long 0xdb2
+ 32527 6618 03 .byte 0x3
+ 32528 6619 91 .byte 0x91
+ 32529 661a C04E .sleb128 -6336
+ 32530 661c 35 .uleb128 0x35
+ 32531 661d CB0D0000 .long 0xdcb
+ 32532 6621 00000000 .quad .LBB2084
+ 32532 00000000
+ 32533 6629 00000000 .quad .LBE2084
+ 32533 00000000
+ 32534 6631 02 .byte 0x2
+ 32535 6632 7501 .value 0x175
+ 32536 6634 32 .uleb128 0x32
+ 32537 6635 E90D0000 .long 0xde9
+ 32538 6639 03 .byte 0x3
+ 32539 663a 91 .byte 0x91
+ 32540 663b D04E .sleb128 -6320
+ 32541 663d 32 .uleb128 0x32
+ 32542 663e DD0D0000 .long 0xddd
+ 32543 6642 03 .byte 0x3
+ 32544 6643 91 .byte 0x91
+ 32545 6644 E04E .sleb128 -6304
+ 32546 6646 00 .byte 0x0
+ 32547 6647 00 .byte 0x0
+ 32548 6648 31 .uleb128 0x31
+ 32549 6649 FB0D0000 .long 0xdfb
+ 32550 664d 00000000 .quad .LBB2086
+ 32550 00000000
+ 32551 6655 00000000 .quad .LBE2086
+ 32551 00000000
+ 32552 665d 02 .byte 0x2
+ 32553 665e 6A03 .value 0x36a
+ 32554 6660 77660000 .long 0x6677
+ 32555 6664 32 .uleb128 0x32
+ 32556 6665 160E0000 .long 0xe16
+ 32557 6669 03 .byte 0x3
+ 32558 666a 91 .byte 0x91
+ 32559 666b F04E .sleb128 -6288
+ 32560 666d 32 .uleb128 0x32
+ 32561 666e 0C0E0000 .long 0xe0c
+ 32562 6672 03 .byte 0x3
+ 32563 6673 91 .byte 0x91
+ 32564 6674 804F .sleb128 -6272
+ 32565 6676 00 .byte 0x0
+ 32566 6677 31 .uleb128 0x31
+ 32567 6678 210E0000 .long 0xe21
+ 32568 667c 00000000 .quad .LBB2088
+ 32568 00000000
+ 32569 6684 00000000 .quad .LBE2088
+
GAS LISTING /tmp/ccjbMjHD.s page 865
+
+
+ 32569 00000000
+ 32570 668c 02 .byte 0x2
+ 32571 668d 6C03 .value 0x36c
+ 32572 668f A6660000 .long 0x66a6
+ 32573 6693 32 .uleb128 0x32
+ 32574 6694 3E0E0000 .long 0xe3e
+ 32575 6698 03 .byte 0x3
+ 32576 6699 91 .byte 0x91
+ 32577 669a 904F .sleb128 -6256
+ 32578 669c 32 .uleb128 0x32
+ 32579 669d 330E0000 .long 0xe33
+ 32580 66a1 03 .byte 0x3
+ 32581 66a2 91 .byte 0x91
+ 32582 66a3 A04F .sleb128 -6240
+ 32583 66a5 00 .byte 0x0
+ 32584 66a6 35 .uleb128 0x35
+ 32585 66a7 4F0D0000 .long 0xd4f
+ 32586 66ab 00000000 .quad .LBB2090
+ 32586 00000000
+ 32587 66b3 00000000 .quad .LBE2090
+ 32587 00000000
+ 32588 66bb 02 .byte 0x2
+ 32589 66bc 6E03 .value 0x36e
+ 32590 66be 32 .uleb128 0x32
+ 32591 66bf 6A0D0000 .long 0xd6a
+ 32592 66c3 03 .byte 0x3
+ 32593 66c4 91 .byte 0x91
+ 32594 66c5 B04F .sleb128 -6224
+ 32595 66c7 32 .uleb128 0x32
+ 32596 66c8 600D0000 .long 0xd60
+ 32597 66cc 03 .byte 0x3
+ 32598 66cd 91 .byte 0x91
+ 32599 66ce C04F .sleb128 -6208
+ 32600 66d0 00 .byte 0x0
+ 32601 66d1 00 .byte 0x0
+ 32602 66d2 00 .byte 0x0
+ 32603 66d3 00 .byte 0x0
+ 32604 66d4 36 .uleb128 0x36
+ 32605 66d5 00000000 .quad .LBB2092
+ 32605 00000000
+ 32606 66dd 00000000 .quad .LBE2092
+ 32606 00000000
+ 32607 66e5 F4660000 .long 0x66f4
+ 32608 66e9 34 .uleb128 0x34
+ 32609 66ea 1C0C0000 .long 0xc1c
+ 32610 66ee 04 .byte 0x4
+ 32611 66ef 91 .byte 0x91
+ 32612 66f0 F0BD7F .sleb128 -8464
+ 32613 66f3 00 .byte 0x0
+ 32614 66f4 31 .uleb128 0x31
+ 32615 66f5 4A0E0000 .long 0xe4a
+ 32616 66f9 00000000 .quad .LBB2093
+ 32616 00000000
+ 32617 6701 00000000 .quad .LBE2093
+ 32617 00000000
+ 32618 6709 02 .byte 0x2
+ 32619 670a 9406 .value 0x694
+
GAS LISTING /tmp/ccjbMjHD.s page 866
+
+
+ 32620 670c 91670000 .long 0x6791
+ 32621 6710 32 .uleb128 0x32
+ 32622 6711 5C0E0000 .long 0xe5c
+ 32623 6715 03 .byte 0x3
+ 32624 6716 91 .byte 0x91
+ 32625 6717 D04F .sleb128 -6192
+ 32626 6719 33 .uleb128 0x33
+ 32627 671a 00000000 .quad .LBB2094
+ 32627 00000000
+ 32628 6722 00000000 .quad .LBE2094
+ 32628 00000000
+ 32629 672a 34 .uleb128 0x34
+ 32630 672b 680E0000 .long 0xe68
+ 32631 672f 09 .byte 0x9
+ 32632 6730 03 .byte 0x3
+ 32633 6731 00000000 .quad ShiftRowTable.7385
+ 32633 00000000
+ 32634 6739 35 .uleb128 0x35
+ 32635 673a A00D0000 .long 0xda0
+ 32636 673e 00000000 .quad .LBB2095
+ 32636 00000000
+ 32637 6746 00000000 .quad .LBE2095
+ 32637 00000000
+ 32638 674e 02 .byte 0x2
+ 32639 674f 9B02 .value 0x29b
+ 32640 6751 32 .uleb128 0x32
+ 32641 6752 BE0D0000 .long 0xdbe
+ 32642 6756 03 .byte 0x3
+ 32643 6757 91 .byte 0x91
+ 32644 6758 E04F .sleb128 -6176
+ 32645 675a 32 .uleb128 0x32
+ 32646 675b B20D0000 .long 0xdb2
+ 32647 675f 03 .byte 0x3
+ 32648 6760 91 .byte 0x91
+ 32649 6761 F04F .sleb128 -6160
+ 32650 6763 35 .uleb128 0x35
+ 32651 6764 CB0D0000 .long 0xdcb
+ 32652 6768 00000000 .quad .LBB2097
+ 32652 00000000
+ 32653 6770 00000000 .quad .LBE2097
+ 32653 00000000
+ 32654 6778 02 .byte 0x2
+ 32655 6779 7501 .value 0x175
+ 32656 677b 32 .uleb128 0x32
+ 32657 677c E90D0000 .long 0xde9
+ 32658 6780 03 .byte 0x3
+ 32659 6781 91 .byte 0x91
+ 32660 6782 8050 .sleb128 -6144
+ 32661 6784 32 .uleb128 0x32
+ 32662 6785 DD0D0000 .long 0xddd
+ 32663 6789 03 .byte 0x3
+ 32664 678a 91 .byte 0x91
+ 32665 678b 9050 .sleb128 -6128
+ 32666 678d 00 .byte 0x0
+ 32667 678e 00 .byte 0x0
+ 32668 678f 00 .byte 0x0
+ 32669 6790 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 867
+
+
+ 32670 6791 36 .uleb128 0x36
+ 32671 6792 00000000 .quad .LBB2099
+ 32671 00000000
+ 32672 679a 00000000 .quad .LBE2099
+ 32672 00000000
+ 32673 67a2 B1670000 .long 0x67b1
+ 32674 67a6 34 .uleb128 0x34
+ 32675 67a7 2C0C0000 .long 0xc2c
+ 32676 67ab 04 .byte 0x4
+ 32677 67ac 91 .byte 0x91
+ 32678 67ad E0BD7F .sleb128 -8480
+ 32679 67b0 00 .byte 0x0
+ 32680 67b1 31 .uleb128 0x31
+ 32681 67b2 860E0000 .long 0xe86
+ 32682 67b6 00000000 .quad .LBB2100
+ 32682 00000000
+ 32683 67be 00000000 .quad .LBE2100
+ 32683 00000000
+ 32684 67c6 02 .byte 0x2
+ 32685 67c7 9606 .value 0x696
+ 32686 67c9 E0670000 .long 0x67e0
+ 32687 67cd 32 .uleb128 0x32
+ 32688 67ce A10E0000 .long 0xea1
+ 32689 67d2 03 .byte 0x3
+ 32690 67d3 91 .byte 0x91
+ 32691 67d4 A050 .sleb128 -6112
+ 32692 67d6 32 .uleb128 0x32
+ 32693 67d7 970E0000 .long 0xe97
+ 32694 67db 03 .byte 0x3
+ 32695 67dc 91 .byte 0x91
+ 32696 67dd B050 .sleb128 -6096
+ 32697 67df 00 .byte 0x0
+ 32698 67e0 36 .uleb128 0x36
+ 32699 67e1 00000000 .quad .LBB2102
+ 32699 00000000
+ 32700 67e9 00000000 .quad .LBE2102
+ 32700 00000000
+ 32701 67f1 00680000 .long 0x6800
+ 32702 67f5 34 .uleb128 0x34
+ 32703 67f6 3C0C0000 .long 0xc3c
+ 32704 67fa 04 .byte 0x4
+ 32705 67fb 91 .byte 0x91
+ 32706 67fc D0BD7F .sleb128 -8496
+ 32707 67ff 00 .byte 0x0
+ 32708 6800 31 .uleb128 0x31
+ 32709 6801 AC0E0000 .long 0xeac
+ 32710 6805 00000000 .quad .LBB2103
+ 32710 00000000
+ 32711 680d 00000000 .quad .LBE2103
+ 32711 00000000
+ 32712 6815 02 .byte 0x2
+ 32713 6816 9806 .value 0x698
+ 32714 6818 51680000 .long 0x6851
+ 32715 681c 32 .uleb128 0x32
+ 32716 681d BE0E0000 .long 0xebe
+ 32717 6821 03 .byte 0x3
+ 32718 6822 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 868
+
+
+ 32719 6823 C050 .sleb128 -6080
+ 32720 6825 35 .uleb128 0x35
+ 32721 6826 CB0E0000 .long 0xecb
+ 32722 682a 00000000 .quad .LBB2105
+ 32722 00000000
+ 32723 6832 00000000 .quad .LBE2105
+ 32723 00000000
+ 32724 683a 02 .byte 0x2
+ 32725 683b 4905 .value 0x549
+ 32726 683d 32 .uleb128 0x32
+ 32727 683e E90E0000 .long 0xee9
+ 32728 6842 03 .byte 0x3
+ 32729 6843 91 .byte 0x91
+ 32730 6844 DC50 .sleb128 -6052
+ 32731 6846 32 .uleb128 0x32
+ 32732 6847 DD0E0000 .long 0xedd
+ 32733 684b 03 .byte 0x3
+ 32734 684c 91 .byte 0x91
+ 32735 684d E050 .sleb128 -6048
+ 32736 684f 00 .byte 0x0
+ 32737 6850 00 .byte 0x0
+ 32738 6851 33 .uleb128 0x33
+ 32739 6852 00000000 .quad .LBB2107
+ 32739 00000000
+ 32740 685a 00000000 .quad .LBE2107
+ 32740 00000000
+ 32741 6862 34 .uleb128 0x34
+ 32742 6863 480C0000 .long 0xc48
+ 32743 6867 04 .byte 0x4
+ 32744 6868 91 .byte 0x91
+ 32745 6869 C0BD7F .sleb128 -8512
+ 32746 686c 00 .byte 0x0
+ 32747 686d 00 .byte 0x0
+ 32748 686e 00 .byte 0x0
+ 32749 686f 31 .uleb128 0x31
+ 32750 6870 AC0E0000 .long 0xeac
+ 32751 6874 00000000 .quad .LBB2108
+ 32751 00000000
+ 32752 687c 00000000 .quad .LBE2108
+ 32752 00000000
+ 32753 6884 02 .byte 0x2
+ 32754 6885 1007 .value 0x710
+ 32755 6887 C0680000 .long 0x68c0
+ 32756 688b 32 .uleb128 0x32
+ 32757 688c BE0E0000 .long 0xebe
+ 32758 6890 03 .byte 0x3
+ 32759 6891 91 .byte 0x91
+ 32760 6892 F050 .sleb128 -6032
+ 32761 6894 35 .uleb128 0x35
+ 32762 6895 CB0E0000 .long 0xecb
+ 32763 6899 00000000 .quad .LBB2110
+ 32763 00000000
+ 32764 68a1 00000000 .quad .LBE2110
+ 32764 00000000
+ 32765 68a9 02 .byte 0x2
+ 32766 68aa 4905 .value 0x549
+ 32767 68ac 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 869
+
+
+ 32768 68ad E90E0000 .long 0xee9
+ 32769 68b1 03 .byte 0x3
+ 32770 68b2 91 .byte 0x91
+ 32771 68b3 8C51 .sleb128 -6004
+ 32772 68b5 32 .uleb128 0x32
+ 32773 68b6 DD0E0000 .long 0xedd
+ 32774 68ba 03 .byte 0x3
+ 32775 68bb 91 .byte 0x91
+ 32776 68bc 9051 .sleb128 -6000
+ 32777 68be 00 .byte 0x0
+ 32778 68bf 00 .byte 0x0
+ 32779 68c0 31 .uleb128 0x31
+ 32780 68c1 71560000 .long 0x5671
+ 32781 68c5 00000000 .quad .LBB2112
+ 32781 00000000
+ 32782 68cd 00000000 .quad .LBE2112
+ 32782 00000000
+ 32783 68d5 02 .byte 0x2
+ 32784 68d6 1707 .value 0x717
+ 32785 68d8 8A690000 .long 0x698a
+ 32786 68dc 32 .uleb128 0x32
+ 32787 68dd 8F560000 .long 0x568f
+ 32788 68e1 03 .byte 0x3
+ 32789 68e2 91 .byte 0x91
+ 32790 68e3 AC51 .sleb128 -5972
+ 32791 68e5 32 .uleb128 0x32
+ 32792 68e6 83560000 .long 0x5683
+ 32793 68ea 03 .byte 0x3
+ 32794 68eb 91 .byte 0x91
+ 32795 68ec B051 .sleb128 -5968
+ 32796 68ee 33 .uleb128 0x33
+ 32797 68ef 00000000 .quad .LBB2113
+ 32797 00000000
+ 32798 68f7 00000000 .quad .LBE2113
+ 32798 00000000
+ 32799 68ff 34 .uleb128 0x34
+ 32800 6900 9B560000 .long 0x569b
+ 32801 6904 04 .byte 0x4
+ 32802 6905 91 .byte 0x91
+ 32803 6906 90BE7F .sleb128 -8432
+ 32804 6909 34 .uleb128 0x34
+ 32805 690a A5560000 .long 0x56a5
+ 32806 690e 03 .byte 0x3
+ 32807 690f 91 .byte 0x91
+ 32808 6910 D051 .sleb128 -5936
+ 32809 6912 34 .uleb128 0x34
+ 32810 6913 B1560000 .long 0x56b1
+ 32811 6917 03 .byte 0x3
+ 32812 6918 91 .byte 0x91
+ 32813 6919 CC51 .sleb128 -5940
+ 32814 691b 31 .uleb128 0x31
+ 32815 691c BE560000 .long 0x56be
+ 32816 6920 00000000 .quad .LBB2114
+ 32816 00000000
+ 32817 6928 00000000 .quad .LBE2114
+ 32817 00000000
+ 32818 6930 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 870
+
+
+ 32819 6931 5F06 .value 0x65f
+ 32820 6933 66690000 .long 0x6966
+ 32821 6937 32 .uleb128 0x32
+ 32822 6938 D0560000 .long 0x56d0
+ 32823 693c 03 .byte 0x3
+ 32824 693d 91 .byte 0x91
+ 32825 693e D451 .sleb128 -5932
+ 32826 6940 33 .uleb128 0x33
+ 32827 6941 00000000 .quad .LBB2115
+ 32827 00000000
+ 32828 6949 00000000 .quad .LBE2115
+ 32828 00000000
+ 32829 6951 34 .uleb128 0x34
+ 32830 6952 DA560000 .long 0x56da
+ 32831 6956 04 .byte 0x4
+ 32832 6957 91 .byte 0x91
+ 32833 6958 80BE7F .sleb128 -8448
+ 32834 695b 34 .uleb128 0x34
+ 32835 695c E6560000 .long 0x56e6
+ 32836 6960 03 .byte 0x3
+ 32837 6961 91 .byte 0x91
+ 32838 6962 D851 .sleb128 -5928
+ 32839 6964 00 .byte 0x0
+ 32840 6965 00 .byte 0x0
+ 32841 6966 35 .uleb128 0x35
+ 32842 6967 F2560000 .long 0x56f2
+ 32843 696b 00000000 .quad .LBB2116
+ 32843 00000000
+ 32844 6973 00000000 .quad .LBE2116
+ 32844 00000000
+ 32845 697b 02 .byte 0x2
+ 32846 697c 6006 .value 0x660
+ 32847 697e 32 .uleb128 0x32
+ 32848 697f 04570000 .long 0x5704
+ 32849 6983 03 .byte 0x3
+ 32850 6984 91 .byte 0x91
+ 32851 6985 DC51 .sleb128 -5924
+ 32852 6987 00 .byte 0x0
+ 32853 6988 00 .byte 0x0
+ 32854 6989 00 .byte 0x0
+ 32855 698a 31 .uleb128 0x31
+ 32856 698b F60E0000 .long 0xef6
+ 32857 698f 00000000 .quad .LBB2118
+ 32857 00000000
+ 32858 6997 00000000 .quad .LBE2118
+ 32858 00000000
+ 32859 699f 02 .byte 0x2
+ 32860 69a0 1907 .value 0x719
+ 32861 69a2 9F6B0000 .long 0x6b9f
+ 32862 69a6 32 .uleb128 0x32
+ 32863 69a7 080F0000 .long 0xf08
+ 32864 69ab 03 .byte 0x3
+ 32865 69ac 91 .byte 0x91
+ 32866 69ad E051 .sleb128 -5920
+ 32867 69af 33 .uleb128 0x33
+ 32868 69b0 00000000 .quad .LBB2119
+ 32868 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 871
+
+
+ 32869 69b8 00000000 .quad .LBE2119
+ 32869 00000000
+ 32870 69c0 34 .uleb128 0x34
+ 32871 69c1 140F0000 .long 0xf14
+ 32872 69c5 04 .byte 0x4
+ 32873 69c6 76 .byte 0x76
+ 32874 69c7 90BB7F .sleb128 -8816
+ 32875 69ca 31 .uleb128 0x31
+ 32876 69cb 210F0000 .long 0xf21
+ 32877 69cf 00000000 .quad .LBB2120
+ 32877 00000000
+ 32878 69d7 00000000 .quad .LBE2120
+ 32878 00000000
+ 32879 69df 02 .byte 0x2
+ 32880 69e0 1F06 .value 0x61f
+ 32881 69e2 676A0000 .long 0x6a67
+ 32882 69e6 32 .uleb128 0x32
+ 32883 69e7 330F0000 .long 0xf33
+ 32884 69eb 03 .byte 0x3
+ 32885 69ec 91 .byte 0x91
+ 32886 69ed F051 .sleb128 -5904
+ 32887 69ef 33 .uleb128 0x33
+ 32888 69f0 00000000 .quad .LBB2121
+ 32888 00000000
+ 32889 69f8 00000000 .quad .LBE2121
+ 32889 00000000
+ 32890 6a00 34 .uleb128 0x34
+ 32891 6a01 3F0F0000 .long 0xf3f
+ 32892 6a05 09 .byte 0x9
+ 32893 6a06 03 .byte 0x3
+ 32894 6a07 00000000 .quad mask.7943
+ 32894 00000000
+ 32895 6a0f 35 .uleb128 0x35
+ 32896 6a10 A00D0000 .long 0xda0
+ 32897 6a14 00000000 .quad .LBB2122
+ 32897 00000000
+ 32898 6a1c 00000000 .quad .LBE2122
+ 32898 00000000
+ 32899 6a24 02 .byte 0x2
+ 32900 6a25 FE04 .value 0x4fe
+ 32901 6a27 32 .uleb128 0x32
+ 32902 6a28 BE0D0000 .long 0xdbe
+ 32903 6a2c 03 .byte 0x3
+ 32904 6a2d 91 .byte 0x91
+ 32905 6a2e 8052 .sleb128 -5888
+ 32906 6a30 32 .uleb128 0x32
+ 32907 6a31 B20D0000 .long 0xdb2
+ 32908 6a35 03 .byte 0x3
+ 32909 6a36 91 .byte 0x91
+ 32910 6a37 9052 .sleb128 -5872
+ 32911 6a39 35 .uleb128 0x35
+ 32912 6a3a CB0D0000 .long 0xdcb
+ 32913 6a3e 00000000 .quad .LBB2124
+ 32913 00000000
+ 32914 6a46 00000000 .quad .LBE2124
+ 32914 00000000
+ 32915 6a4e 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 872
+
+
+ 32916 6a4f 7501 .value 0x175
+ 32917 6a51 32 .uleb128 0x32
+ 32918 6a52 E90D0000 .long 0xde9
+ 32919 6a56 03 .byte 0x3
+ 32920 6a57 91 .byte 0x91
+ 32921 6a58 A052 .sleb128 -5856
+ 32922 6a5a 32 .uleb128 0x32
+ 32923 6a5b DD0D0000 .long 0xddd
+ 32924 6a5f 03 .byte 0x3
+ 32925 6a60 91 .byte 0x91
+ 32926 6a61 B052 .sleb128 -5840
+ 32927 6a63 00 .byte 0x0
+ 32928 6a64 00 .byte 0x0
+ 32929 6a65 00 .byte 0x0
+ 32930 6a66 00 .byte 0x0
+ 32931 6a67 31 .uleb128 0x31
+ 32932 6a68 210F0000 .long 0xf21
+ 32933 6a6c 00000000 .quad .LBB2126
+ 32933 00000000
+ 32934 6a74 00000000 .quad .LBE2126
+ 32934 00000000
+ 32935 6a7c 02 .byte 0x2
+ 32936 6a7d 2006 .value 0x620
+ 32937 6a7f 046B0000 .long 0x6b04
+ 32938 6a83 32 .uleb128 0x32
+ 32939 6a84 330F0000 .long 0xf33
+ 32940 6a88 03 .byte 0x3
+ 32941 6a89 91 .byte 0x91
+ 32942 6a8a C052 .sleb128 -5824
+ 32943 6a8c 33 .uleb128 0x33
+ 32944 6a8d 00000000 .quad .LBB2127
+ 32944 00000000
+ 32945 6a95 00000000 .quad .LBE2127
+ 32945 00000000
+ 32946 6a9d 34 .uleb128 0x34
+ 32947 6a9e 3F0F0000 .long 0xf3f
+ 32948 6aa2 09 .byte 0x9
+ 32949 6aa3 03 .byte 0x3
+ 32950 6aa4 00000000 .quad mask.7943
+ 32950 00000000
+ 32951 6aac 35 .uleb128 0x35
+ 32952 6aad A00D0000 .long 0xda0
+ 32953 6ab1 00000000 .quad .LBB2128
+ 32953 00000000
+ 32954 6ab9 00000000 .quad .LBE2128
+ 32954 00000000
+ 32955 6ac1 02 .byte 0x2
+ 32956 6ac2 FE04 .value 0x4fe
+ 32957 6ac4 32 .uleb128 0x32
+ 32958 6ac5 BE0D0000 .long 0xdbe
+ 32959 6ac9 03 .byte 0x3
+ 32960 6aca 91 .byte 0x91
+ 32961 6acb D052 .sleb128 -5808
+ 32962 6acd 32 .uleb128 0x32
+ 32963 6ace B20D0000 .long 0xdb2
+ 32964 6ad2 03 .byte 0x3
+ 32965 6ad3 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 873
+
+
+ 32966 6ad4 E052 .sleb128 -5792
+ 32967 6ad6 35 .uleb128 0x35
+ 32968 6ad7 CB0D0000 .long 0xdcb
+ 32969 6adb 00000000 .quad .LBB2130
+ 32969 00000000
+ 32970 6ae3 00000000 .quad .LBE2130
+ 32970 00000000
+ 32971 6aeb 02 .byte 0x2
+ 32972 6aec 7501 .value 0x175
+ 32973 6aee 32 .uleb128 0x32
+ 32974 6aef E90D0000 .long 0xde9
+ 32975 6af3 03 .byte 0x3
+ 32976 6af4 91 .byte 0x91
+ 32977 6af5 F052 .sleb128 -5776
+ 32978 6af7 32 .uleb128 0x32
+ 32979 6af8 DD0D0000 .long 0xddd
+ 32980 6afc 03 .byte 0x3
+ 32981 6afd 91 .byte 0x91
+ 32982 6afe 8053 .sleb128 -5760
+ 32983 6b00 00 .byte 0x0
+ 32984 6b01 00 .byte 0x0
+ 32985 6b02 00 .byte 0x0
+ 32986 6b03 00 .byte 0x0
+ 32987 6b04 35 .uleb128 0x35
+ 32988 6b05 210F0000 .long 0xf21
+ 32989 6b09 00000000 .quad .LBB2132
+ 32989 00000000
+ 32990 6b11 00000000 .quad .LBE2132
+ 32990 00000000
+ 32991 6b19 02 .byte 0x2
+ 32992 6b1a 2106 .value 0x621
+ 32993 6b1c 32 .uleb128 0x32
+ 32994 6b1d 330F0000 .long 0xf33
+ 32995 6b21 03 .byte 0x3
+ 32996 6b22 91 .byte 0x91
+ 32997 6b23 9053 .sleb128 -5744
+ 32998 6b25 33 .uleb128 0x33
+ 32999 6b26 00000000 .quad .LBB2133
+ 32999 00000000
+ 33000 6b2e 00000000 .quad .LBE2133
+ 33000 00000000
+ 33001 6b36 34 .uleb128 0x34
+ 33002 6b37 3F0F0000 .long 0xf3f
+ 33003 6b3b 09 .byte 0x9
+ 33004 6b3c 03 .byte 0x3
+ 33005 6b3d 00000000 .quad mask.7943
+ 33005 00000000
+ 33006 6b45 35 .uleb128 0x35
+ 33007 6b46 A00D0000 .long 0xda0
+ 33008 6b4a 00000000 .quad .LBB2134
+ 33008 00000000
+ 33009 6b52 00000000 .quad .LBE2134
+ 33009 00000000
+ 33010 6b5a 02 .byte 0x2
+ 33011 6b5b FE04 .value 0x4fe
+ 33012 6b5d 32 .uleb128 0x32
+ 33013 6b5e BE0D0000 .long 0xdbe
+
GAS LISTING /tmp/ccjbMjHD.s page 874
+
+
+ 33014 6b62 03 .byte 0x3
+ 33015 6b63 91 .byte 0x91
+ 33016 6b64 A053 .sleb128 -5728
+ 33017 6b66 32 .uleb128 0x32
+ 33018 6b67 B20D0000 .long 0xdb2
+ 33019 6b6b 03 .byte 0x3
+ 33020 6b6c 91 .byte 0x91
+ 33021 6b6d B053 .sleb128 -5712
+ 33022 6b6f 35 .uleb128 0x35
+ 33023 6b70 CB0D0000 .long 0xdcb
+ 33024 6b74 00000000 .quad .LBB2136
+ 33024 00000000
+ 33025 6b7c 00000000 .quad .LBE2136
+ 33025 00000000
+ 33026 6b84 02 .byte 0x2
+ 33027 6b85 7501 .value 0x175
+ 33028 6b87 32 .uleb128 0x32
+ 33029 6b88 E90D0000 .long 0xde9
+ 33030 6b8c 03 .byte 0x3
+ 33031 6b8d 91 .byte 0x91
+ 33032 6b8e C053 .sleb128 -5696
+ 33033 6b90 32 .uleb128 0x32
+ 33034 6b91 DD0D0000 .long 0xddd
+ 33035 6b95 03 .byte 0x3
+ 33036 6b96 91 .byte 0x91
+ 33037 6b97 D053 .sleb128 -5680
+ 33038 6b99 00 .byte 0x0
+ 33039 6b9a 00 .byte 0x0
+ 33040 6b9b 00 .byte 0x0
+ 33041 6b9c 00 .byte 0x0
+ 33042 6b9d 00 .byte 0x0
+ 33043 6b9e 00 .byte 0x0
+ 33044 6b9f 31 .uleb128 0x31
+ 33045 6ba0 F60E0000 .long 0xef6
+ 33046 6ba4 00000000 .quad .LBB2138
+ 33046 00000000
+ 33047 6bac 00000000 .quad .LBE2138
+ 33047 00000000
+ 33048 6bb4 02 .byte 0x2
+ 33049 6bb5 1B07 .value 0x71b
+ 33050 6bb7 B46D0000 .long 0x6db4
+ 33051 6bbb 32 .uleb128 0x32
+ 33052 6bbc 080F0000 .long 0xf08
+ 33053 6bc0 03 .byte 0x3
+ 33054 6bc1 91 .byte 0x91
+ 33055 6bc2 E053 .sleb128 -5664
+ 33056 6bc4 33 .uleb128 0x33
+ 33057 6bc5 00000000 .quad .LBB2139
+ 33057 00000000
+ 33058 6bcd 00000000 .quad .LBE2139
+ 33058 00000000
+ 33059 6bd5 34 .uleb128 0x34
+ 33060 6bd6 140F0000 .long 0xf14
+ 33061 6bda 04 .byte 0x4
+ 33062 6bdb 76 .byte 0x76
+ 33063 6bdc A0BB7F .sleb128 -8800
+ 33064 6bdf 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 875
+
+
+ 33065 6be0 210F0000 .long 0xf21
+ 33066 6be4 00000000 .quad .LBB2140
+ 33066 00000000
+ 33067 6bec 00000000 .quad .LBE2140
+ 33067 00000000
+ 33068 6bf4 02 .byte 0x2
+ 33069 6bf5 1F06 .value 0x61f
+ 33070 6bf7 7C6C0000 .long 0x6c7c
+ 33071 6bfb 32 .uleb128 0x32
+ 33072 6bfc 330F0000 .long 0xf33
+ 33073 6c00 03 .byte 0x3
+ 33074 6c01 91 .byte 0x91
+ 33075 6c02 F053 .sleb128 -5648
+ 33076 6c04 33 .uleb128 0x33
+ 33077 6c05 00000000 .quad .LBB2141
+ 33077 00000000
+ 33078 6c0d 00000000 .quad .LBE2141
+ 33078 00000000
+ 33079 6c15 34 .uleb128 0x34
+ 33080 6c16 3F0F0000 .long 0xf3f
+ 33081 6c1a 09 .byte 0x9
+ 33082 6c1b 03 .byte 0x3
+ 33083 6c1c 00000000 .quad mask.7943
+ 33083 00000000
+ 33084 6c24 35 .uleb128 0x35
+ 33085 6c25 A00D0000 .long 0xda0
+ 33086 6c29 00000000 .quad .LBB2142
+ 33086 00000000
+ 33087 6c31 00000000 .quad .LBE2142
+ 33087 00000000
+ 33088 6c39 02 .byte 0x2
+ 33089 6c3a FE04 .value 0x4fe
+ 33090 6c3c 32 .uleb128 0x32
+ 33091 6c3d BE0D0000 .long 0xdbe
+ 33092 6c41 03 .byte 0x3
+ 33093 6c42 91 .byte 0x91
+ 33094 6c43 8054 .sleb128 -5632
+ 33095 6c45 32 .uleb128 0x32
+ 33096 6c46 B20D0000 .long 0xdb2
+ 33097 6c4a 03 .byte 0x3
+ 33098 6c4b 91 .byte 0x91
+ 33099 6c4c 9054 .sleb128 -5616
+ 33100 6c4e 35 .uleb128 0x35
+ 33101 6c4f CB0D0000 .long 0xdcb
+ 33102 6c53 00000000 .quad .LBB2144
+ 33102 00000000
+ 33103 6c5b 00000000 .quad .LBE2144
+ 33103 00000000
+ 33104 6c63 02 .byte 0x2
+ 33105 6c64 7501 .value 0x175
+ 33106 6c66 32 .uleb128 0x32
+ 33107 6c67 E90D0000 .long 0xde9
+ 33108 6c6b 03 .byte 0x3
+ 33109 6c6c 91 .byte 0x91
+ 33110 6c6d A054 .sleb128 -5600
+ 33111 6c6f 32 .uleb128 0x32
+ 33112 6c70 DD0D0000 .long 0xddd
+
GAS LISTING /tmp/ccjbMjHD.s page 876
+
+
+ 33113 6c74 03 .byte 0x3
+ 33114 6c75 91 .byte 0x91
+ 33115 6c76 B054 .sleb128 -5584
+ 33116 6c78 00 .byte 0x0
+ 33117 6c79 00 .byte 0x0
+ 33118 6c7a 00 .byte 0x0
+ 33119 6c7b 00 .byte 0x0
+ 33120 6c7c 31 .uleb128 0x31
+ 33121 6c7d 210F0000 .long 0xf21
+ 33122 6c81 00000000 .quad .LBB2146
+ 33122 00000000
+ 33123 6c89 00000000 .quad .LBE2146
+ 33123 00000000
+ 33124 6c91 02 .byte 0x2
+ 33125 6c92 2006 .value 0x620
+ 33126 6c94 196D0000 .long 0x6d19
+ 33127 6c98 32 .uleb128 0x32
+ 33128 6c99 330F0000 .long 0xf33
+ 33129 6c9d 03 .byte 0x3
+ 33130 6c9e 91 .byte 0x91
+ 33131 6c9f C054 .sleb128 -5568
+ 33132 6ca1 33 .uleb128 0x33
+ 33133 6ca2 00000000 .quad .LBB2147
+ 33133 00000000
+ 33134 6caa 00000000 .quad .LBE2147
+ 33134 00000000
+ 33135 6cb2 34 .uleb128 0x34
+ 33136 6cb3 3F0F0000 .long 0xf3f
+ 33137 6cb7 09 .byte 0x9
+ 33138 6cb8 03 .byte 0x3
+ 33139 6cb9 00000000 .quad mask.7943
+ 33139 00000000
+ 33140 6cc1 35 .uleb128 0x35
+ 33141 6cc2 A00D0000 .long 0xda0
+ 33142 6cc6 00000000 .quad .LBB2148
+ 33142 00000000
+ 33143 6cce 00000000 .quad .LBE2148
+ 33143 00000000
+ 33144 6cd6 02 .byte 0x2
+ 33145 6cd7 FE04 .value 0x4fe
+ 33146 6cd9 32 .uleb128 0x32
+ 33147 6cda BE0D0000 .long 0xdbe
+ 33148 6cde 03 .byte 0x3
+ 33149 6cdf 91 .byte 0x91
+ 33150 6ce0 D054 .sleb128 -5552
+ 33151 6ce2 32 .uleb128 0x32
+ 33152 6ce3 B20D0000 .long 0xdb2
+ 33153 6ce7 03 .byte 0x3
+ 33154 6ce8 91 .byte 0x91
+ 33155 6ce9 E054 .sleb128 -5536
+ 33156 6ceb 35 .uleb128 0x35
+ 33157 6cec CB0D0000 .long 0xdcb
+ 33158 6cf0 00000000 .quad .LBB2150
+ 33158 00000000
+ 33159 6cf8 00000000 .quad .LBE2150
+ 33159 00000000
+ 33160 6d00 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 877
+
+
+ 33161 6d01 7501 .value 0x175
+ 33162 6d03 32 .uleb128 0x32
+ 33163 6d04 E90D0000 .long 0xde9
+ 33164 6d08 03 .byte 0x3
+ 33165 6d09 91 .byte 0x91
+ 33166 6d0a F054 .sleb128 -5520
+ 33167 6d0c 32 .uleb128 0x32
+ 33168 6d0d DD0D0000 .long 0xddd
+ 33169 6d11 03 .byte 0x3
+ 33170 6d12 91 .byte 0x91
+ 33171 6d13 8055 .sleb128 -5504
+ 33172 6d15 00 .byte 0x0
+ 33173 6d16 00 .byte 0x0
+ 33174 6d17 00 .byte 0x0
+ 33175 6d18 00 .byte 0x0
+ 33176 6d19 35 .uleb128 0x35
+ 33177 6d1a 210F0000 .long 0xf21
+ 33178 6d1e 00000000 .quad .LBB2152
+ 33178 00000000
+ 33179 6d26 00000000 .quad .LBE2152
+ 33179 00000000
+ 33180 6d2e 02 .byte 0x2
+ 33181 6d2f 2106 .value 0x621
+ 33182 6d31 32 .uleb128 0x32
+ 33183 6d32 330F0000 .long 0xf33
+ 33184 6d36 03 .byte 0x3
+ 33185 6d37 91 .byte 0x91
+ 33186 6d38 9055 .sleb128 -5488
+ 33187 6d3a 33 .uleb128 0x33
+ 33188 6d3b 00000000 .quad .LBB2153
+ 33188 00000000
+ 33189 6d43 00000000 .quad .LBE2153
+ 33189 00000000
+ 33190 6d4b 34 .uleb128 0x34
+ 33191 6d4c 3F0F0000 .long 0xf3f
+ 33192 6d50 09 .byte 0x9
+ 33193 6d51 03 .byte 0x3
+ 33194 6d52 00000000 .quad mask.7943
+ 33194 00000000
+ 33195 6d5a 35 .uleb128 0x35
+ 33196 6d5b A00D0000 .long 0xda0
+ 33197 6d5f 00000000 .quad .LBB2154
+ 33197 00000000
+ 33198 6d67 00000000 .quad .LBE2154
+ 33198 00000000
+ 33199 6d6f 02 .byte 0x2
+ 33200 6d70 FE04 .value 0x4fe
+ 33201 6d72 32 .uleb128 0x32
+ 33202 6d73 BE0D0000 .long 0xdbe
+ 33203 6d77 03 .byte 0x3
+ 33204 6d78 91 .byte 0x91
+ 33205 6d79 A055 .sleb128 -5472
+ 33206 6d7b 32 .uleb128 0x32
+ 33207 6d7c B20D0000 .long 0xdb2
+ 33208 6d80 03 .byte 0x3
+ 33209 6d81 91 .byte 0x91
+ 33210 6d82 B055 .sleb128 -5456
+
GAS LISTING /tmp/ccjbMjHD.s page 878
+
+
+ 33211 6d84 35 .uleb128 0x35
+ 33212 6d85 CB0D0000 .long 0xdcb
+ 33213 6d89 00000000 .quad .LBB2156
+ 33213 00000000
+ 33214 6d91 00000000 .quad .LBE2156
+ 33214 00000000
+ 33215 6d99 02 .byte 0x2
+ 33216 6d9a 7501 .value 0x175
+ 33217 6d9c 32 .uleb128 0x32
+ 33218 6d9d E90D0000 .long 0xde9
+ 33219 6da1 03 .byte 0x3
+ 33220 6da2 91 .byte 0x91
+ 33221 6da3 C055 .sleb128 -5440
+ 33222 6da5 32 .uleb128 0x32
+ 33223 6da6 DD0D0000 .long 0xddd
+ 33224 6daa 03 .byte 0x3
+ 33225 6dab 91 .byte 0x91
+ 33226 6dac D055 .sleb128 -5424
+ 33227 6dae 00 .byte 0x0
+ 33228 6daf 00 .byte 0x0
+ 33229 6db0 00 .byte 0x0
+ 33230 6db1 00 .byte 0x0
+ 33231 6db2 00 .byte 0x0
+ 33232 6db3 00 .byte 0x0
+ 33233 6db4 31 .uleb128 0x31
+ 33234 6db5 AC0E0000 .long 0xeac
+ 33235 6db9 00000000 .quad .LBB2158
+ 33235 00000000
+ 33236 6dc1 00000000 .quad .LBE2158
+ 33236 00000000
+ 33237 6dc9 02 .byte 0x2
+ 33238 6dca 1C07 .value 0x71c
+ 33239 6dcc 056E0000 .long 0x6e05
+ 33240 6dd0 32 .uleb128 0x32
+ 33241 6dd1 BE0E0000 .long 0xebe
+ 33242 6dd5 03 .byte 0x3
+ 33243 6dd6 91 .byte 0x91
+ 33244 6dd7 E055 .sleb128 -5408
+ 33245 6dd9 35 .uleb128 0x35
+ 33246 6dda CB0E0000 .long 0xecb
+ 33247 6dde 00000000 .quad .LBB2160
+ 33247 00000000
+ 33248 6de6 00000000 .quad .LBE2160
+ 33248 00000000
+ 33249 6dee 02 .byte 0x2
+ 33250 6def 4905 .value 0x549
+ 33251 6df1 32 .uleb128 0x32
+ 33252 6df2 E90E0000 .long 0xee9
+ 33253 6df6 03 .byte 0x3
+ 33254 6df7 91 .byte 0x91
+ 33255 6df8 FC55 .sleb128 -5380
+ 33256 6dfa 32 .uleb128 0x32
+ 33257 6dfb DD0E0000 .long 0xedd
+ 33258 6dff 03 .byte 0x3
+ 33259 6e00 91 .byte 0x91
+ 33260 6e01 8056 .sleb128 -5376
+ 33261 6e03 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 879
+
+
+ 33262 6e04 00 .byte 0x0
+ 33263 6e05 31 .uleb128 0x31
+ 33264 6e06 0F570000 .long 0x570f
+ 33265 6e0a 00000000 .quad .LBB2162
+ 33265 00000000
+ 33266 6e12 00000000 .quad .LBE2162
+ 33266 00000000
+ 33267 6e1a 02 .byte 0x2
+ 33268 6e1b 1E07 .value 0x71e
+ 33269 6e1d 686E0000 .long 0x6e68
+ 33270 6e21 32 .uleb128 0x32
+ 33271 6e22 2B570000 .long 0x572b
+ 33272 6e26 03 .byte 0x3
+ 33273 6e27 91 .byte 0x91
+ 33274 6e28 9056 .sleb128 -5360
+ 33275 6e2a 32 .uleb128 0x32
+ 33276 6e2b 21570000 .long 0x5721
+ 33277 6e2f 03 .byte 0x3
+ 33278 6e30 91 .byte 0x91
+ 33279 6e31 A056 .sleb128 -5344
+ 33280 6e33 35 .uleb128 0x35
+ 33281 6e34 36570000 .long 0x5736
+ 33282 6e38 00000000 .quad .LBB2164
+ 33282 00000000
+ 33283 6e40 00000000 .quad .LBE2164
+ 33283 00000000
+ 33284 6e48 02 .byte 0x2
+ 33285 6e49 BA05 .value 0x5ba
+ 33286 6e4b 32 .uleb128 0x32
+ 33287 6e4c 60570000 .long 0x5760
+ 33288 6e50 03 .byte 0x3
+ 33289 6e51 91 .byte 0x91
+ 33290 6e52 BC56 .sleb128 -5316
+ 33291 6e54 32 .uleb128 0x32
+ 33292 6e55 54570000 .long 0x5754
+ 33293 6e59 03 .byte 0x3
+ 33294 6e5a 91 .byte 0x91
+ 33295 6e5b C056 .sleb128 -5312
+ 33296 6e5d 32 .uleb128 0x32
+ 33297 6e5e 48570000 .long 0x5748
+ 33298 6e62 03 .byte 0x3
+ 33299 6e63 91 .byte 0x91
+ 33300 6e64 D056 .sleb128 -5296
+ 33301 6e66 00 .byte 0x0
+ 33302 6e67 00 .byte 0x0
+ 33303 6e68 31 .uleb128 0x31
+ 33304 6e69 6D570000 .long 0x576d
+ 33305 6e6d 00000000 .quad .LBB2166
+ 33305 00000000
+ 33306 6e75 00000000 .quad .LBE2166
+ 33306 00000000
+ 33307 6e7d 02 .byte 0x2
+ 33308 6e7e 2107 .value 0x721
+ 33309 6e80 CB6E0000 .long 0x6ecb
+ 33310 6e84 32 .uleb128 0x32
+ 33311 6e85 89570000 .long 0x5789
+ 33312 6e89 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 880
+
+
+ 33313 6e8a 91 .byte 0x91
+ 33314 6e8b E056 .sleb128 -5280
+ 33315 6e8d 32 .uleb128 0x32
+ 33316 6e8e 7F570000 .long 0x577f
+ 33317 6e92 03 .byte 0x3
+ 33318 6e93 91 .byte 0x91
+ 33319 6e94 F056 .sleb128 -5264
+ 33320 6e96 35 .uleb128 0x35
+ 33321 6e97 36570000 .long 0x5736
+ 33322 6e9b 00000000 .quad .LBB2168
+ 33322 00000000
+ 33323 6ea3 00000000 .quad .LBE2168
+ 33323 00000000
+ 33324 6eab 02 .byte 0x2
+ 33325 6eac DA05 .value 0x5da
+ 33326 6eae 32 .uleb128 0x32
+ 33327 6eaf 60570000 .long 0x5760
+ 33328 6eb3 03 .byte 0x3
+ 33329 6eb4 91 .byte 0x91
+ 33330 6eb5 8C57 .sleb128 -5236
+ 33331 6eb7 32 .uleb128 0x32
+ 33332 6eb8 54570000 .long 0x5754
+ 33333 6ebc 03 .byte 0x3
+ 33334 6ebd 91 .byte 0x91
+ 33335 6ebe 9057 .sleb128 -5232
+ 33336 6ec0 32 .uleb128 0x32
+ 33337 6ec1 48570000 .long 0x5748
+ 33338 6ec5 03 .byte 0x3
+ 33339 6ec6 91 .byte 0x91
+ 33340 6ec7 A057 .sleb128 -5216
+ 33341 6ec9 00 .byte 0x0
+ 33342 6eca 00 .byte 0x0
+ 33343 6ecb 31 .uleb128 0x31
+ 33344 6ecc F60E0000 .long 0xef6
+ 33345 6ed0 00000000 .quad .LBB2170
+ 33345 00000000
+ 33346 6ed8 00000000 .quad .LBE2170
+ 33346 00000000
+ 33347 6ee0 02 .byte 0x2
+ 33348 6ee1 2507 .value 0x725
+ 33349 6ee3 E0700000 .long 0x70e0
+ 33350 6ee7 32 .uleb128 0x32
+ 33351 6ee8 080F0000 .long 0xf08
+ 33352 6eec 03 .byte 0x3
+ 33353 6eed 91 .byte 0x91
+ 33354 6eee B057 .sleb128 -5200
+ 33355 6ef0 33 .uleb128 0x33
+ 33356 6ef1 00000000 .quad .LBB2171
+ 33356 00000000
+ 33357 6ef9 00000000 .quad .LBE2171
+ 33357 00000000
+ 33358 6f01 34 .uleb128 0x34
+ 33359 6f02 140F0000 .long 0xf14
+ 33360 6f06 04 .byte 0x4
+ 33361 6f07 76 .byte 0x76
+ 33362 6f08 B0BB7F .sleb128 -8784
+ 33363 6f0b 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 881
+
+
+ 33364 6f0c 210F0000 .long 0xf21
+ 33365 6f10 00000000 .quad .LBB2172
+ 33365 00000000
+ 33366 6f18 00000000 .quad .LBE2172
+ 33366 00000000
+ 33367 6f20 02 .byte 0x2
+ 33368 6f21 1F06 .value 0x61f
+ 33369 6f23 A86F0000 .long 0x6fa8
+ 33370 6f27 32 .uleb128 0x32
+ 33371 6f28 330F0000 .long 0xf33
+ 33372 6f2c 03 .byte 0x3
+ 33373 6f2d 91 .byte 0x91
+ 33374 6f2e C057 .sleb128 -5184
+ 33375 6f30 33 .uleb128 0x33
+ 33376 6f31 00000000 .quad .LBB2173
+ 33376 00000000
+ 33377 6f39 00000000 .quad .LBE2173
+ 33377 00000000
+ 33378 6f41 34 .uleb128 0x34
+ 33379 6f42 3F0F0000 .long 0xf3f
+ 33380 6f46 09 .byte 0x9
+ 33381 6f47 03 .byte 0x3
+ 33382 6f48 00000000 .quad mask.7943
+ 33382 00000000
+ 33383 6f50 35 .uleb128 0x35
+ 33384 6f51 A00D0000 .long 0xda0
+ 33385 6f55 00000000 .quad .LBB2174
+ 33385 00000000
+ 33386 6f5d 00000000 .quad .LBE2174
+ 33386 00000000
+ 33387 6f65 02 .byte 0x2
+ 33388 6f66 FE04 .value 0x4fe
+ 33389 6f68 32 .uleb128 0x32
+ 33390 6f69 BE0D0000 .long 0xdbe
+ 33391 6f6d 03 .byte 0x3
+ 33392 6f6e 91 .byte 0x91
+ 33393 6f6f D057 .sleb128 -5168
+ 33394 6f71 32 .uleb128 0x32
+ 33395 6f72 B20D0000 .long 0xdb2
+ 33396 6f76 03 .byte 0x3
+ 33397 6f77 91 .byte 0x91
+ 33398 6f78 E057 .sleb128 -5152
+ 33399 6f7a 35 .uleb128 0x35
+ 33400 6f7b CB0D0000 .long 0xdcb
+ 33401 6f7f 00000000 .quad .LBB2176
+ 33401 00000000
+ 33402 6f87 00000000 .quad .LBE2176
+ 33402 00000000
+ 33403 6f8f 02 .byte 0x2
+ 33404 6f90 7501 .value 0x175
+ 33405 6f92 32 .uleb128 0x32
+ 33406 6f93 E90D0000 .long 0xde9
+ 33407 6f97 03 .byte 0x3
+ 33408 6f98 91 .byte 0x91
+ 33409 6f99 F057 .sleb128 -5136
+ 33410 6f9b 32 .uleb128 0x32
+ 33411 6f9c DD0D0000 .long 0xddd
+
GAS LISTING /tmp/ccjbMjHD.s page 882
+
+
+ 33412 6fa0 03 .byte 0x3
+ 33413 6fa1 91 .byte 0x91
+ 33414 6fa2 8058 .sleb128 -5120
+ 33415 6fa4 00 .byte 0x0
+ 33416 6fa5 00 .byte 0x0
+ 33417 6fa6 00 .byte 0x0
+ 33418 6fa7 00 .byte 0x0
+ 33419 6fa8 31 .uleb128 0x31
+ 33420 6fa9 210F0000 .long 0xf21
+ 33421 6fad 00000000 .quad .LBB2178
+ 33421 00000000
+ 33422 6fb5 00000000 .quad .LBE2178
+ 33422 00000000
+ 33423 6fbd 02 .byte 0x2
+ 33424 6fbe 2006 .value 0x620
+ 33425 6fc0 45700000 .long 0x7045
+ 33426 6fc4 32 .uleb128 0x32
+ 33427 6fc5 330F0000 .long 0xf33
+ 33428 6fc9 03 .byte 0x3
+ 33429 6fca 91 .byte 0x91
+ 33430 6fcb 9058 .sleb128 -5104
+ 33431 6fcd 33 .uleb128 0x33
+ 33432 6fce 00000000 .quad .LBB2179
+ 33432 00000000
+ 33433 6fd6 00000000 .quad .LBE2179
+ 33433 00000000
+ 33434 6fde 34 .uleb128 0x34
+ 33435 6fdf 3F0F0000 .long 0xf3f
+ 33436 6fe3 09 .byte 0x9
+ 33437 6fe4 03 .byte 0x3
+ 33438 6fe5 00000000 .quad mask.7943
+ 33438 00000000
+ 33439 6fed 35 .uleb128 0x35
+ 33440 6fee A00D0000 .long 0xda0
+ 33441 6ff2 00000000 .quad .LBB2180
+ 33441 00000000
+ 33442 6ffa 00000000 .quad .LBE2180
+ 33442 00000000
+ 33443 7002 02 .byte 0x2
+ 33444 7003 FE04 .value 0x4fe
+ 33445 7005 32 .uleb128 0x32
+ 33446 7006 BE0D0000 .long 0xdbe
+ 33447 700a 03 .byte 0x3
+ 33448 700b 91 .byte 0x91
+ 33449 700c A058 .sleb128 -5088
+ 33450 700e 32 .uleb128 0x32
+ 33451 700f B20D0000 .long 0xdb2
+ 33452 7013 03 .byte 0x3
+ 33453 7014 91 .byte 0x91
+ 33454 7015 B058 .sleb128 -5072
+ 33455 7017 35 .uleb128 0x35
+ 33456 7018 CB0D0000 .long 0xdcb
+ 33457 701c 00000000 .quad .LBB2182
+ 33457 00000000
+ 33458 7024 00000000 .quad .LBE2182
+ 33458 00000000
+ 33459 702c 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 883
+
+
+ 33460 702d 7501 .value 0x175
+ 33461 702f 32 .uleb128 0x32
+ 33462 7030 E90D0000 .long 0xde9
+ 33463 7034 03 .byte 0x3
+ 33464 7035 91 .byte 0x91
+ 33465 7036 C058 .sleb128 -5056
+ 33466 7038 32 .uleb128 0x32
+ 33467 7039 DD0D0000 .long 0xddd
+ 33468 703d 03 .byte 0x3
+ 33469 703e 91 .byte 0x91
+ 33470 703f D058 .sleb128 -5040
+ 33471 7041 00 .byte 0x0
+ 33472 7042 00 .byte 0x0
+ 33473 7043 00 .byte 0x0
+ 33474 7044 00 .byte 0x0
+ 33475 7045 35 .uleb128 0x35
+ 33476 7046 210F0000 .long 0xf21
+ 33477 704a 00000000 .quad .LBB2184
+ 33477 00000000
+ 33478 7052 00000000 .quad .LBE2184
+ 33478 00000000
+ 33479 705a 02 .byte 0x2
+ 33480 705b 2106 .value 0x621
+ 33481 705d 32 .uleb128 0x32
+ 33482 705e 330F0000 .long 0xf33
+ 33483 7062 03 .byte 0x3
+ 33484 7063 91 .byte 0x91
+ 33485 7064 E058 .sleb128 -5024
+ 33486 7066 33 .uleb128 0x33
+ 33487 7067 00000000 .quad .LBB2185
+ 33487 00000000
+ 33488 706f 00000000 .quad .LBE2185
+ 33488 00000000
+ 33489 7077 34 .uleb128 0x34
+ 33490 7078 3F0F0000 .long 0xf3f
+ 33491 707c 09 .byte 0x9
+ 33492 707d 03 .byte 0x3
+ 33493 707e 00000000 .quad mask.7943
+ 33493 00000000
+ 33494 7086 35 .uleb128 0x35
+ 33495 7087 A00D0000 .long 0xda0
+ 33496 708b 00000000 .quad .LBB2186
+ 33496 00000000
+ 33497 7093 00000000 .quad .LBE2186
+ 33497 00000000
+ 33498 709b 02 .byte 0x2
+ 33499 709c FE04 .value 0x4fe
+ 33500 709e 32 .uleb128 0x32
+ 33501 709f BE0D0000 .long 0xdbe
+ 33502 70a3 03 .byte 0x3
+ 33503 70a4 91 .byte 0x91
+ 33504 70a5 F058 .sleb128 -5008
+ 33505 70a7 32 .uleb128 0x32
+ 33506 70a8 B20D0000 .long 0xdb2
+ 33507 70ac 03 .byte 0x3
+ 33508 70ad 91 .byte 0x91
+ 33509 70ae 8059 .sleb128 -4992
+
GAS LISTING /tmp/ccjbMjHD.s page 884
+
+
+ 33510 70b0 35 .uleb128 0x35
+ 33511 70b1 CB0D0000 .long 0xdcb
+ 33512 70b5 00000000 .quad .LBB2188
+ 33512 00000000
+ 33513 70bd 00000000 .quad .LBE2188
+ 33513 00000000
+ 33514 70c5 02 .byte 0x2
+ 33515 70c6 7501 .value 0x175
+ 33516 70c8 32 .uleb128 0x32
+ 33517 70c9 E90D0000 .long 0xde9
+ 33518 70cd 03 .byte 0x3
+ 33519 70ce 91 .byte 0x91
+ 33520 70cf 9059 .sleb128 -4976
+ 33521 70d1 32 .uleb128 0x32
+ 33522 70d2 DD0D0000 .long 0xddd
+ 33523 70d6 03 .byte 0x3
+ 33524 70d7 91 .byte 0x91
+ 33525 70d8 A059 .sleb128 -4960
+ 33526 70da 00 .byte 0x0
+ 33527 70db 00 .byte 0x0
+ 33528 70dc 00 .byte 0x0
+ 33529 70dd 00 .byte 0x0
+ 33530 70de 00 .byte 0x0
+ 33531 70df 00 .byte 0x0
+ 33532 70e0 31 .uleb128 0x31
+ 33533 70e1 F60E0000 .long 0xef6
+ 33534 70e5 00000000 .quad .LBB2190
+ 33534 00000000
+ 33535 70ed 00000000 .quad .LBE2190
+ 33535 00000000
+ 33536 70f5 02 .byte 0x2
+ 33537 70f6 2607 .value 0x726
+ 33538 70f8 F5720000 .long 0x72f5
+ 33539 70fc 32 .uleb128 0x32
+ 33540 70fd 080F0000 .long 0xf08
+ 33541 7101 03 .byte 0x3
+ 33542 7102 91 .byte 0x91
+ 33543 7103 B059 .sleb128 -4944
+ 33544 7105 33 .uleb128 0x33
+ 33545 7106 00000000 .quad .LBB2191
+ 33545 00000000
+ 33546 710e 00000000 .quad .LBE2191
+ 33546 00000000
+ 33547 7116 34 .uleb128 0x34
+ 33548 7117 140F0000 .long 0xf14
+ 33549 711b 04 .byte 0x4
+ 33550 711c 76 .byte 0x76
+ 33551 711d C0BB7F .sleb128 -8768
+ 33552 7120 31 .uleb128 0x31
+ 33553 7121 210F0000 .long 0xf21
+ 33554 7125 00000000 .quad .LBB2192
+ 33554 00000000
+ 33555 712d 00000000 .quad .LBE2192
+ 33555 00000000
+ 33556 7135 02 .byte 0x2
+ 33557 7136 1F06 .value 0x61f
+ 33558 7138 BD710000 .long 0x71bd
+
GAS LISTING /tmp/ccjbMjHD.s page 885
+
+
+ 33559 713c 32 .uleb128 0x32
+ 33560 713d 330F0000 .long 0xf33
+ 33561 7141 03 .byte 0x3
+ 33562 7142 91 .byte 0x91
+ 33563 7143 C059 .sleb128 -4928
+ 33564 7145 33 .uleb128 0x33
+ 33565 7146 00000000 .quad .LBB2193
+ 33565 00000000
+ 33566 714e 00000000 .quad .LBE2193
+ 33566 00000000
+ 33567 7156 34 .uleb128 0x34
+ 33568 7157 3F0F0000 .long 0xf3f
+ 33569 715b 09 .byte 0x9
+ 33570 715c 03 .byte 0x3
+ 33571 715d 00000000 .quad mask.7943
+ 33571 00000000
+ 33572 7165 35 .uleb128 0x35
+ 33573 7166 A00D0000 .long 0xda0
+ 33574 716a 00000000 .quad .LBB2194
+ 33574 00000000
+ 33575 7172 00000000 .quad .LBE2194
+ 33575 00000000
+ 33576 717a 02 .byte 0x2
+ 33577 717b FE04 .value 0x4fe
+ 33578 717d 32 .uleb128 0x32
+ 33579 717e BE0D0000 .long 0xdbe
+ 33580 7182 03 .byte 0x3
+ 33581 7183 91 .byte 0x91
+ 33582 7184 D059 .sleb128 -4912
+ 33583 7186 32 .uleb128 0x32
+ 33584 7187 B20D0000 .long 0xdb2
+ 33585 718b 03 .byte 0x3
+ 33586 718c 91 .byte 0x91
+ 33587 718d E059 .sleb128 -4896
+ 33588 718f 35 .uleb128 0x35
+ 33589 7190 CB0D0000 .long 0xdcb
+ 33590 7194 00000000 .quad .LBB2196
+ 33590 00000000
+ 33591 719c 00000000 .quad .LBE2196
+ 33591 00000000
+ 33592 71a4 02 .byte 0x2
+ 33593 71a5 7501 .value 0x175
+ 33594 71a7 32 .uleb128 0x32
+ 33595 71a8 E90D0000 .long 0xde9
+ 33596 71ac 03 .byte 0x3
+ 33597 71ad 91 .byte 0x91
+ 33598 71ae F059 .sleb128 -4880
+ 33599 71b0 32 .uleb128 0x32
+ 33600 71b1 DD0D0000 .long 0xddd
+ 33601 71b5 03 .byte 0x3
+ 33602 71b6 91 .byte 0x91
+ 33603 71b7 805A .sleb128 -4864
+ 33604 71b9 00 .byte 0x0
+ 33605 71ba 00 .byte 0x0
+ 33606 71bb 00 .byte 0x0
+ 33607 71bc 00 .byte 0x0
+ 33608 71bd 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 886
+
+
+ 33609 71be 210F0000 .long 0xf21
+ 33610 71c2 00000000 .quad .LBB2198
+ 33610 00000000
+ 33611 71ca 00000000 .quad .LBE2198
+ 33611 00000000
+ 33612 71d2 02 .byte 0x2
+ 33613 71d3 2006 .value 0x620
+ 33614 71d5 5A720000 .long 0x725a
+ 33615 71d9 32 .uleb128 0x32
+ 33616 71da 330F0000 .long 0xf33
+ 33617 71de 03 .byte 0x3
+ 33618 71df 91 .byte 0x91
+ 33619 71e0 905A .sleb128 -4848
+ 33620 71e2 33 .uleb128 0x33
+ 33621 71e3 00000000 .quad .LBB2199
+ 33621 00000000
+ 33622 71eb 00000000 .quad .LBE2199
+ 33622 00000000
+ 33623 71f3 34 .uleb128 0x34
+ 33624 71f4 3F0F0000 .long 0xf3f
+ 33625 71f8 09 .byte 0x9
+ 33626 71f9 03 .byte 0x3
+ 33627 71fa 00000000 .quad mask.7943
+ 33627 00000000
+ 33628 7202 35 .uleb128 0x35
+ 33629 7203 A00D0000 .long 0xda0
+ 33630 7207 00000000 .quad .LBB2200
+ 33630 00000000
+ 33631 720f 00000000 .quad .LBE2200
+ 33631 00000000
+ 33632 7217 02 .byte 0x2
+ 33633 7218 FE04 .value 0x4fe
+ 33634 721a 32 .uleb128 0x32
+ 33635 721b BE0D0000 .long 0xdbe
+ 33636 721f 03 .byte 0x3
+ 33637 7220 91 .byte 0x91
+ 33638 7221 A05A .sleb128 -4832
+ 33639 7223 32 .uleb128 0x32
+ 33640 7224 B20D0000 .long 0xdb2
+ 33641 7228 03 .byte 0x3
+ 33642 7229 91 .byte 0x91
+ 33643 722a B05A .sleb128 -4816
+ 33644 722c 35 .uleb128 0x35
+ 33645 722d CB0D0000 .long 0xdcb
+ 33646 7231 00000000 .quad .LBB2202
+ 33646 00000000
+ 33647 7239 00000000 .quad .LBE2202
+ 33647 00000000
+ 33648 7241 02 .byte 0x2
+ 33649 7242 7501 .value 0x175
+ 33650 7244 32 .uleb128 0x32
+ 33651 7245 E90D0000 .long 0xde9
+ 33652 7249 03 .byte 0x3
+ 33653 724a 91 .byte 0x91
+ 33654 724b C05A .sleb128 -4800
+ 33655 724d 32 .uleb128 0x32
+ 33656 724e DD0D0000 .long 0xddd
+
GAS LISTING /tmp/ccjbMjHD.s page 887
+
+
+ 33657 7252 03 .byte 0x3
+ 33658 7253 91 .byte 0x91
+ 33659 7254 D05A .sleb128 -4784
+ 33660 7256 00 .byte 0x0
+ 33661 7257 00 .byte 0x0
+ 33662 7258 00 .byte 0x0
+ 33663 7259 00 .byte 0x0
+ 33664 725a 35 .uleb128 0x35
+ 33665 725b 210F0000 .long 0xf21
+ 33666 725f 00000000 .quad .LBB2204
+ 33666 00000000
+ 33667 7267 00000000 .quad .LBE2204
+ 33667 00000000
+ 33668 726f 02 .byte 0x2
+ 33669 7270 2106 .value 0x621
+ 33670 7272 32 .uleb128 0x32
+ 33671 7273 330F0000 .long 0xf33
+ 33672 7277 03 .byte 0x3
+ 33673 7278 91 .byte 0x91
+ 33674 7279 E05A .sleb128 -4768
+ 33675 727b 33 .uleb128 0x33
+ 33676 727c 00000000 .quad .LBB2205
+ 33676 00000000
+ 33677 7284 00000000 .quad .LBE2205
+ 33677 00000000
+ 33678 728c 34 .uleb128 0x34
+ 33679 728d 3F0F0000 .long 0xf3f
+ 33680 7291 09 .byte 0x9
+ 33681 7292 03 .byte 0x3
+ 33682 7293 00000000 .quad mask.7943
+ 33682 00000000
+ 33683 729b 35 .uleb128 0x35
+ 33684 729c A00D0000 .long 0xda0
+ 33685 72a0 00000000 .quad .LBB2206
+ 33685 00000000
+ 33686 72a8 00000000 .quad .LBE2206
+ 33686 00000000
+ 33687 72b0 02 .byte 0x2
+ 33688 72b1 FE04 .value 0x4fe
+ 33689 72b3 32 .uleb128 0x32
+ 33690 72b4 BE0D0000 .long 0xdbe
+ 33691 72b8 03 .byte 0x3
+ 33692 72b9 91 .byte 0x91
+ 33693 72ba F05A .sleb128 -4752
+ 33694 72bc 32 .uleb128 0x32
+ 33695 72bd B20D0000 .long 0xdb2
+ 33696 72c1 03 .byte 0x3
+ 33697 72c2 91 .byte 0x91
+ 33698 72c3 805B .sleb128 -4736
+ 33699 72c5 35 .uleb128 0x35
+ 33700 72c6 CB0D0000 .long 0xdcb
+ 33701 72ca 00000000 .quad .LBB2208
+ 33701 00000000
+ 33702 72d2 00000000 .quad .LBE2208
+ 33702 00000000
+ 33703 72da 02 .byte 0x2
+ 33704 72db 7501 .value 0x175
+
GAS LISTING /tmp/ccjbMjHD.s page 888
+
+
+ 33705 72dd 32 .uleb128 0x32
+ 33706 72de E90D0000 .long 0xde9
+ 33707 72e2 03 .byte 0x3
+ 33708 72e3 91 .byte 0x91
+ 33709 72e4 905B .sleb128 -4720
+ 33710 72e6 32 .uleb128 0x32
+ 33711 72e7 DD0D0000 .long 0xddd
+ 33712 72eb 03 .byte 0x3
+ 33713 72ec 91 .byte 0x91
+ 33714 72ed A05B .sleb128 -4704
+ 33715 72ef 00 .byte 0x0
+ 33716 72f0 00 .byte 0x0
+ 33717 72f1 00 .byte 0x0
+ 33718 72f2 00 .byte 0x0
+ 33719 72f3 00 .byte 0x0
+ 33720 72f4 00 .byte 0x0
+ 33721 72f5 31 .uleb128 0x31
+ 33722 72f6 D50B0000 .long 0xbd5
+ 33723 72fa 00000000 .quad .LBB2210
+ 33723 00000000
+ 33724 7302 00000000 .quad .LBE2210
+ 33724 00000000
+ 33725 730a 02 .byte 0x2
+ 33726 730b 2707 .value 0x727
+ 33727 730d D8770000 .long 0x77d8
+ 33728 7311 32 .uleb128 0x32
+ 33729 7312 F30B0000 .long 0xbf3
+ 33730 7316 03 .byte 0x3
+ 33731 7317 91 .byte 0x91
+ 33732 7318 BC5B .sleb128 -4676
+ 33733 731a 32 .uleb128 0x32
+ 33734 731b E70B0000 .long 0xbe7
+ 33735 731f 03 .byte 0x3
+ 33736 7320 91 .byte 0x91
+ 33737 7321 C05B .sleb128 -4672
+ 33738 7323 33 .uleb128 0x33
+ 33739 7324 00000000 .quad .LBB2211
+ 33739 00000000
+ 33740 732c 00000000 .quad .LBE2211
+ 33740 00000000
+ 33741 7334 34 .uleb128 0x34
+ 33742 7335 FF0B0000 .long 0xbff
+ 33743 7339 04 .byte 0x4
+ 33744 733a 76 .byte 0x76
+ 33745 733b E0BB7F .sleb128 -8736
+ 33746 733e 34 .uleb128 0x34
+ 33747 733f 0B0C0000 .long 0xc0b
+ 33748 7343 04 .byte 0x4
+ 33749 7344 76 .byte 0x76
+ 33750 7345 D0BB7F .sleb128 -8752
+ 33751 7348 31 .uleb128 0x31
+ 33752 7349 540C0000 .long 0xc54
+ 33753 734d 00000000 .quad .LBB2212
+ 33753 00000000
+ 33754 7355 00000000 .quad .LBE2212
+ 33754 00000000
+ 33755 735d 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 889
+
+
+ 33756 735e 9106 .value 0x691
+ 33757 7360 B4730000 .long 0x73b4
+ 33758 7364 32 .uleb128 0x32
+ 33759 7365 7E0C0000 .long 0xc7e
+ 33760 7369 03 .byte 0x3
+ 33761 736a 91 .byte 0x91
+ 33762 736b D85B .sleb128 -4648
+ 33763 736d 32 .uleb128 0x32
+ 33764 736e 720C0000 .long 0xc72
+ 33765 7372 03 .byte 0x3
+ 33766 7373 91 .byte 0x91
+ 33767 7374 DC5B .sleb128 -4644
+ 33768 7376 32 .uleb128 0x32
+ 33769 7377 660C0000 .long 0xc66
+ 33770 737b 03 .byte 0x3
+ 33771 737c 91 .byte 0x91
+ 33772 737d E05B .sleb128 -4640
+ 33773 737f 35 .uleb128 0x35
+ 33774 7380 8B0C0000 .long 0xc8b
+ 33775 7384 00000000 .quad .LBB2214
+ 33775 00000000
+ 33776 738c 00000000 .quad .LBE2214
+ 33776 00000000
+ 33777 7394 02 .byte 0x2
+ 33778 7395 0702 .value 0x207
+ 33779 7397 32 .uleb128 0x32
+ 33780 7398 B40C0000 .long 0xcb4
+ 33781 739c 03 .byte 0x3
+ 33782 739d 91 .byte 0x91
+ 33783 739e F85B .sleb128 -4616
+ 33784 73a0 32 .uleb128 0x32
+ 33785 73a1 A90C0000 .long 0xca9
+ 33786 73a5 03 .byte 0x3
+ 33787 73a6 91 .byte 0x91
+ 33788 73a7 FC5B .sleb128 -4612
+ 33789 73a9 32 .uleb128 0x32
+ 33790 73aa 9D0C0000 .long 0xc9d
+ 33791 73ae 03 .byte 0x3
+ 33792 73af 91 .byte 0x91
+ 33793 73b0 805C .sleb128 -4608
+ 33794 73b2 00 .byte 0x0
+ 33795 73b3 00 .byte 0x0
+ 33796 73b4 31 .uleb128 0x31
+ 33797 73b5 C10C0000 .long 0xcc1
+ 33798 73b9 00000000 .quad .LBB2216
+ 33798 00000000
+ 33799 73c1 00000000 .quad .LBE2216
+ 33799 00000000
+ 33800 73c9 02 .byte 0x2
+ 33801 73ca 9206 .value 0x692
+ 33802 73cc 3D760000 .long 0x763d
+ 33803 73d0 32 .uleb128 0x32
+ 33804 73d1 D30C0000 .long 0xcd3
+ 33805 73d5 03 .byte 0x3
+ 33806 73d6 91 .byte 0x91
+ 33807 73d7 905C .sleb128 -4592
+ 33808 73d9 35 .uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s page 890
+
+
+ 33809 73da E00C0000 .long 0xce0
+ 33810 73de 00000000 .quad .LBB2218
+ 33810 00000000
+ 33811 73e6 00000000 .quad .LBE2218
+ 33811 00000000
+ 33812 73ee 02 .byte 0x2
+ 33813 73ef 7D03 .value 0x37d
+ 33814 73f1 32 .uleb128 0x32
+ 33815 73f2 FE0C0000 .long 0xcfe
+ 33816 73f6 03 .byte 0x3
+ 33817 73f7 91 .byte 0x91
+ 33818 73f8 A85C .sleb128 -4568
+ 33819 73fa 32 .uleb128 0x32
+ 33820 73fb F20C0000 .long 0xcf2
+ 33821 73ff 03 .byte 0x3
+ 33822 7400 91 .byte 0x91
+ 33823 7401 B05C .sleb128 -4560
+ 33824 7403 33 .uleb128 0x33
+ 33825 7404 00000000 .quad .LBB2219
+ 33825 00000000
+ 33826 740c 00000000 .quad .LBE2219
+ 33826 00000000
+ 33827 7414 34 .uleb128 0x34
+ 33828 7415 0A0D0000 .long 0xd0a
+ 33829 7419 03 .byte 0x3
+ 33830 741a 91 .byte 0x91
+ 33831 741b 805D .sleb128 -4480
+ 33832 741d 34 .uleb128 0x34
+ 33833 741e 150D0000 .long 0xd15
+ 33834 7422 03 .byte 0x3
+ 33835 7423 91 .byte 0x91
+ 33836 7424 F05C .sleb128 -4496
+ 33837 7426 34 .uleb128 0x34
+ 33838 7427 200D0000 .long 0xd20
+ 33839 742b 03 .byte 0x3
+ 33840 742c 91 .byte 0x91
+ 33841 742d E05C .sleb128 -4512
+ 33842 742f 34 .uleb128 0x34
+ 33843 7430 2C0D0000 .long 0xd2c
+ 33844 7434 03 .byte 0x3
+ 33845 7435 91 .byte 0x91
+ 33846 7436 D05C .sleb128 -4528
+ 33847 7438 34 .uleb128 0x34
+ 33848 7439 380D0000 .long 0xd38
+ 33849 743d 03 .byte 0x3
+ 33850 743e 91 .byte 0x91
+ 33851 743f CC5C .sleb128 -4532
+ 33852 7441 31 .uleb128 0x31
+ 33853 7442 4F0D0000 .long 0xd4f
+ 33854 7446 00000000 .quad .LBB2220
+ 33854 00000000
+ 33855 744e 00000000 .quad .LBE2220
+ 33855 00000000
+ 33856 7456 02 .byte 0x2
+ 33857 7457 5603 .value 0x356
+ 33858 7459 70740000 .long 0x7470
+ 33859 745d 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 891
+
+
+ 33860 745e 6A0D0000 .long 0xd6a
+ 33861 7462 03 .byte 0x3
+ 33862 7463 91 .byte 0x91
+ 33863 7464 905D .sleb128 -4464
+ 33864 7466 32 .uleb128 0x32
+ 33865 7467 600D0000 .long 0xd60
+ 33866 746b 03 .byte 0x3
+ 33867 746c 91 .byte 0x91
+ 33868 746d A05D .sleb128 -4448
+ 33869 746f 00 .byte 0x0
+ 33870 7470 31 .uleb128 0x31
+ 33871 7471 750D0000 .long 0xd75
+ 33872 7475 00000000 .quad .LBB2222
+ 33872 00000000
+ 33873 747d 00000000 .quad .LBE2222
+ 33873 00000000
+ 33874 7485 02 .byte 0x2
+ 33875 7486 5903 .value 0x359
+ 33876 7488 9F740000 .long 0x749f
+ 33877 748c 32 .uleb128 0x32
+ 33878 748d 930D0000 .long 0xd93
+ 33879 7491 03 .byte 0x3
+ 33880 7492 91 .byte 0x91
+ 33881 7493 BC5D .sleb128 -4420
+ 33882 7495 32 .uleb128 0x32
+ 33883 7496 870D0000 .long 0xd87
+ 33884 749a 03 .byte 0x3
+ 33885 749b 91 .byte 0x91
+ 33886 749c C05D .sleb128 -4416
+ 33887 749e 00 .byte 0x0
+ 33888 749f 31 .uleb128 0x31
+ 33889 74a0 4F0D0000 .long 0xd4f
+ 33890 74a4 00000000 .quad .LBB2224
+ 33890 00000000
+ 33891 74ac 00000000 .quad .LBE2224
+ 33891 00000000
+ 33892 74b4 02 .byte 0x2
+ 33893 74b5 5B03 .value 0x35b
+ 33894 74b7 CE740000 .long 0x74ce
+ 33895 74bb 32 .uleb128 0x32
+ 33896 74bc 6A0D0000 .long 0xd6a
+ 33897 74c0 03 .byte 0x3
+ 33898 74c1 91 .byte 0x91
+ 33899 74c2 D05D .sleb128 -4400
+ 33900 74c4 32 .uleb128 0x32
+ 33901 74c5 600D0000 .long 0xd60
+ 33902 74c9 03 .byte 0x3
+ 33903 74ca 91 .byte 0x91
+ 33904 74cb E05D .sleb128 -4384
+ 33905 74cd 00 .byte 0x0
+ 33906 74ce 31 .uleb128 0x31
+ 33907 74cf A00D0000 .long 0xda0
+ 33908 74d3 00000000 .quad .LBB2226
+ 33908 00000000
+ 33909 74db 00000000 .quad .LBE2226
+ 33909 00000000
+ 33910 74e3 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 892
+
+
+ 33911 74e4 6403 .value 0x364
+ 33912 74e6 28750000 .long 0x7528
+ 33913 74ea 32 .uleb128 0x32
+ 33914 74eb BE0D0000 .long 0xdbe
+ 33915 74ef 03 .byte 0x3
+ 33916 74f0 91 .byte 0x91
+ 33917 74f1 F05D .sleb128 -4368
+ 33918 74f3 32 .uleb128 0x32
+ 33919 74f4 B20D0000 .long 0xdb2
+ 33920 74f8 03 .byte 0x3
+ 33921 74f9 91 .byte 0x91
+ 33922 74fa 805E .sleb128 -4352
+ 33923 74fc 35 .uleb128 0x35
+ 33924 74fd CB0D0000 .long 0xdcb
+ 33925 7501 00000000 .quad .LBB2228
+ 33925 00000000
+ 33926 7509 00000000 .quad .LBE2228
+ 33926 00000000
+ 33927 7511 02 .byte 0x2
+ 33928 7512 7501 .value 0x175
+ 33929 7514 32 .uleb128 0x32
+ 33930 7515 E90D0000 .long 0xde9
+ 33931 7519 03 .byte 0x3
+ 33932 751a 91 .byte 0x91
+ 33933 751b 905E .sleb128 -4336
+ 33934 751d 32 .uleb128 0x32
+ 33935 751e DD0D0000 .long 0xddd
+ 33936 7522 03 .byte 0x3
+ 33937 7523 91 .byte 0x91
+ 33938 7524 A05E .sleb128 -4320
+ 33939 7526 00 .byte 0x0
+ 33940 7527 00 .byte 0x0
+ 33941 7528 31 .uleb128 0x31
+ 33942 7529 FB0D0000 .long 0xdfb
+ 33943 752d 00000000 .quad .LBB2230
+ 33943 00000000
+ 33944 7535 00000000 .quad .LBE2230
+ 33944 00000000
+ 33945 753d 02 .byte 0x2
+ 33946 753e 6603 .value 0x366
+ 33947 7540 57750000 .long 0x7557
+ 33948 7544 32 .uleb128 0x32
+ 33949 7545 160E0000 .long 0xe16
+ 33950 7549 03 .byte 0x3
+ 33951 754a 91 .byte 0x91
+ 33952 754b B05E .sleb128 -4304
+ 33953 754d 32 .uleb128 0x32
+ 33954 754e 0C0E0000 .long 0xe0c
+ 33955 7552 03 .byte 0x3
+ 33956 7553 91 .byte 0x91
+ 33957 7554 C05E .sleb128 -4288
+ 33958 7556 00 .byte 0x0
+ 33959 7557 31 .uleb128 0x31
+ 33960 7558 A00D0000 .long 0xda0
+ 33961 755c 00000000 .quad .LBB2232
+ 33961 00000000
+ 33962 7564 00000000 .quad .LBE2232
+
GAS LISTING /tmp/ccjbMjHD.s page 893
+
+
+ 33962 00000000
+ 33963 756c 02 .byte 0x2
+ 33964 756d 6803 .value 0x368
+ 33965 756f B1750000 .long 0x75b1
+ 33966 7573 32 .uleb128 0x32
+ 33967 7574 BE0D0000 .long 0xdbe
+ 33968 7578 03 .byte 0x3
+ 33969 7579 91 .byte 0x91
+ 33970 757a D05E .sleb128 -4272
+ 33971 757c 32 .uleb128 0x32
+ 33972 757d B20D0000 .long 0xdb2
+ 33973 7581 03 .byte 0x3
+ 33974 7582 91 .byte 0x91
+ 33975 7583 E05E .sleb128 -4256
+ 33976 7585 35 .uleb128 0x35
+ 33977 7586 CB0D0000 .long 0xdcb
+ 33978 758a 00000000 .quad .LBB2234
+ 33978 00000000
+ 33979 7592 00000000 .quad .LBE2234
+ 33979 00000000
+ 33980 759a 02 .byte 0x2
+ 33981 759b 7501 .value 0x175
+ 33982 759d 32 .uleb128 0x32
+ 33983 759e E90D0000 .long 0xde9
+ 33984 75a2 03 .byte 0x3
+ 33985 75a3 91 .byte 0x91
+ 33986 75a4 F05E .sleb128 -4240
+ 33987 75a6 32 .uleb128 0x32
+ 33988 75a7 DD0D0000 .long 0xddd
+ 33989 75ab 03 .byte 0x3
+ 33990 75ac 91 .byte 0x91
+ 33991 75ad 805F .sleb128 -4224
+ 33992 75af 00 .byte 0x0
+ 33993 75b0 00 .byte 0x0
+ 33994 75b1 31 .uleb128 0x31
+ 33995 75b2 FB0D0000 .long 0xdfb
+ 33996 75b6 00000000 .quad .LBB2236
+ 33996 00000000
+ 33997 75be 00000000 .quad .LBE2236
+ 33997 00000000
+ 33998 75c6 02 .byte 0x2
+ 33999 75c7 6A03 .value 0x36a
+ 34000 75c9 E0750000 .long 0x75e0
+ 34001 75cd 32 .uleb128 0x32
+ 34002 75ce 160E0000 .long 0xe16
+ 34003 75d2 03 .byte 0x3
+ 34004 75d3 91 .byte 0x91
+ 34005 75d4 905F .sleb128 -4208
+ 34006 75d6 32 .uleb128 0x32
+ 34007 75d7 0C0E0000 .long 0xe0c
+ 34008 75db 03 .byte 0x3
+ 34009 75dc 91 .byte 0x91
+ 34010 75dd A05F .sleb128 -4192
+ 34011 75df 00 .byte 0x0
+ 34012 75e0 31 .uleb128 0x31
+ 34013 75e1 210E0000 .long 0xe21
+ 34014 75e5 00000000 .quad .LBB2238
+
GAS LISTING /tmp/ccjbMjHD.s page 894
+
+
+ 34014 00000000
+ 34015 75ed 00000000 .quad .LBE2238
+ 34015 00000000
+ 34016 75f5 02 .byte 0x2
+ 34017 75f6 6C03 .value 0x36c
+ 34018 75f8 0F760000 .long 0x760f
+ 34019 75fc 32 .uleb128 0x32
+ 34020 75fd 3E0E0000 .long 0xe3e
+ 34021 7601 03 .byte 0x3
+ 34022 7602 91 .byte 0x91
+ 34023 7603 B05F .sleb128 -4176
+ 34024 7605 32 .uleb128 0x32
+ 34025 7606 330E0000 .long 0xe33
+ 34026 760a 03 .byte 0x3
+ 34027 760b 91 .byte 0x91
+ 34028 760c C05F .sleb128 -4160
+ 34029 760e 00 .byte 0x0
+ 34030 760f 35 .uleb128 0x35
+ 34031 7610 4F0D0000 .long 0xd4f
+ 34032 7614 00000000 .quad .LBB2240
+ 34032 00000000
+ 34033 761c 00000000 .quad .LBE2240
+ 34033 00000000
+ 34034 7624 02 .byte 0x2
+ 34035 7625 6E03 .value 0x36e
+ 34036 7627 32 .uleb128 0x32
+ 34037 7628 6A0D0000 .long 0xd6a
+ 34038 762c 03 .byte 0x3
+ 34039 762d 91 .byte 0x91
+ 34040 762e D05F .sleb128 -4144
+ 34041 7630 32 .uleb128 0x32
+ 34042 7631 600D0000 .long 0xd60
+ 34043 7635 03 .byte 0x3
+ 34044 7636 91 .byte 0x91
+ 34045 7637 E05F .sleb128 -4128
+ 34046 7639 00 .byte 0x0
+ 34047 763a 00 .byte 0x0
+ 34048 763b 00 .byte 0x0
+ 34049 763c 00 .byte 0x0
+ 34050 763d 36 .uleb128 0x36
+ 34051 763e 00000000 .quad .LBB2242
+ 34051 00000000
+ 34052 7646 00000000 .quad .LBE2242
+ 34052 00000000
+ 34053 764e 5D760000 .long 0x765d
+ 34054 7652 34 .uleb128 0x34
+ 34055 7653 1C0C0000 .long 0xc1c
+ 34056 7657 04 .byte 0x4
+ 34057 7658 91 .byte 0x91
+ 34058 7659 D0BE7F .sleb128 -8368
+ 34059 765c 00 .byte 0x0
+ 34060 765d 31 .uleb128 0x31
+ 34061 765e 4A0E0000 .long 0xe4a
+ 34062 7662 00000000 .quad .LBB2243
+ 34062 00000000
+ 34063 766a 00000000 .quad .LBE2243
+ 34063 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 895
+
+
+ 34064 7672 02 .byte 0x2
+ 34065 7673 9406 .value 0x694
+ 34066 7675 FA760000 .long 0x76fa
+ 34067 7679 32 .uleb128 0x32
+ 34068 767a 5C0E0000 .long 0xe5c
+ 34069 767e 03 .byte 0x3
+ 34070 767f 91 .byte 0x91
+ 34071 7680 F05F .sleb128 -4112
+ 34072 7682 33 .uleb128 0x33
+ 34073 7683 00000000 .quad .LBB2244
+ 34073 00000000
+ 34074 768b 00000000 .quad .LBE2244
+ 34074 00000000
+ 34075 7693 34 .uleb128 0x34
+ 34076 7694 680E0000 .long 0xe68
+ 34077 7698 09 .byte 0x9
+ 34078 7699 03 .byte 0x3
+ 34079 769a 00000000 .quad ShiftRowTable.7385
+ 34079 00000000
+ 34080 76a2 35 .uleb128 0x35
+ 34081 76a3 A00D0000 .long 0xda0
+ 34082 76a7 00000000 .quad .LBB2245
+ 34082 00000000
+ 34083 76af 00000000 .quad .LBE2245
+ 34083 00000000
+ 34084 76b7 02 .byte 0x2
+ 34085 76b8 9B02 .value 0x29b
+ 34086 76ba 32 .uleb128 0x32
+ 34087 76bb BE0D0000 .long 0xdbe
+ 34088 76bf 03 .byte 0x3
+ 34089 76c0 91 .byte 0x91
+ 34090 76c1 8060 .sleb128 -4096
+ 34091 76c3 32 .uleb128 0x32
+ 34092 76c4 B20D0000 .long 0xdb2
+ 34093 76c8 03 .byte 0x3
+ 34094 76c9 91 .byte 0x91
+ 34095 76ca 9060 .sleb128 -4080
+ 34096 76cc 35 .uleb128 0x35
+ 34097 76cd CB0D0000 .long 0xdcb
+ 34098 76d1 00000000 .quad .LBB2247
+ 34098 00000000
+ 34099 76d9 00000000 .quad .LBE2247
+ 34099 00000000
+ 34100 76e1 02 .byte 0x2
+ 34101 76e2 7501 .value 0x175
+ 34102 76e4 32 .uleb128 0x32
+ 34103 76e5 E90D0000 .long 0xde9
+ 34104 76e9 03 .byte 0x3
+ 34105 76ea 91 .byte 0x91
+ 34106 76eb A060 .sleb128 -4064
+ 34107 76ed 32 .uleb128 0x32
+ 34108 76ee DD0D0000 .long 0xddd
+ 34109 76f2 03 .byte 0x3
+ 34110 76f3 91 .byte 0x91
+ 34111 76f4 B060 .sleb128 -4048
+ 34112 76f6 00 .byte 0x0
+ 34113 76f7 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 896
+
+
+ 34114 76f8 00 .byte 0x0
+ 34115 76f9 00 .byte 0x0
+ 34116 76fa 36 .uleb128 0x36
+ 34117 76fb 00000000 .quad .LBB2249
+ 34117 00000000
+ 34118 7703 00000000 .quad .LBE2249
+ 34118 00000000
+ 34119 770b 1A770000 .long 0x771a
+ 34120 770f 34 .uleb128 0x34
+ 34121 7710 2C0C0000 .long 0xc2c
+ 34122 7714 04 .byte 0x4
+ 34123 7715 91 .byte 0x91
+ 34124 7716 C0BE7F .sleb128 -8384
+ 34125 7719 00 .byte 0x0
+ 34126 771a 31 .uleb128 0x31
+ 34127 771b 860E0000 .long 0xe86
+ 34128 771f 00000000 .quad .LBB2250
+ 34128 00000000
+ 34129 7727 00000000 .quad .LBE2250
+ 34129 00000000
+ 34130 772f 02 .byte 0x2
+ 34131 7730 9606 .value 0x696
+ 34132 7732 49770000 .long 0x7749
+ 34133 7736 32 .uleb128 0x32
+ 34134 7737 A10E0000 .long 0xea1
+ 34135 773b 03 .byte 0x3
+ 34136 773c 91 .byte 0x91
+ 34137 773d C060 .sleb128 -4032
+ 34138 773f 32 .uleb128 0x32
+ 34139 7740 970E0000 .long 0xe97
+ 34140 7744 03 .byte 0x3
+ 34141 7745 91 .byte 0x91
+ 34142 7746 D060 .sleb128 -4016
+ 34143 7748 00 .byte 0x0
+ 34144 7749 36 .uleb128 0x36
+ 34145 774a 00000000 .quad .LBB2252
+ 34145 00000000
+ 34146 7752 00000000 .quad .LBE2252
+ 34146 00000000
+ 34147 775a 69770000 .long 0x7769
+ 34148 775e 34 .uleb128 0x34
+ 34149 775f 3C0C0000 .long 0xc3c
+ 34150 7763 04 .byte 0x4
+ 34151 7764 91 .byte 0x91
+ 34152 7765 B0BE7F .sleb128 -8400
+ 34153 7768 00 .byte 0x0
+ 34154 7769 31 .uleb128 0x31
+ 34155 776a AC0E0000 .long 0xeac
+ 34156 776e 00000000 .quad .LBB2253
+ 34156 00000000
+ 34157 7776 00000000 .quad .LBE2253
+ 34157 00000000
+ 34158 777e 02 .byte 0x2
+ 34159 777f 9806 .value 0x698
+ 34160 7781 BA770000 .long 0x77ba
+ 34161 7785 32 .uleb128 0x32
+ 34162 7786 BE0E0000 .long 0xebe
+
GAS LISTING /tmp/ccjbMjHD.s page 897
+
+
+ 34163 778a 03 .byte 0x3
+ 34164 778b 91 .byte 0x91
+ 34165 778c E060 .sleb128 -4000
+ 34166 778e 35 .uleb128 0x35
+ 34167 778f CB0E0000 .long 0xecb
+ 34168 7793 00000000 .quad .LBB2255
+ 34168 00000000
+ 34169 779b 00000000 .quad .LBE2255
+ 34169 00000000
+ 34170 77a3 02 .byte 0x2
+ 34171 77a4 4905 .value 0x549
+ 34172 77a6 32 .uleb128 0x32
+ 34173 77a7 E90E0000 .long 0xee9
+ 34174 77ab 03 .byte 0x3
+ 34175 77ac 91 .byte 0x91
+ 34176 77ad FC60 .sleb128 -3972
+ 34177 77af 32 .uleb128 0x32
+ 34178 77b0 DD0E0000 .long 0xedd
+ 34179 77b4 03 .byte 0x3
+ 34180 77b5 91 .byte 0x91
+ 34181 77b6 8061 .sleb128 -3968
+ 34182 77b8 00 .byte 0x0
+ 34183 77b9 00 .byte 0x0
+ 34184 77ba 33 .uleb128 0x33
+ 34185 77bb 00000000 .quad .LBB2257
+ 34185 00000000
+ 34186 77c3 00000000 .quad .LBE2257
+ 34186 00000000
+ 34187 77cb 34 .uleb128 0x34
+ 34188 77cc 480C0000 .long 0xc48
+ 34189 77d0 04 .byte 0x4
+ 34190 77d1 91 .byte 0x91
+ 34191 77d2 A0BE7F .sleb128 -8416
+ 34192 77d5 00 .byte 0x0
+ 34193 77d6 00 .byte 0x0
+ 34194 77d7 00 .byte 0x0
+ 34195 77d8 31 .uleb128 0x31
+ 34196 77d9 AC0E0000 .long 0xeac
+ 34197 77dd 00000000 .quad .LBB2258
+ 34197 00000000
+ 34198 77e5 00000000 .quad .LBE2258
+ 34198 00000000
+ 34199 77ed 02 .byte 0x2
+ 34200 77ee 2A07 .value 0x72a
+ 34201 77f0 29780000 .long 0x7829
+ 34202 77f4 32 .uleb128 0x32
+ 34203 77f5 BE0E0000 .long 0xebe
+ 34204 77f9 03 .byte 0x3
+ 34205 77fa 91 .byte 0x91
+ 34206 77fb 9061 .sleb128 -3952
+ 34207 77fd 35 .uleb128 0x35
+ 34208 77fe CB0E0000 .long 0xecb
+ 34209 7802 00000000 .quad .LBB2260
+ 34209 00000000
+ 34210 780a 00000000 .quad .LBE2260
+ 34210 00000000
+ 34211 7812 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 898
+
+
+ 34212 7813 4905 .value 0x549
+ 34213 7815 32 .uleb128 0x32
+ 34214 7816 E90E0000 .long 0xee9
+ 34215 781a 03 .byte 0x3
+ 34216 781b 91 .byte 0x91
+ 34217 781c AC61 .sleb128 -3924
+ 34218 781e 32 .uleb128 0x32
+ 34219 781f DD0E0000 .long 0xedd
+ 34220 7823 03 .byte 0x3
+ 34221 7824 91 .byte 0x91
+ 34222 7825 B061 .sleb128 -3920
+ 34223 7827 00 .byte 0x0
+ 34224 7828 00 .byte 0x0
+ 34225 7829 31 .uleb128 0x31
+ 34226 782a 71560000 .long 0x5671
+ 34227 782e 00000000 .quad .LBB2262
+ 34227 00000000
+ 34228 7836 00000000 .quad .LBE2262
+ 34228 00000000
+ 34229 783e 02 .byte 0x2
+ 34230 783f 3207 .value 0x732
+ 34231 7841 F3780000 .long 0x78f3
+ 34232 7845 32 .uleb128 0x32
+ 34233 7846 8F560000 .long 0x568f
+ 34234 784a 03 .byte 0x3
+ 34235 784b 91 .byte 0x91
+ 34236 784c CC61 .sleb128 -3892
+ 34237 784e 32 .uleb128 0x32
+ 34238 784f 83560000 .long 0x5683
+ 34239 7853 03 .byte 0x3
+ 34240 7854 91 .byte 0x91
+ 34241 7855 D061 .sleb128 -3888
+ 34242 7857 33 .uleb128 0x33
+ 34243 7858 00000000 .quad .LBB2263
+ 34243 00000000
+ 34244 7860 00000000 .quad .LBE2263
+ 34244 00000000
+ 34245 7868 34 .uleb128 0x34
+ 34246 7869 9B560000 .long 0x569b
+ 34247 786d 04 .byte 0x4
+ 34248 786e 91 .byte 0x91
+ 34249 786f F0BE7F .sleb128 -8336
+ 34250 7872 34 .uleb128 0x34
+ 34251 7873 A5560000 .long 0x56a5
+ 34252 7877 03 .byte 0x3
+ 34253 7878 91 .byte 0x91
+ 34254 7879 F061 .sleb128 -3856
+ 34255 787b 34 .uleb128 0x34
+ 34256 787c B1560000 .long 0x56b1
+ 34257 7880 03 .byte 0x3
+ 34258 7881 91 .byte 0x91
+ 34259 7882 EC61 .sleb128 -3860
+ 34260 7884 31 .uleb128 0x31
+ 34261 7885 BE560000 .long 0x56be
+ 34262 7889 00000000 .quad .LBB2264
+ 34262 00000000
+ 34263 7891 00000000 .quad .LBE2264
+
GAS LISTING /tmp/ccjbMjHD.s page 899
+
+
+ 34263 00000000
+ 34264 7899 02 .byte 0x2
+ 34265 789a 5F06 .value 0x65f
+ 34266 789c CF780000 .long 0x78cf
+ 34267 78a0 32 .uleb128 0x32
+ 34268 78a1 D0560000 .long 0x56d0
+ 34269 78a5 03 .byte 0x3
+ 34270 78a6 91 .byte 0x91
+ 34271 78a7 F461 .sleb128 -3852
+ 34272 78a9 33 .uleb128 0x33
+ 34273 78aa 00000000 .quad .LBB2265
+ 34273 00000000
+ 34274 78b2 00000000 .quad .LBE2265
+ 34274 00000000
+ 34275 78ba 34 .uleb128 0x34
+ 34276 78bb DA560000 .long 0x56da
+ 34277 78bf 04 .byte 0x4
+ 34278 78c0 91 .byte 0x91
+ 34279 78c1 E0BE7F .sleb128 -8352
+ 34280 78c4 34 .uleb128 0x34
+ 34281 78c5 E6560000 .long 0x56e6
+ 34282 78c9 03 .byte 0x3
+ 34283 78ca 91 .byte 0x91
+ 34284 78cb F861 .sleb128 -3848
+ 34285 78cd 00 .byte 0x0
+ 34286 78ce 00 .byte 0x0
+ 34287 78cf 35 .uleb128 0x35
+ 34288 78d0 F2560000 .long 0x56f2
+ 34289 78d4 00000000 .quad .LBB2266
+ 34289 00000000
+ 34290 78dc 00000000 .quad .LBE2266
+ 34290 00000000
+ 34291 78e4 02 .byte 0x2
+ 34292 78e5 6006 .value 0x660
+ 34293 78e7 32 .uleb128 0x32
+ 34294 78e8 04570000 .long 0x5704
+ 34295 78ec 03 .byte 0x3
+ 34296 78ed 91 .byte 0x91
+ 34297 78ee FC61 .sleb128 -3844
+ 34298 78f0 00 .byte 0x0
+ 34299 78f1 00 .byte 0x0
+ 34300 78f2 00 .byte 0x0
+ 34301 78f3 31 .uleb128 0x31
+ 34302 78f4 F60E0000 .long 0xef6
+ 34303 78f8 00000000 .quad .LBB2268
+ 34303 00000000
+ 34304 7900 00000000 .quad .LBE2268
+ 34304 00000000
+ 34305 7908 02 .byte 0x2
+ 34306 7909 3407 .value 0x734
+ 34307 790b 087B0000 .long 0x7b08
+ 34308 790f 32 .uleb128 0x32
+ 34309 7910 080F0000 .long 0xf08
+ 34310 7914 03 .byte 0x3
+ 34311 7915 91 .byte 0x91
+ 34312 7916 8062 .sleb128 -3840
+ 34313 7918 33 .uleb128 0x33
+
GAS LISTING /tmp/ccjbMjHD.s page 900
+
+
+ 34314 7919 00000000 .quad .LBB2269
+ 34314 00000000
+ 34315 7921 00000000 .quad .LBE2269
+ 34315 00000000
+ 34316 7929 34 .uleb128 0x34
+ 34317 792a 140F0000 .long 0xf14
+ 34318 792e 04 .byte 0x4
+ 34319 792f 76 .byte 0x76
+ 34320 7930 F0BB7F .sleb128 -8720
+ 34321 7933 31 .uleb128 0x31
+ 34322 7934 210F0000 .long 0xf21
+ 34323 7938 00000000 .quad .LBB2270
+ 34323 00000000
+ 34324 7940 00000000 .quad .LBE2270
+ 34324 00000000
+ 34325 7948 02 .byte 0x2
+ 34326 7949 1F06 .value 0x61f
+ 34327 794b D0790000 .long 0x79d0
+ 34328 794f 32 .uleb128 0x32
+ 34329 7950 330F0000 .long 0xf33
+ 34330 7954 03 .byte 0x3
+ 34331 7955 91 .byte 0x91
+ 34332 7956 9062 .sleb128 -3824
+ 34333 7958 33 .uleb128 0x33
+ 34334 7959 00000000 .quad .LBB2271
+ 34334 00000000
+ 34335 7961 00000000 .quad .LBE2271
+ 34335 00000000
+ 34336 7969 34 .uleb128 0x34
+ 34337 796a 3F0F0000 .long 0xf3f
+ 34338 796e 09 .byte 0x9
+ 34339 796f 03 .byte 0x3
+ 34340 7970 00000000 .quad mask.7943
+ 34340 00000000
+ 34341 7978 35 .uleb128 0x35
+ 34342 7979 A00D0000 .long 0xda0
+ 34343 797d 00000000 .quad .LBB2272
+ 34343 00000000
+ 34344 7985 00000000 .quad .LBE2272
+ 34344 00000000
+ 34345 798d 02 .byte 0x2
+ 34346 798e FE04 .value 0x4fe
+ 34347 7990 32 .uleb128 0x32
+ 34348 7991 BE0D0000 .long 0xdbe
+ 34349 7995 03 .byte 0x3
+ 34350 7996 91 .byte 0x91
+ 34351 7997 A062 .sleb128 -3808
+ 34352 7999 32 .uleb128 0x32
+ 34353 799a B20D0000 .long 0xdb2
+ 34354 799e 03 .byte 0x3
+ 34355 799f 91 .byte 0x91
+ 34356 79a0 B062 .sleb128 -3792
+ 34357 79a2 35 .uleb128 0x35
+ 34358 79a3 CB0D0000 .long 0xdcb
+ 34359 79a7 00000000 .quad .LBB2274
+ 34359 00000000
+ 34360 79af 00000000 .quad .LBE2274
+
GAS LISTING /tmp/ccjbMjHD.s page 901
+
+
+ 34360 00000000
+ 34361 79b7 02 .byte 0x2
+ 34362 79b8 7501 .value 0x175
+ 34363 79ba 32 .uleb128 0x32
+ 34364 79bb E90D0000 .long 0xde9
+ 34365 79bf 03 .byte 0x3
+ 34366 79c0 91 .byte 0x91
+ 34367 79c1 C062 .sleb128 -3776
+ 34368 79c3 32 .uleb128 0x32
+ 34369 79c4 DD0D0000 .long 0xddd
+ 34370 79c8 03 .byte 0x3
+ 34371 79c9 91 .byte 0x91
+ 34372 79ca D062 .sleb128 -3760
+ 34373 79cc 00 .byte 0x0
+ 34374 79cd 00 .byte 0x0
+ 34375 79ce 00 .byte 0x0
+ 34376 79cf 00 .byte 0x0
+ 34377 79d0 31 .uleb128 0x31
+ 34378 79d1 210F0000 .long 0xf21
+ 34379 79d5 00000000 .quad .LBB2276
+ 34379 00000000
+ 34380 79dd 00000000 .quad .LBE2276
+ 34380 00000000
+ 34381 79e5 02 .byte 0x2
+ 34382 79e6 2006 .value 0x620
+ 34383 79e8 6D7A0000 .long 0x7a6d
+ 34384 79ec 32 .uleb128 0x32
+ 34385 79ed 330F0000 .long 0xf33
+ 34386 79f1 03 .byte 0x3
+ 34387 79f2 91 .byte 0x91
+ 34388 79f3 E062 .sleb128 -3744
+ 34389 79f5 33 .uleb128 0x33
+ 34390 79f6 00000000 .quad .LBB2277
+ 34390 00000000
+ 34391 79fe 00000000 .quad .LBE2277
+ 34391 00000000
+ 34392 7a06 34 .uleb128 0x34
+ 34393 7a07 3F0F0000 .long 0xf3f
+ 34394 7a0b 09 .byte 0x9
+ 34395 7a0c 03 .byte 0x3
+ 34396 7a0d 00000000 .quad mask.7943
+ 34396 00000000
+ 34397 7a15 35 .uleb128 0x35
+ 34398 7a16 A00D0000 .long 0xda0
+ 34399 7a1a 00000000 .quad .LBB2278
+ 34399 00000000
+ 34400 7a22 00000000 .quad .LBE2278
+ 34400 00000000
+ 34401 7a2a 02 .byte 0x2
+ 34402 7a2b FE04 .value 0x4fe
+ 34403 7a2d 32 .uleb128 0x32
+ 34404 7a2e BE0D0000 .long 0xdbe
+ 34405 7a32 03 .byte 0x3
+ 34406 7a33 91 .byte 0x91
+ 34407 7a34 F062 .sleb128 -3728
+ 34408 7a36 32 .uleb128 0x32
+ 34409 7a37 B20D0000 .long 0xdb2
+
GAS LISTING /tmp/ccjbMjHD.s page 902
+
+
+ 34410 7a3b 03 .byte 0x3
+ 34411 7a3c 91 .byte 0x91
+ 34412 7a3d 8063 .sleb128 -3712
+ 34413 7a3f 35 .uleb128 0x35
+ 34414 7a40 CB0D0000 .long 0xdcb
+ 34415 7a44 00000000 .quad .LBB2280
+ 34415 00000000
+ 34416 7a4c 00000000 .quad .LBE2280
+ 34416 00000000
+ 34417 7a54 02 .byte 0x2
+ 34418 7a55 7501 .value 0x175
+ 34419 7a57 32 .uleb128 0x32
+ 34420 7a58 E90D0000 .long 0xde9
+ 34421 7a5c 03 .byte 0x3
+ 34422 7a5d 91 .byte 0x91
+ 34423 7a5e 9063 .sleb128 -3696
+ 34424 7a60 32 .uleb128 0x32
+ 34425 7a61 DD0D0000 .long 0xddd
+ 34426 7a65 03 .byte 0x3
+ 34427 7a66 91 .byte 0x91
+ 34428 7a67 A063 .sleb128 -3680
+ 34429 7a69 00 .byte 0x0
+ 34430 7a6a 00 .byte 0x0
+ 34431 7a6b 00 .byte 0x0
+ 34432 7a6c 00 .byte 0x0
+ 34433 7a6d 35 .uleb128 0x35
+ 34434 7a6e 210F0000 .long 0xf21
+ 34435 7a72 00000000 .quad .LBB2282
+ 34435 00000000
+ 34436 7a7a 00000000 .quad .LBE2282
+ 34436 00000000
+ 34437 7a82 02 .byte 0x2
+ 34438 7a83 2106 .value 0x621
+ 34439 7a85 32 .uleb128 0x32
+ 34440 7a86 330F0000 .long 0xf33
+ 34441 7a8a 03 .byte 0x3
+ 34442 7a8b 91 .byte 0x91
+ 34443 7a8c B063 .sleb128 -3664
+ 34444 7a8e 33 .uleb128 0x33
+ 34445 7a8f 00000000 .quad .LBB2283
+ 34445 00000000
+ 34446 7a97 00000000 .quad .LBE2283
+ 34446 00000000
+ 34447 7a9f 34 .uleb128 0x34
+ 34448 7aa0 3F0F0000 .long 0xf3f
+ 34449 7aa4 09 .byte 0x9
+ 34450 7aa5 03 .byte 0x3
+ 34451 7aa6 00000000 .quad mask.7943
+ 34451 00000000
+ 34452 7aae 35 .uleb128 0x35
+ 34453 7aaf A00D0000 .long 0xda0
+ 34454 7ab3 00000000 .quad .LBB2284
+ 34454 00000000
+ 34455 7abb 00000000 .quad .LBE2284
+ 34455 00000000
+ 34456 7ac3 02 .byte 0x2
+ 34457 7ac4 FE04 .value 0x4fe
+
GAS LISTING /tmp/ccjbMjHD.s page 903
+
+
+ 34458 7ac6 32 .uleb128 0x32
+ 34459 7ac7 BE0D0000 .long 0xdbe
+ 34460 7acb 03 .byte 0x3
+ 34461 7acc 91 .byte 0x91
+ 34462 7acd C063 .sleb128 -3648
+ 34463 7acf 32 .uleb128 0x32
+ 34464 7ad0 B20D0000 .long 0xdb2
+ 34465 7ad4 03 .byte 0x3
+ 34466 7ad5 91 .byte 0x91
+ 34467 7ad6 D063 .sleb128 -3632
+ 34468 7ad8 35 .uleb128 0x35
+ 34469 7ad9 CB0D0000 .long 0xdcb
+ 34470 7add 00000000 .quad .LBB2286
+ 34470 00000000
+ 34471 7ae5 00000000 .quad .LBE2286
+ 34471 00000000
+ 34472 7aed 02 .byte 0x2
+ 34473 7aee 7501 .value 0x175
+ 34474 7af0 32 .uleb128 0x32
+ 34475 7af1 E90D0000 .long 0xde9
+ 34476 7af5 03 .byte 0x3
+ 34477 7af6 91 .byte 0x91
+ 34478 7af7 E063 .sleb128 -3616
+ 34479 7af9 32 .uleb128 0x32
+ 34480 7afa DD0D0000 .long 0xddd
+ 34481 7afe 03 .byte 0x3
+ 34482 7aff 91 .byte 0x91
+ 34483 7b00 F063 .sleb128 -3600
+ 34484 7b02 00 .byte 0x0
+ 34485 7b03 00 .byte 0x0
+ 34486 7b04 00 .byte 0x0
+ 34487 7b05 00 .byte 0x0
+ 34488 7b06 00 .byte 0x0
+ 34489 7b07 00 .byte 0x0
+ 34490 7b08 31 .uleb128 0x31
+ 34491 7b09 F60E0000 .long 0xef6
+ 34492 7b0d 00000000 .quad .LBB2288
+ 34492 00000000
+ 34493 7b15 00000000 .quad .LBE2288
+ 34493 00000000
+ 34494 7b1d 02 .byte 0x2
+ 34495 7b1e 3607 .value 0x736
+ 34496 7b20 1D7D0000 .long 0x7d1d
+ 34497 7b24 32 .uleb128 0x32
+ 34498 7b25 080F0000 .long 0xf08
+ 34499 7b29 03 .byte 0x3
+ 34500 7b2a 91 .byte 0x91
+ 34501 7b2b 8064 .sleb128 -3584
+ 34502 7b2d 33 .uleb128 0x33
+ 34503 7b2e 00000000 .quad .LBB2289
+ 34503 00000000
+ 34504 7b36 00000000 .quad .LBE2289
+ 34504 00000000
+ 34505 7b3e 34 .uleb128 0x34
+ 34506 7b3f 140F0000 .long 0xf14
+ 34507 7b43 04 .byte 0x4
+ 34508 7b44 76 .byte 0x76
+
GAS LISTING /tmp/ccjbMjHD.s page 904
+
+
+ 34509 7b45 80BC7F .sleb128 -8704
+ 34510 7b48 31 .uleb128 0x31
+ 34511 7b49 210F0000 .long 0xf21
+ 34512 7b4d 00000000 .quad .LBB2290
+ 34512 00000000
+ 34513 7b55 00000000 .quad .LBE2290
+ 34513 00000000
+ 34514 7b5d 02 .byte 0x2
+ 34515 7b5e 1F06 .value 0x61f
+ 34516 7b60 E57B0000 .long 0x7be5
+ 34517 7b64 32 .uleb128 0x32
+ 34518 7b65 330F0000 .long 0xf33
+ 34519 7b69 03 .byte 0x3
+ 34520 7b6a 91 .byte 0x91
+ 34521 7b6b 9064 .sleb128 -3568
+ 34522 7b6d 33 .uleb128 0x33
+ 34523 7b6e 00000000 .quad .LBB2291
+ 34523 00000000
+ 34524 7b76 00000000 .quad .LBE2291
+ 34524 00000000
+ 34525 7b7e 34 .uleb128 0x34
+ 34526 7b7f 3F0F0000 .long 0xf3f
+ 34527 7b83 09 .byte 0x9
+ 34528 7b84 03 .byte 0x3
+ 34529 7b85 00000000 .quad mask.7943
+ 34529 00000000
+ 34530 7b8d 35 .uleb128 0x35
+ 34531 7b8e A00D0000 .long 0xda0
+ 34532 7b92 00000000 .quad .LBB2292
+ 34532 00000000
+ 34533 7b9a 00000000 .quad .LBE2292
+ 34533 00000000
+ 34534 7ba2 02 .byte 0x2
+ 34535 7ba3 FE04 .value 0x4fe
+ 34536 7ba5 32 .uleb128 0x32
+ 34537 7ba6 BE0D0000 .long 0xdbe
+ 34538 7baa 03 .byte 0x3
+ 34539 7bab 91 .byte 0x91
+ 34540 7bac A064 .sleb128 -3552
+ 34541 7bae 32 .uleb128 0x32
+ 34542 7baf B20D0000 .long 0xdb2
+ 34543 7bb3 03 .byte 0x3
+ 34544 7bb4 91 .byte 0x91
+ 34545 7bb5 B064 .sleb128 -3536
+ 34546 7bb7 35 .uleb128 0x35
+ 34547 7bb8 CB0D0000 .long 0xdcb
+ 34548 7bbc 00000000 .quad .LBB2294
+ 34548 00000000
+ 34549 7bc4 00000000 .quad .LBE2294
+ 34549 00000000
+ 34550 7bcc 02 .byte 0x2
+ 34551 7bcd 7501 .value 0x175
+ 34552 7bcf 32 .uleb128 0x32
+ 34553 7bd0 E90D0000 .long 0xde9
+ 34554 7bd4 03 .byte 0x3
+ 34555 7bd5 91 .byte 0x91
+ 34556 7bd6 C064 .sleb128 -3520
+
GAS LISTING /tmp/ccjbMjHD.s page 905
+
+
+ 34557 7bd8 32 .uleb128 0x32
+ 34558 7bd9 DD0D0000 .long 0xddd
+ 34559 7bdd 03 .byte 0x3
+ 34560 7bde 91 .byte 0x91
+ 34561 7bdf D064 .sleb128 -3504
+ 34562 7be1 00 .byte 0x0
+ 34563 7be2 00 .byte 0x0
+ 34564 7be3 00 .byte 0x0
+ 34565 7be4 00 .byte 0x0
+ 34566 7be5 31 .uleb128 0x31
+ 34567 7be6 210F0000 .long 0xf21
+ 34568 7bea 00000000 .quad .LBB2296
+ 34568 00000000
+ 34569 7bf2 00000000 .quad .LBE2296
+ 34569 00000000
+ 34570 7bfa 02 .byte 0x2
+ 34571 7bfb 2006 .value 0x620
+ 34572 7bfd 827C0000 .long 0x7c82
+ 34573 7c01 32 .uleb128 0x32
+ 34574 7c02 330F0000 .long 0xf33
+ 34575 7c06 03 .byte 0x3
+ 34576 7c07 91 .byte 0x91
+ 34577 7c08 E064 .sleb128 -3488
+ 34578 7c0a 33 .uleb128 0x33
+ 34579 7c0b 00000000 .quad .LBB2297
+ 34579 00000000
+ 34580 7c13 00000000 .quad .LBE2297
+ 34580 00000000
+ 34581 7c1b 34 .uleb128 0x34
+ 34582 7c1c 3F0F0000 .long 0xf3f
+ 34583 7c20 09 .byte 0x9
+ 34584 7c21 03 .byte 0x3
+ 34585 7c22 00000000 .quad mask.7943
+ 34585 00000000
+ 34586 7c2a 35 .uleb128 0x35
+ 34587 7c2b A00D0000 .long 0xda0
+ 34588 7c2f 00000000 .quad .LBB2298
+ 34588 00000000
+ 34589 7c37 00000000 .quad .LBE2298
+ 34589 00000000
+ 34590 7c3f 02 .byte 0x2
+ 34591 7c40 FE04 .value 0x4fe
+ 34592 7c42 32 .uleb128 0x32
+ 34593 7c43 BE0D0000 .long 0xdbe
+ 34594 7c47 03 .byte 0x3
+ 34595 7c48 91 .byte 0x91
+ 34596 7c49 F064 .sleb128 -3472
+ 34597 7c4b 32 .uleb128 0x32
+ 34598 7c4c B20D0000 .long 0xdb2
+ 34599 7c50 03 .byte 0x3
+ 34600 7c51 91 .byte 0x91
+ 34601 7c52 8065 .sleb128 -3456
+ 34602 7c54 35 .uleb128 0x35
+ 34603 7c55 CB0D0000 .long 0xdcb
+ 34604 7c59 00000000 .quad .LBB2300
+ 34604 00000000
+ 34605 7c61 00000000 .quad .LBE2300
+
GAS LISTING /tmp/ccjbMjHD.s page 906
+
+
+ 34605 00000000
+ 34606 7c69 02 .byte 0x2
+ 34607 7c6a 7501 .value 0x175
+ 34608 7c6c 32 .uleb128 0x32
+ 34609 7c6d E90D0000 .long 0xde9
+ 34610 7c71 03 .byte 0x3
+ 34611 7c72 91 .byte 0x91
+ 34612 7c73 9065 .sleb128 -3440
+ 34613 7c75 32 .uleb128 0x32
+ 34614 7c76 DD0D0000 .long 0xddd
+ 34615 7c7a 03 .byte 0x3
+ 34616 7c7b 91 .byte 0x91
+ 34617 7c7c A065 .sleb128 -3424
+ 34618 7c7e 00 .byte 0x0
+ 34619 7c7f 00 .byte 0x0
+ 34620 7c80 00 .byte 0x0
+ 34621 7c81 00 .byte 0x0
+ 34622 7c82 35 .uleb128 0x35
+ 34623 7c83 210F0000 .long 0xf21
+ 34624 7c87 00000000 .quad .LBB2302
+ 34624 00000000
+ 34625 7c8f 00000000 .quad .LBE2302
+ 34625 00000000
+ 34626 7c97 02 .byte 0x2
+ 34627 7c98 2106 .value 0x621
+ 34628 7c9a 32 .uleb128 0x32
+ 34629 7c9b 330F0000 .long 0xf33
+ 34630 7c9f 03 .byte 0x3
+ 34631 7ca0 91 .byte 0x91
+ 34632 7ca1 B065 .sleb128 -3408
+ 34633 7ca3 33 .uleb128 0x33
+ 34634 7ca4 00000000 .quad .LBB2303
+ 34634 00000000
+ 34635 7cac 00000000 .quad .LBE2303
+ 34635 00000000
+ 34636 7cb4 34 .uleb128 0x34
+ 34637 7cb5 3F0F0000 .long 0xf3f
+ 34638 7cb9 09 .byte 0x9
+ 34639 7cba 03 .byte 0x3
+ 34640 7cbb 00000000 .quad mask.7943
+ 34640 00000000
+ 34641 7cc3 35 .uleb128 0x35
+ 34642 7cc4 A00D0000 .long 0xda0
+ 34643 7cc8 00000000 .quad .LBB2304
+ 34643 00000000
+ 34644 7cd0 00000000 .quad .LBE2304
+ 34644 00000000
+ 34645 7cd8 02 .byte 0x2
+ 34646 7cd9 FE04 .value 0x4fe
+ 34647 7cdb 32 .uleb128 0x32
+ 34648 7cdc BE0D0000 .long 0xdbe
+ 34649 7ce0 03 .byte 0x3
+ 34650 7ce1 91 .byte 0x91
+ 34651 7ce2 C065 .sleb128 -3392
+ 34652 7ce4 32 .uleb128 0x32
+ 34653 7ce5 B20D0000 .long 0xdb2
+ 34654 7ce9 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 907
+
+
+ 34655 7cea 91 .byte 0x91
+ 34656 7ceb D065 .sleb128 -3376
+ 34657 7ced 35 .uleb128 0x35
+ 34658 7cee CB0D0000 .long 0xdcb
+ 34659 7cf2 00000000 .quad .LBB2306
+ 34659 00000000
+ 34660 7cfa 00000000 .quad .LBE2306
+ 34660 00000000
+ 34661 7d02 02 .byte 0x2
+ 34662 7d03 7501 .value 0x175
+ 34663 7d05 32 .uleb128 0x32
+ 34664 7d06 E90D0000 .long 0xde9
+ 34665 7d0a 03 .byte 0x3
+ 34666 7d0b 91 .byte 0x91
+ 34667 7d0c E065 .sleb128 -3360
+ 34668 7d0e 32 .uleb128 0x32
+ 34669 7d0f DD0D0000 .long 0xddd
+ 34670 7d13 03 .byte 0x3
+ 34671 7d14 91 .byte 0x91
+ 34672 7d15 F065 .sleb128 -3344
+ 34673 7d17 00 .byte 0x0
+ 34674 7d18 00 .byte 0x0
+ 34675 7d19 00 .byte 0x0
+ 34676 7d1a 00 .byte 0x0
+ 34677 7d1b 00 .byte 0x0
+ 34678 7d1c 00 .byte 0x0
+ 34679 7d1d 31 .uleb128 0x31
+ 34680 7d1e AC0E0000 .long 0xeac
+ 34681 7d22 00000000 .quad .LBB2308
+ 34681 00000000
+ 34682 7d2a 00000000 .quad .LBE2308
+ 34682 00000000
+ 34683 7d32 02 .byte 0x2
+ 34684 7d33 3707 .value 0x737
+ 34685 7d35 6E7D0000 .long 0x7d6e
+ 34686 7d39 32 .uleb128 0x32
+ 34687 7d3a BE0E0000 .long 0xebe
+ 34688 7d3e 03 .byte 0x3
+ 34689 7d3f 91 .byte 0x91
+ 34690 7d40 8066 .sleb128 -3328
+ 34691 7d42 35 .uleb128 0x35
+ 34692 7d43 CB0E0000 .long 0xecb
+ 34693 7d47 00000000 .quad .LBB2310
+ 34693 00000000
+ 34694 7d4f 00000000 .quad .LBE2310
+ 34694 00000000
+ 34695 7d57 02 .byte 0x2
+ 34696 7d58 4905 .value 0x549
+ 34697 7d5a 32 .uleb128 0x32
+ 34698 7d5b E90E0000 .long 0xee9
+ 34699 7d5f 03 .byte 0x3
+ 34700 7d60 91 .byte 0x91
+ 34701 7d61 9C66 .sleb128 -3300
+ 34702 7d63 32 .uleb128 0x32
+ 34703 7d64 DD0E0000 .long 0xedd
+ 34704 7d68 03 .byte 0x3
+ 34705 7d69 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 908
+
+
+ 34706 7d6a A066 .sleb128 -3296
+ 34707 7d6c 00 .byte 0x0
+ 34708 7d6d 00 .byte 0x0
+ 34709 7d6e 31 .uleb128 0x31
+ 34710 7d6f 0F570000 .long 0x570f
+ 34711 7d73 00000000 .quad .LBB2312
+ 34711 00000000
+ 34712 7d7b 00000000 .quad .LBE2312
+ 34712 00000000
+ 34713 7d83 02 .byte 0x2
+ 34714 7d84 3907 .value 0x739
+ 34715 7d86 D17D0000 .long 0x7dd1
+ 34716 7d8a 32 .uleb128 0x32
+ 34717 7d8b 2B570000 .long 0x572b
+ 34718 7d8f 03 .byte 0x3
+ 34719 7d90 91 .byte 0x91
+ 34720 7d91 B066 .sleb128 -3280
+ 34721 7d93 32 .uleb128 0x32
+ 34722 7d94 21570000 .long 0x5721
+ 34723 7d98 03 .byte 0x3
+ 34724 7d99 91 .byte 0x91
+ 34725 7d9a C066 .sleb128 -3264
+ 34726 7d9c 35 .uleb128 0x35
+ 34727 7d9d 36570000 .long 0x5736
+ 34728 7da1 00000000 .quad .LBB2314
+ 34728 00000000
+ 34729 7da9 00000000 .quad .LBE2314
+ 34729 00000000
+ 34730 7db1 02 .byte 0x2
+ 34731 7db2 BA05 .value 0x5ba
+ 34732 7db4 32 .uleb128 0x32
+ 34733 7db5 60570000 .long 0x5760
+ 34734 7db9 03 .byte 0x3
+ 34735 7dba 91 .byte 0x91
+ 34736 7dbb DC66 .sleb128 -3236
+ 34737 7dbd 32 .uleb128 0x32
+ 34738 7dbe 54570000 .long 0x5754
+ 34739 7dc2 03 .byte 0x3
+ 34740 7dc3 91 .byte 0x91
+ 34741 7dc4 E066 .sleb128 -3232
+ 34742 7dc6 32 .uleb128 0x32
+ 34743 7dc7 48570000 .long 0x5748
+ 34744 7dcb 03 .byte 0x3
+ 34745 7dcc 91 .byte 0x91
+ 34746 7dcd F066 .sleb128 -3216
+ 34747 7dcf 00 .byte 0x0
+ 34748 7dd0 00 .byte 0x0
+ 34749 7dd1 31 .uleb128 0x31
+ 34750 7dd2 6D570000 .long 0x576d
+ 34751 7dd6 00000000 .quad .LBB2316
+ 34751 00000000
+ 34752 7dde 00000000 .quad .LBE2316
+ 34752 00000000
+ 34753 7de6 02 .byte 0x2
+ 34754 7de7 3D07 .value 0x73d
+ 34755 7de9 347E0000 .long 0x7e34
+ 34756 7ded 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 909
+
+
+ 34757 7dee 89570000 .long 0x5789
+ 34758 7df2 03 .byte 0x3
+ 34759 7df3 91 .byte 0x91
+ 34760 7df4 8067 .sleb128 -3200
+ 34761 7df6 32 .uleb128 0x32
+ 34762 7df7 7F570000 .long 0x577f
+ 34763 7dfb 03 .byte 0x3
+ 34764 7dfc 91 .byte 0x91
+ 34765 7dfd 9067 .sleb128 -3184
+ 34766 7dff 35 .uleb128 0x35
+ 34767 7e00 36570000 .long 0x5736
+ 34768 7e04 00000000 .quad .LBB2318
+ 34768 00000000
+ 34769 7e0c 00000000 .quad .LBE2318
+ 34769 00000000
+ 34770 7e14 02 .byte 0x2
+ 34771 7e15 DA05 .value 0x5da
+ 34772 7e17 32 .uleb128 0x32
+ 34773 7e18 60570000 .long 0x5760
+ 34774 7e1c 03 .byte 0x3
+ 34775 7e1d 91 .byte 0x91
+ 34776 7e1e AC67 .sleb128 -3156
+ 34777 7e20 32 .uleb128 0x32
+ 34778 7e21 54570000 .long 0x5754
+ 34779 7e25 03 .byte 0x3
+ 34780 7e26 91 .byte 0x91
+ 34781 7e27 B067 .sleb128 -3152
+ 34782 7e29 32 .uleb128 0x32
+ 34783 7e2a 48570000 .long 0x5748
+ 34784 7e2e 03 .byte 0x3
+ 34785 7e2f 91 .byte 0x91
+ 34786 7e30 C067 .sleb128 -3136
+ 34787 7e32 00 .byte 0x0
+ 34788 7e33 00 .byte 0x0
+ 34789 7e34 31 .uleb128 0x31
+ 34790 7e35 F60E0000 .long 0xef6
+ 34791 7e39 00000000 .quad .LBB2320
+ 34791 00000000
+ 34792 7e41 00000000 .quad .LBE2320
+ 34792 00000000
+ 34793 7e49 02 .byte 0x2
+ 34794 7e4a 4007 .value 0x740
+ 34795 7e4c 49800000 .long 0x8049
+ 34796 7e50 32 .uleb128 0x32
+ 34797 7e51 080F0000 .long 0xf08
+ 34798 7e55 03 .byte 0x3
+ 34799 7e56 91 .byte 0x91
+ 34800 7e57 D067 .sleb128 -3120
+ 34801 7e59 33 .uleb128 0x33
+ 34802 7e5a 00000000 .quad .LBB2321
+ 34802 00000000
+ 34803 7e62 00000000 .quad .LBE2321
+ 34803 00000000
+ 34804 7e6a 34 .uleb128 0x34
+ 34805 7e6b 140F0000 .long 0xf14
+ 34806 7e6f 04 .byte 0x4
+ 34807 7e70 76 .byte 0x76
+
GAS LISTING /tmp/ccjbMjHD.s page 910
+
+
+ 34808 7e71 90BC7F .sleb128 -8688
+ 34809 7e74 31 .uleb128 0x31
+ 34810 7e75 210F0000 .long 0xf21
+ 34811 7e79 00000000 .quad .LBB2322
+ 34811 00000000
+ 34812 7e81 00000000 .quad .LBE2322
+ 34812 00000000
+ 34813 7e89 02 .byte 0x2
+ 34814 7e8a 1F06 .value 0x61f
+ 34815 7e8c 117F0000 .long 0x7f11
+ 34816 7e90 32 .uleb128 0x32
+ 34817 7e91 330F0000 .long 0xf33
+ 34818 7e95 03 .byte 0x3
+ 34819 7e96 91 .byte 0x91
+ 34820 7e97 E067 .sleb128 -3104
+ 34821 7e99 33 .uleb128 0x33
+ 34822 7e9a 00000000 .quad .LBB2323
+ 34822 00000000
+ 34823 7ea2 00000000 .quad .LBE2323
+ 34823 00000000
+ 34824 7eaa 34 .uleb128 0x34
+ 34825 7eab 3F0F0000 .long 0xf3f
+ 34826 7eaf 09 .byte 0x9
+ 34827 7eb0 03 .byte 0x3
+ 34828 7eb1 00000000 .quad mask.7943
+ 34828 00000000
+ 34829 7eb9 35 .uleb128 0x35
+ 34830 7eba A00D0000 .long 0xda0
+ 34831 7ebe 00000000 .quad .LBB2324
+ 34831 00000000
+ 34832 7ec6 00000000 .quad .LBE2324
+ 34832 00000000
+ 34833 7ece 02 .byte 0x2
+ 34834 7ecf FE04 .value 0x4fe
+ 34835 7ed1 32 .uleb128 0x32
+ 34836 7ed2 BE0D0000 .long 0xdbe
+ 34837 7ed6 03 .byte 0x3
+ 34838 7ed7 91 .byte 0x91
+ 34839 7ed8 F067 .sleb128 -3088
+ 34840 7eda 32 .uleb128 0x32
+ 34841 7edb B20D0000 .long 0xdb2
+ 34842 7edf 03 .byte 0x3
+ 34843 7ee0 91 .byte 0x91
+ 34844 7ee1 8068 .sleb128 -3072
+ 34845 7ee3 35 .uleb128 0x35
+ 34846 7ee4 CB0D0000 .long 0xdcb
+ 34847 7ee8 00000000 .quad .LBB2326
+ 34847 00000000
+ 34848 7ef0 00000000 .quad .LBE2326
+ 34848 00000000
+ 34849 7ef8 02 .byte 0x2
+ 34850 7ef9 7501 .value 0x175
+ 34851 7efb 32 .uleb128 0x32
+ 34852 7efc E90D0000 .long 0xde9
+ 34853 7f00 03 .byte 0x3
+ 34854 7f01 91 .byte 0x91
+ 34855 7f02 9068 .sleb128 -3056
+
GAS LISTING /tmp/ccjbMjHD.s page 911
+
+
+ 34856 7f04 32 .uleb128 0x32
+ 34857 7f05 DD0D0000 .long 0xddd
+ 34858 7f09 03 .byte 0x3
+ 34859 7f0a 91 .byte 0x91
+ 34860 7f0b A068 .sleb128 -3040
+ 34861 7f0d 00 .byte 0x0
+ 34862 7f0e 00 .byte 0x0
+ 34863 7f0f 00 .byte 0x0
+ 34864 7f10 00 .byte 0x0
+ 34865 7f11 31 .uleb128 0x31
+ 34866 7f12 210F0000 .long 0xf21
+ 34867 7f16 00000000 .quad .LBB2328
+ 34867 00000000
+ 34868 7f1e 00000000 .quad .LBE2328
+ 34868 00000000
+ 34869 7f26 02 .byte 0x2
+ 34870 7f27 2006 .value 0x620
+ 34871 7f29 AE7F0000 .long 0x7fae
+ 34872 7f2d 32 .uleb128 0x32
+ 34873 7f2e 330F0000 .long 0xf33
+ 34874 7f32 03 .byte 0x3
+ 34875 7f33 91 .byte 0x91
+ 34876 7f34 B068 .sleb128 -3024
+ 34877 7f36 33 .uleb128 0x33
+ 34878 7f37 00000000 .quad .LBB2329
+ 34878 00000000
+ 34879 7f3f 00000000 .quad .LBE2329
+ 34879 00000000
+ 34880 7f47 34 .uleb128 0x34
+ 34881 7f48 3F0F0000 .long 0xf3f
+ 34882 7f4c 09 .byte 0x9
+ 34883 7f4d 03 .byte 0x3
+ 34884 7f4e 00000000 .quad mask.7943
+ 34884 00000000
+ 34885 7f56 35 .uleb128 0x35
+ 34886 7f57 A00D0000 .long 0xda0
+ 34887 7f5b 00000000 .quad .LBB2330
+ 34887 00000000
+ 34888 7f63 00000000 .quad .LBE2330
+ 34888 00000000
+ 34889 7f6b 02 .byte 0x2
+ 34890 7f6c FE04 .value 0x4fe
+ 34891 7f6e 32 .uleb128 0x32
+ 34892 7f6f BE0D0000 .long 0xdbe
+ 34893 7f73 03 .byte 0x3
+ 34894 7f74 91 .byte 0x91
+ 34895 7f75 C068 .sleb128 -3008
+ 34896 7f77 32 .uleb128 0x32
+ 34897 7f78 B20D0000 .long 0xdb2
+ 34898 7f7c 03 .byte 0x3
+ 34899 7f7d 91 .byte 0x91
+ 34900 7f7e D068 .sleb128 -2992
+ 34901 7f80 35 .uleb128 0x35
+ 34902 7f81 CB0D0000 .long 0xdcb
+ 34903 7f85 00000000 .quad .LBB2332
+ 34903 00000000
+ 34904 7f8d 00000000 .quad .LBE2332
+
GAS LISTING /tmp/ccjbMjHD.s page 912
+
+
+ 34904 00000000
+ 34905 7f95 02 .byte 0x2
+ 34906 7f96 7501 .value 0x175
+ 34907 7f98 32 .uleb128 0x32
+ 34908 7f99 E90D0000 .long 0xde9
+ 34909 7f9d 03 .byte 0x3
+ 34910 7f9e 91 .byte 0x91
+ 34911 7f9f E068 .sleb128 -2976
+ 34912 7fa1 32 .uleb128 0x32
+ 34913 7fa2 DD0D0000 .long 0xddd
+ 34914 7fa6 03 .byte 0x3
+ 34915 7fa7 91 .byte 0x91
+ 34916 7fa8 F068 .sleb128 -2960
+ 34917 7faa 00 .byte 0x0
+ 34918 7fab 00 .byte 0x0
+ 34919 7fac 00 .byte 0x0
+ 34920 7fad 00 .byte 0x0
+ 34921 7fae 35 .uleb128 0x35
+ 34922 7faf 210F0000 .long 0xf21
+ 34923 7fb3 00000000 .quad .LBB2334
+ 34923 00000000
+ 34924 7fbb 00000000 .quad .LBE2334
+ 34924 00000000
+ 34925 7fc3 02 .byte 0x2
+ 34926 7fc4 2106 .value 0x621
+ 34927 7fc6 32 .uleb128 0x32
+ 34928 7fc7 330F0000 .long 0xf33
+ 34929 7fcb 03 .byte 0x3
+ 34930 7fcc 91 .byte 0x91
+ 34931 7fcd 8069 .sleb128 -2944
+ 34932 7fcf 33 .uleb128 0x33
+ 34933 7fd0 00000000 .quad .LBB2335
+ 34933 00000000
+ 34934 7fd8 00000000 .quad .LBE2335
+ 34934 00000000
+ 34935 7fe0 34 .uleb128 0x34
+ 34936 7fe1 3F0F0000 .long 0xf3f
+ 34937 7fe5 09 .byte 0x9
+ 34938 7fe6 03 .byte 0x3
+ 34939 7fe7 00000000 .quad mask.7943
+ 34939 00000000
+ 34940 7fef 35 .uleb128 0x35
+ 34941 7ff0 A00D0000 .long 0xda0
+ 34942 7ff4 00000000 .quad .LBB2336
+ 34942 00000000
+ 34943 7ffc 00000000 .quad .LBE2336
+ 34943 00000000
+ 34944 8004 02 .byte 0x2
+ 34945 8005 FE04 .value 0x4fe
+ 34946 8007 32 .uleb128 0x32
+ 34947 8008 BE0D0000 .long 0xdbe
+ 34948 800c 03 .byte 0x3
+ 34949 800d 91 .byte 0x91
+ 34950 800e 9069 .sleb128 -2928
+ 34951 8010 32 .uleb128 0x32
+ 34952 8011 B20D0000 .long 0xdb2
+ 34953 8015 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 913
+
+
+ 34954 8016 91 .byte 0x91
+ 34955 8017 A069 .sleb128 -2912
+ 34956 8019 35 .uleb128 0x35
+ 34957 801a CB0D0000 .long 0xdcb
+ 34958 801e 00000000 .quad .LBB2338
+ 34958 00000000
+ 34959 8026 00000000 .quad .LBE2338
+ 34959 00000000
+ 34960 802e 02 .byte 0x2
+ 34961 802f 7501 .value 0x175
+ 34962 8031 32 .uleb128 0x32
+ 34963 8032 E90D0000 .long 0xde9
+ 34964 8036 03 .byte 0x3
+ 34965 8037 91 .byte 0x91
+ 34966 8038 B069 .sleb128 -2896
+ 34967 803a 32 .uleb128 0x32
+ 34968 803b DD0D0000 .long 0xddd
+ 34969 803f 03 .byte 0x3
+ 34970 8040 91 .byte 0x91
+ 34971 8041 C069 .sleb128 -2880
+ 34972 8043 00 .byte 0x0
+ 34973 8044 00 .byte 0x0
+ 34974 8045 00 .byte 0x0
+ 34975 8046 00 .byte 0x0
+ 34976 8047 00 .byte 0x0
+ 34977 8048 00 .byte 0x0
+ 34978 8049 31 .uleb128 0x31
+ 34979 804a F60E0000 .long 0xef6
+ 34980 804e 00000000 .quad .LBB2340
+ 34980 00000000
+ 34981 8056 00000000 .quad .LBE2340
+ 34981 00000000
+ 34982 805e 02 .byte 0x2
+ 34983 805f 4107 .value 0x741
+ 34984 8061 5E820000 .long 0x825e
+ 34985 8065 32 .uleb128 0x32
+ 34986 8066 080F0000 .long 0xf08
+ 34987 806a 03 .byte 0x3
+ 34988 806b 91 .byte 0x91
+ 34989 806c D069 .sleb128 -2864
+ 34990 806e 33 .uleb128 0x33
+ 34991 806f 00000000 .quad .LBB2341
+ 34991 00000000
+ 34992 8077 00000000 .quad .LBE2341
+ 34992 00000000
+ 34993 807f 34 .uleb128 0x34
+ 34994 8080 140F0000 .long 0xf14
+ 34995 8084 04 .byte 0x4
+ 34996 8085 76 .byte 0x76
+ 34997 8086 A0BC7F .sleb128 -8672
+ 34998 8089 31 .uleb128 0x31
+ 34999 808a 210F0000 .long 0xf21
+ 35000 808e 00000000 .quad .LBB2342
+ 35000 00000000
+ 35001 8096 00000000 .quad .LBE2342
+ 35001 00000000
+ 35002 809e 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 914
+
+
+ 35003 809f 1F06 .value 0x61f
+ 35004 80a1 26810000 .long 0x8126
+ 35005 80a5 32 .uleb128 0x32
+ 35006 80a6 330F0000 .long 0xf33
+ 35007 80aa 03 .byte 0x3
+ 35008 80ab 91 .byte 0x91
+ 35009 80ac E069 .sleb128 -2848
+ 35010 80ae 33 .uleb128 0x33
+ 35011 80af 00000000 .quad .LBB2343
+ 35011 00000000
+ 35012 80b7 00000000 .quad .LBE2343
+ 35012 00000000
+ 35013 80bf 34 .uleb128 0x34
+ 35014 80c0 3F0F0000 .long 0xf3f
+ 35015 80c4 09 .byte 0x9
+ 35016 80c5 03 .byte 0x3
+ 35017 80c6 00000000 .quad mask.7943
+ 35017 00000000
+ 35018 80ce 35 .uleb128 0x35
+ 35019 80cf A00D0000 .long 0xda0
+ 35020 80d3 00000000 .quad .LBB2344
+ 35020 00000000
+ 35021 80db 00000000 .quad .LBE2344
+ 35021 00000000
+ 35022 80e3 02 .byte 0x2
+ 35023 80e4 FE04 .value 0x4fe
+ 35024 80e6 32 .uleb128 0x32
+ 35025 80e7 BE0D0000 .long 0xdbe
+ 35026 80eb 03 .byte 0x3
+ 35027 80ec 91 .byte 0x91
+ 35028 80ed F069 .sleb128 -2832
+ 35029 80ef 32 .uleb128 0x32
+ 35030 80f0 B20D0000 .long 0xdb2
+ 35031 80f4 03 .byte 0x3
+ 35032 80f5 91 .byte 0x91
+ 35033 80f6 806A .sleb128 -2816
+ 35034 80f8 35 .uleb128 0x35
+ 35035 80f9 CB0D0000 .long 0xdcb
+ 35036 80fd 00000000 .quad .LBB2346
+ 35036 00000000
+ 35037 8105 00000000 .quad .LBE2346
+ 35037 00000000
+ 35038 810d 02 .byte 0x2
+ 35039 810e 7501 .value 0x175
+ 35040 8110 32 .uleb128 0x32
+ 35041 8111 E90D0000 .long 0xde9
+ 35042 8115 03 .byte 0x3
+ 35043 8116 91 .byte 0x91
+ 35044 8117 906A .sleb128 -2800
+ 35045 8119 32 .uleb128 0x32
+ 35046 811a DD0D0000 .long 0xddd
+ 35047 811e 03 .byte 0x3
+ 35048 811f 91 .byte 0x91
+ 35049 8120 A06A .sleb128 -2784
+ 35050 8122 00 .byte 0x0
+ 35051 8123 00 .byte 0x0
+ 35052 8124 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 915
+
+
+ 35053 8125 00 .byte 0x0
+ 35054 8126 31 .uleb128 0x31
+ 35055 8127 210F0000 .long 0xf21
+ 35056 812b 00000000 .quad .LBB2348
+ 35056 00000000
+ 35057 8133 00000000 .quad .LBE2348
+ 35057 00000000
+ 35058 813b 02 .byte 0x2
+ 35059 813c 2006 .value 0x620
+ 35060 813e C3810000 .long 0x81c3
+ 35061 8142 32 .uleb128 0x32
+ 35062 8143 330F0000 .long 0xf33
+ 35063 8147 03 .byte 0x3
+ 35064 8148 91 .byte 0x91
+ 35065 8149 B06A .sleb128 -2768
+ 35066 814b 33 .uleb128 0x33
+ 35067 814c 00000000 .quad .LBB2349
+ 35067 00000000
+ 35068 8154 00000000 .quad .LBE2349
+ 35068 00000000
+ 35069 815c 34 .uleb128 0x34
+ 35070 815d 3F0F0000 .long 0xf3f
+ 35071 8161 09 .byte 0x9
+ 35072 8162 03 .byte 0x3
+ 35073 8163 00000000 .quad mask.7943
+ 35073 00000000
+ 35074 816b 35 .uleb128 0x35
+ 35075 816c A00D0000 .long 0xda0
+ 35076 8170 00000000 .quad .LBB2350
+ 35076 00000000
+ 35077 8178 00000000 .quad .LBE2350
+ 35077 00000000
+ 35078 8180 02 .byte 0x2
+ 35079 8181 FE04 .value 0x4fe
+ 35080 8183 32 .uleb128 0x32
+ 35081 8184 BE0D0000 .long 0xdbe
+ 35082 8188 03 .byte 0x3
+ 35083 8189 91 .byte 0x91
+ 35084 818a C06A .sleb128 -2752
+ 35085 818c 32 .uleb128 0x32
+ 35086 818d B20D0000 .long 0xdb2
+ 35087 8191 03 .byte 0x3
+ 35088 8192 91 .byte 0x91
+ 35089 8193 D06A .sleb128 -2736
+ 35090 8195 35 .uleb128 0x35
+ 35091 8196 CB0D0000 .long 0xdcb
+ 35092 819a 00000000 .quad .LBB2352
+ 35092 00000000
+ 35093 81a2 00000000 .quad .LBE2352
+ 35093 00000000
+ 35094 81aa 02 .byte 0x2
+ 35095 81ab 7501 .value 0x175
+ 35096 81ad 32 .uleb128 0x32
+ 35097 81ae E90D0000 .long 0xde9
+ 35098 81b2 03 .byte 0x3
+ 35099 81b3 91 .byte 0x91
+ 35100 81b4 E06A .sleb128 -2720
+
GAS LISTING /tmp/ccjbMjHD.s page 916
+
+
+ 35101 81b6 32 .uleb128 0x32
+ 35102 81b7 DD0D0000 .long 0xddd
+ 35103 81bb 03 .byte 0x3
+ 35104 81bc 91 .byte 0x91
+ 35105 81bd F06A .sleb128 -2704
+ 35106 81bf 00 .byte 0x0
+ 35107 81c0 00 .byte 0x0
+ 35108 81c1 00 .byte 0x0
+ 35109 81c2 00 .byte 0x0
+ 35110 81c3 35 .uleb128 0x35
+ 35111 81c4 210F0000 .long 0xf21
+ 35112 81c8 00000000 .quad .LBB2354
+ 35112 00000000
+ 35113 81d0 00000000 .quad .LBE2354
+ 35113 00000000
+ 35114 81d8 02 .byte 0x2
+ 35115 81d9 2106 .value 0x621
+ 35116 81db 32 .uleb128 0x32
+ 35117 81dc 330F0000 .long 0xf33
+ 35118 81e0 03 .byte 0x3
+ 35119 81e1 91 .byte 0x91
+ 35120 81e2 806B .sleb128 -2688
+ 35121 81e4 33 .uleb128 0x33
+ 35122 81e5 00000000 .quad .LBB2355
+ 35122 00000000
+ 35123 81ed 00000000 .quad .LBE2355
+ 35123 00000000
+ 35124 81f5 34 .uleb128 0x34
+ 35125 81f6 3F0F0000 .long 0xf3f
+ 35126 81fa 09 .byte 0x9
+ 35127 81fb 03 .byte 0x3
+ 35128 81fc 00000000 .quad mask.7943
+ 35128 00000000
+ 35129 8204 35 .uleb128 0x35
+ 35130 8205 A00D0000 .long 0xda0
+ 35131 8209 00000000 .quad .LBB2356
+ 35131 00000000
+ 35132 8211 00000000 .quad .LBE2356
+ 35132 00000000
+ 35133 8219 02 .byte 0x2
+ 35134 821a FE04 .value 0x4fe
+ 35135 821c 32 .uleb128 0x32
+ 35136 821d BE0D0000 .long 0xdbe
+ 35137 8221 03 .byte 0x3
+ 35138 8222 91 .byte 0x91
+ 35139 8223 906B .sleb128 -2672
+ 35140 8225 32 .uleb128 0x32
+ 35141 8226 B20D0000 .long 0xdb2
+ 35142 822a 03 .byte 0x3
+ 35143 822b 91 .byte 0x91
+ 35144 822c A06B .sleb128 -2656
+ 35145 822e 35 .uleb128 0x35
+ 35146 822f CB0D0000 .long 0xdcb
+ 35147 8233 00000000 .quad .LBB2358
+ 35147 00000000
+ 35148 823b 00000000 .quad .LBE2358
+ 35148 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 917
+
+
+ 35149 8243 02 .byte 0x2
+ 35150 8244 7501 .value 0x175
+ 35151 8246 32 .uleb128 0x32
+ 35152 8247 E90D0000 .long 0xde9
+ 35153 824b 03 .byte 0x3
+ 35154 824c 91 .byte 0x91
+ 35155 824d B06B .sleb128 -2640
+ 35156 824f 32 .uleb128 0x32
+ 35157 8250 DD0D0000 .long 0xddd
+ 35158 8254 03 .byte 0x3
+ 35159 8255 91 .byte 0x91
+ 35160 8256 C06B .sleb128 -2624
+ 35161 8258 00 .byte 0x0
+ 35162 8259 00 .byte 0x0
+ 35163 825a 00 .byte 0x0
+ 35164 825b 00 .byte 0x0
+ 35165 825c 00 .byte 0x0
+ 35166 825d 00 .byte 0x0
+ 35167 825e 31 .uleb128 0x31
+ 35168 825f D50B0000 .long 0xbd5
+ 35169 8263 00000000 .quad .LBB2360
+ 35169 00000000
+ 35170 826b 00000000 .quad .LBE2360
+ 35170 00000000
+ 35171 8273 02 .byte 0x2
+ 35172 8274 4207 .value 0x742
+ 35173 8276 41870000 .long 0x8741
+ 35174 827a 32 .uleb128 0x32
+ 35175 827b F30B0000 .long 0xbf3
+ 35176 827f 03 .byte 0x3
+ 35177 8280 91 .byte 0x91
+ 35178 8281 DC6B .sleb128 -2596
+ 35179 8283 32 .uleb128 0x32
+ 35180 8284 E70B0000 .long 0xbe7
+ 35181 8288 03 .byte 0x3
+ 35182 8289 91 .byte 0x91
+ 35183 828a E06B .sleb128 -2592
+ 35184 828c 33 .uleb128 0x33
+ 35185 828d 00000000 .quad .LBB2361
+ 35185 00000000
+ 35186 8295 00000000 .quad .LBE2361
+ 35186 00000000
+ 35187 829d 34 .uleb128 0x34
+ 35188 829e FF0B0000 .long 0xbff
+ 35189 82a2 04 .byte 0x4
+ 35190 82a3 76 .byte 0x76
+ 35191 82a4 C0BC7F .sleb128 -8640
+ 35192 82a7 34 .uleb128 0x34
+ 35193 82a8 0B0C0000 .long 0xc0b
+ 35194 82ac 04 .byte 0x4
+ 35195 82ad 76 .byte 0x76
+ 35196 82ae B0BC7F .sleb128 -8656
+ 35197 82b1 31 .uleb128 0x31
+ 35198 82b2 540C0000 .long 0xc54
+ 35199 82b6 00000000 .quad .LBB2362
+ 35199 00000000
+ 35200 82be 00000000 .quad .LBE2362
+
GAS LISTING /tmp/ccjbMjHD.s page 918
+
+
+ 35200 00000000
+ 35201 82c6 02 .byte 0x2
+ 35202 82c7 9106 .value 0x691
+ 35203 82c9 1D830000 .long 0x831d
+ 35204 82cd 32 .uleb128 0x32
+ 35205 82ce 7E0C0000 .long 0xc7e
+ 35206 82d2 03 .byte 0x3
+ 35207 82d3 91 .byte 0x91
+ 35208 82d4 F86B .sleb128 -2568
+ 35209 82d6 32 .uleb128 0x32
+ 35210 82d7 720C0000 .long 0xc72
+ 35211 82db 03 .byte 0x3
+ 35212 82dc 91 .byte 0x91
+ 35213 82dd FC6B .sleb128 -2564
+ 35214 82df 32 .uleb128 0x32
+ 35215 82e0 660C0000 .long 0xc66
+ 35216 82e4 03 .byte 0x3
+ 35217 82e5 91 .byte 0x91
+ 35218 82e6 806C .sleb128 -2560
+ 35219 82e8 35 .uleb128 0x35
+ 35220 82e9 8B0C0000 .long 0xc8b
+ 35221 82ed 00000000 .quad .LBB2364
+ 35221 00000000
+ 35222 82f5 00000000 .quad .LBE2364
+ 35222 00000000
+ 35223 82fd 02 .byte 0x2
+ 35224 82fe 0702 .value 0x207
+ 35225 8300 32 .uleb128 0x32
+ 35226 8301 B40C0000 .long 0xcb4
+ 35227 8305 03 .byte 0x3
+ 35228 8306 91 .byte 0x91
+ 35229 8307 986C .sleb128 -2536
+ 35230 8309 32 .uleb128 0x32
+ 35231 830a A90C0000 .long 0xca9
+ 35232 830e 03 .byte 0x3
+ 35233 830f 91 .byte 0x91
+ 35234 8310 9C6C .sleb128 -2532
+ 35235 8312 32 .uleb128 0x32
+ 35236 8313 9D0C0000 .long 0xc9d
+ 35237 8317 03 .byte 0x3
+ 35238 8318 91 .byte 0x91
+ 35239 8319 A06C .sleb128 -2528
+ 35240 831b 00 .byte 0x0
+ 35241 831c 00 .byte 0x0
+ 35242 831d 31 .uleb128 0x31
+ 35243 831e C10C0000 .long 0xcc1
+ 35244 8322 00000000 .quad .LBB2366
+ 35244 00000000
+ 35245 832a 00000000 .quad .LBE2366
+ 35245 00000000
+ 35246 8332 02 .byte 0x2
+ 35247 8333 9206 .value 0x692
+ 35248 8335 A6850000 .long 0x85a6
+ 35249 8339 32 .uleb128 0x32
+ 35250 833a D30C0000 .long 0xcd3
+ 35251 833e 03 .byte 0x3
+ 35252 833f 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 919
+
+
+ 35253 8340 B06C .sleb128 -2512
+ 35254 8342 35 .uleb128 0x35
+ 35255 8343 E00C0000 .long 0xce0
+ 35256 8347 00000000 .quad .LBB2368
+ 35256 00000000
+ 35257 834f 00000000 .quad .LBE2368
+ 35257 00000000
+ 35258 8357 02 .byte 0x2
+ 35259 8358 7D03 .value 0x37d
+ 35260 835a 32 .uleb128 0x32
+ 35261 835b FE0C0000 .long 0xcfe
+ 35262 835f 03 .byte 0x3
+ 35263 8360 91 .byte 0x91
+ 35264 8361 C86C .sleb128 -2488
+ 35265 8363 32 .uleb128 0x32
+ 35266 8364 F20C0000 .long 0xcf2
+ 35267 8368 03 .byte 0x3
+ 35268 8369 91 .byte 0x91
+ 35269 836a D06C .sleb128 -2480
+ 35270 836c 33 .uleb128 0x33
+ 35271 836d 00000000 .quad .LBB2369
+ 35271 00000000
+ 35272 8375 00000000 .quad .LBE2369
+ 35272 00000000
+ 35273 837d 34 .uleb128 0x34
+ 35274 837e 0A0D0000 .long 0xd0a
+ 35275 8382 03 .byte 0x3
+ 35276 8383 91 .byte 0x91
+ 35277 8384 A06D .sleb128 -2400
+ 35278 8386 34 .uleb128 0x34
+ 35279 8387 150D0000 .long 0xd15
+ 35280 838b 03 .byte 0x3
+ 35281 838c 91 .byte 0x91
+ 35282 838d 906D .sleb128 -2416
+ 35283 838f 34 .uleb128 0x34
+ 35284 8390 200D0000 .long 0xd20
+ 35285 8394 03 .byte 0x3
+ 35286 8395 91 .byte 0x91
+ 35287 8396 806D .sleb128 -2432
+ 35288 8398 34 .uleb128 0x34
+ 35289 8399 2C0D0000 .long 0xd2c
+ 35290 839d 03 .byte 0x3
+ 35291 839e 91 .byte 0x91
+ 35292 839f F06C .sleb128 -2448
+ 35293 83a1 34 .uleb128 0x34
+ 35294 83a2 380D0000 .long 0xd38
+ 35295 83a6 03 .byte 0x3
+ 35296 83a7 91 .byte 0x91
+ 35297 83a8 EC6C .sleb128 -2452
+ 35298 83aa 31 .uleb128 0x31
+ 35299 83ab 4F0D0000 .long 0xd4f
+ 35300 83af 00000000 .quad .LBB2370
+ 35300 00000000
+ 35301 83b7 00000000 .quad .LBE2370
+ 35301 00000000
+ 35302 83bf 02 .byte 0x2
+ 35303 83c0 5603 .value 0x356
+
GAS LISTING /tmp/ccjbMjHD.s page 920
+
+
+ 35304 83c2 D9830000 .long 0x83d9
+ 35305 83c6 32 .uleb128 0x32
+ 35306 83c7 6A0D0000 .long 0xd6a
+ 35307 83cb 03 .byte 0x3
+ 35308 83cc 91 .byte 0x91
+ 35309 83cd B06D .sleb128 -2384
+ 35310 83cf 32 .uleb128 0x32
+ 35311 83d0 600D0000 .long 0xd60
+ 35312 83d4 03 .byte 0x3
+ 35313 83d5 91 .byte 0x91
+ 35314 83d6 C06D .sleb128 -2368
+ 35315 83d8 00 .byte 0x0
+ 35316 83d9 31 .uleb128 0x31
+ 35317 83da 750D0000 .long 0xd75
+ 35318 83de 00000000 .quad .LBB2372
+ 35318 00000000
+ 35319 83e6 00000000 .quad .LBE2372
+ 35319 00000000
+ 35320 83ee 02 .byte 0x2
+ 35321 83ef 5903 .value 0x359
+ 35322 83f1 08840000 .long 0x8408
+ 35323 83f5 32 .uleb128 0x32
+ 35324 83f6 930D0000 .long 0xd93
+ 35325 83fa 03 .byte 0x3
+ 35326 83fb 91 .byte 0x91
+ 35327 83fc DC6D .sleb128 -2340
+ 35328 83fe 32 .uleb128 0x32
+ 35329 83ff 870D0000 .long 0xd87
+ 35330 8403 03 .byte 0x3
+ 35331 8404 91 .byte 0x91
+ 35332 8405 E06D .sleb128 -2336
+ 35333 8407 00 .byte 0x0
+ 35334 8408 31 .uleb128 0x31
+ 35335 8409 4F0D0000 .long 0xd4f
+ 35336 840d 00000000 .quad .LBB2374
+ 35336 00000000
+ 35337 8415 00000000 .quad .LBE2374
+ 35337 00000000
+ 35338 841d 02 .byte 0x2
+ 35339 841e 5B03 .value 0x35b
+ 35340 8420 37840000 .long 0x8437
+ 35341 8424 32 .uleb128 0x32
+ 35342 8425 6A0D0000 .long 0xd6a
+ 35343 8429 03 .byte 0x3
+ 35344 842a 91 .byte 0x91
+ 35345 842b F06D .sleb128 -2320
+ 35346 842d 32 .uleb128 0x32
+ 35347 842e 600D0000 .long 0xd60
+ 35348 8432 03 .byte 0x3
+ 35349 8433 91 .byte 0x91
+ 35350 8434 806E .sleb128 -2304
+ 35351 8436 00 .byte 0x0
+ 35352 8437 31 .uleb128 0x31
+ 35353 8438 A00D0000 .long 0xda0
+ 35354 843c 00000000 .quad .LBB2376
+ 35354 00000000
+ 35355 8444 00000000 .quad .LBE2376
+
GAS LISTING /tmp/ccjbMjHD.s page 921
+
+
+ 35355 00000000
+ 35356 844c 02 .byte 0x2
+ 35357 844d 6403 .value 0x364
+ 35358 844f 91840000 .long 0x8491
+ 35359 8453 32 .uleb128 0x32
+ 35360 8454 BE0D0000 .long 0xdbe
+ 35361 8458 03 .byte 0x3
+ 35362 8459 91 .byte 0x91
+ 35363 845a 906E .sleb128 -2288
+ 35364 845c 32 .uleb128 0x32
+ 35365 845d B20D0000 .long 0xdb2
+ 35366 8461 03 .byte 0x3
+ 35367 8462 91 .byte 0x91
+ 35368 8463 A06E .sleb128 -2272
+ 35369 8465 35 .uleb128 0x35
+ 35370 8466 CB0D0000 .long 0xdcb
+ 35371 846a 00000000 .quad .LBB2378
+ 35371 00000000
+ 35372 8472 00000000 .quad .LBE2378
+ 35372 00000000
+ 35373 847a 02 .byte 0x2
+ 35374 847b 7501 .value 0x175
+ 35375 847d 32 .uleb128 0x32
+ 35376 847e E90D0000 .long 0xde9
+ 35377 8482 03 .byte 0x3
+ 35378 8483 91 .byte 0x91
+ 35379 8484 B06E .sleb128 -2256
+ 35380 8486 32 .uleb128 0x32
+ 35381 8487 DD0D0000 .long 0xddd
+ 35382 848b 03 .byte 0x3
+ 35383 848c 91 .byte 0x91
+ 35384 848d C06E .sleb128 -2240
+ 35385 848f 00 .byte 0x0
+ 35386 8490 00 .byte 0x0
+ 35387 8491 31 .uleb128 0x31
+ 35388 8492 FB0D0000 .long 0xdfb
+ 35389 8496 00000000 .quad .LBB2380
+ 35389 00000000
+ 35390 849e 00000000 .quad .LBE2380
+ 35390 00000000
+ 35391 84a6 02 .byte 0x2
+ 35392 84a7 6603 .value 0x366
+ 35393 84a9 C0840000 .long 0x84c0
+ 35394 84ad 32 .uleb128 0x32
+ 35395 84ae 160E0000 .long 0xe16
+ 35396 84b2 03 .byte 0x3
+ 35397 84b3 91 .byte 0x91
+ 35398 84b4 D06E .sleb128 -2224
+ 35399 84b6 32 .uleb128 0x32
+ 35400 84b7 0C0E0000 .long 0xe0c
+ 35401 84bb 03 .byte 0x3
+ 35402 84bc 91 .byte 0x91
+ 35403 84bd E06E .sleb128 -2208
+ 35404 84bf 00 .byte 0x0
+ 35405 84c0 31 .uleb128 0x31
+ 35406 84c1 A00D0000 .long 0xda0
+ 35407 84c5 00000000 .quad .LBB2382
+
GAS LISTING /tmp/ccjbMjHD.s page 922
+
+
+ 35407 00000000
+ 35408 84cd 00000000 .quad .LBE2382
+ 35408 00000000
+ 35409 84d5 02 .byte 0x2
+ 35410 84d6 6803 .value 0x368
+ 35411 84d8 1A850000 .long 0x851a
+ 35412 84dc 32 .uleb128 0x32
+ 35413 84dd BE0D0000 .long 0xdbe
+ 35414 84e1 03 .byte 0x3
+ 35415 84e2 91 .byte 0x91
+ 35416 84e3 F06E .sleb128 -2192
+ 35417 84e5 32 .uleb128 0x32
+ 35418 84e6 B20D0000 .long 0xdb2
+ 35419 84ea 03 .byte 0x3
+ 35420 84eb 91 .byte 0x91
+ 35421 84ec 806F .sleb128 -2176
+ 35422 84ee 35 .uleb128 0x35
+ 35423 84ef CB0D0000 .long 0xdcb
+ 35424 84f3 00000000 .quad .LBB2384
+ 35424 00000000
+ 35425 84fb 00000000 .quad .LBE2384
+ 35425 00000000
+ 35426 8503 02 .byte 0x2
+ 35427 8504 7501 .value 0x175
+ 35428 8506 32 .uleb128 0x32
+ 35429 8507 E90D0000 .long 0xde9
+ 35430 850b 03 .byte 0x3
+ 35431 850c 91 .byte 0x91
+ 35432 850d 906F .sleb128 -2160
+ 35433 850f 32 .uleb128 0x32
+ 35434 8510 DD0D0000 .long 0xddd
+ 35435 8514 03 .byte 0x3
+ 35436 8515 91 .byte 0x91
+ 35437 8516 A06F .sleb128 -2144
+ 35438 8518 00 .byte 0x0
+ 35439 8519 00 .byte 0x0
+ 35440 851a 31 .uleb128 0x31
+ 35441 851b FB0D0000 .long 0xdfb
+ 35442 851f 00000000 .quad .LBB2386
+ 35442 00000000
+ 35443 8527 00000000 .quad .LBE2386
+ 35443 00000000
+ 35444 852f 02 .byte 0x2
+ 35445 8530 6A03 .value 0x36a
+ 35446 8532 49850000 .long 0x8549
+ 35447 8536 32 .uleb128 0x32
+ 35448 8537 160E0000 .long 0xe16
+ 35449 853b 03 .byte 0x3
+ 35450 853c 91 .byte 0x91
+ 35451 853d B06F .sleb128 -2128
+ 35452 853f 32 .uleb128 0x32
+ 35453 8540 0C0E0000 .long 0xe0c
+ 35454 8544 03 .byte 0x3
+ 35455 8545 91 .byte 0x91
+ 35456 8546 C06F .sleb128 -2112
+ 35457 8548 00 .byte 0x0
+ 35458 8549 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 923
+
+
+ 35459 854a 210E0000 .long 0xe21
+ 35460 854e 00000000 .quad .LBB2388
+ 35460 00000000
+ 35461 8556 00000000 .quad .LBE2388
+ 35461 00000000
+ 35462 855e 02 .byte 0x2
+ 35463 855f 6C03 .value 0x36c
+ 35464 8561 78850000 .long 0x8578
+ 35465 8565 32 .uleb128 0x32
+ 35466 8566 3E0E0000 .long 0xe3e
+ 35467 856a 03 .byte 0x3
+ 35468 856b 91 .byte 0x91
+ 35469 856c D06F .sleb128 -2096
+ 35470 856e 32 .uleb128 0x32
+ 35471 856f 330E0000 .long 0xe33
+ 35472 8573 03 .byte 0x3
+ 35473 8574 91 .byte 0x91
+ 35474 8575 E06F .sleb128 -2080
+ 35475 8577 00 .byte 0x0
+ 35476 8578 35 .uleb128 0x35
+ 35477 8579 4F0D0000 .long 0xd4f
+ 35478 857d 00000000 .quad .LBB2390
+ 35478 00000000
+ 35479 8585 00000000 .quad .LBE2390
+ 35479 00000000
+ 35480 858d 02 .byte 0x2
+ 35481 858e 6E03 .value 0x36e
+ 35482 8590 32 .uleb128 0x32
+ 35483 8591 6A0D0000 .long 0xd6a
+ 35484 8595 03 .byte 0x3
+ 35485 8596 91 .byte 0x91
+ 35486 8597 F06F .sleb128 -2064
+ 35487 8599 32 .uleb128 0x32
+ 35488 859a 600D0000 .long 0xd60
+ 35489 859e 03 .byte 0x3
+ 35490 859f 91 .byte 0x91
+ 35491 85a0 8070 .sleb128 -2048
+ 35492 85a2 00 .byte 0x0
+ 35493 85a3 00 .byte 0x0
+ 35494 85a4 00 .byte 0x0
+ 35495 85a5 00 .byte 0x0
+ 35496 85a6 36 .uleb128 0x36
+ 35497 85a7 00000000 .quad .LBB2392
+ 35497 00000000
+ 35498 85af 00000000 .quad .LBE2392
+ 35498 00000000
+ 35499 85b7 C6850000 .long 0x85c6
+ 35500 85bb 34 .uleb128 0x34
+ 35501 85bc 1C0C0000 .long 0xc1c
+ 35502 85c0 04 .byte 0x4
+ 35503 85c1 91 .byte 0x91
+ 35504 85c2 B0BF7F .sleb128 -8272
+ 35505 85c5 00 .byte 0x0
+ 35506 85c6 31 .uleb128 0x31
+ 35507 85c7 4A0E0000 .long 0xe4a
+ 35508 85cb 00000000 .quad .LBB2393
+ 35508 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 924
+
+
+ 35509 85d3 00000000 .quad .LBE2393
+ 35509 00000000
+ 35510 85db 02 .byte 0x2
+ 35511 85dc 9406 .value 0x694
+ 35512 85de 63860000 .long 0x8663
+ 35513 85e2 32 .uleb128 0x32
+ 35514 85e3 5C0E0000 .long 0xe5c
+ 35515 85e7 03 .byte 0x3
+ 35516 85e8 91 .byte 0x91
+ 35517 85e9 9070 .sleb128 -2032
+ 35518 85eb 33 .uleb128 0x33
+ 35519 85ec 00000000 .quad .LBB2394
+ 35519 00000000
+ 35520 85f4 00000000 .quad .LBE2394
+ 35520 00000000
+ 35521 85fc 34 .uleb128 0x34
+ 35522 85fd 680E0000 .long 0xe68
+ 35523 8601 09 .byte 0x9
+ 35524 8602 03 .byte 0x3
+ 35525 8603 00000000 .quad ShiftRowTable.7385
+ 35525 00000000
+ 35526 860b 35 .uleb128 0x35
+ 35527 860c A00D0000 .long 0xda0
+ 35528 8610 00000000 .quad .LBB2395
+ 35528 00000000
+ 35529 8618 00000000 .quad .LBE2395
+ 35529 00000000
+ 35530 8620 02 .byte 0x2
+ 35531 8621 9B02 .value 0x29b
+ 35532 8623 32 .uleb128 0x32
+ 35533 8624 BE0D0000 .long 0xdbe
+ 35534 8628 03 .byte 0x3
+ 35535 8629 91 .byte 0x91
+ 35536 862a A070 .sleb128 -2016
+ 35537 862c 32 .uleb128 0x32
+ 35538 862d B20D0000 .long 0xdb2
+ 35539 8631 03 .byte 0x3
+ 35540 8632 91 .byte 0x91
+ 35541 8633 B070 .sleb128 -2000
+ 35542 8635 35 .uleb128 0x35
+ 35543 8636 CB0D0000 .long 0xdcb
+ 35544 863a 00000000 .quad .LBB2397
+ 35544 00000000
+ 35545 8642 00000000 .quad .LBE2397
+ 35545 00000000
+ 35546 864a 02 .byte 0x2
+ 35547 864b 7501 .value 0x175
+ 35548 864d 32 .uleb128 0x32
+ 35549 864e E90D0000 .long 0xde9
+ 35550 8652 03 .byte 0x3
+ 35551 8653 91 .byte 0x91
+ 35552 8654 C070 .sleb128 -1984
+ 35553 8656 32 .uleb128 0x32
+ 35554 8657 DD0D0000 .long 0xddd
+ 35555 865b 03 .byte 0x3
+ 35556 865c 91 .byte 0x91
+ 35557 865d D070 .sleb128 -1968
+
GAS LISTING /tmp/ccjbMjHD.s page 925
+
+
+ 35558 865f 00 .byte 0x0
+ 35559 8660 00 .byte 0x0
+ 35560 8661 00 .byte 0x0
+ 35561 8662 00 .byte 0x0
+ 35562 8663 36 .uleb128 0x36
+ 35563 8664 00000000 .quad .LBB2399
+ 35563 00000000
+ 35564 866c 00000000 .quad .LBE2399
+ 35564 00000000
+ 35565 8674 83860000 .long 0x8683
+ 35566 8678 34 .uleb128 0x34
+ 35567 8679 2C0C0000 .long 0xc2c
+ 35568 867d 04 .byte 0x4
+ 35569 867e 91 .byte 0x91
+ 35570 867f A0BF7F .sleb128 -8288
+ 35571 8682 00 .byte 0x0
+ 35572 8683 31 .uleb128 0x31
+ 35573 8684 860E0000 .long 0xe86
+ 35574 8688 00000000 .quad .LBB2400
+ 35574 00000000
+ 35575 8690 00000000 .quad .LBE2400
+ 35575 00000000
+ 35576 8698 02 .byte 0x2
+ 35577 8699 9606 .value 0x696
+ 35578 869b B2860000 .long 0x86b2
+ 35579 869f 32 .uleb128 0x32
+ 35580 86a0 A10E0000 .long 0xea1
+ 35581 86a4 03 .byte 0x3
+ 35582 86a5 91 .byte 0x91
+ 35583 86a6 E070 .sleb128 -1952
+ 35584 86a8 32 .uleb128 0x32
+ 35585 86a9 970E0000 .long 0xe97
+ 35586 86ad 03 .byte 0x3
+ 35587 86ae 91 .byte 0x91
+ 35588 86af F070 .sleb128 -1936
+ 35589 86b1 00 .byte 0x0
+ 35590 86b2 36 .uleb128 0x36
+ 35591 86b3 00000000 .quad .LBB2402
+ 35591 00000000
+ 35592 86bb 00000000 .quad .LBE2402
+ 35592 00000000
+ 35593 86c3 D2860000 .long 0x86d2
+ 35594 86c7 34 .uleb128 0x34
+ 35595 86c8 3C0C0000 .long 0xc3c
+ 35596 86cc 04 .byte 0x4
+ 35597 86cd 91 .byte 0x91
+ 35598 86ce 90BF7F .sleb128 -8304
+ 35599 86d1 00 .byte 0x0
+ 35600 86d2 31 .uleb128 0x31
+ 35601 86d3 AC0E0000 .long 0xeac
+ 35602 86d7 00000000 .quad .LBB2403
+ 35602 00000000
+ 35603 86df 00000000 .quad .LBE2403
+ 35603 00000000
+ 35604 86e7 02 .byte 0x2
+ 35605 86e8 9806 .value 0x698
+ 35606 86ea 23870000 .long 0x8723
+
GAS LISTING /tmp/ccjbMjHD.s page 926
+
+
+ 35607 86ee 32 .uleb128 0x32
+ 35608 86ef BE0E0000 .long 0xebe
+ 35609 86f3 03 .byte 0x3
+ 35610 86f4 91 .byte 0x91
+ 35611 86f5 8071 .sleb128 -1920
+ 35612 86f7 35 .uleb128 0x35
+ 35613 86f8 CB0E0000 .long 0xecb
+ 35614 86fc 00000000 .quad .LBB2405
+ 35614 00000000
+ 35615 8704 00000000 .quad .LBE2405
+ 35615 00000000
+ 35616 870c 02 .byte 0x2
+ 35617 870d 4905 .value 0x549
+ 35618 870f 32 .uleb128 0x32
+ 35619 8710 E90E0000 .long 0xee9
+ 35620 8714 03 .byte 0x3
+ 35621 8715 91 .byte 0x91
+ 35622 8716 9C71 .sleb128 -1892
+ 35623 8718 32 .uleb128 0x32
+ 35624 8719 DD0E0000 .long 0xedd
+ 35625 871d 03 .byte 0x3
+ 35626 871e 91 .byte 0x91
+ 35627 871f A071 .sleb128 -1888
+ 35628 8721 00 .byte 0x0
+ 35629 8722 00 .byte 0x0
+ 35630 8723 33 .uleb128 0x33
+ 35631 8724 00000000 .quad .LBB2407
+ 35631 00000000
+ 35632 872c 00000000 .quad .LBE2407
+ 35632 00000000
+ 35633 8734 34 .uleb128 0x34
+ 35634 8735 480C0000 .long 0xc48
+ 35635 8739 04 .byte 0x4
+ 35636 873a 91 .byte 0x91
+ 35637 873b 80BF7F .sleb128 -8320
+ 35638 873e 00 .byte 0x0
+ 35639 873f 00 .byte 0x0
+ 35640 8740 00 .byte 0x0
+ 35641 8741 31 .uleb128 0x31
+ 35642 8742 AC0E0000 .long 0xeac
+ 35643 8746 00000000 .quad .LBB2408
+ 35643 00000000
+ 35644 874e 00000000 .quad .LBE2408
+ 35644 00000000
+ 35645 8756 02 .byte 0x2
+ 35646 8757 4507 .value 0x745
+ 35647 8759 92870000 .long 0x8792
+ 35648 875d 32 .uleb128 0x32
+ 35649 875e BE0E0000 .long 0xebe
+ 35650 8762 03 .byte 0x3
+ 35651 8763 91 .byte 0x91
+ 35652 8764 B071 .sleb128 -1872
+ 35653 8766 35 .uleb128 0x35
+ 35654 8767 CB0E0000 .long 0xecb
+ 35655 876b 00000000 .quad .LBB2410
+ 35655 00000000
+ 35656 8773 00000000 .quad .LBE2410
+
GAS LISTING /tmp/ccjbMjHD.s page 927
+
+
+ 35656 00000000
+ 35657 877b 02 .byte 0x2
+ 35658 877c 4905 .value 0x549
+ 35659 877e 32 .uleb128 0x32
+ 35660 877f E90E0000 .long 0xee9
+ 35661 8783 03 .byte 0x3
+ 35662 8784 91 .byte 0x91
+ 35663 8785 CC71 .sleb128 -1844
+ 35664 8787 32 .uleb128 0x32
+ 35665 8788 DD0E0000 .long 0xedd
+ 35666 878c 03 .byte 0x3
+ 35667 878d 91 .byte 0x91
+ 35668 878e D071 .sleb128 -1840
+ 35669 8790 00 .byte 0x0
+ 35670 8791 00 .byte 0x0
+ 35671 8792 31 .uleb128 0x31
+ 35672 8793 71560000 .long 0x5671
+ 35673 8797 00000000 .quad .LBB2412
+ 35673 00000000
+ 35674 879f 00000000 .quad .LBE2412
+ 35674 00000000
+ 35675 87a7 02 .byte 0x2
+ 35676 87a8 4D07 .value 0x74d
+ 35677 87aa 5C880000 .long 0x885c
+ 35678 87ae 32 .uleb128 0x32
+ 35679 87af 8F560000 .long 0x568f
+ 35680 87b3 03 .byte 0x3
+ 35681 87b4 91 .byte 0x91
+ 35682 87b5 EC71 .sleb128 -1812
+ 35683 87b7 32 .uleb128 0x32
+ 35684 87b8 83560000 .long 0x5683
+ 35685 87bc 03 .byte 0x3
+ 35686 87bd 91 .byte 0x91
+ 35687 87be F071 .sleb128 -1808
+ 35688 87c0 33 .uleb128 0x33
+ 35689 87c1 00000000 .quad .LBB2413
+ 35689 00000000
+ 35690 87c9 00000000 .quad .LBE2413
+ 35690 00000000
+ 35691 87d1 34 .uleb128 0x34
+ 35692 87d2 9B560000 .long 0x569b
+ 35693 87d6 04 .byte 0x4
+ 35694 87d7 91 .byte 0x91
+ 35695 87d8 D0BF7F .sleb128 -8240
+ 35696 87db 34 .uleb128 0x34
+ 35697 87dc A5560000 .long 0x56a5
+ 35698 87e0 03 .byte 0x3
+ 35699 87e1 91 .byte 0x91
+ 35700 87e2 9072 .sleb128 -1776
+ 35701 87e4 34 .uleb128 0x34
+ 35702 87e5 B1560000 .long 0x56b1
+ 35703 87e9 03 .byte 0x3
+ 35704 87ea 91 .byte 0x91
+ 35705 87eb 8C72 .sleb128 -1780
+ 35706 87ed 31 .uleb128 0x31
+ 35707 87ee BE560000 .long 0x56be
+ 35708 87f2 00000000 .quad .LBB2414
+
GAS LISTING /tmp/ccjbMjHD.s page 928
+
+
+ 35708 00000000
+ 35709 87fa 00000000 .quad .LBE2414
+ 35709 00000000
+ 35710 8802 02 .byte 0x2
+ 35711 8803 5F06 .value 0x65f
+ 35712 8805 38880000 .long 0x8838
+ 35713 8809 32 .uleb128 0x32
+ 35714 880a D0560000 .long 0x56d0
+ 35715 880e 03 .byte 0x3
+ 35716 880f 91 .byte 0x91
+ 35717 8810 9472 .sleb128 -1772
+ 35718 8812 33 .uleb128 0x33
+ 35719 8813 00000000 .quad .LBB2415
+ 35719 00000000
+ 35720 881b 00000000 .quad .LBE2415
+ 35720 00000000
+ 35721 8823 34 .uleb128 0x34
+ 35722 8824 DA560000 .long 0x56da
+ 35723 8828 04 .byte 0x4
+ 35724 8829 91 .byte 0x91
+ 35725 882a C0BF7F .sleb128 -8256
+ 35726 882d 34 .uleb128 0x34
+ 35727 882e E6560000 .long 0x56e6
+ 35728 8832 03 .byte 0x3
+ 35729 8833 91 .byte 0x91
+ 35730 8834 9872 .sleb128 -1768
+ 35731 8836 00 .byte 0x0
+ 35732 8837 00 .byte 0x0
+ 35733 8838 35 .uleb128 0x35
+ 35734 8839 F2560000 .long 0x56f2
+ 35735 883d 00000000 .quad .LBB2416
+ 35735 00000000
+ 35736 8845 00000000 .quad .LBE2416
+ 35736 00000000
+ 35737 884d 02 .byte 0x2
+ 35738 884e 6006 .value 0x660
+ 35739 8850 32 .uleb128 0x32
+ 35740 8851 04570000 .long 0x5704
+ 35741 8855 03 .byte 0x3
+ 35742 8856 91 .byte 0x91
+ 35743 8857 9C72 .sleb128 -1764
+ 35744 8859 00 .byte 0x0
+ 35745 885a 00 .byte 0x0
+ 35746 885b 00 .byte 0x0
+ 35747 885c 31 .uleb128 0x31
+ 35748 885d F60E0000 .long 0xef6
+ 35749 8861 00000000 .quad .LBB2418
+ 35749 00000000
+ 35750 8869 00000000 .quad .LBE2418
+ 35750 00000000
+ 35751 8871 02 .byte 0x2
+ 35752 8872 4F07 .value 0x74f
+ 35753 8874 718A0000 .long 0x8a71
+ 35754 8878 32 .uleb128 0x32
+ 35755 8879 080F0000 .long 0xf08
+ 35756 887d 03 .byte 0x3
+ 35757 887e 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 929
+
+
+ 35758 887f A072 .sleb128 -1760
+ 35759 8881 33 .uleb128 0x33
+ 35760 8882 00000000 .quad .LBB2419
+ 35760 00000000
+ 35761 888a 00000000 .quad .LBE2419
+ 35761 00000000
+ 35762 8892 34 .uleb128 0x34
+ 35763 8893 140F0000 .long 0xf14
+ 35764 8897 04 .byte 0x4
+ 35765 8898 76 .byte 0x76
+ 35766 8899 D0BC7F .sleb128 -8624
+ 35767 889c 31 .uleb128 0x31
+ 35768 889d 210F0000 .long 0xf21
+ 35769 88a1 00000000 .quad .LBB2420
+ 35769 00000000
+ 35770 88a9 00000000 .quad .LBE2420
+ 35770 00000000
+ 35771 88b1 02 .byte 0x2
+ 35772 88b2 1F06 .value 0x61f
+ 35773 88b4 39890000 .long 0x8939
+ 35774 88b8 32 .uleb128 0x32
+ 35775 88b9 330F0000 .long 0xf33
+ 35776 88bd 03 .byte 0x3
+ 35777 88be 91 .byte 0x91
+ 35778 88bf B072 .sleb128 -1744
+ 35779 88c1 33 .uleb128 0x33
+ 35780 88c2 00000000 .quad .LBB2421
+ 35780 00000000
+ 35781 88ca 00000000 .quad .LBE2421
+ 35781 00000000
+ 35782 88d2 34 .uleb128 0x34
+ 35783 88d3 3F0F0000 .long 0xf3f
+ 35784 88d7 09 .byte 0x9
+ 35785 88d8 03 .byte 0x3
+ 35786 88d9 00000000 .quad mask.7943
+ 35786 00000000
+ 35787 88e1 35 .uleb128 0x35
+ 35788 88e2 A00D0000 .long 0xda0
+ 35789 88e6 00000000 .quad .LBB2422
+ 35789 00000000
+ 35790 88ee 00000000 .quad .LBE2422
+ 35790 00000000
+ 35791 88f6 02 .byte 0x2
+ 35792 88f7 FE04 .value 0x4fe
+ 35793 88f9 32 .uleb128 0x32
+ 35794 88fa BE0D0000 .long 0xdbe
+ 35795 88fe 03 .byte 0x3
+ 35796 88ff 91 .byte 0x91
+ 35797 8900 C072 .sleb128 -1728
+ 35798 8902 32 .uleb128 0x32
+ 35799 8903 B20D0000 .long 0xdb2
+ 35800 8907 03 .byte 0x3
+ 35801 8908 91 .byte 0x91
+ 35802 8909 D072 .sleb128 -1712
+ 35803 890b 35 .uleb128 0x35
+ 35804 890c CB0D0000 .long 0xdcb
+ 35805 8910 00000000 .quad .LBB2424
+
GAS LISTING /tmp/ccjbMjHD.s page 930
+
+
+ 35805 00000000
+ 35806 8918 00000000 .quad .LBE2424
+ 35806 00000000
+ 35807 8920 02 .byte 0x2
+ 35808 8921 7501 .value 0x175
+ 35809 8923 32 .uleb128 0x32
+ 35810 8924 E90D0000 .long 0xde9
+ 35811 8928 03 .byte 0x3
+ 35812 8929 91 .byte 0x91
+ 35813 892a E072 .sleb128 -1696
+ 35814 892c 32 .uleb128 0x32
+ 35815 892d DD0D0000 .long 0xddd
+ 35816 8931 03 .byte 0x3
+ 35817 8932 91 .byte 0x91
+ 35818 8933 F072 .sleb128 -1680
+ 35819 8935 00 .byte 0x0
+ 35820 8936 00 .byte 0x0
+ 35821 8937 00 .byte 0x0
+ 35822 8938 00 .byte 0x0
+ 35823 8939 31 .uleb128 0x31
+ 35824 893a 210F0000 .long 0xf21
+ 35825 893e 00000000 .quad .LBB2426
+ 35825 00000000
+ 35826 8946 00000000 .quad .LBE2426
+ 35826 00000000
+ 35827 894e 02 .byte 0x2
+ 35828 894f 2006 .value 0x620
+ 35829 8951 D6890000 .long 0x89d6
+ 35830 8955 32 .uleb128 0x32
+ 35831 8956 330F0000 .long 0xf33
+ 35832 895a 03 .byte 0x3
+ 35833 895b 91 .byte 0x91
+ 35834 895c 8073 .sleb128 -1664
+ 35835 895e 33 .uleb128 0x33
+ 35836 895f 00000000 .quad .LBB2427
+ 35836 00000000
+ 35837 8967 00000000 .quad .LBE2427
+ 35837 00000000
+ 35838 896f 34 .uleb128 0x34
+ 35839 8970 3F0F0000 .long 0xf3f
+ 35840 8974 09 .byte 0x9
+ 35841 8975 03 .byte 0x3
+ 35842 8976 00000000 .quad mask.7943
+ 35842 00000000
+ 35843 897e 35 .uleb128 0x35
+ 35844 897f A00D0000 .long 0xda0
+ 35845 8983 00000000 .quad .LBB2428
+ 35845 00000000
+ 35846 898b 00000000 .quad .LBE2428
+ 35846 00000000
+ 35847 8993 02 .byte 0x2
+ 35848 8994 FE04 .value 0x4fe
+ 35849 8996 32 .uleb128 0x32
+ 35850 8997 BE0D0000 .long 0xdbe
+ 35851 899b 03 .byte 0x3
+ 35852 899c 91 .byte 0x91
+ 35853 899d 9073 .sleb128 -1648
+
GAS LISTING /tmp/ccjbMjHD.s page 931
+
+
+ 35854 899f 32 .uleb128 0x32
+ 35855 89a0 B20D0000 .long 0xdb2
+ 35856 89a4 03 .byte 0x3
+ 35857 89a5 91 .byte 0x91
+ 35858 89a6 A073 .sleb128 -1632
+ 35859 89a8 35 .uleb128 0x35
+ 35860 89a9 CB0D0000 .long 0xdcb
+ 35861 89ad 00000000 .quad .LBB2430
+ 35861 00000000
+ 35862 89b5 00000000 .quad .LBE2430
+ 35862 00000000
+ 35863 89bd 02 .byte 0x2
+ 35864 89be 7501 .value 0x175
+ 35865 89c0 32 .uleb128 0x32
+ 35866 89c1 E90D0000 .long 0xde9
+ 35867 89c5 03 .byte 0x3
+ 35868 89c6 91 .byte 0x91
+ 35869 89c7 B073 .sleb128 -1616
+ 35870 89c9 32 .uleb128 0x32
+ 35871 89ca DD0D0000 .long 0xddd
+ 35872 89ce 03 .byte 0x3
+ 35873 89cf 91 .byte 0x91
+ 35874 89d0 C073 .sleb128 -1600
+ 35875 89d2 00 .byte 0x0
+ 35876 89d3 00 .byte 0x0
+ 35877 89d4 00 .byte 0x0
+ 35878 89d5 00 .byte 0x0
+ 35879 89d6 35 .uleb128 0x35
+ 35880 89d7 210F0000 .long 0xf21
+ 35881 89db 00000000 .quad .LBB2432
+ 35881 00000000
+ 35882 89e3 00000000 .quad .LBE2432
+ 35882 00000000
+ 35883 89eb 02 .byte 0x2
+ 35884 89ec 2106 .value 0x621
+ 35885 89ee 32 .uleb128 0x32
+ 35886 89ef 330F0000 .long 0xf33
+ 35887 89f3 03 .byte 0x3
+ 35888 89f4 91 .byte 0x91
+ 35889 89f5 D073 .sleb128 -1584
+ 35890 89f7 33 .uleb128 0x33
+ 35891 89f8 00000000 .quad .LBB2433
+ 35891 00000000
+ 35892 8a00 00000000 .quad .LBE2433
+ 35892 00000000
+ 35893 8a08 34 .uleb128 0x34
+ 35894 8a09 3F0F0000 .long 0xf3f
+ 35895 8a0d 09 .byte 0x9
+ 35896 8a0e 03 .byte 0x3
+ 35897 8a0f 00000000 .quad mask.7943
+ 35897 00000000
+ 35898 8a17 35 .uleb128 0x35
+ 35899 8a18 A00D0000 .long 0xda0
+ 35900 8a1c 00000000 .quad .LBB2434
+ 35900 00000000
+ 35901 8a24 00000000 .quad .LBE2434
+ 35901 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 932
+
+
+ 35902 8a2c 02 .byte 0x2
+ 35903 8a2d FE04 .value 0x4fe
+ 35904 8a2f 32 .uleb128 0x32
+ 35905 8a30 BE0D0000 .long 0xdbe
+ 35906 8a34 03 .byte 0x3
+ 35907 8a35 91 .byte 0x91
+ 35908 8a36 E073 .sleb128 -1568
+ 35909 8a38 32 .uleb128 0x32
+ 35910 8a39 B20D0000 .long 0xdb2
+ 35911 8a3d 03 .byte 0x3
+ 35912 8a3e 91 .byte 0x91
+ 35913 8a3f F073 .sleb128 -1552
+ 35914 8a41 35 .uleb128 0x35
+ 35915 8a42 CB0D0000 .long 0xdcb
+ 35916 8a46 00000000 .quad .LBB2436
+ 35916 00000000
+ 35917 8a4e 00000000 .quad .LBE2436
+ 35917 00000000
+ 35918 8a56 02 .byte 0x2
+ 35919 8a57 7501 .value 0x175
+ 35920 8a59 32 .uleb128 0x32
+ 35921 8a5a E90D0000 .long 0xde9
+ 35922 8a5e 03 .byte 0x3
+ 35923 8a5f 91 .byte 0x91
+ 35924 8a60 8074 .sleb128 -1536
+ 35925 8a62 32 .uleb128 0x32
+ 35926 8a63 DD0D0000 .long 0xddd
+ 35927 8a67 03 .byte 0x3
+ 35928 8a68 91 .byte 0x91
+ 35929 8a69 9074 .sleb128 -1520
+ 35930 8a6b 00 .byte 0x0
+ 35931 8a6c 00 .byte 0x0
+ 35932 8a6d 00 .byte 0x0
+ 35933 8a6e 00 .byte 0x0
+ 35934 8a6f 00 .byte 0x0
+ 35935 8a70 00 .byte 0x0
+ 35936 8a71 31 .uleb128 0x31
+ 35937 8a72 F60E0000 .long 0xef6
+ 35938 8a76 00000000 .quad .LBB2438
+ 35938 00000000
+ 35939 8a7e 00000000 .quad .LBE2438
+ 35939 00000000
+ 35940 8a86 02 .byte 0x2
+ 35941 8a87 5007 .value 0x750
+ 35942 8a89 868C0000 .long 0x8c86
+ 35943 8a8d 32 .uleb128 0x32
+ 35944 8a8e 080F0000 .long 0xf08
+ 35945 8a92 03 .byte 0x3
+ 35946 8a93 91 .byte 0x91
+ 35947 8a94 A074 .sleb128 -1504
+ 35948 8a96 33 .uleb128 0x33
+ 35949 8a97 00000000 .quad .LBB2439
+ 35949 00000000
+ 35950 8a9f 00000000 .quad .LBE2439
+ 35950 00000000
+ 35951 8aa7 34 .uleb128 0x34
+ 35952 8aa8 140F0000 .long 0xf14
+
GAS LISTING /tmp/ccjbMjHD.s page 933
+
+
+ 35953 8aac 04 .byte 0x4
+ 35954 8aad 76 .byte 0x76
+ 35955 8aae E0BC7F .sleb128 -8608
+ 35956 8ab1 31 .uleb128 0x31
+ 35957 8ab2 210F0000 .long 0xf21
+ 35958 8ab6 00000000 .quad .LBB2440
+ 35958 00000000
+ 35959 8abe 00000000 .quad .LBE2440
+ 35959 00000000
+ 35960 8ac6 02 .byte 0x2
+ 35961 8ac7 1F06 .value 0x61f
+ 35962 8ac9 4E8B0000 .long 0x8b4e
+ 35963 8acd 32 .uleb128 0x32
+ 35964 8ace 330F0000 .long 0xf33
+ 35965 8ad2 03 .byte 0x3
+ 35966 8ad3 91 .byte 0x91
+ 35967 8ad4 B074 .sleb128 -1488
+ 35968 8ad6 33 .uleb128 0x33
+ 35969 8ad7 00000000 .quad .LBB2441
+ 35969 00000000
+ 35970 8adf 00000000 .quad .LBE2441
+ 35970 00000000
+ 35971 8ae7 34 .uleb128 0x34
+ 35972 8ae8 3F0F0000 .long 0xf3f
+ 35973 8aec 09 .byte 0x9
+ 35974 8aed 03 .byte 0x3
+ 35975 8aee 00000000 .quad mask.7943
+ 35975 00000000
+ 35976 8af6 35 .uleb128 0x35
+ 35977 8af7 A00D0000 .long 0xda0
+ 35978 8afb 00000000 .quad .LBB2442
+ 35978 00000000
+ 35979 8b03 00000000 .quad .LBE2442
+ 35979 00000000
+ 35980 8b0b 02 .byte 0x2
+ 35981 8b0c FE04 .value 0x4fe
+ 35982 8b0e 32 .uleb128 0x32
+ 35983 8b0f BE0D0000 .long 0xdbe
+ 35984 8b13 03 .byte 0x3
+ 35985 8b14 91 .byte 0x91
+ 35986 8b15 C074 .sleb128 -1472
+ 35987 8b17 32 .uleb128 0x32
+ 35988 8b18 B20D0000 .long 0xdb2
+ 35989 8b1c 03 .byte 0x3
+ 35990 8b1d 91 .byte 0x91
+ 35991 8b1e D074 .sleb128 -1456
+ 35992 8b20 35 .uleb128 0x35
+ 35993 8b21 CB0D0000 .long 0xdcb
+ 35994 8b25 00000000 .quad .LBB2444
+ 35994 00000000
+ 35995 8b2d 00000000 .quad .LBE2444
+ 35995 00000000
+ 35996 8b35 02 .byte 0x2
+ 35997 8b36 7501 .value 0x175
+ 35998 8b38 32 .uleb128 0x32
+ 35999 8b39 E90D0000 .long 0xde9
+ 36000 8b3d 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 934
+
+
+ 36001 8b3e 91 .byte 0x91
+ 36002 8b3f E074 .sleb128 -1440
+ 36003 8b41 32 .uleb128 0x32
+ 36004 8b42 DD0D0000 .long 0xddd
+ 36005 8b46 03 .byte 0x3
+ 36006 8b47 91 .byte 0x91
+ 36007 8b48 F074 .sleb128 -1424
+ 36008 8b4a 00 .byte 0x0
+ 36009 8b4b 00 .byte 0x0
+ 36010 8b4c 00 .byte 0x0
+ 36011 8b4d 00 .byte 0x0
+ 36012 8b4e 31 .uleb128 0x31
+ 36013 8b4f 210F0000 .long 0xf21
+ 36014 8b53 00000000 .quad .LBB2446
+ 36014 00000000
+ 36015 8b5b 00000000 .quad .LBE2446
+ 36015 00000000
+ 36016 8b63 02 .byte 0x2
+ 36017 8b64 2006 .value 0x620
+ 36018 8b66 EB8B0000 .long 0x8beb
+ 36019 8b6a 32 .uleb128 0x32
+ 36020 8b6b 330F0000 .long 0xf33
+ 36021 8b6f 03 .byte 0x3
+ 36022 8b70 91 .byte 0x91
+ 36023 8b71 8075 .sleb128 -1408
+ 36024 8b73 33 .uleb128 0x33
+ 36025 8b74 00000000 .quad .LBB2447
+ 36025 00000000
+ 36026 8b7c 00000000 .quad .LBE2447
+ 36026 00000000
+ 36027 8b84 34 .uleb128 0x34
+ 36028 8b85 3F0F0000 .long 0xf3f
+ 36029 8b89 09 .byte 0x9
+ 36030 8b8a 03 .byte 0x3
+ 36031 8b8b 00000000 .quad mask.7943
+ 36031 00000000
+ 36032 8b93 35 .uleb128 0x35
+ 36033 8b94 A00D0000 .long 0xda0
+ 36034 8b98 00000000 .quad .LBB2448
+ 36034 00000000
+ 36035 8ba0 00000000 .quad .LBE2448
+ 36035 00000000
+ 36036 8ba8 02 .byte 0x2
+ 36037 8ba9 FE04 .value 0x4fe
+ 36038 8bab 32 .uleb128 0x32
+ 36039 8bac BE0D0000 .long 0xdbe
+ 36040 8bb0 03 .byte 0x3
+ 36041 8bb1 91 .byte 0x91
+ 36042 8bb2 9075 .sleb128 -1392
+ 36043 8bb4 32 .uleb128 0x32
+ 36044 8bb5 B20D0000 .long 0xdb2
+ 36045 8bb9 03 .byte 0x3
+ 36046 8bba 91 .byte 0x91
+ 36047 8bbb A075 .sleb128 -1376
+ 36048 8bbd 35 .uleb128 0x35
+ 36049 8bbe CB0D0000 .long 0xdcb
+ 36050 8bc2 00000000 .quad .LBB2450
+
GAS LISTING /tmp/ccjbMjHD.s page 935
+
+
+ 36050 00000000
+ 36051 8bca 00000000 .quad .LBE2450
+ 36051 00000000
+ 36052 8bd2 02 .byte 0x2
+ 36053 8bd3 7501 .value 0x175
+ 36054 8bd5 32 .uleb128 0x32
+ 36055 8bd6 E90D0000 .long 0xde9
+ 36056 8bda 03 .byte 0x3
+ 36057 8bdb 91 .byte 0x91
+ 36058 8bdc B075 .sleb128 -1360
+ 36059 8bde 32 .uleb128 0x32
+ 36060 8bdf DD0D0000 .long 0xddd
+ 36061 8be3 03 .byte 0x3
+ 36062 8be4 91 .byte 0x91
+ 36063 8be5 C075 .sleb128 -1344
+ 36064 8be7 00 .byte 0x0
+ 36065 8be8 00 .byte 0x0
+ 36066 8be9 00 .byte 0x0
+ 36067 8bea 00 .byte 0x0
+ 36068 8beb 35 .uleb128 0x35
+ 36069 8bec 210F0000 .long 0xf21
+ 36070 8bf0 00000000 .quad .LBB2452
+ 36070 00000000
+ 36071 8bf8 00000000 .quad .LBE2452
+ 36071 00000000
+ 36072 8c00 02 .byte 0x2
+ 36073 8c01 2106 .value 0x621
+ 36074 8c03 32 .uleb128 0x32
+ 36075 8c04 330F0000 .long 0xf33
+ 36076 8c08 03 .byte 0x3
+ 36077 8c09 91 .byte 0x91
+ 36078 8c0a D075 .sleb128 -1328
+ 36079 8c0c 33 .uleb128 0x33
+ 36080 8c0d 00000000 .quad .LBB2453
+ 36080 00000000
+ 36081 8c15 00000000 .quad .LBE2453
+ 36081 00000000
+ 36082 8c1d 34 .uleb128 0x34
+ 36083 8c1e 3F0F0000 .long 0xf3f
+ 36084 8c22 09 .byte 0x9
+ 36085 8c23 03 .byte 0x3
+ 36086 8c24 00000000 .quad mask.7943
+ 36086 00000000
+ 36087 8c2c 35 .uleb128 0x35
+ 36088 8c2d A00D0000 .long 0xda0
+ 36089 8c31 00000000 .quad .LBB2454
+ 36089 00000000
+ 36090 8c39 00000000 .quad .LBE2454
+ 36090 00000000
+ 36091 8c41 02 .byte 0x2
+ 36092 8c42 FE04 .value 0x4fe
+ 36093 8c44 32 .uleb128 0x32
+ 36094 8c45 BE0D0000 .long 0xdbe
+ 36095 8c49 03 .byte 0x3
+ 36096 8c4a 91 .byte 0x91
+ 36097 8c4b E075 .sleb128 -1312
+ 36098 8c4d 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 936
+
+
+ 36099 8c4e B20D0000 .long 0xdb2
+ 36100 8c52 03 .byte 0x3
+ 36101 8c53 91 .byte 0x91
+ 36102 8c54 F075 .sleb128 -1296
+ 36103 8c56 35 .uleb128 0x35
+ 36104 8c57 CB0D0000 .long 0xdcb
+ 36105 8c5b 00000000 .quad .LBB2456
+ 36105 00000000
+ 36106 8c63 00000000 .quad .LBE2456
+ 36106 00000000
+ 36107 8c6b 02 .byte 0x2
+ 36108 8c6c 7501 .value 0x175
+ 36109 8c6e 32 .uleb128 0x32
+ 36110 8c6f E90D0000 .long 0xde9
+ 36111 8c73 03 .byte 0x3
+ 36112 8c74 91 .byte 0x91
+ 36113 8c75 8076 .sleb128 -1280
+ 36114 8c77 32 .uleb128 0x32
+ 36115 8c78 DD0D0000 .long 0xddd
+ 36116 8c7c 03 .byte 0x3
+ 36117 8c7d 91 .byte 0x91
+ 36118 8c7e 9076 .sleb128 -1264
+ 36119 8c80 00 .byte 0x0
+ 36120 8c81 00 .byte 0x0
+ 36121 8c82 00 .byte 0x0
+ 36122 8c83 00 .byte 0x0
+ 36123 8c84 00 .byte 0x0
+ 36124 8c85 00 .byte 0x0
+ 36125 8c86 31 .uleb128 0x31
+ 36126 8c87 AC0E0000 .long 0xeac
+ 36127 8c8b 00000000 .quad .LBB2458
+ 36127 00000000
+ 36128 8c93 00000000 .quad .LBE2458
+ 36128 00000000
+ 36129 8c9b 02 .byte 0x2
+ 36130 8c9c 5207 .value 0x752
+ 36131 8c9e D78C0000 .long 0x8cd7
+ 36132 8ca2 32 .uleb128 0x32
+ 36133 8ca3 BE0E0000 .long 0xebe
+ 36134 8ca7 03 .byte 0x3
+ 36135 8ca8 91 .byte 0x91
+ 36136 8ca9 A076 .sleb128 -1248
+ 36137 8cab 35 .uleb128 0x35
+ 36138 8cac CB0E0000 .long 0xecb
+ 36139 8cb0 00000000 .quad .LBB2460
+ 36139 00000000
+ 36140 8cb8 00000000 .quad .LBE2460
+ 36140 00000000
+ 36141 8cc0 02 .byte 0x2
+ 36142 8cc1 4905 .value 0x549
+ 36143 8cc3 32 .uleb128 0x32
+ 36144 8cc4 E90E0000 .long 0xee9
+ 36145 8cc8 03 .byte 0x3
+ 36146 8cc9 91 .byte 0x91
+ 36147 8cca BC76 .sleb128 -1220
+ 36148 8ccc 32 .uleb128 0x32
+ 36149 8ccd DD0E0000 .long 0xedd
+
GAS LISTING /tmp/ccjbMjHD.s page 937
+
+
+ 36150 8cd1 03 .byte 0x3
+ 36151 8cd2 91 .byte 0x91
+ 36152 8cd3 C076 .sleb128 -1216
+ 36153 8cd5 00 .byte 0x0
+ 36154 8cd6 00 .byte 0x0
+ 36155 8cd7 31 .uleb128 0x31
+ 36156 8cd8 0F570000 .long 0x570f
+ 36157 8cdc 00000000 .quad .LBB2462
+ 36157 00000000
+ 36158 8ce4 00000000 .quad .LBE2462
+ 36158 00000000
+ 36159 8cec 02 .byte 0x2
+ 36160 8ced 5407 .value 0x754
+ 36161 8cef 3A8D0000 .long 0x8d3a
+ 36162 8cf3 32 .uleb128 0x32
+ 36163 8cf4 2B570000 .long 0x572b
+ 36164 8cf8 03 .byte 0x3
+ 36165 8cf9 91 .byte 0x91
+ 36166 8cfa D076 .sleb128 -1200
+ 36167 8cfc 32 .uleb128 0x32
+ 36168 8cfd 21570000 .long 0x5721
+ 36169 8d01 03 .byte 0x3
+ 36170 8d02 91 .byte 0x91
+ 36171 8d03 E076 .sleb128 -1184
+ 36172 8d05 35 .uleb128 0x35
+ 36173 8d06 36570000 .long 0x5736
+ 36174 8d0a 00000000 .quad .LBB2464
+ 36174 00000000
+ 36175 8d12 00000000 .quad .LBE2464
+ 36175 00000000
+ 36176 8d1a 02 .byte 0x2
+ 36177 8d1b BA05 .value 0x5ba
+ 36178 8d1d 32 .uleb128 0x32
+ 36179 8d1e 60570000 .long 0x5760
+ 36180 8d22 03 .byte 0x3
+ 36181 8d23 91 .byte 0x91
+ 36182 8d24 FC76 .sleb128 -1156
+ 36183 8d26 32 .uleb128 0x32
+ 36184 8d27 54570000 .long 0x5754
+ 36185 8d2b 03 .byte 0x3
+ 36186 8d2c 91 .byte 0x91
+ 36187 8d2d 8077 .sleb128 -1152
+ 36188 8d2f 32 .uleb128 0x32
+ 36189 8d30 48570000 .long 0x5748
+ 36190 8d34 03 .byte 0x3
+ 36191 8d35 91 .byte 0x91
+ 36192 8d36 9077 .sleb128 -1136
+ 36193 8d38 00 .byte 0x0
+ 36194 8d39 00 .byte 0x0
+ 36195 8d3a 31 .uleb128 0x31
+ 36196 8d3b 6D570000 .long 0x576d
+ 36197 8d3f 00000000 .quad .LBB2466
+ 36197 00000000
+ 36198 8d47 00000000 .quad .LBE2466
+ 36198 00000000
+ 36199 8d4f 02 .byte 0x2
+ 36200 8d50 5607 .value 0x756
+
GAS LISTING /tmp/ccjbMjHD.s page 938
+
+
+ 36201 8d52 9D8D0000 .long 0x8d9d
+ 36202 8d56 32 .uleb128 0x32
+ 36203 8d57 89570000 .long 0x5789
+ 36204 8d5b 03 .byte 0x3
+ 36205 8d5c 91 .byte 0x91
+ 36206 8d5d A077 .sleb128 -1120
+ 36207 8d5f 32 .uleb128 0x32
+ 36208 8d60 7F570000 .long 0x577f
+ 36209 8d64 03 .byte 0x3
+ 36210 8d65 91 .byte 0x91
+ 36211 8d66 B077 .sleb128 -1104
+ 36212 8d68 35 .uleb128 0x35
+ 36213 8d69 36570000 .long 0x5736
+ 36214 8d6d 00000000 .quad .LBB2468
+ 36214 00000000
+ 36215 8d75 00000000 .quad .LBE2468
+ 36215 00000000
+ 36216 8d7d 02 .byte 0x2
+ 36217 8d7e DA05 .value 0x5da
+ 36218 8d80 32 .uleb128 0x32
+ 36219 8d81 60570000 .long 0x5760
+ 36220 8d85 03 .byte 0x3
+ 36221 8d86 91 .byte 0x91
+ 36222 8d87 CC77 .sleb128 -1076
+ 36223 8d89 32 .uleb128 0x32
+ 36224 8d8a 54570000 .long 0x5754
+ 36225 8d8e 03 .byte 0x3
+ 36226 8d8f 91 .byte 0x91
+ 36227 8d90 D077 .sleb128 -1072
+ 36228 8d92 32 .uleb128 0x32
+ 36229 8d93 48570000 .long 0x5748
+ 36230 8d97 03 .byte 0x3
+ 36231 8d98 91 .byte 0x91
+ 36232 8d99 E077 .sleb128 -1056
+ 36233 8d9b 00 .byte 0x0
+ 36234 8d9c 00 .byte 0x0
+ 36235 8d9d 31 .uleb128 0x31
+ 36236 8d9e F60E0000 .long 0xef6
+ 36237 8da2 00000000 .quad .LBB2470
+ 36237 00000000
+ 36238 8daa 00000000 .quad .LBE2470
+ 36238 00000000
+ 36239 8db2 02 .byte 0x2
+ 36240 8db3 5A07 .value 0x75a
+ 36241 8db5 B28F0000 .long 0x8fb2
+ 36242 8db9 32 .uleb128 0x32
+ 36243 8dba 080F0000 .long 0xf08
+ 36244 8dbe 03 .byte 0x3
+ 36245 8dbf 91 .byte 0x91
+ 36246 8dc0 F077 .sleb128 -1040
+ 36247 8dc2 33 .uleb128 0x33
+ 36248 8dc3 00000000 .quad .LBB2471
+ 36248 00000000
+ 36249 8dcb 00000000 .quad .LBE2471
+ 36249 00000000
+ 36250 8dd3 34 .uleb128 0x34
+ 36251 8dd4 140F0000 .long 0xf14
+
GAS LISTING /tmp/ccjbMjHD.s page 939
+
+
+ 36252 8dd8 04 .byte 0x4
+ 36253 8dd9 76 .byte 0x76
+ 36254 8dda F0BC7F .sleb128 -8592
+ 36255 8ddd 31 .uleb128 0x31
+ 36256 8dde 210F0000 .long 0xf21
+ 36257 8de2 00000000 .quad .LBB2472
+ 36257 00000000
+ 36258 8dea 00000000 .quad .LBE2472
+ 36258 00000000
+ 36259 8df2 02 .byte 0x2
+ 36260 8df3 1F06 .value 0x61f
+ 36261 8df5 7A8E0000 .long 0x8e7a
+ 36262 8df9 32 .uleb128 0x32
+ 36263 8dfa 330F0000 .long 0xf33
+ 36264 8dfe 03 .byte 0x3
+ 36265 8dff 91 .byte 0x91
+ 36266 8e00 8078 .sleb128 -1024
+ 36267 8e02 33 .uleb128 0x33
+ 36268 8e03 00000000 .quad .LBB2473
+ 36268 00000000
+ 36269 8e0b 00000000 .quad .LBE2473
+ 36269 00000000
+ 36270 8e13 34 .uleb128 0x34
+ 36271 8e14 3F0F0000 .long 0xf3f
+ 36272 8e18 09 .byte 0x9
+ 36273 8e19 03 .byte 0x3
+ 36274 8e1a 00000000 .quad mask.7943
+ 36274 00000000
+ 36275 8e22 35 .uleb128 0x35
+ 36276 8e23 A00D0000 .long 0xda0
+ 36277 8e27 00000000 .quad .LBB2474
+ 36277 00000000
+ 36278 8e2f 00000000 .quad .LBE2474
+ 36278 00000000
+ 36279 8e37 02 .byte 0x2
+ 36280 8e38 FE04 .value 0x4fe
+ 36281 8e3a 32 .uleb128 0x32
+ 36282 8e3b BE0D0000 .long 0xdbe
+ 36283 8e3f 03 .byte 0x3
+ 36284 8e40 91 .byte 0x91
+ 36285 8e41 9078 .sleb128 -1008
+ 36286 8e43 32 .uleb128 0x32
+ 36287 8e44 B20D0000 .long 0xdb2
+ 36288 8e48 03 .byte 0x3
+ 36289 8e49 91 .byte 0x91
+ 36290 8e4a A078 .sleb128 -992
+ 36291 8e4c 35 .uleb128 0x35
+ 36292 8e4d CB0D0000 .long 0xdcb
+ 36293 8e51 00000000 .quad .LBB2476
+ 36293 00000000
+ 36294 8e59 00000000 .quad .LBE2476
+ 36294 00000000
+ 36295 8e61 02 .byte 0x2
+ 36296 8e62 7501 .value 0x175
+ 36297 8e64 32 .uleb128 0x32
+ 36298 8e65 E90D0000 .long 0xde9
+ 36299 8e69 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 940
+
+
+ 36300 8e6a 91 .byte 0x91
+ 36301 8e6b B078 .sleb128 -976
+ 36302 8e6d 32 .uleb128 0x32
+ 36303 8e6e DD0D0000 .long 0xddd
+ 36304 8e72 03 .byte 0x3
+ 36305 8e73 91 .byte 0x91
+ 36306 8e74 C078 .sleb128 -960
+ 36307 8e76 00 .byte 0x0
+ 36308 8e77 00 .byte 0x0
+ 36309 8e78 00 .byte 0x0
+ 36310 8e79 00 .byte 0x0
+ 36311 8e7a 31 .uleb128 0x31
+ 36312 8e7b 210F0000 .long 0xf21
+ 36313 8e7f 00000000 .quad .LBB2478
+ 36313 00000000
+ 36314 8e87 00000000 .quad .LBE2478
+ 36314 00000000
+ 36315 8e8f 02 .byte 0x2
+ 36316 8e90 2006 .value 0x620
+ 36317 8e92 178F0000 .long 0x8f17
+ 36318 8e96 32 .uleb128 0x32
+ 36319 8e97 330F0000 .long 0xf33
+ 36320 8e9b 03 .byte 0x3
+ 36321 8e9c 91 .byte 0x91
+ 36322 8e9d D078 .sleb128 -944
+ 36323 8e9f 33 .uleb128 0x33
+ 36324 8ea0 00000000 .quad .LBB2479
+ 36324 00000000
+ 36325 8ea8 00000000 .quad .LBE2479
+ 36325 00000000
+ 36326 8eb0 34 .uleb128 0x34
+ 36327 8eb1 3F0F0000 .long 0xf3f
+ 36328 8eb5 09 .byte 0x9
+ 36329 8eb6 03 .byte 0x3
+ 36330 8eb7 00000000 .quad mask.7943
+ 36330 00000000
+ 36331 8ebf 35 .uleb128 0x35
+ 36332 8ec0 A00D0000 .long 0xda0
+ 36333 8ec4 00000000 .quad .LBB2480
+ 36333 00000000
+ 36334 8ecc 00000000 .quad .LBE2480
+ 36334 00000000
+ 36335 8ed4 02 .byte 0x2
+ 36336 8ed5 FE04 .value 0x4fe
+ 36337 8ed7 32 .uleb128 0x32
+ 36338 8ed8 BE0D0000 .long 0xdbe
+ 36339 8edc 03 .byte 0x3
+ 36340 8edd 91 .byte 0x91
+ 36341 8ede E078 .sleb128 -928
+ 36342 8ee0 32 .uleb128 0x32
+ 36343 8ee1 B20D0000 .long 0xdb2
+ 36344 8ee5 03 .byte 0x3
+ 36345 8ee6 91 .byte 0x91
+ 36346 8ee7 F078 .sleb128 -912
+ 36347 8ee9 35 .uleb128 0x35
+ 36348 8eea CB0D0000 .long 0xdcb
+ 36349 8eee 00000000 .quad .LBB2482
+
GAS LISTING /tmp/ccjbMjHD.s page 941
+
+
+ 36349 00000000
+ 36350 8ef6 00000000 .quad .LBE2482
+ 36350 00000000
+ 36351 8efe 02 .byte 0x2
+ 36352 8eff 7501 .value 0x175
+ 36353 8f01 32 .uleb128 0x32
+ 36354 8f02 E90D0000 .long 0xde9
+ 36355 8f06 03 .byte 0x3
+ 36356 8f07 91 .byte 0x91
+ 36357 8f08 8079 .sleb128 -896
+ 36358 8f0a 32 .uleb128 0x32
+ 36359 8f0b DD0D0000 .long 0xddd
+ 36360 8f0f 03 .byte 0x3
+ 36361 8f10 91 .byte 0x91
+ 36362 8f11 9079 .sleb128 -880
+ 36363 8f13 00 .byte 0x0
+ 36364 8f14 00 .byte 0x0
+ 36365 8f15 00 .byte 0x0
+ 36366 8f16 00 .byte 0x0
+ 36367 8f17 35 .uleb128 0x35
+ 36368 8f18 210F0000 .long 0xf21
+ 36369 8f1c 00000000 .quad .LBB2484
+ 36369 00000000
+ 36370 8f24 00000000 .quad .LBE2484
+ 36370 00000000
+ 36371 8f2c 02 .byte 0x2
+ 36372 8f2d 2106 .value 0x621
+ 36373 8f2f 32 .uleb128 0x32
+ 36374 8f30 330F0000 .long 0xf33
+ 36375 8f34 03 .byte 0x3
+ 36376 8f35 91 .byte 0x91
+ 36377 8f36 A079 .sleb128 -864
+ 36378 8f38 33 .uleb128 0x33
+ 36379 8f39 00000000 .quad .LBB2485
+ 36379 00000000
+ 36380 8f41 00000000 .quad .LBE2485
+ 36380 00000000
+ 36381 8f49 34 .uleb128 0x34
+ 36382 8f4a 3F0F0000 .long 0xf3f
+ 36383 8f4e 09 .byte 0x9
+ 36384 8f4f 03 .byte 0x3
+ 36385 8f50 00000000 .quad mask.7943
+ 36385 00000000
+ 36386 8f58 35 .uleb128 0x35
+ 36387 8f59 A00D0000 .long 0xda0
+ 36388 8f5d 00000000 .quad .LBB2486
+ 36388 00000000
+ 36389 8f65 00000000 .quad .LBE2486
+ 36389 00000000
+ 36390 8f6d 02 .byte 0x2
+ 36391 8f6e FE04 .value 0x4fe
+ 36392 8f70 32 .uleb128 0x32
+ 36393 8f71 BE0D0000 .long 0xdbe
+ 36394 8f75 03 .byte 0x3
+ 36395 8f76 91 .byte 0x91
+ 36396 8f77 B079 .sleb128 -848
+ 36397 8f79 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 942
+
+
+ 36398 8f7a B20D0000 .long 0xdb2
+ 36399 8f7e 03 .byte 0x3
+ 36400 8f7f 91 .byte 0x91
+ 36401 8f80 C079 .sleb128 -832
+ 36402 8f82 35 .uleb128 0x35
+ 36403 8f83 CB0D0000 .long 0xdcb
+ 36404 8f87 00000000 .quad .LBB2488
+ 36404 00000000
+ 36405 8f8f 00000000 .quad .LBE2488
+ 36405 00000000
+ 36406 8f97 02 .byte 0x2
+ 36407 8f98 7501 .value 0x175
+ 36408 8f9a 32 .uleb128 0x32
+ 36409 8f9b E90D0000 .long 0xde9
+ 36410 8f9f 03 .byte 0x3
+ 36411 8fa0 91 .byte 0x91
+ 36412 8fa1 D079 .sleb128 -816
+ 36413 8fa3 32 .uleb128 0x32
+ 36414 8fa4 DD0D0000 .long 0xddd
+ 36415 8fa8 03 .byte 0x3
+ 36416 8fa9 91 .byte 0x91
+ 36417 8faa E079 .sleb128 -800
+ 36418 8fac 00 .byte 0x0
+ 36419 8fad 00 .byte 0x0
+ 36420 8fae 00 .byte 0x0
+ 36421 8faf 00 .byte 0x0
+ 36422 8fb0 00 .byte 0x0
+ 36423 8fb1 00 .byte 0x0
+ 36424 8fb2 35 .uleb128 0x35
+ 36425 8fb3 D50B0000 .long 0xbd5
+ 36426 8fb7 00000000 .quad .LBB2490
+ 36426 00000000
+ 36427 8fbf 00000000 .quad .LBE2490
+ 36427 00000000
+ 36428 8fc7 02 .byte 0x2
+ 36429 8fc8 5B07 .value 0x75b
+ 36430 8fca 32 .uleb128 0x32
+ 36431 8fcb F30B0000 .long 0xbf3
+ 36432 8fcf 03 .byte 0x3
+ 36433 8fd0 91 .byte 0x91
+ 36434 8fd1 FC79 .sleb128 -772
+ 36435 8fd3 32 .uleb128 0x32
+ 36436 8fd4 E70B0000 .long 0xbe7
+ 36437 8fd8 03 .byte 0x3
+ 36438 8fd9 91 .byte 0x91
+ 36439 8fda 807A .sleb128 -768
+ 36440 8fdc 33 .uleb128 0x33
+ 36441 8fdd 00000000 .quad .LBB2491
+ 36441 00000000
+ 36442 8fe5 00000000 .quad .LBE2491
+ 36442 00000000
+ 36443 8fed 34 .uleb128 0x34
+ 36444 8fee FF0B0000 .long 0xbff
+ 36445 8ff2 04 .byte 0x4
+ 36446 8ff3 76 .byte 0x76
+ 36447 8ff4 90BD7F .sleb128 -8560
+ 36448 8ff7 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 943
+
+
+ 36449 8ff8 0B0C0000 .long 0xc0b
+ 36450 8ffc 04 .byte 0x4
+ 36451 8ffd 76 .byte 0x76
+ 36452 8ffe 80BD7F .sleb128 -8576
+ 36453 9001 31 .uleb128 0x31
+ 36454 9002 540C0000 .long 0xc54
+ 36455 9006 00000000 .quad .LBB2492
+ 36455 00000000
+ 36456 900e 00000000 .quad .LBE2492
+ 36456 00000000
+ 36457 9016 02 .byte 0x2
+ 36458 9017 9106 .value 0x691
+ 36459 9019 6D900000 .long 0x906d
+ 36460 901d 32 .uleb128 0x32
+ 36461 901e 7E0C0000 .long 0xc7e
+ 36462 9022 03 .byte 0x3
+ 36463 9023 91 .byte 0x91
+ 36464 9024 987A .sleb128 -744
+ 36465 9026 32 .uleb128 0x32
+ 36466 9027 720C0000 .long 0xc72
+ 36467 902b 03 .byte 0x3
+ 36468 902c 91 .byte 0x91
+ 36469 902d 9C7A .sleb128 -740
+ 36470 902f 32 .uleb128 0x32
+ 36471 9030 660C0000 .long 0xc66
+ 36472 9034 03 .byte 0x3
+ 36473 9035 91 .byte 0x91
+ 36474 9036 A07A .sleb128 -736
+ 36475 9038 35 .uleb128 0x35
+ 36476 9039 8B0C0000 .long 0xc8b
+ 36477 903d 00000000 .quad .LBB2494
+ 36477 00000000
+ 36478 9045 00000000 .quad .LBE2494
+ 36478 00000000
+ 36479 904d 02 .byte 0x2
+ 36480 904e 0702 .value 0x207
+ 36481 9050 32 .uleb128 0x32
+ 36482 9051 B40C0000 .long 0xcb4
+ 36483 9055 03 .byte 0x3
+ 36484 9056 91 .byte 0x91
+ 36485 9057 B87A .sleb128 -712
+ 36486 9059 32 .uleb128 0x32
+ 36487 905a A90C0000 .long 0xca9
+ 36488 905e 03 .byte 0x3
+ 36489 905f 91 .byte 0x91
+ 36490 9060 BC7A .sleb128 -708
+ 36491 9062 32 .uleb128 0x32
+ 36492 9063 9D0C0000 .long 0xc9d
+ 36493 9067 03 .byte 0x3
+ 36494 9068 91 .byte 0x91
+ 36495 9069 C07A .sleb128 -704
+ 36496 906b 00 .byte 0x0
+ 36497 906c 00 .byte 0x0
+ 36498 906d 31 .uleb128 0x31
+ 36499 906e C10C0000 .long 0xcc1
+ 36500 9072 00000000 .quad .LBB2496
+ 36500 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 944
+
+
+ 36501 907a 00000000 .quad .LBE2496
+ 36501 00000000
+ 36502 9082 02 .byte 0x2
+ 36503 9083 9206 .value 0x692
+ 36504 9085 F6920000 .long 0x92f6
+ 36505 9089 32 .uleb128 0x32
+ 36506 908a D30C0000 .long 0xcd3
+ 36507 908e 03 .byte 0x3
+ 36508 908f 91 .byte 0x91
+ 36509 9090 D07A .sleb128 -688
+ 36510 9092 35 .uleb128 0x35
+ 36511 9093 E00C0000 .long 0xce0
+ 36512 9097 00000000 .quad .LBB2498
+ 36512 00000000
+ 36513 909f 00000000 .quad .LBE2498
+ 36513 00000000
+ 36514 90a7 02 .byte 0x2
+ 36515 90a8 7D03 .value 0x37d
+ 36516 90aa 32 .uleb128 0x32
+ 36517 90ab FE0C0000 .long 0xcfe
+ 36518 90af 03 .byte 0x3
+ 36519 90b0 91 .byte 0x91
+ 36520 90b1 E87A .sleb128 -664
+ 36521 90b3 32 .uleb128 0x32
+ 36522 90b4 F20C0000 .long 0xcf2
+ 36523 90b8 03 .byte 0x3
+ 36524 90b9 91 .byte 0x91
+ 36525 90ba F07A .sleb128 -656
+ 36526 90bc 33 .uleb128 0x33
+ 36527 90bd 00000000 .quad .LBB2499
+ 36527 00000000
+ 36528 90c5 00000000 .quad .LBE2499
+ 36528 00000000
+ 36529 90cd 34 .uleb128 0x34
+ 36530 90ce 0A0D0000 .long 0xd0a
+ 36531 90d2 03 .byte 0x3
+ 36532 90d3 91 .byte 0x91
+ 36533 90d4 C07B .sleb128 -576
+ 36534 90d6 34 .uleb128 0x34
+ 36535 90d7 150D0000 .long 0xd15
+ 36536 90db 03 .byte 0x3
+ 36537 90dc 91 .byte 0x91
+ 36538 90dd B07B .sleb128 -592
+ 36539 90df 34 .uleb128 0x34
+ 36540 90e0 200D0000 .long 0xd20
+ 36541 90e4 03 .byte 0x3
+ 36542 90e5 91 .byte 0x91
+ 36543 90e6 A07B .sleb128 -608
+ 36544 90e8 34 .uleb128 0x34
+ 36545 90e9 2C0D0000 .long 0xd2c
+ 36546 90ed 03 .byte 0x3
+ 36547 90ee 91 .byte 0x91
+ 36548 90ef 907B .sleb128 -624
+ 36549 90f1 34 .uleb128 0x34
+ 36550 90f2 380D0000 .long 0xd38
+ 36551 90f6 03 .byte 0x3
+ 36552 90f7 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 945
+
+
+ 36553 90f8 8C7B .sleb128 -628
+ 36554 90fa 31 .uleb128 0x31
+ 36555 90fb 4F0D0000 .long 0xd4f
+ 36556 90ff 00000000 .quad .LBB2500
+ 36556 00000000
+ 36557 9107 00000000 .quad .LBE2500
+ 36557 00000000
+ 36558 910f 02 .byte 0x2
+ 36559 9110 5603 .value 0x356
+ 36560 9112 29910000 .long 0x9129
+ 36561 9116 32 .uleb128 0x32
+ 36562 9117 6A0D0000 .long 0xd6a
+ 36563 911b 03 .byte 0x3
+ 36564 911c 91 .byte 0x91
+ 36565 911d D07B .sleb128 -560
+ 36566 911f 32 .uleb128 0x32
+ 36567 9120 600D0000 .long 0xd60
+ 36568 9124 03 .byte 0x3
+ 36569 9125 91 .byte 0x91
+ 36570 9126 E07B .sleb128 -544
+ 36571 9128 00 .byte 0x0
+ 36572 9129 31 .uleb128 0x31
+ 36573 912a 750D0000 .long 0xd75
+ 36574 912e 00000000 .quad .LBB2502
+ 36574 00000000
+ 36575 9136 00000000 .quad .LBE2502
+ 36575 00000000
+ 36576 913e 02 .byte 0x2
+ 36577 913f 5903 .value 0x359
+ 36578 9141 58910000 .long 0x9158
+ 36579 9145 32 .uleb128 0x32
+ 36580 9146 930D0000 .long 0xd93
+ 36581 914a 03 .byte 0x3
+ 36582 914b 91 .byte 0x91
+ 36583 914c FC7B .sleb128 -516
+ 36584 914e 32 .uleb128 0x32
+ 36585 914f 870D0000 .long 0xd87
+ 36586 9153 03 .byte 0x3
+ 36587 9154 91 .byte 0x91
+ 36588 9155 807C .sleb128 -512
+ 36589 9157 00 .byte 0x0
+ 36590 9158 31 .uleb128 0x31
+ 36591 9159 4F0D0000 .long 0xd4f
+ 36592 915d 00000000 .quad .LBB2504
+ 36592 00000000
+ 36593 9165 00000000 .quad .LBE2504
+ 36593 00000000
+ 36594 916d 02 .byte 0x2
+ 36595 916e 5B03 .value 0x35b
+ 36596 9170 87910000 .long 0x9187
+ 36597 9174 32 .uleb128 0x32
+ 36598 9175 6A0D0000 .long 0xd6a
+ 36599 9179 03 .byte 0x3
+ 36600 917a 91 .byte 0x91
+ 36601 917b 907C .sleb128 -496
+ 36602 917d 32 .uleb128 0x32
+ 36603 917e 600D0000 .long 0xd60
+
GAS LISTING /tmp/ccjbMjHD.s page 946
+
+
+ 36604 9182 03 .byte 0x3
+ 36605 9183 91 .byte 0x91
+ 36606 9184 A07C .sleb128 -480
+ 36607 9186 00 .byte 0x0
+ 36608 9187 31 .uleb128 0x31
+ 36609 9188 A00D0000 .long 0xda0
+ 36610 918c 00000000 .quad .LBB2506
+ 36610 00000000
+ 36611 9194 00000000 .quad .LBE2506
+ 36611 00000000
+ 36612 919c 02 .byte 0x2
+ 36613 919d 6403 .value 0x364
+ 36614 919f E1910000 .long 0x91e1
+ 36615 91a3 32 .uleb128 0x32
+ 36616 91a4 BE0D0000 .long 0xdbe
+ 36617 91a8 03 .byte 0x3
+ 36618 91a9 91 .byte 0x91
+ 36619 91aa B07C .sleb128 -464
+ 36620 91ac 32 .uleb128 0x32
+ 36621 91ad B20D0000 .long 0xdb2
+ 36622 91b1 03 .byte 0x3
+ 36623 91b2 91 .byte 0x91
+ 36624 91b3 C07C .sleb128 -448
+ 36625 91b5 35 .uleb128 0x35
+ 36626 91b6 CB0D0000 .long 0xdcb
+ 36627 91ba 00000000 .quad .LBB2508
+ 36627 00000000
+ 36628 91c2 00000000 .quad .LBE2508
+ 36628 00000000
+ 36629 91ca 02 .byte 0x2
+ 36630 91cb 7501 .value 0x175
+ 36631 91cd 32 .uleb128 0x32
+ 36632 91ce E90D0000 .long 0xde9
+ 36633 91d2 03 .byte 0x3
+ 36634 91d3 91 .byte 0x91
+ 36635 91d4 D07C .sleb128 -432
+ 36636 91d6 32 .uleb128 0x32
+ 36637 91d7 DD0D0000 .long 0xddd
+ 36638 91db 03 .byte 0x3
+ 36639 91dc 91 .byte 0x91
+ 36640 91dd E07C .sleb128 -416
+ 36641 91df 00 .byte 0x0
+ 36642 91e0 00 .byte 0x0
+ 36643 91e1 31 .uleb128 0x31
+ 36644 91e2 FB0D0000 .long 0xdfb
+ 36645 91e6 00000000 .quad .LBB2510
+ 36645 00000000
+ 36646 91ee 00000000 .quad .LBE2510
+ 36646 00000000
+ 36647 91f6 02 .byte 0x2
+ 36648 91f7 6603 .value 0x366
+ 36649 91f9 10920000 .long 0x9210
+ 36650 91fd 32 .uleb128 0x32
+ 36651 91fe 160E0000 .long 0xe16
+ 36652 9202 03 .byte 0x3
+ 36653 9203 91 .byte 0x91
+ 36654 9204 F07C .sleb128 -400
+
GAS LISTING /tmp/ccjbMjHD.s page 947
+
+
+ 36655 9206 32 .uleb128 0x32
+ 36656 9207 0C0E0000 .long 0xe0c
+ 36657 920b 03 .byte 0x3
+ 36658 920c 91 .byte 0x91
+ 36659 920d 807D .sleb128 -384
+ 36660 920f 00 .byte 0x0
+ 36661 9210 31 .uleb128 0x31
+ 36662 9211 A00D0000 .long 0xda0
+ 36663 9215 00000000 .quad .LBB2512
+ 36663 00000000
+ 36664 921d 00000000 .quad .LBE2512
+ 36664 00000000
+ 36665 9225 02 .byte 0x2
+ 36666 9226 6803 .value 0x368
+ 36667 9228 6A920000 .long 0x926a
+ 36668 922c 32 .uleb128 0x32
+ 36669 922d BE0D0000 .long 0xdbe
+ 36670 9231 03 .byte 0x3
+ 36671 9232 91 .byte 0x91
+ 36672 9233 907D .sleb128 -368
+ 36673 9235 32 .uleb128 0x32
+ 36674 9236 B20D0000 .long 0xdb2
+ 36675 923a 03 .byte 0x3
+ 36676 923b 91 .byte 0x91
+ 36677 923c A07D .sleb128 -352
+ 36678 923e 35 .uleb128 0x35
+ 36679 923f CB0D0000 .long 0xdcb
+ 36680 9243 00000000 .quad .LBB2514
+ 36680 00000000
+ 36681 924b 00000000 .quad .LBE2514
+ 36681 00000000
+ 36682 9253 02 .byte 0x2
+ 36683 9254 7501 .value 0x175
+ 36684 9256 32 .uleb128 0x32
+ 36685 9257 E90D0000 .long 0xde9
+ 36686 925b 03 .byte 0x3
+ 36687 925c 91 .byte 0x91
+ 36688 925d B07D .sleb128 -336
+ 36689 925f 32 .uleb128 0x32
+ 36690 9260 DD0D0000 .long 0xddd
+ 36691 9264 03 .byte 0x3
+ 36692 9265 91 .byte 0x91
+ 36693 9266 C07D .sleb128 -320
+ 36694 9268 00 .byte 0x0
+ 36695 9269 00 .byte 0x0
+ 36696 926a 31 .uleb128 0x31
+ 36697 926b FB0D0000 .long 0xdfb
+ 36698 926f 00000000 .quad .LBB2516
+ 36698 00000000
+ 36699 9277 00000000 .quad .LBE2516
+ 36699 00000000
+ 36700 927f 02 .byte 0x2
+ 36701 9280 6A03 .value 0x36a
+ 36702 9282 99920000 .long 0x9299
+ 36703 9286 32 .uleb128 0x32
+ 36704 9287 160E0000 .long 0xe16
+ 36705 928b 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 948
+
+
+ 36706 928c 91 .byte 0x91
+ 36707 928d D07D .sleb128 -304
+ 36708 928f 32 .uleb128 0x32
+ 36709 9290 0C0E0000 .long 0xe0c
+ 36710 9294 03 .byte 0x3
+ 36711 9295 91 .byte 0x91
+ 36712 9296 E07D .sleb128 -288
+ 36713 9298 00 .byte 0x0
+ 36714 9299 31 .uleb128 0x31
+ 36715 929a 210E0000 .long 0xe21
+ 36716 929e 00000000 .quad .LBB2518
+ 36716 00000000
+ 36717 92a6 00000000 .quad .LBE2518
+ 36717 00000000
+ 36718 92ae 02 .byte 0x2
+ 36719 92af 6C03 .value 0x36c
+ 36720 92b1 C8920000 .long 0x92c8
+ 36721 92b5 32 .uleb128 0x32
+ 36722 92b6 3E0E0000 .long 0xe3e
+ 36723 92ba 03 .byte 0x3
+ 36724 92bb 91 .byte 0x91
+ 36725 92bc F07D .sleb128 -272
+ 36726 92be 32 .uleb128 0x32
+ 36727 92bf 330E0000 .long 0xe33
+ 36728 92c3 03 .byte 0x3
+ 36729 92c4 91 .byte 0x91
+ 36730 92c5 807E .sleb128 -256
+ 36731 92c7 00 .byte 0x0
+ 36732 92c8 35 .uleb128 0x35
+ 36733 92c9 4F0D0000 .long 0xd4f
+ 36734 92cd 00000000 .quad .LBB2520
+ 36734 00000000
+ 36735 92d5 00000000 .quad .LBE2520
+ 36735 00000000
+ 36736 92dd 02 .byte 0x2
+ 36737 92de 6E03 .value 0x36e
+ 36738 92e0 32 .uleb128 0x32
+ 36739 92e1 6A0D0000 .long 0xd6a
+ 36740 92e5 03 .byte 0x3
+ 36741 92e6 91 .byte 0x91
+ 36742 92e7 907E .sleb128 -240
+ 36743 92e9 32 .uleb128 0x32
+ 36744 92ea 600D0000 .long 0xd60
+ 36745 92ee 03 .byte 0x3
+ 36746 92ef 91 .byte 0x91
+ 36747 92f0 A07E .sleb128 -224
+ 36748 92f2 00 .byte 0x0
+ 36749 92f3 00 .byte 0x0
+ 36750 92f4 00 .byte 0x0
+ 36751 92f5 00 .byte 0x0
+ 36752 92f6 36 .uleb128 0x36
+ 36753 92f7 00000000 .quad .LBB2522
+ 36753 00000000
+ 36754 92ff 00000000 .quad .LBE2522
+ 36754 00000000
+ 36755 9307 15930000 .long 0x9315
+ 36756 930b 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 949
+
+
+ 36757 930c 1C0C0000 .long 0xc1c
+ 36758 9310 03 .byte 0x3
+ 36759 9311 91 .byte 0x91
+ 36760 9312 9040 .sleb128 -8176
+ 36761 9314 00 .byte 0x0
+ 36762 9315 31 .uleb128 0x31
+ 36763 9316 4A0E0000 .long 0xe4a
+ 36764 931a 00000000 .quad .LBB2523
+ 36764 00000000
+ 36765 9322 00000000 .quad .LBE2523
+ 36765 00000000
+ 36766 932a 02 .byte 0x2
+ 36767 932b 9406 .value 0x694
+ 36768 932d B2930000 .long 0x93b2
+ 36769 9331 32 .uleb128 0x32
+ 36770 9332 5C0E0000 .long 0xe5c
+ 36771 9336 03 .byte 0x3
+ 36772 9337 91 .byte 0x91
+ 36773 9338 B07E .sleb128 -208
+ 36774 933a 33 .uleb128 0x33
+ 36775 933b 00000000 .quad .LBB2524
+ 36775 00000000
+ 36776 9343 00000000 .quad .LBE2524
+ 36776 00000000
+ 36777 934b 34 .uleb128 0x34
+ 36778 934c 680E0000 .long 0xe68
+ 36779 9350 09 .byte 0x9
+ 36780 9351 03 .byte 0x3
+ 36781 9352 00000000 .quad ShiftRowTable.7385
+ 36781 00000000
+ 36782 935a 35 .uleb128 0x35
+ 36783 935b A00D0000 .long 0xda0
+ 36784 935f 00000000 .quad .LBB2525
+ 36784 00000000
+ 36785 9367 00000000 .quad .LBE2525
+ 36785 00000000
+ 36786 936f 02 .byte 0x2
+ 36787 9370 9B02 .value 0x29b
+ 36788 9372 32 .uleb128 0x32
+ 36789 9373 BE0D0000 .long 0xdbe
+ 36790 9377 03 .byte 0x3
+ 36791 9378 91 .byte 0x91
+ 36792 9379 C07E .sleb128 -192
+ 36793 937b 32 .uleb128 0x32
+ 36794 937c B20D0000 .long 0xdb2
+ 36795 9380 03 .byte 0x3
+ 36796 9381 91 .byte 0x91
+ 36797 9382 D07E .sleb128 -176
+ 36798 9384 35 .uleb128 0x35
+ 36799 9385 CB0D0000 .long 0xdcb
+ 36800 9389 00000000 .quad .LBB2527
+ 36800 00000000
+ 36801 9391 00000000 .quad .LBE2527
+ 36801 00000000
+ 36802 9399 02 .byte 0x2
+ 36803 939a 7501 .value 0x175
+ 36804 939c 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 950
+
+
+ 36805 939d E90D0000 .long 0xde9
+ 36806 93a1 03 .byte 0x3
+ 36807 93a2 91 .byte 0x91
+ 36808 93a3 E07E .sleb128 -160
+ 36809 93a5 32 .uleb128 0x32
+ 36810 93a6 DD0D0000 .long 0xddd
+ 36811 93aa 03 .byte 0x3
+ 36812 93ab 91 .byte 0x91
+ 36813 93ac F07E .sleb128 -144
+ 36814 93ae 00 .byte 0x0
+ 36815 93af 00 .byte 0x0
+ 36816 93b0 00 .byte 0x0
+ 36817 93b1 00 .byte 0x0
+ 36818 93b2 36 .uleb128 0x36
+ 36819 93b3 00000000 .quad .LBB2529
+ 36819 00000000
+ 36820 93bb 00000000 .quad .LBE2529
+ 36820 00000000
+ 36821 93c3 D1930000 .long 0x93d1
+ 36822 93c7 34 .uleb128 0x34
+ 36823 93c8 2C0C0000 .long 0xc2c
+ 36824 93cc 03 .byte 0x3
+ 36825 93cd 91 .byte 0x91
+ 36826 93ce 8040 .sleb128 -8192
+ 36827 93d0 00 .byte 0x0
+ 36828 93d1 31 .uleb128 0x31
+ 36829 93d2 860E0000 .long 0xe86
+ 36830 93d6 00000000 .quad .LBB2530
+ 36830 00000000
+ 36831 93de 00000000 .quad .LBE2530
+ 36831 00000000
+ 36832 93e6 02 .byte 0x2
+ 36833 93e7 9606 .value 0x696
+ 36834 93e9 00940000 .long 0x9400
+ 36835 93ed 32 .uleb128 0x32
+ 36836 93ee A10E0000 .long 0xea1
+ 36837 93f2 03 .byte 0x3
+ 36838 93f3 91 .byte 0x91
+ 36839 93f4 807F .sleb128 -128
+ 36840 93f6 32 .uleb128 0x32
+ 36841 93f7 970E0000 .long 0xe97
+ 36842 93fb 03 .byte 0x3
+ 36843 93fc 91 .byte 0x91
+ 36844 93fd 907F .sleb128 -112
+ 36845 93ff 00 .byte 0x0
+ 36846 9400 36 .uleb128 0x36
+ 36847 9401 00000000 .quad .LBB2532
+ 36847 00000000
+ 36848 9409 00000000 .quad .LBE2532
+ 36848 00000000
+ 36849 9411 20940000 .long 0x9420
+ 36850 9415 34 .uleb128 0x34
+ 36851 9416 3C0C0000 .long 0xc3c
+ 36852 941a 04 .byte 0x4
+ 36853 941b 91 .byte 0x91
+ 36854 941c F0BF7F .sleb128 -8208
+ 36855 941f 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 951
+
+
+ 36856 9420 31 .uleb128 0x31
+ 36857 9421 AC0E0000 .long 0xeac
+ 36858 9425 00000000 .quad .LBB2533
+ 36858 00000000
+ 36859 942d 00000000 .quad .LBE2533
+ 36859 00000000
+ 36860 9435 02 .byte 0x2
+ 36861 9436 9806 .value 0x698
+ 36862 9438 70940000 .long 0x9470
+ 36863 943c 32 .uleb128 0x32
+ 36864 943d BE0E0000 .long 0xebe
+ 36865 9441 03 .byte 0x3
+ 36866 9442 91 .byte 0x91
+ 36867 9443 A07F .sleb128 -96
+ 36868 9445 35 .uleb128 0x35
+ 36869 9446 CB0E0000 .long 0xecb
+ 36870 944a 00000000 .quad .LBB2535
+ 36870 00000000
+ 36871 9452 00000000 .quad .LBE2535
+ 36871 00000000
+ 36872 945a 02 .byte 0x2
+ 36873 945b 4905 .value 0x549
+ 36874 945d 32 .uleb128 0x32
+ 36875 945e E90E0000 .long 0xee9
+ 36876 9462 03 .byte 0x3
+ 36877 9463 91 .byte 0x91
+ 36878 9464 BC7F .sleb128 -68
+ 36879 9466 32 .uleb128 0x32
+ 36880 9467 DD0E0000 .long 0xedd
+ 36881 946b 02 .byte 0x2
+ 36882 946c 91 .byte 0x91
+ 36883 946d 40 .sleb128 -64
+ 36884 946e 00 .byte 0x0
+ 36885 946f 00 .byte 0x0
+ 36886 9470 33 .uleb128 0x33
+ 36887 9471 00000000 .quad .LBB2537
+ 36887 00000000
+ 36888 9479 00000000 .quad .LBE2537
+ 36888 00000000
+ 36889 9481 34 .uleb128 0x34
+ 36890 9482 480C0000 .long 0xc48
+ 36891 9486 04 .byte 0x4
+ 36892 9487 91 .byte 0x91
+ 36893 9488 E0BF7F .sleb128 -8224
+ 36894 948b 00 .byte 0x0
+ 36895 948c 00 .byte 0x0
+ 36896 948d 00 .byte 0x0
+ 36897 948e 00 .byte 0x0
+ 36898 948f 25 .uleb128 0x25
+ 36899 9490 00000000 .long .LASF361
+ 36900 9494 02 .byte 0x2
+ 36901 9495 6E06 .value 0x66e
+ 36902 9497 01 .byte 0x1
+ 36903 9498 B3010000 .long 0x1b3
+ 36904 949c 03 .byte 0x3
+ 36905 949d C4940000 .long 0x94c4
+ 36906 94a1 26 .uleb128 0x26
+
GAS LISTING /tmp/ccjbMjHD.s page 952
+
+
+ 36907 94a2 00000000 .long .LASF67
+ 36908 94a6 02 .byte 0x2
+ 36909 94a7 6E06 .value 0x66e
+ 36910 94a9 B3010000 .long 0x1b3
+ 36911 94ad 28 .uleb128 0x28
+ 36912 94ae 7500 .string "u"
+ 36913 94b0 02 .byte 0x2
+ 36914 94b1 7506 .value 0x675
+ 36915 94b3 29050000 .long 0x529
+ 36916 94b7 27 .uleb128 0x27
+ 36917 94b8 00000000 .long .LASF351
+ 36918 94bc 02 .byte 0x2
+ 36919 94bd 7606 .value 0x676
+ 36920 94bf 09040000 .long 0x409
+ 36921 94c3 00 .byte 0x0
+ 36922 94c4 2D .uleb128 0x2d
+ 36923 94c5 00000000 .long .LASF362
+ 36924 94c9 02 .byte 0x2
+ 36925 94ca 6F07 .value 0x76f
+ 36926 94cc 01 .byte 0x1
+ 36927 94cd 00000000 .quad .LFB647
+ 36927 00000000
+ 36928 94d5 00000000 .quad .LFE647
+ 36928 00000000
+ 36929 94dd 00000000 .long .LLST3
+ 36930 94e1 0AD90000 .long 0xd90a
+ 36931 94e5 2E .uleb128 0x2e
+ 36932 94e6 00000000 .long .LASF65
+ 36933 94ea 02 .byte 0x2
+ 36934 94eb 6F07 .value 0x76f
+ 36935 94ed 24560000 .long 0x5624
+ 36936 94f1 04 .byte 0x4
+ 36937 94f2 91 .byte 0x91
+ 36938 94f3 88B37F .sleb128 -9848
+ 36939 94f6 2F .uleb128 0x2f
+ 36940 94f7 6B657900 .string "key"
+ 36941 94fb 02 .byte 0x2
+ 36942 94fc 6F07 .value 0x76f
+ 36943 94fe 2A560000 .long 0x562a
+ 36944 9502 04 .byte 0x4
+ 36945 9503 91 .byte 0x91
+ 36946 9504 80B37F .sleb128 -9856
+ 36947 9507 37 .uleb128 0x37
+ 36948 9508 763000 .string "v0"
+ 36949 950b 02 .byte 0x2
+ 36950 950c 7107 .value 0x771
+ 36951 950e B3010000 .long 0x1b3
+ 36952 9512 04 .byte 0x4
+ 36953 9513 91 .byte 0x91
+ 36954 9514 90B87F .sleb128 -9200
+ 36955 9517 37 .uleb128 0x37
+ 36956 9518 763100 .string "v1"
+ 36957 951b 02 .byte 0x2
+ 36958 951c 7107 .value 0x771
+ 36959 951e B3010000 .long 0x1b3
+ 36960 9522 04 .byte 0x4
+ 36961 9523 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 953
+
+
+ 36962 9524 A0B87F .sleb128 -9184
+ 36963 9527 37 .uleb128 0x37
+ 36964 9528 6B00 .string "k"
+ 36965 952a 02 .byte 0x2
+ 36966 952b 7207 .value 0x772
+ 36967 952d B3010000 .long 0x1b3
+ 36968 9531 04 .byte 0x4
+ 36969 9532 91 .byte 0x91
+ 36970 9533 B0B87F .sleb128 -9168
+ 36971 9536 31 .uleb128 0x31
+ 36972 9537 AD0B0000 .long 0xbad
+ 36973 953b 00000000 .quad .LBB3188
+ 36973 00000000
+ 36974 9543 00000000 .quad .LBE3188
+ 36974 00000000
+ 36975 954b 02 .byte 0x2
+ 36976 954c 7407 .value 0x774
+ 36977 954e 79950000 .long 0x9579
+ 36978 9552 32 .uleb128 0x32
+ 36979 9553 BE0B0000 .long 0xbbe
+ 36980 9557 04 .byte 0x4
+ 36981 9558 91 .byte 0x91
+ 36982 9559 C8B87F .sleb128 -9144
+ 36983 955c 33 .uleb128 0x33
+ 36984 955d 00000000 .quad .LBB3189
+ 36984 00000000
+ 36985 9565 00000000 .quad .LBE3189
+ 36985 00000000
+ 36986 956d 34 .uleb128 0x34
+ 36987 956e C90B0000 .long 0xbc9
+ 36988 9572 04 .byte 0x4
+ 36989 9573 76 .byte 0x76
+ 36990 9574 C0AF7F .sleb128 -10304
+ 36991 9577 00 .byte 0x0
+ 36992 9578 00 .byte 0x0
+ 36993 9579 31 .uleb128 0x31
+ 36994 957a AD0B0000 .long 0xbad
+ 36995 957e 00000000 .quad .LBB3190
+ 36995 00000000
+ 36996 9586 00000000 .quad .LBE3190
+ 36996 00000000
+ 36997 958e 02 .byte 0x2
+ 36998 958f 7507 .value 0x775
+ 36999 9591 BC950000 .long 0x95bc
+ 37000 9595 32 .uleb128 0x32
+ 37001 9596 BE0B0000 .long 0xbbe
+ 37002 959a 04 .byte 0x4
+ 37003 959b 91 .byte 0x91
+ 37004 959c D0B87F .sleb128 -9136
+ 37005 959f 33 .uleb128 0x33
+ 37006 95a0 00000000 .quad .LBB3191
+ 37006 00000000
+ 37007 95a8 00000000 .quad .LBE3191
+ 37007 00000000
+ 37008 95b0 34 .uleb128 0x34
+ 37009 95b1 C90B0000 .long 0xbc9
+ 37010 95b5 04 .byte 0x4
+
GAS LISTING /tmp/ccjbMjHD.s page 954
+
+
+ 37011 95b6 76 .byte 0x76
+ 37012 95b7 D0AF7F .sleb128 -10288
+ 37013 95ba 00 .byte 0x0
+ 37014 95bb 00 .byte 0x0
+ 37015 95bc 31 .uleb128 0x31
+ 37016 95bd D50B0000 .long 0xbd5
+ 37017 95c1 00000000 .quad .LBB3192
+ 37017 00000000
+ 37018 95c9 00000000 .quad .LBE3192
+ 37018 00000000
+ 37019 95d1 02 .byte 0x2
+ 37020 95d2 8607 .value 0x786
+ 37021 95d4 CF9A0000 .long 0x9acf
+ 37022 95d8 32 .uleb128 0x32
+ 37023 95d9 F30B0000 .long 0xbf3
+ 37024 95dd 04 .byte 0x4
+ 37025 95de 91 .byte 0x91
+ 37026 95df DCB87F .sleb128 -9124
+ 37027 95e2 32 .uleb128 0x32
+ 37028 95e3 E70B0000 .long 0xbe7
+ 37029 95e7 04 .byte 0x4
+ 37030 95e8 91 .byte 0x91
+ 37031 95e9 E0B87F .sleb128 -9120
+ 37032 95ec 33 .uleb128 0x33
+ 37033 95ed 00000000 .quad .LBB3193
+ 37033 00000000
+ 37034 95f5 00000000 .quad .LBE3193
+ 37034 00000000
+ 37035 95fd 34 .uleb128 0x34
+ 37036 95fe FF0B0000 .long 0xbff
+ 37037 9602 04 .byte 0x4
+ 37038 9603 76 .byte 0x76
+ 37039 9604 F0AF7F .sleb128 -10256
+ 37040 9607 34 .uleb128 0x34
+ 37041 9608 0B0C0000 .long 0xc0b
+ 37042 960c 04 .byte 0x4
+ 37043 960d 76 .byte 0x76
+ 37044 960e E0AF7F .sleb128 -10272
+ 37045 9611 31 .uleb128 0x31
+ 37046 9612 540C0000 .long 0xc54
+ 37047 9616 00000000 .quad .LBB3194
+ 37047 00000000
+ 37048 961e 00000000 .quad .LBE3194
+ 37048 00000000
+ 37049 9626 02 .byte 0x2
+ 37050 9627 9106 .value 0x691
+ 37051 9629 83960000 .long 0x9683
+ 37052 962d 32 .uleb128 0x32
+ 37053 962e 7E0C0000 .long 0xc7e
+ 37054 9632 04 .byte 0x4
+ 37055 9633 91 .byte 0x91
+ 37056 9634 F8B87F .sleb128 -9096
+ 37057 9637 32 .uleb128 0x32
+ 37058 9638 720C0000 .long 0xc72
+ 37059 963c 04 .byte 0x4
+ 37060 963d 91 .byte 0x91
+ 37061 963e FCB87F .sleb128 -9092
+
GAS LISTING /tmp/ccjbMjHD.s page 955
+
+
+ 37062 9641 32 .uleb128 0x32
+ 37063 9642 660C0000 .long 0xc66
+ 37064 9646 04 .byte 0x4
+ 37065 9647 91 .byte 0x91
+ 37066 9648 80B97F .sleb128 -9088
+ 37067 964b 35 .uleb128 0x35
+ 37068 964c 8B0C0000 .long 0xc8b
+ 37069 9650 00000000 .quad .LBB3196
+ 37069 00000000
+ 37070 9658 00000000 .quad .LBE3196
+ 37070 00000000
+ 37071 9660 02 .byte 0x2
+ 37072 9661 0702 .value 0x207
+ 37073 9663 32 .uleb128 0x32
+ 37074 9664 B40C0000 .long 0xcb4
+ 37075 9668 04 .byte 0x4
+ 37076 9669 91 .byte 0x91
+ 37077 966a 98B97F .sleb128 -9064
+ 37078 966d 32 .uleb128 0x32
+ 37079 966e A90C0000 .long 0xca9
+ 37080 9672 04 .byte 0x4
+ 37081 9673 91 .byte 0x91
+ 37082 9674 9CB97F .sleb128 -9060
+ 37083 9677 32 .uleb128 0x32
+ 37084 9678 9D0C0000 .long 0xc9d
+ 37085 967c 04 .byte 0x4
+ 37086 967d 91 .byte 0x91
+ 37087 967e A0B97F .sleb128 -9056
+ 37088 9681 00 .byte 0x0
+ 37089 9682 00 .byte 0x0
+ 37090 9683 31 .uleb128 0x31
+ 37091 9684 C10C0000 .long 0xcc1
+ 37092 9688 00000000 .quad .LBB3198
+ 37092 00000000
+ 37093 9690 00000000 .quad .LBE3198
+ 37093 00000000
+ 37094 9698 02 .byte 0x2
+ 37095 9699 9206 .value 0x692
+ 37096 969b 2A990000 .long 0x992a
+ 37097 969f 32 .uleb128 0x32
+ 37098 96a0 D30C0000 .long 0xcd3
+ 37099 96a4 04 .byte 0x4
+ 37100 96a5 91 .byte 0x91
+ 37101 96a6 B0B97F .sleb128 -9040
+ 37102 96a9 35 .uleb128 0x35
+ 37103 96aa E00C0000 .long 0xce0
+ 37104 96ae 00000000 .quad .LBB3200
+ 37104 00000000
+ 37105 96b6 00000000 .quad .LBE3200
+ 37105 00000000
+ 37106 96be 02 .byte 0x2
+ 37107 96bf 7D03 .value 0x37d
+ 37108 96c1 32 .uleb128 0x32
+ 37109 96c2 FE0C0000 .long 0xcfe
+ 37110 96c6 04 .byte 0x4
+ 37111 96c7 91 .byte 0x91
+ 37112 96c8 C8B97F .sleb128 -9016
+
GAS LISTING /tmp/ccjbMjHD.s page 956
+
+
+ 37113 96cb 32 .uleb128 0x32
+ 37114 96cc F20C0000 .long 0xcf2
+ 37115 96d0 04 .byte 0x4
+ 37116 96d1 91 .byte 0x91
+ 37117 96d2 D0B97F .sleb128 -9008
+ 37118 96d5 33 .uleb128 0x33
+ 37119 96d6 00000000 .quad .LBB3201
+ 37119 00000000
+ 37120 96de 00000000 .quad .LBE3201
+ 37120 00000000
+ 37121 96e6 34 .uleb128 0x34
+ 37122 96e7 0A0D0000 .long 0xd0a
+ 37123 96eb 04 .byte 0x4
+ 37124 96ec 91 .byte 0x91
+ 37125 96ed A0BA7F .sleb128 -8928
+ 37126 96f0 34 .uleb128 0x34
+ 37127 96f1 150D0000 .long 0xd15
+ 37128 96f5 04 .byte 0x4
+ 37129 96f6 91 .byte 0x91
+ 37130 96f7 90BA7F .sleb128 -8944
+ 37131 96fa 34 .uleb128 0x34
+ 37132 96fb 200D0000 .long 0xd20
+ 37133 96ff 04 .byte 0x4
+ 37134 9700 91 .byte 0x91
+ 37135 9701 80BA7F .sleb128 -8960
+ 37136 9704 34 .uleb128 0x34
+ 37137 9705 2C0D0000 .long 0xd2c
+ 37138 9709 04 .byte 0x4
+ 37139 970a 91 .byte 0x91
+ 37140 970b F0B97F .sleb128 -8976
+ 37141 970e 34 .uleb128 0x34
+ 37142 970f 380D0000 .long 0xd38
+ 37143 9713 04 .byte 0x4
+ 37144 9714 91 .byte 0x91
+ 37145 9715 ECB97F .sleb128 -8980
+ 37146 9718 31 .uleb128 0x31
+ 37147 9719 4F0D0000 .long 0xd4f
+ 37148 971d 00000000 .quad .LBB3202
+ 37148 00000000
+ 37149 9725 00000000 .quad .LBE3202
+ 37149 00000000
+ 37150 972d 02 .byte 0x2
+ 37151 972e 5603 .value 0x356
+ 37152 9730 49970000 .long 0x9749
+ 37153 9734 32 .uleb128 0x32
+ 37154 9735 6A0D0000 .long 0xd6a
+ 37155 9739 04 .byte 0x4
+ 37156 973a 91 .byte 0x91
+ 37157 973b B0BA7F .sleb128 -8912
+ 37158 973e 32 .uleb128 0x32
+ 37159 973f 600D0000 .long 0xd60
+ 37160 9743 04 .byte 0x4
+ 37161 9744 91 .byte 0x91
+ 37162 9745 C0BA7F .sleb128 -8896
+ 37163 9748 00 .byte 0x0
+ 37164 9749 31 .uleb128 0x31
+ 37165 974a 750D0000 .long 0xd75
+
GAS LISTING /tmp/ccjbMjHD.s page 957
+
+
+ 37166 974e 00000000 .quad .LBB3204
+ 37166 00000000
+ 37167 9756 00000000 .quad .LBE3204
+ 37167 00000000
+ 37168 975e 02 .byte 0x2
+ 37169 975f 5903 .value 0x359
+ 37170 9761 7A970000 .long 0x977a
+ 37171 9765 32 .uleb128 0x32
+ 37172 9766 930D0000 .long 0xd93
+ 37173 976a 04 .byte 0x4
+ 37174 976b 91 .byte 0x91
+ 37175 976c DCBA7F .sleb128 -8868
+ 37176 976f 32 .uleb128 0x32
+ 37177 9770 870D0000 .long 0xd87
+ 37178 9774 04 .byte 0x4
+ 37179 9775 91 .byte 0x91
+ 37180 9776 E0BA7F .sleb128 -8864
+ 37181 9779 00 .byte 0x0
+ 37182 977a 31 .uleb128 0x31
+ 37183 977b 4F0D0000 .long 0xd4f
+ 37184 977f 00000000 .quad .LBB3206
+ 37184 00000000
+ 37185 9787 00000000 .quad .LBE3206
+ 37185 00000000
+ 37186 978f 02 .byte 0x2
+ 37187 9790 5B03 .value 0x35b
+ 37188 9792 AB970000 .long 0x97ab
+ 37189 9796 32 .uleb128 0x32
+ 37190 9797 6A0D0000 .long 0xd6a
+ 37191 979b 04 .byte 0x4
+ 37192 979c 91 .byte 0x91
+ 37193 979d F0BA7F .sleb128 -8848
+ 37194 97a0 32 .uleb128 0x32
+ 37195 97a1 600D0000 .long 0xd60
+ 37196 97a5 04 .byte 0x4
+ 37197 97a6 91 .byte 0x91
+ 37198 97a7 80BB7F .sleb128 -8832
+ 37199 97aa 00 .byte 0x0
+ 37200 97ab 31 .uleb128 0x31
+ 37201 97ac A00D0000 .long 0xda0
+ 37202 97b0 00000000 .quad .LBB3208
+ 37202 00000000
+ 37203 97b8 00000000 .quad .LBE3208
+ 37203 00000000
+ 37204 97c0 02 .byte 0x2
+ 37205 97c1 6403 .value 0x364
+ 37206 97c3 09980000 .long 0x9809
+ 37207 97c7 32 .uleb128 0x32
+ 37208 97c8 BE0D0000 .long 0xdbe
+ 37209 97cc 04 .byte 0x4
+ 37210 97cd 91 .byte 0x91
+ 37211 97ce 90BB7F .sleb128 -8816
+ 37212 97d1 32 .uleb128 0x32
+ 37213 97d2 B20D0000 .long 0xdb2
+ 37214 97d6 04 .byte 0x4
+ 37215 97d7 91 .byte 0x91
+ 37216 97d8 A0BB7F .sleb128 -8800
+
GAS LISTING /tmp/ccjbMjHD.s page 958
+
+
+ 37217 97db 35 .uleb128 0x35
+ 37218 97dc CB0D0000 .long 0xdcb
+ 37219 97e0 00000000 .quad .LBB3210
+ 37219 00000000
+ 37220 97e8 00000000 .quad .LBE3210
+ 37220 00000000
+ 37221 97f0 02 .byte 0x2
+ 37222 97f1 7501 .value 0x175
+ 37223 97f3 32 .uleb128 0x32
+ 37224 97f4 E90D0000 .long 0xde9
+ 37225 97f8 04 .byte 0x4
+ 37226 97f9 91 .byte 0x91
+ 37227 97fa B0BB7F .sleb128 -8784
+ 37228 97fd 32 .uleb128 0x32
+ 37229 97fe DD0D0000 .long 0xddd
+ 37230 9802 04 .byte 0x4
+ 37231 9803 91 .byte 0x91
+ 37232 9804 C0BB7F .sleb128 -8768
+ 37233 9807 00 .byte 0x0
+ 37234 9808 00 .byte 0x0
+ 37235 9809 31 .uleb128 0x31
+ 37236 980a FB0D0000 .long 0xdfb
+ 37237 980e 00000000 .quad .LBB3212
+ 37237 00000000
+ 37238 9816 00000000 .quad .LBE3212
+ 37238 00000000
+ 37239 981e 02 .byte 0x2
+ 37240 981f 6603 .value 0x366
+ 37241 9821 3A980000 .long 0x983a
+ 37242 9825 32 .uleb128 0x32
+ 37243 9826 160E0000 .long 0xe16
+ 37244 982a 04 .byte 0x4
+ 37245 982b 91 .byte 0x91
+ 37246 982c D0BB7F .sleb128 -8752
+ 37247 982f 32 .uleb128 0x32
+ 37248 9830 0C0E0000 .long 0xe0c
+ 37249 9834 04 .byte 0x4
+ 37250 9835 91 .byte 0x91
+ 37251 9836 E0BB7F .sleb128 -8736
+ 37252 9839 00 .byte 0x0
+ 37253 983a 31 .uleb128 0x31
+ 37254 983b A00D0000 .long 0xda0
+ 37255 983f 00000000 .quad .LBB3214
+ 37255 00000000
+ 37256 9847 00000000 .quad .LBE3214
+ 37256 00000000
+ 37257 984f 02 .byte 0x2
+ 37258 9850 6803 .value 0x368
+ 37259 9852 98980000 .long 0x9898
+ 37260 9856 32 .uleb128 0x32
+ 37261 9857 BE0D0000 .long 0xdbe
+ 37262 985b 04 .byte 0x4
+ 37263 985c 91 .byte 0x91
+ 37264 985d F0BB7F .sleb128 -8720
+ 37265 9860 32 .uleb128 0x32
+ 37266 9861 B20D0000 .long 0xdb2
+ 37267 9865 04 .byte 0x4
+
GAS LISTING /tmp/ccjbMjHD.s page 959
+
+
+ 37268 9866 91 .byte 0x91
+ 37269 9867 80BC7F .sleb128 -8704
+ 37270 986a 35 .uleb128 0x35
+ 37271 986b CB0D0000 .long 0xdcb
+ 37272 986f 00000000 .quad .LBB3216
+ 37272 00000000
+ 37273 9877 00000000 .quad .LBE3216
+ 37273 00000000
+ 37274 987f 02 .byte 0x2
+ 37275 9880 7501 .value 0x175
+ 37276 9882 32 .uleb128 0x32
+ 37277 9883 E90D0000 .long 0xde9
+ 37278 9887 04 .byte 0x4
+ 37279 9888 91 .byte 0x91
+ 37280 9889 90BC7F .sleb128 -8688
+ 37281 988c 32 .uleb128 0x32
+ 37282 988d DD0D0000 .long 0xddd
+ 37283 9891 04 .byte 0x4
+ 37284 9892 91 .byte 0x91
+ 37285 9893 A0BC7F .sleb128 -8672
+ 37286 9896 00 .byte 0x0
+ 37287 9897 00 .byte 0x0
+ 37288 9898 31 .uleb128 0x31
+ 37289 9899 FB0D0000 .long 0xdfb
+ 37290 989d 00000000 .quad .LBB3218
+ 37290 00000000
+ 37291 98a5 00000000 .quad .LBE3218
+ 37291 00000000
+ 37292 98ad 02 .byte 0x2
+ 37293 98ae 6A03 .value 0x36a
+ 37294 98b0 C9980000 .long 0x98c9
+ 37295 98b4 32 .uleb128 0x32
+ 37296 98b5 160E0000 .long 0xe16
+ 37297 98b9 04 .byte 0x4
+ 37298 98ba 91 .byte 0x91
+ 37299 98bb B0BC7F .sleb128 -8656
+ 37300 98be 32 .uleb128 0x32
+ 37301 98bf 0C0E0000 .long 0xe0c
+ 37302 98c3 04 .byte 0x4
+ 37303 98c4 91 .byte 0x91
+ 37304 98c5 C0BC7F .sleb128 -8640
+ 37305 98c8 00 .byte 0x0
+ 37306 98c9 31 .uleb128 0x31
+ 37307 98ca 210E0000 .long 0xe21
+ 37308 98ce 00000000 .quad .LBB3220
+ 37308 00000000
+ 37309 98d6 00000000 .quad .LBE3220
+ 37309 00000000
+ 37310 98de 02 .byte 0x2
+ 37311 98df 6C03 .value 0x36c
+ 37312 98e1 FA980000 .long 0x98fa
+ 37313 98e5 32 .uleb128 0x32
+ 37314 98e6 3E0E0000 .long 0xe3e
+ 37315 98ea 04 .byte 0x4
+ 37316 98eb 91 .byte 0x91
+ 37317 98ec D0BC7F .sleb128 -8624
+ 37318 98ef 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 960
+
+
+ 37319 98f0 330E0000 .long 0xe33
+ 37320 98f4 04 .byte 0x4
+ 37321 98f5 91 .byte 0x91
+ 37322 98f6 E0BC7F .sleb128 -8608
+ 37323 98f9 00 .byte 0x0
+ 37324 98fa 35 .uleb128 0x35
+ 37325 98fb 4F0D0000 .long 0xd4f
+ 37326 98ff 00000000 .quad .LBB3222
+ 37326 00000000
+ 37327 9907 00000000 .quad .LBE3222
+ 37327 00000000
+ 37328 990f 02 .byte 0x2
+ 37329 9910 6E03 .value 0x36e
+ 37330 9912 32 .uleb128 0x32
+ 37331 9913 6A0D0000 .long 0xd6a
+ 37332 9917 04 .byte 0x4
+ 37333 9918 91 .byte 0x91
+ 37334 9919 F0BC7F .sleb128 -8592
+ 37335 991c 32 .uleb128 0x32
+ 37336 991d 600D0000 .long 0xd60
+ 37337 9921 04 .byte 0x4
+ 37338 9922 91 .byte 0x91
+ 37339 9923 80BD7F .sleb128 -8576
+ 37340 9926 00 .byte 0x0
+ 37341 9927 00 .byte 0x0
+ 37342 9928 00 .byte 0x0
+ 37343 9929 00 .byte 0x0
+ 37344 992a 36 .uleb128 0x36
+ 37345 992b 00000000 .quad .LBB3224
+ 37345 00000000
+ 37346 9933 00000000 .quad .LBE3224
+ 37346 00000000
+ 37347 993b 4A990000 .long 0x994a
+ 37348 993f 34 .uleb128 0x34
+ 37349 9940 1C0C0000 .long 0xc1c
+ 37350 9944 04 .byte 0x4
+ 37351 9945 91 .byte 0x91
+ 37352 9946 C0B37F .sleb128 -9792
+ 37353 9949 00 .byte 0x0
+ 37354 994a 31 .uleb128 0x31
+ 37355 994b 4A0E0000 .long 0xe4a
+ 37356 994f 00000000 .quad .LBB3225
+ 37356 00000000
+ 37357 9957 00000000 .quad .LBE3225
+ 37357 00000000
+ 37358 995f 02 .byte 0x2
+ 37359 9960 9406 .value 0x694
+ 37360 9962 EC990000 .long 0x99ec
+ 37361 9966 32 .uleb128 0x32
+ 37362 9967 5C0E0000 .long 0xe5c
+ 37363 996b 04 .byte 0x4
+ 37364 996c 91 .byte 0x91
+ 37365 996d 90BD7F .sleb128 -8560
+ 37366 9970 33 .uleb128 0x33
+ 37367 9971 00000000 .quad .LBB3226
+ 37367 00000000
+ 37368 9979 00000000 .quad .LBE3226
+
GAS LISTING /tmp/ccjbMjHD.s page 961
+
+
+ 37368 00000000
+ 37369 9981 34 .uleb128 0x34
+ 37370 9982 680E0000 .long 0xe68
+ 37371 9986 09 .byte 0x9
+ 37372 9987 03 .byte 0x3
+ 37373 9988 00000000 .quad ShiftRowTable.7385
+ 37373 00000000
+ 37374 9990 35 .uleb128 0x35
+ 37375 9991 A00D0000 .long 0xda0
+ 37376 9995 00000000 .quad .LBB3227
+ 37376 00000000
+ 37377 999d 00000000 .quad .LBE3227
+ 37377 00000000
+ 37378 99a5 02 .byte 0x2
+ 37379 99a6 9B02 .value 0x29b
+ 37380 99a8 32 .uleb128 0x32
+ 37381 99a9 BE0D0000 .long 0xdbe
+ 37382 99ad 04 .byte 0x4
+ 37383 99ae 91 .byte 0x91
+ 37384 99af A0BD7F .sleb128 -8544
+ 37385 99b2 32 .uleb128 0x32
+ 37386 99b3 B20D0000 .long 0xdb2
+ 37387 99b7 04 .byte 0x4
+ 37388 99b8 91 .byte 0x91
+ 37389 99b9 B0BD7F .sleb128 -8528
+ 37390 99bc 35 .uleb128 0x35
+ 37391 99bd CB0D0000 .long 0xdcb
+ 37392 99c1 00000000 .quad .LBB3229
+ 37392 00000000
+ 37393 99c9 00000000 .quad .LBE3229
+ 37393 00000000
+ 37394 99d1 02 .byte 0x2
+ 37395 99d2 7501 .value 0x175
+ 37396 99d4 32 .uleb128 0x32
+ 37397 99d5 E90D0000 .long 0xde9
+ 37398 99d9 04 .byte 0x4
+ 37399 99da 91 .byte 0x91
+ 37400 99db C0BD7F .sleb128 -8512
+ 37401 99de 32 .uleb128 0x32
+ 37402 99df DD0D0000 .long 0xddd
+ 37403 99e3 04 .byte 0x4
+ 37404 99e4 91 .byte 0x91
+ 37405 99e5 D0BD7F .sleb128 -8496
+ 37406 99e8 00 .byte 0x0
+ 37407 99e9 00 .byte 0x0
+ 37408 99ea 00 .byte 0x0
+ 37409 99eb 00 .byte 0x0
+ 37410 99ec 36 .uleb128 0x36
+ 37411 99ed 00000000 .quad .LBB3231
+ 37411 00000000
+ 37412 99f5 00000000 .quad .LBE3231
+ 37412 00000000
+ 37413 99fd 0C9A0000 .long 0x9a0c
+ 37414 9a01 34 .uleb128 0x34
+ 37415 9a02 2C0C0000 .long 0xc2c
+ 37416 9a06 04 .byte 0x4
+ 37417 9a07 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 962
+
+
+ 37418 9a08 B0B37F .sleb128 -9808
+ 37419 9a0b 00 .byte 0x0
+ 37420 9a0c 31 .uleb128 0x31
+ 37421 9a0d 860E0000 .long 0xe86
+ 37422 9a11 00000000 .quad .LBB3232
+ 37422 00000000
+ 37423 9a19 00000000 .quad .LBE3232
+ 37423 00000000
+ 37424 9a21 02 .byte 0x2
+ 37425 9a22 9606 .value 0x696
+ 37426 9a24 3D9A0000 .long 0x9a3d
+ 37427 9a28 32 .uleb128 0x32
+ 37428 9a29 A10E0000 .long 0xea1
+ 37429 9a2d 04 .byte 0x4
+ 37430 9a2e 91 .byte 0x91
+ 37431 9a2f E0BD7F .sleb128 -8480
+ 37432 9a32 32 .uleb128 0x32
+ 37433 9a33 970E0000 .long 0xe97
+ 37434 9a37 04 .byte 0x4
+ 37435 9a38 91 .byte 0x91
+ 37436 9a39 F0BD7F .sleb128 -8464
+ 37437 9a3c 00 .byte 0x0
+ 37438 9a3d 36 .uleb128 0x36
+ 37439 9a3e 00000000 .quad .LBB3234
+ 37439 00000000
+ 37440 9a46 00000000 .quad .LBE3234
+ 37440 00000000
+ 37441 9a4e 5D9A0000 .long 0x9a5d
+ 37442 9a52 34 .uleb128 0x34
+ 37443 9a53 3C0C0000 .long 0xc3c
+ 37444 9a57 04 .byte 0x4
+ 37445 9a58 91 .byte 0x91
+ 37446 9a59 A0B37F .sleb128 -9824
+ 37447 9a5c 00 .byte 0x0
+ 37448 9a5d 31 .uleb128 0x31
+ 37449 9a5e AC0E0000 .long 0xeac
+ 37450 9a62 00000000 .quad .LBB3235
+ 37450 00000000
+ 37451 9a6a 00000000 .quad .LBE3235
+ 37451 00000000
+ 37452 9a72 02 .byte 0x2
+ 37453 9a73 9806 .value 0x698
+ 37454 9a75 B19A0000 .long 0x9ab1
+ 37455 9a79 32 .uleb128 0x32
+ 37456 9a7a BE0E0000 .long 0xebe
+ 37457 9a7e 04 .byte 0x4
+ 37458 9a7f 91 .byte 0x91
+ 37459 9a80 80BE7F .sleb128 -8448
+ 37460 9a83 35 .uleb128 0x35
+ 37461 9a84 CB0E0000 .long 0xecb
+ 37462 9a88 00000000 .quad .LBB3237
+ 37462 00000000
+ 37463 9a90 00000000 .quad .LBE3237
+ 37463 00000000
+ 37464 9a98 02 .byte 0x2
+ 37465 9a99 4905 .value 0x549
+ 37466 9a9b 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 963
+
+
+ 37467 9a9c E90E0000 .long 0xee9
+ 37468 9aa0 04 .byte 0x4
+ 37469 9aa1 91 .byte 0x91
+ 37470 9aa2 9CBE7F .sleb128 -8420
+ 37471 9aa5 32 .uleb128 0x32
+ 37472 9aa6 DD0E0000 .long 0xedd
+ 37473 9aaa 04 .byte 0x4
+ 37474 9aab 91 .byte 0x91
+ 37475 9aac A0BE7F .sleb128 -8416
+ 37476 9aaf 00 .byte 0x0
+ 37477 9ab0 00 .byte 0x0
+ 37478 9ab1 33 .uleb128 0x33
+ 37479 9ab2 00000000 .quad .LBB3239
+ 37479 00000000
+ 37480 9aba 00000000 .quad .LBE3239
+ 37480 00000000
+ 37481 9ac2 34 .uleb128 0x34
+ 37482 9ac3 480C0000 .long 0xc48
+ 37483 9ac7 04 .byte 0x4
+ 37484 9ac8 91 .byte 0x91
+ 37485 9ac9 90B37F .sleb128 -9840
+ 37486 9acc 00 .byte 0x0
+ 37487 9acd 00 .byte 0x0
+ 37488 9ace 00 .byte 0x0
+ 37489 9acf 31 .uleb128 0x31
+ 37490 9ad0 F60E0000 .long 0xef6
+ 37491 9ad4 00000000 .quad .LBB3240
+ 37491 00000000
+ 37492 9adc 00000000 .quad .LBE3240
+ 37492 00000000
+ 37493 9ae4 02 .byte 0x2
+ 37494 9ae5 8607 .value 0x786
+ 37495 9ae7 F19C0000 .long 0x9cf1
+ 37496 9aeb 32 .uleb128 0x32
+ 37497 9aec 080F0000 .long 0xf08
+ 37498 9af0 04 .byte 0x4
+ 37499 9af1 91 .byte 0x91
+ 37500 9af2 B0BE7F .sleb128 -8400
+ 37501 9af5 33 .uleb128 0x33
+ 37502 9af6 00000000 .quad .LBB3241
+ 37502 00000000
+ 37503 9afe 00000000 .quad .LBE3241
+ 37503 00000000
+ 37504 9b06 34 .uleb128 0x34
+ 37505 9b07 140F0000 .long 0xf14
+ 37506 9b0b 04 .byte 0x4
+ 37507 9b0c 76 .byte 0x76
+ 37508 9b0d 80B07F .sleb128 -10240
+ 37509 9b10 31 .uleb128 0x31
+ 37510 9b11 210F0000 .long 0xf21
+ 37511 9b15 00000000 .quad .LBB3242
+ 37511 00000000
+ 37512 9b1d 00000000 .quad .LBE3242
+ 37512 00000000
+ 37513 9b25 02 .byte 0x2
+ 37514 9b26 1F06 .value 0x61f
+ 37515 9b28 B29B0000 .long 0x9bb2
+
GAS LISTING /tmp/ccjbMjHD.s page 964
+
+
+ 37516 9b2c 32 .uleb128 0x32
+ 37517 9b2d 330F0000 .long 0xf33
+ 37518 9b31 04 .byte 0x4
+ 37519 9b32 91 .byte 0x91
+ 37520 9b33 C0BE7F .sleb128 -8384
+ 37521 9b36 33 .uleb128 0x33
+ 37522 9b37 00000000 .quad .LBB3243
+ 37522 00000000
+ 37523 9b3f 00000000 .quad .LBE3243
+ 37523 00000000
+ 37524 9b47 34 .uleb128 0x34
+ 37525 9b48 3F0F0000 .long 0xf3f
+ 37526 9b4c 09 .byte 0x9
+ 37527 9b4d 03 .byte 0x3
+ 37528 9b4e 00000000 .quad mask.7943
+ 37528 00000000
+ 37529 9b56 35 .uleb128 0x35
+ 37530 9b57 A00D0000 .long 0xda0
+ 37531 9b5b 00000000 .quad .LBB3244
+ 37531 00000000
+ 37532 9b63 00000000 .quad .LBE3244
+ 37532 00000000
+ 37533 9b6b 02 .byte 0x2
+ 37534 9b6c FE04 .value 0x4fe
+ 37535 9b6e 32 .uleb128 0x32
+ 37536 9b6f BE0D0000 .long 0xdbe
+ 37537 9b73 04 .byte 0x4
+ 37538 9b74 91 .byte 0x91
+ 37539 9b75 D0BE7F .sleb128 -8368
+ 37540 9b78 32 .uleb128 0x32
+ 37541 9b79 B20D0000 .long 0xdb2
+ 37542 9b7d 04 .byte 0x4
+ 37543 9b7e 91 .byte 0x91
+ 37544 9b7f E0BE7F .sleb128 -8352
+ 37545 9b82 35 .uleb128 0x35
+ 37546 9b83 CB0D0000 .long 0xdcb
+ 37547 9b87 00000000 .quad .LBB3246
+ 37547 00000000
+ 37548 9b8f 00000000 .quad .LBE3246
+ 37548 00000000
+ 37549 9b97 02 .byte 0x2
+ 37550 9b98 7501 .value 0x175
+ 37551 9b9a 32 .uleb128 0x32
+ 37552 9b9b E90D0000 .long 0xde9
+ 37553 9b9f 04 .byte 0x4
+ 37554 9ba0 91 .byte 0x91
+ 37555 9ba1 F0BE7F .sleb128 -8336
+ 37556 9ba4 32 .uleb128 0x32
+ 37557 9ba5 DD0D0000 .long 0xddd
+ 37558 9ba9 04 .byte 0x4
+ 37559 9baa 91 .byte 0x91
+ 37560 9bab 80BF7F .sleb128 -8320
+ 37561 9bae 00 .byte 0x0
+ 37562 9baf 00 .byte 0x0
+ 37563 9bb0 00 .byte 0x0
+ 37564 9bb1 00 .byte 0x0
+ 37565 9bb2 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 965
+
+
+ 37566 9bb3 210F0000 .long 0xf21
+ 37567 9bb7 00000000 .quad .LBB3248
+ 37567 00000000
+ 37568 9bbf 00000000 .quad .LBE3248
+ 37568 00000000
+ 37569 9bc7 02 .byte 0x2
+ 37570 9bc8 2006 .value 0x620
+ 37571 9bca 549C0000 .long 0x9c54
+ 37572 9bce 32 .uleb128 0x32
+ 37573 9bcf 330F0000 .long 0xf33
+ 37574 9bd3 04 .byte 0x4
+ 37575 9bd4 91 .byte 0x91
+ 37576 9bd5 90BF7F .sleb128 -8304
+ 37577 9bd8 33 .uleb128 0x33
+ 37578 9bd9 00000000 .quad .LBB3249
+ 37578 00000000
+ 37579 9be1 00000000 .quad .LBE3249
+ 37579 00000000
+ 37580 9be9 34 .uleb128 0x34
+ 37581 9bea 3F0F0000 .long 0xf3f
+ 37582 9bee 09 .byte 0x9
+ 37583 9bef 03 .byte 0x3
+ 37584 9bf0 00000000 .quad mask.7943
+ 37584 00000000
+ 37585 9bf8 35 .uleb128 0x35
+ 37586 9bf9 A00D0000 .long 0xda0
+ 37587 9bfd 00000000 .quad .LBB3250
+ 37587 00000000
+ 37588 9c05 00000000 .quad .LBE3250
+ 37588 00000000
+ 37589 9c0d 02 .byte 0x2
+ 37590 9c0e FE04 .value 0x4fe
+ 37591 9c10 32 .uleb128 0x32
+ 37592 9c11 BE0D0000 .long 0xdbe
+ 37593 9c15 04 .byte 0x4
+ 37594 9c16 91 .byte 0x91
+ 37595 9c17 A0BF7F .sleb128 -8288
+ 37596 9c1a 32 .uleb128 0x32
+ 37597 9c1b B20D0000 .long 0xdb2
+ 37598 9c1f 04 .byte 0x4
+ 37599 9c20 91 .byte 0x91
+ 37600 9c21 B0BF7F .sleb128 -8272
+ 37601 9c24 35 .uleb128 0x35
+ 37602 9c25 CB0D0000 .long 0xdcb
+ 37603 9c29 00000000 .quad .LBB3252
+ 37603 00000000
+ 37604 9c31 00000000 .quad .LBE3252
+ 37604 00000000
+ 37605 9c39 02 .byte 0x2
+ 37606 9c3a 7501 .value 0x175
+ 37607 9c3c 32 .uleb128 0x32
+ 37608 9c3d E90D0000 .long 0xde9
+ 37609 9c41 04 .byte 0x4
+ 37610 9c42 91 .byte 0x91
+ 37611 9c43 C0BF7F .sleb128 -8256
+ 37612 9c46 32 .uleb128 0x32
+ 37613 9c47 DD0D0000 .long 0xddd
+
GAS LISTING /tmp/ccjbMjHD.s page 966
+
+
+ 37614 9c4b 04 .byte 0x4
+ 37615 9c4c 91 .byte 0x91
+ 37616 9c4d D0BF7F .sleb128 -8240
+ 37617 9c50 00 .byte 0x0
+ 37618 9c51 00 .byte 0x0
+ 37619 9c52 00 .byte 0x0
+ 37620 9c53 00 .byte 0x0
+ 37621 9c54 35 .uleb128 0x35
+ 37622 9c55 210F0000 .long 0xf21
+ 37623 9c59 00000000 .quad .LBB3254
+ 37623 00000000
+ 37624 9c61 00000000 .quad .LBE3254
+ 37624 00000000
+ 37625 9c69 02 .byte 0x2
+ 37626 9c6a 2106 .value 0x621
+ 37627 9c6c 32 .uleb128 0x32
+ 37628 9c6d 330F0000 .long 0xf33
+ 37629 9c71 04 .byte 0x4
+ 37630 9c72 91 .byte 0x91
+ 37631 9c73 E0BF7F .sleb128 -8224
+ 37632 9c76 33 .uleb128 0x33
+ 37633 9c77 00000000 .quad .LBB3255
+ 37633 00000000
+ 37634 9c7f 00000000 .quad .LBE3255
+ 37634 00000000
+ 37635 9c87 34 .uleb128 0x34
+ 37636 9c88 3F0F0000 .long 0xf3f
+ 37637 9c8c 09 .byte 0x9
+ 37638 9c8d 03 .byte 0x3
+ 37639 9c8e 00000000 .quad mask.7943
+ 37639 00000000
+ 37640 9c96 35 .uleb128 0x35
+ 37641 9c97 A00D0000 .long 0xda0
+ 37642 9c9b 00000000 .quad .LBB3256
+ 37642 00000000
+ 37643 9ca3 00000000 .quad .LBE3256
+ 37643 00000000
+ 37644 9cab 02 .byte 0x2
+ 37645 9cac FE04 .value 0x4fe
+ 37646 9cae 32 .uleb128 0x32
+ 37647 9caf BE0D0000 .long 0xdbe
+ 37648 9cb3 04 .byte 0x4
+ 37649 9cb4 91 .byte 0x91
+ 37650 9cb5 F0BF7F .sleb128 -8208
+ 37651 9cb8 32 .uleb128 0x32
+ 37652 9cb9 B20D0000 .long 0xdb2
+ 37653 9cbd 03 .byte 0x3
+ 37654 9cbe 91 .byte 0x91
+ 37655 9cbf 8040 .sleb128 -8192
+ 37656 9cc1 35 .uleb128 0x35
+ 37657 9cc2 CB0D0000 .long 0xdcb
+ 37658 9cc6 00000000 .quad .LBB3258
+ 37658 00000000
+ 37659 9cce 00000000 .quad .LBE3258
+ 37659 00000000
+ 37660 9cd6 02 .byte 0x2
+ 37661 9cd7 7501 .value 0x175
+
GAS LISTING /tmp/ccjbMjHD.s page 967
+
+
+ 37662 9cd9 32 .uleb128 0x32
+ 37663 9cda E90D0000 .long 0xde9
+ 37664 9cde 03 .byte 0x3
+ 37665 9cdf 91 .byte 0x91
+ 37666 9ce0 9040 .sleb128 -8176
+ 37667 9ce2 32 .uleb128 0x32
+ 37668 9ce3 DD0D0000 .long 0xddd
+ 37669 9ce7 03 .byte 0x3
+ 37670 9ce8 91 .byte 0x91
+ 37671 9ce9 A040 .sleb128 -8160
+ 37672 9ceb 00 .byte 0x0
+ 37673 9cec 00 .byte 0x0
+ 37674 9ced 00 .byte 0x0
+ 37675 9cee 00 .byte 0x0
+ 37676 9cef 00 .byte 0x0
+ 37677 9cf0 00 .byte 0x0
+ 37678 9cf1 31 .uleb128 0x31
+ 37679 9cf2 860E0000 .long 0xe86
+ 37680 9cf6 00000000 .quad .LBB3260
+ 37680 00000000
+ 37681 9cfe 00000000 .quad .LBE3260
+ 37681 00000000
+ 37682 9d06 02 .byte 0x2
+ 37683 9d07 8607 .value 0x786
+ 37684 9d09 209D0000 .long 0x9d20
+ 37685 9d0d 32 .uleb128 0x32
+ 37686 9d0e A10E0000 .long 0xea1
+ 37687 9d12 03 .byte 0x3
+ 37688 9d13 91 .byte 0x91
+ 37689 9d14 B040 .sleb128 -8144
+ 37690 9d16 32 .uleb128 0x32
+ 37691 9d17 970E0000 .long 0xe97
+ 37692 9d1b 03 .byte 0x3
+ 37693 9d1c 91 .byte 0x91
+ 37694 9d1d C040 .sleb128 -8128
+ 37695 9d1f 00 .byte 0x0
+ 37696 9d20 31 .uleb128 0x31
+ 37697 9d21 8F940000 .long 0x948f
+ 37698 9d25 00000000 .quad .LBB3262
+ 37698 00000000
+ 37699 9d2d 00000000 .quad .LBE3262
+ 37699 00000000
+ 37700 9d35 02 .byte 0x2
+ 37701 9d36 8707 .value 0x787
+ 37702 9d38 B29D0000 .long 0x9db2
+ 37703 9d3c 32 .uleb128 0x32
+ 37704 9d3d A1940000 .long 0x94a1
+ 37705 9d41 03 .byte 0x3
+ 37706 9d42 91 .byte 0x91
+ 37707 9d43 D040 .sleb128 -8112
+ 37708 9d45 33 .uleb128 0x33
+ 37709 9d46 00000000 .quad .LBB3263
+ 37709 00000000
+ 37710 9d4e 00000000 .quad .LBE3263
+ 37710 00000000
+ 37711 9d56 34 .uleb128 0x34
+ 37712 9d57 AD940000 .long 0x94ad
+
GAS LISTING /tmp/ccjbMjHD.s page 968
+
+
+ 37713 9d5b 04 .byte 0x4
+ 37714 9d5c 91 .byte 0x91
+ 37715 9d5d E0B37F .sleb128 -9760
+ 37716 9d60 34 .uleb128 0x34
+ 37717 9d61 B7940000 .long 0x94b7
+ 37718 9d65 03 .byte 0x3
+ 37719 9d66 91 .byte 0x91
+ 37720 9d67 E440 .sleb128 -8092
+ 37721 9d69 35 .uleb128 0x35
+ 37722 9d6a BE560000 .long 0x56be
+ 37723 9d6e 00000000 .quad .LBB3264
+ 37723 00000000
+ 37724 9d76 00000000 .quad .LBE3264
+ 37724 00000000
+ 37725 9d7e 02 .byte 0x2
+ 37726 9d7f 7906 .value 0x679
+ 37727 9d81 32 .uleb128 0x32
+ 37728 9d82 D0560000 .long 0x56d0
+ 37729 9d86 03 .byte 0x3
+ 37730 9d87 91 .byte 0x91
+ 37731 9d88 E840 .sleb128 -8088
+ 37732 9d8a 33 .uleb128 0x33
+ 37733 9d8b 00000000 .quad .LBB3265
+ 37733 00000000
+ 37734 9d93 00000000 .quad .LBE3265
+ 37734 00000000
+ 37735 9d9b 34 .uleb128 0x34
+ 37736 9d9c DA560000 .long 0x56da
+ 37737 9da0 04 .byte 0x4
+ 37738 9da1 91 .byte 0x91
+ 37739 9da2 D0B37F .sleb128 -9776
+ 37740 9da5 34 .uleb128 0x34
+ 37741 9da6 E6560000 .long 0x56e6
+ 37742 9daa 03 .byte 0x3
+ 37743 9dab 91 .byte 0x91
+ 37744 9dac EC40 .sleb128 -8084
+ 37745 9dae 00 .byte 0x0
+ 37746 9daf 00 .byte 0x0
+ 37747 9db0 00 .byte 0x0
+ 37748 9db1 00 .byte 0x0
+ 37749 9db2 31 .uleb128 0x31
+ 37750 9db3 F60E0000 .long 0xef6
+ 37751 9db7 00000000 .quad .LBB3266
+ 37751 00000000
+ 37752 9dbf 00000000 .quad .LBE3266
+ 37752 00000000
+ 37753 9dc7 02 .byte 0x2
+ 37754 9dc8 8707 .value 0x787
+ 37755 9dca C79F0000 .long 0x9fc7
+ 37756 9dce 32 .uleb128 0x32
+ 37757 9dcf 080F0000 .long 0xf08
+ 37758 9dd3 03 .byte 0x3
+ 37759 9dd4 91 .byte 0x91
+ 37760 9dd5 F040 .sleb128 -8080
+ 37761 9dd7 33 .uleb128 0x33
+ 37762 9dd8 00000000 .quad .LBB3267
+ 37762 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 969
+
+
+ 37763 9de0 00000000 .quad .LBE3267
+ 37763 00000000
+ 37764 9de8 34 .uleb128 0x34
+ 37765 9de9 140F0000 .long 0xf14
+ 37766 9ded 04 .byte 0x4
+ 37767 9dee 76 .byte 0x76
+ 37768 9def 90B07F .sleb128 -10224
+ 37769 9df2 31 .uleb128 0x31
+ 37770 9df3 210F0000 .long 0xf21
+ 37771 9df7 00000000 .quad .LBB3268
+ 37771 00000000
+ 37772 9dff 00000000 .quad .LBE3268
+ 37772 00000000
+ 37773 9e07 02 .byte 0x2
+ 37774 9e08 1F06 .value 0x61f
+ 37775 9e0a 8F9E0000 .long 0x9e8f
+ 37776 9e0e 32 .uleb128 0x32
+ 37777 9e0f 330F0000 .long 0xf33
+ 37778 9e13 03 .byte 0x3
+ 37779 9e14 91 .byte 0x91
+ 37780 9e15 8041 .sleb128 -8064
+ 37781 9e17 33 .uleb128 0x33
+ 37782 9e18 00000000 .quad .LBB3269
+ 37782 00000000
+ 37783 9e20 00000000 .quad .LBE3269
+ 37783 00000000
+ 37784 9e28 34 .uleb128 0x34
+ 37785 9e29 3F0F0000 .long 0xf3f
+ 37786 9e2d 09 .byte 0x9
+ 37787 9e2e 03 .byte 0x3
+ 37788 9e2f 00000000 .quad mask.7943
+ 37788 00000000
+ 37789 9e37 35 .uleb128 0x35
+ 37790 9e38 A00D0000 .long 0xda0
+ 37791 9e3c 00000000 .quad .LBB3270
+ 37791 00000000
+ 37792 9e44 00000000 .quad .LBE3270
+ 37792 00000000
+ 37793 9e4c 02 .byte 0x2
+ 37794 9e4d FE04 .value 0x4fe
+ 37795 9e4f 32 .uleb128 0x32
+ 37796 9e50 BE0D0000 .long 0xdbe
+ 37797 9e54 03 .byte 0x3
+ 37798 9e55 91 .byte 0x91
+ 37799 9e56 9041 .sleb128 -8048
+ 37800 9e58 32 .uleb128 0x32
+ 37801 9e59 B20D0000 .long 0xdb2
+ 37802 9e5d 03 .byte 0x3
+ 37803 9e5e 91 .byte 0x91
+ 37804 9e5f A041 .sleb128 -8032
+ 37805 9e61 35 .uleb128 0x35
+ 37806 9e62 CB0D0000 .long 0xdcb
+ 37807 9e66 00000000 .quad .LBB3272
+ 37807 00000000
+ 37808 9e6e 00000000 .quad .LBE3272
+ 37808 00000000
+ 37809 9e76 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 970
+
+
+ 37810 9e77 7501 .value 0x175
+ 37811 9e79 32 .uleb128 0x32
+ 37812 9e7a E90D0000 .long 0xde9
+ 37813 9e7e 03 .byte 0x3
+ 37814 9e7f 91 .byte 0x91
+ 37815 9e80 B041 .sleb128 -8016
+ 37816 9e82 32 .uleb128 0x32
+ 37817 9e83 DD0D0000 .long 0xddd
+ 37818 9e87 03 .byte 0x3
+ 37819 9e88 91 .byte 0x91
+ 37820 9e89 C041 .sleb128 -8000
+ 37821 9e8b 00 .byte 0x0
+ 37822 9e8c 00 .byte 0x0
+ 37823 9e8d 00 .byte 0x0
+ 37824 9e8e 00 .byte 0x0
+ 37825 9e8f 31 .uleb128 0x31
+ 37826 9e90 210F0000 .long 0xf21
+ 37827 9e94 00000000 .quad .LBB3274
+ 37827 00000000
+ 37828 9e9c 00000000 .quad .LBE3274
+ 37828 00000000
+ 37829 9ea4 02 .byte 0x2
+ 37830 9ea5 2006 .value 0x620
+ 37831 9ea7 2C9F0000 .long 0x9f2c
+ 37832 9eab 32 .uleb128 0x32
+ 37833 9eac 330F0000 .long 0xf33
+ 37834 9eb0 03 .byte 0x3
+ 37835 9eb1 91 .byte 0x91
+ 37836 9eb2 D041 .sleb128 -7984
+ 37837 9eb4 33 .uleb128 0x33
+ 37838 9eb5 00000000 .quad .LBB3275
+ 37838 00000000
+ 37839 9ebd 00000000 .quad .LBE3275
+ 37839 00000000
+ 37840 9ec5 34 .uleb128 0x34
+ 37841 9ec6 3F0F0000 .long 0xf3f
+ 37842 9eca 09 .byte 0x9
+ 37843 9ecb 03 .byte 0x3
+ 37844 9ecc 00000000 .quad mask.7943
+ 37844 00000000
+ 37845 9ed4 35 .uleb128 0x35
+ 37846 9ed5 A00D0000 .long 0xda0
+ 37847 9ed9 00000000 .quad .LBB3276
+ 37847 00000000
+ 37848 9ee1 00000000 .quad .LBE3276
+ 37848 00000000
+ 37849 9ee9 02 .byte 0x2
+ 37850 9eea FE04 .value 0x4fe
+ 37851 9eec 32 .uleb128 0x32
+ 37852 9eed BE0D0000 .long 0xdbe
+ 37853 9ef1 03 .byte 0x3
+ 37854 9ef2 91 .byte 0x91
+ 37855 9ef3 E041 .sleb128 -7968
+ 37856 9ef5 32 .uleb128 0x32
+ 37857 9ef6 B20D0000 .long 0xdb2
+ 37858 9efa 03 .byte 0x3
+ 37859 9efb 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 971
+
+
+ 37860 9efc F041 .sleb128 -7952
+ 37861 9efe 35 .uleb128 0x35
+ 37862 9eff CB0D0000 .long 0xdcb
+ 37863 9f03 00000000 .quad .LBB3278
+ 37863 00000000
+ 37864 9f0b 00000000 .quad .LBE3278
+ 37864 00000000
+ 37865 9f13 02 .byte 0x2
+ 37866 9f14 7501 .value 0x175
+ 37867 9f16 32 .uleb128 0x32
+ 37868 9f17 E90D0000 .long 0xde9
+ 37869 9f1b 03 .byte 0x3
+ 37870 9f1c 91 .byte 0x91
+ 37871 9f1d 8042 .sleb128 -7936
+ 37872 9f1f 32 .uleb128 0x32
+ 37873 9f20 DD0D0000 .long 0xddd
+ 37874 9f24 03 .byte 0x3
+ 37875 9f25 91 .byte 0x91
+ 37876 9f26 9042 .sleb128 -7920
+ 37877 9f28 00 .byte 0x0
+ 37878 9f29 00 .byte 0x0
+ 37879 9f2a 00 .byte 0x0
+ 37880 9f2b 00 .byte 0x0
+ 37881 9f2c 35 .uleb128 0x35
+ 37882 9f2d 210F0000 .long 0xf21
+ 37883 9f31 00000000 .quad .LBB3280
+ 37883 00000000
+ 37884 9f39 00000000 .quad .LBE3280
+ 37884 00000000
+ 37885 9f41 02 .byte 0x2
+ 37886 9f42 2106 .value 0x621
+ 37887 9f44 32 .uleb128 0x32
+ 37888 9f45 330F0000 .long 0xf33
+ 37889 9f49 03 .byte 0x3
+ 37890 9f4a 91 .byte 0x91
+ 37891 9f4b A042 .sleb128 -7904
+ 37892 9f4d 33 .uleb128 0x33
+ 37893 9f4e 00000000 .quad .LBB3281
+ 37893 00000000
+ 37894 9f56 00000000 .quad .LBE3281
+ 37894 00000000
+ 37895 9f5e 34 .uleb128 0x34
+ 37896 9f5f 3F0F0000 .long 0xf3f
+ 37897 9f63 09 .byte 0x9
+ 37898 9f64 03 .byte 0x3
+ 37899 9f65 00000000 .quad mask.7943
+ 37899 00000000
+ 37900 9f6d 35 .uleb128 0x35
+ 37901 9f6e A00D0000 .long 0xda0
+ 37902 9f72 00000000 .quad .LBB3282
+ 37902 00000000
+ 37903 9f7a 00000000 .quad .LBE3282
+ 37903 00000000
+ 37904 9f82 02 .byte 0x2
+ 37905 9f83 FE04 .value 0x4fe
+ 37906 9f85 32 .uleb128 0x32
+ 37907 9f86 BE0D0000 .long 0xdbe
+
GAS LISTING /tmp/ccjbMjHD.s page 972
+
+
+ 37908 9f8a 03 .byte 0x3
+ 37909 9f8b 91 .byte 0x91
+ 37910 9f8c B042 .sleb128 -7888
+ 37911 9f8e 32 .uleb128 0x32
+ 37912 9f8f B20D0000 .long 0xdb2
+ 37913 9f93 03 .byte 0x3
+ 37914 9f94 91 .byte 0x91
+ 37915 9f95 C042 .sleb128 -7872
+ 37916 9f97 35 .uleb128 0x35
+ 37917 9f98 CB0D0000 .long 0xdcb
+ 37918 9f9c 00000000 .quad .LBB3284
+ 37918 00000000
+ 37919 9fa4 00000000 .quad .LBE3284
+ 37919 00000000
+ 37920 9fac 02 .byte 0x2
+ 37921 9fad 7501 .value 0x175
+ 37922 9faf 32 .uleb128 0x32
+ 37923 9fb0 E90D0000 .long 0xde9
+ 37924 9fb4 03 .byte 0x3
+ 37925 9fb5 91 .byte 0x91
+ 37926 9fb6 D042 .sleb128 -7856
+ 37927 9fb8 32 .uleb128 0x32
+ 37928 9fb9 DD0D0000 .long 0xddd
+ 37929 9fbd 03 .byte 0x3
+ 37930 9fbe 91 .byte 0x91
+ 37931 9fbf E042 .sleb128 -7840
+ 37932 9fc1 00 .byte 0x0
+ 37933 9fc2 00 .byte 0x0
+ 37934 9fc3 00 .byte 0x0
+ 37935 9fc4 00 .byte 0x0
+ 37936 9fc5 00 .byte 0x0
+ 37937 9fc6 00 .byte 0x0
+ 37938 9fc7 31 .uleb128 0x31
+ 37939 9fc8 860E0000 .long 0xe86
+ 37940 9fcc 00000000 .quad .LBB3286
+ 37940 00000000
+ 37941 9fd4 00000000 .quad .LBE3286
+ 37941 00000000
+ 37942 9fdc 02 .byte 0x2
+ 37943 9fdd 8707 .value 0x787
+ 37944 9fdf F69F0000 .long 0x9ff6
+ 37945 9fe3 32 .uleb128 0x32
+ 37946 9fe4 A10E0000 .long 0xea1
+ 37947 9fe8 03 .byte 0x3
+ 37948 9fe9 91 .byte 0x91
+ 37949 9fea F042 .sleb128 -7824
+ 37950 9fec 32 .uleb128 0x32
+ 37951 9fed 970E0000 .long 0xe97
+ 37952 9ff1 03 .byte 0x3
+ 37953 9ff2 91 .byte 0x91
+ 37954 9ff3 8043 .sleb128 -7808
+ 37955 9ff5 00 .byte 0x0
+ 37956 9ff6 31 .uleb128 0x31
+ 37957 9ff7 D50B0000 .long 0xbd5
+ 37958 9ffb 00000000 .quad .LBB3288
+ 37958 00000000
+ 37959 a003 00000000 .quad .LBE3288
+
GAS LISTING /tmp/ccjbMjHD.s page 973
+
+
+ 37959 00000000
+ 37960 a00b 02 .byte 0x2
+ 37961 a00c 8807 .value 0x788
+ 37962 a00e D9A40000 .long 0xa4d9
+ 37963 a012 32 .uleb128 0x32
+ 37964 a013 F30B0000 .long 0xbf3
+ 37965 a017 03 .byte 0x3
+ 37966 a018 91 .byte 0x91
+ 37967 a019 9C43 .sleb128 -7780
+ 37968 a01b 32 .uleb128 0x32
+ 37969 a01c E70B0000 .long 0xbe7
+ 37970 a020 03 .byte 0x3
+ 37971 a021 91 .byte 0x91
+ 37972 a022 A043 .sleb128 -7776
+ 37973 a024 33 .uleb128 0x33
+ 37974 a025 00000000 .quad .LBB3289
+ 37974 00000000
+ 37975 a02d 00000000 .quad .LBE3289
+ 37975 00000000
+ 37976 a035 34 .uleb128 0x34
+ 37977 a036 FF0B0000 .long 0xbff
+ 37978 a03a 04 .byte 0x4
+ 37979 a03b 76 .byte 0x76
+ 37980 a03c B0B07F .sleb128 -10192
+ 37981 a03f 34 .uleb128 0x34
+ 37982 a040 0B0C0000 .long 0xc0b
+ 37983 a044 04 .byte 0x4
+ 37984 a045 76 .byte 0x76
+ 37985 a046 A0B07F .sleb128 -10208
+ 37986 a049 31 .uleb128 0x31
+ 37987 a04a 540C0000 .long 0xc54
+ 37988 a04e 00000000 .quad .LBB3290
+ 37988 00000000
+ 37989 a056 00000000 .quad .LBE3290
+ 37989 00000000
+ 37990 a05e 02 .byte 0x2
+ 37991 a05f 9106 .value 0x691
+ 37992 a061 B5A00000 .long 0xa0b5
+ 37993 a065 32 .uleb128 0x32
+ 37994 a066 7E0C0000 .long 0xc7e
+ 37995 a06a 03 .byte 0x3
+ 37996 a06b 91 .byte 0x91
+ 37997 a06c B843 .sleb128 -7752
+ 37998 a06e 32 .uleb128 0x32
+ 37999 a06f 720C0000 .long 0xc72
+ 38000 a073 03 .byte 0x3
+ 38001 a074 91 .byte 0x91
+ 38002 a075 BC43 .sleb128 -7748
+ 38003 a077 32 .uleb128 0x32
+ 38004 a078 660C0000 .long 0xc66
+ 38005 a07c 03 .byte 0x3
+ 38006 a07d 91 .byte 0x91
+ 38007 a07e C043 .sleb128 -7744
+ 38008 a080 35 .uleb128 0x35
+ 38009 a081 8B0C0000 .long 0xc8b
+ 38010 a085 00000000 .quad .LBB3292
+ 38010 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 974
+
+
+ 38011 a08d 00000000 .quad .LBE3292
+ 38011 00000000
+ 38012 a095 02 .byte 0x2
+ 38013 a096 0702 .value 0x207
+ 38014 a098 32 .uleb128 0x32
+ 38015 a099 B40C0000 .long 0xcb4
+ 38016 a09d 03 .byte 0x3
+ 38017 a09e 91 .byte 0x91
+ 38018 a09f D843 .sleb128 -7720
+ 38019 a0a1 32 .uleb128 0x32
+ 38020 a0a2 A90C0000 .long 0xca9
+ 38021 a0a6 03 .byte 0x3
+ 38022 a0a7 91 .byte 0x91
+ 38023 a0a8 DC43 .sleb128 -7716
+ 38024 a0aa 32 .uleb128 0x32
+ 38025 a0ab 9D0C0000 .long 0xc9d
+ 38026 a0af 03 .byte 0x3
+ 38027 a0b0 91 .byte 0x91
+ 38028 a0b1 E043 .sleb128 -7712
+ 38029 a0b3 00 .byte 0x0
+ 38030 a0b4 00 .byte 0x0
+ 38031 a0b5 31 .uleb128 0x31
+ 38032 a0b6 C10C0000 .long 0xcc1
+ 38033 a0ba 00000000 .quad .LBB3294
+ 38033 00000000
+ 38034 a0c2 00000000 .quad .LBE3294
+ 38034 00000000
+ 38035 a0ca 02 .byte 0x2
+ 38036 a0cb 9206 .value 0x692
+ 38037 a0cd 3EA30000 .long 0xa33e
+ 38038 a0d1 32 .uleb128 0x32
+ 38039 a0d2 D30C0000 .long 0xcd3
+ 38040 a0d6 03 .byte 0x3
+ 38041 a0d7 91 .byte 0x91
+ 38042 a0d8 F043 .sleb128 -7696
+ 38043 a0da 35 .uleb128 0x35
+ 38044 a0db E00C0000 .long 0xce0
+ 38045 a0df 00000000 .quad .LBB3296
+ 38045 00000000
+ 38046 a0e7 00000000 .quad .LBE3296
+ 38046 00000000
+ 38047 a0ef 02 .byte 0x2
+ 38048 a0f0 7D03 .value 0x37d
+ 38049 a0f2 32 .uleb128 0x32
+ 38050 a0f3 FE0C0000 .long 0xcfe
+ 38051 a0f7 03 .byte 0x3
+ 38052 a0f8 91 .byte 0x91
+ 38053 a0f9 8844 .sleb128 -7672
+ 38054 a0fb 32 .uleb128 0x32
+ 38055 a0fc F20C0000 .long 0xcf2
+ 38056 a100 03 .byte 0x3
+ 38057 a101 91 .byte 0x91
+ 38058 a102 9044 .sleb128 -7664
+ 38059 a104 33 .uleb128 0x33
+ 38060 a105 00000000 .quad .LBB3297
+ 38060 00000000
+ 38061 a10d 00000000 .quad .LBE3297
+
GAS LISTING /tmp/ccjbMjHD.s page 975
+
+
+ 38061 00000000
+ 38062 a115 34 .uleb128 0x34
+ 38063 a116 0A0D0000 .long 0xd0a
+ 38064 a11a 03 .byte 0x3
+ 38065 a11b 91 .byte 0x91
+ 38066 a11c E044 .sleb128 -7584
+ 38067 a11e 34 .uleb128 0x34
+ 38068 a11f 150D0000 .long 0xd15
+ 38069 a123 03 .byte 0x3
+ 38070 a124 91 .byte 0x91
+ 38071 a125 D044 .sleb128 -7600
+ 38072 a127 34 .uleb128 0x34
+ 38073 a128 200D0000 .long 0xd20
+ 38074 a12c 03 .byte 0x3
+ 38075 a12d 91 .byte 0x91
+ 38076 a12e C044 .sleb128 -7616
+ 38077 a130 34 .uleb128 0x34
+ 38078 a131 2C0D0000 .long 0xd2c
+ 38079 a135 03 .byte 0x3
+ 38080 a136 91 .byte 0x91
+ 38081 a137 B044 .sleb128 -7632
+ 38082 a139 34 .uleb128 0x34
+ 38083 a13a 380D0000 .long 0xd38
+ 38084 a13e 03 .byte 0x3
+ 38085 a13f 91 .byte 0x91
+ 38086 a140 AC44 .sleb128 -7636
+ 38087 a142 31 .uleb128 0x31
+ 38088 a143 4F0D0000 .long 0xd4f
+ 38089 a147 00000000 .quad .LBB3298
+ 38089 00000000
+ 38090 a14f 00000000 .quad .LBE3298
+ 38090 00000000
+ 38091 a157 02 .byte 0x2
+ 38092 a158 5603 .value 0x356
+ 38093 a15a 71A10000 .long 0xa171
+ 38094 a15e 32 .uleb128 0x32
+ 38095 a15f 6A0D0000 .long 0xd6a
+ 38096 a163 03 .byte 0x3
+ 38097 a164 91 .byte 0x91
+ 38098 a165 F044 .sleb128 -7568
+ 38099 a167 32 .uleb128 0x32
+ 38100 a168 600D0000 .long 0xd60
+ 38101 a16c 03 .byte 0x3
+ 38102 a16d 91 .byte 0x91
+ 38103 a16e 8045 .sleb128 -7552
+ 38104 a170 00 .byte 0x0
+ 38105 a171 31 .uleb128 0x31
+ 38106 a172 750D0000 .long 0xd75
+ 38107 a176 00000000 .quad .LBB3300
+ 38107 00000000
+ 38108 a17e 00000000 .quad .LBE3300
+ 38108 00000000
+ 38109 a186 02 .byte 0x2
+ 38110 a187 5903 .value 0x359
+ 38111 a189 A0A10000 .long 0xa1a0
+ 38112 a18d 32 .uleb128 0x32
+ 38113 a18e 930D0000 .long 0xd93
+
GAS LISTING /tmp/ccjbMjHD.s page 976
+
+
+ 38114 a192 03 .byte 0x3
+ 38115 a193 91 .byte 0x91
+ 38116 a194 9C45 .sleb128 -7524
+ 38117 a196 32 .uleb128 0x32
+ 38118 a197 870D0000 .long 0xd87
+ 38119 a19b 03 .byte 0x3
+ 38120 a19c 91 .byte 0x91
+ 38121 a19d A045 .sleb128 -7520
+ 38122 a19f 00 .byte 0x0
+ 38123 a1a0 31 .uleb128 0x31
+ 38124 a1a1 4F0D0000 .long 0xd4f
+ 38125 a1a5 00000000 .quad .LBB3302
+ 38125 00000000
+ 38126 a1ad 00000000 .quad .LBE3302
+ 38126 00000000
+ 38127 a1b5 02 .byte 0x2
+ 38128 a1b6 5B03 .value 0x35b
+ 38129 a1b8 CFA10000 .long 0xa1cf
+ 38130 a1bc 32 .uleb128 0x32
+ 38131 a1bd 6A0D0000 .long 0xd6a
+ 38132 a1c1 03 .byte 0x3
+ 38133 a1c2 91 .byte 0x91
+ 38134 a1c3 B045 .sleb128 -7504
+ 38135 a1c5 32 .uleb128 0x32
+ 38136 a1c6 600D0000 .long 0xd60
+ 38137 a1ca 03 .byte 0x3
+ 38138 a1cb 91 .byte 0x91
+ 38139 a1cc C045 .sleb128 -7488
+ 38140 a1ce 00 .byte 0x0
+ 38141 a1cf 31 .uleb128 0x31
+ 38142 a1d0 A00D0000 .long 0xda0
+ 38143 a1d4 00000000 .quad .LBB3304
+ 38143 00000000
+ 38144 a1dc 00000000 .quad .LBE3304
+ 38144 00000000
+ 38145 a1e4 02 .byte 0x2
+ 38146 a1e5 6403 .value 0x364
+ 38147 a1e7 29A20000 .long 0xa229
+ 38148 a1eb 32 .uleb128 0x32
+ 38149 a1ec BE0D0000 .long 0xdbe
+ 38150 a1f0 03 .byte 0x3
+ 38151 a1f1 91 .byte 0x91
+ 38152 a1f2 D045 .sleb128 -7472
+ 38153 a1f4 32 .uleb128 0x32
+ 38154 a1f5 B20D0000 .long 0xdb2
+ 38155 a1f9 03 .byte 0x3
+ 38156 a1fa 91 .byte 0x91
+ 38157 a1fb E045 .sleb128 -7456
+ 38158 a1fd 35 .uleb128 0x35
+ 38159 a1fe CB0D0000 .long 0xdcb
+ 38160 a202 00000000 .quad .LBB3306
+ 38160 00000000
+ 38161 a20a 00000000 .quad .LBE3306
+ 38161 00000000
+ 38162 a212 02 .byte 0x2
+ 38163 a213 7501 .value 0x175
+ 38164 a215 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 977
+
+
+ 38165 a216 E90D0000 .long 0xde9
+ 38166 a21a 03 .byte 0x3
+ 38167 a21b 91 .byte 0x91
+ 38168 a21c F045 .sleb128 -7440
+ 38169 a21e 32 .uleb128 0x32
+ 38170 a21f DD0D0000 .long 0xddd
+ 38171 a223 03 .byte 0x3
+ 38172 a224 91 .byte 0x91
+ 38173 a225 8046 .sleb128 -7424
+ 38174 a227 00 .byte 0x0
+ 38175 a228 00 .byte 0x0
+ 38176 a229 31 .uleb128 0x31
+ 38177 a22a FB0D0000 .long 0xdfb
+ 38178 a22e 00000000 .quad .LBB3308
+ 38178 00000000
+ 38179 a236 00000000 .quad .LBE3308
+ 38179 00000000
+ 38180 a23e 02 .byte 0x2
+ 38181 a23f 6603 .value 0x366
+ 38182 a241 58A20000 .long 0xa258
+ 38183 a245 32 .uleb128 0x32
+ 38184 a246 160E0000 .long 0xe16
+ 38185 a24a 03 .byte 0x3
+ 38186 a24b 91 .byte 0x91
+ 38187 a24c 9046 .sleb128 -7408
+ 38188 a24e 32 .uleb128 0x32
+ 38189 a24f 0C0E0000 .long 0xe0c
+ 38190 a253 03 .byte 0x3
+ 38191 a254 91 .byte 0x91
+ 38192 a255 A046 .sleb128 -7392
+ 38193 a257 00 .byte 0x0
+ 38194 a258 31 .uleb128 0x31
+ 38195 a259 A00D0000 .long 0xda0
+ 38196 a25d 00000000 .quad .LBB3310
+ 38196 00000000
+ 38197 a265 00000000 .quad .LBE3310
+ 38197 00000000
+ 38198 a26d 02 .byte 0x2
+ 38199 a26e 6803 .value 0x368
+ 38200 a270 B2A20000 .long 0xa2b2
+ 38201 a274 32 .uleb128 0x32
+ 38202 a275 BE0D0000 .long 0xdbe
+ 38203 a279 03 .byte 0x3
+ 38204 a27a 91 .byte 0x91
+ 38205 a27b B046 .sleb128 -7376
+ 38206 a27d 32 .uleb128 0x32
+ 38207 a27e B20D0000 .long 0xdb2
+ 38208 a282 03 .byte 0x3
+ 38209 a283 91 .byte 0x91
+ 38210 a284 C046 .sleb128 -7360
+ 38211 a286 35 .uleb128 0x35
+ 38212 a287 CB0D0000 .long 0xdcb
+ 38213 a28b 00000000 .quad .LBB3312
+ 38213 00000000
+ 38214 a293 00000000 .quad .LBE3312
+ 38214 00000000
+ 38215 a29b 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 978
+
+
+ 38216 a29c 7501 .value 0x175
+ 38217 a29e 32 .uleb128 0x32
+ 38218 a29f E90D0000 .long 0xde9
+ 38219 a2a3 03 .byte 0x3
+ 38220 a2a4 91 .byte 0x91
+ 38221 a2a5 D046 .sleb128 -7344
+ 38222 a2a7 32 .uleb128 0x32
+ 38223 a2a8 DD0D0000 .long 0xddd
+ 38224 a2ac 03 .byte 0x3
+ 38225 a2ad 91 .byte 0x91
+ 38226 a2ae E046 .sleb128 -7328
+ 38227 a2b0 00 .byte 0x0
+ 38228 a2b1 00 .byte 0x0
+ 38229 a2b2 31 .uleb128 0x31
+ 38230 a2b3 FB0D0000 .long 0xdfb
+ 38231 a2b7 00000000 .quad .LBB3314
+ 38231 00000000
+ 38232 a2bf 00000000 .quad .LBE3314
+ 38232 00000000
+ 38233 a2c7 02 .byte 0x2
+ 38234 a2c8 6A03 .value 0x36a
+ 38235 a2ca E1A20000 .long 0xa2e1
+ 38236 a2ce 32 .uleb128 0x32
+ 38237 a2cf 160E0000 .long 0xe16
+ 38238 a2d3 03 .byte 0x3
+ 38239 a2d4 91 .byte 0x91
+ 38240 a2d5 F046 .sleb128 -7312
+ 38241 a2d7 32 .uleb128 0x32
+ 38242 a2d8 0C0E0000 .long 0xe0c
+ 38243 a2dc 03 .byte 0x3
+ 38244 a2dd 91 .byte 0x91
+ 38245 a2de 8047 .sleb128 -7296
+ 38246 a2e0 00 .byte 0x0
+ 38247 a2e1 31 .uleb128 0x31
+ 38248 a2e2 210E0000 .long 0xe21
+ 38249 a2e6 00000000 .quad .LBB3316
+ 38249 00000000
+ 38250 a2ee 00000000 .quad .LBE3316
+ 38250 00000000
+ 38251 a2f6 02 .byte 0x2
+ 38252 a2f7 6C03 .value 0x36c
+ 38253 a2f9 10A30000 .long 0xa310
+ 38254 a2fd 32 .uleb128 0x32
+ 38255 a2fe 3E0E0000 .long 0xe3e
+ 38256 a302 03 .byte 0x3
+ 38257 a303 91 .byte 0x91
+ 38258 a304 9047 .sleb128 -7280
+ 38259 a306 32 .uleb128 0x32
+ 38260 a307 330E0000 .long 0xe33
+ 38261 a30b 03 .byte 0x3
+ 38262 a30c 91 .byte 0x91
+ 38263 a30d A047 .sleb128 -7264
+ 38264 a30f 00 .byte 0x0
+ 38265 a310 35 .uleb128 0x35
+ 38266 a311 4F0D0000 .long 0xd4f
+ 38267 a315 00000000 .quad .LBB3318
+ 38267 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 979
+
+
+ 38268 a31d 00000000 .quad .LBE3318
+ 38268 00000000
+ 38269 a325 02 .byte 0x2
+ 38270 a326 6E03 .value 0x36e
+ 38271 a328 32 .uleb128 0x32
+ 38272 a329 6A0D0000 .long 0xd6a
+ 38273 a32d 03 .byte 0x3
+ 38274 a32e 91 .byte 0x91
+ 38275 a32f B047 .sleb128 -7248
+ 38276 a331 32 .uleb128 0x32
+ 38277 a332 600D0000 .long 0xd60
+ 38278 a336 03 .byte 0x3
+ 38279 a337 91 .byte 0x91
+ 38280 a338 C047 .sleb128 -7232
+ 38281 a33a 00 .byte 0x0
+ 38282 a33b 00 .byte 0x0
+ 38283 a33c 00 .byte 0x0
+ 38284 a33d 00 .byte 0x0
+ 38285 a33e 36 .uleb128 0x36
+ 38286 a33f 00000000 .quad .LBB3320
+ 38286 00000000
+ 38287 a347 00000000 .quad .LBE3320
+ 38287 00000000
+ 38288 a34f 5EA30000 .long 0xa35e
+ 38289 a353 34 .uleb128 0x34
+ 38290 a354 1C0C0000 .long 0xc1c
+ 38291 a358 04 .byte 0x4
+ 38292 a359 91 .byte 0x91
+ 38293 a35a A0B47F .sleb128 -9696
+ 38294 a35d 00 .byte 0x0
+ 38295 a35e 31 .uleb128 0x31
+ 38296 a35f 4A0E0000 .long 0xe4a
+ 38297 a363 00000000 .quad .LBB3321
+ 38297 00000000
+ 38298 a36b 00000000 .quad .LBE3321
+ 38298 00000000
+ 38299 a373 02 .byte 0x2
+ 38300 a374 9406 .value 0x694
+ 38301 a376 FBA30000 .long 0xa3fb
+ 38302 a37a 32 .uleb128 0x32
+ 38303 a37b 5C0E0000 .long 0xe5c
+ 38304 a37f 03 .byte 0x3
+ 38305 a380 91 .byte 0x91
+ 38306 a381 D047 .sleb128 -7216
+ 38307 a383 33 .uleb128 0x33
+ 38308 a384 00000000 .quad .LBB3322
+ 38308 00000000
+ 38309 a38c 00000000 .quad .LBE3322
+ 38309 00000000
+ 38310 a394 34 .uleb128 0x34
+ 38311 a395 680E0000 .long 0xe68
+ 38312 a399 09 .byte 0x9
+ 38313 a39a 03 .byte 0x3
+ 38314 a39b 00000000 .quad ShiftRowTable.7385
+ 38314 00000000
+ 38315 a3a3 35 .uleb128 0x35
+ 38316 a3a4 A00D0000 .long 0xda0
+
GAS LISTING /tmp/ccjbMjHD.s page 980
+
+
+ 38317 a3a8 00000000 .quad .LBB3323
+ 38317 00000000
+ 38318 a3b0 00000000 .quad .LBE3323
+ 38318 00000000
+ 38319 a3b8 02 .byte 0x2
+ 38320 a3b9 9B02 .value 0x29b
+ 38321 a3bb 32 .uleb128 0x32
+ 38322 a3bc BE0D0000 .long 0xdbe
+ 38323 a3c0 03 .byte 0x3
+ 38324 a3c1 91 .byte 0x91
+ 38325 a3c2 E047 .sleb128 -7200
+ 38326 a3c4 32 .uleb128 0x32
+ 38327 a3c5 B20D0000 .long 0xdb2
+ 38328 a3c9 03 .byte 0x3
+ 38329 a3ca 91 .byte 0x91
+ 38330 a3cb F047 .sleb128 -7184
+ 38331 a3cd 35 .uleb128 0x35
+ 38332 a3ce CB0D0000 .long 0xdcb
+ 38333 a3d2 00000000 .quad .LBB3325
+ 38333 00000000
+ 38334 a3da 00000000 .quad .LBE3325
+ 38334 00000000
+ 38335 a3e2 02 .byte 0x2
+ 38336 a3e3 7501 .value 0x175
+ 38337 a3e5 32 .uleb128 0x32
+ 38338 a3e6 E90D0000 .long 0xde9
+ 38339 a3ea 03 .byte 0x3
+ 38340 a3eb 91 .byte 0x91
+ 38341 a3ec 8048 .sleb128 -7168
+ 38342 a3ee 32 .uleb128 0x32
+ 38343 a3ef DD0D0000 .long 0xddd
+ 38344 a3f3 03 .byte 0x3
+ 38345 a3f4 91 .byte 0x91
+ 38346 a3f5 9048 .sleb128 -7152
+ 38347 a3f7 00 .byte 0x0
+ 38348 a3f8 00 .byte 0x0
+ 38349 a3f9 00 .byte 0x0
+ 38350 a3fa 00 .byte 0x0
+ 38351 a3fb 36 .uleb128 0x36
+ 38352 a3fc 00000000 .quad .LBB3327
+ 38352 00000000
+ 38353 a404 00000000 .quad .LBE3327
+ 38353 00000000
+ 38354 a40c 1BA40000 .long 0xa41b
+ 38355 a410 34 .uleb128 0x34
+ 38356 a411 2C0C0000 .long 0xc2c
+ 38357 a415 04 .byte 0x4
+ 38358 a416 91 .byte 0x91
+ 38359 a417 90B47F .sleb128 -9712
+ 38360 a41a 00 .byte 0x0
+ 38361 a41b 31 .uleb128 0x31
+ 38362 a41c 860E0000 .long 0xe86
+ 38363 a420 00000000 .quad .LBB3328
+ 38363 00000000
+ 38364 a428 00000000 .quad .LBE3328
+ 38364 00000000
+ 38365 a430 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 981
+
+
+ 38366 a431 9606 .value 0x696
+ 38367 a433 4AA40000 .long 0xa44a
+ 38368 a437 32 .uleb128 0x32
+ 38369 a438 A10E0000 .long 0xea1
+ 38370 a43c 03 .byte 0x3
+ 38371 a43d 91 .byte 0x91
+ 38372 a43e A048 .sleb128 -7136
+ 38373 a440 32 .uleb128 0x32
+ 38374 a441 970E0000 .long 0xe97
+ 38375 a445 03 .byte 0x3
+ 38376 a446 91 .byte 0x91
+ 38377 a447 B048 .sleb128 -7120
+ 38378 a449 00 .byte 0x0
+ 38379 a44a 36 .uleb128 0x36
+ 38380 a44b 00000000 .quad .LBB3330
+ 38380 00000000
+ 38381 a453 00000000 .quad .LBE3330
+ 38381 00000000
+ 38382 a45b 6AA40000 .long 0xa46a
+ 38383 a45f 34 .uleb128 0x34
+ 38384 a460 3C0C0000 .long 0xc3c
+ 38385 a464 04 .byte 0x4
+ 38386 a465 91 .byte 0x91
+ 38387 a466 80B47F .sleb128 -9728
+ 38388 a469 00 .byte 0x0
+ 38389 a46a 31 .uleb128 0x31
+ 38390 a46b AC0E0000 .long 0xeac
+ 38391 a46f 00000000 .quad .LBB3331
+ 38391 00000000
+ 38392 a477 00000000 .quad .LBE3331
+ 38392 00000000
+ 38393 a47f 02 .byte 0x2
+ 38394 a480 9806 .value 0x698
+ 38395 a482 BBA40000 .long 0xa4bb
+ 38396 a486 32 .uleb128 0x32
+ 38397 a487 BE0E0000 .long 0xebe
+ 38398 a48b 03 .byte 0x3
+ 38399 a48c 91 .byte 0x91
+ 38400 a48d C048 .sleb128 -7104
+ 38401 a48f 35 .uleb128 0x35
+ 38402 a490 CB0E0000 .long 0xecb
+ 38403 a494 00000000 .quad .LBB3333
+ 38403 00000000
+ 38404 a49c 00000000 .quad .LBE3333
+ 38404 00000000
+ 38405 a4a4 02 .byte 0x2
+ 38406 a4a5 4905 .value 0x549
+ 38407 a4a7 32 .uleb128 0x32
+ 38408 a4a8 E90E0000 .long 0xee9
+ 38409 a4ac 03 .byte 0x3
+ 38410 a4ad 91 .byte 0x91
+ 38411 a4ae DC48 .sleb128 -7076
+ 38412 a4b0 32 .uleb128 0x32
+ 38413 a4b1 DD0E0000 .long 0xedd
+ 38414 a4b5 03 .byte 0x3
+ 38415 a4b6 91 .byte 0x91
+ 38416 a4b7 E048 .sleb128 -7072
+
GAS LISTING /tmp/ccjbMjHD.s page 982
+
+
+ 38417 a4b9 00 .byte 0x0
+ 38418 a4ba 00 .byte 0x0
+ 38419 a4bb 33 .uleb128 0x33
+ 38420 a4bc 00000000 .quad .LBB3335
+ 38420 00000000
+ 38421 a4c4 00000000 .quad .LBE3335
+ 38421 00000000
+ 38422 a4cc 34 .uleb128 0x34
+ 38423 a4cd 480C0000 .long 0xc48
+ 38424 a4d1 04 .byte 0x4
+ 38425 a4d2 91 .byte 0x91
+ 38426 a4d3 F0B37F .sleb128 -9744
+ 38427 a4d6 00 .byte 0x0
+ 38428 a4d7 00 .byte 0x0
+ 38429 a4d8 00 .byte 0x0
+ 38430 a4d9 31 .uleb128 0x31
+ 38431 a4da F60E0000 .long 0xef6
+ 38432 a4de 00000000 .quad .LBB3336
+ 38432 00000000
+ 38433 a4e6 00000000 .quad .LBE3336
+ 38433 00000000
+ 38434 a4ee 02 .byte 0x2
+ 38435 a4ef 8807 .value 0x788
+ 38436 a4f1 EEA60000 .long 0xa6ee
+ 38437 a4f5 32 .uleb128 0x32
+ 38438 a4f6 080F0000 .long 0xf08
+ 38439 a4fa 03 .byte 0x3
+ 38440 a4fb 91 .byte 0x91
+ 38441 a4fc F048 .sleb128 -7056
+ 38442 a4fe 33 .uleb128 0x33
+ 38443 a4ff 00000000 .quad .LBB3337
+ 38443 00000000
+ 38444 a507 00000000 .quad .LBE3337
+ 38444 00000000
+ 38445 a50f 34 .uleb128 0x34
+ 38446 a510 140F0000 .long 0xf14
+ 38447 a514 04 .byte 0x4
+ 38448 a515 76 .byte 0x76
+ 38449 a516 C0B07F .sleb128 -10176
+ 38450 a519 31 .uleb128 0x31
+ 38451 a51a 210F0000 .long 0xf21
+ 38452 a51e 00000000 .quad .LBB3338
+ 38452 00000000
+ 38453 a526 00000000 .quad .LBE3338
+ 38453 00000000
+ 38454 a52e 02 .byte 0x2
+ 38455 a52f 1F06 .value 0x61f
+ 38456 a531 B6A50000 .long 0xa5b6
+ 38457 a535 32 .uleb128 0x32
+ 38458 a536 330F0000 .long 0xf33
+ 38459 a53a 03 .byte 0x3
+ 38460 a53b 91 .byte 0x91
+ 38461 a53c 8049 .sleb128 -7040
+ 38462 a53e 33 .uleb128 0x33
+ 38463 a53f 00000000 .quad .LBB3339
+ 38463 00000000
+ 38464 a547 00000000 .quad .LBE3339
+
GAS LISTING /tmp/ccjbMjHD.s page 983
+
+
+ 38464 00000000
+ 38465 a54f 34 .uleb128 0x34
+ 38466 a550 3F0F0000 .long 0xf3f
+ 38467 a554 09 .byte 0x9
+ 38468 a555 03 .byte 0x3
+ 38469 a556 00000000 .quad mask.7943
+ 38469 00000000
+ 38470 a55e 35 .uleb128 0x35
+ 38471 a55f A00D0000 .long 0xda0
+ 38472 a563 00000000 .quad .LBB3340
+ 38472 00000000
+ 38473 a56b 00000000 .quad .LBE3340
+ 38473 00000000
+ 38474 a573 02 .byte 0x2
+ 38475 a574 FE04 .value 0x4fe
+ 38476 a576 32 .uleb128 0x32
+ 38477 a577 BE0D0000 .long 0xdbe
+ 38478 a57b 03 .byte 0x3
+ 38479 a57c 91 .byte 0x91
+ 38480 a57d 9049 .sleb128 -7024
+ 38481 a57f 32 .uleb128 0x32
+ 38482 a580 B20D0000 .long 0xdb2
+ 38483 a584 03 .byte 0x3
+ 38484 a585 91 .byte 0x91
+ 38485 a586 A049 .sleb128 -7008
+ 38486 a588 35 .uleb128 0x35
+ 38487 a589 CB0D0000 .long 0xdcb
+ 38488 a58d 00000000 .quad .LBB3342
+ 38488 00000000
+ 38489 a595 00000000 .quad .LBE3342
+ 38489 00000000
+ 38490 a59d 02 .byte 0x2
+ 38491 a59e 7501 .value 0x175
+ 38492 a5a0 32 .uleb128 0x32
+ 38493 a5a1 E90D0000 .long 0xde9
+ 38494 a5a5 03 .byte 0x3
+ 38495 a5a6 91 .byte 0x91
+ 38496 a5a7 B049 .sleb128 -6992
+ 38497 a5a9 32 .uleb128 0x32
+ 38498 a5aa DD0D0000 .long 0xddd
+ 38499 a5ae 03 .byte 0x3
+ 38500 a5af 91 .byte 0x91
+ 38501 a5b0 C049 .sleb128 -6976
+ 38502 a5b2 00 .byte 0x0
+ 38503 a5b3 00 .byte 0x0
+ 38504 a5b4 00 .byte 0x0
+ 38505 a5b5 00 .byte 0x0
+ 38506 a5b6 31 .uleb128 0x31
+ 38507 a5b7 210F0000 .long 0xf21
+ 38508 a5bb 00000000 .quad .LBB3344
+ 38508 00000000
+ 38509 a5c3 00000000 .quad .LBE3344
+ 38509 00000000
+ 38510 a5cb 02 .byte 0x2
+ 38511 a5cc 2006 .value 0x620
+ 38512 a5ce 53A60000 .long 0xa653
+ 38513 a5d2 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 984
+
+
+ 38514 a5d3 330F0000 .long 0xf33
+ 38515 a5d7 03 .byte 0x3
+ 38516 a5d8 91 .byte 0x91
+ 38517 a5d9 D049 .sleb128 -6960
+ 38518 a5db 33 .uleb128 0x33
+ 38519 a5dc 00000000 .quad .LBB3345
+ 38519 00000000
+ 38520 a5e4 00000000 .quad .LBE3345
+ 38520 00000000
+ 38521 a5ec 34 .uleb128 0x34
+ 38522 a5ed 3F0F0000 .long 0xf3f
+ 38523 a5f1 09 .byte 0x9
+ 38524 a5f2 03 .byte 0x3
+ 38525 a5f3 00000000 .quad mask.7943
+ 38525 00000000
+ 38526 a5fb 35 .uleb128 0x35
+ 38527 a5fc A00D0000 .long 0xda0
+ 38528 a600 00000000 .quad .LBB3346
+ 38528 00000000
+ 38529 a608 00000000 .quad .LBE3346
+ 38529 00000000
+ 38530 a610 02 .byte 0x2
+ 38531 a611 FE04 .value 0x4fe
+ 38532 a613 32 .uleb128 0x32
+ 38533 a614 BE0D0000 .long 0xdbe
+ 38534 a618 03 .byte 0x3
+ 38535 a619 91 .byte 0x91
+ 38536 a61a E049 .sleb128 -6944
+ 38537 a61c 32 .uleb128 0x32
+ 38538 a61d B20D0000 .long 0xdb2
+ 38539 a621 03 .byte 0x3
+ 38540 a622 91 .byte 0x91
+ 38541 a623 F049 .sleb128 -6928
+ 38542 a625 35 .uleb128 0x35
+ 38543 a626 CB0D0000 .long 0xdcb
+ 38544 a62a 00000000 .quad .LBB3348
+ 38544 00000000
+ 38545 a632 00000000 .quad .LBE3348
+ 38545 00000000
+ 38546 a63a 02 .byte 0x2
+ 38547 a63b 7501 .value 0x175
+ 38548 a63d 32 .uleb128 0x32
+ 38549 a63e E90D0000 .long 0xde9
+ 38550 a642 03 .byte 0x3
+ 38551 a643 91 .byte 0x91
+ 38552 a644 804A .sleb128 -6912
+ 38553 a646 32 .uleb128 0x32
+ 38554 a647 DD0D0000 .long 0xddd
+ 38555 a64b 03 .byte 0x3
+ 38556 a64c 91 .byte 0x91
+ 38557 a64d 904A .sleb128 -6896
+ 38558 a64f 00 .byte 0x0
+ 38559 a650 00 .byte 0x0
+ 38560 a651 00 .byte 0x0
+ 38561 a652 00 .byte 0x0
+ 38562 a653 35 .uleb128 0x35
+ 38563 a654 210F0000 .long 0xf21
+
GAS LISTING /tmp/ccjbMjHD.s page 985
+
+
+ 38564 a658 00000000 .quad .LBB3350
+ 38564 00000000
+ 38565 a660 00000000 .quad .LBE3350
+ 38565 00000000
+ 38566 a668 02 .byte 0x2
+ 38567 a669 2106 .value 0x621
+ 38568 a66b 32 .uleb128 0x32
+ 38569 a66c 330F0000 .long 0xf33
+ 38570 a670 03 .byte 0x3
+ 38571 a671 91 .byte 0x91
+ 38572 a672 A04A .sleb128 -6880
+ 38573 a674 33 .uleb128 0x33
+ 38574 a675 00000000 .quad .LBB3351
+ 38574 00000000
+ 38575 a67d 00000000 .quad .LBE3351
+ 38575 00000000
+ 38576 a685 34 .uleb128 0x34
+ 38577 a686 3F0F0000 .long 0xf3f
+ 38578 a68a 09 .byte 0x9
+ 38579 a68b 03 .byte 0x3
+ 38580 a68c 00000000 .quad mask.7943
+ 38580 00000000
+ 38581 a694 35 .uleb128 0x35
+ 38582 a695 A00D0000 .long 0xda0
+ 38583 a699 00000000 .quad .LBB3352
+ 38583 00000000
+ 38584 a6a1 00000000 .quad .LBE3352
+ 38584 00000000
+ 38585 a6a9 02 .byte 0x2
+ 38586 a6aa FE04 .value 0x4fe
+ 38587 a6ac 32 .uleb128 0x32
+ 38588 a6ad BE0D0000 .long 0xdbe
+ 38589 a6b1 03 .byte 0x3
+ 38590 a6b2 91 .byte 0x91
+ 38591 a6b3 B04A .sleb128 -6864
+ 38592 a6b5 32 .uleb128 0x32
+ 38593 a6b6 B20D0000 .long 0xdb2
+ 38594 a6ba 03 .byte 0x3
+ 38595 a6bb 91 .byte 0x91
+ 38596 a6bc C04A .sleb128 -6848
+ 38597 a6be 35 .uleb128 0x35
+ 38598 a6bf CB0D0000 .long 0xdcb
+ 38599 a6c3 00000000 .quad .LBB3354
+ 38599 00000000
+ 38600 a6cb 00000000 .quad .LBE3354
+ 38600 00000000
+ 38601 a6d3 02 .byte 0x2
+ 38602 a6d4 7501 .value 0x175
+ 38603 a6d6 32 .uleb128 0x32
+ 38604 a6d7 E90D0000 .long 0xde9
+ 38605 a6db 03 .byte 0x3
+ 38606 a6dc 91 .byte 0x91
+ 38607 a6dd D04A .sleb128 -6832
+ 38608 a6df 32 .uleb128 0x32
+ 38609 a6e0 DD0D0000 .long 0xddd
+ 38610 a6e4 03 .byte 0x3
+ 38611 a6e5 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 986
+
+
+ 38612 a6e6 E04A .sleb128 -6816
+ 38613 a6e8 00 .byte 0x0
+ 38614 a6e9 00 .byte 0x0
+ 38615 a6ea 00 .byte 0x0
+ 38616 a6eb 00 .byte 0x0
+ 38617 a6ec 00 .byte 0x0
+ 38618 a6ed 00 .byte 0x0
+ 38619 a6ee 31 .uleb128 0x31
+ 38620 a6ef 860E0000 .long 0xe86
+ 38621 a6f3 00000000 .quad .LBB3356
+ 38621 00000000
+ 38622 a6fb 00000000 .quad .LBE3356
+ 38622 00000000
+ 38623 a703 02 .byte 0x2
+ 38624 a704 8807 .value 0x788
+ 38625 a706 1DA70000 .long 0xa71d
+ 38626 a70a 32 .uleb128 0x32
+ 38627 a70b A10E0000 .long 0xea1
+ 38628 a70f 03 .byte 0x3
+ 38629 a710 91 .byte 0x91
+ 38630 a711 F04A .sleb128 -6800
+ 38631 a713 32 .uleb128 0x32
+ 38632 a714 970E0000 .long 0xe97
+ 38633 a718 03 .byte 0x3
+ 38634 a719 91 .byte 0x91
+ 38635 a71a 804B .sleb128 -6784
+ 38636 a71c 00 .byte 0x0
+ 38637 a71d 31 .uleb128 0x31
+ 38638 a71e 8F940000 .long 0x948f
+ 38639 a722 00000000 .quad .LBB3358
+ 38639 00000000
+ 38640 a72a 00000000 .quad .LBE3358
+ 38640 00000000
+ 38641 a732 02 .byte 0x2
+ 38642 a733 8907 .value 0x789
+ 38643 a735 AFA70000 .long 0xa7af
+ 38644 a739 32 .uleb128 0x32
+ 38645 a73a A1940000 .long 0x94a1
+ 38646 a73e 03 .byte 0x3
+ 38647 a73f 91 .byte 0x91
+ 38648 a740 904B .sleb128 -6768
+ 38649 a742 33 .uleb128 0x33
+ 38650 a743 00000000 .quad .LBB3359
+ 38650 00000000
+ 38651 a74b 00000000 .quad .LBE3359
+ 38651 00000000
+ 38652 a753 34 .uleb128 0x34
+ 38653 a754 AD940000 .long 0x94ad
+ 38654 a758 04 .byte 0x4
+ 38655 a759 91 .byte 0x91
+ 38656 a75a C0B47F .sleb128 -9664
+ 38657 a75d 34 .uleb128 0x34
+ 38658 a75e B7940000 .long 0x94b7
+ 38659 a762 03 .byte 0x3
+ 38660 a763 91 .byte 0x91
+ 38661 a764 A44B .sleb128 -6748
+ 38662 a766 35 .uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s page 987
+
+
+ 38663 a767 BE560000 .long 0x56be
+ 38664 a76b 00000000 .quad .LBB3360
+ 38664 00000000
+ 38665 a773 00000000 .quad .LBE3360
+ 38665 00000000
+ 38666 a77b 02 .byte 0x2
+ 38667 a77c 7906 .value 0x679
+ 38668 a77e 32 .uleb128 0x32
+ 38669 a77f D0560000 .long 0x56d0
+ 38670 a783 03 .byte 0x3
+ 38671 a784 91 .byte 0x91
+ 38672 a785 A84B .sleb128 -6744
+ 38673 a787 33 .uleb128 0x33
+ 38674 a788 00000000 .quad .LBB3361
+ 38674 00000000
+ 38675 a790 00000000 .quad .LBE3361
+ 38675 00000000
+ 38676 a798 34 .uleb128 0x34
+ 38677 a799 DA560000 .long 0x56da
+ 38678 a79d 04 .byte 0x4
+ 38679 a79e 91 .byte 0x91
+ 38680 a79f B0B47F .sleb128 -9680
+ 38681 a7a2 34 .uleb128 0x34
+ 38682 a7a3 E6560000 .long 0x56e6
+ 38683 a7a7 03 .byte 0x3
+ 38684 a7a8 91 .byte 0x91
+ 38685 a7a9 AC4B .sleb128 -6740
+ 38686 a7ab 00 .byte 0x0
+ 38687 a7ac 00 .byte 0x0
+ 38688 a7ad 00 .byte 0x0
+ 38689 a7ae 00 .byte 0x0
+ 38690 a7af 31 .uleb128 0x31
+ 38691 a7b0 F60E0000 .long 0xef6
+ 38692 a7b4 00000000 .quad .LBB3362
+ 38692 00000000
+ 38693 a7bc 00000000 .quad .LBE3362
+ 38693 00000000
+ 38694 a7c4 02 .byte 0x2
+ 38695 a7c5 8907 .value 0x789
+ 38696 a7c7 C4A90000 .long 0xa9c4
+ 38697 a7cb 32 .uleb128 0x32
+ 38698 a7cc 080F0000 .long 0xf08
+ 38699 a7d0 03 .byte 0x3
+ 38700 a7d1 91 .byte 0x91
+ 38701 a7d2 B04B .sleb128 -6736
+ 38702 a7d4 33 .uleb128 0x33
+ 38703 a7d5 00000000 .quad .LBB3363
+ 38703 00000000
+ 38704 a7dd 00000000 .quad .LBE3363
+ 38704 00000000
+ 38705 a7e5 34 .uleb128 0x34
+ 38706 a7e6 140F0000 .long 0xf14
+ 38707 a7ea 04 .byte 0x4
+ 38708 a7eb 76 .byte 0x76
+ 38709 a7ec D0B07F .sleb128 -10160
+ 38710 a7ef 31 .uleb128 0x31
+ 38711 a7f0 210F0000 .long 0xf21
+
GAS LISTING /tmp/ccjbMjHD.s page 988
+
+
+ 38712 a7f4 00000000 .quad .LBB3364
+ 38712 00000000
+ 38713 a7fc 00000000 .quad .LBE3364
+ 38713 00000000
+ 38714 a804 02 .byte 0x2
+ 38715 a805 1F06 .value 0x61f
+ 38716 a807 8CA80000 .long 0xa88c
+ 38717 a80b 32 .uleb128 0x32
+ 38718 a80c 330F0000 .long 0xf33
+ 38719 a810 03 .byte 0x3
+ 38720 a811 91 .byte 0x91
+ 38721 a812 C04B .sleb128 -6720
+ 38722 a814 33 .uleb128 0x33
+ 38723 a815 00000000 .quad .LBB3365
+ 38723 00000000
+ 38724 a81d 00000000 .quad .LBE3365
+ 38724 00000000
+ 38725 a825 34 .uleb128 0x34
+ 38726 a826 3F0F0000 .long 0xf3f
+ 38727 a82a 09 .byte 0x9
+ 38728 a82b 03 .byte 0x3
+ 38729 a82c 00000000 .quad mask.7943
+ 38729 00000000
+ 38730 a834 35 .uleb128 0x35
+ 38731 a835 A00D0000 .long 0xda0
+ 38732 a839 00000000 .quad .LBB3366
+ 38732 00000000
+ 38733 a841 00000000 .quad .LBE3366
+ 38733 00000000
+ 38734 a849 02 .byte 0x2
+ 38735 a84a FE04 .value 0x4fe
+ 38736 a84c 32 .uleb128 0x32
+ 38737 a84d BE0D0000 .long 0xdbe
+ 38738 a851 03 .byte 0x3
+ 38739 a852 91 .byte 0x91
+ 38740 a853 D04B .sleb128 -6704
+ 38741 a855 32 .uleb128 0x32
+ 38742 a856 B20D0000 .long 0xdb2
+ 38743 a85a 03 .byte 0x3
+ 38744 a85b 91 .byte 0x91
+ 38745 a85c E04B .sleb128 -6688
+ 38746 a85e 35 .uleb128 0x35
+ 38747 a85f CB0D0000 .long 0xdcb
+ 38748 a863 00000000 .quad .LBB3368
+ 38748 00000000
+ 38749 a86b 00000000 .quad .LBE3368
+ 38749 00000000
+ 38750 a873 02 .byte 0x2
+ 38751 a874 7501 .value 0x175
+ 38752 a876 32 .uleb128 0x32
+ 38753 a877 E90D0000 .long 0xde9
+ 38754 a87b 03 .byte 0x3
+ 38755 a87c 91 .byte 0x91
+ 38756 a87d F04B .sleb128 -6672
+ 38757 a87f 32 .uleb128 0x32
+ 38758 a880 DD0D0000 .long 0xddd
+ 38759 a884 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 989
+
+
+ 38760 a885 91 .byte 0x91
+ 38761 a886 804C .sleb128 -6656
+ 38762 a888 00 .byte 0x0
+ 38763 a889 00 .byte 0x0
+ 38764 a88a 00 .byte 0x0
+ 38765 a88b 00 .byte 0x0
+ 38766 a88c 31 .uleb128 0x31
+ 38767 a88d 210F0000 .long 0xf21
+ 38768 a891 00000000 .quad .LBB3370
+ 38768 00000000
+ 38769 a899 00000000 .quad .LBE3370
+ 38769 00000000
+ 38770 a8a1 02 .byte 0x2
+ 38771 a8a2 2006 .value 0x620
+ 38772 a8a4 29A90000 .long 0xa929
+ 38773 a8a8 32 .uleb128 0x32
+ 38774 a8a9 330F0000 .long 0xf33
+ 38775 a8ad 03 .byte 0x3
+ 38776 a8ae 91 .byte 0x91
+ 38777 a8af 904C .sleb128 -6640
+ 38778 a8b1 33 .uleb128 0x33
+ 38779 a8b2 00000000 .quad .LBB3371
+ 38779 00000000
+ 38780 a8ba 00000000 .quad .LBE3371
+ 38780 00000000
+ 38781 a8c2 34 .uleb128 0x34
+ 38782 a8c3 3F0F0000 .long 0xf3f
+ 38783 a8c7 09 .byte 0x9
+ 38784 a8c8 03 .byte 0x3
+ 38785 a8c9 00000000 .quad mask.7943
+ 38785 00000000
+ 38786 a8d1 35 .uleb128 0x35
+ 38787 a8d2 A00D0000 .long 0xda0
+ 38788 a8d6 00000000 .quad .LBB3372
+ 38788 00000000
+ 38789 a8de 00000000 .quad .LBE3372
+ 38789 00000000
+ 38790 a8e6 02 .byte 0x2
+ 38791 a8e7 FE04 .value 0x4fe
+ 38792 a8e9 32 .uleb128 0x32
+ 38793 a8ea BE0D0000 .long 0xdbe
+ 38794 a8ee 03 .byte 0x3
+ 38795 a8ef 91 .byte 0x91
+ 38796 a8f0 A04C .sleb128 -6624
+ 38797 a8f2 32 .uleb128 0x32
+ 38798 a8f3 B20D0000 .long 0xdb2
+ 38799 a8f7 03 .byte 0x3
+ 38800 a8f8 91 .byte 0x91
+ 38801 a8f9 B04C .sleb128 -6608
+ 38802 a8fb 35 .uleb128 0x35
+ 38803 a8fc CB0D0000 .long 0xdcb
+ 38804 a900 00000000 .quad .LBB3374
+ 38804 00000000
+ 38805 a908 00000000 .quad .LBE3374
+ 38805 00000000
+ 38806 a910 02 .byte 0x2
+ 38807 a911 7501 .value 0x175
+
GAS LISTING /tmp/ccjbMjHD.s page 990
+
+
+ 38808 a913 32 .uleb128 0x32
+ 38809 a914 E90D0000 .long 0xde9
+ 38810 a918 03 .byte 0x3
+ 38811 a919 91 .byte 0x91
+ 38812 a91a C04C .sleb128 -6592
+ 38813 a91c 32 .uleb128 0x32
+ 38814 a91d DD0D0000 .long 0xddd
+ 38815 a921 03 .byte 0x3
+ 38816 a922 91 .byte 0x91
+ 38817 a923 D04C .sleb128 -6576
+ 38818 a925 00 .byte 0x0
+ 38819 a926 00 .byte 0x0
+ 38820 a927 00 .byte 0x0
+ 38821 a928 00 .byte 0x0
+ 38822 a929 35 .uleb128 0x35
+ 38823 a92a 210F0000 .long 0xf21
+ 38824 a92e 00000000 .quad .LBB3376
+ 38824 00000000
+ 38825 a936 00000000 .quad .LBE3376
+ 38825 00000000
+ 38826 a93e 02 .byte 0x2
+ 38827 a93f 2106 .value 0x621
+ 38828 a941 32 .uleb128 0x32
+ 38829 a942 330F0000 .long 0xf33
+ 38830 a946 03 .byte 0x3
+ 38831 a947 91 .byte 0x91
+ 38832 a948 E04C .sleb128 -6560
+ 38833 a94a 33 .uleb128 0x33
+ 38834 a94b 00000000 .quad .LBB3377
+ 38834 00000000
+ 38835 a953 00000000 .quad .LBE3377
+ 38835 00000000
+ 38836 a95b 34 .uleb128 0x34
+ 38837 a95c 3F0F0000 .long 0xf3f
+ 38838 a960 09 .byte 0x9
+ 38839 a961 03 .byte 0x3
+ 38840 a962 00000000 .quad mask.7943
+ 38840 00000000
+ 38841 a96a 35 .uleb128 0x35
+ 38842 a96b A00D0000 .long 0xda0
+ 38843 a96f 00000000 .quad .LBB3378
+ 38843 00000000
+ 38844 a977 00000000 .quad .LBE3378
+ 38844 00000000
+ 38845 a97f 02 .byte 0x2
+ 38846 a980 FE04 .value 0x4fe
+ 38847 a982 32 .uleb128 0x32
+ 38848 a983 BE0D0000 .long 0xdbe
+ 38849 a987 03 .byte 0x3
+ 38850 a988 91 .byte 0x91
+ 38851 a989 F04C .sleb128 -6544
+ 38852 a98b 32 .uleb128 0x32
+ 38853 a98c B20D0000 .long 0xdb2
+ 38854 a990 03 .byte 0x3
+ 38855 a991 91 .byte 0x91
+ 38856 a992 804D .sleb128 -6528
+ 38857 a994 35 .uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s page 991
+
+
+ 38858 a995 CB0D0000 .long 0xdcb
+ 38859 a999 00000000 .quad .LBB3380
+ 38859 00000000
+ 38860 a9a1 00000000 .quad .LBE3380
+ 38860 00000000
+ 38861 a9a9 02 .byte 0x2
+ 38862 a9aa 7501 .value 0x175
+ 38863 a9ac 32 .uleb128 0x32
+ 38864 a9ad E90D0000 .long 0xde9
+ 38865 a9b1 03 .byte 0x3
+ 38866 a9b2 91 .byte 0x91
+ 38867 a9b3 904D .sleb128 -6512
+ 38868 a9b5 32 .uleb128 0x32
+ 38869 a9b6 DD0D0000 .long 0xddd
+ 38870 a9ba 03 .byte 0x3
+ 38871 a9bb 91 .byte 0x91
+ 38872 a9bc A04D .sleb128 -6496
+ 38873 a9be 00 .byte 0x0
+ 38874 a9bf 00 .byte 0x0
+ 38875 a9c0 00 .byte 0x0
+ 38876 a9c1 00 .byte 0x0
+ 38877 a9c2 00 .byte 0x0
+ 38878 a9c3 00 .byte 0x0
+ 38879 a9c4 31 .uleb128 0x31
+ 38880 a9c5 860E0000 .long 0xe86
+ 38881 a9c9 00000000 .quad .LBB3382
+ 38881 00000000
+ 38882 a9d1 00000000 .quad .LBE3382
+ 38882 00000000
+ 38883 a9d9 02 .byte 0x2
+ 38884 a9da 8907 .value 0x789
+ 38885 a9dc F3A90000 .long 0xa9f3
+ 38886 a9e0 32 .uleb128 0x32
+ 38887 a9e1 A10E0000 .long 0xea1
+ 38888 a9e5 03 .byte 0x3
+ 38889 a9e6 91 .byte 0x91
+ 38890 a9e7 B04D .sleb128 -6480
+ 38891 a9e9 32 .uleb128 0x32
+ 38892 a9ea 970E0000 .long 0xe97
+ 38893 a9ee 03 .byte 0x3
+ 38894 a9ef 91 .byte 0x91
+ 38895 a9f0 C04D .sleb128 -6464
+ 38896 a9f2 00 .byte 0x0
+ 38897 a9f3 31 .uleb128 0x31
+ 38898 a9f4 D50B0000 .long 0xbd5
+ 38899 a9f8 00000000 .quad .LBB3384
+ 38899 00000000
+ 38900 aa00 00000000 .quad .LBE3384
+ 38900 00000000
+ 38901 aa08 02 .byte 0x2
+ 38902 aa09 8A07 .value 0x78a
+ 38903 aa0b D6AE0000 .long 0xaed6
+ 38904 aa0f 32 .uleb128 0x32
+ 38905 aa10 F30B0000 .long 0xbf3
+ 38906 aa14 03 .byte 0x3
+ 38907 aa15 91 .byte 0x91
+ 38908 aa16 DC4D .sleb128 -6436
+
GAS LISTING /tmp/ccjbMjHD.s page 992
+
+
+ 38909 aa18 32 .uleb128 0x32
+ 38910 aa19 E70B0000 .long 0xbe7
+ 38911 aa1d 03 .byte 0x3
+ 38912 aa1e 91 .byte 0x91
+ 38913 aa1f E04D .sleb128 -6432
+ 38914 aa21 33 .uleb128 0x33
+ 38915 aa22 00000000 .quad .LBB3385
+ 38915 00000000
+ 38916 aa2a 00000000 .quad .LBE3385
+ 38916 00000000
+ 38917 aa32 34 .uleb128 0x34
+ 38918 aa33 FF0B0000 .long 0xbff
+ 38919 aa37 04 .byte 0x4
+ 38920 aa38 76 .byte 0x76
+ 38921 aa39 F0B07F .sleb128 -10128
+ 38922 aa3c 34 .uleb128 0x34
+ 38923 aa3d 0B0C0000 .long 0xc0b
+ 38924 aa41 04 .byte 0x4
+ 38925 aa42 76 .byte 0x76
+ 38926 aa43 E0B07F .sleb128 -10144
+ 38927 aa46 31 .uleb128 0x31
+ 38928 aa47 540C0000 .long 0xc54
+ 38929 aa4b 00000000 .quad .LBB3386
+ 38929 00000000
+ 38930 aa53 00000000 .quad .LBE3386
+ 38930 00000000
+ 38931 aa5b 02 .byte 0x2
+ 38932 aa5c 9106 .value 0x691
+ 38933 aa5e B2AA0000 .long 0xaab2
+ 38934 aa62 32 .uleb128 0x32
+ 38935 aa63 7E0C0000 .long 0xc7e
+ 38936 aa67 03 .byte 0x3
+ 38937 aa68 91 .byte 0x91
+ 38938 aa69 F84D .sleb128 -6408
+ 38939 aa6b 32 .uleb128 0x32
+ 38940 aa6c 720C0000 .long 0xc72
+ 38941 aa70 03 .byte 0x3
+ 38942 aa71 91 .byte 0x91
+ 38943 aa72 FC4D .sleb128 -6404
+ 38944 aa74 32 .uleb128 0x32
+ 38945 aa75 660C0000 .long 0xc66
+ 38946 aa79 03 .byte 0x3
+ 38947 aa7a 91 .byte 0x91
+ 38948 aa7b 804E .sleb128 -6400
+ 38949 aa7d 35 .uleb128 0x35
+ 38950 aa7e 8B0C0000 .long 0xc8b
+ 38951 aa82 00000000 .quad .LBB3388
+ 38951 00000000
+ 38952 aa8a 00000000 .quad .LBE3388
+ 38952 00000000
+ 38953 aa92 02 .byte 0x2
+ 38954 aa93 0702 .value 0x207
+ 38955 aa95 32 .uleb128 0x32
+ 38956 aa96 B40C0000 .long 0xcb4
+ 38957 aa9a 03 .byte 0x3
+ 38958 aa9b 91 .byte 0x91
+ 38959 aa9c 984E .sleb128 -6376
+
GAS LISTING /tmp/ccjbMjHD.s page 993
+
+
+ 38960 aa9e 32 .uleb128 0x32
+ 38961 aa9f A90C0000 .long 0xca9
+ 38962 aaa3 03 .byte 0x3
+ 38963 aaa4 91 .byte 0x91
+ 38964 aaa5 9C4E .sleb128 -6372
+ 38965 aaa7 32 .uleb128 0x32
+ 38966 aaa8 9D0C0000 .long 0xc9d
+ 38967 aaac 03 .byte 0x3
+ 38968 aaad 91 .byte 0x91
+ 38969 aaae A04E .sleb128 -6368
+ 38970 aab0 00 .byte 0x0
+ 38971 aab1 00 .byte 0x0
+ 38972 aab2 31 .uleb128 0x31
+ 38973 aab3 C10C0000 .long 0xcc1
+ 38974 aab7 00000000 .quad .LBB3390
+ 38974 00000000
+ 38975 aabf 00000000 .quad .LBE3390
+ 38975 00000000
+ 38976 aac7 02 .byte 0x2
+ 38977 aac8 9206 .value 0x692
+ 38978 aaca 3BAD0000 .long 0xad3b
+ 38979 aace 32 .uleb128 0x32
+ 38980 aacf D30C0000 .long 0xcd3
+ 38981 aad3 03 .byte 0x3
+ 38982 aad4 91 .byte 0x91
+ 38983 aad5 B04E .sleb128 -6352
+ 38984 aad7 35 .uleb128 0x35
+ 38985 aad8 E00C0000 .long 0xce0
+ 38986 aadc 00000000 .quad .LBB3392
+ 38986 00000000
+ 38987 aae4 00000000 .quad .LBE3392
+ 38987 00000000
+ 38988 aaec 02 .byte 0x2
+ 38989 aaed 7D03 .value 0x37d
+ 38990 aaef 32 .uleb128 0x32
+ 38991 aaf0 FE0C0000 .long 0xcfe
+ 38992 aaf4 03 .byte 0x3
+ 38993 aaf5 91 .byte 0x91
+ 38994 aaf6 C84E .sleb128 -6328
+ 38995 aaf8 32 .uleb128 0x32
+ 38996 aaf9 F20C0000 .long 0xcf2
+ 38997 aafd 03 .byte 0x3
+ 38998 aafe 91 .byte 0x91
+ 38999 aaff D04E .sleb128 -6320
+ 39000 ab01 33 .uleb128 0x33
+ 39001 ab02 00000000 .quad .LBB3393
+ 39001 00000000
+ 39002 ab0a 00000000 .quad .LBE3393
+ 39002 00000000
+ 39003 ab12 34 .uleb128 0x34
+ 39004 ab13 0A0D0000 .long 0xd0a
+ 39005 ab17 03 .byte 0x3
+ 39006 ab18 91 .byte 0x91
+ 39007 ab19 A04F .sleb128 -6240
+ 39008 ab1b 34 .uleb128 0x34
+ 39009 ab1c 150D0000 .long 0xd15
+ 39010 ab20 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 994
+
+
+ 39011 ab21 91 .byte 0x91
+ 39012 ab22 904F .sleb128 -6256
+ 39013 ab24 34 .uleb128 0x34
+ 39014 ab25 200D0000 .long 0xd20
+ 39015 ab29 03 .byte 0x3
+ 39016 ab2a 91 .byte 0x91
+ 39017 ab2b 804F .sleb128 -6272
+ 39018 ab2d 34 .uleb128 0x34
+ 39019 ab2e 2C0D0000 .long 0xd2c
+ 39020 ab32 03 .byte 0x3
+ 39021 ab33 91 .byte 0x91
+ 39022 ab34 F04E .sleb128 -6288
+ 39023 ab36 34 .uleb128 0x34
+ 39024 ab37 380D0000 .long 0xd38
+ 39025 ab3b 03 .byte 0x3
+ 39026 ab3c 91 .byte 0x91
+ 39027 ab3d EC4E .sleb128 -6292
+ 39028 ab3f 31 .uleb128 0x31
+ 39029 ab40 4F0D0000 .long 0xd4f
+ 39030 ab44 00000000 .quad .LBB3394
+ 39030 00000000
+ 39031 ab4c 00000000 .quad .LBE3394
+ 39031 00000000
+ 39032 ab54 02 .byte 0x2
+ 39033 ab55 5603 .value 0x356
+ 39034 ab57 6EAB0000 .long 0xab6e
+ 39035 ab5b 32 .uleb128 0x32
+ 39036 ab5c 6A0D0000 .long 0xd6a
+ 39037 ab60 03 .byte 0x3
+ 39038 ab61 91 .byte 0x91
+ 39039 ab62 B04F .sleb128 -6224
+ 39040 ab64 32 .uleb128 0x32
+ 39041 ab65 600D0000 .long 0xd60
+ 39042 ab69 03 .byte 0x3
+ 39043 ab6a 91 .byte 0x91
+ 39044 ab6b C04F .sleb128 -6208
+ 39045 ab6d 00 .byte 0x0
+ 39046 ab6e 31 .uleb128 0x31
+ 39047 ab6f 750D0000 .long 0xd75
+ 39048 ab73 00000000 .quad .LBB3396
+ 39048 00000000
+ 39049 ab7b 00000000 .quad .LBE3396
+ 39049 00000000
+ 39050 ab83 02 .byte 0x2
+ 39051 ab84 5903 .value 0x359
+ 39052 ab86 9DAB0000 .long 0xab9d
+ 39053 ab8a 32 .uleb128 0x32
+ 39054 ab8b 930D0000 .long 0xd93
+ 39055 ab8f 03 .byte 0x3
+ 39056 ab90 91 .byte 0x91
+ 39057 ab91 DC4F .sleb128 -6180
+ 39058 ab93 32 .uleb128 0x32
+ 39059 ab94 870D0000 .long 0xd87
+ 39060 ab98 03 .byte 0x3
+ 39061 ab99 91 .byte 0x91
+ 39062 ab9a E04F .sleb128 -6176
+ 39063 ab9c 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 995
+
+
+ 39064 ab9d 31 .uleb128 0x31
+ 39065 ab9e 4F0D0000 .long 0xd4f
+ 39066 aba2 00000000 .quad .LBB3398
+ 39066 00000000
+ 39067 abaa 00000000 .quad .LBE3398
+ 39067 00000000
+ 39068 abb2 02 .byte 0x2
+ 39069 abb3 5B03 .value 0x35b
+ 39070 abb5 CCAB0000 .long 0xabcc
+ 39071 abb9 32 .uleb128 0x32
+ 39072 abba 6A0D0000 .long 0xd6a
+ 39073 abbe 03 .byte 0x3
+ 39074 abbf 91 .byte 0x91
+ 39075 abc0 F04F .sleb128 -6160
+ 39076 abc2 32 .uleb128 0x32
+ 39077 abc3 600D0000 .long 0xd60
+ 39078 abc7 03 .byte 0x3
+ 39079 abc8 91 .byte 0x91
+ 39080 abc9 8050 .sleb128 -6144
+ 39081 abcb 00 .byte 0x0
+ 39082 abcc 31 .uleb128 0x31
+ 39083 abcd A00D0000 .long 0xda0
+ 39084 abd1 00000000 .quad .LBB3400
+ 39084 00000000
+ 39085 abd9 00000000 .quad .LBE3400
+ 39085 00000000
+ 39086 abe1 02 .byte 0x2
+ 39087 abe2 6403 .value 0x364
+ 39088 abe4 26AC0000 .long 0xac26
+ 39089 abe8 32 .uleb128 0x32
+ 39090 abe9 BE0D0000 .long 0xdbe
+ 39091 abed 03 .byte 0x3
+ 39092 abee 91 .byte 0x91
+ 39093 abef 9050 .sleb128 -6128
+ 39094 abf1 32 .uleb128 0x32
+ 39095 abf2 B20D0000 .long 0xdb2
+ 39096 abf6 03 .byte 0x3
+ 39097 abf7 91 .byte 0x91
+ 39098 abf8 A050 .sleb128 -6112
+ 39099 abfa 35 .uleb128 0x35
+ 39100 abfb CB0D0000 .long 0xdcb
+ 39101 abff 00000000 .quad .LBB3402
+ 39101 00000000
+ 39102 ac07 00000000 .quad .LBE3402
+ 39102 00000000
+ 39103 ac0f 02 .byte 0x2
+ 39104 ac10 7501 .value 0x175
+ 39105 ac12 32 .uleb128 0x32
+ 39106 ac13 E90D0000 .long 0xde9
+ 39107 ac17 03 .byte 0x3
+ 39108 ac18 91 .byte 0x91
+ 39109 ac19 B050 .sleb128 -6096
+ 39110 ac1b 32 .uleb128 0x32
+ 39111 ac1c DD0D0000 .long 0xddd
+ 39112 ac20 03 .byte 0x3
+ 39113 ac21 91 .byte 0x91
+ 39114 ac22 C050 .sleb128 -6080
+
GAS LISTING /tmp/ccjbMjHD.s page 996
+
+
+ 39115 ac24 00 .byte 0x0
+ 39116 ac25 00 .byte 0x0
+ 39117 ac26 31 .uleb128 0x31
+ 39118 ac27 FB0D0000 .long 0xdfb
+ 39119 ac2b 00000000 .quad .LBB3404
+ 39119 00000000
+ 39120 ac33 00000000 .quad .LBE3404
+ 39120 00000000
+ 39121 ac3b 02 .byte 0x2
+ 39122 ac3c 6603 .value 0x366
+ 39123 ac3e 55AC0000 .long 0xac55
+ 39124 ac42 32 .uleb128 0x32
+ 39125 ac43 160E0000 .long 0xe16
+ 39126 ac47 03 .byte 0x3
+ 39127 ac48 91 .byte 0x91
+ 39128 ac49 D050 .sleb128 -6064
+ 39129 ac4b 32 .uleb128 0x32
+ 39130 ac4c 0C0E0000 .long 0xe0c
+ 39131 ac50 03 .byte 0x3
+ 39132 ac51 91 .byte 0x91
+ 39133 ac52 E050 .sleb128 -6048
+ 39134 ac54 00 .byte 0x0
+ 39135 ac55 31 .uleb128 0x31
+ 39136 ac56 A00D0000 .long 0xda0
+ 39137 ac5a 00000000 .quad .LBB3406
+ 39137 00000000
+ 39138 ac62 00000000 .quad .LBE3406
+ 39138 00000000
+ 39139 ac6a 02 .byte 0x2
+ 39140 ac6b 6803 .value 0x368
+ 39141 ac6d AFAC0000 .long 0xacaf
+ 39142 ac71 32 .uleb128 0x32
+ 39143 ac72 BE0D0000 .long 0xdbe
+ 39144 ac76 03 .byte 0x3
+ 39145 ac77 91 .byte 0x91
+ 39146 ac78 F050 .sleb128 -6032
+ 39147 ac7a 32 .uleb128 0x32
+ 39148 ac7b B20D0000 .long 0xdb2
+ 39149 ac7f 03 .byte 0x3
+ 39150 ac80 91 .byte 0x91
+ 39151 ac81 8051 .sleb128 -6016
+ 39152 ac83 35 .uleb128 0x35
+ 39153 ac84 CB0D0000 .long 0xdcb
+ 39154 ac88 00000000 .quad .LBB3408
+ 39154 00000000
+ 39155 ac90 00000000 .quad .LBE3408
+ 39155 00000000
+ 39156 ac98 02 .byte 0x2
+ 39157 ac99 7501 .value 0x175
+ 39158 ac9b 32 .uleb128 0x32
+ 39159 ac9c E90D0000 .long 0xde9
+ 39160 aca0 03 .byte 0x3
+ 39161 aca1 91 .byte 0x91
+ 39162 aca2 9051 .sleb128 -6000
+ 39163 aca4 32 .uleb128 0x32
+ 39164 aca5 DD0D0000 .long 0xddd
+ 39165 aca9 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 997
+
+
+ 39166 acaa 91 .byte 0x91
+ 39167 acab A051 .sleb128 -5984
+ 39168 acad 00 .byte 0x0
+ 39169 acae 00 .byte 0x0
+ 39170 acaf 31 .uleb128 0x31
+ 39171 acb0 FB0D0000 .long 0xdfb
+ 39172 acb4 00000000 .quad .LBB3410
+ 39172 00000000
+ 39173 acbc 00000000 .quad .LBE3410
+ 39173 00000000
+ 39174 acc4 02 .byte 0x2
+ 39175 acc5 6A03 .value 0x36a
+ 39176 acc7 DEAC0000 .long 0xacde
+ 39177 accb 32 .uleb128 0x32
+ 39178 accc 160E0000 .long 0xe16
+ 39179 acd0 03 .byte 0x3
+ 39180 acd1 91 .byte 0x91
+ 39181 acd2 B051 .sleb128 -5968
+ 39182 acd4 32 .uleb128 0x32
+ 39183 acd5 0C0E0000 .long 0xe0c
+ 39184 acd9 03 .byte 0x3
+ 39185 acda 91 .byte 0x91
+ 39186 acdb C051 .sleb128 -5952
+ 39187 acdd 00 .byte 0x0
+ 39188 acde 31 .uleb128 0x31
+ 39189 acdf 210E0000 .long 0xe21
+ 39190 ace3 00000000 .quad .LBB3412
+ 39190 00000000
+ 39191 aceb 00000000 .quad .LBE3412
+ 39191 00000000
+ 39192 acf3 02 .byte 0x2
+ 39193 acf4 6C03 .value 0x36c
+ 39194 acf6 0DAD0000 .long 0xad0d
+ 39195 acfa 32 .uleb128 0x32
+ 39196 acfb 3E0E0000 .long 0xe3e
+ 39197 acff 03 .byte 0x3
+ 39198 ad00 91 .byte 0x91
+ 39199 ad01 D051 .sleb128 -5936
+ 39200 ad03 32 .uleb128 0x32
+ 39201 ad04 330E0000 .long 0xe33
+ 39202 ad08 03 .byte 0x3
+ 39203 ad09 91 .byte 0x91
+ 39204 ad0a E051 .sleb128 -5920
+ 39205 ad0c 00 .byte 0x0
+ 39206 ad0d 35 .uleb128 0x35
+ 39207 ad0e 4F0D0000 .long 0xd4f
+ 39208 ad12 00000000 .quad .LBB3414
+ 39208 00000000
+ 39209 ad1a 00000000 .quad .LBE3414
+ 39209 00000000
+ 39210 ad22 02 .byte 0x2
+ 39211 ad23 6E03 .value 0x36e
+ 39212 ad25 32 .uleb128 0x32
+ 39213 ad26 6A0D0000 .long 0xd6a
+ 39214 ad2a 03 .byte 0x3
+ 39215 ad2b 91 .byte 0x91
+ 39216 ad2c F051 .sleb128 -5904
+
GAS LISTING /tmp/ccjbMjHD.s page 998
+
+
+ 39217 ad2e 32 .uleb128 0x32
+ 39218 ad2f 600D0000 .long 0xd60
+ 39219 ad33 03 .byte 0x3
+ 39220 ad34 91 .byte 0x91
+ 39221 ad35 8052 .sleb128 -5888
+ 39222 ad37 00 .byte 0x0
+ 39223 ad38 00 .byte 0x0
+ 39224 ad39 00 .byte 0x0
+ 39225 ad3a 00 .byte 0x0
+ 39226 ad3b 36 .uleb128 0x36
+ 39227 ad3c 00000000 .quad .LBB3416
+ 39227 00000000
+ 39228 ad44 00000000 .quad .LBE3416
+ 39228 00000000
+ 39229 ad4c 5BAD0000 .long 0xad5b
+ 39230 ad50 34 .uleb128 0x34
+ 39231 ad51 1C0C0000 .long 0xc1c
+ 39232 ad55 04 .byte 0x4
+ 39233 ad56 91 .byte 0x91
+ 39234 ad57 80B57F .sleb128 -9600
+ 39235 ad5a 00 .byte 0x0
+ 39236 ad5b 31 .uleb128 0x31
+ 39237 ad5c 4A0E0000 .long 0xe4a
+ 39238 ad60 00000000 .quad .LBB3417
+ 39238 00000000
+ 39239 ad68 00000000 .quad .LBE3417
+ 39239 00000000
+ 39240 ad70 02 .byte 0x2
+ 39241 ad71 9406 .value 0x694
+ 39242 ad73 F8AD0000 .long 0xadf8
+ 39243 ad77 32 .uleb128 0x32
+ 39244 ad78 5C0E0000 .long 0xe5c
+ 39245 ad7c 03 .byte 0x3
+ 39246 ad7d 91 .byte 0x91
+ 39247 ad7e 9052 .sleb128 -5872
+ 39248 ad80 33 .uleb128 0x33
+ 39249 ad81 00000000 .quad .LBB3418
+ 39249 00000000
+ 39250 ad89 00000000 .quad .LBE3418
+ 39250 00000000
+ 39251 ad91 34 .uleb128 0x34
+ 39252 ad92 680E0000 .long 0xe68
+ 39253 ad96 09 .byte 0x9
+ 39254 ad97 03 .byte 0x3
+ 39255 ad98 00000000 .quad ShiftRowTable.7385
+ 39255 00000000
+ 39256 ada0 35 .uleb128 0x35
+ 39257 ada1 A00D0000 .long 0xda0
+ 39258 ada5 00000000 .quad .LBB3419
+ 39258 00000000
+ 39259 adad 00000000 .quad .LBE3419
+ 39259 00000000
+ 39260 adb5 02 .byte 0x2
+ 39261 adb6 9B02 .value 0x29b
+ 39262 adb8 32 .uleb128 0x32
+ 39263 adb9 BE0D0000 .long 0xdbe
+ 39264 adbd 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 999
+
+
+ 39265 adbe 91 .byte 0x91
+ 39266 adbf A052 .sleb128 -5856
+ 39267 adc1 32 .uleb128 0x32
+ 39268 adc2 B20D0000 .long 0xdb2
+ 39269 adc6 03 .byte 0x3
+ 39270 adc7 91 .byte 0x91
+ 39271 adc8 B052 .sleb128 -5840
+ 39272 adca 35 .uleb128 0x35
+ 39273 adcb CB0D0000 .long 0xdcb
+ 39274 adcf 00000000 .quad .LBB3421
+ 39274 00000000
+ 39275 add7 00000000 .quad .LBE3421
+ 39275 00000000
+ 39276 addf 02 .byte 0x2
+ 39277 ade0 7501 .value 0x175
+ 39278 ade2 32 .uleb128 0x32
+ 39279 ade3 E90D0000 .long 0xde9
+ 39280 ade7 03 .byte 0x3
+ 39281 ade8 91 .byte 0x91
+ 39282 ade9 C052 .sleb128 -5824
+ 39283 adeb 32 .uleb128 0x32
+ 39284 adec DD0D0000 .long 0xddd
+ 39285 adf0 03 .byte 0x3
+ 39286 adf1 91 .byte 0x91
+ 39287 adf2 D052 .sleb128 -5808
+ 39288 adf4 00 .byte 0x0
+ 39289 adf5 00 .byte 0x0
+ 39290 adf6 00 .byte 0x0
+ 39291 adf7 00 .byte 0x0
+ 39292 adf8 36 .uleb128 0x36
+ 39293 adf9 00000000 .quad .LBB3423
+ 39293 00000000
+ 39294 ae01 00000000 .quad .LBE3423
+ 39294 00000000
+ 39295 ae09 18AE0000 .long 0xae18
+ 39296 ae0d 34 .uleb128 0x34
+ 39297 ae0e 2C0C0000 .long 0xc2c
+ 39298 ae12 04 .byte 0x4
+ 39299 ae13 91 .byte 0x91
+ 39300 ae14 F0B47F .sleb128 -9616
+ 39301 ae17 00 .byte 0x0
+ 39302 ae18 31 .uleb128 0x31
+ 39303 ae19 860E0000 .long 0xe86
+ 39304 ae1d 00000000 .quad .LBB3424
+ 39304 00000000
+ 39305 ae25 00000000 .quad .LBE3424
+ 39305 00000000
+ 39306 ae2d 02 .byte 0x2
+ 39307 ae2e 9606 .value 0x696
+ 39308 ae30 47AE0000 .long 0xae47
+ 39309 ae34 32 .uleb128 0x32
+ 39310 ae35 A10E0000 .long 0xea1
+ 39311 ae39 03 .byte 0x3
+ 39312 ae3a 91 .byte 0x91
+ 39313 ae3b E052 .sleb128 -5792
+ 39314 ae3d 32 .uleb128 0x32
+ 39315 ae3e 970E0000 .long 0xe97
+
GAS LISTING /tmp/ccjbMjHD.s page 1000
+
+
+ 39316 ae42 03 .byte 0x3
+ 39317 ae43 91 .byte 0x91
+ 39318 ae44 F052 .sleb128 -5776
+ 39319 ae46 00 .byte 0x0
+ 39320 ae47 36 .uleb128 0x36
+ 39321 ae48 00000000 .quad .LBB3426
+ 39321 00000000
+ 39322 ae50 00000000 .quad .LBE3426
+ 39322 00000000
+ 39323 ae58 67AE0000 .long 0xae67
+ 39324 ae5c 34 .uleb128 0x34
+ 39325 ae5d 3C0C0000 .long 0xc3c
+ 39326 ae61 04 .byte 0x4
+ 39327 ae62 91 .byte 0x91
+ 39328 ae63 E0B47F .sleb128 -9632
+ 39329 ae66 00 .byte 0x0
+ 39330 ae67 31 .uleb128 0x31
+ 39331 ae68 AC0E0000 .long 0xeac
+ 39332 ae6c 00000000 .quad .LBB3427
+ 39332 00000000
+ 39333 ae74 00000000 .quad .LBE3427
+ 39333 00000000
+ 39334 ae7c 02 .byte 0x2
+ 39335 ae7d 9806 .value 0x698
+ 39336 ae7f B8AE0000 .long 0xaeb8
+ 39337 ae83 32 .uleb128 0x32
+ 39338 ae84 BE0E0000 .long 0xebe
+ 39339 ae88 03 .byte 0x3
+ 39340 ae89 91 .byte 0x91
+ 39341 ae8a 8053 .sleb128 -5760
+ 39342 ae8c 35 .uleb128 0x35
+ 39343 ae8d CB0E0000 .long 0xecb
+ 39344 ae91 00000000 .quad .LBB3429
+ 39344 00000000
+ 39345 ae99 00000000 .quad .LBE3429
+ 39345 00000000
+ 39346 aea1 02 .byte 0x2
+ 39347 aea2 4905 .value 0x549
+ 39348 aea4 32 .uleb128 0x32
+ 39349 aea5 E90E0000 .long 0xee9
+ 39350 aea9 03 .byte 0x3
+ 39351 aeaa 91 .byte 0x91
+ 39352 aeab 9C53 .sleb128 -5732
+ 39353 aead 32 .uleb128 0x32
+ 39354 aeae DD0E0000 .long 0xedd
+ 39355 aeb2 03 .byte 0x3
+ 39356 aeb3 91 .byte 0x91
+ 39357 aeb4 A053 .sleb128 -5728
+ 39358 aeb6 00 .byte 0x0
+ 39359 aeb7 00 .byte 0x0
+ 39360 aeb8 33 .uleb128 0x33
+ 39361 aeb9 00000000 .quad .LBB3431
+ 39361 00000000
+ 39362 aec1 00000000 .quad .LBE3431
+ 39362 00000000
+ 39363 aec9 34 .uleb128 0x34
+ 39364 aeca 480C0000 .long 0xc48
+
GAS LISTING /tmp/ccjbMjHD.s page 1001
+
+
+ 39365 aece 04 .byte 0x4
+ 39366 aecf 91 .byte 0x91
+ 39367 aed0 D0B47F .sleb128 -9648
+ 39368 aed3 00 .byte 0x0
+ 39369 aed4 00 .byte 0x0
+ 39370 aed5 00 .byte 0x0
+ 39371 aed6 31 .uleb128 0x31
+ 39372 aed7 F60E0000 .long 0xef6
+ 39373 aedb 00000000 .quad .LBB3432
+ 39373 00000000
+ 39374 aee3 00000000 .quad .LBE3432
+ 39374 00000000
+ 39375 aeeb 02 .byte 0x2
+ 39376 aeec 8A07 .value 0x78a
+ 39377 aeee EBB00000 .long 0xb0eb
+ 39378 aef2 32 .uleb128 0x32
+ 39379 aef3 080F0000 .long 0xf08
+ 39380 aef7 03 .byte 0x3
+ 39381 aef8 91 .byte 0x91
+ 39382 aef9 B053 .sleb128 -5712
+ 39383 aefb 33 .uleb128 0x33
+ 39384 aefc 00000000 .quad .LBB3433
+ 39384 00000000
+ 39385 af04 00000000 .quad .LBE3433
+ 39385 00000000
+ 39386 af0c 34 .uleb128 0x34
+ 39387 af0d 140F0000 .long 0xf14
+ 39388 af11 04 .byte 0x4
+ 39389 af12 76 .byte 0x76
+ 39390 af13 80B17F .sleb128 -10112
+ 39391 af16 31 .uleb128 0x31
+ 39392 af17 210F0000 .long 0xf21
+ 39393 af1b 00000000 .quad .LBB3434
+ 39393 00000000
+ 39394 af23 00000000 .quad .LBE3434
+ 39394 00000000
+ 39395 af2b 02 .byte 0x2
+ 39396 af2c 1F06 .value 0x61f
+ 39397 af2e B3AF0000 .long 0xafb3
+ 39398 af32 32 .uleb128 0x32
+ 39399 af33 330F0000 .long 0xf33
+ 39400 af37 03 .byte 0x3
+ 39401 af38 91 .byte 0x91
+ 39402 af39 C053 .sleb128 -5696
+ 39403 af3b 33 .uleb128 0x33
+ 39404 af3c 00000000 .quad .LBB3435
+ 39404 00000000
+ 39405 af44 00000000 .quad .LBE3435
+ 39405 00000000
+ 39406 af4c 34 .uleb128 0x34
+ 39407 af4d 3F0F0000 .long 0xf3f
+ 39408 af51 09 .byte 0x9
+ 39409 af52 03 .byte 0x3
+ 39410 af53 00000000 .quad mask.7943
+ 39410 00000000
+ 39411 af5b 35 .uleb128 0x35
+ 39412 af5c A00D0000 .long 0xda0
+
GAS LISTING /tmp/ccjbMjHD.s page 1002
+
+
+ 39413 af60 00000000 .quad .LBB3436
+ 39413 00000000
+ 39414 af68 00000000 .quad .LBE3436
+ 39414 00000000
+ 39415 af70 02 .byte 0x2
+ 39416 af71 FE04 .value 0x4fe
+ 39417 af73 32 .uleb128 0x32
+ 39418 af74 BE0D0000 .long 0xdbe
+ 39419 af78 03 .byte 0x3
+ 39420 af79 91 .byte 0x91
+ 39421 af7a D053 .sleb128 -5680
+ 39422 af7c 32 .uleb128 0x32
+ 39423 af7d B20D0000 .long 0xdb2
+ 39424 af81 03 .byte 0x3
+ 39425 af82 91 .byte 0x91
+ 39426 af83 E053 .sleb128 -5664
+ 39427 af85 35 .uleb128 0x35
+ 39428 af86 CB0D0000 .long 0xdcb
+ 39429 af8a 00000000 .quad .LBB3438
+ 39429 00000000
+ 39430 af92 00000000 .quad .LBE3438
+ 39430 00000000
+ 39431 af9a 02 .byte 0x2
+ 39432 af9b 7501 .value 0x175
+ 39433 af9d 32 .uleb128 0x32
+ 39434 af9e E90D0000 .long 0xde9
+ 39435 afa2 03 .byte 0x3
+ 39436 afa3 91 .byte 0x91
+ 39437 afa4 F053 .sleb128 -5648
+ 39438 afa6 32 .uleb128 0x32
+ 39439 afa7 DD0D0000 .long 0xddd
+ 39440 afab 03 .byte 0x3
+ 39441 afac 91 .byte 0x91
+ 39442 afad 8054 .sleb128 -5632
+ 39443 afaf 00 .byte 0x0
+ 39444 afb0 00 .byte 0x0
+ 39445 afb1 00 .byte 0x0
+ 39446 afb2 00 .byte 0x0
+ 39447 afb3 31 .uleb128 0x31
+ 39448 afb4 210F0000 .long 0xf21
+ 39449 afb8 00000000 .quad .LBB3440
+ 39449 00000000
+ 39450 afc0 00000000 .quad .LBE3440
+ 39450 00000000
+ 39451 afc8 02 .byte 0x2
+ 39452 afc9 2006 .value 0x620
+ 39453 afcb 50B00000 .long 0xb050
+ 39454 afcf 32 .uleb128 0x32
+ 39455 afd0 330F0000 .long 0xf33
+ 39456 afd4 03 .byte 0x3
+ 39457 afd5 91 .byte 0x91
+ 39458 afd6 9054 .sleb128 -5616
+ 39459 afd8 33 .uleb128 0x33
+ 39460 afd9 00000000 .quad .LBB3441
+ 39460 00000000
+ 39461 afe1 00000000 .quad .LBE3441
+ 39461 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1003
+
+
+ 39462 afe9 34 .uleb128 0x34
+ 39463 afea 3F0F0000 .long 0xf3f
+ 39464 afee 09 .byte 0x9
+ 39465 afef 03 .byte 0x3
+ 39466 aff0 00000000 .quad mask.7943
+ 39466 00000000
+ 39467 aff8 35 .uleb128 0x35
+ 39468 aff9 A00D0000 .long 0xda0
+ 39469 affd 00000000 .quad .LBB3442
+ 39469 00000000
+ 39470 b005 00000000 .quad .LBE3442
+ 39470 00000000
+ 39471 b00d 02 .byte 0x2
+ 39472 b00e FE04 .value 0x4fe
+ 39473 b010 32 .uleb128 0x32
+ 39474 b011 BE0D0000 .long 0xdbe
+ 39475 b015 03 .byte 0x3
+ 39476 b016 91 .byte 0x91
+ 39477 b017 A054 .sleb128 -5600
+ 39478 b019 32 .uleb128 0x32
+ 39479 b01a B20D0000 .long 0xdb2
+ 39480 b01e 03 .byte 0x3
+ 39481 b01f 91 .byte 0x91
+ 39482 b020 B054 .sleb128 -5584
+ 39483 b022 35 .uleb128 0x35
+ 39484 b023 CB0D0000 .long 0xdcb
+ 39485 b027 00000000 .quad .LBB3444
+ 39485 00000000
+ 39486 b02f 00000000 .quad .LBE3444
+ 39486 00000000
+ 39487 b037 02 .byte 0x2
+ 39488 b038 7501 .value 0x175
+ 39489 b03a 32 .uleb128 0x32
+ 39490 b03b E90D0000 .long 0xde9
+ 39491 b03f 03 .byte 0x3
+ 39492 b040 91 .byte 0x91
+ 39493 b041 C054 .sleb128 -5568
+ 39494 b043 32 .uleb128 0x32
+ 39495 b044 DD0D0000 .long 0xddd
+ 39496 b048 03 .byte 0x3
+ 39497 b049 91 .byte 0x91
+ 39498 b04a D054 .sleb128 -5552
+ 39499 b04c 00 .byte 0x0
+ 39500 b04d 00 .byte 0x0
+ 39501 b04e 00 .byte 0x0
+ 39502 b04f 00 .byte 0x0
+ 39503 b050 35 .uleb128 0x35
+ 39504 b051 210F0000 .long 0xf21
+ 39505 b055 00000000 .quad .LBB3446
+ 39505 00000000
+ 39506 b05d 00000000 .quad .LBE3446
+ 39506 00000000
+ 39507 b065 02 .byte 0x2
+ 39508 b066 2106 .value 0x621
+ 39509 b068 32 .uleb128 0x32
+ 39510 b069 330F0000 .long 0xf33
+ 39511 b06d 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1004
+
+
+ 39512 b06e 91 .byte 0x91
+ 39513 b06f E054 .sleb128 -5536
+ 39514 b071 33 .uleb128 0x33
+ 39515 b072 00000000 .quad .LBB3447
+ 39515 00000000
+ 39516 b07a 00000000 .quad .LBE3447
+ 39516 00000000
+ 39517 b082 34 .uleb128 0x34
+ 39518 b083 3F0F0000 .long 0xf3f
+ 39519 b087 09 .byte 0x9
+ 39520 b088 03 .byte 0x3
+ 39521 b089 00000000 .quad mask.7943
+ 39521 00000000
+ 39522 b091 35 .uleb128 0x35
+ 39523 b092 A00D0000 .long 0xda0
+ 39524 b096 00000000 .quad .LBB3448
+ 39524 00000000
+ 39525 b09e 00000000 .quad .LBE3448
+ 39525 00000000
+ 39526 b0a6 02 .byte 0x2
+ 39527 b0a7 FE04 .value 0x4fe
+ 39528 b0a9 32 .uleb128 0x32
+ 39529 b0aa BE0D0000 .long 0xdbe
+ 39530 b0ae 03 .byte 0x3
+ 39531 b0af 91 .byte 0x91
+ 39532 b0b0 F054 .sleb128 -5520
+ 39533 b0b2 32 .uleb128 0x32
+ 39534 b0b3 B20D0000 .long 0xdb2
+ 39535 b0b7 03 .byte 0x3
+ 39536 b0b8 91 .byte 0x91
+ 39537 b0b9 8055 .sleb128 -5504
+ 39538 b0bb 35 .uleb128 0x35
+ 39539 b0bc CB0D0000 .long 0xdcb
+ 39540 b0c0 00000000 .quad .LBB3450
+ 39540 00000000
+ 39541 b0c8 00000000 .quad .LBE3450
+ 39541 00000000
+ 39542 b0d0 02 .byte 0x2
+ 39543 b0d1 7501 .value 0x175
+ 39544 b0d3 32 .uleb128 0x32
+ 39545 b0d4 E90D0000 .long 0xde9
+ 39546 b0d8 03 .byte 0x3
+ 39547 b0d9 91 .byte 0x91
+ 39548 b0da 9055 .sleb128 -5488
+ 39549 b0dc 32 .uleb128 0x32
+ 39550 b0dd DD0D0000 .long 0xddd
+ 39551 b0e1 03 .byte 0x3
+ 39552 b0e2 91 .byte 0x91
+ 39553 b0e3 A055 .sleb128 -5472
+ 39554 b0e5 00 .byte 0x0
+ 39555 b0e6 00 .byte 0x0
+ 39556 b0e7 00 .byte 0x0
+ 39557 b0e8 00 .byte 0x0
+ 39558 b0e9 00 .byte 0x0
+ 39559 b0ea 00 .byte 0x0
+ 39560 b0eb 31 .uleb128 0x31
+ 39561 b0ec 860E0000 .long 0xe86
+
GAS LISTING /tmp/ccjbMjHD.s page 1005
+
+
+ 39562 b0f0 00000000 .quad .LBB3452
+ 39562 00000000
+ 39563 b0f8 00000000 .quad .LBE3452
+ 39563 00000000
+ 39564 b100 02 .byte 0x2
+ 39565 b101 8A07 .value 0x78a
+ 39566 b103 1AB10000 .long 0xb11a
+ 39567 b107 32 .uleb128 0x32
+ 39568 b108 A10E0000 .long 0xea1
+ 39569 b10c 03 .byte 0x3
+ 39570 b10d 91 .byte 0x91
+ 39571 b10e B055 .sleb128 -5456
+ 39572 b110 32 .uleb128 0x32
+ 39573 b111 970E0000 .long 0xe97
+ 39574 b115 03 .byte 0x3
+ 39575 b116 91 .byte 0x91
+ 39576 b117 C055 .sleb128 -5440
+ 39577 b119 00 .byte 0x0
+ 39578 b11a 31 .uleb128 0x31
+ 39579 b11b 8F940000 .long 0x948f
+ 39580 b11f 00000000 .quad .LBB3454
+ 39580 00000000
+ 39581 b127 00000000 .quad .LBE3454
+ 39581 00000000
+ 39582 b12f 02 .byte 0x2
+ 39583 b130 8B07 .value 0x78b
+ 39584 b132 ACB10000 .long 0xb1ac
+ 39585 b136 32 .uleb128 0x32
+ 39586 b137 A1940000 .long 0x94a1
+ 39587 b13b 03 .byte 0x3
+ 39588 b13c 91 .byte 0x91
+ 39589 b13d D055 .sleb128 -5424
+ 39590 b13f 33 .uleb128 0x33
+ 39591 b140 00000000 .quad .LBB3455
+ 39591 00000000
+ 39592 b148 00000000 .quad .LBE3455
+ 39592 00000000
+ 39593 b150 34 .uleb128 0x34
+ 39594 b151 AD940000 .long 0x94ad
+ 39595 b155 04 .byte 0x4
+ 39596 b156 91 .byte 0x91
+ 39597 b157 A0B57F .sleb128 -9568
+ 39598 b15a 34 .uleb128 0x34
+ 39599 b15b B7940000 .long 0x94b7
+ 39600 b15f 03 .byte 0x3
+ 39601 b160 91 .byte 0x91
+ 39602 b161 E455 .sleb128 -5404
+ 39603 b163 35 .uleb128 0x35
+ 39604 b164 BE560000 .long 0x56be
+ 39605 b168 00000000 .quad .LBB3456
+ 39605 00000000
+ 39606 b170 00000000 .quad .LBE3456
+ 39606 00000000
+ 39607 b178 02 .byte 0x2
+ 39608 b179 7906 .value 0x679
+ 39609 b17b 32 .uleb128 0x32
+ 39610 b17c D0560000 .long 0x56d0
+
GAS LISTING /tmp/ccjbMjHD.s page 1006
+
+
+ 39611 b180 03 .byte 0x3
+ 39612 b181 91 .byte 0x91
+ 39613 b182 E855 .sleb128 -5400
+ 39614 b184 33 .uleb128 0x33
+ 39615 b185 00000000 .quad .LBB3457
+ 39615 00000000
+ 39616 b18d 00000000 .quad .LBE3457
+ 39616 00000000
+ 39617 b195 34 .uleb128 0x34
+ 39618 b196 DA560000 .long 0x56da
+ 39619 b19a 04 .byte 0x4
+ 39620 b19b 91 .byte 0x91
+ 39621 b19c 90B57F .sleb128 -9584
+ 39622 b19f 34 .uleb128 0x34
+ 39623 b1a0 E6560000 .long 0x56e6
+ 39624 b1a4 03 .byte 0x3
+ 39625 b1a5 91 .byte 0x91
+ 39626 b1a6 EC55 .sleb128 -5396
+ 39627 b1a8 00 .byte 0x0
+ 39628 b1a9 00 .byte 0x0
+ 39629 b1aa 00 .byte 0x0
+ 39630 b1ab 00 .byte 0x0
+ 39631 b1ac 31 .uleb128 0x31
+ 39632 b1ad F60E0000 .long 0xef6
+ 39633 b1b1 00000000 .quad .LBB3458
+ 39633 00000000
+ 39634 b1b9 00000000 .quad .LBE3458
+ 39634 00000000
+ 39635 b1c1 02 .byte 0x2
+ 39636 b1c2 8B07 .value 0x78b
+ 39637 b1c4 C1B30000 .long 0xb3c1
+ 39638 b1c8 32 .uleb128 0x32
+ 39639 b1c9 080F0000 .long 0xf08
+ 39640 b1cd 03 .byte 0x3
+ 39641 b1ce 91 .byte 0x91
+ 39642 b1cf F055 .sleb128 -5392
+ 39643 b1d1 33 .uleb128 0x33
+ 39644 b1d2 00000000 .quad .LBB3459
+ 39644 00000000
+ 39645 b1da 00000000 .quad .LBE3459
+ 39645 00000000
+ 39646 b1e2 34 .uleb128 0x34
+ 39647 b1e3 140F0000 .long 0xf14
+ 39648 b1e7 04 .byte 0x4
+ 39649 b1e8 76 .byte 0x76
+ 39650 b1e9 90B17F .sleb128 -10096
+ 39651 b1ec 31 .uleb128 0x31
+ 39652 b1ed 210F0000 .long 0xf21
+ 39653 b1f1 00000000 .quad .LBB3460
+ 39653 00000000
+ 39654 b1f9 00000000 .quad .LBE3460
+ 39654 00000000
+ 39655 b201 02 .byte 0x2
+ 39656 b202 1F06 .value 0x61f
+ 39657 b204 89B20000 .long 0xb289
+ 39658 b208 32 .uleb128 0x32
+ 39659 b209 330F0000 .long 0xf33
+
GAS LISTING /tmp/ccjbMjHD.s page 1007
+
+
+ 39660 b20d 03 .byte 0x3
+ 39661 b20e 91 .byte 0x91
+ 39662 b20f 8056 .sleb128 -5376
+ 39663 b211 33 .uleb128 0x33
+ 39664 b212 00000000 .quad .LBB3461
+ 39664 00000000
+ 39665 b21a 00000000 .quad .LBE3461
+ 39665 00000000
+ 39666 b222 34 .uleb128 0x34
+ 39667 b223 3F0F0000 .long 0xf3f
+ 39668 b227 09 .byte 0x9
+ 39669 b228 03 .byte 0x3
+ 39670 b229 00000000 .quad mask.7943
+ 39670 00000000
+ 39671 b231 35 .uleb128 0x35
+ 39672 b232 A00D0000 .long 0xda0
+ 39673 b236 00000000 .quad .LBB3462
+ 39673 00000000
+ 39674 b23e 00000000 .quad .LBE3462
+ 39674 00000000
+ 39675 b246 02 .byte 0x2
+ 39676 b247 FE04 .value 0x4fe
+ 39677 b249 32 .uleb128 0x32
+ 39678 b24a BE0D0000 .long 0xdbe
+ 39679 b24e 03 .byte 0x3
+ 39680 b24f 91 .byte 0x91
+ 39681 b250 9056 .sleb128 -5360
+ 39682 b252 32 .uleb128 0x32
+ 39683 b253 B20D0000 .long 0xdb2
+ 39684 b257 03 .byte 0x3
+ 39685 b258 91 .byte 0x91
+ 39686 b259 A056 .sleb128 -5344
+ 39687 b25b 35 .uleb128 0x35
+ 39688 b25c CB0D0000 .long 0xdcb
+ 39689 b260 00000000 .quad .LBB3464
+ 39689 00000000
+ 39690 b268 00000000 .quad .LBE3464
+ 39690 00000000
+ 39691 b270 02 .byte 0x2
+ 39692 b271 7501 .value 0x175
+ 39693 b273 32 .uleb128 0x32
+ 39694 b274 E90D0000 .long 0xde9
+ 39695 b278 03 .byte 0x3
+ 39696 b279 91 .byte 0x91
+ 39697 b27a B056 .sleb128 -5328
+ 39698 b27c 32 .uleb128 0x32
+ 39699 b27d DD0D0000 .long 0xddd
+ 39700 b281 03 .byte 0x3
+ 39701 b282 91 .byte 0x91
+ 39702 b283 C056 .sleb128 -5312
+ 39703 b285 00 .byte 0x0
+ 39704 b286 00 .byte 0x0
+ 39705 b287 00 .byte 0x0
+ 39706 b288 00 .byte 0x0
+ 39707 b289 31 .uleb128 0x31
+ 39708 b28a 210F0000 .long 0xf21
+ 39709 b28e 00000000 .quad .LBB3466
+
GAS LISTING /tmp/ccjbMjHD.s page 1008
+
+
+ 39709 00000000
+ 39710 b296 00000000 .quad .LBE3466
+ 39710 00000000
+ 39711 b29e 02 .byte 0x2
+ 39712 b29f 2006 .value 0x620
+ 39713 b2a1 26B30000 .long 0xb326
+ 39714 b2a5 32 .uleb128 0x32
+ 39715 b2a6 330F0000 .long 0xf33
+ 39716 b2aa 03 .byte 0x3
+ 39717 b2ab 91 .byte 0x91
+ 39718 b2ac D056 .sleb128 -5296
+ 39719 b2ae 33 .uleb128 0x33
+ 39720 b2af 00000000 .quad .LBB3467
+ 39720 00000000
+ 39721 b2b7 00000000 .quad .LBE3467
+ 39721 00000000
+ 39722 b2bf 34 .uleb128 0x34
+ 39723 b2c0 3F0F0000 .long 0xf3f
+ 39724 b2c4 09 .byte 0x9
+ 39725 b2c5 03 .byte 0x3
+ 39726 b2c6 00000000 .quad mask.7943
+ 39726 00000000
+ 39727 b2ce 35 .uleb128 0x35
+ 39728 b2cf A00D0000 .long 0xda0
+ 39729 b2d3 00000000 .quad .LBB3468
+ 39729 00000000
+ 39730 b2db 00000000 .quad .LBE3468
+ 39730 00000000
+ 39731 b2e3 02 .byte 0x2
+ 39732 b2e4 FE04 .value 0x4fe
+ 39733 b2e6 32 .uleb128 0x32
+ 39734 b2e7 BE0D0000 .long 0xdbe
+ 39735 b2eb 03 .byte 0x3
+ 39736 b2ec 91 .byte 0x91
+ 39737 b2ed E056 .sleb128 -5280
+ 39738 b2ef 32 .uleb128 0x32
+ 39739 b2f0 B20D0000 .long 0xdb2
+ 39740 b2f4 03 .byte 0x3
+ 39741 b2f5 91 .byte 0x91
+ 39742 b2f6 F056 .sleb128 -5264
+ 39743 b2f8 35 .uleb128 0x35
+ 39744 b2f9 CB0D0000 .long 0xdcb
+ 39745 b2fd 00000000 .quad .LBB3470
+ 39745 00000000
+ 39746 b305 00000000 .quad .LBE3470
+ 39746 00000000
+ 39747 b30d 02 .byte 0x2
+ 39748 b30e 7501 .value 0x175
+ 39749 b310 32 .uleb128 0x32
+ 39750 b311 E90D0000 .long 0xde9
+ 39751 b315 03 .byte 0x3
+ 39752 b316 91 .byte 0x91
+ 39753 b317 8057 .sleb128 -5248
+ 39754 b319 32 .uleb128 0x32
+ 39755 b31a DD0D0000 .long 0xddd
+ 39756 b31e 03 .byte 0x3
+ 39757 b31f 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1009
+
+
+ 39758 b320 9057 .sleb128 -5232
+ 39759 b322 00 .byte 0x0
+ 39760 b323 00 .byte 0x0
+ 39761 b324 00 .byte 0x0
+ 39762 b325 00 .byte 0x0
+ 39763 b326 35 .uleb128 0x35
+ 39764 b327 210F0000 .long 0xf21
+ 39765 b32b 00000000 .quad .LBB3472
+ 39765 00000000
+ 39766 b333 00000000 .quad .LBE3472
+ 39766 00000000
+ 39767 b33b 02 .byte 0x2
+ 39768 b33c 2106 .value 0x621
+ 39769 b33e 32 .uleb128 0x32
+ 39770 b33f 330F0000 .long 0xf33
+ 39771 b343 03 .byte 0x3
+ 39772 b344 91 .byte 0x91
+ 39773 b345 A057 .sleb128 -5216
+ 39774 b347 33 .uleb128 0x33
+ 39775 b348 00000000 .quad .LBB3473
+ 39775 00000000
+ 39776 b350 00000000 .quad .LBE3473
+ 39776 00000000
+ 39777 b358 34 .uleb128 0x34
+ 39778 b359 3F0F0000 .long 0xf3f
+ 39779 b35d 09 .byte 0x9
+ 39780 b35e 03 .byte 0x3
+ 39781 b35f 00000000 .quad mask.7943
+ 39781 00000000
+ 39782 b367 35 .uleb128 0x35
+ 39783 b368 A00D0000 .long 0xda0
+ 39784 b36c 00000000 .quad .LBB3474
+ 39784 00000000
+ 39785 b374 00000000 .quad .LBE3474
+ 39785 00000000
+ 39786 b37c 02 .byte 0x2
+ 39787 b37d FE04 .value 0x4fe
+ 39788 b37f 32 .uleb128 0x32
+ 39789 b380 BE0D0000 .long 0xdbe
+ 39790 b384 03 .byte 0x3
+ 39791 b385 91 .byte 0x91
+ 39792 b386 B057 .sleb128 -5200
+ 39793 b388 32 .uleb128 0x32
+ 39794 b389 B20D0000 .long 0xdb2
+ 39795 b38d 03 .byte 0x3
+ 39796 b38e 91 .byte 0x91
+ 39797 b38f C057 .sleb128 -5184
+ 39798 b391 35 .uleb128 0x35
+ 39799 b392 CB0D0000 .long 0xdcb
+ 39800 b396 00000000 .quad .LBB3476
+ 39800 00000000
+ 39801 b39e 00000000 .quad .LBE3476
+ 39801 00000000
+ 39802 b3a6 02 .byte 0x2
+ 39803 b3a7 7501 .value 0x175
+ 39804 b3a9 32 .uleb128 0x32
+ 39805 b3aa E90D0000 .long 0xde9
+
GAS LISTING /tmp/ccjbMjHD.s page 1010
+
+
+ 39806 b3ae 03 .byte 0x3
+ 39807 b3af 91 .byte 0x91
+ 39808 b3b0 D057 .sleb128 -5168
+ 39809 b3b2 32 .uleb128 0x32
+ 39810 b3b3 DD0D0000 .long 0xddd
+ 39811 b3b7 03 .byte 0x3
+ 39812 b3b8 91 .byte 0x91
+ 39813 b3b9 E057 .sleb128 -5152
+ 39814 b3bb 00 .byte 0x0
+ 39815 b3bc 00 .byte 0x0
+ 39816 b3bd 00 .byte 0x0
+ 39817 b3be 00 .byte 0x0
+ 39818 b3bf 00 .byte 0x0
+ 39819 b3c0 00 .byte 0x0
+ 39820 b3c1 31 .uleb128 0x31
+ 39821 b3c2 860E0000 .long 0xe86
+ 39822 b3c6 00000000 .quad .LBB3478
+ 39822 00000000
+ 39823 b3ce 00000000 .quad .LBE3478
+ 39823 00000000
+ 39824 b3d6 02 .byte 0x2
+ 39825 b3d7 8B07 .value 0x78b
+ 39826 b3d9 F0B30000 .long 0xb3f0
+ 39827 b3dd 32 .uleb128 0x32
+ 39828 b3de A10E0000 .long 0xea1
+ 39829 b3e2 03 .byte 0x3
+ 39830 b3e3 91 .byte 0x91
+ 39831 b3e4 F057 .sleb128 -5136
+ 39832 b3e6 32 .uleb128 0x32
+ 39833 b3e7 970E0000 .long 0xe97
+ 39834 b3eb 03 .byte 0x3
+ 39835 b3ec 91 .byte 0x91
+ 39836 b3ed 8058 .sleb128 -5120
+ 39837 b3ef 00 .byte 0x0
+ 39838 b3f0 31 .uleb128 0x31
+ 39839 b3f1 D50B0000 .long 0xbd5
+ 39840 b3f5 00000000 .quad .LBB3480
+ 39840 00000000
+ 39841 b3fd 00000000 .quad .LBE3480
+ 39841 00000000
+ 39842 b405 02 .byte 0x2
+ 39843 b406 8C07 .value 0x78c
+ 39844 b408 D3B80000 .long 0xb8d3
+ 39845 b40c 32 .uleb128 0x32
+ 39846 b40d F30B0000 .long 0xbf3
+ 39847 b411 03 .byte 0x3
+ 39848 b412 91 .byte 0x91
+ 39849 b413 9C58 .sleb128 -5092
+ 39850 b415 32 .uleb128 0x32
+ 39851 b416 E70B0000 .long 0xbe7
+ 39852 b41a 03 .byte 0x3
+ 39853 b41b 91 .byte 0x91
+ 39854 b41c A058 .sleb128 -5088
+ 39855 b41e 33 .uleb128 0x33
+ 39856 b41f 00000000 .quad .LBB3481
+ 39856 00000000
+ 39857 b427 00000000 .quad .LBE3481
+
GAS LISTING /tmp/ccjbMjHD.s page 1011
+
+
+ 39857 00000000
+ 39858 b42f 34 .uleb128 0x34
+ 39859 b430 FF0B0000 .long 0xbff
+ 39860 b434 04 .byte 0x4
+ 39861 b435 76 .byte 0x76
+ 39862 b436 B0B17F .sleb128 -10064
+ 39863 b439 34 .uleb128 0x34
+ 39864 b43a 0B0C0000 .long 0xc0b
+ 39865 b43e 04 .byte 0x4
+ 39866 b43f 76 .byte 0x76
+ 39867 b440 A0B17F .sleb128 -10080
+ 39868 b443 31 .uleb128 0x31
+ 39869 b444 540C0000 .long 0xc54
+ 39870 b448 00000000 .quad .LBB3482
+ 39870 00000000
+ 39871 b450 00000000 .quad .LBE3482
+ 39871 00000000
+ 39872 b458 02 .byte 0x2
+ 39873 b459 9106 .value 0x691
+ 39874 b45b AFB40000 .long 0xb4af
+ 39875 b45f 32 .uleb128 0x32
+ 39876 b460 7E0C0000 .long 0xc7e
+ 39877 b464 03 .byte 0x3
+ 39878 b465 91 .byte 0x91
+ 39879 b466 B858 .sleb128 -5064
+ 39880 b468 32 .uleb128 0x32
+ 39881 b469 720C0000 .long 0xc72
+ 39882 b46d 03 .byte 0x3
+ 39883 b46e 91 .byte 0x91
+ 39884 b46f BC58 .sleb128 -5060
+ 39885 b471 32 .uleb128 0x32
+ 39886 b472 660C0000 .long 0xc66
+ 39887 b476 03 .byte 0x3
+ 39888 b477 91 .byte 0x91
+ 39889 b478 C058 .sleb128 -5056
+ 39890 b47a 35 .uleb128 0x35
+ 39891 b47b 8B0C0000 .long 0xc8b
+ 39892 b47f 00000000 .quad .LBB3484
+ 39892 00000000
+ 39893 b487 00000000 .quad .LBE3484
+ 39893 00000000
+ 39894 b48f 02 .byte 0x2
+ 39895 b490 0702 .value 0x207
+ 39896 b492 32 .uleb128 0x32
+ 39897 b493 B40C0000 .long 0xcb4
+ 39898 b497 03 .byte 0x3
+ 39899 b498 91 .byte 0x91
+ 39900 b499 D858 .sleb128 -5032
+ 39901 b49b 32 .uleb128 0x32
+ 39902 b49c A90C0000 .long 0xca9
+ 39903 b4a0 03 .byte 0x3
+ 39904 b4a1 91 .byte 0x91
+ 39905 b4a2 DC58 .sleb128 -5028
+ 39906 b4a4 32 .uleb128 0x32
+ 39907 b4a5 9D0C0000 .long 0xc9d
+ 39908 b4a9 03 .byte 0x3
+ 39909 b4aa 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1012
+
+
+ 39910 b4ab E058 .sleb128 -5024
+ 39911 b4ad 00 .byte 0x0
+ 39912 b4ae 00 .byte 0x0
+ 39913 b4af 31 .uleb128 0x31
+ 39914 b4b0 C10C0000 .long 0xcc1
+ 39915 b4b4 00000000 .quad .LBB3486
+ 39915 00000000
+ 39916 b4bc 00000000 .quad .LBE3486
+ 39916 00000000
+ 39917 b4c4 02 .byte 0x2
+ 39918 b4c5 9206 .value 0x692
+ 39919 b4c7 38B70000 .long 0xb738
+ 39920 b4cb 32 .uleb128 0x32
+ 39921 b4cc D30C0000 .long 0xcd3
+ 39922 b4d0 03 .byte 0x3
+ 39923 b4d1 91 .byte 0x91
+ 39924 b4d2 F058 .sleb128 -5008
+ 39925 b4d4 35 .uleb128 0x35
+ 39926 b4d5 E00C0000 .long 0xce0
+ 39927 b4d9 00000000 .quad .LBB3488
+ 39927 00000000
+ 39928 b4e1 00000000 .quad .LBE3488
+ 39928 00000000
+ 39929 b4e9 02 .byte 0x2
+ 39930 b4ea 7D03 .value 0x37d
+ 39931 b4ec 32 .uleb128 0x32
+ 39932 b4ed FE0C0000 .long 0xcfe
+ 39933 b4f1 03 .byte 0x3
+ 39934 b4f2 91 .byte 0x91
+ 39935 b4f3 8859 .sleb128 -4984
+ 39936 b4f5 32 .uleb128 0x32
+ 39937 b4f6 F20C0000 .long 0xcf2
+ 39938 b4fa 03 .byte 0x3
+ 39939 b4fb 91 .byte 0x91
+ 39940 b4fc 9059 .sleb128 -4976
+ 39941 b4fe 33 .uleb128 0x33
+ 39942 b4ff 00000000 .quad .LBB3489
+ 39942 00000000
+ 39943 b507 00000000 .quad .LBE3489
+ 39943 00000000
+ 39944 b50f 34 .uleb128 0x34
+ 39945 b510 0A0D0000 .long 0xd0a
+ 39946 b514 03 .byte 0x3
+ 39947 b515 91 .byte 0x91
+ 39948 b516 E059 .sleb128 -4896
+ 39949 b518 34 .uleb128 0x34
+ 39950 b519 150D0000 .long 0xd15
+ 39951 b51d 03 .byte 0x3
+ 39952 b51e 91 .byte 0x91
+ 39953 b51f D059 .sleb128 -4912
+ 39954 b521 34 .uleb128 0x34
+ 39955 b522 200D0000 .long 0xd20
+ 39956 b526 03 .byte 0x3
+ 39957 b527 91 .byte 0x91
+ 39958 b528 C059 .sleb128 -4928
+ 39959 b52a 34 .uleb128 0x34
+ 39960 b52b 2C0D0000 .long 0xd2c
+
GAS LISTING /tmp/ccjbMjHD.s page 1013
+
+
+ 39961 b52f 03 .byte 0x3
+ 39962 b530 91 .byte 0x91
+ 39963 b531 B059 .sleb128 -4944
+ 39964 b533 34 .uleb128 0x34
+ 39965 b534 380D0000 .long 0xd38
+ 39966 b538 03 .byte 0x3
+ 39967 b539 91 .byte 0x91
+ 39968 b53a AC59 .sleb128 -4948
+ 39969 b53c 31 .uleb128 0x31
+ 39970 b53d 4F0D0000 .long 0xd4f
+ 39971 b541 00000000 .quad .LBB3490
+ 39971 00000000
+ 39972 b549 00000000 .quad .LBE3490
+ 39972 00000000
+ 39973 b551 02 .byte 0x2
+ 39974 b552 5603 .value 0x356
+ 39975 b554 6BB50000 .long 0xb56b
+ 39976 b558 32 .uleb128 0x32
+ 39977 b559 6A0D0000 .long 0xd6a
+ 39978 b55d 03 .byte 0x3
+ 39979 b55e 91 .byte 0x91
+ 39980 b55f F059 .sleb128 -4880
+ 39981 b561 32 .uleb128 0x32
+ 39982 b562 600D0000 .long 0xd60
+ 39983 b566 03 .byte 0x3
+ 39984 b567 91 .byte 0x91
+ 39985 b568 805A .sleb128 -4864
+ 39986 b56a 00 .byte 0x0
+ 39987 b56b 31 .uleb128 0x31
+ 39988 b56c 750D0000 .long 0xd75
+ 39989 b570 00000000 .quad .LBB3492
+ 39989 00000000
+ 39990 b578 00000000 .quad .LBE3492
+ 39990 00000000
+ 39991 b580 02 .byte 0x2
+ 39992 b581 5903 .value 0x359
+ 39993 b583 9AB50000 .long 0xb59a
+ 39994 b587 32 .uleb128 0x32
+ 39995 b588 930D0000 .long 0xd93
+ 39996 b58c 03 .byte 0x3
+ 39997 b58d 91 .byte 0x91
+ 39998 b58e 9C5A .sleb128 -4836
+ 39999 b590 32 .uleb128 0x32
+ 40000 b591 870D0000 .long 0xd87
+ 40001 b595 03 .byte 0x3
+ 40002 b596 91 .byte 0x91
+ 40003 b597 A05A .sleb128 -4832
+ 40004 b599 00 .byte 0x0
+ 40005 b59a 31 .uleb128 0x31
+ 40006 b59b 4F0D0000 .long 0xd4f
+ 40007 b59f 00000000 .quad .LBB3494
+ 40007 00000000
+ 40008 b5a7 00000000 .quad .LBE3494
+ 40008 00000000
+ 40009 b5af 02 .byte 0x2
+ 40010 b5b0 5B03 .value 0x35b
+ 40011 b5b2 C9B50000 .long 0xb5c9
+
GAS LISTING /tmp/ccjbMjHD.s page 1014
+
+
+ 40012 b5b6 32 .uleb128 0x32
+ 40013 b5b7 6A0D0000 .long 0xd6a
+ 40014 b5bb 03 .byte 0x3
+ 40015 b5bc 91 .byte 0x91
+ 40016 b5bd B05A .sleb128 -4816
+ 40017 b5bf 32 .uleb128 0x32
+ 40018 b5c0 600D0000 .long 0xd60
+ 40019 b5c4 03 .byte 0x3
+ 40020 b5c5 91 .byte 0x91
+ 40021 b5c6 C05A .sleb128 -4800
+ 40022 b5c8 00 .byte 0x0
+ 40023 b5c9 31 .uleb128 0x31
+ 40024 b5ca A00D0000 .long 0xda0
+ 40025 b5ce 00000000 .quad .LBB3496
+ 40025 00000000
+ 40026 b5d6 00000000 .quad .LBE3496
+ 40026 00000000
+ 40027 b5de 02 .byte 0x2
+ 40028 b5df 6403 .value 0x364
+ 40029 b5e1 23B60000 .long 0xb623
+ 40030 b5e5 32 .uleb128 0x32
+ 40031 b5e6 BE0D0000 .long 0xdbe
+ 40032 b5ea 03 .byte 0x3
+ 40033 b5eb 91 .byte 0x91
+ 40034 b5ec D05A .sleb128 -4784
+ 40035 b5ee 32 .uleb128 0x32
+ 40036 b5ef B20D0000 .long 0xdb2
+ 40037 b5f3 03 .byte 0x3
+ 40038 b5f4 91 .byte 0x91
+ 40039 b5f5 E05A .sleb128 -4768
+ 40040 b5f7 35 .uleb128 0x35
+ 40041 b5f8 CB0D0000 .long 0xdcb
+ 40042 b5fc 00000000 .quad .LBB3498
+ 40042 00000000
+ 40043 b604 00000000 .quad .LBE3498
+ 40043 00000000
+ 40044 b60c 02 .byte 0x2
+ 40045 b60d 7501 .value 0x175
+ 40046 b60f 32 .uleb128 0x32
+ 40047 b610 E90D0000 .long 0xde9
+ 40048 b614 03 .byte 0x3
+ 40049 b615 91 .byte 0x91
+ 40050 b616 F05A .sleb128 -4752
+ 40051 b618 32 .uleb128 0x32
+ 40052 b619 DD0D0000 .long 0xddd
+ 40053 b61d 03 .byte 0x3
+ 40054 b61e 91 .byte 0x91
+ 40055 b61f 805B .sleb128 -4736
+ 40056 b621 00 .byte 0x0
+ 40057 b622 00 .byte 0x0
+ 40058 b623 31 .uleb128 0x31
+ 40059 b624 FB0D0000 .long 0xdfb
+ 40060 b628 00000000 .quad .LBB3500
+ 40060 00000000
+ 40061 b630 00000000 .quad .LBE3500
+ 40061 00000000
+ 40062 b638 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1015
+
+
+ 40063 b639 6603 .value 0x366
+ 40064 b63b 52B60000 .long 0xb652
+ 40065 b63f 32 .uleb128 0x32
+ 40066 b640 160E0000 .long 0xe16
+ 40067 b644 03 .byte 0x3
+ 40068 b645 91 .byte 0x91
+ 40069 b646 905B .sleb128 -4720
+ 40070 b648 32 .uleb128 0x32
+ 40071 b649 0C0E0000 .long 0xe0c
+ 40072 b64d 03 .byte 0x3
+ 40073 b64e 91 .byte 0x91
+ 40074 b64f A05B .sleb128 -4704
+ 40075 b651 00 .byte 0x0
+ 40076 b652 31 .uleb128 0x31
+ 40077 b653 A00D0000 .long 0xda0
+ 40078 b657 00000000 .quad .LBB3502
+ 40078 00000000
+ 40079 b65f 00000000 .quad .LBE3502
+ 40079 00000000
+ 40080 b667 02 .byte 0x2
+ 40081 b668 6803 .value 0x368
+ 40082 b66a ACB60000 .long 0xb6ac
+ 40083 b66e 32 .uleb128 0x32
+ 40084 b66f BE0D0000 .long 0xdbe
+ 40085 b673 03 .byte 0x3
+ 40086 b674 91 .byte 0x91
+ 40087 b675 B05B .sleb128 -4688
+ 40088 b677 32 .uleb128 0x32
+ 40089 b678 B20D0000 .long 0xdb2
+ 40090 b67c 03 .byte 0x3
+ 40091 b67d 91 .byte 0x91
+ 40092 b67e C05B .sleb128 -4672
+ 40093 b680 35 .uleb128 0x35
+ 40094 b681 CB0D0000 .long 0xdcb
+ 40095 b685 00000000 .quad .LBB3504
+ 40095 00000000
+ 40096 b68d 00000000 .quad .LBE3504
+ 40096 00000000
+ 40097 b695 02 .byte 0x2
+ 40098 b696 7501 .value 0x175
+ 40099 b698 32 .uleb128 0x32
+ 40100 b699 E90D0000 .long 0xde9
+ 40101 b69d 03 .byte 0x3
+ 40102 b69e 91 .byte 0x91
+ 40103 b69f D05B .sleb128 -4656
+ 40104 b6a1 32 .uleb128 0x32
+ 40105 b6a2 DD0D0000 .long 0xddd
+ 40106 b6a6 03 .byte 0x3
+ 40107 b6a7 91 .byte 0x91
+ 40108 b6a8 E05B .sleb128 -4640
+ 40109 b6aa 00 .byte 0x0
+ 40110 b6ab 00 .byte 0x0
+ 40111 b6ac 31 .uleb128 0x31
+ 40112 b6ad FB0D0000 .long 0xdfb
+ 40113 b6b1 00000000 .quad .LBB3506
+ 40113 00000000
+ 40114 b6b9 00000000 .quad .LBE3506
+
GAS LISTING /tmp/ccjbMjHD.s page 1016
+
+
+ 40114 00000000
+ 40115 b6c1 02 .byte 0x2
+ 40116 b6c2 6A03 .value 0x36a
+ 40117 b6c4 DBB60000 .long 0xb6db
+ 40118 b6c8 32 .uleb128 0x32
+ 40119 b6c9 160E0000 .long 0xe16
+ 40120 b6cd 03 .byte 0x3
+ 40121 b6ce 91 .byte 0x91
+ 40122 b6cf F05B .sleb128 -4624
+ 40123 b6d1 32 .uleb128 0x32
+ 40124 b6d2 0C0E0000 .long 0xe0c
+ 40125 b6d6 03 .byte 0x3
+ 40126 b6d7 91 .byte 0x91
+ 40127 b6d8 805C .sleb128 -4608
+ 40128 b6da 00 .byte 0x0
+ 40129 b6db 31 .uleb128 0x31
+ 40130 b6dc 210E0000 .long 0xe21
+ 40131 b6e0 00000000 .quad .LBB3508
+ 40131 00000000
+ 40132 b6e8 00000000 .quad .LBE3508
+ 40132 00000000
+ 40133 b6f0 02 .byte 0x2
+ 40134 b6f1 6C03 .value 0x36c
+ 40135 b6f3 0AB70000 .long 0xb70a
+ 40136 b6f7 32 .uleb128 0x32
+ 40137 b6f8 3E0E0000 .long 0xe3e
+ 40138 b6fc 03 .byte 0x3
+ 40139 b6fd 91 .byte 0x91
+ 40140 b6fe 905C .sleb128 -4592
+ 40141 b700 32 .uleb128 0x32
+ 40142 b701 330E0000 .long 0xe33
+ 40143 b705 03 .byte 0x3
+ 40144 b706 91 .byte 0x91
+ 40145 b707 A05C .sleb128 -4576
+ 40146 b709 00 .byte 0x0
+ 40147 b70a 35 .uleb128 0x35
+ 40148 b70b 4F0D0000 .long 0xd4f
+ 40149 b70f 00000000 .quad .LBB3510
+ 40149 00000000
+ 40150 b717 00000000 .quad .LBE3510
+ 40150 00000000
+ 40151 b71f 02 .byte 0x2
+ 40152 b720 6E03 .value 0x36e
+ 40153 b722 32 .uleb128 0x32
+ 40154 b723 6A0D0000 .long 0xd6a
+ 40155 b727 03 .byte 0x3
+ 40156 b728 91 .byte 0x91
+ 40157 b729 B05C .sleb128 -4560
+ 40158 b72b 32 .uleb128 0x32
+ 40159 b72c 600D0000 .long 0xd60
+ 40160 b730 03 .byte 0x3
+ 40161 b731 91 .byte 0x91
+ 40162 b732 C05C .sleb128 -4544
+ 40163 b734 00 .byte 0x0
+ 40164 b735 00 .byte 0x0
+ 40165 b736 00 .byte 0x0
+ 40166 b737 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1017
+
+
+ 40167 b738 36 .uleb128 0x36
+ 40168 b739 00000000 .quad .LBB3512
+ 40168 00000000
+ 40169 b741 00000000 .quad .LBE3512
+ 40169 00000000
+ 40170 b749 58B70000 .long 0xb758
+ 40171 b74d 34 .uleb128 0x34
+ 40172 b74e 1C0C0000 .long 0xc1c
+ 40173 b752 04 .byte 0x4
+ 40174 b753 91 .byte 0x91
+ 40175 b754 E0B57F .sleb128 -9504
+ 40176 b757 00 .byte 0x0
+ 40177 b758 31 .uleb128 0x31
+ 40178 b759 4A0E0000 .long 0xe4a
+ 40179 b75d 00000000 .quad .LBB3513
+ 40179 00000000
+ 40180 b765 00000000 .quad .LBE3513
+ 40180 00000000
+ 40181 b76d 02 .byte 0x2
+ 40182 b76e 9406 .value 0x694
+ 40183 b770 F5B70000 .long 0xb7f5
+ 40184 b774 32 .uleb128 0x32
+ 40185 b775 5C0E0000 .long 0xe5c
+ 40186 b779 03 .byte 0x3
+ 40187 b77a 91 .byte 0x91
+ 40188 b77b D05C .sleb128 -4528
+ 40189 b77d 33 .uleb128 0x33
+ 40190 b77e 00000000 .quad .LBB3514
+ 40190 00000000
+ 40191 b786 00000000 .quad .LBE3514
+ 40191 00000000
+ 40192 b78e 34 .uleb128 0x34
+ 40193 b78f 680E0000 .long 0xe68
+ 40194 b793 09 .byte 0x9
+ 40195 b794 03 .byte 0x3
+ 40196 b795 00000000 .quad ShiftRowTable.7385
+ 40196 00000000
+ 40197 b79d 35 .uleb128 0x35
+ 40198 b79e A00D0000 .long 0xda0
+ 40199 b7a2 00000000 .quad .LBB3515
+ 40199 00000000
+ 40200 b7aa 00000000 .quad .LBE3515
+ 40200 00000000
+ 40201 b7b2 02 .byte 0x2
+ 40202 b7b3 9B02 .value 0x29b
+ 40203 b7b5 32 .uleb128 0x32
+ 40204 b7b6 BE0D0000 .long 0xdbe
+ 40205 b7ba 03 .byte 0x3
+ 40206 b7bb 91 .byte 0x91
+ 40207 b7bc E05C .sleb128 -4512
+ 40208 b7be 32 .uleb128 0x32
+ 40209 b7bf B20D0000 .long 0xdb2
+ 40210 b7c3 03 .byte 0x3
+ 40211 b7c4 91 .byte 0x91
+ 40212 b7c5 F05C .sleb128 -4496
+ 40213 b7c7 35 .uleb128 0x35
+ 40214 b7c8 CB0D0000 .long 0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s page 1018
+
+
+ 40215 b7cc 00000000 .quad .LBB3517
+ 40215 00000000
+ 40216 b7d4 00000000 .quad .LBE3517
+ 40216 00000000
+ 40217 b7dc 02 .byte 0x2
+ 40218 b7dd 7501 .value 0x175
+ 40219 b7df 32 .uleb128 0x32
+ 40220 b7e0 E90D0000 .long 0xde9
+ 40221 b7e4 03 .byte 0x3
+ 40222 b7e5 91 .byte 0x91
+ 40223 b7e6 805D .sleb128 -4480
+ 40224 b7e8 32 .uleb128 0x32
+ 40225 b7e9 DD0D0000 .long 0xddd
+ 40226 b7ed 03 .byte 0x3
+ 40227 b7ee 91 .byte 0x91
+ 40228 b7ef 905D .sleb128 -4464
+ 40229 b7f1 00 .byte 0x0
+ 40230 b7f2 00 .byte 0x0
+ 40231 b7f3 00 .byte 0x0
+ 40232 b7f4 00 .byte 0x0
+ 40233 b7f5 36 .uleb128 0x36
+ 40234 b7f6 00000000 .quad .LBB3519
+ 40234 00000000
+ 40235 b7fe 00000000 .quad .LBE3519
+ 40235 00000000
+ 40236 b806 15B80000 .long 0xb815
+ 40237 b80a 34 .uleb128 0x34
+ 40238 b80b 2C0C0000 .long 0xc2c
+ 40239 b80f 04 .byte 0x4
+ 40240 b810 91 .byte 0x91
+ 40241 b811 D0B57F .sleb128 -9520
+ 40242 b814 00 .byte 0x0
+ 40243 b815 31 .uleb128 0x31
+ 40244 b816 860E0000 .long 0xe86
+ 40245 b81a 00000000 .quad .LBB3520
+ 40245 00000000
+ 40246 b822 00000000 .quad .LBE3520
+ 40246 00000000
+ 40247 b82a 02 .byte 0x2
+ 40248 b82b 9606 .value 0x696
+ 40249 b82d 44B80000 .long 0xb844
+ 40250 b831 32 .uleb128 0x32
+ 40251 b832 A10E0000 .long 0xea1
+ 40252 b836 03 .byte 0x3
+ 40253 b837 91 .byte 0x91
+ 40254 b838 A05D .sleb128 -4448
+ 40255 b83a 32 .uleb128 0x32
+ 40256 b83b 970E0000 .long 0xe97
+ 40257 b83f 03 .byte 0x3
+ 40258 b840 91 .byte 0x91
+ 40259 b841 B05D .sleb128 -4432
+ 40260 b843 00 .byte 0x0
+ 40261 b844 36 .uleb128 0x36
+ 40262 b845 00000000 .quad .LBB3522
+ 40262 00000000
+ 40263 b84d 00000000 .quad .LBE3522
+ 40263 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1019
+
+
+ 40264 b855 64B80000 .long 0xb864
+ 40265 b859 34 .uleb128 0x34
+ 40266 b85a 3C0C0000 .long 0xc3c
+ 40267 b85e 04 .byte 0x4
+ 40268 b85f 91 .byte 0x91
+ 40269 b860 C0B57F .sleb128 -9536
+ 40270 b863 00 .byte 0x0
+ 40271 b864 31 .uleb128 0x31
+ 40272 b865 AC0E0000 .long 0xeac
+ 40273 b869 00000000 .quad .LBB3523
+ 40273 00000000
+ 40274 b871 00000000 .quad .LBE3523
+ 40274 00000000
+ 40275 b879 02 .byte 0x2
+ 40276 b87a 9806 .value 0x698
+ 40277 b87c B5B80000 .long 0xb8b5
+ 40278 b880 32 .uleb128 0x32
+ 40279 b881 BE0E0000 .long 0xebe
+ 40280 b885 03 .byte 0x3
+ 40281 b886 91 .byte 0x91
+ 40282 b887 C05D .sleb128 -4416
+ 40283 b889 35 .uleb128 0x35
+ 40284 b88a CB0E0000 .long 0xecb
+ 40285 b88e 00000000 .quad .LBB3525
+ 40285 00000000
+ 40286 b896 00000000 .quad .LBE3525
+ 40286 00000000
+ 40287 b89e 02 .byte 0x2
+ 40288 b89f 4905 .value 0x549
+ 40289 b8a1 32 .uleb128 0x32
+ 40290 b8a2 E90E0000 .long 0xee9
+ 40291 b8a6 03 .byte 0x3
+ 40292 b8a7 91 .byte 0x91
+ 40293 b8a8 DC5D .sleb128 -4388
+ 40294 b8aa 32 .uleb128 0x32
+ 40295 b8ab DD0E0000 .long 0xedd
+ 40296 b8af 03 .byte 0x3
+ 40297 b8b0 91 .byte 0x91
+ 40298 b8b1 E05D .sleb128 -4384
+ 40299 b8b3 00 .byte 0x0
+ 40300 b8b4 00 .byte 0x0
+ 40301 b8b5 33 .uleb128 0x33
+ 40302 b8b6 00000000 .quad .LBB3527
+ 40302 00000000
+ 40303 b8be 00000000 .quad .LBE3527
+ 40303 00000000
+ 40304 b8c6 34 .uleb128 0x34
+ 40305 b8c7 480C0000 .long 0xc48
+ 40306 b8cb 04 .byte 0x4
+ 40307 b8cc 91 .byte 0x91
+ 40308 b8cd B0B57F .sleb128 -9552
+ 40309 b8d0 00 .byte 0x0
+ 40310 b8d1 00 .byte 0x0
+ 40311 b8d2 00 .byte 0x0
+ 40312 b8d3 31 .uleb128 0x31
+ 40313 b8d4 F60E0000 .long 0xef6
+ 40314 b8d8 00000000 .quad .LBB3528
+
GAS LISTING /tmp/ccjbMjHD.s page 1020
+
+
+ 40314 00000000
+ 40315 b8e0 00000000 .quad .LBE3528
+ 40315 00000000
+ 40316 b8e8 02 .byte 0x2
+ 40317 b8e9 8C07 .value 0x78c
+ 40318 b8eb E8BA0000 .long 0xbae8
+ 40319 b8ef 32 .uleb128 0x32
+ 40320 b8f0 080F0000 .long 0xf08
+ 40321 b8f4 03 .byte 0x3
+ 40322 b8f5 91 .byte 0x91
+ 40323 b8f6 F05D .sleb128 -4368
+ 40324 b8f8 33 .uleb128 0x33
+ 40325 b8f9 00000000 .quad .LBB3529
+ 40325 00000000
+ 40326 b901 00000000 .quad .LBE3529
+ 40326 00000000
+ 40327 b909 34 .uleb128 0x34
+ 40328 b90a 140F0000 .long 0xf14
+ 40329 b90e 04 .byte 0x4
+ 40330 b90f 76 .byte 0x76
+ 40331 b910 C0B17F .sleb128 -10048
+ 40332 b913 31 .uleb128 0x31
+ 40333 b914 210F0000 .long 0xf21
+ 40334 b918 00000000 .quad .LBB3530
+ 40334 00000000
+ 40335 b920 00000000 .quad .LBE3530
+ 40335 00000000
+ 40336 b928 02 .byte 0x2
+ 40337 b929 1F06 .value 0x61f
+ 40338 b92b B0B90000 .long 0xb9b0
+ 40339 b92f 32 .uleb128 0x32
+ 40340 b930 330F0000 .long 0xf33
+ 40341 b934 03 .byte 0x3
+ 40342 b935 91 .byte 0x91
+ 40343 b936 805E .sleb128 -4352
+ 40344 b938 33 .uleb128 0x33
+ 40345 b939 00000000 .quad .LBB3531
+ 40345 00000000
+ 40346 b941 00000000 .quad .LBE3531
+ 40346 00000000
+ 40347 b949 34 .uleb128 0x34
+ 40348 b94a 3F0F0000 .long 0xf3f
+ 40349 b94e 09 .byte 0x9
+ 40350 b94f 03 .byte 0x3
+ 40351 b950 00000000 .quad mask.7943
+ 40351 00000000
+ 40352 b958 35 .uleb128 0x35
+ 40353 b959 A00D0000 .long 0xda0
+ 40354 b95d 00000000 .quad .LBB3532
+ 40354 00000000
+ 40355 b965 00000000 .quad .LBE3532
+ 40355 00000000
+ 40356 b96d 02 .byte 0x2
+ 40357 b96e FE04 .value 0x4fe
+ 40358 b970 32 .uleb128 0x32
+ 40359 b971 BE0D0000 .long 0xdbe
+ 40360 b975 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1021
+
+
+ 40361 b976 91 .byte 0x91
+ 40362 b977 905E .sleb128 -4336
+ 40363 b979 32 .uleb128 0x32
+ 40364 b97a B20D0000 .long 0xdb2
+ 40365 b97e 03 .byte 0x3
+ 40366 b97f 91 .byte 0x91
+ 40367 b980 A05E .sleb128 -4320
+ 40368 b982 35 .uleb128 0x35
+ 40369 b983 CB0D0000 .long 0xdcb
+ 40370 b987 00000000 .quad .LBB3534
+ 40370 00000000
+ 40371 b98f 00000000 .quad .LBE3534
+ 40371 00000000
+ 40372 b997 02 .byte 0x2
+ 40373 b998 7501 .value 0x175
+ 40374 b99a 32 .uleb128 0x32
+ 40375 b99b E90D0000 .long 0xde9
+ 40376 b99f 03 .byte 0x3
+ 40377 b9a0 91 .byte 0x91
+ 40378 b9a1 B05E .sleb128 -4304
+ 40379 b9a3 32 .uleb128 0x32
+ 40380 b9a4 DD0D0000 .long 0xddd
+ 40381 b9a8 03 .byte 0x3
+ 40382 b9a9 91 .byte 0x91
+ 40383 b9aa C05E .sleb128 -4288
+ 40384 b9ac 00 .byte 0x0
+ 40385 b9ad 00 .byte 0x0
+ 40386 b9ae 00 .byte 0x0
+ 40387 b9af 00 .byte 0x0
+ 40388 b9b0 31 .uleb128 0x31
+ 40389 b9b1 210F0000 .long 0xf21
+ 40390 b9b5 00000000 .quad .LBB3536
+ 40390 00000000
+ 40391 b9bd 00000000 .quad .LBE3536
+ 40391 00000000
+ 40392 b9c5 02 .byte 0x2
+ 40393 b9c6 2006 .value 0x620
+ 40394 b9c8 4DBA0000 .long 0xba4d
+ 40395 b9cc 32 .uleb128 0x32
+ 40396 b9cd 330F0000 .long 0xf33
+ 40397 b9d1 03 .byte 0x3
+ 40398 b9d2 91 .byte 0x91
+ 40399 b9d3 D05E .sleb128 -4272
+ 40400 b9d5 33 .uleb128 0x33
+ 40401 b9d6 00000000 .quad .LBB3537
+ 40401 00000000
+ 40402 b9de 00000000 .quad .LBE3537
+ 40402 00000000
+ 40403 b9e6 34 .uleb128 0x34
+ 40404 b9e7 3F0F0000 .long 0xf3f
+ 40405 b9eb 09 .byte 0x9
+ 40406 b9ec 03 .byte 0x3
+ 40407 b9ed 00000000 .quad mask.7943
+ 40407 00000000
+ 40408 b9f5 35 .uleb128 0x35
+ 40409 b9f6 A00D0000 .long 0xda0
+ 40410 b9fa 00000000 .quad .LBB3538
+
GAS LISTING /tmp/ccjbMjHD.s page 1022
+
+
+ 40410 00000000
+ 40411 ba02 00000000 .quad .LBE3538
+ 40411 00000000
+ 40412 ba0a 02 .byte 0x2
+ 40413 ba0b FE04 .value 0x4fe
+ 40414 ba0d 32 .uleb128 0x32
+ 40415 ba0e BE0D0000 .long 0xdbe
+ 40416 ba12 03 .byte 0x3
+ 40417 ba13 91 .byte 0x91
+ 40418 ba14 E05E .sleb128 -4256
+ 40419 ba16 32 .uleb128 0x32
+ 40420 ba17 B20D0000 .long 0xdb2
+ 40421 ba1b 03 .byte 0x3
+ 40422 ba1c 91 .byte 0x91
+ 40423 ba1d F05E .sleb128 -4240
+ 40424 ba1f 35 .uleb128 0x35
+ 40425 ba20 CB0D0000 .long 0xdcb
+ 40426 ba24 00000000 .quad .LBB3540
+ 40426 00000000
+ 40427 ba2c 00000000 .quad .LBE3540
+ 40427 00000000
+ 40428 ba34 02 .byte 0x2
+ 40429 ba35 7501 .value 0x175
+ 40430 ba37 32 .uleb128 0x32
+ 40431 ba38 E90D0000 .long 0xde9
+ 40432 ba3c 03 .byte 0x3
+ 40433 ba3d 91 .byte 0x91
+ 40434 ba3e 805F .sleb128 -4224
+ 40435 ba40 32 .uleb128 0x32
+ 40436 ba41 DD0D0000 .long 0xddd
+ 40437 ba45 03 .byte 0x3
+ 40438 ba46 91 .byte 0x91
+ 40439 ba47 905F .sleb128 -4208
+ 40440 ba49 00 .byte 0x0
+ 40441 ba4a 00 .byte 0x0
+ 40442 ba4b 00 .byte 0x0
+ 40443 ba4c 00 .byte 0x0
+ 40444 ba4d 35 .uleb128 0x35
+ 40445 ba4e 210F0000 .long 0xf21
+ 40446 ba52 00000000 .quad .LBB3542
+ 40446 00000000
+ 40447 ba5a 00000000 .quad .LBE3542
+ 40447 00000000
+ 40448 ba62 02 .byte 0x2
+ 40449 ba63 2106 .value 0x621
+ 40450 ba65 32 .uleb128 0x32
+ 40451 ba66 330F0000 .long 0xf33
+ 40452 ba6a 03 .byte 0x3
+ 40453 ba6b 91 .byte 0x91
+ 40454 ba6c A05F .sleb128 -4192
+ 40455 ba6e 33 .uleb128 0x33
+ 40456 ba6f 00000000 .quad .LBB3543
+ 40456 00000000
+ 40457 ba77 00000000 .quad .LBE3543
+ 40457 00000000
+ 40458 ba7f 34 .uleb128 0x34
+ 40459 ba80 3F0F0000 .long 0xf3f
+
GAS LISTING /tmp/ccjbMjHD.s page 1023
+
+
+ 40460 ba84 09 .byte 0x9
+ 40461 ba85 03 .byte 0x3
+ 40462 ba86 00000000 .quad mask.7943
+ 40462 00000000
+ 40463 ba8e 35 .uleb128 0x35
+ 40464 ba8f A00D0000 .long 0xda0
+ 40465 ba93 00000000 .quad .LBB3544
+ 40465 00000000
+ 40466 ba9b 00000000 .quad .LBE3544
+ 40466 00000000
+ 40467 baa3 02 .byte 0x2
+ 40468 baa4 FE04 .value 0x4fe
+ 40469 baa6 32 .uleb128 0x32
+ 40470 baa7 BE0D0000 .long 0xdbe
+ 40471 baab 03 .byte 0x3
+ 40472 baac 91 .byte 0x91
+ 40473 baad B05F .sleb128 -4176
+ 40474 baaf 32 .uleb128 0x32
+ 40475 bab0 B20D0000 .long 0xdb2
+ 40476 bab4 03 .byte 0x3
+ 40477 bab5 91 .byte 0x91
+ 40478 bab6 C05F .sleb128 -4160
+ 40479 bab8 35 .uleb128 0x35
+ 40480 bab9 CB0D0000 .long 0xdcb
+ 40481 babd 00000000 .quad .LBB3546
+ 40481 00000000
+ 40482 bac5 00000000 .quad .LBE3546
+ 40482 00000000
+ 40483 bacd 02 .byte 0x2
+ 40484 bace 7501 .value 0x175
+ 40485 bad0 32 .uleb128 0x32
+ 40486 bad1 E90D0000 .long 0xde9
+ 40487 bad5 03 .byte 0x3
+ 40488 bad6 91 .byte 0x91
+ 40489 bad7 D05F .sleb128 -4144
+ 40490 bad9 32 .uleb128 0x32
+ 40491 bada DD0D0000 .long 0xddd
+ 40492 bade 03 .byte 0x3
+ 40493 badf 91 .byte 0x91
+ 40494 bae0 E05F .sleb128 -4128
+ 40495 bae2 00 .byte 0x0
+ 40496 bae3 00 .byte 0x0
+ 40497 bae4 00 .byte 0x0
+ 40498 bae5 00 .byte 0x0
+ 40499 bae6 00 .byte 0x0
+ 40500 bae7 00 .byte 0x0
+ 40501 bae8 31 .uleb128 0x31
+ 40502 bae9 860E0000 .long 0xe86
+ 40503 baed 00000000 .quad .LBB3548
+ 40503 00000000
+ 40504 baf5 00000000 .quad .LBE3548
+ 40504 00000000
+ 40505 bafd 02 .byte 0x2
+ 40506 bafe 8C07 .value 0x78c
+ 40507 bb00 17BB0000 .long 0xbb17
+ 40508 bb04 32 .uleb128 0x32
+ 40509 bb05 A10E0000 .long 0xea1
+
GAS LISTING /tmp/ccjbMjHD.s page 1024
+
+
+ 40510 bb09 03 .byte 0x3
+ 40511 bb0a 91 .byte 0x91
+ 40512 bb0b F05F .sleb128 -4112
+ 40513 bb0d 32 .uleb128 0x32
+ 40514 bb0e 970E0000 .long 0xe97
+ 40515 bb12 03 .byte 0x3
+ 40516 bb13 91 .byte 0x91
+ 40517 bb14 8060 .sleb128 -4096
+ 40518 bb16 00 .byte 0x0
+ 40519 bb17 31 .uleb128 0x31
+ 40520 bb18 8F940000 .long 0x948f
+ 40521 bb1c 00000000 .quad .LBB3550
+ 40521 00000000
+ 40522 bb24 00000000 .quad .LBE3550
+ 40522 00000000
+ 40523 bb2c 02 .byte 0x2
+ 40524 bb2d 8D07 .value 0x78d
+ 40525 bb2f A9BB0000 .long 0xbba9
+ 40526 bb33 32 .uleb128 0x32
+ 40527 bb34 A1940000 .long 0x94a1
+ 40528 bb38 03 .byte 0x3
+ 40529 bb39 91 .byte 0x91
+ 40530 bb3a 9060 .sleb128 -4080
+ 40531 bb3c 33 .uleb128 0x33
+ 40532 bb3d 00000000 .quad .LBB3551
+ 40532 00000000
+ 40533 bb45 00000000 .quad .LBE3551
+ 40533 00000000
+ 40534 bb4d 34 .uleb128 0x34
+ 40535 bb4e AD940000 .long 0x94ad
+ 40536 bb52 04 .byte 0x4
+ 40537 bb53 91 .byte 0x91
+ 40538 bb54 80B67F .sleb128 -9472
+ 40539 bb57 34 .uleb128 0x34
+ 40540 bb58 B7940000 .long 0x94b7
+ 40541 bb5c 03 .byte 0x3
+ 40542 bb5d 91 .byte 0x91
+ 40543 bb5e A460 .sleb128 -4060
+ 40544 bb60 35 .uleb128 0x35
+ 40545 bb61 BE560000 .long 0x56be
+ 40546 bb65 00000000 .quad .LBB3552
+ 40546 00000000
+ 40547 bb6d 00000000 .quad .LBE3552
+ 40547 00000000
+ 40548 bb75 02 .byte 0x2
+ 40549 bb76 7906 .value 0x679
+ 40550 bb78 32 .uleb128 0x32
+ 40551 bb79 D0560000 .long 0x56d0
+ 40552 bb7d 03 .byte 0x3
+ 40553 bb7e 91 .byte 0x91
+ 40554 bb7f A860 .sleb128 -4056
+ 40555 bb81 33 .uleb128 0x33
+ 40556 bb82 00000000 .quad .LBB3553
+ 40556 00000000
+ 40557 bb8a 00000000 .quad .LBE3553
+ 40557 00000000
+ 40558 bb92 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 1025
+
+
+ 40559 bb93 DA560000 .long 0x56da
+ 40560 bb97 04 .byte 0x4
+ 40561 bb98 91 .byte 0x91
+ 40562 bb99 F0B57F .sleb128 -9488
+ 40563 bb9c 34 .uleb128 0x34
+ 40564 bb9d E6560000 .long 0x56e6
+ 40565 bba1 03 .byte 0x3
+ 40566 bba2 91 .byte 0x91
+ 40567 bba3 AC60 .sleb128 -4052
+ 40568 bba5 00 .byte 0x0
+ 40569 bba6 00 .byte 0x0
+ 40570 bba7 00 .byte 0x0
+ 40571 bba8 00 .byte 0x0
+ 40572 bba9 31 .uleb128 0x31
+ 40573 bbaa F60E0000 .long 0xef6
+ 40574 bbae 00000000 .quad .LBB3554
+ 40574 00000000
+ 40575 bbb6 00000000 .quad .LBE3554
+ 40575 00000000
+ 40576 bbbe 02 .byte 0x2
+ 40577 bbbf 8D07 .value 0x78d
+ 40578 bbc1 BEBD0000 .long 0xbdbe
+ 40579 bbc5 32 .uleb128 0x32
+ 40580 bbc6 080F0000 .long 0xf08
+ 40581 bbca 03 .byte 0x3
+ 40582 bbcb 91 .byte 0x91
+ 40583 bbcc B060 .sleb128 -4048
+ 40584 bbce 33 .uleb128 0x33
+ 40585 bbcf 00000000 .quad .LBB3555
+ 40585 00000000
+ 40586 bbd7 00000000 .quad .LBE3555
+ 40586 00000000
+ 40587 bbdf 34 .uleb128 0x34
+ 40588 bbe0 140F0000 .long 0xf14
+ 40589 bbe4 04 .byte 0x4
+ 40590 bbe5 76 .byte 0x76
+ 40591 bbe6 D0B17F .sleb128 -10032
+ 40592 bbe9 31 .uleb128 0x31
+ 40593 bbea 210F0000 .long 0xf21
+ 40594 bbee 00000000 .quad .LBB3556
+ 40594 00000000
+ 40595 bbf6 00000000 .quad .LBE3556
+ 40595 00000000
+ 40596 bbfe 02 .byte 0x2
+ 40597 bbff 1F06 .value 0x61f
+ 40598 bc01 86BC0000 .long 0xbc86
+ 40599 bc05 32 .uleb128 0x32
+ 40600 bc06 330F0000 .long 0xf33
+ 40601 bc0a 03 .byte 0x3
+ 40602 bc0b 91 .byte 0x91
+ 40603 bc0c C060 .sleb128 -4032
+ 40604 bc0e 33 .uleb128 0x33
+ 40605 bc0f 00000000 .quad .LBB3557
+ 40605 00000000
+ 40606 bc17 00000000 .quad .LBE3557
+ 40606 00000000
+ 40607 bc1f 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 1026
+
+
+ 40608 bc20 3F0F0000 .long 0xf3f
+ 40609 bc24 09 .byte 0x9
+ 40610 bc25 03 .byte 0x3
+ 40611 bc26 00000000 .quad mask.7943
+ 40611 00000000
+ 40612 bc2e 35 .uleb128 0x35
+ 40613 bc2f A00D0000 .long 0xda0
+ 40614 bc33 00000000 .quad .LBB3558
+ 40614 00000000
+ 40615 bc3b 00000000 .quad .LBE3558
+ 40615 00000000
+ 40616 bc43 02 .byte 0x2
+ 40617 bc44 FE04 .value 0x4fe
+ 40618 bc46 32 .uleb128 0x32
+ 40619 bc47 BE0D0000 .long 0xdbe
+ 40620 bc4b 03 .byte 0x3
+ 40621 bc4c 91 .byte 0x91
+ 40622 bc4d D060 .sleb128 -4016
+ 40623 bc4f 32 .uleb128 0x32
+ 40624 bc50 B20D0000 .long 0xdb2
+ 40625 bc54 03 .byte 0x3
+ 40626 bc55 91 .byte 0x91
+ 40627 bc56 E060 .sleb128 -4000
+ 40628 bc58 35 .uleb128 0x35
+ 40629 bc59 CB0D0000 .long 0xdcb
+ 40630 bc5d 00000000 .quad .LBB3560
+ 40630 00000000
+ 40631 bc65 00000000 .quad .LBE3560
+ 40631 00000000
+ 40632 bc6d 02 .byte 0x2
+ 40633 bc6e 7501 .value 0x175
+ 40634 bc70 32 .uleb128 0x32
+ 40635 bc71 E90D0000 .long 0xde9
+ 40636 bc75 03 .byte 0x3
+ 40637 bc76 91 .byte 0x91
+ 40638 bc77 F060 .sleb128 -3984
+ 40639 bc79 32 .uleb128 0x32
+ 40640 bc7a DD0D0000 .long 0xddd
+ 40641 bc7e 03 .byte 0x3
+ 40642 bc7f 91 .byte 0x91
+ 40643 bc80 8061 .sleb128 -3968
+ 40644 bc82 00 .byte 0x0
+ 40645 bc83 00 .byte 0x0
+ 40646 bc84 00 .byte 0x0
+ 40647 bc85 00 .byte 0x0
+ 40648 bc86 31 .uleb128 0x31
+ 40649 bc87 210F0000 .long 0xf21
+ 40650 bc8b 00000000 .quad .LBB3562
+ 40650 00000000
+ 40651 bc93 00000000 .quad .LBE3562
+ 40651 00000000
+ 40652 bc9b 02 .byte 0x2
+ 40653 bc9c 2006 .value 0x620
+ 40654 bc9e 23BD0000 .long 0xbd23
+ 40655 bca2 32 .uleb128 0x32
+ 40656 bca3 330F0000 .long 0xf33
+ 40657 bca7 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1027
+
+
+ 40658 bca8 91 .byte 0x91
+ 40659 bca9 9061 .sleb128 -3952
+ 40660 bcab 33 .uleb128 0x33
+ 40661 bcac 00000000 .quad .LBB3563
+ 40661 00000000
+ 40662 bcb4 00000000 .quad .LBE3563
+ 40662 00000000
+ 40663 bcbc 34 .uleb128 0x34
+ 40664 bcbd 3F0F0000 .long 0xf3f
+ 40665 bcc1 09 .byte 0x9
+ 40666 bcc2 03 .byte 0x3
+ 40667 bcc3 00000000 .quad mask.7943
+ 40667 00000000
+ 40668 bccb 35 .uleb128 0x35
+ 40669 bccc A00D0000 .long 0xda0
+ 40670 bcd0 00000000 .quad .LBB3564
+ 40670 00000000
+ 40671 bcd8 00000000 .quad .LBE3564
+ 40671 00000000
+ 40672 bce0 02 .byte 0x2
+ 40673 bce1 FE04 .value 0x4fe
+ 40674 bce3 32 .uleb128 0x32
+ 40675 bce4 BE0D0000 .long 0xdbe
+ 40676 bce8 03 .byte 0x3
+ 40677 bce9 91 .byte 0x91
+ 40678 bcea A061 .sleb128 -3936
+ 40679 bcec 32 .uleb128 0x32
+ 40680 bced B20D0000 .long 0xdb2
+ 40681 bcf1 03 .byte 0x3
+ 40682 bcf2 91 .byte 0x91
+ 40683 bcf3 B061 .sleb128 -3920
+ 40684 bcf5 35 .uleb128 0x35
+ 40685 bcf6 CB0D0000 .long 0xdcb
+ 40686 bcfa 00000000 .quad .LBB3566
+ 40686 00000000
+ 40687 bd02 00000000 .quad .LBE3566
+ 40687 00000000
+ 40688 bd0a 02 .byte 0x2
+ 40689 bd0b 7501 .value 0x175
+ 40690 bd0d 32 .uleb128 0x32
+ 40691 bd0e E90D0000 .long 0xde9
+ 40692 bd12 03 .byte 0x3
+ 40693 bd13 91 .byte 0x91
+ 40694 bd14 C061 .sleb128 -3904
+ 40695 bd16 32 .uleb128 0x32
+ 40696 bd17 DD0D0000 .long 0xddd
+ 40697 bd1b 03 .byte 0x3
+ 40698 bd1c 91 .byte 0x91
+ 40699 bd1d D061 .sleb128 -3888
+ 40700 bd1f 00 .byte 0x0
+ 40701 bd20 00 .byte 0x0
+ 40702 bd21 00 .byte 0x0
+ 40703 bd22 00 .byte 0x0
+ 40704 bd23 35 .uleb128 0x35
+ 40705 bd24 210F0000 .long 0xf21
+ 40706 bd28 00000000 .quad .LBB3568
+ 40706 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1028
+
+
+ 40707 bd30 00000000 .quad .LBE3568
+ 40707 00000000
+ 40708 bd38 02 .byte 0x2
+ 40709 bd39 2106 .value 0x621
+ 40710 bd3b 32 .uleb128 0x32
+ 40711 bd3c 330F0000 .long 0xf33
+ 40712 bd40 03 .byte 0x3
+ 40713 bd41 91 .byte 0x91
+ 40714 bd42 E061 .sleb128 -3872
+ 40715 bd44 33 .uleb128 0x33
+ 40716 bd45 00000000 .quad .LBB3569
+ 40716 00000000
+ 40717 bd4d 00000000 .quad .LBE3569
+ 40717 00000000
+ 40718 bd55 34 .uleb128 0x34
+ 40719 bd56 3F0F0000 .long 0xf3f
+ 40720 bd5a 09 .byte 0x9
+ 40721 bd5b 03 .byte 0x3
+ 40722 bd5c 00000000 .quad mask.7943
+ 40722 00000000
+ 40723 bd64 35 .uleb128 0x35
+ 40724 bd65 A00D0000 .long 0xda0
+ 40725 bd69 00000000 .quad .LBB3570
+ 40725 00000000
+ 40726 bd71 00000000 .quad .LBE3570
+ 40726 00000000
+ 40727 bd79 02 .byte 0x2
+ 40728 bd7a FE04 .value 0x4fe
+ 40729 bd7c 32 .uleb128 0x32
+ 40730 bd7d BE0D0000 .long 0xdbe
+ 40731 bd81 03 .byte 0x3
+ 40732 bd82 91 .byte 0x91
+ 40733 bd83 F061 .sleb128 -3856
+ 40734 bd85 32 .uleb128 0x32
+ 40735 bd86 B20D0000 .long 0xdb2
+ 40736 bd8a 03 .byte 0x3
+ 40737 bd8b 91 .byte 0x91
+ 40738 bd8c 8062 .sleb128 -3840
+ 40739 bd8e 35 .uleb128 0x35
+ 40740 bd8f CB0D0000 .long 0xdcb
+ 40741 bd93 00000000 .quad .LBB3572
+ 40741 00000000
+ 40742 bd9b 00000000 .quad .LBE3572
+ 40742 00000000
+ 40743 bda3 02 .byte 0x2
+ 40744 bda4 7501 .value 0x175
+ 40745 bda6 32 .uleb128 0x32
+ 40746 bda7 E90D0000 .long 0xde9
+ 40747 bdab 03 .byte 0x3
+ 40748 bdac 91 .byte 0x91
+ 40749 bdad 9062 .sleb128 -3824
+ 40750 bdaf 32 .uleb128 0x32
+ 40751 bdb0 DD0D0000 .long 0xddd
+ 40752 bdb4 03 .byte 0x3
+ 40753 bdb5 91 .byte 0x91
+ 40754 bdb6 A062 .sleb128 -3808
+ 40755 bdb8 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1029
+
+
+ 40756 bdb9 00 .byte 0x0
+ 40757 bdba 00 .byte 0x0
+ 40758 bdbb 00 .byte 0x0
+ 40759 bdbc 00 .byte 0x0
+ 40760 bdbd 00 .byte 0x0
+ 40761 bdbe 31 .uleb128 0x31
+ 40762 bdbf 860E0000 .long 0xe86
+ 40763 bdc3 00000000 .quad .LBB3574
+ 40763 00000000
+ 40764 bdcb 00000000 .quad .LBE3574
+ 40764 00000000
+ 40765 bdd3 02 .byte 0x2
+ 40766 bdd4 8D07 .value 0x78d
+ 40767 bdd6 EDBD0000 .long 0xbded
+ 40768 bdda 32 .uleb128 0x32
+ 40769 bddb A10E0000 .long 0xea1
+ 40770 bddf 03 .byte 0x3
+ 40771 bde0 91 .byte 0x91
+ 40772 bde1 B062 .sleb128 -3792
+ 40773 bde3 32 .uleb128 0x32
+ 40774 bde4 970E0000 .long 0xe97
+ 40775 bde8 03 .byte 0x3
+ 40776 bde9 91 .byte 0x91
+ 40777 bdea C062 .sleb128 -3776
+ 40778 bdec 00 .byte 0x0
+ 40779 bded 31 .uleb128 0x31
+ 40780 bdee D50B0000 .long 0xbd5
+ 40781 bdf2 00000000 .quad .LBB3576
+ 40781 00000000
+ 40782 bdfa 00000000 .quad .LBE3576
+ 40782 00000000
+ 40783 be02 02 .byte 0x2
+ 40784 be03 8E07 .value 0x78e
+ 40785 be05 D0C20000 .long 0xc2d0
+ 40786 be09 32 .uleb128 0x32
+ 40787 be0a F30B0000 .long 0xbf3
+ 40788 be0e 03 .byte 0x3
+ 40789 be0f 91 .byte 0x91
+ 40790 be10 DC62 .sleb128 -3748
+ 40791 be12 32 .uleb128 0x32
+ 40792 be13 E70B0000 .long 0xbe7
+ 40793 be17 03 .byte 0x3
+ 40794 be18 91 .byte 0x91
+ 40795 be19 E062 .sleb128 -3744
+ 40796 be1b 33 .uleb128 0x33
+ 40797 be1c 00000000 .quad .LBB3577
+ 40797 00000000
+ 40798 be24 00000000 .quad .LBE3577
+ 40798 00000000
+ 40799 be2c 34 .uleb128 0x34
+ 40800 be2d FF0B0000 .long 0xbff
+ 40801 be31 04 .byte 0x4
+ 40802 be32 76 .byte 0x76
+ 40803 be33 F0B17F .sleb128 -10000
+ 40804 be36 34 .uleb128 0x34
+ 40805 be37 0B0C0000 .long 0xc0b
+ 40806 be3b 04 .byte 0x4
+
GAS LISTING /tmp/ccjbMjHD.s page 1030
+
+
+ 40807 be3c 76 .byte 0x76
+ 40808 be3d E0B17F .sleb128 -10016
+ 40809 be40 31 .uleb128 0x31
+ 40810 be41 540C0000 .long 0xc54
+ 40811 be45 00000000 .quad .LBB3578
+ 40811 00000000
+ 40812 be4d 00000000 .quad .LBE3578
+ 40812 00000000
+ 40813 be55 02 .byte 0x2
+ 40814 be56 9106 .value 0x691
+ 40815 be58 ACBE0000 .long 0xbeac
+ 40816 be5c 32 .uleb128 0x32
+ 40817 be5d 7E0C0000 .long 0xc7e
+ 40818 be61 03 .byte 0x3
+ 40819 be62 91 .byte 0x91
+ 40820 be63 F862 .sleb128 -3720
+ 40821 be65 32 .uleb128 0x32
+ 40822 be66 720C0000 .long 0xc72
+ 40823 be6a 03 .byte 0x3
+ 40824 be6b 91 .byte 0x91
+ 40825 be6c FC62 .sleb128 -3716
+ 40826 be6e 32 .uleb128 0x32
+ 40827 be6f 660C0000 .long 0xc66
+ 40828 be73 03 .byte 0x3
+ 40829 be74 91 .byte 0x91
+ 40830 be75 8063 .sleb128 -3712
+ 40831 be77 35 .uleb128 0x35
+ 40832 be78 8B0C0000 .long 0xc8b
+ 40833 be7c 00000000 .quad .LBB3580
+ 40833 00000000
+ 40834 be84 00000000 .quad .LBE3580
+ 40834 00000000
+ 40835 be8c 02 .byte 0x2
+ 40836 be8d 0702 .value 0x207
+ 40837 be8f 32 .uleb128 0x32
+ 40838 be90 B40C0000 .long 0xcb4
+ 40839 be94 03 .byte 0x3
+ 40840 be95 91 .byte 0x91
+ 40841 be96 9863 .sleb128 -3688
+ 40842 be98 32 .uleb128 0x32
+ 40843 be99 A90C0000 .long 0xca9
+ 40844 be9d 03 .byte 0x3
+ 40845 be9e 91 .byte 0x91
+ 40846 be9f 9C63 .sleb128 -3684
+ 40847 bea1 32 .uleb128 0x32
+ 40848 bea2 9D0C0000 .long 0xc9d
+ 40849 bea6 03 .byte 0x3
+ 40850 bea7 91 .byte 0x91
+ 40851 bea8 A063 .sleb128 -3680
+ 40852 beaa 00 .byte 0x0
+ 40853 beab 00 .byte 0x0
+ 40854 beac 31 .uleb128 0x31
+ 40855 bead C10C0000 .long 0xcc1
+ 40856 beb1 00000000 .quad .LBB3582
+ 40856 00000000
+ 40857 beb9 00000000 .quad .LBE3582
+ 40857 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1031
+
+
+ 40858 bec1 02 .byte 0x2
+ 40859 bec2 9206 .value 0x692
+ 40860 bec4 35C10000 .long 0xc135
+ 40861 bec8 32 .uleb128 0x32
+ 40862 bec9 D30C0000 .long 0xcd3
+ 40863 becd 03 .byte 0x3
+ 40864 bece 91 .byte 0x91
+ 40865 becf B063 .sleb128 -3664
+ 40866 bed1 35 .uleb128 0x35
+ 40867 bed2 E00C0000 .long 0xce0
+ 40868 bed6 00000000 .quad .LBB3584
+ 40868 00000000
+ 40869 bede 00000000 .quad .LBE3584
+ 40869 00000000
+ 40870 bee6 02 .byte 0x2
+ 40871 bee7 7D03 .value 0x37d
+ 40872 bee9 32 .uleb128 0x32
+ 40873 beea FE0C0000 .long 0xcfe
+ 40874 beee 03 .byte 0x3
+ 40875 beef 91 .byte 0x91
+ 40876 bef0 C863 .sleb128 -3640
+ 40877 bef2 32 .uleb128 0x32
+ 40878 bef3 F20C0000 .long 0xcf2
+ 40879 bef7 03 .byte 0x3
+ 40880 bef8 91 .byte 0x91
+ 40881 bef9 D063 .sleb128 -3632
+ 40882 befb 33 .uleb128 0x33
+ 40883 befc 00000000 .quad .LBB3585
+ 40883 00000000
+ 40884 bf04 00000000 .quad .LBE3585
+ 40884 00000000
+ 40885 bf0c 34 .uleb128 0x34
+ 40886 bf0d 0A0D0000 .long 0xd0a
+ 40887 bf11 03 .byte 0x3
+ 40888 bf12 91 .byte 0x91
+ 40889 bf13 A064 .sleb128 -3552
+ 40890 bf15 34 .uleb128 0x34
+ 40891 bf16 150D0000 .long 0xd15
+ 40892 bf1a 03 .byte 0x3
+ 40893 bf1b 91 .byte 0x91
+ 40894 bf1c 9064 .sleb128 -3568
+ 40895 bf1e 34 .uleb128 0x34
+ 40896 bf1f 200D0000 .long 0xd20
+ 40897 bf23 03 .byte 0x3
+ 40898 bf24 91 .byte 0x91
+ 40899 bf25 8064 .sleb128 -3584
+ 40900 bf27 34 .uleb128 0x34
+ 40901 bf28 2C0D0000 .long 0xd2c
+ 40902 bf2c 03 .byte 0x3
+ 40903 bf2d 91 .byte 0x91
+ 40904 bf2e F063 .sleb128 -3600
+ 40905 bf30 34 .uleb128 0x34
+ 40906 bf31 380D0000 .long 0xd38
+ 40907 bf35 03 .byte 0x3
+ 40908 bf36 91 .byte 0x91
+ 40909 bf37 EC63 .sleb128 -3604
+ 40910 bf39 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 1032
+
+
+ 40911 bf3a 4F0D0000 .long 0xd4f
+ 40912 bf3e 00000000 .quad .LBB3586
+ 40912 00000000
+ 40913 bf46 00000000 .quad .LBE3586
+ 40913 00000000
+ 40914 bf4e 02 .byte 0x2
+ 40915 bf4f 5603 .value 0x356
+ 40916 bf51 68BF0000 .long 0xbf68
+ 40917 bf55 32 .uleb128 0x32
+ 40918 bf56 6A0D0000 .long 0xd6a
+ 40919 bf5a 03 .byte 0x3
+ 40920 bf5b 91 .byte 0x91
+ 40921 bf5c B064 .sleb128 -3536
+ 40922 bf5e 32 .uleb128 0x32
+ 40923 bf5f 600D0000 .long 0xd60
+ 40924 bf63 03 .byte 0x3
+ 40925 bf64 91 .byte 0x91
+ 40926 bf65 C064 .sleb128 -3520
+ 40927 bf67 00 .byte 0x0
+ 40928 bf68 31 .uleb128 0x31
+ 40929 bf69 750D0000 .long 0xd75
+ 40930 bf6d 00000000 .quad .LBB3588
+ 40930 00000000
+ 40931 bf75 00000000 .quad .LBE3588
+ 40931 00000000
+ 40932 bf7d 02 .byte 0x2
+ 40933 bf7e 5903 .value 0x359
+ 40934 bf80 97BF0000 .long 0xbf97
+ 40935 bf84 32 .uleb128 0x32
+ 40936 bf85 930D0000 .long 0xd93
+ 40937 bf89 03 .byte 0x3
+ 40938 bf8a 91 .byte 0x91
+ 40939 bf8b DC64 .sleb128 -3492
+ 40940 bf8d 32 .uleb128 0x32
+ 40941 bf8e 870D0000 .long 0xd87
+ 40942 bf92 03 .byte 0x3
+ 40943 bf93 91 .byte 0x91
+ 40944 bf94 E064 .sleb128 -3488
+ 40945 bf96 00 .byte 0x0
+ 40946 bf97 31 .uleb128 0x31
+ 40947 bf98 4F0D0000 .long 0xd4f
+ 40948 bf9c 00000000 .quad .LBB3590
+ 40948 00000000
+ 40949 bfa4 00000000 .quad .LBE3590
+ 40949 00000000
+ 40950 bfac 02 .byte 0x2
+ 40951 bfad 5B03 .value 0x35b
+ 40952 bfaf C6BF0000 .long 0xbfc6
+ 40953 bfb3 32 .uleb128 0x32
+ 40954 bfb4 6A0D0000 .long 0xd6a
+ 40955 bfb8 03 .byte 0x3
+ 40956 bfb9 91 .byte 0x91
+ 40957 bfba F064 .sleb128 -3472
+ 40958 bfbc 32 .uleb128 0x32
+ 40959 bfbd 600D0000 .long 0xd60
+ 40960 bfc1 03 .byte 0x3
+ 40961 bfc2 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1033
+
+
+ 40962 bfc3 8065 .sleb128 -3456
+ 40963 bfc5 00 .byte 0x0
+ 40964 bfc6 31 .uleb128 0x31
+ 40965 bfc7 A00D0000 .long 0xda0
+ 40966 bfcb 00000000 .quad .LBB3592
+ 40966 00000000
+ 40967 bfd3 00000000 .quad .LBE3592
+ 40967 00000000
+ 40968 bfdb 02 .byte 0x2
+ 40969 bfdc 6403 .value 0x364
+ 40970 bfde 20C00000 .long 0xc020
+ 40971 bfe2 32 .uleb128 0x32
+ 40972 bfe3 BE0D0000 .long 0xdbe
+ 40973 bfe7 03 .byte 0x3
+ 40974 bfe8 91 .byte 0x91
+ 40975 bfe9 9065 .sleb128 -3440
+ 40976 bfeb 32 .uleb128 0x32
+ 40977 bfec B20D0000 .long 0xdb2
+ 40978 bff0 03 .byte 0x3
+ 40979 bff1 91 .byte 0x91
+ 40980 bff2 A065 .sleb128 -3424
+ 40981 bff4 35 .uleb128 0x35
+ 40982 bff5 CB0D0000 .long 0xdcb
+ 40983 bff9 00000000 .quad .LBB3594
+ 40983 00000000
+ 40984 c001 00000000 .quad .LBE3594
+ 40984 00000000
+ 40985 c009 02 .byte 0x2
+ 40986 c00a 7501 .value 0x175
+ 40987 c00c 32 .uleb128 0x32
+ 40988 c00d E90D0000 .long 0xde9
+ 40989 c011 03 .byte 0x3
+ 40990 c012 91 .byte 0x91
+ 40991 c013 B065 .sleb128 -3408
+ 40992 c015 32 .uleb128 0x32
+ 40993 c016 DD0D0000 .long 0xddd
+ 40994 c01a 03 .byte 0x3
+ 40995 c01b 91 .byte 0x91
+ 40996 c01c C065 .sleb128 -3392
+ 40997 c01e 00 .byte 0x0
+ 40998 c01f 00 .byte 0x0
+ 40999 c020 31 .uleb128 0x31
+ 41000 c021 FB0D0000 .long 0xdfb
+ 41001 c025 00000000 .quad .LBB3596
+ 41001 00000000
+ 41002 c02d 00000000 .quad .LBE3596
+ 41002 00000000
+ 41003 c035 02 .byte 0x2
+ 41004 c036 6603 .value 0x366
+ 41005 c038 4FC00000 .long 0xc04f
+ 41006 c03c 32 .uleb128 0x32
+ 41007 c03d 160E0000 .long 0xe16
+ 41008 c041 03 .byte 0x3
+ 41009 c042 91 .byte 0x91
+ 41010 c043 D065 .sleb128 -3376
+ 41011 c045 32 .uleb128 0x32
+ 41012 c046 0C0E0000 .long 0xe0c
+
GAS LISTING /tmp/ccjbMjHD.s page 1034
+
+
+ 41013 c04a 03 .byte 0x3
+ 41014 c04b 91 .byte 0x91
+ 41015 c04c E065 .sleb128 -3360
+ 41016 c04e 00 .byte 0x0
+ 41017 c04f 31 .uleb128 0x31
+ 41018 c050 A00D0000 .long 0xda0
+ 41019 c054 00000000 .quad .LBB3598
+ 41019 00000000
+ 41020 c05c 00000000 .quad .LBE3598
+ 41020 00000000
+ 41021 c064 02 .byte 0x2
+ 41022 c065 6803 .value 0x368
+ 41023 c067 A9C00000 .long 0xc0a9
+ 41024 c06b 32 .uleb128 0x32
+ 41025 c06c BE0D0000 .long 0xdbe
+ 41026 c070 03 .byte 0x3
+ 41027 c071 91 .byte 0x91
+ 41028 c072 F065 .sleb128 -3344
+ 41029 c074 32 .uleb128 0x32
+ 41030 c075 B20D0000 .long 0xdb2
+ 41031 c079 03 .byte 0x3
+ 41032 c07a 91 .byte 0x91
+ 41033 c07b 8066 .sleb128 -3328
+ 41034 c07d 35 .uleb128 0x35
+ 41035 c07e CB0D0000 .long 0xdcb
+ 41036 c082 00000000 .quad .LBB3600
+ 41036 00000000
+ 41037 c08a 00000000 .quad .LBE3600
+ 41037 00000000
+ 41038 c092 02 .byte 0x2
+ 41039 c093 7501 .value 0x175
+ 41040 c095 32 .uleb128 0x32
+ 41041 c096 E90D0000 .long 0xde9
+ 41042 c09a 03 .byte 0x3
+ 41043 c09b 91 .byte 0x91
+ 41044 c09c 9066 .sleb128 -3312
+ 41045 c09e 32 .uleb128 0x32
+ 41046 c09f DD0D0000 .long 0xddd
+ 41047 c0a3 03 .byte 0x3
+ 41048 c0a4 91 .byte 0x91
+ 41049 c0a5 A066 .sleb128 -3296
+ 41050 c0a7 00 .byte 0x0
+ 41051 c0a8 00 .byte 0x0
+ 41052 c0a9 31 .uleb128 0x31
+ 41053 c0aa FB0D0000 .long 0xdfb
+ 41054 c0ae 00000000 .quad .LBB3602
+ 41054 00000000
+ 41055 c0b6 00000000 .quad .LBE3602
+ 41055 00000000
+ 41056 c0be 02 .byte 0x2
+ 41057 c0bf 6A03 .value 0x36a
+ 41058 c0c1 D8C00000 .long 0xc0d8
+ 41059 c0c5 32 .uleb128 0x32
+ 41060 c0c6 160E0000 .long 0xe16
+ 41061 c0ca 03 .byte 0x3
+ 41062 c0cb 91 .byte 0x91
+ 41063 c0cc B066 .sleb128 -3280
+
GAS LISTING /tmp/ccjbMjHD.s page 1035
+
+
+ 41064 c0ce 32 .uleb128 0x32
+ 41065 c0cf 0C0E0000 .long 0xe0c
+ 41066 c0d3 03 .byte 0x3
+ 41067 c0d4 91 .byte 0x91
+ 41068 c0d5 C066 .sleb128 -3264
+ 41069 c0d7 00 .byte 0x0
+ 41070 c0d8 31 .uleb128 0x31
+ 41071 c0d9 210E0000 .long 0xe21
+ 41072 c0dd 00000000 .quad .LBB3604
+ 41072 00000000
+ 41073 c0e5 00000000 .quad .LBE3604
+ 41073 00000000
+ 41074 c0ed 02 .byte 0x2
+ 41075 c0ee 6C03 .value 0x36c
+ 41076 c0f0 07C10000 .long 0xc107
+ 41077 c0f4 32 .uleb128 0x32
+ 41078 c0f5 3E0E0000 .long 0xe3e
+ 41079 c0f9 03 .byte 0x3
+ 41080 c0fa 91 .byte 0x91
+ 41081 c0fb D066 .sleb128 -3248
+ 41082 c0fd 32 .uleb128 0x32
+ 41083 c0fe 330E0000 .long 0xe33
+ 41084 c102 03 .byte 0x3
+ 41085 c103 91 .byte 0x91
+ 41086 c104 E066 .sleb128 -3232
+ 41087 c106 00 .byte 0x0
+ 41088 c107 35 .uleb128 0x35
+ 41089 c108 4F0D0000 .long 0xd4f
+ 41090 c10c 00000000 .quad .LBB3606
+ 41090 00000000
+ 41091 c114 00000000 .quad .LBE3606
+ 41091 00000000
+ 41092 c11c 02 .byte 0x2
+ 41093 c11d 6E03 .value 0x36e
+ 41094 c11f 32 .uleb128 0x32
+ 41095 c120 6A0D0000 .long 0xd6a
+ 41096 c124 03 .byte 0x3
+ 41097 c125 91 .byte 0x91
+ 41098 c126 F066 .sleb128 -3216
+ 41099 c128 32 .uleb128 0x32
+ 41100 c129 600D0000 .long 0xd60
+ 41101 c12d 03 .byte 0x3
+ 41102 c12e 91 .byte 0x91
+ 41103 c12f 8067 .sleb128 -3200
+ 41104 c131 00 .byte 0x0
+ 41105 c132 00 .byte 0x0
+ 41106 c133 00 .byte 0x0
+ 41107 c134 00 .byte 0x0
+ 41108 c135 36 .uleb128 0x36
+ 41109 c136 00000000 .quad .LBB3608
+ 41109 00000000
+ 41110 c13e 00000000 .quad .LBE3608
+ 41110 00000000
+ 41111 c146 55C10000 .long 0xc155
+ 41112 c14a 34 .uleb128 0x34
+ 41113 c14b 1C0C0000 .long 0xc1c
+ 41114 c14f 04 .byte 0x4
+
GAS LISTING /tmp/ccjbMjHD.s page 1036
+
+
+ 41115 c150 91 .byte 0x91
+ 41116 c151 C0B67F .sleb128 -9408
+ 41117 c154 00 .byte 0x0
+ 41118 c155 31 .uleb128 0x31
+ 41119 c156 4A0E0000 .long 0xe4a
+ 41120 c15a 00000000 .quad .LBB3609
+ 41120 00000000
+ 41121 c162 00000000 .quad .LBE3609
+ 41121 00000000
+ 41122 c16a 02 .byte 0x2
+ 41123 c16b 9406 .value 0x694
+ 41124 c16d F2C10000 .long 0xc1f2
+ 41125 c171 32 .uleb128 0x32
+ 41126 c172 5C0E0000 .long 0xe5c
+ 41127 c176 03 .byte 0x3
+ 41128 c177 91 .byte 0x91
+ 41129 c178 9067 .sleb128 -3184
+ 41130 c17a 33 .uleb128 0x33
+ 41131 c17b 00000000 .quad .LBB3610
+ 41131 00000000
+ 41132 c183 00000000 .quad .LBE3610
+ 41132 00000000
+ 41133 c18b 34 .uleb128 0x34
+ 41134 c18c 680E0000 .long 0xe68
+ 41135 c190 09 .byte 0x9
+ 41136 c191 03 .byte 0x3
+ 41137 c192 00000000 .quad ShiftRowTable.7385
+ 41137 00000000
+ 41138 c19a 35 .uleb128 0x35
+ 41139 c19b A00D0000 .long 0xda0
+ 41140 c19f 00000000 .quad .LBB3611
+ 41140 00000000
+ 41141 c1a7 00000000 .quad .LBE3611
+ 41141 00000000
+ 41142 c1af 02 .byte 0x2
+ 41143 c1b0 9B02 .value 0x29b
+ 41144 c1b2 32 .uleb128 0x32
+ 41145 c1b3 BE0D0000 .long 0xdbe
+ 41146 c1b7 03 .byte 0x3
+ 41147 c1b8 91 .byte 0x91
+ 41148 c1b9 A067 .sleb128 -3168
+ 41149 c1bb 32 .uleb128 0x32
+ 41150 c1bc B20D0000 .long 0xdb2
+ 41151 c1c0 03 .byte 0x3
+ 41152 c1c1 91 .byte 0x91
+ 41153 c1c2 B067 .sleb128 -3152
+ 41154 c1c4 35 .uleb128 0x35
+ 41155 c1c5 CB0D0000 .long 0xdcb
+ 41156 c1c9 00000000 .quad .LBB3613
+ 41156 00000000
+ 41157 c1d1 00000000 .quad .LBE3613
+ 41157 00000000
+ 41158 c1d9 02 .byte 0x2
+ 41159 c1da 7501 .value 0x175
+ 41160 c1dc 32 .uleb128 0x32
+ 41161 c1dd E90D0000 .long 0xde9
+ 41162 c1e1 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1037
+
+
+ 41163 c1e2 91 .byte 0x91
+ 41164 c1e3 C067 .sleb128 -3136
+ 41165 c1e5 32 .uleb128 0x32
+ 41166 c1e6 DD0D0000 .long 0xddd
+ 41167 c1ea 03 .byte 0x3
+ 41168 c1eb 91 .byte 0x91
+ 41169 c1ec D067 .sleb128 -3120
+ 41170 c1ee 00 .byte 0x0
+ 41171 c1ef 00 .byte 0x0
+ 41172 c1f0 00 .byte 0x0
+ 41173 c1f1 00 .byte 0x0
+ 41174 c1f2 36 .uleb128 0x36
+ 41175 c1f3 00000000 .quad .LBB3615
+ 41175 00000000
+ 41176 c1fb 00000000 .quad .LBE3615
+ 41176 00000000
+ 41177 c203 12C20000 .long 0xc212
+ 41178 c207 34 .uleb128 0x34
+ 41179 c208 2C0C0000 .long 0xc2c
+ 41180 c20c 04 .byte 0x4
+ 41181 c20d 91 .byte 0x91
+ 41182 c20e B0B67F .sleb128 -9424
+ 41183 c211 00 .byte 0x0
+ 41184 c212 31 .uleb128 0x31
+ 41185 c213 860E0000 .long 0xe86
+ 41186 c217 00000000 .quad .LBB3616
+ 41186 00000000
+ 41187 c21f 00000000 .quad .LBE3616
+ 41187 00000000
+ 41188 c227 02 .byte 0x2
+ 41189 c228 9606 .value 0x696
+ 41190 c22a 41C20000 .long 0xc241
+ 41191 c22e 32 .uleb128 0x32
+ 41192 c22f A10E0000 .long 0xea1
+ 41193 c233 03 .byte 0x3
+ 41194 c234 91 .byte 0x91
+ 41195 c235 E067 .sleb128 -3104
+ 41196 c237 32 .uleb128 0x32
+ 41197 c238 970E0000 .long 0xe97
+ 41198 c23c 03 .byte 0x3
+ 41199 c23d 91 .byte 0x91
+ 41200 c23e F067 .sleb128 -3088
+ 41201 c240 00 .byte 0x0
+ 41202 c241 36 .uleb128 0x36
+ 41203 c242 00000000 .quad .LBB3618
+ 41203 00000000
+ 41204 c24a 00000000 .quad .LBE3618
+ 41204 00000000
+ 41205 c252 61C20000 .long 0xc261
+ 41206 c256 34 .uleb128 0x34
+ 41207 c257 3C0C0000 .long 0xc3c
+ 41208 c25b 04 .byte 0x4
+ 41209 c25c 91 .byte 0x91
+ 41210 c25d A0B67F .sleb128 -9440
+ 41211 c260 00 .byte 0x0
+ 41212 c261 31 .uleb128 0x31
+ 41213 c262 AC0E0000 .long 0xeac
+
GAS LISTING /tmp/ccjbMjHD.s page 1038
+
+
+ 41214 c266 00000000 .quad .LBB3619
+ 41214 00000000
+ 41215 c26e 00000000 .quad .LBE3619
+ 41215 00000000
+ 41216 c276 02 .byte 0x2
+ 41217 c277 9806 .value 0x698
+ 41218 c279 B2C20000 .long 0xc2b2
+ 41219 c27d 32 .uleb128 0x32
+ 41220 c27e BE0E0000 .long 0xebe
+ 41221 c282 03 .byte 0x3
+ 41222 c283 91 .byte 0x91
+ 41223 c284 8068 .sleb128 -3072
+ 41224 c286 35 .uleb128 0x35
+ 41225 c287 CB0E0000 .long 0xecb
+ 41226 c28b 00000000 .quad .LBB3621
+ 41226 00000000
+ 41227 c293 00000000 .quad .LBE3621
+ 41227 00000000
+ 41228 c29b 02 .byte 0x2
+ 41229 c29c 4905 .value 0x549
+ 41230 c29e 32 .uleb128 0x32
+ 41231 c29f E90E0000 .long 0xee9
+ 41232 c2a3 03 .byte 0x3
+ 41233 c2a4 91 .byte 0x91
+ 41234 c2a5 9C68 .sleb128 -3044
+ 41235 c2a7 32 .uleb128 0x32
+ 41236 c2a8 DD0E0000 .long 0xedd
+ 41237 c2ac 03 .byte 0x3
+ 41238 c2ad 91 .byte 0x91
+ 41239 c2ae A068 .sleb128 -3040
+ 41240 c2b0 00 .byte 0x0
+ 41241 c2b1 00 .byte 0x0
+ 41242 c2b2 33 .uleb128 0x33
+ 41243 c2b3 00000000 .quad .LBB3623
+ 41243 00000000
+ 41244 c2bb 00000000 .quad .LBE3623
+ 41244 00000000
+ 41245 c2c3 34 .uleb128 0x34
+ 41246 c2c4 480C0000 .long 0xc48
+ 41247 c2c8 04 .byte 0x4
+ 41248 c2c9 91 .byte 0x91
+ 41249 c2ca 90B67F .sleb128 -9456
+ 41250 c2cd 00 .byte 0x0
+ 41251 c2ce 00 .byte 0x0
+ 41252 c2cf 00 .byte 0x0
+ 41253 c2d0 31 .uleb128 0x31
+ 41254 c2d1 F60E0000 .long 0xef6
+ 41255 c2d5 00000000 .quad .LBB3624
+ 41255 00000000
+ 41256 c2dd 00000000 .quad .LBE3624
+ 41256 00000000
+ 41257 c2e5 02 .byte 0x2
+ 41258 c2e6 8E07 .value 0x78e
+ 41259 c2e8 E5C40000 .long 0xc4e5
+ 41260 c2ec 32 .uleb128 0x32
+ 41261 c2ed 080F0000 .long 0xf08
+ 41262 c2f1 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1039
+
+
+ 41263 c2f2 91 .byte 0x91
+ 41264 c2f3 B068 .sleb128 -3024
+ 41265 c2f5 33 .uleb128 0x33
+ 41266 c2f6 00000000 .quad .LBB3625
+ 41266 00000000
+ 41267 c2fe 00000000 .quad .LBE3625
+ 41267 00000000
+ 41268 c306 34 .uleb128 0x34
+ 41269 c307 140F0000 .long 0xf14
+ 41270 c30b 04 .byte 0x4
+ 41271 c30c 76 .byte 0x76
+ 41272 c30d 80B27F .sleb128 -9984
+ 41273 c310 31 .uleb128 0x31
+ 41274 c311 210F0000 .long 0xf21
+ 41275 c315 00000000 .quad .LBB3626
+ 41275 00000000
+ 41276 c31d 00000000 .quad .LBE3626
+ 41276 00000000
+ 41277 c325 02 .byte 0x2
+ 41278 c326 1F06 .value 0x61f
+ 41279 c328 ADC30000 .long 0xc3ad
+ 41280 c32c 32 .uleb128 0x32
+ 41281 c32d 330F0000 .long 0xf33
+ 41282 c331 03 .byte 0x3
+ 41283 c332 91 .byte 0x91
+ 41284 c333 C068 .sleb128 -3008
+ 41285 c335 33 .uleb128 0x33
+ 41286 c336 00000000 .quad .LBB3627
+ 41286 00000000
+ 41287 c33e 00000000 .quad .LBE3627
+ 41287 00000000
+ 41288 c346 34 .uleb128 0x34
+ 41289 c347 3F0F0000 .long 0xf3f
+ 41290 c34b 09 .byte 0x9
+ 41291 c34c 03 .byte 0x3
+ 41292 c34d 00000000 .quad mask.7943
+ 41292 00000000
+ 41293 c355 35 .uleb128 0x35
+ 41294 c356 A00D0000 .long 0xda0
+ 41295 c35a 00000000 .quad .LBB3628
+ 41295 00000000
+ 41296 c362 00000000 .quad .LBE3628
+ 41296 00000000
+ 41297 c36a 02 .byte 0x2
+ 41298 c36b FE04 .value 0x4fe
+ 41299 c36d 32 .uleb128 0x32
+ 41300 c36e BE0D0000 .long 0xdbe
+ 41301 c372 03 .byte 0x3
+ 41302 c373 91 .byte 0x91
+ 41303 c374 D068 .sleb128 -2992
+ 41304 c376 32 .uleb128 0x32
+ 41305 c377 B20D0000 .long 0xdb2
+ 41306 c37b 03 .byte 0x3
+ 41307 c37c 91 .byte 0x91
+ 41308 c37d E068 .sleb128 -2976
+ 41309 c37f 35 .uleb128 0x35
+ 41310 c380 CB0D0000 .long 0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s page 1040
+
+
+ 41311 c384 00000000 .quad .LBB3630
+ 41311 00000000
+ 41312 c38c 00000000 .quad .LBE3630
+ 41312 00000000
+ 41313 c394 02 .byte 0x2
+ 41314 c395 7501 .value 0x175
+ 41315 c397 32 .uleb128 0x32
+ 41316 c398 E90D0000 .long 0xde9
+ 41317 c39c 03 .byte 0x3
+ 41318 c39d 91 .byte 0x91
+ 41319 c39e F068 .sleb128 -2960
+ 41320 c3a0 32 .uleb128 0x32
+ 41321 c3a1 DD0D0000 .long 0xddd
+ 41322 c3a5 03 .byte 0x3
+ 41323 c3a6 91 .byte 0x91
+ 41324 c3a7 8069 .sleb128 -2944
+ 41325 c3a9 00 .byte 0x0
+ 41326 c3aa 00 .byte 0x0
+ 41327 c3ab 00 .byte 0x0
+ 41328 c3ac 00 .byte 0x0
+ 41329 c3ad 31 .uleb128 0x31
+ 41330 c3ae 210F0000 .long 0xf21
+ 41331 c3b2 00000000 .quad .LBB3632
+ 41331 00000000
+ 41332 c3ba 00000000 .quad .LBE3632
+ 41332 00000000
+ 41333 c3c2 02 .byte 0x2
+ 41334 c3c3 2006 .value 0x620
+ 41335 c3c5 4AC40000 .long 0xc44a
+ 41336 c3c9 32 .uleb128 0x32
+ 41337 c3ca 330F0000 .long 0xf33
+ 41338 c3ce 03 .byte 0x3
+ 41339 c3cf 91 .byte 0x91
+ 41340 c3d0 9069 .sleb128 -2928
+ 41341 c3d2 33 .uleb128 0x33
+ 41342 c3d3 00000000 .quad .LBB3633
+ 41342 00000000
+ 41343 c3db 00000000 .quad .LBE3633
+ 41343 00000000
+ 41344 c3e3 34 .uleb128 0x34
+ 41345 c3e4 3F0F0000 .long 0xf3f
+ 41346 c3e8 09 .byte 0x9
+ 41347 c3e9 03 .byte 0x3
+ 41348 c3ea 00000000 .quad mask.7943
+ 41348 00000000
+ 41349 c3f2 35 .uleb128 0x35
+ 41350 c3f3 A00D0000 .long 0xda0
+ 41351 c3f7 00000000 .quad .LBB3634
+ 41351 00000000
+ 41352 c3ff 00000000 .quad .LBE3634
+ 41352 00000000
+ 41353 c407 02 .byte 0x2
+ 41354 c408 FE04 .value 0x4fe
+ 41355 c40a 32 .uleb128 0x32
+ 41356 c40b BE0D0000 .long 0xdbe
+ 41357 c40f 03 .byte 0x3
+ 41358 c410 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1041
+
+
+ 41359 c411 A069 .sleb128 -2912
+ 41360 c413 32 .uleb128 0x32
+ 41361 c414 B20D0000 .long 0xdb2
+ 41362 c418 03 .byte 0x3
+ 41363 c419 91 .byte 0x91
+ 41364 c41a B069 .sleb128 -2896
+ 41365 c41c 35 .uleb128 0x35
+ 41366 c41d CB0D0000 .long 0xdcb
+ 41367 c421 00000000 .quad .LBB3636
+ 41367 00000000
+ 41368 c429 00000000 .quad .LBE3636
+ 41368 00000000
+ 41369 c431 02 .byte 0x2
+ 41370 c432 7501 .value 0x175
+ 41371 c434 32 .uleb128 0x32
+ 41372 c435 E90D0000 .long 0xde9
+ 41373 c439 03 .byte 0x3
+ 41374 c43a 91 .byte 0x91
+ 41375 c43b C069 .sleb128 -2880
+ 41376 c43d 32 .uleb128 0x32
+ 41377 c43e DD0D0000 .long 0xddd
+ 41378 c442 03 .byte 0x3
+ 41379 c443 91 .byte 0x91
+ 41380 c444 D069 .sleb128 -2864
+ 41381 c446 00 .byte 0x0
+ 41382 c447 00 .byte 0x0
+ 41383 c448 00 .byte 0x0
+ 41384 c449 00 .byte 0x0
+ 41385 c44a 35 .uleb128 0x35
+ 41386 c44b 210F0000 .long 0xf21
+ 41387 c44f 00000000 .quad .LBB3638
+ 41387 00000000
+ 41388 c457 00000000 .quad .LBE3638
+ 41388 00000000
+ 41389 c45f 02 .byte 0x2
+ 41390 c460 2106 .value 0x621
+ 41391 c462 32 .uleb128 0x32
+ 41392 c463 330F0000 .long 0xf33
+ 41393 c467 03 .byte 0x3
+ 41394 c468 91 .byte 0x91
+ 41395 c469 E069 .sleb128 -2848
+ 41396 c46b 33 .uleb128 0x33
+ 41397 c46c 00000000 .quad .LBB3639
+ 41397 00000000
+ 41398 c474 00000000 .quad .LBE3639
+ 41398 00000000
+ 41399 c47c 34 .uleb128 0x34
+ 41400 c47d 3F0F0000 .long 0xf3f
+ 41401 c481 09 .byte 0x9
+ 41402 c482 03 .byte 0x3
+ 41403 c483 00000000 .quad mask.7943
+ 41403 00000000
+ 41404 c48b 35 .uleb128 0x35
+ 41405 c48c A00D0000 .long 0xda0
+ 41406 c490 00000000 .quad .LBB3640
+ 41406 00000000
+ 41407 c498 00000000 .quad .LBE3640
+
GAS LISTING /tmp/ccjbMjHD.s page 1042
+
+
+ 41407 00000000
+ 41408 c4a0 02 .byte 0x2
+ 41409 c4a1 FE04 .value 0x4fe
+ 41410 c4a3 32 .uleb128 0x32
+ 41411 c4a4 BE0D0000 .long 0xdbe
+ 41412 c4a8 03 .byte 0x3
+ 41413 c4a9 91 .byte 0x91
+ 41414 c4aa F069 .sleb128 -2832
+ 41415 c4ac 32 .uleb128 0x32
+ 41416 c4ad B20D0000 .long 0xdb2
+ 41417 c4b1 03 .byte 0x3
+ 41418 c4b2 91 .byte 0x91
+ 41419 c4b3 806A .sleb128 -2816
+ 41420 c4b5 35 .uleb128 0x35
+ 41421 c4b6 CB0D0000 .long 0xdcb
+ 41422 c4ba 00000000 .quad .LBB3642
+ 41422 00000000
+ 41423 c4c2 00000000 .quad .LBE3642
+ 41423 00000000
+ 41424 c4ca 02 .byte 0x2
+ 41425 c4cb 7501 .value 0x175
+ 41426 c4cd 32 .uleb128 0x32
+ 41427 c4ce E90D0000 .long 0xde9
+ 41428 c4d2 03 .byte 0x3
+ 41429 c4d3 91 .byte 0x91
+ 41430 c4d4 906A .sleb128 -2800
+ 41431 c4d6 32 .uleb128 0x32
+ 41432 c4d7 DD0D0000 .long 0xddd
+ 41433 c4db 03 .byte 0x3
+ 41434 c4dc 91 .byte 0x91
+ 41435 c4dd A06A .sleb128 -2784
+ 41436 c4df 00 .byte 0x0
+ 41437 c4e0 00 .byte 0x0
+ 41438 c4e1 00 .byte 0x0
+ 41439 c4e2 00 .byte 0x0
+ 41440 c4e3 00 .byte 0x0
+ 41441 c4e4 00 .byte 0x0
+ 41442 c4e5 31 .uleb128 0x31
+ 41443 c4e6 860E0000 .long 0xe86
+ 41444 c4ea 00000000 .quad .LBB3644
+ 41444 00000000
+ 41445 c4f2 00000000 .quad .LBE3644
+ 41445 00000000
+ 41446 c4fa 02 .byte 0x2
+ 41447 c4fb 8E07 .value 0x78e
+ 41448 c4fd 14C50000 .long 0xc514
+ 41449 c501 32 .uleb128 0x32
+ 41450 c502 A10E0000 .long 0xea1
+ 41451 c506 03 .byte 0x3
+ 41452 c507 91 .byte 0x91
+ 41453 c508 B06A .sleb128 -2768
+ 41454 c50a 32 .uleb128 0x32
+ 41455 c50b 970E0000 .long 0xe97
+ 41456 c50f 03 .byte 0x3
+ 41457 c510 91 .byte 0x91
+ 41458 c511 C06A .sleb128 -2752
+ 41459 c513 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1043
+
+
+ 41460 c514 31 .uleb128 0x31
+ 41461 c515 8F940000 .long 0x948f
+ 41462 c519 00000000 .quad .LBB3646
+ 41462 00000000
+ 41463 c521 00000000 .quad .LBE3646
+ 41463 00000000
+ 41464 c529 02 .byte 0x2
+ 41465 c52a 8F07 .value 0x78f
+ 41466 c52c A6C50000 .long 0xc5a6
+ 41467 c530 32 .uleb128 0x32
+ 41468 c531 A1940000 .long 0x94a1
+ 41469 c535 03 .byte 0x3
+ 41470 c536 91 .byte 0x91
+ 41471 c537 D06A .sleb128 -2736
+ 41472 c539 33 .uleb128 0x33
+ 41473 c53a 00000000 .quad .LBB3647
+ 41473 00000000
+ 41474 c542 00000000 .quad .LBE3647
+ 41474 00000000
+ 41475 c54a 34 .uleb128 0x34
+ 41476 c54b AD940000 .long 0x94ad
+ 41477 c54f 04 .byte 0x4
+ 41478 c550 91 .byte 0x91
+ 41479 c551 E0B67F .sleb128 -9376
+ 41480 c554 34 .uleb128 0x34
+ 41481 c555 B7940000 .long 0x94b7
+ 41482 c559 03 .byte 0x3
+ 41483 c55a 91 .byte 0x91
+ 41484 c55b E46A .sleb128 -2716
+ 41485 c55d 35 .uleb128 0x35
+ 41486 c55e BE560000 .long 0x56be
+ 41487 c562 00000000 .quad .LBB3648
+ 41487 00000000
+ 41488 c56a 00000000 .quad .LBE3648
+ 41488 00000000
+ 41489 c572 02 .byte 0x2
+ 41490 c573 7906 .value 0x679
+ 41491 c575 32 .uleb128 0x32
+ 41492 c576 D0560000 .long 0x56d0
+ 41493 c57a 03 .byte 0x3
+ 41494 c57b 91 .byte 0x91
+ 41495 c57c E86A .sleb128 -2712
+ 41496 c57e 33 .uleb128 0x33
+ 41497 c57f 00000000 .quad .LBB3649
+ 41497 00000000
+ 41498 c587 00000000 .quad .LBE3649
+ 41498 00000000
+ 41499 c58f 34 .uleb128 0x34
+ 41500 c590 DA560000 .long 0x56da
+ 41501 c594 04 .byte 0x4
+ 41502 c595 91 .byte 0x91
+ 41503 c596 D0B67F .sleb128 -9392
+ 41504 c599 34 .uleb128 0x34
+ 41505 c59a E6560000 .long 0x56e6
+ 41506 c59e 03 .byte 0x3
+ 41507 c59f 91 .byte 0x91
+ 41508 c5a0 EC6A .sleb128 -2708
+
GAS LISTING /tmp/ccjbMjHD.s page 1044
+
+
+ 41509 c5a2 00 .byte 0x0
+ 41510 c5a3 00 .byte 0x0
+ 41511 c5a4 00 .byte 0x0
+ 41512 c5a5 00 .byte 0x0
+ 41513 c5a6 31 .uleb128 0x31
+ 41514 c5a7 F60E0000 .long 0xef6
+ 41515 c5ab 00000000 .quad .LBB3650
+ 41515 00000000
+ 41516 c5b3 00000000 .quad .LBE3650
+ 41516 00000000
+ 41517 c5bb 02 .byte 0x2
+ 41518 c5bc 8F07 .value 0x78f
+ 41519 c5be BBC70000 .long 0xc7bb
+ 41520 c5c2 32 .uleb128 0x32
+ 41521 c5c3 080F0000 .long 0xf08
+ 41522 c5c7 03 .byte 0x3
+ 41523 c5c8 91 .byte 0x91
+ 41524 c5c9 F06A .sleb128 -2704
+ 41525 c5cb 33 .uleb128 0x33
+ 41526 c5cc 00000000 .quad .LBB3651
+ 41526 00000000
+ 41527 c5d4 00000000 .quad .LBE3651
+ 41527 00000000
+ 41528 c5dc 34 .uleb128 0x34
+ 41529 c5dd 140F0000 .long 0xf14
+ 41530 c5e1 04 .byte 0x4
+ 41531 c5e2 76 .byte 0x76
+ 41532 c5e3 90B27F .sleb128 -9968
+ 41533 c5e6 31 .uleb128 0x31
+ 41534 c5e7 210F0000 .long 0xf21
+ 41535 c5eb 00000000 .quad .LBB3652
+ 41535 00000000
+ 41536 c5f3 00000000 .quad .LBE3652
+ 41536 00000000
+ 41537 c5fb 02 .byte 0x2
+ 41538 c5fc 1F06 .value 0x61f
+ 41539 c5fe 83C60000 .long 0xc683
+ 41540 c602 32 .uleb128 0x32
+ 41541 c603 330F0000 .long 0xf33
+ 41542 c607 03 .byte 0x3
+ 41543 c608 91 .byte 0x91
+ 41544 c609 806B .sleb128 -2688
+ 41545 c60b 33 .uleb128 0x33
+ 41546 c60c 00000000 .quad .LBB3653
+ 41546 00000000
+ 41547 c614 00000000 .quad .LBE3653
+ 41547 00000000
+ 41548 c61c 34 .uleb128 0x34
+ 41549 c61d 3F0F0000 .long 0xf3f
+ 41550 c621 09 .byte 0x9
+ 41551 c622 03 .byte 0x3
+ 41552 c623 00000000 .quad mask.7943
+ 41552 00000000
+ 41553 c62b 35 .uleb128 0x35
+ 41554 c62c A00D0000 .long 0xda0
+ 41555 c630 00000000 .quad .LBB3654
+ 41555 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1045
+
+
+ 41556 c638 00000000 .quad .LBE3654
+ 41556 00000000
+ 41557 c640 02 .byte 0x2
+ 41558 c641 FE04 .value 0x4fe
+ 41559 c643 32 .uleb128 0x32
+ 41560 c644 BE0D0000 .long 0xdbe
+ 41561 c648 03 .byte 0x3
+ 41562 c649 91 .byte 0x91
+ 41563 c64a 906B .sleb128 -2672
+ 41564 c64c 32 .uleb128 0x32
+ 41565 c64d B20D0000 .long 0xdb2
+ 41566 c651 03 .byte 0x3
+ 41567 c652 91 .byte 0x91
+ 41568 c653 A06B .sleb128 -2656
+ 41569 c655 35 .uleb128 0x35
+ 41570 c656 CB0D0000 .long 0xdcb
+ 41571 c65a 00000000 .quad .LBB3656
+ 41571 00000000
+ 41572 c662 00000000 .quad .LBE3656
+ 41572 00000000
+ 41573 c66a 02 .byte 0x2
+ 41574 c66b 7501 .value 0x175
+ 41575 c66d 32 .uleb128 0x32
+ 41576 c66e E90D0000 .long 0xde9
+ 41577 c672 03 .byte 0x3
+ 41578 c673 91 .byte 0x91
+ 41579 c674 B06B .sleb128 -2640
+ 41580 c676 32 .uleb128 0x32
+ 41581 c677 DD0D0000 .long 0xddd
+ 41582 c67b 03 .byte 0x3
+ 41583 c67c 91 .byte 0x91
+ 41584 c67d C06B .sleb128 -2624
+ 41585 c67f 00 .byte 0x0
+ 41586 c680 00 .byte 0x0
+ 41587 c681 00 .byte 0x0
+ 41588 c682 00 .byte 0x0
+ 41589 c683 31 .uleb128 0x31
+ 41590 c684 210F0000 .long 0xf21
+ 41591 c688 00000000 .quad .LBB3658
+ 41591 00000000
+ 41592 c690 00000000 .quad .LBE3658
+ 41592 00000000
+ 41593 c698 02 .byte 0x2
+ 41594 c699 2006 .value 0x620
+ 41595 c69b 20C70000 .long 0xc720
+ 41596 c69f 32 .uleb128 0x32
+ 41597 c6a0 330F0000 .long 0xf33
+ 41598 c6a4 03 .byte 0x3
+ 41599 c6a5 91 .byte 0x91
+ 41600 c6a6 D06B .sleb128 -2608
+ 41601 c6a8 33 .uleb128 0x33
+ 41602 c6a9 00000000 .quad .LBB3659
+ 41602 00000000
+ 41603 c6b1 00000000 .quad .LBE3659
+ 41603 00000000
+ 41604 c6b9 34 .uleb128 0x34
+ 41605 c6ba 3F0F0000 .long 0xf3f
+
GAS LISTING /tmp/ccjbMjHD.s page 1046
+
+
+ 41606 c6be 09 .byte 0x9
+ 41607 c6bf 03 .byte 0x3
+ 41608 c6c0 00000000 .quad mask.7943
+ 41608 00000000
+ 41609 c6c8 35 .uleb128 0x35
+ 41610 c6c9 A00D0000 .long 0xda0
+ 41611 c6cd 00000000 .quad .LBB3660
+ 41611 00000000
+ 41612 c6d5 00000000 .quad .LBE3660
+ 41612 00000000
+ 41613 c6dd 02 .byte 0x2
+ 41614 c6de FE04 .value 0x4fe
+ 41615 c6e0 32 .uleb128 0x32
+ 41616 c6e1 BE0D0000 .long 0xdbe
+ 41617 c6e5 03 .byte 0x3
+ 41618 c6e6 91 .byte 0x91
+ 41619 c6e7 E06B .sleb128 -2592
+ 41620 c6e9 32 .uleb128 0x32
+ 41621 c6ea B20D0000 .long 0xdb2
+ 41622 c6ee 03 .byte 0x3
+ 41623 c6ef 91 .byte 0x91
+ 41624 c6f0 F06B .sleb128 -2576
+ 41625 c6f2 35 .uleb128 0x35
+ 41626 c6f3 CB0D0000 .long 0xdcb
+ 41627 c6f7 00000000 .quad .LBB3662
+ 41627 00000000
+ 41628 c6ff 00000000 .quad .LBE3662
+ 41628 00000000
+ 41629 c707 02 .byte 0x2
+ 41630 c708 7501 .value 0x175
+ 41631 c70a 32 .uleb128 0x32
+ 41632 c70b E90D0000 .long 0xde9
+ 41633 c70f 03 .byte 0x3
+ 41634 c710 91 .byte 0x91
+ 41635 c711 806C .sleb128 -2560
+ 41636 c713 32 .uleb128 0x32
+ 41637 c714 DD0D0000 .long 0xddd
+ 41638 c718 03 .byte 0x3
+ 41639 c719 91 .byte 0x91
+ 41640 c71a 906C .sleb128 -2544
+ 41641 c71c 00 .byte 0x0
+ 41642 c71d 00 .byte 0x0
+ 41643 c71e 00 .byte 0x0
+ 41644 c71f 00 .byte 0x0
+ 41645 c720 35 .uleb128 0x35
+ 41646 c721 210F0000 .long 0xf21
+ 41647 c725 00000000 .quad .LBB3664
+ 41647 00000000
+ 41648 c72d 00000000 .quad .LBE3664
+ 41648 00000000
+ 41649 c735 02 .byte 0x2
+ 41650 c736 2106 .value 0x621
+ 41651 c738 32 .uleb128 0x32
+ 41652 c739 330F0000 .long 0xf33
+ 41653 c73d 03 .byte 0x3
+ 41654 c73e 91 .byte 0x91
+ 41655 c73f A06C .sleb128 -2528
+
GAS LISTING /tmp/ccjbMjHD.s page 1047
+
+
+ 41656 c741 33 .uleb128 0x33
+ 41657 c742 00000000 .quad .LBB3665
+ 41657 00000000
+ 41658 c74a 00000000 .quad .LBE3665
+ 41658 00000000
+ 41659 c752 34 .uleb128 0x34
+ 41660 c753 3F0F0000 .long 0xf3f
+ 41661 c757 09 .byte 0x9
+ 41662 c758 03 .byte 0x3
+ 41663 c759 00000000 .quad mask.7943
+ 41663 00000000
+ 41664 c761 35 .uleb128 0x35
+ 41665 c762 A00D0000 .long 0xda0
+ 41666 c766 00000000 .quad .LBB3666
+ 41666 00000000
+ 41667 c76e 00000000 .quad .LBE3666
+ 41667 00000000
+ 41668 c776 02 .byte 0x2
+ 41669 c777 FE04 .value 0x4fe
+ 41670 c779 32 .uleb128 0x32
+ 41671 c77a BE0D0000 .long 0xdbe
+ 41672 c77e 03 .byte 0x3
+ 41673 c77f 91 .byte 0x91
+ 41674 c780 B06C .sleb128 -2512
+ 41675 c782 32 .uleb128 0x32
+ 41676 c783 B20D0000 .long 0xdb2
+ 41677 c787 03 .byte 0x3
+ 41678 c788 91 .byte 0x91
+ 41679 c789 C06C .sleb128 -2496
+ 41680 c78b 35 .uleb128 0x35
+ 41681 c78c CB0D0000 .long 0xdcb
+ 41682 c790 00000000 .quad .LBB3668
+ 41682 00000000
+ 41683 c798 00000000 .quad .LBE3668
+ 41683 00000000
+ 41684 c7a0 02 .byte 0x2
+ 41685 c7a1 7501 .value 0x175
+ 41686 c7a3 32 .uleb128 0x32
+ 41687 c7a4 E90D0000 .long 0xde9
+ 41688 c7a8 03 .byte 0x3
+ 41689 c7a9 91 .byte 0x91
+ 41690 c7aa D06C .sleb128 -2480
+ 41691 c7ac 32 .uleb128 0x32
+ 41692 c7ad DD0D0000 .long 0xddd
+ 41693 c7b1 03 .byte 0x3
+ 41694 c7b2 91 .byte 0x91
+ 41695 c7b3 E06C .sleb128 -2464
+ 41696 c7b5 00 .byte 0x0
+ 41697 c7b6 00 .byte 0x0
+ 41698 c7b7 00 .byte 0x0
+ 41699 c7b8 00 .byte 0x0
+ 41700 c7b9 00 .byte 0x0
+ 41701 c7ba 00 .byte 0x0
+ 41702 c7bb 31 .uleb128 0x31
+ 41703 c7bc 860E0000 .long 0xe86
+ 41704 c7c0 00000000 .quad .LBB3670
+ 41704 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1048
+
+
+ 41705 c7c8 00000000 .quad .LBE3670
+ 41705 00000000
+ 41706 c7d0 02 .byte 0x2
+ 41707 c7d1 8F07 .value 0x78f
+ 41708 c7d3 EAC70000 .long 0xc7ea
+ 41709 c7d7 32 .uleb128 0x32
+ 41710 c7d8 A10E0000 .long 0xea1
+ 41711 c7dc 03 .byte 0x3
+ 41712 c7dd 91 .byte 0x91
+ 41713 c7de F06C .sleb128 -2448
+ 41714 c7e0 32 .uleb128 0x32
+ 41715 c7e1 970E0000 .long 0xe97
+ 41716 c7e5 03 .byte 0x3
+ 41717 c7e6 91 .byte 0x91
+ 41718 c7e7 806D .sleb128 -2432
+ 41719 c7e9 00 .byte 0x0
+ 41720 c7ea 31 .uleb128 0x31
+ 41721 c7eb D50B0000 .long 0xbd5
+ 41722 c7ef 00000000 .quad .LBB3672
+ 41722 00000000
+ 41723 c7f7 00000000 .quad .LBE3672
+ 41723 00000000
+ 41724 c7ff 02 .byte 0x2
+ 41725 c800 9007 .value 0x790
+ 41726 c802 CDCC0000 .long 0xcccd
+ 41727 c806 32 .uleb128 0x32
+ 41728 c807 F30B0000 .long 0xbf3
+ 41729 c80b 03 .byte 0x3
+ 41730 c80c 91 .byte 0x91
+ 41731 c80d 9C6D .sleb128 -2404
+ 41732 c80f 32 .uleb128 0x32
+ 41733 c810 E70B0000 .long 0xbe7
+ 41734 c814 03 .byte 0x3
+ 41735 c815 91 .byte 0x91
+ 41736 c816 A06D .sleb128 -2400
+ 41737 c818 33 .uleb128 0x33
+ 41738 c819 00000000 .quad .LBB3673
+ 41738 00000000
+ 41739 c821 00000000 .quad .LBE3673
+ 41739 00000000
+ 41740 c829 34 .uleb128 0x34
+ 41741 c82a FF0B0000 .long 0xbff
+ 41742 c82e 04 .byte 0x4
+ 41743 c82f 76 .byte 0x76
+ 41744 c830 B0B27F .sleb128 -9936
+ 41745 c833 34 .uleb128 0x34
+ 41746 c834 0B0C0000 .long 0xc0b
+ 41747 c838 04 .byte 0x4
+ 41748 c839 76 .byte 0x76
+ 41749 c83a A0B27F .sleb128 -9952
+ 41750 c83d 31 .uleb128 0x31
+ 41751 c83e 540C0000 .long 0xc54
+ 41752 c842 00000000 .quad .LBB3674
+ 41752 00000000
+ 41753 c84a 00000000 .quad .LBE3674
+ 41753 00000000
+ 41754 c852 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1049
+
+
+ 41755 c853 9106 .value 0x691
+ 41756 c855 A9C80000 .long 0xc8a9
+ 41757 c859 32 .uleb128 0x32
+ 41758 c85a 7E0C0000 .long 0xc7e
+ 41759 c85e 03 .byte 0x3
+ 41760 c85f 91 .byte 0x91
+ 41761 c860 B86D .sleb128 -2376
+ 41762 c862 32 .uleb128 0x32
+ 41763 c863 720C0000 .long 0xc72
+ 41764 c867 03 .byte 0x3
+ 41765 c868 91 .byte 0x91
+ 41766 c869 BC6D .sleb128 -2372
+ 41767 c86b 32 .uleb128 0x32
+ 41768 c86c 660C0000 .long 0xc66
+ 41769 c870 03 .byte 0x3
+ 41770 c871 91 .byte 0x91
+ 41771 c872 C06D .sleb128 -2368
+ 41772 c874 35 .uleb128 0x35
+ 41773 c875 8B0C0000 .long 0xc8b
+ 41774 c879 00000000 .quad .LBB3676
+ 41774 00000000
+ 41775 c881 00000000 .quad .LBE3676
+ 41775 00000000
+ 41776 c889 02 .byte 0x2
+ 41777 c88a 0702 .value 0x207
+ 41778 c88c 32 .uleb128 0x32
+ 41779 c88d B40C0000 .long 0xcb4
+ 41780 c891 03 .byte 0x3
+ 41781 c892 91 .byte 0x91
+ 41782 c893 D86D .sleb128 -2344
+ 41783 c895 32 .uleb128 0x32
+ 41784 c896 A90C0000 .long 0xca9
+ 41785 c89a 03 .byte 0x3
+ 41786 c89b 91 .byte 0x91
+ 41787 c89c DC6D .sleb128 -2340
+ 41788 c89e 32 .uleb128 0x32
+ 41789 c89f 9D0C0000 .long 0xc9d
+ 41790 c8a3 03 .byte 0x3
+ 41791 c8a4 91 .byte 0x91
+ 41792 c8a5 E06D .sleb128 -2336
+ 41793 c8a7 00 .byte 0x0
+ 41794 c8a8 00 .byte 0x0
+ 41795 c8a9 31 .uleb128 0x31
+ 41796 c8aa C10C0000 .long 0xcc1
+ 41797 c8ae 00000000 .quad .LBB3678
+ 41797 00000000
+ 41798 c8b6 00000000 .quad .LBE3678
+ 41798 00000000
+ 41799 c8be 02 .byte 0x2
+ 41800 c8bf 9206 .value 0x692
+ 41801 c8c1 32CB0000 .long 0xcb32
+ 41802 c8c5 32 .uleb128 0x32
+ 41803 c8c6 D30C0000 .long 0xcd3
+ 41804 c8ca 03 .byte 0x3
+ 41805 c8cb 91 .byte 0x91
+ 41806 c8cc F06D .sleb128 -2320
+ 41807 c8ce 35 .uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s page 1050
+
+
+ 41808 c8cf E00C0000 .long 0xce0
+ 41809 c8d3 00000000 .quad .LBB3680
+ 41809 00000000
+ 41810 c8db 00000000 .quad .LBE3680
+ 41810 00000000
+ 41811 c8e3 02 .byte 0x2
+ 41812 c8e4 7D03 .value 0x37d
+ 41813 c8e6 32 .uleb128 0x32
+ 41814 c8e7 FE0C0000 .long 0xcfe
+ 41815 c8eb 03 .byte 0x3
+ 41816 c8ec 91 .byte 0x91
+ 41817 c8ed 886E .sleb128 -2296
+ 41818 c8ef 32 .uleb128 0x32
+ 41819 c8f0 F20C0000 .long 0xcf2
+ 41820 c8f4 03 .byte 0x3
+ 41821 c8f5 91 .byte 0x91
+ 41822 c8f6 906E .sleb128 -2288
+ 41823 c8f8 33 .uleb128 0x33
+ 41824 c8f9 00000000 .quad .LBB3681
+ 41824 00000000
+ 41825 c901 00000000 .quad .LBE3681
+ 41825 00000000
+ 41826 c909 34 .uleb128 0x34
+ 41827 c90a 0A0D0000 .long 0xd0a
+ 41828 c90e 03 .byte 0x3
+ 41829 c90f 91 .byte 0x91
+ 41830 c910 E06E .sleb128 -2208
+ 41831 c912 34 .uleb128 0x34
+ 41832 c913 150D0000 .long 0xd15
+ 41833 c917 03 .byte 0x3
+ 41834 c918 91 .byte 0x91
+ 41835 c919 D06E .sleb128 -2224
+ 41836 c91b 34 .uleb128 0x34
+ 41837 c91c 200D0000 .long 0xd20
+ 41838 c920 03 .byte 0x3
+ 41839 c921 91 .byte 0x91
+ 41840 c922 C06E .sleb128 -2240
+ 41841 c924 34 .uleb128 0x34
+ 41842 c925 2C0D0000 .long 0xd2c
+ 41843 c929 03 .byte 0x3
+ 41844 c92a 91 .byte 0x91
+ 41845 c92b B06E .sleb128 -2256
+ 41846 c92d 34 .uleb128 0x34
+ 41847 c92e 380D0000 .long 0xd38
+ 41848 c932 03 .byte 0x3
+ 41849 c933 91 .byte 0x91
+ 41850 c934 AC6E .sleb128 -2260
+ 41851 c936 31 .uleb128 0x31
+ 41852 c937 4F0D0000 .long 0xd4f
+ 41853 c93b 00000000 .quad .LBB3682
+ 41853 00000000
+ 41854 c943 00000000 .quad .LBE3682
+ 41854 00000000
+ 41855 c94b 02 .byte 0x2
+ 41856 c94c 5603 .value 0x356
+ 41857 c94e 65C90000 .long 0xc965
+ 41858 c952 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 1051
+
+
+ 41859 c953 6A0D0000 .long 0xd6a
+ 41860 c957 03 .byte 0x3
+ 41861 c958 91 .byte 0x91
+ 41862 c959 F06E .sleb128 -2192
+ 41863 c95b 32 .uleb128 0x32
+ 41864 c95c 600D0000 .long 0xd60
+ 41865 c960 03 .byte 0x3
+ 41866 c961 91 .byte 0x91
+ 41867 c962 806F .sleb128 -2176
+ 41868 c964 00 .byte 0x0
+ 41869 c965 31 .uleb128 0x31
+ 41870 c966 750D0000 .long 0xd75
+ 41871 c96a 00000000 .quad .LBB3684
+ 41871 00000000
+ 41872 c972 00000000 .quad .LBE3684
+ 41872 00000000
+ 41873 c97a 02 .byte 0x2
+ 41874 c97b 5903 .value 0x359
+ 41875 c97d 94C90000 .long 0xc994
+ 41876 c981 32 .uleb128 0x32
+ 41877 c982 930D0000 .long 0xd93
+ 41878 c986 03 .byte 0x3
+ 41879 c987 91 .byte 0x91
+ 41880 c988 9C6F .sleb128 -2148
+ 41881 c98a 32 .uleb128 0x32
+ 41882 c98b 870D0000 .long 0xd87
+ 41883 c98f 03 .byte 0x3
+ 41884 c990 91 .byte 0x91
+ 41885 c991 A06F .sleb128 -2144
+ 41886 c993 00 .byte 0x0
+ 41887 c994 31 .uleb128 0x31
+ 41888 c995 4F0D0000 .long 0xd4f
+ 41889 c999 00000000 .quad .LBB3686
+ 41889 00000000
+ 41890 c9a1 00000000 .quad .LBE3686
+ 41890 00000000
+ 41891 c9a9 02 .byte 0x2
+ 41892 c9aa 5B03 .value 0x35b
+ 41893 c9ac C3C90000 .long 0xc9c3
+ 41894 c9b0 32 .uleb128 0x32
+ 41895 c9b1 6A0D0000 .long 0xd6a
+ 41896 c9b5 03 .byte 0x3
+ 41897 c9b6 91 .byte 0x91
+ 41898 c9b7 B06F .sleb128 -2128
+ 41899 c9b9 32 .uleb128 0x32
+ 41900 c9ba 600D0000 .long 0xd60
+ 41901 c9be 03 .byte 0x3
+ 41902 c9bf 91 .byte 0x91
+ 41903 c9c0 C06F .sleb128 -2112
+ 41904 c9c2 00 .byte 0x0
+ 41905 c9c3 31 .uleb128 0x31
+ 41906 c9c4 A00D0000 .long 0xda0
+ 41907 c9c8 00000000 .quad .LBB3688
+ 41907 00000000
+ 41908 c9d0 00000000 .quad .LBE3688
+ 41908 00000000
+ 41909 c9d8 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1052
+
+
+ 41910 c9d9 6403 .value 0x364
+ 41911 c9db 1DCA0000 .long 0xca1d
+ 41912 c9df 32 .uleb128 0x32
+ 41913 c9e0 BE0D0000 .long 0xdbe
+ 41914 c9e4 03 .byte 0x3
+ 41915 c9e5 91 .byte 0x91
+ 41916 c9e6 D06F .sleb128 -2096
+ 41917 c9e8 32 .uleb128 0x32
+ 41918 c9e9 B20D0000 .long 0xdb2
+ 41919 c9ed 03 .byte 0x3
+ 41920 c9ee 91 .byte 0x91
+ 41921 c9ef E06F .sleb128 -2080
+ 41922 c9f1 35 .uleb128 0x35
+ 41923 c9f2 CB0D0000 .long 0xdcb
+ 41924 c9f6 00000000 .quad .LBB3690
+ 41924 00000000
+ 41925 c9fe 00000000 .quad .LBE3690
+ 41925 00000000
+ 41926 ca06 02 .byte 0x2
+ 41927 ca07 7501 .value 0x175
+ 41928 ca09 32 .uleb128 0x32
+ 41929 ca0a E90D0000 .long 0xde9
+ 41930 ca0e 03 .byte 0x3
+ 41931 ca0f 91 .byte 0x91
+ 41932 ca10 F06F .sleb128 -2064
+ 41933 ca12 32 .uleb128 0x32
+ 41934 ca13 DD0D0000 .long 0xddd
+ 41935 ca17 03 .byte 0x3
+ 41936 ca18 91 .byte 0x91
+ 41937 ca19 8070 .sleb128 -2048
+ 41938 ca1b 00 .byte 0x0
+ 41939 ca1c 00 .byte 0x0
+ 41940 ca1d 31 .uleb128 0x31
+ 41941 ca1e FB0D0000 .long 0xdfb
+ 41942 ca22 00000000 .quad .LBB3692
+ 41942 00000000
+ 41943 ca2a 00000000 .quad .LBE3692
+ 41943 00000000
+ 41944 ca32 02 .byte 0x2
+ 41945 ca33 6603 .value 0x366
+ 41946 ca35 4CCA0000 .long 0xca4c
+ 41947 ca39 32 .uleb128 0x32
+ 41948 ca3a 160E0000 .long 0xe16
+ 41949 ca3e 03 .byte 0x3
+ 41950 ca3f 91 .byte 0x91
+ 41951 ca40 9070 .sleb128 -2032
+ 41952 ca42 32 .uleb128 0x32
+ 41953 ca43 0C0E0000 .long 0xe0c
+ 41954 ca47 03 .byte 0x3
+ 41955 ca48 91 .byte 0x91
+ 41956 ca49 A070 .sleb128 -2016
+ 41957 ca4b 00 .byte 0x0
+ 41958 ca4c 31 .uleb128 0x31
+ 41959 ca4d A00D0000 .long 0xda0
+ 41960 ca51 00000000 .quad .LBB3694
+ 41960 00000000
+ 41961 ca59 00000000 .quad .LBE3694
+
GAS LISTING /tmp/ccjbMjHD.s page 1053
+
+
+ 41961 00000000
+ 41962 ca61 02 .byte 0x2
+ 41963 ca62 6803 .value 0x368
+ 41964 ca64 A6CA0000 .long 0xcaa6
+ 41965 ca68 32 .uleb128 0x32
+ 41966 ca69 BE0D0000 .long 0xdbe
+ 41967 ca6d 03 .byte 0x3
+ 41968 ca6e 91 .byte 0x91
+ 41969 ca6f B070 .sleb128 -2000
+ 41970 ca71 32 .uleb128 0x32
+ 41971 ca72 B20D0000 .long 0xdb2
+ 41972 ca76 03 .byte 0x3
+ 41973 ca77 91 .byte 0x91
+ 41974 ca78 C070 .sleb128 -1984
+ 41975 ca7a 35 .uleb128 0x35
+ 41976 ca7b CB0D0000 .long 0xdcb
+ 41977 ca7f 00000000 .quad .LBB3696
+ 41977 00000000
+ 41978 ca87 00000000 .quad .LBE3696
+ 41978 00000000
+ 41979 ca8f 02 .byte 0x2
+ 41980 ca90 7501 .value 0x175
+ 41981 ca92 32 .uleb128 0x32
+ 41982 ca93 E90D0000 .long 0xde9
+ 41983 ca97 03 .byte 0x3
+ 41984 ca98 91 .byte 0x91
+ 41985 ca99 D070 .sleb128 -1968
+ 41986 ca9b 32 .uleb128 0x32
+ 41987 ca9c DD0D0000 .long 0xddd
+ 41988 caa0 03 .byte 0x3
+ 41989 caa1 91 .byte 0x91
+ 41990 caa2 E070 .sleb128 -1952
+ 41991 caa4 00 .byte 0x0
+ 41992 caa5 00 .byte 0x0
+ 41993 caa6 31 .uleb128 0x31
+ 41994 caa7 FB0D0000 .long 0xdfb
+ 41995 caab 00000000 .quad .LBB3698
+ 41995 00000000
+ 41996 cab3 00000000 .quad .LBE3698
+ 41996 00000000
+ 41997 cabb 02 .byte 0x2
+ 41998 cabc 6A03 .value 0x36a
+ 41999 cabe D5CA0000 .long 0xcad5
+ 42000 cac2 32 .uleb128 0x32
+ 42001 cac3 160E0000 .long 0xe16
+ 42002 cac7 03 .byte 0x3
+ 42003 cac8 91 .byte 0x91
+ 42004 cac9 F070 .sleb128 -1936
+ 42005 cacb 32 .uleb128 0x32
+ 42006 cacc 0C0E0000 .long 0xe0c
+ 42007 cad0 03 .byte 0x3
+ 42008 cad1 91 .byte 0x91
+ 42009 cad2 8071 .sleb128 -1920
+ 42010 cad4 00 .byte 0x0
+ 42011 cad5 31 .uleb128 0x31
+ 42012 cad6 210E0000 .long 0xe21
+ 42013 cada 00000000 .quad .LBB3700
+
GAS LISTING /tmp/ccjbMjHD.s page 1054
+
+
+ 42013 00000000
+ 42014 cae2 00000000 .quad .LBE3700
+ 42014 00000000
+ 42015 caea 02 .byte 0x2
+ 42016 caeb 6C03 .value 0x36c
+ 42017 caed 04CB0000 .long 0xcb04
+ 42018 caf1 32 .uleb128 0x32
+ 42019 caf2 3E0E0000 .long 0xe3e
+ 42020 caf6 03 .byte 0x3
+ 42021 caf7 91 .byte 0x91
+ 42022 caf8 9071 .sleb128 -1904
+ 42023 cafa 32 .uleb128 0x32
+ 42024 cafb 330E0000 .long 0xe33
+ 42025 caff 03 .byte 0x3
+ 42026 cb00 91 .byte 0x91
+ 42027 cb01 A071 .sleb128 -1888
+ 42028 cb03 00 .byte 0x0
+ 42029 cb04 35 .uleb128 0x35
+ 42030 cb05 4F0D0000 .long 0xd4f
+ 42031 cb09 00000000 .quad .LBB3702
+ 42031 00000000
+ 42032 cb11 00000000 .quad .LBE3702
+ 42032 00000000
+ 42033 cb19 02 .byte 0x2
+ 42034 cb1a 6E03 .value 0x36e
+ 42035 cb1c 32 .uleb128 0x32
+ 42036 cb1d 6A0D0000 .long 0xd6a
+ 42037 cb21 03 .byte 0x3
+ 42038 cb22 91 .byte 0x91
+ 42039 cb23 B071 .sleb128 -1872
+ 42040 cb25 32 .uleb128 0x32
+ 42041 cb26 600D0000 .long 0xd60
+ 42042 cb2a 03 .byte 0x3
+ 42043 cb2b 91 .byte 0x91
+ 42044 cb2c C071 .sleb128 -1856
+ 42045 cb2e 00 .byte 0x0
+ 42046 cb2f 00 .byte 0x0
+ 42047 cb30 00 .byte 0x0
+ 42048 cb31 00 .byte 0x0
+ 42049 cb32 36 .uleb128 0x36
+ 42050 cb33 00000000 .quad .LBB3704
+ 42050 00000000
+ 42051 cb3b 00000000 .quad .LBE3704
+ 42051 00000000
+ 42052 cb43 52CB0000 .long 0xcb52
+ 42053 cb47 34 .uleb128 0x34
+ 42054 cb48 1C0C0000 .long 0xc1c
+ 42055 cb4c 04 .byte 0x4
+ 42056 cb4d 91 .byte 0x91
+ 42057 cb4e A0B77F .sleb128 -9312
+ 42058 cb51 00 .byte 0x0
+ 42059 cb52 31 .uleb128 0x31
+ 42060 cb53 4A0E0000 .long 0xe4a
+ 42061 cb57 00000000 .quad .LBB3705
+ 42061 00000000
+ 42062 cb5f 00000000 .quad .LBE3705
+ 42062 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1055
+
+
+ 42063 cb67 02 .byte 0x2
+ 42064 cb68 9406 .value 0x694
+ 42065 cb6a EFCB0000 .long 0xcbef
+ 42066 cb6e 32 .uleb128 0x32
+ 42067 cb6f 5C0E0000 .long 0xe5c
+ 42068 cb73 03 .byte 0x3
+ 42069 cb74 91 .byte 0x91
+ 42070 cb75 D071 .sleb128 -1840
+ 42071 cb77 33 .uleb128 0x33
+ 42072 cb78 00000000 .quad .LBB3706
+ 42072 00000000
+ 42073 cb80 00000000 .quad .LBE3706
+ 42073 00000000
+ 42074 cb88 34 .uleb128 0x34
+ 42075 cb89 680E0000 .long 0xe68
+ 42076 cb8d 09 .byte 0x9
+ 42077 cb8e 03 .byte 0x3
+ 42078 cb8f 00000000 .quad ShiftRowTable.7385
+ 42078 00000000
+ 42079 cb97 35 .uleb128 0x35
+ 42080 cb98 A00D0000 .long 0xda0
+ 42081 cb9c 00000000 .quad .LBB3707
+ 42081 00000000
+ 42082 cba4 00000000 .quad .LBE3707
+ 42082 00000000
+ 42083 cbac 02 .byte 0x2
+ 42084 cbad 9B02 .value 0x29b
+ 42085 cbaf 32 .uleb128 0x32
+ 42086 cbb0 BE0D0000 .long 0xdbe
+ 42087 cbb4 03 .byte 0x3
+ 42088 cbb5 91 .byte 0x91
+ 42089 cbb6 E071 .sleb128 -1824
+ 42090 cbb8 32 .uleb128 0x32
+ 42091 cbb9 B20D0000 .long 0xdb2
+ 42092 cbbd 03 .byte 0x3
+ 42093 cbbe 91 .byte 0x91
+ 42094 cbbf F071 .sleb128 -1808
+ 42095 cbc1 35 .uleb128 0x35
+ 42096 cbc2 CB0D0000 .long 0xdcb
+ 42097 cbc6 00000000 .quad .LBB3709
+ 42097 00000000
+ 42098 cbce 00000000 .quad .LBE3709
+ 42098 00000000
+ 42099 cbd6 02 .byte 0x2
+ 42100 cbd7 7501 .value 0x175
+ 42101 cbd9 32 .uleb128 0x32
+ 42102 cbda E90D0000 .long 0xde9
+ 42103 cbde 03 .byte 0x3
+ 42104 cbdf 91 .byte 0x91
+ 42105 cbe0 8072 .sleb128 -1792
+ 42106 cbe2 32 .uleb128 0x32
+ 42107 cbe3 DD0D0000 .long 0xddd
+ 42108 cbe7 03 .byte 0x3
+ 42109 cbe8 91 .byte 0x91
+ 42110 cbe9 9072 .sleb128 -1776
+ 42111 cbeb 00 .byte 0x0
+ 42112 cbec 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1056
+
+
+ 42113 cbed 00 .byte 0x0
+ 42114 cbee 00 .byte 0x0
+ 42115 cbef 36 .uleb128 0x36
+ 42116 cbf0 00000000 .quad .LBB3711
+ 42116 00000000
+ 42117 cbf8 00000000 .quad .LBE3711
+ 42117 00000000
+ 42118 cc00 0FCC0000 .long 0xcc0f
+ 42119 cc04 34 .uleb128 0x34
+ 42120 cc05 2C0C0000 .long 0xc2c
+ 42121 cc09 04 .byte 0x4
+ 42122 cc0a 91 .byte 0x91
+ 42123 cc0b 90B77F .sleb128 -9328
+ 42124 cc0e 00 .byte 0x0
+ 42125 cc0f 31 .uleb128 0x31
+ 42126 cc10 860E0000 .long 0xe86
+ 42127 cc14 00000000 .quad .LBB3712
+ 42127 00000000
+ 42128 cc1c 00000000 .quad .LBE3712
+ 42128 00000000
+ 42129 cc24 02 .byte 0x2
+ 42130 cc25 9606 .value 0x696
+ 42131 cc27 3ECC0000 .long 0xcc3e
+ 42132 cc2b 32 .uleb128 0x32
+ 42133 cc2c A10E0000 .long 0xea1
+ 42134 cc30 03 .byte 0x3
+ 42135 cc31 91 .byte 0x91
+ 42136 cc32 A072 .sleb128 -1760
+ 42137 cc34 32 .uleb128 0x32
+ 42138 cc35 970E0000 .long 0xe97
+ 42139 cc39 03 .byte 0x3
+ 42140 cc3a 91 .byte 0x91
+ 42141 cc3b B072 .sleb128 -1744
+ 42142 cc3d 00 .byte 0x0
+ 42143 cc3e 36 .uleb128 0x36
+ 42144 cc3f 00000000 .quad .LBB3714
+ 42144 00000000
+ 42145 cc47 00000000 .quad .LBE3714
+ 42145 00000000
+ 42146 cc4f 5ECC0000 .long 0xcc5e
+ 42147 cc53 34 .uleb128 0x34
+ 42148 cc54 3C0C0000 .long 0xc3c
+ 42149 cc58 04 .byte 0x4
+ 42150 cc59 91 .byte 0x91
+ 42151 cc5a 80B77F .sleb128 -9344
+ 42152 cc5d 00 .byte 0x0
+ 42153 cc5e 31 .uleb128 0x31
+ 42154 cc5f AC0E0000 .long 0xeac
+ 42155 cc63 00000000 .quad .LBB3715
+ 42155 00000000
+ 42156 cc6b 00000000 .quad .LBE3715
+ 42156 00000000
+ 42157 cc73 02 .byte 0x2
+ 42158 cc74 9806 .value 0x698
+ 42159 cc76 AFCC0000 .long 0xccaf
+ 42160 cc7a 32 .uleb128 0x32
+ 42161 cc7b BE0E0000 .long 0xebe
+
GAS LISTING /tmp/ccjbMjHD.s page 1057
+
+
+ 42162 cc7f 03 .byte 0x3
+ 42163 cc80 91 .byte 0x91
+ 42164 cc81 C072 .sleb128 -1728
+ 42165 cc83 35 .uleb128 0x35
+ 42166 cc84 CB0E0000 .long 0xecb
+ 42167 cc88 00000000 .quad .LBB3717
+ 42167 00000000
+ 42168 cc90 00000000 .quad .LBE3717
+ 42168 00000000
+ 42169 cc98 02 .byte 0x2
+ 42170 cc99 4905 .value 0x549
+ 42171 cc9b 32 .uleb128 0x32
+ 42172 cc9c E90E0000 .long 0xee9
+ 42173 cca0 03 .byte 0x3
+ 42174 cca1 91 .byte 0x91
+ 42175 cca2 DC72 .sleb128 -1700
+ 42176 cca4 32 .uleb128 0x32
+ 42177 cca5 DD0E0000 .long 0xedd
+ 42178 cca9 03 .byte 0x3
+ 42179 ccaa 91 .byte 0x91
+ 42180 ccab E072 .sleb128 -1696
+ 42181 ccad 00 .byte 0x0
+ 42182 ccae 00 .byte 0x0
+ 42183 ccaf 33 .uleb128 0x33
+ 42184 ccb0 00000000 .quad .LBB3719
+ 42184 00000000
+ 42185 ccb8 00000000 .quad .LBE3719
+ 42185 00000000
+ 42186 ccc0 34 .uleb128 0x34
+ 42187 ccc1 480C0000 .long 0xc48
+ 42188 ccc5 04 .byte 0x4
+ 42189 ccc6 91 .byte 0x91
+ 42190 ccc7 F0B67F .sleb128 -9360
+ 42191 ccca 00 .byte 0x0
+ 42192 cccb 00 .byte 0x0
+ 42193 cccc 00 .byte 0x0
+ 42194 cccd 31 .uleb128 0x31
+ 42195 ccce F60E0000 .long 0xef6
+ 42196 ccd2 00000000 .quad .LBB3720
+ 42196 00000000
+ 42197 ccda 00000000 .quad .LBE3720
+ 42197 00000000
+ 42198 cce2 02 .byte 0x2
+ 42199 cce3 9007 .value 0x790
+ 42200 cce5 E2CE0000 .long 0xcee2
+ 42201 cce9 32 .uleb128 0x32
+ 42202 ccea 080F0000 .long 0xf08
+ 42203 ccee 03 .byte 0x3
+ 42204 ccef 91 .byte 0x91
+ 42205 ccf0 F072 .sleb128 -1680
+ 42206 ccf2 33 .uleb128 0x33
+ 42207 ccf3 00000000 .quad .LBB3721
+ 42207 00000000
+ 42208 ccfb 00000000 .quad .LBE3721
+ 42208 00000000
+ 42209 cd03 34 .uleb128 0x34
+ 42210 cd04 140F0000 .long 0xf14
+
GAS LISTING /tmp/ccjbMjHD.s page 1058
+
+
+ 42211 cd08 04 .byte 0x4
+ 42212 cd09 76 .byte 0x76
+ 42213 cd0a C0B27F .sleb128 -9920
+ 42214 cd0d 31 .uleb128 0x31
+ 42215 cd0e 210F0000 .long 0xf21
+ 42216 cd12 00000000 .quad .LBB3722
+ 42216 00000000
+ 42217 cd1a 00000000 .quad .LBE3722
+ 42217 00000000
+ 42218 cd22 02 .byte 0x2
+ 42219 cd23 1F06 .value 0x61f
+ 42220 cd25 AACD0000 .long 0xcdaa
+ 42221 cd29 32 .uleb128 0x32
+ 42222 cd2a 330F0000 .long 0xf33
+ 42223 cd2e 03 .byte 0x3
+ 42224 cd2f 91 .byte 0x91
+ 42225 cd30 8073 .sleb128 -1664
+ 42226 cd32 33 .uleb128 0x33
+ 42227 cd33 00000000 .quad .LBB3723
+ 42227 00000000
+ 42228 cd3b 00000000 .quad .LBE3723
+ 42228 00000000
+ 42229 cd43 34 .uleb128 0x34
+ 42230 cd44 3F0F0000 .long 0xf3f
+ 42231 cd48 09 .byte 0x9
+ 42232 cd49 03 .byte 0x3
+ 42233 cd4a 00000000 .quad mask.7943
+ 42233 00000000
+ 42234 cd52 35 .uleb128 0x35
+ 42235 cd53 A00D0000 .long 0xda0
+ 42236 cd57 00000000 .quad .LBB3724
+ 42236 00000000
+ 42237 cd5f 00000000 .quad .LBE3724
+ 42237 00000000
+ 42238 cd67 02 .byte 0x2
+ 42239 cd68 FE04 .value 0x4fe
+ 42240 cd6a 32 .uleb128 0x32
+ 42241 cd6b BE0D0000 .long 0xdbe
+ 42242 cd6f 03 .byte 0x3
+ 42243 cd70 91 .byte 0x91
+ 42244 cd71 9073 .sleb128 -1648
+ 42245 cd73 32 .uleb128 0x32
+ 42246 cd74 B20D0000 .long 0xdb2
+ 42247 cd78 03 .byte 0x3
+ 42248 cd79 91 .byte 0x91
+ 42249 cd7a A073 .sleb128 -1632
+ 42250 cd7c 35 .uleb128 0x35
+ 42251 cd7d CB0D0000 .long 0xdcb
+ 42252 cd81 00000000 .quad .LBB3726
+ 42252 00000000
+ 42253 cd89 00000000 .quad .LBE3726
+ 42253 00000000
+ 42254 cd91 02 .byte 0x2
+ 42255 cd92 7501 .value 0x175
+ 42256 cd94 32 .uleb128 0x32
+ 42257 cd95 E90D0000 .long 0xde9
+ 42258 cd99 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1059
+
+
+ 42259 cd9a 91 .byte 0x91
+ 42260 cd9b B073 .sleb128 -1616
+ 42261 cd9d 32 .uleb128 0x32
+ 42262 cd9e DD0D0000 .long 0xddd
+ 42263 cda2 03 .byte 0x3
+ 42264 cda3 91 .byte 0x91
+ 42265 cda4 C073 .sleb128 -1600
+ 42266 cda6 00 .byte 0x0
+ 42267 cda7 00 .byte 0x0
+ 42268 cda8 00 .byte 0x0
+ 42269 cda9 00 .byte 0x0
+ 42270 cdaa 31 .uleb128 0x31
+ 42271 cdab 210F0000 .long 0xf21
+ 42272 cdaf 00000000 .quad .LBB3728
+ 42272 00000000
+ 42273 cdb7 00000000 .quad .LBE3728
+ 42273 00000000
+ 42274 cdbf 02 .byte 0x2
+ 42275 cdc0 2006 .value 0x620
+ 42276 cdc2 47CE0000 .long 0xce47
+ 42277 cdc6 32 .uleb128 0x32
+ 42278 cdc7 330F0000 .long 0xf33
+ 42279 cdcb 03 .byte 0x3
+ 42280 cdcc 91 .byte 0x91
+ 42281 cdcd D073 .sleb128 -1584
+ 42282 cdcf 33 .uleb128 0x33
+ 42283 cdd0 00000000 .quad .LBB3729
+ 42283 00000000
+ 42284 cdd8 00000000 .quad .LBE3729
+ 42284 00000000
+ 42285 cde0 34 .uleb128 0x34
+ 42286 cde1 3F0F0000 .long 0xf3f
+ 42287 cde5 09 .byte 0x9
+ 42288 cde6 03 .byte 0x3
+ 42289 cde7 00000000 .quad mask.7943
+ 42289 00000000
+ 42290 cdef 35 .uleb128 0x35
+ 42291 cdf0 A00D0000 .long 0xda0
+ 42292 cdf4 00000000 .quad .LBB3730
+ 42292 00000000
+ 42293 cdfc 00000000 .quad .LBE3730
+ 42293 00000000
+ 42294 ce04 02 .byte 0x2
+ 42295 ce05 FE04 .value 0x4fe
+ 42296 ce07 32 .uleb128 0x32
+ 42297 ce08 BE0D0000 .long 0xdbe
+ 42298 ce0c 03 .byte 0x3
+ 42299 ce0d 91 .byte 0x91
+ 42300 ce0e E073 .sleb128 -1568
+ 42301 ce10 32 .uleb128 0x32
+ 42302 ce11 B20D0000 .long 0xdb2
+ 42303 ce15 03 .byte 0x3
+ 42304 ce16 91 .byte 0x91
+ 42305 ce17 F073 .sleb128 -1552
+ 42306 ce19 35 .uleb128 0x35
+ 42307 ce1a CB0D0000 .long 0xdcb
+ 42308 ce1e 00000000 .quad .LBB3732
+
GAS LISTING /tmp/ccjbMjHD.s page 1060
+
+
+ 42308 00000000
+ 42309 ce26 00000000 .quad .LBE3732
+ 42309 00000000
+ 42310 ce2e 02 .byte 0x2
+ 42311 ce2f 7501 .value 0x175
+ 42312 ce31 32 .uleb128 0x32
+ 42313 ce32 E90D0000 .long 0xde9
+ 42314 ce36 03 .byte 0x3
+ 42315 ce37 91 .byte 0x91
+ 42316 ce38 8074 .sleb128 -1536
+ 42317 ce3a 32 .uleb128 0x32
+ 42318 ce3b DD0D0000 .long 0xddd
+ 42319 ce3f 03 .byte 0x3
+ 42320 ce40 91 .byte 0x91
+ 42321 ce41 9074 .sleb128 -1520
+ 42322 ce43 00 .byte 0x0
+ 42323 ce44 00 .byte 0x0
+ 42324 ce45 00 .byte 0x0
+ 42325 ce46 00 .byte 0x0
+ 42326 ce47 35 .uleb128 0x35
+ 42327 ce48 210F0000 .long 0xf21
+ 42328 ce4c 00000000 .quad .LBB3734
+ 42328 00000000
+ 42329 ce54 00000000 .quad .LBE3734
+ 42329 00000000
+ 42330 ce5c 02 .byte 0x2
+ 42331 ce5d 2106 .value 0x621
+ 42332 ce5f 32 .uleb128 0x32
+ 42333 ce60 330F0000 .long 0xf33
+ 42334 ce64 03 .byte 0x3
+ 42335 ce65 91 .byte 0x91
+ 42336 ce66 A074 .sleb128 -1504
+ 42337 ce68 33 .uleb128 0x33
+ 42338 ce69 00000000 .quad .LBB3735
+ 42338 00000000
+ 42339 ce71 00000000 .quad .LBE3735
+ 42339 00000000
+ 42340 ce79 34 .uleb128 0x34
+ 42341 ce7a 3F0F0000 .long 0xf3f
+ 42342 ce7e 09 .byte 0x9
+ 42343 ce7f 03 .byte 0x3
+ 42344 ce80 00000000 .quad mask.7943
+ 42344 00000000
+ 42345 ce88 35 .uleb128 0x35
+ 42346 ce89 A00D0000 .long 0xda0
+ 42347 ce8d 00000000 .quad .LBB3736
+ 42347 00000000
+ 42348 ce95 00000000 .quad .LBE3736
+ 42348 00000000
+ 42349 ce9d 02 .byte 0x2
+ 42350 ce9e FE04 .value 0x4fe
+ 42351 cea0 32 .uleb128 0x32
+ 42352 cea1 BE0D0000 .long 0xdbe
+ 42353 cea5 03 .byte 0x3
+ 42354 cea6 91 .byte 0x91
+ 42355 cea7 B074 .sleb128 -1488
+ 42356 cea9 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 1061
+
+
+ 42357 ceaa B20D0000 .long 0xdb2
+ 42358 ceae 03 .byte 0x3
+ 42359 ceaf 91 .byte 0x91
+ 42360 ceb0 C074 .sleb128 -1472
+ 42361 ceb2 35 .uleb128 0x35
+ 42362 ceb3 CB0D0000 .long 0xdcb
+ 42363 ceb7 00000000 .quad .LBB3738
+ 42363 00000000
+ 42364 cebf 00000000 .quad .LBE3738
+ 42364 00000000
+ 42365 cec7 02 .byte 0x2
+ 42366 cec8 7501 .value 0x175
+ 42367 ceca 32 .uleb128 0x32
+ 42368 cecb E90D0000 .long 0xde9
+ 42369 cecf 03 .byte 0x3
+ 42370 ced0 91 .byte 0x91
+ 42371 ced1 D074 .sleb128 -1456
+ 42372 ced3 32 .uleb128 0x32
+ 42373 ced4 DD0D0000 .long 0xddd
+ 42374 ced8 03 .byte 0x3
+ 42375 ced9 91 .byte 0x91
+ 42376 ceda E074 .sleb128 -1440
+ 42377 cedc 00 .byte 0x0
+ 42378 cedd 00 .byte 0x0
+ 42379 cede 00 .byte 0x0
+ 42380 cedf 00 .byte 0x0
+ 42381 cee0 00 .byte 0x0
+ 42382 cee1 00 .byte 0x0
+ 42383 cee2 31 .uleb128 0x31
+ 42384 cee3 860E0000 .long 0xe86
+ 42385 cee7 00000000 .quad .LBB3740
+ 42385 00000000
+ 42386 ceef 00000000 .quad .LBE3740
+ 42386 00000000
+ 42387 cef7 02 .byte 0x2
+ 42388 cef8 9007 .value 0x790
+ 42389 cefa 11CF0000 .long 0xcf11
+ 42390 cefe 32 .uleb128 0x32
+ 42391 ceff A10E0000 .long 0xea1
+ 42392 cf03 03 .byte 0x3
+ 42393 cf04 91 .byte 0x91
+ 42394 cf05 F074 .sleb128 -1424
+ 42395 cf07 32 .uleb128 0x32
+ 42396 cf08 970E0000 .long 0xe97
+ 42397 cf0c 03 .byte 0x3
+ 42398 cf0d 91 .byte 0x91
+ 42399 cf0e 8075 .sleb128 -1408
+ 42400 cf10 00 .byte 0x0
+ 42401 cf11 31 .uleb128 0x31
+ 42402 cf12 8F940000 .long 0x948f
+ 42403 cf16 00000000 .quad .LBB3742
+ 42403 00000000
+ 42404 cf1e 00000000 .quad .LBE3742
+ 42404 00000000
+ 42405 cf26 02 .byte 0x2
+ 42406 cf27 9107 .value 0x791
+ 42407 cf29 A3CF0000 .long 0xcfa3
+
GAS LISTING /tmp/ccjbMjHD.s page 1062
+
+
+ 42408 cf2d 32 .uleb128 0x32
+ 42409 cf2e A1940000 .long 0x94a1
+ 42410 cf32 03 .byte 0x3
+ 42411 cf33 91 .byte 0x91
+ 42412 cf34 9075 .sleb128 -1392
+ 42413 cf36 33 .uleb128 0x33
+ 42414 cf37 00000000 .quad .LBB3743
+ 42414 00000000
+ 42415 cf3f 00000000 .quad .LBE3743
+ 42415 00000000
+ 42416 cf47 34 .uleb128 0x34
+ 42417 cf48 AD940000 .long 0x94ad
+ 42418 cf4c 04 .byte 0x4
+ 42419 cf4d 91 .byte 0x91
+ 42420 cf4e C0B77F .sleb128 -9280
+ 42421 cf51 34 .uleb128 0x34
+ 42422 cf52 B7940000 .long 0x94b7
+ 42423 cf56 03 .byte 0x3
+ 42424 cf57 91 .byte 0x91
+ 42425 cf58 A475 .sleb128 -1372
+ 42426 cf5a 35 .uleb128 0x35
+ 42427 cf5b BE560000 .long 0x56be
+ 42428 cf5f 00000000 .quad .LBB3744
+ 42428 00000000
+ 42429 cf67 00000000 .quad .LBE3744
+ 42429 00000000
+ 42430 cf6f 02 .byte 0x2
+ 42431 cf70 7906 .value 0x679
+ 42432 cf72 32 .uleb128 0x32
+ 42433 cf73 D0560000 .long 0x56d0
+ 42434 cf77 03 .byte 0x3
+ 42435 cf78 91 .byte 0x91
+ 42436 cf79 A875 .sleb128 -1368
+ 42437 cf7b 33 .uleb128 0x33
+ 42438 cf7c 00000000 .quad .LBB3745
+ 42438 00000000
+ 42439 cf84 00000000 .quad .LBE3745
+ 42439 00000000
+ 42440 cf8c 34 .uleb128 0x34
+ 42441 cf8d DA560000 .long 0x56da
+ 42442 cf91 04 .byte 0x4
+ 42443 cf92 91 .byte 0x91
+ 42444 cf93 B0B77F .sleb128 -9296
+ 42445 cf96 34 .uleb128 0x34
+ 42446 cf97 E6560000 .long 0x56e6
+ 42447 cf9b 03 .byte 0x3
+ 42448 cf9c 91 .byte 0x91
+ 42449 cf9d AC75 .sleb128 -1364
+ 42450 cf9f 00 .byte 0x0
+ 42451 cfa0 00 .byte 0x0
+ 42452 cfa1 00 .byte 0x0
+ 42453 cfa2 00 .byte 0x0
+ 42454 cfa3 31 .uleb128 0x31
+ 42455 cfa4 F60E0000 .long 0xef6
+ 42456 cfa8 00000000 .quad .LBB3746
+ 42456 00000000
+ 42457 cfb0 00000000 .quad .LBE3746
+
GAS LISTING /tmp/ccjbMjHD.s page 1063
+
+
+ 42457 00000000
+ 42458 cfb8 02 .byte 0x2
+ 42459 cfb9 9107 .value 0x791
+ 42460 cfbb B8D10000 .long 0xd1b8
+ 42461 cfbf 32 .uleb128 0x32
+ 42462 cfc0 080F0000 .long 0xf08
+ 42463 cfc4 03 .byte 0x3
+ 42464 cfc5 91 .byte 0x91
+ 42465 cfc6 B075 .sleb128 -1360
+ 42466 cfc8 33 .uleb128 0x33
+ 42467 cfc9 00000000 .quad .LBB3747
+ 42467 00000000
+ 42468 cfd1 00000000 .quad .LBE3747
+ 42468 00000000
+ 42469 cfd9 34 .uleb128 0x34
+ 42470 cfda 140F0000 .long 0xf14
+ 42471 cfde 04 .byte 0x4
+ 42472 cfdf 76 .byte 0x76
+ 42473 cfe0 D0B27F .sleb128 -9904
+ 42474 cfe3 31 .uleb128 0x31
+ 42475 cfe4 210F0000 .long 0xf21
+ 42476 cfe8 00000000 .quad .LBB3748
+ 42476 00000000
+ 42477 cff0 00000000 .quad .LBE3748
+ 42477 00000000
+ 42478 cff8 02 .byte 0x2
+ 42479 cff9 1F06 .value 0x61f
+ 42480 cffb 80D00000 .long 0xd080
+ 42481 cfff 32 .uleb128 0x32
+ 42482 d000 330F0000 .long 0xf33
+ 42483 d004 03 .byte 0x3
+ 42484 d005 91 .byte 0x91
+ 42485 d006 C075 .sleb128 -1344
+ 42486 d008 33 .uleb128 0x33
+ 42487 d009 00000000 .quad .LBB3749
+ 42487 00000000
+ 42488 d011 00000000 .quad .LBE3749
+ 42488 00000000
+ 42489 d019 34 .uleb128 0x34
+ 42490 d01a 3F0F0000 .long 0xf3f
+ 42491 d01e 09 .byte 0x9
+ 42492 d01f 03 .byte 0x3
+ 42493 d020 00000000 .quad mask.7943
+ 42493 00000000
+ 42494 d028 35 .uleb128 0x35
+ 42495 d029 A00D0000 .long 0xda0
+ 42496 d02d 00000000 .quad .LBB3750
+ 42496 00000000
+ 42497 d035 00000000 .quad .LBE3750
+ 42497 00000000
+ 42498 d03d 02 .byte 0x2
+ 42499 d03e FE04 .value 0x4fe
+ 42500 d040 32 .uleb128 0x32
+ 42501 d041 BE0D0000 .long 0xdbe
+ 42502 d045 03 .byte 0x3
+ 42503 d046 91 .byte 0x91
+ 42504 d047 D075 .sleb128 -1328
+
GAS LISTING /tmp/ccjbMjHD.s page 1064
+
+
+ 42505 d049 32 .uleb128 0x32
+ 42506 d04a B20D0000 .long 0xdb2
+ 42507 d04e 03 .byte 0x3
+ 42508 d04f 91 .byte 0x91
+ 42509 d050 E075 .sleb128 -1312
+ 42510 d052 35 .uleb128 0x35
+ 42511 d053 CB0D0000 .long 0xdcb
+ 42512 d057 00000000 .quad .LBB3752
+ 42512 00000000
+ 42513 d05f 00000000 .quad .LBE3752
+ 42513 00000000
+ 42514 d067 02 .byte 0x2
+ 42515 d068 7501 .value 0x175
+ 42516 d06a 32 .uleb128 0x32
+ 42517 d06b E90D0000 .long 0xde9
+ 42518 d06f 03 .byte 0x3
+ 42519 d070 91 .byte 0x91
+ 42520 d071 F075 .sleb128 -1296
+ 42521 d073 32 .uleb128 0x32
+ 42522 d074 DD0D0000 .long 0xddd
+ 42523 d078 03 .byte 0x3
+ 42524 d079 91 .byte 0x91
+ 42525 d07a 8076 .sleb128 -1280
+ 42526 d07c 00 .byte 0x0
+ 42527 d07d 00 .byte 0x0
+ 42528 d07e 00 .byte 0x0
+ 42529 d07f 00 .byte 0x0
+ 42530 d080 31 .uleb128 0x31
+ 42531 d081 210F0000 .long 0xf21
+ 42532 d085 00000000 .quad .LBB3754
+ 42532 00000000
+ 42533 d08d 00000000 .quad .LBE3754
+ 42533 00000000
+ 42534 d095 02 .byte 0x2
+ 42535 d096 2006 .value 0x620
+ 42536 d098 1DD10000 .long 0xd11d
+ 42537 d09c 32 .uleb128 0x32
+ 42538 d09d 330F0000 .long 0xf33
+ 42539 d0a1 03 .byte 0x3
+ 42540 d0a2 91 .byte 0x91
+ 42541 d0a3 9076 .sleb128 -1264
+ 42542 d0a5 33 .uleb128 0x33
+ 42543 d0a6 00000000 .quad .LBB3755
+ 42543 00000000
+ 42544 d0ae 00000000 .quad .LBE3755
+ 42544 00000000
+ 42545 d0b6 34 .uleb128 0x34
+ 42546 d0b7 3F0F0000 .long 0xf3f
+ 42547 d0bb 09 .byte 0x9
+ 42548 d0bc 03 .byte 0x3
+ 42549 d0bd 00000000 .quad mask.7943
+ 42549 00000000
+ 42550 d0c5 35 .uleb128 0x35
+ 42551 d0c6 A00D0000 .long 0xda0
+ 42552 d0ca 00000000 .quad .LBB3756
+ 42552 00000000
+ 42553 d0d2 00000000 .quad .LBE3756
+
GAS LISTING /tmp/ccjbMjHD.s page 1065
+
+
+ 42553 00000000
+ 42554 d0da 02 .byte 0x2
+ 42555 d0db FE04 .value 0x4fe
+ 42556 d0dd 32 .uleb128 0x32
+ 42557 d0de BE0D0000 .long 0xdbe
+ 42558 d0e2 03 .byte 0x3
+ 42559 d0e3 91 .byte 0x91
+ 42560 d0e4 A076 .sleb128 -1248
+ 42561 d0e6 32 .uleb128 0x32
+ 42562 d0e7 B20D0000 .long 0xdb2
+ 42563 d0eb 03 .byte 0x3
+ 42564 d0ec 91 .byte 0x91
+ 42565 d0ed B076 .sleb128 -1232
+ 42566 d0ef 35 .uleb128 0x35
+ 42567 d0f0 CB0D0000 .long 0xdcb
+ 42568 d0f4 00000000 .quad .LBB3758
+ 42568 00000000
+ 42569 d0fc 00000000 .quad .LBE3758
+ 42569 00000000
+ 42570 d104 02 .byte 0x2
+ 42571 d105 7501 .value 0x175
+ 42572 d107 32 .uleb128 0x32
+ 42573 d108 E90D0000 .long 0xde9
+ 42574 d10c 03 .byte 0x3
+ 42575 d10d 91 .byte 0x91
+ 42576 d10e C076 .sleb128 -1216
+ 42577 d110 32 .uleb128 0x32
+ 42578 d111 DD0D0000 .long 0xddd
+ 42579 d115 03 .byte 0x3
+ 42580 d116 91 .byte 0x91
+ 42581 d117 D076 .sleb128 -1200
+ 42582 d119 00 .byte 0x0
+ 42583 d11a 00 .byte 0x0
+ 42584 d11b 00 .byte 0x0
+ 42585 d11c 00 .byte 0x0
+ 42586 d11d 35 .uleb128 0x35
+ 42587 d11e 210F0000 .long 0xf21
+ 42588 d122 00000000 .quad .LBB3760
+ 42588 00000000
+ 42589 d12a 00000000 .quad .LBE3760
+ 42589 00000000
+ 42590 d132 02 .byte 0x2
+ 42591 d133 2106 .value 0x621
+ 42592 d135 32 .uleb128 0x32
+ 42593 d136 330F0000 .long 0xf33
+ 42594 d13a 03 .byte 0x3
+ 42595 d13b 91 .byte 0x91
+ 42596 d13c E076 .sleb128 -1184
+ 42597 d13e 33 .uleb128 0x33
+ 42598 d13f 00000000 .quad .LBB3761
+ 42598 00000000
+ 42599 d147 00000000 .quad .LBE3761
+ 42599 00000000
+ 42600 d14f 34 .uleb128 0x34
+ 42601 d150 3F0F0000 .long 0xf3f
+ 42602 d154 09 .byte 0x9
+ 42603 d155 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1066
+
+
+ 42604 d156 00000000 .quad mask.7943
+ 42604 00000000
+ 42605 d15e 35 .uleb128 0x35
+ 42606 d15f A00D0000 .long 0xda0
+ 42607 d163 00000000 .quad .LBB3762
+ 42607 00000000
+ 42608 d16b 00000000 .quad .LBE3762
+ 42608 00000000
+ 42609 d173 02 .byte 0x2
+ 42610 d174 FE04 .value 0x4fe
+ 42611 d176 32 .uleb128 0x32
+ 42612 d177 BE0D0000 .long 0xdbe
+ 42613 d17b 03 .byte 0x3
+ 42614 d17c 91 .byte 0x91
+ 42615 d17d F076 .sleb128 -1168
+ 42616 d17f 32 .uleb128 0x32
+ 42617 d180 B20D0000 .long 0xdb2
+ 42618 d184 03 .byte 0x3
+ 42619 d185 91 .byte 0x91
+ 42620 d186 8077 .sleb128 -1152
+ 42621 d188 35 .uleb128 0x35
+ 42622 d189 CB0D0000 .long 0xdcb
+ 42623 d18d 00000000 .quad .LBB3764
+ 42623 00000000
+ 42624 d195 00000000 .quad .LBE3764
+ 42624 00000000
+ 42625 d19d 02 .byte 0x2
+ 42626 d19e 7501 .value 0x175
+ 42627 d1a0 32 .uleb128 0x32
+ 42628 d1a1 E90D0000 .long 0xde9
+ 42629 d1a5 03 .byte 0x3
+ 42630 d1a6 91 .byte 0x91
+ 42631 d1a7 9077 .sleb128 -1136
+ 42632 d1a9 32 .uleb128 0x32
+ 42633 d1aa DD0D0000 .long 0xddd
+ 42634 d1ae 03 .byte 0x3
+ 42635 d1af 91 .byte 0x91
+ 42636 d1b0 A077 .sleb128 -1120
+ 42637 d1b2 00 .byte 0x0
+ 42638 d1b3 00 .byte 0x0
+ 42639 d1b4 00 .byte 0x0
+ 42640 d1b5 00 .byte 0x0
+ 42641 d1b6 00 .byte 0x0
+ 42642 d1b7 00 .byte 0x0
+ 42643 d1b8 31 .uleb128 0x31
+ 42644 d1b9 860E0000 .long 0xe86
+ 42645 d1bd 00000000 .quad .LBB3766
+ 42645 00000000
+ 42646 d1c5 00000000 .quad .LBE3766
+ 42646 00000000
+ 42647 d1cd 02 .byte 0x2
+ 42648 d1ce 9107 .value 0x791
+ 42649 d1d0 E7D10000 .long 0xd1e7
+ 42650 d1d4 32 .uleb128 0x32
+ 42651 d1d5 A10E0000 .long 0xea1
+ 42652 d1d9 03 .byte 0x3
+ 42653 d1da 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1067
+
+
+ 42654 d1db B077 .sleb128 -1104
+ 42655 d1dd 32 .uleb128 0x32
+ 42656 d1de 970E0000 .long 0xe97
+ 42657 d1e2 03 .byte 0x3
+ 42658 d1e3 91 .byte 0x91
+ 42659 d1e4 C077 .sleb128 -1088
+ 42660 d1e6 00 .byte 0x0
+ 42661 d1e7 31 .uleb128 0x31
+ 42662 d1e8 D50B0000 .long 0xbd5
+ 42663 d1ec 00000000 .quad .LBB3768
+ 42663 00000000
+ 42664 d1f4 00000000 .quad .LBE3768
+ 42664 00000000
+ 42665 d1fc 02 .byte 0x2
+ 42666 d1fd 9207 .value 0x792
+ 42667 d1ff CAD60000 .long 0xd6ca
+ 42668 d203 32 .uleb128 0x32
+ 42669 d204 F30B0000 .long 0xbf3
+ 42670 d208 03 .byte 0x3
+ 42671 d209 91 .byte 0x91
+ 42672 d20a DC77 .sleb128 -1060
+ 42673 d20c 32 .uleb128 0x32
+ 42674 d20d E70B0000 .long 0xbe7
+ 42675 d211 03 .byte 0x3
+ 42676 d212 91 .byte 0x91
+ 42677 d213 E077 .sleb128 -1056
+ 42678 d215 33 .uleb128 0x33
+ 42679 d216 00000000 .quad .LBB3769
+ 42679 00000000
+ 42680 d21e 00000000 .quad .LBE3769
+ 42680 00000000
+ 42681 d226 34 .uleb128 0x34
+ 42682 d227 FF0B0000 .long 0xbff
+ 42683 d22b 04 .byte 0x4
+ 42684 d22c 76 .byte 0x76
+ 42685 d22d F0B27F .sleb128 -9872
+ 42686 d230 34 .uleb128 0x34
+ 42687 d231 0B0C0000 .long 0xc0b
+ 42688 d235 04 .byte 0x4
+ 42689 d236 76 .byte 0x76
+ 42690 d237 E0B27F .sleb128 -9888
+ 42691 d23a 31 .uleb128 0x31
+ 42692 d23b 540C0000 .long 0xc54
+ 42693 d23f 00000000 .quad .LBB3770
+ 42693 00000000
+ 42694 d247 00000000 .quad .LBE3770
+ 42694 00000000
+ 42695 d24f 02 .byte 0x2
+ 42696 d250 9106 .value 0x691
+ 42697 d252 A6D20000 .long 0xd2a6
+ 42698 d256 32 .uleb128 0x32
+ 42699 d257 7E0C0000 .long 0xc7e
+ 42700 d25b 03 .byte 0x3
+ 42701 d25c 91 .byte 0x91
+ 42702 d25d F877 .sleb128 -1032
+ 42703 d25f 32 .uleb128 0x32
+ 42704 d260 720C0000 .long 0xc72
+
GAS LISTING /tmp/ccjbMjHD.s page 1068
+
+
+ 42705 d264 03 .byte 0x3
+ 42706 d265 91 .byte 0x91
+ 42707 d266 FC77 .sleb128 -1028
+ 42708 d268 32 .uleb128 0x32
+ 42709 d269 660C0000 .long 0xc66
+ 42710 d26d 03 .byte 0x3
+ 42711 d26e 91 .byte 0x91
+ 42712 d26f 8078 .sleb128 -1024
+ 42713 d271 35 .uleb128 0x35
+ 42714 d272 8B0C0000 .long 0xc8b
+ 42715 d276 00000000 .quad .LBB3772
+ 42715 00000000
+ 42716 d27e 00000000 .quad .LBE3772
+ 42716 00000000
+ 42717 d286 02 .byte 0x2
+ 42718 d287 0702 .value 0x207
+ 42719 d289 32 .uleb128 0x32
+ 42720 d28a B40C0000 .long 0xcb4
+ 42721 d28e 03 .byte 0x3
+ 42722 d28f 91 .byte 0x91
+ 42723 d290 9878 .sleb128 -1000
+ 42724 d292 32 .uleb128 0x32
+ 42725 d293 A90C0000 .long 0xca9
+ 42726 d297 03 .byte 0x3
+ 42727 d298 91 .byte 0x91
+ 42728 d299 9C78 .sleb128 -996
+ 42729 d29b 32 .uleb128 0x32
+ 42730 d29c 9D0C0000 .long 0xc9d
+ 42731 d2a0 03 .byte 0x3
+ 42732 d2a1 91 .byte 0x91
+ 42733 d2a2 A078 .sleb128 -992
+ 42734 d2a4 00 .byte 0x0
+ 42735 d2a5 00 .byte 0x0
+ 42736 d2a6 31 .uleb128 0x31
+ 42737 d2a7 C10C0000 .long 0xcc1
+ 42738 d2ab 00000000 .quad .LBB3774
+ 42738 00000000
+ 42739 d2b3 00000000 .quad .LBE3774
+ 42739 00000000
+ 42740 d2bb 02 .byte 0x2
+ 42741 d2bc 9206 .value 0x692
+ 42742 d2be 2FD50000 .long 0xd52f
+ 42743 d2c2 32 .uleb128 0x32
+ 42744 d2c3 D30C0000 .long 0xcd3
+ 42745 d2c7 03 .byte 0x3
+ 42746 d2c8 91 .byte 0x91
+ 42747 d2c9 B078 .sleb128 -976
+ 42748 d2cb 35 .uleb128 0x35
+ 42749 d2cc E00C0000 .long 0xce0
+ 42750 d2d0 00000000 .quad .LBB3776
+ 42750 00000000
+ 42751 d2d8 00000000 .quad .LBE3776
+ 42751 00000000
+ 42752 d2e0 02 .byte 0x2
+ 42753 d2e1 7D03 .value 0x37d
+ 42754 d2e3 32 .uleb128 0x32
+ 42755 d2e4 FE0C0000 .long 0xcfe
+
GAS LISTING /tmp/ccjbMjHD.s page 1069
+
+
+ 42756 d2e8 03 .byte 0x3
+ 42757 d2e9 91 .byte 0x91
+ 42758 d2ea C878 .sleb128 -952
+ 42759 d2ec 32 .uleb128 0x32
+ 42760 d2ed F20C0000 .long 0xcf2
+ 42761 d2f1 03 .byte 0x3
+ 42762 d2f2 91 .byte 0x91
+ 42763 d2f3 D078 .sleb128 -944
+ 42764 d2f5 33 .uleb128 0x33
+ 42765 d2f6 00000000 .quad .LBB3777
+ 42765 00000000
+ 42766 d2fe 00000000 .quad .LBE3777
+ 42766 00000000
+ 42767 d306 34 .uleb128 0x34
+ 42768 d307 0A0D0000 .long 0xd0a
+ 42769 d30b 03 .byte 0x3
+ 42770 d30c 91 .byte 0x91
+ 42771 d30d A079 .sleb128 -864
+ 42772 d30f 34 .uleb128 0x34
+ 42773 d310 150D0000 .long 0xd15
+ 42774 d314 03 .byte 0x3
+ 42775 d315 91 .byte 0x91
+ 42776 d316 9079 .sleb128 -880
+ 42777 d318 34 .uleb128 0x34
+ 42778 d319 200D0000 .long 0xd20
+ 42779 d31d 03 .byte 0x3
+ 42780 d31e 91 .byte 0x91
+ 42781 d31f 8079 .sleb128 -896
+ 42782 d321 34 .uleb128 0x34
+ 42783 d322 2C0D0000 .long 0xd2c
+ 42784 d326 03 .byte 0x3
+ 42785 d327 91 .byte 0x91
+ 42786 d328 F078 .sleb128 -912
+ 42787 d32a 34 .uleb128 0x34
+ 42788 d32b 380D0000 .long 0xd38
+ 42789 d32f 03 .byte 0x3
+ 42790 d330 91 .byte 0x91
+ 42791 d331 EC78 .sleb128 -916
+ 42792 d333 31 .uleb128 0x31
+ 42793 d334 4F0D0000 .long 0xd4f
+ 42794 d338 00000000 .quad .LBB3778
+ 42794 00000000
+ 42795 d340 00000000 .quad .LBE3778
+ 42795 00000000
+ 42796 d348 02 .byte 0x2
+ 42797 d349 5603 .value 0x356
+ 42798 d34b 62D30000 .long 0xd362
+ 42799 d34f 32 .uleb128 0x32
+ 42800 d350 6A0D0000 .long 0xd6a
+ 42801 d354 03 .byte 0x3
+ 42802 d355 91 .byte 0x91
+ 42803 d356 B079 .sleb128 -848
+ 42804 d358 32 .uleb128 0x32
+ 42805 d359 600D0000 .long 0xd60
+ 42806 d35d 03 .byte 0x3
+ 42807 d35e 91 .byte 0x91
+ 42808 d35f C079 .sleb128 -832
+
GAS LISTING /tmp/ccjbMjHD.s page 1070
+
+
+ 42809 d361 00 .byte 0x0
+ 42810 d362 31 .uleb128 0x31
+ 42811 d363 750D0000 .long 0xd75
+ 42812 d367 00000000 .quad .LBB3780
+ 42812 00000000
+ 42813 d36f 00000000 .quad .LBE3780
+ 42813 00000000
+ 42814 d377 02 .byte 0x2
+ 42815 d378 5903 .value 0x359
+ 42816 d37a 91D30000 .long 0xd391
+ 42817 d37e 32 .uleb128 0x32
+ 42818 d37f 930D0000 .long 0xd93
+ 42819 d383 03 .byte 0x3
+ 42820 d384 91 .byte 0x91
+ 42821 d385 DC79 .sleb128 -804
+ 42822 d387 32 .uleb128 0x32
+ 42823 d388 870D0000 .long 0xd87
+ 42824 d38c 03 .byte 0x3
+ 42825 d38d 91 .byte 0x91
+ 42826 d38e E079 .sleb128 -800
+ 42827 d390 00 .byte 0x0
+ 42828 d391 31 .uleb128 0x31
+ 42829 d392 4F0D0000 .long 0xd4f
+ 42830 d396 00000000 .quad .LBB3782
+ 42830 00000000
+ 42831 d39e 00000000 .quad .LBE3782
+ 42831 00000000
+ 42832 d3a6 02 .byte 0x2
+ 42833 d3a7 5B03 .value 0x35b
+ 42834 d3a9 C0D30000 .long 0xd3c0
+ 42835 d3ad 32 .uleb128 0x32
+ 42836 d3ae 6A0D0000 .long 0xd6a
+ 42837 d3b2 03 .byte 0x3
+ 42838 d3b3 91 .byte 0x91
+ 42839 d3b4 F079 .sleb128 -784
+ 42840 d3b6 32 .uleb128 0x32
+ 42841 d3b7 600D0000 .long 0xd60
+ 42842 d3bb 03 .byte 0x3
+ 42843 d3bc 91 .byte 0x91
+ 42844 d3bd 807A .sleb128 -768
+ 42845 d3bf 00 .byte 0x0
+ 42846 d3c0 31 .uleb128 0x31
+ 42847 d3c1 A00D0000 .long 0xda0
+ 42848 d3c5 00000000 .quad .LBB3784
+ 42848 00000000
+ 42849 d3cd 00000000 .quad .LBE3784
+ 42849 00000000
+ 42850 d3d5 02 .byte 0x2
+ 42851 d3d6 6403 .value 0x364
+ 42852 d3d8 1AD40000 .long 0xd41a
+ 42853 d3dc 32 .uleb128 0x32
+ 42854 d3dd BE0D0000 .long 0xdbe
+ 42855 d3e1 03 .byte 0x3
+ 42856 d3e2 91 .byte 0x91
+ 42857 d3e3 907A .sleb128 -752
+ 42858 d3e5 32 .uleb128 0x32
+ 42859 d3e6 B20D0000 .long 0xdb2
+
GAS LISTING /tmp/ccjbMjHD.s page 1071
+
+
+ 42860 d3ea 03 .byte 0x3
+ 42861 d3eb 91 .byte 0x91
+ 42862 d3ec A07A .sleb128 -736
+ 42863 d3ee 35 .uleb128 0x35
+ 42864 d3ef CB0D0000 .long 0xdcb
+ 42865 d3f3 00000000 .quad .LBB3786
+ 42865 00000000
+ 42866 d3fb 00000000 .quad .LBE3786
+ 42866 00000000
+ 42867 d403 02 .byte 0x2
+ 42868 d404 7501 .value 0x175
+ 42869 d406 32 .uleb128 0x32
+ 42870 d407 E90D0000 .long 0xde9
+ 42871 d40b 03 .byte 0x3
+ 42872 d40c 91 .byte 0x91
+ 42873 d40d B07A .sleb128 -720
+ 42874 d40f 32 .uleb128 0x32
+ 42875 d410 DD0D0000 .long 0xddd
+ 42876 d414 03 .byte 0x3
+ 42877 d415 91 .byte 0x91
+ 42878 d416 C07A .sleb128 -704
+ 42879 d418 00 .byte 0x0
+ 42880 d419 00 .byte 0x0
+ 42881 d41a 31 .uleb128 0x31
+ 42882 d41b FB0D0000 .long 0xdfb
+ 42883 d41f 00000000 .quad .LBB3788
+ 42883 00000000
+ 42884 d427 00000000 .quad .LBE3788
+ 42884 00000000
+ 42885 d42f 02 .byte 0x2
+ 42886 d430 6603 .value 0x366
+ 42887 d432 49D40000 .long 0xd449
+ 42888 d436 32 .uleb128 0x32
+ 42889 d437 160E0000 .long 0xe16
+ 42890 d43b 03 .byte 0x3
+ 42891 d43c 91 .byte 0x91
+ 42892 d43d D07A .sleb128 -688
+ 42893 d43f 32 .uleb128 0x32
+ 42894 d440 0C0E0000 .long 0xe0c
+ 42895 d444 03 .byte 0x3
+ 42896 d445 91 .byte 0x91
+ 42897 d446 E07A .sleb128 -672
+ 42898 d448 00 .byte 0x0
+ 42899 d449 31 .uleb128 0x31
+ 42900 d44a A00D0000 .long 0xda0
+ 42901 d44e 00000000 .quad .LBB3790
+ 42901 00000000
+ 42902 d456 00000000 .quad .LBE3790
+ 42902 00000000
+ 42903 d45e 02 .byte 0x2
+ 42904 d45f 6803 .value 0x368
+ 42905 d461 A3D40000 .long 0xd4a3
+ 42906 d465 32 .uleb128 0x32
+ 42907 d466 BE0D0000 .long 0xdbe
+ 42908 d46a 03 .byte 0x3
+ 42909 d46b 91 .byte 0x91
+ 42910 d46c F07A .sleb128 -656
+
GAS LISTING /tmp/ccjbMjHD.s page 1072
+
+
+ 42911 d46e 32 .uleb128 0x32
+ 42912 d46f B20D0000 .long 0xdb2
+ 42913 d473 03 .byte 0x3
+ 42914 d474 91 .byte 0x91
+ 42915 d475 807B .sleb128 -640
+ 42916 d477 35 .uleb128 0x35
+ 42917 d478 CB0D0000 .long 0xdcb
+ 42918 d47c 00000000 .quad .LBB3792
+ 42918 00000000
+ 42919 d484 00000000 .quad .LBE3792
+ 42919 00000000
+ 42920 d48c 02 .byte 0x2
+ 42921 d48d 7501 .value 0x175
+ 42922 d48f 32 .uleb128 0x32
+ 42923 d490 E90D0000 .long 0xde9
+ 42924 d494 03 .byte 0x3
+ 42925 d495 91 .byte 0x91
+ 42926 d496 907B .sleb128 -624
+ 42927 d498 32 .uleb128 0x32
+ 42928 d499 DD0D0000 .long 0xddd
+ 42929 d49d 03 .byte 0x3
+ 42930 d49e 91 .byte 0x91
+ 42931 d49f A07B .sleb128 -608
+ 42932 d4a1 00 .byte 0x0
+ 42933 d4a2 00 .byte 0x0
+ 42934 d4a3 31 .uleb128 0x31
+ 42935 d4a4 FB0D0000 .long 0xdfb
+ 42936 d4a8 00000000 .quad .LBB3794
+ 42936 00000000
+ 42937 d4b0 00000000 .quad .LBE3794
+ 42937 00000000
+ 42938 d4b8 02 .byte 0x2
+ 42939 d4b9 6A03 .value 0x36a
+ 42940 d4bb D2D40000 .long 0xd4d2
+ 42941 d4bf 32 .uleb128 0x32
+ 42942 d4c0 160E0000 .long 0xe16
+ 42943 d4c4 03 .byte 0x3
+ 42944 d4c5 91 .byte 0x91
+ 42945 d4c6 B07B .sleb128 -592
+ 42946 d4c8 32 .uleb128 0x32
+ 42947 d4c9 0C0E0000 .long 0xe0c
+ 42948 d4cd 03 .byte 0x3
+ 42949 d4ce 91 .byte 0x91
+ 42950 d4cf C07B .sleb128 -576
+ 42951 d4d1 00 .byte 0x0
+ 42952 d4d2 31 .uleb128 0x31
+ 42953 d4d3 210E0000 .long 0xe21
+ 42954 d4d7 00000000 .quad .LBB3796
+ 42954 00000000
+ 42955 d4df 00000000 .quad .LBE3796
+ 42955 00000000
+ 42956 d4e7 02 .byte 0x2
+ 42957 d4e8 6C03 .value 0x36c
+ 42958 d4ea 01D50000 .long 0xd501
+ 42959 d4ee 32 .uleb128 0x32
+ 42960 d4ef 3E0E0000 .long 0xe3e
+ 42961 d4f3 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1073
+
+
+ 42962 d4f4 91 .byte 0x91
+ 42963 d4f5 D07B .sleb128 -560
+ 42964 d4f7 32 .uleb128 0x32
+ 42965 d4f8 330E0000 .long 0xe33
+ 42966 d4fc 03 .byte 0x3
+ 42967 d4fd 91 .byte 0x91
+ 42968 d4fe E07B .sleb128 -544
+ 42969 d500 00 .byte 0x0
+ 42970 d501 35 .uleb128 0x35
+ 42971 d502 4F0D0000 .long 0xd4f
+ 42972 d506 00000000 .quad .LBB3798
+ 42972 00000000
+ 42973 d50e 00000000 .quad .LBE3798
+ 42973 00000000
+ 42974 d516 02 .byte 0x2
+ 42975 d517 6E03 .value 0x36e
+ 42976 d519 32 .uleb128 0x32
+ 42977 d51a 6A0D0000 .long 0xd6a
+ 42978 d51e 03 .byte 0x3
+ 42979 d51f 91 .byte 0x91
+ 42980 d520 F07B .sleb128 -528
+ 42981 d522 32 .uleb128 0x32
+ 42982 d523 600D0000 .long 0xd60
+ 42983 d527 03 .byte 0x3
+ 42984 d528 91 .byte 0x91
+ 42985 d529 807C .sleb128 -512
+ 42986 d52b 00 .byte 0x0
+ 42987 d52c 00 .byte 0x0
+ 42988 d52d 00 .byte 0x0
+ 42989 d52e 00 .byte 0x0
+ 42990 d52f 36 .uleb128 0x36
+ 42991 d530 00000000 .quad .LBB3800
+ 42991 00000000
+ 42992 d538 00000000 .quad .LBE3800
+ 42992 00000000
+ 42993 d540 4FD50000 .long 0xd54f
+ 42994 d544 34 .uleb128 0x34
+ 42995 d545 1C0C0000 .long 0xc1c
+ 42996 d549 04 .byte 0x4
+ 42997 d54a 91 .byte 0x91
+ 42998 d54b 80B87F .sleb128 -9216
+ 42999 d54e 00 .byte 0x0
+ 43000 d54f 31 .uleb128 0x31
+ 43001 d550 4A0E0000 .long 0xe4a
+ 43002 d554 00000000 .quad .LBB3801
+ 43002 00000000
+ 43003 d55c 00000000 .quad .LBE3801
+ 43003 00000000
+ 43004 d564 02 .byte 0x2
+ 43005 d565 9406 .value 0x694
+ 43006 d567 ECD50000 .long 0xd5ec
+ 43007 d56b 32 .uleb128 0x32
+ 43008 d56c 5C0E0000 .long 0xe5c
+ 43009 d570 03 .byte 0x3
+ 43010 d571 91 .byte 0x91
+ 43011 d572 907C .sleb128 -496
+ 43012 d574 33 .uleb128 0x33
+
GAS LISTING /tmp/ccjbMjHD.s page 1074
+
+
+ 43013 d575 00000000 .quad .LBB3802
+ 43013 00000000
+ 43014 d57d 00000000 .quad .LBE3802
+ 43014 00000000
+ 43015 d585 34 .uleb128 0x34
+ 43016 d586 680E0000 .long 0xe68
+ 43017 d58a 09 .byte 0x9
+ 43018 d58b 03 .byte 0x3
+ 43019 d58c 00000000 .quad ShiftRowTable.7385
+ 43019 00000000
+ 43020 d594 35 .uleb128 0x35
+ 43021 d595 A00D0000 .long 0xda0
+ 43022 d599 00000000 .quad .LBB3803
+ 43022 00000000
+ 43023 d5a1 00000000 .quad .LBE3803
+ 43023 00000000
+ 43024 d5a9 02 .byte 0x2
+ 43025 d5aa 9B02 .value 0x29b
+ 43026 d5ac 32 .uleb128 0x32
+ 43027 d5ad BE0D0000 .long 0xdbe
+ 43028 d5b1 03 .byte 0x3
+ 43029 d5b2 91 .byte 0x91
+ 43030 d5b3 A07C .sleb128 -480
+ 43031 d5b5 32 .uleb128 0x32
+ 43032 d5b6 B20D0000 .long 0xdb2
+ 43033 d5ba 03 .byte 0x3
+ 43034 d5bb 91 .byte 0x91
+ 43035 d5bc B07C .sleb128 -464
+ 43036 d5be 35 .uleb128 0x35
+ 43037 d5bf CB0D0000 .long 0xdcb
+ 43038 d5c3 00000000 .quad .LBB3805
+ 43038 00000000
+ 43039 d5cb 00000000 .quad .LBE3805
+ 43039 00000000
+ 43040 d5d3 02 .byte 0x2
+ 43041 d5d4 7501 .value 0x175
+ 43042 d5d6 32 .uleb128 0x32
+ 43043 d5d7 E90D0000 .long 0xde9
+ 43044 d5db 03 .byte 0x3
+ 43045 d5dc 91 .byte 0x91
+ 43046 d5dd C07C .sleb128 -448
+ 43047 d5df 32 .uleb128 0x32
+ 43048 d5e0 DD0D0000 .long 0xddd
+ 43049 d5e4 03 .byte 0x3
+ 43050 d5e5 91 .byte 0x91
+ 43051 d5e6 D07C .sleb128 -432
+ 43052 d5e8 00 .byte 0x0
+ 43053 d5e9 00 .byte 0x0
+ 43054 d5ea 00 .byte 0x0
+ 43055 d5eb 00 .byte 0x0
+ 43056 d5ec 36 .uleb128 0x36
+ 43057 d5ed 00000000 .quad .LBB3807
+ 43057 00000000
+ 43058 d5f5 00000000 .quad .LBE3807
+ 43058 00000000
+ 43059 d5fd 0CD60000 .long 0xd60c
+ 43060 d601 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 1075
+
+
+ 43061 d602 2C0C0000 .long 0xc2c
+ 43062 d606 04 .byte 0x4
+ 43063 d607 91 .byte 0x91
+ 43064 d608 F0B77F .sleb128 -9232
+ 43065 d60b 00 .byte 0x0
+ 43066 d60c 31 .uleb128 0x31
+ 43067 d60d 860E0000 .long 0xe86
+ 43068 d611 00000000 .quad .LBB3808
+ 43068 00000000
+ 43069 d619 00000000 .quad .LBE3808
+ 43069 00000000
+ 43070 d621 02 .byte 0x2
+ 43071 d622 9606 .value 0x696
+ 43072 d624 3BD60000 .long 0xd63b
+ 43073 d628 32 .uleb128 0x32
+ 43074 d629 A10E0000 .long 0xea1
+ 43075 d62d 03 .byte 0x3
+ 43076 d62e 91 .byte 0x91
+ 43077 d62f E07C .sleb128 -416
+ 43078 d631 32 .uleb128 0x32
+ 43079 d632 970E0000 .long 0xe97
+ 43080 d636 03 .byte 0x3
+ 43081 d637 91 .byte 0x91
+ 43082 d638 F07C .sleb128 -400
+ 43083 d63a 00 .byte 0x0
+ 43084 d63b 36 .uleb128 0x36
+ 43085 d63c 00000000 .quad .LBB3810
+ 43085 00000000
+ 43086 d644 00000000 .quad .LBE3810
+ 43086 00000000
+ 43087 d64c 5BD60000 .long 0xd65b
+ 43088 d650 34 .uleb128 0x34
+ 43089 d651 3C0C0000 .long 0xc3c
+ 43090 d655 04 .byte 0x4
+ 43091 d656 91 .byte 0x91
+ 43092 d657 E0B77F .sleb128 -9248
+ 43093 d65a 00 .byte 0x0
+ 43094 d65b 31 .uleb128 0x31
+ 43095 d65c AC0E0000 .long 0xeac
+ 43096 d660 00000000 .quad .LBB3811
+ 43096 00000000
+ 43097 d668 00000000 .quad .LBE3811
+ 43097 00000000
+ 43098 d670 02 .byte 0x2
+ 43099 d671 9806 .value 0x698
+ 43100 d673 ACD60000 .long 0xd6ac
+ 43101 d677 32 .uleb128 0x32
+ 43102 d678 BE0E0000 .long 0xebe
+ 43103 d67c 03 .byte 0x3
+ 43104 d67d 91 .byte 0x91
+ 43105 d67e 807D .sleb128 -384
+ 43106 d680 35 .uleb128 0x35
+ 43107 d681 CB0E0000 .long 0xecb
+ 43108 d685 00000000 .quad .LBB3813
+ 43108 00000000
+ 43109 d68d 00000000 .quad .LBE3813
+ 43109 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1076
+
+
+ 43110 d695 02 .byte 0x2
+ 43111 d696 4905 .value 0x549
+ 43112 d698 32 .uleb128 0x32
+ 43113 d699 E90E0000 .long 0xee9
+ 43114 d69d 03 .byte 0x3
+ 43115 d69e 91 .byte 0x91
+ 43116 d69f 9C7D .sleb128 -356
+ 43117 d6a1 32 .uleb128 0x32
+ 43118 d6a2 DD0E0000 .long 0xedd
+ 43119 d6a6 03 .byte 0x3
+ 43120 d6a7 91 .byte 0x91
+ 43121 d6a8 A07D .sleb128 -352
+ 43122 d6aa 00 .byte 0x0
+ 43123 d6ab 00 .byte 0x0
+ 43124 d6ac 33 .uleb128 0x33
+ 43125 d6ad 00000000 .quad .LBB3815
+ 43125 00000000
+ 43126 d6b5 00000000 .quad .LBE3815
+ 43126 00000000
+ 43127 d6bd 34 .uleb128 0x34
+ 43128 d6be 480C0000 .long 0xc48
+ 43129 d6c2 04 .byte 0x4
+ 43130 d6c3 91 .byte 0x91
+ 43131 d6c4 D0B77F .sleb128 -9264
+ 43132 d6c7 00 .byte 0x0
+ 43133 d6c8 00 .byte 0x0
+ 43134 d6c9 00 .byte 0x0
+ 43135 d6ca 31 .uleb128 0x31
+ 43136 d6cb F60E0000 .long 0xef6
+ 43137 d6cf 00000000 .quad .LBB3816
+ 43137 00000000
+ 43138 d6d7 00000000 .quad .LBE3816
+ 43138 00000000
+ 43139 d6df 02 .byte 0x2
+ 43140 d6e0 9207 .value 0x792
+ 43141 d6e2 DFD80000 .long 0xd8df
+ 43142 d6e6 32 .uleb128 0x32
+ 43143 d6e7 080F0000 .long 0xf08
+ 43144 d6eb 03 .byte 0x3
+ 43145 d6ec 91 .byte 0x91
+ 43146 d6ed B07D .sleb128 -336
+ 43147 d6ef 33 .uleb128 0x33
+ 43148 d6f0 00000000 .quad .LBB3817
+ 43148 00000000
+ 43149 d6f8 00000000 .quad .LBE3817
+ 43149 00000000
+ 43150 d700 34 .uleb128 0x34
+ 43151 d701 140F0000 .long 0xf14
+ 43152 d705 04 .byte 0x4
+ 43153 d706 76 .byte 0x76
+ 43154 d707 80B37F .sleb128 -9856
+ 43155 d70a 31 .uleb128 0x31
+ 43156 d70b 210F0000 .long 0xf21
+ 43157 d70f 00000000 .quad .LBB3818
+ 43157 00000000
+ 43158 d717 00000000 .quad .LBE3818
+ 43158 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1077
+
+
+ 43159 d71f 02 .byte 0x2
+ 43160 d720 1F06 .value 0x61f
+ 43161 d722 A7D70000 .long 0xd7a7
+ 43162 d726 32 .uleb128 0x32
+ 43163 d727 330F0000 .long 0xf33
+ 43164 d72b 03 .byte 0x3
+ 43165 d72c 91 .byte 0x91
+ 43166 d72d C07D .sleb128 -320
+ 43167 d72f 33 .uleb128 0x33
+ 43168 d730 00000000 .quad .LBB3819
+ 43168 00000000
+ 43169 d738 00000000 .quad .LBE3819
+ 43169 00000000
+ 43170 d740 34 .uleb128 0x34
+ 43171 d741 3F0F0000 .long 0xf3f
+ 43172 d745 09 .byte 0x9
+ 43173 d746 03 .byte 0x3
+ 43174 d747 00000000 .quad mask.7943
+ 43174 00000000
+ 43175 d74f 35 .uleb128 0x35
+ 43176 d750 A00D0000 .long 0xda0
+ 43177 d754 00000000 .quad .LBB3820
+ 43177 00000000
+ 43178 d75c 00000000 .quad .LBE3820
+ 43178 00000000
+ 43179 d764 02 .byte 0x2
+ 43180 d765 FE04 .value 0x4fe
+ 43181 d767 32 .uleb128 0x32
+ 43182 d768 BE0D0000 .long 0xdbe
+ 43183 d76c 03 .byte 0x3
+ 43184 d76d 91 .byte 0x91
+ 43185 d76e D07D .sleb128 -304
+ 43186 d770 32 .uleb128 0x32
+ 43187 d771 B20D0000 .long 0xdb2
+ 43188 d775 03 .byte 0x3
+ 43189 d776 91 .byte 0x91
+ 43190 d777 E07D .sleb128 -288
+ 43191 d779 35 .uleb128 0x35
+ 43192 d77a CB0D0000 .long 0xdcb
+ 43193 d77e 00000000 .quad .LBB3822
+ 43193 00000000
+ 43194 d786 00000000 .quad .LBE3822
+ 43194 00000000
+ 43195 d78e 02 .byte 0x2
+ 43196 d78f 7501 .value 0x175
+ 43197 d791 32 .uleb128 0x32
+ 43198 d792 E90D0000 .long 0xde9
+ 43199 d796 03 .byte 0x3
+ 43200 d797 91 .byte 0x91
+ 43201 d798 F07D .sleb128 -272
+ 43202 d79a 32 .uleb128 0x32
+ 43203 d79b DD0D0000 .long 0xddd
+ 43204 d79f 03 .byte 0x3
+ 43205 d7a0 91 .byte 0x91
+ 43206 d7a1 807E .sleb128 -256
+ 43207 d7a3 00 .byte 0x0
+ 43208 d7a4 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1078
+
+
+ 43209 d7a5 00 .byte 0x0
+ 43210 d7a6 00 .byte 0x0
+ 43211 d7a7 31 .uleb128 0x31
+ 43212 d7a8 210F0000 .long 0xf21
+ 43213 d7ac 00000000 .quad .LBB3824
+ 43213 00000000
+ 43214 d7b4 00000000 .quad .LBE3824
+ 43214 00000000
+ 43215 d7bc 02 .byte 0x2
+ 43216 d7bd 2006 .value 0x620
+ 43217 d7bf 44D80000 .long 0xd844
+ 43218 d7c3 32 .uleb128 0x32
+ 43219 d7c4 330F0000 .long 0xf33
+ 43220 d7c8 03 .byte 0x3
+ 43221 d7c9 91 .byte 0x91
+ 43222 d7ca 907E .sleb128 -240
+ 43223 d7cc 33 .uleb128 0x33
+ 43224 d7cd 00000000 .quad .LBB3825
+ 43224 00000000
+ 43225 d7d5 00000000 .quad .LBE3825
+ 43225 00000000
+ 43226 d7dd 34 .uleb128 0x34
+ 43227 d7de 3F0F0000 .long 0xf3f
+ 43228 d7e2 09 .byte 0x9
+ 43229 d7e3 03 .byte 0x3
+ 43230 d7e4 00000000 .quad mask.7943
+ 43230 00000000
+ 43231 d7ec 35 .uleb128 0x35
+ 43232 d7ed A00D0000 .long 0xda0
+ 43233 d7f1 00000000 .quad .LBB3826
+ 43233 00000000
+ 43234 d7f9 00000000 .quad .LBE3826
+ 43234 00000000
+ 43235 d801 02 .byte 0x2
+ 43236 d802 FE04 .value 0x4fe
+ 43237 d804 32 .uleb128 0x32
+ 43238 d805 BE0D0000 .long 0xdbe
+ 43239 d809 03 .byte 0x3
+ 43240 d80a 91 .byte 0x91
+ 43241 d80b A07E .sleb128 -224
+ 43242 d80d 32 .uleb128 0x32
+ 43243 d80e B20D0000 .long 0xdb2
+ 43244 d812 03 .byte 0x3
+ 43245 d813 91 .byte 0x91
+ 43246 d814 B07E .sleb128 -208
+ 43247 d816 35 .uleb128 0x35
+ 43248 d817 CB0D0000 .long 0xdcb
+ 43249 d81b 00000000 .quad .LBB3828
+ 43249 00000000
+ 43250 d823 00000000 .quad .LBE3828
+ 43250 00000000
+ 43251 d82b 02 .byte 0x2
+ 43252 d82c 7501 .value 0x175
+ 43253 d82e 32 .uleb128 0x32
+ 43254 d82f E90D0000 .long 0xde9
+ 43255 d833 03 .byte 0x3
+ 43256 d834 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1079
+
+
+ 43257 d835 C07E .sleb128 -192
+ 43258 d837 32 .uleb128 0x32
+ 43259 d838 DD0D0000 .long 0xddd
+ 43260 d83c 03 .byte 0x3
+ 43261 d83d 91 .byte 0x91
+ 43262 d83e D07E .sleb128 -176
+ 43263 d840 00 .byte 0x0
+ 43264 d841 00 .byte 0x0
+ 43265 d842 00 .byte 0x0
+ 43266 d843 00 .byte 0x0
+ 43267 d844 35 .uleb128 0x35
+ 43268 d845 210F0000 .long 0xf21
+ 43269 d849 00000000 .quad .LBB3830
+ 43269 00000000
+ 43270 d851 00000000 .quad .LBE3830
+ 43270 00000000
+ 43271 d859 02 .byte 0x2
+ 43272 d85a 2106 .value 0x621
+ 43273 d85c 32 .uleb128 0x32
+ 43274 d85d 330F0000 .long 0xf33
+ 43275 d861 03 .byte 0x3
+ 43276 d862 91 .byte 0x91
+ 43277 d863 E07E .sleb128 -160
+ 43278 d865 33 .uleb128 0x33
+ 43279 d866 00000000 .quad .LBB3831
+ 43279 00000000
+ 43280 d86e 00000000 .quad .LBE3831
+ 43280 00000000
+ 43281 d876 34 .uleb128 0x34
+ 43282 d877 3F0F0000 .long 0xf3f
+ 43283 d87b 09 .byte 0x9
+ 43284 d87c 03 .byte 0x3
+ 43285 d87d 00000000 .quad mask.7943
+ 43285 00000000
+ 43286 d885 35 .uleb128 0x35
+ 43287 d886 A00D0000 .long 0xda0
+ 43288 d88a 00000000 .quad .LBB3832
+ 43288 00000000
+ 43289 d892 00000000 .quad .LBE3832
+ 43289 00000000
+ 43290 d89a 02 .byte 0x2
+ 43291 d89b FE04 .value 0x4fe
+ 43292 d89d 32 .uleb128 0x32
+ 43293 d89e BE0D0000 .long 0xdbe
+ 43294 d8a2 03 .byte 0x3
+ 43295 d8a3 91 .byte 0x91
+ 43296 d8a4 F07E .sleb128 -144
+ 43297 d8a6 32 .uleb128 0x32
+ 43298 d8a7 B20D0000 .long 0xdb2
+ 43299 d8ab 03 .byte 0x3
+ 43300 d8ac 91 .byte 0x91
+ 43301 d8ad 807F .sleb128 -128
+ 43302 d8af 35 .uleb128 0x35
+ 43303 d8b0 CB0D0000 .long 0xdcb
+ 43304 d8b4 00000000 .quad .LBB3834
+ 43304 00000000
+ 43305 d8bc 00000000 .quad .LBE3834
+
GAS LISTING /tmp/ccjbMjHD.s page 1080
+
+
+ 43305 00000000
+ 43306 d8c4 02 .byte 0x2
+ 43307 d8c5 7501 .value 0x175
+ 43308 d8c7 32 .uleb128 0x32
+ 43309 d8c8 E90D0000 .long 0xde9
+ 43310 d8cc 03 .byte 0x3
+ 43311 d8cd 91 .byte 0x91
+ 43312 d8ce 907F .sleb128 -112
+ 43313 d8d0 32 .uleb128 0x32
+ 43314 d8d1 DD0D0000 .long 0xddd
+ 43315 d8d5 03 .byte 0x3
+ 43316 d8d6 91 .byte 0x91
+ 43317 d8d7 A07F .sleb128 -96
+ 43318 d8d9 00 .byte 0x0
+ 43319 d8da 00 .byte 0x0
+ 43320 d8db 00 .byte 0x0
+ 43321 d8dc 00 .byte 0x0
+ 43322 d8dd 00 .byte 0x0
+ 43323 d8de 00 .byte 0x0
+ 43324 d8df 35 .uleb128 0x35
+ 43325 d8e0 860E0000 .long 0xe86
+ 43326 d8e4 00000000 .quad .LBB3836
+ 43326 00000000
+ 43327 d8ec 00000000 .quad .LBE3836
+ 43327 00000000
+ 43328 d8f4 02 .byte 0x2
+ 43329 d8f5 9207 .value 0x792
+ 43330 d8f7 32 .uleb128 0x32
+ 43331 d8f8 A10E0000 .long 0xea1
+ 43332 d8fc 03 .byte 0x3
+ 43333 d8fd 91 .byte 0x91
+ 43334 d8fe B07F .sleb128 -80
+ 43335 d900 32 .uleb128 0x32
+ 43336 d901 970E0000 .long 0xe97
+ 43337 d905 02 .byte 0x2
+ 43338 d906 91 .byte 0x91
+ 43339 d907 40 .sleb128 -64
+ 43340 d908 00 .byte 0x0
+ 43341 d909 00 .byte 0x0
+ 43342 d90a 25 .uleb128 0x25
+ 43343 d90b 00000000 .long .LASF363
+ 43344 d90f 02 .byte 0x2
+ 43345 d910 4B04 .value 0x44b
+ 43346 d912 01 .byte 0x1
+ 43347 d913 B3010000 .long 0x1b3
+ 43348 d917 03 .byte 0x3
+ 43349 d918 6BD90000 .long 0xd96b
+ 43350 d91c 26 .uleb128 0x26
+ 43351 d91d 00000000 .long .LASF67
+ 43352 d921 02 .byte 0x2
+ 43353 d922 4B04 .value 0x44b
+ 43354 d924 B3010000 .long 0x1b3
+ 43355 d928 28 .uleb128 0x28
+ 43356 d929 723100 .string "r1"
+ 43357 d92c 02 .byte 0x2
+ 43358 d92d 5004 .value 0x450
+ 43359 d92f B3010000 .long 0x1b3
+
GAS LISTING /tmp/ccjbMjHD.s page 1081
+
+
+ 43360 d933 28 .uleb128 0x28
+ 43361 d934 723200 .string "r2"
+ 43362 d937 02 .byte 0x2
+ 43363 d938 5004 .value 0x450
+ 43364 d93a B3010000 .long 0x1b3
+ 43365 d93e 28 .uleb128 0x28
+ 43366 d93f 723300 .string "r3"
+ 43367 d942 02 .byte 0x2
+ 43368 d943 5004 .value 0x450
+ 43369 d945 B3010000 .long 0x1b3
+ 43370 d949 28 .uleb128 0x28
+ 43371 d94a 663200 .string "f2"
+ 43372 d94d 02 .byte 0x2
+ 43373 d94e 5004 .value 0x450
+ 43374 d950 B3010000 .long 0x1b3
+ 43375 d954 28 .uleb128 0x28
+ 43376 d955 663400 .string "f4"
+ 43377 d958 02 .byte 0x2
+ 43378 d959 5004 .value 0x450
+ 43379 d95b B3010000 .long 0x1b3
+ 43380 d95f 28 .uleb128 0x28
+ 43381 d960 663800 .string "f8"
+ 43382 d963 02 .byte 0x2
+ 43383 d964 5004 .value 0x450
+ 43384 d966 B3010000 .long 0x1b3
+ 43385 d96a 00 .byte 0x0
+ 43386 d96b 25 .uleb128 0x25
+ 43387 d96c 00000000 .long .LASF364
+ 43388 d970 02 .byte 0x2
+ 43389 d971 9F03 .value 0x39f
+ 43390 d973 01 .byte 0x1
+ 43391 d974 B3010000 .long 0x1b3
+ 43392 d978 03 .byte 0x3
+ 43393 d979 E6D90000 .long 0xd9e6
+ 43394 d97d 26 .uleb128 0x26
+ 43395 d97e 00000000 .long .LASF67
+ 43396 d982 02 .byte 0x2
+ 43397 d983 9F03 .value 0x39f
+ 43398 d985 B3010000 .long 0x1b3
+ 43399 d989 26 .uleb128 0x26
+ 43400 d98a 00000000 .long .LASF365
+ 43401 d98e 02 .byte 0x2
+ 43402 d98f 9F03 .value 0x39f
+ 43403 d991 B4000000 .long 0xb4
+ 43404 d995 28 .uleb128 0x28
+ 43405 d996 736C00 .string "sl"
+ 43406 d999 02 .byte 0x2
+ 43407 d99a A103 .value 0x3a1
+ 43408 d99c B3010000 .long 0x1b3
+ 43409 d9a0 28 .uleb128 0x28
+ 43410 d9a1 737200 .string "sr"
+ 43411 d9a4 02 .byte 0x2
+ 43412 d9a5 A103 .value 0x3a1
+ 43413 d9a7 B3010000 .long 0x1b3
+ 43414 d9ab 38 .uleb128 0x38
+ 43415 d9ac 00000000 .long .LASF366
+ 43416 d9b0 F6D90000 .long 0xd9f6
+
GAS LISTING /tmp/ccjbMjHD.s page 1082
+
+
+ 43417 d9b4 01 .byte 0x1
+ 43418 d9b5 00000000 .long .LASF364
+ 43419 d9b9 29 .uleb128 0x29
+ 43420 d9ba C9D90000 .long 0xd9c9
+ 43421 d9be 28 .uleb128 0x28
+ 43422 d9bf 7600 .string "v"
+ 43423 d9c1 02 .byte 0x2
+ 43424 d9c2 A503 .value 0x3a5
+ 43425 d9c4 29050000 .long 0x529
+ 43426 d9c8 00 .byte 0x0
+ 43427 d9c9 29 .uleb128 0x29
+ 43428 d9ca D9D90000 .long 0xd9d9
+ 43429 d9ce 28 .uleb128 0x28
+ 43430 d9cf 7600 .string "v"
+ 43431 d9d1 02 .byte 0x2
+ 43432 d9d2 A703 .value 0x3a7
+ 43433 d9d4 29050000 .long 0x529
+ 43434 d9d8 00 .byte 0x0
+ 43435 d9d9 2A .uleb128 0x2a
+ 43436 d9da 28 .uleb128 0x28
+ 43437 d9db 7600 .string "v"
+ 43438 d9dd 02 .byte 0x2
+ 43439 d9de A903 .value 0x3a9
+ 43440 d9e0 29050000 .long 0x529
+ 43441 d9e4 00 .byte 0x0
+ 43442 d9e5 00 .byte 0x0
+ 43443 d9e6 19 .uleb128 0x19
+ 43444 d9e7 9F000000 .long 0x9f
+ 43445 d9eb F6D90000 .long 0xd9f6
+ 43446 d9ef 1A .uleb128 0x1a
+ 43447 d9f0 9C000000 .long 0x9c
+ 43448 d9f4 1B .byte 0x1b
+ 43449 d9f5 00 .byte 0x0
+ 43450 d9f6 06 .uleb128 0x6
+ 43451 d9f7 E6D90000 .long 0xd9e6
+ 43452 d9fb 25 .uleb128 0x25
+ 43453 d9fc 00000000 .long .LASF367
+ 43454 da00 02 .byte 0x2
+ 43455 da01 CF01 .value 0x1cf
+ 43456 da03 01 .byte 0x1
+ 43457 da04 B3010000 .long 0x1b3
+ 43458 da08 03 .byte 0x3
+ 43459 da09 BFDA0000 .long 0xdabf
+ 43460 da0d 2B .uleb128 0x2b
+ 43461 da0e 7600 .string "v"
+ 43462 da10 02 .byte 0x2
+ 43463 da11 CF01 .value 0x1cf
+ 43464 da13 B3010000 .long 0x1b3
+ 43465 da17 2B .uleb128 0x2b
+ 43466 da18 6B00 .string "k"
+ 43467 da1a 02 .byte 0x2
+ 43468 da1b CF01 .value 0x1cf
+ 43469 da1d B4000000 .long 0xb4
+ 43470 da21 2C .uleb128 0x2c
+ 43471 da22 00000000 .long .LASF368
+ 43472 da26 02 .byte 0x2
+ 43473 da27 D201 .value 0x1d2
+
GAS LISTING /tmp/ccjbMjHD.s page 1083
+
+
+ 43474 da29 CFDA0000 .long 0xdacf
+ 43475 da2d 90 .byte 0x90
+ 43476 da2e FF .byte 0xff
+ 43477 da2f FF .byte 0xff
+ 43478 da30 FF .byte 0xff
+ 43479 da31 FF .byte 0xff
+ 43480 da32 FF .byte 0xff
+ 43481 da33 FF .byte 0xff
+ 43482 da34 FF .byte 0xff
+ 43483 da35 FF .byte 0xff
+ 43484 da36 FF .byte 0xff
+ 43485 da37 FF .byte 0xff
+ 43486 da38 FF .byte 0xff
+ 43487 da39 FF .byte 0xff
+ 43488 da3a FF .byte 0xff
+ 43489 da3b FF .byte 0xff
+ 43490 da3c FF .byte 0xff
+ 43491 da3d FF .byte 0xff
+ 43492 da3e 7F .byte 0x7f
+ 43493 da3f 7F .byte 0x7f
+ 43494 da40 7F .byte 0x7f
+ 43495 da41 7F .byte 0x7f
+ 43496 da42 7F .byte 0x7f
+ 43497 da43 7F .byte 0x7f
+ 43498 da44 7F .byte 0x7f
+ 43499 da45 7F .byte 0x7f
+ 43500 da46 7F .byte 0x7f
+ 43501 da47 7F .byte 0x7f
+ 43502 da48 7F .byte 0x7f
+ 43503 da49 7F .byte 0x7f
+ 43504 da4a 7F .byte 0x7f
+ 43505 da4b 7F .byte 0x7f
+ 43506 da4c 7F .byte 0x7f
+ 43507 da4d 7F .byte 0x7f
+ 43508 da4e 3F .byte 0x3f
+ 43509 da4f 3F .byte 0x3f
+ 43510 da50 3F .byte 0x3f
+ 43511 da51 3F .byte 0x3f
+ 43512 da52 3F .byte 0x3f
+ 43513 da53 3F .byte 0x3f
+ 43514 da54 3F .byte 0x3f
+ 43515 da55 3F .byte 0x3f
+ 43516 da56 3F .byte 0x3f
+ 43517 da57 3F .byte 0x3f
+ 43518 da58 3F .byte 0x3f
+ 43519 da59 3F .byte 0x3f
+ 43520 da5a 3F .byte 0x3f
+ 43521 da5b 3F .byte 0x3f
+ 43522 da5c 3F .byte 0x3f
+ 43523 da5d 3F .byte 0x3f
+ 43524 da5e 1F .byte 0x1f
+ 43525 da5f 1F .byte 0x1f
+ 43526 da60 1F .byte 0x1f
+ 43527 da61 1F .byte 0x1f
+ 43528 da62 1F .byte 0x1f
+ 43529 da63 1F .byte 0x1f
+ 43530 da64 1F .byte 0x1f
+
GAS LISTING /tmp/ccjbMjHD.s page 1084
+
+
+ 43531 da65 1F .byte 0x1f
+ 43532 da66 1F .byte 0x1f
+ 43533 da67 1F .byte 0x1f
+ 43534 da68 1F .byte 0x1f
+ 43535 da69 1F .byte 0x1f
+ 43536 da6a 1F .byte 0x1f
+ 43537 da6b 1F .byte 0x1f
+ 43538 da6c 1F .byte 0x1f
+ 43539 da6d 1F .byte 0x1f
+ 43540 da6e 0F .byte 0xf
+ 43541 da6f 0F .byte 0xf
+ 43542 da70 0F .byte 0xf
+ 43543 da71 0F .byte 0xf
+ 43544 da72 0F .byte 0xf
+ 43545 da73 0F .byte 0xf
+ 43546 da74 0F .byte 0xf
+ 43547 da75 0F .byte 0xf
+ 43548 da76 0F .byte 0xf
+ 43549 da77 0F .byte 0xf
+ 43550 da78 0F .byte 0xf
+ 43551 da79 0F .byte 0xf
+ 43552 da7a 0F .byte 0xf
+ 43553 da7b 0F .byte 0xf
+ 43554 da7c 0F .byte 0xf
+ 43555 da7d 0F .byte 0xf
+ 43556 da7e 07 .byte 0x7
+ 43557 da7f 07 .byte 0x7
+ 43558 da80 07 .byte 0x7
+ 43559 da81 07 .byte 0x7
+ 43560 da82 07 .byte 0x7
+ 43561 da83 07 .byte 0x7
+ 43562 da84 07 .byte 0x7
+ 43563 da85 07 .byte 0x7
+ 43564 da86 07 .byte 0x7
+ 43565 da87 07 .byte 0x7
+ 43566 da88 07 .byte 0x7
+ 43567 da89 07 .byte 0x7
+ 43568 da8a 07 .byte 0x7
+ 43569 da8b 07 .byte 0x7
+ 43570 da8c 07 .byte 0x7
+ 43571 da8d 07 .byte 0x7
+ 43572 da8e 03 .byte 0x3
+ 43573 da8f 03 .byte 0x3
+ 43574 da90 03 .byte 0x3
+ 43575 da91 03 .byte 0x3
+ 43576 da92 03 .byte 0x3
+ 43577 da93 03 .byte 0x3
+ 43578 da94 03 .byte 0x3
+ 43579 da95 03 .byte 0x3
+ 43580 da96 03 .byte 0x3
+ 43581 da97 03 .byte 0x3
+ 43582 da98 03 .byte 0x3
+ 43583 da99 03 .byte 0x3
+ 43584 da9a 03 .byte 0x3
+ 43585 da9b 03 .byte 0x3
+ 43586 da9c 03 .byte 0x3
+ 43587 da9d 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1085
+
+
+ 43588 da9e 01 .byte 0x1
+ 43589 da9f 01 .byte 0x1
+ 43590 daa0 01 .byte 0x1
+ 43591 daa1 01 .byte 0x1
+ 43592 daa2 01 .byte 0x1
+ 43593 daa3 01 .byte 0x1
+ 43594 daa4 01 .byte 0x1
+ 43595 daa5 01 .byte 0x1
+ 43596 daa6 01 .byte 0x1
+ 43597 daa7 01 .byte 0x1
+ 43598 daa8 01 .byte 0x1
+ 43599 daa9 01 .byte 0x1
+ 43600 daaa 01 .byte 0x1
+ 43601 daab 01 .byte 0x1
+ 43602 daac 01 .byte 0x1
+ 43603 daad 01 .byte 0x1
+ 43604 daae 00 .byte 0x0
+ 43605 daaf 00 .byte 0x0
+ 43606 dab0 00 .byte 0x0
+ 43607 dab1 00 .byte 0x0
+ 43608 dab2 00 .byte 0x0
+ 43609 dab3 00 .byte 0x0
+ 43610 dab4 00 .byte 0x0
+ 43611 dab5 00 .byte 0x0
+ 43612 dab6 00 .byte 0x0
+ 43613 dab7 00 .byte 0x0
+ 43614 dab8 00 .byte 0x0
+ 43615 dab9 00 .byte 0x0
+ 43616 daba 00 .byte 0x0
+ 43617 dabb 00 .byte 0x0
+ 43618 dabc 00 .byte 0x0
+ 43619 dabd 00 .byte 0x0
+ 43620 dabe 00 .byte 0x0
+ 43621 dabf 19 .uleb128 0x19
+ 43622 dac0 B3010000 .long 0x1b3
+ 43623 dac4 CFDA0000 .long 0xdacf
+ 43624 dac8 1A .uleb128 0x1a
+ 43625 dac9 9C000000 .long 0x9c
+ 43626 dacd 08 .byte 0x8
+ 43627 dace 00 .byte 0x0
+ 43628 dacf 06 .uleb128 0x6
+ 43629 dad0 BFDA0000 .long 0xdabf
+ 43630 dad4 25 .uleb128 0x25
+ 43631 dad5 00000000 .long .LASF369
+ 43632 dad9 02 .byte 0x2
+ 43633 dada 9201 .value 0x192
+ 43634 dadc 01 .byte 0x1
+ 43635 dadd B3010000 .long 0x1b3
+ 43636 dae1 03 .byte 0x3
+ 43637 dae2 B1DB0000 .long 0xdbb1
+ 43638 dae6 2B .uleb128 0x2b
+ 43639 dae7 7600 .string "v"
+ 43640 dae9 02 .byte 0x2
+ 43641 daea 9201 .value 0x192
+ 43642 daec B3010000 .long 0x1b3
+ 43643 daf0 2B .uleb128 0x2b
+ 43644 daf1 6B00 .string "k"
+
GAS LISTING /tmp/ccjbMjHD.s page 1086
+
+
+ 43645 daf3 02 .byte 0x2
+ 43646 daf4 9201 .value 0x192
+ 43647 daf6 B4000000 .long 0xb4
+ 43648 dafa 2C .uleb128 0x2c
+ 43649 dafb 00000000 .long .LASF370
+ 43650 daff 02 .byte 0x2
+ 43651 db00 9501 .value 0x195
+ 43652 db02 B1DB0000 .long 0xdbb1
+ 43653 db06 90 .byte 0x90
+ 43654 db07 FF .byte 0xff
+ 43655 db08 FF .byte 0xff
+ 43656 db09 FF .byte 0xff
+ 43657 db0a FF .byte 0xff
+ 43658 db0b FF .byte 0xff
+ 43659 db0c FF .byte 0xff
+ 43660 db0d FF .byte 0xff
+ 43661 db0e FF .byte 0xff
+ 43662 db0f FF .byte 0xff
+ 43663 db10 FF .byte 0xff
+ 43664 db11 FF .byte 0xff
+ 43665 db12 FF .byte 0xff
+ 43666 db13 FF .byte 0xff
+ 43667 db14 FF .byte 0xff
+ 43668 db15 FF .byte 0xff
+ 43669 db16 FF .byte 0xff
+ 43670 db17 FE .byte 0xfe
+ 43671 db18 FE .byte 0xfe
+ 43672 db19 FE .byte 0xfe
+ 43673 db1a FE .byte 0xfe
+ 43674 db1b FE .byte 0xfe
+ 43675 db1c FE .byte 0xfe
+ 43676 db1d FE .byte 0xfe
+ 43677 db1e FE .byte 0xfe
+ 43678 db1f FE .byte 0xfe
+ 43679 db20 FE .byte 0xfe
+ 43680 db21 FE .byte 0xfe
+ 43681 db22 FE .byte 0xfe
+ 43682 db23 FE .byte 0xfe
+ 43683 db24 FE .byte 0xfe
+ 43684 db25 FE .byte 0xfe
+ 43685 db26 FE .byte 0xfe
+ 43686 db27 FC .byte 0xfc
+ 43687 db28 FC .byte 0xfc
+ 43688 db29 FC .byte 0xfc
+ 43689 db2a FC .byte 0xfc
+ 43690 db2b FC .byte 0xfc
+ 43691 db2c FC .byte 0xfc
+ 43692 db2d FC .byte 0xfc
+ 43693 db2e FC .byte 0xfc
+ 43694 db2f FC .byte 0xfc
+ 43695 db30 FC .byte 0xfc
+ 43696 db31 FC .byte 0xfc
+ 43697 db32 FC .byte 0xfc
+ 43698 db33 FC .byte 0xfc
+ 43699 db34 FC .byte 0xfc
+ 43700 db35 FC .byte 0xfc
+ 43701 db36 FC .byte 0xfc
+
GAS LISTING /tmp/ccjbMjHD.s page 1087
+
+
+ 43702 db37 F8 .byte 0xf8
+ 43703 db38 F8 .byte 0xf8
+ 43704 db39 F8 .byte 0xf8
+ 43705 db3a F8 .byte 0xf8
+ 43706 db3b F8 .byte 0xf8
+ 43707 db3c F8 .byte 0xf8
+ 43708 db3d F8 .byte 0xf8
+ 43709 db3e F8 .byte 0xf8
+ 43710 db3f F8 .byte 0xf8
+ 43711 db40 F8 .byte 0xf8
+ 43712 db41 F8 .byte 0xf8
+ 43713 db42 F8 .byte 0xf8
+ 43714 db43 F8 .byte 0xf8
+ 43715 db44 F8 .byte 0xf8
+ 43716 db45 F8 .byte 0xf8
+ 43717 db46 F8 .byte 0xf8
+ 43718 db47 F0 .byte 0xf0
+ 43719 db48 F0 .byte 0xf0
+ 43720 db49 F0 .byte 0xf0
+ 43721 db4a F0 .byte 0xf0
+ 43722 db4b F0 .byte 0xf0
+ 43723 db4c F0 .byte 0xf0
+ 43724 db4d F0 .byte 0xf0
+ 43725 db4e F0 .byte 0xf0
+ 43726 db4f F0 .byte 0xf0
+ 43727 db50 F0 .byte 0xf0
+ 43728 db51 F0 .byte 0xf0
+ 43729 db52 F0 .byte 0xf0
+ 43730 db53 F0 .byte 0xf0
+ 43731 db54 F0 .byte 0xf0
+ 43732 db55 F0 .byte 0xf0
+ 43733 db56 F0 .byte 0xf0
+ 43734 db57 E0 .byte 0xe0
+ 43735 db58 E0 .byte 0xe0
+ 43736 db59 E0 .byte 0xe0
+ 43737 db5a E0 .byte 0xe0
+ 43738 db5b E0 .byte 0xe0
+ 43739 db5c E0 .byte 0xe0
+ 43740 db5d E0 .byte 0xe0
+ 43741 db5e E0 .byte 0xe0
+ 43742 db5f E0 .byte 0xe0
+ 43743 db60 E0 .byte 0xe0
+ 43744 db61 E0 .byte 0xe0
+ 43745 db62 E0 .byte 0xe0
+ 43746 db63 E0 .byte 0xe0
+ 43747 db64 E0 .byte 0xe0
+ 43748 db65 E0 .byte 0xe0
+ 43749 db66 E0 .byte 0xe0
+ 43750 db67 C0 .byte 0xc0
+ 43751 db68 C0 .byte 0xc0
+ 43752 db69 C0 .byte 0xc0
+ 43753 db6a C0 .byte 0xc0
+ 43754 db6b C0 .byte 0xc0
+ 43755 db6c C0 .byte 0xc0
+ 43756 db6d C0 .byte 0xc0
+ 43757 db6e C0 .byte 0xc0
+ 43758 db6f C0 .byte 0xc0
+
GAS LISTING /tmp/ccjbMjHD.s page 1088
+
+
+ 43759 db70 C0 .byte 0xc0
+ 43760 db71 C0 .byte 0xc0
+ 43761 db72 C0 .byte 0xc0
+ 43762 db73 C0 .byte 0xc0
+ 43763 db74 C0 .byte 0xc0
+ 43764 db75 C0 .byte 0xc0
+ 43765 db76 C0 .byte 0xc0
+ 43766 db77 80 .byte 0x80
+ 43767 db78 80 .byte 0x80
+ 43768 db79 80 .byte 0x80
+ 43769 db7a 80 .byte 0x80
+ 43770 db7b 80 .byte 0x80
+ 43771 db7c 80 .byte 0x80
+ 43772 db7d 80 .byte 0x80
+ 43773 db7e 80 .byte 0x80
+ 43774 db7f 80 .byte 0x80
+ 43775 db80 80 .byte 0x80
+ 43776 db81 80 .byte 0x80
+ 43777 db82 80 .byte 0x80
+ 43778 db83 80 .byte 0x80
+ 43779 db84 80 .byte 0x80
+ 43780 db85 80 .byte 0x80
+ 43781 db86 80 .byte 0x80
+ 43782 db87 00 .byte 0x0
+ 43783 db88 00 .byte 0x0
+ 43784 db89 00 .byte 0x0
+ 43785 db8a 00 .byte 0x0
+ 43786 db8b 00 .byte 0x0
+ 43787 db8c 00 .byte 0x0
+ 43788 db8d 00 .byte 0x0
+ 43789 db8e 00 .byte 0x0
+ 43790 db8f 00 .byte 0x0
+ 43791 db90 00 .byte 0x0
+ 43792 db91 00 .byte 0x0
+ 43793 db92 00 .byte 0x0
+ 43794 db93 00 .byte 0x0
+ 43795 db94 00 .byte 0x0
+ 43796 db95 00 .byte 0x0
+ 43797 db96 00 .byte 0x0
+ 43798 db97 28 .uleb128 0x28
+ 43799 db98 767600 .string "vv"
+ 43800 db9b 02 .byte 0x2
+ 43801 db9c AA01 .value 0x1aa
+ 43802 db9e B3010000 .long 0x1b3
+ 43803 dba2 38 .uleb128 0x38
+ 43804 dba3 00000000 .long .LASF366
+ 43805 dba7 C6DB0000 .long 0xdbc6
+ 43806 dbab 01 .byte 0x1
+ 43807 dbac 00000000 .long .LASF369
+ 43808 dbb0 00 .byte 0x0
+ 43809 dbb1 06 .uleb128 0x6
+ 43810 dbb2 BFDA0000 .long 0xdabf
+ 43811 dbb6 19 .uleb128 0x19
+ 43812 dbb7 9F000000 .long 0x9f
+ 43813 dbbb C6DB0000 .long 0xdbc6
+ 43814 dbbf 1A .uleb128 0x1a
+ 43815 dbc0 9C000000 .long 0x9c
+
GAS LISTING /tmp/ccjbMjHD.s page 1089
+
+
+ 43816 dbc4 1D .byte 0x1d
+ 43817 dbc5 00 .byte 0x0
+ 43818 dbc6 06 .uleb128 0x6
+ 43819 dbc7 B6DB0000 .long 0xdbb6
+ 43820 dbcb 25 .uleb128 0x25
+ 43821 dbcc 00000000 .long .LASF371
+ 43822 dbd0 03 .byte 0x3
+ 43823 dbd1 9E01 .value 0x19e
+ 43824 dbd3 01 .byte 0x1
+ 43825 dbd4 E7000000 .long 0xe7
+ 43826 dbd8 03 .byte 0x3
+ 43827 dbd9 F6DB0000 .long 0xdbf6
+ 43828 dbdd 2B .uleb128 0x2b
+ 43829 dbde 76696E00 .string "vin"
+ 43830 dbe2 03 .byte 0x3
+ 43831 dbe3 9E01 .value 0x19e
+ 43832 dbe5 E7000000 .long 0xe7
+ 43833 dbe9 26 .uleb128 0x26
+ 43834 dbea 00000000 .long .LASF331
+ 43835 dbee 03 .byte 0x3
+ 43836 dbef 9E01 .value 0x19e
+ 43837 dbf1 B4000000 .long 0xb4
+ 43838 dbf5 00 .byte 0x0
+ 43839 dbf6 2D .uleb128 0x2d
+ 43840 dbf7 00000000 .long .LASF372
+ 43841 dbfb 02 .byte 0x2
+ 43842 dbfc 9E07 .value 0x79e
+ 43843 dbfe 01 .byte 0x1
+ 43844 dbff 00000000 .quad .LFB648
+ 43844 00000000
+ 43845 dc07 00000000 .quad .LFE648
+ 43845 00000000
+ 43846 dc0f 00000000 .long .LLST4
+ 43847 dc13 26E80000 .long 0xe826
+ 43848 dc17 2F .uleb128 0x2f
+ 43849 dc18 7200 .string "r"
+ 43850 dc1a 02 .byte 0x2
+ 43851 dc1b 9E07 .value 0x79e
+ 43852 dc1d 24560000 .long 0x5624
+ 43853 dc21 03 .byte 0x3
+ 43854 dc22 91 .byte 0x91
+ 43855 dc23 D871 .sleb128 -1832
+ 43856 dc25 2F .uleb128 0x2f
+ 43857 dc26 647200 .string "dr"
+ 43858 dc29 02 .byte 0x2
+ 43859 dc2a 9E07 .value 0x79e
+ 43860 dc2c 440D0000 .long 0xd44
+ 43861 dc30 03 .byte 0x3
+ 43862 dc31 91 .byte 0x91
+ 43863 dc32 D071 .sleb128 -1840
+ 43864 dc34 2F .uleb128 0x2f
+ 43865 dc35 4E7200 .string "Nr"
+ 43866 dc38 02 .byte 0x2
+ 43867 dc39 9E07 .value 0x79e
+ 43868 dc3b 78000000 .long 0x78
+ 43869 dc3f 03 .byte 0x3
+ 43870 dc40 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1090
+
+
+ 43871 dc41 CC71 .sleb128 -1844
+ 43872 dc43 37 .uleb128 0x37
+ 43873 dc44 697800 .string "ix"
+ 43874 dc47 02 .byte 0x2
+ 43875 dc48 A007 .value 0x7a0
+ 43876 dc4a 78000000 .long 0x78
+ 43877 dc4e 03 .byte 0x3
+ 43878 dc4f 91 .byte 0x91
+ 43879 dc50 F872 .sleb128 -1672
+ 43880 dc52 37 .uleb128 0x37
+ 43881 dc53 6A7800 .string "jx"
+ 43882 dc56 02 .byte 0x2
+ 43883 dc57 A007 .value 0x7a0
+ 43884 dc59 78000000 .long 0x78
+ 43885 dc5d 03 .byte 0x3
+ 43886 dc5e 91 .byte 0x91
+ 43887 dc5f FC72 .sleb128 -1668
+ 43888 dc61 35 .uleb128 0x35
+ 43889 dc62 0AD90000 .long 0xd90a
+ 43890 dc66 00000000 .quad .LBB3943
+ 43890 00000000
+ 43891 dc6e 00000000 .quad .LBE3943
+ 43891 00000000
+ 43892 dc76 02 .byte 0x2
+ 43893 dc77 A607 .value 0x7a6
+ 43894 dc79 32 .uleb128 0x32
+ 43895 dc7a 1CD90000 .long 0xd91c
+ 43896 dc7e 03 .byte 0x3
+ 43897 dc7f 91 .byte 0x91
+ 43898 dc80 8073 .sleb128 -1664
+ 43899 dc82 33 .uleb128 0x33
+ 43900 dc83 00000000 .quad .LBB3944
+ 43900 00000000
+ 43901 dc8b 00000000 .quad .LBE3944
+ 43901 00000000
+ 43902 dc93 34 .uleb128 0x34
+ 43903 dc94 28D90000 .long 0xd928
+ 43904 dc98 03 .byte 0x3
+ 43905 dc99 76 .byte 0x76
+ 43906 dc9a C071 .sleb128 -1856
+ 43907 dc9c 34 .uleb128 0x34
+ 43908 dc9d 33D90000 .long 0xd933
+ 43909 dca1 03 .byte 0x3
+ 43910 dca2 76 .byte 0x76
+ 43911 dca3 B071 .sleb128 -1872
+ 43912 dca5 34 .uleb128 0x34
+ 43913 dca6 3ED90000 .long 0xd93e
+ 43914 dcaa 03 .byte 0x3
+ 43915 dcab 76 .byte 0x76
+ 43916 dcac A071 .sleb128 -1888
+ 43917 dcae 34 .uleb128 0x34
+ 43918 dcaf 49D90000 .long 0xd949
+ 43919 dcb3 03 .byte 0x3
+ 43920 dcb4 76 .byte 0x76
+ 43921 dcb5 9071 .sleb128 -1904
+ 43922 dcb7 34 .uleb128 0x34
+ 43923 dcb8 54D90000 .long 0xd954
+
GAS LISTING /tmp/ccjbMjHD.s page 1091
+
+
+ 43924 dcbc 03 .byte 0x3
+ 43925 dcbd 76 .byte 0x76
+ 43926 dcbe 8071 .sleb128 -1920
+ 43927 dcc0 34 .uleb128 0x34
+ 43928 dcc1 5FD90000 .long 0xd95f
+ 43929 dcc5 03 .byte 0x3
+ 43930 dcc6 76 .byte 0x76
+ 43931 dcc7 F070 .sleb128 -1936
+ 43932 dcc9 31 .uleb128 0x31
+ 43933 dcca 4A0E0000 .long 0xe4a
+ 43934 dcce 00000000 .quad .LBB3945
+ 43934 00000000
+ 43935 dcd6 00000000 .quad .LBE3945
+ 43935 00000000
+ 43936 dcde 02 .byte 0x2
+ 43937 dcdf 5204 .value 0x452
+ 43938 dce1 66DD0000 .long 0xdd66
+ 43939 dce5 32 .uleb128 0x32
+ 43940 dce6 5C0E0000 .long 0xe5c
+ 43941 dcea 03 .byte 0x3
+ 43942 dceb 91 .byte 0x91
+ 43943 dcec 9073 .sleb128 -1648
+ 43944 dcee 33 .uleb128 0x33
+ 43945 dcef 00000000 .quad .LBB3946
+ 43945 00000000
+ 43946 dcf7 00000000 .quad .LBE3946
+ 43946 00000000
+ 43947 dcff 34 .uleb128 0x34
+ 43948 dd00 680E0000 .long 0xe68
+ 43949 dd04 09 .byte 0x9
+ 43950 dd05 03 .byte 0x3
+ 43951 dd06 00000000 .quad ShiftRowTable.7385
+ 43951 00000000
+ 43952 dd0e 35 .uleb128 0x35
+ 43953 dd0f A00D0000 .long 0xda0
+ 43954 dd13 00000000 .quad .LBB3947
+ 43954 00000000
+ 43955 dd1b 00000000 .quad .LBE3947
+ 43955 00000000
+ 43956 dd23 02 .byte 0x2
+ 43957 dd24 9B02 .value 0x29b
+ 43958 dd26 32 .uleb128 0x32
+ 43959 dd27 BE0D0000 .long 0xdbe
+ 43960 dd2b 03 .byte 0x3
+ 43961 dd2c 91 .byte 0x91
+ 43962 dd2d A073 .sleb128 -1632
+ 43963 dd2f 32 .uleb128 0x32
+ 43964 dd30 B20D0000 .long 0xdb2
+ 43965 dd34 03 .byte 0x3
+ 43966 dd35 91 .byte 0x91
+ 43967 dd36 B073 .sleb128 -1616
+ 43968 dd38 35 .uleb128 0x35
+ 43969 dd39 CB0D0000 .long 0xdcb
+ 43970 dd3d 00000000 .quad .LBB3949
+ 43970 00000000
+ 43971 dd45 00000000 .quad .LBE3949
+ 43971 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1092
+
+
+ 43972 dd4d 02 .byte 0x2
+ 43973 dd4e 7501 .value 0x175
+ 43974 dd50 32 .uleb128 0x32
+ 43975 dd51 E90D0000 .long 0xde9
+ 43976 dd55 03 .byte 0x3
+ 43977 dd56 91 .byte 0x91
+ 43978 dd57 C073 .sleb128 -1600
+ 43979 dd59 32 .uleb128 0x32
+ 43980 dd5a DD0D0000 .long 0xddd
+ 43981 dd5e 03 .byte 0x3
+ 43982 dd5f 91 .byte 0x91
+ 43983 dd60 D073 .sleb128 -1584
+ 43984 dd62 00 .byte 0x0
+ 43985 dd63 00 .byte 0x0
+ 43986 dd64 00 .byte 0x0
+ 43987 dd65 00 .byte 0x0
+ 43988 dd66 31 .uleb128 0x31
+ 43989 dd67 4A0E0000 .long 0xe4a
+ 43990 dd6b 00000000 .quad .LBB3951
+ 43990 00000000
+ 43991 dd73 00000000 .quad .LBE3951
+ 43991 00000000
+ 43992 dd7b 02 .byte 0x2
+ 43993 dd7c 5304 .value 0x453
+ 43994 dd7e 03DE0000 .long 0xde03
+ 43995 dd82 32 .uleb128 0x32
+ 43996 dd83 5C0E0000 .long 0xe5c
+ 43997 dd87 03 .byte 0x3
+ 43998 dd88 91 .byte 0x91
+ 43999 dd89 E073 .sleb128 -1568
+ 44000 dd8b 33 .uleb128 0x33
+ 44001 dd8c 00000000 .quad .LBB3952
+ 44001 00000000
+ 44002 dd94 00000000 .quad .LBE3952
+ 44002 00000000
+ 44003 dd9c 34 .uleb128 0x34
+ 44004 dd9d 680E0000 .long 0xe68
+ 44005 dda1 09 .byte 0x9
+ 44006 dda2 03 .byte 0x3
+ 44007 dda3 00000000 .quad ShiftRowTable.7385
+ 44007 00000000
+ 44008 ddab 35 .uleb128 0x35
+ 44009 ddac A00D0000 .long 0xda0
+ 44010 ddb0 00000000 .quad .LBB3953
+ 44010 00000000
+ 44011 ddb8 00000000 .quad .LBE3953
+ 44011 00000000
+ 44012 ddc0 02 .byte 0x2
+ 44013 ddc1 9B02 .value 0x29b
+ 44014 ddc3 32 .uleb128 0x32
+ 44015 ddc4 BE0D0000 .long 0xdbe
+ 44016 ddc8 03 .byte 0x3
+ 44017 ddc9 91 .byte 0x91
+ 44018 ddca F073 .sleb128 -1552
+ 44019 ddcc 32 .uleb128 0x32
+ 44020 ddcd B20D0000 .long 0xdb2
+ 44021 ddd1 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1093
+
+
+ 44022 ddd2 91 .byte 0x91
+ 44023 ddd3 8074 .sleb128 -1536
+ 44024 ddd5 35 .uleb128 0x35
+ 44025 ddd6 CB0D0000 .long 0xdcb
+ 44026 ddda 00000000 .quad .LBB3955
+ 44026 00000000
+ 44027 dde2 00000000 .quad .LBE3955
+ 44027 00000000
+ 44028 ddea 02 .byte 0x2
+ 44029 ddeb 7501 .value 0x175
+ 44030 dded 32 .uleb128 0x32
+ 44031 ddee E90D0000 .long 0xde9
+ 44032 ddf2 03 .byte 0x3
+ 44033 ddf3 91 .byte 0x91
+ 44034 ddf4 9074 .sleb128 -1520
+ 44035 ddf6 32 .uleb128 0x32
+ 44036 ddf7 DD0D0000 .long 0xddd
+ 44037 ddfb 03 .byte 0x3
+ 44038 ddfc 91 .byte 0x91
+ 44039 ddfd A074 .sleb128 -1504
+ 44040 ddff 00 .byte 0x0
+ 44041 de00 00 .byte 0x0
+ 44042 de01 00 .byte 0x0
+ 44043 de02 00 .byte 0x0
+ 44044 de03 31 .uleb128 0x31
+ 44045 de04 4A0E0000 .long 0xe4a
+ 44046 de08 00000000 .quad .LBB3957
+ 44046 00000000
+ 44047 de10 00000000 .quad .LBE3957
+ 44047 00000000
+ 44048 de18 02 .byte 0x2
+ 44049 de19 5404 .value 0x454
+ 44050 de1b A0DE0000 .long 0xdea0
+ 44051 de1f 32 .uleb128 0x32
+ 44052 de20 5C0E0000 .long 0xe5c
+ 44053 de24 03 .byte 0x3
+ 44054 de25 91 .byte 0x91
+ 44055 de26 B074 .sleb128 -1488
+ 44056 de28 33 .uleb128 0x33
+ 44057 de29 00000000 .quad .LBB3958
+ 44057 00000000
+ 44058 de31 00000000 .quad .LBE3958
+ 44058 00000000
+ 44059 de39 34 .uleb128 0x34
+ 44060 de3a 680E0000 .long 0xe68
+ 44061 de3e 09 .byte 0x9
+ 44062 de3f 03 .byte 0x3
+ 44063 de40 00000000 .quad ShiftRowTable.7385
+ 44063 00000000
+ 44064 de48 35 .uleb128 0x35
+ 44065 de49 A00D0000 .long 0xda0
+ 44066 de4d 00000000 .quad .LBB3959
+ 44066 00000000
+ 44067 de55 00000000 .quad .LBE3959
+ 44067 00000000
+ 44068 de5d 02 .byte 0x2
+ 44069 de5e 9B02 .value 0x29b
+
GAS LISTING /tmp/ccjbMjHD.s page 1094
+
+
+ 44070 de60 32 .uleb128 0x32
+ 44071 de61 BE0D0000 .long 0xdbe
+ 44072 de65 03 .byte 0x3
+ 44073 de66 91 .byte 0x91
+ 44074 de67 C074 .sleb128 -1472
+ 44075 de69 32 .uleb128 0x32
+ 44076 de6a B20D0000 .long 0xdb2
+ 44077 de6e 03 .byte 0x3
+ 44078 de6f 91 .byte 0x91
+ 44079 de70 D074 .sleb128 -1456
+ 44080 de72 35 .uleb128 0x35
+ 44081 de73 CB0D0000 .long 0xdcb
+ 44082 de77 00000000 .quad .LBB3961
+ 44082 00000000
+ 44083 de7f 00000000 .quad .LBE3961
+ 44083 00000000
+ 44084 de87 02 .byte 0x2
+ 44085 de88 7501 .value 0x175
+ 44086 de8a 32 .uleb128 0x32
+ 44087 de8b E90D0000 .long 0xde9
+ 44088 de8f 03 .byte 0x3
+ 44089 de90 91 .byte 0x91
+ 44090 de91 E074 .sleb128 -1440
+ 44091 de93 32 .uleb128 0x32
+ 44092 de94 DD0D0000 .long 0xddd
+ 44093 de98 03 .byte 0x3
+ 44094 de99 91 .byte 0x91
+ 44095 de9a F074 .sleb128 -1424
+ 44096 de9c 00 .byte 0x0
+ 44097 de9d 00 .byte 0x0
+ 44098 de9e 00 .byte 0x0
+ 44099 de9f 00 .byte 0x0
+ 44100 dea0 31 .uleb128 0x31
+ 44101 dea1 860E0000 .long 0xe86
+ 44102 dea5 00000000 .quad .LBB3963
+ 44102 00000000
+ 44103 dead 00000000 .quad .LBE3963
+ 44103 00000000
+ 44104 deb5 02 .byte 0x2
+ 44105 deb6 5604 .value 0x456
+ 44106 deb8 CFDE0000 .long 0xdecf
+ 44107 debc 32 .uleb128 0x32
+ 44108 debd A10E0000 .long 0xea1
+ 44109 dec1 03 .byte 0x3
+ 44110 dec2 91 .byte 0x91
+ 44111 dec3 8075 .sleb128 -1408
+ 44112 dec5 32 .uleb128 0x32
+ 44113 dec6 970E0000 .long 0xe97
+ 44114 deca 03 .byte 0x3
+ 44115 decb 91 .byte 0x91
+ 44116 decc 9075 .sleb128 -1392
+ 44117 dece 00 .byte 0x0
+ 44118 decf 31 .uleb128 0x31
+ 44119 ded0 860E0000 .long 0xe86
+ 44120 ded4 00000000 .quad .LBB3965
+ 44120 00000000
+ 44121 dedc 00000000 .quad .LBE3965
+
GAS LISTING /tmp/ccjbMjHD.s page 1095
+
+
+ 44121 00000000
+ 44122 dee4 02 .byte 0x2
+ 44123 dee5 5704 .value 0x457
+ 44124 dee7 FEDE0000 .long 0xdefe
+ 44125 deeb 32 .uleb128 0x32
+ 44126 deec A10E0000 .long 0xea1
+ 44127 def0 03 .byte 0x3
+ 44128 def1 91 .byte 0x91
+ 44129 def2 A075 .sleb128 -1376
+ 44130 def4 32 .uleb128 0x32
+ 44131 def5 970E0000 .long 0xe97
+ 44132 def9 03 .byte 0x3
+ 44133 defa 91 .byte 0x91
+ 44134 defb B075 .sleb128 -1360
+ 44135 defd 00 .byte 0x0
+ 44136 defe 31 .uleb128 0x31
+ 44137 deff 860E0000 .long 0xe86
+ 44138 df03 00000000 .quad .LBB3967
+ 44138 00000000
+ 44139 df0b 00000000 .quad .LBE3967
+ 44139 00000000
+ 44140 df13 02 .byte 0x2
+ 44141 df14 5804 .value 0x458
+ 44142 df16 2DDF0000 .long 0xdf2d
+ 44143 df1a 32 .uleb128 0x32
+ 44144 df1b A10E0000 .long 0xea1
+ 44145 df1f 03 .byte 0x3
+ 44146 df20 91 .byte 0x91
+ 44147 df21 C075 .sleb128 -1344
+ 44148 df23 32 .uleb128 0x32
+ 44149 df24 970E0000 .long 0xe97
+ 44150 df28 03 .byte 0x3
+ 44151 df29 91 .byte 0x91
+ 44152 df2a D075 .sleb128 -1328
+ 44153 df2c 00 .byte 0x0
+ 44154 df2d 31 .uleb128 0x31
+ 44155 df2e 860E0000 .long 0xe86
+ 44156 df32 00000000 .quad .LBB3969
+ 44156 00000000
+ 44157 df3a 00000000 .quad .LBE3969
+ 44157 00000000
+ 44158 df42 02 .byte 0x2
+ 44159 df43 5904 .value 0x459
+ 44160 df45 5CDF0000 .long 0xdf5c
+ 44161 df49 32 .uleb128 0x32
+ 44162 df4a A10E0000 .long 0xea1
+ 44163 df4e 03 .byte 0x3
+ 44164 df4f 91 .byte 0x91
+ 44165 df50 E075 .sleb128 -1312
+ 44166 df52 32 .uleb128 0x32
+ 44167 df53 970E0000 .long 0xe97
+ 44168 df57 03 .byte 0x3
+ 44169 df58 91 .byte 0x91
+ 44170 df59 F075 .sleb128 -1296
+ 44171 df5b 00 .byte 0x0
+ 44172 df5c 31 .uleb128 0x31
+ 44173 df5d 860E0000 .long 0xe86
+
GAS LISTING /tmp/ccjbMjHD.s page 1096
+
+
+ 44174 df61 00000000 .quad .LBB3971
+ 44174 00000000
+ 44175 df69 00000000 .quad .LBE3971
+ 44175 00000000
+ 44176 df71 02 .byte 0x2
+ 44177 df72 5A04 .value 0x45a
+ 44178 df74 8BDF0000 .long 0xdf8b
+ 44179 df78 32 .uleb128 0x32
+ 44180 df79 A10E0000 .long 0xea1
+ 44181 df7d 03 .byte 0x3
+ 44182 df7e 91 .byte 0x91
+ 44183 df7f 8076 .sleb128 -1280
+ 44184 df81 32 .uleb128 0x32
+ 44185 df82 970E0000 .long 0xe97
+ 44186 df86 03 .byte 0x3
+ 44187 df87 91 .byte 0x91
+ 44188 df88 9076 .sleb128 -1264
+ 44189 df8a 00 .byte 0x0
+ 44190 df8b 31 .uleb128 0x31
+ 44191 df8c 6BD90000 .long 0xd96b
+ 44192 df90 00000000 .quad .LBB3973
+ 44192 00000000
+ 44193 df98 00000000 .quad .LBE3973
+ 44193 00000000
+ 44194 dfa0 02 .byte 0x2
+ 44195 dfa1 5E04 .value 0x45e
+ 44196 dfa3 3BE20000 .long 0xe23b
+ 44197 dfa7 32 .uleb128 0x32
+ 44198 dfa8 89D90000 .long 0xd989
+ 44199 dfac 03 .byte 0x3
+ 44200 dfad 91 .byte 0x91
+ 44201 dfae AC76 .sleb128 -1236
+ 44202 dfb0 32 .uleb128 0x32
+ 44203 dfb1 7DD90000 .long 0xd97d
+ 44204 dfb5 03 .byte 0x3
+ 44205 dfb6 91 .byte 0x91
+ 44206 dfb7 B076 .sleb128 -1232
+ 44207 dfb9 33 .uleb128 0x33
+ 44208 dfba 00000000 .quad .LBB3974
+ 44208 00000000
+ 44209 dfc2 00000000 .quad .LBE3974
+ 44209 00000000
+ 44210 dfca 34 .uleb128 0x34
+ 44211 dfcb 95D90000 .long 0xd995
+ 44212 dfcf 03 .byte 0x3
+ 44213 dfd0 91 .byte 0x91
+ 44214 dfd1 D076 .sleb128 -1200
+ 44215 dfd3 34 .uleb128 0x34
+ 44216 dfd4 A0D90000 .long 0xd9a0
+ 44217 dfd8 03 .byte 0x3
+ 44218 dfd9 91 .byte 0x91
+ 44219 dfda C076 .sleb128 -1216
+ 44220 dfdc 34 .uleb128 0x34
+ 44221 dfdd ABD90000 .long 0xd9ab
+ 44222 dfe1 09 .byte 0x9
+ 44223 dfe2 03 .byte 0x3
+ 44224 dfe3 00000000 .quad __PRETTY_FUNCTION__.7467
+
GAS LISTING /tmp/ccjbMjHD.s page 1097
+
+
+ 44224 00000000
+ 44225 dfeb 36 .uleb128 0x36
+ 44226 dfec 00000000 .quad .LBB3975
+ 44226 00000000
+ 44227 dff4 00000000 .quad .LBE3975
+ 44227 00000000
+ 44228 dffc 0AE00000 .long 0xe00a
+ 44229 e000 34 .uleb128 0x34
+ 44230 e001 BED90000 .long 0xd9be
+ 44231 e005 03 .byte 0x3
+ 44232 e006 91 .byte 0x91
+ 44233 e007 8072 .sleb128 -1792
+ 44234 e009 00 .byte 0x0
+ 44235 e00a 31 .uleb128 0x31
+ 44236 e00b FBD90000 .long 0xd9fb
+ 44237 e00f 00000000 .quad .LBB3976
+ 44237 00000000
+ 44238 e017 00000000 .quad .LBE3976
+ 44238 00000000
+ 44239 e01f 02 .byte 0x2
+ 44240 e020 A603 .value 0x3a6
+ 44241 e022 B4E00000 .long 0xe0b4
+ 44242 e026 32 .uleb128 0x32
+ 44243 e027 17DA0000 .long 0xda17
+ 44244 e02b 03 .byte 0x3
+ 44245 e02c 91 .byte 0x91
+ 44246 e02d EC76 .sleb128 -1172
+ 44247 e02f 32 .uleb128 0x32
+ 44248 e030 0DDA0000 .long 0xda0d
+ 44249 e034 03 .byte 0x3
+ 44250 e035 91 .byte 0x91
+ 44251 e036 F076 .sleb128 -1168
+ 44252 e038 33 .uleb128 0x33
+ 44253 e039 00000000 .quad .LBB3977
+ 44253 00000000
+ 44254 e041 00000000 .quad .LBE3977
+ 44254 00000000
+ 44255 e049 34 .uleb128 0x34
+ 44256 e04a 21DA0000 .long 0xda21
+ 44257 e04e 09 .byte 0x9
+ 44258 e04f 03 .byte 0x3
+ 44259 e050 00000000 .quad sr_mask.7327
+ 44259 00000000
+ 44260 e058 31 .uleb128 0x31
+ 44261 e059 750D0000 .long 0xd75
+ 44262 e05d 00000000 .quad .LBB3978
+ 44262 00000000
+ 44263 e065 00000000 .quad .LBE3978
+ 44263 00000000
+ 44264 e06d 02 .byte 0x2
+ 44265 e06e E801 .value 0x1e8
+ 44266 e070 87E00000 .long 0xe087
+ 44267 e074 32 .uleb128 0x32
+ 44268 e075 930D0000 .long 0xd93
+ 44269 e079 03 .byte 0x3
+ 44270 e07a 91 .byte 0x91
+ 44271 e07b 8C77 .sleb128 -1140
+
GAS LISTING /tmp/ccjbMjHD.s page 1098
+
+
+ 44272 e07d 32 .uleb128 0x32
+ 44273 e07e 870D0000 .long 0xd87
+ 44274 e082 03 .byte 0x3
+ 44275 e083 91 .byte 0x91
+ 44276 e084 9077 .sleb128 -1136
+ 44277 e086 00 .byte 0x0
+ 44278 e087 35 .uleb128 0x35
+ 44279 e088 4F0D0000 .long 0xd4f
+ 44280 e08c 00000000 .quad .LBB3980
+ 44280 00000000
+ 44281 e094 00000000 .quad .LBE3980
+ 44281 00000000
+ 44282 e09c 02 .byte 0x2
+ 44283 e09d E901 .value 0x1e9
+ 44284 e09f 32 .uleb128 0x32
+ 44285 e0a0 6A0D0000 .long 0xd6a
+ 44286 e0a4 03 .byte 0x3
+ 44287 e0a5 91 .byte 0x91
+ 44288 e0a6 A077 .sleb128 -1120
+ 44289 e0a8 32 .uleb128 0x32
+ 44290 e0a9 600D0000 .long 0xd60
+ 44291 e0ad 03 .byte 0x3
+ 44292 e0ae 91 .byte 0x91
+ 44293 e0af B077 .sleb128 -1104
+ 44294 e0b1 00 .byte 0x0
+ 44295 e0b2 00 .byte 0x0
+ 44296 e0b3 00 .byte 0x0
+ 44297 e0b4 36 .uleb128 0x36
+ 44298 e0b5 00000000 .quad .LBB3982
+ 44298 00000000
+ 44299 e0bd 00000000 .quad .LBE3982
+ 44299 00000000
+ 44300 e0c5 D3E00000 .long 0xe0d3
+ 44301 e0c9 34 .uleb128 0x34
+ 44302 e0ca CED90000 .long 0xd9ce
+ 44303 e0ce 03 .byte 0x3
+ 44304 e0cf 91 .byte 0x91
+ 44305 e0d0 F071 .sleb128 -1808
+ 44306 e0d2 00 .byte 0x0
+ 44307 e0d3 31 .uleb128 0x31
+ 44308 e0d4 D4DA0000 .long 0xdad4
+ 44309 e0d8 00000000 .quad .LBB3983
+ 44309 00000000
+ 44310 e0e0 00000000 .quad .LBE3983
+ 44310 00000000
+ 44311 e0e8 02 .byte 0x2
+ 44312 e0e9 A803 .value 0x3a8
+ 44313 e0eb 95E10000 .long 0xe195
+ 44314 e0ef 32 .uleb128 0x32
+ 44315 e0f0 F0DA0000 .long 0xdaf0
+ 44316 e0f4 03 .byte 0x3
+ 44317 e0f5 91 .byte 0x91
+ 44318 e0f6 CC77 .sleb128 -1076
+ 44319 e0f8 32 .uleb128 0x32
+ 44320 e0f9 E6DA0000 .long 0xdae6
+ 44321 e0fd 03 .byte 0x3
+ 44322 e0fe 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1099
+
+
+ 44323 e0ff D077 .sleb128 -1072
+ 44324 e101 33 .uleb128 0x33
+ 44325 e102 00000000 .quad .LBB3984
+ 44325 00000000
+ 44326 e10a 00000000 .quad .LBE3984
+ 44326 00000000
+ 44327 e112 34 .uleb128 0x34
+ 44328 e113 97DB0000 .long 0xdb97
+ 44329 e117 03 .byte 0x3
+ 44330 e118 91 .byte 0x91
+ 44331 e119 E077 .sleb128 -1056
+ 44332 e11b 34 .uleb128 0x34
+ 44333 e11c FADA0000 .long 0xdafa
+ 44334 e120 09 .byte 0x9
+ 44335 e121 03 .byte 0x3
+ 44336 e122 00000000 .quad sl_mask.7310
+ 44336 00000000
+ 44337 e12a 34 .uleb128 0x34
+ 44338 e12b A2DB0000 .long 0xdba2
+ 44339 e12f 09 .byte 0x9
+ 44340 e130 03 .byte 0x3
+ 44341 e131 00000000 .quad __PRETTY_FUNCTION__.7312
+ 44341 00000000
+ 44342 e139 31 .uleb128 0x31
+ 44343 e13a CBDB0000 .long 0xdbcb
+ 44344 e13e 00000000 .quad .LBB3985
+ 44344 00000000
+ 44345 e146 00000000 .quad .LBE3985
+ 44345 00000000
+ 44346 e14e 02 .byte 0x2
+ 44347 e14f B101 .value 0x1b1
+ 44348 e151 68E10000 .long 0xe168
+ 44349 e155 32 .uleb128 0x32
+ 44350 e156 E9DB0000 .long 0xdbe9
+ 44351 e15a 03 .byte 0x3
+ 44352 e15b 91 .byte 0x91
+ 44353 e15c FC77 .sleb128 -1028
+ 44354 e15e 32 .uleb128 0x32
+ 44355 e15f DDDB0000 .long 0xdbdd
+ 44356 e163 03 .byte 0x3
+ 44357 e164 91 .byte 0x91
+ 44358 e165 8078 .sleb128 -1024
+ 44359 e167 00 .byte 0x0
+ 44360 e168 35 .uleb128 0x35
+ 44361 e169 4F0D0000 .long 0xd4f
+ 44362 e16d 00000000 .quad .LBB3987
+ 44362 00000000
+ 44363 e175 00000000 .quad .LBE3987
+ 44363 00000000
+ 44364 e17d 02 .byte 0x2
+ 44365 e17e B301 .value 0x1b3
+ 44366 e180 32 .uleb128 0x32
+ 44367 e181 6A0D0000 .long 0xd6a
+ 44368 e185 03 .byte 0x3
+ 44369 e186 91 .byte 0x91
+ 44370 e187 9078 .sleb128 -1008
+ 44371 e189 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 1100
+
+
+ 44372 e18a 600D0000 .long 0xd60
+ 44373 e18e 03 .byte 0x3
+ 44374 e18f 91 .byte 0x91
+ 44375 e190 A078 .sleb128 -992
+ 44376 e192 00 .byte 0x0
+ 44377 e193 00 .byte 0x0
+ 44378 e194 00 .byte 0x0
+ 44379 e195 36 .uleb128 0x36
+ 44380 e196 00000000 .quad .LBB3989
+ 44380 00000000
+ 44381 e19e 00000000 .quad .LBE3989
+ 44381 00000000
+ 44382 e1a6 B4E10000 .long 0xe1b4
+ 44383 e1aa 34 .uleb128 0x34
+ 44384 e1ab DAD90000 .long 0xd9da
+ 44385 e1af 03 .byte 0x3
+ 44386 e1b0 91 .byte 0x91
+ 44387 e1b1 E071 .sleb128 -1824
+ 44388 e1b3 00 .byte 0x0
+ 44389 e1b4 31 .uleb128 0x31
+ 44390 e1b5 A00D0000 .long 0xda0
+ 44391 e1b9 00000000 .quad .LBB3990
+ 44391 00000000
+ 44392 e1c1 00000000 .quad .LBE3990
+ 44392 00000000
+ 44393 e1c9 02 .byte 0x2
+ 44394 e1ca AA03 .value 0x3aa
+ 44395 e1cc 0EE20000 .long 0xe20e
+ 44396 e1d0 32 .uleb128 0x32
+ 44397 e1d1 BE0D0000 .long 0xdbe
+ 44398 e1d5 03 .byte 0x3
+ 44399 e1d6 91 .byte 0x91
+ 44400 e1d7 B078 .sleb128 -976
+ 44401 e1d9 32 .uleb128 0x32
+ 44402 e1da B20D0000 .long 0xdb2
+ 44403 e1de 03 .byte 0x3
+ 44404 e1df 91 .byte 0x91
+ 44405 e1e0 C078 .sleb128 -960
+ 44406 e1e2 35 .uleb128 0x35
+ 44407 e1e3 CB0D0000 .long 0xdcb
+ 44408 e1e7 00000000 .quad .LBB3992
+ 44408 00000000
+ 44409 e1ef 00000000 .quad .LBE3992
+ 44409 00000000
+ 44410 e1f7 02 .byte 0x2
+ 44411 e1f8 7501 .value 0x175
+ 44412 e1fa 32 .uleb128 0x32
+ 44413 e1fb E90D0000 .long 0xde9
+ 44414 e1ff 03 .byte 0x3
+ 44415 e200 91 .byte 0x91
+ 44416 e201 D078 .sleb128 -944
+ 44417 e203 32 .uleb128 0x32
+ 44418 e204 DD0D0000 .long 0xddd
+ 44419 e208 03 .byte 0x3
+ 44420 e209 91 .byte 0x91
+ 44421 e20a E078 .sleb128 -928
+ 44422 e20c 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1101
+
+
+ 44423 e20d 00 .byte 0x0
+ 44424 e20e 35 .uleb128 0x35
+ 44425 e20f 860E0000 .long 0xe86
+ 44426 e213 00000000 .quad .LBB3994
+ 44426 00000000
+ 44427 e21b 00000000 .quad .LBE3994
+ 44427 00000000
+ 44428 e223 02 .byte 0x2
+ 44429 e224 AB03 .value 0x3ab
+ 44430 e226 32 .uleb128 0x32
+ 44431 e227 A10E0000 .long 0xea1
+ 44432 e22b 03 .byte 0x3
+ 44433 e22c 91 .byte 0x91
+ 44434 e22d F078 .sleb128 -912
+ 44435 e22f 32 .uleb128 0x32
+ 44436 e230 970E0000 .long 0xe97
+ 44437 e234 03 .byte 0x3
+ 44438 e235 91 .byte 0x91
+ 44439 e236 8079 .sleb128 -896
+ 44440 e238 00 .byte 0x0
+ 44441 e239 00 .byte 0x0
+ 44442 e23a 00 .byte 0x0
+ 44443 e23b 31 .uleb128 0x31
+ 44444 e23c 6BD90000 .long 0xd96b
+ 44445 e240 00000000 .quad .LBB3996
+ 44445 00000000
+ 44446 e248 00000000 .quad .LBE3996
+ 44446 00000000
+ 44447 e250 02 .byte 0x2
+ 44448 e251 5F04 .value 0x45f
+ 44449 e253 EBE40000 .long 0xe4eb
+ 44450 e257 32 .uleb128 0x32
+ 44451 e258 89D90000 .long 0xd989
+ 44452 e25c 03 .byte 0x3
+ 44453 e25d 91 .byte 0x91
+ 44454 e25e 9C79 .sleb128 -868
+ 44455 e260 32 .uleb128 0x32
+ 44456 e261 7DD90000 .long 0xd97d
+ 44457 e265 03 .byte 0x3
+ 44458 e266 91 .byte 0x91
+ 44459 e267 A079 .sleb128 -864
+ 44460 e269 33 .uleb128 0x33
+ 44461 e26a 00000000 .quad .LBB3997
+ 44461 00000000
+ 44462 e272 00000000 .quad .LBE3997
+ 44462 00000000
+ 44463 e27a 34 .uleb128 0x34
+ 44464 e27b 95D90000 .long 0xd995
+ 44465 e27f 03 .byte 0x3
+ 44466 e280 91 .byte 0x91
+ 44467 e281 C079 .sleb128 -832
+ 44468 e283 34 .uleb128 0x34
+ 44469 e284 A0D90000 .long 0xd9a0
+ 44470 e288 03 .byte 0x3
+ 44471 e289 91 .byte 0x91
+ 44472 e28a B079 .sleb128 -848
+ 44473 e28c 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 1102
+
+
+ 44474 e28d ABD90000 .long 0xd9ab
+ 44475 e291 09 .byte 0x9
+ 44476 e292 03 .byte 0x3
+ 44477 e293 00000000 .quad __PRETTY_FUNCTION__.7467
+ 44477 00000000
+ 44478 e29b 36 .uleb128 0x36
+ 44479 e29c 00000000 .quad .LBB3998
+ 44479 00000000
+ 44480 e2a4 00000000 .quad .LBE3998
+ 44480 00000000
+ 44481 e2ac BAE20000 .long 0xe2ba
+ 44482 e2b0 34 .uleb128 0x34
+ 44483 e2b1 BED90000 .long 0xd9be
+ 44484 e2b5 03 .byte 0x3
+ 44485 e2b6 91 .byte 0x91
+ 44486 e2b7 B072 .sleb128 -1744
+ 44487 e2b9 00 .byte 0x0
+ 44488 e2ba 31 .uleb128 0x31
+ 44489 e2bb FBD90000 .long 0xd9fb
+ 44490 e2bf 00000000 .quad .LBB3999
+ 44490 00000000
+ 44491 e2c7 00000000 .quad .LBE3999
+ 44491 00000000
+ 44492 e2cf 02 .byte 0x2
+ 44493 e2d0 A603 .value 0x3a6
+ 44494 e2d2 64E30000 .long 0xe364
+ 44495 e2d6 32 .uleb128 0x32
+ 44496 e2d7 17DA0000 .long 0xda17
+ 44497 e2db 03 .byte 0x3
+ 44498 e2dc 91 .byte 0x91
+ 44499 e2dd DC79 .sleb128 -804
+ 44500 e2df 32 .uleb128 0x32
+ 44501 e2e0 0DDA0000 .long 0xda0d
+ 44502 e2e4 03 .byte 0x3
+ 44503 e2e5 91 .byte 0x91
+ 44504 e2e6 E079 .sleb128 -800
+ 44505 e2e8 33 .uleb128 0x33
+ 44506 e2e9 00000000 .quad .LBB4000
+ 44506 00000000
+ 44507 e2f1 00000000 .quad .LBE4000
+ 44507 00000000
+ 44508 e2f9 34 .uleb128 0x34
+ 44509 e2fa 21DA0000 .long 0xda21
+ 44510 e2fe 09 .byte 0x9
+ 44511 e2ff 03 .byte 0x3
+ 44512 e300 00000000 .quad sr_mask.7327
+ 44512 00000000
+ 44513 e308 31 .uleb128 0x31
+ 44514 e309 750D0000 .long 0xd75
+ 44515 e30d 00000000 .quad .LBB4001
+ 44515 00000000
+ 44516 e315 00000000 .quad .LBE4001
+ 44516 00000000
+ 44517 e31d 02 .byte 0x2
+ 44518 e31e E801 .value 0x1e8
+ 44519 e320 37E30000 .long 0xe337
+ 44520 e324 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 1103
+
+
+ 44521 e325 930D0000 .long 0xd93
+ 44522 e329 03 .byte 0x3
+ 44523 e32a 91 .byte 0x91
+ 44524 e32b FC79 .sleb128 -772
+ 44525 e32d 32 .uleb128 0x32
+ 44526 e32e 870D0000 .long 0xd87
+ 44527 e332 03 .byte 0x3
+ 44528 e333 91 .byte 0x91
+ 44529 e334 807A .sleb128 -768
+ 44530 e336 00 .byte 0x0
+ 44531 e337 35 .uleb128 0x35
+ 44532 e338 4F0D0000 .long 0xd4f
+ 44533 e33c 00000000 .quad .LBB4003
+ 44533 00000000
+ 44534 e344 00000000 .quad .LBE4003
+ 44534 00000000
+ 44535 e34c 02 .byte 0x2
+ 44536 e34d E901 .value 0x1e9
+ 44537 e34f 32 .uleb128 0x32
+ 44538 e350 6A0D0000 .long 0xd6a
+ 44539 e354 03 .byte 0x3
+ 44540 e355 91 .byte 0x91
+ 44541 e356 907A .sleb128 -752
+ 44542 e358 32 .uleb128 0x32
+ 44543 e359 600D0000 .long 0xd60
+ 44544 e35d 03 .byte 0x3
+ 44545 e35e 91 .byte 0x91
+ 44546 e35f A07A .sleb128 -736
+ 44547 e361 00 .byte 0x0
+ 44548 e362 00 .byte 0x0
+ 44549 e363 00 .byte 0x0
+ 44550 e364 36 .uleb128 0x36
+ 44551 e365 00000000 .quad .LBB4005
+ 44551 00000000
+ 44552 e36d 00000000 .quad .LBE4005
+ 44552 00000000
+ 44553 e375 83E30000 .long 0xe383
+ 44554 e379 34 .uleb128 0x34
+ 44555 e37a CED90000 .long 0xd9ce
+ 44556 e37e 03 .byte 0x3
+ 44557 e37f 91 .byte 0x91
+ 44558 e380 A072 .sleb128 -1760
+ 44559 e382 00 .byte 0x0
+ 44560 e383 31 .uleb128 0x31
+ 44561 e384 D4DA0000 .long 0xdad4
+ 44562 e388 00000000 .quad .LBB4006
+ 44562 00000000
+ 44563 e390 00000000 .quad .LBE4006
+ 44563 00000000
+ 44564 e398 02 .byte 0x2
+ 44565 e399 A803 .value 0x3a8
+ 44566 e39b 45E40000 .long 0xe445
+ 44567 e39f 32 .uleb128 0x32
+ 44568 e3a0 F0DA0000 .long 0xdaf0
+ 44569 e3a4 03 .byte 0x3
+ 44570 e3a5 91 .byte 0x91
+ 44571 e3a6 BC7A .sleb128 -708
+
GAS LISTING /tmp/ccjbMjHD.s page 1104
+
+
+ 44572 e3a8 32 .uleb128 0x32
+ 44573 e3a9 E6DA0000 .long 0xdae6
+ 44574 e3ad 03 .byte 0x3
+ 44575 e3ae 91 .byte 0x91
+ 44576 e3af C07A .sleb128 -704
+ 44577 e3b1 33 .uleb128 0x33
+ 44578 e3b2 00000000 .quad .LBB4007
+ 44578 00000000
+ 44579 e3ba 00000000 .quad .LBE4007
+ 44579 00000000
+ 44580 e3c2 34 .uleb128 0x34
+ 44581 e3c3 97DB0000 .long 0xdb97
+ 44582 e3c7 03 .byte 0x3
+ 44583 e3c8 91 .byte 0x91
+ 44584 e3c9 D07A .sleb128 -688
+ 44585 e3cb 34 .uleb128 0x34
+ 44586 e3cc FADA0000 .long 0xdafa
+ 44587 e3d0 09 .byte 0x9
+ 44588 e3d1 03 .byte 0x3
+ 44589 e3d2 00000000 .quad sl_mask.7310
+ 44589 00000000
+ 44590 e3da 34 .uleb128 0x34
+ 44591 e3db A2DB0000 .long 0xdba2
+ 44592 e3df 09 .byte 0x9
+ 44593 e3e0 03 .byte 0x3
+ 44594 e3e1 00000000 .quad __PRETTY_FUNCTION__.7312
+ 44594 00000000
+ 44595 e3e9 31 .uleb128 0x31
+ 44596 e3ea CBDB0000 .long 0xdbcb
+ 44597 e3ee 00000000 .quad .LBB4008
+ 44597 00000000
+ 44598 e3f6 00000000 .quad .LBE4008
+ 44598 00000000
+ 44599 e3fe 02 .byte 0x2
+ 44600 e3ff B101 .value 0x1b1
+ 44601 e401 18E40000 .long 0xe418
+ 44602 e405 32 .uleb128 0x32
+ 44603 e406 E9DB0000 .long 0xdbe9
+ 44604 e40a 03 .byte 0x3
+ 44605 e40b 91 .byte 0x91
+ 44606 e40c EC7A .sleb128 -660
+ 44607 e40e 32 .uleb128 0x32
+ 44608 e40f DDDB0000 .long 0xdbdd
+ 44609 e413 03 .byte 0x3
+ 44610 e414 91 .byte 0x91
+ 44611 e415 F07A .sleb128 -656
+ 44612 e417 00 .byte 0x0
+ 44613 e418 35 .uleb128 0x35
+ 44614 e419 4F0D0000 .long 0xd4f
+ 44615 e41d 00000000 .quad .LBB4010
+ 44615 00000000
+ 44616 e425 00000000 .quad .LBE4010
+ 44616 00000000
+ 44617 e42d 02 .byte 0x2
+ 44618 e42e B301 .value 0x1b3
+ 44619 e430 32 .uleb128 0x32
+ 44620 e431 6A0D0000 .long 0xd6a
+
GAS LISTING /tmp/ccjbMjHD.s page 1105
+
+
+ 44621 e435 03 .byte 0x3
+ 44622 e436 91 .byte 0x91
+ 44623 e437 807B .sleb128 -640
+ 44624 e439 32 .uleb128 0x32
+ 44625 e43a 600D0000 .long 0xd60
+ 44626 e43e 03 .byte 0x3
+ 44627 e43f 91 .byte 0x91
+ 44628 e440 907B .sleb128 -624
+ 44629 e442 00 .byte 0x0
+ 44630 e443 00 .byte 0x0
+ 44631 e444 00 .byte 0x0
+ 44632 e445 36 .uleb128 0x36
+ 44633 e446 00000000 .quad .LBB4012
+ 44633 00000000
+ 44634 e44e 00000000 .quad .LBE4012
+ 44634 00000000
+ 44635 e456 64E40000 .long 0xe464
+ 44636 e45a 34 .uleb128 0x34
+ 44637 e45b DAD90000 .long 0xd9da
+ 44638 e45f 03 .byte 0x3
+ 44639 e460 91 .byte 0x91
+ 44640 e461 9072 .sleb128 -1776
+ 44641 e463 00 .byte 0x0
+ 44642 e464 31 .uleb128 0x31
+ 44643 e465 A00D0000 .long 0xda0
+ 44644 e469 00000000 .quad .LBB4013
+ 44644 00000000
+ 44645 e471 00000000 .quad .LBE4013
+ 44645 00000000
+ 44646 e479 02 .byte 0x2
+ 44647 e47a AA03 .value 0x3aa
+ 44648 e47c BEE40000 .long 0xe4be
+ 44649 e480 32 .uleb128 0x32
+ 44650 e481 BE0D0000 .long 0xdbe
+ 44651 e485 03 .byte 0x3
+ 44652 e486 91 .byte 0x91
+ 44653 e487 A07B .sleb128 -608
+ 44654 e489 32 .uleb128 0x32
+ 44655 e48a B20D0000 .long 0xdb2
+ 44656 e48e 03 .byte 0x3
+ 44657 e48f 91 .byte 0x91
+ 44658 e490 B07B .sleb128 -592
+ 44659 e492 35 .uleb128 0x35
+ 44660 e493 CB0D0000 .long 0xdcb
+ 44661 e497 00000000 .quad .LBB4015
+ 44661 00000000
+ 44662 e49f 00000000 .quad .LBE4015
+ 44662 00000000
+ 44663 e4a7 02 .byte 0x2
+ 44664 e4a8 7501 .value 0x175
+ 44665 e4aa 32 .uleb128 0x32
+ 44666 e4ab E90D0000 .long 0xde9
+ 44667 e4af 03 .byte 0x3
+ 44668 e4b0 91 .byte 0x91
+ 44669 e4b1 C07B .sleb128 -576
+ 44670 e4b3 32 .uleb128 0x32
+ 44671 e4b4 DD0D0000 .long 0xddd
+
GAS LISTING /tmp/ccjbMjHD.s page 1106
+
+
+ 44672 e4b8 03 .byte 0x3
+ 44673 e4b9 91 .byte 0x91
+ 44674 e4ba D07B .sleb128 -560
+ 44675 e4bc 00 .byte 0x0
+ 44676 e4bd 00 .byte 0x0
+ 44677 e4be 35 .uleb128 0x35
+ 44678 e4bf 860E0000 .long 0xe86
+ 44679 e4c3 00000000 .quad .LBB4017
+ 44679 00000000
+ 44680 e4cb 00000000 .quad .LBE4017
+ 44680 00000000
+ 44681 e4d3 02 .byte 0x2
+ 44682 e4d4 AB03 .value 0x3ab
+ 44683 e4d6 32 .uleb128 0x32
+ 44684 e4d7 A10E0000 .long 0xea1
+ 44685 e4db 03 .byte 0x3
+ 44686 e4dc 91 .byte 0x91
+ 44687 e4dd E07B .sleb128 -544
+ 44688 e4df 32 .uleb128 0x32
+ 44689 e4e0 970E0000 .long 0xe97
+ 44690 e4e4 03 .byte 0x3
+ 44691 e4e5 91 .byte 0x91
+ 44692 e4e6 F07B .sleb128 -528
+ 44693 e4e8 00 .byte 0x0
+ 44694 e4e9 00 .byte 0x0
+ 44695 e4ea 00 .byte 0x0
+ 44696 e4eb 31 .uleb128 0x31
+ 44697 e4ec 6BD90000 .long 0xd96b
+ 44698 e4f0 00000000 .quad .LBB4019
+ 44698 00000000
+ 44699 e4f8 00000000 .quad .LBE4019
+ 44699 00000000
+ 44700 e500 02 .byte 0x2
+ 44701 e501 6004 .value 0x460
+ 44702 e503 9BE70000 .long 0xe79b
+ 44703 e507 32 .uleb128 0x32
+ 44704 e508 89D90000 .long 0xd989
+ 44705 e50c 03 .byte 0x3
+ 44706 e50d 91 .byte 0x91
+ 44707 e50e 8C7C .sleb128 -500
+ 44708 e510 32 .uleb128 0x32
+ 44709 e511 7DD90000 .long 0xd97d
+ 44710 e515 03 .byte 0x3
+ 44711 e516 91 .byte 0x91
+ 44712 e517 907C .sleb128 -496
+ 44713 e519 33 .uleb128 0x33
+ 44714 e51a 00000000 .quad .LBB4020
+ 44714 00000000
+ 44715 e522 00000000 .quad .LBE4020
+ 44715 00000000
+ 44716 e52a 34 .uleb128 0x34
+ 44717 e52b 95D90000 .long 0xd995
+ 44718 e52f 03 .byte 0x3
+ 44719 e530 91 .byte 0x91
+ 44720 e531 B07C .sleb128 -464
+ 44721 e533 34 .uleb128 0x34
+ 44722 e534 A0D90000 .long 0xd9a0
+
GAS LISTING /tmp/ccjbMjHD.s page 1107
+
+
+ 44723 e538 03 .byte 0x3
+ 44724 e539 91 .byte 0x91
+ 44725 e53a A07C .sleb128 -480
+ 44726 e53c 34 .uleb128 0x34
+ 44727 e53d ABD90000 .long 0xd9ab
+ 44728 e541 09 .byte 0x9
+ 44729 e542 03 .byte 0x3
+ 44730 e543 00000000 .quad __PRETTY_FUNCTION__.7467
+ 44730 00000000
+ 44731 e54b 36 .uleb128 0x36
+ 44732 e54c 00000000 .quad .LBB4021
+ 44732 00000000
+ 44733 e554 00000000 .quad .LBE4021
+ 44733 00000000
+ 44734 e55c 6AE50000 .long 0xe56a
+ 44735 e560 34 .uleb128 0x34
+ 44736 e561 BED90000 .long 0xd9be
+ 44737 e565 03 .byte 0x3
+ 44738 e566 91 .byte 0x91
+ 44739 e567 E072 .sleb128 -1696
+ 44740 e569 00 .byte 0x0
+ 44741 e56a 31 .uleb128 0x31
+ 44742 e56b FBD90000 .long 0xd9fb
+ 44743 e56f 00000000 .quad .LBB4022
+ 44743 00000000
+ 44744 e577 00000000 .quad .LBE4022
+ 44744 00000000
+ 44745 e57f 02 .byte 0x2
+ 44746 e580 A603 .value 0x3a6
+ 44747 e582 14E60000 .long 0xe614
+ 44748 e586 32 .uleb128 0x32
+ 44749 e587 17DA0000 .long 0xda17
+ 44750 e58b 03 .byte 0x3
+ 44751 e58c 91 .byte 0x91
+ 44752 e58d CC7C .sleb128 -436
+ 44753 e58f 32 .uleb128 0x32
+ 44754 e590 0DDA0000 .long 0xda0d
+ 44755 e594 03 .byte 0x3
+ 44756 e595 91 .byte 0x91
+ 44757 e596 D07C .sleb128 -432
+ 44758 e598 33 .uleb128 0x33
+ 44759 e599 00000000 .quad .LBB4023
+ 44759 00000000
+ 44760 e5a1 00000000 .quad .LBE4023
+ 44760 00000000
+ 44761 e5a9 34 .uleb128 0x34
+ 44762 e5aa 21DA0000 .long 0xda21
+ 44763 e5ae 09 .byte 0x9
+ 44764 e5af 03 .byte 0x3
+ 44765 e5b0 00000000 .quad sr_mask.7327
+ 44765 00000000
+ 44766 e5b8 31 .uleb128 0x31
+ 44767 e5b9 750D0000 .long 0xd75
+ 44768 e5bd 00000000 .quad .LBB4024
+ 44768 00000000
+ 44769 e5c5 00000000 .quad .LBE4024
+ 44769 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1108
+
+
+ 44770 e5cd 02 .byte 0x2
+ 44771 e5ce E801 .value 0x1e8
+ 44772 e5d0 E7E50000 .long 0xe5e7
+ 44773 e5d4 32 .uleb128 0x32
+ 44774 e5d5 930D0000 .long 0xd93
+ 44775 e5d9 03 .byte 0x3
+ 44776 e5da 91 .byte 0x91
+ 44777 e5db EC7C .sleb128 -404
+ 44778 e5dd 32 .uleb128 0x32
+ 44779 e5de 870D0000 .long 0xd87
+ 44780 e5e2 03 .byte 0x3
+ 44781 e5e3 91 .byte 0x91
+ 44782 e5e4 F07C .sleb128 -400
+ 44783 e5e6 00 .byte 0x0
+ 44784 e5e7 35 .uleb128 0x35
+ 44785 e5e8 4F0D0000 .long 0xd4f
+ 44786 e5ec 00000000 .quad .LBB4026
+ 44786 00000000
+ 44787 e5f4 00000000 .quad .LBE4026
+ 44787 00000000
+ 44788 e5fc 02 .byte 0x2
+ 44789 e5fd E901 .value 0x1e9
+ 44790 e5ff 32 .uleb128 0x32
+ 44791 e600 6A0D0000 .long 0xd6a
+ 44792 e604 03 .byte 0x3
+ 44793 e605 91 .byte 0x91
+ 44794 e606 807D .sleb128 -384
+ 44795 e608 32 .uleb128 0x32
+ 44796 e609 600D0000 .long 0xd60
+ 44797 e60d 03 .byte 0x3
+ 44798 e60e 91 .byte 0x91
+ 44799 e60f 907D .sleb128 -368
+ 44800 e611 00 .byte 0x0
+ 44801 e612 00 .byte 0x0
+ 44802 e613 00 .byte 0x0
+ 44803 e614 36 .uleb128 0x36
+ 44804 e615 00000000 .quad .LBB4028
+ 44804 00000000
+ 44805 e61d 00000000 .quad .LBE4028
+ 44805 00000000
+ 44806 e625 33E60000 .long 0xe633
+ 44807 e629 34 .uleb128 0x34
+ 44808 e62a CED90000 .long 0xd9ce
+ 44809 e62e 03 .byte 0x3
+ 44810 e62f 91 .byte 0x91
+ 44811 e630 D072 .sleb128 -1712
+ 44812 e632 00 .byte 0x0
+ 44813 e633 31 .uleb128 0x31
+ 44814 e634 D4DA0000 .long 0xdad4
+ 44815 e638 00000000 .quad .LBB4029
+ 44815 00000000
+ 44816 e640 00000000 .quad .LBE4029
+ 44816 00000000
+ 44817 e648 02 .byte 0x2
+ 44818 e649 A803 .value 0x3a8
+ 44819 e64b F5E60000 .long 0xe6f5
+ 44820 e64f 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 1109
+
+
+ 44821 e650 F0DA0000 .long 0xdaf0
+ 44822 e654 03 .byte 0x3
+ 44823 e655 91 .byte 0x91
+ 44824 e656 AC7D .sleb128 -340
+ 44825 e658 32 .uleb128 0x32
+ 44826 e659 E6DA0000 .long 0xdae6
+ 44827 e65d 03 .byte 0x3
+ 44828 e65e 91 .byte 0x91
+ 44829 e65f B07D .sleb128 -336
+ 44830 e661 33 .uleb128 0x33
+ 44831 e662 00000000 .quad .LBB4030
+ 44831 00000000
+ 44832 e66a 00000000 .quad .LBE4030
+ 44832 00000000
+ 44833 e672 34 .uleb128 0x34
+ 44834 e673 97DB0000 .long 0xdb97
+ 44835 e677 03 .byte 0x3
+ 44836 e678 91 .byte 0x91
+ 44837 e679 C07D .sleb128 -320
+ 44838 e67b 34 .uleb128 0x34
+ 44839 e67c FADA0000 .long 0xdafa
+ 44840 e680 09 .byte 0x9
+ 44841 e681 03 .byte 0x3
+ 44842 e682 00000000 .quad sl_mask.7310
+ 44842 00000000
+ 44843 e68a 34 .uleb128 0x34
+ 44844 e68b A2DB0000 .long 0xdba2
+ 44845 e68f 09 .byte 0x9
+ 44846 e690 03 .byte 0x3
+ 44847 e691 00000000 .quad __PRETTY_FUNCTION__.7312
+ 44847 00000000
+ 44848 e699 31 .uleb128 0x31
+ 44849 e69a CBDB0000 .long 0xdbcb
+ 44850 e69e 00000000 .quad .LBB4031
+ 44850 00000000
+ 44851 e6a6 00000000 .quad .LBE4031
+ 44851 00000000
+ 44852 e6ae 02 .byte 0x2
+ 44853 e6af B101 .value 0x1b1
+ 44854 e6b1 C8E60000 .long 0xe6c8
+ 44855 e6b5 32 .uleb128 0x32
+ 44856 e6b6 E9DB0000 .long 0xdbe9
+ 44857 e6ba 03 .byte 0x3
+ 44858 e6bb 91 .byte 0x91
+ 44859 e6bc DC7D .sleb128 -292
+ 44860 e6be 32 .uleb128 0x32
+ 44861 e6bf DDDB0000 .long 0xdbdd
+ 44862 e6c3 03 .byte 0x3
+ 44863 e6c4 91 .byte 0x91
+ 44864 e6c5 E07D .sleb128 -288
+ 44865 e6c7 00 .byte 0x0
+ 44866 e6c8 35 .uleb128 0x35
+ 44867 e6c9 4F0D0000 .long 0xd4f
+ 44868 e6cd 00000000 .quad .LBB4033
+ 44868 00000000
+ 44869 e6d5 00000000 .quad .LBE4033
+ 44869 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1110
+
+
+ 44870 e6dd 02 .byte 0x2
+ 44871 e6de B301 .value 0x1b3
+ 44872 e6e0 32 .uleb128 0x32
+ 44873 e6e1 6A0D0000 .long 0xd6a
+ 44874 e6e5 03 .byte 0x3
+ 44875 e6e6 91 .byte 0x91
+ 44876 e6e7 F07D .sleb128 -272
+ 44877 e6e9 32 .uleb128 0x32
+ 44878 e6ea 600D0000 .long 0xd60
+ 44879 e6ee 03 .byte 0x3
+ 44880 e6ef 91 .byte 0x91
+ 44881 e6f0 807E .sleb128 -256
+ 44882 e6f2 00 .byte 0x0
+ 44883 e6f3 00 .byte 0x0
+ 44884 e6f4 00 .byte 0x0
+ 44885 e6f5 36 .uleb128 0x36
+ 44886 e6f6 00000000 .quad .LBB4035
+ 44886 00000000
+ 44887 e6fe 00000000 .quad .LBE4035
+ 44887 00000000
+ 44888 e706 14E70000 .long 0xe714
+ 44889 e70a 34 .uleb128 0x34
+ 44890 e70b DAD90000 .long 0xd9da
+ 44891 e70f 03 .byte 0x3
+ 44892 e710 91 .byte 0x91
+ 44893 e711 C072 .sleb128 -1728
+ 44894 e713 00 .byte 0x0
+ 44895 e714 31 .uleb128 0x31
+ 44896 e715 A00D0000 .long 0xda0
+ 44897 e719 00000000 .quad .LBB4036
+ 44897 00000000
+ 44898 e721 00000000 .quad .LBE4036
+ 44898 00000000
+ 44899 e729 02 .byte 0x2
+ 44900 e72a AA03 .value 0x3aa
+ 44901 e72c 6EE70000 .long 0xe76e
+ 44902 e730 32 .uleb128 0x32
+ 44903 e731 BE0D0000 .long 0xdbe
+ 44904 e735 03 .byte 0x3
+ 44905 e736 91 .byte 0x91
+ 44906 e737 907E .sleb128 -240
+ 44907 e739 32 .uleb128 0x32
+ 44908 e73a B20D0000 .long 0xdb2
+ 44909 e73e 03 .byte 0x3
+ 44910 e73f 91 .byte 0x91
+ 44911 e740 A07E .sleb128 -224
+ 44912 e742 35 .uleb128 0x35
+ 44913 e743 CB0D0000 .long 0xdcb
+ 44914 e747 00000000 .quad .LBB4038
+ 44914 00000000
+ 44915 e74f 00000000 .quad .LBE4038
+ 44915 00000000
+ 44916 e757 02 .byte 0x2
+ 44917 e758 7501 .value 0x175
+ 44918 e75a 32 .uleb128 0x32
+ 44919 e75b E90D0000 .long 0xde9
+ 44920 e75f 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1111
+
+
+ 44921 e760 91 .byte 0x91
+ 44922 e761 B07E .sleb128 -208
+ 44923 e763 32 .uleb128 0x32
+ 44924 e764 DD0D0000 .long 0xddd
+ 44925 e768 03 .byte 0x3
+ 44926 e769 91 .byte 0x91
+ 44927 e76a C07E .sleb128 -192
+ 44928 e76c 00 .byte 0x0
+ 44929 e76d 00 .byte 0x0
+ 44930 e76e 35 .uleb128 0x35
+ 44931 e76f 860E0000 .long 0xe86
+ 44932 e773 00000000 .quad .LBB4040
+ 44932 00000000
+ 44933 e77b 00000000 .quad .LBE4040
+ 44933 00000000
+ 44934 e783 02 .byte 0x2
+ 44935 e784 AB03 .value 0x3ab
+ 44936 e786 32 .uleb128 0x32
+ 44937 e787 A10E0000 .long 0xea1
+ 44938 e78b 03 .byte 0x3
+ 44939 e78c 91 .byte 0x91
+ 44940 e78d D07E .sleb128 -176
+ 44941 e78f 32 .uleb128 0x32
+ 44942 e790 970E0000 .long 0xe97
+ 44943 e794 03 .byte 0x3
+ 44944 e795 91 .byte 0x91
+ 44945 e796 E07E .sleb128 -160
+ 44946 e798 00 .byte 0x0
+ 44947 e799 00 .byte 0x0
+ 44948 e79a 00 .byte 0x0
+ 44949 e79b 31 .uleb128 0x31
+ 44950 e79c 860E0000 .long 0xe86
+ 44951 e7a0 00000000 .quad .LBB4042
+ 44951 00000000
+ 44952 e7a8 00000000 .quad .LBE4042
+ 44952 00000000
+ 44953 e7b0 02 .byte 0x2
+ 44954 e7b1 7604 .value 0x476
+ 44955 e7b3 CAE70000 .long 0xe7ca
+ 44956 e7b7 32 .uleb128 0x32
+ 44957 e7b8 A10E0000 .long 0xea1
+ 44958 e7bc 03 .byte 0x3
+ 44959 e7bd 91 .byte 0x91
+ 44960 e7be F07E .sleb128 -144
+ 44961 e7c0 32 .uleb128 0x32
+ 44962 e7c1 970E0000 .long 0xe97
+ 44963 e7c5 03 .byte 0x3
+ 44964 e7c6 91 .byte 0x91
+ 44965 e7c7 807F .sleb128 -128
+ 44966 e7c9 00 .byte 0x0
+ 44967 e7ca 31 .uleb128 0x31
+ 44968 e7cb 860E0000 .long 0xe86
+ 44969 e7cf 00000000 .quad .LBB4044
+ 44969 00000000
+ 44970 e7d7 00000000 .quad .LBE4044
+ 44970 00000000
+ 44971 e7df 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1112
+
+
+ 44972 e7e0 7704 .value 0x477
+ 44973 e7e2 F9E70000 .long 0xe7f9
+ 44974 e7e6 32 .uleb128 0x32
+ 44975 e7e7 A10E0000 .long 0xea1
+ 44976 e7eb 03 .byte 0x3
+ 44977 e7ec 91 .byte 0x91
+ 44978 e7ed 907F .sleb128 -112
+ 44979 e7ef 32 .uleb128 0x32
+ 44980 e7f0 970E0000 .long 0xe97
+ 44981 e7f4 03 .byte 0x3
+ 44982 e7f5 91 .byte 0x91
+ 44983 e7f6 A07F .sleb128 -96
+ 44984 e7f8 00 .byte 0x0
+ 44985 e7f9 35 .uleb128 0x35
+ 44986 e7fa 860E0000 .long 0xe86
+ 44987 e7fe 00000000 .quad .LBB4046
+ 44987 00000000
+ 44988 e806 00000000 .quad .LBE4046
+ 44988 00000000
+ 44989 e80e 02 .byte 0x2
+ 44990 e80f 7804 .value 0x478
+ 44991 e811 32 .uleb128 0x32
+ 44992 e812 A10E0000 .long 0xea1
+ 44993 e816 03 .byte 0x3
+ 44994 e817 91 .byte 0x91
+ 44995 e818 B07F .sleb128 -80
+ 44996 e81a 32 .uleb128 0x32
+ 44997 e81b 970E0000 .long 0xe97
+ 44998 e81f 02 .byte 0x2
+ 44999 e820 91 .byte 0x91
+ 45000 e821 40 .sleb128 -64
+ 45001 e822 00 .byte 0x0
+ 45002 e823 00 .byte 0x0
+ 45003 e824 00 .byte 0x0
+ 45004 e825 00 .byte 0x0
+ 45005 e826 2D .uleb128 0x2d
+ 45006 e827 00000000 .long .LASF373
+ 45007 e82b 02 .byte 0x2
+ 45008 e82c AC07 .value 0x7ac
+ 45009 e82e 01 .byte 0x1
+ 45010 e82f 00000000 .quad .LFB649
+ 45010 00000000
+ 45011 e837 00000000 .quad .LFE649
+ 45011 00000000
+ 45012 e83f 00000000 .long .LLST5
+ 45013 e843 63E80000 .long 0xe863
+ 45014 e847 2F .uleb128 0x2f
+ 45015 e848 7700 .string "w"
+ 45016 e84a 02 .byte 0x2
+ 45017 e84b AC07 .value 0x7ac
+ 45018 e84d 24560000 .long 0x5624
+ 45019 e851 02 .byte 0x2
+ 45020 e852 91 .byte 0x91
+ 45021 e853 68 .sleb128 -24
+ 45022 e854 2F .uleb128 0x2f
+ 45023 e855 6B7700 .string "kw"
+ 45024 e858 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1113
+
+
+ 45025 e859 AC07 .value 0x7ac
+ 45026 e85b 440D0000 .long 0xd44
+ 45027 e85f 02 .byte 0x2
+ 45028 e860 91 .byte 0x91
+ 45029 e861 60 .sleb128 -32
+ 45030 e862 00 .byte 0x0
+ 45031 e863 2D .uleb128 0x2d
+ 45032 e864 00000000 .long .LASF374
+ 45033 e868 02 .byte 0x2
+ 45034 e869 B307 .value 0x7b3
+ 45035 e86b 01 .byte 0x1
+ 45036 e86c 00000000 .quad .LFB650
+ 45036 00000000
+ 45037 e874 00000000 .quad .LFE650
+ 45037 00000000
+ 45038 e87c 00000000 .long .LLST6
+ 45039 e880 A0E80000 .long 0xe8a0
+ 45040 e884 2F .uleb128 0x2f
+ 45041 e885 7700 .string "w"
+ 45042 e887 02 .byte 0x2
+ 45043 e888 B307 .value 0x7b3
+ 45044 e88a 24560000 .long 0x5624
+ 45045 e88e 02 .byte 0x2
+ 45046 e88f 91 .byte 0x91
+ 45047 e890 68 .sleb128 -24
+ 45048 e891 2F .uleb128 0x2f
+ 45049 e892 6B7700 .string "kw"
+ 45050 e895 02 .byte 0x2
+ 45051 e896 B307 .value 0x7b3
+ 45052 e898 440D0000 .long 0xd44
+ 45053 e89c 02 .byte 0x2
+ 45054 e89d 91 .byte 0x91
+ 45055 e89e 60 .sleb128 -32
+ 45056 e89f 00 .byte 0x0
+ 45057 e8a0 2D .uleb128 0x2d
+ 45058 e8a1 00000000 .long .LASF375
+ 45059 e8a5 02 .byte 0x2
+ 45060 e8a6 BA07 .value 0x7ba
+ 45061 e8a8 01 .byte 0x1
+ 45062 e8a9 00000000 .quad .LFB651
+ 45062 00000000
+ 45063 e8b1 00000000 .quad .LFE651
+ 45063 00000000
+ 45064 e8b9 00000000 .long .LLST7
+ 45065 e8bd DDE80000 .long 0xe8dd
+ 45066 e8c1 2F .uleb128 0x2f
+ 45067 e8c2 7700 .string "w"
+ 45068 e8c4 02 .byte 0x2
+ 45069 e8c5 BA07 .value 0x7ba
+ 45070 e8c7 24560000 .long 0x5624
+ 45071 e8cb 02 .byte 0x2
+ 45072 e8cc 91 .byte 0x91
+ 45073 e8cd 68 .sleb128 -24
+ 45074 e8ce 2F .uleb128 0x2f
+ 45075 e8cf 6B7700 .string "kw"
+ 45076 e8d2 02 .byte 0x2
+ 45077 e8d3 BA07 .value 0x7ba
+
GAS LISTING /tmp/ccjbMjHD.s page 1114
+
+
+ 45078 e8d5 440D0000 .long 0xd44
+ 45079 e8d9 02 .byte 0x2
+ 45080 e8da 91 .byte 0x91
+ 45081 e8db 60 .sleb128 -32
+ 45082 e8dc 00 .byte 0x0
+ 45083 e8dd 25 .uleb128 0x25
+ 45084 e8de 00000000 .long .LASF376
+ 45085 e8e2 02 .byte 0x2
+ 45086 e8e3 C807 .value 0x7c8
+ 45087 e8e5 01 .byte 0x1
+ 45088 e8e6 B3010000 .long 0x1b3
+ 45089 e8ea 03 .byte 0x3
+ 45090 e8eb 34E90000 .long 0xe934
+ 45091 e8ef 26 .uleb128 0x26
+ 45092 e8f0 00000000 .long .LASF67
+ 45093 e8f4 02 .byte 0x2
+ 45094 e8f5 C807 .value 0x7c8
+ 45095 e8f7 B3010000 .long 0x1b3
+ 45096 e8fb 26 .uleb128 0x26
+ 45097 e8fc 00000000 .long .LASF65
+ 45098 e900 02 .byte 0x2
+ 45099 e901 C807 .value 0x7c8
+ 45100 e903 4A0D0000 .long 0xd4a
+ 45101 e907 29 .uleb128 0x29
+ 45102 e908 17E90000 .long 0xe917
+ 45103 e90c 28 .uleb128 0x28
+ 45104 e90d 7600 .string "v"
+ 45105 e90f 02 .byte 0x2
+ 45106 e910 CA07 .value 0x7ca
+ 45107 e912 29050000 .long 0x529
+ 45108 e916 00 .byte 0x0
+ 45109 e917 29 .uleb128 0x29
+ 45110 e918 27E90000 .long 0xe927
+ 45111 e91c 28 .uleb128 0x28
+ 45112 e91d 7600 .string "v"
+ 45113 e91f 02 .byte 0x2
+ 45114 e920 CC07 .value 0x7cc
+ 45115 e922 29050000 .long 0x529
+ 45116 e926 00 .byte 0x0
+ 45117 e927 2A .uleb128 0x2a
+ 45118 e928 28 .uleb128 0x28
+ 45119 e929 7600 .string "v"
+ 45120 e92b 02 .byte 0x2
+ 45121 e92c D007 .value 0x7d0
+ 45122 e92e 29050000 .long 0x529
+ 45123 e932 00 .byte 0x0
+ 45124 e933 00 .byte 0x0
+ 45125 e934 25 .uleb128 0x25
+ 45126 e935 00000000 .long .LASF377
+ 45127 e939 02 .byte 0x2
+ 45128 e93a 2102 .value 0x221
+ 45129 e93c 01 .byte 0x1
+ 45130 e93d B3010000 .long 0x1b3
+ 45131 e941 03 .byte 0x3
+ 45132 e942 5FE90000 .long 0xe95f
+ 45133 e946 26 .uleb128 0x26
+ 45134 e947 00000000 .long .LASF67
+
GAS LISTING /tmp/ccjbMjHD.s page 1115
+
+
+ 45135 e94b 02 .byte 0x2
+ 45136 e94c 2102 .value 0x221
+ 45137 e94e B3010000 .long 0x1b3
+ 45138 e952 26 .uleb128 0x26
+ 45139 e953 00000000 .long .LASF378
+ 45140 e957 02 .byte 0x2
+ 45141 e958 2102 .value 0x221
+ 45142 e95a B3010000 .long 0x1b3
+ 45143 e95e 00 .byte 0x0
+ 45144 e95f 25 .uleb128 0x25
+ 45145 e960 00000000 .long .LASF379
+ 45146 e964 02 .byte 0x2
+ 45147 e965 DC07 .value 0x7dc
+ 45148 e967 01 .byte 0x1
+ 45149 e968 B3010000 .long 0x1b3
+ 45150 e96c 03 .byte 0x3
+ 45151 e96d FEE90000 .long 0xe9fe
+ 45152 e971 26 .uleb128 0x26
+ 45153 e972 00000000 .long .LASF67
+ 45154 e976 02 .byte 0x2
+ 45155 e977 DC07 .value 0x7dc
+ 45156 e979 B3010000 .long 0x1b3
+ 45157 e97d 26 .uleb128 0x26
+ 45158 e97e 00000000 .long .LASF65
+ 45159 e982 02 .byte 0x2
+ 45160 e983 DD07 .value 0x7dd
+ 45161 e985 4A0D0000 .long 0xd4a
+ 45162 e989 27 .uleb128 0x27
+ 45163 e98a 00000000 .long .LASF380
+ 45164 e98e 02 .byte 0x2
+ 45165 e98f E007 .value 0x7e0
+ 45166 e991 B3010000 .long 0x1b3
+ 45167 e995 27 .uleb128 0x27
+ 45168 e996 00000000 .long .LASF381
+ 45169 e99a 02 .byte 0x2
+ 45170 e99b E107 .value 0x7e1
+ 45171 e99d B3010000 .long 0x1b3
+ 45172 e9a1 29 .uleb128 0x29
+ 45173 e9a2 B1E90000 .long 0xe9b1
+ 45174 e9a6 28 .uleb128 0x28
+ 45175 e9a7 7600 .string "v"
+ 45176 e9a9 02 .byte 0x2
+ 45177 e9aa E607 .value 0x7e6
+ 45178 e9ac 29050000 .long 0x529
+ 45179 e9b0 00 .byte 0x0
+ 45180 e9b1 29 .uleb128 0x29
+ 45181 e9b2 C1E90000 .long 0xe9c1
+ 45182 e9b6 28 .uleb128 0x28
+ 45183 e9b7 7600 .string "v"
+ 45184 e9b9 02 .byte 0x2
+ 45185 e9ba EF07 .value 0x7ef
+ 45186 e9bc 29050000 .long 0x529
+ 45187 e9c0 00 .byte 0x0
+ 45188 e9c1 29 .uleb128 0x29
+ 45189 e9c2 D1E90000 .long 0xe9d1
+ 45190 e9c6 28 .uleb128 0x28
+ 45191 e9c7 7600 .string "v"
+
GAS LISTING /tmp/ccjbMjHD.s page 1116
+
+
+ 45192 e9c9 02 .byte 0x2
+ 45193 e9ca F307 .value 0x7f3
+ 45194 e9cc 29050000 .long 0x529
+ 45195 e9d0 00 .byte 0x0
+ 45196 e9d1 29 .uleb128 0x29
+ 45197 e9d2 E1E90000 .long 0xe9e1
+ 45198 e9d6 28 .uleb128 0x28
+ 45199 e9d7 7600 .string "v"
+ 45200 e9d9 02 .byte 0x2
+ 45201 e9da F807 .value 0x7f8
+ 45202 e9dc 29050000 .long 0x529
+ 45203 e9e0 00 .byte 0x0
+ 45204 e9e1 29 .uleb128 0x29
+ 45205 e9e2 F1E90000 .long 0xe9f1
+ 45206 e9e6 28 .uleb128 0x28
+ 45207 e9e7 7600 .string "v"
+ 45208 e9e9 02 .byte 0x2
+ 45209 e9ea FC07 .value 0x7fc
+ 45210 e9ec 29050000 .long 0x529
+ 45211 e9f0 00 .byte 0x0
+ 45212 e9f1 2A .uleb128 0x2a
+ 45213 e9f2 28 .uleb128 0x28
+ 45214 e9f3 7600 .string "v"
+ 45215 e9f5 02 .byte 0x2
+ 45216 e9f6 FD07 .value 0x7fd
+ 45217 e9f8 29050000 .long 0x529
+ 45218 e9fc 00 .byte 0x0
+ 45219 e9fd 00 .byte 0x0
+ 45220 e9fe 25 .uleb128 0x25
+ 45221 e9ff 00000000 .long .LASF382
+ 45222 ea03 02 .byte 0x2
+ 45223 ea04 3E02 .value 0x23e
+ 45224 ea06 01 .byte 0x1
+ 45225 ea07 B3010000 .long 0x1b3
+ 45226 ea0b 03 .byte 0x3
+ 45227 ea0c 3AEA0000 .long 0xea3a
+ 45228 ea10 26 .uleb128 0x26
+ 45229 ea11 00000000 .long .LASF67
+ 45230 ea15 02 .byte 0x2
+ 45231 ea16 3E02 .value 0x23e
+ 45232 ea18 B3010000 .long 0x1b3
+ 45233 ea1c 2C .uleb128 0x2c
+ 45234 ea1d 00000000 .long .LASF340
+ 45235 ea21 02 .byte 0x2
+ 45236 ea22 4102 .value 0x241
+ 45237 ea24 4A0D0000 .long 0xd4a
+ 45238 ea28 10 .byte 0x10
+ 45239 ea29 00 .byte 0x0
+ 45240 ea2a 05 .byte 0x5
+ 45241 ea2b 0A .byte 0xa
+ 45242 ea2c 0F .byte 0xf
+ 45243 ea2d 04 .byte 0x4
+ 45244 ea2e 09 .byte 0x9
+ 45245 ea2f 0E .byte 0xe
+ 45246 ea30 03 .byte 0x3
+ 45247 ea31 08 .byte 0x8
+ 45248 ea32 0D .byte 0xd
+
GAS LISTING /tmp/ccjbMjHD.s page 1117
+
+
+ 45249 ea33 02 .byte 0x2
+ 45250 ea34 07 .byte 0x7
+ 45251 ea35 0C .byte 0xc
+ 45252 ea36 01 .byte 0x1
+ 45253 ea37 06 .byte 0x6
+ 45254 ea38 0B .byte 0xb
+ 45255 ea39 00 .byte 0x0
+ 45256 ea3a 25 .uleb128 0x25
+ 45257 ea3b 00000000 .long .LASF383
+ 45258 ea3f 02 .byte 0x2
+ 45259 ea40 1304 .value 0x413
+ 45260 ea42 01 .byte 0x1
+ 45261 ea43 B3010000 .long 0x1b3
+ 45262 ea47 03 .byte 0x3
+ 45263 ea48 85EA0000 .long 0xea85
+ 45264 ea4c 26 .uleb128 0x26
+ 45265 ea4d 00000000 .long .LASF67
+ 45266 ea51 02 .byte 0x2
+ 45267 ea52 1304 .value 0x413
+ 45268 ea54 B3010000 .long 0x1b3
+ 45269 ea58 28 .uleb128 0x28
+ 45270 ea59 633000 .string "c0"
+ 45271 ea5c 02 .byte 0x2
+ 45272 ea5d 1504 .value 0x415
+ 45273 ea5f B3010000 .long 0x1b3
+ 45274 ea63 28 .uleb128 0x28
+ 45275 ea64 633100 .string "c1"
+ 45276 ea67 02 .byte 0x2
+ 45277 ea68 1504 .value 0x415
+ 45278 ea6a B3010000 .long 0x1b3
+ 45279 ea6e 28 .uleb128 0x28
+ 45280 ea6f 633200 .string "c2"
+ 45281 ea72 02 .byte 0x2
+ 45282 ea73 1504 .value 0x415
+ 45283 ea75 B3010000 .long 0x1b3
+ 45284 ea79 28 .uleb128 0x28
+ 45285 ea7a 633300 .string "c3"
+ 45286 ea7d 02 .byte 0x2
+ 45287 ea7e 1504 .value 0x415
+ 45288 ea80 B3010000 .long 0x1b3
+ 45289 ea84 00 .byte 0x0
+ 45290 ea85 25 .uleb128 0x25
+ 45291 ea86 00000000 .long .LASF384
+ 45292 ea8a 02 .byte 0x2
+ 45293 ea8b B403 .value 0x3b4
+ 45294 ea8d 01 .byte 0x1
+ 45295 ea8e B3010000 .long 0x1b3
+ 45296 ea92 03 .byte 0x3
+ 45297 ea93 C0EA0000 .long 0xeac0
+ 45298 ea97 26 .uleb128 0x26
+ 45299 ea98 00000000 .long .LASF67
+ 45300 ea9c 02 .byte 0x2
+ 45301 ea9d B403 .value 0x3b4
+ 45302 ea9f B3010000 .long 0x1b3
+ 45303 eaa3 29 .uleb128 0x29
+ 45304 eaa4 B3EA0000 .long 0xeab3
+ 45305 eaa8 28 .uleb128 0x28
+
GAS LISTING /tmp/ccjbMjHD.s page 1118
+
+
+ 45306 eaa9 7600 .string "v"
+ 45307 eaab 02 .byte 0x2
+ 45308 eaac B603 .value 0x3b6
+ 45309 eaae 29050000 .long 0x529
+ 45310 eab2 00 .byte 0x0
+ 45311 eab3 2A .uleb128 0x2a
+ 45312 eab4 28 .uleb128 0x28
+ 45313 eab5 7600 .string "v"
+ 45314 eab7 02 .byte 0x2
+ 45315 eab8 B903 .value 0x3b9
+ 45316 eaba 29050000 .long 0x529
+ 45317 eabe 00 .byte 0x0
+ 45318 eabf 00 .byte 0x0
+ 45319 eac0 25 .uleb128 0x25
+ 45320 eac1 00000000 .long .LASF385
+ 45321 eac5 02 .byte 0x2
+ 45322 eac6 0808 .value 0x808
+ 45323 eac8 01 .byte 0x1
+ 45324 eac9 B3010000 .long 0x1b3
+ 45325 eacd 03 .byte 0x3
+ 45326 eace 37EB0000 .long 0xeb37
+ 45327 ead2 26 .uleb128 0x26
+ 45328 ead3 00000000 .long .LASF67
+ 45329 ead7 02 .byte 0x2
+ 45330 ead8 0808 .value 0x808
+ 45331 eada B3010000 .long 0x1b3
+ 45332 eade 26 .uleb128 0x26
+ 45333 eadf 00000000 .long .LASF65
+ 45334 eae3 02 .byte 0x2
+ 45335 eae4 0808 .value 0x808
+ 45336 eae6 B3010000 .long 0x1b3
+ 45337 eaea 29 .uleb128 0x29
+ 45338 eaeb FAEA0000 .long 0xeafa
+ 45339 eaef 28 .uleb128 0x28
+ 45340 eaf0 7600 .string "v"
+ 45341 eaf2 02 .byte 0x2
+ 45342 eaf3 0A08 .value 0x80a
+ 45343 eaf5 29050000 .long 0x529
+ 45344 eaf9 00 .byte 0x0
+ 45345 eafa 29 .uleb128 0x29
+ 45346 eafb 0AEB0000 .long 0xeb0a
+ 45347 eaff 28 .uleb128 0x28
+ 45348 eb00 7600 .string "v"
+ 45349 eb02 02 .byte 0x2
+ 45350 eb03 1108 .value 0x811
+ 45351 eb05 29050000 .long 0x529
+ 45352 eb09 00 .byte 0x0
+ 45353 eb0a 29 .uleb128 0x29
+ 45354 eb0b 1AEB0000 .long 0xeb1a
+ 45355 eb0f 28 .uleb128 0x28
+ 45356 eb10 7600 .string "v"
+ 45357 eb12 02 .byte 0x2
+ 45358 eb13 1508 .value 0x815
+ 45359 eb15 29050000 .long 0x529
+ 45360 eb19 00 .byte 0x0
+ 45361 eb1a 29 .uleb128 0x29
+ 45362 eb1b 2AEB0000 .long 0xeb2a
+
GAS LISTING /tmp/ccjbMjHD.s page 1119
+
+
+ 45363 eb1f 28 .uleb128 0x28
+ 45364 eb20 7600 .string "v"
+ 45365 eb22 02 .byte 0x2
+ 45366 eb23 1908 .value 0x819
+ 45367 eb25 29050000 .long 0x529
+ 45368 eb29 00 .byte 0x0
+ 45369 eb2a 2A .uleb128 0x2a
+ 45370 eb2b 28 .uleb128 0x28
+ 45371 eb2c 7600 .string "v"
+ 45372 eb2e 02 .byte 0x2
+ 45373 eb2f 1A08 .value 0x81a
+ 45374 eb31 29050000 .long 0x529
+ 45375 eb35 00 .byte 0x0
+ 45376 eb36 00 .byte 0x0
+ 45377 eb37 39 .uleb128 0x39
+ 45378 eb38 00000000 .long .LASF387
+ 45379 eb3c 02 .byte 0x2
+ 45380 eb3d 2C08 .value 0x82c
+ 45381 eb3f 01 .byte 0x1
+ 45382 eb40 B3010000 .long 0x1b3
+ 45383 eb44 00000000 .quad .LFB655
+ 45383 00000000
+ 45384 eb4c 00000000 .quad .LFE655
+ 45384 00000000
+ 45385 eb54 00000000 .long .LLST8
+ 45386 eb58 42FB0000 .long 0xfb42
+ 45387 eb5c 2E .uleb128 0x2e
+ 45388 eb5d 00000000 .long .LASF67
+ 45389 eb61 02 .byte 0x2
+ 45390 eb62 2C08 .value 0x82c
+ 45391 eb64 B3010000 .long 0x1b3
+ 45392 eb68 03 .byte 0x3
+ 45393 eb69 91 .byte 0x91
+ 45394 eb6a E06B .sleb128 -2592
+ 45395 eb6c 2F .uleb128 0x2f
+ 45396 eb6d 6B657900 .string "key"
+ 45397 eb71 02 .byte 0x2
+ 45398 eb72 2C08 .value 0x82c
+ 45399 eb74 440D0000 .long 0xd44
+ 45400 eb78 03 .byte 0x3
+ 45401 eb79 91 .byte 0x91
+ 45402 eb7a D86B .sleb128 -2600
+ 45403 eb7c 2F .uleb128 0x2f
+ 45404 eb7d 4E7200 .string "Nr"
+ 45405 eb80 02 .byte 0x2
+ 45406 eb81 2D08 .value 0x82d
+ 45407 eb83 78000000 .long 0x78
+ 45408 eb87 03 .byte 0x3
+ 45409 eb88 91 .byte 0x91
+ 45410 eb89 D46B .sleb128 -2604
+ 45411 eb8b 37 .uleb128 0x37
+ 45412 eb8c 697800 .string "ix"
+ 45413 eb8f 02 .byte 0x2
+ 45414 eb90 2F08 .value 0x82f
+ 45415 eb92 78000000 .long 0x78
+ 45416 eb96 03 .byte 0x3
+ 45417 eb97 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1120
+
+
+ 45418 eb98 AC6E .sleb128 -2260
+ 45419 eb9a 31 .uleb128 0x31
+ 45420 eb9b DDE80000 .long 0xe8dd
+ 45421 eb9f 00000000 .quad .LBB4199
+ 45421 00000000
+ 45422 eba7 00000000 .quad .LBE4199
+ 45422 00000000
+ 45423 ebaf 02 .byte 0x2
+ 45424 ebb0 3108 .value 0x831
+ 45425 ebb2 7CEC0000 .long 0xec7c
+ 45426 ebb6 32 .uleb128 0x32
+ 45427 ebb7 FBE80000 .long 0xe8fb
+ 45428 ebbb 03 .byte 0x3
+ 45429 ebbc 91 .byte 0x91
+ 45430 ebbd B06E .sleb128 -2256
+ 45431 ebbf 32 .uleb128 0x32
+ 45432 ebc0 EFE80000 .long 0xe8ef
+ 45433 ebc4 03 .byte 0x3
+ 45434 ebc5 91 .byte 0x91
+ 45435 ebc6 C06E .sleb128 -2240
+ 45436 ebc8 36 .uleb128 0x36
+ 45437 ebc9 00000000 .quad .LBB4201
+ 45437 00000000
+ 45438 ebd1 00000000 .quad .LBE4201
+ 45438 00000000
+ 45439 ebd9 E7EB0000 .long 0xebe7
+ 45440 ebdd 34 .uleb128 0x34
+ 45441 ebde 0CE90000 .long 0xe90c
+ 45442 ebe2 03 .byte 0x3
+ 45443 ebe3 91 .byte 0x91
+ 45444 ebe4 906C .sleb128 -2544
+ 45445 ebe6 00 .byte 0x0
+ 45446 ebe7 36 .uleb128 0x36
+ 45447 ebe8 00000000 .quad .LBB4202
+ 45447 00000000
+ 45448 ebf0 00000000 .quad .LBE4202
+ 45448 00000000
+ 45449 ebf8 06EC0000 .long 0xec06
+ 45450 ebfc 34 .uleb128 0x34
+ 45451 ebfd 1CE90000 .long 0xe91c
+ 45452 ec01 03 .byte 0x3
+ 45453 ec02 91 .byte 0x91
+ 45454 ec03 806C .sleb128 -2560
+ 45455 ec05 00 .byte 0x0
+ 45456 ec06 31 .uleb128 0x31
+ 45457 ec07 34E90000 .long 0xe934
+ 45458 ec0b 00000000 .quad .LBB4203
+ 45458 00000000
+ 45459 ec13 00000000 .quad .LBE4203
+ 45459 00000000
+ 45460 ec1b 02 .byte 0x2
+ 45461 ec1c CE07 .value 0x7ce
+ 45462 ec1e 60EC0000 .long 0xec60
+ 45463 ec22 32 .uleb128 0x32
+ 45464 ec23 52E90000 .long 0xe952
+ 45465 ec27 03 .byte 0x3
+ 45466 ec28 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1121
+
+
+ 45467 ec29 D06E .sleb128 -2224
+ 45468 ec2b 32 .uleb128 0x32
+ 45469 ec2c 46E90000 .long 0xe946
+ 45470 ec30 03 .byte 0x3
+ 45471 ec31 91 .byte 0x91
+ 45472 ec32 E06E .sleb128 -2208
+ 45473 ec34 35 .uleb128 0x35
+ 45474 ec35 860E0000 .long 0xe86
+ 45475 ec39 00000000 .quad .LBB4205
+ 45475 00000000
+ 45476 ec41 00000000 .quad .LBE4205
+ 45476 00000000
+ 45477 ec49 02 .byte 0x2
+ 45478 ec4a 2302 .value 0x223
+ 45479 ec4c 32 .uleb128 0x32
+ 45480 ec4d A10E0000 .long 0xea1
+ 45481 ec51 03 .byte 0x3
+ 45482 ec52 91 .byte 0x91
+ 45483 ec53 F06E .sleb128 -2192
+ 45484 ec55 32 .uleb128 0x32
+ 45485 ec56 970E0000 .long 0xe97
+ 45486 ec5a 03 .byte 0x3
+ 45487 ec5b 91 .byte 0x91
+ 45488 ec5c 806F .sleb128 -2176
+ 45489 ec5e 00 .byte 0x0
+ 45490 ec5f 00 .byte 0x0
+ 45491 ec60 33 .uleb128 0x33
+ 45492 ec61 00000000 .quad .LBB4207
+ 45492 00000000
+ 45493 ec69 00000000 .quad .LBE4207
+ 45493 00000000
+ 45494 ec71 34 .uleb128 0x34
+ 45495 ec72 28E90000 .long 0xe928
+ 45496 ec76 03 .byte 0x3
+ 45497 ec77 91 .byte 0x91
+ 45498 ec78 F06B .sleb128 -2576
+ 45499 ec7a 00 .byte 0x0
+ 45500 ec7b 00 .byte 0x0
+ 45501 ec7c 31 .uleb128 0x31
+ 45502 ec7d 5FE90000 .long 0xe95f
+ 45503 ec81 00000000 .quad .LBB4208
+ 45503 00000000
+ 45504 ec89 00000000 .quad .LBE4208
+ 45504 00000000
+ 45505 ec91 02 .byte 0x2
+ 45506 ec92 3408 .value 0x834
+ 45507 ec94 00F70000 .long 0xf700
+ 45508 ec98 32 .uleb128 0x32
+ 45509 ec99 7DE90000 .long 0xe97d
+ 45510 ec9d 03 .byte 0x3
+ 45511 ec9e 91 .byte 0x91
+ 45512 ec9f 906F .sleb128 -2160
+ 45513 eca1 32 .uleb128 0x32
+ 45514 eca2 71E90000 .long 0xe971
+ 45515 eca6 03 .byte 0x3
+ 45516 eca7 91 .byte 0x91
+ 45517 eca8 A06F .sleb128 -2144
+
GAS LISTING /tmp/ccjbMjHD.s page 1122
+
+
+ 45518 ecaa 33 .uleb128 0x33
+ 45519 ecab 00000000 .quad .LBB4209
+ 45519 00000000
+ 45520 ecb3 00000000 .quad .LBE4209
+ 45520 00000000
+ 45521 ecbb 34 .uleb128 0x34
+ 45522 ecbc 89E90000 .long 0xe989
+ 45523 ecc0 03 .byte 0x3
+ 45524 ecc1 91 .byte 0x91
+ 45525 ecc2 C06F .sleb128 -2112
+ 45526 ecc4 34 .uleb128 0x34
+ 45527 ecc5 95E90000 .long 0xe995
+ 45528 ecc9 03 .byte 0x3
+ 45529 ecca 91 .byte 0x91
+ 45530 eccb B06F .sleb128 -2128
+ 45531 eccd 36 .uleb128 0x36
+ 45532 ecce 00000000 .quad .LBB4210
+ 45532 00000000
+ 45533 ecd6 00000000 .quad .LBE4210
+ 45533 00000000
+ 45534 ecde ECEC0000 .long 0xecec
+ 45535 ece2 34 .uleb128 0x34
+ 45536 ece3 A6E90000 .long 0xe9a6
+ 45537 ece7 03 .byte 0x3
+ 45538 ece8 91 .byte 0x91
+ 45539 ece9 F06C .sleb128 -2448
+ 45540 eceb 00 .byte 0x0
+ 45541 ecec 31 .uleb128 0x31
+ 45542 eced C10C0000 .long 0xcc1
+ 45543 ecf1 00000000 .quad .LBB4211
+ 45543 00000000
+ 45544 ecf9 00000000 .quad .LBE4211
+ 45544 00000000
+ 45545 ed01 02 .byte 0x2
+ 45546 ed02 ED07 .value 0x7ed
+ 45547 ed04 75EF0000 .long 0xef75
+ 45548 ed08 32 .uleb128 0x32
+ 45549 ed09 D30C0000 .long 0xcd3
+ 45550 ed0d 03 .byte 0x3
+ 45551 ed0e 91 .byte 0x91
+ 45552 ed0f D06F .sleb128 -2096
+ 45553 ed11 35 .uleb128 0x35
+ 45554 ed12 E00C0000 .long 0xce0
+ 45555 ed16 00000000 .quad .LBB4213
+ 45555 00000000
+ 45556 ed1e 00000000 .quad .LBE4213
+ 45556 00000000
+ 45557 ed26 02 .byte 0x2
+ 45558 ed27 7D03 .value 0x37d
+ 45559 ed29 32 .uleb128 0x32
+ 45560 ed2a FE0C0000 .long 0xcfe
+ 45561 ed2e 03 .byte 0x3
+ 45562 ed2f 91 .byte 0x91
+ 45563 ed30 E86F .sleb128 -2072
+ 45564 ed32 32 .uleb128 0x32
+ 45565 ed33 F20C0000 .long 0xcf2
+ 45566 ed37 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1123
+
+
+ 45567 ed38 91 .byte 0x91
+ 45568 ed39 F06F .sleb128 -2064
+ 45569 ed3b 33 .uleb128 0x33
+ 45570 ed3c 00000000 .quad .LBB4214
+ 45570 00000000
+ 45571 ed44 00000000 .quad .LBE4214
+ 45571 00000000
+ 45572 ed4c 34 .uleb128 0x34
+ 45573 ed4d 0A0D0000 .long 0xd0a
+ 45574 ed51 03 .byte 0x3
+ 45575 ed52 91 .byte 0x91
+ 45576 ed53 C070 .sleb128 -1984
+ 45577 ed55 34 .uleb128 0x34
+ 45578 ed56 150D0000 .long 0xd15
+ 45579 ed5a 03 .byte 0x3
+ 45580 ed5b 91 .byte 0x91
+ 45581 ed5c B070 .sleb128 -2000
+ 45582 ed5e 34 .uleb128 0x34
+ 45583 ed5f 200D0000 .long 0xd20
+ 45584 ed63 03 .byte 0x3
+ 45585 ed64 91 .byte 0x91
+ 45586 ed65 A070 .sleb128 -2016
+ 45587 ed67 34 .uleb128 0x34
+ 45588 ed68 2C0D0000 .long 0xd2c
+ 45589 ed6c 03 .byte 0x3
+ 45590 ed6d 91 .byte 0x91
+ 45591 ed6e 9070 .sleb128 -2032
+ 45592 ed70 34 .uleb128 0x34
+ 45593 ed71 380D0000 .long 0xd38
+ 45594 ed75 03 .byte 0x3
+ 45595 ed76 91 .byte 0x91
+ 45596 ed77 8C70 .sleb128 -2036
+ 45597 ed79 31 .uleb128 0x31
+ 45598 ed7a 4F0D0000 .long 0xd4f
+ 45599 ed7e 00000000 .quad .LBB4215
+ 45599 00000000
+ 45600 ed86 00000000 .quad .LBE4215
+ 45600 00000000
+ 45601 ed8e 02 .byte 0x2
+ 45602 ed8f 5603 .value 0x356
+ 45603 ed91 A8ED0000 .long 0xeda8
+ 45604 ed95 32 .uleb128 0x32
+ 45605 ed96 6A0D0000 .long 0xd6a
+ 45606 ed9a 03 .byte 0x3
+ 45607 ed9b 91 .byte 0x91
+ 45608 ed9c D070 .sleb128 -1968
+ 45609 ed9e 32 .uleb128 0x32
+ 45610 ed9f 600D0000 .long 0xd60
+ 45611 eda3 03 .byte 0x3
+ 45612 eda4 91 .byte 0x91
+ 45613 eda5 E070 .sleb128 -1952
+ 45614 eda7 00 .byte 0x0
+ 45615 eda8 31 .uleb128 0x31
+ 45616 eda9 750D0000 .long 0xd75
+ 45617 edad 00000000 .quad .LBB4217
+ 45617 00000000
+ 45618 edb5 00000000 .quad .LBE4217
+
GAS LISTING /tmp/ccjbMjHD.s page 1124
+
+
+ 45618 00000000
+ 45619 edbd 02 .byte 0x2
+ 45620 edbe 5903 .value 0x359
+ 45621 edc0 D7ED0000 .long 0xedd7
+ 45622 edc4 32 .uleb128 0x32
+ 45623 edc5 930D0000 .long 0xd93
+ 45624 edc9 03 .byte 0x3
+ 45625 edca 91 .byte 0x91
+ 45626 edcb FC70 .sleb128 -1924
+ 45627 edcd 32 .uleb128 0x32
+ 45628 edce 870D0000 .long 0xd87
+ 45629 edd2 03 .byte 0x3
+ 45630 edd3 91 .byte 0x91
+ 45631 edd4 8071 .sleb128 -1920
+ 45632 edd6 00 .byte 0x0
+ 45633 edd7 31 .uleb128 0x31
+ 45634 edd8 4F0D0000 .long 0xd4f
+ 45635 eddc 00000000 .quad .LBB4219
+ 45635 00000000
+ 45636 ede4 00000000 .quad .LBE4219
+ 45636 00000000
+ 45637 edec 02 .byte 0x2
+ 45638 eded 5B03 .value 0x35b
+ 45639 edef 06EE0000 .long 0xee06
+ 45640 edf3 32 .uleb128 0x32
+ 45641 edf4 6A0D0000 .long 0xd6a
+ 45642 edf8 03 .byte 0x3
+ 45643 edf9 91 .byte 0x91
+ 45644 edfa 9071 .sleb128 -1904
+ 45645 edfc 32 .uleb128 0x32
+ 45646 edfd 600D0000 .long 0xd60
+ 45647 ee01 03 .byte 0x3
+ 45648 ee02 91 .byte 0x91
+ 45649 ee03 A071 .sleb128 -1888
+ 45650 ee05 00 .byte 0x0
+ 45651 ee06 31 .uleb128 0x31
+ 45652 ee07 A00D0000 .long 0xda0
+ 45653 ee0b 00000000 .quad .LBB4221
+ 45653 00000000
+ 45654 ee13 00000000 .quad .LBE4221
+ 45654 00000000
+ 45655 ee1b 02 .byte 0x2
+ 45656 ee1c 6403 .value 0x364
+ 45657 ee1e 60EE0000 .long 0xee60
+ 45658 ee22 32 .uleb128 0x32
+ 45659 ee23 BE0D0000 .long 0xdbe
+ 45660 ee27 03 .byte 0x3
+ 45661 ee28 91 .byte 0x91
+ 45662 ee29 B071 .sleb128 -1872
+ 45663 ee2b 32 .uleb128 0x32
+ 45664 ee2c B20D0000 .long 0xdb2
+ 45665 ee30 03 .byte 0x3
+ 45666 ee31 91 .byte 0x91
+ 45667 ee32 C071 .sleb128 -1856
+ 45668 ee34 35 .uleb128 0x35
+ 45669 ee35 CB0D0000 .long 0xdcb
+ 45670 ee39 00000000 .quad .LBB4223
+
GAS LISTING /tmp/ccjbMjHD.s page 1125
+
+
+ 45670 00000000
+ 45671 ee41 00000000 .quad .LBE4223
+ 45671 00000000
+ 45672 ee49 02 .byte 0x2
+ 45673 ee4a 7501 .value 0x175
+ 45674 ee4c 32 .uleb128 0x32
+ 45675 ee4d E90D0000 .long 0xde9
+ 45676 ee51 03 .byte 0x3
+ 45677 ee52 91 .byte 0x91
+ 45678 ee53 D071 .sleb128 -1840
+ 45679 ee55 32 .uleb128 0x32
+ 45680 ee56 DD0D0000 .long 0xddd
+ 45681 ee5a 03 .byte 0x3
+ 45682 ee5b 91 .byte 0x91
+ 45683 ee5c E071 .sleb128 -1824
+ 45684 ee5e 00 .byte 0x0
+ 45685 ee5f 00 .byte 0x0
+ 45686 ee60 31 .uleb128 0x31
+ 45687 ee61 FB0D0000 .long 0xdfb
+ 45688 ee65 00000000 .quad .LBB4225
+ 45688 00000000
+ 45689 ee6d 00000000 .quad .LBE4225
+ 45689 00000000
+ 45690 ee75 02 .byte 0x2
+ 45691 ee76 6603 .value 0x366
+ 45692 ee78 8FEE0000 .long 0xee8f
+ 45693 ee7c 32 .uleb128 0x32
+ 45694 ee7d 160E0000 .long 0xe16
+ 45695 ee81 03 .byte 0x3
+ 45696 ee82 91 .byte 0x91
+ 45697 ee83 F071 .sleb128 -1808
+ 45698 ee85 32 .uleb128 0x32
+ 45699 ee86 0C0E0000 .long 0xe0c
+ 45700 ee8a 03 .byte 0x3
+ 45701 ee8b 91 .byte 0x91
+ 45702 ee8c 8072 .sleb128 -1792
+ 45703 ee8e 00 .byte 0x0
+ 45704 ee8f 31 .uleb128 0x31
+ 45705 ee90 A00D0000 .long 0xda0
+ 45706 ee94 00000000 .quad .LBB4227
+ 45706 00000000
+ 45707 ee9c 00000000 .quad .LBE4227
+ 45707 00000000
+ 45708 eea4 02 .byte 0x2
+ 45709 eea5 6803 .value 0x368
+ 45710 eea7 E9EE0000 .long 0xeee9
+ 45711 eeab 32 .uleb128 0x32
+ 45712 eeac BE0D0000 .long 0xdbe
+ 45713 eeb0 03 .byte 0x3
+ 45714 eeb1 91 .byte 0x91
+ 45715 eeb2 9072 .sleb128 -1776
+ 45716 eeb4 32 .uleb128 0x32
+ 45717 eeb5 B20D0000 .long 0xdb2
+ 45718 eeb9 03 .byte 0x3
+ 45719 eeba 91 .byte 0x91
+ 45720 eebb A072 .sleb128 -1760
+ 45721 eebd 35 .uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s page 1126
+
+
+ 45722 eebe CB0D0000 .long 0xdcb
+ 45723 eec2 00000000 .quad .LBB4229
+ 45723 00000000
+ 45724 eeca 00000000 .quad .LBE4229
+ 45724 00000000
+ 45725 eed2 02 .byte 0x2
+ 45726 eed3 7501 .value 0x175
+ 45727 eed5 32 .uleb128 0x32
+ 45728 eed6 E90D0000 .long 0xde9
+ 45729 eeda 03 .byte 0x3
+ 45730 eedb 91 .byte 0x91
+ 45731 eedc B072 .sleb128 -1744
+ 45732 eede 32 .uleb128 0x32
+ 45733 eedf DD0D0000 .long 0xddd
+ 45734 eee3 03 .byte 0x3
+ 45735 eee4 91 .byte 0x91
+ 45736 eee5 C072 .sleb128 -1728
+ 45737 eee7 00 .byte 0x0
+ 45738 eee8 00 .byte 0x0
+ 45739 eee9 31 .uleb128 0x31
+ 45740 eeea FB0D0000 .long 0xdfb
+ 45741 eeee 00000000 .quad .LBB4231
+ 45741 00000000
+ 45742 eef6 00000000 .quad .LBE4231
+ 45742 00000000
+ 45743 eefe 02 .byte 0x2
+ 45744 eeff 6A03 .value 0x36a
+ 45745 ef01 18EF0000 .long 0xef18
+ 45746 ef05 32 .uleb128 0x32
+ 45747 ef06 160E0000 .long 0xe16
+ 45748 ef0a 03 .byte 0x3
+ 45749 ef0b 91 .byte 0x91
+ 45750 ef0c D072 .sleb128 -1712
+ 45751 ef0e 32 .uleb128 0x32
+ 45752 ef0f 0C0E0000 .long 0xe0c
+ 45753 ef13 03 .byte 0x3
+ 45754 ef14 91 .byte 0x91
+ 45755 ef15 E072 .sleb128 -1696
+ 45756 ef17 00 .byte 0x0
+ 45757 ef18 31 .uleb128 0x31
+ 45758 ef19 210E0000 .long 0xe21
+ 45759 ef1d 00000000 .quad .LBB4233
+ 45759 00000000
+ 45760 ef25 00000000 .quad .LBE4233
+ 45760 00000000
+ 45761 ef2d 02 .byte 0x2
+ 45762 ef2e 6C03 .value 0x36c
+ 45763 ef30 47EF0000 .long 0xef47
+ 45764 ef34 32 .uleb128 0x32
+ 45765 ef35 3E0E0000 .long 0xe3e
+ 45766 ef39 03 .byte 0x3
+ 45767 ef3a 91 .byte 0x91
+ 45768 ef3b F072 .sleb128 -1680
+ 45769 ef3d 32 .uleb128 0x32
+ 45770 ef3e 330E0000 .long 0xe33
+ 45771 ef42 03 .byte 0x3
+ 45772 ef43 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1127
+
+
+ 45773 ef44 8073 .sleb128 -1664
+ 45774 ef46 00 .byte 0x0
+ 45775 ef47 35 .uleb128 0x35
+ 45776 ef48 4F0D0000 .long 0xd4f
+ 45777 ef4c 00000000 .quad .LBB4235
+ 45777 00000000
+ 45778 ef54 00000000 .quad .LBE4235
+ 45778 00000000
+ 45779 ef5c 02 .byte 0x2
+ 45780 ef5d 6E03 .value 0x36e
+ 45781 ef5f 32 .uleb128 0x32
+ 45782 ef60 6A0D0000 .long 0xd6a
+ 45783 ef64 03 .byte 0x3
+ 45784 ef65 91 .byte 0x91
+ 45785 ef66 9073 .sleb128 -1648
+ 45786 ef68 32 .uleb128 0x32
+ 45787 ef69 600D0000 .long 0xd60
+ 45788 ef6d 03 .byte 0x3
+ 45789 ef6e 91 .byte 0x91
+ 45790 ef6f A073 .sleb128 -1632
+ 45791 ef71 00 .byte 0x0
+ 45792 ef72 00 .byte 0x0
+ 45793 ef73 00 .byte 0x0
+ 45794 ef74 00 .byte 0x0
+ 45795 ef75 36 .uleb128 0x36
+ 45796 ef76 00000000 .quad .LBB4237
+ 45796 00000000
+ 45797 ef7e 00000000 .quad .LBE4237
+ 45797 00000000
+ 45798 ef86 94EF0000 .long 0xef94
+ 45799 ef8a 34 .uleb128 0x34
+ 45800 ef8b B6E90000 .long 0xe9b6
+ 45801 ef8f 03 .byte 0x3
+ 45802 ef90 91 .byte 0x91
+ 45803 ef91 E06C .sleb128 -2464
+ 45804 ef93 00 .byte 0x0
+ 45805 ef94 31 .uleb128 0x31
+ 45806 ef95 FEE90000 .long 0xe9fe
+ 45807 ef99 00000000 .quad .LBB4238
+ 45807 00000000
+ 45808 efa1 00000000 .quad .LBE4238
+ 45808 00000000
+ 45809 efa9 02 .byte 0x2
+ 45810 efaa F107 .value 0x7f1
+ 45811 efac 31F00000 .long 0xf031
+ 45812 efb0 32 .uleb128 0x32
+ 45813 efb1 10EA0000 .long 0xea10
+ 45814 efb5 03 .byte 0x3
+ 45815 efb6 91 .byte 0x91
+ 45816 efb7 B073 .sleb128 -1616
+ 45817 efb9 33 .uleb128 0x33
+ 45818 efba 00000000 .quad .LBB4239
+ 45818 00000000
+ 45819 efc2 00000000 .quad .LBE4239
+ 45819 00000000
+ 45820 efca 34 .uleb128 0x34
+ 45821 efcb 1CEA0000 .long 0xea1c
+
GAS LISTING /tmp/ccjbMjHD.s page 1128
+
+
+ 45822 efcf 09 .byte 0x9
+ 45823 efd0 03 .byte 0x3
+ 45824 efd1 00000000 .quad ShiftRowTable.7358
+ 45824 00000000
+ 45825 efd9 35 .uleb128 0x35
+ 45826 efda A00D0000 .long 0xda0
+ 45827 efde 00000000 .quad .LBB4240
+ 45827 00000000
+ 45828 efe6 00000000 .quad .LBE4240
+ 45828 00000000
+ 45829 efee 02 .byte 0x2
+ 45830 efef 4502 .value 0x245
+ 45831 eff1 32 .uleb128 0x32
+ 45832 eff2 BE0D0000 .long 0xdbe
+ 45833 eff6 03 .byte 0x3
+ 45834 eff7 91 .byte 0x91
+ 45835 eff8 C073 .sleb128 -1600
+ 45836 effa 32 .uleb128 0x32
+ 45837 effb B20D0000 .long 0xdb2
+ 45838 efff 03 .byte 0x3
+ 45839 f000 91 .byte 0x91
+ 45840 f001 D073 .sleb128 -1584
+ 45841 f003 35 .uleb128 0x35
+ 45842 f004 CB0D0000 .long 0xdcb
+ 45843 f008 00000000 .quad .LBB4242
+ 45843 00000000
+ 45844 f010 00000000 .quad .LBE4242
+ 45844 00000000
+ 45845 f018 02 .byte 0x2
+ 45846 f019 7501 .value 0x175
+ 45847 f01b 32 .uleb128 0x32
+ 45848 f01c E90D0000 .long 0xde9
+ 45849 f020 03 .byte 0x3
+ 45850 f021 91 .byte 0x91
+ 45851 f022 E073 .sleb128 -1568
+ 45852 f024 32 .uleb128 0x32
+ 45853 f025 DD0D0000 .long 0xddd
+ 45854 f029 03 .byte 0x3
+ 45855 f02a 91 .byte 0x91
+ 45856 f02b F073 .sleb128 -1552
+ 45857 f02d 00 .byte 0x0
+ 45858 f02e 00 .byte 0x0
+ 45859 f02f 00 .byte 0x0
+ 45860 f030 00 .byte 0x0
+ 45861 f031 36 .uleb128 0x36
+ 45862 f032 00000000 .quad .LBB4244
+ 45862 00000000
+ 45863 f03a 00000000 .quad .LBE4244
+ 45863 00000000
+ 45864 f042 50F00000 .long 0xf050
+ 45865 f046 34 .uleb128 0x34
+ 45866 f047 C6E90000 .long 0xe9c6
+ 45867 f04b 03 .byte 0x3
+ 45868 f04c 91 .byte 0x91
+ 45869 f04d D06C .sleb128 -2480
+ 45870 f04f 00 .byte 0x0
+ 45871 f050 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 1129
+
+
+ 45872 f051 3AEA0000 .long 0xea3a
+ 45873 f055 00000000 .quad .LBB4245
+ 45873 00000000
+ 45874 f05d 00000000 .quad .LBE4245
+ 45874 00000000
+ 45875 f065 02 .byte 0x2
+ 45876 f066 F507 .value 0x7f5
+ 45877 f068 4BF60000 .long 0xf64b
+ 45878 f06c 32 .uleb128 0x32
+ 45879 f06d 4CEA0000 .long 0xea4c
+ 45880 f071 03 .byte 0x3
+ 45881 f072 91 .byte 0x91
+ 45882 f073 8074 .sleb128 -1536
+ 45883 f075 33 .uleb128 0x33
+ 45884 f076 00000000 .quad .LBB4246
+ 45884 00000000
+ 45885 f07e 00000000 .quad .LBE4246
+ 45885 00000000
+ 45886 f086 34 .uleb128 0x34
+ 45887 f087 58EA0000 .long 0xea58
+ 45888 f08b 03 .byte 0x3
+ 45889 f08c 76 .byte 0x76
+ 45890 f08d D06B .sleb128 -2608
+ 45891 f08f 34 .uleb128 0x34
+ 45892 f090 63EA0000 .long 0xea63
+ 45893 f094 03 .byte 0x3
+ 45894 f095 76 .byte 0x76
+ 45895 f096 C06B .sleb128 -2624
+ 45896 f098 34 .uleb128 0x34
+ 45897 f099 6EEA0000 .long 0xea6e
+ 45898 f09d 03 .byte 0x3
+ 45899 f09e 76 .byte 0x76
+ 45900 f09f B06B .sleb128 -2640
+ 45901 f0a1 34 .uleb128 0x34
+ 45902 f0a2 79EA0000 .long 0xea79
+ 45903 f0a6 03 .byte 0x3
+ 45904 f0a7 76 .byte 0x76
+ 45905 f0a8 A06B .sleb128 -2656
+ 45906 f0aa 31 .uleb128 0x31
+ 45907 f0ab 4A0E0000 .long 0xe4a
+ 45908 f0af 00000000 .quad .LBB4247
+ 45908 00000000
+ 45909 f0b7 00000000 .quad .LBE4247
+ 45909 00000000
+ 45910 f0bf 02 .byte 0x2
+ 45911 f0c0 1704 .value 0x417
+ 45912 f0c2 47F10000 .long 0xf147
+ 45913 f0c6 32 .uleb128 0x32
+ 45914 f0c7 5C0E0000 .long 0xe5c
+ 45915 f0cb 03 .byte 0x3
+ 45916 f0cc 91 .byte 0x91
+ 45917 f0cd 9074 .sleb128 -1520
+ 45918 f0cf 33 .uleb128 0x33
+ 45919 f0d0 00000000 .quad .LBB4248
+ 45919 00000000
+ 45920 f0d8 00000000 .quad .LBE4248
+ 45920 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1130
+
+
+ 45921 f0e0 34 .uleb128 0x34
+ 45922 f0e1 680E0000 .long 0xe68
+ 45923 f0e5 09 .byte 0x9
+ 45924 f0e6 03 .byte 0x3
+ 45925 f0e7 00000000 .quad ShiftRowTable.7385
+ 45925 00000000
+ 45926 f0ef 35 .uleb128 0x35
+ 45927 f0f0 A00D0000 .long 0xda0
+ 45928 f0f4 00000000 .quad .LBB4249
+ 45928 00000000
+ 45929 f0fc 00000000 .quad .LBE4249
+ 45929 00000000
+ 45930 f104 02 .byte 0x2
+ 45931 f105 9B02 .value 0x29b
+ 45932 f107 32 .uleb128 0x32
+ 45933 f108 BE0D0000 .long 0xdbe
+ 45934 f10c 03 .byte 0x3
+ 45935 f10d 91 .byte 0x91
+ 45936 f10e A074 .sleb128 -1504
+ 45937 f110 32 .uleb128 0x32
+ 45938 f111 B20D0000 .long 0xdb2
+ 45939 f115 03 .byte 0x3
+ 45940 f116 91 .byte 0x91
+ 45941 f117 B074 .sleb128 -1488
+ 45942 f119 35 .uleb128 0x35
+ 45943 f11a CB0D0000 .long 0xdcb
+ 45944 f11e 00000000 .quad .LBB4251
+ 45944 00000000
+ 45945 f126 00000000 .quad .LBE4251
+ 45945 00000000
+ 45946 f12e 02 .byte 0x2
+ 45947 f12f 7501 .value 0x175
+ 45948 f131 32 .uleb128 0x32
+ 45949 f132 E90D0000 .long 0xde9
+ 45950 f136 03 .byte 0x3
+ 45951 f137 91 .byte 0x91
+ 45952 f138 C074 .sleb128 -1472
+ 45953 f13a 32 .uleb128 0x32
+ 45954 f13b DD0D0000 .long 0xddd
+ 45955 f13f 03 .byte 0x3
+ 45956 f140 91 .byte 0x91
+ 45957 f141 D074 .sleb128 -1456
+ 45958 f143 00 .byte 0x0
+ 45959 f144 00 .byte 0x0
+ 45960 f145 00 .byte 0x0
+ 45961 f146 00 .byte 0x0
+ 45962 f147 31 .uleb128 0x31
+ 45963 f148 4A0E0000 .long 0xe4a
+ 45964 f14c 00000000 .quad .LBB4253
+ 45964 00000000
+ 45965 f154 00000000 .quad .LBE4253
+ 45965 00000000
+ 45966 f15c 02 .byte 0x2
+ 45967 f15d 1804 .value 0x418
+ 45968 f15f E4F10000 .long 0xf1e4
+ 45969 f163 32 .uleb128 0x32
+ 45970 f164 5C0E0000 .long 0xe5c
+
GAS LISTING /tmp/ccjbMjHD.s page 1131
+
+
+ 45971 f168 03 .byte 0x3
+ 45972 f169 91 .byte 0x91
+ 45973 f16a E074 .sleb128 -1440
+ 45974 f16c 33 .uleb128 0x33
+ 45975 f16d 00000000 .quad .LBB4254
+ 45975 00000000
+ 45976 f175 00000000 .quad .LBE4254
+ 45976 00000000
+ 45977 f17d 34 .uleb128 0x34
+ 45978 f17e 680E0000 .long 0xe68
+ 45979 f182 09 .byte 0x9
+ 45980 f183 03 .byte 0x3
+ 45981 f184 00000000 .quad ShiftRowTable.7385
+ 45981 00000000
+ 45982 f18c 35 .uleb128 0x35
+ 45983 f18d A00D0000 .long 0xda0
+ 45984 f191 00000000 .quad .LBB4255
+ 45984 00000000
+ 45985 f199 00000000 .quad .LBE4255
+ 45985 00000000
+ 45986 f1a1 02 .byte 0x2
+ 45987 f1a2 9B02 .value 0x29b
+ 45988 f1a4 32 .uleb128 0x32
+ 45989 f1a5 BE0D0000 .long 0xdbe
+ 45990 f1a9 03 .byte 0x3
+ 45991 f1aa 91 .byte 0x91
+ 45992 f1ab F074 .sleb128 -1424
+ 45993 f1ad 32 .uleb128 0x32
+ 45994 f1ae B20D0000 .long 0xdb2
+ 45995 f1b2 03 .byte 0x3
+ 45996 f1b3 91 .byte 0x91
+ 45997 f1b4 8075 .sleb128 -1408
+ 45998 f1b6 35 .uleb128 0x35
+ 45999 f1b7 CB0D0000 .long 0xdcb
+ 46000 f1bb 00000000 .quad .LBB4257
+ 46000 00000000
+ 46001 f1c3 00000000 .quad .LBE4257
+ 46001 00000000
+ 46002 f1cb 02 .byte 0x2
+ 46003 f1cc 7501 .value 0x175
+ 46004 f1ce 32 .uleb128 0x32
+ 46005 f1cf E90D0000 .long 0xde9
+ 46006 f1d3 03 .byte 0x3
+ 46007 f1d4 91 .byte 0x91
+ 46008 f1d5 9075 .sleb128 -1392
+ 46009 f1d7 32 .uleb128 0x32
+ 46010 f1d8 DD0D0000 .long 0xddd
+ 46011 f1dc 03 .byte 0x3
+ 46012 f1dd 91 .byte 0x91
+ 46013 f1de A075 .sleb128 -1376
+ 46014 f1e0 00 .byte 0x0
+ 46015 f1e1 00 .byte 0x0
+ 46016 f1e2 00 .byte 0x0
+ 46017 f1e3 00 .byte 0x0
+ 46018 f1e4 31 .uleb128 0x31
+ 46019 f1e5 4A0E0000 .long 0xe4a
+ 46020 f1e9 00000000 .quad .LBB4259
+
GAS LISTING /tmp/ccjbMjHD.s page 1132
+
+
+ 46020 00000000
+ 46021 f1f1 00000000 .quad .LBE4259
+ 46021 00000000
+ 46022 f1f9 02 .byte 0x2
+ 46023 f1fa 1904 .value 0x419
+ 46024 f1fc 81F20000 .long 0xf281
+ 46025 f200 32 .uleb128 0x32
+ 46026 f201 5C0E0000 .long 0xe5c
+ 46027 f205 03 .byte 0x3
+ 46028 f206 91 .byte 0x91
+ 46029 f207 B075 .sleb128 -1360
+ 46030 f209 33 .uleb128 0x33
+ 46031 f20a 00000000 .quad .LBB4260
+ 46031 00000000
+ 46032 f212 00000000 .quad .LBE4260
+ 46032 00000000
+ 46033 f21a 34 .uleb128 0x34
+ 46034 f21b 680E0000 .long 0xe68
+ 46035 f21f 09 .byte 0x9
+ 46036 f220 03 .byte 0x3
+ 46037 f221 00000000 .quad ShiftRowTable.7385
+ 46037 00000000
+ 46038 f229 35 .uleb128 0x35
+ 46039 f22a A00D0000 .long 0xda0
+ 46040 f22e 00000000 .quad .LBB4261
+ 46040 00000000
+ 46041 f236 00000000 .quad .LBE4261
+ 46041 00000000
+ 46042 f23e 02 .byte 0x2
+ 46043 f23f 9B02 .value 0x29b
+ 46044 f241 32 .uleb128 0x32
+ 46045 f242 BE0D0000 .long 0xdbe
+ 46046 f246 03 .byte 0x3
+ 46047 f247 91 .byte 0x91
+ 46048 f248 C075 .sleb128 -1344
+ 46049 f24a 32 .uleb128 0x32
+ 46050 f24b B20D0000 .long 0xdb2
+ 46051 f24f 03 .byte 0x3
+ 46052 f250 91 .byte 0x91
+ 46053 f251 D075 .sleb128 -1328
+ 46054 f253 35 .uleb128 0x35
+ 46055 f254 CB0D0000 .long 0xdcb
+ 46056 f258 00000000 .quad .LBB4263
+ 46056 00000000
+ 46057 f260 00000000 .quad .LBE4263
+ 46057 00000000
+ 46058 f268 02 .byte 0x2
+ 46059 f269 7501 .value 0x175
+ 46060 f26b 32 .uleb128 0x32
+ 46061 f26c E90D0000 .long 0xde9
+ 46062 f270 03 .byte 0x3
+ 46063 f271 91 .byte 0x91
+ 46064 f272 E075 .sleb128 -1312
+ 46065 f274 32 .uleb128 0x32
+ 46066 f275 DD0D0000 .long 0xddd
+ 46067 f279 03 .byte 0x3
+ 46068 f27a 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1133
+
+
+ 46069 f27b F075 .sleb128 -1296
+ 46070 f27d 00 .byte 0x0
+ 46071 f27e 00 .byte 0x0
+ 46072 f27f 00 .byte 0x0
+ 46073 f280 00 .byte 0x0
+ 46074 f281 31 .uleb128 0x31
+ 46075 f282 860E0000 .long 0xe86
+ 46076 f286 00000000 .quad .LBB4265
+ 46076 00000000
+ 46077 f28e 00000000 .quad .LBE4265
+ 46077 00000000
+ 46078 f296 02 .byte 0x2
+ 46079 f297 1A04 .value 0x41a
+ 46080 f299 B0F20000 .long 0xf2b0
+ 46081 f29d 32 .uleb128 0x32
+ 46082 f29e A10E0000 .long 0xea1
+ 46083 f2a2 03 .byte 0x3
+ 46084 f2a3 91 .byte 0x91
+ 46085 f2a4 8076 .sleb128 -1280
+ 46086 f2a6 32 .uleb128 0x32
+ 46087 f2a7 970E0000 .long 0xe97
+ 46088 f2ab 03 .byte 0x3
+ 46089 f2ac 91 .byte 0x91
+ 46090 f2ad 9076 .sleb128 -1264
+ 46091 f2af 00 .byte 0x0
+ 46092 f2b0 31 .uleb128 0x31
+ 46093 f2b1 85EA0000 .long 0xea85
+ 46094 f2b5 00000000 .quad .LBB4267
+ 46094 00000000
+ 46095 f2bd 00000000 .quad .LBE4267
+ 46095 00000000
+ 46096 f2c5 02 .byte 0x2
+ 46097 f2c6 1E04 .value 0x41e
+ 46098 f2c8 C0F50000 .long 0xf5c0
+ 46099 f2cc 32 .uleb128 0x32
+ 46100 f2cd 97EA0000 .long 0xea97
+ 46101 f2d1 03 .byte 0x3
+ 46102 f2d2 91 .byte 0x91
+ 46103 f2d3 A076 .sleb128 -1248
+ 46104 f2d5 36 .uleb128 0x36
+ 46105 f2d6 00000000 .quad .LBB4269
+ 46105 00000000
+ 46106 f2de 00000000 .quad .LBE4269
+ 46106 00000000
+ 46107 f2e6 F4F20000 .long 0xf2f4
+ 46108 f2ea 34 .uleb128 0x34
+ 46109 f2eb A8EA0000 .long 0xeaa8
+ 46110 f2ef 03 .byte 0x3
+ 46111 f2f0 91 .byte 0x91
+ 46112 f2f1 906D .sleb128 -2416
+ 46113 f2f3 00 .byte 0x0
+ 46114 f2f4 31 .uleb128 0x31
+ 46115 f2f5 6BD90000 .long 0xd96b
+ 46116 f2f9 00000000 .quad .LBB4270
+ 46116 00000000
+ 46117 f301 00000000 .quad .LBE4270
+ 46117 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1134
+
+
+ 46118 f309 02 .byte 0x2
+ 46119 f30a B803 .value 0x3b8
+ 46120 f30c A4F50000 .long 0xf5a4
+ 46121 f310 32 .uleb128 0x32
+ 46122 f311 89D90000 .long 0xd989
+ 46123 f315 03 .byte 0x3
+ 46124 f316 91 .byte 0x91
+ 46125 f317 BC76 .sleb128 -1220
+ 46126 f319 32 .uleb128 0x32
+ 46127 f31a 7DD90000 .long 0xd97d
+ 46128 f31e 03 .byte 0x3
+ 46129 f31f 91 .byte 0x91
+ 46130 f320 C076 .sleb128 -1216
+ 46131 f322 33 .uleb128 0x33
+ 46132 f323 00000000 .quad .LBB4271
+ 46132 00000000
+ 46133 f32b 00000000 .quad .LBE4271
+ 46133 00000000
+ 46134 f333 34 .uleb128 0x34
+ 46135 f334 95D90000 .long 0xd995
+ 46136 f338 03 .byte 0x3
+ 46137 f339 91 .byte 0x91
+ 46138 f33a E076 .sleb128 -1184
+ 46139 f33c 34 .uleb128 0x34
+ 46140 f33d A0D90000 .long 0xd9a0
+ 46141 f341 03 .byte 0x3
+ 46142 f342 91 .byte 0x91
+ 46143 f343 D076 .sleb128 -1200
+ 46144 f345 34 .uleb128 0x34
+ 46145 f346 ABD90000 .long 0xd9ab
+ 46146 f34a 09 .byte 0x9
+ 46147 f34b 03 .byte 0x3
+ 46148 f34c 00000000 .quad __PRETTY_FUNCTION__.7467
+ 46148 00000000
+ 46149 f354 36 .uleb128 0x36
+ 46150 f355 00000000 .quad .LBB4272
+ 46150 00000000
+ 46151 f35d 00000000 .quad .LBE4272
+ 46151 00000000
+ 46152 f365 73F30000 .long 0xf373
+ 46153 f369 34 .uleb128 0x34
+ 46154 f36a BED90000 .long 0xd9be
+ 46155 f36e 03 .byte 0x3
+ 46156 f36f 91 .byte 0x91
+ 46157 f370 C06D .sleb128 -2368
+ 46158 f372 00 .byte 0x0
+ 46159 f373 31 .uleb128 0x31
+ 46160 f374 FBD90000 .long 0xd9fb
+ 46161 f378 00000000 .quad .LBB4273
+ 46161 00000000
+ 46162 f380 00000000 .quad .LBE4273
+ 46162 00000000
+ 46163 f388 02 .byte 0x2
+ 46164 f389 A603 .value 0x3a6
+ 46165 f38b 1DF40000 .long 0xf41d
+ 46166 f38f 32 .uleb128 0x32
+ 46167 f390 17DA0000 .long 0xda17
+
GAS LISTING /tmp/ccjbMjHD.s page 1135
+
+
+ 46168 f394 03 .byte 0x3
+ 46169 f395 91 .byte 0x91
+ 46170 f396 FC76 .sleb128 -1156
+ 46171 f398 32 .uleb128 0x32
+ 46172 f399 0DDA0000 .long 0xda0d
+ 46173 f39d 03 .byte 0x3
+ 46174 f39e 91 .byte 0x91
+ 46175 f39f 8077 .sleb128 -1152
+ 46176 f3a1 33 .uleb128 0x33
+ 46177 f3a2 00000000 .quad .LBB4274
+ 46177 00000000
+ 46178 f3aa 00000000 .quad .LBE4274
+ 46178 00000000
+ 46179 f3b2 34 .uleb128 0x34
+ 46180 f3b3 21DA0000 .long 0xda21
+ 46181 f3b7 09 .byte 0x9
+ 46182 f3b8 03 .byte 0x3
+ 46183 f3b9 00000000 .quad sr_mask.7327
+ 46183 00000000
+ 46184 f3c1 31 .uleb128 0x31
+ 46185 f3c2 750D0000 .long 0xd75
+ 46186 f3c6 00000000 .quad .LBB4275
+ 46186 00000000
+ 46187 f3ce 00000000 .quad .LBE4275
+ 46187 00000000
+ 46188 f3d6 02 .byte 0x2
+ 46189 f3d7 E801 .value 0x1e8
+ 46190 f3d9 F0F30000 .long 0xf3f0
+ 46191 f3dd 32 .uleb128 0x32
+ 46192 f3de 930D0000 .long 0xd93
+ 46193 f3e2 03 .byte 0x3
+ 46194 f3e3 91 .byte 0x91
+ 46195 f3e4 9C77 .sleb128 -1124
+ 46196 f3e6 32 .uleb128 0x32
+ 46197 f3e7 870D0000 .long 0xd87
+ 46198 f3eb 03 .byte 0x3
+ 46199 f3ec 91 .byte 0x91
+ 46200 f3ed A077 .sleb128 -1120
+ 46201 f3ef 00 .byte 0x0
+ 46202 f3f0 35 .uleb128 0x35
+ 46203 f3f1 4F0D0000 .long 0xd4f
+ 46204 f3f5 00000000 .quad .LBB4277
+ 46204 00000000
+ 46205 f3fd 00000000 .quad .LBE4277
+ 46205 00000000
+ 46206 f405 02 .byte 0x2
+ 46207 f406 E901 .value 0x1e9
+ 46208 f408 32 .uleb128 0x32
+ 46209 f409 6A0D0000 .long 0xd6a
+ 46210 f40d 03 .byte 0x3
+ 46211 f40e 91 .byte 0x91
+ 46212 f40f B077 .sleb128 -1104
+ 46213 f411 32 .uleb128 0x32
+ 46214 f412 600D0000 .long 0xd60
+ 46215 f416 03 .byte 0x3
+ 46216 f417 91 .byte 0x91
+ 46217 f418 C077 .sleb128 -1088
+
GAS LISTING /tmp/ccjbMjHD.s page 1136
+
+
+ 46218 f41a 00 .byte 0x0
+ 46219 f41b 00 .byte 0x0
+ 46220 f41c 00 .byte 0x0
+ 46221 f41d 36 .uleb128 0x36
+ 46222 f41e 00000000 .quad .LBB4279
+ 46222 00000000
+ 46223 f426 00000000 .quad .LBE4279
+ 46223 00000000
+ 46224 f42e 3CF40000 .long 0xf43c
+ 46225 f432 34 .uleb128 0x34
+ 46226 f433 CED90000 .long 0xd9ce
+ 46227 f437 03 .byte 0x3
+ 46228 f438 91 .byte 0x91
+ 46229 f439 B06D .sleb128 -2384
+ 46230 f43b 00 .byte 0x0
+ 46231 f43c 31 .uleb128 0x31
+ 46232 f43d D4DA0000 .long 0xdad4
+ 46233 f441 00000000 .quad .LBB4280
+ 46233 00000000
+ 46234 f449 00000000 .quad .LBE4280
+ 46234 00000000
+ 46235 f451 02 .byte 0x2
+ 46236 f452 A803 .value 0x3a8
+ 46237 f454 FEF40000 .long 0xf4fe
+ 46238 f458 32 .uleb128 0x32
+ 46239 f459 F0DA0000 .long 0xdaf0
+ 46240 f45d 03 .byte 0x3
+ 46241 f45e 91 .byte 0x91
+ 46242 f45f DC77 .sleb128 -1060
+ 46243 f461 32 .uleb128 0x32
+ 46244 f462 E6DA0000 .long 0xdae6
+ 46245 f466 03 .byte 0x3
+ 46246 f467 91 .byte 0x91
+ 46247 f468 E077 .sleb128 -1056
+ 46248 f46a 33 .uleb128 0x33
+ 46249 f46b 00000000 .quad .LBB4281
+ 46249 00000000
+ 46250 f473 00000000 .quad .LBE4281
+ 46250 00000000
+ 46251 f47b 34 .uleb128 0x34
+ 46252 f47c 97DB0000 .long 0xdb97
+ 46253 f480 03 .byte 0x3
+ 46254 f481 91 .byte 0x91
+ 46255 f482 F077 .sleb128 -1040
+ 46256 f484 34 .uleb128 0x34
+ 46257 f485 FADA0000 .long 0xdafa
+ 46258 f489 09 .byte 0x9
+ 46259 f48a 03 .byte 0x3
+ 46260 f48b 00000000 .quad sl_mask.7310
+ 46260 00000000
+ 46261 f493 34 .uleb128 0x34
+ 46262 f494 A2DB0000 .long 0xdba2
+ 46263 f498 09 .byte 0x9
+ 46264 f499 03 .byte 0x3
+ 46265 f49a 00000000 .quad __PRETTY_FUNCTION__.7312
+ 46265 00000000
+ 46266 f4a2 31 .uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s page 1137
+
+
+ 46267 f4a3 CBDB0000 .long 0xdbcb
+ 46268 f4a7 00000000 .quad .LBB4282
+ 46268 00000000
+ 46269 f4af 00000000 .quad .LBE4282
+ 46269 00000000
+ 46270 f4b7 02 .byte 0x2
+ 46271 f4b8 B101 .value 0x1b1
+ 46272 f4ba D1F40000 .long 0xf4d1
+ 46273 f4be 32 .uleb128 0x32
+ 46274 f4bf E9DB0000 .long 0xdbe9
+ 46275 f4c3 03 .byte 0x3
+ 46276 f4c4 91 .byte 0x91
+ 46277 f4c5 8C78 .sleb128 -1012
+ 46278 f4c7 32 .uleb128 0x32
+ 46279 f4c8 DDDB0000 .long 0xdbdd
+ 46280 f4cc 03 .byte 0x3
+ 46281 f4cd 91 .byte 0x91
+ 46282 f4ce 9078 .sleb128 -1008
+ 46283 f4d0 00 .byte 0x0
+ 46284 f4d1 35 .uleb128 0x35
+ 46285 f4d2 4F0D0000 .long 0xd4f
+ 46286 f4d6 00000000 .quad .LBB4284
+ 46286 00000000
+ 46287 f4de 00000000 .quad .LBE4284
+ 46287 00000000
+ 46288 f4e6 02 .byte 0x2
+ 46289 f4e7 B301 .value 0x1b3
+ 46290 f4e9 32 .uleb128 0x32
+ 46291 f4ea 6A0D0000 .long 0xd6a
+ 46292 f4ee 03 .byte 0x3
+ 46293 f4ef 91 .byte 0x91
+ 46294 f4f0 A078 .sleb128 -992
+ 46295 f4f2 32 .uleb128 0x32
+ 46296 f4f3 600D0000 .long 0xd60
+ 46297 f4f7 03 .byte 0x3
+ 46298 f4f8 91 .byte 0x91
+ 46299 f4f9 B078 .sleb128 -976
+ 46300 f4fb 00 .byte 0x0
+ 46301 f4fc 00 .byte 0x0
+ 46302 f4fd 00 .byte 0x0
+ 46303 f4fe 36 .uleb128 0x36
+ 46304 f4ff 00000000 .quad .LBB4286
+ 46304 00000000
+ 46305 f507 00000000 .quad .LBE4286
+ 46305 00000000
+ 46306 f50f 1DF50000 .long 0xf51d
+ 46307 f513 34 .uleb128 0x34
+ 46308 f514 DAD90000 .long 0xd9da
+ 46309 f518 03 .byte 0x3
+ 46310 f519 91 .byte 0x91
+ 46311 f51a A06D .sleb128 -2400
+ 46312 f51c 00 .byte 0x0
+ 46313 f51d 31 .uleb128 0x31
+ 46314 f51e A00D0000 .long 0xda0
+ 46315 f522 00000000 .quad .LBB4287
+ 46315 00000000
+ 46316 f52a 00000000 .quad .LBE4287
+
GAS LISTING /tmp/ccjbMjHD.s page 1138
+
+
+ 46316 00000000
+ 46317 f532 02 .byte 0x2
+ 46318 f533 AA03 .value 0x3aa
+ 46319 f535 77F50000 .long 0xf577
+ 46320 f539 32 .uleb128 0x32
+ 46321 f53a BE0D0000 .long 0xdbe
+ 46322 f53e 03 .byte 0x3
+ 46323 f53f 91 .byte 0x91
+ 46324 f540 C078 .sleb128 -960
+ 46325 f542 32 .uleb128 0x32
+ 46326 f543 B20D0000 .long 0xdb2
+ 46327 f547 03 .byte 0x3
+ 46328 f548 91 .byte 0x91
+ 46329 f549 D078 .sleb128 -944
+ 46330 f54b 35 .uleb128 0x35
+ 46331 f54c CB0D0000 .long 0xdcb
+ 46332 f550 00000000 .quad .LBB4289
+ 46332 00000000
+ 46333 f558 00000000 .quad .LBE4289
+ 46333 00000000
+ 46334 f560 02 .byte 0x2
+ 46335 f561 7501 .value 0x175
+ 46336 f563 32 .uleb128 0x32
+ 46337 f564 E90D0000 .long 0xde9
+ 46338 f568 03 .byte 0x3
+ 46339 f569 91 .byte 0x91
+ 46340 f56a E078 .sleb128 -928
+ 46341 f56c 32 .uleb128 0x32
+ 46342 f56d DD0D0000 .long 0xddd
+ 46343 f571 03 .byte 0x3
+ 46344 f572 91 .byte 0x91
+ 46345 f573 F078 .sleb128 -912
+ 46346 f575 00 .byte 0x0
+ 46347 f576 00 .byte 0x0
+ 46348 f577 35 .uleb128 0x35
+ 46349 f578 860E0000 .long 0xe86
+ 46350 f57c 00000000 .quad .LBB4291
+ 46350 00000000
+ 46351 f584 00000000 .quad .LBE4291
+ 46351 00000000
+ 46352 f58c 02 .byte 0x2
+ 46353 f58d AB03 .value 0x3ab
+ 46354 f58f 32 .uleb128 0x32
+ 46355 f590 A10E0000 .long 0xea1
+ 46356 f594 03 .byte 0x3
+ 46357 f595 91 .byte 0x91
+ 46358 f596 8079 .sleb128 -896
+ 46359 f598 32 .uleb128 0x32
+ 46360 f599 970E0000 .long 0xe97
+ 46361 f59d 03 .byte 0x3
+ 46362 f59e 91 .byte 0x91
+ 46363 f59f 9079 .sleb128 -880
+ 46364 f5a1 00 .byte 0x0
+ 46365 f5a2 00 .byte 0x0
+ 46366 f5a3 00 .byte 0x0
+ 46367 f5a4 33 .uleb128 0x33
+ 46368 f5a5 00000000 .quad .LBB4293
+
GAS LISTING /tmp/ccjbMjHD.s page 1139
+
+
+ 46368 00000000
+ 46369 f5ad 00000000 .quad .LBE4293
+ 46369 00000000
+ 46370 f5b5 34 .uleb128 0x34
+ 46371 f5b6 B4EA0000 .long 0xeab4
+ 46372 f5ba 03 .byte 0x3
+ 46373 f5bb 91 .byte 0x91
+ 46374 f5bc 806D .sleb128 -2432
+ 46375 f5be 00 .byte 0x0
+ 46376 f5bf 00 .byte 0x0
+ 46377 f5c0 31 .uleb128 0x31
+ 46378 f5c1 860E0000 .long 0xe86
+ 46379 f5c5 00000000 .quad .LBB4294
+ 46379 00000000
+ 46380 f5cd 00000000 .quad .LBE4294
+ 46380 00000000
+ 46381 f5d5 02 .byte 0x2
+ 46382 f5d6 2B04 .value 0x42b
+ 46383 f5d8 EFF50000 .long 0xf5ef
+ 46384 f5dc 32 .uleb128 0x32
+ 46385 f5dd A10E0000 .long 0xea1
+ 46386 f5e1 03 .byte 0x3
+ 46387 f5e2 91 .byte 0x91
+ 46388 f5e3 A079 .sleb128 -864
+ 46389 f5e5 32 .uleb128 0x32
+ 46390 f5e6 970E0000 .long 0xe97
+ 46391 f5ea 03 .byte 0x3
+ 46392 f5eb 91 .byte 0x91
+ 46393 f5ec B079 .sleb128 -848
+ 46394 f5ee 00 .byte 0x0
+ 46395 f5ef 31 .uleb128 0x31
+ 46396 f5f0 860E0000 .long 0xe86
+ 46397 f5f4 00000000 .quad .LBB4296
+ 46397 00000000
+ 46398 f5fc 00000000 .quad .LBE4296
+ 46398 00000000
+ 46399 f604 02 .byte 0x2
+ 46400 f605 2C04 .value 0x42c
+ 46401 f607 1EF60000 .long 0xf61e
+ 46402 f60b 32 .uleb128 0x32
+ 46403 f60c A10E0000 .long 0xea1
+ 46404 f610 03 .byte 0x3
+ 46405 f611 91 .byte 0x91
+ 46406 f612 C079 .sleb128 -832
+ 46407 f614 32 .uleb128 0x32
+ 46408 f615 970E0000 .long 0xe97
+ 46409 f619 03 .byte 0x3
+ 46410 f61a 91 .byte 0x91
+ 46411 f61b D079 .sleb128 -816
+ 46412 f61d 00 .byte 0x0
+ 46413 f61e 35 .uleb128 0x35
+ 46414 f61f 860E0000 .long 0xe86
+ 46415 f623 00000000 .quad .LBB4298
+ 46415 00000000
+ 46416 f62b 00000000 .quad .LBE4298
+ 46416 00000000
+ 46417 f633 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1140
+
+
+ 46418 f634 2D04 .value 0x42d
+ 46419 f636 32 .uleb128 0x32
+ 46420 f637 A10E0000 .long 0xea1
+ 46421 f63b 03 .byte 0x3
+ 46422 f63c 91 .byte 0x91
+ 46423 f63d E079 .sleb128 -800
+ 46424 f63f 32 .uleb128 0x32
+ 46425 f640 970E0000 .long 0xe97
+ 46426 f644 03 .byte 0x3
+ 46427 f645 91 .byte 0x91
+ 46428 f646 F079 .sleb128 -784
+ 46429 f648 00 .byte 0x0
+ 46430 f649 00 .byte 0x0
+ 46431 f64a 00 .byte 0x0
+ 46432 f64b 36 .uleb128 0x36
+ 46433 f64c 00000000 .quad .LBB4300
+ 46433 00000000
+ 46434 f654 00000000 .quad .LBE4300
+ 46434 00000000
+ 46435 f65c 6AF60000 .long 0xf66a
+ 46436 f660 34 .uleb128 0x34
+ 46437 f661 D6E90000 .long 0xe9d6
+ 46438 f665 03 .byte 0x3
+ 46439 f666 91 .byte 0x91
+ 46440 f667 C06C .sleb128 -2496
+ 46441 f669 00 .byte 0x0
+ 46442 f66a 31 .uleb128 0x31
+ 46443 f66b 34E90000 .long 0xe934
+ 46444 f66f 00000000 .quad .LBB4301
+ 46444 00000000
+ 46445 f677 00000000 .quad .LBE4301
+ 46445 00000000
+ 46446 f67f 02 .byte 0x2
+ 46447 f680 FA07 .value 0x7fa
+ 46448 f682 C4F60000 .long 0xf6c4
+ 46449 f686 32 .uleb128 0x32
+ 46450 f687 52E90000 .long 0xe952
+ 46451 f68b 03 .byte 0x3
+ 46452 f68c 91 .byte 0x91
+ 46453 f68d 807A .sleb128 -768
+ 46454 f68f 32 .uleb128 0x32
+ 46455 f690 46E90000 .long 0xe946
+ 46456 f694 03 .byte 0x3
+ 46457 f695 91 .byte 0x91
+ 46458 f696 907A .sleb128 -752
+ 46459 f698 35 .uleb128 0x35
+ 46460 f699 860E0000 .long 0xe86
+ 46461 f69d 00000000 .quad .LBB4303
+ 46461 00000000
+ 46462 f6a5 00000000 .quad .LBE4303
+ 46462 00000000
+ 46463 f6ad 02 .byte 0x2
+ 46464 f6ae 2302 .value 0x223
+ 46465 f6b0 32 .uleb128 0x32
+ 46466 f6b1 A10E0000 .long 0xea1
+ 46467 f6b5 03 .byte 0x3
+ 46468 f6b6 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1141
+
+
+ 46469 f6b7 A07A .sleb128 -736
+ 46470 f6b9 32 .uleb128 0x32
+ 46471 f6ba 970E0000 .long 0xe97
+ 46472 f6be 03 .byte 0x3
+ 46473 f6bf 91 .byte 0x91
+ 46474 f6c0 B07A .sleb128 -720
+ 46475 f6c2 00 .byte 0x0
+ 46476 f6c3 00 .byte 0x0
+ 46477 f6c4 36 .uleb128 0x36
+ 46478 f6c5 00000000 .quad .LBB4305
+ 46478 00000000
+ 46479 f6cd 00000000 .quad .LBE4305
+ 46479 00000000
+ 46480 f6d5 E3F60000 .long 0xf6e3
+ 46481 f6d9 34 .uleb128 0x34
+ 46482 f6da E6E90000 .long 0xe9e6
+ 46483 f6de 03 .byte 0x3
+ 46484 f6df 91 .byte 0x91
+ 46485 f6e0 B06C .sleb128 -2512
+ 46486 f6e2 00 .byte 0x0
+ 46487 f6e3 33 .uleb128 0x33
+ 46488 f6e4 00000000 .quad .LBB4306
+ 46488 00000000
+ 46489 f6ec 00000000 .quad .LBE4306
+ 46489 00000000
+ 46490 f6f4 34 .uleb128 0x34
+ 46491 f6f5 F2E90000 .long 0xe9f2
+ 46492 f6f9 03 .byte 0x3
+ 46493 f6fa 91 .byte 0x91
+ 46494 f6fb A06C .sleb128 -2528
+ 46495 f6fd 00 .byte 0x0
+ 46496 f6fe 00 .byte 0x0
+ 46497 f6ff 00 .byte 0x0
+ 46498 f700 35 .uleb128 0x35
+ 46499 f701 C0EA0000 .long 0xeac0
+ 46500 f705 00000000 .quad .LBB4307
+ 46500 00000000
+ 46501 f70d 00000000 .quad .LBE4307
+ 46501 00000000
+ 46502 f715 02 .byte 0x2
+ 46503 f716 3608 .value 0x836
+ 46504 f718 32 .uleb128 0x32
+ 46505 f719 DEEA0000 .long 0xeade
+ 46506 f71d 03 .byte 0x3
+ 46507 f71e 91 .byte 0x91
+ 46508 f71f C07A .sleb128 -704
+ 46509 f721 32 .uleb128 0x32
+ 46510 f722 D2EA0000 .long 0xead2
+ 46511 f726 03 .byte 0x3
+ 46512 f727 91 .byte 0x91
+ 46513 f728 D07A .sleb128 -688
+ 46514 f72a 36 .uleb128 0x36
+ 46515 f72b 00000000 .quad .LBB4309
+ 46515 00000000
+ 46516 f733 00000000 .quad .LBE4309
+ 46516 00000000
+ 46517 f73b 49F70000 .long 0xf749
+
GAS LISTING /tmp/ccjbMjHD.s page 1142
+
+
+ 46518 f73f 34 .uleb128 0x34
+ 46519 f740 EFEA0000 .long 0xeaef
+ 46520 f744 03 .byte 0x3
+ 46521 f745 91 .byte 0x91
+ 46522 f746 906E .sleb128 -2288
+ 46523 f748 00 .byte 0x0
+ 46524 f749 31 .uleb128 0x31
+ 46525 f74a C10C0000 .long 0xcc1
+ 46526 f74e 00000000 .quad .LBB4310
+ 46526 00000000
+ 46527 f756 00000000 .quad .LBE4310
+ 46527 00000000
+ 46528 f75e 02 .byte 0x2
+ 46529 f75f 0F08 .value 0x80f
+ 46530 f761 D2F90000 .long 0xf9d2
+ 46531 f765 32 .uleb128 0x32
+ 46532 f766 D30C0000 .long 0xcd3
+ 46533 f76a 03 .byte 0x3
+ 46534 f76b 91 .byte 0x91
+ 46535 f76c E07A .sleb128 -672
+ 46536 f76e 35 .uleb128 0x35
+ 46537 f76f E00C0000 .long 0xce0
+ 46538 f773 00000000 .quad .LBB4312
+ 46538 00000000
+ 46539 f77b 00000000 .quad .LBE4312
+ 46539 00000000
+ 46540 f783 02 .byte 0x2
+ 46541 f784 7D03 .value 0x37d
+ 46542 f786 32 .uleb128 0x32
+ 46543 f787 FE0C0000 .long 0xcfe
+ 46544 f78b 03 .byte 0x3
+ 46545 f78c 91 .byte 0x91
+ 46546 f78d F87A .sleb128 -648
+ 46547 f78f 32 .uleb128 0x32
+ 46548 f790 F20C0000 .long 0xcf2
+ 46549 f794 03 .byte 0x3
+ 46550 f795 91 .byte 0x91
+ 46551 f796 807B .sleb128 -640
+ 46552 f798 33 .uleb128 0x33
+ 46553 f799 00000000 .quad .LBB4313
+ 46553 00000000
+ 46554 f7a1 00000000 .quad .LBE4313
+ 46554 00000000
+ 46555 f7a9 34 .uleb128 0x34
+ 46556 f7aa 0A0D0000 .long 0xd0a
+ 46557 f7ae 03 .byte 0x3
+ 46558 f7af 91 .byte 0x91
+ 46559 f7b0 D07B .sleb128 -560
+ 46560 f7b2 34 .uleb128 0x34
+ 46561 f7b3 150D0000 .long 0xd15
+ 46562 f7b7 03 .byte 0x3
+ 46563 f7b8 91 .byte 0x91
+ 46564 f7b9 C07B .sleb128 -576
+ 46565 f7bb 34 .uleb128 0x34
+ 46566 f7bc 200D0000 .long 0xd20
+ 46567 f7c0 03 .byte 0x3
+ 46568 f7c1 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1143
+
+
+ 46569 f7c2 B07B .sleb128 -592
+ 46570 f7c4 34 .uleb128 0x34
+ 46571 f7c5 2C0D0000 .long 0xd2c
+ 46572 f7c9 03 .byte 0x3
+ 46573 f7ca 91 .byte 0x91
+ 46574 f7cb A07B .sleb128 -608
+ 46575 f7cd 34 .uleb128 0x34
+ 46576 f7ce 380D0000 .long 0xd38
+ 46577 f7d2 03 .byte 0x3
+ 46578 f7d3 91 .byte 0x91
+ 46579 f7d4 9C7B .sleb128 -612
+ 46580 f7d6 31 .uleb128 0x31
+ 46581 f7d7 4F0D0000 .long 0xd4f
+ 46582 f7db 00000000 .quad .LBB4314
+ 46582 00000000
+ 46583 f7e3 00000000 .quad .LBE4314
+ 46583 00000000
+ 46584 f7eb 02 .byte 0x2
+ 46585 f7ec 5603 .value 0x356
+ 46586 f7ee 05F80000 .long 0xf805
+ 46587 f7f2 32 .uleb128 0x32
+ 46588 f7f3 6A0D0000 .long 0xd6a
+ 46589 f7f7 03 .byte 0x3
+ 46590 f7f8 91 .byte 0x91
+ 46591 f7f9 E07B .sleb128 -544
+ 46592 f7fb 32 .uleb128 0x32
+ 46593 f7fc 600D0000 .long 0xd60
+ 46594 f800 03 .byte 0x3
+ 46595 f801 91 .byte 0x91
+ 46596 f802 F07B .sleb128 -528
+ 46597 f804 00 .byte 0x0
+ 46598 f805 31 .uleb128 0x31
+ 46599 f806 750D0000 .long 0xd75
+ 46600 f80a 00000000 .quad .LBB4316
+ 46600 00000000
+ 46601 f812 00000000 .quad .LBE4316
+ 46601 00000000
+ 46602 f81a 02 .byte 0x2
+ 46603 f81b 5903 .value 0x359
+ 46604 f81d 34F80000 .long 0xf834
+ 46605 f821 32 .uleb128 0x32
+ 46606 f822 930D0000 .long 0xd93
+ 46607 f826 03 .byte 0x3
+ 46608 f827 91 .byte 0x91
+ 46609 f828 8C7C .sleb128 -500
+ 46610 f82a 32 .uleb128 0x32
+ 46611 f82b 870D0000 .long 0xd87
+ 46612 f82f 03 .byte 0x3
+ 46613 f830 91 .byte 0x91
+ 46614 f831 907C .sleb128 -496
+ 46615 f833 00 .byte 0x0
+ 46616 f834 31 .uleb128 0x31
+ 46617 f835 4F0D0000 .long 0xd4f
+ 46618 f839 00000000 .quad .LBB4318
+ 46618 00000000
+ 46619 f841 00000000 .quad .LBE4318
+ 46619 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1144
+
+
+ 46620 f849 02 .byte 0x2
+ 46621 f84a 5B03 .value 0x35b
+ 46622 f84c 63F80000 .long 0xf863
+ 46623 f850 32 .uleb128 0x32
+ 46624 f851 6A0D0000 .long 0xd6a
+ 46625 f855 03 .byte 0x3
+ 46626 f856 91 .byte 0x91
+ 46627 f857 A07C .sleb128 -480
+ 46628 f859 32 .uleb128 0x32
+ 46629 f85a 600D0000 .long 0xd60
+ 46630 f85e 03 .byte 0x3
+ 46631 f85f 91 .byte 0x91
+ 46632 f860 B07C .sleb128 -464
+ 46633 f862 00 .byte 0x0
+ 46634 f863 31 .uleb128 0x31
+ 46635 f864 A00D0000 .long 0xda0
+ 46636 f868 00000000 .quad .LBB4320
+ 46636 00000000
+ 46637 f870 00000000 .quad .LBE4320
+ 46637 00000000
+ 46638 f878 02 .byte 0x2
+ 46639 f879 6403 .value 0x364
+ 46640 f87b BDF80000 .long 0xf8bd
+ 46641 f87f 32 .uleb128 0x32
+ 46642 f880 BE0D0000 .long 0xdbe
+ 46643 f884 03 .byte 0x3
+ 46644 f885 91 .byte 0x91
+ 46645 f886 C07C .sleb128 -448
+ 46646 f888 32 .uleb128 0x32
+ 46647 f889 B20D0000 .long 0xdb2
+ 46648 f88d 03 .byte 0x3
+ 46649 f88e 91 .byte 0x91
+ 46650 f88f D07C .sleb128 -432
+ 46651 f891 35 .uleb128 0x35
+ 46652 f892 CB0D0000 .long 0xdcb
+ 46653 f896 00000000 .quad .LBB4322
+ 46653 00000000
+ 46654 f89e 00000000 .quad .LBE4322
+ 46654 00000000
+ 46655 f8a6 02 .byte 0x2
+ 46656 f8a7 7501 .value 0x175
+ 46657 f8a9 32 .uleb128 0x32
+ 46658 f8aa E90D0000 .long 0xde9
+ 46659 f8ae 03 .byte 0x3
+ 46660 f8af 91 .byte 0x91
+ 46661 f8b0 E07C .sleb128 -416
+ 46662 f8b2 32 .uleb128 0x32
+ 46663 f8b3 DD0D0000 .long 0xddd
+ 46664 f8b7 03 .byte 0x3
+ 46665 f8b8 91 .byte 0x91
+ 46666 f8b9 F07C .sleb128 -400
+ 46667 f8bb 00 .byte 0x0
+ 46668 f8bc 00 .byte 0x0
+ 46669 f8bd 31 .uleb128 0x31
+ 46670 f8be FB0D0000 .long 0xdfb
+ 46671 f8c2 00000000 .quad .LBB4324
+ 46671 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1145
+
+
+ 46672 f8ca 00000000 .quad .LBE4324
+ 46672 00000000
+ 46673 f8d2 02 .byte 0x2
+ 46674 f8d3 6603 .value 0x366
+ 46675 f8d5 ECF80000 .long 0xf8ec
+ 46676 f8d9 32 .uleb128 0x32
+ 46677 f8da 160E0000 .long 0xe16
+ 46678 f8de 03 .byte 0x3
+ 46679 f8df 91 .byte 0x91
+ 46680 f8e0 807D .sleb128 -384
+ 46681 f8e2 32 .uleb128 0x32
+ 46682 f8e3 0C0E0000 .long 0xe0c
+ 46683 f8e7 03 .byte 0x3
+ 46684 f8e8 91 .byte 0x91
+ 46685 f8e9 907D .sleb128 -368
+ 46686 f8eb 00 .byte 0x0
+ 46687 f8ec 31 .uleb128 0x31
+ 46688 f8ed A00D0000 .long 0xda0
+ 46689 f8f1 00000000 .quad .LBB4326
+ 46689 00000000
+ 46690 f8f9 00000000 .quad .LBE4326
+ 46690 00000000
+ 46691 f901 02 .byte 0x2
+ 46692 f902 6803 .value 0x368
+ 46693 f904 46F90000 .long 0xf946
+ 46694 f908 32 .uleb128 0x32
+ 46695 f909 BE0D0000 .long 0xdbe
+ 46696 f90d 03 .byte 0x3
+ 46697 f90e 91 .byte 0x91
+ 46698 f90f A07D .sleb128 -352
+ 46699 f911 32 .uleb128 0x32
+ 46700 f912 B20D0000 .long 0xdb2
+ 46701 f916 03 .byte 0x3
+ 46702 f917 91 .byte 0x91
+ 46703 f918 B07D .sleb128 -336
+ 46704 f91a 35 .uleb128 0x35
+ 46705 f91b CB0D0000 .long 0xdcb
+ 46706 f91f 00000000 .quad .LBB4328
+ 46706 00000000
+ 46707 f927 00000000 .quad .LBE4328
+ 46707 00000000
+ 46708 f92f 02 .byte 0x2
+ 46709 f930 7501 .value 0x175
+ 46710 f932 32 .uleb128 0x32
+ 46711 f933 E90D0000 .long 0xde9
+ 46712 f937 03 .byte 0x3
+ 46713 f938 91 .byte 0x91
+ 46714 f939 C07D .sleb128 -320
+ 46715 f93b 32 .uleb128 0x32
+ 46716 f93c DD0D0000 .long 0xddd
+ 46717 f940 03 .byte 0x3
+ 46718 f941 91 .byte 0x91
+ 46719 f942 D07D .sleb128 -304
+ 46720 f944 00 .byte 0x0
+ 46721 f945 00 .byte 0x0
+ 46722 f946 31 .uleb128 0x31
+ 46723 f947 FB0D0000 .long 0xdfb
+
GAS LISTING /tmp/ccjbMjHD.s page 1146
+
+
+ 46724 f94b 00000000 .quad .LBB4330
+ 46724 00000000
+ 46725 f953 00000000 .quad .LBE4330
+ 46725 00000000
+ 46726 f95b 02 .byte 0x2
+ 46727 f95c 6A03 .value 0x36a
+ 46728 f95e 75F90000 .long 0xf975
+ 46729 f962 32 .uleb128 0x32
+ 46730 f963 160E0000 .long 0xe16
+ 46731 f967 03 .byte 0x3
+ 46732 f968 91 .byte 0x91
+ 46733 f969 E07D .sleb128 -288
+ 46734 f96b 32 .uleb128 0x32
+ 46735 f96c 0C0E0000 .long 0xe0c
+ 46736 f970 03 .byte 0x3
+ 46737 f971 91 .byte 0x91
+ 46738 f972 F07D .sleb128 -272
+ 46739 f974 00 .byte 0x0
+ 46740 f975 31 .uleb128 0x31
+ 46741 f976 210E0000 .long 0xe21
+ 46742 f97a 00000000 .quad .LBB4332
+ 46742 00000000
+ 46743 f982 00000000 .quad .LBE4332
+ 46743 00000000
+ 46744 f98a 02 .byte 0x2
+ 46745 f98b 6C03 .value 0x36c
+ 46746 f98d A4F90000 .long 0xf9a4
+ 46747 f991 32 .uleb128 0x32
+ 46748 f992 3E0E0000 .long 0xe3e
+ 46749 f996 03 .byte 0x3
+ 46750 f997 91 .byte 0x91
+ 46751 f998 807E .sleb128 -256
+ 46752 f99a 32 .uleb128 0x32
+ 46753 f99b 330E0000 .long 0xe33
+ 46754 f99f 03 .byte 0x3
+ 46755 f9a0 91 .byte 0x91
+ 46756 f9a1 907E .sleb128 -240
+ 46757 f9a3 00 .byte 0x0
+ 46758 f9a4 35 .uleb128 0x35
+ 46759 f9a5 4F0D0000 .long 0xd4f
+ 46760 f9a9 00000000 .quad .LBB4334
+ 46760 00000000
+ 46761 f9b1 00000000 .quad .LBE4334
+ 46761 00000000
+ 46762 f9b9 02 .byte 0x2
+ 46763 f9ba 6E03 .value 0x36e
+ 46764 f9bc 32 .uleb128 0x32
+ 46765 f9bd 6A0D0000 .long 0xd6a
+ 46766 f9c1 03 .byte 0x3
+ 46767 f9c2 91 .byte 0x91
+ 46768 f9c3 A07E .sleb128 -224
+ 46769 f9c5 32 .uleb128 0x32
+ 46770 f9c6 600D0000 .long 0xd60
+ 46771 f9ca 03 .byte 0x3
+ 46772 f9cb 91 .byte 0x91
+ 46773 f9cc B07E .sleb128 -208
+ 46774 f9ce 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1147
+
+
+ 46775 f9cf 00 .byte 0x0
+ 46776 f9d0 00 .byte 0x0
+ 46777 f9d1 00 .byte 0x0
+ 46778 f9d2 36 .uleb128 0x36
+ 46779 f9d3 00000000 .quad .LBB4336
+ 46779 00000000
+ 46780 f9db 00000000 .quad .LBE4336
+ 46780 00000000
+ 46781 f9e3 F1F90000 .long 0xf9f1
+ 46782 f9e7 34 .uleb128 0x34
+ 46783 f9e8 FFEA0000 .long 0xeaff
+ 46784 f9ec 03 .byte 0x3
+ 46785 f9ed 91 .byte 0x91
+ 46786 f9ee 806E .sleb128 -2304
+ 46787 f9f0 00 .byte 0x0
+ 46788 f9f1 31 .uleb128 0x31
+ 46789 f9f2 FEE90000 .long 0xe9fe
+ 46790 f9f6 00000000 .quad .LBB4337
+ 46790 00000000
+ 46791 f9fe 00000000 .quad .LBE4337
+ 46791 00000000
+ 46792 fa06 02 .byte 0x2
+ 46793 fa07 1308 .value 0x813
+ 46794 fa09 8EFA0000 .long 0xfa8e
+ 46795 fa0d 32 .uleb128 0x32
+ 46796 fa0e 10EA0000 .long 0xea10
+ 46797 fa12 03 .byte 0x3
+ 46798 fa13 91 .byte 0x91
+ 46799 fa14 C07E .sleb128 -192
+ 46800 fa16 33 .uleb128 0x33
+ 46801 fa17 00000000 .quad .LBB4338
+ 46801 00000000
+ 46802 fa1f 00000000 .quad .LBE4338
+ 46802 00000000
+ 46803 fa27 34 .uleb128 0x34
+ 46804 fa28 1CEA0000 .long 0xea1c
+ 46805 fa2c 09 .byte 0x9
+ 46806 fa2d 03 .byte 0x3
+ 46807 fa2e 00000000 .quad ShiftRowTable.7358
+ 46807 00000000
+ 46808 fa36 35 .uleb128 0x35
+ 46809 fa37 A00D0000 .long 0xda0
+ 46810 fa3b 00000000 .quad .LBB4339
+ 46810 00000000
+ 46811 fa43 00000000 .quad .LBE4339
+ 46811 00000000
+ 46812 fa4b 02 .byte 0x2
+ 46813 fa4c 4502 .value 0x245
+ 46814 fa4e 32 .uleb128 0x32
+ 46815 fa4f BE0D0000 .long 0xdbe
+ 46816 fa53 03 .byte 0x3
+ 46817 fa54 91 .byte 0x91
+ 46818 fa55 D07E .sleb128 -176
+ 46819 fa57 32 .uleb128 0x32
+ 46820 fa58 B20D0000 .long 0xdb2
+ 46821 fa5c 03 .byte 0x3
+ 46822 fa5d 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1148
+
+
+ 46823 fa5e E07E .sleb128 -160
+ 46824 fa60 35 .uleb128 0x35
+ 46825 fa61 CB0D0000 .long 0xdcb
+ 46826 fa65 00000000 .quad .LBB4341
+ 46826 00000000
+ 46827 fa6d 00000000 .quad .LBE4341
+ 46827 00000000
+ 46828 fa75 02 .byte 0x2
+ 46829 fa76 7501 .value 0x175
+ 46830 fa78 32 .uleb128 0x32
+ 46831 fa79 E90D0000 .long 0xde9
+ 46832 fa7d 03 .byte 0x3
+ 46833 fa7e 91 .byte 0x91
+ 46834 fa7f F07E .sleb128 -144
+ 46835 fa81 32 .uleb128 0x32
+ 46836 fa82 DD0D0000 .long 0xddd
+ 46837 fa86 03 .byte 0x3
+ 46838 fa87 91 .byte 0x91
+ 46839 fa88 807F .sleb128 -128
+ 46840 fa8a 00 .byte 0x0
+ 46841 fa8b 00 .byte 0x0
+ 46842 fa8c 00 .byte 0x0
+ 46843 fa8d 00 .byte 0x0
+ 46844 fa8e 36 .uleb128 0x36
+ 46845 fa8f 00000000 .quad .LBB4343
+ 46845 00000000
+ 46846 fa97 00000000 .quad .LBE4343
+ 46846 00000000
+ 46847 fa9f ADFA0000 .long 0xfaad
+ 46848 faa3 34 .uleb128 0x34
+ 46849 faa4 0FEB0000 .long 0xeb0f
+ 46850 faa8 03 .byte 0x3
+ 46851 faa9 91 .byte 0x91
+ 46852 faaa F06D .sleb128 -2320
+ 46853 faac 00 .byte 0x0
+ 46854 faad 31 .uleb128 0x31
+ 46855 faae 34E90000 .long 0xe934
+ 46856 fab2 00000000 .quad .LBB4344
+ 46856 00000000
+ 46857 faba 00000000 .quad .LBE4344
+ 46857 00000000
+ 46858 fac2 02 .byte 0x2
+ 46859 fac3 1708 .value 0x817
+ 46860 fac5 06FB0000 .long 0xfb06
+ 46861 fac9 32 .uleb128 0x32
+ 46862 faca 52E90000 .long 0xe952
+ 46863 face 03 .byte 0x3
+ 46864 facf 91 .byte 0x91
+ 46865 fad0 907F .sleb128 -112
+ 46866 fad2 32 .uleb128 0x32
+ 46867 fad3 46E90000 .long 0xe946
+ 46868 fad7 03 .byte 0x3
+ 46869 fad8 91 .byte 0x91
+ 46870 fad9 A07F .sleb128 -96
+ 46871 fadb 35 .uleb128 0x35
+ 46872 fadc 860E0000 .long 0xe86
+ 46873 fae0 00000000 .quad .LBB4346
+
GAS LISTING /tmp/ccjbMjHD.s page 1149
+
+
+ 46873 00000000
+ 46874 fae8 00000000 .quad .LBE4346
+ 46874 00000000
+ 46875 faf0 02 .byte 0x2
+ 46876 faf1 2302 .value 0x223
+ 46877 faf3 32 .uleb128 0x32
+ 46878 faf4 A10E0000 .long 0xea1
+ 46879 faf8 03 .byte 0x3
+ 46880 faf9 91 .byte 0x91
+ 46881 fafa B07F .sleb128 -80
+ 46882 fafc 32 .uleb128 0x32
+ 46883 fafd 970E0000 .long 0xe97
+ 46884 fb01 02 .byte 0x2
+ 46885 fb02 91 .byte 0x91
+ 46886 fb03 40 .sleb128 -64
+ 46887 fb04 00 .byte 0x0
+ 46888 fb05 00 .byte 0x0
+ 46889 fb06 36 .uleb128 0x36
+ 46890 fb07 00000000 .quad .LBB4348
+ 46890 00000000
+ 46891 fb0f 00000000 .quad .LBE4348
+ 46891 00000000
+ 46892 fb17 25FB0000 .long 0xfb25
+ 46893 fb1b 34 .uleb128 0x34
+ 46894 fb1c 1FEB0000 .long 0xeb1f
+ 46895 fb20 03 .byte 0x3
+ 46896 fb21 91 .byte 0x91
+ 46897 fb22 E06D .sleb128 -2336
+ 46898 fb24 00 .byte 0x0
+ 46899 fb25 33 .uleb128 0x33
+ 46900 fb26 00000000 .quad .LBB4349
+ 46900 00000000
+ 46901 fb2e 00000000 .quad .LBE4349
+ 46901 00000000
+ 46902 fb36 34 .uleb128 0x34
+ 46903 fb37 2BEB0000 .long 0xeb2b
+ 46904 fb3b 03 .byte 0x3
+ 46905 fb3c 91 .byte 0x91
+ 46906 fb3d D06D .sleb128 -2352
+ 46907 fb3f 00 .byte 0x0
+ 46908 fb40 00 .byte 0x0
+ 46909 fb41 00 .byte 0x0
+ 46910 fb42 25 .uleb128 0x25
+ 46911 fb43 00000000 .long .LASF388
+ 46912 fb47 02 .byte 0x2
+ 46913 fb48 5308 .value 0x853
+ 46914 fb4a 01 .byte 0x1
+ 46915 fb4b B3010000 .long 0x1b3
+ 46916 fb4f 03 .byte 0x3
+ 46917 fb50 99FB0000 .long 0xfb99
+ 46918 fb54 26 .uleb128 0x26
+ 46919 fb55 00000000 .long .LASF67
+ 46920 fb59 02 .byte 0x2
+ 46921 fb5a 5308 .value 0x853
+ 46922 fb5c B3010000 .long 0x1b3
+ 46923 fb60 26 .uleb128 0x26
+ 46924 fb61 00000000 .long .LASF65
+
GAS LISTING /tmp/ccjbMjHD.s page 1150
+
+
+ 46925 fb65 02 .byte 0x2
+ 46926 fb66 5308 .value 0x853
+ 46927 fb68 B3010000 .long 0x1b3
+ 46928 fb6c 29 .uleb128 0x29
+ 46929 fb6d 7CFB0000 .long 0xfb7c
+ 46930 fb71 28 .uleb128 0x28
+ 46931 fb72 7600 .string "v"
+ 46932 fb74 02 .byte 0x2
+ 46933 fb75 5508 .value 0x855
+ 46934 fb77 29050000 .long 0x529
+ 46935 fb7b 00 .byte 0x0
+ 46936 fb7c 29 .uleb128 0x29
+ 46937 fb7d 8CFB0000 .long 0xfb8c
+ 46938 fb81 28 .uleb128 0x28
+ 46939 fb82 7600 .string "v"
+ 46940 fb84 02 .byte 0x2
+ 46941 fb85 5908 .value 0x859
+ 46942 fb87 29050000 .long 0x529
+ 46943 fb8b 00 .byte 0x0
+ 46944 fb8c 2A .uleb128 0x2a
+ 46945 fb8d 28 .uleb128 0x28
+ 46946 fb8e 7600 .string "v"
+ 46947 fb90 02 .byte 0x2
+ 46948 fb91 5A08 .value 0x85a
+ 46949 fb93 29050000 .long 0x529
+ 46950 fb97 00 .byte 0x0
+ 46951 fb98 00 .byte 0x0
+ 46952 fb99 25 .uleb128 0x25
+ 46953 fb9a 00000000 .long .LASF389
+ 46954 fb9e 02 .byte 0x2
+ 46955 fb9f 7008 .value 0x870
+ 46956 fba1 01 .byte 0x1
+ 46957 fba2 B3010000 .long 0x1b3
+ 46958 fba6 03 .byte 0x3
+ 46959 fba7 38FC0000 .long 0xfc38
+ 46960 fbab 26 .uleb128 0x26
+ 46961 fbac 00000000 .long .LASF67
+ 46962 fbb0 02 .byte 0x2
+ 46963 fbb1 7008 .value 0x870
+ 46964 fbb3 B3010000 .long 0x1b3
+ 46965 fbb7 26 .uleb128 0x26
+ 46966 fbb8 00000000 .long .LASF65
+ 46967 fbbc 02 .byte 0x2
+ 46968 fbbd 7108 .value 0x871
+ 46969 fbbf B3010000 .long 0x1b3
+ 46970 fbc3 27 .uleb128 0x27
+ 46971 fbc4 00000000 .long .LASF380
+ 46972 fbc8 02 .byte 0x2
+ 46973 fbc9 7408 .value 0x874
+ 46974 fbcb B3010000 .long 0x1b3
+ 46975 fbcf 27 .uleb128 0x27
+ 46976 fbd0 00000000 .long .LASF381
+ 46977 fbd4 02 .byte 0x2
+ 46978 fbd5 7508 .value 0x875
+ 46979 fbd7 B3010000 .long 0x1b3
+ 46980 fbdb 29 .uleb128 0x29
+ 46981 fbdc EBFB0000 .long 0xfbeb
+
GAS LISTING /tmp/ccjbMjHD.s page 1151
+
+
+ 46982 fbe0 28 .uleb128 0x28
+ 46983 fbe1 7600 .string "v"
+ 46984 fbe3 02 .byte 0x2
+ 46985 fbe4 7B08 .value 0x87b
+ 46986 fbe6 29050000 .long 0x529
+ 46987 fbea 00 .byte 0x0
+ 46988 fbeb 29 .uleb128 0x29
+ 46989 fbec FBFB0000 .long 0xfbfb
+ 46990 fbf0 28 .uleb128 0x28
+ 46991 fbf1 7600 .string "v"
+ 46992 fbf3 02 .byte 0x2
+ 46993 fbf4 8E08 .value 0x88e
+ 46994 fbf6 29050000 .long 0x529
+ 46995 fbfa 00 .byte 0x0
+ 46996 fbfb 29 .uleb128 0x29
+ 46997 fbfc 0BFC0000 .long 0xfc0b
+ 46998 fc00 28 .uleb128 0x28
+ 46999 fc01 7600 .string "v"
+ 47000 fc03 02 .byte 0x2
+ 47001 fc04 9608 .value 0x896
+ 47002 fc06 29050000 .long 0x529
+ 47003 fc0a 00 .byte 0x0
+ 47004 fc0b 29 .uleb128 0x29
+ 47005 fc0c 1BFC0000 .long 0xfc1b
+ 47006 fc10 28 .uleb128 0x28
+ 47007 fc11 7600 .string "v"
+ 47008 fc13 02 .byte 0x2
+ 47009 fc14 9E08 .value 0x89e
+ 47010 fc16 29050000 .long 0x529
+ 47011 fc1a 00 .byte 0x0
+ 47012 fc1b 29 .uleb128 0x29
+ 47013 fc1c 2BFC0000 .long 0xfc2b
+ 47014 fc20 28 .uleb128 0x28
+ 47015 fc21 7600 .string "v"
+ 47016 fc23 02 .byte 0x2
+ 47017 fc24 A708 .value 0x8a7
+ 47018 fc26 29050000 .long 0x529
+ 47019 fc2a 00 .byte 0x0
+ 47020 fc2b 2A .uleb128 0x2a
+ 47021 fc2c 28 .uleb128 0x28
+ 47022 fc2d 7600 .string "v"
+ 47023 fc2f 02 .byte 0x2
+ 47024 fc30 A908 .value 0x8a9
+ 47025 fc32 29050000 .long 0x529
+ 47026 fc36 00 .byte 0x0
+ 47027 fc37 00 .byte 0x0
+ 47028 fc38 25 .uleb128 0x25
+ 47029 fc39 00000000 .long .LASF390
+ 47030 fc3d 02 .byte 0x2
+ 47031 fc3e 8603 .value 0x386
+ 47032 fc40 01 .byte 0x1
+ 47033 fc41 B3010000 .long 0x1b3
+ 47034 fc45 03 .byte 0x3
+ 47035 fc46 57FC0000 .long 0xfc57
+ 47036 fc4a 26 .uleb128 0x26
+ 47037 fc4b 00000000 .long .LASF67
+ 47038 fc4f 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1152
+
+
+ 47039 fc50 8603 .value 0x386
+ 47040 fc52 B3010000 .long 0x1b3
+ 47041 fc56 00 .byte 0x0
+ 47042 fc57 25 .uleb128 0x25
+ 47043 fc58 00000000 .long .LASF391
+ 47044 fc5c 02 .byte 0x2
+ 47045 fc5d 5E02 .value 0x25e
+ 47046 fc5f 01 .byte 0x1
+ 47047 fc60 B3010000 .long 0x1b3
+ 47048 fc64 03 .byte 0x3
+ 47049 fc65 93FC0000 .long 0xfc93
+ 47050 fc69 26 .uleb128 0x26
+ 47051 fc6a 00000000 .long .LASF67
+ 47052 fc6e 02 .byte 0x2
+ 47053 fc6f 5E02 .value 0x25e
+ 47054 fc71 B3010000 .long 0x1b3
+ 47055 fc75 2C .uleb128 0x2c
+ 47056 fc76 00000000 .long .LASF392
+ 47057 fc7a 02 .byte 0x2
+ 47058 fc7b 6002 .value 0x260
+ 47059 fc7d 93FC0000 .long 0xfc93
+ 47060 fc81 10 .byte 0x10
+ 47061 fc82 00 .byte 0x0
+ 47062 fc83 0D .byte 0xd
+ 47063 fc84 0A .byte 0xa
+ 47064 fc85 07 .byte 0x7
+ 47065 fc86 04 .byte 0x4
+ 47066 fc87 01 .byte 0x1
+ 47067 fc88 0E .byte 0xe
+ 47068 fc89 0B .byte 0xb
+ 47069 fc8a 08 .byte 0x8
+ 47070 fc8b 05 .byte 0x5
+ 47071 fc8c 02 .byte 0x2
+ 47072 fc8d 0F .byte 0xf
+ 47073 fc8e 0C .byte 0xc
+ 47074 fc8f 09 .byte 0x9
+ 47075 fc90 06 .byte 0x6
+ 47076 fc91 03 .byte 0x3
+ 47077 fc92 00 .byte 0x0
+ 47078 fc93 06 .uleb128 0x6
+ 47079 fc94 62040000 .long 0x462
+ 47080 fc98 25 .uleb128 0x25
+ 47081 fc99 00000000 .long .LASF393
+ 47082 fc9d 02 .byte 0x2
+ 47083 fc9e BA08 .value 0x8ba
+ 47084 fca0 01 .byte 0x1
+ 47085 fca1 B3010000 .long 0x1b3
+ 47086 fca5 03 .byte 0x3
+ 47087 fca6 0FFD0000 .long 0xfd0f
+ 47088 fcaa 26 .uleb128 0x26
+ 47089 fcab 00000000 .long .LASF67
+ 47090 fcaf 02 .byte 0x2
+ 47091 fcb0 BA08 .value 0x8ba
+ 47092 fcb2 B3010000 .long 0x1b3
+ 47093 fcb6 26 .uleb128 0x26
+ 47094 fcb7 00000000 .long .LASF65
+ 47095 fcbb 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1153
+
+
+ 47096 fcbc BB08 .value 0x8bb
+ 47097 fcbe B3010000 .long 0x1b3
+ 47098 fcc2 29 .uleb128 0x29
+ 47099 fcc3 D2FC0000 .long 0xfcd2
+ 47100 fcc7 28 .uleb128 0x28
+ 47101 fcc8 7600 .string "v"
+ 47102 fcca 02 .byte 0x2
+ 47103 fccb BD08 .value 0x8bd
+ 47104 fccd 29050000 .long 0x529
+ 47105 fcd1 00 .byte 0x0
+ 47106 fcd2 29 .uleb128 0x29
+ 47107 fcd3 E2FC0000 .long 0xfce2
+ 47108 fcd7 28 .uleb128 0x28
+ 47109 fcd8 7600 .string "v"
+ 47110 fcda 02 .byte 0x2
+ 47111 fcdb C508 .value 0x8c5
+ 47112 fcdd 29050000 .long 0x529
+ 47113 fce1 00 .byte 0x0
+ 47114 fce2 29 .uleb128 0x29
+ 47115 fce3 F2FC0000 .long 0xfcf2
+ 47116 fce7 28 .uleb128 0x28
+ 47117 fce8 7600 .string "v"
+ 47118 fcea 02 .byte 0x2
+ 47119 fceb C908 .value 0x8c9
+ 47120 fced 29050000 .long 0x529
+ 47121 fcf1 00 .byte 0x0
+ 47122 fcf2 29 .uleb128 0x29
+ 47123 fcf3 02FD0000 .long 0xfd02
+ 47124 fcf7 28 .uleb128 0x28
+ 47125 fcf8 7600 .string "v"
+ 47126 fcfa 02 .byte 0x2
+ 47127 fcfb CD08 .value 0x8cd
+ 47128 fcfd 29050000 .long 0x529
+ 47129 fd01 00 .byte 0x0
+ 47130 fd02 2A .uleb128 0x2a
+ 47131 fd03 28 .uleb128 0x28
+ 47132 fd04 7600 .string "v"
+ 47133 fd06 02 .byte 0x2
+ 47134 fd07 CE08 .value 0x8ce
+ 47135 fd09 29050000 .long 0x529
+ 47136 fd0d 00 .byte 0x0
+ 47137 fd0e 00 .byte 0x0
+ 47138 fd0f 39 .uleb128 0x39
+ 47139 fd10 00000000 .long .LASF394
+ 47140 fd14 02 .byte 0x2
+ 47141 fd15 DD08 .value 0x8dd
+ 47142 fd17 01 .byte 0x1
+ 47143 fd18 B3010000 .long 0x1b3
+ 47144 fd1c 00000000 .quad .LFB659
+ 47144 00000000
+ 47145 fd24 00000000 .quad .LFE659
+ 47145 00000000
+ 47146 fd2c 00000000 .long .LLST9
+ 47147 fd30 E8120100 .long 0x112e8
+ 47148 fd34 2E .uleb128 0x2e
+ 47149 fd35 00000000 .long .LASF67
+ 47150 fd39 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1154
+
+
+ 47151 fd3a DD08 .value 0x8dd
+ 47152 fd3c B3010000 .long 0x1b3
+ 47153 fd40 03 .byte 0x3
+ 47154 fd41 91 .byte 0x91
+ 47155 fd42 D064 .sleb128 -3504
+ 47156 fd44 2F .uleb128 0x2f
+ 47157 fd45 6B657900 .string "key"
+ 47158 fd49 02 .byte 0x2
+ 47159 fd4a DD08 .value 0x8dd
+ 47160 fd4c 440D0000 .long 0xd44
+ 47161 fd50 03 .byte 0x3
+ 47162 fd51 91 .byte 0x91
+ 47163 fd52 C864 .sleb128 -3512
+ 47164 fd54 2F .uleb128 0x2f
+ 47165 fd55 4E7200 .string "Nr"
+ 47166 fd58 02 .byte 0x2
+ 47167 fd59 DE08 .value 0x8de
+ 47168 fd5b 78000000 .long 0x78
+ 47169 fd5f 03 .byte 0x3
+ 47170 fd60 91 .byte 0x91
+ 47171 fd61 C464 .sleb128 -3516
+ 47172 fd63 37 .uleb128 0x37
+ 47173 fd64 697800 .string "ix"
+ 47174 fd67 02 .byte 0x2
+ 47175 fd68 E008 .value 0x8e0
+ 47176 fd6a 78000000 .long 0x78
+ 47177 fd6e 03 .byte 0x3
+ 47178 fd6f 91 .byte 0x91
+ 47179 fd70 DC67 .sleb128 -3108
+ 47180 fd72 31 .uleb128 0x31
+ 47181 fd73 42FB0000 .long 0xfb42
+ 47182 fd77 00000000 .quad .LBB4551
+ 47182 00000000
+ 47183 fd7f 00000000 .quad .LBE4551
+ 47183 00000000
+ 47184 fd87 02 .byte 0x2
+ 47185 fd88 E208 .value 0x8e2
+ 47186 fd8a 54FE0000 .long 0xfe54
+ 47187 fd8e 32 .uleb128 0x32
+ 47188 fd8f 60FB0000 .long 0xfb60
+ 47189 fd93 03 .byte 0x3
+ 47190 fd94 91 .byte 0x91
+ 47191 fd95 E067 .sleb128 -3104
+ 47192 fd97 32 .uleb128 0x32
+ 47193 fd98 54FB0000 .long 0xfb54
+ 47194 fd9c 03 .byte 0x3
+ 47195 fd9d 91 .byte 0x91
+ 47196 fd9e F067 .sleb128 -3088
+ 47197 fda0 36 .uleb128 0x36
+ 47198 fda1 00000000 .quad .LBB4553
+ 47198 00000000
+ 47199 fda9 00000000 .quad .LBE4553
+ 47199 00000000
+ 47200 fdb1 BFFD0000 .long 0xfdbf
+ 47201 fdb5 34 .uleb128 0x34
+ 47202 fdb6 71FB0000 .long 0xfb71
+ 47203 fdba 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1155
+
+
+ 47204 fdbb 91 .byte 0x91
+ 47205 fdbc 8065 .sleb128 -3456
+ 47206 fdbe 00 .byte 0x0
+ 47207 fdbf 31 .uleb128 0x31
+ 47208 fdc0 34E90000 .long 0xe934
+ 47209 fdc4 00000000 .quad .LBB4554
+ 47209 00000000
+ 47210 fdcc 00000000 .quad .LBE4554
+ 47210 00000000
+ 47211 fdd4 02 .byte 0x2
+ 47212 fdd5 5708 .value 0x857
+ 47213 fdd7 19FE0000 .long 0xfe19
+ 47214 fddb 32 .uleb128 0x32
+ 47215 fddc 52E90000 .long 0xe952
+ 47216 fde0 03 .byte 0x3
+ 47217 fde1 91 .byte 0x91
+ 47218 fde2 8068 .sleb128 -3072
+ 47219 fde4 32 .uleb128 0x32
+ 47220 fde5 46E90000 .long 0xe946
+ 47221 fde9 03 .byte 0x3
+ 47222 fdea 91 .byte 0x91
+ 47223 fdeb 9068 .sleb128 -3056
+ 47224 fded 35 .uleb128 0x35
+ 47225 fdee 860E0000 .long 0xe86
+ 47226 fdf2 00000000 .quad .LBB4556
+ 47226 00000000
+ 47227 fdfa 00000000 .quad .LBE4556
+ 47227 00000000
+ 47228 fe02 02 .byte 0x2
+ 47229 fe03 2302 .value 0x223
+ 47230 fe05 32 .uleb128 0x32
+ 47231 fe06 A10E0000 .long 0xea1
+ 47232 fe0a 03 .byte 0x3
+ 47233 fe0b 91 .byte 0x91
+ 47234 fe0c A068 .sleb128 -3040
+ 47235 fe0e 32 .uleb128 0x32
+ 47236 fe0f 970E0000 .long 0xe97
+ 47237 fe13 03 .byte 0x3
+ 47238 fe14 91 .byte 0x91
+ 47239 fe15 B068 .sleb128 -3024
+ 47240 fe17 00 .byte 0x0
+ 47241 fe18 00 .byte 0x0
+ 47242 fe19 36 .uleb128 0x36
+ 47243 fe1a 00000000 .quad .LBB4558
+ 47243 00000000
+ 47244 fe22 00000000 .quad .LBE4558
+ 47244 00000000
+ 47245 fe2a 38FE0000 .long 0xfe38
+ 47246 fe2e 34 .uleb128 0x34
+ 47247 fe2f 81FB0000 .long 0xfb81
+ 47248 fe33 03 .byte 0x3
+ 47249 fe34 91 .byte 0x91
+ 47250 fe35 F064 .sleb128 -3472
+ 47251 fe37 00 .byte 0x0
+ 47252 fe38 33 .uleb128 0x33
+ 47253 fe39 00000000 .quad .LBB4559
+ 47253 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1156
+
+
+ 47254 fe41 00000000 .quad .LBE4559
+ 47254 00000000
+ 47255 fe49 34 .uleb128 0x34
+ 47256 fe4a 8DFB0000 .long 0xfb8d
+ 47257 fe4e 03 .byte 0x3
+ 47258 fe4f 91 .byte 0x91
+ 47259 fe50 E064 .sleb128 -3488
+ 47260 fe52 00 .byte 0x0
+ 47261 fe53 00 .byte 0x0
+ 47262 fe54 31 .uleb128 0x31
+ 47263 fe55 99FB0000 .long 0xfb99
+ 47264 fe59 00000000 .quad .LBB4560
+ 47264 00000000
+ 47265 fe61 00000000 .quad .LBE4560
+ 47265 00000000
+ 47266 fe69 02 .byte 0x2
+ 47267 fe6a E508 .value 0x8e5
+ 47268 fe6c A60E0100 .long 0x10ea6
+ 47269 fe70 32 .uleb128 0x32
+ 47270 fe71 B7FB0000 .long 0xfbb7
+ 47271 fe75 03 .byte 0x3
+ 47272 fe76 91 .byte 0x91
+ 47273 fe77 C068 .sleb128 -3008
+ 47274 fe79 32 .uleb128 0x32
+ 47275 fe7a ABFB0000 .long 0xfbab
+ 47276 fe7e 03 .byte 0x3
+ 47277 fe7f 91 .byte 0x91
+ 47278 fe80 D068 .sleb128 -2992
+ 47279 fe82 33 .uleb128 0x33
+ 47280 fe83 00000000 .quad .LBB4561
+ 47280 00000000
+ 47281 fe8b 00000000 .quad .LBE4561
+ 47281 00000000
+ 47282 fe93 34 .uleb128 0x34
+ 47283 fe94 C3FB0000 .long 0xfbc3
+ 47284 fe98 03 .byte 0x3
+ 47285 fe99 91 .byte 0x91
+ 47286 fe9a F068 .sleb128 -2960
+ 47287 fe9c 34 .uleb128 0x34
+ 47288 fe9d CFFB0000 .long 0xfbcf
+ 47289 fea1 03 .byte 0x3
+ 47290 fea2 91 .byte 0x91
+ 47291 fea3 E068 .sleb128 -2976
+ 47292 fea5 36 .uleb128 0x36
+ 47293 fea6 00000000 .quad .LBB4562
+ 47293 00000000
+ 47294 feae 00000000 .quad .LBE4562
+ 47294 00000000
+ 47295 feb6 C4FE0000 .long 0xfec4
+ 47296 feba 34 .uleb128 0x34
+ 47297 febb E0FB0000 .long 0xfbe0
+ 47298 febf 03 .byte 0x3
+ 47299 fec0 91 .byte 0x91
+ 47300 fec1 E065 .sleb128 -3360
+ 47301 fec3 00 .byte 0x0
+ 47302 fec4 31 .uleb128 0x31
+ 47303 fec5 38FC0000 .long 0xfc38
+
GAS LISTING /tmp/ccjbMjHD.s page 1157
+
+
+ 47304 fec9 00000000 .quad .LBB4563
+ 47304 00000000
+ 47305 fed1 00000000 .quad .LBE4563
+ 47305 00000000
+ 47306 fed9 02 .byte 0x2
+ 47307 feda 8908 .value 0x889
+ 47308 fedc 4D010100 .long 0x1014d
+ 47309 fee0 32 .uleb128 0x32
+ 47310 fee1 4AFC0000 .long 0xfc4a
+ 47311 fee5 03 .byte 0x3
+ 47312 fee6 91 .byte 0x91
+ 47313 fee7 8069 .sleb128 -2944
+ 47314 fee9 35 .uleb128 0x35
+ 47315 feea E00C0000 .long 0xce0
+ 47316 feee 00000000 .quad .LBB4565
+ 47316 00000000
+ 47317 fef6 00000000 .quad .LBE4565
+ 47317 00000000
+ 47318 fefe 02 .byte 0x2
+ 47319 feff 8803 .value 0x388
+ 47320 ff01 32 .uleb128 0x32
+ 47321 ff02 FE0C0000 .long 0xcfe
+ 47322 ff06 03 .byte 0x3
+ 47323 ff07 91 .byte 0x91
+ 47324 ff08 9869 .sleb128 -2920
+ 47325 ff0a 32 .uleb128 0x32
+ 47326 ff0b F20C0000 .long 0xcf2
+ 47327 ff0f 03 .byte 0x3
+ 47328 ff10 91 .byte 0x91
+ 47329 ff11 A069 .sleb128 -2912
+ 47330 ff13 33 .uleb128 0x33
+ 47331 ff14 00000000 .quad .LBB4566
+ 47331 00000000
+ 47332 ff1c 00000000 .quad .LBE4566
+ 47332 00000000
+ 47333 ff24 34 .uleb128 0x34
+ 47334 ff25 0A0D0000 .long 0xd0a
+ 47335 ff29 03 .byte 0x3
+ 47336 ff2a 91 .byte 0x91
+ 47337 ff2b F069 .sleb128 -2832
+ 47338 ff2d 34 .uleb128 0x34
+ 47339 ff2e 150D0000 .long 0xd15
+ 47340 ff32 03 .byte 0x3
+ 47341 ff33 91 .byte 0x91
+ 47342 ff34 E069 .sleb128 -2848
+ 47343 ff36 34 .uleb128 0x34
+ 47344 ff37 200D0000 .long 0xd20
+ 47345 ff3b 03 .byte 0x3
+ 47346 ff3c 91 .byte 0x91
+ 47347 ff3d D069 .sleb128 -2864
+ 47348 ff3f 34 .uleb128 0x34
+ 47349 ff40 2C0D0000 .long 0xd2c
+ 47350 ff44 03 .byte 0x3
+ 47351 ff45 91 .byte 0x91
+ 47352 ff46 C069 .sleb128 -2880
+ 47353 ff48 34 .uleb128 0x34
+ 47354 ff49 380D0000 .long 0xd38
+
GAS LISTING /tmp/ccjbMjHD.s page 1158
+
+
+ 47355 ff4d 03 .byte 0x3
+ 47356 ff4e 91 .byte 0x91
+ 47357 ff4f BC69 .sleb128 -2884
+ 47358 ff51 31 .uleb128 0x31
+ 47359 ff52 4F0D0000 .long 0xd4f
+ 47360 ff56 00000000 .quad .LBB4567
+ 47360 00000000
+ 47361 ff5e 00000000 .quad .LBE4567
+ 47361 00000000
+ 47362 ff66 02 .byte 0x2
+ 47363 ff67 5603 .value 0x356
+ 47364 ff69 80FF0000 .long 0xff80
+ 47365 ff6d 32 .uleb128 0x32
+ 47366 ff6e 6A0D0000 .long 0xd6a
+ 47367 ff72 03 .byte 0x3
+ 47368 ff73 91 .byte 0x91
+ 47369 ff74 806A .sleb128 -2816
+ 47370 ff76 32 .uleb128 0x32
+ 47371 ff77 600D0000 .long 0xd60
+ 47372 ff7b 03 .byte 0x3
+ 47373 ff7c 91 .byte 0x91
+ 47374 ff7d 906A .sleb128 -2800
+ 47375 ff7f 00 .byte 0x0
+ 47376 ff80 31 .uleb128 0x31
+ 47377 ff81 750D0000 .long 0xd75
+ 47378 ff85 00000000 .quad .LBB4569
+ 47378 00000000
+ 47379 ff8d 00000000 .quad .LBE4569
+ 47379 00000000
+ 47380 ff95 02 .byte 0x2
+ 47381 ff96 5903 .value 0x359
+ 47382 ff98 AFFF0000 .long 0xffaf
+ 47383 ff9c 32 .uleb128 0x32
+ 47384 ff9d 930D0000 .long 0xd93
+ 47385 ffa1 03 .byte 0x3
+ 47386 ffa2 91 .byte 0x91
+ 47387 ffa3 AC6A .sleb128 -2772
+ 47388 ffa5 32 .uleb128 0x32
+ 47389 ffa6 870D0000 .long 0xd87
+ 47390 ffaa 03 .byte 0x3
+ 47391 ffab 91 .byte 0x91
+ 47392 ffac B06A .sleb128 -2768
+ 47393 ffae 00 .byte 0x0
+ 47394 ffaf 31 .uleb128 0x31
+ 47395 ffb0 4F0D0000 .long 0xd4f
+ 47396 ffb4 00000000 .quad .LBB4571
+ 47396 00000000
+ 47397 ffbc 00000000 .quad .LBE4571
+ 47397 00000000
+ 47398 ffc4 02 .byte 0x2
+ 47399 ffc5 5B03 .value 0x35b
+ 47400 ffc7 DEFF0000 .long 0xffde
+ 47401 ffcb 32 .uleb128 0x32
+ 47402 ffcc 6A0D0000 .long 0xd6a
+ 47403 ffd0 03 .byte 0x3
+ 47404 ffd1 91 .byte 0x91
+ 47405 ffd2 C06A .sleb128 -2752
+
GAS LISTING /tmp/ccjbMjHD.s page 1159
+
+
+ 47406 ffd4 32 .uleb128 0x32
+ 47407 ffd5 600D0000 .long 0xd60
+ 47408 ffd9 03 .byte 0x3
+ 47409 ffda 91 .byte 0x91
+ 47410 ffdb D06A .sleb128 -2736
+ 47411 ffdd 00 .byte 0x0
+ 47412 ffde 31 .uleb128 0x31
+ 47413 ffdf A00D0000 .long 0xda0
+ 47414 ffe3 00000000 .quad .LBB4573
+ 47414 00000000
+ 47415 ffeb 00000000 .quad .LBE4573
+ 47415 00000000
+ 47416 fff3 02 .byte 0x2
+ 47417 fff4 6403 .value 0x364
+ 47418 fff6 38000100 .long 0x10038
+ 47419 fffa 32 .uleb128 0x32
+ 47420 fffb BE0D0000 .long 0xdbe
+ 47421 ffff 03 .byte 0x3
+ 47422 10000 91 .byte 0x91
+ 47423 10001 E06A .sleb128 -2720
+ 47424 10003 32 .uleb128 0x32
+ 47425 10004 B20D0000 .long 0xdb2
+ 47426 10008 03 .byte 0x3
+ 47427 10009 91 .byte 0x91
+ 47428 1000a F06A .sleb128 -2704
+ 47429 1000c 35 .uleb128 0x35
+ 47430 1000d CB0D0000 .long 0xdcb
+ 47431 10011 00000000 .quad .LBB4575
+ 47431 00000000
+ 47432 10019 00000000 .quad .LBE4575
+ 47432 00000000
+ 47433 10021 02 .byte 0x2
+ 47434 10022 7501 .value 0x175
+ 47435 10024 32 .uleb128 0x32
+ 47436 10025 E90D0000 .long 0xde9
+ 47437 10029 03 .byte 0x3
+ 47438 1002a 91 .byte 0x91
+ 47439 1002b 806B .sleb128 -2688
+ 47440 1002d 32 .uleb128 0x32
+ 47441 1002e DD0D0000 .long 0xddd
+ 47442 10032 03 .byte 0x3
+ 47443 10033 91 .byte 0x91
+ 47444 10034 906B .sleb128 -2672
+ 47445 10036 00 .byte 0x0
+ 47446 10037 00 .byte 0x0
+ 47447 10038 31 .uleb128 0x31
+ 47448 10039 FB0D0000 .long 0xdfb
+ 47449 1003d 00000000 .quad .LBB4577
+ 47449 00000000
+ 47450 10045 00000000 .quad .LBE4577
+ 47450 00000000
+ 47451 1004d 02 .byte 0x2
+ 47452 1004e 6603 .value 0x366
+ 47453 10050 67000100 .long 0x10067
+ 47454 10054 32 .uleb128 0x32
+ 47455 10055 160E0000 .long 0xe16
+ 47456 10059 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1160
+
+
+ 47457 1005a 91 .byte 0x91
+ 47458 1005b A06B .sleb128 -2656
+ 47459 1005d 32 .uleb128 0x32
+ 47460 1005e 0C0E0000 .long 0xe0c
+ 47461 10062 03 .byte 0x3
+ 47462 10063 91 .byte 0x91
+ 47463 10064 B06B .sleb128 -2640
+ 47464 10066 00 .byte 0x0
+ 47465 10067 31 .uleb128 0x31
+ 47466 10068 A00D0000 .long 0xda0
+ 47467 1006c 00000000 .quad .LBB4579
+ 47467 00000000
+ 47468 10074 00000000 .quad .LBE4579
+ 47468 00000000
+ 47469 1007c 02 .byte 0x2
+ 47470 1007d 6803 .value 0x368
+ 47471 1007f C1000100 .long 0x100c1
+ 47472 10083 32 .uleb128 0x32
+ 47473 10084 BE0D0000 .long 0xdbe
+ 47474 10088 03 .byte 0x3
+ 47475 10089 91 .byte 0x91
+ 47476 1008a C06B .sleb128 -2624
+ 47477 1008c 32 .uleb128 0x32
+ 47478 1008d B20D0000 .long 0xdb2
+ 47479 10091 03 .byte 0x3
+ 47480 10092 91 .byte 0x91
+ 47481 10093 D06B .sleb128 -2608
+ 47482 10095 35 .uleb128 0x35
+ 47483 10096 CB0D0000 .long 0xdcb
+ 47484 1009a 00000000 .quad .LBB4581
+ 47484 00000000
+ 47485 100a2 00000000 .quad .LBE4581
+ 47485 00000000
+ 47486 100aa 02 .byte 0x2
+ 47487 100ab 7501 .value 0x175
+ 47488 100ad 32 .uleb128 0x32
+ 47489 100ae E90D0000 .long 0xde9
+ 47490 100b2 03 .byte 0x3
+ 47491 100b3 91 .byte 0x91
+ 47492 100b4 E06B .sleb128 -2592
+ 47493 100b6 32 .uleb128 0x32
+ 47494 100b7 DD0D0000 .long 0xddd
+ 47495 100bb 03 .byte 0x3
+ 47496 100bc 91 .byte 0x91
+ 47497 100bd F06B .sleb128 -2576
+ 47498 100bf 00 .byte 0x0
+ 47499 100c0 00 .byte 0x0
+ 47500 100c1 31 .uleb128 0x31
+ 47501 100c2 FB0D0000 .long 0xdfb
+ 47502 100c6 00000000 .quad .LBB4583
+ 47502 00000000
+ 47503 100ce 00000000 .quad .LBE4583
+ 47503 00000000
+ 47504 100d6 02 .byte 0x2
+ 47505 100d7 6A03 .value 0x36a
+ 47506 100d9 F0000100 .long 0x100f0
+ 47507 100dd 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 1161
+
+
+ 47508 100de 160E0000 .long 0xe16
+ 47509 100e2 03 .byte 0x3
+ 47510 100e3 91 .byte 0x91
+ 47511 100e4 806C .sleb128 -2560
+ 47512 100e6 32 .uleb128 0x32
+ 47513 100e7 0C0E0000 .long 0xe0c
+ 47514 100eb 03 .byte 0x3
+ 47515 100ec 91 .byte 0x91
+ 47516 100ed 906C .sleb128 -2544
+ 47517 100ef 00 .byte 0x0
+ 47518 100f0 31 .uleb128 0x31
+ 47519 100f1 210E0000 .long 0xe21
+ 47520 100f5 00000000 .quad .LBB4585
+ 47520 00000000
+ 47521 100fd 00000000 .quad .LBE4585
+ 47521 00000000
+ 47522 10105 02 .byte 0x2
+ 47523 10106 6C03 .value 0x36c
+ 47524 10108 1F010100 .long 0x1011f
+ 47525 1010c 32 .uleb128 0x32
+ 47526 1010d 3E0E0000 .long 0xe3e
+ 47527 10111 03 .byte 0x3
+ 47528 10112 91 .byte 0x91
+ 47529 10113 A06C .sleb128 -2528
+ 47530 10115 32 .uleb128 0x32
+ 47531 10116 330E0000 .long 0xe33
+ 47532 1011a 03 .byte 0x3
+ 47533 1011b 91 .byte 0x91
+ 47534 1011c B06C .sleb128 -2512
+ 47535 1011e 00 .byte 0x0
+ 47536 1011f 35 .uleb128 0x35
+ 47537 10120 4F0D0000 .long 0xd4f
+ 47538 10124 00000000 .quad .LBB4587
+ 47538 00000000
+ 47539 1012c 00000000 .quad .LBE4587
+ 47539 00000000
+ 47540 10134 02 .byte 0x2
+ 47541 10135 6E03 .value 0x36e
+ 47542 10137 32 .uleb128 0x32
+ 47543 10138 6A0D0000 .long 0xd6a
+ 47544 1013c 03 .byte 0x3
+ 47545 1013d 91 .byte 0x91
+ 47546 1013e C06C .sleb128 -2496
+ 47547 10140 32 .uleb128 0x32
+ 47548 10141 600D0000 .long 0xd60
+ 47549 10145 03 .byte 0x3
+ 47550 10146 91 .byte 0x91
+ 47551 10147 D06C .sleb128 -2480
+ 47552 10149 00 .byte 0x0
+ 47553 1014a 00 .byte 0x0
+ 47554 1014b 00 .byte 0x0
+ 47555 1014c 00 .byte 0x0
+ 47556 1014d 36 .uleb128 0x36
+ 47557 1014e 00000000 .quad .LBB4589
+ 47557 00000000
+ 47558 10156 00000000 .quad .LBE4589
+ 47558 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1162
+
+
+ 47559 1015e 6C010100 .long 0x1016c
+ 47560 10162 34 .uleb128 0x34
+ 47561 10163 F0FB0000 .long 0xfbf0
+ 47562 10167 03 .byte 0x3
+ 47563 10168 91 .byte 0x91
+ 47564 10169 D065 .sleb128 -3376
+ 47565 1016b 00 .byte 0x0
+ 47566 1016c 31 .uleb128 0x31
+ 47567 1016d 57FC0000 .long 0xfc57
+ 47568 10171 00000000 .quad .LBB4590
+ 47568 00000000
+ 47569 10179 00000000 .quad .LBE4590
+ 47569 00000000
+ 47570 10181 02 .byte 0x2
+ 47571 10182 9108 .value 0x891
+ 47572 10184 09020100 .long 0x10209
+ 47573 10188 32 .uleb128 0x32
+ 47574 10189 69FC0000 .long 0xfc69
+ 47575 1018d 03 .byte 0x3
+ 47576 1018e 91 .byte 0x91
+ 47577 1018f E06C .sleb128 -2464
+ 47578 10191 33 .uleb128 0x33
+ 47579 10192 00000000 .quad .LBB4591
+ 47579 00000000
+ 47580 1019a 00000000 .quad .LBE4591
+ 47580 00000000
+ 47581 101a2 34 .uleb128 0x34
+ 47582 101a3 75FC0000 .long 0xfc75
+ 47583 101a7 09 .byte 0x9
+ 47584 101a8 03 .byte 0x3
+ 47585 101a9 00000000 .quad InvShiftRowTable.7367
+ 47585 00000000
+ 47586 101b1 35 .uleb128 0x35
+ 47587 101b2 A00D0000 .long 0xda0
+ 47588 101b6 00000000 .quad .LBB4592
+ 47588 00000000
+ 47589 101be 00000000 .quad .LBE4592
+ 47589 00000000
+ 47590 101c6 02 .byte 0x2
+ 47591 101c7 6402 .value 0x264
+ 47592 101c9 32 .uleb128 0x32
+ 47593 101ca BE0D0000 .long 0xdbe
+ 47594 101ce 03 .byte 0x3
+ 47595 101cf 91 .byte 0x91
+ 47596 101d0 F06C .sleb128 -2448
+ 47597 101d2 32 .uleb128 0x32
+ 47598 101d3 B20D0000 .long 0xdb2
+ 47599 101d7 03 .byte 0x3
+ 47600 101d8 91 .byte 0x91
+ 47601 101d9 806D .sleb128 -2432
+ 47602 101db 35 .uleb128 0x35
+ 47603 101dc CB0D0000 .long 0xdcb
+ 47604 101e0 00000000 .quad .LBB4594
+ 47604 00000000
+ 47605 101e8 00000000 .quad .LBE4594
+ 47605 00000000
+ 47606 101f0 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1163
+
+
+ 47607 101f1 7501 .value 0x175
+ 47608 101f3 32 .uleb128 0x32
+ 47609 101f4 E90D0000 .long 0xde9
+ 47610 101f8 03 .byte 0x3
+ 47611 101f9 91 .byte 0x91
+ 47612 101fa 906D .sleb128 -2416
+ 47613 101fc 32 .uleb128 0x32
+ 47614 101fd DD0D0000 .long 0xddd
+ 47615 10201 03 .byte 0x3
+ 47616 10202 91 .byte 0x91
+ 47617 10203 A06D .sleb128 -2400
+ 47618 10205 00 .byte 0x0
+ 47619 10206 00 .byte 0x0
+ 47620 10207 00 .byte 0x0
+ 47621 10208 00 .byte 0x0
+ 47622 10209 36 .uleb128 0x36
+ 47623 1020a 00000000 .quad .LBB4596
+ 47623 00000000
+ 47624 10212 00000000 .quad .LBE4596
+ 47624 00000000
+ 47625 1021a 28020100 .long 0x10228
+ 47626 1021e 34 .uleb128 0x34
+ 47627 1021f 00FC0000 .long 0xfc00
+ 47628 10223 03 .byte 0x3
+ 47629 10224 91 .byte 0x91
+ 47630 10225 C065 .sleb128 -3392
+ 47631 10227 00 .byte 0x0
+ 47632 10228 31 .uleb128 0x31
+ 47633 10229 0AD90000 .long 0xd90a
+ 47634 1022d 00000000 .quad .LBB4597
+ 47634 00000000
+ 47635 10235 00000000 .quad .LBE4597
+ 47635 00000000
+ 47636 1023d 02 .byte 0x2
+ 47637 1023e 9908 .value 0x899
+ 47638 10240 F10D0100 .long 0x10df1
+ 47639 10244 32 .uleb128 0x32
+ 47640 10245 1CD90000 .long 0xd91c
+ 47641 10249 03 .byte 0x3
+ 47642 1024a 91 .byte 0x91
+ 47643 1024b B06D .sleb128 -2384
+ 47644 1024d 33 .uleb128 0x33
+ 47645 1024e 00000000 .quad .LBB4598
+ 47645 00000000
+ 47646 10256 00000000 .quad .LBE4598
+ 47646 00000000
+ 47647 1025e 34 .uleb128 0x34
+ 47648 1025f 28D90000 .long 0xd928
+ 47649 10263 03 .byte 0x3
+ 47650 10264 76 .byte 0x76
+ 47651 10265 C064 .sleb128 -3520
+ 47652 10267 34 .uleb128 0x34
+ 47653 10268 33D90000 .long 0xd933
+ 47654 1026c 03 .byte 0x3
+ 47655 1026d 76 .byte 0x76
+ 47656 1026e B064 .sleb128 -3536
+ 47657 10270 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 1164
+
+
+ 47658 10271 3ED90000 .long 0xd93e
+ 47659 10275 03 .byte 0x3
+ 47660 10276 76 .byte 0x76
+ 47661 10277 A064 .sleb128 -3552
+ 47662 10279 34 .uleb128 0x34
+ 47663 1027a 49D90000 .long 0xd949
+ 47664 1027e 03 .byte 0x3
+ 47665 1027f 76 .byte 0x76
+ 47666 10280 9064 .sleb128 -3568
+ 47667 10282 34 .uleb128 0x34
+ 47668 10283 54D90000 .long 0xd954
+ 47669 10287 03 .byte 0x3
+ 47670 10288 76 .byte 0x76
+ 47671 10289 8064 .sleb128 -3584
+ 47672 1028b 34 .uleb128 0x34
+ 47673 1028c 5FD90000 .long 0xd95f
+ 47674 10290 03 .byte 0x3
+ 47675 10291 76 .byte 0x76
+ 47676 10292 F063 .sleb128 -3600
+ 47677 10294 31 .uleb128 0x31
+ 47678 10295 4A0E0000 .long 0xe4a
+ 47679 10299 00000000 .quad .LBB4599
+ 47679 00000000
+ 47680 102a1 00000000 .quad .LBE4599
+ 47680 00000000
+ 47681 102a9 02 .byte 0x2
+ 47682 102aa 5204 .value 0x452
+ 47683 102ac 31030100 .long 0x10331
+ 47684 102b0 32 .uleb128 0x32
+ 47685 102b1 5C0E0000 .long 0xe5c
+ 47686 102b5 03 .byte 0x3
+ 47687 102b6 91 .byte 0x91
+ 47688 102b7 C06D .sleb128 -2368
+ 47689 102b9 33 .uleb128 0x33
+ 47690 102ba 00000000 .quad .LBB4600
+ 47690 00000000
+ 47691 102c2 00000000 .quad .LBE4600
+ 47691 00000000
+ 47692 102ca 34 .uleb128 0x34
+ 47693 102cb 680E0000 .long 0xe68
+ 47694 102cf 09 .byte 0x9
+ 47695 102d0 03 .byte 0x3
+ 47696 102d1 00000000 .quad ShiftRowTable.7385
+ 47696 00000000
+ 47697 102d9 35 .uleb128 0x35
+ 47698 102da A00D0000 .long 0xda0
+ 47699 102de 00000000 .quad .LBB4601
+ 47699 00000000
+ 47700 102e6 00000000 .quad .LBE4601
+ 47700 00000000
+ 47701 102ee 02 .byte 0x2
+ 47702 102ef 9B02 .value 0x29b
+ 47703 102f1 32 .uleb128 0x32
+ 47704 102f2 BE0D0000 .long 0xdbe
+ 47705 102f6 03 .byte 0x3
+ 47706 102f7 91 .byte 0x91
+ 47707 102f8 D06D .sleb128 -2352
+
GAS LISTING /tmp/ccjbMjHD.s page 1165
+
+
+ 47708 102fa 32 .uleb128 0x32
+ 47709 102fb B20D0000 .long 0xdb2
+ 47710 102ff 03 .byte 0x3
+ 47711 10300 91 .byte 0x91
+ 47712 10301 E06D .sleb128 -2336
+ 47713 10303 35 .uleb128 0x35
+ 47714 10304 CB0D0000 .long 0xdcb
+ 47715 10308 00000000 .quad .LBB4603
+ 47715 00000000
+ 47716 10310 00000000 .quad .LBE4603
+ 47716 00000000
+ 47717 10318 02 .byte 0x2
+ 47718 10319 7501 .value 0x175
+ 47719 1031b 32 .uleb128 0x32
+ 47720 1031c E90D0000 .long 0xde9
+ 47721 10320 03 .byte 0x3
+ 47722 10321 91 .byte 0x91
+ 47723 10322 F06D .sleb128 -2320
+ 47724 10324 32 .uleb128 0x32
+ 47725 10325 DD0D0000 .long 0xddd
+ 47726 10329 03 .byte 0x3
+ 47727 1032a 91 .byte 0x91
+ 47728 1032b 806E .sleb128 -2304
+ 47729 1032d 00 .byte 0x0
+ 47730 1032e 00 .byte 0x0
+ 47731 1032f 00 .byte 0x0
+ 47732 10330 00 .byte 0x0
+ 47733 10331 31 .uleb128 0x31
+ 47734 10332 4A0E0000 .long 0xe4a
+ 47735 10336 00000000 .quad .LBB4605
+ 47735 00000000
+ 47736 1033e 00000000 .quad .LBE4605
+ 47736 00000000
+ 47737 10346 02 .byte 0x2
+ 47738 10347 5304 .value 0x453
+ 47739 10349 CE030100 .long 0x103ce
+ 47740 1034d 32 .uleb128 0x32
+ 47741 1034e 5C0E0000 .long 0xe5c
+ 47742 10352 03 .byte 0x3
+ 47743 10353 91 .byte 0x91
+ 47744 10354 906E .sleb128 -2288
+ 47745 10356 33 .uleb128 0x33
+ 47746 10357 00000000 .quad .LBB4606
+ 47746 00000000
+ 47747 1035f 00000000 .quad .LBE4606
+ 47747 00000000
+ 47748 10367 34 .uleb128 0x34
+ 47749 10368 680E0000 .long 0xe68
+ 47750 1036c 09 .byte 0x9
+ 47751 1036d 03 .byte 0x3
+ 47752 1036e 00000000 .quad ShiftRowTable.7385
+ 47752 00000000
+ 47753 10376 35 .uleb128 0x35
+ 47754 10377 A00D0000 .long 0xda0
+ 47755 1037b 00000000 .quad .LBB4607
+ 47755 00000000
+ 47756 10383 00000000 .quad .LBE4607
+
GAS LISTING /tmp/ccjbMjHD.s page 1166
+
+
+ 47756 00000000
+ 47757 1038b 02 .byte 0x2
+ 47758 1038c 9B02 .value 0x29b
+ 47759 1038e 32 .uleb128 0x32
+ 47760 1038f BE0D0000 .long 0xdbe
+ 47761 10393 03 .byte 0x3
+ 47762 10394 91 .byte 0x91
+ 47763 10395 A06E .sleb128 -2272
+ 47764 10397 32 .uleb128 0x32
+ 47765 10398 B20D0000 .long 0xdb2
+ 47766 1039c 03 .byte 0x3
+ 47767 1039d 91 .byte 0x91
+ 47768 1039e B06E .sleb128 -2256
+ 47769 103a0 35 .uleb128 0x35
+ 47770 103a1 CB0D0000 .long 0xdcb
+ 47771 103a5 00000000 .quad .LBB4609
+ 47771 00000000
+ 47772 103ad 00000000 .quad .LBE4609
+ 47772 00000000
+ 47773 103b5 02 .byte 0x2
+ 47774 103b6 7501 .value 0x175
+ 47775 103b8 32 .uleb128 0x32
+ 47776 103b9 E90D0000 .long 0xde9
+ 47777 103bd 03 .byte 0x3
+ 47778 103be 91 .byte 0x91
+ 47779 103bf C06E .sleb128 -2240
+ 47780 103c1 32 .uleb128 0x32
+ 47781 103c2 DD0D0000 .long 0xddd
+ 47782 103c6 03 .byte 0x3
+ 47783 103c7 91 .byte 0x91
+ 47784 103c8 D06E .sleb128 -2224
+ 47785 103ca 00 .byte 0x0
+ 47786 103cb 00 .byte 0x0
+ 47787 103cc 00 .byte 0x0
+ 47788 103cd 00 .byte 0x0
+ 47789 103ce 31 .uleb128 0x31
+ 47790 103cf 4A0E0000 .long 0xe4a
+ 47791 103d3 00000000 .quad .LBB4611
+ 47791 00000000
+ 47792 103db 00000000 .quad .LBE4611
+ 47792 00000000
+ 47793 103e3 02 .byte 0x2
+ 47794 103e4 5404 .value 0x454
+ 47795 103e6 6B040100 .long 0x1046b
+ 47796 103ea 32 .uleb128 0x32
+ 47797 103eb 5C0E0000 .long 0xe5c
+ 47798 103ef 03 .byte 0x3
+ 47799 103f0 91 .byte 0x91
+ 47800 103f1 E06E .sleb128 -2208
+ 47801 103f3 33 .uleb128 0x33
+ 47802 103f4 00000000 .quad .LBB4612
+ 47802 00000000
+ 47803 103fc 00000000 .quad .LBE4612
+ 47803 00000000
+ 47804 10404 34 .uleb128 0x34
+ 47805 10405 680E0000 .long 0xe68
+ 47806 10409 09 .byte 0x9
+
GAS LISTING /tmp/ccjbMjHD.s page 1167
+
+
+ 47807 1040a 03 .byte 0x3
+ 47808 1040b 00000000 .quad ShiftRowTable.7385
+ 47808 00000000
+ 47809 10413 35 .uleb128 0x35
+ 47810 10414 A00D0000 .long 0xda0
+ 47811 10418 00000000 .quad .LBB4613
+ 47811 00000000
+ 47812 10420 00000000 .quad .LBE4613
+ 47812 00000000
+ 47813 10428 02 .byte 0x2
+ 47814 10429 9B02 .value 0x29b
+ 47815 1042b 32 .uleb128 0x32
+ 47816 1042c BE0D0000 .long 0xdbe
+ 47817 10430 03 .byte 0x3
+ 47818 10431 91 .byte 0x91
+ 47819 10432 F06E .sleb128 -2192
+ 47820 10434 32 .uleb128 0x32
+ 47821 10435 B20D0000 .long 0xdb2
+ 47822 10439 03 .byte 0x3
+ 47823 1043a 91 .byte 0x91
+ 47824 1043b 806F .sleb128 -2176
+ 47825 1043d 35 .uleb128 0x35
+ 47826 1043e CB0D0000 .long 0xdcb
+ 47827 10442 00000000 .quad .LBB4615
+ 47827 00000000
+ 47828 1044a 00000000 .quad .LBE4615
+ 47828 00000000
+ 47829 10452 02 .byte 0x2
+ 47830 10453 7501 .value 0x175
+ 47831 10455 32 .uleb128 0x32
+ 47832 10456 E90D0000 .long 0xde9
+ 47833 1045a 03 .byte 0x3
+ 47834 1045b 91 .byte 0x91
+ 47835 1045c 906F .sleb128 -2160
+ 47836 1045e 32 .uleb128 0x32
+ 47837 1045f DD0D0000 .long 0xddd
+ 47838 10463 03 .byte 0x3
+ 47839 10464 91 .byte 0x91
+ 47840 10465 A06F .sleb128 -2144
+ 47841 10467 00 .byte 0x0
+ 47842 10468 00 .byte 0x0
+ 47843 10469 00 .byte 0x0
+ 47844 1046a 00 .byte 0x0
+ 47845 1046b 31 .uleb128 0x31
+ 47846 1046c 860E0000 .long 0xe86
+ 47847 10470 00000000 .quad .LBB4617
+ 47847 00000000
+ 47848 10478 00000000 .quad .LBE4617
+ 47848 00000000
+ 47849 10480 02 .byte 0x2
+ 47850 10481 5604 .value 0x456
+ 47851 10483 9A040100 .long 0x1049a
+ 47852 10487 32 .uleb128 0x32
+ 47853 10488 A10E0000 .long 0xea1
+ 47854 1048c 03 .byte 0x3
+ 47855 1048d 91 .byte 0x91
+ 47856 1048e B06F .sleb128 -2128
+
GAS LISTING /tmp/ccjbMjHD.s page 1168
+
+
+ 47857 10490 32 .uleb128 0x32
+ 47858 10491 970E0000 .long 0xe97
+ 47859 10495 03 .byte 0x3
+ 47860 10496 91 .byte 0x91
+ 47861 10497 C06F .sleb128 -2112
+ 47862 10499 00 .byte 0x0
+ 47863 1049a 31 .uleb128 0x31
+ 47864 1049b 860E0000 .long 0xe86
+ 47865 1049f 00000000 .quad .LBB4619
+ 47865 00000000
+ 47866 104a7 00000000 .quad .LBE4619
+ 47866 00000000
+ 47867 104af 02 .byte 0x2
+ 47868 104b0 5704 .value 0x457
+ 47869 104b2 C9040100 .long 0x104c9
+ 47870 104b6 32 .uleb128 0x32
+ 47871 104b7 A10E0000 .long 0xea1
+ 47872 104bb 03 .byte 0x3
+ 47873 104bc 91 .byte 0x91
+ 47874 104bd D06F .sleb128 -2096
+ 47875 104bf 32 .uleb128 0x32
+ 47876 104c0 970E0000 .long 0xe97
+ 47877 104c4 03 .byte 0x3
+ 47878 104c5 91 .byte 0x91
+ 47879 104c6 E06F .sleb128 -2080
+ 47880 104c8 00 .byte 0x0
+ 47881 104c9 31 .uleb128 0x31
+ 47882 104ca 860E0000 .long 0xe86
+ 47883 104ce 00000000 .quad .LBB4621
+ 47883 00000000
+ 47884 104d6 00000000 .quad .LBE4621
+ 47884 00000000
+ 47885 104de 02 .byte 0x2
+ 47886 104df 5804 .value 0x458
+ 47887 104e1 F8040100 .long 0x104f8
+ 47888 104e5 32 .uleb128 0x32
+ 47889 104e6 A10E0000 .long 0xea1
+ 47890 104ea 03 .byte 0x3
+ 47891 104eb 91 .byte 0x91
+ 47892 104ec F06F .sleb128 -2064
+ 47893 104ee 32 .uleb128 0x32
+ 47894 104ef 970E0000 .long 0xe97
+ 47895 104f3 03 .byte 0x3
+ 47896 104f4 91 .byte 0x91
+ 47897 104f5 8070 .sleb128 -2048
+ 47898 104f7 00 .byte 0x0
+ 47899 104f8 31 .uleb128 0x31
+ 47900 104f9 860E0000 .long 0xe86
+ 47901 104fd 00000000 .quad .LBB4623
+ 47901 00000000
+ 47902 10505 00000000 .quad .LBE4623
+ 47902 00000000
+ 47903 1050d 02 .byte 0x2
+ 47904 1050e 5904 .value 0x459
+ 47905 10510 27050100 .long 0x10527
+ 47906 10514 32 .uleb128 0x32
+ 47907 10515 A10E0000 .long 0xea1
+
GAS LISTING /tmp/ccjbMjHD.s page 1169
+
+
+ 47908 10519 03 .byte 0x3
+ 47909 1051a 91 .byte 0x91
+ 47910 1051b 9070 .sleb128 -2032
+ 47911 1051d 32 .uleb128 0x32
+ 47912 1051e 970E0000 .long 0xe97
+ 47913 10522 03 .byte 0x3
+ 47914 10523 91 .byte 0x91
+ 47915 10524 A070 .sleb128 -2016
+ 47916 10526 00 .byte 0x0
+ 47917 10527 31 .uleb128 0x31
+ 47918 10528 860E0000 .long 0xe86
+ 47919 1052c 00000000 .quad .LBB4625
+ 47919 00000000
+ 47920 10534 00000000 .quad .LBE4625
+ 47920 00000000
+ 47921 1053c 02 .byte 0x2
+ 47922 1053d 5A04 .value 0x45a
+ 47923 1053f 56050100 .long 0x10556
+ 47924 10543 32 .uleb128 0x32
+ 47925 10544 A10E0000 .long 0xea1
+ 47926 10548 03 .byte 0x3
+ 47927 10549 91 .byte 0x91
+ 47928 1054a B070 .sleb128 -2000
+ 47929 1054c 32 .uleb128 0x32
+ 47930 1054d 970E0000 .long 0xe97
+ 47931 10551 03 .byte 0x3
+ 47932 10552 91 .byte 0x91
+ 47933 10553 C070 .sleb128 -1984
+ 47934 10555 00 .byte 0x0
+ 47935 10556 31 .uleb128 0x31
+ 47936 10557 6BD90000 .long 0xd96b
+ 47937 1055b 00000000 .quad .LBB4627
+ 47937 00000000
+ 47938 10563 00000000 .quad .LBE4627
+ 47938 00000000
+ 47939 1056b 02 .byte 0x2
+ 47940 1056c 5E04 .value 0x45e
+ 47941 1056e 06080100 .long 0x10806
+ 47942 10572 32 .uleb128 0x32
+ 47943 10573 89D90000 .long 0xd989
+ 47944 10577 03 .byte 0x3
+ 47945 10578 91 .byte 0x91
+ 47946 10579 DC70 .sleb128 -1956
+ 47947 1057b 32 .uleb128 0x32
+ 47948 1057c 7DD90000 .long 0xd97d
+ 47949 10580 03 .byte 0x3
+ 47950 10581 91 .byte 0x91
+ 47951 10582 E070 .sleb128 -1952
+ 47952 10584 33 .uleb128 0x33
+ 47953 10585 00000000 .quad .LBB4628
+ 47953 00000000
+ 47954 1058d 00000000 .quad .LBE4628
+ 47954 00000000
+ 47955 10595 34 .uleb128 0x34
+ 47956 10596 95D90000 .long 0xd995
+ 47957 1059a 03 .byte 0x3
+ 47958 1059b 91 .byte 0x91
+
GAS LISTING /tmp/ccjbMjHD.s page 1170
+
+
+ 47959 1059c 8071 .sleb128 -1920
+ 47960 1059e 34 .uleb128 0x34
+ 47961 1059f A0D90000 .long 0xd9a0
+ 47962 105a3 03 .byte 0x3
+ 47963 105a4 91 .byte 0x91
+ 47964 105a5 F070 .sleb128 -1936
+ 47965 105a7 34 .uleb128 0x34
+ 47966 105a8 ABD90000 .long 0xd9ab
+ 47967 105ac 09 .byte 0x9
+ 47968 105ad 03 .byte 0x3
+ 47969 105ae 00000000 .quad __PRETTY_FUNCTION__.7467
+ 47969 00000000
+ 47970 105b6 36 .uleb128 0x36
+ 47971 105b7 00000000 .quad .LBB4629
+ 47971 00000000
+ 47972 105bf 00000000 .quad .LBE4629
+ 47972 00000000
+ 47973 105c7 D5050100 .long 0x105d5
+ 47974 105cb 34 .uleb128 0x34
+ 47975 105cc BED90000 .long 0xd9be
+ 47976 105d0 03 .byte 0x3
+ 47977 105d1 91 .byte 0x91
+ 47978 105d2 9066 .sleb128 -3312
+ 47979 105d4 00 .byte 0x0
+ 47980 105d5 31 .uleb128 0x31
+ 47981 105d6 FBD90000 .long 0xd9fb
+ 47982 105da 00000000 .quad .LBB4630
+ 47982 00000000
+ 47983 105e2 00000000 .quad .LBE4630
+ 47983 00000000
+ 47984 105ea 02 .byte 0x2
+ 47985 105eb A603 .value 0x3a6
+ 47986 105ed 7F060100 .long 0x1067f
+ 47987 105f1 32 .uleb128 0x32
+ 47988 105f2 17DA0000 .long 0xda17
+ 47989 105f6 03 .byte 0x3
+ 47990 105f7 91 .byte 0x91
+ 47991 105f8 9C71 .sleb128 -1892
+ 47992 105fa 32 .uleb128 0x32
+ 47993 105fb 0DDA0000 .long 0xda0d
+ 47994 105ff 03 .byte 0x3
+ 47995 10600 91 .byte 0x91
+ 47996 10601 A071 .sleb128 -1888
+ 47997 10603 33 .uleb128 0x33
+ 47998 10604 00000000 .quad .LBB4631
+ 47998 00000000
+ 47999 1060c 00000000 .quad .LBE4631
+ 47999 00000000
+ 48000 10614 34 .uleb128 0x34
+ 48001 10615 21DA0000 .long 0xda21
+ 48002 10619 09 .byte 0x9
+ 48003 1061a 03 .byte 0x3
+ 48004 1061b 00000000 .quad sr_mask.7327
+ 48004 00000000
+ 48005 10623 31 .uleb128 0x31
+ 48006 10624 750D0000 .long 0xd75
+ 48007 10628 00000000 .quad .LBB4632
+
GAS LISTING /tmp/ccjbMjHD.s page 1171
+
+
+ 48007 00000000
+ 48008 10630 00000000 .quad .LBE4632
+ 48008 00000000
+ 48009 10638 02 .byte 0x2
+ 48010 10639 E801 .value 0x1e8
+ 48011 1063b 52060100 .long 0x10652
+ 48012 1063f 32 .uleb128 0x32
+ 48013 10640 930D0000 .long 0xd93
+ 48014 10644 03 .byte 0x3
+ 48015 10645 91 .byte 0x91
+ 48016 10646 BC71 .sleb128 -1860
+ 48017 10648 32 .uleb128 0x32
+ 48018 10649 870D0000 .long 0xd87
+ 48019 1064d 03 .byte 0x3
+ 48020 1064e 91 .byte 0x91
+ 48021 1064f C071 .sleb128 -1856
+ 48022 10651 00 .byte 0x0
+ 48023 10652 35 .uleb128 0x35
+ 48024 10653 4F0D0000 .long 0xd4f
+ 48025 10657 00000000 .quad .LBB4634
+ 48025 00000000
+ 48026 1065f 00000000 .quad .LBE4634
+ 48026 00000000
+ 48027 10667 02 .byte 0x2
+ 48028 10668 E901 .value 0x1e9
+ 48029 1066a 32 .uleb128 0x32
+ 48030 1066b 6A0D0000 .long 0xd6a
+ 48031 1066f 03 .byte 0x3
+ 48032 10670 91 .byte 0x91
+ 48033 10671 D071 .sleb128 -1840
+ 48034 10673 32 .uleb128 0x32
+ 48035 10674 600D0000 .long 0xd60
+ 48036 10678 03 .byte 0x3
+ 48037 10679 91 .byte 0x91
+ 48038 1067a E071 .sleb128 -1824
+ 48039 1067c 00 .byte 0x0
+ 48040 1067d 00 .byte 0x0
+ 48041 1067e 00 .byte 0x0
+ 48042 1067f 36 .uleb128 0x36
+ 48043 10680 00000000 .quad .LBB4636
+ 48043 00000000
+ 48044 10688 00000000 .quad .LBE4636
+ 48044 00000000
+ 48045 10690 9E060100 .long 0x1069e
+ 48046 10694 34 .uleb128 0x34
+ 48047 10695 CED90000 .long 0xd9ce
+ 48048 10699 03 .byte 0x3
+ 48049 1069a 91 .byte 0x91
+ 48050 1069b 8066 .sleb128 -3328
+ 48051 1069d 00 .byte 0x0
+ 48052 1069e 31 .uleb128 0x31
+ 48053 1069f D4DA0000 .long 0xdad4
+ 48054 106a3 00000000 .quad .LBB4637
+ 48054 00000000
+ 48055 106ab 00000000 .quad .LBE4637
+ 48055 00000000
+ 48056 106b3 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1172
+
+
+ 48057 106b4 A803 .value 0x3a8
+ 48058 106b6 60070100 .long 0x10760
+ 48059 106ba 32 .uleb128 0x32
+ 48060 106bb F0DA0000 .long 0xdaf0
+ 48061 106bf 03 .byte 0x3
+ 48062 106c0 91 .byte 0x91
+ 48063 106c1 FC71 .sleb128 -1796
+ 48064 106c3 32 .uleb128 0x32
+ 48065 106c4 E6DA0000 .long 0xdae6
+ 48066 106c8 03 .byte 0x3
+ 48067 106c9 91 .byte 0x91
+ 48068 106ca 8072 .sleb128 -1792
+ 48069 106cc 33 .uleb128 0x33
+ 48070 106cd 00000000 .quad .LBB4638
+ 48070 00000000
+ 48071 106d5 00000000 .quad .LBE4638
+ 48071 00000000
+ 48072 106dd 34 .uleb128 0x34
+ 48073 106de 97DB0000 .long 0xdb97
+ 48074 106e2 03 .byte 0x3
+ 48075 106e3 91 .byte 0x91
+ 48076 106e4 9072 .sleb128 -1776
+ 48077 106e6 34 .uleb128 0x34
+ 48078 106e7 FADA0000 .long 0xdafa
+ 48079 106eb 09 .byte 0x9
+ 48080 106ec 03 .byte 0x3
+ 48081 106ed 00000000 .quad sl_mask.7310
+ 48081 00000000
+ 48082 106f5 34 .uleb128 0x34
+ 48083 106f6 A2DB0000 .long 0xdba2
+ 48084 106fa 09 .byte 0x9
+ 48085 106fb 03 .byte 0x3
+ 48086 106fc 00000000 .quad __PRETTY_FUNCTION__.7312
+ 48086 00000000
+ 48087 10704 31 .uleb128 0x31
+ 48088 10705 CBDB0000 .long 0xdbcb
+ 48089 10709 00000000 .quad .LBB4639
+ 48089 00000000
+ 48090 10711 00000000 .quad .LBE4639
+ 48090 00000000
+ 48091 10719 02 .byte 0x2
+ 48092 1071a B101 .value 0x1b1
+ 48093 1071c 33070100 .long 0x10733
+ 48094 10720 32 .uleb128 0x32
+ 48095 10721 E9DB0000 .long 0xdbe9
+ 48096 10725 03 .byte 0x3
+ 48097 10726 91 .byte 0x91
+ 48098 10727 AC72 .sleb128 -1748
+ 48099 10729 32 .uleb128 0x32
+ 48100 1072a DDDB0000 .long 0xdbdd
+ 48101 1072e 03 .byte 0x3
+ 48102 1072f 91 .byte 0x91
+ 48103 10730 B072 .sleb128 -1744
+ 48104 10732 00 .byte 0x0
+ 48105 10733 35 .uleb128 0x35
+ 48106 10734 4F0D0000 .long 0xd4f
+ 48107 10738 00000000 .quad .LBB4641
+
GAS LISTING /tmp/ccjbMjHD.s page 1173
+
+
+ 48107 00000000
+ 48108 10740 00000000 .quad .LBE4641
+ 48108 00000000
+ 48109 10748 02 .byte 0x2
+ 48110 10749 B301 .value 0x1b3
+ 48111 1074b 32 .uleb128 0x32
+ 48112 1074c 6A0D0000 .long 0xd6a
+ 48113 10750 03 .byte 0x3
+ 48114 10751 91 .byte 0x91
+ 48115 10752 C072 .sleb128 -1728
+ 48116 10754 32 .uleb128 0x32
+ 48117 10755 600D0000 .long 0xd60
+ 48118 10759 03 .byte 0x3
+ 48119 1075a 91 .byte 0x91
+ 48120 1075b D072 .sleb128 -1712
+ 48121 1075d 00 .byte 0x0
+ 48122 1075e 00 .byte 0x0
+ 48123 1075f 00 .byte 0x0
+ 48124 10760 36 .uleb128 0x36
+ 48125 10761 00000000 .quad .LBB4643
+ 48125 00000000
+ 48126 10769 00000000 .quad .LBE4643
+ 48126 00000000
+ 48127 10771 7F070100 .long 0x1077f
+ 48128 10775 34 .uleb128 0x34
+ 48129 10776 DAD90000 .long 0xd9da
+ 48130 1077a 03 .byte 0x3
+ 48131 1077b 91 .byte 0x91
+ 48132 1077c F065 .sleb128 -3344
+ 48133 1077e 00 .byte 0x0
+ 48134 1077f 31 .uleb128 0x31
+ 48135 10780 A00D0000 .long 0xda0
+ 48136 10784 00000000 .quad .LBB4644
+ 48136 00000000
+ 48137 1078c 00000000 .quad .LBE4644
+ 48137 00000000
+ 48138 10794 02 .byte 0x2
+ 48139 10795 AA03 .value 0x3aa
+ 48140 10797 D9070100 .long 0x107d9
+ 48141 1079b 32 .uleb128 0x32
+ 48142 1079c BE0D0000 .long 0xdbe
+ 48143 107a0 03 .byte 0x3
+ 48144 107a1 91 .byte 0x91
+ 48145 107a2 E072 .sleb128 -1696
+ 48146 107a4 32 .uleb128 0x32
+ 48147 107a5 B20D0000 .long 0xdb2
+ 48148 107a9 03 .byte 0x3
+ 48149 107aa 91 .byte 0x91
+ 48150 107ab F072 .sleb128 -1680
+ 48151 107ad 35 .uleb128 0x35
+ 48152 107ae CB0D0000 .long 0xdcb
+ 48153 107b2 00000000 .quad .LBB4646
+ 48153 00000000
+ 48154 107ba 00000000 .quad .LBE4646
+ 48154 00000000
+ 48155 107c2 02 .byte 0x2
+ 48156 107c3 7501 .value 0x175
+
GAS LISTING /tmp/ccjbMjHD.s page 1174
+
+
+ 48157 107c5 32 .uleb128 0x32
+ 48158 107c6 E90D0000 .long 0xde9
+ 48159 107ca 03 .byte 0x3
+ 48160 107cb 91 .byte 0x91
+ 48161 107cc 8073 .sleb128 -1664
+ 48162 107ce 32 .uleb128 0x32
+ 48163 107cf DD0D0000 .long 0xddd
+ 48164 107d3 03 .byte 0x3
+ 48165 107d4 91 .byte 0x91
+ 48166 107d5 9073 .sleb128 -1648
+ 48167 107d7 00 .byte 0x0
+ 48168 107d8 00 .byte 0x0
+ 48169 107d9 35 .uleb128 0x35
+ 48170 107da 860E0000 .long 0xe86
+ 48171 107de 00000000 .quad .LBB4648
+ 48171 00000000
+ 48172 107e6 00000000 .quad .LBE4648
+ 48172 00000000
+ 48173 107ee 02 .byte 0x2
+ 48174 107ef AB03 .value 0x3ab
+ 48175 107f1 32 .uleb128 0x32
+ 48176 107f2 A10E0000 .long 0xea1
+ 48177 107f6 03 .byte 0x3
+ 48178 107f7 91 .byte 0x91
+ 48179 107f8 A073 .sleb128 -1632
+ 48180 107fa 32 .uleb128 0x32
+ 48181 107fb 970E0000 .long 0xe97
+ 48182 107ff 03 .byte 0x3
+ 48183 10800 91 .byte 0x91
+ 48184 10801 B073 .sleb128 -1616
+ 48185 10803 00 .byte 0x0
+ 48186 10804 00 .byte 0x0
+ 48187 10805 00 .byte 0x0
+ 48188 10806 31 .uleb128 0x31
+ 48189 10807 6BD90000 .long 0xd96b
+ 48190 1080b 00000000 .quad .LBB4650
+ 48190 00000000
+ 48191 10813 00000000 .quad .LBE4650
+ 48191 00000000
+ 48192 1081b 02 .byte 0x2
+ 48193 1081c 5F04 .value 0x45f
+ 48194 1081e B60A0100 .long 0x10ab6
+ 48195 10822 32 .uleb128 0x32
+ 48196 10823 89D90000 .long 0xd989
+ 48197 10827 03 .byte 0x3
+ 48198 10828 91 .byte 0x91
+ 48199 10829 CC73 .sleb128 -1588
+ 48200 1082b 32 .uleb128 0x32
+ 48201 1082c 7DD90000 .long 0xd97d
+ 48202 10830 03 .byte 0x3
+ 48203 10831 91 .byte 0x91
+ 48204 10832 D073 .sleb128 -1584
+ 48205 10834 33 .uleb128 0x33
+ 48206 10835 00000000 .quad .LBB4651
+ 48206 00000000
+ 48207 1083d 00000000 .quad .LBE4651
+ 48207 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1175
+
+
+ 48208 10845 34 .uleb128 0x34
+ 48209 10846 95D90000 .long 0xd995
+ 48210 1084a 03 .byte 0x3
+ 48211 1084b 91 .byte 0x91
+ 48212 1084c F073 .sleb128 -1552
+ 48213 1084e 34 .uleb128 0x34
+ 48214 1084f A0D90000 .long 0xd9a0
+ 48215 10853 03 .byte 0x3
+ 48216 10854 91 .byte 0x91
+ 48217 10855 E073 .sleb128 -1568
+ 48218 10857 34 .uleb128 0x34
+ 48219 10858 ABD90000 .long 0xd9ab
+ 48220 1085c 09 .byte 0x9
+ 48221 1085d 03 .byte 0x3
+ 48222 1085e 00000000 .quad __PRETTY_FUNCTION__.7467
+ 48222 00000000
+ 48223 10866 36 .uleb128 0x36
+ 48224 10867 00000000 .quad .LBB4652
+ 48224 00000000
+ 48225 1086f 00000000 .quad .LBE4652
+ 48225 00000000
+ 48226 10877 85080100 .long 0x10885
+ 48227 1087b 34 .uleb128 0x34
+ 48228 1087c BED90000 .long 0xd9be
+ 48229 10880 03 .byte 0x3
+ 48230 10881 91 .byte 0x91
+ 48231 10882 C066 .sleb128 -3264
+ 48232 10884 00 .byte 0x0
+ 48233 10885 31 .uleb128 0x31
+ 48234 10886 FBD90000 .long 0xd9fb
+ 48235 1088a 00000000 .quad .LBB4653
+ 48235 00000000
+ 48236 10892 00000000 .quad .LBE4653
+ 48236 00000000
+ 48237 1089a 02 .byte 0x2
+ 48238 1089b A603 .value 0x3a6
+ 48239 1089d 2F090100 .long 0x1092f
+ 48240 108a1 32 .uleb128 0x32
+ 48241 108a2 17DA0000 .long 0xda17
+ 48242 108a6 03 .byte 0x3
+ 48243 108a7 91 .byte 0x91
+ 48244 108a8 8C74 .sleb128 -1524
+ 48245 108aa 32 .uleb128 0x32
+ 48246 108ab 0DDA0000 .long 0xda0d
+ 48247 108af 03 .byte 0x3
+ 48248 108b0 91 .byte 0x91
+ 48249 108b1 9074 .sleb128 -1520
+ 48250 108b3 33 .uleb128 0x33
+ 48251 108b4 00000000 .quad .LBB4654
+ 48251 00000000
+ 48252 108bc 00000000 .quad .LBE4654
+ 48252 00000000
+ 48253 108c4 34 .uleb128 0x34
+ 48254 108c5 21DA0000 .long 0xda21
+ 48255 108c9 09 .byte 0x9
+ 48256 108ca 03 .byte 0x3
+ 48257 108cb 00000000 .quad sr_mask.7327
+
GAS LISTING /tmp/ccjbMjHD.s page 1176
+
+
+ 48257 00000000
+ 48258 108d3 31 .uleb128 0x31
+ 48259 108d4 750D0000 .long 0xd75
+ 48260 108d8 00000000 .quad .LBB4655
+ 48260 00000000
+ 48261 108e0 00000000 .quad .LBE4655
+ 48261 00000000
+ 48262 108e8 02 .byte 0x2
+ 48263 108e9 E801 .value 0x1e8
+ 48264 108eb 02090100 .long 0x10902
+ 48265 108ef 32 .uleb128 0x32
+ 48266 108f0 930D0000 .long 0xd93
+ 48267 108f4 03 .byte 0x3
+ 48268 108f5 91 .byte 0x91
+ 48269 108f6 AC74 .sleb128 -1492
+ 48270 108f8 32 .uleb128 0x32
+ 48271 108f9 870D0000 .long 0xd87
+ 48272 108fd 03 .byte 0x3
+ 48273 108fe 91 .byte 0x91
+ 48274 108ff B074 .sleb128 -1488
+ 48275 10901 00 .byte 0x0
+ 48276 10902 35 .uleb128 0x35
+ 48277 10903 4F0D0000 .long 0xd4f
+ 48278 10907 00000000 .quad .LBB4657
+ 48278 00000000
+ 48279 1090f 00000000 .quad .LBE4657
+ 48279 00000000
+ 48280 10917 02 .byte 0x2
+ 48281 10918 E901 .value 0x1e9
+ 48282 1091a 32 .uleb128 0x32
+ 48283 1091b 6A0D0000 .long 0xd6a
+ 48284 1091f 03 .byte 0x3
+ 48285 10920 91 .byte 0x91
+ 48286 10921 C074 .sleb128 -1472
+ 48287 10923 32 .uleb128 0x32
+ 48288 10924 600D0000 .long 0xd60
+ 48289 10928 03 .byte 0x3
+ 48290 10929 91 .byte 0x91
+ 48291 1092a D074 .sleb128 -1456
+ 48292 1092c 00 .byte 0x0
+ 48293 1092d 00 .byte 0x0
+ 48294 1092e 00 .byte 0x0
+ 48295 1092f 36 .uleb128 0x36
+ 48296 10930 00000000 .quad .LBB4659
+ 48296 00000000
+ 48297 10938 00000000 .quad .LBE4659
+ 48297 00000000
+ 48298 10940 4E090100 .long 0x1094e
+ 48299 10944 34 .uleb128 0x34
+ 48300 10945 CED90000 .long 0xd9ce
+ 48301 10949 03 .byte 0x3
+ 48302 1094a 91 .byte 0x91
+ 48303 1094b B066 .sleb128 -3280
+ 48304 1094d 00 .byte 0x0
+ 48305 1094e 31 .uleb128 0x31
+ 48306 1094f D4DA0000 .long 0xdad4
+ 48307 10953 00000000 .quad .LBB4660
+
GAS LISTING /tmp/ccjbMjHD.s page 1177
+
+
+ 48307 00000000
+ 48308 1095b 00000000 .quad .LBE4660
+ 48308 00000000
+ 48309 10963 02 .byte 0x2
+ 48310 10964 A803 .value 0x3a8
+ 48311 10966 100A0100 .long 0x10a10
+ 48312 1096a 32 .uleb128 0x32
+ 48313 1096b F0DA0000 .long 0xdaf0
+ 48314 1096f 03 .byte 0x3
+ 48315 10970 91 .byte 0x91
+ 48316 10971 EC74 .sleb128 -1428
+ 48317 10973 32 .uleb128 0x32
+ 48318 10974 E6DA0000 .long 0xdae6
+ 48319 10978 03 .byte 0x3
+ 48320 10979 91 .byte 0x91
+ 48321 1097a F074 .sleb128 -1424
+ 48322 1097c 33 .uleb128 0x33
+ 48323 1097d 00000000 .quad .LBB4661
+ 48323 00000000
+ 48324 10985 00000000 .quad .LBE4661
+ 48324 00000000
+ 48325 1098d 34 .uleb128 0x34
+ 48326 1098e 97DB0000 .long 0xdb97
+ 48327 10992 03 .byte 0x3
+ 48328 10993 91 .byte 0x91
+ 48329 10994 8075 .sleb128 -1408
+ 48330 10996 34 .uleb128 0x34
+ 48331 10997 FADA0000 .long 0xdafa
+ 48332 1099b 09 .byte 0x9
+ 48333 1099c 03 .byte 0x3
+ 48334 1099d 00000000 .quad sl_mask.7310
+ 48334 00000000
+ 48335 109a5 34 .uleb128 0x34
+ 48336 109a6 A2DB0000 .long 0xdba2
+ 48337 109aa 09 .byte 0x9
+ 48338 109ab 03 .byte 0x3
+ 48339 109ac 00000000 .quad __PRETTY_FUNCTION__.7312
+ 48339 00000000
+ 48340 109b4 31 .uleb128 0x31
+ 48341 109b5 CBDB0000 .long 0xdbcb
+ 48342 109b9 00000000 .quad .LBB4662
+ 48342 00000000
+ 48343 109c1 00000000 .quad .LBE4662
+ 48343 00000000
+ 48344 109c9 02 .byte 0x2
+ 48345 109ca B101 .value 0x1b1
+ 48346 109cc E3090100 .long 0x109e3
+ 48347 109d0 32 .uleb128 0x32
+ 48348 109d1 E9DB0000 .long 0xdbe9
+ 48349 109d5 03 .byte 0x3
+ 48350 109d6 91 .byte 0x91
+ 48351 109d7 9C75 .sleb128 -1380
+ 48352 109d9 32 .uleb128 0x32
+ 48353 109da DDDB0000 .long 0xdbdd
+ 48354 109de 03 .byte 0x3
+ 48355 109df 91 .byte 0x91
+ 48356 109e0 A075 .sleb128 -1376
+
GAS LISTING /tmp/ccjbMjHD.s page 1178
+
+
+ 48357 109e2 00 .byte 0x0
+ 48358 109e3 35 .uleb128 0x35
+ 48359 109e4 4F0D0000 .long 0xd4f
+ 48360 109e8 00000000 .quad .LBB4664
+ 48360 00000000
+ 48361 109f0 00000000 .quad .LBE4664
+ 48361 00000000
+ 48362 109f8 02 .byte 0x2
+ 48363 109f9 B301 .value 0x1b3
+ 48364 109fb 32 .uleb128 0x32
+ 48365 109fc 6A0D0000 .long 0xd6a
+ 48366 10a00 03 .byte 0x3
+ 48367 10a01 91 .byte 0x91
+ 48368 10a02 B075 .sleb128 -1360
+ 48369 10a04 32 .uleb128 0x32
+ 48370 10a05 600D0000 .long 0xd60
+ 48371 10a09 03 .byte 0x3
+ 48372 10a0a 91 .byte 0x91
+ 48373 10a0b C075 .sleb128 -1344
+ 48374 10a0d 00 .byte 0x0
+ 48375 10a0e 00 .byte 0x0
+ 48376 10a0f 00 .byte 0x0
+ 48377 10a10 36 .uleb128 0x36
+ 48378 10a11 00000000 .quad .LBB4666
+ 48378 00000000
+ 48379 10a19 00000000 .quad .LBE4666
+ 48379 00000000
+ 48380 10a21 2F0A0100 .long 0x10a2f
+ 48381 10a25 34 .uleb128 0x34
+ 48382 10a26 DAD90000 .long 0xd9da
+ 48383 10a2a 03 .byte 0x3
+ 48384 10a2b 91 .byte 0x91
+ 48385 10a2c A066 .sleb128 -3296
+ 48386 10a2e 00 .byte 0x0
+ 48387 10a2f 31 .uleb128 0x31
+ 48388 10a30 A00D0000 .long 0xda0
+ 48389 10a34 00000000 .quad .LBB4667
+ 48389 00000000
+ 48390 10a3c 00000000 .quad .LBE4667
+ 48390 00000000
+ 48391 10a44 02 .byte 0x2
+ 48392 10a45 AA03 .value 0x3aa
+ 48393 10a47 890A0100 .long 0x10a89
+ 48394 10a4b 32 .uleb128 0x32
+ 48395 10a4c BE0D0000 .long 0xdbe
+ 48396 10a50 03 .byte 0x3
+ 48397 10a51 91 .byte 0x91
+ 48398 10a52 D075 .sleb128 -1328
+ 48399 10a54 32 .uleb128 0x32
+ 48400 10a55 B20D0000 .long 0xdb2
+ 48401 10a59 03 .byte 0x3
+ 48402 10a5a 91 .byte 0x91
+ 48403 10a5b E075 .sleb128 -1312
+ 48404 10a5d 35 .uleb128 0x35
+ 48405 10a5e CB0D0000 .long 0xdcb
+ 48406 10a62 00000000 .quad .LBB4669
+ 48406 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1179
+
+
+ 48407 10a6a 00000000 .quad .LBE4669
+ 48407 00000000
+ 48408 10a72 02 .byte 0x2
+ 48409 10a73 7501 .value 0x175
+ 48410 10a75 32 .uleb128 0x32
+ 48411 10a76 E90D0000 .long 0xde9
+ 48412 10a7a 03 .byte 0x3
+ 48413 10a7b 91 .byte 0x91
+ 48414 10a7c F075 .sleb128 -1296
+ 48415 10a7e 32 .uleb128 0x32
+ 48416 10a7f DD0D0000 .long 0xddd
+ 48417 10a83 03 .byte 0x3
+ 48418 10a84 91 .byte 0x91
+ 48419 10a85 8076 .sleb128 -1280
+ 48420 10a87 00 .byte 0x0
+ 48421 10a88 00 .byte 0x0
+ 48422 10a89 35 .uleb128 0x35
+ 48423 10a8a 860E0000 .long 0xe86
+ 48424 10a8e 00000000 .quad .LBB4671
+ 48424 00000000
+ 48425 10a96 00000000 .quad .LBE4671
+ 48425 00000000
+ 48426 10a9e 02 .byte 0x2
+ 48427 10a9f AB03 .value 0x3ab
+ 48428 10aa1 32 .uleb128 0x32
+ 48429 10aa2 A10E0000 .long 0xea1
+ 48430 10aa6 03 .byte 0x3
+ 48431 10aa7 91 .byte 0x91
+ 48432 10aa8 9076 .sleb128 -1264
+ 48433 10aaa 32 .uleb128 0x32
+ 48434 10aab 970E0000 .long 0xe97
+ 48435 10aaf 03 .byte 0x3
+ 48436 10ab0 91 .byte 0x91
+ 48437 10ab1 A076 .sleb128 -1248
+ 48438 10ab3 00 .byte 0x0
+ 48439 10ab4 00 .byte 0x0
+ 48440 10ab5 00 .byte 0x0
+ 48441 10ab6 31 .uleb128 0x31
+ 48442 10ab7 6BD90000 .long 0xd96b
+ 48443 10abb 00000000 .quad .LBB4673
+ 48443 00000000
+ 48444 10ac3 00000000 .quad .LBE4673
+ 48444 00000000
+ 48445 10acb 02 .byte 0x2
+ 48446 10acc 6004 .value 0x460
+ 48447 10ace 660D0100 .long 0x10d66
+ 48448 10ad2 32 .uleb128 0x32
+ 48449 10ad3 89D90000 .long 0xd989
+ 48450 10ad7 03 .byte 0x3
+ 48451 10ad8 91 .byte 0x91
+ 48452 10ad9 BC76 .sleb128 -1220
+ 48453 10adb 32 .uleb128 0x32
+ 48454 10adc 7DD90000 .long 0xd97d
+ 48455 10ae0 03 .byte 0x3
+ 48456 10ae1 91 .byte 0x91
+ 48457 10ae2 C076 .sleb128 -1216
+ 48458 10ae4 33 .uleb128 0x33
+
GAS LISTING /tmp/ccjbMjHD.s page 1180
+
+
+ 48459 10ae5 00000000 .quad .LBB4674
+ 48459 00000000
+ 48460 10aed 00000000 .quad .LBE4674
+ 48460 00000000
+ 48461 10af5 34 .uleb128 0x34
+ 48462 10af6 95D90000 .long 0xd995
+ 48463 10afa 03 .byte 0x3
+ 48464 10afb 91 .byte 0x91
+ 48465 10afc E076 .sleb128 -1184
+ 48466 10afe 34 .uleb128 0x34
+ 48467 10aff A0D90000 .long 0xd9a0
+ 48468 10b03 03 .byte 0x3
+ 48469 10b04 91 .byte 0x91
+ 48470 10b05 D076 .sleb128 -1200
+ 48471 10b07 34 .uleb128 0x34
+ 48472 10b08 ABD90000 .long 0xd9ab
+ 48473 10b0c 09 .byte 0x9
+ 48474 10b0d 03 .byte 0x3
+ 48475 10b0e 00000000 .quad __PRETTY_FUNCTION__.7467
+ 48475 00000000
+ 48476 10b16 36 .uleb128 0x36
+ 48477 10b17 00000000 .quad .LBB4675
+ 48477 00000000
+ 48478 10b1f 00000000 .quad .LBE4675
+ 48478 00000000
+ 48479 10b27 350B0100 .long 0x10b35
+ 48480 10b2b 34 .uleb128 0x34
+ 48481 10b2c BED90000 .long 0xd9be
+ 48482 10b30 03 .byte 0x3
+ 48483 10b31 91 .byte 0x91
+ 48484 10b32 F066 .sleb128 -3216
+ 48485 10b34 00 .byte 0x0
+ 48486 10b35 31 .uleb128 0x31
+ 48487 10b36 FBD90000 .long 0xd9fb
+ 48488 10b3a 00000000 .quad .LBB4676
+ 48488 00000000
+ 48489 10b42 00000000 .quad .LBE4676
+ 48489 00000000
+ 48490 10b4a 02 .byte 0x2
+ 48491 10b4b A603 .value 0x3a6
+ 48492 10b4d DF0B0100 .long 0x10bdf
+ 48493 10b51 32 .uleb128 0x32
+ 48494 10b52 17DA0000 .long 0xda17
+ 48495 10b56 03 .byte 0x3
+ 48496 10b57 91 .byte 0x91
+ 48497 10b58 FC76 .sleb128 -1156
+ 48498 10b5a 32 .uleb128 0x32
+ 48499 10b5b 0DDA0000 .long 0xda0d
+ 48500 10b5f 03 .byte 0x3
+ 48501 10b60 91 .byte 0x91
+ 48502 10b61 8077 .sleb128 -1152
+ 48503 10b63 33 .uleb128 0x33
+ 48504 10b64 00000000 .quad .LBB4677
+ 48504 00000000
+ 48505 10b6c 00000000 .quad .LBE4677
+ 48505 00000000
+ 48506 10b74 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 1181
+
+
+ 48507 10b75 21DA0000 .long 0xda21
+ 48508 10b79 09 .byte 0x9
+ 48509 10b7a 03 .byte 0x3
+ 48510 10b7b 00000000 .quad sr_mask.7327
+ 48510 00000000
+ 48511 10b83 31 .uleb128 0x31
+ 48512 10b84 750D0000 .long 0xd75
+ 48513 10b88 00000000 .quad .LBB4678
+ 48513 00000000
+ 48514 10b90 00000000 .quad .LBE4678
+ 48514 00000000
+ 48515 10b98 02 .byte 0x2
+ 48516 10b99 E801 .value 0x1e8
+ 48517 10b9b B20B0100 .long 0x10bb2
+ 48518 10b9f 32 .uleb128 0x32
+ 48519 10ba0 930D0000 .long 0xd93
+ 48520 10ba4 03 .byte 0x3
+ 48521 10ba5 91 .byte 0x91
+ 48522 10ba6 9C77 .sleb128 -1124
+ 48523 10ba8 32 .uleb128 0x32
+ 48524 10ba9 870D0000 .long 0xd87
+ 48525 10bad 03 .byte 0x3
+ 48526 10bae 91 .byte 0x91
+ 48527 10baf A077 .sleb128 -1120
+ 48528 10bb1 00 .byte 0x0
+ 48529 10bb2 35 .uleb128 0x35
+ 48530 10bb3 4F0D0000 .long 0xd4f
+ 48531 10bb7 00000000 .quad .LBB4680
+ 48531 00000000
+ 48532 10bbf 00000000 .quad .LBE4680
+ 48532 00000000
+ 48533 10bc7 02 .byte 0x2
+ 48534 10bc8 E901 .value 0x1e9
+ 48535 10bca 32 .uleb128 0x32
+ 48536 10bcb 6A0D0000 .long 0xd6a
+ 48537 10bcf 03 .byte 0x3
+ 48538 10bd0 91 .byte 0x91
+ 48539 10bd1 B077 .sleb128 -1104
+ 48540 10bd3 32 .uleb128 0x32
+ 48541 10bd4 600D0000 .long 0xd60
+ 48542 10bd8 03 .byte 0x3
+ 48543 10bd9 91 .byte 0x91
+ 48544 10bda C077 .sleb128 -1088
+ 48545 10bdc 00 .byte 0x0
+ 48546 10bdd 00 .byte 0x0
+ 48547 10bde 00 .byte 0x0
+ 48548 10bdf 36 .uleb128 0x36
+ 48549 10be0 00000000 .quad .LBB4682
+ 48549 00000000
+ 48550 10be8 00000000 .quad .LBE4682
+ 48550 00000000
+ 48551 10bf0 FE0B0100 .long 0x10bfe
+ 48552 10bf4 34 .uleb128 0x34
+ 48553 10bf5 CED90000 .long 0xd9ce
+ 48554 10bf9 03 .byte 0x3
+ 48555 10bfa 91 .byte 0x91
+ 48556 10bfb E066 .sleb128 -3232
+
GAS LISTING /tmp/ccjbMjHD.s page 1182
+
+
+ 48557 10bfd 00 .byte 0x0
+ 48558 10bfe 31 .uleb128 0x31
+ 48559 10bff D4DA0000 .long 0xdad4
+ 48560 10c03 00000000 .quad .LBB4683
+ 48560 00000000
+ 48561 10c0b 00000000 .quad .LBE4683
+ 48561 00000000
+ 48562 10c13 02 .byte 0x2
+ 48563 10c14 A803 .value 0x3a8
+ 48564 10c16 C00C0100 .long 0x10cc0
+ 48565 10c1a 32 .uleb128 0x32
+ 48566 10c1b F0DA0000 .long 0xdaf0
+ 48567 10c1f 03 .byte 0x3
+ 48568 10c20 91 .byte 0x91
+ 48569 10c21 DC77 .sleb128 -1060
+ 48570 10c23 32 .uleb128 0x32
+ 48571 10c24 E6DA0000 .long 0xdae6
+ 48572 10c28 03 .byte 0x3
+ 48573 10c29 91 .byte 0x91
+ 48574 10c2a E077 .sleb128 -1056
+ 48575 10c2c 33 .uleb128 0x33
+ 48576 10c2d 00000000 .quad .LBB4684
+ 48576 00000000
+ 48577 10c35 00000000 .quad .LBE4684
+ 48577 00000000
+ 48578 10c3d 34 .uleb128 0x34
+ 48579 10c3e 97DB0000 .long 0xdb97
+ 48580 10c42 03 .byte 0x3
+ 48581 10c43 91 .byte 0x91
+ 48582 10c44 F077 .sleb128 -1040
+ 48583 10c46 34 .uleb128 0x34
+ 48584 10c47 FADA0000 .long 0xdafa
+ 48585 10c4b 09 .byte 0x9
+ 48586 10c4c 03 .byte 0x3
+ 48587 10c4d 00000000 .quad sl_mask.7310
+ 48587 00000000
+ 48588 10c55 34 .uleb128 0x34
+ 48589 10c56 A2DB0000 .long 0xdba2
+ 48590 10c5a 09 .byte 0x9
+ 48591 10c5b 03 .byte 0x3
+ 48592 10c5c 00000000 .quad __PRETTY_FUNCTION__.7312
+ 48592 00000000
+ 48593 10c64 31 .uleb128 0x31
+ 48594 10c65 CBDB0000 .long 0xdbcb
+ 48595 10c69 00000000 .quad .LBB4685
+ 48595 00000000
+ 48596 10c71 00000000 .quad .LBE4685
+ 48596 00000000
+ 48597 10c79 02 .byte 0x2
+ 48598 10c7a B101 .value 0x1b1
+ 48599 10c7c 930C0100 .long 0x10c93
+ 48600 10c80 32 .uleb128 0x32
+ 48601 10c81 E9DB0000 .long 0xdbe9
+ 48602 10c85 03 .byte 0x3
+ 48603 10c86 91 .byte 0x91
+ 48604 10c87 8C78 .sleb128 -1012
+ 48605 10c89 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 1183
+
+
+ 48606 10c8a DDDB0000 .long 0xdbdd
+ 48607 10c8e 03 .byte 0x3
+ 48608 10c8f 91 .byte 0x91
+ 48609 10c90 9078 .sleb128 -1008
+ 48610 10c92 00 .byte 0x0
+ 48611 10c93 35 .uleb128 0x35
+ 48612 10c94 4F0D0000 .long 0xd4f
+ 48613 10c98 00000000 .quad .LBB4687
+ 48613 00000000
+ 48614 10ca0 00000000 .quad .LBE4687
+ 48614 00000000
+ 48615 10ca8 02 .byte 0x2
+ 48616 10ca9 B301 .value 0x1b3
+ 48617 10cab 32 .uleb128 0x32
+ 48618 10cac 6A0D0000 .long 0xd6a
+ 48619 10cb0 03 .byte 0x3
+ 48620 10cb1 91 .byte 0x91
+ 48621 10cb2 A078 .sleb128 -992
+ 48622 10cb4 32 .uleb128 0x32
+ 48623 10cb5 600D0000 .long 0xd60
+ 48624 10cb9 03 .byte 0x3
+ 48625 10cba 91 .byte 0x91
+ 48626 10cbb B078 .sleb128 -976
+ 48627 10cbd 00 .byte 0x0
+ 48628 10cbe 00 .byte 0x0
+ 48629 10cbf 00 .byte 0x0
+ 48630 10cc0 36 .uleb128 0x36
+ 48631 10cc1 00000000 .quad .LBB4689
+ 48631 00000000
+ 48632 10cc9 00000000 .quad .LBE4689
+ 48632 00000000
+ 48633 10cd1 DF0C0100 .long 0x10cdf
+ 48634 10cd5 34 .uleb128 0x34
+ 48635 10cd6 DAD90000 .long 0xd9da
+ 48636 10cda 03 .byte 0x3
+ 48637 10cdb 91 .byte 0x91
+ 48638 10cdc D066 .sleb128 -3248
+ 48639 10cde 00 .byte 0x0
+ 48640 10cdf 31 .uleb128 0x31
+ 48641 10ce0 A00D0000 .long 0xda0
+ 48642 10ce4 00000000 .quad .LBB4690
+ 48642 00000000
+ 48643 10cec 00000000 .quad .LBE4690
+ 48643 00000000
+ 48644 10cf4 02 .byte 0x2
+ 48645 10cf5 AA03 .value 0x3aa
+ 48646 10cf7 390D0100 .long 0x10d39
+ 48647 10cfb 32 .uleb128 0x32
+ 48648 10cfc BE0D0000 .long 0xdbe
+ 48649 10d00 03 .byte 0x3
+ 48650 10d01 91 .byte 0x91
+ 48651 10d02 C078 .sleb128 -960
+ 48652 10d04 32 .uleb128 0x32
+ 48653 10d05 B20D0000 .long 0xdb2
+ 48654 10d09 03 .byte 0x3
+ 48655 10d0a 91 .byte 0x91
+ 48656 10d0b D078 .sleb128 -944
+
GAS LISTING /tmp/ccjbMjHD.s page 1184
+
+
+ 48657 10d0d 35 .uleb128 0x35
+ 48658 10d0e CB0D0000 .long 0xdcb
+ 48659 10d12 00000000 .quad .LBB4692
+ 48659 00000000
+ 48660 10d1a 00000000 .quad .LBE4692
+ 48660 00000000
+ 48661 10d22 02 .byte 0x2
+ 48662 10d23 7501 .value 0x175
+ 48663 10d25 32 .uleb128 0x32
+ 48664 10d26 E90D0000 .long 0xde9
+ 48665 10d2a 03 .byte 0x3
+ 48666 10d2b 91 .byte 0x91
+ 48667 10d2c E078 .sleb128 -928
+ 48668 10d2e 32 .uleb128 0x32
+ 48669 10d2f DD0D0000 .long 0xddd
+ 48670 10d33 03 .byte 0x3
+ 48671 10d34 91 .byte 0x91
+ 48672 10d35 F078 .sleb128 -912
+ 48673 10d37 00 .byte 0x0
+ 48674 10d38 00 .byte 0x0
+ 48675 10d39 35 .uleb128 0x35
+ 48676 10d3a 860E0000 .long 0xe86
+ 48677 10d3e 00000000 .quad .LBB4694
+ 48677 00000000
+ 48678 10d46 00000000 .quad .LBE4694
+ 48678 00000000
+ 48679 10d4e 02 .byte 0x2
+ 48680 10d4f AB03 .value 0x3ab
+ 48681 10d51 32 .uleb128 0x32
+ 48682 10d52 A10E0000 .long 0xea1
+ 48683 10d56 03 .byte 0x3
+ 48684 10d57 91 .byte 0x91
+ 48685 10d58 8079 .sleb128 -896
+ 48686 10d5a 32 .uleb128 0x32
+ 48687 10d5b 970E0000 .long 0xe97
+ 48688 10d5f 03 .byte 0x3
+ 48689 10d60 91 .byte 0x91
+ 48690 10d61 9079 .sleb128 -880
+ 48691 10d63 00 .byte 0x0
+ 48692 10d64 00 .byte 0x0
+ 48693 10d65 00 .byte 0x0
+ 48694 10d66 31 .uleb128 0x31
+ 48695 10d67 860E0000 .long 0xe86
+ 48696 10d6b 00000000 .quad .LBB4696
+ 48696 00000000
+ 48697 10d73 00000000 .quad .LBE4696
+ 48697 00000000
+ 48698 10d7b 02 .byte 0x2
+ 48699 10d7c 7604 .value 0x476
+ 48700 10d7e 950D0100 .long 0x10d95
+ 48701 10d82 32 .uleb128 0x32
+ 48702 10d83 A10E0000 .long 0xea1
+ 48703 10d87 03 .byte 0x3
+ 48704 10d88 91 .byte 0x91
+ 48705 10d89 A079 .sleb128 -864
+ 48706 10d8b 32 .uleb128 0x32
+ 48707 10d8c 970E0000 .long 0xe97
+
GAS LISTING /tmp/ccjbMjHD.s page 1185
+
+
+ 48708 10d90 03 .byte 0x3
+ 48709 10d91 91 .byte 0x91
+ 48710 10d92 B079 .sleb128 -848
+ 48711 10d94 00 .byte 0x0
+ 48712 10d95 31 .uleb128 0x31
+ 48713 10d96 860E0000 .long 0xe86
+ 48714 10d9a 00000000 .quad .LBB4698
+ 48714 00000000
+ 48715 10da2 00000000 .quad .LBE4698
+ 48715 00000000
+ 48716 10daa 02 .byte 0x2
+ 48717 10dab 7704 .value 0x477
+ 48718 10dad C40D0100 .long 0x10dc4
+ 48719 10db1 32 .uleb128 0x32
+ 48720 10db2 A10E0000 .long 0xea1
+ 48721 10db6 03 .byte 0x3
+ 48722 10db7 91 .byte 0x91
+ 48723 10db8 C079 .sleb128 -832
+ 48724 10dba 32 .uleb128 0x32
+ 48725 10dbb 970E0000 .long 0xe97
+ 48726 10dbf 03 .byte 0x3
+ 48727 10dc0 91 .byte 0x91
+ 48728 10dc1 D079 .sleb128 -816
+ 48729 10dc3 00 .byte 0x0
+ 48730 10dc4 35 .uleb128 0x35
+ 48731 10dc5 860E0000 .long 0xe86
+ 48732 10dc9 00000000 .quad .LBB4700
+ 48732 00000000
+ 48733 10dd1 00000000 .quad .LBE4700
+ 48733 00000000
+ 48734 10dd9 02 .byte 0x2
+ 48735 10dda 7804 .value 0x478
+ 48736 10ddc 32 .uleb128 0x32
+ 48737 10ddd A10E0000 .long 0xea1
+ 48738 10de1 03 .byte 0x3
+ 48739 10de2 91 .byte 0x91
+ 48740 10de3 E079 .sleb128 -800
+ 48741 10de5 32 .uleb128 0x32
+ 48742 10de6 970E0000 .long 0xe97
+ 48743 10dea 03 .byte 0x3
+ 48744 10deb 91 .byte 0x91
+ 48745 10dec F079 .sleb128 -784
+ 48746 10dee 00 .byte 0x0
+ 48747 10def 00 .byte 0x0
+ 48748 10df0 00 .byte 0x0
+ 48749 10df1 36 .uleb128 0x36
+ 48750 10df2 00000000 .quad .LBB4702
+ 48750 00000000
+ 48751 10dfa 00000000 .quad .LBE4702
+ 48751 00000000
+ 48752 10e02 100E0100 .long 0x10e10
+ 48753 10e06 34 .uleb128 0x34
+ 48754 10e07 10FC0000 .long 0xfc10
+ 48755 10e0b 03 .byte 0x3
+ 48756 10e0c 91 .byte 0x91
+ 48757 10e0d B065 .sleb128 -3408
+ 48758 10e0f 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1186
+
+
+ 48759 10e10 31 .uleb128 0x31
+ 48760 10e11 34E90000 .long 0xe934
+ 48761 10e15 00000000 .quad .LBB4703
+ 48761 00000000
+ 48762 10e1d 00000000 .quad .LBE4703
+ 48762 00000000
+ 48763 10e25 02 .byte 0x2
+ 48764 10e26 A108 .value 0x8a1
+ 48765 10e28 6A0E0100 .long 0x10e6a
+ 48766 10e2c 32 .uleb128 0x32
+ 48767 10e2d 52E90000 .long 0xe952
+ 48768 10e31 03 .byte 0x3
+ 48769 10e32 91 .byte 0x91
+ 48770 10e33 807A .sleb128 -768
+ 48771 10e35 32 .uleb128 0x32
+ 48772 10e36 46E90000 .long 0xe946
+ 48773 10e3a 03 .byte 0x3
+ 48774 10e3b 91 .byte 0x91
+ 48775 10e3c 907A .sleb128 -752
+ 48776 10e3e 35 .uleb128 0x35
+ 48777 10e3f 860E0000 .long 0xe86
+ 48778 10e43 00000000 .quad .LBB4705
+ 48778 00000000
+ 48779 10e4b 00000000 .quad .LBE4705
+ 48779 00000000
+ 48780 10e53 02 .byte 0x2
+ 48781 10e54 2302 .value 0x223
+ 48782 10e56 32 .uleb128 0x32
+ 48783 10e57 A10E0000 .long 0xea1
+ 48784 10e5b 03 .byte 0x3
+ 48785 10e5c 91 .byte 0x91
+ 48786 10e5d A07A .sleb128 -736
+ 48787 10e5f 32 .uleb128 0x32
+ 48788 10e60 970E0000 .long 0xe97
+ 48789 10e64 03 .byte 0x3
+ 48790 10e65 91 .byte 0x91
+ 48791 10e66 B07A .sleb128 -720
+ 48792 10e68 00 .byte 0x0
+ 48793 10e69 00 .byte 0x0
+ 48794 10e6a 36 .uleb128 0x36
+ 48795 10e6b 00000000 .quad .LBB4707
+ 48795 00000000
+ 48796 10e73 00000000 .quad .LBE4707
+ 48796 00000000
+ 48797 10e7b 890E0100 .long 0x10e89
+ 48798 10e7f 34 .uleb128 0x34
+ 48799 10e80 20FC0000 .long 0xfc20
+ 48800 10e84 03 .byte 0x3
+ 48801 10e85 91 .byte 0x91
+ 48802 10e86 A065 .sleb128 -3424
+ 48803 10e88 00 .byte 0x0
+ 48804 10e89 33 .uleb128 0x33
+ 48805 10e8a 00000000 .quad .LBB4708
+ 48805 00000000
+ 48806 10e92 00000000 .quad .LBE4708
+ 48806 00000000
+ 48807 10e9a 34 .uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s page 1187
+
+
+ 48808 10e9b 2CFC0000 .long 0xfc2c
+ 48809 10e9f 03 .byte 0x3
+ 48810 10ea0 91 .byte 0x91
+ 48811 10ea1 9065 .sleb128 -3440
+ 48812 10ea3 00 .byte 0x0
+ 48813 10ea4 00 .byte 0x0
+ 48814 10ea5 00 .byte 0x0
+ 48815 10ea6 35 .uleb128 0x35
+ 48816 10ea7 98FC0000 .long 0xfc98
+ 48817 10eab 00000000 .quad .LBB4709
+ 48817 00000000
+ 48818 10eb3 00000000 .quad .LBE4709
+ 48818 00000000
+ 48819 10ebb 02 .byte 0x2
+ 48820 10ebc E708 .value 0x8e7
+ 48821 10ebe 32 .uleb128 0x32
+ 48822 10ebf B6FC0000 .long 0xfcb6
+ 48823 10ec3 03 .byte 0x3
+ 48824 10ec4 91 .byte 0x91
+ 48825 10ec5 C07A .sleb128 -704
+ 48826 10ec7 32 .uleb128 0x32
+ 48827 10ec8 AAFC0000 .long 0xfcaa
+ 48828 10ecc 03 .byte 0x3
+ 48829 10ecd 91 .byte 0x91
+ 48830 10ece D07A .sleb128 -688
+ 48831 10ed0 36 .uleb128 0x36
+ 48832 10ed1 00000000 .quad .LBB4711
+ 48832 00000000
+ 48833 10ed9 00000000 .quad .LBE4711
+ 48833 00000000
+ 48834 10ee1 EF0E0100 .long 0x10eef
+ 48835 10ee5 34 .uleb128 0x34
+ 48836 10ee6 C7FC0000 .long 0xfcc7
+ 48837 10eea 03 .byte 0x3
+ 48838 10eeb 91 .byte 0x91
+ 48839 10eec C067 .sleb128 -3136
+ 48840 10eee 00 .byte 0x0
+ 48841 10eef 31 .uleb128 0x31
+ 48842 10ef0 38FC0000 .long 0xfc38
+ 48843 10ef4 00000000 .quad .LBB4712
+ 48843 00000000
+ 48844 10efc 00000000 .quad .LBE4712
+ 48844 00000000
+ 48845 10f04 02 .byte 0x2
+ 48846 10f05 C308 .value 0x8c3
+ 48847 10f07 78110100 .long 0x11178
+ 48848 10f0b 32 .uleb128 0x32
+ 48849 10f0c 4AFC0000 .long 0xfc4a
+ 48850 10f10 03 .byte 0x3
+ 48851 10f11 91 .byte 0x91
+ 48852 10f12 E07A .sleb128 -672
+ 48853 10f14 35 .uleb128 0x35
+ 48854 10f15 E00C0000 .long 0xce0
+ 48855 10f19 00000000 .quad .LBB4714
+ 48855 00000000
+ 48856 10f21 00000000 .quad .LBE4714
+ 48856 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1188
+
+
+ 48857 10f29 02 .byte 0x2
+ 48858 10f2a 8803 .value 0x388
+ 48859 10f2c 32 .uleb128 0x32
+ 48860 10f2d FE0C0000 .long 0xcfe
+ 48861 10f31 03 .byte 0x3
+ 48862 10f32 91 .byte 0x91
+ 48863 10f33 F87A .sleb128 -648
+ 48864 10f35 32 .uleb128 0x32
+ 48865 10f36 F20C0000 .long 0xcf2
+ 48866 10f3a 03 .byte 0x3
+ 48867 10f3b 91 .byte 0x91
+ 48868 10f3c 807B .sleb128 -640
+ 48869 10f3e 33 .uleb128 0x33
+ 48870 10f3f 00000000 .quad .LBB4715
+ 48870 00000000
+ 48871 10f47 00000000 .quad .LBE4715
+ 48871 00000000
+ 48872 10f4f 34 .uleb128 0x34
+ 48873 10f50 0A0D0000 .long 0xd0a
+ 48874 10f54 03 .byte 0x3
+ 48875 10f55 91 .byte 0x91
+ 48876 10f56 D07B .sleb128 -560
+ 48877 10f58 34 .uleb128 0x34
+ 48878 10f59 150D0000 .long 0xd15
+ 48879 10f5d 03 .byte 0x3
+ 48880 10f5e 91 .byte 0x91
+ 48881 10f5f C07B .sleb128 -576
+ 48882 10f61 34 .uleb128 0x34
+ 48883 10f62 200D0000 .long 0xd20
+ 48884 10f66 03 .byte 0x3
+ 48885 10f67 91 .byte 0x91
+ 48886 10f68 B07B .sleb128 -592
+ 48887 10f6a 34 .uleb128 0x34
+ 48888 10f6b 2C0D0000 .long 0xd2c
+ 48889 10f6f 03 .byte 0x3
+ 48890 10f70 91 .byte 0x91
+ 48891 10f71 A07B .sleb128 -608
+ 48892 10f73 34 .uleb128 0x34
+ 48893 10f74 380D0000 .long 0xd38
+ 48894 10f78 03 .byte 0x3
+ 48895 10f79 91 .byte 0x91
+ 48896 10f7a 9C7B .sleb128 -612
+ 48897 10f7c 31 .uleb128 0x31
+ 48898 10f7d 4F0D0000 .long 0xd4f
+ 48899 10f81 00000000 .quad .LBB4716
+ 48899 00000000
+ 48900 10f89 00000000 .quad .LBE4716
+ 48900 00000000
+ 48901 10f91 02 .byte 0x2
+ 48902 10f92 5603 .value 0x356
+ 48903 10f94 AB0F0100 .long 0x10fab
+ 48904 10f98 32 .uleb128 0x32
+ 48905 10f99 6A0D0000 .long 0xd6a
+ 48906 10f9d 03 .byte 0x3
+ 48907 10f9e 91 .byte 0x91
+ 48908 10f9f E07B .sleb128 -544
+ 48909 10fa1 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 1189
+
+
+ 48910 10fa2 600D0000 .long 0xd60
+ 48911 10fa6 03 .byte 0x3
+ 48912 10fa7 91 .byte 0x91
+ 48913 10fa8 F07B .sleb128 -528
+ 48914 10faa 00 .byte 0x0
+ 48915 10fab 31 .uleb128 0x31
+ 48916 10fac 750D0000 .long 0xd75
+ 48917 10fb0 00000000 .quad .LBB4718
+ 48917 00000000
+ 48918 10fb8 00000000 .quad .LBE4718
+ 48918 00000000
+ 48919 10fc0 02 .byte 0x2
+ 48920 10fc1 5903 .value 0x359
+ 48921 10fc3 DA0F0100 .long 0x10fda
+ 48922 10fc7 32 .uleb128 0x32
+ 48923 10fc8 930D0000 .long 0xd93
+ 48924 10fcc 03 .byte 0x3
+ 48925 10fcd 91 .byte 0x91
+ 48926 10fce 8C7C .sleb128 -500
+ 48927 10fd0 32 .uleb128 0x32
+ 48928 10fd1 870D0000 .long 0xd87
+ 48929 10fd5 03 .byte 0x3
+ 48930 10fd6 91 .byte 0x91
+ 48931 10fd7 907C .sleb128 -496
+ 48932 10fd9 00 .byte 0x0
+ 48933 10fda 31 .uleb128 0x31
+ 48934 10fdb 4F0D0000 .long 0xd4f
+ 48935 10fdf 00000000 .quad .LBB4720
+ 48935 00000000
+ 48936 10fe7 00000000 .quad .LBE4720
+ 48936 00000000
+ 48937 10fef 02 .byte 0x2
+ 48938 10ff0 5B03 .value 0x35b
+ 48939 10ff2 09100100 .long 0x11009
+ 48940 10ff6 32 .uleb128 0x32
+ 48941 10ff7 6A0D0000 .long 0xd6a
+ 48942 10ffb 03 .byte 0x3
+ 48943 10ffc 91 .byte 0x91
+ 48944 10ffd A07C .sleb128 -480
+ 48945 10fff 32 .uleb128 0x32
+ 48946 11000 600D0000 .long 0xd60
+ 48947 11004 03 .byte 0x3
+ 48948 11005 91 .byte 0x91
+ 48949 11006 B07C .sleb128 -464
+ 48950 11008 00 .byte 0x0
+ 48951 11009 31 .uleb128 0x31
+ 48952 1100a A00D0000 .long 0xda0
+ 48953 1100e 00000000 .quad .LBB4722
+ 48953 00000000
+ 48954 11016 00000000 .quad .LBE4722
+ 48954 00000000
+ 48955 1101e 02 .byte 0x2
+ 48956 1101f 6403 .value 0x364
+ 48957 11021 63100100 .long 0x11063
+ 48958 11025 32 .uleb128 0x32
+ 48959 11026 BE0D0000 .long 0xdbe
+ 48960 1102a 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1190
+
+
+ 48961 1102b 91 .byte 0x91
+ 48962 1102c C07C .sleb128 -448
+ 48963 1102e 32 .uleb128 0x32
+ 48964 1102f B20D0000 .long 0xdb2
+ 48965 11033 03 .byte 0x3
+ 48966 11034 91 .byte 0x91
+ 48967 11035 D07C .sleb128 -432
+ 48968 11037 35 .uleb128 0x35
+ 48969 11038 CB0D0000 .long 0xdcb
+ 48970 1103c 00000000 .quad .LBB4724
+ 48970 00000000
+ 48971 11044 00000000 .quad .LBE4724
+ 48971 00000000
+ 48972 1104c 02 .byte 0x2
+ 48973 1104d 7501 .value 0x175
+ 48974 1104f 32 .uleb128 0x32
+ 48975 11050 E90D0000 .long 0xde9
+ 48976 11054 03 .byte 0x3
+ 48977 11055 91 .byte 0x91
+ 48978 11056 E07C .sleb128 -416
+ 48979 11058 32 .uleb128 0x32
+ 48980 11059 DD0D0000 .long 0xddd
+ 48981 1105d 03 .byte 0x3
+ 48982 1105e 91 .byte 0x91
+ 48983 1105f F07C .sleb128 -400
+ 48984 11061 00 .byte 0x0
+ 48985 11062 00 .byte 0x0
+ 48986 11063 31 .uleb128 0x31
+ 48987 11064 FB0D0000 .long 0xdfb
+ 48988 11068 00000000 .quad .LBB4726
+ 48988 00000000
+ 48989 11070 00000000 .quad .LBE4726
+ 48989 00000000
+ 48990 11078 02 .byte 0x2
+ 48991 11079 6603 .value 0x366
+ 48992 1107b 92100100 .long 0x11092
+ 48993 1107f 32 .uleb128 0x32
+ 48994 11080 160E0000 .long 0xe16
+ 48995 11084 03 .byte 0x3
+ 48996 11085 91 .byte 0x91
+ 48997 11086 807D .sleb128 -384
+ 48998 11088 32 .uleb128 0x32
+ 48999 11089 0C0E0000 .long 0xe0c
+ 49000 1108d 03 .byte 0x3
+ 49001 1108e 91 .byte 0x91
+ 49002 1108f 907D .sleb128 -368
+ 49003 11091 00 .byte 0x0
+ 49004 11092 31 .uleb128 0x31
+ 49005 11093 A00D0000 .long 0xda0
+ 49006 11097 00000000 .quad .LBB4728
+ 49006 00000000
+ 49007 1109f 00000000 .quad .LBE4728
+ 49007 00000000
+ 49008 110a7 02 .byte 0x2
+ 49009 110a8 6803 .value 0x368
+ 49010 110aa EC100100 .long 0x110ec
+ 49011 110ae 32 .uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s page 1191
+
+
+ 49012 110af BE0D0000 .long 0xdbe
+ 49013 110b3 03 .byte 0x3
+ 49014 110b4 91 .byte 0x91
+ 49015 110b5 A07D .sleb128 -352
+ 49016 110b7 32 .uleb128 0x32
+ 49017 110b8 B20D0000 .long 0xdb2
+ 49018 110bc 03 .byte 0x3
+ 49019 110bd 91 .byte 0x91
+ 49020 110be B07D .sleb128 -336
+ 49021 110c0 35 .uleb128 0x35
+ 49022 110c1 CB0D0000 .long 0xdcb
+ 49023 110c5 00000000 .quad .LBB4730
+ 49023 00000000
+ 49024 110cd 00000000 .quad .LBE4730
+ 49024 00000000
+ 49025 110d5 02 .byte 0x2
+ 49026 110d6 7501 .value 0x175
+ 49027 110d8 32 .uleb128 0x32
+ 49028 110d9 E90D0000 .long 0xde9
+ 49029 110dd 03 .byte 0x3
+ 49030 110de 91 .byte 0x91
+ 49031 110df C07D .sleb128 -320
+ 49032 110e1 32 .uleb128 0x32
+ 49033 110e2 DD0D0000 .long 0xddd
+ 49034 110e6 03 .byte 0x3
+ 49035 110e7 91 .byte 0x91
+ 49036 110e8 D07D .sleb128 -304
+ 49037 110ea 00 .byte 0x0
+ 49038 110eb 00 .byte 0x0
+ 49039 110ec 31 .uleb128 0x31
+ 49040 110ed FB0D0000 .long 0xdfb
+ 49041 110f1 00000000 .quad .LBB4732
+ 49041 00000000
+ 49042 110f9 00000000 .quad .LBE4732
+ 49042 00000000
+ 49043 11101 02 .byte 0x2
+ 49044 11102 6A03 .value 0x36a
+ 49045 11104 1B110100 .long 0x1111b
+ 49046 11108 32 .uleb128 0x32
+ 49047 11109 160E0000 .long 0xe16
+ 49048 1110d 03 .byte 0x3
+ 49049 1110e 91 .byte 0x91
+ 49050 1110f E07D .sleb128 -288
+ 49051 11111 32 .uleb128 0x32
+ 49052 11112 0C0E0000 .long 0xe0c
+ 49053 11116 03 .byte 0x3
+ 49054 11117 91 .byte 0x91
+ 49055 11118 F07D .sleb128 -272
+ 49056 1111a 00 .byte 0x0
+ 49057 1111b 31 .uleb128 0x31
+ 49058 1111c 210E0000 .long 0xe21
+ 49059 11120 00000000 .quad .LBB4734
+ 49059 00000000
+ 49060 11128 00000000 .quad .LBE4734
+ 49060 00000000
+ 49061 11130 02 .byte 0x2
+ 49062 11131 6C03 .value 0x36c
+
GAS LISTING /tmp/ccjbMjHD.s page 1192
+
+
+ 49063 11133 4A110100 .long 0x1114a
+ 49064 11137 32 .uleb128 0x32
+ 49065 11138 3E0E0000 .long 0xe3e
+ 49066 1113c 03 .byte 0x3
+ 49067 1113d 91 .byte 0x91
+ 49068 1113e 807E .sleb128 -256
+ 49069 11140 32 .uleb128 0x32
+ 49070 11141 330E0000 .long 0xe33
+ 49071 11145 03 .byte 0x3
+ 49072 11146 91 .byte 0x91
+ 49073 11147 907E .sleb128 -240
+ 49074 11149 00 .byte 0x0
+ 49075 1114a 35 .uleb128 0x35
+ 49076 1114b 4F0D0000 .long 0xd4f
+ 49077 1114f 00000000 .quad .LBB4736
+ 49077 00000000
+ 49078 11157 00000000 .quad .LBE4736
+ 49078 00000000
+ 49079 1115f 02 .byte 0x2
+ 49080 11160 6E03 .value 0x36e
+ 49081 11162 32 .uleb128 0x32
+ 49082 11163 6A0D0000 .long 0xd6a
+ 49083 11167 03 .byte 0x3
+ 49084 11168 91 .byte 0x91
+ 49085 11169 A07E .sleb128 -224
+ 49086 1116b 32 .uleb128 0x32
+ 49087 1116c 600D0000 .long 0xd60
+ 49088 11170 03 .byte 0x3
+ 49089 11171 91 .byte 0x91
+ 49090 11172 B07E .sleb128 -208
+ 49091 11174 00 .byte 0x0
+ 49092 11175 00 .byte 0x0
+ 49093 11176 00 .byte 0x0
+ 49094 11177 00 .byte 0x0
+ 49095 11178 36 .uleb128 0x36
+ 49096 11179 00000000 .quad .LBB4738
+ 49096 00000000
+ 49097 11181 00000000 .quad .LBE4738
+ 49097 00000000
+ 49098 11189 97110100 .long 0x11197
+ 49099 1118d 34 .uleb128 0x34
+ 49100 1118e D7FC0000 .long 0xfcd7
+ 49101 11192 03 .byte 0x3
+ 49102 11193 91 .byte 0x91
+ 49103 11194 B067 .sleb128 -3152
+ 49104 11196 00 .byte 0x0
+ 49105 11197 31 .uleb128 0x31
+ 49106 11198 57FC0000 .long 0xfc57
+ 49107 1119c 00000000 .quad .LBB4739
+ 49107 00000000
+ 49108 111a4 00000000 .quad .LBE4739
+ 49108 00000000
+ 49109 111ac 02 .byte 0x2
+ 49110 111ad C708 .value 0x8c7
+ 49111 111af 34120100 .long 0x11234
+ 49112 111b3 32 .uleb128 0x32
+ 49113 111b4 69FC0000 .long 0xfc69
+
GAS LISTING /tmp/ccjbMjHD.s page 1193
+
+
+ 49114 111b8 03 .byte 0x3
+ 49115 111b9 91 .byte 0x91
+ 49116 111ba C07E .sleb128 -192
+ 49117 111bc 33 .uleb128 0x33
+ 49118 111bd 00000000 .quad .LBB4740
+ 49118 00000000
+ 49119 111c5 00000000 .quad .LBE4740
+ 49119 00000000
+ 49120 111cd 34 .uleb128 0x34
+ 49121 111ce 75FC0000 .long 0xfc75
+ 49122 111d2 09 .byte 0x9
+ 49123 111d3 03 .byte 0x3
+ 49124 111d4 00000000 .quad InvShiftRowTable.7367
+ 49124 00000000
+ 49125 111dc 35 .uleb128 0x35
+ 49126 111dd A00D0000 .long 0xda0
+ 49127 111e1 00000000 .quad .LBB4741
+ 49127 00000000
+ 49128 111e9 00000000 .quad .LBE4741
+ 49128 00000000
+ 49129 111f1 02 .byte 0x2
+ 49130 111f2 6402 .value 0x264
+ 49131 111f4 32 .uleb128 0x32
+ 49132 111f5 BE0D0000 .long 0xdbe
+ 49133 111f9 03 .byte 0x3
+ 49134 111fa 91 .byte 0x91
+ 49135 111fb D07E .sleb128 -176
+ 49136 111fd 32 .uleb128 0x32
+ 49137 111fe B20D0000 .long 0xdb2
+ 49138 11202 03 .byte 0x3
+ 49139 11203 91 .byte 0x91
+ 49140 11204 E07E .sleb128 -160
+ 49141 11206 35 .uleb128 0x35
+ 49142 11207 CB0D0000 .long 0xdcb
+ 49143 1120b 00000000 .quad .LBB4743
+ 49143 00000000
+ 49144 11213 00000000 .quad .LBE4743
+ 49144 00000000
+ 49145 1121b 02 .byte 0x2
+ 49146 1121c 7501 .value 0x175
+ 49147 1121e 32 .uleb128 0x32
+ 49148 1121f E90D0000 .long 0xde9
+ 49149 11223 03 .byte 0x3
+ 49150 11224 91 .byte 0x91
+ 49151 11225 F07E .sleb128 -144
+ 49152 11227 32 .uleb128 0x32
+ 49153 11228 DD0D0000 .long 0xddd
+ 49154 1122c 03 .byte 0x3
+ 49155 1122d 91 .byte 0x91
+ 49156 1122e 807F .sleb128 -128
+ 49157 11230 00 .byte 0x0
+ 49158 11231 00 .byte 0x0
+ 49159 11232 00 .byte 0x0
+ 49160 11233 00 .byte 0x0
+ 49161 11234 36 .uleb128 0x36
+ 49162 11235 00000000 .quad .LBB4745
+ 49162 00000000
+
GAS LISTING /tmp/ccjbMjHD.s page 1194
+
+
+ 49163 1123d 00000000 .quad .LBE4745
+ 49163 00000000
+ 49164 11245 53120100 .long 0x11253
+ 49165 11249 34 .uleb128 0x34
+ 49166 1124a E7FC0000 .long 0xfce7
+ 49167 1124e 03 .byte 0x3
+ 49168 1124f 91 .byte 0x91
+ 49169 11250 A067 .sleb128 -3168
+ 49170 11252 00 .byte 0x0
+ 49171 11253 31 .uleb128 0x31
+ 49172 11254 34E90000 .long 0xe934
+ 49173 11258 00000000 .quad .LBB4746
+ 49173 00000000
+ 49174 11260 00000000 .quad .LBE4746
+ 49174 00000000
+ 49175 11268 02 .byte 0x2
+ 49176 11269 CB08 .value 0x8cb
+ 49177 1126b AC120100 .long 0x112ac
+ 49178 1126f 32 .uleb128 0x32
+ 49179 11270 52E90000 .long 0xe952
+ 49180 11274 03 .byte 0x3
+ 49181 11275 91 .byte 0x91
+ 49182 11276 907F .sleb128 -112
+ 49183 11278 32 .uleb128 0x32
+ 49184 11279 46E90000 .long 0xe946
+ 49185 1127d 03 .byte 0x3
+ 49186 1127e 91 .byte 0x91
+ 49187 1127f A07F .sleb128 -96
+ 49188 11281 35 .uleb128 0x35
+ 49189 11282 860E0000 .long 0xe86
+ 49190 11286 00000000 .quad .LBB4748
+ 49190 00000000
+ 49191 1128e 00000000 .quad .LBE4748
+ 49191 00000000
+ 49192 11296 02 .byte 0x2
+ 49193 11297 2302 .value 0x223
+ 49194 11299 32 .uleb128 0x32
+ 49195 1129a A10E0000 .long 0xea1
+ 49196 1129e 03 .byte 0x3
+ 49197 1129f 91 .byte 0x91
+ 49198 112a0 B07F .sleb128 -80
+ 49199 112a2 32 .uleb128 0x32
+ 49200 112a3 970E0000 .long 0xe97
+ 49201 112a7 02 .byte 0x2
+ 49202 112a8 91 .byte 0x91
+ 49203 112a9 40 .sleb128 -64
+ 49204 112aa 00 .byte 0x0
+ 49205 112ab 00 .byte 0x0
+ 49206 112ac 36 .uleb128 0x36
+ 49207 112ad 00000000 .quad .LBB4750
+ 49207 00000000
+ 49208 112b5 00000000 .quad .LBE4750
+ 49208 00000000
+ 49209 112bd CB120100 .long 0x112cb
+ 49210 112c1 34 .uleb128 0x34
+ 49211 112c2 F7FC0000 .long 0xfcf7
+ 49212 112c6 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1195
+
+
+ 49213 112c7 91 .byte 0x91
+ 49214 112c8 9067 .sleb128 -3184
+ 49215 112ca 00 .byte 0x0
+ 49216 112cb 33 .uleb128 0x33
+ 49217 112cc 00000000 .quad .LBB4751
+ 49217 00000000
+ 49218 112d4 00000000 .quad .LBE4751
+ 49218 00000000
+ 49219 112dc 34 .uleb128 0x34
+ 49220 112dd 03FD0000 .long 0xfd03
+ 49221 112e1 03 .byte 0x3
+ 49222 112e2 91 .byte 0x91
+ 49223 112e3 8067 .sleb128 -3200
+ 49224 112e5 00 .byte 0x0
+ 49225 112e6 00 .byte 0x0
+ 49226 112e7 00 .byte 0x0
+ 49227 112e8 2D .uleb128 0x2d
+ 49228 112e9 00000000 .long .LASF395
+ 49229 112ed 02 .byte 0x2
+ 49230 112ee 0309 .value 0x903
+ 49231 112f0 01 .byte 0x1
+ 49232 112f1 00000000 .quad .LFB660
+ 49232 00000000
+ 49233 112f9 00000000 .quad .LFE660
+ 49233 00000000
+ 49234 11301 00000000 .long .LLST10
+ 49235 11305 19130100 .long 0x11319
+ 49236 11309 2E .uleb128 0x2e
+ 49237 1130a 00000000 .long .LASF396
+ 49238 1130e 02 .byte 0x2
+ 49239 1130f 0309 .value 0x903
+ 49240 11311 D2030000 .long 0x3d2
+ 49241 11315 02 .byte 0x2
+ 49242 11316 91 .byte 0x91
+ 49243 11317 68 .sleb128 -24
+ 49244 11318 00 .byte 0x0
+ 49245 11319 3A .uleb128 0x3a
+ 49246 1131a 00000000 .long .LASF397
+ 49247 1131e 02 .byte 0x2
+ 49248 1131f 0D09 .value 0x90d
+ 49249 11321 6D000000 .long 0x6d
+ 49250 11325 00000000 .quad .LFB661
+ 49250 00000000
+ 49251 1132d 00000000 .quad .LFE661
+ 49251 00000000
+ 49252 11335 00000000 .long .LLST11
+ 49253 11339 3A .uleb128 0x3a
+ 49254 1133a 00000000 .long .LASF398
+ 49255 1133e 02 .byte 0x2
+ 49256 1133f 1C09 .value 0x91c
+ 49257 11341 6D000000 .long 0x6d
+ 49258 11345 00000000 .quad .LFB662
+ 49258 00000000
+ 49259 1134d 00000000 .quad .LFE662
+ 49259 00000000
+ 49260 11355 00000000 .long .LLST12
+ 49261 11359 39 .uleb128 0x39
+
GAS LISTING /tmp/ccjbMjHD.s page 1196
+
+
+ 49262 1135a 00000000 .long .LASF399
+ 49263 1135e 02 .byte 0x2
+ 49264 1135f 2909 .value 0x929
+ 49265 11361 01 .byte 0x1
+ 49266 11362 91000000 .long 0x91
+ 49267 11366 00000000 .quad .LFB663
+ 49267 00000000
+ 49268 1136e 00000000 .quad .LFE663
+ 49268 00000000
+ 49269 11376 00000000 .long .LLST13
+ 49270 1137a F1130100 .long 0x113f1
+ 49271 1137e 2E .uleb128 0x2e
+ 49272 1137f 00000000 .long .LASF400
+ 49273 11383 02 .byte 0x2
+ 49274 11384 2909 .value 0x929
+ 49275 11386 C4000000 .long 0xc4
+ 49276 1138a 02 .byte 0x2
+ 49277 1138b 91 .byte 0x91
+ 49278 1138c 58 .sleb128 -40
+ 49279 1138d 2E .uleb128 0x2e
+ 49280 1138e 00000000 .long .LASF401
+ 49281 11392 02 .byte 0x2
+ 49282 11393 2909 .value 0x929
+ 49283 11395 B9000000 .long 0xb9
+ 49284 11399 02 .byte 0x2
+ 49285 1139a 91 .byte 0x91
+ 49286 1139b 50 .sleb128 -48
+ 49287 1139c 2E .uleb128 0x2e
+ 49288 1139d 00000000 .long .LASF402
+ 49289 113a1 02 .byte 0x2
+ 49290 113a2 2A09 .value 0x92a
+ 49291 113a4 6D000000 .long 0x6d
+ 49292 113a8 02 .byte 0x2
+ 49293 113a9 91 .byte 0x91
+ 49294 113aa 4C .sleb128 -52
+ 49295 113ab 37 .uleb128 0x37
+ 49296 113ac 726300 .string "rc"
+ 49297 113af 02 .byte 0x2
+ 49298 113b0 2C09 .value 0x92c
+ 49299 113b2 91000000 .long 0x91
+ 49300 113b6 02 .byte 0x2
+ 49301 113b7 91 .byte 0x91
+ 49302 113b8 64 .sleb128 -28
+ 49303 113b9 37 .uleb128 0x37
+ 49304 113ba 6B657900 .string "key"
+ 49305 113be 02 .byte 0x2
+ 49306 113bf 2D09 .value 0x92d
+ 49307 113c1 F1130100 .long 0x113f1
+ 49308 113c5 02 .byte 0x2
+ 49309 113c6 91 .byte 0x91
+ 49310 113c7 68 .sleb128 -24
+ 49311 113c8 3B .uleb128 0x3b
+ 49312 113c9 00000000 .long .LASF366
+ 49313 113cd 07140100 .long 0x11407
+ 49314 113d1 01 .byte 0x1
+ 49315 113d2 09 .byte 0x9
+ 49316 113d3 03 .byte 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1197
+
+
+ 49317 113d4 00000000 .quad __PRETTY_FUNCTION__.9026
+ 49317 00000000
+ 49318 113dc 3B .uleb128 0x3b
+ 49319 113dd 00000000 .long .LASF403
+ 49320 113e1 0C140100 .long 0x1140c
+ 49321 113e5 01 .byte 0x1
+ 49322 113e6 09 .byte 0x9
+ 49323 113e7 03 .byte 0x3
+ 49324 113e8 00000000 .quad __func__.9027
+ 49324 00000000
+ 49325 113f0 00 .byte 0x0
+ 49326 113f1 07 .uleb128 0x7
+ 49327 113f2 08 .byte 0x8
+ 49328 113f3 6D040000 .long 0x46d
+ 49329 113f7 19 .uleb128 0x19
+ 49330 113f8 9F000000 .long 0x9f
+ 49331 113fc 07140100 .long 0x11407
+ 49332 11400 1A .uleb128 0x1a
+ 49333 11401 9C000000 .long 0x9c
+ 49334 11405 22 .byte 0x22
+ 49335 11406 00 .byte 0x0
+ 49336 11407 06 .uleb128 0x6
+ 49337 11408 F7130100 .long 0x113f7
+ 49338 1140c 06 .uleb128 0x6
+ 49339 1140d F7130100 .long 0x113f7
+ 49340 11411 39 .uleb128 0x39
+ 49341 11412 00000000 .long .LASF404
+ 49342 11416 02 .byte 0x2
+ 49343 11417 5409 .value 0x954
+ 49344 11419 01 .byte 0x1
+ 49345 1141a 91000000 .long 0x91
+ 49346 1141e 00000000 .quad .LFB664
+ 49346 00000000
+ 49347 11426 00000000 .quad .LFE664
+ 49347 00000000
+ 49348 1142e 00000000 .long .LLST14
+ 49349 11432 A6140100 .long 0x114a6
+ 49350 11436 2E .uleb128 0x2e
+ 49351 11437 00000000 .long .LASF405
+ 49352 1143b 02 .byte 0x2
+ 49353 1143c 5409 .value 0x954
+ 49354 1143e C4000000 .long 0xc4
+ 49355 11442 03 .byte 0x3
+ 49356 11443 91 .byte 0x91
+ 49357 11444 D87D .sleb128 -296
+ 49358 11446 2E .uleb128 0x2e
+ 49359 11447 00000000 .long .LASF401
+ 49360 1144b 02 .byte 0x2
+ 49361 1144c 5509 .value 0x955
+ 49362 1144e B9000000 .long 0xb9
+ 49363 11452 03 .byte 0x3
+ 49364 11453 91 .byte 0x91
+ 49365 11454 D07D .sleb128 -304
+ 49366 11456 2E .uleb128 0x2e
+ 49367 11457 00000000 .long .LASF402
+ 49368 1145b 02 .byte 0x2
+ 49369 1145c 5609 .value 0x956
+
GAS LISTING /tmp/ccjbMjHD.s page 1198
+
+
+ 49370 1145e 6D000000 .long 0x6d
+ 49371 11462 03 .byte 0x3
+ 49372 11463 91 .byte 0x91
+ 49373 11464 CC7D .sleb128 -308
+ 49374 11466 30 .uleb128 0x30
+ 49375 11467 00000000 .long .LASF400
+ 49376 1146b 02 .byte 0x2
+ 49377 1146c 5809 .value 0x958
+ 49378 1146e 6D040000 .long 0x46d
+ 49379 11472 03 .byte 0x3
+ 49380 11473 91 .byte 0x91
+ 49381 11474 E07D .sleb128 -288
+ 49382 11476 37 .uleb128 0x37
+ 49383 11477 726300 .string "rc"
+ 49384 1147a 02 .byte 0x2
+ 49385 1147b 5909 .value 0x959
+ 49386 1147d 91000000 .long 0x91
+ 49387 11481 02 .byte 0x2
+ 49388 11482 91 .byte 0x91
+ 49389 11483 64 .sleb128 -28
+ 49390 11484 33 .uleb128 0x33
+ 49391 11485 00000000 .quad .LBB4752
+ 49391 00000000
+ 49392 1148d 00000000 .quad .LBE4752
+ 49392 00000000
+ 49393 11495 37 .uleb128 0x37
+ 49394 11496 6B657900 .string "key"
+ 49395 1149a 02 .byte 0x2
+ 49396 1149b 5E09 .value 0x95e
+ 49397 1149d F1130100 .long 0x113f1
+ 49398 114a1 02 .byte 0x2
+ 49399 114a2 91 .byte 0x91
+ 49400 114a3 68 .sleb128 -24
+ 49401 114a4 00 .byte 0x0
+ 49402 114a5 00 .byte 0x0
+ 49403 114a6 39 .uleb128 0x39
+ 49404 114a7 00000000 .long .LASF406
+ 49405 114ab 02 .byte 0x2
+ 49406 114ac 8009 .value 0x980
+ 49407 114ae 01 .byte 0x1
+ 49408 114af B3010000 .long 0x1b3
+ 49409 114b3 00000000 .quad .LFB665
+ 49409 00000000
+ 49410 114bb 00000000 .quad .LFE665
+ 49410 00000000
+ 49411 114c3 00000000 .long .LLST15
+ 49412 114c7 0D150100 .long 0x1150d
+ 49413 114cb 2E .uleb128 0x2e
+ 49414 114cc 00000000 .long .LASF67
+ 49415 114d0 02 .byte 0x2
+ 49416 114d1 8009 .value 0x980
+ 49417 114d3 B3010000 .long 0x1b3
+ 49418 114d7 02 .byte 0x2
+ 49419 114d8 91 .byte 0x91
+ 49420 114d9 50 .sleb128 -48
+ 49421 114da 2E .uleb128 0x2e
+ 49422 114db 00000000 .long .LASF400
+
GAS LISTING /tmp/ccjbMjHD.s page 1199
+
+
+ 49423 114df 02 .byte 0x2
+ 49424 114e0 8109 .value 0x981
+ 49425 114e2 D3000000 .long 0xd3
+ 49426 114e6 02 .byte 0x2
+ 49427 114e7 91 .byte 0x91
+ 49428 114e8 48 .sleb128 -56
+ 49429 114e9 37 .uleb128 0x37
+ 49430 114ea 6B657900 .string "key"
+ 49431 114ee 02 .byte 0x2
+ 49432 114ef 8309 .value 0x983
+ 49433 114f1 0D150100 .long 0x1150d
+ 49434 114f5 02 .byte 0x2
+ 49435 114f6 91 .byte 0x91
+ 49436 114f7 68 .sleb128 -24
+ 49437 114f8 3B .uleb128 0x3b
+ 49438 114f9 00000000 .long .LASF366
+ 49439 114fd 28150100 .long 0x11528
+ 49440 11501 01 .byte 0x1
+ 49441 11502 09 .byte 0x9
+ 49442 11503 03 .byte 0x3
+ 49443 11504 00000000 .quad __PRETTY_FUNCTION__.9063
+ 49443 00000000
+ 49444 1150c 00 .byte 0x0
+ 49445 1150d 07 .uleb128 0x7
+ 49446 1150e 08 .byte 0x8
+ 49447 1150f 13150100 .long 0x11513
+ 49448 11513 06 .uleb128 0x6
+ 49449 11514 6D040000 .long 0x46d
+ 49450 11518 19 .uleb128 0x19
+ 49451 11519 9F000000 .long 0x9f
+ 49452 1151d 28150100 .long 0x11528
+ 49453 11521 1A .uleb128 0x1a
+ 49454 11522 9C000000 .long 0x9c
+ 49455 11526 1C .byte 0x1c
+ 49456 11527 00 .byte 0x0
+ 49457 11528 06 .uleb128 0x6
+ 49458 11529 18150100 .long 0x11518
+ 49459 1152d 39 .uleb128 0x39
+ 49460 1152e 00000000 .long .LASF407
+ 49461 11532 02 .byte 0x2
+ 49462 11533 A409 .value 0x9a4
+ 49463 11535 01 .byte 0x1
+ 49464 11536 B3010000 .long 0x1b3
+ 49465 1153a 00000000 .quad .LFB666
+ 49465 00000000
+ 49466 11542 00000000 .quad .LFE666
+ 49466 00000000
+ 49467 1154a 00000000 .long .LLST16
+ 49468 1154e 94150100 .long 0x11594
+ 49469 11552 2E .uleb128 0x2e
+ 49470 11553 00000000 .long .LASF67
+ 49471 11557 02 .byte 0x2
+ 49472 11558 A409 .value 0x9a4
+ 49473 1155a B3010000 .long 0x1b3
+ 49474 1155e 02 .byte 0x2
+ 49475 1155f 91 .byte 0x91
+ 49476 11560 50 .sleb128 -48
+
GAS LISTING /tmp/ccjbMjHD.s page 1200
+
+
+ 49477 11561 2E .uleb128 0x2e
+ 49478 11562 00000000 .long .LASF405
+ 49479 11566 02 .byte 0x2
+ 49480 11567 A509 .value 0x9a5
+ 49481 11569 D3000000 .long 0xd3
+ 49482 1156d 02 .byte 0x2
+ 49483 1156e 91 .byte 0x91
+ 49484 1156f 48 .sleb128 -56
+ 49485 11570 37 .uleb128 0x37
+ 49486 11571 6B657900 .string "key"
+ 49487 11575 02 .byte 0x2
+ 49488 11576 A709 .value 0x9a7
+ 49489 11578 0D150100 .long 0x1150d
+ 49490 1157c 02 .byte 0x2
+ 49491 1157d 91 .byte 0x91
+ 49492 1157e 68 .sleb128 -24
+ 49493 1157f 3B .uleb128 0x3b
+ 49494 11580 00000000 .long .LASF366
+ 49495 11584 94150100 .long 0x11594
+ 49496 11588 01 .byte 0x1
+ 49497 11589 09 .byte 0x9
+ 49498 1158a 03 .byte 0x3
+ 49499 1158b 00000000 .quad __PRETTY_FUNCTION__.9084
+ 49499 00000000
+ 49500 11593 00 .byte 0x0
+ 49501 11594 06 .uleb128 0x6
+ 49502 11595 18150100 .long 0x11518
+ 49503 11599 3C .uleb128 0x3c
+ 49504 1159a 00000000 .long .LASF408
+ 49505 1159e 02 .byte 0x2
+ 49506 1159f CC09 .value 0x9cc
+ 49507 115a1 24160100 .long 0x11624
+ 49508 115a5 00000000 .quad .LFB667
+ 49508 00000000
+ 49509 115ad 00000000 .quad .LFE667
+ 49509 00000000
+ 49510 115b5 00000000 .long .LLST17
+ 49511 115b9 24160100 .long 0x11624
+ 49512 115bd 30 .uleb128 0x30
+ 49513 115be 00000000 .long .LASF409
+ 49514 115c2 02 .byte 0x2
+ 49515 115c3 CE09 .value 0x9ce
+ 49516 115c5 6D000000 .long 0x6d
+ 49517 115c9 02 .byte 0x2
+ 49518 115ca 91 .byte 0x91
+ 49519 115cb 48 .sleb128 -56
+ 49520 115cc 37 .uleb128 0x37
+ 49521 115cd 6100 .string "a"
+ 49522 115cf 02 .byte 0x2
+ 49523 115d0 CE09 .value 0x9ce
+ 49524 115d2 6D000000 .long 0x6d
+ 49525 115d6 02 .byte 0x2
+ 49526 115d7 91 .byte 0x91
+ 49527 115d8 4C .sleb128 -52
+ 49528 115d9 37 .uleb128 0x37
+ 49529 115da 6200 .string "b"
+ 49530 115dc 02 .byte 0x2
+
GAS LISTING /tmp/ccjbMjHD.s page 1201
+
+
+ 49531 115dd CE09 .value 0x9ce
+ 49532 115df 6D000000 .long 0x6d
+ 49533 115e3 02 .byte 0x2
+ 49534 115e4 91 .byte 0x91
+ 49535 115e5 50 .sleb128 -48
+ 49536 115e6 37 .uleb128 0x37
+ 49537 115e7 6300 .string "c"
+ 49538 115e9 02 .byte 0x2
+ 49539 115ea CE09 .value 0x9ce
+ 49540 115ec 6D000000 .long 0x6d
+ 49541 115f0 02 .byte 0x2
+ 49542 115f1 91 .byte 0x91
+ 49543 115f2 54 .sleb128 -44
+ 49544 115f3 37 .uleb128 0x37
+ 49545 115f4 6400 .string "d"
+ 49546 115f6 02 .byte 0x2
+ 49547 115f7 CE09 .value 0x9ce
+ 49548 115f9 6D000000 .long 0x6d
+ 49549 115fd 02 .byte 0x2
+ 49550 115fe 91 .byte 0x91
+ 49551 115ff 58 .sleb128 -40
+ 49552 11600 37 .uleb128 0x37
+ 49553 11601 72657400 .string "ret"
+ 49554 11605 02 .byte 0x2
+ 49555 11606 CF09 .value 0x9cf
+ 49556 11608 24160100 .long 0x11624
+ 49557 1160c 02 .byte 0x2
+ 49558 1160d 91 .byte 0x91
+ 49559 1160e 5F .sleb128 -33
+ 49560 1160f 3B .uleb128 0x3b
+ 49561 11610 00000000 .long .LASF403
+ 49562 11614 3B160100 .long 0x1163b
+ 49563 11618 01 .byte 0x1
+ 49564 11619 09 .byte 0x9
+ 49565 1161a 03 .byte 0x3
+ 49566 1161b 00000000 .quad __func__.9108
+ 49566 00000000
+ 49567 11623 00 .byte 0x0
+ 49568 11624 02 .uleb128 0x2
+ 49569 11625 01 .byte 0x1
+ 49570 11626 02 .byte 0x2
+ 49571 11627 00000000 .long .LASF410
+ 49572 1162b 19 .uleb128 0x19
+ 49573 1162c 9F000000 .long 0x9f
+ 49574 11630 3B160100 .long 0x1163b
+ 49575 11634 1A .uleb128 0x1a
+ 49576 11635 9C000000 .long 0x9c
+ 49577 11639 25 .byte 0x25
+ 49578 1163a 00 .byte 0x0
+ 49579 1163b 06 .uleb128 0x6
+ 49580 1163c 2B160100 .long 0x1162b
+ 49581 11640 3D .uleb128 0x3d
+ 49582 11641 01 .byte 0x1
+ 49583 11642 00000000 .long .LASF428
+ 49584 11646 02 .byte 0x2
+ 49585 11647 390A .value 0xa39
+ 49586 11649 01 .byte 0x1
+
GAS LISTING /tmp/ccjbMjHD.s page 1202
+
+
+ 49587 1164a 91000000 .long 0x91
+ 49588 1164e 00000000 .quad .LFB668
+ 49588 00000000
+ 49589 11656 00000000 .quad .LFE668
+ 49589 00000000
+ 49590 1165e 00000000 .long .LLST18
+ 49591 11662 AC160100 .long 0x116ac
+ 49592 11666 2E .uleb128 0x2e
+ 49593 11667 00000000 .long .LASF411
+ 49594 1166b 02 .byte 0x2
+ 49595 1166c 390A .value 0xa39
+ 49596 1166e AC160100 .long 0x116ac
+ 49597 11672 02 .byte 0x2
+ 49598 11673 91 .byte 0x91
+ 49599 11674 58 .sleb128 -40
+ 49600 11675 37 .uleb128 0x37
+ 49601 11676 726300 .string "rc"
+ 49602 11679 02 .byte 0x2
+ 49603 1167a 3B0A .value 0xa3b
+ 49604 1167c 91000000 .long 0x91
+ 49605 11680 02 .byte 0x2
+ 49606 11681 91 .byte 0x91
+ 49607 11682 6C .sleb128 -20
+ 49608 11683 3B .uleb128 0x3b
+ 49609 11684 00000000 .long .LASF403
+ 49610 11688 C8160100 .long 0x116c8
+ 49611 1168c 01 .byte 0x1
+ 49612 1168d 09 .byte 0x9
+ 49613 1168e 03 .byte 0x3
+ 49614 1168f 00000000 .quad __func__.9198
+ 49614 00000000
+ 49615 11697 3B .uleb128 0x3b
+ 49616 11698 00000000 .long .LASF366
+ 49617 1169c CD160100 .long 0x116cd
+ 49618 116a0 01 .byte 0x1
+ 49619 116a1 09 .byte 0x9
+ 49620 116a2 03 .byte 0x3
+ 49621 116a3 00000000 .quad __PRETTY_FUNCTION__.9199
+ 49621 00000000
+ 49622 116ab 00 .byte 0x0
+ 49623 116ac 07 .uleb128 0x7
+ 49624 116ad 08 .byte 0x8
+ 49625 116ae B2160100 .long 0x116b2
+ 49626 116b2 07 .uleb128 0x7
+ 49627 116b3 08 .byte 0x8
+ 49628 116b4 34050000 .long 0x534
+ 49629 116b8 19 .uleb128 0x19
+ 49630 116b9 9F000000 .long 0x9f
+ 49631 116bd C8160100 .long 0x116c8
+ 49632 116c1 1A .uleb128 0x1a
+ 49633 116c2 9C000000 .long 0x9c
+ 49634 116c6 19 .byte 0x19
+ 49635 116c7 00 .byte 0x0
+ 49636 116c8 06 .uleb128 0x6
+ 49637 116c9 B8160100 .long 0x116b8
+ 49638 116cd 06 .uleb128 0x6
+ 49639 116ce B8160100 .long 0x116b8
+
GAS LISTING /tmp/ccjbMjHD.s page 1203
+
+
+ 49640 116d2 3E .uleb128 0x3e
+ 49641 116d3 00000000 .long .LASF412
+ 49642 116d7 02 .byte 0x2
+ 49643 116d8 53 .byte 0x53
+ 49644 116d9 4A0D0000 .long 0xd4a
+ 49645 116dd 09 .byte 0x9
+ 49646 116de 03 .byte 0x3
+ 49647 116df 00000000 .quad vec_00
+ 49647 00000000
+ 49648 116e7 3E .uleb128 0x3e
+ 49649 116e8 00000000 .long .LASF413
+ 49650 116ec 02 .byte 0x2
+ 49651 116ed 57 .byte 0x57
+ 49652 116ee 4A0D0000 .long 0xd4a
+ 49653 116f2 09 .byte 0x9
+ 49654 116f3 03 .byte 0x3
+ 49655 116f4 00000000 .quad vec_01
+ 49655 00000000
+ 49656 116fc 3E .uleb128 0x3e
+ 49657 116fd 00000000 .long .LASF414
+ 49658 11701 02 .byte 0x2
+ 49659 11702 5B .byte 0x5b
+ 49660 11703 4A0D0000 .long 0xd4a
+ 49661 11707 09 .byte 0x9
+ 49662 11708 03 .byte 0x3
+ 49663 11709 00000000 .quad vec_0F
+ 49663 00000000
+ 49664 11711 3E .uleb128 0x3e
+ 49665 11712 00000000 .long .LASF415
+ 49666 11716 02 .byte 0x2
+ 49667 11717 5F .byte 0x5f
+ 49668 11718 4A0D0000 .long 0xd4a
+ 49669 1171c 09 .byte 0x9
+ 49670 1171d 03 .byte 0x3
+ 49671 1171e 00000000 .quad vec_10
+ 49671 00000000
+ 49672 11726 19 .uleb128 0x19
+ 49673 11727 FE030000 .long 0x3fe
+ 49674 1172b 36170100 .long 0x11736
+ 49675 1172f 1A .uleb128 0x1a
+ 49676 11730 9C000000 .long 0x9c
+ 49677 11734 FF .byte 0xff
+ 49678 11735 00 .byte 0x0
+ 49679 11736 30 .uleb128 0x30
+ 49680 11737 00000000 .long .LASF416
+ 49681 1173b 02 .byte 0x2
+ 49682 1173c AA02 .value 0x2aa
+ 49683 1173e 4C170100 .long 0x1174c
+ 49684 11742 09 .byte 0x9
+ 49685 11743 03 .byte 0x3
+ 49686 11744 00000000 .quad KAESBlockCipherVecRegRijndaelSBox
+ 49686 00000000
+ 49687 1174c 06 .uleb128 0x6
+ 49688 1174d 26170100 .long 0x11726
+ 49689 11751 19 .uleb128 0x19
+ 49690 11752 B3010000 .long 0x1b3
+ 49691 11756 61170100 .long 0x11761
+
GAS LISTING /tmp/ccjbMjHD.s page 1204
+
+
+ 49692 1175a 1A .uleb128 0x1a
+ 49693 1175b 9C000000 .long 0x9c
+ 49694 1175f 0F .byte 0xf
+ 49695 11760 00 .byte 0x0
+ 49696 11761 30 .uleb128 0x30
+ 49697 11762 00000000 .long .LASF417
+ 49698 11766 02 .byte 0x2
+ 49699 11767 1903 .value 0x319
+ 49700 11769 77170100 .long 0x11777
+ 49701 1176d 09 .byte 0x9
+ 49702 1176e 03 .byte 0x3
+ 49703 1176f 00000000 .quad KAESBlockCipherVecRegRijndaelSBoxV
+ 49703 00000000
+ 49704 11777 06 .uleb128 0x6
+ 49705 11778 51170100 .long 0x11751
+ 49706 1177c 30 .uleb128 0x30
+ 49707 1177d 00000000 .long .LASF418
+ 49708 11781 02 .byte 0x2
+ 49709 11782 2F03 .value 0x32f
+ 49710 11784 92170100 .long 0x11792
+ 49711 11788 09 .byte 0x9
+ 49712 11789 03 .byte 0x3
+ 49713 1178a 00000000 .quad KAESBlockCipherVecRegRijndaelInvSBoxV
+ 49713 00000000
+ 49714 11792 06 .uleb128 0x6
+ 49715 11793 51170100 .long 0x11751
+ 49716 11797 30 .uleb128 0x30
+ 49717 11798 00000000 .long .LASF419
+ 49718 1179c 02 .byte 0x2
+ 49719 1179d 4603 .value 0x346
+ 49720 1179f 4A0D0000 .long 0xd4a
+ 49721 117a3 09 .byte 0x9
+ 49722 117a4 03 .byte 0x3
+ 49723 117a5 00000000 .quad lo_filter
+ 49723 00000000
+ 49724 117ad 30 .uleb128 0x30
+ 49725 117ae 00000000 .long .LASF420
+ 49726 117b2 02 .byte 0x2
+ 49727 117b3 9703 .value 0x397
+ 49728 117b5 4A0D0000 .long 0xd4a
+ 49729 117b9 09 .byte 0x9
+ 49730 117ba 03 .byte 0x3
+ 49731 117bb 00000000 .quad FF_tab
+ 49731 00000000
+ 49732 117c3 19 .uleb128 0x19
+ 49733 117c4 FE030000 .long 0x3fe
+ 49734 117c8 D3170100 .long 0x117d3
+ 49735 117cc 1A .uleb128 0x1a
+ 49736 117cd 9C000000 .long 0x9c
+ 49737 117d1 07 .byte 0x7
+ 49738 117d2 00 .byte 0x0
+ 49739 117d3 30 .uleb128 0x30
+ 49740 117d4 00000000 .long .LASF421
+ 49741 117d8 02 .byte 0x2
+ 49742 117d9 DF03 .value 0x3df
+ 49743 117db C3170100 .long 0x117c3
+ 49744 117df 09 .byte 0x9
+
GAS LISTING /tmp/ccjbMjHD.s page 1205
+
+
+ 49745 117e0 03 .byte 0x3
+ 49746 117e1 00000000 .quad KAESBlockCipherVecRegFFtable
+ 49746 00000000
+ 49747 117e9 19 .uleb128 0x19
+ 49748 117ea 09040000 .long 0x409
+ 49749 117ee F9170100 .long 0x117f9
+ 49750 117f2 1A .uleb128 0x1a
+ 49751 117f3 9C000000 .long 0x9c
+ 49752 117f7 09 .byte 0x9
+ 49753 117f8 00 .byte 0x0
+ 49754 117f9 30 .uleb128 0x30
+ 49755 117fa 00000000 .long .LASF422
+ 49756 117fe 02 .byte 0x2
+ 49757 117ff 9E04 .value 0x49e
+ 49758 11801 0F180100 .long 0x1180f
+ 49759 11805 09 .byte 0x9
+ 49760 11806 03 .byte 0x3
+ 49761 11807 00000000 .quad KAESBlockCipherVecRegRcon
+ 49761 00000000
+ 49762 1180f 06 .uleb128 0x6
+ 49763 11810 E9170100 .long 0x117e9
+ 49764 11814 19 .uleb128 0x19
+ 49765 11815 9F000000 .long 0x9f
+ 49766 11819 24180100 .long 0x11824
+ 49767 1181d 1A .uleb128 0x1a
+ 49768 1181e 9C000000 .long 0x9c
+ 49769 11822 09 .byte 0x9
+ 49770 11823 00 .byte 0x0
+ 49771 11824 30 .uleb128 0x30
+ 49772 11825 00000000 .long .LASF423
+ 49773 11829 02 .byte 0x2
+ 49774 1182a F708 .value 0x8f7
+ 49775 1182c 3A180100 .long 0x1183a
+ 49776 11830 09 .byte 0x9
+ 49777 11831 03 .byte 0x3
+ 49778 11832 00000000 .quad KAESBlockCipherVecRegaes_ncbi_name
+ 49778 00000000
+ 49779 1183a 06 .uleb128 0x6
+ 49780 1183b 14180100 .long 0x11814
+ 49781 1183f 30 .uleb128 0x30
+ 49782 11840 00000000 .long .LASF424
+ 49783 11844 02 .byte 0x2
+ 49784 11845 240A .value 0xa24
+ 49785 11847 55180100 .long 0x11855
+ 49786 1184b 09 .byte 0x9
+ 49787 1184c 03 .byte 0x3
+ 49788 1184d 00000000 .quad KAESBlockCipherVecReg_vt_
+ 49788 00000000
+ 49789 11855 06 .uleb128 0x6
+ 49790 11856 11030000 .long 0x311
+ 49791 1185a 00 .byte 0x0
+ 49792 .section .debug_abbrev
+ 49793 0000 01 .uleb128 0x1
+ 49794 0001 11 .uleb128 0x11
+ 49795 0002 01 .byte 0x1
+ 49796 0003 25 .uleb128 0x25
+ 49797 0004 0E .uleb128 0xe
+
GAS LISTING /tmp/ccjbMjHD.s page 1206
+
+
+ 49798 0005 13 .uleb128 0x13
+ 49799 0006 0B .uleb128 0xb
+ 49800 0007 03 .uleb128 0x3
+ 49801 0008 0E .uleb128 0xe
+ 49802 0009 1B .uleb128 0x1b
+ 49803 000a 0E .uleb128 0xe
+ 49804 000b 11 .uleb128 0x11
+ 49805 000c 01 .uleb128 0x1
+ 49806 000d 12 .uleb128 0x12
+ 49807 000e 01 .uleb128 0x1
+ 49808 000f 10 .uleb128 0x10
+ 49809 0010 06 .uleb128 0x6
+ 49810 0011 00 .byte 0x0
+ 49811 0012 00 .byte 0x0
+ 49812 0013 02 .uleb128 0x2
+ 49813 0014 24 .uleb128 0x24
+ 49814 0015 00 .byte 0x0
+ 49815 0016 0B .uleb128 0xb
+ 49816 0017 0B .uleb128 0xb
+ 49817 0018 3E .uleb128 0x3e
+ 49818 0019 0B .uleb128 0xb
+ 49819 001a 03 .uleb128 0x3
+ 49820 001b 0E .uleb128 0xe
+ 49821 001c 00 .byte 0x0
+ 49822 001d 00 .byte 0x0
+ 49823 001e 03 .uleb128 0x3
+ 49824 001f 16 .uleb128 0x16
+ 49825 0020 00 .byte 0x0
+ 49826 0021 03 .uleb128 0x3
+ 49827 0022 0E .uleb128 0xe
+ 49828 0023 3A .uleb128 0x3a
+ 49829 0024 0B .uleb128 0xb
+ 49830 0025 3B .uleb128 0x3b
+ 49831 0026 0B .uleb128 0xb
+ 49832 0027 49 .uleb128 0x49
+ 49833 0028 13 .uleb128 0x13
+ 49834 0029 00 .byte 0x0
+ 49835 002a 00 .byte 0x0
+ 49836 002b 04 .uleb128 0x4
+ 49837 002c 24 .uleb128 0x24
+ 49838 002d 00 .byte 0x0
+ 49839 002e 0B .uleb128 0xb
+ 49840 002f 0B .uleb128 0xb
+ 49841 0030 3E .uleb128 0x3e
+ 49842 0031 0B .uleb128 0xb
+ 49843 0032 03 .uleb128 0x3
+ 49844 0033 08 .uleb128 0x8
+ 49845 0034 00 .byte 0x0
+ 49846 0035 00 .byte 0x0
+ 49847 0036 05 .uleb128 0x5
+ 49848 0037 24 .uleb128 0x24
+ 49849 0038 00 .byte 0x0
+ 49850 0039 0B .uleb128 0xb
+ 49851 003a 0B .uleb128 0xb
+ 49852 003b 3E .uleb128 0x3e
+ 49853 003c 0B .uleb128 0xb
+ 49854 003d 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1207
+
+
+ 49855 003e 00 .byte 0x0
+ 49856 003f 06 .uleb128 0x6
+ 49857 0040 26 .uleb128 0x26
+ 49858 0041 00 .byte 0x0
+ 49859 0042 49 .uleb128 0x49
+ 49860 0043 13 .uleb128 0x13
+ 49861 0044 00 .byte 0x0
+ 49862 0045 00 .byte 0x0
+ 49863 0046 07 .uleb128 0x7
+ 49864 0047 0F .uleb128 0xf
+ 49865 0048 00 .byte 0x0
+ 49866 0049 0B .uleb128 0xb
+ 49867 004a 0B .uleb128 0xb
+ 49868 004b 49 .uleb128 0x49
+ 49869 004c 13 .uleb128 0x13
+ 49870 004d 00 .byte 0x0
+ 49871 004e 00 .byte 0x0
+ 49872 004f 08 .uleb128 0x8
+ 49873 0050 0F .uleb128 0xf
+ 49874 0051 00 .byte 0x0
+ 49875 0052 0B .uleb128 0xb
+ 49876 0053 0B .uleb128 0xb
+ 49877 0054 00 .byte 0x0
+ 49878 0055 00 .byte 0x0
+ 49879 0056 09 .uleb128 0x9
+ 49880 0057 26 .uleb128 0x26
+ 49881 0058 00 .byte 0x0
+ 49882 0059 00 .byte 0x0
+ 49883 005a 00 .byte 0x0
+ 49884 005b 0A .uleb128 0xa
+ 49885 005c 01 .uleb128 0x1
+ 49886 005d 00 .byte 0x0
+ 49887 005e 8742 .uleb128 0x2107
+ 49888 0060 0C .uleb128 0xc
+ 49889 0061 49 .uleb128 0x49
+ 49890 0062 13 .uleb128 0x13
+ 49891 0063 00 .byte 0x0
+ 49892 0064 00 .byte 0x0
+ 49893 0065 0B .uleb128 0xb
+ 49894 0066 04 .uleb128 0x4
+ 49895 0067 01 .byte 0x1
+ 49896 0068 0B .uleb128 0xb
+ 49897 0069 0B .uleb128 0xb
+ 49898 006a 3A .uleb128 0x3a
+ 49899 006b 0B .uleb128 0xb
+ 49900 006c 3B .uleb128 0x3b
+ 49901 006d 0B .uleb128 0xb
+ 49902 006e 01 .uleb128 0x1
+ 49903 006f 13 .uleb128 0x13
+ 49904 0070 00 .byte 0x0
+ 49905 0071 00 .byte 0x0
+ 49906 0072 0C .uleb128 0xc
+ 49907 0073 28 .uleb128 0x28
+ 49908 0074 00 .byte 0x0
+ 49909 0075 03 .uleb128 0x3
+ 49910 0076 0E .uleb128 0xe
+ 49911 0077 1C .uleb128 0x1c
+
GAS LISTING /tmp/ccjbMjHD.s page 1208
+
+
+ 49912 0078 0D .uleb128 0xd
+ 49913 0079 00 .byte 0x0
+ 49914 007a 00 .byte 0x0
+ 49915 007b 0D .uleb128 0xd
+ 49916 007c 04 .uleb128 0x4
+ 49917 007d 01 .byte 0x1
+ 49918 007e 0B .uleb128 0xb
+ 49919 007f 0B .uleb128 0xb
+ 49920 0080 3A .uleb128 0x3a
+ 49921 0081 0B .uleb128 0xb
+ 49922 0082 3B .uleb128 0x3b
+ 49923 0083 05 .uleb128 0x5
+ 49924 0084 01 .uleb128 0x1
+ 49925 0085 13 .uleb128 0x13
+ 49926 0086 00 .byte 0x0
+ 49927 0087 00 .byte 0x0
+ 49928 0088 0E .uleb128 0xe
+ 49929 0089 13 .uleb128 0x13
+ 49930 008a 01 .byte 0x1
+ 49931 008b 03 .uleb128 0x3
+ 49932 008c 0E .uleb128 0xe
+ 49933 008d 0B .uleb128 0xb
+ 49934 008e 0B .uleb128 0xb
+ 49935 008f 3A .uleb128 0x3a
+ 49936 0090 0B .uleb128 0xb
+ 49937 0091 3B .uleb128 0x3b
+ 49938 0092 0B .uleb128 0xb
+ 49939 0093 01 .uleb128 0x1
+ 49940 0094 13 .uleb128 0x13
+ 49941 0095 00 .byte 0x0
+ 49942 0096 00 .byte 0x0
+ 49943 0097 0F .uleb128 0xf
+ 49944 0098 0D .uleb128 0xd
+ 49945 0099 00 .byte 0x0
+ 49946 009a 03 .uleb128 0x3
+ 49947 009b 08 .uleb128 0x8
+ 49948 009c 3A .uleb128 0x3a
+ 49949 009d 0B .uleb128 0xb
+ 49950 009e 3B .uleb128 0x3b
+ 49951 009f 0B .uleb128 0xb
+ 49952 00a0 49 .uleb128 0x49
+ 49953 00a1 13 .uleb128 0x13
+ 49954 00a2 38 .uleb128 0x38
+ 49955 00a3 0A .uleb128 0xa
+ 49956 00a4 00 .byte 0x0
+ 49957 00a5 00 .byte 0x0
+ 49958 00a6 10 .uleb128 0x10
+ 49959 00a7 0D .uleb128 0xd
+ 49960 00a8 00 .byte 0x0
+ 49961 00a9 03 .uleb128 0x3
+ 49962 00aa 0E .uleb128 0xe
+ 49963 00ab 3A .uleb128 0x3a
+ 49964 00ac 0B .uleb128 0xb
+ 49965 00ad 3B .uleb128 0x3b
+ 49966 00ae 0B .uleb128 0xb
+ 49967 00af 49 .uleb128 0x49
+ 49968 00b0 13 .uleb128 0x13
+
GAS LISTING /tmp/ccjbMjHD.s page 1209
+
+
+ 49969 00b1 38 .uleb128 0x38
+ 49970 00b2 0A .uleb128 0xa
+ 49971 00b3 00 .byte 0x0
+ 49972 00b4 00 .byte 0x0
+ 49973 00b5 11 .uleb128 0x11
+ 49974 00b6 17 .uleb128 0x17
+ 49975 00b7 01 .byte 0x1
+ 49976 00b8 03 .uleb128 0x3
+ 49977 00b9 0E .uleb128 0xe
+ 49978 00ba 0B .uleb128 0xb
+ 49979 00bb 0B .uleb128 0xb
+ 49980 00bc 3A .uleb128 0x3a
+ 49981 00bd 0B .uleb128 0xb
+ 49982 00be 3B .uleb128 0x3b
+ 49983 00bf 0B .uleb128 0xb
+ 49984 00c0 01 .uleb128 0x1
+ 49985 00c1 13 .uleb128 0x13
+ 49986 00c2 00 .byte 0x0
+ 49987 00c3 00 .byte 0x0
+ 49988 00c4 12 .uleb128 0x12
+ 49989 00c5 0D .uleb128 0xd
+ 49990 00c6 00 .byte 0x0
+ 49991 00c7 03 .uleb128 0x3
+ 49992 00c8 0E .uleb128 0xe
+ 49993 00c9 3A .uleb128 0x3a
+ 49994 00ca 0B .uleb128 0xb
+ 49995 00cb 3B .uleb128 0x3b
+ 49996 00cc 0B .uleb128 0xb
+ 49997 00cd 49 .uleb128 0x49
+ 49998 00ce 13 .uleb128 0x13
+ 49999 00cf 00 .byte 0x0
+ 50000 00d0 00 .byte 0x0
+ 50001 00d1 13 .uleb128 0x13
+ 50002 00d2 0D .uleb128 0xd
+ 50003 00d3 00 .byte 0x0
+ 50004 00d4 03 .uleb128 0x3
+ 50005 00d5 08 .uleb128 0x8
+ 50006 00d6 3A .uleb128 0x3a
+ 50007 00d7 0B .uleb128 0xb
+ 50008 00d8 3B .uleb128 0x3b
+ 50009 00d9 0B .uleb128 0xb
+ 50010 00da 49 .uleb128 0x49
+ 50011 00db 13 .uleb128 0x13
+ 50012 00dc 00 .byte 0x0
+ 50013 00dd 00 .byte 0x0
+ 50014 00de 14 .uleb128 0x14
+ 50015 00df 15 .uleb128 0x15
+ 50016 00e0 01 .byte 0x1
+ 50017 00e1 27 .uleb128 0x27
+ 50018 00e2 0C .uleb128 0xc
+ 50019 00e3 01 .uleb128 0x1
+ 50020 00e4 13 .uleb128 0x13
+ 50021 00e5 00 .byte 0x0
+ 50022 00e6 00 .byte 0x0
+ 50023 00e7 15 .uleb128 0x15
+ 50024 00e8 05 .uleb128 0x5
+ 50025 00e9 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1210
+
+
+ 50026 00ea 49 .uleb128 0x49
+ 50027 00eb 13 .uleb128 0x13
+ 50028 00ec 00 .byte 0x0
+ 50029 00ed 00 .byte 0x0
+ 50030 00ee 16 .uleb128 0x16
+ 50031 00ef 15 .uleb128 0x15
+ 50032 00f0 01 .byte 0x1
+ 50033 00f1 49 .uleb128 0x49
+ 50034 00f2 13 .uleb128 0x13
+ 50035 00f3 01 .uleb128 0x1
+ 50036 00f4 13 .uleb128 0x13
+ 50037 00f5 00 .byte 0x0
+ 50038 00f6 00 .byte 0x0
+ 50039 00f7 17 .uleb128 0x17
+ 50040 00f8 18 .uleb128 0x18
+ 50041 00f9 00 .byte 0x0
+ 50042 00fa 00 .byte 0x0
+ 50043 00fb 00 .byte 0x0
+ 50044 00fc 18 .uleb128 0x18
+ 50045 00fd 15 .uleb128 0x15
+ 50046 00fe 01 .byte 0x1
+ 50047 00ff 27 .uleb128 0x27
+ 50048 0100 0C .uleb128 0xc
+ 50049 0101 49 .uleb128 0x49
+ 50050 0102 13 .uleb128 0x13
+ 50051 0103 01 .uleb128 0x1
+ 50052 0104 13 .uleb128 0x13
+ 50053 0105 00 .byte 0x0
+ 50054 0106 00 .byte 0x0
+ 50055 0107 19 .uleb128 0x19
+ 50056 0108 01 .uleb128 0x1
+ 50057 0109 01 .byte 0x1
+ 50058 010a 49 .uleb128 0x49
+ 50059 010b 13 .uleb128 0x13
+ 50060 010c 01 .uleb128 0x1
+ 50061 010d 13 .uleb128 0x13
+ 50062 010e 00 .byte 0x0
+ 50063 010f 00 .byte 0x0
+ 50064 0110 1A .uleb128 0x1a
+ 50065 0111 21 .uleb128 0x21
+ 50066 0112 00 .byte 0x0
+ 50067 0113 49 .uleb128 0x49
+ 50068 0114 13 .uleb128 0x13
+ 50069 0115 2F .uleb128 0x2f
+ 50070 0116 0B .uleb128 0xb
+ 50071 0117 00 .byte 0x0
+ 50072 0118 00 .byte 0x0
+ 50073 0119 1B .uleb128 0x1b
+ 50074 011a 13 .uleb128 0x13
+ 50075 011b 01 .byte 0x1
+ 50076 011c 03 .uleb128 0x3
+ 50077 011d 0E .uleb128 0xe
+ 50078 011e 0B .uleb128 0xb
+ 50079 011f 05 .uleb128 0x5
+ 50080 0120 3A .uleb128 0x3a
+ 50081 0121 0B .uleb128 0xb
+ 50082 0122 3B .uleb128 0x3b
+
GAS LISTING /tmp/ccjbMjHD.s page 1211
+
+
+ 50083 0123 0B .uleb128 0xb
+ 50084 0124 01 .uleb128 0x1
+ 50085 0125 13 .uleb128 0x13
+ 50086 0126 00 .byte 0x0
+ 50087 0127 00 .byte 0x0
+ 50088 0128 1C .uleb128 0x1c
+ 50089 0129 17 .uleb128 0x17
+ 50090 012a 01 .byte 0x1
+ 50091 012b 0B .uleb128 0xb
+ 50092 012c 0B .uleb128 0xb
+ 50093 012d 3A .uleb128 0x3a
+ 50094 012e 0B .uleb128 0xb
+ 50095 012f 3B .uleb128 0x3b
+ 50096 0130 0B .uleb128 0xb
+ 50097 0131 01 .uleb128 0x1
+ 50098 0132 13 .uleb128 0x13
+ 50099 0133 00 .byte 0x0
+ 50100 0134 00 .byte 0x0
+ 50101 0135 1D .uleb128 0x1d
+ 50102 0136 04 .uleb128 0x4
+ 50103 0137 01 .byte 0x1
+ 50104 0138 03 .uleb128 0x3
+ 50105 0139 0E .uleb128 0xe
+ 50106 013a 0B .uleb128 0xb
+ 50107 013b 0B .uleb128 0xb
+ 50108 013c 3A .uleb128 0x3a
+ 50109 013d 0B .uleb128 0xb
+ 50110 013e 3B .uleb128 0x3b
+ 50111 013f 0B .uleb128 0xb
+ 50112 0140 01 .uleb128 0x1
+ 50113 0141 13 .uleb128 0x13
+ 50114 0142 00 .byte 0x0
+ 50115 0143 00 .byte 0x0
+ 50116 0144 1E .uleb128 0x1e
+ 50117 0145 04 .uleb128 0x4
+ 50118 0146 01 .byte 0x1
+ 50119 0147 03 .uleb128 0x3
+ 50120 0148 0E .uleb128 0xe
+ 50121 0149 0B .uleb128 0xb
+ 50122 014a 0B .uleb128 0xb
+ 50123 014b 3A .uleb128 0x3a
+ 50124 014c 0B .uleb128 0xb
+ 50125 014d 3B .uleb128 0x3b
+ 50126 014e 05 .uleb128 0x5
+ 50127 014f 01 .uleb128 0x1
+ 50128 0150 13 .uleb128 0x13
+ 50129 0151 00 .byte 0x0
+ 50130 0152 00 .byte 0x0
+ 50131 0153 1F .uleb128 0x1f
+ 50132 0154 2E .uleb128 0x2e
+ 50133 0155 01 .byte 0x1
+ 50134 0156 03 .uleb128 0x3
+ 50135 0157 0E .uleb128 0xe
+ 50136 0158 3A .uleb128 0x3a
+ 50137 0159 0B .uleb128 0xb
+ 50138 015a 3B .uleb128 0x3b
+ 50139 015b 0B .uleb128 0xb
+
GAS LISTING /tmp/ccjbMjHD.s page 1212
+
+
+ 50140 015c 27 .uleb128 0x27
+ 50141 015d 0C .uleb128 0xc
+ 50142 015e 49 .uleb128 0x49
+ 50143 015f 13 .uleb128 0x13
+ 50144 0160 11 .uleb128 0x11
+ 50145 0161 01 .uleb128 0x1
+ 50146 0162 12 .uleb128 0x12
+ 50147 0163 01 .uleb128 0x1
+ 50148 0164 40 .uleb128 0x40
+ 50149 0165 06 .uleb128 0x6
+ 50150 0166 01 .uleb128 0x1
+ 50151 0167 13 .uleb128 0x13
+ 50152 0168 00 .byte 0x0
+ 50153 0169 00 .byte 0x0
+ 50154 016a 20 .uleb128 0x20
+ 50155 016b 05 .uleb128 0x5
+ 50156 016c 00 .byte 0x0
+ 50157 016d 03 .uleb128 0x3
+ 50158 016e 08 .uleb128 0x8
+ 50159 016f 3A .uleb128 0x3a
+ 50160 0170 0B .uleb128 0xb
+ 50161 0171 3B .uleb128 0x3b
+ 50162 0172 0B .uleb128 0xb
+ 50163 0173 49 .uleb128 0x49
+ 50164 0174 13 .uleb128 0x13
+ 50165 0175 02 .uleb128 0x2
+ 50166 0176 0A .uleb128 0xa
+ 50167 0177 00 .byte 0x0
+ 50168 0178 00 .byte 0x0
+ 50169 0179 21 .uleb128 0x21
+ 50170 017a 34 .uleb128 0x34
+ 50171 017b 00 .byte 0x0
+ 50172 017c 03 .uleb128 0x3
+ 50173 017d 08 .uleb128 0x8
+ 50174 017e 3A .uleb128 0x3a
+ 50175 017f 0B .uleb128 0xb
+ 50176 0180 3B .uleb128 0x3b
+ 50177 0181 0B .uleb128 0xb
+ 50178 0182 49 .uleb128 0x49
+ 50179 0183 13 .uleb128 0x13
+ 50180 0184 02 .uleb128 0x2
+ 50181 0185 0A .uleb128 0xa
+ 50182 0186 00 .byte 0x0
+ 50183 0187 00 .byte 0x0
+ 50184 0188 22 .uleb128 0x22
+ 50185 0189 2E .uleb128 0x2e
+ 50186 018a 01 .byte 0x1
+ 50187 018b 03 .uleb128 0x3
+ 50188 018c 0E .uleb128 0xe
+ 50189 018d 3A .uleb128 0x3a
+ 50190 018e 0B .uleb128 0xb
+ 50191 018f 3B .uleb128 0x3b
+ 50192 0190 0B .uleb128 0xb
+ 50193 0191 27 .uleb128 0x27
+ 50194 0192 0C .uleb128 0xc
+ 50195 0193 49 .uleb128 0x49
+ 50196 0194 13 .uleb128 0x13
+
GAS LISTING /tmp/ccjbMjHD.s page 1213
+
+
+ 50197 0195 20 .uleb128 0x20
+ 50198 0196 0B .uleb128 0xb
+ 50199 0197 01 .uleb128 0x1
+ 50200 0198 13 .uleb128 0x13
+ 50201 0199 00 .byte 0x0
+ 50202 019a 00 .byte 0x0
+ 50203 019b 23 .uleb128 0x23
+ 50204 019c 05 .uleb128 0x5
+ 50205 019d 00 .byte 0x0
+ 50206 019e 03 .uleb128 0x3
+ 50207 019f 08 .uleb128 0x8
+ 50208 01a0 3A .uleb128 0x3a
+ 50209 01a1 0B .uleb128 0xb
+ 50210 01a2 3B .uleb128 0x3b
+ 50211 01a3 0B .uleb128 0xb
+ 50212 01a4 49 .uleb128 0x49
+ 50213 01a5 13 .uleb128 0x13
+ 50214 01a6 00 .byte 0x0
+ 50215 01a7 00 .byte 0x0
+ 50216 01a8 24 .uleb128 0x24
+ 50217 01a9 34 .uleb128 0x34
+ 50218 01aa 00 .byte 0x0
+ 50219 01ab 03 .uleb128 0x3
+ 50220 01ac 08 .uleb128 0x8
+ 50221 01ad 3A .uleb128 0x3a
+ 50222 01ae 0B .uleb128 0xb
+ 50223 01af 3B .uleb128 0x3b
+ 50224 01b0 0B .uleb128 0xb
+ 50225 01b1 49 .uleb128 0x49
+ 50226 01b2 13 .uleb128 0x13
+ 50227 01b3 00 .byte 0x0
+ 50228 01b4 00 .byte 0x0
+ 50229 01b5 25 .uleb128 0x25
+ 50230 01b6 2E .uleb128 0x2e
+ 50231 01b7 01 .byte 0x1
+ 50232 01b8 03 .uleb128 0x3
+ 50233 01b9 0E .uleb128 0xe
+ 50234 01ba 3A .uleb128 0x3a
+ 50235 01bb 0B .uleb128 0xb
+ 50236 01bc 3B .uleb128 0x3b
+ 50237 01bd 05 .uleb128 0x5
+ 50238 01be 27 .uleb128 0x27
+ 50239 01bf 0C .uleb128 0xc
+ 50240 01c0 49 .uleb128 0x49
+ 50241 01c1 13 .uleb128 0x13
+ 50242 01c2 20 .uleb128 0x20
+ 50243 01c3 0B .uleb128 0xb
+ 50244 01c4 01 .uleb128 0x1
+ 50245 01c5 13 .uleb128 0x13
+ 50246 01c6 00 .byte 0x0
+ 50247 01c7 00 .byte 0x0
+ 50248 01c8 26 .uleb128 0x26
+ 50249 01c9 05 .uleb128 0x5
+ 50250 01ca 00 .byte 0x0
+ 50251 01cb 03 .uleb128 0x3
+ 50252 01cc 0E .uleb128 0xe
+ 50253 01cd 3A .uleb128 0x3a
+
GAS LISTING /tmp/ccjbMjHD.s page 1214
+
+
+ 50254 01ce 0B .uleb128 0xb
+ 50255 01cf 3B .uleb128 0x3b
+ 50256 01d0 05 .uleb128 0x5
+ 50257 01d1 49 .uleb128 0x49
+ 50258 01d2 13 .uleb128 0x13
+ 50259 01d3 00 .byte 0x0
+ 50260 01d4 00 .byte 0x0
+ 50261 01d5 27 .uleb128 0x27
+ 50262 01d6 34 .uleb128 0x34
+ 50263 01d7 00 .byte 0x0
+ 50264 01d8 03 .uleb128 0x3
+ 50265 01d9 0E .uleb128 0xe
+ 50266 01da 3A .uleb128 0x3a
+ 50267 01db 0B .uleb128 0xb
+ 50268 01dc 3B .uleb128 0x3b
+ 50269 01dd 05 .uleb128 0x5
+ 50270 01de 49 .uleb128 0x49
+ 50271 01df 13 .uleb128 0x13
+ 50272 01e0 00 .byte 0x0
+ 50273 01e1 00 .byte 0x0
+ 50274 01e2 28 .uleb128 0x28
+ 50275 01e3 34 .uleb128 0x34
+ 50276 01e4 00 .byte 0x0
+ 50277 01e5 03 .uleb128 0x3
+ 50278 01e6 08 .uleb128 0x8
+ 50279 01e7 3A .uleb128 0x3a
+ 50280 01e8 0B .uleb128 0xb
+ 50281 01e9 3B .uleb128 0x3b
+ 50282 01ea 05 .uleb128 0x5
+ 50283 01eb 49 .uleb128 0x49
+ 50284 01ec 13 .uleb128 0x13
+ 50285 01ed 00 .byte 0x0
+ 50286 01ee 00 .byte 0x0
+ 50287 01ef 29 .uleb128 0x29
+ 50288 01f0 0B .uleb128 0xb
+ 50289 01f1 01 .byte 0x1
+ 50290 01f2 01 .uleb128 0x1
+ 50291 01f3 13 .uleb128 0x13
+ 50292 01f4 00 .byte 0x0
+ 50293 01f5 00 .byte 0x0
+ 50294 01f6 2A .uleb128 0x2a
+ 50295 01f7 0B .uleb128 0xb
+ 50296 01f8 01 .byte 0x1
+ 50297 01f9 00 .byte 0x0
+ 50298 01fa 00 .byte 0x0
+ 50299 01fb 2B .uleb128 0x2b
+ 50300 01fc 05 .uleb128 0x5
+ 50301 01fd 00 .byte 0x0
+ 50302 01fe 03 .uleb128 0x3
+ 50303 01ff 08 .uleb128 0x8
+ 50304 0200 3A .uleb128 0x3a
+ 50305 0201 0B .uleb128 0xb
+ 50306 0202 3B .uleb128 0x3b
+ 50307 0203 05 .uleb128 0x5
+ 50308 0204 49 .uleb128 0x49
+ 50309 0205 13 .uleb128 0x13
+ 50310 0206 00 .byte 0x0
+
GAS LISTING /tmp/ccjbMjHD.s page 1215
+
+
+ 50311 0207 00 .byte 0x0
+ 50312 0208 2C .uleb128 0x2c
+ 50313 0209 34 .uleb128 0x34
+ 50314 020a 00 .byte 0x0
+ 50315 020b 03 .uleb128 0x3
+ 50316 020c 0E .uleb128 0xe
+ 50317 020d 3A .uleb128 0x3a
+ 50318 020e 0B .uleb128 0xb
+ 50319 020f 3B .uleb128 0x3b
+ 50320 0210 05 .uleb128 0x5
+ 50321 0211 49 .uleb128 0x49
+ 50322 0212 13 .uleb128 0x13
+ 50323 0213 1C .uleb128 0x1c
+ 50324 0214 0A .uleb128 0xa
+ 50325 0215 00 .byte 0x0
+ 50326 0216 00 .byte 0x0
+ 50327 0217 2D .uleb128 0x2d
+ 50328 0218 2E .uleb128 0x2e
+ 50329 0219 01 .byte 0x1
+ 50330 021a 03 .uleb128 0x3
+ 50331 021b 0E .uleb128 0xe
+ 50332 021c 3A .uleb128 0x3a
+ 50333 021d 0B .uleb128 0xb
+ 50334 021e 3B .uleb128 0x3b
+ 50335 021f 05 .uleb128 0x5
+ 50336 0220 27 .uleb128 0x27
+ 50337 0221 0C .uleb128 0xc
+ 50338 0222 11 .uleb128 0x11
+ 50339 0223 01 .uleb128 0x1
+ 50340 0224 12 .uleb128 0x12
+ 50341 0225 01 .uleb128 0x1
+ 50342 0226 40 .uleb128 0x40
+ 50343 0227 06 .uleb128 0x6
+ 50344 0228 01 .uleb128 0x1
+ 50345 0229 13 .uleb128 0x13
+ 50346 022a 00 .byte 0x0
+ 50347 022b 00 .byte 0x0
+ 50348 022c 2E .uleb128 0x2e
+ 50349 022d 05 .uleb128 0x5
+ 50350 022e 00 .byte 0x0
+ 50351 022f 03 .uleb128 0x3
+ 50352 0230 0E .uleb128 0xe
+ 50353 0231 3A .uleb128 0x3a
+ 50354 0232 0B .uleb128 0xb
+ 50355 0233 3B .uleb128 0x3b
+ 50356 0234 05 .uleb128 0x5
+ 50357 0235 49 .uleb128 0x49
+ 50358 0236 13 .uleb128 0x13
+ 50359 0237 02 .uleb128 0x2
+ 50360 0238 0A .uleb128 0xa
+ 50361 0239 00 .byte 0x0
+ 50362 023a 00 .byte 0x0
+ 50363 023b 2F .uleb128 0x2f
+ 50364 023c 05 .uleb128 0x5
+ 50365 023d 00 .byte 0x0
+ 50366 023e 03 .uleb128 0x3
+ 50367 023f 08 .uleb128 0x8
+
GAS LISTING /tmp/ccjbMjHD.s page 1216
+
+
+ 50368 0240 3A .uleb128 0x3a
+ 50369 0241 0B .uleb128 0xb
+ 50370 0242 3B .uleb128 0x3b
+ 50371 0243 05 .uleb128 0x5
+ 50372 0244 49 .uleb128 0x49
+ 50373 0245 13 .uleb128 0x13
+ 50374 0246 02 .uleb128 0x2
+ 50375 0247 0A .uleb128 0xa
+ 50376 0248 00 .byte 0x0
+ 50377 0249 00 .byte 0x0
+ 50378 024a 30 .uleb128 0x30
+ 50379 024b 34 .uleb128 0x34
+ 50380 024c 00 .byte 0x0
+ 50381 024d 03 .uleb128 0x3
+ 50382 024e 0E .uleb128 0xe
+ 50383 024f 3A .uleb128 0x3a
+ 50384 0250 0B .uleb128 0xb
+ 50385 0251 3B .uleb128 0x3b
+ 50386 0252 05 .uleb128 0x5
+ 50387 0253 49 .uleb128 0x49
+ 50388 0254 13 .uleb128 0x13
+ 50389 0255 02 .uleb128 0x2
+ 50390 0256 0A .uleb128 0xa
+ 50391 0257 00 .byte 0x0
+ 50392 0258 00 .byte 0x0
+ 50393 0259 31 .uleb128 0x31
+ 50394 025a 1D .uleb128 0x1d
+ 50395 025b 01 .byte 0x1
+ 50396 025c 31 .uleb128 0x31
+ 50397 025d 13 .uleb128 0x13
+ 50398 025e 11 .uleb128 0x11
+ 50399 025f 01 .uleb128 0x1
+ 50400 0260 12 .uleb128 0x12
+ 50401 0261 01 .uleb128 0x1
+ 50402 0262 58 .uleb128 0x58
+ 50403 0263 0B .uleb128 0xb
+ 50404 0264 59 .uleb128 0x59
+ 50405 0265 05 .uleb128 0x5
+ 50406 0266 01 .uleb128 0x1
+ 50407 0267 13 .uleb128 0x13
+ 50408 0268 00 .byte 0x0
+ 50409 0269 00 .byte 0x0
+ 50410 026a 32 .uleb128 0x32
+ 50411 026b 05 .uleb128 0x5
+ 50412 026c 00 .byte 0x0
+ 50413 026d 31 .uleb128 0x31
+ 50414 026e 13 .uleb128 0x13
+ 50415 026f 02 .uleb128 0x2
+ 50416 0270 0A .uleb128 0xa
+ 50417 0271 00 .byte 0x0
+ 50418 0272 00 .byte 0x0
+ 50419 0273 33 .uleb128 0x33
+ 50420 0274 0B .uleb128 0xb
+ 50421 0275 01 .byte 0x1
+ 50422 0276 11 .uleb128 0x11
+ 50423 0277 01 .uleb128 0x1
+ 50424 0278 12 .uleb128 0x12
+
GAS LISTING /tmp/ccjbMjHD.s page 1217
+
+
+ 50425 0279 01 .uleb128 0x1
+ 50426 027a 00 .byte 0x0
+ 50427 027b 00 .byte 0x0
+ 50428 027c 34 .uleb128 0x34
+ 50429 027d 34 .uleb128 0x34
+ 50430 027e 00 .byte 0x0
+ 50431 027f 31 .uleb128 0x31
+ 50432 0280 13 .uleb128 0x13
+ 50433 0281 02 .uleb128 0x2
+ 50434 0282 0A .uleb128 0xa
+ 50435 0283 00 .byte 0x0
+ 50436 0284 00 .byte 0x0
+ 50437 0285 35 .uleb128 0x35
+ 50438 0286 1D .uleb128 0x1d
+ 50439 0287 01 .byte 0x1
+ 50440 0288 31 .uleb128 0x31
+ 50441 0289 13 .uleb128 0x13
+ 50442 028a 11 .uleb128 0x11
+ 50443 028b 01 .uleb128 0x1
+ 50444 028c 12 .uleb128 0x12
+ 50445 028d 01 .uleb128 0x1
+ 50446 028e 58 .uleb128 0x58
+ 50447 028f 0B .uleb128 0xb
+ 50448 0290 59 .uleb128 0x59
+ 50449 0291 05 .uleb128 0x5
+ 50450 0292 00 .byte 0x0
+ 50451 0293 00 .byte 0x0
+ 50452 0294 36 .uleb128 0x36
+ 50453 0295 0B .uleb128 0xb
+ 50454 0296 01 .byte 0x1
+ 50455 0297 11 .uleb128 0x11
+ 50456 0298 01 .uleb128 0x1
+ 50457 0299 12 .uleb128 0x12
+ 50458 029a 01 .uleb128 0x1
+ 50459 029b 01 .uleb128 0x1
+ 50460 029c 13 .uleb128 0x13
+ 50461 029d 00 .byte 0x0
+ 50462 029e 00 .byte 0x0
+ 50463 029f 37 .uleb128 0x37
+ 50464 02a0 34 .uleb128 0x34
+ 50465 02a1 00 .byte 0x0
+ 50466 02a2 03 .uleb128 0x3
+ 50467 02a3 08 .uleb128 0x8
+ 50468 02a4 3A .uleb128 0x3a
+ 50469 02a5 0B .uleb128 0xb
+ 50470 02a6 3B .uleb128 0x3b
+ 50471 02a7 05 .uleb128 0x5
+ 50472 02a8 49 .uleb128 0x49
+ 50473 02a9 13 .uleb128 0x13
+ 50474 02aa 02 .uleb128 0x2
+ 50475 02ab 0A .uleb128 0xa
+ 50476 02ac 00 .byte 0x0
+ 50477 02ad 00 .byte 0x0
+ 50478 02ae 38 .uleb128 0x38
+ 50479 02af 34 .uleb128 0x34
+ 50480 02b0 00 .byte 0x0
+ 50481 02b1 03 .uleb128 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1218
+
+
+ 50482 02b2 0E .uleb128 0xe
+ 50483 02b3 49 .uleb128 0x49
+ 50484 02b4 13 .uleb128 0x13
+ 50485 02b5 34 .uleb128 0x34
+ 50486 02b6 0C .uleb128 0xc
+ 50487 02b7 1C .uleb128 0x1c
+ 50488 02b8 0E .uleb128 0xe
+ 50489 02b9 00 .byte 0x0
+ 50490 02ba 00 .byte 0x0
+ 50491 02bb 39 .uleb128 0x39
+ 50492 02bc 2E .uleb128 0x2e
+ 50493 02bd 01 .byte 0x1
+ 50494 02be 03 .uleb128 0x3
+ 50495 02bf 0E .uleb128 0xe
+ 50496 02c0 3A .uleb128 0x3a
+ 50497 02c1 0B .uleb128 0xb
+ 50498 02c2 3B .uleb128 0x3b
+ 50499 02c3 05 .uleb128 0x5
+ 50500 02c4 27 .uleb128 0x27
+ 50501 02c5 0C .uleb128 0xc
+ 50502 02c6 49 .uleb128 0x49
+ 50503 02c7 13 .uleb128 0x13
+ 50504 02c8 11 .uleb128 0x11
+ 50505 02c9 01 .uleb128 0x1
+ 50506 02ca 12 .uleb128 0x12
+ 50507 02cb 01 .uleb128 0x1
+ 50508 02cc 40 .uleb128 0x40
+ 50509 02cd 06 .uleb128 0x6
+ 50510 02ce 01 .uleb128 0x1
+ 50511 02cf 13 .uleb128 0x13
+ 50512 02d0 00 .byte 0x0
+ 50513 02d1 00 .byte 0x0
+ 50514 02d2 3A .uleb128 0x3a
+ 50515 02d3 2E .uleb128 0x2e
+ 50516 02d4 00 .byte 0x0
+ 50517 02d5 03 .uleb128 0x3
+ 50518 02d6 0E .uleb128 0xe
+ 50519 02d7 3A .uleb128 0x3a
+ 50520 02d8 0B .uleb128 0xb
+ 50521 02d9 3B .uleb128 0x3b
+ 50522 02da 05 .uleb128 0x5
+ 50523 02db 49 .uleb128 0x49
+ 50524 02dc 13 .uleb128 0x13
+ 50525 02dd 11 .uleb128 0x11
+ 50526 02de 01 .uleb128 0x1
+ 50527 02df 12 .uleb128 0x12
+ 50528 02e0 01 .uleb128 0x1
+ 50529 02e1 40 .uleb128 0x40
+ 50530 02e2 06 .uleb128 0x6
+ 50531 02e3 00 .byte 0x0
+ 50532 02e4 00 .byte 0x0
+ 50533 02e5 3B .uleb128 0x3b
+ 50534 02e6 34 .uleb128 0x34
+ 50535 02e7 00 .byte 0x0
+ 50536 02e8 03 .uleb128 0x3
+ 50537 02e9 0E .uleb128 0xe
+ 50538 02ea 49 .uleb128 0x49
+
GAS LISTING /tmp/ccjbMjHD.s page 1219
+
+
+ 50539 02eb 13 .uleb128 0x13
+ 50540 02ec 34 .uleb128 0x34
+ 50541 02ed 0C .uleb128 0xc
+ 50542 02ee 02 .uleb128 0x2
+ 50543 02ef 0A .uleb128 0xa
+ 50544 02f0 00 .byte 0x0
+ 50545 02f1 00 .byte 0x0
+ 50546 02f2 3C .uleb128 0x3c
+ 50547 02f3 2E .uleb128 0x2e
+ 50548 02f4 01 .byte 0x1
+ 50549 02f5 03 .uleb128 0x3
+ 50550 02f6 0E .uleb128 0xe
+ 50551 02f7 3A .uleb128 0x3a
+ 50552 02f8 0B .uleb128 0xb
+ 50553 02f9 3B .uleb128 0x3b
+ 50554 02fa 05 .uleb128 0x5
+ 50555 02fb 49 .uleb128 0x49
+ 50556 02fc 13 .uleb128 0x13
+ 50557 02fd 11 .uleb128 0x11
+ 50558 02fe 01 .uleb128 0x1
+ 50559 02ff 12 .uleb128 0x12
+ 50560 0300 01 .uleb128 0x1
+ 50561 0301 40 .uleb128 0x40
+ 50562 0302 06 .uleb128 0x6
+ 50563 0303 01 .uleb128 0x1
+ 50564 0304 13 .uleb128 0x13
+ 50565 0305 00 .byte 0x0
+ 50566 0306 00 .byte 0x0
+ 50567 0307 3D .uleb128 0x3d
+ 50568 0308 2E .uleb128 0x2e
+ 50569 0309 01 .byte 0x1
+ 50570 030a 3F .uleb128 0x3f
+ 50571 030b 0C .uleb128 0xc
+ 50572 030c 03 .uleb128 0x3
+ 50573 030d 0E .uleb128 0xe
+ 50574 030e 3A .uleb128 0x3a
+ 50575 030f 0B .uleb128 0xb
+ 50576 0310 3B .uleb128 0x3b
+ 50577 0311 05 .uleb128 0x5
+ 50578 0312 27 .uleb128 0x27
+ 50579 0313 0C .uleb128 0xc
+ 50580 0314 49 .uleb128 0x49
+ 50581 0315 13 .uleb128 0x13
+ 50582 0316 11 .uleb128 0x11
+ 50583 0317 01 .uleb128 0x1
+ 50584 0318 12 .uleb128 0x12
+ 50585 0319 01 .uleb128 0x1
+ 50586 031a 40 .uleb128 0x40
+ 50587 031b 06 .uleb128 0x6
+ 50588 031c 01 .uleb128 0x1
+ 50589 031d 13 .uleb128 0x13
+ 50590 031e 00 .byte 0x0
+ 50591 031f 00 .byte 0x0
+ 50592 0320 3E .uleb128 0x3e
+ 50593 0321 34 .uleb128 0x34
+ 50594 0322 00 .byte 0x0
+ 50595 0323 03 .uleb128 0x3
+
GAS LISTING /tmp/ccjbMjHD.s page 1220
+
+
+ 50596 0324 0E .uleb128 0xe
+ 50597 0325 3A .uleb128 0x3a
+ 50598 0326 0B .uleb128 0xb
+ 50599 0327 3B .uleb128 0x3b
+ 50600 0328 0B .uleb128 0xb
+ 50601 0329 49 .uleb128 0x49
+ 50602 032a 13 .uleb128 0x13
+ 50603 032b 02 .uleb128 0x2
+ 50604 032c 0A .uleb128 0xa
+ 50605 032d 00 .byte 0x0
+ 50606 032e 00 .byte 0x0
+ 50607 032f 00 .byte 0x0
+ 50608 .section .debug_pubnames,"", at progbits
+ 50609 0000 2C000000 .long 0x2c
+ 50610 0004 0200 .value 0x2
+ 50611 0006 00000000 .long .Ldebug_info0
+ 50612 000a 5B180100 .long 0x1185b
+ 50613 000e 40160100 .long 0x11640
+ 50614 0012 4B414553 .string "KAESBlockCipherVecRegMake"
+ 50614 426C6F63
+ 50614 6B436970
+ 50614 68657256
+ 50614 65635265
+ 50615 002c 00000000 .long 0x0
+ 50616 .section .debug_aranges,"", at progbits
+ 50617 0000 2C000000 .long 0x2c
+ 50618 0004 0200 .value 0x2
+ 50619 0006 00000000 .long .Ldebug_info0
+ 50620 000a 08 .byte 0x8
+ 50621 000b 00 .byte 0x0
+ 50622 000c 0000 .value 0x0
+ 50623 000e 0000 .value 0x0
+ 50624 0010 00000000 .quad .Ltext0
+ 50624 00000000
+ 50625 0018 52330100 .quad .Letext0-.Ltext0
+ 50625 00000000
+ 50626 0020 00000000 .quad 0x0
+ 50626 00000000
+ 50627 0028 00000000 .quad 0x0
+ 50627 00000000
+ 50628 .section .debug_str,"MS", at progbits,1
+ 50629 .LASF70:
+ 50630 0000 43697068 .string "CipherVec_AES_u"
+ 50630 65725665
+ 50630 635F4145
+ 50630 535F7500
+ 50631 .LASF288:
+ 50632 0010 7263496E .string "rcInsufficient"
+ 50632 73756666
+ 50632 69636965
+ 50632 6E7400
+ 50633 .LASF305:
+ 50634 001f 72634475 .string "rcDuplicate"
+ 50634 706C6963
+ 50634 61746500
+ 50635 .LASF328:
+ 50636 002b 4B414553 .string "KAESBlockCipherVecRegSubBytesInt"
+
GAS LISTING /tmp/ccjbMjHD.s page 1221
+
+
+ 50636 426C6F63
+ 50636 6B436970
+ 50636 68657256
+ 50636 65635265
+ 50637 .LASF108:
+ 50638 004c 7263436F .string "rcCondition"
+ 50638 6E646974
+ 50638 696F6E00
+ 50639 .LASF222:
+ 50640 0058 7263456E .string "rcEncrypting"
+ 50640 63727970
+ 50640 74696E67
+ 50640 00
+ 50641 .LASF181:
+ 50642 0065 72634F70 .string "rcOpening"
+ 50642 656E696E
+ 50642 6700
+ 50643 .LASF398:
+ 50644 006f 4B414553 .string "KAESBlockCipherVecRegKeySize"
+ 50644 426C6F63
+ 50644 6B436970
+ 50644 68657256
+ 50644 65635265
+ 50645 .LASF189:
+ 50646 008c 72635065 .string "rcPersisting"
+ 50646 72736973
+ 50646 74696E67
+ 50646 00
+ 50647 .LASF227:
+ 50648 0099 72635365 .string "rcSending"
+ 50648 6E64696E
+ 50648 6700
+ 50649 .LASF221:
+ 50650 00a3 72634170 .string "rcAppending"
+ 50650 70656E64
+ 50650 696E6700
+ 50651 .LASF207:
+ 50652 00af 72635369 .string "rcSignaling"
+ 50652 676E616C
+ 50652 696E6700
+ 50653 .LASF342:
+ 50654 00bb 4B414553 .string "KAESBlockCipherVecRegStateDupColumn3"
+ 50654 426C6F63
+ 50654 6B436970
+ 50654 68657256
+ 50654 65635265
+ 50655 .LASF20:
+ 50656 00e0 4442475F .string "DBG_BLAST"
+ 50656 424C4153
+ 50656 5400
+ 50657 .LASF263:
+ 50658 00ea 72635369 .string "rcSignalSet"
+ 50658 676E616C
+ 50658 53657400
+ 50659 .LASF209:
+ 50660 00f6 72634174 .string "rcAttaching"
+ 50660 74616368
+
GAS LISTING /tmp/ccjbMjHD.s page 1222
+
+
+ 50660 696E6700
+ 50661 .LASF141:
+ 50662 0102 72635461 .string "rcTable"
+ 50662 626C6500
+ 50663 .LASF419:
+ 50664 010a 6C6F5F66 .string "lo_filter"
+ 50664 696C7465
+ 50664 7200
+ 50665 .LASF105:
+ 50666 0114 72634275 .string "rcBuffer"
+ 50666 66666572
+ 50666 00
+ 50667 .LASF3:
+ 50668 011d 696E7433 .string "int32_t"
+ 50668 325F7400
+ 50669 .LASF237:
+ 50670 0125 72634D65 .string "rcMemory"
+ 50670 6D6F7279
+ 50670 00
+ 50671 .LASF170:
+ 50672 012e 72634C6F .string "rcLocking"
+ 50672 636B696E
+ 50672 6700
+ 50673 .LASF205:
+ 50674 0138 72635061 .string "rcParsing"
+ 50674 7273696E
+ 50674 6700
+ 50675 .LASF234:
+ 50676 0142 72635365 .string "rcSelf"
+ 50676 6C6600
+ 50677 .LASF127:
+ 50678 0149 72634D65 .string "rcMetadata"
+ 50678 74616461
+ 50678 746100
+ 50679 .LASF250:
+ 50680 0154 72634172 .string "rcArcHardLink"
+ 50680 63486172
+ 50680 644C696E
+ 50680 6B00
+ 50681 .LASF76:
+ 50682 0162 7263436F .string "rcCont"
+ 50682 6E7400
+ 50683 .LASF258:
+ 50684 0169 72634368 .string "rcChecksum"
+ 50684 65636B73
+ 50684 756D00
+ 50685 .LASF403:
+ 50686 0174 5F5F6675 .string "__func__"
+ 50686 6E635F5F
+ 50686 00
+ 50687 .LASF302:
+ 50688 017d 7263546F .string "rcTooShort"
+ 50688 6F53686F
+ 50688 727400
+ 50689 .LASF132:
+ 50690 0188 72635061 .string "rcPagemap"
+ 50690 67656D61
+
GAS LISTING /tmp/ccjbMjHD.s page 1223
+
+
+ 50690 7000
+ 50691 .LASF428:
+ 50692 0192 4B414553 .string "KAESBlockCipherVecRegMake"
+ 50692 426C6F63
+ 50692 6B436970
+ 50692 68657256
+ 50692 65635265
+ 50693 .LASF348:
+ 50694 01ac 4B414553 .string "KAESBlockCipherVecRegStateShiftRight64"
+ 50694 426C6F63
+ 50694 6B436970
+ 50694 68657256
+ 50694 65635265
+ 50695 .LASF84:
+ 50696 01d3 72634170 .string "rcApp"
+ 50696 7000
+ 50697 .LASF115:
+ 50698 01d9 72634669 .string "rcFileDesc"
+ 50698 6C654465
+ 50698 736300
+ 50699 .LASF254:
+ 50700 01e4 72634974 .string "rcItem"
+ 50700 656D00
+ 50701 .LASF146:
+ 50702 01eb 72635472 .string "rcTrie"
+ 50702 696500
+ 50703 .LASF87:
+ 50704 01f2 72634C61 .string "rcLastModule_v1_0"
+ 50704 73744D6F
+ 50704 64756C65
+ 50704 5F76315F
+ 50704 3000
+ 50705 .LASF67:
+ 50706 0204 73746174 .string "state"
+ 50706 6500
+ 50707 .LASF245:
+ 50708 020a 72634279 .string "rcByteOrder"
+ 50708 74654F72
+ 50708 64657200
+ 50709 .LASF64:
+ 50710 0216 4145534B .string "AESKeySchedule"
+ 50710 65795363
+ 50710 68656475
+ 50710 6C6500
+ 50711 .LASF65:
+ 50712 0225 726F756E .string "round_keys"
+ 50712 645F6B65
+ 50712 797300
+ 50713 .LASF163:
+ 50714 0230 7263436F .string "rcConstructing"
+ 50714 6E737472
+ 50714 75637469
+ 50714 6E6700
+ 50715 .LASF11:
+ 50716 023f 72635F74 .string "rc_t"
+ 50716 00
+ 50717 .LASF239:
+
GAS LISTING /tmp/ccjbMjHD.s page 1224
+
+
+ 50718 0244 7263466F .string "rcFormat"
+ 50718 726D6174
+ 50718 00
+ 50719 .LASF297:
+ 50720 024d 7263556E .string "rcUnauthorized"
+ 50720 61757468
+ 50720 6F72697A
+ 50720 656400
+ 50721 .LASF399:
+ 50722 025c 4B414553 .string "KAESBlockCipherVecRegSetEncryptKey"
+ 50722 426C6F63
+ 50722 6B436970
+ 50722 68657256
+ 50722 65635265
+ 50723 .LASF380:
+ 50724 027f 6D737461 .string "mstate"
+ 50724 746500
+ 50725 .LASF177:
+ 50726 0286 72635265 .string "rcRemoving"
+ 50726 6D6F7669
+ 50726 6E6700
+ 50727 .LASF90:
+ 50728 0291 72634B72 .string "rcKrypto"
+ 50728 7970746F
+ 50728 00
+ 50729 .LASF410:
+ 50730 029a 5F426F6F .string "_Bool"
+ 50730 6C00
+ 50731 .LASF168:
+ 50732 02a0 72635669 .string "rcVisiting"
+ 50732 73697469
+ 50732 6E6700
+ 50733 .LASF98:
+ 50734 02ab 72634172 .string "rcArc"
+ 50734 6300
+ 50735 .LASF422:
+ 50736 02b1 4B414553 .string "KAESBlockCipherVecRegRcon"
+ 50736 426C6F63
+ 50736 6B436970
+ 50736 68657256
+ 50736 65635265
+ 50737 .LASF73:
+ 50738 02cb 72634578 .string "rcExe"
+ 50738 6500
+ 50739 .LASF303:
+ 50740 02d1 7263546F .string "rcTooLong"
+ 50740 6F4C6F6E
+ 50740 6700
+ 50741 .LASF343:
+ 50742 02db 6F705F50 .string "op_PSHUFD128"
+ 50742 53485546
+ 50742 44313238
+ 50742 00
+ 50743 .LASF231:
+ 50744 02e8 52434F62 .string "RCObject"
+ 50744 6A656374
+ 50744 00
+
GAS LISTING /tmp/ccjbMjHD.s page 1225
+
+
+ 50745 .LASF241:
+ 50746 02f1 7263496E .string "rcInterface"
+ 50746 74657266
+ 50746 61636500
+ 50747 .LASF169:
+ 50748 02fd 72635265 .string "rcResolving"
+ 50748 736F6C76
+ 50748 696E6700
+ 50749 .LASF111:
+ 50750 0309 72634469 .string "rcDirectory"
+ 50750 72656374
+ 50750 6F727900
+ 50751 .LASF2:
+ 50752 0315 6C6F6E67 .string "long int"
+ 50752 20696E74
+ 50752 00
+ 50753 .LASF59:
+ 50754 031e 41455357 .string "AESWord"
+ 50754 6F726400
+ 50755 .LASF199:
+ 50756 0326 72635661 .string "rcValidating"
+ 50756 6C696461
+ 50756 74696E67
+ 50756 00
+ 50757 .LASF101:
+ 50758 0333 72634172 .string "rcArgv"
+ 50758 677600
+ 50759 .LASF77:
+ 50760 033a 72634353 .string "rcCS"
+ 50760 00
+ 50761 .LASF158:
+ 50762 033f 72635572 .string "rcUri"
+ 50762 6900
+ 50763 .LASF180:
+ 50764 0345 72634372 .string "rcCreating"
+ 50764 65617469
+ 50764 6E6700
+ 50765 .LASF347:
+ 50766 0350 6B676173 .string "kgastate"
+ 50766 74617465
+ 50766 00
+ 50767 .LASF53:
+ 50768 0359 656E6372 .string "encrypt"
+ 50768 79707400
+ 50769 .LASF17:
+ 50770 0361 76313238 .string "v128_u8_t"
+ 50770 5F75385F
+ 50770 7400
+ 50771 .LASF25:
+ 50772 036b 4442475F .string "DBG_XML"
+ 50772 584D4C00
+ 50773 .LASF345:
+ 50774 0373 73686966 .string "shift"
+ 50774 7400
+ 50775 .LASF37:
+ 50776 0379 4442475F .string "DBG_MOD_COUNT"
+ 50776 4D4F445F
+
GAS LISTING /tmp/ccjbMjHD.s page 1226
+
+
+ 50776 434F554E
+ 50776 5400
+ 50777 .LASF82:
+ 50778 0387 72634442 .string "rcDB"
+ 50778 00
+ 50779 .LASF369:
+ 50780 038c 4B414553 .string "KAESBlockCipherVecRegVecSLLBI"
+ 50780 426C6F63
+ 50780 6B436970
+ 50780 68657256
+ 50780 65635265
+ 50781 .LASF260:
+ 50782 03aa 7263436F .string "rcConnection"
+ 50782 6E6E6563
+ 50782 74696F6E
+ 50782 00
+ 50783 .LASF128:
+ 50784 03b7 72634D67 .string "rcMgr"
+ 50784 7200
+ 50785 .LASF290:
+ 50786 03bd 72635669 .string "rcViolated"
+ 50786 6F6C6174
+ 50786 656400
+ 50787 .LASF223:
+ 50788 03c8 72634465 .string "rcDecrypting"
+ 50788 63727970
+ 50788 74696E67
+ 50788 00
+ 50789 .LASF0:
+ 50790 03d5 7369676E .string "signed char"
+ 50790 65642063
+ 50790 68617200
+ 50791 .LASF4:
+ 50792 03e1 75696E74 .string "uint8_t"
+ 50792 385F7400
+ 50793 .LASF106:
+ 50794 03e9 72634368 .string "rcChar"
+ 50794 617200
+ 50795 .LASF367:
+ 50796 03f0 4B414553 .string "KAESBlockCipherVecRegVecSRLBI"
+ 50796 426C6F63
+ 50796 6B436970
+ 50796 68657256
+ 50796 65635265
+ 50797 .LASF91:
+ 50798 040e 72635244 .string "rcRDBMS"
+ 50798 424D5300
+ 50799 .LASF392:
+ 50800 0416 496E7653 .string "InvShiftRowTable"
+ 50800 68696674
+ 50800 526F7754
+ 50800 61626C65
+ 50800 00
+ 50801 .LASF200:
+ 50802 0427 72634578 .string "rcExecuting"
+ 50802 65637574
+ 50802 696E6700
+
GAS LISTING /tmp/ccjbMjHD.s page 1227
+
+
+ 50803 .LASF366:
+ 50804 0433 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 50804 45545459
+ 50804 5F46554E
+ 50804 4354494F
+ 50804 4E5F5F00
+ 50805 .LASF18:
+ 50806 0447 4442475F .string "DBG_MOD_NOT_FOUND"
+ 50806 4D4F445F
+ 50806 4E4F545F
+ 50806 464F554E
+ 50806 4400
+ 50807 .LASF324:
+ 50808 0459 636F6C75 .string "column"
+ 50808 6D6E00
+ 50809 .LASF187:
+ 50810 0460 72635265 .string "rcReverting"
+ 50810 76657274
+ 50810 696E6700
+ 50811 .LASF103:
+ 50812 046c 72634261 .string "rcBarrier"
+ 50812 72726965
+ 50812 7200
+ 50813 .LASF287:
+ 50814 0476 72634578 .string "rcExhausted"
+ 50814 68617573
+ 50814 74656400
+ 50815 .LASF5:
+ 50816 0482 756E7369 .string "unsigned char"
+ 50816 676E6564
+ 50816 20636861
+ 50816 7200
+ 50817 .LASF160:
+ 50818 0490 5243436F .string "RCContext"
+ 50818 6E746578
+ 50818 7400
+ 50819 .LASF123:
+ 50820 049a 72634C6F .string "rcLock"
+ 50820 636B00
+ 50821 .LASF276:
+ 50822 04a1 72634261 .string "rcBadVersion"
+ 50822 64566572
+ 50822 73696F6E
+ 50822 00
+ 50823 .LASF277:
+ 50824 04ae 72634465 .string "rcDestroyed"
+ 50824 7374726F
+ 50824 79656400
+ 50825 .LASF140:
+ 50826 04ba 72635374 .string "rcString"
+ 50826 72696E67
+ 50826 00
+ 50827 .LASF353:
+ 50828 04c3 4B414553 .string "KAESBlockCipherVecRegRotWord"
+ 50828 426C6F63
+ 50828 6B436970
+ 50828 68657256
+
GAS LISTING /tmp/ccjbMjHD.s page 1228
+
+
+ 50828 65635265
+ 50829 .LASF102:
+ 50830 04e0 72634174 .string "rcAttr"
+ 50830 747200
+ 50831 .LASF124:
+ 50832 04e7 72634C6F .string "rcLog"
+ 50832 6700
+ 50833 .LASF411:
+ 50834 04ed 6E65775F .string "new_obj"
+ 50834 6F626A00
+ 50835 .LASF319:
+ 50836 04f5 4B414553 .string "KAESBlockCipherVecRegStateIn"
+ 50836 426C6F63
+ 50836 6B436970
+ 50836 68657256
+ 50836 65635265
+ 50837 .LASF21:
+ 50838 0512 4442475F .string "DBG_KDB"
+ 50838 4B444200
+ 50839 .LASF228:
+ 50840 051a 72635072 .string "rcProcessing"
+ 50840 6F636573
+ 50840 73696E67
+ 50840 00
+ 50841 .LASF78:
+ 50842 0527 72634646 .string "rcFF"
+ 50842 00
+ 50843 .LASF357:
+ 50844 052c 76696E32 .string "vin2"
+ 50844 00
+ 50845 .LASF79:
+ 50846 0531 72634653 .string "rcFS"
+ 50846 00
+ 50847 .LASF62:
+ 50848 0536 62797465 .string "bytes"
+ 50848 7300
+ 50849 .LASF364:
+ 50850 053c 4B414553 .string "KAESBlockCipherVecRegFF_mul"
+ 50850 426C6F63
+ 50850 6B436970
+ 50850 68657256
+ 50850 65635265
+ 50851 .LASF166:
+ 50852 0558 72634163 .string "rcAccessing"
+ 50852 63657373
+ 50852 696E6700
+ 50853 .LASF408:
+ 50854 0564 4B414553 .string "KAESBlockCipherVecRegProcessorSupport"
+ 50854 426C6F63
+ 50854 6B436970
+ 50854 68657256
+ 50854 65635265
+ 50855 .LASF284:
+ 50856 058a 7263496E .string "rcInterrupted"
+ 50856 74657272
+ 50856 75707465
+ 50856 6400
+
GAS LISTING /tmp/ccjbMjHD.s page 1229
+
+
+ 50857 .LASF292:
+ 50858 0598 72634E6F .string "rcNotFound"
+ 50858 74466F75
+ 50858 6E6400
+ 50859 .LASF331:
+ 50860 05a3 6269745F .string "bit_count"
+ 50860 636F756E
+ 50860 7400
+ 50861 .LASF340:
+ 50862 05ad 53686966 .string "ShiftRowTable"
+ 50862 74526F77
+ 50862 5461626C
+ 50862 6500
+ 50863 .LASF12:
+ 50864 05bb 63686172 .string "char"
+ 50864 00
+ 50865 .LASF130:
+ 50866 05c0 72634E6F .string "rcNode"
+ 50866 646500
+ 50867 .LASF35:
+ 50868 05c7 4442475F .string "DBG_AES"
+ 50868 41455300
+ 50869 .LASF261:
+ 50870 05cf 72634572 .string "rcError"
+ 50870 726F7200
+ 50871 .LASF350:
+ 50872 05d7 72636F6E .string "rconw"
+ 50872 7700
+ 50873 .LASF330:
+ 50874 05dd 6F705F50 .string "op_PSRLDI128"
+ 50874 53524C44
+ 50874 49313238
+ 50874 00
+ 50875 .LASF178:
+ 50876 05ea 7263436C .string "rcClearing"
+ 50876 65617269
+ 50876 6E6700
+ 50877 .LASF236:
+ 50878 05f5 72634F66 .string "rcOffset"
+ 50878 66736574
+ 50878 00
+ 50879 .LASF182:
+ 50880 05fe 7263436C .string "rcClosing"
+ 50880 6F73696E
+ 50880 6700
+ 50881 .LASF114:
+ 50882 0608 72634669 .string "rcFile"
+ 50882 6C6500
+ 50883 .LASF143:
+ 50884 060f 72635469 .string "rcTimeout"
+ 50884 6D656F75
+ 50884 7400
+ 50885 .LASF332:
+ 50886 0619 4B414553 .string "KAESBlockCipherVecRegPackShuffleBytes"
+ 50886 426C6F63
+ 50886 6B436970
+ 50886 68657256
+
GAS LISTING /tmp/ccjbMjHD.s page 1230
+
+
+ 50886 65635265
+ 50887 .LASF404:
+ 50888 063f 4B414553 .string "KAESBlockCipherVecRegSetDecryptKey"
+ 50888 426C6F63
+ 50888 6B436970
+ 50888 68657256
+ 50888 65635265
+ 50889 .LASF131:
+ 50890 0662 72634E75 .string "rcNumeral"
+ 50890 6D657261
+ 50890 6C00
+ 50891 .LASF373:
+ 50892 066c 4B414553 .string "KAESBlockCipherVecRegEqInvKeyExpansion128"
+ 50892 426C6F63
+ 50892 6B436970
+ 50892 68657256
+ 50892 65635265
+ 50893 .LASF208:
+ 50894 0696 72635761 .string "rcWaiting"
+ 50894 6974696E
+ 50894 6700
+ 50895 .LASF360:
+ 50896 06a0 4B414553 .string "KAESBlockCipherVecRegKeyExpansion192"
+ 50896 426C6F63
+ 50896 6B436970
+ 50896 68657256
+ 50896 65635265
+ 50897 .LASF212:
+ 50898 06c5 72634650 .string "rcFPCoding"
+ 50898 436F6469
+ 50898 6E6700
+ 50899 .LASF264:
+ 50900 06d0 72635369 .string "rcSize"
+ 50900 7A6500
+ 50901 .LASF249:
+ 50902 06d7 72634469 .string "rcDirEntry"
+ 50902 72456E74
+ 50902 727900
+ 50903 .LASF390:
+ 50904 06e2 4B414553 .string "KAESBlockCipherVecRegInvSubBytes"
+ 50904 426C6F63
+ 50904 6B436970
+ 50904 68657256
+ 50904 65635265
+ 50905 .LASF201:
+ 50906 0703 72634875 .string "rcHuffmanCoding"
+ 50906 66666D61
+ 50906 6E436F64
+ 50906 696E6700
+ 50907 .LASF30:
+ 50908 0713 4442475F .string "DBG_KFG"
+ 50908 4B464700
+ 50909 .LASF68:
+ 50910 071b 636F6C75 .string "columns"
+ 50910 6D6E7300
+ 50911 .LASF407:
+ 50912 0723 4B414553 .string "KAESBlockCipherVecRegDecrypt"
+
GAS LISTING /tmp/ccjbMjHD.s page 1231
+
+
+ 50912 426C6F63
+ 50912 6B436970
+ 50912 68657256
+ 50912 65635265
+ 50913 .LASF282:
+ 50914 0740 72634275 .string "rcBusy"
+ 50914 737900
+ 50915 .LASF27:
+ 50916 0747 4442475F .string "DBG_SRA"
+ 50916 53524100
+ 50917 .LASF240:
+ 50918 074f 72635472 .string "rcTransfer"
+ 50918 616E7366
+ 50918 657200
+ 50919 .LASF24:
+ 50920 075a 4442475F .string "DBG_KFS"
+ 50920 4B465300
+ 50921 .LASF368:
+ 50922 0762 73725F6D .string "sr_mask"
+ 50922 61736B00
+ 50923 .LASF195:
+ 50924 076a 72635061 .string "rcPacking"
+ 50924 636B696E
+ 50924 6700
+ 50925 .LASF191:
+ 50926 0774 7263436F .string "rcCopying"
+ 50926 7079696E
+ 50926 6700
+ 50927 .LASF359:
+ 50928 077e 4B414553 .string "KAESBlockCipherVecRegKeyExpansion128"
+ 50928 426C6F63
+ 50928 6B436970
+ 50928 68657256
+ 50928 65635265
+ 50929 .LASF335:
+ 50930 07a3 6F705F50 .string "op_PSHUFB128"
+ 50930 53485546
+ 50930 42313238
+ 50930 00
+ 50931 .LASF198:
+ 50932 07b0 72634465 .string "rcDecoding"
+ 50932 636F6469
+ 50932 6E6700
+ 50933 .LASF171:
+ 50934 07bb 7263556E .string "rcUnlocking"
+ 50934 6C6F636B
+ 50934 696E6700
+ 50935 .LASF56:
+ 50936 07c7 4B426C6F .string "KBlockCipherVec_vt_v1"
+ 50936 636B4369
+ 50936 70686572
+ 50936 5665635F
+ 50936 76745F76
+ 50937 .LASF23:
+ 50938 07dd 4442475F .string "DBG_LEGREF"
+ 50938 4C454752
+ 50938 454600
+
GAS LISTING /tmp/ccjbMjHD.s page 1232
+
+
+ 50939 .LASF172:
+ 50940 07e8 72635265 .string "rcRenaming"
+ 50940 6E616D69
+ 50940 6E6700
+ 50941 .LASF401:
+ 50942 07f3 75736572 .string "user_key"
+ 50942 5F6B6579
+ 50942 00
+ 50943 .LASF242:
+ 50944 07fc 72634964 .string "rcId"
+ 50944 00
+ 50945 .LASF155:
+ 50946 0801 7263436D .string "rcCmd"
+ 50946 6400
+ 50947 .LASF33:
+ 50948 0807 4442475F .string "DBG_LOADLIB"
+ 50948 4C4F4144
+ 50948 4C494200
+ 50949 .LASF294:
+ 50950 0813 7263556E .string "rcUnlocked"
+ 50950 6C6F636B
+ 50950 656400
+ 50951 .LASF95:
+ 50952 081e 52434D6F .string "RCModule"
+ 50952 64756C65
+ 50952 00
+ 50953 .LASF256:
+ 50954 0827 7263456E .string "rcEncryption"
+ 50954 63727970
+ 50954 74696F6E
+ 50954 00
+ 50955 .LASF291:
+ 50956 0834 72634578 .string "rcExists"
+ 50956 69737473
+ 50956 00
+ 50957 .LASF44:
+ 50958 083d 43697068 .string "CipherVec"
+ 50958 65725665
+ 50958 6300
+ 50959 .LASF362:
+ 50960 0847 4B414553 .string "KAESBlockCipherVecRegKeyExpansion256"
+ 50960 426C6F63
+ 50960 6B436970
+ 50960 68657256
+ 50960 65635265
+ 50961 .LASF310:
+ 50962 086c 72634F70 .string "rcOpen"
+ 50962 656E00
+ 50963 .LASF296:
+ 50964 0873 72634465 .string "rcDeadlock"
+ 50964 61646C6F
+ 50964 636B00
+ 50965 .LASF233:
+ 50966 087e 72634C69 .string "rcLink"
+ 50966 6E6B00
+ 50967 .LASF220:
+ 50968 0885 7263466C .string "rcFlushing"
+
GAS LISTING /tmp/ccjbMjHD.s page 1233
+
+
+ 50968 75736869
+ 50968 6E6700
+ 50969 .LASF395:
+ 50970 0890 4B414553 .string "KAESBlockCipherVecRegDestroy"
+ 50970 426C6F63
+ 50970 6B436970
+ 50970 68657256
+ 50970 65635265
+ 50971 .LASF268:
+ 50972 08ad 72634E6F .string "rcNoErr"
+ 50972 45727200
+ 50973 .LASF393:
+ 50974 08b5 4B414553 .string "KAESBlockCipherVecRegEqInvLastRound"
+ 50974 426C6F63
+ 50974 6B436970
+ 50974 68657256
+ 50974 65635265
+ 50975 .LASF412:
+ 50976 08d9 7665635F .string "vec_00"
+ 50976 303000
+ 50977 .LASF413:
+ 50978 08e0 7665635F .string "vec_01"
+ 50978 303100
+ 50979 .LASF247:
+ 50980 08e7 72635461 .string "rcTag"
+ 50980 6700
+ 50981 .LASF416:
+ 50982 08ed 4B414553 .string "KAESBlockCipherVecRegRijndaelSBox"
+ 50982 426C6F63
+ 50982 6B436970
+ 50982 68657256
+ 50982 65635265
+ 50983 .LASF29:
+ 50984 090f 4442475F .string "DBG_ALIGN"
+ 50984 414C4947
+ 50984 4E00
+ 50985 .LASF211:
+ 50986 0919 72634C6F .string "rcLogging"
+ 50986 6767696E
+ 50986 6700
+ 50987 .LASF304:
+ 50988 0923 7263546F .string "rcTooBig"
+ 50988 6F426967
+ 50988 00
+ 50989 .LASF148:
+ 50990 092c 72635665 .string "rcVector"
+ 50990 63746F72
+ 50990 00
+ 50991 .LASF183:
+ 50992 0935 72635265 .string "rcResizing"
+ 50992 73697A69
+ 50992 6E6700
+ 50993 .LASF157:
+ 50994 0940 72635175 .string "rcQuery"
+ 50994 65727900
+ 50995 .LASF10:
+ 50996 0948 6C6F6E67 .string "long unsigned int"
+
GAS LISTING /tmp/ccjbMjHD.s page 1234
+
+
+ 50996 20756E73
+ 50996 69676E65
+ 50996 6420696E
+ 50996 7400
+ 50997 .LASF289:
+ 50998 095a 72634578 .string "rcExcessive"
+ 50998 63657373
+ 50998 69766500
+ 50999 .LASF352:
+ 51000 0966 4B414553 .string "KAESBlockCipherVecRegSubWord"
+ 51000 426C6F63
+ 51000 6B436970
+ 51000 68657256
+ 51000 65635265
+ 51001 .LASF421:
+ 51002 0983 4B414553 .string "KAESBlockCipherVecRegFFtable"
+ 51002 426C6F63
+ 51002 6B436970
+ 51002 68657256
+ 51002 65635265
+ 51003 .LASF217:
+ 51004 09a0 72634576 .string "rcEvaluating"
+ 51004 616C7561
+ 51004 74696E67
+ 51004 00
+ 51005 .LASF154:
+ 51006 09ad 7263526E .string "rcRng"
+ 51006 6700
+ 51007 .LASF162:
+ 51008 09b3 72634361 .string "rcCasting"
+ 51008 7374696E
+ 51008 6700
+ 51009 .LASF396:
+ 51010 09bd 73656C66 .string "self"
+ 51010 00
+ 51011 .LASF122:
+ 51012 09c2 72634974 .string "rcIterator"
+ 51012 65726174
+ 51012 6F7200
+ 51013 .LASF57:
+ 51014 09cd 4B426C6F .string "KBlockCipherVec"
+ 51014 636B4369
+ 51014 70686572
+ 51014 56656300
+ 51015 .LASF415:
+ 51016 09dd 7665635F .string "vec_10"
+ 51016 313000
+ 51017 .LASF355:
+ 51018 09e4 6F705F53 .string "op_SHUFPD"
+ 51018 48554650
+ 51018 4400
+ 51019 .LASF358:
+ 51020 09ee 4B414553 .string "KAESBlockCipherVecRegStateMerge2"
+ 51020 426C6F63
+ 51020 6B436970
+ 51020 68657256
+ 51020 65635265
+
GAS LISTING /tmp/ccjbMjHD.s page 1235
+
+
+ 51021 .LASF139:
+ 51022 0a0f 72635374 .string "rcStorage"
+ 51022 6F726167
+ 51022 6500
+ 51023 .LASF394:
+ 51024 0a19 4B414553 .string "KAESBlockCipherVecRegEqInvCipher"
+ 51024 426C6F63
+ 51024 6B436970
+ 51024 68657256
+ 51024 65635265
+ 51025 .LASF325:
+ 51026 0a3a 77686963 .string "which"
+ 51026 6800
+ 51027 .LASF372:
+ 51028 0a40 4B414553 .string "KAESBlockCipherVecRegEqInvKeyExpansion"
+ 51028 426C6F63
+ 51028 6B436970
+ 51028 68657256
+ 51028 65635265
+ 51029 .LASF306:
+ 51030 0a67 72634F75 .string "rcOutOfKDirectory"
+ 51030 744F664B
+ 51030 44697265
+ 51030 63746F72
+ 51030 7900
+ 51031 .LASF251:
+ 51032 0a79 7263526F .string "rcRow"
+ 51032 7700
+ 51033 .LASF26:
+ 51034 0a7f 4442475F .string "DBG_VDB"
+ 51034 56444200
+ 51035 .LASF151:
+ 51036 0a87 72634C61 .string "rcLastTarget_v1_0"
+ 51036 73745461
+ 51036 72676574
+ 51036 5F76315F
+ 51036 3000
+ 51037 .LASF159:
+ 51038 0a99 72634C61 .string "rcLastTarget_v1_1"
+ 51038 73745461
+ 51038 72676574
+ 51038 5F76315F
+ 51038 3100
+ 51039 .LASF138:
+ 51040 0aab 72635365 .string "rcSemaphore"
+ 51040 6D617068
+ 51040 6F726500
+ 51041 .LASF283:
+ 51042 0ab7 7263496E .string "rcIncomplete"
+ 51042 636F6D70
+ 51042 6C657465
+ 51042 00
+ 51043 .LASF312:
+ 51044 0ac4 72634E6F .string "rcNotOpen"
+ 51044 744F7065
+ 51044 6E00
+ 51045 .LASF121:
+
GAS LISTING /tmp/ccjbMjHD.s page 1236
+
+
+ 51046 0ace 7263496E .string "rcIndex"
+ 51046 64657800
+ 51047 .LASF28:
+ 51048 0ad6 4442475F .string "DBG_XARC"
+ 51048 58415243
+ 51048 00
+ 51049 .LASF425:
+ 51050 0adf 474E5520 .string "GNU C 4.4.2"
+ 51050 4320342E
+ 51050 342E3200
+ 51051 .LASF74:
+ 51052 0aeb 72635275 .string "rcRuntime"
+ 51052 6E74696D
+ 51052 6500
+ 51053 .LASF113:
+ 51054 0af5 7263586D .string "rcXmlDoc"
+ 51054 6C446F63
+ 51054 00
+ 51055 .LASF382:
+ 51056 0afe 4B414553 .string "KAESBlockCipherVecRegShiftRows"
+ 51056 426C6F63
+ 51056 6B436970
+ 51056 68657256
+ 51056 65635265
+ 51057 .LASF13:
+ 51058 0b1d 6C6F6E67 .string "long long int"
+ 51058 206C6F6E
+ 51058 6720696E
+ 51058 7400
+ 51059 .LASF194:
+ 51060 0b2b 7263506F .string "rcPositioning"
+ 51060 73697469
+ 51060 6F6E696E
+ 51060 6700
+ 51061 .LASF135:
+ 51062 0b39 72635175 .string "rcQueue"
+ 51062 65756500
+ 51063 .LASF210:
+ 51064 0b41 72634465 .string "rcDetaching"
+ 51064 74616368
+ 51064 696E6700
+ 51065 .LASF125:
+ 51066 0b4d 72634D44 .string "rcMD5SumFmt"
+ 51066 3553756D
+ 51066 466D7400
+ 51067 .LASF176:
+ 51068 0b59 7263496E .string "rcInserting"
+ 51068 73657274
+ 51068 696E6700
+ 51069 .LASF224:
+ 51070 0b65 7263436F .string "rcComparing"
+ 51070 6D706172
+ 51070 696E6700
+ 51071 .LASF286:
+ 51072 0b71 7263456D .string "rcEmpty"
+ 51072 70747900
+ 51073 .LASF118:
+
GAS LISTING /tmp/ccjbMjHD.s page 1237
+
+
+ 51074 0b79 7263466F .string "rcFormatter"
+ 51074 726D6174
+ 51074 74657200
+ 51075 .LASF381:
+ 51076 0b85 6D726F75 .string "mround_keys"
+ 51076 6E645F6B
+ 51076 65797300
+ 51077 .LASF341:
+ 51078 0b91 4B414553 .string "KAESBlockCipherVecRegVecXor"
+ 51078 426C6F63
+ 51078 6B436970
+ 51078 68657256
+ 51078 65635265
+ 51079 .LASF16:
+ 51080 0bad 646F7562 .string "double"
+ 51080 6C6500
+ 51081 .LASF203:
+ 51082 0bb4 72635265 .string "rcRegistering"
+ 51082 67697374
+ 51082 6572696E
+ 51082 6700
+ 51083 .LASF92:
+ 51084 0bc2 72634E53 .string "rcNS"
+ 51084 00
+ 51085 .LASF235:
+ 51086 0bc7 72635061 .string "rcParam"
+ 51086 72616D00
+ 51087 .LASF374:
+ 51088 0bcf 4B414553 .string "KAESBlockCipherVecRegEqInvKeyExpansion192"
+ 51088 426C6F63
+ 51088 6B436970
+ 51088 68657256
+ 51088 65635265
+ 51089 .LASF96:
+ 51090 0bf9 52435461 .string "RCTarget"
+ 51090 72676574
+ 51090 00
+ 51091 .LASF42:
+ 51092 0c02 4442475F .string "DBG_AES_OBJECT"
+ 51092 4145535F
+ 51092 4F424A45
+ 51092 435400
+ 51093 .LASF334:
+ 51094 0c11 6D61736B .string "mask"
+ 51094 00
+ 51095 .LASF257:
+ 51096 0c16 72634372 .string "rcCrc"
+ 51096 6300
+ 51097 .LASF386:
+ 51098 0c1c 62737761 .string "bswap_32"
+ 51098 705F3332
+ 51098 00
+ 51099 .LASF32:
+ 51100 0c25 4442475F .string "DBG_SEARCH"
+ 51100 53454152
+ 51100 434800
+ 51101 .LASF85:
+
GAS LISTING /tmp/ccjbMjHD.s page 1238
+
+
+ 51102 0c30 7263584D .string "rcXML"
+ 51102 4C00
+ 51103 .LASF384:
+ 51104 0c36 4B414553 .string "KAESBlockCipherVecRegFF_mul_02"
+ 51104 426C6F63
+ 51104 6B436970
+ 51104 68657256
+ 51104 65635265
+ 51105 .LASF34:
+ 51106 0c55 4442475F .string "DBG_VFS"
+ 51106 56465300
+ 51107 .LASF38:
+ 51108 0c5d 4442475F .string "DBG_AES_KEYEXP"
+ 51108 4145535F
+ 51108 4B455945
+ 51108 585000
+ 51109 .LASF426:
+ 51110 0c6c 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 51110 652F726F
+ 51110 6461726D
+ 51110 65722F73
+ 51110 72615F73
+ 51111 .LASF14:
+ 51112 0ca2 666C6F61 .string "float"
+ 51112 7400
+ 51113 .LASF179:
+ 51114 0ca8 72635570 .string "rcUpdating"
+ 51114 64617469
+ 51114 6E6700
+ 51115 .LASF206:
+ 51116 0cb3 7263436F .string "rcConverting"
+ 51116 6E766572
+ 51116 74696E67
+ 51116 00
+ 51117 .LASF192:
+ 51118 0cc0 7263436F .string "rcConcatenating"
+ 51118 6E636174
+ 51118 656E6174
+ 51118 696E6700
+ 51119 .LASF71:
+ 51120 0cd0 4B426C6F .string "KBlockCipher"
+ 51120 636B4369
+ 51120 70686572
+ 51120 00
+ 51121 .LASF149:
+ 51122 0cdd 72634479 .string "rcDylib"
+ 51122 6C696200
+ 51123 .LASF298:
+ 51124 0ce5 72635265 .string "rcReadonly"
+ 51124 61646F6E
+ 51124 6C7900
+ 51125 .LASF8:
+ 51126 0cf0 756E7369 .string "unsigned int"
+ 51126 676E6564
+ 51126 20696E74
+ 51126 00
+ 51127 .LASF69:
+
GAS LISTING /tmp/ccjbMjHD.s page 1239
+
+
+ 51128 0cfd 67726964 .string "grid"
+ 51128 00
+ 51129 .LASF41:
+ 51130 0d02 4442475F .string "DBG_AES_INVCIPHER"
+ 51130 4145535F
+ 51130 494E5643
+ 51130 49504845
+ 51130 5200
+ 51131 .LASF299:
+ 51132 0d14 72635772 .string "rcWriteonly"
+ 51132 6974656F
+ 51132 6E6C7900
+ 51133 .LASF293:
+ 51134 0d20 72634C6F .string "rcLocked"
+ 51134 636B6564
+ 51134 00
+ 51135 .LASF175:
+ 51136 0d29 72635072 .string "rcProjecting"
+ 51136 6F6A6563
+ 51136 74696E67
+ 51136 00
+ 51137 .LASF80:
+ 51138 0d36 72635053 .string "rcPS"
+ 51138 00
+ 51139 .LASF265:
+ 51140 0d3b 72635265 .string "rcRefcount"
+ 51140 66636F75
+ 51140 6E7400
+ 51141 .LASF100:
+ 51142 0d46 7263546F .string "rcTocEntry"
+ 51142 63456E74
+ 51142 727900
+ 51143 .LASF255:
+ 51144 0d51 72634D6F .string "rcMode"
+ 51144 646500
+ 51145 .LASF365:
+ 51146 0d58 62697473 .string "bits"
+ 51146 00
+ 51147 .LASF314:
+ 51148 0d5d 7263556E .string "rcUnequal"
+ 51148 65717561
+ 51148 6C00
+ 51149 .LASF295:
+ 51150 0d67 72634465 .string "rcDetached"
+ 51150 74616368
+ 51150 656400
+ 51151 .LASF375:
+ 51152 0d72 4B414553 .string "KAESBlockCipherVecRegEqInvKeyExpansion256"
+ 51152 426C6F63
+ 51152 6B436970
+ 51152 68657256
+ 51152 65635265
+ 51153 .LASF301:
+ 51154 0d9c 7263496E .string "rcInPlaceNotAllowed"
+ 51154 506C6163
+ 51154 654E6F74
+ 51154 416C6C6F
+
GAS LISTING /tmp/ccjbMjHD.s page 1240
+
+
+ 51154 77656400
+ 51155 .LASF346:
+ 51156 0db0 4B414553 .string "KAESBlockCipherVecRegStateShiftLeft32"
+ 51156 426C6F63
+ 51156 6B436970
+ 51156 68657256
+ 51156 65635265
+ 51157 .LASF243:
+ 51158 0dd6 72635261 .string "rcRange"
+ 51158 6E676500
+ 51159 .LASF336:
+ 51160 0dde 76746162 .string "vtab"
+ 51160 00
+ 51161 .LASF427:
+ 51162 0de3 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 51162 652F726F
+ 51162 6461726D
+ 51162 65722F73
+ 51162 72615F73
+ 51163 .LASF253:
+ 51164 0e2b 72634C61 .string "rcLastObject_v1_0"
+ 51164 73744F62
+ 51164 6A656374
+ 51164 5F76315F
+ 51164 3000
+ 51165 .LASF266:
+ 51166 0e3d 72634C61 .string "rcLastObject_v1_1"
+ 51166 73744F62
+ 51166 6A656374
+ 51166 5F76315F
+ 51166 3100
+ 51167 .LASF219:
+ 51168 0e4f 72634C61 .string "rcLastContext_v1_0"
+ 51168 7374436F
+ 51168 6E746578
+ 51168 745F7631
+ 51168 5F3000
+ 51169 .LASF230:
+ 51170 0e62 72634C61 .string "rcLastContext_v1_1"
+ 51170 7374436F
+ 51170 6E746578
+ 51170 745F7631
+ 51170 5F3100
+ 51171 .LASF321:
+ 51172 0e75 72636F6E .string "rcon"
+ 51172 00
+ 51173 .LASF379:
+ 51174 0e7a 4B414553 .string "KAESBlockCipherVecRegMiddleRound"
+ 51174 426C6F63
+ 51174 6B436970
+ 51174 68657256
+ 51174 65635265
+ 51175 .LASF126:
+ 51176 0e9b 72634D65 .string "rcMemMap"
+ 51176 6D4D6170
+ 51176 00
+ 51177 .LASF423:
+
GAS LISTING /tmp/ccjbMjHD.s page 1241
+
+
+ 51178 0ea4 4B414553 .string "KAESBlockCipherVecRegaes_ncbi_name"
+ 51178 426C6F63
+ 51178 6B436970
+ 51178 68657256
+ 51178 65635265
+ 51179 .LASF58:
+ 51180 0ec7 41455342 .string "AESByte"
+ 51180 79746500
+ 51181 .LASF150:
+ 51182 0ecf 72634578 .string "rcExpression"
+ 51182 70726573
+ 51182 73696F6E
+ 51182 00
+ 51183 .LASF418:
+ 51184 0edc 4B414553 .string "KAESBlockCipherVecRegRijndaelInvSBoxV"
+ 51184 426C6F63
+ 51184 6B436970
+ 51184 68657256
+ 51184 65635265
+ 51185 .LASF196:
+ 51186 0f02 7263556E .string "rcUnpacking"
+ 51186 7061636B
+ 51186 696E6700
+ 51187 .LASF112:
+ 51188 0f0e 7263446F .string "rcDoc"
+ 51188 6300
+ 51189 .LASF19:
+ 51190 0f14 4442475F .string "DBG_APP"
+ 51190 41505000
+ 51191 .LASF213:
+ 51192 0f1c 72634D75 .string "rcMultiplexing"
+ 51192 6C746970
+ 51192 6C657869
+ 51192 6E6700
+ 51193 .LASF215:
+ 51194 0f2b 72635365 .string "rcSearching"
+ 51194 61726368
+ 51194 696E6700
+ 51195 .LASF420:
+ 51196 0f37 46465F74 .string "FF_tab"
+ 51196 616200
+ 51197 .LASF315:
+ 51198 0f3e 72634661 .string "rcFailed"
+ 51198 696C6564
+ 51198 00
+ 51199 .LASF40:
+ 51200 0f47 4442475F .string "DBG_AES_INVKEYEXP"
+ 51200 4145535F
+ 51200 494E564B
+ 51200 45594558
+ 51200 5000
+ 51201 .LASF119:
+ 51202 0f59 72634675 .string "rcFunctParam"
+ 51202 6E637450
+ 51202 6172616D
+ 51202 00
+ 51203 .LASF280:
+
GAS LISTING /tmp/ccjbMjHD.s page 1242
+
+
+ 51204 0f66 7263496E .string "rcIncorrect"
+ 51204 636F7272
+ 51204 65637400
+ 51205 .LASF61:
+ 51206 0f72 776F7264 .string "word"
+ 51206 00
+ 51207 .LASF371:
+ 51208 0f77 6F705F50 .string "op_PSLLDI128"
+ 51208 534C4C44
+ 51208 49313238
+ 51208 00
+ 51209 .LASF229:
+ 51210 0f84 72634964 .string "rcIdentifying"
+ 51210 656E7469
+ 51210 6679696E
+ 51210 6700
+ 51211 .LASF244:
+ 51212 0f92 7263436F .string "rcConstraint"
+ 51212 6E737472
+ 51212 61696E74
+ 51212 00
+ 51213 .LASF270:
+ 51214 0f9f 7263556E .string "rcUnknown"
+ 51214 6B6E6F77
+ 51214 6E00
+ 51215 .LASF109:
+ 51216 0fa9 72634375 .string "rcCursor"
+ 51216 72736F72
+ 51216 00
+ 51217 .LASF267:
+ 51218 0fb2 52435374 .string "RCState"
+ 51218 61746500
+ 51219 .LASF55:
+ 51220 0fba 4B426C6F .string "KBlockCipherByte"
+ 51220 636B4369
+ 51220 70686572
+ 51220 42797465
+ 51220 00
+ 51221 .LASF377:
+ 51222 0fcb 4B414553 .string "KAESBlockCipherVecRegAddRoundKey"
+ 51222 426C6F63
+ 51222 6B436970
+ 51222 68657256
+ 51222 65635265
+ 51223 .LASF46:
+ 51224 0fec 4B426C6F .string "KBlockCipherByte_vt_v1"
+ 51224 636B4369
+ 51224 70686572
+ 51224 42797465
+ 51224 5F76745F
+ 51225 .LASF307:
+ 51226 1003 72634967 .string "rcIgnored"
+ 51226 6E6F7265
+ 51226 6400
+ 51227 .LASF165:
+ 51228 100d 72635265 .string "rcReleasing"
+ 51228 6C656173
+
GAS LISTING /tmp/ccjbMjHD.s page 1243
+
+
+ 51228 696E6700
+ 51229 .LASF389:
+ 51230 1019 4B414553 .string "KAESBlockCipherVecRegEqInvMiddleRound"
+ 51230 426C6F63
+ 51230 6B436970
+ 51230 68657256
+ 51230 65635265
+ 51231 .LASF88:
+ 51232 103f 72634B46 .string "rcKFG"
+ 51232 4700
+ 51233 .LASF246:
+ 51234 1045 72634D65 .string "rcMessage"
+ 51234 73736167
+ 51234 6500
+ 51235 .LASF193:
+ 51236 104f 7263466F .string "rcFormatting"
+ 51236 726D6174
+ 51236 74696E67
+ 51236 00
+ 51237 .LASF86:
+ 51238 105c 72635352 .string "rcSRA"
+ 51238 4100
+ 51239 .LASF344:
+ 51240 1062 4B414553 .string "KAESBlockCipherVecRegShiftXorColumns"
+ 51240 426C6F63
+ 51240 6B436970
+ 51240 68657256
+ 51240 65635265
+ 51241 .LASF262:
+ 51242 1087 7263456E .string "rcEnvironment"
+ 51242 7669726F
+ 51242 6E6D656E
+ 51242 7400
+ 51243 .LASF15:
+ 51244 1095 6C6F6E67 .string "long long unsigned int"
+ 51244 206C6F6E
+ 51244 6720756E
+ 51244 7369676E
+ 51244 65642069
+ 51245 .LASF48:
+ 51246 10ac 64657374 .string "destroy"
+ 51246 726F7900
+ 51247 .LASF144:
+ 51248 10b4 7263546F .string "rcToken"
+ 51248 6B656E00
+ 51249 .LASF204:
+ 51250 10bc 7263546F .string "rcTokenizing"
+ 51250 6B656E69
+ 51250 7A696E67
+ 51250 00
+ 51251 .LASF22:
+ 51252 10c9 4442475F .string "DBG_REF"
+ 51252 52454600
+ 51253 .LASF338:
+ 51254 10d1 4B414553 .string "KAESBlockCipherVecRegVecSub"
+ 51254 426C6F63
+ 51254 6B436970
+
GAS LISTING /tmp/ccjbMjHD.s page 1244
+
+
+ 51254 68657256
+ 51254 65635265
+ 51255 .LASF185:
+ 51256 10ed 72635772 .string "rcWriting"
+ 51256 6974696E
+ 51256 6700
+ 51257 .LASF161:
+ 51258 10f7 7263416C .string "rcAllocating"
+ 51258 6C6F6361
+ 51258 74696E67
+ 51258 00
+ 51259 .LASF376:
+ 51260 1104 4B414553 .string "KAESBlockCipherVecRegFirstRound"
+ 51260 426C6F63
+ 51260 6B436970
+ 51260 68657256
+ 51260 65635265
+ 51261 .LASF327:
+ 51262 1124 4B414553 .string "KAESBlockCipherVecRegSubBytes"
+ 51262 426C6F63
+ 51262 6B436970
+ 51262 68657256
+ 51262 65635265
+ 51263 .LASF147:
+ 51264 1142 72635479 .string "rcType"
+ 51264 706500
+ 51265 .LASF248:
+ 51266 1149 72635265 .string "rcResources"
+ 51266 736F7572
+ 51266 63657300
+ 51267 .LASF354:
+ 51268 1155 4B414553 .string "KAESBlockCipherVecRegStateMerge1"
+ 51268 426C6F63
+ 51268 6B436970
+ 51268 68657256
+ 51268 65635265
+ 51269 .LASF129:
+ 51270 1176 72634E61 .string "rcNamelist"
+ 51270 6D656C69
+ 51270 737400
+ 51271 .LASF387:
+ 51272 1181 4B414553 .string "KAESBlockCipherVecRegCipher"
+ 51272 426C6F63
+ 51272 6B436970
+ 51272 68657256
+ 51272 65635265
+ 51273 .LASF337:
+ 51274 119d 4B414553 .string "KAESBlockCipherVecRegVecOr"
+ 51274 426C6F63
+ 51274 6B436970
+ 51274 68657256
+ 51274 65635265
+ 51275 .LASF313:
+ 51276 11b8 7263556E .string "rcUndefined"
+ 51276 64656669
+ 51276 6E656400
+ 51277 .LASF385:
+
GAS LISTING /tmp/ccjbMjHD.s page 1245
+
+
+ 51278 11c4 4B414553 .string "KAESBlockCipherVecRegLastRound"
+ 51278 426C6F63
+ 51278 6B436970
+ 51278 68657256
+ 51278 65635265
+ 51279 .LASF281:
+ 51280 11e3 7263496E .string "rcInconsistent"
+ 51280 636F6E73
+ 51280 69737465
+ 51280 6E7400
+ 51281 .LASF226:
+ 51282 11f2 72635265 .string "rcRetrieving"
+ 51282 74726965
+ 51282 76696E67
+ 51282 00
+ 51283 .LASF400:
+ 51284 11ff 656E6372 .string "encrypt_key"
+ 51284 7970745F
+ 51284 6B657900
+ 51285 .LASF54:
+ 51286 120b 64656372 .string "decrypt"
+ 51286 79707400
+ 51287 .LASF47:
+ 51288 1213 76657273 .string "version"
+ 51288 696F6E00
+ 51289 .LASF238:
+ 51290 121b 72634E61 .string "rcName"
+ 51290 6D6500
+ 51291 .LASF275:
+ 51292 1222 72634E75 .string "rcNull"
+ 51292 6C6C00
+ 51293 .LASF197:
+ 51294 1229 7263456E .string "rcEncoding"
+ 51294 636F6469
+ 51294 6E6700
+ 51295 .LASF116:
+ 51296 1234 72634669 .string "rcFileFormat"
+ 51296 6C65466F
+ 51296 726D6174
+ 51296 00
+ 51297 .LASF153:
+ 51298 1241 7263456E .string "rcEncryptionKey"
+ 51298 63727970
+ 51298 74696F6E
+ 51298 4B657900
+ 51299 .LASF218:
+ 51300 1251 7263496E .string "rcInflating"
+ 51300 666C6174
+ 51300 696E6700
+ 51301 .LASF323:
+ 51302 125d 4B414553 .string "KAESBlockCipherVecRegSetColumn"
+ 51302 426C6F63
+ 51302 6B436970
+ 51302 68657256
+ 51302 65635265
+ 51303 .LASF300:
+ 51304 127c 72634E6F .string "rcNoPerm"
+
GAS LISTING /tmp/ccjbMjHD.s page 1246
+
+
+ 51304 5065726D
+ 51304 00
+ 51305 .LASF333:
+ 51306 1285 64657374 .string "dest"
+ 51306 00
+ 51307 .LASF188:
+ 51308 128a 72635265 .string "rcResetting"
+ 51308 73657474
+ 51308 696E6700
+ 51309 .LASF49:
+ 51310 1296 626C6F63 .string "block_size"
+ 51310 6B5F7369
+ 51310 7A6500
+ 51311 .LASF136:
+ 51312 12a1 72635257 .string "rcRWLock"
+ 51312 4C6F636B
+ 51312 00
+ 51313 .LASF167:
+ 51314 12aa 72634C69 .string "rcListing"
+ 51314 7374696E
+ 51314 6700
+ 51315 .LASF414:
+ 51316 12b4 7665635F .string "vec_0F"
+ 51316 304600
+ 51317 .LASF117:
+ 51318 12bb 72634675 .string "rcFunction"
+ 51318 6E637469
+ 51318 6F6E00
+ 51319 .LASF39:
+ 51320 12c6 4442475F .string "DBG_AES_CIPHER"
+ 51320 4145535F
+ 51320 43495048
+ 51320 455200
+ 51321 .LASF273:
+ 51322 12d5 7263556E .string "rcUnrecognized"
+ 51322 7265636F
+ 51322 676E697A
+ 51322 656400
+ 51323 .LASF66:
+ 51324 12e4 6E756D62 .string "number_of_rounds"
+ 51324 65725F6F
+ 51324 665F726F
+ 51324 756E6473
+ 51324 00
+ 51325 .LASF356:
+ 51326 12f5 76696E31 .string "vin1"
+ 51326 00
+ 51327 .LASF89:
+ 51328 12fa 7263416C .string "rcAlign"
+ 51328 69676E00
+ 51329 .LASF152:
+ 51330 1302 72635072 .string "rcProduction"
+ 51330 6F647563
+ 51330 74696F6E
+ 51330 00
+ 51331 .LASF94:
+ 51332 130f 72634C61 .string "rcLastModule_v1_1"
+
GAS LISTING /tmp/ccjbMjHD.s page 1247
+
+
+ 51332 73744D6F
+ 51332 64756C65
+ 51332 5F76315F
+ 51332 3100
+ 51333 .LASF142:
+ 51334 1321 72635468 .string "rcThread"
+ 51334 72656164
+ 51334 00
+ 51335 .LASF391:
+ 51336 132a 4B414553 .string "KAESBlockCipherVecRegInvShiftRows"
+ 51336 426C6F63
+ 51336 6B436970
+ 51336 68657256
+ 51336 65635265
+ 51337 .LASF190:
+ 51338 134c 72634672 .string "rcFreezing"
+ 51338 65657A69
+ 51338 6E6700
+ 51339 .LASF52:
+ 51340 1357 7365745F .string "set_decrypt_key"
+ 51340 64656372
+ 51340 7970745F
+ 51340 6B657900
+ 51341 .LASF72:
+ 51342 1367 62797465 .string "byte"
+ 51342 00
+ 51343 .LASF45:
+ 51344 136c 4B426C6F .string "KBlockCipher_vt"
+ 51344 636B4369
+ 51344 70686572
+ 51344 5F767400
+ 51345 .LASF405:
+ 51346 137c 64656372 .string "decrypt_key"
+ 51346 7970745F
+ 51346 6B657900
+ 51347 .LASF378:
+ 51348 1388 726F756E .string "round_key"
+ 51348 645F6B65
+ 51348 7900
+ 51349 .LASF259:
+ 51350 1392 72635365 .string "rcSeed"
+ 51350 656400
+ 51351 .LASF216:
+ 51352 1399 72634C6F .string "rcLoading"
+ 51352 6164696E
+ 51352 6700
+ 51353 .LASF1:
+ 51354 13a3 73686F72 .string "short int"
+ 51354 7420696E
+ 51354 7400
+ 51355 .LASF397:
+ 51356 13ad 4B414553 .string "KAESBlockCipherVecRegBlockSize"
+ 51356 426C6F63
+ 51356 6B436970
+ 51356 68657256
+ 51356 65635265
+ 51357 .LASF9:
+
GAS LISTING /tmp/ccjbMjHD.s page 1248
+
+
+ 51358 13cc 75696E74 .string "uint64_t"
+ 51358 36345F74
+ 51358 00
+ 51359 .LASF309:
+ 51360 13d5 72634C61 .string "rcLastState_v1_0"
+ 51360 73745374
+ 51360 6174655F
+ 51360 76315F30
+ 51360 00
+ 51361 .LASF318:
+ 51362 13e6 72634C61 .string "rcLastState_v1_1"
+ 51362 73745374
+ 51362 6174655F
+ 51362 76315F31
+ 51362 00
+ 51363 .LASF83:
+ 51364 13f7 72635644 .string "rcVDB"
+ 51364 4200
+ 51365 .LASF51:
+ 51366 13fd 7365745F .string "set_encrypt_key"
+ 51366 656E6372
+ 51366 7970745F
+ 51366 6B657900
+ 51367 .LASF329:
+ 51368 140d 4B414553 .string "KAESBlockCipherVecRegVecAnd"
+ 51368 426C6F63
+ 51368 6B436970
+ 51368 68657256
+ 51368 65635265
+ 51369 .LASF81:
+ 51370 1429 72635846 .string "rcXF"
+ 51370 00
+ 51371 .LASF322:
+ 51372 142e 7672636F .string "vrcon"
+ 51372 6E00
+ 51373 .LASF164:
+ 51374 1434 72634465 .string "rcDestroying"
+ 51374 7374726F
+ 51374 79696E67
+ 51374 00
+ 51375 .LASF269:
+ 51376 1441 7263446F .string "rcDone"
+ 51376 6E6500
+ 51377 .LASF99:
+ 51378 1448 7263546F .string "rcToc"
+ 51378 6300
+ 51379 .LASF63:
+ 51380 144e 43697068 .string "CipherVecByte"
+ 51380 65725665
+ 51380 63427974
+ 51380 6500
+ 51381 .LASF173:
+ 51382 145c 7263416C .string "rcAliasing"
+ 51382 69617369
+ 51382 6E6700
+ 51383 .LASF388:
+ 51384 1467 4B414553 .string "KAESBlockCipherVecRegEqInvFirstRound"
+
GAS LISTING /tmp/ccjbMjHD.s page 1249
+
+
+ 51384 426C6F63
+ 51384 6B436970
+ 51384 68657256
+ 51384 65635265
+ 51385 .LASF134:
+ 51386 148c 72635072 .string "rcProcess"
+ 51386 6F636573
+ 51386 7300
+ 51387 .LASF232:
+ 51388 1496 72634E6F .string "rcNoObj"
+ 51388 4F626A00
+ 51389 .LASF406:
+ 51390 149e 4B414553 .string "KAESBlockCipherVecRegEncrypt"
+ 51390 426C6F63
+ 51390 6B436970
+ 51390 68657256
+ 51390 65635265
+ 51391 .LASF271:
+ 51392 14bb 7263556E .string "rcUnsupported"
+ 51392 73757070
+ 51392 6F727465
+ 51392 6400
+ 51393 .LASF383:
+ 51394 14c9 4B414553 .string "KAESBlockCipherVecRegMixColumns"
+ 51394 426C6F63
+ 51394 6B436970
+ 51394 68657256
+ 51394 65635265
+ 51395 .LASF339:
+ 51396 14e9 4B414553 .string "KAESBlockCipherVecRegRotBytesLeft"
+ 51396 426C6F63
+ 51396 6B436970
+ 51396 68657256
+ 51396 65635265
+ 51397 .LASF107:
+ 51398 150b 7263436F .string "rcColumn"
+ 51398 6C756D6E
+ 51398 00
+ 51399 .LASF272:
+ 51400 1514 7263556E .string "rcUnexpected"
+ 51400 65787065
+ 51400 63746564
+ 51400 00
+ 51401 .LASF7:
+ 51402 1521 75696E74 .string "uint32_t"
+ 51402 33325F74
+ 51402 00
+ 51403 .LASF93:
+ 51404 152a 72635646 .string "rcVFS"
+ 51404 5300
+ 51405 .LASF31:
+ 51406 1530 4442475F .string "DBG_KRYPTO"
+ 51406 4B525950
+ 51406 544F00
+ 51407 .LASF43:
+ 51408 153b 4442475F .string "DBG_AES_COUNT"
+ 51408 4145535F
+
GAS LISTING /tmp/ccjbMjHD.s page 1250
+
+
+ 51408 434F554E
+ 51408 5400
+ 51409 .LASF60:
+ 51410 1549 41455343 .string "AESColumn"
+ 51410 6F6C756D
+ 51410 6E00
+ 51411 .LASF409:
+ 51412 1553 6C657665 .string "level"
+ 51412 6C00
+ 51413 .LASF363:
+ 51414 1559 4B414553 .string "KAESBlockCipherVecRegInvMixColumns"
+ 51414 426C6F63
+ 51414 6B436970
+ 51414 68657256
+ 51414 65635265
+ 51415 .LASF317:
+ 51416 157c 72635772 .string "rcWrongType"
+ 51416 6F6E6754
+ 51416 79706500
+ 51417 .LASF252:
+ 51418 1588 72634C69 .string "rcLibrary"
+ 51418 62726172
+ 51418 7900
+ 51419 .LASF285:
+ 51420 1592 72634361 .string "rcCanceled"
+ 51420 6E63656C
+ 51420 656400
+ 51421 .LASF156:
+ 51422 159d 72634461 .string "rcData"
+ 51422 746100
+ 51423 .LASF120:
+ 51424 15a4 72634865 .string "rcHeader"
+ 51424 61646572
+ 51424 00
+ 51425 .LASF6:
+ 51426 15ad 73686F72 .string "short unsigned int"
+ 51426 7420756E
+ 51426 7369676E
+ 51426 65642069
+ 51426 6E7400
+ 51427 .LASF424:
+ 51428 15c0 4B414553 .string "KAESBlockCipherVecReg_vt_"
+ 51428 426C6F63
+ 51428 6B436970
+ 51428 68657256
+ 51428 65635265
+ 51429 .LASF110:
+ 51430 15da 72634461 .string "rcDatabase"
+ 51430 74616261
+ 51430 736500
+ 51431 .LASF186:
+ 51432 15e5 7263436F .string "rcCommitting"
+ 51432 6D6D6974
+ 51432 74696E67
+ 51432 00
+ 51433 .LASF214:
+ 51434 15f2 7263436C .string "rcClassifying"
+
GAS LISTING /tmp/ccjbMjHD.s page 1251
+
+
+ 51434 61737369
+ 51434 6679696E
+ 51434 6700
+ 51435 .LASF145:
+ 51436 1600 72635472 .string "rcTree"
+ 51436 656500
+ 51437 .LASF36:
+ 51438 1607 4442475F .string "DBG_ARGS"
+ 51438 41524753
+ 51438 00
+ 51439 .LASF349:
+ 51440 1610 4B414553 .string "KAESBlockCipherVecRegAesKeyGenAssistColumn1"
+ 51440 426C6F63
+ 51440 6B436970
+ 51440 68657256
+ 51440 65635265
+ 51441 .LASF361:
+ 51442 163c 4B414553 .string "KAESBlockCipherVecRegAesKeyGenAssistColumn2"
+ 51442 426C6F63
+ 51442 6B436970
+ 51442 68657256
+ 51442 65635265
+ 51443 .LASF320:
+ 51444 1668 4B414553 .string "KAESBlockCipherVecRegAesKeyGenAssistColumn3"
+ 51444 426C6F63
+ 51444 6B436970
+ 51444 68657256
+ 51444 65635265
+ 51445 .LASF174:
+ 51446 1694 72635365 .string "rcSelecting"
+ 51446 6C656374
+ 51446 696E6700
+ 51447 .LASF75:
+ 51448 16a0 72635465 .string "rcText"
+ 51448 787400
+ 51449 .LASF311:
+ 51450 16a7 72634F75 .string "rcOutoforder"
+ 51450 746F666F
+ 51450 72646572
+ 51450 00
+ 51451 .LASF278:
+ 51452 16b4 7263496E .string "rcInvalid"
+ 51452 76616C69
+ 51452 6400
+ 51453 .LASF402:
+ 51454 16be 75736572 .string "user_key_size"
+ 51454 5F6B6579
+ 51454 5F73697A
+ 51454 6500
+ 51455 .LASF225:
+ 51456 16cc 7263496E .string "rcInitializing"
+ 51456 69746961
+ 51456 6C697A69
+ 51456 6E6700
+ 51457 .LASF104:
+ 51458 16db 7263426C .string "rcBlob"
+ 51458 6F6200
+
GAS LISTING /tmp/ccjbMjHD.s page 1252
+
+
+ 51459 .LASF326:
+ 51460 16e2 6F705F50 .string "op_PINSRUD"
+ 51460 494E5352
+ 51460 554400
+ 51461 .LASF351:
+ 51462 16ed 74656D70 .string "temp"
+ 51462 00
+ 51463 .LASF202:
+ 51464 16f2 72635265 .string "rcReindexing"
+ 51464 696E6465
+ 51464 78696E67
+ 51464 00
+ 51465 .LASF97:
+ 51466 16ff 72634E6F .string "rcNoTarg"
+ 51466 54617267
+ 51466 00
+ 51467 .LASF279:
+ 51468 1708 7263436F .string "rcCorrupt"
+ 51468 72727570
+ 51468 7400
+ 51469 .LASF308:
+ 51470 1712 72634F75 .string "rcOutofrange"
+ 51470 746F6672
+ 51470 616E6765
+ 51470 00
+ 51471 .LASF137:
+ 51472 171f 72635363 .string "rcSchema"
+ 51472 68656D61
+ 51472 00
+ 51473 .LASF417:
+ 51474 1728 4B414553 .string "KAESBlockCipherVecRegRijndaelSBoxV"
+ 51474 426C6F63
+ 51474 6B436970
+ 51474 68657256
+ 51474 65635265
+ 51475 .LASF370:
+ 51476 174b 736C5F6D .string "sl_mask"
+ 51476 61736B00
+ 51477 .LASF133:
+ 51478 1753 72635061 .string "rcPath"
+ 51478 746800
+ 51479 .LASF184:
+ 51480 175a 72635265 .string "rcReading"
+ 51480 6164696E
+ 51480 6700
+ 51481 .LASF50:
+ 51482 1764 6B65795F .string "key_size"
+ 51482 73697A65
+ 51482 00
+ 51483 .LASF316:
+ 51484 176d 72634E6F .string "rcNotAvailable"
+ 51484 74417661
+ 51484 696C6162
+ 51484 6C6500
+ 51485 .LASF274:
+ 51486 177c 7263416D .string "rcAmbiguous"
+ 51486 62696775
+
GAS LISTING /tmp/ccjbMjHD.s page 1253
+
+
+ 51486 6F757300
+ 51487 .ident "GCC: (GNU) 4.4.2"
+ 51488 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccjbMjHD.s page 1254
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 aes-ncbi.c
+ /tmp/ccjbMjHD.s:11 .text:0000000000000000 bswap_32
+ /tmp/ccjbMjHD.s:47 .rodata:0000000000000000 vec_00
+ /tmp/ccjbMjHD.s:52 .rodata:0000000000000010 vec_01
+ /tmp/ccjbMjHD.s:72 .rodata:0000000000000020 vec_0F
+ /tmp/ccjbMjHD.s:92 .rodata:0000000000000030 vec_10
+ /tmp/ccjbMjHD.s:112 .rodata:0000000000000040 KAESBlockCipherVecRegRijndaelSBox
+ /tmp/ccjbMjHD.s:372 .rodata:0000000000000140 KAESBlockCipherVecRegRijndaelSBoxV
+ /tmp/ccjbMjHD.s:632 .rodata:0000000000000240 KAESBlockCipherVecRegRijndaelInvSBoxV
+ /tmp/ccjbMjHD.s:892 .rodata:0000000000000340 lo_filter
+ /tmp/ccjbMjHD.s:912 .rodata:0000000000000350 FF_tab
+ /tmp/ccjbMjHD.s:932 .data:0000000000000000 KAESBlockCipherVecRegFFtable
+ /tmp/ccjbMjHD.s:945 .rodata:0000000000000360 KAESBlockCipherVecRegRcon
+ /tmp/ccjbMjHD.s:968 .text:0000000000000014 KAESBlockCipherVecRegKeyExpansion128
+ /tmp/ccjbMjHD.s:21622 .rodata:0000000000000600 ShiftRowTable.7385
+ /tmp/ccjbMjHD.s:21958 .rodata:0000000000000810 mask.7943
+ /tmp/ccjbMjHD.s:6545 .text:00000000000054ef KAESBlockCipherVecRegKeyExpansion192
+ /tmp/ccjbMjHD.s:21978 .rodata:0000000000000820 mask.7952
+ /tmp/ccjbMjHD.s:10799 .text:000000000000967d KAESBlockCipherVecRegKeyExpansion256
+ /tmp/ccjbMjHD.s:15920 .text:000000000000e479 KAESBlockCipherVecRegEqInvKeyExpansion
+ /tmp/ccjbMjHD.s:21647 .rodata:0000000000000640 sr_mask.7327
+ /tmp/ccjbMjHD.s:21800 .rodata:0000000000000700 sl_mask.7310
+ /tmp/ccjbMjHD.s:16983 .text:000000000000f439 KAESBlockCipherVecRegEqInvKeyExpansion128
+ /tmp/ccjbMjHD.s:17011 .text:000000000000f463 KAESBlockCipherVecRegEqInvKeyExpansion192
+ /tmp/ccjbMjHD.s:17039 .text:000000000000f48d KAESBlockCipherVecRegEqInvKeyExpansion256
+ /tmp/ccjbMjHD.s:17083 .text:000000000000f4b7 KAESBlockCipherVecRegCipher
+ /tmp/ccjbMjHD.s:21602 .rodata:00000000000005f0 ShiftRowTable.7358
+ /tmp/ccjbMjHD.s:18729 .text:0000000000010d03 KAESBlockCipherVecRegEqInvCipher
+ /tmp/ccjbMjHD.s:21998 .rodata:0000000000000830 InvShiftRowTable.7367
+ /tmp/ccjbMjHD.s:20859 .rodata:000000000000046c KAESBlockCipherVecRegaes_ncbi_name
+ /tmp/ccjbMjHD.s:20863 .text:0000000000012cd9 KAESBlockCipherVecRegDestroy
+ /tmp/ccjbMjHD.s:20882 .text:0000000000012ce3 KAESBlockCipherVecRegBlockSize
+ /tmp/ccjbMjHD.s:20902 .text:0000000000012cee KAESBlockCipherVecRegKeySize
+ /tmp/ccjbMjHD.s:20927 .text:0000000000012cf9 KAESBlockCipherVecRegSetEncryptKey
+ /tmp/ccjbMjHD.s:21948 .rodata:00000000000007a0 __func__.9027
+ /tmp/ccjbMjHD.s:21018 .text:0000000000012de2 KAESBlockCipherVecRegSetDecryptKey
+ /tmp/ccjbMjHD.s:21100 .text:0000000000012ea5 KAESBlockCipherVecRegEncrypt
+ /tmp/ccjbMjHD.s:21597 .rodata:00000000000005d0 __PRETTY_FUNCTION__.9063
+ /tmp/ccjbMjHD.s:21178 .text:0000000000012f68 KAESBlockCipherVecRegDecrypt
+ /tmp/ccjbMjHD.s:21592 .rodata:00000000000005b0 __PRETTY_FUNCTION__.9084
+ /tmp/ccjbMjHD.s:21271 .text:000000000001302b KAESBlockCipherVecRegProcessorSupport
+ /tmp/ccjbMjHD.s:21587 .rodata:0000000000000580 __func__.9108
+ /tmp/ccjbMjHD.s:21481 .data.rel.ro.local:0000000000000000 KAESBlockCipherVecReg_vt_
+ /tmp/ccjbMjHD.s:21497 .text:0000000000013281 KAESBlockCipherVecRegMake
+ /tmp/ccjbMjHD.s:21577 .rodata:0000000000000540 __func__.9198
+ /tmp/ccjbMjHD.s:21582 .rodata:0000000000000560 __PRETTY_FUNCTION__.9199
+ /tmp/ccjbMjHD.s:21642 .rodata:0000000000000610 __PRETTY_FUNCTION__.7467
+ /tmp/ccjbMjHD.s:21795 .rodata:00000000000006d0 __PRETTY_FUNCTION__.7312
+ /tmp/ccjbMjHD.s:21953 .rodata:00000000000007e0 __PRETTY_FUNCTION__.9026
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+KDbgWriterGet
+KDbgCondToFlag
+KDbgTestModConds
+KDbgMsg
+
GAS LISTING /tmp/ccjbMjHD.s page 1255
+
+
+memset
+SetRCFileFuncLine
+__assert_fail
diff --git a/libs/krypto/aes-priv.h b/libs/krypto/aes-priv.h
new file mode 100644
index 0000000..4ebdbb0
--- /dev/null
+++ b/libs/krypto/aes-priv.h
@@ -0,0 +1,94 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_aes_priv_
+#define _h_krypto_aes_priv_
+
+/*
+ * This header file was written to integrate the public domain AES code
+ * with the SRA project
+ */
+
+#define AES_ENCRYPT 1
+#define AES_DECRYPT 0
+
+/* Because array size can't be a const in C, the following two are macros.
+ Both sizes are in bytes. */
+#define AES_MAXNR (14)
+#define AES_BLOCK_SIZE (16)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uint8_t AES_BYTE;
+typedef uint32_t AES_WORD;
+
+
+
+
+/* typedef int64_t AESState __attribute__ ((vector_size (AES_BLOCK_SIZE))); */
+
+typedef struct AES_KEY AES_KEY;
+struct AES_KEY
+{
+ uint32_t rd_key [sizeof (AES_WORD) * (AES_MAXNR + 1)];
+ uint32_t rounds;
+};
+
+
+int AES_set_encrypt_key(const uint8_t *userKey, const uint32_t bits,
+ AES_KEY *key);
+
+int AES_set_decrypt_key(const uint8_t *userKey, const uint32_t bits,
+ AES_KEY *key);
+
+void AES_encrypt(const uint8_t *in, uint8_t *out,
+ const AES_KEY *key);
+void AES_decrypt(const uint8_t *in, uint8_t *out,
+ const AES_KEY *key);
+
+
+int AESx86_set_encrypt_key(const uint8_t *userKey, const uint32_t bits,
+ AES_KEY *key);
+
+int AESx86_set_decrypt_key(const uint8_t *userKey, const uint32_t bits,
+ AES_KEY *key);
+
+void AESx86_encrypt(const uint8_t *in, uint8_t *out,
+ const AES_KEY *key);
+void AES_decrypt(const uint8_t *in, uint8_t *out,
+ const AES_KEY *key);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_aes_priv_ */
+
+
diff --git a/libs/krypto/aes.c b/libs/krypto/aes.c
new file mode 100644
index 0000000..328ba6d
--- /dev/null
+++ b/libs/krypto/aes.c
@@ -0,0 +1 @@
+#error "Obsolete do not use"
diff --git a/libs/krypto/aes_core.c b/libs/krypto/aes_core.c
new file mode 100644
index 0000000..b4d4239
--- /dev/null
+++ b/libs/krypto/aes_core.c
@@ -0,0 +1,1181 @@
+/*
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was modified as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ * Tweaked to match standards of the NCBI SRA project
+ * We obatined this file from version 1.0.0e of OpenSSL but we have
+ * eliminated the OpenSSL code where it could be identified
+ *
+ * We created our own header file as there was no public domain
+ * header file associated with this public domain C file.
+ */
+
+/**
+ * rijndael-alg-fst.c
+ *
+ * @version 3.0 (December 2000)
+ *
+ * Optimised ANSI C code for the Rijndael cipher (now AES)
+ *
+ * @author Vincent Rijmen <vincent.rijmen at esat.kuleuven.ac.be>
+ * @author Antoon Bosselaers <antoon.bosselaers at esat.kuleuven.ac.be>
+ * @author Paulo Barreto <paulo.barreto at terra.com.br>
+ *
+ * This code is hereby placed in the public domain.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include "aes-priv.h"
+
+#include <assert.h>
+
+
+#define FULL_UNROLL (true)
+
+# define GETU32(pt) (((uint32_t)(pt)[0] << 24) ^ ((uint32_t)(pt)[1] << 16) ^ ((uint32_t)(pt)[2] << 8) ^ ((uint32_t)(pt)[3]))
+# define PUTU32(ct, st) (((ct)[0] = (uint8_t)((st) >> 24)), ((ct)[1] = (uint8_t)((st) >> 16)),((ct)[2] = (uint8_t)((st) >> 8)),((ct)[3] = (uint8_t)(st)))
+
+/*
+Te0[x] = S [x].[02, 01, 01, 03];
+Te1[x] = S [x].[03, 02, 01, 01];
+Te2[x] = S [x].[01, 03, 02, 01];
+Te3[x] = S [x].[01, 01, 03, 02];
+
+Td0[x] = Si[x].[0e, 09, 0d, 0b];
+Td1[x] = Si[x].[0b, 0e, 09, 0d];
+Td2[x] = Si[x].[0d, 0b, 0e, 09];
+Td3[x] = Si[x].[09, 0d, 0b, 0e];
+Td4[x] = Si[x].[01];
+*/
+
+static const uint32_t Te0[256] = {
+ 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
+ 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U,
+ 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU,
+ 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU,
+ 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U,
+ 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU,
+ 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU,
+ 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU,
+ 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU,
+ 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU,
+ 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U,
+ 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU,
+ 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU,
+ 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U,
+ 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU,
+ 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU,
+ 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU,
+ 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU,
+ 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU,
+ 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U,
+ 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU,
+ 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU,
+ 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU,
+ 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU,
+ 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U,
+ 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U,
+ 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U,
+ 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U,
+ 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU,
+ 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U,
+ 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U,
+ 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU,
+ 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU,
+ 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U,
+ 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U,
+ 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U,
+ 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU,
+ 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U,
+ 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU,
+ 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U,
+ 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU,
+ 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U,
+ 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U,
+ 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU,
+ 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U,
+ 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U,
+ 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U,
+ 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U,
+ 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U,
+ 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U,
+ 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U,
+ 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U,
+ 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU,
+ 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U,
+ 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U,
+ 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U,
+ 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U,
+ 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U,
+ 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U,
+ 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU,
+ 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U,
+ 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U,
+ 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U,
+ 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU,
+};
+static const uint32_t Te1[256] = {
+ 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU,
+ 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U,
+ 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU,
+ 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U,
+ 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU,
+ 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U,
+ 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU,
+ 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U,
+ 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U,
+ 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU,
+ 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U,
+ 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U,
+ 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U,
+ 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU,
+ 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U,
+ 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U,
+ 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU,
+ 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U,
+ 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U,
+ 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U,
+ 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU,
+ 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU,
+ 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U,
+ 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU,
+ 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU,
+ 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U,
+ 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU,
+ 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U,
+ 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU,
+ 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U,
+ 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U,
+ 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U,
+ 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU,
+ 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U,
+ 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU,
+ 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U,
+ 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU,
+ 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U,
+ 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U,
+ 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU,
+ 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU,
+ 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU,
+ 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U,
+ 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U,
+ 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU,
+ 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U,
+ 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU,
+ 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U,
+ 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU,
+ 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U,
+ 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU,
+ 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU,
+ 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U,
+ 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU,
+ 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U,
+ 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU,
+ 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U,
+ 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U,
+ 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U,
+ 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU,
+ 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU,
+ 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U,
+ 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU,
+ 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U,
+};
+static const uint32_t Te2[256] = {
+ 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU,
+ 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U,
+ 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU,
+ 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U,
+ 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU,
+ 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U,
+ 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU,
+ 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U,
+ 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U,
+ 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU,
+ 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U,
+ 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U,
+ 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U,
+ 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU,
+ 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U,
+ 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U,
+ 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU,
+ 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U,
+ 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U,
+ 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U,
+ 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU,
+ 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU,
+ 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U,
+ 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU,
+ 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU,
+ 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U,
+ 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU,
+ 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U,
+ 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU,
+ 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U,
+ 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U,
+ 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U,
+ 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU,
+ 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U,
+ 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU,
+ 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U,
+ 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU,
+ 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U,
+ 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U,
+ 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU,
+ 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU,
+ 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU,
+ 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U,
+ 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U,
+ 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU,
+ 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U,
+ 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU,
+ 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U,
+ 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU,
+ 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U,
+ 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU,
+ 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU,
+ 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U,
+ 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU,
+ 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U,
+ 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU,
+ 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U,
+ 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U,
+ 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U,
+ 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU,
+ 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU,
+ 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U,
+ 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU,
+ 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U,
+};
+static const uint32_t Te3[256] = {
+ 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U,
+ 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U,
+ 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U,
+ 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU,
+ 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU,
+ 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU,
+ 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U,
+ 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU,
+ 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU,
+ 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U,
+ 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U,
+ 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU,
+ 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU,
+ 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU,
+ 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU,
+ 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU,
+ 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U,
+ 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU,
+ 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,
+ 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,
+ 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,
+ 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,
+ 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,
+ 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,
+ 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,
+ 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,
+ 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,
+ 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,
+ 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,
+ 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,
+ 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,
+ 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,
+ 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,
+ 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,
+ 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,
+ 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,
+ 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,
+ 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,
+ 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,
+ 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,
+ 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,
+ 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,
+ 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,
+ 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,
+ 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,
+ 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,
+ 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,
+ 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,
+ 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,
+ 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,
+ 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,
+ 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,
+ 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,
+ 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,
+ 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,
+ 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,
+ 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,
+ 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,
+ 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,
+ 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,
+ 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,
+ 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,
+ 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,
+ 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,
+};
+
+static const uint32_t Td0[256] = {
+ 0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U,
+ 0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U,
+ 0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U,
+ 0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU,
+ 0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U,
+ 0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U,
+ 0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU,
+ 0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U,
+ 0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU,
+ 0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U,
+ 0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U,
+ 0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U,
+ 0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U,
+ 0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU,
+ 0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U,
+ 0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU,
+ 0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U,
+ 0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU,
+ 0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U,
+ 0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U,
+ 0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U,
+ 0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU,
+ 0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U,
+ 0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU,
+ 0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U,
+ 0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU,
+ 0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U,
+ 0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU,
+ 0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU,
+ 0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U,
+ 0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU,
+ 0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U,
+ 0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU,
+ 0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U,
+ 0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U,
+ 0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U,
+ 0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU,
+ 0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U,
+ 0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U,
+ 0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU,
+ 0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U,
+ 0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U,
+ 0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U,
+ 0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U,
+ 0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U,
+ 0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU,
+ 0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U,
+ 0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U,
+ 0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U,
+ 0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U,
+ 0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U,
+ 0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU,
+ 0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU,
+ 0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU,
+ 0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU,
+ 0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U,
+ 0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U,
+ 0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU,
+ 0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU,
+ 0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U,
+ 0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU,
+ 0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U,
+ 0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U,
+ 0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U,
+};
+static const uint32_t Td1[256] = {
+ 0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU,
+ 0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U,
+ 0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU,
+ 0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U,
+ 0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U,
+ 0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U,
+ 0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U,
+ 0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U,
+ 0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U,
+ 0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU,
+ 0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU,
+ 0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU,
+ 0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U,
+ 0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU,
+ 0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U,
+ 0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U,
+ 0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U,
+ 0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU,
+ 0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU,
+ 0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U,
+ 0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU,
+ 0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U,
+ 0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU,
+ 0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU,
+ 0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U,
+ 0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U,
+ 0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U,
+ 0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU,
+ 0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U,
+ 0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU,
+ 0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U,
+ 0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U,
+ 0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U,
+ 0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU,
+ 0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U,
+ 0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U,
+ 0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U,
+ 0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U,
+ 0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U,
+ 0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U,
+ 0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU,
+ 0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU,
+ 0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U,
+ 0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU,
+ 0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U,
+ 0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU,
+ 0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU,
+ 0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U,
+ 0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU,
+ 0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U,
+ 0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U,
+ 0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U,
+ 0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U,
+ 0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U,
+ 0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U,
+ 0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U,
+ 0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU,
+ 0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U,
+ 0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U,
+ 0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU,
+ 0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U,
+ 0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U,
+ 0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U,
+ 0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U,
+};
+static const uint32_t Td2[256] = {
+ 0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U,
+ 0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U,
+ 0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U,
+ 0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U,
+ 0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU,
+ 0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U,
+ 0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U,
+ 0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U,
+ 0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U,
+ 0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU,
+ 0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U,
+ 0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U,
+ 0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU,
+ 0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U,
+ 0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U,
+ 0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U,
+ 0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U,
+ 0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U,
+ 0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U,
+ 0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU,
+ 0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U,
+ 0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U,
+ 0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U,
+ 0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U,
+ 0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U,
+ 0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU,
+ 0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU,
+ 0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U,
+ 0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU,
+ 0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U,
+ 0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU,
+ 0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU,
+ 0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU,
+ 0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU,
+ 0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U,
+ 0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U,
+ 0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U,
+ 0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U,
+ 0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U,
+ 0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U,
+ 0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U,
+ 0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU,
+ 0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU,
+ 0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U,
+ 0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U,
+ 0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU,
+ 0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU,
+ 0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U,
+ 0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U,
+ 0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U,
+ 0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U,
+ 0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U,
+ 0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U,
+ 0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U,
+ 0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU,
+ 0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U,
+ 0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U,
+ 0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U,
+ 0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U,
+ 0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U,
+ 0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U,
+ 0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU,
+ 0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U,
+ 0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U,
+};
+static const uint32_t Td3[256] = {
+ 0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU,
+ 0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU,
+ 0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U,
+ 0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U,
+ 0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU,
+ 0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU,
+ 0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U,
+ 0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU,
+ 0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U,
+ 0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU,
+ 0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U,
+ 0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U,
+ 0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U,
+ 0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U,
+ 0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U,
+ 0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU,
+ 0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU,
+ 0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U,
+ 0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U,
+ 0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU,
+ 0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU,
+ 0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U,
+ 0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U,
+ 0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U,
+ 0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U,
+ 0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU,
+ 0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U,
+ 0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U,
+ 0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU,
+ 0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU,
+ 0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U,
+ 0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U,
+ 0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U,
+ 0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU,
+ 0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U,
+ 0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U,
+ 0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U,
+ 0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U,
+ 0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U,
+ 0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U,
+ 0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U,
+ 0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU,
+ 0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U,
+ 0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U,
+ 0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU,
+ 0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU,
+ 0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U,
+ 0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU,
+ 0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U,
+ 0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U,
+ 0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U,
+ 0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U,
+ 0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U,
+ 0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U,
+ 0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU,
+ 0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU,
+ 0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU,
+ 0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU,
+ 0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U,
+ 0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U,
+ 0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U,
+ 0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU,
+ 0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U,
+ 0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U,
+};
+static const uint8_t Td4[256] = {
+ 0x52U, 0x09U, 0x6aU, 0xd5U, 0x30U, 0x36U, 0xa5U, 0x38U,
+ 0xbfU, 0x40U, 0xa3U, 0x9eU, 0x81U, 0xf3U, 0xd7U, 0xfbU,
+ 0x7cU, 0xe3U, 0x39U, 0x82U, 0x9bU, 0x2fU, 0xffU, 0x87U,
+ 0x34U, 0x8eU, 0x43U, 0x44U, 0xc4U, 0xdeU, 0xe9U, 0xcbU,
+ 0x54U, 0x7bU, 0x94U, 0x32U, 0xa6U, 0xc2U, 0x23U, 0x3dU,
+ 0xeeU, 0x4cU, 0x95U, 0x0bU, 0x42U, 0xfaU, 0xc3U, 0x4eU,
+ 0x08U, 0x2eU, 0xa1U, 0x66U, 0x28U, 0xd9U, 0x24U, 0xb2U,
+ 0x76U, 0x5bU, 0xa2U, 0x49U, 0x6dU, 0x8bU, 0xd1U, 0x25U,
+ 0x72U, 0xf8U, 0xf6U, 0x64U, 0x86U, 0x68U, 0x98U, 0x16U,
+ 0xd4U, 0xa4U, 0x5cU, 0xccU, 0x5dU, 0x65U, 0xb6U, 0x92U,
+ 0x6cU, 0x70U, 0x48U, 0x50U, 0xfdU, 0xedU, 0xb9U, 0xdaU,
+ 0x5eU, 0x15U, 0x46U, 0x57U, 0xa7U, 0x8dU, 0x9dU, 0x84U,
+ 0x90U, 0xd8U, 0xabU, 0x00U, 0x8cU, 0xbcU, 0xd3U, 0x0aU,
+ 0xf7U, 0xe4U, 0x58U, 0x05U, 0xb8U, 0xb3U, 0x45U, 0x06U,
+ 0xd0U, 0x2cU, 0x1eU, 0x8fU, 0xcaU, 0x3fU, 0x0fU, 0x02U,
+ 0xc1U, 0xafU, 0xbdU, 0x03U, 0x01U, 0x13U, 0x8aU, 0x6bU,
+ 0x3aU, 0x91U, 0x11U, 0x41U, 0x4fU, 0x67U, 0xdcU, 0xeaU,
+ 0x97U, 0xf2U, 0xcfU, 0xceU, 0xf0U, 0xb4U, 0xe6U, 0x73U,
+ 0x96U, 0xacU, 0x74U, 0x22U, 0xe7U, 0xadU, 0x35U, 0x85U,
+ 0xe2U, 0xf9U, 0x37U, 0xe8U, 0x1cU, 0x75U, 0xdfU, 0x6eU,
+ 0x47U, 0xf1U, 0x1aU, 0x71U, 0x1dU, 0x29U, 0xc5U, 0x89U,
+ 0x6fU, 0xb7U, 0x62U, 0x0eU, 0xaaU, 0x18U, 0xbeU, 0x1bU,
+ 0xfcU, 0x56U, 0x3eU, 0x4bU, 0xc6U, 0xd2U, 0x79U, 0x20U,
+ 0x9aU, 0xdbU, 0xc0U, 0xfeU, 0x78U, 0xcdU, 0x5aU, 0xf4U,
+ 0x1fU, 0xddU, 0xa8U, 0x33U, 0x88U, 0x07U, 0xc7U, 0x31U,
+ 0xb1U, 0x12U, 0x10U, 0x59U, 0x27U, 0x80U, 0xecU, 0x5fU,
+ 0x60U, 0x51U, 0x7fU, 0xa9U, 0x19U, 0xb5U, 0x4aU, 0x0dU,
+ 0x2dU, 0xe5U, 0x7aU, 0x9fU, 0x93U, 0xc9U, 0x9cU, 0xefU,
+ 0xa0U, 0xe0U, 0x3bU, 0x4dU, 0xaeU, 0x2aU, 0xf5U, 0xb0U,
+ 0xc8U, 0xebU, 0xbbU, 0x3cU, 0x83U, 0x53U, 0x99U, 0x61U,
+ 0x17U, 0x2bU, 0x04U, 0x7eU, 0xbaU, 0x77U, 0xd6U, 0x26U,
+ 0xe1U, 0x69U, 0x14U, 0x63U, 0x55U, 0x21U, 0x0cU, 0x7dU,
+};
+static const uint32_t rcon[] = {
+ 0x01000000, 0x02000000, 0x04000000, 0x08000000,
+ 0x10000000, 0x20000000, 0x40000000, 0x80000000,
+ 0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
+};
+
+/**
+ * Expand the cipher key into the encryption key schedule.
+ */
+int AES_set_encrypt_key(const uint8_t *userKey, uint32_t bits,
+ AES_KEY *key) {
+
+ uint32_t *rk;
+ int i = 0;
+ uint32_t temp;
+
+ if (!userKey || !key)
+ return -1;
+ if (bits != 128 && bits != 192 && bits != 256)
+ return -2;
+
+ rk = key->rd_key;
+
+ if (bits==128)
+ key->rounds = 10;
+ else if (bits==192)
+ key->rounds = 12;
+ else
+ key->rounds = 14;
+
+ rk[0] = GETU32(userKey );
+ rk[1] = GETU32(userKey + 4);
+ rk[2] = GETU32(userKey + 8);
+ rk[3] = GETU32(userKey + 12);
+ if (bits == 128) {
+ while (1) {
+ temp = rk[3];
+ rk[4] = rk[0] ^
+ (Te2[(temp >> 16) & 0xff] & 0xff000000) ^
+ (Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^
+ (Te0[(temp ) & 0xff] & 0x0000ff00) ^
+ (Te1[(temp >> 24) ] & 0x000000ff) ^
+ rcon[i];
+ rk[5] = rk[1] ^ rk[4];
+ rk[6] = rk[2] ^ rk[5];
+ rk[7] = rk[3] ^ rk[6];
+ if (++i == 10) {
+ return 0;
+ }
+ rk += 4;
+ }
+ }
+ rk[4] = GETU32(userKey + 16);
+ rk[5] = GETU32(userKey + 20);
+ if (bits == 192) {
+ while (1) {
+ temp = rk[ 5];
+ rk[ 6] = rk[ 0] ^
+ (Te2[(temp >> 16) & 0xff] & 0xff000000) ^
+ (Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^
+ (Te0[(temp ) & 0xff] & 0x0000ff00) ^
+ (Te1[(temp >> 24) ] & 0x000000ff) ^
+ rcon[i];
+ rk[ 7] = rk[ 1] ^ rk[ 6];
+ rk[ 8] = rk[ 2] ^ rk[ 7];
+ rk[ 9] = rk[ 3] ^ rk[ 8];
+ if (++i == 8) {
+ return 0;
+ }
+ rk[10] = rk[ 4] ^ rk[ 9];
+ rk[11] = rk[ 5] ^ rk[10];
+ rk += 6;
+ }
+ }
+ rk[6] = GETU32(userKey + 24);
+ rk[7] = GETU32(userKey + 28);
+ if (bits == 256) {
+ while (1) {
+ temp = rk[ 7];
+ rk[ 8] = rk[ 0] ^
+ (Te2[(temp >> 16) & 0xff] & 0xff000000) ^
+ (Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^
+ (Te0[(temp ) & 0xff] & 0x0000ff00) ^
+ (Te1[(temp >> 24) ] & 0x000000ff) ^
+ rcon[i];
+ rk[ 9] = rk[ 1] ^ rk[ 8];
+ rk[10] = rk[ 2] ^ rk[ 9];
+ rk[11] = rk[ 3] ^ rk[10];
+ if (++i == 7) {
+ return 0;
+ }
+ temp = rk[11];
+ rk[12] = rk[ 4] ^
+ (Te2[(temp >> 24) ] & 0xff000000) ^
+ (Te3[(temp >> 16) & 0xff] & 0x00ff0000) ^
+ (Te0[(temp >> 8) & 0xff] & 0x0000ff00) ^
+ (Te1[(temp ) & 0xff] & 0x000000ff);
+ rk[13] = rk[ 5] ^ rk[12];
+ rk[14] = rk[ 6] ^ rk[13];
+ rk[15] = rk[ 7] ^ rk[14];
+
+ rk += 8;
+ }
+ }
+ return 0;
+}
+
+/**
+ * Expand the cipher key into the decryption key schedule.
+ */
+int AES_set_decrypt_key(const uint8_t *userKey, const uint32_t bits,
+ AES_KEY *key) {
+
+ uint32_t *rk;
+ int i, j, status;
+ uint32_t temp;
+
+ /* first, start with an encryption schedule */
+ status = AES_set_encrypt_key(userKey, bits, key);
+ if (status < 0)
+ return status;
+
+ rk = key->rd_key;
+
+ /* invert the order of the round keys: */
+ for (i = 0, j = 4*(key->rounds); i < j; i += 4, j -= 4) {
+ temp = rk[i ]; rk[i ] = rk[j ]; rk[j ] = temp;
+ temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp;
+ temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp;
+ temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp;
+ }
+ /* apply the inverse MixColumn transform to all round keys but the first and the last: */
+ for (i = 1; i < (key->rounds); i++) {
+ rk += 4;
+ rk[0] =
+ Td0[Te1[(rk[0] >> 24) ] & 0xff] ^
+ Td1[Te1[(rk[0] >> 16) & 0xff] & 0xff] ^
+ Td2[Te1[(rk[0] >> 8) & 0xff] & 0xff] ^
+ Td3[Te1[(rk[0] ) & 0xff] & 0xff];
+ rk[1] =
+ Td0[Te1[(rk[1] >> 24) ] & 0xff] ^
+ Td1[Te1[(rk[1] >> 16) & 0xff] & 0xff] ^
+ Td2[Te1[(rk[1] >> 8) & 0xff] & 0xff] ^
+ Td3[Te1[(rk[1] ) & 0xff] & 0xff];
+ rk[2] =
+ Td0[Te1[(rk[2] >> 24) ] & 0xff] ^
+ Td1[Te1[(rk[2] >> 16) & 0xff] & 0xff] ^
+ Td2[Te1[(rk[2] >> 8) & 0xff] & 0xff] ^
+ Td3[Te1[(rk[2] ) & 0xff] & 0xff];
+ rk[3] =
+ Td0[Te1[(rk[3] >> 24) ] & 0xff] ^
+ Td1[Te1[(rk[3] >> 16) & 0xff] & 0xff] ^
+ Td2[Te1[(rk[3] >> 8) & 0xff] & 0xff] ^
+ Td3[Te1[(rk[3] ) & 0xff] & 0xff];
+ }
+ return 0;
+}
+
+/*
+ * Encrypt a single block
+ * in and out can overlap
+ */
+void AES_encrypt(const uint8_t *in, uint8_t *out,
+ const AES_KEY *key) {
+
+ const uint32_t *rk;
+ uint32_t s0, s1, s2, s3, t0, t1, t2, t3;
+#ifndef FULL_UNROLL
+ int r;
+#endif /* ?FULL_UNROLL */
+
+ assert(in && out && key);
+ rk = key->rd_key;
+
+ /*
+ * map byte array block to cipher state
+ * and add initial round key:
+ */
+ s0 = GETU32(in ) ^ rk[0];
+ s1 = GETU32(in + 4) ^ rk[1];
+ s2 = GETU32(in + 8) ^ rk[2];
+ s3 = GETU32(in + 12) ^ rk[3];
+#ifdef FULL_UNROLL
+ /* round 1: */
+ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4];
+ t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5];
+ t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6];
+ t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7];
+ /* round 2: */
+ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8];
+ s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9];
+ s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10];
+ s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11];
+ /* round 3: */
+ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12];
+ t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13];
+ t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14];
+ t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15];
+ /* round 4: */
+ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16];
+ s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17];
+ s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18];
+ s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19];
+ /* round 5: */
+ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20];
+ t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21];
+ t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22];
+ t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23];
+ /* round 6: */
+ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24];
+ s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25];
+ s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26];
+ s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27];
+ /* round 7: */
+ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28];
+ t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29];
+ t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30];
+ t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31];
+ /* round 8: */
+ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32];
+ s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33];
+ s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34];
+ s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35];
+ /* round 9: */
+ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36];
+ t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37];
+ t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38];
+ t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39];
+ if (key->rounds > 10) {
+ /* round 10: */
+ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40];
+ s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41];
+ s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42];
+ s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43];
+ /* round 11: */
+ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44];
+ t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45];
+ t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46];
+ t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47];
+ if (key->rounds > 12) {
+ /* round 12: */
+ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48];
+ s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49];
+ s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50];
+ s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51];
+ /* round 13: */
+ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52];
+ t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53];
+ t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54];
+ t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55];
+ }
+ }
+ rk += key->rounds << 2;
+#else /* !FULL_UNROLL */
+ /*
+ * Nr - 1 full rounds:
+ */
+ r = key->rounds >> 1;
+ for (;;) {
+ t0 =
+ Te0[(s0 >> 24) ] ^
+ Te1[(s1 >> 16) & 0xff] ^
+ Te2[(s2 >> 8) & 0xff] ^
+ Te3[(s3 ) & 0xff] ^
+ rk[4];
+ t1 =
+ Te0[(s1 >> 24) ] ^
+ Te1[(s2 >> 16) & 0xff] ^
+ Te2[(s3 >> 8) & 0xff] ^
+ Te3[(s0 ) & 0xff] ^
+ rk[5];
+ t2 =
+ Te0[(s2 >> 24) ] ^
+ Te1[(s3 >> 16) & 0xff] ^
+ Te2[(s0 >> 8) & 0xff] ^
+ Te3[(s1 ) & 0xff] ^
+ rk[6];
+ t3 =
+ Te0[(s3 >> 24) ] ^
+ Te1[(s0 >> 16) & 0xff] ^
+ Te2[(s1 >> 8) & 0xff] ^
+ Te3[(s2 ) & 0xff] ^
+ rk[7];
+
+ rk += 8;
+ if (--r == 0) {
+ break;
+ }
+
+ s0 =
+ Te0[(t0 >> 24) ] ^
+ Te1[(t1 >> 16) & 0xff] ^
+ Te2[(t2 >> 8) & 0xff] ^
+ Te3[(t3 ) & 0xff] ^
+ rk[0];
+ s1 =
+ Te0[(t1 >> 24) ] ^
+ Te1[(t2 >> 16) & 0xff] ^
+ Te2[(t3 >> 8) & 0xff] ^
+ Te3[(t0 ) & 0xff] ^
+ rk[1];
+ s2 =
+ Te0[(t2 >> 24) ] ^
+ Te1[(t3 >> 16) & 0xff] ^
+ Te2[(t0 >> 8) & 0xff] ^
+ Te3[(t1 ) & 0xff] ^
+ rk[2];
+ s3 =
+ Te0[(t3 >> 24) ] ^
+ Te1[(t0 >> 16) & 0xff] ^
+ Te2[(t1 >> 8) & 0xff] ^
+ Te3[(t2 ) & 0xff] ^
+ rk[3];
+ }
+#endif /* ?FULL_UNROLL */
+ /*
+ * apply last round and
+ * map cipher state to byte array block:
+ */
+ s0 =
+ (Te2[(t0 >> 24) ] & 0xff000000) ^
+ (Te3[(t1 >> 16) & 0xff] & 0x00ff0000) ^
+ (Te0[(t2 >> 8) & 0xff] & 0x0000ff00) ^
+ (Te1[(t3 ) & 0xff] & 0x000000ff) ^
+ rk[0];
+ PUTU32(out , s0);
+ s1 =
+ (Te2[(t1 >> 24) ] & 0xff000000) ^
+ (Te3[(t2 >> 16) & 0xff] & 0x00ff0000) ^
+ (Te0[(t3 >> 8) & 0xff] & 0x0000ff00) ^
+ (Te1[(t0 ) & 0xff] & 0x000000ff) ^
+ rk[1];
+ PUTU32(out + 4, s1);
+ s2 =
+ (Te2[(t2 >> 24) ] & 0xff000000) ^
+ (Te3[(t3 >> 16) & 0xff] & 0x00ff0000) ^
+ (Te0[(t0 >> 8) & 0xff] & 0x0000ff00) ^
+ (Te1[(t1 ) & 0xff] & 0x000000ff) ^
+ rk[2];
+ PUTU32(out + 8, s2);
+ s3 =
+ (Te2[(t3 >> 24) ] & 0xff000000) ^
+ (Te3[(t0 >> 16) & 0xff] & 0x00ff0000) ^
+ (Te0[(t1 >> 8) & 0xff] & 0x0000ff00) ^
+ (Te1[(t2 ) & 0xff] & 0x000000ff) ^
+ rk[3];
+ PUTU32(out + 12, s3);
+}
+
+/*
+ * Decrypt a single block
+ * in and out can overlap
+ */
+void AES_decrypt(const uint8_t *in, uint8_t *out,
+ const AES_KEY *key) {
+
+ const uint32_t *rk;
+ uint32_t s0, s1, s2, s3, t0, t1, t2, t3;
+#ifndef FULL_UNROLL
+ int r;
+#endif /* ?FULL_UNROLL */
+
+ assert(in && out && key);
+ rk = key->rd_key;
+
+ /*
+ * map byte array block to cipher state
+ * and add initial round key:
+ */
+ s0 = GETU32(in ) ^ rk[0];
+ s1 = GETU32(in + 4) ^ rk[1];
+ s2 = GETU32(in + 8) ^ rk[2];
+ s3 = GETU32(in + 12) ^ rk[3];
+#ifdef FULL_UNROLL
+ /* round 1: */
+ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[ 4];
+ t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[ 5];
+ t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[ 6];
+ t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[ 7];
+ /* round 2: */
+ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[ 8];
+ s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[ 9];
+ s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[10];
+ s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[11];
+ /* round 3: */
+ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[12];
+ t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[13];
+ t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[14];
+ t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[15];
+ /* round 4: */
+ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[16];
+ s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[17];
+ s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[18];
+ s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[19];
+ /* round 5: */
+ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[20];
+ t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[21];
+ t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[22];
+ t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[23];
+ /* round 6: */
+ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[24];
+ s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[25];
+ s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[26];
+ s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[27];
+ /* round 7: */
+ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[28];
+ t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[29];
+ t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[30];
+ t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[31];
+ /* round 8: */
+ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[32];
+ s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[33];
+ s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[34];
+ s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[35];
+ /* round 9: */
+ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[36];
+ t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[37];
+ t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[38];
+ t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[39];
+ if (key->rounds > 10) {
+ /* round 10: */
+ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[40];
+ s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[41];
+ s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[42];
+ s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[43];
+ /* round 11: */
+ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[44];
+ t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[45];
+ t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[46];
+ t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[47];
+ if (key->rounds > 12) {
+ /* round 12: */
+ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[48];
+ s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[49];
+ s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[50];
+ s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[51];
+ /* round 13: */
+ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[52];
+ t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[53];
+ t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[54];
+ t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[55];
+ }
+ }
+ rk += key->rounds << 2;
+#else /* !FULL_UNROLL */
+ /*
+ * Nr - 1 full rounds:
+ */
+ r = key->rounds >> 1;
+ for (;;) {
+ t0 =
+ Td0[(s0 >> 24) ] ^
+ Td1[(s3 >> 16) & 0xff] ^
+ Td2[(s2 >> 8) & 0xff] ^
+ Td3[(s1 ) & 0xff] ^
+ rk[4];
+ t1 =
+ Td0[(s1 >> 24) ] ^
+ Td1[(s0 >> 16) & 0xff] ^
+ Td2[(s3 >> 8) & 0xff] ^
+ Td3[(s2 ) & 0xff] ^
+ rk[5];
+ t2 =
+ Td0[(s2 >> 24) ] ^
+ Td1[(s1 >> 16) & 0xff] ^
+ Td2[(s0 >> 8) & 0xff] ^
+ Td3[(s3 ) & 0xff] ^
+ rk[6];
+ t3 =
+ Td0[(s3 >> 24) ] ^
+ Td1[(s2 >> 16) & 0xff] ^
+ Td2[(s1 >> 8) & 0xff] ^
+ Td3[(s0 ) & 0xff] ^
+ rk[7];
+
+ rk += 8;
+ if (--r == 0) {
+ break;
+ }
+
+ s0 =
+ Td0[(t0 >> 24) ] ^
+ Td1[(t3 >> 16) & 0xff] ^
+ Td2[(t2 >> 8) & 0xff] ^
+ Td3[(t1 ) & 0xff] ^
+ rk[0];
+ s1 =
+ Td0[(t1 >> 24) ] ^
+ Td1[(t0 >> 16) & 0xff] ^
+ Td2[(t3 >> 8) & 0xff] ^
+ Td3[(t2 ) & 0xff] ^
+ rk[1];
+ s2 =
+ Td0[(t2 >> 24) ] ^
+ Td1[(t1 >> 16) & 0xff] ^
+ Td2[(t0 >> 8) & 0xff] ^
+ Td3[(t3 ) & 0xff] ^
+ rk[2];
+ s3 =
+ Td0[(t3 >> 24) ] ^
+ Td1[(t2 >> 16) & 0xff] ^
+ Td2[(t1 >> 8) & 0xff] ^
+ Td3[(t0 ) & 0xff] ^
+ rk[3];
+ }
+#endif /* ?FULL_UNROLL */
+ /*
+ * apply last round and
+ * map cipher state to byte array block:
+ */
+ s0 =
+ (Td4[(t0 >> 24) ] << 24) ^
+ (Td4[(t3 >> 16) & 0xff] << 16) ^
+ (Td4[(t2 >> 8) & 0xff] << 8) ^
+ (Td4[(t1 ) & 0xff]) ^
+ rk[0];
+ PUTU32(out , s0);
+ s1 =
+ (Td4[(t1 >> 24) ] << 24) ^
+ (Td4[(t0 >> 16) & 0xff] << 16) ^
+ (Td4[(t3 >> 8) & 0xff] << 8) ^
+ (Td4[(t2 ) & 0xff]) ^
+ rk[1];
+ PUTU32(out + 4, s1);
+ s2 =
+ (Td4[(t2 >> 24) ] << 24) ^
+ (Td4[(t1 >> 16) & 0xff] << 16) ^
+ (Td4[(t0 >> 8) & 0xff] << 8) ^
+ (Td4[(t3 ) & 0xff]) ^
+ rk[2];
+ PUTU32(out + 8, s2);
+ s3 =
+ (Td4[(t3 >> 24) ] << 24) ^
+ (Td4[(t2 >> 16) & 0xff] << 16) ^
+ (Td4[(t1 >> 8) & 0xff] << 8) ^
+ (Td4[(t0 ) & 0xff]) ^
+ rk[3];
+ PUTU32(out + 12, s3);
+}
+
diff --git a/libs/krypto/blockcipher-impl.h b/libs/krypto/blockcipher-impl.h
new file mode 100644
index 0000000..5d7d257
--- /dev/null
+++ b/libs/krypto/blockcipher-impl.h
@@ -0,0 +1,187 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_krypto_blockcipher_impl_
+#define _h_krypto_blockcipher_impl_
+
+/*
+ * NOTE: Currently this is being written to support cipher blocks of
+ * exactly 128 bits. It will have to be amended if alternative block
+ * sizes are need for other cipher blocks
+ */
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+/*
+ * we need to know whether we are supporting vectors as
+ * XMM type registers or as structs
+ */
+#include "ncbi-priv.h"
+
+
+#ifndef USE_VEC
+#error "USE_VEC most be defined true or false"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CIPHER_BLOCK_MAX (16)
+
+typedef char CipherBlock [CIPHER_BLOCK_MAX];
+
+#if USEVEC
+#include <v128.h>
+typedef v128_u8_t CipherVec;
+#else
+typedef struct CipherVec
+{
+ CipherBlock block;
+} CipherVec;
+#endif
+
+typedef struct KBlockCipher_vt KBlockCipher_vt;
+struct KBlockCipher_vt
+{
+ uint32_t maj;
+ uint32_t min;
+};
+
+typedef uint32_t BlockCipherType;
+enum block_cipher_type
+{
+ blockcipher_type_byte,
+ blockcipher_type_vec
+};
+
+
+typedef struct KBlockCipherByte_vt_v1 KBlockCipherByte_vt_v1;
+typedef union KBlockCipherByte KBlockCipherByte;
+
+#ifndef BLOCKCIPHER_BYTE_IMPL
+#define BLOCKCIPHER_BYTE_IMPL KBlockCipherByte
+#else
+typedef union KBlockCipherByte BLOCKCIPHER_BYTE_IMPL;
+#endif
+
+
+struct KBlockCipherByte_vt_v1
+{
+ KBlockCipher_vt version;
+
+ /* version == 1.x */
+
+ /* start minor version == 0 */
+ void (* destroy )(const BLOCKCIPHER_BYTE_IMPL * self);
+
+ uint32_t (* block_size )();
+
+ uint32_t (* key_size )();
+
+ rc_t (* set_encrypt_key )(void * encrypt_key,
+ const char * user_key,
+ uint32_t user_key_bits);
+
+ rc_t (* set_decrypt_key )(void * decrypt_key,
+ const char * user_key,
+ uint32_t user_key_bits);
+
+ void (* encrypt )(const CipherBlock in,
+ CipherBlock out,
+ const void * encrypt_key);
+
+ void (* decrypt )(const CipherBlock in,
+ CipherBlock out,
+ const void * encrypt_key);
+
+ /* end minor version == 0 */
+
+};
+
+union KBlockCipherByte
+{
+ KBlockCipher_vt version;
+ KBlockCipherByte_vt_v1 v1;
+};
+
+
+typedef struct KBlockCipherVec_vt_v1 KBlockCipherVec_vt_v1;
+typedef union KBlockCipherVec KBlockCipherVec;
+
+#ifndef BLOCKCIPHER_VEC_IMPL
+#define BLOCKCIPHER_VEC_IMPL KBlockCipherVec
+#else
+typedef union KBlockCipherVec BLOCKCIPHER_VEC_IMPL;
+#endif
+
+
+struct KBlockCipherVec_vt_v1
+{
+ KBlockCipher_vt version;
+
+ /* version == 1.x */
+
+ /* start minor version == 0 */
+ void (* destroy )(const BLOCKCIPHER_VEC_IMPL * self);
+
+ uint32_t (* block_size )();
+
+ uint32_t (* key_size )();
+
+ rc_t (* set_encrypt_key )(void * encrypt_key,
+ const char * user_key,
+ uint32_t user_key_size);
+
+ rc_t (* set_decrypt_key )(void * decrypt_key,
+ const char * user_key,
+ uint32_t user_key_size);
+
+ CipherVec (* encrypt )(CipherVec block,
+ const void * encrypt_key);
+
+ CipherVec (* decrypt )(CipherVec block,
+ const void * decrypt_key);
+
+ /* end minor version == 0 */
+
+};
+
+union KBlockCipherVec
+{
+ KBlockCipher_vt version;
+ KBlockCipherVec_vt_v1 v1;
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* _h_krypto_blockcipher_impl_ */
+
diff --git a/libs/krypto/blockcipher-priv.h b/libs/krypto/blockcipher-priv.h
new file mode 100644
index 0000000..d812f23
--- /dev/null
+++ b/libs/krypto/blockcipher-priv.h
@@ -0,0 +1,90 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_blockcipher_priv_
+#define _h_krypto_blockcipher_priv_
+
+#include <krypto/extern.h>
+#include "cipher-impl.h"
+
+#include "blockcipher-impl.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ======================================================================
+ */
+/* typedef struct KBlockCipher KBlockCipher; */
+/* typedef union KBlockCipher_vt KBlockCipher_vt; */
+
+/* ----------------------------------------------------------------------
+ * Init
+ *
+ * Initialize the fields of this object. The derived class will call this
+ * during it's initialization.
+ *
+ * self object to initialze
+ * vt the virtual table of the derived class
+ * mgr the cipher manager that is the construction factory block cipher
+ * objects hold references to the manager while the manager merely
+ * points at the block ciphers when all block ciphers are destroyed
+ * the manager loses its references and it too can be destroyed if not
+ * held elsewhere
+ * name ASCIZ c-string the name of this class
+ */
+/* rc_t KBlockCipherInit (KBlockCipher * self, */
+/* const KBlockCipher_vt * vt, */
+/* const char * name); */
+
+
+typedef union KBlockCipher KBlockCipher;
+union KBlockCipher
+{
+ KBlockCipherByte byte;
+ KBlockCipherVec vec;
+};
+
+
+rc_t KAESBlockCipherVecAesNiMake (KBlockCipher ** vec_cipher);
+rc_t KAESBlockCipherVecRegMake (KBlockCipher ** vec_cipher);
+rc_t KAESBlockCipherVecMake (KBlockCipher ** vec_cipher);
+rc_t KAESBlockCipherByteMake (KBlockCipher ** byte_cipher);
+
+rc_t KNullBlockCipherVecAesNiMake (KBlockCipher ** vec_cipher);
+rc_t KNullBlockCipherVecRegMake (KBlockCipher ** vec_cipher);
+rc_t KNullBlockCipherVecMake (KBlockCipher ** vec_cipher);
+rc_t KNullBlockCipherByteMake (KBlockCipher ** byte_cipher);
+
+
+/* KRYPTO_EXTERN rc_t CC KBlockCipherAlloc (KBlockCipher ** obj, size_t z); */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_blockcipher_priv_ */
diff --git a/libs/krypto/blockcipher.c b/libs/krypto/blockcipher.c
new file mode 100644
index 0000000..22539eb
--- /dev/null
+++ b/libs/krypto/blockcipher.c
@@ -0,0 +1,3 @@
+#error "OBSOLETE do not use"
+
+
diff --git a/libs/krypto/cipher-byte.c b/libs/krypto/cipher-byte.c
new file mode 100644
index 0000000..feb05c2
--- /dev/null
+++ b/libs/krypto/cipher-byte.c
@@ -0,0 +1,522 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+/*
+ * KCipherByte is a byte oriented KCipher that can work on all processors
+ * and be built with all compilers
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+#include <krypto/cipher.h>
+
+#include "ncbi-priv.h"
+
+#include "blockcipher-impl.h"
+
+#include "cipher-impl.h"
+#include "cipher-priv.h"
+#include "blockcipher-priv.h"
+
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+const char MEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+
+/*
+ * KCipher with unaligned data. Byte alignment.
+ */
+struct KCipherByte
+{
+ KCipher dad;
+
+ const KBlockCipherByte * block_cipher;
+};
+
+
+static rc_t MEMBER(Destroy) (KCipherByte * self)
+{
+ rc_t rc = 0;
+
+ if (self)
+ {
+ rc = KCipherDestroy (&self->dad);
+ free (self);
+ }
+ return rc;
+}
+
+
+static rc_t MEMBER(SetEncryptKey) (KCipherByte * self,
+ const char * user_key,
+ uint32_t user_key_bits)
+{
+ rc_t rc = 0;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ rc = self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+ user_key_bits);
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t MEMBER(SetDecryptKey) (KCipherByte * self,
+ const char * user_key,
+ uint32_t user_key_bits)
+{
+ rc_t rc = 0;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcDestroying, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ rc = self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+ user_key_bits);
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t MEMBER(SetEncryptIvec)(KCipherByte * self,
+ const void * ivec)
+{
+ assert (self);
+ assert (ivec);
+
+ memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+
+ return 0;
+}
+
+
+static rc_t MEMBER(SetDecryptIvec)(KCipherByte * self,
+ const void * ivec)
+{
+ assert (self);
+ assert (ivec);
+
+ memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+
+ return 0;
+}
+
+
+static rc_t MEMBER(SetEncryptCounterFunc)(KCipherByte * self,
+ cipher_ctr_func func)
+{
+ assert (self);
+ assert (func);
+
+ self->dad.encrypt_counter_func = func;
+
+ return 0;
+}
+
+
+static rc_t MEMBER(SetDecryptCounterFunc)(KCipherByte * self,
+ cipher_ctr_func func)
+{
+ assert (self);
+ assert (func);
+
+ self->dad.decrypt_counter_func = func;
+
+ return 0;
+}
+
+
+static rc_t MEMBER(Encrypt)(const KCipherByte * self,
+ const void * in, void * out)
+{
+ rc_t rc = 0;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ self->block_cipher->v1.encrypt (in, out, self->dad.encrypt_key);
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t MEMBER(Decrypt)(const KCipherByte * self,
+ const void * in, void * out)
+{
+ rc_t rc = 0;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ self->block_cipher->v1.decrypt (in, out, self->dad.decrypt_key);
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t MEMBER(EncryptEcb)(const KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ rc_t rc = 0;
+ const char * pin = in;
+ char * pout = out;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ for (; block_count; --block_count)
+ {
+ self->block_cipher->v1.encrypt (pin, pout, self->dad.encrypt_key);
+
+ pin += self->dad.block_size;
+ pout += self->dad.block_size;
+ }
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t MEMBER(DecryptEcb)(const KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ rc_t rc = 0;
+ const char * pin = in;
+ char * pout = out;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ for (; block_count; --block_count)
+ {
+ self->block_cipher->v1.decrypt (pin, pout, self->dad.decrypt_key);
+
+ pin += self->dad.block_size;
+ pout += self->dad.block_size;
+ }
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t MEMBER(EncryptCbc)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ rc_t rc = 0;
+ const char * pin = in;
+ char * pout = out;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ if (block_count)
+ {
+ CipherBlock block;
+ unsigned ix;
+
+ memcpy (block, self->dad.encrypt_ivec, self->dad.block_size);
+
+ do
+ {
+ for (ix = 0; ix < self->dad.block_size; ++ix)
+ block[ix] ^= pin[ix];
+
+ self->block_cipher->v1.encrypt (block, block,
+ self->dad.encrypt_key);
+
+ memcpy (pout, block, self->dad.block_size);
+
+ pin += self->dad.block_size;
+ pout += self->dad.block_size;
+
+ } while (--block_count);
+
+ memcpy (self->dad.encrypt_ivec, block, self->dad.block_size);
+ }
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t MEMBER(DecryptCbc)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ rc_t rc = 0;
+ const char * pin = in;
+ char * pout = out;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ if (block_count)
+ {
+ CipherBlock ivec;
+ CipherBlock block;
+ unsigned ix;
+
+ memcpy (ivec, self->dad.decrypt_ivec, self->dad.block_size);
+
+ do
+ {
+ self->block_cipher->v1.decrypt (pin, block,
+ self->dad.decrypt_key);
+
+ for (ix = 0; ix < self->dad.block_size; ++ix)
+ pout[ix] = block[ix] ^ ivec[ix];
+
+ memcpy (ivec, pin, self->dad.block_size);
+
+ pin += self->dad.block_size;
+ pout += self->dad.block_size;
+
+ } while (--block_count);
+
+ memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+ }
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t MEMBER(EncryptPcbc)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(DecryptPcbc)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(EncryptCfb)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(DecryptCfb)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(EncryptOfb)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(DecryptOfb)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(EncryptCtr)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(DecryptCtr)(KCipherByte * self,
+ const void * in, void * out,
+ uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static struct KCipher_vt_v1 MEMBER(_vt_v1) =
+{
+ { 1, 0 },
+
+ MEMBER(Destroy),
+ MEMBER(SetEncryptKey),
+ MEMBER(SetDecryptKey),
+ MEMBER(SetEncryptIvec),
+ MEMBER(SetDecryptIvec),
+ MEMBER(SetEncryptCounterFunc),
+ MEMBER(SetDecryptCounterFunc),
+ MEMBER(Encrypt),
+ MEMBER(Decrypt),
+ MEMBER(EncryptEcb),
+ MEMBER(DecryptEcb),
+ MEMBER(EncryptCbc),
+ MEMBER(DecryptCbc),
+ MEMBER(EncryptPcbc),
+ MEMBER(DecryptPcbc),
+ MEMBER(EncryptCfb),
+ MEMBER(DecryptCfb),
+ MEMBER(EncryptOfb),
+ MEMBER(DecryptOfb),
+ MEMBER(EncryptCtr),
+ MEMBER(DecryptCtr)
+};
+
+
+static __inline__ rc_t MEMBER(Alloc)(KCipherByte ** pobj,
+ const KBlockCipher * block_cipher)
+{
+ size_t block_size = block_cipher->byte.v1.block_size();
+ size_t key_size = block_cipher->byte.v1.key_size();
+ rc_t rc = 0;
+
+ *pobj = calloc (1, sizeof (**pobj) + 2 * key_size + 2 * block_size);
+ if (*pobj == NULL)
+ rc = RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted);
+
+ return rc;
+}
+
+
+static __inline__ rc_t MEMBER(Init)(KCipherByte * self,
+ const KBlockCipher * block_cipher)
+{
+ KCipher * dad = &self->dad;
+ size_t block_size = block_cipher->byte.v1.block_size();
+ size_t key_size = block_cipher->byte.v1.key_size();
+
+ KCipherInit (dad, block_size,
+ (const KCipher_vt*)&MEMBER(_vt_v1),
+ MEMBER(ClassName));
+
+ dad->encrypt_key = (uint8_t *)(self + 1);
+ dad->decrypt_key = ((uint8_t *)dad->encrypt_key) + key_size;
+ dad->encrypt_ivec = ((uint8_t *)dad->decrypt_key) + key_size;
+ dad->decrypt_ivec = ((uint8_t *)dad->encrypt_ivec) + block_size;
+
+ self->block_cipher = &block_cipher->byte;
+
+ return 0;
+}
+
+
+rc_t MEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+{
+ rc_t rc;
+ KBlockCipher * block_cipher;
+
+ if (new_obj == NULL)
+ return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+ *new_obj = NULL;
+
+ switch (type)
+ {
+ default:
+ return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+
+ case kcipher_null:
+ rc = NULLBCMEMBER(Make)(&block_cipher);
+ break;
+
+ case kcipher_AES:
+ rc = AESBCMEMBER(Make)(&block_cipher);
+ break;
+ }
+
+ if (rc == 0)
+ {
+ KCipherByte * obj;
+
+ rc = MEMBER(Alloc)(&obj, block_cipher);
+ if (rc == 0)
+ {
+ rc = MEMBER(Init)(obj, block_cipher);
+ if (rc == 0)
+ *new_obj = &obj->dad;
+ else
+ free (obj);
+ }
+ }
+ return rc;
+}
+
+/* EOF */
diff --git a/libs/krypto/cipher-impl.h b/libs/krypto/cipher-impl.h
new file mode 100644
index 0000000..fbccdb5
--- /dev/null
+++ b/libs/krypto/cipher-impl.h
@@ -0,0 +1,174 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_cipher_impl_
+#define _h_krypto_cipher_impl_
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+#include <klib/refcount.h>
+#include <krypto/cipher.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifndef CIPHER_IMPL
+#define CIPHER_IMPL KCipher
+#else
+struct CIPHER_IMPL;
+typedef struct CIPHER_IMPL CIPHER_IMPL;
+#endif
+
+typedef struct KCipher_vt KCipher_vt;
+struct KCipher_vt
+{
+ uint32_t maj;
+ uint32_t min;
+};
+
+
+typedef struct KCipher_vt_v1 KCipher_vt_v1;
+struct KCipher_vt_v1
+{
+ KCipher_vt version;
+
+ /* version == 1.x */
+ /* start minor version == 0 */
+ rc_t ( CC * destroy )(CIPHER_IMPL * self);
+
+ rc_t ( CC * set_encrypt_key )(CIPHER_IMPL * self,
+ const char * user_key,
+ uint32_t user_key_bits);
+
+ rc_t ( CC * set_decrypt_key )(CIPHER_IMPL * self,
+ const char * user_key,
+ uint32_t user_key_bits);
+
+ rc_t ( CC * set_encrypt_ivec )(CIPHER_IMPL * self,
+ const void * ivec);
+
+ rc_t ( CC * set_decrypt_ivec )(CIPHER_IMPL * self,
+ const void * ivec);
+
+ rc_t ( CC * set_encrypt_ctr_func)(CIPHER_IMPL * self,
+ cipher_ctr_func enc_ctr_func);
+
+ rc_t ( CC * set_decrypt_ctr_func)(CIPHER_IMPL * self,
+ cipher_ctr_func enc_ctr_func);
+
+ /* single block encryption */
+ rc_t ( CC * encrypt )(const CIPHER_IMPL * self,
+ const void * in,
+ void * out);
+ rc_t ( CC * decrypt )(const CIPHER_IMPL * self,
+ const void * in,
+ void * out);
+
+ /* electronic code book */
+ rc_t ( CC * encrypt_ecb )(const CIPHER_IMPL * self,
+ const void * in,
+ void * out,
+ uint32_t block_count);
+
+ rc_t ( CC * decrypt_ecb )(const CIPHER_IMPL * self,
+ const void * in,
+ void * out,
+ uint32_t block_count);
+
+ /* cipher-block chaining */
+ rc_t ( CC * encrypt_cbc )(CIPHER_IMPL * self,
+ const void * in,
+ void * out,
+ uint32_t block_count);
+ rc_t ( CC * decrypt_cbc )(CIPHER_IMPL * self,
+ const void * in,
+ void * out,
+ uint32_t block_count);
+
+ /* propagating cipher-block chaining */
+ rc_t ( CC * encrypt_pcbc )(CIPHER_IMPL * self, const void * in,
+ void * out, uint32_t block_count);
+ rc_t ( CC * decrypt_pcbc )(CIPHER_IMPL * self, const void * in,
+ void * out, uint32_t block_count);
+
+ /* cipher feedback */
+ rc_t ( CC * encrypt_cfb )(CIPHER_IMPL * self, const void * in,
+ void * out, uint32_t block_count);
+ rc_t ( CC * decrypt_cfb )(CIPHER_IMPL * self, const void * in,
+ void * out, uint32_t block_count);
+
+ /* output feedback */
+ rc_t ( CC * encrypt_ofb )(CIPHER_IMPL * self, const void * in,
+ void * out, uint32_t block_count);
+ rc_t ( CC * decrypt_ofb )(CIPHER_IMPL * self, const void * in,
+ void * out, uint32_t block_count);
+
+ /* Counter */
+ rc_t ( CC * encrypt_ctr )(CIPHER_IMPL * self, const void * in,
+ void * out, uint32_t block_count);
+ rc_t ( CC * decrypt_ctr )(CIPHER_IMPL * self, const void * in,
+ void * out, uint32_t block_count);
+
+ /* end minor version == 0 */
+
+ /* ANY NEW ENTRIES MUST BE REFLECTED IN libs/krypto/cipher.c
+ BY BOTH THE CORRESPONDING MESSAGE DISPATCH FUNCTION(s) AND
+ VTABLE VALIDITY CHECKS IN CIPHERInit */
+};
+
+typedef union KCipher_ptr KCipher_ptr;
+union KCipher_ptr
+{
+ const KCipher_vt * version;
+ const KCipher_vt_v1 * v1;
+};
+
+
+struct KCipher
+{
+ KRefcount refcount;
+ uint32_t block_size;
+ KCipher_ptr vt;
+ const char * name;
+ void * encrypt_key;
+ void * decrypt_key;
+ void * encrypt_ivec;
+ void * decrypt_ivec;
+ cipher_ctr_func encrypt_counter_func;
+ cipher_ctr_func decrypt_counter_func;
+};
+
+void KCipherInit (KCipher * self, uint32_t block_size,
+ const KCipher_vt * vt, const char * name);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_cipher_impl_ */
diff --git a/libs/krypto/cipher-no-vec.c b/libs/krypto/cipher-no-vec.c
new file mode 100644
index 0000000..7e0eded
--- /dev/null
+++ b/libs/krypto/cipher-no-vec.c
@@ -0,0 +1,41 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+#include <klib/rc.h>
+
+#include <krypto/ciphermgr.h>
+#include "cipher-priv.h"
+#include "ncbi-priv.h"
+
+struct KCipher;
+
+rc_t CMEMBER(Make) (struct KCipher ** new_obj, kcipher_type type)
+{
+ return RC (rcKrypto, rcCipher, rcConstructing, rcFunction, rcUnsupported);
+}
+
+
+/* EOF */
diff --git a/libs/krypto/cipher-priv.h b/libs/krypto/cipher-priv.h
new file mode 100644
index 0000000..bcc39e5
--- /dev/null
+++ b/libs/krypto/cipher-priv.h
@@ -0,0 +1,79 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_cipher_priv_
+#define _h_krypto_cipher_priv_
+
+#include <krypto/extern.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/cipher.h>
+
+#include <klib/refcount.h>
+
+/*
+ * klib/rc.h ran out of room for new targets so we'll fake it for now
+ * with a now unused target that will unfortunately leave some
+ * confusing rc to english translations
+ */
+#define rcBlockCipher rcRng
+#define rcCipher rcRng
+
+/*
+ * for use within krypto and krypto testing
+ */
+
+enum e_aes_type
+{
+ kcipher_AES_core, /* Rijndael aes_core.c portable */
+ kcipher_AES_ncbi_sim, /* clean AES written for NCBI specifically from the */
+ kcipher_AES_ncbi_vec, /* xmm vector version version */
+ kcipher_AES_ncbi_ni, /* 64 bit AES-NI version */
+ kcipher_AES_count
+};
+
+rc_t KCipherMake (struct KCipher ** new_cipher,
+ kcipher_type type);
+rc_t KCipherVecAesNiMake (struct KCipher ** new_cipher,
+ kcipher_type type);
+rc_t KCipherVecRegMake (struct KCipher ** new_cipher,
+ kcipher_type type);
+rc_t KCipherVecMake (struct KCipher ** new_cipher,
+ kcipher_type type);
+rc_t KCipherByteMake (struct KCipher ** new_cipher,
+ kcipher_type type);
+
+/*
+ * not for use outside krypto
+ */
+rc_t KCipherDestroy (struct KCipher * self);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* #ifndef _h_krypto_cipher_priv_ */
diff --git a/libs/krypto/cipher-vec.aes-ni.pic.o.list b/libs/krypto/cipher-vec.aes-ni.pic.o.list
new file mode 100644
index 0000000..6ca59f3
--- /dev/null
+++ b/libs/krypto/cipher-vec.aes-ni.pic.o.list
@@ -0,0 +1,10909 @@
+GAS LISTING /tmp/ccWvEaWW.s page 1
+
+
+ 1 .file "cipher-vec.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 D9030000 .text
+ 8 0200F201
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .globl KCipherVecAesNiClassName
+ 11 .section .rodata
+ 12 .type KCipherVecAesNiClassName, @object
+ 13 .size KCipherVecAesNiClassName, 12
+ 14 KCipherVecAesNiClassName:
+ 15 0000 43495048 .string "CIPHER_IMPL"
+ 15 45525F49
+ 15 4D504C00
+ 16 .text
+ 17 .type CipherVecIn, @function
+ 18 CipherVecIn:
+ 19 .LFB601:
+ 20 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/extern.h>
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL and BLOCKCIPHER_IMPL are defined in this header */
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "ncbi-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL is used in this header */
+
GAS LISTING /tmp/ccWvEaWW.s page 2
+
+
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-impl.h"
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* BLOCKCIPHER_IMPL is used in this header */
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-impl.h"
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "aes-ncbi-priv.h"
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "null-ncbi-priv.h"
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-priv.h"
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-priv.h"
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/cipher.h>
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/ciphermgr.h>
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/refcount.h>
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/out.h>
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/rc.h>
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <sysalloc.h>
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <stdlib.h>
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <string.h>
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <assert.h>
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char CMEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct CIPHER_IMPL
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipher dad;
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipherVec * block_cipher;
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** typedef union CipherVec_u
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec vec;
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherBlock block;
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** } CipherVec_u;
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Read a blocks worth of bytes into an AESState
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CipherVecIn (const void * cvin)
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 21 .loc 1 76 0
+ 22 .cfi_startproc
+ 23 0000 55 pushq %rbp
+ 24 .LCFI0:
+ 25 .cfi_def_cfa_offset 16
+ 26 0001 4889E5 movq %rsp, %rbp
+ 27 .cfi_offset 6, -16
+ 28 .LCFI1:
+ 29 .cfi_def_cfa_register 6
+ 30 0004 48897DF8 movq %rdi, -8(%rbp)
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec cv;
+
GAS LISTING /tmp/ccWvEaWW.s page 3
+
+
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** __asm__ (
+ 31 .loc 1 80 0
+ 32 0008 488B45F8 movq -8(%rbp), %rax
+ 33 000c 4889C7 movq %rax, %rdi
+ 34 #APP
+ 35 # 80 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c" 1
+ 81 "movdqu (%[a]),%[s]" : [s] "=x" (cv) : [a] "D" (cvin)
+ 36 movdqu (%rdi),%xmm0
+ 37 # 0 "" 2
+ 38 #NO_APP
+ 39 0013 660F7F45 movdqa %xmm0, -32(%rbp)
+ 39 E0
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** );
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return cv;
+ 40 .loc 1 84 0
+ 41 0018 660F6F45 movdqa -32(%rbp), %xmm0
+ 41 E0
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec_u u;
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memmove (&u.block, cvin, sizeof (u));
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return u.vec;
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 42 .loc 1 91 0
+ 43 001d C9 leave
+ 44 001e C3 ret
+ 45 .cfi_endproc
+ 46 .LFE601:
+ 47 .size CipherVecIn, .-CipherVecIn
+ 48 .type CipherVecOut, @function
+ 49 CipherVecOut:
+ 50 .LFB602:
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Write a block's worth of bytes out from an AESState
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ void CipherVecOut (const CipherVec cv, void * cvout)
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 51 .loc 1 99 0
+ 52 .cfi_startproc
+ 53 001f 55 pushq %rbp
+ 54 .LCFI2:
+ 55 .cfi_def_cfa_offset 16
+ 56 0020 4889E5 movq %rsp, %rbp
+ 57 .cfi_offset 6, -16
+ 58 .LCFI3:
+ 59 .cfi_def_cfa_register 6
+ 60 0023 660F7F45 movdqa %xmm0, -16(%rbp)
+ 60 F0
+ 61 0028 48897DE8 movq %rdi, -24(%rbp)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec rcv = cv;
+
GAS LISTING /tmp/ccWvEaWW.s page 4
+
+
+ 62 .loc 1 101 0
+ 63 002c 660F6F45 movdqa -16(%rbp), %xmm0
+ 63 F0
+ 64 0031 660F7F45 movdqa %xmm0, -48(%rbp)
+ 64 D0
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** __asm__ (
+ 65 .loc 1 103 0
+ 66 0036 488B45E8 movq -24(%rbp), %rax
+ 67 003a 660F6F45 movdqa -48(%rbp), %xmm0
+ 67 D0
+ 68 003f 4889C7 movq %rax, %rdi
+ 69 #APP
+ 70 # 103 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c" 1
+ 104 "movdqu %[s],(%[a])" : : [s] "x" (rcv), [a] "D" (cvout)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** );
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec lcv = cv;
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memmove (cvout, &lcv, sizeof (lcv));
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 71 movdqu %xmm0,(%rdi)
+ 72 # 0 "" 2
+ 73 .loc 1 110 0
+ 74 #NO_APP
+ 75 0046 C9 leave
+ 76 0047 C3 ret
+ 77 .cfi_endproc
+ 78 .LFE602:
+ 79 .size CipherVecOut, .-CipherVecOut
+ 80 .type KCipherVecAesNiDestroy, @function
+ 81 KCipherVecAesNiDestroy:
+ 82 .LFB603:
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Destroy) (CIPHER_IMPL * self)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 83 .loc 1 114 0
+ 84 .cfi_startproc
+ 85 0048 55 pushq %rbp
+ 86 .LCFI4:
+ 87 .cfi_def_cfa_offset 16
+ 88 0049 4889E5 movq %rsp, %rbp
+ 89 .cfi_offset 6, -16
+ 90 .LCFI5:
+ 91 .cfi_def_cfa_register 6
+ 92 004c 4883EC20 subq $32, %rsp
+ 93 0050 48897DE8 movq %rdi, -24(%rbp)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 94 .loc 1 115 0
+ 95 0054 C745FC00 movl $0, -4(%rbp)
+ 95 000000
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (self)
+ 96 .loc 1 117 0
+ 97 005b 48837DE8 cmpq $0, -24(%rbp)
+ 97 00
+
GAS LISTING /tmp/ccWvEaWW.s page 5
+
+
+ 98 0060 741B je .L6
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = KCipherDestroy (&self->dad);
+ 99 .loc 1 119 0
+ 100 0062 488B45E8 movq -24(%rbp), %rax
+ 101 0066 4889C7 movq %rax, %rdi
+ 102 0069 E8000000 call KCipherDestroy at PLT
+ 102 00
+ 103 006e 8945FC movl %eax, -4(%rbp)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (self);
+ 104 .loc 1 120 0
+ 105 0071 488B45E8 movq -24(%rbp), %rax
+ 106 0075 4889C7 movq %rax, %rdi
+ 107 0078 E8000000 call free at PLT
+ 107 00
+ 108 .L6:
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 109 .loc 1 122 0
+ 110 007d 8B45FC movl -4(%rbp), %eax
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 111 .loc 1 123 0
+ 112 0080 C9 leave
+ 113 0081 C3 ret
+ 114 .cfi_endproc
+ 115 .LFE603:
+ 116 .size KCipherVecAesNiDestroy, .-KCipherVecAesNiDestroy
+ 117 .section .rodata
+ 118 000c 00000000 .align 8
+ 119 .LC0:
+ 120 0010 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 120 652F726F
+ 120 6461726D
+ 120 65722F73
+ 120 72615F73
+ 121 .LC1:
+ 122 0048 73656C66 .string "self"
+ 122 00
+ 123 .LC2:
+ 124 004d 75736572 .string "user_key"
+ 124 5F6B6579
+ 124 00
+ 125 .LC3:
+ 126 0056 75736572 .string "user_key_bits"
+ 126 5F6B6579
+ 126 5F626974
+ 126 7300
+ 127 .text
+ 128 .type KCipherVecAesNiSetEncryptKey, @function
+ 129 KCipherVecAesNiSetEncryptKey:
+ 130 .LFB604:
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetEncryptKey)(CIPHER_IMPL * self,
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char * user_key,
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint32_t user_key_bits)
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccWvEaWW.s page 6
+
+
+ 131 .loc 1 129 0
+ 132 .cfi_startproc
+ 133 0082 55 pushq %rbp
+ 134 .LCFI6:
+ 135 .cfi_def_cfa_offset 16
+ 136 0083 4889E5 movq %rsp, %rbp
+ 137 .cfi_offset 6, -16
+ 138 .LCFI7:
+ 139 .cfi_def_cfa_register 6
+ 140 0086 53 pushq %rbx
+ 141 0087 4883EC38 subq $56, %rsp
+ 142 008b 48897DD8 movq %rdi, -40(%rbp)
+ 143 008f 488975D0 movq %rsi, -48(%rbp)
+ 144 0093 8955CC movl %edx, -52(%rbp)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 145 .loc 1 130 0
+ 146 0096 C745EC00 movl $0, -20(%rbp)
+ 146 000000
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 147 .loc 1 132 0
+ 148 009d 48837DD8 cmpq $0, -40(%rbp)
+ 148 00
+ 149 00a2 751F jne .L9
+ 150 .cfi_offset 3, -24
+ 151 00a4 488D0D00 leaq __PRETTY_FUNCTION__.7296(%rip), %rcx
+ 151 000000
+ 152 00ab BA840000 movl $132, %edx
+ 152 00
+ 153 00b0 488D3500 leaq .LC0(%rip), %rsi
+ 153 000000
+ 154 00b7 488D3D00 leaq .LC1(%rip), %rdi
+ 154 000000
+ 155 00be E8000000 call __assert_fail at PLT
+ 155 00
+ 156 .L9:
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key);
+ 157 .loc 1 133 0
+ 158 00c3 48837DD0 cmpq $0, -48(%rbp)
+ 158 00
+ 159 00c8 751F jne .L10
+ 160 00ca 488D0D00 leaq __PRETTY_FUNCTION__.7296(%rip), %rcx
+ 160 000000
+ 161 00d1 BA850000 movl $133, %edx
+ 161 00
+ 162 00d6 488D3500 leaq .LC0(%rip), %rsi
+ 162 000000
+ 163 00dd 488D3D00 leaq .LC2(%rip), %rdi
+ 163 000000
+ 164 00e4 E8000000 call __assert_fail at PLT
+ 164 00
+ 165 .L10:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key_bits);
+ 166 .loc 1 134 0
+ 167 00e9 837DCC00 cmpl $0, -52(%rbp)
+ 168 00ed 751F jne .L11
+ 169 00ef 488D0D00 leaq __PRETTY_FUNCTION__.7296(%rip), %rcx
+
GAS LISTING /tmp/ccWvEaWW.s page 7
+
+
+ 169 000000
+ 170 00f6 BA860000 movl $134, %edx
+ 170 00
+ 171 00fb 488D3500 leaq .LC0(%rip), %rsi
+ 171 000000
+ 172 0102 488D3D00 leaq .LC3(%rip), %rdi
+ 172 000000
+ 173 0109 E8000000 call __assert_fail at PLT
+ 173 00
+ 174 .L11:
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 175 .loc 1 136 0
+ 176 010e 488B45D8 movq -40(%rbp), %rax
+ 177 0112 488B4048 movq 72(%rax), %rax
+ 178 0116 8B00 movl (%rax), %eax
+ 179 0118 83F801 cmpl $1, %eax
+ 180 011b 7422 je .L13
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 181 .loc 1 139 0
+ 182 011d B98B0000 movl $139, %ecx
+ 182 00
+ 183 0122 488D1500 leaq __func__.7298(%rip), %rdx
+ 183 000000
+ 184 0129 488D3500 leaq .LC0(%rip), %rsi
+ 184 000000
+ 185 0130 BF088E04 movl $-2029744632, %edi
+ 185 87
+ 186 0135 E8000000 call SetRCFileFuncLine at PLT
+ 186 00
+ 187 013a 8945EC movl %eax, -20(%rbp)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 188 .loc 1 140 0
+ 189 013d EB23 jmp .L14
+ 190 .L13:
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+ 191 .loc 1 143 0
+ 192 013f 488B45D8 movq -40(%rbp), %rax
+ 193 0143 488B4048 movq 72(%rax), %rax
+ 194 0147 488B5820 movq 32(%rax), %rbx
+ 195 014b 488B45D8 movq -40(%rbp), %rax
+ 196 014f 488B4018 movq 24(%rax), %rax
+ 197 0153 8B55CC movl -52(%rbp), %edx
+ 198 0156 488B4DD0 movq -48(%rbp), %rcx
+ 199 015a 4889CE movq %rcx, %rsi
+ 200 015d 4889C7 movq %rax, %rdi
+ 201 0160 FFD3 call *%rbx
+ 202 .L14:
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** user_key_bits);
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 203 .loc 1 147 0
+
GAS LISTING /tmp/ccWvEaWW.s page 8
+
+
+ 204 0162 8B45EC movl -20(%rbp), %eax
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 205 .loc 1 148 0
+ 206 0165 4883C438 addq $56, %rsp
+ 207 0169 5B popq %rbx
+ 208 016a C9 leave
+ 209 016b C3 ret
+ 210 .cfi_endproc
+ 211 .LFE604:
+ 212 .size KCipherVecAesNiSetEncryptKey, .-KCipherVecAesNiSetEncryptKey
+ 213 .type KCipherVecAesNiSetDecryptKey, @function
+ 214 KCipherVecAesNiSetDecryptKey:
+ 215 .LFB605:
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetDecryptKey)(CIPHER_IMPL * self,
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char * user_key,
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint32_t user_key_bits)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 216 .loc 1 154 0
+ 217 .cfi_startproc
+ 218 016c 55 pushq %rbp
+ 219 .LCFI8:
+ 220 .cfi_def_cfa_offset 16
+ 221 016d 4889E5 movq %rsp, %rbp
+ 222 .cfi_offset 6, -16
+ 223 .LCFI9:
+ 224 .cfi_def_cfa_register 6
+ 225 0170 53 pushq %rbx
+ 226 0171 4883EC38 subq $56, %rsp
+ 227 0175 48897DD8 movq %rdi, -40(%rbp)
+ 228 0179 488975D0 movq %rsi, -48(%rbp)
+ 229 017d 8955CC movl %edx, -52(%rbp)
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 230 .loc 1 155 0
+ 231 0180 C745EC00 movl $0, -20(%rbp)
+ 231 000000
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 232 .loc 1 157 0
+ 233 0187 48837DD8 cmpq $0, -40(%rbp)
+ 233 00
+ 234 018c 751F jne .L17
+ 235 .cfi_offset 3, -24
+ 236 018e 488D0D00 leaq __PRETTY_FUNCTION__.7320(%rip), %rcx
+ 236 000000
+ 237 0195 BA9D0000 movl $157, %edx
+ 237 00
+ 238 019a 488D3500 leaq .LC0(%rip), %rsi
+ 238 000000
+ 239 01a1 488D3D00 leaq .LC1(%rip), %rdi
+ 239 000000
+ 240 01a8 E8000000 call __assert_fail at PLT
+ 240 00
+ 241 .L17:
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key);
+ 242 .loc 1 158 0
+
GAS LISTING /tmp/ccWvEaWW.s page 9
+
+
+ 243 01ad 48837DD0 cmpq $0, -48(%rbp)
+ 243 00
+ 244 01b2 751F jne .L18
+ 245 01b4 488D0D00 leaq __PRETTY_FUNCTION__.7320(%rip), %rcx
+ 245 000000
+ 246 01bb BA9E0000 movl $158, %edx
+ 246 00
+ 247 01c0 488D3500 leaq .LC0(%rip), %rsi
+ 247 000000
+ 248 01c7 488D3D00 leaq .LC2(%rip), %rdi
+ 248 000000
+ 249 01ce E8000000 call __assert_fail at PLT
+ 249 00
+ 250 .L18:
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key_bits);
+ 251 .loc 1 159 0
+ 252 01d3 837DCC00 cmpl $0, -52(%rbp)
+ 253 01d7 751F jne .L19
+ 254 01d9 488D0D00 leaq __PRETTY_FUNCTION__.7320(%rip), %rcx
+ 254 000000
+ 255 01e0 BA9F0000 movl $159, %edx
+ 255 00
+ 256 01e5 488D3500 leaq .LC0(%rip), %rsi
+ 256 000000
+ 257 01ec 488D3D00 leaq .LC3(%rip), %rdi
+ 257 000000
+ 258 01f3 E8000000 call __assert_fail at PLT
+ 258 00
+ 259 .L19:
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 260 .loc 1 161 0
+ 261 01f8 488B45D8 movq -40(%rbp), %rax
+ 262 01fc 488B4048 movq 72(%rax), %rax
+ 263 0200 8B00 movl (%rax), %eax
+ 264 0202 83F801 cmpl $1, %eax
+ 265 0205 7422 je .L21
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 266 .loc 1 164 0
+ 267 0207 B9A40000 movl $164, %ecx
+ 267 00
+ 268 020c 488D1500 leaq __func__.7322(%rip), %rdx
+ 268 000000
+ 269 0213 488D3500 leaq .LC0(%rip), %rsi
+ 269 000000
+ 270 021a BF088E04 movl $-2029744632, %edi
+ 270 87
+ 271 021f E8000000 call SetRCFileFuncLine at PLT
+ 271 00
+ 272 0224 8945EC movl %eax, -20(%rbp)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 273 .loc 1 165 0
+ 274 0227 EB23 jmp .L22
+ 275 .L21:
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccWvEaWW.s page 10
+
+
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+ 276 .loc 1 168 0
+ 277 0229 488B45D8 movq -40(%rbp), %rax
+ 278 022d 488B4048 movq 72(%rax), %rax
+ 279 0231 488B5828 movq 40(%rax), %rbx
+ 280 0235 488B45D8 movq -40(%rbp), %rax
+ 281 0239 488B4020 movq 32(%rax), %rax
+ 282 023d 8B55CC movl -52(%rbp), %edx
+ 283 0240 488B4DD0 movq -48(%rbp), %rcx
+ 284 0244 4889CE movq %rcx, %rsi
+ 285 0247 4889C7 movq %rax, %rdi
+ 286 024a FFD3 call *%rbx
+ 287 .L22:
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** user_key_bits);
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 288 .loc 1 172 0
+ 289 024c 8B45EC movl -20(%rbp), %eax
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 290 .loc 1 173 0
+ 291 024f 4883C438 addq $56, %rsp
+ 292 0253 5B popq %rbx
+ 293 0254 C9 leave
+ 294 0255 C3 ret
+ 295 .cfi_endproc
+ 296 .LFE605:
+ 297 .size KCipherVecAesNiSetDecryptKey, .-KCipherVecAesNiSetDecryptKey
+ 298 .section .rodata
+ 299 .LC4:
+ 300 0064 69766563 .string "ivec"
+ 300 00
+ 301 .text
+ 302 .type KCipherVecAesNiSetEncryptIvec, @function
+ 303 KCipherVecAesNiSetEncryptIvec:
+ 304 .LFB606:
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptIvec) (CIPHER_IMPL * self,
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * ivec)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 305 .loc 1 179 0
+ 306 .cfi_startproc
+ 307 0256 55 pushq %rbp
+ 308 .LCFI10:
+ 309 .cfi_def_cfa_offset 16
+ 310 0257 4889E5 movq %rsp, %rbp
+ 311 .cfi_offset 6, -16
+ 312 .LCFI11:
+ 313 .cfi_def_cfa_register 6
+ 314 025a 4883EC10 subq $16, %rsp
+ 315 025e 48897DF8 movq %rdi, -8(%rbp)
+ 316 0262 488975F0 movq %rsi, -16(%rbp)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 317 .loc 1 180 0
+
GAS LISTING /tmp/ccWvEaWW.s page 11
+
+
+ 318 0266 48837DF8 cmpq $0, -8(%rbp)
+ 318 00
+ 319 026b 751F jne .L25
+ 320 026d 488D0D00 leaq __PRETTY_FUNCTION__.7342(%rip), %rcx
+ 320 000000
+ 321 0274 BAB40000 movl $180, %edx
+ 321 00
+ 322 0279 488D3500 leaq .LC0(%rip), %rsi
+ 322 000000
+ 323 0280 488D3D00 leaq .LC1(%rip), %rdi
+ 323 000000
+ 324 0287 E8000000 call __assert_fail at PLT
+ 324 00
+ 325 .L25:
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (ivec);
+ 326 .loc 1 181 0
+ 327 028c 48837DF0 cmpq $0, -16(%rbp)
+ 327 00
+ 328 0291 751F jne .L26
+ 329 0293 488D0D00 leaq __PRETTY_FUNCTION__.7342(%rip), %rcx
+ 329 000000
+ 330 029a BAB50000 movl $181, %edx
+ 330 00
+ 331 029f 488D3500 leaq .LC0(%rip), %rsi
+ 331 000000
+ 332 02a6 488D3D00 leaq .LC4(%rip), %rdi
+ 332 000000
+ 333 02ad E8000000 call __assert_fail at PLT
+ 333 00
+ 334 .L26:
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+ 335 .loc 1 183 0
+ 336 02b2 488B45F8 movq -8(%rbp), %rax
+ 337 02b6 8B4004 movl 4(%rax), %eax
+ 338 02b9 89C2 mov %eax, %edx
+ 339 02bb 488B45F8 movq -8(%rbp), %rax
+ 340 02bf 488B4028 movq 40(%rax), %rax
+ 341 02c3 488B4DF0 movq -16(%rbp), %rcx
+ 342 02c7 4889CE movq %rcx, %rsi
+ 343 02ca 4889C7 movq %rax, %rdi
+ 344 02cd E8000000 call memcpy at PLT
+ 344 00
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 345 .loc 1 185 0
+ 346 02d2 B8000000 movl $0, %eax
+ 346 00
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 347 .loc 1 186 0
+ 348 02d7 C9 leave
+ 349 02d8 C3 ret
+ 350 .cfi_endproc
+ 351 .LFE606:
+ 352 .size KCipherVecAesNiSetEncryptIvec, .-KCipherVecAesNiSetEncryptIvec
+ 353 .type KCipherVecAesNiSetDecryptIvec, @function
+ 354 KCipherVecAesNiSetDecryptIvec:
+
GAS LISTING /tmp/ccWvEaWW.s page 12
+
+
+ 355 .LFB607:
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptIvec) (CIPHER_IMPL * self,
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * ivec)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 356 .loc 1 192 0
+ 357 .cfi_startproc
+ 358 02d9 55 pushq %rbp
+ 359 .LCFI12:
+ 360 .cfi_def_cfa_offset 16
+ 361 02da 4889E5 movq %rsp, %rbp
+ 362 .cfi_offset 6, -16
+ 363 .LCFI13:
+ 364 .cfi_def_cfa_register 6
+ 365 02dd 4883EC10 subq $16, %rsp
+ 366 02e1 48897DF8 movq %rdi, -8(%rbp)
+ 367 02e5 488975F0 movq %rsi, -16(%rbp)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 368 .loc 1 193 0
+ 369 02e9 48837DF8 cmpq $0, -8(%rbp)
+ 369 00
+ 370 02ee 751F jne .L29
+ 371 02f0 488D0D00 leaq __PRETTY_FUNCTION__.7355(%rip), %rcx
+ 371 000000
+ 372 02f7 BAC10000 movl $193, %edx
+ 372 00
+ 373 02fc 488D3500 leaq .LC0(%rip), %rsi
+ 373 000000
+ 374 0303 488D3D00 leaq .LC1(%rip), %rdi
+ 374 000000
+ 375 030a E8000000 call __assert_fail at PLT
+ 375 00
+ 376 .L29:
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (ivec);
+ 377 .loc 1 194 0
+ 378 030f 48837DF0 cmpq $0, -16(%rbp)
+ 378 00
+ 379 0314 751F jne .L30
+ 380 0316 488D0D00 leaq __PRETTY_FUNCTION__.7355(%rip), %rcx
+ 380 000000
+ 381 031d BAC20000 movl $194, %edx
+ 381 00
+ 382 0322 488D3500 leaq .LC0(%rip), %rsi
+ 382 000000
+ 383 0329 488D3D00 leaq .LC4(%rip), %rdi
+ 383 000000
+ 384 0330 E8000000 call __assert_fail at PLT
+ 384 00
+ 385 .L30:
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+ 386 .loc 1 196 0
+ 387 0335 488B45F8 movq -8(%rbp), %rax
+ 388 0339 8B4004 movl 4(%rax), %eax
+ 389 033c 89C2 mov %eax, %edx
+
GAS LISTING /tmp/ccWvEaWW.s page 13
+
+
+ 390 033e 488B45F8 movq -8(%rbp), %rax
+ 391 0342 488B4030 movq 48(%rax), %rax
+ 392 0346 488B4DF0 movq -16(%rbp), %rcx
+ 393 034a 4889CE movq %rcx, %rsi
+ 394 034d 4889C7 movq %rax, %rdi
+ 395 0350 E8000000 call memcpy at PLT
+ 395 00
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 396 .loc 1 198 0
+ 397 0355 B8000000 movl $0, %eax
+ 397 00
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 398 .loc 1 199 0
+ 399 035a C9 leave
+ 400 035b C3 ret
+ 401 .cfi_endproc
+ 402 .LFE607:
+ 403 .size KCipherVecAesNiSetDecryptIvec, .-KCipherVecAesNiSetDecryptIvec
+ 404 .section .rodata
+ 405 .LC5:
+ 406 0069 66756E63 .string "func"
+ 406 00
+ 407 .text
+ 408 .type KCipherVecAesNiSetEncryptCounterFunc, @function
+ 409 KCipherVecAesNiSetEncryptCounterFunc:
+ 410 .LFB608:
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptCounterFunc) (CIPHER_IMPL * self,
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cipher_ctr_func func)
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 411 .loc 1 205 0
+ 412 .cfi_startproc
+ 413 035c 55 pushq %rbp
+ 414 .LCFI14:
+ 415 .cfi_def_cfa_offset 16
+ 416 035d 4889E5 movq %rsp, %rbp
+ 417 .cfi_offset 6, -16
+ 418 .LCFI15:
+ 419 .cfi_def_cfa_register 6
+ 420 0360 4883EC10 subq $16, %rsp
+ 421 0364 48897DF8 movq %rdi, -8(%rbp)
+ 422 0368 488975F0 movq %rsi, -16(%rbp)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 423 .loc 1 206 0
+ 424 036c 48837DF8 cmpq $0, -8(%rbp)
+ 424 00
+ 425 0371 751F jne .L33
+ 426 0373 488D0D00 leaq __PRETTY_FUNCTION__.7368(%rip), %rcx
+ 426 000000
+ 427 037a BACE0000 movl $206, %edx
+ 427 00
+ 428 037f 488D3500 leaq .LC0(%rip), %rsi
+ 428 000000
+ 429 0386 488D3D00 leaq .LC1(%rip), %rdi
+
GAS LISTING /tmp/ccWvEaWW.s page 14
+
+
+ 429 000000
+ 430 038d E8000000 call __assert_fail at PLT
+ 430 00
+ 431 .L33:
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (func);
+ 432 .loc 1 207 0
+ 433 0392 48837DF0 cmpq $0, -16(%rbp)
+ 433 00
+ 434 0397 751F jne .L34
+ 435 0399 488D0D00 leaq __PRETTY_FUNCTION__.7368(%rip), %rcx
+ 435 000000
+ 436 03a0 BACF0000 movl $207, %edx
+ 436 00
+ 437 03a5 488D3500 leaq .LC0(%rip), %rsi
+ 437 000000
+ 438 03ac 488D3D00 leaq .LC5(%rip), %rdi
+ 438 000000
+ 439 03b3 E8000000 call __assert_fail at PLT
+ 439 00
+ 440 .L34:
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->dad.encrypt_counter_func = func;
+ 441 .loc 1 209 0
+ 442 03b8 488B45F8 movq -8(%rbp), %rax
+ 443 03bc 488B55F0 movq -16(%rbp), %rdx
+ 444 03c0 48895038 movq %rdx, 56(%rax)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 445 .loc 1 211 0
+ 446 03c4 B8000000 movl $0, %eax
+ 446 00
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 447 .loc 1 212 0
+ 448 03c9 C9 leave
+ 449 03ca C3 ret
+ 450 .cfi_endproc
+ 451 .LFE608:
+ 452 .size KCipherVecAesNiSetEncryptCounterFunc, .-KCipherVecAesNiSetEncryptCounterFunc
+ 453 .type KCipherVecAesNiSetDecryptCounterFunc, @function
+ 454 KCipherVecAesNiSetDecryptCounterFunc:
+ 455 .LFB609:
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptCounterFunc) (CIPHER_IMPL * self,
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cipher_ctr_func func)
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 456 .loc 1 218 0
+ 457 .cfi_startproc
+ 458 03cb 55 pushq %rbp
+ 459 .LCFI16:
+ 460 .cfi_def_cfa_offset 16
+ 461 03cc 4889E5 movq %rsp, %rbp
+ 462 .cfi_offset 6, -16
+ 463 .LCFI17:
+ 464 .cfi_def_cfa_register 6
+ 465 03cf 4883EC10 subq $16, %rsp
+
GAS LISTING /tmp/ccWvEaWW.s page 15
+
+
+ 466 03d3 48897DF8 movq %rdi, -8(%rbp)
+ 467 03d7 488975F0 movq %rsi, -16(%rbp)
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 468 .loc 1 219 0
+ 469 03db 48837DF8 cmpq $0, -8(%rbp)
+ 469 00
+ 470 03e0 751F jne .L37
+ 471 03e2 488D0D00 leaq __PRETTY_FUNCTION__.7378(%rip), %rcx
+ 471 000000
+ 472 03e9 BADB0000 movl $219, %edx
+ 472 00
+ 473 03ee 488D3500 leaq .LC0(%rip), %rsi
+ 473 000000
+ 474 03f5 488D3D00 leaq .LC1(%rip), %rdi
+ 474 000000
+ 475 03fc E8000000 call __assert_fail at PLT
+ 475 00
+ 476 .L37:
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (func);
+ 477 .loc 1 220 0
+ 478 0401 48837DF0 cmpq $0, -16(%rbp)
+ 478 00
+ 479 0406 751F jne .L38
+ 480 0408 488D0D00 leaq __PRETTY_FUNCTION__.7378(%rip), %rcx
+ 480 000000
+ 481 040f BADC0000 movl $220, %edx
+ 481 00
+ 482 0414 488D3500 leaq .LC0(%rip), %rsi
+ 482 000000
+ 483 041b 488D3D00 leaq .LC5(%rip), %rdi
+ 483 000000
+ 484 0422 E8000000 call __assert_fail at PLT
+ 484 00
+ 485 .L38:
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->dad.decrypt_counter_func = func;
+ 486 .loc 1 222 0
+ 487 0427 488B45F8 movq -8(%rbp), %rax
+ 488 042b 488B55F0 movq -16(%rbp), %rdx
+ 489 042f 48895040 movq %rdx, 64(%rax)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 490 .loc 1 224 0
+ 491 0433 B8000000 movl $0, %eax
+ 491 00
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 492 .loc 1 225 0
+ 493 0438 C9 leave
+ 494 0439 C3 ret
+ 495 .cfi_endproc
+ 496 .LFE609:
+ 497 .size KCipherVecAesNiSetDecryptCounterFunc, .-KCipherVecAesNiSetDecryptCounterFunc
+ 498 .type KCipherVecAesNiEncryptV1, @function
+ 499 KCipherVecAesNiEncryptV1:
+ 500 .LFB610:
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccWvEaWW.s page 16
+
+
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CMEMBER(EncryptV1)(const CIPHER_IMPL * self,
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec cv)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 501 .loc 1 230 0
+ 502 .cfi_startproc
+ 503 043a 55 pushq %rbp
+ 504 .LCFI18:
+ 505 .cfi_def_cfa_offset 16
+ 506 043b 4889E5 movq %rsp, %rbp
+ 507 .cfi_offset 6, -16
+ 508 .LCFI19:
+ 509 .cfi_def_cfa_register 6
+ 510 043e 4883EC10 subq $16, %rsp
+ 511 0442 48897DF8 movq %rdi, -8(%rbp)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return self->block_cipher->v1.encrypt (cv, self->dad.encrypt_key);
+ 512 .loc 1 231 0
+ 513 0446 488B45F8 movq -8(%rbp), %rax
+ 514 044a 488B4048 movq 72(%rax), %rax
+ 515 044e 488B5030 movq 48(%rax), %rdx
+ 516 0452 488B45F8 movq -8(%rbp), %rax
+ 517 0456 488B4018 movq 24(%rax), %rax
+ 518 045a 4889C7 movq %rax, %rdi
+ 519 045d FFD2 call *%rdx
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 520 .loc 1 232 0
+ 521 045f C9 leave
+ 522 0460 C3 ret
+ 523 .cfi_endproc
+ 524 .LFE610:
+ 525 .size KCipherVecAesNiEncryptV1, .-KCipherVecAesNiEncryptV1
+ 526 .type KCipherVecAesNiDecryptV1, @function
+ 527 KCipherVecAesNiDecryptV1:
+ 528 .LFB611:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CMEMBER(DecryptV1)(const CIPHER_IMPL * self,
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec cv)
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 529 .loc 1 237 0
+ 530 .cfi_startproc
+ 531 0461 55 pushq %rbp
+ 532 .LCFI20:
+ 533 .cfi_def_cfa_offset 16
+ 534 0462 4889E5 movq %rsp, %rbp
+ 535 .cfi_offset 6, -16
+ 536 .LCFI21:
+ 537 .cfi_def_cfa_register 6
+ 538 0465 4883EC10 subq $16, %rsp
+ 539 0469 48897DF8 movq %rdi, -8(%rbp)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return self->block_cipher->v1.decrypt (cv, self->dad.decrypt_key);
+ 540 .loc 1 238 0
+ 541 046d 488B45F8 movq -8(%rbp), %rax
+ 542 0471 488B4048 movq 72(%rax), %rax
+ 543 0475 488B5038 movq 56(%rax), %rdx
+ 544 0479 488B45F8 movq -8(%rbp), %rax
+ 545 047d 488B4020 movq 32(%rax), %rax
+ 546 0481 4889C7 movq %rax, %rdi
+
GAS LISTING /tmp/ccWvEaWW.s page 17
+
+
+ 547 0484 FFD2 call *%rdx
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 548 .loc 1 239 0
+ 549 0486 C9 leave
+ 550 0487 C3 ret
+ 551 .cfi_endproc
+ 552 .LFE611:
+ 553 .size KCipherVecAesNiDecryptV1, .-KCipherVecAesNiDecryptV1
+ 554 .type KCipherVecAesNiEncryptV1Int, @function
+ 555 KCipherVecAesNiEncryptV1Int:
+ 556 .LFB612:
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(EncryptV1Int)(const CIPHER_IMPL * self,
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * in, void * out)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 557 .loc 1 244 0
+ 558 .cfi_startproc
+ 559 0488 55 pushq %rbp
+ 560 .LCFI22:
+ 561 .cfi_def_cfa_offset 16
+ 562 0489 4889E5 movq %rsp, %rbp
+ 563 .cfi_offset 6, -16
+ 564 .LCFI23:
+ 565 .cfi_def_cfa_register 6
+ 566 048c 4883EC30 subq $48, %rsp
+ 567 0490 48897DE8 movq %rdi, -24(%rbp)
+ 568 0494 488975E0 movq %rsi, -32(%rbp)
+ 569 0498 488955D8 movq %rdx, -40(%rbp)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn(in);
+ 570 .loc 1 247 0
+ 571 049c 488B45E0 movq -32(%rbp), %rax
+ 572 04a0 4889C7 movq %rax, %rdi
+ 573 04a3 E858FBFF call CipherVecIn
+ 573 FF
+ 574 04a8 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 574 F0
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CMEMBER(EncryptV1)(self, cv);
+ 575 .loc 1 248 0
+ 576 04ad F30F6F45 movdqu -16(%rbp), %xmm0
+ 576 F0
+ 577 04b2 488B45E8 movq -24(%rbp), %rax
+ 578 04b6 4889C7 movq %rax, %rdi
+ 579 04b9 E87CFFFF call KCipherVecAesNiEncryptV1
+ 579 FF
+ 580 04be F30F7F45 movdqu %xmm0, -16(%rbp)
+ 580 F0
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut(cv, out);
+ 581 .loc 1 249 0
+ 582 04c3 488B45D8 movq -40(%rbp), %rax
+ 583 04c7 F30F6F45 movdqu -16(%rbp), %xmm0
+ 583 F0
+ 584 04cc 4889C7 movq %rax, %rdi
+ 585 04cf E84BFBFF call CipherVecOut
+ 585 FF
+
GAS LISTING /tmp/ccWvEaWW.s page 18
+
+
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 586 .loc 1 250 0
+ 587 04d4 B8000000 movl $0, %eax
+ 587 00
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 588 .loc 1 251 0
+ 589 04d9 C9 leave
+ 590 04da C3 ret
+ 591 .cfi_endproc
+ 592 .LFE612:
+ 593 .size KCipherVecAesNiEncryptV1Int, .-KCipherVecAesNiEncryptV1Int
+ 594 .type KCipherVecAesNiDecryptV1Int, @function
+ 595 KCipherVecAesNiDecryptV1Int:
+ 596 .LFB613:
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(DecryptV1Int)(const CIPHER_IMPL * self,
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * in, void * out)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 597 .loc 1 256 0
+ 598 .cfi_startproc
+ 599 04db 55 pushq %rbp
+ 600 .LCFI24:
+ 601 .cfi_def_cfa_offset 16
+ 602 04dc 4889E5 movq %rsp, %rbp
+ 603 .cfi_offset 6, -16
+ 604 .LCFI25:
+ 605 .cfi_def_cfa_register 6
+ 606 04df 4883EC30 subq $48, %rsp
+ 607 04e3 48897DE8 movq %rdi, -24(%rbp)
+ 608 04e7 488975E0 movq %rsi, -32(%rbp)
+ 609 04eb 488955D8 movq %rdx, -40(%rbp)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn(in);
+ 610 .loc 1 259 0
+ 611 04ef 488B45E0 movq -32(%rbp), %rax
+ 612 04f3 4889C7 movq %rax, %rdi
+ 613 04f6 E805FBFF call CipherVecIn
+ 613 FF
+ 614 04fb F30F7F45 movdqu %xmm0, -16(%rbp)
+ 614 F0
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CMEMBER(DecryptV1)(self, cv);
+ 615 .loc 1 260 0
+ 616 0500 F30F6F45 movdqu -16(%rbp), %xmm0
+ 616 F0
+ 617 0505 488B45E8 movq -24(%rbp), %rax
+ 618 0509 4889C7 movq %rax, %rdi
+ 619 050c E850FFFF call KCipherVecAesNiDecryptV1
+ 619 FF
+ 620 0511 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 620 F0
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut(cv, out);
+ 621 .loc 1 261 0
+ 622 0516 488B45D8 movq -40(%rbp), %rax
+ 623 051a F30F6F45 movdqu -16(%rbp), %xmm0
+ 623 F0
+
GAS LISTING /tmp/ccWvEaWW.s page 19
+
+
+ 624 051f 4889C7 movq %rax, %rdi
+ 625 0522 E8F8FAFF call CipherVecOut
+ 625 FF
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 626 .loc 1 262 0
+ 627 0527 B8000000 movl $0, %eax
+ 627 00
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 628 .loc 1 263 0
+ 629 052c C9 leave
+ 630 052d C3 ret
+ 631 .cfi_endproc
+ 632 .LFE613:
+ 633 .size KCipherVecAesNiDecryptV1Int, .-KCipherVecAesNiDecryptV1Int
+ 634 .type KCipherVecAesNiEncrypt, @function
+ 635 KCipherVecAesNiEncrypt:
+ 636 .LFB614:
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Encrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 637 .loc 1 267 0
+ 638 .cfi_startproc
+ 639 052e 55 pushq %rbp
+ 640 .LCFI26:
+ 641 .cfi_def_cfa_offset 16
+ 642 052f 4889E5 movq %rsp, %rbp
+ 643 .cfi_offset 6, -16
+ 644 .LCFI27:
+ 645 .cfi_def_cfa_register 6
+ 646 0532 4883EC30 subq $48, %rsp
+ 647 0536 48897DE8 movq %rdi, -24(%rbp)
+ 648 053a 488975E0 movq %rsi, -32(%rbp)
+ 649 053e 488955D8 movq %rdx, -40(%rbp)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc;
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 650 .loc 1 270 0
+ 651 0542 488B45E8 movq -24(%rbp), %rax
+ 652 0546 488B4048 movq 72(%rax), %rax
+ 653 054a 8B00 movl (%rax), %eax
+ 654 054c 83F801 cmpl $1, %eax
+ 655 054f 7422 je .L50
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 656 .loc 1 273 0
+ 657 0551 B9110100 movl $273, %ecx
+ 657 00
+ 658 0556 488D1500 leaq __func__.7428(%rip), %rdx
+ 658 000000
+ 659 055d 488D3500 leaq .LC0(%rip), %rsi
+ 659 000000
+ 660 0564 BF080E09 movl $-2029449720, %edi
+ 660 87
+ 661 0569 E8000000 call SetRCFileFuncLine at PLT
+ 661 00
+
GAS LISTING /tmp/ccWvEaWW.s page 20
+
+
+ 662 056e 8945FC movl %eax, -4(%rbp)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 663 .loc 1 274 0
+ 664 0571 EB1A jmp .L51
+ 665 .L50:
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(EncryptV1Int)(self, in, out);
+ 666 .loc 1 277 0
+ 667 0573 488B55D8 movq -40(%rbp), %rdx
+ 668 0577 488B4DE0 movq -32(%rbp), %rcx
+ 669 057b 488B45E8 movq -24(%rbp), %rax
+ 670 057f 4889CE movq %rcx, %rsi
+ 671 0582 4889C7 movq %rax, %rdi
+ 672 0585 E8FEFEFF call KCipherVecAesNiEncryptV1Int
+ 672 FF
+ 673 058a 8945FC movl %eax, -4(%rbp)
+ 674 .L51:
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 675 .loc 1 281 0
+ 676 058d 8B45FC movl -4(%rbp), %eax
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 677 .loc 1 282 0
+ 678 0590 C9 leave
+ 679 0591 C3 ret
+ 680 .cfi_endproc
+ 681 .LFE614:
+ 682 .size KCipherVecAesNiEncrypt, .-KCipherVecAesNiEncrypt
+ 683 .type KCipherVecAesNiDecrypt, @function
+ 684 KCipherVecAesNiDecrypt:
+ 685 .LFB615:
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Decrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 686 .loc 1 287 0
+ 687 .cfi_startproc
+ 688 0592 55 pushq %rbp
+ 689 .LCFI28:
+ 690 .cfi_def_cfa_offset 16
+ 691 0593 4889E5 movq %rsp, %rbp
+ 692 .cfi_offset 6, -16
+ 693 .LCFI29:
+ 694 .cfi_def_cfa_register 6
+ 695 0596 4883EC30 subq $48, %rsp
+ 696 059a 48897DE8 movq %rdi, -24(%rbp)
+ 697 059e 488975E0 movq %rsi, -32(%rbp)
+ 698 05a2 488955D8 movq %rdx, -40(%rbp)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 699 .loc 1 288 0
+ 700 05a6 C745FC00 movl $0, -4(%rbp)
+ 700 000000
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccWvEaWW.s page 21
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 701 .loc 1 290 0
+ 702 05ad 488B45E8 movq -24(%rbp), %rax
+ 703 05b1 488B4048 movq 72(%rax), %rax
+ 704 05b5 8B00 movl (%rax), %eax
+ 705 05b7 83F801 cmpl $1, %eax
+ 706 05ba 7422 je .L55
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 707 .loc 1 293 0
+ 708 05bc B9250100 movl $293, %ecx
+ 708 00
+ 709 05c1 488D1500 leaq __func__.7444(%rip), %rdx
+ 709 000000
+ 710 05c8 488D3500 leaq .LC0(%rip), %rsi
+ 710 000000
+ 711 05cf BF080E09 movl $-2029449720, %edi
+ 711 87
+ 712 05d4 E8000000 call SetRCFileFuncLine at PLT
+ 712 00
+ 713 05d9 8945FC movl %eax, -4(%rbp)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 714 .loc 1 294 0
+ 715 05dc EB1A jmp .L56
+ 716 .L55:
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(DecryptV1Int)(self, in, out);
+ 717 .loc 1 297 0
+ 718 05de 488B55D8 movq -40(%rbp), %rdx
+ 719 05e2 488B4DE0 movq -32(%rbp), %rcx
+ 720 05e6 488B45E8 movq -24(%rbp), %rax
+ 721 05ea 4889CE movq %rcx, %rsi
+ 722 05ed 4889C7 movq %rax, %rdi
+ 723 05f0 E8E6FEFF call KCipherVecAesNiDecryptV1Int
+ 723 FF
+ 724 05f5 8945FC movl %eax, -4(%rbp)
+ 725 .L56:
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 726 .loc 1 301 0
+ 727 05f8 8B45FC movl -4(%rbp), %eax
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 728 .loc 1 302 0
+ 729 05fb C9 leave
+ 730 05fc C3 ret
+ 731 .cfi_endproc
+ 732 .LFE615:
+ 733 .size KCipherVecAesNiDecrypt, .-KCipherVecAesNiDecrypt
+ 734 .type KCipherVecAesNiEncryptEcb, @function
+ 735 KCipherVecAesNiEncryptEcb:
+ 736 .LFB616:
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccWvEaWW.s page 22
+
+
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ====================
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * longer runs of multiple blocks.
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * The algorithms are well defined and standard in most cases
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * These aremore or elss equivalent to class functions as they do not depend upon
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * the operation of the cipher and the algorithms are independent of anything about
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * the cipher other than its block size.
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT: plain text block
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT: cipher text block
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * EK: encryption key
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * DK: decryption key (might be sthe same as EK)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * ENC: encrypt cipher function on a block using a key
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * DEC: decrypt cipher function on a block using a key
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * IV: initialization vector - used as feedback for chaining
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * N: number used once (nonce)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * FB: feedback is the next IV in a chained/feedback mode
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * NOTE:
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * time is written. The code does not look for overlaps at this point.
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Electronic Code Book - simple cipher with no chaining feedback just iterate
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * simple encrypt/decrypt with the plain, text, cipher text and key/
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = ENC (PT,EK)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = DEC (CT,DK)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * size. Changing MAX_BLOCK_SIZE in cipher.c can up that limit without
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * causing any other compatibility issues.
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 737 .loc 1 349 0
+ 738 .cfi_startproc
+ 739 05fd 55 pushq %rbp
+ 740 .LCFI30:
+ 741 .cfi_def_cfa_offset 16
+ 742 05fe 4889E5 movq %rsp, %rbp
+ 743 .cfi_offset 6, -16
+ 744 .LCFI31:
+ 745 .cfi_def_cfa_register 6
+ 746 0601 4883EC30 subq $48, %rsp
+ 747 0605 48897DE8 movq %rdi, -24(%rbp)
+ 748 0609 488975E0 movq %rsi, -32(%rbp)
+
GAS LISTING /tmp/ccWvEaWW.s page 23
+
+
+ 749 060d 488955D8 movq %rdx, -40(%rbp)
+ 750 0611 894DD4 movl %ecx, -44(%rbp)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 751 .loc 1 353 0
+ 752 0614 488B45E0 movq -32(%rbp), %rax
+ 753 0618 488945F0 movq %rax, -16(%rbp)
+ 754 061c 488B45D8 movq -40(%rbp), %rax
+ 755 0620 488945F8 movq %rax, -8(%rbp)
+ 756 0624 EB31 jmp .L59
+ 757 .L60:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptV1Int)(self, pin, pout);
+ 758 .loc 1 357 0
+ 759 0626 488B55F8 movq -8(%rbp), %rdx
+ 760 062a 488B4DF0 movq -16(%rbp), %rcx
+ 761 062e 488B45E8 movq -24(%rbp), %rax
+ 762 0632 4889CE movq %rcx, %rsi
+ 763 0635 4889C7 movq %rax, %rdi
+ 764 0638 E84BFEFF call KCipherVecAesNiEncryptV1Int
+ 764 FF
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 765 .loc 1 355 0
+ 766 063d 488B45E8 movq -24(%rbp), %rax
+ 767 0641 8B4004 movl 4(%rax), %eax
+ 768 0644 89C0 mov %eax, %eax
+ 769 0646 480145F0 addq %rax, -16(%rbp)
+ 770 064a 488B45E8 movq -24(%rbp), %rax
+ 771 064e 8B4004 movl 4(%rax), %eax
+ 772 0651 89C0 mov %eax, %eax
+ 773 0653 480145F8 addq %rax, -8(%rbp)
+ 774 .L59:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 775 .loc 1 354 0
+ 776 0657 837DD400 cmpl $0, -44(%rbp)
+ 777 065b 0F95C0 setne %al
+ 778 065e 836DD401 subl $1, -44(%rbp)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 779 .loc 1 353 0
+ 780 0662 84C0 testb %al, %al
+ 781 0664 75C0 jne .L60
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 782 .loc 1 359 0
+ 783 0666 B8000000 movl $0, %eax
+ 783 00
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 784 .loc 1 360 0
+ 785 066b C9 leave
+ 786 066c C3 ret
+ 787 .cfi_endproc
+ 788 .LFE616:
+ 789 .size KCipherVecAesNiEncryptEcb, .-KCipherVecAesNiEncryptEcb
+
GAS LISTING /tmp/ccWvEaWW.s page 24
+
+
+ 790 .type KCipherVecAesNiDecryptEcb, @function
+ 791 KCipherVecAesNiDecryptEcb:
+ 792 .LFB617:
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 793 .loc 1 365 0
+ 794 .cfi_startproc
+ 795 066d 55 pushq %rbp
+ 796 .LCFI32:
+ 797 .cfi_def_cfa_offset 16
+ 798 066e 4889E5 movq %rsp, %rbp
+ 799 .cfi_offset 6, -16
+ 800 .LCFI33:
+ 801 .cfi_def_cfa_register 6
+ 802 0671 4883EC30 subq $48, %rsp
+ 803 0675 48897DE8 movq %rdi, -24(%rbp)
+ 804 0679 488975E0 movq %rsi, -32(%rbp)
+ 805 067d 488955D8 movq %rdx, -40(%rbp)
+ 806 0681 894DD4 movl %ecx, -44(%rbp)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 807 .loc 1 369 0
+ 808 0684 488B45E0 movq -32(%rbp), %rax
+ 809 0688 488945F0 movq %rax, -16(%rbp)
+ 810 068c 488B45D8 movq -40(%rbp), %rax
+ 811 0690 488945F8 movq %rax, -8(%rbp)
+ 812 0694 EB31 jmp .L63
+ 813 .L64:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptV1Int)(self, pin, pout);
+ 814 .loc 1 373 0
+ 815 0696 488B55F8 movq -8(%rbp), %rdx
+ 816 069a 488B4DF0 movq -16(%rbp), %rcx
+ 817 069e 488B45E8 movq -24(%rbp), %rax
+ 818 06a2 4889CE movq %rcx, %rsi
+ 819 06a5 4889C7 movq %rax, %rdi
+ 820 06a8 E82EFEFF call KCipherVecAesNiDecryptV1Int
+ 820 FF
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 821 .loc 1 371 0
+ 822 06ad 488B45E8 movq -24(%rbp), %rax
+ 823 06b1 8B4004 movl 4(%rax), %eax
+ 824 06b4 89C0 mov %eax, %eax
+ 825 06b6 480145F0 addq %rax, -16(%rbp)
+ 826 06ba 488B45E8 movq -24(%rbp), %rax
+ 827 06be 8B4004 movl 4(%rax), %eax
+ 828 06c1 89C0 mov %eax, %eax
+ 829 06c3 480145F8 addq %rax, -8(%rbp)
+ 830 .L63:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+
GAS LISTING /tmp/ccWvEaWW.s page 25
+
+
+ 831 .loc 1 370 0
+ 832 06c7 837DD400 cmpl $0, -44(%rbp)
+ 833 06cb 0F95C0 setne %al
+ 834 06ce 836DD401 subl $1, -44(%rbp)
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 835 .loc 1 369 0
+ 836 06d2 84C0 testb %al, %al
+ 837 06d4 75C0 jne .L64
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 838 .loc 1 376 0
+ 839 06d6 B8000000 movl $0, %eax
+ 839 00
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 840 .loc 1 377 0
+ 841 06db C9 leave
+ 842 06dc C3 ret
+ 843 .cfi_endproc
+ 844 .LFE617:
+ 845 .size KCipherVecAesNiDecryptEcb, .-KCipherVecAesNiDecryptEcb
+ 846 .type KCipherVecAesNiEncryptCbc, @function
+ 847 KCipherVecAesNiEncryptCbc:
+ 848 .LFB618:
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Cipher-Block Chaining
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = (FB = ENC (PT^IV, EK))
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = DEC ((FB = CT), DK)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 849 .loc 1 387 0
+ 850 .cfi_startproc
+ 851 06dd 55 pushq %rbp
+ 852 .LCFI34:
+ 853 .cfi_def_cfa_offset 16
+ 854 06de 4889E5 movq %rsp, %rbp
+ 855 .cfi_offset 6, -16
+ 856 .LCFI35:
+ 857 .cfi_def_cfa_register 6
+ 858 06e1 4883EC50 subq $80, %rsp
+ 859 06e5 48897DC8 movq %rdi, -56(%rbp)
+ 860 06e9 488975C0 movq %rsi, -64(%rbp)
+ 861 06ed 488955B8 movq %rdx, -72(%rbp)
+ 862 06f1 894DB4 movl %ecx, -76(%rbp)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CipherVecIn (self->dad.encrypt_ivec);
+
GAS LISTING /tmp/ccWvEaWW.s page 26
+
+
+ 863 .loc 1 396 0
+ 864 06f4 488B45C8 movq -56(%rbp), %rax
+ 865 06f8 488B4028 movq 40(%rax), %rax
+ 866 06fc 4889C7 movq %rax, %rdi
+ 867 06ff E8FCF8FF call CipherVecIn
+ 867 FF
+ 868 0704 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 868 E0
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 869 .loc 1 399 0
+ 870 0709 488B45C0 movq -64(%rbp), %rax
+ 871 070d 488945F0 movq %rax, -16(%rbp)
+ 872 0711 488B45B8 movq -72(%rbp), %rax
+ 873 0715 488945F8 movq %rax, -8(%rbp)
+ 874 0719 EB65 jmp .L67
+ 875 .L68:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 876 .loc 1 403 0
+ 877 071b 488B45F0 movq -16(%rbp), %rax
+ 878 071f 4889C7 movq %rax, %rdi
+ 879 0722 E8D9F8FF call CipherVecIn
+ 879 FF
+ 880 0727 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 880 D0
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv ^= ivec;
+ 881 .loc 1 404 0
+ 882 072c F30F6F45 movdqu -32(%rbp), %xmm0
+ 882 E0
+ 883 0731 F30F6F4D movdqu -48(%rbp), %xmm1
+ 883 D0
+ 884 0736 660FEFC1 pxor %xmm1, %xmm0
+ 885 073a F30F7F45 movdqu %xmm0, -48(%rbp)
+ 885 D0
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CMEMBER(EncryptV1)(self, cv);
+ 886 .loc 1 405 0
+ 887 073f F30F6F45 movdqu -48(%rbp), %xmm0
+ 887 D0
+ 888 0744 488B45C8 movq -56(%rbp), %rax
+ 889 0748 4889C7 movq %rax, %rdi
+ 890 074b E8EAFCFF call KCipherVecAesNiEncryptV1
+ 890 FF
+ 891 0750 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 891 E0
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (ivec, pout);
+ 892 .loc 1 406 0
+ 893 0755 488B45F8 movq -8(%rbp), %rax
+ 894 0759 F30F6F45 movdqu -32(%rbp), %xmm0
+ 894 E0
+ 895 075e 4889C7 movq %rax, %rdi
+ 896 0761 E8B9F8FF call CipherVecOut
+ 896 FF
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccWvEaWW.s page 27
+
+
+ 897 .loc 1 401 0
+ 898 0766 488B45C8 movq -56(%rbp), %rax
+ 899 076a 8B4004 movl 4(%rax), %eax
+ 900 076d 89C0 mov %eax, %eax
+ 901 076f 480145F0 addq %rax, -16(%rbp)
+ 902 0773 488B45C8 movq -56(%rbp), %rax
+ 903 0777 8B4004 movl 4(%rax), %eax
+ 904 077a 89C0 mov %eax, %eax
+ 905 077c 480145F8 addq %rax, -8(%rbp)
+ 906 .L67:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 907 .loc 1 400 0
+ 908 0780 837DB400 cmpl $0, -76(%rbp)
+ 909 0784 0F95C0 setne %al
+ 910 0787 836DB401 subl $1, -76(%rbp)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 911 .loc 1 399 0
+ 912 078b 84C0 testb %al, %al
+ 913 078d 758C jne .L68
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (ivec, self->dad.encrypt_ivec);
+ 914 .loc 1 412 0
+ 915 078f 488B45C8 movq -56(%rbp), %rax
+ 916 0793 488B4028 movq 40(%rax), %rax
+ 917 0797 F30F6F45 movdqu -32(%rbp), %xmm0
+ 917 E0
+ 918 079c 4889C7 movq %rax, %rdi
+ 919 079f E87BF8FF call CipherVecOut
+ 919 FF
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 920 .loc 1 415 0
+ 921 07a4 B8000000 movl $0, %eax
+ 921 00
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 922 .loc 1 416 0
+ 923 07a9 C9 leave
+ 924 07aa C3 ret
+ 925 .cfi_endproc
+ 926 .LFE618:
+ 927 .size KCipherVecAesNiEncryptCbc, .-KCipherVecAesNiEncryptCbc
+ 928 .type KCipherVecAesNiDecryptCbc, @function
+ 929 KCipherVecAesNiDecryptCbc:
+ 930 .LFB619:
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 931 .loc 1 421 0
+ 932 .cfi_startproc
+ 933 07ab 55 pushq %rbp
+
GAS LISTING /tmp/ccWvEaWW.s page 28
+
+
+ 934 .LCFI36:
+ 935 .cfi_def_cfa_offset 16
+ 936 07ac 4889E5 movq %rsp, %rbp
+ 937 .cfi_offset 6, -16
+ 938 .LCFI37:
+ 939 .cfi_def_cfa_register 6
+ 940 07af 4883EC60 subq $96, %rsp
+ 941 07b3 48897DB8 movq %rdi, -72(%rbp)
+ 942 07b7 488975B0 movq %rsi, -80(%rbp)
+ 943 07bb 488955A8 movq %rdx, -88(%rbp)
+ 944 07bf 894DA4 movl %ecx, -92(%rbp)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CipherVecIn (self->dad.decrypt_ivec);
+ 945 .loc 1 427 0
+ 946 07c2 488B45B8 movq -72(%rbp), %rax
+ 947 07c6 488B4030 movq 48(%rax), %rax
+ 948 07ca 4889C7 movq %rax, %rdi
+ 949 07cd E82EF8FF call CipherVecIn
+ 949 FF
+ 950 07d2 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 950 D0
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 951 .loc 1 429 0
+ 952 07d7 488B45B0 movq -80(%rbp), %rax
+ 953 07db 488945E0 movq %rax, -32(%rbp)
+ 954 07df 488B45A8 movq -88(%rbp), %rax
+ 955 07e3 488945E8 movq %rax, -24(%rbp)
+ 956 07e7 EB6F jmp .L71
+ 957 .L72:
+ 958 .LBB2:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec temp;
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 959 .loc 1 435 0
+ 960 07e9 488B45E0 movq -32(%rbp), %rax
+ 961 07ed 4889C7 movq %rax, %rdi
+ 962 07f0 E80BF8FF call CipherVecIn
+ 962 FF
+ 963 07f5 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 963 C0
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = cv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(DecryptV1)(self, temp);
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(DecryptV1)(self, cv);
+ 964 .loc 1 440 0
+ 965 07fa F30F6F45 movdqu -64(%rbp), %xmm0
+ 965 C0
+ 966 07ff 488B45B8 movq -72(%rbp), %rax
+
GAS LISTING /tmp/ccWvEaWW.s page 29
+
+
+ 967 0803 4889C7 movq %rax, %rdi
+ 968 0806 E856FCFF call KCipherVecAesNiDecryptV1
+ 968 FF
+ 969 080b F30F7F45 movdqu %xmm0, -16(%rbp)
+ 969 F0
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp ^= ivec;
+ 970 .loc 1 442 0
+ 971 0810 F30F6F45 movdqu -48(%rbp), %xmm0
+ 971 D0
+ 972 0815 F30F6F4D movdqu -16(%rbp), %xmm1
+ 972 F0
+ 973 081a 660FEFC1 pxor %xmm1, %xmm0
+ 974 081e F30F7F45 movdqu %xmm0, -16(%rbp)
+ 974 F0
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (temp, pout);
+ 975 .loc 1 443 0
+ 976 0823 488B45E8 movq -24(%rbp), %rax
+ 977 0827 F30F6F45 movdqu -16(%rbp), %xmm0
+ 977 F0
+ 978 082c 4889C7 movq %rax, %rdi
+ 979 082f E8EBF7FF call CipherVecOut
+ 979 FF
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = cv;
+ 980 .loc 1 444 0
+ 981 0834 F30F6F45 movdqu -64(%rbp), %xmm0
+ 981 C0
+ 982 0839 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 982 D0
+ 983 .LBE2:
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 984 .loc 1 431 0
+ 985 083e 488B45B8 movq -72(%rbp), %rax
+ 986 0842 8B4004 movl 4(%rax), %eax
+ 987 0845 89C0 mov %eax, %eax
+ 988 0847 480145E0 addq %rax, -32(%rbp)
+ 989 084b 488B45B8 movq -72(%rbp), %rax
+ 990 084f 8B4004 movl 4(%rax), %eax
+ 991 0852 89C0 mov %eax, %eax
+ 992 0854 480145E8 addq %rax, -24(%rbp)
+ 993 .L71:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 994 .loc 1 430 0
+ 995 0858 837DA400 cmpl $0, -92(%rbp)
+ 996 085c 0F95C0 setne %al
+ 997 085f 836DA401 subl $1, -92(%rbp)
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 998 .loc 1 429 0
+ 999 0863 84C0 testb %al, %al
+ 1000 0865 7582 jne .L72
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.decrypt_ivec = ivec;
+ 1001 .loc 1 447 0
+ 1002 0867 488B45B8 movq -72(%rbp), %rax
+ 1003 086b 488B4030 movq 48(%rax), %rax
+ 1004 086f F30F6F45 movdqu -48(%rbp), %xmm0
+
GAS LISTING /tmp/ccWvEaWW.s page 30
+
+
+ 1004 D0
+ 1005 0874 F30F7F00 movdqu %xmm0, (%rax)
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1006 .loc 1 448 0
+ 1007 0878 B8000000 movl $0, %eax
+ 1007 00
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1008 .loc 1 449 0
+ 1009 087d C9 leave
+ 1010 087e C3 ret
+ 1011 .cfi_endproc
+ 1012 .LFE619:
+ 1013 .size KCipherVecAesNiDecryptCbc, .-KCipherVecAesNiDecryptCbc
+ 1014 .type KCipherVecAesNiEncryptPcbc, @function
+ 1015 KCipherVecAesNiEncryptPcbc:
+ 1016 .LFB620:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Propagating cipher-block chaining
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1017 .loc 1 459 0
+ 1018 .cfi_startproc
+ 1019 087f 55 pushq %rbp
+ 1020 .LCFI38:
+ 1021 .cfi_def_cfa_offset 16
+ 1022 0880 4889E5 movq %rsp, %rbp
+ 1023 .cfi_offset 6, -16
+ 1024 .LCFI39:
+ 1025 .cfi_def_cfa_register 6
+ 1026 0883 4883EC60 subq $96, %rsp
+ 1027 0887 48897DB8 movq %rdi, -72(%rbp)
+ 1028 088b 488975B0 movq %rsi, -80(%rbp)
+ 1029 088f 488955A8 movq %rdx, -88(%rbp)
+ 1030 0893 894DA4 movl %ecx, -92(%rbp)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1031 .loc 1 466 0
+ 1032 0896 488B45B8 movq -72(%rbp), %rax
+ 1033 089a 488B4028 movq 40(%rax), %rax
+ 1034 089e 660F6F00 movdqa (%rax), %xmm0
+ 1035 08a2 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1035 D0
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1036 .loc 1 468 0
+ 1037 08a7 488B45B0 movq -80(%rbp), %rax
+
GAS LISTING /tmp/ccWvEaWW.s page 31
+
+
+ 1038 08ab 488945E0 movq %rax, -32(%rbp)
+ 1039 08af 488B45A8 movq -88(%rbp), %rax
+ 1040 08b3 488945E8 movq %rax, -24(%rbp)
+ 1041 08b7 EB78 jmp .L75
+ 1042 .L76:
+ 1043 .LBB3:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec temp;
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1044 .loc 1 474 0
+ 1045 08b9 488B45E0 movq -32(%rbp), %rax
+ 1046 08bd 4889C7 movq %rax, %rdi
+ 1047 08c0 E83BF7FF call CipherVecIn
+ 1047 FF
+ 1048 08c5 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 1048 C0
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = cv ^ ivec;
+ 1049 .loc 1 475 0
+ 1050 08ca F30F6F45 movdqu -48(%rbp), %xmm0
+ 1050 D0
+ 1051 08cf F30F6F4D movdqu -64(%rbp), %xmm1
+ 1051 C0
+ 1052 08d4 660FEFC1 pxor %xmm1, %xmm0
+ 1053 08d8 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 1053 F0
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(EncryptV1)(self, temp);
+ 1054 .loc 1 476 0
+ 1055 08dd F30F6F45 movdqu -16(%rbp), %xmm0
+ 1055 F0
+ 1056 08e2 488B45B8 movq -72(%rbp), %rax
+ 1057 08e6 4889C7 movq %rax, %rdi
+ 1058 08e9 E84CFBFF call KCipherVecAesNiEncryptV1
+ 1058 FF
+ 1059 08ee F30F7F45 movdqu %xmm0, -16(%rbp)
+ 1059 F0
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = cv ^ temp;
+ 1060 .loc 1 477 0
+ 1061 08f3 F30F6F45 movdqu -16(%rbp), %xmm0
+ 1061 F0
+ 1062 08f8 F30F6F4D movdqu -64(%rbp), %xmm1
+ 1062 C0
+ 1063 08fd 660FEFC1 pxor %xmm1, %xmm0
+ 1064 0901 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1064 D0
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (temp, pout);
+ 1065 .loc 1 478 0
+ 1066 0906 488B45E8 movq -24(%rbp), %rax
+ 1067 090a F30F6F45 movdqu -16(%rbp), %xmm0
+ 1067 F0
+ 1068 090f 4889C7 movq %rax, %rdi
+ 1069 0912 E808F7FF call CipherVecOut
+ 1069 FF
+ 1070 .LBE3:
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccWvEaWW.s page 32
+
+
+ 1071 .loc 1 470 0
+ 1072 0917 488B45B8 movq -72(%rbp), %rax
+ 1073 091b 8B4004 movl 4(%rax), %eax
+ 1074 091e 89C0 mov %eax, %eax
+ 1075 0920 480145E0 addq %rax, -32(%rbp)
+ 1076 0924 488B45B8 movq -72(%rbp), %rax
+ 1077 0928 8B4004 movl 4(%rax), %eax
+ 1078 092b 89C0 mov %eax, %eax
+ 1079 092d 480145E8 addq %rax, -24(%rbp)
+ 1080 .L75:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1081 .loc 1 469 0
+ 1082 0931 837DA400 cmpl $0, -92(%rbp)
+ 1083 0935 0F95C0 setne %al
+ 1084 0938 836DA401 subl $1, -92(%rbp)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1085 .loc 1 468 0
+ 1086 093c 84C0 testb %al, %al
+ 1087 093e 0F8575FF jne .L76
+ 1087 FFFF
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1088 .loc 1 481 0
+ 1089 0944 488B45B8 movq -72(%rbp), %rax
+ 1090 0948 488B4028 movq 40(%rax), %rax
+ 1091 094c F30F6F45 movdqu -48(%rbp), %xmm0
+ 1091 D0
+ 1092 0951 F30F7F00 movdqu %xmm0, (%rax)
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1093 .loc 1 483 0
+ 1094 0955 B8000000 movl $0, %eax
+ 1094 00
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1095 .loc 1 487 0
+ 1096 095a C9 leave
+ 1097 095b C3 ret
+ 1098 .cfi_endproc
+ 1099 .LFE620:
+ 1100 .size KCipherVecAesNiEncryptPcbc, .-KCipherVecAesNiEncryptPcbc
+ 1101 .type KCipherVecAesNiDecryptPcbc, @function
+ 1102 KCipherVecAesNiDecryptPcbc:
+ 1103 .LFB621:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1104 .loc 1 492 0
+ 1105 .cfi_startproc
+ 1106 095c 55 pushq %rbp
+ 1107 .LCFI40:
+ 1108 .cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccWvEaWW.s page 33
+
+
+ 1109 095d 4889E5 movq %rsp, %rbp
+ 1110 .cfi_offset 6, -16
+ 1111 .LCFI41:
+ 1112 .cfi_def_cfa_register 6
+ 1113 0960 4883EC60 subq $96, %rsp
+ 1114 0964 48897DB8 movq %rdi, -72(%rbp)
+ 1115 0968 488975B0 movq %rsi, -80(%rbp)
+ 1116 096c 488955A8 movq %rdx, -88(%rbp)
+ 1117 0970 894DA4 movl %ecx, -92(%rbp)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1118 .loc 1 499 0
+ 1119 0973 488B45B8 movq -72(%rbp), %rax
+ 1120 0977 488B4028 movq 40(%rax), %rax
+ 1121 097b 660F6F00 movdqa (%rax), %xmm0
+ 1122 097f F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1122 D0
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1123 .loc 1 501 0
+ 1124 0984 488B45B0 movq -80(%rbp), %rax
+ 1125 0988 488945E0 movq %rax, -32(%rbp)
+ 1126 098c 488B45A8 movq -88(%rbp), %rax
+ 1127 0990 488945E8 movq %rax, -24(%rbp)
+ 1128 0994 EB65 jmp .L79
+ 1129 .L80:
+ 1130 .LBB4:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec temp;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1131 .loc 1 507 0
+ 1132 0996 488B45E0 movq -32(%rbp), %rax
+ 1133 099a 4889C7 movq %rax, %rdi
+ 1134 099d E85EF6FF call CipherVecIn
+ 1134 FF
+ 1135 09a2 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 1135 C0
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(DecryptV1)(self, cv);
+ 1136 .loc 1 508 0
+ 1137 09a7 F30F6F45 movdqu -64(%rbp), %xmm0
+ 1137 C0
+ 1138 09ac 488B45B8 movq -72(%rbp), %rax
+ 1139 09b0 4889C7 movq %rax, %rdi
+ 1140 09b3 E8A9FAFF call KCipherVecAesNiDecryptV1
+ 1140 FF
+ 1141 09b8 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 1141 F0
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec ^= temp;
+ 1142 .loc 1 509 0
+
GAS LISTING /tmp/ccWvEaWW.s page 34
+
+
+ 1143 09bd F30F6F45 movdqu -16(%rbp), %xmm0
+ 1143 F0
+ 1144 09c2 F30F6F4D movdqu -48(%rbp), %xmm1
+ 1144 D0
+ 1145 09c7 660FEFC1 pxor %xmm1, %xmm0
+ 1146 09cb F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1146 D0
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (temp, pout);
+ 1147 .loc 1 510 0
+ 1148 09d0 488B45E8 movq -24(%rbp), %rax
+ 1149 09d4 F30F6F45 movdqu -16(%rbp), %xmm0
+ 1149 F0
+ 1150 09d9 4889C7 movq %rax, %rdi
+ 1151 09dc E83EF6FF call CipherVecOut
+ 1151 FF
+ 1152 .LBE4:
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1153 .loc 1 503 0
+ 1154 09e1 488B45B8 movq -72(%rbp), %rax
+ 1155 09e5 8B4004 movl 4(%rax), %eax
+ 1156 09e8 89C0 mov %eax, %eax
+ 1157 09ea 480145E0 addq %rax, -32(%rbp)
+ 1158 09ee 488B45B8 movq -72(%rbp), %rax
+ 1159 09f2 8B4004 movl 4(%rax), %eax
+ 1160 09f5 89C0 mov %eax, %eax
+ 1161 09f7 480145E8 addq %rax, -24(%rbp)
+ 1162 .L79:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1163 .loc 1 502 0
+ 1164 09fb 837DA400 cmpl $0, -92(%rbp)
+ 1165 09ff 0F95C0 setne %al
+ 1166 0a02 836DA401 subl $1, -92(%rbp)
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1167 .loc 1 501 0
+ 1168 0a06 84C0 testb %al, %al
+ 1169 0a08 758C jne .L80
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1170 .loc 1 513 0
+ 1171 0a0a 488B45B8 movq -72(%rbp), %rax
+ 1172 0a0e 488B4028 movq 40(%rax), %rax
+ 1173 0a12 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1173 D0
+ 1174 0a17 F30F7F00 movdqu %xmm0, (%rax)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1175 .loc 1 515 0
+ 1176 0a1b B8000000 movl $0, %eax
+ 1176 00
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1177 .loc 1 519 0
+ 1178 0a20 C9 leave
+ 1179 0a21 C3 ret
+
GAS LISTING /tmp/ccWvEaWW.s page 35
+
+
+ 1180 .cfi_endproc
+ 1181 .LFE621:
+ 1182 .size KCipherVecAesNiDecryptPcbc, .-KCipherVecAesNiDecryptPcbc
+ 1183 .type KCipherVecAesNiEncryptCfb, @function
+ 1184 KCipherVecAesNiEncryptCfb:
+ 1185 .LFB622:
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Cipher Feedback
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = (FB = PT) ^ ENC (IV, EK))
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = (FB = CT) ^ DEC (IV, DK)
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1186 .loc 1 529 0
+ 1187 .cfi_startproc
+ 1188 0a22 55 pushq %rbp
+ 1189 .LCFI42:
+ 1190 .cfi_def_cfa_offset 16
+ 1191 0a23 4889E5 movq %rsp, %rbp
+ 1192 .cfi_offset 6, -16
+ 1193 .LCFI43:
+ 1194 .cfi_def_cfa_register 6
+ 1195 0a26 4883EC50 subq $80, %rsp
+ 1196 0a2a 48897DC8 movq %rdi, -56(%rbp)
+ 1197 0a2e 488975C0 movq %rsi, -64(%rbp)
+ 1198 0a32 488955B8 movq %rdx, -72(%rbp)
+ 1199 0a36 894DB4 movl %ecx, -76(%rbp)
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1200 .loc 1 536 0
+ 1201 0a39 488B45C8 movq -56(%rbp), %rax
+ 1202 0a3d 488B4028 movq 40(%rax), %rax
+ 1203 0a41 660F6F00 movdqa (%rax), %xmm0
+ 1204 0a45 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1204 E0
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1205 .loc 1 538 0
+ 1206 0a4a 488B45C0 movq -64(%rbp), %rax
+ 1207 0a4e 488945F0 movq %rax, -16(%rbp)
+ 1208 0a52 488B45B8 movq -72(%rbp), %rax
+ 1209 0a56 488945F8 movq %rax, -8(%rbp)
+ 1210 0a5a EB65 jmp .L83
+ 1211 .L84:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CMEMBER(EncryptV1)(self, ivec);
+ 1212 .loc 1 542 0
+
GAS LISTING /tmp/ccWvEaWW.s page 36
+
+
+ 1213 0a5c F30F6F45 movdqu -32(%rbp), %xmm0
+ 1213 E0
+ 1214 0a61 488B45C8 movq -56(%rbp), %rax
+ 1215 0a65 4889C7 movq %rax, %rdi
+ 1216 0a68 E8CDF9FF call KCipherVecAesNiEncryptV1
+ 1216 FF
+ 1217 0a6d F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1217 E0
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1218 .loc 1 543 0
+ 1219 0a72 488B45F0 movq -16(%rbp), %rax
+ 1220 0a76 4889C7 movq %rax, %rdi
+ 1221 0a79 E882F5FF call CipherVecIn
+ 1221 FF
+ 1222 0a7e F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1222 D0
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec ^= cv;
+ 1223 .loc 1 544 0
+ 1224 0a83 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1224 D0
+ 1225 0a88 F30F6F4D movdqu -32(%rbp), %xmm1
+ 1225 E0
+ 1226 0a8d 660FEFC1 pxor %xmm1, %xmm0
+ 1227 0a91 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1227 E0
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (ivec, pout);
+ 1228 .loc 1 545 0
+ 1229 0a96 488B45F8 movq -8(%rbp), %rax
+ 1230 0a9a F30F6F45 movdqu -32(%rbp), %xmm0
+ 1230 E0
+ 1231 0a9f 4889C7 movq %rax, %rdi
+ 1232 0aa2 E878F5FF call CipherVecOut
+ 1232 FF
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1233 .loc 1 540 0
+ 1234 0aa7 488B45C8 movq -56(%rbp), %rax
+ 1235 0aab 8B4004 movl 4(%rax), %eax
+ 1236 0aae 89C0 mov %eax, %eax
+ 1237 0ab0 480145F0 addq %rax, -16(%rbp)
+ 1238 0ab4 488B45C8 movq -56(%rbp), %rax
+ 1239 0ab8 8B4004 movl 4(%rax), %eax
+ 1240 0abb 89C0 mov %eax, %eax
+ 1241 0abd 480145F8 addq %rax, -8(%rbp)
+ 1242 .L83:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1243 .loc 1 539 0
+ 1244 0ac1 837DB400 cmpl $0, -76(%rbp)
+ 1245 0ac5 0F95C0 setne %al
+ 1246 0ac8 836DB401 subl $1, -76(%rbp)
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1247 .loc 1 538 0
+ 1248 0acc 84C0 testb %al, %al
+ 1249 0ace 758C jne .L84
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1250 .loc 1 548 0
+
GAS LISTING /tmp/ccWvEaWW.s page 37
+
+
+ 1251 0ad0 488B45C8 movq -56(%rbp), %rax
+ 1252 0ad4 488B4028 movq 40(%rax), %rax
+ 1253 0ad8 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1253 E0
+ 1254 0add F30F7F00 movdqu %xmm0, (%rax)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1255 .loc 1 550 0
+ 1256 0ae1 B8000000 movl $0, %eax
+ 1256 00
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1257 .loc 1 554 0
+ 1258 0ae6 C9 leave
+ 1259 0ae7 C3 ret
+ 1260 .cfi_endproc
+ 1261 .LFE622:
+ 1262 .size KCipherVecAesNiEncryptCfb, .-KCipherVecAesNiEncryptCfb
+ 1263 .type KCipherVecAesNiDecryptCfb, @function
+ 1264 KCipherVecAesNiDecryptCfb:
+ 1265 .LFB623:
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1266 .loc 1 559 0
+ 1267 .cfi_startproc
+ 1268 0ae8 55 pushq %rbp
+ 1269 .LCFI44:
+ 1270 .cfi_def_cfa_offset 16
+ 1271 0ae9 4889E5 movq %rsp, %rbp
+ 1272 .cfi_offset 6, -16
+ 1273 .LCFI45:
+ 1274 .cfi_def_cfa_register 6
+ 1275 0aec 4883EC50 subq $80, %rsp
+ 1276 0af0 48897DC8 movq %rdi, -56(%rbp)
+ 1277 0af4 488975C0 movq %rsi, -64(%rbp)
+ 1278 0af8 488955B8 movq %rdx, -72(%rbp)
+ 1279 0afc 894DB4 movl %ecx, -76(%rbp)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1280 .loc 1 566 0
+ 1281 0aff 488B45C8 movq -56(%rbp), %rax
+ 1282 0b03 488B4028 movq 40(%rax), %rax
+ 1283 0b07 660F6F00 movdqa (%rax), %xmm0
+ 1284 0b0b F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1284 E0
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+
GAS LISTING /tmp/ccWvEaWW.s page 38
+
+
+ 1285 .loc 1 568 0
+ 1286 0b10 488B45C0 movq -64(%rbp), %rax
+ 1287 0b14 488945F0 movq %rax, -16(%rbp)
+ 1288 0b18 488B45B8 movq -72(%rbp), %rax
+ 1289 0b1c 488945F8 movq %rax, -8(%rbp)
+ 1290 0b20 EB65 jmp .L87
+ 1291 .L88:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CMEMBER(EncryptV1)(self, ivec);
+ 1292 .loc 1 572 0
+ 1293 0b22 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1293 E0
+ 1294 0b27 488B45C8 movq -56(%rbp), %rax
+ 1295 0b2b 4889C7 movq %rax, %rdi
+ 1296 0b2e E807F9FF call KCipherVecAesNiEncryptV1
+ 1296 FF
+ 1297 0b33 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1297 D0
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CipherVecIn (pin);
+ 1298 .loc 1 573 0
+ 1299 0b38 488B45F0 movq -16(%rbp), %rax
+ 1300 0b3c 4889C7 movq %rax, %rdi
+ 1301 0b3f E8BCF4FF call CipherVecIn
+ 1301 FF
+ 1302 0b44 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1302 E0
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv ^= ivec;
+ 1303 .loc 1 574 0
+ 1304 0b49 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1304 E0
+ 1305 0b4e F30F6F4D movdqu -48(%rbp), %xmm1
+ 1305 D0
+ 1306 0b53 660FEFC1 pxor %xmm1, %xmm0
+ 1307 0b57 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1307 D0
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (cv, pout);
+ 1308 .loc 1 575 0
+ 1309 0b5c 488B45F8 movq -8(%rbp), %rax
+ 1310 0b60 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1310 D0
+ 1311 0b65 4889C7 movq %rax, %rdi
+ 1312 0b68 E8B2F4FF call CipherVecOut
+ 1312 FF
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1313 .loc 1 570 0
+ 1314 0b6d 488B45C8 movq -56(%rbp), %rax
+ 1315 0b71 8B4004 movl 4(%rax), %eax
+ 1316 0b74 89C0 mov %eax, %eax
+ 1317 0b76 480145F0 addq %rax, -16(%rbp)
+ 1318 0b7a 488B45C8 movq -56(%rbp), %rax
+ 1319 0b7e 8B4004 movl 4(%rax), %eax
+ 1320 0b81 89C0 mov %eax, %eax
+ 1321 0b83 480145F8 addq %rax, -8(%rbp)
+ 1322 .L87:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+
GAS LISTING /tmp/ccWvEaWW.s page 39
+
+
+ 1323 .loc 1 569 0
+ 1324 0b87 837DB400 cmpl $0, -76(%rbp)
+ 1325 0b8b 0F95C0 setne %al
+ 1326 0b8e 836DB401 subl $1, -76(%rbp)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1327 .loc 1 568 0
+ 1328 0b92 84C0 testb %al, %al
+ 1329 0b94 758C jne .L88
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1330 .loc 1 578 0
+ 1331 0b96 488B45C8 movq -56(%rbp), %rax
+ 1332 0b9a 488B4028 movq 40(%rax), %rax
+ 1333 0b9e F30F6F45 movdqu -32(%rbp), %xmm0
+ 1333 E0
+ 1334 0ba3 F30F7F00 movdqu %xmm0, (%rax)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1335 .loc 1 580 0
+ 1336 0ba7 B8000000 movl $0, %eax
+ 1336 00
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1337 .loc 1 584 0
+ 1338 0bac C9 leave
+ 1339 0bad C3 ret
+ 1340 .cfi_endproc
+ 1341 .LFE623:
+ 1342 .size KCipherVecAesNiDecryptCfb, .-KCipherVecAesNiDecryptCfb
+ 1343 .type KCipherVecAesNiEncryptOfb, @function
+ 1344 KCipherVecAesNiEncryptOfb:
+ 1345 .LFB624:
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Output Feedback
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = PT ^ (FB = ENC (IV, EK))
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = CT ^ (FB = DEC (IV, DK))
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1346 .loc 1 594 0
+ 1347 .cfi_startproc
+ 1348 0bae 55 pushq %rbp
+ 1349 .LCFI46:
+ 1350 .cfi_def_cfa_offset 16
+ 1351 0baf 4889E5 movq %rsp, %rbp
+ 1352 .cfi_offset 6, -16
+ 1353 .LCFI47:
+ 1354 .cfi_def_cfa_register 6
+ 1355 0bb2 4883EC50 subq $80, %rsp
+ 1356 0bb6 48897DC8 movq %rdi, -56(%rbp)
+ 1357 0bba 488975C0 movq %rsi, -64(%rbp)
+
GAS LISTING /tmp/ccWvEaWW.s page 40
+
+
+ 1358 0bbe 488955B8 movq %rdx, -72(%rbp)
+ 1359 0bc2 894DB4 movl %ecx, -76(%rbp)
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1360 .loc 1 601 0
+ 1361 0bc5 488B45C8 movq -56(%rbp), %rax
+ 1362 0bc9 488B4028 movq 40(%rax), %rax
+ 1363 0bcd 660F6F00 movdqa (%rax), %xmm0
+ 1364 0bd1 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1364 E0
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1365 .loc 1 603 0
+ 1366 0bd6 488B45C0 movq -64(%rbp), %rax
+ 1367 0bda 488945F0 movq %rax, -16(%rbp)
+ 1368 0bde 488B45B8 movq -72(%rbp), %rax
+ 1369 0be2 488945F8 movq %rax, -8(%rbp)
+ 1370 0be6 EB65 jmp .L91
+ 1371 .L92:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CMEMBER(EncryptV1)(self, ivec);
+ 1372 .loc 1 607 0
+ 1373 0be8 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1373 E0
+ 1374 0bed 488B45C8 movq -56(%rbp), %rax
+ 1375 0bf1 4889C7 movq %rax, %rdi
+ 1376 0bf4 E841F8FF call KCipherVecAesNiEncryptV1
+ 1376 FF
+ 1377 0bf9 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1377 E0
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1378 .loc 1 608 0
+ 1379 0bfe 488B45F0 movq -16(%rbp), %rax
+ 1380 0c02 4889C7 movq %rax, %rdi
+ 1381 0c05 E8F6F3FF call CipherVecIn
+ 1381 FF
+ 1382 0c0a F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1382 D0
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv ^= ivec;
+ 1383 .loc 1 609 0
+ 1384 0c0f F30F6F45 movdqu -32(%rbp), %xmm0
+ 1384 E0
+ 1385 0c14 F30F6F4D movdqu -48(%rbp), %xmm1
+ 1385 D0
+ 1386 0c19 660FEFC1 pxor %xmm1, %xmm0
+ 1387 0c1d F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1387 D0
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (cv, pout);
+ 1388 .loc 1 610 0
+ 1389 0c22 488B45F8 movq -8(%rbp), %rax
+
GAS LISTING /tmp/ccWvEaWW.s page 41
+
+
+ 1390 0c26 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1390 D0
+ 1391 0c2b 4889C7 movq %rax, %rdi
+ 1392 0c2e E8ECF3FF call CipherVecOut
+ 1392 FF
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1393 .loc 1 605 0
+ 1394 0c33 488B45C8 movq -56(%rbp), %rax
+ 1395 0c37 8B4004 movl 4(%rax), %eax
+ 1396 0c3a 89C0 mov %eax, %eax
+ 1397 0c3c 480145F0 addq %rax, -16(%rbp)
+ 1398 0c40 488B45C8 movq -56(%rbp), %rax
+ 1399 0c44 8B4004 movl 4(%rax), %eax
+ 1400 0c47 89C0 mov %eax, %eax
+ 1401 0c49 480145F8 addq %rax, -8(%rbp)
+ 1402 .L91:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1403 .loc 1 604 0
+ 1404 0c4d 837DB400 cmpl $0, -76(%rbp)
+ 1405 0c51 0F95C0 setne %al
+ 1406 0c54 836DB401 subl $1, -76(%rbp)
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1407 .loc 1 603 0
+ 1408 0c58 84C0 testb %al, %al
+ 1409 0c5a 758C jne .L92
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1410 .loc 1 613 0
+ 1411 0c5c 488B45C8 movq -56(%rbp), %rax
+ 1412 0c60 488B4028 movq 40(%rax), %rax
+ 1413 0c64 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1413 E0
+ 1414 0c69 F30F7F00 movdqu %xmm0, (%rax)
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1415 .loc 1 615 0
+ 1416 0c6d B8000000 movl $0, %eax
+ 1416 00
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1417 .loc 1 619 0
+ 1418 0c72 C9 leave
+ 1419 0c73 C3 ret
+ 1420 .cfi_endproc
+ 1421 .LFE624:
+ 1422 .size KCipherVecAesNiEncryptOfb, .-KCipherVecAesNiEncryptOfb
+ 1423 .type KCipherVecAesNiDecryptOfb, @function
+ 1424 KCipherVecAesNiDecryptOfb:
+ 1425 .LFB625:
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccWvEaWW.s page 42
+
+
+ 1426 .loc 1 624 0
+ 1427 .cfi_startproc
+ 1428 0c74 55 pushq %rbp
+ 1429 .LCFI48:
+ 1430 .cfi_def_cfa_offset 16
+ 1431 0c75 4889E5 movq %rsp, %rbp
+ 1432 .cfi_offset 6, -16
+ 1433 .LCFI49:
+ 1434 .cfi_def_cfa_register 6
+ 1435 0c78 53 pushq %rbx
+ 1436 0c79 4883EC28 subq $40, %rsp
+ 1437 0c7d 48897DE8 movq %rdi, -24(%rbp)
+ 1438 0c81 488975E0 movq %rsi, -32(%rbp)
+ 1439 0c85 488955D8 movq %rdx, -40(%rbp)
+ 1440 0c89 894DD4 movl %ecx, -44(%rbp)
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return CMEMBER(EncryptOfb)(self, in, out, block_count);
+ 1441 .loc 1 625 0
+ 1442 0c8c 8B4DD4 movl -44(%rbp), %ecx
+ 1443 0c8f 488B55D8 movq -40(%rbp), %rdx
+ 1444 0c93 488B5DE0 movq -32(%rbp), %rbx
+ 1445 .cfi_offset 3, -24
+ 1446 0c97 488B45E8 movq -24(%rbp), %rax
+ 1447 0c9b 4889DE movq %rbx, %rsi
+ 1448 0c9e 4889C7 movq %rax, %rdi
+ 1449 0ca1 E808FFFF call KCipherVecAesNiEncryptOfb
+ 1449 FF
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1450 .loc 1 626 0
+ 1451 0ca6 4883C428 addq $40, %rsp
+ 1452 0caa 5B popq %rbx
+ 1453 0cab C9 leave
+ 1454 0cac C3 ret
+ 1455 .cfi_endproc
+ 1456 .LFE625:
+ 1457 .size KCipherVecAesNiDecryptOfb, .-KCipherVecAesNiDecryptOfb
+ 1458 .type KCipherVecAesNiEncryptCtr, @function
+ 1459 KCipherVecAesNiEncryptCtr:
+ 1460 .LFB626:
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* Counter
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * IV is a nonce and not re-used as FB
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = PT ^ ENC (N, EK)
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = CT ^ ENC (N, DK)
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Note decrypt is encrypt.
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * nonce is a function that given an iv generates the next iv
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1461 .loc 1 638 0
+ 1462 .cfi_startproc
+ 1463 0cad 55 pushq %rbp
+ 1464 .LCFI50:
+ 1465 .cfi_def_cfa_offset 16
+ 1466 0cae 4889E5 movq %rsp, %rbp
+ 1467 .cfi_offset 6, -16
+
GAS LISTING /tmp/ccWvEaWW.s page 43
+
+
+ 1468 .LCFI51:
+ 1469 .cfi_def_cfa_register 6
+ 1470 0cb1 4883EC20 subq $32, %rsp
+ 1471 0cb5 48897DF8 movq %rdi, -8(%rbp)
+ 1472 0cb9 488975F0 movq %rsi, -16(%rbp)
+ 1473 0cbd 488955E8 movq %rdx, -24(%rbp)
+ 1474 0cc1 894DE4 movl %ecx, -28(%rbp)
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1475 .loc 1 639 0
+ 1476 0cc4 B97F0200 movl $639, %ecx
+ 1476 00
+ 1477 0cc9 488D1500 leaq __func__.7678(%rip), %rdx
+ 1477 000000
+ 1478 0cd0 488D3500 leaq .LC0(%rip), %rsi
+ 1478 000000
+ 1479 0cd7 BF030509 movl $-2029452029, %edi
+ 1479 87
+ 1480 0cdc E8000000 call SetRCFileFuncLine at PLT
+ 1480 00
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1481 .loc 1 640 0
+ 1482 0ce1 C9 leave
+ 1483 0ce2 C3 ret
+ 1484 .cfi_endproc
+ 1485 .LFE626:
+ 1486 .size KCipherVecAesNiEncryptCtr, .-KCipherVecAesNiEncryptCtr
+ 1487 .type KCipherVecAesNiDecryptCtr, @function
+ 1488 KCipherVecAesNiDecryptCtr:
+ 1489 .LFB627:
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1490 .loc 1 645 0
+ 1491 .cfi_startproc
+ 1492 0ce3 55 pushq %rbp
+ 1493 .LCFI52:
+ 1494 .cfi_def_cfa_offset 16
+ 1495 0ce4 4889E5 movq %rsp, %rbp
+ 1496 .cfi_offset 6, -16
+ 1497 .LCFI53:
+ 1498 .cfi_def_cfa_register 6
+ 1499 0ce7 4883EC20 subq $32, %rsp
+ 1500 0ceb 48897DF8 movq %rdi, -8(%rbp)
+ 1501 0cef 488975F0 movq %rsi, -16(%rbp)
+ 1502 0cf3 488955E8 movq %rdx, -24(%rbp)
+ 1503 0cf7 894DE4 movl %ecx, -28(%rbp)
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1504 .loc 1 646 0
+ 1505 0cfa B9860200 movl $646, %ecx
+ 1505 00
+ 1506 0cff 488D1500 leaq __func__.7688(%rip), %rdx
+ 1506 000000
+ 1507 0d06 488D3500 leaq .LC0(%rip), %rsi
+ 1507 000000
+ 1508 0d0d BF030509 movl $-2029452029, %edi
+
GAS LISTING /tmp/ccWvEaWW.s page 44
+
+
+ 1508 87
+ 1509 0d12 E8000000 call SetRCFileFuncLine at PLT
+ 1509 00
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1510 .loc 1 647 0
+ 1511 0d17 C9 leave
+ 1512 0d18 C3 ret
+ 1513 .cfi_endproc
+ 1514 .LFE627:
+ 1515 .size KCipherVecAesNiDecryptCtr, .-KCipherVecAesNiDecryptCtr
+ 1516 .section .data.rel.local,"aw", at progbits
+ 1517 .align 32
+ 1518 .type KCipherVecAesNi_vt_v1, @object
+ 1519 .size KCipherVecAesNi_vt_v1, 176
+ 1520 KCipherVecAesNi_vt_v1:
+ 1521 0000 01000000 .long 1
+ 1522 0004 00000000 .long 0
+ 1523 0008 00000000 .quad KCipherVecAesNiDestroy
+ 1523 00000000
+ 1524 0010 00000000 .quad KCipherVecAesNiSetEncryptKey
+ 1524 00000000
+ 1525 0018 00000000 .quad KCipherVecAesNiSetDecryptKey
+ 1525 00000000
+ 1526 0020 00000000 .quad KCipherVecAesNiSetEncryptIvec
+ 1526 00000000
+ 1527 0028 00000000 .quad KCipherVecAesNiSetDecryptIvec
+ 1527 00000000
+ 1528 0030 00000000 .quad KCipherVecAesNiSetEncryptCounterFunc
+ 1528 00000000
+ 1529 0038 00000000 .quad KCipherVecAesNiSetDecryptCounterFunc
+ 1529 00000000
+ 1530 0040 00000000 .quad KCipherVecAesNiEncrypt
+ 1530 00000000
+ 1531 0048 00000000 .quad KCipherVecAesNiDecrypt
+ 1531 00000000
+ 1532 0050 00000000 .quad KCipherVecAesNiEncryptEcb
+ 1532 00000000
+ 1533 0058 00000000 .quad KCipherVecAesNiDecryptEcb
+ 1533 00000000
+ 1534 0060 00000000 .quad KCipherVecAesNiEncryptCbc
+ 1534 00000000
+ 1535 0068 00000000 .quad KCipherVecAesNiDecryptCbc
+ 1535 00000000
+ 1536 0070 00000000 .quad KCipherVecAesNiEncryptPcbc
+ 1536 00000000
+ 1537 0078 00000000 .quad KCipherVecAesNiDecryptPcbc
+ 1537 00000000
+ 1538 0080 00000000 .quad KCipherVecAesNiEncryptCfb
+ 1538 00000000
+ 1539 0088 00000000 .quad KCipherVecAesNiDecryptCfb
+ 1539 00000000
+ 1540 0090 00000000 .quad KCipherVecAesNiEncryptOfb
+ 1540 00000000
+ 1541 0098 00000000 .quad KCipherVecAesNiDecryptOfb
+ 1541 00000000
+ 1542 00a0 00000000 .quad KCipherVecAesNiEncryptCtr
+ 1542 00000000
+
GAS LISTING /tmp/ccWvEaWW.s page 45
+
+
+ 1543 00a8 00000000 .quad KCipherVecAesNiDecryptCtr
+ 1543 00000000
+ 1544 .text
+ 1545 .type KCipherVecAesNiAllocAes, @function
+ 1546 KCipherVecAesNiAllocAes:
+ 1547 .LFB628:
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct KCipher_vt_v1 CMEMBER(_vt_v1) =
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** { 1, 0 },
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(Destroy),
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetEncryptKey),
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetDecryptKey),
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetEncryptIvec),
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetDecryptIvec),
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetEncryptCounterFunc),
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetDecryptCounterFunc),
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(Encrypt),
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(Decrypt),
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptEcb),
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptEcb),
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptCbc),
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptCbc),
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptPcbc),
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptPcbc),
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptCfb),
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptCfb),
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptOfb),
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptOfb),
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptCtr),
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptCtr)
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocAes)(CIPHER_IMPL ** pobj,
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1548 .loc 1 681 0
+ 1549 .cfi_startproc
+ 1550 0d19 55 pushq %rbp
+ 1551 .LCFI54:
+ 1552 .cfi_def_cfa_offset 16
+ 1553 0d1a 4889E5 movq %rsp, %rbp
+ 1554 .cfi_offset 6, -16
+ 1555 .LCFI55:
+ 1556 .cfi_def_cfa_register 6
+ 1557 0d1d 4883EC20 subq $32, %rsp
+ 1558 0d21 48897DE8 movq %rdi, -24(%rbp)
+ 1559 0d25 488975E0 movq %rsi, -32(%rbp)
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherAes * obj;
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** obj = calloc (1, sizeof (*obj));
+ 1560 .loc 1 684 0
+ 1561 0d29 BE700200 movl $624, %esi
+
GAS LISTING /tmp/ccWvEaWW.s page 46
+
+
+ 1561 00
+ 1562 0d2e BF010000 movl $1, %edi
+ 1562 00
+ 1563 0d33 E8000000 call calloc at PLT
+ 1563 00
+ 1564 0d38 488945F8 movq %rax, -8(%rbp)
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *pobj = (CIPHER_IMPL*)obj;
+ 1565 .loc 1 685 0
+ 1566 0d3c 488B55F8 movq -8(%rbp), %rdx
+ 1567 0d40 488B45E8 movq -24(%rbp), %rax
+ 1568 0d44 488910 movq %rdx, (%rax)
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1569 .loc 1 687 0
+ 1570 0d47 48837DF8 cmpq $0, -8(%rbp)
+ 1570 00
+ 1571 0d4c 751F jne .L101
+ 1572 0d4e B9AF0200 movl $687, %ecx
+ 1572 00
+ 1573 0d53 488D1500 leaq __func__.7698(%rip), %rdx
+ 1573 000000
+ 1574 0d5a 488D3500 leaq .LC0(%rip), %rsi
+ 1574 000000
+ 1575 0d61 BF539000 movl $-2030006189, %edi
+ 1575 87
+ 1576 0d66 E8000000 call SetRCFileFuncLine at PLT
+ 1576 00
+ 1577 0d6b EB05 jmp .L102
+ 1578 .L101:
+ 1579 0d6d B8000000 movl $0, %eax
+ 1579 00
+ 1580 .L102:
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1581 .loc 1 688 0
+ 1582 0d72 C9 leave
+ 1583 0d73 C3 ret
+ 1584 .cfi_endproc
+ 1585 .LFE628:
+ 1586 .size KCipherVecAesNiAllocAes, .-KCipherVecAesNiAllocAes
+ 1587 .type KCipherVecAesNiInitAes, @function
+ 1588 KCipherVecAesNiInitAes:
+ 1589 .LFB629:
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitAes) (CIPHER_IMPL * self,
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1590 .loc 1 694 0
+ 1591 .cfi_startproc
+ 1592 0d74 55 pushq %rbp
+ 1593 .LCFI56:
+ 1594 .cfi_def_cfa_offset 16
+ 1595 0d75 4889E5 movq %rsp, %rbp
+ 1596 .cfi_offset 6, -16
+ 1597 .LCFI57:
+ 1598 .cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccWvEaWW.s page 47
+
+
+ 1599 0d78 4883EC20 subq $32, %rsp
+ 1600 0d7c 48897DE8 movq %rdi, -24(%rbp)
+ 1601 0d80 488975E0 movq %rsi, -32(%rbp)
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipher * dad = &self->dad;
+ 1602 .loc 1 695 0
+ 1603 0d84 488B45E8 movq -24(%rbp), %rax
+ 1604 0d88 488945F0 movq %rax, -16(%rbp)
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherAes * aes = (struct CipherAes*)self;
+ 1605 .loc 1 696 0
+ 1606 0d8c 488B45E8 movq -24(%rbp), %rax
+ 1607 0d90 488945F8 movq %rax, -8(%rbp)
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipherInit (dad, sizeof (CipherVec),
+ 1608 .loc 1 698 0
+ 1609 0d94 488B45F0 movq -16(%rbp), %rax
+ 1610 0d98 488B1500 movq KCipherVecAesNiClassName at GOTPCREL(%rip), %rdx
+ 1610 000000
+ 1611 0d9f 4889D1 movq %rdx, %rcx
+ 1612 0da2 488D1500 leaq KCipherVecAesNi_vt_v1(%rip), %rdx
+ 1612 000000
+ 1613 0da9 BE100000 movl $16, %esi
+ 1613 00
+ 1614 0dae 4889C7 movq %rax, %rdi
+ 1615 0db1 E8000000 call KCipherInit at PLT
+ 1615 00
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(ClassName));
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_key = &aes->e_key;
+ 1616 .loc 1 702 0
+ 1617 0db6 488B45F8 movq -8(%rbp), %rax
+ 1618 0dba 488D5050 leaq 80(%rax), %rdx
+ 1619 0dbe 488B45F0 movq -16(%rbp), %rax
+ 1620 0dc2 48895018 movq %rdx, 24(%rax)
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_key = &aes->d_key;
+ 1621 .loc 1 703 0
+ 1622 0dc6 488B45F8 movq -8(%rbp), %rax
+ 1623 0dca 488D9050 leaq 336(%rax), %rdx
+ 1623 010000
+ 1624 0dd1 488B45F0 movq -16(%rbp), %rax
+ 1625 0dd5 48895020 movq %rdx, 32(%rax)
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_ivec = &aes->e_ivec;
+ 1626 .loc 1 704 0
+ 1627 0dd9 488B45F8 movq -8(%rbp), %rax
+ 1628 0ddd 488D9050 leaq 592(%rax), %rdx
+ 1628 020000
+ 1629 0de4 488B45F0 movq -16(%rbp), %rax
+ 1630 0de8 48895028 movq %rdx, 40(%rax)
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_ivec = &aes->d_ivec;
+ 1631 .loc 1 705 0
+ 1632 0dec 488B45F8 movq -8(%rbp), %rax
+ 1633 0df0 488D9060 leaq 608(%rax), %rdx
+ 1633 020000
+ 1634 0df7 488B45F0 movq -16(%rbp), %rax
+ 1635 0dfb 48895030 movq %rdx, 48(%rax)
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher = &block_cipher->vec;
+
GAS LISTING /tmp/ccWvEaWW.s page 48
+
+
+ 1636 .loc 1 707 0
+ 1637 0dff 488B55E0 movq -32(%rbp), %rdx
+ 1638 0e03 488B45E8 movq -24(%rbp), %rax
+ 1639 0e07 48895048 movq %rdx, 72(%rax)
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1640 .loc 1 709 0
+ 1641 0e0b B8000000 movl $0, %eax
+ 1641 00
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1642 .loc 1 710 0
+ 1643 0e10 C9 leave
+ 1644 0e11 C3 ret
+ 1645 .cfi_endproc
+ 1646 .LFE629:
+ 1647 .size KCipherVecAesNiInitAes, .-KCipherVecAesNiInitAes
+ 1648 .type KCipherVecAesNiAllocNull, @function
+ 1649 KCipherVecAesNiAllocNull:
+ 1650 .LFB630:
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocNull)(CIPHER_IMPL ** pobj,
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1651 .loc 1 716 0
+ 1652 .cfi_startproc
+ 1653 0e12 55 pushq %rbp
+ 1654 .LCFI58:
+ 1655 .cfi_def_cfa_offset 16
+ 1656 0e13 4889E5 movq %rsp, %rbp
+ 1657 .cfi_offset 6, -16
+ 1658 .LCFI59:
+ 1659 .cfi_def_cfa_register 6
+ 1660 0e16 4883EC20 subq $32, %rsp
+ 1661 0e1a 48897DE8 movq %rdi, -24(%rbp)
+ 1662 0e1e 488975E0 movq %rsi, -32(%rbp)
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherNull * obj;
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** obj = calloc (1, sizeof (*obj));
+ 1663 .loc 1 719 0
+ 1664 0e22 BE700000 movl $112, %esi
+ 1664 00
+ 1665 0e27 BF010000 movl $1, %edi
+ 1665 00
+ 1666 0e2c E8000000 call calloc at PLT
+ 1666 00
+ 1667 0e31 488945F8 movq %rax, -8(%rbp)
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *pobj = (CIPHER_IMPL*)obj;
+ 1668 .loc 1 720 0
+ 1669 0e35 488B55F8 movq -8(%rbp), %rdx
+ 1670 0e39 488B45E8 movq -24(%rbp), %rax
+ 1671 0e3d 488910 movq %rdx, (%rax)
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1672 .loc 1 722 0
+ 1673 0e40 48837DF8 cmpq $0, -8(%rbp)
+
GAS LISTING /tmp/ccWvEaWW.s page 49
+
+
+ 1673 00
+ 1674 0e45 751F jne .L107
+ 1675 0e47 B9D20200 movl $722, %ecx
+ 1675 00
+ 1676 0e4c 488D1500 leaq __func__.7725(%rip), %rdx
+ 1676 000000
+ 1677 0e53 488D3500 leaq .LC0(%rip), %rsi
+ 1677 000000
+ 1678 0e5a BF539000 movl $-2030006189, %edi
+ 1678 87
+ 1679 0e5f E8000000 call SetRCFileFuncLine at PLT
+ 1679 00
+ 1680 0e64 EB05 jmp .L108
+ 1681 .L107:
+ 1682 0e66 B8000000 movl $0, %eax
+ 1682 00
+ 1683 .L108:
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1684 .loc 1 723 0
+ 1685 0e6b C9 leave
+ 1686 0e6c C3 ret
+ 1687 .cfi_endproc
+ 1688 .LFE630:
+ 1689 .size KCipherVecAesNiAllocNull, .-KCipherVecAesNiAllocNull
+ 1690 .type KCipherVecAesNiInitNull, @function
+ 1691 KCipherVecAesNiInitNull:
+ 1692 .LFB631:
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitNull) (CIPHER_IMPL * self,
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1693 .loc 1 729 0
+ 1694 .cfi_startproc
+ 1695 0e6d 55 pushq %rbp
+ 1696 .LCFI60:
+ 1697 .cfi_def_cfa_offset 16
+ 1698 0e6e 4889E5 movq %rsp, %rbp
+ 1699 .cfi_offset 6, -16
+ 1700 .LCFI61:
+ 1701 .cfi_def_cfa_register 6
+ 1702 0e71 4883EC20 subq $32, %rsp
+ 1703 0e75 48897DE8 movq %rdi, -24(%rbp)
+ 1704 0e79 488975E0 movq %rsi, -32(%rbp)
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipher * dad = &self->dad;
+ 1705 .loc 1 730 0
+ 1706 0e7d 488B45E8 movq -24(%rbp), %rax
+ 1707 0e81 488945F0 movq %rax, -16(%rbp)
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherNull * null = (CipherNull*)self;
+ 1708 .loc 1 731 0
+ 1709 0e85 488B45E8 movq -24(%rbp), %rax
+ 1710 0e89 488945F8 movq %rax, -8(%rbp)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipherInit (dad, sizeof (CipherVec),
+ 1711 .loc 1 733 0
+ 1712 0e8d 488B45F0 movq -16(%rbp), %rax
+
GAS LISTING /tmp/ccWvEaWW.s page 50
+
+
+ 1713 0e91 488B1500 movq KCipherVecAesNiClassName at GOTPCREL(%rip), %rdx
+ 1713 000000
+ 1714 0e98 4889D1 movq %rdx, %rcx
+ 1715 0e9b 488D1500 leaq KCipherVecAesNi_vt_v1(%rip), %rdx
+ 1715 000000
+ 1716 0ea2 BE100000 movl $16, %esi
+ 1716 00
+ 1717 0ea7 4889C7 movq %rax, %rdi
+ 1718 0eaa E8000000 call KCipherInit at PLT
+ 1718 00
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(ClassName));
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_key = &null->e_ivec;
+ 1719 .loc 1 737 0
+ 1720 0eaf 488B45F8 movq -8(%rbp), %rax
+ 1721 0eb3 488D5050 leaq 80(%rax), %rdx
+ 1722 0eb7 488B45F0 movq -16(%rbp), %rax
+ 1723 0ebb 48895018 movq %rdx, 24(%rax)
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_key = &null->d_ivec;
+ 1724 .loc 1 738 0
+ 1725 0ebf 488B45F8 movq -8(%rbp), %rax
+ 1726 0ec3 488D5060 leaq 96(%rax), %rdx
+ 1727 0ec7 488B45F0 movq -16(%rbp), %rax
+ 1728 0ecb 48895020 movq %rdx, 32(%rax)
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_ivec = &null->e_ivec;
+ 1729 .loc 1 739 0
+ 1730 0ecf 488B45F8 movq -8(%rbp), %rax
+ 1731 0ed3 488D5050 leaq 80(%rax), %rdx
+ 1732 0ed7 488B45F0 movq -16(%rbp), %rax
+ 1733 0edb 48895028 movq %rdx, 40(%rax)
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_ivec = &null->d_ivec;
+ 1734 .loc 1 740 0
+ 1735 0edf 488B45F8 movq -8(%rbp), %rax
+ 1736 0ee3 488D5060 leaq 96(%rax), %rdx
+ 1737 0ee7 488B45F0 movq -16(%rbp), %rax
+ 1738 0eeb 48895030 movq %rdx, 48(%rax)
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher = &block_cipher->vec;
+ 1739 .loc 1 742 0
+ 1740 0eef 488B55E0 movq -32(%rbp), %rdx
+ 1741 0ef3 488B45E8 movq -24(%rbp), %rax
+ 1742 0ef7 48895048 movq %rdx, 72(%rax)
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1743 .loc 1 744 0
+ 1744 0efb B8000000 movl $0, %eax
+ 1744 00
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1745 .loc 1 745 0
+ 1746 0f00 C9 leave
+ 1747 0f01 C3 ret
+ 1748 .cfi_endproc
+ 1749 .LFE631:
+ 1750 .size KCipherVecAesNiInitNull, .-KCipherVecAesNiInitNull
+ 1751 .globl KCipherVecAesNiMake
+ 1752 .type KCipherVecAesNiMake, @function
+
GAS LISTING /tmp/ccWvEaWW.s page 51
+
+
+ 1753 KCipherVecAesNiMake:
+ 1754 .LFB632:
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1755 .loc 1 749 0
+ 1756 .cfi_startproc
+ 1757 0f02 55 pushq %rbp
+ 1758 .LCFI62:
+ 1759 .cfi_def_cfa_offset 16
+ 1760 0f03 4889E5 movq %rsp, %rbp
+ 1761 .cfi_offset 6, -16
+ 1762 .LCFI63:
+ 1763 .cfi_def_cfa_register 6
+ 1764 0f06 4883EC30 subq $48, %rsp
+ 1765 0f0a 48897DD8 movq %rdi, -40(%rbp)
+ 1766 0f0e 8975D4 movl %esi, -44(%rbp)
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc;
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KBlockCipher * block_cipher;
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (new_obj == NULL)
+ 1767 .loc 1 753 0
+ 1768 0f11 48837DD8 cmpq $0, -40(%rbp)
+ 1768 00
+ 1769 0f16 7522 jne .L113
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+ 1770 .loc 1 754 0
+ 1771 0f18 B9F20200 movl $754, %ecx
+ 1771 00
+ 1772 0f1d 488D1500 leaq __func__.7753(%rip), %rdx
+ 1772 000000
+ 1773 0f24 488D3500 leaq .LC0(%rip), %rsi
+ 1773 000000
+ 1774 0f2b BF878F00 movl $-2030006393, %edi
+ 1774 87
+ 1775 0f30 E8000000 call SetRCFileFuncLine at PLT
+ 1775 00
+ 1776 0f35 E9280100 jmp .L114
+ 1776 00
+ 1777 .L113:
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *new_obj = NULL;
+ 1778 .loc 1 756 0
+ 1779 0f3a 488B45D8 movq -40(%rbp), %rax
+ 1780 0f3e 48C70000 movq $0, (%rax)
+ 1780 000000
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (type)
+ 1781 .loc 1 758 0
+ 1782 0f45 8B45D4 movl -44(%rbp), %eax
+ 1783 0f48 85C0 testl %eax, %eax
+ 1784 0f4a 7427 je .L116
+ 1785 0f4c 83F801 cmpl $1, %eax
+ 1786 0f4f 7433 je .L117
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+
GAS LISTING /tmp/ccWvEaWW.s page 52
+
+
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+ 1787 .loc 1 761 0
+ 1788 0f51 B9F90200 movl $761, %ecx
+ 1788 00
+ 1789 0f56 488D1500 leaq __func__.7753(%rip), %rdx
+ 1789 000000
+ 1790 0f5d 488D3500 leaq .LC0(%rip), %rsi
+ 1790 000000
+ 1791 0f64 BFCA8F00 movl $-2030006326, %edi
+ 1791 87
+ 1792 0f69 E8000000 call SetRCFileFuncLine at PLT
+ 1792 00
+ 1793 0f6e E9EF0000 jmp .L114
+ 1793 00
+ 1794 .L116:
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_null:
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = NULLBCMEMBER(Make)(&block_cipher);
+ 1795 .loc 1 764 0
+ 1796 0f73 488D45F0 leaq -16(%rbp), %rax
+ 1797 0f77 4889C7 movq %rax, %rdi
+ 1798 0f7a E8000000 call KNullBlockCipherVecAesNiMake at PLT
+ 1798 00
+ 1799 0f7f 8945FC movl %eax, -4(%rbp)
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 1800 .loc 1 765 0
+ 1801 0f82 EB0F jmp .L118
+ 1802 .L117:
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_AES:
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = AESBCMEMBER(Make)(&block_cipher);
+ 1803 .loc 1 768 0
+ 1804 0f84 488D45F0 leaq -16(%rbp), %rax
+ 1805 0f88 4889C7 movq %rax, %rdi
+ 1806 0f8b E8000000 call KAESBlockCipherVecAesNiMake at PLT
+ 1806 00
+ 1807 0f90 8945FC movl %eax, -4(%rbp)
+ 1808 .L118:
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1809 .loc 1 772 0
+ 1810 0f93 837DFC00 cmpl $0, -4(%rbp)
+ 1811 0f97 0F85C200 jne .L119
+ 1811 0000
+ 1812 .LBB5:
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CIPHER_IMPL * obj;
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (type)
+ 1813 .loc 1 776 0
+ 1814 0f9d 8B45D4 movl -44(%rbp), %eax
+ 1815 0fa0 85C0 testl %eax, %eax
+ 1816 0fa2 740A je .L120
+ 1817 0fa4 83F801 cmpl $1, %eax
+ 1818 0fa7 745F je .L121
+
GAS LISTING /tmp/ccWvEaWW.s page 53
+
+
+ 1819 0fa9 E9B10000 jmp .L119
+ 1819 00
+ 1820 .L120:
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_null:
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(AllocNull) (&obj, block_cipher);
+ 1821 .loc 1 779 0
+ 1822 0fae 488B55F0 movq -16(%rbp), %rdx
+ 1823 0fb2 488D45E8 leaq -24(%rbp), %rax
+ 1824 0fb6 4889D6 movq %rdx, %rsi
+ 1825 0fb9 4889C7 movq %rax, %rdi
+ 1826 0fbc E851FEFF call KCipherVecAesNiAllocNull
+ 1826 FF
+ 1827 0fc1 8945FC movl %eax, -4(%rbp)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1828 .loc 1 780 0
+ 1829 0fc4 837DFC00 cmpl $0, -4(%rbp)
+ 1830 0fc8 0F859000 jne .L126
+ 1830 0000
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(InitNull) (obj, block_cipher);
+ 1831 .loc 1 782 0
+ 1832 0fce 488B55F0 movq -16(%rbp), %rdx
+ 1833 0fd2 488B45E8 movq -24(%rbp), %rax
+ 1834 0fd6 4889D6 movq %rdx, %rsi
+ 1835 0fd9 4889C7 movq %rax, %rdi
+ 1836 0fdc E88CFEFF call KCipherVecAesNiInitNull
+ 1836 FF
+ 1837 0fe1 8945FC movl %eax, -4(%rbp)
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1838 .loc 1 783 0
+ 1839 0fe4 837DFC00 cmpl $0, -4(%rbp)
+ 1840 0fe8 7510 jne .L123
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *new_obj = (KCipher*)obj;
+ 1841 .loc 1 784 0
+ 1842 0fea 488B45E8 movq -24(%rbp), %rax
+ 1843 0fee 4889C2 movq %rax, %rdx
+ 1844 0ff1 488B45D8 movq -40(%rbp), %rax
+ 1845 0ff5 488910 movq %rdx, (%rax)
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** else
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (obj);
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 1846 .loc 1 788 0
+ 1847 0ff8 EB65 jmp .L119
+ 1848 .L123:
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (obj);
+ 1849 .loc 1 786 0
+ 1850 0ffa 488B45E8 movq -24(%rbp), %rax
+ 1851 0ffe 4889C7 movq %rax, %rdi
+ 1852 1001 E8000000 call free at PLT
+ 1852 00
+ 1853 .loc 1 788 0
+ 1854 1006 EB57 jmp .L119
+ 1855 .L121:
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_AES:
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(AllocAes) (&obj, block_cipher);
+
GAS LISTING /tmp/ccWvEaWW.s page 54
+
+
+ 1856 .loc 1 790 0
+ 1857 1008 488B55F0 movq -16(%rbp), %rdx
+ 1858 100c 488D45E8 leaq -24(%rbp), %rax
+ 1859 1010 4889D6 movq %rdx, %rsi
+ 1860 1013 4889C7 movq %rax, %rdi
+ 1861 1016 E8FEFCFF call KCipherVecAesNiAllocAes
+ 1861 FF
+ 1862 101b 8945FC movl %eax, -4(%rbp)
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1863 .loc 1 791 0
+ 1864 101e 837DFC00 cmpl $0, -4(%rbp)
+ 1865 1022 753B jne .L119
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(InitAes) (obj, block_cipher);
+ 1866 .loc 1 793 0
+ 1867 1024 488B55F0 movq -16(%rbp), %rdx
+ 1868 1028 488B45E8 movq -24(%rbp), %rax
+ 1869 102c 4889D6 movq %rdx, %rsi
+ 1870 102f 4889C7 movq %rax, %rdi
+ 1871 1032 E83DFDFF call KCipherVecAesNiInitAes
+ 1871 FF
+ 1872 1037 8945FC movl %eax, -4(%rbp)
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1873 .loc 1 794 0
+ 1874 103a 837DFC00 cmpl $0, -4(%rbp)
+ 1875 103e 7510 jne .L124
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *new_obj = (KCipher*)obj;
+ 1876 .loc 1 795 0
+ 1877 1040 488B45E8 movq -24(%rbp), %rax
+ 1878 1044 4889C2 movq %rax, %rdx
+ 1879 1047 488B45D8 movq -40(%rbp), %rax
+ 1880 104b 488910 movq %rdx, (%rax)
+ 1881 104e EB0F jmp .L119
+ 1882 .L124:
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** else
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (obj);
+ 1883 .loc 1 797 0
+ 1884 1050 488B45E8 movq -24(%rbp), %rax
+ 1885 1054 4889C7 movq %rax, %rdi
+ 1886 1057 E8000000 call free at PLT
+ 1886 00
+ 1887 105c EB01 jmp .L119
+ 1888 .L126:
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 1889 .loc 1 788 0
+ 1890 105e 90 nop
+ 1891 .L119:
+ 1892 .LBE5:
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* can't really get here */
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 1893 .loc 1 804 0
+ 1894 105f 8B45FC movl -4(%rbp), %eax
+
GAS LISTING /tmp/ccWvEaWW.s page 55
+
+
+ 1895 .L114:
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1896 .loc 1 805 0
+ 1897 1062 C9 leave
+ 1898 1063 C3 ret
+ 1899 .cfi_endproc
+ 1900 .LFE632:
+ 1901 .size KCipherVecAesNiMake, .-KCipherVecAesNiMake
+ 1902 .section .rodata
+ 1903 006e 0000 .align 16
+ 1904 .type __func__.7753, @object
+ 1905 .size __func__.7753, 20
+ 1906 __func__.7753:
+ 1907 0070 4B436970 .string "KCipherVecAesNiMake"
+ 1907 68657256
+ 1907 65634165
+ 1907 734E694D
+ 1907 616B6500
+ 1908 0084 00000000 .align 16
+ 1908 00000000
+ 1908 00000000
+ 1909 .type __PRETTY_FUNCTION__.7752, @object
+ 1910 .size __PRETTY_FUNCTION__.7752, 20
+ 1911 __PRETTY_FUNCTION__.7752:
+ 1912 0090 4B436970 .string "KCipherVecAesNiMake"
+ 1912 68657256
+ 1912 65634165
+ 1912 734E694D
+ 1912 616B6500
+ 1913 00a4 00000000 .align 16
+ 1913 00000000
+ 1913 00000000
+ 1914 .type __func__.7725, @object
+ 1915 .size __func__.7725, 25
+ 1916 __func__.7725:
+ 1917 00b0 4B436970 .string "KCipherVecAesNiAllocNull"
+ 1917 68657256
+ 1917 65634165
+ 1917 734E6941
+ 1917 6C6C6F63
+ 1918 00c9 00000000 .align 16
+ 1918 000000
+ 1919 .type __PRETTY_FUNCTION__.7724, @object
+ 1920 .size __PRETTY_FUNCTION__.7724, 25
+ 1921 __PRETTY_FUNCTION__.7724:
+ 1922 00d0 4B436970 .string "KCipherVecAesNiAllocNull"
+ 1922 68657256
+ 1922 65634165
+ 1922 734E6941
+ 1922 6C6C6F63
+ 1923 00e9 00000000 .align 16
+ 1923 000000
+ 1924 .type __func__.7698, @object
+ 1925 .size __func__.7698, 24
+ 1926 __func__.7698:
+ 1927 00f0 4B436970 .string "KCipherVecAesNiAllocAes"
+ 1927 68657256
+
GAS LISTING /tmp/ccWvEaWW.s page 56
+
+
+ 1927 65634165
+ 1927 734E6941
+ 1927 6C6C6F63
+ 1928 0108 00000000 .align 16
+ 1928 00000000
+ 1929 .type __PRETTY_FUNCTION__.7697, @object
+ 1930 .size __PRETTY_FUNCTION__.7697, 24
+ 1931 __PRETTY_FUNCTION__.7697:
+ 1932 0110 4B436970 .string "KCipherVecAesNiAllocAes"
+ 1932 68657256
+ 1932 65634165
+ 1932 734E6941
+ 1932 6C6C6F63
+ 1933 0128 00000000 .align 16
+ 1933 00000000
+ 1934 .type __func__.7688, @object
+ 1935 .size __func__.7688, 26
+ 1936 __func__.7688:
+ 1937 0130 4B436970 .string "KCipherVecAesNiDecryptCtr"
+ 1937 68657256
+ 1937 65634165
+ 1937 734E6944
+ 1937 65637279
+ 1938 014a 00000000 .align 16
+ 1938 0000
+ 1939 .type __PRETTY_FUNCTION__.7687, @object
+ 1940 .size __PRETTY_FUNCTION__.7687, 26
+ 1941 __PRETTY_FUNCTION__.7687:
+ 1942 0150 4B436970 .string "KCipherVecAesNiDecryptCtr"
+ 1942 68657256
+ 1942 65634165
+ 1942 734E6944
+ 1942 65637279
+ 1943 016a 00000000 .align 16
+ 1943 0000
+ 1944 .type __func__.7678, @object
+ 1945 .size __func__.7678, 26
+ 1946 __func__.7678:
+ 1947 0170 4B436970 .string "KCipherVecAesNiEncryptCtr"
+ 1947 68657256
+ 1947 65634165
+ 1947 734E6945
+ 1947 6E637279
+ 1948 018a 00000000 .align 16
+ 1948 0000
+ 1949 .type __PRETTY_FUNCTION__.7677, @object
+ 1950 .size __PRETTY_FUNCTION__.7677, 26
+ 1951 __PRETTY_FUNCTION__.7677:
+ 1952 0190 4B436970 .string "KCipherVecAesNiEncryptCtr"
+ 1952 68657256
+ 1952 65634165
+ 1952 734E6945
+ 1952 6E637279
+ 1953 01aa 00000000 .align 16
+ 1953 0000
+ 1954 .type __func__.7444, @object
+ 1955 .size __func__.7444, 23
+
GAS LISTING /tmp/ccWvEaWW.s page 57
+
+
+ 1956 __func__.7444:
+ 1957 01b0 4B436970 .string "KCipherVecAesNiDecrypt"
+ 1957 68657256
+ 1957 65634165
+ 1957 734E6944
+ 1957 65637279
+ 1958 01c7 00000000 .align 16
+ 1958 00000000
+ 1958 00
+ 1959 .type __PRETTY_FUNCTION__.7443, @object
+ 1960 .size __PRETTY_FUNCTION__.7443, 23
+ 1961 __PRETTY_FUNCTION__.7443:
+ 1962 01d0 4B436970 .string "KCipherVecAesNiDecrypt"
+ 1962 68657256
+ 1962 65634165
+ 1962 734E6944
+ 1962 65637279
+ 1963 01e7 00000000 .align 16
+ 1963 00000000
+ 1963 00
+ 1964 .type __func__.7428, @object
+ 1965 .size __func__.7428, 23
+ 1966 __func__.7428:
+ 1967 01f0 4B436970 .string "KCipherVecAesNiEncrypt"
+ 1967 68657256
+ 1967 65634165
+ 1967 734E6945
+ 1967 6E637279
+ 1968 0207 00000000 .align 16
+ 1968 00000000
+ 1968 00
+ 1969 .type __PRETTY_FUNCTION__.7427, @object
+ 1970 .size __PRETTY_FUNCTION__.7427, 23
+ 1971 __PRETTY_FUNCTION__.7427:
+ 1972 0210 4B436970 .string "KCipherVecAesNiEncrypt"
+ 1972 68657256
+ 1972 65634165
+ 1972 734E6945
+ 1972 6E637279
+ 1973 0227 00000000 .align 32
+ 1973 00000000
+ 1973 00000000
+ 1973 00000000
+ 1973 00000000
+ 1974 .type __PRETTY_FUNCTION__.7378, @object
+ 1975 .size __PRETTY_FUNCTION__.7378, 37
+ 1976 __PRETTY_FUNCTION__.7378:
+ 1977 0240 4B436970 .string "KCipherVecAesNiSetDecryptCounterFunc"
+ 1977 68657256
+ 1977 65634165
+ 1977 734E6953
+ 1977 65744465
+ 1978 0265 00000000 .align 32
+ 1978 00000000
+ 1978 00000000
+ 1978 00000000
+ 1978 00000000
+
GAS LISTING /tmp/ccWvEaWW.s page 58
+
+
+ 1979 .type __PRETTY_FUNCTION__.7368, @object
+ 1980 .size __PRETTY_FUNCTION__.7368, 37
+ 1981 __PRETTY_FUNCTION__.7368:
+ 1982 0280 4B436970 .string "KCipherVecAesNiSetEncryptCounterFunc"
+ 1982 68657256
+ 1982 65634165
+ 1982 734E6953
+ 1982 6574456E
+ 1983 02a5 00000000 .align 16
+ 1983 00000000
+ 1983 000000
+ 1984 .type __PRETTY_FUNCTION__.7355, @object
+ 1985 .size __PRETTY_FUNCTION__.7355, 30
+ 1986 __PRETTY_FUNCTION__.7355:
+ 1987 02b0 4B436970 .string "KCipherVecAesNiSetDecryptIvec"
+ 1987 68657256
+ 1987 65634165
+ 1987 734E6953
+ 1987 65744465
+ 1988 02ce 0000 .align 16
+ 1989 .type __PRETTY_FUNCTION__.7342, @object
+ 1990 .size __PRETTY_FUNCTION__.7342, 30
+ 1991 __PRETTY_FUNCTION__.7342:
+ 1992 02d0 4B436970 .string "KCipherVecAesNiSetEncryptIvec"
+ 1992 68657256
+ 1992 65634165
+ 1992 734E6953
+ 1992 6574456E
+ 1993 02ee 0000 .align 16
+ 1994 .type __PRETTY_FUNCTION__.7320, @object
+ 1995 .size __PRETTY_FUNCTION__.7320, 29
+ 1996 __PRETTY_FUNCTION__.7320:
+ 1997 02f0 4B436970 .string "KCipherVecAesNiSetDecryptKey"
+ 1997 68657256
+ 1997 65634165
+ 1997 734E6953
+ 1997 65744465
+ 1998 030d 000000 .align 16
+ 1999 .type __func__.7322, @object
+ 2000 .size __func__.7322, 29
+ 2001 __func__.7322:
+ 2002 0310 4B436970 .string "KCipherVecAesNiSetDecryptKey"
+ 2002 68657256
+ 2002 65634165
+ 2002 734E6953
+ 2002 65744465
+ 2003 032d 000000 .align 16
+ 2004 .type __PRETTY_FUNCTION__.7296, @object
+ 2005 .size __PRETTY_FUNCTION__.7296, 29
+ 2006 __PRETTY_FUNCTION__.7296:
+ 2007 0330 4B436970 .string "KCipherVecAesNiSetEncryptKey"
+ 2007 68657256
+ 2007 65634165
+ 2007 734E6953
+ 2007 6574456E
+ 2008 034d 000000 .align 16
+ 2009 .type __func__.7298, @object
+
GAS LISTING /tmp/ccWvEaWW.s page 59
+
+
+ 2010 .size __func__.7298, 29
+ 2011 __func__.7298:
+ 2012 0350 4B436970 .string "KCipherVecAesNiSetEncryptKey"
+ 2012 68657256
+ 2012 65634165
+ 2012 734E6953
+ 2012 6574456E
+ 2013 .text
+ 2014 .Letext0:
+ 2015 .section .debug_loc,"", at progbits
+ 2016 .Ldebug_loc0:
+ 2017 .LLST0:
+ 2018 0000 00000000 .quad .LFB601-.Ltext0
+ 2018 00000000
+ 2019 0008 01000000 .quad .LCFI0-.Ltext0
+ 2019 00000000
+ 2020 0010 0200 .value 0x2
+ 2021 0012 77 .byte 0x77
+ 2022 0013 08 .sleb128 8
+ 2023 0014 01000000 .quad .LCFI0-.Ltext0
+ 2023 00000000
+ 2024 001c 04000000 .quad .LCFI1-.Ltext0
+ 2024 00000000
+ 2025 0024 0200 .value 0x2
+ 2026 0026 77 .byte 0x77
+ 2027 0027 10 .sleb128 16
+ 2028 0028 04000000 .quad .LCFI1-.Ltext0
+ 2028 00000000
+ 2029 0030 1F000000 .quad .LFE601-.Ltext0
+ 2029 00000000
+ 2030 0038 0200 .value 0x2
+ 2031 003a 76 .byte 0x76
+ 2032 003b 10 .sleb128 16
+ 2033 003c 00000000 .quad 0x0
+ 2033 00000000
+ 2034 0044 00000000 .quad 0x0
+ 2034 00000000
+ 2035 .LLST1:
+ 2036 004c 1F000000 .quad .LFB602-.Ltext0
+ 2036 00000000
+ 2037 0054 20000000 .quad .LCFI2-.Ltext0
+ 2037 00000000
+ 2038 005c 0200 .value 0x2
+ 2039 005e 77 .byte 0x77
+ 2040 005f 08 .sleb128 8
+ 2041 0060 20000000 .quad .LCFI2-.Ltext0
+ 2041 00000000
+ 2042 0068 23000000 .quad .LCFI3-.Ltext0
+ 2042 00000000
+ 2043 0070 0200 .value 0x2
+ 2044 0072 77 .byte 0x77
+ 2045 0073 10 .sleb128 16
+ 2046 0074 23000000 .quad .LCFI3-.Ltext0
+ 2046 00000000
+ 2047 007c 48000000 .quad .LFE602-.Ltext0
+ 2047 00000000
+ 2048 0084 0200 .value 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 60
+
+
+ 2049 0086 76 .byte 0x76
+ 2050 0087 10 .sleb128 16
+ 2051 0088 00000000 .quad 0x0
+ 2051 00000000
+ 2052 0090 00000000 .quad 0x0
+ 2052 00000000
+ 2053 .LLST2:
+ 2054 0098 48000000 .quad .LFB603-.Ltext0
+ 2054 00000000
+ 2055 00a0 49000000 .quad .LCFI4-.Ltext0
+ 2055 00000000
+ 2056 00a8 0200 .value 0x2
+ 2057 00aa 77 .byte 0x77
+ 2058 00ab 08 .sleb128 8
+ 2059 00ac 49000000 .quad .LCFI4-.Ltext0
+ 2059 00000000
+ 2060 00b4 4C000000 .quad .LCFI5-.Ltext0
+ 2060 00000000
+ 2061 00bc 0200 .value 0x2
+ 2062 00be 77 .byte 0x77
+ 2063 00bf 10 .sleb128 16
+ 2064 00c0 4C000000 .quad .LCFI5-.Ltext0
+ 2064 00000000
+ 2065 00c8 82000000 .quad .LFE603-.Ltext0
+ 2065 00000000
+ 2066 00d0 0200 .value 0x2
+ 2067 00d2 76 .byte 0x76
+ 2068 00d3 10 .sleb128 16
+ 2069 00d4 00000000 .quad 0x0
+ 2069 00000000
+ 2070 00dc 00000000 .quad 0x0
+ 2070 00000000
+ 2071 .LLST3:
+ 2072 00e4 82000000 .quad .LFB604-.Ltext0
+ 2072 00000000
+ 2073 00ec 83000000 .quad .LCFI6-.Ltext0
+ 2073 00000000
+ 2074 00f4 0200 .value 0x2
+ 2075 00f6 77 .byte 0x77
+ 2076 00f7 08 .sleb128 8
+ 2077 00f8 83000000 .quad .LCFI6-.Ltext0
+ 2077 00000000
+ 2078 0100 86000000 .quad .LCFI7-.Ltext0
+ 2078 00000000
+ 2079 0108 0200 .value 0x2
+ 2080 010a 77 .byte 0x77
+ 2081 010b 10 .sleb128 16
+ 2082 010c 86000000 .quad .LCFI7-.Ltext0
+ 2082 00000000
+ 2083 0114 6C010000 .quad .LFE604-.Ltext0
+ 2083 00000000
+ 2084 011c 0200 .value 0x2
+ 2085 011e 76 .byte 0x76
+ 2086 011f 10 .sleb128 16
+ 2087 0120 00000000 .quad 0x0
+ 2087 00000000
+ 2088 0128 00000000 .quad 0x0
+
GAS LISTING /tmp/ccWvEaWW.s page 61
+
+
+ 2088 00000000
+ 2089 .LLST4:
+ 2090 0130 6C010000 .quad .LFB605-.Ltext0
+ 2090 00000000
+ 2091 0138 6D010000 .quad .LCFI8-.Ltext0
+ 2091 00000000
+ 2092 0140 0200 .value 0x2
+ 2093 0142 77 .byte 0x77
+ 2094 0143 08 .sleb128 8
+ 2095 0144 6D010000 .quad .LCFI8-.Ltext0
+ 2095 00000000
+ 2096 014c 70010000 .quad .LCFI9-.Ltext0
+ 2096 00000000
+ 2097 0154 0200 .value 0x2
+ 2098 0156 77 .byte 0x77
+ 2099 0157 10 .sleb128 16
+ 2100 0158 70010000 .quad .LCFI9-.Ltext0
+ 2100 00000000
+ 2101 0160 56020000 .quad .LFE605-.Ltext0
+ 2101 00000000
+ 2102 0168 0200 .value 0x2
+ 2103 016a 76 .byte 0x76
+ 2104 016b 10 .sleb128 16
+ 2105 016c 00000000 .quad 0x0
+ 2105 00000000
+ 2106 0174 00000000 .quad 0x0
+ 2106 00000000
+ 2107 .LLST5:
+ 2108 017c 56020000 .quad .LFB606-.Ltext0
+ 2108 00000000
+ 2109 0184 57020000 .quad .LCFI10-.Ltext0
+ 2109 00000000
+ 2110 018c 0200 .value 0x2
+ 2111 018e 77 .byte 0x77
+ 2112 018f 08 .sleb128 8
+ 2113 0190 57020000 .quad .LCFI10-.Ltext0
+ 2113 00000000
+ 2114 0198 5A020000 .quad .LCFI11-.Ltext0
+ 2114 00000000
+ 2115 01a0 0200 .value 0x2
+ 2116 01a2 77 .byte 0x77
+ 2117 01a3 10 .sleb128 16
+ 2118 01a4 5A020000 .quad .LCFI11-.Ltext0
+ 2118 00000000
+ 2119 01ac D9020000 .quad .LFE606-.Ltext0
+ 2119 00000000
+ 2120 01b4 0200 .value 0x2
+ 2121 01b6 76 .byte 0x76
+ 2122 01b7 10 .sleb128 16
+ 2123 01b8 00000000 .quad 0x0
+ 2123 00000000
+ 2124 01c0 00000000 .quad 0x0
+ 2124 00000000
+ 2125 .LLST6:
+ 2126 01c8 D9020000 .quad .LFB607-.Ltext0
+ 2126 00000000
+ 2127 01d0 DA020000 .quad .LCFI12-.Ltext0
+
GAS LISTING /tmp/ccWvEaWW.s page 62
+
+
+ 2127 00000000
+ 2128 01d8 0200 .value 0x2
+ 2129 01da 77 .byte 0x77
+ 2130 01db 08 .sleb128 8
+ 2131 01dc DA020000 .quad .LCFI12-.Ltext0
+ 2131 00000000
+ 2132 01e4 DD020000 .quad .LCFI13-.Ltext0
+ 2132 00000000
+ 2133 01ec 0200 .value 0x2
+ 2134 01ee 77 .byte 0x77
+ 2135 01ef 10 .sleb128 16
+ 2136 01f0 DD020000 .quad .LCFI13-.Ltext0
+ 2136 00000000
+ 2137 01f8 5C030000 .quad .LFE607-.Ltext0
+ 2137 00000000
+ 2138 0200 0200 .value 0x2
+ 2139 0202 76 .byte 0x76
+ 2140 0203 10 .sleb128 16
+ 2141 0204 00000000 .quad 0x0
+ 2141 00000000
+ 2142 020c 00000000 .quad 0x0
+ 2142 00000000
+ 2143 .LLST7:
+ 2144 0214 5C030000 .quad .LFB608-.Ltext0
+ 2144 00000000
+ 2145 021c 5D030000 .quad .LCFI14-.Ltext0
+ 2145 00000000
+ 2146 0224 0200 .value 0x2
+ 2147 0226 77 .byte 0x77
+ 2148 0227 08 .sleb128 8
+ 2149 0228 5D030000 .quad .LCFI14-.Ltext0
+ 2149 00000000
+ 2150 0230 60030000 .quad .LCFI15-.Ltext0
+ 2150 00000000
+ 2151 0238 0200 .value 0x2
+ 2152 023a 77 .byte 0x77
+ 2153 023b 10 .sleb128 16
+ 2154 023c 60030000 .quad .LCFI15-.Ltext0
+ 2154 00000000
+ 2155 0244 CB030000 .quad .LFE608-.Ltext0
+ 2155 00000000
+ 2156 024c 0200 .value 0x2
+ 2157 024e 76 .byte 0x76
+ 2158 024f 10 .sleb128 16
+ 2159 0250 00000000 .quad 0x0
+ 2159 00000000
+ 2160 0258 00000000 .quad 0x0
+ 2160 00000000
+ 2161 .LLST8:
+ 2162 0260 CB030000 .quad .LFB609-.Ltext0
+ 2162 00000000
+ 2163 0268 CC030000 .quad .LCFI16-.Ltext0
+ 2163 00000000
+ 2164 0270 0200 .value 0x2
+ 2165 0272 77 .byte 0x77
+ 2166 0273 08 .sleb128 8
+ 2167 0274 CC030000 .quad .LCFI16-.Ltext0
+
GAS LISTING /tmp/ccWvEaWW.s page 63
+
+
+ 2167 00000000
+ 2168 027c CF030000 .quad .LCFI17-.Ltext0
+ 2168 00000000
+ 2169 0284 0200 .value 0x2
+ 2170 0286 77 .byte 0x77
+ 2171 0287 10 .sleb128 16
+ 2172 0288 CF030000 .quad .LCFI17-.Ltext0
+ 2172 00000000
+ 2173 0290 3A040000 .quad .LFE609-.Ltext0
+ 2173 00000000
+ 2174 0298 0200 .value 0x2
+ 2175 029a 76 .byte 0x76
+ 2176 029b 10 .sleb128 16
+ 2177 029c 00000000 .quad 0x0
+ 2177 00000000
+ 2178 02a4 00000000 .quad 0x0
+ 2178 00000000
+ 2179 .LLST9:
+ 2180 02ac 3A040000 .quad .LFB610-.Ltext0
+ 2180 00000000
+ 2181 02b4 3B040000 .quad .LCFI18-.Ltext0
+ 2181 00000000
+ 2182 02bc 0200 .value 0x2
+ 2183 02be 77 .byte 0x77
+ 2184 02bf 08 .sleb128 8
+ 2185 02c0 3B040000 .quad .LCFI18-.Ltext0
+ 2185 00000000
+ 2186 02c8 3E040000 .quad .LCFI19-.Ltext0
+ 2186 00000000
+ 2187 02d0 0200 .value 0x2
+ 2188 02d2 77 .byte 0x77
+ 2189 02d3 10 .sleb128 16
+ 2190 02d4 3E040000 .quad .LCFI19-.Ltext0
+ 2190 00000000
+ 2191 02dc 61040000 .quad .LFE610-.Ltext0
+ 2191 00000000
+ 2192 02e4 0200 .value 0x2
+ 2193 02e6 76 .byte 0x76
+ 2194 02e7 10 .sleb128 16
+ 2195 02e8 00000000 .quad 0x0
+ 2195 00000000
+ 2196 02f0 00000000 .quad 0x0
+ 2196 00000000
+ 2197 .LLST10:
+ 2198 02f8 61040000 .quad .LFB611-.Ltext0
+ 2198 00000000
+ 2199 0300 62040000 .quad .LCFI20-.Ltext0
+ 2199 00000000
+ 2200 0308 0200 .value 0x2
+ 2201 030a 77 .byte 0x77
+ 2202 030b 08 .sleb128 8
+ 2203 030c 62040000 .quad .LCFI20-.Ltext0
+ 2203 00000000
+ 2204 0314 65040000 .quad .LCFI21-.Ltext0
+ 2204 00000000
+ 2205 031c 0200 .value 0x2
+ 2206 031e 77 .byte 0x77
+
GAS LISTING /tmp/ccWvEaWW.s page 64
+
+
+ 2207 031f 10 .sleb128 16
+ 2208 0320 65040000 .quad .LCFI21-.Ltext0
+ 2208 00000000
+ 2209 0328 88040000 .quad .LFE611-.Ltext0
+ 2209 00000000
+ 2210 0330 0200 .value 0x2
+ 2211 0332 76 .byte 0x76
+ 2212 0333 10 .sleb128 16
+ 2213 0334 00000000 .quad 0x0
+ 2213 00000000
+ 2214 033c 00000000 .quad 0x0
+ 2214 00000000
+ 2215 .LLST11:
+ 2216 0344 88040000 .quad .LFB612-.Ltext0
+ 2216 00000000
+ 2217 034c 89040000 .quad .LCFI22-.Ltext0
+ 2217 00000000
+ 2218 0354 0200 .value 0x2
+ 2219 0356 77 .byte 0x77
+ 2220 0357 08 .sleb128 8
+ 2221 0358 89040000 .quad .LCFI22-.Ltext0
+ 2221 00000000
+ 2222 0360 8C040000 .quad .LCFI23-.Ltext0
+ 2222 00000000
+ 2223 0368 0200 .value 0x2
+ 2224 036a 77 .byte 0x77
+ 2225 036b 10 .sleb128 16
+ 2226 036c 8C040000 .quad .LCFI23-.Ltext0
+ 2226 00000000
+ 2227 0374 DB040000 .quad .LFE612-.Ltext0
+ 2227 00000000
+ 2228 037c 0200 .value 0x2
+ 2229 037e 76 .byte 0x76
+ 2230 037f 10 .sleb128 16
+ 2231 0380 00000000 .quad 0x0
+ 2231 00000000
+ 2232 0388 00000000 .quad 0x0
+ 2232 00000000
+ 2233 .LLST12:
+ 2234 0390 DB040000 .quad .LFB613-.Ltext0
+ 2234 00000000
+ 2235 0398 DC040000 .quad .LCFI24-.Ltext0
+ 2235 00000000
+ 2236 03a0 0200 .value 0x2
+ 2237 03a2 77 .byte 0x77
+ 2238 03a3 08 .sleb128 8
+ 2239 03a4 DC040000 .quad .LCFI24-.Ltext0
+ 2239 00000000
+ 2240 03ac DF040000 .quad .LCFI25-.Ltext0
+ 2240 00000000
+ 2241 03b4 0200 .value 0x2
+ 2242 03b6 77 .byte 0x77
+ 2243 03b7 10 .sleb128 16
+ 2244 03b8 DF040000 .quad .LCFI25-.Ltext0
+ 2244 00000000
+ 2245 03c0 2E050000 .quad .LFE613-.Ltext0
+ 2245 00000000
+
GAS LISTING /tmp/ccWvEaWW.s page 65
+
+
+ 2246 03c8 0200 .value 0x2
+ 2247 03ca 76 .byte 0x76
+ 2248 03cb 10 .sleb128 16
+ 2249 03cc 00000000 .quad 0x0
+ 2249 00000000
+ 2250 03d4 00000000 .quad 0x0
+ 2250 00000000
+ 2251 .LLST13:
+ 2252 03dc 2E050000 .quad .LFB614-.Ltext0
+ 2252 00000000
+ 2253 03e4 2F050000 .quad .LCFI26-.Ltext0
+ 2253 00000000
+ 2254 03ec 0200 .value 0x2
+ 2255 03ee 77 .byte 0x77
+ 2256 03ef 08 .sleb128 8
+ 2257 03f0 2F050000 .quad .LCFI26-.Ltext0
+ 2257 00000000
+ 2258 03f8 32050000 .quad .LCFI27-.Ltext0
+ 2258 00000000
+ 2259 0400 0200 .value 0x2
+ 2260 0402 77 .byte 0x77
+ 2261 0403 10 .sleb128 16
+ 2262 0404 32050000 .quad .LCFI27-.Ltext0
+ 2262 00000000
+ 2263 040c 92050000 .quad .LFE614-.Ltext0
+ 2263 00000000
+ 2264 0414 0200 .value 0x2
+ 2265 0416 76 .byte 0x76
+ 2266 0417 10 .sleb128 16
+ 2267 0418 00000000 .quad 0x0
+ 2267 00000000
+ 2268 0420 00000000 .quad 0x0
+ 2268 00000000
+ 2269 .LLST14:
+ 2270 0428 92050000 .quad .LFB615-.Ltext0
+ 2270 00000000
+ 2271 0430 93050000 .quad .LCFI28-.Ltext0
+ 2271 00000000
+ 2272 0438 0200 .value 0x2
+ 2273 043a 77 .byte 0x77
+ 2274 043b 08 .sleb128 8
+ 2275 043c 93050000 .quad .LCFI28-.Ltext0
+ 2275 00000000
+ 2276 0444 96050000 .quad .LCFI29-.Ltext0
+ 2276 00000000
+ 2277 044c 0200 .value 0x2
+ 2278 044e 77 .byte 0x77
+ 2279 044f 10 .sleb128 16
+ 2280 0450 96050000 .quad .LCFI29-.Ltext0
+ 2280 00000000
+ 2281 0458 FD050000 .quad .LFE615-.Ltext0
+ 2281 00000000
+ 2282 0460 0200 .value 0x2
+ 2283 0462 76 .byte 0x76
+ 2284 0463 10 .sleb128 16
+ 2285 0464 00000000 .quad 0x0
+ 2285 00000000
+
GAS LISTING /tmp/ccWvEaWW.s page 66
+
+
+ 2286 046c 00000000 .quad 0x0
+ 2286 00000000
+ 2287 .LLST15:
+ 2288 0474 FD050000 .quad .LFB616-.Ltext0
+ 2288 00000000
+ 2289 047c FE050000 .quad .LCFI30-.Ltext0
+ 2289 00000000
+ 2290 0484 0200 .value 0x2
+ 2291 0486 77 .byte 0x77
+ 2292 0487 08 .sleb128 8
+ 2293 0488 FE050000 .quad .LCFI30-.Ltext0
+ 2293 00000000
+ 2294 0490 01060000 .quad .LCFI31-.Ltext0
+ 2294 00000000
+ 2295 0498 0200 .value 0x2
+ 2296 049a 77 .byte 0x77
+ 2297 049b 10 .sleb128 16
+ 2298 049c 01060000 .quad .LCFI31-.Ltext0
+ 2298 00000000
+ 2299 04a4 6D060000 .quad .LFE616-.Ltext0
+ 2299 00000000
+ 2300 04ac 0200 .value 0x2
+ 2301 04ae 76 .byte 0x76
+ 2302 04af 10 .sleb128 16
+ 2303 04b0 00000000 .quad 0x0
+ 2303 00000000
+ 2304 04b8 00000000 .quad 0x0
+ 2304 00000000
+ 2305 .LLST16:
+ 2306 04c0 6D060000 .quad .LFB617-.Ltext0
+ 2306 00000000
+ 2307 04c8 6E060000 .quad .LCFI32-.Ltext0
+ 2307 00000000
+ 2308 04d0 0200 .value 0x2
+ 2309 04d2 77 .byte 0x77
+ 2310 04d3 08 .sleb128 8
+ 2311 04d4 6E060000 .quad .LCFI32-.Ltext0
+ 2311 00000000
+ 2312 04dc 71060000 .quad .LCFI33-.Ltext0
+ 2312 00000000
+ 2313 04e4 0200 .value 0x2
+ 2314 04e6 77 .byte 0x77
+ 2315 04e7 10 .sleb128 16
+ 2316 04e8 71060000 .quad .LCFI33-.Ltext0
+ 2316 00000000
+ 2317 04f0 DD060000 .quad .LFE617-.Ltext0
+ 2317 00000000
+ 2318 04f8 0200 .value 0x2
+ 2319 04fa 76 .byte 0x76
+ 2320 04fb 10 .sleb128 16
+ 2321 04fc 00000000 .quad 0x0
+ 2321 00000000
+ 2322 0504 00000000 .quad 0x0
+ 2322 00000000
+ 2323 .LLST17:
+ 2324 050c DD060000 .quad .LFB618-.Ltext0
+ 2324 00000000
+
GAS LISTING /tmp/ccWvEaWW.s page 67
+
+
+ 2325 0514 DE060000 .quad .LCFI34-.Ltext0
+ 2325 00000000
+ 2326 051c 0200 .value 0x2
+ 2327 051e 77 .byte 0x77
+ 2328 051f 08 .sleb128 8
+ 2329 0520 DE060000 .quad .LCFI34-.Ltext0
+ 2329 00000000
+ 2330 0528 E1060000 .quad .LCFI35-.Ltext0
+ 2330 00000000
+ 2331 0530 0200 .value 0x2
+ 2332 0532 77 .byte 0x77
+ 2333 0533 10 .sleb128 16
+ 2334 0534 E1060000 .quad .LCFI35-.Ltext0
+ 2334 00000000
+ 2335 053c AB070000 .quad .LFE618-.Ltext0
+ 2335 00000000
+ 2336 0544 0200 .value 0x2
+ 2337 0546 76 .byte 0x76
+ 2338 0547 10 .sleb128 16
+ 2339 0548 00000000 .quad 0x0
+ 2339 00000000
+ 2340 0550 00000000 .quad 0x0
+ 2340 00000000
+ 2341 .LLST18:
+ 2342 0558 AB070000 .quad .LFB619-.Ltext0
+ 2342 00000000
+ 2343 0560 AC070000 .quad .LCFI36-.Ltext0
+ 2343 00000000
+ 2344 0568 0200 .value 0x2
+ 2345 056a 77 .byte 0x77
+ 2346 056b 08 .sleb128 8
+ 2347 056c AC070000 .quad .LCFI36-.Ltext0
+ 2347 00000000
+ 2348 0574 AF070000 .quad .LCFI37-.Ltext0
+ 2348 00000000
+ 2349 057c 0200 .value 0x2
+ 2350 057e 77 .byte 0x77
+ 2351 057f 10 .sleb128 16
+ 2352 0580 AF070000 .quad .LCFI37-.Ltext0
+ 2352 00000000
+ 2353 0588 7F080000 .quad .LFE619-.Ltext0
+ 2353 00000000
+ 2354 0590 0200 .value 0x2
+ 2355 0592 76 .byte 0x76
+ 2356 0593 10 .sleb128 16
+ 2357 0594 00000000 .quad 0x0
+ 2357 00000000
+ 2358 059c 00000000 .quad 0x0
+ 2358 00000000
+ 2359 .LLST19:
+ 2360 05a4 7F080000 .quad .LFB620-.Ltext0
+ 2360 00000000
+ 2361 05ac 80080000 .quad .LCFI38-.Ltext0
+ 2361 00000000
+ 2362 05b4 0200 .value 0x2
+ 2363 05b6 77 .byte 0x77
+ 2364 05b7 08 .sleb128 8
+
GAS LISTING /tmp/ccWvEaWW.s page 68
+
+
+ 2365 05b8 80080000 .quad .LCFI38-.Ltext0
+ 2365 00000000
+ 2366 05c0 83080000 .quad .LCFI39-.Ltext0
+ 2366 00000000
+ 2367 05c8 0200 .value 0x2
+ 2368 05ca 77 .byte 0x77
+ 2369 05cb 10 .sleb128 16
+ 2370 05cc 83080000 .quad .LCFI39-.Ltext0
+ 2370 00000000
+ 2371 05d4 5C090000 .quad .LFE620-.Ltext0
+ 2371 00000000
+ 2372 05dc 0200 .value 0x2
+ 2373 05de 76 .byte 0x76
+ 2374 05df 10 .sleb128 16
+ 2375 05e0 00000000 .quad 0x0
+ 2375 00000000
+ 2376 05e8 00000000 .quad 0x0
+ 2376 00000000
+ 2377 .LLST20:
+ 2378 05f0 5C090000 .quad .LFB621-.Ltext0
+ 2378 00000000
+ 2379 05f8 5D090000 .quad .LCFI40-.Ltext0
+ 2379 00000000
+ 2380 0600 0200 .value 0x2
+ 2381 0602 77 .byte 0x77
+ 2382 0603 08 .sleb128 8
+ 2383 0604 5D090000 .quad .LCFI40-.Ltext0
+ 2383 00000000
+ 2384 060c 60090000 .quad .LCFI41-.Ltext0
+ 2384 00000000
+ 2385 0614 0200 .value 0x2
+ 2386 0616 77 .byte 0x77
+ 2387 0617 10 .sleb128 16
+ 2388 0618 60090000 .quad .LCFI41-.Ltext0
+ 2388 00000000
+ 2389 0620 220A0000 .quad .LFE621-.Ltext0
+ 2389 00000000
+ 2390 0628 0200 .value 0x2
+ 2391 062a 76 .byte 0x76
+ 2392 062b 10 .sleb128 16
+ 2393 062c 00000000 .quad 0x0
+ 2393 00000000
+ 2394 0634 00000000 .quad 0x0
+ 2394 00000000
+ 2395 .LLST21:
+ 2396 063c 220A0000 .quad .LFB622-.Ltext0
+ 2396 00000000
+ 2397 0644 230A0000 .quad .LCFI42-.Ltext0
+ 2397 00000000
+ 2398 064c 0200 .value 0x2
+ 2399 064e 77 .byte 0x77
+ 2400 064f 08 .sleb128 8
+ 2401 0650 230A0000 .quad .LCFI42-.Ltext0
+ 2401 00000000
+ 2402 0658 260A0000 .quad .LCFI43-.Ltext0
+ 2402 00000000
+ 2403 0660 0200 .value 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 69
+
+
+ 2404 0662 77 .byte 0x77
+ 2405 0663 10 .sleb128 16
+ 2406 0664 260A0000 .quad .LCFI43-.Ltext0
+ 2406 00000000
+ 2407 066c E80A0000 .quad .LFE622-.Ltext0
+ 2407 00000000
+ 2408 0674 0200 .value 0x2
+ 2409 0676 76 .byte 0x76
+ 2410 0677 10 .sleb128 16
+ 2411 0678 00000000 .quad 0x0
+ 2411 00000000
+ 2412 0680 00000000 .quad 0x0
+ 2412 00000000
+ 2413 .LLST22:
+ 2414 0688 E80A0000 .quad .LFB623-.Ltext0
+ 2414 00000000
+ 2415 0690 E90A0000 .quad .LCFI44-.Ltext0
+ 2415 00000000
+ 2416 0698 0200 .value 0x2
+ 2417 069a 77 .byte 0x77
+ 2418 069b 08 .sleb128 8
+ 2419 069c E90A0000 .quad .LCFI44-.Ltext0
+ 2419 00000000
+ 2420 06a4 EC0A0000 .quad .LCFI45-.Ltext0
+ 2420 00000000
+ 2421 06ac 0200 .value 0x2
+ 2422 06ae 77 .byte 0x77
+ 2423 06af 10 .sleb128 16
+ 2424 06b0 EC0A0000 .quad .LCFI45-.Ltext0
+ 2424 00000000
+ 2425 06b8 AE0B0000 .quad .LFE623-.Ltext0
+ 2425 00000000
+ 2426 06c0 0200 .value 0x2
+ 2427 06c2 76 .byte 0x76
+ 2428 06c3 10 .sleb128 16
+ 2429 06c4 00000000 .quad 0x0
+ 2429 00000000
+ 2430 06cc 00000000 .quad 0x0
+ 2430 00000000
+ 2431 .LLST23:
+ 2432 06d4 AE0B0000 .quad .LFB624-.Ltext0
+ 2432 00000000
+ 2433 06dc AF0B0000 .quad .LCFI46-.Ltext0
+ 2433 00000000
+ 2434 06e4 0200 .value 0x2
+ 2435 06e6 77 .byte 0x77
+ 2436 06e7 08 .sleb128 8
+ 2437 06e8 AF0B0000 .quad .LCFI46-.Ltext0
+ 2437 00000000
+ 2438 06f0 B20B0000 .quad .LCFI47-.Ltext0
+ 2438 00000000
+ 2439 06f8 0200 .value 0x2
+ 2440 06fa 77 .byte 0x77
+ 2441 06fb 10 .sleb128 16
+ 2442 06fc B20B0000 .quad .LCFI47-.Ltext0
+ 2442 00000000
+ 2443 0704 740C0000 .quad .LFE624-.Ltext0
+
GAS LISTING /tmp/ccWvEaWW.s page 70
+
+
+ 2443 00000000
+ 2444 070c 0200 .value 0x2
+ 2445 070e 76 .byte 0x76
+ 2446 070f 10 .sleb128 16
+ 2447 0710 00000000 .quad 0x0
+ 2447 00000000
+ 2448 0718 00000000 .quad 0x0
+ 2448 00000000
+ 2449 .LLST24:
+ 2450 0720 740C0000 .quad .LFB625-.Ltext0
+ 2450 00000000
+ 2451 0728 750C0000 .quad .LCFI48-.Ltext0
+ 2451 00000000
+ 2452 0730 0200 .value 0x2
+ 2453 0732 77 .byte 0x77
+ 2454 0733 08 .sleb128 8
+ 2455 0734 750C0000 .quad .LCFI48-.Ltext0
+ 2455 00000000
+ 2456 073c 780C0000 .quad .LCFI49-.Ltext0
+ 2456 00000000
+ 2457 0744 0200 .value 0x2
+ 2458 0746 77 .byte 0x77
+ 2459 0747 10 .sleb128 16
+ 2460 0748 780C0000 .quad .LCFI49-.Ltext0
+ 2460 00000000
+ 2461 0750 AD0C0000 .quad .LFE625-.Ltext0
+ 2461 00000000
+ 2462 0758 0200 .value 0x2
+ 2463 075a 76 .byte 0x76
+ 2464 075b 10 .sleb128 16
+ 2465 075c 00000000 .quad 0x0
+ 2465 00000000
+ 2466 0764 00000000 .quad 0x0
+ 2466 00000000
+ 2467 .LLST25:
+ 2468 076c AD0C0000 .quad .LFB626-.Ltext0
+ 2468 00000000
+ 2469 0774 AE0C0000 .quad .LCFI50-.Ltext0
+ 2469 00000000
+ 2470 077c 0200 .value 0x2
+ 2471 077e 77 .byte 0x77
+ 2472 077f 08 .sleb128 8
+ 2473 0780 AE0C0000 .quad .LCFI50-.Ltext0
+ 2473 00000000
+ 2474 0788 B10C0000 .quad .LCFI51-.Ltext0
+ 2474 00000000
+ 2475 0790 0200 .value 0x2
+ 2476 0792 77 .byte 0x77
+ 2477 0793 10 .sleb128 16
+ 2478 0794 B10C0000 .quad .LCFI51-.Ltext0
+ 2478 00000000
+ 2479 079c E30C0000 .quad .LFE626-.Ltext0
+ 2479 00000000
+ 2480 07a4 0200 .value 0x2
+ 2481 07a6 76 .byte 0x76
+ 2482 07a7 10 .sleb128 16
+ 2483 07a8 00000000 .quad 0x0
+
GAS LISTING /tmp/ccWvEaWW.s page 71
+
+
+ 2483 00000000
+ 2484 07b0 00000000 .quad 0x0
+ 2484 00000000
+ 2485 .LLST26:
+ 2486 07b8 E30C0000 .quad .LFB627-.Ltext0
+ 2486 00000000
+ 2487 07c0 E40C0000 .quad .LCFI52-.Ltext0
+ 2487 00000000
+ 2488 07c8 0200 .value 0x2
+ 2489 07ca 77 .byte 0x77
+ 2490 07cb 08 .sleb128 8
+ 2491 07cc E40C0000 .quad .LCFI52-.Ltext0
+ 2491 00000000
+ 2492 07d4 E70C0000 .quad .LCFI53-.Ltext0
+ 2492 00000000
+ 2493 07dc 0200 .value 0x2
+ 2494 07de 77 .byte 0x77
+ 2495 07df 10 .sleb128 16
+ 2496 07e0 E70C0000 .quad .LCFI53-.Ltext0
+ 2496 00000000
+ 2497 07e8 190D0000 .quad .LFE627-.Ltext0
+ 2497 00000000
+ 2498 07f0 0200 .value 0x2
+ 2499 07f2 76 .byte 0x76
+ 2500 07f3 10 .sleb128 16
+ 2501 07f4 00000000 .quad 0x0
+ 2501 00000000
+ 2502 07fc 00000000 .quad 0x0
+ 2502 00000000
+ 2503 .LLST27:
+ 2504 0804 190D0000 .quad .LFB628-.Ltext0
+ 2504 00000000
+ 2505 080c 1A0D0000 .quad .LCFI54-.Ltext0
+ 2505 00000000
+ 2506 0814 0200 .value 0x2
+ 2507 0816 77 .byte 0x77
+ 2508 0817 08 .sleb128 8
+ 2509 0818 1A0D0000 .quad .LCFI54-.Ltext0
+ 2509 00000000
+ 2510 0820 1D0D0000 .quad .LCFI55-.Ltext0
+ 2510 00000000
+ 2511 0828 0200 .value 0x2
+ 2512 082a 77 .byte 0x77
+ 2513 082b 10 .sleb128 16
+ 2514 082c 1D0D0000 .quad .LCFI55-.Ltext0
+ 2514 00000000
+ 2515 0834 740D0000 .quad .LFE628-.Ltext0
+ 2515 00000000
+ 2516 083c 0200 .value 0x2
+ 2517 083e 76 .byte 0x76
+ 2518 083f 10 .sleb128 16
+ 2519 0840 00000000 .quad 0x0
+ 2519 00000000
+ 2520 0848 00000000 .quad 0x0
+ 2520 00000000
+ 2521 .LLST28:
+ 2522 0850 740D0000 .quad .LFB629-.Ltext0
+
GAS LISTING /tmp/ccWvEaWW.s page 72
+
+
+ 2522 00000000
+ 2523 0858 750D0000 .quad .LCFI56-.Ltext0
+ 2523 00000000
+ 2524 0860 0200 .value 0x2
+ 2525 0862 77 .byte 0x77
+ 2526 0863 08 .sleb128 8
+ 2527 0864 750D0000 .quad .LCFI56-.Ltext0
+ 2527 00000000
+ 2528 086c 780D0000 .quad .LCFI57-.Ltext0
+ 2528 00000000
+ 2529 0874 0200 .value 0x2
+ 2530 0876 77 .byte 0x77
+ 2531 0877 10 .sleb128 16
+ 2532 0878 780D0000 .quad .LCFI57-.Ltext0
+ 2532 00000000
+ 2533 0880 120E0000 .quad .LFE629-.Ltext0
+ 2533 00000000
+ 2534 0888 0200 .value 0x2
+ 2535 088a 76 .byte 0x76
+ 2536 088b 10 .sleb128 16
+ 2537 088c 00000000 .quad 0x0
+ 2537 00000000
+ 2538 0894 00000000 .quad 0x0
+ 2538 00000000
+ 2539 .LLST29:
+ 2540 089c 120E0000 .quad .LFB630-.Ltext0
+ 2540 00000000
+ 2541 08a4 130E0000 .quad .LCFI58-.Ltext0
+ 2541 00000000
+ 2542 08ac 0200 .value 0x2
+ 2543 08ae 77 .byte 0x77
+ 2544 08af 08 .sleb128 8
+ 2545 08b0 130E0000 .quad .LCFI58-.Ltext0
+ 2545 00000000
+ 2546 08b8 160E0000 .quad .LCFI59-.Ltext0
+ 2546 00000000
+ 2547 08c0 0200 .value 0x2
+ 2548 08c2 77 .byte 0x77
+ 2549 08c3 10 .sleb128 16
+ 2550 08c4 160E0000 .quad .LCFI59-.Ltext0
+ 2550 00000000
+ 2551 08cc 6D0E0000 .quad .LFE630-.Ltext0
+ 2551 00000000
+ 2552 08d4 0200 .value 0x2
+ 2553 08d6 76 .byte 0x76
+ 2554 08d7 10 .sleb128 16
+ 2555 08d8 00000000 .quad 0x0
+ 2555 00000000
+ 2556 08e0 00000000 .quad 0x0
+ 2556 00000000
+ 2557 .LLST30:
+ 2558 08e8 6D0E0000 .quad .LFB631-.Ltext0
+ 2558 00000000
+ 2559 08f0 6E0E0000 .quad .LCFI60-.Ltext0
+ 2559 00000000
+ 2560 08f8 0200 .value 0x2
+ 2561 08fa 77 .byte 0x77
+
GAS LISTING /tmp/ccWvEaWW.s page 73
+
+
+ 2562 08fb 08 .sleb128 8
+ 2563 08fc 6E0E0000 .quad .LCFI60-.Ltext0
+ 2563 00000000
+ 2564 0904 710E0000 .quad .LCFI61-.Ltext0
+ 2564 00000000
+ 2565 090c 0200 .value 0x2
+ 2566 090e 77 .byte 0x77
+ 2567 090f 10 .sleb128 16
+ 2568 0910 710E0000 .quad .LCFI61-.Ltext0
+ 2568 00000000
+ 2569 0918 020F0000 .quad .LFE631-.Ltext0
+ 2569 00000000
+ 2570 0920 0200 .value 0x2
+ 2571 0922 76 .byte 0x76
+ 2572 0923 10 .sleb128 16
+ 2573 0924 00000000 .quad 0x0
+ 2573 00000000
+ 2574 092c 00000000 .quad 0x0
+ 2574 00000000
+ 2575 .LLST31:
+ 2576 0934 020F0000 .quad .LFB632-.Ltext0
+ 2576 00000000
+ 2577 093c 030F0000 .quad .LCFI62-.Ltext0
+ 2577 00000000
+ 2578 0944 0200 .value 0x2
+ 2579 0946 77 .byte 0x77
+ 2580 0947 08 .sleb128 8
+ 2581 0948 030F0000 .quad .LCFI62-.Ltext0
+ 2581 00000000
+ 2582 0950 060F0000 .quad .LCFI63-.Ltext0
+ 2582 00000000
+ 2583 0958 0200 .value 0x2
+ 2584 095a 77 .byte 0x77
+ 2585 095b 10 .sleb128 16
+ 2586 095c 060F0000 .quad .LCFI63-.Ltext0
+ 2586 00000000
+ 2587 0964 64100000 .quad .LFE632-.Ltext0
+ 2587 00000000
+ 2588 096c 0200 .value 0x2
+ 2589 096e 76 .byte 0x76
+ 2590 096f 10 .sleb128 16
+ 2591 0970 00000000 .quad 0x0
+ 2591 00000000
+ 2592 0978 00000000 .quad 0x0
+ 2592 00000000
+ 2593 .file 2 "/usr/include/stdint.h"
+ 2594 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 2595 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/atomic32.h"
+ 2596 .file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/refcount.h"
+ 2597 .file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/cipher.h"
+ 2598 .file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-impl.h"
+ 2599 .file 8 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 2600 .file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 2601 .file 10 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 2602 .file 11 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi-priv.h"
+ 2603 .file 12 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/ciphermgr.h"
+ 2604 .file 13 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+
GAS LISTING /tmp/ccWvEaWW.s page 74
+
+
+ 2605 .file 14 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 2606 .file 15 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 2607 .section .debug_info
+ 2608 0000 4D1F0000 .long 0x1f4d
+ 2609 0004 0200 .value 0x2
+ 2610 0006 00000000 .long .Ldebug_abbrev0
+ 2611 000a 08 .byte 0x8
+ 2612 000b 01 .uleb128 0x1
+ 2613 000c 00000000 .long .LASF392
+ 2614 0010 01 .byte 0x1
+ 2615 0011 00000000 .long .LASF393
+ 2616 0015 00000000 .long .LASF394
+ 2617 0019 00000000 .quad .Ltext0
+ 2617 00000000
+ 2618 0021 00000000 .quad .Letext0
+ 2618 00000000
+ 2619 0029 00000000 .long .Ldebug_line0
+ 2620 002d 02 .uleb128 0x2
+ 2621 002e 01 .byte 0x1
+ 2622 002f 06 .byte 0x6
+ 2623 0030 00000000 .long .LASF0
+ 2624 0034 02 .uleb128 0x2
+ 2625 0035 02 .byte 0x2
+ 2626 0036 05 .byte 0x5
+ 2627 0037 00000000 .long .LASF1
+ 2628 003b 03 .uleb128 0x3
+ 2629 003c 04 .byte 0x4
+ 2630 003d 05 .byte 0x5
+ 2631 003e 696E7400 .string "int"
+ 2632 0042 02 .uleb128 0x2
+ 2633 0043 08 .byte 0x8
+ 2634 0044 05 .byte 0x5
+ 2635 0045 00000000 .long .LASF2
+ 2636 0049 04 .uleb128 0x4
+ 2637 004a 00000000 .long .LASF5
+ 2638 004e 02 .byte 0x2
+ 2639 004f 31 .byte 0x31
+ 2640 0050 54000000 .long 0x54
+ 2641 0054 02 .uleb128 0x2
+ 2642 0055 01 .byte 0x1
+ 2643 0056 08 .byte 0x8
+ 2644 0057 00000000 .long .LASF3
+ 2645 005b 02 .uleb128 0x2
+ 2646 005c 02 .byte 0x2
+ 2647 005d 07 .byte 0x7
+ 2648 005e 00000000 .long .LASF4
+ 2649 0062 04 .uleb128 0x4
+ 2650 0063 00000000 .long .LASF6
+ 2651 0067 02 .byte 0x2
+ 2652 0068 34 .byte 0x34
+ 2653 0069 6D000000 .long 0x6d
+ 2654 006d 02 .uleb128 0x2
+ 2655 006e 04 .byte 0x4
+ 2656 006f 07 .byte 0x7
+ 2657 0070 00000000 .long .LASF7
+ 2658 0074 02 .uleb128 0x2
+ 2659 0075 08 .byte 0x8
+
GAS LISTING /tmp/ccWvEaWW.s page 75
+
+
+ 2660 0076 07 .byte 0x7
+ 2661 0077 00000000 .long .LASF8
+ 2662 007b 04 .uleb128 0x4
+ 2663 007c 00000000 .long .LASF9
+ 2664 0080 03 .byte 0x3
+ 2665 0081 30 .byte 0x30
+ 2666 0082 62000000 .long 0x62
+ 2667 0086 04 .uleb128 0x4
+ 2668 0087 00000000 .long .LASF10
+ 2669 008b 04 .byte 0x4
+ 2670 008c 27 .byte 0x27
+ 2671 008d 91000000 .long 0x91
+ 2672 0091 05 .uleb128 0x5
+ 2673 0092 00000000 .long .LASF10
+ 2674 0096 04 .byte 0x4
+ 2675 0097 04 .byte 0x4
+ 2676 0098 27 .byte 0x27
+ 2677 0099 AC000000 .long 0xac
+ 2678 009d 06 .uleb128 0x6
+ 2679 009e 00000000 .long .LASF34
+ 2680 00a2 04 .byte 0x4
+ 2681 00a3 2A .byte 0x2a
+ 2682 00a4 AC000000 .long 0xac
+ 2683 00a8 02 .byte 0x2
+ 2684 00a9 23 .byte 0x23
+ 2685 00aa 00 .uleb128 0x0
+ 2686 00ab 00 .byte 0x0
+ 2687 00ac 07 .uleb128 0x7
+ 2688 00ad 3B000000 .long 0x3b
+ 2689 00b1 08 .uleb128 0x8
+ 2690 00b2 08 .byte 0x8
+ 2691 00b3 07 .byte 0x7
+ 2692 00b4 09 .uleb128 0x9
+ 2693 00b5 08 .byte 0x8
+ 2694 00b6 0A .uleb128 0xa
+ 2695 00b7 08 .byte 0x8
+ 2696 00b8 BC000000 .long 0xbc
+ 2697 00bc 0B .uleb128 0xb
+ 2698 00bd C1000000 .long 0xc1
+ 2699 00c1 02 .uleb128 0x2
+ 2700 00c2 01 .byte 0x1
+ 2701 00c3 06 .byte 0x6
+ 2702 00c4 00000000 .long .LASF11
+ 2703 00c8 0C .uleb128 0xc
+ 2704 00c9 04 .byte 0x4
+ 2705 00ca 0D .byte 0xd
+ 2706 00cb D6 .byte 0xd6
+ 2707 00cc 49010000 .long 0x149
+ 2708 00d0 0D .uleb128 0xd
+ 2709 00d1 00000000 .long .LASF12
+ 2710 00d5 7F .sleb128 -1
+ 2711 00d6 0D .uleb128 0xd
+ 2712 00d7 00000000 .long .LASF13
+ 2713 00db 00 .sleb128 0
+ 2714 00dc 0D .uleb128 0xd
+ 2715 00dd 00000000 .long .LASF14
+ 2716 00e1 01 .sleb128 1
+
GAS LISTING /tmp/ccWvEaWW.s page 76
+
+
+ 2717 00e2 0D .uleb128 0xd
+ 2718 00e3 00000000 .long .LASF15
+ 2719 00e7 02 .sleb128 2
+ 2720 00e8 0D .uleb128 0xd
+ 2721 00e9 00000000 .long .LASF16
+ 2722 00ed 03 .sleb128 3
+ 2723 00ee 0D .uleb128 0xd
+ 2724 00ef 00000000 .long .LASF17
+ 2725 00f3 04 .sleb128 4
+ 2726 00f4 0D .uleb128 0xd
+ 2727 00f5 00000000 .long .LASF18
+ 2728 00f9 05 .sleb128 5
+ 2729 00fa 0D .uleb128 0xd
+ 2730 00fb 00000000 .long .LASF19
+ 2731 00ff 06 .sleb128 6
+ 2732 0100 0D .uleb128 0xd
+ 2733 0101 00000000 .long .LASF20
+ 2734 0105 07 .sleb128 7
+ 2735 0106 0D .uleb128 0xd
+ 2736 0107 00000000 .long .LASF21
+ 2737 010b 08 .sleb128 8
+ 2738 010c 0D .uleb128 0xd
+ 2739 010d 00000000 .long .LASF22
+ 2740 0111 09 .sleb128 9
+ 2741 0112 0D .uleb128 0xd
+ 2742 0113 00000000 .long .LASF23
+ 2743 0117 0A .sleb128 10
+ 2744 0118 0D .uleb128 0xd
+ 2745 0119 00000000 .long .LASF24
+ 2746 011d 0B .sleb128 11
+ 2747 011e 0D .uleb128 0xd
+ 2748 011f 00000000 .long .LASF25
+ 2749 0123 0C .sleb128 12
+ 2750 0124 0D .uleb128 0xd
+ 2751 0125 00000000 .long .LASF26
+ 2752 0129 0D .sleb128 13
+ 2753 012a 0D .uleb128 0xd
+ 2754 012b 00000000 .long .LASF27
+ 2755 012f 0E .sleb128 14
+ 2756 0130 0D .uleb128 0xd
+ 2757 0131 00000000 .long .LASF28
+ 2758 0135 0F .sleb128 15
+ 2759 0136 0D .uleb128 0xd
+ 2760 0137 00000000 .long .LASF29
+ 2761 013b 10 .sleb128 16
+ 2762 013c 0D .uleb128 0xd
+ 2763 013d 00000000 .long .LASF30
+ 2764 0141 11 .sleb128 17
+ 2765 0142 0D .uleb128 0xd
+ 2766 0143 00000000 .long .LASF31
+ 2767 0147 12 .sleb128 18
+ 2768 0148 00 .byte 0x0
+ 2769 0149 04 .uleb128 0x4
+ 2770 014a 00000000 .long .LASF32
+ 2771 014e 05 .byte 0x5
+ 2772 014f 42 .byte 0x42
+ 2773 0150 86000000 .long 0x86
+
GAS LISTING /tmp/ccWvEaWW.s page 77
+
+
+ 2774 0154 04 .uleb128 0x4
+ 2775 0155 00000000 .long .LASF33
+ 2776 0159 06 .byte 0x6
+ 2777 015a 20 .byte 0x20
+ 2778 015b 5F010000 .long 0x15f
+ 2779 015f 05 .uleb128 0x5
+ 2780 0160 00000000 .long .LASF33
+ 2781 0164 48 .byte 0x48
+ 2782 0165 06 .byte 0x6
+ 2783 0166 20 .byte 0x20
+ 2784 0167 F7010000 .long 0x1f7
+ 2785 016b 06 .uleb128 0x6
+ 2786 016c 00000000 .long .LASF35
+ 2787 0170 07 .byte 0x7
+ 2788 0171 9A .byte 0x9a
+ 2789 0172 49010000 .long 0x149
+ 2790 0176 02 .byte 0x2
+ 2791 0177 23 .byte 0x23
+ 2792 0178 00 .uleb128 0x0
+ 2793 0179 06 .uleb128 0x6
+ 2794 017a 00000000 .long .LASF36
+ 2795 017e 07 .byte 0x7
+ 2796 017f 9B .byte 0x9b
+ 2797 0180 62000000 .long 0x62
+ 2798 0184 02 .byte 0x2
+ 2799 0185 23 .byte 0x23
+ 2800 0186 04 .uleb128 0x4
+ 2801 0187 0E .uleb128 0xe
+ 2802 0188 767400 .string "vt"
+ 2803 018b 07 .byte 0x7
+ 2804 018c 9C .byte 0x9c
+ 2805 018d BC040000 .long 0x4bc
+ 2806 0191 02 .byte 0x2
+ 2807 0192 23 .byte 0x23
+ 2808 0193 08 .uleb128 0x8
+ 2809 0194 06 .uleb128 0x6
+ 2810 0195 00000000 .long .LASF37
+ 2811 0199 07 .byte 0x7
+ 2812 019a 9D .byte 0x9d
+ 2813 019b B6000000 .long 0xb6
+ 2814 019f 02 .byte 0x2
+ 2815 01a0 23 .byte 0x23
+ 2816 01a1 10 .uleb128 0x10
+ 2817 01a2 06 .uleb128 0x6
+ 2818 01a3 00000000 .long .LASF38
+ 2819 01a7 07 .byte 0x7
+ 2820 01a8 9E .byte 0x9e
+ 2821 01a9 B4000000 .long 0xb4
+ 2822 01ad 02 .byte 0x2
+ 2823 01ae 23 .byte 0x23
+ 2824 01af 18 .uleb128 0x18
+ 2825 01b0 06 .uleb128 0x6
+ 2826 01b1 00000000 .long .LASF39
+ 2827 01b5 07 .byte 0x7
+ 2828 01b6 9F .byte 0x9f
+ 2829 01b7 B4000000 .long 0xb4
+ 2830 01bb 02 .byte 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 78
+
+
+ 2831 01bc 23 .byte 0x23
+ 2832 01bd 20 .uleb128 0x20
+ 2833 01be 06 .uleb128 0x6
+ 2834 01bf 00000000 .long .LASF40
+ 2835 01c3 07 .byte 0x7
+ 2836 01c4 A0 .byte 0xa0
+ 2837 01c5 B4000000 .long 0xb4
+ 2838 01c9 02 .byte 0x2
+ 2839 01ca 23 .byte 0x23
+ 2840 01cb 28 .uleb128 0x28
+ 2841 01cc 06 .uleb128 0x6
+ 2842 01cd 00000000 .long .LASF41
+ 2843 01d1 07 .byte 0x7
+ 2844 01d2 A1 .byte 0xa1
+ 2845 01d3 B4000000 .long 0xb4
+ 2846 01d7 02 .byte 0x2
+ 2847 01d8 23 .byte 0x23
+ 2848 01d9 30 .uleb128 0x30
+ 2849 01da 06 .uleb128 0x6
+ 2850 01db 00000000 .long .LASF42
+ 2851 01df 07 .byte 0x7
+ 2852 01e0 A2 .byte 0xa2
+ 2853 01e1 F7010000 .long 0x1f7
+ 2854 01e5 02 .byte 0x2
+ 2855 01e6 23 .byte 0x23
+ 2856 01e7 38 .uleb128 0x38
+ 2857 01e8 06 .uleb128 0x6
+ 2858 01e9 00000000 .long .LASF43
+ 2859 01ed 07 .byte 0x7
+ 2860 01ee A3 .byte 0xa3
+ 2861 01ef F7010000 .long 0x1f7
+ 2862 01f3 02 .byte 0x2
+ 2863 01f4 23 .byte 0x23
+ 2864 01f5 40 .uleb128 0x40
+ 2865 01f6 00 .byte 0x0
+ 2866 01f7 04 .uleb128 0x4
+ 2867 01f8 00000000 .long .LASF44
+ 2868 01fc 06 .byte 0x6
+ 2869 01fd 40 .byte 0x40
+ 2870 01fe 02020000 .long 0x202
+ 2871 0202 0A .uleb128 0xa
+ 2872 0203 08 .byte 0x8
+ 2873 0204 08020000 .long 0x208
+ 2874 0208 0F .uleb128 0xf
+ 2875 0209 01 .byte 0x1
+ 2876 020a 14020000 .long 0x214
+ 2877 020e 10 .uleb128 0x10
+ 2878 020f B4000000 .long 0xb4
+ 2879 0213 00 .byte 0x0
+ 2880 0214 04 .uleb128 0x4
+ 2881 0215 00000000 .long .LASF45
+ 2882 0219 07 .byte 0x7
+ 2883 021a 2C .byte 0x2c
+ 2884 021b 1F020000 .long 0x21f
+ 2885 021f 05 .uleb128 0x5
+ 2886 0220 00000000 .long .LASF45
+ 2887 0224 50 .byte 0x50
+
GAS LISTING /tmp/ccWvEaWW.s page 79
+
+
+ 2888 0225 07 .byte 0x7
+ 2889 0226 2B .byte 0x2b
+ 2890 0227 48020000 .long 0x248
+ 2891 022b 0E .uleb128 0xe
+ 2892 022c 64616400 .string "dad"
+ 2893 0230 01 .byte 0x1
+ 2894 0231 3E .byte 0x3e
+ 2895 0232 54010000 .long 0x154
+ 2896 0236 02 .byte 0x2
+ 2897 0237 23 .byte 0x23
+ 2898 0238 00 .uleb128 0x0
+ 2899 0239 06 .uleb128 0x6
+ 2900 023a 00000000 .long .LASF46
+ 2901 023e 01 .byte 0x1
+ 2902 023f 3F .byte 0x3f
+ 2903 0240 5C070000 .long 0x75c
+ 2904 0244 02 .byte 0x2
+ 2905 0245 23 .byte 0x23
+ 2906 0246 48 .uleb128 0x48
+ 2907 0247 00 .byte 0x0
+ 2908 0248 04 .uleb128 0x4
+ 2909 0249 00000000 .long .LASF47
+ 2910 024d 07 .byte 0x7
+ 2911 024e 2F .byte 0x2f
+ 2912 024f 53020000 .long 0x253
+ 2913 0253 05 .uleb128 0x5
+ 2914 0254 00000000 .long .LASF47
+ 2915 0258 08 .byte 0x8
+ 2916 0259 07 .byte 0x7
+ 2917 025a 2F .byte 0x2f
+ 2918 025b 7C020000 .long 0x27c
+ 2919 025f 0E .uleb128 0xe
+ 2920 0260 6D616A00 .string "maj"
+ 2921 0264 07 .byte 0x7
+ 2922 0265 32 .byte 0x32
+ 2923 0266 62000000 .long 0x62
+ 2924 026a 02 .byte 0x2
+ 2925 026b 23 .byte 0x23
+ 2926 026c 00 .uleb128 0x0
+ 2927 026d 0E .uleb128 0xe
+ 2928 026e 6D696E00 .string "min"
+ 2929 0272 07 .byte 0x7
+ 2930 0273 33 .byte 0x33
+ 2931 0274 62000000 .long 0x62
+ 2932 0278 02 .byte 0x2
+ 2933 0279 23 .byte 0x23
+ 2934 027a 04 .uleb128 0x4
+ 2935 027b 00 .byte 0x0
+ 2936 027c 04 .uleb128 0x4
+ 2937 027d 00000000 .long .LASF48
+ 2938 0281 07 .byte 0x7
+ 2939 0282 37 .byte 0x37
+ 2940 0283 87020000 .long 0x287
+ 2941 0287 05 .uleb128 0x5
+ 2942 0288 00000000 .long .LASF48
+ 2943 028c B0 .byte 0xb0
+ 2944 028d 07 .byte 0x7
+
GAS LISTING /tmp/ccWvEaWW.s page 80
+
+
+ 2945 028e 37 .byte 0x37
+ 2946 028f CE030000 .long 0x3ce
+ 2947 0293 06 .uleb128 0x6
+ 2948 0294 00000000 .long .LASF49
+ 2949 0298 07 .byte 0x7
+ 2950 0299 3A .byte 0x3a
+ 2951 029a 48020000 .long 0x248
+ 2952 029e 02 .byte 0x2
+ 2953 029f 23 .byte 0x23
+ 2954 02a0 00 .uleb128 0x0
+ 2955 02a1 06 .uleb128 0x6
+ 2956 02a2 00000000 .long .LASF50
+ 2957 02a6 07 .byte 0x7
+ 2958 02a7 3E .byte 0x3e
+ 2959 02a8 E4030000 .long 0x3e4
+ 2960 02ac 02 .byte 0x2
+ 2961 02ad 23 .byte 0x23
+ 2962 02ae 08 .uleb128 0x8
+ 2963 02af 06 .uleb128 0x6
+ 2964 02b0 00000000 .long .LASF51
+ 2965 02b4 07 .byte 0x7
+ 2966 02b5 40 .byte 0x40
+ 2967 02b6 04040000 .long 0x404
+ 2968 02ba 02 .byte 0x2
+ 2969 02bb 23 .byte 0x23
+ 2970 02bc 10 .uleb128 0x10
+ 2971 02bd 06 .uleb128 0x6
+ 2972 02be 00000000 .long .LASF52
+ 2973 02c2 07 .byte 0x7
+ 2974 02c3 44 .byte 0x44
+ 2975 02c4 04040000 .long 0x404
+ 2976 02c8 02 .byte 0x2
+ 2977 02c9 23 .byte 0x23
+ 2978 02ca 18 .uleb128 0x18
+ 2979 02cb 06 .uleb128 0x6
+ 2980 02cc 00000000 .long .LASF53
+ 2981 02d0 07 .byte 0x7
+ 2982 02d1 48 .byte 0x48
+ 2983 02d2 26040000 .long 0x426
+ 2984 02d6 02 .byte 0x2
+ 2985 02d7 23 .byte 0x23
+ 2986 02d8 20 .uleb128 0x20
+ 2987 02d9 06 .uleb128 0x6
+ 2988 02da 00000000 .long .LASF54
+ 2989 02de 07 .byte 0x7
+ 2990 02df 4B .byte 0x4b
+ 2991 02e0 26040000 .long 0x426
+ 2992 02e4 02 .byte 0x2
+ 2993 02e5 23 .byte 0x23
+ 2994 02e6 28 .uleb128 0x28
+ 2995 02e7 06 .uleb128 0x6
+ 2996 02e8 00000000 .long .LASF55
+ 2997 02ec 07 .byte 0x7
+ 2998 02ed 4E .byte 0x4e
+ 2999 02ee 41040000 .long 0x441
+ 3000 02f2 02 .byte 0x2
+ 3001 02f3 23 .byte 0x23
+
GAS LISTING /tmp/ccWvEaWW.s page 81
+
+
+ 3002 02f4 30 .uleb128 0x30
+ 3003 02f5 06 .uleb128 0x6
+ 3004 02f6 00000000 .long .LASF56
+ 3005 02fa 07 .byte 0x7
+ 3006 02fb 51 .byte 0x51
+ 3007 02fc 41040000 .long 0x441
+ 3008 0300 02 .byte 0x2
+ 3009 0301 23 .byte 0x23
+ 3010 0302 38 .uleb128 0x38
+ 3011 0303 06 .uleb128 0x6
+ 3012 0304 00000000 .long .LASF57
+ 3013 0308 07 .byte 0x7
+ 3014 0309 55 .byte 0x55
+ 3015 030a 6C040000 .long 0x46c
+ 3016 030e 02 .byte 0x2
+ 3017 030f 23 .byte 0x23
+ 3018 0310 40 .uleb128 0x40
+ 3019 0311 06 .uleb128 0x6
+ 3020 0312 00000000 .long .LASF58
+ 3021 0316 07 .byte 0x7
+ 3022 0317 58 .byte 0x58
+ 3023 0318 6C040000 .long 0x46c
+ 3024 031c 02 .byte 0x2
+ 3025 031d 23 .byte 0x23
+ 3026 031e 48 .uleb128 0x48
+ 3027 031f 06 .uleb128 0x6
+ 3028 0320 00000000 .long .LASF59
+ 3029 0324 07 .byte 0x7
+ 3030 0325 5D .byte 0x5d
+ 3031 0326 91040000 .long 0x491
+ 3032 032a 02 .byte 0x2
+ 3033 032b 23 .byte 0x23
+ 3034 032c 50 .uleb128 0x50
+ 3035 032d 06 .uleb128 0x6
+ 3036 032e 00000000 .long .LASF60
+ 3037 0332 07 .byte 0x7
+ 3038 0333 62 .byte 0x62
+ 3039 0334 91040000 .long 0x491
+ 3040 0338 02 .byte 0x2
+ 3041 0339 23 .byte 0x23
+ 3042 033a 58 .uleb128 0x58
+ 3043 033b 06 .uleb128 0x6
+ 3044 033c 00000000 .long .LASF61
+ 3045 0340 07 .byte 0x7
+ 3046 0341 68 .byte 0x68
+ 3047 0342 B6040000 .long 0x4b6
+ 3048 0346 02 .byte 0x2
+ 3049 0347 23 .byte 0x23
+ 3050 0348 60 .uleb128 0x60
+ 3051 0349 06 .uleb128 0x6
+ 3052 034a 00000000 .long .LASF62
+ 3053 034e 07 .byte 0x7
+ 3054 034f 6C .byte 0x6c
+ 3055 0350 B6040000 .long 0x4b6
+ 3056 0354 02 .byte 0x2
+ 3057 0355 23 .byte 0x23
+ 3058 0356 68 .uleb128 0x68
+
GAS LISTING /tmp/ccWvEaWW.s page 82
+
+
+ 3059 0357 06 .uleb128 0x6
+ 3060 0358 00000000 .long .LASF63
+ 3061 035c 07 .byte 0x7
+ 3062 035d 72 .byte 0x72
+ 3063 035e B6040000 .long 0x4b6
+ 3064 0362 02 .byte 0x2
+ 3065 0363 23 .byte 0x23
+ 3066 0364 70 .uleb128 0x70
+ 3067 0365 06 .uleb128 0x6
+ 3068 0366 00000000 .long .LASF64
+ 3069 036a 07 .byte 0x7
+ 3070 036b 74 .byte 0x74
+ 3071 036c B6040000 .long 0x4b6
+ 3072 0370 02 .byte 0x2
+ 3073 0371 23 .byte 0x23
+ 3074 0372 78 .uleb128 0x78
+ 3075 0373 06 .uleb128 0x6
+ 3076 0374 00000000 .long .LASF65
+ 3077 0378 07 .byte 0x7
+ 3078 0379 78 .byte 0x78
+ 3079 037a B6040000 .long 0x4b6
+ 3080 037e 03 .byte 0x3
+ 3081 037f 23 .byte 0x23
+ 3082 0380 8001 .uleb128 0x80
+ 3083 0382 06 .uleb128 0x6
+ 3084 0383 00000000 .long .LASF66
+ 3085 0387 07 .byte 0x7
+ 3086 0388 7A .byte 0x7a
+ 3087 0389 B6040000 .long 0x4b6
+ 3088 038d 03 .byte 0x3
+ 3089 038e 23 .byte 0x23
+ 3090 038f 8801 .uleb128 0x88
+ 3091 0391 06 .uleb128 0x6
+ 3092 0392 00000000 .long .LASF67
+ 3093 0396 07 .byte 0x7
+ 3094 0397 7E .byte 0x7e
+ 3095 0398 B6040000 .long 0x4b6
+ 3096 039c 03 .byte 0x3
+ 3097 039d 23 .byte 0x23
+ 3098 039e 9001 .uleb128 0x90
+ 3099 03a0 06 .uleb128 0x6
+ 3100 03a1 00000000 .long .LASF68
+ 3101 03a5 07 .byte 0x7
+ 3102 03a6 80 .byte 0x80
+ 3103 03a7 B6040000 .long 0x4b6
+ 3104 03ab 03 .byte 0x3
+ 3105 03ac 23 .byte 0x23
+ 3106 03ad 9801 .uleb128 0x98
+ 3107 03af 06 .uleb128 0x6
+ 3108 03b0 00000000 .long .LASF69
+ 3109 03b4 07 .byte 0x7
+ 3110 03b5 84 .byte 0x84
+ 3111 03b6 B6040000 .long 0x4b6
+ 3112 03ba 03 .byte 0x3
+ 3113 03bb 23 .byte 0x23
+ 3114 03bc A001 .uleb128 0xa0
+ 3115 03be 06 .uleb128 0x6
+
GAS LISTING /tmp/ccWvEaWW.s page 83
+
+
+ 3116 03bf 00000000 .long .LASF70
+ 3117 03c3 07 .byte 0x7
+ 3118 03c4 86 .byte 0x86
+ 3119 03c5 B6040000 .long 0x4b6
+ 3120 03c9 03 .byte 0x3
+ 3121 03ca 23 .byte 0x23
+ 3122 03cb A801 .uleb128 0xa8
+ 3123 03cd 00 .byte 0x0
+ 3124 03ce 11 .uleb128 0x11
+ 3125 03cf 01 .byte 0x1
+ 3126 03d0 7B000000 .long 0x7b
+ 3127 03d4 DE030000 .long 0x3de
+ 3128 03d8 10 .uleb128 0x10
+ 3129 03d9 DE030000 .long 0x3de
+ 3130 03dd 00 .byte 0x0
+ 3131 03de 0A .uleb128 0xa
+ 3132 03df 08 .byte 0x8
+ 3133 03e0 14020000 .long 0x214
+ 3134 03e4 0A .uleb128 0xa
+ 3135 03e5 08 .byte 0x8
+ 3136 03e6 CE030000 .long 0x3ce
+ 3137 03ea 11 .uleb128 0x11
+ 3138 03eb 01 .byte 0x1
+ 3139 03ec 7B000000 .long 0x7b
+ 3140 03f0 04040000 .long 0x404
+ 3141 03f4 10 .uleb128 0x10
+ 3142 03f5 DE030000 .long 0x3de
+ 3143 03f9 10 .uleb128 0x10
+ 3144 03fa B6000000 .long 0xb6
+ 3145 03fe 10 .uleb128 0x10
+ 3146 03ff 62000000 .long 0x62
+ 3147 0403 00 .byte 0x0
+ 3148 0404 0A .uleb128 0xa
+ 3149 0405 08 .byte 0x8
+ 3150 0406 EA030000 .long 0x3ea
+ 3151 040a 11 .uleb128 0x11
+ 3152 040b 01 .byte 0x1
+ 3153 040c 7B000000 .long 0x7b
+ 3154 0410 1F040000 .long 0x41f
+ 3155 0414 10 .uleb128 0x10
+ 3156 0415 DE030000 .long 0x3de
+ 3157 0419 10 .uleb128 0x10
+ 3158 041a 1F040000 .long 0x41f
+ 3159 041e 00 .byte 0x0
+ 3160 041f 0A .uleb128 0xa
+ 3161 0420 08 .byte 0x8
+ 3162 0421 25040000 .long 0x425
+ 3163 0425 12 .uleb128 0x12
+ 3164 0426 0A .uleb128 0xa
+ 3165 0427 08 .byte 0x8
+ 3166 0428 0A040000 .long 0x40a
+ 3167 042c 11 .uleb128 0x11
+ 3168 042d 01 .byte 0x1
+ 3169 042e 7B000000 .long 0x7b
+ 3170 0432 41040000 .long 0x441
+ 3171 0436 10 .uleb128 0x10
+ 3172 0437 DE030000 .long 0x3de
+
GAS LISTING /tmp/ccWvEaWW.s page 84
+
+
+ 3173 043b 10 .uleb128 0x10
+ 3174 043c F7010000 .long 0x1f7
+ 3175 0440 00 .byte 0x0
+ 3176 0441 0A .uleb128 0xa
+ 3177 0442 08 .byte 0x8
+ 3178 0443 2C040000 .long 0x42c
+ 3179 0447 11 .uleb128 0x11
+ 3180 0448 01 .byte 0x1
+ 3181 0449 7B000000 .long 0x7b
+ 3182 044d 61040000 .long 0x461
+ 3183 0451 10 .uleb128 0x10
+ 3184 0452 61040000 .long 0x461
+ 3185 0456 10 .uleb128 0x10
+ 3186 0457 1F040000 .long 0x41f
+ 3187 045b 10 .uleb128 0x10
+ 3188 045c B4000000 .long 0xb4
+ 3189 0460 00 .byte 0x0
+ 3190 0461 0A .uleb128 0xa
+ 3191 0462 08 .byte 0x8
+ 3192 0463 67040000 .long 0x467
+ 3193 0467 0B .uleb128 0xb
+ 3194 0468 14020000 .long 0x214
+ 3195 046c 0A .uleb128 0xa
+ 3196 046d 08 .byte 0x8
+ 3197 046e 47040000 .long 0x447
+ 3198 0472 11 .uleb128 0x11
+ 3199 0473 01 .byte 0x1
+ 3200 0474 7B000000 .long 0x7b
+ 3201 0478 91040000 .long 0x491
+ 3202 047c 10 .uleb128 0x10
+ 3203 047d 61040000 .long 0x461
+ 3204 0481 10 .uleb128 0x10
+ 3205 0482 1F040000 .long 0x41f
+ 3206 0486 10 .uleb128 0x10
+ 3207 0487 B4000000 .long 0xb4
+ 3208 048b 10 .uleb128 0x10
+ 3209 048c 62000000 .long 0x62
+ 3210 0490 00 .byte 0x0
+ 3211 0491 0A .uleb128 0xa
+ 3212 0492 08 .byte 0x8
+ 3213 0493 72040000 .long 0x472
+ 3214 0497 11 .uleb128 0x11
+ 3215 0498 01 .byte 0x1
+ 3216 0499 7B000000 .long 0x7b
+ 3217 049d B6040000 .long 0x4b6
+ 3218 04a1 10 .uleb128 0x10
+ 3219 04a2 DE030000 .long 0x3de
+ 3220 04a6 10 .uleb128 0x10
+ 3221 04a7 1F040000 .long 0x41f
+ 3222 04ab 10 .uleb128 0x10
+ 3223 04ac B4000000 .long 0xb4
+ 3224 04b0 10 .uleb128 0x10
+ 3225 04b1 62000000 .long 0x62
+ 3226 04b5 00 .byte 0x0
+ 3227 04b6 0A .uleb128 0xa
+ 3228 04b7 08 .byte 0x8
+ 3229 04b8 97040000 .long 0x497
+
GAS LISTING /tmp/ccWvEaWW.s page 85
+
+
+ 3230 04bc 04 .uleb128 0x4
+ 3231 04bd 00000000 .long .LASF71
+ 3232 04c1 07 .byte 0x7
+ 3233 04c2 90 .byte 0x90
+ 3234 04c3 C7040000 .long 0x4c7
+ 3235 04c7 13 .uleb128 0x13
+ 3236 04c8 00000000 .long .LASF71
+ 3237 04cc 08 .byte 0x8
+ 3238 04cd 07 .byte 0x7
+ 3239 04ce 90 .byte 0x90
+ 3240 04cf E9040000 .long 0x4e9
+ 3241 04d3 14 .uleb128 0x14
+ 3242 04d4 00000000 .long .LASF49
+ 3243 04d8 07 .byte 0x7
+ 3244 04d9 93 .byte 0x93
+ 3245 04da E9040000 .long 0x4e9
+ 3246 04de 15 .uleb128 0x15
+ 3247 04df 763100 .string "v1"
+ 3248 04e2 07 .byte 0x7
+ 3249 04e3 94 .byte 0x94
+ 3250 04e4 F4040000 .long 0x4f4
+ 3251 04e8 00 .byte 0x0
+ 3252 04e9 0A .uleb128 0xa
+ 3253 04ea 08 .byte 0x8
+ 3254 04eb EF040000 .long 0x4ef
+ 3255 04ef 0B .uleb128 0xb
+ 3256 04f0 48020000 .long 0x248
+ 3257 04f4 0A .uleb128 0xa
+ 3258 04f5 08 .byte 0x8
+ 3259 04f6 FA040000 .long 0x4fa
+ 3260 04fa 0B .uleb128 0xb
+ 3261 04fb 7C020000 .long 0x27c
+ 3262 04ff 02 .uleb128 0x2
+ 3263 0500 08 .byte 0x8
+ 3264 0501 05 .byte 0x5
+ 3265 0502 00000000 .long .LASF72
+ 3266 0506 02 .uleb128 0x2
+ 3267 0507 04 .byte 0x4
+ 3268 0508 04 .byte 0x4
+ 3269 0509 00000000 .long .LASF73
+ 3270 050d 0A .uleb128 0xa
+ 3271 050e 08 .byte 0x8
+ 3272 050f C1000000 .long 0xc1
+ 3273 0513 02 .uleb128 0x2
+ 3274 0514 08 .byte 0x8
+ 3275 0515 07 .byte 0x7
+ 3276 0516 00000000 .long .LASF74
+ 3277 051a 02 .uleb128 0x2
+ 3278 051b 08 .byte 0x8
+ 3279 051c 04 .byte 0x4
+ 3280 051d 00000000 .long .LASF75
+ 3281 0521 04 .uleb128 0x4
+ 3282 0522 00000000 .long .LASF76
+ 3283 0526 08 .byte 0x8
+ 3284 0527 26 .byte 0x26
+ 3285 0528 2C050000 .long 0x52c
+ 3286 052c 16 .uleb128 0x16
+
GAS LISTING /tmp/ccWvEaWW.s page 86
+
+
+ 3287 052d 01 .byte 0x1
+ 3288 052e 49000000 .long 0x49
+ 3289 0532 3D050000 .long 0x53d
+ 3290 0536 17 .uleb128 0x17
+ 3291 0537 B1000000 .long 0xb1
+ 3292 053b 0F .byte 0xf
+ 3293 053c 00 .byte 0x0
+ 3294 053d 04 .uleb128 0x4
+ 3295 053e 00000000 .long .LASF77
+ 3296 0542 09 .byte 0x9
+ 3297 0543 3B .byte 0x3b
+ 3298 0544 21050000 .long 0x521
+ 3299 0548 04 .uleb128 0x4
+ 3300 0549 00000000 .long .LASF78
+ 3301 054d 09 .byte 0x9
+ 3302 054e 43 .byte 0x43
+ 3303 054f 53050000 .long 0x553
+ 3304 0553 05 .uleb128 0x5
+ 3305 0554 00000000 .long .LASF78
+ 3306 0558 08 .byte 0x8
+ 3307 0559 09 .byte 0x9
+ 3308 055a 43 .byte 0x43
+ 3309 055b 7C050000 .long 0x57c
+ 3310 055f 0E .uleb128 0xe
+ 3311 0560 6D616A00 .string "maj"
+ 3312 0564 09 .byte 0x9
+ 3313 0565 46 .byte 0x46
+ 3314 0566 62000000 .long 0x62
+ 3315 056a 02 .byte 0x2
+ 3316 056b 23 .byte 0x23
+ 3317 056c 00 .uleb128 0x0
+ 3318 056d 0E .uleb128 0xe
+ 3319 056e 6D696E00 .string "min"
+ 3320 0572 09 .byte 0x9
+ 3321 0573 47 .byte 0x47
+ 3322 0574 62000000 .long 0x62
+ 3323 0578 02 .byte 0x2
+ 3324 0579 23 .byte 0x23
+ 3325 057a 04 .uleb128 0x4
+ 3326 057b 00 .byte 0x0
+ 3327 057c 04 .uleb128 0x4
+ 3328 057d 00000000 .long .LASF79
+ 3329 0581 09 .byte 0x9
+ 3330 0582 52 .byte 0x52
+ 3331 0583 87050000 .long 0x587
+ 3332 0587 05 .uleb128 0x5
+ 3333 0588 00000000 .long .LASF79
+ 3334 058c 40 .byte 0x40
+ 3335 058d 09 .byte 0x9
+ 3336 058e 52 .byte 0x52
+ 3337 058f 04060000 .long 0x604
+ 3338 0593 06 .uleb128 0x6
+ 3339 0594 00000000 .long .LASF49
+ 3340 0598 09 .byte 0x9
+ 3341 0599 5E .byte 0x5e
+ 3342 059a 48050000 .long 0x548
+ 3343 059e 02 .byte 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 87
+
+
+ 3344 059f 23 .byte 0x23
+ 3345 05a0 00 .uleb128 0x0
+ 3346 05a1 06 .uleb128 0x6
+ 3347 05a2 00000000 .long .LASF50
+ 3348 05a6 09 .byte 0x9
+ 3349 05a7 63 .byte 0x63
+ 3350 05a8 48060000 .long 0x648
+ 3351 05ac 02 .byte 0x2
+ 3352 05ad 23 .byte 0x23
+ 3353 05ae 08 .uleb128 0x8
+ 3354 05af 06 .uleb128 0x6
+ 3355 05b0 00000000 .long .LASF36
+ 3356 05b4 09 .byte 0x9
+ 3357 05b5 65 .byte 0x65
+ 3358 05b6 59060000 .long 0x659
+ 3359 05ba 02 .byte 0x2
+ 3360 05bb 23 .byte 0x23
+ 3361 05bc 10 .uleb128 0x10
+ 3362 05bd 06 .uleb128 0x6
+ 3363 05be 00000000 .long .LASF80
+ 3364 05c2 09 .byte 0x9
+ 3365 05c3 67 .byte 0x67
+ 3366 05c4 59060000 .long 0x659
+ 3367 05c8 02 .byte 0x2
+ 3368 05c9 23 .byte 0x23
+ 3369 05ca 18 .uleb128 0x18
+ 3370 05cb 06 .uleb128 0x6
+ 3371 05cc 00000000 .long .LASF51
+ 3372 05d0 09 .byte 0x9
+ 3373 05d1 69 .byte 0x69
+ 3374 05d2 79060000 .long 0x679
+ 3375 05d6 02 .byte 0x2
+ 3376 05d7 23 .byte 0x23
+ 3377 05d8 20 .uleb128 0x20
+ 3378 05d9 06 .uleb128 0x6
+ 3379 05da 00000000 .long .LASF52
+ 3380 05de 09 .byte 0x9
+ 3381 05df 6D .byte 0x6d
+ 3382 05e0 79060000 .long 0x679
+ 3383 05e4 02 .byte 0x2
+ 3384 05e5 23 .byte 0x23
+ 3385 05e6 28 .uleb128 0x28
+ 3386 05e7 06 .uleb128 0x6
+ 3387 05e8 00000000 .long .LASF57
+ 3388 05ec 09 .byte 0x9
+ 3389 05ed 71 .byte 0x71
+ 3390 05ee 95060000 .long 0x695
+ 3391 05f2 02 .byte 0x2
+ 3392 05f3 23 .byte 0x23
+ 3393 05f4 30 .uleb128 0x30
+ 3394 05f5 06 .uleb128 0x6
+ 3395 05f6 00000000 .long .LASF58
+ 3396 05fa 09 .byte 0x9
+ 3397 05fb 75 .byte 0x75
+ 3398 05fc 95060000 .long 0x695
+ 3399 0600 02 .byte 0x2
+ 3400 0601 23 .byte 0x23
+
GAS LISTING /tmp/ccWvEaWW.s page 88
+
+
+ 3401 0602 38 .uleb128 0x38
+ 3402 0603 00 .byte 0x0
+ 3403 0604 04 .uleb128 0x4
+ 3404 0605 00000000 .long .LASF81
+ 3405 0609 09 .byte 0x9
+ 3406 060a 53 .byte 0x53
+ 3407 060b 0F060000 .long 0x60f
+ 3408 060f 13 .uleb128 0x13
+ 3409 0610 00000000 .long .LASF81
+ 3410 0614 40 .byte 0x40
+ 3411 0615 09 .byte 0x9
+ 3412 0616 53 .byte 0x53
+ 3413 0617 31060000 .long 0x631
+ 3414 061b 14 .uleb128 0x14
+ 3415 061c 00000000 .long .LASF49
+ 3416 0620 09 .byte 0x9
+ 3417 0621 7F .byte 0x7f
+ 3418 0622 48050000 .long 0x548
+ 3419 0626 15 .uleb128 0x15
+ 3420 0627 763100 .string "v1"
+ 3421 062a 09 .byte 0x9
+ 3422 062b 80 .byte 0x80
+ 3423 062c 7C050000 .long 0x57c
+ 3424 0630 00 .byte 0x0
+ 3425 0631 0F .uleb128 0xf
+ 3426 0632 01 .byte 0x1
+ 3427 0633 3D060000 .long 0x63d
+ 3428 0637 10 .uleb128 0x10
+ 3429 0638 3D060000 .long 0x63d
+ 3430 063c 00 .byte 0x0
+ 3431 063d 0A .uleb128 0xa
+ 3432 063e 08 .byte 0x8
+ 3433 063f 43060000 .long 0x643
+ 3434 0643 0B .uleb128 0xb
+ 3435 0644 04060000 .long 0x604
+ 3436 0648 0A .uleb128 0xa
+ 3437 0649 08 .byte 0x8
+ 3438 064a 31060000 .long 0x631
+ 3439 064e 18 .uleb128 0x18
+ 3440 064f 62000000 .long 0x62
+ 3441 0653 59060000 .long 0x659
+ 3442 0657 19 .uleb128 0x19
+ 3443 0658 00 .byte 0x0
+ 3444 0659 0A .uleb128 0xa
+ 3445 065a 08 .byte 0x8
+ 3446 065b 4E060000 .long 0x64e
+ 3447 065f 11 .uleb128 0x11
+ 3448 0660 01 .byte 0x1
+ 3449 0661 7B000000 .long 0x7b
+ 3450 0665 79060000 .long 0x679
+ 3451 0669 10 .uleb128 0x10
+ 3452 066a B4000000 .long 0xb4
+ 3453 066e 10 .uleb128 0x10
+ 3454 066f B6000000 .long 0xb6
+ 3455 0673 10 .uleb128 0x10
+ 3456 0674 62000000 .long 0x62
+ 3457 0678 00 .byte 0x0
+
GAS LISTING /tmp/ccWvEaWW.s page 89
+
+
+ 3458 0679 0A .uleb128 0xa
+ 3459 067a 08 .byte 0x8
+ 3460 067b 5F060000 .long 0x65f
+ 3461 067f 0F .uleb128 0xf
+ 3462 0680 01 .byte 0x1
+ 3463 0681 95060000 .long 0x695
+ 3464 0685 10 .uleb128 0x10
+ 3465 0686 B6000000 .long 0xb6
+ 3466 068a 10 .uleb128 0x10
+ 3467 068b 0D050000 .long 0x50d
+ 3468 068f 10 .uleb128 0x10
+ 3469 0690 1F040000 .long 0x41f
+ 3470 0694 00 .byte 0x0
+ 3471 0695 0A .uleb128 0xa
+ 3472 0696 08 .byte 0x8
+ 3473 0697 7F060000 .long 0x67f
+ 3474 069b 04 .uleb128 0x4
+ 3475 069c 00000000 .long .LASF82
+ 3476 06a0 09 .byte 0x9
+ 3477 06a1 84 .byte 0x84
+ 3478 06a2 A6060000 .long 0x6a6
+ 3479 06a6 05 .uleb128 0x5
+ 3480 06a7 00000000 .long .LASF82
+ 3481 06ab 40 .byte 0x40
+ 3482 06ac 09 .byte 0x9
+ 3483 06ad 84 .byte 0x84
+ 3484 06ae 23070000 .long 0x723
+ 3485 06b2 06 .uleb128 0x6
+ 3486 06b3 00000000 .long .LASF49
+ 3487 06b7 09 .byte 0x9
+ 3488 06b8 90 .byte 0x90
+ 3489 06b9 48050000 .long 0x548
+ 3490 06bd 02 .byte 0x2
+ 3491 06be 23 .byte 0x23
+ 3492 06bf 00 .uleb128 0x0
+ 3493 06c0 06 .uleb128 0x6
+ 3494 06c1 00000000 .long .LASF50
+ 3495 06c5 09 .byte 0x9
+ 3496 06c6 95 .byte 0x95
+ 3497 06c7 67070000 .long 0x767
+ 3498 06cb 02 .byte 0x2
+ 3499 06cc 23 .byte 0x23
+ 3500 06cd 08 .uleb128 0x8
+ 3501 06ce 06 .uleb128 0x6
+ 3502 06cf 00000000 .long .LASF36
+ 3503 06d3 09 .byte 0x9
+ 3504 06d4 97 .byte 0x97
+ 3505 06d5 59060000 .long 0x659
+ 3506 06d9 02 .byte 0x2
+ 3507 06da 23 .byte 0x23
+ 3508 06db 10 .uleb128 0x10
+ 3509 06dc 06 .uleb128 0x6
+ 3510 06dd 00000000 .long .LASF80
+ 3511 06e1 09 .byte 0x9
+ 3512 06e2 99 .byte 0x99
+ 3513 06e3 59060000 .long 0x659
+ 3514 06e7 02 .byte 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 90
+
+
+ 3515 06e8 23 .byte 0x23
+ 3516 06e9 18 .uleb128 0x18
+ 3517 06ea 06 .uleb128 0x6
+ 3518 06eb 00000000 .long .LASF51
+ 3519 06ef 09 .byte 0x9
+ 3520 06f0 9B .byte 0x9b
+ 3521 06f1 79060000 .long 0x679
+ 3522 06f5 02 .byte 0x2
+ 3523 06f6 23 .byte 0x23
+ 3524 06f7 20 .uleb128 0x20
+ 3525 06f8 06 .uleb128 0x6
+ 3526 06f9 00000000 .long .LASF52
+ 3527 06fd 09 .byte 0x9
+ 3528 06fe 9F .byte 0x9f
+ 3529 06ff 79060000 .long 0x679
+ 3530 0703 02 .byte 0x2
+ 3531 0704 23 .byte 0x23
+ 3532 0705 28 .uleb128 0x28
+ 3533 0706 06 .uleb128 0x6
+ 3534 0707 00000000 .long .LASF57
+ 3535 070b 09 .byte 0x9
+ 3536 070c A3 .byte 0xa3
+ 3537 070d 82070000 .long 0x782
+ 3538 0711 02 .byte 0x2
+ 3539 0712 23 .byte 0x23
+ 3540 0713 30 .uleb128 0x30
+ 3541 0714 06 .uleb128 0x6
+ 3542 0715 00000000 .long .LASF58
+ 3543 0719 09 .byte 0x9
+ 3544 071a A6 .byte 0xa6
+ 3545 071b 82070000 .long 0x782
+ 3546 071f 02 .byte 0x2
+ 3547 0720 23 .byte 0x23
+ 3548 0721 38 .uleb128 0x38
+ 3549 0722 00 .byte 0x0
+ 3550 0723 04 .uleb128 0x4
+ 3551 0724 00000000 .long .LASF83
+ 3552 0728 09 .byte 0x9
+ 3553 0729 85 .byte 0x85
+ 3554 072a 2E070000 .long 0x72e
+ 3555 072e 13 .uleb128 0x13
+ 3556 072f 00000000 .long .LASF83
+ 3557 0733 40 .byte 0x40
+ 3558 0734 09 .byte 0x9
+ 3559 0735 85 .byte 0x85
+ 3560 0736 50070000 .long 0x750
+ 3561 073a 14 .uleb128 0x14
+ 3562 073b 00000000 .long .LASF49
+ 3563 073f 09 .byte 0x9
+ 3564 0740 AF .byte 0xaf
+ 3565 0741 48050000 .long 0x548
+ 3566 0745 15 .uleb128 0x15
+ 3567 0746 763100 .string "v1"
+ 3568 0749 09 .byte 0x9
+ 3569 074a B0 .byte 0xb0
+ 3570 074b 9B060000 .long 0x69b
+ 3571 074f 00 .byte 0x0
+
GAS LISTING /tmp/ccWvEaWW.s page 91
+
+
+ 3572 0750 0F .uleb128 0xf
+ 3573 0751 01 .byte 0x1
+ 3574 0752 5C070000 .long 0x75c
+ 3575 0756 10 .uleb128 0x10
+ 3576 0757 5C070000 .long 0x75c
+ 3577 075b 00 .byte 0x0
+ 3578 075c 0A .uleb128 0xa
+ 3579 075d 08 .byte 0x8
+ 3580 075e 62070000 .long 0x762
+ 3581 0762 0B .uleb128 0xb
+ 3582 0763 23070000 .long 0x723
+ 3583 0767 0A .uleb128 0xa
+ 3584 0768 08 .byte 0x8
+ 3585 0769 50070000 .long 0x750
+ 3586 076d 11 .uleb128 0x11
+ 3587 076e 01 .byte 0x1
+ 3588 076f 3D050000 .long 0x53d
+ 3589 0773 82070000 .long 0x782
+ 3590 0777 10 .uleb128 0x10
+ 3591 0778 3D050000 .long 0x53d
+ 3592 077c 10 .uleb128 0x10
+ 3593 077d 1F040000 .long 0x41f
+ 3594 0781 00 .byte 0x0
+ 3595 0782 0A .uleb128 0xa
+ 3596 0783 08 .byte 0x8
+ 3597 0784 6D070000 .long 0x76d
+ 3598 0788 04 .uleb128 0x4
+ 3599 0789 00000000 .long .LASF84
+ 3600 078d 0A .byte 0xa
+ 3601 078e B0 .byte 0xb0
+ 3602 078f 93070000 .long 0x793
+ 3603 0793 1A .uleb128 0x1a
+ 3604 0794 00000000 .long .LASF84
+ 3605 0798 0001 .value 0x100
+ 3606 079a 0A .byte 0xa
+ 3607 079b B0 .byte 0xb0
+ 3608 079c BE070000 .long 0x7be
+ 3609 07a0 06 .uleb128 0x6
+ 3610 07a1 00000000 .long .LASF85
+ 3611 07a5 0A .byte 0xa
+ 3612 07a6 B3 .byte 0xb3
+ 3613 07a7 BE070000 .long 0x7be
+ 3614 07ab 02 .byte 0x2
+ 3615 07ac 23 .byte 0x23
+ 3616 07ad 00 .uleb128 0x0
+ 3617 07ae 06 .uleb128 0x6
+ 3618 07af 00000000 .long .LASF86
+ 3619 07b3 0A .byte 0xa
+ 3620 07b4 B4 .byte 0xb4
+ 3621 07b5 62000000 .long 0x62
+ 3622 07b9 03 .byte 0x3
+ 3623 07ba 23 .byte 0x23
+ 3624 07bb F001 .uleb128 0xf0
+ 3625 07bd 00 .byte 0x0
+ 3626 07be 1B .uleb128 0x1b
+ 3627 07bf 3D050000 .long 0x53d
+ 3628 07c3 CE070000 .long 0x7ce
+
GAS LISTING /tmp/ccWvEaWW.s page 92
+
+
+ 3629 07c7 17 .uleb128 0x17
+ 3630 07c8 B1000000 .long 0xb1
+ 3631 07cc 0E .byte 0xe
+ 3632 07cd 00 .byte 0x0
+ 3633 07ce 04 .uleb128 0x4
+ 3634 07cf 00000000 .long .LASF87
+ 3635 07d3 0A .byte 0xa
+ 3636 07d4 D2 .byte 0xd2
+ 3637 07d5 D9070000 .long 0x7d9
+ 3638 07d9 1A .uleb128 0x1a
+ 3639 07da 00000000 .long .LASF87
+ 3640 07de 7002 .value 0x270
+ 3641 07e0 0A .byte 0xa
+ 3642 07e1 D2 .byte 0xd2
+ 3643 07e2 30080000 .long 0x830
+ 3644 07e6 0E .uleb128 0xe
+ 3645 07e7 64616400 .string "dad"
+ 3646 07eb 0A .byte 0xa
+ 3647 07ec D5 .byte 0xd5
+ 3648 07ed 54010000 .long 0x154
+ 3649 07f1 02 .byte 0x2
+ 3650 07f2 23 .byte 0x23
+ 3651 07f3 00 .uleb128 0x0
+ 3652 07f4 06 .uleb128 0x6
+ 3653 07f5 00000000 .long .LASF88
+ 3654 07f9 0A .byte 0xa
+ 3655 07fa D6 .byte 0xd6
+ 3656 07fb 88070000 .long 0x788
+ 3657 07ff 02 .byte 0x2
+ 3658 0800 23 .byte 0x23
+ 3659 0801 50 .uleb128 0x50
+ 3660 0802 06 .uleb128 0x6
+ 3661 0803 00000000 .long .LASF89
+ 3662 0807 0A .byte 0xa
+ 3663 0808 D7 .byte 0xd7
+ 3664 0809 88070000 .long 0x788
+ 3665 080d 03 .byte 0x3
+ 3666 080e 23 .byte 0x23
+ 3667 080f D002 .uleb128 0x150
+ 3668 0811 06 .uleb128 0x6
+ 3669 0812 00000000 .long .LASF90
+ 3670 0816 0A .byte 0xa
+ 3671 0817 D8 .byte 0xd8
+ 3672 0818 3D050000 .long 0x53d
+ 3673 081c 03 .byte 0x3
+ 3674 081d 23 .byte 0x23
+ 3675 081e D004 .uleb128 0x250
+ 3676 0820 06 .uleb128 0x6
+ 3677 0821 00000000 .long .LASF91
+ 3678 0825 0A .byte 0xa
+ 3679 0826 D9 .byte 0xd9
+ 3680 0827 3D050000 .long 0x53d
+ 3681 082b 03 .byte 0x3
+ 3682 082c 23 .byte 0x23
+ 3683 082d E004 .uleb128 0x260
+ 3684 082f 00 .byte 0x0
+ 3685 0830 04 .uleb128 0x4
+
GAS LISTING /tmp/ccWvEaWW.s page 93
+
+
+ 3686 0831 00000000 .long .LASF92
+ 3687 0835 0B .byte 0xb
+ 3688 0836 29 .byte 0x29
+ 3689 0837 3B080000 .long 0x83b
+ 3690 083b 05 .uleb128 0x5
+ 3691 083c 00000000 .long .LASF92
+ 3692 0840 70 .byte 0x70
+ 3693 0841 0B .byte 0xb
+ 3694 0842 29 .byte 0x29
+ 3695 0843 72080000 .long 0x872
+ 3696 0847 0E .uleb128 0xe
+ 3697 0848 64616400 .string "dad"
+ 3698 084c 0B .byte 0xb
+ 3699 084d 2C .byte 0x2c
+ 3700 084e 54010000 .long 0x154
+ 3701 0852 02 .byte 0x2
+ 3702 0853 23 .byte 0x23
+ 3703 0854 00 .uleb128 0x0
+ 3704 0855 06 .uleb128 0x6
+ 3705 0856 00000000 .long .LASF90
+ 3706 085a 0B .byte 0xb
+ 3707 085b 2D .byte 0x2d
+ 3708 085c 3D050000 .long 0x53d
+ 3709 0860 02 .byte 0x2
+ 3710 0861 23 .byte 0x23
+ 3711 0862 50 .uleb128 0x50
+ 3712 0863 06 .uleb128 0x6
+ 3713 0864 00000000 .long .LASF91
+ 3714 0868 0B .byte 0xb
+ 3715 0869 2E .byte 0x2e
+ 3716 086a 3D050000 .long 0x53d
+ 3717 086e 02 .byte 0x2
+ 3718 086f 23 .byte 0x23
+ 3719 0870 60 .uleb128 0x60
+ 3720 0871 00 .byte 0x0
+ 3721 0872 04 .uleb128 0x4
+ 3722 0873 00000000 .long .LASF93
+ 3723 0877 0C .byte 0xc
+ 3724 0878 48 .byte 0x48
+ 3725 0879 62000000 .long 0x62
+ 3726 087d 0C .uleb128 0xc
+ 3727 087e 04 .byte 0x4
+ 3728 087f 0C .byte 0xc
+ 3729 0880 4A .byte 0x4a
+ 3730 0881 98080000 .long 0x898
+ 3731 0885 0D .uleb128 0xd
+ 3732 0886 00000000 .long .LASF94
+ 3733 088a 00 .sleb128 0
+ 3734 088b 0D .uleb128 0xd
+ 3735 088c 00000000 .long .LASF95
+ 3736 0890 01 .sleb128 1
+ 3737 0891 0D .uleb128 0xd
+ 3738 0892 00000000 .long .LASF96
+ 3739 0896 02 .sleb128 2
+ 3740 0897 00 .byte 0x0
+ 3741 0898 04 .uleb128 0x4
+ 3742 0899 00000000 .long .LASF97
+
GAS LISTING /tmp/ccWvEaWW.s page 94
+
+
+ 3743 089d 0E .byte 0xe
+ 3744 089e 40 .byte 0x40
+ 3745 089f A3080000 .long 0x8a3
+ 3746 08a3 13 .uleb128 0x13
+ 3747 08a4 00000000 .long .LASF97
+ 3748 08a8 40 .byte 0x40
+ 3749 08a9 0E .byte 0xe
+ 3750 08aa 40 .byte 0x40
+ 3751 08ab C6080000 .long 0x8c6
+ 3752 08af 14 .uleb128 0x14
+ 3753 08b0 00000000 .long .LASF98
+ 3754 08b4 0E .byte 0xe
+ 3755 08b5 43 .byte 0x43
+ 3756 08b6 04060000 .long 0x604
+ 3757 08ba 15 .uleb128 0x15
+ 3758 08bb 76656300 .string "vec"
+ 3759 08bf 0E .byte 0xe
+ 3760 08c0 44 .byte 0x44
+ 3761 08c1 23070000 .long 0x723
+ 3762 08c5 00 .byte 0x0
+ 3763 08c6 1C .uleb128 0x1c
+ 3764 08c7 00000000 .long .LASF121
+ 3765 08cb 04 .byte 0x4
+ 3766 08cc 0F .byte 0xf
+ 3767 08cd 5A .byte 0x5a
+ 3768 08ce 57090000 .long 0x957
+ 3769 08d2 0D .uleb128 0xd
+ 3770 08d3 00000000 .long .LASF99
+ 3771 08d7 00 .sleb128 0
+ 3772 08d8 0D .uleb128 0xd
+ 3773 08d9 00000000 .long .LASF100
+ 3774 08dd 01 .sleb128 1
+ 3775 08de 0D .uleb128 0xd
+ 3776 08df 00000000 .long .LASF101
+ 3777 08e3 02 .sleb128 2
+ 3778 08e4 0D .uleb128 0xd
+ 3779 08e5 00000000 .long .LASF102
+ 3780 08e9 03 .sleb128 3
+ 3781 08ea 0D .uleb128 0xd
+ 3782 08eb 00000000 .long .LASF103
+ 3783 08ef 04 .sleb128 4
+ 3784 08f0 0D .uleb128 0xd
+ 3785 08f1 00000000 .long .LASF104
+ 3786 08f5 05 .sleb128 5
+ 3787 08f6 0D .uleb128 0xd
+ 3788 08f7 00000000 .long .LASF105
+ 3789 08fb 06 .sleb128 6
+ 3790 08fc 0D .uleb128 0xd
+ 3791 08fd 00000000 .long .LASF106
+ 3792 0901 07 .sleb128 7
+ 3793 0902 0D .uleb128 0xd
+ 3794 0903 00000000 .long .LASF107
+ 3795 0907 08 .sleb128 8
+ 3796 0908 0D .uleb128 0xd
+ 3797 0909 00000000 .long .LASF108
+ 3798 090d 09 .sleb128 9
+ 3799 090e 0D .uleb128 0xd
+
GAS LISTING /tmp/ccWvEaWW.s page 95
+
+
+ 3800 090f 00000000 .long .LASF109
+ 3801 0913 0A .sleb128 10
+ 3802 0914 0D .uleb128 0xd
+ 3803 0915 00000000 .long .LASF110
+ 3804 0919 0B .sleb128 11
+ 3805 091a 0D .uleb128 0xd
+ 3806 091b 00000000 .long .LASF111
+ 3807 091f 0C .sleb128 12
+ 3808 0920 0D .uleb128 0xd
+ 3809 0921 00000000 .long .LASF112
+ 3810 0925 0D .sleb128 13
+ 3811 0926 0D .uleb128 0xd
+ 3812 0927 00000000 .long .LASF113
+ 3813 092b 0E .sleb128 14
+ 3814 092c 0D .uleb128 0xd
+ 3815 092d 00000000 .long .LASF114
+ 3816 0931 0E .sleb128 14
+ 3817 0932 0D .uleb128 0xd
+ 3818 0933 00000000 .long .LASF115
+ 3819 0937 0F .sleb128 15
+ 3820 0938 0D .uleb128 0xd
+ 3821 0939 00000000 .long .LASF116
+ 3822 093d 10 .sleb128 16
+ 3823 093e 0D .uleb128 0xd
+ 3824 093f 00000000 .long .LASF117
+ 3825 0943 11 .sleb128 17
+ 3826 0944 0D .uleb128 0xd
+ 3827 0945 00000000 .long .LASF118
+ 3828 0949 12 .sleb128 18
+ 3829 094a 0D .uleb128 0xd
+ 3830 094b 00000000 .long .LASF119
+ 3831 094f 13 .sleb128 19
+ 3832 0950 0D .uleb128 0xd
+ 3833 0951 00000000 .long .LASF120
+ 3834 0955 14 .sleb128 20
+ 3835 0956 00 .byte 0x0
+ 3836 0957 1C .uleb128 0x1c
+ 3837 0958 00000000 .long .LASF122
+ 3838 095c 04 .byte 0x4
+ 3839 095d 0F .byte 0xf
+ 3840 095e 77 .byte 0x77
+ 3841 095f DE0A0000 .long 0xade
+ 3842 0963 0D .uleb128 0xd
+ 3843 0964 00000000 .long .LASF123
+ 3844 0968 00 .sleb128 0
+ 3845 0969 0D .uleb128 0xd
+ 3846 096a 00000000 .long .LASF124
+ 3847 096e 01 .sleb128 1
+ 3848 096f 0D .uleb128 0xd
+ 3849 0970 00000000 .long .LASF125
+ 3850 0974 02 .sleb128 2
+ 3851 0975 0D .uleb128 0xd
+ 3852 0976 00000000 .long .LASF126
+ 3853 097a 03 .sleb128 3
+ 3854 097b 0D .uleb128 0xd
+ 3855 097c 00000000 .long .LASF127
+ 3856 0980 04 .sleb128 4
+
GAS LISTING /tmp/ccWvEaWW.s page 96
+
+
+ 3857 0981 0D .uleb128 0xd
+ 3858 0982 00000000 .long .LASF128
+ 3859 0986 05 .sleb128 5
+ 3860 0987 0D .uleb128 0xd
+ 3861 0988 00000000 .long .LASF129
+ 3862 098c 06 .sleb128 6
+ 3863 098d 0D .uleb128 0xd
+ 3864 098e 00000000 .long .LASF130
+ 3865 0992 07 .sleb128 7
+ 3866 0993 0D .uleb128 0xd
+ 3867 0994 00000000 .long .LASF131
+ 3868 0998 08 .sleb128 8
+ 3869 0999 0D .uleb128 0xd
+ 3870 099a 00000000 .long .LASF132
+ 3871 099e 09 .sleb128 9
+ 3872 099f 0D .uleb128 0xd
+ 3873 09a0 00000000 .long .LASF133
+ 3874 09a4 0A .sleb128 10
+ 3875 09a5 0D .uleb128 0xd
+ 3876 09a6 00000000 .long .LASF134
+ 3877 09aa 0B .sleb128 11
+ 3878 09ab 0D .uleb128 0xd
+ 3879 09ac 00000000 .long .LASF135
+ 3880 09b0 0C .sleb128 12
+ 3881 09b1 0D .uleb128 0xd
+ 3882 09b2 00000000 .long .LASF136
+ 3883 09b6 0D .sleb128 13
+ 3884 09b7 0D .uleb128 0xd
+ 3885 09b8 00000000 .long .LASF137
+ 3886 09bc 0E .sleb128 14
+ 3887 09bd 0D .uleb128 0xd
+ 3888 09be 00000000 .long .LASF138
+ 3889 09c2 0F .sleb128 15
+ 3890 09c3 0D .uleb128 0xd
+ 3891 09c4 00000000 .long .LASF139
+ 3892 09c8 10 .sleb128 16
+ 3893 09c9 0D .uleb128 0xd
+ 3894 09ca 00000000 .long .LASF140
+ 3895 09ce 11 .sleb128 17
+ 3896 09cf 0D .uleb128 0xd
+ 3897 09d0 00000000 .long .LASF141
+ 3898 09d4 12 .sleb128 18
+ 3899 09d5 0D .uleb128 0xd
+ 3900 09d6 00000000 .long .LASF142
+ 3901 09da 13 .sleb128 19
+ 3902 09db 0D .uleb128 0xd
+ 3903 09dc 00000000 .long .LASF143
+ 3904 09e0 14 .sleb128 20
+ 3905 09e1 0D .uleb128 0xd
+ 3906 09e2 00000000 .long .LASF144
+ 3907 09e6 15 .sleb128 21
+ 3908 09e7 0D .uleb128 0xd
+ 3909 09e8 00000000 .long .LASF145
+ 3910 09ec 16 .sleb128 22
+ 3911 09ed 0D .uleb128 0xd
+ 3912 09ee 00000000 .long .LASF146
+ 3913 09f2 17 .sleb128 23
+
GAS LISTING /tmp/ccWvEaWW.s page 97
+
+
+ 3914 09f3 0D .uleb128 0xd
+ 3915 09f4 00000000 .long .LASF147
+ 3916 09f8 18 .sleb128 24
+ 3917 09f9 0D .uleb128 0xd
+ 3918 09fa 00000000 .long .LASF148
+ 3919 09fe 19 .sleb128 25
+ 3920 09ff 0D .uleb128 0xd
+ 3921 0a00 00000000 .long .LASF149
+ 3922 0a04 1A .sleb128 26
+ 3923 0a05 0D .uleb128 0xd
+ 3924 0a06 00000000 .long .LASF150
+ 3925 0a0a 1B .sleb128 27
+ 3926 0a0b 0D .uleb128 0xd
+ 3927 0a0c 00000000 .long .LASF151
+ 3928 0a10 1C .sleb128 28
+ 3929 0a11 0D .uleb128 0xd
+ 3930 0a12 00000000 .long .LASF152
+ 3931 0a16 1D .sleb128 29
+ 3932 0a17 0D .uleb128 0xd
+ 3933 0a18 00000000 .long .LASF153
+ 3934 0a1c 1E .sleb128 30
+ 3935 0a1d 0D .uleb128 0xd
+ 3936 0a1e 00000000 .long .LASF154
+ 3937 0a22 1F .sleb128 31
+ 3938 0a23 0D .uleb128 0xd
+ 3939 0a24 00000000 .long .LASF155
+ 3940 0a28 20 .sleb128 32
+ 3941 0a29 0D .uleb128 0xd
+ 3942 0a2a 00000000 .long .LASF156
+ 3943 0a2e 21 .sleb128 33
+ 3944 0a2f 0D .uleb128 0xd
+ 3945 0a30 00000000 .long .LASF157
+ 3946 0a34 22 .sleb128 34
+ 3947 0a35 0D .uleb128 0xd
+ 3948 0a36 00000000 .long .LASF158
+ 3949 0a3a 23 .sleb128 35
+ 3950 0a3b 0D .uleb128 0xd
+ 3951 0a3c 00000000 .long .LASF159
+ 3952 0a40 24 .sleb128 36
+ 3953 0a41 0D .uleb128 0xd
+ 3954 0a42 00000000 .long .LASF160
+ 3955 0a46 25 .sleb128 37
+ 3956 0a47 0D .uleb128 0xd
+ 3957 0a48 00000000 .long .LASF161
+ 3958 0a4c 26 .sleb128 38
+ 3959 0a4d 0D .uleb128 0xd
+ 3960 0a4e 00000000 .long .LASF162
+ 3961 0a52 27 .sleb128 39
+ 3962 0a53 0D .uleb128 0xd
+ 3963 0a54 00000000 .long .LASF163
+ 3964 0a58 28 .sleb128 40
+ 3965 0a59 0D .uleb128 0xd
+ 3966 0a5a 00000000 .long .LASF164
+ 3967 0a5e 29 .sleb128 41
+ 3968 0a5f 0D .uleb128 0xd
+ 3969 0a60 00000000 .long .LASF165
+ 3970 0a64 2A .sleb128 42
+
GAS LISTING /tmp/ccWvEaWW.s page 98
+
+
+ 3971 0a65 0D .uleb128 0xd
+ 3972 0a66 00000000 .long .LASF166
+ 3973 0a6a 2B .sleb128 43
+ 3974 0a6b 0D .uleb128 0xd
+ 3975 0a6c 00000000 .long .LASF167
+ 3976 0a70 2C .sleb128 44
+ 3977 0a71 0D .uleb128 0xd
+ 3978 0a72 00000000 .long .LASF168
+ 3979 0a76 2D .sleb128 45
+ 3980 0a77 0D .uleb128 0xd
+ 3981 0a78 00000000 .long .LASF169
+ 3982 0a7c 2E .sleb128 46
+ 3983 0a7d 0D .uleb128 0xd
+ 3984 0a7e 00000000 .long .LASF170
+ 3985 0a82 2F .sleb128 47
+ 3986 0a83 0D .uleb128 0xd
+ 3987 0a84 00000000 .long .LASF171
+ 3988 0a88 30 .sleb128 48
+ 3989 0a89 0D .uleb128 0xd
+ 3990 0a8a 00000000 .long .LASF172
+ 3991 0a8e 31 .sleb128 49
+ 3992 0a8f 0D .uleb128 0xd
+ 3993 0a90 00000000 .long .LASF173
+ 3994 0a94 32 .sleb128 50
+ 3995 0a95 0D .uleb128 0xd
+ 3996 0a96 00000000 .long .LASF174
+ 3997 0a9a 33 .sleb128 51
+ 3998 0a9b 0D .uleb128 0xd
+ 3999 0a9c 00000000 .long .LASF175
+ 4000 0aa0 34 .sleb128 52
+ 4001 0aa1 0D .uleb128 0xd
+ 4002 0aa2 00000000 .long .LASF176
+ 4003 0aa6 35 .sleb128 53
+ 4004 0aa7 0D .uleb128 0xd
+ 4005 0aa8 00000000 .long .LASF177
+ 4006 0aac 36 .sleb128 54
+ 4007 0aad 0D .uleb128 0xd
+ 4008 0aae 00000000 .long .LASF178
+ 4009 0ab2 36 .sleb128 54
+ 4010 0ab3 0D .uleb128 0xd
+ 4011 0ab4 00000000 .long .LASF179
+ 4012 0ab8 37 .sleb128 55
+ 4013 0ab9 0D .uleb128 0xd
+ 4014 0aba 00000000 .long .LASF180
+ 4015 0abe 38 .sleb128 56
+ 4016 0abf 0D .uleb128 0xd
+ 4017 0ac0 00000000 .long .LASF181
+ 4018 0ac4 39 .sleb128 57
+ 4019 0ac5 0D .uleb128 0xd
+ 4020 0ac6 00000000 .long .LASF182
+ 4021 0aca 3A .sleb128 58
+ 4022 0acb 0D .uleb128 0xd
+ 4023 0acc 00000000 .long .LASF183
+ 4024 0ad0 3B .sleb128 59
+ 4025 0ad1 0D .uleb128 0xd
+ 4026 0ad2 00000000 .long .LASF184
+ 4027 0ad6 3C .sleb128 60
+
GAS LISTING /tmp/ccWvEaWW.s page 99
+
+
+ 4028 0ad7 0D .uleb128 0xd
+ 4029 0ad8 00000000 .long .LASF185
+ 4030 0adc 3D .sleb128 61
+ 4031 0add 00 .byte 0x0
+ 4032 0ade 1C .uleb128 0x1c
+ 4033 0adf 00000000 .long .LASF186
+ 4034 0ae3 04 .byte 0x4
+ 4035 0ae4 0F .byte 0xf
+ 4036 0ae5 BD .byte 0xbd
+ 4037 0ae6 940C0000 .long 0xc94
+ 4038 0aea 0D .uleb128 0xd
+ 4039 0aeb 00000000 .long .LASF187
+ 4040 0aef 00 .sleb128 0
+ 4041 0af0 0D .uleb128 0xd
+ 4042 0af1 00000000 .long .LASF188
+ 4043 0af5 01 .sleb128 1
+ 4044 0af6 0D .uleb128 0xd
+ 4045 0af7 00000000 .long .LASF189
+ 4046 0afb 02 .sleb128 2
+ 4047 0afc 0D .uleb128 0xd
+ 4048 0afd 00000000 .long .LASF190
+ 4049 0b01 03 .sleb128 3
+ 4050 0b02 0D .uleb128 0xd
+ 4051 0b03 00000000 .long .LASF191
+ 4052 0b07 04 .sleb128 4
+ 4053 0b08 0D .uleb128 0xd
+ 4054 0b09 00000000 .long .LASF192
+ 4055 0b0d 05 .sleb128 5
+ 4056 0b0e 0D .uleb128 0xd
+ 4057 0b0f 00000000 .long .LASF193
+ 4058 0b13 06 .sleb128 6
+ 4059 0b14 0D .uleb128 0xd
+ 4060 0b15 00000000 .long .LASF194
+ 4061 0b19 07 .sleb128 7
+ 4062 0b1a 0D .uleb128 0xd
+ 4063 0b1b 00000000 .long .LASF195
+ 4064 0b1f 08 .sleb128 8
+ 4065 0b20 0D .uleb128 0xd
+ 4066 0b21 00000000 .long .LASF196
+ 4067 0b25 09 .sleb128 9
+ 4068 0b26 0D .uleb128 0xd
+ 4069 0b27 00000000 .long .LASF197
+ 4070 0b2b 0A .sleb128 10
+ 4071 0b2c 0D .uleb128 0xd
+ 4072 0b2d 00000000 .long .LASF198
+ 4073 0b31 0B .sleb128 11
+ 4074 0b32 0D .uleb128 0xd
+ 4075 0b33 00000000 .long .LASF199
+ 4076 0b37 0C .sleb128 12
+ 4077 0b38 0D .uleb128 0xd
+ 4078 0b39 00000000 .long .LASF200
+ 4079 0b3d 0D .sleb128 13
+ 4080 0b3e 0D .uleb128 0xd
+ 4081 0b3f 00000000 .long .LASF201
+ 4082 0b43 0E .sleb128 14
+ 4083 0b44 0D .uleb128 0xd
+ 4084 0b45 00000000 .long .LASF202
+
GAS LISTING /tmp/ccWvEaWW.s page 100
+
+
+ 4085 0b49 0F .sleb128 15
+ 4086 0b4a 0D .uleb128 0xd
+ 4087 0b4b 00000000 .long .LASF203
+ 4088 0b4f 10 .sleb128 16
+ 4089 0b50 0D .uleb128 0xd
+ 4090 0b51 00000000 .long .LASF204
+ 4091 0b55 11 .sleb128 17
+ 4092 0b56 0D .uleb128 0xd
+ 4093 0b57 00000000 .long .LASF205
+ 4094 0b5b 12 .sleb128 18
+ 4095 0b5c 0D .uleb128 0xd
+ 4096 0b5d 00000000 .long .LASF206
+ 4097 0b61 13 .sleb128 19
+ 4098 0b62 0D .uleb128 0xd
+ 4099 0b63 00000000 .long .LASF207
+ 4100 0b67 14 .sleb128 20
+ 4101 0b68 0D .uleb128 0xd
+ 4102 0b69 00000000 .long .LASF208
+ 4103 0b6d 15 .sleb128 21
+ 4104 0b6e 0D .uleb128 0xd
+ 4105 0b6f 00000000 .long .LASF209
+ 4106 0b73 16 .sleb128 22
+ 4107 0b74 0D .uleb128 0xd
+ 4108 0b75 00000000 .long .LASF210
+ 4109 0b79 17 .sleb128 23
+ 4110 0b7a 0D .uleb128 0xd
+ 4111 0b7b 00000000 .long .LASF211
+ 4112 0b7f 18 .sleb128 24
+ 4113 0b80 0D .uleb128 0xd
+ 4114 0b81 00000000 .long .LASF212
+ 4115 0b85 19 .sleb128 25
+ 4116 0b86 0D .uleb128 0xd
+ 4117 0b87 00000000 .long .LASF213
+ 4118 0b8b 1A .sleb128 26
+ 4119 0b8c 0D .uleb128 0xd
+ 4120 0b8d 00000000 .long .LASF214
+ 4121 0b91 1B .sleb128 27
+ 4122 0b92 0D .uleb128 0xd
+ 4123 0b93 00000000 .long .LASF215
+ 4124 0b97 1C .sleb128 28
+ 4125 0b98 0D .uleb128 0xd
+ 4126 0b99 00000000 .long .LASF216
+ 4127 0b9d 1D .sleb128 29
+ 4128 0b9e 0D .uleb128 0xd
+ 4129 0b9f 00000000 .long .LASF217
+ 4130 0ba3 1E .sleb128 30
+ 4131 0ba4 0D .uleb128 0xd
+ 4132 0ba5 00000000 .long .LASF218
+ 4133 0ba9 1F .sleb128 31
+ 4134 0baa 0D .uleb128 0xd
+ 4135 0bab 00000000 .long .LASF219
+ 4136 0baf 20 .sleb128 32
+ 4137 0bb0 0D .uleb128 0xd
+ 4138 0bb1 00000000 .long .LASF220
+ 4139 0bb5 21 .sleb128 33
+ 4140 0bb6 0D .uleb128 0xd
+ 4141 0bb7 00000000 .long .LASF221
+
GAS LISTING /tmp/ccWvEaWW.s page 101
+
+
+ 4142 0bbb 22 .sleb128 34
+ 4143 0bbc 0D .uleb128 0xd
+ 4144 0bbd 00000000 .long .LASF222
+ 4145 0bc1 23 .sleb128 35
+ 4146 0bc2 0D .uleb128 0xd
+ 4147 0bc3 00000000 .long .LASF223
+ 4148 0bc7 24 .sleb128 36
+ 4149 0bc8 0D .uleb128 0xd
+ 4150 0bc9 00000000 .long .LASF224
+ 4151 0bcd 25 .sleb128 37
+ 4152 0bce 0D .uleb128 0xd
+ 4153 0bcf 00000000 .long .LASF225
+ 4154 0bd3 26 .sleb128 38
+ 4155 0bd4 0D .uleb128 0xd
+ 4156 0bd5 00000000 .long .LASF226
+ 4157 0bd9 27 .sleb128 39
+ 4158 0bda 0D .uleb128 0xd
+ 4159 0bdb 00000000 .long .LASF227
+ 4160 0bdf 28 .sleb128 40
+ 4161 0be0 0D .uleb128 0xd
+ 4162 0be1 00000000 .long .LASF228
+ 4163 0be5 29 .sleb128 41
+ 4164 0be6 0D .uleb128 0xd
+ 4165 0be7 00000000 .long .LASF229
+ 4166 0beb 2A .sleb128 42
+ 4167 0bec 0D .uleb128 0xd
+ 4168 0bed 00000000 .long .LASF230
+ 4169 0bf1 2B .sleb128 43
+ 4170 0bf2 0D .uleb128 0xd
+ 4171 0bf3 00000000 .long .LASF231
+ 4172 0bf7 2C .sleb128 44
+ 4173 0bf8 0D .uleb128 0xd
+ 4174 0bf9 00000000 .long .LASF232
+ 4175 0bfd 2D .sleb128 45
+ 4176 0bfe 0D .uleb128 0xd
+ 4177 0bff 00000000 .long .LASF233
+ 4178 0c03 2E .sleb128 46
+ 4179 0c04 0D .uleb128 0xd
+ 4180 0c05 00000000 .long .LASF234
+ 4181 0c09 2F .sleb128 47
+ 4182 0c0a 0D .uleb128 0xd
+ 4183 0c0b 00000000 .long .LASF235
+ 4184 0c0f 30 .sleb128 48
+ 4185 0c10 0D .uleb128 0xd
+ 4186 0c11 00000000 .long .LASF236
+ 4187 0c15 31 .sleb128 49
+ 4188 0c16 0D .uleb128 0xd
+ 4189 0c17 00000000 .long .LASF237
+ 4190 0c1b 32 .sleb128 50
+ 4191 0c1c 0D .uleb128 0xd
+ 4192 0c1d 00000000 .long .LASF238
+ 4193 0c21 33 .sleb128 51
+ 4194 0c22 0D .uleb128 0xd
+ 4195 0c23 00000000 .long .LASF239
+ 4196 0c27 34 .sleb128 52
+ 4197 0c28 0D .uleb128 0xd
+ 4198 0c29 00000000 .long .LASF240
+
GAS LISTING /tmp/ccWvEaWW.s page 102
+
+
+ 4199 0c2d 35 .sleb128 53
+ 4200 0c2e 0D .uleb128 0xd
+ 4201 0c2f 00000000 .long .LASF241
+ 4202 0c33 36 .sleb128 54
+ 4203 0c34 0D .uleb128 0xd
+ 4204 0c35 00000000 .long .LASF242
+ 4205 0c39 37 .sleb128 55
+ 4206 0c3a 0D .uleb128 0xd
+ 4207 0c3b 00000000 .long .LASF243
+ 4208 0c3f 38 .sleb128 56
+ 4209 0c40 0D .uleb128 0xd
+ 4210 0c41 00000000 .long .LASF244
+ 4211 0c45 39 .sleb128 57
+ 4212 0c46 0D .uleb128 0xd
+ 4213 0c47 00000000 .long .LASF245
+ 4214 0c4b 3A .sleb128 58
+ 4215 0c4c 0D .uleb128 0xd
+ 4216 0c4d 00000000 .long .LASF246
+ 4217 0c51 3A .sleb128 58
+ 4218 0c52 0D .uleb128 0xd
+ 4219 0c53 00000000 .long .LASF247
+ 4220 0c57 3B .sleb128 59
+ 4221 0c58 0D .uleb128 0xd
+ 4222 0c59 00000000 .long .LASF248
+ 4223 0c5d 3C .sleb128 60
+ 4224 0c5e 0D .uleb128 0xd
+ 4225 0c5f 00000000 .long .LASF249
+ 4226 0c63 3D .sleb128 61
+ 4227 0c64 0D .uleb128 0xd
+ 4228 0c65 00000000 .long .LASF250
+ 4229 0c69 3E .sleb128 62
+ 4230 0c6a 0D .uleb128 0xd
+ 4231 0c6b 00000000 .long .LASF251
+ 4232 0c6f 3F .sleb128 63
+ 4233 0c70 0D .uleb128 0xd
+ 4234 0c71 00000000 .long .LASF252
+ 4235 0c75 C000 .sleb128 64
+ 4236 0c77 0D .uleb128 0xd
+ 4237 0c78 00000000 .long .LASF253
+ 4238 0c7c C100 .sleb128 65
+ 4239 0c7e 0D .uleb128 0xd
+ 4240 0c7f 00000000 .long .LASF254
+ 4241 0c83 C200 .sleb128 66
+ 4242 0c85 0D .uleb128 0xd
+ 4243 0c86 00000000 .long .LASF255
+ 4244 0c8a C300 .sleb128 67
+ 4245 0c8c 0D .uleb128 0xd
+ 4246 0c8d 00000000 .long .LASF256
+ 4247 0c91 C400 .sleb128 68
+ 4248 0c93 00 .byte 0x0
+ 4249 0c94 1D .uleb128 0x1d
+ 4250 0c95 00000000 .long .LASF257
+ 4251 0c99 04 .byte 0x4
+ 4252 0c9a 0F .byte 0xf
+ 4253 0c9b 0A01 .value 0x10a
+ 4254 0c9d 930D0000 .long 0xd93
+ 4255 0ca1 0D .uleb128 0xd
+
GAS LISTING /tmp/ccWvEaWW.s page 103
+
+
+ 4256 0ca2 00000000 .long .LASF258
+ 4257 0ca6 00 .sleb128 0
+ 4258 0ca7 0D .uleb128 0xd
+ 4259 0ca8 00000000 .long .LASF259
+ 4260 0cac 3D .sleb128 61
+ 4261 0cad 0D .uleb128 0xd
+ 4262 0cae 00000000 .long .LASF260
+ 4263 0cb2 3E .sleb128 62
+ 4264 0cb3 0D .uleb128 0xd
+ 4265 0cb4 00000000 .long .LASF261
+ 4266 0cb8 3F .sleb128 63
+ 4267 0cb9 0D .uleb128 0xd
+ 4268 0cba 00000000 .long .LASF262
+ 4269 0cbe C000 .sleb128 64
+ 4270 0cc0 0D .uleb128 0xd
+ 4271 0cc1 00000000 .long .LASF263
+ 4272 0cc5 C100 .sleb128 65
+ 4273 0cc7 0D .uleb128 0xd
+ 4274 0cc8 00000000 .long .LASF264
+ 4275 0ccc C200 .sleb128 66
+ 4276 0cce 0D .uleb128 0xd
+ 4277 0ccf 00000000 .long .LASF265
+ 4278 0cd3 C300 .sleb128 67
+ 4279 0cd5 0D .uleb128 0xd
+ 4280 0cd6 00000000 .long .LASF266
+ 4281 0cda C400 .sleb128 68
+ 4282 0cdc 0D .uleb128 0xd
+ 4283 0cdd 00000000 .long .LASF267
+ 4284 0ce1 C500 .sleb128 69
+ 4285 0ce3 0D .uleb128 0xd
+ 4286 0ce4 00000000 .long .LASF268
+ 4287 0ce8 C600 .sleb128 70
+ 4288 0cea 0D .uleb128 0xd
+ 4289 0ceb 00000000 .long .LASF269
+ 4290 0cef C700 .sleb128 71
+ 4291 0cf1 0D .uleb128 0xd
+ 4292 0cf2 00000000 .long .LASF270
+ 4293 0cf6 C800 .sleb128 72
+ 4294 0cf8 0D .uleb128 0xd
+ 4295 0cf9 00000000 .long .LASF271
+ 4296 0cfd C900 .sleb128 73
+ 4297 0cff 0D .uleb128 0xd
+ 4298 0d00 00000000 .long .LASF272
+ 4299 0d04 CA00 .sleb128 74
+ 4300 0d06 0D .uleb128 0xd
+ 4301 0d07 00000000 .long .LASF273
+ 4302 0d0b CB00 .sleb128 75
+ 4303 0d0d 0D .uleb128 0xd
+ 4304 0d0e 00000000 .long .LASF274
+ 4305 0d12 CC00 .sleb128 76
+ 4306 0d14 0D .uleb128 0xd
+ 4307 0d15 00000000 .long .LASF275
+ 4308 0d19 CD00 .sleb128 77
+ 4309 0d1b 0D .uleb128 0xd
+ 4310 0d1c 00000000 .long .LASF276
+ 4311 0d20 CE00 .sleb128 78
+ 4312 0d22 0D .uleb128 0xd
+
GAS LISTING /tmp/ccWvEaWW.s page 104
+
+
+ 4313 0d23 00000000 .long .LASF277
+ 4314 0d27 CF00 .sleb128 79
+ 4315 0d29 0D .uleb128 0xd
+ 4316 0d2a 00000000 .long .LASF278
+ 4317 0d2e D000 .sleb128 80
+ 4318 0d30 0D .uleb128 0xd
+ 4319 0d31 00000000 .long .LASF279
+ 4320 0d35 D100 .sleb128 81
+ 4321 0d37 0D .uleb128 0xd
+ 4322 0d38 00000000 .long .LASF280
+ 4323 0d3c D100 .sleb128 81
+ 4324 0d3e 0D .uleb128 0xd
+ 4325 0d3f 00000000 .long .LASF281
+ 4326 0d43 D200 .sleb128 82
+ 4327 0d45 0D .uleb128 0xd
+ 4328 0d46 00000000 .long .LASF282
+ 4329 0d4a D300 .sleb128 83
+ 4330 0d4c 0D .uleb128 0xd
+ 4331 0d4d 00000000 .long .LASF283
+ 4332 0d51 D400 .sleb128 84
+ 4333 0d53 0D .uleb128 0xd
+ 4334 0d54 00000000 .long .LASF284
+ 4335 0d58 D500 .sleb128 85
+ 4336 0d5a 0D .uleb128 0xd
+ 4337 0d5b 00000000 .long .LASF285
+ 4338 0d5f D600 .sleb128 86
+ 4339 0d61 0D .uleb128 0xd
+ 4340 0d62 00000000 .long .LASF286
+ 4341 0d66 D700 .sleb128 87
+ 4342 0d68 0D .uleb128 0xd
+ 4343 0d69 00000000 .long .LASF287
+ 4344 0d6d D800 .sleb128 88
+ 4345 0d6f 0D .uleb128 0xd
+ 4346 0d70 00000000 .long .LASF288
+ 4347 0d74 D900 .sleb128 89
+ 4348 0d76 0D .uleb128 0xd
+ 4349 0d77 00000000 .long .LASF289
+ 4350 0d7b DA00 .sleb128 90
+ 4351 0d7d 0D .uleb128 0xd
+ 4352 0d7e 00000000 .long .LASF290
+ 4353 0d82 DB00 .sleb128 91
+ 4354 0d84 0D .uleb128 0xd
+ 4355 0d85 00000000 .long .LASF291
+ 4356 0d89 DC00 .sleb128 92
+ 4357 0d8b 0D .uleb128 0xd
+ 4358 0d8c 00000000 .long .LASF292
+ 4359 0d90 DD00 .sleb128 93
+ 4360 0d92 00 .byte 0x0
+ 4361 0d93 1D .uleb128 0x1d
+ 4362 0d94 00000000 .long .LASF293
+ 4363 0d98 04 .byte 0x4
+ 4364 0d99 0F .byte 0xf
+ 4365 0d9a 3401 .value 0x134
+ 4366 0d9c D30E0000 .long 0xed3
+ 4367 0da0 0D .uleb128 0xd
+ 4368 0da1 00000000 .long .LASF294
+ 4369 0da5 00 .sleb128 0
+
GAS LISTING /tmp/ccWvEaWW.s page 105
+
+
+ 4370 0da6 0D .uleb128 0xd
+ 4371 0da7 00000000 .long .LASF295
+ 4372 0dab 01 .sleb128 1
+ 4373 0dac 0D .uleb128 0xd
+ 4374 0dad 00000000 .long .LASF296
+ 4375 0db1 02 .sleb128 2
+ 4376 0db2 0D .uleb128 0xd
+ 4377 0db3 00000000 .long .LASF297
+ 4378 0db7 03 .sleb128 3
+ 4379 0db8 0D .uleb128 0xd
+ 4380 0db9 00000000 .long .LASF298
+ 4381 0dbd 04 .sleb128 4
+ 4382 0dbe 0D .uleb128 0xd
+ 4383 0dbf 00000000 .long .LASF299
+ 4384 0dc3 05 .sleb128 5
+ 4385 0dc4 0D .uleb128 0xd
+ 4386 0dc5 00000000 .long .LASF300
+ 4387 0dc9 06 .sleb128 6
+ 4388 0dca 0D .uleb128 0xd
+ 4389 0dcb 00000000 .long .LASF301
+ 4390 0dcf 07 .sleb128 7
+ 4391 0dd0 0D .uleb128 0xd
+ 4392 0dd1 00000000 .long .LASF302
+ 4393 0dd5 08 .sleb128 8
+ 4394 0dd6 0D .uleb128 0xd
+ 4395 0dd7 00000000 .long .LASF303
+ 4396 0ddb 09 .sleb128 9
+ 4397 0ddc 0D .uleb128 0xd
+ 4398 0ddd 00000000 .long .LASF304
+ 4399 0de1 0A .sleb128 10
+ 4400 0de2 0D .uleb128 0xd
+ 4401 0de3 00000000 .long .LASF305
+ 4402 0de7 0B .sleb128 11
+ 4403 0de8 0D .uleb128 0xd
+ 4404 0de9 00000000 .long .LASF306
+ 4405 0ded 0C .sleb128 12
+ 4406 0dee 0D .uleb128 0xd
+ 4407 0def 00000000 .long .LASF307
+ 4408 0df3 0D .sleb128 13
+ 4409 0df4 0D .uleb128 0xd
+ 4410 0df5 00000000 .long .LASF308
+ 4411 0df9 0E .sleb128 14
+ 4412 0dfa 0D .uleb128 0xd
+ 4413 0dfb 00000000 .long .LASF309
+ 4414 0dff 0F .sleb128 15
+ 4415 0e00 0D .uleb128 0xd
+ 4416 0e01 00000000 .long .LASF310
+ 4417 0e05 10 .sleb128 16
+ 4418 0e06 0D .uleb128 0xd
+ 4419 0e07 00000000 .long .LASF311
+ 4420 0e0b 11 .sleb128 17
+ 4421 0e0c 0D .uleb128 0xd
+ 4422 0e0d 00000000 .long .LASF312
+ 4423 0e11 12 .sleb128 18
+ 4424 0e12 0D .uleb128 0xd
+ 4425 0e13 00000000 .long .LASF313
+ 4426 0e17 13 .sleb128 19
+
GAS LISTING /tmp/ccWvEaWW.s page 106
+
+
+ 4427 0e18 0D .uleb128 0xd
+ 4428 0e19 00000000 .long .LASF314
+ 4429 0e1d 14 .sleb128 20
+ 4430 0e1e 0D .uleb128 0xd
+ 4431 0e1f 00000000 .long .LASF315
+ 4432 0e23 15 .sleb128 21
+ 4433 0e24 0D .uleb128 0xd
+ 4434 0e25 00000000 .long .LASF316
+ 4435 0e29 16 .sleb128 22
+ 4436 0e2a 0D .uleb128 0xd
+ 4437 0e2b 00000000 .long .LASF317
+ 4438 0e2f 17 .sleb128 23
+ 4439 0e30 0D .uleb128 0xd
+ 4440 0e31 00000000 .long .LASF318
+ 4441 0e35 18 .sleb128 24
+ 4442 0e36 0D .uleb128 0xd
+ 4443 0e37 00000000 .long .LASF319
+ 4444 0e3b 19 .sleb128 25
+ 4445 0e3c 0D .uleb128 0xd
+ 4446 0e3d 00000000 .long .LASF320
+ 4447 0e41 1A .sleb128 26
+ 4448 0e42 0D .uleb128 0xd
+ 4449 0e43 00000000 .long .LASF321
+ 4450 0e47 1B .sleb128 27
+ 4451 0e48 0D .uleb128 0xd
+ 4452 0e49 00000000 .long .LASF322
+ 4453 0e4d 1C .sleb128 28
+ 4454 0e4e 0D .uleb128 0xd
+ 4455 0e4f 00000000 .long .LASF323
+ 4456 0e53 1D .sleb128 29
+ 4457 0e54 0D .uleb128 0xd
+ 4458 0e55 00000000 .long .LASF324
+ 4459 0e59 1E .sleb128 30
+ 4460 0e5a 0D .uleb128 0xd
+ 4461 0e5b 00000000 .long .LASF325
+ 4462 0e5f 1F .sleb128 31
+ 4463 0e60 0D .uleb128 0xd
+ 4464 0e61 00000000 .long .LASF326
+ 4465 0e65 20 .sleb128 32
+ 4466 0e66 0D .uleb128 0xd
+ 4467 0e67 00000000 .long .LASF327
+ 4468 0e6b 21 .sleb128 33
+ 4469 0e6c 0D .uleb128 0xd
+ 4470 0e6d 00000000 .long .LASF328
+ 4471 0e71 22 .sleb128 34
+ 4472 0e72 0D .uleb128 0xd
+ 4473 0e73 00000000 .long .LASF329
+ 4474 0e77 23 .sleb128 35
+ 4475 0e78 0D .uleb128 0xd
+ 4476 0e79 00000000 .long .LASF330
+ 4477 0e7d 24 .sleb128 36
+ 4478 0e7e 0D .uleb128 0xd
+ 4479 0e7f 00000000 .long .LASF331
+ 4480 0e83 25 .sleb128 37
+ 4481 0e84 0D .uleb128 0xd
+ 4482 0e85 00000000 .long .LASF332
+ 4483 0e89 26 .sleb128 38
+
GAS LISTING /tmp/ccWvEaWW.s page 107
+
+
+ 4484 0e8a 0D .uleb128 0xd
+ 4485 0e8b 00000000 .long .LASF333
+ 4486 0e8f 27 .sleb128 39
+ 4487 0e90 0D .uleb128 0xd
+ 4488 0e91 00000000 .long .LASF334
+ 4489 0e95 28 .sleb128 40
+ 4490 0e96 0D .uleb128 0xd
+ 4491 0e97 00000000 .long .LASF335
+ 4492 0e9b 29 .sleb128 41
+ 4493 0e9c 0D .uleb128 0xd
+ 4494 0e9d 00000000 .long .LASF336
+ 4495 0ea1 29 .sleb128 41
+ 4496 0ea2 0D .uleb128 0xd
+ 4497 0ea3 00000000 .long .LASF337
+ 4498 0ea7 2A .sleb128 42
+ 4499 0ea8 0D .uleb128 0xd
+ 4500 0ea9 00000000 .long .LASF338
+ 4501 0ead 2B .sleb128 43
+ 4502 0eae 0D .uleb128 0xd
+ 4503 0eaf 00000000 .long .LASF339
+ 4504 0eb3 2C .sleb128 44
+ 4505 0eb4 0D .uleb128 0xd
+ 4506 0eb5 00000000 .long .LASF340
+ 4507 0eb9 2D .sleb128 45
+ 4508 0eba 0D .uleb128 0xd
+ 4509 0ebb 00000000 .long .LASF341
+ 4510 0ebf 2E .sleb128 46
+ 4511 0ec0 0D .uleb128 0xd
+ 4512 0ec1 00000000 .long .LASF342
+ 4513 0ec5 2F .sleb128 47
+ 4514 0ec6 0D .uleb128 0xd
+ 4515 0ec7 00000000 .long .LASF343
+ 4516 0ecb 30 .sleb128 48
+ 4517 0ecc 0D .uleb128 0xd
+ 4518 0ecd 00000000 .long .LASF344
+ 4519 0ed1 31 .sleb128 49
+ 4520 0ed2 00 .byte 0x0
+ 4521 0ed3 1E .uleb128 0x1e
+ 4522 0ed4 00000000 .long .LASF347
+ 4523 0ed8 01 .byte 0x1
+ 4524 0ed9 4B .byte 0x4b
+ 4525 0eda 01 .byte 0x1
+ 4526 0edb 3D050000 .long 0x53d
+ 4527 0edf 00000000 .quad .LFB601
+ 4527 00000000
+ 4528 0ee7 00000000 .quad .LFE601
+ 4528 00000000
+ 4529 0eef 00000000 .long .LLST0
+ 4530 0ef3 130F0000 .long 0xf13
+ 4531 0ef7 1F .uleb128 0x1f
+ 4532 0ef8 00000000 .long .LASF345
+ 4533 0efc 01 .byte 0x1
+ 4534 0efd 4B .byte 0x4b
+ 4535 0efe 1F040000 .long 0x41f
+ 4536 0f02 02 .byte 0x2
+ 4537 0f03 91 .byte 0x91
+ 4538 0f04 68 .sleb128 -24
+
GAS LISTING /tmp/ccWvEaWW.s page 108
+
+
+ 4539 0f05 20 .uleb128 0x20
+ 4540 0f06 637600 .string "cv"
+ 4541 0f09 01 .byte 0x1
+ 4542 0f0a 4E .byte 0x4e
+ 4543 0f0b 3D050000 .long 0x53d
+ 4544 0f0f 02 .byte 0x2
+ 4545 0f10 76 .byte 0x76
+ 4546 0f11 60 .sleb128 -32
+ 4547 0f12 00 .byte 0x0
+ 4548 0f13 21 .uleb128 0x21
+ 4549 0f14 00000000 .long .LASF395
+ 4550 0f18 01 .byte 0x1
+ 4551 0f19 62 .byte 0x62
+ 4552 0f1a 01 .byte 0x1
+ 4553 0f1b 00000000 .quad .LFB602
+ 4553 00000000
+ 4554 0f23 00000000 .quad .LFE602
+ 4554 00000000
+ 4555 0f2b 00000000 .long .LLST1
+ 4556 0f2f 5D0F0000 .long 0xf5d
+ 4557 0f33 22 .uleb128 0x22
+ 4558 0f34 637600 .string "cv"
+ 4559 0f37 01 .byte 0x1
+ 4560 0f38 62 .byte 0x62
+ 4561 0f39 5D0F0000 .long 0xf5d
+ 4562 0f3d 02 .byte 0x2
+ 4563 0f3e 91 .byte 0x91
+ 4564 0f3f 60 .sleb128 -32
+ 4565 0f40 1F .uleb128 0x1f
+ 4566 0f41 00000000 .long .LASF346
+ 4567 0f45 01 .byte 0x1
+ 4568 0f46 62 .byte 0x62
+ 4569 0f47 B4000000 .long 0xb4
+ 4570 0f4b 02 .byte 0x2
+ 4571 0f4c 91 .byte 0x91
+ 4572 0f4d 58 .sleb128 -40
+ 4573 0f4e 20 .uleb128 0x20
+ 4574 0f4f 72637600 .string "rcv"
+ 4575 0f53 01 .byte 0x1
+ 4576 0f54 65 .byte 0x65
+ 4577 0f55 3D050000 .long 0x53d
+ 4578 0f59 02 .byte 0x2
+ 4579 0f5a 76 .byte 0x76
+ 4580 0f5b 50 .sleb128 -48
+ 4581 0f5c 00 .byte 0x0
+ 4582 0f5d 0B .uleb128 0xb
+ 4583 0f5e 3D050000 .long 0x53d
+ 4584 0f62 1E .uleb128 0x1e
+ 4585 0f63 00000000 .long .LASF348
+ 4586 0f67 01 .byte 0x1
+ 4587 0f68 71 .byte 0x71
+ 4588 0f69 01 .byte 0x1
+ 4589 0f6a 7B000000 .long 0x7b
+ 4590 0f6e 00000000 .quad .LFB603
+ 4590 00000000
+ 4591 0f76 00000000 .quad .LFE603
+ 4591 00000000
+
GAS LISTING /tmp/ccWvEaWW.s page 109
+
+
+ 4592 0f7e 00000000 .long .LLST2
+ 4593 0f82 A20F0000 .long 0xfa2
+ 4594 0f86 1F .uleb128 0x1f
+ 4595 0f87 00000000 .long .LASF349
+ 4596 0f8b 01 .byte 0x1
+ 4597 0f8c 71 .byte 0x71
+ 4598 0f8d DE030000 .long 0x3de
+ 4599 0f91 02 .byte 0x2
+ 4600 0f92 91 .byte 0x91
+ 4601 0f93 58 .sleb128 -40
+ 4602 0f94 20 .uleb128 0x20
+ 4603 0f95 726300 .string "rc"
+ 4604 0f98 01 .byte 0x1
+ 4605 0f99 73 .byte 0x73
+ 4606 0f9a 7B000000 .long 0x7b
+ 4607 0f9e 02 .byte 0x2
+ 4608 0f9f 91 .byte 0x91
+ 4609 0fa0 6C .sleb128 -20
+ 4610 0fa1 00 .byte 0x0
+ 4611 0fa2 1E .uleb128 0x1e
+ 4612 0fa3 00000000 .long .LASF350
+ 4613 0fa7 01 .byte 0x1
+ 4614 0fa8 7E .byte 0x7e
+ 4615 0fa9 01 .byte 0x1
+ 4616 0faa 7B000000 .long 0x7b
+ 4617 0fae 00000000 .quad .LFB604
+ 4617 00000000
+ 4618 0fb6 00000000 .quad .LFE604
+ 4618 00000000
+ 4619 0fbe 00000000 .long .LLST3
+ 4620 0fc2 27100000 .long 0x1027
+ 4621 0fc6 1F .uleb128 0x1f
+ 4622 0fc7 00000000 .long .LASF349
+ 4623 0fcb 01 .byte 0x1
+ 4624 0fcc 7E .byte 0x7e
+ 4625 0fcd DE030000 .long 0x3de
+ 4626 0fd1 02 .byte 0x2
+ 4627 0fd2 91 .byte 0x91
+ 4628 0fd3 48 .sleb128 -56
+ 4629 0fd4 1F .uleb128 0x1f
+ 4630 0fd5 00000000 .long .LASF351
+ 4631 0fd9 01 .byte 0x1
+ 4632 0fda 7F .byte 0x7f
+ 4633 0fdb B6000000 .long 0xb6
+ 4634 0fdf 02 .byte 0x2
+ 4635 0fe0 91 .byte 0x91
+ 4636 0fe1 40 .sleb128 -64
+ 4637 0fe2 1F .uleb128 0x1f
+ 4638 0fe3 00000000 .long .LASF352
+ 4639 0fe7 01 .byte 0x1
+ 4640 0fe8 80 .byte 0x80
+ 4641 0fe9 62000000 .long 0x62
+ 4642 0fed 03 .byte 0x3
+ 4643 0fee 91 .byte 0x91
+ 4644 0fef BC7F .sleb128 -68
+ 4645 0ff1 20 .uleb128 0x20
+ 4646 0ff2 726300 .string "rc"
+
GAS LISTING /tmp/ccWvEaWW.s page 110
+
+
+ 4647 0ff5 01 .byte 0x1
+ 4648 0ff6 82 .byte 0x82
+ 4649 0ff7 7B000000 .long 0x7b
+ 4650 0ffb 02 .byte 0x2
+ 4651 0ffc 91 .byte 0x91
+ 4652 0ffd 5C .sleb128 -36
+ 4653 0ffe 23 .uleb128 0x23
+ 4654 0fff 00000000 .long .LASF353
+ 4655 1003 37100000 .long 0x1037
+ 4656 1007 01 .byte 0x1
+ 4657 1008 09 .byte 0x9
+ 4658 1009 03 .byte 0x3
+ 4659 100a 00000000 .quad __PRETTY_FUNCTION__.7296
+ 4659 00000000
+ 4660 1012 23 .uleb128 0x23
+ 4661 1013 00000000 .long .LASF354
+ 4662 1017 3C100000 .long 0x103c
+ 4663 101b 01 .byte 0x1
+ 4664 101c 09 .byte 0x9
+ 4665 101d 03 .byte 0x3
+ 4666 101e 00000000 .quad __func__.7298
+ 4666 00000000
+ 4667 1026 00 .byte 0x0
+ 4668 1027 1B .uleb128 0x1b
+ 4669 1028 C1000000 .long 0xc1
+ 4670 102c 37100000 .long 0x1037
+ 4671 1030 17 .uleb128 0x17
+ 4672 1031 B1000000 .long 0xb1
+ 4673 1035 1C .byte 0x1c
+ 4674 1036 00 .byte 0x0
+ 4675 1037 0B .uleb128 0xb
+ 4676 1038 27100000 .long 0x1027
+ 4677 103c 0B .uleb128 0xb
+ 4678 103d 27100000 .long 0x1027
+ 4679 1041 1E .uleb128 0x1e
+ 4680 1042 00000000 .long .LASF355
+ 4681 1046 01 .byte 0x1
+ 4682 1047 97 .byte 0x97
+ 4683 1048 01 .byte 0x1
+ 4684 1049 7B000000 .long 0x7b
+ 4685 104d 00000000 .quad .LFB605
+ 4685 00000000
+ 4686 1055 00000000 .quad .LFE605
+ 4686 00000000
+ 4687 105d 00000000 .long .LLST4
+ 4688 1061 C6100000 .long 0x10c6
+ 4689 1065 1F .uleb128 0x1f
+ 4690 1066 00000000 .long .LASF349
+ 4691 106a 01 .byte 0x1
+ 4692 106b 97 .byte 0x97
+ 4693 106c DE030000 .long 0x3de
+ 4694 1070 02 .byte 0x2
+ 4695 1071 91 .byte 0x91
+ 4696 1072 48 .sleb128 -56
+ 4697 1073 1F .uleb128 0x1f
+ 4698 1074 00000000 .long .LASF351
+ 4699 1078 01 .byte 0x1
+
GAS LISTING /tmp/ccWvEaWW.s page 111
+
+
+ 4700 1079 98 .byte 0x98
+ 4701 107a B6000000 .long 0xb6
+ 4702 107e 02 .byte 0x2
+ 4703 107f 91 .byte 0x91
+ 4704 1080 40 .sleb128 -64
+ 4705 1081 1F .uleb128 0x1f
+ 4706 1082 00000000 .long .LASF352
+ 4707 1086 01 .byte 0x1
+ 4708 1087 99 .byte 0x99
+ 4709 1088 62000000 .long 0x62
+ 4710 108c 03 .byte 0x3
+ 4711 108d 91 .byte 0x91
+ 4712 108e BC7F .sleb128 -68
+ 4713 1090 20 .uleb128 0x20
+ 4714 1091 726300 .string "rc"
+ 4715 1094 01 .byte 0x1
+ 4716 1095 9B .byte 0x9b
+ 4717 1096 7B000000 .long 0x7b
+ 4718 109a 02 .byte 0x2
+ 4719 109b 91 .byte 0x91
+ 4720 109c 5C .sleb128 -36
+ 4721 109d 23 .uleb128 0x23
+ 4722 109e 00000000 .long .LASF353
+ 4723 10a2 C6100000 .long 0x10c6
+ 4724 10a6 01 .byte 0x1
+ 4725 10a7 09 .byte 0x9
+ 4726 10a8 03 .byte 0x3
+ 4727 10a9 00000000 .quad __PRETTY_FUNCTION__.7320
+ 4727 00000000
+ 4728 10b1 23 .uleb128 0x23
+ 4729 10b2 00000000 .long .LASF354
+ 4730 10b6 CB100000 .long 0x10cb
+ 4731 10ba 01 .byte 0x1
+ 4732 10bb 09 .byte 0x9
+ 4733 10bc 03 .byte 0x3
+ 4734 10bd 00000000 .quad __func__.7322
+ 4734 00000000
+ 4735 10c5 00 .byte 0x0
+ 4736 10c6 0B .uleb128 0xb
+ 4737 10c7 27100000 .long 0x1027
+ 4738 10cb 0B .uleb128 0xb
+ 4739 10cc 27100000 .long 0x1027
+ 4740 10d0 1E .uleb128 0x1e
+ 4741 10d1 00000000 .long .LASF356
+ 4742 10d5 01 .byte 0x1
+ 4743 10d6 B1 .byte 0xb1
+ 4744 10d7 01 .byte 0x1
+ 4745 10d8 7B000000 .long 0x7b
+ 4746 10dc 00000000 .quad .LFB606
+ 4746 00000000
+ 4747 10e4 00000000 .quad .LFE606
+ 4747 00000000
+ 4748 10ec 00000000 .long .LLST5
+ 4749 10f0 25110000 .long 0x1125
+ 4750 10f4 1F .uleb128 0x1f
+ 4751 10f5 00000000 .long .LASF349
+ 4752 10f9 01 .byte 0x1
+
GAS LISTING /tmp/ccWvEaWW.s page 112
+
+
+ 4753 10fa B1 .byte 0xb1
+ 4754 10fb DE030000 .long 0x3de
+ 4755 10ff 02 .byte 0x2
+ 4756 1100 91 .byte 0x91
+ 4757 1101 68 .sleb128 -24
+ 4758 1102 1F .uleb128 0x1f
+ 4759 1103 00000000 .long .LASF357
+ 4760 1107 01 .byte 0x1
+ 4761 1108 B2 .byte 0xb2
+ 4762 1109 1F040000 .long 0x41f
+ 4763 110d 02 .byte 0x2
+ 4764 110e 91 .byte 0x91
+ 4765 110f 60 .sleb128 -32
+ 4766 1110 23 .uleb128 0x23
+ 4767 1111 00000000 .long .LASF353
+ 4768 1115 35110000 .long 0x1135
+ 4769 1119 01 .byte 0x1
+ 4770 111a 09 .byte 0x9
+ 4771 111b 03 .byte 0x3
+ 4772 111c 00000000 .quad __PRETTY_FUNCTION__.7342
+ 4772 00000000
+ 4773 1124 00 .byte 0x0
+ 4774 1125 1B .uleb128 0x1b
+ 4775 1126 C1000000 .long 0xc1
+ 4776 112a 35110000 .long 0x1135
+ 4777 112e 17 .uleb128 0x17
+ 4778 112f B1000000 .long 0xb1
+ 4779 1133 1D .byte 0x1d
+ 4780 1134 00 .byte 0x0
+ 4781 1135 0B .uleb128 0xb
+ 4782 1136 25110000 .long 0x1125
+ 4783 113a 1E .uleb128 0x1e
+ 4784 113b 00000000 .long .LASF358
+ 4785 113f 01 .byte 0x1
+ 4786 1140 BE .byte 0xbe
+ 4787 1141 01 .byte 0x1
+ 4788 1142 7B000000 .long 0x7b
+ 4789 1146 00000000 .quad .LFB607
+ 4789 00000000
+ 4790 114e 00000000 .quad .LFE607
+ 4790 00000000
+ 4791 1156 00000000 .long .LLST6
+ 4792 115a 8F110000 .long 0x118f
+ 4793 115e 1F .uleb128 0x1f
+ 4794 115f 00000000 .long .LASF349
+ 4795 1163 01 .byte 0x1
+ 4796 1164 BE .byte 0xbe
+ 4797 1165 DE030000 .long 0x3de
+ 4798 1169 02 .byte 0x2
+ 4799 116a 91 .byte 0x91
+ 4800 116b 68 .sleb128 -24
+ 4801 116c 1F .uleb128 0x1f
+ 4802 116d 00000000 .long .LASF357
+ 4803 1171 01 .byte 0x1
+ 4804 1172 BF .byte 0xbf
+ 4805 1173 1F040000 .long 0x41f
+ 4806 1177 02 .byte 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 113
+
+
+ 4807 1178 91 .byte 0x91
+ 4808 1179 60 .sleb128 -32
+ 4809 117a 23 .uleb128 0x23
+ 4810 117b 00000000 .long .LASF353
+ 4811 117f 8F110000 .long 0x118f
+ 4812 1183 01 .byte 0x1
+ 4813 1184 09 .byte 0x9
+ 4814 1185 03 .byte 0x3
+ 4815 1186 00000000 .quad __PRETTY_FUNCTION__.7355
+ 4815 00000000
+ 4816 118e 00 .byte 0x0
+ 4817 118f 0B .uleb128 0xb
+ 4818 1190 25110000 .long 0x1125
+ 4819 1194 1E .uleb128 0x1e
+ 4820 1195 00000000 .long .LASF359
+ 4821 1199 01 .byte 0x1
+ 4822 119a CB .byte 0xcb
+ 4823 119b 01 .byte 0x1
+ 4824 119c 7B000000 .long 0x7b
+ 4825 11a0 00000000 .quad .LFB608
+ 4825 00000000
+ 4826 11a8 00000000 .quad .LFE608
+ 4826 00000000
+ 4827 11b0 00000000 .long .LLST7
+ 4828 11b4 E9110000 .long 0x11e9
+ 4829 11b8 1F .uleb128 0x1f
+ 4830 11b9 00000000 .long .LASF349
+ 4831 11bd 01 .byte 0x1
+ 4832 11be CB .byte 0xcb
+ 4833 11bf DE030000 .long 0x3de
+ 4834 11c3 02 .byte 0x2
+ 4835 11c4 91 .byte 0x91
+ 4836 11c5 68 .sleb128 -24
+ 4837 11c6 1F .uleb128 0x1f
+ 4838 11c7 00000000 .long .LASF360
+ 4839 11cb 01 .byte 0x1
+ 4840 11cc CC .byte 0xcc
+ 4841 11cd F7010000 .long 0x1f7
+ 4842 11d1 02 .byte 0x2
+ 4843 11d2 91 .byte 0x91
+ 4844 11d3 60 .sleb128 -32
+ 4845 11d4 23 .uleb128 0x23
+ 4846 11d5 00000000 .long .LASF353
+ 4847 11d9 F9110000 .long 0x11f9
+ 4848 11dd 01 .byte 0x1
+ 4849 11de 09 .byte 0x9
+ 4850 11df 03 .byte 0x3
+ 4851 11e0 00000000 .quad __PRETTY_FUNCTION__.7368
+ 4851 00000000
+ 4852 11e8 00 .byte 0x0
+ 4853 11e9 1B .uleb128 0x1b
+ 4854 11ea C1000000 .long 0xc1
+ 4855 11ee F9110000 .long 0x11f9
+ 4856 11f2 17 .uleb128 0x17
+ 4857 11f3 B1000000 .long 0xb1
+ 4858 11f7 24 .byte 0x24
+ 4859 11f8 00 .byte 0x0
+
GAS LISTING /tmp/ccWvEaWW.s page 114
+
+
+ 4860 11f9 0B .uleb128 0xb
+ 4861 11fa E9110000 .long 0x11e9
+ 4862 11fe 1E .uleb128 0x1e
+ 4863 11ff 00000000 .long .LASF361
+ 4864 1203 01 .byte 0x1
+ 4865 1204 D8 .byte 0xd8
+ 4866 1205 01 .byte 0x1
+ 4867 1206 7B000000 .long 0x7b
+ 4868 120a 00000000 .quad .LFB609
+ 4868 00000000
+ 4869 1212 00000000 .quad .LFE609
+ 4869 00000000
+ 4870 121a 00000000 .long .LLST8
+ 4871 121e 53120000 .long 0x1253
+ 4872 1222 1F .uleb128 0x1f
+ 4873 1223 00000000 .long .LASF349
+ 4874 1227 01 .byte 0x1
+ 4875 1228 D8 .byte 0xd8
+ 4876 1229 DE030000 .long 0x3de
+ 4877 122d 02 .byte 0x2
+ 4878 122e 91 .byte 0x91
+ 4879 122f 68 .sleb128 -24
+ 4880 1230 1F .uleb128 0x1f
+ 4881 1231 00000000 .long .LASF360
+ 4882 1235 01 .byte 0x1
+ 4883 1236 D9 .byte 0xd9
+ 4884 1237 F7010000 .long 0x1f7
+ 4885 123b 02 .byte 0x2
+ 4886 123c 91 .byte 0x91
+ 4887 123d 60 .sleb128 -32
+ 4888 123e 23 .uleb128 0x23
+ 4889 123f 00000000 .long .LASF353
+ 4890 1243 53120000 .long 0x1253
+ 4891 1247 01 .byte 0x1
+ 4892 1248 09 .byte 0x9
+ 4893 1249 03 .byte 0x3
+ 4894 124a 00000000 .quad __PRETTY_FUNCTION__.7378
+ 4894 00000000
+ 4895 1252 00 .byte 0x0
+ 4896 1253 0B .uleb128 0xb
+ 4897 1254 E9110000 .long 0x11e9
+ 4898 1258 1E .uleb128 0x1e
+ 4899 1259 00000000 .long .LASF362
+ 4900 125d 01 .byte 0x1
+ 4901 125e E4 .byte 0xe4
+ 4902 125f 01 .byte 0x1
+ 4903 1260 3D050000 .long 0x53d
+ 4904 1264 00000000 .quad .LFB610
+ 4904 00000000
+ 4905 126c 00000000 .quad .LFE610
+ 4905 00000000
+ 4906 1274 00000000 .long .LLST9
+ 4907 1278 97120000 .long 0x1297
+ 4908 127c 1F .uleb128 0x1f
+ 4909 127d 00000000 .long .LASF349
+ 4910 1281 01 .byte 0x1
+ 4911 1282 E4 .byte 0xe4
+
GAS LISTING /tmp/ccWvEaWW.s page 115
+
+
+ 4912 1283 61040000 .long 0x461
+ 4913 1287 02 .byte 0x2
+ 4914 1288 91 .byte 0x91
+ 4915 1289 68 .sleb128 -24
+ 4916 128a 22 .uleb128 0x22
+ 4917 128b 637600 .string "cv"
+ 4918 128e 01 .byte 0x1
+ 4919 128f E5 .byte 0xe5
+ 4920 1290 3D050000 .long 0x53d
+ 4921 1294 01 .byte 0x1
+ 4922 1295 61 .byte 0x61
+ 4923 1296 00 .byte 0x0
+ 4924 1297 1E .uleb128 0x1e
+ 4925 1298 00000000 .long .LASF363
+ 4926 129c 01 .byte 0x1
+ 4927 129d EB .byte 0xeb
+ 4928 129e 01 .byte 0x1
+ 4929 129f 3D050000 .long 0x53d
+ 4930 12a3 00000000 .quad .LFB611
+ 4930 00000000
+ 4931 12ab 00000000 .quad .LFE611
+ 4931 00000000
+ 4932 12b3 00000000 .long .LLST10
+ 4933 12b7 D6120000 .long 0x12d6
+ 4934 12bb 1F .uleb128 0x1f
+ 4935 12bc 00000000 .long .LASF349
+ 4936 12c0 01 .byte 0x1
+ 4937 12c1 EB .byte 0xeb
+ 4938 12c2 61040000 .long 0x461
+ 4939 12c6 02 .byte 0x2
+ 4940 12c7 91 .byte 0x91
+ 4941 12c8 68 .sleb128 -24
+ 4942 12c9 22 .uleb128 0x22
+ 4943 12ca 637600 .string "cv"
+ 4944 12cd 01 .byte 0x1
+ 4945 12ce EC .byte 0xec
+ 4946 12cf 3D050000 .long 0x53d
+ 4947 12d3 01 .byte 0x1
+ 4948 12d4 61 .byte 0x61
+ 4949 12d5 00 .byte 0x0
+ 4950 12d6 1E .uleb128 0x1e
+ 4951 12d7 00000000 .long .LASF364
+ 4952 12db 01 .byte 0x1
+ 4953 12dc F2 .byte 0xf2
+ 4954 12dd 01 .byte 0x1
+ 4955 12de 7B000000 .long 0x7b
+ 4956 12e2 00000000 .quad .LFB612
+ 4956 00000000
+ 4957 12ea 00000000 .quad .LFE612
+ 4957 00000000
+ 4958 12f2 00000000 .long .LLST11
+ 4959 12f6 31130000 .long 0x1331
+ 4960 12fa 1F .uleb128 0x1f
+ 4961 12fb 00000000 .long .LASF349
+ 4962 12ff 01 .byte 0x1
+ 4963 1300 F2 .byte 0xf2
+ 4964 1301 61040000 .long 0x461
+
GAS LISTING /tmp/ccWvEaWW.s page 116
+
+
+ 4965 1305 02 .byte 0x2
+ 4966 1306 91 .byte 0x91
+ 4967 1307 58 .sleb128 -40
+ 4968 1308 22 .uleb128 0x22
+ 4969 1309 696E00 .string "in"
+ 4970 130c 01 .byte 0x1
+ 4971 130d F3 .byte 0xf3
+ 4972 130e 1F040000 .long 0x41f
+ 4973 1312 02 .byte 0x2
+ 4974 1313 91 .byte 0x91
+ 4975 1314 50 .sleb128 -48
+ 4976 1315 22 .uleb128 0x22
+ 4977 1316 6F757400 .string "out"
+ 4978 131a 01 .byte 0x1
+ 4979 131b F3 .byte 0xf3
+ 4980 131c B4000000 .long 0xb4
+ 4981 1320 02 .byte 0x2
+ 4982 1321 91 .byte 0x91
+ 4983 1322 48 .sleb128 -56
+ 4984 1323 20 .uleb128 0x20
+ 4985 1324 637600 .string "cv"
+ 4986 1327 01 .byte 0x1
+ 4987 1328 F5 .byte 0xf5
+ 4988 1329 3D050000 .long 0x53d
+ 4989 132d 02 .byte 0x2
+ 4990 132e 91 .byte 0x91
+ 4991 132f 60 .sleb128 -32
+ 4992 1330 00 .byte 0x0
+ 4993 1331 1E .uleb128 0x1e
+ 4994 1332 00000000 .long .LASF365
+ 4995 1336 01 .byte 0x1
+ 4996 1337 FE .byte 0xfe
+ 4997 1338 01 .byte 0x1
+ 4998 1339 7B000000 .long 0x7b
+ 4999 133d 00000000 .quad .LFB613
+ 4999 00000000
+ 5000 1345 00000000 .quad .LFE613
+ 5000 00000000
+ 5001 134d 00000000 .long .LLST12
+ 5002 1351 8D130000 .long 0x138d
+ 5003 1355 1F .uleb128 0x1f
+ 5004 1356 00000000 .long .LASF349
+ 5005 135a 01 .byte 0x1
+ 5006 135b FE .byte 0xfe
+ 5007 135c 61040000 .long 0x461
+ 5008 1360 02 .byte 0x2
+ 5009 1361 91 .byte 0x91
+ 5010 1362 58 .sleb128 -40
+ 5011 1363 22 .uleb128 0x22
+ 5012 1364 696E00 .string "in"
+ 5013 1367 01 .byte 0x1
+ 5014 1368 FF .byte 0xff
+ 5015 1369 1F040000 .long 0x41f
+ 5016 136d 02 .byte 0x2
+ 5017 136e 91 .byte 0x91
+ 5018 136f 50 .sleb128 -48
+ 5019 1370 22 .uleb128 0x22
+
GAS LISTING /tmp/ccWvEaWW.s page 117
+
+
+ 5020 1371 6F757400 .string "out"
+ 5021 1375 01 .byte 0x1
+ 5022 1376 FF .byte 0xff
+ 5023 1377 B4000000 .long 0xb4
+ 5024 137b 02 .byte 0x2
+ 5025 137c 91 .byte 0x91
+ 5026 137d 48 .sleb128 -56
+ 5027 137e 24 .uleb128 0x24
+ 5028 137f 637600 .string "cv"
+ 5029 1382 01 .byte 0x1
+ 5030 1383 0101 .value 0x101
+ 5031 1385 3D050000 .long 0x53d
+ 5032 1389 02 .byte 0x2
+ 5033 138a 91 .byte 0x91
+ 5034 138b 60 .sleb128 -32
+ 5035 138c 00 .byte 0x0
+ 5036 138d 25 .uleb128 0x25
+ 5037 138e 00000000 .long .LASF366
+ 5038 1392 01 .byte 0x1
+ 5039 1393 0A01 .value 0x10a
+ 5040 1395 01 .byte 0x1
+ 5041 1396 7B000000 .long 0x7b
+ 5042 139a 00000000 .quad .LFB614
+ 5042 00000000
+ 5043 13a2 00000000 .quad .LFE614
+ 5043 00000000
+ 5044 13aa 00000000 .long .LLST13
+ 5045 13ae 15140000 .long 0x1415
+ 5046 13b2 26 .uleb128 0x26
+ 5047 13b3 00000000 .long .LASF349
+ 5048 13b7 01 .byte 0x1
+ 5049 13b8 0A01 .value 0x10a
+ 5050 13ba 61040000 .long 0x461
+ 5051 13be 02 .byte 0x2
+ 5052 13bf 91 .byte 0x91
+ 5053 13c0 58 .sleb128 -40
+ 5054 13c1 27 .uleb128 0x27
+ 5055 13c2 696E00 .string "in"
+ 5056 13c5 01 .byte 0x1
+ 5057 13c6 0A01 .value 0x10a
+ 5058 13c8 1F040000 .long 0x41f
+ 5059 13cc 02 .byte 0x2
+ 5060 13cd 91 .byte 0x91
+ 5061 13ce 50 .sleb128 -48
+ 5062 13cf 27 .uleb128 0x27
+ 5063 13d0 6F757400 .string "out"
+ 5064 13d4 01 .byte 0x1
+ 5065 13d5 0A01 .value 0x10a
+ 5066 13d7 B4000000 .long 0xb4
+ 5067 13db 02 .byte 0x2
+ 5068 13dc 91 .byte 0x91
+ 5069 13dd 48 .sleb128 -56
+ 5070 13de 24 .uleb128 0x24
+ 5071 13df 726300 .string "rc"
+ 5072 13e2 01 .byte 0x1
+ 5073 13e3 0C01 .value 0x10c
+ 5074 13e5 7B000000 .long 0x7b
+
GAS LISTING /tmp/ccWvEaWW.s page 118
+
+
+ 5075 13e9 02 .byte 0x2
+ 5076 13ea 91 .byte 0x91
+ 5077 13eb 6C .sleb128 -20
+ 5078 13ec 23 .uleb128 0x23
+ 5079 13ed 00000000 .long .LASF353
+ 5080 13f1 25140000 .long 0x1425
+ 5081 13f5 01 .byte 0x1
+ 5082 13f6 09 .byte 0x9
+ 5083 13f7 03 .byte 0x3
+ 5084 13f8 00000000 .quad __PRETTY_FUNCTION__.7427
+ 5084 00000000
+ 5085 1400 23 .uleb128 0x23
+ 5086 1401 00000000 .long .LASF354
+ 5087 1405 2A140000 .long 0x142a
+ 5088 1409 01 .byte 0x1
+ 5089 140a 09 .byte 0x9
+ 5090 140b 03 .byte 0x3
+ 5091 140c 00000000 .quad __func__.7428
+ 5091 00000000
+ 5092 1414 00 .byte 0x0
+ 5093 1415 1B .uleb128 0x1b
+ 5094 1416 C1000000 .long 0xc1
+ 5095 141a 25140000 .long 0x1425
+ 5096 141e 17 .uleb128 0x17
+ 5097 141f B1000000 .long 0xb1
+ 5098 1423 16 .byte 0x16
+ 5099 1424 00 .byte 0x0
+ 5100 1425 0B .uleb128 0xb
+ 5101 1426 15140000 .long 0x1415
+ 5102 142a 0B .uleb128 0xb
+ 5103 142b 15140000 .long 0x1415
+ 5104 142f 25 .uleb128 0x25
+ 5105 1430 00000000 .long .LASF367
+ 5106 1434 01 .byte 0x1
+ 5107 1435 1E01 .value 0x11e
+ 5108 1437 01 .byte 0x1
+ 5109 1438 7B000000 .long 0x7b
+ 5110 143c 00000000 .quad .LFB615
+ 5110 00000000
+ 5111 1444 00000000 .quad .LFE615
+ 5111 00000000
+ 5112 144c 00000000 .long .LLST14
+ 5113 1450 B7140000 .long 0x14b7
+ 5114 1454 26 .uleb128 0x26
+ 5115 1455 00000000 .long .LASF349
+ 5116 1459 01 .byte 0x1
+ 5117 145a 1E01 .value 0x11e
+ 5118 145c 61040000 .long 0x461
+ 5119 1460 02 .byte 0x2
+ 5120 1461 91 .byte 0x91
+ 5121 1462 58 .sleb128 -40
+ 5122 1463 27 .uleb128 0x27
+ 5123 1464 696E00 .string "in"
+ 5124 1467 01 .byte 0x1
+ 5125 1468 1E01 .value 0x11e
+ 5126 146a 1F040000 .long 0x41f
+ 5127 146e 02 .byte 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 119
+
+
+ 5128 146f 91 .byte 0x91
+ 5129 1470 50 .sleb128 -48
+ 5130 1471 27 .uleb128 0x27
+ 5131 1472 6F757400 .string "out"
+ 5132 1476 01 .byte 0x1
+ 5133 1477 1E01 .value 0x11e
+ 5134 1479 B4000000 .long 0xb4
+ 5135 147d 02 .byte 0x2
+ 5136 147e 91 .byte 0x91
+ 5137 147f 48 .sleb128 -56
+ 5138 1480 24 .uleb128 0x24
+ 5139 1481 726300 .string "rc"
+ 5140 1484 01 .byte 0x1
+ 5141 1485 2001 .value 0x120
+ 5142 1487 7B000000 .long 0x7b
+ 5143 148b 02 .byte 0x2
+ 5144 148c 91 .byte 0x91
+ 5145 148d 6C .sleb128 -20
+ 5146 148e 23 .uleb128 0x23
+ 5147 148f 00000000 .long .LASF353
+ 5148 1493 B7140000 .long 0x14b7
+ 5149 1497 01 .byte 0x1
+ 5150 1498 09 .byte 0x9
+ 5151 1499 03 .byte 0x3
+ 5152 149a 00000000 .quad __PRETTY_FUNCTION__.7443
+ 5152 00000000
+ 5153 14a2 23 .uleb128 0x23
+ 5154 14a3 00000000 .long .LASF354
+ 5155 14a7 BC140000 .long 0x14bc
+ 5156 14ab 01 .byte 0x1
+ 5157 14ac 09 .byte 0x9
+ 5158 14ad 03 .byte 0x3
+ 5159 14ae 00000000 .quad __func__.7444
+ 5159 00000000
+ 5160 14b6 00 .byte 0x0
+ 5161 14b7 0B .uleb128 0xb
+ 5162 14b8 15140000 .long 0x1415
+ 5163 14bc 0B .uleb128 0xb
+ 5164 14bd 15140000 .long 0x1415
+ 5165 14c1 25 .uleb128 0x25
+ 5166 14c2 00000000 .long .LASF368
+ 5167 14c6 01 .byte 0x1
+ 5168 14c7 5C01 .value 0x15c
+ 5169 14c9 01 .byte 0x1
+ 5170 14ca 7B000000 .long 0x7b
+ 5171 14ce 00000000 .quad .LFB616
+ 5171 00000000
+ 5172 14d6 00000000 .quad .LFE616
+ 5172 00000000
+ 5173 14de 00000000 .long .LLST15
+ 5174 14e2 40150000 .long 0x1540
+ 5175 14e6 26 .uleb128 0x26
+ 5176 14e7 00000000 .long .LASF349
+ 5177 14eb 01 .byte 0x1
+ 5178 14ec 5C01 .value 0x15c
+ 5179 14ee 61040000 .long 0x461
+ 5180 14f2 02 .byte 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 120
+
+
+ 5181 14f3 91 .byte 0x91
+ 5182 14f4 58 .sleb128 -40
+ 5183 14f5 27 .uleb128 0x27
+ 5184 14f6 696E00 .string "in"
+ 5185 14f9 01 .byte 0x1
+ 5186 14fa 5C01 .value 0x15c
+ 5187 14fc 1F040000 .long 0x41f
+ 5188 1500 02 .byte 0x2
+ 5189 1501 91 .byte 0x91
+ 5190 1502 50 .sleb128 -48
+ 5191 1503 27 .uleb128 0x27
+ 5192 1504 6F757400 .string "out"
+ 5193 1508 01 .byte 0x1
+ 5194 1509 5C01 .value 0x15c
+ 5195 150b B4000000 .long 0xb4
+ 5196 150f 02 .byte 0x2
+ 5197 1510 91 .byte 0x91
+ 5198 1511 48 .sleb128 -56
+ 5199 1512 26 .uleb128 0x26
+ 5200 1513 00000000 .long .LASF369
+ 5201 1517 01 .byte 0x1
+ 5202 1518 5C01 .value 0x15c
+ 5203 151a 62000000 .long 0x62
+ 5204 151e 02 .byte 0x2
+ 5205 151f 91 .byte 0x91
+ 5206 1520 44 .sleb128 -60
+ 5207 1521 24 .uleb128 0x24
+ 5208 1522 70696E00 .string "pin"
+ 5209 1526 01 .byte 0x1
+ 5210 1527 5E01 .value 0x15e
+ 5211 1529 40150000 .long 0x1540
+ 5212 152d 02 .byte 0x2
+ 5213 152e 91 .byte 0x91
+ 5214 152f 60 .sleb128 -32
+ 5215 1530 28 .uleb128 0x28
+ 5216 1531 00000000 .long .LASF370
+ 5217 1535 01 .byte 0x1
+ 5218 1536 5F01 .value 0x15f
+ 5219 1538 4B150000 .long 0x154b
+ 5220 153c 02 .byte 0x2
+ 5221 153d 91 .byte 0x91
+ 5222 153e 68 .sleb128 -24
+ 5223 153f 00 .byte 0x0
+ 5224 1540 0A .uleb128 0xa
+ 5225 1541 08 .byte 0x8
+ 5226 1542 46150000 .long 0x1546
+ 5227 1546 0B .uleb128 0xb
+ 5228 1547 49000000 .long 0x49
+ 5229 154b 0A .uleb128 0xa
+ 5230 154c 08 .byte 0x8
+ 5231 154d 49000000 .long 0x49
+ 5232 1551 25 .uleb128 0x25
+ 5233 1552 00000000 .long .LASF371
+ 5234 1556 01 .byte 0x1
+ 5235 1557 6C01 .value 0x16c
+ 5236 1559 01 .byte 0x1
+ 5237 155a 7B000000 .long 0x7b
+
GAS LISTING /tmp/ccWvEaWW.s page 121
+
+
+ 5238 155e 00000000 .quad .LFB617
+ 5238 00000000
+ 5239 1566 00000000 .quad .LFE617
+ 5239 00000000
+ 5240 156e 00000000 .long .LLST16
+ 5241 1572 D0150000 .long 0x15d0
+ 5242 1576 26 .uleb128 0x26
+ 5243 1577 00000000 .long .LASF349
+ 5244 157b 01 .byte 0x1
+ 5245 157c 6C01 .value 0x16c
+ 5246 157e 61040000 .long 0x461
+ 5247 1582 02 .byte 0x2
+ 5248 1583 91 .byte 0x91
+ 5249 1584 58 .sleb128 -40
+ 5250 1585 27 .uleb128 0x27
+ 5251 1586 696E00 .string "in"
+ 5252 1589 01 .byte 0x1
+ 5253 158a 6C01 .value 0x16c
+ 5254 158c 1F040000 .long 0x41f
+ 5255 1590 02 .byte 0x2
+ 5256 1591 91 .byte 0x91
+ 5257 1592 50 .sleb128 -48
+ 5258 1593 27 .uleb128 0x27
+ 5259 1594 6F757400 .string "out"
+ 5260 1598 01 .byte 0x1
+ 5261 1599 6C01 .value 0x16c
+ 5262 159b B4000000 .long 0xb4
+ 5263 159f 02 .byte 0x2
+ 5264 15a0 91 .byte 0x91
+ 5265 15a1 48 .sleb128 -56
+ 5266 15a2 26 .uleb128 0x26
+ 5267 15a3 00000000 .long .LASF369
+ 5268 15a7 01 .byte 0x1
+ 5269 15a8 6C01 .value 0x16c
+ 5270 15aa 62000000 .long 0x62
+ 5271 15ae 02 .byte 0x2
+ 5272 15af 91 .byte 0x91
+ 5273 15b0 44 .sleb128 -60
+ 5274 15b1 24 .uleb128 0x24
+ 5275 15b2 70696E00 .string "pin"
+ 5276 15b6 01 .byte 0x1
+ 5277 15b7 6E01 .value 0x16e
+ 5278 15b9 40150000 .long 0x1540
+ 5279 15bd 02 .byte 0x2
+ 5280 15be 91 .byte 0x91
+ 5281 15bf 60 .sleb128 -32
+ 5282 15c0 28 .uleb128 0x28
+ 5283 15c1 00000000 .long .LASF370
+ 5284 15c5 01 .byte 0x1
+ 5285 15c6 6F01 .value 0x16f
+ 5286 15c8 4B150000 .long 0x154b
+ 5287 15cc 02 .byte 0x2
+ 5288 15cd 91 .byte 0x91
+ 5289 15ce 68 .sleb128 -24
+ 5290 15cf 00 .byte 0x0
+ 5291 15d0 25 .uleb128 0x25
+ 5292 15d1 00000000 .long .LASF372
+
GAS LISTING /tmp/ccWvEaWW.s page 122
+
+
+ 5293 15d5 01 .byte 0x1
+ 5294 15d6 8201 .value 0x182
+ 5295 15d8 01 .byte 0x1
+ 5296 15d9 7B000000 .long 0x7b
+ 5297 15dd 00000000 .quad .LFB618
+ 5297 00000000
+ 5298 15e5 00000000 .quad .LFE618
+ 5298 00000000
+ 5299 15ed 00000000 .long .LLST17
+ 5300 15f1 70160000 .long 0x1670
+ 5301 15f5 26 .uleb128 0x26
+ 5302 15f6 00000000 .long .LASF349
+ 5303 15fa 01 .byte 0x1
+ 5304 15fb 8201 .value 0x182
+ 5305 15fd DE030000 .long 0x3de
+ 5306 1601 03 .byte 0x3
+ 5307 1602 91 .byte 0x91
+ 5308 1603 B87F .sleb128 -72
+ 5309 1605 27 .uleb128 0x27
+ 5310 1606 696E00 .string "in"
+ 5311 1609 01 .byte 0x1
+ 5312 160a 8201 .value 0x182
+ 5313 160c 1F040000 .long 0x41f
+ 5314 1610 03 .byte 0x3
+ 5315 1611 91 .byte 0x91
+ 5316 1612 B07F .sleb128 -80
+ 5317 1614 27 .uleb128 0x27
+ 5318 1615 6F757400 .string "out"
+ 5319 1619 01 .byte 0x1
+ 5320 161a 8201 .value 0x182
+ 5321 161c B4000000 .long 0xb4
+ 5322 1620 03 .byte 0x3
+ 5323 1621 91 .byte 0x91
+ 5324 1622 A87F .sleb128 -88
+ 5325 1624 26 .uleb128 0x26
+ 5326 1625 00000000 .long .LASF369
+ 5327 1629 01 .byte 0x1
+ 5328 162a 8201 .value 0x182
+ 5329 162c 62000000 .long 0x62
+ 5330 1630 03 .byte 0x3
+ 5331 1631 91 .byte 0x91
+ 5332 1632 A47F .sleb128 -92
+ 5333 1634 24 .uleb128 0x24
+ 5334 1635 637600 .string "cv"
+ 5335 1638 01 .byte 0x1
+ 5336 1639 8401 .value 0x184
+ 5337 163b 3D050000 .long 0x53d
+ 5338 163f 02 .byte 0x2
+ 5339 1640 91 .byte 0x91
+ 5340 1641 40 .sleb128 -64
+ 5341 1642 28 .uleb128 0x28
+ 5342 1643 00000000 .long .LASF357
+ 5343 1647 01 .byte 0x1
+ 5344 1648 8501 .value 0x185
+ 5345 164a 3D050000 .long 0x53d
+ 5346 164e 02 .byte 0x2
+ 5347 164f 91 .byte 0x91
+
GAS LISTING /tmp/ccWvEaWW.s page 123
+
+
+ 5348 1650 50 .sleb128 -48
+ 5349 1651 24 .uleb128 0x24
+ 5350 1652 70696E00 .string "pin"
+ 5351 1656 01 .byte 0x1
+ 5352 1657 8601 .value 0x186
+ 5353 1659 40150000 .long 0x1540
+ 5354 165d 02 .byte 0x2
+ 5355 165e 91 .byte 0x91
+ 5356 165f 60 .sleb128 -32
+ 5357 1660 28 .uleb128 0x28
+ 5358 1661 00000000 .long .LASF370
+ 5359 1665 01 .byte 0x1
+ 5360 1666 8701 .value 0x187
+ 5361 1668 4B150000 .long 0x154b
+ 5362 166c 02 .byte 0x2
+ 5363 166d 91 .byte 0x91
+ 5364 166e 68 .sleb128 -24
+ 5365 166f 00 .byte 0x0
+ 5366 1670 25 .uleb128 0x25
+ 5367 1671 00000000 .long .LASF373
+ 5368 1675 01 .byte 0x1
+ 5369 1676 A401 .value 0x1a4
+ 5370 1678 01 .byte 0x1
+ 5371 1679 7B000000 .long 0x7b
+ 5372 167d 00000000 .quad .LFB619
+ 5372 00000000
+ 5373 1685 00000000 .quad .LFE619
+ 5373 00000000
+ 5374 168d 00000000 .long .LLST18
+ 5375 1691 32170000 .long 0x1732
+ 5376 1695 26 .uleb128 0x26
+ 5377 1696 00000000 .long .LASF349
+ 5378 169a 01 .byte 0x1
+ 5379 169b A401 .value 0x1a4
+ 5380 169d DE030000 .long 0x3de
+ 5381 16a1 03 .byte 0x3
+ 5382 16a2 91 .byte 0x91
+ 5383 16a3 A87F .sleb128 -88
+ 5384 16a5 27 .uleb128 0x27
+ 5385 16a6 696E00 .string "in"
+ 5386 16a9 01 .byte 0x1
+ 5387 16aa A401 .value 0x1a4
+ 5388 16ac 1F040000 .long 0x41f
+ 5389 16b0 03 .byte 0x3
+ 5390 16b1 91 .byte 0x91
+ 5391 16b2 A07F .sleb128 -96
+ 5392 16b4 27 .uleb128 0x27
+ 5393 16b5 6F757400 .string "out"
+ 5394 16b9 01 .byte 0x1
+ 5395 16ba A401 .value 0x1a4
+ 5396 16bc B4000000 .long 0xb4
+ 5397 16c0 03 .byte 0x3
+ 5398 16c1 91 .byte 0x91
+ 5399 16c2 987F .sleb128 -104
+ 5400 16c4 26 .uleb128 0x26
+ 5401 16c5 00000000 .long .LASF369
+ 5402 16c9 01 .byte 0x1
+
GAS LISTING /tmp/ccWvEaWW.s page 124
+
+
+ 5403 16ca A401 .value 0x1a4
+ 5404 16cc 62000000 .long 0x62
+ 5405 16d0 03 .byte 0x3
+ 5406 16d1 91 .byte 0x91
+ 5407 16d2 947F .sleb128 -108
+ 5408 16d4 24 .uleb128 0x24
+ 5409 16d5 637600 .string "cv"
+ 5410 16d8 01 .byte 0x1
+ 5411 16d9 A601 .value 0x1a6
+ 5412 16db 3D050000 .long 0x53d
+ 5413 16df 03 .byte 0x3
+ 5414 16e0 91 .byte 0x91
+ 5415 16e1 B07F .sleb128 -80
+ 5416 16e3 28 .uleb128 0x28
+ 5417 16e4 00000000 .long .LASF357
+ 5418 16e8 01 .byte 0x1
+ 5419 16e9 A701 .value 0x1a7
+ 5420 16eb 3D050000 .long 0x53d
+ 5421 16ef 02 .byte 0x2
+ 5422 16f0 91 .byte 0x91
+ 5423 16f1 40 .sleb128 -64
+ 5424 16f2 24 .uleb128 0x24
+ 5425 16f3 70696E00 .string "pin"
+ 5426 16f7 01 .byte 0x1
+ 5427 16f8 A801 .value 0x1a8
+ 5428 16fa 40150000 .long 0x1540
+ 5429 16fe 02 .byte 0x2
+ 5430 16ff 91 .byte 0x91
+ 5431 1700 50 .sleb128 -48
+ 5432 1701 28 .uleb128 0x28
+ 5433 1702 00000000 .long .LASF370
+ 5434 1706 01 .byte 0x1
+ 5435 1707 A901 .value 0x1a9
+ 5436 1709 4B150000 .long 0x154b
+ 5437 170d 02 .byte 0x2
+ 5438 170e 91 .byte 0x91
+ 5439 170f 58 .sleb128 -40
+ 5440 1710 29 .uleb128 0x29
+ 5441 1711 00000000 .quad .LBB2
+ 5441 00000000
+ 5442 1719 00000000 .quad .LBE2
+ 5442 00000000
+ 5443 1721 28 .uleb128 0x28
+ 5444 1722 00000000 .long .LASF374
+ 5445 1726 01 .byte 0x1
+ 5446 1727 B101 .value 0x1b1
+ 5447 1729 3D050000 .long 0x53d
+ 5448 172d 02 .byte 0x2
+ 5449 172e 91 .byte 0x91
+ 5450 172f 60 .sleb128 -32
+ 5451 1730 00 .byte 0x0
+ 5452 1731 00 .byte 0x0
+ 5453 1732 25 .uleb128 0x25
+ 5454 1733 00000000 .long .LASF375
+ 5455 1737 01 .byte 0x1
+ 5456 1738 CA01 .value 0x1ca
+ 5457 173a 01 .byte 0x1
+
GAS LISTING /tmp/ccWvEaWW.s page 125
+
+
+ 5458 173b 7B000000 .long 0x7b
+ 5459 173f 00000000 .quad .LFB620
+ 5459 00000000
+ 5460 1747 00000000 .quad .LFE620
+ 5460 00000000
+ 5461 174f 00000000 .long .LLST19
+ 5462 1753 F4170000 .long 0x17f4
+ 5463 1757 26 .uleb128 0x26
+ 5464 1758 00000000 .long .LASF349
+ 5465 175c 01 .byte 0x1
+ 5466 175d CA01 .value 0x1ca
+ 5467 175f DE030000 .long 0x3de
+ 5468 1763 03 .byte 0x3
+ 5469 1764 91 .byte 0x91
+ 5470 1765 A87F .sleb128 -88
+ 5471 1767 27 .uleb128 0x27
+ 5472 1768 696E00 .string "in"
+ 5473 176b 01 .byte 0x1
+ 5474 176c CA01 .value 0x1ca
+ 5475 176e 1F040000 .long 0x41f
+ 5476 1772 03 .byte 0x3
+ 5477 1773 91 .byte 0x91
+ 5478 1774 A07F .sleb128 -96
+ 5479 1776 27 .uleb128 0x27
+ 5480 1777 6F757400 .string "out"
+ 5481 177b 01 .byte 0x1
+ 5482 177c CA01 .value 0x1ca
+ 5483 177e B4000000 .long 0xb4
+ 5484 1782 03 .byte 0x3
+ 5485 1783 91 .byte 0x91
+ 5486 1784 987F .sleb128 -104
+ 5487 1786 26 .uleb128 0x26
+ 5488 1787 00000000 .long .LASF369
+ 5489 178b 01 .byte 0x1
+ 5490 178c CA01 .value 0x1ca
+ 5491 178e 62000000 .long 0x62
+ 5492 1792 03 .byte 0x3
+ 5493 1793 91 .byte 0x91
+ 5494 1794 947F .sleb128 -108
+ 5495 1796 24 .uleb128 0x24
+ 5496 1797 637600 .string "cv"
+ 5497 179a 01 .byte 0x1
+ 5498 179b CD01 .value 0x1cd
+ 5499 179d 3D050000 .long 0x53d
+ 5500 17a1 03 .byte 0x3
+ 5501 17a2 91 .byte 0x91
+ 5502 17a3 B07F .sleb128 -80
+ 5503 17a5 28 .uleb128 0x28
+ 5504 17a6 00000000 .long .LASF357
+ 5505 17aa 01 .byte 0x1
+ 5506 17ab CE01 .value 0x1ce
+ 5507 17ad 3D050000 .long 0x53d
+ 5508 17b1 02 .byte 0x2
+ 5509 17b2 91 .byte 0x91
+ 5510 17b3 40 .sleb128 -64
+ 5511 17b4 24 .uleb128 0x24
+ 5512 17b5 70696E00 .string "pin"
+
GAS LISTING /tmp/ccWvEaWW.s page 126
+
+
+ 5513 17b9 01 .byte 0x1
+ 5514 17ba CF01 .value 0x1cf
+ 5515 17bc 40150000 .long 0x1540
+ 5516 17c0 02 .byte 0x2
+ 5517 17c1 91 .byte 0x91
+ 5518 17c2 50 .sleb128 -48
+ 5519 17c3 28 .uleb128 0x28
+ 5520 17c4 00000000 .long .LASF370
+ 5521 17c8 01 .byte 0x1
+ 5522 17c9 D001 .value 0x1d0
+ 5523 17cb 4B150000 .long 0x154b
+ 5524 17cf 02 .byte 0x2
+ 5525 17d0 91 .byte 0x91
+ 5526 17d1 58 .sleb128 -40
+ 5527 17d2 29 .uleb128 0x29
+ 5528 17d3 00000000 .quad .LBB3
+ 5528 00000000
+ 5529 17db 00000000 .quad .LBE3
+ 5529 00000000
+ 5530 17e3 28 .uleb128 0x28
+ 5531 17e4 00000000 .long .LASF374
+ 5532 17e8 01 .byte 0x1
+ 5533 17e9 D801 .value 0x1d8
+ 5534 17eb 3D050000 .long 0x53d
+ 5535 17ef 02 .byte 0x2
+ 5536 17f0 91 .byte 0x91
+ 5537 17f1 60 .sleb128 -32
+ 5538 17f2 00 .byte 0x0
+ 5539 17f3 00 .byte 0x0
+ 5540 17f4 25 .uleb128 0x25
+ 5541 17f5 00000000 .long .LASF376
+ 5542 17f9 01 .byte 0x1
+ 5543 17fa EB01 .value 0x1eb
+ 5544 17fc 01 .byte 0x1
+ 5545 17fd 7B000000 .long 0x7b
+ 5546 1801 00000000 .quad .LFB621
+ 5546 00000000
+ 5547 1809 00000000 .quad .LFE621
+ 5547 00000000
+ 5548 1811 00000000 .long .LLST20
+ 5549 1815 B6180000 .long 0x18b6
+ 5550 1819 26 .uleb128 0x26
+ 5551 181a 00000000 .long .LASF349
+ 5552 181e 01 .byte 0x1
+ 5553 181f EB01 .value 0x1eb
+ 5554 1821 DE030000 .long 0x3de
+ 5555 1825 03 .byte 0x3
+ 5556 1826 91 .byte 0x91
+ 5557 1827 A87F .sleb128 -88
+ 5558 1829 27 .uleb128 0x27
+ 5559 182a 696E00 .string "in"
+ 5560 182d 01 .byte 0x1
+ 5561 182e EB01 .value 0x1eb
+ 5562 1830 1F040000 .long 0x41f
+ 5563 1834 03 .byte 0x3
+ 5564 1835 91 .byte 0x91
+ 5565 1836 A07F .sleb128 -96
+
GAS LISTING /tmp/ccWvEaWW.s page 127
+
+
+ 5566 1838 27 .uleb128 0x27
+ 5567 1839 6F757400 .string "out"
+ 5568 183d 01 .byte 0x1
+ 5569 183e EB01 .value 0x1eb
+ 5570 1840 B4000000 .long 0xb4
+ 5571 1844 03 .byte 0x3
+ 5572 1845 91 .byte 0x91
+ 5573 1846 987F .sleb128 -104
+ 5574 1848 26 .uleb128 0x26
+ 5575 1849 00000000 .long .LASF369
+ 5576 184d 01 .byte 0x1
+ 5577 184e EB01 .value 0x1eb
+ 5578 1850 62000000 .long 0x62
+ 5579 1854 03 .byte 0x3
+ 5580 1855 91 .byte 0x91
+ 5581 1856 947F .sleb128 -108
+ 5582 1858 24 .uleb128 0x24
+ 5583 1859 637600 .string "cv"
+ 5584 185c 01 .byte 0x1
+ 5585 185d EE01 .value 0x1ee
+ 5586 185f 3D050000 .long 0x53d
+ 5587 1863 03 .byte 0x3
+ 5588 1864 91 .byte 0x91
+ 5589 1865 B07F .sleb128 -80
+ 5590 1867 28 .uleb128 0x28
+ 5591 1868 00000000 .long .LASF357
+ 5592 186c 01 .byte 0x1
+ 5593 186d EF01 .value 0x1ef
+ 5594 186f 3D050000 .long 0x53d
+ 5595 1873 02 .byte 0x2
+ 5596 1874 91 .byte 0x91
+ 5597 1875 40 .sleb128 -64
+ 5598 1876 24 .uleb128 0x24
+ 5599 1877 70696E00 .string "pin"
+ 5600 187b 01 .byte 0x1
+ 5601 187c F001 .value 0x1f0
+ 5602 187e 40150000 .long 0x1540
+ 5603 1882 02 .byte 0x2
+ 5604 1883 91 .byte 0x91
+ 5605 1884 50 .sleb128 -48
+ 5606 1885 28 .uleb128 0x28
+ 5607 1886 00000000 .long .LASF370
+ 5608 188a 01 .byte 0x1
+ 5609 188b F101 .value 0x1f1
+ 5610 188d 4B150000 .long 0x154b
+ 5611 1891 02 .byte 0x2
+ 5612 1892 91 .byte 0x91
+ 5613 1893 58 .sleb128 -40
+ 5614 1894 29 .uleb128 0x29
+ 5615 1895 00000000 .quad .LBB4
+ 5615 00000000
+ 5616 189d 00000000 .quad .LBE4
+ 5616 00000000
+ 5617 18a5 28 .uleb128 0x28
+ 5618 18a6 00000000 .long .LASF374
+ 5619 18aa 01 .byte 0x1
+ 5620 18ab F901 .value 0x1f9
+
GAS LISTING /tmp/ccWvEaWW.s page 128
+
+
+ 5621 18ad 3D050000 .long 0x53d
+ 5622 18b1 02 .byte 0x2
+ 5623 18b2 91 .byte 0x91
+ 5624 18b3 60 .sleb128 -32
+ 5625 18b4 00 .byte 0x0
+ 5626 18b5 00 .byte 0x0
+ 5627 18b6 25 .uleb128 0x25
+ 5628 18b7 00000000 .long .LASF377
+ 5629 18bb 01 .byte 0x1
+ 5630 18bc 1002 .value 0x210
+ 5631 18be 01 .byte 0x1
+ 5632 18bf 7B000000 .long 0x7b
+ 5633 18c3 00000000 .quad .LFB622
+ 5633 00000000
+ 5634 18cb 00000000 .quad .LFE622
+ 5634 00000000
+ 5635 18d3 00000000 .long .LLST21
+ 5636 18d7 56190000 .long 0x1956
+ 5637 18db 26 .uleb128 0x26
+ 5638 18dc 00000000 .long .LASF349
+ 5639 18e0 01 .byte 0x1
+ 5640 18e1 1002 .value 0x210
+ 5641 18e3 DE030000 .long 0x3de
+ 5642 18e7 03 .byte 0x3
+ 5643 18e8 91 .byte 0x91
+ 5644 18e9 B87F .sleb128 -72
+ 5645 18eb 27 .uleb128 0x27
+ 5646 18ec 696E00 .string "in"
+ 5647 18ef 01 .byte 0x1
+ 5648 18f0 1002 .value 0x210
+ 5649 18f2 1F040000 .long 0x41f
+ 5650 18f6 03 .byte 0x3
+ 5651 18f7 91 .byte 0x91
+ 5652 18f8 B07F .sleb128 -80
+ 5653 18fa 27 .uleb128 0x27
+ 5654 18fb 6F757400 .string "out"
+ 5655 18ff 01 .byte 0x1
+ 5656 1900 1002 .value 0x210
+ 5657 1902 B4000000 .long 0xb4
+ 5658 1906 03 .byte 0x3
+ 5659 1907 91 .byte 0x91
+ 5660 1908 A87F .sleb128 -88
+ 5661 190a 26 .uleb128 0x26
+ 5662 190b 00000000 .long .LASF369
+ 5663 190f 01 .byte 0x1
+ 5664 1910 1002 .value 0x210
+ 5665 1912 62000000 .long 0x62
+ 5666 1916 03 .byte 0x3
+ 5667 1917 91 .byte 0x91
+ 5668 1918 A47F .sleb128 -92
+ 5669 191a 24 .uleb128 0x24
+ 5670 191b 637600 .string "cv"
+ 5671 191e 01 .byte 0x1
+ 5672 191f 1302 .value 0x213
+ 5673 1921 3D050000 .long 0x53d
+ 5674 1925 02 .byte 0x2
+ 5675 1926 91 .byte 0x91
+
GAS LISTING /tmp/ccWvEaWW.s page 129
+
+
+ 5676 1927 40 .sleb128 -64
+ 5677 1928 28 .uleb128 0x28
+ 5678 1929 00000000 .long .LASF357
+ 5679 192d 01 .byte 0x1
+ 5680 192e 1402 .value 0x214
+ 5681 1930 3D050000 .long 0x53d
+ 5682 1934 02 .byte 0x2
+ 5683 1935 91 .byte 0x91
+ 5684 1936 50 .sleb128 -48
+ 5685 1937 24 .uleb128 0x24
+ 5686 1938 70696E00 .string "pin"
+ 5687 193c 01 .byte 0x1
+ 5688 193d 1502 .value 0x215
+ 5689 193f 40150000 .long 0x1540
+ 5690 1943 02 .byte 0x2
+ 5691 1944 91 .byte 0x91
+ 5692 1945 60 .sleb128 -32
+ 5693 1946 28 .uleb128 0x28
+ 5694 1947 00000000 .long .LASF370
+ 5695 194b 01 .byte 0x1
+ 5696 194c 1602 .value 0x216
+ 5697 194e 4B150000 .long 0x154b
+ 5698 1952 02 .byte 0x2
+ 5699 1953 91 .byte 0x91
+ 5700 1954 68 .sleb128 -24
+ 5701 1955 00 .byte 0x0
+ 5702 1956 25 .uleb128 0x25
+ 5703 1957 00000000 .long .LASF378
+ 5704 195b 01 .byte 0x1
+ 5705 195c 2E02 .value 0x22e
+ 5706 195e 01 .byte 0x1
+ 5707 195f 7B000000 .long 0x7b
+ 5708 1963 00000000 .quad .LFB623
+ 5708 00000000
+ 5709 196b 00000000 .quad .LFE623
+ 5709 00000000
+ 5710 1973 00000000 .long .LLST22
+ 5711 1977 F6190000 .long 0x19f6
+ 5712 197b 26 .uleb128 0x26
+ 5713 197c 00000000 .long .LASF349
+ 5714 1980 01 .byte 0x1
+ 5715 1981 2E02 .value 0x22e
+ 5716 1983 DE030000 .long 0x3de
+ 5717 1987 03 .byte 0x3
+ 5718 1988 91 .byte 0x91
+ 5719 1989 B87F .sleb128 -72
+ 5720 198b 27 .uleb128 0x27
+ 5721 198c 696E00 .string "in"
+ 5722 198f 01 .byte 0x1
+ 5723 1990 2E02 .value 0x22e
+ 5724 1992 1F040000 .long 0x41f
+ 5725 1996 03 .byte 0x3
+ 5726 1997 91 .byte 0x91
+ 5727 1998 B07F .sleb128 -80
+ 5728 199a 27 .uleb128 0x27
+ 5729 199b 6F757400 .string "out"
+ 5730 199f 01 .byte 0x1
+
GAS LISTING /tmp/ccWvEaWW.s page 130
+
+
+ 5731 19a0 2E02 .value 0x22e
+ 5732 19a2 B4000000 .long 0xb4
+ 5733 19a6 03 .byte 0x3
+ 5734 19a7 91 .byte 0x91
+ 5735 19a8 A87F .sleb128 -88
+ 5736 19aa 26 .uleb128 0x26
+ 5737 19ab 00000000 .long .LASF369
+ 5738 19af 01 .byte 0x1
+ 5739 19b0 2E02 .value 0x22e
+ 5740 19b2 62000000 .long 0x62
+ 5741 19b6 03 .byte 0x3
+ 5742 19b7 91 .byte 0x91
+ 5743 19b8 A47F .sleb128 -92
+ 5744 19ba 24 .uleb128 0x24
+ 5745 19bb 637600 .string "cv"
+ 5746 19be 01 .byte 0x1
+ 5747 19bf 3102 .value 0x231
+ 5748 19c1 3D050000 .long 0x53d
+ 5749 19c5 02 .byte 0x2
+ 5750 19c6 91 .byte 0x91
+ 5751 19c7 40 .sleb128 -64
+ 5752 19c8 28 .uleb128 0x28
+ 5753 19c9 00000000 .long .LASF357
+ 5754 19cd 01 .byte 0x1
+ 5755 19ce 3202 .value 0x232
+ 5756 19d0 3D050000 .long 0x53d
+ 5757 19d4 02 .byte 0x2
+ 5758 19d5 91 .byte 0x91
+ 5759 19d6 50 .sleb128 -48
+ 5760 19d7 24 .uleb128 0x24
+ 5761 19d8 70696E00 .string "pin"
+ 5762 19dc 01 .byte 0x1
+ 5763 19dd 3302 .value 0x233
+ 5764 19df 40150000 .long 0x1540
+ 5765 19e3 02 .byte 0x2
+ 5766 19e4 91 .byte 0x91
+ 5767 19e5 60 .sleb128 -32
+ 5768 19e6 28 .uleb128 0x28
+ 5769 19e7 00000000 .long .LASF370
+ 5770 19eb 01 .byte 0x1
+ 5771 19ec 3402 .value 0x234
+ 5772 19ee 4B150000 .long 0x154b
+ 5773 19f2 02 .byte 0x2
+ 5774 19f3 91 .byte 0x91
+ 5775 19f4 68 .sleb128 -24
+ 5776 19f5 00 .byte 0x0
+ 5777 19f6 25 .uleb128 0x25
+ 5778 19f7 00000000 .long .LASF379
+ 5779 19fb 01 .byte 0x1
+ 5780 19fc 5102 .value 0x251
+ 5781 19fe 01 .byte 0x1
+ 5782 19ff 7B000000 .long 0x7b
+ 5783 1a03 00000000 .quad .LFB624
+ 5783 00000000
+ 5784 1a0b 00000000 .quad .LFE624
+ 5784 00000000
+ 5785 1a13 00000000 .long .LLST23
+
GAS LISTING /tmp/ccWvEaWW.s page 131
+
+
+ 5786 1a17 961A0000 .long 0x1a96
+ 5787 1a1b 26 .uleb128 0x26
+ 5788 1a1c 00000000 .long .LASF349
+ 5789 1a20 01 .byte 0x1
+ 5790 1a21 5102 .value 0x251
+ 5791 1a23 DE030000 .long 0x3de
+ 5792 1a27 03 .byte 0x3
+ 5793 1a28 91 .byte 0x91
+ 5794 1a29 B87F .sleb128 -72
+ 5795 1a2b 27 .uleb128 0x27
+ 5796 1a2c 696E00 .string "in"
+ 5797 1a2f 01 .byte 0x1
+ 5798 1a30 5102 .value 0x251
+ 5799 1a32 1F040000 .long 0x41f
+ 5800 1a36 03 .byte 0x3
+ 5801 1a37 91 .byte 0x91
+ 5802 1a38 B07F .sleb128 -80
+ 5803 1a3a 27 .uleb128 0x27
+ 5804 1a3b 6F757400 .string "out"
+ 5805 1a3f 01 .byte 0x1
+ 5806 1a40 5102 .value 0x251
+ 5807 1a42 B4000000 .long 0xb4
+ 5808 1a46 03 .byte 0x3
+ 5809 1a47 91 .byte 0x91
+ 5810 1a48 A87F .sleb128 -88
+ 5811 1a4a 26 .uleb128 0x26
+ 5812 1a4b 00000000 .long .LASF369
+ 5813 1a4f 01 .byte 0x1
+ 5814 1a50 5102 .value 0x251
+ 5815 1a52 62000000 .long 0x62
+ 5816 1a56 03 .byte 0x3
+ 5817 1a57 91 .byte 0x91
+ 5818 1a58 A47F .sleb128 -92
+ 5819 1a5a 24 .uleb128 0x24
+ 5820 1a5b 637600 .string "cv"
+ 5821 1a5e 01 .byte 0x1
+ 5822 1a5f 5402 .value 0x254
+ 5823 1a61 3D050000 .long 0x53d
+ 5824 1a65 02 .byte 0x2
+ 5825 1a66 91 .byte 0x91
+ 5826 1a67 40 .sleb128 -64
+ 5827 1a68 28 .uleb128 0x28
+ 5828 1a69 00000000 .long .LASF357
+ 5829 1a6d 01 .byte 0x1
+ 5830 1a6e 5502 .value 0x255
+ 5831 1a70 3D050000 .long 0x53d
+ 5832 1a74 02 .byte 0x2
+ 5833 1a75 91 .byte 0x91
+ 5834 1a76 50 .sleb128 -48
+ 5835 1a77 24 .uleb128 0x24
+ 5836 1a78 70696E00 .string "pin"
+ 5837 1a7c 01 .byte 0x1
+ 5838 1a7d 5602 .value 0x256
+ 5839 1a7f 40150000 .long 0x1540
+ 5840 1a83 02 .byte 0x2
+ 5841 1a84 91 .byte 0x91
+ 5842 1a85 60 .sleb128 -32
+
GAS LISTING /tmp/ccWvEaWW.s page 132
+
+
+ 5843 1a86 28 .uleb128 0x28
+ 5844 1a87 00000000 .long .LASF370
+ 5845 1a8b 01 .byte 0x1
+ 5846 1a8c 5702 .value 0x257
+ 5847 1a8e 4B150000 .long 0x154b
+ 5848 1a92 02 .byte 0x2
+ 5849 1a93 91 .byte 0x91
+ 5850 1a94 68 .sleb128 -24
+ 5851 1a95 00 .byte 0x0
+ 5852 1a96 25 .uleb128 0x25
+ 5853 1a97 00000000 .long .LASF380
+ 5854 1a9b 01 .byte 0x1
+ 5855 1a9c 6F02 .value 0x26f
+ 5856 1a9e 01 .byte 0x1
+ 5857 1a9f 7B000000 .long 0x7b
+ 5858 1aa3 00000000 .quad .LFB625
+ 5858 00000000
+ 5859 1aab 00000000 .quad .LFE625
+ 5859 00000000
+ 5860 1ab3 00000000 .long .LLST24
+ 5861 1ab7 F71A0000 .long 0x1af7
+ 5862 1abb 26 .uleb128 0x26
+ 5863 1abc 00000000 .long .LASF349
+ 5864 1ac0 01 .byte 0x1
+ 5865 1ac1 6F02 .value 0x26f
+ 5866 1ac3 DE030000 .long 0x3de
+ 5867 1ac7 02 .byte 0x2
+ 5868 1ac8 91 .byte 0x91
+ 5869 1ac9 58 .sleb128 -40
+ 5870 1aca 27 .uleb128 0x27
+ 5871 1acb 696E00 .string "in"
+ 5872 1ace 01 .byte 0x1
+ 5873 1acf 6F02 .value 0x26f
+ 5874 1ad1 1F040000 .long 0x41f
+ 5875 1ad5 02 .byte 0x2
+ 5876 1ad6 91 .byte 0x91
+ 5877 1ad7 50 .sleb128 -48
+ 5878 1ad8 27 .uleb128 0x27
+ 5879 1ad9 6F757400 .string "out"
+ 5880 1add 01 .byte 0x1
+ 5881 1ade 6F02 .value 0x26f
+ 5882 1ae0 B4000000 .long 0xb4
+ 5883 1ae4 02 .byte 0x2
+ 5884 1ae5 91 .byte 0x91
+ 5885 1ae6 48 .sleb128 -56
+ 5886 1ae7 26 .uleb128 0x26
+ 5887 1ae8 00000000 .long .LASF369
+ 5888 1aec 01 .byte 0x1
+ 5889 1aed 6F02 .value 0x26f
+ 5890 1aef 62000000 .long 0x62
+ 5891 1af3 02 .byte 0x2
+ 5892 1af4 91 .byte 0x91
+ 5893 1af5 44 .sleb128 -60
+ 5894 1af6 00 .byte 0x0
+ 5895 1af7 25 .uleb128 0x25
+ 5896 1af8 00000000 .long .LASF381
+ 5897 1afc 01 .byte 0x1
+
GAS LISTING /tmp/ccWvEaWW.s page 133
+
+
+ 5898 1afd 7D02 .value 0x27d
+ 5899 1aff 01 .byte 0x1
+ 5900 1b00 7B000000 .long 0x7b
+ 5901 1b04 00000000 .quad .LFB626
+ 5901 00000000
+ 5902 1b0c 00000000 .quad .LFE626
+ 5902 00000000
+ 5903 1b14 00000000 .long .LLST25
+ 5904 1b18 801B0000 .long 0x1b80
+ 5905 1b1c 26 .uleb128 0x26
+ 5906 1b1d 00000000 .long .LASF349
+ 5907 1b21 01 .byte 0x1
+ 5908 1b22 7D02 .value 0x27d
+ 5909 1b24 DE030000 .long 0x3de
+ 5910 1b28 02 .byte 0x2
+ 5911 1b29 91 .byte 0x91
+ 5912 1b2a 68 .sleb128 -24
+ 5913 1b2b 27 .uleb128 0x27
+ 5914 1b2c 696E00 .string "in"
+ 5915 1b2f 01 .byte 0x1
+ 5916 1b30 7D02 .value 0x27d
+ 5917 1b32 1F040000 .long 0x41f
+ 5918 1b36 02 .byte 0x2
+ 5919 1b37 91 .byte 0x91
+ 5920 1b38 60 .sleb128 -32
+ 5921 1b39 27 .uleb128 0x27
+ 5922 1b3a 6F757400 .string "out"
+ 5923 1b3e 01 .byte 0x1
+ 5924 1b3f 7D02 .value 0x27d
+ 5925 1b41 B4000000 .long 0xb4
+ 5926 1b45 02 .byte 0x2
+ 5927 1b46 91 .byte 0x91
+ 5928 1b47 58 .sleb128 -40
+ 5929 1b48 26 .uleb128 0x26
+ 5930 1b49 00000000 .long .LASF369
+ 5931 1b4d 01 .byte 0x1
+ 5932 1b4e 7D02 .value 0x27d
+ 5933 1b50 62000000 .long 0x62
+ 5934 1b54 02 .byte 0x2
+ 5935 1b55 91 .byte 0x91
+ 5936 1b56 54 .sleb128 -44
+ 5937 1b57 23 .uleb128 0x23
+ 5938 1b58 00000000 .long .LASF353
+ 5939 1b5c 901B0000 .long 0x1b90
+ 5940 1b60 01 .byte 0x1
+ 5941 1b61 09 .byte 0x9
+ 5942 1b62 03 .byte 0x3
+ 5943 1b63 00000000 .quad __PRETTY_FUNCTION__.7677
+ 5943 00000000
+ 5944 1b6b 23 .uleb128 0x23
+ 5945 1b6c 00000000 .long .LASF354
+ 5946 1b70 951B0000 .long 0x1b95
+ 5947 1b74 01 .byte 0x1
+ 5948 1b75 09 .byte 0x9
+ 5949 1b76 03 .byte 0x3
+ 5950 1b77 00000000 .quad __func__.7678
+ 5950 00000000
+
GAS LISTING /tmp/ccWvEaWW.s page 134
+
+
+ 5951 1b7f 00 .byte 0x0
+ 5952 1b80 1B .uleb128 0x1b
+ 5953 1b81 C1000000 .long 0xc1
+ 5954 1b85 901B0000 .long 0x1b90
+ 5955 1b89 17 .uleb128 0x17
+ 5956 1b8a B1000000 .long 0xb1
+ 5957 1b8e 19 .byte 0x19
+ 5958 1b8f 00 .byte 0x0
+ 5959 1b90 0B .uleb128 0xb
+ 5960 1b91 801B0000 .long 0x1b80
+ 5961 1b95 0B .uleb128 0xb
+ 5962 1b96 801B0000 .long 0x1b80
+ 5963 1b9a 25 .uleb128 0x25
+ 5964 1b9b 00000000 .long .LASF382
+ 5965 1b9f 01 .byte 0x1
+ 5966 1ba0 8402 .value 0x284
+ 5967 1ba2 01 .byte 0x1
+ 5968 1ba3 7B000000 .long 0x7b
+ 5969 1ba7 00000000 .quad .LFB627
+ 5969 00000000
+ 5970 1baf 00000000 .quad .LFE627
+ 5970 00000000
+ 5971 1bb7 00000000 .long .LLST26
+ 5972 1bbb 231C0000 .long 0x1c23
+ 5973 1bbf 26 .uleb128 0x26
+ 5974 1bc0 00000000 .long .LASF349
+ 5975 1bc4 01 .byte 0x1
+ 5976 1bc5 8402 .value 0x284
+ 5977 1bc7 DE030000 .long 0x3de
+ 5978 1bcb 02 .byte 0x2
+ 5979 1bcc 91 .byte 0x91
+ 5980 1bcd 68 .sleb128 -24
+ 5981 1bce 27 .uleb128 0x27
+ 5982 1bcf 696E00 .string "in"
+ 5983 1bd2 01 .byte 0x1
+ 5984 1bd3 8402 .value 0x284
+ 5985 1bd5 1F040000 .long 0x41f
+ 5986 1bd9 02 .byte 0x2
+ 5987 1bda 91 .byte 0x91
+ 5988 1bdb 60 .sleb128 -32
+ 5989 1bdc 27 .uleb128 0x27
+ 5990 1bdd 6F757400 .string "out"
+ 5991 1be1 01 .byte 0x1
+ 5992 1be2 8402 .value 0x284
+ 5993 1be4 B4000000 .long 0xb4
+ 5994 1be8 02 .byte 0x2
+ 5995 1be9 91 .byte 0x91
+ 5996 1bea 58 .sleb128 -40
+ 5997 1beb 26 .uleb128 0x26
+ 5998 1bec 00000000 .long .LASF369
+ 5999 1bf0 01 .byte 0x1
+ 6000 1bf1 8402 .value 0x284
+ 6001 1bf3 62000000 .long 0x62
+ 6002 1bf7 02 .byte 0x2
+ 6003 1bf8 91 .byte 0x91
+ 6004 1bf9 54 .sleb128 -44
+ 6005 1bfa 23 .uleb128 0x23
+
GAS LISTING /tmp/ccWvEaWW.s page 135
+
+
+ 6006 1bfb 00000000 .long .LASF353
+ 6007 1bff 231C0000 .long 0x1c23
+ 6008 1c03 01 .byte 0x1
+ 6009 1c04 09 .byte 0x9
+ 6010 1c05 03 .byte 0x3
+ 6011 1c06 00000000 .quad __PRETTY_FUNCTION__.7687
+ 6011 00000000
+ 6012 1c0e 23 .uleb128 0x23
+ 6013 1c0f 00000000 .long .LASF354
+ 6014 1c13 281C0000 .long 0x1c28
+ 6015 1c17 01 .byte 0x1
+ 6016 1c18 09 .byte 0x9
+ 6017 1c19 03 .byte 0x3
+ 6018 1c1a 00000000 .quad __func__.7688
+ 6018 00000000
+ 6019 1c22 00 .byte 0x0
+ 6020 1c23 0B .uleb128 0xb
+ 6021 1c24 801B0000 .long 0x1b80
+ 6022 1c28 0B .uleb128 0xb
+ 6023 1c29 801B0000 .long 0x1b80
+ 6024 1c2d 25 .uleb128 0x25
+ 6025 1c2e 00000000 .long .LASF383
+ 6026 1c32 01 .byte 0x1
+ 6027 1c33 A702 .value 0x2a7
+ 6028 1c35 01 .byte 0x1
+ 6029 1c36 7B000000 .long 0x7b
+ 6030 1c3a 00000000 .quad .LFB628
+ 6030 00000000
+ 6031 1c42 00000000 .quad .LFE628
+ 6031 00000000
+ 6032 1c4a 00000000 .long .LLST27
+ 6033 1c4e A81C0000 .long 0x1ca8
+ 6034 1c52 26 .uleb128 0x26
+ 6035 1c53 00000000 .long .LASF384
+ 6036 1c57 01 .byte 0x1
+ 6037 1c58 A702 .value 0x2a7
+ 6038 1c5a A81C0000 .long 0x1ca8
+ 6039 1c5e 02 .byte 0x2
+ 6040 1c5f 91 .byte 0x91
+ 6041 1c60 58 .sleb128 -40
+ 6042 1c61 26 .uleb128 0x26
+ 6043 1c62 00000000 .long .LASF46
+ 6044 1c66 01 .byte 0x1
+ 6045 1c67 A802 .value 0x2a8
+ 6046 1c69 AE1C0000 .long 0x1cae
+ 6047 1c6d 02 .byte 0x2
+ 6048 1c6e 91 .byte 0x91
+ 6049 1c6f 50 .sleb128 -48
+ 6050 1c70 24 .uleb128 0x24
+ 6051 1c71 6F626A00 .string "obj"
+ 6052 1c75 01 .byte 0x1
+ 6053 1c76 AA02 .value 0x2aa
+ 6054 1c78 B91C0000 .long 0x1cb9
+ 6055 1c7c 02 .byte 0x2
+ 6056 1c7d 91 .byte 0x91
+ 6057 1c7e 68 .sleb128 -24
+ 6058 1c7f 23 .uleb128 0x23
+
GAS LISTING /tmp/ccWvEaWW.s page 136
+
+
+ 6059 1c80 00000000 .long .LASF353
+ 6060 1c84 CF1C0000 .long 0x1ccf
+ 6061 1c88 01 .byte 0x1
+ 6062 1c89 09 .byte 0x9
+ 6063 1c8a 03 .byte 0x3
+ 6064 1c8b 00000000 .quad __PRETTY_FUNCTION__.7697
+ 6064 00000000
+ 6065 1c93 23 .uleb128 0x23
+ 6066 1c94 00000000 .long .LASF354
+ 6067 1c98 D41C0000 .long 0x1cd4
+ 6068 1c9c 01 .byte 0x1
+ 6069 1c9d 09 .byte 0x9
+ 6070 1c9e 03 .byte 0x3
+ 6071 1c9f 00000000 .quad __func__.7698
+ 6071 00000000
+ 6072 1ca7 00 .byte 0x0
+ 6073 1ca8 0A .uleb128 0xa
+ 6074 1ca9 08 .byte 0x8
+ 6075 1caa DE030000 .long 0x3de
+ 6076 1cae 0A .uleb128 0xa
+ 6077 1caf 08 .byte 0x8
+ 6078 1cb0 B41C0000 .long 0x1cb4
+ 6079 1cb4 0B .uleb128 0xb
+ 6080 1cb5 98080000 .long 0x898
+ 6081 1cb9 0A .uleb128 0xa
+ 6082 1cba 08 .byte 0x8
+ 6083 1cbb CE070000 .long 0x7ce
+ 6084 1cbf 1B .uleb128 0x1b
+ 6085 1cc0 C1000000 .long 0xc1
+ 6086 1cc4 CF1C0000 .long 0x1ccf
+ 6087 1cc8 17 .uleb128 0x17
+ 6088 1cc9 B1000000 .long 0xb1
+ 6089 1ccd 17 .byte 0x17
+ 6090 1cce 00 .byte 0x0
+ 6091 1ccf 0B .uleb128 0xb
+ 6092 1cd0 BF1C0000 .long 0x1cbf
+ 6093 1cd4 0B .uleb128 0xb
+ 6094 1cd5 BF1C0000 .long 0x1cbf
+ 6095 1cd9 25 .uleb128 0x25
+ 6096 1cda 00000000 .long .LASF385
+ 6097 1cde 01 .byte 0x1
+ 6098 1cdf B402 .value 0x2b4
+ 6099 1ce1 01 .byte 0x1
+ 6100 1ce2 7B000000 .long 0x7b
+ 6101 1ce6 00000000 .quad .LFB629
+ 6101 00000000
+ 6102 1cee 00000000 .quad .LFE629
+ 6102 00000000
+ 6103 1cf6 00000000 .long .LLST28
+ 6104 1cfa 3B1D0000 .long 0x1d3b
+ 6105 1cfe 26 .uleb128 0x26
+ 6106 1cff 00000000 .long .LASF349
+ 6107 1d03 01 .byte 0x1
+ 6108 1d04 B402 .value 0x2b4
+ 6109 1d06 DE030000 .long 0x3de
+ 6110 1d0a 02 .byte 0x2
+ 6111 1d0b 91 .byte 0x91
+
GAS LISTING /tmp/ccWvEaWW.s page 137
+
+
+ 6112 1d0c 58 .sleb128 -40
+ 6113 1d0d 26 .uleb128 0x26
+ 6114 1d0e 00000000 .long .LASF46
+ 6115 1d12 01 .byte 0x1
+ 6116 1d13 B502 .value 0x2b5
+ 6117 1d15 AE1C0000 .long 0x1cae
+ 6118 1d19 02 .byte 0x2
+ 6119 1d1a 91 .byte 0x91
+ 6120 1d1b 50 .sleb128 -48
+ 6121 1d1c 24 .uleb128 0x24
+ 6122 1d1d 64616400 .string "dad"
+ 6123 1d21 01 .byte 0x1
+ 6124 1d22 B702 .value 0x2b7
+ 6125 1d24 3B1D0000 .long 0x1d3b
+ 6126 1d28 02 .byte 0x2
+ 6127 1d29 91 .byte 0x91
+ 6128 1d2a 60 .sleb128 -32
+ 6129 1d2b 24 .uleb128 0x24
+ 6130 1d2c 61657300 .string "aes"
+ 6131 1d30 01 .byte 0x1
+ 6132 1d31 B802 .value 0x2b8
+ 6133 1d33 B91C0000 .long 0x1cb9
+ 6134 1d37 02 .byte 0x2
+ 6135 1d38 91 .byte 0x91
+ 6136 1d39 68 .sleb128 -24
+ 6137 1d3a 00 .byte 0x0
+ 6138 1d3b 0A .uleb128 0xa
+ 6139 1d3c 08 .byte 0x8
+ 6140 1d3d 54010000 .long 0x154
+ 6141 1d41 25 .uleb128 0x25
+ 6142 1d42 00000000 .long .LASF386
+ 6143 1d46 01 .byte 0x1
+ 6144 1d47 CA02 .value 0x2ca
+ 6145 1d49 01 .byte 0x1
+ 6146 1d4a 7B000000 .long 0x7b
+ 6147 1d4e 00000000 .quad .LFB630
+ 6147 00000000
+ 6148 1d56 00000000 .quad .LFE630
+ 6148 00000000
+ 6149 1d5e 00000000 .long .LLST29
+ 6150 1d62 BC1D0000 .long 0x1dbc
+ 6151 1d66 26 .uleb128 0x26
+ 6152 1d67 00000000 .long .LASF384
+ 6153 1d6b 01 .byte 0x1
+ 6154 1d6c CA02 .value 0x2ca
+ 6155 1d6e A81C0000 .long 0x1ca8
+ 6156 1d72 02 .byte 0x2
+ 6157 1d73 91 .byte 0x91
+ 6158 1d74 58 .sleb128 -40
+ 6159 1d75 26 .uleb128 0x26
+ 6160 1d76 00000000 .long .LASF46
+ 6161 1d7a 01 .byte 0x1
+ 6162 1d7b CB02 .value 0x2cb
+ 6163 1d7d AE1C0000 .long 0x1cae
+ 6164 1d81 02 .byte 0x2
+ 6165 1d82 91 .byte 0x91
+ 6166 1d83 50 .sleb128 -48
+
GAS LISTING /tmp/ccWvEaWW.s page 138
+
+
+ 6167 1d84 24 .uleb128 0x24
+ 6168 1d85 6F626A00 .string "obj"
+ 6169 1d89 01 .byte 0x1
+ 6170 1d8a CD02 .value 0x2cd
+ 6171 1d8c BC1D0000 .long 0x1dbc
+ 6172 1d90 02 .byte 0x2
+ 6173 1d91 91 .byte 0x91
+ 6174 1d92 68 .sleb128 -24
+ 6175 1d93 23 .uleb128 0x23
+ 6176 1d94 00000000 .long .LASF353
+ 6177 1d98 D21D0000 .long 0x1dd2
+ 6178 1d9c 01 .byte 0x1
+ 6179 1d9d 09 .byte 0x9
+ 6180 1d9e 03 .byte 0x3
+ 6181 1d9f 00000000 .quad __PRETTY_FUNCTION__.7724
+ 6181 00000000
+ 6182 1da7 23 .uleb128 0x23
+ 6183 1da8 00000000 .long .LASF354
+ 6184 1dac D71D0000 .long 0x1dd7
+ 6185 1db0 01 .byte 0x1
+ 6186 1db1 09 .byte 0x9
+ 6187 1db2 03 .byte 0x3
+ 6188 1db3 00000000 .quad __func__.7725
+ 6188 00000000
+ 6189 1dbb 00 .byte 0x0
+ 6190 1dbc 0A .uleb128 0xa
+ 6191 1dbd 08 .byte 0x8
+ 6192 1dbe 30080000 .long 0x830
+ 6193 1dc2 1B .uleb128 0x1b
+ 6194 1dc3 C1000000 .long 0xc1
+ 6195 1dc7 D21D0000 .long 0x1dd2
+ 6196 1dcb 17 .uleb128 0x17
+ 6197 1dcc B1000000 .long 0xb1
+ 6198 1dd0 18 .byte 0x18
+ 6199 1dd1 00 .byte 0x0
+ 6200 1dd2 0B .uleb128 0xb
+ 6201 1dd3 C21D0000 .long 0x1dc2
+ 6202 1dd7 0B .uleb128 0xb
+ 6203 1dd8 C21D0000 .long 0x1dc2
+ 6204 1ddc 25 .uleb128 0x25
+ 6205 1ddd 00000000 .long .LASF387
+ 6206 1de1 01 .byte 0x1
+ 6207 1de2 D702 .value 0x2d7
+ 6208 1de4 01 .byte 0x1
+ 6209 1de5 7B000000 .long 0x7b
+ 6210 1de9 00000000 .quad .LFB631
+ 6210 00000000
+ 6211 1df1 00000000 .quad .LFE631
+ 6211 00000000
+ 6212 1df9 00000000 .long .LLST30
+ 6213 1dfd 3E1E0000 .long 0x1e3e
+ 6214 1e01 26 .uleb128 0x26
+ 6215 1e02 00000000 .long .LASF349
+ 6216 1e06 01 .byte 0x1
+ 6217 1e07 D702 .value 0x2d7
+ 6218 1e09 DE030000 .long 0x3de
+ 6219 1e0d 02 .byte 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 139
+
+
+ 6220 1e0e 91 .byte 0x91
+ 6221 1e0f 58 .sleb128 -40
+ 6222 1e10 26 .uleb128 0x26
+ 6223 1e11 00000000 .long .LASF46
+ 6224 1e15 01 .byte 0x1
+ 6225 1e16 D802 .value 0x2d8
+ 6226 1e18 AE1C0000 .long 0x1cae
+ 6227 1e1c 02 .byte 0x2
+ 6228 1e1d 91 .byte 0x91
+ 6229 1e1e 50 .sleb128 -48
+ 6230 1e1f 24 .uleb128 0x24
+ 6231 1e20 64616400 .string "dad"
+ 6232 1e24 01 .byte 0x1
+ 6233 1e25 DA02 .value 0x2da
+ 6234 1e27 3B1D0000 .long 0x1d3b
+ 6235 1e2b 02 .byte 0x2
+ 6236 1e2c 91 .byte 0x91
+ 6237 1e2d 60 .sleb128 -32
+ 6238 1e2e 28 .uleb128 0x28
+ 6239 1e2f 00000000 .long .LASF388
+ 6240 1e33 01 .byte 0x1
+ 6241 1e34 DB02 .value 0x2db
+ 6242 1e36 BC1D0000 .long 0x1dbc
+ 6243 1e3a 02 .byte 0x2
+ 6244 1e3b 91 .byte 0x91
+ 6245 1e3c 68 .sleb128 -24
+ 6246 1e3d 00 .byte 0x0
+ 6247 1e3e 2A .uleb128 0x2a
+ 6248 1e3f 01 .byte 0x1
+ 6249 1e40 00000000 .long .LASF396
+ 6250 1e44 01 .byte 0x1
+ 6251 1e45 EC02 .value 0x2ec
+ 6252 1e47 01 .byte 0x1
+ 6253 1e48 7B000000 .long 0x7b
+ 6254 1e4c 00000000 .quad .LFB632
+ 6254 00000000
+ 6255 1e54 00000000 .quad .LFE632
+ 6255 00000000
+ 6256 1e5c 00000000 .long .LLST31
+ 6257 1e60 E91E0000 .long 0x1ee9
+ 6258 1e64 26 .uleb128 0x26
+ 6259 1e65 00000000 .long .LASF389
+ 6260 1e69 01 .byte 0x1
+ 6261 1e6a EC02 .value 0x2ec
+ 6262 1e6c E91E0000 .long 0x1ee9
+ 6263 1e70 02 .byte 0x2
+ 6264 1e71 91 .byte 0x91
+ 6265 1e72 48 .sleb128 -56
+ 6266 1e73 26 .uleb128 0x26
+ 6267 1e74 00000000 .long .LASF390
+ 6268 1e78 01 .byte 0x1
+ 6269 1e79 EC02 .value 0x2ec
+ 6270 1e7b 72080000 .long 0x872
+ 6271 1e7f 02 .byte 0x2
+ 6272 1e80 91 .byte 0x91
+ 6273 1e81 44 .sleb128 -60
+ 6274 1e82 24 .uleb128 0x24
+
GAS LISTING /tmp/ccWvEaWW.s page 140
+
+
+ 6275 1e83 726300 .string "rc"
+ 6276 1e86 01 .byte 0x1
+ 6277 1e87 EE02 .value 0x2ee
+ 6278 1e89 7B000000 .long 0x7b
+ 6279 1e8d 02 .byte 0x2
+ 6280 1e8e 91 .byte 0x91
+ 6281 1e8f 6C .sleb128 -20
+ 6282 1e90 28 .uleb128 0x28
+ 6283 1e91 00000000 .long .LASF46
+ 6284 1e95 01 .byte 0x1
+ 6285 1e96 EF02 .value 0x2ef
+ 6286 1e98 EF1E0000 .long 0x1eef
+ 6287 1e9c 02 .byte 0x2
+ 6288 1e9d 91 .byte 0x91
+ 6289 1e9e 60 .sleb128 -32
+ 6290 1e9f 23 .uleb128 0x23
+ 6291 1ea0 00000000 .long .LASF353
+ 6292 1ea4 051F0000 .long 0x1f05
+ 6293 1ea8 01 .byte 0x1
+ 6294 1ea9 09 .byte 0x9
+ 6295 1eaa 03 .byte 0x3
+ 6296 1eab 00000000 .quad __PRETTY_FUNCTION__.7752
+ 6296 00000000
+ 6297 1eb3 23 .uleb128 0x23
+ 6298 1eb4 00000000 .long .LASF354
+ 6299 1eb8 0A1F0000 .long 0x1f0a
+ 6300 1ebc 01 .byte 0x1
+ 6301 1ebd 09 .byte 0x9
+ 6302 1ebe 03 .byte 0x3
+ 6303 1ebf 00000000 .quad __func__.7753
+ 6303 00000000
+ 6304 1ec7 29 .uleb128 0x29
+ 6305 1ec8 00000000 .quad .LBB5
+ 6305 00000000
+ 6306 1ed0 00000000 .quad .LBE5
+ 6306 00000000
+ 6307 1ed8 24 .uleb128 0x24
+ 6308 1ed9 6F626A00 .string "obj"
+ 6309 1edd 01 .byte 0x1
+ 6310 1ede 0603 .value 0x306
+ 6311 1ee0 DE030000 .long 0x3de
+ 6312 1ee4 02 .byte 0x2
+ 6313 1ee5 91 .byte 0x91
+ 6314 1ee6 58 .sleb128 -40
+ 6315 1ee7 00 .byte 0x0
+ 6316 1ee8 00 .byte 0x0
+ 6317 1ee9 0A .uleb128 0xa
+ 6318 1eea 08 .byte 0x8
+ 6319 1eeb 3B1D0000 .long 0x1d3b
+ 6320 1eef 0A .uleb128 0xa
+ 6321 1ef0 08 .byte 0x8
+ 6322 1ef1 98080000 .long 0x898
+ 6323 1ef5 1B .uleb128 0x1b
+ 6324 1ef6 C1000000 .long 0xc1
+ 6325 1efa 051F0000 .long 0x1f05
+ 6326 1efe 17 .uleb128 0x17
+ 6327 1eff B1000000 .long 0xb1
+
GAS LISTING /tmp/ccWvEaWW.s page 141
+
+
+ 6328 1f03 13 .byte 0x13
+ 6329 1f04 00 .byte 0x0
+ 6330 1f05 0B .uleb128 0xb
+ 6331 1f06 F51E0000 .long 0x1ef5
+ 6332 1f0a 0B .uleb128 0xb
+ 6333 1f0b F51E0000 .long 0x1ef5
+ 6334 1f0f 28 .uleb128 0x28
+ 6335 1f10 00000000 .long .LASF391
+ 6336 1f14 01 .byte 0x1
+ 6337 1f15 8A02 .value 0x28a
+ 6338 1f17 87020000 .long 0x287
+ 6339 1f1b 09 .byte 0x9
+ 6340 1f1c 03 .byte 0x3
+ 6341 1f1d 00000000 .quad KCipherVecAesNi_vt_v1
+ 6341 00000000
+ 6342 1f25 1B .uleb128 0x1b
+ 6343 1f26 C1000000 .long 0xc1
+ 6344 1f2a 351F0000 .long 0x1f35
+ 6345 1f2e 17 .uleb128 0x17
+ 6346 1f2f B1000000 .long 0xb1
+ 6347 1f33 0B .byte 0xb
+ 6348 1f34 00 .byte 0x0
+ 6349 1f35 2B .uleb128 0x2b
+ 6350 1f36 00000000 .long .LASF397
+ 6351 1f3a 01 .byte 0x1
+ 6352 1f3b 38 .byte 0x38
+ 6353 1f3c 4B1F0000 .long 0x1f4b
+ 6354 1f40 01 .byte 0x1
+ 6355 1f41 09 .byte 0x9
+ 6356 1f42 03 .byte 0x3
+ 6357 1f43 00000000 .quad KCipherVecAesNiClassName
+ 6357 00000000
+ 6358 1f4b 0B .uleb128 0xb
+ 6359 1f4c 251F0000 .long 0x1f25
+ 6360 1f50 00 .byte 0x0
+ 6361 .section .debug_abbrev
+ 6362 0000 01 .uleb128 0x1
+ 6363 0001 11 .uleb128 0x11
+ 6364 0002 01 .byte 0x1
+ 6365 0003 25 .uleb128 0x25
+ 6366 0004 0E .uleb128 0xe
+ 6367 0005 13 .uleb128 0x13
+ 6368 0006 0B .uleb128 0xb
+ 6369 0007 03 .uleb128 0x3
+ 6370 0008 0E .uleb128 0xe
+ 6371 0009 1B .uleb128 0x1b
+ 6372 000a 0E .uleb128 0xe
+ 6373 000b 11 .uleb128 0x11
+ 6374 000c 01 .uleb128 0x1
+ 6375 000d 12 .uleb128 0x12
+ 6376 000e 01 .uleb128 0x1
+ 6377 000f 10 .uleb128 0x10
+ 6378 0010 06 .uleb128 0x6
+ 6379 0011 00 .byte 0x0
+ 6380 0012 00 .byte 0x0
+ 6381 0013 02 .uleb128 0x2
+ 6382 0014 24 .uleb128 0x24
+
GAS LISTING /tmp/ccWvEaWW.s page 142
+
+
+ 6383 0015 00 .byte 0x0
+ 6384 0016 0B .uleb128 0xb
+ 6385 0017 0B .uleb128 0xb
+ 6386 0018 3E .uleb128 0x3e
+ 6387 0019 0B .uleb128 0xb
+ 6388 001a 03 .uleb128 0x3
+ 6389 001b 0E .uleb128 0xe
+ 6390 001c 00 .byte 0x0
+ 6391 001d 00 .byte 0x0
+ 6392 001e 03 .uleb128 0x3
+ 6393 001f 24 .uleb128 0x24
+ 6394 0020 00 .byte 0x0
+ 6395 0021 0B .uleb128 0xb
+ 6396 0022 0B .uleb128 0xb
+ 6397 0023 3E .uleb128 0x3e
+ 6398 0024 0B .uleb128 0xb
+ 6399 0025 03 .uleb128 0x3
+ 6400 0026 08 .uleb128 0x8
+ 6401 0027 00 .byte 0x0
+ 6402 0028 00 .byte 0x0
+ 6403 0029 04 .uleb128 0x4
+ 6404 002a 16 .uleb128 0x16
+ 6405 002b 00 .byte 0x0
+ 6406 002c 03 .uleb128 0x3
+ 6407 002d 0E .uleb128 0xe
+ 6408 002e 3A .uleb128 0x3a
+ 6409 002f 0B .uleb128 0xb
+ 6410 0030 3B .uleb128 0x3b
+ 6411 0031 0B .uleb128 0xb
+ 6412 0032 49 .uleb128 0x49
+ 6413 0033 13 .uleb128 0x13
+ 6414 0034 00 .byte 0x0
+ 6415 0035 00 .byte 0x0
+ 6416 0036 05 .uleb128 0x5
+ 6417 0037 13 .uleb128 0x13
+ 6418 0038 01 .byte 0x1
+ 6419 0039 03 .uleb128 0x3
+ 6420 003a 0E .uleb128 0xe
+ 6421 003b 0B .uleb128 0xb
+ 6422 003c 0B .uleb128 0xb
+ 6423 003d 3A .uleb128 0x3a
+ 6424 003e 0B .uleb128 0xb
+ 6425 003f 3B .uleb128 0x3b
+ 6426 0040 0B .uleb128 0xb
+ 6427 0041 01 .uleb128 0x1
+ 6428 0042 13 .uleb128 0x13
+ 6429 0043 00 .byte 0x0
+ 6430 0044 00 .byte 0x0
+ 6431 0045 06 .uleb128 0x6
+ 6432 0046 0D .uleb128 0xd
+ 6433 0047 00 .byte 0x0
+ 6434 0048 03 .uleb128 0x3
+ 6435 0049 0E .uleb128 0xe
+ 6436 004a 3A .uleb128 0x3a
+ 6437 004b 0B .uleb128 0xb
+ 6438 004c 3B .uleb128 0x3b
+ 6439 004d 0B .uleb128 0xb
+
GAS LISTING /tmp/ccWvEaWW.s page 143
+
+
+ 6440 004e 49 .uleb128 0x49
+ 6441 004f 13 .uleb128 0x13
+ 6442 0050 38 .uleb128 0x38
+ 6443 0051 0A .uleb128 0xa
+ 6444 0052 00 .byte 0x0
+ 6445 0053 00 .byte 0x0
+ 6446 0054 07 .uleb128 0x7
+ 6447 0055 35 .uleb128 0x35
+ 6448 0056 00 .byte 0x0
+ 6449 0057 49 .uleb128 0x49
+ 6450 0058 13 .uleb128 0x13
+ 6451 0059 00 .byte 0x0
+ 6452 005a 00 .byte 0x0
+ 6453 005b 08 .uleb128 0x8
+ 6454 005c 24 .uleb128 0x24
+ 6455 005d 00 .byte 0x0
+ 6456 005e 0B .uleb128 0xb
+ 6457 005f 0B .uleb128 0xb
+ 6458 0060 3E .uleb128 0x3e
+ 6459 0061 0B .uleb128 0xb
+ 6460 0062 00 .byte 0x0
+ 6461 0063 00 .byte 0x0
+ 6462 0064 09 .uleb128 0x9
+ 6463 0065 0F .uleb128 0xf
+ 6464 0066 00 .byte 0x0
+ 6465 0067 0B .uleb128 0xb
+ 6466 0068 0B .uleb128 0xb
+ 6467 0069 00 .byte 0x0
+ 6468 006a 00 .byte 0x0
+ 6469 006b 0A .uleb128 0xa
+ 6470 006c 0F .uleb128 0xf
+ 6471 006d 00 .byte 0x0
+ 6472 006e 0B .uleb128 0xb
+ 6473 006f 0B .uleb128 0xb
+ 6474 0070 49 .uleb128 0x49
+ 6475 0071 13 .uleb128 0x13
+ 6476 0072 00 .byte 0x0
+ 6477 0073 00 .byte 0x0
+ 6478 0074 0B .uleb128 0xb
+ 6479 0075 26 .uleb128 0x26
+ 6480 0076 00 .byte 0x0
+ 6481 0077 49 .uleb128 0x49
+ 6482 0078 13 .uleb128 0x13
+ 6483 0079 00 .byte 0x0
+ 6484 007a 00 .byte 0x0
+ 6485 007b 0C .uleb128 0xc
+ 6486 007c 04 .uleb128 0x4
+ 6487 007d 01 .byte 0x1
+ 6488 007e 0B .uleb128 0xb
+ 6489 007f 0B .uleb128 0xb
+ 6490 0080 3A .uleb128 0x3a
+ 6491 0081 0B .uleb128 0xb
+ 6492 0082 3B .uleb128 0x3b
+ 6493 0083 0B .uleb128 0xb
+ 6494 0084 01 .uleb128 0x1
+ 6495 0085 13 .uleb128 0x13
+ 6496 0086 00 .byte 0x0
+
GAS LISTING /tmp/ccWvEaWW.s page 144
+
+
+ 6497 0087 00 .byte 0x0
+ 6498 0088 0D .uleb128 0xd
+ 6499 0089 28 .uleb128 0x28
+ 6500 008a 00 .byte 0x0
+ 6501 008b 03 .uleb128 0x3
+ 6502 008c 0E .uleb128 0xe
+ 6503 008d 1C .uleb128 0x1c
+ 6504 008e 0D .uleb128 0xd
+ 6505 008f 00 .byte 0x0
+ 6506 0090 00 .byte 0x0
+ 6507 0091 0E .uleb128 0xe
+ 6508 0092 0D .uleb128 0xd
+ 6509 0093 00 .byte 0x0
+ 6510 0094 03 .uleb128 0x3
+ 6511 0095 08 .uleb128 0x8
+ 6512 0096 3A .uleb128 0x3a
+ 6513 0097 0B .uleb128 0xb
+ 6514 0098 3B .uleb128 0x3b
+ 6515 0099 0B .uleb128 0xb
+ 6516 009a 49 .uleb128 0x49
+ 6517 009b 13 .uleb128 0x13
+ 6518 009c 38 .uleb128 0x38
+ 6519 009d 0A .uleb128 0xa
+ 6520 009e 00 .byte 0x0
+ 6521 009f 00 .byte 0x0
+ 6522 00a0 0F .uleb128 0xf
+ 6523 00a1 15 .uleb128 0x15
+ 6524 00a2 01 .byte 0x1
+ 6525 00a3 27 .uleb128 0x27
+ 6526 00a4 0C .uleb128 0xc
+ 6527 00a5 01 .uleb128 0x1
+ 6528 00a6 13 .uleb128 0x13
+ 6529 00a7 00 .byte 0x0
+ 6530 00a8 00 .byte 0x0
+ 6531 00a9 10 .uleb128 0x10
+ 6532 00aa 05 .uleb128 0x5
+ 6533 00ab 00 .byte 0x0
+ 6534 00ac 49 .uleb128 0x49
+ 6535 00ad 13 .uleb128 0x13
+ 6536 00ae 00 .byte 0x0
+ 6537 00af 00 .byte 0x0
+ 6538 00b0 11 .uleb128 0x11
+ 6539 00b1 15 .uleb128 0x15
+ 6540 00b2 01 .byte 0x1
+ 6541 00b3 27 .uleb128 0x27
+ 6542 00b4 0C .uleb128 0xc
+ 6543 00b5 49 .uleb128 0x49
+ 6544 00b6 13 .uleb128 0x13
+ 6545 00b7 01 .uleb128 0x1
+ 6546 00b8 13 .uleb128 0x13
+ 6547 00b9 00 .byte 0x0
+ 6548 00ba 00 .byte 0x0
+ 6549 00bb 12 .uleb128 0x12
+ 6550 00bc 26 .uleb128 0x26
+ 6551 00bd 00 .byte 0x0
+ 6552 00be 00 .byte 0x0
+ 6553 00bf 00 .byte 0x0
+
GAS LISTING /tmp/ccWvEaWW.s page 145
+
+
+ 6554 00c0 13 .uleb128 0x13
+ 6555 00c1 17 .uleb128 0x17
+ 6556 00c2 01 .byte 0x1
+ 6557 00c3 03 .uleb128 0x3
+ 6558 00c4 0E .uleb128 0xe
+ 6559 00c5 0B .uleb128 0xb
+ 6560 00c6 0B .uleb128 0xb
+ 6561 00c7 3A .uleb128 0x3a
+ 6562 00c8 0B .uleb128 0xb
+ 6563 00c9 3B .uleb128 0x3b
+ 6564 00ca 0B .uleb128 0xb
+ 6565 00cb 01 .uleb128 0x1
+ 6566 00cc 13 .uleb128 0x13
+ 6567 00cd 00 .byte 0x0
+ 6568 00ce 00 .byte 0x0
+ 6569 00cf 14 .uleb128 0x14
+ 6570 00d0 0D .uleb128 0xd
+ 6571 00d1 00 .byte 0x0
+ 6572 00d2 03 .uleb128 0x3
+ 6573 00d3 0E .uleb128 0xe
+ 6574 00d4 3A .uleb128 0x3a
+ 6575 00d5 0B .uleb128 0xb
+ 6576 00d6 3B .uleb128 0x3b
+ 6577 00d7 0B .uleb128 0xb
+ 6578 00d8 49 .uleb128 0x49
+ 6579 00d9 13 .uleb128 0x13
+ 6580 00da 00 .byte 0x0
+ 6581 00db 00 .byte 0x0
+ 6582 00dc 15 .uleb128 0x15
+ 6583 00dd 0D .uleb128 0xd
+ 6584 00de 00 .byte 0x0
+ 6585 00df 03 .uleb128 0x3
+ 6586 00e0 08 .uleb128 0x8
+ 6587 00e1 3A .uleb128 0x3a
+ 6588 00e2 0B .uleb128 0xb
+ 6589 00e3 3B .uleb128 0x3b
+ 6590 00e4 0B .uleb128 0xb
+ 6591 00e5 49 .uleb128 0x49
+ 6592 00e6 13 .uleb128 0x13
+ 6593 00e7 00 .byte 0x0
+ 6594 00e8 00 .byte 0x0
+ 6595 00e9 16 .uleb128 0x16
+ 6596 00ea 01 .uleb128 0x1
+ 6597 00eb 01 .byte 0x1
+ 6598 00ec 8742 .uleb128 0x2107
+ 6599 00ee 0C .uleb128 0xc
+ 6600 00ef 49 .uleb128 0x49
+ 6601 00f0 13 .uleb128 0x13
+ 6602 00f1 01 .uleb128 0x1
+ 6603 00f2 13 .uleb128 0x13
+ 6604 00f3 00 .byte 0x0
+ 6605 00f4 00 .byte 0x0
+ 6606 00f5 17 .uleb128 0x17
+ 6607 00f6 21 .uleb128 0x21
+ 6608 00f7 00 .byte 0x0
+ 6609 00f8 49 .uleb128 0x49
+ 6610 00f9 13 .uleb128 0x13
+
GAS LISTING /tmp/ccWvEaWW.s page 146
+
+
+ 6611 00fa 2F .uleb128 0x2f
+ 6612 00fb 0B .uleb128 0xb
+ 6613 00fc 00 .byte 0x0
+ 6614 00fd 00 .byte 0x0
+ 6615 00fe 18 .uleb128 0x18
+ 6616 00ff 15 .uleb128 0x15
+ 6617 0100 01 .byte 0x1
+ 6618 0101 49 .uleb128 0x49
+ 6619 0102 13 .uleb128 0x13
+ 6620 0103 01 .uleb128 0x1
+ 6621 0104 13 .uleb128 0x13
+ 6622 0105 00 .byte 0x0
+ 6623 0106 00 .byte 0x0
+ 6624 0107 19 .uleb128 0x19
+ 6625 0108 18 .uleb128 0x18
+ 6626 0109 00 .byte 0x0
+ 6627 010a 00 .byte 0x0
+ 6628 010b 00 .byte 0x0
+ 6629 010c 1A .uleb128 0x1a
+ 6630 010d 13 .uleb128 0x13
+ 6631 010e 01 .byte 0x1
+ 6632 010f 03 .uleb128 0x3
+ 6633 0110 0E .uleb128 0xe
+ 6634 0111 0B .uleb128 0xb
+ 6635 0112 05 .uleb128 0x5
+ 6636 0113 3A .uleb128 0x3a
+ 6637 0114 0B .uleb128 0xb
+ 6638 0115 3B .uleb128 0x3b
+ 6639 0116 0B .uleb128 0xb
+ 6640 0117 01 .uleb128 0x1
+ 6641 0118 13 .uleb128 0x13
+ 6642 0119 00 .byte 0x0
+ 6643 011a 00 .byte 0x0
+ 6644 011b 1B .uleb128 0x1b
+ 6645 011c 01 .uleb128 0x1
+ 6646 011d 01 .byte 0x1
+ 6647 011e 49 .uleb128 0x49
+ 6648 011f 13 .uleb128 0x13
+ 6649 0120 01 .uleb128 0x1
+ 6650 0121 13 .uleb128 0x13
+ 6651 0122 00 .byte 0x0
+ 6652 0123 00 .byte 0x0
+ 6653 0124 1C .uleb128 0x1c
+ 6654 0125 04 .uleb128 0x4
+ 6655 0126 01 .byte 0x1
+ 6656 0127 03 .uleb128 0x3
+ 6657 0128 0E .uleb128 0xe
+ 6658 0129 0B .uleb128 0xb
+ 6659 012a 0B .uleb128 0xb
+ 6660 012b 3A .uleb128 0x3a
+ 6661 012c 0B .uleb128 0xb
+ 6662 012d 3B .uleb128 0x3b
+ 6663 012e 0B .uleb128 0xb
+ 6664 012f 01 .uleb128 0x1
+ 6665 0130 13 .uleb128 0x13
+ 6666 0131 00 .byte 0x0
+ 6667 0132 00 .byte 0x0
+
GAS LISTING /tmp/ccWvEaWW.s page 147
+
+
+ 6668 0133 1D .uleb128 0x1d
+ 6669 0134 04 .uleb128 0x4
+ 6670 0135 01 .byte 0x1
+ 6671 0136 03 .uleb128 0x3
+ 6672 0137 0E .uleb128 0xe
+ 6673 0138 0B .uleb128 0xb
+ 6674 0139 0B .uleb128 0xb
+ 6675 013a 3A .uleb128 0x3a
+ 6676 013b 0B .uleb128 0xb
+ 6677 013c 3B .uleb128 0x3b
+ 6678 013d 05 .uleb128 0x5
+ 6679 013e 01 .uleb128 0x1
+ 6680 013f 13 .uleb128 0x13
+ 6681 0140 00 .byte 0x0
+ 6682 0141 00 .byte 0x0
+ 6683 0142 1E .uleb128 0x1e
+ 6684 0143 2E .uleb128 0x2e
+ 6685 0144 01 .byte 0x1
+ 6686 0145 03 .uleb128 0x3
+ 6687 0146 0E .uleb128 0xe
+ 6688 0147 3A .uleb128 0x3a
+ 6689 0148 0B .uleb128 0xb
+ 6690 0149 3B .uleb128 0x3b
+ 6691 014a 0B .uleb128 0xb
+ 6692 014b 27 .uleb128 0x27
+ 6693 014c 0C .uleb128 0xc
+ 6694 014d 49 .uleb128 0x49
+ 6695 014e 13 .uleb128 0x13
+ 6696 014f 11 .uleb128 0x11
+ 6697 0150 01 .uleb128 0x1
+ 6698 0151 12 .uleb128 0x12
+ 6699 0152 01 .uleb128 0x1
+ 6700 0153 40 .uleb128 0x40
+ 6701 0154 06 .uleb128 0x6
+ 6702 0155 01 .uleb128 0x1
+ 6703 0156 13 .uleb128 0x13
+ 6704 0157 00 .byte 0x0
+ 6705 0158 00 .byte 0x0
+ 6706 0159 1F .uleb128 0x1f
+ 6707 015a 05 .uleb128 0x5
+ 6708 015b 00 .byte 0x0
+ 6709 015c 03 .uleb128 0x3
+ 6710 015d 0E .uleb128 0xe
+ 6711 015e 3A .uleb128 0x3a
+ 6712 015f 0B .uleb128 0xb
+ 6713 0160 3B .uleb128 0x3b
+ 6714 0161 0B .uleb128 0xb
+ 6715 0162 49 .uleb128 0x49
+ 6716 0163 13 .uleb128 0x13
+ 6717 0164 02 .uleb128 0x2
+ 6718 0165 0A .uleb128 0xa
+ 6719 0166 00 .byte 0x0
+ 6720 0167 00 .byte 0x0
+ 6721 0168 20 .uleb128 0x20
+ 6722 0169 34 .uleb128 0x34
+ 6723 016a 00 .byte 0x0
+ 6724 016b 03 .uleb128 0x3
+
GAS LISTING /tmp/ccWvEaWW.s page 148
+
+
+ 6725 016c 08 .uleb128 0x8
+ 6726 016d 3A .uleb128 0x3a
+ 6727 016e 0B .uleb128 0xb
+ 6728 016f 3B .uleb128 0x3b
+ 6729 0170 0B .uleb128 0xb
+ 6730 0171 49 .uleb128 0x49
+ 6731 0172 13 .uleb128 0x13
+ 6732 0173 02 .uleb128 0x2
+ 6733 0174 0A .uleb128 0xa
+ 6734 0175 00 .byte 0x0
+ 6735 0176 00 .byte 0x0
+ 6736 0177 21 .uleb128 0x21
+ 6737 0178 2E .uleb128 0x2e
+ 6738 0179 01 .byte 0x1
+ 6739 017a 03 .uleb128 0x3
+ 6740 017b 0E .uleb128 0xe
+ 6741 017c 3A .uleb128 0x3a
+ 6742 017d 0B .uleb128 0xb
+ 6743 017e 3B .uleb128 0x3b
+ 6744 017f 0B .uleb128 0xb
+ 6745 0180 27 .uleb128 0x27
+ 6746 0181 0C .uleb128 0xc
+ 6747 0182 11 .uleb128 0x11
+ 6748 0183 01 .uleb128 0x1
+ 6749 0184 12 .uleb128 0x12
+ 6750 0185 01 .uleb128 0x1
+ 6751 0186 40 .uleb128 0x40
+ 6752 0187 06 .uleb128 0x6
+ 6753 0188 01 .uleb128 0x1
+ 6754 0189 13 .uleb128 0x13
+ 6755 018a 00 .byte 0x0
+ 6756 018b 00 .byte 0x0
+ 6757 018c 22 .uleb128 0x22
+ 6758 018d 05 .uleb128 0x5
+ 6759 018e 00 .byte 0x0
+ 6760 018f 03 .uleb128 0x3
+ 6761 0190 08 .uleb128 0x8
+ 6762 0191 3A .uleb128 0x3a
+ 6763 0192 0B .uleb128 0xb
+ 6764 0193 3B .uleb128 0x3b
+ 6765 0194 0B .uleb128 0xb
+ 6766 0195 49 .uleb128 0x49
+ 6767 0196 13 .uleb128 0x13
+ 6768 0197 02 .uleb128 0x2
+ 6769 0198 0A .uleb128 0xa
+ 6770 0199 00 .byte 0x0
+ 6771 019a 00 .byte 0x0
+ 6772 019b 23 .uleb128 0x23
+ 6773 019c 34 .uleb128 0x34
+ 6774 019d 00 .byte 0x0
+ 6775 019e 03 .uleb128 0x3
+ 6776 019f 0E .uleb128 0xe
+ 6777 01a0 49 .uleb128 0x49
+ 6778 01a1 13 .uleb128 0x13
+ 6779 01a2 34 .uleb128 0x34
+ 6780 01a3 0C .uleb128 0xc
+ 6781 01a4 02 .uleb128 0x2
+
GAS LISTING /tmp/ccWvEaWW.s page 149
+
+
+ 6782 01a5 0A .uleb128 0xa
+ 6783 01a6 00 .byte 0x0
+ 6784 01a7 00 .byte 0x0
+ 6785 01a8 24 .uleb128 0x24
+ 6786 01a9 34 .uleb128 0x34
+ 6787 01aa 00 .byte 0x0
+ 6788 01ab 03 .uleb128 0x3
+ 6789 01ac 08 .uleb128 0x8
+ 6790 01ad 3A .uleb128 0x3a
+ 6791 01ae 0B .uleb128 0xb
+ 6792 01af 3B .uleb128 0x3b
+ 6793 01b0 05 .uleb128 0x5
+ 6794 01b1 49 .uleb128 0x49
+ 6795 01b2 13 .uleb128 0x13
+ 6796 01b3 02 .uleb128 0x2
+ 6797 01b4 0A .uleb128 0xa
+ 6798 01b5 00 .byte 0x0
+ 6799 01b6 00 .byte 0x0
+ 6800 01b7 25 .uleb128 0x25
+ 6801 01b8 2E .uleb128 0x2e
+ 6802 01b9 01 .byte 0x1
+ 6803 01ba 03 .uleb128 0x3
+ 6804 01bb 0E .uleb128 0xe
+ 6805 01bc 3A .uleb128 0x3a
+ 6806 01bd 0B .uleb128 0xb
+ 6807 01be 3B .uleb128 0x3b
+ 6808 01bf 05 .uleb128 0x5
+ 6809 01c0 27 .uleb128 0x27
+ 6810 01c1 0C .uleb128 0xc
+ 6811 01c2 49 .uleb128 0x49
+ 6812 01c3 13 .uleb128 0x13
+ 6813 01c4 11 .uleb128 0x11
+ 6814 01c5 01 .uleb128 0x1
+ 6815 01c6 12 .uleb128 0x12
+ 6816 01c7 01 .uleb128 0x1
+ 6817 01c8 40 .uleb128 0x40
+ 6818 01c9 06 .uleb128 0x6
+ 6819 01ca 01 .uleb128 0x1
+ 6820 01cb 13 .uleb128 0x13
+ 6821 01cc 00 .byte 0x0
+ 6822 01cd 00 .byte 0x0
+ 6823 01ce 26 .uleb128 0x26
+ 6824 01cf 05 .uleb128 0x5
+ 6825 01d0 00 .byte 0x0
+ 6826 01d1 03 .uleb128 0x3
+ 6827 01d2 0E .uleb128 0xe
+ 6828 01d3 3A .uleb128 0x3a
+ 6829 01d4 0B .uleb128 0xb
+ 6830 01d5 3B .uleb128 0x3b
+ 6831 01d6 05 .uleb128 0x5
+ 6832 01d7 49 .uleb128 0x49
+ 6833 01d8 13 .uleb128 0x13
+ 6834 01d9 02 .uleb128 0x2
+ 6835 01da 0A .uleb128 0xa
+ 6836 01db 00 .byte 0x0
+ 6837 01dc 00 .byte 0x0
+ 6838 01dd 27 .uleb128 0x27
+
GAS LISTING /tmp/ccWvEaWW.s page 150
+
+
+ 6839 01de 05 .uleb128 0x5
+ 6840 01df 00 .byte 0x0
+ 6841 01e0 03 .uleb128 0x3
+ 6842 01e1 08 .uleb128 0x8
+ 6843 01e2 3A .uleb128 0x3a
+ 6844 01e3 0B .uleb128 0xb
+ 6845 01e4 3B .uleb128 0x3b
+ 6846 01e5 05 .uleb128 0x5
+ 6847 01e6 49 .uleb128 0x49
+ 6848 01e7 13 .uleb128 0x13
+ 6849 01e8 02 .uleb128 0x2
+ 6850 01e9 0A .uleb128 0xa
+ 6851 01ea 00 .byte 0x0
+ 6852 01eb 00 .byte 0x0
+ 6853 01ec 28 .uleb128 0x28
+ 6854 01ed 34 .uleb128 0x34
+ 6855 01ee 00 .byte 0x0
+ 6856 01ef 03 .uleb128 0x3
+ 6857 01f0 0E .uleb128 0xe
+ 6858 01f1 3A .uleb128 0x3a
+ 6859 01f2 0B .uleb128 0xb
+ 6860 01f3 3B .uleb128 0x3b
+ 6861 01f4 05 .uleb128 0x5
+ 6862 01f5 49 .uleb128 0x49
+ 6863 01f6 13 .uleb128 0x13
+ 6864 01f7 02 .uleb128 0x2
+ 6865 01f8 0A .uleb128 0xa
+ 6866 01f9 00 .byte 0x0
+ 6867 01fa 00 .byte 0x0
+ 6868 01fb 29 .uleb128 0x29
+ 6869 01fc 0B .uleb128 0xb
+ 6870 01fd 01 .byte 0x1
+ 6871 01fe 11 .uleb128 0x11
+ 6872 01ff 01 .uleb128 0x1
+ 6873 0200 12 .uleb128 0x12
+ 6874 0201 01 .uleb128 0x1
+ 6875 0202 00 .byte 0x0
+ 6876 0203 00 .byte 0x0
+ 6877 0204 2A .uleb128 0x2a
+ 6878 0205 2E .uleb128 0x2e
+ 6879 0206 01 .byte 0x1
+ 6880 0207 3F .uleb128 0x3f
+ 6881 0208 0C .uleb128 0xc
+ 6882 0209 03 .uleb128 0x3
+ 6883 020a 0E .uleb128 0xe
+ 6884 020b 3A .uleb128 0x3a
+ 6885 020c 0B .uleb128 0xb
+ 6886 020d 3B .uleb128 0x3b
+ 6887 020e 05 .uleb128 0x5
+ 6888 020f 27 .uleb128 0x27
+ 6889 0210 0C .uleb128 0xc
+ 6890 0211 49 .uleb128 0x49
+ 6891 0212 13 .uleb128 0x13
+ 6892 0213 11 .uleb128 0x11
+ 6893 0214 01 .uleb128 0x1
+ 6894 0215 12 .uleb128 0x12
+ 6895 0216 01 .uleb128 0x1
+
GAS LISTING /tmp/ccWvEaWW.s page 151
+
+
+ 6896 0217 40 .uleb128 0x40
+ 6897 0218 06 .uleb128 0x6
+ 6898 0219 01 .uleb128 0x1
+ 6899 021a 13 .uleb128 0x13
+ 6900 021b 00 .byte 0x0
+ 6901 021c 00 .byte 0x0
+ 6902 021d 2B .uleb128 0x2b
+ 6903 021e 34 .uleb128 0x34
+ 6904 021f 00 .byte 0x0
+ 6905 0220 03 .uleb128 0x3
+ 6906 0221 0E .uleb128 0xe
+ 6907 0222 3A .uleb128 0x3a
+ 6908 0223 0B .uleb128 0xb
+ 6909 0224 3B .uleb128 0x3b
+ 6910 0225 0B .uleb128 0xb
+ 6911 0226 49 .uleb128 0x49
+ 6912 0227 13 .uleb128 0x13
+ 6913 0228 3F .uleb128 0x3f
+ 6914 0229 0C .uleb128 0xc
+ 6915 022a 02 .uleb128 0x2
+ 6916 022b 0A .uleb128 0xa
+ 6917 022c 00 .byte 0x0
+ 6918 022d 00 .byte 0x0
+ 6919 022e 00 .byte 0x0
+ 6920 .section .debug_pubnames,"", at progbits
+ 6921 0000 43000000 .long 0x43
+ 6922 0004 0200 .value 0x2
+ 6923 0006 00000000 .long .Ldebug_info0
+ 6924 000a 511F0000 .long 0x1f51
+ 6925 000e 3E1E0000 .long 0x1e3e
+ 6926 0012 4B436970 .string "KCipherVecAesNiMake"
+ 6926 68657256
+ 6926 65634165
+ 6926 734E694D
+ 6926 616B6500
+ 6927 0026 351F0000 .long 0x1f35
+ 6928 002a 4B436970 .string "KCipherVecAesNiClassName"
+ 6928 68657256
+ 6928 65634165
+ 6928 734E6943
+ 6928 6C617373
+ 6929 0043 00000000 .long 0x0
+ 6930 .section .debug_aranges,"", at progbits
+ 6931 0000 2C000000 .long 0x2c
+ 6932 0004 0200 .value 0x2
+ 6933 0006 00000000 .long .Ldebug_info0
+ 6934 000a 08 .byte 0x8
+ 6935 000b 00 .byte 0x0
+ 6936 000c 0000 .value 0x0
+ 6937 000e 0000 .value 0x0
+ 6938 0010 00000000 .quad .Ltext0
+ 6938 00000000
+ 6939 0018 64100000 .quad .Letext0-.Ltext0
+ 6939 00000000
+ 6940 0020 00000000 .quad 0x0
+ 6940 00000000
+ 6941 0028 00000000 .quad 0x0
+
GAS LISTING /tmp/ccWvEaWW.s page 152
+
+
+ 6941 00000000
+ 6942 .section .debug_str,"MS", at progbits,1
+ 6943 .LASF89:
+ 6944 0000 645F6B65 .string "d_key"
+ 6944 7900
+ 6945 .LASF331:
+ 6946 0006 72634475 .string "rcDuplicate"
+ 6946 706C6963
+ 6946 61746500
+ 6947 .LASF134:
+ 6948 0012 7263436F .string "rcCondition"
+ 6948 6E646974
+ 6948 696F6E00
+ 6949 .LASF248:
+ 6950 001e 7263456E .string "rcEncrypting"
+ 6950 63727970
+ 6950 74696E67
+ 6950 00
+ 6951 .LASF207:
+ 6952 002b 72634F70 .string "rcOpening"
+ 6952 656E696E
+ 6952 6700
+ 6953 .LASF378:
+ 6954 0035 4B436970 .string "KCipherVecAesNiDecryptCfb"
+ 6954 68657256
+ 6954 65634165
+ 6954 734E6944
+ 6954 65637279
+ 6955 .LASF215:
+ 6956 004f 72635065 .string "rcPersisting"
+ 6956 72736973
+ 6956 74696E67
+ 6956 00
+ 6957 .LASF253:
+ 6958 005c 72635365 .string "rcSending"
+ 6958 6E64696E
+ 6958 6700
+ 6959 .LASF363:
+ 6960 0066 4B436970 .string "KCipherVecAesNiDecryptV1"
+ 6960 68657256
+ 6960 65634165
+ 6960 734E6944
+ 6960 65637279
+ 6961 .LASF247:
+ 6962 007f 72634170 .string "rcAppending"
+ 6962 70656E64
+ 6962 696E6700
+ 6963 .LASF233:
+ 6964 008b 72635369 .string "rcSignaling"
+ 6964 676E616C
+ 6964 696E6700
+ 6965 .LASF14:
+ 6966 0097 4442475F .string "DBG_BLAST"
+ 6966 424C4153
+ 6966 5400
+ 6967 .LASF289:
+ 6968 00a1 72635369 .string "rcSignalSet"
+
GAS LISTING /tmp/ccWvEaWW.s page 153
+
+
+ 6968 676E616C
+ 6968 53657400
+ 6969 .LASF235:
+ 6970 00ad 72634174 .string "rcAttaching"
+ 6970 74616368
+ 6970 696E6700
+ 6971 .LASF167:
+ 6972 00b9 72635461 .string "rcTable"
+ 6972 626C6500
+ 6973 .LASF66:
+ 6974 00c1 64656372 .string "decrypt_cfb"
+ 6974 7970745F
+ 6974 63666200
+ 6975 .LASF131:
+ 6976 00cd 72634275 .string "rcBuffer"
+ 6976 66666572
+ 6976 00
+ 6977 .LASF263:
+ 6978 00d6 72634D65 .string "rcMemory"
+ 6978 6D6F7279
+ 6978 00
+ 6979 .LASF196:
+ 6980 00df 72634C6F .string "rcLocking"
+ 6980 636B696E
+ 6980 6700
+ 6981 .LASF231:
+ 6982 00e9 72635061 .string "rcParsing"
+ 6982 7273696E
+ 6982 6700
+ 6983 .LASF260:
+ 6984 00f3 72635365 .string "rcSelf"
+ 6984 6C6600
+ 6985 .LASF153:
+ 6986 00fa 72634D65 .string "rcMetadata"
+ 6986 74616461
+ 6986 746100
+ 6987 .LASF276:
+ 6988 0105 72634172 .string "rcArcHardLink"
+ 6988 63486172
+ 6988 644C696E
+ 6988 6B00
+ 6989 .LASF102:
+ 6990 0113 7263436F .string "rcCont"
+ 6990 6E7400
+ 6991 .LASF284:
+ 6992 011a 72634368 .string "rcChecksum"
+ 6992 65636B73
+ 6992 756D00
+ 6993 .LASF354:
+ 6994 0125 5F5F6675 .string "__func__"
+ 6994 6E635F5F
+ 6994 00
+ 6995 .LASF328:
+ 6996 012e 7263546F .string "rcTooShort"
+ 6996 6F53686F
+ 6996 727400
+ 6997 .LASF158:
+
GAS LISTING /tmp/ccWvEaWW.s page 154
+
+
+ 6998 0139 72635061 .string "rcPagemap"
+ 6998 67656D61
+ 6998 7000
+ 6999 .LASF110:
+ 7000 0143 72634170 .string "rcApp"
+ 7000 7000
+ 7001 .LASF10:
+ 7002 0149 61746F6D .string "atomic32_t"
+ 7002 69633332
+ 7002 5F7400
+ 7003 .LASF56:
+ 7004 0154 7365745F .string "set_decrypt_ctr_func"
+ 7004 64656372
+ 7004 7970745F
+ 7004 6374725F
+ 7004 66756E63
+ 7005 .LASF65:
+ 7006 0169 656E6372 .string "encrypt_cfb"
+ 7006 7970745F
+ 7006 63666200
+ 7007 .LASF172:
+ 7008 0175 72635472 .string "rcTrie"
+ 7008 696500
+ 7009 .LASF113:
+ 7010 017c 72634C61 .string "rcLastModule_v1_0"
+ 7010 73744D6F
+ 7010 64756C65
+ 7010 5F76315F
+ 7010 3000
+ 7011 .LASF120:
+ 7012 018e 72634C61 .string "rcLastModule_v1_1"
+ 7012 73744D6F
+ 7012 64756C65
+ 7012 5F76315F
+ 7012 3100
+ 7013 .LASF271:
+ 7014 01a0 72634279 .string "rcByteOrder"
+ 7014 74654F72
+ 7014 64657200
+ 7015 .LASF84:
+ 7016 01ac 4145534B .string "AESKeySchedule"
+ 7016 65795363
+ 7016 68656475
+ 7016 6C6500
+ 7017 .LASF359:
+ 7018 01bb 4B436970 .string "KCipherVecAesNiSetEncryptCounterFunc"
+ 7018 68657256
+ 7018 65634165
+ 7018 734E6953
+ 7018 6574456E
+ 7019 .LASF332:
+ 7020 01e0 72634F75 .string "rcOutOfKDirectory"
+ 7020 744F664B
+ 7020 44697265
+ 7020 63746F72
+ 7020 7900
+ 7021 .LASF85:
+
GAS LISTING /tmp/ccWvEaWW.s page 155
+
+
+ 7022 01f2 726F756E .string "round_keys"
+ 7022 645F6B65
+ 7022 797300
+ 7023 .LASF189:
+ 7024 01fd 7263436F .string "rcConstructing"
+ 7024 6E737472
+ 7024 75637469
+ 7024 6E6700
+ 7025 .LASF95:
+ 7026 020c 6B636970 .string "kcipher_AES"
+ 7026 6865725F
+ 7026 41455300
+ 7027 .LASF96:
+ 7028 0218 6B636970 .string "kcipher_count"
+ 7028 6865725F
+ 7028 636F756E
+ 7028 7400
+ 7029 .LASF390:
+ 7030 0226 74797065 .string "type"
+ 7030 00
+ 7031 .LASF9:
+ 7032 022b 72635F74 .string "rc_t"
+ 7032 00
+ 7033 .LASF265:
+ 7034 0230 7263466F .string "rcFormat"
+ 7034 726D6174
+ 7034 00
+ 7035 .LASF367:
+ 7036 0239 4B436970 .string "KCipherVecAesNiDecrypt"
+ 7036 68657256
+ 7036 65634165
+ 7036 734E6944
+ 7036 65637279
+ 7037 .LASF323:
+ 7038 0250 7263556E .string "rcUnauthorized"
+ 7038 61757468
+ 7038 6F72697A
+ 7038 656400
+ 7039 .LASF355:
+ 7040 025f 4B436970 .string "KCipherVecAesNiSetDecryptKey"
+ 7040 68657256
+ 7040 65634165
+ 7040 734E6953
+ 7040 65744465
+ 7041 .LASF346:
+ 7042 027c 63766F75 .string "cvout"
+ 7042 7400
+ 7043 .LASF203:
+ 7044 0282 72635265 .string "rcRemoving"
+ 7044 6D6F7669
+ 7044 6E6700
+ 7045 .LASF116:
+ 7046 028d 72634B72 .string "rcKrypto"
+ 7046 7970746F
+ 7046 00
+ 7047 .LASF379:
+ 7048 0296 4B436970 .string "KCipherVecAesNiEncryptOfb"
+
GAS LISTING /tmp/ccWvEaWW.s page 156
+
+
+ 7048 68657256
+ 7048 65634165
+ 7048 734E6945
+ 7048 6E637279
+ 7049 .LASF194:
+ 7050 02b0 72635669 .string "rcVisiting"
+ 7050 73697469
+ 7050 6E6700
+ 7051 .LASF124:
+ 7052 02bb 72634172 .string "rcArc"
+ 7052 6300
+ 7053 .LASF99:
+ 7054 02c1 72634578 .string "rcExe"
+ 7054 6500
+ 7055 .LASF368:
+ 7056 02c7 4B436970 .string "KCipherVecAesNiEncryptEcb"
+ 7056 68657256
+ 7056 65634165
+ 7056 734E6945
+ 7056 6E637279
+ 7057 .LASF358:
+ 7058 02e1 4B436970 .string "KCipherVecAesNiSetDecryptIvec"
+ 7058 68657256
+ 7058 65634165
+ 7058 734E6953
+ 7058 65744465
+ 7059 .LASF329:
+ 7060 02ff 7263546F .string "rcTooLong"
+ 7060 6F4C6F6E
+ 7060 6700
+ 7061 .LASF257:
+ 7062 0309 52434F62 .string "RCObject"
+ 7062 6A656374
+ 7062 00
+ 7063 .LASF267:
+ 7064 0312 7263496E .string "rcInterface"
+ 7064 74657266
+ 7064 61636500
+ 7065 .LASF195:
+ 7066 031e 72635265 .string "rcResolving"
+ 7066 736F6C76
+ 7066 696E6700
+ 7067 .LASF87:
+ 7068 032a 43697068 .string "CipherAes"
+ 7068 65724165
+ 7068 7300
+ 7069 .LASF137:
+ 7070 0334 72634469 .string "rcDirectory"
+ 7070 72656374
+ 7070 6F727900
+ 7071 .LASF2:
+ 7072 0340 6C6F6E67 .string "long int"
+ 7072 20696E74
+ 7072 00
+ 7073 .LASF225:
+ 7074 0349 72635661 .string "rcValidating"
+ 7074 6C696461
+
GAS LISTING /tmp/ccWvEaWW.s page 157
+
+
+ 7074 74696E67
+ 7074 00
+ 7075 .LASF44:
+ 7076 0356 63697068 .string "cipher_ctr_func"
+ 7076 65725F63
+ 7076 74725F66
+ 7076 756E6300
+ 7077 .LASF127:
+ 7078 0366 72634172 .string "rcArgv"
+ 7078 677600
+ 7079 .LASF103:
+ 7080 036d 72634353 .string "rcCS"
+ 7080 00
+ 7081 .LASF184:
+ 7082 0372 72635572 .string "rcUri"
+ 7082 6900
+ 7083 .LASF206:
+ 7084 0378 72634372 .string "rcCreating"
+ 7084 65617469
+ 7084 6E6700
+ 7085 .LASF40:
+ 7086 0383 656E6372 .string "encrypt_ivec"
+ 7086 7970745F
+ 7086 69766563
+ 7086 00
+ 7087 .LASF57:
+ 7088 0390 656E6372 .string "encrypt"
+ 7088 79707400
+ 7089 .LASF76:
+ 7090 0398 76313238 .string "v128_u8_t"
+ 7090 5F75385F
+ 7090 7400
+ 7091 .LASF19:
+ 7092 03a2 4442475F .string "DBG_XML"
+ 7092 584D4C00
+ 7093 .LASF31:
+ 7094 03aa 4442475F .string "DBG_MOD_COUNT"
+ 7094 4D4F445F
+ 7094 434F554E
+ 7094 5400
+ 7095 .LASF396:
+ 7096 03b8 4B436970 .string "KCipherVecAesNiMake"
+ 7096 68657256
+ 7096 65634165
+ 7096 734E694D
+ 7096 616B6500
+ 7097 .LASF352:
+ 7098 03cc 75736572 .string "user_key_bits"
+ 7098 5F6B6579
+ 7098 5F626974
+ 7098 7300
+ 7099 .LASF108:
+ 7100 03da 72634442 .string "rcDB"
+ 7100 00
+ 7101 .LASF348:
+ 7102 03df 4B436970 .string "KCipherVecAesNiDestroy"
+ 7102 68657256
+
GAS LISTING /tmp/ccWvEaWW.s page 158
+
+
+ 7102 65634165
+ 7102 734E6944
+ 7102 65737472
+ 7103 .LASF286:
+ 7104 03f6 7263436F .string "rcConnection"
+ 7104 6E6E6563
+ 7104 74696F6E
+ 7104 00
+ 7105 .LASF154:
+ 7106 0403 72634D67 .string "rcMgr"
+ 7106 7200
+ 7107 .LASF316:
+ 7108 0409 72635669 .string "rcViolated"
+ 7108 6F6C6174
+ 7108 656400
+ 7109 .LASF249:
+ 7110 0414 72634465 .string "rcDecrypting"
+ 7110 63727970
+ 7110 74696E67
+ 7110 00
+ 7111 .LASF0:
+ 7112 0421 7369676E .string "signed char"
+ 7112 65642063
+ 7112 68617200
+ 7113 .LASF5:
+ 7114 042d 75696E74 .string "uint8_t"
+ 7114 385F7400
+ 7115 .LASF132:
+ 7116 0435 72634368 .string "rcChar"
+ 7116 617200
+ 7117 .LASF117:
+ 7118 043c 72635244 .string "rcRDBMS"
+ 7118 424D5300
+ 7119 .LASF161:
+ 7120 0444 72635175 .string "rcQueue"
+ 7120 65756500
+ 7121 .LASF353:
+ 7122 044c 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 7122 45545459
+ 7122 5F46554E
+ 7122 4354494F
+ 7122 4E5F5F00
+ 7123 .LASF12:
+ 7124 0460 4442475F .string "DBG_MOD_NOT_FOUND"
+ 7124 4D4F445F
+ 7124 4E4F545F
+ 7124 464F554E
+ 7124 4400
+ 7125 .LASF213:
+ 7126 0472 72635265 .string "rcReverting"
+ 7126 76657274
+ 7126 696E6700
+ 7127 .LASF129:
+ 7128 047e 72634261 .string "rcBarrier"
+ 7128 72726965
+ 7128 7200
+ 7129 .LASF313:
+
GAS LISTING /tmp/ccWvEaWW.s page 159
+
+
+ 7130 0488 72634578 .string "rcExhausted"
+ 7130 68617573
+ 7130 74656400
+ 7131 .LASF3:
+ 7132 0494 756E7369 .string "unsigned char"
+ 7132 676E6564
+ 7132 20636861
+ 7132 7200
+ 7133 .LASF186:
+ 7134 04a2 5243436F .string "RCContext"
+ 7134 6E746578
+ 7134 7400
+ 7135 .LASF149:
+ 7136 04ac 72634C6F .string "rcLock"
+ 7136 636B00
+ 7137 .LASF302:
+ 7138 04b3 72634261 .string "rcBadVersion"
+ 7138 64566572
+ 7138 73696F6E
+ 7138 00
+ 7139 .LASF303:
+ 7140 04c0 72634465 .string "rcDestroyed"
+ 7140 7374726F
+ 7140 79656400
+ 7141 .LASF166:
+ 7142 04cc 72635374 .string "rcString"
+ 7142 72696E67
+ 7142 00
+ 7143 .LASF128:
+ 7144 04d5 72634174 .string "rcAttr"
+ 7144 747200
+ 7145 .LASF150:
+ 7146 04dc 72634C6F .string "rcLog"
+ 7146 6700
+ 7147 .LASF389:
+ 7148 04e2 6E65775F .string "new_obj"
+ 7148 6F626A00
+ 7149 .LASF15:
+ 7150 04ea 4442475F .string "DBG_KDB"
+ 7150 4B444200
+ 7151 .LASF254:
+ 7152 04f2 72635072 .string "rcProcessing"
+ 7152 6F636573
+ 7152 73696E67
+ 7152 00
+ 7153 .LASF104:
+ 7154 04ff 72634646 .string "rcFF"
+ 7154 00
+ 7155 .LASF393:
+ 7156 0504 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 7156 652F726F
+ 7156 6461726D
+ 7156 65722F73
+ 7156 72615F73
+ 7157 .LASF105:
+ 7158 053c 72634653 .string "rcFS"
+ 7158 00
+
GAS LISTING /tmp/ccWvEaWW.s page 160
+
+
+ 7159 .LASF347:
+ 7160 0541 43697068 .string "CipherVecIn"
+ 7160 65725665
+ 7160 63496E00
+ 7161 .LASF192:
+ 7162 054d 72634163 .string "rcAccessing"
+ 7162 63657373
+ 7162 696E6700
+ 7163 .LASF310:
+ 7164 0559 7263496E .string "rcInterrupted"
+ 7164 74657272
+ 7164 75707465
+ 7164 6400
+ 7165 .LASF318:
+ 7166 0567 72634E6F .string "rcNotFound"
+ 7166 74466F75
+ 7166 6E6400
+ 7167 .LASF11:
+ 7168 0572 63686172 .string "char"
+ 7168 00
+ 7169 .LASF156:
+ 7170 0577 72634E6F .string "rcNode"
+ 7170 646500
+ 7171 .LASF29:
+ 7172 057e 4442475F .string "DBG_AES"
+ 7172 41455300
+ 7173 .LASF287:
+ 7174 0586 72634572 .string "rcError"
+ 7174 726F7200
+ 7175 .LASF384:
+ 7176 058e 706F626A .string "pobj"
+ 7176 00
+ 7177 .LASF204:
+ 7178 0593 7263436C .string "rcClearing"
+ 7178 65617269
+ 7178 6E6700
+ 7179 .LASF262:
+ 7180 059e 72634F66 .string "rcOffset"
+ 7180 66736574
+ 7180 00
+ 7181 .LASF208:
+ 7182 05a7 7263436C .string "rcClosing"
+ 7182 6F73696E
+ 7182 6700
+ 7183 .LASF140:
+ 7184 05b1 72634669 .string "rcFile"
+ 7184 6C6500
+ 7185 .LASF376:
+ 7186 05b8 4B436970 .string "KCipherVecAesNiDecryptPcbc"
+ 7186 68657256
+ 7186 65634165
+ 7186 734E6944
+ 7186 65637279
+ 7187 .LASF169:
+ 7188 05d3 72635469 .string "rcTimeout"
+ 7188 6D656F75
+ 7188 7400
+
GAS LISTING /tmp/ccWvEaWW.s page 161
+
+
+ 7189 .LASF385:
+ 7190 05dd 4B436970 .string "KCipherVecAesNiInitAes"
+ 7190 68657256
+ 7190 65634165
+ 7190 734E6949
+ 7190 6E697441
+ 7191 .LASF157:
+ 7192 05f4 72634E75 .string "rcNumeral"
+ 7192 6D657261
+ 7192 6C00
+ 7193 .LASF234:
+ 7194 05fe 72635761 .string "rcWaiting"
+ 7194 6974696E
+ 7194 6700
+ 7195 .LASF381:
+ 7196 0608 4B436970 .string "KCipherVecAesNiEncryptCtr"
+ 7196 68657256
+ 7196 65634165
+ 7196 734E6945
+ 7196 6E637279
+ 7197 .LASF362:
+ 7198 0622 4B436970 .string "KCipherVecAesNiEncryptV1"
+ 7198 68657256
+ 7198 65634165
+ 7198 734E6945
+ 7198 6E637279
+ 7199 .LASF238:
+ 7200 063b 72634650 .string "rcFPCoding"
+ 7200 436F6469
+ 7200 6E6700
+ 7201 .LASF290:
+ 7202 0646 72635369 .string "rcSize"
+ 7202 7A6500
+ 7203 .LASF275:
+ 7204 064d 72634469 .string "rcDirEntry"
+ 7204 72456E74
+ 7204 727900
+ 7205 .LASF227:
+ 7206 0658 72634875 .string "rcHuffmanCoding"
+ 7206 66666D61
+ 7206 6E436F64
+ 7206 696E6700
+ 7207 .LASF24:
+ 7208 0668 4442475F .string "DBG_KFG"
+ 7208 4B464700
+ 7209 .LASF308:
+ 7210 0670 72634275 .string "rcBusy"
+ 7210 737900
+ 7211 .LASF21:
+ 7212 0677 4442475F .string "DBG_SRA"
+ 7212 53524100
+ 7213 .LASF371:
+ 7214 067f 4B436970 .string "KCipherVecAesNiDecryptEcb"
+ 7214 68657256
+ 7214 65634165
+ 7214 734E6944
+ 7214 65637279
+
GAS LISTING /tmp/ccWvEaWW.s page 162
+
+
+ 7215 .LASF266:
+ 7216 0699 72635472 .string "rcTransfer"
+ 7216 616E7366
+ 7216 657200
+ 7217 .LASF18:
+ 7218 06a4 4442475F .string "DBG_KFS"
+ 7218 4B465300
+ 7219 .LASF221:
+ 7220 06ac 72635061 .string "rcPacking"
+ 7220 636B696E
+ 7220 6700
+ 7221 .LASF217:
+ 7222 06b6 7263436F .string "rcCopying"
+ 7222 7079696E
+ 7222 6700
+ 7223 .LASF255:
+ 7224 06c0 72634964 .string "rcIdentifying"
+ 7224 656E7469
+ 7224 6679696E
+ 7224 6700
+ 7225 .LASF391:
+ 7226 06ce 4B436970 .string "KCipherVecAesNi_vt_v1"
+ 7226 68657256
+ 7226 65634165
+ 7226 734E695F
+ 7226 76745F76
+ 7227 .LASF60:
+ 7228 06e4 64656372 .string "decrypt_ecb"
+ 7228 7970745F
+ 7228 65636200
+ 7229 .LASF224:
+ 7230 06f0 72634465 .string "rcDecoding"
+ 7230 636F6469
+ 7230 6E6700
+ 7231 .LASF152:
+ 7232 06fb 72634D65 .string "rcMemMap"
+ 7232 6D4D6170
+ 7232 00
+ 7233 .LASF197:
+ 7234 0704 7263556E .string "rcUnlocking"
+ 7234 6C6F636B
+ 7234 696E6700
+ 7235 .LASF280:
+ 7236 0710 72634974 .string "rcItem"
+ 7236 656D00
+ 7237 .LASF82:
+ 7238 0717 4B426C6F .string "KBlockCipherVec_vt_v1"
+ 7238 636B4369
+ 7238 70686572
+ 7238 5665635F
+ 7238 76745F76
+ 7239 .LASF17:
+ 7240 072d 4442475F .string "DBG_LEGREF"
+ 7240 4C454752
+ 7240 454600
+ 7241 .LASF345:
+ 7242 0738 6376696E .string "cvin"
+
GAS LISTING /tmp/ccWvEaWW.s page 163
+
+
+ 7242 00
+ 7243 .LASF198:
+ 7244 073d 72635265 .string "rcRenaming"
+ 7244 6E616D69
+ 7244 6E6700
+ 7245 .LASF351:
+ 7246 0748 75736572 .string "user_key"
+ 7246 5F6B6579
+ 7246 00
+ 7247 .LASF268:
+ 7248 0751 72634964 .string "rcId"
+ 7248 00
+ 7249 .LASF181:
+ 7250 0756 7263436D .string "rcCmd"
+ 7250 6400
+ 7251 .LASF395:
+ 7252 075c 43697068 .string "CipherVecOut"
+ 7252 65725665
+ 7252 634F7574
+ 7252 00
+ 7253 .LASF27:
+ 7254 0769 4442475F .string "DBG_LOADLIB"
+ 7254 4C4F4144
+ 7254 4C494200
+ 7255 .LASF320:
+ 7256 0775 7263556E .string "rcUnlocked"
+ 7256 6C6F636B
+ 7256 656400
+ 7257 .LASF121:
+ 7258 0780 52434D6F .string "RCModule"
+ 7258 64756C65
+ 7258 00
+ 7259 .LASF282:
+ 7260 0789 7263456E .string "rcEncryption"
+ 7260 63727970
+ 7260 74696F6E
+ 7260 00
+ 7261 .LASF317:
+ 7262 0796 72634578 .string "rcExists"
+ 7262 69737473
+ 7262 00
+ 7263 .LASF77:
+ 7264 079f 43697068 .string "CipherVec"
+ 7264 65725665
+ 7264 6300
+ 7265 .LASF59:
+ 7266 07a9 656E6372 .string "encrypt_ecb"
+ 7266 7970745F
+ 7266 65636200
+ 7267 .LASF336:
+ 7268 07b5 72634F70 .string "rcOpen"
+ 7268 656E00
+ 7269 .LASF322:
+ 7270 07bc 72634465 .string "rcDeadlock"
+ 7270 61646C6F
+ 7270 636B00
+ 7271 .LASF259:
+
GAS LISTING /tmp/ccWvEaWW.s page 164
+
+
+ 7272 07c7 72634C69 .string "rcLink"
+ 7272 6E6B00
+ 7273 .LASF246:
+ 7274 07ce 7263466C .string "rcFlushing"
+ 7274 75736869
+ 7274 6E6700
+ 7275 .LASF294:
+ 7276 07d9 72634E6F .string "rcNoErr"
+ 7276 45727200
+ 7277 .LASF273:
+ 7278 07e1 72635461 .string "rcTag"
+ 7278 6700
+ 7279 .LASF23:
+ 7280 07e7 4442475F .string "DBG_ALIGN"
+ 7280 414C4947
+ 7280 4E00
+ 7281 .LASF237:
+ 7282 07f1 72634C6F .string "rcLogging"
+ 7282 6767696E
+ 7282 6700
+ 7283 .LASF364:
+ 7284 07fb 4B436970 .string "KCipherVecAesNiEncryptV1Int"
+ 7284 68657256
+ 7284 65634165
+ 7284 734E6945
+ 7284 6E637279
+ 7285 .LASF330:
+ 7286 0817 7263546F .string "rcTooBig"
+ 7286 6F426967
+ 7286 00
+ 7287 .LASF174:
+ 7288 0820 72635665 .string "rcVector"
+ 7288 63746F72
+ 7288 00
+ 7289 .LASF209:
+ 7290 0829 72635265 .string "rcResizing"
+ 7290 73697A69
+ 7290 6E6700
+ 7291 .LASF183:
+ 7292 0834 72635175 .string "rcQuery"
+ 7292 65727900
+ 7293 .LASF8:
+ 7294 083c 6C6F6E67 .string "long unsigned int"
+ 7294 20756E73
+ 7294 69676E65
+ 7294 6420696E
+ 7294 7400
+ 7295 .LASF315:
+ 7296 084e 72634578 .string "rcExcessive"
+ 7296 63657373
+ 7296 69766500
+ 7297 .LASF243:
+ 7298 085a 72634576 .string "rcEvaluating"
+ 7298 616C7561
+ 7298 74696E67
+ 7298 00
+ 7299 .LASF180:
+
GAS LISTING /tmp/ccWvEaWW.s page 165
+
+
+ 7300 0867 7263526E .string "rcRng"
+ 7300 6700
+ 7301 .LASF188:
+ 7302 086d 72634361 .string "rcCasting"
+ 7302 7374696E
+ 7302 6700
+ 7303 .LASF349:
+ 7304 0877 73656C66 .string "self"
+ 7304 00
+ 7305 .LASF148:
+ 7306 087c 72634974 .string "rcIterator"
+ 7306 65726174
+ 7306 6F7200
+ 7307 .LASF83:
+ 7308 0887 4B426C6F .string "KBlockCipherVec"
+ 7308 636B4369
+ 7308 70686572
+ 7308 56656300
+ 7309 .LASF380:
+ 7310 0897 4B436970 .string "KCipherVecAesNiDecryptOfb"
+ 7310 68657256
+ 7310 65634165
+ 7310 734E6944
+ 7310 65637279
+ 7311 .LASF387:
+ 7312 08b1 4B436970 .string "KCipherVecAesNiInitNull"
+ 7312 68657256
+ 7312 65634165
+ 7312 734E6949
+ 7312 6E69744E
+ 7313 .LASF165:
+ 7314 08c9 72635374 .string "rcStorage"
+ 7314 6F726167
+ 7314 6500
+ 7315 .LASF383:
+ 7316 08d3 4B436970 .string "KCipherVecAesNiAllocAes"
+ 7316 68657256
+ 7316 65634165
+ 7316 734E6941
+ 7316 6C6C6F63
+ 7317 .LASF68:
+ 7318 08eb 64656372 .string "decrypt_ofb"
+ 7318 7970745F
+ 7318 6F666200
+ 7319 .LASF46:
+ 7320 08f7 626C6F63 .string "block_cipher"
+ 7320 6B5F6369
+ 7320 70686572
+ 7320 00
+ 7321 .LASF369:
+ 7322 0904 626C6F63 .string "block_count"
+ 7322 6B5F636F
+ 7322 756E7400
+ 7323 .LASF277:
+ 7324 0910 7263526F .string "rcRow"
+ 7324 7700
+ 7325 .LASF20:
+
GAS LISTING /tmp/ccWvEaWW.s page 166
+
+
+ 7326 0916 4442475F .string "DBG_VDB"
+ 7326 56444200
+ 7327 .LASF93:
+ 7328 091e 6B636970 .string "kcipher_type"
+ 7328 6865725F
+ 7328 74797065
+ 7328 00
+ 7329 .LASF177:
+ 7330 092b 72634C61 .string "rcLastTarget_v1_0"
+ 7330 73745461
+ 7330 72676574
+ 7330 5F76315F
+ 7330 3000
+ 7331 .LASF185:
+ 7332 093d 72634C61 .string "rcLastTarget_v1_1"
+ 7332 73745461
+ 7332 72676574
+ 7332 5F76315F
+ 7332 3100
+ 7333 .LASF164:
+ 7334 094f 72635365 .string "rcSemaphore"
+ 7334 6D617068
+ 7334 6F726500
+ 7335 .LASF218:
+ 7336 095b 7263436F .string "rcConcatenating"
+ 7336 6E636174
+ 7336 656E6174
+ 7336 696E6700
+ 7337 .LASF309:
+ 7338 096b 7263496E .string "rcIncomplete"
+ 7338 636F6D70
+ 7338 6C657465
+ 7338 00
+ 7339 .LASF338:
+ 7340 0978 72634E6F .string "rcNotOpen"
+ 7340 744F7065
+ 7340 6E00
+ 7341 .LASF382:
+ 7342 0982 4B436970 .string "KCipherVecAesNiDecryptCtr"
+ 7342 68657256
+ 7342 65634165
+ 7342 734E6944
+ 7342 65637279
+ 7343 .LASF147:
+ 7344 099c 7263496E .string "rcIndex"
+ 7344 64657800
+ 7345 .LASF67:
+ 7346 09a4 656E6372 .string "encrypt_ofb"
+ 7346 7970745F
+ 7346 6F666200
+ 7347 .LASF55:
+ 7348 09b0 7365745F .string "set_encrypt_ctr_func"
+ 7348 656E6372
+ 7348 7970745F
+ 7348 6374725F
+ 7348 66756E63
+ 7349 .LASF356:
+
GAS LISTING /tmp/ccWvEaWW.s page 167
+
+
+ 7350 09c5 4B436970 .string "KCipherVecAesNiSetEncryptIvec"
+ 7350 68657256
+ 7350 65634165
+ 7350 734E6953
+ 7350 6574456E
+ 7351 .LASF22:
+ 7352 09e3 4442475F .string "DBG_XARC"
+ 7352 58415243
+ 7352 00
+ 7353 .LASF392:
+ 7354 09ec 474E5520 .string "GNU C 4.4.2"
+ 7354 4320342E
+ 7354 342E3200
+ 7355 .LASF357:
+ 7356 09f8 69766563 .string "ivec"
+ 7356 00
+ 7357 .LASF100:
+ 7358 09fd 72635275 .string "rcRuntime"
+ 7358 6E74696D
+ 7358 6500
+ 7359 .LASF139:
+ 7360 0a07 7263586D .string "rcXmlDoc"
+ 7360 6C446F63
+ 7360 00
+ 7361 .LASF72:
+ 7362 0a10 6C6F6E67 .string "long long int"
+ 7362 206C6F6E
+ 7362 6720696E
+ 7362 7400
+ 7363 .LASF220:
+ 7364 0a1e 7263506F .string "rcPositioning"
+ 7364 73697469
+ 7364 6F6E696E
+ 7364 6700
+ 7365 .LASF34:
+ 7366 0a2c 636F756E .string "counter"
+ 7366 74657200
+ 7367 .LASF70:
+ 7368 0a34 64656372 .string "decrypt_ctr"
+ 7368 7970745F
+ 7368 63747200
+ 7369 .LASF94:
+ 7370 0a40 6B636970 .string "kcipher_null"
+ 7370 6865725F
+ 7370 6E756C6C
+ 7370 00
+ 7371 .LASF151:
+ 7372 0a4d 72634D44 .string "rcMD5SumFmt"
+ 7372 3553756D
+ 7372 466D7400
+ 7373 .LASF365:
+ 7374 0a59 4B436970 .string "KCipherVecAesNiDecryptV1Int"
+ 7374 68657256
+ 7374 65634165
+ 7374 734E6944
+ 7374 65637279
+ 7375 .LASF202:
+
GAS LISTING /tmp/ccWvEaWW.s page 168
+
+
+ 7376 0a75 7263496E .string "rcInserting"
+ 7376 73657274
+ 7376 696E6700
+ 7377 .LASF250:
+ 7378 0a81 7263436F .string "rcComparing"
+ 7378 6D706172
+ 7378 696E6700
+ 7379 .LASF312:
+ 7380 0a8d 7263456D .string "rcEmpty"
+ 7380 70747900
+ 7381 .LASF144:
+ 7382 0a95 7263466F .string "rcFormatter"
+ 7382 726D6174
+ 7382 74657200
+ 7383 .LASF75:
+ 7384 0aa1 646F7562 .string "double"
+ 7384 6C6500
+ 7385 .LASF229:
+ 7386 0aa8 72635265 .string "rcRegistering"
+ 7386 67697374
+ 7386 6572696E
+ 7386 6700
+ 7387 .LASF35:
+ 7388 0ab6 72656663 .string "refcount"
+ 7388 6F756E74
+ 7388 00
+ 7389 .LASF118:
+ 7390 0abf 72634E53 .string "rcNS"
+ 7390 00
+ 7391 .LASF261:
+ 7392 0ac4 72635061 .string "rcParam"
+ 7392 72616D00
+ 7393 .LASF226:
+ 7394 0acc 72634578 .string "rcExecuting"
+ 7394 65637574
+ 7394 696E6700
+ 7395 .LASF122:
+ 7396 0ad8 52435461 .string "RCTarget"
+ 7396 72676574
+ 7396 00
+ 7397 .LASF283:
+ 7398 0ae1 72634372 .string "rcCrc"
+ 7398 6300
+ 7399 .LASF26:
+ 7400 0ae7 4442475F .string "DBG_SEARCH"
+ 7400 53454152
+ 7400 434800
+ 7401 .LASF111:
+ 7402 0af2 7263584D .string "rcXML"
+ 7402 4C00
+ 7403 .LASF69:
+ 7404 0af8 656E6372 .string "encrypt_ctr"
+ 7404 7970745F
+ 7404 63747200
+ 7405 .LASF28:
+ 7406 0b04 4442475F .string "DBG_VFS"
+ 7406 56465300
+
GAS LISTING /tmp/ccWvEaWW.s page 169
+
+
+ 7407 .LASF73:
+ 7408 0b0c 666C6F61 .string "float"
+ 7408 7400
+ 7409 .LASF205:
+ 7410 0b12 72635570 .string "rcUpdating"
+ 7410 64617469
+ 7410 6E6700
+ 7411 .LASF232:
+ 7412 0b1d 7263436F .string "rcConverting"
+ 7412 6E766572
+ 7412 74696E67
+ 7412 00
+ 7413 .LASF64:
+ 7414 0b2a 64656372 .string "decrypt_pcbc"
+ 7414 7970745F
+ 7414 70636263
+ 7414 00
+ 7415 .LASF97:
+ 7416 0b37 4B426C6F .string "KBlockCipher"
+ 7416 636B4369
+ 7416 70686572
+ 7416 00
+ 7417 .LASF175:
+ 7418 0b44 72634479 .string "rcDylib"
+ 7418 6C696200
+ 7419 .LASF324:
+ 7420 0b4c 72635265 .string "rcReadonly"
+ 7420 61646F6E
+ 7420 6C7900
+ 7421 .LASF7:
+ 7422 0b57 756E7369 .string "unsigned int"
+ 7422 676E6564
+ 7422 20696E74
+ 7422 00
+ 7423 .LASF325:
+ 7424 0b64 72635772 .string "rcWriteonly"
+ 7424 6974656F
+ 7424 6E6C7900
+ 7425 .LASF47:
+ 7426 0b70 4B436970 .string "KCipher_vt"
+ 7426 6865725F
+ 7426 767400
+ 7427 .LASF319:
+ 7428 0b7b 72634C6F .string "rcLocked"
+ 7428 636B6564
+ 7428 00
+ 7429 .LASF201:
+ 7430 0b84 72635072 .string "rcProjecting"
+ 7430 6F6A6563
+ 7430 74696E67
+ 7430 00
+ 7431 .LASF106:
+ 7432 0b91 72635053 .string "rcPS"
+ 7432 00
+ 7433 .LASF291:
+ 7434 0b96 72635265 .string "rcRefcount"
+ 7434 66636F75
+
GAS LISTING /tmp/ccWvEaWW.s page 170
+
+
+ 7434 6E7400
+ 7435 .LASF126:
+ 7436 0ba1 7263546F .string "rcTocEntry"
+ 7436 63456E74
+ 7436 727900
+ 7437 .LASF281:
+ 7438 0bac 72634D6F .string "rcMode"
+ 7438 646500
+ 7439 .LASF350:
+ 7440 0bb3 4B436970 .string "KCipherVecAesNiSetEncryptKey"
+ 7440 68657256
+ 7440 65634165
+ 7440 734E6953
+ 7440 6574456E
+ 7441 .LASF340:
+ 7442 0bd0 7263556E .string "rcUnequal"
+ 7442 65717561
+ 7442 6C00
+ 7443 .LASF321:
+ 7444 0bda 72634465 .string "rcDetached"
+ 7444 74616368
+ 7444 656400
+ 7445 .LASF327:
+ 7446 0be5 7263496E .string "rcInPlaceNotAllowed"
+ 7446 506C6163
+ 7446 654E6F74
+ 7446 416C6C6F
+ 7446 77656400
+ 7447 .LASF269:
+ 7448 0bf9 72635261 .string "rcRange"
+ 7448 6E676500
+ 7449 .LASF394:
+ 7450 0c01 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 7450 652F726F
+ 7450 6461726D
+ 7450 65722F73
+ 7450 72615F73
+ 7451 .LASF279:
+ 7452 0c49 72634C61 .string "rcLastObject_v1_0"
+ 7452 73744F62
+ 7452 6A656374
+ 7452 5F76315F
+ 7452 3000
+ 7453 .LASF292:
+ 7454 0c5b 72634C61 .string "rcLastObject_v1_1"
+ 7454 73744F62
+ 7454 6A656374
+ 7454 5F76315F
+ 7454 3100
+ 7455 .LASF386:
+ 7456 0c6d 4B436970 .string "KCipherVecAesNiAllocNull"
+ 7456 68657256
+ 7456 65634165
+ 7456 734E6941
+ 7456 6C6C6F63
+ 7457 .LASF98:
+ 7458 0c86 62797465 .string "byte"
+
GAS LISTING /tmp/ccWvEaWW.s page 171
+
+
+ 7458 00
+ 7459 .LASF314:
+ 7460 0c8b 7263496E .string "rcInsufficient"
+ 7460 73756666
+ 7460 69636965
+ 7460 6E7400
+ 7461 .LASF245:
+ 7462 0c9a 72634C61 .string "rcLastContext_v1_0"
+ 7462 7374436F
+ 7462 6E746578
+ 7462 745F7631
+ 7462 5F3000
+ 7463 .LASF256:
+ 7464 0cad 72634C61 .string "rcLastContext_v1_1"
+ 7464 7374436F
+ 7464 6E746578
+ 7464 745F7631
+ 7464 5F3100
+ 7465 .LASF39:
+ 7466 0cc0 64656372 .string "decrypt_key"
+ 7466 7970745F
+ 7466 6B657900
+ 7467 .LASF176:
+ 7468 0ccc 72634578 .string "rcExpression"
+ 7468 70726573
+ 7468 73696F6E
+ 7468 00
+ 7469 .LASF222:
+ 7470 0cd9 7263556E .string "rcUnpacking"
+ 7470 7061636B
+ 7470 696E6700
+ 7471 .LASF138:
+ 7472 0ce5 7263446F .string "rcDoc"
+ 7472 6300
+ 7473 .LASF13:
+ 7474 0ceb 4442475F .string "DBG_APP"
+ 7474 41505000
+ 7475 .LASF239:
+ 7476 0cf3 72634D75 .string "rcMultiplexing"
+ 7476 6C746970
+ 7476 6C657869
+ 7476 6E6700
+ 7477 .LASF241:
+ 7478 0d02 72635365 .string "rcSearching"
+ 7478 61726368
+ 7478 696E6700
+ 7479 .LASF341:
+ 7480 0d0e 72634661 .string "rcFailed"
+ 7480 696C6564
+ 7480 00
+ 7481 .LASF48:
+ 7482 0d17 4B436970 .string "KCipher_vt_v1"
+ 7482 6865725F
+ 7482 76745F76
+ 7482 3100
+ 7483 .LASF306:
+ 7484 0d25 7263496E .string "rcIncorrect"
+
GAS LISTING /tmp/ccWvEaWW.s page 172
+
+
+ 7484 636F7272
+ 7484 65637400
+ 7485 .LASF145:
+ 7486 0d31 72634675 .string "rcFunctParam"
+ 7486 6E637450
+ 7486 6172616D
+ 7486 00
+ 7487 .LASF366:
+ 7488 0d3e 4B436970 .string "KCipherVecAesNiEncrypt"
+ 7488 68657256
+ 7488 65634165
+ 7488 734E6945
+ 7488 6E637279
+ 7489 .LASF38:
+ 7490 0d55 656E6372 .string "encrypt_key"
+ 7490 7970745F
+ 7490 6B657900
+ 7491 .LASF270:
+ 7492 0d61 7263436F .string "rcConstraint"
+ 7492 6E737472
+ 7492 61696E74
+ 7492 00
+ 7493 .LASF216:
+ 7494 0d6e 72634672 .string "rcFreezing"
+ 7494 65657A69
+ 7494 6E6700
+ 7495 .LASF296:
+ 7496 0d79 7263556E .string "rcUnknown"
+ 7496 6B6E6F77
+ 7496 6E00
+ 7497 .LASF135:
+ 7498 0d83 72634375 .string "rcCursor"
+ 7498 72736F72
+ 7498 00
+ 7499 .LASF293:
+ 7500 0d8c 52435374 .string "RCState"
+ 7500 61746500
+ 7501 .LASF81:
+ 7502 0d94 4B426C6F .string "KBlockCipherByte"
+ 7502 636B4369
+ 7502 70686572
+ 7502 42797465
+ 7502 00
+ 7503 .LASF141:
+ 7504 0da5 72634669 .string "rcFileDesc"
+ 7504 6C654465
+ 7504 736300
+ 7505 .LASF79:
+ 7506 0db0 4B426C6F .string "KBlockCipherByte_vt_v1"
+ 7506 636B4369
+ 7506 70686572
+ 7506 42797465
+ 7506 5F76745F
+ 7507 .LASF333:
+ 7508 0dc7 72634967 .string "rcIgnored"
+ 7508 6E6F7265
+ 7508 6400
+
GAS LISTING /tmp/ccWvEaWW.s page 173
+
+
+ 7509 .LASF90:
+ 7510 0dd1 655F6976 .string "e_ivec"
+ 7510 656300
+ 7511 .LASF191:
+ 7512 0dd8 72635265 .string "rcReleasing"
+ 7512 6C656173
+ 7512 696E6700
+ 7513 .LASF114:
+ 7514 0de4 72634B46 .string "rcKFG"
+ 7514 4700
+ 7515 .LASF272:
+ 7516 0dea 72634D65 .string "rcMessage"
+ 7516 73736167
+ 7516 6500
+ 7517 .LASF219:
+ 7518 0df4 7263466F .string "rcFormatting"
+ 7518 726D6174
+ 7518 74696E67
+ 7518 00
+ 7519 .LASF112:
+ 7520 0e01 72635352 .string "rcSRA"
+ 7520 4100
+ 7521 .LASF288:
+ 7522 0e07 7263456E .string "rcEnvironment"
+ 7522 7669726F
+ 7522 6E6D656E
+ 7522 7400
+ 7523 .LASF74:
+ 7524 0e15 6C6F6E67 .string "long long unsigned int"
+ 7524 206C6F6E
+ 7524 6720756E
+ 7524 7369676E
+ 7524 65642069
+ 7525 .LASF50:
+ 7526 0e2c 64657374 .string "destroy"
+ 7526 726F7900
+ 7527 .LASF170:
+ 7528 0e34 7263546F .string "rcToken"
+ 7528 6B656E00
+ 7529 .LASF230:
+ 7530 0e3c 7263546F .string "rcTokenizing"
+ 7530 6B656E69
+ 7530 7A696E67
+ 7530 00
+ 7531 .LASF16:
+ 7532 0e49 4442475F .string "DBG_REF"
+ 7532 52454600
+ 7533 .LASF372:
+ 7534 0e51 4B436970 .string "KCipherVecAesNiEncryptCbc"
+ 7534 68657256
+ 7534 65634165
+ 7534 734E6945
+ 7534 6E637279
+ 7535 .LASF211:
+ 7536 0e6b 72635772 .string "rcWriting"
+ 7536 6974696E
+ 7536 6700
+
GAS LISTING /tmp/ccWvEaWW.s page 174
+
+
+ 7537 .LASF187:
+ 7538 0e75 7263416C .string "rcAllocating"
+ 7538 6C6F6361
+ 7538 74696E67
+ 7538 00
+ 7539 .LASF173:
+ 7540 0e82 72635479 .string "rcType"
+ 7540 706500
+ 7541 .LASF274:
+ 7542 0e89 72635265 .string "rcResources"
+ 7542 736F7572
+ 7542 63657300
+ 7543 .LASF155:
+ 7544 0e95 72634E61 .string "rcNamelist"
+ 7544 6D656C69
+ 7544 737400
+ 7545 .LASF339:
+ 7546 0ea0 7263556E .string "rcUndefined"
+ 7546 64656669
+ 7546 6E656400
+ 7547 .LASF91:
+ 7548 0eac 645F6976 .string "d_ivec"
+ 7548 656300
+ 7549 .LASF307:
+ 7550 0eb3 7263496E .string "rcInconsistent"
+ 7550 636F6E73
+ 7550 69737465
+ 7550 6E7400
+ 7551 .LASF252:
+ 7552 0ec2 72635265 .string "rcRetrieving"
+ 7552 74726965
+ 7552 76696E67
+ 7552 00
+ 7553 .LASF58:
+ 7554 0ecf 64656372 .string "decrypt"
+ 7554 79707400
+ 7555 .LASF49:
+ 7556 0ed7 76657273 .string "version"
+ 7556 696F6E00
+ 7557 .LASF264:
+ 7558 0edf 72634E61 .string "rcName"
+ 7558 6D6500
+ 7559 .LASF54:
+ 7560 0ee6 7365745F .string "set_decrypt_ivec"
+ 7560 64656372
+ 7560 7970745F
+ 7560 69766563
+ 7560 00
+ 7561 .LASF301:
+ 7562 0ef7 72634E75 .string "rcNull"
+ 7562 6C6C00
+ 7563 .LASF223:
+ 7564 0efe 7263456E .string "rcEncoding"
+ 7564 636F6469
+ 7564 6E6700
+ 7565 .LASF142:
+ 7566 0f09 72634669 .string "rcFileFormat"
+
GAS LISTING /tmp/ccWvEaWW.s page 175
+
+
+ 7566 6C65466F
+ 7566 726D6174
+ 7566 00
+ 7567 .LASF179:
+ 7568 0f16 7263456E .string "rcEncryptionKey"
+ 7568 63727970
+ 7568 74696F6E
+ 7568 4B657900
+ 7569 .LASF244:
+ 7570 0f26 7263496E .string "rcInflating"
+ 7570 666C6174
+ 7570 696E6700
+ 7571 .LASF326:
+ 7572 0f32 72634E6F .string "rcNoPerm"
+ 7572 5065726D
+ 7572 00
+ 7573 .LASF214:
+ 7574 0f3b 72635265 .string "rcResetting"
+ 7574 73657474
+ 7574 696E6700
+ 7575 .LASF36:
+ 7576 0f47 626C6F63 .string "block_size"
+ 7576 6B5F7369
+ 7576 7A6500
+ 7577 .LASF162:
+ 7578 0f52 72635257 .string "rcRWLock"
+ 7578 4C6F636B
+ 7578 00
+ 7579 .LASF193:
+ 7580 0f5b 72634C69 .string "rcListing"
+ 7580 7374696E
+ 7580 6700
+ 7581 .LASF63:
+ 7582 0f65 656E6372 .string "encrypt_pcbc"
+ 7582 7970745F
+ 7582 70636263
+ 7582 00
+ 7583 .LASF32:
+ 7584 0f72 4B526566 .string "KRefcount"
+ 7584 636F756E
+ 7584 7400
+ 7585 .LASF143:
+ 7586 0f7c 72634675 .string "rcFunction"
+ 7586 6E637469
+ 7586 6F6E00
+ 7587 .LASF88:
+ 7588 0f87 655F6B65 .string "e_key"
+ 7588 7900
+ 7589 .LASF299:
+ 7590 0f8d 7263556E .string "rcUnrecognized"
+ 7590 7265636F
+ 7590 676E697A
+ 7590 656400
+ 7591 .LASF86:
+ 7592 0f9c 6E756D62 .string "number_of_rounds"
+ 7592 65725F6F
+ 7592 665F726F
+
GAS LISTING /tmp/ccWvEaWW.s page 176
+
+
+ 7592 756E6473
+ 7592 00
+ 7593 .LASF115:
+ 7594 0fad 7263416C .string "rcAlign"
+ 7594 69676E00
+ 7595 .LASF178:
+ 7596 0fb5 72635072 .string "rcProduction"
+ 7596 6F647563
+ 7596 74696F6E
+ 7596 00
+ 7597 .LASF168:
+ 7598 0fc2 72635468 .string "rcThread"
+ 7598 72656164
+ 7598 00
+ 7599 .LASF37:
+ 7600 0fcb 6E616D65 .string "name"
+ 7600 00
+ 7601 .LASF397:
+ 7602 0fd0 4B436970 .string "KCipherVecAesNiClassName"
+ 7602 68657256
+ 7602 65634165
+ 7602 734E6943
+ 7602 6C617373
+ 7603 .LASF388:
+ 7604 0fe9 6E756C6C .string "null"
+ 7604 00
+ 7605 .LASF52:
+ 7606 0fee 7365745F .string "set_decrypt_key"
+ 7606 64656372
+ 7606 7970745F
+ 7606 6B657900
+ 7607 .LASF370:
+ 7608 0ffe 706F7574 .string "pout"
+ 7608 00
+ 7609 .LASF33:
+ 7610 1003 4B436970 .string "KCipher"
+ 7610 68657200
+ 7611 .LASF78:
+ 7612 100b 4B426C6F .string "KBlockCipher_vt"
+ 7612 636B4369
+ 7612 70686572
+ 7612 5F767400
+ 7613 .LASF285:
+ 7614 101b 72635365 .string "rcSeed"
+ 7614 656400
+ 7615 .LASF242:
+ 7616 1022 72634C6F .string "rcLoading"
+ 7616 6164696E
+ 7616 6700
+ 7617 .LASF1:
+ 7618 102c 73686F72 .string "short int"
+ 7618 7420696E
+ 7618 7400
+ 7619 .LASF360:
+ 7620 1036 66756E63 .string "func"
+ 7620 00
+ 7621 .LASF377:
+
GAS LISTING /tmp/ccWvEaWW.s page 177
+
+
+ 7622 103b 4B436970 .string "KCipherVecAesNiEncryptCfb"
+ 7622 68657256
+ 7622 65634165
+ 7622 734E6945
+ 7622 6E637279
+ 7623 .LASF335:
+ 7624 1055 72634C61 .string "rcLastState_v1_0"
+ 7624 73745374
+ 7624 6174655F
+ 7624 76315F30
+ 7624 00
+ 7625 .LASF344:
+ 7626 1066 72634C61 .string "rcLastState_v1_1"
+ 7626 73745374
+ 7626 6174655F
+ 7626 76315F31
+ 7626 00
+ 7627 .LASF109:
+ 7628 1077 72635644 .string "rcVDB"
+ 7628 4200
+ 7629 .LASF92:
+ 7630 107d 43697068 .string "CipherNull"
+ 7630 65724E75
+ 7630 6C6C00
+ 7631 .LASF51:
+ 7632 1088 7365745F .string "set_encrypt_key"
+ 7632 656E6372
+ 7632 7970745F
+ 7632 6B657900
+ 7633 .LASF107:
+ 7634 1098 72635846 .string "rcXF"
+ 7634 00
+ 7635 .LASF71:
+ 7636 109d 4B436970 .string "KCipher_ptr"
+ 7636 6865725F
+ 7636 70747200
+ 7637 .LASF45:
+ 7638 10a9 4B436970 .string "KCipherVecAesNi"
+ 7638 68657256
+ 7638 65634165
+ 7638 734E6900
+ 7639 .LASF190:
+ 7640 10b9 72634465 .string "rcDestroying"
+ 7640 7374726F
+ 7640 79696E67
+ 7640 00
+ 7641 .LASF295:
+ 7642 10c6 7263446F .string "rcDone"
+ 7642 6E6500
+ 7643 .LASF125:
+ 7644 10cd 7263546F .string "rcToc"
+ 7644 6300
+ 7645 .LASF43:
+ 7646 10d3 64656372 .string "decrypt_counter_func"
+ 7646 7970745F
+ 7646 636F756E
+ 7646 7465725F
+
GAS LISTING /tmp/ccWvEaWW.s page 178
+
+
+ 7646 66756E63
+ 7647 .LASF199:
+ 7648 10e8 7263416C .string "rcAliasing"
+ 7648 69617369
+ 7648 6E6700
+ 7649 .LASF160:
+ 7650 10f3 72635072 .string "rcProcess"
+ 7650 6F636573
+ 7650 7300
+ 7651 .LASF258:
+ 7652 10fd 72634E6F .string "rcNoObj"
+ 7652 4F626A00
+ 7653 .LASF297:
+ 7654 1105 7263556E .string "rcUnsupported"
+ 7654 73757070
+ 7654 6F727465
+ 7654 6400
+ 7655 .LASF373:
+ 7656 1113 4B436970 .string "KCipherVecAesNiDecryptCbc"
+ 7656 68657256
+ 7656 65634165
+ 7656 734E6944
+ 7656 65637279
+ 7657 .LASF361:
+ 7658 112d 4B436970 .string "KCipherVecAesNiSetDecryptCounterFunc"
+ 7658 68657256
+ 7658 65634165
+ 7658 734E6953
+ 7658 65744465
+ 7659 .LASF236:
+ 7660 1152 72634465 .string "rcDetaching"
+ 7660 74616368
+ 7660 696E6700
+ 7661 .LASF133:
+ 7662 115e 7263436F .string "rcColumn"
+ 7662 6C756D6E
+ 7662 00
+ 7663 .LASF42:
+ 7664 1167 656E6372 .string "encrypt_counter_func"
+ 7664 7970745F
+ 7664 636F756E
+ 7664 7465725F
+ 7664 66756E63
+ 7665 .LASF298:
+ 7666 117c 7263556E .string "rcUnexpected"
+ 7666 65787065
+ 7666 63746564
+ 7666 00
+ 7667 .LASF62:
+ 7668 1189 64656372 .string "decrypt_cbc"
+ 7668 7970745F
+ 7668 63626300
+ 7669 .LASF6:
+ 7670 1195 75696E74 .string "uint32_t"
+ 7670 33325F74
+ 7670 00
+ 7671 .LASF119:
+
GAS LISTING /tmp/ccWvEaWW.s page 179
+
+
+ 7672 119e 72635646 .string "rcVFS"
+ 7672 5300
+ 7673 .LASF25:
+ 7674 11a4 4442475F .string "DBG_KRYPTO"
+ 7674 4B525950
+ 7674 544F00
+ 7675 .LASF343:
+ 7676 11af 72635772 .string "rcWrongType"
+ 7676 6F6E6754
+ 7676 79706500
+ 7677 .LASF278:
+ 7678 11bb 72634C69 .string "rcLibrary"
+ 7678 62726172
+ 7678 7900
+ 7679 .LASF311:
+ 7680 11c5 72634361 .string "rcCanceled"
+ 7680 6E63656C
+ 7680 656400
+ 7681 .LASF182:
+ 7682 11d0 72634461 .string "rcData"
+ 7682 746100
+ 7683 .LASF146:
+ 7684 11d7 72634865 .string "rcHeader"
+ 7684 61646572
+ 7684 00
+ 7685 .LASF4:
+ 7686 11e0 73686F72 .string "short unsigned int"
+ 7686 7420756E
+ 7686 7369676E
+ 7686 65642069
+ 7686 6E7400
+ 7687 .LASF136:
+ 7688 11f3 72634461 .string "rcDatabase"
+ 7688 74616261
+ 7688 736500
+ 7689 .LASF61:
+ 7690 11fe 656E6372 .string "encrypt_cbc"
+ 7690 7970745F
+ 7690 63626300
+ 7691 .LASF212:
+ 7692 120a 7263436F .string "rcCommitting"
+ 7692 6D6D6974
+ 7692 74696E67
+ 7692 00
+ 7693 .LASF240:
+ 7694 1217 7263436C .string "rcClassifying"
+ 7694 61737369
+ 7694 6679696E
+ 7694 6700
+ 7695 .LASF171:
+ 7696 1225 72635472 .string "rcTree"
+ 7696 656500
+ 7697 .LASF41:
+ 7698 122c 64656372 .string "decrypt_ivec"
+ 7698 7970745F
+ 7698 69766563
+ 7698 00
+
GAS LISTING /tmp/ccWvEaWW.s page 180
+
+
+ 7699 .LASF30:
+ 7700 1239 4442475F .string "DBG_ARGS"
+ 7700 41524753
+ 7700 00
+ 7701 .LASF200:
+ 7702 1242 72635365 .string "rcSelecting"
+ 7702 6C656374
+ 7702 696E6700
+ 7703 .LASF101:
+ 7704 124e 72635465 .string "rcText"
+ 7704 787400
+ 7705 .LASF337:
+ 7706 1255 72634F75 .string "rcOutoforder"
+ 7706 746F666F
+ 7706 72646572
+ 7706 00
+ 7707 .LASF304:
+ 7708 1262 7263496E .string "rcInvalid"
+ 7708 76616C69
+ 7708 6400
+ 7709 .LASF251:
+ 7710 126c 7263496E .string "rcInitializing"
+ 7710 69746961
+ 7710 6C697A69
+ 7710 6E6700
+ 7711 .LASF130:
+ 7712 127b 7263426C .string "rcBlob"
+ 7712 6F6200
+ 7713 .LASF53:
+ 7714 1282 7365745F .string "set_encrypt_ivec"
+ 7714 656E6372
+ 7714 7970745F
+ 7714 69766563
+ 7714 00
+ 7715 .LASF374:
+ 7716 1293 74656D70 .string "temp"
+ 7716 00
+ 7717 .LASF228:
+ 7718 1298 72635265 .string "rcReindexing"
+ 7718 696E6465
+ 7718 78696E67
+ 7718 00
+ 7719 .LASF123:
+ 7720 12a5 72634E6F .string "rcNoTarg"
+ 7720 54617267
+ 7720 00
+ 7721 .LASF305:
+ 7722 12ae 7263436F .string "rcCorrupt"
+ 7722 72727570
+ 7722 7400
+ 7723 .LASF334:
+ 7724 12b8 72634F75 .string "rcOutofrange"
+ 7724 746F6672
+ 7724 616E6765
+ 7724 00
+ 7725 .LASF163:
+ 7726 12c5 72635363 .string "rcSchema"
+
GAS LISTING /tmp/ccWvEaWW.s page 181
+
+
+ 7726 68656D61
+ 7726 00
+ 7727 .LASF159:
+ 7728 12ce 72635061 .string "rcPath"
+ 7728 746800
+ 7729 .LASF210:
+ 7730 12d5 72635265 .string "rcReading"
+ 7730 6164696E
+ 7730 6700
+ 7731 .LASF80:
+ 7732 12df 6B65795F .string "key_size"
+ 7732 73697A65
+ 7732 00
+ 7733 .LASF342:
+ 7734 12e8 72634E6F .string "rcNotAvailable"
+ 7734 74417661
+ 7734 696C6162
+ 7734 6C6500
+ 7735 .LASF375:
+ 7736 12f7 4B436970 .string "KCipherVecAesNiEncryptPcbc"
+ 7736 68657256
+ 7736 65634165
+ 7736 734E6945
+ 7736 6E637279
+ 7737 .LASF300:
+ 7738 1312 7263416D .string "rcAmbiguous"
+ 7738 62696775
+ 7738 6F757300
+ 7739 .ident "GCC: (GNU) 4.4.2"
+ 7740 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccWvEaWW.s page 182
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 cipher-vec.c
+ /tmp/ccWvEaWW.s:14 .rodata:0000000000000000 KCipherVecAesNiClassName
+ /tmp/ccWvEaWW.s:18 .text:0000000000000000 CipherVecIn
+ /tmp/ccWvEaWW.s:49 .text:000000000000001f CipherVecOut
+ /tmp/ccWvEaWW.s:81 .text:0000000000000048 KCipherVecAesNiDestroy
+ /tmp/ccWvEaWW.s:129 .text:0000000000000082 KCipherVecAesNiSetEncryptKey
+ /tmp/ccWvEaWW.s:2006 .rodata:0000000000000330 __PRETTY_FUNCTION__.7296
+ /tmp/ccWvEaWW.s:2011 .rodata:0000000000000350 __func__.7298
+ /tmp/ccWvEaWW.s:214 .text:000000000000016c KCipherVecAesNiSetDecryptKey
+ /tmp/ccWvEaWW.s:1996 .rodata:00000000000002f0 __PRETTY_FUNCTION__.7320
+ /tmp/ccWvEaWW.s:2001 .rodata:0000000000000310 __func__.7322
+ /tmp/ccWvEaWW.s:303 .text:0000000000000256 KCipherVecAesNiSetEncryptIvec
+ /tmp/ccWvEaWW.s:1991 .rodata:00000000000002d0 __PRETTY_FUNCTION__.7342
+ /tmp/ccWvEaWW.s:354 .text:00000000000002d9 KCipherVecAesNiSetDecryptIvec
+ /tmp/ccWvEaWW.s:1986 .rodata:00000000000002b0 __PRETTY_FUNCTION__.7355
+ /tmp/ccWvEaWW.s:409 .text:000000000000035c KCipherVecAesNiSetEncryptCounterFunc
+ /tmp/ccWvEaWW.s:1981 .rodata:0000000000000280 __PRETTY_FUNCTION__.7368
+ /tmp/ccWvEaWW.s:454 .text:00000000000003cb KCipherVecAesNiSetDecryptCounterFunc
+ /tmp/ccWvEaWW.s:1976 .rodata:0000000000000240 __PRETTY_FUNCTION__.7378
+ /tmp/ccWvEaWW.s:499 .text:000000000000043a KCipherVecAesNiEncryptV1
+ /tmp/ccWvEaWW.s:527 .text:0000000000000461 KCipherVecAesNiDecryptV1
+ /tmp/ccWvEaWW.s:555 .text:0000000000000488 KCipherVecAesNiEncryptV1Int
+ /tmp/ccWvEaWW.s:595 .text:00000000000004db KCipherVecAesNiDecryptV1Int
+ /tmp/ccWvEaWW.s:635 .text:000000000000052e KCipherVecAesNiEncrypt
+ /tmp/ccWvEaWW.s:1966 .rodata:00000000000001f0 __func__.7428
+ /tmp/ccWvEaWW.s:684 .text:0000000000000592 KCipherVecAesNiDecrypt
+ /tmp/ccWvEaWW.s:1956 .rodata:00000000000001b0 __func__.7444
+ /tmp/ccWvEaWW.s:735 .text:00000000000005fd KCipherVecAesNiEncryptEcb
+ /tmp/ccWvEaWW.s:791 .text:000000000000066d KCipherVecAesNiDecryptEcb
+ /tmp/ccWvEaWW.s:847 .text:00000000000006dd KCipherVecAesNiEncryptCbc
+ /tmp/ccWvEaWW.s:929 .text:00000000000007ab KCipherVecAesNiDecryptCbc
+ /tmp/ccWvEaWW.s:1015 .text:000000000000087f KCipherVecAesNiEncryptPcbc
+ /tmp/ccWvEaWW.s:1102 .text:000000000000095c KCipherVecAesNiDecryptPcbc
+ /tmp/ccWvEaWW.s:1184 .text:0000000000000a22 KCipherVecAesNiEncryptCfb
+ /tmp/ccWvEaWW.s:1264 .text:0000000000000ae8 KCipherVecAesNiDecryptCfb
+ /tmp/ccWvEaWW.s:1344 .text:0000000000000bae KCipherVecAesNiEncryptOfb
+ /tmp/ccWvEaWW.s:1424 .text:0000000000000c74 KCipherVecAesNiDecryptOfb
+ /tmp/ccWvEaWW.s:1459 .text:0000000000000cad KCipherVecAesNiEncryptCtr
+ /tmp/ccWvEaWW.s:1946 .rodata:0000000000000170 __func__.7678
+ /tmp/ccWvEaWW.s:1488 .text:0000000000000ce3 KCipherVecAesNiDecryptCtr
+ /tmp/ccWvEaWW.s:1936 .rodata:0000000000000130 __func__.7688
+ /tmp/ccWvEaWW.s:1520 .data.rel.local:0000000000000000 KCipherVecAesNi_vt_v1
+ /tmp/ccWvEaWW.s:1546 .text:0000000000000d19 KCipherVecAesNiAllocAes
+ /tmp/ccWvEaWW.s:1926 .rodata:00000000000000f0 __func__.7698
+ /tmp/ccWvEaWW.s:1588 .text:0000000000000d74 KCipherVecAesNiInitAes
+ /tmp/ccWvEaWW.s:1649 .text:0000000000000e12 KCipherVecAesNiAllocNull
+ /tmp/ccWvEaWW.s:1916 .rodata:00000000000000b0 __func__.7725
+ /tmp/ccWvEaWW.s:1691 .text:0000000000000e6d KCipherVecAesNiInitNull
+ /tmp/ccWvEaWW.s:1753 .text:0000000000000f02 KCipherVecAesNiMake
+ /tmp/ccWvEaWW.s:1906 .rodata:0000000000000070 __func__.7753
+ /tmp/ccWvEaWW.s:1911 .rodata:0000000000000090 __PRETTY_FUNCTION__.7752
+ /tmp/ccWvEaWW.s:1921 .rodata:00000000000000d0 __PRETTY_FUNCTION__.7724
+ /tmp/ccWvEaWW.s:1931 .rodata:0000000000000110 __PRETTY_FUNCTION__.7697
+ /tmp/ccWvEaWW.s:1941 .rodata:0000000000000150 __PRETTY_FUNCTION__.7687
+ /tmp/ccWvEaWW.s:1951 .rodata:0000000000000190 __PRETTY_FUNCTION__.7677
+ /tmp/ccWvEaWW.s:1961 .rodata:00000000000001d0 __PRETTY_FUNCTION__.7443
+
GAS LISTING /tmp/ccWvEaWW.s page 183
+
+
+ /tmp/ccWvEaWW.s:1971 .rodata:0000000000000210 __PRETTY_FUNCTION__.7427
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+KCipherDestroy
+free
+__assert_fail
+SetRCFileFuncLine
+memcpy
+calloc
+KCipherInit
+KNullBlockCipherVecAesNiMake
+KAESBlockCipherVecAesNiMake
diff --git a/libs/krypto/cipher-vec.c b/libs/krypto/cipher-vec.c
new file mode 100644
index 0000000..6b61c9e
--- /dev/null
+++ b/libs/krypto/cipher-vec.c
@@ -0,0 +1,808 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+/* CIPHER_IMPL and BLOCKCIPHER_IMPL are defined in this header */
+#include "ncbi-priv.h"
+/* CIPHER_IMPL is used in this header */
+#include "cipher-impl.h"
+/* BLOCKCIPHER_IMPL is used in this header */
+#include "blockcipher-impl.h"
+
+#include "aes-ncbi-priv.h"
+#include "null-ncbi-priv.h"
+#include "cipher-priv.h"
+#include "blockcipher-priv.h"
+
+#include <krypto/cipher.h>
+#include <krypto/ciphermgr.h>
+
+#include <klib/defs.h>
+#include <klib/refcount.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+const char CMEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+
+
+
+struct CIPHER_IMPL
+{
+ KCipher dad;
+ const KBlockCipherVec * block_cipher;
+};
+
+typedef union CipherVec_u
+{
+ CipherVec vec;
+ CipherBlock block;
+} CipherVec_u;
+
+/*
+ * Read a blocks worth of bytes into an AESState
+ */
+static __inline__ CipherVec CipherVecIn (const void * cvin)
+{
+#if USE_VEC_REG
+ register CipherVec cv;
+
+ __asm__ (
+ "movdqu (%[a]),%[s]" : [s] "=x" (cv) : [a] "D" (cvin)
+ );
+
+ return cv;
+#else
+ CipherVec_u u;
+
+ memmove (&u.block, cvin, sizeof (u));
+ return u.vec;
+#endif
+}
+
+
+
+/*
+ * Write a block's worth of bytes out from an AESState
+ */
+static __inline__ void CipherVecOut (const CipherVec cv, void * cvout)
+{
+#if USE_VEC_REG
+ register CipherVec rcv = cv;
+
+ __asm__ (
+ "movdqu %[s],(%[a])" : : [s] "x" (rcv), [a] "D" (cvout)
+ );
+#else
+ CipherVec lcv = cv;
+ memmove (cvout, &lcv, sizeof (lcv));
+#endif
+}
+
+
+static rc_t CMEMBER(Destroy) (CIPHER_IMPL * self)
+{
+ rc_t rc = 0;
+
+ if (self)
+ {
+ rc = KCipherDestroy (&self->dad);
+ free (self);
+ }
+ return rc;
+}
+
+
+static rc_t CMEMBER(SetEncryptKey)(CIPHER_IMPL * self,
+ const char * user_key,
+ uint32_t user_key_bits)
+{
+ rc_t rc = 0;
+
+ assert (self);
+ assert (user_key);
+ assert (user_key_bits);
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+ user_key_bits);
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t CMEMBER(SetDecryptKey)(CIPHER_IMPL * self,
+ const char * user_key,
+ uint32_t user_key_bits)
+{
+ rc_t rc = 0;
+
+ assert (self);
+ assert (user_key);
+ assert (user_key_bits);
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+ user_key_bits);
+ break;
+ }
+ return rc;
+}
+
+
+static
+rc_t CMEMBER(SetEncryptIvec) (CIPHER_IMPL * self,
+ const void * ivec)
+{
+ assert (self);
+ assert (ivec);
+
+ memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+
+ return 0;
+}
+
+
+static
+rc_t CMEMBER(SetDecryptIvec) (CIPHER_IMPL * self,
+ const void * ivec)
+{
+ assert (self);
+ assert (ivec);
+
+ memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+
+ return 0;
+}
+
+
+static
+rc_t CMEMBER(SetEncryptCounterFunc) (CIPHER_IMPL * self,
+ cipher_ctr_func func)
+{
+ assert (self);
+ assert (func);
+
+ self->dad.encrypt_counter_func = func;
+
+ return 0;
+}
+
+
+static
+rc_t CMEMBER(SetDecryptCounterFunc) (CIPHER_IMPL * self,
+ cipher_ctr_func func)
+{
+ assert (self);
+ assert (func);
+
+ self->dad.decrypt_counter_func = func;
+
+ return 0;
+}
+
+
+static __inline__ CipherVec CMEMBER(EncryptV1)(const CIPHER_IMPL * self,
+ register CipherVec cv)
+{
+ return self->block_cipher->v1.encrypt (cv, self->dad.encrypt_key);
+}
+
+
+static __inline__ CipherVec CMEMBER(DecryptV1)(const CIPHER_IMPL * self,
+ register CipherVec cv)
+{
+ return self->block_cipher->v1.decrypt (cv, self->dad.decrypt_key);
+}
+
+
+static __inline__ rc_t CMEMBER(EncryptV1Int)(const CIPHER_IMPL * self,
+ const void * in, void * out)
+{
+ CipherVec cv;
+
+ cv = CipherVecIn(in);
+ cv = CMEMBER(EncryptV1)(self, cv);
+ CipherVecOut(cv, out);
+ return 0;
+}
+
+
+static __inline__ rc_t CMEMBER(DecryptV1Int)(const CIPHER_IMPL * self,
+ const void * in, void * out)
+{
+ CipherVec cv;
+
+ cv = CipherVecIn(in);
+ cv = CMEMBER(DecryptV1)(self, cv);
+ CipherVecOut(cv, out);
+ return 0;
+}
+
+
+static rc_t CMEMBER(Encrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+{
+ rc_t rc;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ rc = CMEMBER(EncryptV1Int)(self, in, out);
+ break;
+ }
+
+ return rc;
+}
+
+
+static
+rc_t CMEMBER(Decrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+{
+ rc_t rc = 0;
+
+ switch (self->block_cipher->version.maj)
+ {
+ default:
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ break;
+
+ case 1:
+ rc = CMEMBER(DecryptV1Int)(self, in, out);
+ break;
+ }
+
+ return rc;
+}
+
+
+/* ====================
+ * longer runs of multiple blocks.
+ *
+ * The algorithms are well defined and standard in most cases
+ *
+ * These aremore or elss equivalent to class functions as they do not depend upon
+ * the operation of the cipher and the algorithms are independent of anything about
+ * the cipher other than its block size.
+ *
+ * PT: plain text block
+ * CT: cipher text block
+ * EK: encryption key
+ * DK: decryption key (might be sthe same as EK)
+ * ENC: encrypt cipher function on a block using a key
+ * DEC: decrypt cipher function on a block using a key
+ * IV: initialization vector - used as feedback for chaining
+ * N: number used once (nonce)
+ * FB: feedback is the next IV in a chained/feedback mode
+ */
+
+
+/* -----
+ * NOTE:
+ * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ * time is written. The code does not look for overlaps at this point.
+ */
+
+/* ----------
+ * Electronic Code Book - simple cipher with no chaining feedback just iterate
+ * simple encrypt/decrypt with the plain, text, cipher text and key/
+ *
+ * CT = ENC (PT,EK)
+ * PT = DEC (CT,DK)
+ */
+
+/* -----
+ * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ * size. Changing MAX_BLOCK_SIZE in cipher.c can up that limit without
+ * causing any other compatibility issues.
+ *
+ * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ */
+static
+rc_t CMEMBER(EncryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+ const uint8_t * pin;
+ uint8_t * pout;
+
+ for ((pin = in), (pout = out);
+ block_count --;
+ (pin += self->dad.block_size), (pout += self->dad.block_size))
+ {
+ CMEMBER(EncryptV1Int)(self, pin, pout);
+ }
+ return 0;
+}
+
+
+static
+rc_t CMEMBER(DecryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+ const uint8_t * pin;
+ uint8_t * pout;
+
+ for ((pin = in), (pout = out);
+ block_count --;
+ (pin += self->dad.block_size), (pout += self->dad.block_size))
+ {
+ CMEMBER(DecryptV1Int)(self, pin, pout);
+ }
+
+ return 0;
+}
+
+
+/* ----------
+ * Cipher-Block Chaining
+ * CT = (FB = ENC (PT^IV, EK))
+ * PT = DEC ((FB = CT), DK)
+ */
+static
+rc_t CMEMBER(EncryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+ CipherVec cv;
+ CipherVec ivec;
+ const uint8_t * pin;
+ uint8_t * pout;
+
+#if 0
+ ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+#else
+ ivec = CipherVecIn (self->dad.encrypt_ivec);
+#endif
+
+ for ((pin = in), (pout = out);
+ block_count --;
+ (pin += self->dad.block_size), (pout += self->dad.block_size))
+ {
+ cv = CipherVecIn (pin);
+ cv ^= ivec;
+ ivec = CMEMBER(EncryptV1)(self, cv);
+ CipherVecOut (ivec, pout);
+ }
+
+#if 0
+ *(CipherVec*)self->dad.encrypt_ivec = ivec;
+#else
+ CipherVecOut (ivec, self->dad.encrypt_ivec);
+#endif
+
+ return 0;
+}
+
+
+static
+rc_t CMEMBER(DecryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+ CipherVec cv;
+ CipherVec ivec;
+ const uint8_t * pin;
+ uint8_t * pout;
+
+ ivec = CipherVecIn (self->dad.decrypt_ivec);
+
+ for ((pin = in), (pout = out);
+ block_count --;
+ (pin += self->dad.block_size), (pout += self->dad.block_size))
+ {
+ CipherVec temp;
+
+ cv = CipherVecIn (pin);
+#if 0
+ temp = cv;
+ temp = CMEMBER(DecryptV1)(self, temp);
+#else
+ temp = CMEMBER(DecryptV1)(self, cv);
+#endif
+ temp ^= ivec;
+ CipherVecOut (temp, pout);
+ ivec = cv;
+ }
+
+ *(CipherVec*)self->dad.decrypt_ivec = ivec;
+ return 0;
+}
+
+
+/* ----------
+ * Propagating cipher-block chaining
+ * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ */
+static
+rc_t CMEMBER(EncryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+ CipherVec cv;
+ CipherVec ivec;
+ const uint8_t * pin;
+ uint8_t * pout;
+
+ ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+ for ((pin = in), (pout = out);
+ block_count --;
+ (pin += self->dad.block_size), (pout += self->dad.block_size))
+ {
+ CipherVec temp;
+
+ cv = CipherVecIn (pin);
+ temp = cv ^ ivec;
+ temp = CMEMBER(EncryptV1)(self, temp);
+ ivec = cv ^ temp;
+ CipherVecOut (temp, pout);
+ }
+
+ *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+ return 0;
+#else
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+static
+rc_t CMEMBER(DecryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+ CipherVec cv;
+ CipherVec ivec;
+ const uint8_t * pin;
+ uint8_t * pout;
+
+ ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+ for ((pin = in), (pout = out);
+ block_count --;
+ (pin += self->dad.block_size), (pout += self->dad.block_size))
+ {
+ CipherVec temp;
+
+ cv = CipherVecIn (pin);
+ temp = CMEMBER(DecryptV1)(self, cv);
+ ivec ^= temp;
+ CipherVecOut (temp, pout);
+ }
+
+ *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+ return 0;
+#else
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+/* ----------
+ * Cipher Feedback
+ * CT = (FB = PT) ^ ENC (IV, EK))
+ * PT = (FB = CT) ^ DEC (IV, DK)
+ */
+static
+rc_t CMEMBER(EncryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+ CipherVec cv;
+ CipherVec ivec;
+ const uint8_t * pin;
+ uint8_t * pout;
+
+ ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+ for ((pin = in), (pout = out);
+ block_count --;
+ (pin += self->dad.block_size), (pout += self->dad.block_size))
+ {
+ ivec = CMEMBER(EncryptV1)(self, ivec);
+ cv = CipherVecIn (pin);
+ ivec ^= cv;
+ CipherVecOut (ivec, pout);
+ }
+
+ *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+ return 0;
+#else
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+static
+rc_t CMEMBER(DecryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+ CipherVec cv;
+ CipherVec ivec;
+ const uint8_t * pin;
+ uint8_t * pout;
+
+ ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+ for ((pin = in), (pout = out);
+ block_count --;
+ (pin += self->dad.block_size), (pout += self->dad.block_size))
+ {
+ cv = CMEMBER(EncryptV1)(self, ivec);
+ ivec = CipherVecIn (pin);
+ cv ^= ivec;
+ CipherVecOut (cv, pout);
+ }
+
+ *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+ return 0;
+#else
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+/* ----------
+ * Output Feedback
+ * CT = PT ^ (FB = ENC (IV, EK))
+ * PT = CT ^ (FB = DEC (IV, DK))
+ */
+static
+rc_t CMEMBER(EncryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+ CipherVec cv;
+ CipherVec ivec;
+ const uint8_t * pin;
+ uint8_t * pout;
+
+ ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+ for ((pin = in), (pout = out);
+ block_count --;
+ (pin += self->dad.block_size), (pout += self->dad.block_size))
+ {
+ ivec = CMEMBER(EncryptV1)(self, ivec);
+ cv = CipherVecIn (pin);
+ cv ^= ivec;
+ CipherVecOut (cv, pout);
+ }
+
+ *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+ return 0;
+#else
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+static
+rc_t CMEMBER(DecryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+ return CMEMBER(EncryptOfb)(self, in, out, block_count);
+}
+
+
+/* Counter
+ * IV is a nonce and not re-used as FB
+ * CT = PT ^ ENC (N, EK)
+ * PT = CT ^ ENC (N, DK)
+ * Note decrypt is encrypt.
+ * nonce is a function that given an iv generates the next iv
+ */
+static
+rc_t CMEMBER(EncryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static
+rc_t CMEMBER(DecryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+ return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+static
+struct KCipher_vt_v1 CMEMBER(_vt_v1) =
+{
+ { 1, 0 },
+
+ CMEMBER(Destroy),
+ CMEMBER(SetEncryptKey),
+ CMEMBER(SetDecryptKey),
+ CMEMBER(SetEncryptIvec),
+ CMEMBER(SetDecryptIvec),
+ CMEMBER(SetEncryptCounterFunc),
+ CMEMBER(SetDecryptCounterFunc),
+ CMEMBER(Encrypt),
+ CMEMBER(Decrypt),
+ CMEMBER(EncryptEcb),
+ CMEMBER(DecryptEcb),
+ CMEMBER(EncryptCbc),
+ CMEMBER(DecryptCbc),
+ CMEMBER(EncryptPcbc),
+ CMEMBER(DecryptPcbc),
+ CMEMBER(EncryptCfb),
+ CMEMBER(DecryptCfb),
+ CMEMBER(EncryptOfb),
+ CMEMBER(DecryptOfb),
+ CMEMBER(EncryptCtr),
+ CMEMBER(DecryptCtr)
+};
+
+
+static __inline__
+rc_t CMEMBER(AllocAes)(CIPHER_IMPL ** pobj,
+ const KBlockCipher * block_cipher)
+{
+ CipherAes * obj;
+
+ obj = calloc (1, sizeof (*obj));
+ *pobj = (CIPHER_IMPL*)obj;
+
+ return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+}
+
+
+static __inline__
+rc_t CMEMBER(InitAes) (CIPHER_IMPL * self,
+ const KBlockCipher * block_cipher)
+{
+ KCipher * dad = &self->dad;
+ CipherAes * aes = (struct CipherAes*)self;
+
+ KCipherInit (dad, sizeof (CipherVec),
+ (const KCipher_vt*)&CMEMBER(_vt_v1),
+ CMEMBER(ClassName));
+
+ dad->encrypt_key = &aes->e_key;
+ dad->decrypt_key = &aes->d_key;
+ dad->encrypt_ivec = &aes->e_ivec;
+ dad->decrypt_ivec = &aes->d_ivec;
+
+ self->block_cipher = &block_cipher->vec;
+
+ return 0;
+}
+
+
+static __inline__
+rc_t CMEMBER(AllocNull)(CIPHER_IMPL ** pobj,
+ const KBlockCipher * block_cipher)
+{
+ CipherNull * obj;
+
+ obj = calloc (1, sizeof (*obj));
+ *pobj = (CIPHER_IMPL*)obj;
+
+ return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+}
+
+
+static __inline__
+rc_t CMEMBER(InitNull) (CIPHER_IMPL * self,
+ const KBlockCipher * block_cipher)
+{
+ KCipher * dad = &self->dad;
+ CipherNull * null = (CipherNull*)self;
+
+ KCipherInit (dad, sizeof (CipherVec),
+ (const KCipher_vt*)&CMEMBER(_vt_v1),
+ CMEMBER(ClassName));
+
+ dad->encrypt_key = &null->e_ivec;
+ dad->decrypt_key = &null->d_ivec;
+ dad->encrypt_ivec = &null->e_ivec;
+ dad->decrypt_ivec = &null->d_ivec;
+
+ self->block_cipher = &block_cipher->vec;
+
+ return 0;
+}
+
+
+rc_t CMEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+{
+ rc_t rc;
+ KBlockCipher * block_cipher;
+
+ if (new_obj == NULL)
+ return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+ *new_obj = NULL;
+
+ switch (type)
+ {
+ default:
+ return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+
+ case kcipher_null:
+ rc = NULLBCMEMBER(Make)(&block_cipher);
+ break;
+
+ case kcipher_AES:
+ rc = AESBCMEMBER(Make)(&block_cipher);
+ break;
+ }
+
+ if (rc == 0)
+ {
+ CIPHER_IMPL * obj;
+
+ switch (type)
+ {
+ case kcipher_null:
+ rc = CMEMBER(AllocNull) (&obj, block_cipher);
+ if (rc == 0)
+ {
+ rc = CMEMBER(InitNull) (obj, block_cipher);
+ if (rc == 0)
+ *new_obj = (KCipher*)obj;
+ else
+ free (obj);
+ }
+ break;
+ case kcipher_AES:
+ rc = CMEMBER(AllocAes) (&obj, block_cipher);
+ if (rc == 0)
+ {
+ rc = CMEMBER(InitAes) (obj, block_cipher);
+ if (rc == 0)
+ *new_obj = (KCipher*)obj;
+ else
+ free (obj);
+ }
+ default:
+ /* can't really get here */
+ break;
+ }
+ }
+ return rc;
+}
+
+
+/* EOF */
diff --git a/libs/krypto/cipher-vec.vec.pic.o.list b/libs/krypto/cipher-vec.vec.pic.o.list
new file mode 100644
index 0000000..90554b0
--- /dev/null
+++ b/libs/krypto/cipher-vec.vec.pic.o.list
@@ -0,0 +1,10959 @@
+GAS LISTING /tmp/ccq6ONvw.s page 1
+
+
+ 1 .file "cipher-vec.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 DE030000 .text
+ 8 0200F201
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .globl KCipherVecClassName
+ 11 .section .rodata
+ 12 .type KCipherVecClassName, @object
+ 13 .size KCipherVecClassName, 12
+ 14 KCipherVecClassName:
+ 15 0000 43495048 .string "CIPHER_IMPL"
+ 15 45525F49
+ 15 4D504C00
+ 16 .text
+ 17 .type CipherVecIn, @function
+ 18 CipherVecIn:
+ 19 .LFB508:
+ 20 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/extern.h>
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL and BLOCKCIPHER_IMPL are defined in this header */
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "ncbi-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL is used in this header */
+
GAS LISTING /tmp/ccq6ONvw.s page 2
+
+
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-impl.h"
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* BLOCKCIPHER_IMPL is used in this header */
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-impl.h"
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "aes-ncbi-priv.h"
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "null-ncbi-priv.h"
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-priv.h"
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-priv.h"
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/cipher.h>
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/ciphermgr.h>
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/refcount.h>
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/out.h>
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/rc.h>
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <sysalloc.h>
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <stdlib.h>
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <string.h>
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <assert.h>
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char CMEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct CIPHER_IMPL
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipher dad;
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipherVec * block_cipher;
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** typedef union CipherVec_u
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec vec;
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherBlock block;
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** } CipherVec_u;
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Read a blocks worth of bytes into an AESState
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CipherVecIn (const void * cvin)
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 21 .loc 1 76 0
+ 22 .cfi_startproc
+ 23 0000 55 pushq %rbp
+ 24 .LCFI0:
+ 25 .cfi_def_cfa_offset 16
+ 26 0001 4889E5 movq %rsp, %rbp
+ 27 .cfi_offset 6, -16
+ 28 .LCFI1:
+ 29 .cfi_def_cfa_register 6
+ 30 0004 4883EC20 subq $32, %rsp
+ 31 0008 48897DE8 movq %rdi, -24(%rbp)
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+
GAS LISTING /tmp/ccq6ONvw.s page 3
+
+
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec cv;
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** __asm__ (
+ 81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** "movdqu (%[a]),%[s]" : [s] "=x" (cv) : [a] "D" (cvin)
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** );
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return cv;
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec_u u;
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memmove (&u.block, cvin, sizeof (u));
+ 32 .loc 1 88 0
+ 33 000c 488B4DE8 movq -24(%rbp), %rcx
+ 34 0010 488D45F0 leaq -16(%rbp), %rax
+ 35 0014 BA100000 movl $16, %edx
+ 35 00
+ 36 0019 4889CE movq %rcx, %rsi
+ 37 001c 4889C7 movq %rax, %rdi
+ 38 001f E8000000 call memmove at PLT
+ 38 00
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return u.vec;
+ 39 .loc 1 89 0
+ 40 0024 F30F6F45 movdqu -16(%rbp), %xmm0
+ 40 F0
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 41 .loc 1 91 0
+ 42 0029 C9 leave
+ 43 002a C3 ret
+ 44 .cfi_endproc
+ 45 .LFE508:
+ 46 .size CipherVecIn, .-CipherVecIn
+ 47 .type CipherVecOut, @function
+ 48 CipherVecOut:
+ 49 .LFB509:
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Write a block's worth of bytes out from an AESState
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ void CipherVecOut (const CipherVec cv, void * cvout)
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 50 .loc 1 99 0
+ 51 .cfi_startproc
+ 52 002b 55 pushq %rbp
+ 53 .LCFI2:
+ 54 .cfi_def_cfa_offset 16
+ 55 002c 4889E5 movq %rsp, %rbp
+ 56 .cfi_offset 6, -16
+ 57 .LCFI3:
+ 58 .cfi_def_cfa_register 6
+ 59 002f 4883EC30 subq $48, %rsp
+ 60 0033 660F7F45 movdqa %xmm0, -32(%rbp)
+ 60 E0
+ 61 0038 48897DD8 movq %rdi, -40(%rbp)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+
GAS LISTING /tmp/ccq6ONvw.s page 4
+
+
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec rcv = cv;
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** __asm__ (
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** "movdqu %[s],(%[a])" : : [s] "x" (rcv), [a] "D" (cvout)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** );
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec lcv = cv;
+ 62 .loc 1 107 0
+ 63 003c 660F6F45 movdqa -32(%rbp), %xmm0
+ 63 E0
+ 64 0041 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 64 F0
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memmove (cvout, &lcv, sizeof (lcv));
+ 65 .loc 1 108 0
+ 66 0046 488D4DF0 leaq -16(%rbp), %rcx
+ 67 004a 488B45D8 movq -40(%rbp), %rax
+ 68 004e BA100000 movl $16, %edx
+ 68 00
+ 69 0053 4889CE movq %rcx, %rsi
+ 70 0056 4889C7 movq %rax, %rdi
+ 71 0059 E8000000 call memmove at PLT
+ 71 00
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 72 .loc 1 110 0
+ 73 005e C9 leave
+ 74 005f C3 ret
+ 75 .cfi_endproc
+ 76 .LFE509:
+ 77 .size CipherVecOut, .-CipherVecOut
+ 78 .type KCipherVecDestroy, @function
+ 79 KCipherVecDestroy:
+ 80 .LFB510:
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Destroy) (CIPHER_IMPL * self)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 81 .loc 1 114 0
+ 82 .cfi_startproc
+ 83 0060 55 pushq %rbp
+ 84 .LCFI4:
+ 85 .cfi_def_cfa_offset 16
+ 86 0061 4889E5 movq %rsp, %rbp
+ 87 .cfi_offset 6, -16
+ 88 .LCFI5:
+ 89 .cfi_def_cfa_register 6
+ 90 0064 4883EC20 subq $32, %rsp
+ 91 0068 48897DE8 movq %rdi, -24(%rbp)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 92 .loc 1 115 0
+ 93 006c C745FC00 movl $0, -4(%rbp)
+ 93 000000
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (self)
+ 94 .loc 1 117 0
+ 95 0073 48837DE8 cmpq $0, -24(%rbp)
+ 95 00
+
GAS LISTING /tmp/ccq6ONvw.s page 5
+
+
+ 96 0078 741B je .L6
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = KCipherDestroy (&self->dad);
+ 97 .loc 1 119 0
+ 98 007a 488B45E8 movq -24(%rbp), %rax
+ 99 007e 4889C7 movq %rax, %rdi
+ 100 0081 E8000000 call KCipherDestroy at PLT
+ 100 00
+ 101 0086 8945FC movl %eax, -4(%rbp)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (self);
+ 102 .loc 1 120 0
+ 103 0089 488B45E8 movq -24(%rbp), %rax
+ 104 008d 4889C7 movq %rax, %rdi
+ 105 0090 E8000000 call free at PLT
+ 105 00
+ 106 .L6:
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 107 .loc 1 122 0
+ 108 0095 8B45FC movl -4(%rbp), %eax
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 109 .loc 1 123 0
+ 110 0098 C9 leave
+ 111 0099 C3 ret
+ 112 .cfi_endproc
+ 113 .LFE510:
+ 114 .size KCipherVecDestroy, .-KCipherVecDestroy
+ 115 .section .rodata
+ 116 000c 00000000 .align 8
+ 117 .LC0:
+ 118 0010 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 118 652F726F
+ 118 6461726D
+ 118 65722F73
+ 118 72615F73
+ 119 .LC1:
+ 120 0048 73656C66 .string "self"
+ 120 00
+ 121 .LC2:
+ 122 004d 75736572 .string "user_key"
+ 122 5F6B6579
+ 122 00
+ 123 .LC3:
+ 124 0056 75736572 .string "user_key_bits"
+ 124 5F6B6579
+ 124 5F626974
+ 124 7300
+ 125 .text
+ 126 .type KCipherVecSetEncryptKey, @function
+ 127 KCipherVecSetEncryptKey:
+ 128 .LFB511:
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetEncryptKey)(CIPHER_IMPL * self,
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char * user_key,
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint32_t user_key_bits)
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccq6ONvw.s page 6
+
+
+ 129 .loc 1 129 0
+ 130 .cfi_startproc
+ 131 009a 55 pushq %rbp
+ 132 .LCFI6:
+ 133 .cfi_def_cfa_offset 16
+ 134 009b 4889E5 movq %rsp, %rbp
+ 135 .cfi_offset 6, -16
+ 136 .LCFI7:
+ 137 .cfi_def_cfa_register 6
+ 138 009e 53 pushq %rbx
+ 139 009f 4883EC38 subq $56, %rsp
+ 140 00a3 48897DD8 movq %rdi, -40(%rbp)
+ 141 00a7 488975D0 movq %rsi, -48(%rbp)
+ 142 00ab 8955CC movl %edx, -52(%rbp)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 143 .loc 1 130 0
+ 144 00ae C745EC00 movl $0, -20(%rbp)
+ 144 000000
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 145 .loc 1 132 0
+ 146 00b5 48837DD8 cmpq $0, -40(%rbp)
+ 146 00
+ 147 00ba 751F jne .L9
+ 148 .cfi_offset 3, -24
+ 149 00bc 488D0D00 leaq __PRETTY_FUNCTION__.6562(%rip), %rcx
+ 149 000000
+ 150 00c3 BA840000 movl $132, %edx
+ 150 00
+ 151 00c8 488D3500 leaq .LC0(%rip), %rsi
+ 151 000000
+ 152 00cf 488D3D00 leaq .LC1(%rip), %rdi
+ 152 000000
+ 153 00d6 E8000000 call __assert_fail at PLT
+ 153 00
+ 154 .L9:
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key);
+ 155 .loc 1 133 0
+ 156 00db 48837DD0 cmpq $0, -48(%rbp)
+ 156 00
+ 157 00e0 751F jne .L10
+ 158 00e2 488D0D00 leaq __PRETTY_FUNCTION__.6562(%rip), %rcx
+ 158 000000
+ 159 00e9 BA850000 movl $133, %edx
+ 159 00
+ 160 00ee 488D3500 leaq .LC0(%rip), %rsi
+ 160 000000
+ 161 00f5 488D3D00 leaq .LC2(%rip), %rdi
+ 161 000000
+ 162 00fc E8000000 call __assert_fail at PLT
+ 162 00
+ 163 .L10:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key_bits);
+ 164 .loc 1 134 0
+ 165 0101 837DCC00 cmpl $0, -52(%rbp)
+ 166 0105 751F jne .L11
+ 167 0107 488D0D00 leaq __PRETTY_FUNCTION__.6562(%rip), %rcx
+
GAS LISTING /tmp/ccq6ONvw.s page 7
+
+
+ 167 000000
+ 168 010e BA860000 movl $134, %edx
+ 168 00
+ 169 0113 488D3500 leaq .LC0(%rip), %rsi
+ 169 000000
+ 170 011a 488D3D00 leaq .LC3(%rip), %rdi
+ 170 000000
+ 171 0121 E8000000 call __assert_fail at PLT
+ 171 00
+ 172 .L11:
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 173 .loc 1 136 0
+ 174 0126 488B45D8 movq -40(%rbp), %rax
+ 175 012a 488B4048 movq 72(%rax), %rax
+ 176 012e 8B00 movl (%rax), %eax
+ 177 0130 83F801 cmpl $1, %eax
+ 178 0133 7422 je .L13
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 179 .loc 1 139 0
+ 180 0135 B98B0000 movl $139, %ecx
+ 180 00
+ 181 013a 488D1500 leaq __func__.6564(%rip), %rdx
+ 181 000000
+ 182 0141 488D3500 leaq .LC0(%rip), %rsi
+ 182 000000
+ 183 0148 BF088E04 movl $-2029744632, %edi
+ 183 87
+ 184 014d E8000000 call SetRCFileFuncLine at PLT
+ 184 00
+ 185 0152 8945EC movl %eax, -20(%rbp)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 186 .loc 1 140 0
+ 187 0155 EB23 jmp .L14
+ 188 .L13:
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+ 189 .loc 1 143 0
+ 190 0157 488B45D8 movq -40(%rbp), %rax
+ 191 015b 488B4048 movq 72(%rax), %rax
+ 192 015f 488B5820 movq 32(%rax), %rbx
+ 193 0163 488B45D8 movq -40(%rbp), %rax
+ 194 0167 488B4018 movq 24(%rax), %rax
+ 195 016b 8B55CC movl -52(%rbp), %edx
+ 196 016e 488B4DD0 movq -48(%rbp), %rcx
+ 197 0172 4889CE movq %rcx, %rsi
+ 198 0175 4889C7 movq %rax, %rdi
+ 199 0178 FFD3 call *%rbx
+ 200 .L14:
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** user_key_bits);
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 201 .loc 1 147 0
+
GAS LISTING /tmp/ccq6ONvw.s page 8
+
+
+ 202 017a 8B45EC movl -20(%rbp), %eax
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 203 .loc 1 148 0
+ 204 017d 4883C438 addq $56, %rsp
+ 205 0181 5B popq %rbx
+ 206 0182 C9 leave
+ 207 0183 C3 ret
+ 208 .cfi_endproc
+ 209 .LFE511:
+ 210 .size KCipherVecSetEncryptKey, .-KCipherVecSetEncryptKey
+ 211 .type KCipherVecSetDecryptKey, @function
+ 212 KCipherVecSetDecryptKey:
+ 213 .LFB512:
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetDecryptKey)(CIPHER_IMPL * self,
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char * user_key,
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint32_t user_key_bits)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 214 .loc 1 154 0
+ 215 .cfi_startproc
+ 216 0184 55 pushq %rbp
+ 217 .LCFI8:
+ 218 .cfi_def_cfa_offset 16
+ 219 0185 4889E5 movq %rsp, %rbp
+ 220 .cfi_offset 6, -16
+ 221 .LCFI9:
+ 222 .cfi_def_cfa_register 6
+ 223 0188 53 pushq %rbx
+ 224 0189 4883EC38 subq $56, %rsp
+ 225 018d 48897DD8 movq %rdi, -40(%rbp)
+ 226 0191 488975D0 movq %rsi, -48(%rbp)
+ 227 0195 8955CC movl %edx, -52(%rbp)
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 228 .loc 1 155 0
+ 229 0198 C745EC00 movl $0, -20(%rbp)
+ 229 000000
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 230 .loc 1 157 0
+ 231 019f 48837DD8 cmpq $0, -40(%rbp)
+ 231 00
+ 232 01a4 751F jne .L17
+ 233 .cfi_offset 3, -24
+ 234 01a6 488D0D00 leaq __PRETTY_FUNCTION__.6586(%rip), %rcx
+ 234 000000
+ 235 01ad BA9D0000 movl $157, %edx
+ 235 00
+ 236 01b2 488D3500 leaq .LC0(%rip), %rsi
+ 236 000000
+ 237 01b9 488D3D00 leaq .LC1(%rip), %rdi
+ 237 000000
+ 238 01c0 E8000000 call __assert_fail at PLT
+ 238 00
+ 239 .L17:
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key);
+ 240 .loc 1 158 0
+
GAS LISTING /tmp/ccq6ONvw.s page 9
+
+
+ 241 01c5 48837DD0 cmpq $0, -48(%rbp)
+ 241 00
+ 242 01ca 751F jne .L18
+ 243 01cc 488D0D00 leaq __PRETTY_FUNCTION__.6586(%rip), %rcx
+ 243 000000
+ 244 01d3 BA9E0000 movl $158, %edx
+ 244 00
+ 245 01d8 488D3500 leaq .LC0(%rip), %rsi
+ 245 000000
+ 246 01df 488D3D00 leaq .LC2(%rip), %rdi
+ 246 000000
+ 247 01e6 E8000000 call __assert_fail at PLT
+ 247 00
+ 248 .L18:
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key_bits);
+ 249 .loc 1 159 0
+ 250 01eb 837DCC00 cmpl $0, -52(%rbp)
+ 251 01ef 751F jne .L19
+ 252 01f1 488D0D00 leaq __PRETTY_FUNCTION__.6586(%rip), %rcx
+ 252 000000
+ 253 01f8 BA9F0000 movl $159, %edx
+ 253 00
+ 254 01fd 488D3500 leaq .LC0(%rip), %rsi
+ 254 000000
+ 255 0204 488D3D00 leaq .LC3(%rip), %rdi
+ 255 000000
+ 256 020b E8000000 call __assert_fail at PLT
+ 256 00
+ 257 .L19:
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 258 .loc 1 161 0
+ 259 0210 488B45D8 movq -40(%rbp), %rax
+ 260 0214 488B4048 movq 72(%rax), %rax
+ 261 0218 8B00 movl (%rax), %eax
+ 262 021a 83F801 cmpl $1, %eax
+ 263 021d 7422 je .L21
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 264 .loc 1 164 0
+ 265 021f B9A40000 movl $164, %ecx
+ 265 00
+ 266 0224 488D1500 leaq __func__.6588(%rip), %rdx
+ 266 000000
+ 267 022b 488D3500 leaq .LC0(%rip), %rsi
+ 267 000000
+ 268 0232 BF088E04 movl $-2029744632, %edi
+ 268 87
+ 269 0237 E8000000 call SetRCFileFuncLine at PLT
+ 269 00
+ 270 023c 8945EC movl %eax, -20(%rbp)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 271 .loc 1 165 0
+ 272 023f EB23 jmp .L22
+ 273 .L21:
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccq6ONvw.s page 10
+
+
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+ 274 .loc 1 168 0
+ 275 0241 488B45D8 movq -40(%rbp), %rax
+ 276 0245 488B4048 movq 72(%rax), %rax
+ 277 0249 488B5828 movq 40(%rax), %rbx
+ 278 024d 488B45D8 movq -40(%rbp), %rax
+ 279 0251 488B4020 movq 32(%rax), %rax
+ 280 0255 8B55CC movl -52(%rbp), %edx
+ 281 0258 488B4DD0 movq -48(%rbp), %rcx
+ 282 025c 4889CE movq %rcx, %rsi
+ 283 025f 4889C7 movq %rax, %rdi
+ 284 0262 FFD3 call *%rbx
+ 285 .L22:
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** user_key_bits);
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 286 .loc 1 172 0
+ 287 0264 8B45EC movl -20(%rbp), %eax
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 288 .loc 1 173 0
+ 289 0267 4883C438 addq $56, %rsp
+ 290 026b 5B popq %rbx
+ 291 026c C9 leave
+ 292 026d C3 ret
+ 293 .cfi_endproc
+ 294 .LFE512:
+ 295 .size KCipherVecSetDecryptKey, .-KCipherVecSetDecryptKey
+ 296 .section .rodata
+ 297 .LC4:
+ 298 0064 69766563 .string "ivec"
+ 298 00
+ 299 .text
+ 300 .type KCipherVecSetEncryptIvec, @function
+ 301 KCipherVecSetEncryptIvec:
+ 302 .LFB513:
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptIvec) (CIPHER_IMPL * self,
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * ivec)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 303 .loc 1 179 0
+ 304 .cfi_startproc
+ 305 026e 55 pushq %rbp
+ 306 .LCFI10:
+ 307 .cfi_def_cfa_offset 16
+ 308 026f 4889E5 movq %rsp, %rbp
+ 309 .cfi_offset 6, -16
+ 310 .LCFI11:
+ 311 .cfi_def_cfa_register 6
+ 312 0272 4883EC10 subq $16, %rsp
+ 313 0276 48897DF8 movq %rdi, -8(%rbp)
+ 314 027a 488975F0 movq %rsi, -16(%rbp)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 315 .loc 1 180 0
+
GAS LISTING /tmp/ccq6ONvw.s page 11
+
+
+ 316 027e 48837DF8 cmpq $0, -8(%rbp)
+ 316 00
+ 317 0283 751F jne .L25
+ 318 0285 488D0D00 leaq __PRETTY_FUNCTION__.6608(%rip), %rcx
+ 318 000000
+ 319 028c BAB40000 movl $180, %edx
+ 319 00
+ 320 0291 488D3500 leaq .LC0(%rip), %rsi
+ 320 000000
+ 321 0298 488D3D00 leaq .LC1(%rip), %rdi
+ 321 000000
+ 322 029f E8000000 call __assert_fail at PLT
+ 322 00
+ 323 .L25:
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (ivec);
+ 324 .loc 1 181 0
+ 325 02a4 48837DF0 cmpq $0, -16(%rbp)
+ 325 00
+ 326 02a9 751F jne .L26
+ 327 02ab 488D0D00 leaq __PRETTY_FUNCTION__.6608(%rip), %rcx
+ 327 000000
+ 328 02b2 BAB50000 movl $181, %edx
+ 328 00
+ 329 02b7 488D3500 leaq .LC0(%rip), %rsi
+ 329 000000
+ 330 02be 488D3D00 leaq .LC4(%rip), %rdi
+ 330 000000
+ 331 02c5 E8000000 call __assert_fail at PLT
+ 331 00
+ 332 .L26:
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+ 333 .loc 1 183 0
+ 334 02ca 488B45F8 movq -8(%rbp), %rax
+ 335 02ce 8B4004 movl 4(%rax), %eax
+ 336 02d1 89C2 mov %eax, %edx
+ 337 02d3 488B45F8 movq -8(%rbp), %rax
+ 338 02d7 488B4028 movq 40(%rax), %rax
+ 339 02db 488B4DF0 movq -16(%rbp), %rcx
+ 340 02df 4889CE movq %rcx, %rsi
+ 341 02e2 4889C7 movq %rax, %rdi
+ 342 02e5 E8000000 call memcpy at PLT
+ 342 00
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 343 .loc 1 185 0
+ 344 02ea B8000000 movl $0, %eax
+ 344 00
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 345 .loc 1 186 0
+ 346 02ef C9 leave
+ 347 02f0 C3 ret
+ 348 .cfi_endproc
+ 349 .LFE513:
+ 350 .size KCipherVecSetEncryptIvec, .-KCipherVecSetEncryptIvec
+ 351 .type KCipherVecSetDecryptIvec, @function
+ 352 KCipherVecSetDecryptIvec:
+
GAS LISTING /tmp/ccq6ONvw.s page 12
+
+
+ 353 .LFB514:
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptIvec) (CIPHER_IMPL * self,
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * ivec)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 354 .loc 1 192 0
+ 355 .cfi_startproc
+ 356 02f1 55 pushq %rbp
+ 357 .LCFI12:
+ 358 .cfi_def_cfa_offset 16
+ 359 02f2 4889E5 movq %rsp, %rbp
+ 360 .cfi_offset 6, -16
+ 361 .LCFI13:
+ 362 .cfi_def_cfa_register 6
+ 363 02f5 4883EC10 subq $16, %rsp
+ 364 02f9 48897DF8 movq %rdi, -8(%rbp)
+ 365 02fd 488975F0 movq %rsi, -16(%rbp)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 366 .loc 1 193 0
+ 367 0301 48837DF8 cmpq $0, -8(%rbp)
+ 367 00
+ 368 0306 751F jne .L29
+ 369 0308 488D0D00 leaq __PRETTY_FUNCTION__.6621(%rip), %rcx
+ 369 000000
+ 370 030f BAC10000 movl $193, %edx
+ 370 00
+ 371 0314 488D3500 leaq .LC0(%rip), %rsi
+ 371 000000
+ 372 031b 488D3D00 leaq .LC1(%rip), %rdi
+ 372 000000
+ 373 0322 E8000000 call __assert_fail at PLT
+ 373 00
+ 374 .L29:
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (ivec);
+ 375 .loc 1 194 0
+ 376 0327 48837DF0 cmpq $0, -16(%rbp)
+ 376 00
+ 377 032c 751F jne .L30
+ 378 032e 488D0D00 leaq __PRETTY_FUNCTION__.6621(%rip), %rcx
+ 378 000000
+ 379 0335 BAC20000 movl $194, %edx
+ 379 00
+ 380 033a 488D3500 leaq .LC0(%rip), %rsi
+ 380 000000
+ 381 0341 488D3D00 leaq .LC4(%rip), %rdi
+ 381 000000
+ 382 0348 E8000000 call __assert_fail at PLT
+ 382 00
+ 383 .L30:
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+ 384 .loc 1 196 0
+ 385 034d 488B45F8 movq -8(%rbp), %rax
+ 386 0351 8B4004 movl 4(%rax), %eax
+ 387 0354 89C2 mov %eax, %edx
+
GAS LISTING /tmp/ccq6ONvw.s page 13
+
+
+ 388 0356 488B45F8 movq -8(%rbp), %rax
+ 389 035a 488B4030 movq 48(%rax), %rax
+ 390 035e 488B4DF0 movq -16(%rbp), %rcx
+ 391 0362 4889CE movq %rcx, %rsi
+ 392 0365 4889C7 movq %rax, %rdi
+ 393 0368 E8000000 call memcpy at PLT
+ 393 00
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 394 .loc 1 198 0
+ 395 036d B8000000 movl $0, %eax
+ 395 00
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 396 .loc 1 199 0
+ 397 0372 C9 leave
+ 398 0373 C3 ret
+ 399 .cfi_endproc
+ 400 .LFE514:
+ 401 .size KCipherVecSetDecryptIvec, .-KCipherVecSetDecryptIvec
+ 402 .section .rodata
+ 403 .LC5:
+ 404 0069 66756E63 .string "func"
+ 404 00
+ 405 .text
+ 406 .type KCipherVecSetEncryptCounterFunc, @function
+ 407 KCipherVecSetEncryptCounterFunc:
+ 408 .LFB515:
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptCounterFunc) (CIPHER_IMPL * self,
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cipher_ctr_func func)
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 409 .loc 1 205 0
+ 410 .cfi_startproc
+ 411 0374 55 pushq %rbp
+ 412 .LCFI14:
+ 413 .cfi_def_cfa_offset 16
+ 414 0375 4889E5 movq %rsp, %rbp
+ 415 .cfi_offset 6, -16
+ 416 .LCFI15:
+ 417 .cfi_def_cfa_register 6
+ 418 0378 4883EC10 subq $16, %rsp
+ 419 037c 48897DF8 movq %rdi, -8(%rbp)
+ 420 0380 488975F0 movq %rsi, -16(%rbp)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 421 .loc 1 206 0
+ 422 0384 48837DF8 cmpq $0, -8(%rbp)
+ 422 00
+ 423 0389 751F jne .L33
+ 424 038b 488D0D00 leaq __PRETTY_FUNCTION__.6634(%rip), %rcx
+ 424 000000
+ 425 0392 BACE0000 movl $206, %edx
+ 425 00
+ 426 0397 488D3500 leaq .LC0(%rip), %rsi
+ 426 000000
+ 427 039e 488D3D00 leaq .LC1(%rip), %rdi
+
GAS LISTING /tmp/ccq6ONvw.s page 14
+
+
+ 427 000000
+ 428 03a5 E8000000 call __assert_fail at PLT
+ 428 00
+ 429 .L33:
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (func);
+ 430 .loc 1 207 0
+ 431 03aa 48837DF0 cmpq $0, -16(%rbp)
+ 431 00
+ 432 03af 751F jne .L34
+ 433 03b1 488D0D00 leaq __PRETTY_FUNCTION__.6634(%rip), %rcx
+ 433 000000
+ 434 03b8 BACF0000 movl $207, %edx
+ 434 00
+ 435 03bd 488D3500 leaq .LC0(%rip), %rsi
+ 435 000000
+ 436 03c4 488D3D00 leaq .LC5(%rip), %rdi
+ 436 000000
+ 437 03cb E8000000 call __assert_fail at PLT
+ 437 00
+ 438 .L34:
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->dad.encrypt_counter_func = func;
+ 439 .loc 1 209 0
+ 440 03d0 488B45F8 movq -8(%rbp), %rax
+ 441 03d4 488B55F0 movq -16(%rbp), %rdx
+ 442 03d8 48895038 movq %rdx, 56(%rax)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 443 .loc 1 211 0
+ 444 03dc B8000000 movl $0, %eax
+ 444 00
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 445 .loc 1 212 0
+ 446 03e1 C9 leave
+ 447 03e2 C3 ret
+ 448 .cfi_endproc
+ 449 .LFE515:
+ 450 .size KCipherVecSetEncryptCounterFunc, .-KCipherVecSetEncryptCounterFunc
+ 451 .type KCipherVecSetDecryptCounterFunc, @function
+ 452 KCipherVecSetDecryptCounterFunc:
+ 453 .LFB516:
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptCounterFunc) (CIPHER_IMPL * self,
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cipher_ctr_func func)
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 454 .loc 1 218 0
+ 455 .cfi_startproc
+ 456 03e3 55 pushq %rbp
+ 457 .LCFI16:
+ 458 .cfi_def_cfa_offset 16
+ 459 03e4 4889E5 movq %rsp, %rbp
+ 460 .cfi_offset 6, -16
+ 461 .LCFI17:
+ 462 .cfi_def_cfa_register 6
+ 463 03e7 4883EC10 subq $16, %rsp
+
GAS LISTING /tmp/ccq6ONvw.s page 15
+
+
+ 464 03eb 48897DF8 movq %rdi, -8(%rbp)
+ 465 03ef 488975F0 movq %rsi, -16(%rbp)
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 466 .loc 1 219 0
+ 467 03f3 48837DF8 cmpq $0, -8(%rbp)
+ 467 00
+ 468 03f8 751F jne .L37
+ 469 03fa 488D0D00 leaq __PRETTY_FUNCTION__.6644(%rip), %rcx
+ 469 000000
+ 470 0401 BADB0000 movl $219, %edx
+ 470 00
+ 471 0406 488D3500 leaq .LC0(%rip), %rsi
+ 471 000000
+ 472 040d 488D3D00 leaq .LC1(%rip), %rdi
+ 472 000000
+ 473 0414 E8000000 call __assert_fail at PLT
+ 473 00
+ 474 .L37:
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (func);
+ 475 .loc 1 220 0
+ 476 0419 48837DF0 cmpq $0, -16(%rbp)
+ 476 00
+ 477 041e 751F jne .L38
+ 478 0420 488D0D00 leaq __PRETTY_FUNCTION__.6644(%rip), %rcx
+ 478 000000
+ 479 0427 BADC0000 movl $220, %edx
+ 479 00
+ 480 042c 488D3500 leaq .LC0(%rip), %rsi
+ 480 000000
+ 481 0433 488D3D00 leaq .LC5(%rip), %rdi
+ 481 000000
+ 482 043a E8000000 call __assert_fail at PLT
+ 482 00
+ 483 .L38:
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->dad.decrypt_counter_func = func;
+ 484 .loc 1 222 0
+ 485 043f 488B45F8 movq -8(%rbp), %rax
+ 486 0443 488B55F0 movq -16(%rbp), %rdx
+ 487 0447 48895040 movq %rdx, 64(%rax)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 488 .loc 1 224 0
+ 489 044b B8000000 movl $0, %eax
+ 489 00
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 490 .loc 1 225 0
+ 491 0450 C9 leave
+ 492 0451 C3 ret
+ 493 .cfi_endproc
+ 494 .LFE516:
+ 495 .size KCipherVecSetDecryptCounterFunc, .-KCipherVecSetDecryptCounterFunc
+ 496 .type KCipherVecEncryptV1, @function
+ 497 KCipherVecEncryptV1:
+ 498 .LFB517:
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccq6ONvw.s page 16
+
+
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CMEMBER(EncryptV1)(const CIPHER_IMPL * self,
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec cv)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 499 .loc 1 230 0
+ 500 .cfi_startproc
+ 501 0452 55 pushq %rbp
+ 502 .LCFI18:
+ 503 .cfi_def_cfa_offset 16
+ 504 0453 4889E5 movq %rsp, %rbp
+ 505 .cfi_offset 6, -16
+ 506 .LCFI19:
+ 507 .cfi_def_cfa_register 6
+ 508 0456 4883EC10 subq $16, %rsp
+ 509 045a 48897DF8 movq %rdi, -8(%rbp)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return self->block_cipher->v1.encrypt (cv, self->dad.encrypt_key);
+ 510 .loc 1 231 0
+ 511 045e 488B45F8 movq -8(%rbp), %rax
+ 512 0462 488B4048 movq 72(%rax), %rax
+ 513 0466 488B5030 movq 48(%rax), %rdx
+ 514 046a 488B45F8 movq -8(%rbp), %rax
+ 515 046e 488B4018 movq 24(%rax), %rax
+ 516 0472 4889C7 movq %rax, %rdi
+ 517 0475 FFD2 call *%rdx
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 518 .loc 1 232 0
+ 519 0477 C9 leave
+ 520 0478 C3 ret
+ 521 .cfi_endproc
+ 522 .LFE517:
+ 523 .size KCipherVecEncryptV1, .-KCipherVecEncryptV1
+ 524 .type KCipherVecDecryptV1, @function
+ 525 KCipherVecDecryptV1:
+ 526 .LFB518:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CMEMBER(DecryptV1)(const CIPHER_IMPL * self,
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec cv)
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 527 .loc 1 237 0
+ 528 .cfi_startproc
+ 529 0479 55 pushq %rbp
+ 530 .LCFI20:
+ 531 .cfi_def_cfa_offset 16
+ 532 047a 4889E5 movq %rsp, %rbp
+ 533 .cfi_offset 6, -16
+ 534 .LCFI21:
+ 535 .cfi_def_cfa_register 6
+ 536 047d 4883EC10 subq $16, %rsp
+ 537 0481 48897DF8 movq %rdi, -8(%rbp)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return self->block_cipher->v1.decrypt (cv, self->dad.decrypt_key);
+ 538 .loc 1 238 0
+ 539 0485 488B45F8 movq -8(%rbp), %rax
+ 540 0489 488B4048 movq 72(%rax), %rax
+ 541 048d 488B5038 movq 56(%rax), %rdx
+ 542 0491 488B45F8 movq -8(%rbp), %rax
+ 543 0495 488B4020 movq 32(%rax), %rax
+ 544 0499 4889C7 movq %rax, %rdi
+
GAS LISTING /tmp/ccq6ONvw.s page 17
+
+
+ 545 049c FFD2 call *%rdx
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 546 .loc 1 239 0
+ 547 049e C9 leave
+ 548 049f C3 ret
+ 549 .cfi_endproc
+ 550 .LFE518:
+ 551 .size KCipherVecDecryptV1, .-KCipherVecDecryptV1
+ 552 .type KCipherVecEncryptV1Int, @function
+ 553 KCipherVecEncryptV1Int:
+ 554 .LFB519:
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(EncryptV1Int)(const CIPHER_IMPL * self,
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * in, void * out)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 555 .loc 1 244 0
+ 556 .cfi_startproc
+ 557 04a0 55 pushq %rbp
+ 558 .LCFI22:
+ 559 .cfi_def_cfa_offset 16
+ 560 04a1 4889E5 movq %rsp, %rbp
+ 561 .cfi_offset 6, -16
+ 562 .LCFI23:
+ 563 .cfi_def_cfa_register 6
+ 564 04a4 4883EC30 subq $48, %rsp
+ 565 04a8 48897DE8 movq %rdi, -24(%rbp)
+ 566 04ac 488975E0 movq %rsi, -32(%rbp)
+ 567 04b0 488955D8 movq %rdx, -40(%rbp)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn(in);
+ 568 .loc 1 247 0
+ 569 04b4 488B45E0 movq -32(%rbp), %rax
+ 570 04b8 4889C7 movq %rax, %rdi
+ 571 04bb E840FBFF call CipherVecIn
+ 571 FF
+ 572 04c0 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 572 F0
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CMEMBER(EncryptV1)(self, cv);
+ 573 .loc 1 248 0
+ 574 04c5 F30F6F45 movdqu -16(%rbp), %xmm0
+ 574 F0
+ 575 04ca 488B45E8 movq -24(%rbp), %rax
+ 576 04ce 4889C7 movq %rax, %rdi
+ 577 04d1 E87CFFFF call KCipherVecEncryptV1
+ 577 FF
+ 578 04d6 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 578 F0
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut(cv, out);
+ 579 .loc 1 249 0
+ 580 04db 488B45D8 movq -40(%rbp), %rax
+ 581 04df F30F6F45 movdqu -16(%rbp), %xmm0
+ 581 F0
+ 582 04e4 4889C7 movq %rax, %rdi
+ 583 04e7 E83FFBFF call CipherVecOut
+ 583 FF
+
GAS LISTING /tmp/ccq6ONvw.s page 18
+
+
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 584 .loc 1 250 0
+ 585 04ec B8000000 movl $0, %eax
+ 585 00
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 586 .loc 1 251 0
+ 587 04f1 C9 leave
+ 588 04f2 C3 ret
+ 589 .cfi_endproc
+ 590 .LFE519:
+ 591 .size KCipherVecEncryptV1Int, .-KCipherVecEncryptV1Int
+ 592 .type KCipherVecDecryptV1Int, @function
+ 593 KCipherVecDecryptV1Int:
+ 594 .LFB520:
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(DecryptV1Int)(const CIPHER_IMPL * self,
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * in, void * out)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 595 .loc 1 256 0
+ 596 .cfi_startproc
+ 597 04f3 55 pushq %rbp
+ 598 .LCFI24:
+ 599 .cfi_def_cfa_offset 16
+ 600 04f4 4889E5 movq %rsp, %rbp
+ 601 .cfi_offset 6, -16
+ 602 .LCFI25:
+ 603 .cfi_def_cfa_register 6
+ 604 04f7 4883EC30 subq $48, %rsp
+ 605 04fb 48897DE8 movq %rdi, -24(%rbp)
+ 606 04ff 488975E0 movq %rsi, -32(%rbp)
+ 607 0503 488955D8 movq %rdx, -40(%rbp)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn(in);
+ 608 .loc 1 259 0
+ 609 0507 488B45E0 movq -32(%rbp), %rax
+ 610 050b 4889C7 movq %rax, %rdi
+ 611 050e E8EDFAFF call CipherVecIn
+ 611 FF
+ 612 0513 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 612 F0
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CMEMBER(DecryptV1)(self, cv);
+ 613 .loc 1 260 0
+ 614 0518 F30F6F45 movdqu -16(%rbp), %xmm0
+ 614 F0
+ 615 051d 488B45E8 movq -24(%rbp), %rax
+ 616 0521 4889C7 movq %rax, %rdi
+ 617 0524 E850FFFF call KCipherVecDecryptV1
+ 617 FF
+ 618 0529 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 618 F0
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut(cv, out);
+ 619 .loc 1 261 0
+ 620 052e 488B45D8 movq -40(%rbp), %rax
+ 621 0532 F30F6F45 movdqu -16(%rbp), %xmm0
+ 621 F0
+
GAS LISTING /tmp/ccq6ONvw.s page 19
+
+
+ 622 0537 4889C7 movq %rax, %rdi
+ 623 053a E8ECFAFF call CipherVecOut
+ 623 FF
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 624 .loc 1 262 0
+ 625 053f B8000000 movl $0, %eax
+ 625 00
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 626 .loc 1 263 0
+ 627 0544 C9 leave
+ 628 0545 C3 ret
+ 629 .cfi_endproc
+ 630 .LFE520:
+ 631 .size KCipherVecDecryptV1Int, .-KCipherVecDecryptV1Int
+ 632 .type KCipherVecEncrypt, @function
+ 633 KCipherVecEncrypt:
+ 634 .LFB521:
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Encrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 635 .loc 1 267 0
+ 636 .cfi_startproc
+ 637 0546 55 pushq %rbp
+ 638 .LCFI26:
+ 639 .cfi_def_cfa_offset 16
+ 640 0547 4889E5 movq %rsp, %rbp
+ 641 .cfi_offset 6, -16
+ 642 .LCFI27:
+ 643 .cfi_def_cfa_register 6
+ 644 054a 4883EC30 subq $48, %rsp
+ 645 054e 48897DE8 movq %rdi, -24(%rbp)
+ 646 0552 488975E0 movq %rsi, -32(%rbp)
+ 647 0556 488955D8 movq %rdx, -40(%rbp)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc;
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 648 .loc 1 270 0
+ 649 055a 488B45E8 movq -24(%rbp), %rax
+ 650 055e 488B4048 movq 72(%rax), %rax
+ 651 0562 8B00 movl (%rax), %eax
+ 652 0564 83F801 cmpl $1, %eax
+ 653 0567 7422 je .L50
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 654 .loc 1 273 0
+ 655 0569 B9110100 movl $273, %ecx
+ 655 00
+ 656 056e 488D1500 leaq __func__.6694(%rip), %rdx
+ 656 000000
+ 657 0575 488D3500 leaq .LC0(%rip), %rsi
+ 657 000000
+ 658 057c BF080E09 movl $-2029449720, %edi
+ 658 87
+ 659 0581 E8000000 call SetRCFileFuncLine at PLT
+ 659 00
+
GAS LISTING /tmp/ccq6ONvw.s page 20
+
+
+ 660 0586 8945FC movl %eax, -4(%rbp)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 661 .loc 1 274 0
+ 662 0589 EB1A jmp .L51
+ 663 .L50:
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(EncryptV1Int)(self, in, out);
+ 664 .loc 1 277 0
+ 665 058b 488B55D8 movq -40(%rbp), %rdx
+ 666 058f 488B4DE0 movq -32(%rbp), %rcx
+ 667 0593 488B45E8 movq -24(%rbp), %rax
+ 668 0597 4889CE movq %rcx, %rsi
+ 669 059a 4889C7 movq %rax, %rdi
+ 670 059d E8FEFEFF call KCipherVecEncryptV1Int
+ 670 FF
+ 671 05a2 8945FC movl %eax, -4(%rbp)
+ 672 .L51:
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 673 .loc 1 281 0
+ 674 05a5 8B45FC movl -4(%rbp), %eax
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 675 .loc 1 282 0
+ 676 05a8 C9 leave
+ 677 05a9 C3 ret
+ 678 .cfi_endproc
+ 679 .LFE521:
+ 680 .size KCipherVecEncrypt, .-KCipherVecEncrypt
+ 681 .type KCipherVecDecrypt, @function
+ 682 KCipherVecDecrypt:
+ 683 .LFB522:
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Decrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 684 .loc 1 287 0
+ 685 .cfi_startproc
+ 686 05aa 55 pushq %rbp
+ 687 .LCFI28:
+ 688 .cfi_def_cfa_offset 16
+ 689 05ab 4889E5 movq %rsp, %rbp
+ 690 .cfi_offset 6, -16
+ 691 .LCFI29:
+ 692 .cfi_def_cfa_register 6
+ 693 05ae 4883EC30 subq $48, %rsp
+ 694 05b2 48897DE8 movq %rdi, -24(%rbp)
+ 695 05b6 488975E0 movq %rsi, -32(%rbp)
+ 696 05ba 488955D8 movq %rdx, -40(%rbp)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 697 .loc 1 288 0
+ 698 05be C745FC00 movl $0, -4(%rbp)
+ 698 000000
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccq6ONvw.s page 21
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 699 .loc 1 290 0
+ 700 05c5 488B45E8 movq -24(%rbp), %rax
+ 701 05c9 488B4048 movq 72(%rax), %rax
+ 702 05cd 8B00 movl (%rax), %eax
+ 703 05cf 83F801 cmpl $1, %eax
+ 704 05d2 7422 je .L55
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 705 .loc 1 293 0
+ 706 05d4 B9250100 movl $293, %ecx
+ 706 00
+ 707 05d9 488D1500 leaq __func__.6710(%rip), %rdx
+ 707 000000
+ 708 05e0 488D3500 leaq .LC0(%rip), %rsi
+ 708 000000
+ 709 05e7 BF080E09 movl $-2029449720, %edi
+ 709 87
+ 710 05ec E8000000 call SetRCFileFuncLine at PLT
+ 710 00
+ 711 05f1 8945FC movl %eax, -4(%rbp)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 712 .loc 1 294 0
+ 713 05f4 EB1A jmp .L56
+ 714 .L55:
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(DecryptV1Int)(self, in, out);
+ 715 .loc 1 297 0
+ 716 05f6 488B55D8 movq -40(%rbp), %rdx
+ 717 05fa 488B4DE0 movq -32(%rbp), %rcx
+ 718 05fe 488B45E8 movq -24(%rbp), %rax
+ 719 0602 4889CE movq %rcx, %rsi
+ 720 0605 4889C7 movq %rax, %rdi
+ 721 0608 E8E6FEFF call KCipherVecDecryptV1Int
+ 721 FF
+ 722 060d 8945FC movl %eax, -4(%rbp)
+ 723 .L56:
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 724 .loc 1 301 0
+ 725 0610 8B45FC movl -4(%rbp), %eax
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 726 .loc 1 302 0
+ 727 0613 C9 leave
+ 728 0614 C3 ret
+ 729 .cfi_endproc
+ 730 .LFE522:
+ 731 .size KCipherVecDecrypt, .-KCipherVecDecrypt
+ 732 .type KCipherVecEncryptEcb, @function
+ 733 KCipherVecEncryptEcb:
+ 734 .LFB523:
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccq6ONvw.s page 22
+
+
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ====================
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * longer runs of multiple blocks.
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * The algorithms are well defined and standard in most cases
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * These aremore or elss equivalent to class functions as they do not depend upon
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * the operation of the cipher and the algorithms are independent of anything about
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * the cipher other than its block size.
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT: plain text block
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT: cipher text block
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * EK: encryption key
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * DK: decryption key (might be sthe same as EK)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * ENC: encrypt cipher function on a block using a key
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * DEC: decrypt cipher function on a block using a key
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * IV: initialization vector - used as feedback for chaining
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * N: number used once (nonce)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * FB: feedback is the next IV in a chained/feedback mode
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * NOTE:
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * time is written. The code does not look for overlaps at this point.
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Electronic Code Book - simple cipher with no chaining feedback just iterate
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * simple encrypt/decrypt with the plain, text, cipher text and key/
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = ENC (PT,EK)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = DEC (CT,DK)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * size. Changing MAX_BLOCK_SIZE in cipher.c can up that limit without
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * causing any other compatibility issues.
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 735 .loc 1 349 0
+ 736 .cfi_startproc
+ 737 0615 55 pushq %rbp
+ 738 .LCFI30:
+ 739 .cfi_def_cfa_offset 16
+ 740 0616 4889E5 movq %rsp, %rbp
+ 741 .cfi_offset 6, -16
+ 742 .LCFI31:
+ 743 .cfi_def_cfa_register 6
+ 744 0619 4883EC30 subq $48, %rsp
+ 745 061d 48897DE8 movq %rdi, -24(%rbp)
+ 746 0621 488975E0 movq %rsi, -32(%rbp)
+
GAS LISTING /tmp/ccq6ONvw.s page 23
+
+
+ 747 0625 488955D8 movq %rdx, -40(%rbp)
+ 748 0629 894DD4 movl %ecx, -44(%rbp)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 749 .loc 1 353 0
+ 750 062c 488B45E0 movq -32(%rbp), %rax
+ 751 0630 488945F0 movq %rax, -16(%rbp)
+ 752 0634 488B45D8 movq -40(%rbp), %rax
+ 753 0638 488945F8 movq %rax, -8(%rbp)
+ 754 063c EB31 jmp .L59
+ 755 .L60:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptV1Int)(self, pin, pout);
+ 756 .loc 1 357 0
+ 757 063e 488B55F8 movq -8(%rbp), %rdx
+ 758 0642 488B4DF0 movq -16(%rbp), %rcx
+ 759 0646 488B45E8 movq -24(%rbp), %rax
+ 760 064a 4889CE movq %rcx, %rsi
+ 761 064d 4889C7 movq %rax, %rdi
+ 762 0650 E84BFEFF call KCipherVecEncryptV1Int
+ 762 FF
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 763 .loc 1 355 0
+ 764 0655 488B45E8 movq -24(%rbp), %rax
+ 765 0659 8B4004 movl 4(%rax), %eax
+ 766 065c 89C0 mov %eax, %eax
+ 767 065e 480145F0 addq %rax, -16(%rbp)
+ 768 0662 488B45E8 movq -24(%rbp), %rax
+ 769 0666 8B4004 movl 4(%rax), %eax
+ 770 0669 89C0 mov %eax, %eax
+ 771 066b 480145F8 addq %rax, -8(%rbp)
+ 772 .L59:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 773 .loc 1 354 0
+ 774 066f 837DD400 cmpl $0, -44(%rbp)
+ 775 0673 0F95C0 setne %al
+ 776 0676 836DD401 subl $1, -44(%rbp)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 777 .loc 1 353 0
+ 778 067a 84C0 testb %al, %al
+ 779 067c 75C0 jne .L60
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 780 .loc 1 359 0
+ 781 067e B8000000 movl $0, %eax
+ 781 00
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 782 .loc 1 360 0
+ 783 0683 C9 leave
+ 784 0684 C3 ret
+ 785 .cfi_endproc
+ 786 .LFE523:
+ 787 .size KCipherVecEncryptEcb, .-KCipherVecEncryptEcb
+
GAS LISTING /tmp/ccq6ONvw.s page 24
+
+
+ 788 .type KCipherVecDecryptEcb, @function
+ 789 KCipherVecDecryptEcb:
+ 790 .LFB524:
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 791 .loc 1 365 0
+ 792 .cfi_startproc
+ 793 0685 55 pushq %rbp
+ 794 .LCFI32:
+ 795 .cfi_def_cfa_offset 16
+ 796 0686 4889E5 movq %rsp, %rbp
+ 797 .cfi_offset 6, -16
+ 798 .LCFI33:
+ 799 .cfi_def_cfa_register 6
+ 800 0689 4883EC30 subq $48, %rsp
+ 801 068d 48897DE8 movq %rdi, -24(%rbp)
+ 802 0691 488975E0 movq %rsi, -32(%rbp)
+ 803 0695 488955D8 movq %rdx, -40(%rbp)
+ 804 0699 894DD4 movl %ecx, -44(%rbp)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 805 .loc 1 369 0
+ 806 069c 488B45E0 movq -32(%rbp), %rax
+ 807 06a0 488945F0 movq %rax, -16(%rbp)
+ 808 06a4 488B45D8 movq -40(%rbp), %rax
+ 809 06a8 488945F8 movq %rax, -8(%rbp)
+ 810 06ac EB31 jmp .L63
+ 811 .L64:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptV1Int)(self, pin, pout);
+ 812 .loc 1 373 0
+ 813 06ae 488B55F8 movq -8(%rbp), %rdx
+ 814 06b2 488B4DF0 movq -16(%rbp), %rcx
+ 815 06b6 488B45E8 movq -24(%rbp), %rax
+ 816 06ba 4889CE movq %rcx, %rsi
+ 817 06bd 4889C7 movq %rax, %rdi
+ 818 06c0 E82EFEFF call KCipherVecDecryptV1Int
+ 818 FF
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 819 .loc 1 371 0
+ 820 06c5 488B45E8 movq -24(%rbp), %rax
+ 821 06c9 8B4004 movl 4(%rax), %eax
+ 822 06cc 89C0 mov %eax, %eax
+ 823 06ce 480145F0 addq %rax, -16(%rbp)
+ 824 06d2 488B45E8 movq -24(%rbp), %rax
+ 825 06d6 8B4004 movl 4(%rax), %eax
+ 826 06d9 89C0 mov %eax, %eax
+ 827 06db 480145F8 addq %rax, -8(%rbp)
+ 828 .L63:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+
GAS LISTING /tmp/ccq6ONvw.s page 25
+
+
+ 829 .loc 1 370 0
+ 830 06df 837DD400 cmpl $0, -44(%rbp)
+ 831 06e3 0F95C0 setne %al
+ 832 06e6 836DD401 subl $1, -44(%rbp)
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 833 .loc 1 369 0
+ 834 06ea 84C0 testb %al, %al
+ 835 06ec 75C0 jne .L64
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 836 .loc 1 376 0
+ 837 06ee B8000000 movl $0, %eax
+ 837 00
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 838 .loc 1 377 0
+ 839 06f3 C9 leave
+ 840 06f4 C3 ret
+ 841 .cfi_endproc
+ 842 .LFE524:
+ 843 .size KCipherVecDecryptEcb, .-KCipherVecDecryptEcb
+ 844 .type KCipherVecEncryptCbc, @function
+ 845 KCipherVecEncryptCbc:
+ 846 .LFB525:
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Cipher-Block Chaining
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = (FB = ENC (PT^IV, EK))
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = DEC ((FB = CT), DK)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 847 .loc 1 387 0
+ 848 .cfi_startproc
+ 849 06f5 55 pushq %rbp
+ 850 .LCFI34:
+ 851 .cfi_def_cfa_offset 16
+ 852 06f6 4889E5 movq %rsp, %rbp
+ 853 .cfi_offset 6, -16
+ 854 .LCFI35:
+ 855 .cfi_def_cfa_register 6
+ 856 06f9 4883EC50 subq $80, %rsp
+ 857 06fd 48897DC8 movq %rdi, -56(%rbp)
+ 858 0701 488975C0 movq %rsi, -64(%rbp)
+ 859 0705 488955B8 movq %rdx, -72(%rbp)
+ 860 0709 894DB4 movl %ecx, -76(%rbp)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CipherVecIn (self->dad.encrypt_ivec);
+
GAS LISTING /tmp/ccq6ONvw.s page 26
+
+
+ 861 .loc 1 396 0
+ 862 070c 488B45C8 movq -56(%rbp), %rax
+ 863 0710 488B4028 movq 40(%rax), %rax
+ 864 0714 4889C7 movq %rax, %rdi
+ 865 0717 E8E4F8FF call CipherVecIn
+ 865 FF
+ 866 071c F30F7F45 movdqu %xmm0, -32(%rbp)
+ 866 E0
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 867 .loc 1 399 0
+ 868 0721 488B45C0 movq -64(%rbp), %rax
+ 869 0725 488945F0 movq %rax, -16(%rbp)
+ 870 0729 488B45B8 movq -72(%rbp), %rax
+ 871 072d 488945F8 movq %rax, -8(%rbp)
+ 872 0731 EB65 jmp .L67
+ 873 .L68:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 874 .loc 1 403 0
+ 875 0733 488B45F0 movq -16(%rbp), %rax
+ 876 0737 4889C7 movq %rax, %rdi
+ 877 073a E8C1F8FF call CipherVecIn
+ 877 FF
+ 878 073f F30F7F45 movdqu %xmm0, -48(%rbp)
+ 878 D0
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv ^= ivec;
+ 879 .loc 1 404 0
+ 880 0744 F30F6F45 movdqu -32(%rbp), %xmm0
+ 880 E0
+ 881 0749 F30F6F4D movdqu -48(%rbp), %xmm1
+ 881 D0
+ 882 074e 660FEFC1 pxor %xmm1, %xmm0
+ 883 0752 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 883 D0
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CMEMBER(EncryptV1)(self, cv);
+ 884 .loc 1 405 0
+ 885 0757 F30F6F45 movdqu -48(%rbp), %xmm0
+ 885 D0
+ 886 075c 488B45C8 movq -56(%rbp), %rax
+ 887 0760 4889C7 movq %rax, %rdi
+ 888 0763 E8EAFCFF call KCipherVecEncryptV1
+ 888 FF
+ 889 0768 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 889 E0
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (ivec, pout);
+ 890 .loc 1 406 0
+ 891 076d 488B45F8 movq -8(%rbp), %rax
+ 892 0771 F30F6F45 movdqu -32(%rbp), %xmm0
+ 892 E0
+ 893 0776 4889C7 movq %rax, %rdi
+ 894 0779 E8ADF8FF call CipherVecOut
+ 894 FF
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccq6ONvw.s page 27
+
+
+ 895 .loc 1 401 0
+ 896 077e 488B45C8 movq -56(%rbp), %rax
+ 897 0782 8B4004 movl 4(%rax), %eax
+ 898 0785 89C0 mov %eax, %eax
+ 899 0787 480145F0 addq %rax, -16(%rbp)
+ 900 078b 488B45C8 movq -56(%rbp), %rax
+ 901 078f 8B4004 movl 4(%rax), %eax
+ 902 0792 89C0 mov %eax, %eax
+ 903 0794 480145F8 addq %rax, -8(%rbp)
+ 904 .L67:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 905 .loc 1 400 0
+ 906 0798 837DB400 cmpl $0, -76(%rbp)
+ 907 079c 0F95C0 setne %al
+ 908 079f 836DB401 subl $1, -76(%rbp)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 909 .loc 1 399 0
+ 910 07a3 84C0 testb %al, %al
+ 911 07a5 758C jne .L68
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (ivec, self->dad.encrypt_ivec);
+ 912 .loc 1 412 0
+ 913 07a7 488B45C8 movq -56(%rbp), %rax
+ 914 07ab 488B4028 movq 40(%rax), %rax
+ 915 07af F30F6F45 movdqu -32(%rbp), %xmm0
+ 915 E0
+ 916 07b4 4889C7 movq %rax, %rdi
+ 917 07b7 E86FF8FF call CipherVecOut
+ 917 FF
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 918 .loc 1 415 0
+ 919 07bc B8000000 movl $0, %eax
+ 919 00
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 920 .loc 1 416 0
+ 921 07c1 C9 leave
+ 922 07c2 C3 ret
+ 923 .cfi_endproc
+ 924 .LFE525:
+ 925 .size KCipherVecEncryptCbc, .-KCipherVecEncryptCbc
+ 926 .type KCipherVecDecryptCbc, @function
+ 927 KCipherVecDecryptCbc:
+ 928 .LFB526:
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 929 .loc 1 421 0
+ 930 .cfi_startproc
+ 931 07c3 55 pushq %rbp
+
GAS LISTING /tmp/ccq6ONvw.s page 28
+
+
+ 932 .LCFI36:
+ 933 .cfi_def_cfa_offset 16
+ 934 07c4 4889E5 movq %rsp, %rbp
+ 935 .cfi_offset 6, -16
+ 936 .LCFI37:
+ 937 .cfi_def_cfa_register 6
+ 938 07c7 4883EC60 subq $96, %rsp
+ 939 07cb 48897DB8 movq %rdi, -72(%rbp)
+ 940 07cf 488975B0 movq %rsi, -80(%rbp)
+ 941 07d3 488955A8 movq %rdx, -88(%rbp)
+ 942 07d7 894DA4 movl %ecx, -92(%rbp)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CipherVecIn (self->dad.decrypt_ivec);
+ 943 .loc 1 427 0
+ 944 07da 488B45B8 movq -72(%rbp), %rax
+ 945 07de 488B4030 movq 48(%rax), %rax
+ 946 07e2 4889C7 movq %rax, %rdi
+ 947 07e5 E816F8FF call CipherVecIn
+ 947 FF
+ 948 07ea F30F7F45 movdqu %xmm0, -48(%rbp)
+ 948 D0
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 949 .loc 1 429 0
+ 950 07ef 488B45B0 movq -80(%rbp), %rax
+ 951 07f3 488945E0 movq %rax, -32(%rbp)
+ 952 07f7 488B45A8 movq -88(%rbp), %rax
+ 953 07fb 488945E8 movq %rax, -24(%rbp)
+ 954 07ff EB6F jmp .L71
+ 955 .L72:
+ 956 .LBB2:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec temp;
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 957 .loc 1 435 0
+ 958 0801 488B45E0 movq -32(%rbp), %rax
+ 959 0805 4889C7 movq %rax, %rdi
+ 960 0808 E8F3F7FF call CipherVecIn
+ 960 FF
+ 961 080d F30F7F45 movdqu %xmm0, -64(%rbp)
+ 961 C0
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = cv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(DecryptV1)(self, temp);
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(DecryptV1)(self, cv);
+ 962 .loc 1 440 0
+ 963 0812 F30F6F45 movdqu -64(%rbp), %xmm0
+ 963 C0
+ 964 0817 488B45B8 movq -72(%rbp), %rax
+
GAS LISTING /tmp/ccq6ONvw.s page 29
+
+
+ 965 081b 4889C7 movq %rax, %rdi
+ 966 081e E856FCFF call KCipherVecDecryptV1
+ 966 FF
+ 967 0823 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 967 F0
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp ^= ivec;
+ 968 .loc 1 442 0
+ 969 0828 F30F6F45 movdqu -48(%rbp), %xmm0
+ 969 D0
+ 970 082d F30F6F4D movdqu -16(%rbp), %xmm1
+ 970 F0
+ 971 0832 660FEFC1 pxor %xmm1, %xmm0
+ 972 0836 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 972 F0
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (temp, pout);
+ 973 .loc 1 443 0
+ 974 083b 488B45E8 movq -24(%rbp), %rax
+ 975 083f F30F6F45 movdqu -16(%rbp), %xmm0
+ 975 F0
+ 976 0844 4889C7 movq %rax, %rdi
+ 977 0847 E8DFF7FF call CipherVecOut
+ 977 FF
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = cv;
+ 978 .loc 1 444 0
+ 979 084c F30F6F45 movdqu -64(%rbp), %xmm0
+ 979 C0
+ 980 0851 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 980 D0
+ 981 .LBE2:
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 982 .loc 1 431 0
+ 983 0856 488B45B8 movq -72(%rbp), %rax
+ 984 085a 8B4004 movl 4(%rax), %eax
+ 985 085d 89C0 mov %eax, %eax
+ 986 085f 480145E0 addq %rax, -32(%rbp)
+ 987 0863 488B45B8 movq -72(%rbp), %rax
+ 988 0867 8B4004 movl 4(%rax), %eax
+ 989 086a 89C0 mov %eax, %eax
+ 990 086c 480145E8 addq %rax, -24(%rbp)
+ 991 .L71:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 992 .loc 1 430 0
+ 993 0870 837DA400 cmpl $0, -92(%rbp)
+ 994 0874 0F95C0 setne %al
+ 995 0877 836DA401 subl $1, -92(%rbp)
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 996 .loc 1 429 0
+ 997 087b 84C0 testb %al, %al
+ 998 087d 7582 jne .L72
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.decrypt_ivec = ivec;
+ 999 .loc 1 447 0
+ 1000 087f 488B45B8 movq -72(%rbp), %rax
+ 1001 0883 488B4030 movq 48(%rax), %rax
+ 1002 0887 F30F6F45 movdqu -48(%rbp), %xmm0
+
GAS LISTING /tmp/ccq6ONvw.s page 30
+
+
+ 1002 D0
+ 1003 088c F30F7F00 movdqu %xmm0, (%rax)
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1004 .loc 1 448 0
+ 1005 0890 B8000000 movl $0, %eax
+ 1005 00
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1006 .loc 1 449 0
+ 1007 0895 C9 leave
+ 1008 0896 C3 ret
+ 1009 .cfi_endproc
+ 1010 .LFE526:
+ 1011 .size KCipherVecDecryptCbc, .-KCipherVecDecryptCbc
+ 1012 .type KCipherVecEncryptPcbc, @function
+ 1013 KCipherVecEncryptPcbc:
+ 1014 .LFB527:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Propagating cipher-block chaining
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1015 .loc 1 459 0
+ 1016 .cfi_startproc
+ 1017 0897 55 pushq %rbp
+ 1018 .LCFI38:
+ 1019 .cfi_def_cfa_offset 16
+ 1020 0898 4889E5 movq %rsp, %rbp
+ 1021 .cfi_offset 6, -16
+ 1022 .LCFI39:
+ 1023 .cfi_def_cfa_register 6
+ 1024 089b 4883EC60 subq $96, %rsp
+ 1025 089f 48897DB8 movq %rdi, -72(%rbp)
+ 1026 08a3 488975B0 movq %rsi, -80(%rbp)
+ 1027 08a7 488955A8 movq %rdx, -88(%rbp)
+ 1028 08ab 894DA4 movl %ecx, -92(%rbp)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1029 .loc 1 466 0
+ 1030 08ae 488B45B8 movq -72(%rbp), %rax
+ 1031 08b2 488B4028 movq 40(%rax), %rax
+ 1032 08b6 660F6F00 movdqa (%rax), %xmm0
+ 1033 08ba F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1033 D0
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1034 .loc 1 468 0
+ 1035 08bf 488B45B0 movq -80(%rbp), %rax
+
GAS LISTING /tmp/ccq6ONvw.s page 31
+
+
+ 1036 08c3 488945E0 movq %rax, -32(%rbp)
+ 1037 08c7 488B45A8 movq -88(%rbp), %rax
+ 1038 08cb 488945E8 movq %rax, -24(%rbp)
+ 1039 08cf EB78 jmp .L75
+ 1040 .L76:
+ 1041 .LBB3:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec temp;
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1042 .loc 1 474 0
+ 1043 08d1 488B45E0 movq -32(%rbp), %rax
+ 1044 08d5 4889C7 movq %rax, %rdi
+ 1045 08d8 E823F7FF call CipherVecIn
+ 1045 FF
+ 1046 08dd F30F7F45 movdqu %xmm0, -64(%rbp)
+ 1046 C0
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = cv ^ ivec;
+ 1047 .loc 1 475 0
+ 1048 08e2 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1048 D0
+ 1049 08e7 F30F6F4D movdqu -64(%rbp), %xmm1
+ 1049 C0
+ 1050 08ec 660FEFC1 pxor %xmm1, %xmm0
+ 1051 08f0 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 1051 F0
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(EncryptV1)(self, temp);
+ 1052 .loc 1 476 0
+ 1053 08f5 F30F6F45 movdqu -16(%rbp), %xmm0
+ 1053 F0
+ 1054 08fa 488B45B8 movq -72(%rbp), %rax
+ 1055 08fe 4889C7 movq %rax, %rdi
+ 1056 0901 E84CFBFF call KCipherVecEncryptV1
+ 1056 FF
+ 1057 0906 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 1057 F0
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = cv ^ temp;
+ 1058 .loc 1 477 0
+ 1059 090b F30F6F45 movdqu -16(%rbp), %xmm0
+ 1059 F0
+ 1060 0910 F30F6F4D movdqu -64(%rbp), %xmm1
+ 1060 C0
+ 1061 0915 660FEFC1 pxor %xmm1, %xmm0
+ 1062 0919 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1062 D0
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (temp, pout);
+ 1063 .loc 1 478 0
+ 1064 091e 488B45E8 movq -24(%rbp), %rax
+ 1065 0922 F30F6F45 movdqu -16(%rbp), %xmm0
+ 1065 F0
+ 1066 0927 4889C7 movq %rax, %rdi
+ 1067 092a E8FCF6FF call CipherVecOut
+ 1067 FF
+ 1068 .LBE3:
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccq6ONvw.s page 32
+
+
+ 1069 .loc 1 470 0
+ 1070 092f 488B45B8 movq -72(%rbp), %rax
+ 1071 0933 8B4004 movl 4(%rax), %eax
+ 1072 0936 89C0 mov %eax, %eax
+ 1073 0938 480145E0 addq %rax, -32(%rbp)
+ 1074 093c 488B45B8 movq -72(%rbp), %rax
+ 1075 0940 8B4004 movl 4(%rax), %eax
+ 1076 0943 89C0 mov %eax, %eax
+ 1077 0945 480145E8 addq %rax, -24(%rbp)
+ 1078 .L75:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1079 .loc 1 469 0
+ 1080 0949 837DA400 cmpl $0, -92(%rbp)
+ 1081 094d 0F95C0 setne %al
+ 1082 0950 836DA401 subl $1, -92(%rbp)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1083 .loc 1 468 0
+ 1084 0954 84C0 testb %al, %al
+ 1085 0956 0F8575FF jne .L76
+ 1085 FFFF
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1086 .loc 1 481 0
+ 1087 095c 488B45B8 movq -72(%rbp), %rax
+ 1088 0960 488B4028 movq 40(%rax), %rax
+ 1089 0964 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1089 D0
+ 1090 0969 F30F7F00 movdqu %xmm0, (%rax)
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1091 .loc 1 483 0
+ 1092 096d B8000000 movl $0, %eax
+ 1092 00
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1093 .loc 1 487 0
+ 1094 0972 C9 leave
+ 1095 0973 C3 ret
+ 1096 .cfi_endproc
+ 1097 .LFE527:
+ 1098 .size KCipherVecEncryptPcbc, .-KCipherVecEncryptPcbc
+ 1099 .type KCipherVecDecryptPcbc, @function
+ 1100 KCipherVecDecryptPcbc:
+ 1101 .LFB528:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1102 .loc 1 492 0
+ 1103 .cfi_startproc
+ 1104 0974 55 pushq %rbp
+ 1105 .LCFI40:
+ 1106 .cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccq6ONvw.s page 33
+
+
+ 1107 0975 4889E5 movq %rsp, %rbp
+ 1108 .cfi_offset 6, -16
+ 1109 .LCFI41:
+ 1110 .cfi_def_cfa_register 6
+ 1111 0978 4883EC60 subq $96, %rsp
+ 1112 097c 48897DB8 movq %rdi, -72(%rbp)
+ 1113 0980 488975B0 movq %rsi, -80(%rbp)
+ 1114 0984 488955A8 movq %rdx, -88(%rbp)
+ 1115 0988 894DA4 movl %ecx, -92(%rbp)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1116 .loc 1 499 0
+ 1117 098b 488B45B8 movq -72(%rbp), %rax
+ 1118 098f 488B4028 movq 40(%rax), %rax
+ 1119 0993 660F6F00 movdqa (%rax), %xmm0
+ 1120 0997 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1120 D0
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1121 .loc 1 501 0
+ 1122 099c 488B45B0 movq -80(%rbp), %rax
+ 1123 09a0 488945E0 movq %rax, -32(%rbp)
+ 1124 09a4 488B45A8 movq -88(%rbp), %rax
+ 1125 09a8 488945E8 movq %rax, -24(%rbp)
+ 1126 09ac EB65 jmp .L79
+ 1127 .L80:
+ 1128 .LBB4:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec temp;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1129 .loc 1 507 0
+ 1130 09ae 488B45E0 movq -32(%rbp), %rax
+ 1131 09b2 4889C7 movq %rax, %rdi
+ 1132 09b5 E846F6FF call CipherVecIn
+ 1132 FF
+ 1133 09ba F30F7F45 movdqu %xmm0, -64(%rbp)
+ 1133 C0
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(DecryptV1)(self, cv);
+ 1134 .loc 1 508 0
+ 1135 09bf F30F6F45 movdqu -64(%rbp), %xmm0
+ 1135 C0
+ 1136 09c4 488B45B8 movq -72(%rbp), %rax
+ 1137 09c8 4889C7 movq %rax, %rdi
+ 1138 09cb E8A9FAFF call KCipherVecDecryptV1
+ 1138 FF
+ 1139 09d0 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 1139 F0
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec ^= temp;
+ 1140 .loc 1 509 0
+
GAS LISTING /tmp/ccq6ONvw.s page 34
+
+
+ 1141 09d5 F30F6F45 movdqu -16(%rbp), %xmm0
+ 1141 F0
+ 1142 09da F30F6F4D movdqu -48(%rbp), %xmm1
+ 1142 D0
+ 1143 09df 660FEFC1 pxor %xmm1, %xmm0
+ 1144 09e3 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1144 D0
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (temp, pout);
+ 1145 .loc 1 510 0
+ 1146 09e8 488B45E8 movq -24(%rbp), %rax
+ 1147 09ec F30F6F45 movdqu -16(%rbp), %xmm0
+ 1147 F0
+ 1148 09f1 4889C7 movq %rax, %rdi
+ 1149 09f4 E832F6FF call CipherVecOut
+ 1149 FF
+ 1150 .LBE4:
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1151 .loc 1 503 0
+ 1152 09f9 488B45B8 movq -72(%rbp), %rax
+ 1153 09fd 8B4004 movl 4(%rax), %eax
+ 1154 0a00 89C0 mov %eax, %eax
+ 1155 0a02 480145E0 addq %rax, -32(%rbp)
+ 1156 0a06 488B45B8 movq -72(%rbp), %rax
+ 1157 0a0a 8B4004 movl 4(%rax), %eax
+ 1158 0a0d 89C0 mov %eax, %eax
+ 1159 0a0f 480145E8 addq %rax, -24(%rbp)
+ 1160 .L79:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1161 .loc 1 502 0
+ 1162 0a13 837DA400 cmpl $0, -92(%rbp)
+ 1163 0a17 0F95C0 setne %al
+ 1164 0a1a 836DA401 subl $1, -92(%rbp)
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1165 .loc 1 501 0
+ 1166 0a1e 84C0 testb %al, %al
+ 1167 0a20 758C jne .L80
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1168 .loc 1 513 0
+ 1169 0a22 488B45B8 movq -72(%rbp), %rax
+ 1170 0a26 488B4028 movq 40(%rax), %rax
+ 1171 0a2a F30F6F45 movdqu -48(%rbp), %xmm0
+ 1171 D0
+ 1172 0a2f F30F7F00 movdqu %xmm0, (%rax)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1173 .loc 1 515 0
+ 1174 0a33 B8000000 movl $0, %eax
+ 1174 00
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1175 .loc 1 519 0
+ 1176 0a38 C9 leave
+ 1177 0a39 C3 ret
+
GAS LISTING /tmp/ccq6ONvw.s page 35
+
+
+ 1178 .cfi_endproc
+ 1179 .LFE528:
+ 1180 .size KCipherVecDecryptPcbc, .-KCipherVecDecryptPcbc
+ 1181 .type KCipherVecEncryptCfb, @function
+ 1182 KCipherVecEncryptCfb:
+ 1183 .LFB529:
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Cipher Feedback
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = (FB = PT) ^ ENC (IV, EK))
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = (FB = CT) ^ DEC (IV, DK)
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1184 .loc 1 529 0
+ 1185 .cfi_startproc
+ 1186 0a3a 55 pushq %rbp
+ 1187 .LCFI42:
+ 1188 .cfi_def_cfa_offset 16
+ 1189 0a3b 4889E5 movq %rsp, %rbp
+ 1190 .cfi_offset 6, -16
+ 1191 .LCFI43:
+ 1192 .cfi_def_cfa_register 6
+ 1193 0a3e 4883EC50 subq $80, %rsp
+ 1194 0a42 48897DC8 movq %rdi, -56(%rbp)
+ 1195 0a46 488975C0 movq %rsi, -64(%rbp)
+ 1196 0a4a 488955B8 movq %rdx, -72(%rbp)
+ 1197 0a4e 894DB4 movl %ecx, -76(%rbp)
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1198 .loc 1 536 0
+ 1199 0a51 488B45C8 movq -56(%rbp), %rax
+ 1200 0a55 488B4028 movq 40(%rax), %rax
+ 1201 0a59 660F6F00 movdqa (%rax), %xmm0
+ 1202 0a5d F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1202 E0
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1203 .loc 1 538 0
+ 1204 0a62 488B45C0 movq -64(%rbp), %rax
+ 1205 0a66 488945F0 movq %rax, -16(%rbp)
+ 1206 0a6a 488B45B8 movq -72(%rbp), %rax
+ 1207 0a6e 488945F8 movq %rax, -8(%rbp)
+ 1208 0a72 EB65 jmp .L83
+ 1209 .L84:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CMEMBER(EncryptV1)(self, ivec);
+ 1210 .loc 1 542 0
+
GAS LISTING /tmp/ccq6ONvw.s page 36
+
+
+ 1211 0a74 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1211 E0
+ 1212 0a79 488B45C8 movq -56(%rbp), %rax
+ 1213 0a7d 4889C7 movq %rax, %rdi
+ 1214 0a80 E8CDF9FF call KCipherVecEncryptV1
+ 1214 FF
+ 1215 0a85 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1215 E0
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1216 .loc 1 543 0
+ 1217 0a8a 488B45F0 movq -16(%rbp), %rax
+ 1218 0a8e 4889C7 movq %rax, %rdi
+ 1219 0a91 E86AF5FF call CipherVecIn
+ 1219 FF
+ 1220 0a96 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1220 D0
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec ^= cv;
+ 1221 .loc 1 544 0
+ 1222 0a9b F30F6F45 movdqu -48(%rbp), %xmm0
+ 1222 D0
+ 1223 0aa0 F30F6F4D movdqu -32(%rbp), %xmm1
+ 1223 E0
+ 1224 0aa5 660FEFC1 pxor %xmm1, %xmm0
+ 1225 0aa9 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1225 E0
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (ivec, pout);
+ 1226 .loc 1 545 0
+ 1227 0aae 488B45F8 movq -8(%rbp), %rax
+ 1228 0ab2 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1228 E0
+ 1229 0ab7 4889C7 movq %rax, %rdi
+ 1230 0aba E86CF5FF call CipherVecOut
+ 1230 FF
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1231 .loc 1 540 0
+ 1232 0abf 488B45C8 movq -56(%rbp), %rax
+ 1233 0ac3 8B4004 movl 4(%rax), %eax
+ 1234 0ac6 89C0 mov %eax, %eax
+ 1235 0ac8 480145F0 addq %rax, -16(%rbp)
+ 1236 0acc 488B45C8 movq -56(%rbp), %rax
+ 1237 0ad0 8B4004 movl 4(%rax), %eax
+ 1238 0ad3 89C0 mov %eax, %eax
+ 1239 0ad5 480145F8 addq %rax, -8(%rbp)
+ 1240 .L83:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1241 .loc 1 539 0
+ 1242 0ad9 837DB400 cmpl $0, -76(%rbp)
+ 1243 0add 0F95C0 setne %al
+ 1244 0ae0 836DB401 subl $1, -76(%rbp)
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1245 .loc 1 538 0
+ 1246 0ae4 84C0 testb %al, %al
+ 1247 0ae6 758C jne .L84
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1248 .loc 1 548 0
+
GAS LISTING /tmp/ccq6ONvw.s page 37
+
+
+ 1249 0ae8 488B45C8 movq -56(%rbp), %rax
+ 1250 0aec 488B4028 movq 40(%rax), %rax
+ 1251 0af0 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1251 E0
+ 1252 0af5 F30F7F00 movdqu %xmm0, (%rax)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1253 .loc 1 550 0
+ 1254 0af9 B8000000 movl $0, %eax
+ 1254 00
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1255 .loc 1 554 0
+ 1256 0afe C9 leave
+ 1257 0aff C3 ret
+ 1258 .cfi_endproc
+ 1259 .LFE529:
+ 1260 .size KCipherVecEncryptCfb, .-KCipherVecEncryptCfb
+ 1261 .type KCipherVecDecryptCfb, @function
+ 1262 KCipherVecDecryptCfb:
+ 1263 .LFB530:
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1264 .loc 1 559 0
+ 1265 .cfi_startproc
+ 1266 0b00 55 pushq %rbp
+ 1267 .LCFI44:
+ 1268 .cfi_def_cfa_offset 16
+ 1269 0b01 4889E5 movq %rsp, %rbp
+ 1270 .cfi_offset 6, -16
+ 1271 .LCFI45:
+ 1272 .cfi_def_cfa_register 6
+ 1273 0b04 4883EC50 subq $80, %rsp
+ 1274 0b08 48897DC8 movq %rdi, -56(%rbp)
+ 1275 0b0c 488975C0 movq %rsi, -64(%rbp)
+ 1276 0b10 488955B8 movq %rdx, -72(%rbp)
+ 1277 0b14 894DB4 movl %ecx, -76(%rbp)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1278 .loc 1 566 0
+ 1279 0b17 488B45C8 movq -56(%rbp), %rax
+ 1280 0b1b 488B4028 movq 40(%rax), %rax
+ 1281 0b1f 660F6F00 movdqa (%rax), %xmm0
+ 1282 0b23 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1282 E0
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+
GAS LISTING /tmp/ccq6ONvw.s page 38
+
+
+ 1283 .loc 1 568 0
+ 1284 0b28 488B45C0 movq -64(%rbp), %rax
+ 1285 0b2c 488945F0 movq %rax, -16(%rbp)
+ 1286 0b30 488B45B8 movq -72(%rbp), %rax
+ 1287 0b34 488945F8 movq %rax, -8(%rbp)
+ 1288 0b38 EB65 jmp .L87
+ 1289 .L88:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CMEMBER(EncryptV1)(self, ivec);
+ 1290 .loc 1 572 0
+ 1291 0b3a F30F6F45 movdqu -32(%rbp), %xmm0
+ 1291 E0
+ 1292 0b3f 488B45C8 movq -56(%rbp), %rax
+ 1293 0b43 4889C7 movq %rax, %rdi
+ 1294 0b46 E807F9FF call KCipherVecEncryptV1
+ 1294 FF
+ 1295 0b4b F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1295 D0
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CipherVecIn (pin);
+ 1296 .loc 1 573 0
+ 1297 0b50 488B45F0 movq -16(%rbp), %rax
+ 1298 0b54 4889C7 movq %rax, %rdi
+ 1299 0b57 E8A4F4FF call CipherVecIn
+ 1299 FF
+ 1300 0b5c F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1300 E0
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv ^= ivec;
+ 1301 .loc 1 574 0
+ 1302 0b61 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1302 E0
+ 1303 0b66 F30F6F4D movdqu -48(%rbp), %xmm1
+ 1303 D0
+ 1304 0b6b 660FEFC1 pxor %xmm1, %xmm0
+ 1305 0b6f F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1305 D0
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (cv, pout);
+ 1306 .loc 1 575 0
+ 1307 0b74 488B45F8 movq -8(%rbp), %rax
+ 1308 0b78 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1308 D0
+ 1309 0b7d 4889C7 movq %rax, %rdi
+ 1310 0b80 E8A6F4FF call CipherVecOut
+ 1310 FF
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1311 .loc 1 570 0
+ 1312 0b85 488B45C8 movq -56(%rbp), %rax
+ 1313 0b89 8B4004 movl 4(%rax), %eax
+ 1314 0b8c 89C0 mov %eax, %eax
+ 1315 0b8e 480145F0 addq %rax, -16(%rbp)
+ 1316 0b92 488B45C8 movq -56(%rbp), %rax
+ 1317 0b96 8B4004 movl 4(%rax), %eax
+ 1318 0b99 89C0 mov %eax, %eax
+ 1319 0b9b 480145F8 addq %rax, -8(%rbp)
+ 1320 .L87:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+
GAS LISTING /tmp/ccq6ONvw.s page 39
+
+
+ 1321 .loc 1 569 0
+ 1322 0b9f 837DB400 cmpl $0, -76(%rbp)
+ 1323 0ba3 0F95C0 setne %al
+ 1324 0ba6 836DB401 subl $1, -76(%rbp)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1325 .loc 1 568 0
+ 1326 0baa 84C0 testb %al, %al
+ 1327 0bac 758C jne .L88
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1328 .loc 1 578 0
+ 1329 0bae 488B45C8 movq -56(%rbp), %rax
+ 1330 0bb2 488B4028 movq 40(%rax), %rax
+ 1331 0bb6 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1331 E0
+ 1332 0bbb F30F7F00 movdqu %xmm0, (%rax)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1333 .loc 1 580 0
+ 1334 0bbf B8000000 movl $0, %eax
+ 1334 00
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1335 .loc 1 584 0
+ 1336 0bc4 C9 leave
+ 1337 0bc5 C3 ret
+ 1338 .cfi_endproc
+ 1339 .LFE530:
+ 1340 .size KCipherVecDecryptCfb, .-KCipherVecDecryptCfb
+ 1341 .type KCipherVecEncryptOfb, @function
+ 1342 KCipherVecEncryptOfb:
+ 1343 .LFB531:
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Output Feedback
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = PT ^ (FB = ENC (IV, EK))
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = CT ^ (FB = DEC (IV, DK))
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1344 .loc 1 594 0
+ 1345 .cfi_startproc
+ 1346 0bc6 55 pushq %rbp
+ 1347 .LCFI46:
+ 1348 .cfi_def_cfa_offset 16
+ 1349 0bc7 4889E5 movq %rsp, %rbp
+ 1350 .cfi_offset 6, -16
+ 1351 .LCFI47:
+ 1352 .cfi_def_cfa_register 6
+ 1353 0bca 4883EC50 subq $80, %rsp
+ 1354 0bce 48897DC8 movq %rdi, -56(%rbp)
+ 1355 0bd2 488975C0 movq %rsi, -64(%rbp)
+
GAS LISTING /tmp/ccq6ONvw.s page 40
+
+
+ 1356 0bd6 488955B8 movq %rdx, -72(%rbp)
+ 1357 0bda 894DB4 movl %ecx, -76(%rbp)
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1358 .loc 1 601 0
+ 1359 0bdd 488B45C8 movq -56(%rbp), %rax
+ 1360 0be1 488B4028 movq 40(%rax), %rax
+ 1361 0be5 660F6F00 movdqa (%rax), %xmm0
+ 1362 0be9 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1362 E0
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1363 .loc 1 603 0
+ 1364 0bee 488B45C0 movq -64(%rbp), %rax
+ 1365 0bf2 488945F0 movq %rax, -16(%rbp)
+ 1366 0bf6 488B45B8 movq -72(%rbp), %rax
+ 1367 0bfa 488945F8 movq %rax, -8(%rbp)
+ 1368 0bfe EB65 jmp .L91
+ 1369 .L92:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CMEMBER(EncryptV1)(self, ivec);
+ 1370 .loc 1 607 0
+ 1371 0c00 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1371 E0
+ 1372 0c05 488B45C8 movq -56(%rbp), %rax
+ 1373 0c09 4889C7 movq %rax, %rdi
+ 1374 0c0c E841F8FF call KCipherVecEncryptV1
+ 1374 FF
+ 1375 0c11 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1375 E0
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1376 .loc 1 608 0
+ 1377 0c16 488B45F0 movq -16(%rbp), %rax
+ 1378 0c1a 4889C7 movq %rax, %rdi
+ 1379 0c1d E8DEF3FF call CipherVecIn
+ 1379 FF
+ 1380 0c22 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1380 D0
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv ^= ivec;
+ 1381 .loc 1 609 0
+ 1382 0c27 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1382 E0
+ 1383 0c2c F30F6F4D movdqu -48(%rbp), %xmm1
+ 1383 D0
+ 1384 0c31 660FEFC1 pxor %xmm1, %xmm0
+ 1385 0c35 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1385 D0
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (cv, pout);
+ 1386 .loc 1 610 0
+ 1387 0c3a 488B45F8 movq -8(%rbp), %rax
+
GAS LISTING /tmp/ccq6ONvw.s page 41
+
+
+ 1388 0c3e F30F6F45 movdqu -48(%rbp), %xmm0
+ 1388 D0
+ 1389 0c43 4889C7 movq %rax, %rdi
+ 1390 0c46 E8E0F3FF call CipherVecOut
+ 1390 FF
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1391 .loc 1 605 0
+ 1392 0c4b 488B45C8 movq -56(%rbp), %rax
+ 1393 0c4f 8B4004 movl 4(%rax), %eax
+ 1394 0c52 89C0 mov %eax, %eax
+ 1395 0c54 480145F0 addq %rax, -16(%rbp)
+ 1396 0c58 488B45C8 movq -56(%rbp), %rax
+ 1397 0c5c 8B4004 movl 4(%rax), %eax
+ 1398 0c5f 89C0 mov %eax, %eax
+ 1399 0c61 480145F8 addq %rax, -8(%rbp)
+ 1400 .L91:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1401 .loc 1 604 0
+ 1402 0c65 837DB400 cmpl $0, -76(%rbp)
+ 1403 0c69 0F95C0 setne %al
+ 1404 0c6c 836DB401 subl $1, -76(%rbp)
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1405 .loc 1 603 0
+ 1406 0c70 84C0 testb %al, %al
+ 1407 0c72 758C jne .L92
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1408 .loc 1 613 0
+ 1409 0c74 488B45C8 movq -56(%rbp), %rax
+ 1410 0c78 488B4028 movq 40(%rax), %rax
+ 1411 0c7c F30F6F45 movdqu -32(%rbp), %xmm0
+ 1411 E0
+ 1412 0c81 F30F7F00 movdqu %xmm0, (%rax)
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1413 .loc 1 615 0
+ 1414 0c85 B8000000 movl $0, %eax
+ 1414 00
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1415 .loc 1 619 0
+ 1416 0c8a C9 leave
+ 1417 0c8b C3 ret
+ 1418 .cfi_endproc
+ 1419 .LFE531:
+ 1420 .size KCipherVecEncryptOfb, .-KCipherVecEncryptOfb
+ 1421 .type KCipherVecDecryptOfb, @function
+ 1422 KCipherVecDecryptOfb:
+ 1423 .LFB532:
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccq6ONvw.s page 42
+
+
+ 1424 .loc 1 624 0
+ 1425 .cfi_startproc
+ 1426 0c8c 55 pushq %rbp
+ 1427 .LCFI48:
+ 1428 .cfi_def_cfa_offset 16
+ 1429 0c8d 4889E5 movq %rsp, %rbp
+ 1430 .cfi_offset 6, -16
+ 1431 .LCFI49:
+ 1432 .cfi_def_cfa_register 6
+ 1433 0c90 53 pushq %rbx
+ 1434 0c91 4883EC28 subq $40, %rsp
+ 1435 0c95 48897DE8 movq %rdi, -24(%rbp)
+ 1436 0c99 488975E0 movq %rsi, -32(%rbp)
+ 1437 0c9d 488955D8 movq %rdx, -40(%rbp)
+ 1438 0ca1 894DD4 movl %ecx, -44(%rbp)
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return CMEMBER(EncryptOfb)(self, in, out, block_count);
+ 1439 .loc 1 625 0
+ 1440 0ca4 8B4DD4 movl -44(%rbp), %ecx
+ 1441 0ca7 488B55D8 movq -40(%rbp), %rdx
+ 1442 0cab 488B5DE0 movq -32(%rbp), %rbx
+ 1443 .cfi_offset 3, -24
+ 1444 0caf 488B45E8 movq -24(%rbp), %rax
+ 1445 0cb3 4889DE movq %rbx, %rsi
+ 1446 0cb6 4889C7 movq %rax, %rdi
+ 1447 0cb9 E808FFFF call KCipherVecEncryptOfb
+ 1447 FF
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1448 .loc 1 626 0
+ 1449 0cbe 4883C428 addq $40, %rsp
+ 1450 0cc2 5B popq %rbx
+ 1451 0cc3 C9 leave
+ 1452 0cc4 C3 ret
+ 1453 .cfi_endproc
+ 1454 .LFE532:
+ 1455 .size KCipherVecDecryptOfb, .-KCipherVecDecryptOfb
+ 1456 .type KCipherVecEncryptCtr, @function
+ 1457 KCipherVecEncryptCtr:
+ 1458 .LFB533:
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* Counter
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * IV is a nonce and not re-used as FB
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = PT ^ ENC (N, EK)
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = CT ^ ENC (N, DK)
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Note decrypt is encrypt.
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * nonce is a function that given an iv generates the next iv
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1459 .loc 1 638 0
+ 1460 .cfi_startproc
+ 1461 0cc5 55 pushq %rbp
+ 1462 .LCFI50:
+ 1463 .cfi_def_cfa_offset 16
+ 1464 0cc6 4889E5 movq %rsp, %rbp
+ 1465 .cfi_offset 6, -16
+
GAS LISTING /tmp/ccq6ONvw.s page 43
+
+
+ 1466 .LCFI51:
+ 1467 .cfi_def_cfa_register 6
+ 1468 0cc9 4883EC20 subq $32, %rsp
+ 1469 0ccd 48897DF8 movq %rdi, -8(%rbp)
+ 1470 0cd1 488975F0 movq %rsi, -16(%rbp)
+ 1471 0cd5 488955E8 movq %rdx, -24(%rbp)
+ 1472 0cd9 894DE4 movl %ecx, -28(%rbp)
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1473 .loc 1 639 0
+ 1474 0cdc B97F0200 movl $639, %ecx
+ 1474 00
+ 1475 0ce1 488D1500 leaq __func__.6944(%rip), %rdx
+ 1475 000000
+ 1476 0ce8 488D3500 leaq .LC0(%rip), %rsi
+ 1476 000000
+ 1477 0cef BF030509 movl $-2029452029, %edi
+ 1477 87
+ 1478 0cf4 E8000000 call SetRCFileFuncLine at PLT
+ 1478 00
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1479 .loc 1 640 0
+ 1480 0cf9 C9 leave
+ 1481 0cfa C3 ret
+ 1482 .cfi_endproc
+ 1483 .LFE533:
+ 1484 .size KCipherVecEncryptCtr, .-KCipherVecEncryptCtr
+ 1485 .type KCipherVecDecryptCtr, @function
+ 1486 KCipherVecDecryptCtr:
+ 1487 .LFB534:
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1488 .loc 1 645 0
+ 1489 .cfi_startproc
+ 1490 0cfb 55 pushq %rbp
+ 1491 .LCFI52:
+ 1492 .cfi_def_cfa_offset 16
+ 1493 0cfc 4889E5 movq %rsp, %rbp
+ 1494 .cfi_offset 6, -16
+ 1495 .LCFI53:
+ 1496 .cfi_def_cfa_register 6
+ 1497 0cff 4883EC20 subq $32, %rsp
+ 1498 0d03 48897DF8 movq %rdi, -8(%rbp)
+ 1499 0d07 488975F0 movq %rsi, -16(%rbp)
+ 1500 0d0b 488955E8 movq %rdx, -24(%rbp)
+ 1501 0d0f 894DE4 movl %ecx, -28(%rbp)
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1502 .loc 1 646 0
+ 1503 0d12 B9860200 movl $646, %ecx
+ 1503 00
+ 1504 0d17 488D1500 leaq __func__.6954(%rip), %rdx
+ 1504 000000
+ 1505 0d1e 488D3500 leaq .LC0(%rip), %rsi
+ 1505 000000
+ 1506 0d25 BF030509 movl $-2029452029, %edi
+
GAS LISTING /tmp/ccq6ONvw.s page 44
+
+
+ 1506 87
+ 1507 0d2a E8000000 call SetRCFileFuncLine at PLT
+ 1507 00
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1508 .loc 1 647 0
+ 1509 0d2f C9 leave
+ 1510 0d30 C3 ret
+ 1511 .cfi_endproc
+ 1512 .LFE534:
+ 1513 .size KCipherVecDecryptCtr, .-KCipherVecDecryptCtr
+ 1514 .section .data.rel.local,"aw", at progbits
+ 1515 .align 32
+ 1516 .type KCipherVec_vt_v1, @object
+ 1517 .size KCipherVec_vt_v1, 176
+ 1518 KCipherVec_vt_v1:
+ 1519 0000 01000000 .long 1
+ 1520 0004 00000000 .long 0
+ 1521 0008 00000000 .quad KCipherVecDestroy
+ 1521 00000000
+ 1522 0010 00000000 .quad KCipherVecSetEncryptKey
+ 1522 00000000
+ 1523 0018 00000000 .quad KCipherVecSetDecryptKey
+ 1523 00000000
+ 1524 0020 00000000 .quad KCipherVecSetEncryptIvec
+ 1524 00000000
+ 1525 0028 00000000 .quad KCipherVecSetDecryptIvec
+ 1525 00000000
+ 1526 0030 00000000 .quad KCipherVecSetEncryptCounterFunc
+ 1526 00000000
+ 1527 0038 00000000 .quad KCipherVecSetDecryptCounterFunc
+ 1527 00000000
+ 1528 0040 00000000 .quad KCipherVecEncrypt
+ 1528 00000000
+ 1529 0048 00000000 .quad KCipherVecDecrypt
+ 1529 00000000
+ 1530 0050 00000000 .quad KCipherVecEncryptEcb
+ 1530 00000000
+ 1531 0058 00000000 .quad KCipherVecDecryptEcb
+ 1531 00000000
+ 1532 0060 00000000 .quad KCipherVecEncryptCbc
+ 1532 00000000
+ 1533 0068 00000000 .quad KCipherVecDecryptCbc
+ 1533 00000000
+ 1534 0070 00000000 .quad KCipherVecEncryptPcbc
+ 1534 00000000
+ 1535 0078 00000000 .quad KCipherVecDecryptPcbc
+ 1535 00000000
+ 1536 0080 00000000 .quad KCipherVecEncryptCfb
+ 1536 00000000
+ 1537 0088 00000000 .quad KCipherVecDecryptCfb
+ 1537 00000000
+ 1538 0090 00000000 .quad KCipherVecEncryptOfb
+ 1538 00000000
+ 1539 0098 00000000 .quad KCipherVecDecryptOfb
+ 1539 00000000
+ 1540 00a0 00000000 .quad KCipherVecEncryptCtr
+ 1540 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 45
+
+
+ 1541 00a8 00000000 .quad KCipherVecDecryptCtr
+ 1541 00000000
+ 1542 .text
+ 1543 .type KCipherVecAllocAes, @function
+ 1544 KCipherVecAllocAes:
+ 1545 .LFB535:
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct KCipher_vt_v1 CMEMBER(_vt_v1) =
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** { 1, 0 },
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(Destroy),
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetEncryptKey),
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetDecryptKey),
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetEncryptIvec),
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetDecryptIvec),
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetEncryptCounterFunc),
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetDecryptCounterFunc),
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(Encrypt),
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(Decrypt),
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptEcb),
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptEcb),
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptCbc),
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptCbc),
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptPcbc),
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptPcbc),
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptCfb),
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptCfb),
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptOfb),
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptOfb),
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptCtr),
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptCtr)
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocAes)(CIPHER_IMPL ** pobj,
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1546 .loc 1 681 0
+ 1547 .cfi_startproc
+ 1548 0d31 55 pushq %rbp
+ 1549 .LCFI54:
+ 1550 .cfi_def_cfa_offset 16
+ 1551 0d32 4889E5 movq %rsp, %rbp
+ 1552 .cfi_offset 6, -16
+ 1553 .LCFI55:
+ 1554 .cfi_def_cfa_register 6
+ 1555 0d35 4883EC20 subq $32, %rsp
+ 1556 0d39 48897DE8 movq %rdi, -24(%rbp)
+ 1557 0d3d 488975E0 movq %rsi, -32(%rbp)
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherAes * obj;
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** obj = calloc (1, sizeof (*obj));
+ 1558 .loc 1 684 0
+ 1559 0d41 BE700200 movl $624, %esi
+
GAS LISTING /tmp/ccq6ONvw.s page 46
+
+
+ 1559 00
+ 1560 0d46 BF010000 movl $1, %edi
+ 1560 00
+ 1561 0d4b E8000000 call calloc at PLT
+ 1561 00
+ 1562 0d50 488945F8 movq %rax, -8(%rbp)
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *pobj = (CIPHER_IMPL*)obj;
+ 1563 .loc 1 685 0
+ 1564 0d54 488B55F8 movq -8(%rbp), %rdx
+ 1565 0d58 488B45E8 movq -24(%rbp), %rax
+ 1566 0d5c 488910 movq %rdx, (%rax)
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1567 .loc 1 687 0
+ 1568 0d5f 48837DF8 cmpq $0, -8(%rbp)
+ 1568 00
+ 1569 0d64 751F jne .L101
+ 1570 0d66 B9AF0200 movl $687, %ecx
+ 1570 00
+ 1571 0d6b 488D1500 leaq __func__.6964(%rip), %rdx
+ 1571 000000
+ 1572 0d72 488D3500 leaq .LC0(%rip), %rsi
+ 1572 000000
+ 1573 0d79 BF539000 movl $-2030006189, %edi
+ 1573 87
+ 1574 0d7e E8000000 call SetRCFileFuncLine at PLT
+ 1574 00
+ 1575 0d83 EB05 jmp .L102
+ 1576 .L101:
+ 1577 0d85 B8000000 movl $0, %eax
+ 1577 00
+ 1578 .L102:
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1579 .loc 1 688 0
+ 1580 0d8a C9 leave
+ 1581 0d8b C3 ret
+ 1582 .cfi_endproc
+ 1583 .LFE535:
+ 1584 .size KCipherVecAllocAes, .-KCipherVecAllocAes
+ 1585 .type KCipherVecInitAes, @function
+ 1586 KCipherVecInitAes:
+ 1587 .LFB536:
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitAes) (CIPHER_IMPL * self,
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1588 .loc 1 694 0
+ 1589 .cfi_startproc
+ 1590 0d8c 55 pushq %rbp
+ 1591 .LCFI56:
+ 1592 .cfi_def_cfa_offset 16
+ 1593 0d8d 4889E5 movq %rsp, %rbp
+ 1594 .cfi_offset 6, -16
+ 1595 .LCFI57:
+ 1596 .cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccq6ONvw.s page 47
+
+
+ 1597 0d90 4883EC20 subq $32, %rsp
+ 1598 0d94 48897DE8 movq %rdi, -24(%rbp)
+ 1599 0d98 488975E0 movq %rsi, -32(%rbp)
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipher * dad = &self->dad;
+ 1600 .loc 1 695 0
+ 1601 0d9c 488B45E8 movq -24(%rbp), %rax
+ 1602 0da0 488945F0 movq %rax, -16(%rbp)
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherAes * aes = (struct CipherAes*)self;
+ 1603 .loc 1 696 0
+ 1604 0da4 488B45E8 movq -24(%rbp), %rax
+ 1605 0da8 488945F8 movq %rax, -8(%rbp)
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipherInit (dad, sizeof (CipherVec),
+ 1606 .loc 1 698 0
+ 1607 0dac 488B45F0 movq -16(%rbp), %rax
+ 1608 0db0 488B1500 movq KCipherVecClassName at GOTPCREL(%rip), %rdx
+ 1608 000000
+ 1609 0db7 4889D1 movq %rdx, %rcx
+ 1610 0dba 488D1500 leaq KCipherVec_vt_v1(%rip), %rdx
+ 1610 000000
+ 1611 0dc1 BE100000 movl $16, %esi
+ 1611 00
+ 1612 0dc6 4889C7 movq %rax, %rdi
+ 1613 0dc9 E8000000 call KCipherInit at PLT
+ 1613 00
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(ClassName));
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_key = &aes->e_key;
+ 1614 .loc 1 702 0
+ 1615 0dce 488B45F8 movq -8(%rbp), %rax
+ 1616 0dd2 488D5050 leaq 80(%rax), %rdx
+ 1617 0dd6 488B45F0 movq -16(%rbp), %rax
+ 1618 0dda 48895018 movq %rdx, 24(%rax)
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_key = &aes->d_key;
+ 1619 .loc 1 703 0
+ 1620 0dde 488B45F8 movq -8(%rbp), %rax
+ 1621 0de2 488D9050 leaq 336(%rax), %rdx
+ 1621 010000
+ 1622 0de9 488B45F0 movq -16(%rbp), %rax
+ 1623 0ded 48895020 movq %rdx, 32(%rax)
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_ivec = &aes->e_ivec;
+ 1624 .loc 1 704 0
+ 1625 0df1 488B45F8 movq -8(%rbp), %rax
+ 1626 0df5 488D9050 leaq 592(%rax), %rdx
+ 1626 020000
+ 1627 0dfc 488B45F0 movq -16(%rbp), %rax
+ 1628 0e00 48895028 movq %rdx, 40(%rax)
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_ivec = &aes->d_ivec;
+ 1629 .loc 1 705 0
+ 1630 0e04 488B45F8 movq -8(%rbp), %rax
+ 1631 0e08 488D9060 leaq 608(%rax), %rdx
+ 1631 020000
+ 1632 0e0f 488B45F0 movq -16(%rbp), %rax
+ 1633 0e13 48895030 movq %rdx, 48(%rax)
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher = &block_cipher->vec;
+
GAS LISTING /tmp/ccq6ONvw.s page 48
+
+
+ 1634 .loc 1 707 0
+ 1635 0e17 488B55E0 movq -32(%rbp), %rdx
+ 1636 0e1b 488B45E8 movq -24(%rbp), %rax
+ 1637 0e1f 48895048 movq %rdx, 72(%rax)
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1638 .loc 1 709 0
+ 1639 0e23 B8000000 movl $0, %eax
+ 1639 00
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1640 .loc 1 710 0
+ 1641 0e28 C9 leave
+ 1642 0e29 C3 ret
+ 1643 .cfi_endproc
+ 1644 .LFE536:
+ 1645 .size KCipherVecInitAes, .-KCipherVecInitAes
+ 1646 .type KCipherVecAllocNull, @function
+ 1647 KCipherVecAllocNull:
+ 1648 .LFB537:
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocNull)(CIPHER_IMPL ** pobj,
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1649 .loc 1 716 0
+ 1650 .cfi_startproc
+ 1651 0e2a 55 pushq %rbp
+ 1652 .LCFI58:
+ 1653 .cfi_def_cfa_offset 16
+ 1654 0e2b 4889E5 movq %rsp, %rbp
+ 1655 .cfi_offset 6, -16
+ 1656 .LCFI59:
+ 1657 .cfi_def_cfa_register 6
+ 1658 0e2e 4883EC20 subq $32, %rsp
+ 1659 0e32 48897DE8 movq %rdi, -24(%rbp)
+ 1660 0e36 488975E0 movq %rsi, -32(%rbp)
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherNull * obj;
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** obj = calloc (1, sizeof (*obj));
+ 1661 .loc 1 719 0
+ 1662 0e3a BE700000 movl $112, %esi
+ 1662 00
+ 1663 0e3f BF010000 movl $1, %edi
+ 1663 00
+ 1664 0e44 E8000000 call calloc at PLT
+ 1664 00
+ 1665 0e49 488945F8 movq %rax, -8(%rbp)
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *pobj = (CIPHER_IMPL*)obj;
+ 1666 .loc 1 720 0
+ 1667 0e4d 488B55F8 movq -8(%rbp), %rdx
+ 1668 0e51 488B45E8 movq -24(%rbp), %rax
+ 1669 0e55 488910 movq %rdx, (%rax)
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1670 .loc 1 722 0
+ 1671 0e58 48837DF8 cmpq $0, -8(%rbp)
+
GAS LISTING /tmp/ccq6ONvw.s page 49
+
+
+ 1671 00
+ 1672 0e5d 751F jne .L107
+ 1673 0e5f B9D20200 movl $722, %ecx
+ 1673 00
+ 1674 0e64 488D1500 leaq __func__.6991(%rip), %rdx
+ 1674 000000
+ 1675 0e6b 488D3500 leaq .LC0(%rip), %rsi
+ 1675 000000
+ 1676 0e72 BF539000 movl $-2030006189, %edi
+ 1676 87
+ 1677 0e77 E8000000 call SetRCFileFuncLine at PLT
+ 1677 00
+ 1678 0e7c EB05 jmp .L108
+ 1679 .L107:
+ 1680 0e7e B8000000 movl $0, %eax
+ 1680 00
+ 1681 .L108:
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1682 .loc 1 723 0
+ 1683 0e83 C9 leave
+ 1684 0e84 C3 ret
+ 1685 .cfi_endproc
+ 1686 .LFE537:
+ 1687 .size KCipherVecAllocNull, .-KCipherVecAllocNull
+ 1688 .type KCipherVecInitNull, @function
+ 1689 KCipherVecInitNull:
+ 1690 .LFB538:
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitNull) (CIPHER_IMPL * self,
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1691 .loc 1 729 0
+ 1692 .cfi_startproc
+ 1693 0e85 55 pushq %rbp
+ 1694 .LCFI60:
+ 1695 .cfi_def_cfa_offset 16
+ 1696 0e86 4889E5 movq %rsp, %rbp
+ 1697 .cfi_offset 6, -16
+ 1698 .LCFI61:
+ 1699 .cfi_def_cfa_register 6
+ 1700 0e89 4883EC20 subq $32, %rsp
+ 1701 0e8d 48897DE8 movq %rdi, -24(%rbp)
+ 1702 0e91 488975E0 movq %rsi, -32(%rbp)
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipher * dad = &self->dad;
+ 1703 .loc 1 730 0
+ 1704 0e95 488B45E8 movq -24(%rbp), %rax
+ 1705 0e99 488945F0 movq %rax, -16(%rbp)
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherNull * null = (CipherNull*)self;
+ 1706 .loc 1 731 0
+ 1707 0e9d 488B45E8 movq -24(%rbp), %rax
+ 1708 0ea1 488945F8 movq %rax, -8(%rbp)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipherInit (dad, sizeof (CipherVec),
+ 1709 .loc 1 733 0
+ 1710 0ea5 488B45F0 movq -16(%rbp), %rax
+
GAS LISTING /tmp/ccq6ONvw.s page 50
+
+
+ 1711 0ea9 488B1500 movq KCipherVecClassName at GOTPCREL(%rip), %rdx
+ 1711 000000
+ 1712 0eb0 4889D1 movq %rdx, %rcx
+ 1713 0eb3 488D1500 leaq KCipherVec_vt_v1(%rip), %rdx
+ 1713 000000
+ 1714 0eba BE100000 movl $16, %esi
+ 1714 00
+ 1715 0ebf 4889C7 movq %rax, %rdi
+ 1716 0ec2 E8000000 call KCipherInit at PLT
+ 1716 00
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(ClassName));
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_key = &null->e_ivec;
+ 1717 .loc 1 737 0
+ 1718 0ec7 488B45F8 movq -8(%rbp), %rax
+ 1719 0ecb 488D5050 leaq 80(%rax), %rdx
+ 1720 0ecf 488B45F0 movq -16(%rbp), %rax
+ 1721 0ed3 48895018 movq %rdx, 24(%rax)
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_key = &null->d_ivec;
+ 1722 .loc 1 738 0
+ 1723 0ed7 488B45F8 movq -8(%rbp), %rax
+ 1724 0edb 488D5060 leaq 96(%rax), %rdx
+ 1725 0edf 488B45F0 movq -16(%rbp), %rax
+ 1726 0ee3 48895020 movq %rdx, 32(%rax)
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_ivec = &null->e_ivec;
+ 1727 .loc 1 739 0
+ 1728 0ee7 488B45F8 movq -8(%rbp), %rax
+ 1729 0eeb 488D5050 leaq 80(%rax), %rdx
+ 1730 0eef 488B45F0 movq -16(%rbp), %rax
+ 1731 0ef3 48895028 movq %rdx, 40(%rax)
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_ivec = &null->d_ivec;
+ 1732 .loc 1 740 0
+ 1733 0ef7 488B45F8 movq -8(%rbp), %rax
+ 1734 0efb 488D5060 leaq 96(%rax), %rdx
+ 1735 0eff 488B45F0 movq -16(%rbp), %rax
+ 1736 0f03 48895030 movq %rdx, 48(%rax)
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher = &block_cipher->vec;
+ 1737 .loc 1 742 0
+ 1738 0f07 488B55E0 movq -32(%rbp), %rdx
+ 1739 0f0b 488B45E8 movq -24(%rbp), %rax
+ 1740 0f0f 48895048 movq %rdx, 72(%rax)
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1741 .loc 1 744 0
+ 1742 0f13 B8000000 movl $0, %eax
+ 1742 00
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1743 .loc 1 745 0
+ 1744 0f18 C9 leave
+ 1745 0f19 C3 ret
+ 1746 .cfi_endproc
+ 1747 .LFE538:
+ 1748 .size KCipherVecInitNull, .-KCipherVecInitNull
+ 1749 .globl KCipherVecMake
+ 1750 .type KCipherVecMake, @function
+
GAS LISTING /tmp/ccq6ONvw.s page 51
+
+
+ 1751 KCipherVecMake:
+ 1752 .LFB539:
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1753 .loc 1 749 0
+ 1754 .cfi_startproc
+ 1755 0f1a 55 pushq %rbp
+ 1756 .LCFI62:
+ 1757 .cfi_def_cfa_offset 16
+ 1758 0f1b 4889E5 movq %rsp, %rbp
+ 1759 .cfi_offset 6, -16
+ 1760 .LCFI63:
+ 1761 .cfi_def_cfa_register 6
+ 1762 0f1e 4883EC30 subq $48, %rsp
+ 1763 0f22 48897DD8 movq %rdi, -40(%rbp)
+ 1764 0f26 8975D4 movl %esi, -44(%rbp)
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc;
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KBlockCipher * block_cipher;
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (new_obj == NULL)
+ 1765 .loc 1 753 0
+ 1766 0f29 48837DD8 cmpq $0, -40(%rbp)
+ 1766 00
+ 1767 0f2e 7522 jne .L113
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+ 1768 .loc 1 754 0
+ 1769 0f30 B9F20200 movl $754, %ecx
+ 1769 00
+ 1770 0f35 488D1500 leaq __func__.7019(%rip), %rdx
+ 1770 000000
+ 1771 0f3c 488D3500 leaq .LC0(%rip), %rsi
+ 1771 000000
+ 1772 0f43 BF878F00 movl $-2030006393, %edi
+ 1772 87
+ 1773 0f48 E8000000 call SetRCFileFuncLine at PLT
+ 1773 00
+ 1774 0f4d E9280100 jmp .L114
+ 1774 00
+ 1775 .L113:
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *new_obj = NULL;
+ 1776 .loc 1 756 0
+ 1777 0f52 488B45D8 movq -40(%rbp), %rax
+ 1778 0f56 48C70000 movq $0, (%rax)
+ 1778 000000
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (type)
+ 1779 .loc 1 758 0
+ 1780 0f5d 8B45D4 movl -44(%rbp), %eax
+ 1781 0f60 85C0 testl %eax, %eax
+ 1782 0f62 7427 je .L116
+ 1783 0f64 83F801 cmpl $1, %eax
+ 1784 0f67 7433 je .L117
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+
GAS LISTING /tmp/ccq6ONvw.s page 52
+
+
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+ 1785 .loc 1 761 0
+ 1786 0f69 B9F90200 movl $761, %ecx
+ 1786 00
+ 1787 0f6e 488D1500 leaq __func__.7019(%rip), %rdx
+ 1787 000000
+ 1788 0f75 488D3500 leaq .LC0(%rip), %rsi
+ 1788 000000
+ 1789 0f7c BFCA8F00 movl $-2030006326, %edi
+ 1789 87
+ 1790 0f81 E8000000 call SetRCFileFuncLine at PLT
+ 1790 00
+ 1791 0f86 E9EF0000 jmp .L114
+ 1791 00
+ 1792 .L116:
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_null:
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = NULLBCMEMBER(Make)(&block_cipher);
+ 1793 .loc 1 764 0
+ 1794 0f8b 488D45F0 leaq -16(%rbp), %rax
+ 1795 0f8f 4889C7 movq %rax, %rdi
+ 1796 0f92 E8000000 call KNullBlockCipherVecMake at PLT
+ 1796 00
+ 1797 0f97 8945FC movl %eax, -4(%rbp)
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 1798 .loc 1 765 0
+ 1799 0f9a EB0F jmp .L118
+ 1800 .L117:
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_AES:
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = AESBCMEMBER(Make)(&block_cipher);
+ 1801 .loc 1 768 0
+ 1802 0f9c 488D45F0 leaq -16(%rbp), %rax
+ 1803 0fa0 4889C7 movq %rax, %rdi
+ 1804 0fa3 E8000000 call KAESBlockCipherVecMake at PLT
+ 1804 00
+ 1805 0fa8 8945FC movl %eax, -4(%rbp)
+ 1806 .L118:
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1807 .loc 1 772 0
+ 1808 0fab 837DFC00 cmpl $0, -4(%rbp)
+ 1809 0faf 0F85C200 jne .L119
+ 1809 0000
+ 1810 .LBB5:
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CIPHER_IMPL * obj;
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (type)
+ 1811 .loc 1 776 0
+ 1812 0fb5 8B45D4 movl -44(%rbp), %eax
+ 1813 0fb8 85C0 testl %eax, %eax
+ 1814 0fba 740A je .L120
+ 1815 0fbc 83F801 cmpl $1, %eax
+ 1816 0fbf 745F je .L121
+
GAS LISTING /tmp/ccq6ONvw.s page 53
+
+
+ 1817 0fc1 E9B10000 jmp .L119
+ 1817 00
+ 1818 .L120:
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_null:
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(AllocNull) (&obj, block_cipher);
+ 1819 .loc 1 779 0
+ 1820 0fc6 488B55F0 movq -16(%rbp), %rdx
+ 1821 0fca 488D45E8 leaq -24(%rbp), %rax
+ 1822 0fce 4889D6 movq %rdx, %rsi
+ 1823 0fd1 4889C7 movq %rax, %rdi
+ 1824 0fd4 E851FEFF call KCipherVecAllocNull
+ 1824 FF
+ 1825 0fd9 8945FC movl %eax, -4(%rbp)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1826 .loc 1 780 0
+ 1827 0fdc 837DFC00 cmpl $0, -4(%rbp)
+ 1828 0fe0 0F859000 jne .L126
+ 1828 0000
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(InitNull) (obj, block_cipher);
+ 1829 .loc 1 782 0
+ 1830 0fe6 488B55F0 movq -16(%rbp), %rdx
+ 1831 0fea 488B45E8 movq -24(%rbp), %rax
+ 1832 0fee 4889D6 movq %rdx, %rsi
+ 1833 0ff1 4889C7 movq %rax, %rdi
+ 1834 0ff4 E88CFEFF call KCipherVecInitNull
+ 1834 FF
+ 1835 0ff9 8945FC movl %eax, -4(%rbp)
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1836 .loc 1 783 0
+ 1837 0ffc 837DFC00 cmpl $0, -4(%rbp)
+ 1838 1000 7510 jne .L123
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *new_obj = (KCipher*)obj;
+ 1839 .loc 1 784 0
+ 1840 1002 488B45E8 movq -24(%rbp), %rax
+ 1841 1006 4889C2 movq %rax, %rdx
+ 1842 1009 488B45D8 movq -40(%rbp), %rax
+ 1843 100d 488910 movq %rdx, (%rax)
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** else
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (obj);
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 1844 .loc 1 788 0
+ 1845 1010 EB65 jmp .L119
+ 1846 .L123:
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (obj);
+ 1847 .loc 1 786 0
+ 1848 1012 488B45E8 movq -24(%rbp), %rax
+ 1849 1016 4889C7 movq %rax, %rdi
+ 1850 1019 E8000000 call free at PLT
+ 1850 00
+ 1851 .loc 1 788 0
+ 1852 101e EB57 jmp .L119
+ 1853 .L121:
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_AES:
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(AllocAes) (&obj, block_cipher);
+
GAS LISTING /tmp/ccq6ONvw.s page 54
+
+
+ 1854 .loc 1 790 0
+ 1855 1020 488B55F0 movq -16(%rbp), %rdx
+ 1856 1024 488D45E8 leaq -24(%rbp), %rax
+ 1857 1028 4889D6 movq %rdx, %rsi
+ 1858 102b 4889C7 movq %rax, %rdi
+ 1859 102e E8FEFCFF call KCipherVecAllocAes
+ 1859 FF
+ 1860 1033 8945FC movl %eax, -4(%rbp)
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1861 .loc 1 791 0
+ 1862 1036 837DFC00 cmpl $0, -4(%rbp)
+ 1863 103a 753B jne .L119
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(InitAes) (obj, block_cipher);
+ 1864 .loc 1 793 0
+ 1865 103c 488B55F0 movq -16(%rbp), %rdx
+ 1866 1040 488B45E8 movq -24(%rbp), %rax
+ 1867 1044 4889D6 movq %rdx, %rsi
+ 1868 1047 4889C7 movq %rax, %rdi
+ 1869 104a E83DFDFF call KCipherVecInitAes
+ 1869 FF
+ 1870 104f 8945FC movl %eax, -4(%rbp)
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1871 .loc 1 794 0
+ 1872 1052 837DFC00 cmpl $0, -4(%rbp)
+ 1873 1056 7510 jne .L124
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *new_obj = (KCipher*)obj;
+ 1874 .loc 1 795 0
+ 1875 1058 488B45E8 movq -24(%rbp), %rax
+ 1876 105c 4889C2 movq %rax, %rdx
+ 1877 105f 488B45D8 movq -40(%rbp), %rax
+ 1878 1063 488910 movq %rdx, (%rax)
+ 1879 1066 EB0F jmp .L119
+ 1880 .L124:
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** else
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (obj);
+ 1881 .loc 1 797 0
+ 1882 1068 488B45E8 movq -24(%rbp), %rax
+ 1883 106c 4889C7 movq %rax, %rdi
+ 1884 106f E8000000 call free at PLT
+ 1884 00
+ 1885 1074 EB01 jmp .L119
+ 1886 .L126:
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 1887 .loc 1 788 0
+ 1888 1076 90 nop
+ 1889 .L119:
+ 1890 .LBE5:
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* can't really get here */
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 1891 .loc 1 804 0
+ 1892 1077 8B45FC movl -4(%rbp), %eax
+
GAS LISTING /tmp/ccq6ONvw.s page 55
+
+
+ 1893 .L114:
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1894 .loc 1 805 0
+ 1895 107a C9 leave
+ 1896 107b C3 ret
+ 1897 .cfi_endproc
+ 1898 .LFE539:
+ 1899 .size KCipherVecMake, .-KCipherVecMake
+ 1900 .section .rodata
+ 1901 .type __func__.7019, @object
+ 1902 .size __func__.7019, 15
+ 1903 __func__.7019:
+ 1904 006e 4B436970 .string "KCipherVecMake"
+ 1904 68657256
+ 1904 65634D61
+ 1904 6B6500
+ 1905 .type __PRETTY_FUNCTION__.7018, @object
+ 1906 .size __PRETTY_FUNCTION__.7018, 15
+ 1907 __PRETTY_FUNCTION__.7018:
+ 1908 007d 4B436970 .string "KCipherVecMake"
+ 1908 68657256
+ 1908 65634D61
+ 1908 6B6500
+ 1909 008c 00000000 .align 16
+ 1910 .type __func__.6991, @object
+ 1911 .size __func__.6991, 20
+ 1912 __func__.6991:
+ 1913 0090 4B436970 .string "KCipherVecAllocNull"
+ 1913 68657256
+ 1913 6563416C
+ 1913 6C6F634E
+ 1913 756C6C00
+ 1914 00a4 00000000 .align 16
+ 1914 00000000
+ 1914 00000000
+ 1915 .type __PRETTY_FUNCTION__.6990, @object
+ 1916 .size __PRETTY_FUNCTION__.6990, 20
+ 1917 __PRETTY_FUNCTION__.6990:
+ 1918 00b0 4B436970 .string "KCipherVecAllocNull"
+ 1918 68657256
+ 1918 6563416C
+ 1918 6C6F634E
+ 1918 756C6C00
+ 1919 00c4 00000000 .align 16
+ 1919 00000000
+ 1919 00000000
+ 1920 .type __func__.6964, @object
+ 1921 .size __func__.6964, 19
+ 1922 __func__.6964:
+ 1923 00d0 4B436970 .string "KCipherVecAllocAes"
+ 1923 68657256
+ 1923 6563416C
+ 1923 6C6F6341
+ 1923 657300
+ 1924 00e3 00000000 .align 16
+ 1924 00000000
+ 1924 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 56
+
+
+ 1924 00
+ 1925 .type __PRETTY_FUNCTION__.6963, @object
+ 1926 .size __PRETTY_FUNCTION__.6963, 19
+ 1927 __PRETTY_FUNCTION__.6963:
+ 1928 00f0 4B436970 .string "KCipherVecAllocAes"
+ 1928 68657256
+ 1928 6563416C
+ 1928 6C6F6341
+ 1928 657300
+ 1929 0103 00000000 .align 16
+ 1929 00000000
+ 1929 00000000
+ 1929 00
+ 1930 .type __func__.6954, @object
+ 1931 .size __func__.6954, 21
+ 1932 __func__.6954:
+ 1933 0110 4B436970 .string "KCipherVecDecryptCtr"
+ 1933 68657256
+ 1933 65634465
+ 1933 63727970
+ 1933 74437472
+ 1934 0125 00000000 .align 16
+ 1934 00000000
+ 1934 000000
+ 1935 .type __PRETTY_FUNCTION__.6953, @object
+ 1936 .size __PRETTY_FUNCTION__.6953, 21
+ 1937 __PRETTY_FUNCTION__.6953:
+ 1938 0130 4B436970 .string "KCipherVecDecryptCtr"
+ 1938 68657256
+ 1938 65634465
+ 1938 63727970
+ 1938 74437472
+ 1939 0145 00000000 .align 16
+ 1939 00000000
+ 1939 000000
+ 1940 .type __func__.6944, @object
+ 1941 .size __func__.6944, 21
+ 1942 __func__.6944:
+ 1943 0150 4B436970 .string "KCipherVecEncryptCtr"
+ 1943 68657256
+ 1943 6563456E
+ 1943 63727970
+ 1943 74437472
+ 1944 0165 00000000 .align 16
+ 1944 00000000
+ 1944 000000
+ 1945 .type __PRETTY_FUNCTION__.6943, @object
+ 1946 .size __PRETTY_FUNCTION__.6943, 21
+ 1947 __PRETTY_FUNCTION__.6943:
+ 1948 0170 4B436970 .string "KCipherVecEncryptCtr"
+ 1948 68657256
+ 1948 6563456E
+ 1948 63727970
+ 1948 74437472
+ 1949 0185 00000000 .align 16
+ 1949 00000000
+ 1949 000000
+
GAS LISTING /tmp/ccq6ONvw.s page 57
+
+
+ 1950 .type __func__.6710, @object
+ 1951 .size __func__.6710, 18
+ 1952 __func__.6710:
+ 1953 0190 4B436970 .string "KCipherVecDecrypt"
+ 1953 68657256
+ 1953 65634465
+ 1953 63727970
+ 1953 7400
+ 1954 01a2 00000000 .align 16
+ 1954 00000000
+ 1954 00000000
+ 1954 0000
+ 1955 .type __PRETTY_FUNCTION__.6709, @object
+ 1956 .size __PRETTY_FUNCTION__.6709, 18
+ 1957 __PRETTY_FUNCTION__.6709:
+ 1958 01b0 4B436970 .string "KCipherVecDecrypt"
+ 1958 68657256
+ 1958 65634465
+ 1958 63727970
+ 1958 7400
+ 1959 01c2 00000000 .align 16
+ 1959 00000000
+ 1959 00000000
+ 1959 0000
+ 1960 .type __func__.6694, @object
+ 1961 .size __func__.6694, 18
+ 1962 __func__.6694:
+ 1963 01d0 4B436970 .string "KCipherVecEncrypt"
+ 1963 68657256
+ 1963 6563456E
+ 1963 63727970
+ 1963 7400
+ 1964 01e2 00000000 .align 16
+ 1964 00000000
+ 1964 00000000
+ 1964 0000
+ 1965 .type __PRETTY_FUNCTION__.6693, @object
+ 1966 .size __PRETTY_FUNCTION__.6693, 18
+ 1967 __PRETTY_FUNCTION__.6693:
+ 1968 01f0 4B436970 .string "KCipherVecEncrypt"
+ 1968 68657256
+ 1968 6563456E
+ 1968 63727970
+ 1968 7400
+ 1969 0202 00000000 .align 32
+ 1969 00000000
+ 1969 00000000
+ 1969 00000000
+ 1969 00000000
+ 1970 .type __PRETTY_FUNCTION__.6644, @object
+ 1971 .size __PRETTY_FUNCTION__.6644, 32
+ 1972 __PRETTY_FUNCTION__.6644:
+ 1973 0220 4B436970 .string "KCipherVecSetDecryptCounterFunc"
+ 1973 68657256
+ 1973 65635365
+ 1973 74446563
+ 1973 72797074
+
GAS LISTING /tmp/ccq6ONvw.s page 58
+
+
+ 1974 .align 32
+ 1975 .type __PRETTY_FUNCTION__.6634, @object
+ 1976 .size __PRETTY_FUNCTION__.6634, 32
+ 1977 __PRETTY_FUNCTION__.6634:
+ 1978 0240 4B436970 .string "KCipherVecSetEncryptCounterFunc"
+ 1978 68657256
+ 1978 65635365
+ 1978 74456E63
+ 1978 72797074
+ 1979 .align 16
+ 1980 .type __PRETTY_FUNCTION__.6621, @object
+ 1981 .size __PRETTY_FUNCTION__.6621, 25
+ 1982 __PRETTY_FUNCTION__.6621:
+ 1983 0260 4B436970 .string "KCipherVecSetDecryptIvec"
+ 1983 68657256
+ 1983 65635365
+ 1983 74446563
+ 1983 72797074
+ 1984 0279 00000000 .align 16
+ 1984 000000
+ 1985 .type __PRETTY_FUNCTION__.6608, @object
+ 1986 .size __PRETTY_FUNCTION__.6608, 25
+ 1987 __PRETTY_FUNCTION__.6608:
+ 1988 0280 4B436970 .string "KCipherVecSetEncryptIvec"
+ 1988 68657256
+ 1988 65635365
+ 1988 74456E63
+ 1988 72797074
+ 1989 0299 00000000 .align 16
+ 1989 000000
+ 1990 .type __PRETTY_FUNCTION__.6586, @object
+ 1991 .size __PRETTY_FUNCTION__.6586, 24
+ 1992 __PRETTY_FUNCTION__.6586:
+ 1993 02a0 4B436970 .string "KCipherVecSetDecryptKey"
+ 1993 68657256
+ 1993 65635365
+ 1993 74446563
+ 1993 72797074
+ 1994 02b8 00000000 .align 16
+ 1994 00000000
+ 1995 .type __func__.6588, @object
+ 1996 .size __func__.6588, 24
+ 1997 __func__.6588:
+ 1998 02c0 4B436970 .string "KCipherVecSetDecryptKey"
+ 1998 68657256
+ 1998 65635365
+ 1998 74446563
+ 1998 72797074
+ 1999 02d8 00000000 .align 16
+ 1999 00000000
+ 2000 .type __PRETTY_FUNCTION__.6562, @object
+ 2001 .size __PRETTY_FUNCTION__.6562, 24
+ 2002 __PRETTY_FUNCTION__.6562:
+ 2003 02e0 4B436970 .string "KCipherVecSetEncryptKey"
+ 2003 68657256
+ 2003 65635365
+ 2003 74456E63
+
GAS LISTING /tmp/ccq6ONvw.s page 59
+
+
+ 2003 72797074
+ 2004 02f8 00000000 .align 16
+ 2004 00000000
+ 2005 .type __func__.6564, @object
+ 2006 .size __func__.6564, 24
+ 2007 __func__.6564:
+ 2008 0300 4B436970 .string "KCipherVecSetEncryptKey"
+ 2008 68657256
+ 2008 65635365
+ 2008 74456E63
+ 2008 72797074
+ 2009 .text
+ 2010 .Letext0:
+ 2011 .section .debug_loc,"", at progbits
+ 2012 .Ldebug_loc0:
+ 2013 .LLST0:
+ 2014 0000 00000000 .quad .LFB508-.Ltext0
+ 2014 00000000
+ 2015 0008 01000000 .quad .LCFI0-.Ltext0
+ 2015 00000000
+ 2016 0010 0200 .value 0x2
+ 2017 0012 77 .byte 0x77
+ 2018 0013 08 .sleb128 8
+ 2019 0014 01000000 .quad .LCFI0-.Ltext0
+ 2019 00000000
+ 2020 001c 04000000 .quad .LCFI1-.Ltext0
+ 2020 00000000
+ 2021 0024 0200 .value 0x2
+ 2022 0026 77 .byte 0x77
+ 2023 0027 10 .sleb128 16
+ 2024 0028 04000000 .quad .LCFI1-.Ltext0
+ 2024 00000000
+ 2025 0030 2B000000 .quad .LFE508-.Ltext0
+ 2025 00000000
+ 2026 0038 0200 .value 0x2
+ 2027 003a 76 .byte 0x76
+ 2028 003b 10 .sleb128 16
+ 2029 003c 00000000 .quad 0x0
+ 2029 00000000
+ 2030 0044 00000000 .quad 0x0
+ 2030 00000000
+ 2031 .LLST1:
+ 2032 004c 2B000000 .quad .LFB509-.Ltext0
+ 2032 00000000
+ 2033 0054 2C000000 .quad .LCFI2-.Ltext0
+ 2033 00000000
+ 2034 005c 0200 .value 0x2
+ 2035 005e 77 .byte 0x77
+ 2036 005f 08 .sleb128 8
+ 2037 0060 2C000000 .quad .LCFI2-.Ltext0
+ 2037 00000000
+ 2038 0068 2F000000 .quad .LCFI3-.Ltext0
+ 2038 00000000
+ 2039 0070 0200 .value 0x2
+ 2040 0072 77 .byte 0x77
+ 2041 0073 10 .sleb128 16
+ 2042 0074 2F000000 .quad .LCFI3-.Ltext0
+
GAS LISTING /tmp/ccq6ONvw.s page 60
+
+
+ 2042 00000000
+ 2043 007c 60000000 .quad .LFE509-.Ltext0
+ 2043 00000000
+ 2044 0084 0200 .value 0x2
+ 2045 0086 76 .byte 0x76
+ 2046 0087 10 .sleb128 16
+ 2047 0088 00000000 .quad 0x0
+ 2047 00000000
+ 2048 0090 00000000 .quad 0x0
+ 2048 00000000
+ 2049 .LLST2:
+ 2050 0098 60000000 .quad .LFB510-.Ltext0
+ 2050 00000000
+ 2051 00a0 61000000 .quad .LCFI4-.Ltext0
+ 2051 00000000
+ 2052 00a8 0200 .value 0x2
+ 2053 00aa 77 .byte 0x77
+ 2054 00ab 08 .sleb128 8
+ 2055 00ac 61000000 .quad .LCFI4-.Ltext0
+ 2055 00000000
+ 2056 00b4 64000000 .quad .LCFI5-.Ltext0
+ 2056 00000000
+ 2057 00bc 0200 .value 0x2
+ 2058 00be 77 .byte 0x77
+ 2059 00bf 10 .sleb128 16
+ 2060 00c0 64000000 .quad .LCFI5-.Ltext0
+ 2060 00000000
+ 2061 00c8 9A000000 .quad .LFE510-.Ltext0
+ 2061 00000000
+ 2062 00d0 0200 .value 0x2
+ 2063 00d2 76 .byte 0x76
+ 2064 00d3 10 .sleb128 16
+ 2065 00d4 00000000 .quad 0x0
+ 2065 00000000
+ 2066 00dc 00000000 .quad 0x0
+ 2066 00000000
+ 2067 .LLST3:
+ 2068 00e4 9A000000 .quad .LFB511-.Ltext0
+ 2068 00000000
+ 2069 00ec 9B000000 .quad .LCFI6-.Ltext0
+ 2069 00000000
+ 2070 00f4 0200 .value 0x2
+ 2071 00f6 77 .byte 0x77
+ 2072 00f7 08 .sleb128 8
+ 2073 00f8 9B000000 .quad .LCFI6-.Ltext0
+ 2073 00000000
+ 2074 0100 9E000000 .quad .LCFI7-.Ltext0
+ 2074 00000000
+ 2075 0108 0200 .value 0x2
+ 2076 010a 77 .byte 0x77
+ 2077 010b 10 .sleb128 16
+ 2078 010c 9E000000 .quad .LCFI7-.Ltext0
+ 2078 00000000
+ 2079 0114 84010000 .quad .LFE511-.Ltext0
+ 2079 00000000
+ 2080 011c 0200 .value 0x2
+ 2081 011e 76 .byte 0x76
+
GAS LISTING /tmp/ccq6ONvw.s page 61
+
+
+ 2082 011f 10 .sleb128 16
+ 2083 0120 00000000 .quad 0x0
+ 2083 00000000
+ 2084 0128 00000000 .quad 0x0
+ 2084 00000000
+ 2085 .LLST4:
+ 2086 0130 84010000 .quad .LFB512-.Ltext0
+ 2086 00000000
+ 2087 0138 85010000 .quad .LCFI8-.Ltext0
+ 2087 00000000
+ 2088 0140 0200 .value 0x2
+ 2089 0142 77 .byte 0x77
+ 2090 0143 08 .sleb128 8
+ 2091 0144 85010000 .quad .LCFI8-.Ltext0
+ 2091 00000000
+ 2092 014c 88010000 .quad .LCFI9-.Ltext0
+ 2092 00000000
+ 2093 0154 0200 .value 0x2
+ 2094 0156 77 .byte 0x77
+ 2095 0157 10 .sleb128 16
+ 2096 0158 88010000 .quad .LCFI9-.Ltext0
+ 2096 00000000
+ 2097 0160 6E020000 .quad .LFE512-.Ltext0
+ 2097 00000000
+ 2098 0168 0200 .value 0x2
+ 2099 016a 76 .byte 0x76
+ 2100 016b 10 .sleb128 16
+ 2101 016c 00000000 .quad 0x0
+ 2101 00000000
+ 2102 0174 00000000 .quad 0x0
+ 2102 00000000
+ 2103 .LLST5:
+ 2104 017c 6E020000 .quad .LFB513-.Ltext0
+ 2104 00000000
+ 2105 0184 6F020000 .quad .LCFI10-.Ltext0
+ 2105 00000000
+ 2106 018c 0200 .value 0x2
+ 2107 018e 77 .byte 0x77
+ 2108 018f 08 .sleb128 8
+ 2109 0190 6F020000 .quad .LCFI10-.Ltext0
+ 2109 00000000
+ 2110 0198 72020000 .quad .LCFI11-.Ltext0
+ 2110 00000000
+ 2111 01a0 0200 .value 0x2
+ 2112 01a2 77 .byte 0x77
+ 2113 01a3 10 .sleb128 16
+ 2114 01a4 72020000 .quad .LCFI11-.Ltext0
+ 2114 00000000
+ 2115 01ac F1020000 .quad .LFE513-.Ltext0
+ 2115 00000000
+ 2116 01b4 0200 .value 0x2
+ 2117 01b6 76 .byte 0x76
+ 2118 01b7 10 .sleb128 16
+ 2119 01b8 00000000 .quad 0x0
+ 2119 00000000
+ 2120 01c0 00000000 .quad 0x0
+ 2120 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 62
+
+
+ 2121 .LLST6:
+ 2122 01c8 F1020000 .quad .LFB514-.Ltext0
+ 2122 00000000
+ 2123 01d0 F2020000 .quad .LCFI12-.Ltext0
+ 2123 00000000
+ 2124 01d8 0200 .value 0x2
+ 2125 01da 77 .byte 0x77
+ 2126 01db 08 .sleb128 8
+ 2127 01dc F2020000 .quad .LCFI12-.Ltext0
+ 2127 00000000
+ 2128 01e4 F5020000 .quad .LCFI13-.Ltext0
+ 2128 00000000
+ 2129 01ec 0200 .value 0x2
+ 2130 01ee 77 .byte 0x77
+ 2131 01ef 10 .sleb128 16
+ 2132 01f0 F5020000 .quad .LCFI13-.Ltext0
+ 2132 00000000
+ 2133 01f8 74030000 .quad .LFE514-.Ltext0
+ 2133 00000000
+ 2134 0200 0200 .value 0x2
+ 2135 0202 76 .byte 0x76
+ 2136 0203 10 .sleb128 16
+ 2137 0204 00000000 .quad 0x0
+ 2137 00000000
+ 2138 020c 00000000 .quad 0x0
+ 2138 00000000
+ 2139 .LLST7:
+ 2140 0214 74030000 .quad .LFB515-.Ltext0
+ 2140 00000000
+ 2141 021c 75030000 .quad .LCFI14-.Ltext0
+ 2141 00000000
+ 2142 0224 0200 .value 0x2
+ 2143 0226 77 .byte 0x77
+ 2144 0227 08 .sleb128 8
+ 2145 0228 75030000 .quad .LCFI14-.Ltext0
+ 2145 00000000
+ 2146 0230 78030000 .quad .LCFI15-.Ltext0
+ 2146 00000000
+ 2147 0238 0200 .value 0x2
+ 2148 023a 77 .byte 0x77
+ 2149 023b 10 .sleb128 16
+ 2150 023c 78030000 .quad .LCFI15-.Ltext0
+ 2150 00000000
+ 2151 0244 E3030000 .quad .LFE515-.Ltext0
+ 2151 00000000
+ 2152 024c 0200 .value 0x2
+ 2153 024e 76 .byte 0x76
+ 2154 024f 10 .sleb128 16
+ 2155 0250 00000000 .quad 0x0
+ 2155 00000000
+ 2156 0258 00000000 .quad 0x0
+ 2156 00000000
+ 2157 .LLST8:
+ 2158 0260 E3030000 .quad .LFB516-.Ltext0
+ 2158 00000000
+ 2159 0268 E4030000 .quad .LCFI16-.Ltext0
+ 2159 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 63
+
+
+ 2160 0270 0200 .value 0x2
+ 2161 0272 77 .byte 0x77
+ 2162 0273 08 .sleb128 8
+ 2163 0274 E4030000 .quad .LCFI16-.Ltext0
+ 2163 00000000
+ 2164 027c E7030000 .quad .LCFI17-.Ltext0
+ 2164 00000000
+ 2165 0284 0200 .value 0x2
+ 2166 0286 77 .byte 0x77
+ 2167 0287 10 .sleb128 16
+ 2168 0288 E7030000 .quad .LCFI17-.Ltext0
+ 2168 00000000
+ 2169 0290 52040000 .quad .LFE516-.Ltext0
+ 2169 00000000
+ 2170 0298 0200 .value 0x2
+ 2171 029a 76 .byte 0x76
+ 2172 029b 10 .sleb128 16
+ 2173 029c 00000000 .quad 0x0
+ 2173 00000000
+ 2174 02a4 00000000 .quad 0x0
+ 2174 00000000
+ 2175 .LLST9:
+ 2176 02ac 52040000 .quad .LFB517-.Ltext0
+ 2176 00000000
+ 2177 02b4 53040000 .quad .LCFI18-.Ltext0
+ 2177 00000000
+ 2178 02bc 0200 .value 0x2
+ 2179 02be 77 .byte 0x77
+ 2180 02bf 08 .sleb128 8
+ 2181 02c0 53040000 .quad .LCFI18-.Ltext0
+ 2181 00000000
+ 2182 02c8 56040000 .quad .LCFI19-.Ltext0
+ 2182 00000000
+ 2183 02d0 0200 .value 0x2
+ 2184 02d2 77 .byte 0x77
+ 2185 02d3 10 .sleb128 16
+ 2186 02d4 56040000 .quad .LCFI19-.Ltext0
+ 2186 00000000
+ 2187 02dc 79040000 .quad .LFE517-.Ltext0
+ 2187 00000000
+ 2188 02e4 0200 .value 0x2
+ 2189 02e6 76 .byte 0x76
+ 2190 02e7 10 .sleb128 16
+ 2191 02e8 00000000 .quad 0x0
+ 2191 00000000
+ 2192 02f0 00000000 .quad 0x0
+ 2192 00000000
+ 2193 .LLST10:
+ 2194 02f8 79040000 .quad .LFB518-.Ltext0
+ 2194 00000000
+ 2195 0300 7A040000 .quad .LCFI20-.Ltext0
+ 2195 00000000
+ 2196 0308 0200 .value 0x2
+ 2197 030a 77 .byte 0x77
+ 2198 030b 08 .sleb128 8
+ 2199 030c 7A040000 .quad .LCFI20-.Ltext0
+ 2199 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 64
+
+
+ 2200 0314 7D040000 .quad .LCFI21-.Ltext0
+ 2200 00000000
+ 2201 031c 0200 .value 0x2
+ 2202 031e 77 .byte 0x77
+ 2203 031f 10 .sleb128 16
+ 2204 0320 7D040000 .quad .LCFI21-.Ltext0
+ 2204 00000000
+ 2205 0328 A0040000 .quad .LFE518-.Ltext0
+ 2205 00000000
+ 2206 0330 0200 .value 0x2
+ 2207 0332 76 .byte 0x76
+ 2208 0333 10 .sleb128 16
+ 2209 0334 00000000 .quad 0x0
+ 2209 00000000
+ 2210 033c 00000000 .quad 0x0
+ 2210 00000000
+ 2211 .LLST11:
+ 2212 0344 A0040000 .quad .LFB519-.Ltext0
+ 2212 00000000
+ 2213 034c A1040000 .quad .LCFI22-.Ltext0
+ 2213 00000000
+ 2214 0354 0200 .value 0x2
+ 2215 0356 77 .byte 0x77
+ 2216 0357 08 .sleb128 8
+ 2217 0358 A1040000 .quad .LCFI22-.Ltext0
+ 2217 00000000
+ 2218 0360 A4040000 .quad .LCFI23-.Ltext0
+ 2218 00000000
+ 2219 0368 0200 .value 0x2
+ 2220 036a 77 .byte 0x77
+ 2221 036b 10 .sleb128 16
+ 2222 036c A4040000 .quad .LCFI23-.Ltext0
+ 2222 00000000
+ 2223 0374 F3040000 .quad .LFE519-.Ltext0
+ 2223 00000000
+ 2224 037c 0200 .value 0x2
+ 2225 037e 76 .byte 0x76
+ 2226 037f 10 .sleb128 16
+ 2227 0380 00000000 .quad 0x0
+ 2227 00000000
+ 2228 0388 00000000 .quad 0x0
+ 2228 00000000
+ 2229 .LLST12:
+ 2230 0390 F3040000 .quad .LFB520-.Ltext0
+ 2230 00000000
+ 2231 0398 F4040000 .quad .LCFI24-.Ltext0
+ 2231 00000000
+ 2232 03a0 0200 .value 0x2
+ 2233 03a2 77 .byte 0x77
+ 2234 03a3 08 .sleb128 8
+ 2235 03a4 F4040000 .quad .LCFI24-.Ltext0
+ 2235 00000000
+ 2236 03ac F7040000 .quad .LCFI25-.Ltext0
+ 2236 00000000
+ 2237 03b4 0200 .value 0x2
+ 2238 03b6 77 .byte 0x77
+ 2239 03b7 10 .sleb128 16
+
GAS LISTING /tmp/ccq6ONvw.s page 65
+
+
+ 2240 03b8 F7040000 .quad .LCFI25-.Ltext0
+ 2240 00000000
+ 2241 03c0 46050000 .quad .LFE520-.Ltext0
+ 2241 00000000
+ 2242 03c8 0200 .value 0x2
+ 2243 03ca 76 .byte 0x76
+ 2244 03cb 10 .sleb128 16
+ 2245 03cc 00000000 .quad 0x0
+ 2245 00000000
+ 2246 03d4 00000000 .quad 0x0
+ 2246 00000000
+ 2247 .LLST13:
+ 2248 03dc 46050000 .quad .LFB521-.Ltext0
+ 2248 00000000
+ 2249 03e4 47050000 .quad .LCFI26-.Ltext0
+ 2249 00000000
+ 2250 03ec 0200 .value 0x2
+ 2251 03ee 77 .byte 0x77
+ 2252 03ef 08 .sleb128 8
+ 2253 03f0 47050000 .quad .LCFI26-.Ltext0
+ 2253 00000000
+ 2254 03f8 4A050000 .quad .LCFI27-.Ltext0
+ 2254 00000000
+ 2255 0400 0200 .value 0x2
+ 2256 0402 77 .byte 0x77
+ 2257 0403 10 .sleb128 16
+ 2258 0404 4A050000 .quad .LCFI27-.Ltext0
+ 2258 00000000
+ 2259 040c AA050000 .quad .LFE521-.Ltext0
+ 2259 00000000
+ 2260 0414 0200 .value 0x2
+ 2261 0416 76 .byte 0x76
+ 2262 0417 10 .sleb128 16
+ 2263 0418 00000000 .quad 0x0
+ 2263 00000000
+ 2264 0420 00000000 .quad 0x0
+ 2264 00000000
+ 2265 .LLST14:
+ 2266 0428 AA050000 .quad .LFB522-.Ltext0
+ 2266 00000000
+ 2267 0430 AB050000 .quad .LCFI28-.Ltext0
+ 2267 00000000
+ 2268 0438 0200 .value 0x2
+ 2269 043a 77 .byte 0x77
+ 2270 043b 08 .sleb128 8
+ 2271 043c AB050000 .quad .LCFI28-.Ltext0
+ 2271 00000000
+ 2272 0444 AE050000 .quad .LCFI29-.Ltext0
+ 2272 00000000
+ 2273 044c 0200 .value 0x2
+ 2274 044e 77 .byte 0x77
+ 2275 044f 10 .sleb128 16
+ 2276 0450 AE050000 .quad .LCFI29-.Ltext0
+ 2276 00000000
+ 2277 0458 15060000 .quad .LFE522-.Ltext0
+ 2277 00000000
+ 2278 0460 0200 .value 0x2
+
GAS LISTING /tmp/ccq6ONvw.s page 66
+
+
+ 2279 0462 76 .byte 0x76
+ 2280 0463 10 .sleb128 16
+ 2281 0464 00000000 .quad 0x0
+ 2281 00000000
+ 2282 046c 00000000 .quad 0x0
+ 2282 00000000
+ 2283 .LLST15:
+ 2284 0474 15060000 .quad .LFB523-.Ltext0
+ 2284 00000000
+ 2285 047c 16060000 .quad .LCFI30-.Ltext0
+ 2285 00000000
+ 2286 0484 0200 .value 0x2
+ 2287 0486 77 .byte 0x77
+ 2288 0487 08 .sleb128 8
+ 2289 0488 16060000 .quad .LCFI30-.Ltext0
+ 2289 00000000
+ 2290 0490 19060000 .quad .LCFI31-.Ltext0
+ 2290 00000000
+ 2291 0498 0200 .value 0x2
+ 2292 049a 77 .byte 0x77
+ 2293 049b 10 .sleb128 16
+ 2294 049c 19060000 .quad .LCFI31-.Ltext0
+ 2294 00000000
+ 2295 04a4 85060000 .quad .LFE523-.Ltext0
+ 2295 00000000
+ 2296 04ac 0200 .value 0x2
+ 2297 04ae 76 .byte 0x76
+ 2298 04af 10 .sleb128 16
+ 2299 04b0 00000000 .quad 0x0
+ 2299 00000000
+ 2300 04b8 00000000 .quad 0x0
+ 2300 00000000
+ 2301 .LLST16:
+ 2302 04c0 85060000 .quad .LFB524-.Ltext0
+ 2302 00000000
+ 2303 04c8 86060000 .quad .LCFI32-.Ltext0
+ 2303 00000000
+ 2304 04d0 0200 .value 0x2
+ 2305 04d2 77 .byte 0x77
+ 2306 04d3 08 .sleb128 8
+ 2307 04d4 86060000 .quad .LCFI32-.Ltext0
+ 2307 00000000
+ 2308 04dc 89060000 .quad .LCFI33-.Ltext0
+ 2308 00000000
+ 2309 04e4 0200 .value 0x2
+ 2310 04e6 77 .byte 0x77
+ 2311 04e7 10 .sleb128 16
+ 2312 04e8 89060000 .quad .LCFI33-.Ltext0
+ 2312 00000000
+ 2313 04f0 F5060000 .quad .LFE524-.Ltext0
+ 2313 00000000
+ 2314 04f8 0200 .value 0x2
+ 2315 04fa 76 .byte 0x76
+ 2316 04fb 10 .sleb128 16
+ 2317 04fc 00000000 .quad 0x0
+ 2317 00000000
+ 2318 0504 00000000 .quad 0x0
+
GAS LISTING /tmp/ccq6ONvw.s page 67
+
+
+ 2318 00000000
+ 2319 .LLST17:
+ 2320 050c F5060000 .quad .LFB525-.Ltext0
+ 2320 00000000
+ 2321 0514 F6060000 .quad .LCFI34-.Ltext0
+ 2321 00000000
+ 2322 051c 0200 .value 0x2
+ 2323 051e 77 .byte 0x77
+ 2324 051f 08 .sleb128 8
+ 2325 0520 F6060000 .quad .LCFI34-.Ltext0
+ 2325 00000000
+ 2326 0528 F9060000 .quad .LCFI35-.Ltext0
+ 2326 00000000
+ 2327 0530 0200 .value 0x2
+ 2328 0532 77 .byte 0x77
+ 2329 0533 10 .sleb128 16
+ 2330 0534 F9060000 .quad .LCFI35-.Ltext0
+ 2330 00000000
+ 2331 053c C3070000 .quad .LFE525-.Ltext0
+ 2331 00000000
+ 2332 0544 0200 .value 0x2
+ 2333 0546 76 .byte 0x76
+ 2334 0547 10 .sleb128 16
+ 2335 0548 00000000 .quad 0x0
+ 2335 00000000
+ 2336 0550 00000000 .quad 0x0
+ 2336 00000000
+ 2337 .LLST18:
+ 2338 0558 C3070000 .quad .LFB526-.Ltext0
+ 2338 00000000
+ 2339 0560 C4070000 .quad .LCFI36-.Ltext0
+ 2339 00000000
+ 2340 0568 0200 .value 0x2
+ 2341 056a 77 .byte 0x77
+ 2342 056b 08 .sleb128 8
+ 2343 056c C4070000 .quad .LCFI36-.Ltext0
+ 2343 00000000
+ 2344 0574 C7070000 .quad .LCFI37-.Ltext0
+ 2344 00000000
+ 2345 057c 0200 .value 0x2
+ 2346 057e 77 .byte 0x77
+ 2347 057f 10 .sleb128 16
+ 2348 0580 C7070000 .quad .LCFI37-.Ltext0
+ 2348 00000000
+ 2349 0588 97080000 .quad .LFE526-.Ltext0
+ 2349 00000000
+ 2350 0590 0200 .value 0x2
+ 2351 0592 76 .byte 0x76
+ 2352 0593 10 .sleb128 16
+ 2353 0594 00000000 .quad 0x0
+ 2353 00000000
+ 2354 059c 00000000 .quad 0x0
+ 2354 00000000
+ 2355 .LLST19:
+ 2356 05a4 97080000 .quad .LFB527-.Ltext0
+ 2356 00000000
+ 2357 05ac 98080000 .quad .LCFI38-.Ltext0
+
GAS LISTING /tmp/ccq6ONvw.s page 68
+
+
+ 2357 00000000
+ 2358 05b4 0200 .value 0x2
+ 2359 05b6 77 .byte 0x77
+ 2360 05b7 08 .sleb128 8
+ 2361 05b8 98080000 .quad .LCFI38-.Ltext0
+ 2361 00000000
+ 2362 05c0 9B080000 .quad .LCFI39-.Ltext0
+ 2362 00000000
+ 2363 05c8 0200 .value 0x2
+ 2364 05ca 77 .byte 0x77
+ 2365 05cb 10 .sleb128 16
+ 2366 05cc 9B080000 .quad .LCFI39-.Ltext0
+ 2366 00000000
+ 2367 05d4 74090000 .quad .LFE527-.Ltext0
+ 2367 00000000
+ 2368 05dc 0200 .value 0x2
+ 2369 05de 76 .byte 0x76
+ 2370 05df 10 .sleb128 16
+ 2371 05e0 00000000 .quad 0x0
+ 2371 00000000
+ 2372 05e8 00000000 .quad 0x0
+ 2372 00000000
+ 2373 .LLST20:
+ 2374 05f0 74090000 .quad .LFB528-.Ltext0
+ 2374 00000000
+ 2375 05f8 75090000 .quad .LCFI40-.Ltext0
+ 2375 00000000
+ 2376 0600 0200 .value 0x2
+ 2377 0602 77 .byte 0x77
+ 2378 0603 08 .sleb128 8
+ 2379 0604 75090000 .quad .LCFI40-.Ltext0
+ 2379 00000000
+ 2380 060c 78090000 .quad .LCFI41-.Ltext0
+ 2380 00000000
+ 2381 0614 0200 .value 0x2
+ 2382 0616 77 .byte 0x77
+ 2383 0617 10 .sleb128 16
+ 2384 0618 78090000 .quad .LCFI41-.Ltext0
+ 2384 00000000
+ 2385 0620 3A0A0000 .quad .LFE528-.Ltext0
+ 2385 00000000
+ 2386 0628 0200 .value 0x2
+ 2387 062a 76 .byte 0x76
+ 2388 062b 10 .sleb128 16
+ 2389 062c 00000000 .quad 0x0
+ 2389 00000000
+ 2390 0634 00000000 .quad 0x0
+ 2390 00000000
+ 2391 .LLST21:
+ 2392 063c 3A0A0000 .quad .LFB529-.Ltext0
+ 2392 00000000
+ 2393 0644 3B0A0000 .quad .LCFI42-.Ltext0
+ 2393 00000000
+ 2394 064c 0200 .value 0x2
+ 2395 064e 77 .byte 0x77
+ 2396 064f 08 .sleb128 8
+ 2397 0650 3B0A0000 .quad .LCFI42-.Ltext0
+
GAS LISTING /tmp/ccq6ONvw.s page 69
+
+
+ 2397 00000000
+ 2398 0658 3E0A0000 .quad .LCFI43-.Ltext0
+ 2398 00000000
+ 2399 0660 0200 .value 0x2
+ 2400 0662 77 .byte 0x77
+ 2401 0663 10 .sleb128 16
+ 2402 0664 3E0A0000 .quad .LCFI43-.Ltext0
+ 2402 00000000
+ 2403 066c 000B0000 .quad .LFE529-.Ltext0
+ 2403 00000000
+ 2404 0674 0200 .value 0x2
+ 2405 0676 76 .byte 0x76
+ 2406 0677 10 .sleb128 16
+ 2407 0678 00000000 .quad 0x0
+ 2407 00000000
+ 2408 0680 00000000 .quad 0x0
+ 2408 00000000
+ 2409 .LLST22:
+ 2410 0688 000B0000 .quad .LFB530-.Ltext0
+ 2410 00000000
+ 2411 0690 010B0000 .quad .LCFI44-.Ltext0
+ 2411 00000000
+ 2412 0698 0200 .value 0x2
+ 2413 069a 77 .byte 0x77
+ 2414 069b 08 .sleb128 8
+ 2415 069c 010B0000 .quad .LCFI44-.Ltext0
+ 2415 00000000
+ 2416 06a4 040B0000 .quad .LCFI45-.Ltext0
+ 2416 00000000
+ 2417 06ac 0200 .value 0x2
+ 2418 06ae 77 .byte 0x77
+ 2419 06af 10 .sleb128 16
+ 2420 06b0 040B0000 .quad .LCFI45-.Ltext0
+ 2420 00000000
+ 2421 06b8 C60B0000 .quad .LFE530-.Ltext0
+ 2421 00000000
+ 2422 06c0 0200 .value 0x2
+ 2423 06c2 76 .byte 0x76
+ 2424 06c3 10 .sleb128 16
+ 2425 06c4 00000000 .quad 0x0
+ 2425 00000000
+ 2426 06cc 00000000 .quad 0x0
+ 2426 00000000
+ 2427 .LLST23:
+ 2428 06d4 C60B0000 .quad .LFB531-.Ltext0
+ 2428 00000000
+ 2429 06dc C70B0000 .quad .LCFI46-.Ltext0
+ 2429 00000000
+ 2430 06e4 0200 .value 0x2
+ 2431 06e6 77 .byte 0x77
+ 2432 06e7 08 .sleb128 8
+ 2433 06e8 C70B0000 .quad .LCFI46-.Ltext0
+ 2433 00000000
+ 2434 06f0 CA0B0000 .quad .LCFI47-.Ltext0
+ 2434 00000000
+ 2435 06f8 0200 .value 0x2
+ 2436 06fa 77 .byte 0x77
+
GAS LISTING /tmp/ccq6ONvw.s page 70
+
+
+ 2437 06fb 10 .sleb128 16
+ 2438 06fc CA0B0000 .quad .LCFI47-.Ltext0
+ 2438 00000000
+ 2439 0704 8C0C0000 .quad .LFE531-.Ltext0
+ 2439 00000000
+ 2440 070c 0200 .value 0x2
+ 2441 070e 76 .byte 0x76
+ 2442 070f 10 .sleb128 16
+ 2443 0710 00000000 .quad 0x0
+ 2443 00000000
+ 2444 0718 00000000 .quad 0x0
+ 2444 00000000
+ 2445 .LLST24:
+ 2446 0720 8C0C0000 .quad .LFB532-.Ltext0
+ 2446 00000000
+ 2447 0728 8D0C0000 .quad .LCFI48-.Ltext0
+ 2447 00000000
+ 2448 0730 0200 .value 0x2
+ 2449 0732 77 .byte 0x77
+ 2450 0733 08 .sleb128 8
+ 2451 0734 8D0C0000 .quad .LCFI48-.Ltext0
+ 2451 00000000
+ 2452 073c 900C0000 .quad .LCFI49-.Ltext0
+ 2452 00000000
+ 2453 0744 0200 .value 0x2
+ 2454 0746 77 .byte 0x77
+ 2455 0747 10 .sleb128 16
+ 2456 0748 900C0000 .quad .LCFI49-.Ltext0
+ 2456 00000000
+ 2457 0750 C50C0000 .quad .LFE532-.Ltext0
+ 2457 00000000
+ 2458 0758 0200 .value 0x2
+ 2459 075a 76 .byte 0x76
+ 2460 075b 10 .sleb128 16
+ 2461 075c 00000000 .quad 0x0
+ 2461 00000000
+ 2462 0764 00000000 .quad 0x0
+ 2462 00000000
+ 2463 .LLST25:
+ 2464 076c C50C0000 .quad .LFB533-.Ltext0
+ 2464 00000000
+ 2465 0774 C60C0000 .quad .LCFI50-.Ltext0
+ 2465 00000000
+ 2466 077c 0200 .value 0x2
+ 2467 077e 77 .byte 0x77
+ 2468 077f 08 .sleb128 8
+ 2469 0780 C60C0000 .quad .LCFI50-.Ltext0
+ 2469 00000000
+ 2470 0788 C90C0000 .quad .LCFI51-.Ltext0
+ 2470 00000000
+ 2471 0790 0200 .value 0x2
+ 2472 0792 77 .byte 0x77
+ 2473 0793 10 .sleb128 16
+ 2474 0794 C90C0000 .quad .LCFI51-.Ltext0
+ 2474 00000000
+ 2475 079c FB0C0000 .quad .LFE533-.Ltext0
+ 2475 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 71
+
+
+ 2476 07a4 0200 .value 0x2
+ 2477 07a6 76 .byte 0x76
+ 2478 07a7 10 .sleb128 16
+ 2479 07a8 00000000 .quad 0x0
+ 2479 00000000
+ 2480 07b0 00000000 .quad 0x0
+ 2480 00000000
+ 2481 .LLST26:
+ 2482 07b8 FB0C0000 .quad .LFB534-.Ltext0
+ 2482 00000000
+ 2483 07c0 FC0C0000 .quad .LCFI52-.Ltext0
+ 2483 00000000
+ 2484 07c8 0200 .value 0x2
+ 2485 07ca 77 .byte 0x77
+ 2486 07cb 08 .sleb128 8
+ 2487 07cc FC0C0000 .quad .LCFI52-.Ltext0
+ 2487 00000000
+ 2488 07d4 FF0C0000 .quad .LCFI53-.Ltext0
+ 2488 00000000
+ 2489 07dc 0200 .value 0x2
+ 2490 07de 77 .byte 0x77
+ 2491 07df 10 .sleb128 16
+ 2492 07e0 FF0C0000 .quad .LCFI53-.Ltext0
+ 2492 00000000
+ 2493 07e8 310D0000 .quad .LFE534-.Ltext0
+ 2493 00000000
+ 2494 07f0 0200 .value 0x2
+ 2495 07f2 76 .byte 0x76
+ 2496 07f3 10 .sleb128 16
+ 2497 07f4 00000000 .quad 0x0
+ 2497 00000000
+ 2498 07fc 00000000 .quad 0x0
+ 2498 00000000
+ 2499 .LLST27:
+ 2500 0804 310D0000 .quad .LFB535-.Ltext0
+ 2500 00000000
+ 2501 080c 320D0000 .quad .LCFI54-.Ltext0
+ 2501 00000000
+ 2502 0814 0200 .value 0x2
+ 2503 0816 77 .byte 0x77
+ 2504 0817 08 .sleb128 8
+ 2505 0818 320D0000 .quad .LCFI54-.Ltext0
+ 2505 00000000
+ 2506 0820 350D0000 .quad .LCFI55-.Ltext0
+ 2506 00000000
+ 2507 0828 0200 .value 0x2
+ 2508 082a 77 .byte 0x77
+ 2509 082b 10 .sleb128 16
+ 2510 082c 350D0000 .quad .LCFI55-.Ltext0
+ 2510 00000000
+ 2511 0834 8C0D0000 .quad .LFE535-.Ltext0
+ 2511 00000000
+ 2512 083c 0200 .value 0x2
+ 2513 083e 76 .byte 0x76
+ 2514 083f 10 .sleb128 16
+ 2515 0840 00000000 .quad 0x0
+ 2515 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 72
+
+
+ 2516 0848 00000000 .quad 0x0
+ 2516 00000000
+ 2517 .LLST28:
+ 2518 0850 8C0D0000 .quad .LFB536-.Ltext0
+ 2518 00000000
+ 2519 0858 8D0D0000 .quad .LCFI56-.Ltext0
+ 2519 00000000
+ 2520 0860 0200 .value 0x2
+ 2521 0862 77 .byte 0x77
+ 2522 0863 08 .sleb128 8
+ 2523 0864 8D0D0000 .quad .LCFI56-.Ltext0
+ 2523 00000000
+ 2524 086c 900D0000 .quad .LCFI57-.Ltext0
+ 2524 00000000
+ 2525 0874 0200 .value 0x2
+ 2526 0876 77 .byte 0x77
+ 2527 0877 10 .sleb128 16
+ 2528 0878 900D0000 .quad .LCFI57-.Ltext0
+ 2528 00000000
+ 2529 0880 2A0E0000 .quad .LFE536-.Ltext0
+ 2529 00000000
+ 2530 0888 0200 .value 0x2
+ 2531 088a 76 .byte 0x76
+ 2532 088b 10 .sleb128 16
+ 2533 088c 00000000 .quad 0x0
+ 2533 00000000
+ 2534 0894 00000000 .quad 0x0
+ 2534 00000000
+ 2535 .LLST29:
+ 2536 089c 2A0E0000 .quad .LFB537-.Ltext0
+ 2536 00000000
+ 2537 08a4 2B0E0000 .quad .LCFI58-.Ltext0
+ 2537 00000000
+ 2538 08ac 0200 .value 0x2
+ 2539 08ae 77 .byte 0x77
+ 2540 08af 08 .sleb128 8
+ 2541 08b0 2B0E0000 .quad .LCFI58-.Ltext0
+ 2541 00000000
+ 2542 08b8 2E0E0000 .quad .LCFI59-.Ltext0
+ 2542 00000000
+ 2543 08c0 0200 .value 0x2
+ 2544 08c2 77 .byte 0x77
+ 2545 08c3 10 .sleb128 16
+ 2546 08c4 2E0E0000 .quad .LCFI59-.Ltext0
+ 2546 00000000
+ 2547 08cc 850E0000 .quad .LFE537-.Ltext0
+ 2547 00000000
+ 2548 08d4 0200 .value 0x2
+ 2549 08d6 76 .byte 0x76
+ 2550 08d7 10 .sleb128 16
+ 2551 08d8 00000000 .quad 0x0
+ 2551 00000000
+ 2552 08e0 00000000 .quad 0x0
+ 2552 00000000
+ 2553 .LLST30:
+ 2554 08e8 850E0000 .quad .LFB538-.Ltext0
+ 2554 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 73
+
+
+ 2555 08f0 860E0000 .quad .LCFI60-.Ltext0
+ 2555 00000000
+ 2556 08f8 0200 .value 0x2
+ 2557 08fa 77 .byte 0x77
+ 2558 08fb 08 .sleb128 8
+ 2559 08fc 860E0000 .quad .LCFI60-.Ltext0
+ 2559 00000000
+ 2560 0904 890E0000 .quad .LCFI61-.Ltext0
+ 2560 00000000
+ 2561 090c 0200 .value 0x2
+ 2562 090e 77 .byte 0x77
+ 2563 090f 10 .sleb128 16
+ 2564 0910 890E0000 .quad .LCFI61-.Ltext0
+ 2564 00000000
+ 2565 0918 1A0F0000 .quad .LFE538-.Ltext0
+ 2565 00000000
+ 2566 0920 0200 .value 0x2
+ 2567 0922 76 .byte 0x76
+ 2568 0923 10 .sleb128 16
+ 2569 0924 00000000 .quad 0x0
+ 2569 00000000
+ 2570 092c 00000000 .quad 0x0
+ 2570 00000000
+ 2571 .LLST31:
+ 2572 0934 1A0F0000 .quad .LFB539-.Ltext0
+ 2572 00000000
+ 2573 093c 1B0F0000 .quad .LCFI62-.Ltext0
+ 2573 00000000
+ 2574 0944 0200 .value 0x2
+ 2575 0946 77 .byte 0x77
+ 2576 0947 08 .sleb128 8
+ 2577 0948 1B0F0000 .quad .LCFI62-.Ltext0
+ 2577 00000000
+ 2578 0950 1E0F0000 .quad .LCFI63-.Ltext0
+ 2578 00000000
+ 2579 0958 0200 .value 0x2
+ 2580 095a 77 .byte 0x77
+ 2581 095b 10 .sleb128 16
+ 2582 095c 1E0F0000 .quad .LCFI63-.Ltext0
+ 2582 00000000
+ 2583 0964 7C100000 .quad .LFE539-.Ltext0
+ 2583 00000000
+ 2584 096c 0200 .value 0x2
+ 2585 096e 76 .byte 0x76
+ 2586 096f 10 .sleb128 16
+ 2587 0970 00000000 .quad 0x0
+ 2587 00000000
+ 2588 0978 00000000 .quad 0x0
+ 2588 00000000
+ 2589 .file 2 "/usr/include/stdint.h"
+ 2590 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 2591 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/atomic32.h"
+ 2592 .file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/refcount.h"
+ 2593 .file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/cipher.h"
+ 2594 .file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-impl.h"
+ 2595 .file 8 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 2596 .file 9 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+
GAS LISTING /tmp/ccq6ONvw.s page 74
+
+
+ 2597 .file 10 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 2598 .file 11 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi-priv.h"
+ 2599 .file 12 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/ciphermgr.h"
+ 2600 .file 13 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 2601 .file 14 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 2602 .file 15 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 2603 .section .debug_info
+ 2604 0000 951F0000 .long 0x1f95
+ 2605 0004 0200 .value 0x2
+ 2606 0006 00000000 .long .Ldebug_abbrev0
+ 2607 000a 08 .byte 0x8
+ 2608 000b 01 .uleb128 0x1
+ 2609 000c 00000000 .long .LASF395
+ 2610 0010 01 .byte 0x1
+ 2611 0011 00000000 .long .LASF396
+ 2612 0015 00000000 .long .LASF397
+ 2613 0019 00000000 .quad .Ltext0
+ 2613 00000000
+ 2614 0021 00000000 .quad .Letext0
+ 2614 00000000
+ 2615 0029 00000000 .long .Ldebug_line0
+ 2616 002d 02 .uleb128 0x2
+ 2617 002e 01 .byte 0x1
+ 2618 002f 06 .byte 0x6
+ 2619 0030 00000000 .long .LASF0
+ 2620 0034 02 .uleb128 0x2
+ 2621 0035 02 .byte 0x2
+ 2622 0036 05 .byte 0x5
+ 2623 0037 00000000 .long .LASF1
+ 2624 003b 03 .uleb128 0x3
+ 2625 003c 04 .byte 0x4
+ 2626 003d 05 .byte 0x5
+ 2627 003e 696E7400 .string "int"
+ 2628 0042 02 .uleb128 0x2
+ 2629 0043 08 .byte 0x8
+ 2630 0044 05 .byte 0x5
+ 2631 0045 00000000 .long .LASF2
+ 2632 0049 04 .uleb128 0x4
+ 2633 004a 00000000 .long .LASF5
+ 2634 004e 02 .byte 0x2
+ 2635 004f 31 .byte 0x31
+ 2636 0050 54000000 .long 0x54
+ 2637 0054 02 .uleb128 0x2
+ 2638 0055 01 .byte 0x1
+ 2639 0056 08 .byte 0x8
+ 2640 0057 00000000 .long .LASF3
+ 2641 005b 02 .uleb128 0x2
+ 2642 005c 02 .byte 0x2
+ 2643 005d 07 .byte 0x7
+ 2644 005e 00000000 .long .LASF4
+ 2645 0062 04 .uleb128 0x4
+ 2646 0063 00000000 .long .LASF6
+ 2647 0067 02 .byte 0x2
+ 2648 0068 34 .byte 0x34
+ 2649 0069 6D000000 .long 0x6d
+ 2650 006d 02 .uleb128 0x2
+ 2651 006e 04 .byte 0x4
+
GAS LISTING /tmp/ccq6ONvw.s page 75
+
+
+ 2652 006f 07 .byte 0x7
+ 2653 0070 00000000 .long .LASF7
+ 2654 0074 02 .uleb128 0x2
+ 2655 0075 08 .byte 0x8
+ 2656 0076 07 .byte 0x7
+ 2657 0077 00000000 .long .LASF8
+ 2658 007b 04 .uleb128 0x4
+ 2659 007c 00000000 .long .LASF9
+ 2660 0080 03 .byte 0x3
+ 2661 0081 30 .byte 0x30
+ 2662 0082 62000000 .long 0x62
+ 2663 0086 04 .uleb128 0x4
+ 2664 0087 00000000 .long .LASF10
+ 2665 008b 04 .byte 0x4
+ 2666 008c 27 .byte 0x27
+ 2667 008d 91000000 .long 0x91
+ 2668 0091 05 .uleb128 0x5
+ 2669 0092 00000000 .long .LASF10
+ 2670 0096 04 .byte 0x4
+ 2671 0097 04 .byte 0x4
+ 2672 0098 27 .byte 0x27
+ 2673 0099 AC000000 .long 0xac
+ 2674 009d 06 .uleb128 0x6
+ 2675 009e 00000000 .long .LASF34
+ 2676 00a2 04 .byte 0x4
+ 2677 00a3 2A .byte 0x2a
+ 2678 00a4 AC000000 .long 0xac
+ 2679 00a8 02 .byte 0x2
+ 2680 00a9 23 .byte 0x23
+ 2681 00aa 00 .uleb128 0x0
+ 2682 00ab 00 .byte 0x0
+ 2683 00ac 07 .uleb128 0x7
+ 2684 00ad 3B000000 .long 0x3b
+ 2685 00b1 08 .uleb128 0x8
+ 2686 00b2 08 .byte 0x8
+ 2687 00b3 07 .byte 0x7
+ 2688 00b4 09 .uleb128 0x9
+ 2689 00b5 08 .byte 0x8
+ 2690 00b6 0A .uleb128 0xa
+ 2691 00b7 08 .byte 0x8
+ 2692 00b8 BC000000 .long 0xbc
+ 2693 00bc 0B .uleb128 0xb
+ 2694 00bd C1000000 .long 0xc1
+ 2695 00c1 02 .uleb128 0x2
+ 2696 00c2 01 .byte 0x1
+ 2697 00c3 06 .byte 0x6
+ 2698 00c4 00000000 .long .LASF11
+ 2699 00c8 0C .uleb128 0xc
+ 2700 00c9 04 .byte 0x4
+ 2701 00ca 0D .byte 0xd
+ 2702 00cb D6 .byte 0xd6
+ 2703 00cc 49010000 .long 0x149
+ 2704 00d0 0D .uleb128 0xd
+ 2705 00d1 00000000 .long .LASF12
+ 2706 00d5 7F .sleb128 -1
+ 2707 00d6 0D .uleb128 0xd
+ 2708 00d7 00000000 .long .LASF13
+
GAS LISTING /tmp/ccq6ONvw.s page 76
+
+
+ 2709 00db 00 .sleb128 0
+ 2710 00dc 0D .uleb128 0xd
+ 2711 00dd 00000000 .long .LASF14
+ 2712 00e1 01 .sleb128 1
+ 2713 00e2 0D .uleb128 0xd
+ 2714 00e3 00000000 .long .LASF15
+ 2715 00e7 02 .sleb128 2
+ 2716 00e8 0D .uleb128 0xd
+ 2717 00e9 00000000 .long .LASF16
+ 2718 00ed 03 .sleb128 3
+ 2719 00ee 0D .uleb128 0xd
+ 2720 00ef 00000000 .long .LASF17
+ 2721 00f3 04 .sleb128 4
+ 2722 00f4 0D .uleb128 0xd
+ 2723 00f5 00000000 .long .LASF18
+ 2724 00f9 05 .sleb128 5
+ 2725 00fa 0D .uleb128 0xd
+ 2726 00fb 00000000 .long .LASF19
+ 2727 00ff 06 .sleb128 6
+ 2728 0100 0D .uleb128 0xd
+ 2729 0101 00000000 .long .LASF20
+ 2730 0105 07 .sleb128 7
+ 2731 0106 0D .uleb128 0xd
+ 2732 0107 00000000 .long .LASF21
+ 2733 010b 08 .sleb128 8
+ 2734 010c 0D .uleb128 0xd
+ 2735 010d 00000000 .long .LASF22
+ 2736 0111 09 .sleb128 9
+ 2737 0112 0D .uleb128 0xd
+ 2738 0113 00000000 .long .LASF23
+ 2739 0117 0A .sleb128 10
+ 2740 0118 0D .uleb128 0xd
+ 2741 0119 00000000 .long .LASF24
+ 2742 011d 0B .sleb128 11
+ 2743 011e 0D .uleb128 0xd
+ 2744 011f 00000000 .long .LASF25
+ 2745 0123 0C .sleb128 12
+ 2746 0124 0D .uleb128 0xd
+ 2747 0125 00000000 .long .LASF26
+ 2748 0129 0D .sleb128 13
+ 2749 012a 0D .uleb128 0xd
+ 2750 012b 00000000 .long .LASF27
+ 2751 012f 0E .sleb128 14
+ 2752 0130 0D .uleb128 0xd
+ 2753 0131 00000000 .long .LASF28
+ 2754 0135 0F .sleb128 15
+ 2755 0136 0D .uleb128 0xd
+ 2756 0137 00000000 .long .LASF29
+ 2757 013b 10 .sleb128 16
+ 2758 013c 0D .uleb128 0xd
+ 2759 013d 00000000 .long .LASF30
+ 2760 0141 11 .sleb128 17
+ 2761 0142 0D .uleb128 0xd
+ 2762 0143 00000000 .long .LASF31
+ 2763 0147 12 .sleb128 18
+ 2764 0148 00 .byte 0x0
+ 2765 0149 04 .uleb128 0x4
+
GAS LISTING /tmp/ccq6ONvw.s page 77
+
+
+ 2766 014a 00000000 .long .LASF32
+ 2767 014e 05 .byte 0x5
+ 2768 014f 42 .byte 0x42
+ 2769 0150 86000000 .long 0x86
+ 2770 0154 04 .uleb128 0x4
+ 2771 0155 00000000 .long .LASF33
+ 2772 0159 06 .byte 0x6
+ 2773 015a 20 .byte 0x20
+ 2774 015b 5F010000 .long 0x15f
+ 2775 015f 05 .uleb128 0x5
+ 2776 0160 00000000 .long .LASF33
+ 2777 0164 48 .byte 0x48
+ 2778 0165 06 .byte 0x6
+ 2779 0166 20 .byte 0x20
+ 2780 0167 F7010000 .long 0x1f7
+ 2781 016b 06 .uleb128 0x6
+ 2782 016c 00000000 .long .LASF35
+ 2783 0170 07 .byte 0x7
+ 2784 0171 9A .byte 0x9a
+ 2785 0172 49010000 .long 0x149
+ 2786 0176 02 .byte 0x2
+ 2787 0177 23 .byte 0x23
+ 2788 0178 00 .uleb128 0x0
+ 2789 0179 06 .uleb128 0x6
+ 2790 017a 00000000 .long .LASF36
+ 2791 017e 07 .byte 0x7
+ 2792 017f 9B .byte 0x9b
+ 2793 0180 62000000 .long 0x62
+ 2794 0184 02 .byte 0x2
+ 2795 0185 23 .byte 0x23
+ 2796 0186 04 .uleb128 0x4
+ 2797 0187 0E .uleb128 0xe
+ 2798 0188 767400 .string "vt"
+ 2799 018b 07 .byte 0x7
+ 2800 018c 9C .byte 0x9c
+ 2801 018d BC040000 .long 0x4bc
+ 2802 0191 02 .byte 0x2
+ 2803 0192 23 .byte 0x23
+ 2804 0193 08 .uleb128 0x8
+ 2805 0194 06 .uleb128 0x6
+ 2806 0195 00000000 .long .LASF37
+ 2807 0199 07 .byte 0x7
+ 2808 019a 9D .byte 0x9d
+ 2809 019b B6000000 .long 0xb6
+ 2810 019f 02 .byte 0x2
+ 2811 01a0 23 .byte 0x23
+ 2812 01a1 10 .uleb128 0x10
+ 2813 01a2 06 .uleb128 0x6
+ 2814 01a3 00000000 .long .LASF38
+ 2815 01a7 07 .byte 0x7
+ 2816 01a8 9E .byte 0x9e
+ 2817 01a9 B4000000 .long 0xb4
+ 2818 01ad 02 .byte 0x2
+ 2819 01ae 23 .byte 0x23
+ 2820 01af 18 .uleb128 0x18
+ 2821 01b0 06 .uleb128 0x6
+ 2822 01b1 00000000 .long .LASF39
+
GAS LISTING /tmp/ccq6ONvw.s page 78
+
+
+ 2823 01b5 07 .byte 0x7
+ 2824 01b6 9F .byte 0x9f
+ 2825 01b7 B4000000 .long 0xb4
+ 2826 01bb 02 .byte 0x2
+ 2827 01bc 23 .byte 0x23
+ 2828 01bd 20 .uleb128 0x20
+ 2829 01be 06 .uleb128 0x6
+ 2830 01bf 00000000 .long .LASF40
+ 2831 01c3 07 .byte 0x7
+ 2832 01c4 A0 .byte 0xa0
+ 2833 01c5 B4000000 .long 0xb4
+ 2834 01c9 02 .byte 0x2
+ 2835 01ca 23 .byte 0x23
+ 2836 01cb 28 .uleb128 0x28
+ 2837 01cc 06 .uleb128 0x6
+ 2838 01cd 00000000 .long .LASF41
+ 2839 01d1 07 .byte 0x7
+ 2840 01d2 A1 .byte 0xa1
+ 2841 01d3 B4000000 .long 0xb4
+ 2842 01d7 02 .byte 0x2
+ 2843 01d8 23 .byte 0x23
+ 2844 01d9 30 .uleb128 0x30
+ 2845 01da 06 .uleb128 0x6
+ 2846 01db 00000000 .long .LASF42
+ 2847 01df 07 .byte 0x7
+ 2848 01e0 A2 .byte 0xa2
+ 2849 01e1 F7010000 .long 0x1f7
+ 2850 01e5 02 .byte 0x2
+ 2851 01e6 23 .byte 0x23
+ 2852 01e7 38 .uleb128 0x38
+ 2853 01e8 06 .uleb128 0x6
+ 2854 01e9 00000000 .long .LASF43
+ 2855 01ed 07 .byte 0x7
+ 2856 01ee A3 .byte 0xa3
+ 2857 01ef F7010000 .long 0x1f7
+ 2858 01f3 02 .byte 0x2
+ 2859 01f4 23 .byte 0x23
+ 2860 01f5 40 .uleb128 0x40
+ 2861 01f6 00 .byte 0x0
+ 2862 01f7 04 .uleb128 0x4
+ 2863 01f8 00000000 .long .LASF44
+ 2864 01fc 06 .byte 0x6
+ 2865 01fd 40 .byte 0x40
+ 2866 01fe 02020000 .long 0x202
+ 2867 0202 0A .uleb128 0xa
+ 2868 0203 08 .byte 0x8
+ 2869 0204 08020000 .long 0x208
+ 2870 0208 0F .uleb128 0xf
+ 2871 0209 01 .byte 0x1
+ 2872 020a 14020000 .long 0x214
+ 2873 020e 10 .uleb128 0x10
+ 2874 020f B4000000 .long 0xb4
+ 2875 0213 00 .byte 0x0
+ 2876 0214 04 .uleb128 0x4
+ 2877 0215 00000000 .long .LASF45
+ 2878 0219 07 .byte 0x7
+ 2879 021a 2C .byte 0x2c
+
GAS LISTING /tmp/ccq6ONvw.s page 79
+
+
+ 2880 021b 1F020000 .long 0x21f
+ 2881 021f 05 .uleb128 0x5
+ 2882 0220 00000000 .long .LASF45
+ 2883 0224 50 .byte 0x50
+ 2884 0225 07 .byte 0x7
+ 2885 0226 2B .byte 0x2b
+ 2886 0227 48020000 .long 0x248
+ 2887 022b 0E .uleb128 0xe
+ 2888 022c 64616400 .string "dad"
+ 2889 0230 01 .byte 0x1
+ 2890 0231 3E .byte 0x3e
+ 2891 0232 54010000 .long 0x154
+ 2892 0236 02 .byte 0x2
+ 2893 0237 23 .byte 0x23
+ 2894 0238 00 .uleb128 0x0
+ 2895 0239 06 .uleb128 0x6
+ 2896 023a 00000000 .long .LASF46
+ 2897 023e 01 .byte 0x1
+ 2898 023f 3F .byte 0x3f
+ 2899 0240 87070000 .long 0x787
+ 2900 0244 02 .byte 0x2
+ 2901 0245 23 .byte 0x23
+ 2902 0246 48 .uleb128 0x48
+ 2903 0247 00 .byte 0x0
+ 2904 0248 04 .uleb128 0x4
+ 2905 0249 00000000 .long .LASF47
+ 2906 024d 07 .byte 0x7
+ 2907 024e 2F .byte 0x2f
+ 2908 024f 53020000 .long 0x253
+ 2909 0253 05 .uleb128 0x5
+ 2910 0254 00000000 .long .LASF47
+ 2911 0258 08 .byte 0x8
+ 2912 0259 07 .byte 0x7
+ 2913 025a 2F .byte 0x2f
+ 2914 025b 7C020000 .long 0x27c
+ 2915 025f 0E .uleb128 0xe
+ 2916 0260 6D616A00 .string "maj"
+ 2917 0264 07 .byte 0x7
+ 2918 0265 32 .byte 0x32
+ 2919 0266 62000000 .long 0x62
+ 2920 026a 02 .byte 0x2
+ 2921 026b 23 .byte 0x23
+ 2922 026c 00 .uleb128 0x0
+ 2923 026d 0E .uleb128 0xe
+ 2924 026e 6D696E00 .string "min"
+ 2925 0272 07 .byte 0x7
+ 2926 0273 33 .byte 0x33
+ 2927 0274 62000000 .long 0x62
+ 2928 0278 02 .byte 0x2
+ 2929 0279 23 .byte 0x23
+ 2930 027a 04 .uleb128 0x4
+ 2931 027b 00 .byte 0x0
+ 2932 027c 04 .uleb128 0x4
+ 2933 027d 00000000 .long .LASF48
+ 2934 0281 07 .byte 0x7
+ 2935 0282 37 .byte 0x37
+ 2936 0283 87020000 .long 0x287
+
GAS LISTING /tmp/ccq6ONvw.s page 80
+
+
+ 2937 0287 05 .uleb128 0x5
+ 2938 0288 00000000 .long .LASF48
+ 2939 028c B0 .byte 0xb0
+ 2940 028d 07 .byte 0x7
+ 2941 028e 37 .byte 0x37
+ 2942 028f CE030000 .long 0x3ce
+ 2943 0293 06 .uleb128 0x6
+ 2944 0294 00000000 .long .LASF49
+ 2945 0298 07 .byte 0x7
+ 2946 0299 3A .byte 0x3a
+ 2947 029a 48020000 .long 0x248
+ 2948 029e 02 .byte 0x2
+ 2949 029f 23 .byte 0x23
+ 2950 02a0 00 .uleb128 0x0
+ 2951 02a1 06 .uleb128 0x6
+ 2952 02a2 00000000 .long .LASF50
+ 2953 02a6 07 .byte 0x7
+ 2954 02a7 3E .byte 0x3e
+ 2955 02a8 E4030000 .long 0x3e4
+ 2956 02ac 02 .byte 0x2
+ 2957 02ad 23 .byte 0x23
+ 2958 02ae 08 .uleb128 0x8
+ 2959 02af 06 .uleb128 0x6
+ 2960 02b0 00000000 .long .LASF51
+ 2961 02b4 07 .byte 0x7
+ 2962 02b5 40 .byte 0x40
+ 2963 02b6 04040000 .long 0x404
+ 2964 02ba 02 .byte 0x2
+ 2965 02bb 23 .byte 0x23
+ 2966 02bc 10 .uleb128 0x10
+ 2967 02bd 06 .uleb128 0x6
+ 2968 02be 00000000 .long .LASF52
+ 2969 02c2 07 .byte 0x7
+ 2970 02c3 44 .byte 0x44
+ 2971 02c4 04040000 .long 0x404
+ 2972 02c8 02 .byte 0x2
+ 2973 02c9 23 .byte 0x23
+ 2974 02ca 18 .uleb128 0x18
+ 2975 02cb 06 .uleb128 0x6
+ 2976 02cc 00000000 .long .LASF53
+ 2977 02d0 07 .byte 0x7
+ 2978 02d1 48 .byte 0x48
+ 2979 02d2 26040000 .long 0x426
+ 2980 02d6 02 .byte 0x2
+ 2981 02d7 23 .byte 0x23
+ 2982 02d8 20 .uleb128 0x20
+ 2983 02d9 06 .uleb128 0x6
+ 2984 02da 00000000 .long .LASF54
+ 2985 02de 07 .byte 0x7
+ 2986 02df 4B .byte 0x4b
+ 2987 02e0 26040000 .long 0x426
+ 2988 02e4 02 .byte 0x2
+ 2989 02e5 23 .byte 0x23
+ 2990 02e6 28 .uleb128 0x28
+ 2991 02e7 06 .uleb128 0x6
+ 2992 02e8 00000000 .long .LASF55
+ 2993 02ec 07 .byte 0x7
+
GAS LISTING /tmp/ccq6ONvw.s page 81
+
+
+ 2994 02ed 4E .byte 0x4e
+ 2995 02ee 41040000 .long 0x441
+ 2996 02f2 02 .byte 0x2
+ 2997 02f3 23 .byte 0x23
+ 2998 02f4 30 .uleb128 0x30
+ 2999 02f5 06 .uleb128 0x6
+ 3000 02f6 00000000 .long .LASF56
+ 3001 02fa 07 .byte 0x7
+ 3002 02fb 51 .byte 0x51
+ 3003 02fc 41040000 .long 0x441
+ 3004 0300 02 .byte 0x2
+ 3005 0301 23 .byte 0x23
+ 3006 0302 38 .uleb128 0x38
+ 3007 0303 06 .uleb128 0x6
+ 3008 0304 00000000 .long .LASF57
+ 3009 0308 07 .byte 0x7
+ 3010 0309 55 .byte 0x55
+ 3011 030a 6C040000 .long 0x46c
+ 3012 030e 02 .byte 0x2
+ 3013 030f 23 .byte 0x23
+ 3014 0310 40 .uleb128 0x40
+ 3015 0311 06 .uleb128 0x6
+ 3016 0312 00000000 .long .LASF58
+ 3017 0316 07 .byte 0x7
+ 3018 0317 58 .byte 0x58
+ 3019 0318 6C040000 .long 0x46c
+ 3020 031c 02 .byte 0x2
+ 3021 031d 23 .byte 0x23
+ 3022 031e 48 .uleb128 0x48
+ 3023 031f 06 .uleb128 0x6
+ 3024 0320 00000000 .long .LASF59
+ 3025 0324 07 .byte 0x7
+ 3026 0325 5D .byte 0x5d
+ 3027 0326 91040000 .long 0x491
+ 3028 032a 02 .byte 0x2
+ 3029 032b 23 .byte 0x23
+ 3030 032c 50 .uleb128 0x50
+ 3031 032d 06 .uleb128 0x6
+ 3032 032e 00000000 .long .LASF60
+ 3033 0332 07 .byte 0x7
+ 3034 0333 62 .byte 0x62
+ 3035 0334 91040000 .long 0x491
+ 3036 0338 02 .byte 0x2
+ 3037 0339 23 .byte 0x23
+ 3038 033a 58 .uleb128 0x58
+ 3039 033b 06 .uleb128 0x6
+ 3040 033c 00000000 .long .LASF61
+ 3041 0340 07 .byte 0x7
+ 3042 0341 68 .byte 0x68
+ 3043 0342 B6040000 .long 0x4b6
+ 3044 0346 02 .byte 0x2
+ 3045 0347 23 .byte 0x23
+ 3046 0348 60 .uleb128 0x60
+ 3047 0349 06 .uleb128 0x6
+ 3048 034a 00000000 .long .LASF62
+ 3049 034e 07 .byte 0x7
+ 3050 034f 6C .byte 0x6c
+
GAS LISTING /tmp/ccq6ONvw.s page 82
+
+
+ 3051 0350 B6040000 .long 0x4b6
+ 3052 0354 02 .byte 0x2
+ 3053 0355 23 .byte 0x23
+ 3054 0356 68 .uleb128 0x68
+ 3055 0357 06 .uleb128 0x6
+ 3056 0358 00000000 .long .LASF63
+ 3057 035c 07 .byte 0x7
+ 3058 035d 72 .byte 0x72
+ 3059 035e B6040000 .long 0x4b6
+ 3060 0362 02 .byte 0x2
+ 3061 0363 23 .byte 0x23
+ 3062 0364 70 .uleb128 0x70
+ 3063 0365 06 .uleb128 0x6
+ 3064 0366 00000000 .long .LASF64
+ 3065 036a 07 .byte 0x7
+ 3066 036b 74 .byte 0x74
+ 3067 036c B6040000 .long 0x4b6
+ 3068 0370 02 .byte 0x2
+ 3069 0371 23 .byte 0x23
+ 3070 0372 78 .uleb128 0x78
+ 3071 0373 06 .uleb128 0x6
+ 3072 0374 00000000 .long .LASF65
+ 3073 0378 07 .byte 0x7
+ 3074 0379 78 .byte 0x78
+ 3075 037a B6040000 .long 0x4b6
+ 3076 037e 03 .byte 0x3
+ 3077 037f 23 .byte 0x23
+ 3078 0380 8001 .uleb128 0x80
+ 3079 0382 06 .uleb128 0x6
+ 3080 0383 00000000 .long .LASF66
+ 3081 0387 07 .byte 0x7
+ 3082 0388 7A .byte 0x7a
+ 3083 0389 B6040000 .long 0x4b6
+ 3084 038d 03 .byte 0x3
+ 3085 038e 23 .byte 0x23
+ 3086 038f 8801 .uleb128 0x88
+ 3087 0391 06 .uleb128 0x6
+ 3088 0392 00000000 .long .LASF67
+ 3089 0396 07 .byte 0x7
+ 3090 0397 7E .byte 0x7e
+ 3091 0398 B6040000 .long 0x4b6
+ 3092 039c 03 .byte 0x3
+ 3093 039d 23 .byte 0x23
+ 3094 039e 9001 .uleb128 0x90
+ 3095 03a0 06 .uleb128 0x6
+ 3096 03a1 00000000 .long .LASF68
+ 3097 03a5 07 .byte 0x7
+ 3098 03a6 80 .byte 0x80
+ 3099 03a7 B6040000 .long 0x4b6
+ 3100 03ab 03 .byte 0x3
+ 3101 03ac 23 .byte 0x23
+ 3102 03ad 9801 .uleb128 0x98
+ 3103 03af 06 .uleb128 0x6
+ 3104 03b0 00000000 .long .LASF69
+ 3105 03b4 07 .byte 0x7
+ 3106 03b5 84 .byte 0x84
+ 3107 03b6 B6040000 .long 0x4b6
+
GAS LISTING /tmp/ccq6ONvw.s page 83
+
+
+ 3108 03ba 03 .byte 0x3
+ 3109 03bb 23 .byte 0x23
+ 3110 03bc A001 .uleb128 0xa0
+ 3111 03be 06 .uleb128 0x6
+ 3112 03bf 00000000 .long .LASF70
+ 3113 03c3 07 .byte 0x7
+ 3114 03c4 86 .byte 0x86
+ 3115 03c5 B6040000 .long 0x4b6
+ 3116 03c9 03 .byte 0x3
+ 3117 03ca 23 .byte 0x23
+ 3118 03cb A801 .uleb128 0xa8
+ 3119 03cd 00 .byte 0x0
+ 3120 03ce 11 .uleb128 0x11
+ 3121 03cf 01 .byte 0x1
+ 3122 03d0 7B000000 .long 0x7b
+ 3123 03d4 DE030000 .long 0x3de
+ 3124 03d8 10 .uleb128 0x10
+ 3125 03d9 DE030000 .long 0x3de
+ 3126 03dd 00 .byte 0x0
+ 3127 03de 0A .uleb128 0xa
+ 3128 03df 08 .byte 0x8
+ 3129 03e0 14020000 .long 0x214
+ 3130 03e4 0A .uleb128 0xa
+ 3131 03e5 08 .byte 0x8
+ 3132 03e6 CE030000 .long 0x3ce
+ 3133 03ea 11 .uleb128 0x11
+ 3134 03eb 01 .byte 0x1
+ 3135 03ec 7B000000 .long 0x7b
+ 3136 03f0 04040000 .long 0x404
+ 3137 03f4 10 .uleb128 0x10
+ 3138 03f5 DE030000 .long 0x3de
+ 3139 03f9 10 .uleb128 0x10
+ 3140 03fa B6000000 .long 0xb6
+ 3141 03fe 10 .uleb128 0x10
+ 3142 03ff 62000000 .long 0x62
+ 3143 0403 00 .byte 0x0
+ 3144 0404 0A .uleb128 0xa
+ 3145 0405 08 .byte 0x8
+ 3146 0406 EA030000 .long 0x3ea
+ 3147 040a 11 .uleb128 0x11
+ 3148 040b 01 .byte 0x1
+ 3149 040c 7B000000 .long 0x7b
+ 3150 0410 1F040000 .long 0x41f
+ 3151 0414 10 .uleb128 0x10
+ 3152 0415 DE030000 .long 0x3de
+ 3153 0419 10 .uleb128 0x10
+ 3154 041a 1F040000 .long 0x41f
+ 3155 041e 00 .byte 0x0
+ 3156 041f 0A .uleb128 0xa
+ 3157 0420 08 .byte 0x8
+ 3158 0421 25040000 .long 0x425
+ 3159 0425 12 .uleb128 0x12
+ 3160 0426 0A .uleb128 0xa
+ 3161 0427 08 .byte 0x8
+ 3162 0428 0A040000 .long 0x40a
+ 3163 042c 11 .uleb128 0x11
+ 3164 042d 01 .byte 0x1
+
GAS LISTING /tmp/ccq6ONvw.s page 84
+
+
+ 3165 042e 7B000000 .long 0x7b
+ 3166 0432 41040000 .long 0x441
+ 3167 0436 10 .uleb128 0x10
+ 3168 0437 DE030000 .long 0x3de
+ 3169 043b 10 .uleb128 0x10
+ 3170 043c F7010000 .long 0x1f7
+ 3171 0440 00 .byte 0x0
+ 3172 0441 0A .uleb128 0xa
+ 3173 0442 08 .byte 0x8
+ 3174 0443 2C040000 .long 0x42c
+ 3175 0447 11 .uleb128 0x11
+ 3176 0448 01 .byte 0x1
+ 3177 0449 7B000000 .long 0x7b
+ 3178 044d 61040000 .long 0x461
+ 3179 0451 10 .uleb128 0x10
+ 3180 0452 61040000 .long 0x461
+ 3181 0456 10 .uleb128 0x10
+ 3182 0457 1F040000 .long 0x41f
+ 3183 045b 10 .uleb128 0x10
+ 3184 045c B4000000 .long 0xb4
+ 3185 0460 00 .byte 0x0
+ 3186 0461 0A .uleb128 0xa
+ 3187 0462 08 .byte 0x8
+ 3188 0463 67040000 .long 0x467
+ 3189 0467 0B .uleb128 0xb
+ 3190 0468 14020000 .long 0x214
+ 3191 046c 0A .uleb128 0xa
+ 3192 046d 08 .byte 0x8
+ 3193 046e 47040000 .long 0x447
+ 3194 0472 11 .uleb128 0x11
+ 3195 0473 01 .byte 0x1
+ 3196 0474 7B000000 .long 0x7b
+ 3197 0478 91040000 .long 0x491
+ 3198 047c 10 .uleb128 0x10
+ 3199 047d 61040000 .long 0x461
+ 3200 0481 10 .uleb128 0x10
+ 3201 0482 1F040000 .long 0x41f
+ 3202 0486 10 .uleb128 0x10
+ 3203 0487 B4000000 .long 0xb4
+ 3204 048b 10 .uleb128 0x10
+ 3205 048c 62000000 .long 0x62
+ 3206 0490 00 .byte 0x0
+ 3207 0491 0A .uleb128 0xa
+ 3208 0492 08 .byte 0x8
+ 3209 0493 72040000 .long 0x472
+ 3210 0497 11 .uleb128 0x11
+ 3211 0498 01 .byte 0x1
+ 3212 0499 7B000000 .long 0x7b
+ 3213 049d B6040000 .long 0x4b6
+ 3214 04a1 10 .uleb128 0x10
+ 3215 04a2 DE030000 .long 0x3de
+ 3216 04a6 10 .uleb128 0x10
+ 3217 04a7 1F040000 .long 0x41f
+ 3218 04ab 10 .uleb128 0x10
+ 3219 04ac B4000000 .long 0xb4
+ 3220 04b0 10 .uleb128 0x10
+ 3221 04b1 62000000 .long 0x62
+
GAS LISTING /tmp/ccq6ONvw.s page 85
+
+
+ 3222 04b5 00 .byte 0x0
+ 3223 04b6 0A .uleb128 0xa
+ 3224 04b7 08 .byte 0x8
+ 3225 04b8 97040000 .long 0x497
+ 3226 04bc 04 .uleb128 0x4
+ 3227 04bd 00000000 .long .LASF71
+ 3228 04c1 07 .byte 0x7
+ 3229 04c2 90 .byte 0x90
+ 3230 04c3 C7040000 .long 0x4c7
+ 3231 04c7 13 .uleb128 0x13
+ 3232 04c8 00000000 .long .LASF71
+ 3233 04cc 08 .byte 0x8
+ 3234 04cd 07 .byte 0x7
+ 3235 04ce 90 .byte 0x90
+ 3236 04cf E9040000 .long 0x4e9
+ 3237 04d3 14 .uleb128 0x14
+ 3238 04d4 00000000 .long .LASF49
+ 3239 04d8 07 .byte 0x7
+ 3240 04d9 93 .byte 0x93
+ 3241 04da E9040000 .long 0x4e9
+ 3242 04de 15 .uleb128 0x15
+ 3243 04df 763100 .string "v1"
+ 3244 04e2 07 .byte 0x7
+ 3245 04e3 94 .byte 0x94
+ 3246 04e4 F4040000 .long 0x4f4
+ 3247 04e8 00 .byte 0x0
+ 3248 04e9 0A .uleb128 0xa
+ 3249 04ea 08 .byte 0x8
+ 3250 04eb EF040000 .long 0x4ef
+ 3251 04ef 0B .uleb128 0xb
+ 3252 04f0 48020000 .long 0x248
+ 3253 04f4 0A .uleb128 0xa
+ 3254 04f5 08 .byte 0x8
+ 3255 04f6 FA040000 .long 0x4fa
+ 3256 04fa 0B .uleb128 0xb
+ 3257 04fb 7C020000 .long 0x27c
+ 3258 04ff 04 .uleb128 0x4
+ 3259 0500 00000000 .long .LASF72
+ 3260 0504 08 .byte 0x8
+ 3261 0505 37 .byte 0x37
+ 3262 0506 0A050000 .long 0x50a
+ 3263 050a 16 .uleb128 0x16
+ 3264 050b C1000000 .long 0xc1
+ 3265 050f 1A050000 .long 0x51a
+ 3266 0513 17 .uleb128 0x17
+ 3267 0514 B1000000 .long 0xb1
+ 3268 0518 0F .byte 0xf
+ 3269 0519 00 .byte 0x0
+ 3270 051a 02 .uleb128 0x2
+ 3271 051b 08 .byte 0x8
+ 3272 051c 05 .byte 0x5
+ 3273 051d 00000000 .long .LASF73
+ 3274 0521 02 .uleb128 0x2
+ 3275 0522 04 .byte 0x4
+ 3276 0523 04 .byte 0x4
+ 3277 0524 00000000 .long .LASF74
+ 3278 0528 0A .uleb128 0xa
+
GAS LISTING /tmp/ccq6ONvw.s page 86
+
+
+ 3279 0529 08 .byte 0x8
+ 3280 052a C1000000 .long 0xc1
+ 3281 052e 02 .uleb128 0x2
+ 3282 052f 08 .byte 0x8
+ 3283 0530 07 .byte 0x7
+ 3284 0531 00000000 .long .LASF75
+ 3285 0535 16 .uleb128 0x16
+ 3286 0536 C1000000 .long 0xc1
+ 3287 053a 45050000 .long 0x545
+ 3288 053e 17 .uleb128 0x17
+ 3289 053f B1000000 .long 0xb1
+ 3290 0543 1F .byte 0x1f
+ 3291 0544 00 .byte 0x0
+ 3292 0545 02 .uleb128 0x2
+ 3293 0546 08 .byte 0x8
+ 3294 0547 04 .byte 0x4
+ 3295 0548 00000000 .long .LASF76
+ 3296 054c 04 .uleb128 0x4
+ 3297 054d 00000000 .long .LASF77
+ 3298 0551 09 .byte 0x9
+ 3299 0552 26 .byte 0x26
+ 3300 0553 57050000 .long 0x557
+ 3301 0557 18 .uleb128 0x18
+ 3302 0558 01 .byte 0x1
+ 3303 0559 49000000 .long 0x49
+ 3304 055d 68050000 .long 0x568
+ 3305 0561 17 .uleb128 0x17
+ 3306 0562 B1000000 .long 0xb1
+ 3307 0566 0F .byte 0xf
+ 3308 0567 00 .byte 0x0
+ 3309 0568 04 .uleb128 0x4
+ 3310 0569 00000000 .long .LASF78
+ 3311 056d 08 .byte 0x8
+ 3312 056e 3B .byte 0x3b
+ 3313 056f 4C050000 .long 0x54c
+ 3314 0573 04 .uleb128 0x4
+ 3315 0574 00000000 .long .LASF79
+ 3316 0578 08 .byte 0x8
+ 3317 0579 43 .byte 0x43
+ 3318 057a 7E050000 .long 0x57e
+ 3319 057e 05 .uleb128 0x5
+ 3320 057f 00000000 .long .LASF79
+ 3321 0583 08 .byte 0x8
+ 3322 0584 08 .byte 0x8
+ 3323 0585 43 .byte 0x43
+ 3324 0586 A7050000 .long 0x5a7
+ 3325 058a 0E .uleb128 0xe
+ 3326 058b 6D616A00 .string "maj"
+ 3327 058f 08 .byte 0x8
+ 3328 0590 46 .byte 0x46
+ 3329 0591 62000000 .long 0x62
+ 3330 0595 02 .byte 0x2
+ 3331 0596 23 .byte 0x23
+ 3332 0597 00 .uleb128 0x0
+ 3333 0598 0E .uleb128 0xe
+ 3334 0599 6D696E00 .string "min"
+ 3335 059d 08 .byte 0x8
+
GAS LISTING /tmp/ccq6ONvw.s page 87
+
+
+ 3336 059e 47 .byte 0x47
+ 3337 059f 62000000 .long 0x62
+ 3338 05a3 02 .byte 0x2
+ 3339 05a4 23 .byte 0x23
+ 3340 05a5 04 .uleb128 0x4
+ 3341 05a6 00 .byte 0x0
+ 3342 05a7 04 .uleb128 0x4
+ 3343 05a8 00000000 .long .LASF80
+ 3344 05ac 08 .byte 0x8
+ 3345 05ad 52 .byte 0x52
+ 3346 05ae B2050000 .long 0x5b2
+ 3347 05b2 05 .uleb128 0x5
+ 3348 05b3 00000000 .long .LASF80
+ 3349 05b7 40 .byte 0x40
+ 3350 05b8 08 .byte 0x8
+ 3351 05b9 52 .byte 0x52
+ 3352 05ba 2F060000 .long 0x62f
+ 3353 05be 06 .uleb128 0x6
+ 3354 05bf 00000000 .long .LASF49
+ 3355 05c3 08 .byte 0x8
+ 3356 05c4 5E .byte 0x5e
+ 3357 05c5 73050000 .long 0x573
+ 3358 05c9 02 .byte 0x2
+ 3359 05ca 23 .byte 0x23
+ 3360 05cb 00 .uleb128 0x0
+ 3361 05cc 06 .uleb128 0x6
+ 3362 05cd 00000000 .long .LASF50
+ 3363 05d1 08 .byte 0x8
+ 3364 05d2 63 .byte 0x63
+ 3365 05d3 73060000 .long 0x673
+ 3366 05d7 02 .byte 0x2
+ 3367 05d8 23 .byte 0x23
+ 3368 05d9 08 .uleb128 0x8
+ 3369 05da 06 .uleb128 0x6
+ 3370 05db 00000000 .long .LASF36
+ 3371 05df 08 .byte 0x8
+ 3372 05e0 65 .byte 0x65
+ 3373 05e1 84060000 .long 0x684
+ 3374 05e5 02 .byte 0x2
+ 3375 05e6 23 .byte 0x23
+ 3376 05e7 10 .uleb128 0x10
+ 3377 05e8 06 .uleb128 0x6
+ 3378 05e9 00000000 .long .LASF81
+ 3379 05ed 08 .byte 0x8
+ 3380 05ee 67 .byte 0x67
+ 3381 05ef 84060000 .long 0x684
+ 3382 05f3 02 .byte 0x2
+ 3383 05f4 23 .byte 0x23
+ 3384 05f5 18 .uleb128 0x18
+ 3385 05f6 06 .uleb128 0x6
+ 3386 05f7 00000000 .long .LASF51
+ 3387 05fb 08 .byte 0x8
+ 3388 05fc 69 .byte 0x69
+ 3389 05fd A4060000 .long 0x6a4
+ 3390 0601 02 .byte 0x2
+ 3391 0602 23 .byte 0x23
+ 3392 0603 20 .uleb128 0x20
+
GAS LISTING /tmp/ccq6ONvw.s page 88
+
+
+ 3393 0604 06 .uleb128 0x6
+ 3394 0605 00000000 .long .LASF52
+ 3395 0609 08 .byte 0x8
+ 3396 060a 6D .byte 0x6d
+ 3397 060b A4060000 .long 0x6a4
+ 3398 060f 02 .byte 0x2
+ 3399 0610 23 .byte 0x23
+ 3400 0611 28 .uleb128 0x28
+ 3401 0612 06 .uleb128 0x6
+ 3402 0613 00000000 .long .LASF57
+ 3403 0617 08 .byte 0x8
+ 3404 0618 71 .byte 0x71
+ 3405 0619 C0060000 .long 0x6c0
+ 3406 061d 02 .byte 0x2
+ 3407 061e 23 .byte 0x23
+ 3408 061f 30 .uleb128 0x30
+ 3409 0620 06 .uleb128 0x6
+ 3410 0621 00000000 .long .LASF58
+ 3411 0625 08 .byte 0x8
+ 3412 0626 75 .byte 0x75
+ 3413 0627 C0060000 .long 0x6c0
+ 3414 062b 02 .byte 0x2
+ 3415 062c 23 .byte 0x23
+ 3416 062d 38 .uleb128 0x38
+ 3417 062e 00 .byte 0x0
+ 3418 062f 04 .uleb128 0x4
+ 3419 0630 00000000 .long .LASF82
+ 3420 0634 08 .byte 0x8
+ 3421 0635 53 .byte 0x53
+ 3422 0636 3A060000 .long 0x63a
+ 3423 063a 13 .uleb128 0x13
+ 3424 063b 00000000 .long .LASF82
+ 3425 063f 40 .byte 0x40
+ 3426 0640 08 .byte 0x8
+ 3427 0641 53 .byte 0x53
+ 3428 0642 5C060000 .long 0x65c
+ 3429 0646 14 .uleb128 0x14
+ 3430 0647 00000000 .long .LASF49
+ 3431 064b 08 .byte 0x8
+ 3432 064c 7F .byte 0x7f
+ 3433 064d 73050000 .long 0x573
+ 3434 0651 15 .uleb128 0x15
+ 3435 0652 763100 .string "v1"
+ 3436 0655 08 .byte 0x8
+ 3437 0656 80 .byte 0x80
+ 3438 0657 A7050000 .long 0x5a7
+ 3439 065b 00 .byte 0x0
+ 3440 065c 0F .uleb128 0xf
+ 3441 065d 01 .byte 0x1
+ 3442 065e 68060000 .long 0x668
+ 3443 0662 10 .uleb128 0x10
+ 3444 0663 68060000 .long 0x668
+ 3445 0667 00 .byte 0x0
+ 3446 0668 0A .uleb128 0xa
+ 3447 0669 08 .byte 0x8
+ 3448 066a 6E060000 .long 0x66e
+ 3449 066e 0B .uleb128 0xb
+
GAS LISTING /tmp/ccq6ONvw.s page 89
+
+
+ 3450 066f 2F060000 .long 0x62f
+ 3451 0673 0A .uleb128 0xa
+ 3452 0674 08 .byte 0x8
+ 3453 0675 5C060000 .long 0x65c
+ 3454 0679 19 .uleb128 0x19
+ 3455 067a 62000000 .long 0x62
+ 3456 067e 84060000 .long 0x684
+ 3457 0682 1A .uleb128 0x1a
+ 3458 0683 00 .byte 0x0
+ 3459 0684 0A .uleb128 0xa
+ 3460 0685 08 .byte 0x8
+ 3461 0686 79060000 .long 0x679
+ 3462 068a 11 .uleb128 0x11
+ 3463 068b 01 .byte 0x1
+ 3464 068c 7B000000 .long 0x7b
+ 3465 0690 A4060000 .long 0x6a4
+ 3466 0694 10 .uleb128 0x10
+ 3467 0695 B4000000 .long 0xb4
+ 3468 0699 10 .uleb128 0x10
+ 3469 069a B6000000 .long 0xb6
+ 3470 069e 10 .uleb128 0x10
+ 3471 069f 62000000 .long 0x62
+ 3472 06a3 00 .byte 0x0
+ 3473 06a4 0A .uleb128 0xa
+ 3474 06a5 08 .byte 0x8
+ 3475 06a6 8A060000 .long 0x68a
+ 3476 06aa 0F .uleb128 0xf
+ 3477 06ab 01 .byte 0x1
+ 3478 06ac C0060000 .long 0x6c0
+ 3479 06b0 10 .uleb128 0x10
+ 3480 06b1 B6000000 .long 0xb6
+ 3481 06b5 10 .uleb128 0x10
+ 3482 06b6 28050000 .long 0x528
+ 3483 06ba 10 .uleb128 0x10
+ 3484 06bb 1F040000 .long 0x41f
+ 3485 06bf 00 .byte 0x0
+ 3486 06c0 0A .uleb128 0xa
+ 3487 06c1 08 .byte 0x8
+ 3488 06c2 AA060000 .long 0x6aa
+ 3489 06c6 04 .uleb128 0x4
+ 3490 06c7 00000000 .long .LASF83
+ 3491 06cb 08 .byte 0x8
+ 3492 06cc 84 .byte 0x84
+ 3493 06cd D1060000 .long 0x6d1
+ 3494 06d1 05 .uleb128 0x5
+ 3495 06d2 00000000 .long .LASF83
+ 3496 06d6 40 .byte 0x40
+ 3497 06d7 08 .byte 0x8
+ 3498 06d8 84 .byte 0x84
+ 3499 06d9 4E070000 .long 0x74e
+ 3500 06dd 06 .uleb128 0x6
+ 3501 06de 00000000 .long .LASF49
+ 3502 06e2 08 .byte 0x8
+ 3503 06e3 90 .byte 0x90
+ 3504 06e4 73050000 .long 0x573
+ 3505 06e8 02 .byte 0x2
+ 3506 06e9 23 .byte 0x23
+
GAS LISTING /tmp/ccq6ONvw.s page 90
+
+
+ 3507 06ea 00 .uleb128 0x0
+ 3508 06eb 06 .uleb128 0x6
+ 3509 06ec 00000000 .long .LASF50
+ 3510 06f0 08 .byte 0x8
+ 3511 06f1 95 .byte 0x95
+ 3512 06f2 92070000 .long 0x792
+ 3513 06f6 02 .byte 0x2
+ 3514 06f7 23 .byte 0x23
+ 3515 06f8 08 .uleb128 0x8
+ 3516 06f9 06 .uleb128 0x6
+ 3517 06fa 00000000 .long .LASF36
+ 3518 06fe 08 .byte 0x8
+ 3519 06ff 97 .byte 0x97
+ 3520 0700 84060000 .long 0x684
+ 3521 0704 02 .byte 0x2
+ 3522 0705 23 .byte 0x23
+ 3523 0706 10 .uleb128 0x10
+ 3524 0707 06 .uleb128 0x6
+ 3525 0708 00000000 .long .LASF81
+ 3526 070c 08 .byte 0x8
+ 3527 070d 99 .byte 0x99
+ 3528 070e 84060000 .long 0x684
+ 3529 0712 02 .byte 0x2
+ 3530 0713 23 .byte 0x23
+ 3531 0714 18 .uleb128 0x18
+ 3532 0715 06 .uleb128 0x6
+ 3533 0716 00000000 .long .LASF51
+ 3534 071a 08 .byte 0x8
+ 3535 071b 9B .byte 0x9b
+ 3536 071c A4060000 .long 0x6a4
+ 3537 0720 02 .byte 0x2
+ 3538 0721 23 .byte 0x23
+ 3539 0722 20 .uleb128 0x20
+ 3540 0723 06 .uleb128 0x6
+ 3541 0724 00000000 .long .LASF52
+ 3542 0728 08 .byte 0x8
+ 3543 0729 9F .byte 0x9f
+ 3544 072a A4060000 .long 0x6a4
+ 3545 072e 02 .byte 0x2
+ 3546 072f 23 .byte 0x23
+ 3547 0730 28 .uleb128 0x28
+ 3548 0731 06 .uleb128 0x6
+ 3549 0732 00000000 .long .LASF57
+ 3550 0736 08 .byte 0x8
+ 3551 0737 A3 .byte 0xa3
+ 3552 0738 AD070000 .long 0x7ad
+ 3553 073c 02 .byte 0x2
+ 3554 073d 23 .byte 0x23
+ 3555 073e 30 .uleb128 0x30
+ 3556 073f 06 .uleb128 0x6
+ 3557 0740 00000000 .long .LASF58
+ 3558 0744 08 .byte 0x8
+ 3559 0745 A6 .byte 0xa6
+ 3560 0746 AD070000 .long 0x7ad
+ 3561 074a 02 .byte 0x2
+ 3562 074b 23 .byte 0x23
+ 3563 074c 38 .uleb128 0x38
+
GAS LISTING /tmp/ccq6ONvw.s page 91
+
+
+ 3564 074d 00 .byte 0x0
+ 3565 074e 04 .uleb128 0x4
+ 3566 074f 00000000 .long .LASF84
+ 3567 0753 08 .byte 0x8
+ 3568 0754 85 .byte 0x85
+ 3569 0755 59070000 .long 0x759
+ 3570 0759 13 .uleb128 0x13
+ 3571 075a 00000000 .long .LASF84
+ 3572 075e 40 .byte 0x40
+ 3573 075f 08 .byte 0x8
+ 3574 0760 85 .byte 0x85
+ 3575 0761 7B070000 .long 0x77b
+ 3576 0765 14 .uleb128 0x14
+ 3577 0766 00000000 .long .LASF49
+ 3578 076a 08 .byte 0x8
+ 3579 076b AF .byte 0xaf
+ 3580 076c 73050000 .long 0x573
+ 3581 0770 15 .uleb128 0x15
+ 3582 0771 763100 .string "v1"
+ 3583 0774 08 .byte 0x8
+ 3584 0775 B0 .byte 0xb0
+ 3585 0776 C6060000 .long 0x6c6
+ 3586 077a 00 .byte 0x0
+ 3587 077b 0F .uleb128 0xf
+ 3588 077c 01 .byte 0x1
+ 3589 077d 87070000 .long 0x787
+ 3590 0781 10 .uleb128 0x10
+ 3591 0782 87070000 .long 0x787
+ 3592 0786 00 .byte 0x0
+ 3593 0787 0A .uleb128 0xa
+ 3594 0788 08 .byte 0x8
+ 3595 0789 8D070000 .long 0x78d
+ 3596 078d 0B .uleb128 0xb
+ 3597 078e 4E070000 .long 0x74e
+ 3598 0792 0A .uleb128 0xa
+ 3599 0793 08 .byte 0x8
+ 3600 0794 7B070000 .long 0x77b
+ 3601 0798 11 .uleb128 0x11
+ 3602 0799 01 .byte 0x1
+ 3603 079a 68050000 .long 0x568
+ 3604 079e AD070000 .long 0x7ad
+ 3605 07a2 10 .uleb128 0x10
+ 3606 07a3 68050000 .long 0x568
+ 3607 07a7 10 .uleb128 0x10
+ 3608 07a8 1F040000 .long 0x41f
+ 3609 07ac 00 .byte 0x0
+ 3610 07ad 0A .uleb128 0xa
+ 3611 07ae 08 .byte 0x8
+ 3612 07af 98070000 .long 0x798
+ 3613 07b3 04 .uleb128 0x4
+ 3614 07b4 00000000 .long .LASF85
+ 3615 07b8 0A .byte 0xa
+ 3616 07b9 B0 .byte 0xb0
+ 3617 07ba BE070000 .long 0x7be
+ 3618 07be 1B .uleb128 0x1b
+ 3619 07bf 00000000 .long .LASF85
+ 3620 07c3 0001 .value 0x100
+
GAS LISTING /tmp/ccq6ONvw.s page 92
+
+
+ 3621 07c5 0A .byte 0xa
+ 3622 07c6 B0 .byte 0xb0
+ 3623 07c7 E9070000 .long 0x7e9
+ 3624 07cb 06 .uleb128 0x6
+ 3625 07cc 00000000 .long .LASF86
+ 3626 07d0 0A .byte 0xa
+ 3627 07d1 B3 .byte 0xb3
+ 3628 07d2 E9070000 .long 0x7e9
+ 3629 07d6 02 .byte 0x2
+ 3630 07d7 23 .byte 0x23
+ 3631 07d8 00 .uleb128 0x0
+ 3632 07d9 06 .uleb128 0x6
+ 3633 07da 00000000 .long .LASF87
+ 3634 07de 0A .byte 0xa
+ 3635 07df B4 .byte 0xb4
+ 3636 07e0 62000000 .long 0x62
+ 3637 07e4 03 .byte 0x3
+ 3638 07e5 23 .byte 0x23
+ 3639 07e6 F001 .uleb128 0xf0
+ 3640 07e8 00 .byte 0x0
+ 3641 07e9 16 .uleb128 0x16
+ 3642 07ea 68050000 .long 0x568
+ 3643 07ee F9070000 .long 0x7f9
+ 3644 07f2 17 .uleb128 0x17
+ 3645 07f3 B1000000 .long 0xb1
+ 3646 07f7 0E .byte 0xe
+ 3647 07f8 00 .byte 0x0
+ 3648 07f9 04 .uleb128 0x4
+ 3649 07fa 00000000 .long .LASF88
+ 3650 07fe 0A .byte 0xa
+ 3651 07ff D2 .byte 0xd2
+ 3652 0800 04080000 .long 0x804
+ 3653 0804 1B .uleb128 0x1b
+ 3654 0805 00000000 .long .LASF88
+ 3655 0809 7002 .value 0x270
+ 3656 080b 0A .byte 0xa
+ 3657 080c D2 .byte 0xd2
+ 3658 080d 5B080000 .long 0x85b
+ 3659 0811 0E .uleb128 0xe
+ 3660 0812 64616400 .string "dad"
+ 3661 0816 0A .byte 0xa
+ 3662 0817 D5 .byte 0xd5
+ 3663 0818 54010000 .long 0x154
+ 3664 081c 02 .byte 0x2
+ 3665 081d 23 .byte 0x23
+ 3666 081e 00 .uleb128 0x0
+ 3667 081f 06 .uleb128 0x6
+ 3668 0820 00000000 .long .LASF89
+ 3669 0824 0A .byte 0xa
+ 3670 0825 D6 .byte 0xd6
+ 3671 0826 B3070000 .long 0x7b3
+ 3672 082a 02 .byte 0x2
+ 3673 082b 23 .byte 0x23
+ 3674 082c 50 .uleb128 0x50
+ 3675 082d 06 .uleb128 0x6
+ 3676 082e 00000000 .long .LASF90
+ 3677 0832 0A .byte 0xa
+
GAS LISTING /tmp/ccq6ONvw.s page 93
+
+
+ 3678 0833 D7 .byte 0xd7
+ 3679 0834 B3070000 .long 0x7b3
+ 3680 0838 03 .byte 0x3
+ 3681 0839 23 .byte 0x23
+ 3682 083a D002 .uleb128 0x150
+ 3683 083c 06 .uleb128 0x6
+ 3684 083d 00000000 .long .LASF91
+ 3685 0841 0A .byte 0xa
+ 3686 0842 D8 .byte 0xd8
+ 3687 0843 68050000 .long 0x568
+ 3688 0847 03 .byte 0x3
+ 3689 0848 23 .byte 0x23
+ 3690 0849 D004 .uleb128 0x250
+ 3691 084b 06 .uleb128 0x6
+ 3692 084c 00000000 .long .LASF92
+ 3693 0850 0A .byte 0xa
+ 3694 0851 D9 .byte 0xd9
+ 3695 0852 68050000 .long 0x568
+ 3696 0856 03 .byte 0x3
+ 3697 0857 23 .byte 0x23
+ 3698 0858 E004 .uleb128 0x260
+ 3699 085a 00 .byte 0x0
+ 3700 085b 04 .uleb128 0x4
+ 3701 085c 00000000 .long .LASF93
+ 3702 0860 0B .byte 0xb
+ 3703 0861 29 .byte 0x29
+ 3704 0862 66080000 .long 0x866
+ 3705 0866 05 .uleb128 0x5
+ 3706 0867 00000000 .long .LASF93
+ 3707 086b 70 .byte 0x70
+ 3708 086c 0B .byte 0xb
+ 3709 086d 29 .byte 0x29
+ 3710 086e 9D080000 .long 0x89d
+ 3711 0872 0E .uleb128 0xe
+ 3712 0873 64616400 .string "dad"
+ 3713 0877 0B .byte 0xb
+ 3714 0878 2C .byte 0x2c
+ 3715 0879 54010000 .long 0x154
+ 3716 087d 02 .byte 0x2
+ 3717 087e 23 .byte 0x23
+ 3718 087f 00 .uleb128 0x0
+ 3719 0880 06 .uleb128 0x6
+ 3720 0881 00000000 .long .LASF91
+ 3721 0885 0B .byte 0xb
+ 3722 0886 2D .byte 0x2d
+ 3723 0887 68050000 .long 0x568
+ 3724 088b 02 .byte 0x2
+ 3725 088c 23 .byte 0x23
+ 3726 088d 50 .uleb128 0x50
+ 3727 088e 06 .uleb128 0x6
+ 3728 088f 00000000 .long .LASF92
+ 3729 0893 0B .byte 0xb
+ 3730 0894 2E .byte 0x2e
+ 3731 0895 68050000 .long 0x568
+ 3732 0899 02 .byte 0x2
+ 3733 089a 23 .byte 0x23
+ 3734 089b 60 .uleb128 0x60
+
GAS LISTING /tmp/ccq6ONvw.s page 94
+
+
+ 3735 089c 00 .byte 0x0
+ 3736 089d 04 .uleb128 0x4
+ 3737 089e 00000000 .long .LASF94
+ 3738 08a2 0C .byte 0xc
+ 3739 08a3 48 .byte 0x48
+ 3740 08a4 62000000 .long 0x62
+ 3741 08a8 0C .uleb128 0xc
+ 3742 08a9 04 .byte 0x4
+ 3743 08aa 0C .byte 0xc
+ 3744 08ab 4A .byte 0x4a
+ 3745 08ac C3080000 .long 0x8c3
+ 3746 08b0 0D .uleb128 0xd
+ 3747 08b1 00000000 .long .LASF95
+ 3748 08b5 00 .sleb128 0
+ 3749 08b6 0D .uleb128 0xd
+ 3750 08b7 00000000 .long .LASF96
+ 3751 08bb 01 .sleb128 1
+ 3752 08bc 0D .uleb128 0xd
+ 3753 08bd 00000000 .long .LASF97
+ 3754 08c1 02 .sleb128 2
+ 3755 08c2 00 .byte 0x0
+ 3756 08c3 04 .uleb128 0x4
+ 3757 08c4 00000000 .long .LASF98
+ 3758 08c8 0E .byte 0xe
+ 3759 08c9 40 .byte 0x40
+ 3760 08ca CE080000 .long 0x8ce
+ 3761 08ce 13 .uleb128 0x13
+ 3762 08cf 00000000 .long .LASF98
+ 3763 08d3 40 .byte 0x40
+ 3764 08d4 0E .byte 0xe
+ 3765 08d5 40 .byte 0x40
+ 3766 08d6 F1080000 .long 0x8f1
+ 3767 08da 14 .uleb128 0x14
+ 3768 08db 00000000 .long .LASF99
+ 3769 08df 0E .byte 0xe
+ 3770 08e0 43 .byte 0x43
+ 3771 08e1 2F060000 .long 0x62f
+ 3772 08e5 15 .uleb128 0x15
+ 3773 08e6 76656300 .string "vec"
+ 3774 08ea 0E .byte 0xe
+ 3775 08eb 44 .byte 0x44
+ 3776 08ec 4E070000 .long 0x74e
+ 3777 08f0 00 .byte 0x0
+ 3778 08f1 1C .uleb128 0x1c
+ 3779 08f2 00000000 .long .LASF122
+ 3780 08f6 04 .byte 0x4
+ 3781 08f7 0F .byte 0xf
+ 3782 08f8 5A .byte 0x5a
+ 3783 08f9 82090000 .long 0x982
+ 3784 08fd 0D .uleb128 0xd
+ 3785 08fe 00000000 .long .LASF100
+ 3786 0902 00 .sleb128 0
+ 3787 0903 0D .uleb128 0xd
+ 3788 0904 00000000 .long .LASF101
+ 3789 0908 01 .sleb128 1
+ 3790 0909 0D .uleb128 0xd
+ 3791 090a 00000000 .long .LASF102
+
GAS LISTING /tmp/ccq6ONvw.s page 95
+
+
+ 3792 090e 02 .sleb128 2
+ 3793 090f 0D .uleb128 0xd
+ 3794 0910 00000000 .long .LASF103
+ 3795 0914 03 .sleb128 3
+ 3796 0915 0D .uleb128 0xd
+ 3797 0916 00000000 .long .LASF104
+ 3798 091a 04 .sleb128 4
+ 3799 091b 0D .uleb128 0xd
+ 3800 091c 00000000 .long .LASF105
+ 3801 0920 05 .sleb128 5
+ 3802 0921 0D .uleb128 0xd
+ 3803 0922 00000000 .long .LASF106
+ 3804 0926 06 .sleb128 6
+ 3805 0927 0D .uleb128 0xd
+ 3806 0928 00000000 .long .LASF107
+ 3807 092c 07 .sleb128 7
+ 3808 092d 0D .uleb128 0xd
+ 3809 092e 00000000 .long .LASF108
+ 3810 0932 08 .sleb128 8
+ 3811 0933 0D .uleb128 0xd
+ 3812 0934 00000000 .long .LASF109
+ 3813 0938 09 .sleb128 9
+ 3814 0939 0D .uleb128 0xd
+ 3815 093a 00000000 .long .LASF110
+ 3816 093e 0A .sleb128 10
+ 3817 093f 0D .uleb128 0xd
+ 3818 0940 00000000 .long .LASF111
+ 3819 0944 0B .sleb128 11
+ 3820 0945 0D .uleb128 0xd
+ 3821 0946 00000000 .long .LASF112
+ 3822 094a 0C .sleb128 12
+ 3823 094b 0D .uleb128 0xd
+ 3824 094c 00000000 .long .LASF113
+ 3825 0950 0D .sleb128 13
+ 3826 0951 0D .uleb128 0xd
+ 3827 0952 00000000 .long .LASF114
+ 3828 0956 0E .sleb128 14
+ 3829 0957 0D .uleb128 0xd
+ 3830 0958 00000000 .long .LASF115
+ 3831 095c 0E .sleb128 14
+ 3832 095d 0D .uleb128 0xd
+ 3833 095e 00000000 .long .LASF116
+ 3834 0962 0F .sleb128 15
+ 3835 0963 0D .uleb128 0xd
+ 3836 0964 00000000 .long .LASF117
+ 3837 0968 10 .sleb128 16
+ 3838 0969 0D .uleb128 0xd
+ 3839 096a 00000000 .long .LASF118
+ 3840 096e 11 .sleb128 17
+ 3841 096f 0D .uleb128 0xd
+ 3842 0970 00000000 .long .LASF119
+ 3843 0974 12 .sleb128 18
+ 3844 0975 0D .uleb128 0xd
+ 3845 0976 00000000 .long .LASF120
+ 3846 097a 13 .sleb128 19
+ 3847 097b 0D .uleb128 0xd
+ 3848 097c 00000000 .long .LASF121
+
GAS LISTING /tmp/ccq6ONvw.s page 96
+
+
+ 3849 0980 14 .sleb128 20
+ 3850 0981 00 .byte 0x0
+ 3851 0982 1C .uleb128 0x1c
+ 3852 0983 00000000 .long .LASF123
+ 3853 0987 04 .byte 0x4
+ 3854 0988 0F .byte 0xf
+ 3855 0989 77 .byte 0x77
+ 3856 098a 090B0000 .long 0xb09
+ 3857 098e 0D .uleb128 0xd
+ 3858 098f 00000000 .long .LASF124
+ 3859 0993 00 .sleb128 0
+ 3860 0994 0D .uleb128 0xd
+ 3861 0995 00000000 .long .LASF125
+ 3862 0999 01 .sleb128 1
+ 3863 099a 0D .uleb128 0xd
+ 3864 099b 00000000 .long .LASF126
+ 3865 099f 02 .sleb128 2
+ 3866 09a0 0D .uleb128 0xd
+ 3867 09a1 00000000 .long .LASF127
+ 3868 09a5 03 .sleb128 3
+ 3869 09a6 0D .uleb128 0xd
+ 3870 09a7 00000000 .long .LASF128
+ 3871 09ab 04 .sleb128 4
+ 3872 09ac 0D .uleb128 0xd
+ 3873 09ad 00000000 .long .LASF129
+ 3874 09b1 05 .sleb128 5
+ 3875 09b2 0D .uleb128 0xd
+ 3876 09b3 00000000 .long .LASF130
+ 3877 09b7 06 .sleb128 6
+ 3878 09b8 0D .uleb128 0xd
+ 3879 09b9 00000000 .long .LASF131
+ 3880 09bd 07 .sleb128 7
+ 3881 09be 0D .uleb128 0xd
+ 3882 09bf 00000000 .long .LASF132
+ 3883 09c3 08 .sleb128 8
+ 3884 09c4 0D .uleb128 0xd
+ 3885 09c5 00000000 .long .LASF133
+ 3886 09c9 09 .sleb128 9
+ 3887 09ca 0D .uleb128 0xd
+ 3888 09cb 00000000 .long .LASF134
+ 3889 09cf 0A .sleb128 10
+ 3890 09d0 0D .uleb128 0xd
+ 3891 09d1 00000000 .long .LASF135
+ 3892 09d5 0B .sleb128 11
+ 3893 09d6 0D .uleb128 0xd
+ 3894 09d7 00000000 .long .LASF136
+ 3895 09db 0C .sleb128 12
+ 3896 09dc 0D .uleb128 0xd
+ 3897 09dd 00000000 .long .LASF137
+ 3898 09e1 0D .sleb128 13
+ 3899 09e2 0D .uleb128 0xd
+ 3900 09e3 00000000 .long .LASF138
+ 3901 09e7 0E .sleb128 14
+ 3902 09e8 0D .uleb128 0xd
+ 3903 09e9 00000000 .long .LASF139
+ 3904 09ed 0F .sleb128 15
+ 3905 09ee 0D .uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s page 97
+
+
+ 3906 09ef 00000000 .long .LASF140
+ 3907 09f3 10 .sleb128 16
+ 3908 09f4 0D .uleb128 0xd
+ 3909 09f5 00000000 .long .LASF141
+ 3910 09f9 11 .sleb128 17
+ 3911 09fa 0D .uleb128 0xd
+ 3912 09fb 00000000 .long .LASF142
+ 3913 09ff 12 .sleb128 18
+ 3914 0a00 0D .uleb128 0xd
+ 3915 0a01 00000000 .long .LASF143
+ 3916 0a05 13 .sleb128 19
+ 3917 0a06 0D .uleb128 0xd
+ 3918 0a07 00000000 .long .LASF144
+ 3919 0a0b 14 .sleb128 20
+ 3920 0a0c 0D .uleb128 0xd
+ 3921 0a0d 00000000 .long .LASF145
+ 3922 0a11 15 .sleb128 21
+ 3923 0a12 0D .uleb128 0xd
+ 3924 0a13 00000000 .long .LASF146
+ 3925 0a17 16 .sleb128 22
+ 3926 0a18 0D .uleb128 0xd
+ 3927 0a19 00000000 .long .LASF147
+ 3928 0a1d 17 .sleb128 23
+ 3929 0a1e 0D .uleb128 0xd
+ 3930 0a1f 00000000 .long .LASF148
+ 3931 0a23 18 .sleb128 24
+ 3932 0a24 0D .uleb128 0xd
+ 3933 0a25 00000000 .long .LASF149
+ 3934 0a29 19 .sleb128 25
+ 3935 0a2a 0D .uleb128 0xd
+ 3936 0a2b 00000000 .long .LASF150
+ 3937 0a2f 1A .sleb128 26
+ 3938 0a30 0D .uleb128 0xd
+ 3939 0a31 00000000 .long .LASF151
+ 3940 0a35 1B .sleb128 27
+ 3941 0a36 0D .uleb128 0xd
+ 3942 0a37 00000000 .long .LASF152
+ 3943 0a3b 1C .sleb128 28
+ 3944 0a3c 0D .uleb128 0xd
+ 3945 0a3d 00000000 .long .LASF153
+ 3946 0a41 1D .sleb128 29
+ 3947 0a42 0D .uleb128 0xd
+ 3948 0a43 00000000 .long .LASF154
+ 3949 0a47 1E .sleb128 30
+ 3950 0a48 0D .uleb128 0xd
+ 3951 0a49 00000000 .long .LASF155
+ 3952 0a4d 1F .sleb128 31
+ 3953 0a4e 0D .uleb128 0xd
+ 3954 0a4f 00000000 .long .LASF156
+ 3955 0a53 20 .sleb128 32
+ 3956 0a54 0D .uleb128 0xd
+ 3957 0a55 00000000 .long .LASF157
+ 3958 0a59 21 .sleb128 33
+ 3959 0a5a 0D .uleb128 0xd
+ 3960 0a5b 00000000 .long .LASF158
+ 3961 0a5f 22 .sleb128 34
+ 3962 0a60 0D .uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s page 98
+
+
+ 3963 0a61 00000000 .long .LASF159
+ 3964 0a65 23 .sleb128 35
+ 3965 0a66 0D .uleb128 0xd
+ 3966 0a67 00000000 .long .LASF160
+ 3967 0a6b 24 .sleb128 36
+ 3968 0a6c 0D .uleb128 0xd
+ 3969 0a6d 00000000 .long .LASF161
+ 3970 0a71 25 .sleb128 37
+ 3971 0a72 0D .uleb128 0xd
+ 3972 0a73 00000000 .long .LASF162
+ 3973 0a77 26 .sleb128 38
+ 3974 0a78 0D .uleb128 0xd
+ 3975 0a79 00000000 .long .LASF163
+ 3976 0a7d 27 .sleb128 39
+ 3977 0a7e 0D .uleb128 0xd
+ 3978 0a7f 00000000 .long .LASF164
+ 3979 0a83 28 .sleb128 40
+ 3980 0a84 0D .uleb128 0xd
+ 3981 0a85 00000000 .long .LASF165
+ 3982 0a89 29 .sleb128 41
+ 3983 0a8a 0D .uleb128 0xd
+ 3984 0a8b 00000000 .long .LASF166
+ 3985 0a8f 2A .sleb128 42
+ 3986 0a90 0D .uleb128 0xd
+ 3987 0a91 00000000 .long .LASF167
+ 3988 0a95 2B .sleb128 43
+ 3989 0a96 0D .uleb128 0xd
+ 3990 0a97 00000000 .long .LASF168
+ 3991 0a9b 2C .sleb128 44
+ 3992 0a9c 0D .uleb128 0xd
+ 3993 0a9d 00000000 .long .LASF169
+ 3994 0aa1 2D .sleb128 45
+ 3995 0aa2 0D .uleb128 0xd
+ 3996 0aa3 00000000 .long .LASF170
+ 3997 0aa7 2E .sleb128 46
+ 3998 0aa8 0D .uleb128 0xd
+ 3999 0aa9 00000000 .long .LASF171
+ 4000 0aad 2F .sleb128 47
+ 4001 0aae 0D .uleb128 0xd
+ 4002 0aaf 00000000 .long .LASF172
+ 4003 0ab3 30 .sleb128 48
+ 4004 0ab4 0D .uleb128 0xd
+ 4005 0ab5 00000000 .long .LASF173
+ 4006 0ab9 31 .sleb128 49
+ 4007 0aba 0D .uleb128 0xd
+ 4008 0abb 00000000 .long .LASF174
+ 4009 0abf 32 .sleb128 50
+ 4010 0ac0 0D .uleb128 0xd
+ 4011 0ac1 00000000 .long .LASF175
+ 4012 0ac5 33 .sleb128 51
+ 4013 0ac6 0D .uleb128 0xd
+ 4014 0ac7 00000000 .long .LASF176
+ 4015 0acb 34 .sleb128 52
+ 4016 0acc 0D .uleb128 0xd
+ 4017 0acd 00000000 .long .LASF177
+ 4018 0ad1 35 .sleb128 53
+ 4019 0ad2 0D .uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s page 99
+
+
+ 4020 0ad3 00000000 .long .LASF178
+ 4021 0ad7 36 .sleb128 54
+ 4022 0ad8 0D .uleb128 0xd
+ 4023 0ad9 00000000 .long .LASF179
+ 4024 0add 36 .sleb128 54
+ 4025 0ade 0D .uleb128 0xd
+ 4026 0adf 00000000 .long .LASF180
+ 4027 0ae3 37 .sleb128 55
+ 4028 0ae4 0D .uleb128 0xd
+ 4029 0ae5 00000000 .long .LASF181
+ 4030 0ae9 38 .sleb128 56
+ 4031 0aea 0D .uleb128 0xd
+ 4032 0aeb 00000000 .long .LASF182
+ 4033 0aef 39 .sleb128 57
+ 4034 0af0 0D .uleb128 0xd
+ 4035 0af1 00000000 .long .LASF183
+ 4036 0af5 3A .sleb128 58
+ 4037 0af6 0D .uleb128 0xd
+ 4038 0af7 00000000 .long .LASF184
+ 4039 0afb 3B .sleb128 59
+ 4040 0afc 0D .uleb128 0xd
+ 4041 0afd 00000000 .long .LASF185
+ 4042 0b01 3C .sleb128 60
+ 4043 0b02 0D .uleb128 0xd
+ 4044 0b03 00000000 .long .LASF186
+ 4045 0b07 3D .sleb128 61
+ 4046 0b08 00 .byte 0x0
+ 4047 0b09 1C .uleb128 0x1c
+ 4048 0b0a 00000000 .long .LASF187
+ 4049 0b0e 04 .byte 0x4
+ 4050 0b0f 0F .byte 0xf
+ 4051 0b10 BD .byte 0xbd
+ 4052 0b11 BF0C0000 .long 0xcbf
+ 4053 0b15 0D .uleb128 0xd
+ 4054 0b16 00000000 .long .LASF188
+ 4055 0b1a 00 .sleb128 0
+ 4056 0b1b 0D .uleb128 0xd
+ 4057 0b1c 00000000 .long .LASF189
+ 4058 0b20 01 .sleb128 1
+ 4059 0b21 0D .uleb128 0xd
+ 4060 0b22 00000000 .long .LASF190
+ 4061 0b26 02 .sleb128 2
+ 4062 0b27 0D .uleb128 0xd
+ 4063 0b28 00000000 .long .LASF191
+ 4064 0b2c 03 .sleb128 3
+ 4065 0b2d 0D .uleb128 0xd
+ 4066 0b2e 00000000 .long .LASF192
+ 4067 0b32 04 .sleb128 4
+ 4068 0b33 0D .uleb128 0xd
+ 4069 0b34 00000000 .long .LASF193
+ 4070 0b38 05 .sleb128 5
+ 4071 0b39 0D .uleb128 0xd
+ 4072 0b3a 00000000 .long .LASF194
+ 4073 0b3e 06 .sleb128 6
+ 4074 0b3f 0D .uleb128 0xd
+ 4075 0b40 00000000 .long .LASF195
+ 4076 0b44 07 .sleb128 7
+
GAS LISTING /tmp/ccq6ONvw.s page 100
+
+
+ 4077 0b45 0D .uleb128 0xd
+ 4078 0b46 00000000 .long .LASF196
+ 4079 0b4a 08 .sleb128 8
+ 4080 0b4b 0D .uleb128 0xd
+ 4081 0b4c 00000000 .long .LASF197
+ 4082 0b50 09 .sleb128 9
+ 4083 0b51 0D .uleb128 0xd
+ 4084 0b52 00000000 .long .LASF198
+ 4085 0b56 0A .sleb128 10
+ 4086 0b57 0D .uleb128 0xd
+ 4087 0b58 00000000 .long .LASF199
+ 4088 0b5c 0B .sleb128 11
+ 4089 0b5d 0D .uleb128 0xd
+ 4090 0b5e 00000000 .long .LASF200
+ 4091 0b62 0C .sleb128 12
+ 4092 0b63 0D .uleb128 0xd
+ 4093 0b64 00000000 .long .LASF201
+ 4094 0b68 0D .sleb128 13
+ 4095 0b69 0D .uleb128 0xd
+ 4096 0b6a 00000000 .long .LASF202
+ 4097 0b6e 0E .sleb128 14
+ 4098 0b6f 0D .uleb128 0xd
+ 4099 0b70 00000000 .long .LASF203
+ 4100 0b74 0F .sleb128 15
+ 4101 0b75 0D .uleb128 0xd
+ 4102 0b76 00000000 .long .LASF204
+ 4103 0b7a 10 .sleb128 16
+ 4104 0b7b 0D .uleb128 0xd
+ 4105 0b7c 00000000 .long .LASF205
+ 4106 0b80 11 .sleb128 17
+ 4107 0b81 0D .uleb128 0xd
+ 4108 0b82 00000000 .long .LASF206
+ 4109 0b86 12 .sleb128 18
+ 4110 0b87 0D .uleb128 0xd
+ 4111 0b88 00000000 .long .LASF207
+ 4112 0b8c 13 .sleb128 19
+ 4113 0b8d 0D .uleb128 0xd
+ 4114 0b8e 00000000 .long .LASF208
+ 4115 0b92 14 .sleb128 20
+ 4116 0b93 0D .uleb128 0xd
+ 4117 0b94 00000000 .long .LASF209
+ 4118 0b98 15 .sleb128 21
+ 4119 0b99 0D .uleb128 0xd
+ 4120 0b9a 00000000 .long .LASF210
+ 4121 0b9e 16 .sleb128 22
+ 4122 0b9f 0D .uleb128 0xd
+ 4123 0ba0 00000000 .long .LASF211
+ 4124 0ba4 17 .sleb128 23
+ 4125 0ba5 0D .uleb128 0xd
+ 4126 0ba6 00000000 .long .LASF212
+ 4127 0baa 18 .sleb128 24
+ 4128 0bab 0D .uleb128 0xd
+ 4129 0bac 00000000 .long .LASF213
+ 4130 0bb0 19 .sleb128 25
+ 4131 0bb1 0D .uleb128 0xd
+ 4132 0bb2 00000000 .long .LASF214
+ 4133 0bb6 1A .sleb128 26
+
GAS LISTING /tmp/ccq6ONvw.s page 101
+
+
+ 4134 0bb7 0D .uleb128 0xd
+ 4135 0bb8 00000000 .long .LASF215
+ 4136 0bbc 1B .sleb128 27
+ 4137 0bbd 0D .uleb128 0xd
+ 4138 0bbe 00000000 .long .LASF216
+ 4139 0bc2 1C .sleb128 28
+ 4140 0bc3 0D .uleb128 0xd
+ 4141 0bc4 00000000 .long .LASF217
+ 4142 0bc8 1D .sleb128 29
+ 4143 0bc9 0D .uleb128 0xd
+ 4144 0bca 00000000 .long .LASF218
+ 4145 0bce 1E .sleb128 30
+ 4146 0bcf 0D .uleb128 0xd
+ 4147 0bd0 00000000 .long .LASF219
+ 4148 0bd4 1F .sleb128 31
+ 4149 0bd5 0D .uleb128 0xd
+ 4150 0bd6 00000000 .long .LASF220
+ 4151 0bda 20 .sleb128 32
+ 4152 0bdb 0D .uleb128 0xd
+ 4153 0bdc 00000000 .long .LASF221
+ 4154 0be0 21 .sleb128 33
+ 4155 0be1 0D .uleb128 0xd
+ 4156 0be2 00000000 .long .LASF222
+ 4157 0be6 22 .sleb128 34
+ 4158 0be7 0D .uleb128 0xd
+ 4159 0be8 00000000 .long .LASF223
+ 4160 0bec 23 .sleb128 35
+ 4161 0bed 0D .uleb128 0xd
+ 4162 0bee 00000000 .long .LASF224
+ 4163 0bf2 24 .sleb128 36
+ 4164 0bf3 0D .uleb128 0xd
+ 4165 0bf4 00000000 .long .LASF225
+ 4166 0bf8 25 .sleb128 37
+ 4167 0bf9 0D .uleb128 0xd
+ 4168 0bfa 00000000 .long .LASF226
+ 4169 0bfe 26 .sleb128 38
+ 4170 0bff 0D .uleb128 0xd
+ 4171 0c00 00000000 .long .LASF227
+ 4172 0c04 27 .sleb128 39
+ 4173 0c05 0D .uleb128 0xd
+ 4174 0c06 00000000 .long .LASF228
+ 4175 0c0a 28 .sleb128 40
+ 4176 0c0b 0D .uleb128 0xd
+ 4177 0c0c 00000000 .long .LASF229
+ 4178 0c10 29 .sleb128 41
+ 4179 0c11 0D .uleb128 0xd
+ 4180 0c12 00000000 .long .LASF230
+ 4181 0c16 2A .sleb128 42
+ 4182 0c17 0D .uleb128 0xd
+ 4183 0c18 00000000 .long .LASF231
+ 4184 0c1c 2B .sleb128 43
+ 4185 0c1d 0D .uleb128 0xd
+ 4186 0c1e 00000000 .long .LASF232
+ 4187 0c22 2C .sleb128 44
+ 4188 0c23 0D .uleb128 0xd
+ 4189 0c24 00000000 .long .LASF233
+ 4190 0c28 2D .sleb128 45
+
GAS LISTING /tmp/ccq6ONvw.s page 102
+
+
+ 4191 0c29 0D .uleb128 0xd
+ 4192 0c2a 00000000 .long .LASF234
+ 4193 0c2e 2E .sleb128 46
+ 4194 0c2f 0D .uleb128 0xd
+ 4195 0c30 00000000 .long .LASF235
+ 4196 0c34 2F .sleb128 47
+ 4197 0c35 0D .uleb128 0xd
+ 4198 0c36 00000000 .long .LASF236
+ 4199 0c3a 30 .sleb128 48
+ 4200 0c3b 0D .uleb128 0xd
+ 4201 0c3c 00000000 .long .LASF237
+ 4202 0c40 31 .sleb128 49
+ 4203 0c41 0D .uleb128 0xd
+ 4204 0c42 00000000 .long .LASF238
+ 4205 0c46 32 .sleb128 50
+ 4206 0c47 0D .uleb128 0xd
+ 4207 0c48 00000000 .long .LASF239
+ 4208 0c4c 33 .sleb128 51
+ 4209 0c4d 0D .uleb128 0xd
+ 4210 0c4e 00000000 .long .LASF240
+ 4211 0c52 34 .sleb128 52
+ 4212 0c53 0D .uleb128 0xd
+ 4213 0c54 00000000 .long .LASF241
+ 4214 0c58 35 .sleb128 53
+ 4215 0c59 0D .uleb128 0xd
+ 4216 0c5a 00000000 .long .LASF242
+ 4217 0c5e 36 .sleb128 54
+ 4218 0c5f 0D .uleb128 0xd
+ 4219 0c60 00000000 .long .LASF243
+ 4220 0c64 37 .sleb128 55
+ 4221 0c65 0D .uleb128 0xd
+ 4222 0c66 00000000 .long .LASF244
+ 4223 0c6a 38 .sleb128 56
+ 4224 0c6b 0D .uleb128 0xd
+ 4225 0c6c 00000000 .long .LASF245
+ 4226 0c70 39 .sleb128 57
+ 4227 0c71 0D .uleb128 0xd
+ 4228 0c72 00000000 .long .LASF246
+ 4229 0c76 3A .sleb128 58
+ 4230 0c77 0D .uleb128 0xd
+ 4231 0c78 00000000 .long .LASF247
+ 4232 0c7c 3A .sleb128 58
+ 4233 0c7d 0D .uleb128 0xd
+ 4234 0c7e 00000000 .long .LASF248
+ 4235 0c82 3B .sleb128 59
+ 4236 0c83 0D .uleb128 0xd
+ 4237 0c84 00000000 .long .LASF249
+ 4238 0c88 3C .sleb128 60
+ 4239 0c89 0D .uleb128 0xd
+ 4240 0c8a 00000000 .long .LASF250
+ 4241 0c8e 3D .sleb128 61
+ 4242 0c8f 0D .uleb128 0xd
+ 4243 0c90 00000000 .long .LASF251
+ 4244 0c94 3E .sleb128 62
+ 4245 0c95 0D .uleb128 0xd
+ 4246 0c96 00000000 .long .LASF252
+ 4247 0c9a 3F .sleb128 63
+
GAS LISTING /tmp/ccq6ONvw.s page 103
+
+
+ 4248 0c9b 0D .uleb128 0xd
+ 4249 0c9c 00000000 .long .LASF253
+ 4250 0ca0 C000 .sleb128 64
+ 4251 0ca2 0D .uleb128 0xd
+ 4252 0ca3 00000000 .long .LASF254
+ 4253 0ca7 C100 .sleb128 65
+ 4254 0ca9 0D .uleb128 0xd
+ 4255 0caa 00000000 .long .LASF255
+ 4256 0cae C200 .sleb128 66
+ 4257 0cb0 0D .uleb128 0xd
+ 4258 0cb1 00000000 .long .LASF256
+ 4259 0cb5 C300 .sleb128 67
+ 4260 0cb7 0D .uleb128 0xd
+ 4261 0cb8 00000000 .long .LASF257
+ 4262 0cbc C400 .sleb128 68
+ 4263 0cbe 00 .byte 0x0
+ 4264 0cbf 1D .uleb128 0x1d
+ 4265 0cc0 00000000 .long .LASF258
+ 4266 0cc4 04 .byte 0x4
+ 4267 0cc5 0F .byte 0xf
+ 4268 0cc6 0A01 .value 0x10a
+ 4269 0cc8 BE0D0000 .long 0xdbe
+ 4270 0ccc 0D .uleb128 0xd
+ 4271 0ccd 00000000 .long .LASF259
+ 4272 0cd1 00 .sleb128 0
+ 4273 0cd2 0D .uleb128 0xd
+ 4274 0cd3 00000000 .long .LASF260
+ 4275 0cd7 3D .sleb128 61
+ 4276 0cd8 0D .uleb128 0xd
+ 4277 0cd9 00000000 .long .LASF261
+ 4278 0cdd 3E .sleb128 62
+ 4279 0cde 0D .uleb128 0xd
+ 4280 0cdf 00000000 .long .LASF262
+ 4281 0ce3 3F .sleb128 63
+ 4282 0ce4 0D .uleb128 0xd
+ 4283 0ce5 00000000 .long .LASF263
+ 4284 0ce9 C000 .sleb128 64
+ 4285 0ceb 0D .uleb128 0xd
+ 4286 0cec 00000000 .long .LASF264
+ 4287 0cf0 C100 .sleb128 65
+ 4288 0cf2 0D .uleb128 0xd
+ 4289 0cf3 00000000 .long .LASF265
+ 4290 0cf7 C200 .sleb128 66
+ 4291 0cf9 0D .uleb128 0xd
+ 4292 0cfa 00000000 .long .LASF266
+ 4293 0cfe C300 .sleb128 67
+ 4294 0d00 0D .uleb128 0xd
+ 4295 0d01 00000000 .long .LASF267
+ 4296 0d05 C400 .sleb128 68
+ 4297 0d07 0D .uleb128 0xd
+ 4298 0d08 00000000 .long .LASF268
+ 4299 0d0c C500 .sleb128 69
+ 4300 0d0e 0D .uleb128 0xd
+ 4301 0d0f 00000000 .long .LASF269
+ 4302 0d13 C600 .sleb128 70
+ 4303 0d15 0D .uleb128 0xd
+ 4304 0d16 00000000 .long .LASF270
+
GAS LISTING /tmp/ccq6ONvw.s page 104
+
+
+ 4305 0d1a C700 .sleb128 71
+ 4306 0d1c 0D .uleb128 0xd
+ 4307 0d1d 00000000 .long .LASF271
+ 4308 0d21 C800 .sleb128 72
+ 4309 0d23 0D .uleb128 0xd
+ 4310 0d24 00000000 .long .LASF272
+ 4311 0d28 C900 .sleb128 73
+ 4312 0d2a 0D .uleb128 0xd
+ 4313 0d2b 00000000 .long .LASF273
+ 4314 0d2f CA00 .sleb128 74
+ 4315 0d31 0D .uleb128 0xd
+ 4316 0d32 00000000 .long .LASF274
+ 4317 0d36 CB00 .sleb128 75
+ 4318 0d38 0D .uleb128 0xd
+ 4319 0d39 00000000 .long .LASF275
+ 4320 0d3d CC00 .sleb128 76
+ 4321 0d3f 0D .uleb128 0xd
+ 4322 0d40 00000000 .long .LASF276
+ 4323 0d44 CD00 .sleb128 77
+ 4324 0d46 0D .uleb128 0xd
+ 4325 0d47 00000000 .long .LASF277
+ 4326 0d4b CE00 .sleb128 78
+ 4327 0d4d 0D .uleb128 0xd
+ 4328 0d4e 00000000 .long .LASF278
+ 4329 0d52 CF00 .sleb128 79
+ 4330 0d54 0D .uleb128 0xd
+ 4331 0d55 00000000 .long .LASF279
+ 4332 0d59 D000 .sleb128 80
+ 4333 0d5b 0D .uleb128 0xd
+ 4334 0d5c 00000000 .long .LASF280
+ 4335 0d60 D100 .sleb128 81
+ 4336 0d62 0D .uleb128 0xd
+ 4337 0d63 00000000 .long .LASF281
+ 4338 0d67 D100 .sleb128 81
+ 4339 0d69 0D .uleb128 0xd
+ 4340 0d6a 00000000 .long .LASF282
+ 4341 0d6e D200 .sleb128 82
+ 4342 0d70 0D .uleb128 0xd
+ 4343 0d71 00000000 .long .LASF283
+ 4344 0d75 D300 .sleb128 83
+ 4345 0d77 0D .uleb128 0xd
+ 4346 0d78 00000000 .long .LASF284
+ 4347 0d7c D400 .sleb128 84
+ 4348 0d7e 0D .uleb128 0xd
+ 4349 0d7f 00000000 .long .LASF285
+ 4350 0d83 D500 .sleb128 85
+ 4351 0d85 0D .uleb128 0xd
+ 4352 0d86 00000000 .long .LASF286
+ 4353 0d8a D600 .sleb128 86
+ 4354 0d8c 0D .uleb128 0xd
+ 4355 0d8d 00000000 .long .LASF287
+ 4356 0d91 D700 .sleb128 87
+ 4357 0d93 0D .uleb128 0xd
+ 4358 0d94 00000000 .long .LASF288
+ 4359 0d98 D800 .sleb128 88
+ 4360 0d9a 0D .uleb128 0xd
+ 4361 0d9b 00000000 .long .LASF289
+
GAS LISTING /tmp/ccq6ONvw.s page 105
+
+
+ 4362 0d9f D900 .sleb128 89
+ 4363 0da1 0D .uleb128 0xd
+ 4364 0da2 00000000 .long .LASF290
+ 4365 0da6 DA00 .sleb128 90
+ 4366 0da8 0D .uleb128 0xd
+ 4367 0da9 00000000 .long .LASF291
+ 4368 0dad DB00 .sleb128 91
+ 4369 0daf 0D .uleb128 0xd
+ 4370 0db0 00000000 .long .LASF292
+ 4371 0db4 DC00 .sleb128 92
+ 4372 0db6 0D .uleb128 0xd
+ 4373 0db7 00000000 .long .LASF293
+ 4374 0dbb DD00 .sleb128 93
+ 4375 0dbd 00 .byte 0x0
+ 4376 0dbe 1D .uleb128 0x1d
+ 4377 0dbf 00000000 .long .LASF294
+ 4378 0dc3 04 .byte 0x4
+ 4379 0dc4 0F .byte 0xf
+ 4380 0dc5 3401 .value 0x134
+ 4381 0dc7 FE0E0000 .long 0xefe
+ 4382 0dcb 0D .uleb128 0xd
+ 4383 0dcc 00000000 .long .LASF295
+ 4384 0dd0 00 .sleb128 0
+ 4385 0dd1 0D .uleb128 0xd
+ 4386 0dd2 00000000 .long .LASF296
+ 4387 0dd6 01 .sleb128 1
+ 4388 0dd7 0D .uleb128 0xd
+ 4389 0dd8 00000000 .long .LASF297
+ 4390 0ddc 02 .sleb128 2
+ 4391 0ddd 0D .uleb128 0xd
+ 4392 0dde 00000000 .long .LASF298
+ 4393 0de2 03 .sleb128 3
+ 4394 0de3 0D .uleb128 0xd
+ 4395 0de4 00000000 .long .LASF299
+ 4396 0de8 04 .sleb128 4
+ 4397 0de9 0D .uleb128 0xd
+ 4398 0dea 00000000 .long .LASF300
+ 4399 0dee 05 .sleb128 5
+ 4400 0def 0D .uleb128 0xd
+ 4401 0df0 00000000 .long .LASF301
+ 4402 0df4 06 .sleb128 6
+ 4403 0df5 0D .uleb128 0xd
+ 4404 0df6 00000000 .long .LASF302
+ 4405 0dfa 07 .sleb128 7
+ 4406 0dfb 0D .uleb128 0xd
+ 4407 0dfc 00000000 .long .LASF303
+ 4408 0e00 08 .sleb128 8
+ 4409 0e01 0D .uleb128 0xd
+ 4410 0e02 00000000 .long .LASF304
+ 4411 0e06 09 .sleb128 9
+ 4412 0e07 0D .uleb128 0xd
+ 4413 0e08 00000000 .long .LASF305
+ 4414 0e0c 0A .sleb128 10
+ 4415 0e0d 0D .uleb128 0xd
+ 4416 0e0e 00000000 .long .LASF306
+ 4417 0e12 0B .sleb128 11
+ 4418 0e13 0D .uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s page 106
+
+
+ 4419 0e14 00000000 .long .LASF307
+ 4420 0e18 0C .sleb128 12
+ 4421 0e19 0D .uleb128 0xd
+ 4422 0e1a 00000000 .long .LASF308
+ 4423 0e1e 0D .sleb128 13
+ 4424 0e1f 0D .uleb128 0xd
+ 4425 0e20 00000000 .long .LASF309
+ 4426 0e24 0E .sleb128 14
+ 4427 0e25 0D .uleb128 0xd
+ 4428 0e26 00000000 .long .LASF310
+ 4429 0e2a 0F .sleb128 15
+ 4430 0e2b 0D .uleb128 0xd
+ 4431 0e2c 00000000 .long .LASF311
+ 4432 0e30 10 .sleb128 16
+ 4433 0e31 0D .uleb128 0xd
+ 4434 0e32 00000000 .long .LASF312
+ 4435 0e36 11 .sleb128 17
+ 4436 0e37 0D .uleb128 0xd
+ 4437 0e38 00000000 .long .LASF313
+ 4438 0e3c 12 .sleb128 18
+ 4439 0e3d 0D .uleb128 0xd
+ 4440 0e3e 00000000 .long .LASF314
+ 4441 0e42 13 .sleb128 19
+ 4442 0e43 0D .uleb128 0xd
+ 4443 0e44 00000000 .long .LASF315
+ 4444 0e48 14 .sleb128 20
+ 4445 0e49 0D .uleb128 0xd
+ 4446 0e4a 00000000 .long .LASF316
+ 4447 0e4e 15 .sleb128 21
+ 4448 0e4f 0D .uleb128 0xd
+ 4449 0e50 00000000 .long .LASF317
+ 4450 0e54 16 .sleb128 22
+ 4451 0e55 0D .uleb128 0xd
+ 4452 0e56 00000000 .long .LASF318
+ 4453 0e5a 17 .sleb128 23
+ 4454 0e5b 0D .uleb128 0xd
+ 4455 0e5c 00000000 .long .LASF319
+ 4456 0e60 18 .sleb128 24
+ 4457 0e61 0D .uleb128 0xd
+ 4458 0e62 00000000 .long .LASF320
+ 4459 0e66 19 .sleb128 25
+ 4460 0e67 0D .uleb128 0xd
+ 4461 0e68 00000000 .long .LASF321
+ 4462 0e6c 1A .sleb128 26
+ 4463 0e6d 0D .uleb128 0xd
+ 4464 0e6e 00000000 .long .LASF322
+ 4465 0e72 1B .sleb128 27
+ 4466 0e73 0D .uleb128 0xd
+ 4467 0e74 00000000 .long .LASF323
+ 4468 0e78 1C .sleb128 28
+ 4469 0e79 0D .uleb128 0xd
+ 4470 0e7a 00000000 .long .LASF324
+ 4471 0e7e 1D .sleb128 29
+ 4472 0e7f 0D .uleb128 0xd
+ 4473 0e80 00000000 .long .LASF325
+ 4474 0e84 1E .sleb128 30
+ 4475 0e85 0D .uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s page 107
+
+
+ 4476 0e86 00000000 .long .LASF326
+ 4477 0e8a 1F .sleb128 31
+ 4478 0e8b 0D .uleb128 0xd
+ 4479 0e8c 00000000 .long .LASF327
+ 4480 0e90 20 .sleb128 32
+ 4481 0e91 0D .uleb128 0xd
+ 4482 0e92 00000000 .long .LASF328
+ 4483 0e96 21 .sleb128 33
+ 4484 0e97 0D .uleb128 0xd
+ 4485 0e98 00000000 .long .LASF329
+ 4486 0e9c 22 .sleb128 34
+ 4487 0e9d 0D .uleb128 0xd
+ 4488 0e9e 00000000 .long .LASF330
+ 4489 0ea2 23 .sleb128 35
+ 4490 0ea3 0D .uleb128 0xd
+ 4491 0ea4 00000000 .long .LASF331
+ 4492 0ea8 24 .sleb128 36
+ 4493 0ea9 0D .uleb128 0xd
+ 4494 0eaa 00000000 .long .LASF332
+ 4495 0eae 25 .sleb128 37
+ 4496 0eaf 0D .uleb128 0xd
+ 4497 0eb0 00000000 .long .LASF333
+ 4498 0eb4 26 .sleb128 38
+ 4499 0eb5 0D .uleb128 0xd
+ 4500 0eb6 00000000 .long .LASF334
+ 4501 0eba 27 .sleb128 39
+ 4502 0ebb 0D .uleb128 0xd
+ 4503 0ebc 00000000 .long .LASF335
+ 4504 0ec0 28 .sleb128 40
+ 4505 0ec1 0D .uleb128 0xd
+ 4506 0ec2 00000000 .long .LASF336
+ 4507 0ec6 29 .sleb128 41
+ 4508 0ec7 0D .uleb128 0xd
+ 4509 0ec8 00000000 .long .LASF337
+ 4510 0ecc 29 .sleb128 41
+ 4511 0ecd 0D .uleb128 0xd
+ 4512 0ece 00000000 .long .LASF338
+ 4513 0ed2 2A .sleb128 42
+ 4514 0ed3 0D .uleb128 0xd
+ 4515 0ed4 00000000 .long .LASF339
+ 4516 0ed8 2B .sleb128 43
+ 4517 0ed9 0D .uleb128 0xd
+ 4518 0eda 00000000 .long .LASF340
+ 4519 0ede 2C .sleb128 44
+ 4520 0edf 0D .uleb128 0xd
+ 4521 0ee0 00000000 .long .LASF341
+ 4522 0ee4 2D .sleb128 45
+ 4523 0ee5 0D .uleb128 0xd
+ 4524 0ee6 00000000 .long .LASF342
+ 4525 0eea 2E .sleb128 46
+ 4526 0eeb 0D .uleb128 0xd
+ 4527 0eec 00000000 .long .LASF343
+ 4528 0ef0 2F .sleb128 47
+ 4529 0ef1 0D .uleb128 0xd
+ 4530 0ef2 00000000 .long .LASF344
+ 4531 0ef6 30 .sleb128 48
+ 4532 0ef7 0D .uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s page 108
+
+
+ 4533 0ef8 00000000 .long .LASF345
+ 4534 0efc 31 .sleb128 49
+ 4535 0efd 00 .byte 0x0
+ 4536 0efe 13 .uleb128 0x13
+ 4537 0eff 00000000 .long .LASF346
+ 4538 0f03 10 .byte 0x10
+ 4539 0f04 01 .byte 0x1
+ 4540 0f05 43 .byte 0x43
+ 4541 0f06 210F0000 .long 0xf21
+ 4542 0f0a 15 .uleb128 0x15
+ 4543 0f0b 76656300 .string "vec"
+ 4544 0f0f 01 .byte 0x1
+ 4545 0f10 44 .byte 0x44
+ 4546 0f11 68050000 .long 0x568
+ 4547 0f15 14 .uleb128 0x14
+ 4548 0f16 00000000 .long .LASF347
+ 4549 0f1a 01 .byte 0x1
+ 4550 0f1b 45 .byte 0x45
+ 4551 0f1c FF040000 .long 0x4ff
+ 4552 0f20 00 .byte 0x0
+ 4553 0f21 04 .uleb128 0x4
+ 4554 0f22 00000000 .long .LASF346
+ 4555 0f26 01 .byte 0x1
+ 4556 0f27 46 .byte 0x46
+ 4557 0f28 FE0E0000 .long 0xefe
+ 4558 0f2c 1E .uleb128 0x1e
+ 4559 0f2d 00000000 .long .LASF350
+ 4560 0f31 01 .byte 0x1
+ 4561 0f32 4B .byte 0x4b
+ 4562 0f33 01 .byte 0x1
+ 4563 0f34 68050000 .long 0x568
+ 4564 0f38 00000000 .quad .LFB508
+ 4564 00000000
+ 4565 0f40 00000000 .quad .LFE508
+ 4565 00000000
+ 4566 0f48 00000000 .long .LLST0
+ 4567 0f4c 6B0F0000 .long 0xf6b
+ 4568 0f50 1F .uleb128 0x1f
+ 4569 0f51 00000000 .long .LASF348
+ 4570 0f55 01 .byte 0x1
+ 4571 0f56 4B .byte 0x4b
+ 4572 0f57 1F040000 .long 0x41f
+ 4573 0f5b 02 .byte 0x2
+ 4574 0f5c 91 .byte 0x91
+ 4575 0f5d 58 .sleb128 -40
+ 4576 0f5e 20 .uleb128 0x20
+ 4577 0f5f 7500 .string "u"
+ 4578 0f61 01 .byte 0x1
+ 4579 0f62 56 .byte 0x56
+ 4580 0f63 210F0000 .long 0xf21
+ 4581 0f67 02 .byte 0x2
+ 4582 0f68 91 .byte 0x91
+ 4583 0f69 60 .sleb128 -32
+ 4584 0f6a 00 .byte 0x0
+ 4585 0f6b 21 .uleb128 0x21
+ 4586 0f6c 00000000 .long .LASF398
+ 4587 0f70 01 .byte 0x1
+
GAS LISTING /tmp/ccq6ONvw.s page 109
+
+
+ 4588 0f71 62 .byte 0x62
+ 4589 0f72 01 .byte 0x1
+ 4590 0f73 00000000 .quad .LFB509
+ 4590 00000000
+ 4591 0f7b 00000000 .quad .LFE509
+ 4591 00000000
+ 4592 0f83 00000000 .long .LLST1
+ 4593 0f87 B50F0000 .long 0xfb5
+ 4594 0f8b 22 .uleb128 0x22
+ 4595 0f8c 637600 .string "cv"
+ 4596 0f8f 01 .byte 0x1
+ 4597 0f90 62 .byte 0x62
+ 4598 0f91 B50F0000 .long 0xfb5
+ 4599 0f95 02 .byte 0x2
+ 4600 0f96 91 .byte 0x91
+ 4601 0f97 50 .sleb128 -48
+ 4602 0f98 1F .uleb128 0x1f
+ 4603 0f99 00000000 .long .LASF349
+ 4604 0f9d 01 .byte 0x1
+ 4605 0f9e 62 .byte 0x62
+ 4606 0f9f B4000000 .long 0xb4
+ 4607 0fa3 02 .byte 0x2
+ 4608 0fa4 91 .byte 0x91
+ 4609 0fa5 48 .sleb128 -56
+ 4610 0fa6 20 .uleb128 0x20
+ 4611 0fa7 6C637600 .string "lcv"
+ 4612 0fab 01 .byte 0x1
+ 4613 0fac 6B .byte 0x6b
+ 4614 0fad 68050000 .long 0x568
+ 4615 0fb1 02 .byte 0x2
+ 4616 0fb2 91 .byte 0x91
+ 4617 0fb3 60 .sleb128 -32
+ 4618 0fb4 00 .byte 0x0
+ 4619 0fb5 0B .uleb128 0xb
+ 4620 0fb6 68050000 .long 0x568
+ 4621 0fba 1E .uleb128 0x1e
+ 4622 0fbb 00000000 .long .LASF351
+ 4623 0fbf 01 .byte 0x1
+ 4624 0fc0 71 .byte 0x71
+ 4625 0fc1 01 .byte 0x1
+ 4626 0fc2 7B000000 .long 0x7b
+ 4627 0fc6 00000000 .quad .LFB510
+ 4627 00000000
+ 4628 0fce 00000000 .quad .LFE510
+ 4628 00000000
+ 4629 0fd6 00000000 .long .LLST2
+ 4630 0fda FA0F0000 .long 0xffa
+ 4631 0fde 1F .uleb128 0x1f
+ 4632 0fdf 00000000 .long .LASF352
+ 4633 0fe3 01 .byte 0x1
+ 4634 0fe4 71 .byte 0x71
+ 4635 0fe5 DE030000 .long 0x3de
+ 4636 0fe9 02 .byte 0x2
+ 4637 0fea 91 .byte 0x91
+ 4638 0feb 58 .sleb128 -40
+ 4639 0fec 20 .uleb128 0x20
+ 4640 0fed 726300 .string "rc"
+
GAS LISTING /tmp/ccq6ONvw.s page 110
+
+
+ 4641 0ff0 01 .byte 0x1
+ 4642 0ff1 73 .byte 0x73
+ 4643 0ff2 7B000000 .long 0x7b
+ 4644 0ff6 02 .byte 0x2
+ 4645 0ff7 91 .byte 0x91
+ 4646 0ff8 6C .sleb128 -20
+ 4647 0ff9 00 .byte 0x0
+ 4648 0ffa 1E .uleb128 0x1e
+ 4649 0ffb 00000000 .long .LASF353
+ 4650 0fff 01 .byte 0x1
+ 4651 1000 7E .byte 0x7e
+ 4652 1001 01 .byte 0x1
+ 4653 1002 7B000000 .long 0x7b
+ 4654 1006 00000000 .quad .LFB511
+ 4654 00000000
+ 4655 100e 00000000 .quad .LFE511
+ 4655 00000000
+ 4656 1016 00000000 .long .LLST3
+ 4657 101a 7F100000 .long 0x107f
+ 4658 101e 1F .uleb128 0x1f
+ 4659 101f 00000000 .long .LASF352
+ 4660 1023 01 .byte 0x1
+ 4661 1024 7E .byte 0x7e
+ 4662 1025 DE030000 .long 0x3de
+ 4663 1029 02 .byte 0x2
+ 4664 102a 91 .byte 0x91
+ 4665 102b 48 .sleb128 -56
+ 4666 102c 1F .uleb128 0x1f
+ 4667 102d 00000000 .long .LASF354
+ 4668 1031 01 .byte 0x1
+ 4669 1032 7F .byte 0x7f
+ 4670 1033 B6000000 .long 0xb6
+ 4671 1037 02 .byte 0x2
+ 4672 1038 91 .byte 0x91
+ 4673 1039 40 .sleb128 -64
+ 4674 103a 1F .uleb128 0x1f
+ 4675 103b 00000000 .long .LASF355
+ 4676 103f 01 .byte 0x1
+ 4677 1040 80 .byte 0x80
+ 4678 1041 62000000 .long 0x62
+ 4679 1045 03 .byte 0x3
+ 4680 1046 91 .byte 0x91
+ 4681 1047 BC7F .sleb128 -68
+ 4682 1049 20 .uleb128 0x20
+ 4683 104a 726300 .string "rc"
+ 4684 104d 01 .byte 0x1
+ 4685 104e 82 .byte 0x82
+ 4686 104f 7B000000 .long 0x7b
+ 4687 1053 02 .byte 0x2
+ 4688 1054 91 .byte 0x91
+ 4689 1055 5C .sleb128 -36
+ 4690 1056 23 .uleb128 0x23
+ 4691 1057 00000000 .long .LASF356
+ 4692 105b 8F100000 .long 0x108f
+ 4693 105f 01 .byte 0x1
+ 4694 1060 09 .byte 0x9
+ 4695 1061 03 .byte 0x3
+
GAS LISTING /tmp/ccq6ONvw.s page 111
+
+
+ 4696 1062 00000000 .quad __PRETTY_FUNCTION__.6562
+ 4696 00000000
+ 4697 106a 23 .uleb128 0x23
+ 4698 106b 00000000 .long .LASF357
+ 4699 106f 94100000 .long 0x1094
+ 4700 1073 01 .byte 0x1
+ 4701 1074 09 .byte 0x9
+ 4702 1075 03 .byte 0x3
+ 4703 1076 00000000 .quad __func__.6564
+ 4703 00000000
+ 4704 107e 00 .byte 0x0
+ 4705 107f 16 .uleb128 0x16
+ 4706 1080 C1000000 .long 0xc1
+ 4707 1084 8F100000 .long 0x108f
+ 4708 1088 17 .uleb128 0x17
+ 4709 1089 B1000000 .long 0xb1
+ 4710 108d 17 .byte 0x17
+ 4711 108e 00 .byte 0x0
+ 4712 108f 0B .uleb128 0xb
+ 4713 1090 7F100000 .long 0x107f
+ 4714 1094 0B .uleb128 0xb
+ 4715 1095 7F100000 .long 0x107f
+ 4716 1099 1E .uleb128 0x1e
+ 4717 109a 00000000 .long .LASF358
+ 4718 109e 01 .byte 0x1
+ 4719 109f 97 .byte 0x97
+ 4720 10a0 01 .byte 0x1
+ 4721 10a1 7B000000 .long 0x7b
+ 4722 10a5 00000000 .quad .LFB512
+ 4722 00000000
+ 4723 10ad 00000000 .quad .LFE512
+ 4723 00000000
+ 4724 10b5 00000000 .long .LLST4
+ 4725 10b9 1E110000 .long 0x111e
+ 4726 10bd 1F .uleb128 0x1f
+ 4727 10be 00000000 .long .LASF352
+ 4728 10c2 01 .byte 0x1
+ 4729 10c3 97 .byte 0x97
+ 4730 10c4 DE030000 .long 0x3de
+ 4731 10c8 02 .byte 0x2
+ 4732 10c9 91 .byte 0x91
+ 4733 10ca 48 .sleb128 -56
+ 4734 10cb 1F .uleb128 0x1f
+ 4735 10cc 00000000 .long .LASF354
+ 4736 10d0 01 .byte 0x1
+ 4737 10d1 98 .byte 0x98
+ 4738 10d2 B6000000 .long 0xb6
+ 4739 10d6 02 .byte 0x2
+ 4740 10d7 91 .byte 0x91
+ 4741 10d8 40 .sleb128 -64
+ 4742 10d9 1F .uleb128 0x1f
+ 4743 10da 00000000 .long .LASF355
+ 4744 10de 01 .byte 0x1
+ 4745 10df 99 .byte 0x99
+ 4746 10e0 62000000 .long 0x62
+ 4747 10e4 03 .byte 0x3
+ 4748 10e5 91 .byte 0x91
+
GAS LISTING /tmp/ccq6ONvw.s page 112
+
+
+ 4749 10e6 BC7F .sleb128 -68
+ 4750 10e8 20 .uleb128 0x20
+ 4751 10e9 726300 .string "rc"
+ 4752 10ec 01 .byte 0x1
+ 4753 10ed 9B .byte 0x9b
+ 4754 10ee 7B000000 .long 0x7b
+ 4755 10f2 02 .byte 0x2
+ 4756 10f3 91 .byte 0x91
+ 4757 10f4 5C .sleb128 -36
+ 4758 10f5 23 .uleb128 0x23
+ 4759 10f6 00000000 .long .LASF356
+ 4760 10fa 1E110000 .long 0x111e
+ 4761 10fe 01 .byte 0x1
+ 4762 10ff 09 .byte 0x9
+ 4763 1100 03 .byte 0x3
+ 4764 1101 00000000 .quad __PRETTY_FUNCTION__.6586
+ 4764 00000000
+ 4765 1109 23 .uleb128 0x23
+ 4766 110a 00000000 .long .LASF357
+ 4767 110e 23110000 .long 0x1123
+ 4768 1112 01 .byte 0x1
+ 4769 1113 09 .byte 0x9
+ 4770 1114 03 .byte 0x3
+ 4771 1115 00000000 .quad __func__.6588
+ 4771 00000000
+ 4772 111d 00 .byte 0x0
+ 4773 111e 0B .uleb128 0xb
+ 4774 111f 7F100000 .long 0x107f
+ 4775 1123 0B .uleb128 0xb
+ 4776 1124 7F100000 .long 0x107f
+ 4777 1128 1E .uleb128 0x1e
+ 4778 1129 00000000 .long .LASF359
+ 4779 112d 01 .byte 0x1
+ 4780 112e B1 .byte 0xb1
+ 4781 112f 01 .byte 0x1
+ 4782 1130 7B000000 .long 0x7b
+ 4783 1134 00000000 .quad .LFB513
+ 4783 00000000
+ 4784 113c 00000000 .quad .LFE513
+ 4784 00000000
+ 4785 1144 00000000 .long .LLST5
+ 4786 1148 7D110000 .long 0x117d
+ 4787 114c 1F .uleb128 0x1f
+ 4788 114d 00000000 .long .LASF352
+ 4789 1151 01 .byte 0x1
+ 4790 1152 B1 .byte 0xb1
+ 4791 1153 DE030000 .long 0x3de
+ 4792 1157 02 .byte 0x2
+ 4793 1158 91 .byte 0x91
+ 4794 1159 68 .sleb128 -24
+ 4795 115a 1F .uleb128 0x1f
+ 4796 115b 00000000 .long .LASF360
+ 4797 115f 01 .byte 0x1
+ 4798 1160 B2 .byte 0xb2
+ 4799 1161 1F040000 .long 0x41f
+ 4800 1165 02 .byte 0x2
+ 4801 1166 91 .byte 0x91
+
GAS LISTING /tmp/ccq6ONvw.s page 113
+
+
+ 4802 1167 60 .sleb128 -32
+ 4803 1168 23 .uleb128 0x23
+ 4804 1169 00000000 .long .LASF356
+ 4805 116d 8D110000 .long 0x118d
+ 4806 1171 01 .byte 0x1
+ 4807 1172 09 .byte 0x9
+ 4808 1173 03 .byte 0x3
+ 4809 1174 00000000 .quad __PRETTY_FUNCTION__.6608
+ 4809 00000000
+ 4810 117c 00 .byte 0x0
+ 4811 117d 16 .uleb128 0x16
+ 4812 117e C1000000 .long 0xc1
+ 4813 1182 8D110000 .long 0x118d
+ 4814 1186 17 .uleb128 0x17
+ 4815 1187 B1000000 .long 0xb1
+ 4816 118b 18 .byte 0x18
+ 4817 118c 00 .byte 0x0
+ 4818 118d 0B .uleb128 0xb
+ 4819 118e 7D110000 .long 0x117d
+ 4820 1192 1E .uleb128 0x1e
+ 4821 1193 00000000 .long .LASF361
+ 4822 1197 01 .byte 0x1
+ 4823 1198 BE .byte 0xbe
+ 4824 1199 01 .byte 0x1
+ 4825 119a 7B000000 .long 0x7b
+ 4826 119e 00000000 .quad .LFB514
+ 4826 00000000
+ 4827 11a6 00000000 .quad .LFE514
+ 4827 00000000
+ 4828 11ae 00000000 .long .LLST6
+ 4829 11b2 E7110000 .long 0x11e7
+ 4830 11b6 1F .uleb128 0x1f
+ 4831 11b7 00000000 .long .LASF352
+ 4832 11bb 01 .byte 0x1
+ 4833 11bc BE .byte 0xbe
+ 4834 11bd DE030000 .long 0x3de
+ 4835 11c1 02 .byte 0x2
+ 4836 11c2 91 .byte 0x91
+ 4837 11c3 68 .sleb128 -24
+ 4838 11c4 1F .uleb128 0x1f
+ 4839 11c5 00000000 .long .LASF360
+ 4840 11c9 01 .byte 0x1
+ 4841 11ca BF .byte 0xbf
+ 4842 11cb 1F040000 .long 0x41f
+ 4843 11cf 02 .byte 0x2
+ 4844 11d0 91 .byte 0x91
+ 4845 11d1 60 .sleb128 -32
+ 4846 11d2 23 .uleb128 0x23
+ 4847 11d3 00000000 .long .LASF356
+ 4848 11d7 E7110000 .long 0x11e7
+ 4849 11db 01 .byte 0x1
+ 4850 11dc 09 .byte 0x9
+ 4851 11dd 03 .byte 0x3
+ 4852 11de 00000000 .quad __PRETTY_FUNCTION__.6621
+ 4852 00000000
+ 4853 11e6 00 .byte 0x0
+ 4854 11e7 0B .uleb128 0xb
+
GAS LISTING /tmp/ccq6ONvw.s page 114
+
+
+ 4855 11e8 7D110000 .long 0x117d
+ 4856 11ec 1E .uleb128 0x1e
+ 4857 11ed 00000000 .long .LASF362
+ 4858 11f1 01 .byte 0x1
+ 4859 11f2 CB .byte 0xcb
+ 4860 11f3 01 .byte 0x1
+ 4861 11f4 7B000000 .long 0x7b
+ 4862 11f8 00000000 .quad .LFB515
+ 4862 00000000
+ 4863 1200 00000000 .quad .LFE515
+ 4863 00000000
+ 4864 1208 00000000 .long .LLST7
+ 4865 120c 41120000 .long 0x1241
+ 4866 1210 1F .uleb128 0x1f
+ 4867 1211 00000000 .long .LASF352
+ 4868 1215 01 .byte 0x1
+ 4869 1216 CB .byte 0xcb
+ 4870 1217 DE030000 .long 0x3de
+ 4871 121b 02 .byte 0x2
+ 4872 121c 91 .byte 0x91
+ 4873 121d 68 .sleb128 -24
+ 4874 121e 1F .uleb128 0x1f
+ 4875 121f 00000000 .long .LASF363
+ 4876 1223 01 .byte 0x1
+ 4877 1224 CC .byte 0xcc
+ 4878 1225 F7010000 .long 0x1f7
+ 4879 1229 02 .byte 0x2
+ 4880 122a 91 .byte 0x91
+ 4881 122b 60 .sleb128 -32
+ 4882 122c 23 .uleb128 0x23
+ 4883 122d 00000000 .long .LASF356
+ 4884 1231 41120000 .long 0x1241
+ 4885 1235 01 .byte 0x1
+ 4886 1236 09 .byte 0x9
+ 4887 1237 03 .byte 0x3
+ 4888 1238 00000000 .quad __PRETTY_FUNCTION__.6634
+ 4888 00000000
+ 4889 1240 00 .byte 0x0
+ 4890 1241 0B .uleb128 0xb
+ 4891 1242 35050000 .long 0x535
+ 4892 1246 1E .uleb128 0x1e
+ 4893 1247 00000000 .long .LASF364
+ 4894 124b 01 .byte 0x1
+ 4895 124c D8 .byte 0xd8
+ 4896 124d 01 .byte 0x1
+ 4897 124e 7B000000 .long 0x7b
+ 4898 1252 00000000 .quad .LFB516
+ 4898 00000000
+ 4899 125a 00000000 .quad .LFE516
+ 4899 00000000
+ 4900 1262 00000000 .long .LLST8
+ 4901 1266 9B120000 .long 0x129b
+ 4902 126a 1F .uleb128 0x1f
+ 4903 126b 00000000 .long .LASF352
+ 4904 126f 01 .byte 0x1
+ 4905 1270 D8 .byte 0xd8
+ 4906 1271 DE030000 .long 0x3de
+
GAS LISTING /tmp/ccq6ONvw.s page 115
+
+
+ 4907 1275 02 .byte 0x2
+ 4908 1276 91 .byte 0x91
+ 4909 1277 68 .sleb128 -24
+ 4910 1278 1F .uleb128 0x1f
+ 4911 1279 00000000 .long .LASF363
+ 4912 127d 01 .byte 0x1
+ 4913 127e D9 .byte 0xd9
+ 4914 127f F7010000 .long 0x1f7
+ 4915 1283 02 .byte 0x2
+ 4916 1284 91 .byte 0x91
+ 4917 1285 60 .sleb128 -32
+ 4918 1286 23 .uleb128 0x23
+ 4919 1287 00000000 .long .LASF356
+ 4920 128b 9B120000 .long 0x129b
+ 4921 128f 01 .byte 0x1
+ 4922 1290 09 .byte 0x9
+ 4923 1291 03 .byte 0x3
+ 4924 1292 00000000 .quad __PRETTY_FUNCTION__.6644
+ 4924 00000000
+ 4925 129a 00 .byte 0x0
+ 4926 129b 0B .uleb128 0xb
+ 4927 129c 35050000 .long 0x535
+ 4928 12a0 1E .uleb128 0x1e
+ 4929 12a1 00000000 .long .LASF365
+ 4930 12a5 01 .byte 0x1
+ 4931 12a6 E4 .byte 0xe4
+ 4932 12a7 01 .byte 0x1
+ 4933 12a8 68050000 .long 0x568
+ 4934 12ac 00000000 .quad .LFB517
+ 4934 00000000
+ 4935 12b4 00000000 .quad .LFE517
+ 4935 00000000
+ 4936 12bc 00000000 .long .LLST9
+ 4937 12c0 DF120000 .long 0x12df
+ 4938 12c4 1F .uleb128 0x1f
+ 4939 12c5 00000000 .long .LASF352
+ 4940 12c9 01 .byte 0x1
+ 4941 12ca E4 .byte 0xe4
+ 4942 12cb 61040000 .long 0x461
+ 4943 12cf 02 .byte 0x2
+ 4944 12d0 91 .byte 0x91
+ 4945 12d1 68 .sleb128 -24
+ 4946 12d2 22 .uleb128 0x22
+ 4947 12d3 637600 .string "cv"
+ 4948 12d6 01 .byte 0x1
+ 4949 12d7 E5 .byte 0xe5
+ 4950 12d8 68050000 .long 0x568
+ 4951 12dc 01 .byte 0x1
+ 4952 12dd 61 .byte 0x61
+ 4953 12de 00 .byte 0x0
+ 4954 12df 1E .uleb128 0x1e
+ 4955 12e0 00000000 .long .LASF366
+ 4956 12e4 01 .byte 0x1
+ 4957 12e5 EB .byte 0xeb
+ 4958 12e6 01 .byte 0x1
+ 4959 12e7 68050000 .long 0x568
+ 4960 12eb 00000000 .quad .LFB518
+
GAS LISTING /tmp/ccq6ONvw.s page 116
+
+
+ 4960 00000000
+ 4961 12f3 00000000 .quad .LFE518
+ 4961 00000000
+ 4962 12fb 00000000 .long .LLST10
+ 4963 12ff 1E130000 .long 0x131e
+ 4964 1303 1F .uleb128 0x1f
+ 4965 1304 00000000 .long .LASF352
+ 4966 1308 01 .byte 0x1
+ 4967 1309 EB .byte 0xeb
+ 4968 130a 61040000 .long 0x461
+ 4969 130e 02 .byte 0x2
+ 4970 130f 91 .byte 0x91
+ 4971 1310 68 .sleb128 -24
+ 4972 1311 22 .uleb128 0x22
+ 4973 1312 637600 .string "cv"
+ 4974 1315 01 .byte 0x1
+ 4975 1316 EC .byte 0xec
+ 4976 1317 68050000 .long 0x568
+ 4977 131b 01 .byte 0x1
+ 4978 131c 61 .byte 0x61
+ 4979 131d 00 .byte 0x0
+ 4980 131e 1E .uleb128 0x1e
+ 4981 131f 00000000 .long .LASF367
+ 4982 1323 01 .byte 0x1
+ 4983 1324 F2 .byte 0xf2
+ 4984 1325 01 .byte 0x1
+ 4985 1326 7B000000 .long 0x7b
+ 4986 132a 00000000 .quad .LFB519
+ 4986 00000000
+ 4987 1332 00000000 .quad .LFE519
+ 4987 00000000
+ 4988 133a 00000000 .long .LLST11
+ 4989 133e 79130000 .long 0x1379
+ 4990 1342 1F .uleb128 0x1f
+ 4991 1343 00000000 .long .LASF352
+ 4992 1347 01 .byte 0x1
+ 4993 1348 F2 .byte 0xf2
+ 4994 1349 61040000 .long 0x461
+ 4995 134d 02 .byte 0x2
+ 4996 134e 91 .byte 0x91
+ 4997 134f 58 .sleb128 -40
+ 4998 1350 22 .uleb128 0x22
+ 4999 1351 696E00 .string "in"
+ 5000 1354 01 .byte 0x1
+ 5001 1355 F3 .byte 0xf3
+ 5002 1356 1F040000 .long 0x41f
+ 5003 135a 02 .byte 0x2
+ 5004 135b 91 .byte 0x91
+ 5005 135c 50 .sleb128 -48
+ 5006 135d 22 .uleb128 0x22
+ 5007 135e 6F757400 .string "out"
+ 5008 1362 01 .byte 0x1
+ 5009 1363 F3 .byte 0xf3
+ 5010 1364 B4000000 .long 0xb4
+ 5011 1368 02 .byte 0x2
+ 5012 1369 91 .byte 0x91
+ 5013 136a 48 .sleb128 -56
+
GAS LISTING /tmp/ccq6ONvw.s page 117
+
+
+ 5014 136b 20 .uleb128 0x20
+ 5015 136c 637600 .string "cv"
+ 5016 136f 01 .byte 0x1
+ 5017 1370 F5 .byte 0xf5
+ 5018 1371 68050000 .long 0x568
+ 5019 1375 02 .byte 0x2
+ 5020 1376 91 .byte 0x91
+ 5021 1377 60 .sleb128 -32
+ 5022 1378 00 .byte 0x0
+ 5023 1379 1E .uleb128 0x1e
+ 5024 137a 00000000 .long .LASF368
+ 5025 137e 01 .byte 0x1
+ 5026 137f FE .byte 0xfe
+ 5027 1380 01 .byte 0x1
+ 5028 1381 7B000000 .long 0x7b
+ 5029 1385 00000000 .quad .LFB520
+ 5029 00000000
+ 5030 138d 00000000 .quad .LFE520
+ 5030 00000000
+ 5031 1395 00000000 .long .LLST12
+ 5032 1399 D5130000 .long 0x13d5
+ 5033 139d 1F .uleb128 0x1f
+ 5034 139e 00000000 .long .LASF352
+ 5035 13a2 01 .byte 0x1
+ 5036 13a3 FE .byte 0xfe
+ 5037 13a4 61040000 .long 0x461
+ 5038 13a8 02 .byte 0x2
+ 5039 13a9 91 .byte 0x91
+ 5040 13aa 58 .sleb128 -40
+ 5041 13ab 22 .uleb128 0x22
+ 5042 13ac 696E00 .string "in"
+ 5043 13af 01 .byte 0x1
+ 5044 13b0 FF .byte 0xff
+ 5045 13b1 1F040000 .long 0x41f
+ 5046 13b5 02 .byte 0x2
+ 5047 13b6 91 .byte 0x91
+ 5048 13b7 50 .sleb128 -48
+ 5049 13b8 22 .uleb128 0x22
+ 5050 13b9 6F757400 .string "out"
+ 5051 13bd 01 .byte 0x1
+ 5052 13be FF .byte 0xff
+ 5053 13bf B4000000 .long 0xb4
+ 5054 13c3 02 .byte 0x2
+ 5055 13c4 91 .byte 0x91
+ 5056 13c5 48 .sleb128 -56
+ 5057 13c6 24 .uleb128 0x24
+ 5058 13c7 637600 .string "cv"
+ 5059 13ca 01 .byte 0x1
+ 5060 13cb 0101 .value 0x101
+ 5061 13cd 68050000 .long 0x568
+ 5062 13d1 02 .byte 0x2
+ 5063 13d2 91 .byte 0x91
+ 5064 13d3 60 .sleb128 -32
+ 5065 13d4 00 .byte 0x0
+ 5066 13d5 25 .uleb128 0x25
+ 5067 13d6 00000000 .long .LASF369
+ 5068 13da 01 .byte 0x1
+
GAS LISTING /tmp/ccq6ONvw.s page 118
+
+
+ 5069 13db 0A01 .value 0x10a
+ 5070 13dd 01 .byte 0x1
+ 5071 13de 7B000000 .long 0x7b
+ 5072 13e2 00000000 .quad .LFB521
+ 5072 00000000
+ 5073 13ea 00000000 .quad .LFE521
+ 5073 00000000
+ 5074 13f2 00000000 .long .LLST13
+ 5075 13f6 5D140000 .long 0x145d
+ 5076 13fa 26 .uleb128 0x26
+ 5077 13fb 00000000 .long .LASF352
+ 5078 13ff 01 .byte 0x1
+ 5079 1400 0A01 .value 0x10a
+ 5080 1402 61040000 .long 0x461
+ 5081 1406 02 .byte 0x2
+ 5082 1407 91 .byte 0x91
+ 5083 1408 58 .sleb128 -40
+ 5084 1409 27 .uleb128 0x27
+ 5085 140a 696E00 .string "in"
+ 5086 140d 01 .byte 0x1
+ 5087 140e 0A01 .value 0x10a
+ 5088 1410 1F040000 .long 0x41f
+ 5089 1414 02 .byte 0x2
+ 5090 1415 91 .byte 0x91
+ 5091 1416 50 .sleb128 -48
+ 5092 1417 27 .uleb128 0x27
+ 5093 1418 6F757400 .string "out"
+ 5094 141c 01 .byte 0x1
+ 5095 141d 0A01 .value 0x10a
+ 5096 141f B4000000 .long 0xb4
+ 5097 1423 02 .byte 0x2
+ 5098 1424 91 .byte 0x91
+ 5099 1425 48 .sleb128 -56
+ 5100 1426 24 .uleb128 0x24
+ 5101 1427 726300 .string "rc"
+ 5102 142a 01 .byte 0x1
+ 5103 142b 0C01 .value 0x10c
+ 5104 142d 7B000000 .long 0x7b
+ 5105 1431 02 .byte 0x2
+ 5106 1432 91 .byte 0x91
+ 5107 1433 6C .sleb128 -20
+ 5108 1434 23 .uleb128 0x23
+ 5109 1435 00000000 .long .LASF356
+ 5110 1439 6D140000 .long 0x146d
+ 5111 143d 01 .byte 0x1
+ 5112 143e 09 .byte 0x9
+ 5113 143f 03 .byte 0x3
+ 5114 1440 00000000 .quad __PRETTY_FUNCTION__.6693
+ 5114 00000000
+ 5115 1448 23 .uleb128 0x23
+ 5116 1449 00000000 .long .LASF357
+ 5117 144d 72140000 .long 0x1472
+ 5118 1451 01 .byte 0x1
+ 5119 1452 09 .byte 0x9
+ 5120 1453 03 .byte 0x3
+ 5121 1454 00000000 .quad __func__.6694
+ 5121 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 119
+
+
+ 5122 145c 00 .byte 0x0
+ 5123 145d 16 .uleb128 0x16
+ 5124 145e C1000000 .long 0xc1
+ 5125 1462 6D140000 .long 0x146d
+ 5126 1466 17 .uleb128 0x17
+ 5127 1467 B1000000 .long 0xb1
+ 5128 146b 11 .byte 0x11
+ 5129 146c 00 .byte 0x0
+ 5130 146d 0B .uleb128 0xb
+ 5131 146e 5D140000 .long 0x145d
+ 5132 1472 0B .uleb128 0xb
+ 5133 1473 5D140000 .long 0x145d
+ 5134 1477 25 .uleb128 0x25
+ 5135 1478 00000000 .long .LASF370
+ 5136 147c 01 .byte 0x1
+ 5137 147d 1E01 .value 0x11e
+ 5138 147f 01 .byte 0x1
+ 5139 1480 7B000000 .long 0x7b
+ 5140 1484 00000000 .quad .LFB522
+ 5140 00000000
+ 5141 148c 00000000 .quad .LFE522
+ 5141 00000000
+ 5142 1494 00000000 .long .LLST14
+ 5143 1498 FF140000 .long 0x14ff
+ 5144 149c 26 .uleb128 0x26
+ 5145 149d 00000000 .long .LASF352
+ 5146 14a1 01 .byte 0x1
+ 5147 14a2 1E01 .value 0x11e
+ 5148 14a4 61040000 .long 0x461
+ 5149 14a8 02 .byte 0x2
+ 5150 14a9 91 .byte 0x91
+ 5151 14aa 58 .sleb128 -40
+ 5152 14ab 27 .uleb128 0x27
+ 5153 14ac 696E00 .string "in"
+ 5154 14af 01 .byte 0x1
+ 5155 14b0 1E01 .value 0x11e
+ 5156 14b2 1F040000 .long 0x41f
+ 5157 14b6 02 .byte 0x2
+ 5158 14b7 91 .byte 0x91
+ 5159 14b8 50 .sleb128 -48
+ 5160 14b9 27 .uleb128 0x27
+ 5161 14ba 6F757400 .string "out"
+ 5162 14be 01 .byte 0x1
+ 5163 14bf 1E01 .value 0x11e
+ 5164 14c1 B4000000 .long 0xb4
+ 5165 14c5 02 .byte 0x2
+ 5166 14c6 91 .byte 0x91
+ 5167 14c7 48 .sleb128 -56
+ 5168 14c8 24 .uleb128 0x24
+ 5169 14c9 726300 .string "rc"
+ 5170 14cc 01 .byte 0x1
+ 5171 14cd 2001 .value 0x120
+ 5172 14cf 7B000000 .long 0x7b
+ 5173 14d3 02 .byte 0x2
+ 5174 14d4 91 .byte 0x91
+ 5175 14d5 6C .sleb128 -20
+ 5176 14d6 23 .uleb128 0x23
+
GAS LISTING /tmp/ccq6ONvw.s page 120
+
+
+ 5177 14d7 00000000 .long .LASF356
+ 5178 14db FF140000 .long 0x14ff
+ 5179 14df 01 .byte 0x1
+ 5180 14e0 09 .byte 0x9
+ 5181 14e1 03 .byte 0x3
+ 5182 14e2 00000000 .quad __PRETTY_FUNCTION__.6709
+ 5182 00000000
+ 5183 14ea 23 .uleb128 0x23
+ 5184 14eb 00000000 .long .LASF357
+ 5185 14ef 04150000 .long 0x1504
+ 5186 14f3 01 .byte 0x1
+ 5187 14f4 09 .byte 0x9
+ 5188 14f5 03 .byte 0x3
+ 5189 14f6 00000000 .quad __func__.6710
+ 5189 00000000
+ 5190 14fe 00 .byte 0x0
+ 5191 14ff 0B .uleb128 0xb
+ 5192 1500 5D140000 .long 0x145d
+ 5193 1504 0B .uleb128 0xb
+ 5194 1505 5D140000 .long 0x145d
+ 5195 1509 25 .uleb128 0x25
+ 5196 150a 00000000 .long .LASF371
+ 5197 150e 01 .byte 0x1
+ 5198 150f 5C01 .value 0x15c
+ 5199 1511 01 .byte 0x1
+ 5200 1512 7B000000 .long 0x7b
+ 5201 1516 00000000 .quad .LFB523
+ 5201 00000000
+ 5202 151e 00000000 .quad .LFE523
+ 5202 00000000
+ 5203 1526 00000000 .long .LLST15
+ 5204 152a 88150000 .long 0x1588
+ 5205 152e 26 .uleb128 0x26
+ 5206 152f 00000000 .long .LASF352
+ 5207 1533 01 .byte 0x1
+ 5208 1534 5C01 .value 0x15c
+ 5209 1536 61040000 .long 0x461
+ 5210 153a 02 .byte 0x2
+ 5211 153b 91 .byte 0x91
+ 5212 153c 58 .sleb128 -40
+ 5213 153d 27 .uleb128 0x27
+ 5214 153e 696E00 .string "in"
+ 5215 1541 01 .byte 0x1
+ 5216 1542 5C01 .value 0x15c
+ 5217 1544 1F040000 .long 0x41f
+ 5218 1548 02 .byte 0x2
+ 5219 1549 91 .byte 0x91
+ 5220 154a 50 .sleb128 -48
+ 5221 154b 27 .uleb128 0x27
+ 5222 154c 6F757400 .string "out"
+ 5223 1550 01 .byte 0x1
+ 5224 1551 5C01 .value 0x15c
+ 5225 1553 B4000000 .long 0xb4
+ 5226 1557 02 .byte 0x2
+ 5227 1558 91 .byte 0x91
+ 5228 1559 48 .sleb128 -56
+ 5229 155a 26 .uleb128 0x26
+
GAS LISTING /tmp/ccq6ONvw.s page 121
+
+
+ 5230 155b 00000000 .long .LASF372
+ 5231 155f 01 .byte 0x1
+ 5232 1560 5C01 .value 0x15c
+ 5233 1562 62000000 .long 0x62
+ 5234 1566 02 .byte 0x2
+ 5235 1567 91 .byte 0x91
+ 5236 1568 44 .sleb128 -60
+ 5237 1569 24 .uleb128 0x24
+ 5238 156a 70696E00 .string "pin"
+ 5239 156e 01 .byte 0x1
+ 5240 156f 5E01 .value 0x15e
+ 5241 1571 88150000 .long 0x1588
+ 5242 1575 02 .byte 0x2
+ 5243 1576 91 .byte 0x91
+ 5244 1577 60 .sleb128 -32
+ 5245 1578 28 .uleb128 0x28
+ 5246 1579 00000000 .long .LASF373
+ 5247 157d 01 .byte 0x1
+ 5248 157e 5F01 .value 0x15f
+ 5249 1580 93150000 .long 0x1593
+ 5250 1584 02 .byte 0x2
+ 5251 1585 91 .byte 0x91
+ 5252 1586 68 .sleb128 -24
+ 5253 1587 00 .byte 0x0
+ 5254 1588 0A .uleb128 0xa
+ 5255 1589 08 .byte 0x8
+ 5256 158a 8E150000 .long 0x158e
+ 5257 158e 0B .uleb128 0xb
+ 5258 158f 49000000 .long 0x49
+ 5259 1593 0A .uleb128 0xa
+ 5260 1594 08 .byte 0x8
+ 5261 1595 49000000 .long 0x49
+ 5262 1599 25 .uleb128 0x25
+ 5263 159a 00000000 .long .LASF374
+ 5264 159e 01 .byte 0x1
+ 5265 159f 6C01 .value 0x16c
+ 5266 15a1 01 .byte 0x1
+ 5267 15a2 7B000000 .long 0x7b
+ 5268 15a6 00000000 .quad .LFB524
+ 5268 00000000
+ 5269 15ae 00000000 .quad .LFE524
+ 5269 00000000
+ 5270 15b6 00000000 .long .LLST16
+ 5271 15ba 18160000 .long 0x1618
+ 5272 15be 26 .uleb128 0x26
+ 5273 15bf 00000000 .long .LASF352
+ 5274 15c3 01 .byte 0x1
+ 5275 15c4 6C01 .value 0x16c
+ 5276 15c6 61040000 .long 0x461
+ 5277 15ca 02 .byte 0x2
+ 5278 15cb 91 .byte 0x91
+ 5279 15cc 58 .sleb128 -40
+ 5280 15cd 27 .uleb128 0x27
+ 5281 15ce 696E00 .string "in"
+ 5282 15d1 01 .byte 0x1
+ 5283 15d2 6C01 .value 0x16c
+ 5284 15d4 1F040000 .long 0x41f
+
GAS LISTING /tmp/ccq6ONvw.s page 122
+
+
+ 5285 15d8 02 .byte 0x2
+ 5286 15d9 91 .byte 0x91
+ 5287 15da 50 .sleb128 -48
+ 5288 15db 27 .uleb128 0x27
+ 5289 15dc 6F757400 .string "out"
+ 5290 15e0 01 .byte 0x1
+ 5291 15e1 6C01 .value 0x16c
+ 5292 15e3 B4000000 .long 0xb4
+ 5293 15e7 02 .byte 0x2
+ 5294 15e8 91 .byte 0x91
+ 5295 15e9 48 .sleb128 -56
+ 5296 15ea 26 .uleb128 0x26
+ 5297 15eb 00000000 .long .LASF372
+ 5298 15ef 01 .byte 0x1
+ 5299 15f0 6C01 .value 0x16c
+ 5300 15f2 62000000 .long 0x62
+ 5301 15f6 02 .byte 0x2
+ 5302 15f7 91 .byte 0x91
+ 5303 15f8 44 .sleb128 -60
+ 5304 15f9 24 .uleb128 0x24
+ 5305 15fa 70696E00 .string "pin"
+ 5306 15fe 01 .byte 0x1
+ 5307 15ff 6E01 .value 0x16e
+ 5308 1601 88150000 .long 0x1588
+ 5309 1605 02 .byte 0x2
+ 5310 1606 91 .byte 0x91
+ 5311 1607 60 .sleb128 -32
+ 5312 1608 28 .uleb128 0x28
+ 5313 1609 00000000 .long .LASF373
+ 5314 160d 01 .byte 0x1
+ 5315 160e 6F01 .value 0x16f
+ 5316 1610 93150000 .long 0x1593
+ 5317 1614 02 .byte 0x2
+ 5318 1615 91 .byte 0x91
+ 5319 1616 68 .sleb128 -24
+ 5320 1617 00 .byte 0x0
+ 5321 1618 25 .uleb128 0x25
+ 5322 1619 00000000 .long .LASF375
+ 5323 161d 01 .byte 0x1
+ 5324 161e 8201 .value 0x182
+ 5325 1620 01 .byte 0x1
+ 5326 1621 7B000000 .long 0x7b
+ 5327 1625 00000000 .quad .LFB525
+ 5327 00000000
+ 5328 162d 00000000 .quad .LFE525
+ 5328 00000000
+ 5329 1635 00000000 .long .LLST17
+ 5330 1639 B8160000 .long 0x16b8
+ 5331 163d 26 .uleb128 0x26
+ 5332 163e 00000000 .long .LASF352
+ 5333 1642 01 .byte 0x1
+ 5334 1643 8201 .value 0x182
+ 5335 1645 DE030000 .long 0x3de
+ 5336 1649 03 .byte 0x3
+ 5337 164a 91 .byte 0x91
+ 5338 164b B87F .sleb128 -72
+ 5339 164d 27 .uleb128 0x27
+
GAS LISTING /tmp/ccq6ONvw.s page 123
+
+
+ 5340 164e 696E00 .string "in"
+ 5341 1651 01 .byte 0x1
+ 5342 1652 8201 .value 0x182
+ 5343 1654 1F040000 .long 0x41f
+ 5344 1658 03 .byte 0x3
+ 5345 1659 91 .byte 0x91
+ 5346 165a B07F .sleb128 -80
+ 5347 165c 27 .uleb128 0x27
+ 5348 165d 6F757400 .string "out"
+ 5349 1661 01 .byte 0x1
+ 5350 1662 8201 .value 0x182
+ 5351 1664 B4000000 .long 0xb4
+ 5352 1668 03 .byte 0x3
+ 5353 1669 91 .byte 0x91
+ 5354 166a A87F .sleb128 -88
+ 5355 166c 26 .uleb128 0x26
+ 5356 166d 00000000 .long .LASF372
+ 5357 1671 01 .byte 0x1
+ 5358 1672 8201 .value 0x182
+ 5359 1674 62000000 .long 0x62
+ 5360 1678 03 .byte 0x3
+ 5361 1679 91 .byte 0x91
+ 5362 167a A47F .sleb128 -92
+ 5363 167c 24 .uleb128 0x24
+ 5364 167d 637600 .string "cv"
+ 5365 1680 01 .byte 0x1
+ 5366 1681 8401 .value 0x184
+ 5367 1683 68050000 .long 0x568
+ 5368 1687 02 .byte 0x2
+ 5369 1688 91 .byte 0x91
+ 5370 1689 40 .sleb128 -64
+ 5371 168a 28 .uleb128 0x28
+ 5372 168b 00000000 .long .LASF360
+ 5373 168f 01 .byte 0x1
+ 5374 1690 8501 .value 0x185
+ 5375 1692 68050000 .long 0x568
+ 5376 1696 02 .byte 0x2
+ 5377 1697 91 .byte 0x91
+ 5378 1698 50 .sleb128 -48
+ 5379 1699 24 .uleb128 0x24
+ 5380 169a 70696E00 .string "pin"
+ 5381 169e 01 .byte 0x1
+ 5382 169f 8601 .value 0x186
+ 5383 16a1 88150000 .long 0x1588
+ 5384 16a5 02 .byte 0x2
+ 5385 16a6 91 .byte 0x91
+ 5386 16a7 60 .sleb128 -32
+ 5387 16a8 28 .uleb128 0x28
+ 5388 16a9 00000000 .long .LASF373
+ 5389 16ad 01 .byte 0x1
+ 5390 16ae 8701 .value 0x187
+ 5391 16b0 93150000 .long 0x1593
+ 5392 16b4 02 .byte 0x2
+ 5393 16b5 91 .byte 0x91
+ 5394 16b6 68 .sleb128 -24
+ 5395 16b7 00 .byte 0x0
+ 5396 16b8 25 .uleb128 0x25
+
GAS LISTING /tmp/ccq6ONvw.s page 124
+
+
+ 5397 16b9 00000000 .long .LASF376
+ 5398 16bd 01 .byte 0x1
+ 5399 16be A401 .value 0x1a4
+ 5400 16c0 01 .byte 0x1
+ 5401 16c1 7B000000 .long 0x7b
+ 5402 16c5 00000000 .quad .LFB526
+ 5402 00000000
+ 5403 16cd 00000000 .quad .LFE526
+ 5403 00000000
+ 5404 16d5 00000000 .long .LLST18
+ 5405 16d9 7A170000 .long 0x177a
+ 5406 16dd 26 .uleb128 0x26
+ 5407 16de 00000000 .long .LASF352
+ 5408 16e2 01 .byte 0x1
+ 5409 16e3 A401 .value 0x1a4
+ 5410 16e5 DE030000 .long 0x3de
+ 5411 16e9 03 .byte 0x3
+ 5412 16ea 91 .byte 0x91
+ 5413 16eb A87F .sleb128 -88
+ 5414 16ed 27 .uleb128 0x27
+ 5415 16ee 696E00 .string "in"
+ 5416 16f1 01 .byte 0x1
+ 5417 16f2 A401 .value 0x1a4
+ 5418 16f4 1F040000 .long 0x41f
+ 5419 16f8 03 .byte 0x3
+ 5420 16f9 91 .byte 0x91
+ 5421 16fa A07F .sleb128 -96
+ 5422 16fc 27 .uleb128 0x27
+ 5423 16fd 6F757400 .string "out"
+ 5424 1701 01 .byte 0x1
+ 5425 1702 A401 .value 0x1a4
+ 5426 1704 B4000000 .long 0xb4
+ 5427 1708 03 .byte 0x3
+ 5428 1709 91 .byte 0x91
+ 5429 170a 987F .sleb128 -104
+ 5430 170c 26 .uleb128 0x26
+ 5431 170d 00000000 .long .LASF372
+ 5432 1711 01 .byte 0x1
+ 5433 1712 A401 .value 0x1a4
+ 5434 1714 62000000 .long 0x62
+ 5435 1718 03 .byte 0x3
+ 5436 1719 91 .byte 0x91
+ 5437 171a 947F .sleb128 -108
+ 5438 171c 24 .uleb128 0x24
+ 5439 171d 637600 .string "cv"
+ 5440 1720 01 .byte 0x1
+ 5441 1721 A601 .value 0x1a6
+ 5442 1723 68050000 .long 0x568
+ 5443 1727 03 .byte 0x3
+ 5444 1728 91 .byte 0x91
+ 5445 1729 B07F .sleb128 -80
+ 5446 172b 28 .uleb128 0x28
+ 5447 172c 00000000 .long .LASF360
+ 5448 1730 01 .byte 0x1
+ 5449 1731 A701 .value 0x1a7
+ 5450 1733 68050000 .long 0x568
+ 5451 1737 02 .byte 0x2
+
GAS LISTING /tmp/ccq6ONvw.s page 125
+
+
+ 5452 1738 91 .byte 0x91
+ 5453 1739 40 .sleb128 -64
+ 5454 173a 24 .uleb128 0x24
+ 5455 173b 70696E00 .string "pin"
+ 5456 173f 01 .byte 0x1
+ 5457 1740 A801 .value 0x1a8
+ 5458 1742 88150000 .long 0x1588
+ 5459 1746 02 .byte 0x2
+ 5460 1747 91 .byte 0x91
+ 5461 1748 50 .sleb128 -48
+ 5462 1749 28 .uleb128 0x28
+ 5463 174a 00000000 .long .LASF373
+ 5464 174e 01 .byte 0x1
+ 5465 174f A901 .value 0x1a9
+ 5466 1751 93150000 .long 0x1593
+ 5467 1755 02 .byte 0x2
+ 5468 1756 91 .byte 0x91
+ 5469 1757 58 .sleb128 -40
+ 5470 1758 29 .uleb128 0x29
+ 5471 1759 00000000 .quad .LBB2
+ 5471 00000000
+ 5472 1761 00000000 .quad .LBE2
+ 5472 00000000
+ 5473 1769 28 .uleb128 0x28
+ 5474 176a 00000000 .long .LASF377
+ 5475 176e 01 .byte 0x1
+ 5476 176f B101 .value 0x1b1
+ 5477 1771 68050000 .long 0x568
+ 5478 1775 02 .byte 0x2
+ 5479 1776 91 .byte 0x91
+ 5480 1777 60 .sleb128 -32
+ 5481 1778 00 .byte 0x0
+ 5482 1779 00 .byte 0x0
+ 5483 177a 25 .uleb128 0x25
+ 5484 177b 00000000 .long .LASF378
+ 5485 177f 01 .byte 0x1
+ 5486 1780 CA01 .value 0x1ca
+ 5487 1782 01 .byte 0x1
+ 5488 1783 7B000000 .long 0x7b
+ 5489 1787 00000000 .quad .LFB527
+ 5489 00000000
+ 5490 178f 00000000 .quad .LFE527
+ 5490 00000000
+ 5491 1797 00000000 .long .LLST19
+ 5492 179b 3C180000 .long 0x183c
+ 5493 179f 26 .uleb128 0x26
+ 5494 17a0 00000000 .long .LASF352
+ 5495 17a4 01 .byte 0x1
+ 5496 17a5 CA01 .value 0x1ca
+ 5497 17a7 DE030000 .long 0x3de
+ 5498 17ab 03 .byte 0x3
+ 5499 17ac 91 .byte 0x91
+ 5500 17ad A87F .sleb128 -88
+ 5501 17af 27 .uleb128 0x27
+ 5502 17b0 696E00 .string "in"
+ 5503 17b3 01 .byte 0x1
+ 5504 17b4 CA01 .value 0x1ca
+
GAS LISTING /tmp/ccq6ONvw.s page 126
+
+
+ 5505 17b6 1F040000 .long 0x41f
+ 5506 17ba 03 .byte 0x3
+ 5507 17bb 91 .byte 0x91
+ 5508 17bc A07F .sleb128 -96
+ 5509 17be 27 .uleb128 0x27
+ 5510 17bf 6F757400 .string "out"
+ 5511 17c3 01 .byte 0x1
+ 5512 17c4 CA01 .value 0x1ca
+ 5513 17c6 B4000000 .long 0xb4
+ 5514 17ca 03 .byte 0x3
+ 5515 17cb 91 .byte 0x91
+ 5516 17cc 987F .sleb128 -104
+ 5517 17ce 26 .uleb128 0x26
+ 5518 17cf 00000000 .long .LASF372
+ 5519 17d3 01 .byte 0x1
+ 5520 17d4 CA01 .value 0x1ca
+ 5521 17d6 62000000 .long 0x62
+ 5522 17da 03 .byte 0x3
+ 5523 17db 91 .byte 0x91
+ 5524 17dc 947F .sleb128 -108
+ 5525 17de 24 .uleb128 0x24
+ 5526 17df 637600 .string "cv"
+ 5527 17e2 01 .byte 0x1
+ 5528 17e3 CD01 .value 0x1cd
+ 5529 17e5 68050000 .long 0x568
+ 5530 17e9 03 .byte 0x3
+ 5531 17ea 91 .byte 0x91
+ 5532 17eb B07F .sleb128 -80
+ 5533 17ed 28 .uleb128 0x28
+ 5534 17ee 00000000 .long .LASF360
+ 5535 17f2 01 .byte 0x1
+ 5536 17f3 CE01 .value 0x1ce
+ 5537 17f5 68050000 .long 0x568
+ 5538 17f9 02 .byte 0x2
+ 5539 17fa 91 .byte 0x91
+ 5540 17fb 40 .sleb128 -64
+ 5541 17fc 24 .uleb128 0x24
+ 5542 17fd 70696E00 .string "pin"
+ 5543 1801 01 .byte 0x1
+ 5544 1802 CF01 .value 0x1cf
+ 5545 1804 88150000 .long 0x1588
+ 5546 1808 02 .byte 0x2
+ 5547 1809 91 .byte 0x91
+ 5548 180a 50 .sleb128 -48
+ 5549 180b 28 .uleb128 0x28
+ 5550 180c 00000000 .long .LASF373
+ 5551 1810 01 .byte 0x1
+ 5552 1811 D001 .value 0x1d0
+ 5553 1813 93150000 .long 0x1593
+ 5554 1817 02 .byte 0x2
+ 5555 1818 91 .byte 0x91
+ 5556 1819 58 .sleb128 -40
+ 5557 181a 29 .uleb128 0x29
+ 5558 181b 00000000 .quad .LBB3
+ 5558 00000000
+ 5559 1823 00000000 .quad .LBE3
+ 5559 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 127
+
+
+ 5560 182b 28 .uleb128 0x28
+ 5561 182c 00000000 .long .LASF377
+ 5562 1830 01 .byte 0x1
+ 5563 1831 D801 .value 0x1d8
+ 5564 1833 68050000 .long 0x568
+ 5565 1837 02 .byte 0x2
+ 5566 1838 91 .byte 0x91
+ 5567 1839 60 .sleb128 -32
+ 5568 183a 00 .byte 0x0
+ 5569 183b 00 .byte 0x0
+ 5570 183c 25 .uleb128 0x25
+ 5571 183d 00000000 .long .LASF379
+ 5572 1841 01 .byte 0x1
+ 5573 1842 EB01 .value 0x1eb
+ 5574 1844 01 .byte 0x1
+ 5575 1845 7B000000 .long 0x7b
+ 5576 1849 00000000 .quad .LFB528
+ 5576 00000000
+ 5577 1851 00000000 .quad .LFE528
+ 5577 00000000
+ 5578 1859 00000000 .long .LLST20
+ 5579 185d FE180000 .long 0x18fe
+ 5580 1861 26 .uleb128 0x26
+ 5581 1862 00000000 .long .LASF352
+ 5582 1866 01 .byte 0x1
+ 5583 1867 EB01 .value 0x1eb
+ 5584 1869 DE030000 .long 0x3de
+ 5585 186d 03 .byte 0x3
+ 5586 186e 91 .byte 0x91
+ 5587 186f A87F .sleb128 -88
+ 5588 1871 27 .uleb128 0x27
+ 5589 1872 696E00 .string "in"
+ 5590 1875 01 .byte 0x1
+ 5591 1876 EB01 .value 0x1eb
+ 5592 1878 1F040000 .long 0x41f
+ 5593 187c 03 .byte 0x3
+ 5594 187d 91 .byte 0x91
+ 5595 187e A07F .sleb128 -96
+ 5596 1880 27 .uleb128 0x27
+ 5597 1881 6F757400 .string "out"
+ 5598 1885 01 .byte 0x1
+ 5599 1886 EB01 .value 0x1eb
+ 5600 1888 B4000000 .long 0xb4
+ 5601 188c 03 .byte 0x3
+ 5602 188d 91 .byte 0x91
+ 5603 188e 987F .sleb128 -104
+ 5604 1890 26 .uleb128 0x26
+ 5605 1891 00000000 .long .LASF372
+ 5606 1895 01 .byte 0x1
+ 5607 1896 EB01 .value 0x1eb
+ 5608 1898 62000000 .long 0x62
+ 5609 189c 03 .byte 0x3
+ 5610 189d 91 .byte 0x91
+ 5611 189e 947F .sleb128 -108
+ 5612 18a0 24 .uleb128 0x24
+ 5613 18a1 637600 .string "cv"
+ 5614 18a4 01 .byte 0x1
+
GAS LISTING /tmp/ccq6ONvw.s page 128
+
+
+ 5615 18a5 EE01 .value 0x1ee
+ 5616 18a7 68050000 .long 0x568
+ 5617 18ab 03 .byte 0x3
+ 5618 18ac 91 .byte 0x91
+ 5619 18ad B07F .sleb128 -80
+ 5620 18af 28 .uleb128 0x28
+ 5621 18b0 00000000 .long .LASF360
+ 5622 18b4 01 .byte 0x1
+ 5623 18b5 EF01 .value 0x1ef
+ 5624 18b7 68050000 .long 0x568
+ 5625 18bb 02 .byte 0x2
+ 5626 18bc 91 .byte 0x91
+ 5627 18bd 40 .sleb128 -64
+ 5628 18be 24 .uleb128 0x24
+ 5629 18bf 70696E00 .string "pin"
+ 5630 18c3 01 .byte 0x1
+ 5631 18c4 F001 .value 0x1f0
+ 5632 18c6 88150000 .long 0x1588
+ 5633 18ca 02 .byte 0x2
+ 5634 18cb 91 .byte 0x91
+ 5635 18cc 50 .sleb128 -48
+ 5636 18cd 28 .uleb128 0x28
+ 5637 18ce 00000000 .long .LASF373
+ 5638 18d2 01 .byte 0x1
+ 5639 18d3 F101 .value 0x1f1
+ 5640 18d5 93150000 .long 0x1593
+ 5641 18d9 02 .byte 0x2
+ 5642 18da 91 .byte 0x91
+ 5643 18db 58 .sleb128 -40
+ 5644 18dc 29 .uleb128 0x29
+ 5645 18dd 00000000 .quad .LBB4
+ 5645 00000000
+ 5646 18e5 00000000 .quad .LBE4
+ 5646 00000000
+ 5647 18ed 28 .uleb128 0x28
+ 5648 18ee 00000000 .long .LASF377
+ 5649 18f2 01 .byte 0x1
+ 5650 18f3 F901 .value 0x1f9
+ 5651 18f5 68050000 .long 0x568
+ 5652 18f9 02 .byte 0x2
+ 5653 18fa 91 .byte 0x91
+ 5654 18fb 60 .sleb128 -32
+ 5655 18fc 00 .byte 0x0
+ 5656 18fd 00 .byte 0x0
+ 5657 18fe 25 .uleb128 0x25
+ 5658 18ff 00000000 .long .LASF380
+ 5659 1903 01 .byte 0x1
+ 5660 1904 1002 .value 0x210
+ 5661 1906 01 .byte 0x1
+ 5662 1907 7B000000 .long 0x7b
+ 5663 190b 00000000 .quad .LFB529
+ 5663 00000000
+ 5664 1913 00000000 .quad .LFE529
+ 5664 00000000
+ 5665 191b 00000000 .long .LLST21
+ 5666 191f 9E190000 .long 0x199e
+ 5667 1923 26 .uleb128 0x26
+
GAS LISTING /tmp/ccq6ONvw.s page 129
+
+
+ 5668 1924 00000000 .long .LASF352
+ 5669 1928 01 .byte 0x1
+ 5670 1929 1002 .value 0x210
+ 5671 192b DE030000 .long 0x3de
+ 5672 192f 03 .byte 0x3
+ 5673 1930 91 .byte 0x91
+ 5674 1931 B87F .sleb128 -72
+ 5675 1933 27 .uleb128 0x27
+ 5676 1934 696E00 .string "in"
+ 5677 1937 01 .byte 0x1
+ 5678 1938 1002 .value 0x210
+ 5679 193a 1F040000 .long 0x41f
+ 5680 193e 03 .byte 0x3
+ 5681 193f 91 .byte 0x91
+ 5682 1940 B07F .sleb128 -80
+ 5683 1942 27 .uleb128 0x27
+ 5684 1943 6F757400 .string "out"
+ 5685 1947 01 .byte 0x1
+ 5686 1948 1002 .value 0x210
+ 5687 194a B4000000 .long 0xb4
+ 5688 194e 03 .byte 0x3
+ 5689 194f 91 .byte 0x91
+ 5690 1950 A87F .sleb128 -88
+ 5691 1952 26 .uleb128 0x26
+ 5692 1953 00000000 .long .LASF372
+ 5693 1957 01 .byte 0x1
+ 5694 1958 1002 .value 0x210
+ 5695 195a 62000000 .long 0x62
+ 5696 195e 03 .byte 0x3
+ 5697 195f 91 .byte 0x91
+ 5698 1960 A47F .sleb128 -92
+ 5699 1962 24 .uleb128 0x24
+ 5700 1963 637600 .string "cv"
+ 5701 1966 01 .byte 0x1
+ 5702 1967 1302 .value 0x213
+ 5703 1969 68050000 .long 0x568
+ 5704 196d 02 .byte 0x2
+ 5705 196e 91 .byte 0x91
+ 5706 196f 40 .sleb128 -64
+ 5707 1970 28 .uleb128 0x28
+ 5708 1971 00000000 .long .LASF360
+ 5709 1975 01 .byte 0x1
+ 5710 1976 1402 .value 0x214
+ 5711 1978 68050000 .long 0x568
+ 5712 197c 02 .byte 0x2
+ 5713 197d 91 .byte 0x91
+ 5714 197e 50 .sleb128 -48
+ 5715 197f 24 .uleb128 0x24
+ 5716 1980 70696E00 .string "pin"
+ 5717 1984 01 .byte 0x1
+ 5718 1985 1502 .value 0x215
+ 5719 1987 88150000 .long 0x1588
+ 5720 198b 02 .byte 0x2
+ 5721 198c 91 .byte 0x91
+ 5722 198d 60 .sleb128 -32
+ 5723 198e 28 .uleb128 0x28
+ 5724 198f 00000000 .long .LASF373
+
GAS LISTING /tmp/ccq6ONvw.s page 130
+
+
+ 5725 1993 01 .byte 0x1
+ 5726 1994 1602 .value 0x216
+ 5727 1996 93150000 .long 0x1593
+ 5728 199a 02 .byte 0x2
+ 5729 199b 91 .byte 0x91
+ 5730 199c 68 .sleb128 -24
+ 5731 199d 00 .byte 0x0
+ 5732 199e 25 .uleb128 0x25
+ 5733 199f 00000000 .long .LASF381
+ 5734 19a3 01 .byte 0x1
+ 5735 19a4 2E02 .value 0x22e
+ 5736 19a6 01 .byte 0x1
+ 5737 19a7 7B000000 .long 0x7b
+ 5738 19ab 00000000 .quad .LFB530
+ 5738 00000000
+ 5739 19b3 00000000 .quad .LFE530
+ 5739 00000000
+ 5740 19bb 00000000 .long .LLST22
+ 5741 19bf 3E1A0000 .long 0x1a3e
+ 5742 19c3 26 .uleb128 0x26
+ 5743 19c4 00000000 .long .LASF352
+ 5744 19c8 01 .byte 0x1
+ 5745 19c9 2E02 .value 0x22e
+ 5746 19cb DE030000 .long 0x3de
+ 5747 19cf 03 .byte 0x3
+ 5748 19d0 91 .byte 0x91
+ 5749 19d1 B87F .sleb128 -72
+ 5750 19d3 27 .uleb128 0x27
+ 5751 19d4 696E00 .string "in"
+ 5752 19d7 01 .byte 0x1
+ 5753 19d8 2E02 .value 0x22e
+ 5754 19da 1F040000 .long 0x41f
+ 5755 19de 03 .byte 0x3
+ 5756 19df 91 .byte 0x91
+ 5757 19e0 B07F .sleb128 -80
+ 5758 19e2 27 .uleb128 0x27
+ 5759 19e3 6F757400 .string "out"
+ 5760 19e7 01 .byte 0x1
+ 5761 19e8 2E02 .value 0x22e
+ 5762 19ea B4000000 .long 0xb4
+ 5763 19ee 03 .byte 0x3
+ 5764 19ef 91 .byte 0x91
+ 5765 19f0 A87F .sleb128 -88
+ 5766 19f2 26 .uleb128 0x26
+ 5767 19f3 00000000 .long .LASF372
+ 5768 19f7 01 .byte 0x1
+ 5769 19f8 2E02 .value 0x22e
+ 5770 19fa 62000000 .long 0x62
+ 5771 19fe 03 .byte 0x3
+ 5772 19ff 91 .byte 0x91
+ 5773 1a00 A47F .sleb128 -92
+ 5774 1a02 24 .uleb128 0x24
+ 5775 1a03 637600 .string "cv"
+ 5776 1a06 01 .byte 0x1
+ 5777 1a07 3102 .value 0x231
+ 5778 1a09 68050000 .long 0x568
+ 5779 1a0d 02 .byte 0x2
+
GAS LISTING /tmp/ccq6ONvw.s page 131
+
+
+ 5780 1a0e 91 .byte 0x91
+ 5781 1a0f 40 .sleb128 -64
+ 5782 1a10 28 .uleb128 0x28
+ 5783 1a11 00000000 .long .LASF360
+ 5784 1a15 01 .byte 0x1
+ 5785 1a16 3202 .value 0x232
+ 5786 1a18 68050000 .long 0x568
+ 5787 1a1c 02 .byte 0x2
+ 5788 1a1d 91 .byte 0x91
+ 5789 1a1e 50 .sleb128 -48
+ 5790 1a1f 24 .uleb128 0x24
+ 5791 1a20 70696E00 .string "pin"
+ 5792 1a24 01 .byte 0x1
+ 5793 1a25 3302 .value 0x233
+ 5794 1a27 88150000 .long 0x1588
+ 5795 1a2b 02 .byte 0x2
+ 5796 1a2c 91 .byte 0x91
+ 5797 1a2d 60 .sleb128 -32
+ 5798 1a2e 28 .uleb128 0x28
+ 5799 1a2f 00000000 .long .LASF373
+ 5800 1a33 01 .byte 0x1
+ 5801 1a34 3402 .value 0x234
+ 5802 1a36 93150000 .long 0x1593
+ 5803 1a3a 02 .byte 0x2
+ 5804 1a3b 91 .byte 0x91
+ 5805 1a3c 68 .sleb128 -24
+ 5806 1a3d 00 .byte 0x0
+ 5807 1a3e 25 .uleb128 0x25
+ 5808 1a3f 00000000 .long .LASF382
+ 5809 1a43 01 .byte 0x1
+ 5810 1a44 5102 .value 0x251
+ 5811 1a46 01 .byte 0x1
+ 5812 1a47 7B000000 .long 0x7b
+ 5813 1a4b 00000000 .quad .LFB531
+ 5813 00000000
+ 5814 1a53 00000000 .quad .LFE531
+ 5814 00000000
+ 5815 1a5b 00000000 .long .LLST23
+ 5816 1a5f DE1A0000 .long 0x1ade
+ 5817 1a63 26 .uleb128 0x26
+ 5818 1a64 00000000 .long .LASF352
+ 5819 1a68 01 .byte 0x1
+ 5820 1a69 5102 .value 0x251
+ 5821 1a6b DE030000 .long 0x3de
+ 5822 1a6f 03 .byte 0x3
+ 5823 1a70 91 .byte 0x91
+ 5824 1a71 B87F .sleb128 -72
+ 5825 1a73 27 .uleb128 0x27
+ 5826 1a74 696E00 .string "in"
+ 5827 1a77 01 .byte 0x1
+ 5828 1a78 5102 .value 0x251
+ 5829 1a7a 1F040000 .long 0x41f
+ 5830 1a7e 03 .byte 0x3
+ 5831 1a7f 91 .byte 0x91
+ 5832 1a80 B07F .sleb128 -80
+ 5833 1a82 27 .uleb128 0x27
+ 5834 1a83 6F757400 .string "out"
+
GAS LISTING /tmp/ccq6ONvw.s page 132
+
+
+ 5835 1a87 01 .byte 0x1
+ 5836 1a88 5102 .value 0x251
+ 5837 1a8a B4000000 .long 0xb4
+ 5838 1a8e 03 .byte 0x3
+ 5839 1a8f 91 .byte 0x91
+ 5840 1a90 A87F .sleb128 -88
+ 5841 1a92 26 .uleb128 0x26
+ 5842 1a93 00000000 .long .LASF372
+ 5843 1a97 01 .byte 0x1
+ 5844 1a98 5102 .value 0x251
+ 5845 1a9a 62000000 .long 0x62
+ 5846 1a9e 03 .byte 0x3
+ 5847 1a9f 91 .byte 0x91
+ 5848 1aa0 A47F .sleb128 -92
+ 5849 1aa2 24 .uleb128 0x24
+ 5850 1aa3 637600 .string "cv"
+ 5851 1aa6 01 .byte 0x1
+ 5852 1aa7 5402 .value 0x254
+ 5853 1aa9 68050000 .long 0x568
+ 5854 1aad 02 .byte 0x2
+ 5855 1aae 91 .byte 0x91
+ 5856 1aaf 40 .sleb128 -64
+ 5857 1ab0 28 .uleb128 0x28
+ 5858 1ab1 00000000 .long .LASF360
+ 5859 1ab5 01 .byte 0x1
+ 5860 1ab6 5502 .value 0x255
+ 5861 1ab8 68050000 .long 0x568
+ 5862 1abc 02 .byte 0x2
+ 5863 1abd 91 .byte 0x91
+ 5864 1abe 50 .sleb128 -48
+ 5865 1abf 24 .uleb128 0x24
+ 5866 1ac0 70696E00 .string "pin"
+ 5867 1ac4 01 .byte 0x1
+ 5868 1ac5 5602 .value 0x256
+ 5869 1ac7 88150000 .long 0x1588
+ 5870 1acb 02 .byte 0x2
+ 5871 1acc 91 .byte 0x91
+ 5872 1acd 60 .sleb128 -32
+ 5873 1ace 28 .uleb128 0x28
+ 5874 1acf 00000000 .long .LASF373
+ 5875 1ad3 01 .byte 0x1
+ 5876 1ad4 5702 .value 0x257
+ 5877 1ad6 93150000 .long 0x1593
+ 5878 1ada 02 .byte 0x2
+ 5879 1adb 91 .byte 0x91
+ 5880 1adc 68 .sleb128 -24
+ 5881 1add 00 .byte 0x0
+ 5882 1ade 25 .uleb128 0x25
+ 5883 1adf 00000000 .long .LASF383
+ 5884 1ae3 01 .byte 0x1
+ 5885 1ae4 6F02 .value 0x26f
+ 5886 1ae6 01 .byte 0x1
+ 5887 1ae7 7B000000 .long 0x7b
+ 5888 1aeb 00000000 .quad .LFB532
+ 5888 00000000
+ 5889 1af3 00000000 .quad .LFE532
+ 5889 00000000
+
GAS LISTING /tmp/ccq6ONvw.s page 133
+
+
+ 5890 1afb 00000000 .long .LLST24
+ 5891 1aff 3F1B0000 .long 0x1b3f
+ 5892 1b03 26 .uleb128 0x26
+ 5893 1b04 00000000 .long .LASF352
+ 5894 1b08 01 .byte 0x1
+ 5895 1b09 6F02 .value 0x26f
+ 5896 1b0b DE030000 .long 0x3de
+ 5897 1b0f 02 .byte 0x2
+ 5898 1b10 91 .byte 0x91
+ 5899 1b11 58 .sleb128 -40
+ 5900 1b12 27 .uleb128 0x27
+ 5901 1b13 696E00 .string "in"
+ 5902 1b16 01 .byte 0x1
+ 5903 1b17 6F02 .value 0x26f
+ 5904 1b19 1F040000 .long 0x41f
+ 5905 1b1d 02 .byte 0x2
+ 5906 1b1e 91 .byte 0x91
+ 5907 1b1f 50 .sleb128 -48
+ 5908 1b20 27 .uleb128 0x27
+ 5909 1b21 6F757400 .string "out"
+ 5910 1b25 01 .byte 0x1
+ 5911 1b26 6F02 .value 0x26f
+ 5912 1b28 B4000000 .long 0xb4
+ 5913 1b2c 02 .byte 0x2
+ 5914 1b2d 91 .byte 0x91
+ 5915 1b2e 48 .sleb128 -56
+ 5916 1b2f 26 .uleb128 0x26
+ 5917 1b30 00000000 .long .LASF372
+ 5918 1b34 01 .byte 0x1
+ 5919 1b35 6F02 .value 0x26f
+ 5920 1b37 62000000 .long 0x62
+ 5921 1b3b 02 .byte 0x2
+ 5922 1b3c 91 .byte 0x91
+ 5923 1b3d 44 .sleb128 -60
+ 5924 1b3e 00 .byte 0x0
+ 5925 1b3f 25 .uleb128 0x25
+ 5926 1b40 00000000 .long .LASF384
+ 5927 1b44 01 .byte 0x1
+ 5928 1b45 7D02 .value 0x27d
+ 5929 1b47 01 .byte 0x1
+ 5930 1b48 7B000000 .long 0x7b
+ 5931 1b4c 00000000 .quad .LFB533
+ 5931 00000000
+ 5932 1b54 00000000 .quad .LFE533
+ 5932 00000000
+ 5933 1b5c 00000000 .long .LLST25
+ 5934 1b60 C81B0000 .long 0x1bc8
+ 5935 1b64 26 .uleb128 0x26
+ 5936 1b65 00000000 .long .LASF352
+ 5937 1b69 01 .byte 0x1
+ 5938 1b6a 7D02 .value 0x27d
+ 5939 1b6c DE030000 .long 0x3de
+ 5940 1b70 02 .byte 0x2
+ 5941 1b71 91 .byte 0x91
+ 5942 1b72 68 .sleb128 -24
+ 5943 1b73 27 .uleb128 0x27
+ 5944 1b74 696E00 .string "in"
+
GAS LISTING /tmp/ccq6ONvw.s page 134
+
+
+ 5945 1b77 01 .byte 0x1
+ 5946 1b78 7D02 .value 0x27d
+ 5947 1b7a 1F040000 .long 0x41f
+ 5948 1b7e 02 .byte 0x2
+ 5949 1b7f 91 .byte 0x91
+ 5950 1b80 60 .sleb128 -32
+ 5951 1b81 27 .uleb128 0x27
+ 5952 1b82 6F757400 .string "out"
+ 5953 1b86 01 .byte 0x1
+ 5954 1b87 7D02 .value 0x27d
+ 5955 1b89 B4000000 .long 0xb4
+ 5956 1b8d 02 .byte 0x2
+ 5957 1b8e 91 .byte 0x91
+ 5958 1b8f 58 .sleb128 -40
+ 5959 1b90 26 .uleb128 0x26
+ 5960 1b91 00000000 .long .LASF372
+ 5961 1b95 01 .byte 0x1
+ 5962 1b96 7D02 .value 0x27d
+ 5963 1b98 62000000 .long 0x62
+ 5964 1b9c 02 .byte 0x2
+ 5965 1b9d 91 .byte 0x91
+ 5966 1b9e 54 .sleb128 -44
+ 5967 1b9f 23 .uleb128 0x23
+ 5968 1ba0 00000000 .long .LASF356
+ 5969 1ba4 D81B0000 .long 0x1bd8
+ 5970 1ba8 01 .byte 0x1
+ 5971 1ba9 09 .byte 0x9
+ 5972 1baa 03 .byte 0x3
+ 5973 1bab 00000000 .quad __PRETTY_FUNCTION__.6943
+ 5973 00000000
+ 5974 1bb3 23 .uleb128 0x23
+ 5975 1bb4 00000000 .long .LASF357
+ 5976 1bb8 DD1B0000 .long 0x1bdd
+ 5977 1bbc 01 .byte 0x1
+ 5978 1bbd 09 .byte 0x9
+ 5979 1bbe 03 .byte 0x3
+ 5980 1bbf 00000000 .quad __func__.6944
+ 5980 00000000
+ 5981 1bc7 00 .byte 0x0
+ 5982 1bc8 16 .uleb128 0x16
+ 5983 1bc9 C1000000 .long 0xc1
+ 5984 1bcd D81B0000 .long 0x1bd8
+ 5985 1bd1 17 .uleb128 0x17
+ 5986 1bd2 B1000000 .long 0xb1
+ 5987 1bd6 14 .byte 0x14
+ 5988 1bd7 00 .byte 0x0
+ 5989 1bd8 0B .uleb128 0xb
+ 5990 1bd9 C81B0000 .long 0x1bc8
+ 5991 1bdd 0B .uleb128 0xb
+ 5992 1bde C81B0000 .long 0x1bc8
+ 5993 1be2 25 .uleb128 0x25
+ 5994 1be3 00000000 .long .LASF385
+ 5995 1be7 01 .byte 0x1
+ 5996 1be8 8402 .value 0x284
+ 5997 1bea 01 .byte 0x1
+ 5998 1beb 7B000000 .long 0x7b
+ 5999 1bef 00000000 .quad .LFB534
+
GAS LISTING /tmp/ccq6ONvw.s page 135
+
+
+ 5999 00000000
+ 6000 1bf7 00000000 .quad .LFE534
+ 6000 00000000
+ 6001 1bff 00000000 .long .LLST26
+ 6002 1c03 6B1C0000 .long 0x1c6b
+ 6003 1c07 26 .uleb128 0x26
+ 6004 1c08 00000000 .long .LASF352
+ 6005 1c0c 01 .byte 0x1
+ 6006 1c0d 8402 .value 0x284
+ 6007 1c0f DE030000 .long 0x3de
+ 6008 1c13 02 .byte 0x2
+ 6009 1c14 91 .byte 0x91
+ 6010 1c15 68 .sleb128 -24
+ 6011 1c16 27 .uleb128 0x27
+ 6012 1c17 696E00 .string "in"
+ 6013 1c1a 01 .byte 0x1
+ 6014 1c1b 8402 .value 0x284
+ 6015 1c1d 1F040000 .long 0x41f
+ 6016 1c21 02 .byte 0x2
+ 6017 1c22 91 .byte 0x91
+ 6018 1c23 60 .sleb128 -32
+ 6019 1c24 27 .uleb128 0x27
+ 6020 1c25 6F757400 .string "out"
+ 6021 1c29 01 .byte 0x1
+ 6022 1c2a 8402 .value 0x284
+ 6023 1c2c B4000000 .long 0xb4
+ 6024 1c30 02 .byte 0x2
+ 6025 1c31 91 .byte 0x91
+ 6026 1c32 58 .sleb128 -40
+ 6027 1c33 26 .uleb128 0x26
+ 6028 1c34 00000000 .long .LASF372
+ 6029 1c38 01 .byte 0x1
+ 6030 1c39 8402 .value 0x284
+ 6031 1c3b 62000000 .long 0x62
+ 6032 1c3f 02 .byte 0x2
+ 6033 1c40 91 .byte 0x91
+ 6034 1c41 54 .sleb128 -44
+ 6035 1c42 23 .uleb128 0x23
+ 6036 1c43 00000000 .long .LASF356
+ 6037 1c47 6B1C0000 .long 0x1c6b
+ 6038 1c4b 01 .byte 0x1
+ 6039 1c4c 09 .byte 0x9
+ 6040 1c4d 03 .byte 0x3
+ 6041 1c4e 00000000 .quad __PRETTY_FUNCTION__.6953
+ 6041 00000000
+ 6042 1c56 23 .uleb128 0x23
+ 6043 1c57 00000000 .long .LASF357
+ 6044 1c5b 701C0000 .long 0x1c70
+ 6045 1c5f 01 .byte 0x1
+ 6046 1c60 09 .byte 0x9
+ 6047 1c61 03 .byte 0x3
+ 6048 1c62 00000000 .quad __func__.6954
+ 6048 00000000
+ 6049 1c6a 00 .byte 0x0
+ 6050 1c6b 0B .uleb128 0xb
+ 6051 1c6c C81B0000 .long 0x1bc8
+ 6052 1c70 0B .uleb128 0xb
+
GAS LISTING /tmp/ccq6ONvw.s page 136
+
+
+ 6053 1c71 C81B0000 .long 0x1bc8
+ 6054 1c75 25 .uleb128 0x25
+ 6055 1c76 00000000 .long .LASF386
+ 6056 1c7a 01 .byte 0x1
+ 6057 1c7b A702 .value 0x2a7
+ 6058 1c7d 01 .byte 0x1
+ 6059 1c7e 7B000000 .long 0x7b
+ 6060 1c82 00000000 .quad .LFB535
+ 6060 00000000
+ 6061 1c8a 00000000 .quad .LFE535
+ 6061 00000000
+ 6062 1c92 00000000 .long .LLST27
+ 6063 1c96 F01C0000 .long 0x1cf0
+ 6064 1c9a 26 .uleb128 0x26
+ 6065 1c9b 00000000 .long .LASF387
+ 6066 1c9f 01 .byte 0x1
+ 6067 1ca0 A702 .value 0x2a7
+ 6068 1ca2 F01C0000 .long 0x1cf0
+ 6069 1ca6 02 .byte 0x2
+ 6070 1ca7 91 .byte 0x91
+ 6071 1ca8 58 .sleb128 -40
+ 6072 1ca9 26 .uleb128 0x26
+ 6073 1caa 00000000 .long .LASF46
+ 6074 1cae 01 .byte 0x1
+ 6075 1caf A802 .value 0x2a8
+ 6076 1cb1 F61C0000 .long 0x1cf6
+ 6077 1cb5 02 .byte 0x2
+ 6078 1cb6 91 .byte 0x91
+ 6079 1cb7 50 .sleb128 -48
+ 6080 1cb8 24 .uleb128 0x24
+ 6081 1cb9 6F626A00 .string "obj"
+ 6082 1cbd 01 .byte 0x1
+ 6083 1cbe AA02 .value 0x2aa
+ 6084 1cc0 011D0000 .long 0x1d01
+ 6085 1cc4 02 .byte 0x2
+ 6086 1cc5 91 .byte 0x91
+ 6087 1cc6 68 .sleb128 -24
+ 6088 1cc7 23 .uleb128 0x23
+ 6089 1cc8 00000000 .long .LASF356
+ 6090 1ccc 171D0000 .long 0x1d17
+ 6091 1cd0 01 .byte 0x1
+ 6092 1cd1 09 .byte 0x9
+ 6093 1cd2 03 .byte 0x3
+ 6094 1cd3 00000000 .quad __PRETTY_FUNCTION__.6963
+ 6094 00000000
+ 6095 1cdb 23 .uleb128 0x23
+ 6096 1cdc 00000000 .long .LASF357
+ 6097 1ce0 1C1D0000 .long 0x1d1c
+ 6098 1ce4 01 .byte 0x1
+ 6099 1ce5 09 .byte 0x9
+ 6100 1ce6 03 .byte 0x3
+ 6101 1ce7 00000000 .quad __func__.6964
+ 6101 00000000
+ 6102 1cef 00 .byte 0x0
+ 6103 1cf0 0A .uleb128 0xa
+ 6104 1cf1 08 .byte 0x8
+ 6105 1cf2 DE030000 .long 0x3de
+
GAS LISTING /tmp/ccq6ONvw.s page 137
+
+
+ 6106 1cf6 0A .uleb128 0xa
+ 6107 1cf7 08 .byte 0x8
+ 6108 1cf8 FC1C0000 .long 0x1cfc
+ 6109 1cfc 0B .uleb128 0xb
+ 6110 1cfd C3080000 .long 0x8c3
+ 6111 1d01 0A .uleb128 0xa
+ 6112 1d02 08 .byte 0x8
+ 6113 1d03 F9070000 .long 0x7f9
+ 6114 1d07 16 .uleb128 0x16
+ 6115 1d08 C1000000 .long 0xc1
+ 6116 1d0c 171D0000 .long 0x1d17
+ 6117 1d10 17 .uleb128 0x17
+ 6118 1d11 B1000000 .long 0xb1
+ 6119 1d15 12 .byte 0x12
+ 6120 1d16 00 .byte 0x0
+ 6121 1d17 0B .uleb128 0xb
+ 6122 1d18 071D0000 .long 0x1d07
+ 6123 1d1c 0B .uleb128 0xb
+ 6124 1d1d 071D0000 .long 0x1d07
+ 6125 1d21 25 .uleb128 0x25
+ 6126 1d22 00000000 .long .LASF388
+ 6127 1d26 01 .byte 0x1
+ 6128 1d27 B402 .value 0x2b4
+ 6129 1d29 01 .byte 0x1
+ 6130 1d2a 7B000000 .long 0x7b
+ 6131 1d2e 00000000 .quad .LFB536
+ 6131 00000000
+ 6132 1d36 00000000 .quad .LFE536
+ 6132 00000000
+ 6133 1d3e 00000000 .long .LLST28
+ 6134 1d42 831D0000 .long 0x1d83
+ 6135 1d46 26 .uleb128 0x26
+ 6136 1d47 00000000 .long .LASF352
+ 6137 1d4b 01 .byte 0x1
+ 6138 1d4c B402 .value 0x2b4
+ 6139 1d4e DE030000 .long 0x3de
+ 6140 1d52 02 .byte 0x2
+ 6141 1d53 91 .byte 0x91
+ 6142 1d54 58 .sleb128 -40
+ 6143 1d55 26 .uleb128 0x26
+ 6144 1d56 00000000 .long .LASF46
+ 6145 1d5a 01 .byte 0x1
+ 6146 1d5b B502 .value 0x2b5
+ 6147 1d5d F61C0000 .long 0x1cf6
+ 6148 1d61 02 .byte 0x2
+ 6149 1d62 91 .byte 0x91
+ 6150 1d63 50 .sleb128 -48
+ 6151 1d64 24 .uleb128 0x24
+ 6152 1d65 64616400 .string "dad"
+ 6153 1d69 01 .byte 0x1
+ 6154 1d6a B702 .value 0x2b7
+ 6155 1d6c 831D0000 .long 0x1d83
+ 6156 1d70 02 .byte 0x2
+ 6157 1d71 91 .byte 0x91
+ 6158 1d72 60 .sleb128 -32
+ 6159 1d73 24 .uleb128 0x24
+ 6160 1d74 61657300 .string "aes"
+
GAS LISTING /tmp/ccq6ONvw.s page 138
+
+
+ 6161 1d78 01 .byte 0x1
+ 6162 1d79 B802 .value 0x2b8
+ 6163 1d7b 011D0000 .long 0x1d01
+ 6164 1d7f 02 .byte 0x2
+ 6165 1d80 91 .byte 0x91
+ 6166 1d81 68 .sleb128 -24
+ 6167 1d82 00 .byte 0x0
+ 6168 1d83 0A .uleb128 0xa
+ 6169 1d84 08 .byte 0x8
+ 6170 1d85 54010000 .long 0x154
+ 6171 1d89 25 .uleb128 0x25
+ 6172 1d8a 00000000 .long .LASF389
+ 6173 1d8e 01 .byte 0x1
+ 6174 1d8f CA02 .value 0x2ca
+ 6175 1d91 01 .byte 0x1
+ 6176 1d92 7B000000 .long 0x7b
+ 6177 1d96 00000000 .quad .LFB537
+ 6177 00000000
+ 6178 1d9e 00000000 .quad .LFE537
+ 6178 00000000
+ 6179 1da6 00000000 .long .LLST29
+ 6180 1daa 041E0000 .long 0x1e04
+ 6181 1dae 26 .uleb128 0x26
+ 6182 1daf 00000000 .long .LASF387
+ 6183 1db3 01 .byte 0x1
+ 6184 1db4 CA02 .value 0x2ca
+ 6185 1db6 F01C0000 .long 0x1cf0
+ 6186 1dba 02 .byte 0x2
+ 6187 1dbb 91 .byte 0x91
+ 6188 1dbc 58 .sleb128 -40
+ 6189 1dbd 26 .uleb128 0x26
+ 6190 1dbe 00000000 .long .LASF46
+ 6191 1dc2 01 .byte 0x1
+ 6192 1dc3 CB02 .value 0x2cb
+ 6193 1dc5 F61C0000 .long 0x1cf6
+ 6194 1dc9 02 .byte 0x2
+ 6195 1dca 91 .byte 0x91
+ 6196 1dcb 50 .sleb128 -48
+ 6197 1dcc 24 .uleb128 0x24
+ 6198 1dcd 6F626A00 .string "obj"
+ 6199 1dd1 01 .byte 0x1
+ 6200 1dd2 CD02 .value 0x2cd
+ 6201 1dd4 041E0000 .long 0x1e04
+ 6202 1dd8 02 .byte 0x2
+ 6203 1dd9 91 .byte 0x91
+ 6204 1dda 68 .sleb128 -24
+ 6205 1ddb 23 .uleb128 0x23
+ 6206 1ddc 00000000 .long .LASF356
+ 6207 1de0 1A1E0000 .long 0x1e1a
+ 6208 1de4 01 .byte 0x1
+ 6209 1de5 09 .byte 0x9
+ 6210 1de6 03 .byte 0x3
+ 6211 1de7 00000000 .quad __PRETTY_FUNCTION__.6990
+ 6211 00000000
+ 6212 1def 23 .uleb128 0x23
+ 6213 1df0 00000000 .long .LASF357
+ 6214 1df4 1F1E0000 .long 0x1e1f
+
GAS LISTING /tmp/ccq6ONvw.s page 139
+
+
+ 6215 1df8 01 .byte 0x1
+ 6216 1df9 09 .byte 0x9
+ 6217 1dfa 03 .byte 0x3
+ 6218 1dfb 00000000 .quad __func__.6991
+ 6218 00000000
+ 6219 1e03 00 .byte 0x0
+ 6220 1e04 0A .uleb128 0xa
+ 6221 1e05 08 .byte 0x8
+ 6222 1e06 5B080000 .long 0x85b
+ 6223 1e0a 16 .uleb128 0x16
+ 6224 1e0b C1000000 .long 0xc1
+ 6225 1e0f 1A1E0000 .long 0x1e1a
+ 6226 1e13 17 .uleb128 0x17
+ 6227 1e14 B1000000 .long 0xb1
+ 6228 1e18 13 .byte 0x13
+ 6229 1e19 00 .byte 0x0
+ 6230 1e1a 0B .uleb128 0xb
+ 6231 1e1b 0A1E0000 .long 0x1e0a
+ 6232 1e1f 0B .uleb128 0xb
+ 6233 1e20 0A1E0000 .long 0x1e0a
+ 6234 1e24 25 .uleb128 0x25
+ 6235 1e25 00000000 .long .LASF390
+ 6236 1e29 01 .byte 0x1
+ 6237 1e2a D702 .value 0x2d7
+ 6238 1e2c 01 .byte 0x1
+ 6239 1e2d 7B000000 .long 0x7b
+ 6240 1e31 00000000 .quad .LFB538
+ 6240 00000000
+ 6241 1e39 00000000 .quad .LFE538
+ 6241 00000000
+ 6242 1e41 00000000 .long .LLST30
+ 6243 1e45 861E0000 .long 0x1e86
+ 6244 1e49 26 .uleb128 0x26
+ 6245 1e4a 00000000 .long .LASF352
+ 6246 1e4e 01 .byte 0x1
+ 6247 1e4f D702 .value 0x2d7
+ 6248 1e51 DE030000 .long 0x3de
+ 6249 1e55 02 .byte 0x2
+ 6250 1e56 91 .byte 0x91
+ 6251 1e57 58 .sleb128 -40
+ 6252 1e58 26 .uleb128 0x26
+ 6253 1e59 00000000 .long .LASF46
+ 6254 1e5d 01 .byte 0x1
+ 6255 1e5e D802 .value 0x2d8
+ 6256 1e60 F61C0000 .long 0x1cf6
+ 6257 1e64 02 .byte 0x2
+ 6258 1e65 91 .byte 0x91
+ 6259 1e66 50 .sleb128 -48
+ 6260 1e67 24 .uleb128 0x24
+ 6261 1e68 64616400 .string "dad"
+ 6262 1e6c 01 .byte 0x1
+ 6263 1e6d DA02 .value 0x2da
+ 6264 1e6f 831D0000 .long 0x1d83
+ 6265 1e73 02 .byte 0x2
+ 6266 1e74 91 .byte 0x91
+ 6267 1e75 60 .sleb128 -32
+ 6268 1e76 28 .uleb128 0x28
+
GAS LISTING /tmp/ccq6ONvw.s page 140
+
+
+ 6269 1e77 00000000 .long .LASF391
+ 6270 1e7b 01 .byte 0x1
+ 6271 1e7c DB02 .value 0x2db
+ 6272 1e7e 041E0000 .long 0x1e04
+ 6273 1e82 02 .byte 0x2
+ 6274 1e83 91 .byte 0x91
+ 6275 1e84 68 .sleb128 -24
+ 6276 1e85 00 .byte 0x0
+ 6277 1e86 2A .uleb128 0x2a
+ 6278 1e87 01 .byte 0x1
+ 6279 1e88 00000000 .long .LASF399
+ 6280 1e8c 01 .byte 0x1
+ 6281 1e8d EC02 .value 0x2ec
+ 6282 1e8f 01 .byte 0x1
+ 6283 1e90 7B000000 .long 0x7b
+ 6284 1e94 00000000 .quad .LFB539
+ 6284 00000000
+ 6285 1e9c 00000000 .quad .LFE539
+ 6285 00000000
+ 6286 1ea4 00000000 .long .LLST31
+ 6287 1ea8 311F0000 .long 0x1f31
+ 6288 1eac 26 .uleb128 0x26
+ 6289 1ead 00000000 .long .LASF392
+ 6290 1eb1 01 .byte 0x1
+ 6291 1eb2 EC02 .value 0x2ec
+ 6292 1eb4 311F0000 .long 0x1f31
+ 6293 1eb8 02 .byte 0x2
+ 6294 1eb9 91 .byte 0x91
+ 6295 1eba 48 .sleb128 -56
+ 6296 1ebb 26 .uleb128 0x26
+ 6297 1ebc 00000000 .long .LASF393
+ 6298 1ec0 01 .byte 0x1
+ 6299 1ec1 EC02 .value 0x2ec
+ 6300 1ec3 9D080000 .long 0x89d
+ 6301 1ec7 02 .byte 0x2
+ 6302 1ec8 91 .byte 0x91
+ 6303 1ec9 44 .sleb128 -60
+ 6304 1eca 24 .uleb128 0x24
+ 6305 1ecb 726300 .string "rc"
+ 6306 1ece 01 .byte 0x1
+ 6307 1ecf EE02 .value 0x2ee
+ 6308 1ed1 7B000000 .long 0x7b
+ 6309 1ed5 02 .byte 0x2
+ 6310 1ed6 91 .byte 0x91
+ 6311 1ed7 6C .sleb128 -20
+ 6312 1ed8 28 .uleb128 0x28
+ 6313 1ed9 00000000 .long .LASF46
+ 6314 1edd 01 .byte 0x1
+ 6315 1ede EF02 .value 0x2ef
+ 6316 1ee0 371F0000 .long 0x1f37
+ 6317 1ee4 02 .byte 0x2
+ 6318 1ee5 91 .byte 0x91
+ 6319 1ee6 60 .sleb128 -32
+ 6320 1ee7 23 .uleb128 0x23
+ 6321 1ee8 00000000 .long .LASF356
+ 6322 1eec 4D1F0000 .long 0x1f4d
+ 6323 1ef0 01 .byte 0x1
+
GAS LISTING /tmp/ccq6ONvw.s page 141
+
+
+ 6324 1ef1 09 .byte 0x9
+ 6325 1ef2 03 .byte 0x3
+ 6326 1ef3 00000000 .quad __PRETTY_FUNCTION__.7018
+ 6326 00000000
+ 6327 1efb 23 .uleb128 0x23
+ 6328 1efc 00000000 .long .LASF357
+ 6329 1f00 521F0000 .long 0x1f52
+ 6330 1f04 01 .byte 0x1
+ 6331 1f05 09 .byte 0x9
+ 6332 1f06 03 .byte 0x3
+ 6333 1f07 00000000 .quad __func__.7019
+ 6333 00000000
+ 6334 1f0f 29 .uleb128 0x29
+ 6335 1f10 00000000 .quad .LBB5
+ 6335 00000000
+ 6336 1f18 00000000 .quad .LBE5
+ 6336 00000000
+ 6337 1f20 24 .uleb128 0x24
+ 6338 1f21 6F626A00 .string "obj"
+ 6339 1f25 01 .byte 0x1
+ 6340 1f26 0603 .value 0x306
+ 6341 1f28 DE030000 .long 0x3de
+ 6342 1f2c 02 .byte 0x2
+ 6343 1f2d 91 .byte 0x91
+ 6344 1f2e 58 .sleb128 -40
+ 6345 1f2f 00 .byte 0x0
+ 6346 1f30 00 .byte 0x0
+ 6347 1f31 0A .uleb128 0xa
+ 6348 1f32 08 .byte 0x8
+ 6349 1f33 831D0000 .long 0x1d83
+ 6350 1f37 0A .uleb128 0xa
+ 6351 1f38 08 .byte 0x8
+ 6352 1f39 C3080000 .long 0x8c3
+ 6353 1f3d 16 .uleb128 0x16
+ 6354 1f3e C1000000 .long 0xc1
+ 6355 1f42 4D1F0000 .long 0x1f4d
+ 6356 1f46 17 .uleb128 0x17
+ 6357 1f47 B1000000 .long 0xb1
+ 6358 1f4b 0E .byte 0xe
+ 6359 1f4c 00 .byte 0x0
+ 6360 1f4d 0B .uleb128 0xb
+ 6361 1f4e 3D1F0000 .long 0x1f3d
+ 6362 1f52 0B .uleb128 0xb
+ 6363 1f53 3D1F0000 .long 0x1f3d
+ 6364 1f57 28 .uleb128 0x28
+ 6365 1f58 00000000 .long .LASF394
+ 6366 1f5c 01 .byte 0x1
+ 6367 1f5d 8A02 .value 0x28a
+ 6368 1f5f 87020000 .long 0x287
+ 6369 1f63 09 .byte 0x9
+ 6370 1f64 03 .byte 0x3
+ 6371 1f65 00000000 .quad KCipherVec_vt_v1
+ 6371 00000000
+ 6372 1f6d 16 .uleb128 0x16
+ 6373 1f6e C1000000 .long 0xc1
+ 6374 1f72 7D1F0000 .long 0x1f7d
+ 6375 1f76 17 .uleb128 0x17
+
GAS LISTING /tmp/ccq6ONvw.s page 142
+
+
+ 6376 1f77 B1000000 .long 0xb1
+ 6377 1f7b 0B .byte 0xb
+ 6378 1f7c 00 .byte 0x0
+ 6379 1f7d 2B .uleb128 0x2b
+ 6380 1f7e 00000000 .long .LASF400
+ 6381 1f82 01 .byte 0x1
+ 6382 1f83 38 .byte 0x38
+ 6383 1f84 931F0000 .long 0x1f93
+ 6384 1f88 01 .byte 0x1
+ 6385 1f89 09 .byte 0x9
+ 6386 1f8a 03 .byte 0x3
+ 6387 1f8b 00000000 .quad KCipherVecClassName
+ 6387 00000000
+ 6388 1f93 0B .uleb128 0xb
+ 6389 1f94 6D1F0000 .long 0x1f6d
+ 6390 1f98 00 .byte 0x0
+ 6391 .section .debug_abbrev
+ 6392 0000 01 .uleb128 0x1
+ 6393 0001 11 .uleb128 0x11
+ 6394 0002 01 .byte 0x1
+ 6395 0003 25 .uleb128 0x25
+ 6396 0004 0E .uleb128 0xe
+ 6397 0005 13 .uleb128 0x13
+ 6398 0006 0B .uleb128 0xb
+ 6399 0007 03 .uleb128 0x3
+ 6400 0008 0E .uleb128 0xe
+ 6401 0009 1B .uleb128 0x1b
+ 6402 000a 0E .uleb128 0xe
+ 6403 000b 11 .uleb128 0x11
+ 6404 000c 01 .uleb128 0x1
+ 6405 000d 12 .uleb128 0x12
+ 6406 000e 01 .uleb128 0x1
+ 6407 000f 10 .uleb128 0x10
+ 6408 0010 06 .uleb128 0x6
+ 6409 0011 00 .byte 0x0
+ 6410 0012 00 .byte 0x0
+ 6411 0013 02 .uleb128 0x2
+ 6412 0014 24 .uleb128 0x24
+ 6413 0015 00 .byte 0x0
+ 6414 0016 0B .uleb128 0xb
+ 6415 0017 0B .uleb128 0xb
+ 6416 0018 3E .uleb128 0x3e
+ 6417 0019 0B .uleb128 0xb
+ 6418 001a 03 .uleb128 0x3
+ 6419 001b 0E .uleb128 0xe
+ 6420 001c 00 .byte 0x0
+ 6421 001d 00 .byte 0x0
+ 6422 001e 03 .uleb128 0x3
+ 6423 001f 24 .uleb128 0x24
+ 6424 0020 00 .byte 0x0
+ 6425 0021 0B .uleb128 0xb
+ 6426 0022 0B .uleb128 0xb
+ 6427 0023 3E .uleb128 0x3e
+ 6428 0024 0B .uleb128 0xb
+ 6429 0025 03 .uleb128 0x3
+ 6430 0026 08 .uleb128 0x8
+ 6431 0027 00 .byte 0x0
+
GAS LISTING /tmp/ccq6ONvw.s page 143
+
+
+ 6432 0028 00 .byte 0x0
+ 6433 0029 04 .uleb128 0x4
+ 6434 002a 16 .uleb128 0x16
+ 6435 002b 00 .byte 0x0
+ 6436 002c 03 .uleb128 0x3
+ 6437 002d 0E .uleb128 0xe
+ 6438 002e 3A .uleb128 0x3a
+ 6439 002f 0B .uleb128 0xb
+ 6440 0030 3B .uleb128 0x3b
+ 6441 0031 0B .uleb128 0xb
+ 6442 0032 49 .uleb128 0x49
+ 6443 0033 13 .uleb128 0x13
+ 6444 0034 00 .byte 0x0
+ 6445 0035 00 .byte 0x0
+ 6446 0036 05 .uleb128 0x5
+ 6447 0037 13 .uleb128 0x13
+ 6448 0038 01 .byte 0x1
+ 6449 0039 03 .uleb128 0x3
+ 6450 003a 0E .uleb128 0xe
+ 6451 003b 0B .uleb128 0xb
+ 6452 003c 0B .uleb128 0xb
+ 6453 003d 3A .uleb128 0x3a
+ 6454 003e 0B .uleb128 0xb
+ 6455 003f 3B .uleb128 0x3b
+ 6456 0040 0B .uleb128 0xb
+ 6457 0041 01 .uleb128 0x1
+ 6458 0042 13 .uleb128 0x13
+ 6459 0043 00 .byte 0x0
+ 6460 0044 00 .byte 0x0
+ 6461 0045 06 .uleb128 0x6
+ 6462 0046 0D .uleb128 0xd
+ 6463 0047 00 .byte 0x0
+ 6464 0048 03 .uleb128 0x3
+ 6465 0049 0E .uleb128 0xe
+ 6466 004a 3A .uleb128 0x3a
+ 6467 004b 0B .uleb128 0xb
+ 6468 004c 3B .uleb128 0x3b
+ 6469 004d 0B .uleb128 0xb
+ 6470 004e 49 .uleb128 0x49
+ 6471 004f 13 .uleb128 0x13
+ 6472 0050 38 .uleb128 0x38
+ 6473 0051 0A .uleb128 0xa
+ 6474 0052 00 .byte 0x0
+ 6475 0053 00 .byte 0x0
+ 6476 0054 07 .uleb128 0x7
+ 6477 0055 35 .uleb128 0x35
+ 6478 0056 00 .byte 0x0
+ 6479 0057 49 .uleb128 0x49
+ 6480 0058 13 .uleb128 0x13
+ 6481 0059 00 .byte 0x0
+ 6482 005a 00 .byte 0x0
+ 6483 005b 08 .uleb128 0x8
+ 6484 005c 24 .uleb128 0x24
+ 6485 005d 00 .byte 0x0
+ 6486 005e 0B .uleb128 0xb
+ 6487 005f 0B .uleb128 0xb
+ 6488 0060 3E .uleb128 0x3e
+
GAS LISTING /tmp/ccq6ONvw.s page 144
+
+
+ 6489 0061 0B .uleb128 0xb
+ 6490 0062 00 .byte 0x0
+ 6491 0063 00 .byte 0x0
+ 6492 0064 09 .uleb128 0x9
+ 6493 0065 0F .uleb128 0xf
+ 6494 0066 00 .byte 0x0
+ 6495 0067 0B .uleb128 0xb
+ 6496 0068 0B .uleb128 0xb
+ 6497 0069 00 .byte 0x0
+ 6498 006a 00 .byte 0x0
+ 6499 006b 0A .uleb128 0xa
+ 6500 006c 0F .uleb128 0xf
+ 6501 006d 00 .byte 0x0
+ 6502 006e 0B .uleb128 0xb
+ 6503 006f 0B .uleb128 0xb
+ 6504 0070 49 .uleb128 0x49
+ 6505 0071 13 .uleb128 0x13
+ 6506 0072 00 .byte 0x0
+ 6507 0073 00 .byte 0x0
+ 6508 0074 0B .uleb128 0xb
+ 6509 0075 26 .uleb128 0x26
+ 6510 0076 00 .byte 0x0
+ 6511 0077 49 .uleb128 0x49
+ 6512 0078 13 .uleb128 0x13
+ 6513 0079 00 .byte 0x0
+ 6514 007a 00 .byte 0x0
+ 6515 007b 0C .uleb128 0xc
+ 6516 007c 04 .uleb128 0x4
+ 6517 007d 01 .byte 0x1
+ 6518 007e 0B .uleb128 0xb
+ 6519 007f 0B .uleb128 0xb
+ 6520 0080 3A .uleb128 0x3a
+ 6521 0081 0B .uleb128 0xb
+ 6522 0082 3B .uleb128 0x3b
+ 6523 0083 0B .uleb128 0xb
+ 6524 0084 01 .uleb128 0x1
+ 6525 0085 13 .uleb128 0x13
+ 6526 0086 00 .byte 0x0
+ 6527 0087 00 .byte 0x0
+ 6528 0088 0D .uleb128 0xd
+ 6529 0089 28 .uleb128 0x28
+ 6530 008a 00 .byte 0x0
+ 6531 008b 03 .uleb128 0x3
+ 6532 008c 0E .uleb128 0xe
+ 6533 008d 1C .uleb128 0x1c
+ 6534 008e 0D .uleb128 0xd
+ 6535 008f 00 .byte 0x0
+ 6536 0090 00 .byte 0x0
+ 6537 0091 0E .uleb128 0xe
+ 6538 0092 0D .uleb128 0xd
+ 6539 0093 00 .byte 0x0
+ 6540 0094 03 .uleb128 0x3
+ 6541 0095 08 .uleb128 0x8
+ 6542 0096 3A .uleb128 0x3a
+ 6543 0097 0B .uleb128 0xb
+ 6544 0098 3B .uleb128 0x3b
+ 6545 0099 0B .uleb128 0xb
+
GAS LISTING /tmp/ccq6ONvw.s page 145
+
+
+ 6546 009a 49 .uleb128 0x49
+ 6547 009b 13 .uleb128 0x13
+ 6548 009c 38 .uleb128 0x38
+ 6549 009d 0A .uleb128 0xa
+ 6550 009e 00 .byte 0x0
+ 6551 009f 00 .byte 0x0
+ 6552 00a0 0F .uleb128 0xf
+ 6553 00a1 15 .uleb128 0x15
+ 6554 00a2 01 .byte 0x1
+ 6555 00a3 27 .uleb128 0x27
+ 6556 00a4 0C .uleb128 0xc
+ 6557 00a5 01 .uleb128 0x1
+ 6558 00a6 13 .uleb128 0x13
+ 6559 00a7 00 .byte 0x0
+ 6560 00a8 00 .byte 0x0
+ 6561 00a9 10 .uleb128 0x10
+ 6562 00aa 05 .uleb128 0x5
+ 6563 00ab 00 .byte 0x0
+ 6564 00ac 49 .uleb128 0x49
+ 6565 00ad 13 .uleb128 0x13
+ 6566 00ae 00 .byte 0x0
+ 6567 00af 00 .byte 0x0
+ 6568 00b0 11 .uleb128 0x11
+ 6569 00b1 15 .uleb128 0x15
+ 6570 00b2 01 .byte 0x1
+ 6571 00b3 27 .uleb128 0x27
+ 6572 00b4 0C .uleb128 0xc
+ 6573 00b5 49 .uleb128 0x49
+ 6574 00b6 13 .uleb128 0x13
+ 6575 00b7 01 .uleb128 0x1
+ 6576 00b8 13 .uleb128 0x13
+ 6577 00b9 00 .byte 0x0
+ 6578 00ba 00 .byte 0x0
+ 6579 00bb 12 .uleb128 0x12
+ 6580 00bc 26 .uleb128 0x26
+ 6581 00bd 00 .byte 0x0
+ 6582 00be 00 .byte 0x0
+ 6583 00bf 00 .byte 0x0
+ 6584 00c0 13 .uleb128 0x13
+ 6585 00c1 17 .uleb128 0x17
+ 6586 00c2 01 .byte 0x1
+ 6587 00c3 03 .uleb128 0x3
+ 6588 00c4 0E .uleb128 0xe
+ 6589 00c5 0B .uleb128 0xb
+ 6590 00c6 0B .uleb128 0xb
+ 6591 00c7 3A .uleb128 0x3a
+ 6592 00c8 0B .uleb128 0xb
+ 6593 00c9 3B .uleb128 0x3b
+ 6594 00ca 0B .uleb128 0xb
+ 6595 00cb 01 .uleb128 0x1
+ 6596 00cc 13 .uleb128 0x13
+ 6597 00cd 00 .byte 0x0
+ 6598 00ce 00 .byte 0x0
+ 6599 00cf 14 .uleb128 0x14
+ 6600 00d0 0D .uleb128 0xd
+ 6601 00d1 00 .byte 0x0
+ 6602 00d2 03 .uleb128 0x3
+
GAS LISTING /tmp/ccq6ONvw.s page 146
+
+
+ 6603 00d3 0E .uleb128 0xe
+ 6604 00d4 3A .uleb128 0x3a
+ 6605 00d5 0B .uleb128 0xb
+ 6606 00d6 3B .uleb128 0x3b
+ 6607 00d7 0B .uleb128 0xb
+ 6608 00d8 49 .uleb128 0x49
+ 6609 00d9 13 .uleb128 0x13
+ 6610 00da 00 .byte 0x0
+ 6611 00db 00 .byte 0x0
+ 6612 00dc 15 .uleb128 0x15
+ 6613 00dd 0D .uleb128 0xd
+ 6614 00de 00 .byte 0x0
+ 6615 00df 03 .uleb128 0x3
+ 6616 00e0 08 .uleb128 0x8
+ 6617 00e1 3A .uleb128 0x3a
+ 6618 00e2 0B .uleb128 0xb
+ 6619 00e3 3B .uleb128 0x3b
+ 6620 00e4 0B .uleb128 0xb
+ 6621 00e5 49 .uleb128 0x49
+ 6622 00e6 13 .uleb128 0x13
+ 6623 00e7 00 .byte 0x0
+ 6624 00e8 00 .byte 0x0
+ 6625 00e9 16 .uleb128 0x16
+ 6626 00ea 01 .uleb128 0x1
+ 6627 00eb 01 .byte 0x1
+ 6628 00ec 49 .uleb128 0x49
+ 6629 00ed 13 .uleb128 0x13
+ 6630 00ee 01 .uleb128 0x1
+ 6631 00ef 13 .uleb128 0x13
+ 6632 00f0 00 .byte 0x0
+ 6633 00f1 00 .byte 0x0
+ 6634 00f2 17 .uleb128 0x17
+ 6635 00f3 21 .uleb128 0x21
+ 6636 00f4 00 .byte 0x0
+ 6637 00f5 49 .uleb128 0x49
+ 6638 00f6 13 .uleb128 0x13
+ 6639 00f7 2F .uleb128 0x2f
+ 6640 00f8 0B .uleb128 0xb
+ 6641 00f9 00 .byte 0x0
+ 6642 00fa 00 .byte 0x0
+ 6643 00fb 18 .uleb128 0x18
+ 6644 00fc 01 .uleb128 0x1
+ 6645 00fd 01 .byte 0x1
+ 6646 00fe 8742 .uleb128 0x2107
+ 6647 0100 0C .uleb128 0xc
+ 6648 0101 49 .uleb128 0x49
+ 6649 0102 13 .uleb128 0x13
+ 6650 0103 01 .uleb128 0x1
+ 6651 0104 13 .uleb128 0x13
+ 6652 0105 00 .byte 0x0
+ 6653 0106 00 .byte 0x0
+ 6654 0107 19 .uleb128 0x19
+ 6655 0108 15 .uleb128 0x15
+ 6656 0109 01 .byte 0x1
+ 6657 010a 49 .uleb128 0x49
+ 6658 010b 13 .uleb128 0x13
+ 6659 010c 01 .uleb128 0x1
+
GAS LISTING /tmp/ccq6ONvw.s page 147
+
+
+ 6660 010d 13 .uleb128 0x13
+ 6661 010e 00 .byte 0x0
+ 6662 010f 00 .byte 0x0
+ 6663 0110 1A .uleb128 0x1a
+ 6664 0111 18 .uleb128 0x18
+ 6665 0112 00 .byte 0x0
+ 6666 0113 00 .byte 0x0
+ 6667 0114 00 .byte 0x0
+ 6668 0115 1B .uleb128 0x1b
+ 6669 0116 13 .uleb128 0x13
+ 6670 0117 01 .byte 0x1
+ 6671 0118 03 .uleb128 0x3
+ 6672 0119 0E .uleb128 0xe
+ 6673 011a 0B .uleb128 0xb
+ 6674 011b 05 .uleb128 0x5
+ 6675 011c 3A .uleb128 0x3a
+ 6676 011d 0B .uleb128 0xb
+ 6677 011e 3B .uleb128 0x3b
+ 6678 011f 0B .uleb128 0xb
+ 6679 0120 01 .uleb128 0x1
+ 6680 0121 13 .uleb128 0x13
+ 6681 0122 00 .byte 0x0
+ 6682 0123 00 .byte 0x0
+ 6683 0124 1C .uleb128 0x1c
+ 6684 0125 04 .uleb128 0x4
+ 6685 0126 01 .byte 0x1
+ 6686 0127 03 .uleb128 0x3
+ 6687 0128 0E .uleb128 0xe
+ 6688 0129 0B .uleb128 0xb
+ 6689 012a 0B .uleb128 0xb
+ 6690 012b 3A .uleb128 0x3a
+ 6691 012c 0B .uleb128 0xb
+ 6692 012d 3B .uleb128 0x3b
+ 6693 012e 0B .uleb128 0xb
+ 6694 012f 01 .uleb128 0x1
+ 6695 0130 13 .uleb128 0x13
+ 6696 0131 00 .byte 0x0
+ 6697 0132 00 .byte 0x0
+ 6698 0133 1D .uleb128 0x1d
+ 6699 0134 04 .uleb128 0x4
+ 6700 0135 01 .byte 0x1
+ 6701 0136 03 .uleb128 0x3
+ 6702 0137 0E .uleb128 0xe
+ 6703 0138 0B .uleb128 0xb
+ 6704 0139 0B .uleb128 0xb
+ 6705 013a 3A .uleb128 0x3a
+ 6706 013b 0B .uleb128 0xb
+ 6707 013c 3B .uleb128 0x3b
+ 6708 013d 05 .uleb128 0x5
+ 6709 013e 01 .uleb128 0x1
+ 6710 013f 13 .uleb128 0x13
+ 6711 0140 00 .byte 0x0
+ 6712 0141 00 .byte 0x0
+ 6713 0142 1E .uleb128 0x1e
+ 6714 0143 2E .uleb128 0x2e
+ 6715 0144 01 .byte 0x1
+ 6716 0145 03 .uleb128 0x3
+
GAS LISTING /tmp/ccq6ONvw.s page 148
+
+
+ 6717 0146 0E .uleb128 0xe
+ 6718 0147 3A .uleb128 0x3a
+ 6719 0148 0B .uleb128 0xb
+ 6720 0149 3B .uleb128 0x3b
+ 6721 014a 0B .uleb128 0xb
+ 6722 014b 27 .uleb128 0x27
+ 6723 014c 0C .uleb128 0xc
+ 6724 014d 49 .uleb128 0x49
+ 6725 014e 13 .uleb128 0x13
+ 6726 014f 11 .uleb128 0x11
+ 6727 0150 01 .uleb128 0x1
+ 6728 0151 12 .uleb128 0x12
+ 6729 0152 01 .uleb128 0x1
+ 6730 0153 40 .uleb128 0x40
+ 6731 0154 06 .uleb128 0x6
+ 6732 0155 01 .uleb128 0x1
+ 6733 0156 13 .uleb128 0x13
+ 6734 0157 00 .byte 0x0
+ 6735 0158 00 .byte 0x0
+ 6736 0159 1F .uleb128 0x1f
+ 6737 015a 05 .uleb128 0x5
+ 6738 015b 00 .byte 0x0
+ 6739 015c 03 .uleb128 0x3
+ 6740 015d 0E .uleb128 0xe
+ 6741 015e 3A .uleb128 0x3a
+ 6742 015f 0B .uleb128 0xb
+ 6743 0160 3B .uleb128 0x3b
+ 6744 0161 0B .uleb128 0xb
+ 6745 0162 49 .uleb128 0x49
+ 6746 0163 13 .uleb128 0x13
+ 6747 0164 02 .uleb128 0x2
+ 6748 0165 0A .uleb128 0xa
+ 6749 0166 00 .byte 0x0
+ 6750 0167 00 .byte 0x0
+ 6751 0168 20 .uleb128 0x20
+ 6752 0169 34 .uleb128 0x34
+ 6753 016a 00 .byte 0x0
+ 6754 016b 03 .uleb128 0x3
+ 6755 016c 08 .uleb128 0x8
+ 6756 016d 3A .uleb128 0x3a
+ 6757 016e 0B .uleb128 0xb
+ 6758 016f 3B .uleb128 0x3b
+ 6759 0170 0B .uleb128 0xb
+ 6760 0171 49 .uleb128 0x49
+ 6761 0172 13 .uleb128 0x13
+ 6762 0173 02 .uleb128 0x2
+ 6763 0174 0A .uleb128 0xa
+ 6764 0175 00 .byte 0x0
+ 6765 0176 00 .byte 0x0
+ 6766 0177 21 .uleb128 0x21
+ 6767 0178 2E .uleb128 0x2e
+ 6768 0179 01 .byte 0x1
+ 6769 017a 03 .uleb128 0x3
+ 6770 017b 0E .uleb128 0xe
+ 6771 017c 3A .uleb128 0x3a
+ 6772 017d 0B .uleb128 0xb
+ 6773 017e 3B .uleb128 0x3b
+
GAS LISTING /tmp/ccq6ONvw.s page 149
+
+
+ 6774 017f 0B .uleb128 0xb
+ 6775 0180 27 .uleb128 0x27
+ 6776 0181 0C .uleb128 0xc
+ 6777 0182 11 .uleb128 0x11
+ 6778 0183 01 .uleb128 0x1
+ 6779 0184 12 .uleb128 0x12
+ 6780 0185 01 .uleb128 0x1
+ 6781 0186 40 .uleb128 0x40
+ 6782 0187 06 .uleb128 0x6
+ 6783 0188 01 .uleb128 0x1
+ 6784 0189 13 .uleb128 0x13
+ 6785 018a 00 .byte 0x0
+ 6786 018b 00 .byte 0x0
+ 6787 018c 22 .uleb128 0x22
+ 6788 018d 05 .uleb128 0x5
+ 6789 018e 00 .byte 0x0
+ 6790 018f 03 .uleb128 0x3
+ 6791 0190 08 .uleb128 0x8
+ 6792 0191 3A .uleb128 0x3a
+ 6793 0192 0B .uleb128 0xb
+ 6794 0193 3B .uleb128 0x3b
+ 6795 0194 0B .uleb128 0xb
+ 6796 0195 49 .uleb128 0x49
+ 6797 0196 13 .uleb128 0x13
+ 6798 0197 02 .uleb128 0x2
+ 6799 0198 0A .uleb128 0xa
+ 6800 0199 00 .byte 0x0
+ 6801 019a 00 .byte 0x0
+ 6802 019b 23 .uleb128 0x23
+ 6803 019c 34 .uleb128 0x34
+ 6804 019d 00 .byte 0x0
+ 6805 019e 03 .uleb128 0x3
+ 6806 019f 0E .uleb128 0xe
+ 6807 01a0 49 .uleb128 0x49
+ 6808 01a1 13 .uleb128 0x13
+ 6809 01a2 34 .uleb128 0x34
+ 6810 01a3 0C .uleb128 0xc
+ 6811 01a4 02 .uleb128 0x2
+ 6812 01a5 0A .uleb128 0xa
+ 6813 01a6 00 .byte 0x0
+ 6814 01a7 00 .byte 0x0
+ 6815 01a8 24 .uleb128 0x24
+ 6816 01a9 34 .uleb128 0x34
+ 6817 01aa 00 .byte 0x0
+ 6818 01ab 03 .uleb128 0x3
+ 6819 01ac 08 .uleb128 0x8
+ 6820 01ad 3A .uleb128 0x3a
+ 6821 01ae 0B .uleb128 0xb
+ 6822 01af 3B .uleb128 0x3b
+ 6823 01b0 05 .uleb128 0x5
+ 6824 01b1 49 .uleb128 0x49
+ 6825 01b2 13 .uleb128 0x13
+ 6826 01b3 02 .uleb128 0x2
+ 6827 01b4 0A .uleb128 0xa
+ 6828 01b5 00 .byte 0x0
+ 6829 01b6 00 .byte 0x0
+ 6830 01b7 25 .uleb128 0x25
+
GAS LISTING /tmp/ccq6ONvw.s page 150
+
+
+ 6831 01b8 2E .uleb128 0x2e
+ 6832 01b9 01 .byte 0x1
+ 6833 01ba 03 .uleb128 0x3
+ 6834 01bb 0E .uleb128 0xe
+ 6835 01bc 3A .uleb128 0x3a
+ 6836 01bd 0B .uleb128 0xb
+ 6837 01be 3B .uleb128 0x3b
+ 6838 01bf 05 .uleb128 0x5
+ 6839 01c0 27 .uleb128 0x27
+ 6840 01c1 0C .uleb128 0xc
+ 6841 01c2 49 .uleb128 0x49
+ 6842 01c3 13 .uleb128 0x13
+ 6843 01c4 11 .uleb128 0x11
+ 6844 01c5 01 .uleb128 0x1
+ 6845 01c6 12 .uleb128 0x12
+ 6846 01c7 01 .uleb128 0x1
+ 6847 01c8 40 .uleb128 0x40
+ 6848 01c9 06 .uleb128 0x6
+ 6849 01ca 01 .uleb128 0x1
+ 6850 01cb 13 .uleb128 0x13
+ 6851 01cc 00 .byte 0x0
+ 6852 01cd 00 .byte 0x0
+ 6853 01ce 26 .uleb128 0x26
+ 6854 01cf 05 .uleb128 0x5
+ 6855 01d0 00 .byte 0x0
+ 6856 01d1 03 .uleb128 0x3
+ 6857 01d2 0E .uleb128 0xe
+ 6858 01d3 3A .uleb128 0x3a
+ 6859 01d4 0B .uleb128 0xb
+ 6860 01d5 3B .uleb128 0x3b
+ 6861 01d6 05 .uleb128 0x5
+ 6862 01d7 49 .uleb128 0x49
+ 6863 01d8 13 .uleb128 0x13
+ 6864 01d9 02 .uleb128 0x2
+ 6865 01da 0A .uleb128 0xa
+ 6866 01db 00 .byte 0x0
+ 6867 01dc 00 .byte 0x0
+ 6868 01dd 27 .uleb128 0x27
+ 6869 01de 05 .uleb128 0x5
+ 6870 01df 00 .byte 0x0
+ 6871 01e0 03 .uleb128 0x3
+ 6872 01e1 08 .uleb128 0x8
+ 6873 01e2 3A .uleb128 0x3a
+ 6874 01e3 0B .uleb128 0xb
+ 6875 01e4 3B .uleb128 0x3b
+ 6876 01e5 05 .uleb128 0x5
+ 6877 01e6 49 .uleb128 0x49
+ 6878 01e7 13 .uleb128 0x13
+ 6879 01e8 02 .uleb128 0x2
+ 6880 01e9 0A .uleb128 0xa
+ 6881 01ea 00 .byte 0x0
+ 6882 01eb 00 .byte 0x0
+ 6883 01ec 28 .uleb128 0x28
+ 6884 01ed 34 .uleb128 0x34
+ 6885 01ee 00 .byte 0x0
+ 6886 01ef 03 .uleb128 0x3
+ 6887 01f0 0E .uleb128 0xe
+
GAS LISTING /tmp/ccq6ONvw.s page 151
+
+
+ 6888 01f1 3A .uleb128 0x3a
+ 6889 01f2 0B .uleb128 0xb
+ 6890 01f3 3B .uleb128 0x3b
+ 6891 01f4 05 .uleb128 0x5
+ 6892 01f5 49 .uleb128 0x49
+ 6893 01f6 13 .uleb128 0x13
+ 6894 01f7 02 .uleb128 0x2
+ 6895 01f8 0A .uleb128 0xa
+ 6896 01f9 00 .byte 0x0
+ 6897 01fa 00 .byte 0x0
+ 6898 01fb 29 .uleb128 0x29
+ 6899 01fc 0B .uleb128 0xb
+ 6900 01fd 01 .byte 0x1
+ 6901 01fe 11 .uleb128 0x11
+ 6902 01ff 01 .uleb128 0x1
+ 6903 0200 12 .uleb128 0x12
+ 6904 0201 01 .uleb128 0x1
+ 6905 0202 00 .byte 0x0
+ 6906 0203 00 .byte 0x0
+ 6907 0204 2A .uleb128 0x2a
+ 6908 0205 2E .uleb128 0x2e
+ 6909 0206 01 .byte 0x1
+ 6910 0207 3F .uleb128 0x3f
+ 6911 0208 0C .uleb128 0xc
+ 6912 0209 03 .uleb128 0x3
+ 6913 020a 0E .uleb128 0xe
+ 6914 020b 3A .uleb128 0x3a
+ 6915 020c 0B .uleb128 0xb
+ 6916 020d 3B .uleb128 0x3b
+ 6917 020e 05 .uleb128 0x5
+ 6918 020f 27 .uleb128 0x27
+ 6919 0210 0C .uleb128 0xc
+ 6920 0211 49 .uleb128 0x49
+ 6921 0212 13 .uleb128 0x13
+ 6922 0213 11 .uleb128 0x11
+ 6923 0214 01 .uleb128 0x1
+ 6924 0215 12 .uleb128 0x12
+ 6925 0216 01 .uleb128 0x1
+ 6926 0217 40 .uleb128 0x40
+ 6927 0218 06 .uleb128 0x6
+ 6928 0219 01 .uleb128 0x1
+ 6929 021a 13 .uleb128 0x13
+ 6930 021b 00 .byte 0x0
+ 6931 021c 00 .byte 0x0
+ 6932 021d 2B .uleb128 0x2b
+ 6933 021e 34 .uleb128 0x34
+ 6934 021f 00 .byte 0x0
+ 6935 0220 03 .uleb128 0x3
+ 6936 0221 0E .uleb128 0xe
+ 6937 0222 3A .uleb128 0x3a
+ 6938 0223 0B .uleb128 0xb
+ 6939 0224 3B .uleb128 0x3b
+ 6940 0225 0B .uleb128 0xb
+ 6941 0226 49 .uleb128 0x49
+ 6942 0227 13 .uleb128 0x13
+ 6943 0228 3F .uleb128 0x3f
+ 6944 0229 0C .uleb128 0xc
+
GAS LISTING /tmp/ccq6ONvw.s page 152
+
+
+ 6945 022a 02 .uleb128 0x2
+ 6946 022b 0A .uleb128 0xa
+ 6947 022c 00 .byte 0x0
+ 6948 022d 00 .byte 0x0
+ 6949 022e 00 .byte 0x0
+ 6950 .section .debug_pubnames,"", at progbits
+ 6951 0000 39000000 .long 0x39
+ 6952 0004 0200 .value 0x2
+ 6953 0006 00000000 .long .Ldebug_info0
+ 6954 000a 991F0000 .long 0x1f99
+ 6955 000e 861E0000 .long 0x1e86
+ 6956 0012 4B436970 .string "KCipherVecMake"
+ 6956 68657256
+ 6956 65634D61
+ 6956 6B6500
+ 6957 0021 7D1F0000 .long 0x1f7d
+ 6958 0025 4B436970 .string "KCipherVecClassName"
+ 6958 68657256
+ 6958 6563436C
+ 6958 6173734E
+ 6958 616D6500
+ 6959 0039 00000000 .long 0x0
+ 6960 .section .debug_aranges,"", at progbits
+ 6961 0000 2C000000 .long 0x2c
+ 6962 0004 0200 .value 0x2
+ 6963 0006 00000000 .long .Ldebug_info0
+ 6964 000a 08 .byte 0x8
+ 6965 000b 00 .byte 0x0
+ 6966 000c 0000 .value 0x0
+ 6967 000e 0000 .value 0x0
+ 6968 0010 00000000 .quad .Ltext0
+ 6968 00000000
+ 6969 0018 7C100000 .quad .Letext0-.Ltext0
+ 6969 00000000
+ 6970 0020 00000000 .quad 0x0
+ 6970 00000000
+ 6971 0028 00000000 .quad 0x0
+ 6971 00000000
+ 6972 .section .debug_str,"MS", at progbits,1
+ 6973 .LASF90:
+ 6974 0000 645F6B65 .string "d_key"
+ 6974 7900
+ 6975 .LASF332:
+ 6976 0006 72634475 .string "rcDuplicate"
+ 6976 706C6963
+ 6976 61746500
+ 6977 .LASF359:
+ 6978 0012 4B436970 .string "KCipherVecSetEncryptIvec"
+ 6978 68657256
+ 6978 65635365
+ 6978 74456E63
+ 6978 72797074
+ 6979 .LASF135:
+ 6980 002b 7263436F .string "rcCondition"
+ 6980 6E646974
+ 6980 696F6E00
+ 6981 .LASF249:
+
GAS LISTING /tmp/ccq6ONvw.s page 153
+
+
+ 6982 0037 7263456E .string "rcEncrypting"
+ 6982 63727970
+ 6982 74696E67
+ 6982 00
+ 6983 .LASF208:
+ 6984 0044 72634F70 .string "rcOpening"
+ 6984 656E696E
+ 6984 6700
+ 6985 .LASF216:
+ 6986 004e 72635065 .string "rcPersisting"
+ 6986 72736973
+ 6986 74696E67
+ 6986 00
+ 6987 .LASF385:
+ 6988 005b 4B436970 .string "KCipherVecDecryptCtr"
+ 6988 68657256
+ 6988 65634465
+ 6988 63727970
+ 6988 74437472
+ 6989 .LASF254:
+ 6990 0070 72635365 .string "rcSending"
+ 6990 6E64696E
+ 6990 6700
+ 6991 .LASF248:
+ 6992 007a 72634170 .string "rcAppending"
+ 6992 70656E64
+ 6992 696E6700
+ 6993 .LASF234:
+ 6994 0086 72635369 .string "rcSignaling"
+ 6994 676E616C
+ 6994 696E6700
+ 6995 .LASF14:
+ 6996 0092 4442475F .string "DBG_BLAST"
+ 6996 424C4153
+ 6996 5400
+ 6997 .LASF290:
+ 6998 009c 72635369 .string "rcSignalSet"
+ 6998 676E616C
+ 6998 53657400
+ 6999 .LASF236:
+ 7000 00a8 72634174 .string "rcAttaching"
+ 7000 74616368
+ 7000 696E6700
+ 7001 .LASF168:
+ 7002 00b4 72635461 .string "rcTable"
+ 7002 626C6500
+ 7003 .LASF66:
+ 7004 00bc 64656372 .string "decrypt_cfb"
+ 7004 7970745F
+ 7004 63666200
+ 7005 .LASF132:
+ 7006 00c8 72634275 .string "rcBuffer"
+ 7006 66666572
+ 7006 00
+ 7007 .LASF264:
+ 7008 00d1 72634D65 .string "rcMemory"
+ 7008 6D6F7279
+
GAS LISTING /tmp/ccq6ONvw.s page 154
+
+
+ 7008 00
+ 7009 .LASF197:
+ 7010 00da 72634C6F .string "rcLocking"
+ 7010 636B696E
+ 7010 6700
+ 7011 .LASF232:
+ 7012 00e4 72635061 .string "rcParsing"
+ 7012 7273696E
+ 7012 6700
+ 7013 .LASF261:
+ 7014 00ee 72635365 .string "rcSelf"
+ 7014 6C6600
+ 7015 .LASF154:
+ 7016 00f5 72634D65 .string "rcMetadata"
+ 7016 74616461
+ 7016 746100
+ 7017 .LASF277:
+ 7018 0100 72634172 .string "rcArcHardLink"
+ 7018 63486172
+ 7018 644C696E
+ 7018 6B00
+ 7019 .LASF103:
+ 7020 010e 7263436F .string "rcCont"
+ 7020 6E7400
+ 7021 .LASF285:
+ 7022 0115 72634368 .string "rcChecksum"
+ 7022 65636B73
+ 7022 756D00
+ 7023 .LASF357:
+ 7024 0120 5F5F6675 .string "__func__"
+ 7024 6E635F5F
+ 7024 00
+ 7025 .LASF329:
+ 7026 0129 7263546F .string "rcTooShort"
+ 7026 6F53686F
+ 7026 727400
+ 7027 .LASF159:
+ 7028 0134 72635061 .string "rcPagemap"
+ 7028 67656D61
+ 7028 7000
+ 7029 .LASF111:
+ 7030 013e 72634170 .string "rcApp"
+ 7030 7000
+ 7031 .LASF10:
+ 7032 0144 61746F6D .string "atomic32_t"
+ 7032 69633332
+ 7032 5F7400
+ 7033 .LASF56:
+ 7034 014f 7365745F .string "set_decrypt_ctr_func"
+ 7034 64656372
+ 7034 7970745F
+ 7034 6374725F
+ 7034 66756E63
+ 7035 .LASF65:
+ 7036 0164 656E6372 .string "encrypt_cfb"
+ 7036 7970745F
+ 7036 63666200
+
GAS LISTING /tmp/ccq6ONvw.s page 155
+
+
+ 7037 .LASF173:
+ 7038 0170 72635472 .string "rcTrie"
+ 7038 696500
+ 7039 .LASF114:
+ 7040 0177 72634C61 .string "rcLastModule_v1_0"
+ 7040 73744D6F
+ 7040 64756C65
+ 7040 5F76315F
+ 7040 3000
+ 7041 .LASF121:
+ 7042 0189 72634C61 .string "rcLastModule_v1_1"
+ 7042 73744D6F
+ 7042 64756C65
+ 7042 5F76315F
+ 7042 3100
+ 7043 .LASF272:
+ 7044 019b 72634279 .string "rcByteOrder"
+ 7044 74654F72
+ 7044 64657200
+ 7045 .LASF85:
+ 7046 01a7 4145534B .string "AESKeySchedule"
+ 7046 65795363
+ 7046 68656475
+ 7046 6C6500
+ 7047 .LASF333:
+ 7048 01b6 72634F75 .string "rcOutOfKDirectory"
+ 7048 744F664B
+ 7048 44697265
+ 7048 63746F72
+ 7048 7900
+ 7049 .LASF86:
+ 7050 01c8 726F756E .string "round_keys"
+ 7050 645F6B65
+ 7050 797300
+ 7051 .LASF190:
+ 7052 01d3 7263436F .string "rcConstructing"
+ 7052 6E737472
+ 7052 75637469
+ 7052 6E6700
+ 7053 .LASF96:
+ 7054 01e2 6B636970 .string "kcipher_AES"
+ 7054 6865725F
+ 7054 41455300
+ 7055 .LASF97:
+ 7056 01ee 6B636970 .string "kcipher_count"
+ 7056 6865725F
+ 7056 636F756E
+ 7056 7400
+ 7057 .LASF379:
+ 7058 01fc 4B436970 .string "KCipherVecDecryptPcbc"
+ 7058 68657256
+ 7058 65634465
+ 7058 63727970
+ 7058 74506362
+ 7059 .LASF393:
+ 7060 0212 74797065 .string "type"
+ 7060 00
+
GAS LISTING /tmp/ccq6ONvw.s page 156
+
+
+ 7061 .LASF347:
+ 7062 0217 626C6F63 .string "block"
+ 7062 6B00
+ 7063 .LASF9:
+ 7064 021d 72635F74 .string "rc_t"
+ 7064 00
+ 7065 .LASF266:
+ 7066 0222 7263466F .string "rcFormat"
+ 7066 726D6174
+ 7066 00
+ 7067 .LASF324:
+ 7068 022b 7263556E .string "rcUnauthorized"
+ 7068 61757468
+ 7068 6F72697A
+ 7068 656400
+ 7069 .LASF349:
+ 7070 023a 63766F75 .string "cvout"
+ 7070 7400
+ 7071 .LASF204:
+ 7072 0240 72635265 .string "rcRemoving"
+ 7072 6D6F7669
+ 7072 6E6700
+ 7073 .LASF117:
+ 7074 024b 72634B72 .string "rcKrypto"
+ 7074 7970746F
+ 7074 00
+ 7075 .LASF378:
+ 7076 0254 4B436970 .string "KCipherVecEncryptPcbc"
+ 7076 68657256
+ 7076 6563456E
+ 7076 63727970
+ 7076 74506362
+ 7077 .LASF195:
+ 7078 026a 72635669 .string "rcVisiting"
+ 7078 73697469
+ 7078 6E6700
+ 7079 .LASF125:
+ 7080 0275 72634172 .string "rcArc"
+ 7080 6300
+ 7081 .LASF362:
+ 7082 027b 4B436970 .string "KCipherVecSetEncryptCounterFunc"
+ 7082 68657256
+ 7082 65635365
+ 7082 74456E63
+ 7082 72797074
+ 7083 .LASF100:
+ 7084 029b 72634578 .string "rcExe"
+ 7084 6500
+ 7085 .LASF330:
+ 7086 02a1 7263546F .string "rcTooLong"
+ 7086 6F4C6F6E
+ 7086 6700
+ 7087 .LASF258:
+ 7088 02ab 52434F62 .string "RCObject"
+ 7088 6A656374
+ 7088 00
+ 7089 .LASF268:
+
GAS LISTING /tmp/ccq6ONvw.s page 157
+
+
+ 7090 02b4 7263496E .string "rcInterface"
+ 7090 74657266
+ 7090 61636500
+ 7091 .LASF196:
+ 7092 02c0 72635265 .string "rcResolving"
+ 7092 736F6C76
+ 7092 696E6700
+ 7093 .LASF394:
+ 7094 02cc 4B436970 .string "KCipherVec_vt_v1"
+ 7094 68657256
+ 7094 65635F76
+ 7094 745F7631
+ 7094 00
+ 7095 .LASF88:
+ 7096 02dd 43697068 .string "CipherAes"
+ 7096 65724165
+ 7096 7300
+ 7097 .LASF138:
+ 7098 02e7 72634469 .string "rcDirectory"
+ 7098 72656374
+ 7098 6F727900
+ 7099 .LASF2:
+ 7100 02f3 6C6F6E67 .string "long int"
+ 7100 20696E74
+ 7100 00
+ 7101 .LASF226:
+ 7102 02fc 72635661 .string "rcValidating"
+ 7102 6C696461
+ 7102 74696E67
+ 7102 00
+ 7103 .LASF44:
+ 7104 0309 63697068 .string "cipher_ctr_func"
+ 7104 65725F63
+ 7104 74725F66
+ 7104 756E6300
+ 7105 .LASF128:
+ 7106 0319 72634172 .string "rcArgv"
+ 7106 677600
+ 7107 .LASF104:
+ 7108 0320 72634353 .string "rcCS"
+ 7108 00
+ 7109 .LASF185:
+ 7110 0325 72635572 .string "rcUri"
+ 7110 6900
+ 7111 .LASF207:
+ 7112 032b 72634372 .string "rcCreating"
+ 7112 65617469
+ 7112 6E6700
+ 7113 .LASF40:
+ 7114 0336 656E6372 .string "encrypt_ivec"
+ 7114 7970745F
+ 7114 69766563
+ 7114 00
+ 7115 .LASF57:
+ 7116 0343 656E6372 .string "encrypt"
+ 7116 79707400
+ 7117 .LASF72:
+
GAS LISTING /tmp/ccq6ONvw.s page 158
+
+
+ 7118 034b 43697068 .string "CipherBlock"
+ 7118 6572426C
+ 7118 6F636B00
+ 7119 .LASF77:
+ 7120 0357 76313238 .string "v128_u8_t"
+ 7120 5F75385F
+ 7120 7400
+ 7121 .LASF19:
+ 7122 0361 4442475F .string "DBG_XML"
+ 7122 584D4C00
+ 7123 .LASF31:
+ 7124 0369 4442475F .string "DBG_MOD_COUNT"
+ 7124 4D4F445F
+ 7124 434F554E
+ 7124 5400
+ 7125 .LASF355:
+ 7126 0377 75736572 .string "user_key_bits"
+ 7126 5F6B6579
+ 7126 5F626974
+ 7126 7300
+ 7127 .LASF109:
+ 7128 0385 72634442 .string "rcDB"
+ 7128 00
+ 7129 .LASF287:
+ 7130 038a 7263436F .string "rcConnection"
+ 7130 6E6E6563
+ 7130 74696F6E
+ 7130 00
+ 7131 .LASF155:
+ 7132 0397 72634D67 .string "rcMgr"
+ 7132 7200
+ 7133 .LASF317:
+ 7134 039d 72635669 .string "rcViolated"
+ 7134 6F6C6174
+ 7134 656400
+ 7135 .LASF45:
+ 7136 03a8 4B436970 .string "KCipherVec"
+ 7136 68657256
+ 7136 656300
+ 7137 .LASF250:
+ 7138 03b3 72634465 .string "rcDecrypting"
+ 7138 63727970
+ 7138 74696E67
+ 7138 00
+ 7139 .LASF0:
+ 7140 03c0 7369676E .string "signed char"
+ 7140 65642063
+ 7140 68617200
+ 7141 .LASF5:
+ 7142 03cc 75696E74 .string "uint8_t"
+ 7142 385F7400
+ 7143 .LASF133:
+ 7144 03d4 72634368 .string "rcChar"
+ 7144 617200
+ 7145 .LASF118:
+ 7146 03db 72635244 .string "rcRDBMS"
+ 7146 424D5300
+
GAS LISTING /tmp/ccq6ONvw.s page 159
+
+
+ 7147 .LASF162:
+ 7148 03e3 72635175 .string "rcQueue"
+ 7148 65756500
+ 7149 .LASF356:
+ 7150 03eb 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 7150 45545459
+ 7150 5F46554E
+ 7150 4354494F
+ 7150 4E5F5F00
+ 7151 .LASF12:
+ 7152 03ff 4442475F .string "DBG_MOD_NOT_FOUND"
+ 7152 4D4F445F
+ 7152 4E4F545F
+ 7152 464F554E
+ 7152 4400
+ 7153 .LASF214:
+ 7154 0411 72635265 .string "rcReverting"
+ 7154 76657274
+ 7154 696E6700
+ 7155 .LASF130:
+ 7156 041d 72634261 .string "rcBarrier"
+ 7156 72726965
+ 7156 7200
+ 7157 .LASF314:
+ 7158 0427 72634578 .string "rcExhausted"
+ 7158 68617573
+ 7158 74656400
+ 7159 .LASF3:
+ 7160 0433 756E7369 .string "unsigned char"
+ 7160 676E6564
+ 7160 20636861
+ 7160 7200
+ 7161 .LASF187:
+ 7162 0441 5243436F .string "RCContext"
+ 7162 6E746578
+ 7162 7400
+ 7163 .LASF150:
+ 7164 044b 72634C6F .string "rcLock"
+ 7164 636B00
+ 7165 .LASF303:
+ 7166 0452 72634261 .string "rcBadVersion"
+ 7166 64566572
+ 7166 73696F6E
+ 7166 00
+ 7167 .LASF304:
+ 7168 045f 72634465 .string "rcDestroyed"
+ 7168 7374726F
+ 7168 79656400
+ 7169 .LASF167:
+ 7170 046b 72635374 .string "rcString"
+ 7170 72696E67
+ 7170 00
+ 7171 .LASF129:
+ 7172 0474 72634174 .string "rcAttr"
+ 7172 747200
+ 7173 .LASF371:
+ 7174 047b 4B436970 .string "KCipherVecEncryptEcb"
+
GAS LISTING /tmp/ccq6ONvw.s page 160
+
+
+ 7174 68657256
+ 7174 6563456E
+ 7174 63727970
+ 7174 74456362
+ 7175 .LASF151:
+ 7176 0490 72634C6F .string "rcLog"
+ 7176 6700
+ 7177 .LASF392:
+ 7178 0496 6E65775F .string "new_obj"
+ 7178 6F626A00
+ 7179 .LASF15:
+ 7180 049e 4442475F .string "DBG_KDB"
+ 7180 4B444200
+ 7181 .LASF255:
+ 7182 04a6 72635072 .string "rcProcessing"
+ 7182 6F636573
+ 7182 73696E67
+ 7182 00
+ 7183 .LASF105:
+ 7184 04b3 72634646 .string "rcFF"
+ 7184 00
+ 7185 .LASF396:
+ 7186 04b8 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 7186 652F726F
+ 7186 6461726D
+ 7186 65722F73
+ 7186 72615F73
+ 7187 .LASF106:
+ 7188 04f0 72634653 .string "rcFS"
+ 7188 00
+ 7189 .LASF350:
+ 7190 04f5 43697068 .string "CipherVecIn"
+ 7190 65725665
+ 7190 63496E00
+ 7191 .LASF193:
+ 7192 0501 72634163 .string "rcAccessing"
+ 7192 63657373
+ 7192 696E6700
+ 7193 .LASF311:
+ 7194 050d 7263496E .string "rcInterrupted"
+ 7194 74657272
+ 7194 75707465
+ 7194 6400
+ 7195 .LASF319:
+ 7196 051b 72634E6F .string "rcNotFound"
+ 7196 74466F75
+ 7196 6E6400
+ 7197 .LASF11:
+ 7198 0526 63686172 .string "char"
+ 7198 00
+ 7199 .LASF157:
+ 7200 052b 72634E6F .string "rcNode"
+ 7200 646500
+ 7201 .LASF366:
+ 7202 0532 4B436970 .string "KCipherVecDecryptV1"
+ 7202 68657256
+ 7202 65634465
+
GAS LISTING /tmp/ccq6ONvw.s page 161
+
+
+ 7202 63727970
+ 7202 74563100
+ 7203 .LASF29:
+ 7204 0546 4442475F .string "DBG_AES"
+ 7204 41455300
+ 7205 .LASF288:
+ 7206 054e 72634572 .string "rcError"
+ 7206 726F7200
+ 7207 .LASF387:
+ 7208 0556 706F626A .string "pobj"
+ 7208 00
+ 7209 .LASF205:
+ 7210 055b 7263436C .string "rcClearing"
+ 7210 65617269
+ 7210 6E6700
+ 7211 .LASF263:
+ 7212 0566 72634F66 .string "rcOffset"
+ 7212 66736574
+ 7212 00
+ 7213 .LASF209:
+ 7214 056f 7263436C .string "rcClosing"
+ 7214 6F73696E
+ 7214 6700
+ 7215 .LASF141:
+ 7216 0579 72634669 .string "rcFile"
+ 7216 6C6500
+ 7217 .LASF170:
+ 7218 0580 72635469 .string "rcTimeout"
+ 7218 6D656F75
+ 7218 7400
+ 7219 .LASF158:
+ 7220 058a 72634E75 .string "rcNumeral"
+ 7220 6D657261
+ 7220 6C00
+ 7221 .LASF235:
+ 7222 0594 72635761 .string "rcWaiting"
+ 7222 6974696E
+ 7222 6700
+ 7223 .LASF239:
+ 7224 059e 72634650 .string "rcFPCoding"
+ 7224 436F6469
+ 7224 6E6700
+ 7225 .LASF291:
+ 7226 05a9 72635369 .string "rcSize"
+ 7226 7A6500
+ 7227 .LASF276:
+ 7228 05b0 72634469 .string "rcDirEntry"
+ 7228 72456E74
+ 7228 727900
+ 7229 .LASF228:
+ 7230 05bb 72634875 .string "rcHuffmanCoding"
+ 7230 66666D61
+ 7230 6E436F64
+ 7230 696E6700
+ 7231 .LASF24:
+ 7232 05cb 4442475F .string "DBG_KFG"
+ 7232 4B464700
+
GAS LISTING /tmp/ccq6ONvw.s page 162
+
+
+ 7233 .LASF309:
+ 7234 05d3 72634275 .string "rcBusy"
+ 7234 737900
+ 7235 .LASF21:
+ 7236 05da 4442475F .string "DBG_SRA"
+ 7236 53524100
+ 7237 .LASF267:
+ 7238 05e2 72635472 .string "rcTransfer"
+ 7238 616E7366
+ 7238 657200
+ 7239 .LASF18:
+ 7240 05ed 4442475F .string "DBG_KFS"
+ 7240 4B465300
+ 7241 .LASF222:
+ 7242 05f5 72635061 .string "rcPacking"
+ 7242 636B696E
+ 7242 6700
+ 7243 .LASF218:
+ 7244 05ff 7263436F .string "rcCopying"
+ 7244 7079696E
+ 7244 6700
+ 7245 .LASF256:
+ 7246 0609 72634964 .string "rcIdentifying"
+ 7246 656E7469
+ 7246 6679696E
+ 7246 6700
+ 7247 .LASF365:
+ 7248 0617 4B436970 .string "KCipherVecEncryptV1"
+ 7248 68657256
+ 7248 6563456E
+ 7248 63727970
+ 7248 74563100
+ 7249 .LASF60:
+ 7250 062b 64656372 .string "decrypt_ecb"
+ 7250 7970745F
+ 7250 65636200
+ 7251 .LASF225:
+ 7252 0637 72634465 .string "rcDecoding"
+ 7252 636F6469
+ 7252 6E6700
+ 7253 .LASF389:
+ 7254 0642 4B436970 .string "KCipherVecAllocNull"
+ 7254 68657256
+ 7254 6563416C
+ 7254 6C6F634E
+ 7254 756C6C00
+ 7255 .LASF153:
+ 7256 0656 72634D65 .string "rcMemMap"
+ 7256 6D4D6170
+ 7256 00
+ 7257 .LASF198:
+ 7258 065f 7263556E .string "rcUnlocking"
+ 7258 6C6F636B
+ 7258 696E6700
+ 7259 .LASF281:
+ 7260 066b 72634974 .string "rcItem"
+ 7260 656D00
+
GAS LISTING /tmp/ccq6ONvw.s page 163
+
+
+ 7261 .LASF83:
+ 7262 0672 4B426C6F .string "KBlockCipherVec_vt_v1"
+ 7262 636B4369
+ 7262 70686572
+ 7262 5665635F
+ 7262 76745F76
+ 7263 .LASF17:
+ 7264 0688 4442475F .string "DBG_LEGREF"
+ 7264 4C454752
+ 7264 454600
+ 7265 .LASF348:
+ 7266 0693 6376696E .string "cvin"
+ 7266 00
+ 7267 .LASF199:
+ 7268 0698 72635265 .string "rcRenaming"
+ 7268 6E616D69
+ 7268 6E6700
+ 7269 .LASF354:
+ 7270 06a3 75736572 .string "user_key"
+ 7270 5F6B6579
+ 7270 00
+ 7271 .LASF269:
+ 7272 06ac 72634964 .string "rcId"
+ 7272 00
+ 7273 .LASF182:
+ 7274 06b1 7263436D .string "rcCmd"
+ 7274 6400
+ 7275 .LASF398:
+ 7276 06b7 43697068 .string "CipherVecOut"
+ 7276 65725665
+ 7276 634F7574
+ 7276 00
+ 7277 .LASF27:
+ 7278 06c4 4442475F .string "DBG_LOADLIB"
+ 7278 4C4F4144
+ 7278 4C494200
+ 7279 .LASF321:
+ 7280 06d0 7263556E .string "rcUnlocked"
+ 7280 6C6F636B
+ 7280 656400
+ 7281 .LASF122:
+ 7282 06db 52434D6F .string "RCModule"
+ 7282 64756C65
+ 7282 00
+ 7283 .LASF283:
+ 7284 06e4 7263456E .string "rcEncryption"
+ 7284 63727970
+ 7284 74696F6E
+ 7284 00
+ 7285 .LASF318:
+ 7286 06f1 72634578 .string "rcExists"
+ 7286 69737473
+ 7286 00
+ 7287 .LASF78:
+ 7288 06fa 43697068 .string "CipherVec"
+ 7288 65725665
+ 7288 6300
+
GAS LISTING /tmp/ccq6ONvw.s page 164
+
+
+ 7289 .LASF59:
+ 7290 0704 656E6372 .string "encrypt_ecb"
+ 7290 7970745F
+ 7290 65636200
+ 7291 .LASF337:
+ 7292 0710 72634F70 .string "rcOpen"
+ 7292 656E00
+ 7293 .LASF323:
+ 7294 0717 72634465 .string "rcDeadlock"
+ 7294 61646C6F
+ 7294 636B00
+ 7295 .LASF260:
+ 7296 0722 72634C69 .string "rcLink"
+ 7296 6E6B00
+ 7297 .LASF247:
+ 7298 0729 7263466C .string "rcFlushing"
+ 7298 75736869
+ 7298 6E6700
+ 7299 .LASF295:
+ 7300 0734 72634E6F .string "rcNoErr"
+ 7300 45727200
+ 7301 .LASF274:
+ 7302 073c 72635461 .string "rcTag"
+ 7302 6700
+ 7303 .LASF23:
+ 7304 0742 4442475F .string "DBG_ALIGN"
+ 7304 414C4947
+ 7304 4E00
+ 7305 .LASF238:
+ 7306 074c 72634C6F .string "rcLogging"
+ 7306 6767696E
+ 7306 6700
+ 7307 .LASF331:
+ 7308 0756 7263546F .string "rcTooBig"
+ 7308 6F426967
+ 7308 00
+ 7309 .LASF175:
+ 7310 075f 72635665 .string "rcVector"
+ 7310 63746F72
+ 7310 00
+ 7311 .LASF210:
+ 7312 0768 72635265 .string "rcResizing"
+ 7312 73697A69
+ 7312 6E6700
+ 7313 .LASF184:
+ 7314 0773 72635175 .string "rcQuery"
+ 7314 65727900
+ 7315 .LASF8:
+ 7316 077b 6C6F6E67 .string "long unsigned int"
+ 7316 20756E73
+ 7316 69676E65
+ 7316 6420696E
+ 7316 7400
+ 7317 .LASF316:
+ 7318 078d 72634578 .string "rcExcessive"
+ 7318 63657373
+ 7318 69766500
+
GAS LISTING /tmp/ccq6ONvw.s page 165
+
+
+ 7319 .LASF244:
+ 7320 0799 72634576 .string "rcEvaluating"
+ 7320 616C7561
+ 7320 74696E67
+ 7320 00
+ 7321 .LASF181:
+ 7322 07a6 7263526E .string "rcRng"
+ 7322 6700
+ 7323 .LASF189:
+ 7324 07ac 72634361 .string "rcCasting"
+ 7324 7374696E
+ 7324 6700
+ 7325 .LASF352:
+ 7326 07b6 73656C66 .string "self"
+ 7326 00
+ 7327 .LASF149:
+ 7328 07bb 72634974 .string "rcIterator"
+ 7328 65726174
+ 7328 6F7200
+ 7329 .LASF376:
+ 7330 07c6 4B436970 .string "KCipherVecDecryptCbc"
+ 7330 68657256
+ 7330 65634465
+ 7330 63727970
+ 7330 74436263
+ 7331 .LASF84:
+ 7332 07db 4B426C6F .string "KBlockCipherVec"
+ 7332 636B4369
+ 7332 70686572
+ 7332 56656300
+ 7333 .LASF166:
+ 7334 07eb 72635374 .string "rcStorage"
+ 7334 6F726167
+ 7334 6500
+ 7335 .LASF68:
+ 7336 07f5 64656372 .string "decrypt_ofb"
+ 7336 7970745F
+ 7336 6F666200
+ 7337 .LASF46:
+ 7338 0801 626C6F63 .string "block_cipher"
+ 7338 6B5F6369
+ 7338 70686572
+ 7338 00
+ 7339 .LASF372:
+ 7340 080e 626C6F63 .string "block_count"
+ 7340 6B5F636F
+ 7340 756E7400
+ 7341 .LASF278:
+ 7342 081a 7263526F .string "rcRow"
+ 7342 7700
+ 7343 .LASF382:
+ 7344 0820 4B436970 .string "KCipherVecEncryptOfb"
+ 7344 68657256
+ 7344 6563456E
+ 7344 63727970
+ 7344 744F6662
+ 7345 .LASF20:
+
GAS LISTING /tmp/ccq6ONvw.s page 166
+
+
+ 7346 0835 4442475F .string "DBG_VDB"
+ 7346 56444200
+ 7347 .LASF94:
+ 7348 083d 6B636970 .string "kcipher_type"
+ 7348 6865725F
+ 7348 74797065
+ 7348 00
+ 7349 .LASF178:
+ 7350 084a 72634C61 .string "rcLastTarget_v1_0"
+ 7350 73745461
+ 7350 72676574
+ 7350 5F76315F
+ 7350 3000
+ 7351 .LASF186:
+ 7352 085c 72634C61 .string "rcLastTarget_v1_1"
+ 7352 73745461
+ 7352 72676574
+ 7352 5F76315F
+ 7352 3100
+ 7353 .LASF165:
+ 7354 086e 72635365 .string "rcSemaphore"
+ 7354 6D617068
+ 7354 6F726500
+ 7355 .LASF219:
+ 7356 087a 7263436F .string "rcConcatenating"
+ 7356 6E636174
+ 7356 656E6174
+ 7356 696E6700
+ 7357 .LASF310:
+ 7358 088a 7263496E .string "rcIncomplete"
+ 7358 636F6D70
+ 7358 6C657465
+ 7358 00
+ 7359 .LASF339:
+ 7360 0897 72634E6F .string "rcNotOpen"
+ 7360 744F7065
+ 7360 6E00
+ 7361 .LASF148:
+ 7362 08a1 7263496E .string "rcIndex"
+ 7362 64657800
+ 7363 .LASF67:
+ 7364 08a9 656E6372 .string "encrypt_ofb"
+ 7364 7970745F
+ 7364 6F666200
+ 7365 .LASF55:
+ 7366 08b5 7365745F .string "set_encrypt_ctr_func"
+ 7366 656E6372
+ 7366 7970745F
+ 7366 6374725F
+ 7366 66756E63
+ 7367 .LASF22:
+ 7368 08ca 4442475F .string "DBG_XARC"
+ 7368 58415243
+ 7368 00
+ 7369 .LASF395:
+ 7370 08d3 474E5520 .string "GNU C 4.4.2"
+ 7370 4320342E
+
GAS LISTING /tmp/ccq6ONvw.s page 167
+
+
+ 7370 342E3200
+ 7371 .LASF360:
+ 7372 08df 69766563 .string "ivec"
+ 7372 00
+ 7373 .LASF101:
+ 7374 08e4 72635275 .string "rcRuntime"
+ 7374 6E74696D
+ 7374 6500
+ 7375 .LASF140:
+ 7376 08ee 7263586D .string "rcXmlDoc"
+ 7376 6C446F63
+ 7376 00
+ 7377 .LASF73:
+ 7378 08f7 6C6F6E67 .string "long long int"
+ 7378 206C6F6E
+ 7378 6720696E
+ 7378 7400
+ 7379 .LASF221:
+ 7380 0905 7263506F .string "rcPositioning"
+ 7380 73697469
+ 7380 6F6E696E
+ 7380 6700
+ 7381 .LASF34:
+ 7382 0913 636F756E .string "counter"
+ 7382 74657200
+ 7383 .LASF70:
+ 7384 091b 64656372 .string "decrypt_ctr"
+ 7384 7970745F
+ 7384 63747200
+ 7385 .LASF95:
+ 7386 0927 6B636970 .string "kcipher_null"
+ 7386 6865725F
+ 7386 6E756C6C
+ 7386 00
+ 7387 .LASF152:
+ 7388 0934 72634D44 .string "rcMD5SumFmt"
+ 7388 3553756D
+ 7388 466D7400
+ 7389 .LASF388:
+ 7390 0940 4B436970 .string "KCipherVecInitAes"
+ 7390 68657256
+ 7390 6563496E
+ 7390 69744165
+ 7390 7300
+ 7391 .LASF203:
+ 7392 0952 7263496E .string "rcInserting"
+ 7392 73657274
+ 7392 696E6700
+ 7393 .LASF384:
+ 7394 095e 4B436970 .string "KCipherVecEncryptCtr"
+ 7394 68657256
+ 7394 6563456E
+ 7394 63727970
+ 7394 74437472
+ 7395 .LASF251:
+ 7396 0973 7263436F .string "rcComparing"
+ 7396 6D706172
+
GAS LISTING /tmp/ccq6ONvw.s page 168
+
+
+ 7396 696E6700
+ 7397 .LASF313:
+ 7398 097f 7263456D .string "rcEmpty"
+ 7398 70747900
+ 7399 .LASF145:
+ 7400 0987 7263466F .string "rcFormatter"
+ 7400 726D6174
+ 7400 74657200
+ 7401 .LASF76:
+ 7402 0993 646F7562 .string "double"
+ 7402 6C6500
+ 7403 .LASF230:
+ 7404 099a 72635265 .string "rcRegistering"
+ 7404 67697374
+ 7404 6572696E
+ 7404 6700
+ 7405 .LASF35:
+ 7406 09a8 72656663 .string "refcount"
+ 7406 6F756E74
+ 7406 00
+ 7407 .LASF119:
+ 7408 09b1 72634E53 .string "rcNS"
+ 7408 00
+ 7409 .LASF262:
+ 7410 09b6 72635061 .string "rcParam"
+ 7410 72616D00
+ 7411 .LASF227:
+ 7412 09be 72634578 .string "rcExecuting"
+ 7412 65637574
+ 7412 696E6700
+ 7413 .LASF123:
+ 7414 09ca 52435461 .string "RCTarget"
+ 7414 72676574
+ 7414 00
+ 7415 .LASF368:
+ 7416 09d3 4B436970 .string "KCipherVecDecryptV1Int"
+ 7416 68657256
+ 7416 65634465
+ 7416 63727970
+ 7416 74563149
+ 7417 .LASF284:
+ 7418 09ea 72634372 .string "rcCrc"
+ 7418 6300
+ 7419 .LASF26:
+ 7420 09f0 4442475F .string "DBG_SEARCH"
+ 7420 53454152
+ 7420 434800
+ 7421 .LASF112:
+ 7422 09fb 7263584D .string "rcXML"
+ 7422 4C00
+ 7423 .LASF69:
+ 7424 0a01 656E6372 .string "encrypt_ctr"
+ 7424 7970745F
+ 7424 63747200
+ 7425 .LASF400:
+ 7426 0a0d 4B436970 .string "KCipherVecClassName"
+ 7426 68657256
+
GAS LISTING /tmp/ccq6ONvw.s page 169
+
+
+ 7426 6563436C
+ 7426 6173734E
+ 7426 616D6500
+ 7427 .LASF28:
+ 7428 0a21 4442475F .string "DBG_VFS"
+ 7428 56465300
+ 7429 .LASF74:
+ 7430 0a29 666C6F61 .string "float"
+ 7430 7400
+ 7431 .LASF206:
+ 7432 0a2f 72635570 .string "rcUpdating"
+ 7432 64617469
+ 7432 6E6700
+ 7433 .LASF399:
+ 7434 0a3a 4B436970 .string "KCipherVecMake"
+ 7434 68657256
+ 7434 65634D61
+ 7434 6B6500
+ 7435 .LASF233:
+ 7436 0a49 7263436F .string "rcConverting"
+ 7436 6E766572
+ 7436 74696E67
+ 7436 00
+ 7437 .LASF64:
+ 7438 0a56 64656372 .string "decrypt_pcbc"
+ 7438 7970745F
+ 7438 70636263
+ 7438 00
+ 7439 .LASF98:
+ 7440 0a63 4B426C6F .string "KBlockCipher"
+ 7440 636B4369
+ 7440 70686572
+ 7440 00
+ 7441 .LASF176:
+ 7442 0a70 72634479 .string "rcDylib"
+ 7442 6C696200
+ 7443 .LASF325:
+ 7444 0a78 72635265 .string "rcReadonly"
+ 7444 61646F6E
+ 7444 6C7900
+ 7445 .LASF369:
+ 7446 0a83 4B436970 .string "KCipherVecEncrypt"
+ 7446 68657256
+ 7446 6563456E
+ 7446 63727970
+ 7446 7400
+ 7447 .LASF381:
+ 7448 0a95 4B436970 .string "KCipherVecDecryptCfb"
+ 7448 68657256
+ 7448 65634465
+ 7448 63727970
+ 7448 74436662
+ 7449 .LASF7:
+ 7450 0aaa 756E7369 .string "unsigned int"
+ 7450 676E6564
+ 7450 20696E74
+ 7450 00
+
GAS LISTING /tmp/ccq6ONvw.s page 170
+
+
+ 7451 .LASF326:
+ 7452 0ab7 72635772 .string "rcWriteonly"
+ 7452 6974656F
+ 7452 6E6C7900
+ 7453 .LASF47:
+ 7454 0ac3 4B436970 .string "KCipher_vt"
+ 7454 6865725F
+ 7454 767400
+ 7455 .LASF320:
+ 7456 0ace 72634C6F .string "rcLocked"
+ 7456 636B6564
+ 7456 00
+ 7457 .LASF202:
+ 7458 0ad7 72635072 .string "rcProjecting"
+ 7458 6F6A6563
+ 7458 74696E67
+ 7458 00
+ 7459 .LASF107:
+ 7460 0ae4 72635053 .string "rcPS"
+ 7460 00
+ 7461 .LASF292:
+ 7462 0ae9 72635265 .string "rcRefcount"
+ 7462 66636F75
+ 7462 6E7400
+ 7463 .LASF127:
+ 7464 0af4 7263546F .string "rcTocEntry"
+ 7464 63456E74
+ 7464 727900
+ 7465 .LASF383:
+ 7466 0aff 4B436970 .string "KCipherVecDecryptOfb"
+ 7466 68657256
+ 7466 65634465
+ 7466 63727970
+ 7466 744F6662
+ 7467 .LASF282:
+ 7468 0b14 72634D6F .string "rcMode"
+ 7468 646500
+ 7469 .LASF341:
+ 7470 0b1b 7263556E .string "rcUnequal"
+ 7470 65717561
+ 7470 6C00
+ 7471 .LASF322:
+ 7472 0b25 72634465 .string "rcDetached"
+ 7472 74616368
+ 7472 656400
+ 7473 .LASF328:
+ 7474 0b30 7263496E .string "rcInPlaceNotAllowed"
+ 7474 506C6163
+ 7474 654E6F74
+ 7474 416C6C6F
+ 7474 77656400
+ 7475 .LASF270:
+ 7476 0b44 72635261 .string "rcRange"
+ 7476 6E676500
+ 7477 .LASF397:
+ 7478 0b4c 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 7478 652F726F
+
GAS LISTING /tmp/ccq6ONvw.s page 171
+
+
+ 7478 6461726D
+ 7478 65722F73
+ 7478 72615F73
+ 7479 .LASF280:
+ 7480 0b94 72634C61 .string "rcLastObject_v1_0"
+ 7480 73744F62
+ 7480 6A656374
+ 7480 5F76315F
+ 7480 3000
+ 7481 .LASF293:
+ 7482 0ba6 72634C61 .string "rcLastObject_v1_1"
+ 7482 73744F62
+ 7482 6A656374
+ 7482 5F76315F
+ 7482 3100
+ 7483 .LASF99:
+ 7484 0bb8 62797465 .string "byte"
+ 7484 00
+ 7485 .LASF315:
+ 7486 0bbd 7263496E .string "rcInsufficient"
+ 7486 73756666
+ 7486 69636965
+ 7486 6E7400
+ 7487 .LASF246:
+ 7488 0bcc 72634C61 .string "rcLastContext_v1_0"
+ 7488 7374436F
+ 7488 6E746578
+ 7488 745F7631
+ 7488 5F3000
+ 7489 .LASF257:
+ 7490 0bdf 72634C61 .string "rcLastContext_v1_1"
+ 7490 7374436F
+ 7490 6E746578
+ 7490 745F7631
+ 7490 5F3100
+ 7491 .LASF390:
+ 7492 0bf2 4B436970 .string "KCipherVecInitNull"
+ 7492 68657256
+ 7492 6563496E
+ 7492 69744E75
+ 7492 6C6C00
+ 7493 .LASF39:
+ 7494 0c05 64656372 .string "decrypt_key"
+ 7494 7970745F
+ 7494 6B657900
+ 7495 .LASF177:
+ 7496 0c11 72634578 .string "rcExpression"
+ 7496 70726573
+ 7496 73696F6E
+ 7496 00
+ 7497 .LASF223:
+ 7498 0c1e 7263556E .string "rcUnpacking"
+ 7498 7061636B
+ 7498 696E6700
+ 7499 .LASF139:
+ 7500 0c2a 7263446F .string "rcDoc"
+ 7500 6300
+
GAS LISTING /tmp/ccq6ONvw.s page 172
+
+
+ 7501 .LASF380:
+ 7502 0c30 4B436970 .string "KCipherVecEncryptCfb"
+ 7502 68657256
+ 7502 6563456E
+ 7502 63727970
+ 7502 74436662
+ 7503 .LASF13:
+ 7504 0c45 4442475F .string "DBG_APP"
+ 7504 41505000
+ 7505 .LASF240:
+ 7506 0c4d 72634D75 .string "rcMultiplexing"
+ 7506 6C746970
+ 7506 6C657869
+ 7506 6E6700
+ 7507 .LASF242:
+ 7508 0c5c 72635365 .string "rcSearching"
+ 7508 61726368
+ 7508 696E6700
+ 7509 .LASF342:
+ 7510 0c68 72634661 .string "rcFailed"
+ 7510 696C6564
+ 7510 00
+ 7511 .LASF48:
+ 7512 0c71 4B436970 .string "KCipher_vt_v1"
+ 7512 6865725F
+ 7512 76745F76
+ 7512 3100
+ 7513 .LASF361:
+ 7514 0c7f 4B436970 .string "KCipherVecSetDecryptIvec"
+ 7514 68657256
+ 7514 65635365
+ 7514 74446563
+ 7514 72797074
+ 7515 .LASF307:
+ 7516 0c98 7263496E .string "rcIncorrect"
+ 7516 636F7272
+ 7516 65637400
+ 7517 .LASF146:
+ 7518 0ca4 72634675 .string "rcFunctParam"
+ 7518 6E637450
+ 7518 6172616D
+ 7518 00
+ 7519 .LASF38:
+ 7520 0cb1 656E6372 .string "encrypt_key"
+ 7520 7970745F
+ 7520 6B657900
+ 7521 .LASF271:
+ 7522 0cbd 7263436F .string "rcConstraint"
+ 7522 6E737472
+ 7522 61696E74
+ 7522 00
+ 7523 .LASF217:
+ 7524 0cca 72634672 .string "rcFreezing"
+ 7524 65657A69
+ 7524 6E6700
+ 7525 .LASF297:
+ 7526 0cd5 7263556E .string "rcUnknown"
+
GAS LISTING /tmp/ccq6ONvw.s page 173
+
+
+ 7526 6B6E6F77
+ 7526 6E00
+ 7527 .LASF136:
+ 7528 0cdf 72634375 .string "rcCursor"
+ 7528 72736F72
+ 7528 00
+ 7529 .LASF294:
+ 7530 0ce8 52435374 .string "RCState"
+ 7530 61746500
+ 7531 .LASF82:
+ 7532 0cf0 4B426C6F .string "KBlockCipherByte"
+ 7532 636B4369
+ 7532 70686572
+ 7532 42797465
+ 7532 00
+ 7533 .LASF142:
+ 7534 0d01 72634669 .string "rcFileDesc"
+ 7534 6C654465
+ 7534 736300
+ 7535 .LASF80:
+ 7536 0d0c 4B426C6F .string "KBlockCipherByte_vt_v1"
+ 7536 636B4369
+ 7536 70686572
+ 7536 42797465
+ 7536 5F76745F
+ 7537 .LASF334:
+ 7538 0d23 72634967 .string "rcIgnored"
+ 7538 6E6F7265
+ 7538 6400
+ 7539 .LASF91:
+ 7540 0d2d 655F6976 .string "e_ivec"
+ 7540 656300
+ 7541 .LASF192:
+ 7542 0d34 72635265 .string "rcReleasing"
+ 7542 6C656173
+ 7542 696E6700
+ 7543 .LASF115:
+ 7544 0d40 72634B46 .string "rcKFG"
+ 7544 4700
+ 7545 .LASF273:
+ 7546 0d46 72634D65 .string "rcMessage"
+ 7546 73736167
+ 7546 6500
+ 7547 .LASF220:
+ 7548 0d50 7263466F .string "rcFormatting"
+ 7548 726D6174
+ 7548 74696E67
+ 7548 00
+ 7549 .LASF113:
+ 7550 0d5d 72635352 .string "rcSRA"
+ 7550 4100
+ 7551 .LASF289:
+ 7552 0d63 7263456E .string "rcEnvironment"
+ 7552 7669726F
+ 7552 6E6D656E
+ 7552 7400
+ 7553 .LASF75:
+
GAS LISTING /tmp/ccq6ONvw.s page 174
+
+
+ 7554 0d71 6C6F6E67 .string "long long unsigned int"
+ 7554 206C6F6E
+ 7554 6720756E
+ 7554 7369676E
+ 7554 65642069
+ 7555 .LASF50:
+ 7556 0d88 64657374 .string "destroy"
+ 7556 726F7900
+ 7557 .LASF171:
+ 7558 0d90 7263546F .string "rcToken"
+ 7558 6B656E00
+ 7559 .LASF231:
+ 7560 0d98 7263546F .string "rcTokenizing"
+ 7560 6B656E69
+ 7560 7A696E67
+ 7560 00
+ 7561 .LASF16:
+ 7562 0da5 4442475F .string "DBG_REF"
+ 7562 52454600
+ 7563 .LASF212:
+ 7564 0dad 72635772 .string "rcWriting"
+ 7564 6974696E
+ 7564 6700
+ 7565 .LASF188:
+ 7566 0db7 7263416C .string "rcAllocating"
+ 7566 6C6F6361
+ 7566 74696E67
+ 7566 00
+ 7567 .LASF174:
+ 7568 0dc4 72635479 .string "rcType"
+ 7568 706500
+ 7569 .LASF275:
+ 7570 0dcb 72635265 .string "rcResources"
+ 7570 736F7572
+ 7570 63657300
+ 7571 .LASF156:
+ 7572 0dd7 72634E61 .string "rcNamelist"
+ 7572 6D656C69
+ 7572 737400
+ 7573 .LASF340:
+ 7574 0de2 7263556E .string "rcUndefined"
+ 7574 64656669
+ 7574 6E656400
+ 7575 .LASF92:
+ 7576 0dee 645F6976 .string "d_ivec"
+ 7576 656300
+ 7577 .LASF308:
+ 7578 0df5 7263496E .string "rcInconsistent"
+ 7578 636F6E73
+ 7578 69737465
+ 7578 6E7400
+ 7579 .LASF253:
+ 7580 0e04 72635265 .string "rcRetrieving"
+ 7580 74726965
+ 7580 76696E67
+ 7580 00
+ 7581 .LASF58:
+
GAS LISTING /tmp/ccq6ONvw.s page 175
+
+
+ 7582 0e11 64656372 .string "decrypt"
+ 7582 79707400
+ 7583 .LASF49:
+ 7584 0e19 76657273 .string "version"
+ 7584 696F6E00
+ 7585 .LASF265:
+ 7586 0e21 72634E61 .string "rcName"
+ 7586 6D6500
+ 7587 .LASF367:
+ 7588 0e28 4B436970 .string "KCipherVecEncryptV1Int"
+ 7588 68657256
+ 7588 6563456E
+ 7588 63727970
+ 7588 74563149
+ 7589 .LASF54:
+ 7590 0e3f 7365745F .string "set_decrypt_ivec"
+ 7590 64656372
+ 7590 7970745F
+ 7590 69766563
+ 7590 00
+ 7591 .LASF302:
+ 7592 0e50 72634E75 .string "rcNull"
+ 7592 6C6C00
+ 7593 .LASF224:
+ 7594 0e57 7263456E .string "rcEncoding"
+ 7594 636F6469
+ 7594 6E6700
+ 7595 .LASF143:
+ 7596 0e62 72634669 .string "rcFileFormat"
+ 7596 6C65466F
+ 7596 726D6174
+ 7596 00
+ 7597 .LASF180:
+ 7598 0e6f 7263456E .string "rcEncryptionKey"
+ 7598 63727970
+ 7598 74696F6E
+ 7598 4B657900
+ 7599 .LASF245:
+ 7600 0e7f 7263496E .string "rcInflating"
+ 7600 666C6174
+ 7600 696E6700
+ 7601 .LASF327:
+ 7602 0e8b 72634E6F .string "rcNoPerm"
+ 7602 5065726D
+ 7602 00
+ 7603 .LASF353:
+ 7604 0e94 4B436970 .string "KCipherVecSetEncryptKey"
+ 7604 68657256
+ 7604 65635365
+ 7604 74456E63
+ 7604 72797074
+ 7605 .LASF358:
+ 7606 0eac 4B436970 .string "KCipherVecSetDecryptKey"
+ 7606 68657256
+ 7606 65635365
+ 7606 74446563
+ 7606 72797074
+
GAS LISTING /tmp/ccq6ONvw.s page 176
+
+
+ 7607 .LASF215:
+ 7608 0ec4 72635265 .string "rcResetting"
+ 7608 73657474
+ 7608 696E6700
+ 7609 .LASF36:
+ 7610 0ed0 626C6F63 .string "block_size"
+ 7610 6B5F7369
+ 7610 7A6500
+ 7611 .LASF163:
+ 7612 0edb 72635257 .string "rcRWLock"
+ 7612 4C6F636B
+ 7612 00
+ 7613 .LASF194:
+ 7614 0ee4 72634C69 .string "rcListing"
+ 7614 7374696E
+ 7614 6700
+ 7615 .LASF63:
+ 7616 0eee 656E6372 .string "encrypt_pcbc"
+ 7616 7970745F
+ 7616 70636263
+ 7616 00
+ 7617 .LASF32:
+ 7618 0efb 4B526566 .string "KRefcount"
+ 7618 636F756E
+ 7618 7400
+ 7619 .LASF144:
+ 7620 0f05 72634675 .string "rcFunction"
+ 7620 6E637469
+ 7620 6F6E00
+ 7621 .LASF300:
+ 7622 0f10 7263556E .string "rcUnrecognized"
+ 7622 7265636F
+ 7622 676E697A
+ 7622 656400
+ 7623 .LASF87:
+ 7624 0f1f 6E756D62 .string "number_of_rounds"
+ 7624 65725F6F
+ 7624 665F726F
+ 7624 756E6473
+ 7624 00
+ 7625 .LASF116:
+ 7626 0f30 7263416C .string "rcAlign"
+ 7626 69676E00
+ 7627 .LASF179:
+ 7628 0f38 72635072 .string "rcProduction"
+ 7628 6F647563
+ 7628 74696F6E
+ 7628 00
+ 7629 .LASF169:
+ 7630 0f45 72635468 .string "rcThread"
+ 7630 72656164
+ 7630 00
+ 7631 .LASF37:
+ 7632 0f4e 6E616D65 .string "name"
+ 7632 00
+ 7633 .LASF391:
+ 7634 0f53 6E756C6C .string "null"
+
GAS LISTING /tmp/ccq6ONvw.s page 177
+
+
+ 7634 00
+ 7635 .LASF52:
+ 7636 0f58 7365745F .string "set_decrypt_key"
+ 7636 64656372
+ 7636 7970745F
+ 7636 6B657900
+ 7637 .LASF373:
+ 7638 0f68 706F7574 .string "pout"
+ 7638 00
+ 7639 .LASF33:
+ 7640 0f6d 4B436970 .string "KCipher"
+ 7640 68657200
+ 7641 .LASF79:
+ 7642 0f75 4B426C6F .string "KBlockCipher_vt"
+ 7642 636B4369
+ 7642 70686572
+ 7642 5F767400
+ 7643 .LASF286:
+ 7644 0f85 72635365 .string "rcSeed"
+ 7644 656400
+ 7645 .LASF243:
+ 7646 0f8c 72634C6F .string "rcLoading"
+ 7646 6164696E
+ 7646 6700
+ 7647 .LASF1:
+ 7648 0f96 73686F72 .string "short int"
+ 7648 7420696E
+ 7648 7400
+ 7649 .LASF364:
+ 7650 0fa0 4B436970 .string "KCipherVecSetDecryptCounterFunc"
+ 7650 68657256
+ 7650 65635365
+ 7650 74446563
+ 7650 72797074
+ 7651 .LASF351:
+ 7652 0fc0 4B436970 .string "KCipherVecDestroy"
+ 7652 68657256
+ 7652 65634465
+ 7652 7374726F
+ 7652 7900
+ 7653 .LASF363:
+ 7654 0fd2 66756E63 .string "func"
+ 7654 00
+ 7655 .LASF336:
+ 7656 0fd7 72634C61 .string "rcLastState_v1_0"
+ 7656 73745374
+ 7656 6174655F
+ 7656 76315F30
+ 7656 00
+ 7657 .LASF345:
+ 7658 0fe8 72634C61 .string "rcLastState_v1_1"
+ 7658 73745374
+ 7658 6174655F
+ 7658 76315F31
+ 7658 00
+ 7659 .LASF110:
+ 7660 0ff9 72635644 .string "rcVDB"
+
GAS LISTING /tmp/ccq6ONvw.s page 178
+
+
+ 7660 4200
+ 7661 .LASF93:
+ 7662 0fff 43697068 .string "CipherNull"
+ 7662 65724E75
+ 7662 6C6C00
+ 7663 .LASF51:
+ 7664 100a 7365745F .string "set_encrypt_key"
+ 7664 656E6372
+ 7664 7970745F
+ 7664 6B657900
+ 7665 .LASF108:
+ 7666 101a 72635846 .string "rcXF"
+ 7666 00
+ 7667 .LASF71:
+ 7668 101f 4B436970 .string "KCipher_ptr"
+ 7668 6865725F
+ 7668 70747200
+ 7669 .LASF89:
+ 7670 102b 655F6B65 .string "e_key"
+ 7670 7900
+ 7671 .LASF191:
+ 7672 1031 72634465 .string "rcDestroying"
+ 7672 7374726F
+ 7672 79696E67
+ 7672 00
+ 7673 .LASF296:
+ 7674 103e 7263446F .string "rcDone"
+ 7674 6E6500
+ 7675 .LASF126:
+ 7676 1045 7263546F .string "rcToc"
+ 7676 6300
+ 7677 .LASF43:
+ 7678 104b 64656372 .string "decrypt_counter_func"
+ 7678 7970745F
+ 7678 636F756E
+ 7678 7465725F
+ 7678 66756E63
+ 7679 .LASF374:
+ 7680 1060 4B436970 .string "KCipherVecDecryptEcb"
+ 7680 68657256
+ 7680 65634465
+ 7680 63727970
+ 7680 74456362
+ 7681 .LASF200:
+ 7682 1075 7263416C .string "rcAliasing"
+ 7682 69617369
+ 7682 6E6700
+ 7683 .LASF161:
+ 7684 1080 72635072 .string "rcProcess"
+ 7684 6F636573
+ 7684 7300
+ 7685 .LASF259:
+ 7686 108a 72634E6F .string "rcNoObj"
+ 7686 4F626A00
+ 7687 .LASF298:
+ 7688 1092 7263556E .string "rcUnsupported"
+ 7688 73757070
+
GAS LISTING /tmp/ccq6ONvw.s page 179
+
+
+ 7688 6F727465
+ 7688 6400
+ 7689 .LASF237:
+ 7690 10a0 72634465 .string "rcDetaching"
+ 7690 74616368
+ 7690 696E6700
+ 7691 .LASF134:
+ 7692 10ac 7263436F .string "rcColumn"
+ 7692 6C756D6E
+ 7692 00
+ 7693 .LASF42:
+ 7694 10b5 656E6372 .string "encrypt_counter_func"
+ 7694 7970745F
+ 7694 636F756E
+ 7694 7465725F
+ 7694 66756E63
+ 7695 .LASF299:
+ 7696 10ca 7263556E .string "rcUnexpected"
+ 7696 65787065
+ 7696 63746564
+ 7696 00
+ 7697 .LASF62:
+ 7698 10d7 64656372 .string "decrypt_cbc"
+ 7698 7970745F
+ 7698 63626300
+ 7699 .LASF6:
+ 7700 10e3 75696E74 .string "uint32_t"
+ 7700 33325F74
+ 7700 00
+ 7701 .LASF120:
+ 7702 10ec 72635646 .string "rcVFS"
+ 7702 5300
+ 7703 .LASF25:
+ 7704 10f2 4442475F .string "DBG_KRYPTO"
+ 7704 4B525950
+ 7704 544F00
+ 7705 .LASF375:
+ 7706 10fd 4B436970 .string "KCipherVecEncryptCbc"
+ 7706 68657256
+ 7706 6563456E
+ 7706 63727970
+ 7706 74436263
+ 7707 .LASF344:
+ 7708 1112 72635772 .string "rcWrongType"
+ 7708 6F6E6754
+ 7708 79706500
+ 7709 .LASF279:
+ 7710 111e 72634C69 .string "rcLibrary"
+ 7710 62726172
+ 7710 7900
+ 7711 .LASF312:
+ 7712 1128 72634361 .string "rcCanceled"
+ 7712 6E63656C
+ 7712 656400
+ 7713 .LASF183:
+ 7714 1133 72634461 .string "rcData"
+ 7714 746100
+
GAS LISTING /tmp/ccq6ONvw.s page 180
+
+
+ 7715 .LASF147:
+ 7716 113a 72634865 .string "rcHeader"
+ 7716 61646572
+ 7716 00
+ 7717 .LASF4:
+ 7718 1143 73686F72 .string "short unsigned int"
+ 7718 7420756E
+ 7718 7369676E
+ 7718 65642069
+ 7718 6E7400
+ 7719 .LASF137:
+ 7720 1156 72634461 .string "rcDatabase"
+ 7720 74616261
+ 7720 736500
+ 7721 .LASF61:
+ 7722 1161 656E6372 .string "encrypt_cbc"
+ 7722 7970745F
+ 7722 63626300
+ 7723 .LASF213:
+ 7724 116d 7263436F .string "rcCommitting"
+ 7724 6D6D6974
+ 7724 74696E67
+ 7724 00
+ 7725 .LASF241:
+ 7726 117a 7263436C .string "rcClassifying"
+ 7726 61737369
+ 7726 6679696E
+ 7726 6700
+ 7727 .LASF172:
+ 7728 1188 72635472 .string "rcTree"
+ 7728 656500
+ 7729 .LASF41:
+ 7730 118f 64656372 .string "decrypt_ivec"
+ 7730 7970745F
+ 7730 69766563
+ 7730 00
+ 7731 .LASF30:
+ 7732 119c 4442475F .string "DBG_ARGS"
+ 7732 41524753
+ 7732 00
+ 7733 .LASF201:
+ 7734 11a5 72635365 .string "rcSelecting"
+ 7734 6C656374
+ 7734 696E6700
+ 7735 .LASF102:
+ 7736 11b1 72635465 .string "rcText"
+ 7736 787400
+ 7737 .LASF338:
+ 7738 11b8 72634F75 .string "rcOutoforder"
+ 7738 746F666F
+ 7738 72646572
+ 7738 00
+ 7739 .LASF386:
+ 7740 11c5 4B436970 .string "KCipherVecAllocAes"
+ 7740 68657256
+ 7740 6563416C
+ 7740 6C6F6341
+
GAS LISTING /tmp/ccq6ONvw.s page 181
+
+
+ 7740 657300
+ 7741 .LASF305:
+ 7742 11d8 7263496E .string "rcInvalid"
+ 7742 76616C69
+ 7742 6400
+ 7743 .LASF252:
+ 7744 11e2 7263496E .string "rcInitializing"
+ 7744 69746961
+ 7744 6C697A69
+ 7744 6E6700
+ 7745 .LASF131:
+ 7746 11f1 7263426C .string "rcBlob"
+ 7746 6F6200
+ 7747 .LASF53:
+ 7748 11f8 7365745F .string "set_encrypt_ivec"
+ 7748 656E6372
+ 7748 7970745F
+ 7748 69766563
+ 7748 00
+ 7749 .LASF377:
+ 7750 1209 74656D70 .string "temp"
+ 7750 00
+ 7751 .LASF229:
+ 7752 120e 72635265 .string "rcReindexing"
+ 7752 696E6465
+ 7752 78696E67
+ 7752 00
+ 7753 .LASF124:
+ 7754 121b 72634E6F .string "rcNoTarg"
+ 7754 54617267
+ 7754 00
+ 7755 .LASF306:
+ 7756 1224 7263436F .string "rcCorrupt"
+ 7756 72727570
+ 7756 7400
+ 7757 .LASF335:
+ 7758 122e 72634F75 .string "rcOutofrange"
+ 7758 746F6672
+ 7758 616E6765
+ 7758 00
+ 7759 .LASF164:
+ 7760 123b 72635363 .string "rcSchema"
+ 7760 68656D61
+ 7760 00
+ 7761 .LASF346:
+ 7762 1244 43697068 .string "CipherVec_u"
+ 7762 65725665
+ 7762 635F7500
+ 7763 .LASF160:
+ 7764 1250 72635061 .string "rcPath"
+ 7764 746800
+ 7765 .LASF211:
+ 7766 1257 72635265 .string "rcReading"
+ 7766 6164696E
+ 7766 6700
+ 7767 .LASF81:
+ 7768 1261 6B65795F .string "key_size"
+
GAS LISTING /tmp/ccq6ONvw.s page 182
+
+
+ 7768 73697A65
+ 7768 00
+ 7769 .LASF343:
+ 7770 126a 72634E6F .string "rcNotAvailable"
+ 7770 74417661
+ 7770 696C6162
+ 7770 6C6500
+ 7771 .LASF370:
+ 7772 1279 4B436970 .string "KCipherVecDecrypt"
+ 7772 68657256
+ 7772 65634465
+ 7772 63727970
+ 7772 7400
+ 7773 .LASF301:
+ 7774 128b 7263416D .string "rcAmbiguous"
+ 7774 62696775
+ 7774 6F757300
+ 7775 .ident "GCC: (GNU) 4.4.2"
+ 7776 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccq6ONvw.s page 183
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 cipher-vec.c
+ /tmp/ccq6ONvw.s:14 .rodata:0000000000000000 KCipherVecClassName
+ /tmp/ccq6ONvw.s:18 .text:0000000000000000 CipherVecIn
+ /tmp/ccq6ONvw.s:48 .text:000000000000002b CipherVecOut
+ /tmp/ccq6ONvw.s:79 .text:0000000000000060 KCipherVecDestroy
+ /tmp/ccq6ONvw.s:127 .text:000000000000009a KCipherVecSetEncryptKey
+ /tmp/ccq6ONvw.s:2002 .rodata:00000000000002e0 __PRETTY_FUNCTION__.6562
+ /tmp/ccq6ONvw.s:2007 .rodata:0000000000000300 __func__.6564
+ /tmp/ccq6ONvw.s:212 .text:0000000000000184 KCipherVecSetDecryptKey
+ /tmp/ccq6ONvw.s:1992 .rodata:00000000000002a0 __PRETTY_FUNCTION__.6586
+ /tmp/ccq6ONvw.s:1997 .rodata:00000000000002c0 __func__.6588
+ /tmp/ccq6ONvw.s:301 .text:000000000000026e KCipherVecSetEncryptIvec
+ /tmp/ccq6ONvw.s:1987 .rodata:0000000000000280 __PRETTY_FUNCTION__.6608
+ /tmp/ccq6ONvw.s:352 .text:00000000000002f1 KCipherVecSetDecryptIvec
+ /tmp/ccq6ONvw.s:1982 .rodata:0000000000000260 __PRETTY_FUNCTION__.6621
+ /tmp/ccq6ONvw.s:407 .text:0000000000000374 KCipherVecSetEncryptCounterFunc
+ /tmp/ccq6ONvw.s:1977 .rodata:0000000000000240 __PRETTY_FUNCTION__.6634
+ /tmp/ccq6ONvw.s:452 .text:00000000000003e3 KCipherVecSetDecryptCounterFunc
+ /tmp/ccq6ONvw.s:1972 .rodata:0000000000000220 __PRETTY_FUNCTION__.6644
+ /tmp/ccq6ONvw.s:497 .text:0000000000000452 KCipherVecEncryptV1
+ /tmp/ccq6ONvw.s:525 .text:0000000000000479 KCipherVecDecryptV1
+ /tmp/ccq6ONvw.s:553 .text:00000000000004a0 KCipherVecEncryptV1Int
+ /tmp/ccq6ONvw.s:593 .text:00000000000004f3 KCipherVecDecryptV1Int
+ /tmp/ccq6ONvw.s:633 .text:0000000000000546 KCipherVecEncrypt
+ /tmp/ccq6ONvw.s:1962 .rodata:00000000000001d0 __func__.6694
+ /tmp/ccq6ONvw.s:682 .text:00000000000005aa KCipherVecDecrypt
+ /tmp/ccq6ONvw.s:1952 .rodata:0000000000000190 __func__.6710
+ /tmp/ccq6ONvw.s:733 .text:0000000000000615 KCipherVecEncryptEcb
+ /tmp/ccq6ONvw.s:789 .text:0000000000000685 KCipherVecDecryptEcb
+ /tmp/ccq6ONvw.s:845 .text:00000000000006f5 KCipherVecEncryptCbc
+ /tmp/ccq6ONvw.s:927 .text:00000000000007c3 KCipherVecDecryptCbc
+ /tmp/ccq6ONvw.s:1013 .text:0000000000000897 KCipherVecEncryptPcbc
+ /tmp/ccq6ONvw.s:1100 .text:0000000000000974 KCipherVecDecryptPcbc
+ /tmp/ccq6ONvw.s:1182 .text:0000000000000a3a KCipherVecEncryptCfb
+ /tmp/ccq6ONvw.s:1262 .text:0000000000000b00 KCipherVecDecryptCfb
+ /tmp/ccq6ONvw.s:1342 .text:0000000000000bc6 KCipherVecEncryptOfb
+ /tmp/ccq6ONvw.s:1422 .text:0000000000000c8c KCipherVecDecryptOfb
+ /tmp/ccq6ONvw.s:1457 .text:0000000000000cc5 KCipherVecEncryptCtr
+ /tmp/ccq6ONvw.s:1942 .rodata:0000000000000150 __func__.6944
+ /tmp/ccq6ONvw.s:1486 .text:0000000000000cfb KCipherVecDecryptCtr
+ /tmp/ccq6ONvw.s:1932 .rodata:0000000000000110 __func__.6954
+ /tmp/ccq6ONvw.s:1518 .data.rel.local:0000000000000000 KCipherVec_vt_v1
+ /tmp/ccq6ONvw.s:1544 .text:0000000000000d31 KCipherVecAllocAes
+ /tmp/ccq6ONvw.s:1922 .rodata:00000000000000d0 __func__.6964
+ /tmp/ccq6ONvw.s:1586 .text:0000000000000d8c KCipherVecInitAes
+ /tmp/ccq6ONvw.s:1647 .text:0000000000000e2a KCipherVecAllocNull
+ /tmp/ccq6ONvw.s:1912 .rodata:0000000000000090 __func__.6991
+ /tmp/ccq6ONvw.s:1689 .text:0000000000000e85 KCipherVecInitNull
+ /tmp/ccq6ONvw.s:1751 .text:0000000000000f1a KCipherVecMake
+ /tmp/ccq6ONvw.s:1903 .rodata:000000000000006e __func__.7019
+ /tmp/ccq6ONvw.s:1907 .rodata:000000000000007d __PRETTY_FUNCTION__.7018
+ /tmp/ccq6ONvw.s:1917 .rodata:00000000000000b0 __PRETTY_FUNCTION__.6990
+ /tmp/ccq6ONvw.s:1927 .rodata:00000000000000f0 __PRETTY_FUNCTION__.6963
+ /tmp/ccq6ONvw.s:1937 .rodata:0000000000000130 __PRETTY_FUNCTION__.6953
+ /tmp/ccq6ONvw.s:1947 .rodata:0000000000000170 __PRETTY_FUNCTION__.6943
+ /tmp/ccq6ONvw.s:1957 .rodata:00000000000001b0 __PRETTY_FUNCTION__.6709
+
GAS LISTING /tmp/ccq6ONvw.s page 184
+
+
+ /tmp/ccq6ONvw.s:1967 .rodata:00000000000001f0 __PRETTY_FUNCTION__.6693
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+memmove
+KCipherDestroy
+free
+__assert_fail
+SetRCFileFuncLine
+memcpy
+calloc
+KCipherInit
+KNullBlockCipherVecMake
+KAESBlockCipherVecMake
diff --git a/libs/krypto/cipher-vec.vecreg.pic.o.list b/libs/krypto/cipher-vec.vecreg.pic.o.list
new file mode 100644
index 0000000..408133d
--- /dev/null
+++ b/libs/krypto/cipher-vec.vecreg.pic.o.list
@@ -0,0 +1,10919 @@
+GAS LISTING /tmp/ccXzRABk.s page 1
+
+
+ 1 .file "cipher-vec.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 D9030000 .text
+ 8 0200F201
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .globl KCipherVecRegClassName
+ 11 .section .rodata
+ 12 .type KCipherVecRegClassName, @object
+ 13 .size KCipherVecRegClassName, 12
+ 14 KCipherVecRegClassName:
+ 15 0000 43495048 .string "CIPHER_IMPL"
+ 15 45525F49
+ 15 4D504C00
+ 16 .text
+ 17 .type CipherVecIn, @function
+ 18 CipherVecIn:
+ 19 .LFB590:
+ 20 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/extern.h>
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL and BLOCKCIPHER_IMPL are defined in this header */
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "ncbi-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL is used in this header */
+
GAS LISTING /tmp/ccXzRABk.s page 2
+
+
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-impl.h"
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* BLOCKCIPHER_IMPL is used in this header */
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-impl.h"
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "aes-ncbi-priv.h"
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "null-ncbi-priv.h"
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-priv.h"
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-priv.h"
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/cipher.h>
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/ciphermgr.h>
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/refcount.h>
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/out.h>
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/rc.h>
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <sysalloc.h>
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <stdlib.h>
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <string.h>
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <assert.h>
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char CMEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct CIPHER_IMPL
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipher dad;
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipherVec * block_cipher;
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** typedef union CipherVec_u
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec vec;
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherBlock block;
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** } CipherVec_u;
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Read a blocks worth of bytes into an AESState
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CipherVecIn (const void * cvin)
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 21 .loc 1 76 0
+ 22 .cfi_startproc
+ 23 0000 55 pushq %rbp
+ 24 .LCFI0:
+ 25 .cfi_def_cfa_offset 16
+ 26 0001 4889E5 movq %rsp, %rbp
+ 27 .cfi_offset 6, -16
+ 28 .LCFI1:
+ 29 .cfi_def_cfa_register 6
+ 30 0004 48897DF8 movq %rdi, -8(%rbp)
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec cv;
+
GAS LISTING /tmp/ccXzRABk.s page 3
+
+
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** __asm__ (
+ 31 .loc 1 80 0
+ 32 0008 488B45F8 movq -8(%rbp), %rax
+ 33 000c 4889C7 movq %rax, %rdi
+ 34 #APP
+ 35 # 80 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c" 1
+ 81 "movdqu (%[a]),%[s]" : [s] "=x" (cv) : [a] "D" (cvin)
+ 36 movdqu (%rdi),%xmm0
+ 37 # 0 "" 2
+ 38 #NO_APP
+ 39 0013 660F7F45 movdqa %xmm0, -32(%rbp)
+ 39 E0
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** );
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return cv;
+ 40 .loc 1 84 0
+ 41 0018 660F6F45 movdqa -32(%rbp), %xmm0
+ 41 E0
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec_u u;
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memmove (&u.block, cvin, sizeof (u));
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return u.vec;
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 42 .loc 1 91 0
+ 43 001d C9 leave
+ 44 001e C3 ret
+ 45 .cfi_endproc
+ 46 .LFE590:
+ 47 .size CipherVecIn, .-CipherVecIn
+ 48 .type CipherVecOut, @function
+ 49 CipherVecOut:
+ 50 .LFB591:
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Write a block's worth of bytes out from an AESState
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ void CipherVecOut (const CipherVec cv, void * cvout)
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 51 .loc 1 99 0
+ 52 .cfi_startproc
+ 53 001f 55 pushq %rbp
+ 54 .LCFI2:
+ 55 .cfi_def_cfa_offset 16
+ 56 0020 4889E5 movq %rsp, %rbp
+ 57 .cfi_offset 6, -16
+ 58 .LCFI3:
+ 59 .cfi_def_cfa_register 6
+ 60 0023 660F7F45 movdqa %xmm0, -16(%rbp)
+ 60 F0
+ 61 0028 48897DE8 movq %rdi, -24(%rbp)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec rcv = cv;
+
GAS LISTING /tmp/ccXzRABk.s page 4
+
+
+ 62 .loc 1 101 0
+ 63 002c 660F6F45 movdqa -16(%rbp), %xmm0
+ 63 F0
+ 64 0031 660F7F45 movdqa %xmm0, -48(%rbp)
+ 64 D0
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** __asm__ (
+ 65 .loc 1 103 0
+ 66 0036 488B45E8 movq -24(%rbp), %rax
+ 67 003a 660F6F45 movdqa -48(%rbp), %xmm0
+ 67 D0
+ 68 003f 4889C7 movq %rax, %rdi
+ 69 #APP
+ 70 # 103 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c" 1
+ 104 "movdqu %[s],(%[a])" : : [s] "x" (rcv), [a] "D" (cvout)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** );
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec lcv = cv;
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memmove (cvout, &lcv, sizeof (lcv));
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 71 movdqu %xmm0,(%rdi)
+ 72 # 0 "" 2
+ 73 .loc 1 110 0
+ 74 #NO_APP
+ 75 0046 C9 leave
+ 76 0047 C3 ret
+ 77 .cfi_endproc
+ 78 .LFE591:
+ 79 .size CipherVecOut, .-CipherVecOut
+ 80 .type KCipherVecRegDestroy, @function
+ 81 KCipherVecRegDestroy:
+ 82 .LFB592:
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Destroy) (CIPHER_IMPL * self)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 83 .loc 1 114 0
+ 84 .cfi_startproc
+ 85 0048 55 pushq %rbp
+ 86 .LCFI4:
+ 87 .cfi_def_cfa_offset 16
+ 88 0049 4889E5 movq %rsp, %rbp
+ 89 .cfi_offset 6, -16
+ 90 .LCFI5:
+ 91 .cfi_def_cfa_register 6
+ 92 004c 4883EC20 subq $32, %rsp
+ 93 0050 48897DE8 movq %rdi, -24(%rbp)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 94 .loc 1 115 0
+ 95 0054 C745FC00 movl $0, -4(%rbp)
+ 95 000000
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (self)
+ 96 .loc 1 117 0
+ 97 005b 48837DE8 cmpq $0, -24(%rbp)
+ 97 00
+
GAS LISTING /tmp/ccXzRABk.s page 5
+
+
+ 98 0060 741B je .L6
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = KCipherDestroy (&self->dad);
+ 99 .loc 1 119 0
+ 100 0062 488B45E8 movq -24(%rbp), %rax
+ 101 0066 4889C7 movq %rax, %rdi
+ 102 0069 E8000000 call KCipherDestroy at PLT
+ 102 00
+ 103 006e 8945FC movl %eax, -4(%rbp)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (self);
+ 104 .loc 1 120 0
+ 105 0071 488B45E8 movq -24(%rbp), %rax
+ 106 0075 4889C7 movq %rax, %rdi
+ 107 0078 E8000000 call free at PLT
+ 107 00
+ 108 .L6:
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 109 .loc 1 122 0
+ 110 007d 8B45FC movl -4(%rbp), %eax
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 111 .loc 1 123 0
+ 112 0080 C9 leave
+ 113 0081 C3 ret
+ 114 .cfi_endproc
+ 115 .LFE592:
+ 116 .size KCipherVecRegDestroy, .-KCipherVecRegDestroy
+ 117 .section .rodata
+ 118 000c 00000000 .align 8
+ 119 .LC0:
+ 120 0010 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 120 652F726F
+ 120 6461726D
+ 120 65722F73
+ 120 72615F73
+ 121 .LC1:
+ 122 0048 73656C66 .string "self"
+ 122 00
+ 123 .LC2:
+ 124 004d 75736572 .string "user_key"
+ 124 5F6B6579
+ 124 00
+ 125 .LC3:
+ 126 0056 75736572 .string "user_key_bits"
+ 126 5F6B6579
+ 126 5F626974
+ 126 7300
+ 127 .text
+ 128 .type KCipherVecRegSetEncryptKey, @function
+ 129 KCipherVecRegSetEncryptKey:
+ 130 .LFB593:
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetEncryptKey)(CIPHER_IMPL * self,
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char * user_key,
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint32_t user_key_bits)
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccXzRABk.s page 6
+
+
+ 131 .loc 1 129 0
+ 132 .cfi_startproc
+ 133 0082 55 pushq %rbp
+ 134 .LCFI6:
+ 135 .cfi_def_cfa_offset 16
+ 136 0083 4889E5 movq %rsp, %rbp
+ 137 .cfi_offset 6, -16
+ 138 .LCFI7:
+ 139 .cfi_def_cfa_register 6
+ 140 0086 53 pushq %rbx
+ 141 0087 4883EC38 subq $56, %rsp
+ 142 008b 48897DD8 movq %rdi, -40(%rbp)
+ 143 008f 488975D0 movq %rsi, -48(%rbp)
+ 144 0093 8955CC movl %edx, -52(%rbp)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 145 .loc 1 130 0
+ 146 0096 C745EC00 movl $0, -20(%rbp)
+ 146 000000
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 147 .loc 1 132 0
+ 148 009d 48837DD8 cmpq $0, -40(%rbp)
+ 148 00
+ 149 00a2 751F jne .L9
+ 150 .cfi_offset 3, -24
+ 151 00a4 488D0D00 leaq __PRETTY_FUNCTION__.7218(%rip), %rcx
+ 151 000000
+ 152 00ab BA840000 movl $132, %edx
+ 152 00
+ 153 00b0 488D3500 leaq .LC0(%rip), %rsi
+ 153 000000
+ 154 00b7 488D3D00 leaq .LC1(%rip), %rdi
+ 154 000000
+ 155 00be E8000000 call __assert_fail at PLT
+ 155 00
+ 156 .L9:
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key);
+ 157 .loc 1 133 0
+ 158 00c3 48837DD0 cmpq $0, -48(%rbp)
+ 158 00
+ 159 00c8 751F jne .L10
+ 160 00ca 488D0D00 leaq __PRETTY_FUNCTION__.7218(%rip), %rcx
+ 160 000000
+ 161 00d1 BA850000 movl $133, %edx
+ 161 00
+ 162 00d6 488D3500 leaq .LC0(%rip), %rsi
+ 162 000000
+ 163 00dd 488D3D00 leaq .LC2(%rip), %rdi
+ 163 000000
+ 164 00e4 E8000000 call __assert_fail at PLT
+ 164 00
+ 165 .L10:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key_bits);
+ 166 .loc 1 134 0
+ 167 00e9 837DCC00 cmpl $0, -52(%rbp)
+ 168 00ed 751F jne .L11
+ 169 00ef 488D0D00 leaq __PRETTY_FUNCTION__.7218(%rip), %rcx
+
GAS LISTING /tmp/ccXzRABk.s page 7
+
+
+ 169 000000
+ 170 00f6 BA860000 movl $134, %edx
+ 170 00
+ 171 00fb 488D3500 leaq .LC0(%rip), %rsi
+ 171 000000
+ 172 0102 488D3D00 leaq .LC3(%rip), %rdi
+ 172 000000
+ 173 0109 E8000000 call __assert_fail at PLT
+ 173 00
+ 174 .L11:
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 175 .loc 1 136 0
+ 176 010e 488B45D8 movq -40(%rbp), %rax
+ 177 0112 488B4048 movq 72(%rax), %rax
+ 178 0116 8B00 movl (%rax), %eax
+ 179 0118 83F801 cmpl $1, %eax
+ 180 011b 7422 je .L13
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 181 .loc 1 139 0
+ 182 011d B98B0000 movl $139, %ecx
+ 182 00
+ 183 0122 488D1500 leaq __func__.7220(%rip), %rdx
+ 183 000000
+ 184 0129 488D3500 leaq .LC0(%rip), %rsi
+ 184 000000
+ 185 0130 BF088E04 movl $-2029744632, %edi
+ 185 87
+ 186 0135 E8000000 call SetRCFileFuncLine at PLT
+ 186 00
+ 187 013a 8945EC movl %eax, -20(%rbp)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 188 .loc 1 140 0
+ 189 013d EB23 jmp .L14
+ 190 .L13:
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+ 191 .loc 1 143 0
+ 192 013f 488B45D8 movq -40(%rbp), %rax
+ 193 0143 488B4048 movq 72(%rax), %rax
+ 194 0147 488B5820 movq 32(%rax), %rbx
+ 195 014b 488B45D8 movq -40(%rbp), %rax
+ 196 014f 488B4018 movq 24(%rax), %rax
+ 197 0153 8B55CC movl -52(%rbp), %edx
+ 198 0156 488B4DD0 movq -48(%rbp), %rcx
+ 199 015a 4889CE movq %rcx, %rsi
+ 200 015d 4889C7 movq %rax, %rdi
+ 201 0160 FFD3 call *%rbx
+ 202 .L14:
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** user_key_bits);
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 203 .loc 1 147 0
+
GAS LISTING /tmp/ccXzRABk.s page 8
+
+
+ 204 0162 8B45EC movl -20(%rbp), %eax
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 205 .loc 1 148 0
+ 206 0165 4883C438 addq $56, %rsp
+ 207 0169 5B popq %rbx
+ 208 016a C9 leave
+ 209 016b C3 ret
+ 210 .cfi_endproc
+ 211 .LFE593:
+ 212 .size KCipherVecRegSetEncryptKey, .-KCipherVecRegSetEncryptKey
+ 213 .type KCipherVecRegSetDecryptKey, @function
+ 214 KCipherVecRegSetDecryptKey:
+ 215 .LFB594:
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetDecryptKey)(CIPHER_IMPL * self,
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char * user_key,
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint32_t user_key_bits)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 216 .loc 1 154 0
+ 217 .cfi_startproc
+ 218 016c 55 pushq %rbp
+ 219 .LCFI8:
+ 220 .cfi_def_cfa_offset 16
+ 221 016d 4889E5 movq %rsp, %rbp
+ 222 .cfi_offset 6, -16
+ 223 .LCFI9:
+ 224 .cfi_def_cfa_register 6
+ 225 0170 53 pushq %rbx
+ 226 0171 4883EC38 subq $56, %rsp
+ 227 0175 48897DD8 movq %rdi, -40(%rbp)
+ 228 0179 488975D0 movq %rsi, -48(%rbp)
+ 229 017d 8955CC movl %edx, -52(%rbp)
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 230 .loc 1 155 0
+ 231 0180 C745EC00 movl $0, -20(%rbp)
+ 231 000000
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 232 .loc 1 157 0
+ 233 0187 48837DD8 cmpq $0, -40(%rbp)
+ 233 00
+ 234 018c 751F jne .L17
+ 235 .cfi_offset 3, -24
+ 236 018e 488D0D00 leaq __PRETTY_FUNCTION__.7242(%rip), %rcx
+ 236 000000
+ 237 0195 BA9D0000 movl $157, %edx
+ 237 00
+ 238 019a 488D3500 leaq .LC0(%rip), %rsi
+ 238 000000
+ 239 01a1 488D3D00 leaq .LC1(%rip), %rdi
+ 239 000000
+ 240 01a8 E8000000 call __assert_fail at PLT
+ 240 00
+ 241 .L17:
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key);
+ 242 .loc 1 158 0
+
GAS LISTING /tmp/ccXzRABk.s page 9
+
+
+ 243 01ad 48837DD0 cmpq $0, -48(%rbp)
+ 243 00
+ 244 01b2 751F jne .L18
+ 245 01b4 488D0D00 leaq __PRETTY_FUNCTION__.7242(%rip), %rcx
+ 245 000000
+ 246 01bb BA9E0000 movl $158, %edx
+ 246 00
+ 247 01c0 488D3500 leaq .LC0(%rip), %rsi
+ 247 000000
+ 248 01c7 488D3D00 leaq .LC2(%rip), %rdi
+ 248 000000
+ 249 01ce E8000000 call __assert_fail at PLT
+ 249 00
+ 250 .L18:
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (user_key_bits);
+ 251 .loc 1 159 0
+ 252 01d3 837DCC00 cmpl $0, -52(%rbp)
+ 253 01d7 751F jne .L19
+ 254 01d9 488D0D00 leaq __PRETTY_FUNCTION__.7242(%rip), %rcx
+ 254 000000
+ 255 01e0 BA9F0000 movl $159, %edx
+ 255 00
+ 256 01e5 488D3500 leaq .LC0(%rip), %rsi
+ 256 000000
+ 257 01ec 488D3D00 leaq .LC3(%rip), %rdi
+ 257 000000
+ 258 01f3 E8000000 call __assert_fail at PLT
+ 258 00
+ 259 .L19:
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 260 .loc 1 161 0
+ 261 01f8 488B45D8 movq -40(%rbp), %rax
+ 262 01fc 488B4048 movq 72(%rax), %rax
+ 263 0200 8B00 movl (%rax), %eax
+ 264 0202 83F801 cmpl $1, %eax
+ 265 0205 7422 je .L21
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 266 .loc 1 164 0
+ 267 0207 B9A40000 movl $164, %ecx
+ 267 00
+ 268 020c 488D1500 leaq __func__.7244(%rip), %rdx
+ 268 000000
+ 269 0213 488D3500 leaq .LC0(%rip), %rsi
+ 269 000000
+ 270 021a BF088E04 movl $-2029744632, %edi
+ 270 87
+ 271 021f E8000000 call SetRCFileFuncLine at PLT
+ 271 00
+ 272 0224 8945EC movl %eax, -20(%rbp)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 273 .loc 1 165 0
+ 274 0227 EB23 jmp .L22
+ 275 .L21:
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccXzRABk.s page 10
+
+
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+ 276 .loc 1 168 0
+ 277 0229 488B45D8 movq -40(%rbp), %rax
+ 278 022d 488B4048 movq 72(%rax), %rax
+ 279 0231 488B5828 movq 40(%rax), %rbx
+ 280 0235 488B45D8 movq -40(%rbp), %rax
+ 281 0239 488B4020 movq 32(%rax), %rax
+ 282 023d 8B55CC movl -52(%rbp), %edx
+ 283 0240 488B4DD0 movq -48(%rbp), %rcx
+ 284 0244 4889CE movq %rcx, %rsi
+ 285 0247 4889C7 movq %rax, %rdi
+ 286 024a FFD3 call *%rbx
+ 287 .L22:
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** user_key_bits);
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 288 .loc 1 172 0
+ 289 024c 8B45EC movl -20(%rbp), %eax
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 290 .loc 1 173 0
+ 291 024f 4883C438 addq $56, %rsp
+ 292 0253 5B popq %rbx
+ 293 0254 C9 leave
+ 294 0255 C3 ret
+ 295 .cfi_endproc
+ 296 .LFE594:
+ 297 .size KCipherVecRegSetDecryptKey, .-KCipherVecRegSetDecryptKey
+ 298 .section .rodata
+ 299 .LC4:
+ 300 0064 69766563 .string "ivec"
+ 300 00
+ 301 .text
+ 302 .type KCipherVecRegSetEncryptIvec, @function
+ 303 KCipherVecRegSetEncryptIvec:
+ 304 .LFB595:
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptIvec) (CIPHER_IMPL * self,
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * ivec)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 305 .loc 1 179 0
+ 306 .cfi_startproc
+ 307 0256 55 pushq %rbp
+ 308 .LCFI10:
+ 309 .cfi_def_cfa_offset 16
+ 310 0257 4889E5 movq %rsp, %rbp
+ 311 .cfi_offset 6, -16
+ 312 .LCFI11:
+ 313 .cfi_def_cfa_register 6
+ 314 025a 4883EC10 subq $16, %rsp
+ 315 025e 48897DF8 movq %rdi, -8(%rbp)
+ 316 0262 488975F0 movq %rsi, -16(%rbp)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 317 .loc 1 180 0
+
GAS LISTING /tmp/ccXzRABk.s page 11
+
+
+ 318 0266 48837DF8 cmpq $0, -8(%rbp)
+ 318 00
+ 319 026b 751F jne .L25
+ 320 026d 488D0D00 leaq __PRETTY_FUNCTION__.7264(%rip), %rcx
+ 320 000000
+ 321 0274 BAB40000 movl $180, %edx
+ 321 00
+ 322 0279 488D3500 leaq .LC0(%rip), %rsi
+ 322 000000
+ 323 0280 488D3D00 leaq .LC1(%rip), %rdi
+ 323 000000
+ 324 0287 E8000000 call __assert_fail at PLT
+ 324 00
+ 325 .L25:
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (ivec);
+ 326 .loc 1 181 0
+ 327 028c 48837DF0 cmpq $0, -16(%rbp)
+ 327 00
+ 328 0291 751F jne .L26
+ 329 0293 488D0D00 leaq __PRETTY_FUNCTION__.7264(%rip), %rcx
+ 329 000000
+ 330 029a BAB50000 movl $181, %edx
+ 330 00
+ 331 029f 488D3500 leaq .LC0(%rip), %rsi
+ 331 000000
+ 332 02a6 488D3D00 leaq .LC4(%rip), %rdi
+ 332 000000
+ 333 02ad E8000000 call __assert_fail at PLT
+ 333 00
+ 334 .L26:
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+ 335 .loc 1 183 0
+ 336 02b2 488B45F8 movq -8(%rbp), %rax
+ 337 02b6 8B4004 movl 4(%rax), %eax
+ 338 02b9 89C2 mov %eax, %edx
+ 339 02bb 488B45F8 movq -8(%rbp), %rax
+ 340 02bf 488B4028 movq 40(%rax), %rax
+ 341 02c3 488B4DF0 movq -16(%rbp), %rcx
+ 342 02c7 4889CE movq %rcx, %rsi
+ 343 02ca 4889C7 movq %rax, %rdi
+ 344 02cd E8000000 call memcpy at PLT
+ 344 00
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 345 .loc 1 185 0
+ 346 02d2 B8000000 movl $0, %eax
+ 346 00
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 347 .loc 1 186 0
+ 348 02d7 C9 leave
+ 349 02d8 C3 ret
+ 350 .cfi_endproc
+ 351 .LFE595:
+ 352 .size KCipherVecRegSetEncryptIvec, .-KCipherVecRegSetEncryptIvec
+ 353 .type KCipherVecRegSetDecryptIvec, @function
+ 354 KCipherVecRegSetDecryptIvec:
+
GAS LISTING /tmp/ccXzRABk.s page 12
+
+
+ 355 .LFB596:
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptIvec) (CIPHER_IMPL * self,
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * ivec)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 356 .loc 1 192 0
+ 357 .cfi_startproc
+ 358 02d9 55 pushq %rbp
+ 359 .LCFI12:
+ 360 .cfi_def_cfa_offset 16
+ 361 02da 4889E5 movq %rsp, %rbp
+ 362 .cfi_offset 6, -16
+ 363 .LCFI13:
+ 364 .cfi_def_cfa_register 6
+ 365 02dd 4883EC10 subq $16, %rsp
+ 366 02e1 48897DF8 movq %rdi, -8(%rbp)
+ 367 02e5 488975F0 movq %rsi, -16(%rbp)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 368 .loc 1 193 0
+ 369 02e9 48837DF8 cmpq $0, -8(%rbp)
+ 369 00
+ 370 02ee 751F jne .L29
+ 371 02f0 488D0D00 leaq __PRETTY_FUNCTION__.7277(%rip), %rcx
+ 371 000000
+ 372 02f7 BAC10000 movl $193, %edx
+ 372 00
+ 373 02fc 488D3500 leaq .LC0(%rip), %rsi
+ 373 000000
+ 374 0303 488D3D00 leaq .LC1(%rip), %rdi
+ 374 000000
+ 375 030a E8000000 call __assert_fail at PLT
+ 375 00
+ 376 .L29:
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (ivec);
+ 377 .loc 1 194 0
+ 378 030f 48837DF0 cmpq $0, -16(%rbp)
+ 378 00
+ 379 0314 751F jne .L30
+ 380 0316 488D0D00 leaq __PRETTY_FUNCTION__.7277(%rip), %rcx
+ 380 000000
+ 381 031d BAC20000 movl $194, %edx
+ 381 00
+ 382 0322 488D3500 leaq .LC0(%rip), %rsi
+ 382 000000
+ 383 0329 488D3D00 leaq .LC4(%rip), %rdi
+ 383 000000
+ 384 0330 E8000000 call __assert_fail at PLT
+ 384 00
+ 385 .L30:
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+ 386 .loc 1 196 0
+ 387 0335 488B45F8 movq -8(%rbp), %rax
+ 388 0339 8B4004 movl 4(%rax), %eax
+ 389 033c 89C2 mov %eax, %edx
+
GAS LISTING /tmp/ccXzRABk.s page 13
+
+
+ 390 033e 488B45F8 movq -8(%rbp), %rax
+ 391 0342 488B4030 movq 48(%rax), %rax
+ 392 0346 488B4DF0 movq -16(%rbp), %rcx
+ 393 034a 4889CE movq %rcx, %rsi
+ 394 034d 4889C7 movq %rax, %rdi
+ 395 0350 E8000000 call memcpy at PLT
+ 395 00
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 396 .loc 1 198 0
+ 397 0355 B8000000 movl $0, %eax
+ 397 00
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 398 .loc 1 199 0
+ 399 035a C9 leave
+ 400 035b C3 ret
+ 401 .cfi_endproc
+ 402 .LFE596:
+ 403 .size KCipherVecRegSetDecryptIvec, .-KCipherVecRegSetDecryptIvec
+ 404 .section .rodata
+ 405 .LC5:
+ 406 0069 66756E63 .string "func"
+ 406 00
+ 407 .text
+ 408 .type KCipherVecRegSetEncryptCounterFunc, @function
+ 409 KCipherVecRegSetEncryptCounterFunc:
+ 410 .LFB597:
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptCounterFunc) (CIPHER_IMPL * self,
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cipher_ctr_func func)
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 411 .loc 1 205 0
+ 412 .cfi_startproc
+ 413 035c 55 pushq %rbp
+ 414 .LCFI14:
+ 415 .cfi_def_cfa_offset 16
+ 416 035d 4889E5 movq %rsp, %rbp
+ 417 .cfi_offset 6, -16
+ 418 .LCFI15:
+ 419 .cfi_def_cfa_register 6
+ 420 0360 4883EC10 subq $16, %rsp
+ 421 0364 48897DF8 movq %rdi, -8(%rbp)
+ 422 0368 488975F0 movq %rsi, -16(%rbp)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 423 .loc 1 206 0
+ 424 036c 48837DF8 cmpq $0, -8(%rbp)
+ 424 00
+ 425 0371 751F jne .L33
+ 426 0373 488D0D00 leaq __PRETTY_FUNCTION__.7290(%rip), %rcx
+ 426 000000
+ 427 037a BACE0000 movl $206, %edx
+ 427 00
+ 428 037f 488D3500 leaq .LC0(%rip), %rsi
+ 428 000000
+ 429 0386 488D3D00 leaq .LC1(%rip), %rdi
+
GAS LISTING /tmp/ccXzRABk.s page 14
+
+
+ 429 000000
+ 430 038d E8000000 call __assert_fail at PLT
+ 430 00
+ 431 .L33:
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (func);
+ 432 .loc 1 207 0
+ 433 0392 48837DF0 cmpq $0, -16(%rbp)
+ 433 00
+ 434 0397 751F jne .L34
+ 435 0399 488D0D00 leaq __PRETTY_FUNCTION__.7290(%rip), %rcx
+ 435 000000
+ 436 03a0 BACF0000 movl $207, %edx
+ 436 00
+ 437 03a5 488D3500 leaq .LC0(%rip), %rsi
+ 437 000000
+ 438 03ac 488D3D00 leaq .LC5(%rip), %rdi
+ 438 000000
+ 439 03b3 E8000000 call __assert_fail at PLT
+ 439 00
+ 440 .L34:
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->dad.encrypt_counter_func = func;
+ 441 .loc 1 209 0
+ 442 03b8 488B45F8 movq -8(%rbp), %rax
+ 443 03bc 488B55F0 movq -16(%rbp), %rdx
+ 444 03c0 48895038 movq %rdx, 56(%rax)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 445 .loc 1 211 0
+ 446 03c4 B8000000 movl $0, %eax
+ 446 00
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 447 .loc 1 212 0
+ 448 03c9 C9 leave
+ 449 03ca C3 ret
+ 450 .cfi_endproc
+ 451 .LFE597:
+ 452 .size KCipherVecRegSetEncryptCounterFunc, .-KCipherVecRegSetEncryptCounterFunc
+ 453 .type KCipherVecRegSetDecryptCounterFunc, @function
+ 454 KCipherVecRegSetDecryptCounterFunc:
+ 455 .LFB598:
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptCounterFunc) (CIPHER_IMPL * self,
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cipher_ctr_func func)
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 456 .loc 1 218 0
+ 457 .cfi_startproc
+ 458 03cb 55 pushq %rbp
+ 459 .LCFI16:
+ 460 .cfi_def_cfa_offset 16
+ 461 03cc 4889E5 movq %rsp, %rbp
+ 462 .cfi_offset 6, -16
+ 463 .LCFI17:
+ 464 .cfi_def_cfa_register 6
+ 465 03cf 4883EC10 subq $16, %rsp
+
GAS LISTING /tmp/ccXzRABk.s page 15
+
+
+ 466 03d3 48897DF8 movq %rdi, -8(%rbp)
+ 467 03d7 488975F0 movq %rsi, -16(%rbp)
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (self);
+ 468 .loc 1 219 0
+ 469 03db 48837DF8 cmpq $0, -8(%rbp)
+ 469 00
+ 470 03e0 751F jne .L37
+ 471 03e2 488D0D00 leaq __PRETTY_FUNCTION__.7300(%rip), %rcx
+ 471 000000
+ 472 03e9 BADB0000 movl $219, %edx
+ 472 00
+ 473 03ee 488D3500 leaq .LC0(%rip), %rsi
+ 473 000000
+ 474 03f5 488D3D00 leaq .LC1(%rip), %rdi
+ 474 000000
+ 475 03fc E8000000 call __assert_fail at PLT
+ 475 00
+ 476 .L37:
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** assert (func);
+ 477 .loc 1 220 0
+ 478 0401 48837DF0 cmpq $0, -16(%rbp)
+ 478 00
+ 479 0406 751F jne .L38
+ 480 0408 488D0D00 leaq __PRETTY_FUNCTION__.7300(%rip), %rcx
+ 480 000000
+ 481 040f BADC0000 movl $220, %edx
+ 481 00
+ 482 0414 488D3500 leaq .LC0(%rip), %rsi
+ 482 000000
+ 483 041b 488D3D00 leaq .LC5(%rip), %rdi
+ 483 000000
+ 484 0422 E8000000 call __assert_fail at PLT
+ 484 00
+ 485 .L38:
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->dad.decrypt_counter_func = func;
+ 486 .loc 1 222 0
+ 487 0427 488B45F8 movq -8(%rbp), %rax
+ 488 042b 488B55F0 movq -16(%rbp), %rdx
+ 489 042f 48895040 movq %rdx, 64(%rax)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 490 .loc 1 224 0
+ 491 0433 B8000000 movl $0, %eax
+ 491 00
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 492 .loc 1 225 0
+ 493 0438 C9 leave
+ 494 0439 C3 ret
+ 495 .cfi_endproc
+ 496 .LFE598:
+ 497 .size KCipherVecRegSetDecryptCounterFunc, .-KCipherVecRegSetDecryptCounterFunc
+ 498 .type KCipherVecRegEncryptV1, @function
+ 499 KCipherVecRegEncryptV1:
+ 500 .LFB599:
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccXzRABk.s page 16
+
+
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CMEMBER(EncryptV1)(const CIPHER_IMPL * self,
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec cv)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 501 .loc 1 230 0
+ 502 .cfi_startproc
+ 503 043a 55 pushq %rbp
+ 504 .LCFI18:
+ 505 .cfi_def_cfa_offset 16
+ 506 043b 4889E5 movq %rsp, %rbp
+ 507 .cfi_offset 6, -16
+ 508 .LCFI19:
+ 509 .cfi_def_cfa_register 6
+ 510 043e 4883EC10 subq $16, %rsp
+ 511 0442 48897DF8 movq %rdi, -8(%rbp)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return self->block_cipher->v1.encrypt (cv, self->dad.encrypt_key);
+ 512 .loc 1 231 0
+ 513 0446 488B45F8 movq -8(%rbp), %rax
+ 514 044a 488B4048 movq 72(%rax), %rax
+ 515 044e 488B5030 movq 48(%rax), %rdx
+ 516 0452 488B45F8 movq -8(%rbp), %rax
+ 517 0456 488B4018 movq 24(%rax), %rax
+ 518 045a 4889C7 movq %rax, %rdi
+ 519 045d FFD2 call *%rdx
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 520 .loc 1 232 0
+ 521 045f C9 leave
+ 522 0460 C3 ret
+ 523 .cfi_endproc
+ 524 .LFE599:
+ 525 .size KCipherVecRegEncryptV1, .-KCipherVecRegEncryptV1
+ 526 .type KCipherVecRegDecryptV1, @function
+ 527 KCipherVecRegDecryptV1:
+ 528 .LFB600:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CMEMBER(DecryptV1)(const CIPHER_IMPL * self,
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** register CipherVec cv)
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 529 .loc 1 237 0
+ 530 .cfi_startproc
+ 531 0461 55 pushq %rbp
+ 532 .LCFI20:
+ 533 .cfi_def_cfa_offset 16
+ 534 0462 4889E5 movq %rsp, %rbp
+ 535 .cfi_offset 6, -16
+ 536 .LCFI21:
+ 537 .cfi_def_cfa_register 6
+ 538 0465 4883EC10 subq $16, %rsp
+ 539 0469 48897DF8 movq %rdi, -8(%rbp)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return self->block_cipher->v1.decrypt (cv, self->dad.decrypt_key);
+ 540 .loc 1 238 0
+ 541 046d 488B45F8 movq -8(%rbp), %rax
+ 542 0471 488B4048 movq 72(%rax), %rax
+ 543 0475 488B5038 movq 56(%rax), %rdx
+ 544 0479 488B45F8 movq -8(%rbp), %rax
+ 545 047d 488B4020 movq 32(%rax), %rax
+ 546 0481 4889C7 movq %rax, %rdi
+
GAS LISTING /tmp/ccXzRABk.s page 17
+
+
+ 547 0484 FFD2 call *%rdx
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 548 .loc 1 239 0
+ 549 0486 C9 leave
+ 550 0487 C3 ret
+ 551 .cfi_endproc
+ 552 .LFE600:
+ 553 .size KCipherVecRegDecryptV1, .-KCipherVecRegDecryptV1
+ 554 .type KCipherVecRegEncryptV1Int, @function
+ 555 KCipherVecRegEncryptV1Int:
+ 556 .LFB601:
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(EncryptV1Int)(const CIPHER_IMPL * self,
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * in, void * out)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 557 .loc 1 244 0
+ 558 .cfi_startproc
+ 559 0488 55 pushq %rbp
+ 560 .LCFI22:
+ 561 .cfi_def_cfa_offset 16
+ 562 0489 4889E5 movq %rsp, %rbp
+ 563 .cfi_offset 6, -16
+ 564 .LCFI23:
+ 565 .cfi_def_cfa_register 6
+ 566 048c 4883EC30 subq $48, %rsp
+ 567 0490 48897DE8 movq %rdi, -24(%rbp)
+ 568 0494 488975E0 movq %rsi, -32(%rbp)
+ 569 0498 488955D8 movq %rdx, -40(%rbp)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn(in);
+ 570 .loc 1 247 0
+ 571 049c 488B45E0 movq -32(%rbp), %rax
+ 572 04a0 4889C7 movq %rax, %rdi
+ 573 04a3 E858FBFF call CipherVecIn
+ 573 FF
+ 574 04a8 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 574 F0
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CMEMBER(EncryptV1)(self, cv);
+ 575 .loc 1 248 0
+ 576 04ad F30F6F45 movdqu -16(%rbp), %xmm0
+ 576 F0
+ 577 04b2 488B45E8 movq -24(%rbp), %rax
+ 578 04b6 4889C7 movq %rax, %rdi
+ 579 04b9 E87CFFFF call KCipherVecRegEncryptV1
+ 579 FF
+ 580 04be F30F7F45 movdqu %xmm0, -16(%rbp)
+ 580 F0
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut(cv, out);
+ 581 .loc 1 249 0
+ 582 04c3 488B45D8 movq -40(%rbp), %rax
+ 583 04c7 F30F6F45 movdqu -16(%rbp), %xmm0
+ 583 F0
+ 584 04cc 4889C7 movq %rax, %rdi
+ 585 04cf E84BFBFF call CipherVecOut
+ 585 FF
+
GAS LISTING /tmp/ccXzRABk.s page 18
+
+
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 586 .loc 1 250 0
+ 587 04d4 B8000000 movl $0, %eax
+ 587 00
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 588 .loc 1 251 0
+ 589 04d9 C9 leave
+ 590 04da C3 ret
+ 591 .cfi_endproc
+ 592 .LFE601:
+ 593 .size KCipherVecRegEncryptV1Int, .-KCipherVecRegEncryptV1Int
+ 594 .type KCipherVecRegDecryptV1Int, @function
+ 595 KCipherVecRegDecryptV1Int:
+ 596 .LFB602:
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(DecryptV1Int)(const CIPHER_IMPL * self,
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const void * in, void * out)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 597 .loc 1 256 0
+ 598 .cfi_startproc
+ 599 04db 55 pushq %rbp
+ 600 .LCFI24:
+ 601 .cfi_def_cfa_offset 16
+ 602 04dc 4889E5 movq %rsp, %rbp
+ 603 .cfi_offset 6, -16
+ 604 .LCFI25:
+ 605 .cfi_def_cfa_register 6
+ 606 04df 4883EC30 subq $48, %rsp
+ 607 04e3 48897DE8 movq %rdi, -24(%rbp)
+ 608 04e7 488975E0 movq %rsi, -32(%rbp)
+ 609 04eb 488955D8 movq %rdx, -40(%rbp)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn(in);
+ 610 .loc 1 259 0
+ 611 04ef 488B45E0 movq -32(%rbp), %rax
+ 612 04f3 4889C7 movq %rax, %rdi
+ 613 04f6 E805FBFF call CipherVecIn
+ 613 FF
+ 614 04fb F30F7F45 movdqu %xmm0, -16(%rbp)
+ 614 F0
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CMEMBER(DecryptV1)(self, cv);
+ 615 .loc 1 260 0
+ 616 0500 F30F6F45 movdqu -16(%rbp), %xmm0
+ 616 F0
+ 617 0505 488B45E8 movq -24(%rbp), %rax
+ 618 0509 4889C7 movq %rax, %rdi
+ 619 050c E850FFFF call KCipherVecRegDecryptV1
+ 619 FF
+ 620 0511 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 620 F0
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut(cv, out);
+ 621 .loc 1 261 0
+ 622 0516 488B45D8 movq -40(%rbp), %rax
+ 623 051a F30F6F45 movdqu -16(%rbp), %xmm0
+ 623 F0
+
GAS LISTING /tmp/ccXzRABk.s page 19
+
+
+ 624 051f 4889C7 movq %rax, %rdi
+ 625 0522 E8F8FAFF call CipherVecOut
+ 625 FF
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 626 .loc 1 262 0
+ 627 0527 B8000000 movl $0, %eax
+ 627 00
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 628 .loc 1 263 0
+ 629 052c C9 leave
+ 630 052d C3 ret
+ 631 .cfi_endproc
+ 632 .LFE602:
+ 633 .size KCipherVecRegDecryptV1Int, .-KCipherVecRegDecryptV1Int
+ 634 .type KCipherVecRegEncrypt, @function
+ 635 KCipherVecRegEncrypt:
+ 636 .LFB603:
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Encrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 637 .loc 1 267 0
+ 638 .cfi_startproc
+ 639 052e 55 pushq %rbp
+ 640 .LCFI26:
+ 641 .cfi_def_cfa_offset 16
+ 642 052f 4889E5 movq %rsp, %rbp
+ 643 .cfi_offset 6, -16
+ 644 .LCFI27:
+ 645 .cfi_def_cfa_register 6
+ 646 0532 4883EC30 subq $48, %rsp
+ 647 0536 48897DE8 movq %rdi, -24(%rbp)
+ 648 053a 488975E0 movq %rsi, -32(%rbp)
+ 649 053e 488955D8 movq %rdx, -40(%rbp)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc;
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 650 .loc 1 270 0
+ 651 0542 488B45E8 movq -24(%rbp), %rax
+ 652 0546 488B4048 movq 72(%rax), %rax
+ 653 054a 8B00 movl (%rax), %eax
+ 654 054c 83F801 cmpl $1, %eax
+ 655 054f 7422 je .L50
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 656 .loc 1 273 0
+ 657 0551 B9110100 movl $273, %ecx
+ 657 00
+ 658 0556 488D1500 leaq __func__.7350(%rip), %rdx
+ 658 000000
+ 659 055d 488D3500 leaq .LC0(%rip), %rsi
+ 659 000000
+ 660 0564 BF080E09 movl $-2029449720, %edi
+ 660 87
+ 661 0569 E8000000 call SetRCFileFuncLine at PLT
+ 661 00
+
GAS LISTING /tmp/ccXzRABk.s page 20
+
+
+ 662 056e 8945FC movl %eax, -4(%rbp)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 663 .loc 1 274 0
+ 664 0571 EB1A jmp .L51
+ 665 .L50:
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(EncryptV1Int)(self, in, out);
+ 666 .loc 1 277 0
+ 667 0573 488B55D8 movq -40(%rbp), %rdx
+ 668 0577 488B4DE0 movq -32(%rbp), %rcx
+ 669 057b 488B45E8 movq -24(%rbp), %rax
+ 670 057f 4889CE movq %rcx, %rsi
+ 671 0582 4889C7 movq %rax, %rdi
+ 672 0585 E8FEFEFF call KCipherVecRegEncryptV1Int
+ 672 FF
+ 673 058a 8945FC movl %eax, -4(%rbp)
+ 674 .L51:
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 675 .loc 1 281 0
+ 676 058d 8B45FC movl -4(%rbp), %eax
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 677 .loc 1 282 0
+ 678 0590 C9 leave
+ 679 0591 C3 ret
+ 680 .cfi_endproc
+ 681 .LFE603:
+ 682 .size KCipherVecRegEncrypt, .-KCipherVecRegEncrypt
+ 683 .type KCipherVecRegDecrypt, @function
+ 684 KCipherVecRegDecrypt:
+ 685 .LFB604:
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Decrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 686 .loc 1 287 0
+ 687 .cfi_startproc
+ 688 0592 55 pushq %rbp
+ 689 .LCFI28:
+ 690 .cfi_def_cfa_offset 16
+ 691 0593 4889E5 movq %rsp, %rbp
+ 692 .cfi_offset 6, -16
+ 693 .LCFI29:
+ 694 .cfi_def_cfa_register 6
+ 695 0596 4883EC30 subq $48, %rsp
+ 696 059a 48897DE8 movq %rdi, -24(%rbp)
+ 697 059e 488975E0 movq %rsi, -32(%rbp)
+ 698 05a2 488955D8 movq %rdx, -40(%rbp)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc = 0;
+ 699 .loc 1 288 0
+ 700 05a6 C745FC00 movl $0, -4(%rbp)
+ 700 000000
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccXzRABk.s page 21
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (self->block_cipher->version.maj)
+ 701 .loc 1 290 0
+ 702 05ad 488B45E8 movq -24(%rbp), %rax
+ 703 05b1 488B4048 movq 72(%rax), %rax
+ 704 05b5 8B00 movl (%rax), %eax
+ 705 05b7 83F801 cmpl $1, %eax
+ 706 05ba 7422 je .L55
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 707 .loc 1 293 0
+ 708 05bc B9250100 movl $293, %ecx
+ 708 00
+ 709 05c1 488D1500 leaq __func__.7366(%rip), %rdx
+ 709 000000
+ 710 05c8 488D3500 leaq .LC0(%rip), %rsi
+ 710 000000
+ 711 05cf BF080E09 movl $-2029449720, %edi
+ 711 87
+ 712 05d4 E8000000 call SetRCFileFuncLine at PLT
+ 712 00
+ 713 05d9 8945FC movl %eax, -4(%rbp)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 714 .loc 1 294 0
+ 715 05dc EB1A jmp .L56
+ 716 .L55:
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case 1:
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(DecryptV1Int)(self, in, out);
+ 717 .loc 1 297 0
+ 718 05de 488B55D8 movq -40(%rbp), %rdx
+ 719 05e2 488B4DE0 movq -32(%rbp), %rcx
+ 720 05e6 488B45E8 movq -24(%rbp), %rax
+ 721 05ea 4889CE movq %rcx, %rsi
+ 722 05ed 4889C7 movq %rax, %rdi
+ 723 05f0 E8E6FEFF call KCipherVecRegDecryptV1Int
+ 723 FF
+ 724 05f5 8945FC movl %eax, -4(%rbp)
+ 725 .L56:
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 726 .loc 1 301 0
+ 727 05f8 8B45FC movl -4(%rbp), %eax
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 728 .loc 1 302 0
+ 729 05fb C9 leave
+ 730 05fc C3 ret
+ 731 .cfi_endproc
+ 732 .LFE604:
+ 733 .size KCipherVecRegDecrypt, .-KCipherVecRegDecrypt
+ 734 .type KCipherVecRegEncryptEcb, @function
+ 735 KCipherVecRegEncryptEcb:
+ 736 .LFB605:
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+
GAS LISTING /tmp/ccXzRABk.s page 22
+
+
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ====================
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * longer runs of multiple blocks.
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * The algorithms are well defined and standard in most cases
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * These aremore or elss equivalent to class functions as they do not depend upon
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * the operation of the cipher and the algorithms are independent of anything about
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * the cipher other than its block size.
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT: plain text block
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT: cipher text block
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * EK: encryption key
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * DK: decryption key (might be sthe same as EK)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * ENC: encrypt cipher function on a block using a key
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * DEC: decrypt cipher function on a block using a key
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * IV: initialization vector - used as feedback for chaining
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * N: number used once (nonce)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * FB: feedback is the next IV in a chained/feedback mode
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * NOTE:
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * time is written. The code does not look for overlaps at this point.
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Electronic Code Book - simple cipher with no chaining feedback just iterate
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * simple encrypt/decrypt with the plain, text, cipher text and key/
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = ENC (PT,EK)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = DEC (CT,DK)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * size. Changing MAX_BLOCK_SIZE in cipher.c can up that limit without
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * causing any other compatibility issues.
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 737 .loc 1 349 0
+ 738 .cfi_startproc
+ 739 05fd 55 pushq %rbp
+ 740 .LCFI30:
+ 741 .cfi_def_cfa_offset 16
+ 742 05fe 4889E5 movq %rsp, %rbp
+ 743 .cfi_offset 6, -16
+ 744 .LCFI31:
+ 745 .cfi_def_cfa_register 6
+ 746 0601 4883EC30 subq $48, %rsp
+ 747 0605 48897DE8 movq %rdi, -24(%rbp)
+ 748 0609 488975E0 movq %rsi, -32(%rbp)
+
GAS LISTING /tmp/ccXzRABk.s page 23
+
+
+ 749 060d 488955D8 movq %rdx, -40(%rbp)
+ 750 0611 894DD4 movl %ecx, -44(%rbp)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 751 .loc 1 353 0
+ 752 0614 488B45E0 movq -32(%rbp), %rax
+ 753 0618 488945F0 movq %rax, -16(%rbp)
+ 754 061c 488B45D8 movq -40(%rbp), %rax
+ 755 0620 488945F8 movq %rax, -8(%rbp)
+ 756 0624 EB31 jmp .L59
+ 757 .L60:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptV1Int)(self, pin, pout);
+ 758 .loc 1 357 0
+ 759 0626 488B55F8 movq -8(%rbp), %rdx
+ 760 062a 488B4DF0 movq -16(%rbp), %rcx
+ 761 062e 488B45E8 movq -24(%rbp), %rax
+ 762 0632 4889CE movq %rcx, %rsi
+ 763 0635 4889C7 movq %rax, %rdi
+ 764 0638 E84BFEFF call KCipherVecRegEncryptV1Int
+ 764 FF
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 765 .loc 1 355 0
+ 766 063d 488B45E8 movq -24(%rbp), %rax
+ 767 0641 8B4004 movl 4(%rax), %eax
+ 768 0644 89C0 mov %eax, %eax
+ 769 0646 480145F0 addq %rax, -16(%rbp)
+ 770 064a 488B45E8 movq -24(%rbp), %rax
+ 771 064e 8B4004 movl 4(%rax), %eax
+ 772 0651 89C0 mov %eax, %eax
+ 773 0653 480145F8 addq %rax, -8(%rbp)
+ 774 .L59:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 775 .loc 1 354 0
+ 776 0657 837DD400 cmpl $0, -44(%rbp)
+ 777 065b 0F95C0 setne %al
+ 778 065e 836DD401 subl $1, -44(%rbp)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 779 .loc 1 353 0
+ 780 0662 84C0 testb %al, %al
+ 781 0664 75C0 jne .L60
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 782 .loc 1 359 0
+ 783 0666 B8000000 movl $0, %eax
+ 783 00
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 784 .loc 1 360 0
+ 785 066b C9 leave
+ 786 066c C3 ret
+ 787 .cfi_endproc
+ 788 .LFE605:
+ 789 .size KCipherVecRegEncryptEcb, .-KCipherVecRegEncryptEcb
+
GAS LISTING /tmp/ccXzRABk.s page 24
+
+
+ 790 .type KCipherVecRegDecryptEcb, @function
+ 791 KCipherVecRegDecryptEcb:
+ 792 .LFB606:
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 793 .loc 1 365 0
+ 794 .cfi_startproc
+ 795 066d 55 pushq %rbp
+ 796 .LCFI32:
+ 797 .cfi_def_cfa_offset 16
+ 798 066e 4889E5 movq %rsp, %rbp
+ 799 .cfi_offset 6, -16
+ 800 .LCFI33:
+ 801 .cfi_def_cfa_register 6
+ 802 0671 4883EC30 subq $48, %rsp
+ 803 0675 48897DE8 movq %rdi, -24(%rbp)
+ 804 0679 488975E0 movq %rsi, -32(%rbp)
+ 805 067d 488955D8 movq %rdx, -40(%rbp)
+ 806 0681 894DD4 movl %ecx, -44(%rbp)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 807 .loc 1 369 0
+ 808 0684 488B45E0 movq -32(%rbp), %rax
+ 809 0688 488945F0 movq %rax, -16(%rbp)
+ 810 068c 488B45D8 movq -40(%rbp), %rax
+ 811 0690 488945F8 movq %rax, -8(%rbp)
+ 812 0694 EB31 jmp .L63
+ 813 .L64:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptV1Int)(self, pin, pout);
+ 814 .loc 1 373 0
+ 815 0696 488B55F8 movq -8(%rbp), %rdx
+ 816 069a 488B4DF0 movq -16(%rbp), %rcx
+ 817 069e 488B45E8 movq -24(%rbp), %rax
+ 818 06a2 4889CE movq %rcx, %rsi
+ 819 06a5 4889C7 movq %rax, %rdi
+ 820 06a8 E82EFEFF call KCipherVecRegDecryptV1Int
+ 820 FF
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 821 .loc 1 371 0
+ 822 06ad 488B45E8 movq -24(%rbp), %rax
+ 823 06b1 8B4004 movl 4(%rax), %eax
+ 824 06b4 89C0 mov %eax, %eax
+ 825 06b6 480145F0 addq %rax, -16(%rbp)
+ 826 06ba 488B45E8 movq -24(%rbp), %rax
+ 827 06be 8B4004 movl 4(%rax), %eax
+ 828 06c1 89C0 mov %eax, %eax
+ 829 06c3 480145F8 addq %rax, -8(%rbp)
+ 830 .L63:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+
GAS LISTING /tmp/ccXzRABk.s page 25
+
+
+ 831 .loc 1 370 0
+ 832 06c7 837DD400 cmpl $0, -44(%rbp)
+ 833 06cb 0F95C0 setne %al
+ 834 06ce 836DD401 subl $1, -44(%rbp)
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 835 .loc 1 369 0
+ 836 06d2 84C0 testb %al, %al
+ 837 06d4 75C0 jne .L64
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 838 .loc 1 376 0
+ 839 06d6 B8000000 movl $0, %eax
+ 839 00
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 840 .loc 1 377 0
+ 841 06db C9 leave
+ 842 06dc C3 ret
+ 843 .cfi_endproc
+ 844 .LFE606:
+ 845 .size KCipherVecRegDecryptEcb, .-KCipherVecRegDecryptEcb
+ 846 .type KCipherVecRegEncryptCbc, @function
+ 847 KCipherVecRegEncryptCbc:
+ 848 .LFB607:
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Cipher-Block Chaining
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = (FB = ENC (PT^IV, EK))
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = DEC ((FB = CT), DK)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 849 .loc 1 387 0
+ 850 .cfi_startproc
+ 851 06dd 55 pushq %rbp
+ 852 .LCFI34:
+ 853 .cfi_def_cfa_offset 16
+ 854 06de 4889E5 movq %rsp, %rbp
+ 855 .cfi_offset 6, -16
+ 856 .LCFI35:
+ 857 .cfi_def_cfa_register 6
+ 858 06e1 4883EC50 subq $80, %rsp
+ 859 06e5 48897DC8 movq %rdi, -56(%rbp)
+ 860 06e9 488975C0 movq %rsi, -64(%rbp)
+ 861 06ed 488955B8 movq %rdx, -72(%rbp)
+ 862 06f1 894DB4 movl %ecx, -76(%rbp)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CipherVecIn (self->dad.encrypt_ivec);
+
GAS LISTING /tmp/ccXzRABk.s page 26
+
+
+ 863 .loc 1 396 0
+ 864 06f4 488B45C8 movq -56(%rbp), %rax
+ 865 06f8 488B4028 movq 40(%rax), %rax
+ 866 06fc 4889C7 movq %rax, %rdi
+ 867 06ff E8FCF8FF call CipherVecIn
+ 867 FF
+ 868 0704 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 868 E0
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 869 .loc 1 399 0
+ 870 0709 488B45C0 movq -64(%rbp), %rax
+ 871 070d 488945F0 movq %rax, -16(%rbp)
+ 872 0711 488B45B8 movq -72(%rbp), %rax
+ 873 0715 488945F8 movq %rax, -8(%rbp)
+ 874 0719 EB65 jmp .L67
+ 875 .L68:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 876 .loc 1 403 0
+ 877 071b 488B45F0 movq -16(%rbp), %rax
+ 878 071f 4889C7 movq %rax, %rdi
+ 879 0722 E8D9F8FF call CipherVecIn
+ 879 FF
+ 880 0727 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 880 D0
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv ^= ivec;
+ 881 .loc 1 404 0
+ 882 072c F30F6F45 movdqu -32(%rbp), %xmm0
+ 882 E0
+ 883 0731 F30F6F4D movdqu -48(%rbp), %xmm1
+ 883 D0
+ 884 0736 660FEFC1 pxor %xmm1, %xmm0
+ 885 073a F30F7F45 movdqu %xmm0, -48(%rbp)
+ 885 D0
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CMEMBER(EncryptV1)(self, cv);
+ 886 .loc 1 405 0
+ 887 073f F30F6F45 movdqu -48(%rbp), %xmm0
+ 887 D0
+ 888 0744 488B45C8 movq -56(%rbp), %rax
+ 889 0748 4889C7 movq %rax, %rdi
+ 890 074b E8EAFCFF call KCipherVecRegEncryptV1
+ 890 FF
+ 891 0750 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 891 E0
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (ivec, pout);
+ 892 .loc 1 406 0
+ 893 0755 488B45F8 movq -8(%rbp), %rax
+ 894 0759 F30F6F45 movdqu -32(%rbp), %xmm0
+ 894 E0
+ 895 075e 4889C7 movq %rax, %rdi
+ 896 0761 E8B9F8FF call CipherVecOut
+ 896 FF
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccXzRABk.s page 27
+
+
+ 897 .loc 1 401 0
+ 898 0766 488B45C8 movq -56(%rbp), %rax
+ 899 076a 8B4004 movl 4(%rax), %eax
+ 900 076d 89C0 mov %eax, %eax
+ 901 076f 480145F0 addq %rax, -16(%rbp)
+ 902 0773 488B45C8 movq -56(%rbp), %rax
+ 903 0777 8B4004 movl 4(%rax), %eax
+ 904 077a 89C0 mov %eax, %eax
+ 905 077c 480145F8 addq %rax, -8(%rbp)
+ 906 .L67:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 907 .loc 1 400 0
+ 908 0780 837DB400 cmpl $0, -76(%rbp)
+ 909 0784 0F95C0 setne %al
+ 910 0787 836DB401 subl $1, -76(%rbp)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 911 .loc 1 399 0
+ 912 078b 84C0 testb %al, %al
+ 913 078d 758C jne .L68
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (ivec, self->dad.encrypt_ivec);
+ 914 .loc 1 412 0
+ 915 078f 488B45C8 movq -56(%rbp), %rax
+ 916 0793 488B4028 movq 40(%rax), %rax
+ 917 0797 F30F6F45 movdqu -32(%rbp), %xmm0
+ 917 E0
+ 918 079c 4889C7 movq %rax, %rdi
+ 919 079f E87BF8FF call CipherVecOut
+ 919 FF
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 920 .loc 1 415 0
+ 921 07a4 B8000000 movl $0, %eax
+ 921 00
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 922 .loc 1 416 0
+ 923 07a9 C9 leave
+ 924 07aa C3 ret
+ 925 .cfi_endproc
+ 926 .LFE607:
+ 927 .size KCipherVecRegEncryptCbc, .-KCipherVecRegEncryptCbc
+ 928 .type KCipherVecRegDecryptCbc, @function
+ 929 KCipherVecRegDecryptCbc:
+ 930 .LFB608:
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 931 .loc 1 421 0
+ 932 .cfi_startproc
+ 933 07ab 55 pushq %rbp
+
GAS LISTING /tmp/ccXzRABk.s page 28
+
+
+ 934 .LCFI36:
+ 935 .cfi_def_cfa_offset 16
+ 936 07ac 4889E5 movq %rsp, %rbp
+ 937 .cfi_offset 6, -16
+ 938 .LCFI37:
+ 939 .cfi_def_cfa_register 6
+ 940 07af 4883EC60 subq $96, %rsp
+ 941 07b3 48897DB8 movq %rdi, -72(%rbp)
+ 942 07b7 488975B0 movq %rsi, -80(%rbp)
+ 943 07bb 488955A8 movq %rdx, -88(%rbp)
+ 944 07bf 894DA4 movl %ecx, -92(%rbp)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CipherVecIn (self->dad.decrypt_ivec);
+ 945 .loc 1 427 0
+ 946 07c2 488B45B8 movq -72(%rbp), %rax
+ 947 07c6 488B4030 movq 48(%rax), %rax
+ 948 07ca 4889C7 movq %rax, %rdi
+ 949 07cd E82EF8FF call CipherVecIn
+ 949 FF
+ 950 07d2 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 950 D0
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 951 .loc 1 429 0
+ 952 07d7 488B45B0 movq -80(%rbp), %rax
+ 953 07db 488945E0 movq %rax, -32(%rbp)
+ 954 07df 488B45A8 movq -88(%rbp), %rax
+ 955 07e3 488945E8 movq %rax, -24(%rbp)
+ 956 07e7 EB6F jmp .L71
+ 957 .L72:
+ 958 .LBB2:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec temp;
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 959 .loc 1 435 0
+ 960 07e9 488B45E0 movq -32(%rbp), %rax
+ 961 07ed 4889C7 movq %rax, %rdi
+ 962 07f0 E80BF8FF call CipherVecIn
+ 962 FF
+ 963 07f5 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 963 C0
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = cv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(DecryptV1)(self, temp);
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(DecryptV1)(self, cv);
+ 964 .loc 1 440 0
+ 965 07fa F30F6F45 movdqu -64(%rbp), %xmm0
+ 965 C0
+ 966 07ff 488B45B8 movq -72(%rbp), %rax
+
GAS LISTING /tmp/ccXzRABk.s page 29
+
+
+ 967 0803 4889C7 movq %rax, %rdi
+ 968 0806 E856FCFF call KCipherVecRegDecryptV1
+ 968 FF
+ 969 080b F30F7F45 movdqu %xmm0, -16(%rbp)
+ 969 F0
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp ^= ivec;
+ 970 .loc 1 442 0
+ 971 0810 F30F6F45 movdqu -48(%rbp), %xmm0
+ 971 D0
+ 972 0815 F30F6F4D movdqu -16(%rbp), %xmm1
+ 972 F0
+ 973 081a 660FEFC1 pxor %xmm1, %xmm0
+ 974 081e F30F7F45 movdqu %xmm0, -16(%rbp)
+ 974 F0
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (temp, pout);
+ 975 .loc 1 443 0
+ 976 0823 488B45E8 movq -24(%rbp), %rax
+ 977 0827 F30F6F45 movdqu -16(%rbp), %xmm0
+ 977 F0
+ 978 082c 4889C7 movq %rax, %rdi
+ 979 082f E8EBF7FF call CipherVecOut
+ 979 FF
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = cv;
+ 980 .loc 1 444 0
+ 981 0834 F30F6F45 movdqu -64(%rbp), %xmm0
+ 981 C0
+ 982 0839 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 982 D0
+ 983 .LBE2:
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 984 .loc 1 431 0
+ 985 083e 488B45B8 movq -72(%rbp), %rax
+ 986 0842 8B4004 movl 4(%rax), %eax
+ 987 0845 89C0 mov %eax, %eax
+ 988 0847 480145E0 addq %rax, -32(%rbp)
+ 989 084b 488B45B8 movq -72(%rbp), %rax
+ 990 084f 8B4004 movl 4(%rax), %eax
+ 991 0852 89C0 mov %eax, %eax
+ 992 0854 480145E8 addq %rax, -24(%rbp)
+ 993 .L71:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 994 .loc 1 430 0
+ 995 0858 837DA400 cmpl $0, -92(%rbp)
+ 996 085c 0F95C0 setne %al
+ 997 085f 836DA401 subl $1, -92(%rbp)
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 998 .loc 1 429 0
+ 999 0863 84C0 testb %al, %al
+ 1000 0865 7582 jne .L72
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.decrypt_ivec = ivec;
+ 1001 .loc 1 447 0
+ 1002 0867 488B45B8 movq -72(%rbp), %rax
+ 1003 086b 488B4030 movq 48(%rax), %rax
+ 1004 086f F30F6F45 movdqu -48(%rbp), %xmm0
+
GAS LISTING /tmp/ccXzRABk.s page 30
+
+
+ 1004 D0
+ 1005 0874 F30F7F00 movdqu %xmm0, (%rax)
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1006 .loc 1 448 0
+ 1007 0878 B8000000 movl $0, %eax
+ 1007 00
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1008 .loc 1 449 0
+ 1009 087d C9 leave
+ 1010 087e C3 ret
+ 1011 .cfi_endproc
+ 1012 .LFE608:
+ 1013 .size KCipherVecRegDecryptCbc, .-KCipherVecRegDecryptCbc
+ 1014 .type KCipherVecRegEncryptPcbc, @function
+ 1015 KCipherVecRegEncryptPcbc:
+ 1016 .LFB609:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Propagating cipher-block chaining
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1017 .loc 1 459 0
+ 1018 .cfi_startproc
+ 1019 087f 55 pushq %rbp
+ 1020 .LCFI38:
+ 1021 .cfi_def_cfa_offset 16
+ 1022 0880 4889E5 movq %rsp, %rbp
+ 1023 .cfi_offset 6, -16
+ 1024 .LCFI39:
+ 1025 .cfi_def_cfa_register 6
+ 1026 0883 4883EC60 subq $96, %rsp
+ 1027 0887 48897DB8 movq %rdi, -72(%rbp)
+ 1028 088b 488975B0 movq %rsi, -80(%rbp)
+ 1029 088f 488955A8 movq %rdx, -88(%rbp)
+ 1030 0893 894DA4 movl %ecx, -92(%rbp)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1031 .loc 1 466 0
+ 1032 0896 488B45B8 movq -72(%rbp), %rax
+ 1033 089a 488B4028 movq 40(%rax), %rax
+ 1034 089e 660F6F00 movdqa (%rax), %xmm0
+ 1035 08a2 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1035 D0
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1036 .loc 1 468 0
+ 1037 08a7 488B45B0 movq -80(%rbp), %rax
+
GAS LISTING /tmp/ccXzRABk.s page 31
+
+
+ 1038 08ab 488945E0 movq %rax, -32(%rbp)
+ 1039 08af 488B45A8 movq -88(%rbp), %rax
+ 1040 08b3 488945E8 movq %rax, -24(%rbp)
+ 1041 08b7 EB78 jmp .L75
+ 1042 .L76:
+ 1043 .LBB3:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec temp;
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1044 .loc 1 474 0
+ 1045 08b9 488B45E0 movq -32(%rbp), %rax
+ 1046 08bd 4889C7 movq %rax, %rdi
+ 1047 08c0 E83BF7FF call CipherVecIn
+ 1047 FF
+ 1048 08c5 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 1048 C0
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = cv ^ ivec;
+ 1049 .loc 1 475 0
+ 1050 08ca F30F6F45 movdqu -48(%rbp), %xmm0
+ 1050 D0
+ 1051 08cf F30F6F4D movdqu -64(%rbp), %xmm1
+ 1051 C0
+ 1052 08d4 660FEFC1 pxor %xmm1, %xmm0
+ 1053 08d8 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 1053 F0
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(EncryptV1)(self, temp);
+ 1054 .loc 1 476 0
+ 1055 08dd F30F6F45 movdqu -16(%rbp), %xmm0
+ 1055 F0
+ 1056 08e2 488B45B8 movq -72(%rbp), %rax
+ 1057 08e6 4889C7 movq %rax, %rdi
+ 1058 08e9 E84CFBFF call KCipherVecRegEncryptV1
+ 1058 FF
+ 1059 08ee F30F7F45 movdqu %xmm0, -16(%rbp)
+ 1059 F0
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = cv ^ temp;
+ 1060 .loc 1 477 0
+ 1061 08f3 F30F6F45 movdqu -16(%rbp), %xmm0
+ 1061 F0
+ 1062 08f8 F30F6F4D movdqu -64(%rbp), %xmm1
+ 1062 C0
+ 1063 08fd 660FEFC1 pxor %xmm1, %xmm0
+ 1064 0901 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1064 D0
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (temp, pout);
+ 1065 .loc 1 478 0
+ 1066 0906 488B45E8 movq -24(%rbp), %rax
+ 1067 090a F30F6F45 movdqu -16(%rbp), %xmm0
+ 1067 F0
+ 1068 090f 4889C7 movq %rax, %rdi
+ 1069 0912 E808F7FF call CipherVecOut
+ 1069 FF
+ 1070 .LBE3:
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccXzRABk.s page 32
+
+
+ 1071 .loc 1 470 0
+ 1072 0917 488B45B8 movq -72(%rbp), %rax
+ 1073 091b 8B4004 movl 4(%rax), %eax
+ 1074 091e 89C0 mov %eax, %eax
+ 1075 0920 480145E0 addq %rax, -32(%rbp)
+ 1076 0924 488B45B8 movq -72(%rbp), %rax
+ 1077 0928 8B4004 movl 4(%rax), %eax
+ 1078 092b 89C0 mov %eax, %eax
+ 1079 092d 480145E8 addq %rax, -24(%rbp)
+ 1080 .L75:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1081 .loc 1 469 0
+ 1082 0931 837DA400 cmpl $0, -92(%rbp)
+ 1083 0935 0F95C0 setne %al
+ 1084 0938 836DA401 subl $1, -92(%rbp)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1085 .loc 1 468 0
+ 1086 093c 84C0 testb %al, %al
+ 1087 093e 0F8575FF jne .L76
+ 1087 FFFF
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1088 .loc 1 481 0
+ 1089 0944 488B45B8 movq -72(%rbp), %rax
+ 1090 0948 488B4028 movq 40(%rax), %rax
+ 1091 094c F30F6F45 movdqu -48(%rbp), %xmm0
+ 1091 D0
+ 1092 0951 F30F7F00 movdqu %xmm0, (%rax)
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1093 .loc 1 483 0
+ 1094 0955 B8000000 movl $0, %eax
+ 1094 00
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1095 .loc 1 487 0
+ 1096 095a C9 leave
+ 1097 095b C3 ret
+ 1098 .cfi_endproc
+ 1099 .LFE609:
+ 1100 .size KCipherVecRegEncryptPcbc, .-KCipherVecRegEncryptPcbc
+ 1101 .type KCipherVecRegDecryptPcbc, @function
+ 1102 KCipherVecRegDecryptPcbc:
+ 1103 .LFB610:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1104 .loc 1 492 0
+ 1105 .cfi_startproc
+ 1106 095c 55 pushq %rbp
+ 1107 .LCFI40:
+ 1108 .cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccXzRABk.s page 33
+
+
+ 1109 095d 4889E5 movq %rsp, %rbp
+ 1110 .cfi_offset 6, -16
+ 1111 .LCFI41:
+ 1112 .cfi_def_cfa_register 6
+ 1113 0960 4883EC60 subq $96, %rsp
+ 1114 0964 48897DB8 movq %rdi, -72(%rbp)
+ 1115 0968 488975B0 movq %rsi, -80(%rbp)
+ 1116 096c 488955A8 movq %rdx, -88(%rbp)
+ 1117 0970 894DA4 movl %ecx, -92(%rbp)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1118 .loc 1 499 0
+ 1119 0973 488B45B8 movq -72(%rbp), %rax
+ 1120 0977 488B4028 movq 40(%rax), %rax
+ 1121 097b 660F6F00 movdqa (%rax), %xmm0
+ 1122 097f F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1122 D0
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1123 .loc 1 501 0
+ 1124 0984 488B45B0 movq -80(%rbp), %rax
+ 1125 0988 488945E0 movq %rax, -32(%rbp)
+ 1126 098c 488B45A8 movq -88(%rbp), %rax
+ 1127 0990 488945E8 movq %rax, -24(%rbp)
+ 1128 0994 EB65 jmp .L79
+ 1129 .L80:
+ 1130 .LBB4:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec temp;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1131 .loc 1 507 0
+ 1132 0996 488B45E0 movq -32(%rbp), %rax
+ 1133 099a 4889C7 movq %rax, %rdi
+ 1134 099d E85EF6FF call CipherVecIn
+ 1134 FF
+ 1135 09a2 F30F7F45 movdqu %xmm0, -64(%rbp)
+ 1135 C0
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** temp = CMEMBER(DecryptV1)(self, cv);
+ 1136 .loc 1 508 0
+ 1137 09a7 F30F6F45 movdqu -64(%rbp), %xmm0
+ 1137 C0
+ 1138 09ac 488B45B8 movq -72(%rbp), %rax
+ 1139 09b0 4889C7 movq %rax, %rdi
+ 1140 09b3 E8A9FAFF call KCipherVecRegDecryptV1
+ 1140 FF
+ 1141 09b8 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 1141 F0
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec ^= temp;
+ 1142 .loc 1 509 0
+
GAS LISTING /tmp/ccXzRABk.s page 34
+
+
+ 1143 09bd F30F6F45 movdqu -16(%rbp), %xmm0
+ 1143 F0
+ 1144 09c2 F30F6F4D movdqu -48(%rbp), %xmm1
+ 1144 D0
+ 1145 09c7 660FEFC1 pxor %xmm1, %xmm0
+ 1146 09cb F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1146 D0
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (temp, pout);
+ 1147 .loc 1 510 0
+ 1148 09d0 488B45E8 movq -24(%rbp), %rax
+ 1149 09d4 F30F6F45 movdqu -16(%rbp), %xmm0
+ 1149 F0
+ 1150 09d9 4889C7 movq %rax, %rdi
+ 1151 09dc E83EF6FF call CipherVecOut
+ 1151 FF
+ 1152 .LBE4:
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1153 .loc 1 503 0
+ 1154 09e1 488B45B8 movq -72(%rbp), %rax
+ 1155 09e5 8B4004 movl 4(%rax), %eax
+ 1156 09e8 89C0 mov %eax, %eax
+ 1157 09ea 480145E0 addq %rax, -32(%rbp)
+ 1158 09ee 488B45B8 movq -72(%rbp), %rax
+ 1159 09f2 8B4004 movl 4(%rax), %eax
+ 1160 09f5 89C0 mov %eax, %eax
+ 1161 09f7 480145E8 addq %rax, -24(%rbp)
+ 1162 .L79:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1163 .loc 1 502 0
+ 1164 09fb 837DA400 cmpl $0, -92(%rbp)
+ 1165 09ff 0F95C0 setne %al
+ 1166 0a02 836DA401 subl $1, -92(%rbp)
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1167 .loc 1 501 0
+ 1168 0a06 84C0 testb %al, %al
+ 1169 0a08 758C jne .L80
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1170 .loc 1 513 0
+ 1171 0a0a 488B45B8 movq -72(%rbp), %rax
+ 1172 0a0e 488B4028 movq 40(%rax), %rax
+ 1173 0a12 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1173 D0
+ 1174 0a17 F30F7F00 movdqu %xmm0, (%rax)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1175 .loc 1 515 0
+ 1176 0a1b B8000000 movl $0, %eax
+ 1176 00
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1177 .loc 1 519 0
+ 1178 0a20 C9 leave
+ 1179 0a21 C3 ret
+
GAS LISTING /tmp/ccXzRABk.s page 35
+
+
+ 1180 .cfi_endproc
+ 1181 .LFE610:
+ 1182 .size KCipherVecRegDecryptPcbc, .-KCipherVecRegDecryptPcbc
+ 1183 .type KCipherVecRegEncryptCfb, @function
+ 1184 KCipherVecRegEncryptCfb:
+ 1185 .LFB611:
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Cipher Feedback
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = (FB = PT) ^ ENC (IV, EK))
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = (FB = CT) ^ DEC (IV, DK)
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1186 .loc 1 529 0
+ 1187 .cfi_startproc
+ 1188 0a22 55 pushq %rbp
+ 1189 .LCFI42:
+ 1190 .cfi_def_cfa_offset 16
+ 1191 0a23 4889E5 movq %rsp, %rbp
+ 1192 .cfi_offset 6, -16
+ 1193 .LCFI43:
+ 1194 .cfi_def_cfa_register 6
+ 1195 0a26 4883EC50 subq $80, %rsp
+ 1196 0a2a 48897DC8 movq %rdi, -56(%rbp)
+ 1197 0a2e 488975C0 movq %rsi, -64(%rbp)
+ 1198 0a32 488955B8 movq %rdx, -72(%rbp)
+ 1199 0a36 894DB4 movl %ecx, -76(%rbp)
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1200 .loc 1 536 0
+ 1201 0a39 488B45C8 movq -56(%rbp), %rax
+ 1202 0a3d 488B4028 movq 40(%rax), %rax
+ 1203 0a41 660F6F00 movdqa (%rax), %xmm0
+ 1204 0a45 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1204 E0
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1205 .loc 1 538 0
+ 1206 0a4a 488B45C0 movq -64(%rbp), %rax
+ 1207 0a4e 488945F0 movq %rax, -16(%rbp)
+ 1208 0a52 488B45B8 movq -72(%rbp), %rax
+ 1209 0a56 488945F8 movq %rax, -8(%rbp)
+ 1210 0a5a EB65 jmp .L83
+ 1211 .L84:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CMEMBER(EncryptV1)(self, ivec);
+ 1212 .loc 1 542 0
+
GAS LISTING /tmp/ccXzRABk.s page 36
+
+
+ 1213 0a5c F30F6F45 movdqu -32(%rbp), %xmm0
+ 1213 E0
+ 1214 0a61 488B45C8 movq -56(%rbp), %rax
+ 1215 0a65 4889C7 movq %rax, %rdi
+ 1216 0a68 E8CDF9FF call KCipherVecRegEncryptV1
+ 1216 FF
+ 1217 0a6d F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1217 E0
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1218 .loc 1 543 0
+ 1219 0a72 488B45F0 movq -16(%rbp), %rax
+ 1220 0a76 4889C7 movq %rax, %rdi
+ 1221 0a79 E882F5FF call CipherVecIn
+ 1221 FF
+ 1222 0a7e F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1222 D0
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec ^= cv;
+ 1223 .loc 1 544 0
+ 1224 0a83 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1224 D0
+ 1225 0a88 F30F6F4D movdqu -32(%rbp), %xmm1
+ 1225 E0
+ 1226 0a8d 660FEFC1 pxor %xmm1, %xmm0
+ 1227 0a91 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1227 E0
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (ivec, pout);
+ 1228 .loc 1 545 0
+ 1229 0a96 488B45F8 movq -8(%rbp), %rax
+ 1230 0a9a F30F6F45 movdqu -32(%rbp), %xmm0
+ 1230 E0
+ 1231 0a9f 4889C7 movq %rax, %rdi
+ 1232 0aa2 E878F5FF call CipherVecOut
+ 1232 FF
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1233 .loc 1 540 0
+ 1234 0aa7 488B45C8 movq -56(%rbp), %rax
+ 1235 0aab 8B4004 movl 4(%rax), %eax
+ 1236 0aae 89C0 mov %eax, %eax
+ 1237 0ab0 480145F0 addq %rax, -16(%rbp)
+ 1238 0ab4 488B45C8 movq -56(%rbp), %rax
+ 1239 0ab8 8B4004 movl 4(%rax), %eax
+ 1240 0abb 89C0 mov %eax, %eax
+ 1241 0abd 480145F8 addq %rax, -8(%rbp)
+ 1242 .L83:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1243 .loc 1 539 0
+ 1244 0ac1 837DB400 cmpl $0, -76(%rbp)
+ 1245 0ac5 0F95C0 setne %al
+ 1246 0ac8 836DB401 subl $1, -76(%rbp)
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1247 .loc 1 538 0
+ 1248 0acc 84C0 testb %al, %al
+ 1249 0ace 758C jne .L84
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1250 .loc 1 548 0
+
GAS LISTING /tmp/ccXzRABk.s page 37
+
+
+ 1251 0ad0 488B45C8 movq -56(%rbp), %rax
+ 1252 0ad4 488B4028 movq 40(%rax), %rax
+ 1253 0ad8 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1253 E0
+ 1254 0add F30F7F00 movdqu %xmm0, (%rax)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1255 .loc 1 550 0
+ 1256 0ae1 B8000000 movl $0, %eax
+ 1256 00
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1257 .loc 1 554 0
+ 1258 0ae6 C9 leave
+ 1259 0ae7 C3 ret
+ 1260 .cfi_endproc
+ 1261 .LFE611:
+ 1262 .size KCipherVecRegEncryptCfb, .-KCipherVecRegEncryptCfb
+ 1263 .type KCipherVecRegDecryptCfb, @function
+ 1264 KCipherVecRegDecryptCfb:
+ 1265 .LFB612:
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1266 .loc 1 559 0
+ 1267 .cfi_startproc
+ 1268 0ae8 55 pushq %rbp
+ 1269 .LCFI44:
+ 1270 .cfi_def_cfa_offset 16
+ 1271 0ae9 4889E5 movq %rsp, %rbp
+ 1272 .cfi_offset 6, -16
+ 1273 .LCFI45:
+ 1274 .cfi_def_cfa_register 6
+ 1275 0aec 4883EC50 subq $80, %rsp
+ 1276 0af0 48897DC8 movq %rdi, -56(%rbp)
+ 1277 0af4 488975C0 movq %rsi, -64(%rbp)
+ 1278 0af8 488955B8 movq %rdx, -72(%rbp)
+ 1279 0afc 894DB4 movl %ecx, -76(%rbp)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1280 .loc 1 566 0
+ 1281 0aff 488B45C8 movq -56(%rbp), %rax
+ 1282 0b03 488B4028 movq 40(%rax), %rax
+ 1283 0b07 660F6F00 movdqa (%rax), %xmm0
+ 1284 0b0b F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1284 E0
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+
GAS LISTING /tmp/ccXzRABk.s page 38
+
+
+ 1285 .loc 1 568 0
+ 1286 0b10 488B45C0 movq -64(%rbp), %rax
+ 1287 0b14 488945F0 movq %rax, -16(%rbp)
+ 1288 0b18 488B45B8 movq -72(%rbp), %rax
+ 1289 0b1c 488945F8 movq %rax, -8(%rbp)
+ 1290 0b20 EB65 jmp .L87
+ 1291 .L88:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CMEMBER(EncryptV1)(self, ivec);
+ 1292 .loc 1 572 0
+ 1293 0b22 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1293 E0
+ 1294 0b27 488B45C8 movq -56(%rbp), %rax
+ 1295 0b2b 4889C7 movq %rax, %rdi
+ 1296 0b2e E807F9FF call KCipherVecRegEncryptV1
+ 1296 FF
+ 1297 0b33 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1297 D0
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CipherVecIn (pin);
+ 1298 .loc 1 573 0
+ 1299 0b38 488B45F0 movq -16(%rbp), %rax
+ 1300 0b3c 4889C7 movq %rax, %rdi
+ 1301 0b3f E8BCF4FF call CipherVecIn
+ 1301 FF
+ 1302 0b44 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1302 E0
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv ^= ivec;
+ 1303 .loc 1 574 0
+ 1304 0b49 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1304 E0
+ 1305 0b4e F30F6F4D movdqu -48(%rbp), %xmm1
+ 1305 D0
+ 1306 0b53 660FEFC1 pxor %xmm1, %xmm0
+ 1307 0b57 F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1307 D0
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (cv, pout);
+ 1308 .loc 1 575 0
+ 1309 0b5c 488B45F8 movq -8(%rbp), %rax
+ 1310 0b60 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1310 D0
+ 1311 0b65 4889C7 movq %rax, %rdi
+ 1312 0b68 E8B2F4FF call CipherVecOut
+ 1312 FF
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1313 .loc 1 570 0
+ 1314 0b6d 488B45C8 movq -56(%rbp), %rax
+ 1315 0b71 8B4004 movl 4(%rax), %eax
+ 1316 0b74 89C0 mov %eax, %eax
+ 1317 0b76 480145F0 addq %rax, -16(%rbp)
+ 1318 0b7a 488B45C8 movq -56(%rbp), %rax
+ 1319 0b7e 8B4004 movl 4(%rax), %eax
+ 1320 0b81 89C0 mov %eax, %eax
+ 1321 0b83 480145F8 addq %rax, -8(%rbp)
+ 1322 .L87:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+
GAS LISTING /tmp/ccXzRABk.s page 39
+
+
+ 1323 .loc 1 569 0
+ 1324 0b87 837DB400 cmpl $0, -76(%rbp)
+ 1325 0b8b 0F95C0 setne %al
+ 1326 0b8e 836DB401 subl $1, -76(%rbp)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1327 .loc 1 568 0
+ 1328 0b92 84C0 testb %al, %al
+ 1329 0b94 758C jne .L88
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1330 .loc 1 578 0
+ 1331 0b96 488B45C8 movq -56(%rbp), %rax
+ 1332 0b9a 488B4028 movq 40(%rax), %rax
+ 1333 0b9e F30F6F45 movdqu -32(%rbp), %xmm0
+ 1333 E0
+ 1334 0ba3 F30F7F00 movdqu %xmm0, (%rax)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1335 .loc 1 580 0
+ 1336 0ba7 B8000000 movl $0, %eax
+ 1336 00
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1337 .loc 1 584 0
+ 1338 0bac C9 leave
+ 1339 0bad C3 ret
+ 1340 .cfi_endproc
+ 1341 .LFE612:
+ 1342 .size KCipherVecRegDecryptCfb, .-KCipherVecRegDecryptCfb
+ 1343 .type KCipherVecRegEncryptOfb, @function
+ 1344 KCipherVecRegEncryptOfb:
+ 1345 .LFB613:
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Output Feedback
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = PT ^ (FB = ENC (IV, EK))
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = CT ^ (FB = DEC (IV, DK))
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1346 .loc 1 594 0
+ 1347 .cfi_startproc
+ 1348 0bae 55 pushq %rbp
+ 1349 .LCFI46:
+ 1350 .cfi_def_cfa_offset 16
+ 1351 0baf 4889E5 movq %rsp, %rbp
+ 1352 .cfi_offset 6, -16
+ 1353 .LCFI47:
+ 1354 .cfi_def_cfa_register 6
+ 1355 0bb2 4883EC50 subq $80, %rsp
+ 1356 0bb6 48897DC8 movq %rdi, -56(%rbp)
+ 1357 0bba 488975C0 movq %rsi, -64(%rbp)
+
GAS LISTING /tmp/ccXzRABk.s page 40
+
+
+ 1358 0bbe 488955B8 movq %rdx, -72(%rbp)
+ 1359 0bc2 894DB4 movl %ecx, -76(%rbp)
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec cv;
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVec ivec;
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const uint8_t * pin;
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** uint8_t * pout;
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1360 .loc 1 601 0
+ 1361 0bc5 488B45C8 movq -56(%rbp), %rax
+ 1362 0bc9 488B4028 movq 40(%rax), %rax
+ 1363 0bcd 660F6F00 movdqa (%rax), %xmm0
+ 1364 0bd1 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1364 E0
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1365 .loc 1 603 0
+ 1366 0bd6 488B45C0 movq -64(%rbp), %rax
+ 1367 0bda 488945F0 movq %rax, -16(%rbp)
+ 1368 0bde 488B45B8 movq -72(%rbp), %rax
+ 1369 0be2 488945F8 movq %rax, -8(%rbp)
+ 1370 0be6 EB65 jmp .L91
+ 1371 .L92:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** ivec = CMEMBER(EncryptV1)(self, ivec);
+ 1372 .loc 1 607 0
+ 1373 0be8 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1373 E0
+ 1374 0bed 488B45C8 movq -56(%rbp), %rax
+ 1375 0bf1 4889C7 movq %rax, %rdi
+ 1376 0bf4 E841F8FF call KCipherVecRegEncryptV1
+ 1376 FF
+ 1377 0bf9 F30F7F45 movdqu %xmm0, -32(%rbp)
+ 1377 E0
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv = CipherVecIn (pin);
+ 1378 .loc 1 608 0
+ 1379 0bfe 488B45F0 movq -16(%rbp), %rax
+ 1380 0c02 4889C7 movq %rax, %rdi
+ 1381 0c05 E8F6F3FF call CipherVecIn
+ 1381 FF
+ 1382 0c0a F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1382 D0
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** cv ^= ivec;
+ 1383 .loc 1 609 0
+ 1384 0c0f F30F6F45 movdqu -32(%rbp), %xmm0
+ 1384 E0
+ 1385 0c14 F30F6F4D movdqu -48(%rbp), %xmm1
+ 1385 D0
+ 1386 0c19 660FEFC1 pxor %xmm1, %xmm0
+ 1387 0c1d F30F7F45 movdqu %xmm0, -48(%rbp)
+ 1387 D0
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherVecOut (cv, pout);
+ 1388 .loc 1 610 0
+ 1389 0c22 488B45F8 movq -8(%rbp), %rax
+
GAS LISTING /tmp/ccXzRABk.s page 41
+
+
+ 1390 0c26 F30F6F45 movdqu -48(%rbp), %xmm0
+ 1390 D0
+ 1391 0c2b 4889C7 movq %rax, %rdi
+ 1392 0c2e E8ECF3FF call CipherVecOut
+ 1392 FF
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1393 .loc 1 605 0
+ 1394 0c33 488B45C8 movq -56(%rbp), %rax
+ 1395 0c37 8B4004 movl 4(%rax), %eax
+ 1396 0c3a 89C0 mov %eax, %eax
+ 1397 0c3c 480145F0 addq %rax, -16(%rbp)
+ 1398 0c40 488B45C8 movq -56(%rbp), %rax
+ 1399 0c44 8B4004 movl 4(%rax), %eax
+ 1400 0c47 89C0 mov %eax, %eax
+ 1401 0c49 480145F8 addq %rax, -8(%rbp)
+ 1402 .L91:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** block_count --;
+ 1403 .loc 1 604 0
+ 1404 0c4d 837DB400 cmpl $0, -76(%rbp)
+ 1405 0c51 0F95C0 setne %al
+ 1406 0c54 836DB401 subl $1, -76(%rbp)
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** for ((pin = in), (pout = out);
+ 1407 .loc 1 603 0
+ 1408 0c58 84C0 testb %al, %al
+ 1409 0c5a 758C jne .L92
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1410 .loc 1 613 0
+ 1411 0c5c 488B45C8 movq -56(%rbp), %rax
+ 1412 0c60 488B4028 movq 40(%rax), %rax
+ 1413 0c64 F30F6F45 movdqu -32(%rbp), %xmm0
+ 1413 E0
+ 1414 0c69 F30F7F00 movdqu %xmm0, (%rax)
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1415 .loc 1 615 0
+ 1416 0c6d B8000000 movl $0, %eax
+ 1416 00
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1417 .loc 1 619 0
+ 1418 0c72 C9 leave
+ 1419 0c73 C3 ret
+ 1420 .cfi_endproc
+ 1421 .LFE613:
+ 1422 .size KCipherVecRegEncryptOfb, .-KCipherVecRegEncryptOfb
+ 1423 .type KCipherVecRegDecryptOfb, @function
+ 1424 KCipherVecRegDecryptOfb:
+ 1425 .LFB614:
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccXzRABk.s page 42
+
+
+ 1426 .loc 1 624 0
+ 1427 .cfi_startproc
+ 1428 0c74 55 pushq %rbp
+ 1429 .LCFI48:
+ 1430 .cfi_def_cfa_offset 16
+ 1431 0c75 4889E5 movq %rsp, %rbp
+ 1432 .cfi_offset 6, -16
+ 1433 .LCFI49:
+ 1434 .cfi_def_cfa_register 6
+ 1435 0c78 53 pushq %rbx
+ 1436 0c79 4883EC28 subq $40, %rsp
+ 1437 0c7d 48897DE8 movq %rdi, -24(%rbp)
+ 1438 0c81 488975E0 movq %rsi, -32(%rbp)
+ 1439 0c85 488955D8 movq %rdx, -40(%rbp)
+ 1440 0c89 894DD4 movl %ecx, -44(%rbp)
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return CMEMBER(EncryptOfb)(self, in, out, block_count);
+ 1441 .loc 1 625 0
+ 1442 0c8c 8B4DD4 movl -44(%rbp), %ecx
+ 1443 0c8f 488B55D8 movq -40(%rbp), %rdx
+ 1444 0c93 488B5DE0 movq -32(%rbp), %rbx
+ 1445 .cfi_offset 3, -24
+ 1446 0c97 488B45E8 movq -24(%rbp), %rax
+ 1447 0c9b 4889DE movq %rbx, %rsi
+ 1448 0c9e 4889C7 movq %rax, %rdi
+ 1449 0ca1 E808FFFF call KCipherVecRegEncryptOfb
+ 1449 FF
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1450 .loc 1 626 0
+ 1451 0ca6 4883C428 addq $40, %rsp
+ 1452 0caa 5B popq %rbx
+ 1453 0cab C9 leave
+ 1454 0cac C3 ret
+ 1455 .cfi_endproc
+ 1456 .LFE614:
+ 1457 .size KCipherVecRegDecryptOfb, .-KCipherVecRegDecryptOfb
+ 1458 .type KCipherVecRegEncryptCtr, @function
+ 1459 KCipherVecRegEncryptCtr:
+ 1460 .LFB615:
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* Counter
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * IV is a nonce and not re-used as FB
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * CT = PT ^ ENC (N, EK)
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * PT = CT ^ ENC (N, DK)
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * Note decrypt is encrypt.
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** * nonce is a function that given an iv generates the next iv
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** */
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1461 .loc 1 638 0
+ 1462 .cfi_startproc
+ 1463 0cad 55 pushq %rbp
+ 1464 .LCFI50:
+ 1465 .cfi_def_cfa_offset 16
+ 1466 0cae 4889E5 movq %rsp, %rbp
+ 1467 .cfi_offset 6, -16
+
GAS LISTING /tmp/ccXzRABk.s page 43
+
+
+ 1468 .LCFI51:
+ 1469 .cfi_def_cfa_register 6
+ 1470 0cb1 4883EC20 subq $32, %rsp
+ 1471 0cb5 48897DF8 movq %rdi, -8(%rbp)
+ 1472 0cb9 488975F0 movq %rsi, -16(%rbp)
+ 1473 0cbd 488955E8 movq %rdx, -24(%rbp)
+ 1474 0cc1 894DE4 movl %ecx, -28(%rbp)
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1475 .loc 1 639 0
+ 1476 0cc4 B97F0200 movl $639, %ecx
+ 1476 00
+ 1477 0cc9 488D1500 leaq __func__.7600(%rip), %rdx
+ 1477 000000
+ 1478 0cd0 488D3500 leaq .LC0(%rip), %rsi
+ 1478 000000
+ 1479 0cd7 BF030509 movl $-2029452029, %edi
+ 1479 87
+ 1480 0cdc E8000000 call SetRCFileFuncLine at PLT
+ 1480 00
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1481 .loc 1 640 0
+ 1482 0ce1 C9 leave
+ 1483 0ce2 C3 ret
+ 1484 .cfi_endproc
+ 1485 .LFE615:
+ 1486 .size KCipherVecRegEncryptCtr, .-KCipherVecRegEncryptCtr
+ 1487 .type KCipherVecRegDecryptCtr, @function
+ 1488 KCipherVecRegDecryptCtr:
+ 1489 .LFB616:
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1490 .loc 1 645 0
+ 1491 .cfi_startproc
+ 1492 0ce3 55 pushq %rbp
+ 1493 .LCFI52:
+ 1494 .cfi_def_cfa_offset 16
+ 1495 0ce4 4889E5 movq %rsp, %rbp
+ 1496 .cfi_offset 6, -16
+ 1497 .LCFI53:
+ 1498 .cfi_def_cfa_register 6
+ 1499 0ce7 4883EC20 subq $32, %rsp
+ 1500 0ceb 48897DF8 movq %rdi, -8(%rbp)
+ 1501 0cef 488975F0 movq %rsi, -16(%rbp)
+ 1502 0cf3 488955E8 movq %rdx, -24(%rbp)
+ 1503 0cf7 894DE4 movl %ecx, -28(%rbp)
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1504 .loc 1 646 0
+ 1505 0cfa B9860200 movl $646, %ecx
+ 1505 00
+ 1506 0cff 488D1500 leaq __func__.7610(%rip), %rdx
+ 1506 000000
+ 1507 0d06 488D3500 leaq .LC0(%rip), %rsi
+ 1507 000000
+ 1508 0d0d BF030509 movl $-2029452029, %edi
+
GAS LISTING /tmp/ccXzRABk.s page 44
+
+
+ 1508 87
+ 1509 0d12 E8000000 call SetRCFileFuncLine at PLT
+ 1509 00
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1510 .loc 1 647 0
+ 1511 0d17 C9 leave
+ 1512 0d18 C3 ret
+ 1513 .cfi_endproc
+ 1514 .LFE616:
+ 1515 .size KCipherVecRegDecryptCtr, .-KCipherVecRegDecryptCtr
+ 1516 .section .data.rel.local,"aw", at progbits
+ 1517 .align 32
+ 1518 .type KCipherVecReg_vt_v1, @object
+ 1519 .size KCipherVecReg_vt_v1, 176
+ 1520 KCipherVecReg_vt_v1:
+ 1521 0000 01000000 .long 1
+ 1522 0004 00000000 .long 0
+ 1523 0008 00000000 .quad KCipherVecRegDestroy
+ 1523 00000000
+ 1524 0010 00000000 .quad KCipherVecRegSetEncryptKey
+ 1524 00000000
+ 1525 0018 00000000 .quad KCipherVecRegSetDecryptKey
+ 1525 00000000
+ 1526 0020 00000000 .quad KCipherVecRegSetEncryptIvec
+ 1526 00000000
+ 1527 0028 00000000 .quad KCipherVecRegSetDecryptIvec
+ 1527 00000000
+ 1528 0030 00000000 .quad KCipherVecRegSetEncryptCounterFunc
+ 1528 00000000
+ 1529 0038 00000000 .quad KCipherVecRegSetDecryptCounterFunc
+ 1529 00000000
+ 1530 0040 00000000 .quad KCipherVecRegEncrypt
+ 1530 00000000
+ 1531 0048 00000000 .quad KCipherVecRegDecrypt
+ 1531 00000000
+ 1532 0050 00000000 .quad KCipherVecRegEncryptEcb
+ 1532 00000000
+ 1533 0058 00000000 .quad KCipherVecRegDecryptEcb
+ 1533 00000000
+ 1534 0060 00000000 .quad KCipherVecRegEncryptCbc
+ 1534 00000000
+ 1535 0068 00000000 .quad KCipherVecRegDecryptCbc
+ 1535 00000000
+ 1536 0070 00000000 .quad KCipherVecRegEncryptPcbc
+ 1536 00000000
+ 1537 0078 00000000 .quad KCipherVecRegDecryptPcbc
+ 1537 00000000
+ 1538 0080 00000000 .quad KCipherVecRegEncryptCfb
+ 1538 00000000
+ 1539 0088 00000000 .quad KCipherVecRegDecryptCfb
+ 1539 00000000
+ 1540 0090 00000000 .quad KCipherVecRegEncryptOfb
+ 1540 00000000
+ 1541 0098 00000000 .quad KCipherVecRegDecryptOfb
+ 1541 00000000
+ 1542 00a0 00000000 .quad KCipherVecRegEncryptCtr
+ 1542 00000000
+
GAS LISTING /tmp/ccXzRABk.s page 45
+
+
+ 1543 00a8 00000000 .quad KCipherVecRegDecryptCtr
+ 1543 00000000
+ 1544 .text
+ 1545 .type KCipherVecRegAllocAes, @function
+ 1546 KCipherVecRegAllocAes:
+ 1547 .LFB617:
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct KCipher_vt_v1 CMEMBER(_vt_v1) =
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** { 1, 0 },
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(Destroy),
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetEncryptKey),
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetDecryptKey),
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetEncryptIvec),
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetDecryptIvec),
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetEncryptCounterFunc),
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(SetDecryptCounterFunc),
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(Encrypt),
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(Decrypt),
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptEcb),
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptEcb),
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptCbc),
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptCbc),
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptPcbc),
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptPcbc),
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptCfb),
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptCfb),
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptOfb),
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptOfb),
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(EncryptCtr),
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(DecryptCtr)
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocAes)(CIPHER_IMPL ** pobj,
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1548 .loc 1 681 0
+ 1549 .cfi_startproc
+ 1550 0d19 55 pushq %rbp
+ 1551 .LCFI54:
+ 1552 .cfi_def_cfa_offset 16
+ 1553 0d1a 4889E5 movq %rsp, %rbp
+ 1554 .cfi_offset 6, -16
+ 1555 .LCFI55:
+ 1556 .cfi_def_cfa_register 6
+ 1557 0d1d 4883EC20 subq $32, %rsp
+ 1558 0d21 48897DE8 movq %rdi, -24(%rbp)
+ 1559 0d25 488975E0 movq %rsi, -32(%rbp)
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherAes * obj;
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** obj = calloc (1, sizeof (*obj));
+ 1560 .loc 1 684 0
+ 1561 0d29 BE700200 movl $624, %esi
+
GAS LISTING /tmp/ccXzRABk.s page 46
+
+
+ 1561 00
+ 1562 0d2e BF010000 movl $1, %edi
+ 1562 00
+ 1563 0d33 E8000000 call calloc at PLT
+ 1563 00
+ 1564 0d38 488945F8 movq %rax, -8(%rbp)
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *pobj = (CIPHER_IMPL*)obj;
+ 1565 .loc 1 685 0
+ 1566 0d3c 488B55F8 movq -8(%rbp), %rdx
+ 1567 0d40 488B45E8 movq -24(%rbp), %rax
+ 1568 0d44 488910 movq %rdx, (%rax)
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1569 .loc 1 687 0
+ 1570 0d47 48837DF8 cmpq $0, -8(%rbp)
+ 1570 00
+ 1571 0d4c 751F jne .L101
+ 1572 0d4e B9AF0200 movl $687, %ecx
+ 1572 00
+ 1573 0d53 488D1500 leaq __func__.7620(%rip), %rdx
+ 1573 000000
+ 1574 0d5a 488D3500 leaq .LC0(%rip), %rsi
+ 1574 000000
+ 1575 0d61 BF539000 movl $-2030006189, %edi
+ 1575 87
+ 1576 0d66 E8000000 call SetRCFileFuncLine at PLT
+ 1576 00
+ 1577 0d6b EB05 jmp .L102
+ 1578 .L101:
+ 1579 0d6d B8000000 movl $0, %eax
+ 1579 00
+ 1580 .L102:
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1581 .loc 1 688 0
+ 1582 0d72 C9 leave
+ 1583 0d73 C3 ret
+ 1584 .cfi_endproc
+ 1585 .LFE617:
+ 1586 .size KCipherVecRegAllocAes, .-KCipherVecRegAllocAes
+ 1587 .type KCipherVecRegInitAes, @function
+ 1588 KCipherVecRegInitAes:
+ 1589 .LFB618:
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitAes) (CIPHER_IMPL * self,
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1590 .loc 1 694 0
+ 1591 .cfi_startproc
+ 1592 0d74 55 pushq %rbp
+ 1593 .LCFI56:
+ 1594 .cfi_def_cfa_offset 16
+ 1595 0d75 4889E5 movq %rsp, %rbp
+ 1596 .cfi_offset 6, -16
+ 1597 .LCFI57:
+ 1598 .cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccXzRABk.s page 47
+
+
+ 1599 0d78 4883EC20 subq $32, %rsp
+ 1600 0d7c 48897DE8 movq %rdi, -24(%rbp)
+ 1601 0d80 488975E0 movq %rsi, -32(%rbp)
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipher * dad = &self->dad;
+ 1602 .loc 1 695 0
+ 1603 0d84 488B45E8 movq -24(%rbp), %rax
+ 1604 0d88 488945F0 movq %rax, -16(%rbp)
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherAes * aes = (struct CipherAes*)self;
+ 1605 .loc 1 696 0
+ 1606 0d8c 488B45E8 movq -24(%rbp), %rax
+ 1607 0d90 488945F8 movq %rax, -8(%rbp)
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipherInit (dad, sizeof (CipherVec),
+ 1608 .loc 1 698 0
+ 1609 0d94 488B45F0 movq -16(%rbp), %rax
+ 1610 0d98 488B1500 movq KCipherVecRegClassName at GOTPCREL(%rip), %rdx
+ 1610 000000
+ 1611 0d9f 4889D1 movq %rdx, %rcx
+ 1612 0da2 488D1500 leaq KCipherVecReg_vt_v1(%rip), %rdx
+ 1612 000000
+ 1613 0da9 BE100000 movl $16, %esi
+ 1613 00
+ 1614 0dae 4889C7 movq %rax, %rdi
+ 1615 0db1 E8000000 call KCipherInit at PLT
+ 1615 00
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(ClassName));
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_key = &aes->e_key;
+ 1616 .loc 1 702 0
+ 1617 0db6 488B45F8 movq -8(%rbp), %rax
+ 1618 0dba 488D5050 leaq 80(%rax), %rdx
+ 1619 0dbe 488B45F0 movq -16(%rbp), %rax
+ 1620 0dc2 48895018 movq %rdx, 24(%rax)
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_key = &aes->d_key;
+ 1621 .loc 1 703 0
+ 1622 0dc6 488B45F8 movq -8(%rbp), %rax
+ 1623 0dca 488D9050 leaq 336(%rax), %rdx
+ 1623 010000
+ 1624 0dd1 488B45F0 movq -16(%rbp), %rax
+ 1625 0dd5 48895020 movq %rdx, 32(%rax)
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_ivec = &aes->e_ivec;
+ 1626 .loc 1 704 0
+ 1627 0dd9 488B45F8 movq -8(%rbp), %rax
+ 1628 0ddd 488D9050 leaq 592(%rax), %rdx
+ 1628 020000
+ 1629 0de4 488B45F0 movq -16(%rbp), %rax
+ 1630 0de8 48895028 movq %rdx, 40(%rax)
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_ivec = &aes->d_ivec;
+ 1631 .loc 1 705 0
+ 1632 0dec 488B45F8 movq -8(%rbp), %rax
+ 1633 0df0 488D9060 leaq 608(%rax), %rdx
+ 1633 020000
+ 1634 0df7 488B45F0 movq -16(%rbp), %rax
+ 1635 0dfb 48895030 movq %rdx, 48(%rax)
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher = &block_cipher->vec;
+
GAS LISTING /tmp/ccXzRABk.s page 48
+
+
+ 1636 .loc 1 707 0
+ 1637 0dff 488B55E0 movq -32(%rbp), %rdx
+ 1638 0e03 488B45E8 movq -24(%rbp), %rax
+ 1639 0e07 48895048 movq %rdx, 72(%rax)
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1640 .loc 1 709 0
+ 1641 0e0b B8000000 movl $0, %eax
+ 1641 00
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1642 .loc 1 710 0
+ 1643 0e10 C9 leave
+ 1644 0e11 C3 ret
+ 1645 .cfi_endproc
+ 1646 .LFE618:
+ 1647 .size KCipherVecRegInitAes, .-KCipherVecRegInitAes
+ 1648 .type KCipherVecRegAllocNull, @function
+ 1649 KCipherVecRegAllocNull:
+ 1650 .LFB619:
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocNull)(CIPHER_IMPL ** pobj,
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1651 .loc 1 716 0
+ 1652 .cfi_startproc
+ 1653 0e12 55 pushq %rbp
+ 1654 .LCFI58:
+ 1655 .cfi_def_cfa_offset 16
+ 1656 0e13 4889E5 movq %rsp, %rbp
+ 1657 .cfi_offset 6, -16
+ 1658 .LCFI59:
+ 1659 .cfi_def_cfa_register 6
+ 1660 0e16 4883EC20 subq $32, %rsp
+ 1661 0e1a 48897DE8 movq %rdi, -24(%rbp)
+ 1662 0e1e 488975E0 movq %rsi, -32(%rbp)
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherNull * obj;
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** obj = calloc (1, sizeof (*obj));
+ 1663 .loc 1 719 0
+ 1664 0e22 BE700000 movl $112, %esi
+ 1664 00
+ 1665 0e27 BF010000 movl $1, %edi
+ 1665 00
+ 1666 0e2c E8000000 call calloc at PLT
+ 1666 00
+ 1667 0e31 488945F8 movq %rax, -8(%rbp)
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *pobj = (CIPHER_IMPL*)obj;
+ 1668 .loc 1 720 0
+ 1669 0e35 488B55F8 movq -8(%rbp), %rdx
+ 1670 0e39 488B45E8 movq -24(%rbp), %rax
+ 1671 0e3d 488910 movq %rdx, (%rax)
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1672 .loc 1 722 0
+ 1673 0e40 48837DF8 cmpq $0, -8(%rbp)
+
GAS LISTING /tmp/ccXzRABk.s page 49
+
+
+ 1673 00
+ 1674 0e45 751F jne .L107
+ 1675 0e47 B9D20200 movl $722, %ecx
+ 1675 00
+ 1676 0e4c 488D1500 leaq __func__.7647(%rip), %rdx
+ 1676 000000
+ 1677 0e53 488D3500 leaq .LC0(%rip), %rsi
+ 1677 000000
+ 1678 0e5a BF539000 movl $-2030006189, %edi
+ 1678 87
+ 1679 0e5f E8000000 call SetRCFileFuncLine at PLT
+ 1679 00
+ 1680 0e64 EB05 jmp .L108
+ 1681 .L107:
+ 1682 0e66 B8000000 movl $0, %eax
+ 1682 00
+ 1683 .L108:
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1684 .loc 1 723 0
+ 1685 0e6b C9 leave
+ 1686 0e6c C3 ret
+ 1687 .cfi_endproc
+ 1688 .LFE619:
+ 1689 .size KCipherVecRegAllocNull, .-KCipherVecRegAllocNull
+ 1690 .type KCipherVecRegInitNull, @function
+ 1691 KCipherVecRegInitNull:
+ 1692 .LFB620:
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitNull) (CIPHER_IMPL * self,
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const KBlockCipher * block_cipher)
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1693 .loc 1 729 0
+ 1694 .cfi_startproc
+ 1695 0e6d 55 pushq %rbp
+ 1696 .LCFI60:
+ 1697 .cfi_def_cfa_offset 16
+ 1698 0e6e 4889E5 movq %rsp, %rbp
+ 1699 .cfi_offset 6, -16
+ 1700 .LCFI61:
+ 1701 .cfi_def_cfa_register 6
+ 1702 0e71 4883EC20 subq $32, %rsp
+ 1703 0e75 48897DE8 movq %rdi, -24(%rbp)
+ 1704 0e79 488975E0 movq %rsi, -32(%rbp)
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipher * dad = &self->dad;
+ 1705 .loc 1 730 0
+ 1706 0e7d 488B45E8 movq -24(%rbp), %rax
+ 1707 0e81 488945F0 movq %rax, -16(%rbp)
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CipherNull * null = (CipherNull*)self;
+ 1708 .loc 1 731 0
+ 1709 0e85 488B45E8 movq -24(%rbp), %rax
+ 1710 0e89 488945F8 movq %rax, -8(%rbp)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KCipherInit (dad, sizeof (CipherVec),
+ 1711 .loc 1 733 0
+ 1712 0e8d 488B45F0 movq -16(%rbp), %rax
+
GAS LISTING /tmp/ccXzRABk.s page 50
+
+
+ 1713 0e91 488B1500 movq KCipherVecRegClassName at GOTPCREL(%rip), %rdx
+ 1713 000000
+ 1714 0e98 4889D1 movq %rdx, %rcx
+ 1715 0e9b 488D1500 leaq KCipherVecReg_vt_v1(%rip), %rdx
+ 1715 000000
+ 1716 0ea2 BE100000 movl $16, %esi
+ 1716 00
+ 1717 0ea7 4889C7 movq %rax, %rdi
+ 1718 0eaa E8000000 call KCipherInit at PLT
+ 1718 00
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CMEMBER(ClassName));
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_key = &null->e_ivec;
+ 1719 .loc 1 737 0
+ 1720 0eaf 488B45F8 movq -8(%rbp), %rax
+ 1721 0eb3 488D5050 leaq 80(%rax), %rdx
+ 1722 0eb7 488B45F0 movq -16(%rbp), %rax
+ 1723 0ebb 48895018 movq %rdx, 24(%rax)
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_key = &null->d_ivec;
+ 1724 .loc 1 738 0
+ 1725 0ebf 488B45F8 movq -8(%rbp), %rax
+ 1726 0ec3 488D5060 leaq 96(%rax), %rdx
+ 1727 0ec7 488B45F0 movq -16(%rbp), %rax
+ 1728 0ecb 48895020 movq %rdx, 32(%rax)
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->encrypt_ivec = &null->e_ivec;
+ 1729 .loc 1 739 0
+ 1730 0ecf 488B45F8 movq -8(%rbp), %rax
+ 1731 0ed3 488D5050 leaq 80(%rax), %rdx
+ 1732 0ed7 488B45F0 movq -16(%rbp), %rax
+ 1733 0edb 48895028 movq %rdx, 40(%rax)
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** dad->decrypt_ivec = &null->d_ivec;
+ 1734 .loc 1 740 0
+ 1735 0edf 488B45F8 movq -8(%rbp), %rax
+ 1736 0ee3 488D5060 leaq 96(%rax), %rdx
+ 1737 0ee7 488B45F0 movq -16(%rbp), %rax
+ 1738 0eeb 48895030 movq %rdx, 48(%rax)
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** self->block_cipher = &block_cipher->vec;
+ 1739 .loc 1 742 0
+ 1740 0eef 488B55E0 movq -32(%rbp), %rdx
+ 1741 0ef3 488B45E8 movq -24(%rbp), %rax
+ 1742 0ef7 48895048 movq %rdx, 72(%rax)
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return 0;
+ 1743 .loc 1 744 0
+ 1744 0efb B8000000 movl $0, %eax
+ 1744 00
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1745 .loc 1 745 0
+ 1746 0f00 C9 leave
+ 1747 0f01 C3 ret
+ 1748 .cfi_endproc
+ 1749 .LFE620:
+ 1750 .size KCipherVecRegInitNull, .-KCipherVecRegInitNull
+ 1751 .globl KCipherVecRegMake
+ 1752 .type KCipherVecRegMake, @function
+
GAS LISTING /tmp/ccXzRABk.s page 51
+
+
+ 1753 KCipherVecRegMake:
+ 1754 .LFB621:
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1755 .loc 1 749 0
+ 1756 .cfi_startproc
+ 1757 0f02 55 pushq %rbp
+ 1758 .LCFI62:
+ 1759 .cfi_def_cfa_offset 16
+ 1760 0f03 4889E5 movq %rsp, %rbp
+ 1761 .cfi_offset 6, -16
+ 1762 .LCFI63:
+ 1763 .cfi_def_cfa_register 6
+ 1764 0f06 4883EC30 subq $48, %rsp
+ 1765 0f0a 48897DD8 movq %rdi, -40(%rbp)
+ 1766 0f0e 8975D4 movl %esi, -44(%rbp)
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t rc;
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** KBlockCipher * block_cipher;
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (new_obj == NULL)
+ 1767 .loc 1 753 0
+ 1768 0f11 48837DD8 cmpq $0, -40(%rbp)
+ 1768 00
+ 1769 0f16 7522 jne .L113
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+ 1770 .loc 1 754 0
+ 1771 0f18 B9F20200 movl $754, %ecx
+ 1771 00
+ 1772 0f1d 488D1500 leaq __func__.7675(%rip), %rdx
+ 1772 000000
+ 1773 0f24 488D3500 leaq .LC0(%rip), %rsi
+ 1773 000000
+ 1774 0f2b BF878F00 movl $-2030006393, %edi
+ 1774 87
+ 1775 0f30 E8000000 call SetRCFileFuncLine at PLT
+ 1775 00
+ 1776 0f35 E9280100 jmp .L114
+ 1776 00
+ 1777 .L113:
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *new_obj = NULL;
+ 1778 .loc 1 756 0
+ 1779 0f3a 488B45D8 movq -40(%rbp), %rax
+ 1780 0f3e 48C70000 movq $0, (%rax)
+ 1780 000000
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (type)
+ 1781 .loc 1 758 0
+ 1782 0f45 8B45D4 movl -44(%rbp), %eax
+ 1783 0f48 85C0 testl %eax, %eax
+ 1784 0f4a 7427 je .L116
+ 1785 0f4c 83F801 cmpl $1, %eax
+ 1786 0f4f 7433 je .L117
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+
GAS LISTING /tmp/ccXzRABk.s page 52
+
+
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+ 1787 .loc 1 761 0
+ 1788 0f51 B9F90200 movl $761, %ecx
+ 1788 00
+ 1789 0f56 488D1500 leaq __func__.7675(%rip), %rdx
+ 1789 000000
+ 1790 0f5d 488D3500 leaq .LC0(%rip), %rsi
+ 1790 000000
+ 1791 0f64 BFCA8F00 movl $-2030006326, %edi
+ 1791 87
+ 1792 0f69 E8000000 call SetRCFileFuncLine at PLT
+ 1792 00
+ 1793 0f6e E9EF0000 jmp .L114
+ 1793 00
+ 1794 .L116:
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_null:
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = NULLBCMEMBER(Make)(&block_cipher);
+ 1795 .loc 1 764 0
+ 1796 0f73 488D45F0 leaq -16(%rbp), %rax
+ 1797 0f77 4889C7 movq %rax, %rdi
+ 1798 0f7a E8000000 call KNullBlockCipherVecRegMake at PLT
+ 1798 00
+ 1799 0f7f 8945FC movl %eax, -4(%rbp)
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 1800 .loc 1 765 0
+ 1801 0f82 EB0F jmp .L118
+ 1802 .L117:
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_AES:
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = AESBCMEMBER(Make)(&block_cipher);
+ 1803 .loc 1 768 0
+ 1804 0f84 488D45F0 leaq -16(%rbp), %rax
+ 1805 0f88 4889C7 movq %rax, %rdi
+ 1806 0f8b E8000000 call KAESBlockCipherVecRegMake at PLT
+ 1806 00
+ 1807 0f90 8945FC movl %eax, -4(%rbp)
+ 1808 .L118:
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1809 .loc 1 772 0
+ 1810 0f93 837DFC00 cmpl $0, -4(%rbp)
+ 1811 0f97 0F85C200 jne .L119
+ 1811 0000
+ 1812 .LBB5:
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** CIPHER_IMPL * obj;
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** switch (type)
+ 1813 .loc 1 776 0
+ 1814 0f9d 8B45D4 movl -44(%rbp), %eax
+ 1815 0fa0 85C0 testl %eax, %eax
+ 1816 0fa2 740A je .L120
+ 1817 0fa4 83F801 cmpl $1, %eax
+ 1818 0fa7 745F je .L121
+
GAS LISTING /tmp/ccXzRABk.s page 53
+
+
+ 1819 0fa9 E9B10000 jmp .L119
+ 1819 00
+ 1820 .L120:
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_null:
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(AllocNull) (&obj, block_cipher);
+ 1821 .loc 1 779 0
+ 1822 0fae 488B55F0 movq -16(%rbp), %rdx
+ 1823 0fb2 488D45E8 leaq -24(%rbp), %rax
+ 1824 0fb6 4889D6 movq %rdx, %rsi
+ 1825 0fb9 4889C7 movq %rax, %rdi
+ 1826 0fbc E851FEFF call KCipherVecRegAllocNull
+ 1826 FF
+ 1827 0fc1 8945FC movl %eax, -4(%rbp)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1828 .loc 1 780 0
+ 1829 0fc4 837DFC00 cmpl $0, -4(%rbp)
+ 1830 0fc8 0F859000 jne .L126
+ 1830 0000
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(InitNull) (obj, block_cipher);
+ 1831 .loc 1 782 0
+ 1832 0fce 488B55F0 movq -16(%rbp), %rdx
+ 1833 0fd2 488B45E8 movq -24(%rbp), %rax
+ 1834 0fd6 4889D6 movq %rdx, %rsi
+ 1835 0fd9 4889C7 movq %rax, %rdi
+ 1836 0fdc E88CFEFF call KCipherVecRegInitNull
+ 1836 FF
+ 1837 0fe1 8945FC movl %eax, -4(%rbp)
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1838 .loc 1 783 0
+ 1839 0fe4 837DFC00 cmpl $0, -4(%rbp)
+ 1840 0fe8 7510 jne .L123
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *new_obj = (KCipher*)obj;
+ 1841 .loc 1 784 0
+ 1842 0fea 488B45E8 movq -24(%rbp), %rax
+ 1843 0fee 4889C2 movq %rax, %rdx
+ 1844 0ff1 488B45D8 movq -40(%rbp), %rax
+ 1845 0ff5 488910 movq %rdx, (%rax)
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** else
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (obj);
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 1846 .loc 1 788 0
+ 1847 0ff8 EB65 jmp .L119
+ 1848 .L123:
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (obj);
+ 1849 .loc 1 786 0
+ 1850 0ffa 488B45E8 movq -24(%rbp), %rax
+ 1851 0ffe 4889C7 movq %rax, %rdi
+ 1852 1001 E8000000 call free at PLT
+ 1852 00
+ 1853 .loc 1 788 0
+ 1854 1006 EB57 jmp .L119
+ 1855 .L121:
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** case kcipher_AES:
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(AllocAes) (&obj, block_cipher);
+
GAS LISTING /tmp/ccXzRABk.s page 54
+
+
+ 1856 .loc 1 790 0
+ 1857 1008 488B55F0 movq -16(%rbp), %rdx
+ 1858 100c 488D45E8 leaq -24(%rbp), %rax
+ 1859 1010 4889D6 movq %rdx, %rsi
+ 1860 1013 4889C7 movq %rax, %rdi
+ 1861 1016 E8FEFCFF call KCipherVecRegAllocAes
+ 1861 FF
+ 1862 101b 8945FC movl %eax, -4(%rbp)
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1863 .loc 1 791 0
+ 1864 101e 837DFC00 cmpl $0, -4(%rbp)
+ 1865 1022 753B jne .L119
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc = CMEMBER(InitAes) (obj, block_cipher);
+ 1866 .loc 1 793 0
+ 1867 1024 488B55F0 movq -16(%rbp), %rdx
+ 1868 1028 488B45E8 movq -24(%rbp), %rax
+ 1869 102c 4889D6 movq %rdx, %rsi
+ 1870 102f 4889C7 movq %rax, %rdi
+ 1871 1032 E83DFDFF call KCipherVecRegInitAes
+ 1871 FF
+ 1872 1037 8945FC movl %eax, -4(%rbp)
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** if (rc == 0)
+ 1873 .loc 1 794 0
+ 1874 103a 837DFC00 cmpl $0, -4(%rbp)
+ 1875 103e 7510 jne .L124
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** *new_obj = (KCipher*)obj;
+ 1876 .loc 1 795 0
+ 1877 1040 488B45E8 movq -24(%rbp), %rax
+ 1878 1044 4889C2 movq %rax, %rdx
+ 1879 1047 488B45D8 movq -40(%rbp), %rax
+ 1880 104b 488910 movq %rdx, (%rax)
+ 1881 104e EB0F jmp .L119
+ 1882 .L124:
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** else
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** free (obj);
+ 1883 .loc 1 797 0
+ 1884 1050 488B45E8 movq -24(%rbp), %rax
+ 1885 1054 4889C7 movq %rax, %rdi
+ 1886 1057 E8000000 call free at PLT
+ 1886 00
+ 1887 105c EB01 jmp .L119
+ 1888 .L126:
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 1889 .loc 1 788 0
+ 1890 105e 90 nop
+ 1891 .L119:
+ 1892 .LBE5:
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** default:
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* can't really get here */
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** break;
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** return rc;
+ 1893 .loc 1 804 0
+ 1894 105f 8B45FC movl -4(%rbp), %eax
+
GAS LISTING /tmp/ccXzRABk.s page 55
+
+
+ 1895 .L114:
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1896 .loc 1 805 0
+ 1897 1062 C9 leave
+ 1898 1063 C3 ret
+ 1899 .cfi_endproc
+ 1900 .LFE621:
+ 1901 .size KCipherVecRegMake, .-KCipherVecRegMake
+ 1902 .section .rodata
+ 1903 006e 0000 .align 16
+ 1904 .type __func__.7675, @object
+ 1905 .size __func__.7675, 18
+ 1906 __func__.7675:
+ 1907 0070 4B436970 .string "KCipherVecRegMake"
+ 1907 68657256
+ 1907 65635265
+ 1907 674D616B
+ 1907 6500
+ 1908 0082 00000000 .align 16
+ 1908 00000000
+ 1908 00000000
+ 1908 0000
+ 1909 .type __PRETTY_FUNCTION__.7674, @object
+ 1910 .size __PRETTY_FUNCTION__.7674, 18
+ 1911 __PRETTY_FUNCTION__.7674:
+ 1912 0090 4B436970 .string "KCipherVecRegMake"
+ 1912 68657256
+ 1912 65635265
+ 1912 674D616B
+ 1912 6500
+ 1913 00a2 00000000 .align 16
+ 1913 00000000
+ 1913 00000000
+ 1913 0000
+ 1914 .type __func__.7647, @object
+ 1915 .size __func__.7647, 23
+ 1916 __func__.7647:
+ 1917 00b0 4B436970 .string "KCipherVecRegAllocNull"
+ 1917 68657256
+ 1917 65635265
+ 1917 67416C6C
+ 1917 6F634E75
+ 1918 00c7 00000000 .align 16
+ 1918 00000000
+ 1918 00
+ 1919 .type __PRETTY_FUNCTION__.7646, @object
+ 1920 .size __PRETTY_FUNCTION__.7646, 23
+ 1921 __PRETTY_FUNCTION__.7646:
+ 1922 00d0 4B436970 .string "KCipherVecRegAllocNull"
+ 1922 68657256
+ 1922 65635265
+ 1922 67416C6C
+ 1922 6F634E75
+ 1923 00e7 00000000 .align 16
+ 1923 00000000
+ 1923 00
+ 1924 .type __func__.7620, @object
+
GAS LISTING /tmp/ccXzRABk.s page 56
+
+
+ 1925 .size __func__.7620, 22
+ 1926 __func__.7620:
+ 1927 00f0 4B436970 .string "KCipherVecRegAllocAes"
+ 1927 68657256
+ 1927 65635265
+ 1927 67416C6C
+ 1927 6F634165
+ 1928 0106 00000000 .align 16
+ 1928 00000000
+ 1928 0000
+ 1929 .type __PRETTY_FUNCTION__.7619, @object
+ 1930 .size __PRETTY_FUNCTION__.7619, 22
+ 1931 __PRETTY_FUNCTION__.7619:
+ 1932 0110 4B436970 .string "KCipherVecRegAllocAes"
+ 1932 68657256
+ 1932 65635265
+ 1932 67416C6C
+ 1932 6F634165
+ 1933 0126 00000000 .align 16
+ 1933 00000000
+ 1933 0000
+ 1934 .type __func__.7610, @object
+ 1935 .size __func__.7610, 24
+ 1936 __func__.7610:
+ 1937 0130 4B436970 .string "KCipherVecRegDecryptCtr"
+ 1937 68657256
+ 1937 65635265
+ 1937 67446563
+ 1937 72797074
+ 1938 0148 00000000 .align 16
+ 1938 00000000
+ 1939 .type __PRETTY_FUNCTION__.7609, @object
+ 1940 .size __PRETTY_FUNCTION__.7609, 24
+ 1941 __PRETTY_FUNCTION__.7609:
+ 1942 0150 4B436970 .string "KCipherVecRegDecryptCtr"
+ 1942 68657256
+ 1942 65635265
+ 1942 67446563
+ 1942 72797074
+ 1943 0168 00000000 .align 16
+ 1943 00000000
+ 1944 .type __func__.7600, @object
+ 1945 .size __func__.7600, 24
+ 1946 __func__.7600:
+ 1947 0170 4B436970 .string "KCipherVecRegEncryptCtr"
+ 1947 68657256
+ 1947 65635265
+ 1947 67456E63
+ 1947 72797074
+ 1948 0188 00000000 .align 16
+ 1948 00000000
+ 1949 .type __PRETTY_FUNCTION__.7599, @object
+ 1950 .size __PRETTY_FUNCTION__.7599, 24
+ 1951 __PRETTY_FUNCTION__.7599:
+ 1952 0190 4B436970 .string "KCipherVecRegEncryptCtr"
+ 1952 68657256
+ 1952 65635265
+
GAS LISTING /tmp/ccXzRABk.s page 57
+
+
+ 1952 67456E63
+ 1952 72797074
+ 1953 01a8 00000000 .align 16
+ 1953 00000000
+ 1954 .type __func__.7366, @object
+ 1955 .size __func__.7366, 21
+ 1956 __func__.7366:
+ 1957 01b0 4B436970 .string "KCipherVecRegDecrypt"
+ 1957 68657256
+ 1957 65635265
+ 1957 67446563
+ 1957 72797074
+ 1958 01c5 00000000 .align 16
+ 1958 00000000
+ 1958 000000
+ 1959 .type __PRETTY_FUNCTION__.7365, @object
+ 1960 .size __PRETTY_FUNCTION__.7365, 21
+ 1961 __PRETTY_FUNCTION__.7365:
+ 1962 01d0 4B436970 .string "KCipherVecRegDecrypt"
+ 1962 68657256
+ 1962 65635265
+ 1962 67446563
+ 1962 72797074
+ 1963 01e5 00000000 .align 16
+ 1963 00000000
+ 1963 000000
+ 1964 .type __func__.7350, @object
+ 1965 .size __func__.7350, 21
+ 1966 __func__.7350:
+ 1967 01f0 4B436970 .string "KCipherVecRegEncrypt"
+ 1967 68657256
+ 1967 65635265
+ 1967 67456E63
+ 1967 72797074
+ 1968 0205 00000000 .align 16
+ 1968 00000000
+ 1968 000000
+ 1969 .type __PRETTY_FUNCTION__.7349, @object
+ 1970 .size __PRETTY_FUNCTION__.7349, 21
+ 1971 __PRETTY_FUNCTION__.7349:
+ 1972 0210 4B436970 .string "KCipherVecRegEncrypt"
+ 1972 68657256
+ 1972 65635265
+ 1972 67456E63
+ 1972 72797074
+ 1973 0225 00000000 .align 32
+ 1973 00000000
+ 1973 00000000
+ 1973 00000000
+ 1973 00000000
+ 1974 .type __PRETTY_FUNCTION__.7300, @object
+ 1975 .size __PRETTY_FUNCTION__.7300, 35
+ 1976 __PRETTY_FUNCTION__.7300:
+ 1977 0240 4B436970 .string "KCipherVecRegSetDecryptCounterFunc"
+ 1977 68657256
+ 1977 65635265
+ 1977 67536574
+
GAS LISTING /tmp/ccXzRABk.s page 58
+
+
+ 1977 44656372
+ 1978 0263 00000000 .align 32
+ 1978 00000000
+ 1978 00000000
+ 1978 00000000
+ 1978 00000000
+ 1979 .type __PRETTY_FUNCTION__.7290, @object
+ 1980 .size __PRETTY_FUNCTION__.7290, 35
+ 1981 __PRETTY_FUNCTION__.7290:
+ 1982 0280 4B436970 .string "KCipherVecRegSetEncryptCounterFunc"
+ 1982 68657256
+ 1982 65635265
+ 1982 67536574
+ 1982 456E6372
+ 1983 02a3 00000000 .align 16
+ 1983 00000000
+ 1983 00000000
+ 1983 00
+ 1984 .type __PRETTY_FUNCTION__.7277, @object
+ 1985 .size __PRETTY_FUNCTION__.7277, 28
+ 1986 __PRETTY_FUNCTION__.7277:
+ 1987 02b0 4B436970 .string "KCipherVecRegSetDecryptIvec"
+ 1987 68657256
+ 1987 65635265
+ 1987 67536574
+ 1987 44656372
+ 1988 02cc 00000000 .align 16
+ 1989 .type __PRETTY_FUNCTION__.7264, @object
+ 1990 .size __PRETTY_FUNCTION__.7264, 28
+ 1991 __PRETTY_FUNCTION__.7264:
+ 1992 02d0 4B436970 .string "KCipherVecRegSetEncryptIvec"
+ 1992 68657256
+ 1992 65635265
+ 1992 67536574
+ 1992 456E6372
+ 1993 02ec 00000000 .align 16
+ 1994 .type __PRETTY_FUNCTION__.7242, @object
+ 1995 .size __PRETTY_FUNCTION__.7242, 27
+ 1996 __PRETTY_FUNCTION__.7242:
+ 1997 02f0 4B436970 .string "KCipherVecRegSetDecryptKey"
+ 1997 68657256
+ 1997 65635265
+ 1997 67536574
+ 1997 44656372
+ 1998 030b 00000000 .align 16
+ 1998 00
+ 1999 .type __func__.7244, @object
+ 2000 .size __func__.7244, 27
+ 2001 __func__.7244:
+ 2002 0310 4B436970 .string "KCipherVecRegSetDecryptKey"
+ 2002 68657256
+ 2002 65635265
+ 2002 67536574
+ 2002 44656372
+ 2003 032b 00000000 .align 16
+ 2003 00
+ 2004 .type __PRETTY_FUNCTION__.7218, @object
+
GAS LISTING /tmp/ccXzRABk.s page 59
+
+
+ 2005 .size __PRETTY_FUNCTION__.7218, 27
+ 2006 __PRETTY_FUNCTION__.7218:
+ 2007 0330 4B436970 .string "KCipherVecRegSetEncryptKey"
+ 2007 68657256
+ 2007 65635265
+ 2007 67536574
+ 2007 456E6372
+ 2008 034b 00000000 .align 16
+ 2008 00
+ 2009 .type __func__.7220, @object
+ 2010 .size __func__.7220, 27
+ 2011 __func__.7220:
+ 2012 0350 4B436970 .string "KCipherVecRegSetEncryptKey"
+ 2012 68657256
+ 2012 65635265
+ 2012 67536574
+ 2012 456E6372
+ 2013 .text
+ 2014 .Letext0:
+ 2015 .section .debug_loc,"", at progbits
+ 2016 .Ldebug_loc0:
+ 2017 .LLST0:
+ 2018 0000 00000000 .quad .LFB590-.Ltext0
+ 2018 00000000
+ 2019 0008 01000000 .quad .LCFI0-.Ltext0
+ 2019 00000000
+ 2020 0010 0200 .value 0x2
+ 2021 0012 77 .byte 0x77
+ 2022 0013 08 .sleb128 8
+ 2023 0014 01000000 .quad .LCFI0-.Ltext0
+ 2023 00000000
+ 2024 001c 04000000 .quad .LCFI1-.Ltext0
+ 2024 00000000
+ 2025 0024 0200 .value 0x2
+ 2026 0026 77 .byte 0x77
+ 2027 0027 10 .sleb128 16
+ 2028 0028 04000000 .quad .LCFI1-.Ltext0
+ 2028 00000000
+ 2029 0030 1F000000 .quad .LFE590-.Ltext0
+ 2029 00000000
+ 2030 0038 0200 .value 0x2
+ 2031 003a 76 .byte 0x76
+ 2032 003b 10 .sleb128 16
+ 2033 003c 00000000 .quad 0x0
+ 2033 00000000
+ 2034 0044 00000000 .quad 0x0
+ 2034 00000000
+ 2035 .LLST1:
+ 2036 004c 1F000000 .quad .LFB591-.Ltext0
+ 2036 00000000
+ 2037 0054 20000000 .quad .LCFI2-.Ltext0
+ 2037 00000000
+ 2038 005c 0200 .value 0x2
+ 2039 005e 77 .byte 0x77
+ 2040 005f 08 .sleb128 8
+ 2041 0060 20000000 .quad .LCFI2-.Ltext0
+ 2041 00000000
+
GAS LISTING /tmp/ccXzRABk.s page 60
+
+
+ 2042 0068 23000000 .quad .LCFI3-.Ltext0
+ 2042 00000000
+ 2043 0070 0200 .value 0x2
+ 2044 0072 77 .byte 0x77
+ 2045 0073 10 .sleb128 16
+ 2046 0074 23000000 .quad .LCFI3-.Ltext0
+ 2046 00000000
+ 2047 007c 48000000 .quad .LFE591-.Ltext0
+ 2047 00000000
+ 2048 0084 0200 .value 0x2
+ 2049 0086 76 .byte 0x76
+ 2050 0087 10 .sleb128 16
+ 2051 0088 00000000 .quad 0x0
+ 2051 00000000
+ 2052 0090 00000000 .quad 0x0
+ 2052 00000000
+ 2053 .LLST2:
+ 2054 0098 48000000 .quad .LFB592-.Ltext0
+ 2054 00000000
+ 2055 00a0 49000000 .quad .LCFI4-.Ltext0
+ 2055 00000000
+ 2056 00a8 0200 .value 0x2
+ 2057 00aa 77 .byte 0x77
+ 2058 00ab 08 .sleb128 8
+ 2059 00ac 49000000 .quad .LCFI4-.Ltext0
+ 2059 00000000
+ 2060 00b4 4C000000 .quad .LCFI5-.Ltext0
+ 2060 00000000
+ 2061 00bc 0200 .value 0x2
+ 2062 00be 77 .byte 0x77
+ 2063 00bf 10 .sleb128 16
+ 2064 00c0 4C000000 .quad .LCFI5-.Ltext0
+ 2064 00000000
+ 2065 00c8 82000000 .quad .LFE592-.Ltext0
+ 2065 00000000
+ 2066 00d0 0200 .value 0x2
+ 2067 00d2 76 .byte 0x76
+ 2068 00d3 10 .sleb128 16
+ 2069 00d4 00000000 .quad 0x0
+ 2069 00000000
+ 2070 00dc 00000000 .quad 0x0
+ 2070 00000000
+ 2071 .LLST3:
+ 2072 00e4 82000000 .quad .LFB593-.Ltext0
+ 2072 00000000
+ 2073 00ec 83000000 .quad .LCFI6-.Ltext0
+ 2073 00000000
+ 2074 00f4 0200 .value 0x2
+ 2075 00f6 77 .byte 0x77
+ 2076 00f7 08 .sleb128 8
+ 2077 00f8 83000000 .quad .LCFI6-.Ltext0
+ 2077 00000000
+ 2078 0100 86000000 .quad .LCFI7-.Ltext0
+ 2078 00000000
+ 2079 0108 0200 .value 0x2
+ 2080 010a 77 .byte 0x77
+ 2081 010b 10 .sleb128 16
+
GAS LISTING /tmp/ccXzRABk.s page 61
+
+
+ 2082 010c 86000000 .quad .LCFI7-.Ltext0
+ 2082 00000000
+ 2083 0114 6C010000 .quad .LFE593-.Ltext0
+ 2083 00000000
+ 2084 011c 0200 .value 0x2
+ 2085 011e 76 .byte 0x76
+ 2086 011f 10 .sleb128 16
+ 2087 0120 00000000 .quad 0x0
+ 2087 00000000
+ 2088 0128 00000000 .quad 0x0
+ 2088 00000000
+ 2089 .LLST4:
+ 2090 0130 6C010000 .quad .LFB594-.Ltext0
+ 2090 00000000
+ 2091 0138 6D010000 .quad .LCFI8-.Ltext0
+ 2091 00000000
+ 2092 0140 0200 .value 0x2
+ 2093 0142 77 .byte 0x77
+ 2094 0143 08 .sleb128 8
+ 2095 0144 6D010000 .quad .LCFI8-.Ltext0
+ 2095 00000000
+ 2096 014c 70010000 .quad .LCFI9-.Ltext0
+ 2096 00000000
+ 2097 0154 0200 .value 0x2
+ 2098 0156 77 .byte 0x77
+ 2099 0157 10 .sleb128 16
+ 2100 0158 70010000 .quad .LCFI9-.Ltext0
+ 2100 00000000
+ 2101 0160 56020000 .quad .LFE594-.Ltext0
+ 2101 00000000
+ 2102 0168 0200 .value 0x2
+ 2103 016a 76 .byte 0x76
+ 2104 016b 10 .sleb128 16
+ 2105 016c 00000000 .quad 0x0
+ 2105 00000000
+ 2106 0174 00000000 .quad 0x0
+ 2106 00000000
+ 2107 .LLST5:
+ 2108 017c 56020000 .quad .LFB595-.Ltext0
+ 2108 00000000
+ 2109 0184 57020000 .quad .LCFI10-.Ltext0
+ 2109 00000000
+ 2110 018c 0200 .value 0x2
+ 2111 018e 77 .byte 0x77
+ 2112 018f 08 .sleb128 8
+ 2113 0190 57020000 .quad .LCFI10-.Ltext0
+ 2113 00000000
+ 2114 0198 5A020000 .quad .LCFI11-.Ltext0
+ 2114 00000000
+ 2115 01a0 0200 .value 0x2
+ 2116 01a2 77 .byte 0x77
+ 2117 01a3 10 .sleb128 16
+ 2118 01a4 5A020000 .quad .LCFI11-.Ltext0
+ 2118 00000000
+ 2119 01ac D9020000 .quad .LFE595-.Ltext0
+ 2119 00000000
+ 2120 01b4 0200 .value 0x2
+
GAS LISTING /tmp/ccXzRABk.s page 62
+
+
+ 2121 01b6 76 .byte 0x76
+ 2122 01b7 10 .sleb128 16
+ 2123 01b8 00000000 .quad 0x0
+ 2123 00000000
+ 2124 01c0 00000000 .quad 0x0
+ 2124 00000000
+ 2125 .LLST6:
+ 2126 01c8 D9020000 .quad .LFB596-.Ltext0
+ 2126 00000000
+ 2127 01d0 DA020000 .quad .LCFI12-.Ltext0
+ 2127 00000000
+ 2128 01d8 0200 .value 0x2
+ 2129 01da 77 .byte 0x77
+ 2130 01db 08 .sleb128 8
+ 2131 01dc DA020000 .quad .LCFI12-.Ltext0
+ 2131 00000000
+ 2132 01e4 DD020000 .quad .LCFI13-.Ltext0
+ 2132 00000000
+ 2133 01ec 0200 .value 0x2
+ 2134 01ee 77 .byte 0x77
+ 2135 01ef 10 .sleb128 16
+ 2136 01f0 DD020000 .quad .LCFI13-.Ltext0
+ 2136 00000000
+ 2137 01f8 5C030000 .quad .LFE596-.Ltext0
+ 2137 00000000
+ 2138 0200 0200 .value 0x2
+ 2139 0202 76 .byte 0x76
+ 2140 0203 10 .sleb128 16
+ 2141 0204 00000000 .quad 0x0
+ 2141 00000000
+ 2142 020c 00000000 .quad 0x0
+ 2142 00000000
+ 2143 .LLST7:
+ 2144 0214 5C030000 .quad .LFB597-.Ltext0
+ 2144 00000000
+ 2145 021c 5D030000 .quad .LCFI14-.Ltext0
+ 2145 00000000
+ 2146 0224 0200 .value 0x2
+ 2147 0226 77 .byte 0x77
+ 2148 0227 08 .sleb128 8
+ 2149 0228 5D030000 .quad .LCFI14-.Ltext0
+ 2149 00000000
+ 2150 0230 60030000 .quad .LCFI15-.Ltext0
+ 2150 00000000
+ 2151 0238 0200 .value 0x2
+ 2152 023a 77 .byte 0x77
+ 2153 023b 10 .sleb128 16
+ 2154 023c 60030000 .quad .LCFI15-.Ltext0
+ 2154 00000000
+ 2155 0244 CB030000 .quad .LFE597-.Ltext0
+ 2155 00000000
+ 2156 024c 0200 .value 0x2
+ 2157 024e 76 .byte 0x76
+ 2158 024f 10 .sleb128 16
+ 2159 0250 00000000 .quad 0x0
+ 2159 00000000
+ 2160 0258 00000000 .quad 0x0
+
GAS LISTING /tmp/ccXzRABk.s page 63
+
+
+ 2160 00000000
+ 2161 .LLST8:
+ 2162 0260 CB030000 .quad .LFB598-.Ltext0
+ 2162 00000000
+ 2163 0268 CC030000 .quad .LCFI16-.Ltext0
+ 2163 00000000
+ 2164 0270 0200 .value 0x2
+ 2165 0272 77 .byte 0x77
+ 2166 0273 08 .sleb128 8
+ 2167 0274 CC030000 .quad .LCFI16-.Ltext0
+ 2167 00000000
+ 2168 027c CF030000 .quad .LCFI17-.Ltext0
+ 2168 00000000
+ 2169 0284 0200 .value 0x2
+ 2170 0286 77 .byte 0x77
+ 2171 0287 10 .sleb128 16
+ 2172 0288 CF030000 .quad .LCFI17-.Ltext0
+ 2172 00000000
+ 2173 0290 3A040000 .quad .LFE598-.Ltext0
+ 2173 00000000
+ 2174 0298 0200 .value 0x2
+ 2175 029a 76 .byte 0x76
+ 2176 029b 10 .sleb128 16
+ 2177 029c 00000000 .quad 0x0
+ 2177 00000000
+ 2178 02a4 00000000 .quad 0x0
+ 2178 00000000
+ 2179 .LLST9:
+ 2180 02ac 3A040000 .quad .LFB599-.Ltext0
+ 2180 00000000
+ 2181 02b4 3B040000 .quad .LCFI18-.Ltext0
+ 2181 00000000
+ 2182 02bc 0200 .value 0x2
+ 2183 02be 77 .byte 0x77
+ 2184 02bf 08 .sleb128 8
+ 2185 02c0 3B040000 .quad .LCFI18-.Ltext0
+ 2185 00000000
+ 2186 02c8 3E040000 .quad .LCFI19-.Ltext0
+ 2186 00000000
+ 2187 02d0 0200 .value 0x2
+ 2188 02d2 77 .byte 0x77
+ 2189 02d3 10 .sleb128 16
+ 2190 02d4 3E040000 .quad .LCFI19-.Ltext0
+ 2190 00000000
+ 2191 02dc 61040000 .quad .LFE599-.Ltext0
+ 2191 00000000
+ 2192 02e4 0200 .value 0x2
+ 2193 02e6 76 .byte 0x76
+ 2194 02e7 10 .sleb128 16
+ 2195 02e8 00000000 .quad 0x0
+ 2195 00000000
+ 2196 02f0 00000000 .quad 0x0
+ 2196 00000000
+ 2197 .LLST10:
+ 2198 02f8 61040000 .quad .LFB600-.Ltext0
+ 2198 00000000
+ 2199 0300 62040000 .quad .LCFI20-.Ltext0
+
GAS LISTING /tmp/ccXzRABk.s page 64
+
+
+ 2199 00000000
+ 2200 0308 0200 .value 0x2
+ 2201 030a 77 .byte 0x77
+ 2202 030b 08 .sleb128 8
+ 2203 030c 62040000 .quad .LCFI20-.Ltext0
+ 2203 00000000
+ 2204 0314 65040000 .quad .LCFI21-.Ltext0
+ 2204 00000000
+ 2205 031c 0200 .value 0x2
+ 2206 031e 77 .byte 0x77
+ 2207 031f 10 .sleb128 16
+ 2208 0320 65040000 .quad .LCFI21-.Ltext0
+ 2208 00000000
+ 2209 0328 88040000 .quad .LFE600-.Ltext0
+ 2209 00000000
+ 2210 0330 0200 .value 0x2
+ 2211 0332 76 .byte 0x76
+ 2212 0333 10 .sleb128 16
+ 2213 0334 00000000 .quad 0x0
+ 2213 00000000
+ 2214 033c 00000000 .quad 0x0
+ 2214 00000000
+ 2215 .LLST11:
+ 2216 0344 88040000 .quad .LFB601-.Ltext0
+ 2216 00000000
+ 2217 034c 89040000 .quad .LCFI22-.Ltext0
+ 2217 00000000
+ 2218 0354 0200 .value 0x2
+ 2219 0356 77 .byte 0x77
+ 2220 0357 08 .sleb128 8
+ 2221 0358 89040000 .quad .LCFI22-.Ltext0
+ 2221 00000000
+ 2222 0360 8C040000 .quad .LCFI23-.Ltext0
+ 2222 00000000
+ 2223 0368 0200 .value 0x2
+ 2224 036a 77 .byte 0x77
+ 2225 036b 10 .sleb128 16
+ 2226 036c 8C040000 .quad .LCFI23-.Ltext0
+ 2226 00000000
+ 2227 0374 DB040000 .quad .LFE601-.Ltext0
+ 2227 00000000
+ 2228 037c 0200 .value 0x2
+ 2229 037e 76 .byte 0x76
+ 2230 037f 10 .sleb128 16
+ 2231 0380 00000000 .quad 0x0
+ 2231 00000000
+ 2232 0388 00000000 .quad 0x0
+ 2232 00000000
+ 2233 .LLST12:
+ 2234 0390 DB040000 .quad .LFB602-.Ltext0
+ 2234 00000000
+ 2235 0398 DC040000 .quad .LCFI24-.Ltext0
+ 2235 00000000
+ 2236 03a0 0200 .value 0x2
+ 2237 03a2 77 .byte 0x77
+ 2238 03a3 08 .sleb128 8
+ 2239 03a4 DC040000 .quad .LCFI24-.Ltext0
+
GAS LISTING /tmp/ccXzRABk.s page 65
+
+
+ 2239 00000000
+ 2240 03ac DF040000 .quad .LCFI25-.Ltext0
+ 2240 00000000
+ 2241 03b4 0200 .value 0x2
+ 2242 03b6 77 .byte 0x77
+ 2243 03b7 10 .sleb128 16
+ 2244 03b8 DF040000 .quad .LCFI25-.Ltext0
+ 2244 00000000
+ 2245 03c0 2E050000 .quad .LFE602-.Ltext0
+ 2245 00000000
+ 2246 03c8 0200 .value 0x2
+ 2247 03ca 76 .byte 0x76
+ 2248 03cb 10 .sleb128 16
+ 2249 03cc 00000000 .quad 0x0
+ 2249 00000000
+ 2250 03d4 00000000 .quad 0x0
+ 2250 00000000
+ 2251 .LLST13:
+ 2252 03dc 2E050000 .quad .LFB603-.Ltext0
+ 2252 00000000
+ 2253 03e4 2F050000 .quad .LCFI26-.Ltext0
+ 2253 00000000
+ 2254 03ec 0200 .value 0x2
+ 2255 03ee 77 .byte 0x77
+ 2256 03ef 08 .sleb128 8
+ 2257 03f0 2F050000 .quad .LCFI26-.Ltext0
+ 2257 00000000
+ 2258 03f8 32050000 .quad .LCFI27-.Ltext0
+ 2258 00000000
+ 2259 0400 0200 .value 0x2
+ 2260 0402 77 .byte 0x77
+ 2261 0403 10 .sleb128 16
+ 2262 0404 32050000 .quad .LCFI27-.Ltext0
+ 2262 00000000
+ 2263 040c 92050000 .quad .LFE603-.Ltext0
+ 2263 00000000
+ 2264 0414 0200 .value 0x2
+ 2265 0416 76 .byte 0x76
+ 2266 0417 10 .sleb128 16
+ 2267 0418 00000000 .quad 0x0
+ 2267 00000000
+ 2268 0420 00000000 .quad 0x0
+ 2268 00000000
+ 2269 .LLST14:
+ 2270 0428 92050000 .quad .LFB604-.Ltext0
+ 2270 00000000
+ 2271 0430 93050000 .quad .LCFI28-.Ltext0
+ 2271 00000000
+ 2272 0438 0200 .value 0x2
+ 2273 043a 77 .byte 0x77
+ 2274 043b 08 .sleb128 8
+ 2275 043c 93050000 .quad .LCFI28-.Ltext0
+ 2275 00000000
+ 2276 0444 96050000 .quad .LCFI29-.Ltext0
+ 2276 00000000
+ 2277 044c 0200 .value 0x2
+ 2278 044e 77 .byte 0x77
+
GAS LISTING /tmp/ccXzRABk.s page 66
+
+
+ 2279 044f 10 .sleb128 16
+ 2280 0450 96050000 .quad .LCFI29-.Ltext0
+ 2280 00000000
+ 2281 0458 FD050000 .quad .LFE604-.Ltext0
+ 2281 00000000
+ 2282 0460 0200 .value 0x2
+ 2283 0462 76 .byte 0x76
+ 2284 0463 10 .sleb128 16
+ 2285 0464 00000000 .quad 0x0
+ 2285 00000000
+ 2286 046c 00000000 .quad 0x0
+ 2286 00000000
+ 2287 .LLST15:
+ 2288 0474 FD050000 .quad .LFB605-.Ltext0
+ 2288 00000000
+ 2289 047c FE050000 .quad .LCFI30-.Ltext0
+ 2289 00000000
+ 2290 0484 0200 .value 0x2
+ 2291 0486 77 .byte 0x77
+ 2292 0487 08 .sleb128 8
+ 2293 0488 FE050000 .quad .LCFI30-.Ltext0
+ 2293 00000000
+ 2294 0490 01060000 .quad .LCFI31-.Ltext0
+ 2294 00000000
+ 2295 0498 0200 .value 0x2
+ 2296 049a 77 .byte 0x77
+ 2297 049b 10 .sleb128 16
+ 2298 049c 01060000 .quad .LCFI31-.Ltext0
+ 2298 00000000
+ 2299 04a4 6D060000 .quad .LFE605-.Ltext0
+ 2299 00000000
+ 2300 04ac 0200 .value 0x2
+ 2301 04ae 76 .byte 0x76
+ 2302 04af 10 .sleb128 16
+ 2303 04b0 00000000 .quad 0x0
+ 2303 00000000
+ 2304 04b8 00000000 .quad 0x0
+ 2304 00000000
+ 2305 .LLST16:
+ 2306 04c0 6D060000 .quad .LFB606-.Ltext0
+ 2306 00000000
+ 2307 04c8 6E060000 .quad .LCFI32-.Ltext0
+ 2307 00000000
+ 2308 04d0 0200 .value 0x2
+ 2309 04d2 77 .byte 0x77
+ 2310 04d3 08 .sleb128 8
+ 2311 04d4 6E060000 .quad .LCFI32-.Ltext0
+ 2311 00000000
+ 2312 04dc 71060000 .quad .LCFI33-.Ltext0
+ 2312 00000000
+ 2313 04e4 0200 .value 0x2
+ 2314 04e6 77 .byte 0x77
+ 2315 04e7 10 .sleb128 16
+ 2316 04e8 71060000 .quad .LCFI33-.Ltext0
+ 2316 00000000
+ 2317 04f0 DD060000 .quad .LFE606-.Ltext0
+ 2317 00000000
+
GAS LISTING /tmp/ccXzRABk.s page 67
+
+
+ 2318 04f8 0200 .value 0x2
+ 2319 04fa 76 .byte 0x76
+ 2320 04fb 10 .sleb128 16
+ 2321 04fc 00000000 .quad 0x0
+ 2321 00000000
+ 2322 0504 00000000 .quad 0x0
+ 2322 00000000
+ 2323 .LLST17:
+ 2324 050c DD060000 .quad .LFB607-.Ltext0
+ 2324 00000000
+ 2325 0514 DE060000 .quad .LCFI34-.Ltext0
+ 2325 00000000
+ 2326 051c 0200 .value 0x2
+ 2327 051e 77 .byte 0x77
+ 2328 051f 08 .sleb128 8
+ 2329 0520 DE060000 .quad .LCFI34-.Ltext0
+ 2329 00000000
+ 2330 0528 E1060000 .quad .LCFI35-.Ltext0
+ 2330 00000000
+ 2331 0530 0200 .value 0x2
+ 2332 0532 77 .byte 0x77
+ 2333 0533 10 .sleb128 16
+ 2334 0534 E1060000 .quad .LCFI35-.Ltext0
+ 2334 00000000
+ 2335 053c AB070000 .quad .LFE607-.Ltext0
+ 2335 00000000
+ 2336 0544 0200 .value 0x2
+ 2337 0546 76 .byte 0x76
+ 2338 0547 10 .sleb128 16
+ 2339 0548 00000000 .quad 0x0
+ 2339 00000000
+ 2340 0550 00000000 .quad 0x0
+ 2340 00000000
+ 2341 .LLST18:
+ 2342 0558 AB070000 .quad .LFB608-.Ltext0
+ 2342 00000000
+ 2343 0560 AC070000 .quad .LCFI36-.Ltext0
+ 2343 00000000
+ 2344 0568 0200 .value 0x2
+ 2345 056a 77 .byte 0x77
+ 2346 056b 08 .sleb128 8
+ 2347 056c AC070000 .quad .LCFI36-.Ltext0
+ 2347 00000000
+ 2348 0574 AF070000 .quad .LCFI37-.Ltext0
+ 2348 00000000
+ 2349 057c 0200 .value 0x2
+ 2350 057e 77 .byte 0x77
+ 2351 057f 10 .sleb128 16
+ 2352 0580 AF070000 .quad .LCFI37-.Ltext0
+ 2352 00000000
+ 2353 0588 7F080000 .quad .LFE608-.Ltext0
+ 2353 00000000
+ 2354 0590 0200 .value 0x2
+ 2355 0592 76 .byte 0x76
+ 2356 0593 10 .sleb128 16
+ 2357 0594 00000000 .quad 0x0
+ 2357 00000000
+
GAS LISTING /tmp/ccXzRABk.s page 68
+
+
+ 2358 059c 00000000 .quad 0x0
+ 2358 00000000
+ 2359 .LLST19:
+ 2360 05a4 7F080000 .quad .LFB609-.Ltext0
+ 2360 00000000
+ 2361 05ac 80080000 .quad .LCFI38-.Ltext0
+ 2361 00000000
+ 2362 05b4 0200 .value 0x2
+ 2363 05b6 77 .byte 0x77
+ 2364 05b7 08 .sleb128 8
+ 2365 05b8 80080000 .quad .LCFI38-.Ltext0
+ 2365 00000000
+ 2366 05c0 83080000 .quad .LCFI39-.Ltext0
+ 2366 00000000
+ 2367 05c8 0200 .value 0x2
+ 2368 05ca 77 .byte 0x77
+ 2369 05cb 10 .sleb128 16
+ 2370 05cc 83080000 .quad .LCFI39-.Ltext0
+ 2370 00000000
+ 2371 05d4 5C090000 .quad .LFE609-.Ltext0
+ 2371 00000000
+ 2372 05dc 0200 .value 0x2
+ 2373 05de 76 .byte 0x76
+ 2374 05df 10 .sleb128 16
+ 2375 05e0 00000000 .quad 0x0
+ 2375 00000000
+ 2376 05e8 00000000 .quad 0x0
+ 2376 00000000
+ 2377 .LLST20:
+ 2378 05f0 5C090000 .quad .LFB610-.Ltext0
+ 2378 00000000
+ 2379 05f8 5D090000 .quad .LCFI40-.Ltext0
+ 2379 00000000
+ 2380 0600 0200 .value 0x2
+ 2381 0602 77 .byte 0x77
+ 2382 0603 08 .sleb128 8
+ 2383 0604 5D090000 .quad .LCFI40-.Ltext0
+ 2383 00000000
+ 2384 060c 60090000 .quad .LCFI41-.Ltext0
+ 2384 00000000
+ 2385 0614 0200 .value 0x2
+ 2386 0616 77 .byte 0x77
+ 2387 0617 10 .sleb128 16
+ 2388 0618 60090000 .quad .LCFI41-.Ltext0
+ 2388 00000000
+ 2389 0620 220A0000 .quad .LFE610-.Ltext0
+ 2389 00000000
+ 2390 0628 0200 .value 0x2
+ 2391 062a 76 .byte 0x76
+ 2392 062b 10 .sleb128 16
+ 2393 062c 00000000 .quad 0x0
+ 2393 00000000
+ 2394 0634 00000000 .quad 0x0
+ 2394 00000000
+ 2395 .LLST21:
+ 2396 063c 220A0000 .quad .LFB611-.Ltext0
+ 2396 00000000
+
GAS LISTING /tmp/ccXzRABk.s page 69
+
+
+ 2397 0644 230A0000 .quad .LCFI42-.Ltext0
+ 2397 00000000
+ 2398 064c 0200 .value 0x2
+ 2399 064e 77 .byte 0x77
+ 2400 064f 08 .sleb128 8
+ 2401 0650 230A0000 .quad .LCFI42-.Ltext0
+ 2401 00000000
+ 2402 0658 260A0000 .quad .LCFI43-.Ltext0
+ 2402 00000000
+ 2403 0660 0200 .value 0x2
+ 2404 0662 77 .byte 0x77
+ 2405 0663 10 .sleb128 16
+ 2406 0664 260A0000 .quad .LCFI43-.Ltext0
+ 2406 00000000
+ 2407 066c E80A0000 .quad .LFE611-.Ltext0
+ 2407 00000000
+ 2408 0674 0200 .value 0x2
+ 2409 0676 76 .byte 0x76
+ 2410 0677 10 .sleb128 16
+ 2411 0678 00000000 .quad 0x0
+ 2411 00000000
+ 2412 0680 00000000 .quad 0x0
+ 2412 00000000
+ 2413 .LLST22:
+ 2414 0688 E80A0000 .quad .LFB612-.Ltext0
+ 2414 00000000
+ 2415 0690 E90A0000 .quad .LCFI44-.Ltext0
+ 2415 00000000
+ 2416 0698 0200 .value 0x2
+ 2417 069a 77 .byte 0x77
+ 2418 069b 08 .sleb128 8
+ 2419 069c E90A0000 .quad .LCFI44-.Ltext0
+ 2419 00000000
+ 2420 06a4 EC0A0000 .quad .LCFI45-.Ltext0
+ 2420 00000000
+ 2421 06ac 0200 .value 0x2
+ 2422 06ae 77 .byte 0x77
+ 2423 06af 10 .sleb128 16
+ 2424 06b0 EC0A0000 .quad .LCFI45-.Ltext0
+ 2424 00000000
+ 2425 06b8 AE0B0000 .quad .LFE612-.Ltext0
+ 2425 00000000
+ 2426 06c0 0200 .value 0x2
+ 2427 06c2 76 .byte 0x76
+ 2428 06c3 10 .sleb128 16
+ 2429 06c4 00000000 .quad 0x0
+ 2429 00000000
+ 2430 06cc 00000000 .quad 0x0
+ 2430 00000000
+ 2431 .LLST23:
+ 2432 06d4 AE0B0000 .quad .LFB613-.Ltext0
+ 2432 00000000
+ 2433 06dc AF0B0000 .quad .LCFI46-.Ltext0
+ 2433 00000000
+ 2434 06e4 0200 .value 0x2
+ 2435 06e6 77 .byte 0x77
+ 2436 06e7 08 .sleb128 8
+
GAS LISTING /tmp/ccXzRABk.s page 70
+
+
+ 2437 06e8 AF0B0000 .quad .LCFI46-.Ltext0
+ 2437 00000000
+ 2438 06f0 B20B0000 .quad .LCFI47-.Ltext0
+ 2438 00000000
+ 2439 06f8 0200 .value 0x2
+ 2440 06fa 77 .byte 0x77
+ 2441 06fb 10 .sleb128 16
+ 2442 06fc B20B0000 .quad .LCFI47-.Ltext0
+ 2442 00000000
+ 2443 0704 740C0000 .quad .LFE613-.Ltext0
+ 2443 00000000
+ 2444 070c 0200 .value 0x2
+ 2445 070e 76 .byte 0x76
+ 2446 070f 10 .sleb128 16
+ 2447 0710 00000000 .quad 0x0
+ 2447 00000000
+ 2448 0718 00000000 .quad 0x0
+ 2448 00000000
+ 2449 .LLST24:
+ 2450 0720 740C0000 .quad .LFB614-.Ltext0
+ 2450 00000000
+ 2451 0728 750C0000 .quad .LCFI48-.Ltext0
+ 2451 00000000
+ 2452 0730 0200 .value 0x2
+ 2453 0732 77 .byte 0x77
+ 2454 0733 08 .sleb128 8
+ 2455 0734 750C0000 .quad .LCFI48-.Ltext0
+ 2455 00000000
+ 2456 073c 780C0000 .quad .LCFI49-.Ltext0
+ 2456 00000000
+ 2457 0744 0200 .value 0x2
+ 2458 0746 77 .byte 0x77
+ 2459 0747 10 .sleb128 16
+ 2460 0748 780C0000 .quad .LCFI49-.Ltext0
+ 2460 00000000
+ 2461 0750 AD0C0000 .quad .LFE614-.Ltext0
+ 2461 00000000
+ 2462 0758 0200 .value 0x2
+ 2463 075a 76 .byte 0x76
+ 2464 075b 10 .sleb128 16
+ 2465 075c 00000000 .quad 0x0
+ 2465 00000000
+ 2466 0764 00000000 .quad 0x0
+ 2466 00000000
+ 2467 .LLST25:
+ 2468 076c AD0C0000 .quad .LFB615-.Ltext0
+ 2468 00000000
+ 2469 0774 AE0C0000 .quad .LCFI50-.Ltext0
+ 2469 00000000
+ 2470 077c 0200 .value 0x2
+ 2471 077e 77 .byte 0x77
+ 2472 077f 08 .sleb128 8
+ 2473 0780 AE0C0000 .quad .LCFI50-.Ltext0
+ 2473 00000000
+ 2474 0788 B10C0000 .quad .LCFI51-.Ltext0
+ 2474 00000000
+ 2475 0790 0200 .value 0x2
+
GAS LISTING /tmp/ccXzRABk.s page 71
+
+
+ 2476 0792 77 .byte 0x77
+ 2477 0793 10 .sleb128 16
+ 2478 0794 B10C0000 .quad .LCFI51-.Ltext0
+ 2478 00000000
+ 2479 079c E30C0000 .quad .LFE615-.Ltext0
+ 2479 00000000
+ 2480 07a4 0200 .value 0x2
+ 2481 07a6 76 .byte 0x76
+ 2482 07a7 10 .sleb128 16
+ 2483 07a8 00000000 .quad 0x0
+ 2483 00000000
+ 2484 07b0 00000000 .quad 0x0
+ 2484 00000000
+ 2485 .LLST26:
+ 2486 07b8 E30C0000 .quad .LFB616-.Ltext0
+ 2486 00000000
+ 2487 07c0 E40C0000 .quad .LCFI52-.Ltext0
+ 2487 00000000
+ 2488 07c8 0200 .value 0x2
+ 2489 07ca 77 .byte 0x77
+ 2490 07cb 08 .sleb128 8
+ 2491 07cc E40C0000 .quad .LCFI52-.Ltext0
+ 2491 00000000
+ 2492 07d4 E70C0000 .quad .LCFI53-.Ltext0
+ 2492 00000000
+ 2493 07dc 0200 .value 0x2
+ 2494 07de 77 .byte 0x77
+ 2495 07df 10 .sleb128 16
+ 2496 07e0 E70C0000 .quad .LCFI53-.Ltext0
+ 2496 00000000
+ 2497 07e8 190D0000 .quad .LFE616-.Ltext0
+ 2497 00000000
+ 2498 07f0 0200 .value 0x2
+ 2499 07f2 76 .byte 0x76
+ 2500 07f3 10 .sleb128 16
+ 2501 07f4 00000000 .quad 0x0
+ 2501 00000000
+ 2502 07fc 00000000 .quad 0x0
+ 2502 00000000
+ 2503 .LLST27:
+ 2504 0804 190D0000 .quad .LFB617-.Ltext0
+ 2504 00000000
+ 2505 080c 1A0D0000 .quad .LCFI54-.Ltext0
+ 2505 00000000
+ 2506 0814 0200 .value 0x2
+ 2507 0816 77 .byte 0x77
+ 2508 0817 08 .sleb128 8
+ 2509 0818 1A0D0000 .quad .LCFI54-.Ltext0
+ 2509 00000000
+ 2510 0820 1D0D0000 .quad .LCFI55-.Ltext0
+ 2510 00000000
+ 2511 0828 0200 .value 0x2
+ 2512 082a 77 .byte 0x77
+ 2513 082b 10 .sleb128 16
+ 2514 082c 1D0D0000 .quad .LCFI55-.Ltext0
+ 2514 00000000
+ 2515 0834 740D0000 .quad .LFE617-.Ltext0
+
GAS LISTING /tmp/ccXzRABk.s page 72
+
+
+ 2515 00000000
+ 2516 083c 0200 .value 0x2
+ 2517 083e 76 .byte 0x76
+ 2518 083f 10 .sleb128 16
+ 2519 0840 00000000 .quad 0x0
+ 2519 00000000
+ 2520 0848 00000000 .quad 0x0
+ 2520 00000000
+ 2521 .LLST28:
+ 2522 0850 740D0000 .quad .LFB618-.Ltext0
+ 2522 00000000
+ 2523 0858 750D0000 .quad .LCFI56-.Ltext0
+ 2523 00000000
+ 2524 0860 0200 .value 0x2
+ 2525 0862 77 .byte 0x77
+ 2526 0863 08 .sleb128 8
+ 2527 0864 750D0000 .quad .LCFI56-.Ltext0
+ 2527 00000000
+ 2528 086c 780D0000 .quad .LCFI57-.Ltext0
+ 2528 00000000
+ 2529 0874 0200 .value 0x2
+ 2530 0876 77 .byte 0x77
+ 2531 0877 10 .sleb128 16
+ 2532 0878 780D0000 .quad .LCFI57-.Ltext0
+ 2532 00000000
+ 2533 0880 120E0000 .quad .LFE618-.Ltext0
+ 2533 00000000
+ 2534 0888 0200 .value 0x2
+ 2535 088a 76 .byte 0x76
+ 2536 088b 10 .sleb128 16
+ 2537 088c 00000000 .quad 0x0
+ 2537 00000000
+ 2538 0894 00000000 .quad 0x0
+ 2538 00000000
+ 2539 .LLST29:
+ 2540 089c 120E0000 .quad .LFB619-.Ltext0
+ 2540 00000000
+ 2541 08a4 130E0000 .quad .LCFI58-.Ltext0
+ 2541 00000000
+ 2542 08ac 0200 .value 0x2
+ 2543 08ae 77 .byte 0x77
+ 2544 08af 08 .sleb128 8
+ 2545 08b0 130E0000 .quad .LCFI58-.Ltext0
+ 2545 00000000
+ 2546 08b8 160E0000 .quad .LCFI59-.Ltext0
+ 2546 00000000
+ 2547 08c0 0200 .value 0x2
+ 2548 08c2 77 .byte 0x77
+ 2549 08c3 10 .sleb128 16
+ 2550 08c4 160E0000 .quad .LCFI59-.Ltext0
+ 2550 00000000
+ 2551 08cc 6D0E0000 .quad .LFE619-.Ltext0
+ 2551 00000000
+ 2552 08d4 0200 .value 0x2
+ 2553 08d6 76 .byte 0x76
+ 2554 08d7 10 .sleb128 16
+ 2555 08d8 00000000 .quad 0x0
+
GAS LISTING /tmp/ccXzRABk.s page 73
+
+
+ 2555 00000000
+ 2556 08e0 00000000 .quad 0x0
+ 2556 00000000
+ 2557 .LLST30:
+ 2558 08e8 6D0E0000 .quad .LFB620-.Ltext0
+ 2558 00000000
+ 2559 08f0 6E0E0000 .quad .LCFI60-.Ltext0
+ 2559 00000000
+ 2560 08f8 0200 .value 0x2
+ 2561 08fa 77 .byte 0x77
+ 2562 08fb 08 .sleb128 8
+ 2563 08fc 6E0E0000 .quad .LCFI60-.Ltext0
+ 2563 00000000
+ 2564 0904 710E0000 .quad .LCFI61-.Ltext0
+ 2564 00000000
+ 2565 090c 0200 .value 0x2
+ 2566 090e 77 .byte 0x77
+ 2567 090f 10 .sleb128 16
+ 2568 0910 710E0000 .quad .LCFI61-.Ltext0
+ 2568 00000000
+ 2569 0918 020F0000 .quad .LFE620-.Ltext0
+ 2569 00000000
+ 2570 0920 0200 .value 0x2
+ 2571 0922 76 .byte 0x76
+ 2572 0923 10 .sleb128 16
+ 2573 0924 00000000 .quad 0x0
+ 2573 00000000
+ 2574 092c 00000000 .quad 0x0
+ 2574 00000000
+ 2575 .LLST31:
+ 2576 0934 020F0000 .quad .LFB621-.Ltext0
+ 2576 00000000
+ 2577 093c 030F0000 .quad .LCFI62-.Ltext0
+ 2577 00000000
+ 2578 0944 0200 .value 0x2
+ 2579 0946 77 .byte 0x77
+ 2580 0947 08 .sleb128 8
+ 2581 0948 030F0000 .quad .LCFI62-.Ltext0
+ 2581 00000000
+ 2582 0950 060F0000 .quad .LCFI63-.Ltext0
+ 2582 00000000
+ 2583 0958 0200 .value 0x2
+ 2584 095a 77 .byte 0x77
+ 2585 095b 10 .sleb128 16
+ 2586 095c 060F0000 .quad .LCFI63-.Ltext0
+ 2586 00000000
+ 2587 0964 64100000 .quad .LFE621-.Ltext0
+ 2587 00000000
+ 2588 096c 0200 .value 0x2
+ 2589 096e 76 .byte 0x76
+ 2590 096f 10 .sleb128 16
+ 2591 0970 00000000 .quad 0x0
+ 2591 00000000
+ 2592 0978 00000000 .quad 0x0
+ 2592 00000000
+ 2593 .file 2 "/usr/include/stdint.h"
+ 2594 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+
GAS LISTING /tmp/ccXzRABk.s page 74
+
+
+ 2595 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/atomic32.h"
+ 2596 .file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/refcount.h"
+ 2597 .file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/cipher.h"
+ 2598 .file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-impl.h"
+ 2599 .file 8 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 2600 .file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 2601 .file 10 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 2602 .file 11 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi-priv.h"
+ 2603 .file 12 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/ciphermgr.h"
+ 2604 .file 13 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 2605 .file 14 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 2606 .file 15 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 2607 .section .debug_info
+ 2608 0000 4D1F0000 .long 0x1f4d
+ 2609 0004 0200 .value 0x2
+ 2610 0006 00000000 .long .Ldebug_abbrev0
+ 2611 000a 08 .byte 0x8
+ 2612 000b 01 .uleb128 0x1
+ 2613 000c 00000000 .long .LASF392
+ 2614 0010 01 .byte 0x1
+ 2615 0011 00000000 .long .LASF393
+ 2616 0015 00000000 .long .LASF394
+ 2617 0019 00000000 .quad .Ltext0
+ 2617 00000000
+ 2618 0021 00000000 .quad .Letext0
+ 2618 00000000
+ 2619 0029 00000000 .long .Ldebug_line0
+ 2620 002d 02 .uleb128 0x2
+ 2621 002e 01 .byte 0x1
+ 2622 002f 06 .byte 0x6
+ 2623 0030 00000000 .long .LASF0
+ 2624 0034 02 .uleb128 0x2
+ 2625 0035 02 .byte 0x2
+ 2626 0036 05 .byte 0x5
+ 2627 0037 00000000 .long .LASF1
+ 2628 003b 03 .uleb128 0x3
+ 2629 003c 04 .byte 0x4
+ 2630 003d 05 .byte 0x5
+ 2631 003e 696E7400 .string "int"
+ 2632 0042 02 .uleb128 0x2
+ 2633 0043 08 .byte 0x8
+ 2634 0044 05 .byte 0x5
+ 2635 0045 00000000 .long .LASF2
+ 2636 0049 04 .uleb128 0x4
+ 2637 004a 00000000 .long .LASF5
+ 2638 004e 02 .byte 0x2
+ 2639 004f 31 .byte 0x31
+ 2640 0050 54000000 .long 0x54
+ 2641 0054 02 .uleb128 0x2
+ 2642 0055 01 .byte 0x1
+ 2643 0056 08 .byte 0x8
+ 2644 0057 00000000 .long .LASF3
+ 2645 005b 02 .uleb128 0x2
+ 2646 005c 02 .byte 0x2
+ 2647 005d 07 .byte 0x7
+ 2648 005e 00000000 .long .LASF4
+ 2649 0062 04 .uleb128 0x4
+
GAS LISTING /tmp/ccXzRABk.s page 75
+
+
+ 2650 0063 00000000 .long .LASF6
+ 2651 0067 02 .byte 0x2
+ 2652 0068 34 .byte 0x34
+ 2653 0069 6D000000 .long 0x6d
+ 2654 006d 02 .uleb128 0x2
+ 2655 006e 04 .byte 0x4
+ 2656 006f 07 .byte 0x7
+ 2657 0070 00000000 .long .LASF7
+ 2658 0074 02 .uleb128 0x2
+ 2659 0075 08 .byte 0x8
+ 2660 0076 07 .byte 0x7
+ 2661 0077 00000000 .long .LASF8
+ 2662 007b 04 .uleb128 0x4
+ 2663 007c 00000000 .long .LASF9
+ 2664 0080 03 .byte 0x3
+ 2665 0081 30 .byte 0x30
+ 2666 0082 62000000 .long 0x62
+ 2667 0086 04 .uleb128 0x4
+ 2668 0087 00000000 .long .LASF10
+ 2669 008b 04 .byte 0x4
+ 2670 008c 27 .byte 0x27
+ 2671 008d 91000000 .long 0x91
+ 2672 0091 05 .uleb128 0x5
+ 2673 0092 00000000 .long .LASF10
+ 2674 0096 04 .byte 0x4
+ 2675 0097 04 .byte 0x4
+ 2676 0098 27 .byte 0x27
+ 2677 0099 AC000000 .long 0xac
+ 2678 009d 06 .uleb128 0x6
+ 2679 009e 00000000 .long .LASF34
+ 2680 00a2 04 .byte 0x4
+ 2681 00a3 2A .byte 0x2a
+ 2682 00a4 AC000000 .long 0xac
+ 2683 00a8 02 .byte 0x2
+ 2684 00a9 23 .byte 0x23
+ 2685 00aa 00 .uleb128 0x0
+ 2686 00ab 00 .byte 0x0
+ 2687 00ac 07 .uleb128 0x7
+ 2688 00ad 3B000000 .long 0x3b
+ 2689 00b1 08 .uleb128 0x8
+ 2690 00b2 08 .byte 0x8
+ 2691 00b3 07 .byte 0x7
+ 2692 00b4 09 .uleb128 0x9
+ 2693 00b5 08 .byte 0x8
+ 2694 00b6 0A .uleb128 0xa
+ 2695 00b7 08 .byte 0x8
+ 2696 00b8 BC000000 .long 0xbc
+ 2697 00bc 0B .uleb128 0xb
+ 2698 00bd C1000000 .long 0xc1
+ 2699 00c1 02 .uleb128 0x2
+ 2700 00c2 01 .byte 0x1
+ 2701 00c3 06 .byte 0x6
+ 2702 00c4 00000000 .long .LASF11
+ 2703 00c8 0C .uleb128 0xc
+ 2704 00c9 04 .byte 0x4
+ 2705 00ca 0D .byte 0xd
+ 2706 00cb D6 .byte 0xd6
+
GAS LISTING /tmp/ccXzRABk.s page 76
+
+
+ 2707 00cc 49010000 .long 0x149
+ 2708 00d0 0D .uleb128 0xd
+ 2709 00d1 00000000 .long .LASF12
+ 2710 00d5 7F .sleb128 -1
+ 2711 00d6 0D .uleb128 0xd
+ 2712 00d7 00000000 .long .LASF13
+ 2713 00db 00 .sleb128 0
+ 2714 00dc 0D .uleb128 0xd
+ 2715 00dd 00000000 .long .LASF14
+ 2716 00e1 01 .sleb128 1
+ 2717 00e2 0D .uleb128 0xd
+ 2718 00e3 00000000 .long .LASF15
+ 2719 00e7 02 .sleb128 2
+ 2720 00e8 0D .uleb128 0xd
+ 2721 00e9 00000000 .long .LASF16
+ 2722 00ed 03 .sleb128 3
+ 2723 00ee 0D .uleb128 0xd
+ 2724 00ef 00000000 .long .LASF17
+ 2725 00f3 04 .sleb128 4
+ 2726 00f4 0D .uleb128 0xd
+ 2727 00f5 00000000 .long .LASF18
+ 2728 00f9 05 .sleb128 5
+ 2729 00fa 0D .uleb128 0xd
+ 2730 00fb 00000000 .long .LASF19
+ 2731 00ff 06 .sleb128 6
+ 2732 0100 0D .uleb128 0xd
+ 2733 0101 00000000 .long .LASF20
+ 2734 0105 07 .sleb128 7
+ 2735 0106 0D .uleb128 0xd
+ 2736 0107 00000000 .long .LASF21
+ 2737 010b 08 .sleb128 8
+ 2738 010c 0D .uleb128 0xd
+ 2739 010d 00000000 .long .LASF22
+ 2740 0111 09 .sleb128 9
+ 2741 0112 0D .uleb128 0xd
+ 2742 0113 00000000 .long .LASF23
+ 2743 0117 0A .sleb128 10
+ 2744 0118 0D .uleb128 0xd
+ 2745 0119 00000000 .long .LASF24
+ 2746 011d 0B .sleb128 11
+ 2747 011e 0D .uleb128 0xd
+ 2748 011f 00000000 .long .LASF25
+ 2749 0123 0C .sleb128 12
+ 2750 0124 0D .uleb128 0xd
+ 2751 0125 00000000 .long .LASF26
+ 2752 0129 0D .sleb128 13
+ 2753 012a 0D .uleb128 0xd
+ 2754 012b 00000000 .long .LASF27
+ 2755 012f 0E .sleb128 14
+ 2756 0130 0D .uleb128 0xd
+ 2757 0131 00000000 .long .LASF28
+ 2758 0135 0F .sleb128 15
+ 2759 0136 0D .uleb128 0xd
+ 2760 0137 00000000 .long .LASF29
+ 2761 013b 10 .sleb128 16
+ 2762 013c 0D .uleb128 0xd
+ 2763 013d 00000000 .long .LASF30
+
GAS LISTING /tmp/ccXzRABk.s page 77
+
+
+ 2764 0141 11 .sleb128 17
+ 2765 0142 0D .uleb128 0xd
+ 2766 0143 00000000 .long .LASF31
+ 2767 0147 12 .sleb128 18
+ 2768 0148 00 .byte 0x0
+ 2769 0149 04 .uleb128 0x4
+ 2770 014a 00000000 .long .LASF32
+ 2771 014e 05 .byte 0x5
+ 2772 014f 42 .byte 0x42
+ 2773 0150 86000000 .long 0x86
+ 2774 0154 04 .uleb128 0x4
+ 2775 0155 00000000 .long .LASF33
+ 2776 0159 06 .byte 0x6
+ 2777 015a 20 .byte 0x20
+ 2778 015b 5F010000 .long 0x15f
+ 2779 015f 05 .uleb128 0x5
+ 2780 0160 00000000 .long .LASF33
+ 2781 0164 48 .byte 0x48
+ 2782 0165 06 .byte 0x6
+ 2783 0166 20 .byte 0x20
+ 2784 0167 F7010000 .long 0x1f7
+ 2785 016b 06 .uleb128 0x6
+ 2786 016c 00000000 .long .LASF35
+ 2787 0170 07 .byte 0x7
+ 2788 0171 9A .byte 0x9a
+ 2789 0172 49010000 .long 0x149
+ 2790 0176 02 .byte 0x2
+ 2791 0177 23 .byte 0x23
+ 2792 0178 00 .uleb128 0x0
+ 2793 0179 06 .uleb128 0x6
+ 2794 017a 00000000 .long .LASF36
+ 2795 017e 07 .byte 0x7
+ 2796 017f 9B .byte 0x9b
+ 2797 0180 62000000 .long 0x62
+ 2798 0184 02 .byte 0x2
+ 2799 0185 23 .byte 0x23
+ 2800 0186 04 .uleb128 0x4
+ 2801 0187 0E .uleb128 0xe
+ 2802 0188 767400 .string "vt"
+ 2803 018b 07 .byte 0x7
+ 2804 018c 9C .byte 0x9c
+ 2805 018d BC040000 .long 0x4bc
+ 2806 0191 02 .byte 0x2
+ 2807 0192 23 .byte 0x23
+ 2808 0193 08 .uleb128 0x8
+ 2809 0194 06 .uleb128 0x6
+ 2810 0195 00000000 .long .LASF37
+ 2811 0199 07 .byte 0x7
+ 2812 019a 9D .byte 0x9d
+ 2813 019b B6000000 .long 0xb6
+ 2814 019f 02 .byte 0x2
+ 2815 01a0 23 .byte 0x23
+ 2816 01a1 10 .uleb128 0x10
+ 2817 01a2 06 .uleb128 0x6
+ 2818 01a3 00000000 .long .LASF38
+ 2819 01a7 07 .byte 0x7
+ 2820 01a8 9E .byte 0x9e
+
GAS LISTING /tmp/ccXzRABk.s page 78
+
+
+ 2821 01a9 B4000000 .long 0xb4
+ 2822 01ad 02 .byte 0x2
+ 2823 01ae 23 .byte 0x23
+ 2824 01af 18 .uleb128 0x18
+ 2825 01b0 06 .uleb128 0x6
+ 2826 01b1 00000000 .long .LASF39
+ 2827 01b5 07 .byte 0x7
+ 2828 01b6 9F .byte 0x9f
+ 2829 01b7 B4000000 .long 0xb4
+ 2830 01bb 02 .byte 0x2
+ 2831 01bc 23 .byte 0x23
+ 2832 01bd 20 .uleb128 0x20
+ 2833 01be 06 .uleb128 0x6
+ 2834 01bf 00000000 .long .LASF40
+ 2835 01c3 07 .byte 0x7
+ 2836 01c4 A0 .byte 0xa0
+ 2837 01c5 B4000000 .long 0xb4
+ 2838 01c9 02 .byte 0x2
+ 2839 01ca 23 .byte 0x23
+ 2840 01cb 28 .uleb128 0x28
+ 2841 01cc 06 .uleb128 0x6
+ 2842 01cd 00000000 .long .LASF41
+ 2843 01d1 07 .byte 0x7
+ 2844 01d2 A1 .byte 0xa1
+ 2845 01d3 B4000000 .long 0xb4
+ 2846 01d7 02 .byte 0x2
+ 2847 01d8 23 .byte 0x23
+ 2848 01d9 30 .uleb128 0x30
+ 2849 01da 06 .uleb128 0x6
+ 2850 01db 00000000 .long .LASF42
+ 2851 01df 07 .byte 0x7
+ 2852 01e0 A2 .byte 0xa2
+ 2853 01e1 F7010000 .long 0x1f7
+ 2854 01e5 02 .byte 0x2
+ 2855 01e6 23 .byte 0x23
+ 2856 01e7 38 .uleb128 0x38
+ 2857 01e8 06 .uleb128 0x6
+ 2858 01e9 00000000 .long .LASF43
+ 2859 01ed 07 .byte 0x7
+ 2860 01ee A3 .byte 0xa3
+ 2861 01ef F7010000 .long 0x1f7
+ 2862 01f3 02 .byte 0x2
+ 2863 01f4 23 .byte 0x23
+ 2864 01f5 40 .uleb128 0x40
+ 2865 01f6 00 .byte 0x0
+ 2866 01f7 04 .uleb128 0x4
+ 2867 01f8 00000000 .long .LASF44
+ 2868 01fc 06 .byte 0x6
+ 2869 01fd 40 .byte 0x40
+ 2870 01fe 02020000 .long 0x202
+ 2871 0202 0A .uleb128 0xa
+ 2872 0203 08 .byte 0x8
+ 2873 0204 08020000 .long 0x208
+ 2874 0208 0F .uleb128 0xf
+ 2875 0209 01 .byte 0x1
+ 2876 020a 14020000 .long 0x214
+ 2877 020e 10 .uleb128 0x10
+
GAS LISTING /tmp/ccXzRABk.s page 79
+
+
+ 2878 020f B4000000 .long 0xb4
+ 2879 0213 00 .byte 0x0
+ 2880 0214 04 .uleb128 0x4
+ 2881 0215 00000000 .long .LASF45
+ 2882 0219 07 .byte 0x7
+ 2883 021a 2C .byte 0x2c
+ 2884 021b 1F020000 .long 0x21f
+ 2885 021f 05 .uleb128 0x5
+ 2886 0220 00000000 .long .LASF45
+ 2887 0224 50 .byte 0x50
+ 2888 0225 07 .byte 0x7
+ 2889 0226 2B .byte 0x2b
+ 2890 0227 48020000 .long 0x248
+ 2891 022b 0E .uleb128 0xe
+ 2892 022c 64616400 .string "dad"
+ 2893 0230 01 .byte 0x1
+ 2894 0231 3E .byte 0x3e
+ 2895 0232 54010000 .long 0x154
+ 2896 0236 02 .byte 0x2
+ 2897 0237 23 .byte 0x23
+ 2898 0238 00 .uleb128 0x0
+ 2899 0239 06 .uleb128 0x6
+ 2900 023a 00000000 .long .LASF46
+ 2901 023e 01 .byte 0x1
+ 2902 023f 3F .byte 0x3f
+ 2903 0240 5C070000 .long 0x75c
+ 2904 0244 02 .byte 0x2
+ 2905 0245 23 .byte 0x23
+ 2906 0246 48 .uleb128 0x48
+ 2907 0247 00 .byte 0x0
+ 2908 0248 04 .uleb128 0x4
+ 2909 0249 00000000 .long .LASF47
+ 2910 024d 07 .byte 0x7
+ 2911 024e 2F .byte 0x2f
+ 2912 024f 53020000 .long 0x253
+ 2913 0253 05 .uleb128 0x5
+ 2914 0254 00000000 .long .LASF47
+ 2915 0258 08 .byte 0x8
+ 2916 0259 07 .byte 0x7
+ 2917 025a 2F .byte 0x2f
+ 2918 025b 7C020000 .long 0x27c
+ 2919 025f 0E .uleb128 0xe
+ 2920 0260 6D616A00 .string "maj"
+ 2921 0264 07 .byte 0x7
+ 2922 0265 32 .byte 0x32
+ 2923 0266 62000000 .long 0x62
+ 2924 026a 02 .byte 0x2
+ 2925 026b 23 .byte 0x23
+ 2926 026c 00 .uleb128 0x0
+ 2927 026d 0E .uleb128 0xe
+ 2928 026e 6D696E00 .string "min"
+ 2929 0272 07 .byte 0x7
+ 2930 0273 33 .byte 0x33
+ 2931 0274 62000000 .long 0x62
+ 2932 0278 02 .byte 0x2
+ 2933 0279 23 .byte 0x23
+ 2934 027a 04 .uleb128 0x4
+
GAS LISTING /tmp/ccXzRABk.s page 80
+
+
+ 2935 027b 00 .byte 0x0
+ 2936 027c 04 .uleb128 0x4
+ 2937 027d 00000000 .long .LASF48
+ 2938 0281 07 .byte 0x7
+ 2939 0282 37 .byte 0x37
+ 2940 0283 87020000 .long 0x287
+ 2941 0287 05 .uleb128 0x5
+ 2942 0288 00000000 .long .LASF48
+ 2943 028c B0 .byte 0xb0
+ 2944 028d 07 .byte 0x7
+ 2945 028e 37 .byte 0x37
+ 2946 028f CE030000 .long 0x3ce
+ 2947 0293 06 .uleb128 0x6
+ 2948 0294 00000000 .long .LASF49
+ 2949 0298 07 .byte 0x7
+ 2950 0299 3A .byte 0x3a
+ 2951 029a 48020000 .long 0x248
+ 2952 029e 02 .byte 0x2
+ 2953 029f 23 .byte 0x23
+ 2954 02a0 00 .uleb128 0x0
+ 2955 02a1 06 .uleb128 0x6
+ 2956 02a2 00000000 .long .LASF50
+ 2957 02a6 07 .byte 0x7
+ 2958 02a7 3E .byte 0x3e
+ 2959 02a8 E4030000 .long 0x3e4
+ 2960 02ac 02 .byte 0x2
+ 2961 02ad 23 .byte 0x23
+ 2962 02ae 08 .uleb128 0x8
+ 2963 02af 06 .uleb128 0x6
+ 2964 02b0 00000000 .long .LASF51
+ 2965 02b4 07 .byte 0x7
+ 2966 02b5 40 .byte 0x40
+ 2967 02b6 04040000 .long 0x404
+ 2968 02ba 02 .byte 0x2
+ 2969 02bb 23 .byte 0x23
+ 2970 02bc 10 .uleb128 0x10
+ 2971 02bd 06 .uleb128 0x6
+ 2972 02be 00000000 .long .LASF52
+ 2973 02c2 07 .byte 0x7
+ 2974 02c3 44 .byte 0x44
+ 2975 02c4 04040000 .long 0x404
+ 2976 02c8 02 .byte 0x2
+ 2977 02c9 23 .byte 0x23
+ 2978 02ca 18 .uleb128 0x18
+ 2979 02cb 06 .uleb128 0x6
+ 2980 02cc 00000000 .long .LASF53
+ 2981 02d0 07 .byte 0x7
+ 2982 02d1 48 .byte 0x48
+ 2983 02d2 26040000 .long 0x426
+ 2984 02d6 02 .byte 0x2
+ 2985 02d7 23 .byte 0x23
+ 2986 02d8 20 .uleb128 0x20
+ 2987 02d9 06 .uleb128 0x6
+ 2988 02da 00000000 .long .LASF54
+ 2989 02de 07 .byte 0x7
+ 2990 02df 4B .byte 0x4b
+ 2991 02e0 26040000 .long 0x426
+
GAS LISTING /tmp/ccXzRABk.s page 81
+
+
+ 2992 02e4 02 .byte 0x2
+ 2993 02e5 23 .byte 0x23
+ 2994 02e6 28 .uleb128 0x28
+ 2995 02e7 06 .uleb128 0x6
+ 2996 02e8 00000000 .long .LASF55
+ 2997 02ec 07 .byte 0x7
+ 2998 02ed 4E .byte 0x4e
+ 2999 02ee 41040000 .long 0x441
+ 3000 02f2 02 .byte 0x2
+ 3001 02f3 23 .byte 0x23
+ 3002 02f4 30 .uleb128 0x30
+ 3003 02f5 06 .uleb128 0x6
+ 3004 02f6 00000000 .long .LASF56
+ 3005 02fa 07 .byte 0x7
+ 3006 02fb 51 .byte 0x51
+ 3007 02fc 41040000 .long 0x441
+ 3008 0300 02 .byte 0x2
+ 3009 0301 23 .byte 0x23
+ 3010 0302 38 .uleb128 0x38
+ 3011 0303 06 .uleb128 0x6
+ 3012 0304 00000000 .long .LASF57
+ 3013 0308 07 .byte 0x7
+ 3014 0309 55 .byte 0x55
+ 3015 030a 6C040000 .long 0x46c
+ 3016 030e 02 .byte 0x2
+ 3017 030f 23 .byte 0x23
+ 3018 0310 40 .uleb128 0x40
+ 3019 0311 06 .uleb128 0x6
+ 3020 0312 00000000 .long .LASF58
+ 3021 0316 07 .byte 0x7
+ 3022 0317 58 .byte 0x58
+ 3023 0318 6C040000 .long 0x46c
+ 3024 031c 02 .byte 0x2
+ 3025 031d 23 .byte 0x23
+ 3026 031e 48 .uleb128 0x48
+ 3027 031f 06 .uleb128 0x6
+ 3028 0320 00000000 .long .LASF59
+ 3029 0324 07 .byte 0x7
+ 3030 0325 5D .byte 0x5d
+ 3031 0326 91040000 .long 0x491
+ 3032 032a 02 .byte 0x2
+ 3033 032b 23 .byte 0x23
+ 3034 032c 50 .uleb128 0x50
+ 3035 032d 06 .uleb128 0x6
+ 3036 032e 00000000 .long .LASF60
+ 3037 0332 07 .byte 0x7
+ 3038 0333 62 .byte 0x62
+ 3039 0334 91040000 .long 0x491
+ 3040 0338 02 .byte 0x2
+ 3041 0339 23 .byte 0x23
+ 3042 033a 58 .uleb128 0x58
+ 3043 033b 06 .uleb128 0x6
+ 3044 033c 00000000 .long .LASF61
+ 3045 0340 07 .byte 0x7
+ 3046 0341 68 .byte 0x68
+ 3047 0342 B6040000 .long 0x4b6
+ 3048 0346 02 .byte 0x2
+
GAS LISTING /tmp/ccXzRABk.s page 82
+
+
+ 3049 0347 23 .byte 0x23
+ 3050 0348 60 .uleb128 0x60
+ 3051 0349 06 .uleb128 0x6
+ 3052 034a 00000000 .long .LASF62
+ 3053 034e 07 .byte 0x7
+ 3054 034f 6C .byte 0x6c
+ 3055 0350 B6040000 .long 0x4b6
+ 3056 0354 02 .byte 0x2
+ 3057 0355 23 .byte 0x23
+ 3058 0356 68 .uleb128 0x68
+ 3059 0357 06 .uleb128 0x6
+ 3060 0358 00000000 .long .LASF63
+ 3061 035c 07 .byte 0x7
+ 3062 035d 72 .byte 0x72
+ 3063 035e B6040000 .long 0x4b6
+ 3064 0362 02 .byte 0x2
+ 3065 0363 23 .byte 0x23
+ 3066 0364 70 .uleb128 0x70
+ 3067 0365 06 .uleb128 0x6
+ 3068 0366 00000000 .long .LASF64
+ 3069 036a 07 .byte 0x7
+ 3070 036b 74 .byte 0x74
+ 3071 036c B6040000 .long 0x4b6
+ 3072 0370 02 .byte 0x2
+ 3073 0371 23 .byte 0x23
+ 3074 0372 78 .uleb128 0x78
+ 3075 0373 06 .uleb128 0x6
+ 3076 0374 00000000 .long .LASF65
+ 3077 0378 07 .byte 0x7
+ 3078 0379 78 .byte 0x78
+ 3079 037a B6040000 .long 0x4b6
+ 3080 037e 03 .byte 0x3
+ 3081 037f 23 .byte 0x23
+ 3082 0380 8001 .uleb128 0x80
+ 3083 0382 06 .uleb128 0x6
+ 3084 0383 00000000 .long .LASF66
+ 3085 0387 07 .byte 0x7
+ 3086 0388 7A .byte 0x7a
+ 3087 0389 B6040000 .long 0x4b6
+ 3088 038d 03 .byte 0x3
+ 3089 038e 23 .byte 0x23
+ 3090 038f 8801 .uleb128 0x88
+ 3091 0391 06 .uleb128 0x6
+ 3092 0392 00000000 .long .LASF67
+ 3093 0396 07 .byte 0x7
+ 3094 0397 7E .byte 0x7e
+ 3095 0398 B6040000 .long 0x4b6
+ 3096 039c 03 .byte 0x3
+ 3097 039d 23 .byte 0x23
+ 3098 039e 9001 .uleb128 0x90
+ 3099 03a0 06 .uleb128 0x6
+ 3100 03a1 00000000 .long .LASF68
+ 3101 03a5 07 .byte 0x7
+ 3102 03a6 80 .byte 0x80
+ 3103 03a7 B6040000 .long 0x4b6
+ 3104 03ab 03 .byte 0x3
+ 3105 03ac 23 .byte 0x23
+
GAS LISTING /tmp/ccXzRABk.s page 83
+
+
+ 3106 03ad 9801 .uleb128 0x98
+ 3107 03af 06 .uleb128 0x6
+ 3108 03b0 00000000 .long .LASF69
+ 3109 03b4 07 .byte 0x7
+ 3110 03b5 84 .byte 0x84
+ 3111 03b6 B6040000 .long 0x4b6
+ 3112 03ba 03 .byte 0x3
+ 3113 03bb 23 .byte 0x23
+ 3114 03bc A001 .uleb128 0xa0
+ 3115 03be 06 .uleb128 0x6
+ 3116 03bf 00000000 .long .LASF70
+ 3117 03c3 07 .byte 0x7
+ 3118 03c4 86 .byte 0x86
+ 3119 03c5 B6040000 .long 0x4b6
+ 3120 03c9 03 .byte 0x3
+ 3121 03ca 23 .byte 0x23
+ 3122 03cb A801 .uleb128 0xa8
+ 3123 03cd 00 .byte 0x0
+ 3124 03ce 11 .uleb128 0x11
+ 3125 03cf 01 .byte 0x1
+ 3126 03d0 7B000000 .long 0x7b
+ 3127 03d4 DE030000 .long 0x3de
+ 3128 03d8 10 .uleb128 0x10
+ 3129 03d9 DE030000 .long 0x3de
+ 3130 03dd 00 .byte 0x0
+ 3131 03de 0A .uleb128 0xa
+ 3132 03df 08 .byte 0x8
+ 3133 03e0 14020000 .long 0x214
+ 3134 03e4 0A .uleb128 0xa
+ 3135 03e5 08 .byte 0x8
+ 3136 03e6 CE030000 .long 0x3ce
+ 3137 03ea 11 .uleb128 0x11
+ 3138 03eb 01 .byte 0x1
+ 3139 03ec 7B000000 .long 0x7b
+ 3140 03f0 04040000 .long 0x404
+ 3141 03f4 10 .uleb128 0x10
+ 3142 03f5 DE030000 .long 0x3de
+ 3143 03f9 10 .uleb128 0x10
+ 3144 03fa B6000000 .long 0xb6
+ 3145 03fe 10 .uleb128 0x10
+ 3146 03ff 62000000 .long 0x62
+ 3147 0403 00 .byte 0x0
+ 3148 0404 0A .uleb128 0xa
+ 3149 0405 08 .byte 0x8
+ 3150 0406 EA030000 .long 0x3ea
+ 3151 040a 11 .uleb128 0x11
+ 3152 040b 01 .byte 0x1
+ 3153 040c 7B000000 .long 0x7b
+ 3154 0410 1F040000 .long 0x41f
+ 3155 0414 10 .uleb128 0x10
+ 3156 0415 DE030000 .long 0x3de
+ 3157 0419 10 .uleb128 0x10
+ 3158 041a 1F040000 .long 0x41f
+ 3159 041e 00 .byte 0x0
+ 3160 041f 0A .uleb128 0xa
+ 3161 0420 08 .byte 0x8
+ 3162 0421 25040000 .long 0x425
+
GAS LISTING /tmp/ccXzRABk.s page 84
+
+
+ 3163 0425 12 .uleb128 0x12
+ 3164 0426 0A .uleb128 0xa
+ 3165 0427 08 .byte 0x8
+ 3166 0428 0A040000 .long 0x40a
+ 3167 042c 11 .uleb128 0x11
+ 3168 042d 01 .byte 0x1
+ 3169 042e 7B000000 .long 0x7b
+ 3170 0432 41040000 .long 0x441
+ 3171 0436 10 .uleb128 0x10
+ 3172 0437 DE030000 .long 0x3de
+ 3173 043b 10 .uleb128 0x10
+ 3174 043c F7010000 .long 0x1f7
+ 3175 0440 00 .byte 0x0
+ 3176 0441 0A .uleb128 0xa
+ 3177 0442 08 .byte 0x8
+ 3178 0443 2C040000 .long 0x42c
+ 3179 0447 11 .uleb128 0x11
+ 3180 0448 01 .byte 0x1
+ 3181 0449 7B000000 .long 0x7b
+ 3182 044d 61040000 .long 0x461
+ 3183 0451 10 .uleb128 0x10
+ 3184 0452 61040000 .long 0x461
+ 3185 0456 10 .uleb128 0x10
+ 3186 0457 1F040000 .long 0x41f
+ 3187 045b 10 .uleb128 0x10
+ 3188 045c B4000000 .long 0xb4
+ 3189 0460 00 .byte 0x0
+ 3190 0461 0A .uleb128 0xa
+ 3191 0462 08 .byte 0x8
+ 3192 0463 67040000 .long 0x467
+ 3193 0467 0B .uleb128 0xb
+ 3194 0468 14020000 .long 0x214
+ 3195 046c 0A .uleb128 0xa
+ 3196 046d 08 .byte 0x8
+ 3197 046e 47040000 .long 0x447
+ 3198 0472 11 .uleb128 0x11
+ 3199 0473 01 .byte 0x1
+ 3200 0474 7B000000 .long 0x7b
+ 3201 0478 91040000 .long 0x491
+ 3202 047c 10 .uleb128 0x10
+ 3203 047d 61040000 .long 0x461
+ 3204 0481 10 .uleb128 0x10
+ 3205 0482 1F040000 .long 0x41f
+ 3206 0486 10 .uleb128 0x10
+ 3207 0487 B4000000 .long 0xb4
+ 3208 048b 10 .uleb128 0x10
+ 3209 048c 62000000 .long 0x62
+ 3210 0490 00 .byte 0x0
+ 3211 0491 0A .uleb128 0xa
+ 3212 0492 08 .byte 0x8
+ 3213 0493 72040000 .long 0x472
+ 3214 0497 11 .uleb128 0x11
+ 3215 0498 01 .byte 0x1
+ 3216 0499 7B000000 .long 0x7b
+ 3217 049d B6040000 .long 0x4b6
+ 3218 04a1 10 .uleb128 0x10
+ 3219 04a2 DE030000 .long 0x3de
+
GAS LISTING /tmp/ccXzRABk.s page 85
+
+
+ 3220 04a6 10 .uleb128 0x10
+ 3221 04a7 1F040000 .long 0x41f
+ 3222 04ab 10 .uleb128 0x10
+ 3223 04ac B4000000 .long 0xb4
+ 3224 04b0 10 .uleb128 0x10
+ 3225 04b1 62000000 .long 0x62
+ 3226 04b5 00 .byte 0x0
+ 3227 04b6 0A .uleb128 0xa
+ 3228 04b7 08 .byte 0x8
+ 3229 04b8 97040000 .long 0x497
+ 3230 04bc 04 .uleb128 0x4
+ 3231 04bd 00000000 .long .LASF71
+ 3232 04c1 07 .byte 0x7
+ 3233 04c2 90 .byte 0x90
+ 3234 04c3 C7040000 .long 0x4c7
+ 3235 04c7 13 .uleb128 0x13
+ 3236 04c8 00000000 .long .LASF71
+ 3237 04cc 08 .byte 0x8
+ 3238 04cd 07 .byte 0x7
+ 3239 04ce 90 .byte 0x90
+ 3240 04cf E9040000 .long 0x4e9
+ 3241 04d3 14 .uleb128 0x14
+ 3242 04d4 00000000 .long .LASF49
+ 3243 04d8 07 .byte 0x7
+ 3244 04d9 93 .byte 0x93
+ 3245 04da E9040000 .long 0x4e9
+ 3246 04de 15 .uleb128 0x15
+ 3247 04df 763100 .string "v1"
+ 3248 04e2 07 .byte 0x7
+ 3249 04e3 94 .byte 0x94
+ 3250 04e4 F4040000 .long 0x4f4
+ 3251 04e8 00 .byte 0x0
+ 3252 04e9 0A .uleb128 0xa
+ 3253 04ea 08 .byte 0x8
+ 3254 04eb EF040000 .long 0x4ef
+ 3255 04ef 0B .uleb128 0xb
+ 3256 04f0 48020000 .long 0x248
+ 3257 04f4 0A .uleb128 0xa
+ 3258 04f5 08 .byte 0x8
+ 3259 04f6 FA040000 .long 0x4fa
+ 3260 04fa 0B .uleb128 0xb
+ 3261 04fb 7C020000 .long 0x27c
+ 3262 04ff 02 .uleb128 0x2
+ 3263 0500 08 .byte 0x8
+ 3264 0501 05 .byte 0x5
+ 3265 0502 00000000 .long .LASF72
+ 3266 0506 02 .uleb128 0x2
+ 3267 0507 04 .byte 0x4
+ 3268 0508 04 .byte 0x4
+ 3269 0509 00000000 .long .LASF73
+ 3270 050d 0A .uleb128 0xa
+ 3271 050e 08 .byte 0x8
+ 3272 050f C1000000 .long 0xc1
+ 3273 0513 02 .uleb128 0x2
+ 3274 0514 08 .byte 0x8
+ 3275 0515 07 .byte 0x7
+ 3276 0516 00000000 .long .LASF74
+
GAS LISTING /tmp/ccXzRABk.s page 86
+
+
+ 3277 051a 02 .uleb128 0x2
+ 3278 051b 08 .byte 0x8
+ 3279 051c 04 .byte 0x4
+ 3280 051d 00000000 .long .LASF75
+ 3281 0521 04 .uleb128 0x4
+ 3282 0522 00000000 .long .LASF76
+ 3283 0526 08 .byte 0x8
+ 3284 0527 26 .byte 0x26
+ 3285 0528 2C050000 .long 0x52c
+ 3286 052c 16 .uleb128 0x16
+ 3287 052d 01 .byte 0x1
+ 3288 052e 49000000 .long 0x49
+ 3289 0532 3D050000 .long 0x53d
+ 3290 0536 17 .uleb128 0x17
+ 3291 0537 B1000000 .long 0xb1
+ 3292 053b 0F .byte 0xf
+ 3293 053c 00 .byte 0x0
+ 3294 053d 04 .uleb128 0x4
+ 3295 053e 00000000 .long .LASF77
+ 3296 0542 09 .byte 0x9
+ 3297 0543 3B .byte 0x3b
+ 3298 0544 21050000 .long 0x521
+ 3299 0548 04 .uleb128 0x4
+ 3300 0549 00000000 .long .LASF78
+ 3301 054d 09 .byte 0x9
+ 3302 054e 43 .byte 0x43
+ 3303 054f 53050000 .long 0x553
+ 3304 0553 05 .uleb128 0x5
+ 3305 0554 00000000 .long .LASF78
+ 3306 0558 08 .byte 0x8
+ 3307 0559 09 .byte 0x9
+ 3308 055a 43 .byte 0x43
+ 3309 055b 7C050000 .long 0x57c
+ 3310 055f 0E .uleb128 0xe
+ 3311 0560 6D616A00 .string "maj"
+ 3312 0564 09 .byte 0x9
+ 3313 0565 46 .byte 0x46
+ 3314 0566 62000000 .long 0x62
+ 3315 056a 02 .byte 0x2
+ 3316 056b 23 .byte 0x23
+ 3317 056c 00 .uleb128 0x0
+ 3318 056d 0E .uleb128 0xe
+ 3319 056e 6D696E00 .string "min"
+ 3320 0572 09 .byte 0x9
+ 3321 0573 47 .byte 0x47
+ 3322 0574 62000000 .long 0x62
+ 3323 0578 02 .byte 0x2
+ 3324 0579 23 .byte 0x23
+ 3325 057a 04 .uleb128 0x4
+ 3326 057b 00 .byte 0x0
+ 3327 057c 04 .uleb128 0x4
+ 3328 057d 00000000 .long .LASF79
+ 3329 0581 09 .byte 0x9
+ 3330 0582 52 .byte 0x52
+ 3331 0583 87050000 .long 0x587
+ 3332 0587 05 .uleb128 0x5
+ 3333 0588 00000000 .long .LASF79
+
GAS LISTING /tmp/ccXzRABk.s page 87
+
+
+ 3334 058c 40 .byte 0x40
+ 3335 058d 09 .byte 0x9
+ 3336 058e 52 .byte 0x52
+ 3337 058f 04060000 .long 0x604
+ 3338 0593 06 .uleb128 0x6
+ 3339 0594 00000000 .long .LASF49
+ 3340 0598 09 .byte 0x9
+ 3341 0599 5E .byte 0x5e
+ 3342 059a 48050000 .long 0x548
+ 3343 059e 02 .byte 0x2
+ 3344 059f 23 .byte 0x23
+ 3345 05a0 00 .uleb128 0x0
+ 3346 05a1 06 .uleb128 0x6
+ 3347 05a2 00000000 .long .LASF50
+ 3348 05a6 09 .byte 0x9
+ 3349 05a7 63 .byte 0x63
+ 3350 05a8 48060000 .long 0x648
+ 3351 05ac 02 .byte 0x2
+ 3352 05ad 23 .byte 0x23
+ 3353 05ae 08 .uleb128 0x8
+ 3354 05af 06 .uleb128 0x6
+ 3355 05b0 00000000 .long .LASF36
+ 3356 05b4 09 .byte 0x9
+ 3357 05b5 65 .byte 0x65
+ 3358 05b6 59060000 .long 0x659
+ 3359 05ba 02 .byte 0x2
+ 3360 05bb 23 .byte 0x23
+ 3361 05bc 10 .uleb128 0x10
+ 3362 05bd 06 .uleb128 0x6
+ 3363 05be 00000000 .long .LASF80
+ 3364 05c2 09 .byte 0x9
+ 3365 05c3 67 .byte 0x67
+ 3366 05c4 59060000 .long 0x659
+ 3367 05c8 02 .byte 0x2
+ 3368 05c9 23 .byte 0x23
+ 3369 05ca 18 .uleb128 0x18
+ 3370 05cb 06 .uleb128 0x6
+ 3371 05cc 00000000 .long .LASF51
+ 3372 05d0 09 .byte 0x9
+ 3373 05d1 69 .byte 0x69
+ 3374 05d2 79060000 .long 0x679
+ 3375 05d6 02 .byte 0x2
+ 3376 05d7 23 .byte 0x23
+ 3377 05d8 20 .uleb128 0x20
+ 3378 05d9 06 .uleb128 0x6
+ 3379 05da 00000000 .long .LASF52
+ 3380 05de 09 .byte 0x9
+ 3381 05df 6D .byte 0x6d
+ 3382 05e0 79060000 .long 0x679
+ 3383 05e4 02 .byte 0x2
+ 3384 05e5 23 .byte 0x23
+ 3385 05e6 28 .uleb128 0x28
+ 3386 05e7 06 .uleb128 0x6
+ 3387 05e8 00000000 .long .LASF57
+ 3388 05ec 09 .byte 0x9
+ 3389 05ed 71 .byte 0x71
+ 3390 05ee 95060000 .long 0x695
+
GAS LISTING /tmp/ccXzRABk.s page 88
+
+
+ 3391 05f2 02 .byte 0x2
+ 3392 05f3 23 .byte 0x23
+ 3393 05f4 30 .uleb128 0x30
+ 3394 05f5 06 .uleb128 0x6
+ 3395 05f6 00000000 .long .LASF58
+ 3396 05fa 09 .byte 0x9
+ 3397 05fb 75 .byte 0x75
+ 3398 05fc 95060000 .long 0x695
+ 3399 0600 02 .byte 0x2
+ 3400 0601 23 .byte 0x23
+ 3401 0602 38 .uleb128 0x38
+ 3402 0603 00 .byte 0x0
+ 3403 0604 04 .uleb128 0x4
+ 3404 0605 00000000 .long .LASF81
+ 3405 0609 09 .byte 0x9
+ 3406 060a 53 .byte 0x53
+ 3407 060b 0F060000 .long 0x60f
+ 3408 060f 13 .uleb128 0x13
+ 3409 0610 00000000 .long .LASF81
+ 3410 0614 40 .byte 0x40
+ 3411 0615 09 .byte 0x9
+ 3412 0616 53 .byte 0x53
+ 3413 0617 31060000 .long 0x631
+ 3414 061b 14 .uleb128 0x14
+ 3415 061c 00000000 .long .LASF49
+ 3416 0620 09 .byte 0x9
+ 3417 0621 7F .byte 0x7f
+ 3418 0622 48050000 .long 0x548
+ 3419 0626 15 .uleb128 0x15
+ 3420 0627 763100 .string "v1"
+ 3421 062a 09 .byte 0x9
+ 3422 062b 80 .byte 0x80
+ 3423 062c 7C050000 .long 0x57c
+ 3424 0630 00 .byte 0x0
+ 3425 0631 0F .uleb128 0xf
+ 3426 0632 01 .byte 0x1
+ 3427 0633 3D060000 .long 0x63d
+ 3428 0637 10 .uleb128 0x10
+ 3429 0638 3D060000 .long 0x63d
+ 3430 063c 00 .byte 0x0
+ 3431 063d 0A .uleb128 0xa
+ 3432 063e 08 .byte 0x8
+ 3433 063f 43060000 .long 0x643
+ 3434 0643 0B .uleb128 0xb
+ 3435 0644 04060000 .long 0x604
+ 3436 0648 0A .uleb128 0xa
+ 3437 0649 08 .byte 0x8
+ 3438 064a 31060000 .long 0x631
+ 3439 064e 18 .uleb128 0x18
+ 3440 064f 62000000 .long 0x62
+ 3441 0653 59060000 .long 0x659
+ 3442 0657 19 .uleb128 0x19
+ 3443 0658 00 .byte 0x0
+ 3444 0659 0A .uleb128 0xa
+ 3445 065a 08 .byte 0x8
+ 3446 065b 4E060000 .long 0x64e
+ 3447 065f 11 .uleb128 0x11
+
GAS LISTING /tmp/ccXzRABk.s page 89
+
+
+ 3448 0660 01 .byte 0x1
+ 3449 0661 7B000000 .long 0x7b
+ 3450 0665 79060000 .long 0x679
+ 3451 0669 10 .uleb128 0x10
+ 3452 066a B4000000 .long 0xb4
+ 3453 066e 10 .uleb128 0x10
+ 3454 066f B6000000 .long 0xb6
+ 3455 0673 10 .uleb128 0x10
+ 3456 0674 62000000 .long 0x62
+ 3457 0678 00 .byte 0x0
+ 3458 0679 0A .uleb128 0xa
+ 3459 067a 08 .byte 0x8
+ 3460 067b 5F060000 .long 0x65f
+ 3461 067f 0F .uleb128 0xf
+ 3462 0680 01 .byte 0x1
+ 3463 0681 95060000 .long 0x695
+ 3464 0685 10 .uleb128 0x10
+ 3465 0686 B6000000 .long 0xb6
+ 3466 068a 10 .uleb128 0x10
+ 3467 068b 0D050000 .long 0x50d
+ 3468 068f 10 .uleb128 0x10
+ 3469 0690 1F040000 .long 0x41f
+ 3470 0694 00 .byte 0x0
+ 3471 0695 0A .uleb128 0xa
+ 3472 0696 08 .byte 0x8
+ 3473 0697 7F060000 .long 0x67f
+ 3474 069b 04 .uleb128 0x4
+ 3475 069c 00000000 .long .LASF82
+ 3476 06a0 09 .byte 0x9
+ 3477 06a1 84 .byte 0x84
+ 3478 06a2 A6060000 .long 0x6a6
+ 3479 06a6 05 .uleb128 0x5
+ 3480 06a7 00000000 .long .LASF82
+ 3481 06ab 40 .byte 0x40
+ 3482 06ac 09 .byte 0x9
+ 3483 06ad 84 .byte 0x84
+ 3484 06ae 23070000 .long 0x723
+ 3485 06b2 06 .uleb128 0x6
+ 3486 06b3 00000000 .long .LASF49
+ 3487 06b7 09 .byte 0x9
+ 3488 06b8 90 .byte 0x90
+ 3489 06b9 48050000 .long 0x548
+ 3490 06bd 02 .byte 0x2
+ 3491 06be 23 .byte 0x23
+ 3492 06bf 00 .uleb128 0x0
+ 3493 06c0 06 .uleb128 0x6
+ 3494 06c1 00000000 .long .LASF50
+ 3495 06c5 09 .byte 0x9
+ 3496 06c6 95 .byte 0x95
+ 3497 06c7 67070000 .long 0x767
+ 3498 06cb 02 .byte 0x2
+ 3499 06cc 23 .byte 0x23
+ 3500 06cd 08 .uleb128 0x8
+ 3501 06ce 06 .uleb128 0x6
+ 3502 06cf 00000000 .long .LASF36
+ 3503 06d3 09 .byte 0x9
+ 3504 06d4 97 .byte 0x97
+
GAS LISTING /tmp/ccXzRABk.s page 90
+
+
+ 3505 06d5 59060000 .long 0x659
+ 3506 06d9 02 .byte 0x2
+ 3507 06da 23 .byte 0x23
+ 3508 06db 10 .uleb128 0x10
+ 3509 06dc 06 .uleb128 0x6
+ 3510 06dd 00000000 .long .LASF80
+ 3511 06e1 09 .byte 0x9
+ 3512 06e2 99 .byte 0x99
+ 3513 06e3 59060000 .long 0x659
+ 3514 06e7 02 .byte 0x2
+ 3515 06e8 23 .byte 0x23
+ 3516 06e9 18 .uleb128 0x18
+ 3517 06ea 06 .uleb128 0x6
+ 3518 06eb 00000000 .long .LASF51
+ 3519 06ef 09 .byte 0x9
+ 3520 06f0 9B .byte 0x9b
+ 3521 06f1 79060000 .long 0x679
+ 3522 06f5 02 .byte 0x2
+ 3523 06f6 23 .byte 0x23
+ 3524 06f7 20 .uleb128 0x20
+ 3525 06f8 06 .uleb128 0x6
+ 3526 06f9 00000000 .long .LASF52
+ 3527 06fd 09 .byte 0x9
+ 3528 06fe 9F .byte 0x9f
+ 3529 06ff 79060000 .long 0x679
+ 3530 0703 02 .byte 0x2
+ 3531 0704 23 .byte 0x23
+ 3532 0705 28 .uleb128 0x28
+ 3533 0706 06 .uleb128 0x6
+ 3534 0707 00000000 .long .LASF57
+ 3535 070b 09 .byte 0x9
+ 3536 070c A3 .byte 0xa3
+ 3537 070d 82070000 .long 0x782
+ 3538 0711 02 .byte 0x2
+ 3539 0712 23 .byte 0x23
+ 3540 0713 30 .uleb128 0x30
+ 3541 0714 06 .uleb128 0x6
+ 3542 0715 00000000 .long .LASF58
+ 3543 0719 09 .byte 0x9
+ 3544 071a A6 .byte 0xa6
+ 3545 071b 82070000 .long 0x782
+ 3546 071f 02 .byte 0x2
+ 3547 0720 23 .byte 0x23
+ 3548 0721 38 .uleb128 0x38
+ 3549 0722 00 .byte 0x0
+ 3550 0723 04 .uleb128 0x4
+ 3551 0724 00000000 .long .LASF83
+ 3552 0728 09 .byte 0x9
+ 3553 0729 85 .byte 0x85
+ 3554 072a 2E070000 .long 0x72e
+ 3555 072e 13 .uleb128 0x13
+ 3556 072f 00000000 .long .LASF83
+ 3557 0733 40 .byte 0x40
+ 3558 0734 09 .byte 0x9
+ 3559 0735 85 .byte 0x85
+ 3560 0736 50070000 .long 0x750
+ 3561 073a 14 .uleb128 0x14
+
GAS LISTING /tmp/ccXzRABk.s page 91
+
+
+ 3562 073b 00000000 .long .LASF49
+ 3563 073f 09 .byte 0x9
+ 3564 0740 AF .byte 0xaf
+ 3565 0741 48050000 .long 0x548
+ 3566 0745 15 .uleb128 0x15
+ 3567 0746 763100 .string "v1"
+ 3568 0749 09 .byte 0x9
+ 3569 074a B0 .byte 0xb0
+ 3570 074b 9B060000 .long 0x69b
+ 3571 074f 00 .byte 0x0
+ 3572 0750 0F .uleb128 0xf
+ 3573 0751 01 .byte 0x1
+ 3574 0752 5C070000 .long 0x75c
+ 3575 0756 10 .uleb128 0x10
+ 3576 0757 5C070000 .long 0x75c
+ 3577 075b 00 .byte 0x0
+ 3578 075c 0A .uleb128 0xa
+ 3579 075d 08 .byte 0x8
+ 3580 075e 62070000 .long 0x762
+ 3581 0762 0B .uleb128 0xb
+ 3582 0763 23070000 .long 0x723
+ 3583 0767 0A .uleb128 0xa
+ 3584 0768 08 .byte 0x8
+ 3585 0769 50070000 .long 0x750
+ 3586 076d 11 .uleb128 0x11
+ 3587 076e 01 .byte 0x1
+ 3588 076f 3D050000 .long 0x53d
+ 3589 0773 82070000 .long 0x782
+ 3590 0777 10 .uleb128 0x10
+ 3591 0778 3D050000 .long 0x53d
+ 3592 077c 10 .uleb128 0x10
+ 3593 077d 1F040000 .long 0x41f
+ 3594 0781 00 .byte 0x0
+ 3595 0782 0A .uleb128 0xa
+ 3596 0783 08 .byte 0x8
+ 3597 0784 6D070000 .long 0x76d
+ 3598 0788 04 .uleb128 0x4
+ 3599 0789 00000000 .long .LASF84
+ 3600 078d 0A .byte 0xa
+ 3601 078e B0 .byte 0xb0
+ 3602 078f 93070000 .long 0x793
+ 3603 0793 1A .uleb128 0x1a
+ 3604 0794 00000000 .long .LASF84
+ 3605 0798 0001 .value 0x100
+ 3606 079a 0A .byte 0xa
+ 3607 079b B0 .byte 0xb0
+ 3608 079c BE070000 .long 0x7be
+ 3609 07a0 06 .uleb128 0x6
+ 3610 07a1 00000000 .long .LASF85
+ 3611 07a5 0A .byte 0xa
+ 3612 07a6 B3 .byte 0xb3
+ 3613 07a7 BE070000 .long 0x7be
+ 3614 07ab 02 .byte 0x2
+ 3615 07ac 23 .byte 0x23
+ 3616 07ad 00 .uleb128 0x0
+ 3617 07ae 06 .uleb128 0x6
+ 3618 07af 00000000 .long .LASF86
+
GAS LISTING /tmp/ccXzRABk.s page 92
+
+
+ 3619 07b3 0A .byte 0xa
+ 3620 07b4 B4 .byte 0xb4
+ 3621 07b5 62000000 .long 0x62
+ 3622 07b9 03 .byte 0x3
+ 3623 07ba 23 .byte 0x23
+ 3624 07bb F001 .uleb128 0xf0
+ 3625 07bd 00 .byte 0x0
+ 3626 07be 1B .uleb128 0x1b
+ 3627 07bf 3D050000 .long 0x53d
+ 3628 07c3 CE070000 .long 0x7ce
+ 3629 07c7 17 .uleb128 0x17
+ 3630 07c8 B1000000 .long 0xb1
+ 3631 07cc 0E .byte 0xe
+ 3632 07cd 00 .byte 0x0
+ 3633 07ce 04 .uleb128 0x4
+ 3634 07cf 00000000 .long .LASF87
+ 3635 07d3 0A .byte 0xa
+ 3636 07d4 D2 .byte 0xd2
+ 3637 07d5 D9070000 .long 0x7d9
+ 3638 07d9 1A .uleb128 0x1a
+ 3639 07da 00000000 .long .LASF87
+ 3640 07de 7002 .value 0x270
+ 3641 07e0 0A .byte 0xa
+ 3642 07e1 D2 .byte 0xd2
+ 3643 07e2 30080000 .long 0x830
+ 3644 07e6 0E .uleb128 0xe
+ 3645 07e7 64616400 .string "dad"
+ 3646 07eb 0A .byte 0xa
+ 3647 07ec D5 .byte 0xd5
+ 3648 07ed 54010000 .long 0x154
+ 3649 07f1 02 .byte 0x2
+ 3650 07f2 23 .byte 0x23
+ 3651 07f3 00 .uleb128 0x0
+ 3652 07f4 06 .uleb128 0x6
+ 3653 07f5 00000000 .long .LASF88
+ 3654 07f9 0A .byte 0xa
+ 3655 07fa D6 .byte 0xd6
+ 3656 07fb 88070000 .long 0x788
+ 3657 07ff 02 .byte 0x2
+ 3658 0800 23 .byte 0x23
+ 3659 0801 50 .uleb128 0x50
+ 3660 0802 06 .uleb128 0x6
+ 3661 0803 00000000 .long .LASF89
+ 3662 0807 0A .byte 0xa
+ 3663 0808 D7 .byte 0xd7
+ 3664 0809 88070000 .long 0x788
+ 3665 080d 03 .byte 0x3
+ 3666 080e 23 .byte 0x23
+ 3667 080f D002 .uleb128 0x150
+ 3668 0811 06 .uleb128 0x6
+ 3669 0812 00000000 .long .LASF90
+ 3670 0816 0A .byte 0xa
+ 3671 0817 D8 .byte 0xd8
+ 3672 0818 3D050000 .long 0x53d
+ 3673 081c 03 .byte 0x3
+ 3674 081d 23 .byte 0x23
+ 3675 081e D004 .uleb128 0x250
+
GAS LISTING /tmp/ccXzRABk.s page 93
+
+
+ 3676 0820 06 .uleb128 0x6
+ 3677 0821 00000000 .long .LASF91
+ 3678 0825 0A .byte 0xa
+ 3679 0826 D9 .byte 0xd9
+ 3680 0827 3D050000 .long 0x53d
+ 3681 082b 03 .byte 0x3
+ 3682 082c 23 .byte 0x23
+ 3683 082d E004 .uleb128 0x260
+ 3684 082f 00 .byte 0x0
+ 3685 0830 04 .uleb128 0x4
+ 3686 0831 00000000 .long .LASF92
+ 3687 0835 0B .byte 0xb
+ 3688 0836 29 .byte 0x29
+ 3689 0837 3B080000 .long 0x83b
+ 3690 083b 05 .uleb128 0x5
+ 3691 083c 00000000 .long .LASF92
+ 3692 0840 70 .byte 0x70
+ 3693 0841 0B .byte 0xb
+ 3694 0842 29 .byte 0x29
+ 3695 0843 72080000 .long 0x872
+ 3696 0847 0E .uleb128 0xe
+ 3697 0848 64616400 .string "dad"
+ 3698 084c 0B .byte 0xb
+ 3699 084d 2C .byte 0x2c
+ 3700 084e 54010000 .long 0x154
+ 3701 0852 02 .byte 0x2
+ 3702 0853 23 .byte 0x23
+ 3703 0854 00 .uleb128 0x0
+ 3704 0855 06 .uleb128 0x6
+ 3705 0856 00000000 .long .LASF90
+ 3706 085a 0B .byte 0xb
+ 3707 085b 2D .byte 0x2d
+ 3708 085c 3D050000 .long 0x53d
+ 3709 0860 02 .byte 0x2
+ 3710 0861 23 .byte 0x23
+ 3711 0862 50 .uleb128 0x50
+ 3712 0863 06 .uleb128 0x6
+ 3713 0864 00000000 .long .LASF91
+ 3714 0868 0B .byte 0xb
+ 3715 0869 2E .byte 0x2e
+ 3716 086a 3D050000 .long 0x53d
+ 3717 086e 02 .byte 0x2
+ 3718 086f 23 .byte 0x23
+ 3719 0870 60 .uleb128 0x60
+ 3720 0871 00 .byte 0x0
+ 3721 0872 04 .uleb128 0x4
+ 3722 0873 00000000 .long .LASF93
+ 3723 0877 0C .byte 0xc
+ 3724 0878 48 .byte 0x48
+ 3725 0879 62000000 .long 0x62
+ 3726 087d 0C .uleb128 0xc
+ 3727 087e 04 .byte 0x4
+ 3728 087f 0C .byte 0xc
+ 3729 0880 4A .byte 0x4a
+ 3730 0881 98080000 .long 0x898
+ 3731 0885 0D .uleb128 0xd
+ 3732 0886 00000000 .long .LASF94
+
GAS LISTING /tmp/ccXzRABk.s page 94
+
+
+ 3733 088a 00 .sleb128 0
+ 3734 088b 0D .uleb128 0xd
+ 3735 088c 00000000 .long .LASF95
+ 3736 0890 01 .sleb128 1
+ 3737 0891 0D .uleb128 0xd
+ 3738 0892 00000000 .long .LASF96
+ 3739 0896 02 .sleb128 2
+ 3740 0897 00 .byte 0x0
+ 3741 0898 04 .uleb128 0x4
+ 3742 0899 00000000 .long .LASF97
+ 3743 089d 0E .byte 0xe
+ 3744 089e 40 .byte 0x40
+ 3745 089f A3080000 .long 0x8a3
+ 3746 08a3 13 .uleb128 0x13
+ 3747 08a4 00000000 .long .LASF97
+ 3748 08a8 40 .byte 0x40
+ 3749 08a9 0E .byte 0xe
+ 3750 08aa 40 .byte 0x40
+ 3751 08ab C6080000 .long 0x8c6
+ 3752 08af 14 .uleb128 0x14
+ 3753 08b0 00000000 .long .LASF98
+ 3754 08b4 0E .byte 0xe
+ 3755 08b5 43 .byte 0x43
+ 3756 08b6 04060000 .long 0x604
+ 3757 08ba 15 .uleb128 0x15
+ 3758 08bb 76656300 .string "vec"
+ 3759 08bf 0E .byte 0xe
+ 3760 08c0 44 .byte 0x44
+ 3761 08c1 23070000 .long 0x723
+ 3762 08c5 00 .byte 0x0
+ 3763 08c6 1C .uleb128 0x1c
+ 3764 08c7 00000000 .long .LASF121
+ 3765 08cb 04 .byte 0x4
+ 3766 08cc 0F .byte 0xf
+ 3767 08cd 5A .byte 0x5a
+ 3768 08ce 57090000 .long 0x957
+ 3769 08d2 0D .uleb128 0xd
+ 3770 08d3 00000000 .long .LASF99
+ 3771 08d7 00 .sleb128 0
+ 3772 08d8 0D .uleb128 0xd
+ 3773 08d9 00000000 .long .LASF100
+ 3774 08dd 01 .sleb128 1
+ 3775 08de 0D .uleb128 0xd
+ 3776 08df 00000000 .long .LASF101
+ 3777 08e3 02 .sleb128 2
+ 3778 08e4 0D .uleb128 0xd
+ 3779 08e5 00000000 .long .LASF102
+ 3780 08e9 03 .sleb128 3
+ 3781 08ea 0D .uleb128 0xd
+ 3782 08eb 00000000 .long .LASF103
+ 3783 08ef 04 .sleb128 4
+ 3784 08f0 0D .uleb128 0xd
+ 3785 08f1 00000000 .long .LASF104
+ 3786 08f5 05 .sleb128 5
+ 3787 08f6 0D .uleb128 0xd
+ 3788 08f7 00000000 .long .LASF105
+ 3789 08fb 06 .sleb128 6
+
GAS LISTING /tmp/ccXzRABk.s page 95
+
+
+ 3790 08fc 0D .uleb128 0xd
+ 3791 08fd 00000000 .long .LASF106
+ 3792 0901 07 .sleb128 7
+ 3793 0902 0D .uleb128 0xd
+ 3794 0903 00000000 .long .LASF107
+ 3795 0907 08 .sleb128 8
+ 3796 0908 0D .uleb128 0xd
+ 3797 0909 00000000 .long .LASF108
+ 3798 090d 09 .sleb128 9
+ 3799 090e 0D .uleb128 0xd
+ 3800 090f 00000000 .long .LASF109
+ 3801 0913 0A .sleb128 10
+ 3802 0914 0D .uleb128 0xd
+ 3803 0915 00000000 .long .LASF110
+ 3804 0919 0B .sleb128 11
+ 3805 091a 0D .uleb128 0xd
+ 3806 091b 00000000 .long .LASF111
+ 3807 091f 0C .sleb128 12
+ 3808 0920 0D .uleb128 0xd
+ 3809 0921 00000000 .long .LASF112
+ 3810 0925 0D .sleb128 13
+ 3811 0926 0D .uleb128 0xd
+ 3812 0927 00000000 .long .LASF113
+ 3813 092b 0E .sleb128 14
+ 3814 092c 0D .uleb128 0xd
+ 3815 092d 00000000 .long .LASF114
+ 3816 0931 0E .sleb128 14
+ 3817 0932 0D .uleb128 0xd
+ 3818 0933 00000000 .long .LASF115
+ 3819 0937 0F .sleb128 15
+ 3820 0938 0D .uleb128 0xd
+ 3821 0939 00000000 .long .LASF116
+ 3822 093d 10 .sleb128 16
+ 3823 093e 0D .uleb128 0xd
+ 3824 093f 00000000 .long .LASF117
+ 3825 0943 11 .sleb128 17
+ 3826 0944 0D .uleb128 0xd
+ 3827 0945 00000000 .long .LASF118
+ 3828 0949 12 .sleb128 18
+ 3829 094a 0D .uleb128 0xd
+ 3830 094b 00000000 .long .LASF119
+ 3831 094f 13 .sleb128 19
+ 3832 0950 0D .uleb128 0xd
+ 3833 0951 00000000 .long .LASF120
+ 3834 0955 14 .sleb128 20
+ 3835 0956 00 .byte 0x0
+ 3836 0957 1C .uleb128 0x1c
+ 3837 0958 00000000 .long .LASF122
+ 3838 095c 04 .byte 0x4
+ 3839 095d 0F .byte 0xf
+ 3840 095e 77 .byte 0x77
+ 3841 095f DE0A0000 .long 0xade
+ 3842 0963 0D .uleb128 0xd
+ 3843 0964 00000000 .long .LASF123
+ 3844 0968 00 .sleb128 0
+ 3845 0969 0D .uleb128 0xd
+ 3846 096a 00000000 .long .LASF124
+
GAS LISTING /tmp/ccXzRABk.s page 96
+
+
+ 3847 096e 01 .sleb128 1
+ 3848 096f 0D .uleb128 0xd
+ 3849 0970 00000000 .long .LASF125
+ 3850 0974 02 .sleb128 2
+ 3851 0975 0D .uleb128 0xd
+ 3852 0976 00000000 .long .LASF126
+ 3853 097a 03 .sleb128 3
+ 3854 097b 0D .uleb128 0xd
+ 3855 097c 00000000 .long .LASF127
+ 3856 0980 04 .sleb128 4
+ 3857 0981 0D .uleb128 0xd
+ 3858 0982 00000000 .long .LASF128
+ 3859 0986 05 .sleb128 5
+ 3860 0987 0D .uleb128 0xd
+ 3861 0988 00000000 .long .LASF129
+ 3862 098c 06 .sleb128 6
+ 3863 098d 0D .uleb128 0xd
+ 3864 098e 00000000 .long .LASF130
+ 3865 0992 07 .sleb128 7
+ 3866 0993 0D .uleb128 0xd
+ 3867 0994 00000000 .long .LASF131
+ 3868 0998 08 .sleb128 8
+ 3869 0999 0D .uleb128 0xd
+ 3870 099a 00000000 .long .LASF132
+ 3871 099e 09 .sleb128 9
+ 3872 099f 0D .uleb128 0xd
+ 3873 09a0 00000000 .long .LASF133
+ 3874 09a4 0A .sleb128 10
+ 3875 09a5 0D .uleb128 0xd
+ 3876 09a6 00000000 .long .LASF134
+ 3877 09aa 0B .sleb128 11
+ 3878 09ab 0D .uleb128 0xd
+ 3879 09ac 00000000 .long .LASF135
+ 3880 09b0 0C .sleb128 12
+ 3881 09b1 0D .uleb128 0xd
+ 3882 09b2 00000000 .long .LASF136
+ 3883 09b6 0D .sleb128 13
+ 3884 09b7 0D .uleb128 0xd
+ 3885 09b8 00000000 .long .LASF137
+ 3886 09bc 0E .sleb128 14
+ 3887 09bd 0D .uleb128 0xd
+ 3888 09be 00000000 .long .LASF138
+ 3889 09c2 0F .sleb128 15
+ 3890 09c3 0D .uleb128 0xd
+ 3891 09c4 00000000 .long .LASF139
+ 3892 09c8 10 .sleb128 16
+ 3893 09c9 0D .uleb128 0xd
+ 3894 09ca 00000000 .long .LASF140
+ 3895 09ce 11 .sleb128 17
+ 3896 09cf 0D .uleb128 0xd
+ 3897 09d0 00000000 .long .LASF141
+ 3898 09d4 12 .sleb128 18
+ 3899 09d5 0D .uleb128 0xd
+ 3900 09d6 00000000 .long .LASF142
+ 3901 09da 13 .sleb128 19
+ 3902 09db 0D .uleb128 0xd
+ 3903 09dc 00000000 .long .LASF143
+
GAS LISTING /tmp/ccXzRABk.s page 97
+
+
+ 3904 09e0 14 .sleb128 20
+ 3905 09e1 0D .uleb128 0xd
+ 3906 09e2 00000000 .long .LASF144
+ 3907 09e6 15 .sleb128 21
+ 3908 09e7 0D .uleb128 0xd
+ 3909 09e8 00000000 .long .LASF145
+ 3910 09ec 16 .sleb128 22
+ 3911 09ed 0D .uleb128 0xd
+ 3912 09ee 00000000 .long .LASF146
+ 3913 09f2 17 .sleb128 23
+ 3914 09f3 0D .uleb128 0xd
+ 3915 09f4 00000000 .long .LASF147
+ 3916 09f8 18 .sleb128 24
+ 3917 09f9 0D .uleb128 0xd
+ 3918 09fa 00000000 .long .LASF148
+ 3919 09fe 19 .sleb128 25
+ 3920 09ff 0D .uleb128 0xd
+ 3921 0a00 00000000 .long .LASF149
+ 3922 0a04 1A .sleb128 26
+ 3923 0a05 0D .uleb128 0xd
+ 3924 0a06 00000000 .long .LASF150
+ 3925 0a0a 1B .sleb128 27
+ 3926 0a0b 0D .uleb128 0xd
+ 3927 0a0c 00000000 .long .LASF151
+ 3928 0a10 1C .sleb128 28
+ 3929 0a11 0D .uleb128 0xd
+ 3930 0a12 00000000 .long .LASF152
+ 3931 0a16 1D .sleb128 29
+ 3932 0a17 0D .uleb128 0xd
+ 3933 0a18 00000000 .long .LASF153
+ 3934 0a1c 1E .sleb128 30
+ 3935 0a1d 0D .uleb128 0xd
+ 3936 0a1e 00000000 .long .LASF154
+ 3937 0a22 1F .sleb128 31
+ 3938 0a23 0D .uleb128 0xd
+ 3939 0a24 00000000 .long .LASF155
+ 3940 0a28 20 .sleb128 32
+ 3941 0a29 0D .uleb128 0xd
+ 3942 0a2a 00000000 .long .LASF156
+ 3943 0a2e 21 .sleb128 33
+ 3944 0a2f 0D .uleb128 0xd
+ 3945 0a30 00000000 .long .LASF157
+ 3946 0a34 22 .sleb128 34
+ 3947 0a35 0D .uleb128 0xd
+ 3948 0a36 00000000 .long .LASF158
+ 3949 0a3a 23 .sleb128 35
+ 3950 0a3b 0D .uleb128 0xd
+ 3951 0a3c 00000000 .long .LASF159
+ 3952 0a40 24 .sleb128 36
+ 3953 0a41 0D .uleb128 0xd
+ 3954 0a42 00000000 .long .LASF160
+ 3955 0a46 25 .sleb128 37
+ 3956 0a47 0D .uleb128 0xd
+ 3957 0a48 00000000 .long .LASF161
+ 3958 0a4c 26 .sleb128 38
+ 3959 0a4d 0D .uleb128 0xd
+ 3960 0a4e 00000000 .long .LASF162
+
GAS LISTING /tmp/ccXzRABk.s page 98
+
+
+ 3961 0a52 27 .sleb128 39
+ 3962 0a53 0D .uleb128 0xd
+ 3963 0a54 00000000 .long .LASF163
+ 3964 0a58 28 .sleb128 40
+ 3965 0a59 0D .uleb128 0xd
+ 3966 0a5a 00000000 .long .LASF164
+ 3967 0a5e 29 .sleb128 41
+ 3968 0a5f 0D .uleb128 0xd
+ 3969 0a60 00000000 .long .LASF165
+ 3970 0a64 2A .sleb128 42
+ 3971 0a65 0D .uleb128 0xd
+ 3972 0a66 00000000 .long .LASF166
+ 3973 0a6a 2B .sleb128 43
+ 3974 0a6b 0D .uleb128 0xd
+ 3975 0a6c 00000000 .long .LASF167
+ 3976 0a70 2C .sleb128 44
+ 3977 0a71 0D .uleb128 0xd
+ 3978 0a72 00000000 .long .LASF168
+ 3979 0a76 2D .sleb128 45
+ 3980 0a77 0D .uleb128 0xd
+ 3981 0a78 00000000 .long .LASF169
+ 3982 0a7c 2E .sleb128 46
+ 3983 0a7d 0D .uleb128 0xd
+ 3984 0a7e 00000000 .long .LASF170
+ 3985 0a82 2F .sleb128 47
+ 3986 0a83 0D .uleb128 0xd
+ 3987 0a84 00000000 .long .LASF171
+ 3988 0a88 30 .sleb128 48
+ 3989 0a89 0D .uleb128 0xd
+ 3990 0a8a 00000000 .long .LASF172
+ 3991 0a8e 31 .sleb128 49
+ 3992 0a8f 0D .uleb128 0xd
+ 3993 0a90 00000000 .long .LASF173
+ 3994 0a94 32 .sleb128 50
+ 3995 0a95 0D .uleb128 0xd
+ 3996 0a96 00000000 .long .LASF174
+ 3997 0a9a 33 .sleb128 51
+ 3998 0a9b 0D .uleb128 0xd
+ 3999 0a9c 00000000 .long .LASF175
+ 4000 0aa0 34 .sleb128 52
+ 4001 0aa1 0D .uleb128 0xd
+ 4002 0aa2 00000000 .long .LASF176
+ 4003 0aa6 35 .sleb128 53
+ 4004 0aa7 0D .uleb128 0xd
+ 4005 0aa8 00000000 .long .LASF177
+ 4006 0aac 36 .sleb128 54
+ 4007 0aad 0D .uleb128 0xd
+ 4008 0aae 00000000 .long .LASF178
+ 4009 0ab2 36 .sleb128 54
+ 4010 0ab3 0D .uleb128 0xd
+ 4011 0ab4 00000000 .long .LASF179
+ 4012 0ab8 37 .sleb128 55
+ 4013 0ab9 0D .uleb128 0xd
+ 4014 0aba 00000000 .long .LASF180
+ 4015 0abe 38 .sleb128 56
+ 4016 0abf 0D .uleb128 0xd
+ 4017 0ac0 00000000 .long .LASF181
+
GAS LISTING /tmp/ccXzRABk.s page 99
+
+
+ 4018 0ac4 39 .sleb128 57
+ 4019 0ac5 0D .uleb128 0xd
+ 4020 0ac6 00000000 .long .LASF182
+ 4021 0aca 3A .sleb128 58
+ 4022 0acb 0D .uleb128 0xd
+ 4023 0acc 00000000 .long .LASF183
+ 4024 0ad0 3B .sleb128 59
+ 4025 0ad1 0D .uleb128 0xd
+ 4026 0ad2 00000000 .long .LASF184
+ 4027 0ad6 3C .sleb128 60
+ 4028 0ad7 0D .uleb128 0xd
+ 4029 0ad8 00000000 .long .LASF185
+ 4030 0adc 3D .sleb128 61
+ 4031 0add 00 .byte 0x0
+ 4032 0ade 1C .uleb128 0x1c
+ 4033 0adf 00000000 .long .LASF186
+ 4034 0ae3 04 .byte 0x4
+ 4035 0ae4 0F .byte 0xf
+ 4036 0ae5 BD .byte 0xbd
+ 4037 0ae6 940C0000 .long 0xc94
+ 4038 0aea 0D .uleb128 0xd
+ 4039 0aeb 00000000 .long .LASF187
+ 4040 0aef 00 .sleb128 0
+ 4041 0af0 0D .uleb128 0xd
+ 4042 0af1 00000000 .long .LASF188
+ 4043 0af5 01 .sleb128 1
+ 4044 0af6 0D .uleb128 0xd
+ 4045 0af7 00000000 .long .LASF189
+ 4046 0afb 02 .sleb128 2
+ 4047 0afc 0D .uleb128 0xd
+ 4048 0afd 00000000 .long .LASF190
+ 4049 0b01 03 .sleb128 3
+ 4050 0b02 0D .uleb128 0xd
+ 4051 0b03 00000000 .long .LASF191
+ 4052 0b07 04 .sleb128 4
+ 4053 0b08 0D .uleb128 0xd
+ 4054 0b09 00000000 .long .LASF192
+ 4055 0b0d 05 .sleb128 5
+ 4056 0b0e 0D .uleb128 0xd
+ 4057 0b0f 00000000 .long .LASF193
+ 4058 0b13 06 .sleb128 6
+ 4059 0b14 0D .uleb128 0xd
+ 4060 0b15 00000000 .long .LASF194
+ 4061 0b19 07 .sleb128 7
+ 4062 0b1a 0D .uleb128 0xd
+ 4063 0b1b 00000000 .long .LASF195
+ 4064 0b1f 08 .sleb128 8
+ 4065 0b20 0D .uleb128 0xd
+ 4066 0b21 00000000 .long .LASF196
+ 4067 0b25 09 .sleb128 9
+ 4068 0b26 0D .uleb128 0xd
+ 4069 0b27 00000000 .long .LASF197
+ 4070 0b2b 0A .sleb128 10
+ 4071 0b2c 0D .uleb128 0xd
+ 4072 0b2d 00000000 .long .LASF198
+ 4073 0b31 0B .sleb128 11
+ 4074 0b32 0D .uleb128 0xd
+
GAS LISTING /tmp/ccXzRABk.s page 100
+
+
+ 4075 0b33 00000000 .long .LASF199
+ 4076 0b37 0C .sleb128 12
+ 4077 0b38 0D .uleb128 0xd
+ 4078 0b39 00000000 .long .LASF200
+ 4079 0b3d 0D .sleb128 13
+ 4080 0b3e 0D .uleb128 0xd
+ 4081 0b3f 00000000 .long .LASF201
+ 4082 0b43 0E .sleb128 14
+ 4083 0b44 0D .uleb128 0xd
+ 4084 0b45 00000000 .long .LASF202
+ 4085 0b49 0F .sleb128 15
+ 4086 0b4a 0D .uleb128 0xd
+ 4087 0b4b 00000000 .long .LASF203
+ 4088 0b4f 10 .sleb128 16
+ 4089 0b50 0D .uleb128 0xd
+ 4090 0b51 00000000 .long .LASF204
+ 4091 0b55 11 .sleb128 17
+ 4092 0b56 0D .uleb128 0xd
+ 4093 0b57 00000000 .long .LASF205
+ 4094 0b5b 12 .sleb128 18
+ 4095 0b5c 0D .uleb128 0xd
+ 4096 0b5d 00000000 .long .LASF206
+ 4097 0b61 13 .sleb128 19
+ 4098 0b62 0D .uleb128 0xd
+ 4099 0b63 00000000 .long .LASF207
+ 4100 0b67 14 .sleb128 20
+ 4101 0b68 0D .uleb128 0xd
+ 4102 0b69 00000000 .long .LASF208
+ 4103 0b6d 15 .sleb128 21
+ 4104 0b6e 0D .uleb128 0xd
+ 4105 0b6f 00000000 .long .LASF209
+ 4106 0b73 16 .sleb128 22
+ 4107 0b74 0D .uleb128 0xd
+ 4108 0b75 00000000 .long .LASF210
+ 4109 0b79 17 .sleb128 23
+ 4110 0b7a 0D .uleb128 0xd
+ 4111 0b7b 00000000 .long .LASF211
+ 4112 0b7f 18 .sleb128 24
+ 4113 0b80 0D .uleb128 0xd
+ 4114 0b81 00000000 .long .LASF212
+ 4115 0b85 19 .sleb128 25
+ 4116 0b86 0D .uleb128 0xd
+ 4117 0b87 00000000 .long .LASF213
+ 4118 0b8b 1A .sleb128 26
+ 4119 0b8c 0D .uleb128 0xd
+ 4120 0b8d 00000000 .long .LASF214
+ 4121 0b91 1B .sleb128 27
+ 4122 0b92 0D .uleb128 0xd
+ 4123 0b93 00000000 .long .LASF215
+ 4124 0b97 1C .sleb128 28
+ 4125 0b98 0D .uleb128 0xd
+ 4126 0b99 00000000 .long .LASF216
+ 4127 0b9d 1D .sleb128 29
+ 4128 0b9e 0D .uleb128 0xd
+ 4129 0b9f 00000000 .long .LASF217
+ 4130 0ba3 1E .sleb128 30
+ 4131 0ba4 0D .uleb128 0xd
+
GAS LISTING /tmp/ccXzRABk.s page 101
+
+
+ 4132 0ba5 00000000 .long .LASF218
+ 4133 0ba9 1F .sleb128 31
+ 4134 0baa 0D .uleb128 0xd
+ 4135 0bab 00000000 .long .LASF219
+ 4136 0baf 20 .sleb128 32
+ 4137 0bb0 0D .uleb128 0xd
+ 4138 0bb1 00000000 .long .LASF220
+ 4139 0bb5 21 .sleb128 33
+ 4140 0bb6 0D .uleb128 0xd
+ 4141 0bb7 00000000 .long .LASF221
+ 4142 0bbb 22 .sleb128 34
+ 4143 0bbc 0D .uleb128 0xd
+ 4144 0bbd 00000000 .long .LASF222
+ 4145 0bc1 23 .sleb128 35
+ 4146 0bc2 0D .uleb128 0xd
+ 4147 0bc3 00000000 .long .LASF223
+ 4148 0bc7 24 .sleb128 36
+ 4149 0bc8 0D .uleb128 0xd
+ 4150 0bc9 00000000 .long .LASF224
+ 4151 0bcd 25 .sleb128 37
+ 4152 0bce 0D .uleb128 0xd
+ 4153 0bcf 00000000 .long .LASF225
+ 4154 0bd3 26 .sleb128 38
+ 4155 0bd4 0D .uleb128 0xd
+ 4156 0bd5 00000000 .long .LASF226
+ 4157 0bd9 27 .sleb128 39
+ 4158 0bda 0D .uleb128 0xd
+ 4159 0bdb 00000000 .long .LASF227
+ 4160 0bdf 28 .sleb128 40
+ 4161 0be0 0D .uleb128 0xd
+ 4162 0be1 00000000 .long .LASF228
+ 4163 0be5 29 .sleb128 41
+ 4164 0be6 0D .uleb128 0xd
+ 4165 0be7 00000000 .long .LASF229
+ 4166 0beb 2A .sleb128 42
+ 4167 0bec 0D .uleb128 0xd
+ 4168 0bed 00000000 .long .LASF230
+ 4169 0bf1 2B .sleb128 43
+ 4170 0bf2 0D .uleb128 0xd
+ 4171 0bf3 00000000 .long .LASF231
+ 4172 0bf7 2C .sleb128 44
+ 4173 0bf8 0D .uleb128 0xd
+ 4174 0bf9 00000000 .long .LASF232
+ 4175 0bfd 2D .sleb128 45
+ 4176 0bfe 0D .uleb128 0xd
+ 4177 0bff 00000000 .long .LASF233
+ 4178 0c03 2E .sleb128 46
+ 4179 0c04 0D .uleb128 0xd
+ 4180 0c05 00000000 .long .LASF234
+ 4181 0c09 2F .sleb128 47
+ 4182 0c0a 0D .uleb128 0xd
+ 4183 0c0b 00000000 .long .LASF235
+ 4184 0c0f 30 .sleb128 48
+ 4185 0c10 0D .uleb128 0xd
+ 4186 0c11 00000000 .long .LASF236
+ 4187 0c15 31 .sleb128 49
+ 4188 0c16 0D .uleb128 0xd
+
GAS LISTING /tmp/ccXzRABk.s page 102
+
+
+ 4189 0c17 00000000 .long .LASF237
+ 4190 0c1b 32 .sleb128 50
+ 4191 0c1c 0D .uleb128 0xd
+ 4192 0c1d 00000000 .long .LASF238
+ 4193 0c21 33 .sleb128 51
+ 4194 0c22 0D .uleb128 0xd
+ 4195 0c23 00000000 .long .LASF239
+ 4196 0c27 34 .sleb128 52
+ 4197 0c28 0D .uleb128 0xd
+ 4198 0c29 00000000 .long .LASF240
+ 4199 0c2d 35 .sleb128 53
+ 4200 0c2e 0D .uleb128 0xd
+ 4201 0c2f 00000000 .long .LASF241
+ 4202 0c33 36 .sleb128 54
+ 4203 0c34 0D .uleb128 0xd
+ 4204 0c35 00000000 .long .LASF242
+ 4205 0c39 37 .sleb128 55
+ 4206 0c3a 0D .uleb128 0xd
+ 4207 0c3b 00000000 .long .LASF243
+ 4208 0c3f 38 .sleb128 56
+ 4209 0c40 0D .uleb128 0xd
+ 4210 0c41 00000000 .long .LASF244
+ 4211 0c45 39 .sleb128 57
+ 4212 0c46 0D .uleb128 0xd
+ 4213 0c47 00000000 .long .LASF245
+ 4214 0c4b 3A .sleb128 58
+ 4215 0c4c 0D .uleb128 0xd
+ 4216 0c4d 00000000 .long .LASF246
+ 4217 0c51 3A .sleb128 58
+ 4218 0c52 0D .uleb128 0xd
+ 4219 0c53 00000000 .long .LASF247
+ 4220 0c57 3B .sleb128 59
+ 4221 0c58 0D .uleb128 0xd
+ 4222 0c59 00000000 .long .LASF248
+ 4223 0c5d 3C .sleb128 60
+ 4224 0c5e 0D .uleb128 0xd
+ 4225 0c5f 00000000 .long .LASF249
+ 4226 0c63 3D .sleb128 61
+ 4227 0c64 0D .uleb128 0xd
+ 4228 0c65 00000000 .long .LASF250
+ 4229 0c69 3E .sleb128 62
+ 4230 0c6a 0D .uleb128 0xd
+ 4231 0c6b 00000000 .long .LASF251
+ 4232 0c6f 3F .sleb128 63
+ 4233 0c70 0D .uleb128 0xd
+ 4234 0c71 00000000 .long .LASF252
+ 4235 0c75 C000 .sleb128 64
+ 4236 0c77 0D .uleb128 0xd
+ 4237 0c78 00000000 .long .LASF253
+ 4238 0c7c C100 .sleb128 65
+ 4239 0c7e 0D .uleb128 0xd
+ 4240 0c7f 00000000 .long .LASF254
+ 4241 0c83 C200 .sleb128 66
+ 4242 0c85 0D .uleb128 0xd
+ 4243 0c86 00000000 .long .LASF255
+ 4244 0c8a C300 .sleb128 67
+ 4245 0c8c 0D .uleb128 0xd
+
GAS LISTING /tmp/ccXzRABk.s page 103
+
+
+ 4246 0c8d 00000000 .long .LASF256
+ 4247 0c91 C400 .sleb128 68
+ 4248 0c93 00 .byte 0x0
+ 4249 0c94 1D .uleb128 0x1d
+ 4250 0c95 00000000 .long .LASF257
+ 4251 0c99 04 .byte 0x4
+ 4252 0c9a 0F .byte 0xf
+ 4253 0c9b 0A01 .value 0x10a
+ 4254 0c9d 930D0000 .long 0xd93
+ 4255 0ca1 0D .uleb128 0xd
+ 4256 0ca2 00000000 .long .LASF258
+ 4257 0ca6 00 .sleb128 0
+ 4258 0ca7 0D .uleb128 0xd
+ 4259 0ca8 00000000 .long .LASF259
+ 4260 0cac 3D .sleb128 61
+ 4261 0cad 0D .uleb128 0xd
+ 4262 0cae 00000000 .long .LASF260
+ 4263 0cb2 3E .sleb128 62
+ 4264 0cb3 0D .uleb128 0xd
+ 4265 0cb4 00000000 .long .LASF261
+ 4266 0cb8 3F .sleb128 63
+ 4267 0cb9 0D .uleb128 0xd
+ 4268 0cba 00000000 .long .LASF262
+ 4269 0cbe C000 .sleb128 64
+ 4270 0cc0 0D .uleb128 0xd
+ 4271 0cc1 00000000 .long .LASF263
+ 4272 0cc5 C100 .sleb128 65
+ 4273 0cc7 0D .uleb128 0xd
+ 4274 0cc8 00000000 .long .LASF264
+ 4275 0ccc C200 .sleb128 66
+ 4276 0cce 0D .uleb128 0xd
+ 4277 0ccf 00000000 .long .LASF265
+ 4278 0cd3 C300 .sleb128 67
+ 4279 0cd5 0D .uleb128 0xd
+ 4280 0cd6 00000000 .long .LASF266
+ 4281 0cda C400 .sleb128 68
+ 4282 0cdc 0D .uleb128 0xd
+ 4283 0cdd 00000000 .long .LASF267
+ 4284 0ce1 C500 .sleb128 69
+ 4285 0ce3 0D .uleb128 0xd
+ 4286 0ce4 00000000 .long .LASF268
+ 4287 0ce8 C600 .sleb128 70
+ 4288 0cea 0D .uleb128 0xd
+ 4289 0ceb 00000000 .long .LASF269
+ 4290 0cef C700 .sleb128 71
+ 4291 0cf1 0D .uleb128 0xd
+ 4292 0cf2 00000000 .long .LASF270
+ 4293 0cf6 C800 .sleb128 72
+ 4294 0cf8 0D .uleb128 0xd
+ 4295 0cf9 00000000 .long .LASF271
+ 4296 0cfd C900 .sleb128 73
+ 4297 0cff 0D .uleb128 0xd
+ 4298 0d00 00000000 .long .LASF272
+ 4299 0d04 CA00 .sleb128 74
+ 4300 0d06 0D .uleb128 0xd
+ 4301 0d07 00000000 .long .LASF273
+ 4302 0d0b CB00 .sleb128 75
+
GAS LISTING /tmp/ccXzRABk.s page 104
+
+
+ 4303 0d0d 0D .uleb128 0xd
+ 4304 0d0e 00000000 .long .LASF274
+ 4305 0d12 CC00 .sleb128 76
+ 4306 0d14 0D .uleb128 0xd
+ 4307 0d15 00000000 .long .LASF275
+ 4308 0d19 CD00 .sleb128 77
+ 4309 0d1b 0D .uleb128 0xd
+ 4310 0d1c 00000000 .long .LASF276
+ 4311 0d20 CE00 .sleb128 78
+ 4312 0d22 0D .uleb128 0xd
+ 4313 0d23 00000000 .long .LASF277
+ 4314 0d27 CF00 .sleb128 79
+ 4315 0d29 0D .uleb128 0xd
+ 4316 0d2a 00000000 .long .LASF278
+ 4317 0d2e D000 .sleb128 80
+ 4318 0d30 0D .uleb128 0xd
+ 4319 0d31 00000000 .long .LASF279
+ 4320 0d35 D100 .sleb128 81
+ 4321 0d37 0D .uleb128 0xd
+ 4322 0d38 00000000 .long .LASF280
+ 4323 0d3c D100 .sleb128 81
+ 4324 0d3e 0D .uleb128 0xd
+ 4325 0d3f 00000000 .long .LASF281
+ 4326 0d43 D200 .sleb128 82
+ 4327 0d45 0D .uleb128 0xd
+ 4328 0d46 00000000 .long .LASF282
+ 4329 0d4a D300 .sleb128 83
+ 4330 0d4c 0D .uleb128 0xd
+ 4331 0d4d 00000000 .long .LASF283
+ 4332 0d51 D400 .sleb128 84
+ 4333 0d53 0D .uleb128 0xd
+ 4334 0d54 00000000 .long .LASF284
+ 4335 0d58 D500 .sleb128 85
+ 4336 0d5a 0D .uleb128 0xd
+ 4337 0d5b 00000000 .long .LASF285
+ 4338 0d5f D600 .sleb128 86
+ 4339 0d61 0D .uleb128 0xd
+ 4340 0d62 00000000 .long .LASF286
+ 4341 0d66 D700 .sleb128 87
+ 4342 0d68 0D .uleb128 0xd
+ 4343 0d69 00000000 .long .LASF287
+ 4344 0d6d D800 .sleb128 88
+ 4345 0d6f 0D .uleb128 0xd
+ 4346 0d70 00000000 .long .LASF288
+ 4347 0d74 D900 .sleb128 89
+ 4348 0d76 0D .uleb128 0xd
+ 4349 0d77 00000000 .long .LASF289
+ 4350 0d7b DA00 .sleb128 90
+ 4351 0d7d 0D .uleb128 0xd
+ 4352 0d7e 00000000 .long .LASF290
+ 4353 0d82 DB00 .sleb128 91
+ 4354 0d84 0D .uleb128 0xd
+ 4355 0d85 00000000 .long .LASF291
+ 4356 0d89 DC00 .sleb128 92
+ 4357 0d8b 0D .uleb128 0xd
+ 4358 0d8c 00000000 .long .LASF292
+ 4359 0d90 DD00 .sleb128 93
+
GAS LISTING /tmp/ccXzRABk.s page 105
+
+
+ 4360 0d92 00 .byte 0x0
+ 4361 0d93 1D .uleb128 0x1d
+ 4362 0d94 00000000 .long .LASF293
+ 4363 0d98 04 .byte 0x4
+ 4364 0d99 0F .byte 0xf
+ 4365 0d9a 3401 .value 0x134
+ 4366 0d9c D30E0000 .long 0xed3
+ 4367 0da0 0D .uleb128 0xd
+ 4368 0da1 00000000 .long .LASF294
+ 4369 0da5 00 .sleb128 0
+ 4370 0da6 0D .uleb128 0xd
+ 4371 0da7 00000000 .long .LASF295
+ 4372 0dab 01 .sleb128 1
+ 4373 0dac 0D .uleb128 0xd
+ 4374 0dad 00000000 .long .LASF296
+ 4375 0db1 02 .sleb128 2
+ 4376 0db2 0D .uleb128 0xd
+ 4377 0db3 00000000 .long .LASF297
+ 4378 0db7 03 .sleb128 3
+ 4379 0db8 0D .uleb128 0xd
+ 4380 0db9 00000000 .long .LASF298
+ 4381 0dbd 04 .sleb128 4
+ 4382 0dbe 0D .uleb128 0xd
+ 4383 0dbf 00000000 .long .LASF299
+ 4384 0dc3 05 .sleb128 5
+ 4385 0dc4 0D .uleb128 0xd
+ 4386 0dc5 00000000 .long .LASF300
+ 4387 0dc9 06 .sleb128 6
+ 4388 0dca 0D .uleb128 0xd
+ 4389 0dcb 00000000 .long .LASF301
+ 4390 0dcf 07 .sleb128 7
+ 4391 0dd0 0D .uleb128 0xd
+ 4392 0dd1 00000000 .long .LASF302
+ 4393 0dd5 08 .sleb128 8
+ 4394 0dd6 0D .uleb128 0xd
+ 4395 0dd7 00000000 .long .LASF303
+ 4396 0ddb 09 .sleb128 9
+ 4397 0ddc 0D .uleb128 0xd
+ 4398 0ddd 00000000 .long .LASF304
+ 4399 0de1 0A .sleb128 10
+ 4400 0de2 0D .uleb128 0xd
+ 4401 0de3 00000000 .long .LASF305
+ 4402 0de7 0B .sleb128 11
+ 4403 0de8 0D .uleb128 0xd
+ 4404 0de9 00000000 .long .LASF306
+ 4405 0ded 0C .sleb128 12
+ 4406 0dee 0D .uleb128 0xd
+ 4407 0def 00000000 .long .LASF307
+ 4408 0df3 0D .sleb128 13
+ 4409 0df4 0D .uleb128 0xd
+ 4410 0df5 00000000 .long .LASF308
+ 4411 0df9 0E .sleb128 14
+ 4412 0dfa 0D .uleb128 0xd
+ 4413 0dfb 00000000 .long .LASF309
+ 4414 0dff 0F .sleb128 15
+ 4415 0e00 0D .uleb128 0xd
+ 4416 0e01 00000000 .long .LASF310
+
GAS LISTING /tmp/ccXzRABk.s page 106
+
+
+ 4417 0e05 10 .sleb128 16
+ 4418 0e06 0D .uleb128 0xd
+ 4419 0e07 00000000 .long .LASF311
+ 4420 0e0b 11 .sleb128 17
+ 4421 0e0c 0D .uleb128 0xd
+ 4422 0e0d 00000000 .long .LASF312
+ 4423 0e11 12 .sleb128 18
+ 4424 0e12 0D .uleb128 0xd
+ 4425 0e13 00000000 .long .LASF313
+ 4426 0e17 13 .sleb128 19
+ 4427 0e18 0D .uleb128 0xd
+ 4428 0e19 00000000 .long .LASF314
+ 4429 0e1d 14 .sleb128 20
+ 4430 0e1e 0D .uleb128 0xd
+ 4431 0e1f 00000000 .long .LASF315
+ 4432 0e23 15 .sleb128 21
+ 4433 0e24 0D .uleb128 0xd
+ 4434 0e25 00000000 .long .LASF316
+ 4435 0e29 16 .sleb128 22
+ 4436 0e2a 0D .uleb128 0xd
+ 4437 0e2b 00000000 .long .LASF317
+ 4438 0e2f 17 .sleb128 23
+ 4439 0e30 0D .uleb128 0xd
+ 4440 0e31 00000000 .long .LASF318
+ 4441 0e35 18 .sleb128 24
+ 4442 0e36 0D .uleb128 0xd
+ 4443 0e37 00000000 .long .LASF319
+ 4444 0e3b 19 .sleb128 25
+ 4445 0e3c 0D .uleb128 0xd
+ 4446 0e3d 00000000 .long .LASF320
+ 4447 0e41 1A .sleb128 26
+ 4448 0e42 0D .uleb128 0xd
+ 4449 0e43 00000000 .long .LASF321
+ 4450 0e47 1B .sleb128 27
+ 4451 0e48 0D .uleb128 0xd
+ 4452 0e49 00000000 .long .LASF322
+ 4453 0e4d 1C .sleb128 28
+ 4454 0e4e 0D .uleb128 0xd
+ 4455 0e4f 00000000 .long .LASF323
+ 4456 0e53 1D .sleb128 29
+ 4457 0e54 0D .uleb128 0xd
+ 4458 0e55 00000000 .long .LASF324
+ 4459 0e59 1E .sleb128 30
+ 4460 0e5a 0D .uleb128 0xd
+ 4461 0e5b 00000000 .long .LASF325
+ 4462 0e5f 1F .sleb128 31
+ 4463 0e60 0D .uleb128 0xd
+ 4464 0e61 00000000 .long .LASF326
+ 4465 0e65 20 .sleb128 32
+ 4466 0e66 0D .uleb128 0xd
+ 4467 0e67 00000000 .long .LASF327
+ 4468 0e6b 21 .sleb128 33
+ 4469 0e6c 0D .uleb128 0xd
+ 4470 0e6d 00000000 .long .LASF328
+ 4471 0e71 22 .sleb128 34
+ 4472 0e72 0D .uleb128 0xd
+ 4473 0e73 00000000 .long .LASF329
+
GAS LISTING /tmp/ccXzRABk.s page 107
+
+
+ 4474 0e77 23 .sleb128 35
+ 4475 0e78 0D .uleb128 0xd
+ 4476 0e79 00000000 .long .LASF330
+ 4477 0e7d 24 .sleb128 36
+ 4478 0e7e 0D .uleb128 0xd
+ 4479 0e7f 00000000 .long .LASF331
+ 4480 0e83 25 .sleb128 37
+ 4481 0e84 0D .uleb128 0xd
+ 4482 0e85 00000000 .long .LASF332
+ 4483 0e89 26 .sleb128 38
+ 4484 0e8a 0D .uleb128 0xd
+ 4485 0e8b 00000000 .long .LASF333
+ 4486 0e8f 27 .sleb128 39
+ 4487 0e90 0D .uleb128 0xd
+ 4488 0e91 00000000 .long .LASF334
+ 4489 0e95 28 .sleb128 40
+ 4490 0e96 0D .uleb128 0xd
+ 4491 0e97 00000000 .long .LASF335
+ 4492 0e9b 29 .sleb128 41
+ 4493 0e9c 0D .uleb128 0xd
+ 4494 0e9d 00000000 .long .LASF336
+ 4495 0ea1 29 .sleb128 41
+ 4496 0ea2 0D .uleb128 0xd
+ 4497 0ea3 00000000 .long .LASF337
+ 4498 0ea7 2A .sleb128 42
+ 4499 0ea8 0D .uleb128 0xd
+ 4500 0ea9 00000000 .long .LASF338
+ 4501 0ead 2B .sleb128 43
+ 4502 0eae 0D .uleb128 0xd
+ 4503 0eaf 00000000 .long .LASF339
+ 4504 0eb3 2C .sleb128 44
+ 4505 0eb4 0D .uleb128 0xd
+ 4506 0eb5 00000000 .long .LASF340
+ 4507 0eb9 2D .sleb128 45
+ 4508 0eba 0D .uleb128 0xd
+ 4509 0ebb 00000000 .long .LASF341
+ 4510 0ebf 2E .sleb128 46
+ 4511 0ec0 0D .uleb128 0xd
+ 4512 0ec1 00000000 .long .LASF342
+ 4513 0ec5 2F .sleb128 47
+ 4514 0ec6 0D .uleb128 0xd
+ 4515 0ec7 00000000 .long .LASF343
+ 4516 0ecb 30 .sleb128 48
+ 4517 0ecc 0D .uleb128 0xd
+ 4518 0ecd 00000000 .long .LASF344
+ 4519 0ed1 31 .sleb128 49
+ 4520 0ed2 00 .byte 0x0
+ 4521 0ed3 1E .uleb128 0x1e
+ 4522 0ed4 00000000 .long .LASF347
+ 4523 0ed8 01 .byte 0x1
+ 4524 0ed9 4B .byte 0x4b
+ 4525 0eda 01 .byte 0x1
+ 4526 0edb 3D050000 .long 0x53d
+ 4527 0edf 00000000 .quad .LFB590
+ 4527 00000000
+ 4528 0ee7 00000000 .quad .LFE590
+ 4528 00000000
+
GAS LISTING /tmp/ccXzRABk.s page 108
+
+
+ 4529 0eef 00000000 .long .LLST0
+ 4530 0ef3 130F0000 .long 0xf13
+ 4531 0ef7 1F .uleb128 0x1f
+ 4532 0ef8 00000000 .long .LASF345
+ 4533 0efc 01 .byte 0x1
+ 4534 0efd 4B .byte 0x4b
+ 4535 0efe 1F040000 .long 0x41f
+ 4536 0f02 02 .byte 0x2
+ 4537 0f03 91 .byte 0x91
+ 4538 0f04 68 .sleb128 -24
+ 4539 0f05 20 .uleb128 0x20
+ 4540 0f06 637600 .string "cv"
+ 4541 0f09 01 .byte 0x1
+ 4542 0f0a 4E .byte 0x4e
+ 4543 0f0b 3D050000 .long 0x53d
+ 4544 0f0f 02 .byte 0x2
+ 4545 0f10 76 .byte 0x76
+ 4546 0f11 60 .sleb128 -32
+ 4547 0f12 00 .byte 0x0
+ 4548 0f13 21 .uleb128 0x21
+ 4549 0f14 00000000 .long .LASF395
+ 4550 0f18 01 .byte 0x1
+ 4551 0f19 62 .byte 0x62
+ 4552 0f1a 01 .byte 0x1
+ 4553 0f1b 00000000 .quad .LFB591
+ 4553 00000000
+ 4554 0f23 00000000 .quad .LFE591
+ 4554 00000000
+ 4555 0f2b 00000000 .long .LLST1
+ 4556 0f2f 5D0F0000 .long 0xf5d
+ 4557 0f33 22 .uleb128 0x22
+ 4558 0f34 637600 .string "cv"
+ 4559 0f37 01 .byte 0x1
+ 4560 0f38 62 .byte 0x62
+ 4561 0f39 5D0F0000 .long 0xf5d
+ 4562 0f3d 02 .byte 0x2
+ 4563 0f3e 91 .byte 0x91
+ 4564 0f3f 60 .sleb128 -32
+ 4565 0f40 1F .uleb128 0x1f
+ 4566 0f41 00000000 .long .LASF346
+ 4567 0f45 01 .byte 0x1
+ 4568 0f46 62 .byte 0x62
+ 4569 0f47 B4000000 .long 0xb4
+ 4570 0f4b 02 .byte 0x2
+ 4571 0f4c 91 .byte 0x91
+ 4572 0f4d 58 .sleb128 -40
+ 4573 0f4e 20 .uleb128 0x20
+ 4574 0f4f 72637600 .string "rcv"
+ 4575 0f53 01 .byte 0x1
+ 4576 0f54 65 .byte 0x65
+ 4577 0f55 3D050000 .long 0x53d
+ 4578 0f59 02 .byte 0x2
+ 4579 0f5a 76 .byte 0x76
+ 4580 0f5b 50 .sleb128 -48
+ 4581 0f5c 00 .byte 0x0
+ 4582 0f5d 0B .uleb128 0xb
+ 4583 0f5e 3D050000 .long 0x53d
+
GAS LISTING /tmp/ccXzRABk.s page 109
+
+
+ 4584 0f62 1E .uleb128 0x1e
+ 4585 0f63 00000000 .long .LASF348
+ 4586 0f67 01 .byte 0x1
+ 4587 0f68 71 .byte 0x71
+ 4588 0f69 01 .byte 0x1
+ 4589 0f6a 7B000000 .long 0x7b
+ 4590 0f6e 00000000 .quad .LFB592
+ 4590 00000000
+ 4591 0f76 00000000 .quad .LFE592
+ 4591 00000000
+ 4592 0f7e 00000000 .long .LLST2
+ 4593 0f82 A20F0000 .long 0xfa2
+ 4594 0f86 1F .uleb128 0x1f
+ 4595 0f87 00000000 .long .LASF349
+ 4596 0f8b 01 .byte 0x1
+ 4597 0f8c 71 .byte 0x71
+ 4598 0f8d DE030000 .long 0x3de
+ 4599 0f91 02 .byte 0x2
+ 4600 0f92 91 .byte 0x91
+ 4601 0f93 58 .sleb128 -40
+ 4602 0f94 20 .uleb128 0x20
+ 4603 0f95 726300 .string "rc"
+ 4604 0f98 01 .byte 0x1
+ 4605 0f99 73 .byte 0x73
+ 4606 0f9a 7B000000 .long 0x7b
+ 4607 0f9e 02 .byte 0x2
+ 4608 0f9f 91 .byte 0x91
+ 4609 0fa0 6C .sleb128 -20
+ 4610 0fa1 00 .byte 0x0
+ 4611 0fa2 1E .uleb128 0x1e
+ 4612 0fa3 00000000 .long .LASF350
+ 4613 0fa7 01 .byte 0x1
+ 4614 0fa8 7E .byte 0x7e
+ 4615 0fa9 01 .byte 0x1
+ 4616 0faa 7B000000 .long 0x7b
+ 4617 0fae 00000000 .quad .LFB593
+ 4617 00000000
+ 4618 0fb6 00000000 .quad .LFE593
+ 4618 00000000
+ 4619 0fbe 00000000 .long .LLST3
+ 4620 0fc2 27100000 .long 0x1027
+ 4621 0fc6 1F .uleb128 0x1f
+ 4622 0fc7 00000000 .long .LASF349
+ 4623 0fcb 01 .byte 0x1
+ 4624 0fcc 7E .byte 0x7e
+ 4625 0fcd DE030000 .long 0x3de
+ 4626 0fd1 02 .byte 0x2
+ 4627 0fd2 91 .byte 0x91
+ 4628 0fd3 48 .sleb128 -56
+ 4629 0fd4 1F .uleb128 0x1f
+ 4630 0fd5 00000000 .long .LASF351
+ 4631 0fd9 01 .byte 0x1
+ 4632 0fda 7F .byte 0x7f
+ 4633 0fdb B6000000 .long 0xb6
+ 4634 0fdf 02 .byte 0x2
+ 4635 0fe0 91 .byte 0x91
+ 4636 0fe1 40 .sleb128 -64
+
GAS LISTING /tmp/ccXzRABk.s page 110
+
+
+ 4637 0fe2 1F .uleb128 0x1f
+ 4638 0fe3 00000000 .long .LASF352
+ 4639 0fe7 01 .byte 0x1
+ 4640 0fe8 80 .byte 0x80
+ 4641 0fe9 62000000 .long 0x62
+ 4642 0fed 03 .byte 0x3
+ 4643 0fee 91 .byte 0x91
+ 4644 0fef BC7F .sleb128 -68
+ 4645 0ff1 20 .uleb128 0x20
+ 4646 0ff2 726300 .string "rc"
+ 4647 0ff5 01 .byte 0x1
+ 4648 0ff6 82 .byte 0x82
+ 4649 0ff7 7B000000 .long 0x7b
+ 4650 0ffb 02 .byte 0x2
+ 4651 0ffc 91 .byte 0x91
+ 4652 0ffd 5C .sleb128 -36
+ 4653 0ffe 23 .uleb128 0x23
+ 4654 0fff 00000000 .long .LASF353
+ 4655 1003 37100000 .long 0x1037
+ 4656 1007 01 .byte 0x1
+ 4657 1008 09 .byte 0x9
+ 4658 1009 03 .byte 0x3
+ 4659 100a 00000000 .quad __PRETTY_FUNCTION__.7218
+ 4659 00000000
+ 4660 1012 23 .uleb128 0x23
+ 4661 1013 00000000 .long .LASF354
+ 4662 1017 3C100000 .long 0x103c
+ 4663 101b 01 .byte 0x1
+ 4664 101c 09 .byte 0x9
+ 4665 101d 03 .byte 0x3
+ 4666 101e 00000000 .quad __func__.7220
+ 4666 00000000
+ 4667 1026 00 .byte 0x0
+ 4668 1027 1B .uleb128 0x1b
+ 4669 1028 C1000000 .long 0xc1
+ 4670 102c 37100000 .long 0x1037
+ 4671 1030 17 .uleb128 0x17
+ 4672 1031 B1000000 .long 0xb1
+ 4673 1035 1A .byte 0x1a
+ 4674 1036 00 .byte 0x0
+ 4675 1037 0B .uleb128 0xb
+ 4676 1038 27100000 .long 0x1027
+ 4677 103c 0B .uleb128 0xb
+ 4678 103d 27100000 .long 0x1027
+ 4679 1041 1E .uleb128 0x1e
+ 4680 1042 00000000 .long .LASF355
+ 4681 1046 01 .byte 0x1
+ 4682 1047 97 .byte 0x97
+ 4683 1048 01 .byte 0x1
+ 4684 1049 7B000000 .long 0x7b
+ 4685 104d 00000000 .quad .LFB594
+ 4685 00000000
+ 4686 1055 00000000 .quad .LFE594
+ 4686 00000000
+ 4687 105d 00000000 .long .LLST4
+ 4688 1061 C6100000 .long 0x10c6
+ 4689 1065 1F .uleb128 0x1f
+
GAS LISTING /tmp/ccXzRABk.s page 111
+
+
+ 4690 1066 00000000 .long .LASF349
+ 4691 106a 01 .byte 0x1
+ 4692 106b 97 .byte 0x97
+ 4693 106c DE030000 .long 0x3de
+ 4694 1070 02 .byte 0x2
+ 4695 1071 91 .byte 0x91
+ 4696 1072 48 .sleb128 -56
+ 4697 1073 1F .uleb128 0x1f
+ 4698 1074 00000000 .long .LASF351
+ 4699 1078 01 .byte 0x1
+ 4700 1079 98 .byte 0x98
+ 4701 107a B6000000 .long 0xb6
+ 4702 107e 02 .byte 0x2
+ 4703 107f 91 .byte 0x91
+ 4704 1080 40 .sleb128 -64
+ 4705 1081 1F .uleb128 0x1f
+ 4706 1082 00000000 .long .LASF352
+ 4707 1086 01 .byte 0x1
+ 4708 1087 99 .byte 0x99
+ 4709 1088 62000000 .long 0x62
+ 4710 108c 03 .byte 0x3
+ 4711 108d 91 .byte 0x91
+ 4712 108e BC7F .sleb128 -68
+ 4713 1090 20 .uleb128 0x20
+ 4714 1091 726300 .string "rc"
+ 4715 1094 01 .byte 0x1
+ 4716 1095 9B .byte 0x9b
+ 4717 1096 7B000000 .long 0x7b
+ 4718 109a 02 .byte 0x2
+ 4719 109b 91 .byte 0x91
+ 4720 109c 5C .sleb128 -36
+ 4721 109d 23 .uleb128 0x23
+ 4722 109e 00000000 .long .LASF353
+ 4723 10a2 C6100000 .long 0x10c6
+ 4724 10a6 01 .byte 0x1
+ 4725 10a7 09 .byte 0x9
+ 4726 10a8 03 .byte 0x3
+ 4727 10a9 00000000 .quad __PRETTY_FUNCTION__.7242
+ 4727 00000000
+ 4728 10b1 23 .uleb128 0x23
+ 4729 10b2 00000000 .long .LASF354
+ 4730 10b6 CB100000 .long 0x10cb
+ 4731 10ba 01 .byte 0x1
+ 4732 10bb 09 .byte 0x9
+ 4733 10bc 03 .byte 0x3
+ 4734 10bd 00000000 .quad __func__.7244
+ 4734 00000000
+ 4735 10c5 00 .byte 0x0
+ 4736 10c6 0B .uleb128 0xb
+ 4737 10c7 27100000 .long 0x1027
+ 4738 10cb 0B .uleb128 0xb
+ 4739 10cc 27100000 .long 0x1027
+ 4740 10d0 1E .uleb128 0x1e
+ 4741 10d1 00000000 .long .LASF356
+ 4742 10d5 01 .byte 0x1
+ 4743 10d6 B1 .byte 0xb1
+ 4744 10d7 01 .byte 0x1
+
GAS LISTING /tmp/ccXzRABk.s page 112
+
+
+ 4745 10d8 7B000000 .long 0x7b
+ 4746 10dc 00000000 .quad .LFB595
+ 4746 00000000
+ 4747 10e4 00000000 .quad .LFE595
+ 4747 00000000
+ 4748 10ec 00000000 .long .LLST5
+ 4749 10f0 25110000 .long 0x1125
+ 4750 10f4 1F .uleb128 0x1f
+ 4751 10f5 00000000 .long .LASF349
+ 4752 10f9 01 .byte 0x1
+ 4753 10fa B1 .byte 0xb1
+ 4754 10fb DE030000 .long 0x3de
+ 4755 10ff 02 .byte 0x2
+ 4756 1100 91 .byte 0x91
+ 4757 1101 68 .sleb128 -24
+ 4758 1102 1F .uleb128 0x1f
+ 4759 1103 00000000 .long .LASF357
+ 4760 1107 01 .byte 0x1
+ 4761 1108 B2 .byte 0xb2
+ 4762 1109 1F040000 .long 0x41f
+ 4763 110d 02 .byte 0x2
+ 4764 110e 91 .byte 0x91
+ 4765 110f 60 .sleb128 -32
+ 4766 1110 23 .uleb128 0x23
+ 4767 1111 00000000 .long .LASF353
+ 4768 1115 35110000 .long 0x1135
+ 4769 1119 01 .byte 0x1
+ 4770 111a 09 .byte 0x9
+ 4771 111b 03 .byte 0x3
+ 4772 111c 00000000 .quad __PRETTY_FUNCTION__.7264
+ 4772 00000000
+ 4773 1124 00 .byte 0x0
+ 4774 1125 1B .uleb128 0x1b
+ 4775 1126 C1000000 .long 0xc1
+ 4776 112a 35110000 .long 0x1135
+ 4777 112e 17 .uleb128 0x17
+ 4778 112f B1000000 .long 0xb1
+ 4779 1133 1B .byte 0x1b
+ 4780 1134 00 .byte 0x0
+ 4781 1135 0B .uleb128 0xb
+ 4782 1136 25110000 .long 0x1125
+ 4783 113a 1E .uleb128 0x1e
+ 4784 113b 00000000 .long .LASF358
+ 4785 113f 01 .byte 0x1
+ 4786 1140 BE .byte 0xbe
+ 4787 1141 01 .byte 0x1
+ 4788 1142 7B000000 .long 0x7b
+ 4789 1146 00000000 .quad .LFB596
+ 4789 00000000
+ 4790 114e 00000000 .quad .LFE596
+ 4790 00000000
+ 4791 1156 00000000 .long .LLST6
+ 4792 115a 8F110000 .long 0x118f
+ 4793 115e 1F .uleb128 0x1f
+ 4794 115f 00000000 .long .LASF349
+ 4795 1163 01 .byte 0x1
+ 4796 1164 BE .byte 0xbe
+
GAS LISTING /tmp/ccXzRABk.s page 113
+
+
+ 4797 1165 DE030000 .long 0x3de
+ 4798 1169 02 .byte 0x2
+ 4799 116a 91 .byte 0x91
+ 4800 116b 68 .sleb128 -24
+ 4801 116c 1F .uleb128 0x1f
+ 4802 116d 00000000 .long .LASF357
+ 4803 1171 01 .byte 0x1
+ 4804 1172 BF .byte 0xbf
+ 4805 1173 1F040000 .long 0x41f
+ 4806 1177 02 .byte 0x2
+ 4807 1178 91 .byte 0x91
+ 4808 1179 60 .sleb128 -32
+ 4809 117a 23 .uleb128 0x23
+ 4810 117b 00000000 .long .LASF353
+ 4811 117f 8F110000 .long 0x118f
+ 4812 1183 01 .byte 0x1
+ 4813 1184 09 .byte 0x9
+ 4814 1185 03 .byte 0x3
+ 4815 1186 00000000 .quad __PRETTY_FUNCTION__.7277
+ 4815 00000000
+ 4816 118e 00 .byte 0x0
+ 4817 118f 0B .uleb128 0xb
+ 4818 1190 25110000 .long 0x1125
+ 4819 1194 1E .uleb128 0x1e
+ 4820 1195 00000000 .long .LASF359
+ 4821 1199 01 .byte 0x1
+ 4822 119a CB .byte 0xcb
+ 4823 119b 01 .byte 0x1
+ 4824 119c 7B000000 .long 0x7b
+ 4825 11a0 00000000 .quad .LFB597
+ 4825 00000000
+ 4826 11a8 00000000 .quad .LFE597
+ 4826 00000000
+ 4827 11b0 00000000 .long .LLST7
+ 4828 11b4 E9110000 .long 0x11e9
+ 4829 11b8 1F .uleb128 0x1f
+ 4830 11b9 00000000 .long .LASF349
+ 4831 11bd 01 .byte 0x1
+ 4832 11be CB .byte 0xcb
+ 4833 11bf DE030000 .long 0x3de
+ 4834 11c3 02 .byte 0x2
+ 4835 11c4 91 .byte 0x91
+ 4836 11c5 68 .sleb128 -24
+ 4837 11c6 1F .uleb128 0x1f
+ 4838 11c7 00000000 .long .LASF360
+ 4839 11cb 01 .byte 0x1
+ 4840 11cc CC .byte 0xcc
+ 4841 11cd F7010000 .long 0x1f7
+ 4842 11d1 02 .byte 0x2
+ 4843 11d2 91 .byte 0x91
+ 4844 11d3 60 .sleb128 -32
+ 4845 11d4 23 .uleb128 0x23
+ 4846 11d5 00000000 .long .LASF353
+ 4847 11d9 F9110000 .long 0x11f9
+ 4848 11dd 01 .byte 0x1
+ 4849 11de 09 .byte 0x9
+ 4850 11df 03 .byte 0x3
+
GAS LISTING /tmp/ccXzRABk.s page 114
+
+
+ 4851 11e0 00000000 .quad __PRETTY_FUNCTION__.7290
+ 4851 00000000
+ 4852 11e8 00 .byte 0x0
+ 4853 11e9 1B .uleb128 0x1b
+ 4854 11ea C1000000 .long 0xc1
+ 4855 11ee F9110000 .long 0x11f9
+ 4856 11f2 17 .uleb128 0x17
+ 4857 11f3 B1000000 .long 0xb1
+ 4858 11f7 22 .byte 0x22
+ 4859 11f8 00 .byte 0x0
+ 4860 11f9 0B .uleb128 0xb
+ 4861 11fa E9110000 .long 0x11e9
+ 4862 11fe 1E .uleb128 0x1e
+ 4863 11ff 00000000 .long .LASF361
+ 4864 1203 01 .byte 0x1
+ 4865 1204 D8 .byte 0xd8
+ 4866 1205 01 .byte 0x1
+ 4867 1206 7B000000 .long 0x7b
+ 4868 120a 00000000 .quad .LFB598
+ 4868 00000000
+ 4869 1212 00000000 .quad .LFE598
+ 4869 00000000
+ 4870 121a 00000000 .long .LLST8
+ 4871 121e 53120000 .long 0x1253
+ 4872 1222 1F .uleb128 0x1f
+ 4873 1223 00000000 .long .LASF349
+ 4874 1227 01 .byte 0x1
+ 4875 1228 D8 .byte 0xd8
+ 4876 1229 DE030000 .long 0x3de
+ 4877 122d 02 .byte 0x2
+ 4878 122e 91 .byte 0x91
+ 4879 122f 68 .sleb128 -24
+ 4880 1230 1F .uleb128 0x1f
+ 4881 1231 00000000 .long .LASF360
+ 4882 1235 01 .byte 0x1
+ 4883 1236 D9 .byte 0xd9
+ 4884 1237 F7010000 .long 0x1f7
+ 4885 123b 02 .byte 0x2
+ 4886 123c 91 .byte 0x91
+ 4887 123d 60 .sleb128 -32
+ 4888 123e 23 .uleb128 0x23
+ 4889 123f 00000000 .long .LASF353
+ 4890 1243 53120000 .long 0x1253
+ 4891 1247 01 .byte 0x1
+ 4892 1248 09 .byte 0x9
+ 4893 1249 03 .byte 0x3
+ 4894 124a 00000000 .quad __PRETTY_FUNCTION__.7300
+ 4894 00000000
+ 4895 1252 00 .byte 0x0
+ 4896 1253 0B .uleb128 0xb
+ 4897 1254 E9110000 .long 0x11e9
+ 4898 1258 1E .uleb128 0x1e
+ 4899 1259 00000000 .long .LASF362
+ 4900 125d 01 .byte 0x1
+ 4901 125e E4 .byte 0xe4
+ 4902 125f 01 .byte 0x1
+ 4903 1260 3D050000 .long 0x53d
+
GAS LISTING /tmp/ccXzRABk.s page 115
+
+
+ 4904 1264 00000000 .quad .LFB599
+ 4904 00000000
+ 4905 126c 00000000 .quad .LFE599
+ 4905 00000000
+ 4906 1274 00000000 .long .LLST9
+ 4907 1278 97120000 .long 0x1297
+ 4908 127c 1F .uleb128 0x1f
+ 4909 127d 00000000 .long .LASF349
+ 4910 1281 01 .byte 0x1
+ 4911 1282 E4 .byte 0xe4
+ 4912 1283 61040000 .long 0x461
+ 4913 1287 02 .byte 0x2
+ 4914 1288 91 .byte 0x91
+ 4915 1289 68 .sleb128 -24
+ 4916 128a 22 .uleb128 0x22
+ 4917 128b 637600 .string "cv"
+ 4918 128e 01 .byte 0x1
+ 4919 128f E5 .byte 0xe5
+ 4920 1290 3D050000 .long 0x53d
+ 4921 1294 01 .byte 0x1
+ 4922 1295 61 .byte 0x61
+ 4923 1296 00 .byte 0x0
+ 4924 1297 1E .uleb128 0x1e
+ 4925 1298 00000000 .long .LASF363
+ 4926 129c 01 .byte 0x1
+ 4927 129d EB .byte 0xeb
+ 4928 129e 01 .byte 0x1
+ 4929 129f 3D050000 .long 0x53d
+ 4930 12a3 00000000 .quad .LFB600
+ 4930 00000000
+ 4931 12ab 00000000 .quad .LFE600
+ 4931 00000000
+ 4932 12b3 00000000 .long .LLST10
+ 4933 12b7 D6120000 .long 0x12d6
+ 4934 12bb 1F .uleb128 0x1f
+ 4935 12bc 00000000 .long .LASF349
+ 4936 12c0 01 .byte 0x1
+ 4937 12c1 EB .byte 0xeb
+ 4938 12c2 61040000 .long 0x461
+ 4939 12c6 02 .byte 0x2
+ 4940 12c7 91 .byte 0x91
+ 4941 12c8 68 .sleb128 -24
+ 4942 12c9 22 .uleb128 0x22
+ 4943 12ca 637600 .string "cv"
+ 4944 12cd 01 .byte 0x1
+ 4945 12ce EC .byte 0xec
+ 4946 12cf 3D050000 .long 0x53d
+ 4947 12d3 01 .byte 0x1
+ 4948 12d4 61 .byte 0x61
+ 4949 12d5 00 .byte 0x0
+ 4950 12d6 1E .uleb128 0x1e
+ 4951 12d7 00000000 .long .LASF364
+ 4952 12db 01 .byte 0x1
+ 4953 12dc F2 .byte 0xf2
+ 4954 12dd 01 .byte 0x1
+ 4955 12de 7B000000 .long 0x7b
+ 4956 12e2 00000000 .quad .LFB601
+
GAS LISTING /tmp/ccXzRABk.s page 116
+
+
+ 4956 00000000
+ 4957 12ea 00000000 .quad .LFE601
+ 4957 00000000
+ 4958 12f2 00000000 .long .LLST11
+ 4959 12f6 31130000 .long 0x1331
+ 4960 12fa 1F .uleb128 0x1f
+ 4961 12fb 00000000 .long .LASF349
+ 4962 12ff 01 .byte 0x1
+ 4963 1300 F2 .byte 0xf2
+ 4964 1301 61040000 .long 0x461
+ 4965 1305 02 .byte 0x2
+ 4966 1306 91 .byte 0x91
+ 4967 1307 58 .sleb128 -40
+ 4968 1308 22 .uleb128 0x22
+ 4969 1309 696E00 .string "in"
+ 4970 130c 01 .byte 0x1
+ 4971 130d F3 .byte 0xf3
+ 4972 130e 1F040000 .long 0x41f
+ 4973 1312 02 .byte 0x2
+ 4974 1313 91 .byte 0x91
+ 4975 1314 50 .sleb128 -48
+ 4976 1315 22 .uleb128 0x22
+ 4977 1316 6F757400 .string "out"
+ 4978 131a 01 .byte 0x1
+ 4979 131b F3 .byte 0xf3
+ 4980 131c B4000000 .long 0xb4
+ 4981 1320 02 .byte 0x2
+ 4982 1321 91 .byte 0x91
+ 4983 1322 48 .sleb128 -56
+ 4984 1323 20 .uleb128 0x20
+ 4985 1324 637600 .string "cv"
+ 4986 1327 01 .byte 0x1
+ 4987 1328 F5 .byte 0xf5
+ 4988 1329 3D050000 .long 0x53d
+ 4989 132d 02 .byte 0x2
+ 4990 132e 91 .byte 0x91
+ 4991 132f 60 .sleb128 -32
+ 4992 1330 00 .byte 0x0
+ 4993 1331 1E .uleb128 0x1e
+ 4994 1332 00000000 .long .LASF365
+ 4995 1336 01 .byte 0x1
+ 4996 1337 FE .byte 0xfe
+ 4997 1338 01 .byte 0x1
+ 4998 1339 7B000000 .long 0x7b
+ 4999 133d 00000000 .quad .LFB602
+ 4999 00000000
+ 5000 1345 00000000 .quad .LFE602
+ 5000 00000000
+ 5001 134d 00000000 .long .LLST12
+ 5002 1351 8D130000 .long 0x138d
+ 5003 1355 1F .uleb128 0x1f
+ 5004 1356 00000000 .long .LASF349
+ 5005 135a 01 .byte 0x1
+ 5006 135b FE .byte 0xfe
+ 5007 135c 61040000 .long 0x461
+ 5008 1360 02 .byte 0x2
+ 5009 1361 91 .byte 0x91
+
GAS LISTING /tmp/ccXzRABk.s page 117
+
+
+ 5010 1362 58 .sleb128 -40
+ 5011 1363 22 .uleb128 0x22
+ 5012 1364 696E00 .string "in"
+ 5013 1367 01 .byte 0x1
+ 5014 1368 FF .byte 0xff
+ 5015 1369 1F040000 .long 0x41f
+ 5016 136d 02 .byte 0x2
+ 5017 136e 91 .byte 0x91
+ 5018 136f 50 .sleb128 -48
+ 5019 1370 22 .uleb128 0x22
+ 5020 1371 6F757400 .string "out"
+ 5021 1375 01 .byte 0x1
+ 5022 1376 FF .byte 0xff
+ 5023 1377 B4000000 .long 0xb4
+ 5024 137b 02 .byte 0x2
+ 5025 137c 91 .byte 0x91
+ 5026 137d 48 .sleb128 -56
+ 5027 137e 24 .uleb128 0x24
+ 5028 137f 637600 .string "cv"
+ 5029 1382 01 .byte 0x1
+ 5030 1383 0101 .value 0x101
+ 5031 1385 3D050000 .long 0x53d
+ 5032 1389 02 .byte 0x2
+ 5033 138a 91 .byte 0x91
+ 5034 138b 60 .sleb128 -32
+ 5035 138c 00 .byte 0x0
+ 5036 138d 25 .uleb128 0x25
+ 5037 138e 00000000 .long .LASF366
+ 5038 1392 01 .byte 0x1
+ 5039 1393 0A01 .value 0x10a
+ 5040 1395 01 .byte 0x1
+ 5041 1396 7B000000 .long 0x7b
+ 5042 139a 00000000 .quad .LFB603
+ 5042 00000000
+ 5043 13a2 00000000 .quad .LFE603
+ 5043 00000000
+ 5044 13aa 00000000 .long .LLST13
+ 5045 13ae 15140000 .long 0x1415
+ 5046 13b2 26 .uleb128 0x26
+ 5047 13b3 00000000 .long .LASF349
+ 5048 13b7 01 .byte 0x1
+ 5049 13b8 0A01 .value 0x10a
+ 5050 13ba 61040000 .long 0x461
+ 5051 13be 02 .byte 0x2
+ 5052 13bf 91 .byte 0x91
+ 5053 13c0 58 .sleb128 -40
+ 5054 13c1 27 .uleb128 0x27
+ 5055 13c2 696E00 .string "in"
+ 5056 13c5 01 .byte 0x1
+ 5057 13c6 0A01 .value 0x10a
+ 5058 13c8 1F040000 .long 0x41f
+ 5059 13cc 02 .byte 0x2
+ 5060 13cd 91 .byte 0x91
+ 5061 13ce 50 .sleb128 -48
+ 5062 13cf 27 .uleb128 0x27
+ 5063 13d0 6F757400 .string "out"
+ 5064 13d4 01 .byte 0x1
+
GAS LISTING /tmp/ccXzRABk.s page 118
+
+
+ 5065 13d5 0A01 .value 0x10a
+ 5066 13d7 B4000000 .long 0xb4
+ 5067 13db 02 .byte 0x2
+ 5068 13dc 91 .byte 0x91
+ 5069 13dd 48 .sleb128 -56
+ 5070 13de 24 .uleb128 0x24
+ 5071 13df 726300 .string "rc"
+ 5072 13e2 01 .byte 0x1
+ 5073 13e3 0C01 .value 0x10c
+ 5074 13e5 7B000000 .long 0x7b
+ 5075 13e9 02 .byte 0x2
+ 5076 13ea 91 .byte 0x91
+ 5077 13eb 6C .sleb128 -20
+ 5078 13ec 23 .uleb128 0x23
+ 5079 13ed 00000000 .long .LASF353
+ 5080 13f1 25140000 .long 0x1425
+ 5081 13f5 01 .byte 0x1
+ 5082 13f6 09 .byte 0x9
+ 5083 13f7 03 .byte 0x3
+ 5084 13f8 00000000 .quad __PRETTY_FUNCTION__.7349
+ 5084 00000000
+ 5085 1400 23 .uleb128 0x23
+ 5086 1401 00000000 .long .LASF354
+ 5087 1405 2A140000 .long 0x142a
+ 5088 1409 01 .byte 0x1
+ 5089 140a 09 .byte 0x9
+ 5090 140b 03 .byte 0x3
+ 5091 140c 00000000 .quad __func__.7350
+ 5091 00000000
+ 5092 1414 00 .byte 0x0
+ 5093 1415 1B .uleb128 0x1b
+ 5094 1416 C1000000 .long 0xc1
+ 5095 141a 25140000 .long 0x1425
+ 5096 141e 17 .uleb128 0x17
+ 5097 141f B1000000 .long 0xb1
+ 5098 1423 14 .byte 0x14
+ 5099 1424 00 .byte 0x0
+ 5100 1425 0B .uleb128 0xb
+ 5101 1426 15140000 .long 0x1415
+ 5102 142a 0B .uleb128 0xb
+ 5103 142b 15140000 .long 0x1415
+ 5104 142f 25 .uleb128 0x25
+ 5105 1430 00000000 .long .LASF367
+ 5106 1434 01 .byte 0x1
+ 5107 1435 1E01 .value 0x11e
+ 5108 1437 01 .byte 0x1
+ 5109 1438 7B000000 .long 0x7b
+ 5110 143c 00000000 .quad .LFB604
+ 5110 00000000
+ 5111 1444 00000000 .quad .LFE604
+ 5111 00000000
+ 5112 144c 00000000 .long .LLST14
+ 5113 1450 B7140000 .long 0x14b7
+ 5114 1454 26 .uleb128 0x26
+ 5115 1455 00000000 .long .LASF349
+ 5116 1459 01 .byte 0x1
+ 5117 145a 1E01 .value 0x11e
+
GAS LISTING /tmp/ccXzRABk.s page 119
+
+
+ 5118 145c 61040000 .long 0x461
+ 5119 1460 02 .byte 0x2
+ 5120 1461 91 .byte 0x91
+ 5121 1462 58 .sleb128 -40
+ 5122 1463 27 .uleb128 0x27
+ 5123 1464 696E00 .string "in"
+ 5124 1467 01 .byte 0x1
+ 5125 1468 1E01 .value 0x11e
+ 5126 146a 1F040000 .long 0x41f
+ 5127 146e 02 .byte 0x2
+ 5128 146f 91 .byte 0x91
+ 5129 1470 50 .sleb128 -48
+ 5130 1471 27 .uleb128 0x27
+ 5131 1472 6F757400 .string "out"
+ 5132 1476 01 .byte 0x1
+ 5133 1477 1E01 .value 0x11e
+ 5134 1479 B4000000 .long 0xb4
+ 5135 147d 02 .byte 0x2
+ 5136 147e 91 .byte 0x91
+ 5137 147f 48 .sleb128 -56
+ 5138 1480 24 .uleb128 0x24
+ 5139 1481 726300 .string "rc"
+ 5140 1484 01 .byte 0x1
+ 5141 1485 2001 .value 0x120
+ 5142 1487 7B000000 .long 0x7b
+ 5143 148b 02 .byte 0x2
+ 5144 148c 91 .byte 0x91
+ 5145 148d 6C .sleb128 -20
+ 5146 148e 23 .uleb128 0x23
+ 5147 148f 00000000 .long .LASF353
+ 5148 1493 B7140000 .long 0x14b7
+ 5149 1497 01 .byte 0x1
+ 5150 1498 09 .byte 0x9
+ 5151 1499 03 .byte 0x3
+ 5152 149a 00000000 .quad __PRETTY_FUNCTION__.7365
+ 5152 00000000
+ 5153 14a2 23 .uleb128 0x23
+ 5154 14a3 00000000 .long .LASF354
+ 5155 14a7 BC140000 .long 0x14bc
+ 5156 14ab 01 .byte 0x1
+ 5157 14ac 09 .byte 0x9
+ 5158 14ad 03 .byte 0x3
+ 5159 14ae 00000000 .quad __func__.7366
+ 5159 00000000
+ 5160 14b6 00 .byte 0x0
+ 5161 14b7 0B .uleb128 0xb
+ 5162 14b8 15140000 .long 0x1415
+ 5163 14bc 0B .uleb128 0xb
+ 5164 14bd 15140000 .long 0x1415
+ 5165 14c1 25 .uleb128 0x25
+ 5166 14c2 00000000 .long .LASF368
+ 5167 14c6 01 .byte 0x1
+ 5168 14c7 5C01 .value 0x15c
+ 5169 14c9 01 .byte 0x1
+ 5170 14ca 7B000000 .long 0x7b
+ 5171 14ce 00000000 .quad .LFB605
+ 5171 00000000
+
GAS LISTING /tmp/ccXzRABk.s page 120
+
+
+ 5172 14d6 00000000 .quad .LFE605
+ 5172 00000000
+ 5173 14de 00000000 .long .LLST15
+ 5174 14e2 40150000 .long 0x1540
+ 5175 14e6 26 .uleb128 0x26
+ 5176 14e7 00000000 .long .LASF349
+ 5177 14eb 01 .byte 0x1
+ 5178 14ec 5C01 .value 0x15c
+ 5179 14ee 61040000 .long 0x461
+ 5180 14f2 02 .byte 0x2
+ 5181 14f3 91 .byte 0x91
+ 5182 14f4 58 .sleb128 -40
+ 5183 14f5 27 .uleb128 0x27
+ 5184 14f6 696E00 .string "in"
+ 5185 14f9 01 .byte 0x1
+ 5186 14fa 5C01 .value 0x15c
+ 5187 14fc 1F040000 .long 0x41f
+ 5188 1500 02 .byte 0x2
+ 5189 1501 91 .byte 0x91
+ 5190 1502 50 .sleb128 -48
+ 5191 1503 27 .uleb128 0x27
+ 5192 1504 6F757400 .string "out"
+ 5193 1508 01 .byte 0x1
+ 5194 1509 5C01 .value 0x15c
+ 5195 150b B4000000 .long 0xb4
+ 5196 150f 02 .byte 0x2
+ 5197 1510 91 .byte 0x91
+ 5198 1511 48 .sleb128 -56
+ 5199 1512 26 .uleb128 0x26
+ 5200 1513 00000000 .long .LASF369
+ 5201 1517 01 .byte 0x1
+ 5202 1518 5C01 .value 0x15c
+ 5203 151a 62000000 .long 0x62
+ 5204 151e 02 .byte 0x2
+ 5205 151f 91 .byte 0x91
+ 5206 1520 44 .sleb128 -60
+ 5207 1521 24 .uleb128 0x24
+ 5208 1522 70696E00 .string "pin"
+ 5209 1526 01 .byte 0x1
+ 5210 1527 5E01 .value 0x15e
+ 5211 1529 40150000 .long 0x1540
+ 5212 152d 02 .byte 0x2
+ 5213 152e 91 .byte 0x91
+ 5214 152f 60 .sleb128 -32
+ 5215 1530 28 .uleb128 0x28
+ 5216 1531 00000000 .long .LASF370
+ 5217 1535 01 .byte 0x1
+ 5218 1536 5F01 .value 0x15f
+ 5219 1538 4B150000 .long 0x154b
+ 5220 153c 02 .byte 0x2
+ 5221 153d 91 .byte 0x91
+ 5222 153e 68 .sleb128 -24
+ 5223 153f 00 .byte 0x0
+ 5224 1540 0A .uleb128 0xa
+ 5225 1541 08 .byte 0x8
+ 5226 1542 46150000 .long 0x1546
+ 5227 1546 0B .uleb128 0xb
+
GAS LISTING /tmp/ccXzRABk.s page 121
+
+
+ 5228 1547 49000000 .long 0x49
+ 5229 154b 0A .uleb128 0xa
+ 5230 154c 08 .byte 0x8
+ 5231 154d 49000000 .long 0x49
+ 5232 1551 25 .uleb128 0x25
+ 5233 1552 00000000 .long .LASF371
+ 5234 1556 01 .byte 0x1
+ 5235 1557 6C01 .value 0x16c
+ 5236 1559 01 .byte 0x1
+ 5237 155a 7B000000 .long 0x7b
+ 5238 155e 00000000 .quad .LFB606
+ 5238 00000000
+ 5239 1566 00000000 .quad .LFE606
+ 5239 00000000
+ 5240 156e 00000000 .long .LLST16
+ 5241 1572 D0150000 .long 0x15d0
+ 5242 1576 26 .uleb128 0x26
+ 5243 1577 00000000 .long .LASF349
+ 5244 157b 01 .byte 0x1
+ 5245 157c 6C01 .value 0x16c
+ 5246 157e 61040000 .long 0x461
+ 5247 1582 02 .byte 0x2
+ 5248 1583 91 .byte 0x91
+ 5249 1584 58 .sleb128 -40
+ 5250 1585 27 .uleb128 0x27
+ 5251 1586 696E00 .string "in"
+ 5252 1589 01 .byte 0x1
+ 5253 158a 6C01 .value 0x16c
+ 5254 158c 1F040000 .long 0x41f
+ 5255 1590 02 .byte 0x2
+ 5256 1591 91 .byte 0x91
+ 5257 1592 50 .sleb128 -48
+ 5258 1593 27 .uleb128 0x27
+ 5259 1594 6F757400 .string "out"
+ 5260 1598 01 .byte 0x1
+ 5261 1599 6C01 .value 0x16c
+ 5262 159b B4000000 .long 0xb4
+ 5263 159f 02 .byte 0x2
+ 5264 15a0 91 .byte 0x91
+ 5265 15a1 48 .sleb128 -56
+ 5266 15a2 26 .uleb128 0x26
+ 5267 15a3 00000000 .long .LASF369
+ 5268 15a7 01 .byte 0x1
+ 5269 15a8 6C01 .value 0x16c
+ 5270 15aa 62000000 .long 0x62
+ 5271 15ae 02 .byte 0x2
+ 5272 15af 91 .byte 0x91
+ 5273 15b0 44 .sleb128 -60
+ 5274 15b1 24 .uleb128 0x24
+ 5275 15b2 70696E00 .string "pin"
+ 5276 15b6 01 .byte 0x1
+ 5277 15b7 6E01 .value 0x16e
+ 5278 15b9 40150000 .long 0x1540
+ 5279 15bd 02 .byte 0x2
+ 5280 15be 91 .byte 0x91
+ 5281 15bf 60 .sleb128 -32
+ 5282 15c0 28 .uleb128 0x28
+
GAS LISTING /tmp/ccXzRABk.s page 122
+
+
+ 5283 15c1 00000000 .long .LASF370
+ 5284 15c5 01 .byte 0x1
+ 5285 15c6 6F01 .value 0x16f
+ 5286 15c8 4B150000 .long 0x154b
+ 5287 15cc 02 .byte 0x2
+ 5288 15cd 91 .byte 0x91
+ 5289 15ce 68 .sleb128 -24
+ 5290 15cf 00 .byte 0x0
+ 5291 15d0 25 .uleb128 0x25
+ 5292 15d1 00000000 .long .LASF372
+ 5293 15d5 01 .byte 0x1
+ 5294 15d6 8201 .value 0x182
+ 5295 15d8 01 .byte 0x1
+ 5296 15d9 7B000000 .long 0x7b
+ 5297 15dd 00000000 .quad .LFB607
+ 5297 00000000
+ 5298 15e5 00000000 .quad .LFE607
+ 5298 00000000
+ 5299 15ed 00000000 .long .LLST17
+ 5300 15f1 70160000 .long 0x1670
+ 5301 15f5 26 .uleb128 0x26
+ 5302 15f6 00000000 .long .LASF349
+ 5303 15fa 01 .byte 0x1
+ 5304 15fb 8201 .value 0x182
+ 5305 15fd DE030000 .long 0x3de
+ 5306 1601 03 .byte 0x3
+ 5307 1602 91 .byte 0x91
+ 5308 1603 B87F .sleb128 -72
+ 5309 1605 27 .uleb128 0x27
+ 5310 1606 696E00 .string "in"
+ 5311 1609 01 .byte 0x1
+ 5312 160a 8201 .value 0x182
+ 5313 160c 1F040000 .long 0x41f
+ 5314 1610 03 .byte 0x3
+ 5315 1611 91 .byte 0x91
+ 5316 1612 B07F .sleb128 -80
+ 5317 1614 27 .uleb128 0x27
+ 5318 1615 6F757400 .string "out"
+ 5319 1619 01 .byte 0x1
+ 5320 161a 8201 .value 0x182
+ 5321 161c B4000000 .long 0xb4
+ 5322 1620 03 .byte 0x3
+ 5323 1621 91 .byte 0x91
+ 5324 1622 A87F .sleb128 -88
+ 5325 1624 26 .uleb128 0x26
+ 5326 1625 00000000 .long .LASF369
+ 5327 1629 01 .byte 0x1
+ 5328 162a 8201 .value 0x182
+ 5329 162c 62000000 .long 0x62
+ 5330 1630 03 .byte 0x3
+ 5331 1631 91 .byte 0x91
+ 5332 1632 A47F .sleb128 -92
+ 5333 1634 24 .uleb128 0x24
+ 5334 1635 637600 .string "cv"
+ 5335 1638 01 .byte 0x1
+ 5336 1639 8401 .value 0x184
+ 5337 163b 3D050000 .long 0x53d
+
GAS LISTING /tmp/ccXzRABk.s page 123
+
+
+ 5338 163f 02 .byte 0x2
+ 5339 1640 91 .byte 0x91
+ 5340 1641 40 .sleb128 -64
+ 5341 1642 28 .uleb128 0x28
+ 5342 1643 00000000 .long .LASF357
+ 5343 1647 01 .byte 0x1
+ 5344 1648 8501 .value 0x185
+ 5345 164a 3D050000 .long 0x53d
+ 5346 164e 02 .byte 0x2
+ 5347 164f 91 .byte 0x91
+ 5348 1650 50 .sleb128 -48
+ 5349 1651 24 .uleb128 0x24
+ 5350 1652 70696E00 .string "pin"
+ 5351 1656 01 .byte 0x1
+ 5352 1657 8601 .value 0x186
+ 5353 1659 40150000 .long 0x1540
+ 5354 165d 02 .byte 0x2
+ 5355 165e 91 .byte 0x91
+ 5356 165f 60 .sleb128 -32
+ 5357 1660 28 .uleb128 0x28
+ 5358 1661 00000000 .long .LASF370
+ 5359 1665 01 .byte 0x1
+ 5360 1666 8701 .value 0x187
+ 5361 1668 4B150000 .long 0x154b
+ 5362 166c 02 .byte 0x2
+ 5363 166d 91 .byte 0x91
+ 5364 166e 68 .sleb128 -24
+ 5365 166f 00 .byte 0x0
+ 5366 1670 25 .uleb128 0x25
+ 5367 1671 00000000 .long .LASF373
+ 5368 1675 01 .byte 0x1
+ 5369 1676 A401 .value 0x1a4
+ 5370 1678 01 .byte 0x1
+ 5371 1679 7B000000 .long 0x7b
+ 5372 167d 00000000 .quad .LFB608
+ 5372 00000000
+ 5373 1685 00000000 .quad .LFE608
+ 5373 00000000
+ 5374 168d 00000000 .long .LLST18
+ 5375 1691 32170000 .long 0x1732
+ 5376 1695 26 .uleb128 0x26
+ 5377 1696 00000000 .long .LASF349
+ 5378 169a 01 .byte 0x1
+ 5379 169b A401 .value 0x1a4
+ 5380 169d DE030000 .long 0x3de
+ 5381 16a1 03 .byte 0x3
+ 5382 16a2 91 .byte 0x91
+ 5383 16a3 A87F .sleb128 -88
+ 5384 16a5 27 .uleb128 0x27
+ 5385 16a6 696E00 .string "in"
+ 5386 16a9 01 .byte 0x1
+ 5387 16aa A401 .value 0x1a4
+ 5388 16ac 1F040000 .long 0x41f
+ 5389 16b0 03 .byte 0x3
+ 5390 16b1 91 .byte 0x91
+ 5391 16b2 A07F .sleb128 -96
+ 5392 16b4 27 .uleb128 0x27
+
GAS LISTING /tmp/ccXzRABk.s page 124
+
+
+ 5393 16b5 6F757400 .string "out"
+ 5394 16b9 01 .byte 0x1
+ 5395 16ba A401 .value 0x1a4
+ 5396 16bc B4000000 .long 0xb4
+ 5397 16c0 03 .byte 0x3
+ 5398 16c1 91 .byte 0x91
+ 5399 16c2 987F .sleb128 -104
+ 5400 16c4 26 .uleb128 0x26
+ 5401 16c5 00000000 .long .LASF369
+ 5402 16c9 01 .byte 0x1
+ 5403 16ca A401 .value 0x1a4
+ 5404 16cc 62000000 .long 0x62
+ 5405 16d0 03 .byte 0x3
+ 5406 16d1 91 .byte 0x91
+ 5407 16d2 947F .sleb128 -108
+ 5408 16d4 24 .uleb128 0x24
+ 5409 16d5 637600 .string "cv"
+ 5410 16d8 01 .byte 0x1
+ 5411 16d9 A601 .value 0x1a6
+ 5412 16db 3D050000 .long 0x53d
+ 5413 16df 03 .byte 0x3
+ 5414 16e0 91 .byte 0x91
+ 5415 16e1 B07F .sleb128 -80
+ 5416 16e3 28 .uleb128 0x28
+ 5417 16e4 00000000 .long .LASF357
+ 5418 16e8 01 .byte 0x1
+ 5419 16e9 A701 .value 0x1a7
+ 5420 16eb 3D050000 .long 0x53d
+ 5421 16ef 02 .byte 0x2
+ 5422 16f0 91 .byte 0x91
+ 5423 16f1 40 .sleb128 -64
+ 5424 16f2 24 .uleb128 0x24
+ 5425 16f3 70696E00 .string "pin"
+ 5426 16f7 01 .byte 0x1
+ 5427 16f8 A801 .value 0x1a8
+ 5428 16fa 40150000 .long 0x1540
+ 5429 16fe 02 .byte 0x2
+ 5430 16ff 91 .byte 0x91
+ 5431 1700 50 .sleb128 -48
+ 5432 1701 28 .uleb128 0x28
+ 5433 1702 00000000 .long .LASF370
+ 5434 1706 01 .byte 0x1
+ 5435 1707 A901 .value 0x1a9
+ 5436 1709 4B150000 .long 0x154b
+ 5437 170d 02 .byte 0x2
+ 5438 170e 91 .byte 0x91
+ 5439 170f 58 .sleb128 -40
+ 5440 1710 29 .uleb128 0x29
+ 5441 1711 00000000 .quad .LBB2
+ 5441 00000000
+ 5442 1719 00000000 .quad .LBE2
+ 5442 00000000
+ 5443 1721 28 .uleb128 0x28
+ 5444 1722 00000000 .long .LASF374
+ 5445 1726 01 .byte 0x1
+ 5446 1727 B101 .value 0x1b1
+ 5447 1729 3D050000 .long 0x53d
+
GAS LISTING /tmp/ccXzRABk.s page 125
+
+
+ 5448 172d 02 .byte 0x2
+ 5449 172e 91 .byte 0x91
+ 5450 172f 60 .sleb128 -32
+ 5451 1730 00 .byte 0x0
+ 5452 1731 00 .byte 0x0
+ 5453 1732 25 .uleb128 0x25
+ 5454 1733 00000000 .long .LASF375
+ 5455 1737 01 .byte 0x1
+ 5456 1738 CA01 .value 0x1ca
+ 5457 173a 01 .byte 0x1
+ 5458 173b 7B000000 .long 0x7b
+ 5459 173f 00000000 .quad .LFB609
+ 5459 00000000
+ 5460 1747 00000000 .quad .LFE609
+ 5460 00000000
+ 5461 174f 00000000 .long .LLST19
+ 5462 1753 F4170000 .long 0x17f4
+ 5463 1757 26 .uleb128 0x26
+ 5464 1758 00000000 .long .LASF349
+ 5465 175c 01 .byte 0x1
+ 5466 175d CA01 .value 0x1ca
+ 5467 175f DE030000 .long 0x3de
+ 5468 1763 03 .byte 0x3
+ 5469 1764 91 .byte 0x91
+ 5470 1765 A87F .sleb128 -88
+ 5471 1767 27 .uleb128 0x27
+ 5472 1768 696E00 .string "in"
+ 5473 176b 01 .byte 0x1
+ 5474 176c CA01 .value 0x1ca
+ 5475 176e 1F040000 .long 0x41f
+ 5476 1772 03 .byte 0x3
+ 5477 1773 91 .byte 0x91
+ 5478 1774 A07F .sleb128 -96
+ 5479 1776 27 .uleb128 0x27
+ 5480 1777 6F757400 .string "out"
+ 5481 177b 01 .byte 0x1
+ 5482 177c CA01 .value 0x1ca
+ 5483 177e B4000000 .long 0xb4
+ 5484 1782 03 .byte 0x3
+ 5485 1783 91 .byte 0x91
+ 5486 1784 987F .sleb128 -104
+ 5487 1786 26 .uleb128 0x26
+ 5488 1787 00000000 .long .LASF369
+ 5489 178b 01 .byte 0x1
+ 5490 178c CA01 .value 0x1ca
+ 5491 178e 62000000 .long 0x62
+ 5492 1792 03 .byte 0x3
+ 5493 1793 91 .byte 0x91
+ 5494 1794 947F .sleb128 -108
+ 5495 1796 24 .uleb128 0x24
+ 5496 1797 637600 .string "cv"
+ 5497 179a 01 .byte 0x1
+ 5498 179b CD01 .value 0x1cd
+ 5499 179d 3D050000 .long 0x53d
+ 5500 17a1 03 .byte 0x3
+ 5501 17a2 91 .byte 0x91
+ 5502 17a3 B07F .sleb128 -80
+
GAS LISTING /tmp/ccXzRABk.s page 126
+
+
+ 5503 17a5 28 .uleb128 0x28
+ 5504 17a6 00000000 .long .LASF357
+ 5505 17aa 01 .byte 0x1
+ 5506 17ab CE01 .value 0x1ce
+ 5507 17ad 3D050000 .long 0x53d
+ 5508 17b1 02 .byte 0x2
+ 5509 17b2 91 .byte 0x91
+ 5510 17b3 40 .sleb128 -64
+ 5511 17b4 24 .uleb128 0x24
+ 5512 17b5 70696E00 .string "pin"
+ 5513 17b9 01 .byte 0x1
+ 5514 17ba CF01 .value 0x1cf
+ 5515 17bc 40150000 .long 0x1540
+ 5516 17c0 02 .byte 0x2
+ 5517 17c1 91 .byte 0x91
+ 5518 17c2 50 .sleb128 -48
+ 5519 17c3 28 .uleb128 0x28
+ 5520 17c4 00000000 .long .LASF370
+ 5521 17c8 01 .byte 0x1
+ 5522 17c9 D001 .value 0x1d0
+ 5523 17cb 4B150000 .long 0x154b
+ 5524 17cf 02 .byte 0x2
+ 5525 17d0 91 .byte 0x91
+ 5526 17d1 58 .sleb128 -40
+ 5527 17d2 29 .uleb128 0x29
+ 5528 17d3 00000000 .quad .LBB3
+ 5528 00000000
+ 5529 17db 00000000 .quad .LBE3
+ 5529 00000000
+ 5530 17e3 28 .uleb128 0x28
+ 5531 17e4 00000000 .long .LASF374
+ 5532 17e8 01 .byte 0x1
+ 5533 17e9 D801 .value 0x1d8
+ 5534 17eb 3D050000 .long 0x53d
+ 5535 17ef 02 .byte 0x2
+ 5536 17f0 91 .byte 0x91
+ 5537 17f1 60 .sleb128 -32
+ 5538 17f2 00 .byte 0x0
+ 5539 17f3 00 .byte 0x0
+ 5540 17f4 25 .uleb128 0x25
+ 5541 17f5 00000000 .long .LASF376
+ 5542 17f9 01 .byte 0x1
+ 5543 17fa EB01 .value 0x1eb
+ 5544 17fc 01 .byte 0x1
+ 5545 17fd 7B000000 .long 0x7b
+ 5546 1801 00000000 .quad .LFB610
+ 5546 00000000
+ 5547 1809 00000000 .quad .LFE610
+ 5547 00000000
+ 5548 1811 00000000 .long .LLST20
+ 5549 1815 B6180000 .long 0x18b6
+ 5550 1819 26 .uleb128 0x26
+ 5551 181a 00000000 .long .LASF349
+ 5552 181e 01 .byte 0x1
+ 5553 181f EB01 .value 0x1eb
+ 5554 1821 DE030000 .long 0x3de
+ 5555 1825 03 .byte 0x3
+
GAS LISTING /tmp/ccXzRABk.s page 127
+
+
+ 5556 1826 91 .byte 0x91
+ 5557 1827 A87F .sleb128 -88
+ 5558 1829 27 .uleb128 0x27
+ 5559 182a 696E00 .string "in"
+ 5560 182d 01 .byte 0x1
+ 5561 182e EB01 .value 0x1eb
+ 5562 1830 1F040000 .long 0x41f
+ 5563 1834 03 .byte 0x3
+ 5564 1835 91 .byte 0x91
+ 5565 1836 A07F .sleb128 -96
+ 5566 1838 27 .uleb128 0x27
+ 5567 1839 6F757400 .string "out"
+ 5568 183d 01 .byte 0x1
+ 5569 183e EB01 .value 0x1eb
+ 5570 1840 B4000000 .long 0xb4
+ 5571 1844 03 .byte 0x3
+ 5572 1845 91 .byte 0x91
+ 5573 1846 987F .sleb128 -104
+ 5574 1848 26 .uleb128 0x26
+ 5575 1849 00000000 .long .LASF369
+ 5576 184d 01 .byte 0x1
+ 5577 184e EB01 .value 0x1eb
+ 5578 1850 62000000 .long 0x62
+ 5579 1854 03 .byte 0x3
+ 5580 1855 91 .byte 0x91
+ 5581 1856 947F .sleb128 -108
+ 5582 1858 24 .uleb128 0x24
+ 5583 1859 637600 .string "cv"
+ 5584 185c 01 .byte 0x1
+ 5585 185d EE01 .value 0x1ee
+ 5586 185f 3D050000 .long 0x53d
+ 5587 1863 03 .byte 0x3
+ 5588 1864 91 .byte 0x91
+ 5589 1865 B07F .sleb128 -80
+ 5590 1867 28 .uleb128 0x28
+ 5591 1868 00000000 .long .LASF357
+ 5592 186c 01 .byte 0x1
+ 5593 186d EF01 .value 0x1ef
+ 5594 186f 3D050000 .long 0x53d
+ 5595 1873 02 .byte 0x2
+ 5596 1874 91 .byte 0x91
+ 5597 1875 40 .sleb128 -64
+ 5598 1876 24 .uleb128 0x24
+ 5599 1877 70696E00 .string "pin"
+ 5600 187b 01 .byte 0x1
+ 5601 187c F001 .value 0x1f0
+ 5602 187e 40150000 .long 0x1540
+ 5603 1882 02 .byte 0x2
+ 5604 1883 91 .byte 0x91
+ 5605 1884 50 .sleb128 -48
+ 5606 1885 28 .uleb128 0x28
+ 5607 1886 00000000 .long .LASF370
+ 5608 188a 01 .byte 0x1
+ 5609 188b F101 .value 0x1f1
+ 5610 188d 4B150000 .long 0x154b
+ 5611 1891 02 .byte 0x2
+ 5612 1892 91 .byte 0x91
+
GAS LISTING /tmp/ccXzRABk.s page 128
+
+
+ 5613 1893 58 .sleb128 -40
+ 5614 1894 29 .uleb128 0x29
+ 5615 1895 00000000 .quad .LBB4
+ 5615 00000000
+ 5616 189d 00000000 .quad .LBE4
+ 5616 00000000
+ 5617 18a5 28 .uleb128 0x28
+ 5618 18a6 00000000 .long .LASF374
+ 5619 18aa 01 .byte 0x1
+ 5620 18ab F901 .value 0x1f9
+ 5621 18ad 3D050000 .long 0x53d
+ 5622 18b1 02 .byte 0x2
+ 5623 18b2 91 .byte 0x91
+ 5624 18b3 60 .sleb128 -32
+ 5625 18b4 00 .byte 0x0
+ 5626 18b5 00 .byte 0x0
+ 5627 18b6 25 .uleb128 0x25
+ 5628 18b7 00000000 .long .LASF377
+ 5629 18bb 01 .byte 0x1
+ 5630 18bc 1002 .value 0x210
+ 5631 18be 01 .byte 0x1
+ 5632 18bf 7B000000 .long 0x7b
+ 5633 18c3 00000000 .quad .LFB611
+ 5633 00000000
+ 5634 18cb 00000000 .quad .LFE611
+ 5634 00000000
+ 5635 18d3 00000000 .long .LLST21
+ 5636 18d7 56190000 .long 0x1956
+ 5637 18db 26 .uleb128 0x26
+ 5638 18dc 00000000 .long .LASF349
+ 5639 18e0 01 .byte 0x1
+ 5640 18e1 1002 .value 0x210
+ 5641 18e3 DE030000 .long 0x3de
+ 5642 18e7 03 .byte 0x3
+ 5643 18e8 91 .byte 0x91
+ 5644 18e9 B87F .sleb128 -72
+ 5645 18eb 27 .uleb128 0x27
+ 5646 18ec 696E00 .string "in"
+ 5647 18ef 01 .byte 0x1
+ 5648 18f0 1002 .value 0x210
+ 5649 18f2 1F040000 .long 0x41f
+ 5650 18f6 03 .byte 0x3
+ 5651 18f7 91 .byte 0x91
+ 5652 18f8 B07F .sleb128 -80
+ 5653 18fa 27 .uleb128 0x27
+ 5654 18fb 6F757400 .string "out"
+ 5655 18ff 01 .byte 0x1
+ 5656 1900 1002 .value 0x210
+ 5657 1902 B4000000 .long 0xb4
+ 5658 1906 03 .byte 0x3
+ 5659 1907 91 .byte 0x91
+ 5660 1908 A87F .sleb128 -88
+ 5661 190a 26 .uleb128 0x26
+ 5662 190b 00000000 .long .LASF369
+ 5663 190f 01 .byte 0x1
+ 5664 1910 1002 .value 0x210
+ 5665 1912 62000000 .long 0x62
+
GAS LISTING /tmp/ccXzRABk.s page 129
+
+
+ 5666 1916 03 .byte 0x3
+ 5667 1917 91 .byte 0x91
+ 5668 1918 A47F .sleb128 -92
+ 5669 191a 24 .uleb128 0x24
+ 5670 191b 637600 .string "cv"
+ 5671 191e 01 .byte 0x1
+ 5672 191f 1302 .value 0x213
+ 5673 1921 3D050000 .long 0x53d
+ 5674 1925 02 .byte 0x2
+ 5675 1926 91 .byte 0x91
+ 5676 1927 40 .sleb128 -64
+ 5677 1928 28 .uleb128 0x28
+ 5678 1929 00000000 .long .LASF357
+ 5679 192d 01 .byte 0x1
+ 5680 192e 1402 .value 0x214
+ 5681 1930 3D050000 .long 0x53d
+ 5682 1934 02 .byte 0x2
+ 5683 1935 91 .byte 0x91
+ 5684 1936 50 .sleb128 -48
+ 5685 1937 24 .uleb128 0x24
+ 5686 1938 70696E00 .string "pin"
+ 5687 193c 01 .byte 0x1
+ 5688 193d 1502 .value 0x215
+ 5689 193f 40150000 .long 0x1540
+ 5690 1943 02 .byte 0x2
+ 5691 1944 91 .byte 0x91
+ 5692 1945 60 .sleb128 -32
+ 5693 1946 28 .uleb128 0x28
+ 5694 1947 00000000 .long .LASF370
+ 5695 194b 01 .byte 0x1
+ 5696 194c 1602 .value 0x216
+ 5697 194e 4B150000 .long 0x154b
+ 5698 1952 02 .byte 0x2
+ 5699 1953 91 .byte 0x91
+ 5700 1954 68 .sleb128 -24
+ 5701 1955 00 .byte 0x0
+ 5702 1956 25 .uleb128 0x25
+ 5703 1957 00000000 .long .LASF378
+ 5704 195b 01 .byte 0x1
+ 5705 195c 2E02 .value 0x22e
+ 5706 195e 01 .byte 0x1
+ 5707 195f 7B000000 .long 0x7b
+ 5708 1963 00000000 .quad .LFB612
+ 5708 00000000
+ 5709 196b 00000000 .quad .LFE612
+ 5709 00000000
+ 5710 1973 00000000 .long .LLST22
+ 5711 1977 F6190000 .long 0x19f6
+ 5712 197b 26 .uleb128 0x26
+ 5713 197c 00000000 .long .LASF349
+ 5714 1980 01 .byte 0x1
+ 5715 1981 2E02 .value 0x22e
+ 5716 1983 DE030000 .long 0x3de
+ 5717 1987 03 .byte 0x3
+ 5718 1988 91 .byte 0x91
+ 5719 1989 B87F .sleb128 -72
+ 5720 198b 27 .uleb128 0x27
+
GAS LISTING /tmp/ccXzRABk.s page 130
+
+
+ 5721 198c 696E00 .string "in"
+ 5722 198f 01 .byte 0x1
+ 5723 1990 2E02 .value 0x22e
+ 5724 1992 1F040000 .long 0x41f
+ 5725 1996 03 .byte 0x3
+ 5726 1997 91 .byte 0x91
+ 5727 1998 B07F .sleb128 -80
+ 5728 199a 27 .uleb128 0x27
+ 5729 199b 6F757400 .string "out"
+ 5730 199f 01 .byte 0x1
+ 5731 19a0 2E02 .value 0x22e
+ 5732 19a2 B4000000 .long 0xb4
+ 5733 19a6 03 .byte 0x3
+ 5734 19a7 91 .byte 0x91
+ 5735 19a8 A87F .sleb128 -88
+ 5736 19aa 26 .uleb128 0x26
+ 5737 19ab 00000000 .long .LASF369
+ 5738 19af 01 .byte 0x1
+ 5739 19b0 2E02 .value 0x22e
+ 5740 19b2 62000000 .long 0x62
+ 5741 19b6 03 .byte 0x3
+ 5742 19b7 91 .byte 0x91
+ 5743 19b8 A47F .sleb128 -92
+ 5744 19ba 24 .uleb128 0x24
+ 5745 19bb 637600 .string "cv"
+ 5746 19be 01 .byte 0x1
+ 5747 19bf 3102 .value 0x231
+ 5748 19c1 3D050000 .long 0x53d
+ 5749 19c5 02 .byte 0x2
+ 5750 19c6 91 .byte 0x91
+ 5751 19c7 40 .sleb128 -64
+ 5752 19c8 28 .uleb128 0x28
+ 5753 19c9 00000000 .long .LASF357
+ 5754 19cd 01 .byte 0x1
+ 5755 19ce 3202 .value 0x232
+ 5756 19d0 3D050000 .long 0x53d
+ 5757 19d4 02 .byte 0x2
+ 5758 19d5 91 .byte 0x91
+ 5759 19d6 50 .sleb128 -48
+ 5760 19d7 24 .uleb128 0x24
+ 5761 19d8 70696E00 .string "pin"
+ 5762 19dc 01 .byte 0x1
+ 5763 19dd 3302 .value 0x233
+ 5764 19df 40150000 .long 0x1540
+ 5765 19e3 02 .byte 0x2
+ 5766 19e4 91 .byte 0x91
+ 5767 19e5 60 .sleb128 -32
+ 5768 19e6 28 .uleb128 0x28
+ 5769 19e7 00000000 .long .LASF370
+ 5770 19eb 01 .byte 0x1
+ 5771 19ec 3402 .value 0x234
+ 5772 19ee 4B150000 .long 0x154b
+ 5773 19f2 02 .byte 0x2
+ 5774 19f3 91 .byte 0x91
+ 5775 19f4 68 .sleb128 -24
+ 5776 19f5 00 .byte 0x0
+ 5777 19f6 25 .uleb128 0x25
+
GAS LISTING /tmp/ccXzRABk.s page 131
+
+
+ 5778 19f7 00000000 .long .LASF379
+ 5779 19fb 01 .byte 0x1
+ 5780 19fc 5102 .value 0x251
+ 5781 19fe 01 .byte 0x1
+ 5782 19ff 7B000000 .long 0x7b
+ 5783 1a03 00000000 .quad .LFB613
+ 5783 00000000
+ 5784 1a0b 00000000 .quad .LFE613
+ 5784 00000000
+ 5785 1a13 00000000 .long .LLST23
+ 5786 1a17 961A0000 .long 0x1a96
+ 5787 1a1b 26 .uleb128 0x26
+ 5788 1a1c 00000000 .long .LASF349
+ 5789 1a20 01 .byte 0x1
+ 5790 1a21 5102 .value 0x251
+ 5791 1a23 DE030000 .long 0x3de
+ 5792 1a27 03 .byte 0x3
+ 5793 1a28 91 .byte 0x91
+ 5794 1a29 B87F .sleb128 -72
+ 5795 1a2b 27 .uleb128 0x27
+ 5796 1a2c 696E00 .string "in"
+ 5797 1a2f 01 .byte 0x1
+ 5798 1a30 5102 .value 0x251
+ 5799 1a32 1F040000 .long 0x41f
+ 5800 1a36 03 .byte 0x3
+ 5801 1a37 91 .byte 0x91
+ 5802 1a38 B07F .sleb128 -80
+ 5803 1a3a 27 .uleb128 0x27
+ 5804 1a3b 6F757400 .string "out"
+ 5805 1a3f 01 .byte 0x1
+ 5806 1a40 5102 .value 0x251
+ 5807 1a42 B4000000 .long 0xb4
+ 5808 1a46 03 .byte 0x3
+ 5809 1a47 91 .byte 0x91
+ 5810 1a48 A87F .sleb128 -88
+ 5811 1a4a 26 .uleb128 0x26
+ 5812 1a4b 00000000 .long .LASF369
+ 5813 1a4f 01 .byte 0x1
+ 5814 1a50 5102 .value 0x251
+ 5815 1a52 62000000 .long 0x62
+ 5816 1a56 03 .byte 0x3
+ 5817 1a57 91 .byte 0x91
+ 5818 1a58 A47F .sleb128 -92
+ 5819 1a5a 24 .uleb128 0x24
+ 5820 1a5b 637600 .string "cv"
+ 5821 1a5e 01 .byte 0x1
+ 5822 1a5f 5402 .value 0x254
+ 5823 1a61 3D050000 .long 0x53d
+ 5824 1a65 02 .byte 0x2
+ 5825 1a66 91 .byte 0x91
+ 5826 1a67 40 .sleb128 -64
+ 5827 1a68 28 .uleb128 0x28
+ 5828 1a69 00000000 .long .LASF357
+ 5829 1a6d 01 .byte 0x1
+ 5830 1a6e 5502 .value 0x255
+ 5831 1a70 3D050000 .long 0x53d
+ 5832 1a74 02 .byte 0x2
+
GAS LISTING /tmp/ccXzRABk.s page 132
+
+
+ 5833 1a75 91 .byte 0x91
+ 5834 1a76 50 .sleb128 -48
+ 5835 1a77 24 .uleb128 0x24
+ 5836 1a78 70696E00 .string "pin"
+ 5837 1a7c 01 .byte 0x1
+ 5838 1a7d 5602 .value 0x256
+ 5839 1a7f 40150000 .long 0x1540
+ 5840 1a83 02 .byte 0x2
+ 5841 1a84 91 .byte 0x91
+ 5842 1a85 60 .sleb128 -32
+ 5843 1a86 28 .uleb128 0x28
+ 5844 1a87 00000000 .long .LASF370
+ 5845 1a8b 01 .byte 0x1
+ 5846 1a8c 5702 .value 0x257
+ 5847 1a8e 4B150000 .long 0x154b
+ 5848 1a92 02 .byte 0x2
+ 5849 1a93 91 .byte 0x91
+ 5850 1a94 68 .sleb128 -24
+ 5851 1a95 00 .byte 0x0
+ 5852 1a96 25 .uleb128 0x25
+ 5853 1a97 00000000 .long .LASF380
+ 5854 1a9b 01 .byte 0x1
+ 5855 1a9c 6F02 .value 0x26f
+ 5856 1a9e 01 .byte 0x1
+ 5857 1a9f 7B000000 .long 0x7b
+ 5858 1aa3 00000000 .quad .LFB614
+ 5858 00000000
+ 5859 1aab 00000000 .quad .LFE614
+ 5859 00000000
+ 5860 1ab3 00000000 .long .LLST24
+ 5861 1ab7 F71A0000 .long 0x1af7
+ 5862 1abb 26 .uleb128 0x26
+ 5863 1abc 00000000 .long .LASF349
+ 5864 1ac0 01 .byte 0x1
+ 5865 1ac1 6F02 .value 0x26f
+ 5866 1ac3 DE030000 .long 0x3de
+ 5867 1ac7 02 .byte 0x2
+ 5868 1ac8 91 .byte 0x91
+ 5869 1ac9 58 .sleb128 -40
+ 5870 1aca 27 .uleb128 0x27
+ 5871 1acb 696E00 .string "in"
+ 5872 1ace 01 .byte 0x1
+ 5873 1acf 6F02 .value 0x26f
+ 5874 1ad1 1F040000 .long 0x41f
+ 5875 1ad5 02 .byte 0x2
+ 5876 1ad6 91 .byte 0x91
+ 5877 1ad7 50 .sleb128 -48
+ 5878 1ad8 27 .uleb128 0x27
+ 5879 1ad9 6F757400 .string "out"
+ 5880 1add 01 .byte 0x1
+ 5881 1ade 6F02 .value 0x26f
+ 5882 1ae0 B4000000 .long 0xb4
+ 5883 1ae4 02 .byte 0x2
+ 5884 1ae5 91 .byte 0x91
+ 5885 1ae6 48 .sleb128 -56
+ 5886 1ae7 26 .uleb128 0x26
+ 5887 1ae8 00000000 .long .LASF369
+
GAS LISTING /tmp/ccXzRABk.s page 133
+
+
+ 5888 1aec 01 .byte 0x1
+ 5889 1aed 6F02 .value 0x26f
+ 5890 1aef 62000000 .long 0x62
+ 5891 1af3 02 .byte 0x2
+ 5892 1af4 91 .byte 0x91
+ 5893 1af5 44 .sleb128 -60
+ 5894 1af6 00 .byte 0x0
+ 5895 1af7 25 .uleb128 0x25
+ 5896 1af8 00000000 .long .LASF381
+ 5897 1afc 01 .byte 0x1
+ 5898 1afd 7D02 .value 0x27d
+ 5899 1aff 01 .byte 0x1
+ 5900 1b00 7B000000 .long 0x7b
+ 5901 1b04 00000000 .quad .LFB615
+ 5901 00000000
+ 5902 1b0c 00000000 .quad .LFE615
+ 5902 00000000
+ 5903 1b14 00000000 .long .LLST25
+ 5904 1b18 801B0000 .long 0x1b80
+ 5905 1b1c 26 .uleb128 0x26
+ 5906 1b1d 00000000 .long .LASF349
+ 5907 1b21 01 .byte 0x1
+ 5908 1b22 7D02 .value 0x27d
+ 5909 1b24 DE030000 .long 0x3de
+ 5910 1b28 02 .byte 0x2
+ 5911 1b29 91 .byte 0x91
+ 5912 1b2a 68 .sleb128 -24
+ 5913 1b2b 27 .uleb128 0x27
+ 5914 1b2c 696E00 .string "in"
+ 5915 1b2f 01 .byte 0x1
+ 5916 1b30 7D02 .value 0x27d
+ 5917 1b32 1F040000 .long 0x41f
+ 5918 1b36 02 .byte 0x2
+ 5919 1b37 91 .byte 0x91
+ 5920 1b38 60 .sleb128 -32
+ 5921 1b39 27 .uleb128 0x27
+ 5922 1b3a 6F757400 .string "out"
+ 5923 1b3e 01 .byte 0x1
+ 5924 1b3f 7D02 .value 0x27d
+ 5925 1b41 B4000000 .long 0xb4
+ 5926 1b45 02 .byte 0x2
+ 5927 1b46 91 .byte 0x91
+ 5928 1b47 58 .sleb128 -40
+ 5929 1b48 26 .uleb128 0x26
+ 5930 1b49 00000000 .long .LASF369
+ 5931 1b4d 01 .byte 0x1
+ 5932 1b4e 7D02 .value 0x27d
+ 5933 1b50 62000000 .long 0x62
+ 5934 1b54 02 .byte 0x2
+ 5935 1b55 91 .byte 0x91
+ 5936 1b56 54 .sleb128 -44
+ 5937 1b57 23 .uleb128 0x23
+ 5938 1b58 00000000 .long .LASF353
+ 5939 1b5c 901B0000 .long 0x1b90
+ 5940 1b60 01 .byte 0x1
+ 5941 1b61 09 .byte 0x9
+ 5942 1b62 03 .byte 0x3
+
GAS LISTING /tmp/ccXzRABk.s page 134
+
+
+ 5943 1b63 00000000 .quad __PRETTY_FUNCTION__.7599
+ 5943 00000000
+ 5944 1b6b 23 .uleb128 0x23
+ 5945 1b6c 00000000 .long .LASF354
+ 5946 1b70 951B0000 .long 0x1b95
+ 5947 1b74 01 .byte 0x1
+ 5948 1b75 09 .byte 0x9
+ 5949 1b76 03 .byte 0x3
+ 5950 1b77 00000000 .quad __func__.7600
+ 5950 00000000
+ 5951 1b7f 00 .byte 0x0
+ 5952 1b80 1B .uleb128 0x1b
+ 5953 1b81 C1000000 .long 0xc1
+ 5954 1b85 901B0000 .long 0x1b90
+ 5955 1b89 17 .uleb128 0x17
+ 5956 1b8a B1000000 .long 0xb1
+ 5957 1b8e 17 .byte 0x17
+ 5958 1b8f 00 .byte 0x0
+ 5959 1b90 0B .uleb128 0xb
+ 5960 1b91 801B0000 .long 0x1b80
+ 5961 1b95 0B .uleb128 0xb
+ 5962 1b96 801B0000 .long 0x1b80
+ 5963 1b9a 25 .uleb128 0x25
+ 5964 1b9b 00000000 .long .LASF382
+ 5965 1b9f 01 .byte 0x1
+ 5966 1ba0 8402 .value 0x284
+ 5967 1ba2 01 .byte 0x1
+ 5968 1ba3 7B000000 .long 0x7b
+ 5969 1ba7 00000000 .quad .LFB616
+ 5969 00000000
+ 5970 1baf 00000000 .quad .LFE616
+ 5970 00000000
+ 5971 1bb7 00000000 .long .LLST26
+ 5972 1bbb 231C0000 .long 0x1c23
+ 5973 1bbf 26 .uleb128 0x26
+ 5974 1bc0 00000000 .long .LASF349
+ 5975 1bc4 01 .byte 0x1
+ 5976 1bc5 8402 .value 0x284
+ 5977 1bc7 DE030000 .long 0x3de
+ 5978 1bcb 02 .byte 0x2
+ 5979 1bcc 91 .byte 0x91
+ 5980 1bcd 68 .sleb128 -24
+ 5981 1bce 27 .uleb128 0x27
+ 5982 1bcf 696E00 .string "in"
+ 5983 1bd2 01 .byte 0x1
+ 5984 1bd3 8402 .value 0x284
+ 5985 1bd5 1F040000 .long 0x41f
+ 5986 1bd9 02 .byte 0x2
+ 5987 1bda 91 .byte 0x91
+ 5988 1bdb 60 .sleb128 -32
+ 5989 1bdc 27 .uleb128 0x27
+ 5990 1bdd 6F757400 .string "out"
+ 5991 1be1 01 .byte 0x1
+ 5992 1be2 8402 .value 0x284
+ 5993 1be4 B4000000 .long 0xb4
+ 5994 1be8 02 .byte 0x2
+ 5995 1be9 91 .byte 0x91
+
GAS LISTING /tmp/ccXzRABk.s page 135
+
+
+ 5996 1bea 58 .sleb128 -40
+ 5997 1beb 26 .uleb128 0x26
+ 5998 1bec 00000000 .long .LASF369
+ 5999 1bf0 01 .byte 0x1
+ 6000 1bf1 8402 .value 0x284
+ 6001 1bf3 62000000 .long 0x62
+ 6002 1bf7 02 .byte 0x2
+ 6003 1bf8 91 .byte 0x91
+ 6004 1bf9 54 .sleb128 -44
+ 6005 1bfa 23 .uleb128 0x23
+ 6006 1bfb 00000000 .long .LASF353
+ 6007 1bff 231C0000 .long 0x1c23
+ 6008 1c03 01 .byte 0x1
+ 6009 1c04 09 .byte 0x9
+ 6010 1c05 03 .byte 0x3
+ 6011 1c06 00000000 .quad __PRETTY_FUNCTION__.7609
+ 6011 00000000
+ 6012 1c0e 23 .uleb128 0x23
+ 6013 1c0f 00000000 .long .LASF354
+ 6014 1c13 281C0000 .long 0x1c28
+ 6015 1c17 01 .byte 0x1
+ 6016 1c18 09 .byte 0x9
+ 6017 1c19 03 .byte 0x3
+ 6018 1c1a 00000000 .quad __func__.7610
+ 6018 00000000
+ 6019 1c22 00 .byte 0x0
+ 6020 1c23 0B .uleb128 0xb
+ 6021 1c24 801B0000 .long 0x1b80
+ 6022 1c28 0B .uleb128 0xb
+ 6023 1c29 801B0000 .long 0x1b80
+ 6024 1c2d 25 .uleb128 0x25
+ 6025 1c2e 00000000 .long .LASF383
+ 6026 1c32 01 .byte 0x1
+ 6027 1c33 A702 .value 0x2a7
+ 6028 1c35 01 .byte 0x1
+ 6029 1c36 7B000000 .long 0x7b
+ 6030 1c3a 00000000 .quad .LFB617
+ 6030 00000000
+ 6031 1c42 00000000 .quad .LFE617
+ 6031 00000000
+ 6032 1c4a 00000000 .long .LLST27
+ 6033 1c4e A81C0000 .long 0x1ca8
+ 6034 1c52 26 .uleb128 0x26
+ 6035 1c53 00000000 .long .LASF384
+ 6036 1c57 01 .byte 0x1
+ 6037 1c58 A702 .value 0x2a7
+ 6038 1c5a A81C0000 .long 0x1ca8
+ 6039 1c5e 02 .byte 0x2
+ 6040 1c5f 91 .byte 0x91
+ 6041 1c60 58 .sleb128 -40
+ 6042 1c61 26 .uleb128 0x26
+ 6043 1c62 00000000 .long .LASF46
+ 6044 1c66 01 .byte 0x1
+ 6045 1c67 A802 .value 0x2a8
+ 6046 1c69 AE1C0000 .long 0x1cae
+ 6047 1c6d 02 .byte 0x2
+ 6048 1c6e 91 .byte 0x91
+
GAS LISTING /tmp/ccXzRABk.s page 136
+
+
+ 6049 1c6f 50 .sleb128 -48
+ 6050 1c70 24 .uleb128 0x24
+ 6051 1c71 6F626A00 .string "obj"
+ 6052 1c75 01 .byte 0x1
+ 6053 1c76 AA02 .value 0x2aa
+ 6054 1c78 B91C0000 .long 0x1cb9
+ 6055 1c7c 02 .byte 0x2
+ 6056 1c7d 91 .byte 0x91
+ 6057 1c7e 68 .sleb128 -24
+ 6058 1c7f 23 .uleb128 0x23
+ 6059 1c80 00000000 .long .LASF353
+ 6060 1c84 CF1C0000 .long 0x1ccf
+ 6061 1c88 01 .byte 0x1
+ 6062 1c89 09 .byte 0x9
+ 6063 1c8a 03 .byte 0x3
+ 6064 1c8b 00000000 .quad __PRETTY_FUNCTION__.7619
+ 6064 00000000
+ 6065 1c93 23 .uleb128 0x23
+ 6066 1c94 00000000 .long .LASF354
+ 6067 1c98 D41C0000 .long 0x1cd4
+ 6068 1c9c 01 .byte 0x1
+ 6069 1c9d 09 .byte 0x9
+ 6070 1c9e 03 .byte 0x3
+ 6071 1c9f 00000000 .quad __func__.7620
+ 6071 00000000
+ 6072 1ca7 00 .byte 0x0
+ 6073 1ca8 0A .uleb128 0xa
+ 6074 1ca9 08 .byte 0x8
+ 6075 1caa DE030000 .long 0x3de
+ 6076 1cae 0A .uleb128 0xa
+ 6077 1caf 08 .byte 0x8
+ 6078 1cb0 B41C0000 .long 0x1cb4
+ 6079 1cb4 0B .uleb128 0xb
+ 6080 1cb5 98080000 .long 0x898
+ 6081 1cb9 0A .uleb128 0xa
+ 6082 1cba 08 .byte 0x8
+ 6083 1cbb CE070000 .long 0x7ce
+ 6084 1cbf 1B .uleb128 0x1b
+ 6085 1cc0 C1000000 .long 0xc1
+ 6086 1cc4 CF1C0000 .long 0x1ccf
+ 6087 1cc8 17 .uleb128 0x17
+ 6088 1cc9 B1000000 .long 0xb1
+ 6089 1ccd 15 .byte 0x15
+ 6090 1cce 00 .byte 0x0
+ 6091 1ccf 0B .uleb128 0xb
+ 6092 1cd0 BF1C0000 .long 0x1cbf
+ 6093 1cd4 0B .uleb128 0xb
+ 6094 1cd5 BF1C0000 .long 0x1cbf
+ 6095 1cd9 25 .uleb128 0x25
+ 6096 1cda 00000000 .long .LASF385
+ 6097 1cde 01 .byte 0x1
+ 6098 1cdf B402 .value 0x2b4
+ 6099 1ce1 01 .byte 0x1
+ 6100 1ce2 7B000000 .long 0x7b
+ 6101 1ce6 00000000 .quad .LFB618
+ 6101 00000000
+ 6102 1cee 00000000 .quad .LFE618
+
GAS LISTING /tmp/ccXzRABk.s page 137
+
+
+ 6102 00000000
+ 6103 1cf6 00000000 .long .LLST28
+ 6104 1cfa 3B1D0000 .long 0x1d3b
+ 6105 1cfe 26 .uleb128 0x26
+ 6106 1cff 00000000 .long .LASF349
+ 6107 1d03 01 .byte 0x1
+ 6108 1d04 B402 .value 0x2b4
+ 6109 1d06 DE030000 .long 0x3de
+ 6110 1d0a 02 .byte 0x2
+ 6111 1d0b 91 .byte 0x91
+ 6112 1d0c 58 .sleb128 -40
+ 6113 1d0d 26 .uleb128 0x26
+ 6114 1d0e 00000000 .long .LASF46
+ 6115 1d12 01 .byte 0x1
+ 6116 1d13 B502 .value 0x2b5
+ 6117 1d15 AE1C0000 .long 0x1cae
+ 6118 1d19 02 .byte 0x2
+ 6119 1d1a 91 .byte 0x91
+ 6120 1d1b 50 .sleb128 -48
+ 6121 1d1c 24 .uleb128 0x24
+ 6122 1d1d 64616400 .string "dad"
+ 6123 1d21 01 .byte 0x1
+ 6124 1d22 B702 .value 0x2b7
+ 6125 1d24 3B1D0000 .long 0x1d3b
+ 6126 1d28 02 .byte 0x2
+ 6127 1d29 91 .byte 0x91
+ 6128 1d2a 60 .sleb128 -32
+ 6129 1d2b 24 .uleb128 0x24
+ 6130 1d2c 61657300 .string "aes"
+ 6131 1d30 01 .byte 0x1
+ 6132 1d31 B802 .value 0x2b8
+ 6133 1d33 B91C0000 .long 0x1cb9
+ 6134 1d37 02 .byte 0x2
+ 6135 1d38 91 .byte 0x91
+ 6136 1d39 68 .sleb128 -24
+ 6137 1d3a 00 .byte 0x0
+ 6138 1d3b 0A .uleb128 0xa
+ 6139 1d3c 08 .byte 0x8
+ 6140 1d3d 54010000 .long 0x154
+ 6141 1d41 25 .uleb128 0x25
+ 6142 1d42 00000000 .long .LASF386
+ 6143 1d46 01 .byte 0x1
+ 6144 1d47 CA02 .value 0x2ca
+ 6145 1d49 01 .byte 0x1
+ 6146 1d4a 7B000000 .long 0x7b
+ 6147 1d4e 00000000 .quad .LFB619
+ 6147 00000000
+ 6148 1d56 00000000 .quad .LFE619
+ 6148 00000000
+ 6149 1d5e 00000000 .long .LLST29
+ 6150 1d62 BC1D0000 .long 0x1dbc
+ 6151 1d66 26 .uleb128 0x26
+ 6152 1d67 00000000 .long .LASF384
+ 6153 1d6b 01 .byte 0x1
+ 6154 1d6c CA02 .value 0x2ca
+ 6155 1d6e A81C0000 .long 0x1ca8
+ 6156 1d72 02 .byte 0x2
+
GAS LISTING /tmp/ccXzRABk.s page 138
+
+
+ 6157 1d73 91 .byte 0x91
+ 6158 1d74 58 .sleb128 -40
+ 6159 1d75 26 .uleb128 0x26
+ 6160 1d76 00000000 .long .LASF46
+ 6161 1d7a 01 .byte 0x1
+ 6162 1d7b CB02 .value 0x2cb
+ 6163 1d7d AE1C0000 .long 0x1cae
+ 6164 1d81 02 .byte 0x2
+ 6165 1d82 91 .byte 0x91
+ 6166 1d83 50 .sleb128 -48
+ 6167 1d84 24 .uleb128 0x24
+ 6168 1d85 6F626A00 .string "obj"
+ 6169 1d89 01 .byte 0x1
+ 6170 1d8a CD02 .value 0x2cd
+ 6171 1d8c BC1D0000 .long 0x1dbc
+ 6172 1d90 02 .byte 0x2
+ 6173 1d91 91 .byte 0x91
+ 6174 1d92 68 .sleb128 -24
+ 6175 1d93 23 .uleb128 0x23
+ 6176 1d94 00000000 .long .LASF353
+ 6177 1d98 D21D0000 .long 0x1dd2
+ 6178 1d9c 01 .byte 0x1
+ 6179 1d9d 09 .byte 0x9
+ 6180 1d9e 03 .byte 0x3
+ 6181 1d9f 00000000 .quad __PRETTY_FUNCTION__.7646
+ 6181 00000000
+ 6182 1da7 23 .uleb128 0x23
+ 6183 1da8 00000000 .long .LASF354
+ 6184 1dac D71D0000 .long 0x1dd7
+ 6185 1db0 01 .byte 0x1
+ 6186 1db1 09 .byte 0x9
+ 6187 1db2 03 .byte 0x3
+ 6188 1db3 00000000 .quad __func__.7647
+ 6188 00000000
+ 6189 1dbb 00 .byte 0x0
+ 6190 1dbc 0A .uleb128 0xa
+ 6191 1dbd 08 .byte 0x8
+ 6192 1dbe 30080000 .long 0x830
+ 6193 1dc2 1B .uleb128 0x1b
+ 6194 1dc3 C1000000 .long 0xc1
+ 6195 1dc7 D21D0000 .long 0x1dd2
+ 6196 1dcb 17 .uleb128 0x17
+ 6197 1dcc B1000000 .long 0xb1
+ 6198 1dd0 16 .byte 0x16
+ 6199 1dd1 00 .byte 0x0
+ 6200 1dd2 0B .uleb128 0xb
+ 6201 1dd3 C21D0000 .long 0x1dc2
+ 6202 1dd7 0B .uleb128 0xb
+ 6203 1dd8 C21D0000 .long 0x1dc2
+ 6204 1ddc 25 .uleb128 0x25
+ 6205 1ddd 00000000 .long .LASF387
+ 6206 1de1 01 .byte 0x1
+ 6207 1de2 D702 .value 0x2d7
+ 6208 1de4 01 .byte 0x1
+ 6209 1de5 7B000000 .long 0x7b
+ 6210 1de9 00000000 .quad .LFB620
+ 6210 00000000
+
GAS LISTING /tmp/ccXzRABk.s page 139
+
+
+ 6211 1df1 00000000 .quad .LFE620
+ 6211 00000000
+ 6212 1df9 00000000 .long .LLST30
+ 6213 1dfd 3E1E0000 .long 0x1e3e
+ 6214 1e01 26 .uleb128 0x26
+ 6215 1e02 00000000 .long .LASF349
+ 6216 1e06 01 .byte 0x1
+ 6217 1e07 D702 .value 0x2d7
+ 6218 1e09 DE030000 .long 0x3de
+ 6219 1e0d 02 .byte 0x2
+ 6220 1e0e 91 .byte 0x91
+ 6221 1e0f 58 .sleb128 -40
+ 6222 1e10 26 .uleb128 0x26
+ 6223 1e11 00000000 .long .LASF46
+ 6224 1e15 01 .byte 0x1
+ 6225 1e16 D802 .value 0x2d8
+ 6226 1e18 AE1C0000 .long 0x1cae
+ 6227 1e1c 02 .byte 0x2
+ 6228 1e1d 91 .byte 0x91
+ 6229 1e1e 50 .sleb128 -48
+ 6230 1e1f 24 .uleb128 0x24
+ 6231 1e20 64616400 .string "dad"
+ 6232 1e24 01 .byte 0x1
+ 6233 1e25 DA02 .value 0x2da
+ 6234 1e27 3B1D0000 .long 0x1d3b
+ 6235 1e2b 02 .byte 0x2
+ 6236 1e2c 91 .byte 0x91
+ 6237 1e2d 60 .sleb128 -32
+ 6238 1e2e 28 .uleb128 0x28
+ 6239 1e2f 00000000 .long .LASF388
+ 6240 1e33 01 .byte 0x1
+ 6241 1e34 DB02 .value 0x2db
+ 6242 1e36 BC1D0000 .long 0x1dbc
+ 6243 1e3a 02 .byte 0x2
+ 6244 1e3b 91 .byte 0x91
+ 6245 1e3c 68 .sleb128 -24
+ 6246 1e3d 00 .byte 0x0
+ 6247 1e3e 2A .uleb128 0x2a
+ 6248 1e3f 01 .byte 0x1
+ 6249 1e40 00000000 .long .LASF396
+ 6250 1e44 01 .byte 0x1
+ 6251 1e45 EC02 .value 0x2ec
+ 6252 1e47 01 .byte 0x1
+ 6253 1e48 7B000000 .long 0x7b
+ 6254 1e4c 00000000 .quad .LFB621
+ 6254 00000000
+ 6255 1e54 00000000 .quad .LFE621
+ 6255 00000000
+ 6256 1e5c 00000000 .long .LLST31
+ 6257 1e60 E91E0000 .long 0x1ee9
+ 6258 1e64 26 .uleb128 0x26
+ 6259 1e65 00000000 .long .LASF389
+ 6260 1e69 01 .byte 0x1
+ 6261 1e6a EC02 .value 0x2ec
+ 6262 1e6c E91E0000 .long 0x1ee9
+ 6263 1e70 02 .byte 0x2
+ 6264 1e71 91 .byte 0x91
+
GAS LISTING /tmp/ccXzRABk.s page 140
+
+
+ 6265 1e72 48 .sleb128 -56
+ 6266 1e73 26 .uleb128 0x26
+ 6267 1e74 00000000 .long .LASF390
+ 6268 1e78 01 .byte 0x1
+ 6269 1e79 EC02 .value 0x2ec
+ 6270 1e7b 72080000 .long 0x872
+ 6271 1e7f 02 .byte 0x2
+ 6272 1e80 91 .byte 0x91
+ 6273 1e81 44 .sleb128 -60
+ 6274 1e82 24 .uleb128 0x24
+ 6275 1e83 726300 .string "rc"
+ 6276 1e86 01 .byte 0x1
+ 6277 1e87 EE02 .value 0x2ee
+ 6278 1e89 7B000000 .long 0x7b
+ 6279 1e8d 02 .byte 0x2
+ 6280 1e8e 91 .byte 0x91
+ 6281 1e8f 6C .sleb128 -20
+ 6282 1e90 28 .uleb128 0x28
+ 6283 1e91 00000000 .long .LASF46
+ 6284 1e95 01 .byte 0x1
+ 6285 1e96 EF02 .value 0x2ef
+ 6286 1e98 EF1E0000 .long 0x1eef
+ 6287 1e9c 02 .byte 0x2
+ 6288 1e9d 91 .byte 0x91
+ 6289 1e9e 60 .sleb128 -32
+ 6290 1e9f 23 .uleb128 0x23
+ 6291 1ea0 00000000 .long .LASF353
+ 6292 1ea4 051F0000 .long 0x1f05
+ 6293 1ea8 01 .byte 0x1
+ 6294 1ea9 09 .byte 0x9
+ 6295 1eaa 03 .byte 0x3
+ 6296 1eab 00000000 .quad __PRETTY_FUNCTION__.7674
+ 6296 00000000
+ 6297 1eb3 23 .uleb128 0x23
+ 6298 1eb4 00000000 .long .LASF354
+ 6299 1eb8 0A1F0000 .long 0x1f0a
+ 6300 1ebc 01 .byte 0x1
+ 6301 1ebd 09 .byte 0x9
+ 6302 1ebe 03 .byte 0x3
+ 6303 1ebf 00000000 .quad __func__.7675
+ 6303 00000000
+ 6304 1ec7 29 .uleb128 0x29
+ 6305 1ec8 00000000 .quad .LBB5
+ 6305 00000000
+ 6306 1ed0 00000000 .quad .LBE5
+ 6306 00000000
+ 6307 1ed8 24 .uleb128 0x24
+ 6308 1ed9 6F626A00 .string "obj"
+ 6309 1edd 01 .byte 0x1
+ 6310 1ede 0603 .value 0x306
+ 6311 1ee0 DE030000 .long 0x3de
+ 6312 1ee4 02 .byte 0x2
+ 6313 1ee5 91 .byte 0x91
+ 6314 1ee6 58 .sleb128 -40
+ 6315 1ee7 00 .byte 0x0
+ 6316 1ee8 00 .byte 0x0
+ 6317 1ee9 0A .uleb128 0xa
+
GAS LISTING /tmp/ccXzRABk.s page 141
+
+
+ 6318 1eea 08 .byte 0x8
+ 6319 1eeb 3B1D0000 .long 0x1d3b
+ 6320 1eef 0A .uleb128 0xa
+ 6321 1ef0 08 .byte 0x8
+ 6322 1ef1 98080000 .long 0x898
+ 6323 1ef5 1B .uleb128 0x1b
+ 6324 1ef6 C1000000 .long 0xc1
+ 6325 1efa 051F0000 .long 0x1f05
+ 6326 1efe 17 .uleb128 0x17
+ 6327 1eff B1000000 .long 0xb1
+ 6328 1f03 11 .byte 0x11
+ 6329 1f04 00 .byte 0x0
+ 6330 1f05 0B .uleb128 0xb
+ 6331 1f06 F51E0000 .long 0x1ef5
+ 6332 1f0a 0B .uleb128 0xb
+ 6333 1f0b F51E0000 .long 0x1ef5
+ 6334 1f0f 28 .uleb128 0x28
+ 6335 1f10 00000000 .long .LASF391
+ 6336 1f14 01 .byte 0x1
+ 6337 1f15 8A02 .value 0x28a
+ 6338 1f17 87020000 .long 0x287
+ 6339 1f1b 09 .byte 0x9
+ 6340 1f1c 03 .byte 0x3
+ 6341 1f1d 00000000 .quad KCipherVecReg_vt_v1
+ 6341 00000000
+ 6342 1f25 1B .uleb128 0x1b
+ 6343 1f26 C1000000 .long 0xc1
+ 6344 1f2a 351F0000 .long 0x1f35
+ 6345 1f2e 17 .uleb128 0x17
+ 6346 1f2f B1000000 .long 0xb1
+ 6347 1f33 0B .byte 0xb
+ 6348 1f34 00 .byte 0x0
+ 6349 1f35 2B .uleb128 0x2b
+ 6350 1f36 00000000 .long .LASF397
+ 6351 1f3a 01 .byte 0x1
+ 6352 1f3b 38 .byte 0x38
+ 6353 1f3c 4B1F0000 .long 0x1f4b
+ 6354 1f40 01 .byte 0x1
+ 6355 1f41 09 .byte 0x9
+ 6356 1f42 03 .byte 0x3
+ 6357 1f43 00000000 .quad KCipherVecRegClassName
+ 6357 00000000
+ 6358 1f4b 0B .uleb128 0xb
+ 6359 1f4c 251F0000 .long 0x1f25
+ 6360 1f50 00 .byte 0x0
+ 6361 .section .debug_abbrev
+ 6362 0000 01 .uleb128 0x1
+ 6363 0001 11 .uleb128 0x11
+ 6364 0002 01 .byte 0x1
+ 6365 0003 25 .uleb128 0x25
+ 6366 0004 0E .uleb128 0xe
+ 6367 0005 13 .uleb128 0x13
+ 6368 0006 0B .uleb128 0xb
+ 6369 0007 03 .uleb128 0x3
+ 6370 0008 0E .uleb128 0xe
+ 6371 0009 1B .uleb128 0x1b
+ 6372 000a 0E .uleb128 0xe
+
GAS LISTING /tmp/ccXzRABk.s page 142
+
+
+ 6373 000b 11 .uleb128 0x11
+ 6374 000c 01 .uleb128 0x1
+ 6375 000d 12 .uleb128 0x12
+ 6376 000e 01 .uleb128 0x1
+ 6377 000f 10 .uleb128 0x10
+ 6378 0010 06 .uleb128 0x6
+ 6379 0011 00 .byte 0x0
+ 6380 0012 00 .byte 0x0
+ 6381 0013 02 .uleb128 0x2
+ 6382 0014 24 .uleb128 0x24
+ 6383 0015 00 .byte 0x0
+ 6384 0016 0B .uleb128 0xb
+ 6385 0017 0B .uleb128 0xb
+ 6386 0018 3E .uleb128 0x3e
+ 6387 0019 0B .uleb128 0xb
+ 6388 001a 03 .uleb128 0x3
+ 6389 001b 0E .uleb128 0xe
+ 6390 001c 00 .byte 0x0
+ 6391 001d 00 .byte 0x0
+ 6392 001e 03 .uleb128 0x3
+ 6393 001f 24 .uleb128 0x24
+ 6394 0020 00 .byte 0x0
+ 6395 0021 0B .uleb128 0xb
+ 6396 0022 0B .uleb128 0xb
+ 6397 0023 3E .uleb128 0x3e
+ 6398 0024 0B .uleb128 0xb
+ 6399 0025 03 .uleb128 0x3
+ 6400 0026 08 .uleb128 0x8
+ 6401 0027 00 .byte 0x0
+ 6402 0028 00 .byte 0x0
+ 6403 0029 04 .uleb128 0x4
+ 6404 002a 16 .uleb128 0x16
+ 6405 002b 00 .byte 0x0
+ 6406 002c 03 .uleb128 0x3
+ 6407 002d 0E .uleb128 0xe
+ 6408 002e 3A .uleb128 0x3a
+ 6409 002f 0B .uleb128 0xb
+ 6410 0030 3B .uleb128 0x3b
+ 6411 0031 0B .uleb128 0xb
+ 6412 0032 49 .uleb128 0x49
+ 6413 0033 13 .uleb128 0x13
+ 6414 0034 00 .byte 0x0
+ 6415 0035 00 .byte 0x0
+ 6416 0036 05 .uleb128 0x5
+ 6417 0037 13 .uleb128 0x13
+ 6418 0038 01 .byte 0x1
+ 6419 0039 03 .uleb128 0x3
+ 6420 003a 0E .uleb128 0xe
+ 6421 003b 0B .uleb128 0xb
+ 6422 003c 0B .uleb128 0xb
+ 6423 003d 3A .uleb128 0x3a
+ 6424 003e 0B .uleb128 0xb
+ 6425 003f 3B .uleb128 0x3b
+ 6426 0040 0B .uleb128 0xb
+ 6427 0041 01 .uleb128 0x1
+ 6428 0042 13 .uleb128 0x13
+ 6429 0043 00 .byte 0x0
+
GAS LISTING /tmp/ccXzRABk.s page 143
+
+
+ 6430 0044 00 .byte 0x0
+ 6431 0045 06 .uleb128 0x6
+ 6432 0046 0D .uleb128 0xd
+ 6433 0047 00 .byte 0x0
+ 6434 0048 03 .uleb128 0x3
+ 6435 0049 0E .uleb128 0xe
+ 6436 004a 3A .uleb128 0x3a
+ 6437 004b 0B .uleb128 0xb
+ 6438 004c 3B .uleb128 0x3b
+ 6439 004d 0B .uleb128 0xb
+ 6440 004e 49 .uleb128 0x49
+ 6441 004f 13 .uleb128 0x13
+ 6442 0050 38 .uleb128 0x38
+ 6443 0051 0A .uleb128 0xa
+ 6444 0052 00 .byte 0x0
+ 6445 0053 00 .byte 0x0
+ 6446 0054 07 .uleb128 0x7
+ 6447 0055 35 .uleb128 0x35
+ 6448 0056 00 .byte 0x0
+ 6449 0057 49 .uleb128 0x49
+ 6450 0058 13 .uleb128 0x13
+ 6451 0059 00 .byte 0x0
+ 6452 005a 00 .byte 0x0
+ 6453 005b 08 .uleb128 0x8
+ 6454 005c 24 .uleb128 0x24
+ 6455 005d 00 .byte 0x0
+ 6456 005e 0B .uleb128 0xb
+ 6457 005f 0B .uleb128 0xb
+ 6458 0060 3E .uleb128 0x3e
+ 6459 0061 0B .uleb128 0xb
+ 6460 0062 00 .byte 0x0
+ 6461 0063 00 .byte 0x0
+ 6462 0064 09 .uleb128 0x9
+ 6463 0065 0F .uleb128 0xf
+ 6464 0066 00 .byte 0x0
+ 6465 0067 0B .uleb128 0xb
+ 6466 0068 0B .uleb128 0xb
+ 6467 0069 00 .byte 0x0
+ 6468 006a 00 .byte 0x0
+ 6469 006b 0A .uleb128 0xa
+ 6470 006c 0F .uleb128 0xf
+ 6471 006d 00 .byte 0x0
+ 6472 006e 0B .uleb128 0xb
+ 6473 006f 0B .uleb128 0xb
+ 6474 0070 49 .uleb128 0x49
+ 6475 0071 13 .uleb128 0x13
+ 6476 0072 00 .byte 0x0
+ 6477 0073 00 .byte 0x0
+ 6478 0074 0B .uleb128 0xb
+ 6479 0075 26 .uleb128 0x26
+ 6480 0076 00 .byte 0x0
+ 6481 0077 49 .uleb128 0x49
+ 6482 0078 13 .uleb128 0x13
+ 6483 0079 00 .byte 0x0
+ 6484 007a 00 .byte 0x0
+ 6485 007b 0C .uleb128 0xc
+ 6486 007c 04 .uleb128 0x4
+
GAS LISTING /tmp/ccXzRABk.s page 144
+
+
+ 6487 007d 01 .byte 0x1
+ 6488 007e 0B .uleb128 0xb
+ 6489 007f 0B .uleb128 0xb
+ 6490 0080 3A .uleb128 0x3a
+ 6491 0081 0B .uleb128 0xb
+ 6492 0082 3B .uleb128 0x3b
+ 6493 0083 0B .uleb128 0xb
+ 6494 0084 01 .uleb128 0x1
+ 6495 0085 13 .uleb128 0x13
+ 6496 0086 00 .byte 0x0
+ 6497 0087 00 .byte 0x0
+ 6498 0088 0D .uleb128 0xd
+ 6499 0089 28 .uleb128 0x28
+ 6500 008a 00 .byte 0x0
+ 6501 008b 03 .uleb128 0x3
+ 6502 008c 0E .uleb128 0xe
+ 6503 008d 1C .uleb128 0x1c
+ 6504 008e 0D .uleb128 0xd
+ 6505 008f 00 .byte 0x0
+ 6506 0090 00 .byte 0x0
+ 6507 0091 0E .uleb128 0xe
+ 6508 0092 0D .uleb128 0xd
+ 6509 0093 00 .byte 0x0
+ 6510 0094 03 .uleb128 0x3
+ 6511 0095 08 .uleb128 0x8
+ 6512 0096 3A .uleb128 0x3a
+ 6513 0097 0B .uleb128 0xb
+ 6514 0098 3B .uleb128 0x3b
+ 6515 0099 0B .uleb128 0xb
+ 6516 009a 49 .uleb128 0x49
+ 6517 009b 13 .uleb128 0x13
+ 6518 009c 38 .uleb128 0x38
+ 6519 009d 0A .uleb128 0xa
+ 6520 009e 00 .byte 0x0
+ 6521 009f 00 .byte 0x0
+ 6522 00a0 0F .uleb128 0xf
+ 6523 00a1 15 .uleb128 0x15
+ 6524 00a2 01 .byte 0x1
+ 6525 00a3 27 .uleb128 0x27
+ 6526 00a4 0C .uleb128 0xc
+ 6527 00a5 01 .uleb128 0x1
+ 6528 00a6 13 .uleb128 0x13
+ 6529 00a7 00 .byte 0x0
+ 6530 00a8 00 .byte 0x0
+ 6531 00a9 10 .uleb128 0x10
+ 6532 00aa 05 .uleb128 0x5
+ 6533 00ab 00 .byte 0x0
+ 6534 00ac 49 .uleb128 0x49
+ 6535 00ad 13 .uleb128 0x13
+ 6536 00ae 00 .byte 0x0
+ 6537 00af 00 .byte 0x0
+ 6538 00b0 11 .uleb128 0x11
+ 6539 00b1 15 .uleb128 0x15
+ 6540 00b2 01 .byte 0x1
+ 6541 00b3 27 .uleb128 0x27
+ 6542 00b4 0C .uleb128 0xc
+ 6543 00b5 49 .uleb128 0x49
+
GAS LISTING /tmp/ccXzRABk.s page 145
+
+
+ 6544 00b6 13 .uleb128 0x13
+ 6545 00b7 01 .uleb128 0x1
+ 6546 00b8 13 .uleb128 0x13
+ 6547 00b9 00 .byte 0x0
+ 6548 00ba 00 .byte 0x0
+ 6549 00bb 12 .uleb128 0x12
+ 6550 00bc 26 .uleb128 0x26
+ 6551 00bd 00 .byte 0x0
+ 6552 00be 00 .byte 0x0
+ 6553 00bf 00 .byte 0x0
+ 6554 00c0 13 .uleb128 0x13
+ 6555 00c1 17 .uleb128 0x17
+ 6556 00c2 01 .byte 0x1
+ 6557 00c3 03 .uleb128 0x3
+ 6558 00c4 0E .uleb128 0xe
+ 6559 00c5 0B .uleb128 0xb
+ 6560 00c6 0B .uleb128 0xb
+ 6561 00c7 3A .uleb128 0x3a
+ 6562 00c8 0B .uleb128 0xb
+ 6563 00c9 3B .uleb128 0x3b
+ 6564 00ca 0B .uleb128 0xb
+ 6565 00cb 01 .uleb128 0x1
+ 6566 00cc 13 .uleb128 0x13
+ 6567 00cd 00 .byte 0x0
+ 6568 00ce 00 .byte 0x0
+ 6569 00cf 14 .uleb128 0x14
+ 6570 00d0 0D .uleb128 0xd
+ 6571 00d1 00 .byte 0x0
+ 6572 00d2 03 .uleb128 0x3
+ 6573 00d3 0E .uleb128 0xe
+ 6574 00d4 3A .uleb128 0x3a
+ 6575 00d5 0B .uleb128 0xb
+ 6576 00d6 3B .uleb128 0x3b
+ 6577 00d7 0B .uleb128 0xb
+ 6578 00d8 49 .uleb128 0x49
+ 6579 00d9 13 .uleb128 0x13
+ 6580 00da 00 .byte 0x0
+ 6581 00db 00 .byte 0x0
+ 6582 00dc 15 .uleb128 0x15
+ 6583 00dd 0D .uleb128 0xd
+ 6584 00de 00 .byte 0x0
+ 6585 00df 03 .uleb128 0x3
+ 6586 00e0 08 .uleb128 0x8
+ 6587 00e1 3A .uleb128 0x3a
+ 6588 00e2 0B .uleb128 0xb
+ 6589 00e3 3B .uleb128 0x3b
+ 6590 00e4 0B .uleb128 0xb
+ 6591 00e5 49 .uleb128 0x49
+ 6592 00e6 13 .uleb128 0x13
+ 6593 00e7 00 .byte 0x0
+ 6594 00e8 00 .byte 0x0
+ 6595 00e9 16 .uleb128 0x16
+ 6596 00ea 01 .uleb128 0x1
+ 6597 00eb 01 .byte 0x1
+ 6598 00ec 8742 .uleb128 0x2107
+ 6599 00ee 0C .uleb128 0xc
+ 6600 00ef 49 .uleb128 0x49
+
GAS LISTING /tmp/ccXzRABk.s page 146
+
+
+ 6601 00f0 13 .uleb128 0x13
+ 6602 00f1 01 .uleb128 0x1
+ 6603 00f2 13 .uleb128 0x13
+ 6604 00f3 00 .byte 0x0
+ 6605 00f4 00 .byte 0x0
+ 6606 00f5 17 .uleb128 0x17
+ 6607 00f6 21 .uleb128 0x21
+ 6608 00f7 00 .byte 0x0
+ 6609 00f8 49 .uleb128 0x49
+ 6610 00f9 13 .uleb128 0x13
+ 6611 00fa 2F .uleb128 0x2f
+ 6612 00fb 0B .uleb128 0xb
+ 6613 00fc 00 .byte 0x0
+ 6614 00fd 00 .byte 0x0
+ 6615 00fe 18 .uleb128 0x18
+ 6616 00ff 15 .uleb128 0x15
+ 6617 0100 01 .byte 0x1
+ 6618 0101 49 .uleb128 0x49
+ 6619 0102 13 .uleb128 0x13
+ 6620 0103 01 .uleb128 0x1
+ 6621 0104 13 .uleb128 0x13
+ 6622 0105 00 .byte 0x0
+ 6623 0106 00 .byte 0x0
+ 6624 0107 19 .uleb128 0x19
+ 6625 0108 18 .uleb128 0x18
+ 6626 0109 00 .byte 0x0
+ 6627 010a 00 .byte 0x0
+ 6628 010b 00 .byte 0x0
+ 6629 010c 1A .uleb128 0x1a
+ 6630 010d 13 .uleb128 0x13
+ 6631 010e 01 .byte 0x1
+ 6632 010f 03 .uleb128 0x3
+ 6633 0110 0E .uleb128 0xe
+ 6634 0111 0B .uleb128 0xb
+ 6635 0112 05 .uleb128 0x5
+ 6636 0113 3A .uleb128 0x3a
+ 6637 0114 0B .uleb128 0xb
+ 6638 0115 3B .uleb128 0x3b
+ 6639 0116 0B .uleb128 0xb
+ 6640 0117 01 .uleb128 0x1
+ 6641 0118 13 .uleb128 0x13
+ 6642 0119 00 .byte 0x0
+ 6643 011a 00 .byte 0x0
+ 6644 011b 1B .uleb128 0x1b
+ 6645 011c 01 .uleb128 0x1
+ 6646 011d 01 .byte 0x1
+ 6647 011e 49 .uleb128 0x49
+ 6648 011f 13 .uleb128 0x13
+ 6649 0120 01 .uleb128 0x1
+ 6650 0121 13 .uleb128 0x13
+ 6651 0122 00 .byte 0x0
+ 6652 0123 00 .byte 0x0
+ 6653 0124 1C .uleb128 0x1c
+ 6654 0125 04 .uleb128 0x4
+ 6655 0126 01 .byte 0x1
+ 6656 0127 03 .uleb128 0x3
+ 6657 0128 0E .uleb128 0xe
+
GAS LISTING /tmp/ccXzRABk.s page 147
+
+
+ 6658 0129 0B .uleb128 0xb
+ 6659 012a 0B .uleb128 0xb
+ 6660 012b 3A .uleb128 0x3a
+ 6661 012c 0B .uleb128 0xb
+ 6662 012d 3B .uleb128 0x3b
+ 6663 012e 0B .uleb128 0xb
+ 6664 012f 01 .uleb128 0x1
+ 6665 0130 13 .uleb128 0x13
+ 6666 0131 00 .byte 0x0
+ 6667 0132 00 .byte 0x0
+ 6668 0133 1D .uleb128 0x1d
+ 6669 0134 04 .uleb128 0x4
+ 6670 0135 01 .byte 0x1
+ 6671 0136 03 .uleb128 0x3
+ 6672 0137 0E .uleb128 0xe
+ 6673 0138 0B .uleb128 0xb
+ 6674 0139 0B .uleb128 0xb
+ 6675 013a 3A .uleb128 0x3a
+ 6676 013b 0B .uleb128 0xb
+ 6677 013c 3B .uleb128 0x3b
+ 6678 013d 05 .uleb128 0x5
+ 6679 013e 01 .uleb128 0x1
+ 6680 013f 13 .uleb128 0x13
+ 6681 0140 00 .byte 0x0
+ 6682 0141 00 .byte 0x0
+ 6683 0142 1E .uleb128 0x1e
+ 6684 0143 2E .uleb128 0x2e
+ 6685 0144 01 .byte 0x1
+ 6686 0145 03 .uleb128 0x3
+ 6687 0146 0E .uleb128 0xe
+ 6688 0147 3A .uleb128 0x3a
+ 6689 0148 0B .uleb128 0xb
+ 6690 0149 3B .uleb128 0x3b
+ 6691 014a 0B .uleb128 0xb
+ 6692 014b 27 .uleb128 0x27
+ 6693 014c 0C .uleb128 0xc
+ 6694 014d 49 .uleb128 0x49
+ 6695 014e 13 .uleb128 0x13
+ 6696 014f 11 .uleb128 0x11
+ 6697 0150 01 .uleb128 0x1
+ 6698 0151 12 .uleb128 0x12
+ 6699 0152 01 .uleb128 0x1
+ 6700 0153 40 .uleb128 0x40
+ 6701 0154 06 .uleb128 0x6
+ 6702 0155 01 .uleb128 0x1
+ 6703 0156 13 .uleb128 0x13
+ 6704 0157 00 .byte 0x0
+ 6705 0158 00 .byte 0x0
+ 6706 0159 1F .uleb128 0x1f
+ 6707 015a 05 .uleb128 0x5
+ 6708 015b 00 .byte 0x0
+ 6709 015c 03 .uleb128 0x3
+ 6710 015d 0E .uleb128 0xe
+ 6711 015e 3A .uleb128 0x3a
+ 6712 015f 0B .uleb128 0xb
+ 6713 0160 3B .uleb128 0x3b
+ 6714 0161 0B .uleb128 0xb
+
GAS LISTING /tmp/ccXzRABk.s page 148
+
+
+ 6715 0162 49 .uleb128 0x49
+ 6716 0163 13 .uleb128 0x13
+ 6717 0164 02 .uleb128 0x2
+ 6718 0165 0A .uleb128 0xa
+ 6719 0166 00 .byte 0x0
+ 6720 0167 00 .byte 0x0
+ 6721 0168 20 .uleb128 0x20
+ 6722 0169 34 .uleb128 0x34
+ 6723 016a 00 .byte 0x0
+ 6724 016b 03 .uleb128 0x3
+ 6725 016c 08 .uleb128 0x8
+ 6726 016d 3A .uleb128 0x3a
+ 6727 016e 0B .uleb128 0xb
+ 6728 016f 3B .uleb128 0x3b
+ 6729 0170 0B .uleb128 0xb
+ 6730 0171 49 .uleb128 0x49
+ 6731 0172 13 .uleb128 0x13
+ 6732 0173 02 .uleb128 0x2
+ 6733 0174 0A .uleb128 0xa
+ 6734 0175 00 .byte 0x0
+ 6735 0176 00 .byte 0x0
+ 6736 0177 21 .uleb128 0x21
+ 6737 0178 2E .uleb128 0x2e
+ 6738 0179 01 .byte 0x1
+ 6739 017a 03 .uleb128 0x3
+ 6740 017b 0E .uleb128 0xe
+ 6741 017c 3A .uleb128 0x3a
+ 6742 017d 0B .uleb128 0xb
+ 6743 017e 3B .uleb128 0x3b
+ 6744 017f 0B .uleb128 0xb
+ 6745 0180 27 .uleb128 0x27
+ 6746 0181 0C .uleb128 0xc
+ 6747 0182 11 .uleb128 0x11
+ 6748 0183 01 .uleb128 0x1
+ 6749 0184 12 .uleb128 0x12
+ 6750 0185 01 .uleb128 0x1
+ 6751 0186 40 .uleb128 0x40
+ 6752 0187 06 .uleb128 0x6
+ 6753 0188 01 .uleb128 0x1
+ 6754 0189 13 .uleb128 0x13
+ 6755 018a 00 .byte 0x0
+ 6756 018b 00 .byte 0x0
+ 6757 018c 22 .uleb128 0x22
+ 6758 018d 05 .uleb128 0x5
+ 6759 018e 00 .byte 0x0
+ 6760 018f 03 .uleb128 0x3
+ 6761 0190 08 .uleb128 0x8
+ 6762 0191 3A .uleb128 0x3a
+ 6763 0192 0B .uleb128 0xb
+ 6764 0193 3B .uleb128 0x3b
+ 6765 0194 0B .uleb128 0xb
+ 6766 0195 49 .uleb128 0x49
+ 6767 0196 13 .uleb128 0x13
+ 6768 0197 02 .uleb128 0x2
+ 6769 0198 0A .uleb128 0xa
+ 6770 0199 00 .byte 0x0
+ 6771 019a 00 .byte 0x0
+
GAS LISTING /tmp/ccXzRABk.s page 149
+
+
+ 6772 019b 23 .uleb128 0x23
+ 6773 019c 34 .uleb128 0x34
+ 6774 019d 00 .byte 0x0
+ 6775 019e 03 .uleb128 0x3
+ 6776 019f 0E .uleb128 0xe
+ 6777 01a0 49 .uleb128 0x49
+ 6778 01a1 13 .uleb128 0x13
+ 6779 01a2 34 .uleb128 0x34
+ 6780 01a3 0C .uleb128 0xc
+ 6781 01a4 02 .uleb128 0x2
+ 6782 01a5 0A .uleb128 0xa
+ 6783 01a6 00 .byte 0x0
+ 6784 01a7 00 .byte 0x0
+ 6785 01a8 24 .uleb128 0x24
+ 6786 01a9 34 .uleb128 0x34
+ 6787 01aa 00 .byte 0x0
+ 6788 01ab 03 .uleb128 0x3
+ 6789 01ac 08 .uleb128 0x8
+ 6790 01ad 3A .uleb128 0x3a
+ 6791 01ae 0B .uleb128 0xb
+ 6792 01af 3B .uleb128 0x3b
+ 6793 01b0 05 .uleb128 0x5
+ 6794 01b1 49 .uleb128 0x49
+ 6795 01b2 13 .uleb128 0x13
+ 6796 01b3 02 .uleb128 0x2
+ 6797 01b4 0A .uleb128 0xa
+ 6798 01b5 00 .byte 0x0
+ 6799 01b6 00 .byte 0x0
+ 6800 01b7 25 .uleb128 0x25
+ 6801 01b8 2E .uleb128 0x2e
+ 6802 01b9 01 .byte 0x1
+ 6803 01ba 03 .uleb128 0x3
+ 6804 01bb 0E .uleb128 0xe
+ 6805 01bc 3A .uleb128 0x3a
+ 6806 01bd 0B .uleb128 0xb
+ 6807 01be 3B .uleb128 0x3b
+ 6808 01bf 05 .uleb128 0x5
+ 6809 01c0 27 .uleb128 0x27
+ 6810 01c1 0C .uleb128 0xc
+ 6811 01c2 49 .uleb128 0x49
+ 6812 01c3 13 .uleb128 0x13
+ 6813 01c4 11 .uleb128 0x11
+ 6814 01c5 01 .uleb128 0x1
+ 6815 01c6 12 .uleb128 0x12
+ 6816 01c7 01 .uleb128 0x1
+ 6817 01c8 40 .uleb128 0x40
+ 6818 01c9 06 .uleb128 0x6
+ 6819 01ca 01 .uleb128 0x1
+ 6820 01cb 13 .uleb128 0x13
+ 6821 01cc 00 .byte 0x0
+ 6822 01cd 00 .byte 0x0
+ 6823 01ce 26 .uleb128 0x26
+ 6824 01cf 05 .uleb128 0x5
+ 6825 01d0 00 .byte 0x0
+ 6826 01d1 03 .uleb128 0x3
+ 6827 01d2 0E .uleb128 0xe
+ 6828 01d3 3A .uleb128 0x3a
+
GAS LISTING /tmp/ccXzRABk.s page 150
+
+
+ 6829 01d4 0B .uleb128 0xb
+ 6830 01d5 3B .uleb128 0x3b
+ 6831 01d6 05 .uleb128 0x5
+ 6832 01d7 49 .uleb128 0x49
+ 6833 01d8 13 .uleb128 0x13
+ 6834 01d9 02 .uleb128 0x2
+ 6835 01da 0A .uleb128 0xa
+ 6836 01db 00 .byte 0x0
+ 6837 01dc 00 .byte 0x0
+ 6838 01dd 27 .uleb128 0x27
+ 6839 01de 05 .uleb128 0x5
+ 6840 01df 00 .byte 0x0
+ 6841 01e0 03 .uleb128 0x3
+ 6842 01e1 08 .uleb128 0x8
+ 6843 01e2 3A .uleb128 0x3a
+ 6844 01e3 0B .uleb128 0xb
+ 6845 01e4 3B .uleb128 0x3b
+ 6846 01e5 05 .uleb128 0x5
+ 6847 01e6 49 .uleb128 0x49
+ 6848 01e7 13 .uleb128 0x13
+ 6849 01e8 02 .uleb128 0x2
+ 6850 01e9 0A .uleb128 0xa
+ 6851 01ea 00 .byte 0x0
+ 6852 01eb 00 .byte 0x0
+ 6853 01ec 28 .uleb128 0x28
+ 6854 01ed 34 .uleb128 0x34
+ 6855 01ee 00 .byte 0x0
+ 6856 01ef 03 .uleb128 0x3
+ 6857 01f0 0E .uleb128 0xe
+ 6858 01f1 3A .uleb128 0x3a
+ 6859 01f2 0B .uleb128 0xb
+ 6860 01f3 3B .uleb128 0x3b
+ 6861 01f4 05 .uleb128 0x5
+ 6862 01f5 49 .uleb128 0x49
+ 6863 01f6 13 .uleb128 0x13
+ 6864 01f7 02 .uleb128 0x2
+ 6865 01f8 0A .uleb128 0xa
+ 6866 01f9 00 .byte 0x0
+ 6867 01fa 00 .byte 0x0
+ 6868 01fb 29 .uleb128 0x29
+ 6869 01fc 0B .uleb128 0xb
+ 6870 01fd 01 .byte 0x1
+ 6871 01fe 11 .uleb128 0x11
+ 6872 01ff 01 .uleb128 0x1
+ 6873 0200 12 .uleb128 0x12
+ 6874 0201 01 .uleb128 0x1
+ 6875 0202 00 .byte 0x0
+ 6876 0203 00 .byte 0x0
+ 6877 0204 2A .uleb128 0x2a
+ 6878 0205 2E .uleb128 0x2e
+ 6879 0206 01 .byte 0x1
+ 6880 0207 3F .uleb128 0x3f
+ 6881 0208 0C .uleb128 0xc
+ 6882 0209 03 .uleb128 0x3
+ 6883 020a 0E .uleb128 0xe
+ 6884 020b 3A .uleb128 0x3a
+ 6885 020c 0B .uleb128 0xb
+
GAS LISTING /tmp/ccXzRABk.s page 151
+
+
+ 6886 020d 3B .uleb128 0x3b
+ 6887 020e 05 .uleb128 0x5
+ 6888 020f 27 .uleb128 0x27
+ 6889 0210 0C .uleb128 0xc
+ 6890 0211 49 .uleb128 0x49
+ 6891 0212 13 .uleb128 0x13
+ 6892 0213 11 .uleb128 0x11
+ 6893 0214 01 .uleb128 0x1
+ 6894 0215 12 .uleb128 0x12
+ 6895 0216 01 .uleb128 0x1
+ 6896 0217 40 .uleb128 0x40
+ 6897 0218 06 .uleb128 0x6
+ 6898 0219 01 .uleb128 0x1
+ 6899 021a 13 .uleb128 0x13
+ 6900 021b 00 .byte 0x0
+ 6901 021c 00 .byte 0x0
+ 6902 021d 2B .uleb128 0x2b
+ 6903 021e 34 .uleb128 0x34
+ 6904 021f 00 .byte 0x0
+ 6905 0220 03 .uleb128 0x3
+ 6906 0221 0E .uleb128 0xe
+ 6907 0222 3A .uleb128 0x3a
+ 6908 0223 0B .uleb128 0xb
+ 6909 0224 3B .uleb128 0x3b
+ 6910 0225 0B .uleb128 0xb
+ 6911 0226 49 .uleb128 0x49
+ 6912 0227 13 .uleb128 0x13
+ 6913 0228 3F .uleb128 0x3f
+ 6914 0229 0C .uleb128 0xc
+ 6915 022a 02 .uleb128 0x2
+ 6916 022b 0A .uleb128 0xa
+ 6917 022c 00 .byte 0x0
+ 6918 022d 00 .byte 0x0
+ 6919 022e 00 .byte 0x0
+ 6920 .section .debug_pubnames,"", at progbits
+ 6921 0000 3F000000 .long 0x3f
+ 6922 0004 0200 .value 0x2
+ 6923 0006 00000000 .long .Ldebug_info0
+ 6924 000a 511F0000 .long 0x1f51
+ 6925 000e 3E1E0000 .long 0x1e3e
+ 6926 0012 4B436970 .string "KCipherVecRegMake"
+ 6926 68657256
+ 6926 65635265
+ 6926 674D616B
+ 6926 6500
+ 6927 0024 351F0000 .long 0x1f35
+ 6928 0028 4B436970 .string "KCipherVecRegClassName"
+ 6928 68657256
+ 6928 65635265
+ 6928 67436C61
+ 6928 73734E61
+ 6929 003f 00000000 .long 0x0
+ 6930 .section .debug_aranges,"", at progbits
+ 6931 0000 2C000000 .long 0x2c
+ 6932 0004 0200 .value 0x2
+ 6933 0006 00000000 .long .Ldebug_info0
+ 6934 000a 08 .byte 0x8
+
GAS LISTING /tmp/ccXzRABk.s page 152
+
+
+ 6935 000b 00 .byte 0x0
+ 6936 000c 0000 .value 0x0
+ 6937 000e 0000 .value 0x0
+ 6938 0010 00000000 .quad .Ltext0
+ 6938 00000000
+ 6939 0018 64100000 .quad .Letext0-.Ltext0
+ 6939 00000000
+ 6940 0020 00000000 .quad 0x0
+ 6940 00000000
+ 6941 0028 00000000 .quad 0x0
+ 6941 00000000
+ 6942 .section .debug_str,"MS", at progbits,1
+ 6943 .LASF89:
+ 6944 0000 645F6B65 .string "d_key"
+ 6944 7900
+ 6945 .LASF331:
+ 6946 0006 72634475 .string "rcDuplicate"
+ 6946 706C6963
+ 6946 61746500
+ 6947 .LASF134:
+ 6948 0012 7263436F .string "rcCondition"
+ 6948 6E646974
+ 6948 696F6E00
+ 6949 .LASF248:
+ 6950 001e 7263456E .string "rcEncrypting"
+ 6950 63727970
+ 6950 74696E67
+ 6950 00
+ 6951 .LASF361:
+ 6952 002b 4B436970 .string "KCipherVecRegSetDecryptCounterFunc"
+ 6952 68657256
+ 6952 65635265
+ 6952 67536574
+ 6952 44656372
+ 6953 .LASF207:
+ 6954 004e 72634F70 .string "rcOpening"
+ 6954 656E696E
+ 6954 6700
+ 6955 .LASF215:
+ 6956 0058 72635065 .string "rcPersisting"
+ 6956 72736973
+ 6956 74696E67
+ 6956 00
+ 6957 .LASF253:
+ 6958 0065 72635365 .string "rcSending"
+ 6958 6E64696E
+ 6958 6700
+ 6959 .LASF45:
+ 6960 006f 4B436970 .string "KCipherVecReg"
+ 6960 68657256
+ 6960 65635265
+ 6960 6700
+ 6961 .LASF247:
+ 6962 007d 72634170 .string "rcAppending"
+ 6962 70656E64
+ 6962 696E6700
+ 6963 .LASF233:
+
GAS LISTING /tmp/ccXzRABk.s page 153
+
+
+ 6964 0089 72635369 .string "rcSignaling"
+ 6964 676E616C
+ 6964 696E6700
+ 6965 .LASF14:
+ 6966 0095 4442475F .string "DBG_BLAST"
+ 6966 424C4153
+ 6966 5400
+ 6967 .LASF289:
+ 6968 009f 72635369 .string "rcSignalSet"
+ 6968 676E616C
+ 6968 53657400
+ 6969 .LASF235:
+ 6970 00ab 72634174 .string "rcAttaching"
+ 6970 74616368
+ 6970 696E6700
+ 6971 .LASF167:
+ 6972 00b7 72635461 .string "rcTable"
+ 6972 626C6500
+ 6973 .LASF66:
+ 6974 00bf 64656372 .string "decrypt_cfb"
+ 6974 7970745F
+ 6974 63666200
+ 6975 .LASF131:
+ 6976 00cb 72634275 .string "rcBuffer"
+ 6976 66666572
+ 6976 00
+ 6977 .LASF263:
+ 6978 00d4 72634D65 .string "rcMemory"
+ 6978 6D6F7279
+ 6978 00
+ 6979 .LASF196:
+ 6980 00dd 72634C6F .string "rcLocking"
+ 6980 636B696E
+ 6980 6700
+ 6981 .LASF231:
+ 6982 00e7 72635061 .string "rcParsing"
+ 6982 7273696E
+ 6982 6700
+ 6983 .LASF260:
+ 6984 00f1 72635365 .string "rcSelf"
+ 6984 6C6600
+ 6985 .LASF153:
+ 6986 00f8 72634D65 .string "rcMetadata"
+ 6986 74616461
+ 6986 746100
+ 6987 .LASF276:
+ 6988 0103 72634172 .string "rcArcHardLink"
+ 6988 63486172
+ 6988 644C696E
+ 6988 6B00
+ 6989 .LASF348:
+ 6990 0111 4B436970 .string "KCipherVecRegDestroy"
+ 6990 68657256
+ 6990 65635265
+ 6990 67446573
+ 6990 74726F79
+ 6991 .LASF102:
+
GAS LISTING /tmp/ccXzRABk.s page 154
+
+
+ 6992 0126 7263436F .string "rcCont"
+ 6992 6E7400
+ 6993 .LASF284:
+ 6994 012d 72634368 .string "rcChecksum"
+ 6994 65636B73
+ 6994 756D00
+ 6995 .LASF354:
+ 6996 0138 5F5F6675 .string "__func__"
+ 6996 6E635F5F
+ 6996 00
+ 6997 .LASF363:
+ 6998 0141 4B436970 .string "KCipherVecRegDecryptV1"
+ 6998 68657256
+ 6998 65635265
+ 6998 67446563
+ 6998 72797074
+ 6999 .LASF328:
+ 7000 0158 7263546F .string "rcTooShort"
+ 7000 6F53686F
+ 7000 727400
+ 7001 .LASF158:
+ 7002 0163 72635061 .string "rcPagemap"
+ 7002 67656D61
+ 7002 7000
+ 7003 .LASF110:
+ 7004 016d 72634170 .string "rcApp"
+ 7004 7000
+ 7005 .LASF10:
+ 7006 0173 61746F6D .string "atomic32_t"
+ 7006 69633332
+ 7006 5F7400
+ 7007 .LASF56:
+ 7008 017e 7365745F .string "set_decrypt_ctr_func"
+ 7008 64656372
+ 7008 7970745F
+ 7008 6374725F
+ 7008 66756E63
+ 7009 .LASF65:
+ 7010 0193 656E6372 .string "encrypt_cfb"
+ 7010 7970745F
+ 7010 63666200
+ 7011 .LASF172:
+ 7012 019f 72635472 .string "rcTrie"
+ 7012 696500
+ 7013 .LASF113:
+ 7014 01a6 72634C61 .string "rcLastModule_v1_0"
+ 7014 73744D6F
+ 7014 64756C65
+ 7014 5F76315F
+ 7014 3000
+ 7015 .LASF120:
+ 7016 01b8 72634C61 .string "rcLastModule_v1_1"
+ 7016 73744D6F
+ 7016 64756C65
+ 7016 5F76315F
+ 7016 3100
+ 7017 .LASF271:
+
GAS LISTING /tmp/ccXzRABk.s page 155
+
+
+ 7018 01ca 72634279 .string "rcByteOrder"
+ 7018 74654F72
+ 7018 64657200
+ 7019 .LASF84:
+ 7020 01d6 4145534B .string "AESKeySchedule"
+ 7020 65795363
+ 7020 68656475
+ 7020 6C6500
+ 7021 .LASF332:
+ 7022 01e5 72634F75 .string "rcOutOfKDirectory"
+ 7022 744F664B
+ 7022 44697265
+ 7022 63746F72
+ 7022 7900
+ 7023 .LASF85:
+ 7024 01f7 726F756E .string "round_keys"
+ 7024 645F6B65
+ 7024 797300
+ 7025 .LASF372:
+ 7026 0202 4B436970 .string "KCipherVecRegEncryptCbc"
+ 7026 68657256
+ 7026 65635265
+ 7026 67456E63
+ 7026 72797074
+ 7027 .LASF189:
+ 7028 021a 7263436F .string "rcConstructing"
+ 7028 6E737472
+ 7028 75637469
+ 7028 6E6700
+ 7029 .LASF95:
+ 7030 0229 6B636970 .string "kcipher_AES"
+ 7030 6865725F
+ 7030 41455300
+ 7031 .LASF96:
+ 7032 0235 6B636970 .string "kcipher_count"
+ 7032 6865725F
+ 7032 636F756E
+ 7032 7400
+ 7033 .LASF390:
+ 7034 0243 74797065 .string "type"
+ 7034 00
+ 7035 .LASF9:
+ 7036 0248 72635F74 .string "rc_t"
+ 7036 00
+ 7037 .LASF265:
+ 7038 024d 7263466F .string "rcFormat"
+ 7038 726D6174
+ 7038 00
+ 7039 .LASF323:
+ 7040 0256 7263556E .string "rcUnauthorized"
+ 7040 61757468
+ 7040 6F72697A
+ 7040 656400
+ 7041 .LASF358:
+ 7042 0265 4B436970 .string "KCipherVecRegSetDecryptIvec"
+ 7042 68657256
+ 7042 65635265
+
GAS LISTING /tmp/ccXzRABk.s page 156
+
+
+ 7042 67536574
+ 7042 44656372
+ 7043 .LASF346:
+ 7044 0281 63766F75 .string "cvout"
+ 7044 7400
+ 7045 .LASF203:
+ 7046 0287 72635265 .string "rcRemoving"
+ 7046 6D6F7669
+ 7046 6E6700
+ 7047 .LASF116:
+ 7048 0292 72634B72 .string "rcKrypto"
+ 7048 7970746F
+ 7048 00
+ 7049 .LASF194:
+ 7050 029b 72635669 .string "rcVisiting"
+ 7050 73697469
+ 7050 6E6700
+ 7051 .LASF124:
+ 7052 02a6 72634172 .string "rcArc"
+ 7052 6300
+ 7053 .LASF99:
+ 7054 02ac 72634578 .string "rcExe"
+ 7054 6500
+ 7055 .LASF329:
+ 7056 02b2 7263546F .string "rcTooLong"
+ 7056 6F4C6F6E
+ 7056 6700
+ 7057 .LASF257:
+ 7058 02bc 52434F62 .string "RCObject"
+ 7058 6A656374
+ 7058 00
+ 7059 .LASF267:
+ 7060 02c5 7263496E .string "rcInterface"
+ 7060 74657266
+ 7060 61636500
+ 7061 .LASF195:
+ 7062 02d1 72635265 .string "rcResolving"
+ 7062 736F6C76
+ 7062 696E6700
+ 7063 .LASF87:
+ 7064 02dd 43697068 .string "CipherAes"
+ 7064 65724165
+ 7064 7300
+ 7065 .LASF137:
+ 7066 02e7 72634469 .string "rcDirectory"
+ 7066 72656374
+ 7066 6F727900
+ 7067 .LASF2:
+ 7068 02f3 6C6F6E67 .string "long int"
+ 7068 20696E74
+ 7068 00
+ 7069 .LASF385:
+ 7070 02fc 4B436970 .string "KCipherVecRegInitAes"
+ 7070 68657256
+ 7070 65635265
+ 7070 67496E69
+ 7070 74416573
+
GAS LISTING /tmp/ccXzRABk.s page 157
+
+
+ 7071 .LASF225:
+ 7072 0311 72635661 .string "rcValidating"
+ 7072 6C696461
+ 7072 74696E67
+ 7072 00
+ 7073 .LASF44:
+ 7074 031e 63697068 .string "cipher_ctr_func"
+ 7074 65725F63
+ 7074 74725F66
+ 7074 756E6300
+ 7075 .LASF127:
+ 7076 032e 72634172 .string "rcArgv"
+ 7076 677600
+ 7077 .LASF103:
+ 7078 0335 72634353 .string "rcCS"
+ 7078 00
+ 7079 .LASF184:
+ 7080 033a 72635572 .string "rcUri"
+ 7080 6900
+ 7081 .LASF206:
+ 7082 0340 72634372 .string "rcCreating"
+ 7082 65617469
+ 7082 6E6700
+ 7083 .LASF40:
+ 7084 034b 656E6372 .string "encrypt_ivec"
+ 7084 7970745F
+ 7084 69766563
+ 7084 00
+ 7085 .LASF57:
+ 7086 0358 656E6372 .string "encrypt"
+ 7086 79707400
+ 7087 .LASF76:
+ 7088 0360 76313238 .string "v128_u8_t"
+ 7088 5F75385F
+ 7088 7400
+ 7089 .LASF19:
+ 7090 036a 4442475F .string "DBG_XML"
+ 7090 584D4C00
+ 7091 .LASF31:
+ 7092 0372 4442475F .string "DBG_MOD_COUNT"
+ 7092 4D4F445F
+ 7092 434F554E
+ 7092 5400
+ 7093 .LASF387:
+ 7094 0380 4B436970 .string "KCipherVecRegInitNull"
+ 7094 68657256
+ 7094 65635265
+ 7094 67496E69
+ 7094 744E756C
+ 7095 .LASF352:
+ 7096 0396 75736572 .string "user_key_bits"
+ 7096 5F6B6579
+ 7096 5F626974
+ 7096 7300
+ 7097 .LASF108:
+ 7098 03a4 72634442 .string "rcDB"
+ 7098 00
+
GAS LISTING /tmp/ccXzRABk.s page 158
+
+
+ 7099 .LASF286:
+ 7100 03a9 7263436F .string "rcConnection"
+ 7100 6E6E6563
+ 7100 74696F6E
+ 7100 00
+ 7101 .LASF154:
+ 7102 03b6 72634D67 .string "rcMgr"
+ 7102 7200
+ 7103 .LASF316:
+ 7104 03bc 72635669 .string "rcViolated"
+ 7104 6F6C6174
+ 7104 656400
+ 7105 .LASF375:
+ 7106 03c7 4B436970 .string "KCipherVecRegEncryptPcbc"
+ 7106 68657256
+ 7106 65635265
+ 7106 67456E63
+ 7106 72797074
+ 7107 .LASF249:
+ 7108 03e0 72634465 .string "rcDecrypting"
+ 7108 63727970
+ 7108 74696E67
+ 7108 00
+ 7109 .LASF359:
+ 7110 03ed 4B436970 .string "KCipherVecRegSetEncryptCounterFunc"
+ 7110 68657256
+ 7110 65635265
+ 7110 67536574
+ 7110 456E6372
+ 7111 .LASF0:
+ 7112 0410 7369676E .string "signed char"
+ 7112 65642063
+ 7112 68617200
+ 7113 .LASF5:
+ 7114 041c 75696E74 .string "uint8_t"
+ 7114 385F7400
+ 7115 .LASF377:
+ 7116 0424 4B436970 .string "KCipherVecRegEncryptCfb"
+ 7116 68657256
+ 7116 65635265
+ 7116 67456E63
+ 7116 72797074
+ 7117 .LASF132:
+ 7118 043c 72634368 .string "rcChar"
+ 7118 617200
+ 7119 .LASF117:
+ 7120 0443 72635244 .string "rcRDBMS"
+ 7120 424D5300
+ 7121 .LASF161:
+ 7122 044b 72635175 .string "rcQueue"
+ 7122 65756500
+ 7123 .LASF353:
+ 7124 0453 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 7124 45545459
+ 7124 5F46554E
+ 7124 4354494F
+ 7124 4E5F5F00
+
GAS LISTING /tmp/ccXzRABk.s page 159
+
+
+ 7125 .LASF12:
+ 7126 0467 4442475F .string "DBG_MOD_NOT_FOUND"
+ 7126 4D4F445F
+ 7126 4E4F545F
+ 7126 464F554E
+ 7126 4400
+ 7127 .LASF213:
+ 7128 0479 72635265 .string "rcReverting"
+ 7128 76657274
+ 7128 696E6700
+ 7129 .LASF129:
+ 7130 0485 72634261 .string "rcBarrier"
+ 7130 72726965
+ 7130 7200
+ 7131 .LASF313:
+ 7132 048f 72634578 .string "rcExhausted"
+ 7132 68617573
+ 7132 74656400
+ 7133 .LASF3:
+ 7134 049b 756E7369 .string "unsigned char"
+ 7134 676E6564
+ 7134 20636861
+ 7134 7200
+ 7135 .LASF186:
+ 7136 04a9 5243436F .string "RCContext"
+ 7136 6E746578
+ 7136 7400
+ 7137 .LASF149:
+ 7138 04b3 72634C6F .string "rcLock"
+ 7138 636B00
+ 7139 .LASF302:
+ 7140 04ba 72634261 .string "rcBadVersion"
+ 7140 64566572
+ 7140 73696F6E
+ 7140 00
+ 7141 .LASF303:
+ 7142 04c7 72634465 .string "rcDestroyed"
+ 7142 7374726F
+ 7142 79656400
+ 7143 .LASF166:
+ 7144 04d3 72635374 .string "rcString"
+ 7144 72696E67
+ 7144 00
+ 7145 .LASF128:
+ 7146 04dc 72634174 .string "rcAttr"
+ 7146 747200
+ 7147 .LASF150:
+ 7148 04e3 72634C6F .string "rcLog"
+ 7148 6700
+ 7149 .LASF389:
+ 7150 04e9 6E65775F .string "new_obj"
+ 7150 6F626A00
+ 7151 .LASF15:
+ 7152 04f1 4442475F .string "DBG_KDB"
+ 7152 4B444200
+ 7153 .LASF254:
+ 7154 04f9 72635072 .string "rcProcessing"
+
GAS LISTING /tmp/ccXzRABk.s page 160
+
+
+ 7154 6F636573
+ 7154 73696E67
+ 7154 00
+ 7155 .LASF104:
+ 7156 0506 72634646 .string "rcFF"
+ 7156 00
+ 7157 .LASF393:
+ 7158 050b 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 7158 652F726F
+ 7158 6461726D
+ 7158 65722F73
+ 7158 72615F73
+ 7159 .LASF105:
+ 7160 0543 72634653 .string "rcFS"
+ 7160 00
+ 7161 .LASF347:
+ 7162 0548 43697068 .string "CipherVecIn"
+ 7162 65725665
+ 7162 63496E00
+ 7163 .LASF192:
+ 7164 0554 72634163 .string "rcAccessing"
+ 7164 63657373
+ 7164 696E6700
+ 7165 .LASF310:
+ 7166 0560 7263496E .string "rcInterrupted"
+ 7166 74657272
+ 7166 75707465
+ 7166 6400
+ 7167 .LASF318:
+ 7168 056e 72634E6F .string "rcNotFound"
+ 7168 74466F75
+ 7168 6E6400
+ 7169 .LASF11:
+ 7170 0579 63686172 .string "char"
+ 7170 00
+ 7171 .LASF373:
+ 7172 057e 4B436970 .string "KCipherVecRegDecryptCbc"
+ 7172 68657256
+ 7172 65635265
+ 7172 67446563
+ 7172 72797074
+ 7173 .LASF156:
+ 7174 0596 72634E6F .string "rcNode"
+ 7174 646500
+ 7175 .LASF29:
+ 7176 059d 4442475F .string "DBG_AES"
+ 7176 41455300
+ 7177 .LASF287:
+ 7178 05a5 72634572 .string "rcError"
+ 7178 726F7200
+ 7179 .LASF384:
+ 7180 05ad 706F626A .string "pobj"
+ 7180 00
+ 7181 .LASF204:
+ 7182 05b2 7263436C .string "rcClearing"
+ 7182 65617269
+ 7182 6E6700
+
GAS LISTING /tmp/ccXzRABk.s page 161
+
+
+ 7183 .LASF262:
+ 7184 05bd 72634F66 .string "rcOffset"
+ 7184 66736574
+ 7184 00
+ 7185 .LASF208:
+ 7186 05c6 7263436C .string "rcClosing"
+ 7186 6F73696E
+ 7186 6700
+ 7187 .LASF140:
+ 7188 05d0 72634669 .string "rcFile"
+ 7188 6C6500
+ 7189 .LASF169:
+ 7190 05d7 72635469 .string "rcTimeout"
+ 7190 6D656F75
+ 7190 7400
+ 7191 .LASF157:
+ 7192 05e1 72634E75 .string "rcNumeral"
+ 7192 6D657261
+ 7192 6C00
+ 7193 .LASF234:
+ 7194 05eb 72635761 .string "rcWaiting"
+ 7194 6974696E
+ 7194 6700
+ 7195 .LASF238:
+ 7196 05f5 72634650 .string "rcFPCoding"
+ 7196 436F6469
+ 7196 6E6700
+ 7197 .LASF290:
+ 7198 0600 72635369 .string "rcSize"
+ 7198 7A6500
+ 7199 .LASF275:
+ 7200 0607 72634469 .string "rcDirEntry"
+ 7200 72456E74
+ 7200 727900
+ 7201 .LASF227:
+ 7202 0612 72634875 .string "rcHuffmanCoding"
+ 7202 66666D61
+ 7202 6E436F64
+ 7202 696E6700
+ 7203 .LASF24:
+ 7204 0622 4442475F .string "DBG_KFG"
+ 7204 4B464700
+ 7205 .LASF308:
+ 7206 062a 72634275 .string "rcBusy"
+ 7206 737900
+ 7207 .LASF21:
+ 7208 0631 4442475F .string "DBG_SRA"
+ 7208 53524100
+ 7209 .LASF266:
+ 7210 0639 72635472 .string "rcTransfer"
+ 7210 616E7366
+ 7210 657200
+ 7211 .LASF18:
+ 7212 0644 4442475F .string "DBG_KFS"
+ 7212 4B465300
+ 7213 .LASF221:
+ 7214 064c 72635061 .string "rcPacking"
+
GAS LISTING /tmp/ccXzRABk.s page 162
+
+
+ 7214 636B696E
+ 7214 6700
+ 7215 .LASF217:
+ 7216 0656 7263436F .string "rcCopying"
+ 7216 7079696E
+ 7216 6700
+ 7217 .LASF255:
+ 7218 0660 72634964 .string "rcIdentifying"
+ 7218 656E7469
+ 7218 6679696E
+ 7218 6700
+ 7219 .LASF60:
+ 7220 066e 64656372 .string "decrypt_ecb"
+ 7220 7970745F
+ 7220 65636200
+ 7221 .LASF224:
+ 7222 067a 72634465 .string "rcDecoding"
+ 7222 636F6469
+ 7222 6E6700
+ 7223 .LASF379:
+ 7224 0685 4B436970 .string "KCipherVecRegEncryptOfb"
+ 7224 68657256
+ 7224 65635265
+ 7224 67456E63
+ 7224 72797074
+ 7225 .LASF152:
+ 7226 069d 72634D65 .string "rcMemMap"
+ 7226 6D4D6170
+ 7226 00
+ 7227 .LASF197:
+ 7228 06a6 7263556E .string "rcUnlocking"
+ 7228 6C6F636B
+ 7228 696E6700
+ 7229 .LASF280:
+ 7230 06b2 72634974 .string "rcItem"
+ 7230 656D00
+ 7231 .LASF82:
+ 7232 06b9 4B426C6F .string "KBlockCipherVec_vt_v1"
+ 7232 636B4369
+ 7232 70686572
+ 7232 5665635F
+ 7232 76745F76
+ 7233 .LASF17:
+ 7234 06cf 4442475F .string "DBG_LEGREF"
+ 7234 4C454752
+ 7234 454600
+ 7235 .LASF345:
+ 7236 06da 6376696E .string "cvin"
+ 7236 00
+ 7237 .LASF198:
+ 7238 06df 72635265 .string "rcRenaming"
+ 7238 6E616D69
+ 7238 6E6700
+ 7239 .LASF351:
+ 7240 06ea 75736572 .string "user_key"
+ 7240 5F6B6579
+ 7240 00
+
GAS LISTING /tmp/ccXzRABk.s page 163
+
+
+ 7241 .LASF268:
+ 7242 06f3 72634964 .string "rcId"
+ 7242 00
+ 7243 .LASF181:
+ 7244 06f8 7263436D .string "rcCmd"
+ 7244 6400
+ 7245 .LASF395:
+ 7246 06fe 43697068 .string "CipherVecOut"
+ 7246 65725665
+ 7246 634F7574
+ 7246 00
+ 7247 .LASF27:
+ 7248 070b 4442475F .string "DBG_LOADLIB"
+ 7248 4C4F4144
+ 7248 4C494200
+ 7249 .LASF320:
+ 7250 0717 7263556E .string "rcUnlocked"
+ 7250 6C6F636B
+ 7250 656400
+ 7251 .LASF121:
+ 7252 0722 52434D6F .string "RCModule"
+ 7252 64756C65
+ 7252 00
+ 7253 .LASF282:
+ 7254 072b 7263456E .string "rcEncryption"
+ 7254 63727970
+ 7254 74696F6E
+ 7254 00
+ 7255 .LASF317:
+ 7256 0738 72634578 .string "rcExists"
+ 7256 69737473
+ 7256 00
+ 7257 .LASF77:
+ 7258 0741 43697068 .string "CipherVec"
+ 7258 65725665
+ 7258 6300
+ 7259 .LASF59:
+ 7260 074b 656E6372 .string "encrypt_ecb"
+ 7260 7970745F
+ 7260 65636200
+ 7261 .LASF336:
+ 7262 0757 72634F70 .string "rcOpen"
+ 7262 656E00
+ 7263 .LASF322:
+ 7264 075e 72634465 .string "rcDeadlock"
+ 7264 61646C6F
+ 7264 636B00
+ 7265 .LASF259:
+ 7266 0769 72634C69 .string "rcLink"
+ 7266 6E6B00
+ 7267 .LASF246:
+ 7268 0770 7263466C .string "rcFlushing"
+ 7268 75736869
+ 7268 6E6700
+ 7269 .LASF294:
+ 7270 077b 72634E6F .string "rcNoErr"
+ 7270 45727200
+
GAS LISTING /tmp/ccXzRABk.s page 164
+
+
+ 7271 .LASF273:
+ 7272 0783 72635461 .string "rcTag"
+ 7272 6700
+ 7273 .LASF365:
+ 7274 0789 4B436970 .string "KCipherVecRegDecryptV1Int"
+ 7274 68657256
+ 7274 65635265
+ 7274 67446563
+ 7274 72797074
+ 7275 .LASF23:
+ 7276 07a3 4442475F .string "DBG_ALIGN"
+ 7276 414C4947
+ 7276 4E00
+ 7277 .LASF237:
+ 7278 07ad 72634C6F .string "rcLogging"
+ 7278 6767696E
+ 7278 6700
+ 7279 .LASF330:
+ 7280 07b7 7263546F .string "rcTooBig"
+ 7280 6F426967
+ 7280 00
+ 7281 .LASF174:
+ 7282 07c0 72635665 .string "rcVector"
+ 7282 63746F72
+ 7282 00
+ 7283 .LASF209:
+ 7284 07c9 72635265 .string "rcResizing"
+ 7284 73697A69
+ 7284 6E6700
+ 7285 .LASF183:
+ 7286 07d4 72635175 .string "rcQuery"
+ 7286 65727900
+ 7287 .LASF8:
+ 7288 07dc 6C6F6E67 .string "long unsigned int"
+ 7288 20756E73
+ 7288 69676E65
+ 7288 6420696E
+ 7288 7400
+ 7289 .LASF315:
+ 7290 07ee 72634578 .string "rcExcessive"
+ 7290 63657373
+ 7290 69766500
+ 7291 .LASF243:
+ 7292 07fa 72634576 .string "rcEvaluating"
+ 7292 616C7561
+ 7292 74696E67
+ 7292 00
+ 7293 .LASF180:
+ 7294 0807 7263526E .string "rcRng"
+ 7294 6700
+ 7295 .LASF188:
+ 7296 080d 72634361 .string "rcCasting"
+ 7296 7374696E
+ 7296 6700
+ 7297 .LASF349:
+ 7298 0817 73656C66 .string "self"
+ 7298 00
+
GAS LISTING /tmp/ccXzRABk.s page 165
+
+
+ 7299 .LASF148:
+ 7300 081c 72634974 .string "rcIterator"
+ 7300 65726174
+ 7300 6F7200
+ 7301 .LASF83:
+ 7302 0827 4B426C6F .string "KBlockCipherVec"
+ 7302 636B4369
+ 7302 70686572
+ 7302 56656300
+ 7303 .LASF165:
+ 7304 0837 72635374 .string "rcStorage"
+ 7304 6F726167
+ 7304 6500
+ 7305 .LASF68:
+ 7306 0841 64656372 .string "decrypt_ofb"
+ 7306 7970745F
+ 7306 6F666200
+ 7307 .LASF46:
+ 7308 084d 626C6F63 .string "block_cipher"
+ 7308 6B5F6369
+ 7308 70686572
+ 7308 00
+ 7309 .LASF369:
+ 7310 085a 626C6F63 .string "block_count"
+ 7310 6B5F636F
+ 7310 756E7400
+ 7311 .LASF356:
+ 7312 0866 4B436970 .string "KCipherVecRegSetEncryptIvec"
+ 7312 68657256
+ 7312 65635265
+ 7312 67536574
+ 7312 456E6372
+ 7313 .LASF277:
+ 7314 0882 7263526F .string "rcRow"
+ 7314 7700
+ 7315 .LASF20:
+ 7316 0888 4442475F .string "DBG_VDB"
+ 7316 56444200
+ 7317 .LASF93:
+ 7318 0890 6B636970 .string "kcipher_type"
+ 7318 6865725F
+ 7318 74797065
+ 7318 00
+ 7319 .LASF396:
+ 7320 089d 4B436970 .string "KCipherVecRegMake"
+ 7320 68657256
+ 7320 65635265
+ 7320 674D616B
+ 7320 6500
+ 7321 .LASF177:
+ 7322 08af 72634C61 .string "rcLastTarget_v1_0"
+ 7322 73745461
+ 7322 72676574
+ 7322 5F76315F
+ 7322 3000
+ 7323 .LASF185:
+ 7324 08c1 72634C61 .string "rcLastTarget_v1_1"
+
GAS LISTING /tmp/ccXzRABk.s page 166
+
+
+ 7324 73745461
+ 7324 72676574
+ 7324 5F76315F
+ 7324 3100
+ 7325 .LASF164:
+ 7326 08d3 72635365 .string "rcSemaphore"
+ 7326 6D617068
+ 7326 6F726500
+ 7327 .LASF218:
+ 7328 08df 7263436F .string "rcConcatenating"
+ 7328 6E636174
+ 7328 656E6174
+ 7328 696E6700
+ 7329 .LASF309:
+ 7330 08ef 7263496E .string "rcIncomplete"
+ 7330 636F6D70
+ 7330 6C657465
+ 7330 00
+ 7331 .LASF338:
+ 7332 08fc 72634E6F .string "rcNotOpen"
+ 7332 744F7065
+ 7332 6E00
+ 7333 .LASF147:
+ 7334 0906 7263496E .string "rcIndex"
+ 7334 64657800
+ 7335 .LASF67:
+ 7336 090e 656E6372 .string "encrypt_ofb"
+ 7336 7970745F
+ 7336 6F666200
+ 7337 .LASF55:
+ 7338 091a 7365745F .string "set_encrypt_ctr_func"
+ 7338 656E6372
+ 7338 7970745F
+ 7338 6374725F
+ 7338 66756E63
+ 7339 .LASF22:
+ 7340 092f 4442475F .string "DBG_XARC"
+ 7340 58415243
+ 7340 00
+ 7341 .LASF392:
+ 7342 0938 474E5520 .string "GNU C 4.4.2"
+ 7342 4320342E
+ 7342 342E3200
+ 7343 .LASF357:
+ 7344 0944 69766563 .string "ivec"
+ 7344 00
+ 7345 .LASF100:
+ 7346 0949 72635275 .string "rcRuntime"
+ 7346 6E74696D
+ 7346 6500
+ 7347 .LASF139:
+ 7348 0953 7263586D .string "rcXmlDoc"
+ 7348 6C446F63
+ 7348 00
+ 7349 .LASF72:
+ 7350 095c 6C6F6E67 .string "long long int"
+ 7350 206C6F6E
+
GAS LISTING /tmp/ccXzRABk.s page 167
+
+
+ 7350 6720696E
+ 7350 7400
+ 7351 .LASF220:
+ 7352 096a 7263506F .string "rcPositioning"
+ 7352 73697469
+ 7352 6F6E696E
+ 7352 6700
+ 7353 .LASF34:
+ 7354 0978 636F756E .string "counter"
+ 7354 74657200
+ 7355 .LASF70:
+ 7356 0980 64656372 .string "decrypt_ctr"
+ 7356 7970745F
+ 7356 63747200
+ 7357 .LASF94:
+ 7358 098c 6B636970 .string "kcipher_null"
+ 7358 6865725F
+ 7358 6E756C6C
+ 7358 00
+ 7359 .LASF151:
+ 7360 0999 72634D44 .string "rcMD5SumFmt"
+ 7360 3553756D
+ 7360 466D7400
+ 7361 .LASF202:
+ 7362 09a5 7263496E .string "rcInserting"
+ 7362 73657274
+ 7362 696E6700
+ 7363 .LASF250:
+ 7364 09b1 7263436F .string "rcComparing"
+ 7364 6D706172
+ 7364 696E6700
+ 7365 .LASF312:
+ 7366 09bd 7263456D .string "rcEmpty"
+ 7366 70747900
+ 7367 .LASF144:
+ 7368 09c5 7263466F .string "rcFormatter"
+ 7368 726D6174
+ 7368 74657200
+ 7369 .LASF368:
+ 7370 09d1 4B436970 .string "KCipherVecRegEncryptEcb"
+ 7370 68657256
+ 7370 65635265
+ 7370 67456E63
+ 7370 72797074
+ 7371 .LASF75:
+ 7372 09e9 646F7562 .string "double"
+ 7372 6C6500
+ 7373 .LASF229:
+ 7374 09f0 72635265 .string "rcRegistering"
+ 7374 67697374
+ 7374 6572696E
+ 7374 6700
+ 7375 .LASF35:
+ 7376 09fe 72656663 .string "refcount"
+ 7376 6F756E74
+ 7376 00
+ 7377 .LASF118:
+
GAS LISTING /tmp/ccXzRABk.s page 168
+
+
+ 7378 0a07 72634E53 .string "rcNS"
+ 7378 00
+ 7379 .LASF261:
+ 7380 0a0c 72635061 .string "rcParam"
+ 7380 72616D00
+ 7381 .LASF226:
+ 7382 0a14 72634578 .string "rcExecuting"
+ 7382 65637574
+ 7382 696E6700
+ 7383 .LASF122:
+ 7384 0a20 52435461 .string "RCTarget"
+ 7384 72676574
+ 7384 00
+ 7385 .LASF283:
+ 7386 0a29 72634372 .string "rcCrc"
+ 7386 6300
+ 7387 .LASF26:
+ 7388 0a2f 4442475F .string "DBG_SEARCH"
+ 7388 53454152
+ 7388 434800
+ 7389 .LASF111:
+ 7390 0a3a 7263584D .string "rcXML"
+ 7390 4C00
+ 7391 .LASF350:
+ 7392 0a40 4B436970 .string "KCipherVecRegSetEncryptKey"
+ 7392 68657256
+ 7392 65635265
+ 7392 67536574
+ 7392 456E6372
+ 7393 .LASF69:
+ 7394 0a5b 656E6372 .string "encrypt_ctr"
+ 7394 7970745F
+ 7394 63747200
+ 7395 .LASF28:
+ 7396 0a67 4442475F .string "DBG_VFS"
+ 7396 56465300
+ 7397 .LASF73:
+ 7398 0a6f 666C6F61 .string "float"
+ 7398 7400
+ 7399 .LASF205:
+ 7400 0a75 72635570 .string "rcUpdating"
+ 7400 64617469
+ 7400 6E6700
+ 7401 .LASF232:
+ 7402 0a80 7263436F .string "rcConverting"
+ 7402 6E766572
+ 7402 74696E67
+ 7402 00
+ 7403 .LASF64:
+ 7404 0a8d 64656372 .string "decrypt_pcbc"
+ 7404 7970745F
+ 7404 70636263
+ 7404 00
+ 7405 .LASF97:
+ 7406 0a9a 4B426C6F .string "KBlockCipher"
+ 7406 636B4369
+ 7406 70686572
+
GAS LISTING /tmp/ccXzRABk.s page 169
+
+
+ 7406 00
+ 7407 .LASF175:
+ 7408 0aa7 72634479 .string "rcDylib"
+ 7408 6C696200
+ 7409 .LASF324:
+ 7410 0aaf 72635265 .string "rcReadonly"
+ 7410 61646F6E
+ 7410 6C7900
+ 7411 .LASF7:
+ 7412 0aba 756E7369 .string "unsigned int"
+ 7412 676E6564
+ 7412 20696E74
+ 7412 00
+ 7413 .LASF325:
+ 7414 0ac7 72635772 .string "rcWriteonly"
+ 7414 6974656F
+ 7414 6E6C7900
+ 7415 .LASF47:
+ 7416 0ad3 4B436970 .string "KCipher_vt"
+ 7416 6865725F
+ 7416 767400
+ 7417 .LASF319:
+ 7418 0ade 72634C6F .string "rcLocked"
+ 7418 636B6564
+ 7418 00
+ 7419 .LASF201:
+ 7420 0ae7 72635072 .string "rcProjecting"
+ 7420 6F6A6563
+ 7420 74696E67
+ 7420 00
+ 7421 .LASF106:
+ 7422 0af4 72635053 .string "rcPS"
+ 7422 00
+ 7423 .LASF291:
+ 7424 0af9 72635265 .string "rcRefcount"
+ 7424 66636F75
+ 7424 6E7400
+ 7425 .LASF126:
+ 7426 0b04 7263546F .string "rcTocEntry"
+ 7426 63456E74
+ 7426 727900
+ 7427 .LASF281:
+ 7428 0b0f 72634D6F .string "rcMode"
+ 7428 646500
+ 7429 .LASF340:
+ 7430 0b16 7263556E .string "rcUnequal"
+ 7430 65717561
+ 7430 6C00
+ 7431 .LASF321:
+ 7432 0b20 72634465 .string "rcDetached"
+ 7432 74616368
+ 7432 656400
+ 7433 .LASF327:
+ 7434 0b2b 7263496E .string "rcInPlaceNotAllowed"
+ 7434 506C6163
+ 7434 654E6F74
+ 7434 416C6C6F
+
GAS LISTING /tmp/ccXzRABk.s page 170
+
+
+ 7434 77656400
+ 7435 .LASF269:
+ 7436 0b3f 72635261 .string "rcRange"
+ 7436 6E676500
+ 7437 .LASF394:
+ 7438 0b47 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 7438 652F726F
+ 7438 6461726D
+ 7438 65722F73
+ 7438 72615F73
+ 7439 .LASF279:
+ 7440 0b8f 72634C61 .string "rcLastObject_v1_0"
+ 7440 73744F62
+ 7440 6A656374
+ 7440 5F76315F
+ 7440 3000
+ 7441 .LASF292:
+ 7442 0ba1 72634C61 .string "rcLastObject_v1_1"
+ 7442 73744F62
+ 7442 6A656374
+ 7442 5F76315F
+ 7442 3100
+ 7443 .LASF98:
+ 7444 0bb3 62797465 .string "byte"
+ 7444 00
+ 7445 .LASF314:
+ 7446 0bb8 7263496E .string "rcInsufficient"
+ 7446 73756666
+ 7446 69636965
+ 7446 6E7400
+ 7447 .LASF245:
+ 7448 0bc7 72634C61 .string "rcLastContext_v1_0"
+ 7448 7374436F
+ 7448 6E746578
+ 7448 745F7631
+ 7448 5F3000
+ 7449 .LASF256:
+ 7450 0bda 72634C61 .string "rcLastContext_v1_1"
+ 7450 7374436F
+ 7450 6E746578
+ 7450 745F7631
+ 7450 5F3100
+ 7451 .LASF364:
+ 7452 0bed 4B436970 .string "KCipherVecRegEncryptV1Int"
+ 7452 68657256
+ 7452 65635265
+ 7452 67456E63
+ 7452 72797074
+ 7453 .LASF39:
+ 7454 0c07 64656372 .string "decrypt_key"
+ 7454 7970745F
+ 7454 6B657900
+ 7455 .LASF176:
+ 7456 0c13 72634578 .string "rcExpression"
+ 7456 70726573
+ 7456 73696F6E
+ 7456 00
+
GAS LISTING /tmp/ccXzRABk.s page 171
+
+
+ 7457 .LASF222:
+ 7458 0c20 7263556E .string "rcUnpacking"
+ 7458 7061636B
+ 7458 696E6700
+ 7459 .LASF138:
+ 7460 0c2c 7263446F .string "rcDoc"
+ 7460 6300
+ 7461 .LASF13:
+ 7462 0c32 4442475F .string "DBG_APP"
+ 7462 41505000
+ 7463 .LASF239:
+ 7464 0c3a 72634D75 .string "rcMultiplexing"
+ 7464 6C746970
+ 7464 6C657869
+ 7464 6E6700
+ 7465 .LASF241:
+ 7466 0c49 72635365 .string "rcSearching"
+ 7466 61726368
+ 7466 696E6700
+ 7467 .LASF341:
+ 7468 0c55 72634661 .string "rcFailed"
+ 7468 696C6564
+ 7468 00
+ 7469 .LASF48:
+ 7470 0c5e 4B436970 .string "KCipher_vt_v1"
+ 7470 6865725F
+ 7470 76745F76
+ 7470 3100
+ 7471 .LASF362:
+ 7472 0c6c 4B436970 .string "KCipherVecRegEncryptV1"
+ 7472 68657256
+ 7472 65635265
+ 7472 67456E63
+ 7472 72797074
+ 7473 .LASF306:
+ 7474 0c83 7263496E .string "rcIncorrect"
+ 7474 636F7272
+ 7474 65637400
+ 7475 .LASF145:
+ 7476 0c8f 72634675 .string "rcFunctParam"
+ 7476 6E637450
+ 7476 6172616D
+ 7476 00
+ 7477 .LASF38:
+ 7478 0c9c 656E6372 .string "encrypt_key"
+ 7478 7970745F
+ 7478 6B657900
+ 7479 .LASF270:
+ 7480 0ca8 7263436F .string "rcConstraint"
+ 7480 6E737472
+ 7480 61696E74
+ 7480 00
+ 7481 .LASF216:
+ 7482 0cb5 72634672 .string "rcFreezing"
+ 7482 65657A69
+ 7482 6E6700
+ 7483 .LASF296:
+
GAS LISTING /tmp/ccXzRABk.s page 172
+
+
+ 7484 0cc0 7263556E .string "rcUnknown"
+ 7484 6B6E6F77
+ 7484 6E00
+ 7485 .LASF135:
+ 7486 0cca 72634375 .string "rcCursor"
+ 7486 72736F72
+ 7486 00
+ 7487 .LASF293:
+ 7488 0cd3 52435374 .string "RCState"
+ 7488 61746500
+ 7489 .LASF81:
+ 7490 0cdb 4B426C6F .string "KBlockCipherByte"
+ 7490 636B4369
+ 7490 70686572
+ 7490 42797465
+ 7490 00
+ 7491 .LASF141:
+ 7492 0cec 72634669 .string "rcFileDesc"
+ 7492 6C654465
+ 7492 736300
+ 7493 .LASF79:
+ 7494 0cf7 4B426C6F .string "KBlockCipherByte_vt_v1"
+ 7494 636B4369
+ 7494 70686572
+ 7494 42797465
+ 7494 5F76745F
+ 7495 .LASF333:
+ 7496 0d0e 72634967 .string "rcIgnored"
+ 7496 6E6F7265
+ 7496 6400
+ 7497 .LASF90:
+ 7498 0d18 655F6976 .string "e_ivec"
+ 7498 656300
+ 7499 .LASF191:
+ 7500 0d1f 72635265 .string "rcReleasing"
+ 7500 6C656173
+ 7500 696E6700
+ 7501 .LASF381:
+ 7502 0d2b 4B436970 .string "KCipherVecRegEncryptCtr"
+ 7502 68657256
+ 7502 65635265
+ 7502 67456E63
+ 7502 72797074
+ 7503 .LASF114:
+ 7504 0d43 72634B46 .string "rcKFG"
+ 7504 4700
+ 7505 .LASF272:
+ 7506 0d49 72634D65 .string "rcMessage"
+ 7506 73736167
+ 7506 6500
+ 7507 .LASF219:
+ 7508 0d53 7263466F .string "rcFormatting"
+ 7508 726D6174
+ 7508 74696E67
+ 7508 00
+ 7509 .LASF112:
+ 7510 0d60 72635352 .string "rcSRA"
+
GAS LISTING /tmp/ccXzRABk.s page 173
+
+
+ 7510 4100
+ 7511 .LASF288:
+ 7512 0d66 7263456E .string "rcEnvironment"
+ 7512 7669726F
+ 7512 6E6D656E
+ 7512 7400
+ 7513 .LASF74:
+ 7514 0d74 6C6F6E67 .string "long long unsigned int"
+ 7514 206C6F6E
+ 7514 6720756E
+ 7514 7369676E
+ 7514 65642069
+ 7515 .LASF50:
+ 7516 0d8b 64657374 .string "destroy"
+ 7516 726F7900
+ 7517 .LASF170:
+ 7518 0d93 7263546F .string "rcToken"
+ 7518 6B656E00
+ 7519 .LASF230:
+ 7520 0d9b 7263546F .string "rcTokenizing"
+ 7520 6B656E69
+ 7520 7A696E67
+ 7520 00
+ 7521 .LASF16:
+ 7522 0da8 4442475F .string "DBG_REF"
+ 7522 52454600
+ 7523 .LASF211:
+ 7524 0db0 72635772 .string "rcWriting"
+ 7524 6974696E
+ 7524 6700
+ 7525 .LASF187:
+ 7526 0dba 7263416C .string "rcAllocating"
+ 7526 6C6F6361
+ 7526 74696E67
+ 7526 00
+ 7527 .LASF371:
+ 7528 0dc7 4B436970 .string "KCipherVecRegDecryptEcb"
+ 7528 68657256
+ 7528 65635265
+ 7528 67446563
+ 7528 72797074
+ 7529 .LASF173:
+ 7530 0ddf 72635479 .string "rcType"
+ 7530 706500
+ 7531 .LASF274:
+ 7532 0de6 72635265 .string "rcResources"
+ 7532 736F7572
+ 7532 63657300
+ 7533 .LASF155:
+ 7534 0df2 72634E61 .string "rcNamelist"
+ 7534 6D656C69
+ 7534 737400
+ 7535 .LASF391:
+ 7536 0dfd 4B436970 .string "KCipherVecReg_vt_v1"
+ 7536 68657256
+ 7536 65635265
+ 7536 675F7674
+
GAS LISTING /tmp/ccXzRABk.s page 174
+
+
+ 7536 5F763100
+ 7537 .LASF355:
+ 7538 0e11 4B436970 .string "KCipherVecRegSetDecryptKey"
+ 7538 68657256
+ 7538 65635265
+ 7538 67536574
+ 7538 44656372
+ 7539 .LASF383:
+ 7540 0e2c 4B436970 .string "KCipherVecRegAllocAes"
+ 7540 68657256
+ 7540 65635265
+ 7540 67416C6C
+ 7540 6F634165
+ 7541 .LASF339:
+ 7542 0e42 7263556E .string "rcUndefined"
+ 7542 64656669
+ 7542 6E656400
+ 7543 .LASF91:
+ 7544 0e4e 645F6976 .string "d_ivec"
+ 7544 656300
+ 7545 .LASF307:
+ 7546 0e55 7263496E .string "rcInconsistent"
+ 7546 636F6E73
+ 7546 69737465
+ 7546 6E7400
+ 7547 .LASF252:
+ 7548 0e64 72635265 .string "rcRetrieving"
+ 7548 74726965
+ 7548 76696E67
+ 7548 00
+ 7549 .LASF58:
+ 7550 0e71 64656372 .string "decrypt"
+ 7550 79707400
+ 7551 .LASF49:
+ 7552 0e79 76657273 .string "version"
+ 7552 696F6E00
+ 7553 .LASF264:
+ 7554 0e81 72634E61 .string "rcName"
+ 7554 6D6500
+ 7555 .LASF54:
+ 7556 0e88 7365745F .string "set_decrypt_ivec"
+ 7556 64656372
+ 7556 7970745F
+ 7556 69766563
+ 7556 00
+ 7557 .LASF301:
+ 7558 0e99 72634E75 .string "rcNull"
+ 7558 6C6C00
+ 7559 .LASF223:
+ 7560 0ea0 7263456E .string "rcEncoding"
+ 7560 636F6469
+ 7560 6E6700
+ 7561 .LASF378:
+ 7562 0eab 4B436970 .string "KCipherVecRegDecryptCfb"
+ 7562 68657256
+ 7562 65635265
+ 7562 67446563
+
GAS LISTING /tmp/ccXzRABk.s page 175
+
+
+ 7562 72797074
+ 7563 .LASF142:
+ 7564 0ec3 72634669 .string "rcFileFormat"
+ 7564 6C65466F
+ 7564 726D6174
+ 7564 00
+ 7565 .LASF179:
+ 7566 0ed0 7263456E .string "rcEncryptionKey"
+ 7566 63727970
+ 7566 74696F6E
+ 7566 4B657900
+ 7567 .LASF244:
+ 7568 0ee0 7263496E .string "rcInflating"
+ 7568 666C6174
+ 7568 696E6700
+ 7569 .LASF326:
+ 7570 0eec 72634E6F .string "rcNoPerm"
+ 7570 5065726D
+ 7570 00
+ 7571 .LASF214:
+ 7572 0ef5 72635265 .string "rcResetting"
+ 7572 73657474
+ 7572 696E6700
+ 7573 .LASF36:
+ 7574 0f01 626C6F63 .string "block_size"
+ 7574 6B5F7369
+ 7574 7A6500
+ 7575 .LASF162:
+ 7576 0f0c 72635257 .string "rcRWLock"
+ 7576 4C6F636B
+ 7576 00
+ 7577 .LASF193:
+ 7578 0f15 72634C69 .string "rcListing"
+ 7578 7374696E
+ 7578 6700
+ 7579 .LASF63:
+ 7580 0f1f 656E6372 .string "encrypt_pcbc"
+ 7580 7970745F
+ 7580 70636263
+ 7580 00
+ 7581 .LASF32:
+ 7582 0f2c 4B526566 .string "KRefcount"
+ 7582 636F756E
+ 7582 7400
+ 7583 .LASF143:
+ 7584 0f36 72634675 .string "rcFunction"
+ 7584 6E637469
+ 7584 6F6E00
+ 7585 .LASF299:
+ 7586 0f41 7263556E .string "rcUnrecognized"
+ 7586 7265636F
+ 7586 676E697A
+ 7586 656400
+ 7587 .LASF86:
+ 7588 0f50 6E756D62 .string "number_of_rounds"
+ 7588 65725F6F
+ 7588 665F726F
+
GAS LISTING /tmp/ccXzRABk.s page 176
+
+
+ 7588 756E6473
+ 7588 00
+ 7589 .LASF115:
+ 7590 0f61 7263416C .string "rcAlign"
+ 7590 69676E00
+ 7591 .LASF178:
+ 7592 0f69 72635072 .string "rcProduction"
+ 7592 6F647563
+ 7592 74696F6E
+ 7592 00
+ 7593 .LASF168:
+ 7594 0f76 72635468 .string "rcThread"
+ 7594 72656164
+ 7594 00
+ 7595 .LASF37:
+ 7596 0f7f 6E616D65 .string "name"
+ 7596 00
+ 7597 .LASF388:
+ 7598 0f84 6E756C6C .string "null"
+ 7598 00
+ 7599 .LASF52:
+ 7600 0f89 7365745F .string "set_decrypt_key"
+ 7600 64656372
+ 7600 7970745F
+ 7600 6B657900
+ 7601 .LASF370:
+ 7602 0f99 706F7574 .string "pout"
+ 7602 00
+ 7603 .LASF33:
+ 7604 0f9e 4B436970 .string "KCipher"
+ 7604 68657200
+ 7605 .LASF78:
+ 7606 0fa6 4B426C6F .string "KBlockCipher_vt"
+ 7606 636B4369
+ 7606 70686572
+ 7606 5F767400
+ 7607 .LASF285:
+ 7608 0fb6 72635365 .string "rcSeed"
+ 7608 656400
+ 7609 .LASF242:
+ 7610 0fbd 72634C6F .string "rcLoading"
+ 7610 6164696E
+ 7610 6700
+ 7611 .LASF1:
+ 7612 0fc7 73686F72 .string "short int"
+ 7612 7420696E
+ 7612 7400
+ 7613 .LASF366:
+ 7614 0fd1 4B436970 .string "KCipherVecRegEncrypt"
+ 7614 68657256
+ 7614 65635265
+ 7614 67456E63
+ 7614 72797074
+ 7615 .LASF380:
+ 7616 0fe6 4B436970 .string "KCipherVecRegDecryptOfb"
+ 7616 68657256
+ 7616 65635265
+
GAS LISTING /tmp/ccXzRABk.s page 177
+
+
+ 7616 67446563
+ 7616 72797074
+ 7617 .LASF360:
+ 7618 0ffe 66756E63 .string "func"
+ 7618 00
+ 7619 .LASF335:
+ 7620 1003 72634C61 .string "rcLastState_v1_0"
+ 7620 73745374
+ 7620 6174655F
+ 7620 76315F30
+ 7620 00
+ 7621 .LASF344:
+ 7622 1014 72634C61 .string "rcLastState_v1_1"
+ 7622 73745374
+ 7622 6174655F
+ 7622 76315F31
+ 7622 00
+ 7623 .LASF109:
+ 7624 1025 72635644 .string "rcVDB"
+ 7624 4200
+ 7625 .LASF92:
+ 7626 102b 43697068 .string "CipherNull"
+ 7626 65724E75
+ 7626 6C6C00
+ 7627 .LASF397:
+ 7628 1036 4B436970 .string "KCipherVecRegClassName"
+ 7628 68657256
+ 7628 65635265
+ 7628 67436C61
+ 7628 73734E61
+ 7629 .LASF376:
+ 7630 104d 4B436970 .string "KCipherVecRegDecryptPcbc"
+ 7630 68657256
+ 7630 65635265
+ 7630 67446563
+ 7630 72797074
+ 7631 .LASF51:
+ 7632 1066 7365745F .string "set_encrypt_key"
+ 7632 656E6372
+ 7632 7970745F
+ 7632 6B657900
+ 7633 .LASF107:
+ 7634 1076 72635846 .string "rcXF"
+ 7634 00
+ 7635 .LASF71:
+ 7636 107b 4B436970 .string "KCipher_ptr"
+ 7636 6865725F
+ 7636 70747200
+ 7637 .LASF88:
+ 7638 1087 655F6B65 .string "e_key"
+ 7638 7900
+ 7639 .LASF190:
+ 7640 108d 72634465 .string "rcDestroying"
+ 7640 7374726F
+ 7640 79696E67
+ 7640 00
+ 7641 .LASF295:
+
GAS LISTING /tmp/ccXzRABk.s page 178
+
+
+ 7642 109a 7263446F .string "rcDone"
+ 7642 6E6500
+ 7643 .LASF125:
+ 7644 10a1 7263546F .string "rcToc"
+ 7644 6300
+ 7645 .LASF43:
+ 7646 10a7 64656372 .string "decrypt_counter_func"
+ 7646 7970745F
+ 7646 636F756E
+ 7646 7465725F
+ 7646 66756E63
+ 7647 .LASF382:
+ 7648 10bc 4B436970 .string "KCipherVecRegDecryptCtr"
+ 7648 68657256
+ 7648 65635265
+ 7648 67446563
+ 7648 72797074
+ 7649 .LASF199:
+ 7650 10d4 7263416C .string "rcAliasing"
+ 7650 69617369
+ 7650 6E6700
+ 7651 .LASF367:
+ 7652 10df 4B436970 .string "KCipherVecRegDecrypt"
+ 7652 68657256
+ 7652 65635265
+ 7652 67446563
+ 7652 72797074
+ 7653 .LASF160:
+ 7654 10f4 72635072 .string "rcProcess"
+ 7654 6F636573
+ 7654 7300
+ 7655 .LASF258:
+ 7656 10fe 72634E6F .string "rcNoObj"
+ 7656 4F626A00
+ 7657 .LASF297:
+ 7658 1106 7263556E .string "rcUnsupported"
+ 7658 73757070
+ 7658 6F727465
+ 7658 6400
+ 7659 .LASF236:
+ 7660 1114 72634465 .string "rcDetaching"
+ 7660 74616368
+ 7660 696E6700
+ 7661 .LASF133:
+ 7662 1120 7263436F .string "rcColumn"
+ 7662 6C756D6E
+ 7662 00
+ 7663 .LASF42:
+ 7664 1129 656E6372 .string "encrypt_counter_func"
+ 7664 7970745F
+ 7664 636F756E
+ 7664 7465725F
+ 7664 66756E63
+ 7665 .LASF298:
+ 7666 113e 7263556E .string "rcUnexpected"
+ 7666 65787065
+ 7666 63746564
+
GAS LISTING /tmp/ccXzRABk.s page 179
+
+
+ 7666 00
+ 7667 .LASF62:
+ 7668 114b 64656372 .string "decrypt_cbc"
+ 7668 7970745F
+ 7668 63626300
+ 7669 .LASF6:
+ 7670 1157 75696E74 .string "uint32_t"
+ 7670 33325F74
+ 7670 00
+ 7671 .LASF119:
+ 7672 1160 72635646 .string "rcVFS"
+ 7672 5300
+ 7673 .LASF25:
+ 7674 1166 4442475F .string "DBG_KRYPTO"
+ 7674 4B525950
+ 7674 544F00
+ 7675 .LASF343:
+ 7676 1171 72635772 .string "rcWrongType"
+ 7676 6F6E6754
+ 7676 79706500
+ 7677 .LASF278:
+ 7678 117d 72634C69 .string "rcLibrary"
+ 7678 62726172
+ 7678 7900
+ 7679 .LASF311:
+ 7680 1187 72634361 .string "rcCanceled"
+ 7680 6E63656C
+ 7680 656400
+ 7681 .LASF182:
+ 7682 1192 72634461 .string "rcData"
+ 7682 746100
+ 7683 .LASF146:
+ 7684 1199 72634865 .string "rcHeader"
+ 7684 61646572
+ 7684 00
+ 7685 .LASF4:
+ 7686 11a2 73686F72 .string "short unsigned int"
+ 7686 7420756E
+ 7686 7369676E
+ 7686 65642069
+ 7686 6E7400
+ 7687 .LASF136:
+ 7688 11b5 72634461 .string "rcDatabase"
+ 7688 74616261
+ 7688 736500
+ 7689 .LASF61:
+ 7690 11c0 656E6372 .string "encrypt_cbc"
+ 7690 7970745F
+ 7690 63626300
+ 7691 .LASF212:
+ 7692 11cc 7263436F .string "rcCommitting"
+ 7692 6D6D6974
+ 7692 74696E67
+ 7692 00
+ 7693 .LASF240:
+ 7694 11d9 7263436C .string "rcClassifying"
+ 7694 61737369
+
GAS LISTING /tmp/ccXzRABk.s page 180
+
+
+ 7694 6679696E
+ 7694 6700
+ 7695 .LASF171:
+ 7696 11e7 72635472 .string "rcTree"
+ 7696 656500
+ 7697 .LASF41:
+ 7698 11ee 64656372 .string "decrypt_ivec"
+ 7698 7970745F
+ 7698 69766563
+ 7698 00
+ 7699 .LASF30:
+ 7700 11fb 4442475F .string "DBG_ARGS"
+ 7700 41524753
+ 7700 00
+ 7701 .LASF200:
+ 7702 1204 72635365 .string "rcSelecting"
+ 7702 6C656374
+ 7702 696E6700
+ 7703 .LASF101:
+ 7704 1210 72635465 .string "rcText"
+ 7704 787400
+ 7705 .LASF337:
+ 7706 1217 72634F75 .string "rcOutoforder"
+ 7706 746F666F
+ 7706 72646572
+ 7706 00
+ 7707 .LASF386:
+ 7708 1224 4B436970 .string "KCipherVecRegAllocNull"
+ 7708 68657256
+ 7708 65635265
+ 7708 67416C6C
+ 7708 6F634E75
+ 7709 .LASF304:
+ 7710 123b 7263496E .string "rcInvalid"
+ 7710 76616C69
+ 7710 6400
+ 7711 .LASF251:
+ 7712 1245 7263496E .string "rcInitializing"
+ 7712 69746961
+ 7712 6C697A69
+ 7712 6E6700
+ 7713 .LASF130:
+ 7714 1254 7263426C .string "rcBlob"
+ 7714 6F6200
+ 7715 .LASF53:
+ 7716 125b 7365745F .string "set_encrypt_ivec"
+ 7716 656E6372
+ 7716 7970745F
+ 7716 69766563
+ 7716 00
+ 7717 .LASF374:
+ 7718 126c 74656D70 .string "temp"
+ 7718 00
+ 7719 .LASF228:
+ 7720 1271 72635265 .string "rcReindexing"
+ 7720 696E6465
+ 7720 78696E67
+
GAS LISTING /tmp/ccXzRABk.s page 181
+
+
+ 7720 00
+ 7721 .LASF123:
+ 7722 127e 72634E6F .string "rcNoTarg"
+ 7722 54617267
+ 7722 00
+ 7723 .LASF305:
+ 7724 1287 7263436F .string "rcCorrupt"
+ 7724 72727570
+ 7724 7400
+ 7725 .LASF334:
+ 7726 1291 72634F75 .string "rcOutofrange"
+ 7726 746F6672
+ 7726 616E6765
+ 7726 00
+ 7727 .LASF163:
+ 7728 129e 72635363 .string "rcSchema"
+ 7728 68656D61
+ 7728 00
+ 7729 .LASF159:
+ 7730 12a7 72635061 .string "rcPath"
+ 7730 746800
+ 7731 .LASF210:
+ 7732 12ae 72635265 .string "rcReading"
+ 7732 6164696E
+ 7732 6700
+ 7733 .LASF80:
+ 7734 12b8 6B65795F .string "key_size"
+ 7734 73697A65
+ 7734 00
+ 7735 .LASF342:
+ 7736 12c1 72634E6F .string "rcNotAvailable"
+ 7736 74417661
+ 7736 696C6162
+ 7736 6C6500
+ 7737 .LASF300:
+ 7738 12d0 7263416D .string "rcAmbiguous"
+ 7738 62696775
+ 7738 6F757300
+ 7739 .ident "GCC: (GNU) 4.4.2"
+ 7740 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccXzRABk.s page 182
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 cipher-vec.c
+ /tmp/ccXzRABk.s:14 .rodata:0000000000000000 KCipherVecRegClassName
+ /tmp/ccXzRABk.s:18 .text:0000000000000000 CipherVecIn
+ /tmp/ccXzRABk.s:49 .text:000000000000001f CipherVecOut
+ /tmp/ccXzRABk.s:81 .text:0000000000000048 KCipherVecRegDestroy
+ /tmp/ccXzRABk.s:129 .text:0000000000000082 KCipherVecRegSetEncryptKey
+ /tmp/ccXzRABk.s:2006 .rodata:0000000000000330 __PRETTY_FUNCTION__.7218
+ /tmp/ccXzRABk.s:2011 .rodata:0000000000000350 __func__.7220
+ /tmp/ccXzRABk.s:214 .text:000000000000016c KCipherVecRegSetDecryptKey
+ /tmp/ccXzRABk.s:1996 .rodata:00000000000002f0 __PRETTY_FUNCTION__.7242
+ /tmp/ccXzRABk.s:2001 .rodata:0000000000000310 __func__.7244
+ /tmp/ccXzRABk.s:303 .text:0000000000000256 KCipherVecRegSetEncryptIvec
+ /tmp/ccXzRABk.s:1991 .rodata:00000000000002d0 __PRETTY_FUNCTION__.7264
+ /tmp/ccXzRABk.s:354 .text:00000000000002d9 KCipherVecRegSetDecryptIvec
+ /tmp/ccXzRABk.s:1986 .rodata:00000000000002b0 __PRETTY_FUNCTION__.7277
+ /tmp/ccXzRABk.s:409 .text:000000000000035c KCipherVecRegSetEncryptCounterFunc
+ /tmp/ccXzRABk.s:1981 .rodata:0000000000000280 __PRETTY_FUNCTION__.7290
+ /tmp/ccXzRABk.s:454 .text:00000000000003cb KCipherVecRegSetDecryptCounterFunc
+ /tmp/ccXzRABk.s:1976 .rodata:0000000000000240 __PRETTY_FUNCTION__.7300
+ /tmp/ccXzRABk.s:499 .text:000000000000043a KCipherVecRegEncryptV1
+ /tmp/ccXzRABk.s:527 .text:0000000000000461 KCipherVecRegDecryptV1
+ /tmp/ccXzRABk.s:555 .text:0000000000000488 KCipherVecRegEncryptV1Int
+ /tmp/ccXzRABk.s:595 .text:00000000000004db KCipherVecRegDecryptV1Int
+ /tmp/ccXzRABk.s:635 .text:000000000000052e KCipherVecRegEncrypt
+ /tmp/ccXzRABk.s:1966 .rodata:00000000000001f0 __func__.7350
+ /tmp/ccXzRABk.s:684 .text:0000000000000592 KCipherVecRegDecrypt
+ /tmp/ccXzRABk.s:1956 .rodata:00000000000001b0 __func__.7366
+ /tmp/ccXzRABk.s:735 .text:00000000000005fd KCipherVecRegEncryptEcb
+ /tmp/ccXzRABk.s:791 .text:000000000000066d KCipherVecRegDecryptEcb
+ /tmp/ccXzRABk.s:847 .text:00000000000006dd KCipherVecRegEncryptCbc
+ /tmp/ccXzRABk.s:929 .text:00000000000007ab KCipherVecRegDecryptCbc
+ /tmp/ccXzRABk.s:1015 .text:000000000000087f KCipherVecRegEncryptPcbc
+ /tmp/ccXzRABk.s:1102 .text:000000000000095c KCipherVecRegDecryptPcbc
+ /tmp/ccXzRABk.s:1184 .text:0000000000000a22 KCipherVecRegEncryptCfb
+ /tmp/ccXzRABk.s:1264 .text:0000000000000ae8 KCipherVecRegDecryptCfb
+ /tmp/ccXzRABk.s:1344 .text:0000000000000bae KCipherVecRegEncryptOfb
+ /tmp/ccXzRABk.s:1424 .text:0000000000000c74 KCipherVecRegDecryptOfb
+ /tmp/ccXzRABk.s:1459 .text:0000000000000cad KCipherVecRegEncryptCtr
+ /tmp/ccXzRABk.s:1946 .rodata:0000000000000170 __func__.7600
+ /tmp/ccXzRABk.s:1488 .text:0000000000000ce3 KCipherVecRegDecryptCtr
+ /tmp/ccXzRABk.s:1936 .rodata:0000000000000130 __func__.7610
+ /tmp/ccXzRABk.s:1520 .data.rel.local:0000000000000000 KCipherVecReg_vt_v1
+ /tmp/ccXzRABk.s:1546 .text:0000000000000d19 KCipherVecRegAllocAes
+ /tmp/ccXzRABk.s:1926 .rodata:00000000000000f0 __func__.7620
+ /tmp/ccXzRABk.s:1588 .text:0000000000000d74 KCipherVecRegInitAes
+ /tmp/ccXzRABk.s:1649 .text:0000000000000e12 KCipherVecRegAllocNull
+ /tmp/ccXzRABk.s:1916 .rodata:00000000000000b0 __func__.7647
+ /tmp/ccXzRABk.s:1691 .text:0000000000000e6d KCipherVecRegInitNull
+ /tmp/ccXzRABk.s:1753 .text:0000000000000f02 KCipherVecRegMake
+ /tmp/ccXzRABk.s:1906 .rodata:0000000000000070 __func__.7675
+ /tmp/ccXzRABk.s:1911 .rodata:0000000000000090 __PRETTY_FUNCTION__.7674
+ /tmp/ccXzRABk.s:1921 .rodata:00000000000000d0 __PRETTY_FUNCTION__.7646
+ /tmp/ccXzRABk.s:1931 .rodata:0000000000000110 __PRETTY_FUNCTION__.7619
+ /tmp/ccXzRABk.s:1941 .rodata:0000000000000150 __PRETTY_FUNCTION__.7609
+ /tmp/ccXzRABk.s:1951 .rodata:0000000000000190 __PRETTY_FUNCTION__.7599
+ /tmp/ccXzRABk.s:1961 .rodata:00000000000001d0 __PRETTY_FUNCTION__.7365
+
GAS LISTING /tmp/ccXzRABk.s page 183
+
+
+ /tmp/ccXzRABk.s:1971 .rodata:0000000000000210 __PRETTY_FUNCTION__.7349
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+KCipherDestroy
+free
+__assert_fail
+SetRCFileFuncLine
+memcpy
+calloc
+KCipherInit
+KNullBlockCipherVecRegMake
+KAESBlockCipherVecRegMake
diff --git a/libs/krypto/cipher.c b/libs/krypto/cipher.c
new file mode 100644
index 0000000..85176c3
--- /dev/null
+++ b/libs/krypto/cipher.c
@@ -0,0 +1,536 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include <krypto/cipher.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/testciphermgr.h>
+#include "cipher-priv.h"
+#include "cipher-impl.h"
+
+#include <klib/rc.h>
+
+
+static const char KCipherClassName[] = "KCipherClassName";
+
+/* ----------------------------------------------------------------------
+ * Init
+ *
+ * Initialize the fields of this object. The derived class will call this
+ * during it's initialization.
+ *
+ * self object to initialze
+ * vt the virtual table of the derived class
+ * mgr the cipher manager that is the construction factory block cipher
+ * objects hold references to the manager while the manager merely
+ * points at the block ciphers when all block ciphers are destroyed
+ * the manager loses its references and it too can be destroyed if not
+ * held elsewhere
+ * name ASCIZ c-string the name of this class; pointer is expected to remain valid
+ * for the life of the object
+ */
+void KCipherInit (KCipher * self,
+ uint32_t block_size,
+ const KCipher_vt * vt,
+ const char * name)
+{
+ KRefcountInit (&self->refcount, 1, KCipherClassName, "init", name);
+ self->block_size = block_size;
+ self->vt.version = vt;
+ self->name = name;
+
+ /* the remaining fields have to be initialized in the derived object init */
+}
+
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ * base class destruction called during the derived class destruction
+ *
+ * self is the cipher object
+ *
+ * memory release is the repsonsibility of the derived class destructor
+ */
+rc_t KCipherDestroy (KCipher * self)
+{
+ if (self)
+ {
+ KRefcountWhack (&self->refcount, self->name);
+ }
+ return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * AddRef
+ * add a new owner to this class. This will mean another instance of
+ * KCipher used this Block Cipher
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherAddRef (const KCipher * self)
+{
+ if (self)
+ {
+ switch (KRefcountAdd (&self->refcount, KCipherClassName))
+ {
+ case krefLimit:
+ return RC (rcKrypto, rcCipher, rcAttaching, rcRange, rcExcessive);
+ }
+ }
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Release
+ *
+ */
+static __inline__ rc_t KCipherWhack (KCipher * self)
+{
+ switch (self->vt.version->maj)
+ {
+ case 1:
+ return self->vt.v1->destroy (self);
+ }
+ return RC (rcKrypto, rcCipher, rcDestroying, rcInterface, rcBadVersion);
+}
+
+
+KRYPTO_EXTERN
+rc_t CC KCipherRelease (const KCipher * self)
+{
+ if ( self != NULL )
+ {
+ switch (KRefcountDrop ( & self -> refcount, KCipherClassName))
+ {
+ case krefWhack:
+ return KCipherWhack ((KCipher *)self);
+
+ case krefLimit:
+ return RC ( rcKrypto, rcCipher, rcReleasing, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Some Cipher Methods are really pass through methods to the block cipher
+ *
+ */
+KRYPTO_EXTERN rc_t CC KCipherBlockSize (const KCipher * self, size_t * bytes)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+ if (bytes == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+ *bytes = self->block_size;
+
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ *
+ *
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptKey (KCipher * self, const void * user_key, size_t user_key_size)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+ if ((user_key == NULL)||(user_key_size == 0))
+ return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+ switch (self->vt.version->maj)
+ {
+ case 1:
+ return self->vt.v1->set_encrypt_key (self, user_key, user_key_size);
+ }
+ return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+/* ----------------------------------------------------------------------
+ *
+ *
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptKey (KCipher * self, const void * user_key, size_t user_key_size)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+ if ((user_key == NULL)||(user_key_size == 0))
+ return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+ switch (self->vt.version->maj)
+ {
+ case 1:
+ return self->vt.v1->set_decrypt_key (self, user_key, user_key_size);
+ }
+ return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+
+/* ----------------------------------------------------------------------
+ *
+ *
+ * Set the ivec (Initialization vector or feedback) for the cipher
+ *
+ * the size of ivec must match KCipherBlockSize
+ *
+ * the ivec is copied into the cipher not used in place
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptIVec (KCipher * self, const void * ivec)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+ if (ivec == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+ switch (self->vt.version->maj)
+ {
+ case 1:
+ return self->vt.v1->set_encrypt_ivec (self, ivec);
+ }
+ return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+/* ----------------------------------------------------------------------
+ *
+ *
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptIVec (KCipher * self, const void * ivec)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+ if (ivec == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+ switch (self->vt.version->maj)
+ {
+ case 1:
+ return self->vt.v1->set_decrypt_ivec (self, ivec);
+ }
+ return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+/* ----------------------------------------------------------------------
+ *
+ *
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptCtrFunc (KCipher * self, cipher_ctr_func func)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+ if (func == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+ switch (self->vt.version->maj)
+ {
+ case 1:
+ return self->vt.v1->set_encrypt_ctr_func (self, func);
+ }
+ return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+/* ----------------------------------------------------------------------
+ *
+ *
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptCtrFunc (KCipher * self, cipher_ctr_func func)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+ if (func == NULL)
+ return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+ switch (self->vt.version->maj)
+ {
+ case 1:
+ return self->vt.v1->set_decrypt_ctr_func (self, func);
+ }
+ return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+KRYPTO_EXTERN rc_t CC KCipherEncrypt (KCipher * self, const void * in, void * out)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcCipher, rcEncoding, rcSelf, rcNull);
+
+ if ((in == NULL) || (out == NULL))
+ return RC (rcKrypto, rcCipher, rcEncoding, rcParam, rcNull);
+
+ switch (self->vt.version->maj)
+ {
+ case 1:
+ return self->vt.v1->encrypt (self, in, out);
+ }
+ return RC (rcKrypto, rcCipher, rcAccessing, rcInterface, rcBadVersion);
+}
+
+
+KRYPTO_EXTERN rc_t CC KCipherDecrypt (KCipher * self, const void * in, void * out)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcCipher, rcEncoding, rcSelf, rcNull);
+
+ if ((in == NULL) || (out == NULL))
+ return RC (rcKrypto, rcCipher, rcEncoding, rcParam, rcNull);
+
+ switch (self->vt.version->maj)
+ {
+ case 1:
+ return self->vt.v1->decrypt (self, in, out);
+ }
+ return RC (rcKrypto, rcCipher, rcAccessing, rcInterface, rcBadVersion);
+}
+
+
+/* ====================
+ * longer runs of multiple blocks.
+ *
+ * The algorithms are well defined and standard in most cases
+ *
+ * These aremore or elss equivalent to class functions as they do not depend upon
+ * the operation of the cipher and the algorithms are independent of anything about
+ * the cipher other than its block size.
+ *
+ * PT: plain text block
+ * CT: cipher text block
+ * EK: encryption key
+ * DK: decryption key (might be sthe same as EK)
+ * ENC: encrypt cipher function on a block using a key
+ * DEC: decrypt cipher function on a block using a key
+ * IV: initialization vector - used as feedback for chaining
+ * N: number used once (nonce)
+ * FB: feedback is the next IV in a chained/feedback mode
+ */
+
+/* -----
+ * NOTE:
+ * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ * time is written. The code does not look for overlaps at this point.
+ *
+ * NOTE: currently an implementation detail limits us to 8192 bit cipher block
+ * size. Changing MAX_BLOCK_SIZE in cipher.c can up that limit without
+ * causing any other compatibility issues.
+ *
+ * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ */
+/*
+ * NOTE: if in and out overlap incorrectly this will fail
+ */
+#define BLOCK_FUNC_PASTE(A,B) A##B
+#define BLOCK_FUNC(MODE,METHOD) \
+ KRYPTO_EXTERN rc_t CC BLOCK_FUNC_PASTE(KCipher,MODE) \
+ (KCipher * self, const void * in, void * out, \
+ uint32_t block_count) \
+ { \
+ rc_t rc; \
+ \
+ if (self == NULL) \
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcSelf, rcNull); \
+ \
+ else if (in == NULL) \
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcParam, rcNull); \
+ \
+ else if (out == NULL) \
+ rc = RC (rcKrypto, rcCipher, rcEncoding, rcParam, rcNull); \
+ \
+ else if (block_count == 0) \
+ rc = 0; \
+ \
+ else \
+ { \
+ switch (self->vt.version->maj) \
+ { \
+ case 1: \
+ return self->vt.v1->METHOD(self, in, out, block_count); \
+ } \
+ rc = RC (rcKrypto, rcCipher, rcAccessing, rcInterface, \
+ rcBadVersion); \
+ } \
+ \
+ return rc; \
+ }
+
+/* ----------
+ * Electronic Code Book - simple cipher with no chaining feedback just iterate
+ * simple encrypt/decrypt with the plain, text, cipher text and key/
+ *
+ * CT = ENC (PT,EK)
+ * PT = DEC (CT,DK)
+ */
+BLOCK_FUNC(EncryptECB,encrypt_ecb)
+BLOCK_FUNC(DecryptECB,decrypt_ecb)
+
+/* ----------
+ * Cipher-Block Chaining
+ * CT = (FB = ENC (PT^IV, EK))
+ * PT = DEC ((FB = CT), DK)
+ */
+BLOCK_FUNC(EncryptCBC,encrypt_cbc)
+BLOCK_FUNC(DecryptCBC,decrypt_cbc)
+
+/* ----------
+ * Propagating cipher-block chaining
+ * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ */
+BLOCK_FUNC(EncryptPCBC,encrypt_pcbc)
+BLOCK_FUNC(DecryptPCBC,decrypt_pcbc)
+
+/* ----------
+ * Cipher Feedback
+ * CT = (FB = PT) ^ ENC (IV, EK))
+ * PT = (FB = CT) ^ DEC (IV, DK)
+ */
+BLOCK_FUNC(EncryptCFB,encrypt_cfb)
+BLOCK_FUNC(DecryptCFB,decrypt_cfb)
+
+/* ----------
+ * Output Feedback
+ * CT = PT ^ (FB = ENC (IV, EK))
+ * PT = CT ^ (FB = DEC (IV, DK))
+ */
+BLOCK_FUNC(EncryptOFB,encrypt_ofb)
+BLOCK_FUNC(DecryptOFB,decrypt_ofb)
+
+/* Counter
+ * IV is a nonce and not re-used as FB
+ * CT = PT ^ ENC (N, EK)
+ * PT = CT ^ ENC (N, DK)
+ *
+ * The enc_ctr_func (or dec_ctr_func) will be called to update the ivec before
+ * to be the nonce (number used once) before each call to the block cipher
+ * encrypt function. The encrypt function is used for decryption mode as well
+ */
+BLOCK_FUNC(EncryptCTR,encrypt_ctr)
+BLOCK_FUNC(DecryptCTR,decrypt_ctr)
+
+
+#ifndef USE_SLOW_ONES
+#define USE_SLOW_ONES 0
+#endif
+rc_t KCipherMakeInt (KCipher ** new_cipher, kcipher_type type)
+{
+ rc_t rc;
+
+ *new_cipher = NULL;
+
+#if 0
+ rc = KCipherVecAesNiMake (new_cipher, type);
+ if (rc)
+ {
+ if (GetRCState(rc) == rcUnsupported)
+ {
+#if USE_SLOW_ONES
+ rc = KCipherVecRegMake (new_cipher, type);
+ if (rc)
+ {
+ if (GetRCState(rc) == rcUnsupported)
+ {
+ rc = KCipherVecMake (new_cipher, type);
+ if (GetRCState(rc) == rcUnsupported)
+ {
+#endif
+#endif
+ rc = KCipherByteMake (new_cipher, type);
+#if 0
+#if USE_SLOW_ONES
+ }
+ }
+ }
+#endif
+ }
+ }
+#endif
+ return rc;
+}
+
+kcipher_subtype KCipherSubType = ksubcipher_none;
+
+rc_t KCipherMake (KCipher ** new_cipher, kcipher_type type)
+{
+ rc_t rc;
+
+ if (new_cipher == NULL)
+ rc = RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+ else
+ {
+ switch (type)
+ {
+ case kcipher_null:
+ case kcipher_AES:
+ switch (KCipherSubType)
+ {
+ case ksubcipher_byte:
+ rc = KCipherByteMake (new_cipher, type);
+ break;
+
+ case ksubcipher_vec:
+ rc = KCipherVecMake (new_cipher, type);
+ break;
+
+ case ksubcipher_vecreg:
+ rc = KCipherVecRegMake (new_cipher, type);
+ break;
+
+ case ksubcipher_accelerated:
+ rc = KCipherVecAesNiMake (new_cipher, type);
+ break;
+
+ default:
+ rc = KCipherMakeInt (new_cipher, type);
+ break;
+ }
+ break;
+ default:
+ rc = RC (rcKrypto, rcCipher, rcConstructing, rcBlockCipher, rcInvalid);
+ break;
+ }
+ }
+ return rc;
+}
+
+
+
+
+
+
+/* EOF */
diff --git a/libs/krypto/ciphermgr.c b/libs/krypto/ciphermgr.c
new file mode 100644
index 0000000..25e0b1a
--- /dev/null
+++ b/libs/krypto/ciphermgr.c
@@ -0,0 +1,295 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#define USE_AES_NI false
+
+#include <krypto/extern.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/cipher.h>
+
+#include "cipher-priv.h"
+
+#include <kproc/lock.h>
+
+#include <klib/rc.h>
+#include <klib/refcount.h>
+#include <klib/debug.h>
+
+#include <sysalloc.h>
+
+#include <atomic.h>
+
+#include <stdlib.h>
+#include <assert.h>
+
+#ifdef _DEBUGGING
+#define MGR_DEBUG(msg) DBGMSG(DBG_KFS,DBG_FLAG(DBG_KFS_MGR), msg)
+#else
+#define MGR_DEBUG(msg)
+#endif
+
+
+
+static const char kciphermanager_classname [] = "KCipherManager";
+
+
+/*--------------------------------------------------------------------------
+ * KCipherManager
+ */
+/* currently expected to be a singleton and not use a vtable but
+ * be fully fleshed out here */
+static
+KCipherManager * singleton = NULL;
+
+
+struct KCipherManager
+{
+ KRefcount refcount;
+
+ KLock * lock;
+
+};
+
+
+static
+rc_t KCipherManagerAlloc (KCipherManager ** ppobj)
+{
+ KCipherManager * pobj;
+
+ assert (ppobj);
+
+ pobj = calloc (sizeof *pobj, 1);
+ if (pobj)
+ {
+ *ppobj = pobj;
+ return 0;
+ }
+
+ *ppobj = NULL;
+ return RC (rcKrypto, rcMgr, rcConstructing, rcMemory, rcExhausted);
+}
+
+
+static
+rc_t KCipherManagerInit (KCipherManager * self)
+{
+ rc_t rc;
+
+ rc = KLockMake (&self->lock);
+ if (rc == 0)
+ {
+ KRefcountInit (&self->refcount, 1, kciphermanager_classname, "init",
+ "singleton");
+ }
+
+ return rc;
+}
+
+
+/* Destroy
+ * destroy
+ */
+LIB_EXPORT rc_t CC KCipherManagerDestroy ( KCipherManager *self )
+{
+ rc_t rc = 0;
+
+ if ( self == NULL )
+ rc = RC ( rcKrypto, rcMgr, rcDestroying, rcSelf, rcNull );
+ else
+ {
+ if (self == singleton)
+ {
+ KCipherManager * reread;
+
+ reread = atomic_test_and_set_ptr ((void*volatile*)&singleton, NULL, self);
+
+ /* ignore results: just going for guaranteed atomicity though might not need it */
+ }
+
+ /* no return value */
+ KRefcountWhack (&self->refcount, kciphermanager_classname);
+
+ rc = KLockRelease (self->lock);
+
+ free (self);
+ }
+ return rc;
+}
+
+
+/* AddRef
+ * creates a new reference
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC KCipherManagerAddRef ( const KCipherManager *self )
+{
+ if (self != NULL)
+ {
+ switch (KRefcountAdd (&self->refcount, kciphermanager_classname))
+ {
+ case krefOkay:
+ break;
+ case krefZero:
+ return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcIncorrect);
+ case krefLimit:
+ return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcExhausted);
+ case krefNegative:
+ return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+ default:
+ return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+ }
+ }
+ return 0;
+}
+
+
+/* Release
+ * discard reference to manager
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC KCipherManagerRelease ( const KCipherManager *self )
+{
+ rc_t rc = 0;
+ if (self != NULL)
+ {
+ switch (KRefcountDrop (&self->refcount, kciphermanager_classname))
+ {
+ case krefOkay:
+ case krefZero:
+ break;
+ case krefWhack:
+ rc = KCipherManagerDestroy ((KCipherManager*)self);
+ break;
+ case krefNegative:
+ return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+ default:
+ rc = RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+ break;
+ }
+ }
+ return rc;
+}
+
+
+/* Make
+ * we have a shared singleton for the cipher manager
+ * first call actually makes the managerblo
+ * subsequent calls get added references
+ */
+LIB_EXPORT rc_t CC KCipherManagerMake (KCipherManager ** mgr)
+{
+ rc_t rc = 0;
+
+ if (mgr == NULL)
+ return RC (rcKrypto, rcMgr, rcConstructing, rcSelf, rcNull);
+
+ *mgr = NULL;
+
+make_race_retry:
+
+ if (singleton)
+ {
+ rc = KCipherManagerAddRef (singleton);
+ if (rc == 0)
+ {
+ *mgr = singleton;
+ return 0;
+ }
+ }
+ else
+ {
+ KCipherManager * self;
+
+ rc = KCipherManagerAlloc (&self);
+ if (rc == 0)
+ {
+ rc = KCipherManagerInit (self);
+ if (rc == 0)
+ {
+ KCipherManager * reread;
+
+ reread = atomic_test_and_set_ptr ((void*volatile*)&singleton, self, NULL);
+
+ if (reread)
+ {
+ KCipherManagerDestroy (self);
+ goto make_race_retry;
+ }
+
+ *mgr = self;
+ return 0;
+ }
+ else
+ {
+ KCipherManagerDestroy (self);
+ }
+ }
+ }
+ return rc;
+}
+
+
+static __inline__
+rc_t KCipherManagerMakeCipherInt (const KCipherManager *self,
+ KCipher ** pcipher,
+ kcipher_type type)
+{
+ KCipher * pc;
+ rc_t rc;
+
+ assert (self);
+ assert (pcipher);
+
+ rc = KCipherMake (&pc, type);
+
+ *pcipher = rc ? NULL : pc;
+
+ return rc;
+}
+
+
+LIB_EXPORT
+rc_t CC KCipherManagerMakeCipher (const KCipherManager * self,
+ struct KCipher ** pcipher,
+ kcipher_type type)
+{
+ rc_t rc;
+
+ if (self == NULL)
+ return RC (rcKrypto, rcMgr, rcConstructing, rcSelf, rcNull);
+
+ if (pcipher == NULL)
+ return RC (rcKrypto, rcMgr, rcConstructing, rcParam, rcNull);
+
+ *pcipher = NULL;
+
+ rc = KCipherManagerMakeCipherInt (self, pcipher, type);
+
+ return rc;
+}
+
+
+
diff --git a/libs/krypto/compile-test.aes-ni.pic.o.list b/libs/krypto/compile-test.aes-ni.pic.o.list
new file mode 100644
index 0000000..98dcfd4
--- /dev/null
+++ b/libs/krypto/compile-test.aes-ni.pic.o.list
@@ -0,0 +1,592 @@
+GAS LISTING /tmp/ccyCKNUn.s page 1
+
+
+ 1 .file "compile-test.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 D7000000 .text
+ 8 0200BA00
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .globl KCipherVecAesNitest
+ 11 .type KCipherVecAesNitest, @function
+ 12 KCipherVecAesNitest:
+ 13 .LFB575:
+ 14 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <cpuid.h>
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <v128.h>
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "ncbi-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "blockcipher-impl.h"
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** const
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec CMEMBER(test) (void)
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** {
+ 15 .loc 1 37 0
+ 16 .cfi_startproc
+
GAS LISTING /tmp/ccyCKNUn.s page 2
+
+
+ 17 0000 55 pushq %rbp
+ 18 .LCFI0:
+ 19 .cfi_def_cfa_offset 16
+ 20 0001 4889E5 movq %rsp, %rbp
+ 21 .cfi_offset 6, -16
+ 22 .LCFI1:
+ 23 .cfi_def_cfa_register 6
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #if USEVEC
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec zero = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 24 .loc 1 40 0
+ 25 0004 660F6F05 movdqa .LC0(%rip), %xmm0
+ 25 00000000
+ 26 000c F30F7F45 movdqu %xmm0, -32(%rbp)
+ 26 E0
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec one = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+ 27 .loc 1 42 0
+ 28 0011 660F6F05 movdqa .LC1(%rip), %xmm0
+ 28 00000000
+ 29 0019 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 29 F0
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #else
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec zero = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec one = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #endif
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** return zero + one;
+ 30 .loc 1 49 0
+ 31 001e F30F6F45 movdqu -16(%rbp), %xmm0
+ 31 F0
+ 32 0023 F30F6F4D movdqu -32(%rbp), %xmm1
+ 32 E0
+ 33 0028 660FFCC1 paddb %xmm1, %xmm0
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** }
+ 34 .loc 1 50 0
+ 35 002c C9 leave
+ 36 002d C3 ret
+ 37 .cfi_endproc
+ 38 .LFE575:
+ 39 .size KCipherVecAesNitest, .-KCipherVecAesNitest
+ 40 .section .rodata
+ 41 .align 16
+ 42 .LC0:
+ 43 0000 00 .byte 0
+ 44 0001 00 .byte 0
+ 45 0002 00 .byte 0
+ 46 0003 00 .byte 0
+ 47 0004 00 .byte 0
+ 48 0005 00 .byte 0
+ 49 0006 00 .byte 0
+ 50 0007 00 .byte 0
+ 51 0008 00 .byte 0
+ 52 0009 00 .byte 0
+ 53 000a 00 .byte 0
+ 54 000b 00 .byte 0
+
GAS LISTING /tmp/ccyCKNUn.s page 3
+
+
+ 55 000c 00 .byte 0
+ 56 000d 00 .byte 0
+ 57 000e 00 .byte 0
+ 58 000f 00 .byte 0
+ 59 .align 16
+ 60 .LC1:
+ 61 0010 01 .byte 1
+ 62 0011 01 .byte 1
+ 63 0012 01 .byte 1
+ 64 0013 01 .byte 1
+ 65 0014 01 .byte 1
+ 66 0015 01 .byte 1
+ 67 0016 01 .byte 1
+ 68 0017 01 .byte 1
+ 69 0018 01 .byte 1
+ 70 0019 01 .byte 1
+ 71 001a 01 .byte 1
+ 72 001b 01 .byte 1
+ 73 001c 01 .byte 1
+ 74 001d 01 .byte 1
+ 75 001e 01 .byte 1
+ 76 001f 01 .byte 1
+ 77 .text
+ 78 .Letext0:
+ 79 .section .debug_loc,"", at progbits
+ 80 .Ldebug_loc0:
+ 81 .LLST0:
+ 82 0000 00000000 .quad .LFB575-.Ltext0
+ 82 00000000
+ 83 0008 01000000 .quad .LCFI0-.Ltext0
+ 83 00000000
+ 84 0010 0200 .value 0x2
+ 85 0012 77 .byte 0x77
+ 86 0013 08 .sleb128 8
+ 87 0014 01000000 .quad .LCFI0-.Ltext0
+ 87 00000000
+ 88 001c 04000000 .quad .LCFI1-.Ltext0
+ 88 00000000
+ 89 0024 0200 .value 0x2
+ 90 0026 77 .byte 0x77
+ 91 0027 10 .sleb128 16
+ 92 0028 04000000 .quad .LCFI1-.Ltext0
+ 92 00000000
+ 93 0030 2E000000 .quad .LFE575-.Ltext0
+ 93 00000000
+ 94 0038 0200 .value 0x2
+ 95 003a 76 .byte 0x76
+ 96 003b 10 .sleb128 16
+ 97 003c 00000000 .quad 0x0
+ 97 00000000
+ 98 0044 00000000 .quad 0x0
+ 98 00000000
+ 99 .file 2 "/usr/include/stdint.h"
+ 100 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 101 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 102 .section .debug_info
+ 103 0000 FD000000 .long 0xfd
+
GAS LISTING /tmp/ccyCKNUn.s page 4
+
+
+ 104 0004 0200 .value 0x2
+ 105 0006 00000000 .long .Ldebug_abbrev0
+ 106 000a 08 .byte 0x8
+ 107 000b 01 .uleb128 0x1
+ 108 000c 00000000 .long .LASF16
+ 109 0010 01 .byte 0x1
+ 110 0011 00000000 .long .LASF17
+ 111 0015 00000000 .quad .Ltext0
+ 111 00000000
+ 112 001d 00000000 .quad .Letext0
+ 112 00000000
+ 113 0025 00000000 .long .Ldebug_line0
+ 114 0029 02 .uleb128 0x2
+ 115 002a 01 .byte 0x1
+ 116 002b 06 .byte 0x6
+ 117 002c 00000000 .long .LASF0
+ 118 0030 02 .uleb128 0x2
+ 119 0031 02 .byte 0x2
+ 120 0032 05 .byte 0x5
+ 121 0033 00000000 .long .LASF1
+ 122 0037 03 .uleb128 0x3
+ 123 0038 04 .byte 0x4
+ 124 0039 05 .byte 0x5
+ 125 003a 696E7400 .string "int"
+ 126 003e 02 .uleb128 0x2
+ 127 003f 08 .byte 0x8
+ 128 0040 05 .byte 0x5
+ 129 0041 00000000 .long .LASF2
+ 130 0045 04 .uleb128 0x4
+ 131 0046 00000000 .long .LASF12
+ 132 004a 02 .byte 0x2
+ 133 004b 31 .byte 0x31
+ 134 004c 50000000 .long 0x50
+ 135 0050 02 .uleb128 0x2
+ 136 0051 01 .byte 0x1
+ 137 0052 08 .byte 0x8
+ 138 0053 00000000 .long .LASF3
+ 139 0057 02 .uleb128 0x2
+ 140 0058 02 .byte 0x2
+ 141 0059 07 .byte 0x7
+ 142 005a 00000000 .long .LASF4
+ 143 005e 02 .uleb128 0x2
+ 144 005f 04 .byte 0x4
+ 145 0060 07 .byte 0x7
+ 146 0061 00000000 .long .LASF5
+ 147 0065 02 .uleb128 0x2
+ 148 0066 08 .byte 0x8
+ 149 0067 07 .byte 0x7
+ 150 0068 00000000 .long .LASF6
+ 151 006c 05 .uleb128 0x5
+ 152 006d 08 .byte 0x8
+ 153 006e 07 .byte 0x7
+ 154 006f 02 .uleb128 0x2
+ 155 0070 01 .byte 0x1
+ 156 0071 06 .byte 0x6
+ 157 0072 00000000 .long .LASF7
+ 158 0076 02 .uleb128 0x2
+
GAS LISTING /tmp/ccyCKNUn.s page 5
+
+
+ 159 0077 08 .byte 0x8
+ 160 0078 05 .byte 0x5
+ 161 0079 00000000 .long .LASF8
+ 162 007d 02 .uleb128 0x2
+ 163 007e 04 .byte 0x4
+ 164 007f 04 .byte 0x4
+ 165 0080 00000000 .long .LASF9
+ 166 0084 02 .uleb128 0x2
+ 167 0085 08 .byte 0x8
+ 168 0086 07 .byte 0x7
+ 169 0087 00000000 .long .LASF10
+ 170 008b 02 .uleb128 0x2
+ 171 008c 08 .byte 0x8
+ 172 008d 04 .byte 0x4
+ 173 008e 00000000 .long .LASF11
+ 174 0092 04 .uleb128 0x4
+ 175 0093 00000000 .long .LASF13
+ 176 0097 03 .byte 0x3
+ 177 0098 26 .byte 0x26
+ 178 0099 9D000000 .long 0x9d
+ 179 009d 06 .uleb128 0x6
+ 180 009e 01 .byte 0x1
+ 181 009f 45000000 .long 0x45
+ 182 00a3 AE000000 .long 0xae
+ 183 00a7 07 .uleb128 0x7
+ 184 00a8 6C000000 .long 0x6c
+ 185 00ac 0F .byte 0xf
+ 186 00ad 00 .byte 0x0
+ 187 00ae 04 .uleb128 0x4
+ 188 00af 00000000 .long .LASF14
+ 189 00b3 04 .byte 0x4
+ 190 00b4 3B .byte 0x3b
+ 191 00b5 92000000 .long 0x92
+ 192 00b9 08 .uleb128 0x8
+ 193 00ba 01 .byte 0x1
+ 194 00bb 00000000 .long .LASF18
+ 195 00bf 01 .byte 0x1
+ 196 00c0 24 .byte 0x24
+ 197 00c1 01 .byte 0x1
+ 198 00c2 FB000000 .long 0xfb
+ 199 00c6 00000000 .quad .LFB575
+ 199 00000000
+ 200 00ce 00000000 .quad .LFE575
+ 200 00000000
+ 201 00d6 00000000 .long .LLST0
+ 202 00da FB000000 .long 0xfb
+ 203 00de 09 .uleb128 0x9
+ 204 00df 00000000 .long .LASF15
+ 205 00e3 01 .byte 0x1
+ 206 00e4 27 .byte 0x27
+ 207 00e5 AE000000 .long 0xae
+ 208 00e9 02 .byte 0x2
+ 209 00ea 91 .byte 0x91
+ 210 00eb 50 .sleb128 -48
+ 211 00ec 0A .uleb128 0xa
+ 212 00ed 6F6E6500 .string "one"
+ 213 00f1 01 .byte 0x1
+
GAS LISTING /tmp/ccyCKNUn.s page 6
+
+
+ 214 00f2 29 .byte 0x29
+ 215 00f3 AE000000 .long 0xae
+ 216 00f7 02 .byte 0x2
+ 217 00f8 91 .byte 0x91
+ 218 00f9 60 .sleb128 -32
+ 219 00fa 00 .byte 0x0
+ 220 00fb 0B .uleb128 0xb
+ 221 00fc AE000000 .long 0xae
+ 222 0100 00 .byte 0x0
+ 223 .section .debug_abbrev
+ 224 0000 01 .uleb128 0x1
+ 225 0001 11 .uleb128 0x11
+ 226 0002 01 .byte 0x1
+ 227 0003 25 .uleb128 0x25
+ 228 0004 0E .uleb128 0xe
+ 229 0005 13 .uleb128 0x13
+ 230 0006 0B .uleb128 0xb
+ 231 0007 03 .uleb128 0x3
+ 232 0008 0E .uleb128 0xe
+ 233 0009 11 .uleb128 0x11
+ 234 000a 01 .uleb128 0x1
+ 235 000b 12 .uleb128 0x12
+ 236 000c 01 .uleb128 0x1
+ 237 000d 10 .uleb128 0x10
+ 238 000e 06 .uleb128 0x6
+ 239 000f 00 .byte 0x0
+ 240 0010 00 .byte 0x0
+ 241 0011 02 .uleb128 0x2
+ 242 0012 24 .uleb128 0x24
+ 243 0013 00 .byte 0x0
+ 244 0014 0B .uleb128 0xb
+ 245 0015 0B .uleb128 0xb
+ 246 0016 3E .uleb128 0x3e
+ 247 0017 0B .uleb128 0xb
+ 248 0018 03 .uleb128 0x3
+ 249 0019 0E .uleb128 0xe
+ 250 001a 00 .byte 0x0
+ 251 001b 00 .byte 0x0
+ 252 001c 03 .uleb128 0x3
+ 253 001d 24 .uleb128 0x24
+ 254 001e 00 .byte 0x0
+ 255 001f 0B .uleb128 0xb
+ 256 0020 0B .uleb128 0xb
+ 257 0021 3E .uleb128 0x3e
+ 258 0022 0B .uleb128 0xb
+ 259 0023 03 .uleb128 0x3
+ 260 0024 08 .uleb128 0x8
+ 261 0025 00 .byte 0x0
+ 262 0026 00 .byte 0x0
+ 263 0027 04 .uleb128 0x4
+ 264 0028 16 .uleb128 0x16
+ 265 0029 00 .byte 0x0
+ 266 002a 03 .uleb128 0x3
+ 267 002b 0E .uleb128 0xe
+ 268 002c 3A .uleb128 0x3a
+ 269 002d 0B .uleb128 0xb
+ 270 002e 3B .uleb128 0x3b
+
GAS LISTING /tmp/ccyCKNUn.s page 7
+
+
+ 271 002f 0B .uleb128 0xb
+ 272 0030 49 .uleb128 0x49
+ 273 0031 13 .uleb128 0x13
+ 274 0032 00 .byte 0x0
+ 275 0033 00 .byte 0x0
+ 276 0034 05 .uleb128 0x5
+ 277 0035 24 .uleb128 0x24
+ 278 0036 00 .byte 0x0
+ 279 0037 0B .uleb128 0xb
+ 280 0038 0B .uleb128 0xb
+ 281 0039 3E .uleb128 0x3e
+ 282 003a 0B .uleb128 0xb
+ 283 003b 00 .byte 0x0
+ 284 003c 00 .byte 0x0
+ 285 003d 06 .uleb128 0x6
+ 286 003e 01 .uleb128 0x1
+ 287 003f 01 .byte 0x1
+ 288 0040 8742 .uleb128 0x2107
+ 289 0042 0C .uleb128 0xc
+ 290 0043 49 .uleb128 0x49
+ 291 0044 13 .uleb128 0x13
+ 292 0045 01 .uleb128 0x1
+ 293 0046 13 .uleb128 0x13
+ 294 0047 00 .byte 0x0
+ 295 0048 00 .byte 0x0
+ 296 0049 07 .uleb128 0x7
+ 297 004a 21 .uleb128 0x21
+ 298 004b 00 .byte 0x0
+ 299 004c 49 .uleb128 0x49
+ 300 004d 13 .uleb128 0x13
+ 301 004e 2F .uleb128 0x2f
+ 302 004f 0B .uleb128 0xb
+ 303 0050 00 .byte 0x0
+ 304 0051 00 .byte 0x0
+ 305 0052 08 .uleb128 0x8
+ 306 0053 2E .uleb128 0x2e
+ 307 0054 01 .byte 0x1
+ 308 0055 3F .uleb128 0x3f
+ 309 0056 0C .uleb128 0xc
+ 310 0057 03 .uleb128 0x3
+ 311 0058 0E .uleb128 0xe
+ 312 0059 3A .uleb128 0x3a
+ 313 005a 0B .uleb128 0xb
+ 314 005b 3B .uleb128 0x3b
+ 315 005c 0B .uleb128 0xb
+ 316 005d 27 .uleb128 0x27
+ 317 005e 0C .uleb128 0xc
+ 318 005f 49 .uleb128 0x49
+ 319 0060 13 .uleb128 0x13
+ 320 0061 11 .uleb128 0x11
+ 321 0062 01 .uleb128 0x1
+ 322 0063 12 .uleb128 0x12
+ 323 0064 01 .uleb128 0x1
+ 324 0065 40 .uleb128 0x40
+ 325 0066 06 .uleb128 0x6
+ 326 0067 01 .uleb128 0x1
+ 327 0068 13 .uleb128 0x13
+
GAS LISTING /tmp/ccyCKNUn.s page 8
+
+
+ 328 0069 00 .byte 0x0
+ 329 006a 00 .byte 0x0
+ 330 006b 09 .uleb128 0x9
+ 331 006c 34 .uleb128 0x34
+ 332 006d 00 .byte 0x0
+ 333 006e 03 .uleb128 0x3
+ 334 006f 0E .uleb128 0xe
+ 335 0070 3A .uleb128 0x3a
+ 336 0071 0B .uleb128 0xb
+ 337 0072 3B .uleb128 0x3b
+ 338 0073 0B .uleb128 0xb
+ 339 0074 49 .uleb128 0x49
+ 340 0075 13 .uleb128 0x13
+ 341 0076 02 .uleb128 0x2
+ 342 0077 0A .uleb128 0xa
+ 343 0078 00 .byte 0x0
+ 344 0079 00 .byte 0x0
+ 345 007a 0A .uleb128 0xa
+ 346 007b 34 .uleb128 0x34
+ 347 007c 00 .byte 0x0
+ 348 007d 03 .uleb128 0x3
+ 349 007e 08 .uleb128 0x8
+ 350 007f 3A .uleb128 0x3a
+ 351 0080 0B .uleb128 0xb
+ 352 0081 3B .uleb128 0x3b
+ 353 0082 0B .uleb128 0xb
+ 354 0083 49 .uleb128 0x49
+ 355 0084 13 .uleb128 0x13
+ 356 0085 02 .uleb128 0x2
+ 357 0086 0A .uleb128 0xa
+ 358 0087 00 .byte 0x0
+ 359 0088 00 .byte 0x0
+ 360 0089 0B .uleb128 0xb
+ 361 008a 26 .uleb128 0x26
+ 362 008b 00 .byte 0x0
+ 363 008c 49 .uleb128 0x49
+ 364 008d 13 .uleb128 0x13
+ 365 008e 00 .byte 0x0
+ 366 008f 00 .byte 0x0
+ 367 0090 00 .byte 0x0
+ 368 .section .debug_pubnames,"", at progbits
+ 369 0000 26000000 .long 0x26
+ 370 0004 0200 .value 0x2
+ 371 0006 00000000 .long .Ldebug_info0
+ 372 000a 01010000 .long 0x101
+ 373 000e B9000000 .long 0xb9
+ 374 0012 4B436970 .string "KCipherVecAesNitest"
+ 374 68657256
+ 374 65634165
+ 374 734E6974
+ 374 65737400
+ 375 0026 00000000 .long 0x0
+ 376 .section .debug_aranges,"", at progbits
+ 377 0000 2C000000 .long 0x2c
+ 378 0004 0200 .value 0x2
+ 379 0006 00000000 .long .Ldebug_info0
+ 380 000a 08 .byte 0x8
+
GAS LISTING /tmp/ccyCKNUn.s page 9
+
+
+ 381 000b 00 .byte 0x0
+ 382 000c 0000 .value 0x0
+ 383 000e 0000 .value 0x0
+ 384 0010 00000000 .quad .Ltext0
+ 384 00000000
+ 385 0018 2E000000 .quad .Letext0-.Ltext0
+ 385 00000000
+ 386 0020 00000000 .quad 0x0
+ 386 00000000
+ 387 0028 00000000 .quad 0x0
+ 387 00000000
+ 388 .section .debug_str,"MS", at progbits,1
+ 389 .LASF8:
+ 390 0000 6C6F6E67 .string "long long int"
+ 390 206C6F6E
+ 390 6720696E
+ 390 7400
+ 391 .LASF17:
+ 392 000e 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+ 392 652F726F
+ 392 6461726D
+ 392 65722F73
+ 392 72615F73
+ 393 .LASF5:
+ 394 0048 756E7369 .string "unsigned int"
+ 394 676E6564
+ 394 20696E74
+ 394 00
+ 395 .LASF6:
+ 396 0055 6C6F6E67 .string "long unsigned int"
+ 396 20756E73
+ 396 69676E65
+ 396 6420696E
+ 396 7400
+ 397 .LASF10:
+ 398 0067 6C6F6E67 .string "long long unsigned int"
+ 398 206C6F6E
+ 398 6720756E
+ 398 7369676E
+ 398 65642069
+ 399 .LASF12:
+ 400 007e 75696E74 .string "uint8_t"
+ 400 385F7400
+ 401 .LASF18:
+ 402 0086 4B436970 .string "KCipherVecAesNitest"
+ 402 68657256
+ 402 65634165
+ 402 734E6974
+ 402 65737400
+ 403 .LASF16:
+ 404 009a 474E5520 .string "GNU C 4.4.2"
+ 404 4320342E
+ 404 342E3200
+ 405 .LASF3:
+ 406 00a6 756E7369 .string "unsigned char"
+ 406 676E6564
+ 406 20636861
+
GAS LISTING /tmp/ccyCKNUn.s page 10
+
+
+ 406 7200
+ 407 .LASF7:
+ 408 00b4 63686172 .string "char"
+ 408 00
+ 409 .LASF2:
+ 410 00b9 6C6F6E67 .string "long int"
+ 410 20696E74
+ 410 00
+ 411 .LASF11:
+ 412 00c2 646F7562 .string "double"
+ 412 6C6500
+ 413 .LASF4:
+ 414 00c9 73686F72 .string "short unsigned int"
+ 414 7420756E
+ 414 7369676E
+ 414 65642069
+ 414 6E7400
+ 415 .LASF0:
+ 416 00dc 7369676E .string "signed char"
+ 416 65642063
+ 416 68617200
+ 417 .LASF13:
+ 418 00e8 76313238 .string "v128_u8_t"
+ 418 5F75385F
+ 418 7400
+ 419 .LASF14:
+ 420 00f2 43697068 .string "CipherVec"
+ 420 65725665
+ 420 6300
+ 421 .LASF9:
+ 422 00fc 666C6F61 .string "float"
+ 422 7400
+ 423 .LASF15:
+ 424 0102 7A65726F .string "zero"
+ 424 00
+ 425 .LASF1:
+ 426 0107 73686F72 .string "short int"
+ 426 7420696E
+ 426 7400
+ 427 .ident "GCC: (GNU) 4.4.2"
+ 428 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccyCKNUn.s page 11
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 compile-test.c
+ /tmp/ccyCKNUn.s:12 .text:0000000000000000 KCipherVecAesNitest
+
+NO UNDEFINED SYMBOLS
diff --git a/libs/krypto/compile-test.c b/libs/krypto/compile-test.c
new file mode 100644
index 0000000..1d3de7a
--- /dev/null
+++ b/libs/krypto/compile-test.c
@@ -0,0 +1,50 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+
+#include <cpuid.h>
+#include <v128.h>
+
+#include "ncbi-priv.h"
+#include "blockcipher-impl.h"
+
+
+
+const
+CipherVec CMEMBER(test) (void)
+{
+#if USEVEC
+ CipherVec zero = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ CipherVec one = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+#else
+ CipherVec zero = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ CipherVec one = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+#endif
+ return zero + one;
+}
diff --git a/libs/krypto/compile-test.vec.pic.o.list b/libs/krypto/compile-test.vec.pic.o.list
new file mode 100644
index 0000000..263aadf
--- /dev/null
+++ b/libs/krypto/compile-test.vec.pic.o.list
@@ -0,0 +1,590 @@
+GAS LISTING /tmp/cckgalP6.s page 1
+
+
+ 1 .file "compile-test.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 D7000000 .text
+ 8 0200BA00
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .globl KCipherVectest
+ 11 .type KCipherVectest, @function
+ 12 KCipherVectest:
+ 13 .LFB495:
+ 14 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <cpuid.h>
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <v128.h>
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "ncbi-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "blockcipher-impl.h"
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** const
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec CMEMBER(test) (void)
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** {
+ 15 .loc 1 37 0
+ 16 .cfi_startproc
+
GAS LISTING /tmp/cckgalP6.s page 2
+
+
+ 17 0000 55 pushq %rbp
+ 18 .LCFI0:
+ 19 .cfi_def_cfa_offset 16
+ 20 0001 4889E5 movq %rsp, %rbp
+ 21 .cfi_offset 6, -16
+ 22 .LCFI1:
+ 23 .cfi_def_cfa_register 6
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #if USEVEC
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec zero = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 24 .loc 1 40 0
+ 25 0004 660F6F05 movdqa .LC0(%rip), %xmm0
+ 25 00000000
+ 26 000c F30F7F45 movdqu %xmm0, -32(%rbp)
+ 26 E0
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec one = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+ 27 .loc 1 42 0
+ 28 0011 660F6F05 movdqa .LC1(%rip), %xmm0
+ 28 00000000
+ 29 0019 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 29 F0
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #else
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec zero = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec one = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #endif
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** return zero + one;
+ 30 .loc 1 49 0
+ 31 001e F30F6F45 movdqu -16(%rbp), %xmm0
+ 31 F0
+ 32 0023 F30F6F4D movdqu -32(%rbp), %xmm1
+ 32 E0
+ 33 0028 660FFCC1 paddb %xmm1, %xmm0
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** }
+ 34 .loc 1 50 0
+ 35 002c C9 leave
+ 36 002d C3 ret
+ 37 .cfi_endproc
+ 38 .LFE495:
+ 39 .size KCipherVectest, .-KCipherVectest
+ 40 .section .rodata
+ 41 .align 16
+ 42 .LC0:
+ 43 0000 00 .byte 0
+ 44 0001 00 .byte 0
+ 45 0002 00 .byte 0
+ 46 0003 00 .byte 0
+ 47 0004 00 .byte 0
+ 48 0005 00 .byte 0
+ 49 0006 00 .byte 0
+ 50 0007 00 .byte 0
+ 51 0008 00 .byte 0
+ 52 0009 00 .byte 0
+ 53 000a 00 .byte 0
+ 54 000b 00 .byte 0
+
GAS LISTING /tmp/cckgalP6.s page 3
+
+
+ 55 000c 00 .byte 0
+ 56 000d 00 .byte 0
+ 57 000e 00 .byte 0
+ 58 000f 00 .byte 0
+ 59 .align 16
+ 60 .LC1:
+ 61 0010 01 .byte 1
+ 62 0011 01 .byte 1
+ 63 0012 01 .byte 1
+ 64 0013 01 .byte 1
+ 65 0014 01 .byte 1
+ 66 0015 01 .byte 1
+ 67 0016 01 .byte 1
+ 68 0017 01 .byte 1
+ 69 0018 01 .byte 1
+ 70 0019 01 .byte 1
+ 71 001a 01 .byte 1
+ 72 001b 01 .byte 1
+ 73 001c 01 .byte 1
+ 74 001d 01 .byte 1
+ 75 001e 01 .byte 1
+ 76 001f 01 .byte 1
+ 77 .text
+ 78 .Letext0:
+ 79 .section .debug_loc,"", at progbits
+ 80 .Ldebug_loc0:
+ 81 .LLST0:
+ 82 0000 00000000 .quad .LFB495-.Ltext0
+ 82 00000000
+ 83 0008 01000000 .quad .LCFI0-.Ltext0
+ 83 00000000
+ 84 0010 0200 .value 0x2
+ 85 0012 77 .byte 0x77
+ 86 0013 08 .sleb128 8
+ 87 0014 01000000 .quad .LCFI0-.Ltext0
+ 87 00000000
+ 88 001c 04000000 .quad .LCFI1-.Ltext0
+ 88 00000000
+ 89 0024 0200 .value 0x2
+ 90 0026 77 .byte 0x77
+ 91 0027 10 .sleb128 16
+ 92 0028 04000000 .quad .LCFI1-.Ltext0
+ 92 00000000
+ 93 0030 2E000000 .quad .LFE495-.Ltext0
+ 93 00000000
+ 94 0038 0200 .value 0x2
+ 95 003a 76 .byte 0x76
+ 96 003b 10 .sleb128 16
+ 97 003c 00000000 .quad 0x0
+ 97 00000000
+ 98 0044 00000000 .quad 0x0
+ 98 00000000
+ 99 .file 2 "/usr/include/stdint.h"
+ 100 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 101 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 102 .section .debug_info
+ 103 0000 FD000000 .long 0xfd
+
GAS LISTING /tmp/cckgalP6.s page 4
+
+
+ 104 0004 0200 .value 0x2
+ 105 0006 00000000 .long .Ldebug_abbrev0
+ 106 000a 08 .byte 0x8
+ 107 000b 01 .uleb128 0x1
+ 108 000c 00000000 .long .LASF16
+ 109 0010 01 .byte 0x1
+ 110 0011 00000000 .long .LASF17
+ 111 0015 00000000 .quad .Ltext0
+ 111 00000000
+ 112 001d 00000000 .quad .Letext0
+ 112 00000000
+ 113 0025 00000000 .long .Ldebug_line0
+ 114 0029 02 .uleb128 0x2
+ 115 002a 01 .byte 0x1
+ 116 002b 06 .byte 0x6
+ 117 002c 00000000 .long .LASF0
+ 118 0030 02 .uleb128 0x2
+ 119 0031 02 .byte 0x2
+ 120 0032 05 .byte 0x5
+ 121 0033 00000000 .long .LASF1
+ 122 0037 03 .uleb128 0x3
+ 123 0038 04 .byte 0x4
+ 124 0039 05 .byte 0x5
+ 125 003a 696E7400 .string "int"
+ 126 003e 02 .uleb128 0x2
+ 127 003f 08 .byte 0x8
+ 128 0040 05 .byte 0x5
+ 129 0041 00000000 .long .LASF2
+ 130 0045 04 .uleb128 0x4
+ 131 0046 00000000 .long .LASF12
+ 132 004a 02 .byte 0x2
+ 133 004b 31 .byte 0x31
+ 134 004c 50000000 .long 0x50
+ 135 0050 02 .uleb128 0x2
+ 136 0051 01 .byte 0x1
+ 137 0052 08 .byte 0x8
+ 138 0053 00000000 .long .LASF3
+ 139 0057 02 .uleb128 0x2
+ 140 0058 02 .byte 0x2
+ 141 0059 07 .byte 0x7
+ 142 005a 00000000 .long .LASF4
+ 143 005e 02 .uleb128 0x2
+ 144 005f 04 .byte 0x4
+ 145 0060 07 .byte 0x7
+ 146 0061 00000000 .long .LASF5
+ 147 0065 02 .uleb128 0x2
+ 148 0066 08 .byte 0x8
+ 149 0067 07 .byte 0x7
+ 150 0068 00000000 .long .LASF6
+ 151 006c 05 .uleb128 0x5
+ 152 006d 08 .byte 0x8
+ 153 006e 07 .byte 0x7
+ 154 006f 02 .uleb128 0x2
+ 155 0070 01 .byte 0x1
+ 156 0071 06 .byte 0x6
+ 157 0072 00000000 .long .LASF7
+ 158 0076 02 .uleb128 0x2
+
GAS LISTING /tmp/cckgalP6.s page 5
+
+
+ 159 0077 08 .byte 0x8
+ 160 0078 05 .byte 0x5
+ 161 0079 00000000 .long .LASF8
+ 162 007d 02 .uleb128 0x2
+ 163 007e 04 .byte 0x4
+ 164 007f 04 .byte 0x4
+ 165 0080 00000000 .long .LASF9
+ 166 0084 02 .uleb128 0x2
+ 167 0085 08 .byte 0x8
+ 168 0086 07 .byte 0x7
+ 169 0087 00000000 .long .LASF10
+ 170 008b 02 .uleb128 0x2
+ 171 008c 08 .byte 0x8
+ 172 008d 04 .byte 0x4
+ 173 008e 00000000 .long .LASF11
+ 174 0092 04 .uleb128 0x4
+ 175 0093 00000000 .long .LASF13
+ 176 0097 03 .byte 0x3
+ 177 0098 26 .byte 0x26
+ 178 0099 9D000000 .long 0x9d
+ 179 009d 06 .uleb128 0x6
+ 180 009e 01 .byte 0x1
+ 181 009f 45000000 .long 0x45
+ 182 00a3 AE000000 .long 0xae
+ 183 00a7 07 .uleb128 0x7
+ 184 00a8 6C000000 .long 0x6c
+ 185 00ac 0F .byte 0xf
+ 186 00ad 00 .byte 0x0
+ 187 00ae 04 .uleb128 0x4
+ 188 00af 00000000 .long .LASF14
+ 189 00b3 04 .byte 0x4
+ 190 00b4 3B .byte 0x3b
+ 191 00b5 92000000 .long 0x92
+ 192 00b9 08 .uleb128 0x8
+ 193 00ba 01 .byte 0x1
+ 194 00bb 00000000 .long .LASF18
+ 195 00bf 01 .byte 0x1
+ 196 00c0 24 .byte 0x24
+ 197 00c1 01 .byte 0x1
+ 198 00c2 FB000000 .long 0xfb
+ 199 00c6 00000000 .quad .LFB495
+ 199 00000000
+ 200 00ce 00000000 .quad .LFE495
+ 200 00000000
+ 201 00d6 00000000 .long .LLST0
+ 202 00da FB000000 .long 0xfb
+ 203 00de 09 .uleb128 0x9
+ 204 00df 00000000 .long .LASF15
+ 205 00e3 01 .byte 0x1
+ 206 00e4 27 .byte 0x27
+ 207 00e5 AE000000 .long 0xae
+ 208 00e9 02 .byte 0x2
+ 209 00ea 91 .byte 0x91
+ 210 00eb 50 .sleb128 -48
+ 211 00ec 0A .uleb128 0xa
+ 212 00ed 6F6E6500 .string "one"
+ 213 00f1 01 .byte 0x1
+
GAS LISTING /tmp/cckgalP6.s page 6
+
+
+ 214 00f2 29 .byte 0x29
+ 215 00f3 AE000000 .long 0xae
+ 216 00f7 02 .byte 0x2
+ 217 00f8 91 .byte 0x91
+ 218 00f9 60 .sleb128 -32
+ 219 00fa 00 .byte 0x0
+ 220 00fb 0B .uleb128 0xb
+ 221 00fc AE000000 .long 0xae
+ 222 0100 00 .byte 0x0
+ 223 .section .debug_abbrev
+ 224 0000 01 .uleb128 0x1
+ 225 0001 11 .uleb128 0x11
+ 226 0002 01 .byte 0x1
+ 227 0003 25 .uleb128 0x25
+ 228 0004 0E .uleb128 0xe
+ 229 0005 13 .uleb128 0x13
+ 230 0006 0B .uleb128 0xb
+ 231 0007 03 .uleb128 0x3
+ 232 0008 0E .uleb128 0xe
+ 233 0009 11 .uleb128 0x11
+ 234 000a 01 .uleb128 0x1
+ 235 000b 12 .uleb128 0x12
+ 236 000c 01 .uleb128 0x1
+ 237 000d 10 .uleb128 0x10
+ 238 000e 06 .uleb128 0x6
+ 239 000f 00 .byte 0x0
+ 240 0010 00 .byte 0x0
+ 241 0011 02 .uleb128 0x2
+ 242 0012 24 .uleb128 0x24
+ 243 0013 00 .byte 0x0
+ 244 0014 0B .uleb128 0xb
+ 245 0015 0B .uleb128 0xb
+ 246 0016 3E .uleb128 0x3e
+ 247 0017 0B .uleb128 0xb
+ 248 0018 03 .uleb128 0x3
+ 249 0019 0E .uleb128 0xe
+ 250 001a 00 .byte 0x0
+ 251 001b 00 .byte 0x0
+ 252 001c 03 .uleb128 0x3
+ 253 001d 24 .uleb128 0x24
+ 254 001e 00 .byte 0x0
+ 255 001f 0B .uleb128 0xb
+ 256 0020 0B .uleb128 0xb
+ 257 0021 3E .uleb128 0x3e
+ 258 0022 0B .uleb128 0xb
+ 259 0023 03 .uleb128 0x3
+ 260 0024 08 .uleb128 0x8
+ 261 0025 00 .byte 0x0
+ 262 0026 00 .byte 0x0
+ 263 0027 04 .uleb128 0x4
+ 264 0028 16 .uleb128 0x16
+ 265 0029 00 .byte 0x0
+ 266 002a 03 .uleb128 0x3
+ 267 002b 0E .uleb128 0xe
+ 268 002c 3A .uleb128 0x3a
+ 269 002d 0B .uleb128 0xb
+ 270 002e 3B .uleb128 0x3b
+
GAS LISTING /tmp/cckgalP6.s page 7
+
+
+ 271 002f 0B .uleb128 0xb
+ 272 0030 49 .uleb128 0x49
+ 273 0031 13 .uleb128 0x13
+ 274 0032 00 .byte 0x0
+ 275 0033 00 .byte 0x0
+ 276 0034 05 .uleb128 0x5
+ 277 0035 24 .uleb128 0x24
+ 278 0036 00 .byte 0x0
+ 279 0037 0B .uleb128 0xb
+ 280 0038 0B .uleb128 0xb
+ 281 0039 3E .uleb128 0x3e
+ 282 003a 0B .uleb128 0xb
+ 283 003b 00 .byte 0x0
+ 284 003c 00 .byte 0x0
+ 285 003d 06 .uleb128 0x6
+ 286 003e 01 .uleb128 0x1
+ 287 003f 01 .byte 0x1
+ 288 0040 8742 .uleb128 0x2107
+ 289 0042 0C .uleb128 0xc
+ 290 0043 49 .uleb128 0x49
+ 291 0044 13 .uleb128 0x13
+ 292 0045 01 .uleb128 0x1
+ 293 0046 13 .uleb128 0x13
+ 294 0047 00 .byte 0x0
+ 295 0048 00 .byte 0x0
+ 296 0049 07 .uleb128 0x7
+ 297 004a 21 .uleb128 0x21
+ 298 004b 00 .byte 0x0
+ 299 004c 49 .uleb128 0x49
+ 300 004d 13 .uleb128 0x13
+ 301 004e 2F .uleb128 0x2f
+ 302 004f 0B .uleb128 0xb
+ 303 0050 00 .byte 0x0
+ 304 0051 00 .byte 0x0
+ 305 0052 08 .uleb128 0x8
+ 306 0053 2E .uleb128 0x2e
+ 307 0054 01 .byte 0x1
+ 308 0055 3F .uleb128 0x3f
+ 309 0056 0C .uleb128 0xc
+ 310 0057 03 .uleb128 0x3
+ 311 0058 0E .uleb128 0xe
+ 312 0059 3A .uleb128 0x3a
+ 313 005a 0B .uleb128 0xb
+ 314 005b 3B .uleb128 0x3b
+ 315 005c 0B .uleb128 0xb
+ 316 005d 27 .uleb128 0x27
+ 317 005e 0C .uleb128 0xc
+ 318 005f 49 .uleb128 0x49
+ 319 0060 13 .uleb128 0x13
+ 320 0061 11 .uleb128 0x11
+ 321 0062 01 .uleb128 0x1
+ 322 0063 12 .uleb128 0x12
+ 323 0064 01 .uleb128 0x1
+ 324 0065 40 .uleb128 0x40
+ 325 0066 06 .uleb128 0x6
+ 326 0067 01 .uleb128 0x1
+ 327 0068 13 .uleb128 0x13
+
GAS LISTING /tmp/cckgalP6.s page 8
+
+
+ 328 0069 00 .byte 0x0
+ 329 006a 00 .byte 0x0
+ 330 006b 09 .uleb128 0x9
+ 331 006c 34 .uleb128 0x34
+ 332 006d 00 .byte 0x0
+ 333 006e 03 .uleb128 0x3
+ 334 006f 0E .uleb128 0xe
+ 335 0070 3A .uleb128 0x3a
+ 336 0071 0B .uleb128 0xb
+ 337 0072 3B .uleb128 0x3b
+ 338 0073 0B .uleb128 0xb
+ 339 0074 49 .uleb128 0x49
+ 340 0075 13 .uleb128 0x13
+ 341 0076 02 .uleb128 0x2
+ 342 0077 0A .uleb128 0xa
+ 343 0078 00 .byte 0x0
+ 344 0079 00 .byte 0x0
+ 345 007a 0A .uleb128 0xa
+ 346 007b 34 .uleb128 0x34
+ 347 007c 00 .byte 0x0
+ 348 007d 03 .uleb128 0x3
+ 349 007e 08 .uleb128 0x8
+ 350 007f 3A .uleb128 0x3a
+ 351 0080 0B .uleb128 0xb
+ 352 0081 3B .uleb128 0x3b
+ 353 0082 0B .uleb128 0xb
+ 354 0083 49 .uleb128 0x49
+ 355 0084 13 .uleb128 0x13
+ 356 0085 02 .uleb128 0x2
+ 357 0086 0A .uleb128 0xa
+ 358 0087 00 .byte 0x0
+ 359 0088 00 .byte 0x0
+ 360 0089 0B .uleb128 0xb
+ 361 008a 26 .uleb128 0x26
+ 362 008b 00 .byte 0x0
+ 363 008c 49 .uleb128 0x49
+ 364 008d 13 .uleb128 0x13
+ 365 008e 00 .byte 0x0
+ 366 008f 00 .byte 0x0
+ 367 0090 00 .byte 0x0
+ 368 .section .debug_pubnames,"", at progbits
+ 369 0000 21000000 .long 0x21
+ 370 0004 0200 .value 0x2
+ 371 0006 00000000 .long .Ldebug_info0
+ 372 000a 01010000 .long 0x101
+ 373 000e B9000000 .long 0xb9
+ 374 0012 4B436970 .string "KCipherVectest"
+ 374 68657256
+ 374 65637465
+ 374 737400
+ 375 0021 00000000 .long 0x0
+ 376 .section .debug_aranges,"", at progbits
+ 377 0000 2C000000 .long 0x2c
+ 378 0004 0200 .value 0x2
+ 379 0006 00000000 .long .Ldebug_info0
+ 380 000a 08 .byte 0x8
+ 381 000b 00 .byte 0x0
+
GAS LISTING /tmp/cckgalP6.s page 9
+
+
+ 382 000c 0000 .value 0x0
+ 383 000e 0000 .value 0x0
+ 384 0010 00000000 .quad .Ltext0
+ 384 00000000
+ 385 0018 2E000000 .quad .Letext0-.Ltext0
+ 385 00000000
+ 386 0020 00000000 .quad 0x0
+ 386 00000000
+ 387 0028 00000000 .quad 0x0
+ 387 00000000
+ 388 .section .debug_str,"MS", at progbits,1
+ 389 .LASF8:
+ 390 0000 6C6F6E67 .string "long long int"
+ 390 206C6F6E
+ 390 6720696E
+ 390 7400
+ 391 .LASF17:
+ 392 000e 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+ 392 652F726F
+ 392 6461726D
+ 392 65722F73
+ 392 72615F73
+ 393 .LASF18:
+ 394 0048 4B436970 .string "KCipherVectest"
+ 394 68657256
+ 394 65637465
+ 394 737400
+ 395 .LASF6:
+ 396 0057 6C6F6E67 .string "long unsigned int"
+ 396 20756E73
+ 396 69676E65
+ 396 6420696E
+ 396 7400
+ 397 .LASF10:
+ 398 0069 6C6F6E67 .string "long long unsigned int"
+ 398 206C6F6E
+ 398 6720756E
+ 398 7369676E
+ 398 65642069
+ 399 .LASF12:
+ 400 0080 75696E74 .string "uint8_t"
+ 400 385F7400
+ 401 .LASF16:
+ 402 0088 474E5520 .string "GNU C 4.4.2"
+ 402 4320342E
+ 402 342E3200
+ 403 .LASF3:
+ 404 0094 756E7369 .string "unsigned char"
+ 404 676E6564
+ 404 20636861
+ 404 7200
+ 405 .LASF7:
+ 406 00a2 63686172 .string "char"
+ 406 00
+ 407 .LASF2:
+ 408 00a7 6C6F6E67 .string "long int"
+ 408 20696E74
+
GAS LISTING /tmp/cckgalP6.s page 10
+
+
+ 408 00
+ 409 .LASF11:
+ 410 00b0 646F7562 .string "double"
+ 410 6C6500
+ 411 .LASF4:
+ 412 00b7 73686F72 .string "short unsigned int"
+ 412 7420756E
+ 412 7369676E
+ 412 65642069
+ 412 6E7400
+ 413 .LASF0:
+ 414 00ca 7369676E .string "signed char"
+ 414 65642063
+ 414 68617200
+ 415 .LASF13:
+ 416 00d6 76313238 .string "v128_u8_t"
+ 416 5F75385F
+ 416 7400
+ 417 .LASF14:
+ 418 00e0 43697068 .string "CipherVec"
+ 418 65725665
+ 418 6300
+ 419 .LASF9:
+ 420 00ea 666C6F61 .string "float"
+ 420 7400
+ 421 .LASF15:
+ 422 00f0 7A65726F .string "zero"
+ 422 00
+ 423 .LASF1:
+ 424 00f5 73686F72 .string "short int"
+ 424 7420696E
+ 424 7400
+ 425 .LASF5:
+ 426 00ff 756E7369 .string "unsigned int"
+ 426 676E6564
+ 426 20696E74
+ 426 00
+ 427 .ident "GCC: (GNU) 4.4.2"
+ 428 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/cckgalP6.s page 11
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 compile-test.c
+ /tmp/cckgalP6.s:12 .text:0000000000000000 KCipherVectest
+
+NO UNDEFINED SYMBOLS
diff --git a/libs/krypto/compile-test.vecreg.pic.o.list b/libs/krypto/compile-test.vecreg.pic.o.list
new file mode 100644
index 0000000..edb88a6
--- /dev/null
+++ b/libs/krypto/compile-test.vecreg.pic.o.list
@@ -0,0 +1,592 @@
+GAS LISTING /tmp/ccg1QBek.s page 1
+
+
+ 1 .file "compile-test.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 D7000000 .text
+ 8 0200BA00
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .globl KCipherVecRegtest
+ 11 .type KCipherVecRegtest, @function
+ 12 KCipherVecRegtest:
+ 13 .LFB570:
+ 14 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <cpuid.h>
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <v128.h>
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "ncbi-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "blockcipher-impl.h"
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** const
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec CMEMBER(test) (void)
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** {
+ 15 .loc 1 37 0
+ 16 .cfi_startproc
+
GAS LISTING /tmp/ccg1QBek.s page 2
+
+
+ 17 0000 55 pushq %rbp
+ 18 .LCFI0:
+ 19 .cfi_def_cfa_offset 16
+ 20 0001 4889E5 movq %rsp, %rbp
+ 21 .cfi_offset 6, -16
+ 22 .LCFI1:
+ 23 .cfi_def_cfa_register 6
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #if USEVEC
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec zero = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 24 .loc 1 40 0
+ 25 0004 660F6F05 movdqa .LC0(%rip), %xmm0
+ 25 00000000
+ 26 000c F30F7F45 movdqu %xmm0, -32(%rbp)
+ 26 E0
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec one = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+ 27 .loc 1 42 0
+ 28 0011 660F6F05 movdqa .LC1(%rip), %xmm0
+ 28 00000000
+ 29 0019 F30F7F45 movdqu %xmm0, -16(%rbp)
+ 29 F0
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #else
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec zero = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec one = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #endif
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** return zero + one;
+ 30 .loc 1 49 0
+ 31 001e F30F6F45 movdqu -16(%rbp), %xmm0
+ 31 F0
+ 32 0023 F30F6F4D movdqu -32(%rbp), %xmm1
+ 32 E0
+ 33 0028 660FFCC1 paddb %xmm1, %xmm0
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** }
+ 34 .loc 1 50 0
+ 35 002c C9 leave
+ 36 002d C3 ret
+ 37 .cfi_endproc
+ 38 .LFE570:
+ 39 .size KCipherVecRegtest, .-KCipherVecRegtest
+ 40 .section .rodata
+ 41 .align 16
+ 42 .LC0:
+ 43 0000 00 .byte 0
+ 44 0001 00 .byte 0
+ 45 0002 00 .byte 0
+ 46 0003 00 .byte 0
+ 47 0004 00 .byte 0
+ 48 0005 00 .byte 0
+ 49 0006 00 .byte 0
+ 50 0007 00 .byte 0
+ 51 0008 00 .byte 0
+ 52 0009 00 .byte 0
+ 53 000a 00 .byte 0
+ 54 000b 00 .byte 0
+
GAS LISTING /tmp/ccg1QBek.s page 3
+
+
+ 55 000c 00 .byte 0
+ 56 000d 00 .byte 0
+ 57 000e 00 .byte 0
+ 58 000f 00 .byte 0
+ 59 .align 16
+ 60 .LC1:
+ 61 0010 01 .byte 1
+ 62 0011 01 .byte 1
+ 63 0012 01 .byte 1
+ 64 0013 01 .byte 1
+ 65 0014 01 .byte 1
+ 66 0015 01 .byte 1
+ 67 0016 01 .byte 1
+ 68 0017 01 .byte 1
+ 69 0018 01 .byte 1
+ 70 0019 01 .byte 1
+ 71 001a 01 .byte 1
+ 72 001b 01 .byte 1
+ 73 001c 01 .byte 1
+ 74 001d 01 .byte 1
+ 75 001e 01 .byte 1
+ 76 001f 01 .byte 1
+ 77 .text
+ 78 .Letext0:
+ 79 .section .debug_loc,"", at progbits
+ 80 .Ldebug_loc0:
+ 81 .LLST0:
+ 82 0000 00000000 .quad .LFB570-.Ltext0
+ 82 00000000
+ 83 0008 01000000 .quad .LCFI0-.Ltext0
+ 83 00000000
+ 84 0010 0200 .value 0x2
+ 85 0012 77 .byte 0x77
+ 86 0013 08 .sleb128 8
+ 87 0014 01000000 .quad .LCFI0-.Ltext0
+ 87 00000000
+ 88 001c 04000000 .quad .LCFI1-.Ltext0
+ 88 00000000
+ 89 0024 0200 .value 0x2
+ 90 0026 77 .byte 0x77
+ 91 0027 10 .sleb128 16
+ 92 0028 04000000 .quad .LCFI1-.Ltext0
+ 92 00000000
+ 93 0030 2E000000 .quad .LFE570-.Ltext0
+ 93 00000000
+ 94 0038 0200 .value 0x2
+ 95 003a 76 .byte 0x76
+ 96 003b 10 .sleb128 16
+ 97 003c 00000000 .quad 0x0
+ 97 00000000
+ 98 0044 00000000 .quad 0x0
+ 98 00000000
+ 99 .file 2 "/usr/include/stdint.h"
+ 100 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 101 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 102 .section .debug_info
+ 103 0000 FD000000 .long 0xfd
+
GAS LISTING /tmp/ccg1QBek.s page 4
+
+
+ 104 0004 0200 .value 0x2
+ 105 0006 00000000 .long .Ldebug_abbrev0
+ 106 000a 08 .byte 0x8
+ 107 000b 01 .uleb128 0x1
+ 108 000c 00000000 .long .LASF16
+ 109 0010 01 .byte 0x1
+ 110 0011 00000000 .long .LASF17
+ 111 0015 00000000 .quad .Ltext0
+ 111 00000000
+ 112 001d 00000000 .quad .Letext0
+ 112 00000000
+ 113 0025 00000000 .long .Ldebug_line0
+ 114 0029 02 .uleb128 0x2
+ 115 002a 01 .byte 0x1
+ 116 002b 06 .byte 0x6
+ 117 002c 00000000 .long .LASF0
+ 118 0030 02 .uleb128 0x2
+ 119 0031 02 .byte 0x2
+ 120 0032 05 .byte 0x5
+ 121 0033 00000000 .long .LASF1
+ 122 0037 03 .uleb128 0x3
+ 123 0038 04 .byte 0x4
+ 124 0039 05 .byte 0x5
+ 125 003a 696E7400 .string "int"
+ 126 003e 02 .uleb128 0x2
+ 127 003f 08 .byte 0x8
+ 128 0040 05 .byte 0x5
+ 129 0041 00000000 .long .LASF2
+ 130 0045 04 .uleb128 0x4
+ 131 0046 00000000 .long .LASF12
+ 132 004a 02 .byte 0x2
+ 133 004b 31 .byte 0x31
+ 134 004c 50000000 .long 0x50
+ 135 0050 02 .uleb128 0x2
+ 136 0051 01 .byte 0x1
+ 137 0052 08 .byte 0x8
+ 138 0053 00000000 .long .LASF3
+ 139 0057 02 .uleb128 0x2
+ 140 0058 02 .byte 0x2
+ 141 0059 07 .byte 0x7
+ 142 005a 00000000 .long .LASF4
+ 143 005e 02 .uleb128 0x2
+ 144 005f 04 .byte 0x4
+ 145 0060 07 .byte 0x7
+ 146 0061 00000000 .long .LASF5
+ 147 0065 02 .uleb128 0x2
+ 148 0066 08 .byte 0x8
+ 149 0067 07 .byte 0x7
+ 150 0068 00000000 .long .LASF6
+ 151 006c 05 .uleb128 0x5
+ 152 006d 08 .byte 0x8
+ 153 006e 07 .byte 0x7
+ 154 006f 02 .uleb128 0x2
+ 155 0070 01 .byte 0x1
+ 156 0071 06 .byte 0x6
+ 157 0072 00000000 .long .LASF7
+ 158 0076 02 .uleb128 0x2
+
GAS LISTING /tmp/ccg1QBek.s page 5
+
+
+ 159 0077 08 .byte 0x8
+ 160 0078 05 .byte 0x5
+ 161 0079 00000000 .long .LASF8
+ 162 007d 02 .uleb128 0x2
+ 163 007e 04 .byte 0x4
+ 164 007f 04 .byte 0x4
+ 165 0080 00000000 .long .LASF9
+ 166 0084 02 .uleb128 0x2
+ 167 0085 08 .byte 0x8
+ 168 0086 07 .byte 0x7
+ 169 0087 00000000 .long .LASF10
+ 170 008b 02 .uleb128 0x2
+ 171 008c 08 .byte 0x8
+ 172 008d 04 .byte 0x4
+ 173 008e 00000000 .long .LASF11
+ 174 0092 04 .uleb128 0x4
+ 175 0093 00000000 .long .LASF13
+ 176 0097 03 .byte 0x3
+ 177 0098 26 .byte 0x26
+ 178 0099 9D000000 .long 0x9d
+ 179 009d 06 .uleb128 0x6
+ 180 009e 01 .byte 0x1
+ 181 009f 45000000 .long 0x45
+ 182 00a3 AE000000 .long 0xae
+ 183 00a7 07 .uleb128 0x7
+ 184 00a8 6C000000 .long 0x6c
+ 185 00ac 0F .byte 0xf
+ 186 00ad 00 .byte 0x0
+ 187 00ae 04 .uleb128 0x4
+ 188 00af 00000000 .long .LASF14
+ 189 00b3 04 .byte 0x4
+ 190 00b4 3B .byte 0x3b
+ 191 00b5 92000000 .long 0x92
+ 192 00b9 08 .uleb128 0x8
+ 193 00ba 01 .byte 0x1
+ 194 00bb 00000000 .long .LASF18
+ 195 00bf 01 .byte 0x1
+ 196 00c0 24 .byte 0x24
+ 197 00c1 01 .byte 0x1
+ 198 00c2 FB000000 .long 0xfb
+ 199 00c6 00000000 .quad .LFB570
+ 199 00000000
+ 200 00ce 00000000 .quad .LFE570
+ 200 00000000
+ 201 00d6 00000000 .long .LLST0
+ 202 00da FB000000 .long 0xfb
+ 203 00de 09 .uleb128 0x9
+ 204 00df 00000000 .long .LASF15
+ 205 00e3 01 .byte 0x1
+ 206 00e4 27 .byte 0x27
+ 207 00e5 AE000000 .long 0xae
+ 208 00e9 02 .byte 0x2
+ 209 00ea 91 .byte 0x91
+ 210 00eb 50 .sleb128 -48
+ 211 00ec 0A .uleb128 0xa
+ 212 00ed 6F6E6500 .string "one"
+ 213 00f1 01 .byte 0x1
+
GAS LISTING /tmp/ccg1QBek.s page 6
+
+
+ 214 00f2 29 .byte 0x29
+ 215 00f3 AE000000 .long 0xae
+ 216 00f7 02 .byte 0x2
+ 217 00f8 91 .byte 0x91
+ 218 00f9 60 .sleb128 -32
+ 219 00fa 00 .byte 0x0
+ 220 00fb 0B .uleb128 0xb
+ 221 00fc AE000000 .long 0xae
+ 222 0100 00 .byte 0x0
+ 223 .section .debug_abbrev
+ 224 0000 01 .uleb128 0x1
+ 225 0001 11 .uleb128 0x11
+ 226 0002 01 .byte 0x1
+ 227 0003 25 .uleb128 0x25
+ 228 0004 0E .uleb128 0xe
+ 229 0005 13 .uleb128 0x13
+ 230 0006 0B .uleb128 0xb
+ 231 0007 03 .uleb128 0x3
+ 232 0008 0E .uleb128 0xe
+ 233 0009 11 .uleb128 0x11
+ 234 000a 01 .uleb128 0x1
+ 235 000b 12 .uleb128 0x12
+ 236 000c 01 .uleb128 0x1
+ 237 000d 10 .uleb128 0x10
+ 238 000e 06 .uleb128 0x6
+ 239 000f 00 .byte 0x0
+ 240 0010 00 .byte 0x0
+ 241 0011 02 .uleb128 0x2
+ 242 0012 24 .uleb128 0x24
+ 243 0013 00 .byte 0x0
+ 244 0014 0B .uleb128 0xb
+ 245 0015 0B .uleb128 0xb
+ 246 0016 3E .uleb128 0x3e
+ 247 0017 0B .uleb128 0xb
+ 248 0018 03 .uleb128 0x3
+ 249 0019 0E .uleb128 0xe
+ 250 001a 00 .byte 0x0
+ 251 001b 00 .byte 0x0
+ 252 001c 03 .uleb128 0x3
+ 253 001d 24 .uleb128 0x24
+ 254 001e 00 .byte 0x0
+ 255 001f 0B .uleb128 0xb
+ 256 0020 0B .uleb128 0xb
+ 257 0021 3E .uleb128 0x3e
+ 258 0022 0B .uleb128 0xb
+ 259 0023 03 .uleb128 0x3
+ 260 0024 08 .uleb128 0x8
+ 261 0025 00 .byte 0x0
+ 262 0026 00 .byte 0x0
+ 263 0027 04 .uleb128 0x4
+ 264 0028 16 .uleb128 0x16
+ 265 0029 00 .byte 0x0
+ 266 002a 03 .uleb128 0x3
+ 267 002b 0E .uleb128 0xe
+ 268 002c 3A .uleb128 0x3a
+ 269 002d 0B .uleb128 0xb
+ 270 002e 3B .uleb128 0x3b
+
GAS LISTING /tmp/ccg1QBek.s page 7
+
+
+ 271 002f 0B .uleb128 0xb
+ 272 0030 49 .uleb128 0x49
+ 273 0031 13 .uleb128 0x13
+ 274 0032 00 .byte 0x0
+ 275 0033 00 .byte 0x0
+ 276 0034 05 .uleb128 0x5
+ 277 0035 24 .uleb128 0x24
+ 278 0036 00 .byte 0x0
+ 279 0037 0B .uleb128 0xb
+ 280 0038 0B .uleb128 0xb
+ 281 0039 3E .uleb128 0x3e
+ 282 003a 0B .uleb128 0xb
+ 283 003b 00 .byte 0x0
+ 284 003c 00 .byte 0x0
+ 285 003d 06 .uleb128 0x6
+ 286 003e 01 .uleb128 0x1
+ 287 003f 01 .byte 0x1
+ 288 0040 8742 .uleb128 0x2107
+ 289 0042 0C .uleb128 0xc
+ 290 0043 49 .uleb128 0x49
+ 291 0044 13 .uleb128 0x13
+ 292 0045 01 .uleb128 0x1
+ 293 0046 13 .uleb128 0x13
+ 294 0047 00 .byte 0x0
+ 295 0048 00 .byte 0x0
+ 296 0049 07 .uleb128 0x7
+ 297 004a 21 .uleb128 0x21
+ 298 004b 00 .byte 0x0
+ 299 004c 49 .uleb128 0x49
+ 300 004d 13 .uleb128 0x13
+ 301 004e 2F .uleb128 0x2f
+ 302 004f 0B .uleb128 0xb
+ 303 0050 00 .byte 0x0
+ 304 0051 00 .byte 0x0
+ 305 0052 08 .uleb128 0x8
+ 306 0053 2E .uleb128 0x2e
+ 307 0054 01 .byte 0x1
+ 308 0055 3F .uleb128 0x3f
+ 309 0056 0C .uleb128 0xc
+ 310 0057 03 .uleb128 0x3
+ 311 0058 0E .uleb128 0xe
+ 312 0059 3A .uleb128 0x3a
+ 313 005a 0B .uleb128 0xb
+ 314 005b 3B .uleb128 0x3b
+ 315 005c 0B .uleb128 0xb
+ 316 005d 27 .uleb128 0x27
+ 317 005e 0C .uleb128 0xc
+ 318 005f 49 .uleb128 0x49
+ 319 0060 13 .uleb128 0x13
+ 320 0061 11 .uleb128 0x11
+ 321 0062 01 .uleb128 0x1
+ 322 0063 12 .uleb128 0x12
+ 323 0064 01 .uleb128 0x1
+ 324 0065 40 .uleb128 0x40
+ 325 0066 06 .uleb128 0x6
+ 326 0067 01 .uleb128 0x1
+ 327 0068 13 .uleb128 0x13
+
GAS LISTING /tmp/ccg1QBek.s page 8
+
+
+ 328 0069 00 .byte 0x0
+ 329 006a 00 .byte 0x0
+ 330 006b 09 .uleb128 0x9
+ 331 006c 34 .uleb128 0x34
+ 332 006d 00 .byte 0x0
+ 333 006e 03 .uleb128 0x3
+ 334 006f 0E .uleb128 0xe
+ 335 0070 3A .uleb128 0x3a
+ 336 0071 0B .uleb128 0xb
+ 337 0072 3B .uleb128 0x3b
+ 338 0073 0B .uleb128 0xb
+ 339 0074 49 .uleb128 0x49
+ 340 0075 13 .uleb128 0x13
+ 341 0076 02 .uleb128 0x2
+ 342 0077 0A .uleb128 0xa
+ 343 0078 00 .byte 0x0
+ 344 0079 00 .byte 0x0
+ 345 007a 0A .uleb128 0xa
+ 346 007b 34 .uleb128 0x34
+ 347 007c 00 .byte 0x0
+ 348 007d 03 .uleb128 0x3
+ 349 007e 08 .uleb128 0x8
+ 350 007f 3A .uleb128 0x3a
+ 351 0080 0B .uleb128 0xb
+ 352 0081 3B .uleb128 0x3b
+ 353 0082 0B .uleb128 0xb
+ 354 0083 49 .uleb128 0x49
+ 355 0084 13 .uleb128 0x13
+ 356 0085 02 .uleb128 0x2
+ 357 0086 0A .uleb128 0xa
+ 358 0087 00 .byte 0x0
+ 359 0088 00 .byte 0x0
+ 360 0089 0B .uleb128 0xb
+ 361 008a 26 .uleb128 0x26
+ 362 008b 00 .byte 0x0
+ 363 008c 49 .uleb128 0x49
+ 364 008d 13 .uleb128 0x13
+ 365 008e 00 .byte 0x0
+ 366 008f 00 .byte 0x0
+ 367 0090 00 .byte 0x0
+ 368 .section .debug_pubnames,"", at progbits
+ 369 0000 24000000 .long 0x24
+ 370 0004 0200 .value 0x2
+ 371 0006 00000000 .long .Ldebug_info0
+ 372 000a 01010000 .long 0x101
+ 373 000e B9000000 .long 0xb9
+ 374 0012 4B436970 .string "KCipherVecRegtest"
+ 374 68657256
+ 374 65635265
+ 374 67746573
+ 374 7400
+ 375 0024 00000000 .long 0x0
+ 376 .section .debug_aranges,"", at progbits
+ 377 0000 2C000000 .long 0x2c
+ 378 0004 0200 .value 0x2
+ 379 0006 00000000 .long .Ldebug_info0
+ 380 000a 08 .byte 0x8
+
GAS LISTING /tmp/ccg1QBek.s page 9
+
+
+ 381 000b 00 .byte 0x0
+ 382 000c 0000 .value 0x0
+ 383 000e 0000 .value 0x0
+ 384 0010 00000000 .quad .Ltext0
+ 384 00000000
+ 385 0018 2E000000 .quad .Letext0-.Ltext0
+ 385 00000000
+ 386 0020 00000000 .quad 0x0
+ 386 00000000
+ 387 0028 00000000 .quad 0x0
+ 387 00000000
+ 388 .section .debug_str,"MS", at progbits,1
+ 389 .LASF8:
+ 390 0000 6C6F6E67 .string "long long int"
+ 390 206C6F6E
+ 390 6720696E
+ 390 7400
+ 391 .LASF17:
+ 392 000e 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+ 392 652F726F
+ 392 6461726D
+ 392 65722F73
+ 392 72615F73
+ 393 .LASF5:
+ 394 0048 756E7369 .string "unsigned int"
+ 394 676E6564
+ 394 20696E74
+ 394 00
+ 395 .LASF6:
+ 396 0055 6C6F6E67 .string "long unsigned int"
+ 396 20756E73
+ 396 69676E65
+ 396 6420696E
+ 396 7400
+ 397 .LASF10:
+ 398 0067 6C6F6E67 .string "long long unsigned int"
+ 398 206C6F6E
+ 398 6720756E
+ 398 7369676E
+ 398 65642069
+ 399 .LASF12:
+ 400 007e 75696E74 .string "uint8_t"
+ 400 385F7400
+ 401 .LASF16:
+ 402 0086 474E5520 .string "GNU C 4.4.2"
+ 402 4320342E
+ 402 342E3200
+ 403 .LASF3:
+ 404 0092 756E7369 .string "unsigned char"
+ 404 676E6564
+ 404 20636861
+ 404 7200
+ 405 .LASF7:
+ 406 00a0 63686172 .string "char"
+ 406 00
+ 407 .LASF2:
+ 408 00a5 6C6F6E67 .string "long int"
+
GAS LISTING /tmp/ccg1QBek.s page 10
+
+
+ 408 20696E74
+ 408 00
+ 409 .LASF11:
+ 410 00ae 646F7562 .string "double"
+ 410 6C6500
+ 411 .LASF18:
+ 412 00b5 4B436970 .string "KCipherVecRegtest"
+ 412 68657256
+ 412 65635265
+ 412 67746573
+ 412 7400
+ 413 .LASF4:
+ 414 00c7 73686F72 .string "short unsigned int"
+ 414 7420756E
+ 414 7369676E
+ 414 65642069
+ 414 6E7400
+ 415 .LASF0:
+ 416 00da 7369676E .string "signed char"
+ 416 65642063
+ 416 68617200
+ 417 .LASF13:
+ 418 00e6 76313238 .string "v128_u8_t"
+ 418 5F75385F
+ 418 7400
+ 419 .LASF14:
+ 420 00f0 43697068 .string "CipherVec"
+ 420 65725665
+ 420 6300
+ 421 .LASF9:
+ 422 00fa 666C6F61 .string "float"
+ 422 7400
+ 423 .LASF15:
+ 424 0100 7A65726F .string "zero"
+ 424 00
+ 425 .LASF1:
+ 426 0105 73686F72 .string "short int"
+ 426 7420696E
+ 426 7400
+ 427 .ident "GCC: (GNU) 4.4.2"
+ 428 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccg1QBek.s page 11
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 compile-test.c
+ /tmp/ccg1QBek.s:12 .text:0000000000000000 KCipherVecRegtest
+
+NO UNDEFINED SYMBOLS
diff --git a/libs/krypto/csprng.c b/libs/krypto/csprng.c
new file mode 100644
index 0000000..4ee747b
--- /dev/null
+++ b/libs/krypto/csprng.c
@@ -0,0 +1,163 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#include <krypto/extern.h>
+
+#include <krypto/rng.h>
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <klib/refcount.h>
+
+#include <sysalloc.h>
+
+#include <openssl/rand.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+typedef KRng KCSPRng;
+
+#define KRNG_IMPL KCSPRng
+#include <krypto/rng-impl.h>
+
+
+
+static
+rc_t CC KCSPRngDestroy (KCSPRng * self)
+{
+ free (self);
+ return 0;
+}
+
+static
+rc_t CC KCSPRngSeed (KRng * self)
+{
+ rc_t rc;
+ uint8_t buff [16];
+
+ if (self == NULL)
+ return RC (rcKrypto, rcRng, rcWriting, rcSelf, rcNull);
+
+ /* get some system entropy */
+ rc = KRngSysEntropy (self, buff, sizeof (buff));
+ if (rc)
+ return rc;
+
+ RAND_seed (buff, sizeof (buff));
+
+ return 0;
+}
+
+static
+rc_t CC KCSPRngReseed (KRng * self, const void * buffer_,
+ size_t buff_size)
+{
+ const char * buffer;
+ rc_t rc;
+ int32_t ix;
+ uint8_t buff [256];
+
+ if (self == NULL)
+ return RC (rcKrypto, rcRng, rcUpdating, rcSelf, rcNull);
+
+ if (((buffer = buffer_) == NULL) && (buff_size != 0))
+ return RC (rcKrypto, rcRng, rcUpdating, rcParam, rcNull);
+
+ rc = KRngSysEntropy (self, buff, 16);
+ if (rc)
+ return rc;
+
+ if (buffer)
+ for (ix = (buff_size + sizeof (buff) - 1)/sizeof (buff);
+ ix > 0;
+ (ix -= sizeof (buff)),
+ (buff_size -= sizeof(buff)),
+ (buffer += sizeof (buff)))
+ {
+ int32_t jx = (buff_size>sizeof (buff))?sizeof(buff):buff_size;
+ while (--jx > 0)
+ buff[jx] ^= buffer[jx];
+ }
+
+ RAND_add (buffer, buff_size, 1); /* what is that entropy supposed to do? */
+
+ return 0;
+}
+
+static
+rc_t CC KCSPRngRead (const KCSPRng * self, void * buffer, uint32_t bsize, uint32_t * num_read)
+{
+ int ret;
+
+ ret = RAND_bytes (buffer, bsize);
+ if (ret == -1)
+ {
+ *num_read = 0;
+ return RC (rcKrypto, rcRng, rcReading, rcSelf, rcInsufficient);
+ }
+ *num_read = bsize;
+ return 0;
+}
+
+static const
+KRng_vt_v1 vt =
+{
+ 1, 0,
+
+ /* start minor version == 0 */
+ KCSPRngDestroy,
+ KCSPRngSeed,
+ KCSPRngReseed,
+ KCSPRngRead
+ /* end minor version == 0 */
+};
+
+LIB_EXPORT rc_t CC KCSPRngMake (KRng ** pself)
+{
+ KCSPRng * self;
+ rc_t rc;
+
+ if (pself == NULL)
+ return RC (rcRuntime, 0, rcConstructing, rcSelf, rcNull);
+ else
+ {
+ *pself = NULL;
+
+ self = malloc (sizeof (*self));
+ if (self == NULL)
+ return RC (rcRuntime, 0, rcConstructing, rcMemory, rcExhausted);
+
+ else
+ {
+ rc = KRngInit (self, (union KRng_vt*)&vt, "KCSPRng");
+ *pself = self;
+ return 0;
+ }
+ }
+ return rc;
+}
diff --git a/libs/krypto/encfile-priv.h b/libs/krypto/encfile-priv.h
new file mode 100644
index 0000000..8061508
--- /dev/null
+++ b/libs/krypto/encfile-priv.h
@@ -0,0 +1,163 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#ifndef _h_krypto_encfile_priv_libs_
+#define _h_krypto_encfile_priv_libs_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ----------------------------------------------------------------------
+ * Offset conversions between encrypted file offset, decrypted file offset
+ * and block ID and block offset
+ */
+
+/* -----
+ * A data block within the encrypted file may not divide nicely by the size of
+ * its greatest alignment issue. That is there is currently a uint64_t within
+ * the KEncFileKey forcing 8-byte alignment by default but the whole of the
+ * size of KEncFileKey plus the size of the KEncFileData plus the size of
+ * the KEncFileCRC is not divisible by 8 so it can't be treated as a single
+ * structure for the puroses of using the sizeof() operator.
+ *
+ * If the size of the header, block or footer are modified in the future
+ * care should be take to retain accuracy of the new versions of these
+ * functions.
+ */
+
+static __inline__ uint64_t BlockId_to_EncryptedPos (uint64_t block_id)
+{
+ /* the whole block structure is not divisible by 8
+ * so this is not a simple multiply by the sizeof KEncFileBlock
+ */
+ return (sizeof (KEncFileHeader) + block_id * sizeof (KEncFileBlock));
+}
+
+
+static __inline__ uint64_t BlockId_to_DecryptedPos (uint64_t block_id)
+{
+ /* the simplest conversion as its a simple multiply */
+ return (block_id * sizeof (KEncFileData));
+}
+
+
+/* -----
+ * when converting from file offsets to block ids we effectively have a
+ * quotient and a remainder. The block id is the quotient and the
+ * offset within the block is the remainder. We use lldiv not ldiv as we
+ * are required to work on both 32 and 64 bit machines where long might
+ * be 32 bits or it might be 64 bits. If long long is 128 we willingly
+ * sacrifice efficiency for accuracy.
+ */
+static __inline__
+uint64_t DecryptedPos_to_BlockId (uint64_t dec_offset, uint32_t * poffset)
+{
+ if (poffset)
+ *poffset = dec_offset % sizeof (KEncFileData);
+ return dec_offset / sizeof (KEncFileData);
+}
+
+static __inline__
+uint64_t EncryptedPos_to_BlockId (uint64_t enc_offset, uint32_t * poffset,
+ bool * in_block)
+{
+ uint64_t block_id;
+
+ if (enc_offset < sizeof (KEncFileHeader))
+ {
+ if (poffset)
+ *poffset = 0;
+ if (in_block)
+ *in_block = false;
+ block_id = 0;
+ }
+ else
+ {
+ uint64_t offset;
+
+ enc_offset -= sizeof (KEncFileHeader);
+ block_id = enc_offset / sizeof (KEncFileBlock);
+ offset = enc_offset % sizeof (KEncFileBlock);
+
+ if (offset <= sizeof(KEncFileKey))
+ {
+ if (poffset)
+ *poffset = 0;
+ if (in_block)
+ *in_block = false;
+ }
+ else
+ {
+ offset -= sizeof(KEncFileKey);
+
+ if (offset >= sizeof(KEncFileData))
+ {
+ if (poffset)
+ *poffset = 0;
+ if (in_block)
+ *in_block = false;
+ }
+ else
+ {
+ if (poffset)
+ *poffset = offset;
+ if (in_block)
+ *in_block = true;
+ }
+ }
+ }
+ return block_id;
+}
+
+struct KFile;
+struct KKey;
+
+KRYPTO_EXTERN rc_t CC KEncFileWriteHeader (struct KFile * self);
+KRYPTO_EXTERN rc_t CC KEncFileWriteHeader_v1 (struct KFile * self);
+KRYPTO_EXTERN rc_t CC KEncFileWriteHeader_v2 (struct KFile * self);
+KRYPTO_EXTERN rc_t CC KEncFileMakeWriteBlock (struct KFile ** pself,
+ struct KFile * encrypted,
+ const struct KKey * key);
+
+KRYPTO_EXTERN rc_t CC KEncFileMakeBlock_v2 (struct KFile ** pself,
+ struct KFile * encrypted,
+ const struct KKey * key);
+
+
+#if 0
+#if USE_UPDATE_V1
+#define KEncFileWriteHeader KEncFileWriteHeader_v1
+#else
+#define KEncFileWriteHeader KEncFileWriteHeader_v2
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_encfile_priv_libs_ */
+
+
diff --git a/libs/krypto/encfile.c b/libs/krypto/encfile.c
new file mode 100644
index 0000000..1c0a970
--- /dev/null
+++ b/libs/krypto/encfile.c
@@ -0,0 +1,2122 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <krypto/encfile.h>
+#include <krypto/encfile-priv.h>
+#include <krypto/key.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/cipher.h>
+#include "aes-priv.h"
+#include "encfile-priv.h"
+
+#include <klib/rc.h>
+#include <klib/checksum.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/debug.h>
+#include <klib/vector.h>
+#include <klib/status.h>
+#include <kfs/file.h>
+
+#include <sysalloc.h>
+
+#include <byteswap.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+#include <klib/out.h>
+
+#define USE_READ_V1 false
+#define USE_WRITE_V1 false
+#define USE_UPDATE_V1 false
+#define USE_BLOCK_V1 false
+/* KReencFile and KEncryptFile need to use update v1 as it is different */
+#define USE_VALIDATE_V1 false
+#define USE_ISENC_V1 false
+
+#define ENABLE_V2 true
+
+
+/* ----------------------------------------------------------------------
+ * KEncFileV1
+ * Base object class for the encryption, decryption and validation of
+ * the file format defined above
+ */
+typedef struct KEncFileV1 KEncFileV1;
+#define KFILE_IMPL struct KEncFileV1
+#include <kfs/impl.h>
+
+
+#include "encfile-priv.h"
+
+/* ----------
+ * BufferCalcMD5
+ * Generate the MD5 digest for a buffer
+ */
+static
+void BufferCalcMD5 (const void * buffer, size_t size, uint8_t digest [16])
+{
+ MD5State state;
+
+ assert (buffer);
+ assert (size);
+ assert (digest);
+
+ MD5StateInit (&state);
+ MD5StateAppend (&state, buffer, size);
+ MD5StateFinish (&state, digest);
+}
+
+#if 0
+/* ----------------------------------------------------------------------
+ * Offset conversions between encrypted file offset, decrypted file offset
+ * and block ID and block offset
+ */
+
+/* -----
+ * A data block within the encrypted file may not divide nicely by the size of
+ * its greatest alignment issue. That is there is currently a uint64_t within
+ * the KEncFileKey forcing 8-byte alignment by default but the whole of the
+ * size of KEncFileKey plus the sizze of the KEncFileData plus the size of
+ * the KEncFileCRC is not divisible by 8 so it can't be treated as a single
+ * structure for the puroses of using the sizeof() operator.
+ *
+ * If the size of the header, block or footer are modified in the future
+ * care should be take to retain accuracy of the new versions of these
+ * functions.
+ */
+
+static __inline__ uint64_t BlockId_to_EncryptedPos (uint64_t block_id)
+{
+ /* the whole block structure is not divisible by 8
+ * so this is not a simple multiply by the sizeof KEncFileBlock
+ */
+ return (sizeof (KEncFileHeader) + block_id * sizeof (KEncFileBlock));
+}
+
+
+static __inline__ uint64_t BlockId_to_DecryptedPos (uint64_t block_id)
+{
+ /* the simplest conversion as its a simple multiply */
+ return (block_id * sizeof (KEncFileData));
+}
+
+
+/* -----
+ * when converting from file offsets to block ids we effectively have a
+ * quotient and a remainder. The block id is the quotient and the
+ * offset within the block is the remainder. We use lldiv not ldiv as we
+ * are required to work on both 32 and 64 bit machines where long might
+ * be 32 bits or it might be 64 bits. If long long is 128 we willingly
+ * sacrifice efficiency for accuracy.
+ */
+static __inline__
+uint64_t DecryptedPos_to_BlockId (uint64_t dec_offset, uint32_t * poffset)
+{
+ if (poffset)
+ *poffset = dec_offset % sizeof (KEncFileData);
+ return dec_offset / sizeof (KEncFileData);
+}
+
+/* not so easy - fix this if needed... */
+#if 0
+static
+uint64_t EncryptedPos_to_BlockId (uint64_t enc_offset, uint32_t * poffset)
+{
+ uint64_t block_id;
+
+ if (enc_offset < sizeof (KEncFileHeader))
+ {
+ if (poffset)
+ *poffset = 0;
+ block_id = 0;
+ }
+ else
+ {
+ uint64_t offset;
+
+ enc_offset -= sizeof (KEncFileHeader);
+ block_id = enc_offset / sizeof (KEncFileBlock);
+ offset = enc_offset % sizeof (KEncFileBlock);
+
+ if (offset <= sizeof(KEncFileKey))
+ offset = 0;
+ else
+ {
+ offset -= sizeof(KEncFileKey);
+
+ if (offset >= sizeof(KEncFileData))
+ {
+ ++block_id;
+ offset = 0;
+ }
+ }
+
+ if (poffset)
+ *poffset = offset;
+ }
+ return block_id;
+}
+#endif
+#endif
+
+typedef struct KEncFileCiphers KEncFileCiphers;
+struct KEncFileCiphers
+{
+ KCipher * master;
+ KCipher * block;
+};
+
+typedef uint8_t KEncFileIVec [16];
+/* -----
+ */
+struct KEncFileV1
+{
+ KFile dad; /* base class */
+ KFile * encrypted; /* encrypted file as a KFile */
+ KEncFileCiphers ciphers;
+ KEncFileBlock block; /* */
+ uint64_t encrypted_max; /* highest read/written point in the encrypted file */
+ KEncFileFooter foot; /* contains rcrchecksum and blockcount */
+#if ENABLE_V2
+ KEncFileVersion version;
+#endif
+ bool dirty; /* data written but not flushed */
+ bool bswap;
+ bool eof;
+ bool seekable;
+ bool written;
+ bool swarm;
+};
+
+
+/* ----------------------------------------------------------------------
+ * Buffer - just some part of the encrypted file read or written
+ *
+ * these functions exist to hide the potential multiple calls needed
+ * if the KFileRead or KFileWrite called on the encrypted file break up
+ * the requested amount into partial reads or writes
+ */
+
+/* ----------
+ * BufferRead
+ * Fill a buffer with a requested number of bytes from the encrypted file.
+ * Read either the requested number of bytes or up through EOF.
+ * The caller has to handle an EOF shorted buffer.
+ */
+static
+rc_t KEncFileV1BufferRead (const KEncFileV1 * cself, uint64_t pos, void * buffer,
+ size_t bsize, size_t * pnum_read)
+{
+ KEncFileV1 * self; /* for mutable fields */
+ uint8_t * bbuffer; /* void pointer made to a byyte pointer */
+ rc_t rc;
+
+ assert (cself);
+ assert (buffer);
+ assert (pnum_read);
+
+ *pnum_read = 0;
+
+ self = (KEncFileV1*)cself; /* to hit mutable fields */
+ bbuffer = buffer; /* convert to a pointer of sized target */
+
+ /* we want to read a full requested size if possible so keep trying if we
+ * haven't read enough yet.
+ * We can quit early only if EOF (i.e. read 0 bytes.
+ */
+ rc = KFileReadAll (self->encrypted, pos, buffer, bsize, pnum_read);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "error reading position '$(P)' in encrypted file",
+ "P=%lu", pos));
+
+ else if (self->encrypted_max < pos)
+ self->encrypted_max = pos;
+
+ return rc;
+}
+
+
+/* ----------
+ * BufferWrite
+ * Write a buffer of requested size out to the encrypted file.
+ * return the number of bytes successfully written
+ */
+static
+rc_t KEncFileV1BufferWrite (KEncFileV1 * self, uint64_t pos, const void * buffer,
+ size_t bsize, size_t * pnum_writ)
+{
+ rc_t rc;
+
+ rc = KFileWriteAll (self->encrypted, pos, buffer, bsize, pnum_writ);
+ if ((rc == 0) && (self->encrypted_max < pos))
+ self->encrypted_max = pos;
+
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * operations on KEncFileHeader
+ *
+ * The header only needs to be read and validated or written we need not
+ * reatian within the KEncFile object any information about the header in
+ * the initial version of this file format.
+ */
+
+/* -----
+ * the first eight bytes of the file are two four byte strings
+ * The first is a common "NCBI"
+ * The second is the format specific "nenc"
+ */
+static const KEncFileSig KEncFileSignature = "NCBInenc";
+
+/* -----
+ * the common constant used throughout the project to check the byte order
+ * as written by the system which created the file
+ */
+/* enum fails to handle these due to integer overflow */
+
+#define eByteOrderTag (0x05031988)
+#define eByteOrderReverse (0x88190305)
+
+/* ----
+ * Not unexpectedly the first version of this file will be "1"
+ */
+#if ENABLE_V2
+
+#define eCurrentVersion (0x00000002)
+#define eCurrentVersionReverse (0x02000000)
+
+static
+const KEncFileHeader const_header_v1
+= { "NCBInenc", eByteOrderTag, 0x00000001 };
+
+static
+const KEncFileHeader const_bswap_header_v1
+= { "NCBInenc", eByteOrderReverse, 0x01000000 };
+
+#else
+
+#define eCurrentVersion (0x00000001)
+#define eCurrentVersionReverse (0x01000000)
+
+#endif
+
+static
+const KEncFileHeader const_header
+= { "NCBInenc", eByteOrderTag, eCurrentVersion };
+
+static
+const KEncFileHeader const_bswap_header
+= { "NCBInenc", eByteOrderReverse, eCurrentVersionReverse };
+
+
+/* ----------
+ * HeaderRead
+ * Read the header of an encrypted file and validate it.
+ */
+static
+rc_t KEncFileV1HeaderRead (KEncFileV1 * self)
+{
+ KEncFileHeader header;
+ size_t num_read;
+ rc_t rc;
+
+ assert (self);
+
+ rc = KEncFileV1BufferRead (self, 0, &header, sizeof (header), &num_read);
+ if (rc)
+ return rc;
+
+ if (num_read != sizeof (header))
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcTooShort);
+ PLOGERR (klogErr,
+ (klogErr, rc, "error reading full header of encrypted "
+ "file wanted '$(S)' got '$(N); bytes read", "S=%u,N=%u",
+ sizeof (header), num_read));
+ return rc;
+ }
+
+ /* expected is encrypted on a system of the same endianess */
+ if (memcmp (&header, &const_header, sizeof (header)) == 0)
+ {
+ self->bswap = false;
+#if ENABLE_V2
+ self->version = eCurrentVersion;
+#endif
+ return 0;
+ }
+
+ /* next most likely is encrypted on a machine of opposite endianess */
+ if (memcmp (&header, &const_bswap_header, sizeof (header)) == 0)
+ {
+ self->bswap = true;
+#if ENABLE_V2
+ self->version = eCurrentVersion;
+#endif
+ return 0;
+ }
+
+#if ENABLE_V2
+ if (memcmp (&header, &const_header_v1, sizeof (header)) == 0)
+ {
+ self->bswap = false;
+ self->version = 1;
+ return 0;
+ }
+
+ /* next most likely is encrypted on a machine of opposite endianess */
+ if (memcmp (&header, &const_bswap_header_v1, sizeof (header)) == 0)
+ {
+ self->bswap = true;
+ self->version = 1;
+ return 0;
+ }
+#endif
+
+ /* okay it's a "bad" header, so figure out why */
+ if (memcmp (&header, &const_header, sizeof (header.file_sig)) != 0)
+ {
+ rc = RC (rcKrypto, rcFile, rcReading, rcHeader, rcInvalid);
+ LOGERR (klogErr, rc, "file is not the NCBI encrypted file format");
+ /* if this fails the rest doesn't matter */
+ return rc;
+ }
+
+ switch (header.byte_order)
+ {
+ default:
+ rc = RC (rcFS, rcFile, rcConstructing, rcByteOrder, rcInvalid);
+ PLOGERR (klogErr,
+ (klogErr, rc, "invalid byte order flag '$(F); in "
+ "encrypted file", "F=%X", header.byte_order));
+ /* we don't return to possibly log other version errors */
+ break;
+ case eByteOrderReverse:
+ case eByteOrderTag:
+ break;
+ }
+
+ switch (header.version)
+ {
+ default:
+ rc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcBadVersion);
+ PLOGERR (klogErr,
+ (klogErr, rc, "can not decrypt version '$(V)'",
+ "V=%u", header.version));
+ break;
+
+ case 1:
+#if ENABLE_V2
+ case 2:
+#endif
+ break;
+ }
+ return rc;
+}
+
+
+/* -----
+ * HeaderWrite
+ *
+ * build a ram copy of the header and write it to the file
+ */
+static
+rc_t KEncFileV1HeaderWrite (KEncFileV1 * self)
+{
+ size_t num_writ;
+ rc_t rc;
+
+ rc = KEncFileV1BufferWrite (self, 0, &const_header, sizeof (const_header),
+ &num_writ);
+ if (rc == 0)
+ {
+ if (num_writ != sizeof (const_header))
+ rc = RC (rcFS, rcFile, rcWriting, rcHeader, rcInsufficient);
+ }
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KEncFileV1WriteHeader_v1 (KFile * self)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcFile, rcWriting, rcSelf, rcNull);
+ return KEncFileV1HeaderWrite ((KEncFileV1*)self);
+}
+
+
+/* ----------------------------------------------------------------------
+ * operations on KEncFileFooter
+ */
+
+/* ----------
+ * Validate
+ * we expect to read a Footer when we expect a Block so we validate in RAM
+ * without a Read
+ *
+ * we're just comparing the values in the footer against expected values
+ */
+static
+rc_t KEncFileV1FooterValidate (const KEncFileV1 * self,
+ uint64_t block_count, uint64_t crc_checksum)
+{
+ rc_t rc1 = 0, rc2 = 0;
+
+ if (self->foot.block_count != block_count)
+ {
+ rc2 = RC (rcKrypto, rcFile, rcValidating, rcFile, rcCorrupt);
+ LOGERR (klogErr, rc1, "bad block count in encrypted file footer");
+ }
+ if ((self->foot.crc_checksum != crc_checksum)
+#if ENABLE_V2
+ &&((crc_checksum != 0) || (self->version == 1))
+#endif
+ )
+ {
+ rc1 = RC (rcKrypto, rcFile, rcValidating, rcChecksum, rcCorrupt);
+ LOGERR (klogErr, rc2, "bad crc checksum in encrypted file footer");
+ }
+ return (rc1 ? rc1 : rc2);
+}
+
+
+/* ----------
+ * Write
+ * when we write a footer we write from the values in the object. They
+ * are stored in the same object format as the footer so its very simple
+ */
+static
+rc_t KEncFileV1FooterWrite (KEncFileV1 * self)
+{
+ KEncFileFooter foot;
+ uint64_t offset;
+ size_t num_writ;
+ rc_t rc;
+
+ memcpy (&foot, &self->foot, sizeof (foot));
+ if (self->bswap)
+ {
+ foot.block_count = bswap_64 (foot.block_count);
+ foot.crc_checksum = bswap_64 (foot.crc_checksum);
+ }
+
+ offset = BlockId_to_EncryptedPos (self->foot.block_count);
+
+/* assert ((self->encrypted_max == offset) || */
+/* (self->encrypted_max + sizeof(self->foot) == offset)); */
+
+ rc = KEncFileV1BufferWrite (self, offset, &foot, sizeof (foot),
+ &num_writ);
+ if (rc == 0)
+ {
+ if (num_writ != sizeof (foot))
+ rc = RC (rcFS, rcFile, rcWriting, rcFile, rcInsufficient);
+ }
+ return rc;
+}
+
+
+/* ----------
+ * IvecInit
+ * create the ivec for a given block
+ * done in a function to ensure decrypt and encrypt use the same code to
+ * generate this. Anything used to create this has to be available to
+ * code that doesn't know the content of the data or the state of the file
+ * beyond the location of the block with in the file.
+ *
+ * This is definitely over-kill using the MD5.
+ */
+static
+void KEncFileV1IVecInit (const KEncFileV1 * self, KEncFileIVec ivec)
+{
+ BufferCalcMD5 (&self->block.id, sizeof self->block.id, ivec);
+}
+
+
+/* ----------
+ * BlockEncrypt
+ */
+
+static
+rc_t KEncFileV1BlockEncrypt (KEncFileV1 * self, KEncFileBlock * e)
+{
+ SHA256State state;
+ uint64_t id;
+ uint16_t valid;
+ uint16_t saved_valid;
+ KEncFileCRC crc;
+ uint8_t ivec [16];
+ rc_t rc;
+
+ assert (self);
+ assert (e);
+
+ /*
+ * First we finish preparing the two ciphers by creating the block
+ * user key out of the first part of the data and the shared Initialization
+ * vector for Chained Block Cipher mode encryption out of the block id
+ *
+ * create the initialization vector for this block
+ */
+ KEncFileV1IVecInit (self, ivec);
+
+ /*
+ * set the ivec for both the master and data block ciphers
+ */
+ rc = KCipherSetEncryptIVec (self->ciphers.master, ivec);
+ if (rc)
+ return rc;
+
+ rc = KCipherSetEncryptIVec (self->ciphers.block, ivec);
+ if (rc)
+ return rc;
+
+ /*
+ * create the block user key out of the first 4kb of data and the block id
+ */
+ saved_valid = valid = self->block.u.valid;
+ id = self->block.id;
+
+ SHA256StateInit (&state);
+ SHA256StateAppend (&state, self->block.data,
+ valid > 4096 ? 4096 : valid);
+ SHA256StateAppend (&state, &id, sizeof (id));
+ SHA256StateFinish (&state, self->block.key);
+
+ /*
+ * create the block key schedule out of the block user key
+ */
+ rc = KCipherSetEncryptKey (self->ciphers.block, self->block.key,
+ sizeof self->block.key);
+ if (rc)
+ return rc;
+
+ /*
+ * Salt the block using the randomish user key to randomly select
+ * data from the valid data.
+ *
+ * This will cover the data portion of the block past the last valid
+ * byte.
+ *
+ * NOTE we are accessing a byte array as a word array.
+ *
+ * NOTE we are using the array named data to access data beyond it's end.
+ */
+ {
+ uint16_t * pw;
+ unsigned int windex;
+ unsigned int rindex;
+ size_t bindex;
+
+ pw = (uint16_t*)self->block.key;
+ windex = 0;
+
+ for (bindex = valid;
+ bindex < sizeof self->block.data + sizeof self->block.u;
+ ++ bindex)
+ {
+ /* this goes beyond the end of the data array by design */
+ rindex = (size_t)pw[windex];
+ rindex %= bindex;
+
+ self->block.data[bindex] = self->block.data[rindex];
+
+ ++rindex;
+ if (rindex >= sizeof self->block.key / sizeof *pw)
+ rindex = 0;
+ }
+ }
+
+ /*
+ * If we are modifying a block created on a system with a different default
+ * Endian choice we'll need to byte swap the block id and the block valid
+ * count
+ */
+ if (self->bswap)
+ {
+ id = bswap_64 (id);
+ valid = bswap_16 (valid);
+ }
+
+
+ if (saved_valid == sizeof self->block.data)
+ self->block.u.valid |= valid;
+ else
+ self->block.u.valid = valid;
+
+ e->id = id;
+
+ /*
+ * encrypt the block user key into the buffer
+ */
+ rc = KCipherEncryptCBC (self->ciphers.master, self->block.key, e->key,
+ sizeof (self->block.key) / sizeof (ivec));
+ if (rc)
+ return rc;
+
+ /*
+ * encrypt the data, offset and valid values
+ */
+ rc = KCipherEncryptCBC (self->ciphers.block,
+ self->block.data, e->data,
+ (sizeof self->block.data + sizeof self->block.u) / sizeof (ivec));
+ if (rc)
+ return rc;
+
+ self->block.u.valid = saved_valid;
+
+ crc = CRC32 (0, e, (char*)(&e->crc)-(char*)e);
+
+ self->block.crc = crc;
+
+ if (self->bswap)
+ {
+ crc = bswap_32 (crc);
+ }
+ e->crc_copy = e->crc = crc;
+
+ return 0;
+}
+
+
+/* ----------
+ * BlockDecrypt
+ * decrypt decrypts the data from a KEncFileBlock into the KEncFileBlock
+ * in the KEncFile object
+ */
+
+static
+rc_t KEncFileV1BlockDecrypt (KEncFileV1 * self, KEncFileBlock * e)
+{
+ uint8_t ivec [16];
+ rc_t rc;
+
+ assert (self);
+ assert (e);
+
+ /* create the initialization vector for this block */
+ KEncFileV1IVecInit (self, ivec);
+
+ /*
+ * set the ivec for both the master and data block ciphers
+ */
+ rc = KCipherSetDecryptIVec (self->ciphers.master, ivec);
+ if (rc)
+ return rc;
+
+ rc = KCipherSetDecryptIVec (self->ciphers.block, ivec);
+ if (rc)
+ return rc;
+
+ /*
+ * decrypt the block key and initial vector using the user key and
+ * the computer ivec
+ */
+ rc = KCipherDecryptCBC (self->ciphers.master, e->key, self->block.key,
+ (sizeof e->key) / sizeof ivec);
+ if (rc)
+ return rc;
+
+ /*
+ * now create the AES key for the block from the newly decrypted
+ * block key
+ */
+ rc = KCipherSetDecryptKey (self->ciphers.block, self->block.key,
+ sizeof self->block.key);
+ if (rc)
+ return rc;
+ rc = KCipherDecryptCBC (self->ciphers.block, e->data,
+ self->block.data,
+ (sizeof e->data + sizeof e->u) / sizeof ivec);
+ if (rc)
+ return rc;
+
+ if (self->bswap)
+ {
+ self->block.u.valid = bswap_16 (self->block.u.valid);
+/* self->block.id = bswap_64 (self->block.id); */
+ }
+
+ /* we choose not to flag errors in decryption so don't validate these */
+ if (self->block.u.valid & 0x8000)
+ self->block.u.valid = 0x8000;
+
+ return rc;
+}
+
+
+/* ----------
+ * BlockRead
+ * read a requested block from the encrypted file;
+ * decryption is a separate step
+ */
+static
+rc_t KEncFileV1BlockRead (const KEncFileV1 * cself, uint64_t block_id,
+ KEncFileBlock * block, bool validate)
+{
+ KEncFileV1 * self; /* mutable fields */
+ uint64_t pos;
+ uint64_t max;
+ size_t num_read;
+ rc_t rc;
+ KEncFileBlock e;
+
+ assert (cself);
+ assert (block);
+
+ self = (KEncFileV1*)cself;
+ pos = BlockId_to_EncryptedPos (block_id);
+
+ /* set aside the current maximum position within the encrypted file */
+ max = self->encrypted_max;
+
+ memset (&self->block, 0, sizeof self->block);
+ self->block.id = block_id;
+ self->block.u.valid = 0;
+ self->dirty = false;
+
+ rc = KEncFileV1BufferRead (self, pos, &e, sizeof e, &num_read);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "error in reading block '$(BID)' from encrypted file",
+ "BID=%lu", block_id));
+ else
+ {
+ uint32_t crc;
+
+ /* we'll judge the success of the read now on how many bytes read
+ * there are only three legitimate values:
+ * + size of a block
+ * + size of a footer
+ * + zero meaning no footer yet
+ *
+ * This might have to change to handled streamed files where the
+ * producer jsut hasn't finished yet
+ */
+ switch (num_read)
+ {
+ default: /* bad value means a truncated file most likely */
+ rc = RC (rcKrypto, rcFile, rcReading, rcFile, rcInsufficient);
+ PLOGERR (klogErr,
+ (klogErr, rc, "wrong size reading block '$(B)' at '$(P)' "
+ "from encrypted file - likely truncated", "B=%lu,P=%lu",
+ block_id, pos));
+ break;
+
+ case sizeof e:
+ if (max <= pos) /* if we hadn't read this far do accounting */
+ {
+ if (self->bswap)
+ {
+ e.crc = bswap_32 (e.crc);
+ e.id = bswap_64 (e.id);
+ }
+
+ if (block_id != e.id)
+ {
+ PLOGERR (klogErr,
+ (klogErr,
+ RC (rcKrypto, rcFile, rcValidating, rcIndex, rcIncorrect),
+ "error validating id for block '$(BID)' is not $(C2)",
+ "BID=%lu,C2=%lu", block_id, e.id));
+ }
+
+ if (validate)
+ {
+ crc = CRC32 (0, &e, (char*)(&e.crc)-(char*)&e);
+
+
+ if (crc != e.crc)
+ {
+ PLOGERR (klogErr,
+ (klogErr,
+ RC (rcKrypto, rcFile, rcValidating, rcCrc, rcCorrupt),
+ "error validating crc for block '$(BID)' $(C1) is not $(C2)",
+ "BID=%lu,C1=0x%X,C2=0x%X", block_id,
+ crc, e.crc));
+ }
+ }
+
+ ++self->foot.block_count;
+/* Byte Endian problem! */
+ self->foot.crc_checksum += e.crc;
+ }
+ memcpy (block, &e, sizeof e);
+ self->eof = false;
+ break;
+
+ case sizeof (self->foot):
+ {
+ KEncFileFooter foot;
+ memmove (&foot, &e, sizeof foot);
+ if (self->bswap)
+ {
+ foot.block_count = bswap_64 (foot.block_count);
+ foot.crc_checksum = bswap_64 (foot.crc_checksum);
+ }
+ if (validate && !self->written)
+ {
+ rc = KEncFileV1FooterValidate (self, foot.block_count,
+ foot.crc_checksum);
+ if (rc)
+ break;
+ }
+ }
+ /* fall through */
+ case 0:
+ self->block.u.valid = 0;
+ self->block.crc = 0;
+ self->eof = true;
+ return 0;
+
+ }
+ }
+ return rc;
+}
+
+static
+rc_t KEncFileV1BlockWrite (KEncFileV1 * self)
+{
+ KEncFileBlock e;
+ uint64_t block_offset;
+ size_t num_writ;
+ rc_t rc;
+
+ assert (self);
+
+ if (self->block.u.valid > sizeof self->block.data)
+ return RC (rcFS, rcFile, rcWriting, rcBuffer, rcCorrupt);
+
+ /* where in the file is this block */
+ block_offset = BlockId_to_EncryptedPos(self->block.id);
+
+ /* if this is an update to a block take out the old crc value */
+ if (block_offset < self->encrypted_max)
+ self->foot.crc_checksum -= self->block.crc;
+
+ /* if it's not we need to add it as a new block in the count */
+ else
+ ++self->foot.block_count;
+
+ rc = KEncFileV1BlockEncrypt (self, &e);
+ if (rc)
+ return rc;
+
+/* Byte Endian problem */
+ self->foot.crc_checksum += self->block.crc;
+
+ /* now write the buffer to the encrypted file */
+ rc = KEncFileV1BufferWrite (self, block_offset, &e, sizeof e, &num_writ);
+
+ if ((rc == 0) && (num_writ != sizeof e))
+ {
+ rc = RC (rcFS, rcFile, rcWriting, rcFile, rcTooShort);
+ PLOGERR (klogErr,
+ (klogErr, rc, "incomplete block write '$(B)' wanted"
+ " '$(V)' got '$(N)'", "B=%lu,V=%u,N=%u",
+ self->foot.block_count+1, self->block.u.valid, num_writ));
+ }
+ return rc;
+}
+
+
+static
+rc_t KEncFileV1BlockFlush (KEncFileV1 *self)
+{
+ rc_t rc = 0;
+
+ assert (self);
+ assert (self->block.u.valid);
+ assert (self->block.u.valid <= sizeof (self->block.data));
+
+ /* first do we need to deal with the file header?
+ * if the encrypted file has not been written to we do */
+ if ((self->encrypted_max == 0) && (self->swarm == false))
+ {
+ rc = KEncFileV1HeaderWrite (self);
+ if (rc)
+ return rc;
+ }
+
+ if (self->dirty)
+ {
+ rc = KEncFileV1BlockWrite (self);
+ if (rc == 0)
+ self->dirty = false;
+ }
+ return rc;
+}
+
+
+/*
+ * block_id - which block to read and decrypt
+ * fill - if not false, we fill in zero blocks up through this block
+ *
+ */
+static
+rc_t KEncFileV1BlockSeek (KEncFileV1 * self, uint64_t block_id, bool fill, bool validate)
+{
+ KEncFileBlock b;
+ rc_t rc;
+
+ if (block_id != self->block.id)
+ {
+ if (self->dirty)
+ {
+ /* flush what we got */
+ rc = KEncFileV1BlockFlush (self);
+ if (rc)
+ return rc;
+ }
+
+ if (validate && (block_id > self->block.id))
+ {
+ uint64_t tid;
+
+ for (tid = self->block.id + 1; tid < block_id; ++tid)
+ {
+ if (self->encrypted_max > BlockId_to_EncryptedPos(block_id))
+ continue;
+
+ memset (&b, 0, sizeof b);
+
+ rc = KEncFileV1BlockRead (self, tid, &b, validate);
+ if (rc)
+ return rc;
+
+ if (self->eof)
+ {
+ if (fill)
+ {
+ self->eof = false;
+ memset (self->block.data, 0, sizeof (self->block.data));
+ self->block.u.valid = sizeof (self->block.data);
+ self->dirty = true;
+ rc = KEncFileV1BlockFlush (self);
+ if (rc)
+ return rc;
+ }
+ else
+ return 0;
+ }
+ /* in this loop a less than full block is end of file */
+ else if (fill)
+ {
+ rc = KEncFileV1BlockDecrypt (self, &b);
+ if (rc)
+ return rc;
+
+ if (self->block.u.valid < sizeof self->block.u.valid)
+ {
+ memset (self->block.data + self->block.u.valid, 0,
+ sizeof (self->block.data) - self->block.u.valid);
+ self->dirty = true;
+ rc = KEncFileV1BlockFlush (self);
+ if (rc)
+ return rc;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+ }
+ }
+ /* done with intervening blocks */
+ memset (&b, 0, sizeof b);
+
+ rc = KEncFileV1BlockRead (self, block_id, &b, validate);
+ if (rc)
+ return rc;
+
+ if (! self->eof)
+ {
+ rc = KEncFileV1BlockDecrypt (self, &b);
+ }
+ if (fill)
+ {
+ self->block.id = block_id;
+ self->block.u.valid = 0;
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Interface Functions
+ *
+ * Destroy
+ *
+ */
+static
+rc_t CC KEncFileV1DestroyRead (KEncFileV1 *self)
+{
+ rc_t rc1 = 0;
+ rc_t rc2 = 0;
+ rc_t rc3 = 0;
+
+ if (self)
+ {
+ rc1 = KFileRelease (self->encrypted);
+ rc2 = KCipherRelease (self->ciphers.master);
+ rc3 = KCipherRelease (self->ciphers.block);
+ free (self);
+ return rc1 ? rc1 : rc2 ? rc2 : rc3;
+ }
+ return 0;
+}
+
+
+static
+rc_t CC KEncFileV1DestroyWrite (KEncFileV1 *self)
+{
+ rc_t rc1;
+ rc_t rc2;
+
+ rc1 = (self->block.u.valid) ? KEncFileV1BlockFlush (self) : 0;
+ if ((rc1 == 0)&&(self->encrypted_max != 0))
+ rc1 = KEncFileV1FooterWrite (self);
+ rc2 = KFileRelease (self->encrypted);
+
+ return (rc1 ? rc1 : rc2);
+}
+
+
+static
+rc_t CC KEncFileV1DestroySwarm (KEncFileV1 *self)
+{
+ rc_t rc1 = 0;
+ rc_t rc2 = 0;
+ rc_t rc3 = 0;
+
+ if (self)
+ {
+ rc1 = KFileRelease (self->encrypted);
+ rc2 = KCipherRelease (self->ciphers.master);
+ rc3 = KCipherRelease (self->ciphers.block);
+ free (self);
+ return rc1 ? rc1 : rc2 ? rc2 : rc3;
+ }
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ * returns an underlying system file object
+ * and starting offset to contiguous region
+ * suitable for memory mapping, or NULL if
+ * no such file is available.
+ *
+ * We do not allow this for read, write or update as you can not memory map the
+ * unencrypted file in a meaningful way.
+ */
+static
+struct KSysFile *CC KEncFileV1GetSysFileUnsupported (const KEncFileV1 *self, uint64_t *offset)
+{
+ assert (self);
+ assert (offset);
+ return NULL;
+}
+
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ * returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KEncFileV1RandomAccess (const KEncFileV1 *self)
+{
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+ return KFileRandomAccess (self->encrypted);
+}
+
+
+static
+rc_t CC KEncFileV1RandomAccessUnsupported (const KEncFileV1 *self)
+{
+ return RC ( rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported );
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ * returns size in bytes of file
+ *
+ * "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KEncFileV1SizeUnsupported (const KEncFileV1 *self, uint64_t *size)
+{
+ return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported );
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ * sets size in bytes of file
+ *
+ * "size" [ IN ] - new file size
+ */
+static
+rc_t CC KEncFileV1SetSizeUnsupported (KEncFileV1 *self, uint64_t size)
+{
+ assert (self);
+ return RC ( rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported );
+}
+
+
+/* ----------------------------------------------------------------------
+ * Read
+ * read file from known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually read
+ */
+static
+rc_t CC KEncFileV1ReadUnsupported (const KEncFileV1 *self,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ return RC ( rcFS, rcFile, rcReading, rcFunction, rcUnsupported );
+}
+
+
+static
+rc_t CC KEncFileV1Read (const KEncFileV1 *cself,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ KEncFileV1 * self = (KEncFileV1 *)cself; /* mutable values */
+ uint64_t block_id;
+ uint32_t offset;
+ size_t to_copy;
+ rc_t rc = 0;
+
+ assert (self); /* checked in file.c KFileRead() */
+ /* pos can be 'anything' */
+ assert (buffer); /* checked in file.c KFileRead() */
+ assert (bsize); /* checked in file.c KFileRead() */
+ assert (num_read); /* checked in file.c KFileRead() */
+
+ *num_read = 0;
+
+ block_id = DecryptedPos_to_BlockId (pos, &offset);
+
+ /*
+ * are we on the wrong block?
+ * Or are do we need to read the first block?
+ */
+ if ((block_id != self->block.id) || (self->block.u.valid == 0))
+ {
+ rc = KEncFileV1BlockSeek (self, block_id, false, false);
+ if (rc)
+ return rc;
+ }
+
+ /*
+ * if we are trying to read past the end of the file
+ * return 0 with nothing read
+ */
+ if (self->eof || (block_id != self->block.id) ||
+ (offset >= self->block.u.valid))
+ return 0;
+
+ to_copy = self->block.u.valid - offset;
+ if (to_copy > bsize)
+ to_copy = bsize;
+
+ memmove (buffer, self->block.data + offset, to_copy);
+ *num_read = to_copy;
+
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ * write file at known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ *
+ * Unsupported as we now treat archives as READ ONLY
+ */
+static
+rc_t CC KEncFileV1WriteUnsupported (KEncFileV1 *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *num_writ)
+{
+ rc_t rc = RC (rcFS, rcFile, rcReading, rcFunction, rcUnsupported);
+ LOGERR (klogInt, rc, "KFileRead failed to filter call");
+ return rc;
+}
+
+static
+rc_t KEncFileV1WriteInt (KEncFileV1 *self, uint64_t block_id, uint32_t block_offset,
+ const void *buffer, size_t bsize,
+ size_t *pnum_writ, bool seek)
+{
+ const uint8_t * pb;
+ size_t tot_writ;
+ rc_t rc;
+
+ assert (self);
+ assert (self->block.u.valid <= sizeof (self->block.data));
+ assert (block_offset < sizeof (self->block.data));
+ assert (buffer);
+ assert (bsize);
+ assert (pnum_writ);
+
+ if (seek)
+ {
+ /* if we need to change blocks */
+ if (block_id != self->block.id)
+ {
+ rc = KEncFileV1BlockSeek (self, block_id, true, false);
+ if (rc)
+ return rc;
+ }
+ /* do we have to fill some of this block */
+ if (self->block.u.valid < block_id)
+ {
+ memset (self->block.data + self->block.u.valid, 0,
+ block_offset - self->block.u.valid);
+ self->block.u.valid = block_offset;
+ }
+ }
+
+ /*
+ * is the full write within this block?
+ * doesn't matter whether we are skipping back or not
+ */
+ if ((block_offset + bsize) <= sizeof (self->block.data))
+ {
+ memmove (self->block.data + block_offset, buffer, bsize);
+ self->dirty = true;
+ if (block_offset + bsize > self->block.u.valid)
+ self->block.u.valid = block_offset + bsize;
+ *pnum_writ = bsize;
+ return 0;
+ }
+
+ /* we are either forcing ourselves backward or not */
+ else
+ self->block.u.valid = block_offset;
+
+ /* by this point we are 'at' the right place in the file */
+ /* do we have an existing (possibly partial) block? */
+
+ /* change to a sized target pointer */
+ pb = buffer;
+ tot_writ = 0;
+
+ /* handle this first block with some data in it */
+ if (self->block.u.valid != 0)
+ {
+ size_t remaining;
+
+ /* how many bytes left in this block */
+ remaining = sizeof self->block.data - self->block.u.valid;
+
+ memmove (self->block.data + self->block.u.valid, buffer, remaining);
+ self->block.u.valid = sizeof self->block.data;
+
+ self->dirty = true;
+ rc = KEncFileV1BlockFlush (self);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "error flushing block in encrypt");
+ return rc;
+ }
+
+ tot_writ = remaining;
+ pb += remaining;
+ bsize -= remaining;
+ ++block_id;
+ }
+
+ /* now loop through complete blocks to write */
+ for (; bsize >= sizeof self->block.data; bsize -= sizeof self->block.data)
+ {
+ memcpy (self->block.data, pb, sizeof self->block.data);
+
+ self->block.u.valid = sizeof self->block.data;
+ self->block.id = block_id;
+ self->dirty = true;
+ rc = KEncFileV1BlockFlush (self);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "error flushing block in encrypt");
+ return rc;
+ }
+ pb += sizeof self->block.data;
+ tot_writ += sizeof self->block.data;
+ ++block_id;
+ }
+
+ /* now any last partial block that starts at the beginning of a block */
+ if (bsize != 0)
+ {
+ KEncFileBlock b;
+
+ if (self->encrypted_max > BlockId_to_EncryptedPos(block_id))
+ {
+ rc = KEncFileV1BlockRead (self, block_id, &b, false);
+ if (rc)
+ return rc;
+ /* if valid is not 0 we actually read something */
+ if (b.u.valid)
+ rc = KEncFileV1BlockDecrypt (self, &b);
+ }
+ else
+ {
+ self->block.u.valid = 0;
+ self->block.id = block_id;
+ }
+
+ memmove (self->block.data, pb, bsize);
+
+ if (bsize > self->block.u.valid)
+ self->block.u.valid = bsize;
+
+ self->dirty = true;
+ tot_writ += bsize;
+ }
+ *pnum_writ = tot_writ;
+ return 0;
+}
+
+
+static
+rc_t CC KEncFileV1Write (KEncFileV1 *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *pnum_writ)
+{
+ uint64_t block_id;
+ uint64_t curr_block_id;
+ uint32_t block_offset;
+ uint32_t curr_block_offset;
+ rc_t rc = 0;
+
+ /* -----
+ * check for incorrect call with a seek attempt
+ * we only allow seeks on read or read/write files
+ *
+ * find our location in the encrypted file by block id
+ * and offset
+ */
+ block_id = DecryptedPos_to_BlockId (pos, &block_offset);
+ curr_block_id = DecryptedPos_to_BlockId
+ (BlockId_to_DecryptedPos (self->block.id) + self->block.u.valid,
+ &curr_block_offset);
+
+ /* are we writing to the wrong block/offset? */
+ if ((block_id != curr_block_id) || (block_offset != curr_block_offset))
+ {
+ rc = RC (rcFS, rcFile, rcWriting, rcOffset, rcIncorrect);
+ PLOGERR (klogErr, (klogErr, rc, "attempt to seek in encryption write at"
+ " '$(O)' seek to '$(P)'", "O=%lu,P=%lu",
+ BlockId_to_EncryptedPos(self->block.id), pos));
+ }
+ else
+ {
+ if ((block_id != 0) && (block_id != self->block.id))
+ {
+ rc = KEncFileV1BlockFlush (self);
+ if (rc == 0)
+ {
+ ++self->block.id;
+ self->block.u.valid = 0;
+ }
+ }
+
+ if (rc == 0)
+ rc = KEncFileV1WriteInt (self, block_id, block_offset, buffer,
+ bsize, pnum_writ, false);
+ }
+ return rc;
+}
+
+
+static
+rc_t CC KEncFileV1WriteSwarm (KEncFileV1 *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *pnum_writ)
+{
+ uint32_t block_offset;
+ rc_t rc;
+
+ self->block.id = DecryptedPos_to_BlockId (pos, &block_offset);
+ self->block.u.valid = 0;
+ if (bsize > sizeof self->block.data - block_offset)
+ bsize = sizeof self->block.data - block_offset;
+
+ rc = KEncFileV1WriteInt (self, self->block.id, block_offset, buffer,
+ bsize, pnum_writ, false);
+ if (rc == 0)
+ rc = KEncFileV1BlockFlush (self);
+ return rc;
+}
+
+
+static
+rc_t CC KEncFileV1Update (KEncFileV1 *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *pnum_writ)
+{
+ return RC (rcKrypto, rcFile, rcConstructing, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Type
+ * returns a KFileDesc
+ * not intended to be a content type,
+ * but rather an implementation class
+ */
+static
+uint32_t CC KEncFileV1Type (const KEncFileV1 *self)
+{
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+
+ return KFileType (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KEncFileV1Make
+ * create a new file object
+ */
+
+/* ----------
+ * KeysInit
+ */
+static
+rc_t KEncFileV1CiphersInit (KEncFileV1 * self, const KKey * key, bool read, bool write)
+{
+ KCipherManager * mgr;
+ size_t z;
+ rc_t rc;
+
+ switch ( key->type)
+ {
+ default:
+ return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcInvalid);
+
+ case kkeyNone:
+ return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcIncorrect);
+
+ case kkeyAES128:
+ z = 128/8; break;
+
+ case kkeyAES192:
+ z = 192/8; break;
+
+ case kkeyAES256:
+ z = 256/8; break;
+ }
+ rc = KCipherManagerMake (&mgr);
+ if (rc == 0)
+ {
+ rc = KCipherManagerMakeCipher (mgr, &self->ciphers.master, kcipher_AES);
+ if (rc == 0)
+ {
+ rc = KCipherManagerMakeCipher (mgr, &self->ciphers.block, kcipher_AES);
+ if (rc == 0)
+ {
+ rc = KCipherSetDecryptKey (self->ciphers.master, key->text, z);
+ if (rc == 0)
+ {
+ rc = KCipherSetEncryptKey (self->ciphers.master, key->text, z);
+ if (rc == 0)
+ goto keep_ciphers;
+ }
+ KCipherRelease (self->ciphers.block);
+ self->ciphers.block = NULL;
+ }
+ KCipherRelease (self->ciphers.master);
+ self->ciphers.master = NULL;
+ }
+ keep_ciphers:
+ KCipherManagerRelease (mgr);
+ }
+ return rc;
+}
+
+
+
+/* ----------
+ * MakeInt
+ * common make for all encryptor/decryptors
+ */
+static
+rc_t KEncFileV1MakeInt (KEncFileV1 ** pself, KFile * encrypted,
+ const KFile_vt_v1 * vt, bool r, bool w, bool v)
+{
+ KEncFileV1 * self;
+ rc_t rc;
+
+ assert (pself);
+ assert (encrypted);
+
+ /* allocate and zero out an object since we want much of it to be zeroed */
+ self = calloc (sizeof *self, 1);
+ if (self == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+ LOGERR (klogSys, rc,
+ "out of memory creating encrypter and/or decryptor");
+ }
+ else
+ {
+ /* all KFiles get this initialization */
+ rc = KFileInit (&self->dad, (const KFile_vt*)vt, "KEncFileV1", "no-name", r, w);
+ if (rc)
+ LOGERR (klogInt, rc, "failure initialize encrypted file root class");
+ else
+ {
+ rc = KFileAddRef (encrypted);
+ if (rc == 0)
+ {
+ self->encrypted = encrypted;
+ *pself = self;
+ return 0;
+ }
+ }
+ free (self);
+ }
+ return rc;
+}
+
+
+/* ----------
+ * MakeCmn
+ * common parameter validation for all encryptor/decryptors
+ */
+static
+rc_t KEncFileV1MakeCmn (KEncFileV1 ** pself, KFile * encrypted, const KKey * key,
+ const KFile_vt_v1 * vt, bool r, bool w)
+{
+ rc_t rc = 0;
+
+ do
+ {
+ CRC32Init(); /* likely to be called way too often */
+
+ if (pself == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+ LOGERR (klogErr, rc,
+ "pointer to self NULL when creating "
+ "an encryptor/decryptor");
+ break;
+ }
+ *pself = NULL;
+
+ if (encrypted == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+ LOGERR (klogErr, rc,
+ "encrypted file not supplied when creating "
+ "an encryptor/decryptor");
+ break;
+ }
+
+ if (key == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+ LOGERR (klogErr, rc,
+ "key not supplied when creating an encryptor/decryptor");
+ break;
+ }
+
+ switch (key->type)
+ {
+ default:
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+ PLOGERR (klogErr,
+ (klogErr, rc, "invalid key type '$(T)' should be "
+ "kkeyAES128(1), kkeyAES192(2) or kkeyAES256(3)",
+ "T=%u", key->type));
+ break;
+
+ case kkeyAES128:
+ case kkeyAES192:
+ case kkeyAES256:
+ break;
+ }
+ if (rc == 0)
+ {
+ KEncFileV1 * self;
+
+ assert (vt);
+ assert ((r == true) || (r == false));
+ assert ((w == true) || (w == false));
+
+ rc = KEncFileV1MakeInt (&self, encrypted, vt, r, w, false);
+ if (rc == 0)
+ {
+ rc = KEncFileV1CiphersInit (self, key, r, w);
+ if (rc == 0)
+ {
+ *pself = self;
+ return 0;
+ }
+ KFileRelease (&self->dad);
+ }
+ }
+ } while (0);
+ return rc;
+}
+
+
+
+static const KFile_vt_v1 vtKEncFileV1Read =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KEncFileV1DestroyRead,
+ KEncFileV1GetSysFileUnsupported,
+ KEncFileV1RandomAccess,
+ KEncFileV1SizeUnsupported,
+ KEncFileV1SetSizeUnsupported,
+ KEncFileV1Read,
+ KEncFileV1WriteUnsupported,
+
+ /* 1.1 */
+ KEncFileV1Type
+};
+static const KFile_vt_v1 vtKEncFileV1Write =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KEncFileV1DestroyWrite,
+ KEncFileV1GetSysFileUnsupported,
+ KEncFileV1RandomAccessUnsupported,
+ KEncFileV1SizeUnsupported,
+ KEncFileV1SetSizeUnsupported,
+ KEncFileV1ReadUnsupported,
+ KEncFileV1Write,
+
+ /* 1.1 */
+ KEncFileV1Type
+};
+static const KFile_vt_v1 vtKEncFileV1Update =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KEncFileV1DestroySwarm,
+ KEncFileV1GetSysFileUnsupported,
+ KEncFileV1RandomAccess,
+ KEncFileV1SizeUnsupported,
+ KEncFileV1SetSizeUnsupported,
+ KEncFileV1ReadUnsupported,
+ KEncFileV1WriteSwarm,
+
+ /* 1.1 */
+ KEncFileV1Type
+};
+static const KFile_vt_v1 vtKEncFileV1Validate =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KEncFileV1DestroyRead,
+ KEncFileV1GetSysFileUnsupported,
+ KEncFileV1RandomAccessUnsupported,
+ KEncFileV1SizeUnsupported,
+ KEncFileV1SetSizeUnsupported,
+ KEncFileV1ReadUnsupported,
+ KEncFileV1WriteUnsupported,
+
+ /* 1.1 */
+ KEncFileV1Type
+};
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeRead_v1 (const KFile ** pself,
+ const KFile * encrypted,
+ const KKey * key)
+{
+ KEncFileV1 * self;
+ rc_t rc;
+ rc = KEncFileV1MakeCmn (&self, (KFile *)encrypted, key, &vtKEncFileV1Read,
+ true, false);
+ if (rc)
+ LOGERR (klogErr, rc, "error constructing decryptor");
+ else
+ {
+ rc = KEncFileV1HeaderRead (self);
+ if (rc)
+ LOGERR (klogErr, rc, "error reading encrypted file header");
+ else
+ {
+ *pself = &self->dad;
+ return 0;
+ }
+ KFileRelease (&self->dad);
+ }
+ return rc;
+}
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through form the
+ * first byte to the last.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeWrite_v1 (KFile ** pself,
+ KFile * encrypted,
+ const KKey * key)
+{
+ KEncFileV1 * self;
+ rc_t rc;
+
+ rc = KFileSetSize (encrypted, 0);
+#if 0
+ if (rc)
+ LOGERR (klogWarn, rc, "error truncating output file - "
+ "corrupted file might result");
+#endif
+
+ rc = KEncFileV1MakeCmn (&self, encrypted, key, &vtKEncFileV1Write,
+ false, true);
+ if (rc)
+ LOGERR (klogErr, rc, "error creating encryptor");
+ else
+ *pself = &self->dad;
+ return rc;
+}
+
+
+/* ----------
+ * Update mode is read/write mode where seeking within the file is allowed.
+ */
+
+
+LIB_EXPORT rc_t CC KEncFileV1MakeUpdate_v1 (KFile ** pself,
+ KFile * encrypted,
+ const KKey * key)
+{
+ KEncFileV1 * self;
+ rc_t rc;
+
+ rc = KEncFileV1MakeCmn (&self, encrypted, key, &vtKEncFileV1Update,
+ false, true);
+ if (rc)
+ LOGERR (klogErr, rc, "error creating encryptor");
+ else
+ {
+ self->swarm = true;
+ *pself = &self->dad;
+ }
+ return rc;
+}
+
+
+/* ----------
+ * Validate mode is useful only for the KFileEncValidate function
+ */
+static
+rc_t KEncFileV1MakeValidate (const KEncFileV1 ** pself, const KFile * encrypted)
+{
+ KEncFileV1 * self;
+ rc_t rc;
+
+ assert (pself);
+ assert (encrypted);
+
+ rc = KEncFileV1MakeInt (&self, (KFile*)encrypted, &vtKEncFileV1Validate, true, false, true);
+ if (rc)
+ LOGERR (klogErr, rc, "error making KEncFileV1");
+ else
+ {
+ rc = KEncFileV1HeaderRead (self);
+ if (rc)
+ LOGERR (klogErr, rc, "error reading encrypted file header");
+ else
+ {
+ *pself = self;
+ return 0;
+ }
+ }
+ *pself = NULL;
+ return rc;
+}
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ */
+LIB_EXPORT rc_t CC KEncFileV1Validate_v1 (const KFile * encrypted)
+{
+ const KEncFileV1 * file;
+ rc_t rc;
+
+ /* fail if a NULL parameter: can't validate all addresses */
+ if (encrypted == NULL)
+ {
+ rc = RC (rcKrypto, rcFile, rcValidating, rcParam, rcNull);
+ LOGERR (klogErr, rc, "encrypted file was null when trying to validate");
+ return rc;
+ }
+
+ /* if the parameter is already a KEncFileV1 work on the file behind it instead */
+ /* we definitely can't work on a file being written that has not been closed */
+ if (encrypted->vt == (const KFile_vt*)&vtKEncFileV1Read)
+ encrypted = (const KFile *)(((const KEncFileV1*)encrypted)->encrypted);
+
+ /* file header is validated within the call to Make Validate */
+ rc = KEncFileV1MakeValidate (&file, encrypted);
+ if (rc)
+ LOGERR (klogErr, rc,
+ "unable to validate encrypted file due to "
+ "inability to open as encrypted file");
+ else
+ {
+ uint64_t pos; /* position within the encrypted file */
+ uint64_t block_count = 0; /* how many blocks have we read */
+
+ /* loop through all data blocks */
+ pos = sizeof (KEncFileHeader);
+ for (block_count = 0; ; ++block_count)
+ {
+ KEncFileBlock block;
+
+ STSMSG (2, ("reading block '%u' at '%lu'", block_count,
+ BlockId_to_EncryptedPos(block_count)));
+
+ rc = KEncFileV1BlockRead (file, block_count, &block, true);
+ if (rc)
+ {
+ STSMSG (2, ("read error at block '%u'", block_count));
+ break;
+ }
+ if (file->eof)
+ {
+ STSMSG (2, ("block '%u' was end", block_count));
+
+ break;
+ }
+ pos += sizeof (KEncFileData);
+ }
+ KFileRelease (&file->dad);
+ }
+ return (rc);
+}
+
+
+LIB_EXPORT rc_t CC KFileIsEnc_v1 (const char * buffer, size_t buffer_size)
+{
+ const KEncFileHeader * header;
+
+ if ((buffer == NULL) || (buffer_size == 0))
+ return RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull);
+
+ header = (const KEncFileHeader*)buffer;
+
+ if (buffer_size < sizeof header->file_sig)
+ return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient);
+
+ if (buffer_size > sizeof (*header))
+ buffer_size = sizeof (*header);
+
+ if ((memcmp (header, &const_header, buffer_size) == 0) ||
+ (memcmp (header, &const_bswap_header, buffer_size) == 0)
+#if ENABLE_V2
+ ||
+ (memcmp (header, &const_header_v1, buffer_size) == 0) ||
+ (memcmp (header, &const_bswap_header_v1, buffer_size) == 0)
+#endif
+ )
+ return 0;
+
+ return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType);
+}
+
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeRead (const struct KFile ** pself,
+ const struct KFile * encrypted_input,
+ const struct KKey * key)
+{
+#if USE_READ_V1
+ return KEncFileV1MakeRead_v1 (pself, encrypted_input, key);
+#else
+ return KEncFileMakeRead_v2 (pself, encrypted_input, key);
+#endif
+}
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through from the
+ * first byte to the last.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeWrite (struct KFile ** pself,
+ struct KFile * encrypted_output,
+ const struct KKey * key)
+{
+#if USE_WRITE_V1
+ return KEncFileV1MakeWrite_v1 (pself, encrypted_output, key);
+#else
+ return KEncFileMakeWrite_v2 (pself, encrypted_output, key);
+#endif
+}
+
+/* ----------
+ * Update mode is read/write mode where seeking within the file is allowed.
+ *
+ * NOTE this is in the private interface because it is not actually working
+ * yet.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeUpdate (struct KFile ** pself,
+ struct KFile * encrypted,
+ const struct KKey * key)
+{
+#if USE_UPDATE_V1
+ return KEncFileV1MakeUpdate_v1 (pself, encrypted, key);
+#else
+ return KEncFileMakeUpdate_v2 (pself, encrypted, key);
+#endif
+}
+LIB_EXPORT rc_t CC KEncFileMakeWriteBlock (struct KFile ** pself,
+ struct KFile * encrypted,
+ const struct KKey * key)
+{
+#if USE_BLOCK_V1
+ return KEncFileV1MakeUpdate_v1 (pself, encrypted, key);
+#else
+ return KEncFileMakeBlock_v2 (pself, encrypted, key);
+#endif
+}
+
+
+LIB_EXPORT rc_t CC KEncFileWriteHeader (KFile * self)
+{
+#if USE_BLOCK_V1
+ return KEncFileV1WriteHeader_v1 (self);
+#else
+ return KEncFileWriteHeader_v2 (self);
+#endif
+}
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ */
+LIB_EXPORT rc_t CC KEncFileValidate (const struct KFile * encrypted)
+{
+#if USE_VALIDATE_V1
+ return KEncFileV1Validate_v1 (encrypted);
+#else
+ return KEncFileValidate_v2 (encrypted);
+#endif
+}
+
+
+/* ----------
+ * Identify whether a file is a KEncFile type encrypted file by the header.
+ * read the header into a buffer and pass it into this function.
+ * The buffer_size needs to be at least 8 but more bytes lead to a better
+ * check up to the size of the header of a KEncFile type encrypted file.
+ * As the header may change in the future (in a backwards compatible way)
+ * that size might change from the current 16.
+ *
+ * Possible returns:
+ * 0:
+ * the file is an identified KEncFile type file. False positives are
+ * possible if a file happens to match at 8 or more bytes
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ * the file is definitely not a KEncFile type encrypted file.
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ * bad parameters in the call
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ * not a large enough buffer to make an identification
+ */
+LIB_EXPORT rc_t CC KFileIsEnc (const char * buffer, size_t buffer_size)
+{
+#if USE_ISENC_V1
+ return KFileIsEnc_v1 (buffer, buffer_size);
+#else
+ return KFileIsEnc_v2 (buffer, buffer_size);
+#endif
+}
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+/* end of file encfile.c */
+
diff --git a/libs/krypto/encfilev2.c b/libs/krypto/encfilev2.c
new file mode 100644
index 0000000..24aa489
--- /dev/null
+++ b/libs/krypto/encfilev2.c
@@ -0,0 +1,2589 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <krypto/encfile.h>
+#include <krypto/encfile-priv.h>
+#include "encfile-priv.h"
+#include <krypto/cipher.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/key.h>
+
+/* #include "aes-priv.h" */
+
+#include <klib/rc.h>
+#include <klib/checksum.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/debug.h>
+#include <klib/status.h>
+/* #include <klib/vector.h> */
+/* #include <klib/status.h> */
+#include <kfs/file.h>
+#include <kfs/sra.h>
+#include <sysalloc.h>
+
+#include <byteswap.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+/* #include <klib/out.h> */
+
+
+/* ----------------------------------------------------------------------
+ * KEncFile
+ * Base object class for the encryption, decryption and validation of
+ * the file format defined above
+ */
+
+#define KFILE_IMPL struct KEncFile
+#include <kfs/impl.h>
+
+
+#include "encfile-priv.h"
+
+typedef struct KEncFileCiphers KEncFileCiphers;
+struct KEncFileCiphers
+{
+ KCipher * master;
+ KCipher * block;
+};
+
+
+typedef struct KEncFileIVec { uint8_t ivec [16]; } KEncFileIVec;
+
+/* -----
+ */
+struct KEncFile
+{
+ KFile dad; /* base class */
+ KFile * encrypted; /* encrypted file as a KFile */
+ KEncFileCiphers ciphers; /* file and block ciphers */
+ KEncFileBlock block; /* current data block */
+ KEncFileFooter foot; /* contains crc checksum and block count */
+ uint64_t dec_size; /* size of decrypted file */
+ uint64_t enc_size; /* size of encrypted file */
+ bool dirty; /* data written but not flushed set in Write cleared in Flush*/
+ bool seekable; /* we can seek within the encrypted file */
+ bool size_known; /* can we know the size? Only streaming read can not know */
+ bool bswap; /* file created on system of opposite endianess */
+ bool changed; /* some write has happened cleared in Make, set in BufferWrite */
+ bool sought; /* did a seek on a read or write invalidating crc checksum */
+ bool has_header; /* have we read or written a header? */
+ bool eof;
+ bool sra; /* we know we are encrypting an SRA/KAR archive file */
+ bool swarm; /* block mode for swarm mode using KReencFile or KEncryptFile */
+ KEncFileVersion version; /* version from the header if read; or the one being written */
+};
+
+
+/* ----------
+ * BufferCalcMD5
+ * Generate the MD5 digest for a buffer
+ */
+static __inline__
+void BufferCalcMD5 (const void * buffer, size_t size, uint8_t digest [16])
+{
+ MD5State state;
+
+ assert (buffer);
+ assert (size);
+ assert (digest);
+
+ MD5StateInit (&state);
+ MD5StateAppend (&state, buffer, size);
+ MD5StateFinish (&state, digest);
+}
+
+
+/* -----
+ * return true or false as to whether the the buffer described is all 0 bits
+ */
+static __inline__
+bool BufferAllZero (const void * buffer_, size_t size)
+{
+ const uint8_t * buffer;
+ size_t count;
+ bool ret;
+
+ assert (buffer_);
+
+ buffer = buffer_;
+ ret = true;
+
+ for (count = 0; count < size; ++count)
+ {
+ if (buffer[count] != '\0')
+ {
+ ret = false;
+ break;
+ }
+ }
+ return ret;
+}
+
+
+/* ----------
+ * BufferRead
+ * Read from an encrypted file and update size if warranted
+ *
+ * Read's aren't guaranteed to get full amount
+ */
+static
+rc_t KEncFileBufferRead (KEncFile * self, uint64_t offset, void * buffer,
+ size_t bsize, size_t * num_read)
+{
+ rc_t rc;
+
+ assert (self);
+ assert (self->encrypted);
+ assert (buffer);
+ assert (bsize > 0);
+ assert (num_read);
+
+ rc = KFileReadAll (self->encrypted, offset, buffer, bsize, num_read);
+ if (rc == 0)
+ {
+ if (self->enc_size < offset + *num_read)
+ {
+ self->enc_size = offset + *num_read;
+ }
+ }
+/* leave logging to callers? */
+ else
+ PLOGERR (klogErr, (klogErr, rc, "Error reading from encrypted file "
+ "at '$(P)", "P=%lu", offset));
+
+ return rc;
+}
+
+
+/* ----------
+ * BufferWrite
+ * write to an encrypted file, mark it as changed and update size if warranted
+ */
+static
+rc_t KEncFileBufferWrite (KEncFile * self, uint64_t offset, const void * buffer,
+ size_t bsize, size_t * num_writ)
+{
+ rc_t rc = 0;
+
+ assert (self);
+ assert (self->encrypted);
+ assert (buffer);
+ assert (bsize > 0);
+ assert (num_writ);
+
+ rc = KFileWriteAll (self->encrypted, offset, buffer, bsize, num_writ);
+ if (rc)
+/* leave logging to callers? */
+ PLOGERR (klogErr, (klogErr, rc, "Error writing to encrypted file "
+ "at '$(P)", "P=%lu", offset));
+ if (bsize != *num_writ)
+ {
+/* KOutMsg ("%s: bsize %zu *num_writ %zu\n",__func__, bsize, *num_writ); */
+ rc = RC (rcKrypto, rcFile, rcWriting, rcTransfer, rcIncomplete);
+/* leave logging to callers? */
+ PLOGERR (klogErr, (klogErr, rc, "Error writing full buffer to"
+ " encrypted file at '$(P) wrote '$(W)'",
+ "P=%lu,W=%zu", offset, *num_writ));
+ }
+ else if (*num_writ > 0)
+ {
+ self->changed = true;
+ if (self->enc_size < offset + *num_writ)
+ {
+ self->enc_size = offset + *num_writ;
+ }
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * operations on KEncFileHeader
+ *
+ * The header only needs to be read and validated or written we need not
+ * reatian within the KEncFile object any information about the header in
+ * the initial version of this file format.
+ */
+
+/* -----
+ * the first eight bytes of the file are two four byte strings
+ * The first is a common "NCBI"
+ * The second is the format specific "nenc"
+ */
+static const KEncFileSig KEncFileSignature = "NCBInenc";
+
+
+/* -----
+ * the common constant used throughout the project to check the byte order
+ * as written by the system which created the file
+ */
+/* enum fails to handle these due to integer overflow */
+
+#define eEncFileByteOrderTag (0x05031988)
+#define eEncFileByteOrderReverse (0x88190305)
+
+/* ----
+ */
+#define eCurrentVersion (0x00000002)
+#define eCurrentVersionReverse (0x02000000)
+
+
+static
+const KEncFileHeader const_header
+= { "NCBInenc", eEncFileByteOrderTag, eCurrentVersion };
+
+
+static
+const KEncFileHeader const_bswap_header
+= { "NCBInenc", eEncFileByteOrderReverse, eCurrentVersionReverse };
+
+/* skipping v1 for NCBIkenc */
+static
+const KEncFileHeader const_header_sra
+= { "NCBIsenc", eEncFileByteOrderTag, eCurrentVersion };
+
+
+static
+const KEncFileHeader const_bswap_header_sra
+= { "NCBIsenc", eEncFileByteOrderReverse, eCurrentVersionReverse };
+
+
+/* ----------
+ * HeaderRead
+ * Read the header of an encrypted file and validate it.
+ *
+ * We only allow a missing header for an empty file opened for update
+ */
+static
+rc_t KEncFileHeaderRead (KEncFile * self)
+{
+ KEncFileHeader header;
+ size_t num_read;
+ rc_t rc;
+
+ assert (self);
+
+ rc = KEncFileBufferRead (self, 0, &header, sizeof (header), &num_read);
+ if (rc)
+ LOGERR (klogErr, rc, "error reading encrypted file header");
+
+ else if ((num_read == 0) && (self->dad.write_enabled))
+ {
+ /* only allow read to fail with zero length if opened with write */
+ self->version = eCurrentVersion;
+ self->bswap = false;
+ self->enc_size = 0; /* redundant? */
+ self->dec_size = 0; /* redundant? */
+ }
+ else if (num_read != sizeof (header))
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcTooShort);
+ PLOGERR (klogErr,
+ (klogErr, rc, "error reading full header of encrypted "
+ "file wanted '$(S)' got '$(N); bytes read", "S=%u,N=%u",
+ sizeof (header), num_read));
+ }
+ else
+ {
+ rc_t orc;
+
+ if (memcmp (header.file_sig, const_header.file_sig,
+ sizeof (header.file_sig)) == 0)
+ self->sra = false;
+ else if (memcmp (header.file_sig, const_header_sra.file_sig,
+ sizeof (header.file_sig)) == 0)
+ self->sra = true;
+ else
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcInvalid);
+ LOGERR (klogErr, rc, "file signature not correct for encrypted file");
+ }
+
+ switch (header.byte_order)
+ {
+ case eEncFileByteOrderTag:
+ self->bswap = false;
+ self->version = header.version;
+ break;
+
+ case eEncFileByteOrderReverse:
+ self->bswap = true;
+
+ /* assert for the right bswap call */
+ assert (sizeof (self->version) == 4);
+
+ self->version = bswap_32 (header.version);
+ break;
+
+ default:
+ orc = RC (rcFS, rcFile, rcConstructing, rcByteOrder, rcInvalid);
+ PLOGERR (klogErr, (klogErr, rc, "invalid byte order flag '$(F); in "
+ "encrypted file header", "F=%X",
+ header.byte_order));
+ if (rc == 0)
+ rc = orc;
+ break;
+ }
+
+ if ((self->version > eCurrentVersion) || (self->version == 0))
+ {
+ orc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcBadVersion);
+ PLOGERR (klogErr, (klogErr, orc, "can not decrypt version '$(V)'",
+ "V=%u", header.version));
+ if (rc == 0)
+ rc = orc;
+ }
+ if (rc == 0)
+ self->has_header = true;
+ }
+ return rc;
+}
+
+
+/* -----
+ * HeaderWrite
+ */
+#ifndef SENC_IS_NENC_FOR_WRITER
+#define SENC_IS_NENC_FOR_WRITER 1
+#endif
+
+static
+rc_t KEncFileHeaderWrite (KEncFile * self)
+{
+ rc_t rc;
+ size_t num_writ;
+ const KEncFileHeader * head;
+
+#if SENC_IS_NENC_FOR_WRITER
+ head = self->sra
+ ? (self->bswap ? &const_bswap_header_sra : &const_header_sra)
+ : (self->bswap ? &const_bswap_header : &const_header);
+#else
+ head = self->bswap ? &const_bswap_header : &const_header;
+#endif
+
+ rc = KEncFileBufferWrite (self, 0, head, sizeof * head, &num_writ);
+ if (rc)
+ LOGERR (klogErr, rc, "Failed to write encrypted file header");
+
+ else
+ /* forced upgrade by writing the header */
+ self->version = eCurrentVersion;
+
+ if (rc == 0)
+ self->has_header = true;
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KEncFileWriteHeader_v2 (KFile * self)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcFile, rcWriting, rcSelf, rcNull);
+
+ return KEncFileHeaderWrite ((KEncFile*)self);
+}
+
+
+
+/* ----------------------------------------------------------------------
+ * operations on KEncFileFooter
+ */
+
+/* ----------
+ * Validate
+ * we expect to read a Footer when we expect a Block so we validate in RAM
+ * without a Read
+ *
+ * we're just comparing the values in the footer against expected values
+ */
+static
+rc_t KEncFileFooterValidate (const KEncFile * self,
+ const uint64_t block_count,
+ const uint64_t crc_checksum)
+{
+ rc_t rc1 = 0, rc2 = 0;
+
+ assert (self);
+
+ if (self->foot.block_count != block_count)
+ {
+ rc1 = RC (rcKrypto, rcFile, rcValidating, rcFile, rcCorrupt);
+ LOGERR (klogErr, rc1, "bad block count in encrypted file footer");
+ }
+ /*
+ * crcs should match or the crc should be 0 and the version is 1
+ */
+ if ((self->foot.crc_checksum != crc_checksum) &&
+ ((self->version == 1) || (crc_checksum != 0)))
+ {
+ rc2 = RC (rcKrypto, rcFile, rcValidating, rcChecksum, rcCorrupt);
+ LOGERR (klogErr, rc2, "bad crc checksum in encrypted file footer");
+ }
+ return (rc1 ? rc1 : rc2);
+}
+
+
+static __inline__
+void KEncFileFooterSwap (const KEncFile * self, KEncFileFooter * foot)
+{
+ assert (self);
+ assert (foot);
+
+ if (self->bswap)
+ {
+ assert (sizeof (foot->block_count) == 8);
+ foot->block_count = bswap_64 (foot->block_count);
+
+ assert (sizeof (foot->crc_checksum) == 8);
+ foot->crc_checksum = bswap_64 (foot->crc_checksum);
+ }
+}
+
+
+/* ----------
+ * Read
+ * If we know where the footer is we can read it specifically
+ */
+static
+rc_t KEncFileFooterRead (KEncFile * self, const uint64_t pos,
+ const bool validate)
+{
+ union foot_plus
+ {
+ KEncFileFooter foot;
+ uint8_t bytes [sizeof (KEncFileFooter) + 1];
+ } u;
+ size_t num_read;
+ rc_t rc;
+
+ assert ((self->size_known == true) || (self->size_known == false));
+ assert (((self->size_known == true) &&
+ ((pos + sizeof (u.foot)) == self->enc_size)) ||
+ (pos == self->enc_size));
+
+ /* try to read too much just to validate nothing after the footer */
+ rc = KEncFileBufferRead (self, pos, u.bytes, sizeof u.bytes, &num_read);
+ if (rc)
+ PLOGERR (klogErr, (klogErr, rc, "failed to read encrypted file footer "
+ "at '$(P)'", "P=%lu", pos));
+
+ else if (num_read == sizeof u.foot)
+ {
+ KEncFileFooterSwap (self, &u.foot);
+
+ if (validate)
+ rc = KEncFileFooterValidate (self, u.foot.block_count,
+ u.foot.crc_checksum);
+
+ if (rc == 0)
+ {
+ self->foot.block_count = u.foot.block_count;
+ self->foot.crc_checksum = u.foot.crc_checksum;
+ }
+ }
+ else if (num_read < sizeof u.foot)
+ rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcInsufficient);
+
+ else
+ {
+ assert (num_read > sizeof u.foot);
+ rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcExcessive);
+ }
+
+ return rc;
+}
+
+
+/* ----------
+ * Write
+ * when we write a footer we write from the values in the object. They
+ * are stored in the same object format as the footer so its very simple
+ */
+static
+rc_t KEncFileFooterWrite (KEncFile * self)
+{
+ KEncFileFooter foot;
+ uint64_t pos;
+ size_t num_writ;
+ rc_t rc;
+
+ if (self->sought)
+ {
+ self->foot.block_count = foot.block_count = 1 + DecryptedPos_to_BlockId (self->dec_size, NULL);
+ foot.crc_checksum = 0;
+ }
+ else
+ memcpy (&foot, &self->foot, sizeof (foot));
+
+ KEncFileFooterSwap (self, &foot);
+
+ if (self->sought)
+ foot.crc_checksum = 0;
+
+ pos = BlockId_to_EncryptedPos (self->foot.block_count);
+
+ assert ((self->size_known == true) || (self->size_known == false));
+
+/* if (!(((self->size_known == true) && */
+/* ((pos + sizeof (foot)) == self->enc_size)) || */
+/* (pos == self->enc_size))); */
+/* { */
+/* KOutMsg ("self->foot.block_count %lu\n",self->foot.block_count); */
+/* KOutMsg ("self->size_known %u\n",self->size_known); */
+/* KOutMsg ("pos %lu\n",pos); */
+/* KOutMsg ("sizeof (foot) %zu\n",sizeof (foot)); */
+/* KOutMsg ("pos + sizeof (foot) %lu\n", pos + sizeof (foot)); */
+/* KOutMsg ("self->enc_size %lu\n",self->enc_size); */
+/* } */
+/* assert (((self->size_known == true) && */
+/* ((pos + sizeof (foot)) == self->enc_size)) || */
+/* (pos == self->enc_size)); */
+
+ rc = KEncFileBufferWrite (self, pos, &foot, sizeof (foot),
+ &num_writ);
+ if (rc == 0)
+ {
+ if (num_writ != sizeof (foot))
+ {
+ rc = RC (rcFS, rcFile, rcWriting, rcFile, rcInsufficient);
+ LOGERR (klogErr, rc, "faled to write correctly sized fotter "
+ "for encrypted file");
+ }
+ else
+ assert ((pos + sizeof (foot)) == self->enc_size);
+ }
+ return rc;
+}
+
+
+/* ----------
+ * IvecInit
+ * create the ivec for a given block
+ * done in a function to ensure decrypt and encrypt use the same code to
+ * generate this. Anything used to create this has to be available to
+ * code that doesn't know the content of the data or the state of the file
+ * beyond the location of the block with in the file.
+ *
+ * This is definitely over-kill using the MD5.
+ */
+static __inline__
+void KEncFileIVecInit (const uint64_t block_id, KEncFileIVec * ivec)
+{
+ BufferCalcMD5 (&block_id, sizeof block_id, ivec->ivec);
+}
+
+
+/* ----------
+ * BlockEncrypt
+ *
+ * Not thread safe - use of cipher schedules ivec and block key in the ciphers
+ *
+ * If this function were a protected region where only one thread could be in
+ * the body of this function at a time it could be made thread safe.
+ */
+static
+rc_t KEncFileBlockEncrypt (KEncFile * self, KEncFileBlock * d,
+ KEncFileBlock * e)
+{
+ SHA256State state;
+ uint64_t id;
+ uint16_t valid;
+ uint16_t saved_valid;
+ KEncFileCRC crc;
+ KEncFileIVec ivec;
+ rc_t rc;
+
+ assert (self);
+ assert (d);
+ assert (e);
+
+ /*
+ * First we finish preparing the two ciphers by creating the block
+ * user key out of the first part of the data and the shared Initialization
+ * vector for Chained Block Cipher mode encryption out of the block id
+ *
+ * create the initialization vector for this block
+ */
+ KEncFileIVecInit (d->id, &ivec);
+
+ /*
+ * set the ivec for both the master and data block ciphers
+ */
+ rc = KCipherSetEncryptIVec (self->ciphers.master, &ivec);
+ if (rc)
+ return rc;
+
+ rc = KCipherSetEncryptIVec (self->ciphers.block, &ivec);
+ if (rc)
+ return rc;
+
+ /*
+ * create the block user key out of the first 4kb of data and the block id
+ */
+ saved_valid = valid = d->u.valid;
+ id = d->id;
+
+ SHA256StateInit (&state);
+ SHA256StateAppend (&state, d->data,
+ valid > 4096 ? 4096 : valid);
+ SHA256StateAppend (&state, &id, sizeof (id));
+ SHA256StateFinish (&state, d->key);
+
+ /*
+ * create the block key schedule out of the block user key
+ */
+ rc = KCipherSetEncryptKey (self->ciphers.block, d->key, sizeof d->key);
+ if (rc)
+ return rc;
+
+ /*
+ * Salt the block using the randomish user key to randomly select
+ * data from the valid data.
+ *
+ * This will cover the data portion of the block past the last valid
+ * byte.
+ *
+ * NOTE we are accessing a byte array as a word array. COuld be trouble
+ * on some archaic processors such as the MC68000 family.
+ *
+ * NOTE we are using the array named data to access data beyond it's end
+ * based on knowledge of the structure of the KEncFileBlock.
+ */
+ {
+ uint16_t * pw;
+ unsigned int windex;
+ unsigned int rindex;
+ size_t bindex;
+
+ pw = (uint16_t*)d->key;
+ windex = 0;
+
+ for (bindex = valid;
+ bindex < sizeof d->data + sizeof d->u;
+ ++ bindex)
+ {
+ /* this goes beyond the end of the data array by design */
+ rindex = (size_t)pw[windex];
+ rindex %= bindex;
+
+ d->data[bindex] = d->data[rindex];
+
+ ++rindex;
+ if (rindex >= sizeof self->block.key / sizeof *pw)
+ rindex = 0;
+ }
+ }
+
+ /*
+ * If we are modifying a block created on a system with a different default
+ * Endian choice we'll need to byte swap the block id and the block valid
+ * count
+ */
+ if (self->bswap)
+ {
+ assert (sizeof id == 8);
+ id = bswap_64 (id);
+
+ assert (sizeof (valid = 2));
+ valid = bswap_16 (valid);
+ }
+
+ /* is this a bswap problem? */
+ if (saved_valid == sizeof d->data)
+ d->u.valid |= valid;
+ else
+ d->u.valid = valid;
+
+ e->id = id;
+
+ /*
+ * encrypt the block user key into the buffer
+ */
+#if 0
+ {
+ unsigned iii;
+ KOutMsg ("v2 decrypted key %lu\n", d->id);
+ for (iii = 0; iii < sizeof (d->key); +++ iii)
+ KOutMsg ("%2.2x ", d->key[iii]);
+ KOutMsg ("\n");
+ }
+#endif
+ rc = KCipherEncryptCBC (self->ciphers.master, d->key, e->key,
+ sizeof (d->key) / sizeof (ivec));
+ if (rc)
+ return rc;
+#if 0
+ {
+ unsigned iii;
+ KOutMsg ("v2 encrypted key\n");
+ for (iii = 0; iii < sizeof (e->key); +++ iii)
+ KOutMsg ("%2.2x ", e->key[iii]);
+ KOutMsg ("\n");
+ }
+#endif
+ /*
+ * encrypt the data, offset and valid values
+ */
+ rc = KCipherEncryptCBC (self->ciphers.block,
+ d->data, e->data,
+ (sizeof d->data + sizeof d->u) / sizeof (ivec));
+ if (rc)
+ return rc;
+
+ d->u.valid = saved_valid;
+
+ crc = CRC32 (0, e, (char*)(&e->crc)-(char*)e);
+
+ self->block.crc = crc;
+
+ if (self->bswap)
+ {
+ assert (sizeof crc == 4);
+ crc = bswap_32 (crc);
+ }
+ e->crc_copy = e->crc = crc;
+
+/* KOutMsg ("%s: %lu %lu %lu ", __func__, self->foot.block_count, self->foot.crc_checksum,self->block.id); */
+ if (self->foot.block_count <= self->block.id)
+ self->foot.block_count = self->block.id + 1;
+
+ if (!self->sought)
+ self->foot.crc_checksum += crc;
+
+/* KOutMsg ("%lu %lu\n", __func__, self->foot.block_count, self->foot.crc_checksum); */
+
+ return 0;
+}
+
+
+/* ----------
+ * BlockDecrypt
+ * decrypt decrypts the data from a KEncFileBlock into the KEncFileBlock
+ * in the KEncFile object
+ *
+ * Not thread safe - use of cipher schedules ivec and block key in the ciphers
+ *
+ * If this function were a protected region where only one thread could be in
+ * the body of this function at a time it could be made thread safe.
+ */
+static
+rc_t KEncFileBlockDecrypt (KEncFile * self, KEncFileBlockId bid,
+ const KEncFileBlock * e, KEncFileBlock * d)
+{
+ KEncFileIVec ivec;
+ rc_t rc;
+
+ d->id = e->id;
+
+ /* create the initialization vector for this block */
+ KEncFileIVecInit (bid, &ivec);
+
+ /*
+ * set the ivec for both the master and data block ciphers
+ */
+ rc = KCipherSetDecryptIVec (self->ciphers.master, &ivec);
+ if (rc)
+ return rc;
+
+ rc = KCipherSetDecryptIVec (self->ciphers.block, &ivec);
+ if (rc)
+ return rc;
+
+ /*
+ * decrypt the block key and initial vector using the user key and
+ * the computer ivec
+ */
+ rc = KCipherDecryptCBC (self->ciphers.master, e->key, d->key,
+ (sizeof e->key) / sizeof ivec);
+ if (rc)
+ return rc;
+
+ /*
+ * now create the AES key for the block from the newly decrypted
+ * block key
+ */
+ rc = KCipherSetDecryptKey (self->ciphers.block, d->key,
+ sizeof d->key);
+ if (rc)
+ return rc;
+
+ rc = KCipherDecryptCBC (self->ciphers.block, e->data, d->data,
+ (sizeof e->data + sizeof e->u) / sizeof ivec);
+ if (rc)
+ return rc;
+
+ if (self->bswap)
+ {
+ assert (sizeof d->u.valid == 2);
+ d->u.valid = bswap_16 (d->u.valid);
+ }
+
+ if (d->u.valid >= sizeof d->data)
+ d->u.valid = sizeof d->data;
+ else
+ memset (d->data + d->u.valid, 0, sizeof d->data - d->u.valid);
+
+ return rc;
+}
+
+
+/*
+ * if not decrypting block can be NULL
+ */
+
+/*
+ TBD: figure out rational way to handle bad password making blocks look really weird
+ If we have one that looks like a partial but isn't the last block -what do we do?
+*/
+
+static
+rc_t KEncFileBlockRead (KEncFile * self, KEncFileBlock * block,
+ KEncFileBlockId block_id, bool validate)
+{
+ union
+ {
+ KEncFileBlock b;
+ KEncFileFooter f;
+ } u;
+ size_t num_read;
+ uint64_t epos, dpos;
+ rc_t vrc, rc = 0;
+ bool missing;
+
+ assert (self);
+ assert ((validate == false) || (validate == true));
+ /* we should be decrypting or validating - maybe both */
+ assert ((block != NULL) || (validate == true));
+
+ /* translate block id into both encrypted and decrypted addresses */
+ epos = BlockId_to_EncryptedPos (block_id);
+ dpos = BlockId_to_DecryptedPos (block_id);
+
+ missing = false;
+
+ /* clear out target block */
+ if (block != NULL)
+ memset (block, 0, sizeof * block);
+
+ rc = KEncFileBufferRead (self, epos, &u.b, sizeof u.b, &num_read);
+ if (rc)
+ {
+ PLOGERR (klogErr, (klogErr, rc, "Failure to read block '$(B)' at '$(E)'"
+ " in encrypted file decrypted at '$(D)",
+ "B=%lu,E=%lu,D=%lu", block_id, epos, dpos));
+ }
+ else
+ {
+ switch (num_read)
+ {
+ case 0:
+ self->eof = true;
+ /* ain't got no block here */
+ break;
+
+ default:
+ /* Invalid size */
+ rc = RC (rcKrypto, rcFile, rcReading, rcBuffer, rcInsufficient);
+ PLOGERR (klogErr, (klogErr, rc, "Failure to read full block '$(B)' "
+ "at '$(E)' in encrypted file decrypted at '$(D)",
+ "B=%lu,E=%lu,D=%lu", block_id, epos, dpos));
+ break;
+
+ case sizeof (u.f):
+ /* footer */
+ if (validate) /* validate before checking as missing */
+ {
+ KEncFileFooterSwap (self, &u.f);
+
+ if (u.f.block_count != block_id)
+ {
+ vrc = RC (rcKrypto, rcFile, rcValidating, rcSize,
+ rcIncorrect);
+ PLOGERR (klogErr, (klogErr, vrc, "read footer block count "
+ "'$(B)' does not match actual block "
+ "count '$(A)'", "B=%lu,A=%lu",
+ u.f.block_count, block_id));
+ if ( rc == 0 )
+ rc = vrc;
+ }
+ vrc = KEncFileFooterValidate (self, u.f.block_count,
+ u.f.crc_checksum);
+
+#if 1
+ if ( rc == 0 )
+ rc = vrc;
+#else
+ /* what is the significance of a NULL block? */
+ if (block == NULL)
+ rc = vrc;
+#endif
+ }
+
+ /* is it a "missing" footer? */
+ /* or if the footer appears invalid - make it "valid" */
+ if (((missing = BufferAllZero(&u.f, sizeof u.f)) == true) ||
+ (self->foot.block_count != block_id))
+ {
+/* self->foot.block_count = block_id; */
+ self->foot.crc_checksum = 0;
+ }
+
+ /* force some values though they might already be known */
+ self->enc_size = epos + sizeof u.f;
+ self->size_known = true;
+ self->dec_size = dpos;
+ self->eof = true;
+ break;
+
+ case sizeof (u.b):
+ /* block */
+ self->eof = false;
+ /* is it a "missing" block? */
+ if ((missing = BufferAllZero(&u.b, sizeof u.b)) == true)
+ {
+ if (validate)
+ {
+ vrc = RC (rcKrypto, rcFile, rcValidating,
+ rcData, rcNull);
+
+ PLOGERR (klogErr, (klogErr, vrc, "read missing block at "
+ "block number '$(I)' encrypted position "
+ "$(E) decrypted postion $(D)",
+ "I=%lu,E=%lu,D=%lu", block_id, epos,
+ dpos));
+ if ( rc == 0 )
+ rc = vrc;
+ }
+ u.b.id = block_id;
+ u.b.u.valid = sizeof u.b.data;
+
+ /* if we can only learn of the size by reading and are thus scanning
+ * through the current decrypt position must be the current known
+ * decrypted side size
+ */
+ if (!self->size_known)
+ {
+ assert (dpos == self->dec_size);
+ self->dec_size = dpos + sizeof u.b.data;
+ }
+ /*
+ * if we know the decrypted size and it is less than what we
+ * read, adjust the valid. BUT this must not be for the block read
+ * for the last block to know the decrypted size. A chicken and egg
+ * problem.
+ */
+ else if ((self->dec_size >= dpos) &&
+ (self->dec_size < dpos + sizeof u.b.data))
+ u.b.u.valid = (uint16_t)(self->dec_size - dpos);
+ }
+
+ /* we read a full block that wasn't all zeroes */
+ else
+ {
+ /* since we've chosen not to standardize the file format byte ordering */
+ if (self->bswap)
+ {
+ assert (sizeof u.b.crc == 4);
+ u.b.crc = bswap_32 (u.b.crc);
+ u.b.crc_copy = bswap_32 (u.b.crc_copy);
+
+ assert (sizeof u.b.id == 8);
+ u.b.id = bswap_64 (u.b.id);
+ }
+
+ if (validate)
+ {
+ uint32_t crc;
+
+ if (block_id != u.b.id)
+ {
+ vrc = RC (rcKrypto, rcFile, rcValidating, rcIndex,
+ rcIncorrect);
+ PLOGERR (klogErr, (klogErr, vrc, "error validating id "
+ "for block '$(BID)' is not $(C2)",
+ "BID=%lu,C2=%lu", block_id, u.b.id));
+ if ( rc == 0 )
+ rc = vrc;
+ }
+
+ crc = CRC32 (0, &u.b, (char*)&u.b.crc - (char*)&u.b);
+
+ if (crc != u.b.crc)
+ {
+ vrc = RC (rcKrypto, rcFile, rcValidating, rcCrc, rcCorrupt);
+ PLOGERR (klogErr,
+ (klogErr,
+ vrc,
+ "error validating crc for block '$(BID)' $(C1) is not $(C2)",
+ "BID=%lu,C1=0x%X,C2=0x%X", block_id,
+ crc, u.b.crc));
+ if ( rc == 0 )
+ rc = vrc;
+ }
+ if (crc != u.b.crc_copy)
+ {
+ vrc = RC (rcKrypto, rcFile, rcValidating, rcCrc, rcCorrupt);
+ PLOGERR (klogErr,
+ (klogErr,
+ vrc,
+ "error validating crc_copy for block '$(BID)' $(C1) is not $(C2)",
+ "BID=%lu,C1=0x%X,C2=0x%X", block_id,
+ crc, u.b.crc_copy));
+ if ( rc == 0 )
+ rc = vrc;
+ }
+ }
+ }
+ if (self->sought == false)
+ {
+ if (block_id == 0)
+ {
+ self->foot.block_count = 1;
+ self->foot.crc_checksum = u.b.crc;
+ }
+ else
+ {
+ ++self->foot.block_count;
+ self->foot.crc_checksum += u.b.crc;
+ }
+ }
+
+ if (block != NULL)
+ {
+ if (missing)
+ {
+ if (self->dad.write_enabled == false)
+ rc = RC (rcKrypto, rcFile, rcReading, rcData, rcIncomplete);
+ else
+ {
+ memcpy (block, &u.b, sizeof u.b);
+ rc = 0;
+ }
+ }
+ else
+ {
+ rc = KEncFileBlockDecrypt (self, block_id, &u.b, block);
+ if (rc == 0)
+ {
+ if (block_id == 0)
+ {
+ rc_t sra = KFileIsSRA ((const char *)block->data, block->u.valid);
+ self->sra = (sra == 0);
+ }
+
+ if (!self->size_known)
+ {
+ assert (dpos == self->dec_size);
+ self->dec_size = dpos + sizeof u.b.u.valid;
+ if (u.b.u.valid != sizeof u.b.data)
+ {
+ self->size_known = true;
+ self->enc_size = epos + sizeof u.b + sizeof self->foot;
+ }
+ }
+ }
+ }
+ }
+ break;
+ }
+ }
+ return rc;
+}
+
+
+/*
+ * Take a dirty block, encrypt it and write it to the backing file
+ */
+static
+rc_t KEncFileBlockFlush (KEncFile * self, KEncFileBlock * dec_block)
+{
+ rc_t rc = 0;
+
+ assert (self);
+ assert (dec_block);
+
+
+ if (dec_block->id == 0)
+ {
+ rc = KFileIsSRA ((const char *)(dec_block->data), sizeof (KSraHeader));
+
+ /* we wait ALL the way until we try to flush the first block before we set
+ * the sra flag for write only files.
+ * we get it when we read the first block otherwise.
+ */
+ if (self->sra != (rc == 0))
+ {
+ self->sra = (rc == 0);
+ self->has_header = false;
+ }
+ }
+ if ((dec_block->id == 0) || (self->seekable))
+ {
+ if (!self->has_header)
+ {
+ if (!self->swarm)
+ {
+ rc = KEncFileHeaderWrite (self);
+ if (rc)
+ return rc;
+ }
+ else if (dec_block->id == 0)
+ self->enc_size = sizeof (KEncFileHeader);
+ }
+ }
+
+/* if (self->dirty) */
+ {
+ KEncFileBlock enc_block;
+
+ rc = KEncFileBlockEncrypt (self, dec_block, &enc_block);
+ if (rc == 0)
+ {
+ KEncFileBlockId block_id;
+ uint64_t pos;
+ size_t num_writ;
+
+ block_id = dec_block->id;
+
+ pos = BlockId_to_EncryptedPos (block_id);
+
+ rc = KEncFileBufferWrite (self, pos, &enc_block, sizeof enc_block,
+ &num_writ);
+
+ if (rc)
+ PLOGERR (klogErr, (klogErr, rc,
+ "error writing encrypted block '$(B)'",
+ "B=%lu", block_id));
+
+ else if (num_writ != sizeof enc_block)
+ {
+ rc = RC (rcKrypto, rcFile, rcWriting, rcBuffer, rcInsufficient);
+ PLOGERR (klogErr, (klogErr, rc, "error writing encrypted block "
+ "'$(B)' wrote '$(Z)' not '$(Y)'",
+ "B=%lu, Z=%zu", block_id, num_writ,
+ sizeof enc_block));
+ }
+ else
+ self->dirty = false;
+ }
+ }
+
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Interface Functions
+ *
+ * Destroy
+ *
+ */
+static
+rc_t CC KEncFileDestroy (KEncFile *self)
+{
+ rc_t rc1 = 0;
+ rc_t rc2 = 0;
+ rc_t rc3 = 0;
+ rc_t rc4 = 0;
+ rc_t rc5 = 0;
+ rc_t rc6 = 0;
+
+ assert (self);
+
+ if (self->dad.write_enabled)
+ {
+ /*
+ * write the header if we've written nothing to an empty file
+ * or if we've written something which will mean a change to v2
+ * of the encrypted file format
+ */
+ if ((self->enc_size == 0) || (self->seekable && self->changed) ||
+ (self->has_header == false))
+ rc1 = KEncFileHeaderWrite (self);
+
+ /* write any dirty block */
+ if (self->dirty)
+ rc2 = KEncFileBlockFlush (self, &self->block);
+
+ /* [re]write footer */
+ if (self->changed)
+ rc3 = KEncFileFooterWrite (self);
+ }
+ rc4 = KFileRelease (self->encrypted);
+ rc5 = KCipherRelease (self->ciphers.master);
+ rc6 = KCipherRelease (self->ciphers.block);
+
+ free (self);
+
+ if (rc1)
+ return rc1;
+ if (rc2)
+ return rc2;
+ if (rc3)
+ return rc3;
+ if (rc4)
+ return rc4;
+ if (rc5)
+ return rc5;
+ return rc6;
+}
+
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ * returns an underlying system file object
+ * and starting offset to contiguous region
+ * suitable for memory mapping, or NULL if
+ * no such file is available.
+ *
+ * We do not allow this for read, write or update as you can not memory map the
+ * unencrypted file in a meaningful way.
+ */
+static
+struct KSysFile *CC KEncFileGetSysFile (const KEncFile *self, uint64_t *offset)
+{
+ assert (self);
+ assert (offset);
+
+ return NULL;
+}
+
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ * returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KEncFileRandomAccess (const KEncFile *self)
+{
+ assert (self != NULL);
+ assert ((self->seekable == true) || (self->seekable == false));
+
+ /* we checked for random access in the contructor */
+ if (self->seekable)
+ return 0;
+
+ return RC (rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ * returns size in bytes of file
+ *
+ * "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KEncFileSize (const KEncFile *self, uint64_t *size)
+{
+ if (!self->size_known)
+ return RC (rcKrypto, rcFile, rcAccessing, rcSize, rcUnsupported);
+
+ *size = self->dec_size;
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ * sets size in bytes of file
+ *
+ * "size" [ IN ] - new file size
+ *
+ * This is the size of the decrypted payload not of the encrypted file
+ */
+static
+rc_t KEncFileSetSizeBlockFull (KEncFile *self, uint64_t block_id)
+{
+ if ((self->block.id == block_id) && (self->block.u.valid != 0))
+ {
+ if (self->block.u.valid < sizeof self->block.data)
+ {
+ self->block.u.valid = sizeof self->block.data;
+ self->dirty = true;
+ }
+ else
+ assert (self->block.u.valid == sizeof self->block.data);
+ }
+ else
+ {
+ KEncFileBlock block;
+ rc_t rc;
+
+ rc = KEncFileBlockRead (self, &block, block_id, false);
+ if (rc)
+ return rc;
+
+/* if (self->block.u.valid != sizeof self->block.data) */
+/* { */
+/* OUTMSG (("%s: %u %u\n", __func__,self->block.u.valid,sizeof self->block.data)); */
+/* OUTMSG (("%s: %lu %lu\n", __func__,self->block.id,block_id)); */
+/* } */
+
+ /* only change block if not "missing" */
+ if (BufferAllZero (&block, sizeof block) == false)
+ {
+ assert (block.id == block_id);
+
+ /* only change if not already full - shouldnt get here if not? */
+ if (block.u.valid < sizeof block.data)
+ {
+ self->changed = self->sought = true;
+ block.u.valid = sizeof block.data;
+
+ rc = KEncFileBlockFlush (self, &block);
+ if (rc)
+ return rc;
+ }
+ else
+ assert (self->block.u.valid == sizeof self->block.data);
+ }
+ }
+ return 0;
+}
+
+
+static
+rc_t KEncFileSetSizeBlockPartial (KEncFile *self, uint64_t block_id, uint32_t valid)
+{
+ if ((self->block.id == block_id) && (self->block.u.valid != 0))
+ {
+ if (self->block.u.valid != valid)
+ {
+ self->block.u.valid = valid;
+ self->dirty = true;
+ }
+ }
+ else
+ {
+ KEncFileBlock block;
+ rc_t rc;
+
+ rc = KEncFileBlockRead (self, &block, block_id, false);
+ if (rc)
+ return rc;
+
+ /* only change block if not "missing" */
+ if (BufferAllZero (&block, sizeof block) == false)
+ {
+ assert (block.id == block_id);
+
+ if (block.u.valid != valid)
+ {
+ self->changed = self->sought = true;
+ block.u.valid = valid;
+
+ rc = KEncFileBlockFlush (self, &block);
+ if (rc)
+ return rc;
+ }
+ }
+ }
+ return 0;
+}
+
+
+static
+rc_t KEncFileSetSizeInt (KEncFile *self, uint64_t dec_size)
+{
+ uint64_t trim_size;
+ uint64_t enc_size;
+ bool do_size = true;
+
+ rc_t rc = 0;
+
+ /* should we not have been called? */
+ if ((dec_size == self->dec_size) && (self->enc_size != 0))
+ return 0;
+
+ /* if wiping out the whole file */
+ if (dec_size == 0)
+ {
+ trim_size = sizeof (KEncFileHeader);
+ enc_size = (sizeof (KEncFileHeader) + sizeof (KEncFileFooter));
+
+ /* if we did clear out the RAM structures to match */
+ memset (&self->block, 0, sizeof self->block);
+ memset (&self->foot, 0, sizeof self->foot);
+ self->dirty = false;
+ self->size_known = true;
+ self->bswap = false;
+ self->changed = true;
+ self->sought = false;
+ self->has_header = false;
+ self->version = eCurrentVersion;
+ }
+ else
+ {
+ KEncFileBlockId new_bid; /* block id of new last block */
+ KEncFileBlockId new_fid; /* block id of new footer / block count */
+ uint32_t new_doff; /* bytes into last partial block */
+
+ /*
+ * determine sizes of decrypted virtual file
+ * and encrypted 'real' file
+ */
+ new_fid = new_bid = DecryptedPos_to_BlockId (dec_size, &new_doff);
+ if (new_doff == 0)
+ --new_bid; /* exactly fills a block */
+ else
+ ++new_fid; /* leaves a partial block */
+
+ enc_size = BlockId_to_EncryptedPos (new_fid) + sizeof self->foot;
+
+ /* are we starting with an empty file? It's easy if we are */
+ if (self->dec_size == 0)
+ {
+ trim_size = sizeof (KEncFileHeader);
+
+ /* if we did clear out the RAM structures to match */
+ memset (&self->block, 0, sizeof self->block);
+ self->bswap = false;
+ self->changed = true;
+ self->version = eCurrentVersion;
+ }
+ else
+ {
+ KEncFileBlockId old_bid; /* block id of old last block */
+ KEncFileBlockId old_fid; /* block id of old footer / block count */
+ uint32_t old_doff; /* bytes into last partial block */
+
+ old_fid = old_bid = DecryptedPos_to_BlockId (self->dec_size, &old_doff);
+ if (old_doff == 0)
+ --old_bid; /* exactly fills a block */
+ else
+ ++old_fid; /* leaves a partial block */
+
+ /* are we only changing the last block? */
+ if (old_bid == new_bid)
+ {
+ assert ((self->dad.read_enabled == false) || (self->enc_size == enc_size));
+
+ if (new_doff == 0)
+ rc = KEncFileSetSizeBlockFull (self, new_bid);
+ else
+ rc = KEncFileSetSizeBlockPartial (self, new_bid, new_doff);
+ do_size = false;
+ }
+ else
+ {
+
+ /* truncating the file? */
+ if (dec_size < self->dec_size)
+ {
+ trim_size = BlockId_to_EncryptedPos (new_fid);
+
+ /* do we throw away the block in the object? */
+ if (self->block.id > new_bid)
+ {
+ self->dirty = false;
+ memset (&self->block, 0, sizeof self->block);
+ }
+
+ /* we only change the new last block if its now partial */
+ if (new_doff)
+ rc = KEncFileSetSizeBlockPartial (self, new_bid, new_doff);
+
+ }
+ /* expanding the file */
+ else
+ {
+ assert (dec_size > self->dec_size);
+
+ trim_size = BlockId_to_EncryptedPos (old_fid);
+
+ /* make old last block a full block if it wasn't already */
+ if (old_doff != 0)
+ rc = KEncFileSetSizeBlockFull (self, old_bid);
+ }
+ }
+ }
+ }
+ if (rc == 0)
+ {
+ if (do_size)
+ {
+ rc = KFileSetSize (self->encrypted, trim_size);
+ if (rc)
+ LOGERR (klogErr, rc, "failure to trim size of encrpted file");
+ else
+ {
+ rc = KFileSetSize (self->encrypted, enc_size);
+ if (rc)
+ LOGERR (klogErr, rc, "failure to file size of encrpted file");
+ }
+ }
+ if (rc == 0)
+ {
+ self->enc_size = enc_size;
+ self->dec_size = dec_size;
+ }
+ }
+ return rc;
+}
+
+
+static
+rc_t CC KEncFileSetSize (KEncFile *self, uint64_t dec_size)
+{
+ assert (self);
+ assert (self->encrypted);
+
+ if (self->dad.write_enabled == false)
+ return RC (rcKrypto, rcFile, rcResizing, rcFile, rcNoPerm);
+
+ if ((self->seekable == false) || (self->size_known == false))
+ return RC(rcKrypto, rcFile, rcAccessing, rcFunction, rcUnsupported);
+
+ /* silently ignore changes in size that don't change the size */
+ if (dec_size == self->dec_size)
+ return 0;
+
+ else
+ return KEncFileSetSizeInt (self, dec_size);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Read
+ * read file from known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually read
+ */
+static
+rc_t CC KEncFileRead (const KEncFile *cself,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ KEncFile * self = (KEncFile *)cself; /* mutable values */
+ uint64_t max_bid;
+ uint64_t block_id;
+ uint32_t offset;
+ rc_t rc = 0;
+
+ assert (self); /* checked in file.c KFileRead() */
+ /* pos can be 'anything' */
+ assert (buffer); /* checked in file.c KFileRead() */
+ assert (bsize); /* checked in file.c KFileRead() */
+ assert (num_read); /* checked in file.c KFileRead() */
+
+ assert (self->dad.read_enabled);
+ assert (self->encrypted);
+
+ /* do we have a decrypted_size? */
+
+ block_id = DecryptedPos_to_BlockId (pos, &offset);
+
+ switch (self->size_known)
+ {
+ case false:
+
+ max_bid = EncryptedPos_to_BlockId (self->enc_size, NULL, NULL);
+
+ /* if past end of file as we know it so far quick out */
+ if (max_bid <= block_id)
+ return 0;
+ break;
+
+ case true:
+ /* if past end of file quick out */
+ if (pos > self->dec_size)
+ return 0;
+ break;
+
+ default:
+ assert (self->size_known);
+ break;
+ }
+
+ /*
+ * are we on the wrong block?
+ * Or are do we need to read the first block?
+ */
+ if ((block_id != self->block.id) || (self->block.u.valid == 0))
+ {
+ if ((!self->seekable) && (self->block.id + 1 != block_id))
+ {
+ rc = RC (rcFS, rcFile, rcReading, rcOffset, rcIncorrect);
+ PLOGERR (klogErr, (klogErr, rc, "attempt to seek in encryption write at"
+ " '$(O)' seek to '$(P)'", "O=%lu,P=%lu",
+ BlockId_to_EncryptedPos(self->block.id), pos));
+ }
+ else
+ {
+ /* flush any dirty block */
+ if (self->dirty)
+ {
+ assert (self->dad.write_enabled);
+ rc = KEncFileBlockFlush (self, &self->block);
+ }
+
+ /* now try to read in a new block */
+ if (rc == 0)
+ rc = KEncFileBlockRead (self, &self->block, block_id, false);
+
+ if (rc == 0)
+ {
+ uint64_t read_max;
+
+ read_max = BlockId_to_DecryptedPos(block_id) + self->block.u.valid;
+ if (self->dec_size < read_max)
+ self->dec_size = read_max;
+ }
+ }
+ }
+
+ /*
+ * if we are trying to read past the end of the file
+ * return 0 with nothing read
+ */
+ if ((rc == 0) &&
+ (block_id == self->block.id) &&
+ (offset < self->block.u.valid))
+ {
+ size_t to_copy;
+
+ to_copy = self->block.u.valid - offset;
+ if (to_copy > bsize)
+ to_copy = bsize;
+
+ memmove (buffer, self->block.data + offset, to_copy);
+ *num_read = to_copy;
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ * write file at known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ */
+static
+rc_t CC KEncFileWrite (KEncFile *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *pnum_writ)
+{
+ rc_t rc = 0;
+
+ assert (self);
+ assert (buffer);
+ assert (bsize > 0);
+ assert (pnum_writ);
+
+ assert (self->dad.write_enabled);
+ assert (self->encrypted);
+
+/* KOutMsg ("+++++\n%s: pos %lu\n",__func__,pos); */
+
+ if (self->dec_size != pos)
+ {
+ /* write only does not allow seeks */
+ if ((!self->dad.read_enabled) && (!self->swarm))
+ {
+ rc = RC (rcFS, rcFile, rcWriting, rcOffset, rcIncorrect);
+ PLOGERR (klogErr, (klogErr, rc, "attempt to seek in encryption write at"
+ " '$(O)' seek to '$(P)'", "O=%lu,P=%lu",
+ BlockId_to_EncryptedPos(self->block.id), pos));
+ }
+ else
+ self->sought = true;
+ }
+ if (rc == 0)
+ {
+ uint64_t block_id;
+ uint32_t offset;
+ uint64_t block_max;
+ uint64_t new_size;
+
+ rc = 0;
+ /* Block Id for this write */
+ block_id = DecryptedPos_to_BlockId (pos, &offset);
+
+ block_max = BlockId_to_DecryptedPos (block_id+1);
+
+ new_size = pos + bsize;
+ if (new_size > block_max)
+ bsize = block_max - new_size;
+
+
+ /* is the new position beyond the current file length? */
+ if ((new_size > self->dec_size) && (self->dad.read_enabled) && (!self->swarm))
+ {
+ rc = KEncFileSetSizeInt (self, new_size);
+ if (rc)
+ return rc;
+ }
+
+ /* are we going to a new block? */
+ if ((block_id != self->block.id) || (self->block.u.valid == 0))
+ {
+ /* do we have sometihng to flush first? */
+ if (self->dirty)
+ {
+ assert (self->dad.write_enabled);
+ rc = KEncFileBlockFlush (self, &self->block);
+ }
+
+ if (rc == 0)
+ {
+ /* if we are going to over write the whole block */
+ if ((!self->dad.read_enabled) ||
+ ((offset == 0) && (bsize >= sizeof (self->block.data))))
+ {
+ memset (&self->block, 0, sizeof self->block);
+ self->block.id = block_id;
+ }
+ /* else try to fetch an existing block */
+ else
+ rc = KEncFileBlockRead (self, &self->block, block_id, false);
+ }
+ }
+
+ if (rc == 0)
+ {
+ /* we are at the right block and ready to write */
+ uint32_t new_valid;
+ size_t to_copy;
+
+ /*
+ * force block id to be right even if fetch was beyond end of
+ * existing file
+ */
+ self->block.id = block_id;
+
+/* to_copy = sizeof self->block.data - self->block.u.valid; */
+ to_copy = sizeof self->block.data - offset;
+
+ if (to_copy > bsize)
+ to_copy = bsize;
+
+ memmove (self->block.data + offset, buffer, to_copy);
+ self->dirty = true;
+ *pnum_writ = to_copy;
+
+ new_valid = offset + to_copy;
+ if (new_valid > self->block.u.valid)
+ {
+ uint64_t new_size;
+
+ self->block.u.valid = new_valid;
+
+ new_size = pos + to_copy;
+ if (new_size > self->dec_size)
+ self->dec_size = new_size;
+ }
+
+ if (self->swarm)
+ rc = KEncFileBlockFlush (self, &self->block);
+
+
+ }
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Type
+ * returns a KFileDesc
+ * not intended to be a content type,
+ * but rather an implementation class
+ *
+ * Just return what the backing file says...
+ */
+static
+uint32_t CC KEncFileType (const KEncFile *self)
+{
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+
+ return KFileType (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KEncFileMake
+ * create a new file object
+ */
+
+/* ----------
+ * KeysInit
+ */
+static
+rc_t KEncFileCiphersInit (KEncFile * self, const KKey * key, bool read, bool write)
+{
+ KCipherManager * mgr;
+ size_t z;
+ rc_t rc;
+
+ switch ( key->type)
+ {
+ default:
+ return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcInvalid);
+
+ case kkeyNone:
+ return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcIncorrect);
+
+ case kkeyAES128:
+ z = 128/8; break;
+
+ case kkeyAES192:
+ z = 192/8; break;
+
+ case kkeyAES256:
+ z = 256/8; break;
+ }
+ rc = KCipherManagerMake (&mgr);
+ if (rc == 0)
+ {
+ rc = KCipherManagerMakeCipher (mgr, &self->ciphers.master, kcipher_AES);
+ if (rc == 0)
+ {
+ rc = KCipherManagerMakeCipher (mgr, &self->ciphers.block, kcipher_AES);
+ if (rc == 0)
+ {
+ rc = KCipherSetDecryptKey (self->ciphers.master, key->text, z);
+ if (rc == 0)
+ {
+ rc = KCipherSetEncryptKey (self->ciphers.master, key->text, z);
+ if (rc == 0)
+ goto keep_ciphers;
+ }
+ KCipherRelease (self->ciphers.block);
+ self->ciphers.block = NULL;
+ }
+ KCipherRelease (self->ciphers.master);
+ self->ciphers.master = NULL;
+ }
+ keep_ciphers:
+ KCipherManagerRelease (mgr);
+ }
+ return rc;
+}
+
+
+
+static const KFile_vt_v1 vtKEncFile =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KEncFileDestroy,
+ KEncFileGetSysFile,
+ KEncFileRandomAccess,
+ KEncFileSize,
+ KEncFileSetSize,
+ KEncFileRead,
+ KEncFileWrite,
+
+ /* 1.1 */
+ KEncFileType
+};
+
+
+static
+rc_t KEncFileMakeIntValidSize (uint64_t enc_size, bool w)
+{
+
+ if (enc_size == 0)
+ {
+ if (w)
+ return 0;
+ }
+ else
+ {
+ uint64_t min_size = sizeof (KEncFileHeader) + sizeof (KEncFileFooter);
+ uint64_t block_count;
+
+ if (enc_size >= min_size)
+ {
+ block_count = EncryptedPos_to_BlockId (enc_size, NULL, NULL);
+
+ if (enc_size - BlockId_to_EncryptedPos (block_count) == sizeof (KEncFileFooter))
+ return 0;
+ }
+ }
+ return RC (rcKrypto, rcFile, rcConstructing, rcSize, rcIncorrect);
+}
+
+
+/* ----------
+ * MakeInt
+ * common make for all encryptor/decryptors
+ */
+static
+rc_t KEncFileMakeInt (KEncFile ** pself, KFile * encrypted,
+ bool r, bool w, bool v, bool s)
+{
+ uint64_t enc_size;
+ rc_t rc = 0, orc;
+ bool seekable;
+ bool size_known;
+
+ assert (pself);
+ assert (encrypted);
+ assert (((r == true) || (r == false)) &&
+ ((w == true) || (w == false)) &&
+ ((v == true) || (v == false)));
+
+ /* must be able to do at elast one of read and write */
+ assert (r || w);
+
+ /* expecting to validate read only right now */
+/* assert ((v && r && !w) || (!v)); */
+
+ if (w && ! encrypted->write_enabled)
+ {
+ rc = RC (rcKrypto, rcFile, rcConstructing, rcFile, rcReadonly);
+ LOGERR (klogErr, rc, "Can not make a encryptor for a unwritable file");
+ }
+ if (r && ! encrypted->read_enabled)
+ {
+ orc = RC (rcKrypto, rcFile, rcConstructing, rcFile, rcWriteonly);
+ LOGERR (klogErr, orc, "Can not make a decryptor for an unreadable file");
+ if (rc == 0)
+ rc = orc;
+ }
+ if (rc)
+ return rc;
+
+ /* determine whether the original file can tell us the size */
+ rc = KFileSize (encrypted, &enc_size);
+ if (rc == 0)
+ size_known = true;
+
+ else if (GetRCState(rc) == rcUnsupported)
+ size_known = false;
+
+ else
+ return rc;
+
+ if (!v && size_known)
+ {
+ rc = KEncFileMakeIntValidSize (enc_size, w);
+ if (rc)
+ return rc;
+ }
+
+ /* determine whether the original file allows seeks */
+ rc = KFileRandomAccess (encrypted);
+ if (rc == 0)
+ seekable = true;
+
+ else if (GetRCState(rc) == rcUnsupported)
+ seekable = false;
+
+ else
+ {
+ LOGERR (klogErr, rc, "error checking random access building "
+ "encrypted file");
+ return rc;
+ }
+
+ /* We are currently only supporting update on seekable and size_known original files */
+ if (r && w && ((!seekable) || (!size_known)))
+ {
+ rc = RC (rcKrypto, rcFile, rcConstructing, rcFile, rcIncorrect);
+ LOGERR (klogErr, rc, "encryptor/decryptor requires seek and size ability");
+ return rc;
+ }
+
+ rc = KFileAddRef (encrypted);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "Could not add reference to encrypted file");
+ return rc;
+ }
+ else
+ {
+ KEncFile * self;
+
+ /* allocate and zero out an object since we want much of it to be zeroed */
+ self = calloc (1, sizeof *self);
+ if (self == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+ LOGERR (klogSys, rc,
+ "out of memory creating encryptor and/or decryptor");
+ }
+ else
+ {
+ /* all KFiles get this initialization */
+ rc = KFileInit (&self->dad, (const KFile_vt*)&vtKEncFile, "KEncFile", "no-name", r, w);
+ if (rc)
+ LOGERR (klogInt, rc, "error with init for encrypted file");
+
+ else
+ {
+ self->encrypted = encrypted;
+ self->swarm = s;
+
+ /* write only or empty updatable */
+ if ((!r) || (w && size_known && (enc_size == 0)))
+ {
+ /* dummy size to make the SetSizeInt work */
+ self->enc_size = enc_size;
+ rc = KEncFileSetSizeInt (self, 0);
+ self->seekable = r && seekable;
+ }
+ else
+ {
+ self->enc_size = enc_size;
+ self->seekable = seekable;
+ self->size_known = size_known;
+ rc = KEncFileHeaderRead (self);
+ }
+ if (rc == 0)
+ {
+ *pself = self;
+ return 0;
+ }
+ }
+ free (self);
+ }
+ KFileRelease (encrypted);
+ }
+ return rc;
+}
+
+
+static
+rc_t KEncFileMakeSize (KEncFile *self)
+{
+ KEncFileBlockId fid;
+ rc_t rc;
+
+ assert (self->seekable);
+
+ /*
+ * turn the encrypted size into a block/offset
+ * the offset should be 0 for a missing footer
+ * or the size of a footer
+ */
+ fid = EncryptedPos_to_BlockId (self->enc_size, NULL, NULL);
+
+ assert (BlockId_to_EncryptedPos(fid) + sizeof (self->foot) == self->enc_size);
+
+ if (fid == 0)
+ self->dec_size = 0;
+
+ else
+ {
+ KEncFileBlockId bid = fid - 1;
+ KEncFileBlock b;
+
+ /*
+ * not calling this a seek as its not reading a data block
+ * out of order that will be modified
+ */
+ rc = KEncFileBlockRead (self, &b, bid, false);
+ if (rc)
+ return rc;
+ else
+ {
+ if (BufferAllZero(&b, sizeof b) == true)
+ self->dec_size = BlockId_to_DecryptedPos (bid) +
+ sizeof self->block.data;
+
+ else
+ self->dec_size = BlockId_to_DecryptedPos (bid) + b.u.valid;
+ }
+ }
+ self->size_known = true;
+ return 0;
+}
+
+
+/* ----------
+ * MakeCmn
+ * common parameter validation for all encryptor/decryptors
+ */
+static
+rc_t KEncFileMakeCmn (KEncFile ** pself, KFile * encrypted, const KKey * key,
+ bool r, bool w, bool s)
+{
+ rc_t rc = 0, orc;
+
+ assert (((r == true)||(r == false))&&((w == true)||(w == false)));
+ assert (w || r);
+
+ if (pself == NULL)
+ {
+ rc = RC (rcKrypto, rcFile, rcConstructing, rcSelf, rcNull);
+ LOGERR (klogErr, rc,
+ "pointer to self NULL when creating "
+ "an encryptor/decryptor");
+ }
+ else
+ *pself = NULL;
+
+ if (encrypted == NULL)
+ {
+ orc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+ LOGERR (klogErr, orc,
+ "encrypted file not readable when creating "
+ "an encryptor/decryptor");
+ if (rc == 0)
+ rc = orc;
+ }
+
+ if (key == NULL)
+ {
+ orc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+ LOGERR (klogErr, orc,
+ "key not supplied when creating an encryptor/decryptor");
+ if (rc == 0)
+ rc = orc;
+ }
+
+ CRC32Init(); /* likely to be called way too often */
+
+ switch (key->type)
+ {
+ default:
+ orc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+ PLOGERR (klogErr,
+ (klogErr, orc, "invalid key type '$(T)' should be "
+ "kkeyAES128(1), kkeyAES192(2) or kkeyAES256(3)",
+ "T=%u", key->type));
+ if (rc == 0)
+ rc = orc;
+ break;
+
+ case kkeyAES128:
+ case kkeyAES192:
+ case kkeyAES256:
+ break;
+ }
+ if (rc == 0)
+ {
+ KEncFile * self;
+
+ assert ((r == true) || (r == false));
+ assert ((w == true) || (w == false));
+
+ rc = KEncFileMakeInt (&self, encrypted, r, w, false, s);
+ if (rc == 0)
+ {
+ rc = KEncFileCiphersInit (self, key, r, w);
+ if (rc == 0)
+ {
+
+ if (self->seekable && self->size_known)
+ rc = KEncFileMakeSize (self);
+
+ if (rc == 0)
+ {
+ *pself = self;
+ return 0;
+ }
+ }
+ KFileRelease (&self->dad);
+ }
+ }
+ return rc;
+}
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeRead_v2 (const KFile ** pself,
+ const KFile * encrypted,
+ const KKey * key)
+{
+ KEncFile * self;
+ rc_t rc;
+
+ /*
+ * casting encrypted dowsn't actually make it writable
+ * it just lets us use a common constructor
+ */
+ rc = KEncFileMakeCmn (&self, (KFile *)encrypted, key, true, false, false);
+ if (rc)
+ LOGERR (klogErr, rc, "error constructing decryptor");
+
+ else
+ *pself = &self->dad;
+
+ return rc;
+}
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through form the
+ * first byte to the last.
+ *
+ * Existing content is lost.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeWrite_v2 (KFile ** pself,
+ KFile * encrypted,
+ const KKey * key)
+{
+ KEncFile * self;
+ rc_t rc;
+
+ rc = KEncFileMakeCmn (&self, encrypted, key, false, true, false);
+ if (rc)
+ LOGERR (klogErr, rc, "error constructing encryptor");
+
+ else
+ *pself = &self->dad;
+
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC KEncFileMakeUpdate_v2 (KFile ** pself,
+ KFile * encrypted,
+ const KKey * key)
+{
+ KEncFile * self;
+ rc_t rc;
+
+/* static int count = 0; */
+
+/* KOutMsg ("%s: %d\n",__func__,++count); */
+
+ rc = KEncFileMakeCmn (&self, (KFile *)encrypted, key, true, true, false);
+ if (rc)
+ LOGERR (klogErr, rc, "error constructing encryptor/decryptor");
+
+ else
+ *pself = &self->dad;
+
+ return rc;
+}
+
+
+/* ----------
+ * Swarm mode encrypted file can be writtenout of order but the footer is not
+ * handled automatically
+ */
+LIB_EXPORT rc_t CC KEncFileMakeBlock_v2 (KFile ** pself,
+ KFile * encrypted,
+ const KKey * key)
+{
+ KEncFile * self;
+ rc_t rc;
+
+/* static int count = 0; */
+
+/* KOutMsg ("%s: %d\n",__func__,++count); */
+
+ rc = KEncFileMakeCmn (&self, (KFile *)encrypted, key, false, true, true);
+ if (rc)
+ LOGERR (klogErr, rc, "error constructing encryptor/decryptor");
+
+ else
+ *pself = &self->dad;
+
+ return rc;
+}
+
+
+/* ----------
+ * Validate mode is useful only for the KFileEncValidate function
+ */
+static
+rc_t KEncFileMakeValidate (KEncFile ** pself, const KFile * encrypted)
+{
+ KEncFile * self;
+ rc_t rc;
+
+ assert (pself);
+ assert (encrypted);
+
+ rc = KEncFileMakeInt (&self, (KFile*)encrypted, true, false, true, false);
+ if (rc)
+ LOGERR (klogErr, rc, "error making KEncFile");
+ else
+ {
+ rc = KEncFileHeaderRead (self);
+ if (rc)
+ LOGERR (klogErr, rc, "error reading encrypted file header");
+ else
+ {
+ *pself = self;
+ return 0;
+ }
+ }
+ *pself = NULL;
+ return rc;
+}
+
+
+/* ======================================================================
+ * Interface extensions
+ */
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ *
+ * This will fail if the file being tested is not "at position 0" and can not
+ * be sought back to 0.
+ */
+
+
+
+LIB_EXPORT rc_t CC KEncFileValidate_v2 (const KFile * encrypted)
+{
+ KEncFile * file;
+ rc_t rc = 0;
+
+ /* fail if a NULL parameter: can't validate all addresses */
+ if (encrypted == NULL)
+ {
+ rc = RC (rcKrypto, rcFile, rcValidating, rcParam, rcNull);
+ LOGERR (klogErr, rc, "encrypted file was null when trying to validate");
+ return rc;
+ }
+
+ /* file header is validated within the call to Make Validate */
+ rc = KEncFileMakeValidate (&file, encrypted);
+ if (rc)
+ LOGERR (klogErr, rc,
+ "unable to validate encrypted file due to "
+ "inability to open as encrypted file");
+ else
+ {
+ uint64_t pos; /* position within the encrypted file */
+ uint64_t block_count = 0; /* how many blocks have we read */
+
+ /* loop through all data blocks */
+ pos = sizeof (KEncFileHeader);
+ for (block_count = 0; ; ++block_count)
+ {
+ rc_t vrc;
+ STSMSG (2, ("reading block '%u' at '%lu'", block_count,
+ BlockId_to_EncryptedPos(block_count)));
+
+ vrc = KEncFileBlockRead (file, NULL, block_count, true);
+ if (vrc != 0)
+ {
+ if ( rc == 0 )
+ rc = vrc;
+ if ( GetRCContext( vrc ) != rcValidating )
+ {
+ STSMSG (2, ("read error at block '%u'", block_count));
+ break;
+ }
+ }
+ if (file->eof)
+ {
+ STSMSG (2, ("block '%u' was end", block_count));
+ break;
+ }
+ pos += sizeof (KEncFileData);
+ }
+ KFileRelease (&file->dad);
+ }
+ return (rc);
+}
+
+
+LIB_EXPORT rc_t CC KEncFileHeaderWrite_v2 (KFile * dad)
+{
+ rc_t rc;
+
+ if (dad->vt != (const KFile_vt*)&vtKEncFile)
+ {
+ rc = RC (rcKrypto, rcFile, rcWriting, rcType, rcIncorrect);
+ LOGERR (klogErr, rc, "file not an encryptor requested writing header");
+ }
+ else
+ {
+ KEncFile * self;
+ self = (KEncFile*)dad;
+
+ rc = KEncFileHeaderWrite (self);
+ }
+ return rc;
+}
+
+LIB_EXPORT rc_t CC KEncFileFooterWrite_v2 (KFile * dad)
+{
+ rc_t rc;
+
+ if (dad->vt != (const KFile_vt*)&vtKEncFile)
+ {
+ rc = RC (rcKrypto, rcFile, rcWriting, rcType, rcIncorrect);
+ LOGERR (klogErr, rc, "file not an encryptor requested writing footer");
+ }
+ else
+ {
+ KEncFile * self;
+ self = (KEncFile*)dad;
+
+ rc = KEncFileFooterWrite (self);
+ }
+ return rc;
+}
+
+/* ----------
+ * Identify whether a file is a KEncFile type encrypted file by the header.
+ * read the header into a buffer and pass it into this function.
+ * The buffer_size needs to be at least 8 but more bytes lead to a better
+ * check up to the size of the header of a KEncFile type encrypted file.
+ * As the header may change in the future (in a backwards compatible way)
+ * that size might change from the current 16.
+ *
+ * Possible returns:
+ * 0:
+ * the file is an identified KEncFile type file. False positives are
+ * possible if a file happens to match at 8 or more bytes
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ * the file is definitely not a KEncFile type encrypted file.
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ * bad parameters in the call
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ * not a large enough buffer to make an identification
+ */
+LIB_EXPORT rc_t CC KFileIsEnc_v2 (const char * buffer, size_t buffer_size)
+{
+ KEncFileHeader header;
+ size_t count;
+ bool byte_swapped;
+
+ if ((buffer == NULL) || (buffer_size == 0))
+ return RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull);
+
+ /* must have the signature to consider it an Encrypted file */
+ if (buffer_size < sizeof (header.file_sig))
+ return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient);
+
+ if ((memcmp (buffer, &const_header.file_sig, sizeof const_header.file_sig ) != 0) &&
+ (memcmp (buffer, &const_header_sra.file_sig, sizeof const_header_sra.file_sig ) != 0))
+ return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType);
+
+ /* can we also check the byte order? It's okay if we can't */
+ if (buffer_size < sizeof header.file_sig + sizeof header.byte_order)
+ return 0;
+
+ count = buffer_size > sizeof header ? sizeof header : buffer_size;
+
+ memcpy (&header, buffer, count);
+
+ if (header.byte_order == const_header.byte_order)
+ byte_swapped = false;
+
+ else if (header.byte_order == const_bswap_header.byte_order)
+ byte_swapped = true;
+
+ /* but if it's not we fail with a different error */
+ else
+ return RC (rcFS, rcFile, rcIdentifying, rcFile, rcOutoforder);
+
+ /* can we check the version as well? It's okay if we can't */
+ if (buffer_size < sizeof (header))
+ return 0;
+
+ assert (sizeof (header.version) == 4);
+ if (byte_swapped)
+ header.version = bswap_32(header.version);
+
+ /* and it's a different error if the version is not within our range */
+ if ((header.version <= 0) || (header.version > eCurrentVersion))
+ return RC (rcKrypto, rcFile, rcClassifying, rcFile, rcBadVersion);
+
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC KFileIsSraEnc (const char * buffer, size_t buffer_size)
+{
+ KEncFileHeader header;
+ size_t count;
+ bool byte_swapped;
+
+ if ((buffer == NULL) || (buffer_size == 0))
+ return RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull);
+
+
+ if (buffer_size < sizeof (header.file_sig))
+ return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient);
+
+ if (memcmp (buffer, &const_header_sra.file_sig, sizeof const_header.file_sig ) != 0)
+ return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType);
+
+ if (buffer_size < sizeof header.file_sig + sizeof header.byte_order)
+ return 0;
+
+ count = buffer_size > sizeof header ? sizeof header : buffer_size;
+
+ memcpy (&header, buffer, count);
+
+ if (header.byte_order == const_header.byte_order)
+ byte_swapped = false;
+
+ else if (header.byte_order == const_bswap_header.byte_order)
+ byte_swapped = true;
+
+ else
+ return RC (rcFS, rcFile, rcIdentifying, rcFile, rcOutoforder);
+
+ if (buffer_size < sizeof (header))
+ return 0;
+
+ assert (sizeof (header.version) == 4);
+ if (byte_swapped)
+ header.version = bswap_32(header.version);
+
+ if ((header.version <= 0) || (header.version > eCurrentVersion))
+ return RC (rcKrypto, rcFile, rcClassifying, rcFile, rcBadVersion);
+
+ return 0;
+}
+
+/* end of file encfile.c */
+
+
+
diff --git a/libs/krypto/key.c b/libs/krypto/key.c
new file mode 100644
index 0000000..c57a45f
--- /dev/null
+++ b/libs/krypto/key.c
@@ -0,0 +1,126 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+#include <krypto/key.h>
+#include <kapp/args.h>
+#include <klib/checksum.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <string.h>
+
+KRYPTO_EXTERN_DATA KKey KKeyEncrypt;
+KRYPTO_EXTERN_DATA KKey KKeyDecrypt;
+KRYPTO_EXTERN_DATA char WGAEncryptPassword[WGA_MAX_PASSWORD];
+KRYPTO_EXTERN_DATA char WGADecryptPassword[WGA_MAX_PASSWORD];
+
+
+static rc_t KKeyInitInt (KKey * self, KKeyType key_type,
+ const void * password, size_t password_size)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcSelf, rcNull);
+
+ if (key_type >= kkeyTypeCount)
+ return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcInvalid);
+
+ if (key_type == kkeyNone)
+ return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcIncorrect);
+
+ if (password == NULL)
+ return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcNull);
+
+ if (password_size == 0)
+ return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcTooShort);
+
+ {
+ SHA256State state;
+ size_t z;
+ uint8_t digest [64];
+
+
+ SHA256StateInit (&state);
+ SHA256StateAppend (&state, password, password_size);
+ SHA256StateFinish (&state, digest);
+
+ switch (self->type = key_type)
+ {
+ default:
+ z = 0;
+ break;
+
+ case kkeyAES128:
+ z = 128/8;
+ break;
+
+ case kkeyAES192:
+ z = 192/8;
+ break;
+
+ case kkeyAES256:
+ z = 256/8;
+ break;
+ }
+ memcpy (self->text, digest, z);
+ }
+ return 0;
+}
+
+LIB_EXPORT rc_t CC KKeyInitRead (KKey * self, KKeyType key_type,
+ const void * password, size_t password_size)
+{
+ return KKeyInitInt (self, key_type, password, password_size);
+}
+
+LIB_EXPORT rc_t CC KKeyInitUpdate (KKey * self, KKeyType key_type,
+ const void * password, size_t password_size)
+{
+ if (password_size < kkeyMinimumSize)
+ {
+ rc_t rc = RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam,
+ rcTooShort);
+#if FAIL_SHORT_PASSWORD
+ return rc;
+#else
+ PLOGERR (klogWarn, (klogWarn, rc,
+ "Password is shorter than recommended '$(P)' is less than '$(Q)'"
+ , "P=%zu,Q=%u"
+ , password_size
+ , ( uint32_t ) kkeyMinimumSize
+ ));
+#endif
+ }
+ return KKeyInitInt (self, key_type, password, password_size);
+}
+
+
+
+LIB_EXPORT rc_t CC KKeyInitHex()
+{
+ return 0;
+}
+
+/* end of file encfile.c */
+
diff --git a/libs/krypto/libkrypto.vers b/libs/krypto/libkrypto.vers
new file mode 100644
index 0000000..5b09c67
--- /dev/null
+++ b/libs/krypto/libkrypto.vers
@@ -0,0 +1 @@
+1.0.14
diff --git a/libs/align/libalign-writer.vers b/libs/krypto/libkryptotest.vers
similarity index 100%
copy from libs/align/libalign-writer.vers
copy to libs/krypto/libkryptotest.vers
diff --git a/libs/krypto/manager.c b/libs/krypto/manager.c
new file mode 100644
index 0000000..8b8c766
--- /dev/null
+++ b/libs/krypto/manager.c
@@ -0,0 +1,11 @@
+#error "obsolete do not use"
+
+
+
+
+
+
+
+
+
+
diff --git a/libs/krypto/ncbi-priv.h b/libs/krypto/ncbi-priv.h
new file mode 100644
index 0000000..4814e4f
--- /dev/null
+++ b/libs/krypto/ncbi-priv.h
@@ -0,0 +1,122 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#ifndef _h_krypto_ncbi_priv_
+#define _h_krypto_ncbi_priv_
+
+#include <klib/defs.h>
+
+#ifdef _GNUC_
+#include <v128.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined (USEVEC)
+#if defined (USEAESNI)
+
+# if ! defined (USEVECREG)
+/*
+ * AES_NI && ! VECREG
+ * Illegal
+ */
+# error "Bad combination of defines"
+
+# else
+
+/*
+ * AESNI && VECREG
+ * use AES-NI, and SSSE3 and lower
+ */
+
+# define USE_AES_NI true
+# define USE_VEC_REG true
+# define USE_VEC true
+# define CMEMBER(name) KCipherVecAesNi##name
+# define CIPHER_IMPL KCipherVecAesNi
+# define AESBCMEMBER(name) KAESBlockCipherVecAesNi##name
+# define AESBCIPHER_IMPL KAESBlockCipherVecAesNi
+# define NULLBCMEMBER(name) KNullBlockCipherVecAesNi##name
+# define NULLBCIPHER_IMPL KNullBlockCipherVecAesNi
+# define BCIPHER_VALUE CipherVec
+
+# endif
+#elif defined (USEVECREG)
+
+# define USE_AES_NI false
+# define USE_VEC_REG true
+# define USE_VEC true
+# define CMEMBER(name) KCipherVecReg##name
+# define CIPHER_IMPL KCipherVecReg
+# define AESBCMEMBER(name) KAESBlockCipherVecReg##name
+# define AESBCIPHER_IMPL KAESBlockCipherVecReg
+# define NULLBCMEMBER(name) KNullBlockCipherVecReg##name
+# define NULLBCIPHER_IMPL KNullBlockCipherVecReg
+# define BCIPHER_VALUE CipherVec
+
+#else
+
+# define USE_AES_NI false
+# define USE_VEC_REG false
+# define USE_VEC true
+# define CMEMBER(name) KCipherVec##name
+# define CIPHER_IMPL KCipherVec
+# define AESBCMEMBER(name) KAESBlockCipherVec##name
+# define AESBCIPHER_IMPL KAESBlockCipherVec
+# define NULLBCMEMBER(name) KNullBlockCipherVec##name
+# define NULLBCIPHER_IMPL KNullBlockCipherVec
+# define BCIPHER_VALUE CipherVec
+
+#endif
+
+#else /* ! defined (USEVEC) */
+
+
+# define USE_AES_NI false
+# define USE_VEC_REG false
+# define USE_VEC false
+# define MEMBER(name) KCipherByte##name
+# define CMEMBER(name) KCipherByte##name
+# define CIPHER_IMPL KCipherByte
+# define AESBCMEMBER(name) KAESBlockCipherByte##name
+# define AESBCIPHER_IMPL KAESBlockCipherByte
+# define NULLBCMEMBER(name) KNullBlockCipherByte##name
+# define NULLBCIPHER_IMPL KNullBlockCipherByte
+# define BCIPHER_VALUE CipherBlock
+
+#endif /* defined (USEVEC) */
+
+#define CLASS_STRING(name) #name
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_ncbi_priv_ */
+
+
diff --git a/libs/krypto/no-null-ncbi.aes-ni.pic.o.list b/libs/krypto/no-null-ncbi.aes-ni.pic.o.list
new file mode 100644
index 0000000..5e3ac1a
--- /dev/null
+++ b/libs/krypto/no-null-ncbi.aes-ni.pic.o.list
@@ -0,0 +1,2539 @@
+GAS LISTING /tmp/cc32muHp.s page 1
+
+
+ 1 .file "no-null-ncbi.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 CC000000 .text
+ 8 0200AA00
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .section .rodata
+ 11 .align 8
+ 12 .LC0:
+ 13 0000 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 13 652F726F
+ 13 6461726D
+ 13 65722F73
+ 13 72615F73
+ 14 .text
+ 15 .globl KNullBlockCipherVecAesNiMake
+ 16 .type KNullBlockCipherVecAesNiMake, @function
+ 17 KNullBlockCipherVecAesNiMake:
+ 18 .LFB15:
+ 19 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <krypto/extern.h>
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "ncbi-priv.h"
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "cipher-priv.h"
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* #include "blockcipher-priv.h" */
+
GAS LISTING /tmp/cc32muHp.s page 2
+
+
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <klib/rc.h>
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* ----------------------------------------------------------------------
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Make
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Create a new Null Block Cipher object.
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * The processor is checked to see if this particular version is supported on
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * this particular CPU.
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** */
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** struct KBlockCipher;
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc_t NULLBCMEMBER(Make) (struct KBlockCipher ** new_obj)
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** {
+ 20 .loc 1 43 0
+ 21 .cfi_startproc
+ 22 0000 55 pushq %rbp
+ 23 .LCFI0:
+ 24 .cfi_def_cfa_offset 16
+ 25 0001 4889E5 movq %rsp, %rbp
+ 26 .cfi_offset 6, -16
+ 27 .LCFI1:
+ 28 .cfi_def_cfa_register 6
+ 29 0004 4883EC20 subq $32, %rsp
+ 30 0008 48897DE8 movq %rdi, -24(%rbp)
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc_t rc;
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* Check parameter first */
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** if (new_obj == NULL)
+ 31 .loc 1 47 0
+ 32 000c 48837DE8 cmpq $0, -24(%rbp)
+ 32 00
+ 33 0011 7522 jne .L2
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 34 .loc 1 48 0
+ 35 0013 B9300000 movl $48, %ecx
+ 35 00
+ 36 0018 488D1500 leaq __func__.2445(%rip), %rdx
+ 36 000000
+ 37 001f 488D3500 leaq .LC0(%rip), %rsi
+ 37 000000
+ 38 0026 BF878F00 movl $-2030006393, %edi
+ 38 87
+ 39 002b E8000000 call SetRCFileFuncLine at PLT
+ 39 00
+ 40 0030 8945FC movl %eax, -4(%rbp)
+ 41 0033 EB2B jmp .L3
+ 42 .L2:
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** else
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** {
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *new_obj = NULL;
+ 43 .loc 1 52 0
+ 44 0035 488B45E8 movq -24(%rbp), %rax
+ 45 0039 48C70000 movq $0, (%rax)
+ 45 000000
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
GAS LISTING /tmp/cc32muHp.s page 3
+
+
+ 46 .loc 1 54 0
+ 47 0040 B9360000 movl $54, %ecx
+ 47 00
+ 48 0045 488D1500 leaq __func__.2445(%rip), %rdx
+ 48 000000
+ 49 004c 488D3500 leaq .LC0(%rip), %rsi
+ 49 000000
+ 50 0053 BF038500 movl $-2030009085, %edi
+ 50 87
+ 51 0058 E8000000 call SetRCFileFuncLine at PLT
+ 51 00
+ 52 005d 8945FC movl %eax, -4(%rbp)
+ 53 .L3:
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** }
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** return rc;
+ 54 .loc 1 56 0
+ 55 0060 8B45FC movl -4(%rbp), %eax
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** }
+ 56 .loc 1 57 0
+ 57 0063 C9 leave
+ 58 0064 C3 ret
+ 59 .cfi_endproc
+ 60 .LFE15:
+ 61 .size KNullBlockCipherVecAesNiMake, .-KNullBlockCipherVecAesNiMake
+ 62 .section .rodata
+ 63 003a 00000000 .align 16
+ 63 0000
+ 64 .type __func__.2445, @object
+ 65 .size __func__.2445, 29
+ 66 __func__.2445:
+ 67 0040 4B4E756C .string "KNullBlockCipherVecAesNiMake"
+ 67 6C426C6F
+ 67 636B4369
+ 67 70686572
+ 67 56656341
+ 68 005d 000000 .align 16
+ 69 .type __PRETTY_FUNCTION__.2444, @object
+ 70 .size __PRETTY_FUNCTION__.2444, 29
+ 71 __PRETTY_FUNCTION__.2444:
+ 72 0060 4B4E756C .string "KNullBlockCipherVecAesNiMake"
+ 72 6C426C6F
+ 72 636B4369
+ 72 70686572
+ 72 56656341
+ 73 .text
+ 74 .Letext0:
+ 75 .section .debug_loc,"", at progbits
+ 76 .Ldebug_loc0:
+ 77 .LLST0:
+ 78 0000 00000000 .quad .LFB15-.Ltext0
+ 78 00000000
+ 79 0008 01000000 .quad .LCFI0-.Ltext0
+ 79 00000000
+ 80 0010 0200 .value 0x2
+ 81 0012 77 .byte 0x77
+ 82 0013 08 .sleb128 8
+ 83 0014 01000000 .quad .LCFI0-.Ltext0
+
GAS LISTING /tmp/cc32muHp.s page 4
+
+
+ 83 00000000
+ 84 001c 04000000 .quad .LCFI1-.Ltext0
+ 84 00000000
+ 85 0024 0200 .value 0x2
+ 86 0026 77 .byte 0x77
+ 87 0027 10 .sleb128 16
+ 88 0028 04000000 .quad .LCFI1-.Ltext0
+ 88 00000000
+ 89 0030 65000000 .quad .LFE15-.Ltext0
+ 89 00000000
+ 90 0038 0200 .value 0x2
+ 91 003a 76 .byte 0x76
+ 92 003b 10 .sleb128 16
+ 93 003c 00000000 .quad 0x0
+ 93 00000000
+ 94 0044 00000000 .quad 0x0
+ 94 00000000
+ 95 .file 2 "/usr/include/stdint.h"
+ 96 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 97 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 98 .section .debug_info
+ 99 0000 24070000 .long 0x724
+ 100 0004 0200 .value 0x2
+ 101 0006 00000000 .long .Ldebug_abbrev0
+ 102 000a 08 .byte 0x8
+ 103 000b 01 .uleb128 0x1
+ 104 000c 00000000 .long .LASF258
+ 105 0010 01 .byte 0x1
+ 106 0011 00000000 .long .LASF259
+ 107 0015 00000000 .long .LASF260
+ 108 0019 00000000 .quad .Ltext0
+ 108 00000000
+ 109 0021 00000000 .quad .Letext0
+ 109 00000000
+ 110 0029 00000000 .long .Ldebug_line0
+ 111 002d 02 .uleb128 0x2
+ 112 002e 01 .byte 0x1
+ 113 002f 06 .byte 0x6
+ 114 0030 00000000 .long .LASF0
+ 115 0034 02 .uleb128 0x2
+ 116 0035 02 .byte 0x2
+ 117 0036 05 .byte 0x5
+ 118 0037 00000000 .long .LASF1
+ 119 003b 03 .uleb128 0x3
+ 120 003c 04 .byte 0x4
+ 121 003d 05 .byte 0x5
+ 122 003e 696E7400 .string "int"
+ 123 0042 02 .uleb128 0x2
+ 124 0043 08 .byte 0x8
+ 125 0044 05 .byte 0x5
+ 126 0045 00000000 .long .LASF2
+ 127 0049 02 .uleb128 0x2
+ 128 004a 01 .byte 0x1
+ 129 004b 08 .byte 0x8
+ 130 004c 00000000 .long .LASF3
+ 131 0050 02 .uleb128 0x2
+ 132 0051 02 .byte 0x2
+
GAS LISTING /tmp/cc32muHp.s page 5
+
+
+ 133 0052 07 .byte 0x7
+ 134 0053 00000000 .long .LASF4
+ 135 0057 04 .uleb128 0x4
+ 136 0058 00000000 .long .LASF7
+ 137 005c 02 .byte 0x2
+ 138 005d 34 .byte 0x34
+ 139 005e 62000000 .long 0x62
+ 140 0062 02 .uleb128 0x2
+ 141 0063 04 .byte 0x4
+ 142 0064 07 .byte 0x7
+ 143 0065 00000000 .long .LASF5
+ 144 0069 02 .uleb128 0x2
+ 145 006a 08 .byte 0x8
+ 146 006b 07 .byte 0x7
+ 147 006c 00000000 .long .LASF6
+ 148 0070 04 .uleb128 0x4
+ 149 0071 00000000 .long .LASF8
+ 150 0075 03 .byte 0x3
+ 151 0076 30 .byte 0x30
+ 152 0077 57000000 .long 0x57
+ 153 007b 05 .uleb128 0x5
+ 154 007c 08 .byte 0x8
+ 155 007d 07 .byte 0x7
+ 156 007e 02 .uleb128 0x2
+ 157 007f 01 .byte 0x1
+ 158 0080 06 .byte 0x6
+ 159 0081 00000000 .long .LASF9
+ 160 0085 06 .uleb128 0x6
+ 161 0086 00000000 .long .LASF32
+ 162 008a 04 .byte 0x4
+ 163 008b 04 .byte 0x4
+ 164 008c 5A .byte 0x5a
+ 165 008d 16010000 .long 0x116
+ 166 0091 07 .uleb128 0x7
+ 167 0092 00000000 .long .LASF10
+ 168 0096 00 .sleb128 0
+ 169 0097 07 .uleb128 0x7
+ 170 0098 00000000 .long .LASF11
+ 171 009c 01 .sleb128 1
+ 172 009d 07 .uleb128 0x7
+ 173 009e 00000000 .long .LASF12
+ 174 00a2 02 .sleb128 2
+ 175 00a3 07 .uleb128 0x7
+ 176 00a4 00000000 .long .LASF13
+ 177 00a8 03 .sleb128 3
+ 178 00a9 07 .uleb128 0x7
+ 179 00aa 00000000 .long .LASF14
+ 180 00ae 04 .sleb128 4
+ 181 00af 07 .uleb128 0x7
+ 182 00b0 00000000 .long .LASF15
+ 183 00b4 05 .sleb128 5
+ 184 00b5 07 .uleb128 0x7
+ 185 00b6 00000000 .long .LASF16
+ 186 00ba 06 .sleb128 6
+ 187 00bb 07 .uleb128 0x7
+ 188 00bc 00000000 .long .LASF17
+ 189 00c0 07 .sleb128 7
+
GAS LISTING /tmp/cc32muHp.s page 6
+
+
+ 190 00c1 07 .uleb128 0x7
+ 191 00c2 00000000 .long .LASF18
+ 192 00c6 08 .sleb128 8
+ 193 00c7 07 .uleb128 0x7
+ 194 00c8 00000000 .long .LASF19
+ 195 00cc 09 .sleb128 9
+ 196 00cd 07 .uleb128 0x7
+ 197 00ce 00000000 .long .LASF20
+ 198 00d2 0A .sleb128 10
+ 199 00d3 07 .uleb128 0x7
+ 200 00d4 00000000 .long .LASF21
+ 201 00d8 0B .sleb128 11
+ 202 00d9 07 .uleb128 0x7
+ 203 00da 00000000 .long .LASF22
+ 204 00de 0C .sleb128 12
+ 205 00df 07 .uleb128 0x7
+ 206 00e0 00000000 .long .LASF23
+ 207 00e4 0D .sleb128 13
+ 208 00e5 07 .uleb128 0x7
+ 209 00e6 00000000 .long .LASF24
+ 210 00ea 0E .sleb128 14
+ 211 00eb 07 .uleb128 0x7
+ 212 00ec 00000000 .long .LASF25
+ 213 00f0 0E .sleb128 14
+ 214 00f1 07 .uleb128 0x7
+ 215 00f2 00000000 .long .LASF26
+ 216 00f6 0F .sleb128 15
+ 217 00f7 07 .uleb128 0x7
+ 218 00f8 00000000 .long .LASF27
+ 219 00fc 10 .sleb128 16
+ 220 00fd 07 .uleb128 0x7
+ 221 00fe 00000000 .long .LASF28
+ 222 0102 11 .sleb128 17
+ 223 0103 07 .uleb128 0x7
+ 224 0104 00000000 .long .LASF29
+ 225 0108 12 .sleb128 18
+ 226 0109 07 .uleb128 0x7
+ 227 010a 00000000 .long .LASF30
+ 228 010e 13 .sleb128 19
+ 229 010f 07 .uleb128 0x7
+ 230 0110 00000000 .long .LASF31
+ 231 0114 14 .sleb128 20
+ 232 0115 00 .byte 0x0
+ 233 0116 06 .uleb128 0x6
+ 234 0117 00000000 .long .LASF33
+ 235 011b 04 .byte 0x4
+ 236 011c 04 .byte 0x4
+ 237 011d 77 .byte 0x77
+ 238 011e 9D020000 .long 0x29d
+ 239 0122 07 .uleb128 0x7
+ 240 0123 00000000 .long .LASF34
+ 241 0127 00 .sleb128 0
+ 242 0128 07 .uleb128 0x7
+ 243 0129 00000000 .long .LASF35
+ 244 012d 01 .sleb128 1
+ 245 012e 07 .uleb128 0x7
+ 246 012f 00000000 .long .LASF36
+
GAS LISTING /tmp/cc32muHp.s page 7
+
+
+ 247 0133 02 .sleb128 2
+ 248 0134 07 .uleb128 0x7
+ 249 0135 00000000 .long .LASF37
+ 250 0139 03 .sleb128 3
+ 251 013a 07 .uleb128 0x7
+ 252 013b 00000000 .long .LASF38
+ 253 013f 04 .sleb128 4
+ 254 0140 07 .uleb128 0x7
+ 255 0141 00000000 .long .LASF39
+ 256 0145 05 .sleb128 5
+ 257 0146 07 .uleb128 0x7
+ 258 0147 00000000 .long .LASF40
+ 259 014b 06 .sleb128 6
+ 260 014c 07 .uleb128 0x7
+ 261 014d 00000000 .long .LASF41
+ 262 0151 07 .sleb128 7
+ 263 0152 07 .uleb128 0x7
+ 264 0153 00000000 .long .LASF42
+ 265 0157 08 .sleb128 8
+ 266 0158 07 .uleb128 0x7
+ 267 0159 00000000 .long .LASF43
+ 268 015d 09 .sleb128 9
+ 269 015e 07 .uleb128 0x7
+ 270 015f 00000000 .long .LASF44
+ 271 0163 0A .sleb128 10
+ 272 0164 07 .uleb128 0x7
+ 273 0165 00000000 .long .LASF45
+ 274 0169 0B .sleb128 11
+ 275 016a 07 .uleb128 0x7
+ 276 016b 00000000 .long .LASF46
+ 277 016f 0C .sleb128 12
+ 278 0170 07 .uleb128 0x7
+ 279 0171 00000000 .long .LASF47
+ 280 0175 0D .sleb128 13
+ 281 0176 07 .uleb128 0x7
+ 282 0177 00000000 .long .LASF48
+ 283 017b 0E .sleb128 14
+ 284 017c 07 .uleb128 0x7
+ 285 017d 00000000 .long .LASF49
+ 286 0181 0F .sleb128 15
+ 287 0182 07 .uleb128 0x7
+ 288 0183 00000000 .long .LASF50
+ 289 0187 10 .sleb128 16
+ 290 0188 07 .uleb128 0x7
+ 291 0189 00000000 .long .LASF51
+ 292 018d 11 .sleb128 17
+ 293 018e 07 .uleb128 0x7
+ 294 018f 00000000 .long .LASF52
+ 295 0193 12 .sleb128 18
+ 296 0194 07 .uleb128 0x7
+ 297 0195 00000000 .long .LASF53
+ 298 0199 13 .sleb128 19
+ 299 019a 07 .uleb128 0x7
+ 300 019b 00000000 .long .LASF54
+ 301 019f 14 .sleb128 20
+ 302 01a0 07 .uleb128 0x7
+ 303 01a1 00000000 .long .LASF55
+
GAS LISTING /tmp/cc32muHp.s page 8
+
+
+ 304 01a5 15 .sleb128 21
+ 305 01a6 07 .uleb128 0x7
+ 306 01a7 00000000 .long .LASF56
+ 307 01ab 16 .sleb128 22
+ 308 01ac 07 .uleb128 0x7
+ 309 01ad 00000000 .long .LASF57
+ 310 01b1 17 .sleb128 23
+ 311 01b2 07 .uleb128 0x7
+ 312 01b3 00000000 .long .LASF58
+ 313 01b7 18 .sleb128 24
+ 314 01b8 07 .uleb128 0x7
+ 315 01b9 00000000 .long .LASF59
+ 316 01bd 19 .sleb128 25
+ 317 01be 07 .uleb128 0x7
+ 318 01bf 00000000 .long .LASF60
+ 319 01c3 1A .sleb128 26
+ 320 01c4 07 .uleb128 0x7
+ 321 01c5 00000000 .long .LASF61
+ 322 01c9 1B .sleb128 27
+ 323 01ca 07 .uleb128 0x7
+ 324 01cb 00000000 .long .LASF62
+ 325 01cf 1C .sleb128 28
+ 326 01d0 07 .uleb128 0x7
+ 327 01d1 00000000 .long .LASF63
+ 328 01d5 1D .sleb128 29
+ 329 01d6 07 .uleb128 0x7
+ 330 01d7 00000000 .long .LASF64
+ 331 01db 1E .sleb128 30
+ 332 01dc 07 .uleb128 0x7
+ 333 01dd 00000000 .long .LASF65
+ 334 01e1 1F .sleb128 31
+ 335 01e2 07 .uleb128 0x7
+ 336 01e3 00000000 .long .LASF66
+ 337 01e7 20 .sleb128 32
+ 338 01e8 07 .uleb128 0x7
+ 339 01e9 00000000 .long .LASF67
+ 340 01ed 21 .sleb128 33
+ 341 01ee 07 .uleb128 0x7
+ 342 01ef 00000000 .long .LASF68
+ 343 01f3 22 .sleb128 34
+ 344 01f4 07 .uleb128 0x7
+ 345 01f5 00000000 .long .LASF69
+ 346 01f9 23 .sleb128 35
+ 347 01fa 07 .uleb128 0x7
+ 348 01fb 00000000 .long .LASF70
+ 349 01ff 24 .sleb128 36
+ 350 0200 07 .uleb128 0x7
+ 351 0201 00000000 .long .LASF71
+ 352 0205 25 .sleb128 37
+ 353 0206 07 .uleb128 0x7
+ 354 0207 00000000 .long .LASF72
+ 355 020b 26 .sleb128 38
+ 356 020c 07 .uleb128 0x7
+ 357 020d 00000000 .long .LASF73
+ 358 0211 27 .sleb128 39
+ 359 0212 07 .uleb128 0x7
+ 360 0213 00000000 .long .LASF74
+
GAS LISTING /tmp/cc32muHp.s page 9
+
+
+ 361 0217 28 .sleb128 40
+ 362 0218 07 .uleb128 0x7
+ 363 0219 00000000 .long .LASF75
+ 364 021d 29 .sleb128 41
+ 365 021e 07 .uleb128 0x7
+ 366 021f 00000000 .long .LASF76
+ 367 0223 2A .sleb128 42
+ 368 0224 07 .uleb128 0x7
+ 369 0225 00000000 .long .LASF77
+ 370 0229 2B .sleb128 43
+ 371 022a 07 .uleb128 0x7
+ 372 022b 00000000 .long .LASF78
+ 373 022f 2C .sleb128 44
+ 374 0230 07 .uleb128 0x7
+ 375 0231 00000000 .long .LASF79
+ 376 0235 2D .sleb128 45
+ 377 0236 07 .uleb128 0x7
+ 378 0237 00000000 .long .LASF80
+ 379 023b 2E .sleb128 46
+ 380 023c 07 .uleb128 0x7
+ 381 023d 00000000 .long .LASF81
+ 382 0241 2F .sleb128 47
+ 383 0242 07 .uleb128 0x7
+ 384 0243 00000000 .long .LASF82
+ 385 0247 30 .sleb128 48
+ 386 0248 07 .uleb128 0x7
+ 387 0249 00000000 .long .LASF83
+ 388 024d 31 .sleb128 49
+ 389 024e 07 .uleb128 0x7
+ 390 024f 00000000 .long .LASF84
+ 391 0253 32 .sleb128 50
+ 392 0254 07 .uleb128 0x7
+ 393 0255 00000000 .long .LASF85
+ 394 0259 33 .sleb128 51
+ 395 025a 07 .uleb128 0x7
+ 396 025b 00000000 .long .LASF86
+ 397 025f 34 .sleb128 52
+ 398 0260 07 .uleb128 0x7
+ 399 0261 00000000 .long .LASF87
+ 400 0265 35 .sleb128 53
+ 401 0266 07 .uleb128 0x7
+ 402 0267 00000000 .long .LASF88
+ 403 026b 36 .sleb128 54
+ 404 026c 07 .uleb128 0x7
+ 405 026d 00000000 .long .LASF89
+ 406 0271 36 .sleb128 54
+ 407 0272 07 .uleb128 0x7
+ 408 0273 00000000 .long .LASF90
+ 409 0277 37 .sleb128 55
+ 410 0278 07 .uleb128 0x7
+ 411 0279 00000000 .long .LASF91
+ 412 027d 38 .sleb128 56
+ 413 027e 07 .uleb128 0x7
+ 414 027f 00000000 .long .LASF92
+ 415 0283 39 .sleb128 57
+ 416 0284 07 .uleb128 0x7
+ 417 0285 00000000 .long .LASF93
+
GAS LISTING /tmp/cc32muHp.s page 10
+
+
+ 418 0289 3A .sleb128 58
+ 419 028a 07 .uleb128 0x7
+ 420 028b 00000000 .long .LASF94
+ 421 028f 3B .sleb128 59
+ 422 0290 07 .uleb128 0x7
+ 423 0291 00000000 .long .LASF95
+ 424 0295 3C .sleb128 60
+ 425 0296 07 .uleb128 0x7
+ 426 0297 00000000 .long .LASF96
+ 427 029b 3D .sleb128 61
+ 428 029c 00 .byte 0x0
+ 429 029d 06 .uleb128 0x6
+ 430 029e 00000000 .long .LASF97
+ 431 02a2 04 .byte 0x4
+ 432 02a3 04 .byte 0x4
+ 433 02a4 BD .byte 0xbd
+ 434 02a5 53040000 .long 0x453
+ 435 02a9 07 .uleb128 0x7
+ 436 02aa 00000000 .long .LASF98
+ 437 02ae 00 .sleb128 0
+ 438 02af 07 .uleb128 0x7
+ 439 02b0 00000000 .long .LASF99
+ 440 02b4 01 .sleb128 1
+ 441 02b5 07 .uleb128 0x7
+ 442 02b6 00000000 .long .LASF100
+ 443 02ba 02 .sleb128 2
+ 444 02bb 07 .uleb128 0x7
+ 445 02bc 00000000 .long .LASF101
+ 446 02c0 03 .sleb128 3
+ 447 02c1 07 .uleb128 0x7
+ 448 02c2 00000000 .long .LASF102
+ 449 02c6 04 .sleb128 4
+ 450 02c7 07 .uleb128 0x7
+ 451 02c8 00000000 .long .LASF103
+ 452 02cc 05 .sleb128 5
+ 453 02cd 07 .uleb128 0x7
+ 454 02ce 00000000 .long .LASF104
+ 455 02d2 06 .sleb128 6
+ 456 02d3 07 .uleb128 0x7
+ 457 02d4 00000000 .long .LASF105
+ 458 02d8 07 .sleb128 7
+ 459 02d9 07 .uleb128 0x7
+ 460 02da 00000000 .long .LASF106
+ 461 02de 08 .sleb128 8
+ 462 02df 07 .uleb128 0x7
+ 463 02e0 00000000 .long .LASF107
+ 464 02e4 09 .sleb128 9
+ 465 02e5 07 .uleb128 0x7
+ 466 02e6 00000000 .long .LASF108
+ 467 02ea 0A .sleb128 10
+ 468 02eb 07 .uleb128 0x7
+ 469 02ec 00000000 .long .LASF109
+ 470 02f0 0B .sleb128 11
+ 471 02f1 07 .uleb128 0x7
+ 472 02f2 00000000 .long .LASF110
+ 473 02f6 0C .sleb128 12
+ 474 02f7 07 .uleb128 0x7
+
GAS LISTING /tmp/cc32muHp.s page 11
+
+
+ 475 02f8 00000000 .long .LASF111
+ 476 02fc 0D .sleb128 13
+ 477 02fd 07 .uleb128 0x7
+ 478 02fe 00000000 .long .LASF112
+ 479 0302 0E .sleb128 14
+ 480 0303 07 .uleb128 0x7
+ 481 0304 00000000 .long .LASF113
+ 482 0308 0F .sleb128 15
+ 483 0309 07 .uleb128 0x7
+ 484 030a 00000000 .long .LASF114
+ 485 030e 10 .sleb128 16
+ 486 030f 07 .uleb128 0x7
+ 487 0310 00000000 .long .LASF115
+ 488 0314 11 .sleb128 17
+ 489 0315 07 .uleb128 0x7
+ 490 0316 00000000 .long .LASF116
+ 491 031a 12 .sleb128 18
+ 492 031b 07 .uleb128 0x7
+ 493 031c 00000000 .long .LASF117
+ 494 0320 13 .sleb128 19
+ 495 0321 07 .uleb128 0x7
+ 496 0322 00000000 .long .LASF118
+ 497 0326 14 .sleb128 20
+ 498 0327 07 .uleb128 0x7
+ 499 0328 00000000 .long .LASF119
+ 500 032c 15 .sleb128 21
+ 501 032d 07 .uleb128 0x7
+ 502 032e 00000000 .long .LASF120
+ 503 0332 16 .sleb128 22
+ 504 0333 07 .uleb128 0x7
+ 505 0334 00000000 .long .LASF121
+ 506 0338 17 .sleb128 23
+ 507 0339 07 .uleb128 0x7
+ 508 033a 00000000 .long .LASF122
+ 509 033e 18 .sleb128 24
+ 510 033f 07 .uleb128 0x7
+ 511 0340 00000000 .long .LASF123
+ 512 0344 19 .sleb128 25
+ 513 0345 07 .uleb128 0x7
+ 514 0346 00000000 .long .LASF124
+ 515 034a 1A .sleb128 26
+ 516 034b 07 .uleb128 0x7
+ 517 034c 00000000 .long .LASF125
+ 518 0350 1B .sleb128 27
+ 519 0351 07 .uleb128 0x7
+ 520 0352 00000000 .long .LASF126
+ 521 0356 1C .sleb128 28
+ 522 0357 07 .uleb128 0x7
+ 523 0358 00000000 .long .LASF127
+ 524 035c 1D .sleb128 29
+ 525 035d 07 .uleb128 0x7
+ 526 035e 00000000 .long .LASF128
+ 527 0362 1E .sleb128 30
+ 528 0363 07 .uleb128 0x7
+ 529 0364 00000000 .long .LASF129
+ 530 0368 1F .sleb128 31
+ 531 0369 07 .uleb128 0x7
+
GAS LISTING /tmp/cc32muHp.s page 12
+
+
+ 532 036a 00000000 .long .LASF130
+ 533 036e 20 .sleb128 32
+ 534 036f 07 .uleb128 0x7
+ 535 0370 00000000 .long .LASF131
+ 536 0374 21 .sleb128 33
+ 537 0375 07 .uleb128 0x7
+ 538 0376 00000000 .long .LASF132
+ 539 037a 22 .sleb128 34
+ 540 037b 07 .uleb128 0x7
+ 541 037c 00000000 .long .LASF133
+ 542 0380 23 .sleb128 35
+ 543 0381 07 .uleb128 0x7
+ 544 0382 00000000 .long .LASF134
+ 545 0386 24 .sleb128 36
+ 546 0387 07 .uleb128 0x7
+ 547 0388 00000000 .long .LASF135
+ 548 038c 25 .sleb128 37
+ 549 038d 07 .uleb128 0x7
+ 550 038e 00000000 .long .LASF136
+ 551 0392 26 .sleb128 38
+ 552 0393 07 .uleb128 0x7
+ 553 0394 00000000 .long .LASF137
+ 554 0398 27 .sleb128 39
+ 555 0399 07 .uleb128 0x7
+ 556 039a 00000000 .long .LASF138
+ 557 039e 28 .sleb128 40
+ 558 039f 07 .uleb128 0x7
+ 559 03a0 00000000 .long .LASF139
+ 560 03a4 29 .sleb128 41
+ 561 03a5 07 .uleb128 0x7
+ 562 03a6 00000000 .long .LASF140
+ 563 03aa 2A .sleb128 42
+ 564 03ab 07 .uleb128 0x7
+ 565 03ac 00000000 .long .LASF141
+ 566 03b0 2B .sleb128 43
+ 567 03b1 07 .uleb128 0x7
+ 568 03b2 00000000 .long .LASF142
+ 569 03b6 2C .sleb128 44
+ 570 03b7 07 .uleb128 0x7
+ 571 03b8 00000000 .long .LASF143
+ 572 03bc 2D .sleb128 45
+ 573 03bd 07 .uleb128 0x7
+ 574 03be 00000000 .long .LASF144
+ 575 03c2 2E .sleb128 46
+ 576 03c3 07 .uleb128 0x7
+ 577 03c4 00000000 .long .LASF145
+ 578 03c8 2F .sleb128 47
+ 579 03c9 07 .uleb128 0x7
+ 580 03ca 00000000 .long .LASF146
+ 581 03ce 30 .sleb128 48
+ 582 03cf 07 .uleb128 0x7
+ 583 03d0 00000000 .long .LASF147
+ 584 03d4 31 .sleb128 49
+ 585 03d5 07 .uleb128 0x7
+ 586 03d6 00000000 .long .LASF148
+ 587 03da 32 .sleb128 50
+ 588 03db 07 .uleb128 0x7
+
GAS LISTING /tmp/cc32muHp.s page 13
+
+
+ 589 03dc 00000000 .long .LASF149
+ 590 03e0 33 .sleb128 51
+ 591 03e1 07 .uleb128 0x7
+ 592 03e2 00000000 .long .LASF150
+ 593 03e6 34 .sleb128 52
+ 594 03e7 07 .uleb128 0x7
+ 595 03e8 00000000 .long .LASF151
+ 596 03ec 35 .sleb128 53
+ 597 03ed 07 .uleb128 0x7
+ 598 03ee 00000000 .long .LASF152
+ 599 03f2 36 .sleb128 54
+ 600 03f3 07 .uleb128 0x7
+ 601 03f4 00000000 .long .LASF153
+ 602 03f8 37 .sleb128 55
+ 603 03f9 07 .uleb128 0x7
+ 604 03fa 00000000 .long .LASF154
+ 605 03fe 38 .sleb128 56
+ 606 03ff 07 .uleb128 0x7
+ 607 0400 00000000 .long .LASF155
+ 608 0404 39 .sleb128 57
+ 609 0405 07 .uleb128 0x7
+ 610 0406 00000000 .long .LASF156
+ 611 040a 3A .sleb128 58
+ 612 040b 07 .uleb128 0x7
+ 613 040c 00000000 .long .LASF157
+ 614 0410 3A .sleb128 58
+ 615 0411 07 .uleb128 0x7
+ 616 0412 00000000 .long .LASF158
+ 617 0416 3B .sleb128 59
+ 618 0417 07 .uleb128 0x7
+ 619 0418 00000000 .long .LASF159
+ 620 041c 3C .sleb128 60
+ 621 041d 07 .uleb128 0x7
+ 622 041e 00000000 .long .LASF160
+ 623 0422 3D .sleb128 61
+ 624 0423 07 .uleb128 0x7
+ 625 0424 00000000 .long .LASF161
+ 626 0428 3E .sleb128 62
+ 627 0429 07 .uleb128 0x7
+ 628 042a 00000000 .long .LASF162
+ 629 042e 3F .sleb128 63
+ 630 042f 07 .uleb128 0x7
+ 631 0430 00000000 .long .LASF163
+ 632 0434 C000 .sleb128 64
+ 633 0436 07 .uleb128 0x7
+ 634 0437 00000000 .long .LASF164
+ 635 043b C100 .sleb128 65
+ 636 043d 07 .uleb128 0x7
+ 637 043e 00000000 .long .LASF165
+ 638 0442 C200 .sleb128 66
+ 639 0444 07 .uleb128 0x7
+ 640 0445 00000000 .long .LASF166
+ 641 0449 C300 .sleb128 67
+ 642 044b 07 .uleb128 0x7
+ 643 044c 00000000 .long .LASF167
+ 644 0450 C400 .sleb128 68
+ 645 0452 00 .byte 0x0
+
GAS LISTING /tmp/cc32muHp.s page 14
+
+
+ 646 0453 08 .uleb128 0x8
+ 647 0454 00000000 .long .LASF168
+ 648 0458 04 .byte 0x4
+ 649 0459 04 .byte 0x4
+ 650 045a 0A01 .value 0x10a
+ 651 045c 52050000 .long 0x552
+ 652 0460 07 .uleb128 0x7
+ 653 0461 00000000 .long .LASF169
+ 654 0465 00 .sleb128 0
+ 655 0466 07 .uleb128 0x7
+ 656 0467 00000000 .long .LASF170
+ 657 046b 3D .sleb128 61
+ 658 046c 07 .uleb128 0x7
+ 659 046d 00000000 .long .LASF171
+ 660 0471 3E .sleb128 62
+ 661 0472 07 .uleb128 0x7
+ 662 0473 00000000 .long .LASF172
+ 663 0477 3F .sleb128 63
+ 664 0478 07 .uleb128 0x7
+ 665 0479 00000000 .long .LASF173
+ 666 047d C000 .sleb128 64
+ 667 047f 07 .uleb128 0x7
+ 668 0480 00000000 .long .LASF174
+ 669 0484 C100 .sleb128 65
+ 670 0486 07 .uleb128 0x7
+ 671 0487 00000000 .long .LASF175
+ 672 048b C200 .sleb128 66
+ 673 048d 07 .uleb128 0x7
+ 674 048e 00000000 .long .LASF176
+ 675 0492 C300 .sleb128 67
+ 676 0494 07 .uleb128 0x7
+ 677 0495 00000000 .long .LASF177
+ 678 0499 C400 .sleb128 68
+ 679 049b 07 .uleb128 0x7
+ 680 049c 00000000 .long .LASF178
+ 681 04a0 C500 .sleb128 69
+ 682 04a2 07 .uleb128 0x7
+ 683 04a3 00000000 .long .LASF179
+ 684 04a7 C600 .sleb128 70
+ 685 04a9 07 .uleb128 0x7
+ 686 04aa 00000000 .long .LASF180
+ 687 04ae C700 .sleb128 71
+ 688 04b0 07 .uleb128 0x7
+ 689 04b1 00000000 .long .LASF181
+ 690 04b5 C800 .sleb128 72
+ 691 04b7 07 .uleb128 0x7
+ 692 04b8 00000000 .long .LASF182
+ 693 04bc C900 .sleb128 73
+ 694 04be 07 .uleb128 0x7
+ 695 04bf 00000000 .long .LASF183
+ 696 04c3 CA00 .sleb128 74
+ 697 04c5 07 .uleb128 0x7
+ 698 04c6 00000000 .long .LASF184
+ 699 04ca CB00 .sleb128 75
+ 700 04cc 07 .uleb128 0x7
+ 701 04cd 00000000 .long .LASF185
+ 702 04d1 CC00 .sleb128 76
+
GAS LISTING /tmp/cc32muHp.s page 15
+
+
+ 703 04d3 07 .uleb128 0x7
+ 704 04d4 00000000 .long .LASF186
+ 705 04d8 CD00 .sleb128 77
+ 706 04da 07 .uleb128 0x7
+ 707 04db 00000000 .long .LASF187
+ 708 04df CE00 .sleb128 78
+ 709 04e1 07 .uleb128 0x7
+ 710 04e2 00000000 .long .LASF188
+ 711 04e6 CF00 .sleb128 79
+ 712 04e8 07 .uleb128 0x7
+ 713 04e9 00000000 .long .LASF189
+ 714 04ed D000 .sleb128 80
+ 715 04ef 07 .uleb128 0x7
+ 716 04f0 00000000 .long .LASF190
+ 717 04f4 D100 .sleb128 81
+ 718 04f6 07 .uleb128 0x7
+ 719 04f7 00000000 .long .LASF191
+ 720 04fb D100 .sleb128 81
+ 721 04fd 07 .uleb128 0x7
+ 722 04fe 00000000 .long .LASF192
+ 723 0502 D200 .sleb128 82
+ 724 0504 07 .uleb128 0x7
+ 725 0505 00000000 .long .LASF193
+ 726 0509 D300 .sleb128 83
+ 727 050b 07 .uleb128 0x7
+ 728 050c 00000000 .long .LASF194
+ 729 0510 D400 .sleb128 84
+ 730 0512 07 .uleb128 0x7
+ 731 0513 00000000 .long .LASF195
+ 732 0517 D500 .sleb128 85
+ 733 0519 07 .uleb128 0x7
+ 734 051a 00000000 .long .LASF196
+ 735 051e D600 .sleb128 86
+ 736 0520 07 .uleb128 0x7
+ 737 0521 00000000 .long .LASF197
+ 738 0525 D700 .sleb128 87
+ 739 0527 07 .uleb128 0x7
+ 740 0528 00000000 .long .LASF198
+ 741 052c D800 .sleb128 88
+ 742 052e 07 .uleb128 0x7
+ 743 052f 00000000 .long .LASF199
+ 744 0533 D900 .sleb128 89
+ 745 0535 07 .uleb128 0x7
+ 746 0536 00000000 .long .LASF200
+ 747 053a DA00 .sleb128 90
+ 748 053c 07 .uleb128 0x7
+ 749 053d 00000000 .long .LASF201
+ 750 0541 DB00 .sleb128 91
+ 751 0543 07 .uleb128 0x7
+ 752 0544 00000000 .long .LASF202
+ 753 0548 DC00 .sleb128 92
+ 754 054a 07 .uleb128 0x7
+ 755 054b 00000000 .long .LASF203
+ 756 054f DD00 .sleb128 93
+ 757 0551 00 .byte 0x0
+ 758 0552 08 .uleb128 0x8
+ 759 0553 00000000 .long .LASF204
+
GAS LISTING /tmp/cc32muHp.s page 16
+
+
+ 760 0557 04 .byte 0x4
+ 761 0558 04 .byte 0x4
+ 762 0559 3401 .value 0x134
+ 763 055b 92060000 .long 0x692
+ 764 055f 07 .uleb128 0x7
+ 765 0560 00000000 .long .LASF205
+ 766 0564 00 .sleb128 0
+ 767 0565 07 .uleb128 0x7
+ 768 0566 00000000 .long .LASF206
+ 769 056a 01 .sleb128 1
+ 770 056b 07 .uleb128 0x7
+ 771 056c 00000000 .long .LASF207
+ 772 0570 02 .sleb128 2
+ 773 0571 07 .uleb128 0x7
+ 774 0572 00000000 .long .LASF208
+ 775 0576 03 .sleb128 3
+ 776 0577 07 .uleb128 0x7
+ 777 0578 00000000 .long .LASF209
+ 778 057c 04 .sleb128 4
+ 779 057d 07 .uleb128 0x7
+ 780 057e 00000000 .long .LASF210
+ 781 0582 05 .sleb128 5
+ 782 0583 07 .uleb128 0x7
+ 783 0584 00000000 .long .LASF211
+ 784 0588 06 .sleb128 6
+ 785 0589 07 .uleb128 0x7
+ 786 058a 00000000 .long .LASF212
+ 787 058e 07 .sleb128 7
+ 788 058f 07 .uleb128 0x7
+ 789 0590 00000000 .long .LASF213
+ 790 0594 08 .sleb128 8
+ 791 0595 07 .uleb128 0x7
+ 792 0596 00000000 .long .LASF214
+ 793 059a 09 .sleb128 9
+ 794 059b 07 .uleb128 0x7
+ 795 059c 00000000 .long .LASF215
+ 796 05a0 0A .sleb128 10
+ 797 05a1 07 .uleb128 0x7
+ 798 05a2 00000000 .long .LASF216
+ 799 05a6 0B .sleb128 11
+ 800 05a7 07 .uleb128 0x7
+ 801 05a8 00000000 .long .LASF217
+ 802 05ac 0C .sleb128 12
+ 803 05ad 07 .uleb128 0x7
+ 804 05ae 00000000 .long .LASF218
+ 805 05b2 0D .sleb128 13
+ 806 05b3 07 .uleb128 0x7
+ 807 05b4 00000000 .long .LASF219
+ 808 05b8 0E .sleb128 14
+ 809 05b9 07 .uleb128 0x7
+ 810 05ba 00000000 .long .LASF220
+ 811 05be 0F .sleb128 15
+ 812 05bf 07 .uleb128 0x7
+ 813 05c0 00000000 .long .LASF221
+ 814 05c4 10 .sleb128 16
+ 815 05c5 07 .uleb128 0x7
+ 816 05c6 00000000 .long .LASF222
+
GAS LISTING /tmp/cc32muHp.s page 17
+
+
+ 817 05ca 11 .sleb128 17
+ 818 05cb 07 .uleb128 0x7
+ 819 05cc 00000000 .long .LASF223
+ 820 05d0 12 .sleb128 18
+ 821 05d1 07 .uleb128 0x7
+ 822 05d2 00000000 .long .LASF224
+ 823 05d6 13 .sleb128 19
+ 824 05d7 07 .uleb128 0x7
+ 825 05d8 00000000 .long .LASF225
+ 826 05dc 14 .sleb128 20
+ 827 05dd 07 .uleb128 0x7
+ 828 05de 00000000 .long .LASF226
+ 829 05e2 15 .sleb128 21
+ 830 05e3 07 .uleb128 0x7
+ 831 05e4 00000000 .long .LASF227
+ 832 05e8 16 .sleb128 22
+ 833 05e9 07 .uleb128 0x7
+ 834 05ea 00000000 .long .LASF228
+ 835 05ee 17 .sleb128 23
+ 836 05ef 07 .uleb128 0x7
+ 837 05f0 00000000 .long .LASF229
+ 838 05f4 18 .sleb128 24
+ 839 05f5 07 .uleb128 0x7
+ 840 05f6 00000000 .long .LASF230
+ 841 05fa 19 .sleb128 25
+ 842 05fb 07 .uleb128 0x7
+ 843 05fc 00000000 .long .LASF231
+ 844 0600 1A .sleb128 26
+ 845 0601 07 .uleb128 0x7
+ 846 0602 00000000 .long .LASF232
+ 847 0606 1B .sleb128 27
+ 848 0607 07 .uleb128 0x7
+ 849 0608 00000000 .long .LASF233
+ 850 060c 1C .sleb128 28
+ 851 060d 07 .uleb128 0x7
+ 852 060e 00000000 .long .LASF234
+ 853 0612 1D .sleb128 29
+ 854 0613 07 .uleb128 0x7
+ 855 0614 00000000 .long .LASF235
+ 856 0618 1E .sleb128 30
+ 857 0619 07 .uleb128 0x7
+ 858 061a 00000000 .long .LASF236
+ 859 061e 1F .sleb128 31
+ 860 061f 07 .uleb128 0x7
+ 861 0620 00000000 .long .LASF237
+ 862 0624 20 .sleb128 32
+ 863 0625 07 .uleb128 0x7
+ 864 0626 00000000 .long .LASF238
+ 865 062a 21 .sleb128 33
+ 866 062b 07 .uleb128 0x7
+ 867 062c 00000000 .long .LASF239
+ 868 0630 22 .sleb128 34
+ 869 0631 07 .uleb128 0x7
+ 870 0632 00000000 .long .LASF240
+ 871 0636 23 .sleb128 35
+ 872 0637 07 .uleb128 0x7
+ 873 0638 00000000 .long .LASF241
+
GAS LISTING /tmp/cc32muHp.s page 18
+
+
+ 874 063c 24 .sleb128 36
+ 875 063d 07 .uleb128 0x7
+ 876 063e 00000000 .long .LASF242
+ 877 0642 25 .sleb128 37
+ 878 0643 07 .uleb128 0x7
+ 879 0644 00000000 .long .LASF243
+ 880 0648 26 .sleb128 38
+ 881 0649 07 .uleb128 0x7
+ 882 064a 00000000 .long .LASF244
+ 883 064e 27 .sleb128 39
+ 884 064f 07 .uleb128 0x7
+ 885 0650 00000000 .long .LASF245
+ 886 0654 28 .sleb128 40
+ 887 0655 07 .uleb128 0x7
+ 888 0656 00000000 .long .LASF246
+ 889 065a 29 .sleb128 41
+ 890 065b 07 .uleb128 0x7
+ 891 065c 00000000 .long .LASF247
+ 892 0660 29 .sleb128 41
+ 893 0661 07 .uleb128 0x7
+ 894 0662 00000000 .long .LASF248
+ 895 0666 2A .sleb128 42
+ 896 0667 07 .uleb128 0x7
+ 897 0668 00000000 .long .LASF249
+ 898 066c 2B .sleb128 43
+ 899 066d 07 .uleb128 0x7
+ 900 066e 00000000 .long .LASF250
+ 901 0672 2C .sleb128 44
+ 902 0673 07 .uleb128 0x7
+ 903 0674 00000000 .long .LASF251
+ 904 0678 2D .sleb128 45
+ 905 0679 07 .uleb128 0x7
+ 906 067a 00000000 .long .LASF252
+ 907 067e 2E .sleb128 46
+ 908 067f 07 .uleb128 0x7
+ 909 0680 00000000 .long .LASF253
+ 910 0684 2F .sleb128 47
+ 911 0685 07 .uleb128 0x7
+ 912 0686 00000000 .long .LASF254
+ 913 068a 30 .sleb128 48
+ 914 068b 07 .uleb128 0x7
+ 915 068c 00000000 .long .LASF255
+ 916 0690 31 .sleb128 49
+ 917 0691 00 .byte 0x0
+ 918 0692 09 .uleb128 0x9
+ 919 0693 01 .byte 0x1
+ 920 0694 00000000 .long .LASF261
+ 921 0698 01 .byte 0x1
+ 922 0699 2A .byte 0x2a
+ 923 069a 01 .byte 0x1
+ 924 069b 70000000 .long 0x70
+ 925 069f 00000000 .quad .LFB15
+ 925 00000000
+ 926 06a7 00000000 .quad .LFE15
+ 926 00000000
+ 927 06af 00000000 .long .LLST0
+ 928 06b3 01070000 .long 0x701
+
GAS LISTING /tmp/cc32muHp.s page 19
+
+
+ 929 06b7 0A .uleb128 0xa
+ 930 06b8 00000000 .long .LASF262
+ 931 06bc 01 .byte 0x1
+ 932 06bd 0B .uleb128 0xb
+ 933 06be 00000000 .long .LASF263
+ 934 06c2 01 .byte 0x1
+ 935 06c3 2A .byte 0x2a
+ 936 06c4 01070000 .long 0x701
+ 937 06c8 02 .byte 0x2
+ 938 06c9 91 .byte 0x91
+ 939 06ca 58 .sleb128 -40
+ 940 06cb 0C .uleb128 0xc
+ 941 06cc 726300 .string "rc"
+ 942 06cf 01 .byte 0x1
+ 943 06d0 2C .byte 0x2c
+ 944 06d1 70000000 .long 0x70
+ 945 06d5 02 .byte 0x2
+ 946 06d6 91 .byte 0x91
+ 947 06d7 6C .sleb128 -20
+ 948 06d8 0D .uleb128 0xd
+ 949 06d9 00000000 .long .LASF256
+ 950 06dd 1D070000 .long 0x71d
+ 951 06e1 01 .byte 0x1
+ 952 06e2 09 .byte 0x9
+ 953 06e3 03 .byte 0x3
+ 954 06e4 00000000 .quad __PRETTY_FUNCTION__.2444
+ 954 00000000
+ 955 06ec 0D .uleb128 0xd
+ 956 06ed 00000000 .long .LASF257
+ 957 06f1 22070000 .long 0x722
+ 958 06f5 01 .byte 0x1
+ 959 06f6 09 .byte 0x9
+ 960 06f7 03 .byte 0x3
+ 961 06f8 00000000 .quad __func__.2445
+ 961 00000000
+ 962 0700 00 .byte 0x0
+ 963 0701 0E .uleb128 0xe
+ 964 0702 08 .byte 0x8
+ 965 0703 07070000 .long 0x707
+ 966 0707 0E .uleb128 0xe
+ 967 0708 08 .byte 0x8
+ 968 0709 B7060000 .long 0x6b7
+ 969 070d 0F .uleb128 0xf
+ 970 070e 7E000000 .long 0x7e
+ 971 0712 1D070000 .long 0x71d
+ 972 0716 10 .uleb128 0x10
+ 973 0717 7B000000 .long 0x7b
+ 974 071b 1C .byte 0x1c
+ 975 071c 00 .byte 0x0
+ 976 071d 11 .uleb128 0x11
+ 977 071e 0D070000 .long 0x70d
+ 978 0722 11 .uleb128 0x11
+ 979 0723 0D070000 .long 0x70d
+ 980 0727 00 .byte 0x0
+ 981 .section .debug_abbrev
+ 982 0000 01 .uleb128 0x1
+ 983 0001 11 .uleb128 0x11
+
GAS LISTING /tmp/cc32muHp.s page 20
+
+
+ 984 0002 01 .byte 0x1
+ 985 0003 25 .uleb128 0x25
+ 986 0004 0E .uleb128 0xe
+ 987 0005 13 .uleb128 0x13
+ 988 0006 0B .uleb128 0xb
+ 989 0007 03 .uleb128 0x3
+ 990 0008 0E .uleb128 0xe
+ 991 0009 1B .uleb128 0x1b
+ 992 000a 0E .uleb128 0xe
+ 993 000b 11 .uleb128 0x11
+ 994 000c 01 .uleb128 0x1
+ 995 000d 12 .uleb128 0x12
+ 996 000e 01 .uleb128 0x1
+ 997 000f 10 .uleb128 0x10
+ 998 0010 06 .uleb128 0x6
+ 999 0011 00 .byte 0x0
+ 1000 0012 00 .byte 0x0
+ 1001 0013 02 .uleb128 0x2
+ 1002 0014 24 .uleb128 0x24
+ 1003 0015 00 .byte 0x0
+ 1004 0016 0B .uleb128 0xb
+ 1005 0017 0B .uleb128 0xb
+ 1006 0018 3E .uleb128 0x3e
+ 1007 0019 0B .uleb128 0xb
+ 1008 001a 03 .uleb128 0x3
+ 1009 001b 0E .uleb128 0xe
+ 1010 001c 00 .byte 0x0
+ 1011 001d 00 .byte 0x0
+ 1012 001e 03 .uleb128 0x3
+ 1013 001f 24 .uleb128 0x24
+ 1014 0020 00 .byte 0x0
+ 1015 0021 0B .uleb128 0xb
+ 1016 0022 0B .uleb128 0xb
+ 1017 0023 3E .uleb128 0x3e
+ 1018 0024 0B .uleb128 0xb
+ 1019 0025 03 .uleb128 0x3
+ 1020 0026 08 .uleb128 0x8
+ 1021 0027 00 .byte 0x0
+ 1022 0028 00 .byte 0x0
+ 1023 0029 04 .uleb128 0x4
+ 1024 002a 16 .uleb128 0x16
+ 1025 002b 00 .byte 0x0
+ 1026 002c 03 .uleb128 0x3
+ 1027 002d 0E .uleb128 0xe
+ 1028 002e 3A .uleb128 0x3a
+ 1029 002f 0B .uleb128 0xb
+ 1030 0030 3B .uleb128 0x3b
+ 1031 0031 0B .uleb128 0xb
+ 1032 0032 49 .uleb128 0x49
+ 1033 0033 13 .uleb128 0x13
+ 1034 0034 00 .byte 0x0
+ 1035 0035 00 .byte 0x0
+ 1036 0036 05 .uleb128 0x5
+ 1037 0037 24 .uleb128 0x24
+ 1038 0038 00 .byte 0x0
+ 1039 0039 0B .uleb128 0xb
+ 1040 003a 0B .uleb128 0xb
+
GAS LISTING /tmp/cc32muHp.s page 21
+
+
+ 1041 003b 3E .uleb128 0x3e
+ 1042 003c 0B .uleb128 0xb
+ 1043 003d 00 .byte 0x0
+ 1044 003e 00 .byte 0x0
+ 1045 003f 06 .uleb128 0x6
+ 1046 0040 04 .uleb128 0x4
+ 1047 0041 01 .byte 0x1
+ 1048 0042 03 .uleb128 0x3
+ 1049 0043 0E .uleb128 0xe
+ 1050 0044 0B .uleb128 0xb
+ 1051 0045 0B .uleb128 0xb
+ 1052 0046 3A .uleb128 0x3a
+ 1053 0047 0B .uleb128 0xb
+ 1054 0048 3B .uleb128 0x3b
+ 1055 0049 0B .uleb128 0xb
+ 1056 004a 01 .uleb128 0x1
+ 1057 004b 13 .uleb128 0x13
+ 1058 004c 00 .byte 0x0
+ 1059 004d 00 .byte 0x0
+ 1060 004e 07 .uleb128 0x7
+ 1061 004f 28 .uleb128 0x28
+ 1062 0050 00 .byte 0x0
+ 1063 0051 03 .uleb128 0x3
+ 1064 0052 0E .uleb128 0xe
+ 1065 0053 1C .uleb128 0x1c
+ 1066 0054 0D .uleb128 0xd
+ 1067 0055 00 .byte 0x0
+ 1068 0056 00 .byte 0x0
+ 1069 0057 08 .uleb128 0x8
+ 1070 0058 04 .uleb128 0x4
+ 1071 0059 01 .byte 0x1
+ 1072 005a 03 .uleb128 0x3
+ 1073 005b 0E .uleb128 0xe
+ 1074 005c 0B .uleb128 0xb
+ 1075 005d 0B .uleb128 0xb
+ 1076 005e 3A .uleb128 0x3a
+ 1077 005f 0B .uleb128 0xb
+ 1078 0060 3B .uleb128 0x3b
+ 1079 0061 05 .uleb128 0x5
+ 1080 0062 01 .uleb128 0x1
+ 1081 0063 13 .uleb128 0x13
+ 1082 0064 00 .byte 0x0
+ 1083 0065 00 .byte 0x0
+ 1084 0066 09 .uleb128 0x9
+ 1085 0067 2E .uleb128 0x2e
+ 1086 0068 01 .byte 0x1
+ 1087 0069 3F .uleb128 0x3f
+ 1088 006a 0C .uleb128 0xc
+ 1089 006b 03 .uleb128 0x3
+ 1090 006c 0E .uleb128 0xe
+ 1091 006d 3A .uleb128 0x3a
+ 1092 006e 0B .uleb128 0xb
+ 1093 006f 3B .uleb128 0x3b
+ 1094 0070 0B .uleb128 0xb
+ 1095 0071 27 .uleb128 0x27
+ 1096 0072 0C .uleb128 0xc
+ 1097 0073 49 .uleb128 0x49
+
GAS LISTING /tmp/cc32muHp.s page 22
+
+
+ 1098 0074 13 .uleb128 0x13
+ 1099 0075 11 .uleb128 0x11
+ 1100 0076 01 .uleb128 0x1
+ 1101 0077 12 .uleb128 0x12
+ 1102 0078 01 .uleb128 0x1
+ 1103 0079 40 .uleb128 0x40
+ 1104 007a 06 .uleb128 0x6
+ 1105 007b 01 .uleb128 0x1
+ 1106 007c 13 .uleb128 0x13
+ 1107 007d 00 .byte 0x0
+ 1108 007e 00 .byte 0x0
+ 1109 007f 0A .uleb128 0xa
+ 1110 0080 13 .uleb128 0x13
+ 1111 0081 00 .byte 0x0
+ 1112 0082 03 .uleb128 0x3
+ 1113 0083 0E .uleb128 0xe
+ 1114 0084 3C .uleb128 0x3c
+ 1115 0085 0C .uleb128 0xc
+ 1116 0086 00 .byte 0x0
+ 1117 0087 00 .byte 0x0
+ 1118 0088 0B .uleb128 0xb
+ 1119 0089 05 .uleb128 0x5
+ 1120 008a 00 .byte 0x0
+ 1121 008b 03 .uleb128 0x3
+ 1122 008c 0E .uleb128 0xe
+ 1123 008d 3A .uleb128 0x3a
+ 1124 008e 0B .uleb128 0xb
+ 1125 008f 3B .uleb128 0x3b
+ 1126 0090 0B .uleb128 0xb
+ 1127 0091 49 .uleb128 0x49
+ 1128 0092 13 .uleb128 0x13
+ 1129 0093 02 .uleb128 0x2
+ 1130 0094 0A .uleb128 0xa
+ 1131 0095 00 .byte 0x0
+ 1132 0096 00 .byte 0x0
+ 1133 0097 0C .uleb128 0xc
+ 1134 0098 34 .uleb128 0x34
+ 1135 0099 00 .byte 0x0
+ 1136 009a 03 .uleb128 0x3
+ 1137 009b 08 .uleb128 0x8
+ 1138 009c 3A .uleb128 0x3a
+ 1139 009d 0B .uleb128 0xb
+ 1140 009e 3B .uleb128 0x3b
+ 1141 009f 0B .uleb128 0xb
+ 1142 00a0 49 .uleb128 0x49
+ 1143 00a1 13 .uleb128 0x13
+ 1144 00a2 02 .uleb128 0x2
+ 1145 00a3 0A .uleb128 0xa
+ 1146 00a4 00 .byte 0x0
+ 1147 00a5 00 .byte 0x0
+ 1148 00a6 0D .uleb128 0xd
+ 1149 00a7 34 .uleb128 0x34
+ 1150 00a8 00 .byte 0x0
+ 1151 00a9 03 .uleb128 0x3
+ 1152 00aa 0E .uleb128 0xe
+ 1153 00ab 49 .uleb128 0x49
+ 1154 00ac 13 .uleb128 0x13
+
GAS LISTING /tmp/cc32muHp.s page 23
+
+
+ 1155 00ad 34 .uleb128 0x34
+ 1156 00ae 0C .uleb128 0xc
+ 1157 00af 02 .uleb128 0x2
+ 1158 00b0 0A .uleb128 0xa
+ 1159 00b1 00 .byte 0x0
+ 1160 00b2 00 .byte 0x0
+ 1161 00b3 0E .uleb128 0xe
+ 1162 00b4 0F .uleb128 0xf
+ 1163 00b5 00 .byte 0x0
+ 1164 00b6 0B .uleb128 0xb
+ 1165 00b7 0B .uleb128 0xb
+ 1166 00b8 49 .uleb128 0x49
+ 1167 00b9 13 .uleb128 0x13
+ 1168 00ba 00 .byte 0x0
+ 1169 00bb 00 .byte 0x0
+ 1170 00bc 0F .uleb128 0xf
+ 1171 00bd 01 .uleb128 0x1
+ 1172 00be 01 .byte 0x1
+ 1173 00bf 49 .uleb128 0x49
+ 1174 00c0 13 .uleb128 0x13
+ 1175 00c1 01 .uleb128 0x1
+ 1176 00c2 13 .uleb128 0x13
+ 1177 00c3 00 .byte 0x0
+ 1178 00c4 00 .byte 0x0
+ 1179 00c5 10 .uleb128 0x10
+ 1180 00c6 21 .uleb128 0x21
+ 1181 00c7 00 .byte 0x0
+ 1182 00c8 49 .uleb128 0x49
+ 1183 00c9 13 .uleb128 0x13
+ 1184 00ca 2F .uleb128 0x2f
+ 1185 00cb 0B .uleb128 0xb
+ 1186 00cc 00 .byte 0x0
+ 1187 00cd 00 .byte 0x0
+ 1188 00ce 11 .uleb128 0x11
+ 1189 00cf 26 .uleb128 0x26
+ 1190 00d0 00 .byte 0x0
+ 1191 00d1 49 .uleb128 0x49
+ 1192 00d2 13 .uleb128 0x13
+ 1193 00d3 00 .byte 0x0
+ 1194 00d4 00 .byte 0x0
+ 1195 00d5 00 .byte 0x0
+ 1196 .section .debug_pubnames,"", at progbits
+ 1197 0000 2F000000 .long 0x2f
+ 1198 0004 0200 .value 0x2
+ 1199 0006 00000000 .long .Ldebug_info0
+ 1200 000a 28070000 .long 0x728
+ 1201 000e 92060000 .long 0x692
+ 1202 0012 4B4E756C .string "KNullBlockCipherVecAesNiMake"
+ 1202 6C426C6F
+ 1202 636B4369
+ 1202 70686572
+ 1202 56656341
+ 1203 002f 00000000 .long 0x0
+ 1204 .section .debug_aranges,"", at progbits
+ 1205 0000 2C000000 .long 0x2c
+ 1206 0004 0200 .value 0x2
+ 1207 0006 00000000 .long .Ldebug_info0
+
GAS LISTING /tmp/cc32muHp.s page 24
+
+
+ 1208 000a 08 .byte 0x8
+ 1209 000b 00 .byte 0x0
+ 1210 000c 0000 .value 0x0
+ 1211 000e 0000 .value 0x0
+ 1212 0010 00000000 .quad .Ltext0
+ 1212 00000000
+ 1213 0018 65000000 .quad .Letext0-.Ltext0
+ 1213 00000000
+ 1214 0020 00000000 .quad 0x0
+ 1214 00000000
+ 1215 0028 00000000 .quad 0x0
+ 1215 00000000
+ 1216 .section .debug_str,"MS", at progbits,1
+ 1217 .LASF184:
+ 1218 0000 72635461 .string "rcTag"
+ 1218 6700
+ 1219 .LASF30:
+ 1220 0006 72635646 .string "rcVFS"
+ 1220 5300
+ 1221 .LASF234:
+ 1222 000c 7263556E .string "rcUnauthorized"
+ 1222 61757468
+ 1222 6F72697A
+ 1222 656400
+ 1223 .LASF258:
+ 1224 001b 474E5520 .string "GNU C 4.4.2"
+ 1224 4320342E
+ 1224 342E3200
+ 1225 .LASF218:
+ 1226 0027 7263496E .string "rcInconsistent"
+ 1226 636F6E73
+ 1226 69737465
+ 1226 6E7400
+ 1227 .LASF19:
+ 1228 0036 72634442 .string "rcDB"
+ 1228 00
+ 1229 .LASF128:
+ 1230 003b 7263436F .string "rcCopying"
+ 1230 7079696E
+ 1230 6700
+ 1231 .LASF131:
+ 1232 0045 7263506F .string "rcPositioning"
+ 1232 73697469
+ 1232 6F6E696E
+ 1232 6700
+ 1233 .LASF226:
+ 1234 0053 72634578 .string "rcExcessive"
+ 1234 63657373
+ 1234 69766500
+ 1235 .LASF222:
+ 1236 005f 72634361 .string "rcCanceled"
+ 1236 6E63656C
+ 1236 656400
+ 1237 .LASF156:
+ 1238 006a 72634C61 .string "rcLastContext_v1_0"
+ 1238 7374436F
+ 1238 6E746578
+
GAS LISTING /tmp/cc32muHp.s page 25
+
+
+ 1238 745F7631
+ 1238 5F3000
+ 1239 .LASF167:
+ 1240 007d 72634C61 .string "rcLastContext_v1_1"
+ 1240 7374436F
+ 1240 6E746578
+ 1240 745F7631
+ 1240 5F3100
+ 1241 .LASF90:
+ 1242 0090 7263456E .string "rcEncryptionKey"
+ 1242 63727970
+ 1242 74696F6E
+ 1242 4B657900
+ 1243 .LASF97:
+ 1244 00a0 5243436F .string "RCContext"
+ 1244 6E746578
+ 1244 7400
+ 1245 .LASF92:
+ 1246 00aa 7263436D .string "rcCmd"
+ 1246 6400
+ 1247 .LASF242:
+ 1248 00b0 72634475 .string "rcDuplicate"
+ 1248 706C6963
+ 1248 61746500
+ 1249 .LASF202:
+ 1250 00bc 72635265 .string "rcRefcount"
+ 1250 66636F75
+ 1250 6E7400
+ 1251 .LASF91:
+ 1252 00c7 7263526E .string "rcRng"
+ 1252 6700
+ 1253 .LASF34:
+ 1254 00cd 72634E6F .string "rcNoTarg"
+ 1254 54617267
+ 1254 00
+ 1255 .LASF204:
+ 1256 00d6 52435374 .string "RCState"
+ 1256 61746500
+ 1257 .LASF5:
+ 1258 00de 756E7369 .string "unsigned int"
+ 1258 676E6564
+ 1258 20696E74
+ 1258 00
+ 1259 .LASF89:
+ 1260 00eb 72635072 .string "rcProduction"
+ 1260 6F647563
+ 1260 74696F6E
+ 1260 00
+ 1261 .LASF69:
+ 1262 00f8 72635061 .string "rcPagemap"
+ 1262 67656D61
+ 1262 7000
+ 1263 .LASF185:
+ 1264 0102 72635265 .string "rcResources"
+ 1264 736F7572
+ 1264 63657300
+ 1265 .LASF50:
+
GAS LISTING /tmp/cc32muHp.s page 26
+
+
+ 1266 010e 7263586D .string "rcXmlDoc"
+ 1266 6C446F63
+ 1266 00
+ 1267 .LASF37:
+ 1268 0117 7263546F .string "rcTocEntry"
+ 1268 63456E74
+ 1268 727900
+ 1269 .LASF114:
+ 1270 0122 72635265 .string "rcRemoving"
+ 1270 6D6F7669
+ 1270 6E6700
+ 1271 .LASF192:
+ 1272 012d 72634D6F .string "rcMode"
+ 1272 646500
+ 1273 .LASF119:
+ 1274 0134 7263436C .string "rcClosing"
+ 1274 6F73696E
+ 1274 6700
+ 1275 .LASF72:
+ 1276 013e 72635175 .string "rcQueue"
+ 1276 65756500
+ 1277 .LASF120:
+ 1278 0146 72635265 .string "rcResizing"
+ 1278 73697A69
+ 1278 6E6700
+ 1279 .LASF171:
+ 1280 0151 72635365 .string "rcSelf"
+ 1280 6C6600
+ 1281 .LASF214:
+ 1282 0158 72634465 .string "rcDestroyed"
+ 1282 7374726F
+ 1282 79656400
+ 1283 .LASF162:
+ 1284 0164 7263496E .string "rcInitializing"
+ 1284 69746961
+ 1284 6C697A69
+ 1284 6E6700
+ 1285 .LASF168:
+ 1286 0173 52434F62 .string "RCObject"
+ 1286 6A656374
+ 1286 00
+ 1287 .LASF146:
+ 1288 017c 72634174 .string "rcAttaching"
+ 1288 74616368
+ 1288 696E6700
+ 1289 .LASF219:
+ 1290 0188 72634275 .string "rcBusy"
+ 1290 737900
+ 1291 .LASF74:
+ 1292 018f 72635363 .string "rcSchema"
+ 1292 68656D61
+ 1292 00
+ 1293 .LASF138:
+ 1294 0198 72634875 .string "rcHuffmanCoding"
+ 1294 66666D61
+ 1294 6E436F64
+ 1294 696E6700
+
GAS LISTING /tmp/cc32muHp.s page 27
+
+
+ 1295 .LASF123:
+ 1296 01a8 7263436F .string "rcCommitting"
+ 1296 6D6D6974
+ 1296 74696E67
+ 1296 00
+ 1297 .LASF75:
+ 1298 01b5 72635365 .string "rcSemaphore"
+ 1298 6D617068
+ 1298 6F726500
+ 1299 .LASF232:
+ 1300 01c1 72634465 .string "rcDetached"
+ 1300 74616368
+ 1300 656400
+ 1301 .LASF188:
+ 1302 01cc 7263526F .string "rcRow"
+ 1302 7700
+ 1303 .LASF239:
+ 1304 01d2 7263546F .string "rcTooShort"
+ 1304 6F53686F
+ 1304 727400
+ 1305 .LASF15:
+ 1306 01dd 72634646 .string "rcFF"
+ 1306 00
+ 1307 .LASF16:
+ 1308 01e2 72634653 .string "rcFS"
+ 1308 00
+ 1309 .LASF250:
+ 1310 01e7 7263556E .string "rcUndefined"
+ 1310 64656669
+ 1310 6E656400
+ 1311 .LASF132:
+ 1312 01f3 72635061 .string "rcPacking"
+ 1312 636B696E
+ 1312 6700
+ 1313 .LASF216:
+ 1314 01fd 7263436F .string "rcCorrupt"
+ 1314 72727570
+ 1314 7400
+ 1315 .LASF7:
+ 1316 0207 75696E74 .string "uint32_t"
+ 1316 33325F74
+ 1316 00
+ 1317 .LASF133:
+ 1318 0210 7263556E .string "rcUnpacking"
+ 1318 7061636B
+ 1318 696E6700
+ 1319 .LASF51:
+ 1320 021c 72634669 .string "rcFile"
+ 1320 6C6500
+ 1321 .LASF39:
+ 1322 0223 72634174 .string "rcAttr"
+ 1322 747200
+ 1323 .LASF199:
+ 1324 022a 7263456E .string "rcEnvironment"
+ 1324 7669726F
+ 1324 6E6D656E
+ 1324 7400
+
GAS LISTING /tmp/cc32muHp.s page 28
+
+
+ 1325 .LASF149:
+ 1326 0238 72634650 .string "rcFPCoding"
+ 1326 436F6469
+ 1326 6E6700
+ 1327 .LASF80:
+ 1328 0243 72635469 .string "rcTimeout"
+ 1328 6D656F75
+ 1328 7400
+ 1329 .LASF62:
+ 1330 024d 72634D44 .string "rcMD5SumFmt"
+ 1330 3553756D
+ 1330 466D7400
+ 1331 .LASF137:
+ 1332 0259 72634578 .string "rcExecuting"
+ 1332 65637574
+ 1332 696E6700
+ 1333 .LASF145:
+ 1334 0265 72635761 .string "rcWaiting"
+ 1334 6974696E
+ 1334 6700
+ 1335 .LASF176:
+ 1336 026f 7263466F .string "rcFormat"
+ 1336 726D6174
+ 1336 00
+ 1337 .LASF181:
+ 1338 0278 7263436F .string "rcConstraint"
+ 1338 6E737472
+ 1338 61696E74
+ 1338 00
+ 1339 .LASF22:
+ 1340 0285 7263584D .string "rcXML"
+ 1340 4C00
+ 1341 .LASF45:
+ 1342 028b 7263436F .string "rcCondition"
+ 1342 6E646974
+ 1342 696F6E00
+ 1343 .LASF205:
+ 1344 0297 72634E6F .string "rcNoErr"
+ 1344 45727200
+ 1345 .LASF42:
+ 1346 029f 72634275 .string "rcBuffer"
+ 1346 66666572
+ 1346 00
+ 1347 .LASF142:
+ 1348 02a8 72635061 .string "rcParsing"
+ 1348 7273696E
+ 1348 6700
+ 1349 .LASF41:
+ 1350 02b2 7263426C .string "rcBlob"
+ 1350 6F6200
+ 1351 .LASF240:
+ 1352 02b9 7263546F .string "rcTooLong"
+ 1352 6F4C6F6E
+ 1352 6700
+ 1353 .LASF24:
+ 1354 02c3 72634C61 .string "rcLastModule_v1_0"
+ 1354 73744D6F
+
GAS LISTING /tmp/cc32muHp.s page 29
+
+
+ 1354 64756C65
+ 1354 5F76315F
+ 1354 3000
+ 1355 .LASF31:
+ 1356 02d5 72634C61 .string "rcLastModule_v1_1"
+ 1356 73744D6F
+ 1356 64756C65
+ 1356 5F76315F
+ 1356 3100
+ 1357 .LASF64:
+ 1358 02e7 72634D65 .string "rcMetadata"
+ 1358 74616461
+ 1358 746100
+ 1359 .LASF261:
+ 1360 02f2 4B4E756C .string "KNullBlockCipherVecAesNiMake"
+ 1360 6C426C6F
+ 1360 636B4369
+ 1360 70686572
+ 1360 56656341
+ 1361 .LASF236:
+ 1362 030f 72635772 .string "rcWriteonly"
+ 1362 6974656F
+ 1362 6E6C7900
+ 1363 .LASF115:
+ 1364 031b 7263436C .string "rcClearing"
+ 1364 65617269
+ 1364 6E6700
+ 1365 .LASF55:
+ 1366 0326 7263466F .string "rcFormatter"
+ 1366 726D6174
+ 1366 74657200
+ 1367 .LASF248:
+ 1368 0332 72634F75 .string "rcOutoforder"
+ 1368 746F666F
+ 1368 72646572
+ 1368 00
+ 1369 .LASF70:
+ 1370 033f 72635061 .string "rcPath"
+ 1370 746800
+ 1371 .LASF189:
+ 1372 0346 72634C69 .string "rcLibrary"
+ 1372 62726172
+ 1372 7900
+ 1373 .LASF141:
+ 1374 0350 7263546F .string "rcTokenizing"
+ 1374 6B656E69
+ 1374 7A696E67
+ 1374 00
+ 1375 .LASF198:
+ 1376 035d 72634572 .string "rcError"
+ 1376 726F7200
+ 1377 .LASF18:
+ 1378 0365 72635846 .string "rcXF"
+ 1378 00
+ 1379 .LASF183:
+ 1380 036a 72634D65 .string "rcMessage"
+ 1380 73736167
+
GAS LISTING /tmp/cc32muHp.s page 30
+
+
+ 1380 6500
+ 1381 .LASF237:
+ 1382 0374 72634E6F .string "rcNoPerm"
+ 1382 5065726D
+ 1382 00
+ 1383 .LASF54:
+ 1384 037d 72634675 .string "rcFunction"
+ 1384 6E637469
+ 1384 6F6E00
+ 1385 .LASF208:
+ 1386 0388 7263556E .string "rcUnsupported"
+ 1386 73757070
+ 1386 6F727465
+ 1386 6400
+ 1387 .LASF43:
+ 1388 0396 72634368 .string "rcChar"
+ 1388 617200
+ 1389 .LASF174:
+ 1390 039d 72634D65 .string "rcMemory"
+ 1390 6D6F7279
+ 1390 00
+ 1391 .LASF194:
+ 1392 03a6 72634372 .string "rcCrc"
+ 1392 6300
+ 1393 .LASF241:
+ 1394 03ac 7263546F .string "rcTooBig"
+ 1394 6F426967
+ 1394 00
+ 1395 .LASF179:
+ 1396 03b5 72634964 .string "rcId"
+ 1396 00
+ 1397 .LASF82:
+ 1398 03ba 72635472 .string "rcTree"
+ 1398 656500
+ 1399 .LASF253:
+ 1400 03c1 72634E6F .string "rcNotAvailable"
+ 1400 74417661
+ 1400 696C6162
+ 1400 6C6500
+ 1401 .LASF93:
+ 1402 03d0 72634461 .string "rcData"
+ 1402 746100
+ 1403 .LASF257:
+ 1404 03d7 5F5F6675 .string "__func__"
+ 1404 6E635F5F
+ 1404 00
+ 1405 .LASF254:
+ 1406 03e0 72635772 .string "rcWrongType"
+ 1406 6F6E6754
+ 1406 79706500
+ 1407 .LASF56:
+ 1408 03ec 72634675 .string "rcFunctParam"
+ 1408 6E637450
+ 1408 6172616D
+ 1408 00
+ 1409 .LASF63:
+ 1410 03f9 72634D65 .string "rcMemMap"
+
GAS LISTING /tmp/cc32muHp.s page 31
+
+
+ 1410 6D4D6170
+ 1410 00
+ 1411 .LASF9:
+ 1412 0402 63686172 .string "char"
+ 1412 00
+ 1413 .LASF211:
+ 1414 0407 7263416D .string "rcAmbiguous"
+ 1414 62696775
+ 1414 6F757300
+ 1415 .LASF244:
+ 1416 0413 72634967 .string "rcIgnored"
+ 1416 6E6F7265
+ 1416 6400
+ 1417 .LASF109:
+ 1418 041d 72635265 .string "rcRenaming"
+ 1418 6E616D69
+ 1418 6E6700
+ 1419 .LASF121:
+ 1420 0428 72635265 .string "rcReading"
+ 1420 6164696E
+ 1420 6700
+ 1421 .LASF58:
+ 1422 0432 7263496E .string "rcIndex"
+ 1422 64657800
+ 1423 .LASF104:
+ 1424 043a 72634C69 .string "rcListing"
+ 1424 7374696E
+ 1424 6700
+ 1425 .LASF178:
+ 1426 0444 7263496E .string "rcInterface"
+ 1426 74657266
+ 1426 61636500
+ 1427 .LASF107:
+ 1428 0450 72634C6F .string "rcLocking"
+ 1428 636B696E
+ 1428 6700
+ 1429 .LASF60:
+ 1430 045a 72634C6F .string "rcLock"
+ 1430 636B00
+ 1431 .LASF108:
+ 1432 0461 7263556E .string "rcUnlocking"
+ 1432 6C6F636B
+ 1432 696E6700
+ 1433 .LASF85:
+ 1434 046d 72635665 .string "rcVector"
+ 1434 63746F72
+ 1434 00
+ 1435 .LASF122:
+ 1436 0476 72635772 .string "rcWriting"
+ 1436 6974696E
+ 1436 6700
+ 1437 .LASF53:
+ 1438 0480 72634669 .string "rcFileFormat"
+ 1438 6C65466F
+ 1438 726D6174
+ 1438 00
+ 1439 .LASF21:
+
GAS LISTING /tmp/cc32muHp.s page 32
+
+
+ 1440 048d 72634170 .string "rcApp"
+ 1440 7000
+ 1441 .LASF125:
+ 1442 0493 72635265 .string "rcResetting"
+ 1442 73657474
+ 1442 696E6700
+ 1443 .LASF71:
+ 1444 049f 72635072 .string "rcProcess"
+ 1444 6F636573
+ 1444 7300
+ 1445 .LASF106:
+ 1446 04a9 72635265 .string "rcResolving"
+ 1446 736F6C76
+ 1446 696E6700
+ 1447 .LASF12:
+ 1448 04b5 72635465 .string "rcText"
+ 1448 787400
+ 1449 .LASF66:
+ 1450 04bc 72634E61 .string "rcNamelist"
+ 1450 6D656C69
+ 1450 737400
+ 1451 .LASF229:
+ 1452 04c7 72634E6F .string "rcNotFound"
+ 1452 74466F75
+ 1452 6E6400
+ 1453 .LASF139:
+ 1454 04d2 72635265 .string "rcReindexing"
+ 1454 696E6465
+ 1454 78696E67
+ 1454 00
+ 1455 .LASF87:
+ 1456 04df 72634578 .string "rcExpression"
+ 1456 70726573
+ 1456 73696F6E
+ 1456 00
+ 1457 .LASF235:
+ 1458 04ec 72635265 .string "rcReadonly"
+ 1458 61646F6E
+ 1458 6C7900
+ 1459 .LASF95:
+ 1460 04f7 72635572 .string "rcUri"
+ 1460 6900
+ 1461 .LASF100:
+ 1462 04fd 7263436F .string "rcConstructing"
+ 1462 6E737472
+ 1462 75637469
+ 1462 6E6700
+ 1463 .LASF173:
+ 1464 050c 72634F66 .string "rcOffset"
+ 1464 66736574
+ 1464 00
+ 1465 .LASF233:
+ 1466 0515 72634465 .string "rcDeadlock"
+ 1466 61646C6F
+ 1466 636B00
+ 1467 .LASF47:
+ 1468 0520 72634461 .string "rcDatabase"
+
GAS LISTING /tmp/cc32muHp.s page 33
+
+
+ 1468 74616261
+ 1468 736500
+ 1469 .LASF127:
+ 1470 052b 72634672 .string "rcFreezing"
+ 1470 65657A69
+ 1470 6E6700
+ 1471 .LASF217:
+ 1472 0536 7263496E .string "rcIncorrect"
+ 1472 636F7272
+ 1472 65637400
+ 1473 .LASF206:
+ 1474 0542 7263446F .string "rcDone"
+ 1474 6E6500
+ 1475 .LASF157:
+ 1476 0549 7263466C .string "rcFlushing"
+ 1476 75736869
+ 1476 6E6700
+ 1477 .LASF159:
+ 1478 0554 7263456E .string "rcEncrypting"
+ 1478 63727970
+ 1478 74696E67
+ 1478 00
+ 1479 .LASF251:
+ 1480 0561 7263556E .string "rcUnequal"
+ 1480 65717561
+ 1480 6C00
+ 1481 .LASF10:
+ 1482 056b 72634578 .string "rcExe"
+ 1482 6500
+ 1483 .LASF38:
+ 1484 0571 72634172 .string "rcArgv"
+ 1484 677600
+ 1485 .LASF147:
+ 1486 0578 72634465 .string "rcDetaching"
+ 1486 74616368
+ 1486 696E6700
+ 1487 .LASF99:
+ 1488 0584 72634361 .string "rcCasting"
+ 1488 7374696E
+ 1488 6700
+ 1489 .LASF110:
+ 1490 058e 7263416C .string "rcAliasing"
+ 1490 69617369
+ 1490 6E6700
+ 1491 .LASF49:
+ 1492 0599 7263446F .string "rcDoc"
+ 1492 6300
+ 1493 .LASF98:
+ 1494 059f 7263416C .string "rcAllocating"
+ 1494 6C6F6361
+ 1494 74696E67
+ 1494 00
+ 1495 .LASF212:
+ 1496 05ac 72634E75 .string "rcNull"
+ 1496 6C6C00
+ 1497 .LASF180:
+ 1498 05b3 72635261 .string "rcRange"
+
GAS LISTING /tmp/cc32muHp.s page 34
+
+
+ 1498 6E676500
+ 1499 .LASF35:
+ 1500 05bb 72634172 .string "rcArc"
+ 1500 6300
+ 1501 .LASF252:
+ 1502 05c1 72634661 .string "rcFailed"
+ 1502 696C6564
+ 1502 00
+ 1503 .LASF23:
+ 1504 05ca 72635352 .string "rcSRA"
+ 1504 4100
+ 1505 .LASF152:
+ 1506 05d0 72635365 .string "rcSearching"
+ 1506 61726368
+ 1506 696E6700
+ 1507 .LASF225:
+ 1508 05dc 7263496E .string "rcInsufficient"
+ 1508 73756666
+ 1508 69636965
+ 1508 6E7400
+ 1509 .LASF165:
+ 1510 05eb 72635072 .string "rcProcessing"
+ 1510 6F636573
+ 1510 73696E67
+ 1510 00
+ 1511 .LASF144:
+ 1512 05f8 72635369 .string "rcSignaling"
+ 1512 676E616C
+ 1512 696E6700
+ 1513 .LASF135:
+ 1514 0604 72634465 .string "rcDecoding"
+ 1514 636F6469
+ 1514 6E6700
+ 1515 .LASF76:
+ 1516 060f 72635374 .string "rcStorage"
+ 1516 6F726167
+ 1516 6500
+ 1517 .LASF213:
+ 1518 0619 72634261 .string "rcBadVersion"
+ 1518 64566572
+ 1518 73696F6E
+ 1518 00
+ 1519 .LASF210:
+ 1520 0626 7263556E .string "rcUnrecognized"
+ 1520 7265636F
+ 1520 676E697A
+ 1520 656400
+ 1521 .LASF161:
+ 1522 0635 7263436F .string "rcComparing"
+ 1522 6D706172
+ 1522 696E6700
+ 1523 .LASF65:
+ 1524 0641 72634D67 .string "rcMgr"
+ 1524 7200
+ 1525 .LASF154:
+ 1526 0647 72634576 .string "rcEvaluating"
+ 1526 616C7561
+
GAS LISTING /tmp/cc32muHp.s page 35
+
+
+ 1526 74696E67
+ 1526 00
+ 1527 .LASF163:
+ 1528 0654 72635265 .string "rcRetrieving"
+ 1528 74726965
+ 1528 76696E67
+ 1528 00
+ 1529 .LASF116:
+ 1530 0661 72635570 .string "rcUpdating"
+ 1530 64617469
+ 1530 6E6700
+ 1531 .LASF83:
+ 1532 066c 72635472 .string "rcTrie"
+ 1532 696500
+ 1533 .LASF201:
+ 1534 0673 72635369 .string "rcSize"
+ 1534 7A6500
+ 1535 .LASF150:
+ 1536 067a 72634D75 .string "rcMultiplexing"
+ 1536 6C746970
+ 1536 6C657869
+ 1536 6E6700
+ 1537 .LASF243:
+ 1538 0689 72634F75 .string "rcOutOfKDirectory"
+ 1538 744F664B
+ 1538 44697265
+ 1538 63746F72
+ 1538 7900
+ 1539 .LASF40:
+ 1540 069b 72634261 .string "rcBarrier"
+ 1540 72726965
+ 1540 7200
+ 1541 .LASF77:
+ 1542 06a5 72635374 .string "rcString"
+ 1542 72696E67
+ 1542 00
+ 1543 .LASF193:
+ 1544 06ae 7263456E .string "rcEncryption"
+ 1544 63727970
+ 1544 74696F6E
+ 1544 00
+ 1545 .LASF25:
+ 1546 06bb 72634B46 .string "rcKFG"
+ 1546 4700
+ 1547 .LASF46:
+ 1548 06c1 72634375 .string "rcCursor"
+ 1548 72736F72
+ 1548 00
+ 1549 .LASF101:
+ 1550 06ca 72634465 .string "rcDestroying"
+ 1550 7374726F
+ 1550 79696E67
+ 1550 00
+ 1551 .LASF27:
+ 1552 06d7 72634B72 .string "rcKrypto"
+ 1552 7970746F
+ 1552 00
+
GAS LISTING /tmp/cc32muHp.s page 36
+
+
+ 1553 .LASF196:
+ 1554 06e0 72635365 .string "rcSeed"
+ 1554 656400
+ 1555 .LASF221:
+ 1556 06e7 7263496E .string "rcInterrupted"
+ 1556 74657272
+ 1556 75707465
+ 1556 6400
+ 1557 .LASF153:
+ 1558 06f5 72634C6F .string "rcLoading"
+ 1558 6164696E
+ 1558 6700
+ 1559 .LASF136:
+ 1560 06ff 72635661 .string "rcValidating"
+ 1560 6C696461
+ 1560 74696E67
+ 1560 00
+ 1561 .LASF230:
+ 1562 070c 72634C6F .string "rcLocked"
+ 1562 636B6564
+ 1562 00
+ 1563 .LASF59:
+ 1564 0715 72634974 .string "rcIterator"
+ 1564 65726174
+ 1564 6F7200
+ 1565 .LASF67:
+ 1566 0720 72634E6F .string "rcNode"
+ 1566 646500
+ 1567 .LASF1:
+ 1568 0727 73686F72 .string "short int"
+ 1568 7420696E
+ 1568 7400
+ 1569 .LASF102:
+ 1570 0731 72635265 .string "rcReleasing"
+ 1570 6C656173
+ 1570 696E6700
+ 1571 .LASF177:
+ 1572 073d 72635472 .string "rcTransfer"
+ 1572 616E7366
+ 1572 657200
+ 1573 .LASF2:
+ 1574 0748 6C6F6E67 .string "long int"
+ 1574 20696E74
+ 1574 00
+ 1575 .LASF262:
+ 1576 0751 4B426C6F .string "KBlockCipher"
+ 1576 636B4369
+ 1576 70686572
+ 1576 00
+ 1577 .LASF164:
+ 1578 075e 72635365 .string "rcSending"
+ 1578 6E64696E
+ 1578 6700
+ 1579 .LASF215:
+ 1580 0768 7263496E .string "rcInvalid"
+ 1580 76616C69
+ 1580 6400
+
GAS LISTING /tmp/cc32muHp.s page 37
+
+
+ 1581 .LASF249:
+ 1582 0772 72634E6F .string "rcNotOpen"
+ 1582 744F7065
+ 1582 6E00
+ 1583 .LASF103:
+ 1584 077c 72634163 .string "rcAccessing"
+ 1584 63657373
+ 1584 696E6700
+ 1585 .LASF29:
+ 1586 0788 72634E53 .string "rcNS"
+ 1586 00
+ 1587 .LASF112:
+ 1588 078d 72635072 .string "rcProjecting"
+ 1588 6F6A6563
+ 1588 74696E67
+ 1588 00
+ 1589 .LASF175:
+ 1590 079a 72634E61 .string "rcName"
+ 1590 6D6500
+ 1591 .LASF238:
+ 1592 07a1 7263496E .string "rcInPlaceNotAllowed"
+ 1592 506C6163
+ 1592 654E6F74
+ 1592 416C6C6F
+ 1592 77656400
+ 1593 .LASF247:
+ 1594 07b5 72634F70 .string "rcOpen"
+ 1594 656E00
+ 1595 .LASF227:
+ 1596 07bc 72635669 .string "rcViolated"
+ 1596 6F6C6174
+ 1596 656400
+ 1597 .LASF169:
+ 1598 07c7 72634E6F .string "rcNoObj"
+ 1598 4F626A00
+ 1599 .LASF200:
+ 1600 07cf 72635369 .string "rcSignalSet"
+ 1600 676E616C
+ 1600 53657400
+ 1601 .LASF197:
+ 1602 07db 7263436F .string "rcConnection"
+ 1602 6E6E6563
+ 1602 74696F6E
+ 1602 00
+ 1603 .LASF195:
+ 1604 07e8 72634368 .string "rcChecksum"
+ 1604 65636B73
+ 1604 756D00
+ 1605 .LASF78:
+ 1606 07f3 72635461 .string "rcTable"
+ 1606 626C6500
+ 1607 .LASF11:
+ 1608 07fb 72635275 .string "rcRuntime"
+ 1608 6E74696D
+ 1608 6500
+ 1609 .LASF148:
+ 1610 0805 72634C6F .string "rcLogging"
+
GAS LISTING /tmp/cc32muHp.s page 38
+
+
+ 1610 6767696E
+ 1610 6700
+ 1611 .LASF160:
+ 1612 080f 72634465 .string "rcDecrypting"
+ 1612 63727970
+ 1612 74696E67
+ 1612 00
+ 1613 .LASF61:
+ 1614 081c 72634C6F .string "rcLog"
+ 1614 6700
+ 1615 .LASF68:
+ 1616 0822 72634E75 .string "rcNumeral"
+ 1616 6D657261
+ 1616 6C00
+ 1617 .LASF172:
+ 1618 082c 72635061 .string "rcParam"
+ 1618 72616D00
+ 1619 .LASF32:
+ 1620 0834 52434D6F .string "RCModule"
+ 1620 64756C65
+ 1620 00
+ 1621 .LASF158:
+ 1622 083d 72634170 .string "rcAppending"
+ 1622 70656E64
+ 1622 696E6700
+ 1623 .LASF57:
+ 1624 0849 72634865 .string "rcHeader"
+ 1624 61646572
+ 1624 00
+ 1625 .LASF6:
+ 1626 0852 6C6F6E67 .string "long unsigned int"
+ 1626 20756E73
+ 1626 69676E65
+ 1626 6420696E
+ 1626 7400
+ 1627 .LASF245:
+ 1628 0864 72634F75 .string "rcOutofrange"
+ 1628 746F6672
+ 1628 616E6765
+ 1628 00
+ 1629 .LASF170:
+ 1630 0871 72634C69 .string "rcLink"
+ 1630 6E6B00
+ 1631 .LASF52:
+ 1632 0878 72634669 .string "rcFileDesc"
+ 1632 6C654465
+ 1632 736300
+ 1633 .LASF263:
+ 1634 0883 6E65775F .string "new_obj"
+ 1634 6F626A00
+ 1635 .LASF209:
+ 1636 088b 7263556E .string "rcUnexpected"
+ 1636 65787065
+ 1636 63746564
+ 1636 00
+ 1637 .LASF207:
+ 1638 0898 7263556E .string "rcUnknown"
+
GAS LISTING /tmp/cc32muHp.s page 39
+
+
+ 1638 6B6E6F77
+ 1638 6E00
+ 1639 .LASF155:
+ 1640 08a2 7263496E .string "rcInflating"
+ 1640 666C6174
+ 1640 696E6700
+ 1641 .LASF118:
+ 1642 08ae 72634F70 .string "rcOpening"
+ 1642 656E696E
+ 1642 6700
+ 1643 .LASF17:
+ 1644 08b8 72635053 .string "rcPS"
+ 1644 00
+ 1645 .LASF3:
+ 1646 08bd 756E7369 .string "unsigned char"
+ 1646 676E6564
+ 1646 20636861
+ 1646 7200
+ 1647 .LASF126:
+ 1648 08cb 72635065 .string "rcPersisting"
+ 1648 72736973
+ 1648 74696E67
+ 1648 00
+ 1649 .LASF259:
+ 1650 08d8 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 1650 652F726F
+ 1650 6461726D
+ 1650 65722F73
+ 1650 72615F73
+ 1651 .LASF220:
+ 1652 0912 7263496E .string "rcIncomplete"
+ 1652 636F6D70
+ 1652 6C657465
+ 1652 00
+ 1653 .LASF246:
+ 1654 091f 72634C61 .string "rcLastState_v1_0"
+ 1654 73745374
+ 1654 6174655F
+ 1654 76315F30
+ 1654 00
+ 1655 .LASF255:
+ 1656 0930 72634C61 .string "rcLastState_v1_1"
+ 1656 73745374
+ 1656 6174655F
+ 1656 76315F31
+ 1656 00
+ 1657 .LASF143:
+ 1658 0941 7263436F .string "rcConverting"
+ 1658 6E766572
+ 1658 74696E67
+ 1658 00
+ 1659 .LASF117:
+ 1660 094e 72634372 .string "rcCreating"
+ 1660 65617469
+ 1660 6E6700
+ 1661 .LASF191:
+ 1662 0959 72634974 .string "rcItem"
+
GAS LISTING /tmp/cc32muHp.s page 40
+
+
+ 1662 656D00
+ 1663 .LASF111:
+ 1664 0960 72635365 .string "rcSelecting"
+ 1664 6C656374
+ 1664 696E6700
+ 1665 .LASF8:
+ 1666 096c 72635F74 .string "rc_t"
+ 1666 00
+ 1667 .LASF73:
+ 1668 0971 72635257 .string "rcRWLock"
+ 1668 4C6F636B
+ 1668 00
+ 1669 .LASF190:
+ 1670 097a 72634C61 .string "rcLastObject_v1_0"
+ 1670 73744F62
+ 1670 6A656374
+ 1670 5F76315F
+ 1670 3000
+ 1671 .LASF203:
+ 1672 098c 72634C61 .string "rcLastObject_v1_1"
+ 1672 73744F62
+ 1672 6A656374
+ 1672 5F76315F
+ 1672 3100
+ 1673 .LASF187:
+ 1674 099e 72634172 .string "rcArcHardLink"
+ 1674 63486172
+ 1674 644C696E
+ 1674 6B00
+ 1675 .LASF113:
+ 1676 09ac 7263496E .string "rcInserting"
+ 1676 73657274
+ 1676 696E6700
+ 1677 .LASF166:
+ 1678 09b8 72634964 .string "rcIdentifying"
+ 1678 656E7469
+ 1678 6679696E
+ 1678 6700
+ 1679 .LASF124:
+ 1680 09c6 72635265 .string "rcReverting"
+ 1680 76657274
+ 1680 696E6700
+ 1681 .LASF20:
+ 1682 09d2 72635644 .string "rcVDB"
+ 1682 4200
+ 1683 .LASF105:
+ 1684 09d8 72635669 .string "rcVisiting"
+ 1684 73697469
+ 1684 6E6700
+ 1685 .LASF88:
+ 1686 09e3 72634C61 .string "rcLastTarget_v1_0"
+ 1686 73745461
+ 1686 72676574
+ 1686 5F76315F
+ 1686 3000
+ 1687 .LASF96:
+ 1688 09f5 72634C61 .string "rcLastTarget_v1_1"
+
GAS LISTING /tmp/cc32muHp.s page 41
+
+
+ 1688 73745461
+ 1688 72676574
+ 1688 5F76315F
+ 1688 3100
+ 1689 .LASF84:
+ 1690 0a07 72635479 .string "rcType"
+ 1690 706500
+ 1691 .LASF231:
+ 1692 0a0e 7263556E .string "rcUnlocked"
+ 1692 6C6F636B
+ 1692 656400
+ 1693 .LASF151:
+ 1694 0a19 7263436C .string "rcClassifying"
+ 1694 61737369
+ 1694 6679696E
+ 1694 6700
+ 1695 .LASF228:
+ 1696 0a27 72634578 .string "rcExists"
+ 1696 69737473
+ 1696 00
+ 1697 .LASF130:
+ 1698 0a30 7263466F .string "rcFormatting"
+ 1698 726D6174
+ 1698 74696E67
+ 1698 00
+ 1699 .LASF79:
+ 1700 0a3d 72635468 .string "rcThread"
+ 1700 72656164
+ 1700 00
+ 1701 .LASF0:
+ 1702 0a46 7369676E .string "signed char"
+ 1702 65642063
+ 1702 68617200
+ 1703 .LASF4:
+ 1704 0a52 73686F72 .string "short unsigned int"
+ 1704 7420756E
+ 1704 7369676E
+ 1704 65642069
+ 1704 6E7400
+ 1705 .LASF260:
+ 1706 0a65 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 1706 652F726F
+ 1706 6461726D
+ 1706 65722F73
+ 1706 72615F73
+ 1707 .LASF182:
+ 1708 0aad 72634279 .string "rcByteOrder"
+ 1708 74654F72
+ 1708 64657200
+ 1709 .LASF36:
+ 1710 0ab9 7263546F .string "rcToc"
+ 1710 6300
+ 1711 .LASF44:
+ 1712 0abf 7263436F .string "rcColumn"
+ 1712 6C756D6E
+ 1712 00
+ 1713 .LASF256:
+
GAS LISTING /tmp/cc32muHp.s page 42
+
+
+ 1714 0ac8 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 1714 45545459
+ 1714 5F46554E
+ 1714 4354494F
+ 1714 4E5F5F00
+ 1715 .LASF94:
+ 1716 0adc 72635175 .string "rcQuery"
+ 1716 65727900
+ 1717 .LASF140:
+ 1718 0ae4 72635265 .string "rcRegistering"
+ 1718 67697374
+ 1718 6572696E
+ 1718 6700
+ 1719 .LASF86:
+ 1720 0af2 72634479 .string "rcDylib"
+ 1720 6C696200
+ 1721 .LASF81:
+ 1722 0afa 7263546F .string "rcToken"
+ 1722 6B656E00
+ 1723 .LASF134:
+ 1724 0b02 7263456E .string "rcEncoding"
+ 1724 636F6469
+ 1724 6E6700
+ 1725 .LASF224:
+ 1726 0b0d 72634578 .string "rcExhausted"
+ 1726 68617573
+ 1726 74656400
+ 1727 .LASF186:
+ 1728 0b19 72634469 .string "rcDirEntry"
+ 1728 72456E74
+ 1728 727900
+ 1729 .LASF26:
+ 1730 0b24 7263416C .string "rcAlign"
+ 1730 69676E00
+ 1731 .LASF28:
+ 1732 0b2c 72635244 .string "rcRDBMS"
+ 1732 424D5300
+ 1733 .LASF14:
+ 1734 0b34 72634353 .string "rcCS"
+ 1734 00
+ 1735 .LASF129:
+ 1736 0b39 7263436F .string "rcConcatenating"
+ 1736 6E636174
+ 1736 656E6174
+ 1736 696E6700
+ 1737 .LASF48:
+ 1738 0b49 72634469 .string "rcDirectory"
+ 1738 72656374
+ 1738 6F727900
+ 1739 .LASF223:
+ 1740 0b55 7263456D .string "rcEmpty"
+ 1740 70747900
+ 1741 .LASF13:
+ 1742 0b5d 7263436F .string "rcCont"
+ 1742 6E7400
+ 1743 .LASF33:
+ 1744 0b64 52435461 .string "RCTarget"
+
GAS LISTING /tmp/cc32muHp.s page 43
+
+
+ 1744 72676574
+ 1744 00
+ 1745 .ident "GCC: (GNU) 4.4.2"
+ 1746 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/cc32muHp.s page 44
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 no-null-ncbi.c
+ /tmp/cc32muHp.s:17 .text:0000000000000000 KNullBlockCipherVecAesNiMake
+ /tmp/cc32muHp.s:66 .rodata:0000000000000040 __func__.2445
+ /tmp/cc32muHp.s:71 .rodata:0000000000000060 __PRETTY_FUNCTION__.2444
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/no-null-ncbi.c b/libs/krypto/no-null-ncbi.c
new file mode 100644
index 0000000..7477512
--- /dev/null
+++ b/libs/krypto/no-null-ncbi.c
@@ -0,0 +1,59 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+
+#include "ncbi-priv.h"
+#include "cipher-priv.h"
+/* #include "blockcipher-priv.h" */
+
+#include <klib/rc.h>
+
+/* ----------------------------------------------------------------------
+ * Make
+ *
+ * Create a new Null Block Cipher object.
+ * The processor is checked to see if this particular version is supported on
+ * this particular CPU.
+ */
+struct KBlockCipher;
+rc_t NULLBCMEMBER(Make) (struct KBlockCipher ** new_obj)
+{
+ rc_t rc;
+
+ /* Check parameter first */
+ if (new_obj == NULL)
+ rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+
+ else
+ {
+ *new_obj = NULL;
+
+ rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ }
+ return rc;
+}
+
+/* end of file lib/krypto/aes-ncbi.c */
diff --git a/libs/krypto/no-null-ncbi.vec.pic.o.list b/libs/krypto/no-null-ncbi.vec.pic.o.list
new file mode 100644
index 0000000..5db68b2
--- /dev/null
+++ b/libs/krypto/no-null-ncbi.vec.pic.o.list
@@ -0,0 +1,2540 @@
+GAS LISTING /tmp/cctAECUH.s page 1
+
+
+ 1 .file "no-null-ncbi.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 CC000000 .text
+ 8 0200AA00
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .section .rodata
+ 11 .align 8
+ 12 .LC0:
+ 13 0000 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 13 652F726F
+ 13 6461726D
+ 13 65722F73
+ 13 72615F73
+ 14 .text
+ 15 .globl KNullBlockCipherVecMake
+ 16 .type KNullBlockCipherVecMake, @function
+ 17 KNullBlockCipherVecMake:
+ 18 .LFB15:
+ 19 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <krypto/extern.h>
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "ncbi-priv.h"
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "cipher-priv.h"
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* #include "blockcipher-priv.h" */
+
GAS LISTING /tmp/cctAECUH.s page 2
+
+
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <klib/rc.h>
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* ----------------------------------------------------------------------
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Make
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Create a new Null Block Cipher object.
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * The processor is checked to see if this particular version is supported on
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * this particular CPU.
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** */
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** struct KBlockCipher;
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc_t NULLBCMEMBER(Make) (struct KBlockCipher ** new_obj)
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** {
+ 20 .loc 1 43 0
+ 21 .cfi_startproc
+ 22 0000 55 pushq %rbp
+ 23 .LCFI0:
+ 24 .cfi_def_cfa_offset 16
+ 25 0001 4889E5 movq %rsp, %rbp
+ 26 .cfi_offset 6, -16
+ 27 .LCFI1:
+ 28 .cfi_def_cfa_register 6
+ 29 0004 4883EC20 subq $32, %rsp
+ 30 0008 48897DE8 movq %rdi, -24(%rbp)
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc_t rc;
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* Check parameter first */
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** if (new_obj == NULL)
+ 31 .loc 1 47 0
+ 32 000c 48837DE8 cmpq $0, -24(%rbp)
+ 32 00
+ 33 0011 7522 jne .L2
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 34 .loc 1 48 0
+ 35 0013 B9300000 movl $48, %ecx
+ 35 00
+ 36 0018 488D1500 leaq __func__.2350(%rip), %rdx
+ 36 000000
+ 37 001f 488D3500 leaq .LC0(%rip), %rsi
+ 37 000000
+ 38 0026 BF878F00 movl $-2030006393, %edi
+ 38 87
+ 39 002b E8000000 call SetRCFileFuncLine at PLT
+ 39 00
+ 40 0030 8945FC movl %eax, -4(%rbp)
+ 41 0033 EB2B jmp .L3
+ 42 .L2:
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** else
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** {
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *new_obj = NULL;
+ 43 .loc 1 52 0
+ 44 0035 488B45E8 movq -24(%rbp), %rax
+ 45 0039 48C70000 movq $0, (%rax)
+ 45 000000
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
GAS LISTING /tmp/cctAECUH.s page 3
+
+
+ 46 .loc 1 54 0
+ 47 0040 B9360000 movl $54, %ecx
+ 47 00
+ 48 0045 488D1500 leaq __func__.2350(%rip), %rdx
+ 48 000000
+ 49 004c 488D3500 leaq .LC0(%rip), %rsi
+ 49 000000
+ 50 0053 BF038500 movl $-2030009085, %edi
+ 50 87
+ 51 0058 E8000000 call SetRCFileFuncLine at PLT
+ 51 00
+ 52 005d 8945FC movl %eax, -4(%rbp)
+ 53 .L3:
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** }
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** return rc;
+ 54 .loc 1 56 0
+ 55 0060 8B45FC movl -4(%rbp), %eax
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** }
+ 56 .loc 1 57 0
+ 57 0063 C9 leave
+ 58 0064 C3 ret
+ 59 .cfi_endproc
+ 60 .LFE15:
+ 61 .size KNullBlockCipherVecMake, .-KNullBlockCipherVecMake
+ 62 .section .rodata
+ 63 003a 00000000 .align 16
+ 63 0000
+ 64 .type __func__.2350, @object
+ 65 .size __func__.2350, 24
+ 66 __func__.2350:
+ 67 0040 4B4E756C .string "KNullBlockCipherVecMake"
+ 67 6C426C6F
+ 67 636B4369
+ 67 70686572
+ 67 5665634D
+ 68 0058 00000000 .align 16
+ 68 00000000
+ 69 .type __PRETTY_FUNCTION__.2349, @object
+ 70 .size __PRETTY_FUNCTION__.2349, 24
+ 71 __PRETTY_FUNCTION__.2349:
+ 72 0060 4B4E756C .string "KNullBlockCipherVecMake"
+ 72 6C426C6F
+ 72 636B4369
+ 72 70686572
+ 72 5665634D
+ 73 .text
+ 74 .Letext0:
+ 75 .section .debug_loc,"", at progbits
+ 76 .Ldebug_loc0:
+ 77 .LLST0:
+ 78 0000 00000000 .quad .LFB15-.Ltext0
+ 78 00000000
+ 79 0008 01000000 .quad .LCFI0-.Ltext0
+ 79 00000000
+ 80 0010 0200 .value 0x2
+ 81 0012 77 .byte 0x77
+ 82 0013 08 .sleb128 8
+
GAS LISTING /tmp/cctAECUH.s page 4
+
+
+ 83 0014 01000000 .quad .LCFI0-.Ltext0
+ 83 00000000
+ 84 001c 04000000 .quad .LCFI1-.Ltext0
+ 84 00000000
+ 85 0024 0200 .value 0x2
+ 86 0026 77 .byte 0x77
+ 87 0027 10 .sleb128 16
+ 88 0028 04000000 .quad .LCFI1-.Ltext0
+ 88 00000000
+ 89 0030 65000000 .quad .LFE15-.Ltext0
+ 89 00000000
+ 90 0038 0200 .value 0x2
+ 91 003a 76 .byte 0x76
+ 92 003b 10 .sleb128 16
+ 93 003c 00000000 .quad 0x0
+ 93 00000000
+ 94 0044 00000000 .quad 0x0
+ 94 00000000
+ 95 .file 2 "/usr/include/stdint.h"
+ 96 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 97 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 98 .section .debug_info
+ 99 0000 24070000 .long 0x724
+ 100 0004 0200 .value 0x2
+ 101 0006 00000000 .long .Ldebug_abbrev0
+ 102 000a 08 .byte 0x8
+ 103 000b 01 .uleb128 0x1
+ 104 000c 00000000 .long .LASF258
+ 105 0010 01 .byte 0x1
+ 106 0011 00000000 .long .LASF259
+ 107 0015 00000000 .long .LASF260
+ 108 0019 00000000 .quad .Ltext0
+ 108 00000000
+ 109 0021 00000000 .quad .Letext0
+ 109 00000000
+ 110 0029 00000000 .long .Ldebug_line0
+ 111 002d 02 .uleb128 0x2
+ 112 002e 01 .byte 0x1
+ 113 002f 06 .byte 0x6
+ 114 0030 00000000 .long .LASF0
+ 115 0034 02 .uleb128 0x2
+ 116 0035 02 .byte 0x2
+ 117 0036 05 .byte 0x5
+ 118 0037 00000000 .long .LASF1
+ 119 003b 03 .uleb128 0x3
+ 120 003c 04 .byte 0x4
+ 121 003d 05 .byte 0x5
+ 122 003e 696E7400 .string "int"
+ 123 0042 02 .uleb128 0x2
+ 124 0043 08 .byte 0x8
+ 125 0044 05 .byte 0x5
+ 126 0045 00000000 .long .LASF2
+ 127 0049 02 .uleb128 0x2
+ 128 004a 01 .byte 0x1
+ 129 004b 08 .byte 0x8
+ 130 004c 00000000 .long .LASF3
+ 131 0050 02 .uleb128 0x2
+
GAS LISTING /tmp/cctAECUH.s page 5
+
+
+ 132 0051 02 .byte 0x2
+ 133 0052 07 .byte 0x7
+ 134 0053 00000000 .long .LASF4
+ 135 0057 04 .uleb128 0x4
+ 136 0058 00000000 .long .LASF7
+ 137 005c 02 .byte 0x2
+ 138 005d 34 .byte 0x34
+ 139 005e 62000000 .long 0x62
+ 140 0062 02 .uleb128 0x2
+ 141 0063 04 .byte 0x4
+ 142 0064 07 .byte 0x7
+ 143 0065 00000000 .long .LASF5
+ 144 0069 02 .uleb128 0x2
+ 145 006a 08 .byte 0x8
+ 146 006b 07 .byte 0x7
+ 147 006c 00000000 .long .LASF6
+ 148 0070 04 .uleb128 0x4
+ 149 0071 00000000 .long .LASF8
+ 150 0075 03 .byte 0x3
+ 151 0076 30 .byte 0x30
+ 152 0077 57000000 .long 0x57
+ 153 007b 05 .uleb128 0x5
+ 154 007c 08 .byte 0x8
+ 155 007d 07 .byte 0x7
+ 156 007e 02 .uleb128 0x2
+ 157 007f 01 .byte 0x1
+ 158 0080 06 .byte 0x6
+ 159 0081 00000000 .long .LASF9
+ 160 0085 06 .uleb128 0x6
+ 161 0086 00000000 .long .LASF32
+ 162 008a 04 .byte 0x4
+ 163 008b 04 .byte 0x4
+ 164 008c 5A .byte 0x5a
+ 165 008d 16010000 .long 0x116
+ 166 0091 07 .uleb128 0x7
+ 167 0092 00000000 .long .LASF10
+ 168 0096 00 .sleb128 0
+ 169 0097 07 .uleb128 0x7
+ 170 0098 00000000 .long .LASF11
+ 171 009c 01 .sleb128 1
+ 172 009d 07 .uleb128 0x7
+ 173 009e 00000000 .long .LASF12
+ 174 00a2 02 .sleb128 2
+ 175 00a3 07 .uleb128 0x7
+ 176 00a4 00000000 .long .LASF13
+ 177 00a8 03 .sleb128 3
+ 178 00a9 07 .uleb128 0x7
+ 179 00aa 00000000 .long .LASF14
+ 180 00ae 04 .sleb128 4
+ 181 00af 07 .uleb128 0x7
+ 182 00b0 00000000 .long .LASF15
+ 183 00b4 05 .sleb128 5
+ 184 00b5 07 .uleb128 0x7
+ 185 00b6 00000000 .long .LASF16
+ 186 00ba 06 .sleb128 6
+ 187 00bb 07 .uleb128 0x7
+ 188 00bc 00000000 .long .LASF17
+
GAS LISTING /tmp/cctAECUH.s page 6
+
+
+ 189 00c0 07 .sleb128 7
+ 190 00c1 07 .uleb128 0x7
+ 191 00c2 00000000 .long .LASF18
+ 192 00c6 08 .sleb128 8
+ 193 00c7 07 .uleb128 0x7
+ 194 00c8 00000000 .long .LASF19
+ 195 00cc 09 .sleb128 9
+ 196 00cd 07 .uleb128 0x7
+ 197 00ce 00000000 .long .LASF20
+ 198 00d2 0A .sleb128 10
+ 199 00d3 07 .uleb128 0x7
+ 200 00d4 00000000 .long .LASF21
+ 201 00d8 0B .sleb128 11
+ 202 00d9 07 .uleb128 0x7
+ 203 00da 00000000 .long .LASF22
+ 204 00de 0C .sleb128 12
+ 205 00df 07 .uleb128 0x7
+ 206 00e0 00000000 .long .LASF23
+ 207 00e4 0D .sleb128 13
+ 208 00e5 07 .uleb128 0x7
+ 209 00e6 00000000 .long .LASF24
+ 210 00ea 0E .sleb128 14
+ 211 00eb 07 .uleb128 0x7
+ 212 00ec 00000000 .long .LASF25
+ 213 00f0 0E .sleb128 14
+ 214 00f1 07 .uleb128 0x7
+ 215 00f2 00000000 .long .LASF26
+ 216 00f6 0F .sleb128 15
+ 217 00f7 07 .uleb128 0x7
+ 218 00f8 00000000 .long .LASF27
+ 219 00fc 10 .sleb128 16
+ 220 00fd 07 .uleb128 0x7
+ 221 00fe 00000000 .long .LASF28
+ 222 0102 11 .sleb128 17
+ 223 0103 07 .uleb128 0x7
+ 224 0104 00000000 .long .LASF29
+ 225 0108 12 .sleb128 18
+ 226 0109 07 .uleb128 0x7
+ 227 010a 00000000 .long .LASF30
+ 228 010e 13 .sleb128 19
+ 229 010f 07 .uleb128 0x7
+ 230 0110 00000000 .long .LASF31
+ 231 0114 14 .sleb128 20
+ 232 0115 00 .byte 0x0
+ 233 0116 06 .uleb128 0x6
+ 234 0117 00000000 .long .LASF33
+ 235 011b 04 .byte 0x4
+ 236 011c 04 .byte 0x4
+ 237 011d 77 .byte 0x77
+ 238 011e 9D020000 .long 0x29d
+ 239 0122 07 .uleb128 0x7
+ 240 0123 00000000 .long .LASF34
+ 241 0127 00 .sleb128 0
+ 242 0128 07 .uleb128 0x7
+ 243 0129 00000000 .long .LASF35
+ 244 012d 01 .sleb128 1
+ 245 012e 07 .uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s page 7
+
+
+ 246 012f 00000000 .long .LASF36
+ 247 0133 02 .sleb128 2
+ 248 0134 07 .uleb128 0x7
+ 249 0135 00000000 .long .LASF37
+ 250 0139 03 .sleb128 3
+ 251 013a 07 .uleb128 0x7
+ 252 013b 00000000 .long .LASF38
+ 253 013f 04 .sleb128 4
+ 254 0140 07 .uleb128 0x7
+ 255 0141 00000000 .long .LASF39
+ 256 0145 05 .sleb128 5
+ 257 0146 07 .uleb128 0x7
+ 258 0147 00000000 .long .LASF40
+ 259 014b 06 .sleb128 6
+ 260 014c 07 .uleb128 0x7
+ 261 014d 00000000 .long .LASF41
+ 262 0151 07 .sleb128 7
+ 263 0152 07 .uleb128 0x7
+ 264 0153 00000000 .long .LASF42
+ 265 0157 08 .sleb128 8
+ 266 0158 07 .uleb128 0x7
+ 267 0159 00000000 .long .LASF43
+ 268 015d 09 .sleb128 9
+ 269 015e 07 .uleb128 0x7
+ 270 015f 00000000 .long .LASF44
+ 271 0163 0A .sleb128 10
+ 272 0164 07 .uleb128 0x7
+ 273 0165 00000000 .long .LASF45
+ 274 0169 0B .sleb128 11
+ 275 016a 07 .uleb128 0x7
+ 276 016b 00000000 .long .LASF46
+ 277 016f 0C .sleb128 12
+ 278 0170 07 .uleb128 0x7
+ 279 0171 00000000 .long .LASF47
+ 280 0175 0D .sleb128 13
+ 281 0176 07 .uleb128 0x7
+ 282 0177 00000000 .long .LASF48
+ 283 017b 0E .sleb128 14
+ 284 017c 07 .uleb128 0x7
+ 285 017d 00000000 .long .LASF49
+ 286 0181 0F .sleb128 15
+ 287 0182 07 .uleb128 0x7
+ 288 0183 00000000 .long .LASF50
+ 289 0187 10 .sleb128 16
+ 290 0188 07 .uleb128 0x7
+ 291 0189 00000000 .long .LASF51
+ 292 018d 11 .sleb128 17
+ 293 018e 07 .uleb128 0x7
+ 294 018f 00000000 .long .LASF52
+ 295 0193 12 .sleb128 18
+ 296 0194 07 .uleb128 0x7
+ 297 0195 00000000 .long .LASF53
+ 298 0199 13 .sleb128 19
+ 299 019a 07 .uleb128 0x7
+ 300 019b 00000000 .long .LASF54
+ 301 019f 14 .sleb128 20
+ 302 01a0 07 .uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s page 8
+
+
+ 303 01a1 00000000 .long .LASF55
+ 304 01a5 15 .sleb128 21
+ 305 01a6 07 .uleb128 0x7
+ 306 01a7 00000000 .long .LASF56
+ 307 01ab 16 .sleb128 22
+ 308 01ac 07 .uleb128 0x7
+ 309 01ad 00000000 .long .LASF57
+ 310 01b1 17 .sleb128 23
+ 311 01b2 07 .uleb128 0x7
+ 312 01b3 00000000 .long .LASF58
+ 313 01b7 18 .sleb128 24
+ 314 01b8 07 .uleb128 0x7
+ 315 01b9 00000000 .long .LASF59
+ 316 01bd 19 .sleb128 25
+ 317 01be 07 .uleb128 0x7
+ 318 01bf 00000000 .long .LASF60
+ 319 01c3 1A .sleb128 26
+ 320 01c4 07 .uleb128 0x7
+ 321 01c5 00000000 .long .LASF61
+ 322 01c9 1B .sleb128 27
+ 323 01ca 07 .uleb128 0x7
+ 324 01cb 00000000 .long .LASF62
+ 325 01cf 1C .sleb128 28
+ 326 01d0 07 .uleb128 0x7
+ 327 01d1 00000000 .long .LASF63
+ 328 01d5 1D .sleb128 29
+ 329 01d6 07 .uleb128 0x7
+ 330 01d7 00000000 .long .LASF64
+ 331 01db 1E .sleb128 30
+ 332 01dc 07 .uleb128 0x7
+ 333 01dd 00000000 .long .LASF65
+ 334 01e1 1F .sleb128 31
+ 335 01e2 07 .uleb128 0x7
+ 336 01e3 00000000 .long .LASF66
+ 337 01e7 20 .sleb128 32
+ 338 01e8 07 .uleb128 0x7
+ 339 01e9 00000000 .long .LASF67
+ 340 01ed 21 .sleb128 33
+ 341 01ee 07 .uleb128 0x7
+ 342 01ef 00000000 .long .LASF68
+ 343 01f3 22 .sleb128 34
+ 344 01f4 07 .uleb128 0x7
+ 345 01f5 00000000 .long .LASF69
+ 346 01f9 23 .sleb128 35
+ 347 01fa 07 .uleb128 0x7
+ 348 01fb 00000000 .long .LASF70
+ 349 01ff 24 .sleb128 36
+ 350 0200 07 .uleb128 0x7
+ 351 0201 00000000 .long .LASF71
+ 352 0205 25 .sleb128 37
+ 353 0206 07 .uleb128 0x7
+ 354 0207 00000000 .long .LASF72
+ 355 020b 26 .sleb128 38
+ 356 020c 07 .uleb128 0x7
+ 357 020d 00000000 .long .LASF73
+ 358 0211 27 .sleb128 39
+ 359 0212 07 .uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s page 9
+
+
+ 360 0213 00000000 .long .LASF74
+ 361 0217 28 .sleb128 40
+ 362 0218 07 .uleb128 0x7
+ 363 0219 00000000 .long .LASF75
+ 364 021d 29 .sleb128 41
+ 365 021e 07 .uleb128 0x7
+ 366 021f 00000000 .long .LASF76
+ 367 0223 2A .sleb128 42
+ 368 0224 07 .uleb128 0x7
+ 369 0225 00000000 .long .LASF77
+ 370 0229 2B .sleb128 43
+ 371 022a 07 .uleb128 0x7
+ 372 022b 00000000 .long .LASF78
+ 373 022f 2C .sleb128 44
+ 374 0230 07 .uleb128 0x7
+ 375 0231 00000000 .long .LASF79
+ 376 0235 2D .sleb128 45
+ 377 0236 07 .uleb128 0x7
+ 378 0237 00000000 .long .LASF80
+ 379 023b 2E .sleb128 46
+ 380 023c 07 .uleb128 0x7
+ 381 023d 00000000 .long .LASF81
+ 382 0241 2F .sleb128 47
+ 383 0242 07 .uleb128 0x7
+ 384 0243 00000000 .long .LASF82
+ 385 0247 30 .sleb128 48
+ 386 0248 07 .uleb128 0x7
+ 387 0249 00000000 .long .LASF83
+ 388 024d 31 .sleb128 49
+ 389 024e 07 .uleb128 0x7
+ 390 024f 00000000 .long .LASF84
+ 391 0253 32 .sleb128 50
+ 392 0254 07 .uleb128 0x7
+ 393 0255 00000000 .long .LASF85
+ 394 0259 33 .sleb128 51
+ 395 025a 07 .uleb128 0x7
+ 396 025b 00000000 .long .LASF86
+ 397 025f 34 .sleb128 52
+ 398 0260 07 .uleb128 0x7
+ 399 0261 00000000 .long .LASF87
+ 400 0265 35 .sleb128 53
+ 401 0266 07 .uleb128 0x7
+ 402 0267 00000000 .long .LASF88
+ 403 026b 36 .sleb128 54
+ 404 026c 07 .uleb128 0x7
+ 405 026d 00000000 .long .LASF89
+ 406 0271 36 .sleb128 54
+ 407 0272 07 .uleb128 0x7
+ 408 0273 00000000 .long .LASF90
+ 409 0277 37 .sleb128 55
+ 410 0278 07 .uleb128 0x7
+ 411 0279 00000000 .long .LASF91
+ 412 027d 38 .sleb128 56
+ 413 027e 07 .uleb128 0x7
+ 414 027f 00000000 .long .LASF92
+ 415 0283 39 .sleb128 57
+ 416 0284 07 .uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s page 10
+
+
+ 417 0285 00000000 .long .LASF93
+ 418 0289 3A .sleb128 58
+ 419 028a 07 .uleb128 0x7
+ 420 028b 00000000 .long .LASF94
+ 421 028f 3B .sleb128 59
+ 422 0290 07 .uleb128 0x7
+ 423 0291 00000000 .long .LASF95
+ 424 0295 3C .sleb128 60
+ 425 0296 07 .uleb128 0x7
+ 426 0297 00000000 .long .LASF96
+ 427 029b 3D .sleb128 61
+ 428 029c 00 .byte 0x0
+ 429 029d 06 .uleb128 0x6
+ 430 029e 00000000 .long .LASF97
+ 431 02a2 04 .byte 0x4
+ 432 02a3 04 .byte 0x4
+ 433 02a4 BD .byte 0xbd
+ 434 02a5 53040000 .long 0x453
+ 435 02a9 07 .uleb128 0x7
+ 436 02aa 00000000 .long .LASF98
+ 437 02ae 00 .sleb128 0
+ 438 02af 07 .uleb128 0x7
+ 439 02b0 00000000 .long .LASF99
+ 440 02b4 01 .sleb128 1
+ 441 02b5 07 .uleb128 0x7
+ 442 02b6 00000000 .long .LASF100
+ 443 02ba 02 .sleb128 2
+ 444 02bb 07 .uleb128 0x7
+ 445 02bc 00000000 .long .LASF101
+ 446 02c0 03 .sleb128 3
+ 447 02c1 07 .uleb128 0x7
+ 448 02c2 00000000 .long .LASF102
+ 449 02c6 04 .sleb128 4
+ 450 02c7 07 .uleb128 0x7
+ 451 02c8 00000000 .long .LASF103
+ 452 02cc 05 .sleb128 5
+ 453 02cd 07 .uleb128 0x7
+ 454 02ce 00000000 .long .LASF104
+ 455 02d2 06 .sleb128 6
+ 456 02d3 07 .uleb128 0x7
+ 457 02d4 00000000 .long .LASF105
+ 458 02d8 07 .sleb128 7
+ 459 02d9 07 .uleb128 0x7
+ 460 02da 00000000 .long .LASF106
+ 461 02de 08 .sleb128 8
+ 462 02df 07 .uleb128 0x7
+ 463 02e0 00000000 .long .LASF107
+ 464 02e4 09 .sleb128 9
+ 465 02e5 07 .uleb128 0x7
+ 466 02e6 00000000 .long .LASF108
+ 467 02ea 0A .sleb128 10
+ 468 02eb 07 .uleb128 0x7
+ 469 02ec 00000000 .long .LASF109
+ 470 02f0 0B .sleb128 11
+ 471 02f1 07 .uleb128 0x7
+ 472 02f2 00000000 .long .LASF110
+ 473 02f6 0C .sleb128 12
+
GAS LISTING /tmp/cctAECUH.s page 11
+
+
+ 474 02f7 07 .uleb128 0x7
+ 475 02f8 00000000 .long .LASF111
+ 476 02fc 0D .sleb128 13
+ 477 02fd 07 .uleb128 0x7
+ 478 02fe 00000000 .long .LASF112
+ 479 0302 0E .sleb128 14
+ 480 0303 07 .uleb128 0x7
+ 481 0304 00000000 .long .LASF113
+ 482 0308 0F .sleb128 15
+ 483 0309 07 .uleb128 0x7
+ 484 030a 00000000 .long .LASF114
+ 485 030e 10 .sleb128 16
+ 486 030f 07 .uleb128 0x7
+ 487 0310 00000000 .long .LASF115
+ 488 0314 11 .sleb128 17
+ 489 0315 07 .uleb128 0x7
+ 490 0316 00000000 .long .LASF116
+ 491 031a 12 .sleb128 18
+ 492 031b 07 .uleb128 0x7
+ 493 031c 00000000 .long .LASF117
+ 494 0320 13 .sleb128 19
+ 495 0321 07 .uleb128 0x7
+ 496 0322 00000000 .long .LASF118
+ 497 0326 14 .sleb128 20
+ 498 0327 07 .uleb128 0x7
+ 499 0328 00000000 .long .LASF119
+ 500 032c 15 .sleb128 21
+ 501 032d 07 .uleb128 0x7
+ 502 032e 00000000 .long .LASF120
+ 503 0332 16 .sleb128 22
+ 504 0333 07 .uleb128 0x7
+ 505 0334 00000000 .long .LASF121
+ 506 0338 17 .sleb128 23
+ 507 0339 07 .uleb128 0x7
+ 508 033a 00000000 .long .LASF122
+ 509 033e 18 .sleb128 24
+ 510 033f 07 .uleb128 0x7
+ 511 0340 00000000 .long .LASF123
+ 512 0344 19 .sleb128 25
+ 513 0345 07 .uleb128 0x7
+ 514 0346 00000000 .long .LASF124
+ 515 034a 1A .sleb128 26
+ 516 034b 07 .uleb128 0x7
+ 517 034c 00000000 .long .LASF125
+ 518 0350 1B .sleb128 27
+ 519 0351 07 .uleb128 0x7
+ 520 0352 00000000 .long .LASF126
+ 521 0356 1C .sleb128 28
+ 522 0357 07 .uleb128 0x7
+ 523 0358 00000000 .long .LASF127
+ 524 035c 1D .sleb128 29
+ 525 035d 07 .uleb128 0x7
+ 526 035e 00000000 .long .LASF128
+ 527 0362 1E .sleb128 30
+ 528 0363 07 .uleb128 0x7
+ 529 0364 00000000 .long .LASF129
+ 530 0368 1F .sleb128 31
+
GAS LISTING /tmp/cctAECUH.s page 12
+
+
+ 531 0369 07 .uleb128 0x7
+ 532 036a 00000000 .long .LASF130
+ 533 036e 20 .sleb128 32
+ 534 036f 07 .uleb128 0x7
+ 535 0370 00000000 .long .LASF131
+ 536 0374 21 .sleb128 33
+ 537 0375 07 .uleb128 0x7
+ 538 0376 00000000 .long .LASF132
+ 539 037a 22 .sleb128 34
+ 540 037b 07 .uleb128 0x7
+ 541 037c 00000000 .long .LASF133
+ 542 0380 23 .sleb128 35
+ 543 0381 07 .uleb128 0x7
+ 544 0382 00000000 .long .LASF134
+ 545 0386 24 .sleb128 36
+ 546 0387 07 .uleb128 0x7
+ 547 0388 00000000 .long .LASF135
+ 548 038c 25 .sleb128 37
+ 549 038d 07 .uleb128 0x7
+ 550 038e 00000000 .long .LASF136
+ 551 0392 26 .sleb128 38
+ 552 0393 07 .uleb128 0x7
+ 553 0394 00000000 .long .LASF137
+ 554 0398 27 .sleb128 39
+ 555 0399 07 .uleb128 0x7
+ 556 039a 00000000 .long .LASF138
+ 557 039e 28 .sleb128 40
+ 558 039f 07 .uleb128 0x7
+ 559 03a0 00000000 .long .LASF139
+ 560 03a4 29 .sleb128 41
+ 561 03a5 07 .uleb128 0x7
+ 562 03a6 00000000 .long .LASF140
+ 563 03aa 2A .sleb128 42
+ 564 03ab 07 .uleb128 0x7
+ 565 03ac 00000000 .long .LASF141
+ 566 03b0 2B .sleb128 43
+ 567 03b1 07 .uleb128 0x7
+ 568 03b2 00000000 .long .LASF142
+ 569 03b6 2C .sleb128 44
+ 570 03b7 07 .uleb128 0x7
+ 571 03b8 00000000 .long .LASF143
+ 572 03bc 2D .sleb128 45
+ 573 03bd 07 .uleb128 0x7
+ 574 03be 00000000 .long .LASF144
+ 575 03c2 2E .sleb128 46
+ 576 03c3 07 .uleb128 0x7
+ 577 03c4 00000000 .long .LASF145
+ 578 03c8 2F .sleb128 47
+ 579 03c9 07 .uleb128 0x7
+ 580 03ca 00000000 .long .LASF146
+ 581 03ce 30 .sleb128 48
+ 582 03cf 07 .uleb128 0x7
+ 583 03d0 00000000 .long .LASF147
+ 584 03d4 31 .sleb128 49
+ 585 03d5 07 .uleb128 0x7
+ 586 03d6 00000000 .long .LASF148
+ 587 03da 32 .sleb128 50
+
GAS LISTING /tmp/cctAECUH.s page 13
+
+
+ 588 03db 07 .uleb128 0x7
+ 589 03dc 00000000 .long .LASF149
+ 590 03e0 33 .sleb128 51
+ 591 03e1 07 .uleb128 0x7
+ 592 03e2 00000000 .long .LASF150
+ 593 03e6 34 .sleb128 52
+ 594 03e7 07 .uleb128 0x7
+ 595 03e8 00000000 .long .LASF151
+ 596 03ec 35 .sleb128 53
+ 597 03ed 07 .uleb128 0x7
+ 598 03ee 00000000 .long .LASF152
+ 599 03f2 36 .sleb128 54
+ 600 03f3 07 .uleb128 0x7
+ 601 03f4 00000000 .long .LASF153
+ 602 03f8 37 .sleb128 55
+ 603 03f9 07 .uleb128 0x7
+ 604 03fa 00000000 .long .LASF154
+ 605 03fe 38 .sleb128 56
+ 606 03ff 07 .uleb128 0x7
+ 607 0400 00000000 .long .LASF155
+ 608 0404 39 .sleb128 57
+ 609 0405 07 .uleb128 0x7
+ 610 0406 00000000 .long .LASF156
+ 611 040a 3A .sleb128 58
+ 612 040b 07 .uleb128 0x7
+ 613 040c 00000000 .long .LASF157
+ 614 0410 3A .sleb128 58
+ 615 0411 07 .uleb128 0x7
+ 616 0412 00000000 .long .LASF158
+ 617 0416 3B .sleb128 59
+ 618 0417 07 .uleb128 0x7
+ 619 0418 00000000 .long .LASF159
+ 620 041c 3C .sleb128 60
+ 621 041d 07 .uleb128 0x7
+ 622 041e 00000000 .long .LASF160
+ 623 0422 3D .sleb128 61
+ 624 0423 07 .uleb128 0x7
+ 625 0424 00000000 .long .LASF161
+ 626 0428 3E .sleb128 62
+ 627 0429 07 .uleb128 0x7
+ 628 042a 00000000 .long .LASF162
+ 629 042e 3F .sleb128 63
+ 630 042f 07 .uleb128 0x7
+ 631 0430 00000000 .long .LASF163
+ 632 0434 C000 .sleb128 64
+ 633 0436 07 .uleb128 0x7
+ 634 0437 00000000 .long .LASF164
+ 635 043b C100 .sleb128 65
+ 636 043d 07 .uleb128 0x7
+ 637 043e 00000000 .long .LASF165
+ 638 0442 C200 .sleb128 66
+ 639 0444 07 .uleb128 0x7
+ 640 0445 00000000 .long .LASF166
+ 641 0449 C300 .sleb128 67
+ 642 044b 07 .uleb128 0x7
+ 643 044c 00000000 .long .LASF167
+ 644 0450 C400 .sleb128 68
+
GAS LISTING /tmp/cctAECUH.s page 14
+
+
+ 645 0452 00 .byte 0x0
+ 646 0453 08 .uleb128 0x8
+ 647 0454 00000000 .long .LASF168
+ 648 0458 04 .byte 0x4
+ 649 0459 04 .byte 0x4
+ 650 045a 0A01 .value 0x10a
+ 651 045c 52050000 .long 0x552
+ 652 0460 07 .uleb128 0x7
+ 653 0461 00000000 .long .LASF169
+ 654 0465 00 .sleb128 0
+ 655 0466 07 .uleb128 0x7
+ 656 0467 00000000 .long .LASF170
+ 657 046b 3D .sleb128 61
+ 658 046c 07 .uleb128 0x7
+ 659 046d 00000000 .long .LASF171
+ 660 0471 3E .sleb128 62
+ 661 0472 07 .uleb128 0x7
+ 662 0473 00000000 .long .LASF172
+ 663 0477 3F .sleb128 63
+ 664 0478 07 .uleb128 0x7
+ 665 0479 00000000 .long .LASF173
+ 666 047d C000 .sleb128 64
+ 667 047f 07 .uleb128 0x7
+ 668 0480 00000000 .long .LASF174
+ 669 0484 C100 .sleb128 65
+ 670 0486 07 .uleb128 0x7
+ 671 0487 00000000 .long .LASF175
+ 672 048b C200 .sleb128 66
+ 673 048d 07 .uleb128 0x7
+ 674 048e 00000000 .long .LASF176
+ 675 0492 C300 .sleb128 67
+ 676 0494 07 .uleb128 0x7
+ 677 0495 00000000 .long .LASF177
+ 678 0499 C400 .sleb128 68
+ 679 049b 07 .uleb128 0x7
+ 680 049c 00000000 .long .LASF178
+ 681 04a0 C500 .sleb128 69
+ 682 04a2 07 .uleb128 0x7
+ 683 04a3 00000000 .long .LASF179
+ 684 04a7 C600 .sleb128 70
+ 685 04a9 07 .uleb128 0x7
+ 686 04aa 00000000 .long .LASF180
+ 687 04ae C700 .sleb128 71
+ 688 04b0 07 .uleb128 0x7
+ 689 04b1 00000000 .long .LASF181
+ 690 04b5 C800 .sleb128 72
+ 691 04b7 07 .uleb128 0x7
+ 692 04b8 00000000 .long .LASF182
+ 693 04bc C900 .sleb128 73
+ 694 04be 07 .uleb128 0x7
+ 695 04bf 00000000 .long .LASF183
+ 696 04c3 CA00 .sleb128 74
+ 697 04c5 07 .uleb128 0x7
+ 698 04c6 00000000 .long .LASF184
+ 699 04ca CB00 .sleb128 75
+ 700 04cc 07 .uleb128 0x7
+ 701 04cd 00000000 .long .LASF185
+
GAS LISTING /tmp/cctAECUH.s page 15
+
+
+ 702 04d1 CC00 .sleb128 76
+ 703 04d3 07 .uleb128 0x7
+ 704 04d4 00000000 .long .LASF186
+ 705 04d8 CD00 .sleb128 77
+ 706 04da 07 .uleb128 0x7
+ 707 04db 00000000 .long .LASF187
+ 708 04df CE00 .sleb128 78
+ 709 04e1 07 .uleb128 0x7
+ 710 04e2 00000000 .long .LASF188
+ 711 04e6 CF00 .sleb128 79
+ 712 04e8 07 .uleb128 0x7
+ 713 04e9 00000000 .long .LASF189
+ 714 04ed D000 .sleb128 80
+ 715 04ef 07 .uleb128 0x7
+ 716 04f0 00000000 .long .LASF190
+ 717 04f4 D100 .sleb128 81
+ 718 04f6 07 .uleb128 0x7
+ 719 04f7 00000000 .long .LASF191
+ 720 04fb D100 .sleb128 81
+ 721 04fd 07 .uleb128 0x7
+ 722 04fe 00000000 .long .LASF192
+ 723 0502 D200 .sleb128 82
+ 724 0504 07 .uleb128 0x7
+ 725 0505 00000000 .long .LASF193
+ 726 0509 D300 .sleb128 83
+ 727 050b 07 .uleb128 0x7
+ 728 050c 00000000 .long .LASF194
+ 729 0510 D400 .sleb128 84
+ 730 0512 07 .uleb128 0x7
+ 731 0513 00000000 .long .LASF195
+ 732 0517 D500 .sleb128 85
+ 733 0519 07 .uleb128 0x7
+ 734 051a 00000000 .long .LASF196
+ 735 051e D600 .sleb128 86
+ 736 0520 07 .uleb128 0x7
+ 737 0521 00000000 .long .LASF197
+ 738 0525 D700 .sleb128 87
+ 739 0527 07 .uleb128 0x7
+ 740 0528 00000000 .long .LASF198
+ 741 052c D800 .sleb128 88
+ 742 052e 07 .uleb128 0x7
+ 743 052f 00000000 .long .LASF199
+ 744 0533 D900 .sleb128 89
+ 745 0535 07 .uleb128 0x7
+ 746 0536 00000000 .long .LASF200
+ 747 053a DA00 .sleb128 90
+ 748 053c 07 .uleb128 0x7
+ 749 053d 00000000 .long .LASF201
+ 750 0541 DB00 .sleb128 91
+ 751 0543 07 .uleb128 0x7
+ 752 0544 00000000 .long .LASF202
+ 753 0548 DC00 .sleb128 92
+ 754 054a 07 .uleb128 0x7
+ 755 054b 00000000 .long .LASF203
+ 756 054f DD00 .sleb128 93
+ 757 0551 00 .byte 0x0
+ 758 0552 08 .uleb128 0x8
+
GAS LISTING /tmp/cctAECUH.s page 16
+
+
+ 759 0553 00000000 .long .LASF204
+ 760 0557 04 .byte 0x4
+ 761 0558 04 .byte 0x4
+ 762 0559 3401 .value 0x134
+ 763 055b 92060000 .long 0x692
+ 764 055f 07 .uleb128 0x7
+ 765 0560 00000000 .long .LASF205
+ 766 0564 00 .sleb128 0
+ 767 0565 07 .uleb128 0x7
+ 768 0566 00000000 .long .LASF206
+ 769 056a 01 .sleb128 1
+ 770 056b 07 .uleb128 0x7
+ 771 056c 00000000 .long .LASF207
+ 772 0570 02 .sleb128 2
+ 773 0571 07 .uleb128 0x7
+ 774 0572 00000000 .long .LASF208
+ 775 0576 03 .sleb128 3
+ 776 0577 07 .uleb128 0x7
+ 777 0578 00000000 .long .LASF209
+ 778 057c 04 .sleb128 4
+ 779 057d 07 .uleb128 0x7
+ 780 057e 00000000 .long .LASF210
+ 781 0582 05 .sleb128 5
+ 782 0583 07 .uleb128 0x7
+ 783 0584 00000000 .long .LASF211
+ 784 0588 06 .sleb128 6
+ 785 0589 07 .uleb128 0x7
+ 786 058a 00000000 .long .LASF212
+ 787 058e 07 .sleb128 7
+ 788 058f 07 .uleb128 0x7
+ 789 0590 00000000 .long .LASF213
+ 790 0594 08 .sleb128 8
+ 791 0595 07 .uleb128 0x7
+ 792 0596 00000000 .long .LASF214
+ 793 059a 09 .sleb128 9
+ 794 059b 07 .uleb128 0x7
+ 795 059c 00000000 .long .LASF215
+ 796 05a0 0A .sleb128 10
+ 797 05a1 07 .uleb128 0x7
+ 798 05a2 00000000 .long .LASF216
+ 799 05a6 0B .sleb128 11
+ 800 05a7 07 .uleb128 0x7
+ 801 05a8 00000000 .long .LASF217
+ 802 05ac 0C .sleb128 12
+ 803 05ad 07 .uleb128 0x7
+ 804 05ae 00000000 .long .LASF218
+ 805 05b2 0D .sleb128 13
+ 806 05b3 07 .uleb128 0x7
+ 807 05b4 00000000 .long .LASF219
+ 808 05b8 0E .sleb128 14
+ 809 05b9 07 .uleb128 0x7
+ 810 05ba 00000000 .long .LASF220
+ 811 05be 0F .sleb128 15
+ 812 05bf 07 .uleb128 0x7
+ 813 05c0 00000000 .long .LASF221
+ 814 05c4 10 .sleb128 16
+ 815 05c5 07 .uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s page 17
+
+
+ 816 05c6 00000000 .long .LASF222
+ 817 05ca 11 .sleb128 17
+ 818 05cb 07 .uleb128 0x7
+ 819 05cc 00000000 .long .LASF223
+ 820 05d0 12 .sleb128 18
+ 821 05d1 07 .uleb128 0x7
+ 822 05d2 00000000 .long .LASF224
+ 823 05d6 13 .sleb128 19
+ 824 05d7 07 .uleb128 0x7
+ 825 05d8 00000000 .long .LASF225
+ 826 05dc 14 .sleb128 20
+ 827 05dd 07 .uleb128 0x7
+ 828 05de 00000000 .long .LASF226
+ 829 05e2 15 .sleb128 21
+ 830 05e3 07 .uleb128 0x7
+ 831 05e4 00000000 .long .LASF227
+ 832 05e8 16 .sleb128 22
+ 833 05e9 07 .uleb128 0x7
+ 834 05ea 00000000 .long .LASF228
+ 835 05ee 17 .sleb128 23
+ 836 05ef 07 .uleb128 0x7
+ 837 05f0 00000000 .long .LASF229
+ 838 05f4 18 .sleb128 24
+ 839 05f5 07 .uleb128 0x7
+ 840 05f6 00000000 .long .LASF230
+ 841 05fa 19 .sleb128 25
+ 842 05fb 07 .uleb128 0x7
+ 843 05fc 00000000 .long .LASF231
+ 844 0600 1A .sleb128 26
+ 845 0601 07 .uleb128 0x7
+ 846 0602 00000000 .long .LASF232
+ 847 0606 1B .sleb128 27
+ 848 0607 07 .uleb128 0x7
+ 849 0608 00000000 .long .LASF233
+ 850 060c 1C .sleb128 28
+ 851 060d 07 .uleb128 0x7
+ 852 060e 00000000 .long .LASF234
+ 853 0612 1D .sleb128 29
+ 854 0613 07 .uleb128 0x7
+ 855 0614 00000000 .long .LASF235
+ 856 0618 1E .sleb128 30
+ 857 0619 07 .uleb128 0x7
+ 858 061a 00000000 .long .LASF236
+ 859 061e 1F .sleb128 31
+ 860 061f 07 .uleb128 0x7
+ 861 0620 00000000 .long .LASF237
+ 862 0624 20 .sleb128 32
+ 863 0625 07 .uleb128 0x7
+ 864 0626 00000000 .long .LASF238
+ 865 062a 21 .sleb128 33
+ 866 062b 07 .uleb128 0x7
+ 867 062c 00000000 .long .LASF239
+ 868 0630 22 .sleb128 34
+ 869 0631 07 .uleb128 0x7
+ 870 0632 00000000 .long .LASF240
+ 871 0636 23 .sleb128 35
+ 872 0637 07 .uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s page 18
+
+
+ 873 0638 00000000 .long .LASF241
+ 874 063c 24 .sleb128 36
+ 875 063d 07 .uleb128 0x7
+ 876 063e 00000000 .long .LASF242
+ 877 0642 25 .sleb128 37
+ 878 0643 07 .uleb128 0x7
+ 879 0644 00000000 .long .LASF243
+ 880 0648 26 .sleb128 38
+ 881 0649 07 .uleb128 0x7
+ 882 064a 00000000 .long .LASF244
+ 883 064e 27 .sleb128 39
+ 884 064f 07 .uleb128 0x7
+ 885 0650 00000000 .long .LASF245
+ 886 0654 28 .sleb128 40
+ 887 0655 07 .uleb128 0x7
+ 888 0656 00000000 .long .LASF246
+ 889 065a 29 .sleb128 41
+ 890 065b 07 .uleb128 0x7
+ 891 065c 00000000 .long .LASF247
+ 892 0660 29 .sleb128 41
+ 893 0661 07 .uleb128 0x7
+ 894 0662 00000000 .long .LASF248
+ 895 0666 2A .sleb128 42
+ 896 0667 07 .uleb128 0x7
+ 897 0668 00000000 .long .LASF249
+ 898 066c 2B .sleb128 43
+ 899 066d 07 .uleb128 0x7
+ 900 066e 00000000 .long .LASF250
+ 901 0672 2C .sleb128 44
+ 902 0673 07 .uleb128 0x7
+ 903 0674 00000000 .long .LASF251
+ 904 0678 2D .sleb128 45
+ 905 0679 07 .uleb128 0x7
+ 906 067a 00000000 .long .LASF252
+ 907 067e 2E .sleb128 46
+ 908 067f 07 .uleb128 0x7
+ 909 0680 00000000 .long .LASF253
+ 910 0684 2F .sleb128 47
+ 911 0685 07 .uleb128 0x7
+ 912 0686 00000000 .long .LASF254
+ 913 068a 30 .sleb128 48
+ 914 068b 07 .uleb128 0x7
+ 915 068c 00000000 .long .LASF255
+ 916 0690 31 .sleb128 49
+ 917 0691 00 .byte 0x0
+ 918 0692 09 .uleb128 0x9
+ 919 0693 01 .byte 0x1
+ 920 0694 00000000 .long .LASF261
+ 921 0698 01 .byte 0x1
+ 922 0699 2A .byte 0x2a
+ 923 069a 01 .byte 0x1
+ 924 069b 70000000 .long 0x70
+ 925 069f 00000000 .quad .LFB15
+ 925 00000000
+ 926 06a7 00000000 .quad .LFE15
+ 926 00000000
+ 927 06af 00000000 .long .LLST0
+
GAS LISTING /tmp/cctAECUH.s page 19
+
+
+ 928 06b3 01070000 .long 0x701
+ 929 06b7 0A .uleb128 0xa
+ 930 06b8 00000000 .long .LASF262
+ 931 06bc 01 .byte 0x1
+ 932 06bd 0B .uleb128 0xb
+ 933 06be 00000000 .long .LASF263
+ 934 06c2 01 .byte 0x1
+ 935 06c3 2A .byte 0x2a
+ 936 06c4 01070000 .long 0x701
+ 937 06c8 02 .byte 0x2
+ 938 06c9 91 .byte 0x91
+ 939 06ca 58 .sleb128 -40
+ 940 06cb 0C .uleb128 0xc
+ 941 06cc 726300 .string "rc"
+ 942 06cf 01 .byte 0x1
+ 943 06d0 2C .byte 0x2c
+ 944 06d1 70000000 .long 0x70
+ 945 06d5 02 .byte 0x2
+ 946 06d6 91 .byte 0x91
+ 947 06d7 6C .sleb128 -20
+ 948 06d8 0D .uleb128 0xd
+ 949 06d9 00000000 .long .LASF256
+ 950 06dd 1D070000 .long 0x71d
+ 951 06e1 01 .byte 0x1
+ 952 06e2 09 .byte 0x9
+ 953 06e3 03 .byte 0x3
+ 954 06e4 00000000 .quad __PRETTY_FUNCTION__.2349
+ 954 00000000
+ 955 06ec 0D .uleb128 0xd
+ 956 06ed 00000000 .long .LASF257
+ 957 06f1 22070000 .long 0x722
+ 958 06f5 01 .byte 0x1
+ 959 06f6 09 .byte 0x9
+ 960 06f7 03 .byte 0x3
+ 961 06f8 00000000 .quad __func__.2350
+ 961 00000000
+ 962 0700 00 .byte 0x0
+ 963 0701 0E .uleb128 0xe
+ 964 0702 08 .byte 0x8
+ 965 0703 07070000 .long 0x707
+ 966 0707 0E .uleb128 0xe
+ 967 0708 08 .byte 0x8
+ 968 0709 B7060000 .long 0x6b7
+ 969 070d 0F .uleb128 0xf
+ 970 070e 7E000000 .long 0x7e
+ 971 0712 1D070000 .long 0x71d
+ 972 0716 10 .uleb128 0x10
+ 973 0717 7B000000 .long 0x7b
+ 974 071b 17 .byte 0x17
+ 975 071c 00 .byte 0x0
+ 976 071d 11 .uleb128 0x11
+ 977 071e 0D070000 .long 0x70d
+ 978 0722 11 .uleb128 0x11
+ 979 0723 0D070000 .long 0x70d
+ 980 0727 00 .byte 0x0
+ 981 .section .debug_abbrev
+ 982 0000 01 .uleb128 0x1
+
GAS LISTING /tmp/cctAECUH.s page 20
+
+
+ 983 0001 11 .uleb128 0x11
+ 984 0002 01 .byte 0x1
+ 985 0003 25 .uleb128 0x25
+ 986 0004 0E .uleb128 0xe
+ 987 0005 13 .uleb128 0x13
+ 988 0006 0B .uleb128 0xb
+ 989 0007 03 .uleb128 0x3
+ 990 0008 0E .uleb128 0xe
+ 991 0009 1B .uleb128 0x1b
+ 992 000a 0E .uleb128 0xe
+ 993 000b 11 .uleb128 0x11
+ 994 000c 01 .uleb128 0x1
+ 995 000d 12 .uleb128 0x12
+ 996 000e 01 .uleb128 0x1
+ 997 000f 10 .uleb128 0x10
+ 998 0010 06 .uleb128 0x6
+ 999 0011 00 .byte 0x0
+ 1000 0012 00 .byte 0x0
+ 1001 0013 02 .uleb128 0x2
+ 1002 0014 24 .uleb128 0x24
+ 1003 0015 00 .byte 0x0
+ 1004 0016 0B .uleb128 0xb
+ 1005 0017 0B .uleb128 0xb
+ 1006 0018 3E .uleb128 0x3e
+ 1007 0019 0B .uleb128 0xb
+ 1008 001a 03 .uleb128 0x3
+ 1009 001b 0E .uleb128 0xe
+ 1010 001c 00 .byte 0x0
+ 1011 001d 00 .byte 0x0
+ 1012 001e 03 .uleb128 0x3
+ 1013 001f 24 .uleb128 0x24
+ 1014 0020 00 .byte 0x0
+ 1015 0021 0B .uleb128 0xb
+ 1016 0022 0B .uleb128 0xb
+ 1017 0023 3E .uleb128 0x3e
+ 1018 0024 0B .uleb128 0xb
+ 1019 0025 03 .uleb128 0x3
+ 1020 0026 08 .uleb128 0x8
+ 1021 0027 00 .byte 0x0
+ 1022 0028 00 .byte 0x0
+ 1023 0029 04 .uleb128 0x4
+ 1024 002a 16 .uleb128 0x16
+ 1025 002b 00 .byte 0x0
+ 1026 002c 03 .uleb128 0x3
+ 1027 002d 0E .uleb128 0xe
+ 1028 002e 3A .uleb128 0x3a
+ 1029 002f 0B .uleb128 0xb
+ 1030 0030 3B .uleb128 0x3b
+ 1031 0031 0B .uleb128 0xb
+ 1032 0032 49 .uleb128 0x49
+ 1033 0033 13 .uleb128 0x13
+ 1034 0034 00 .byte 0x0
+ 1035 0035 00 .byte 0x0
+ 1036 0036 05 .uleb128 0x5
+ 1037 0037 24 .uleb128 0x24
+ 1038 0038 00 .byte 0x0
+ 1039 0039 0B .uleb128 0xb
+
GAS LISTING /tmp/cctAECUH.s page 21
+
+
+ 1040 003a 0B .uleb128 0xb
+ 1041 003b 3E .uleb128 0x3e
+ 1042 003c 0B .uleb128 0xb
+ 1043 003d 00 .byte 0x0
+ 1044 003e 00 .byte 0x0
+ 1045 003f 06 .uleb128 0x6
+ 1046 0040 04 .uleb128 0x4
+ 1047 0041 01 .byte 0x1
+ 1048 0042 03 .uleb128 0x3
+ 1049 0043 0E .uleb128 0xe
+ 1050 0044 0B .uleb128 0xb
+ 1051 0045 0B .uleb128 0xb
+ 1052 0046 3A .uleb128 0x3a
+ 1053 0047 0B .uleb128 0xb
+ 1054 0048 3B .uleb128 0x3b
+ 1055 0049 0B .uleb128 0xb
+ 1056 004a 01 .uleb128 0x1
+ 1057 004b 13 .uleb128 0x13
+ 1058 004c 00 .byte 0x0
+ 1059 004d 00 .byte 0x0
+ 1060 004e 07 .uleb128 0x7
+ 1061 004f 28 .uleb128 0x28
+ 1062 0050 00 .byte 0x0
+ 1063 0051 03 .uleb128 0x3
+ 1064 0052 0E .uleb128 0xe
+ 1065 0053 1C .uleb128 0x1c
+ 1066 0054 0D .uleb128 0xd
+ 1067 0055 00 .byte 0x0
+ 1068 0056 00 .byte 0x0
+ 1069 0057 08 .uleb128 0x8
+ 1070 0058 04 .uleb128 0x4
+ 1071 0059 01 .byte 0x1
+ 1072 005a 03 .uleb128 0x3
+ 1073 005b 0E .uleb128 0xe
+ 1074 005c 0B .uleb128 0xb
+ 1075 005d 0B .uleb128 0xb
+ 1076 005e 3A .uleb128 0x3a
+ 1077 005f 0B .uleb128 0xb
+ 1078 0060 3B .uleb128 0x3b
+ 1079 0061 05 .uleb128 0x5
+ 1080 0062 01 .uleb128 0x1
+ 1081 0063 13 .uleb128 0x13
+ 1082 0064 00 .byte 0x0
+ 1083 0065 00 .byte 0x0
+ 1084 0066 09 .uleb128 0x9
+ 1085 0067 2E .uleb128 0x2e
+ 1086 0068 01 .byte 0x1
+ 1087 0069 3F .uleb128 0x3f
+ 1088 006a 0C .uleb128 0xc
+ 1089 006b 03 .uleb128 0x3
+ 1090 006c 0E .uleb128 0xe
+ 1091 006d 3A .uleb128 0x3a
+ 1092 006e 0B .uleb128 0xb
+ 1093 006f 3B .uleb128 0x3b
+ 1094 0070 0B .uleb128 0xb
+ 1095 0071 27 .uleb128 0x27
+ 1096 0072 0C .uleb128 0xc
+
GAS LISTING /tmp/cctAECUH.s page 22
+
+
+ 1097 0073 49 .uleb128 0x49
+ 1098 0074 13 .uleb128 0x13
+ 1099 0075 11 .uleb128 0x11
+ 1100 0076 01 .uleb128 0x1
+ 1101 0077 12 .uleb128 0x12
+ 1102 0078 01 .uleb128 0x1
+ 1103 0079 40 .uleb128 0x40
+ 1104 007a 06 .uleb128 0x6
+ 1105 007b 01 .uleb128 0x1
+ 1106 007c 13 .uleb128 0x13
+ 1107 007d 00 .byte 0x0
+ 1108 007e 00 .byte 0x0
+ 1109 007f 0A .uleb128 0xa
+ 1110 0080 13 .uleb128 0x13
+ 1111 0081 00 .byte 0x0
+ 1112 0082 03 .uleb128 0x3
+ 1113 0083 0E .uleb128 0xe
+ 1114 0084 3C .uleb128 0x3c
+ 1115 0085 0C .uleb128 0xc
+ 1116 0086 00 .byte 0x0
+ 1117 0087 00 .byte 0x0
+ 1118 0088 0B .uleb128 0xb
+ 1119 0089 05 .uleb128 0x5
+ 1120 008a 00 .byte 0x0
+ 1121 008b 03 .uleb128 0x3
+ 1122 008c 0E .uleb128 0xe
+ 1123 008d 3A .uleb128 0x3a
+ 1124 008e 0B .uleb128 0xb
+ 1125 008f 3B .uleb128 0x3b
+ 1126 0090 0B .uleb128 0xb
+ 1127 0091 49 .uleb128 0x49
+ 1128 0092 13 .uleb128 0x13
+ 1129 0093 02 .uleb128 0x2
+ 1130 0094 0A .uleb128 0xa
+ 1131 0095 00 .byte 0x0
+ 1132 0096 00 .byte 0x0
+ 1133 0097 0C .uleb128 0xc
+ 1134 0098 34 .uleb128 0x34
+ 1135 0099 00 .byte 0x0
+ 1136 009a 03 .uleb128 0x3
+ 1137 009b 08 .uleb128 0x8
+ 1138 009c 3A .uleb128 0x3a
+ 1139 009d 0B .uleb128 0xb
+ 1140 009e 3B .uleb128 0x3b
+ 1141 009f 0B .uleb128 0xb
+ 1142 00a0 49 .uleb128 0x49
+ 1143 00a1 13 .uleb128 0x13
+ 1144 00a2 02 .uleb128 0x2
+ 1145 00a3 0A .uleb128 0xa
+ 1146 00a4 00 .byte 0x0
+ 1147 00a5 00 .byte 0x0
+ 1148 00a6 0D .uleb128 0xd
+ 1149 00a7 34 .uleb128 0x34
+ 1150 00a8 00 .byte 0x0
+ 1151 00a9 03 .uleb128 0x3
+ 1152 00aa 0E .uleb128 0xe
+ 1153 00ab 49 .uleb128 0x49
+
GAS LISTING /tmp/cctAECUH.s page 23
+
+
+ 1154 00ac 13 .uleb128 0x13
+ 1155 00ad 34 .uleb128 0x34
+ 1156 00ae 0C .uleb128 0xc
+ 1157 00af 02 .uleb128 0x2
+ 1158 00b0 0A .uleb128 0xa
+ 1159 00b1 00 .byte 0x0
+ 1160 00b2 00 .byte 0x0
+ 1161 00b3 0E .uleb128 0xe
+ 1162 00b4 0F .uleb128 0xf
+ 1163 00b5 00 .byte 0x0
+ 1164 00b6 0B .uleb128 0xb
+ 1165 00b7 0B .uleb128 0xb
+ 1166 00b8 49 .uleb128 0x49
+ 1167 00b9 13 .uleb128 0x13
+ 1168 00ba 00 .byte 0x0
+ 1169 00bb 00 .byte 0x0
+ 1170 00bc 0F .uleb128 0xf
+ 1171 00bd 01 .uleb128 0x1
+ 1172 00be 01 .byte 0x1
+ 1173 00bf 49 .uleb128 0x49
+ 1174 00c0 13 .uleb128 0x13
+ 1175 00c1 01 .uleb128 0x1
+ 1176 00c2 13 .uleb128 0x13
+ 1177 00c3 00 .byte 0x0
+ 1178 00c4 00 .byte 0x0
+ 1179 00c5 10 .uleb128 0x10
+ 1180 00c6 21 .uleb128 0x21
+ 1181 00c7 00 .byte 0x0
+ 1182 00c8 49 .uleb128 0x49
+ 1183 00c9 13 .uleb128 0x13
+ 1184 00ca 2F .uleb128 0x2f
+ 1185 00cb 0B .uleb128 0xb
+ 1186 00cc 00 .byte 0x0
+ 1187 00cd 00 .byte 0x0
+ 1188 00ce 11 .uleb128 0x11
+ 1189 00cf 26 .uleb128 0x26
+ 1190 00d0 00 .byte 0x0
+ 1191 00d1 49 .uleb128 0x49
+ 1192 00d2 13 .uleb128 0x13
+ 1193 00d3 00 .byte 0x0
+ 1194 00d4 00 .byte 0x0
+ 1195 00d5 00 .byte 0x0
+ 1196 .section .debug_pubnames,"", at progbits
+ 1197 0000 2A000000 .long 0x2a
+ 1198 0004 0200 .value 0x2
+ 1199 0006 00000000 .long .Ldebug_info0
+ 1200 000a 28070000 .long 0x728
+ 1201 000e 92060000 .long 0x692
+ 1202 0012 4B4E756C .string "KNullBlockCipherVecMake"
+ 1202 6C426C6F
+ 1202 636B4369
+ 1202 70686572
+ 1202 5665634D
+ 1203 002a 00000000 .long 0x0
+ 1204 .section .debug_aranges,"", at progbits
+ 1205 0000 2C000000 .long 0x2c
+ 1206 0004 0200 .value 0x2
+
GAS LISTING /tmp/cctAECUH.s page 24
+
+
+ 1207 0006 00000000 .long .Ldebug_info0
+ 1208 000a 08 .byte 0x8
+ 1209 000b 00 .byte 0x0
+ 1210 000c 0000 .value 0x0
+ 1211 000e 0000 .value 0x0
+ 1212 0010 00000000 .quad .Ltext0
+ 1212 00000000
+ 1213 0018 65000000 .quad .Letext0-.Ltext0
+ 1213 00000000
+ 1214 0020 00000000 .quad 0x0
+ 1214 00000000
+ 1215 0028 00000000 .quad 0x0
+ 1215 00000000
+ 1216 .section .debug_str,"MS", at progbits,1
+ 1217 .LASF184:
+ 1218 0000 72635461 .string "rcTag"
+ 1218 6700
+ 1219 .LASF30:
+ 1220 0006 72635646 .string "rcVFS"
+ 1220 5300
+ 1221 .LASF234:
+ 1222 000c 7263556E .string "rcUnauthorized"
+ 1222 61757468
+ 1222 6F72697A
+ 1222 656400
+ 1223 .LASF258:
+ 1224 001b 474E5520 .string "GNU C 4.4.2"
+ 1224 4320342E
+ 1224 342E3200
+ 1225 .LASF218:
+ 1226 0027 7263496E .string "rcInconsistent"
+ 1226 636F6E73
+ 1226 69737465
+ 1226 6E7400
+ 1227 .LASF19:
+ 1228 0036 72634442 .string "rcDB"
+ 1228 00
+ 1229 .LASF128:
+ 1230 003b 7263436F .string "rcCopying"
+ 1230 7079696E
+ 1230 6700
+ 1231 .LASF131:
+ 1232 0045 7263506F .string "rcPositioning"
+ 1232 73697469
+ 1232 6F6E696E
+ 1232 6700
+ 1233 .LASF226:
+ 1234 0053 72634578 .string "rcExcessive"
+ 1234 63657373
+ 1234 69766500
+ 1235 .LASF222:
+ 1236 005f 72634361 .string "rcCanceled"
+ 1236 6E63656C
+ 1236 656400
+ 1237 .LASF156:
+ 1238 006a 72634C61 .string "rcLastContext_v1_0"
+ 1238 7374436F
+
GAS LISTING /tmp/cctAECUH.s page 25
+
+
+ 1238 6E746578
+ 1238 745F7631
+ 1238 5F3000
+ 1239 .LASF167:
+ 1240 007d 72634C61 .string "rcLastContext_v1_1"
+ 1240 7374436F
+ 1240 6E746578
+ 1240 745F7631
+ 1240 5F3100
+ 1241 .LASF90:
+ 1242 0090 7263456E .string "rcEncryptionKey"
+ 1242 63727970
+ 1242 74696F6E
+ 1242 4B657900
+ 1243 .LASF97:
+ 1244 00a0 5243436F .string "RCContext"
+ 1244 6E746578
+ 1244 7400
+ 1245 .LASF92:
+ 1246 00aa 7263436D .string "rcCmd"
+ 1246 6400
+ 1247 .LASF242:
+ 1248 00b0 72634475 .string "rcDuplicate"
+ 1248 706C6963
+ 1248 61746500
+ 1249 .LASF202:
+ 1250 00bc 72635265 .string "rcRefcount"
+ 1250 66636F75
+ 1250 6E7400
+ 1251 .LASF91:
+ 1252 00c7 7263526E .string "rcRng"
+ 1252 6700
+ 1253 .LASF34:
+ 1254 00cd 72634E6F .string "rcNoTarg"
+ 1254 54617267
+ 1254 00
+ 1255 .LASF204:
+ 1256 00d6 52435374 .string "RCState"
+ 1256 61746500
+ 1257 .LASF5:
+ 1258 00de 756E7369 .string "unsigned int"
+ 1258 676E6564
+ 1258 20696E74
+ 1258 00
+ 1259 .LASF89:
+ 1260 00eb 72635072 .string "rcProduction"
+ 1260 6F647563
+ 1260 74696F6E
+ 1260 00
+ 1261 .LASF69:
+ 1262 00f8 72635061 .string "rcPagemap"
+ 1262 67656D61
+ 1262 7000
+ 1263 .LASF185:
+ 1264 0102 72635265 .string "rcResources"
+ 1264 736F7572
+ 1264 63657300
+
GAS LISTING /tmp/cctAECUH.s page 26
+
+
+ 1265 .LASF50:
+ 1266 010e 7263586D .string "rcXmlDoc"
+ 1266 6C446F63
+ 1266 00
+ 1267 .LASF37:
+ 1268 0117 7263546F .string "rcTocEntry"
+ 1268 63456E74
+ 1268 727900
+ 1269 .LASF114:
+ 1270 0122 72635265 .string "rcRemoving"
+ 1270 6D6F7669
+ 1270 6E6700
+ 1271 .LASF192:
+ 1272 012d 72634D6F .string "rcMode"
+ 1272 646500
+ 1273 .LASF119:
+ 1274 0134 7263436C .string "rcClosing"
+ 1274 6F73696E
+ 1274 6700
+ 1275 .LASF72:
+ 1276 013e 72635175 .string "rcQueue"
+ 1276 65756500
+ 1277 .LASF120:
+ 1278 0146 72635265 .string "rcResizing"
+ 1278 73697A69
+ 1278 6E6700
+ 1279 .LASF171:
+ 1280 0151 72635365 .string "rcSelf"
+ 1280 6C6600
+ 1281 .LASF214:
+ 1282 0158 72634465 .string "rcDestroyed"
+ 1282 7374726F
+ 1282 79656400
+ 1283 .LASF162:
+ 1284 0164 7263496E .string "rcInitializing"
+ 1284 69746961
+ 1284 6C697A69
+ 1284 6E6700
+ 1285 .LASF168:
+ 1286 0173 52434F62 .string "RCObject"
+ 1286 6A656374
+ 1286 00
+ 1287 .LASF146:
+ 1288 017c 72634174 .string "rcAttaching"
+ 1288 74616368
+ 1288 696E6700
+ 1289 .LASF219:
+ 1290 0188 72634275 .string "rcBusy"
+ 1290 737900
+ 1291 .LASF74:
+ 1292 018f 72635363 .string "rcSchema"
+ 1292 68656D61
+ 1292 00
+ 1293 .LASF138:
+ 1294 0198 72634875 .string "rcHuffmanCoding"
+ 1294 66666D61
+ 1294 6E436F64
+
GAS LISTING /tmp/cctAECUH.s page 27
+
+
+ 1294 696E6700
+ 1295 .LASF123:
+ 1296 01a8 7263436F .string "rcCommitting"
+ 1296 6D6D6974
+ 1296 74696E67
+ 1296 00
+ 1297 .LASF75:
+ 1298 01b5 72635365 .string "rcSemaphore"
+ 1298 6D617068
+ 1298 6F726500
+ 1299 .LASF232:
+ 1300 01c1 72634465 .string "rcDetached"
+ 1300 74616368
+ 1300 656400
+ 1301 .LASF188:
+ 1302 01cc 7263526F .string "rcRow"
+ 1302 7700
+ 1303 .LASF239:
+ 1304 01d2 7263546F .string "rcTooShort"
+ 1304 6F53686F
+ 1304 727400
+ 1305 .LASF15:
+ 1306 01dd 72634646 .string "rcFF"
+ 1306 00
+ 1307 .LASF16:
+ 1308 01e2 72634653 .string "rcFS"
+ 1308 00
+ 1309 .LASF250:
+ 1310 01e7 7263556E .string "rcUndefined"
+ 1310 64656669
+ 1310 6E656400
+ 1311 .LASF132:
+ 1312 01f3 72635061 .string "rcPacking"
+ 1312 636B696E
+ 1312 6700
+ 1313 .LASF216:
+ 1314 01fd 7263436F .string "rcCorrupt"
+ 1314 72727570
+ 1314 7400
+ 1315 .LASF7:
+ 1316 0207 75696E74 .string "uint32_t"
+ 1316 33325F74
+ 1316 00
+ 1317 .LASF133:
+ 1318 0210 7263556E .string "rcUnpacking"
+ 1318 7061636B
+ 1318 696E6700
+ 1319 .LASF51:
+ 1320 021c 72634669 .string "rcFile"
+ 1320 6C6500
+ 1321 .LASF39:
+ 1322 0223 72634174 .string "rcAttr"
+ 1322 747200
+ 1323 .LASF199:
+ 1324 022a 7263456E .string "rcEnvironment"
+ 1324 7669726F
+ 1324 6E6D656E
+
GAS LISTING /tmp/cctAECUH.s page 28
+
+
+ 1324 7400
+ 1325 .LASF149:
+ 1326 0238 72634650 .string "rcFPCoding"
+ 1326 436F6469
+ 1326 6E6700
+ 1327 .LASF80:
+ 1328 0243 72635469 .string "rcTimeout"
+ 1328 6D656F75
+ 1328 7400
+ 1329 .LASF62:
+ 1330 024d 72634D44 .string "rcMD5SumFmt"
+ 1330 3553756D
+ 1330 466D7400
+ 1331 .LASF137:
+ 1332 0259 72634578 .string "rcExecuting"
+ 1332 65637574
+ 1332 696E6700
+ 1333 .LASF145:
+ 1334 0265 72635761 .string "rcWaiting"
+ 1334 6974696E
+ 1334 6700
+ 1335 .LASF176:
+ 1336 026f 7263466F .string "rcFormat"
+ 1336 726D6174
+ 1336 00
+ 1337 .LASF181:
+ 1338 0278 7263436F .string "rcConstraint"
+ 1338 6E737472
+ 1338 61696E74
+ 1338 00
+ 1339 .LASF22:
+ 1340 0285 7263584D .string "rcXML"
+ 1340 4C00
+ 1341 .LASF45:
+ 1342 028b 7263436F .string "rcCondition"
+ 1342 6E646974
+ 1342 696F6E00
+ 1343 .LASF205:
+ 1344 0297 72634E6F .string "rcNoErr"
+ 1344 45727200
+ 1345 .LASF42:
+ 1346 029f 72634275 .string "rcBuffer"
+ 1346 66666572
+ 1346 00
+ 1347 .LASF142:
+ 1348 02a8 72635061 .string "rcParsing"
+ 1348 7273696E
+ 1348 6700
+ 1349 .LASF41:
+ 1350 02b2 7263426C .string "rcBlob"
+ 1350 6F6200
+ 1351 .LASF240:
+ 1352 02b9 7263546F .string "rcTooLong"
+ 1352 6F4C6F6E
+ 1352 6700
+ 1353 .LASF24:
+ 1354 02c3 72634C61 .string "rcLastModule_v1_0"
+
GAS LISTING /tmp/cctAECUH.s page 29
+
+
+ 1354 73744D6F
+ 1354 64756C65
+ 1354 5F76315F
+ 1354 3000
+ 1355 .LASF31:
+ 1356 02d5 72634C61 .string "rcLastModule_v1_1"
+ 1356 73744D6F
+ 1356 64756C65
+ 1356 5F76315F
+ 1356 3100
+ 1357 .LASF64:
+ 1358 02e7 72634D65 .string "rcMetadata"
+ 1358 74616461
+ 1358 746100
+ 1359 .LASF236:
+ 1360 02f2 72635772 .string "rcWriteonly"
+ 1360 6974656F
+ 1360 6E6C7900
+ 1361 .LASF115:
+ 1362 02fe 7263436C .string "rcClearing"
+ 1362 65617269
+ 1362 6E6700
+ 1363 .LASF55:
+ 1364 0309 7263466F .string "rcFormatter"
+ 1364 726D6174
+ 1364 74657200
+ 1365 .LASF248:
+ 1366 0315 72634F75 .string "rcOutoforder"
+ 1366 746F666F
+ 1366 72646572
+ 1366 00
+ 1367 .LASF70:
+ 1368 0322 72635061 .string "rcPath"
+ 1368 746800
+ 1369 .LASF189:
+ 1370 0329 72634C69 .string "rcLibrary"
+ 1370 62726172
+ 1370 7900
+ 1371 .LASF141:
+ 1372 0333 7263546F .string "rcTokenizing"
+ 1372 6B656E69
+ 1372 7A696E67
+ 1372 00
+ 1373 .LASF198:
+ 1374 0340 72634572 .string "rcError"
+ 1374 726F7200
+ 1375 .LASF18:
+ 1376 0348 72635846 .string "rcXF"
+ 1376 00
+ 1377 .LASF183:
+ 1378 034d 72634D65 .string "rcMessage"
+ 1378 73736167
+ 1378 6500
+ 1379 .LASF237:
+ 1380 0357 72634E6F .string "rcNoPerm"
+ 1380 5065726D
+ 1380 00
+
GAS LISTING /tmp/cctAECUH.s page 30
+
+
+ 1381 .LASF54:
+ 1382 0360 72634675 .string "rcFunction"
+ 1382 6E637469
+ 1382 6F6E00
+ 1383 .LASF208:
+ 1384 036b 7263556E .string "rcUnsupported"
+ 1384 73757070
+ 1384 6F727465
+ 1384 6400
+ 1385 .LASF43:
+ 1386 0379 72634368 .string "rcChar"
+ 1386 617200
+ 1387 .LASF174:
+ 1388 0380 72634D65 .string "rcMemory"
+ 1388 6D6F7279
+ 1388 00
+ 1389 .LASF194:
+ 1390 0389 72634372 .string "rcCrc"
+ 1390 6300
+ 1391 .LASF241:
+ 1392 038f 7263546F .string "rcTooBig"
+ 1392 6F426967
+ 1392 00
+ 1393 .LASF179:
+ 1394 0398 72634964 .string "rcId"
+ 1394 00
+ 1395 .LASF82:
+ 1396 039d 72635472 .string "rcTree"
+ 1396 656500
+ 1397 .LASF253:
+ 1398 03a4 72634E6F .string "rcNotAvailable"
+ 1398 74417661
+ 1398 696C6162
+ 1398 6C6500
+ 1399 .LASF93:
+ 1400 03b3 72634461 .string "rcData"
+ 1400 746100
+ 1401 .LASF257:
+ 1402 03ba 5F5F6675 .string "__func__"
+ 1402 6E635F5F
+ 1402 00
+ 1403 .LASF254:
+ 1404 03c3 72635772 .string "rcWrongType"
+ 1404 6F6E6754
+ 1404 79706500
+ 1405 .LASF56:
+ 1406 03cf 72634675 .string "rcFunctParam"
+ 1406 6E637450
+ 1406 6172616D
+ 1406 00
+ 1407 .LASF63:
+ 1408 03dc 72634D65 .string "rcMemMap"
+ 1408 6D4D6170
+ 1408 00
+ 1409 .LASF9:
+ 1410 03e5 63686172 .string "char"
+ 1410 00
+
GAS LISTING /tmp/cctAECUH.s page 31
+
+
+ 1411 .LASF211:
+ 1412 03ea 7263416D .string "rcAmbiguous"
+ 1412 62696775
+ 1412 6F757300
+ 1413 .LASF244:
+ 1414 03f6 72634967 .string "rcIgnored"
+ 1414 6E6F7265
+ 1414 6400
+ 1415 .LASF109:
+ 1416 0400 72635265 .string "rcRenaming"
+ 1416 6E616D69
+ 1416 6E6700
+ 1417 .LASF121:
+ 1418 040b 72635265 .string "rcReading"
+ 1418 6164696E
+ 1418 6700
+ 1419 .LASF58:
+ 1420 0415 7263496E .string "rcIndex"
+ 1420 64657800
+ 1421 .LASF104:
+ 1422 041d 72634C69 .string "rcListing"
+ 1422 7374696E
+ 1422 6700
+ 1423 .LASF178:
+ 1424 0427 7263496E .string "rcInterface"
+ 1424 74657266
+ 1424 61636500
+ 1425 .LASF107:
+ 1426 0433 72634C6F .string "rcLocking"
+ 1426 636B696E
+ 1426 6700
+ 1427 .LASF60:
+ 1428 043d 72634C6F .string "rcLock"
+ 1428 636B00
+ 1429 .LASF108:
+ 1430 0444 7263556E .string "rcUnlocking"
+ 1430 6C6F636B
+ 1430 696E6700
+ 1431 .LASF85:
+ 1432 0450 72635665 .string "rcVector"
+ 1432 63746F72
+ 1432 00
+ 1433 .LASF122:
+ 1434 0459 72635772 .string "rcWriting"
+ 1434 6974696E
+ 1434 6700
+ 1435 .LASF53:
+ 1436 0463 72634669 .string "rcFileFormat"
+ 1436 6C65466F
+ 1436 726D6174
+ 1436 00
+ 1437 .LASF21:
+ 1438 0470 72634170 .string "rcApp"
+ 1438 7000
+ 1439 .LASF125:
+ 1440 0476 72635265 .string "rcResetting"
+ 1440 73657474
+
GAS LISTING /tmp/cctAECUH.s page 32
+
+
+ 1440 696E6700
+ 1441 .LASF71:
+ 1442 0482 72635072 .string "rcProcess"
+ 1442 6F636573
+ 1442 7300
+ 1443 .LASF106:
+ 1444 048c 72635265 .string "rcResolving"
+ 1444 736F6C76
+ 1444 696E6700
+ 1445 .LASF12:
+ 1446 0498 72635465 .string "rcText"
+ 1446 787400
+ 1447 .LASF66:
+ 1448 049f 72634E61 .string "rcNamelist"
+ 1448 6D656C69
+ 1448 737400
+ 1449 .LASF229:
+ 1450 04aa 72634E6F .string "rcNotFound"
+ 1450 74466F75
+ 1450 6E6400
+ 1451 .LASF139:
+ 1452 04b5 72635265 .string "rcReindexing"
+ 1452 696E6465
+ 1452 78696E67
+ 1452 00
+ 1453 .LASF87:
+ 1454 04c2 72634578 .string "rcExpression"
+ 1454 70726573
+ 1454 73696F6E
+ 1454 00
+ 1455 .LASF235:
+ 1456 04cf 72635265 .string "rcReadonly"
+ 1456 61646F6E
+ 1456 6C7900
+ 1457 .LASF95:
+ 1458 04da 72635572 .string "rcUri"
+ 1458 6900
+ 1459 .LASF100:
+ 1460 04e0 7263436F .string "rcConstructing"
+ 1460 6E737472
+ 1460 75637469
+ 1460 6E6700
+ 1461 .LASF173:
+ 1462 04ef 72634F66 .string "rcOffset"
+ 1462 66736574
+ 1462 00
+ 1463 .LASF233:
+ 1464 04f8 72634465 .string "rcDeadlock"
+ 1464 61646C6F
+ 1464 636B00
+ 1465 .LASF47:
+ 1466 0503 72634461 .string "rcDatabase"
+ 1466 74616261
+ 1466 736500
+ 1467 .LASF127:
+ 1468 050e 72634672 .string "rcFreezing"
+ 1468 65657A69
+
GAS LISTING /tmp/cctAECUH.s page 33
+
+
+ 1468 6E6700
+ 1469 .LASF217:
+ 1470 0519 7263496E .string "rcIncorrect"
+ 1470 636F7272
+ 1470 65637400
+ 1471 .LASF206:
+ 1472 0525 7263446F .string "rcDone"
+ 1472 6E6500
+ 1473 .LASF157:
+ 1474 052c 7263466C .string "rcFlushing"
+ 1474 75736869
+ 1474 6E6700
+ 1475 .LASF159:
+ 1476 0537 7263456E .string "rcEncrypting"
+ 1476 63727970
+ 1476 74696E67
+ 1476 00
+ 1477 .LASF251:
+ 1478 0544 7263556E .string "rcUnequal"
+ 1478 65717561
+ 1478 6C00
+ 1479 .LASF10:
+ 1480 054e 72634578 .string "rcExe"
+ 1480 6500
+ 1481 .LASF38:
+ 1482 0554 72634172 .string "rcArgv"
+ 1482 677600
+ 1483 .LASF147:
+ 1484 055b 72634465 .string "rcDetaching"
+ 1484 74616368
+ 1484 696E6700
+ 1485 .LASF99:
+ 1486 0567 72634361 .string "rcCasting"
+ 1486 7374696E
+ 1486 6700
+ 1487 .LASF110:
+ 1488 0571 7263416C .string "rcAliasing"
+ 1488 69617369
+ 1488 6E6700
+ 1489 .LASF49:
+ 1490 057c 7263446F .string "rcDoc"
+ 1490 6300
+ 1491 .LASF98:
+ 1492 0582 7263416C .string "rcAllocating"
+ 1492 6C6F6361
+ 1492 74696E67
+ 1492 00
+ 1493 .LASF212:
+ 1494 058f 72634E75 .string "rcNull"
+ 1494 6C6C00
+ 1495 .LASF180:
+ 1496 0596 72635261 .string "rcRange"
+ 1496 6E676500
+ 1497 .LASF35:
+ 1498 059e 72634172 .string "rcArc"
+ 1498 6300
+ 1499 .LASF252:
+
GAS LISTING /tmp/cctAECUH.s page 34
+
+
+ 1500 05a4 72634661 .string "rcFailed"
+ 1500 696C6564
+ 1500 00
+ 1501 .LASF23:
+ 1502 05ad 72635352 .string "rcSRA"
+ 1502 4100
+ 1503 .LASF152:
+ 1504 05b3 72635365 .string "rcSearching"
+ 1504 61726368
+ 1504 696E6700
+ 1505 .LASF225:
+ 1506 05bf 7263496E .string "rcInsufficient"
+ 1506 73756666
+ 1506 69636965
+ 1506 6E7400
+ 1507 .LASF165:
+ 1508 05ce 72635072 .string "rcProcessing"
+ 1508 6F636573
+ 1508 73696E67
+ 1508 00
+ 1509 .LASF144:
+ 1510 05db 72635369 .string "rcSignaling"
+ 1510 676E616C
+ 1510 696E6700
+ 1511 .LASF135:
+ 1512 05e7 72634465 .string "rcDecoding"
+ 1512 636F6469
+ 1512 6E6700
+ 1513 .LASF261:
+ 1514 05f2 4B4E756C .string "KNullBlockCipherVecMake"
+ 1514 6C426C6F
+ 1514 636B4369
+ 1514 70686572
+ 1514 5665634D
+ 1515 .LASF76:
+ 1516 060a 72635374 .string "rcStorage"
+ 1516 6F726167
+ 1516 6500
+ 1517 .LASF213:
+ 1518 0614 72634261 .string "rcBadVersion"
+ 1518 64566572
+ 1518 73696F6E
+ 1518 00
+ 1519 .LASF210:
+ 1520 0621 7263556E .string "rcUnrecognized"
+ 1520 7265636F
+ 1520 676E697A
+ 1520 656400
+ 1521 .LASF161:
+ 1522 0630 7263436F .string "rcComparing"
+ 1522 6D706172
+ 1522 696E6700
+ 1523 .LASF65:
+ 1524 063c 72634D67 .string "rcMgr"
+ 1524 7200
+ 1525 .LASF154:
+ 1526 0642 72634576 .string "rcEvaluating"
+
GAS LISTING /tmp/cctAECUH.s page 35
+
+
+ 1526 616C7561
+ 1526 74696E67
+ 1526 00
+ 1527 .LASF163:
+ 1528 064f 72635265 .string "rcRetrieving"
+ 1528 74726965
+ 1528 76696E67
+ 1528 00
+ 1529 .LASF116:
+ 1530 065c 72635570 .string "rcUpdating"
+ 1530 64617469
+ 1530 6E6700
+ 1531 .LASF83:
+ 1532 0667 72635472 .string "rcTrie"
+ 1532 696500
+ 1533 .LASF201:
+ 1534 066e 72635369 .string "rcSize"
+ 1534 7A6500
+ 1535 .LASF150:
+ 1536 0675 72634D75 .string "rcMultiplexing"
+ 1536 6C746970
+ 1536 6C657869
+ 1536 6E6700
+ 1537 .LASF243:
+ 1538 0684 72634F75 .string "rcOutOfKDirectory"
+ 1538 744F664B
+ 1538 44697265
+ 1538 63746F72
+ 1538 7900
+ 1539 .LASF40:
+ 1540 0696 72634261 .string "rcBarrier"
+ 1540 72726965
+ 1540 7200
+ 1541 .LASF77:
+ 1542 06a0 72635374 .string "rcString"
+ 1542 72696E67
+ 1542 00
+ 1543 .LASF193:
+ 1544 06a9 7263456E .string "rcEncryption"
+ 1544 63727970
+ 1544 74696F6E
+ 1544 00
+ 1545 .LASF25:
+ 1546 06b6 72634B46 .string "rcKFG"
+ 1546 4700
+ 1547 .LASF46:
+ 1548 06bc 72634375 .string "rcCursor"
+ 1548 72736F72
+ 1548 00
+ 1549 .LASF101:
+ 1550 06c5 72634465 .string "rcDestroying"
+ 1550 7374726F
+ 1550 79696E67
+ 1550 00
+ 1551 .LASF27:
+ 1552 06d2 72634B72 .string "rcKrypto"
+ 1552 7970746F
+
GAS LISTING /tmp/cctAECUH.s page 36
+
+
+ 1552 00
+ 1553 .LASF196:
+ 1554 06db 72635365 .string "rcSeed"
+ 1554 656400
+ 1555 .LASF221:
+ 1556 06e2 7263496E .string "rcInterrupted"
+ 1556 74657272
+ 1556 75707465
+ 1556 6400
+ 1557 .LASF153:
+ 1558 06f0 72634C6F .string "rcLoading"
+ 1558 6164696E
+ 1558 6700
+ 1559 .LASF136:
+ 1560 06fa 72635661 .string "rcValidating"
+ 1560 6C696461
+ 1560 74696E67
+ 1560 00
+ 1561 .LASF230:
+ 1562 0707 72634C6F .string "rcLocked"
+ 1562 636B6564
+ 1562 00
+ 1563 .LASF59:
+ 1564 0710 72634974 .string "rcIterator"
+ 1564 65726174
+ 1564 6F7200
+ 1565 .LASF67:
+ 1566 071b 72634E6F .string "rcNode"
+ 1566 646500
+ 1567 .LASF1:
+ 1568 0722 73686F72 .string "short int"
+ 1568 7420696E
+ 1568 7400
+ 1569 .LASF102:
+ 1570 072c 72635265 .string "rcReleasing"
+ 1570 6C656173
+ 1570 696E6700
+ 1571 .LASF177:
+ 1572 0738 72635472 .string "rcTransfer"
+ 1572 616E7366
+ 1572 657200
+ 1573 .LASF2:
+ 1574 0743 6C6F6E67 .string "long int"
+ 1574 20696E74
+ 1574 00
+ 1575 .LASF262:
+ 1576 074c 4B426C6F .string "KBlockCipher"
+ 1576 636B4369
+ 1576 70686572
+ 1576 00
+ 1577 .LASF164:
+ 1578 0759 72635365 .string "rcSending"
+ 1578 6E64696E
+ 1578 6700
+ 1579 .LASF215:
+ 1580 0763 7263496E .string "rcInvalid"
+ 1580 76616C69
+
GAS LISTING /tmp/cctAECUH.s page 37
+
+
+ 1580 6400
+ 1581 .LASF249:
+ 1582 076d 72634E6F .string "rcNotOpen"
+ 1582 744F7065
+ 1582 6E00
+ 1583 .LASF103:
+ 1584 0777 72634163 .string "rcAccessing"
+ 1584 63657373
+ 1584 696E6700
+ 1585 .LASF29:
+ 1586 0783 72634E53 .string "rcNS"
+ 1586 00
+ 1587 .LASF112:
+ 1588 0788 72635072 .string "rcProjecting"
+ 1588 6F6A6563
+ 1588 74696E67
+ 1588 00
+ 1589 .LASF175:
+ 1590 0795 72634E61 .string "rcName"
+ 1590 6D6500
+ 1591 .LASF238:
+ 1592 079c 7263496E .string "rcInPlaceNotAllowed"
+ 1592 506C6163
+ 1592 654E6F74
+ 1592 416C6C6F
+ 1592 77656400
+ 1593 .LASF247:
+ 1594 07b0 72634F70 .string "rcOpen"
+ 1594 656E00
+ 1595 .LASF227:
+ 1596 07b7 72635669 .string "rcViolated"
+ 1596 6F6C6174
+ 1596 656400
+ 1597 .LASF169:
+ 1598 07c2 72634E6F .string "rcNoObj"
+ 1598 4F626A00
+ 1599 .LASF200:
+ 1600 07ca 72635369 .string "rcSignalSet"
+ 1600 676E616C
+ 1600 53657400
+ 1601 .LASF197:
+ 1602 07d6 7263436F .string "rcConnection"
+ 1602 6E6E6563
+ 1602 74696F6E
+ 1602 00
+ 1603 .LASF195:
+ 1604 07e3 72634368 .string "rcChecksum"
+ 1604 65636B73
+ 1604 756D00
+ 1605 .LASF78:
+ 1606 07ee 72635461 .string "rcTable"
+ 1606 626C6500
+ 1607 .LASF11:
+ 1608 07f6 72635275 .string "rcRuntime"
+ 1608 6E74696D
+ 1608 6500
+ 1609 .LASF148:
+
GAS LISTING /tmp/cctAECUH.s page 38
+
+
+ 1610 0800 72634C6F .string "rcLogging"
+ 1610 6767696E
+ 1610 6700
+ 1611 .LASF160:
+ 1612 080a 72634465 .string "rcDecrypting"
+ 1612 63727970
+ 1612 74696E67
+ 1612 00
+ 1613 .LASF61:
+ 1614 0817 72634C6F .string "rcLog"
+ 1614 6700
+ 1615 .LASF68:
+ 1616 081d 72634E75 .string "rcNumeral"
+ 1616 6D657261
+ 1616 6C00
+ 1617 .LASF172:
+ 1618 0827 72635061 .string "rcParam"
+ 1618 72616D00
+ 1619 .LASF32:
+ 1620 082f 52434D6F .string "RCModule"
+ 1620 64756C65
+ 1620 00
+ 1621 .LASF158:
+ 1622 0838 72634170 .string "rcAppending"
+ 1622 70656E64
+ 1622 696E6700
+ 1623 .LASF57:
+ 1624 0844 72634865 .string "rcHeader"
+ 1624 61646572
+ 1624 00
+ 1625 .LASF6:
+ 1626 084d 6C6F6E67 .string "long unsigned int"
+ 1626 20756E73
+ 1626 69676E65
+ 1626 6420696E
+ 1626 7400
+ 1627 .LASF245:
+ 1628 085f 72634F75 .string "rcOutofrange"
+ 1628 746F6672
+ 1628 616E6765
+ 1628 00
+ 1629 .LASF170:
+ 1630 086c 72634C69 .string "rcLink"
+ 1630 6E6B00
+ 1631 .LASF52:
+ 1632 0873 72634669 .string "rcFileDesc"
+ 1632 6C654465
+ 1632 736300
+ 1633 .LASF263:
+ 1634 087e 6E65775F .string "new_obj"
+ 1634 6F626A00
+ 1635 .LASF209:
+ 1636 0886 7263556E .string "rcUnexpected"
+ 1636 65787065
+ 1636 63746564
+ 1636 00
+ 1637 .LASF207:
+
GAS LISTING /tmp/cctAECUH.s page 39
+
+
+ 1638 0893 7263556E .string "rcUnknown"
+ 1638 6B6E6F77
+ 1638 6E00
+ 1639 .LASF155:
+ 1640 089d 7263496E .string "rcInflating"
+ 1640 666C6174
+ 1640 696E6700
+ 1641 .LASF118:
+ 1642 08a9 72634F70 .string "rcOpening"
+ 1642 656E696E
+ 1642 6700
+ 1643 .LASF17:
+ 1644 08b3 72635053 .string "rcPS"
+ 1644 00
+ 1645 .LASF3:
+ 1646 08b8 756E7369 .string "unsigned char"
+ 1646 676E6564
+ 1646 20636861
+ 1646 7200
+ 1647 .LASF126:
+ 1648 08c6 72635065 .string "rcPersisting"
+ 1648 72736973
+ 1648 74696E67
+ 1648 00
+ 1649 .LASF259:
+ 1650 08d3 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 1650 652F726F
+ 1650 6461726D
+ 1650 65722F73
+ 1650 72615F73
+ 1651 .LASF220:
+ 1652 090d 7263496E .string "rcIncomplete"
+ 1652 636F6D70
+ 1652 6C657465
+ 1652 00
+ 1653 .LASF246:
+ 1654 091a 72634C61 .string "rcLastState_v1_0"
+ 1654 73745374
+ 1654 6174655F
+ 1654 76315F30
+ 1654 00
+ 1655 .LASF255:
+ 1656 092b 72634C61 .string "rcLastState_v1_1"
+ 1656 73745374
+ 1656 6174655F
+ 1656 76315F31
+ 1656 00
+ 1657 .LASF143:
+ 1658 093c 7263436F .string "rcConverting"
+ 1658 6E766572
+ 1658 74696E67
+ 1658 00
+ 1659 .LASF117:
+ 1660 0949 72634372 .string "rcCreating"
+ 1660 65617469
+ 1660 6E6700
+ 1661 .LASF191:
+
GAS LISTING /tmp/cctAECUH.s page 40
+
+
+ 1662 0954 72634974 .string "rcItem"
+ 1662 656D00
+ 1663 .LASF111:
+ 1664 095b 72635365 .string "rcSelecting"
+ 1664 6C656374
+ 1664 696E6700
+ 1665 .LASF8:
+ 1666 0967 72635F74 .string "rc_t"
+ 1666 00
+ 1667 .LASF73:
+ 1668 096c 72635257 .string "rcRWLock"
+ 1668 4C6F636B
+ 1668 00
+ 1669 .LASF190:
+ 1670 0975 72634C61 .string "rcLastObject_v1_0"
+ 1670 73744F62
+ 1670 6A656374
+ 1670 5F76315F
+ 1670 3000
+ 1671 .LASF203:
+ 1672 0987 72634C61 .string "rcLastObject_v1_1"
+ 1672 73744F62
+ 1672 6A656374
+ 1672 5F76315F
+ 1672 3100
+ 1673 .LASF187:
+ 1674 0999 72634172 .string "rcArcHardLink"
+ 1674 63486172
+ 1674 644C696E
+ 1674 6B00
+ 1675 .LASF113:
+ 1676 09a7 7263496E .string "rcInserting"
+ 1676 73657274
+ 1676 696E6700
+ 1677 .LASF166:
+ 1678 09b3 72634964 .string "rcIdentifying"
+ 1678 656E7469
+ 1678 6679696E
+ 1678 6700
+ 1679 .LASF124:
+ 1680 09c1 72635265 .string "rcReverting"
+ 1680 76657274
+ 1680 696E6700
+ 1681 .LASF20:
+ 1682 09cd 72635644 .string "rcVDB"
+ 1682 4200
+ 1683 .LASF105:
+ 1684 09d3 72635669 .string "rcVisiting"
+ 1684 73697469
+ 1684 6E6700
+ 1685 .LASF88:
+ 1686 09de 72634C61 .string "rcLastTarget_v1_0"
+ 1686 73745461
+ 1686 72676574
+ 1686 5F76315F
+ 1686 3000
+ 1687 .LASF96:
+
GAS LISTING /tmp/cctAECUH.s page 41
+
+
+ 1688 09f0 72634C61 .string "rcLastTarget_v1_1"
+ 1688 73745461
+ 1688 72676574
+ 1688 5F76315F
+ 1688 3100
+ 1689 .LASF84:
+ 1690 0a02 72635479 .string "rcType"
+ 1690 706500
+ 1691 .LASF231:
+ 1692 0a09 7263556E .string "rcUnlocked"
+ 1692 6C6F636B
+ 1692 656400
+ 1693 .LASF151:
+ 1694 0a14 7263436C .string "rcClassifying"
+ 1694 61737369
+ 1694 6679696E
+ 1694 6700
+ 1695 .LASF228:
+ 1696 0a22 72634578 .string "rcExists"
+ 1696 69737473
+ 1696 00
+ 1697 .LASF130:
+ 1698 0a2b 7263466F .string "rcFormatting"
+ 1698 726D6174
+ 1698 74696E67
+ 1698 00
+ 1699 .LASF79:
+ 1700 0a38 72635468 .string "rcThread"
+ 1700 72656164
+ 1700 00
+ 1701 .LASF0:
+ 1702 0a41 7369676E .string "signed char"
+ 1702 65642063
+ 1702 68617200
+ 1703 .LASF4:
+ 1704 0a4d 73686F72 .string "short unsigned int"
+ 1704 7420756E
+ 1704 7369676E
+ 1704 65642069
+ 1704 6E7400
+ 1705 .LASF260:
+ 1706 0a60 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 1706 652F726F
+ 1706 6461726D
+ 1706 65722F73
+ 1706 72615F73
+ 1707 .LASF182:
+ 1708 0aa8 72634279 .string "rcByteOrder"
+ 1708 74654F72
+ 1708 64657200
+ 1709 .LASF36:
+ 1710 0ab4 7263546F .string "rcToc"
+ 1710 6300
+ 1711 .LASF44:
+ 1712 0aba 7263436F .string "rcColumn"
+ 1712 6C756D6E
+ 1712 00
+
GAS LISTING /tmp/cctAECUH.s page 42
+
+
+ 1713 .LASF256:
+ 1714 0ac3 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 1714 45545459
+ 1714 5F46554E
+ 1714 4354494F
+ 1714 4E5F5F00
+ 1715 .LASF94:
+ 1716 0ad7 72635175 .string "rcQuery"
+ 1716 65727900
+ 1717 .LASF140:
+ 1718 0adf 72635265 .string "rcRegistering"
+ 1718 67697374
+ 1718 6572696E
+ 1718 6700
+ 1719 .LASF86:
+ 1720 0aed 72634479 .string "rcDylib"
+ 1720 6C696200
+ 1721 .LASF81:
+ 1722 0af5 7263546F .string "rcToken"
+ 1722 6B656E00
+ 1723 .LASF134:
+ 1724 0afd 7263456E .string "rcEncoding"
+ 1724 636F6469
+ 1724 6E6700
+ 1725 .LASF224:
+ 1726 0b08 72634578 .string "rcExhausted"
+ 1726 68617573
+ 1726 74656400
+ 1727 .LASF186:
+ 1728 0b14 72634469 .string "rcDirEntry"
+ 1728 72456E74
+ 1728 727900
+ 1729 .LASF26:
+ 1730 0b1f 7263416C .string "rcAlign"
+ 1730 69676E00
+ 1731 .LASF28:
+ 1732 0b27 72635244 .string "rcRDBMS"
+ 1732 424D5300
+ 1733 .LASF14:
+ 1734 0b2f 72634353 .string "rcCS"
+ 1734 00
+ 1735 .LASF129:
+ 1736 0b34 7263436F .string "rcConcatenating"
+ 1736 6E636174
+ 1736 656E6174
+ 1736 696E6700
+ 1737 .LASF48:
+ 1738 0b44 72634469 .string "rcDirectory"
+ 1738 72656374
+ 1738 6F727900
+ 1739 .LASF223:
+ 1740 0b50 7263456D .string "rcEmpty"
+ 1740 70747900
+ 1741 .LASF13:
+ 1742 0b58 7263436F .string "rcCont"
+ 1742 6E7400
+ 1743 .LASF33:
+
GAS LISTING /tmp/cctAECUH.s page 43
+
+
+ 1744 0b5f 52435461 .string "RCTarget"
+ 1744 72676574
+ 1744 00
+ 1745 .ident "GCC: (GNU) 4.4.2"
+ 1746 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/cctAECUH.s page 44
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 no-null-ncbi.c
+ /tmp/cctAECUH.s:17 .text:0000000000000000 KNullBlockCipherVecMake
+ /tmp/cctAECUH.s:66 .rodata:0000000000000040 __func__.2350
+ /tmp/cctAECUH.s:71 .rodata:0000000000000060 __PRETTY_FUNCTION__.2349
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/no-null-ncbi.vecreg.pic.o.list b/libs/krypto/no-null-ncbi.vecreg.pic.o.list
new file mode 100644
index 0000000..d53afd5
--- /dev/null
+++ b/libs/krypto/no-null-ncbi.vecreg.pic.o.list
@@ -0,0 +1,2540 @@
+GAS LISTING /tmp/cclL3imJ.s page 1
+
+
+ 1 .file "no-null-ncbi.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 CC000000 .text
+ 8 0200AA00
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .section .rodata
+ 11 .align 8
+ 12 .LC0:
+ 13 0000 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 13 652F726F
+ 13 6461726D
+ 13 65722F73
+ 13 72615F73
+ 14 .text
+ 15 .globl KNullBlockCipherVecRegMake
+ 16 .type KNullBlockCipherVecRegMake, @function
+ 17 KNullBlockCipherVecRegMake:
+ 18 .LFB15:
+ 19 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <krypto/extern.h>
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "ncbi-priv.h"
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "cipher-priv.h"
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* #include "blockcipher-priv.h" */
+
GAS LISTING /tmp/cclL3imJ.s page 2
+
+
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <klib/rc.h>
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* ----------------------------------------------------------------------
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Make
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * Create a new Null Block Cipher object.
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * The processor is checked to see if this particular version is supported on
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** * this particular CPU.
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** */
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** struct KBlockCipher;
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc_t NULLBCMEMBER(Make) (struct KBlockCipher ** new_obj)
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** {
+ 20 .loc 1 43 0
+ 21 .cfi_startproc
+ 22 0000 55 pushq %rbp
+ 23 .LCFI0:
+ 24 .cfi_def_cfa_offset 16
+ 25 0001 4889E5 movq %rsp, %rbp
+ 26 .cfi_offset 6, -16
+ 27 .LCFI1:
+ 28 .cfi_def_cfa_register 6
+ 29 0004 4883EC20 subq $32, %rsp
+ 30 0008 48897DE8 movq %rdi, -24(%rbp)
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc_t rc;
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* Check parameter first */
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** if (new_obj == NULL)
+ 31 .loc 1 47 0
+ 32 000c 48837DE8 cmpq $0, -24(%rbp)
+ 32 00
+ 33 0011 7522 jne .L2
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 34 .loc 1 48 0
+ 35 0013 B9300000 movl $48, %ecx
+ 35 00
+ 36 0018 488D1500 leaq __func__.2439(%rip), %rdx
+ 36 000000
+ 37 001f 488D3500 leaq .LC0(%rip), %rsi
+ 37 000000
+ 38 0026 BF878F00 movl $-2030006393, %edi
+ 38 87
+ 39 002b E8000000 call SetRCFileFuncLine at PLT
+ 39 00
+ 40 0030 8945FC movl %eax, -4(%rbp)
+ 41 0033 EB2B jmp .L3
+ 42 .L2:
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** else
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** {
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** *new_obj = NULL;
+ 43 .loc 1 52 0
+ 44 0035 488B45E8 movq -24(%rbp), %rax
+ 45 0039 48C70000 movq $0, (%rax)
+ 45 000000
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
GAS LISTING /tmp/cclL3imJ.s page 3
+
+
+ 46 .loc 1 54 0
+ 47 0040 B9360000 movl $54, %ecx
+ 47 00
+ 48 0045 488D1500 leaq __func__.2439(%rip), %rdx
+ 48 000000
+ 49 004c 488D3500 leaq .LC0(%rip), %rsi
+ 49 000000
+ 50 0053 BF038500 movl $-2030009085, %edi
+ 50 87
+ 51 0058 E8000000 call SetRCFileFuncLine at PLT
+ 51 00
+ 52 005d 8945FC movl %eax, -4(%rbp)
+ 53 .L3:
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** }
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** return rc;
+ 54 .loc 1 56 0
+ 55 0060 8B45FC movl -4(%rbp), %eax
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** }
+ 56 .loc 1 57 0
+ 57 0063 C9 leave
+ 58 0064 C3 ret
+ 59 .cfi_endproc
+ 60 .LFE15:
+ 61 .size KNullBlockCipherVecRegMake, .-KNullBlockCipherVecRegMake
+ 62 .section .rodata
+ 63 003a 00000000 .align 16
+ 63 0000
+ 64 .type __func__.2439, @object
+ 65 .size __func__.2439, 27
+ 66 __func__.2439:
+ 67 0040 4B4E756C .string "KNullBlockCipherVecRegMake"
+ 67 6C426C6F
+ 67 636B4369
+ 67 70686572
+ 67 56656352
+ 68 005b 00000000 .align 16
+ 68 00
+ 69 .type __PRETTY_FUNCTION__.2438, @object
+ 70 .size __PRETTY_FUNCTION__.2438, 27
+ 71 __PRETTY_FUNCTION__.2438:
+ 72 0060 4B4E756C .string "KNullBlockCipherVecRegMake"
+ 72 6C426C6F
+ 72 636B4369
+ 72 70686572
+ 72 56656352
+ 73 .text
+ 74 .Letext0:
+ 75 .section .debug_loc,"", at progbits
+ 76 .Ldebug_loc0:
+ 77 .LLST0:
+ 78 0000 00000000 .quad .LFB15-.Ltext0
+ 78 00000000
+ 79 0008 01000000 .quad .LCFI0-.Ltext0
+ 79 00000000
+ 80 0010 0200 .value 0x2
+ 81 0012 77 .byte 0x77
+ 82 0013 08 .sleb128 8
+
GAS LISTING /tmp/cclL3imJ.s page 4
+
+
+ 83 0014 01000000 .quad .LCFI0-.Ltext0
+ 83 00000000
+ 84 001c 04000000 .quad .LCFI1-.Ltext0
+ 84 00000000
+ 85 0024 0200 .value 0x2
+ 86 0026 77 .byte 0x77
+ 87 0027 10 .sleb128 16
+ 88 0028 04000000 .quad .LCFI1-.Ltext0
+ 88 00000000
+ 89 0030 65000000 .quad .LFE15-.Ltext0
+ 89 00000000
+ 90 0038 0200 .value 0x2
+ 91 003a 76 .byte 0x76
+ 92 003b 10 .sleb128 16
+ 93 003c 00000000 .quad 0x0
+ 93 00000000
+ 94 0044 00000000 .quad 0x0
+ 94 00000000
+ 95 .file 2 "/usr/include/stdint.h"
+ 96 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 97 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 98 .section .debug_info
+ 99 0000 24070000 .long 0x724
+ 100 0004 0200 .value 0x2
+ 101 0006 00000000 .long .Ldebug_abbrev0
+ 102 000a 08 .byte 0x8
+ 103 000b 01 .uleb128 0x1
+ 104 000c 00000000 .long .LASF258
+ 105 0010 01 .byte 0x1
+ 106 0011 00000000 .long .LASF259
+ 107 0015 00000000 .long .LASF260
+ 108 0019 00000000 .quad .Ltext0
+ 108 00000000
+ 109 0021 00000000 .quad .Letext0
+ 109 00000000
+ 110 0029 00000000 .long .Ldebug_line0
+ 111 002d 02 .uleb128 0x2
+ 112 002e 01 .byte 0x1
+ 113 002f 06 .byte 0x6
+ 114 0030 00000000 .long .LASF0
+ 115 0034 02 .uleb128 0x2
+ 116 0035 02 .byte 0x2
+ 117 0036 05 .byte 0x5
+ 118 0037 00000000 .long .LASF1
+ 119 003b 03 .uleb128 0x3
+ 120 003c 04 .byte 0x4
+ 121 003d 05 .byte 0x5
+ 122 003e 696E7400 .string "int"
+ 123 0042 02 .uleb128 0x2
+ 124 0043 08 .byte 0x8
+ 125 0044 05 .byte 0x5
+ 126 0045 00000000 .long .LASF2
+ 127 0049 02 .uleb128 0x2
+ 128 004a 01 .byte 0x1
+ 129 004b 08 .byte 0x8
+ 130 004c 00000000 .long .LASF3
+ 131 0050 02 .uleb128 0x2
+
GAS LISTING /tmp/cclL3imJ.s page 5
+
+
+ 132 0051 02 .byte 0x2
+ 133 0052 07 .byte 0x7
+ 134 0053 00000000 .long .LASF4
+ 135 0057 04 .uleb128 0x4
+ 136 0058 00000000 .long .LASF7
+ 137 005c 02 .byte 0x2
+ 138 005d 34 .byte 0x34
+ 139 005e 62000000 .long 0x62
+ 140 0062 02 .uleb128 0x2
+ 141 0063 04 .byte 0x4
+ 142 0064 07 .byte 0x7
+ 143 0065 00000000 .long .LASF5
+ 144 0069 02 .uleb128 0x2
+ 145 006a 08 .byte 0x8
+ 146 006b 07 .byte 0x7
+ 147 006c 00000000 .long .LASF6
+ 148 0070 04 .uleb128 0x4
+ 149 0071 00000000 .long .LASF8
+ 150 0075 03 .byte 0x3
+ 151 0076 30 .byte 0x30
+ 152 0077 57000000 .long 0x57
+ 153 007b 05 .uleb128 0x5
+ 154 007c 08 .byte 0x8
+ 155 007d 07 .byte 0x7
+ 156 007e 02 .uleb128 0x2
+ 157 007f 01 .byte 0x1
+ 158 0080 06 .byte 0x6
+ 159 0081 00000000 .long .LASF9
+ 160 0085 06 .uleb128 0x6
+ 161 0086 00000000 .long .LASF32
+ 162 008a 04 .byte 0x4
+ 163 008b 04 .byte 0x4
+ 164 008c 5A .byte 0x5a
+ 165 008d 16010000 .long 0x116
+ 166 0091 07 .uleb128 0x7
+ 167 0092 00000000 .long .LASF10
+ 168 0096 00 .sleb128 0
+ 169 0097 07 .uleb128 0x7
+ 170 0098 00000000 .long .LASF11
+ 171 009c 01 .sleb128 1
+ 172 009d 07 .uleb128 0x7
+ 173 009e 00000000 .long .LASF12
+ 174 00a2 02 .sleb128 2
+ 175 00a3 07 .uleb128 0x7
+ 176 00a4 00000000 .long .LASF13
+ 177 00a8 03 .sleb128 3
+ 178 00a9 07 .uleb128 0x7
+ 179 00aa 00000000 .long .LASF14
+ 180 00ae 04 .sleb128 4
+ 181 00af 07 .uleb128 0x7
+ 182 00b0 00000000 .long .LASF15
+ 183 00b4 05 .sleb128 5
+ 184 00b5 07 .uleb128 0x7
+ 185 00b6 00000000 .long .LASF16
+ 186 00ba 06 .sleb128 6
+ 187 00bb 07 .uleb128 0x7
+ 188 00bc 00000000 .long .LASF17
+
GAS LISTING /tmp/cclL3imJ.s page 6
+
+
+ 189 00c0 07 .sleb128 7
+ 190 00c1 07 .uleb128 0x7
+ 191 00c2 00000000 .long .LASF18
+ 192 00c6 08 .sleb128 8
+ 193 00c7 07 .uleb128 0x7
+ 194 00c8 00000000 .long .LASF19
+ 195 00cc 09 .sleb128 9
+ 196 00cd 07 .uleb128 0x7
+ 197 00ce 00000000 .long .LASF20
+ 198 00d2 0A .sleb128 10
+ 199 00d3 07 .uleb128 0x7
+ 200 00d4 00000000 .long .LASF21
+ 201 00d8 0B .sleb128 11
+ 202 00d9 07 .uleb128 0x7
+ 203 00da 00000000 .long .LASF22
+ 204 00de 0C .sleb128 12
+ 205 00df 07 .uleb128 0x7
+ 206 00e0 00000000 .long .LASF23
+ 207 00e4 0D .sleb128 13
+ 208 00e5 07 .uleb128 0x7
+ 209 00e6 00000000 .long .LASF24
+ 210 00ea 0E .sleb128 14
+ 211 00eb 07 .uleb128 0x7
+ 212 00ec 00000000 .long .LASF25
+ 213 00f0 0E .sleb128 14
+ 214 00f1 07 .uleb128 0x7
+ 215 00f2 00000000 .long .LASF26
+ 216 00f6 0F .sleb128 15
+ 217 00f7 07 .uleb128 0x7
+ 218 00f8 00000000 .long .LASF27
+ 219 00fc 10 .sleb128 16
+ 220 00fd 07 .uleb128 0x7
+ 221 00fe 00000000 .long .LASF28
+ 222 0102 11 .sleb128 17
+ 223 0103 07 .uleb128 0x7
+ 224 0104 00000000 .long .LASF29
+ 225 0108 12 .sleb128 18
+ 226 0109 07 .uleb128 0x7
+ 227 010a 00000000 .long .LASF30
+ 228 010e 13 .sleb128 19
+ 229 010f 07 .uleb128 0x7
+ 230 0110 00000000 .long .LASF31
+ 231 0114 14 .sleb128 20
+ 232 0115 00 .byte 0x0
+ 233 0116 06 .uleb128 0x6
+ 234 0117 00000000 .long .LASF33
+ 235 011b 04 .byte 0x4
+ 236 011c 04 .byte 0x4
+ 237 011d 77 .byte 0x77
+ 238 011e 9D020000 .long 0x29d
+ 239 0122 07 .uleb128 0x7
+ 240 0123 00000000 .long .LASF34
+ 241 0127 00 .sleb128 0
+ 242 0128 07 .uleb128 0x7
+ 243 0129 00000000 .long .LASF35
+ 244 012d 01 .sleb128 1
+ 245 012e 07 .uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s page 7
+
+
+ 246 012f 00000000 .long .LASF36
+ 247 0133 02 .sleb128 2
+ 248 0134 07 .uleb128 0x7
+ 249 0135 00000000 .long .LASF37
+ 250 0139 03 .sleb128 3
+ 251 013a 07 .uleb128 0x7
+ 252 013b 00000000 .long .LASF38
+ 253 013f 04 .sleb128 4
+ 254 0140 07 .uleb128 0x7
+ 255 0141 00000000 .long .LASF39
+ 256 0145 05 .sleb128 5
+ 257 0146 07 .uleb128 0x7
+ 258 0147 00000000 .long .LASF40
+ 259 014b 06 .sleb128 6
+ 260 014c 07 .uleb128 0x7
+ 261 014d 00000000 .long .LASF41
+ 262 0151 07 .sleb128 7
+ 263 0152 07 .uleb128 0x7
+ 264 0153 00000000 .long .LASF42
+ 265 0157 08 .sleb128 8
+ 266 0158 07 .uleb128 0x7
+ 267 0159 00000000 .long .LASF43
+ 268 015d 09 .sleb128 9
+ 269 015e 07 .uleb128 0x7
+ 270 015f 00000000 .long .LASF44
+ 271 0163 0A .sleb128 10
+ 272 0164 07 .uleb128 0x7
+ 273 0165 00000000 .long .LASF45
+ 274 0169 0B .sleb128 11
+ 275 016a 07 .uleb128 0x7
+ 276 016b 00000000 .long .LASF46
+ 277 016f 0C .sleb128 12
+ 278 0170 07 .uleb128 0x7
+ 279 0171 00000000 .long .LASF47
+ 280 0175 0D .sleb128 13
+ 281 0176 07 .uleb128 0x7
+ 282 0177 00000000 .long .LASF48
+ 283 017b 0E .sleb128 14
+ 284 017c 07 .uleb128 0x7
+ 285 017d 00000000 .long .LASF49
+ 286 0181 0F .sleb128 15
+ 287 0182 07 .uleb128 0x7
+ 288 0183 00000000 .long .LASF50
+ 289 0187 10 .sleb128 16
+ 290 0188 07 .uleb128 0x7
+ 291 0189 00000000 .long .LASF51
+ 292 018d 11 .sleb128 17
+ 293 018e 07 .uleb128 0x7
+ 294 018f 00000000 .long .LASF52
+ 295 0193 12 .sleb128 18
+ 296 0194 07 .uleb128 0x7
+ 297 0195 00000000 .long .LASF53
+ 298 0199 13 .sleb128 19
+ 299 019a 07 .uleb128 0x7
+ 300 019b 00000000 .long .LASF54
+ 301 019f 14 .sleb128 20
+ 302 01a0 07 .uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s page 8
+
+
+ 303 01a1 00000000 .long .LASF55
+ 304 01a5 15 .sleb128 21
+ 305 01a6 07 .uleb128 0x7
+ 306 01a7 00000000 .long .LASF56
+ 307 01ab 16 .sleb128 22
+ 308 01ac 07 .uleb128 0x7
+ 309 01ad 00000000 .long .LASF57
+ 310 01b1 17 .sleb128 23
+ 311 01b2 07 .uleb128 0x7
+ 312 01b3 00000000 .long .LASF58
+ 313 01b7 18 .sleb128 24
+ 314 01b8 07 .uleb128 0x7
+ 315 01b9 00000000 .long .LASF59
+ 316 01bd 19 .sleb128 25
+ 317 01be 07 .uleb128 0x7
+ 318 01bf 00000000 .long .LASF60
+ 319 01c3 1A .sleb128 26
+ 320 01c4 07 .uleb128 0x7
+ 321 01c5 00000000 .long .LASF61
+ 322 01c9 1B .sleb128 27
+ 323 01ca 07 .uleb128 0x7
+ 324 01cb 00000000 .long .LASF62
+ 325 01cf 1C .sleb128 28
+ 326 01d0 07 .uleb128 0x7
+ 327 01d1 00000000 .long .LASF63
+ 328 01d5 1D .sleb128 29
+ 329 01d6 07 .uleb128 0x7
+ 330 01d7 00000000 .long .LASF64
+ 331 01db 1E .sleb128 30
+ 332 01dc 07 .uleb128 0x7
+ 333 01dd 00000000 .long .LASF65
+ 334 01e1 1F .sleb128 31
+ 335 01e2 07 .uleb128 0x7
+ 336 01e3 00000000 .long .LASF66
+ 337 01e7 20 .sleb128 32
+ 338 01e8 07 .uleb128 0x7
+ 339 01e9 00000000 .long .LASF67
+ 340 01ed 21 .sleb128 33
+ 341 01ee 07 .uleb128 0x7
+ 342 01ef 00000000 .long .LASF68
+ 343 01f3 22 .sleb128 34
+ 344 01f4 07 .uleb128 0x7
+ 345 01f5 00000000 .long .LASF69
+ 346 01f9 23 .sleb128 35
+ 347 01fa 07 .uleb128 0x7
+ 348 01fb 00000000 .long .LASF70
+ 349 01ff 24 .sleb128 36
+ 350 0200 07 .uleb128 0x7
+ 351 0201 00000000 .long .LASF71
+ 352 0205 25 .sleb128 37
+ 353 0206 07 .uleb128 0x7
+ 354 0207 00000000 .long .LASF72
+ 355 020b 26 .sleb128 38
+ 356 020c 07 .uleb128 0x7
+ 357 020d 00000000 .long .LASF73
+ 358 0211 27 .sleb128 39
+ 359 0212 07 .uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s page 9
+
+
+ 360 0213 00000000 .long .LASF74
+ 361 0217 28 .sleb128 40
+ 362 0218 07 .uleb128 0x7
+ 363 0219 00000000 .long .LASF75
+ 364 021d 29 .sleb128 41
+ 365 021e 07 .uleb128 0x7
+ 366 021f 00000000 .long .LASF76
+ 367 0223 2A .sleb128 42
+ 368 0224 07 .uleb128 0x7
+ 369 0225 00000000 .long .LASF77
+ 370 0229 2B .sleb128 43
+ 371 022a 07 .uleb128 0x7
+ 372 022b 00000000 .long .LASF78
+ 373 022f 2C .sleb128 44
+ 374 0230 07 .uleb128 0x7
+ 375 0231 00000000 .long .LASF79
+ 376 0235 2D .sleb128 45
+ 377 0236 07 .uleb128 0x7
+ 378 0237 00000000 .long .LASF80
+ 379 023b 2E .sleb128 46
+ 380 023c 07 .uleb128 0x7
+ 381 023d 00000000 .long .LASF81
+ 382 0241 2F .sleb128 47
+ 383 0242 07 .uleb128 0x7
+ 384 0243 00000000 .long .LASF82
+ 385 0247 30 .sleb128 48
+ 386 0248 07 .uleb128 0x7
+ 387 0249 00000000 .long .LASF83
+ 388 024d 31 .sleb128 49
+ 389 024e 07 .uleb128 0x7
+ 390 024f 00000000 .long .LASF84
+ 391 0253 32 .sleb128 50
+ 392 0254 07 .uleb128 0x7
+ 393 0255 00000000 .long .LASF85
+ 394 0259 33 .sleb128 51
+ 395 025a 07 .uleb128 0x7
+ 396 025b 00000000 .long .LASF86
+ 397 025f 34 .sleb128 52
+ 398 0260 07 .uleb128 0x7
+ 399 0261 00000000 .long .LASF87
+ 400 0265 35 .sleb128 53
+ 401 0266 07 .uleb128 0x7
+ 402 0267 00000000 .long .LASF88
+ 403 026b 36 .sleb128 54
+ 404 026c 07 .uleb128 0x7
+ 405 026d 00000000 .long .LASF89
+ 406 0271 36 .sleb128 54
+ 407 0272 07 .uleb128 0x7
+ 408 0273 00000000 .long .LASF90
+ 409 0277 37 .sleb128 55
+ 410 0278 07 .uleb128 0x7
+ 411 0279 00000000 .long .LASF91
+ 412 027d 38 .sleb128 56
+ 413 027e 07 .uleb128 0x7
+ 414 027f 00000000 .long .LASF92
+ 415 0283 39 .sleb128 57
+ 416 0284 07 .uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s page 10
+
+
+ 417 0285 00000000 .long .LASF93
+ 418 0289 3A .sleb128 58
+ 419 028a 07 .uleb128 0x7
+ 420 028b 00000000 .long .LASF94
+ 421 028f 3B .sleb128 59
+ 422 0290 07 .uleb128 0x7
+ 423 0291 00000000 .long .LASF95
+ 424 0295 3C .sleb128 60
+ 425 0296 07 .uleb128 0x7
+ 426 0297 00000000 .long .LASF96
+ 427 029b 3D .sleb128 61
+ 428 029c 00 .byte 0x0
+ 429 029d 06 .uleb128 0x6
+ 430 029e 00000000 .long .LASF97
+ 431 02a2 04 .byte 0x4
+ 432 02a3 04 .byte 0x4
+ 433 02a4 BD .byte 0xbd
+ 434 02a5 53040000 .long 0x453
+ 435 02a9 07 .uleb128 0x7
+ 436 02aa 00000000 .long .LASF98
+ 437 02ae 00 .sleb128 0
+ 438 02af 07 .uleb128 0x7
+ 439 02b0 00000000 .long .LASF99
+ 440 02b4 01 .sleb128 1
+ 441 02b5 07 .uleb128 0x7
+ 442 02b6 00000000 .long .LASF100
+ 443 02ba 02 .sleb128 2
+ 444 02bb 07 .uleb128 0x7
+ 445 02bc 00000000 .long .LASF101
+ 446 02c0 03 .sleb128 3
+ 447 02c1 07 .uleb128 0x7
+ 448 02c2 00000000 .long .LASF102
+ 449 02c6 04 .sleb128 4
+ 450 02c7 07 .uleb128 0x7
+ 451 02c8 00000000 .long .LASF103
+ 452 02cc 05 .sleb128 5
+ 453 02cd 07 .uleb128 0x7
+ 454 02ce 00000000 .long .LASF104
+ 455 02d2 06 .sleb128 6
+ 456 02d3 07 .uleb128 0x7
+ 457 02d4 00000000 .long .LASF105
+ 458 02d8 07 .sleb128 7
+ 459 02d9 07 .uleb128 0x7
+ 460 02da 00000000 .long .LASF106
+ 461 02de 08 .sleb128 8
+ 462 02df 07 .uleb128 0x7
+ 463 02e0 00000000 .long .LASF107
+ 464 02e4 09 .sleb128 9
+ 465 02e5 07 .uleb128 0x7
+ 466 02e6 00000000 .long .LASF108
+ 467 02ea 0A .sleb128 10
+ 468 02eb 07 .uleb128 0x7
+ 469 02ec 00000000 .long .LASF109
+ 470 02f0 0B .sleb128 11
+ 471 02f1 07 .uleb128 0x7
+ 472 02f2 00000000 .long .LASF110
+ 473 02f6 0C .sleb128 12
+
GAS LISTING /tmp/cclL3imJ.s page 11
+
+
+ 474 02f7 07 .uleb128 0x7
+ 475 02f8 00000000 .long .LASF111
+ 476 02fc 0D .sleb128 13
+ 477 02fd 07 .uleb128 0x7
+ 478 02fe 00000000 .long .LASF112
+ 479 0302 0E .sleb128 14
+ 480 0303 07 .uleb128 0x7
+ 481 0304 00000000 .long .LASF113
+ 482 0308 0F .sleb128 15
+ 483 0309 07 .uleb128 0x7
+ 484 030a 00000000 .long .LASF114
+ 485 030e 10 .sleb128 16
+ 486 030f 07 .uleb128 0x7
+ 487 0310 00000000 .long .LASF115
+ 488 0314 11 .sleb128 17
+ 489 0315 07 .uleb128 0x7
+ 490 0316 00000000 .long .LASF116
+ 491 031a 12 .sleb128 18
+ 492 031b 07 .uleb128 0x7
+ 493 031c 00000000 .long .LASF117
+ 494 0320 13 .sleb128 19
+ 495 0321 07 .uleb128 0x7
+ 496 0322 00000000 .long .LASF118
+ 497 0326 14 .sleb128 20
+ 498 0327 07 .uleb128 0x7
+ 499 0328 00000000 .long .LASF119
+ 500 032c 15 .sleb128 21
+ 501 032d 07 .uleb128 0x7
+ 502 032e 00000000 .long .LASF120
+ 503 0332 16 .sleb128 22
+ 504 0333 07 .uleb128 0x7
+ 505 0334 00000000 .long .LASF121
+ 506 0338 17 .sleb128 23
+ 507 0339 07 .uleb128 0x7
+ 508 033a 00000000 .long .LASF122
+ 509 033e 18 .sleb128 24
+ 510 033f 07 .uleb128 0x7
+ 511 0340 00000000 .long .LASF123
+ 512 0344 19 .sleb128 25
+ 513 0345 07 .uleb128 0x7
+ 514 0346 00000000 .long .LASF124
+ 515 034a 1A .sleb128 26
+ 516 034b 07 .uleb128 0x7
+ 517 034c 00000000 .long .LASF125
+ 518 0350 1B .sleb128 27
+ 519 0351 07 .uleb128 0x7
+ 520 0352 00000000 .long .LASF126
+ 521 0356 1C .sleb128 28
+ 522 0357 07 .uleb128 0x7
+ 523 0358 00000000 .long .LASF127
+ 524 035c 1D .sleb128 29
+ 525 035d 07 .uleb128 0x7
+ 526 035e 00000000 .long .LASF128
+ 527 0362 1E .sleb128 30
+ 528 0363 07 .uleb128 0x7
+ 529 0364 00000000 .long .LASF129
+ 530 0368 1F .sleb128 31
+
GAS LISTING /tmp/cclL3imJ.s page 12
+
+
+ 531 0369 07 .uleb128 0x7
+ 532 036a 00000000 .long .LASF130
+ 533 036e 20 .sleb128 32
+ 534 036f 07 .uleb128 0x7
+ 535 0370 00000000 .long .LASF131
+ 536 0374 21 .sleb128 33
+ 537 0375 07 .uleb128 0x7
+ 538 0376 00000000 .long .LASF132
+ 539 037a 22 .sleb128 34
+ 540 037b 07 .uleb128 0x7
+ 541 037c 00000000 .long .LASF133
+ 542 0380 23 .sleb128 35
+ 543 0381 07 .uleb128 0x7
+ 544 0382 00000000 .long .LASF134
+ 545 0386 24 .sleb128 36
+ 546 0387 07 .uleb128 0x7
+ 547 0388 00000000 .long .LASF135
+ 548 038c 25 .sleb128 37
+ 549 038d 07 .uleb128 0x7
+ 550 038e 00000000 .long .LASF136
+ 551 0392 26 .sleb128 38
+ 552 0393 07 .uleb128 0x7
+ 553 0394 00000000 .long .LASF137
+ 554 0398 27 .sleb128 39
+ 555 0399 07 .uleb128 0x7
+ 556 039a 00000000 .long .LASF138
+ 557 039e 28 .sleb128 40
+ 558 039f 07 .uleb128 0x7
+ 559 03a0 00000000 .long .LASF139
+ 560 03a4 29 .sleb128 41
+ 561 03a5 07 .uleb128 0x7
+ 562 03a6 00000000 .long .LASF140
+ 563 03aa 2A .sleb128 42
+ 564 03ab 07 .uleb128 0x7
+ 565 03ac 00000000 .long .LASF141
+ 566 03b0 2B .sleb128 43
+ 567 03b1 07 .uleb128 0x7
+ 568 03b2 00000000 .long .LASF142
+ 569 03b6 2C .sleb128 44
+ 570 03b7 07 .uleb128 0x7
+ 571 03b8 00000000 .long .LASF143
+ 572 03bc 2D .sleb128 45
+ 573 03bd 07 .uleb128 0x7
+ 574 03be 00000000 .long .LASF144
+ 575 03c2 2E .sleb128 46
+ 576 03c3 07 .uleb128 0x7
+ 577 03c4 00000000 .long .LASF145
+ 578 03c8 2F .sleb128 47
+ 579 03c9 07 .uleb128 0x7
+ 580 03ca 00000000 .long .LASF146
+ 581 03ce 30 .sleb128 48
+ 582 03cf 07 .uleb128 0x7
+ 583 03d0 00000000 .long .LASF147
+ 584 03d4 31 .sleb128 49
+ 585 03d5 07 .uleb128 0x7
+ 586 03d6 00000000 .long .LASF148
+ 587 03da 32 .sleb128 50
+
GAS LISTING /tmp/cclL3imJ.s page 13
+
+
+ 588 03db 07 .uleb128 0x7
+ 589 03dc 00000000 .long .LASF149
+ 590 03e0 33 .sleb128 51
+ 591 03e1 07 .uleb128 0x7
+ 592 03e2 00000000 .long .LASF150
+ 593 03e6 34 .sleb128 52
+ 594 03e7 07 .uleb128 0x7
+ 595 03e8 00000000 .long .LASF151
+ 596 03ec 35 .sleb128 53
+ 597 03ed 07 .uleb128 0x7
+ 598 03ee 00000000 .long .LASF152
+ 599 03f2 36 .sleb128 54
+ 600 03f3 07 .uleb128 0x7
+ 601 03f4 00000000 .long .LASF153
+ 602 03f8 37 .sleb128 55
+ 603 03f9 07 .uleb128 0x7
+ 604 03fa 00000000 .long .LASF154
+ 605 03fe 38 .sleb128 56
+ 606 03ff 07 .uleb128 0x7
+ 607 0400 00000000 .long .LASF155
+ 608 0404 39 .sleb128 57
+ 609 0405 07 .uleb128 0x7
+ 610 0406 00000000 .long .LASF156
+ 611 040a 3A .sleb128 58
+ 612 040b 07 .uleb128 0x7
+ 613 040c 00000000 .long .LASF157
+ 614 0410 3A .sleb128 58
+ 615 0411 07 .uleb128 0x7
+ 616 0412 00000000 .long .LASF158
+ 617 0416 3B .sleb128 59
+ 618 0417 07 .uleb128 0x7
+ 619 0418 00000000 .long .LASF159
+ 620 041c 3C .sleb128 60
+ 621 041d 07 .uleb128 0x7
+ 622 041e 00000000 .long .LASF160
+ 623 0422 3D .sleb128 61
+ 624 0423 07 .uleb128 0x7
+ 625 0424 00000000 .long .LASF161
+ 626 0428 3E .sleb128 62
+ 627 0429 07 .uleb128 0x7
+ 628 042a 00000000 .long .LASF162
+ 629 042e 3F .sleb128 63
+ 630 042f 07 .uleb128 0x7
+ 631 0430 00000000 .long .LASF163
+ 632 0434 C000 .sleb128 64
+ 633 0436 07 .uleb128 0x7
+ 634 0437 00000000 .long .LASF164
+ 635 043b C100 .sleb128 65
+ 636 043d 07 .uleb128 0x7
+ 637 043e 00000000 .long .LASF165
+ 638 0442 C200 .sleb128 66
+ 639 0444 07 .uleb128 0x7
+ 640 0445 00000000 .long .LASF166
+ 641 0449 C300 .sleb128 67
+ 642 044b 07 .uleb128 0x7
+ 643 044c 00000000 .long .LASF167
+ 644 0450 C400 .sleb128 68
+
GAS LISTING /tmp/cclL3imJ.s page 14
+
+
+ 645 0452 00 .byte 0x0
+ 646 0453 08 .uleb128 0x8
+ 647 0454 00000000 .long .LASF168
+ 648 0458 04 .byte 0x4
+ 649 0459 04 .byte 0x4
+ 650 045a 0A01 .value 0x10a
+ 651 045c 52050000 .long 0x552
+ 652 0460 07 .uleb128 0x7
+ 653 0461 00000000 .long .LASF169
+ 654 0465 00 .sleb128 0
+ 655 0466 07 .uleb128 0x7
+ 656 0467 00000000 .long .LASF170
+ 657 046b 3D .sleb128 61
+ 658 046c 07 .uleb128 0x7
+ 659 046d 00000000 .long .LASF171
+ 660 0471 3E .sleb128 62
+ 661 0472 07 .uleb128 0x7
+ 662 0473 00000000 .long .LASF172
+ 663 0477 3F .sleb128 63
+ 664 0478 07 .uleb128 0x7
+ 665 0479 00000000 .long .LASF173
+ 666 047d C000 .sleb128 64
+ 667 047f 07 .uleb128 0x7
+ 668 0480 00000000 .long .LASF174
+ 669 0484 C100 .sleb128 65
+ 670 0486 07 .uleb128 0x7
+ 671 0487 00000000 .long .LASF175
+ 672 048b C200 .sleb128 66
+ 673 048d 07 .uleb128 0x7
+ 674 048e 00000000 .long .LASF176
+ 675 0492 C300 .sleb128 67
+ 676 0494 07 .uleb128 0x7
+ 677 0495 00000000 .long .LASF177
+ 678 0499 C400 .sleb128 68
+ 679 049b 07 .uleb128 0x7
+ 680 049c 00000000 .long .LASF178
+ 681 04a0 C500 .sleb128 69
+ 682 04a2 07 .uleb128 0x7
+ 683 04a3 00000000 .long .LASF179
+ 684 04a7 C600 .sleb128 70
+ 685 04a9 07 .uleb128 0x7
+ 686 04aa 00000000 .long .LASF180
+ 687 04ae C700 .sleb128 71
+ 688 04b0 07 .uleb128 0x7
+ 689 04b1 00000000 .long .LASF181
+ 690 04b5 C800 .sleb128 72
+ 691 04b7 07 .uleb128 0x7
+ 692 04b8 00000000 .long .LASF182
+ 693 04bc C900 .sleb128 73
+ 694 04be 07 .uleb128 0x7
+ 695 04bf 00000000 .long .LASF183
+ 696 04c3 CA00 .sleb128 74
+ 697 04c5 07 .uleb128 0x7
+ 698 04c6 00000000 .long .LASF184
+ 699 04ca CB00 .sleb128 75
+ 700 04cc 07 .uleb128 0x7
+ 701 04cd 00000000 .long .LASF185
+
GAS LISTING /tmp/cclL3imJ.s page 15
+
+
+ 702 04d1 CC00 .sleb128 76
+ 703 04d3 07 .uleb128 0x7
+ 704 04d4 00000000 .long .LASF186
+ 705 04d8 CD00 .sleb128 77
+ 706 04da 07 .uleb128 0x7
+ 707 04db 00000000 .long .LASF187
+ 708 04df CE00 .sleb128 78
+ 709 04e1 07 .uleb128 0x7
+ 710 04e2 00000000 .long .LASF188
+ 711 04e6 CF00 .sleb128 79
+ 712 04e8 07 .uleb128 0x7
+ 713 04e9 00000000 .long .LASF189
+ 714 04ed D000 .sleb128 80
+ 715 04ef 07 .uleb128 0x7
+ 716 04f0 00000000 .long .LASF190
+ 717 04f4 D100 .sleb128 81
+ 718 04f6 07 .uleb128 0x7
+ 719 04f7 00000000 .long .LASF191
+ 720 04fb D100 .sleb128 81
+ 721 04fd 07 .uleb128 0x7
+ 722 04fe 00000000 .long .LASF192
+ 723 0502 D200 .sleb128 82
+ 724 0504 07 .uleb128 0x7
+ 725 0505 00000000 .long .LASF193
+ 726 0509 D300 .sleb128 83
+ 727 050b 07 .uleb128 0x7
+ 728 050c 00000000 .long .LASF194
+ 729 0510 D400 .sleb128 84
+ 730 0512 07 .uleb128 0x7
+ 731 0513 00000000 .long .LASF195
+ 732 0517 D500 .sleb128 85
+ 733 0519 07 .uleb128 0x7
+ 734 051a 00000000 .long .LASF196
+ 735 051e D600 .sleb128 86
+ 736 0520 07 .uleb128 0x7
+ 737 0521 00000000 .long .LASF197
+ 738 0525 D700 .sleb128 87
+ 739 0527 07 .uleb128 0x7
+ 740 0528 00000000 .long .LASF198
+ 741 052c D800 .sleb128 88
+ 742 052e 07 .uleb128 0x7
+ 743 052f 00000000 .long .LASF199
+ 744 0533 D900 .sleb128 89
+ 745 0535 07 .uleb128 0x7
+ 746 0536 00000000 .long .LASF200
+ 747 053a DA00 .sleb128 90
+ 748 053c 07 .uleb128 0x7
+ 749 053d 00000000 .long .LASF201
+ 750 0541 DB00 .sleb128 91
+ 751 0543 07 .uleb128 0x7
+ 752 0544 00000000 .long .LASF202
+ 753 0548 DC00 .sleb128 92
+ 754 054a 07 .uleb128 0x7
+ 755 054b 00000000 .long .LASF203
+ 756 054f DD00 .sleb128 93
+ 757 0551 00 .byte 0x0
+ 758 0552 08 .uleb128 0x8
+
GAS LISTING /tmp/cclL3imJ.s page 16
+
+
+ 759 0553 00000000 .long .LASF204
+ 760 0557 04 .byte 0x4
+ 761 0558 04 .byte 0x4
+ 762 0559 3401 .value 0x134
+ 763 055b 92060000 .long 0x692
+ 764 055f 07 .uleb128 0x7
+ 765 0560 00000000 .long .LASF205
+ 766 0564 00 .sleb128 0
+ 767 0565 07 .uleb128 0x7
+ 768 0566 00000000 .long .LASF206
+ 769 056a 01 .sleb128 1
+ 770 056b 07 .uleb128 0x7
+ 771 056c 00000000 .long .LASF207
+ 772 0570 02 .sleb128 2
+ 773 0571 07 .uleb128 0x7
+ 774 0572 00000000 .long .LASF208
+ 775 0576 03 .sleb128 3
+ 776 0577 07 .uleb128 0x7
+ 777 0578 00000000 .long .LASF209
+ 778 057c 04 .sleb128 4
+ 779 057d 07 .uleb128 0x7
+ 780 057e 00000000 .long .LASF210
+ 781 0582 05 .sleb128 5
+ 782 0583 07 .uleb128 0x7
+ 783 0584 00000000 .long .LASF211
+ 784 0588 06 .sleb128 6
+ 785 0589 07 .uleb128 0x7
+ 786 058a 00000000 .long .LASF212
+ 787 058e 07 .sleb128 7
+ 788 058f 07 .uleb128 0x7
+ 789 0590 00000000 .long .LASF213
+ 790 0594 08 .sleb128 8
+ 791 0595 07 .uleb128 0x7
+ 792 0596 00000000 .long .LASF214
+ 793 059a 09 .sleb128 9
+ 794 059b 07 .uleb128 0x7
+ 795 059c 00000000 .long .LASF215
+ 796 05a0 0A .sleb128 10
+ 797 05a1 07 .uleb128 0x7
+ 798 05a2 00000000 .long .LASF216
+ 799 05a6 0B .sleb128 11
+ 800 05a7 07 .uleb128 0x7
+ 801 05a8 00000000 .long .LASF217
+ 802 05ac 0C .sleb128 12
+ 803 05ad 07 .uleb128 0x7
+ 804 05ae 00000000 .long .LASF218
+ 805 05b2 0D .sleb128 13
+ 806 05b3 07 .uleb128 0x7
+ 807 05b4 00000000 .long .LASF219
+ 808 05b8 0E .sleb128 14
+ 809 05b9 07 .uleb128 0x7
+ 810 05ba 00000000 .long .LASF220
+ 811 05be 0F .sleb128 15
+ 812 05bf 07 .uleb128 0x7
+ 813 05c0 00000000 .long .LASF221
+ 814 05c4 10 .sleb128 16
+ 815 05c5 07 .uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s page 17
+
+
+ 816 05c6 00000000 .long .LASF222
+ 817 05ca 11 .sleb128 17
+ 818 05cb 07 .uleb128 0x7
+ 819 05cc 00000000 .long .LASF223
+ 820 05d0 12 .sleb128 18
+ 821 05d1 07 .uleb128 0x7
+ 822 05d2 00000000 .long .LASF224
+ 823 05d6 13 .sleb128 19
+ 824 05d7 07 .uleb128 0x7
+ 825 05d8 00000000 .long .LASF225
+ 826 05dc 14 .sleb128 20
+ 827 05dd 07 .uleb128 0x7
+ 828 05de 00000000 .long .LASF226
+ 829 05e2 15 .sleb128 21
+ 830 05e3 07 .uleb128 0x7
+ 831 05e4 00000000 .long .LASF227
+ 832 05e8 16 .sleb128 22
+ 833 05e9 07 .uleb128 0x7
+ 834 05ea 00000000 .long .LASF228
+ 835 05ee 17 .sleb128 23
+ 836 05ef 07 .uleb128 0x7
+ 837 05f0 00000000 .long .LASF229
+ 838 05f4 18 .sleb128 24
+ 839 05f5 07 .uleb128 0x7
+ 840 05f6 00000000 .long .LASF230
+ 841 05fa 19 .sleb128 25
+ 842 05fb 07 .uleb128 0x7
+ 843 05fc 00000000 .long .LASF231
+ 844 0600 1A .sleb128 26
+ 845 0601 07 .uleb128 0x7
+ 846 0602 00000000 .long .LASF232
+ 847 0606 1B .sleb128 27
+ 848 0607 07 .uleb128 0x7
+ 849 0608 00000000 .long .LASF233
+ 850 060c 1C .sleb128 28
+ 851 060d 07 .uleb128 0x7
+ 852 060e 00000000 .long .LASF234
+ 853 0612 1D .sleb128 29
+ 854 0613 07 .uleb128 0x7
+ 855 0614 00000000 .long .LASF235
+ 856 0618 1E .sleb128 30
+ 857 0619 07 .uleb128 0x7
+ 858 061a 00000000 .long .LASF236
+ 859 061e 1F .sleb128 31
+ 860 061f 07 .uleb128 0x7
+ 861 0620 00000000 .long .LASF237
+ 862 0624 20 .sleb128 32
+ 863 0625 07 .uleb128 0x7
+ 864 0626 00000000 .long .LASF238
+ 865 062a 21 .sleb128 33
+ 866 062b 07 .uleb128 0x7
+ 867 062c 00000000 .long .LASF239
+ 868 0630 22 .sleb128 34
+ 869 0631 07 .uleb128 0x7
+ 870 0632 00000000 .long .LASF240
+ 871 0636 23 .sleb128 35
+ 872 0637 07 .uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s page 18
+
+
+ 873 0638 00000000 .long .LASF241
+ 874 063c 24 .sleb128 36
+ 875 063d 07 .uleb128 0x7
+ 876 063e 00000000 .long .LASF242
+ 877 0642 25 .sleb128 37
+ 878 0643 07 .uleb128 0x7
+ 879 0644 00000000 .long .LASF243
+ 880 0648 26 .sleb128 38
+ 881 0649 07 .uleb128 0x7
+ 882 064a 00000000 .long .LASF244
+ 883 064e 27 .sleb128 39
+ 884 064f 07 .uleb128 0x7
+ 885 0650 00000000 .long .LASF245
+ 886 0654 28 .sleb128 40
+ 887 0655 07 .uleb128 0x7
+ 888 0656 00000000 .long .LASF246
+ 889 065a 29 .sleb128 41
+ 890 065b 07 .uleb128 0x7
+ 891 065c 00000000 .long .LASF247
+ 892 0660 29 .sleb128 41
+ 893 0661 07 .uleb128 0x7
+ 894 0662 00000000 .long .LASF248
+ 895 0666 2A .sleb128 42
+ 896 0667 07 .uleb128 0x7
+ 897 0668 00000000 .long .LASF249
+ 898 066c 2B .sleb128 43
+ 899 066d 07 .uleb128 0x7
+ 900 066e 00000000 .long .LASF250
+ 901 0672 2C .sleb128 44
+ 902 0673 07 .uleb128 0x7
+ 903 0674 00000000 .long .LASF251
+ 904 0678 2D .sleb128 45
+ 905 0679 07 .uleb128 0x7
+ 906 067a 00000000 .long .LASF252
+ 907 067e 2E .sleb128 46
+ 908 067f 07 .uleb128 0x7
+ 909 0680 00000000 .long .LASF253
+ 910 0684 2F .sleb128 47
+ 911 0685 07 .uleb128 0x7
+ 912 0686 00000000 .long .LASF254
+ 913 068a 30 .sleb128 48
+ 914 068b 07 .uleb128 0x7
+ 915 068c 00000000 .long .LASF255
+ 916 0690 31 .sleb128 49
+ 917 0691 00 .byte 0x0
+ 918 0692 09 .uleb128 0x9
+ 919 0693 01 .byte 0x1
+ 920 0694 00000000 .long .LASF261
+ 921 0698 01 .byte 0x1
+ 922 0699 2A .byte 0x2a
+ 923 069a 01 .byte 0x1
+ 924 069b 70000000 .long 0x70
+ 925 069f 00000000 .quad .LFB15
+ 925 00000000
+ 926 06a7 00000000 .quad .LFE15
+ 926 00000000
+ 927 06af 00000000 .long .LLST0
+
GAS LISTING /tmp/cclL3imJ.s page 19
+
+
+ 928 06b3 01070000 .long 0x701
+ 929 06b7 0A .uleb128 0xa
+ 930 06b8 00000000 .long .LASF262
+ 931 06bc 01 .byte 0x1
+ 932 06bd 0B .uleb128 0xb
+ 933 06be 00000000 .long .LASF263
+ 934 06c2 01 .byte 0x1
+ 935 06c3 2A .byte 0x2a
+ 936 06c4 01070000 .long 0x701
+ 937 06c8 02 .byte 0x2
+ 938 06c9 91 .byte 0x91
+ 939 06ca 58 .sleb128 -40
+ 940 06cb 0C .uleb128 0xc
+ 941 06cc 726300 .string "rc"
+ 942 06cf 01 .byte 0x1
+ 943 06d0 2C .byte 0x2c
+ 944 06d1 70000000 .long 0x70
+ 945 06d5 02 .byte 0x2
+ 946 06d6 91 .byte 0x91
+ 947 06d7 6C .sleb128 -20
+ 948 06d8 0D .uleb128 0xd
+ 949 06d9 00000000 .long .LASF256
+ 950 06dd 1D070000 .long 0x71d
+ 951 06e1 01 .byte 0x1
+ 952 06e2 09 .byte 0x9
+ 953 06e3 03 .byte 0x3
+ 954 06e4 00000000 .quad __PRETTY_FUNCTION__.2438
+ 954 00000000
+ 955 06ec 0D .uleb128 0xd
+ 956 06ed 00000000 .long .LASF257
+ 957 06f1 22070000 .long 0x722
+ 958 06f5 01 .byte 0x1
+ 959 06f6 09 .byte 0x9
+ 960 06f7 03 .byte 0x3
+ 961 06f8 00000000 .quad __func__.2439
+ 961 00000000
+ 962 0700 00 .byte 0x0
+ 963 0701 0E .uleb128 0xe
+ 964 0702 08 .byte 0x8
+ 965 0703 07070000 .long 0x707
+ 966 0707 0E .uleb128 0xe
+ 967 0708 08 .byte 0x8
+ 968 0709 B7060000 .long 0x6b7
+ 969 070d 0F .uleb128 0xf
+ 970 070e 7E000000 .long 0x7e
+ 971 0712 1D070000 .long 0x71d
+ 972 0716 10 .uleb128 0x10
+ 973 0717 7B000000 .long 0x7b
+ 974 071b 1A .byte 0x1a
+ 975 071c 00 .byte 0x0
+ 976 071d 11 .uleb128 0x11
+ 977 071e 0D070000 .long 0x70d
+ 978 0722 11 .uleb128 0x11
+ 979 0723 0D070000 .long 0x70d
+ 980 0727 00 .byte 0x0
+ 981 .section .debug_abbrev
+ 982 0000 01 .uleb128 0x1
+
GAS LISTING /tmp/cclL3imJ.s page 20
+
+
+ 983 0001 11 .uleb128 0x11
+ 984 0002 01 .byte 0x1
+ 985 0003 25 .uleb128 0x25
+ 986 0004 0E .uleb128 0xe
+ 987 0005 13 .uleb128 0x13
+ 988 0006 0B .uleb128 0xb
+ 989 0007 03 .uleb128 0x3
+ 990 0008 0E .uleb128 0xe
+ 991 0009 1B .uleb128 0x1b
+ 992 000a 0E .uleb128 0xe
+ 993 000b 11 .uleb128 0x11
+ 994 000c 01 .uleb128 0x1
+ 995 000d 12 .uleb128 0x12
+ 996 000e 01 .uleb128 0x1
+ 997 000f 10 .uleb128 0x10
+ 998 0010 06 .uleb128 0x6
+ 999 0011 00 .byte 0x0
+ 1000 0012 00 .byte 0x0
+ 1001 0013 02 .uleb128 0x2
+ 1002 0014 24 .uleb128 0x24
+ 1003 0015 00 .byte 0x0
+ 1004 0016 0B .uleb128 0xb
+ 1005 0017 0B .uleb128 0xb
+ 1006 0018 3E .uleb128 0x3e
+ 1007 0019 0B .uleb128 0xb
+ 1008 001a 03 .uleb128 0x3
+ 1009 001b 0E .uleb128 0xe
+ 1010 001c 00 .byte 0x0
+ 1011 001d 00 .byte 0x0
+ 1012 001e 03 .uleb128 0x3
+ 1013 001f 24 .uleb128 0x24
+ 1014 0020 00 .byte 0x0
+ 1015 0021 0B .uleb128 0xb
+ 1016 0022 0B .uleb128 0xb
+ 1017 0023 3E .uleb128 0x3e
+ 1018 0024 0B .uleb128 0xb
+ 1019 0025 03 .uleb128 0x3
+ 1020 0026 08 .uleb128 0x8
+ 1021 0027 00 .byte 0x0
+ 1022 0028 00 .byte 0x0
+ 1023 0029 04 .uleb128 0x4
+ 1024 002a 16 .uleb128 0x16
+ 1025 002b 00 .byte 0x0
+ 1026 002c 03 .uleb128 0x3
+ 1027 002d 0E .uleb128 0xe
+ 1028 002e 3A .uleb128 0x3a
+ 1029 002f 0B .uleb128 0xb
+ 1030 0030 3B .uleb128 0x3b
+ 1031 0031 0B .uleb128 0xb
+ 1032 0032 49 .uleb128 0x49
+ 1033 0033 13 .uleb128 0x13
+ 1034 0034 00 .byte 0x0
+ 1035 0035 00 .byte 0x0
+ 1036 0036 05 .uleb128 0x5
+ 1037 0037 24 .uleb128 0x24
+ 1038 0038 00 .byte 0x0
+ 1039 0039 0B .uleb128 0xb
+
GAS LISTING /tmp/cclL3imJ.s page 21
+
+
+ 1040 003a 0B .uleb128 0xb
+ 1041 003b 3E .uleb128 0x3e
+ 1042 003c 0B .uleb128 0xb
+ 1043 003d 00 .byte 0x0
+ 1044 003e 00 .byte 0x0
+ 1045 003f 06 .uleb128 0x6
+ 1046 0040 04 .uleb128 0x4
+ 1047 0041 01 .byte 0x1
+ 1048 0042 03 .uleb128 0x3
+ 1049 0043 0E .uleb128 0xe
+ 1050 0044 0B .uleb128 0xb
+ 1051 0045 0B .uleb128 0xb
+ 1052 0046 3A .uleb128 0x3a
+ 1053 0047 0B .uleb128 0xb
+ 1054 0048 3B .uleb128 0x3b
+ 1055 0049 0B .uleb128 0xb
+ 1056 004a 01 .uleb128 0x1
+ 1057 004b 13 .uleb128 0x13
+ 1058 004c 00 .byte 0x0
+ 1059 004d 00 .byte 0x0
+ 1060 004e 07 .uleb128 0x7
+ 1061 004f 28 .uleb128 0x28
+ 1062 0050 00 .byte 0x0
+ 1063 0051 03 .uleb128 0x3
+ 1064 0052 0E .uleb128 0xe
+ 1065 0053 1C .uleb128 0x1c
+ 1066 0054 0D .uleb128 0xd
+ 1067 0055 00 .byte 0x0
+ 1068 0056 00 .byte 0x0
+ 1069 0057 08 .uleb128 0x8
+ 1070 0058 04 .uleb128 0x4
+ 1071 0059 01 .byte 0x1
+ 1072 005a 03 .uleb128 0x3
+ 1073 005b 0E .uleb128 0xe
+ 1074 005c 0B .uleb128 0xb
+ 1075 005d 0B .uleb128 0xb
+ 1076 005e 3A .uleb128 0x3a
+ 1077 005f 0B .uleb128 0xb
+ 1078 0060 3B .uleb128 0x3b
+ 1079 0061 05 .uleb128 0x5
+ 1080 0062 01 .uleb128 0x1
+ 1081 0063 13 .uleb128 0x13
+ 1082 0064 00 .byte 0x0
+ 1083 0065 00 .byte 0x0
+ 1084 0066 09 .uleb128 0x9
+ 1085 0067 2E .uleb128 0x2e
+ 1086 0068 01 .byte 0x1
+ 1087 0069 3F .uleb128 0x3f
+ 1088 006a 0C .uleb128 0xc
+ 1089 006b 03 .uleb128 0x3
+ 1090 006c 0E .uleb128 0xe
+ 1091 006d 3A .uleb128 0x3a
+ 1092 006e 0B .uleb128 0xb
+ 1093 006f 3B .uleb128 0x3b
+ 1094 0070 0B .uleb128 0xb
+ 1095 0071 27 .uleb128 0x27
+ 1096 0072 0C .uleb128 0xc
+
GAS LISTING /tmp/cclL3imJ.s page 22
+
+
+ 1097 0073 49 .uleb128 0x49
+ 1098 0074 13 .uleb128 0x13
+ 1099 0075 11 .uleb128 0x11
+ 1100 0076 01 .uleb128 0x1
+ 1101 0077 12 .uleb128 0x12
+ 1102 0078 01 .uleb128 0x1
+ 1103 0079 40 .uleb128 0x40
+ 1104 007a 06 .uleb128 0x6
+ 1105 007b 01 .uleb128 0x1
+ 1106 007c 13 .uleb128 0x13
+ 1107 007d 00 .byte 0x0
+ 1108 007e 00 .byte 0x0
+ 1109 007f 0A .uleb128 0xa
+ 1110 0080 13 .uleb128 0x13
+ 1111 0081 00 .byte 0x0
+ 1112 0082 03 .uleb128 0x3
+ 1113 0083 0E .uleb128 0xe
+ 1114 0084 3C .uleb128 0x3c
+ 1115 0085 0C .uleb128 0xc
+ 1116 0086 00 .byte 0x0
+ 1117 0087 00 .byte 0x0
+ 1118 0088 0B .uleb128 0xb
+ 1119 0089 05 .uleb128 0x5
+ 1120 008a 00 .byte 0x0
+ 1121 008b 03 .uleb128 0x3
+ 1122 008c 0E .uleb128 0xe
+ 1123 008d 3A .uleb128 0x3a
+ 1124 008e 0B .uleb128 0xb
+ 1125 008f 3B .uleb128 0x3b
+ 1126 0090 0B .uleb128 0xb
+ 1127 0091 49 .uleb128 0x49
+ 1128 0092 13 .uleb128 0x13
+ 1129 0093 02 .uleb128 0x2
+ 1130 0094 0A .uleb128 0xa
+ 1131 0095 00 .byte 0x0
+ 1132 0096 00 .byte 0x0
+ 1133 0097 0C .uleb128 0xc
+ 1134 0098 34 .uleb128 0x34
+ 1135 0099 00 .byte 0x0
+ 1136 009a 03 .uleb128 0x3
+ 1137 009b 08 .uleb128 0x8
+ 1138 009c 3A .uleb128 0x3a
+ 1139 009d 0B .uleb128 0xb
+ 1140 009e 3B .uleb128 0x3b
+ 1141 009f 0B .uleb128 0xb
+ 1142 00a0 49 .uleb128 0x49
+ 1143 00a1 13 .uleb128 0x13
+ 1144 00a2 02 .uleb128 0x2
+ 1145 00a3 0A .uleb128 0xa
+ 1146 00a4 00 .byte 0x0
+ 1147 00a5 00 .byte 0x0
+ 1148 00a6 0D .uleb128 0xd
+ 1149 00a7 34 .uleb128 0x34
+ 1150 00a8 00 .byte 0x0
+ 1151 00a9 03 .uleb128 0x3
+ 1152 00aa 0E .uleb128 0xe
+ 1153 00ab 49 .uleb128 0x49
+
GAS LISTING /tmp/cclL3imJ.s page 23
+
+
+ 1154 00ac 13 .uleb128 0x13
+ 1155 00ad 34 .uleb128 0x34
+ 1156 00ae 0C .uleb128 0xc
+ 1157 00af 02 .uleb128 0x2
+ 1158 00b0 0A .uleb128 0xa
+ 1159 00b1 00 .byte 0x0
+ 1160 00b2 00 .byte 0x0
+ 1161 00b3 0E .uleb128 0xe
+ 1162 00b4 0F .uleb128 0xf
+ 1163 00b5 00 .byte 0x0
+ 1164 00b6 0B .uleb128 0xb
+ 1165 00b7 0B .uleb128 0xb
+ 1166 00b8 49 .uleb128 0x49
+ 1167 00b9 13 .uleb128 0x13
+ 1168 00ba 00 .byte 0x0
+ 1169 00bb 00 .byte 0x0
+ 1170 00bc 0F .uleb128 0xf
+ 1171 00bd 01 .uleb128 0x1
+ 1172 00be 01 .byte 0x1
+ 1173 00bf 49 .uleb128 0x49
+ 1174 00c0 13 .uleb128 0x13
+ 1175 00c1 01 .uleb128 0x1
+ 1176 00c2 13 .uleb128 0x13
+ 1177 00c3 00 .byte 0x0
+ 1178 00c4 00 .byte 0x0
+ 1179 00c5 10 .uleb128 0x10
+ 1180 00c6 21 .uleb128 0x21
+ 1181 00c7 00 .byte 0x0
+ 1182 00c8 49 .uleb128 0x49
+ 1183 00c9 13 .uleb128 0x13
+ 1184 00ca 2F .uleb128 0x2f
+ 1185 00cb 0B .uleb128 0xb
+ 1186 00cc 00 .byte 0x0
+ 1187 00cd 00 .byte 0x0
+ 1188 00ce 11 .uleb128 0x11
+ 1189 00cf 26 .uleb128 0x26
+ 1190 00d0 00 .byte 0x0
+ 1191 00d1 49 .uleb128 0x49
+ 1192 00d2 13 .uleb128 0x13
+ 1193 00d3 00 .byte 0x0
+ 1194 00d4 00 .byte 0x0
+ 1195 00d5 00 .byte 0x0
+ 1196 .section .debug_pubnames,"", at progbits
+ 1197 0000 2D000000 .long 0x2d
+ 1198 0004 0200 .value 0x2
+ 1199 0006 00000000 .long .Ldebug_info0
+ 1200 000a 28070000 .long 0x728
+ 1201 000e 92060000 .long 0x692
+ 1202 0012 4B4E756C .string "KNullBlockCipherVecRegMake"
+ 1202 6C426C6F
+ 1202 636B4369
+ 1202 70686572
+ 1202 56656352
+ 1203 002d 00000000 .long 0x0
+ 1204 .section .debug_aranges,"", at progbits
+ 1205 0000 2C000000 .long 0x2c
+ 1206 0004 0200 .value 0x2
+
GAS LISTING /tmp/cclL3imJ.s page 24
+
+
+ 1207 0006 00000000 .long .Ldebug_info0
+ 1208 000a 08 .byte 0x8
+ 1209 000b 00 .byte 0x0
+ 1210 000c 0000 .value 0x0
+ 1211 000e 0000 .value 0x0
+ 1212 0010 00000000 .quad .Ltext0
+ 1212 00000000
+ 1213 0018 65000000 .quad .Letext0-.Ltext0
+ 1213 00000000
+ 1214 0020 00000000 .quad 0x0
+ 1214 00000000
+ 1215 0028 00000000 .quad 0x0
+ 1215 00000000
+ 1216 .section .debug_str,"MS", at progbits,1
+ 1217 .LASF184:
+ 1218 0000 72635461 .string "rcTag"
+ 1218 6700
+ 1219 .LASF30:
+ 1220 0006 72635646 .string "rcVFS"
+ 1220 5300
+ 1221 .LASF234:
+ 1222 000c 7263556E .string "rcUnauthorized"
+ 1222 61757468
+ 1222 6F72697A
+ 1222 656400
+ 1223 .LASF258:
+ 1224 001b 474E5520 .string "GNU C 4.4.2"
+ 1224 4320342E
+ 1224 342E3200
+ 1225 .LASF218:
+ 1226 0027 7263496E .string "rcInconsistent"
+ 1226 636F6E73
+ 1226 69737465
+ 1226 6E7400
+ 1227 .LASF19:
+ 1228 0036 72634442 .string "rcDB"
+ 1228 00
+ 1229 .LASF128:
+ 1230 003b 7263436F .string "rcCopying"
+ 1230 7079696E
+ 1230 6700
+ 1231 .LASF131:
+ 1232 0045 7263506F .string "rcPositioning"
+ 1232 73697469
+ 1232 6F6E696E
+ 1232 6700
+ 1233 .LASF226:
+ 1234 0053 72634578 .string "rcExcessive"
+ 1234 63657373
+ 1234 69766500
+ 1235 .LASF222:
+ 1236 005f 72634361 .string "rcCanceled"
+ 1236 6E63656C
+ 1236 656400
+ 1237 .LASF156:
+ 1238 006a 72634C61 .string "rcLastContext_v1_0"
+ 1238 7374436F
+
GAS LISTING /tmp/cclL3imJ.s page 25
+
+
+ 1238 6E746578
+ 1238 745F7631
+ 1238 5F3000
+ 1239 .LASF167:
+ 1240 007d 72634C61 .string "rcLastContext_v1_1"
+ 1240 7374436F
+ 1240 6E746578
+ 1240 745F7631
+ 1240 5F3100
+ 1241 .LASF90:
+ 1242 0090 7263456E .string "rcEncryptionKey"
+ 1242 63727970
+ 1242 74696F6E
+ 1242 4B657900
+ 1243 .LASF97:
+ 1244 00a0 5243436F .string "RCContext"
+ 1244 6E746578
+ 1244 7400
+ 1245 .LASF92:
+ 1246 00aa 7263436D .string "rcCmd"
+ 1246 6400
+ 1247 .LASF242:
+ 1248 00b0 72634475 .string "rcDuplicate"
+ 1248 706C6963
+ 1248 61746500
+ 1249 .LASF202:
+ 1250 00bc 72635265 .string "rcRefcount"
+ 1250 66636F75
+ 1250 6E7400
+ 1251 .LASF91:
+ 1252 00c7 7263526E .string "rcRng"
+ 1252 6700
+ 1253 .LASF34:
+ 1254 00cd 72634E6F .string "rcNoTarg"
+ 1254 54617267
+ 1254 00
+ 1255 .LASF204:
+ 1256 00d6 52435374 .string "RCState"
+ 1256 61746500
+ 1257 .LASF5:
+ 1258 00de 756E7369 .string "unsigned int"
+ 1258 676E6564
+ 1258 20696E74
+ 1258 00
+ 1259 .LASF89:
+ 1260 00eb 72635072 .string "rcProduction"
+ 1260 6F647563
+ 1260 74696F6E
+ 1260 00
+ 1261 .LASF69:
+ 1262 00f8 72635061 .string "rcPagemap"
+ 1262 67656D61
+ 1262 7000
+ 1263 .LASF185:
+ 1264 0102 72635265 .string "rcResources"
+ 1264 736F7572
+ 1264 63657300
+
GAS LISTING /tmp/cclL3imJ.s page 26
+
+
+ 1265 .LASF50:
+ 1266 010e 7263586D .string "rcXmlDoc"
+ 1266 6C446F63
+ 1266 00
+ 1267 .LASF37:
+ 1268 0117 7263546F .string "rcTocEntry"
+ 1268 63456E74
+ 1268 727900
+ 1269 .LASF114:
+ 1270 0122 72635265 .string "rcRemoving"
+ 1270 6D6F7669
+ 1270 6E6700
+ 1271 .LASF192:
+ 1272 012d 72634D6F .string "rcMode"
+ 1272 646500
+ 1273 .LASF119:
+ 1274 0134 7263436C .string "rcClosing"
+ 1274 6F73696E
+ 1274 6700
+ 1275 .LASF72:
+ 1276 013e 72635175 .string "rcQueue"
+ 1276 65756500
+ 1277 .LASF120:
+ 1278 0146 72635265 .string "rcResizing"
+ 1278 73697A69
+ 1278 6E6700
+ 1279 .LASF171:
+ 1280 0151 72635365 .string "rcSelf"
+ 1280 6C6600
+ 1281 .LASF214:
+ 1282 0158 72634465 .string "rcDestroyed"
+ 1282 7374726F
+ 1282 79656400
+ 1283 .LASF162:
+ 1284 0164 7263496E .string "rcInitializing"
+ 1284 69746961
+ 1284 6C697A69
+ 1284 6E6700
+ 1285 .LASF168:
+ 1286 0173 52434F62 .string "RCObject"
+ 1286 6A656374
+ 1286 00
+ 1287 .LASF146:
+ 1288 017c 72634174 .string "rcAttaching"
+ 1288 74616368
+ 1288 696E6700
+ 1289 .LASF219:
+ 1290 0188 72634275 .string "rcBusy"
+ 1290 737900
+ 1291 .LASF74:
+ 1292 018f 72635363 .string "rcSchema"
+ 1292 68656D61
+ 1292 00
+ 1293 .LASF138:
+ 1294 0198 72634875 .string "rcHuffmanCoding"
+ 1294 66666D61
+ 1294 6E436F64
+
GAS LISTING /tmp/cclL3imJ.s page 27
+
+
+ 1294 696E6700
+ 1295 .LASF123:
+ 1296 01a8 7263436F .string "rcCommitting"
+ 1296 6D6D6974
+ 1296 74696E67
+ 1296 00
+ 1297 .LASF75:
+ 1298 01b5 72635365 .string "rcSemaphore"
+ 1298 6D617068
+ 1298 6F726500
+ 1299 .LASF232:
+ 1300 01c1 72634465 .string "rcDetached"
+ 1300 74616368
+ 1300 656400
+ 1301 .LASF188:
+ 1302 01cc 7263526F .string "rcRow"
+ 1302 7700
+ 1303 .LASF239:
+ 1304 01d2 7263546F .string "rcTooShort"
+ 1304 6F53686F
+ 1304 727400
+ 1305 .LASF15:
+ 1306 01dd 72634646 .string "rcFF"
+ 1306 00
+ 1307 .LASF16:
+ 1308 01e2 72634653 .string "rcFS"
+ 1308 00
+ 1309 .LASF250:
+ 1310 01e7 7263556E .string "rcUndefined"
+ 1310 64656669
+ 1310 6E656400
+ 1311 .LASF132:
+ 1312 01f3 72635061 .string "rcPacking"
+ 1312 636B696E
+ 1312 6700
+ 1313 .LASF216:
+ 1314 01fd 7263436F .string "rcCorrupt"
+ 1314 72727570
+ 1314 7400
+ 1315 .LASF7:
+ 1316 0207 75696E74 .string "uint32_t"
+ 1316 33325F74
+ 1316 00
+ 1317 .LASF133:
+ 1318 0210 7263556E .string "rcUnpacking"
+ 1318 7061636B
+ 1318 696E6700
+ 1319 .LASF51:
+ 1320 021c 72634669 .string "rcFile"
+ 1320 6C6500
+ 1321 .LASF39:
+ 1322 0223 72634174 .string "rcAttr"
+ 1322 747200
+ 1323 .LASF199:
+ 1324 022a 7263456E .string "rcEnvironment"
+ 1324 7669726F
+ 1324 6E6D656E
+
GAS LISTING /tmp/cclL3imJ.s page 28
+
+
+ 1324 7400
+ 1325 .LASF149:
+ 1326 0238 72634650 .string "rcFPCoding"
+ 1326 436F6469
+ 1326 6E6700
+ 1327 .LASF80:
+ 1328 0243 72635469 .string "rcTimeout"
+ 1328 6D656F75
+ 1328 7400
+ 1329 .LASF62:
+ 1330 024d 72634D44 .string "rcMD5SumFmt"
+ 1330 3553756D
+ 1330 466D7400
+ 1331 .LASF137:
+ 1332 0259 72634578 .string "rcExecuting"
+ 1332 65637574
+ 1332 696E6700
+ 1333 .LASF145:
+ 1334 0265 72635761 .string "rcWaiting"
+ 1334 6974696E
+ 1334 6700
+ 1335 .LASF176:
+ 1336 026f 7263466F .string "rcFormat"
+ 1336 726D6174
+ 1336 00
+ 1337 .LASF181:
+ 1338 0278 7263436F .string "rcConstraint"
+ 1338 6E737472
+ 1338 61696E74
+ 1338 00
+ 1339 .LASF22:
+ 1340 0285 7263584D .string "rcXML"
+ 1340 4C00
+ 1341 .LASF45:
+ 1342 028b 7263436F .string "rcCondition"
+ 1342 6E646974
+ 1342 696F6E00
+ 1343 .LASF205:
+ 1344 0297 72634E6F .string "rcNoErr"
+ 1344 45727200
+ 1345 .LASF42:
+ 1346 029f 72634275 .string "rcBuffer"
+ 1346 66666572
+ 1346 00
+ 1347 .LASF142:
+ 1348 02a8 72635061 .string "rcParsing"
+ 1348 7273696E
+ 1348 6700
+ 1349 .LASF41:
+ 1350 02b2 7263426C .string "rcBlob"
+ 1350 6F6200
+ 1351 .LASF240:
+ 1352 02b9 7263546F .string "rcTooLong"
+ 1352 6F4C6F6E
+ 1352 6700
+ 1353 .LASF24:
+ 1354 02c3 72634C61 .string "rcLastModule_v1_0"
+
GAS LISTING /tmp/cclL3imJ.s page 29
+
+
+ 1354 73744D6F
+ 1354 64756C65
+ 1354 5F76315F
+ 1354 3000
+ 1355 .LASF31:
+ 1356 02d5 72634C61 .string "rcLastModule_v1_1"
+ 1356 73744D6F
+ 1356 64756C65
+ 1356 5F76315F
+ 1356 3100
+ 1357 .LASF64:
+ 1358 02e7 72634D65 .string "rcMetadata"
+ 1358 74616461
+ 1358 746100
+ 1359 .LASF236:
+ 1360 02f2 72635772 .string "rcWriteonly"
+ 1360 6974656F
+ 1360 6E6C7900
+ 1361 .LASF115:
+ 1362 02fe 7263436C .string "rcClearing"
+ 1362 65617269
+ 1362 6E6700
+ 1363 .LASF55:
+ 1364 0309 7263466F .string "rcFormatter"
+ 1364 726D6174
+ 1364 74657200
+ 1365 .LASF248:
+ 1366 0315 72634F75 .string "rcOutoforder"
+ 1366 746F666F
+ 1366 72646572
+ 1366 00
+ 1367 .LASF70:
+ 1368 0322 72635061 .string "rcPath"
+ 1368 746800
+ 1369 .LASF189:
+ 1370 0329 72634C69 .string "rcLibrary"
+ 1370 62726172
+ 1370 7900
+ 1371 .LASF141:
+ 1372 0333 7263546F .string "rcTokenizing"
+ 1372 6B656E69
+ 1372 7A696E67
+ 1372 00
+ 1373 .LASF198:
+ 1374 0340 72634572 .string "rcError"
+ 1374 726F7200
+ 1375 .LASF18:
+ 1376 0348 72635846 .string "rcXF"
+ 1376 00
+ 1377 .LASF183:
+ 1378 034d 72634D65 .string "rcMessage"
+ 1378 73736167
+ 1378 6500
+ 1379 .LASF261:
+ 1380 0357 4B4E756C .string "KNullBlockCipherVecRegMake"
+ 1380 6C426C6F
+ 1380 636B4369
+
GAS LISTING /tmp/cclL3imJ.s page 30
+
+
+ 1380 70686572
+ 1380 56656352
+ 1381 .LASF237:
+ 1382 0372 72634E6F .string "rcNoPerm"
+ 1382 5065726D
+ 1382 00
+ 1383 .LASF54:
+ 1384 037b 72634675 .string "rcFunction"
+ 1384 6E637469
+ 1384 6F6E00
+ 1385 .LASF208:
+ 1386 0386 7263556E .string "rcUnsupported"
+ 1386 73757070
+ 1386 6F727465
+ 1386 6400
+ 1387 .LASF43:
+ 1388 0394 72634368 .string "rcChar"
+ 1388 617200
+ 1389 .LASF174:
+ 1390 039b 72634D65 .string "rcMemory"
+ 1390 6D6F7279
+ 1390 00
+ 1391 .LASF194:
+ 1392 03a4 72634372 .string "rcCrc"
+ 1392 6300
+ 1393 .LASF241:
+ 1394 03aa 7263546F .string "rcTooBig"
+ 1394 6F426967
+ 1394 00
+ 1395 .LASF179:
+ 1396 03b3 72634964 .string "rcId"
+ 1396 00
+ 1397 .LASF82:
+ 1398 03b8 72635472 .string "rcTree"
+ 1398 656500
+ 1399 .LASF253:
+ 1400 03bf 72634E6F .string "rcNotAvailable"
+ 1400 74417661
+ 1400 696C6162
+ 1400 6C6500
+ 1401 .LASF93:
+ 1402 03ce 72634461 .string "rcData"
+ 1402 746100
+ 1403 .LASF257:
+ 1404 03d5 5F5F6675 .string "__func__"
+ 1404 6E635F5F
+ 1404 00
+ 1405 .LASF254:
+ 1406 03de 72635772 .string "rcWrongType"
+ 1406 6F6E6754
+ 1406 79706500
+ 1407 .LASF56:
+ 1408 03ea 72634675 .string "rcFunctParam"
+ 1408 6E637450
+ 1408 6172616D
+ 1408 00
+ 1409 .LASF63:
+
GAS LISTING /tmp/cclL3imJ.s page 31
+
+
+ 1410 03f7 72634D65 .string "rcMemMap"
+ 1410 6D4D6170
+ 1410 00
+ 1411 .LASF9:
+ 1412 0400 63686172 .string "char"
+ 1412 00
+ 1413 .LASF211:
+ 1414 0405 7263416D .string "rcAmbiguous"
+ 1414 62696775
+ 1414 6F757300
+ 1415 .LASF244:
+ 1416 0411 72634967 .string "rcIgnored"
+ 1416 6E6F7265
+ 1416 6400
+ 1417 .LASF109:
+ 1418 041b 72635265 .string "rcRenaming"
+ 1418 6E616D69
+ 1418 6E6700
+ 1419 .LASF121:
+ 1420 0426 72635265 .string "rcReading"
+ 1420 6164696E
+ 1420 6700
+ 1421 .LASF58:
+ 1422 0430 7263496E .string "rcIndex"
+ 1422 64657800
+ 1423 .LASF104:
+ 1424 0438 72634C69 .string "rcListing"
+ 1424 7374696E
+ 1424 6700
+ 1425 .LASF178:
+ 1426 0442 7263496E .string "rcInterface"
+ 1426 74657266
+ 1426 61636500
+ 1427 .LASF107:
+ 1428 044e 72634C6F .string "rcLocking"
+ 1428 636B696E
+ 1428 6700
+ 1429 .LASF60:
+ 1430 0458 72634C6F .string "rcLock"
+ 1430 636B00
+ 1431 .LASF108:
+ 1432 045f 7263556E .string "rcUnlocking"
+ 1432 6C6F636B
+ 1432 696E6700
+ 1433 .LASF85:
+ 1434 046b 72635665 .string "rcVector"
+ 1434 63746F72
+ 1434 00
+ 1435 .LASF122:
+ 1436 0474 72635772 .string "rcWriting"
+ 1436 6974696E
+ 1436 6700
+ 1437 .LASF53:
+ 1438 047e 72634669 .string "rcFileFormat"
+ 1438 6C65466F
+ 1438 726D6174
+ 1438 00
+
GAS LISTING /tmp/cclL3imJ.s page 32
+
+
+ 1439 .LASF21:
+ 1440 048b 72634170 .string "rcApp"
+ 1440 7000
+ 1441 .LASF125:
+ 1442 0491 72635265 .string "rcResetting"
+ 1442 73657474
+ 1442 696E6700
+ 1443 .LASF71:
+ 1444 049d 72635072 .string "rcProcess"
+ 1444 6F636573
+ 1444 7300
+ 1445 .LASF106:
+ 1446 04a7 72635265 .string "rcResolving"
+ 1446 736F6C76
+ 1446 696E6700
+ 1447 .LASF12:
+ 1448 04b3 72635465 .string "rcText"
+ 1448 787400
+ 1449 .LASF66:
+ 1450 04ba 72634E61 .string "rcNamelist"
+ 1450 6D656C69
+ 1450 737400
+ 1451 .LASF229:
+ 1452 04c5 72634E6F .string "rcNotFound"
+ 1452 74466F75
+ 1452 6E6400
+ 1453 .LASF139:
+ 1454 04d0 72635265 .string "rcReindexing"
+ 1454 696E6465
+ 1454 78696E67
+ 1454 00
+ 1455 .LASF87:
+ 1456 04dd 72634578 .string "rcExpression"
+ 1456 70726573
+ 1456 73696F6E
+ 1456 00
+ 1457 .LASF235:
+ 1458 04ea 72635265 .string "rcReadonly"
+ 1458 61646F6E
+ 1458 6C7900
+ 1459 .LASF95:
+ 1460 04f5 72635572 .string "rcUri"
+ 1460 6900
+ 1461 .LASF100:
+ 1462 04fb 7263436F .string "rcConstructing"
+ 1462 6E737472
+ 1462 75637469
+ 1462 6E6700
+ 1463 .LASF173:
+ 1464 050a 72634F66 .string "rcOffset"
+ 1464 66736574
+ 1464 00
+ 1465 .LASF233:
+ 1466 0513 72634465 .string "rcDeadlock"
+ 1466 61646C6F
+ 1466 636B00
+ 1467 .LASF47:
+
GAS LISTING /tmp/cclL3imJ.s page 33
+
+
+ 1468 051e 72634461 .string "rcDatabase"
+ 1468 74616261
+ 1468 736500
+ 1469 .LASF127:
+ 1470 0529 72634672 .string "rcFreezing"
+ 1470 65657A69
+ 1470 6E6700
+ 1471 .LASF217:
+ 1472 0534 7263496E .string "rcIncorrect"
+ 1472 636F7272
+ 1472 65637400
+ 1473 .LASF206:
+ 1474 0540 7263446F .string "rcDone"
+ 1474 6E6500
+ 1475 .LASF157:
+ 1476 0547 7263466C .string "rcFlushing"
+ 1476 75736869
+ 1476 6E6700
+ 1477 .LASF159:
+ 1478 0552 7263456E .string "rcEncrypting"
+ 1478 63727970
+ 1478 74696E67
+ 1478 00
+ 1479 .LASF251:
+ 1480 055f 7263556E .string "rcUnequal"
+ 1480 65717561
+ 1480 6C00
+ 1481 .LASF10:
+ 1482 0569 72634578 .string "rcExe"
+ 1482 6500
+ 1483 .LASF38:
+ 1484 056f 72634172 .string "rcArgv"
+ 1484 677600
+ 1485 .LASF147:
+ 1486 0576 72634465 .string "rcDetaching"
+ 1486 74616368
+ 1486 696E6700
+ 1487 .LASF99:
+ 1488 0582 72634361 .string "rcCasting"
+ 1488 7374696E
+ 1488 6700
+ 1489 .LASF110:
+ 1490 058c 7263416C .string "rcAliasing"
+ 1490 69617369
+ 1490 6E6700
+ 1491 .LASF49:
+ 1492 0597 7263446F .string "rcDoc"
+ 1492 6300
+ 1493 .LASF98:
+ 1494 059d 7263416C .string "rcAllocating"
+ 1494 6C6F6361
+ 1494 74696E67
+ 1494 00
+ 1495 .LASF212:
+ 1496 05aa 72634E75 .string "rcNull"
+ 1496 6C6C00
+ 1497 .LASF180:
+
GAS LISTING /tmp/cclL3imJ.s page 34
+
+
+ 1498 05b1 72635261 .string "rcRange"
+ 1498 6E676500
+ 1499 .LASF35:
+ 1500 05b9 72634172 .string "rcArc"
+ 1500 6300
+ 1501 .LASF252:
+ 1502 05bf 72634661 .string "rcFailed"
+ 1502 696C6564
+ 1502 00
+ 1503 .LASF23:
+ 1504 05c8 72635352 .string "rcSRA"
+ 1504 4100
+ 1505 .LASF152:
+ 1506 05ce 72635365 .string "rcSearching"
+ 1506 61726368
+ 1506 696E6700
+ 1507 .LASF225:
+ 1508 05da 7263496E .string "rcInsufficient"
+ 1508 73756666
+ 1508 69636965
+ 1508 6E7400
+ 1509 .LASF165:
+ 1510 05e9 72635072 .string "rcProcessing"
+ 1510 6F636573
+ 1510 73696E67
+ 1510 00
+ 1511 .LASF144:
+ 1512 05f6 72635369 .string "rcSignaling"
+ 1512 676E616C
+ 1512 696E6700
+ 1513 .LASF135:
+ 1514 0602 72634465 .string "rcDecoding"
+ 1514 636F6469
+ 1514 6E6700
+ 1515 .LASF76:
+ 1516 060d 72635374 .string "rcStorage"
+ 1516 6F726167
+ 1516 6500
+ 1517 .LASF213:
+ 1518 0617 72634261 .string "rcBadVersion"
+ 1518 64566572
+ 1518 73696F6E
+ 1518 00
+ 1519 .LASF210:
+ 1520 0624 7263556E .string "rcUnrecognized"
+ 1520 7265636F
+ 1520 676E697A
+ 1520 656400
+ 1521 .LASF161:
+ 1522 0633 7263436F .string "rcComparing"
+ 1522 6D706172
+ 1522 696E6700
+ 1523 .LASF65:
+ 1524 063f 72634D67 .string "rcMgr"
+ 1524 7200
+ 1525 .LASF154:
+ 1526 0645 72634576 .string "rcEvaluating"
+
GAS LISTING /tmp/cclL3imJ.s page 35
+
+
+ 1526 616C7561
+ 1526 74696E67
+ 1526 00
+ 1527 .LASF163:
+ 1528 0652 72635265 .string "rcRetrieving"
+ 1528 74726965
+ 1528 76696E67
+ 1528 00
+ 1529 .LASF116:
+ 1530 065f 72635570 .string "rcUpdating"
+ 1530 64617469
+ 1530 6E6700
+ 1531 .LASF83:
+ 1532 066a 72635472 .string "rcTrie"
+ 1532 696500
+ 1533 .LASF201:
+ 1534 0671 72635369 .string "rcSize"
+ 1534 7A6500
+ 1535 .LASF150:
+ 1536 0678 72634D75 .string "rcMultiplexing"
+ 1536 6C746970
+ 1536 6C657869
+ 1536 6E6700
+ 1537 .LASF243:
+ 1538 0687 72634F75 .string "rcOutOfKDirectory"
+ 1538 744F664B
+ 1538 44697265
+ 1538 63746F72
+ 1538 7900
+ 1539 .LASF40:
+ 1540 0699 72634261 .string "rcBarrier"
+ 1540 72726965
+ 1540 7200
+ 1541 .LASF77:
+ 1542 06a3 72635374 .string "rcString"
+ 1542 72696E67
+ 1542 00
+ 1543 .LASF193:
+ 1544 06ac 7263456E .string "rcEncryption"
+ 1544 63727970
+ 1544 74696F6E
+ 1544 00
+ 1545 .LASF25:
+ 1546 06b9 72634B46 .string "rcKFG"
+ 1546 4700
+ 1547 .LASF46:
+ 1548 06bf 72634375 .string "rcCursor"
+ 1548 72736F72
+ 1548 00
+ 1549 .LASF101:
+ 1550 06c8 72634465 .string "rcDestroying"
+ 1550 7374726F
+ 1550 79696E67
+ 1550 00
+ 1551 .LASF27:
+ 1552 06d5 72634B72 .string "rcKrypto"
+ 1552 7970746F
+
GAS LISTING /tmp/cclL3imJ.s page 36
+
+
+ 1552 00
+ 1553 .LASF196:
+ 1554 06de 72635365 .string "rcSeed"
+ 1554 656400
+ 1555 .LASF221:
+ 1556 06e5 7263496E .string "rcInterrupted"
+ 1556 74657272
+ 1556 75707465
+ 1556 6400
+ 1557 .LASF153:
+ 1558 06f3 72634C6F .string "rcLoading"
+ 1558 6164696E
+ 1558 6700
+ 1559 .LASF136:
+ 1560 06fd 72635661 .string "rcValidating"
+ 1560 6C696461
+ 1560 74696E67
+ 1560 00
+ 1561 .LASF230:
+ 1562 070a 72634C6F .string "rcLocked"
+ 1562 636B6564
+ 1562 00
+ 1563 .LASF59:
+ 1564 0713 72634974 .string "rcIterator"
+ 1564 65726174
+ 1564 6F7200
+ 1565 .LASF67:
+ 1566 071e 72634E6F .string "rcNode"
+ 1566 646500
+ 1567 .LASF1:
+ 1568 0725 73686F72 .string "short int"
+ 1568 7420696E
+ 1568 7400
+ 1569 .LASF102:
+ 1570 072f 72635265 .string "rcReleasing"
+ 1570 6C656173
+ 1570 696E6700
+ 1571 .LASF177:
+ 1572 073b 72635472 .string "rcTransfer"
+ 1572 616E7366
+ 1572 657200
+ 1573 .LASF2:
+ 1574 0746 6C6F6E67 .string "long int"
+ 1574 20696E74
+ 1574 00
+ 1575 .LASF262:
+ 1576 074f 4B426C6F .string "KBlockCipher"
+ 1576 636B4369
+ 1576 70686572
+ 1576 00
+ 1577 .LASF164:
+ 1578 075c 72635365 .string "rcSending"
+ 1578 6E64696E
+ 1578 6700
+ 1579 .LASF215:
+ 1580 0766 7263496E .string "rcInvalid"
+ 1580 76616C69
+
GAS LISTING /tmp/cclL3imJ.s page 37
+
+
+ 1580 6400
+ 1581 .LASF249:
+ 1582 0770 72634E6F .string "rcNotOpen"
+ 1582 744F7065
+ 1582 6E00
+ 1583 .LASF103:
+ 1584 077a 72634163 .string "rcAccessing"
+ 1584 63657373
+ 1584 696E6700
+ 1585 .LASF29:
+ 1586 0786 72634E53 .string "rcNS"
+ 1586 00
+ 1587 .LASF112:
+ 1588 078b 72635072 .string "rcProjecting"
+ 1588 6F6A6563
+ 1588 74696E67
+ 1588 00
+ 1589 .LASF175:
+ 1590 0798 72634E61 .string "rcName"
+ 1590 6D6500
+ 1591 .LASF238:
+ 1592 079f 7263496E .string "rcInPlaceNotAllowed"
+ 1592 506C6163
+ 1592 654E6F74
+ 1592 416C6C6F
+ 1592 77656400
+ 1593 .LASF247:
+ 1594 07b3 72634F70 .string "rcOpen"
+ 1594 656E00
+ 1595 .LASF227:
+ 1596 07ba 72635669 .string "rcViolated"
+ 1596 6F6C6174
+ 1596 656400
+ 1597 .LASF169:
+ 1598 07c5 72634E6F .string "rcNoObj"
+ 1598 4F626A00
+ 1599 .LASF200:
+ 1600 07cd 72635369 .string "rcSignalSet"
+ 1600 676E616C
+ 1600 53657400
+ 1601 .LASF197:
+ 1602 07d9 7263436F .string "rcConnection"
+ 1602 6E6E6563
+ 1602 74696F6E
+ 1602 00
+ 1603 .LASF195:
+ 1604 07e6 72634368 .string "rcChecksum"
+ 1604 65636B73
+ 1604 756D00
+ 1605 .LASF78:
+ 1606 07f1 72635461 .string "rcTable"
+ 1606 626C6500
+ 1607 .LASF11:
+ 1608 07f9 72635275 .string "rcRuntime"
+ 1608 6E74696D
+ 1608 6500
+ 1609 .LASF148:
+
GAS LISTING /tmp/cclL3imJ.s page 38
+
+
+ 1610 0803 72634C6F .string "rcLogging"
+ 1610 6767696E
+ 1610 6700
+ 1611 .LASF160:
+ 1612 080d 72634465 .string "rcDecrypting"
+ 1612 63727970
+ 1612 74696E67
+ 1612 00
+ 1613 .LASF61:
+ 1614 081a 72634C6F .string "rcLog"
+ 1614 6700
+ 1615 .LASF68:
+ 1616 0820 72634E75 .string "rcNumeral"
+ 1616 6D657261
+ 1616 6C00
+ 1617 .LASF172:
+ 1618 082a 72635061 .string "rcParam"
+ 1618 72616D00
+ 1619 .LASF32:
+ 1620 0832 52434D6F .string "RCModule"
+ 1620 64756C65
+ 1620 00
+ 1621 .LASF158:
+ 1622 083b 72634170 .string "rcAppending"
+ 1622 70656E64
+ 1622 696E6700
+ 1623 .LASF57:
+ 1624 0847 72634865 .string "rcHeader"
+ 1624 61646572
+ 1624 00
+ 1625 .LASF6:
+ 1626 0850 6C6F6E67 .string "long unsigned int"
+ 1626 20756E73
+ 1626 69676E65
+ 1626 6420696E
+ 1626 7400
+ 1627 .LASF245:
+ 1628 0862 72634F75 .string "rcOutofrange"
+ 1628 746F6672
+ 1628 616E6765
+ 1628 00
+ 1629 .LASF170:
+ 1630 086f 72634C69 .string "rcLink"
+ 1630 6E6B00
+ 1631 .LASF52:
+ 1632 0876 72634669 .string "rcFileDesc"
+ 1632 6C654465
+ 1632 736300
+ 1633 .LASF263:
+ 1634 0881 6E65775F .string "new_obj"
+ 1634 6F626A00
+ 1635 .LASF209:
+ 1636 0889 7263556E .string "rcUnexpected"
+ 1636 65787065
+ 1636 63746564
+ 1636 00
+ 1637 .LASF207:
+
GAS LISTING /tmp/cclL3imJ.s page 39
+
+
+ 1638 0896 7263556E .string "rcUnknown"
+ 1638 6B6E6F77
+ 1638 6E00
+ 1639 .LASF155:
+ 1640 08a0 7263496E .string "rcInflating"
+ 1640 666C6174
+ 1640 696E6700
+ 1641 .LASF118:
+ 1642 08ac 72634F70 .string "rcOpening"
+ 1642 656E696E
+ 1642 6700
+ 1643 .LASF17:
+ 1644 08b6 72635053 .string "rcPS"
+ 1644 00
+ 1645 .LASF3:
+ 1646 08bb 756E7369 .string "unsigned char"
+ 1646 676E6564
+ 1646 20636861
+ 1646 7200
+ 1647 .LASF126:
+ 1648 08c9 72635065 .string "rcPersisting"
+ 1648 72736973
+ 1648 74696E67
+ 1648 00
+ 1649 .LASF259:
+ 1650 08d6 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 1650 652F726F
+ 1650 6461726D
+ 1650 65722F73
+ 1650 72615F73
+ 1651 .LASF220:
+ 1652 0910 7263496E .string "rcIncomplete"
+ 1652 636F6D70
+ 1652 6C657465
+ 1652 00
+ 1653 .LASF246:
+ 1654 091d 72634C61 .string "rcLastState_v1_0"
+ 1654 73745374
+ 1654 6174655F
+ 1654 76315F30
+ 1654 00
+ 1655 .LASF255:
+ 1656 092e 72634C61 .string "rcLastState_v1_1"
+ 1656 73745374
+ 1656 6174655F
+ 1656 76315F31
+ 1656 00
+ 1657 .LASF143:
+ 1658 093f 7263436F .string "rcConverting"
+ 1658 6E766572
+ 1658 74696E67
+ 1658 00
+ 1659 .LASF117:
+ 1660 094c 72634372 .string "rcCreating"
+ 1660 65617469
+ 1660 6E6700
+ 1661 .LASF191:
+
GAS LISTING /tmp/cclL3imJ.s page 40
+
+
+ 1662 0957 72634974 .string "rcItem"
+ 1662 656D00
+ 1663 .LASF111:
+ 1664 095e 72635365 .string "rcSelecting"
+ 1664 6C656374
+ 1664 696E6700
+ 1665 .LASF8:
+ 1666 096a 72635F74 .string "rc_t"
+ 1666 00
+ 1667 .LASF73:
+ 1668 096f 72635257 .string "rcRWLock"
+ 1668 4C6F636B
+ 1668 00
+ 1669 .LASF190:
+ 1670 0978 72634C61 .string "rcLastObject_v1_0"
+ 1670 73744F62
+ 1670 6A656374
+ 1670 5F76315F
+ 1670 3000
+ 1671 .LASF203:
+ 1672 098a 72634C61 .string "rcLastObject_v1_1"
+ 1672 73744F62
+ 1672 6A656374
+ 1672 5F76315F
+ 1672 3100
+ 1673 .LASF187:
+ 1674 099c 72634172 .string "rcArcHardLink"
+ 1674 63486172
+ 1674 644C696E
+ 1674 6B00
+ 1675 .LASF113:
+ 1676 09aa 7263496E .string "rcInserting"
+ 1676 73657274
+ 1676 696E6700
+ 1677 .LASF166:
+ 1678 09b6 72634964 .string "rcIdentifying"
+ 1678 656E7469
+ 1678 6679696E
+ 1678 6700
+ 1679 .LASF124:
+ 1680 09c4 72635265 .string "rcReverting"
+ 1680 76657274
+ 1680 696E6700
+ 1681 .LASF20:
+ 1682 09d0 72635644 .string "rcVDB"
+ 1682 4200
+ 1683 .LASF105:
+ 1684 09d6 72635669 .string "rcVisiting"
+ 1684 73697469
+ 1684 6E6700
+ 1685 .LASF88:
+ 1686 09e1 72634C61 .string "rcLastTarget_v1_0"
+ 1686 73745461
+ 1686 72676574
+ 1686 5F76315F
+ 1686 3000
+ 1687 .LASF96:
+
GAS LISTING /tmp/cclL3imJ.s page 41
+
+
+ 1688 09f3 72634C61 .string "rcLastTarget_v1_1"
+ 1688 73745461
+ 1688 72676574
+ 1688 5F76315F
+ 1688 3100
+ 1689 .LASF84:
+ 1690 0a05 72635479 .string "rcType"
+ 1690 706500
+ 1691 .LASF231:
+ 1692 0a0c 7263556E .string "rcUnlocked"
+ 1692 6C6F636B
+ 1692 656400
+ 1693 .LASF151:
+ 1694 0a17 7263436C .string "rcClassifying"
+ 1694 61737369
+ 1694 6679696E
+ 1694 6700
+ 1695 .LASF228:
+ 1696 0a25 72634578 .string "rcExists"
+ 1696 69737473
+ 1696 00
+ 1697 .LASF130:
+ 1698 0a2e 7263466F .string "rcFormatting"
+ 1698 726D6174
+ 1698 74696E67
+ 1698 00
+ 1699 .LASF79:
+ 1700 0a3b 72635468 .string "rcThread"
+ 1700 72656164
+ 1700 00
+ 1701 .LASF0:
+ 1702 0a44 7369676E .string "signed char"
+ 1702 65642063
+ 1702 68617200
+ 1703 .LASF4:
+ 1704 0a50 73686F72 .string "short unsigned int"
+ 1704 7420756E
+ 1704 7369676E
+ 1704 65642069
+ 1704 6E7400
+ 1705 .LASF260:
+ 1706 0a63 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 1706 652F726F
+ 1706 6461726D
+ 1706 65722F73
+ 1706 72615F73
+ 1707 .LASF182:
+ 1708 0aab 72634279 .string "rcByteOrder"
+ 1708 74654F72
+ 1708 64657200
+ 1709 .LASF36:
+ 1710 0ab7 7263546F .string "rcToc"
+ 1710 6300
+ 1711 .LASF44:
+ 1712 0abd 7263436F .string "rcColumn"
+ 1712 6C756D6E
+ 1712 00
+
GAS LISTING /tmp/cclL3imJ.s page 42
+
+
+ 1713 .LASF256:
+ 1714 0ac6 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 1714 45545459
+ 1714 5F46554E
+ 1714 4354494F
+ 1714 4E5F5F00
+ 1715 .LASF94:
+ 1716 0ada 72635175 .string "rcQuery"
+ 1716 65727900
+ 1717 .LASF140:
+ 1718 0ae2 72635265 .string "rcRegistering"
+ 1718 67697374
+ 1718 6572696E
+ 1718 6700
+ 1719 .LASF86:
+ 1720 0af0 72634479 .string "rcDylib"
+ 1720 6C696200
+ 1721 .LASF81:
+ 1722 0af8 7263546F .string "rcToken"
+ 1722 6B656E00
+ 1723 .LASF134:
+ 1724 0b00 7263456E .string "rcEncoding"
+ 1724 636F6469
+ 1724 6E6700
+ 1725 .LASF224:
+ 1726 0b0b 72634578 .string "rcExhausted"
+ 1726 68617573
+ 1726 74656400
+ 1727 .LASF186:
+ 1728 0b17 72634469 .string "rcDirEntry"
+ 1728 72456E74
+ 1728 727900
+ 1729 .LASF26:
+ 1730 0b22 7263416C .string "rcAlign"
+ 1730 69676E00
+ 1731 .LASF28:
+ 1732 0b2a 72635244 .string "rcRDBMS"
+ 1732 424D5300
+ 1733 .LASF14:
+ 1734 0b32 72634353 .string "rcCS"
+ 1734 00
+ 1735 .LASF129:
+ 1736 0b37 7263436F .string "rcConcatenating"
+ 1736 6E636174
+ 1736 656E6174
+ 1736 696E6700
+ 1737 .LASF48:
+ 1738 0b47 72634469 .string "rcDirectory"
+ 1738 72656374
+ 1738 6F727900
+ 1739 .LASF223:
+ 1740 0b53 7263456D .string "rcEmpty"
+ 1740 70747900
+ 1741 .LASF13:
+ 1742 0b5b 7263436F .string "rcCont"
+ 1742 6E7400
+ 1743 .LASF33:
+
GAS LISTING /tmp/cclL3imJ.s page 43
+
+
+ 1744 0b62 52435461 .string "RCTarget"
+ 1744 72676574
+ 1744 00
+ 1745 .ident "GCC: (GNU) 4.4.2"
+ 1746 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/cclL3imJ.s page 44
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 no-null-ncbi.c
+ /tmp/cclL3imJ.s:17 .text:0000000000000000 KNullBlockCipherVecRegMake
+ /tmp/cclL3imJ.s:66 .rodata:0000000000000040 __func__.2439
+ /tmp/cclL3imJ.s:71 .rodata:0000000000000060 __PRETTY_FUNCTION__.2438
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/null-ncbi-priv.h b/libs/krypto/null-ncbi-priv.h
new file mode 100644
index 0000000..1e485bd
--- /dev/null
+++ b/libs/krypto/null-ncbi-priv.h
@@ -0,0 +1,56 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_null_ncbi_priv_libs_
+#define _h_krypto_null_ncbi_priv_libs_
+
+#include <klib/defs.h>
+#include <v128.h>
+
+#include "ncbi-priv.h"
+#include "cipher-impl.h"
+#include "blockcipher-impl.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct CipherNull CipherNull;
+struct CipherNull
+{
+ KCipher dad;
+ CipherVec e_ivec;
+ CipherVec d_ivec;
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_null_ncbi_priv_libs_ */
+
+
diff --git a/libs/krypto/null-ncbi.c b/libs/krypto/null-ncbi.c
new file mode 100644
index 0000000..fe5e7bc
--- /dev/null
+++ b/libs/krypto/null-ncbi.c
@@ -0,0 +1,251 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+
+#include "ncbi-priv.h"
+#include "cipher-priv.h"
+#include "blockcipher-priv.h"
+
+#include <klib/rc.h>
+
+
+#include <byteswap.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sysalloc.h>
+
+#include "blockcipher-impl.h"
+
+#if USE_VEC
+#include <cpuid.h>
+#endif
+#if USE_VECREG
+#include <v128.h>
+#endif
+
+
+#if USE_VEC
+#define BLOCKCIPHER_IMPL BLOCKCIPHER_VEC_IMPL
+#else
+#define BLOCKCIPHER_IMPL BLOCKCIPHER_BYTE_IMPL
+#endif
+
+typedef struct NULL_CLASS NULL_CLASS;
+
+static const char NULLBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ * How large is the stored key for this cipher? Not the user key used
+ * to create this key (key schedule)
+ *
+ * This is needed by KCipher to know how large the KCipher objecr is at
+ * allocation and to know how much of a buffer each decryption/encryption is
+ */
+static
+void NULLBCMEMBER(Destroy) (const BLOCKCIPHER_IMPL * self)
+{
+ /* we use a constant object so do nothing */
+}
+
+
+/* ----------------------------------------------------------------------
+ * BlockSize
+ */
+static
+uint32_t NULLBCMEMBER(BlockSize) ()
+{
+ return 16;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KeySize
+ * How large is the stored key for this cipher? Not the user key used
+ * to create this key (key schedule)
+ *
+ * This is needed by KCipher to know how large the KCipher objecr is at
+ * allocation and to know how much of a buffer each decryption/encryption is
+ */
+static uint32_t NULLBCMEMBER(KeySize) ()
+{
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetEncryptKey
+ * The KCipher calls this to have the block cipher build an encryption
+ * key in the KCipher object
+ *
+ */
+static rc_t NULLBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+ uint32_t user_key_size)
+{
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetDecryptKey
+ * The KCipher calls this to have the block cipher build an decryption
+ * key in the KCipher object
+ *
+ */
+static rc_t NULLBCMEMBER(SetDecryptKey) (void * decrypt_key,
+ const char * user_key,
+ uint32_t user_key_size)
+{
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Encrypt
+ *
+ * Perform an encryption of a single block. Chained modes and stream
+ * cipher modes will call this multiple times.
+ *
+ */
+#if USE_VEC
+static CipherVec NULLBCMEMBER(Encrypt) (CipherVec state,
+ const void * encrypt_key)
+{
+ return state;
+}
+#else
+static void NULLBCMEMBER(Encrypt) (const CipherBlock in,
+ CipherBlock * out,
+ const void * encrypt_key)
+{
+}
+#endif
+
+
+/* ----------------------------------------------------------------------
+ * Decrypt
+ *
+ * Perform a decryption of a single block. Chained modes and stream
+ * cipher modes will call this multiple times.
+ */
+#if USE_VEC
+static CipherVec NULLBCMEMBER(Decrypt) (CipherVec state,
+ const void * decrypt_key)
+{
+ return state;
+}
+#else
+static void NULLBCMEMBER(Decrypt) (const CipherBlock in,
+ CipherBlock * out,
+ const void * encrypt_key)
+{
+}
+#endif
+
+
+/* ----------------------------------------------------------------------
+ * MakeProcessorSupport
+ *
+ * Run-time check for support of this particular AES implementation by
+ * checking the flags given via the cpuid instruction.
+ */
+static __inline__
+bool NULLBCMEMBER(ProcessorSupport) ()
+{
+ return true;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Init
+ *
+ * Initialize the fields of this object. The derived class will call this
+ * during it's initialization.
+ *
+ * self object to initialze
+ * vt the virtual table of the derived class
+ * mgr the cipher manager that is the construction factory block cipher
+ * objects hold references to the manager while the manager merely
+ * points at the block ciphers when all block ciphers are destroyed
+ * the manager loses its references and it too can be destroyed if not
+ * held elsewhere
+ * name ASCIZ c-string the name of this class
+ */
+static const
+#if USE_VEC
+KBlockCipherVec_vt_v1
+#else
+KBlockCipherByte_vt_v1
+#endif
+NULLBCMEMBER(_vt_) = {
+ { 1, 1 },
+
+ NULLBCMEMBER(Destroy),
+ NULLBCMEMBER(BlockSize),
+ NULLBCMEMBER(KeySize),
+ NULLBCMEMBER(SetEncryptKey),
+ NULLBCMEMBER(SetDecryptKey),
+ NULLBCMEMBER(Encrypt),
+ NULLBCMEMBER(Decrypt)
+};
+
+
+/* ----------------------------------------------------------------------
+ * Make
+ *
+ * Create a new Null Block Cipher object.
+ * The processor is checked to see if this particular version is supported on
+ * this particular CPU.
+ */
+rc_t NULLBCMEMBER(Make) (KBlockCipher ** new_obj)
+{
+ rc_t rc;
+
+ /* Check parameter first */
+ if (new_obj == NULL)
+ rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+
+ else
+ {
+ *new_obj = NULL;
+
+ /* check for processor support of this flavor */
+ if ( ! NULLBCMEMBER(ProcessorSupport)())
+ rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
+ else
+ {
+ rc = 0;
+ *new_obj = (KBlockCipher*)&(NULLBCMEMBER(_vt_));
+ }
+ }
+ return rc;
+}
+
+/* end of file lib/krypto/aes-ncbi.c */
diff --git a/libs/krypto/null-ncbi.vec.pic.o.list b/libs/krypto/null-ncbi.vec.pic.o.list
new file mode 100644
index 0000000..f9e1167
--- /dev/null
+++ b/libs/krypto/null-ncbi.vec.pic.o.list
@@ -0,0 +1,4406 @@
+GAS LISTING /tmp/ccIvKeEl.s page 1
+
+
+ 1 .file "null-ncbi.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 66010000 .text
+ 8 02001901
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .section .rodata
+ 11 .type KNullBlockCipherVecaes_ncbi_name, @object
+ 12 .size KNullBlockCipherVecaes_ncbi_name, 10
+ 13 KNullBlockCipherVecaes_ncbi_name:
+ 14 0000 4145535F .string "AES_CLASS"
+ 14 434C4153
+ 14 5300
+ 15 .text
+ 16 .type KNullBlockCipherVecDestroy, @function
+ 17 KNullBlockCipherVecDestroy:
+ 18 .LFB513:
+ 19 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <krypto/extern.h>
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "ncbi-priv.h"
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "cipher-priv.h"
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "blockcipher-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <klib/rc.h>
+
GAS LISTING /tmp/ccIvKeEl.s page 2
+
+
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <byteswap.h>
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <string.h>
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <stdint.h>
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <stdlib.h>
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <assert.h>
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <sysalloc.h>
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "blockcipher-impl.h"
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <cpuid.h>
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VECREG
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <v128.h>
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #define BLOCKCIPHER_IMPL BLOCKCIPHER_VEC_IMPL
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #define BLOCKCIPHER_IMPL BLOCKCIPHER_BYTE_IMPL
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** typedef struct NULL_CLASS NULL_CLASS;
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static const char NULLBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Destroy
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * to create this key (key schedule)
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** void NULLBCMEMBER(Destroy) (const BLOCKCIPHER_IMPL * self)
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 20 .loc 1 73 0
+ 21 .cfi_startproc
+ 22 0000 55 pushq %rbp
+ 23 .LCFI0:
+ 24 .cfi_def_cfa_offset 16
+ 25 0001 4889E5 movq %rsp, %rbp
+ 26 .cfi_offset 6, -16
+ 27 .LCFI1:
+ 28 .cfi_def_cfa_register 6
+ 29 0004 48897DF8 movq %rdi, -8(%rbp)
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* we use a constant object so do nothing */
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 30 .loc 1 75 0
+ 31 0008 C9 leave
+ 32 0009 C3 ret
+ 33 .cfi_endproc
+
GAS LISTING /tmp/ccIvKeEl.s page 3
+
+
+ 34 .LFE513:
+ 35 .size KNullBlockCipherVecDestroy, .-KNullBlockCipherVecDestroy
+ 36 .type KNullBlockCipherVecBlockSize, @function
+ 37 KNullBlockCipherVecBlockSize:
+ 38 .LFB514:
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * BlockSize
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** uint32_t NULLBCMEMBER(BlockSize) ()
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 39 .loc 1 83 0
+ 40 .cfi_startproc
+ 41 000a 55 pushq %rbp
+ 42 .LCFI2:
+ 43 .cfi_def_cfa_offset 16
+ 44 000b 4889E5 movq %rsp, %rbp
+ 45 .cfi_offset 6, -16
+ 46 .LCFI3:
+ 47 .cfi_def_cfa_register 6
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return 16;
+ 48 .loc 1 84 0
+ 49 000e B8100000 movl $16, %eax
+ 49 00
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 50 .loc 1 85 0
+ 51 0013 C9 leave
+ 52 0014 C3 ret
+ 53 .cfi_endproc
+ 54 .LFE514:
+ 55 .size KNullBlockCipherVecBlockSize, .-KNullBlockCipherVecBlockSize
+ 56 .type KNullBlockCipherVecKeySize, @function
+ 57 KNullBlockCipherVecKeySize:
+ 58 .LFB515:
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * KeySize
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * to create this key (key schedule)
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static uint32_t NULLBCMEMBER(KeySize) ()
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 59 .loc 1 97 0
+ 60 .cfi_startproc
+ 61 0015 55 pushq %rbp
+ 62 .LCFI4:
+ 63 .cfi_def_cfa_offset 16
+ 64 0016 4889E5 movq %rsp, %rbp
+ 65 .cfi_offset 6, -16
+ 66 .LCFI5:
+ 67 .cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccIvKeEl.s page 4
+
+
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return 0;
+ 68 .loc 1 98 0
+ 69 0019 B8000000 movl $0, %eax
+ 69 00
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 70 .loc 1 99 0
+ 71 001e C9 leave
+ 72 001f C3 ret
+ 73 .cfi_endproc
+ 74 .LFE515:
+ 75 .size KNullBlockCipherVecKeySize, .-KNullBlockCipherVecKeySize
+ 76 .type KNullBlockCipherVecSetEncryptKey, @function
+ 77 KNullBlockCipherVecSetEncryptKey:
+ 78 .LFB516:
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * SetEncryptKey
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * The KCipher calls this to have the block cipher build an encryption
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * key in the KCipher object
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static rc_t NULLBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** uint32_t user_key_size)
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 79 .loc 1 110 0
+ 80 .cfi_startproc
+ 81 0020 55 pushq %rbp
+ 82 .LCFI6:
+ 83 .cfi_def_cfa_offset 16
+ 84 0021 4889E5 movq %rsp, %rbp
+ 85 .cfi_offset 6, -16
+ 86 .LCFI7:
+ 87 .cfi_def_cfa_register 6
+ 88 0024 48897DF8 movq %rdi, -8(%rbp)
+ 89 0028 488975F0 movq %rsi, -16(%rbp)
+ 90 002c 8955EC movl %edx, -20(%rbp)
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return 0;
+ 91 .loc 1 111 0
+ 92 002f B8000000 movl $0, %eax
+ 92 00
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 93 .loc 1 112 0
+ 94 0034 C9 leave
+ 95 0035 C3 ret
+ 96 .cfi_endproc
+ 97 .LFE516:
+ 98 .size KNullBlockCipherVecSetEncryptKey, .-KNullBlockCipherVecSetEncryptKey
+ 99 .type KNullBlockCipherVecSetDecryptKey, @function
+ 100 KNullBlockCipherVecSetDecryptKey:
+ 101 .LFB517:
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * SetDecryptKey
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * The KCipher calls this to have the block cipher build an decryption
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * key in the KCipher object
+
GAS LISTING /tmp/ccIvKeEl.s page 5
+
+
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static rc_t NULLBCMEMBER(SetDecryptKey) (void * decrypt_key,
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const char * user_key,
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** uint32_t user_key_size)
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 102 .loc 1 124 0
+ 103 .cfi_startproc
+ 104 0036 55 pushq %rbp
+ 105 .LCFI8:
+ 106 .cfi_def_cfa_offset 16
+ 107 0037 4889E5 movq %rsp, %rbp
+ 108 .cfi_offset 6, -16
+ 109 .LCFI9:
+ 110 .cfi_def_cfa_register 6
+ 111 003a 48897DF8 movq %rdi, -8(%rbp)
+ 112 003e 488975F0 movq %rsi, -16(%rbp)
+ 113 0042 8955EC movl %edx, -20(%rbp)
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return 0;
+ 114 .loc 1 125 0
+ 115 0045 B8000000 movl $0, %eax
+ 115 00
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 116 .loc 1 126 0
+ 117 004a C9 leave
+ 118 004b C3 ret
+ 119 .cfi_endproc
+ 120 .LFE517:
+ 121 .size KNullBlockCipherVecSetDecryptKey, .-KNullBlockCipherVecSetDecryptKey
+ 122 .type KNullBlockCipherVecEncrypt, @function
+ 123 KNullBlockCipherVecEncrypt:
+ 124 .LFB518:
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Encrypt
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Perform an encryption of a single block. Chained modes and stream
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * cipher modes will call this multiple times.
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static CipherVec NULLBCMEMBER(Encrypt) (CipherVec state,
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const void * encrypt_key)
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 125 .loc 1 139 0
+ 126 .cfi_startproc
+ 127 004c 55 pushq %rbp
+ 128 .LCFI10:
+ 129 .cfi_def_cfa_offset 16
+ 130 004d 4889E5 movq %rsp, %rbp
+ 131 .cfi_offset 6, -16
+ 132 .LCFI11:
+ 133 .cfi_def_cfa_register 6
+ 134 0050 660F7F45 movdqa %xmm0, -16(%rbp)
+ 134 F0
+ 135 0055 48897DE8 movq %rdi, -24(%rbp)
+
GAS LISTING /tmp/ccIvKeEl.s page 6
+
+
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return state;
+ 136 .loc 1 140 0
+ 137 0059 660F6F45 movdqa -16(%rbp), %xmm0
+ 137 F0
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 138 .loc 1 141 0
+ 139 005e C9 leave
+ 140 005f C3 ret
+ 141 .cfi_endproc
+ 142 .LFE518:
+ 143 .size KNullBlockCipherVecEncrypt, .-KNullBlockCipherVecEncrypt
+ 144 .type KNullBlockCipherVecDecrypt, @function
+ 145 KNullBlockCipherVecDecrypt:
+ 146 .LFB519:
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static void NULLBCMEMBER(Encrypt) (const CipherBlock in,
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** CipherBlock * out,
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const void * encrypt_key)
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Decrypt
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Perform a decryption of a single block. Chained modes and stream
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * cipher modes will call this multiple times.
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static CipherVec NULLBCMEMBER(Decrypt) (CipherVec state,
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const void * decrypt_key)
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 147 .loc 1 160 0
+ 148 .cfi_startproc
+ 149 0060 55 pushq %rbp
+ 150 .LCFI12:
+ 151 .cfi_def_cfa_offset 16
+ 152 0061 4889E5 movq %rsp, %rbp
+ 153 .cfi_offset 6, -16
+ 154 .LCFI13:
+ 155 .cfi_def_cfa_register 6
+ 156 0064 660F7F45 movdqa %xmm0, -16(%rbp)
+ 156 F0
+ 157 0069 48897DE8 movq %rdi, -24(%rbp)
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return state;
+ 158 .loc 1 161 0
+ 159 006d 660F6F45 movdqa -16(%rbp), %xmm0
+ 159 F0
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 160 .loc 1 162 0
+ 161 0072 C9 leave
+ 162 0073 C3 ret
+ 163 .cfi_endproc
+ 164 .LFE519:
+ 165 .size KNullBlockCipherVecDecrypt, .-KNullBlockCipherVecDecrypt
+ 166 .type KNullBlockCipherVecProcessorSupport, @function
+
GAS LISTING /tmp/ccIvKeEl.s page 7
+
+
+ 167 KNullBlockCipherVecProcessorSupport:
+ 168 .LFB520:
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static void NULLBCMEMBER(Decrypt) (const CipherBlock in,
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** CipherBlock * out,
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const void * encrypt_key)
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * MakeProcessorSupport
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Run-time check for support of this particular AES implementation by
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * checking the flags given via the cpuid instruction.
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static __inline__
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** bool NULLBCMEMBER(ProcessorSupport) ()
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 169 .loc 1 180 0
+ 170 .cfi_startproc
+ 171 0074 55 pushq %rbp
+ 172 .LCFI14:
+ 173 .cfi_def_cfa_offset 16
+ 174 0075 4889E5 movq %rsp, %rbp
+ 175 .cfi_offset 6, -16
+ 176 .LCFI15:
+ 177 .cfi_def_cfa_register 6
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return true;
+ 178 .loc 1 181 0
+ 179 0078 B8010000 movl $1, %eax
+ 179 00
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 180 .loc 1 182 0
+ 181 007d C9 leave
+ 182 007e C3 ret
+ 183 .cfi_endproc
+ 184 .LFE520:
+ 185 .size KNullBlockCipherVecProcessorSupport, .-KNullBlockCipherVecProcessorSupport
+ 186 .section .data.rel.ro.local,"aw", at progbits
+ 187 .align 32
+ 188 .type KNullBlockCipherVec_vt_, @object
+ 189 .size KNullBlockCipherVec_vt_, 64
+ 190 KNullBlockCipherVec_vt_:
+ 191 0000 01000000 .long 1
+ 192 0004 01000000 .long 1
+ 193 0008 00000000 .quad KNullBlockCipherVecDestroy
+ 193 00000000
+ 194 0010 00000000 .quad KNullBlockCipherVecBlockSize
+ 194 00000000
+ 195 0018 00000000 .quad KNullBlockCipherVecKeySize
+ 195 00000000
+ 196 0020 00000000 .quad KNullBlockCipherVecSetEncryptKey
+ 196 00000000
+ 197 0028 00000000 .quad KNullBlockCipherVecSetDecryptKey
+ 197 00000000
+
GAS LISTING /tmp/ccIvKeEl.s page 8
+
+
+ 198 0030 00000000 .quad KNullBlockCipherVecEncrypt
+ 198 00000000
+ 199 0038 00000000 .quad KNullBlockCipherVecDecrypt
+ 199 00000000
+ 200 .section .rodata
+ 201 000a 00000000 .align 8
+ 201 0000
+ 202 .LC0:
+ 203 0010 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 203 652F726F
+ 203 6461726D
+ 203 65722F73
+ 203 72615F73
+ 204 .text
+ 205 .globl KNullBlockCipherVecMake
+ 206 .type KNullBlockCipherVecMake, @function
+ 207 KNullBlockCipherVecMake:
+ 208 .LFB521:
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Init
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Initialize the fields of this object. The derived class will call this
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * during it's initialization.
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * self object to initialze
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * vt the virtual table of the derived class
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * mgr the cipher manager that is the construction factory block cipher
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * objects hold references to the manager while the manager merely
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * points at the block ciphers when all block ciphers are destroyed
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * the manager loses its references and it too can be destroyed if not
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * held elsewhere
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * name ASCIZ c-string the name of this class
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static const
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** KBlockCipherVec_vt_v1
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** KBlockCipherByte_vt_v1
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(_vt_) = {
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** { 1, 1 },
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(Destroy),
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(BlockSize),
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(KeySize),
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(SetEncryptKey),
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(SetDecryptKey),
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(Encrypt),
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(Decrypt)
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** };
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Make
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+
GAS LISTING /tmp/ccIvKeEl.s page 9
+
+
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Create a new Null Block Cipher object.
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * The processor is checked to see if this particular version is supported on
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * this particular CPU.
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc_t NULLBCMEMBER(Make) (KBlockCipher ** new_obj)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 209 .loc 1 227 0
+ 210 .cfi_startproc
+ 211 007f 55 pushq %rbp
+ 212 .LCFI16:
+ 213 .cfi_def_cfa_offset 16
+ 214 0080 4889E5 movq %rsp, %rbp
+ 215 .cfi_offset 6, -16
+ 216 .LCFI17:
+ 217 .cfi_def_cfa_register 6
+ 218 0083 4883EC20 subq $32, %rsp
+ 219 0087 48897DE8 movq %rdi, -24(%rbp)
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc_t rc;
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* Check parameter first */
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** if (new_obj == NULL)
+ 220 .loc 1 231 0
+ 221 008b 48837DE8 cmpq $0, -24(%rbp)
+ 221 00
+ 222 0090 7522 jne .L18
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 223 .loc 1 232 0
+ 224 0092 B9E80000 movl $232, %ecx
+ 224 00
+ 225 0097 488D1500 leaq __func__.6558(%rip), %rdx
+ 225 000000
+ 226 009e 488D3500 leaq .LC0(%rip), %rsi
+ 226 000000
+ 227 00a5 BF878F00 movl $-2030006393, %edi
+ 227 87
+ 228 00aa E8000000 call SetRCFileFuncLine at PLT
+ 228 00
+ 229 00af 8945FC movl %eax, -4(%rbp)
+ 230 00b2 EB53 jmp .L19
+ 231 .L18:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** else
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *new_obj = NULL;
+ 232 .loc 1 236 0
+ 233 00b4 488B45E8 movq -24(%rbp), %rax
+ 234 00b8 48C70000 movq $0, (%rax)
+ 234 000000
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* check for processor support of this flavor */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** if ( ! NULLBCMEMBER(ProcessorSupport)())
+ 235 .loc 1 239 0
+ 236 00bf B8000000 movl $0, %eax
+ 236 00
+ 237 00c4 E8ABFFFF call KNullBlockCipherVecProcessorSupport
+ 237 FF
+ 238 00c9 83F001 xorl $1, %eax
+
GAS LISTING /tmp/ccIvKeEl.s page 10
+
+
+ 239 00cc 84C0 testb %al, %al
+ 240 00ce 7422 je .L20
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 241 .loc 1 240 0
+ 242 00d0 B9F00000 movl $240, %ecx
+ 242 00
+ 243 00d5 488D1500 leaq __func__.6558(%rip), %rdx
+ 243 000000
+ 244 00dc 488D3500 leaq .LC0(%rip), %rsi
+ 244 000000
+ 245 00e3 BF038500 movl $-2030009085, %edi
+ 245 87
+ 246 00e8 E8000000 call SetRCFileFuncLine at PLT
+ 246 00
+ 247 00ed 8945FC movl %eax, -4(%rbp)
+ 248 00f0 EB15 jmp .L19
+ 249 .L20:
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** else
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc = 0;
+ 250 .loc 1 244 0
+ 251 00f2 C745FC00 movl $0, -4(%rbp)
+ 251 000000
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *new_obj = (KBlockCipher*)&(NULLBCMEMBER(_vt_));
+ 252 .loc 1 245 0
+ 253 00f9 488D1500 leaq KNullBlockCipherVec_vt_(%rip), %rdx
+ 253 000000
+ 254 0100 488B45E8 movq -24(%rbp), %rax
+ 255 0104 488910 movq %rdx, (%rax)
+ 256 .L19:
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return rc;
+ 257 .loc 1 248 0
+ 258 0107 8B45FC movl -4(%rbp), %eax
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 259 .loc 1 249 0
+ 260 010a C9 leave
+ 261 010b C3 ret
+ 262 .cfi_endproc
+ 263 .LFE521:
+ 264 .size KNullBlockCipherVecMake, .-KNullBlockCipherVecMake
+ 265 .section .rodata
+ 266 0047 00000000 .align 16
+ 266 00000000
+ 266 00
+ 267 .type __func__.6558, @object
+ 268 .size __func__.6558, 24
+ 269 __func__.6558:
+ 270 0050 4B4E756C .string "KNullBlockCipherVecMake"
+ 270 6C426C6F
+ 270 636B4369
+ 270 70686572
+ 270 5665634D
+ 271 0068 00000000 .align 16
+ 271 00000000
+
GAS LISTING /tmp/ccIvKeEl.s page 11
+
+
+ 272 .type __PRETTY_FUNCTION__.6557, @object
+ 273 .size __PRETTY_FUNCTION__.6557, 24
+ 274 __PRETTY_FUNCTION__.6557:
+ 275 0070 4B4E756C .string "KNullBlockCipherVecMake"
+ 275 6C426C6F
+ 275 636B4369
+ 275 70686572
+ 275 5665634D
+ 276 .text
+ 277 .Letext0:
+ 278 .section .debug_loc,"", at progbits
+ 279 .Ldebug_loc0:
+ 280 .LLST0:
+ 281 0000 00000000 .quad .LFB513-.Ltext0
+ 281 00000000
+ 282 0008 01000000 .quad .LCFI0-.Ltext0
+ 282 00000000
+ 283 0010 0200 .value 0x2
+ 284 0012 77 .byte 0x77
+ 285 0013 08 .sleb128 8
+ 286 0014 01000000 .quad .LCFI0-.Ltext0
+ 286 00000000
+ 287 001c 04000000 .quad .LCFI1-.Ltext0
+ 287 00000000
+ 288 0024 0200 .value 0x2
+ 289 0026 77 .byte 0x77
+ 290 0027 10 .sleb128 16
+ 291 0028 04000000 .quad .LCFI1-.Ltext0
+ 291 00000000
+ 292 0030 0A000000 .quad .LFE513-.Ltext0
+ 292 00000000
+ 293 0038 0200 .value 0x2
+ 294 003a 76 .byte 0x76
+ 295 003b 10 .sleb128 16
+ 296 003c 00000000 .quad 0x0
+ 296 00000000
+ 297 0044 00000000 .quad 0x0
+ 297 00000000
+ 298 .LLST1:
+ 299 004c 0A000000 .quad .LFB514-.Ltext0
+ 299 00000000
+ 300 0054 0B000000 .quad .LCFI2-.Ltext0
+ 300 00000000
+ 301 005c 0200 .value 0x2
+ 302 005e 77 .byte 0x77
+ 303 005f 08 .sleb128 8
+ 304 0060 0B000000 .quad .LCFI2-.Ltext0
+ 304 00000000
+ 305 0068 0E000000 .quad .LCFI3-.Ltext0
+ 305 00000000
+ 306 0070 0200 .value 0x2
+ 307 0072 77 .byte 0x77
+ 308 0073 10 .sleb128 16
+ 309 0074 0E000000 .quad .LCFI3-.Ltext0
+ 309 00000000
+ 310 007c 15000000 .quad .LFE514-.Ltext0
+ 310 00000000
+
GAS LISTING /tmp/ccIvKeEl.s page 12
+
+
+ 311 0084 0200 .value 0x2
+ 312 0086 76 .byte 0x76
+ 313 0087 10 .sleb128 16
+ 314 0088 00000000 .quad 0x0
+ 314 00000000
+ 315 0090 00000000 .quad 0x0
+ 315 00000000
+ 316 .LLST2:
+ 317 0098 15000000 .quad .LFB515-.Ltext0
+ 317 00000000
+ 318 00a0 16000000 .quad .LCFI4-.Ltext0
+ 318 00000000
+ 319 00a8 0200 .value 0x2
+ 320 00aa 77 .byte 0x77
+ 321 00ab 08 .sleb128 8
+ 322 00ac 16000000 .quad .LCFI4-.Ltext0
+ 322 00000000
+ 323 00b4 19000000 .quad .LCFI5-.Ltext0
+ 323 00000000
+ 324 00bc 0200 .value 0x2
+ 325 00be 77 .byte 0x77
+ 326 00bf 10 .sleb128 16
+ 327 00c0 19000000 .quad .LCFI5-.Ltext0
+ 327 00000000
+ 328 00c8 20000000 .quad .LFE515-.Ltext0
+ 328 00000000
+ 329 00d0 0200 .value 0x2
+ 330 00d2 76 .byte 0x76
+ 331 00d3 10 .sleb128 16
+ 332 00d4 00000000 .quad 0x0
+ 332 00000000
+ 333 00dc 00000000 .quad 0x0
+ 333 00000000
+ 334 .LLST3:
+ 335 00e4 20000000 .quad .LFB516-.Ltext0
+ 335 00000000
+ 336 00ec 21000000 .quad .LCFI6-.Ltext0
+ 336 00000000
+ 337 00f4 0200 .value 0x2
+ 338 00f6 77 .byte 0x77
+ 339 00f7 08 .sleb128 8
+ 340 00f8 21000000 .quad .LCFI6-.Ltext0
+ 340 00000000
+ 341 0100 24000000 .quad .LCFI7-.Ltext0
+ 341 00000000
+ 342 0108 0200 .value 0x2
+ 343 010a 77 .byte 0x77
+ 344 010b 10 .sleb128 16
+ 345 010c 24000000 .quad .LCFI7-.Ltext0
+ 345 00000000
+ 346 0114 36000000 .quad .LFE516-.Ltext0
+ 346 00000000
+ 347 011c 0200 .value 0x2
+ 348 011e 76 .byte 0x76
+ 349 011f 10 .sleb128 16
+ 350 0120 00000000 .quad 0x0
+ 350 00000000
+
GAS LISTING /tmp/ccIvKeEl.s page 13
+
+
+ 351 0128 00000000 .quad 0x0
+ 351 00000000
+ 352 .LLST4:
+ 353 0130 36000000 .quad .LFB517-.Ltext0
+ 353 00000000
+ 354 0138 37000000 .quad .LCFI8-.Ltext0
+ 354 00000000
+ 355 0140 0200 .value 0x2
+ 356 0142 77 .byte 0x77
+ 357 0143 08 .sleb128 8
+ 358 0144 37000000 .quad .LCFI8-.Ltext0
+ 358 00000000
+ 359 014c 3A000000 .quad .LCFI9-.Ltext0
+ 359 00000000
+ 360 0154 0200 .value 0x2
+ 361 0156 77 .byte 0x77
+ 362 0157 10 .sleb128 16
+ 363 0158 3A000000 .quad .LCFI9-.Ltext0
+ 363 00000000
+ 364 0160 4C000000 .quad .LFE517-.Ltext0
+ 364 00000000
+ 365 0168 0200 .value 0x2
+ 366 016a 76 .byte 0x76
+ 367 016b 10 .sleb128 16
+ 368 016c 00000000 .quad 0x0
+ 368 00000000
+ 369 0174 00000000 .quad 0x0
+ 369 00000000
+ 370 .LLST5:
+ 371 017c 4C000000 .quad .LFB518-.Ltext0
+ 371 00000000
+ 372 0184 4D000000 .quad .LCFI10-.Ltext0
+ 372 00000000
+ 373 018c 0200 .value 0x2
+ 374 018e 77 .byte 0x77
+ 375 018f 08 .sleb128 8
+ 376 0190 4D000000 .quad .LCFI10-.Ltext0
+ 376 00000000
+ 377 0198 50000000 .quad .LCFI11-.Ltext0
+ 377 00000000
+ 378 01a0 0200 .value 0x2
+ 379 01a2 77 .byte 0x77
+ 380 01a3 10 .sleb128 16
+ 381 01a4 50000000 .quad .LCFI11-.Ltext0
+ 381 00000000
+ 382 01ac 60000000 .quad .LFE518-.Ltext0
+ 382 00000000
+ 383 01b4 0200 .value 0x2
+ 384 01b6 76 .byte 0x76
+ 385 01b7 10 .sleb128 16
+ 386 01b8 00000000 .quad 0x0
+ 386 00000000
+ 387 01c0 00000000 .quad 0x0
+ 387 00000000
+ 388 .LLST6:
+ 389 01c8 60000000 .quad .LFB519-.Ltext0
+ 389 00000000
+
GAS LISTING /tmp/ccIvKeEl.s page 14
+
+
+ 390 01d0 61000000 .quad .LCFI12-.Ltext0
+ 390 00000000
+ 391 01d8 0200 .value 0x2
+ 392 01da 77 .byte 0x77
+ 393 01db 08 .sleb128 8
+ 394 01dc 61000000 .quad .LCFI12-.Ltext0
+ 394 00000000
+ 395 01e4 64000000 .quad .LCFI13-.Ltext0
+ 395 00000000
+ 396 01ec 0200 .value 0x2
+ 397 01ee 77 .byte 0x77
+ 398 01ef 10 .sleb128 16
+ 399 01f0 64000000 .quad .LCFI13-.Ltext0
+ 399 00000000
+ 400 01f8 74000000 .quad .LFE519-.Ltext0
+ 400 00000000
+ 401 0200 0200 .value 0x2
+ 402 0202 76 .byte 0x76
+ 403 0203 10 .sleb128 16
+ 404 0204 00000000 .quad 0x0
+ 404 00000000
+ 405 020c 00000000 .quad 0x0
+ 405 00000000
+ 406 .LLST7:
+ 407 0214 74000000 .quad .LFB520-.Ltext0
+ 407 00000000
+ 408 021c 75000000 .quad .LCFI14-.Ltext0
+ 408 00000000
+ 409 0224 0200 .value 0x2
+ 410 0226 77 .byte 0x77
+ 411 0227 08 .sleb128 8
+ 412 0228 75000000 .quad .LCFI14-.Ltext0
+ 412 00000000
+ 413 0230 78000000 .quad .LCFI15-.Ltext0
+ 413 00000000
+ 414 0238 0200 .value 0x2
+ 415 023a 77 .byte 0x77
+ 416 023b 10 .sleb128 16
+ 417 023c 78000000 .quad .LCFI15-.Ltext0
+ 417 00000000
+ 418 0244 7F000000 .quad .LFE520-.Ltext0
+ 418 00000000
+ 419 024c 0200 .value 0x2
+ 420 024e 76 .byte 0x76
+ 421 024f 10 .sleb128 16
+ 422 0250 00000000 .quad 0x0
+ 422 00000000
+ 423 0258 00000000 .quad 0x0
+ 423 00000000
+ 424 .LLST8:
+ 425 0260 7F000000 .quad .LFB521-.Ltext0
+ 425 00000000
+ 426 0268 80000000 .quad .LCFI16-.Ltext0
+ 426 00000000
+ 427 0270 0200 .value 0x2
+ 428 0272 77 .byte 0x77
+ 429 0273 08 .sleb128 8
+
GAS LISTING /tmp/ccIvKeEl.s page 15
+
+
+ 430 0274 80000000 .quad .LCFI16-.Ltext0
+ 430 00000000
+ 431 027c 83000000 .quad .LCFI17-.Ltext0
+ 431 00000000
+ 432 0284 0200 .value 0x2
+ 433 0286 77 .byte 0x77
+ 434 0287 10 .sleb128 16
+ 435 0288 83000000 .quad .LCFI17-.Ltext0
+ 435 00000000
+ 436 0290 0C010000 .quad .LFE521-.Ltext0
+ 436 00000000
+ 437 0298 0200 .value 0x2
+ 438 029a 76 .byte 0x76
+ 439 029b 10 .sleb128 16
+ 440 029c 00000000 .quad 0x0
+ 440 00000000
+ 441 02a4 00000000 .quad 0x0
+ 441 00000000
+ 442 .file 2 "/usr/include/stdint.h"
+ 443 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 444 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 445 .file 5 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 446 .file 6 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 447 .file 7 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 448 .file 8 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 449 .section .debug_info
+ 450 0000 6C0C0000 .long 0xc6c
+ 451 0004 0200 .value 0x2
+ 452 0006 00000000 .long .Ldebug_abbrev0
+ 453 000a 08 .byte 0x8
+ 454 000b 01 .uleb128 0x1
+ 455 000c 00000000 .long .LASF317
+ 456 0010 01 .byte 0x1
+ 457 0011 00000000 .long .LASF318
+ 458 0015 00000000 .long .LASF319
+ 459 0019 00000000 .quad .Ltext0
+ 459 00000000
+ 460 0021 00000000 .quad .Letext0
+ 460 00000000
+ 461 0029 00000000 .long .Ldebug_line0
+ 462 002d 02 .uleb128 0x2
+ 463 002e 01 .byte 0x1
+ 464 002f 06 .byte 0x6
+ 465 0030 00000000 .long .LASF0
+ 466 0034 02 .uleb128 0x2
+ 467 0035 02 .byte 0x2
+ 468 0036 05 .byte 0x5
+ 469 0037 00000000 .long .LASF1
+ 470 003b 03 .uleb128 0x3
+ 471 003c 04 .byte 0x4
+ 472 003d 05 .byte 0x5
+ 473 003e 696E7400 .string "int"
+ 474 0042 02 .uleb128 0x2
+ 475 0043 08 .byte 0x8
+ 476 0044 05 .byte 0x5
+ 477 0045 00000000 .long .LASF2
+ 478 0049 04 .uleb128 0x4
+
GAS LISTING /tmp/ccIvKeEl.s page 16
+
+
+ 479 004a 00000000 .long .LASF5
+ 480 004e 02 .byte 0x2
+ 481 004f 31 .byte 0x31
+ 482 0050 54000000 .long 0x54
+ 483 0054 02 .uleb128 0x2
+ 484 0055 01 .byte 0x1
+ 485 0056 08 .byte 0x8
+ 486 0057 00000000 .long .LASF3
+ 487 005b 02 .uleb128 0x2
+ 488 005c 02 .byte 0x2
+ 489 005d 07 .byte 0x7
+ 490 005e 00000000 .long .LASF4
+ 491 0062 04 .uleb128 0x4
+ 492 0063 00000000 .long .LASF6
+ 493 0067 02 .byte 0x2
+ 494 0068 34 .byte 0x34
+ 495 0069 6D000000 .long 0x6d
+ 496 006d 02 .uleb128 0x2
+ 497 006e 04 .byte 0x4
+ 498 006f 07 .byte 0x7
+ 499 0070 00000000 .long .LASF7
+ 500 0074 02 .uleb128 0x2
+ 501 0075 08 .byte 0x8
+ 502 0076 07 .byte 0x7
+ 503 0077 00000000 .long .LASF8
+ 504 007b 04 .uleb128 0x4
+ 505 007c 00000000 .long .LASF9
+ 506 0080 03 .byte 0x3
+ 507 0081 30 .byte 0x30
+ 508 0082 62000000 .long 0x62
+ 509 0086 05 .uleb128 0x5
+ 510 0087 08 .byte 0x8
+ 511 0088 06 .uleb128 0x6
+ 512 0089 08 .byte 0x8
+ 513 008a 07 .byte 0x7
+ 514 008b 07 .uleb128 0x7
+ 515 008c 08 .byte 0x8
+ 516 008d 91000000 .long 0x91
+ 517 0091 08 .uleb128 0x8
+ 518 0092 96000000 .long 0x96
+ 519 0096 02 .uleb128 0x2
+ 520 0097 01 .byte 0x1
+ 521 0098 06 .byte 0x6
+ 522 0099 00000000 .long .LASF10
+ 523 009d 09 .uleb128 0x9
+ 524 009e 04 .byte 0x4
+ 525 009f 08 .byte 0x8
+ 526 00a0 D6 .byte 0xd6
+ 527 00a1 1E010000 .long 0x11e
+ 528 00a5 0A .uleb128 0xa
+ 529 00a6 00000000 .long .LASF11
+ 530 00aa 7F .sleb128 -1
+ 531 00ab 0A .uleb128 0xa
+ 532 00ac 00000000 .long .LASF12
+ 533 00b0 00 .sleb128 0
+ 534 00b1 0A .uleb128 0xa
+ 535 00b2 00000000 .long .LASF13
+
GAS LISTING /tmp/ccIvKeEl.s page 17
+
+
+ 536 00b6 01 .sleb128 1
+ 537 00b7 0A .uleb128 0xa
+ 538 00b8 00000000 .long .LASF14
+ 539 00bc 02 .sleb128 2
+ 540 00bd 0A .uleb128 0xa
+ 541 00be 00000000 .long .LASF15
+ 542 00c2 03 .sleb128 3
+ 543 00c3 0A .uleb128 0xa
+ 544 00c4 00000000 .long .LASF16
+ 545 00c8 04 .sleb128 4
+ 546 00c9 0A .uleb128 0xa
+ 547 00ca 00000000 .long .LASF17
+ 548 00ce 05 .sleb128 5
+ 549 00cf 0A .uleb128 0xa
+ 550 00d0 00000000 .long .LASF18
+ 551 00d4 06 .sleb128 6
+ 552 00d5 0A .uleb128 0xa
+ 553 00d6 00000000 .long .LASF19
+ 554 00da 07 .sleb128 7
+ 555 00db 0A .uleb128 0xa
+ 556 00dc 00000000 .long .LASF20
+ 557 00e0 08 .sleb128 8
+ 558 00e1 0A .uleb128 0xa
+ 559 00e2 00000000 .long .LASF21
+ 560 00e6 09 .sleb128 9
+ 561 00e7 0A .uleb128 0xa
+ 562 00e8 00000000 .long .LASF22
+ 563 00ec 0A .sleb128 10
+ 564 00ed 0A .uleb128 0xa
+ 565 00ee 00000000 .long .LASF23
+ 566 00f2 0B .sleb128 11
+ 567 00f3 0A .uleb128 0xa
+ 568 00f4 00000000 .long .LASF24
+ 569 00f8 0C .sleb128 12
+ 570 00f9 0A .uleb128 0xa
+ 571 00fa 00000000 .long .LASF25
+ 572 00fe 0D .sleb128 13
+ 573 00ff 0A .uleb128 0xa
+ 574 0100 00000000 .long .LASF26
+ 575 0104 0E .sleb128 14
+ 576 0105 0A .uleb128 0xa
+ 577 0106 00000000 .long .LASF27
+ 578 010a 0F .sleb128 15
+ 579 010b 0A .uleb128 0xa
+ 580 010c 00000000 .long .LASF28
+ 581 0110 10 .sleb128 16
+ 582 0111 0A .uleb128 0xa
+ 583 0112 00000000 .long .LASF29
+ 584 0116 11 .sleb128 17
+ 585 0117 0A .uleb128 0xa
+ 586 0118 00000000 .long .LASF30
+ 587 011c 12 .sleb128 18
+ 588 011d 00 .byte 0x0
+ 589 011e 07 .uleb128 0x7
+ 590 011f 08 .byte 0x8
+ 591 0120 24010000 .long 0x124
+ 592 0124 0B .uleb128 0xb
+
GAS LISTING /tmp/ccIvKeEl.s page 18
+
+
+ 593 0125 02 .uleb128 0x2
+ 594 0126 08 .byte 0x8
+ 595 0127 05 .byte 0x5
+ 596 0128 00000000 .long .LASF31
+ 597 012c 02 .uleb128 0x2
+ 598 012d 04 .byte 0x4
+ 599 012e 04 .byte 0x4
+ 600 012f 00000000 .long .LASF32
+ 601 0133 07 .uleb128 0x7
+ 602 0134 08 .byte 0x8
+ 603 0135 96000000 .long 0x96
+ 604 0139 02 .uleb128 0x2
+ 605 013a 08 .byte 0x8
+ 606 013b 07 .byte 0x7
+ 607 013c 00000000 .long .LASF33
+ 608 0140 02 .uleb128 0x2
+ 609 0141 08 .byte 0x8
+ 610 0142 04 .byte 0x4
+ 611 0143 00000000 .long .LASF34
+ 612 0147 04 .uleb128 0x4
+ 613 0148 00000000 .long .LASF35
+ 614 014c 04 .byte 0x4
+ 615 014d 26 .byte 0x26
+ 616 014e 52010000 .long 0x152
+ 617 0152 0C .uleb128 0xc
+ 618 0153 01 .byte 0x1
+ 619 0154 49000000 .long 0x49
+ 620 0158 63010000 .long 0x163
+ 621 015c 0D .uleb128 0xd
+ 622 015d 88000000 .long 0x88
+ 623 0161 0F .byte 0xf
+ 624 0162 00 .byte 0x0
+ 625 0163 04 .uleb128 0x4
+ 626 0164 00000000 .long .LASF36
+ 627 0168 05 .byte 0x5
+ 628 0169 3B .byte 0x3b
+ 629 016a 47010000 .long 0x147
+ 630 016e 04 .uleb128 0x4
+ 631 016f 00000000 .long .LASF37
+ 632 0173 05 .byte 0x5
+ 633 0174 43 .byte 0x43
+ 634 0175 79010000 .long 0x179
+ 635 0179 0E .uleb128 0xe
+ 636 017a 00000000 .long .LASF37
+ 637 017e 08 .byte 0x8
+ 638 017f 05 .byte 0x5
+ 639 0180 43 .byte 0x43
+ 640 0181 A2010000 .long 0x1a2
+ 641 0185 0F .uleb128 0xf
+ 642 0186 6D616A00 .string "maj"
+ 643 018a 05 .byte 0x5
+ 644 018b 46 .byte 0x46
+ 645 018c 62000000 .long 0x62
+ 646 0190 02 .byte 0x2
+ 647 0191 23 .byte 0x23
+ 648 0192 00 .uleb128 0x0
+ 649 0193 0F .uleb128 0xf
+
GAS LISTING /tmp/ccIvKeEl.s page 19
+
+
+ 650 0194 6D696E00 .string "min"
+ 651 0198 05 .byte 0x5
+ 652 0199 47 .byte 0x47
+ 653 019a 62000000 .long 0x62
+ 654 019e 02 .byte 0x2
+ 655 019f 23 .byte 0x23
+ 656 01a0 04 .uleb128 0x4
+ 657 01a1 00 .byte 0x0
+ 658 01a2 04 .uleb128 0x4
+ 659 01a3 00000000 .long .LASF38
+ 660 01a7 05 .byte 0x5
+ 661 01a8 52 .byte 0x52
+ 662 01a9 AD010000 .long 0x1ad
+ 663 01ad 0E .uleb128 0xe
+ 664 01ae 00000000 .long .LASF38
+ 665 01b2 40 .byte 0x40
+ 666 01b3 05 .byte 0x5
+ 667 01b4 52 .byte 0x52
+ 668 01b5 2A020000 .long 0x22a
+ 669 01b9 10 .uleb128 0x10
+ 670 01ba 00000000 .long .LASF39
+ 671 01be 05 .byte 0x5
+ 672 01bf 5E .byte 0x5e
+ 673 01c0 6E010000 .long 0x16e
+ 674 01c4 02 .byte 0x2
+ 675 01c5 23 .byte 0x23
+ 676 01c6 00 .uleb128 0x0
+ 677 01c7 10 .uleb128 0x10
+ 678 01c8 00000000 .long .LASF40
+ 679 01cc 05 .byte 0x5
+ 680 01cd 63 .byte 0x63
+ 681 01ce 6E020000 .long 0x26e
+ 682 01d2 02 .byte 0x2
+ 683 01d3 23 .byte 0x23
+ 684 01d4 08 .uleb128 0x8
+ 685 01d5 10 .uleb128 0x10
+ 686 01d6 00000000 .long .LASF41
+ 687 01da 05 .byte 0x5
+ 688 01db 65 .byte 0x65
+ 689 01dc 7F020000 .long 0x27f
+ 690 01e0 02 .byte 0x2
+ 691 01e1 23 .byte 0x23
+ 692 01e2 10 .uleb128 0x10
+ 693 01e3 10 .uleb128 0x10
+ 694 01e4 00000000 .long .LASF42
+ 695 01e8 05 .byte 0x5
+ 696 01e9 67 .byte 0x67
+ 697 01ea 7F020000 .long 0x27f
+ 698 01ee 02 .byte 0x2
+ 699 01ef 23 .byte 0x23
+ 700 01f0 18 .uleb128 0x18
+ 701 01f1 10 .uleb128 0x10
+ 702 01f2 00000000 .long .LASF43
+ 703 01f6 05 .byte 0x5
+ 704 01f7 69 .byte 0x69
+ 705 01f8 9F020000 .long 0x29f
+ 706 01fc 02 .byte 0x2
+
GAS LISTING /tmp/ccIvKeEl.s page 20
+
+
+ 707 01fd 23 .byte 0x23
+ 708 01fe 20 .uleb128 0x20
+ 709 01ff 10 .uleb128 0x10
+ 710 0200 00000000 .long .LASF44
+ 711 0204 05 .byte 0x5
+ 712 0205 6D .byte 0x6d
+ 713 0206 9F020000 .long 0x29f
+ 714 020a 02 .byte 0x2
+ 715 020b 23 .byte 0x23
+ 716 020c 28 .uleb128 0x28
+ 717 020d 10 .uleb128 0x10
+ 718 020e 00000000 .long .LASF45
+ 719 0212 05 .byte 0x5
+ 720 0213 71 .byte 0x71
+ 721 0214 BB020000 .long 0x2bb
+ 722 0218 02 .byte 0x2
+ 723 0219 23 .byte 0x23
+ 724 021a 30 .uleb128 0x30
+ 725 021b 10 .uleb128 0x10
+ 726 021c 00000000 .long .LASF46
+ 727 0220 05 .byte 0x5
+ 728 0221 75 .byte 0x75
+ 729 0222 BB020000 .long 0x2bb
+ 730 0226 02 .byte 0x2
+ 731 0227 23 .byte 0x23
+ 732 0228 38 .uleb128 0x38
+ 733 0229 00 .byte 0x0
+ 734 022a 04 .uleb128 0x4
+ 735 022b 00000000 .long .LASF47
+ 736 022f 05 .byte 0x5
+ 737 0230 53 .byte 0x53
+ 738 0231 35020000 .long 0x235
+ 739 0235 11 .uleb128 0x11
+ 740 0236 00000000 .long .LASF47
+ 741 023a 40 .byte 0x40
+ 742 023b 05 .byte 0x5
+ 743 023c 53 .byte 0x53
+ 744 023d 57020000 .long 0x257
+ 745 0241 12 .uleb128 0x12
+ 746 0242 00000000 .long .LASF39
+ 747 0246 05 .byte 0x5
+ 748 0247 7F .byte 0x7f
+ 749 0248 6E010000 .long 0x16e
+ 750 024c 13 .uleb128 0x13
+ 751 024d 763100 .string "v1"
+ 752 0250 05 .byte 0x5
+ 753 0251 80 .byte 0x80
+ 754 0252 A2010000 .long 0x1a2
+ 755 0256 00 .byte 0x0
+ 756 0257 14 .uleb128 0x14
+ 757 0258 01 .byte 0x1
+ 758 0259 63020000 .long 0x263
+ 759 025d 15 .uleb128 0x15
+ 760 025e 63020000 .long 0x263
+ 761 0262 00 .byte 0x0
+ 762 0263 07 .uleb128 0x7
+ 763 0264 08 .byte 0x8
+
GAS LISTING /tmp/ccIvKeEl.s page 21
+
+
+ 764 0265 69020000 .long 0x269
+ 765 0269 08 .uleb128 0x8
+ 766 026a 2A020000 .long 0x22a
+ 767 026e 07 .uleb128 0x7
+ 768 026f 08 .byte 0x8
+ 769 0270 57020000 .long 0x257
+ 770 0274 16 .uleb128 0x16
+ 771 0275 62000000 .long 0x62
+ 772 0279 7F020000 .long 0x27f
+ 773 027d 17 .uleb128 0x17
+ 774 027e 00 .byte 0x0
+ 775 027f 07 .uleb128 0x7
+ 776 0280 08 .byte 0x8
+ 777 0281 74020000 .long 0x274
+ 778 0285 18 .uleb128 0x18
+ 779 0286 01 .byte 0x1
+ 780 0287 7B000000 .long 0x7b
+ 781 028b 9F020000 .long 0x29f
+ 782 028f 15 .uleb128 0x15
+ 783 0290 86000000 .long 0x86
+ 784 0294 15 .uleb128 0x15
+ 785 0295 8B000000 .long 0x8b
+ 786 0299 15 .uleb128 0x15
+ 787 029a 62000000 .long 0x62
+ 788 029e 00 .byte 0x0
+ 789 029f 07 .uleb128 0x7
+ 790 02a0 08 .byte 0x8
+ 791 02a1 85020000 .long 0x285
+ 792 02a5 14 .uleb128 0x14
+ 793 02a6 01 .byte 0x1
+ 794 02a7 BB020000 .long 0x2bb
+ 795 02ab 15 .uleb128 0x15
+ 796 02ac 8B000000 .long 0x8b
+ 797 02b0 15 .uleb128 0x15
+ 798 02b1 33010000 .long 0x133
+ 799 02b5 15 .uleb128 0x15
+ 800 02b6 1E010000 .long 0x11e
+ 801 02ba 00 .byte 0x0
+ 802 02bb 07 .uleb128 0x7
+ 803 02bc 08 .byte 0x8
+ 804 02bd A5020000 .long 0x2a5
+ 805 02c1 04 .uleb128 0x4
+ 806 02c2 00000000 .long .LASF48
+ 807 02c6 05 .byte 0x5
+ 808 02c7 84 .byte 0x84
+ 809 02c8 CC020000 .long 0x2cc
+ 810 02cc 0E .uleb128 0xe
+ 811 02cd 00000000 .long .LASF48
+ 812 02d1 40 .byte 0x40
+ 813 02d2 05 .byte 0x5
+ 814 02d3 84 .byte 0x84
+ 815 02d4 49030000 .long 0x349
+ 816 02d8 10 .uleb128 0x10
+ 817 02d9 00000000 .long .LASF39
+ 818 02dd 05 .byte 0x5
+ 819 02de 90 .byte 0x90
+ 820 02df 6E010000 .long 0x16e
+
GAS LISTING /tmp/ccIvKeEl.s page 22
+
+
+ 821 02e3 02 .byte 0x2
+ 822 02e4 23 .byte 0x23
+ 823 02e5 00 .uleb128 0x0
+ 824 02e6 10 .uleb128 0x10
+ 825 02e7 00000000 .long .LASF40
+ 826 02eb 05 .byte 0x5
+ 827 02ec 95 .byte 0x95
+ 828 02ed 8D030000 .long 0x38d
+ 829 02f1 02 .byte 0x2
+ 830 02f2 23 .byte 0x23
+ 831 02f3 08 .uleb128 0x8
+ 832 02f4 10 .uleb128 0x10
+ 833 02f5 00000000 .long .LASF41
+ 834 02f9 05 .byte 0x5
+ 835 02fa 97 .byte 0x97
+ 836 02fb 7F020000 .long 0x27f
+ 837 02ff 02 .byte 0x2
+ 838 0300 23 .byte 0x23
+ 839 0301 10 .uleb128 0x10
+ 840 0302 10 .uleb128 0x10
+ 841 0303 00000000 .long .LASF42
+ 842 0307 05 .byte 0x5
+ 843 0308 99 .byte 0x99
+ 844 0309 7F020000 .long 0x27f
+ 845 030d 02 .byte 0x2
+ 846 030e 23 .byte 0x23
+ 847 030f 18 .uleb128 0x18
+ 848 0310 10 .uleb128 0x10
+ 849 0311 00000000 .long .LASF43
+ 850 0315 05 .byte 0x5
+ 851 0316 9B .byte 0x9b
+ 852 0317 9F020000 .long 0x29f
+ 853 031b 02 .byte 0x2
+ 854 031c 23 .byte 0x23
+ 855 031d 20 .uleb128 0x20
+ 856 031e 10 .uleb128 0x10
+ 857 031f 00000000 .long .LASF44
+ 858 0323 05 .byte 0x5
+ 859 0324 9F .byte 0x9f
+ 860 0325 9F020000 .long 0x29f
+ 861 0329 02 .byte 0x2
+ 862 032a 23 .byte 0x23
+ 863 032b 28 .uleb128 0x28
+ 864 032c 10 .uleb128 0x10
+ 865 032d 00000000 .long .LASF45
+ 866 0331 05 .byte 0x5
+ 867 0332 A3 .byte 0xa3
+ 868 0333 A8030000 .long 0x3a8
+ 869 0337 02 .byte 0x2
+ 870 0338 23 .byte 0x23
+ 871 0339 30 .uleb128 0x30
+ 872 033a 10 .uleb128 0x10
+ 873 033b 00000000 .long .LASF46
+ 874 033f 05 .byte 0x5
+ 875 0340 A6 .byte 0xa6
+ 876 0341 A8030000 .long 0x3a8
+ 877 0345 02 .byte 0x2
+
GAS LISTING /tmp/ccIvKeEl.s page 23
+
+
+ 878 0346 23 .byte 0x23
+ 879 0347 38 .uleb128 0x38
+ 880 0348 00 .byte 0x0
+ 881 0349 04 .uleb128 0x4
+ 882 034a 00000000 .long .LASF49
+ 883 034e 05 .byte 0x5
+ 884 034f 85 .byte 0x85
+ 885 0350 54030000 .long 0x354
+ 886 0354 11 .uleb128 0x11
+ 887 0355 00000000 .long .LASF49
+ 888 0359 40 .byte 0x40
+ 889 035a 05 .byte 0x5
+ 890 035b 85 .byte 0x85
+ 891 035c 76030000 .long 0x376
+ 892 0360 12 .uleb128 0x12
+ 893 0361 00000000 .long .LASF39
+ 894 0365 05 .byte 0x5
+ 895 0366 AF .byte 0xaf
+ 896 0367 6E010000 .long 0x16e
+ 897 036b 13 .uleb128 0x13
+ 898 036c 763100 .string "v1"
+ 899 036f 05 .byte 0x5
+ 900 0370 B0 .byte 0xb0
+ 901 0371 C1020000 .long 0x2c1
+ 902 0375 00 .byte 0x0
+ 903 0376 14 .uleb128 0x14
+ 904 0377 01 .byte 0x1
+ 905 0378 82030000 .long 0x382
+ 906 037c 15 .uleb128 0x15
+ 907 037d 82030000 .long 0x382
+ 908 0381 00 .byte 0x0
+ 909 0382 07 .uleb128 0x7
+ 910 0383 08 .byte 0x8
+ 911 0384 88030000 .long 0x388
+ 912 0388 08 .uleb128 0x8
+ 913 0389 49030000 .long 0x349
+ 914 038d 07 .uleb128 0x7
+ 915 038e 08 .byte 0x8
+ 916 038f 76030000 .long 0x376
+ 917 0393 18 .uleb128 0x18
+ 918 0394 01 .byte 0x1
+ 919 0395 63010000 .long 0x163
+ 920 0399 A8030000 .long 0x3a8
+ 921 039d 15 .uleb128 0x15
+ 922 039e 63010000 .long 0x163
+ 923 03a2 15 .uleb128 0x15
+ 924 03a3 1E010000 .long 0x11e
+ 925 03a7 00 .byte 0x0
+ 926 03a8 07 .uleb128 0x7
+ 927 03a9 08 .byte 0x8
+ 928 03aa 93030000 .long 0x393
+ 929 03ae 04 .uleb128 0x4
+ 930 03af 00000000 .long .LASF50
+ 931 03b3 06 .byte 0x6
+ 932 03b4 40 .byte 0x40
+ 933 03b5 B9030000 .long 0x3b9
+ 934 03b9 11 .uleb128 0x11
+
GAS LISTING /tmp/ccIvKeEl.s page 24
+
+
+ 935 03ba 00000000 .long .LASF50
+ 936 03be 40 .byte 0x40
+ 937 03bf 06 .byte 0x6
+ 938 03c0 40 .byte 0x40
+ 939 03c1 DC030000 .long 0x3dc
+ 940 03c5 12 .uleb128 0x12
+ 941 03c6 00000000 .long .LASF51
+ 942 03ca 06 .byte 0x6
+ 943 03cb 43 .byte 0x43
+ 944 03cc 2A020000 .long 0x22a
+ 945 03d0 13 .uleb128 0x13
+ 946 03d1 76656300 .string "vec"
+ 947 03d5 06 .byte 0x6
+ 948 03d6 44 .byte 0x44
+ 949 03d7 49030000 .long 0x349
+ 950 03db 00 .byte 0x0
+ 951 03dc 19 .uleb128 0x19
+ 952 03dd 00000000 .long .LASF74
+ 953 03e1 04 .byte 0x4
+ 954 03e2 07 .byte 0x7
+ 955 03e3 5A .byte 0x5a
+ 956 03e4 6D040000 .long 0x46d
+ 957 03e8 0A .uleb128 0xa
+ 958 03e9 00000000 .long .LASF52
+ 959 03ed 00 .sleb128 0
+ 960 03ee 0A .uleb128 0xa
+ 961 03ef 00000000 .long .LASF53
+ 962 03f3 01 .sleb128 1
+ 963 03f4 0A .uleb128 0xa
+ 964 03f5 00000000 .long .LASF54
+ 965 03f9 02 .sleb128 2
+ 966 03fa 0A .uleb128 0xa
+ 967 03fb 00000000 .long .LASF55
+ 968 03ff 03 .sleb128 3
+ 969 0400 0A .uleb128 0xa
+ 970 0401 00000000 .long .LASF56
+ 971 0405 04 .sleb128 4
+ 972 0406 0A .uleb128 0xa
+ 973 0407 00000000 .long .LASF57
+ 974 040b 05 .sleb128 5
+ 975 040c 0A .uleb128 0xa
+ 976 040d 00000000 .long .LASF58
+ 977 0411 06 .sleb128 6
+ 978 0412 0A .uleb128 0xa
+ 979 0413 00000000 .long .LASF59
+ 980 0417 07 .sleb128 7
+ 981 0418 0A .uleb128 0xa
+ 982 0419 00000000 .long .LASF60
+ 983 041d 08 .sleb128 8
+ 984 041e 0A .uleb128 0xa
+ 985 041f 00000000 .long .LASF61
+ 986 0423 09 .sleb128 9
+ 987 0424 0A .uleb128 0xa
+ 988 0425 00000000 .long .LASF62
+ 989 0429 0A .sleb128 10
+ 990 042a 0A .uleb128 0xa
+ 991 042b 00000000 .long .LASF63
+
GAS LISTING /tmp/ccIvKeEl.s page 25
+
+
+ 992 042f 0B .sleb128 11
+ 993 0430 0A .uleb128 0xa
+ 994 0431 00000000 .long .LASF64
+ 995 0435 0C .sleb128 12
+ 996 0436 0A .uleb128 0xa
+ 997 0437 00000000 .long .LASF65
+ 998 043b 0D .sleb128 13
+ 999 043c 0A .uleb128 0xa
+ 1000 043d 00000000 .long .LASF66
+ 1001 0441 0E .sleb128 14
+ 1002 0442 0A .uleb128 0xa
+ 1003 0443 00000000 .long .LASF67
+ 1004 0447 0E .sleb128 14
+ 1005 0448 0A .uleb128 0xa
+ 1006 0449 00000000 .long .LASF68
+ 1007 044d 0F .sleb128 15
+ 1008 044e 0A .uleb128 0xa
+ 1009 044f 00000000 .long .LASF69
+ 1010 0453 10 .sleb128 16
+ 1011 0454 0A .uleb128 0xa
+ 1012 0455 00000000 .long .LASF70
+ 1013 0459 11 .sleb128 17
+ 1014 045a 0A .uleb128 0xa
+ 1015 045b 00000000 .long .LASF71
+ 1016 045f 12 .sleb128 18
+ 1017 0460 0A .uleb128 0xa
+ 1018 0461 00000000 .long .LASF72
+ 1019 0465 13 .sleb128 19
+ 1020 0466 0A .uleb128 0xa
+ 1021 0467 00000000 .long .LASF73
+ 1022 046b 14 .sleb128 20
+ 1023 046c 00 .byte 0x0
+ 1024 046d 19 .uleb128 0x19
+ 1025 046e 00000000 .long .LASF75
+ 1026 0472 04 .byte 0x4
+ 1027 0473 07 .byte 0x7
+ 1028 0474 77 .byte 0x77
+ 1029 0475 F4050000 .long 0x5f4
+ 1030 0479 0A .uleb128 0xa
+ 1031 047a 00000000 .long .LASF76
+ 1032 047e 00 .sleb128 0
+ 1033 047f 0A .uleb128 0xa
+ 1034 0480 00000000 .long .LASF77
+ 1035 0484 01 .sleb128 1
+ 1036 0485 0A .uleb128 0xa
+ 1037 0486 00000000 .long .LASF78
+ 1038 048a 02 .sleb128 2
+ 1039 048b 0A .uleb128 0xa
+ 1040 048c 00000000 .long .LASF79
+ 1041 0490 03 .sleb128 3
+ 1042 0491 0A .uleb128 0xa
+ 1043 0492 00000000 .long .LASF80
+ 1044 0496 04 .sleb128 4
+ 1045 0497 0A .uleb128 0xa
+ 1046 0498 00000000 .long .LASF81
+ 1047 049c 05 .sleb128 5
+ 1048 049d 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s page 26
+
+
+ 1049 049e 00000000 .long .LASF82
+ 1050 04a2 06 .sleb128 6
+ 1051 04a3 0A .uleb128 0xa
+ 1052 04a4 00000000 .long .LASF83
+ 1053 04a8 07 .sleb128 7
+ 1054 04a9 0A .uleb128 0xa
+ 1055 04aa 00000000 .long .LASF84
+ 1056 04ae 08 .sleb128 8
+ 1057 04af 0A .uleb128 0xa
+ 1058 04b0 00000000 .long .LASF85
+ 1059 04b4 09 .sleb128 9
+ 1060 04b5 0A .uleb128 0xa
+ 1061 04b6 00000000 .long .LASF86
+ 1062 04ba 0A .sleb128 10
+ 1063 04bb 0A .uleb128 0xa
+ 1064 04bc 00000000 .long .LASF87
+ 1065 04c0 0B .sleb128 11
+ 1066 04c1 0A .uleb128 0xa
+ 1067 04c2 00000000 .long .LASF88
+ 1068 04c6 0C .sleb128 12
+ 1069 04c7 0A .uleb128 0xa
+ 1070 04c8 00000000 .long .LASF89
+ 1071 04cc 0D .sleb128 13
+ 1072 04cd 0A .uleb128 0xa
+ 1073 04ce 00000000 .long .LASF90
+ 1074 04d2 0E .sleb128 14
+ 1075 04d3 0A .uleb128 0xa
+ 1076 04d4 00000000 .long .LASF91
+ 1077 04d8 0F .sleb128 15
+ 1078 04d9 0A .uleb128 0xa
+ 1079 04da 00000000 .long .LASF92
+ 1080 04de 10 .sleb128 16
+ 1081 04df 0A .uleb128 0xa
+ 1082 04e0 00000000 .long .LASF93
+ 1083 04e4 11 .sleb128 17
+ 1084 04e5 0A .uleb128 0xa
+ 1085 04e6 00000000 .long .LASF94
+ 1086 04ea 12 .sleb128 18
+ 1087 04eb 0A .uleb128 0xa
+ 1088 04ec 00000000 .long .LASF95
+ 1089 04f0 13 .sleb128 19
+ 1090 04f1 0A .uleb128 0xa
+ 1091 04f2 00000000 .long .LASF96
+ 1092 04f6 14 .sleb128 20
+ 1093 04f7 0A .uleb128 0xa
+ 1094 04f8 00000000 .long .LASF97
+ 1095 04fc 15 .sleb128 21
+ 1096 04fd 0A .uleb128 0xa
+ 1097 04fe 00000000 .long .LASF98
+ 1098 0502 16 .sleb128 22
+ 1099 0503 0A .uleb128 0xa
+ 1100 0504 00000000 .long .LASF99
+ 1101 0508 17 .sleb128 23
+ 1102 0509 0A .uleb128 0xa
+ 1103 050a 00000000 .long .LASF100
+ 1104 050e 18 .sleb128 24
+ 1105 050f 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s page 27
+
+
+ 1106 0510 00000000 .long .LASF101
+ 1107 0514 19 .sleb128 25
+ 1108 0515 0A .uleb128 0xa
+ 1109 0516 00000000 .long .LASF102
+ 1110 051a 1A .sleb128 26
+ 1111 051b 0A .uleb128 0xa
+ 1112 051c 00000000 .long .LASF103
+ 1113 0520 1B .sleb128 27
+ 1114 0521 0A .uleb128 0xa
+ 1115 0522 00000000 .long .LASF104
+ 1116 0526 1C .sleb128 28
+ 1117 0527 0A .uleb128 0xa
+ 1118 0528 00000000 .long .LASF105
+ 1119 052c 1D .sleb128 29
+ 1120 052d 0A .uleb128 0xa
+ 1121 052e 00000000 .long .LASF106
+ 1122 0532 1E .sleb128 30
+ 1123 0533 0A .uleb128 0xa
+ 1124 0534 00000000 .long .LASF107
+ 1125 0538 1F .sleb128 31
+ 1126 0539 0A .uleb128 0xa
+ 1127 053a 00000000 .long .LASF108
+ 1128 053e 20 .sleb128 32
+ 1129 053f 0A .uleb128 0xa
+ 1130 0540 00000000 .long .LASF109
+ 1131 0544 21 .sleb128 33
+ 1132 0545 0A .uleb128 0xa
+ 1133 0546 00000000 .long .LASF110
+ 1134 054a 22 .sleb128 34
+ 1135 054b 0A .uleb128 0xa
+ 1136 054c 00000000 .long .LASF111
+ 1137 0550 23 .sleb128 35
+ 1138 0551 0A .uleb128 0xa
+ 1139 0552 00000000 .long .LASF112
+ 1140 0556 24 .sleb128 36
+ 1141 0557 0A .uleb128 0xa
+ 1142 0558 00000000 .long .LASF113
+ 1143 055c 25 .sleb128 37
+ 1144 055d 0A .uleb128 0xa
+ 1145 055e 00000000 .long .LASF114
+ 1146 0562 26 .sleb128 38
+ 1147 0563 0A .uleb128 0xa
+ 1148 0564 00000000 .long .LASF115
+ 1149 0568 27 .sleb128 39
+ 1150 0569 0A .uleb128 0xa
+ 1151 056a 00000000 .long .LASF116
+ 1152 056e 28 .sleb128 40
+ 1153 056f 0A .uleb128 0xa
+ 1154 0570 00000000 .long .LASF117
+ 1155 0574 29 .sleb128 41
+ 1156 0575 0A .uleb128 0xa
+ 1157 0576 00000000 .long .LASF118
+ 1158 057a 2A .sleb128 42
+ 1159 057b 0A .uleb128 0xa
+ 1160 057c 00000000 .long .LASF119
+ 1161 0580 2B .sleb128 43
+ 1162 0581 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s page 28
+
+
+ 1163 0582 00000000 .long .LASF120
+ 1164 0586 2C .sleb128 44
+ 1165 0587 0A .uleb128 0xa
+ 1166 0588 00000000 .long .LASF121
+ 1167 058c 2D .sleb128 45
+ 1168 058d 0A .uleb128 0xa
+ 1169 058e 00000000 .long .LASF122
+ 1170 0592 2E .sleb128 46
+ 1171 0593 0A .uleb128 0xa
+ 1172 0594 00000000 .long .LASF123
+ 1173 0598 2F .sleb128 47
+ 1174 0599 0A .uleb128 0xa
+ 1175 059a 00000000 .long .LASF124
+ 1176 059e 30 .sleb128 48
+ 1177 059f 0A .uleb128 0xa
+ 1178 05a0 00000000 .long .LASF125
+ 1179 05a4 31 .sleb128 49
+ 1180 05a5 0A .uleb128 0xa
+ 1181 05a6 00000000 .long .LASF126
+ 1182 05aa 32 .sleb128 50
+ 1183 05ab 0A .uleb128 0xa
+ 1184 05ac 00000000 .long .LASF127
+ 1185 05b0 33 .sleb128 51
+ 1186 05b1 0A .uleb128 0xa
+ 1187 05b2 00000000 .long .LASF128
+ 1188 05b6 34 .sleb128 52
+ 1189 05b7 0A .uleb128 0xa
+ 1190 05b8 00000000 .long .LASF129
+ 1191 05bc 35 .sleb128 53
+ 1192 05bd 0A .uleb128 0xa
+ 1193 05be 00000000 .long .LASF130
+ 1194 05c2 36 .sleb128 54
+ 1195 05c3 0A .uleb128 0xa
+ 1196 05c4 00000000 .long .LASF131
+ 1197 05c8 36 .sleb128 54
+ 1198 05c9 0A .uleb128 0xa
+ 1199 05ca 00000000 .long .LASF132
+ 1200 05ce 37 .sleb128 55
+ 1201 05cf 0A .uleb128 0xa
+ 1202 05d0 00000000 .long .LASF133
+ 1203 05d4 38 .sleb128 56
+ 1204 05d5 0A .uleb128 0xa
+ 1205 05d6 00000000 .long .LASF134
+ 1206 05da 39 .sleb128 57
+ 1207 05db 0A .uleb128 0xa
+ 1208 05dc 00000000 .long .LASF135
+ 1209 05e0 3A .sleb128 58
+ 1210 05e1 0A .uleb128 0xa
+ 1211 05e2 00000000 .long .LASF136
+ 1212 05e6 3B .sleb128 59
+ 1213 05e7 0A .uleb128 0xa
+ 1214 05e8 00000000 .long .LASF137
+ 1215 05ec 3C .sleb128 60
+ 1216 05ed 0A .uleb128 0xa
+ 1217 05ee 00000000 .long .LASF138
+ 1218 05f2 3D .sleb128 61
+ 1219 05f3 00 .byte 0x0
+
GAS LISTING /tmp/ccIvKeEl.s page 29
+
+
+ 1220 05f4 19 .uleb128 0x19
+ 1221 05f5 00000000 .long .LASF139
+ 1222 05f9 04 .byte 0x4
+ 1223 05fa 07 .byte 0x7
+ 1224 05fb BD .byte 0xbd
+ 1225 05fc AA070000 .long 0x7aa
+ 1226 0600 0A .uleb128 0xa
+ 1227 0601 00000000 .long .LASF140
+ 1228 0605 00 .sleb128 0
+ 1229 0606 0A .uleb128 0xa
+ 1230 0607 00000000 .long .LASF141
+ 1231 060b 01 .sleb128 1
+ 1232 060c 0A .uleb128 0xa
+ 1233 060d 00000000 .long .LASF142
+ 1234 0611 02 .sleb128 2
+ 1235 0612 0A .uleb128 0xa
+ 1236 0613 00000000 .long .LASF143
+ 1237 0617 03 .sleb128 3
+ 1238 0618 0A .uleb128 0xa
+ 1239 0619 00000000 .long .LASF144
+ 1240 061d 04 .sleb128 4
+ 1241 061e 0A .uleb128 0xa
+ 1242 061f 00000000 .long .LASF145
+ 1243 0623 05 .sleb128 5
+ 1244 0624 0A .uleb128 0xa
+ 1245 0625 00000000 .long .LASF146
+ 1246 0629 06 .sleb128 6
+ 1247 062a 0A .uleb128 0xa
+ 1248 062b 00000000 .long .LASF147
+ 1249 062f 07 .sleb128 7
+ 1250 0630 0A .uleb128 0xa
+ 1251 0631 00000000 .long .LASF148
+ 1252 0635 08 .sleb128 8
+ 1253 0636 0A .uleb128 0xa
+ 1254 0637 00000000 .long .LASF149
+ 1255 063b 09 .sleb128 9
+ 1256 063c 0A .uleb128 0xa
+ 1257 063d 00000000 .long .LASF150
+ 1258 0641 0A .sleb128 10
+ 1259 0642 0A .uleb128 0xa
+ 1260 0643 00000000 .long .LASF151
+ 1261 0647 0B .sleb128 11
+ 1262 0648 0A .uleb128 0xa
+ 1263 0649 00000000 .long .LASF152
+ 1264 064d 0C .sleb128 12
+ 1265 064e 0A .uleb128 0xa
+ 1266 064f 00000000 .long .LASF153
+ 1267 0653 0D .sleb128 13
+ 1268 0654 0A .uleb128 0xa
+ 1269 0655 00000000 .long .LASF154
+ 1270 0659 0E .sleb128 14
+ 1271 065a 0A .uleb128 0xa
+ 1272 065b 00000000 .long .LASF155
+ 1273 065f 0F .sleb128 15
+ 1274 0660 0A .uleb128 0xa
+ 1275 0661 00000000 .long .LASF156
+ 1276 0665 10 .sleb128 16
+
GAS LISTING /tmp/ccIvKeEl.s page 30
+
+
+ 1277 0666 0A .uleb128 0xa
+ 1278 0667 00000000 .long .LASF157
+ 1279 066b 11 .sleb128 17
+ 1280 066c 0A .uleb128 0xa
+ 1281 066d 00000000 .long .LASF158
+ 1282 0671 12 .sleb128 18
+ 1283 0672 0A .uleb128 0xa
+ 1284 0673 00000000 .long .LASF159
+ 1285 0677 13 .sleb128 19
+ 1286 0678 0A .uleb128 0xa
+ 1287 0679 00000000 .long .LASF160
+ 1288 067d 14 .sleb128 20
+ 1289 067e 0A .uleb128 0xa
+ 1290 067f 00000000 .long .LASF161
+ 1291 0683 15 .sleb128 21
+ 1292 0684 0A .uleb128 0xa
+ 1293 0685 00000000 .long .LASF162
+ 1294 0689 16 .sleb128 22
+ 1295 068a 0A .uleb128 0xa
+ 1296 068b 00000000 .long .LASF163
+ 1297 068f 17 .sleb128 23
+ 1298 0690 0A .uleb128 0xa
+ 1299 0691 00000000 .long .LASF164
+ 1300 0695 18 .sleb128 24
+ 1301 0696 0A .uleb128 0xa
+ 1302 0697 00000000 .long .LASF165
+ 1303 069b 19 .sleb128 25
+ 1304 069c 0A .uleb128 0xa
+ 1305 069d 00000000 .long .LASF166
+ 1306 06a1 1A .sleb128 26
+ 1307 06a2 0A .uleb128 0xa
+ 1308 06a3 00000000 .long .LASF167
+ 1309 06a7 1B .sleb128 27
+ 1310 06a8 0A .uleb128 0xa
+ 1311 06a9 00000000 .long .LASF168
+ 1312 06ad 1C .sleb128 28
+ 1313 06ae 0A .uleb128 0xa
+ 1314 06af 00000000 .long .LASF169
+ 1315 06b3 1D .sleb128 29
+ 1316 06b4 0A .uleb128 0xa
+ 1317 06b5 00000000 .long .LASF170
+ 1318 06b9 1E .sleb128 30
+ 1319 06ba 0A .uleb128 0xa
+ 1320 06bb 00000000 .long .LASF171
+ 1321 06bf 1F .sleb128 31
+ 1322 06c0 0A .uleb128 0xa
+ 1323 06c1 00000000 .long .LASF172
+ 1324 06c5 20 .sleb128 32
+ 1325 06c6 0A .uleb128 0xa
+ 1326 06c7 00000000 .long .LASF173
+ 1327 06cb 21 .sleb128 33
+ 1328 06cc 0A .uleb128 0xa
+ 1329 06cd 00000000 .long .LASF174
+ 1330 06d1 22 .sleb128 34
+ 1331 06d2 0A .uleb128 0xa
+ 1332 06d3 00000000 .long .LASF175
+ 1333 06d7 23 .sleb128 35
+
GAS LISTING /tmp/ccIvKeEl.s page 31
+
+
+ 1334 06d8 0A .uleb128 0xa
+ 1335 06d9 00000000 .long .LASF176
+ 1336 06dd 24 .sleb128 36
+ 1337 06de 0A .uleb128 0xa
+ 1338 06df 00000000 .long .LASF177
+ 1339 06e3 25 .sleb128 37
+ 1340 06e4 0A .uleb128 0xa
+ 1341 06e5 00000000 .long .LASF178
+ 1342 06e9 26 .sleb128 38
+ 1343 06ea 0A .uleb128 0xa
+ 1344 06eb 00000000 .long .LASF179
+ 1345 06ef 27 .sleb128 39
+ 1346 06f0 0A .uleb128 0xa
+ 1347 06f1 00000000 .long .LASF180
+ 1348 06f5 28 .sleb128 40
+ 1349 06f6 0A .uleb128 0xa
+ 1350 06f7 00000000 .long .LASF181
+ 1351 06fb 29 .sleb128 41
+ 1352 06fc 0A .uleb128 0xa
+ 1353 06fd 00000000 .long .LASF182
+ 1354 0701 2A .sleb128 42
+ 1355 0702 0A .uleb128 0xa
+ 1356 0703 00000000 .long .LASF183
+ 1357 0707 2B .sleb128 43
+ 1358 0708 0A .uleb128 0xa
+ 1359 0709 00000000 .long .LASF184
+ 1360 070d 2C .sleb128 44
+ 1361 070e 0A .uleb128 0xa
+ 1362 070f 00000000 .long .LASF185
+ 1363 0713 2D .sleb128 45
+ 1364 0714 0A .uleb128 0xa
+ 1365 0715 00000000 .long .LASF186
+ 1366 0719 2E .sleb128 46
+ 1367 071a 0A .uleb128 0xa
+ 1368 071b 00000000 .long .LASF187
+ 1369 071f 2F .sleb128 47
+ 1370 0720 0A .uleb128 0xa
+ 1371 0721 00000000 .long .LASF188
+ 1372 0725 30 .sleb128 48
+ 1373 0726 0A .uleb128 0xa
+ 1374 0727 00000000 .long .LASF189
+ 1375 072b 31 .sleb128 49
+ 1376 072c 0A .uleb128 0xa
+ 1377 072d 00000000 .long .LASF190
+ 1378 0731 32 .sleb128 50
+ 1379 0732 0A .uleb128 0xa
+ 1380 0733 00000000 .long .LASF191
+ 1381 0737 33 .sleb128 51
+ 1382 0738 0A .uleb128 0xa
+ 1383 0739 00000000 .long .LASF192
+ 1384 073d 34 .sleb128 52
+ 1385 073e 0A .uleb128 0xa
+ 1386 073f 00000000 .long .LASF193
+ 1387 0743 35 .sleb128 53
+ 1388 0744 0A .uleb128 0xa
+ 1389 0745 00000000 .long .LASF194
+ 1390 0749 36 .sleb128 54
+
GAS LISTING /tmp/ccIvKeEl.s page 32
+
+
+ 1391 074a 0A .uleb128 0xa
+ 1392 074b 00000000 .long .LASF195
+ 1393 074f 37 .sleb128 55
+ 1394 0750 0A .uleb128 0xa
+ 1395 0751 00000000 .long .LASF196
+ 1396 0755 38 .sleb128 56
+ 1397 0756 0A .uleb128 0xa
+ 1398 0757 00000000 .long .LASF197
+ 1399 075b 39 .sleb128 57
+ 1400 075c 0A .uleb128 0xa
+ 1401 075d 00000000 .long .LASF198
+ 1402 0761 3A .sleb128 58
+ 1403 0762 0A .uleb128 0xa
+ 1404 0763 00000000 .long .LASF199
+ 1405 0767 3A .sleb128 58
+ 1406 0768 0A .uleb128 0xa
+ 1407 0769 00000000 .long .LASF200
+ 1408 076d 3B .sleb128 59
+ 1409 076e 0A .uleb128 0xa
+ 1410 076f 00000000 .long .LASF201
+ 1411 0773 3C .sleb128 60
+ 1412 0774 0A .uleb128 0xa
+ 1413 0775 00000000 .long .LASF202
+ 1414 0779 3D .sleb128 61
+ 1415 077a 0A .uleb128 0xa
+ 1416 077b 00000000 .long .LASF203
+ 1417 077f 3E .sleb128 62
+ 1418 0780 0A .uleb128 0xa
+ 1419 0781 00000000 .long .LASF204
+ 1420 0785 3F .sleb128 63
+ 1421 0786 0A .uleb128 0xa
+ 1422 0787 00000000 .long .LASF205
+ 1423 078b C000 .sleb128 64
+ 1424 078d 0A .uleb128 0xa
+ 1425 078e 00000000 .long .LASF206
+ 1426 0792 C100 .sleb128 65
+ 1427 0794 0A .uleb128 0xa
+ 1428 0795 00000000 .long .LASF207
+ 1429 0799 C200 .sleb128 66
+ 1430 079b 0A .uleb128 0xa
+ 1431 079c 00000000 .long .LASF208
+ 1432 07a0 C300 .sleb128 67
+ 1433 07a2 0A .uleb128 0xa
+ 1434 07a3 00000000 .long .LASF209
+ 1435 07a7 C400 .sleb128 68
+ 1436 07a9 00 .byte 0x0
+ 1437 07aa 1A .uleb128 0x1a
+ 1438 07ab 00000000 .long .LASF210
+ 1439 07af 04 .byte 0x4
+ 1440 07b0 07 .byte 0x7
+ 1441 07b1 0A01 .value 0x10a
+ 1442 07b3 A9080000 .long 0x8a9
+ 1443 07b7 0A .uleb128 0xa
+ 1444 07b8 00000000 .long .LASF211
+ 1445 07bc 00 .sleb128 0
+ 1446 07bd 0A .uleb128 0xa
+ 1447 07be 00000000 .long .LASF212
+
GAS LISTING /tmp/ccIvKeEl.s page 33
+
+
+ 1448 07c2 3D .sleb128 61
+ 1449 07c3 0A .uleb128 0xa
+ 1450 07c4 00000000 .long .LASF213
+ 1451 07c8 3E .sleb128 62
+ 1452 07c9 0A .uleb128 0xa
+ 1453 07ca 00000000 .long .LASF214
+ 1454 07ce 3F .sleb128 63
+ 1455 07cf 0A .uleb128 0xa
+ 1456 07d0 00000000 .long .LASF215
+ 1457 07d4 C000 .sleb128 64
+ 1458 07d6 0A .uleb128 0xa
+ 1459 07d7 00000000 .long .LASF216
+ 1460 07db C100 .sleb128 65
+ 1461 07dd 0A .uleb128 0xa
+ 1462 07de 00000000 .long .LASF217
+ 1463 07e2 C200 .sleb128 66
+ 1464 07e4 0A .uleb128 0xa
+ 1465 07e5 00000000 .long .LASF218
+ 1466 07e9 C300 .sleb128 67
+ 1467 07eb 0A .uleb128 0xa
+ 1468 07ec 00000000 .long .LASF219
+ 1469 07f0 C400 .sleb128 68
+ 1470 07f2 0A .uleb128 0xa
+ 1471 07f3 00000000 .long .LASF220
+ 1472 07f7 C500 .sleb128 69
+ 1473 07f9 0A .uleb128 0xa
+ 1474 07fa 00000000 .long .LASF221
+ 1475 07fe C600 .sleb128 70
+ 1476 0800 0A .uleb128 0xa
+ 1477 0801 00000000 .long .LASF222
+ 1478 0805 C700 .sleb128 71
+ 1479 0807 0A .uleb128 0xa
+ 1480 0808 00000000 .long .LASF223
+ 1481 080c C800 .sleb128 72
+ 1482 080e 0A .uleb128 0xa
+ 1483 080f 00000000 .long .LASF224
+ 1484 0813 C900 .sleb128 73
+ 1485 0815 0A .uleb128 0xa
+ 1486 0816 00000000 .long .LASF225
+ 1487 081a CA00 .sleb128 74
+ 1488 081c 0A .uleb128 0xa
+ 1489 081d 00000000 .long .LASF226
+ 1490 0821 CB00 .sleb128 75
+ 1491 0823 0A .uleb128 0xa
+ 1492 0824 00000000 .long .LASF227
+ 1493 0828 CC00 .sleb128 76
+ 1494 082a 0A .uleb128 0xa
+ 1495 082b 00000000 .long .LASF228
+ 1496 082f CD00 .sleb128 77
+ 1497 0831 0A .uleb128 0xa
+ 1498 0832 00000000 .long .LASF229
+ 1499 0836 CE00 .sleb128 78
+ 1500 0838 0A .uleb128 0xa
+ 1501 0839 00000000 .long .LASF230
+ 1502 083d CF00 .sleb128 79
+ 1503 083f 0A .uleb128 0xa
+ 1504 0840 00000000 .long .LASF231
+
GAS LISTING /tmp/ccIvKeEl.s page 34
+
+
+ 1505 0844 D000 .sleb128 80
+ 1506 0846 0A .uleb128 0xa
+ 1507 0847 00000000 .long .LASF232
+ 1508 084b D100 .sleb128 81
+ 1509 084d 0A .uleb128 0xa
+ 1510 084e 00000000 .long .LASF233
+ 1511 0852 D100 .sleb128 81
+ 1512 0854 0A .uleb128 0xa
+ 1513 0855 00000000 .long .LASF234
+ 1514 0859 D200 .sleb128 82
+ 1515 085b 0A .uleb128 0xa
+ 1516 085c 00000000 .long .LASF235
+ 1517 0860 D300 .sleb128 83
+ 1518 0862 0A .uleb128 0xa
+ 1519 0863 00000000 .long .LASF236
+ 1520 0867 D400 .sleb128 84
+ 1521 0869 0A .uleb128 0xa
+ 1522 086a 00000000 .long .LASF237
+ 1523 086e D500 .sleb128 85
+ 1524 0870 0A .uleb128 0xa
+ 1525 0871 00000000 .long .LASF238
+ 1526 0875 D600 .sleb128 86
+ 1527 0877 0A .uleb128 0xa
+ 1528 0878 00000000 .long .LASF239
+ 1529 087c D700 .sleb128 87
+ 1530 087e 0A .uleb128 0xa
+ 1531 087f 00000000 .long .LASF240
+ 1532 0883 D800 .sleb128 88
+ 1533 0885 0A .uleb128 0xa
+ 1534 0886 00000000 .long .LASF241
+ 1535 088a D900 .sleb128 89
+ 1536 088c 0A .uleb128 0xa
+ 1537 088d 00000000 .long .LASF242
+ 1538 0891 DA00 .sleb128 90
+ 1539 0893 0A .uleb128 0xa
+ 1540 0894 00000000 .long .LASF243
+ 1541 0898 DB00 .sleb128 91
+ 1542 089a 0A .uleb128 0xa
+ 1543 089b 00000000 .long .LASF244
+ 1544 089f DC00 .sleb128 92
+ 1545 08a1 0A .uleb128 0xa
+ 1546 08a2 00000000 .long .LASF245
+ 1547 08a6 DD00 .sleb128 93
+ 1548 08a8 00 .byte 0x0
+ 1549 08a9 1A .uleb128 0x1a
+ 1550 08aa 00000000 .long .LASF246
+ 1551 08ae 04 .byte 0x4
+ 1552 08af 07 .byte 0x7
+ 1553 08b0 3401 .value 0x134
+ 1554 08b2 E9090000 .long 0x9e9
+ 1555 08b6 0A .uleb128 0xa
+ 1556 08b7 00000000 .long .LASF247
+ 1557 08bb 00 .sleb128 0
+ 1558 08bc 0A .uleb128 0xa
+ 1559 08bd 00000000 .long .LASF248
+ 1560 08c1 01 .sleb128 1
+ 1561 08c2 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s page 35
+
+
+ 1562 08c3 00000000 .long .LASF249
+ 1563 08c7 02 .sleb128 2
+ 1564 08c8 0A .uleb128 0xa
+ 1565 08c9 00000000 .long .LASF250
+ 1566 08cd 03 .sleb128 3
+ 1567 08ce 0A .uleb128 0xa
+ 1568 08cf 00000000 .long .LASF251
+ 1569 08d3 04 .sleb128 4
+ 1570 08d4 0A .uleb128 0xa
+ 1571 08d5 00000000 .long .LASF252
+ 1572 08d9 05 .sleb128 5
+ 1573 08da 0A .uleb128 0xa
+ 1574 08db 00000000 .long .LASF253
+ 1575 08df 06 .sleb128 6
+ 1576 08e0 0A .uleb128 0xa
+ 1577 08e1 00000000 .long .LASF254
+ 1578 08e5 07 .sleb128 7
+ 1579 08e6 0A .uleb128 0xa
+ 1580 08e7 00000000 .long .LASF255
+ 1581 08eb 08 .sleb128 8
+ 1582 08ec 0A .uleb128 0xa
+ 1583 08ed 00000000 .long .LASF256
+ 1584 08f1 09 .sleb128 9
+ 1585 08f2 0A .uleb128 0xa
+ 1586 08f3 00000000 .long .LASF257
+ 1587 08f7 0A .sleb128 10
+ 1588 08f8 0A .uleb128 0xa
+ 1589 08f9 00000000 .long .LASF258
+ 1590 08fd 0B .sleb128 11
+ 1591 08fe 0A .uleb128 0xa
+ 1592 08ff 00000000 .long .LASF259
+ 1593 0903 0C .sleb128 12
+ 1594 0904 0A .uleb128 0xa
+ 1595 0905 00000000 .long .LASF260
+ 1596 0909 0D .sleb128 13
+ 1597 090a 0A .uleb128 0xa
+ 1598 090b 00000000 .long .LASF261
+ 1599 090f 0E .sleb128 14
+ 1600 0910 0A .uleb128 0xa
+ 1601 0911 00000000 .long .LASF262
+ 1602 0915 0F .sleb128 15
+ 1603 0916 0A .uleb128 0xa
+ 1604 0917 00000000 .long .LASF263
+ 1605 091b 10 .sleb128 16
+ 1606 091c 0A .uleb128 0xa
+ 1607 091d 00000000 .long .LASF264
+ 1608 0921 11 .sleb128 17
+ 1609 0922 0A .uleb128 0xa
+ 1610 0923 00000000 .long .LASF265
+ 1611 0927 12 .sleb128 18
+ 1612 0928 0A .uleb128 0xa
+ 1613 0929 00000000 .long .LASF266
+ 1614 092d 13 .sleb128 19
+ 1615 092e 0A .uleb128 0xa
+ 1616 092f 00000000 .long .LASF267
+ 1617 0933 14 .sleb128 20
+ 1618 0934 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s page 36
+
+
+ 1619 0935 00000000 .long .LASF268
+ 1620 0939 15 .sleb128 21
+ 1621 093a 0A .uleb128 0xa
+ 1622 093b 00000000 .long .LASF269
+ 1623 093f 16 .sleb128 22
+ 1624 0940 0A .uleb128 0xa
+ 1625 0941 00000000 .long .LASF270
+ 1626 0945 17 .sleb128 23
+ 1627 0946 0A .uleb128 0xa
+ 1628 0947 00000000 .long .LASF271
+ 1629 094b 18 .sleb128 24
+ 1630 094c 0A .uleb128 0xa
+ 1631 094d 00000000 .long .LASF272
+ 1632 0951 19 .sleb128 25
+ 1633 0952 0A .uleb128 0xa
+ 1634 0953 00000000 .long .LASF273
+ 1635 0957 1A .sleb128 26
+ 1636 0958 0A .uleb128 0xa
+ 1637 0959 00000000 .long .LASF274
+ 1638 095d 1B .sleb128 27
+ 1639 095e 0A .uleb128 0xa
+ 1640 095f 00000000 .long .LASF275
+ 1641 0963 1C .sleb128 28
+ 1642 0964 0A .uleb128 0xa
+ 1643 0965 00000000 .long .LASF276
+ 1644 0969 1D .sleb128 29
+ 1645 096a 0A .uleb128 0xa
+ 1646 096b 00000000 .long .LASF277
+ 1647 096f 1E .sleb128 30
+ 1648 0970 0A .uleb128 0xa
+ 1649 0971 00000000 .long .LASF278
+ 1650 0975 1F .sleb128 31
+ 1651 0976 0A .uleb128 0xa
+ 1652 0977 00000000 .long .LASF279
+ 1653 097b 20 .sleb128 32
+ 1654 097c 0A .uleb128 0xa
+ 1655 097d 00000000 .long .LASF280
+ 1656 0981 21 .sleb128 33
+ 1657 0982 0A .uleb128 0xa
+ 1658 0983 00000000 .long .LASF281
+ 1659 0987 22 .sleb128 34
+ 1660 0988 0A .uleb128 0xa
+ 1661 0989 00000000 .long .LASF282
+ 1662 098d 23 .sleb128 35
+ 1663 098e 0A .uleb128 0xa
+ 1664 098f 00000000 .long .LASF283
+ 1665 0993 24 .sleb128 36
+ 1666 0994 0A .uleb128 0xa
+ 1667 0995 00000000 .long .LASF284
+ 1668 0999 25 .sleb128 37
+ 1669 099a 0A .uleb128 0xa
+ 1670 099b 00000000 .long .LASF285
+ 1671 099f 26 .sleb128 38
+ 1672 09a0 0A .uleb128 0xa
+ 1673 09a1 00000000 .long .LASF286
+ 1674 09a5 27 .sleb128 39
+ 1675 09a6 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s page 37
+
+
+ 1676 09a7 00000000 .long .LASF287
+ 1677 09ab 28 .sleb128 40
+ 1678 09ac 0A .uleb128 0xa
+ 1679 09ad 00000000 .long .LASF288
+ 1680 09b1 29 .sleb128 41
+ 1681 09b2 0A .uleb128 0xa
+ 1682 09b3 00000000 .long .LASF289
+ 1683 09b7 29 .sleb128 41
+ 1684 09b8 0A .uleb128 0xa
+ 1685 09b9 00000000 .long .LASF290
+ 1686 09bd 2A .sleb128 42
+ 1687 09be 0A .uleb128 0xa
+ 1688 09bf 00000000 .long .LASF291
+ 1689 09c3 2B .sleb128 43
+ 1690 09c4 0A .uleb128 0xa
+ 1691 09c5 00000000 .long .LASF292
+ 1692 09c9 2C .sleb128 44
+ 1693 09ca 0A .uleb128 0xa
+ 1694 09cb 00000000 .long .LASF293
+ 1695 09cf 2D .sleb128 45
+ 1696 09d0 0A .uleb128 0xa
+ 1697 09d1 00000000 .long .LASF294
+ 1698 09d5 2E .sleb128 46
+ 1699 09d6 0A .uleb128 0xa
+ 1700 09d7 00000000 .long .LASF295
+ 1701 09db 2F .sleb128 47
+ 1702 09dc 0A .uleb128 0xa
+ 1703 09dd 00000000 .long .LASF296
+ 1704 09e1 30 .sleb128 48
+ 1705 09e2 0A .uleb128 0xa
+ 1706 09e3 00000000 .long .LASF297
+ 1707 09e7 31 .sleb128 49
+ 1708 09e8 00 .byte 0x0
+ 1709 09e9 1B .uleb128 0x1b
+ 1710 09ea 00000000 .long .LASF320
+ 1711 09ee 01 .byte 0x1
+ 1712 09ef 48 .byte 0x48
+ 1713 09f0 01 .byte 0x1
+ 1714 09f1 00000000 .quad .LFB513
+ 1714 00000000
+ 1715 09f9 00000000 .quad .LFE513
+ 1715 00000000
+ 1716 0a01 00000000 .long .LLST0
+ 1717 0a05 180A0000 .long 0xa18
+ 1718 0a09 1C .uleb128 0x1c
+ 1719 0a0a 00000000 .long .LASF300
+ 1720 0a0e 01 .byte 0x1
+ 1721 0a0f 48 .byte 0x48
+ 1722 0a10 82030000 .long 0x382
+ 1723 0a14 02 .byte 0x2
+ 1724 0a15 91 .byte 0x91
+ 1725 0a16 68 .sleb128 -24
+ 1726 0a17 00 .byte 0x0
+ 1727 0a18 1D .uleb128 0x1d
+ 1728 0a19 00000000 .long .LASF298
+ 1729 0a1d 01 .byte 0x1
+ 1730 0a1e 52 .byte 0x52
+
GAS LISTING /tmp/ccIvKeEl.s page 38
+
+
+ 1731 0a1f 62000000 .long 0x62
+ 1732 0a23 00000000 .quad .LFB514
+ 1732 00000000
+ 1733 0a2b 00000000 .quad .LFE514
+ 1733 00000000
+ 1734 0a33 00000000 .long .LLST1
+ 1735 0a37 1D .uleb128 0x1d
+ 1736 0a38 00000000 .long .LASF299
+ 1737 0a3c 01 .byte 0x1
+ 1738 0a3d 60 .byte 0x60
+ 1739 0a3e 62000000 .long 0x62
+ 1740 0a42 00000000 .quad .LFB515
+ 1740 00000000
+ 1741 0a4a 00000000 .quad .LFE515
+ 1741 00000000
+ 1742 0a52 00000000 .long .LLST2
+ 1743 0a56 1E .uleb128 0x1e
+ 1744 0a57 00000000 .long .LASF304
+ 1745 0a5b 01 .byte 0x1
+ 1746 0a5c 6C .byte 0x6c
+ 1747 0a5d 01 .byte 0x1
+ 1748 0a5e 7B000000 .long 0x7b
+ 1749 0a62 00000000 .quad .LFB516
+ 1749 00000000
+ 1750 0a6a 00000000 .quad .LFE516
+ 1750 00000000
+ 1751 0a72 00000000 .long .LLST3
+ 1752 0a76 A50A0000 .long 0xaa5
+ 1753 0a7a 1C .uleb128 0x1c
+ 1754 0a7b 00000000 .long .LASF301
+ 1755 0a7f 01 .byte 0x1
+ 1756 0a80 6C .byte 0x6c
+ 1757 0a81 86000000 .long 0x86
+ 1758 0a85 02 .byte 0x2
+ 1759 0a86 91 .byte 0x91
+ 1760 0a87 68 .sleb128 -24
+ 1761 0a88 1C .uleb128 0x1c
+ 1762 0a89 00000000 .long .LASF302
+ 1763 0a8d 01 .byte 0x1
+ 1764 0a8e 6C .byte 0x6c
+ 1765 0a8f 8B000000 .long 0x8b
+ 1766 0a93 02 .byte 0x2
+ 1767 0a94 91 .byte 0x91
+ 1768 0a95 60 .sleb128 -32
+ 1769 0a96 1C .uleb128 0x1c
+ 1770 0a97 00000000 .long .LASF303
+ 1771 0a9b 01 .byte 0x1
+ 1772 0a9c 6D .byte 0x6d
+ 1773 0a9d 62000000 .long 0x62
+ 1774 0aa1 02 .byte 0x2
+ 1775 0aa2 91 .byte 0x91
+ 1776 0aa3 5C .sleb128 -36
+ 1777 0aa4 00 .byte 0x0
+ 1778 0aa5 1E .uleb128 0x1e
+ 1779 0aa6 00000000 .long .LASF305
+ 1780 0aaa 01 .byte 0x1
+ 1781 0aab 79 .byte 0x79
+
GAS LISTING /tmp/ccIvKeEl.s page 39
+
+
+ 1782 0aac 01 .byte 0x1
+ 1783 0aad 7B000000 .long 0x7b
+ 1784 0ab1 00000000 .quad .LFB517
+ 1784 00000000
+ 1785 0ab9 00000000 .quad .LFE517
+ 1785 00000000
+ 1786 0ac1 00000000 .long .LLST4
+ 1787 0ac5 F40A0000 .long 0xaf4
+ 1788 0ac9 1C .uleb128 0x1c
+ 1789 0aca 00000000 .long .LASF306
+ 1790 0ace 01 .byte 0x1
+ 1791 0acf 79 .byte 0x79
+ 1792 0ad0 86000000 .long 0x86
+ 1793 0ad4 02 .byte 0x2
+ 1794 0ad5 91 .byte 0x91
+ 1795 0ad6 68 .sleb128 -24
+ 1796 0ad7 1C .uleb128 0x1c
+ 1797 0ad8 00000000 .long .LASF302
+ 1798 0adc 01 .byte 0x1
+ 1799 0add 7A .byte 0x7a
+ 1800 0ade 8B000000 .long 0x8b
+ 1801 0ae2 02 .byte 0x2
+ 1802 0ae3 91 .byte 0x91
+ 1803 0ae4 60 .sleb128 -32
+ 1804 0ae5 1C .uleb128 0x1c
+ 1805 0ae6 00000000 .long .LASF303
+ 1806 0aea 01 .byte 0x1
+ 1807 0aeb 7B .byte 0x7b
+ 1808 0aec 62000000 .long 0x62
+ 1809 0af0 02 .byte 0x2
+ 1810 0af1 91 .byte 0x91
+ 1811 0af2 5C .sleb128 -36
+ 1812 0af3 00 .byte 0x0
+ 1813 0af4 1E .uleb128 0x1e
+ 1814 0af5 00000000 .long .LASF307
+ 1815 0af9 01 .byte 0x1
+ 1816 0afa 89 .byte 0x89
+ 1817 0afb 01 .byte 0x1
+ 1818 0afc 63010000 .long 0x163
+ 1819 0b00 00000000 .quad .LFB518
+ 1819 00000000
+ 1820 0b08 00000000 .quad .LFE518
+ 1820 00000000
+ 1821 0b10 00000000 .long .LLST5
+ 1822 0b14 350B0000 .long 0xb35
+ 1823 0b18 1C .uleb128 0x1c
+ 1824 0b19 00000000 .long .LASF308
+ 1825 0b1d 01 .byte 0x1
+ 1826 0b1e 89 .byte 0x89
+ 1827 0b1f 63010000 .long 0x163
+ 1828 0b23 02 .byte 0x2
+ 1829 0b24 91 .byte 0x91
+ 1830 0b25 60 .sleb128 -32
+ 1831 0b26 1C .uleb128 0x1c
+ 1832 0b27 00000000 .long .LASF301
+ 1833 0b2b 01 .byte 0x1
+ 1834 0b2c 8A .byte 0x8a
+
GAS LISTING /tmp/ccIvKeEl.s page 40
+
+
+ 1835 0b2d 1E010000 .long 0x11e
+ 1836 0b31 02 .byte 0x2
+ 1837 0b32 91 .byte 0x91
+ 1838 0b33 58 .sleb128 -40
+ 1839 0b34 00 .byte 0x0
+ 1840 0b35 1E .uleb128 0x1e
+ 1841 0b36 00000000 .long .LASF309
+ 1842 0b3a 01 .byte 0x1
+ 1843 0b3b 9E .byte 0x9e
+ 1844 0b3c 01 .byte 0x1
+ 1845 0b3d 63010000 .long 0x163
+ 1846 0b41 00000000 .quad .LFB519
+ 1846 00000000
+ 1847 0b49 00000000 .quad .LFE519
+ 1847 00000000
+ 1848 0b51 00000000 .long .LLST6
+ 1849 0b55 760B0000 .long 0xb76
+ 1850 0b59 1C .uleb128 0x1c
+ 1851 0b5a 00000000 .long .LASF308
+ 1852 0b5e 01 .byte 0x1
+ 1853 0b5f 9E .byte 0x9e
+ 1854 0b60 63010000 .long 0x163
+ 1855 0b64 02 .byte 0x2
+ 1856 0b65 91 .byte 0x91
+ 1857 0b66 60 .sleb128 -32
+ 1858 0b67 1C .uleb128 0x1c
+ 1859 0b68 00000000 .long .LASF306
+ 1860 0b6c 01 .byte 0x1
+ 1861 0b6d 9F .byte 0x9f
+ 1862 0b6e 1E010000 .long 0x11e
+ 1863 0b72 02 .byte 0x2
+ 1864 0b73 91 .byte 0x91
+ 1865 0b74 58 .sleb128 -40
+ 1866 0b75 00 .byte 0x0
+ 1867 0b76 1D .uleb128 0x1d
+ 1868 0b77 00000000 .long .LASF310
+ 1869 0b7b 01 .byte 0x1
+ 1870 0b7c B3 .byte 0xb3
+ 1871 0b7d 950B0000 .long 0xb95
+ 1872 0b81 00000000 .quad .LFB520
+ 1872 00000000
+ 1873 0b89 00000000 .quad .LFE520
+ 1873 00000000
+ 1874 0b91 00000000 .long .LLST7
+ 1875 0b95 02 .uleb128 0x2
+ 1876 0b96 01 .byte 0x1
+ 1877 0b97 02 .byte 0x2
+ 1878 0b98 00000000 .long .LASF311
+ 1879 0b9c 1F .uleb128 0x1f
+ 1880 0b9d 01 .byte 0x1
+ 1881 0b9e 00000000 .long .LASF321
+ 1882 0ba2 01 .byte 0x1
+ 1883 0ba3 E2 .byte 0xe2
+ 1884 0ba4 01 .byte 0x1
+ 1885 0ba5 7B000000 .long 0x7b
+ 1886 0ba9 00000000 .quad .LFB521
+ 1886 00000000
+
GAS LISTING /tmp/ccIvKeEl.s page 41
+
+
+ 1887 0bb1 00000000 .quad .LFE521
+ 1887 00000000
+ 1888 0bb9 00000000 .long .LLST8
+ 1889 0bbd 050C0000 .long 0xc05
+ 1890 0bc1 1C .uleb128 0x1c
+ 1891 0bc2 00000000 .long .LASF312
+ 1892 0bc6 01 .byte 0x1
+ 1893 0bc7 E2 .byte 0xe2
+ 1894 0bc8 050C0000 .long 0xc05
+ 1895 0bcc 02 .byte 0x2
+ 1896 0bcd 91 .byte 0x91
+ 1897 0bce 58 .sleb128 -40
+ 1898 0bcf 20 .uleb128 0x20
+ 1899 0bd0 726300 .string "rc"
+ 1900 0bd3 01 .byte 0x1
+ 1901 0bd4 E4 .byte 0xe4
+ 1902 0bd5 7B000000 .long 0x7b
+ 1903 0bd9 02 .byte 0x2
+ 1904 0bda 91 .byte 0x91
+ 1905 0bdb 6C .sleb128 -20
+ 1906 0bdc 21 .uleb128 0x21
+ 1907 0bdd 00000000 .long .LASF313
+ 1908 0be1 210C0000 .long 0xc21
+ 1909 0be5 01 .byte 0x1
+ 1910 0be6 09 .byte 0x9
+ 1911 0be7 03 .byte 0x3
+ 1912 0be8 00000000 .quad __PRETTY_FUNCTION__.6557
+ 1912 00000000
+ 1913 0bf0 21 .uleb128 0x21
+ 1914 0bf1 00000000 .long .LASF314
+ 1915 0bf5 260C0000 .long 0xc26
+ 1916 0bf9 01 .byte 0x1
+ 1917 0bfa 09 .byte 0x9
+ 1918 0bfb 03 .byte 0x3
+ 1919 0bfc 00000000 .quad __func__.6558
+ 1919 00000000
+ 1920 0c04 00 .byte 0x0
+ 1921 0c05 07 .uleb128 0x7
+ 1922 0c06 08 .byte 0x8
+ 1923 0c07 0B0C0000 .long 0xc0b
+ 1924 0c0b 07 .uleb128 0x7
+ 1925 0c0c 08 .byte 0x8
+ 1926 0c0d AE030000 .long 0x3ae
+ 1927 0c11 22 .uleb128 0x22
+ 1928 0c12 96000000 .long 0x96
+ 1929 0c16 210C0000 .long 0xc21
+ 1930 0c1a 0D .uleb128 0xd
+ 1931 0c1b 88000000 .long 0x88
+ 1932 0c1f 17 .byte 0x17
+ 1933 0c20 00 .byte 0x0
+ 1934 0c21 08 .uleb128 0x8
+ 1935 0c22 110C0000 .long 0xc11
+ 1936 0c26 08 .uleb128 0x8
+ 1937 0c27 110C0000 .long 0xc11
+ 1938 0c2b 22 .uleb128 0x22
+ 1939 0c2c 96000000 .long 0x96
+ 1940 0c30 3B0C0000 .long 0xc3b
+
GAS LISTING /tmp/ccIvKeEl.s page 42
+
+
+ 1941 0c34 0D .uleb128 0xd
+ 1942 0c35 88000000 .long 0x88
+ 1943 0c39 09 .byte 0x9
+ 1944 0c3a 00 .byte 0x0
+ 1945 0c3b 23 .uleb128 0x23
+ 1946 0c3c 00000000 .long .LASF315
+ 1947 0c40 01 .byte 0x1
+ 1948 0c41 3C .byte 0x3c
+ 1949 0c42 500C0000 .long 0xc50
+ 1950 0c46 09 .byte 0x9
+ 1951 0c47 03 .byte 0x3
+ 1952 0c48 00000000 .quad KNullBlockCipherVecaes_ncbi_name
+ 1952 00000000
+ 1953 0c50 08 .uleb128 0x8
+ 1954 0c51 2B0C0000 .long 0xc2b
+ 1955 0c55 23 .uleb128 0x23
+ 1956 0c56 00000000 .long .LASF316
+ 1957 0c5a 01 .byte 0x1
+ 1958 0c5b CE .byte 0xce
+ 1959 0c5c 6A0C0000 .long 0xc6a
+ 1960 0c60 09 .byte 0x9
+ 1961 0c61 03 .byte 0x3
+ 1962 0c62 00000000 .quad KNullBlockCipherVec_vt_
+ 1962 00000000
+ 1963 0c6a 08 .uleb128 0x8
+ 1964 0c6b C1020000 .long 0x2c1
+ 1965 0c6f 00 .byte 0x0
+ 1966 .section .debug_abbrev
+ 1967 0000 01 .uleb128 0x1
+ 1968 0001 11 .uleb128 0x11
+ 1969 0002 01 .byte 0x1
+ 1970 0003 25 .uleb128 0x25
+ 1971 0004 0E .uleb128 0xe
+ 1972 0005 13 .uleb128 0x13
+ 1973 0006 0B .uleb128 0xb
+ 1974 0007 03 .uleb128 0x3
+ 1975 0008 0E .uleb128 0xe
+ 1976 0009 1B .uleb128 0x1b
+ 1977 000a 0E .uleb128 0xe
+ 1978 000b 11 .uleb128 0x11
+ 1979 000c 01 .uleb128 0x1
+ 1980 000d 12 .uleb128 0x12
+ 1981 000e 01 .uleb128 0x1
+ 1982 000f 10 .uleb128 0x10
+ 1983 0010 06 .uleb128 0x6
+ 1984 0011 00 .byte 0x0
+ 1985 0012 00 .byte 0x0
+ 1986 0013 02 .uleb128 0x2
+ 1987 0014 24 .uleb128 0x24
+ 1988 0015 00 .byte 0x0
+ 1989 0016 0B .uleb128 0xb
+ 1990 0017 0B .uleb128 0xb
+ 1991 0018 3E .uleb128 0x3e
+ 1992 0019 0B .uleb128 0xb
+ 1993 001a 03 .uleb128 0x3
+ 1994 001b 0E .uleb128 0xe
+ 1995 001c 00 .byte 0x0
+
GAS LISTING /tmp/ccIvKeEl.s page 43
+
+
+ 1996 001d 00 .byte 0x0
+ 1997 001e 03 .uleb128 0x3
+ 1998 001f 24 .uleb128 0x24
+ 1999 0020 00 .byte 0x0
+ 2000 0021 0B .uleb128 0xb
+ 2001 0022 0B .uleb128 0xb
+ 2002 0023 3E .uleb128 0x3e
+ 2003 0024 0B .uleb128 0xb
+ 2004 0025 03 .uleb128 0x3
+ 2005 0026 08 .uleb128 0x8
+ 2006 0027 00 .byte 0x0
+ 2007 0028 00 .byte 0x0
+ 2008 0029 04 .uleb128 0x4
+ 2009 002a 16 .uleb128 0x16
+ 2010 002b 00 .byte 0x0
+ 2011 002c 03 .uleb128 0x3
+ 2012 002d 0E .uleb128 0xe
+ 2013 002e 3A .uleb128 0x3a
+ 2014 002f 0B .uleb128 0xb
+ 2015 0030 3B .uleb128 0x3b
+ 2016 0031 0B .uleb128 0xb
+ 2017 0032 49 .uleb128 0x49
+ 2018 0033 13 .uleb128 0x13
+ 2019 0034 00 .byte 0x0
+ 2020 0035 00 .byte 0x0
+ 2021 0036 05 .uleb128 0x5
+ 2022 0037 0F .uleb128 0xf
+ 2023 0038 00 .byte 0x0
+ 2024 0039 0B .uleb128 0xb
+ 2025 003a 0B .uleb128 0xb
+ 2026 003b 00 .byte 0x0
+ 2027 003c 00 .byte 0x0
+ 2028 003d 06 .uleb128 0x6
+ 2029 003e 24 .uleb128 0x24
+ 2030 003f 00 .byte 0x0
+ 2031 0040 0B .uleb128 0xb
+ 2032 0041 0B .uleb128 0xb
+ 2033 0042 3E .uleb128 0x3e
+ 2034 0043 0B .uleb128 0xb
+ 2035 0044 00 .byte 0x0
+ 2036 0045 00 .byte 0x0
+ 2037 0046 07 .uleb128 0x7
+ 2038 0047 0F .uleb128 0xf
+ 2039 0048 00 .byte 0x0
+ 2040 0049 0B .uleb128 0xb
+ 2041 004a 0B .uleb128 0xb
+ 2042 004b 49 .uleb128 0x49
+ 2043 004c 13 .uleb128 0x13
+ 2044 004d 00 .byte 0x0
+ 2045 004e 00 .byte 0x0
+ 2046 004f 08 .uleb128 0x8
+ 2047 0050 26 .uleb128 0x26
+ 2048 0051 00 .byte 0x0
+ 2049 0052 49 .uleb128 0x49
+ 2050 0053 13 .uleb128 0x13
+ 2051 0054 00 .byte 0x0
+ 2052 0055 00 .byte 0x0
+
GAS LISTING /tmp/ccIvKeEl.s page 44
+
+
+ 2053 0056 09 .uleb128 0x9
+ 2054 0057 04 .uleb128 0x4
+ 2055 0058 01 .byte 0x1
+ 2056 0059 0B .uleb128 0xb
+ 2057 005a 0B .uleb128 0xb
+ 2058 005b 3A .uleb128 0x3a
+ 2059 005c 0B .uleb128 0xb
+ 2060 005d 3B .uleb128 0x3b
+ 2061 005e 0B .uleb128 0xb
+ 2062 005f 01 .uleb128 0x1
+ 2063 0060 13 .uleb128 0x13
+ 2064 0061 00 .byte 0x0
+ 2065 0062 00 .byte 0x0
+ 2066 0063 0A .uleb128 0xa
+ 2067 0064 28 .uleb128 0x28
+ 2068 0065 00 .byte 0x0
+ 2069 0066 03 .uleb128 0x3
+ 2070 0067 0E .uleb128 0xe
+ 2071 0068 1C .uleb128 0x1c
+ 2072 0069 0D .uleb128 0xd
+ 2073 006a 00 .byte 0x0
+ 2074 006b 00 .byte 0x0
+ 2075 006c 0B .uleb128 0xb
+ 2076 006d 26 .uleb128 0x26
+ 2077 006e 00 .byte 0x0
+ 2078 006f 00 .byte 0x0
+ 2079 0070 00 .byte 0x0
+ 2080 0071 0C .uleb128 0xc
+ 2081 0072 01 .uleb128 0x1
+ 2082 0073 01 .byte 0x1
+ 2083 0074 8742 .uleb128 0x2107
+ 2084 0076 0C .uleb128 0xc
+ 2085 0077 49 .uleb128 0x49
+ 2086 0078 13 .uleb128 0x13
+ 2087 0079 01 .uleb128 0x1
+ 2088 007a 13 .uleb128 0x13
+ 2089 007b 00 .byte 0x0
+ 2090 007c 00 .byte 0x0
+ 2091 007d 0D .uleb128 0xd
+ 2092 007e 21 .uleb128 0x21
+ 2093 007f 00 .byte 0x0
+ 2094 0080 49 .uleb128 0x49
+ 2095 0081 13 .uleb128 0x13
+ 2096 0082 2F .uleb128 0x2f
+ 2097 0083 0B .uleb128 0xb
+ 2098 0084 00 .byte 0x0
+ 2099 0085 00 .byte 0x0
+ 2100 0086 0E .uleb128 0xe
+ 2101 0087 13 .uleb128 0x13
+ 2102 0088 01 .byte 0x1
+ 2103 0089 03 .uleb128 0x3
+ 2104 008a 0E .uleb128 0xe
+ 2105 008b 0B .uleb128 0xb
+ 2106 008c 0B .uleb128 0xb
+ 2107 008d 3A .uleb128 0x3a
+ 2108 008e 0B .uleb128 0xb
+ 2109 008f 3B .uleb128 0x3b
+
GAS LISTING /tmp/ccIvKeEl.s page 45
+
+
+ 2110 0090 0B .uleb128 0xb
+ 2111 0091 01 .uleb128 0x1
+ 2112 0092 13 .uleb128 0x13
+ 2113 0093 00 .byte 0x0
+ 2114 0094 00 .byte 0x0
+ 2115 0095 0F .uleb128 0xf
+ 2116 0096 0D .uleb128 0xd
+ 2117 0097 00 .byte 0x0
+ 2118 0098 03 .uleb128 0x3
+ 2119 0099 08 .uleb128 0x8
+ 2120 009a 3A .uleb128 0x3a
+ 2121 009b 0B .uleb128 0xb
+ 2122 009c 3B .uleb128 0x3b
+ 2123 009d 0B .uleb128 0xb
+ 2124 009e 49 .uleb128 0x49
+ 2125 009f 13 .uleb128 0x13
+ 2126 00a0 38 .uleb128 0x38
+ 2127 00a1 0A .uleb128 0xa
+ 2128 00a2 00 .byte 0x0
+ 2129 00a3 00 .byte 0x0
+ 2130 00a4 10 .uleb128 0x10
+ 2131 00a5 0D .uleb128 0xd
+ 2132 00a6 00 .byte 0x0
+ 2133 00a7 03 .uleb128 0x3
+ 2134 00a8 0E .uleb128 0xe
+ 2135 00a9 3A .uleb128 0x3a
+ 2136 00aa 0B .uleb128 0xb
+ 2137 00ab 3B .uleb128 0x3b
+ 2138 00ac 0B .uleb128 0xb
+ 2139 00ad 49 .uleb128 0x49
+ 2140 00ae 13 .uleb128 0x13
+ 2141 00af 38 .uleb128 0x38
+ 2142 00b0 0A .uleb128 0xa
+ 2143 00b1 00 .byte 0x0
+ 2144 00b2 00 .byte 0x0
+ 2145 00b3 11 .uleb128 0x11
+ 2146 00b4 17 .uleb128 0x17
+ 2147 00b5 01 .byte 0x1
+ 2148 00b6 03 .uleb128 0x3
+ 2149 00b7 0E .uleb128 0xe
+ 2150 00b8 0B .uleb128 0xb
+ 2151 00b9 0B .uleb128 0xb
+ 2152 00ba 3A .uleb128 0x3a
+ 2153 00bb 0B .uleb128 0xb
+ 2154 00bc 3B .uleb128 0x3b
+ 2155 00bd 0B .uleb128 0xb
+ 2156 00be 01 .uleb128 0x1
+ 2157 00bf 13 .uleb128 0x13
+ 2158 00c0 00 .byte 0x0
+ 2159 00c1 00 .byte 0x0
+ 2160 00c2 12 .uleb128 0x12
+ 2161 00c3 0D .uleb128 0xd
+ 2162 00c4 00 .byte 0x0
+ 2163 00c5 03 .uleb128 0x3
+ 2164 00c6 0E .uleb128 0xe
+ 2165 00c7 3A .uleb128 0x3a
+ 2166 00c8 0B .uleb128 0xb
+
GAS LISTING /tmp/ccIvKeEl.s page 46
+
+
+ 2167 00c9 3B .uleb128 0x3b
+ 2168 00ca 0B .uleb128 0xb
+ 2169 00cb 49 .uleb128 0x49
+ 2170 00cc 13 .uleb128 0x13
+ 2171 00cd 00 .byte 0x0
+ 2172 00ce 00 .byte 0x0
+ 2173 00cf 13 .uleb128 0x13
+ 2174 00d0 0D .uleb128 0xd
+ 2175 00d1 00 .byte 0x0
+ 2176 00d2 03 .uleb128 0x3
+ 2177 00d3 08 .uleb128 0x8
+ 2178 00d4 3A .uleb128 0x3a
+ 2179 00d5 0B .uleb128 0xb
+ 2180 00d6 3B .uleb128 0x3b
+ 2181 00d7 0B .uleb128 0xb
+ 2182 00d8 49 .uleb128 0x49
+ 2183 00d9 13 .uleb128 0x13
+ 2184 00da 00 .byte 0x0
+ 2185 00db 00 .byte 0x0
+ 2186 00dc 14 .uleb128 0x14
+ 2187 00dd 15 .uleb128 0x15
+ 2188 00de 01 .byte 0x1
+ 2189 00df 27 .uleb128 0x27
+ 2190 00e0 0C .uleb128 0xc
+ 2191 00e1 01 .uleb128 0x1
+ 2192 00e2 13 .uleb128 0x13
+ 2193 00e3 00 .byte 0x0
+ 2194 00e4 00 .byte 0x0
+ 2195 00e5 15 .uleb128 0x15
+ 2196 00e6 05 .uleb128 0x5
+ 2197 00e7 00 .byte 0x0
+ 2198 00e8 49 .uleb128 0x49
+ 2199 00e9 13 .uleb128 0x13
+ 2200 00ea 00 .byte 0x0
+ 2201 00eb 00 .byte 0x0
+ 2202 00ec 16 .uleb128 0x16
+ 2203 00ed 15 .uleb128 0x15
+ 2204 00ee 01 .byte 0x1
+ 2205 00ef 49 .uleb128 0x49
+ 2206 00f0 13 .uleb128 0x13
+ 2207 00f1 01 .uleb128 0x1
+ 2208 00f2 13 .uleb128 0x13
+ 2209 00f3 00 .byte 0x0
+ 2210 00f4 00 .byte 0x0
+ 2211 00f5 17 .uleb128 0x17
+ 2212 00f6 18 .uleb128 0x18
+ 2213 00f7 00 .byte 0x0
+ 2214 00f8 00 .byte 0x0
+ 2215 00f9 00 .byte 0x0
+ 2216 00fa 18 .uleb128 0x18
+ 2217 00fb 15 .uleb128 0x15
+ 2218 00fc 01 .byte 0x1
+ 2219 00fd 27 .uleb128 0x27
+ 2220 00fe 0C .uleb128 0xc
+ 2221 00ff 49 .uleb128 0x49
+ 2222 0100 13 .uleb128 0x13
+ 2223 0101 01 .uleb128 0x1
+
GAS LISTING /tmp/ccIvKeEl.s page 47
+
+
+ 2224 0102 13 .uleb128 0x13
+ 2225 0103 00 .byte 0x0
+ 2226 0104 00 .byte 0x0
+ 2227 0105 19 .uleb128 0x19
+ 2228 0106 04 .uleb128 0x4
+ 2229 0107 01 .byte 0x1
+ 2230 0108 03 .uleb128 0x3
+ 2231 0109 0E .uleb128 0xe
+ 2232 010a 0B .uleb128 0xb
+ 2233 010b 0B .uleb128 0xb
+ 2234 010c 3A .uleb128 0x3a
+ 2235 010d 0B .uleb128 0xb
+ 2236 010e 3B .uleb128 0x3b
+ 2237 010f 0B .uleb128 0xb
+ 2238 0110 01 .uleb128 0x1
+ 2239 0111 13 .uleb128 0x13
+ 2240 0112 00 .byte 0x0
+ 2241 0113 00 .byte 0x0
+ 2242 0114 1A .uleb128 0x1a
+ 2243 0115 04 .uleb128 0x4
+ 2244 0116 01 .byte 0x1
+ 2245 0117 03 .uleb128 0x3
+ 2246 0118 0E .uleb128 0xe
+ 2247 0119 0B .uleb128 0xb
+ 2248 011a 0B .uleb128 0xb
+ 2249 011b 3A .uleb128 0x3a
+ 2250 011c 0B .uleb128 0xb
+ 2251 011d 3B .uleb128 0x3b
+ 2252 011e 05 .uleb128 0x5
+ 2253 011f 01 .uleb128 0x1
+ 2254 0120 13 .uleb128 0x13
+ 2255 0121 00 .byte 0x0
+ 2256 0122 00 .byte 0x0
+ 2257 0123 1B .uleb128 0x1b
+ 2258 0124 2E .uleb128 0x2e
+ 2259 0125 01 .byte 0x1
+ 2260 0126 03 .uleb128 0x3
+ 2261 0127 0E .uleb128 0xe
+ 2262 0128 3A .uleb128 0x3a
+ 2263 0129 0B .uleb128 0xb
+ 2264 012a 3B .uleb128 0x3b
+ 2265 012b 0B .uleb128 0xb
+ 2266 012c 27 .uleb128 0x27
+ 2267 012d 0C .uleb128 0xc
+ 2268 012e 11 .uleb128 0x11
+ 2269 012f 01 .uleb128 0x1
+ 2270 0130 12 .uleb128 0x12
+ 2271 0131 01 .uleb128 0x1
+ 2272 0132 40 .uleb128 0x40
+ 2273 0133 06 .uleb128 0x6
+ 2274 0134 01 .uleb128 0x1
+ 2275 0135 13 .uleb128 0x13
+ 2276 0136 00 .byte 0x0
+ 2277 0137 00 .byte 0x0
+ 2278 0138 1C .uleb128 0x1c
+ 2279 0139 05 .uleb128 0x5
+ 2280 013a 00 .byte 0x0
+
GAS LISTING /tmp/ccIvKeEl.s page 48
+
+
+ 2281 013b 03 .uleb128 0x3
+ 2282 013c 0E .uleb128 0xe
+ 2283 013d 3A .uleb128 0x3a
+ 2284 013e 0B .uleb128 0xb
+ 2285 013f 3B .uleb128 0x3b
+ 2286 0140 0B .uleb128 0xb
+ 2287 0141 49 .uleb128 0x49
+ 2288 0142 13 .uleb128 0x13
+ 2289 0143 02 .uleb128 0x2
+ 2290 0144 0A .uleb128 0xa
+ 2291 0145 00 .byte 0x0
+ 2292 0146 00 .byte 0x0
+ 2293 0147 1D .uleb128 0x1d
+ 2294 0148 2E .uleb128 0x2e
+ 2295 0149 00 .byte 0x0
+ 2296 014a 03 .uleb128 0x3
+ 2297 014b 0E .uleb128 0xe
+ 2298 014c 3A .uleb128 0x3a
+ 2299 014d 0B .uleb128 0xb
+ 2300 014e 3B .uleb128 0x3b
+ 2301 014f 0B .uleb128 0xb
+ 2302 0150 49 .uleb128 0x49
+ 2303 0151 13 .uleb128 0x13
+ 2304 0152 11 .uleb128 0x11
+ 2305 0153 01 .uleb128 0x1
+ 2306 0154 12 .uleb128 0x12
+ 2307 0155 01 .uleb128 0x1
+ 2308 0156 40 .uleb128 0x40
+ 2309 0157 06 .uleb128 0x6
+ 2310 0158 00 .byte 0x0
+ 2311 0159 00 .byte 0x0
+ 2312 015a 1E .uleb128 0x1e
+ 2313 015b 2E .uleb128 0x2e
+ 2314 015c 01 .byte 0x1
+ 2315 015d 03 .uleb128 0x3
+ 2316 015e 0E .uleb128 0xe
+ 2317 015f 3A .uleb128 0x3a
+ 2318 0160 0B .uleb128 0xb
+ 2319 0161 3B .uleb128 0x3b
+ 2320 0162 0B .uleb128 0xb
+ 2321 0163 27 .uleb128 0x27
+ 2322 0164 0C .uleb128 0xc
+ 2323 0165 49 .uleb128 0x49
+ 2324 0166 13 .uleb128 0x13
+ 2325 0167 11 .uleb128 0x11
+ 2326 0168 01 .uleb128 0x1
+ 2327 0169 12 .uleb128 0x12
+ 2328 016a 01 .uleb128 0x1
+ 2329 016b 40 .uleb128 0x40
+ 2330 016c 06 .uleb128 0x6
+ 2331 016d 01 .uleb128 0x1
+ 2332 016e 13 .uleb128 0x13
+ 2333 016f 00 .byte 0x0
+ 2334 0170 00 .byte 0x0
+ 2335 0171 1F .uleb128 0x1f
+ 2336 0172 2E .uleb128 0x2e
+ 2337 0173 01 .byte 0x1
+
GAS LISTING /tmp/ccIvKeEl.s page 49
+
+
+ 2338 0174 3F .uleb128 0x3f
+ 2339 0175 0C .uleb128 0xc
+ 2340 0176 03 .uleb128 0x3
+ 2341 0177 0E .uleb128 0xe
+ 2342 0178 3A .uleb128 0x3a
+ 2343 0179 0B .uleb128 0xb
+ 2344 017a 3B .uleb128 0x3b
+ 2345 017b 0B .uleb128 0xb
+ 2346 017c 27 .uleb128 0x27
+ 2347 017d 0C .uleb128 0xc
+ 2348 017e 49 .uleb128 0x49
+ 2349 017f 13 .uleb128 0x13
+ 2350 0180 11 .uleb128 0x11
+ 2351 0181 01 .uleb128 0x1
+ 2352 0182 12 .uleb128 0x12
+ 2353 0183 01 .uleb128 0x1
+ 2354 0184 40 .uleb128 0x40
+ 2355 0185 06 .uleb128 0x6
+ 2356 0186 01 .uleb128 0x1
+ 2357 0187 13 .uleb128 0x13
+ 2358 0188 00 .byte 0x0
+ 2359 0189 00 .byte 0x0
+ 2360 018a 20 .uleb128 0x20
+ 2361 018b 34 .uleb128 0x34
+ 2362 018c 00 .byte 0x0
+ 2363 018d 03 .uleb128 0x3
+ 2364 018e 08 .uleb128 0x8
+ 2365 018f 3A .uleb128 0x3a
+ 2366 0190 0B .uleb128 0xb
+ 2367 0191 3B .uleb128 0x3b
+ 2368 0192 0B .uleb128 0xb
+ 2369 0193 49 .uleb128 0x49
+ 2370 0194 13 .uleb128 0x13
+ 2371 0195 02 .uleb128 0x2
+ 2372 0196 0A .uleb128 0xa
+ 2373 0197 00 .byte 0x0
+ 2374 0198 00 .byte 0x0
+ 2375 0199 21 .uleb128 0x21
+ 2376 019a 34 .uleb128 0x34
+ 2377 019b 00 .byte 0x0
+ 2378 019c 03 .uleb128 0x3
+ 2379 019d 0E .uleb128 0xe
+ 2380 019e 49 .uleb128 0x49
+ 2381 019f 13 .uleb128 0x13
+ 2382 01a0 34 .uleb128 0x34
+ 2383 01a1 0C .uleb128 0xc
+ 2384 01a2 02 .uleb128 0x2
+ 2385 01a3 0A .uleb128 0xa
+ 2386 01a4 00 .byte 0x0
+ 2387 01a5 00 .byte 0x0
+ 2388 01a6 22 .uleb128 0x22
+ 2389 01a7 01 .uleb128 0x1
+ 2390 01a8 01 .byte 0x1
+ 2391 01a9 49 .uleb128 0x49
+ 2392 01aa 13 .uleb128 0x13
+ 2393 01ab 01 .uleb128 0x1
+ 2394 01ac 13 .uleb128 0x13
+
GAS LISTING /tmp/ccIvKeEl.s page 50
+
+
+ 2395 01ad 00 .byte 0x0
+ 2396 01ae 00 .byte 0x0
+ 2397 01af 23 .uleb128 0x23
+ 2398 01b0 34 .uleb128 0x34
+ 2399 01b1 00 .byte 0x0
+ 2400 01b2 03 .uleb128 0x3
+ 2401 01b3 0E .uleb128 0xe
+ 2402 01b4 3A .uleb128 0x3a
+ 2403 01b5 0B .uleb128 0xb
+ 2404 01b6 3B .uleb128 0x3b
+ 2405 01b7 0B .uleb128 0xb
+ 2406 01b8 49 .uleb128 0x49
+ 2407 01b9 13 .uleb128 0x13
+ 2408 01ba 02 .uleb128 0x2
+ 2409 01bb 0A .uleb128 0xa
+ 2410 01bc 00 .byte 0x0
+ 2411 01bd 00 .byte 0x0
+ 2412 01be 00 .byte 0x0
+ 2413 .section .debug_pubnames,"", at progbits
+ 2414 0000 2A000000 .long 0x2a
+ 2415 0004 0200 .value 0x2
+ 2416 0006 00000000 .long .Ldebug_info0
+ 2417 000a 700C0000 .long 0xc70
+ 2418 000e 9C0B0000 .long 0xb9c
+ 2419 0012 4B4E756C .string "KNullBlockCipherVecMake"
+ 2419 6C426C6F
+ 2419 636B4369
+ 2419 70686572
+ 2419 5665634D
+ 2420 002a 00000000 .long 0x0
+ 2421 .section .debug_aranges,"", at progbits
+ 2422 0000 2C000000 .long 0x2c
+ 2423 0004 0200 .value 0x2
+ 2424 0006 00000000 .long .Ldebug_info0
+ 2425 000a 08 .byte 0x8
+ 2426 000b 00 .byte 0x0
+ 2427 000c 0000 .value 0x0
+ 2428 000e 0000 .value 0x0
+ 2429 0010 00000000 .quad .Ltext0
+ 2429 00000000
+ 2430 0018 0C010000 .quad .Letext0-.Ltext0
+ 2430 00000000
+ 2431 0020 00000000 .quad 0x0
+ 2431 00000000
+ 2432 0028 00000000 .quad 0x0
+ 2432 00000000
+ 2433 .section .debug_str,"MS", at progbits,1
+ 2434 .LASF267:
+ 2435 0000 7263496E .string "rcInsufficient"
+ 2435 73756666
+ 2435 69636965
+ 2435 6E7400
+ 2436 .LASF284:
+ 2437 000f 72634475 .string "rcDuplicate"
+ 2437 706C6963
+ 2437 61746500
+ 2438 .LASF87:
+
GAS LISTING /tmp/ccIvKeEl.s page 51
+
+
+ 2439 001b 7263436F .string "rcCondition"
+ 2439 6E646974
+ 2439 696F6E00
+ 2440 .LASF201:
+ 2441 0027 7263456E .string "rcEncrypting"
+ 2441 63727970
+ 2441 74696E67
+ 2441 00
+ 2442 .LASF160:
+ 2443 0034 72634F70 .string "rcOpening"
+ 2443 656E696E
+ 2443 6700
+ 2444 .LASF168:
+ 2445 003e 72635065 .string "rcPersisting"
+ 2445 72736973
+ 2445 74696E67
+ 2445 00
+ 2446 .LASF206:
+ 2447 004b 72635365 .string "rcSending"
+ 2447 6E64696E
+ 2447 6700
+ 2448 .LASF200:
+ 2449 0055 72634170 .string "rcAppending"
+ 2449 70656E64
+ 2449 696E6700
+ 2450 .LASF186:
+ 2451 0061 72635369 .string "rcSignaling"
+ 2451 676E616C
+ 2451 696E6700
+ 2452 .LASF13:
+ 2453 006d 4442475F .string "DBG_BLAST"
+ 2453 424C4153
+ 2453 5400
+ 2454 .LASF242:
+ 2455 0077 72635369 .string "rcSignalSet"
+ 2455 676E616C
+ 2455 53657400
+ 2456 .LASF188:
+ 2457 0083 72634174 .string "rcAttaching"
+ 2457 74616368
+ 2457 696E6700
+ 2458 .LASF120:
+ 2459 008f 72635461 .string "rcTable"
+ 2459 626C6500
+ 2460 .LASF84:
+ 2461 0097 72634275 .string "rcBuffer"
+ 2461 66666572
+ 2461 00
+ 2462 .LASF216:
+ 2463 00a0 72634D65 .string "rcMemory"
+ 2463 6D6F7279
+ 2463 00
+ 2464 .LASF149:
+ 2465 00a9 72634C6F .string "rcLocking"
+ 2465 636B696E
+ 2465 6700
+ 2466 .LASF184:
+
GAS LISTING /tmp/ccIvKeEl.s page 52
+
+
+ 2467 00b3 72635061 .string "rcParsing"
+ 2467 7273696E
+ 2467 6700
+ 2468 .LASF213:
+ 2469 00bd 72635365 .string "rcSelf"
+ 2469 6C6600
+ 2470 .LASF106:
+ 2471 00c4 72634D65 .string "rcMetadata"
+ 2471 74616461
+ 2471 746100
+ 2472 .LASF229:
+ 2473 00cf 72634172 .string "rcArcHardLink"
+ 2473 63486172
+ 2473 644C696E
+ 2473 6B00
+ 2474 .LASF55:
+ 2475 00dd 7263436F .string "rcCont"
+ 2475 6E7400
+ 2476 .LASF237:
+ 2477 00e4 72634368 .string "rcChecksum"
+ 2477 65636B73
+ 2477 756D00
+ 2478 .LASF314:
+ 2479 00ef 5F5F6675 .string "__func__"
+ 2479 6E635F5F
+ 2479 00
+ 2480 .LASF281:
+ 2481 00f8 7263546F .string "rcTooShort"
+ 2481 6F53686F
+ 2481 727400
+ 2482 .LASF111:
+ 2483 0103 72635061 .string "rcPagemap"
+ 2483 67656D61
+ 2483 7000
+ 2484 .LASF63:
+ 2485 010d 72634170 .string "rcApp"
+ 2485 7000
+ 2486 .LASF94:
+ 2487 0113 72634669 .string "rcFileDesc"
+ 2487 6C654465
+ 2487 736300
+ 2488 .LASF233:
+ 2489 011e 72634974 .string "rcItem"
+ 2489 656D00
+ 2490 .LASF125:
+ 2491 0125 72635472 .string "rcTrie"
+ 2491 696500
+ 2492 .LASF66:
+ 2493 012c 72634C61 .string "rcLastModule_v1_0"
+ 2493 73744D6F
+ 2493 64756C65
+ 2493 5F76315F
+ 2493 3000
+ 2494 .LASF73:
+ 2495 013e 72634C61 .string "rcLastModule_v1_1"
+ 2495 73744D6F
+ 2495 64756C65
+
GAS LISTING /tmp/ccIvKeEl.s page 53
+
+
+ 2495 5F76315F
+ 2495 3100
+ 2496 .LASF224:
+ 2497 0150 72634279 .string "rcByteOrder"
+ 2497 74654F72
+ 2497 64657200
+ 2498 .LASF142:
+ 2499 015c 7263436F .string "rcConstructing"
+ 2499 6E737472
+ 2499 75637469
+ 2499 6E6700
+ 2500 .LASF313:
+ 2501 016b 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 2501 45545459
+ 2501 5F46554E
+ 2501 4354494F
+ 2501 4E5F5F00
+ 2502 .LASF9:
+ 2503 017f 72635F74 .string "rc_t"
+ 2503 00
+ 2504 .LASF218:
+ 2505 0184 7263466F .string "rcFormat"
+ 2505 726D6174
+ 2505 00
+ 2506 .LASF276:
+ 2507 018d 7263556E .string "rcUnauthorized"
+ 2507 61757468
+ 2507 6F72697A
+ 2507 656400
+ 2508 .LASF156:
+ 2509 019c 72635265 .string "rcRemoving"
+ 2509 6D6F7669
+ 2509 6E6700
+ 2510 .LASF69:
+ 2511 01a7 72634B72 .string "rcKrypto"
+ 2511 7970746F
+ 2511 00
+ 2512 .LASF309:
+ 2513 01b0 4B4E756C .string "KNullBlockCipherVecDecrypt"
+ 2513 6C426C6F
+ 2513 636B4369
+ 2513 70686572
+ 2513 56656344
+ 2514 .LASF147:
+ 2515 01cb 72635669 .string "rcVisiting"
+ 2515 73697469
+ 2515 6E6700
+ 2516 .LASF77:
+ 2517 01d6 72634172 .string "rcArc"
+ 2517 6300
+ 2518 .LASF52:
+ 2519 01dc 72634578 .string "rcExe"
+ 2519 6500
+ 2520 .LASF282:
+ 2521 01e2 7263546F .string "rcTooLong"
+ 2521 6F4C6F6E
+ 2521 6700
+
GAS LISTING /tmp/ccIvKeEl.s page 54
+
+
+ 2522 .LASF210:
+ 2523 01ec 52434F62 .string "RCObject"
+ 2523 6A656374
+ 2523 00
+ 2524 .LASF220:
+ 2525 01f5 7263496E .string "rcInterface"
+ 2525 74657266
+ 2525 61636500
+ 2526 .LASF148:
+ 2527 0201 72635265 .string "rcResolving"
+ 2527 736F6C76
+ 2527 696E6700
+ 2528 .LASF90:
+ 2529 020d 72634469 .string "rcDirectory"
+ 2529 72656374
+ 2529 6F727900
+ 2530 .LASF2:
+ 2531 0219 6C6F6E67 .string "long int"
+ 2531 20696E74
+ 2531 00
+ 2532 .LASF178:
+ 2533 0222 72635661 .string "rcValidating"
+ 2533 6C696461
+ 2533 74696E67
+ 2533 00
+ 2534 .LASF80:
+ 2535 022f 72634172 .string "rcArgv"
+ 2535 677600
+ 2536 .LASF56:
+ 2537 0236 72634353 .string "rcCS"
+ 2537 00
+ 2538 .LASF137:
+ 2539 023b 72635572 .string "rcUri"
+ 2539 6900
+ 2540 .LASF159:
+ 2541 0241 72634372 .string "rcCreating"
+ 2541 65617469
+ 2541 6E6700
+ 2542 .LASF45:
+ 2543 024c 656E6372 .string "encrypt"
+ 2543 79707400
+ 2544 .LASF35:
+ 2545 0254 76313238 .string "v128_u8_t"
+ 2545 5F75385F
+ 2545 7400
+ 2546 .LASF18:
+ 2547 025e 4442475F .string "DBG_XML"
+ 2547 584D4C00
+ 2548 .LASF30:
+ 2549 0266 4442475F .string "DBG_MOD_COUNT"
+ 2549 4D4F445F
+ 2549 434F554E
+ 2549 5400
+ 2550 .LASF61:
+ 2551 0274 72634442 .string "rcDB"
+ 2551 00
+ 2552 .LASF307:
+
GAS LISTING /tmp/ccIvKeEl.s page 55
+
+
+ 2553 0279 4B4E756C .string "KNullBlockCipherVecEncrypt"
+ 2553 6C426C6F
+ 2553 636B4369
+ 2553 70686572
+ 2553 56656345
+ 2554 .LASF239:
+ 2555 0294 7263436F .string "rcConnection"
+ 2555 6E6E6563
+ 2555 74696F6E
+ 2555 00
+ 2556 .LASF107:
+ 2557 02a1 72634D67 .string "rcMgr"
+ 2557 7200
+ 2558 .LASF269:
+ 2559 02a7 72635669 .string "rcViolated"
+ 2559 6F6C6174
+ 2559 656400
+ 2560 .LASF202:
+ 2561 02b2 72634465 .string "rcDecrypting"
+ 2561 63727970
+ 2561 74696E67
+ 2561 00
+ 2562 .LASF0:
+ 2563 02bf 7369676E .string "signed char"
+ 2563 65642063
+ 2563 68617200
+ 2564 .LASF5:
+ 2565 02cb 75696E74 .string "uint8_t"
+ 2565 385F7400
+ 2566 .LASF320:
+ 2567 02d3 4B4E756C .string "KNullBlockCipherVecDestroy"
+ 2567 6C426C6F
+ 2567 636B4369
+ 2567 70686572
+ 2567 56656344
+ 2568 .LASF85:
+ 2569 02ee 72634368 .string "rcChar"
+ 2569 617200
+ 2570 .LASF70:
+ 2571 02f5 72635244 .string "rcRDBMS"
+ 2571 424D5300
+ 2572 .LASF179:
+ 2573 02fd 72634578 .string "rcExecuting"
+ 2573 65637574
+ 2573 696E6700
+ 2574 .LASF306:
+ 2575 0309 64656372 .string "decrypt_key"
+ 2575 7970745F
+ 2575 6B657900
+ 2576 .LASF11:
+ 2577 0315 4442475F .string "DBG_MOD_NOT_FOUND"
+ 2577 4D4F445F
+ 2577 4E4F545F
+ 2577 464F554E
+ 2577 4400
+ 2578 .LASF166:
+ 2579 0327 72635265 .string "rcReverting"
+
GAS LISTING /tmp/ccIvKeEl.s page 56
+
+
+ 2579 76657274
+ 2579 696E6700
+ 2580 .LASF82:
+ 2581 0333 72634261 .string "rcBarrier"
+ 2581 72726965
+ 2581 7200
+ 2582 .LASF266:
+ 2583 033d 72634578 .string "rcExhausted"
+ 2583 68617573
+ 2583 74656400
+ 2584 .LASF3:
+ 2585 0349 756E7369 .string "unsigned char"
+ 2585 676E6564
+ 2585 20636861
+ 2585 7200
+ 2586 .LASF139:
+ 2587 0357 5243436F .string "RCContext"
+ 2587 6E746578
+ 2587 7400
+ 2588 .LASF102:
+ 2589 0361 72634C6F .string "rcLock"
+ 2589 636B00
+ 2590 .LASF255:
+ 2591 0368 72634261 .string "rcBadVersion"
+ 2591 64566572
+ 2591 73696F6E
+ 2591 00
+ 2592 .LASF256:
+ 2593 0375 72634465 .string "rcDestroyed"
+ 2593 7374726F
+ 2593 79656400
+ 2594 .LASF119:
+ 2595 0381 72635374 .string "rcString"
+ 2595 72696E67
+ 2595 00
+ 2596 .LASF315:
+ 2597 038a 4B4E756C .string "KNullBlockCipherVecaes_ncbi_name"
+ 2597 6C426C6F
+ 2597 636B4369
+ 2597 70686572
+ 2597 56656361
+ 2598 .LASF81:
+ 2599 03ab 72634174 .string "rcAttr"
+ 2599 747200
+ 2600 .LASF103:
+ 2601 03b2 72634C6F .string "rcLog"
+ 2601 6700
+ 2602 .LASF312:
+ 2603 03b8 6E65775F .string "new_obj"
+ 2603 6F626A00
+ 2604 .LASF14:
+ 2605 03c0 4442475F .string "DBG_KDB"
+ 2605 4B444200
+ 2606 .LASF207:
+ 2607 03c8 72635072 .string "rcProcessing"
+ 2607 6F636573
+ 2607 73696E67
+
GAS LISTING /tmp/ccIvKeEl.s page 57
+
+
+ 2607 00
+ 2608 .LASF57:
+ 2609 03d5 72634646 .string "rcFF"
+ 2609 00
+ 2610 .LASF311:
+ 2611 03da 5F426F6F .string "_Bool"
+ 2611 6C00
+ 2612 .LASF58:
+ 2613 03e0 72634653 .string "rcFS"
+ 2613 00
+ 2614 .LASF145:
+ 2615 03e5 72634163 .string "rcAccessing"
+ 2615 63657373
+ 2615 696E6700
+ 2616 .LASF263:
+ 2617 03f1 7263496E .string "rcInterrupted"
+ 2617 74657272
+ 2617 75707465
+ 2617 6400
+ 2618 .LASF271:
+ 2619 03ff 72634E6F .string "rcNotFound"
+ 2619 74466F75
+ 2619 6E6400
+ 2620 .LASF10:
+ 2621 040a 63686172 .string "char"
+ 2621 00
+ 2622 .LASF109:
+ 2623 040f 72634E6F .string "rcNode"
+ 2623 646500
+ 2624 .LASF28:
+ 2625 0416 4442475F .string "DBG_AES"
+ 2625 41455300
+ 2626 .LASF240:
+ 2627 041e 72634572 .string "rcError"
+ 2627 726F7200
+ 2628 .LASF157:
+ 2629 0426 7263436C .string "rcClearing"
+ 2629 65617269
+ 2629 6E6700
+ 2630 .LASF215:
+ 2631 0431 72634F66 .string "rcOffset"
+ 2631 66736574
+ 2631 00
+ 2632 .LASF161:
+ 2633 043a 7263436C .string "rcClosing"
+ 2633 6F73696E
+ 2633 6700
+ 2634 .LASF93:
+ 2635 0444 72634669 .string "rcFile"
+ 2635 6C6500
+ 2636 .LASF122:
+ 2637 044b 72635469 .string "rcTimeout"
+ 2637 6D656F75
+ 2637 7400
+ 2638 .LASF110:
+ 2639 0455 72634E75 .string "rcNumeral"
+ 2639 6D657261
+
GAS LISTING /tmp/ccIvKeEl.s page 58
+
+
+ 2639 6C00
+ 2640 .LASF187:
+ 2641 045f 72635761 .string "rcWaiting"
+ 2641 6974696E
+ 2641 6700
+ 2642 .LASF191:
+ 2643 0469 72634650 .string "rcFPCoding"
+ 2643 436F6469
+ 2643 6E6700
+ 2644 .LASF243:
+ 2645 0474 72635369 .string "rcSize"
+ 2645 7A6500
+ 2646 .LASF228:
+ 2647 047b 72634469 .string "rcDirEntry"
+ 2647 72456E74
+ 2647 727900
+ 2648 .LASF180:
+ 2649 0486 72634875 .string "rcHuffmanCoding"
+ 2649 66666D61
+ 2649 6E436F64
+ 2649 696E6700
+ 2650 .LASF23:
+ 2651 0496 4442475F .string "DBG_KFG"
+ 2651 4B464700
+ 2652 .LASF261:
+ 2653 049e 72634275 .string "rcBusy"
+ 2653 737900
+ 2654 .LASF20:
+ 2655 04a5 4442475F .string "DBG_SRA"
+ 2655 53524100
+ 2656 .LASF219:
+ 2657 04ad 72635472 .string "rcTransfer"
+ 2657 616E7366
+ 2657 657200
+ 2658 .LASF17:
+ 2659 04b8 4442475F .string "DBG_KFS"
+ 2659 4B465300
+ 2660 .LASF174:
+ 2661 04c0 72635061 .string "rcPacking"
+ 2661 636B696E
+ 2661 6700
+ 2662 .LASF170:
+ 2663 04ca 7263436F .string "rcCopying"
+ 2663 7079696E
+ 2663 6700
+ 2664 .LASF177:
+ 2665 04d4 72634465 .string "rcDecoding"
+ 2665 636F6469
+ 2665 6E6700
+ 2666 .LASF150:
+ 2667 04df 7263556E .string "rcUnlocking"
+ 2667 6C6F636B
+ 2667 696E6700
+ 2668 .LASF48:
+ 2669 04eb 4B426C6F .string "KBlockCipherVec_vt_v1"
+ 2669 636B4369
+ 2669 70686572
+
GAS LISTING /tmp/ccIvKeEl.s page 59
+
+
+ 2669 5665635F
+ 2669 76745F76
+ 2670 .LASF16:
+ 2671 0501 4442475F .string "DBG_LEGREF"
+ 2671 4C454752
+ 2671 454600
+ 2672 .LASF298:
+ 2673 050c 4B4E756C .string "KNullBlockCipherVecBlockSize"
+ 2673 6C426C6F
+ 2673 636B4369
+ 2673 70686572
+ 2673 56656342
+ 2674 .LASF151:
+ 2675 0529 72635265 .string "rcRenaming"
+ 2675 6E616D69
+ 2675 6E6700
+ 2676 .LASF302:
+ 2677 0534 75736572 .string "user_key"
+ 2677 5F6B6579
+ 2677 00
+ 2678 .LASF221:
+ 2679 053d 72634964 .string "rcId"
+ 2679 00
+ 2680 .LASF134:
+ 2681 0542 7263436D .string "rcCmd"
+ 2681 6400
+ 2682 .LASF26:
+ 2683 0548 4442475F .string "DBG_LOADLIB"
+ 2683 4C4F4144
+ 2683 4C494200
+ 2684 .LASF273:
+ 2685 0554 7263556E .string "rcUnlocked"
+ 2685 6C6F636B
+ 2685 656400
+ 2686 .LASF74:
+ 2687 055f 52434D6F .string "RCModule"
+ 2687 64756C65
+ 2687 00
+ 2688 .LASF235:
+ 2689 0568 7263456E .string "rcEncryption"
+ 2689 63727970
+ 2689 74696F6E
+ 2689 00
+ 2690 .LASF270:
+ 2691 0575 72634578 .string "rcExists"
+ 2691 69737473
+ 2691 00
+ 2692 .LASF36:
+ 2693 057e 43697068 .string "CipherVec"
+ 2693 65725665
+ 2693 6300
+ 2694 .LASF289:
+ 2695 0588 72634F70 .string "rcOpen"
+ 2695 656E00
+ 2696 .LASF275:
+ 2697 058f 72634465 .string "rcDeadlock"
+ 2697 61646C6F
+
GAS LISTING /tmp/ccIvKeEl.s page 60
+
+
+ 2697 636B00
+ 2698 .LASF212:
+ 2699 059a 72634C69 .string "rcLink"
+ 2699 6E6B00
+ 2700 .LASF199:
+ 2701 05a1 7263466C .string "rcFlushing"
+ 2701 75736869
+ 2701 6E6700
+ 2702 .LASF247:
+ 2703 05ac 72634E6F .string "rcNoErr"
+ 2703 45727200
+ 2704 .LASF226:
+ 2705 05b4 72635461 .string "rcTag"
+ 2705 6700
+ 2706 .LASF22:
+ 2707 05ba 4442475F .string "DBG_ALIGN"
+ 2707 414C4947
+ 2707 4E00
+ 2708 .LASF190:
+ 2709 05c4 72634C6F .string "rcLogging"
+ 2709 6767696E
+ 2709 6700
+ 2710 .LASF283:
+ 2711 05ce 7263546F .string "rcTooBig"
+ 2711 6F426967
+ 2711 00
+ 2712 .LASF127:
+ 2713 05d7 72635665 .string "rcVector"
+ 2713 63746F72
+ 2713 00
+ 2714 .LASF162:
+ 2715 05e0 72635265 .string "rcResizing"
+ 2715 73697A69
+ 2715 6E6700
+ 2716 .LASF136:
+ 2717 05eb 72635175 .string "rcQuery"
+ 2717 65727900
+ 2718 .LASF8:
+ 2719 05f3 6C6F6E67 .string "long unsigned int"
+ 2719 20756E73
+ 2719 69676E65
+ 2719 6420696E
+ 2719 7400
+ 2720 .LASF268:
+ 2721 0605 72634578 .string "rcExcessive"
+ 2721 63657373
+ 2721 69766500
+ 2722 .LASF196:
+ 2723 0611 72634576 .string "rcEvaluating"
+ 2723 616C7561
+ 2723 74696E67
+ 2723 00
+ 2724 .LASF133:
+ 2725 061e 7263526E .string "rcRng"
+ 2725 6700
+ 2726 .LASF141:
+ 2727 0624 72634361 .string "rcCasting"
+
GAS LISTING /tmp/ccIvKeEl.s page 61
+
+
+ 2727 7374696E
+ 2727 6700
+ 2728 .LASF300:
+ 2729 062e 73656C66 .string "self"
+ 2729 00
+ 2730 .LASF101:
+ 2731 0633 72634974 .string "rcIterator"
+ 2731 65726174
+ 2731 6F7200
+ 2732 .LASF49:
+ 2733 063e 4B426C6F .string "KBlockCipherVec"
+ 2733 636B4369
+ 2733 70686572
+ 2733 56656300
+ 2734 .LASF118:
+ 2735 064e 72635374 .string "rcStorage"
+ 2735 6F726167
+ 2735 6500
+ 2736 .LASF285:
+ 2737 0658 72634F75 .string "rcOutOfKDirectory"
+ 2737 744F664B
+ 2737 44697265
+ 2737 63746F72
+ 2737 7900
+ 2738 .LASF230:
+ 2739 066a 7263526F .string "rcRow"
+ 2739 7700
+ 2740 .LASF19:
+ 2741 0670 4442475F .string "DBG_VDB"
+ 2741 56444200
+ 2742 .LASF130:
+ 2743 0678 72634C61 .string "rcLastTarget_v1_0"
+ 2743 73745461
+ 2743 72676574
+ 2743 5F76315F
+ 2743 3000
+ 2744 .LASF138:
+ 2745 068a 72634C61 .string "rcLastTarget_v1_1"
+ 2745 73745461
+ 2745 72676574
+ 2745 5F76315F
+ 2745 3100
+ 2746 .LASF117:
+ 2747 069c 72635365 .string "rcSemaphore"
+ 2747 6D617068
+ 2747 6F726500
+ 2748 .LASF262:
+ 2749 06a8 7263496E .string "rcIncomplete"
+ 2749 636F6D70
+ 2749 6C657465
+ 2749 00
+ 2750 .LASF291:
+ 2751 06b5 72634E6F .string "rcNotOpen"
+ 2751 744F7065
+ 2751 6E00
+ 2752 .LASF100:
+ 2753 06bf 7263496E .string "rcIndex"
+
GAS LISTING /tmp/ccIvKeEl.s page 62
+
+
+ 2753 64657800
+ 2754 .LASF21:
+ 2755 06c7 4442475F .string "DBG_XARC"
+ 2755 58415243
+ 2755 00
+ 2756 .LASF317:
+ 2757 06d0 474E5520 .string "GNU C 4.4.2"
+ 2757 4320342E
+ 2757 342E3200
+ 2758 .LASF53:
+ 2759 06dc 72635275 .string "rcRuntime"
+ 2759 6E74696D
+ 2759 6500
+ 2760 .LASF92:
+ 2761 06e6 7263586D .string "rcXmlDoc"
+ 2761 6C446F63
+ 2761 00
+ 2762 .LASF31:
+ 2763 06ef 6C6F6E67 .string "long long int"
+ 2763 206C6F6E
+ 2763 6720696E
+ 2763 7400
+ 2764 .LASF173:
+ 2765 06fd 7263506F .string "rcPositioning"
+ 2765 73697469
+ 2765 6F6E696E
+ 2765 6700
+ 2766 .LASF114:
+ 2767 070b 72635175 .string "rcQueue"
+ 2767 65756500
+ 2768 .LASF189:
+ 2769 0713 72634465 .string "rcDetaching"
+ 2769 74616368
+ 2769 696E6700
+ 2770 .LASF104:
+ 2771 071f 72634D44 .string "rcMD5SumFmt"
+ 2771 3553756D
+ 2771 466D7400
+ 2772 .LASF155:
+ 2773 072b 7263496E .string "rcInserting"
+ 2773 73657274
+ 2773 696E6700
+ 2774 .LASF203:
+ 2775 0737 7263436F .string "rcComparing"
+ 2775 6D706172
+ 2775 696E6700
+ 2776 .LASF265:
+ 2777 0743 7263456D .string "rcEmpty"
+ 2777 70747900
+ 2778 .LASF97:
+ 2779 074b 7263466F .string "rcFormatter"
+ 2779 726D6174
+ 2779 74657200
+ 2780 .LASF34:
+ 2781 0757 646F7562 .string "double"
+ 2781 6C6500
+ 2782 .LASF182:
+
GAS LISTING /tmp/ccIvKeEl.s page 63
+
+
+ 2783 075e 72635265 .string "rcRegistering"
+ 2783 67697374
+ 2783 6572696E
+ 2783 6700
+ 2784 .LASF71:
+ 2785 076c 72634E53 .string "rcNS"
+ 2785 00
+ 2786 .LASF214:
+ 2787 0771 72635061 .string "rcParam"
+ 2787 72616D00
+ 2788 .LASF75:
+ 2789 0779 52435461 .string "RCTarget"
+ 2789 72676574
+ 2789 00
+ 2790 .LASF236:
+ 2791 0782 72634372 .string "rcCrc"
+ 2791 6300
+ 2792 .LASF25:
+ 2793 0788 4442475F .string "DBG_SEARCH"
+ 2793 53454152
+ 2793 434800
+ 2794 .LASF316:
+ 2795 0793 4B4E756C .string "KNullBlockCipherVec_vt_"
+ 2795 6C426C6F
+ 2795 636B4369
+ 2795 70686572
+ 2795 5665635F
+ 2796 .LASF64:
+ 2797 07ab 7263584D .string "rcXML"
+ 2797 4C00
+ 2798 .LASF27:
+ 2799 07b1 4442475F .string "DBG_VFS"
+ 2799 56465300
+ 2800 .LASF32:
+ 2801 07b9 666C6F61 .string "float"
+ 2801 7400
+ 2802 .LASF158:
+ 2803 07bf 72635570 .string "rcUpdating"
+ 2803 64617469
+ 2803 6E6700
+ 2804 .LASF185:
+ 2805 07ca 7263436F .string "rcConverting"
+ 2805 6E766572
+ 2805 74696E67
+ 2805 00
+ 2806 .LASF171:
+ 2807 07d7 7263436F .string "rcConcatenating"
+ 2807 6E636174
+ 2807 656E6174
+ 2807 696E6700
+ 2808 .LASF50:
+ 2809 07e7 4B426C6F .string "KBlockCipher"
+ 2809 636B4369
+ 2809 70686572
+ 2809 00
+ 2810 .LASF128:
+ 2811 07f4 72634479 .string "rcDylib"
+
GAS LISTING /tmp/ccIvKeEl.s page 64
+
+
+ 2811 6C696200
+ 2812 .LASF277:
+ 2813 07fc 72635265 .string "rcReadonly"
+ 2813 61646F6E
+ 2813 6C7900
+ 2814 .LASF7:
+ 2815 0807 756E7369 .string "unsigned int"
+ 2815 676E6564
+ 2815 20696E74
+ 2815 00
+ 2816 .LASF278:
+ 2817 0814 72635772 .string "rcWriteonly"
+ 2817 6974656F
+ 2817 6E6C7900
+ 2818 .LASF272:
+ 2819 0820 72634C6F .string "rcLocked"
+ 2819 636B6564
+ 2819 00
+ 2820 .LASF154:
+ 2821 0829 72635072 .string "rcProjecting"
+ 2821 6F6A6563
+ 2821 74696E67
+ 2821 00
+ 2822 .LASF59:
+ 2823 0836 72635053 .string "rcPS"
+ 2823 00
+ 2824 .LASF244:
+ 2825 083b 72635265 .string "rcRefcount"
+ 2825 66636F75
+ 2825 6E7400
+ 2826 .LASF79:
+ 2827 0846 7263546F .string "rcTocEntry"
+ 2827 63456E74
+ 2827 727900
+ 2828 .LASF234:
+ 2829 0851 72634D6F .string "rcMode"
+ 2829 646500
+ 2830 .LASF310:
+ 2831 0858 4B4E756C .string "KNullBlockCipherVecProcessorSupport"
+ 2831 6C426C6F
+ 2831 636B4369
+ 2831 70686572
+ 2831 56656350
+ 2832 .LASF293:
+ 2833 087c 7263556E .string "rcUnequal"
+ 2833 65717561
+ 2833 6C00
+ 2834 .LASF274:
+ 2835 0886 72634465 .string "rcDetached"
+ 2835 74616368
+ 2835 656400
+ 2836 .LASF280:
+ 2837 0891 7263496E .string "rcInPlaceNotAllowed"
+ 2837 506C6163
+ 2837 654E6F74
+ 2837 416C6C6F
+ 2837 77656400
+
GAS LISTING /tmp/ccIvKeEl.s page 65
+
+
+ 2838 .LASF222:
+ 2839 08a5 72635261 .string "rcRange"
+ 2839 6E676500
+ 2840 .LASF319:
+ 2841 08ad 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 2841 652F726F
+ 2841 6461726D
+ 2841 65722F73
+ 2841 72615F73
+ 2842 .LASF232:
+ 2843 08f5 72634C61 .string "rcLastObject_v1_0"
+ 2843 73744F62
+ 2843 6A656374
+ 2843 5F76315F
+ 2843 3000
+ 2844 .LASF245:
+ 2845 0907 72634C61 .string "rcLastObject_v1_1"
+ 2845 73744F62
+ 2845 6A656374
+ 2845 5F76315F
+ 2845 3100
+ 2846 .LASF198:
+ 2847 0919 72634C61 .string "rcLastContext_v1_0"
+ 2847 7374436F
+ 2847 6E746578
+ 2847 745F7631
+ 2847 5F3000
+ 2848 .LASF209:
+ 2849 092c 72634C61 .string "rcLastContext_v1_1"
+ 2849 7374436F
+ 2849 6E746578
+ 2849 745F7631
+ 2849 5F3100
+ 2850 .LASF105:
+ 2851 093f 72634D65 .string "rcMemMap"
+ 2851 6D4D6170
+ 2851 00
+ 2852 .LASF129:
+ 2853 0948 72634578 .string "rcExpression"
+ 2853 70726573
+ 2853 73696F6E
+ 2853 00
+ 2854 .LASF175:
+ 2855 0955 7263556E .string "rcUnpacking"
+ 2855 7061636B
+ 2855 696E6700
+ 2856 .LASF91:
+ 2857 0961 7263446F .string "rcDoc"
+ 2857 6300
+ 2858 .LASF12:
+ 2859 0967 4442475F .string "DBG_APP"
+ 2859 41505000
+ 2860 .LASF192:
+ 2861 096f 72634D75 .string "rcMultiplexing"
+ 2861 6C746970
+ 2861 6C657869
+ 2861 6E6700
+
GAS LISTING /tmp/ccIvKeEl.s page 66
+
+
+ 2862 .LASF194:
+ 2863 097e 72635365 .string "rcSearching"
+ 2863 61726368
+ 2863 696E6700
+ 2864 .LASF294:
+ 2865 098a 72634661 .string "rcFailed"
+ 2865 696C6564
+ 2865 00
+ 2866 .LASF259:
+ 2867 0993 7263496E .string "rcIncorrect"
+ 2867 636F7272
+ 2867 65637400
+ 2868 .LASF98:
+ 2869 099f 72634675 .string "rcFunctParam"
+ 2869 6E637450
+ 2869 6172616D
+ 2869 00
+ 2870 .LASF208:
+ 2871 09ac 72634964 .string "rcIdentifying"
+ 2871 656E7469
+ 2871 6679696E
+ 2871 6700
+ 2872 .LASF223:
+ 2873 09ba 7263436F .string "rcConstraint"
+ 2873 6E737472
+ 2873 61696E74
+ 2873 00
+ 2874 .LASF249:
+ 2875 09c7 7263556E .string "rcUnknown"
+ 2875 6B6E6F77
+ 2875 6E00
+ 2876 .LASF88:
+ 2877 09d1 72634375 .string "rcCursor"
+ 2877 72736F72
+ 2877 00
+ 2878 .LASF246:
+ 2879 09da 52435374 .string "RCState"
+ 2879 61746500
+ 2880 .LASF47:
+ 2881 09e2 4B426C6F .string "KBlockCipherByte"
+ 2881 636B4369
+ 2881 70686572
+ 2881 42797465
+ 2881 00
+ 2882 .LASF38:
+ 2883 09f3 4B426C6F .string "KBlockCipherByte_vt_v1"
+ 2883 636B4369
+ 2883 70686572
+ 2883 42797465
+ 2883 5F76745F
+ 2884 .LASF286:
+ 2885 0a0a 72634967 .string "rcIgnored"
+ 2885 6E6F7265
+ 2885 6400
+ 2886 .LASF144:
+ 2887 0a14 72635265 .string "rcReleasing"
+ 2887 6C656173
+
GAS LISTING /tmp/ccIvKeEl.s page 67
+
+
+ 2887 696E6700
+ 2888 .LASF67:
+ 2889 0a20 72634B46 .string "rcKFG"
+ 2889 4700
+ 2890 .LASF225:
+ 2891 0a26 72634D65 .string "rcMessage"
+ 2891 73736167
+ 2891 6500
+ 2892 .LASF172:
+ 2893 0a30 7263466F .string "rcFormatting"
+ 2893 726D6174
+ 2893 74696E67
+ 2893 00
+ 2894 .LASF65:
+ 2895 0a3d 72635352 .string "rcSRA"
+ 2895 4100
+ 2896 .LASF241:
+ 2897 0a43 7263456E .string "rcEnvironment"
+ 2897 7669726F
+ 2897 6E6D656E
+ 2897 7400
+ 2898 .LASF33:
+ 2899 0a51 6C6F6E67 .string "long long unsigned int"
+ 2899 206C6F6E
+ 2899 6720756E
+ 2899 7369676E
+ 2899 65642069
+ 2900 .LASF40:
+ 2901 0a68 64657374 .string "destroy"
+ 2901 726F7900
+ 2902 .LASF123:
+ 2903 0a70 7263546F .string "rcToken"
+ 2903 6B656E00
+ 2904 .LASF183:
+ 2905 0a78 7263546F .string "rcTokenizing"
+ 2905 6B656E69
+ 2905 7A696E67
+ 2905 00
+ 2906 .LASF15:
+ 2907 0a85 4442475F .string "DBG_REF"
+ 2907 52454600
+ 2908 .LASF164:
+ 2909 0a8d 72635772 .string "rcWriting"
+ 2909 6974696E
+ 2909 6700
+ 2910 .LASF140:
+ 2911 0a97 7263416C .string "rcAllocating"
+ 2911 6C6F6361
+ 2911 74696E67
+ 2911 00
+ 2912 .LASF304:
+ 2913 0aa4 4B4E756C .string "KNullBlockCipherVecSetEncryptKey"
+ 2913 6C426C6F
+ 2913 636B4369
+ 2913 70686572
+ 2913 56656353
+ 2914 .LASF126:
+
GAS LISTING /tmp/ccIvKeEl.s page 68
+
+
+ 2915 0ac5 72635479 .string "rcType"
+ 2915 706500
+ 2916 .LASF227:
+ 2917 0acc 72635265 .string "rcResources"
+ 2917 736F7572
+ 2917 63657300
+ 2918 .LASF108:
+ 2919 0ad8 72634E61 .string "rcNamelist"
+ 2919 6D656C69
+ 2919 737400
+ 2920 .LASF292:
+ 2921 0ae3 7263556E .string "rcUndefined"
+ 2921 64656669
+ 2921 6E656400
+ 2922 .LASF260:
+ 2923 0aef 7263496E .string "rcInconsistent"
+ 2923 636F6E73
+ 2923 69737465
+ 2923 6E7400
+ 2924 .LASF205:
+ 2925 0afe 72635265 .string "rcRetrieving"
+ 2925 74726965
+ 2925 76696E67
+ 2925 00
+ 2926 .LASF301:
+ 2927 0b0b 656E6372 .string "encrypt_key"
+ 2927 7970745F
+ 2927 6B657900
+ 2928 .LASF46:
+ 2929 0b17 64656372 .string "decrypt"
+ 2929 79707400
+ 2930 .LASF39:
+ 2931 0b1f 76657273 .string "version"
+ 2931 696F6E00
+ 2932 .LASF217:
+ 2933 0b27 72634E61 .string "rcName"
+ 2933 6D6500
+ 2934 .LASF254:
+ 2935 0b2e 72634E75 .string "rcNull"
+ 2935 6C6C00
+ 2936 .LASF176:
+ 2937 0b35 7263456E .string "rcEncoding"
+ 2937 636F6469
+ 2937 6E6700
+ 2938 .LASF95:
+ 2939 0b40 72634669 .string "rcFileFormat"
+ 2939 6C65466F
+ 2939 726D6174
+ 2939 00
+ 2940 .LASF132:
+ 2941 0b4d 7263456E .string "rcEncryptionKey"
+ 2941 63727970
+ 2941 74696F6E
+ 2941 4B657900
+ 2942 .LASF197:
+ 2943 0b5d 7263496E .string "rcInflating"
+ 2943 666C6174
+
GAS LISTING /tmp/ccIvKeEl.s page 69
+
+
+ 2943 696E6700
+ 2944 .LASF279:
+ 2945 0b69 72634E6F .string "rcNoPerm"
+ 2945 5065726D
+ 2945 00
+ 2946 .LASF167:
+ 2947 0b72 72635265 .string "rcResetting"
+ 2947 73657474
+ 2947 696E6700
+ 2948 .LASF41:
+ 2949 0b7e 626C6F63 .string "block_size"
+ 2949 6B5F7369
+ 2949 7A6500
+ 2950 .LASF115:
+ 2951 0b89 72635257 .string "rcRWLock"
+ 2951 4C6F636B
+ 2951 00
+ 2952 .LASF146:
+ 2953 0b92 72634C69 .string "rcListing"
+ 2953 7374696E
+ 2953 6700
+ 2954 .LASF96:
+ 2955 0b9c 72634675 .string "rcFunction"
+ 2955 6E637469
+ 2955 6F6E00
+ 2956 .LASF252:
+ 2957 0ba7 7263556E .string "rcUnrecognized"
+ 2957 7265636F
+ 2957 676E697A
+ 2957 656400
+ 2958 .LASF68:
+ 2959 0bb6 7263416C .string "rcAlign"
+ 2959 69676E00
+ 2960 .LASF131:
+ 2961 0bbe 72635072 .string "rcProduction"
+ 2961 6F647563
+ 2961 74696F6E
+ 2961 00
+ 2962 .LASF121:
+ 2963 0bcb 72635468 .string "rcThread"
+ 2963 72656164
+ 2963 00
+ 2964 .LASF169:
+ 2965 0bd4 72634672 .string "rcFreezing"
+ 2965 65657A69
+ 2965 6E6700
+ 2966 .LASF44:
+ 2967 0bdf 7365745F .string "set_decrypt_key"
+ 2967 64656372
+ 2967 7970745F
+ 2967 6B657900
+ 2968 .LASF51:
+ 2969 0bef 62797465 .string "byte"
+ 2969 00
+ 2970 .LASF37:
+ 2971 0bf4 4B426C6F .string "KBlockCipher_vt"
+ 2971 636B4369
+
GAS LISTING /tmp/ccIvKeEl.s page 70
+
+
+ 2971 70686572
+ 2971 5F767400
+ 2972 .LASF238:
+ 2973 0c04 72635365 .string "rcSeed"
+ 2973 656400
+ 2974 .LASF195:
+ 2975 0c0b 72634C6F .string "rcLoading"
+ 2975 6164696E
+ 2975 6700
+ 2976 .LASF1:
+ 2977 0c15 73686F72 .string "short int"
+ 2977 7420696E
+ 2977 7400
+ 2978 .LASF299:
+ 2979 0c1f 4B4E756C .string "KNullBlockCipherVecKeySize"
+ 2979 6C426C6F
+ 2979 636B4369
+ 2979 70686572
+ 2979 5665634B
+ 2980 .LASF288:
+ 2981 0c3a 72634C61 .string "rcLastState_v1_0"
+ 2981 73745374
+ 2981 6174655F
+ 2981 76315F30
+ 2981 00
+ 2982 .LASF297:
+ 2983 0c4b 72634C61 .string "rcLastState_v1_1"
+ 2983 73745374
+ 2983 6174655F
+ 2983 76315F31
+ 2983 00
+ 2984 .LASF62:
+ 2985 0c5c 72635644 .string "rcVDB"
+ 2985 4200
+ 2986 .LASF43:
+ 2987 0c62 7365745F .string "set_encrypt_key"
+ 2987 656E6372
+ 2987 7970745F
+ 2987 6B657900
+ 2988 .LASF60:
+ 2989 0c72 72635846 .string "rcXF"
+ 2989 00
+ 2990 .LASF143:
+ 2991 0c77 72634465 .string "rcDestroying"
+ 2991 7374726F
+ 2991 79696E67
+ 2991 00
+ 2992 .LASF248:
+ 2993 0c84 7263446F .string "rcDone"
+ 2993 6E6500
+ 2994 .LASF78:
+ 2995 0c8b 7263546F .string "rcToc"
+ 2995 6300
+ 2996 .LASF152:
+ 2997 0c91 7263416C .string "rcAliasing"
+ 2997 69617369
+ 2997 6E6700
+
GAS LISTING /tmp/ccIvKeEl.s page 71
+
+
+ 2998 .LASF113:
+ 2999 0c9c 72635072 .string "rcProcess"
+ 2999 6F636573
+ 2999 7300
+ 3000 .LASF211:
+ 3001 0ca6 72634E6F .string "rcNoObj"
+ 3001 4F626A00
+ 3002 .LASF250:
+ 3003 0cae 7263556E .string "rcUnsupported"
+ 3003 73757070
+ 3003 6F727465
+ 3003 6400
+ 3004 .LASF305:
+ 3005 0cbc 4B4E756C .string "KNullBlockCipherVecSetDecryptKey"
+ 3005 6C426C6F
+ 3005 636B4369
+ 3005 70686572
+ 3005 56656353
+ 3006 .LASF86:
+ 3007 0cdd 7263436F .string "rcColumn"
+ 3007 6C756D6E
+ 3007 00
+ 3008 .LASF251:
+ 3009 0ce6 7263556E .string "rcUnexpected"
+ 3009 65787065
+ 3009 63746564
+ 3009 00
+ 3010 .LASF6:
+ 3011 0cf3 75696E74 .string "uint32_t"
+ 3011 33325F74
+ 3011 00
+ 3012 .LASF72:
+ 3013 0cfc 72635646 .string "rcVFS"
+ 3013 5300
+ 3014 .LASF24:
+ 3015 0d02 4442475F .string "DBG_KRYPTO"
+ 3015 4B525950
+ 3015 544F00
+ 3016 .LASF321:
+ 3017 0d0d 4B4E756C .string "KNullBlockCipherVecMake"
+ 3017 6C426C6F
+ 3017 636B4369
+ 3017 70686572
+ 3017 5665634D
+ 3018 .LASF296:
+ 3019 0d25 72635772 .string "rcWrongType"
+ 3019 6F6E6754
+ 3019 79706500
+ 3020 .LASF231:
+ 3021 0d31 72634C69 .string "rcLibrary"
+ 3021 62726172
+ 3021 7900
+ 3022 .LASF264:
+ 3023 0d3b 72634361 .string "rcCanceled"
+ 3023 6E63656C
+ 3023 656400
+ 3024 .LASF135:
+
GAS LISTING /tmp/ccIvKeEl.s page 72
+
+
+ 3025 0d46 72634461 .string "rcData"
+ 3025 746100
+ 3026 .LASF99:
+ 3027 0d4d 72634865 .string "rcHeader"
+ 3027 61646572
+ 3027 00
+ 3028 .LASF4:
+ 3029 0d56 73686F72 .string "short unsigned int"
+ 3029 7420756E
+ 3029 7369676E
+ 3029 65642069
+ 3029 6E7400
+ 3030 .LASF89:
+ 3031 0d69 72634461 .string "rcDatabase"
+ 3031 74616261
+ 3031 736500
+ 3032 .LASF165:
+ 3033 0d74 7263436F .string "rcCommitting"
+ 3033 6D6D6974
+ 3033 74696E67
+ 3033 00
+ 3034 .LASF193:
+ 3035 0d81 7263436C .string "rcClassifying"
+ 3035 61737369
+ 3035 6679696E
+ 3035 6700
+ 3036 .LASF124:
+ 3037 0d8f 72635472 .string "rcTree"
+ 3037 656500
+ 3038 .LASF29:
+ 3039 0d96 4442475F .string "DBG_ARGS"
+ 3039 41524753
+ 3039 00
+ 3040 .LASF153:
+ 3041 0d9f 72635365 .string "rcSelecting"
+ 3041 6C656374
+ 3041 696E6700
+ 3042 .LASF54:
+ 3043 0dab 72635465 .string "rcText"
+ 3043 787400
+ 3044 .LASF290:
+ 3045 0db2 72634F75 .string "rcOutoforder"
+ 3045 746F666F
+ 3045 72646572
+ 3045 00
+ 3046 .LASF308:
+ 3047 0dbf 73746174 .string "state"
+ 3047 6500
+ 3048 .LASF257:
+ 3049 0dc5 7263496E .string "rcInvalid"
+ 3049 76616C69
+ 3049 6400
+ 3050 .LASF303:
+ 3051 0dcf 75736572 .string "user_key_size"
+ 3051 5F6B6579
+ 3051 5F73697A
+ 3051 6500
+
GAS LISTING /tmp/ccIvKeEl.s page 73
+
+
+ 3052 .LASF204:
+ 3053 0ddd 7263496E .string "rcInitializing"
+ 3053 69746961
+ 3053 6C697A69
+ 3053 6E6700
+ 3054 .LASF83:
+ 3055 0dec 7263426C .string "rcBlob"
+ 3055 6F6200
+ 3056 .LASF181:
+ 3057 0df3 72635265 .string "rcReindexing"
+ 3057 696E6465
+ 3057 78696E67
+ 3057 00
+ 3058 .LASF76:
+ 3059 0e00 72634E6F .string "rcNoTarg"
+ 3059 54617267
+ 3059 00
+ 3060 .LASF258:
+ 3061 0e09 7263436F .string "rcCorrupt"
+ 3061 72727570
+ 3061 7400
+ 3062 .LASF287:
+ 3063 0e13 72634F75 .string "rcOutofrange"
+ 3063 746F6672
+ 3063 616E6765
+ 3063 00
+ 3064 .LASF116:
+ 3065 0e20 72635363 .string "rcSchema"
+ 3065 68656D61
+ 3065 00
+ 3066 .LASF112:
+ 3067 0e29 72635061 .string "rcPath"
+ 3067 746800
+ 3068 .LASF163:
+ 3069 0e30 72635265 .string "rcReading"
+ 3069 6164696E
+ 3069 6700
+ 3070 .LASF42:
+ 3071 0e3a 6B65795F .string "key_size"
+ 3071 73697A65
+ 3071 00
+ 3072 .LASF295:
+ 3073 0e43 72634E6F .string "rcNotAvailable"
+ 3073 74417661
+ 3073 696C6162
+ 3073 6C6500
+ 3074 .LASF318:
+ 3075 0e52 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 3075 652F726F
+ 3075 6461726D
+ 3075 65722F73
+ 3075 72615F73
+ 3076 .LASF253:
+ 3077 0e89 7263416D .string "rcAmbiguous"
+ 3077 62696775
+ 3077 6F757300
+ 3078 .ident "GCC: (GNU) 4.4.2"
+
GAS LISTING /tmp/ccIvKeEl.s page 74
+
+
+ 3079 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccIvKeEl.s page 75
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 null-ncbi.c
+ /tmp/ccIvKeEl.s:13 .rodata:0000000000000000 KNullBlockCipherVecaes_ncbi_name
+ /tmp/ccIvKeEl.s:17 .text:0000000000000000 KNullBlockCipherVecDestroy
+ /tmp/ccIvKeEl.s:37 .text:000000000000000a KNullBlockCipherVecBlockSize
+ /tmp/ccIvKeEl.s:57 .text:0000000000000015 KNullBlockCipherVecKeySize
+ /tmp/ccIvKeEl.s:77 .text:0000000000000020 KNullBlockCipherVecSetEncryptKey
+ /tmp/ccIvKeEl.s:100 .text:0000000000000036 KNullBlockCipherVecSetDecryptKey
+ /tmp/ccIvKeEl.s:123 .text:000000000000004c KNullBlockCipherVecEncrypt
+ /tmp/ccIvKeEl.s:145 .text:0000000000000060 KNullBlockCipherVecDecrypt
+ /tmp/ccIvKeEl.s:167 .text:0000000000000074 KNullBlockCipherVecProcessorSupport
+ /tmp/ccIvKeEl.s:190 .data.rel.ro.local:0000000000000000 KNullBlockCipherVec_vt_
+ /tmp/ccIvKeEl.s:207 .text:000000000000007f KNullBlockCipherVecMake
+ /tmp/ccIvKeEl.s:269 .rodata:0000000000000050 __func__.6558
+ /tmp/ccIvKeEl.s:274 .rodata:0000000000000070 __PRETTY_FUNCTION__.6557
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/null-ncbi.vecreg.pic.o.list b/libs/krypto/null-ncbi.vecreg.pic.o.list
new file mode 100644
index 0000000..1803575
--- /dev/null
+++ b/libs/krypto/null-ncbi.vecreg.pic.o.list
@@ -0,0 +1,4406 @@
+GAS LISTING /tmp/ccIEtKUs.s page 1
+
+
+ 1 .file "null-ncbi.c"
+ 2 .section .debug_abbrev,"", at progbits
+ 3 .Ldebug_abbrev0:
+ 4 .section .debug_info,"", at progbits
+ 5 .Ldebug_info0:
+ 6 .section .debug_line,"", at progbits
+ 7 .Ldebug_line0:
+ 8 0000 66010000 .text
+ 8 02001901
+ 8 00000101
+ 8 FB0E0D00
+ 8 01010101
+ 9 .Ltext0:
+ 10 .section .rodata
+ 11 .type KNullBlockCipherVecRegaes_ncbi_name, @object
+ 12 .size KNullBlockCipherVecRegaes_ncbi_name, 10
+ 13 KNullBlockCipherVecRegaes_ncbi_name:
+ 14 0000 4145535F .string "AES_CLASS"
+ 14 434C4153
+ 14 5300
+ 15 .text
+ 16 .type KNullBlockCipherVecRegDestroy, @function
+ 17 KNullBlockCipherVecRegDestroy:
+ 18 .LFB595:
+ 19 .file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /*===========================================================================
+ 2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * PUBLIC DOMAIN NOTICE
+ 4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * National Center for Biotechnology Information
+ 5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * This software/database is a "United States Government Work" under the
+ 7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * terms of the United States Copyright Act. It was written as part of
+ 8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * the author's official duties as a United States Government employee and
+ 9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * thus cannot be copyrighted. This software/database is freely available
+ 10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * to the public for use. The National Library of Medicine and the U.S.
+ 11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Government have not placed any restriction on its use or reproduction.
+ 12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Although all reasonable efforts have been taken to ensure the accuracy
+ 14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * and reliability of the software and data, the NLM and the U.S.
+ 15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Government do not and cannot warrant the performance or results that
+ 16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * may be obtained by using this software or data. The NLM and the U.S.
+ 17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Government disclaim all warranties, express or implied, including
+ 18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * warranties of performance, merchantability or fitness for any particular
+ 19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * purpose.
+ 20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Please cite the author in any work or product based on this material.
+ 22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * ===========================================================================
+ 24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <krypto/extern.h>
+ 27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "ncbi-priv.h"
+ 29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "cipher-priv.h"
+ 30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "blockcipher-priv.h"
+ 31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <klib/rc.h>
+
GAS LISTING /tmp/ccIEtKUs.s page 2
+
+
+ 33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <byteswap.h>
+ 36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <string.h>
+ 37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <stdint.h>
+ 38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <stdlib.h>
+ 39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <assert.h>
+ 40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <sysalloc.h>
+ 41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "blockcipher-impl.h"
+ 43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <cpuid.h>
+ 46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VECREG
+ 48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <v128.h>
+ 49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #define BLOCKCIPHER_IMPL BLOCKCIPHER_VEC_IMPL
+ 54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #define BLOCKCIPHER_IMPL BLOCKCIPHER_BYTE_IMPL
+ 56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** typedef struct NULL_CLASS NULL_CLASS;
+ 59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static const char NULLBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+ 61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Destroy
+ 65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+ 66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * to create this key (key schedule)
+ 67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+ 69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+ 70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static
+ 72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** void NULLBCMEMBER(Destroy) (const BLOCKCIPHER_IMPL * self)
+ 73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 20 .loc 1 73 0
+ 21 .cfi_startproc
+ 22 0000 55 pushq %rbp
+ 23 .LCFI0:
+ 24 .cfi_def_cfa_offset 16
+ 25 0001 4889E5 movq %rsp, %rbp
+ 26 .cfi_offset 6, -16
+ 27 .LCFI1:
+ 28 .cfi_def_cfa_register 6
+ 29 0004 48897DF8 movq %rdi, -8(%rbp)
+ 74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* we use a constant object so do nothing */
+ 75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 30 .loc 1 75 0
+ 31 0008 C9 leave
+ 32 0009 C3 ret
+ 33 .cfi_endproc
+
GAS LISTING /tmp/ccIEtKUs.s page 3
+
+
+ 34 .LFE595:
+ 35 .size KNullBlockCipherVecRegDestroy, .-KNullBlockCipherVecRegDestroy
+ 36 .type KNullBlockCipherVecRegBlockSize, @function
+ 37 KNullBlockCipherVecRegBlockSize:
+ 38 .LFB596:
+ 76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * BlockSize
+ 80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static
+ 82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** uint32_t NULLBCMEMBER(BlockSize) ()
+ 83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 39 .loc 1 83 0
+ 40 .cfi_startproc
+ 41 000a 55 pushq %rbp
+ 42 .LCFI2:
+ 43 .cfi_def_cfa_offset 16
+ 44 000b 4889E5 movq %rsp, %rbp
+ 45 .cfi_offset 6, -16
+ 46 .LCFI3:
+ 47 .cfi_def_cfa_register 6
+ 84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return 16;
+ 48 .loc 1 84 0
+ 49 000e B8100000 movl $16, %eax
+ 49 00
+ 85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 50 .loc 1 85 0
+ 51 0013 C9 leave
+ 52 0014 C3 ret
+ 53 .cfi_endproc
+ 54 .LFE596:
+ 55 .size KNullBlockCipherVecRegBlockSize, .-KNullBlockCipherVecRegBlockSize
+ 56 .type KNullBlockCipherVecRegKeySize, @function
+ 57 KNullBlockCipherVecRegKeySize:
+ 58 .LFB597:
+ 86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * KeySize
+ 90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * How large is the stored key for this cipher? Not the user key used
+ 91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * to create this key (key schedule)
+ 92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * This is needed by KCipher to know how large the KCipher objecr is at
+ 94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * allocation and to know how much of a buffer each decryption/encryption is
+ 95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static uint32_t NULLBCMEMBER(KeySize) ()
+ 97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 59 .loc 1 97 0
+ 60 .cfi_startproc
+ 61 0015 55 pushq %rbp
+ 62 .LCFI4:
+ 63 .cfi_def_cfa_offset 16
+ 64 0016 4889E5 movq %rsp, %rbp
+ 65 .cfi_offset 6, -16
+ 66 .LCFI5:
+ 67 .cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccIEtKUs.s page 4
+
+
+ 98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return 0;
+ 68 .loc 1 98 0
+ 69 0019 B8000000 movl $0, %eax
+ 69 00
+ 99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 70 .loc 1 99 0
+ 71 001e C9 leave
+ 72 001f C3 ret
+ 73 .cfi_endproc
+ 74 .LFE597:
+ 75 .size KNullBlockCipherVecRegKeySize, .-KNullBlockCipherVecRegKeySize
+ 76 .type KNullBlockCipherVecRegSetEncryptKey, @function
+ 77 KNullBlockCipherVecRegSetEncryptKey:
+ 78 .LFB598:
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * SetEncryptKey
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * The KCipher calls this to have the block cipher build an encryption
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * key in the KCipher object
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static rc_t NULLBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** uint32_t user_key_size)
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 79 .loc 1 110 0
+ 80 .cfi_startproc
+ 81 0020 55 pushq %rbp
+ 82 .LCFI6:
+ 83 .cfi_def_cfa_offset 16
+ 84 0021 4889E5 movq %rsp, %rbp
+ 85 .cfi_offset 6, -16
+ 86 .LCFI7:
+ 87 .cfi_def_cfa_register 6
+ 88 0024 48897DF8 movq %rdi, -8(%rbp)
+ 89 0028 488975F0 movq %rsi, -16(%rbp)
+ 90 002c 8955EC movl %edx, -20(%rbp)
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return 0;
+ 91 .loc 1 111 0
+ 92 002f B8000000 movl $0, %eax
+ 92 00
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 93 .loc 1 112 0
+ 94 0034 C9 leave
+ 95 0035 C3 ret
+ 96 .cfi_endproc
+ 97 .LFE598:
+ 98 .size KNullBlockCipherVecRegSetEncryptKey, .-KNullBlockCipherVecRegSetEncryptKey
+ 99 .type KNullBlockCipherVecRegSetDecryptKey, @function
+ 100 KNullBlockCipherVecRegSetDecryptKey:
+ 101 .LFB599:
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * SetDecryptKey
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * The KCipher calls this to have the block cipher build an decryption
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * key in the KCipher object
+
GAS LISTING /tmp/ccIEtKUs.s page 5
+
+
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static rc_t NULLBCMEMBER(SetDecryptKey) (void * decrypt_key,
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const char * user_key,
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** uint32_t user_key_size)
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 102 .loc 1 124 0
+ 103 .cfi_startproc
+ 104 0036 55 pushq %rbp
+ 105 .LCFI8:
+ 106 .cfi_def_cfa_offset 16
+ 107 0037 4889E5 movq %rsp, %rbp
+ 108 .cfi_offset 6, -16
+ 109 .LCFI9:
+ 110 .cfi_def_cfa_register 6
+ 111 003a 48897DF8 movq %rdi, -8(%rbp)
+ 112 003e 488975F0 movq %rsi, -16(%rbp)
+ 113 0042 8955EC movl %edx, -20(%rbp)
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return 0;
+ 114 .loc 1 125 0
+ 115 0045 B8000000 movl $0, %eax
+ 115 00
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 116 .loc 1 126 0
+ 117 004a C9 leave
+ 118 004b C3 ret
+ 119 .cfi_endproc
+ 120 .LFE599:
+ 121 .size KNullBlockCipherVecRegSetDecryptKey, .-KNullBlockCipherVecRegSetDecryptKey
+ 122 .type KNullBlockCipherVecRegEncrypt, @function
+ 123 KNullBlockCipherVecRegEncrypt:
+ 124 .LFB600:
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Encrypt
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Perform an encryption of a single block. Chained modes and stream
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * cipher modes will call this multiple times.
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static CipherVec NULLBCMEMBER(Encrypt) (CipherVec state,
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const void * encrypt_key)
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 125 .loc 1 139 0
+ 126 .cfi_startproc
+ 127 004c 55 pushq %rbp
+ 128 .LCFI10:
+ 129 .cfi_def_cfa_offset 16
+ 130 004d 4889E5 movq %rsp, %rbp
+ 131 .cfi_offset 6, -16
+ 132 .LCFI11:
+ 133 .cfi_def_cfa_register 6
+ 134 0050 660F7F45 movdqa %xmm0, -16(%rbp)
+ 134 F0
+ 135 0055 48897DE8 movq %rdi, -24(%rbp)
+
GAS LISTING /tmp/ccIEtKUs.s page 6
+
+
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return state;
+ 136 .loc 1 140 0
+ 137 0059 660F6F45 movdqa -16(%rbp), %xmm0
+ 137 F0
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 138 .loc 1 141 0
+ 139 005e C9 leave
+ 140 005f C3 ret
+ 141 .cfi_endproc
+ 142 .LFE600:
+ 143 .size KNullBlockCipherVecRegEncrypt, .-KNullBlockCipherVecRegEncrypt
+ 144 .type KNullBlockCipherVecRegDecrypt, @function
+ 145 KNullBlockCipherVecRegDecrypt:
+ 146 .LFB601:
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static void NULLBCMEMBER(Encrypt) (const CipherBlock in,
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** CipherBlock * out,
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const void * encrypt_key)
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Decrypt
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Perform a decryption of a single block. Chained modes and stream
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * cipher modes will call this multiple times.
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static CipherVec NULLBCMEMBER(Decrypt) (CipherVec state,
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const void * decrypt_key)
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 147 .loc 1 160 0
+ 148 .cfi_startproc
+ 149 0060 55 pushq %rbp
+ 150 .LCFI12:
+ 151 .cfi_def_cfa_offset 16
+ 152 0061 4889E5 movq %rsp, %rbp
+ 153 .cfi_offset 6, -16
+ 154 .LCFI13:
+ 155 .cfi_def_cfa_register 6
+ 156 0064 660F7F45 movdqa %xmm0, -16(%rbp)
+ 156 F0
+ 157 0069 48897DE8 movq %rdi, -24(%rbp)
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return state;
+ 158 .loc 1 161 0
+ 159 006d 660F6F45 movdqa -16(%rbp), %xmm0
+ 159 F0
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 160 .loc 1 162 0
+ 161 0072 C9 leave
+ 162 0073 C3 ret
+ 163 .cfi_endproc
+ 164 .LFE601:
+ 165 .size KNullBlockCipherVecRegDecrypt, .-KNullBlockCipherVecRegDecrypt
+ 166 .type KNullBlockCipherVecRegProcessorSupport, @function
+
GAS LISTING /tmp/ccIEtKUs.s page 7
+
+
+ 167 KNullBlockCipherVecRegProcessorSupport:
+ 168 .LFB602:
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static void NULLBCMEMBER(Decrypt) (const CipherBlock in,
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** CipherBlock * out,
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** const void * encrypt_key)
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * MakeProcessorSupport
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Run-time check for support of this particular AES implementation by
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * checking the flags given via the cpuid instruction.
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static __inline__
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** bool NULLBCMEMBER(ProcessorSupport) ()
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 169 .loc 1 180 0
+ 170 .cfi_startproc
+ 171 0074 55 pushq %rbp
+ 172 .LCFI14:
+ 173 .cfi_def_cfa_offset 16
+ 174 0075 4889E5 movq %rsp, %rbp
+ 175 .cfi_offset 6, -16
+ 176 .LCFI15:
+ 177 .cfi_def_cfa_register 6
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return true;
+ 178 .loc 1 181 0
+ 179 0078 B8010000 movl $1, %eax
+ 179 00
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 180 .loc 1 182 0
+ 181 007d C9 leave
+ 182 007e C3 ret
+ 183 .cfi_endproc
+ 184 .LFE602:
+ 185 .size KNullBlockCipherVecRegProcessorSupport, .-KNullBlockCipherVecRegProcessorSupport
+ 186 .section .data.rel.ro.local,"aw", at progbits
+ 187 .align 32
+ 188 .type KNullBlockCipherVecReg_vt_, @object
+ 189 .size KNullBlockCipherVecReg_vt_, 64
+ 190 KNullBlockCipherVecReg_vt_:
+ 191 0000 01000000 .long 1
+ 192 0004 01000000 .long 1
+ 193 0008 00000000 .quad KNullBlockCipherVecRegDestroy
+ 193 00000000
+ 194 0010 00000000 .quad KNullBlockCipherVecRegBlockSize
+ 194 00000000
+ 195 0018 00000000 .quad KNullBlockCipherVecRegKeySize
+ 195 00000000
+ 196 0020 00000000 .quad KNullBlockCipherVecRegSetEncryptKey
+ 196 00000000
+ 197 0028 00000000 .quad KNullBlockCipherVecRegSetDecryptKey
+ 197 00000000
+
GAS LISTING /tmp/ccIEtKUs.s page 8
+
+
+ 198 0030 00000000 .quad KNullBlockCipherVecRegEncrypt
+ 198 00000000
+ 199 0038 00000000 .quad KNullBlockCipherVecRegDecrypt
+ 199 00000000
+ 200 .section .rodata
+ 201 000a 00000000 .align 8
+ 201 0000
+ 202 .LC0:
+ 203 0010 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 203 652F726F
+ 203 6461726D
+ 203 65722F73
+ 203 72615F73
+ 204 .text
+ 205 .globl KNullBlockCipherVecRegMake
+ 206 .type KNullBlockCipherVecRegMake, @function
+ 207 KNullBlockCipherVecRegMake:
+ 208 .LFB603:
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Init
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Initialize the fields of this object. The derived class will call this
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * during it's initialization.
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * self object to initialze
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * vt the virtual table of the derived class
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * mgr the cipher manager that is the construction factory block cipher
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * objects hold references to the manager while the manager merely
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * points at the block ciphers when all block ciphers are destroyed
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * the manager loses its references and it too can be destroyed if not
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * held elsewhere
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * name ASCIZ c-string the name of this class
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static const
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** KBlockCipherVec_vt_v1
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** KBlockCipherByte_vt_v1
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(_vt_) = {
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** { 1, 1 },
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(Destroy),
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(BlockSize),
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(KeySize),
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(SetEncryptKey),
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(SetDecryptKey),
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(Encrypt),
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(Decrypt)
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** };
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Make
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *
+
GAS LISTING /tmp/ccIEtKUs.s page 9
+
+
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * Create a new Null Block Cipher object.
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * The processor is checked to see if this particular version is supported on
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** * this particular CPU.
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** */
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc_t NULLBCMEMBER(Make) (KBlockCipher ** new_obj)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 209 .loc 1 227 0
+ 210 .cfi_startproc
+ 211 007f 55 pushq %rbp
+ 212 .LCFI16:
+ 213 .cfi_def_cfa_offset 16
+ 214 0080 4889E5 movq %rsp, %rbp
+ 215 .cfi_offset 6, -16
+ 216 .LCFI17:
+ 217 .cfi_def_cfa_register 6
+ 218 0083 4883EC20 subq $32, %rsp
+ 219 0087 48897DE8 movq %rdi, -24(%rbp)
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc_t rc;
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* Check parameter first */
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** if (new_obj == NULL)
+ 220 .loc 1 231 0
+ 221 008b 48837DE8 cmpq $0, -24(%rbp)
+ 221 00
+ 222 0090 7522 jne .L18
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 223 .loc 1 232 0
+ 224 0092 B9E80000 movl $232, %ecx
+ 224 00
+ 225 0097 488D1500 leaq __func__.7214(%rip), %rdx
+ 225 000000
+ 226 009e 488D3500 leaq .LC0(%rip), %rsi
+ 226 000000
+ 227 00a5 BF878F00 movl $-2030006393, %edi
+ 227 87
+ 228 00aa E8000000 call SetRCFileFuncLine at PLT
+ 228 00
+ 229 00af 8945FC movl %eax, -4(%rbp)
+ 230 00b2 EB53 jmp .L19
+ 231 .L18:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** else
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *new_obj = NULL;
+ 232 .loc 1 236 0
+ 233 00b4 488B45E8 movq -24(%rbp), %rax
+ 234 00b8 48C70000 movq $0, (%rax)
+ 234 000000
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* check for processor support of this flavor */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** if ( ! NULLBCMEMBER(ProcessorSupport)())
+ 235 .loc 1 239 0
+ 236 00bf B8000000 movl $0, %eax
+ 236 00
+ 237 00c4 E8ABFFFF call KNullBlockCipherVecRegProcessorSupport
+ 237 FF
+ 238 00c9 83F001 xorl $1, %eax
+
GAS LISTING /tmp/ccIEtKUs.s page 10
+
+
+ 239 00cc 84C0 testb %al, %al
+ 240 00ce 7422 je .L20
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 241 .loc 1 240 0
+ 242 00d0 B9F00000 movl $240, %ecx
+ 242 00
+ 243 00d5 488D1500 leaq __func__.7214(%rip), %rdx
+ 243 000000
+ 244 00dc 488D3500 leaq .LC0(%rip), %rsi
+ 244 000000
+ 245 00e3 BF038500 movl $-2030009085, %edi
+ 245 87
+ 246 00e8 E8000000 call SetRCFileFuncLine at PLT
+ 246 00
+ 247 00ed 8945FC movl %eax, -4(%rbp)
+ 248 00f0 EB15 jmp .L19
+ 249 .L20:
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** else
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc = 0;
+ 250 .loc 1 244 0
+ 251 00f2 C745FC00 movl $0, -4(%rbp)
+ 251 000000
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** *new_obj = (KBlockCipher*)&(NULLBCMEMBER(_vt_));
+ 252 .loc 1 245 0
+ 253 00f9 488D1500 leaq KNullBlockCipherVecReg_vt_(%rip), %rdx
+ 253 000000
+ 254 0100 488B45E8 movq -24(%rbp), %rax
+ 255 0104 488910 movq %rdx, (%rax)
+ 256 .L19:
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** return rc;
+ 257 .loc 1 248 0
+ 258 0107 8B45FC movl -4(%rbp), %eax
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 259 .loc 1 249 0
+ 260 010a C9 leave
+ 261 010b C3 ret
+ 262 .cfi_endproc
+ 263 .LFE603:
+ 264 .size KNullBlockCipherVecRegMake, .-KNullBlockCipherVecRegMake
+ 265 .section .rodata
+ 266 0047 00000000 .align 16
+ 266 00000000
+ 266 00
+ 267 .type __func__.7214, @object
+ 268 .size __func__.7214, 27
+ 269 __func__.7214:
+ 270 0050 4B4E756C .string "KNullBlockCipherVecRegMake"
+ 270 6C426C6F
+ 270 636B4369
+ 270 70686572
+ 270 56656352
+ 271 006b 00000000 .align 16
+ 271 00
+
GAS LISTING /tmp/ccIEtKUs.s page 11
+
+
+ 272 .type __PRETTY_FUNCTION__.7213, @object
+ 273 .size __PRETTY_FUNCTION__.7213, 27
+ 274 __PRETTY_FUNCTION__.7213:
+ 275 0070 4B4E756C .string "KNullBlockCipherVecRegMake"
+ 275 6C426C6F
+ 275 636B4369
+ 275 70686572
+ 275 56656352
+ 276 .text
+ 277 .Letext0:
+ 278 .section .debug_loc,"", at progbits
+ 279 .Ldebug_loc0:
+ 280 .LLST0:
+ 281 0000 00000000 .quad .LFB595-.Ltext0
+ 281 00000000
+ 282 0008 01000000 .quad .LCFI0-.Ltext0
+ 282 00000000
+ 283 0010 0200 .value 0x2
+ 284 0012 77 .byte 0x77
+ 285 0013 08 .sleb128 8
+ 286 0014 01000000 .quad .LCFI0-.Ltext0
+ 286 00000000
+ 287 001c 04000000 .quad .LCFI1-.Ltext0
+ 287 00000000
+ 288 0024 0200 .value 0x2
+ 289 0026 77 .byte 0x77
+ 290 0027 10 .sleb128 16
+ 291 0028 04000000 .quad .LCFI1-.Ltext0
+ 291 00000000
+ 292 0030 0A000000 .quad .LFE595-.Ltext0
+ 292 00000000
+ 293 0038 0200 .value 0x2
+ 294 003a 76 .byte 0x76
+ 295 003b 10 .sleb128 16
+ 296 003c 00000000 .quad 0x0
+ 296 00000000
+ 297 0044 00000000 .quad 0x0
+ 297 00000000
+ 298 .LLST1:
+ 299 004c 0A000000 .quad .LFB596-.Ltext0
+ 299 00000000
+ 300 0054 0B000000 .quad .LCFI2-.Ltext0
+ 300 00000000
+ 301 005c 0200 .value 0x2
+ 302 005e 77 .byte 0x77
+ 303 005f 08 .sleb128 8
+ 304 0060 0B000000 .quad .LCFI2-.Ltext0
+ 304 00000000
+ 305 0068 0E000000 .quad .LCFI3-.Ltext0
+ 305 00000000
+ 306 0070 0200 .value 0x2
+ 307 0072 77 .byte 0x77
+ 308 0073 10 .sleb128 16
+ 309 0074 0E000000 .quad .LCFI3-.Ltext0
+ 309 00000000
+ 310 007c 15000000 .quad .LFE596-.Ltext0
+ 310 00000000
+
GAS LISTING /tmp/ccIEtKUs.s page 12
+
+
+ 311 0084 0200 .value 0x2
+ 312 0086 76 .byte 0x76
+ 313 0087 10 .sleb128 16
+ 314 0088 00000000 .quad 0x0
+ 314 00000000
+ 315 0090 00000000 .quad 0x0
+ 315 00000000
+ 316 .LLST2:
+ 317 0098 15000000 .quad .LFB597-.Ltext0
+ 317 00000000
+ 318 00a0 16000000 .quad .LCFI4-.Ltext0
+ 318 00000000
+ 319 00a8 0200 .value 0x2
+ 320 00aa 77 .byte 0x77
+ 321 00ab 08 .sleb128 8
+ 322 00ac 16000000 .quad .LCFI4-.Ltext0
+ 322 00000000
+ 323 00b4 19000000 .quad .LCFI5-.Ltext0
+ 323 00000000
+ 324 00bc 0200 .value 0x2
+ 325 00be 77 .byte 0x77
+ 326 00bf 10 .sleb128 16
+ 327 00c0 19000000 .quad .LCFI5-.Ltext0
+ 327 00000000
+ 328 00c8 20000000 .quad .LFE597-.Ltext0
+ 328 00000000
+ 329 00d0 0200 .value 0x2
+ 330 00d2 76 .byte 0x76
+ 331 00d3 10 .sleb128 16
+ 332 00d4 00000000 .quad 0x0
+ 332 00000000
+ 333 00dc 00000000 .quad 0x0
+ 333 00000000
+ 334 .LLST3:
+ 335 00e4 20000000 .quad .LFB598-.Ltext0
+ 335 00000000
+ 336 00ec 21000000 .quad .LCFI6-.Ltext0
+ 336 00000000
+ 337 00f4 0200 .value 0x2
+ 338 00f6 77 .byte 0x77
+ 339 00f7 08 .sleb128 8
+ 340 00f8 21000000 .quad .LCFI6-.Ltext0
+ 340 00000000
+ 341 0100 24000000 .quad .LCFI7-.Ltext0
+ 341 00000000
+ 342 0108 0200 .value 0x2
+ 343 010a 77 .byte 0x77
+ 344 010b 10 .sleb128 16
+ 345 010c 24000000 .quad .LCFI7-.Ltext0
+ 345 00000000
+ 346 0114 36000000 .quad .LFE598-.Ltext0
+ 346 00000000
+ 347 011c 0200 .value 0x2
+ 348 011e 76 .byte 0x76
+ 349 011f 10 .sleb128 16
+ 350 0120 00000000 .quad 0x0
+ 350 00000000
+
GAS LISTING /tmp/ccIEtKUs.s page 13
+
+
+ 351 0128 00000000 .quad 0x0
+ 351 00000000
+ 352 .LLST4:
+ 353 0130 36000000 .quad .LFB599-.Ltext0
+ 353 00000000
+ 354 0138 37000000 .quad .LCFI8-.Ltext0
+ 354 00000000
+ 355 0140 0200 .value 0x2
+ 356 0142 77 .byte 0x77
+ 357 0143 08 .sleb128 8
+ 358 0144 37000000 .quad .LCFI8-.Ltext0
+ 358 00000000
+ 359 014c 3A000000 .quad .LCFI9-.Ltext0
+ 359 00000000
+ 360 0154 0200 .value 0x2
+ 361 0156 77 .byte 0x77
+ 362 0157 10 .sleb128 16
+ 363 0158 3A000000 .quad .LCFI9-.Ltext0
+ 363 00000000
+ 364 0160 4C000000 .quad .LFE599-.Ltext0
+ 364 00000000
+ 365 0168 0200 .value 0x2
+ 366 016a 76 .byte 0x76
+ 367 016b 10 .sleb128 16
+ 368 016c 00000000 .quad 0x0
+ 368 00000000
+ 369 0174 00000000 .quad 0x0
+ 369 00000000
+ 370 .LLST5:
+ 371 017c 4C000000 .quad .LFB600-.Ltext0
+ 371 00000000
+ 372 0184 4D000000 .quad .LCFI10-.Ltext0
+ 372 00000000
+ 373 018c 0200 .value 0x2
+ 374 018e 77 .byte 0x77
+ 375 018f 08 .sleb128 8
+ 376 0190 4D000000 .quad .LCFI10-.Ltext0
+ 376 00000000
+ 377 0198 50000000 .quad .LCFI11-.Ltext0
+ 377 00000000
+ 378 01a0 0200 .value 0x2
+ 379 01a2 77 .byte 0x77
+ 380 01a3 10 .sleb128 16
+ 381 01a4 50000000 .quad .LCFI11-.Ltext0
+ 381 00000000
+ 382 01ac 60000000 .quad .LFE600-.Ltext0
+ 382 00000000
+ 383 01b4 0200 .value 0x2
+ 384 01b6 76 .byte 0x76
+ 385 01b7 10 .sleb128 16
+ 386 01b8 00000000 .quad 0x0
+ 386 00000000
+ 387 01c0 00000000 .quad 0x0
+ 387 00000000
+ 388 .LLST6:
+ 389 01c8 60000000 .quad .LFB601-.Ltext0
+ 389 00000000
+
GAS LISTING /tmp/ccIEtKUs.s page 14
+
+
+ 390 01d0 61000000 .quad .LCFI12-.Ltext0
+ 390 00000000
+ 391 01d8 0200 .value 0x2
+ 392 01da 77 .byte 0x77
+ 393 01db 08 .sleb128 8
+ 394 01dc 61000000 .quad .LCFI12-.Ltext0
+ 394 00000000
+ 395 01e4 64000000 .quad .LCFI13-.Ltext0
+ 395 00000000
+ 396 01ec 0200 .value 0x2
+ 397 01ee 77 .byte 0x77
+ 398 01ef 10 .sleb128 16
+ 399 01f0 64000000 .quad .LCFI13-.Ltext0
+ 399 00000000
+ 400 01f8 74000000 .quad .LFE601-.Ltext0
+ 400 00000000
+ 401 0200 0200 .value 0x2
+ 402 0202 76 .byte 0x76
+ 403 0203 10 .sleb128 16
+ 404 0204 00000000 .quad 0x0
+ 404 00000000
+ 405 020c 00000000 .quad 0x0
+ 405 00000000
+ 406 .LLST7:
+ 407 0214 74000000 .quad .LFB602-.Ltext0
+ 407 00000000
+ 408 021c 75000000 .quad .LCFI14-.Ltext0
+ 408 00000000
+ 409 0224 0200 .value 0x2
+ 410 0226 77 .byte 0x77
+ 411 0227 08 .sleb128 8
+ 412 0228 75000000 .quad .LCFI14-.Ltext0
+ 412 00000000
+ 413 0230 78000000 .quad .LCFI15-.Ltext0
+ 413 00000000
+ 414 0238 0200 .value 0x2
+ 415 023a 77 .byte 0x77
+ 416 023b 10 .sleb128 16
+ 417 023c 78000000 .quad .LCFI15-.Ltext0
+ 417 00000000
+ 418 0244 7F000000 .quad .LFE602-.Ltext0
+ 418 00000000
+ 419 024c 0200 .value 0x2
+ 420 024e 76 .byte 0x76
+ 421 024f 10 .sleb128 16
+ 422 0250 00000000 .quad 0x0
+ 422 00000000
+ 423 0258 00000000 .quad 0x0
+ 423 00000000
+ 424 .LLST8:
+ 425 0260 7F000000 .quad .LFB603-.Ltext0
+ 425 00000000
+ 426 0268 80000000 .quad .LCFI16-.Ltext0
+ 426 00000000
+ 427 0270 0200 .value 0x2
+ 428 0272 77 .byte 0x77
+ 429 0273 08 .sleb128 8
+
GAS LISTING /tmp/ccIEtKUs.s page 15
+
+
+ 430 0274 80000000 .quad .LCFI16-.Ltext0
+ 430 00000000
+ 431 027c 83000000 .quad .LCFI17-.Ltext0
+ 431 00000000
+ 432 0284 0200 .value 0x2
+ 433 0286 77 .byte 0x77
+ 434 0287 10 .sleb128 16
+ 435 0288 83000000 .quad .LCFI17-.Ltext0
+ 435 00000000
+ 436 0290 0C010000 .quad .LFE603-.Ltext0
+ 436 00000000
+ 437 0298 0200 .value 0x2
+ 438 029a 76 .byte 0x76
+ 439 029b 10 .sleb128 16
+ 440 029c 00000000 .quad 0x0
+ 440 00000000
+ 441 02a4 00000000 .quad 0x0
+ 441 00000000
+ 442 .file 2 "/usr/include/stdint.h"
+ 443 .file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 444 .file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 445 .file 5 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 446 .file 6 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 447 .file 7 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 448 .file 8 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 449 .section .debug_info
+ 450 0000 6C0C0000 .long 0xc6c
+ 451 0004 0200 .value 0x2
+ 452 0006 00000000 .long .Ldebug_abbrev0
+ 453 000a 08 .byte 0x8
+ 454 000b 01 .uleb128 0x1
+ 455 000c 00000000 .long .LASF317
+ 456 0010 01 .byte 0x1
+ 457 0011 00000000 .long .LASF318
+ 458 0015 00000000 .long .LASF319
+ 459 0019 00000000 .quad .Ltext0
+ 459 00000000
+ 460 0021 00000000 .quad .Letext0
+ 460 00000000
+ 461 0029 00000000 .long .Ldebug_line0
+ 462 002d 02 .uleb128 0x2
+ 463 002e 01 .byte 0x1
+ 464 002f 06 .byte 0x6
+ 465 0030 00000000 .long .LASF0
+ 466 0034 02 .uleb128 0x2
+ 467 0035 02 .byte 0x2
+ 468 0036 05 .byte 0x5
+ 469 0037 00000000 .long .LASF1
+ 470 003b 03 .uleb128 0x3
+ 471 003c 04 .byte 0x4
+ 472 003d 05 .byte 0x5
+ 473 003e 696E7400 .string "int"
+ 474 0042 02 .uleb128 0x2
+ 475 0043 08 .byte 0x8
+ 476 0044 05 .byte 0x5
+ 477 0045 00000000 .long .LASF2
+ 478 0049 04 .uleb128 0x4
+
GAS LISTING /tmp/ccIEtKUs.s page 16
+
+
+ 479 004a 00000000 .long .LASF5
+ 480 004e 02 .byte 0x2
+ 481 004f 31 .byte 0x31
+ 482 0050 54000000 .long 0x54
+ 483 0054 02 .uleb128 0x2
+ 484 0055 01 .byte 0x1
+ 485 0056 08 .byte 0x8
+ 486 0057 00000000 .long .LASF3
+ 487 005b 02 .uleb128 0x2
+ 488 005c 02 .byte 0x2
+ 489 005d 07 .byte 0x7
+ 490 005e 00000000 .long .LASF4
+ 491 0062 04 .uleb128 0x4
+ 492 0063 00000000 .long .LASF6
+ 493 0067 02 .byte 0x2
+ 494 0068 34 .byte 0x34
+ 495 0069 6D000000 .long 0x6d
+ 496 006d 02 .uleb128 0x2
+ 497 006e 04 .byte 0x4
+ 498 006f 07 .byte 0x7
+ 499 0070 00000000 .long .LASF7
+ 500 0074 02 .uleb128 0x2
+ 501 0075 08 .byte 0x8
+ 502 0076 07 .byte 0x7
+ 503 0077 00000000 .long .LASF8
+ 504 007b 04 .uleb128 0x4
+ 505 007c 00000000 .long .LASF9
+ 506 0080 03 .byte 0x3
+ 507 0081 30 .byte 0x30
+ 508 0082 62000000 .long 0x62
+ 509 0086 05 .uleb128 0x5
+ 510 0087 08 .byte 0x8
+ 511 0088 06 .uleb128 0x6
+ 512 0089 08 .byte 0x8
+ 513 008a 07 .byte 0x7
+ 514 008b 07 .uleb128 0x7
+ 515 008c 08 .byte 0x8
+ 516 008d 91000000 .long 0x91
+ 517 0091 08 .uleb128 0x8
+ 518 0092 96000000 .long 0x96
+ 519 0096 02 .uleb128 0x2
+ 520 0097 01 .byte 0x1
+ 521 0098 06 .byte 0x6
+ 522 0099 00000000 .long .LASF10
+ 523 009d 09 .uleb128 0x9
+ 524 009e 04 .byte 0x4
+ 525 009f 08 .byte 0x8
+ 526 00a0 D6 .byte 0xd6
+ 527 00a1 1E010000 .long 0x11e
+ 528 00a5 0A .uleb128 0xa
+ 529 00a6 00000000 .long .LASF11
+ 530 00aa 7F .sleb128 -1
+ 531 00ab 0A .uleb128 0xa
+ 532 00ac 00000000 .long .LASF12
+ 533 00b0 00 .sleb128 0
+ 534 00b1 0A .uleb128 0xa
+ 535 00b2 00000000 .long .LASF13
+
GAS LISTING /tmp/ccIEtKUs.s page 17
+
+
+ 536 00b6 01 .sleb128 1
+ 537 00b7 0A .uleb128 0xa
+ 538 00b8 00000000 .long .LASF14
+ 539 00bc 02 .sleb128 2
+ 540 00bd 0A .uleb128 0xa
+ 541 00be 00000000 .long .LASF15
+ 542 00c2 03 .sleb128 3
+ 543 00c3 0A .uleb128 0xa
+ 544 00c4 00000000 .long .LASF16
+ 545 00c8 04 .sleb128 4
+ 546 00c9 0A .uleb128 0xa
+ 547 00ca 00000000 .long .LASF17
+ 548 00ce 05 .sleb128 5
+ 549 00cf 0A .uleb128 0xa
+ 550 00d0 00000000 .long .LASF18
+ 551 00d4 06 .sleb128 6
+ 552 00d5 0A .uleb128 0xa
+ 553 00d6 00000000 .long .LASF19
+ 554 00da 07 .sleb128 7
+ 555 00db 0A .uleb128 0xa
+ 556 00dc 00000000 .long .LASF20
+ 557 00e0 08 .sleb128 8
+ 558 00e1 0A .uleb128 0xa
+ 559 00e2 00000000 .long .LASF21
+ 560 00e6 09 .sleb128 9
+ 561 00e7 0A .uleb128 0xa
+ 562 00e8 00000000 .long .LASF22
+ 563 00ec 0A .sleb128 10
+ 564 00ed 0A .uleb128 0xa
+ 565 00ee 00000000 .long .LASF23
+ 566 00f2 0B .sleb128 11
+ 567 00f3 0A .uleb128 0xa
+ 568 00f4 00000000 .long .LASF24
+ 569 00f8 0C .sleb128 12
+ 570 00f9 0A .uleb128 0xa
+ 571 00fa 00000000 .long .LASF25
+ 572 00fe 0D .sleb128 13
+ 573 00ff 0A .uleb128 0xa
+ 574 0100 00000000 .long .LASF26
+ 575 0104 0E .sleb128 14
+ 576 0105 0A .uleb128 0xa
+ 577 0106 00000000 .long .LASF27
+ 578 010a 0F .sleb128 15
+ 579 010b 0A .uleb128 0xa
+ 580 010c 00000000 .long .LASF28
+ 581 0110 10 .sleb128 16
+ 582 0111 0A .uleb128 0xa
+ 583 0112 00000000 .long .LASF29
+ 584 0116 11 .sleb128 17
+ 585 0117 0A .uleb128 0xa
+ 586 0118 00000000 .long .LASF30
+ 587 011c 12 .sleb128 18
+ 588 011d 00 .byte 0x0
+ 589 011e 07 .uleb128 0x7
+ 590 011f 08 .byte 0x8
+ 591 0120 24010000 .long 0x124
+ 592 0124 0B .uleb128 0xb
+
GAS LISTING /tmp/ccIEtKUs.s page 18
+
+
+ 593 0125 02 .uleb128 0x2
+ 594 0126 08 .byte 0x8
+ 595 0127 05 .byte 0x5
+ 596 0128 00000000 .long .LASF31
+ 597 012c 02 .uleb128 0x2
+ 598 012d 04 .byte 0x4
+ 599 012e 04 .byte 0x4
+ 600 012f 00000000 .long .LASF32
+ 601 0133 07 .uleb128 0x7
+ 602 0134 08 .byte 0x8
+ 603 0135 96000000 .long 0x96
+ 604 0139 02 .uleb128 0x2
+ 605 013a 08 .byte 0x8
+ 606 013b 07 .byte 0x7
+ 607 013c 00000000 .long .LASF33
+ 608 0140 02 .uleb128 0x2
+ 609 0141 08 .byte 0x8
+ 610 0142 04 .byte 0x4
+ 611 0143 00000000 .long .LASF34
+ 612 0147 04 .uleb128 0x4
+ 613 0148 00000000 .long .LASF35
+ 614 014c 04 .byte 0x4
+ 615 014d 26 .byte 0x26
+ 616 014e 52010000 .long 0x152
+ 617 0152 0C .uleb128 0xc
+ 618 0153 01 .byte 0x1
+ 619 0154 49000000 .long 0x49
+ 620 0158 63010000 .long 0x163
+ 621 015c 0D .uleb128 0xd
+ 622 015d 88000000 .long 0x88
+ 623 0161 0F .byte 0xf
+ 624 0162 00 .byte 0x0
+ 625 0163 04 .uleb128 0x4
+ 626 0164 00000000 .long .LASF36
+ 627 0168 05 .byte 0x5
+ 628 0169 3B .byte 0x3b
+ 629 016a 47010000 .long 0x147
+ 630 016e 04 .uleb128 0x4
+ 631 016f 00000000 .long .LASF37
+ 632 0173 05 .byte 0x5
+ 633 0174 43 .byte 0x43
+ 634 0175 79010000 .long 0x179
+ 635 0179 0E .uleb128 0xe
+ 636 017a 00000000 .long .LASF37
+ 637 017e 08 .byte 0x8
+ 638 017f 05 .byte 0x5
+ 639 0180 43 .byte 0x43
+ 640 0181 A2010000 .long 0x1a2
+ 641 0185 0F .uleb128 0xf
+ 642 0186 6D616A00 .string "maj"
+ 643 018a 05 .byte 0x5
+ 644 018b 46 .byte 0x46
+ 645 018c 62000000 .long 0x62
+ 646 0190 02 .byte 0x2
+ 647 0191 23 .byte 0x23
+ 648 0192 00 .uleb128 0x0
+ 649 0193 0F .uleb128 0xf
+
GAS LISTING /tmp/ccIEtKUs.s page 19
+
+
+ 650 0194 6D696E00 .string "min"
+ 651 0198 05 .byte 0x5
+ 652 0199 47 .byte 0x47
+ 653 019a 62000000 .long 0x62
+ 654 019e 02 .byte 0x2
+ 655 019f 23 .byte 0x23
+ 656 01a0 04 .uleb128 0x4
+ 657 01a1 00 .byte 0x0
+ 658 01a2 04 .uleb128 0x4
+ 659 01a3 00000000 .long .LASF38
+ 660 01a7 05 .byte 0x5
+ 661 01a8 52 .byte 0x52
+ 662 01a9 AD010000 .long 0x1ad
+ 663 01ad 0E .uleb128 0xe
+ 664 01ae 00000000 .long .LASF38
+ 665 01b2 40 .byte 0x40
+ 666 01b3 05 .byte 0x5
+ 667 01b4 52 .byte 0x52
+ 668 01b5 2A020000 .long 0x22a
+ 669 01b9 10 .uleb128 0x10
+ 670 01ba 00000000 .long .LASF39
+ 671 01be 05 .byte 0x5
+ 672 01bf 5E .byte 0x5e
+ 673 01c0 6E010000 .long 0x16e
+ 674 01c4 02 .byte 0x2
+ 675 01c5 23 .byte 0x23
+ 676 01c6 00 .uleb128 0x0
+ 677 01c7 10 .uleb128 0x10
+ 678 01c8 00000000 .long .LASF40
+ 679 01cc 05 .byte 0x5
+ 680 01cd 63 .byte 0x63
+ 681 01ce 6E020000 .long 0x26e
+ 682 01d2 02 .byte 0x2
+ 683 01d3 23 .byte 0x23
+ 684 01d4 08 .uleb128 0x8
+ 685 01d5 10 .uleb128 0x10
+ 686 01d6 00000000 .long .LASF41
+ 687 01da 05 .byte 0x5
+ 688 01db 65 .byte 0x65
+ 689 01dc 7F020000 .long 0x27f
+ 690 01e0 02 .byte 0x2
+ 691 01e1 23 .byte 0x23
+ 692 01e2 10 .uleb128 0x10
+ 693 01e3 10 .uleb128 0x10
+ 694 01e4 00000000 .long .LASF42
+ 695 01e8 05 .byte 0x5
+ 696 01e9 67 .byte 0x67
+ 697 01ea 7F020000 .long 0x27f
+ 698 01ee 02 .byte 0x2
+ 699 01ef 23 .byte 0x23
+ 700 01f0 18 .uleb128 0x18
+ 701 01f1 10 .uleb128 0x10
+ 702 01f2 00000000 .long .LASF43
+ 703 01f6 05 .byte 0x5
+ 704 01f7 69 .byte 0x69
+ 705 01f8 9F020000 .long 0x29f
+ 706 01fc 02 .byte 0x2
+
GAS LISTING /tmp/ccIEtKUs.s page 20
+
+
+ 707 01fd 23 .byte 0x23
+ 708 01fe 20 .uleb128 0x20
+ 709 01ff 10 .uleb128 0x10
+ 710 0200 00000000 .long .LASF44
+ 711 0204 05 .byte 0x5
+ 712 0205 6D .byte 0x6d
+ 713 0206 9F020000 .long 0x29f
+ 714 020a 02 .byte 0x2
+ 715 020b 23 .byte 0x23
+ 716 020c 28 .uleb128 0x28
+ 717 020d 10 .uleb128 0x10
+ 718 020e 00000000 .long .LASF45
+ 719 0212 05 .byte 0x5
+ 720 0213 71 .byte 0x71
+ 721 0214 BB020000 .long 0x2bb
+ 722 0218 02 .byte 0x2
+ 723 0219 23 .byte 0x23
+ 724 021a 30 .uleb128 0x30
+ 725 021b 10 .uleb128 0x10
+ 726 021c 00000000 .long .LASF46
+ 727 0220 05 .byte 0x5
+ 728 0221 75 .byte 0x75
+ 729 0222 BB020000 .long 0x2bb
+ 730 0226 02 .byte 0x2
+ 731 0227 23 .byte 0x23
+ 732 0228 38 .uleb128 0x38
+ 733 0229 00 .byte 0x0
+ 734 022a 04 .uleb128 0x4
+ 735 022b 00000000 .long .LASF47
+ 736 022f 05 .byte 0x5
+ 737 0230 53 .byte 0x53
+ 738 0231 35020000 .long 0x235
+ 739 0235 11 .uleb128 0x11
+ 740 0236 00000000 .long .LASF47
+ 741 023a 40 .byte 0x40
+ 742 023b 05 .byte 0x5
+ 743 023c 53 .byte 0x53
+ 744 023d 57020000 .long 0x257
+ 745 0241 12 .uleb128 0x12
+ 746 0242 00000000 .long .LASF39
+ 747 0246 05 .byte 0x5
+ 748 0247 7F .byte 0x7f
+ 749 0248 6E010000 .long 0x16e
+ 750 024c 13 .uleb128 0x13
+ 751 024d 763100 .string "v1"
+ 752 0250 05 .byte 0x5
+ 753 0251 80 .byte 0x80
+ 754 0252 A2010000 .long 0x1a2
+ 755 0256 00 .byte 0x0
+ 756 0257 14 .uleb128 0x14
+ 757 0258 01 .byte 0x1
+ 758 0259 63020000 .long 0x263
+ 759 025d 15 .uleb128 0x15
+ 760 025e 63020000 .long 0x263
+ 761 0262 00 .byte 0x0
+ 762 0263 07 .uleb128 0x7
+ 763 0264 08 .byte 0x8
+
GAS LISTING /tmp/ccIEtKUs.s page 21
+
+
+ 764 0265 69020000 .long 0x269
+ 765 0269 08 .uleb128 0x8
+ 766 026a 2A020000 .long 0x22a
+ 767 026e 07 .uleb128 0x7
+ 768 026f 08 .byte 0x8
+ 769 0270 57020000 .long 0x257
+ 770 0274 16 .uleb128 0x16
+ 771 0275 62000000 .long 0x62
+ 772 0279 7F020000 .long 0x27f
+ 773 027d 17 .uleb128 0x17
+ 774 027e 00 .byte 0x0
+ 775 027f 07 .uleb128 0x7
+ 776 0280 08 .byte 0x8
+ 777 0281 74020000 .long 0x274
+ 778 0285 18 .uleb128 0x18
+ 779 0286 01 .byte 0x1
+ 780 0287 7B000000 .long 0x7b
+ 781 028b 9F020000 .long 0x29f
+ 782 028f 15 .uleb128 0x15
+ 783 0290 86000000 .long 0x86
+ 784 0294 15 .uleb128 0x15
+ 785 0295 8B000000 .long 0x8b
+ 786 0299 15 .uleb128 0x15
+ 787 029a 62000000 .long 0x62
+ 788 029e 00 .byte 0x0
+ 789 029f 07 .uleb128 0x7
+ 790 02a0 08 .byte 0x8
+ 791 02a1 85020000 .long 0x285
+ 792 02a5 14 .uleb128 0x14
+ 793 02a6 01 .byte 0x1
+ 794 02a7 BB020000 .long 0x2bb
+ 795 02ab 15 .uleb128 0x15
+ 796 02ac 8B000000 .long 0x8b
+ 797 02b0 15 .uleb128 0x15
+ 798 02b1 33010000 .long 0x133
+ 799 02b5 15 .uleb128 0x15
+ 800 02b6 1E010000 .long 0x11e
+ 801 02ba 00 .byte 0x0
+ 802 02bb 07 .uleb128 0x7
+ 803 02bc 08 .byte 0x8
+ 804 02bd A5020000 .long 0x2a5
+ 805 02c1 04 .uleb128 0x4
+ 806 02c2 00000000 .long .LASF48
+ 807 02c6 05 .byte 0x5
+ 808 02c7 84 .byte 0x84
+ 809 02c8 CC020000 .long 0x2cc
+ 810 02cc 0E .uleb128 0xe
+ 811 02cd 00000000 .long .LASF48
+ 812 02d1 40 .byte 0x40
+ 813 02d2 05 .byte 0x5
+ 814 02d3 84 .byte 0x84
+ 815 02d4 49030000 .long 0x349
+ 816 02d8 10 .uleb128 0x10
+ 817 02d9 00000000 .long .LASF39
+ 818 02dd 05 .byte 0x5
+ 819 02de 90 .byte 0x90
+ 820 02df 6E010000 .long 0x16e
+
GAS LISTING /tmp/ccIEtKUs.s page 22
+
+
+ 821 02e3 02 .byte 0x2
+ 822 02e4 23 .byte 0x23
+ 823 02e5 00 .uleb128 0x0
+ 824 02e6 10 .uleb128 0x10
+ 825 02e7 00000000 .long .LASF40
+ 826 02eb 05 .byte 0x5
+ 827 02ec 95 .byte 0x95
+ 828 02ed 8D030000 .long 0x38d
+ 829 02f1 02 .byte 0x2
+ 830 02f2 23 .byte 0x23
+ 831 02f3 08 .uleb128 0x8
+ 832 02f4 10 .uleb128 0x10
+ 833 02f5 00000000 .long .LASF41
+ 834 02f9 05 .byte 0x5
+ 835 02fa 97 .byte 0x97
+ 836 02fb 7F020000 .long 0x27f
+ 837 02ff 02 .byte 0x2
+ 838 0300 23 .byte 0x23
+ 839 0301 10 .uleb128 0x10
+ 840 0302 10 .uleb128 0x10
+ 841 0303 00000000 .long .LASF42
+ 842 0307 05 .byte 0x5
+ 843 0308 99 .byte 0x99
+ 844 0309 7F020000 .long 0x27f
+ 845 030d 02 .byte 0x2
+ 846 030e 23 .byte 0x23
+ 847 030f 18 .uleb128 0x18
+ 848 0310 10 .uleb128 0x10
+ 849 0311 00000000 .long .LASF43
+ 850 0315 05 .byte 0x5
+ 851 0316 9B .byte 0x9b
+ 852 0317 9F020000 .long 0x29f
+ 853 031b 02 .byte 0x2
+ 854 031c 23 .byte 0x23
+ 855 031d 20 .uleb128 0x20
+ 856 031e 10 .uleb128 0x10
+ 857 031f 00000000 .long .LASF44
+ 858 0323 05 .byte 0x5
+ 859 0324 9F .byte 0x9f
+ 860 0325 9F020000 .long 0x29f
+ 861 0329 02 .byte 0x2
+ 862 032a 23 .byte 0x23
+ 863 032b 28 .uleb128 0x28
+ 864 032c 10 .uleb128 0x10
+ 865 032d 00000000 .long .LASF45
+ 866 0331 05 .byte 0x5
+ 867 0332 A3 .byte 0xa3
+ 868 0333 A8030000 .long 0x3a8
+ 869 0337 02 .byte 0x2
+ 870 0338 23 .byte 0x23
+ 871 0339 30 .uleb128 0x30
+ 872 033a 10 .uleb128 0x10
+ 873 033b 00000000 .long .LASF46
+ 874 033f 05 .byte 0x5
+ 875 0340 A6 .byte 0xa6
+ 876 0341 A8030000 .long 0x3a8
+ 877 0345 02 .byte 0x2
+
GAS LISTING /tmp/ccIEtKUs.s page 23
+
+
+ 878 0346 23 .byte 0x23
+ 879 0347 38 .uleb128 0x38
+ 880 0348 00 .byte 0x0
+ 881 0349 04 .uleb128 0x4
+ 882 034a 00000000 .long .LASF49
+ 883 034e 05 .byte 0x5
+ 884 034f 85 .byte 0x85
+ 885 0350 54030000 .long 0x354
+ 886 0354 11 .uleb128 0x11
+ 887 0355 00000000 .long .LASF49
+ 888 0359 40 .byte 0x40
+ 889 035a 05 .byte 0x5
+ 890 035b 85 .byte 0x85
+ 891 035c 76030000 .long 0x376
+ 892 0360 12 .uleb128 0x12
+ 893 0361 00000000 .long .LASF39
+ 894 0365 05 .byte 0x5
+ 895 0366 AF .byte 0xaf
+ 896 0367 6E010000 .long 0x16e
+ 897 036b 13 .uleb128 0x13
+ 898 036c 763100 .string "v1"
+ 899 036f 05 .byte 0x5
+ 900 0370 B0 .byte 0xb0
+ 901 0371 C1020000 .long 0x2c1
+ 902 0375 00 .byte 0x0
+ 903 0376 14 .uleb128 0x14
+ 904 0377 01 .byte 0x1
+ 905 0378 82030000 .long 0x382
+ 906 037c 15 .uleb128 0x15
+ 907 037d 82030000 .long 0x382
+ 908 0381 00 .byte 0x0
+ 909 0382 07 .uleb128 0x7
+ 910 0383 08 .byte 0x8
+ 911 0384 88030000 .long 0x388
+ 912 0388 08 .uleb128 0x8
+ 913 0389 49030000 .long 0x349
+ 914 038d 07 .uleb128 0x7
+ 915 038e 08 .byte 0x8
+ 916 038f 76030000 .long 0x376
+ 917 0393 18 .uleb128 0x18
+ 918 0394 01 .byte 0x1
+ 919 0395 63010000 .long 0x163
+ 920 0399 A8030000 .long 0x3a8
+ 921 039d 15 .uleb128 0x15
+ 922 039e 63010000 .long 0x163
+ 923 03a2 15 .uleb128 0x15
+ 924 03a3 1E010000 .long 0x11e
+ 925 03a7 00 .byte 0x0
+ 926 03a8 07 .uleb128 0x7
+ 927 03a9 08 .byte 0x8
+ 928 03aa 93030000 .long 0x393
+ 929 03ae 04 .uleb128 0x4
+ 930 03af 00000000 .long .LASF50
+ 931 03b3 06 .byte 0x6
+ 932 03b4 40 .byte 0x40
+ 933 03b5 B9030000 .long 0x3b9
+ 934 03b9 11 .uleb128 0x11
+
GAS LISTING /tmp/ccIEtKUs.s page 24
+
+
+ 935 03ba 00000000 .long .LASF50
+ 936 03be 40 .byte 0x40
+ 937 03bf 06 .byte 0x6
+ 938 03c0 40 .byte 0x40
+ 939 03c1 DC030000 .long 0x3dc
+ 940 03c5 12 .uleb128 0x12
+ 941 03c6 00000000 .long .LASF51
+ 942 03ca 06 .byte 0x6
+ 943 03cb 43 .byte 0x43
+ 944 03cc 2A020000 .long 0x22a
+ 945 03d0 13 .uleb128 0x13
+ 946 03d1 76656300 .string "vec"
+ 947 03d5 06 .byte 0x6
+ 948 03d6 44 .byte 0x44
+ 949 03d7 49030000 .long 0x349
+ 950 03db 00 .byte 0x0
+ 951 03dc 19 .uleb128 0x19
+ 952 03dd 00000000 .long .LASF74
+ 953 03e1 04 .byte 0x4
+ 954 03e2 07 .byte 0x7
+ 955 03e3 5A .byte 0x5a
+ 956 03e4 6D040000 .long 0x46d
+ 957 03e8 0A .uleb128 0xa
+ 958 03e9 00000000 .long .LASF52
+ 959 03ed 00 .sleb128 0
+ 960 03ee 0A .uleb128 0xa
+ 961 03ef 00000000 .long .LASF53
+ 962 03f3 01 .sleb128 1
+ 963 03f4 0A .uleb128 0xa
+ 964 03f5 00000000 .long .LASF54
+ 965 03f9 02 .sleb128 2
+ 966 03fa 0A .uleb128 0xa
+ 967 03fb 00000000 .long .LASF55
+ 968 03ff 03 .sleb128 3
+ 969 0400 0A .uleb128 0xa
+ 970 0401 00000000 .long .LASF56
+ 971 0405 04 .sleb128 4
+ 972 0406 0A .uleb128 0xa
+ 973 0407 00000000 .long .LASF57
+ 974 040b 05 .sleb128 5
+ 975 040c 0A .uleb128 0xa
+ 976 040d 00000000 .long .LASF58
+ 977 0411 06 .sleb128 6
+ 978 0412 0A .uleb128 0xa
+ 979 0413 00000000 .long .LASF59
+ 980 0417 07 .sleb128 7
+ 981 0418 0A .uleb128 0xa
+ 982 0419 00000000 .long .LASF60
+ 983 041d 08 .sleb128 8
+ 984 041e 0A .uleb128 0xa
+ 985 041f 00000000 .long .LASF61
+ 986 0423 09 .sleb128 9
+ 987 0424 0A .uleb128 0xa
+ 988 0425 00000000 .long .LASF62
+ 989 0429 0A .sleb128 10
+ 990 042a 0A .uleb128 0xa
+ 991 042b 00000000 .long .LASF63
+
GAS LISTING /tmp/ccIEtKUs.s page 25
+
+
+ 992 042f 0B .sleb128 11
+ 993 0430 0A .uleb128 0xa
+ 994 0431 00000000 .long .LASF64
+ 995 0435 0C .sleb128 12
+ 996 0436 0A .uleb128 0xa
+ 997 0437 00000000 .long .LASF65
+ 998 043b 0D .sleb128 13
+ 999 043c 0A .uleb128 0xa
+ 1000 043d 00000000 .long .LASF66
+ 1001 0441 0E .sleb128 14
+ 1002 0442 0A .uleb128 0xa
+ 1003 0443 00000000 .long .LASF67
+ 1004 0447 0E .sleb128 14
+ 1005 0448 0A .uleb128 0xa
+ 1006 0449 00000000 .long .LASF68
+ 1007 044d 0F .sleb128 15
+ 1008 044e 0A .uleb128 0xa
+ 1009 044f 00000000 .long .LASF69
+ 1010 0453 10 .sleb128 16
+ 1011 0454 0A .uleb128 0xa
+ 1012 0455 00000000 .long .LASF70
+ 1013 0459 11 .sleb128 17
+ 1014 045a 0A .uleb128 0xa
+ 1015 045b 00000000 .long .LASF71
+ 1016 045f 12 .sleb128 18
+ 1017 0460 0A .uleb128 0xa
+ 1018 0461 00000000 .long .LASF72
+ 1019 0465 13 .sleb128 19
+ 1020 0466 0A .uleb128 0xa
+ 1021 0467 00000000 .long .LASF73
+ 1022 046b 14 .sleb128 20
+ 1023 046c 00 .byte 0x0
+ 1024 046d 19 .uleb128 0x19
+ 1025 046e 00000000 .long .LASF75
+ 1026 0472 04 .byte 0x4
+ 1027 0473 07 .byte 0x7
+ 1028 0474 77 .byte 0x77
+ 1029 0475 F4050000 .long 0x5f4
+ 1030 0479 0A .uleb128 0xa
+ 1031 047a 00000000 .long .LASF76
+ 1032 047e 00 .sleb128 0
+ 1033 047f 0A .uleb128 0xa
+ 1034 0480 00000000 .long .LASF77
+ 1035 0484 01 .sleb128 1
+ 1036 0485 0A .uleb128 0xa
+ 1037 0486 00000000 .long .LASF78
+ 1038 048a 02 .sleb128 2
+ 1039 048b 0A .uleb128 0xa
+ 1040 048c 00000000 .long .LASF79
+ 1041 0490 03 .sleb128 3
+ 1042 0491 0A .uleb128 0xa
+ 1043 0492 00000000 .long .LASF80
+ 1044 0496 04 .sleb128 4
+ 1045 0497 0A .uleb128 0xa
+ 1046 0498 00000000 .long .LASF81
+ 1047 049c 05 .sleb128 5
+ 1048 049d 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s page 26
+
+
+ 1049 049e 00000000 .long .LASF82
+ 1050 04a2 06 .sleb128 6
+ 1051 04a3 0A .uleb128 0xa
+ 1052 04a4 00000000 .long .LASF83
+ 1053 04a8 07 .sleb128 7
+ 1054 04a9 0A .uleb128 0xa
+ 1055 04aa 00000000 .long .LASF84
+ 1056 04ae 08 .sleb128 8
+ 1057 04af 0A .uleb128 0xa
+ 1058 04b0 00000000 .long .LASF85
+ 1059 04b4 09 .sleb128 9
+ 1060 04b5 0A .uleb128 0xa
+ 1061 04b6 00000000 .long .LASF86
+ 1062 04ba 0A .sleb128 10
+ 1063 04bb 0A .uleb128 0xa
+ 1064 04bc 00000000 .long .LASF87
+ 1065 04c0 0B .sleb128 11
+ 1066 04c1 0A .uleb128 0xa
+ 1067 04c2 00000000 .long .LASF88
+ 1068 04c6 0C .sleb128 12
+ 1069 04c7 0A .uleb128 0xa
+ 1070 04c8 00000000 .long .LASF89
+ 1071 04cc 0D .sleb128 13
+ 1072 04cd 0A .uleb128 0xa
+ 1073 04ce 00000000 .long .LASF90
+ 1074 04d2 0E .sleb128 14
+ 1075 04d3 0A .uleb128 0xa
+ 1076 04d4 00000000 .long .LASF91
+ 1077 04d8 0F .sleb128 15
+ 1078 04d9 0A .uleb128 0xa
+ 1079 04da 00000000 .long .LASF92
+ 1080 04de 10 .sleb128 16
+ 1081 04df 0A .uleb128 0xa
+ 1082 04e0 00000000 .long .LASF93
+ 1083 04e4 11 .sleb128 17
+ 1084 04e5 0A .uleb128 0xa
+ 1085 04e6 00000000 .long .LASF94
+ 1086 04ea 12 .sleb128 18
+ 1087 04eb 0A .uleb128 0xa
+ 1088 04ec 00000000 .long .LASF95
+ 1089 04f0 13 .sleb128 19
+ 1090 04f1 0A .uleb128 0xa
+ 1091 04f2 00000000 .long .LASF96
+ 1092 04f6 14 .sleb128 20
+ 1093 04f7 0A .uleb128 0xa
+ 1094 04f8 00000000 .long .LASF97
+ 1095 04fc 15 .sleb128 21
+ 1096 04fd 0A .uleb128 0xa
+ 1097 04fe 00000000 .long .LASF98
+ 1098 0502 16 .sleb128 22
+ 1099 0503 0A .uleb128 0xa
+ 1100 0504 00000000 .long .LASF99
+ 1101 0508 17 .sleb128 23
+ 1102 0509 0A .uleb128 0xa
+ 1103 050a 00000000 .long .LASF100
+ 1104 050e 18 .sleb128 24
+ 1105 050f 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s page 27
+
+
+ 1106 0510 00000000 .long .LASF101
+ 1107 0514 19 .sleb128 25
+ 1108 0515 0A .uleb128 0xa
+ 1109 0516 00000000 .long .LASF102
+ 1110 051a 1A .sleb128 26
+ 1111 051b 0A .uleb128 0xa
+ 1112 051c 00000000 .long .LASF103
+ 1113 0520 1B .sleb128 27
+ 1114 0521 0A .uleb128 0xa
+ 1115 0522 00000000 .long .LASF104
+ 1116 0526 1C .sleb128 28
+ 1117 0527 0A .uleb128 0xa
+ 1118 0528 00000000 .long .LASF105
+ 1119 052c 1D .sleb128 29
+ 1120 052d 0A .uleb128 0xa
+ 1121 052e 00000000 .long .LASF106
+ 1122 0532 1E .sleb128 30
+ 1123 0533 0A .uleb128 0xa
+ 1124 0534 00000000 .long .LASF107
+ 1125 0538 1F .sleb128 31
+ 1126 0539 0A .uleb128 0xa
+ 1127 053a 00000000 .long .LASF108
+ 1128 053e 20 .sleb128 32
+ 1129 053f 0A .uleb128 0xa
+ 1130 0540 00000000 .long .LASF109
+ 1131 0544 21 .sleb128 33
+ 1132 0545 0A .uleb128 0xa
+ 1133 0546 00000000 .long .LASF110
+ 1134 054a 22 .sleb128 34
+ 1135 054b 0A .uleb128 0xa
+ 1136 054c 00000000 .long .LASF111
+ 1137 0550 23 .sleb128 35
+ 1138 0551 0A .uleb128 0xa
+ 1139 0552 00000000 .long .LASF112
+ 1140 0556 24 .sleb128 36
+ 1141 0557 0A .uleb128 0xa
+ 1142 0558 00000000 .long .LASF113
+ 1143 055c 25 .sleb128 37
+ 1144 055d 0A .uleb128 0xa
+ 1145 055e 00000000 .long .LASF114
+ 1146 0562 26 .sleb128 38
+ 1147 0563 0A .uleb128 0xa
+ 1148 0564 00000000 .long .LASF115
+ 1149 0568 27 .sleb128 39
+ 1150 0569 0A .uleb128 0xa
+ 1151 056a 00000000 .long .LASF116
+ 1152 056e 28 .sleb128 40
+ 1153 056f 0A .uleb128 0xa
+ 1154 0570 00000000 .long .LASF117
+ 1155 0574 29 .sleb128 41
+ 1156 0575 0A .uleb128 0xa
+ 1157 0576 00000000 .long .LASF118
+ 1158 057a 2A .sleb128 42
+ 1159 057b 0A .uleb128 0xa
+ 1160 057c 00000000 .long .LASF119
+ 1161 0580 2B .sleb128 43
+ 1162 0581 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s page 28
+
+
+ 1163 0582 00000000 .long .LASF120
+ 1164 0586 2C .sleb128 44
+ 1165 0587 0A .uleb128 0xa
+ 1166 0588 00000000 .long .LASF121
+ 1167 058c 2D .sleb128 45
+ 1168 058d 0A .uleb128 0xa
+ 1169 058e 00000000 .long .LASF122
+ 1170 0592 2E .sleb128 46
+ 1171 0593 0A .uleb128 0xa
+ 1172 0594 00000000 .long .LASF123
+ 1173 0598 2F .sleb128 47
+ 1174 0599 0A .uleb128 0xa
+ 1175 059a 00000000 .long .LASF124
+ 1176 059e 30 .sleb128 48
+ 1177 059f 0A .uleb128 0xa
+ 1178 05a0 00000000 .long .LASF125
+ 1179 05a4 31 .sleb128 49
+ 1180 05a5 0A .uleb128 0xa
+ 1181 05a6 00000000 .long .LASF126
+ 1182 05aa 32 .sleb128 50
+ 1183 05ab 0A .uleb128 0xa
+ 1184 05ac 00000000 .long .LASF127
+ 1185 05b0 33 .sleb128 51
+ 1186 05b1 0A .uleb128 0xa
+ 1187 05b2 00000000 .long .LASF128
+ 1188 05b6 34 .sleb128 52
+ 1189 05b7 0A .uleb128 0xa
+ 1190 05b8 00000000 .long .LASF129
+ 1191 05bc 35 .sleb128 53
+ 1192 05bd 0A .uleb128 0xa
+ 1193 05be 00000000 .long .LASF130
+ 1194 05c2 36 .sleb128 54
+ 1195 05c3 0A .uleb128 0xa
+ 1196 05c4 00000000 .long .LASF131
+ 1197 05c8 36 .sleb128 54
+ 1198 05c9 0A .uleb128 0xa
+ 1199 05ca 00000000 .long .LASF132
+ 1200 05ce 37 .sleb128 55
+ 1201 05cf 0A .uleb128 0xa
+ 1202 05d0 00000000 .long .LASF133
+ 1203 05d4 38 .sleb128 56
+ 1204 05d5 0A .uleb128 0xa
+ 1205 05d6 00000000 .long .LASF134
+ 1206 05da 39 .sleb128 57
+ 1207 05db 0A .uleb128 0xa
+ 1208 05dc 00000000 .long .LASF135
+ 1209 05e0 3A .sleb128 58
+ 1210 05e1 0A .uleb128 0xa
+ 1211 05e2 00000000 .long .LASF136
+ 1212 05e6 3B .sleb128 59
+ 1213 05e7 0A .uleb128 0xa
+ 1214 05e8 00000000 .long .LASF137
+ 1215 05ec 3C .sleb128 60
+ 1216 05ed 0A .uleb128 0xa
+ 1217 05ee 00000000 .long .LASF138
+ 1218 05f2 3D .sleb128 61
+ 1219 05f3 00 .byte 0x0
+
GAS LISTING /tmp/ccIEtKUs.s page 29
+
+
+ 1220 05f4 19 .uleb128 0x19
+ 1221 05f5 00000000 .long .LASF139
+ 1222 05f9 04 .byte 0x4
+ 1223 05fa 07 .byte 0x7
+ 1224 05fb BD .byte 0xbd
+ 1225 05fc AA070000 .long 0x7aa
+ 1226 0600 0A .uleb128 0xa
+ 1227 0601 00000000 .long .LASF140
+ 1228 0605 00 .sleb128 0
+ 1229 0606 0A .uleb128 0xa
+ 1230 0607 00000000 .long .LASF141
+ 1231 060b 01 .sleb128 1
+ 1232 060c 0A .uleb128 0xa
+ 1233 060d 00000000 .long .LASF142
+ 1234 0611 02 .sleb128 2
+ 1235 0612 0A .uleb128 0xa
+ 1236 0613 00000000 .long .LASF143
+ 1237 0617 03 .sleb128 3
+ 1238 0618 0A .uleb128 0xa
+ 1239 0619 00000000 .long .LASF144
+ 1240 061d 04 .sleb128 4
+ 1241 061e 0A .uleb128 0xa
+ 1242 061f 00000000 .long .LASF145
+ 1243 0623 05 .sleb128 5
+ 1244 0624 0A .uleb128 0xa
+ 1245 0625 00000000 .long .LASF146
+ 1246 0629 06 .sleb128 6
+ 1247 062a 0A .uleb128 0xa
+ 1248 062b 00000000 .long .LASF147
+ 1249 062f 07 .sleb128 7
+ 1250 0630 0A .uleb128 0xa
+ 1251 0631 00000000 .long .LASF148
+ 1252 0635 08 .sleb128 8
+ 1253 0636 0A .uleb128 0xa
+ 1254 0637 00000000 .long .LASF149
+ 1255 063b 09 .sleb128 9
+ 1256 063c 0A .uleb128 0xa
+ 1257 063d 00000000 .long .LASF150
+ 1258 0641 0A .sleb128 10
+ 1259 0642 0A .uleb128 0xa
+ 1260 0643 00000000 .long .LASF151
+ 1261 0647 0B .sleb128 11
+ 1262 0648 0A .uleb128 0xa
+ 1263 0649 00000000 .long .LASF152
+ 1264 064d 0C .sleb128 12
+ 1265 064e 0A .uleb128 0xa
+ 1266 064f 00000000 .long .LASF153
+ 1267 0653 0D .sleb128 13
+ 1268 0654 0A .uleb128 0xa
+ 1269 0655 00000000 .long .LASF154
+ 1270 0659 0E .sleb128 14
+ 1271 065a 0A .uleb128 0xa
+ 1272 065b 00000000 .long .LASF155
+ 1273 065f 0F .sleb128 15
+ 1274 0660 0A .uleb128 0xa
+ 1275 0661 00000000 .long .LASF156
+ 1276 0665 10 .sleb128 16
+
GAS LISTING /tmp/ccIEtKUs.s page 30
+
+
+ 1277 0666 0A .uleb128 0xa
+ 1278 0667 00000000 .long .LASF157
+ 1279 066b 11 .sleb128 17
+ 1280 066c 0A .uleb128 0xa
+ 1281 066d 00000000 .long .LASF158
+ 1282 0671 12 .sleb128 18
+ 1283 0672 0A .uleb128 0xa
+ 1284 0673 00000000 .long .LASF159
+ 1285 0677 13 .sleb128 19
+ 1286 0678 0A .uleb128 0xa
+ 1287 0679 00000000 .long .LASF160
+ 1288 067d 14 .sleb128 20
+ 1289 067e 0A .uleb128 0xa
+ 1290 067f 00000000 .long .LASF161
+ 1291 0683 15 .sleb128 21
+ 1292 0684 0A .uleb128 0xa
+ 1293 0685 00000000 .long .LASF162
+ 1294 0689 16 .sleb128 22
+ 1295 068a 0A .uleb128 0xa
+ 1296 068b 00000000 .long .LASF163
+ 1297 068f 17 .sleb128 23
+ 1298 0690 0A .uleb128 0xa
+ 1299 0691 00000000 .long .LASF164
+ 1300 0695 18 .sleb128 24
+ 1301 0696 0A .uleb128 0xa
+ 1302 0697 00000000 .long .LASF165
+ 1303 069b 19 .sleb128 25
+ 1304 069c 0A .uleb128 0xa
+ 1305 069d 00000000 .long .LASF166
+ 1306 06a1 1A .sleb128 26
+ 1307 06a2 0A .uleb128 0xa
+ 1308 06a3 00000000 .long .LASF167
+ 1309 06a7 1B .sleb128 27
+ 1310 06a8 0A .uleb128 0xa
+ 1311 06a9 00000000 .long .LASF168
+ 1312 06ad 1C .sleb128 28
+ 1313 06ae 0A .uleb128 0xa
+ 1314 06af 00000000 .long .LASF169
+ 1315 06b3 1D .sleb128 29
+ 1316 06b4 0A .uleb128 0xa
+ 1317 06b5 00000000 .long .LASF170
+ 1318 06b9 1E .sleb128 30
+ 1319 06ba 0A .uleb128 0xa
+ 1320 06bb 00000000 .long .LASF171
+ 1321 06bf 1F .sleb128 31
+ 1322 06c0 0A .uleb128 0xa
+ 1323 06c1 00000000 .long .LASF172
+ 1324 06c5 20 .sleb128 32
+ 1325 06c6 0A .uleb128 0xa
+ 1326 06c7 00000000 .long .LASF173
+ 1327 06cb 21 .sleb128 33
+ 1328 06cc 0A .uleb128 0xa
+ 1329 06cd 00000000 .long .LASF174
+ 1330 06d1 22 .sleb128 34
+ 1331 06d2 0A .uleb128 0xa
+ 1332 06d3 00000000 .long .LASF175
+ 1333 06d7 23 .sleb128 35
+
GAS LISTING /tmp/ccIEtKUs.s page 31
+
+
+ 1334 06d8 0A .uleb128 0xa
+ 1335 06d9 00000000 .long .LASF176
+ 1336 06dd 24 .sleb128 36
+ 1337 06de 0A .uleb128 0xa
+ 1338 06df 00000000 .long .LASF177
+ 1339 06e3 25 .sleb128 37
+ 1340 06e4 0A .uleb128 0xa
+ 1341 06e5 00000000 .long .LASF178
+ 1342 06e9 26 .sleb128 38
+ 1343 06ea 0A .uleb128 0xa
+ 1344 06eb 00000000 .long .LASF179
+ 1345 06ef 27 .sleb128 39
+ 1346 06f0 0A .uleb128 0xa
+ 1347 06f1 00000000 .long .LASF180
+ 1348 06f5 28 .sleb128 40
+ 1349 06f6 0A .uleb128 0xa
+ 1350 06f7 00000000 .long .LASF181
+ 1351 06fb 29 .sleb128 41
+ 1352 06fc 0A .uleb128 0xa
+ 1353 06fd 00000000 .long .LASF182
+ 1354 0701 2A .sleb128 42
+ 1355 0702 0A .uleb128 0xa
+ 1356 0703 00000000 .long .LASF183
+ 1357 0707 2B .sleb128 43
+ 1358 0708 0A .uleb128 0xa
+ 1359 0709 00000000 .long .LASF184
+ 1360 070d 2C .sleb128 44
+ 1361 070e 0A .uleb128 0xa
+ 1362 070f 00000000 .long .LASF185
+ 1363 0713 2D .sleb128 45
+ 1364 0714 0A .uleb128 0xa
+ 1365 0715 00000000 .long .LASF186
+ 1366 0719 2E .sleb128 46
+ 1367 071a 0A .uleb128 0xa
+ 1368 071b 00000000 .long .LASF187
+ 1369 071f 2F .sleb128 47
+ 1370 0720 0A .uleb128 0xa
+ 1371 0721 00000000 .long .LASF188
+ 1372 0725 30 .sleb128 48
+ 1373 0726 0A .uleb128 0xa
+ 1374 0727 00000000 .long .LASF189
+ 1375 072b 31 .sleb128 49
+ 1376 072c 0A .uleb128 0xa
+ 1377 072d 00000000 .long .LASF190
+ 1378 0731 32 .sleb128 50
+ 1379 0732 0A .uleb128 0xa
+ 1380 0733 00000000 .long .LASF191
+ 1381 0737 33 .sleb128 51
+ 1382 0738 0A .uleb128 0xa
+ 1383 0739 00000000 .long .LASF192
+ 1384 073d 34 .sleb128 52
+ 1385 073e 0A .uleb128 0xa
+ 1386 073f 00000000 .long .LASF193
+ 1387 0743 35 .sleb128 53
+ 1388 0744 0A .uleb128 0xa
+ 1389 0745 00000000 .long .LASF194
+ 1390 0749 36 .sleb128 54
+
GAS LISTING /tmp/ccIEtKUs.s page 32
+
+
+ 1391 074a 0A .uleb128 0xa
+ 1392 074b 00000000 .long .LASF195
+ 1393 074f 37 .sleb128 55
+ 1394 0750 0A .uleb128 0xa
+ 1395 0751 00000000 .long .LASF196
+ 1396 0755 38 .sleb128 56
+ 1397 0756 0A .uleb128 0xa
+ 1398 0757 00000000 .long .LASF197
+ 1399 075b 39 .sleb128 57
+ 1400 075c 0A .uleb128 0xa
+ 1401 075d 00000000 .long .LASF198
+ 1402 0761 3A .sleb128 58
+ 1403 0762 0A .uleb128 0xa
+ 1404 0763 00000000 .long .LASF199
+ 1405 0767 3A .sleb128 58
+ 1406 0768 0A .uleb128 0xa
+ 1407 0769 00000000 .long .LASF200
+ 1408 076d 3B .sleb128 59
+ 1409 076e 0A .uleb128 0xa
+ 1410 076f 00000000 .long .LASF201
+ 1411 0773 3C .sleb128 60
+ 1412 0774 0A .uleb128 0xa
+ 1413 0775 00000000 .long .LASF202
+ 1414 0779 3D .sleb128 61
+ 1415 077a 0A .uleb128 0xa
+ 1416 077b 00000000 .long .LASF203
+ 1417 077f 3E .sleb128 62
+ 1418 0780 0A .uleb128 0xa
+ 1419 0781 00000000 .long .LASF204
+ 1420 0785 3F .sleb128 63
+ 1421 0786 0A .uleb128 0xa
+ 1422 0787 00000000 .long .LASF205
+ 1423 078b C000 .sleb128 64
+ 1424 078d 0A .uleb128 0xa
+ 1425 078e 00000000 .long .LASF206
+ 1426 0792 C100 .sleb128 65
+ 1427 0794 0A .uleb128 0xa
+ 1428 0795 00000000 .long .LASF207
+ 1429 0799 C200 .sleb128 66
+ 1430 079b 0A .uleb128 0xa
+ 1431 079c 00000000 .long .LASF208
+ 1432 07a0 C300 .sleb128 67
+ 1433 07a2 0A .uleb128 0xa
+ 1434 07a3 00000000 .long .LASF209
+ 1435 07a7 C400 .sleb128 68
+ 1436 07a9 00 .byte 0x0
+ 1437 07aa 1A .uleb128 0x1a
+ 1438 07ab 00000000 .long .LASF210
+ 1439 07af 04 .byte 0x4
+ 1440 07b0 07 .byte 0x7
+ 1441 07b1 0A01 .value 0x10a
+ 1442 07b3 A9080000 .long 0x8a9
+ 1443 07b7 0A .uleb128 0xa
+ 1444 07b8 00000000 .long .LASF211
+ 1445 07bc 00 .sleb128 0
+ 1446 07bd 0A .uleb128 0xa
+ 1447 07be 00000000 .long .LASF212
+
GAS LISTING /tmp/ccIEtKUs.s page 33
+
+
+ 1448 07c2 3D .sleb128 61
+ 1449 07c3 0A .uleb128 0xa
+ 1450 07c4 00000000 .long .LASF213
+ 1451 07c8 3E .sleb128 62
+ 1452 07c9 0A .uleb128 0xa
+ 1453 07ca 00000000 .long .LASF214
+ 1454 07ce 3F .sleb128 63
+ 1455 07cf 0A .uleb128 0xa
+ 1456 07d0 00000000 .long .LASF215
+ 1457 07d4 C000 .sleb128 64
+ 1458 07d6 0A .uleb128 0xa
+ 1459 07d7 00000000 .long .LASF216
+ 1460 07db C100 .sleb128 65
+ 1461 07dd 0A .uleb128 0xa
+ 1462 07de 00000000 .long .LASF217
+ 1463 07e2 C200 .sleb128 66
+ 1464 07e4 0A .uleb128 0xa
+ 1465 07e5 00000000 .long .LASF218
+ 1466 07e9 C300 .sleb128 67
+ 1467 07eb 0A .uleb128 0xa
+ 1468 07ec 00000000 .long .LASF219
+ 1469 07f0 C400 .sleb128 68
+ 1470 07f2 0A .uleb128 0xa
+ 1471 07f3 00000000 .long .LASF220
+ 1472 07f7 C500 .sleb128 69
+ 1473 07f9 0A .uleb128 0xa
+ 1474 07fa 00000000 .long .LASF221
+ 1475 07fe C600 .sleb128 70
+ 1476 0800 0A .uleb128 0xa
+ 1477 0801 00000000 .long .LASF222
+ 1478 0805 C700 .sleb128 71
+ 1479 0807 0A .uleb128 0xa
+ 1480 0808 00000000 .long .LASF223
+ 1481 080c C800 .sleb128 72
+ 1482 080e 0A .uleb128 0xa
+ 1483 080f 00000000 .long .LASF224
+ 1484 0813 C900 .sleb128 73
+ 1485 0815 0A .uleb128 0xa
+ 1486 0816 00000000 .long .LASF225
+ 1487 081a CA00 .sleb128 74
+ 1488 081c 0A .uleb128 0xa
+ 1489 081d 00000000 .long .LASF226
+ 1490 0821 CB00 .sleb128 75
+ 1491 0823 0A .uleb128 0xa
+ 1492 0824 00000000 .long .LASF227
+ 1493 0828 CC00 .sleb128 76
+ 1494 082a 0A .uleb128 0xa
+ 1495 082b 00000000 .long .LASF228
+ 1496 082f CD00 .sleb128 77
+ 1497 0831 0A .uleb128 0xa
+ 1498 0832 00000000 .long .LASF229
+ 1499 0836 CE00 .sleb128 78
+ 1500 0838 0A .uleb128 0xa
+ 1501 0839 00000000 .long .LASF230
+ 1502 083d CF00 .sleb128 79
+ 1503 083f 0A .uleb128 0xa
+ 1504 0840 00000000 .long .LASF231
+
GAS LISTING /tmp/ccIEtKUs.s page 34
+
+
+ 1505 0844 D000 .sleb128 80
+ 1506 0846 0A .uleb128 0xa
+ 1507 0847 00000000 .long .LASF232
+ 1508 084b D100 .sleb128 81
+ 1509 084d 0A .uleb128 0xa
+ 1510 084e 00000000 .long .LASF233
+ 1511 0852 D100 .sleb128 81
+ 1512 0854 0A .uleb128 0xa
+ 1513 0855 00000000 .long .LASF234
+ 1514 0859 D200 .sleb128 82
+ 1515 085b 0A .uleb128 0xa
+ 1516 085c 00000000 .long .LASF235
+ 1517 0860 D300 .sleb128 83
+ 1518 0862 0A .uleb128 0xa
+ 1519 0863 00000000 .long .LASF236
+ 1520 0867 D400 .sleb128 84
+ 1521 0869 0A .uleb128 0xa
+ 1522 086a 00000000 .long .LASF237
+ 1523 086e D500 .sleb128 85
+ 1524 0870 0A .uleb128 0xa
+ 1525 0871 00000000 .long .LASF238
+ 1526 0875 D600 .sleb128 86
+ 1527 0877 0A .uleb128 0xa
+ 1528 0878 00000000 .long .LASF239
+ 1529 087c D700 .sleb128 87
+ 1530 087e 0A .uleb128 0xa
+ 1531 087f 00000000 .long .LASF240
+ 1532 0883 D800 .sleb128 88
+ 1533 0885 0A .uleb128 0xa
+ 1534 0886 00000000 .long .LASF241
+ 1535 088a D900 .sleb128 89
+ 1536 088c 0A .uleb128 0xa
+ 1537 088d 00000000 .long .LASF242
+ 1538 0891 DA00 .sleb128 90
+ 1539 0893 0A .uleb128 0xa
+ 1540 0894 00000000 .long .LASF243
+ 1541 0898 DB00 .sleb128 91
+ 1542 089a 0A .uleb128 0xa
+ 1543 089b 00000000 .long .LASF244
+ 1544 089f DC00 .sleb128 92
+ 1545 08a1 0A .uleb128 0xa
+ 1546 08a2 00000000 .long .LASF245
+ 1547 08a6 DD00 .sleb128 93
+ 1548 08a8 00 .byte 0x0
+ 1549 08a9 1A .uleb128 0x1a
+ 1550 08aa 00000000 .long .LASF246
+ 1551 08ae 04 .byte 0x4
+ 1552 08af 07 .byte 0x7
+ 1553 08b0 3401 .value 0x134
+ 1554 08b2 E9090000 .long 0x9e9
+ 1555 08b6 0A .uleb128 0xa
+ 1556 08b7 00000000 .long .LASF247
+ 1557 08bb 00 .sleb128 0
+ 1558 08bc 0A .uleb128 0xa
+ 1559 08bd 00000000 .long .LASF248
+ 1560 08c1 01 .sleb128 1
+ 1561 08c2 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s page 35
+
+
+ 1562 08c3 00000000 .long .LASF249
+ 1563 08c7 02 .sleb128 2
+ 1564 08c8 0A .uleb128 0xa
+ 1565 08c9 00000000 .long .LASF250
+ 1566 08cd 03 .sleb128 3
+ 1567 08ce 0A .uleb128 0xa
+ 1568 08cf 00000000 .long .LASF251
+ 1569 08d3 04 .sleb128 4
+ 1570 08d4 0A .uleb128 0xa
+ 1571 08d5 00000000 .long .LASF252
+ 1572 08d9 05 .sleb128 5
+ 1573 08da 0A .uleb128 0xa
+ 1574 08db 00000000 .long .LASF253
+ 1575 08df 06 .sleb128 6
+ 1576 08e0 0A .uleb128 0xa
+ 1577 08e1 00000000 .long .LASF254
+ 1578 08e5 07 .sleb128 7
+ 1579 08e6 0A .uleb128 0xa
+ 1580 08e7 00000000 .long .LASF255
+ 1581 08eb 08 .sleb128 8
+ 1582 08ec 0A .uleb128 0xa
+ 1583 08ed 00000000 .long .LASF256
+ 1584 08f1 09 .sleb128 9
+ 1585 08f2 0A .uleb128 0xa
+ 1586 08f3 00000000 .long .LASF257
+ 1587 08f7 0A .sleb128 10
+ 1588 08f8 0A .uleb128 0xa
+ 1589 08f9 00000000 .long .LASF258
+ 1590 08fd 0B .sleb128 11
+ 1591 08fe 0A .uleb128 0xa
+ 1592 08ff 00000000 .long .LASF259
+ 1593 0903 0C .sleb128 12
+ 1594 0904 0A .uleb128 0xa
+ 1595 0905 00000000 .long .LASF260
+ 1596 0909 0D .sleb128 13
+ 1597 090a 0A .uleb128 0xa
+ 1598 090b 00000000 .long .LASF261
+ 1599 090f 0E .sleb128 14
+ 1600 0910 0A .uleb128 0xa
+ 1601 0911 00000000 .long .LASF262
+ 1602 0915 0F .sleb128 15
+ 1603 0916 0A .uleb128 0xa
+ 1604 0917 00000000 .long .LASF263
+ 1605 091b 10 .sleb128 16
+ 1606 091c 0A .uleb128 0xa
+ 1607 091d 00000000 .long .LASF264
+ 1608 0921 11 .sleb128 17
+ 1609 0922 0A .uleb128 0xa
+ 1610 0923 00000000 .long .LASF265
+ 1611 0927 12 .sleb128 18
+ 1612 0928 0A .uleb128 0xa
+ 1613 0929 00000000 .long .LASF266
+ 1614 092d 13 .sleb128 19
+ 1615 092e 0A .uleb128 0xa
+ 1616 092f 00000000 .long .LASF267
+ 1617 0933 14 .sleb128 20
+ 1618 0934 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s page 36
+
+
+ 1619 0935 00000000 .long .LASF268
+ 1620 0939 15 .sleb128 21
+ 1621 093a 0A .uleb128 0xa
+ 1622 093b 00000000 .long .LASF269
+ 1623 093f 16 .sleb128 22
+ 1624 0940 0A .uleb128 0xa
+ 1625 0941 00000000 .long .LASF270
+ 1626 0945 17 .sleb128 23
+ 1627 0946 0A .uleb128 0xa
+ 1628 0947 00000000 .long .LASF271
+ 1629 094b 18 .sleb128 24
+ 1630 094c 0A .uleb128 0xa
+ 1631 094d 00000000 .long .LASF272
+ 1632 0951 19 .sleb128 25
+ 1633 0952 0A .uleb128 0xa
+ 1634 0953 00000000 .long .LASF273
+ 1635 0957 1A .sleb128 26
+ 1636 0958 0A .uleb128 0xa
+ 1637 0959 00000000 .long .LASF274
+ 1638 095d 1B .sleb128 27
+ 1639 095e 0A .uleb128 0xa
+ 1640 095f 00000000 .long .LASF275
+ 1641 0963 1C .sleb128 28
+ 1642 0964 0A .uleb128 0xa
+ 1643 0965 00000000 .long .LASF276
+ 1644 0969 1D .sleb128 29
+ 1645 096a 0A .uleb128 0xa
+ 1646 096b 00000000 .long .LASF277
+ 1647 096f 1E .sleb128 30
+ 1648 0970 0A .uleb128 0xa
+ 1649 0971 00000000 .long .LASF278
+ 1650 0975 1F .sleb128 31
+ 1651 0976 0A .uleb128 0xa
+ 1652 0977 00000000 .long .LASF279
+ 1653 097b 20 .sleb128 32
+ 1654 097c 0A .uleb128 0xa
+ 1655 097d 00000000 .long .LASF280
+ 1656 0981 21 .sleb128 33
+ 1657 0982 0A .uleb128 0xa
+ 1658 0983 00000000 .long .LASF281
+ 1659 0987 22 .sleb128 34
+ 1660 0988 0A .uleb128 0xa
+ 1661 0989 00000000 .long .LASF282
+ 1662 098d 23 .sleb128 35
+ 1663 098e 0A .uleb128 0xa
+ 1664 098f 00000000 .long .LASF283
+ 1665 0993 24 .sleb128 36
+ 1666 0994 0A .uleb128 0xa
+ 1667 0995 00000000 .long .LASF284
+ 1668 0999 25 .sleb128 37
+ 1669 099a 0A .uleb128 0xa
+ 1670 099b 00000000 .long .LASF285
+ 1671 099f 26 .sleb128 38
+ 1672 09a0 0A .uleb128 0xa
+ 1673 09a1 00000000 .long .LASF286
+ 1674 09a5 27 .sleb128 39
+ 1675 09a6 0A .uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s page 37
+
+
+ 1676 09a7 00000000 .long .LASF287
+ 1677 09ab 28 .sleb128 40
+ 1678 09ac 0A .uleb128 0xa
+ 1679 09ad 00000000 .long .LASF288
+ 1680 09b1 29 .sleb128 41
+ 1681 09b2 0A .uleb128 0xa
+ 1682 09b3 00000000 .long .LASF289
+ 1683 09b7 29 .sleb128 41
+ 1684 09b8 0A .uleb128 0xa
+ 1685 09b9 00000000 .long .LASF290
+ 1686 09bd 2A .sleb128 42
+ 1687 09be 0A .uleb128 0xa
+ 1688 09bf 00000000 .long .LASF291
+ 1689 09c3 2B .sleb128 43
+ 1690 09c4 0A .uleb128 0xa
+ 1691 09c5 00000000 .long .LASF292
+ 1692 09c9 2C .sleb128 44
+ 1693 09ca 0A .uleb128 0xa
+ 1694 09cb 00000000 .long .LASF293
+ 1695 09cf 2D .sleb128 45
+ 1696 09d0 0A .uleb128 0xa
+ 1697 09d1 00000000 .long .LASF294
+ 1698 09d5 2E .sleb128 46
+ 1699 09d6 0A .uleb128 0xa
+ 1700 09d7 00000000 .long .LASF295
+ 1701 09db 2F .sleb128 47
+ 1702 09dc 0A .uleb128 0xa
+ 1703 09dd 00000000 .long .LASF296
+ 1704 09e1 30 .sleb128 48
+ 1705 09e2 0A .uleb128 0xa
+ 1706 09e3 00000000 .long .LASF297
+ 1707 09e7 31 .sleb128 49
+ 1708 09e8 00 .byte 0x0
+ 1709 09e9 1B .uleb128 0x1b
+ 1710 09ea 00000000 .long .LASF320
+ 1711 09ee 01 .byte 0x1
+ 1712 09ef 48 .byte 0x48
+ 1713 09f0 01 .byte 0x1
+ 1714 09f1 00000000 .quad .LFB595
+ 1714 00000000
+ 1715 09f9 00000000 .quad .LFE595
+ 1715 00000000
+ 1716 0a01 00000000 .long .LLST0
+ 1717 0a05 180A0000 .long 0xa18
+ 1718 0a09 1C .uleb128 0x1c
+ 1719 0a0a 00000000 .long .LASF300
+ 1720 0a0e 01 .byte 0x1
+ 1721 0a0f 48 .byte 0x48
+ 1722 0a10 82030000 .long 0x382
+ 1723 0a14 02 .byte 0x2
+ 1724 0a15 91 .byte 0x91
+ 1725 0a16 68 .sleb128 -24
+ 1726 0a17 00 .byte 0x0
+ 1727 0a18 1D .uleb128 0x1d
+ 1728 0a19 00000000 .long .LASF298
+ 1729 0a1d 01 .byte 0x1
+ 1730 0a1e 52 .byte 0x52
+
GAS LISTING /tmp/ccIEtKUs.s page 38
+
+
+ 1731 0a1f 62000000 .long 0x62
+ 1732 0a23 00000000 .quad .LFB596
+ 1732 00000000
+ 1733 0a2b 00000000 .quad .LFE596
+ 1733 00000000
+ 1734 0a33 00000000 .long .LLST1
+ 1735 0a37 1D .uleb128 0x1d
+ 1736 0a38 00000000 .long .LASF299
+ 1737 0a3c 01 .byte 0x1
+ 1738 0a3d 60 .byte 0x60
+ 1739 0a3e 62000000 .long 0x62
+ 1740 0a42 00000000 .quad .LFB597
+ 1740 00000000
+ 1741 0a4a 00000000 .quad .LFE597
+ 1741 00000000
+ 1742 0a52 00000000 .long .LLST2
+ 1743 0a56 1E .uleb128 0x1e
+ 1744 0a57 00000000 .long .LASF304
+ 1745 0a5b 01 .byte 0x1
+ 1746 0a5c 6C .byte 0x6c
+ 1747 0a5d 01 .byte 0x1
+ 1748 0a5e 7B000000 .long 0x7b
+ 1749 0a62 00000000 .quad .LFB598
+ 1749 00000000
+ 1750 0a6a 00000000 .quad .LFE598
+ 1750 00000000
+ 1751 0a72 00000000 .long .LLST3
+ 1752 0a76 A50A0000 .long 0xaa5
+ 1753 0a7a 1C .uleb128 0x1c
+ 1754 0a7b 00000000 .long .LASF301
+ 1755 0a7f 01 .byte 0x1
+ 1756 0a80 6C .byte 0x6c
+ 1757 0a81 86000000 .long 0x86
+ 1758 0a85 02 .byte 0x2
+ 1759 0a86 91 .byte 0x91
+ 1760 0a87 68 .sleb128 -24
+ 1761 0a88 1C .uleb128 0x1c
+ 1762 0a89 00000000 .long .LASF302
+ 1763 0a8d 01 .byte 0x1
+ 1764 0a8e 6C .byte 0x6c
+ 1765 0a8f 8B000000 .long 0x8b
+ 1766 0a93 02 .byte 0x2
+ 1767 0a94 91 .byte 0x91
+ 1768 0a95 60 .sleb128 -32
+ 1769 0a96 1C .uleb128 0x1c
+ 1770 0a97 00000000 .long .LASF303
+ 1771 0a9b 01 .byte 0x1
+ 1772 0a9c 6D .byte 0x6d
+ 1773 0a9d 62000000 .long 0x62
+ 1774 0aa1 02 .byte 0x2
+ 1775 0aa2 91 .byte 0x91
+ 1776 0aa3 5C .sleb128 -36
+ 1777 0aa4 00 .byte 0x0
+ 1778 0aa5 1E .uleb128 0x1e
+ 1779 0aa6 00000000 .long .LASF305
+ 1780 0aaa 01 .byte 0x1
+ 1781 0aab 79 .byte 0x79
+
GAS LISTING /tmp/ccIEtKUs.s page 39
+
+
+ 1782 0aac 01 .byte 0x1
+ 1783 0aad 7B000000 .long 0x7b
+ 1784 0ab1 00000000 .quad .LFB599
+ 1784 00000000
+ 1785 0ab9 00000000 .quad .LFE599
+ 1785 00000000
+ 1786 0ac1 00000000 .long .LLST4
+ 1787 0ac5 F40A0000 .long 0xaf4
+ 1788 0ac9 1C .uleb128 0x1c
+ 1789 0aca 00000000 .long .LASF306
+ 1790 0ace 01 .byte 0x1
+ 1791 0acf 79 .byte 0x79
+ 1792 0ad0 86000000 .long 0x86
+ 1793 0ad4 02 .byte 0x2
+ 1794 0ad5 91 .byte 0x91
+ 1795 0ad6 68 .sleb128 -24
+ 1796 0ad7 1C .uleb128 0x1c
+ 1797 0ad8 00000000 .long .LASF302
+ 1798 0adc 01 .byte 0x1
+ 1799 0add 7A .byte 0x7a
+ 1800 0ade 8B000000 .long 0x8b
+ 1801 0ae2 02 .byte 0x2
+ 1802 0ae3 91 .byte 0x91
+ 1803 0ae4 60 .sleb128 -32
+ 1804 0ae5 1C .uleb128 0x1c
+ 1805 0ae6 00000000 .long .LASF303
+ 1806 0aea 01 .byte 0x1
+ 1807 0aeb 7B .byte 0x7b
+ 1808 0aec 62000000 .long 0x62
+ 1809 0af0 02 .byte 0x2
+ 1810 0af1 91 .byte 0x91
+ 1811 0af2 5C .sleb128 -36
+ 1812 0af3 00 .byte 0x0
+ 1813 0af4 1E .uleb128 0x1e
+ 1814 0af5 00000000 .long .LASF307
+ 1815 0af9 01 .byte 0x1
+ 1816 0afa 89 .byte 0x89
+ 1817 0afb 01 .byte 0x1
+ 1818 0afc 63010000 .long 0x163
+ 1819 0b00 00000000 .quad .LFB600
+ 1819 00000000
+ 1820 0b08 00000000 .quad .LFE600
+ 1820 00000000
+ 1821 0b10 00000000 .long .LLST5
+ 1822 0b14 350B0000 .long 0xb35
+ 1823 0b18 1C .uleb128 0x1c
+ 1824 0b19 00000000 .long .LASF308
+ 1825 0b1d 01 .byte 0x1
+ 1826 0b1e 89 .byte 0x89
+ 1827 0b1f 63010000 .long 0x163
+ 1828 0b23 02 .byte 0x2
+ 1829 0b24 91 .byte 0x91
+ 1830 0b25 60 .sleb128 -32
+ 1831 0b26 1C .uleb128 0x1c
+ 1832 0b27 00000000 .long .LASF301
+ 1833 0b2b 01 .byte 0x1
+ 1834 0b2c 8A .byte 0x8a
+
GAS LISTING /tmp/ccIEtKUs.s page 40
+
+
+ 1835 0b2d 1E010000 .long 0x11e
+ 1836 0b31 02 .byte 0x2
+ 1837 0b32 91 .byte 0x91
+ 1838 0b33 58 .sleb128 -40
+ 1839 0b34 00 .byte 0x0
+ 1840 0b35 1E .uleb128 0x1e
+ 1841 0b36 00000000 .long .LASF309
+ 1842 0b3a 01 .byte 0x1
+ 1843 0b3b 9E .byte 0x9e
+ 1844 0b3c 01 .byte 0x1
+ 1845 0b3d 63010000 .long 0x163
+ 1846 0b41 00000000 .quad .LFB601
+ 1846 00000000
+ 1847 0b49 00000000 .quad .LFE601
+ 1847 00000000
+ 1848 0b51 00000000 .long .LLST6
+ 1849 0b55 760B0000 .long 0xb76
+ 1850 0b59 1C .uleb128 0x1c
+ 1851 0b5a 00000000 .long .LASF308
+ 1852 0b5e 01 .byte 0x1
+ 1853 0b5f 9E .byte 0x9e
+ 1854 0b60 63010000 .long 0x163
+ 1855 0b64 02 .byte 0x2
+ 1856 0b65 91 .byte 0x91
+ 1857 0b66 60 .sleb128 -32
+ 1858 0b67 1C .uleb128 0x1c
+ 1859 0b68 00000000 .long .LASF306
+ 1860 0b6c 01 .byte 0x1
+ 1861 0b6d 9F .byte 0x9f
+ 1862 0b6e 1E010000 .long 0x11e
+ 1863 0b72 02 .byte 0x2
+ 1864 0b73 91 .byte 0x91
+ 1865 0b74 58 .sleb128 -40
+ 1866 0b75 00 .byte 0x0
+ 1867 0b76 1D .uleb128 0x1d
+ 1868 0b77 00000000 .long .LASF310
+ 1869 0b7b 01 .byte 0x1
+ 1870 0b7c B3 .byte 0xb3
+ 1871 0b7d 950B0000 .long 0xb95
+ 1872 0b81 00000000 .quad .LFB602
+ 1872 00000000
+ 1873 0b89 00000000 .quad .LFE602
+ 1873 00000000
+ 1874 0b91 00000000 .long .LLST7
+ 1875 0b95 02 .uleb128 0x2
+ 1876 0b96 01 .byte 0x1
+ 1877 0b97 02 .byte 0x2
+ 1878 0b98 00000000 .long .LASF311
+ 1879 0b9c 1F .uleb128 0x1f
+ 1880 0b9d 01 .byte 0x1
+ 1881 0b9e 00000000 .long .LASF321
+ 1882 0ba2 01 .byte 0x1
+ 1883 0ba3 E2 .byte 0xe2
+ 1884 0ba4 01 .byte 0x1
+ 1885 0ba5 7B000000 .long 0x7b
+ 1886 0ba9 00000000 .quad .LFB603
+ 1886 00000000
+
GAS LISTING /tmp/ccIEtKUs.s page 41
+
+
+ 1887 0bb1 00000000 .quad .LFE603
+ 1887 00000000
+ 1888 0bb9 00000000 .long .LLST8
+ 1889 0bbd 050C0000 .long 0xc05
+ 1890 0bc1 1C .uleb128 0x1c
+ 1891 0bc2 00000000 .long .LASF312
+ 1892 0bc6 01 .byte 0x1
+ 1893 0bc7 E2 .byte 0xe2
+ 1894 0bc8 050C0000 .long 0xc05
+ 1895 0bcc 02 .byte 0x2
+ 1896 0bcd 91 .byte 0x91
+ 1897 0bce 58 .sleb128 -40
+ 1898 0bcf 20 .uleb128 0x20
+ 1899 0bd0 726300 .string "rc"
+ 1900 0bd3 01 .byte 0x1
+ 1901 0bd4 E4 .byte 0xe4
+ 1902 0bd5 7B000000 .long 0x7b
+ 1903 0bd9 02 .byte 0x2
+ 1904 0bda 91 .byte 0x91
+ 1905 0bdb 6C .sleb128 -20
+ 1906 0bdc 21 .uleb128 0x21
+ 1907 0bdd 00000000 .long .LASF313
+ 1908 0be1 210C0000 .long 0xc21
+ 1909 0be5 01 .byte 0x1
+ 1910 0be6 09 .byte 0x9
+ 1911 0be7 03 .byte 0x3
+ 1912 0be8 00000000 .quad __PRETTY_FUNCTION__.7213
+ 1912 00000000
+ 1913 0bf0 21 .uleb128 0x21
+ 1914 0bf1 00000000 .long .LASF314
+ 1915 0bf5 260C0000 .long 0xc26
+ 1916 0bf9 01 .byte 0x1
+ 1917 0bfa 09 .byte 0x9
+ 1918 0bfb 03 .byte 0x3
+ 1919 0bfc 00000000 .quad __func__.7214
+ 1919 00000000
+ 1920 0c04 00 .byte 0x0
+ 1921 0c05 07 .uleb128 0x7
+ 1922 0c06 08 .byte 0x8
+ 1923 0c07 0B0C0000 .long 0xc0b
+ 1924 0c0b 07 .uleb128 0x7
+ 1925 0c0c 08 .byte 0x8
+ 1926 0c0d AE030000 .long 0x3ae
+ 1927 0c11 22 .uleb128 0x22
+ 1928 0c12 96000000 .long 0x96
+ 1929 0c16 210C0000 .long 0xc21
+ 1930 0c1a 0D .uleb128 0xd
+ 1931 0c1b 88000000 .long 0x88
+ 1932 0c1f 1A .byte 0x1a
+ 1933 0c20 00 .byte 0x0
+ 1934 0c21 08 .uleb128 0x8
+ 1935 0c22 110C0000 .long 0xc11
+ 1936 0c26 08 .uleb128 0x8
+ 1937 0c27 110C0000 .long 0xc11
+ 1938 0c2b 22 .uleb128 0x22
+ 1939 0c2c 96000000 .long 0x96
+ 1940 0c30 3B0C0000 .long 0xc3b
+
GAS LISTING /tmp/ccIEtKUs.s page 42
+
+
+ 1941 0c34 0D .uleb128 0xd
+ 1942 0c35 88000000 .long 0x88
+ 1943 0c39 09 .byte 0x9
+ 1944 0c3a 00 .byte 0x0
+ 1945 0c3b 23 .uleb128 0x23
+ 1946 0c3c 00000000 .long .LASF315
+ 1947 0c40 01 .byte 0x1
+ 1948 0c41 3C .byte 0x3c
+ 1949 0c42 500C0000 .long 0xc50
+ 1950 0c46 09 .byte 0x9
+ 1951 0c47 03 .byte 0x3
+ 1952 0c48 00000000 .quad KNullBlockCipherVecRegaes_ncbi_name
+ 1952 00000000
+ 1953 0c50 08 .uleb128 0x8
+ 1954 0c51 2B0C0000 .long 0xc2b
+ 1955 0c55 23 .uleb128 0x23
+ 1956 0c56 00000000 .long .LASF316
+ 1957 0c5a 01 .byte 0x1
+ 1958 0c5b CE .byte 0xce
+ 1959 0c5c 6A0C0000 .long 0xc6a
+ 1960 0c60 09 .byte 0x9
+ 1961 0c61 03 .byte 0x3
+ 1962 0c62 00000000 .quad KNullBlockCipherVecReg_vt_
+ 1962 00000000
+ 1963 0c6a 08 .uleb128 0x8
+ 1964 0c6b C1020000 .long 0x2c1
+ 1965 0c6f 00 .byte 0x0
+ 1966 .section .debug_abbrev
+ 1967 0000 01 .uleb128 0x1
+ 1968 0001 11 .uleb128 0x11
+ 1969 0002 01 .byte 0x1
+ 1970 0003 25 .uleb128 0x25
+ 1971 0004 0E .uleb128 0xe
+ 1972 0005 13 .uleb128 0x13
+ 1973 0006 0B .uleb128 0xb
+ 1974 0007 03 .uleb128 0x3
+ 1975 0008 0E .uleb128 0xe
+ 1976 0009 1B .uleb128 0x1b
+ 1977 000a 0E .uleb128 0xe
+ 1978 000b 11 .uleb128 0x11
+ 1979 000c 01 .uleb128 0x1
+ 1980 000d 12 .uleb128 0x12
+ 1981 000e 01 .uleb128 0x1
+ 1982 000f 10 .uleb128 0x10
+ 1983 0010 06 .uleb128 0x6
+ 1984 0011 00 .byte 0x0
+ 1985 0012 00 .byte 0x0
+ 1986 0013 02 .uleb128 0x2
+ 1987 0014 24 .uleb128 0x24
+ 1988 0015 00 .byte 0x0
+ 1989 0016 0B .uleb128 0xb
+ 1990 0017 0B .uleb128 0xb
+ 1991 0018 3E .uleb128 0x3e
+ 1992 0019 0B .uleb128 0xb
+ 1993 001a 03 .uleb128 0x3
+ 1994 001b 0E .uleb128 0xe
+ 1995 001c 00 .byte 0x0
+
GAS LISTING /tmp/ccIEtKUs.s page 43
+
+
+ 1996 001d 00 .byte 0x0
+ 1997 001e 03 .uleb128 0x3
+ 1998 001f 24 .uleb128 0x24
+ 1999 0020 00 .byte 0x0
+ 2000 0021 0B .uleb128 0xb
+ 2001 0022 0B .uleb128 0xb
+ 2002 0023 3E .uleb128 0x3e
+ 2003 0024 0B .uleb128 0xb
+ 2004 0025 03 .uleb128 0x3
+ 2005 0026 08 .uleb128 0x8
+ 2006 0027 00 .byte 0x0
+ 2007 0028 00 .byte 0x0
+ 2008 0029 04 .uleb128 0x4
+ 2009 002a 16 .uleb128 0x16
+ 2010 002b 00 .byte 0x0
+ 2011 002c 03 .uleb128 0x3
+ 2012 002d 0E .uleb128 0xe
+ 2013 002e 3A .uleb128 0x3a
+ 2014 002f 0B .uleb128 0xb
+ 2015 0030 3B .uleb128 0x3b
+ 2016 0031 0B .uleb128 0xb
+ 2017 0032 49 .uleb128 0x49
+ 2018 0033 13 .uleb128 0x13
+ 2019 0034 00 .byte 0x0
+ 2020 0035 00 .byte 0x0
+ 2021 0036 05 .uleb128 0x5
+ 2022 0037 0F .uleb128 0xf
+ 2023 0038 00 .byte 0x0
+ 2024 0039 0B .uleb128 0xb
+ 2025 003a 0B .uleb128 0xb
+ 2026 003b 00 .byte 0x0
+ 2027 003c 00 .byte 0x0
+ 2028 003d 06 .uleb128 0x6
+ 2029 003e 24 .uleb128 0x24
+ 2030 003f 00 .byte 0x0
+ 2031 0040 0B .uleb128 0xb
+ 2032 0041 0B .uleb128 0xb
+ 2033 0042 3E .uleb128 0x3e
+ 2034 0043 0B .uleb128 0xb
+ 2035 0044 00 .byte 0x0
+ 2036 0045 00 .byte 0x0
+ 2037 0046 07 .uleb128 0x7
+ 2038 0047 0F .uleb128 0xf
+ 2039 0048 00 .byte 0x0
+ 2040 0049 0B .uleb128 0xb
+ 2041 004a 0B .uleb128 0xb
+ 2042 004b 49 .uleb128 0x49
+ 2043 004c 13 .uleb128 0x13
+ 2044 004d 00 .byte 0x0
+ 2045 004e 00 .byte 0x0
+ 2046 004f 08 .uleb128 0x8
+ 2047 0050 26 .uleb128 0x26
+ 2048 0051 00 .byte 0x0
+ 2049 0052 49 .uleb128 0x49
+ 2050 0053 13 .uleb128 0x13
+ 2051 0054 00 .byte 0x0
+ 2052 0055 00 .byte 0x0
+
GAS LISTING /tmp/ccIEtKUs.s page 44
+
+
+ 2053 0056 09 .uleb128 0x9
+ 2054 0057 04 .uleb128 0x4
+ 2055 0058 01 .byte 0x1
+ 2056 0059 0B .uleb128 0xb
+ 2057 005a 0B .uleb128 0xb
+ 2058 005b 3A .uleb128 0x3a
+ 2059 005c 0B .uleb128 0xb
+ 2060 005d 3B .uleb128 0x3b
+ 2061 005e 0B .uleb128 0xb
+ 2062 005f 01 .uleb128 0x1
+ 2063 0060 13 .uleb128 0x13
+ 2064 0061 00 .byte 0x0
+ 2065 0062 00 .byte 0x0
+ 2066 0063 0A .uleb128 0xa
+ 2067 0064 28 .uleb128 0x28
+ 2068 0065 00 .byte 0x0
+ 2069 0066 03 .uleb128 0x3
+ 2070 0067 0E .uleb128 0xe
+ 2071 0068 1C .uleb128 0x1c
+ 2072 0069 0D .uleb128 0xd
+ 2073 006a 00 .byte 0x0
+ 2074 006b 00 .byte 0x0
+ 2075 006c 0B .uleb128 0xb
+ 2076 006d 26 .uleb128 0x26
+ 2077 006e 00 .byte 0x0
+ 2078 006f 00 .byte 0x0
+ 2079 0070 00 .byte 0x0
+ 2080 0071 0C .uleb128 0xc
+ 2081 0072 01 .uleb128 0x1
+ 2082 0073 01 .byte 0x1
+ 2083 0074 8742 .uleb128 0x2107
+ 2084 0076 0C .uleb128 0xc
+ 2085 0077 49 .uleb128 0x49
+ 2086 0078 13 .uleb128 0x13
+ 2087 0079 01 .uleb128 0x1
+ 2088 007a 13 .uleb128 0x13
+ 2089 007b 00 .byte 0x0
+ 2090 007c 00 .byte 0x0
+ 2091 007d 0D .uleb128 0xd
+ 2092 007e 21 .uleb128 0x21
+ 2093 007f 00 .byte 0x0
+ 2094 0080 49 .uleb128 0x49
+ 2095 0081 13 .uleb128 0x13
+ 2096 0082 2F .uleb128 0x2f
+ 2097 0083 0B .uleb128 0xb
+ 2098 0084 00 .byte 0x0
+ 2099 0085 00 .byte 0x0
+ 2100 0086 0E .uleb128 0xe
+ 2101 0087 13 .uleb128 0x13
+ 2102 0088 01 .byte 0x1
+ 2103 0089 03 .uleb128 0x3
+ 2104 008a 0E .uleb128 0xe
+ 2105 008b 0B .uleb128 0xb
+ 2106 008c 0B .uleb128 0xb
+ 2107 008d 3A .uleb128 0x3a
+ 2108 008e 0B .uleb128 0xb
+ 2109 008f 3B .uleb128 0x3b
+
GAS LISTING /tmp/ccIEtKUs.s page 45
+
+
+ 2110 0090 0B .uleb128 0xb
+ 2111 0091 01 .uleb128 0x1
+ 2112 0092 13 .uleb128 0x13
+ 2113 0093 00 .byte 0x0
+ 2114 0094 00 .byte 0x0
+ 2115 0095 0F .uleb128 0xf
+ 2116 0096 0D .uleb128 0xd
+ 2117 0097 00 .byte 0x0
+ 2118 0098 03 .uleb128 0x3
+ 2119 0099 08 .uleb128 0x8
+ 2120 009a 3A .uleb128 0x3a
+ 2121 009b 0B .uleb128 0xb
+ 2122 009c 3B .uleb128 0x3b
+ 2123 009d 0B .uleb128 0xb
+ 2124 009e 49 .uleb128 0x49
+ 2125 009f 13 .uleb128 0x13
+ 2126 00a0 38 .uleb128 0x38
+ 2127 00a1 0A .uleb128 0xa
+ 2128 00a2 00 .byte 0x0
+ 2129 00a3 00 .byte 0x0
+ 2130 00a4 10 .uleb128 0x10
+ 2131 00a5 0D .uleb128 0xd
+ 2132 00a6 00 .byte 0x0
+ 2133 00a7 03 .uleb128 0x3
+ 2134 00a8 0E .uleb128 0xe
+ 2135 00a9 3A .uleb128 0x3a
+ 2136 00aa 0B .uleb128 0xb
+ 2137 00ab 3B .uleb128 0x3b
+ 2138 00ac 0B .uleb128 0xb
+ 2139 00ad 49 .uleb128 0x49
+ 2140 00ae 13 .uleb128 0x13
+ 2141 00af 38 .uleb128 0x38
+ 2142 00b0 0A .uleb128 0xa
+ 2143 00b1 00 .byte 0x0
+ 2144 00b2 00 .byte 0x0
+ 2145 00b3 11 .uleb128 0x11
+ 2146 00b4 17 .uleb128 0x17
+ 2147 00b5 01 .byte 0x1
+ 2148 00b6 03 .uleb128 0x3
+ 2149 00b7 0E .uleb128 0xe
+ 2150 00b8 0B .uleb128 0xb
+ 2151 00b9 0B .uleb128 0xb
+ 2152 00ba 3A .uleb128 0x3a
+ 2153 00bb 0B .uleb128 0xb
+ 2154 00bc 3B .uleb128 0x3b
+ 2155 00bd 0B .uleb128 0xb
+ 2156 00be 01 .uleb128 0x1
+ 2157 00bf 13 .uleb128 0x13
+ 2158 00c0 00 .byte 0x0
+ 2159 00c1 00 .byte 0x0
+ 2160 00c2 12 .uleb128 0x12
+ 2161 00c3 0D .uleb128 0xd
+ 2162 00c4 00 .byte 0x0
+ 2163 00c5 03 .uleb128 0x3
+ 2164 00c6 0E .uleb128 0xe
+ 2165 00c7 3A .uleb128 0x3a
+ 2166 00c8 0B .uleb128 0xb
+
GAS LISTING /tmp/ccIEtKUs.s page 46
+
+
+ 2167 00c9 3B .uleb128 0x3b
+ 2168 00ca 0B .uleb128 0xb
+ 2169 00cb 49 .uleb128 0x49
+ 2170 00cc 13 .uleb128 0x13
+ 2171 00cd 00 .byte 0x0
+ 2172 00ce 00 .byte 0x0
+ 2173 00cf 13 .uleb128 0x13
+ 2174 00d0 0D .uleb128 0xd
+ 2175 00d1 00 .byte 0x0
+ 2176 00d2 03 .uleb128 0x3
+ 2177 00d3 08 .uleb128 0x8
+ 2178 00d4 3A .uleb128 0x3a
+ 2179 00d5 0B .uleb128 0xb
+ 2180 00d6 3B .uleb128 0x3b
+ 2181 00d7 0B .uleb128 0xb
+ 2182 00d8 49 .uleb128 0x49
+ 2183 00d9 13 .uleb128 0x13
+ 2184 00da 00 .byte 0x0
+ 2185 00db 00 .byte 0x0
+ 2186 00dc 14 .uleb128 0x14
+ 2187 00dd 15 .uleb128 0x15
+ 2188 00de 01 .byte 0x1
+ 2189 00df 27 .uleb128 0x27
+ 2190 00e0 0C .uleb128 0xc
+ 2191 00e1 01 .uleb128 0x1
+ 2192 00e2 13 .uleb128 0x13
+ 2193 00e3 00 .byte 0x0
+ 2194 00e4 00 .byte 0x0
+ 2195 00e5 15 .uleb128 0x15
+ 2196 00e6 05 .uleb128 0x5
+ 2197 00e7 00 .byte 0x0
+ 2198 00e8 49 .uleb128 0x49
+ 2199 00e9 13 .uleb128 0x13
+ 2200 00ea 00 .byte 0x0
+ 2201 00eb 00 .byte 0x0
+ 2202 00ec 16 .uleb128 0x16
+ 2203 00ed 15 .uleb128 0x15
+ 2204 00ee 01 .byte 0x1
+ 2205 00ef 49 .uleb128 0x49
+ 2206 00f0 13 .uleb128 0x13
+ 2207 00f1 01 .uleb128 0x1
+ 2208 00f2 13 .uleb128 0x13
+ 2209 00f3 00 .byte 0x0
+ 2210 00f4 00 .byte 0x0
+ 2211 00f5 17 .uleb128 0x17
+ 2212 00f6 18 .uleb128 0x18
+ 2213 00f7 00 .byte 0x0
+ 2214 00f8 00 .byte 0x0
+ 2215 00f9 00 .byte 0x0
+ 2216 00fa 18 .uleb128 0x18
+ 2217 00fb 15 .uleb128 0x15
+ 2218 00fc 01 .byte 0x1
+ 2219 00fd 27 .uleb128 0x27
+ 2220 00fe 0C .uleb128 0xc
+ 2221 00ff 49 .uleb128 0x49
+ 2222 0100 13 .uleb128 0x13
+ 2223 0101 01 .uleb128 0x1
+
GAS LISTING /tmp/ccIEtKUs.s page 47
+
+
+ 2224 0102 13 .uleb128 0x13
+ 2225 0103 00 .byte 0x0
+ 2226 0104 00 .byte 0x0
+ 2227 0105 19 .uleb128 0x19
+ 2228 0106 04 .uleb128 0x4
+ 2229 0107 01 .byte 0x1
+ 2230 0108 03 .uleb128 0x3
+ 2231 0109 0E .uleb128 0xe
+ 2232 010a 0B .uleb128 0xb
+ 2233 010b 0B .uleb128 0xb
+ 2234 010c 3A .uleb128 0x3a
+ 2235 010d 0B .uleb128 0xb
+ 2236 010e 3B .uleb128 0x3b
+ 2237 010f 0B .uleb128 0xb
+ 2238 0110 01 .uleb128 0x1
+ 2239 0111 13 .uleb128 0x13
+ 2240 0112 00 .byte 0x0
+ 2241 0113 00 .byte 0x0
+ 2242 0114 1A .uleb128 0x1a
+ 2243 0115 04 .uleb128 0x4
+ 2244 0116 01 .byte 0x1
+ 2245 0117 03 .uleb128 0x3
+ 2246 0118 0E .uleb128 0xe
+ 2247 0119 0B .uleb128 0xb
+ 2248 011a 0B .uleb128 0xb
+ 2249 011b 3A .uleb128 0x3a
+ 2250 011c 0B .uleb128 0xb
+ 2251 011d 3B .uleb128 0x3b
+ 2252 011e 05 .uleb128 0x5
+ 2253 011f 01 .uleb128 0x1
+ 2254 0120 13 .uleb128 0x13
+ 2255 0121 00 .byte 0x0
+ 2256 0122 00 .byte 0x0
+ 2257 0123 1B .uleb128 0x1b
+ 2258 0124 2E .uleb128 0x2e
+ 2259 0125 01 .byte 0x1
+ 2260 0126 03 .uleb128 0x3
+ 2261 0127 0E .uleb128 0xe
+ 2262 0128 3A .uleb128 0x3a
+ 2263 0129 0B .uleb128 0xb
+ 2264 012a 3B .uleb128 0x3b
+ 2265 012b 0B .uleb128 0xb
+ 2266 012c 27 .uleb128 0x27
+ 2267 012d 0C .uleb128 0xc
+ 2268 012e 11 .uleb128 0x11
+ 2269 012f 01 .uleb128 0x1
+ 2270 0130 12 .uleb128 0x12
+ 2271 0131 01 .uleb128 0x1
+ 2272 0132 40 .uleb128 0x40
+ 2273 0133 06 .uleb128 0x6
+ 2274 0134 01 .uleb128 0x1
+ 2275 0135 13 .uleb128 0x13
+ 2276 0136 00 .byte 0x0
+ 2277 0137 00 .byte 0x0
+ 2278 0138 1C .uleb128 0x1c
+ 2279 0139 05 .uleb128 0x5
+ 2280 013a 00 .byte 0x0
+
GAS LISTING /tmp/ccIEtKUs.s page 48
+
+
+ 2281 013b 03 .uleb128 0x3
+ 2282 013c 0E .uleb128 0xe
+ 2283 013d 3A .uleb128 0x3a
+ 2284 013e 0B .uleb128 0xb
+ 2285 013f 3B .uleb128 0x3b
+ 2286 0140 0B .uleb128 0xb
+ 2287 0141 49 .uleb128 0x49
+ 2288 0142 13 .uleb128 0x13
+ 2289 0143 02 .uleb128 0x2
+ 2290 0144 0A .uleb128 0xa
+ 2291 0145 00 .byte 0x0
+ 2292 0146 00 .byte 0x0
+ 2293 0147 1D .uleb128 0x1d
+ 2294 0148 2E .uleb128 0x2e
+ 2295 0149 00 .byte 0x0
+ 2296 014a 03 .uleb128 0x3
+ 2297 014b 0E .uleb128 0xe
+ 2298 014c 3A .uleb128 0x3a
+ 2299 014d 0B .uleb128 0xb
+ 2300 014e 3B .uleb128 0x3b
+ 2301 014f 0B .uleb128 0xb
+ 2302 0150 49 .uleb128 0x49
+ 2303 0151 13 .uleb128 0x13
+ 2304 0152 11 .uleb128 0x11
+ 2305 0153 01 .uleb128 0x1
+ 2306 0154 12 .uleb128 0x12
+ 2307 0155 01 .uleb128 0x1
+ 2308 0156 40 .uleb128 0x40
+ 2309 0157 06 .uleb128 0x6
+ 2310 0158 00 .byte 0x0
+ 2311 0159 00 .byte 0x0
+ 2312 015a 1E .uleb128 0x1e
+ 2313 015b 2E .uleb128 0x2e
+ 2314 015c 01 .byte 0x1
+ 2315 015d 03 .uleb128 0x3
+ 2316 015e 0E .uleb128 0xe
+ 2317 015f 3A .uleb128 0x3a
+ 2318 0160 0B .uleb128 0xb
+ 2319 0161 3B .uleb128 0x3b
+ 2320 0162 0B .uleb128 0xb
+ 2321 0163 27 .uleb128 0x27
+ 2322 0164 0C .uleb128 0xc
+ 2323 0165 49 .uleb128 0x49
+ 2324 0166 13 .uleb128 0x13
+ 2325 0167 11 .uleb128 0x11
+ 2326 0168 01 .uleb128 0x1
+ 2327 0169 12 .uleb128 0x12
+ 2328 016a 01 .uleb128 0x1
+ 2329 016b 40 .uleb128 0x40
+ 2330 016c 06 .uleb128 0x6
+ 2331 016d 01 .uleb128 0x1
+ 2332 016e 13 .uleb128 0x13
+ 2333 016f 00 .byte 0x0
+ 2334 0170 00 .byte 0x0
+ 2335 0171 1F .uleb128 0x1f
+ 2336 0172 2E .uleb128 0x2e
+ 2337 0173 01 .byte 0x1
+
GAS LISTING /tmp/ccIEtKUs.s page 49
+
+
+ 2338 0174 3F .uleb128 0x3f
+ 2339 0175 0C .uleb128 0xc
+ 2340 0176 03 .uleb128 0x3
+ 2341 0177 0E .uleb128 0xe
+ 2342 0178 3A .uleb128 0x3a
+ 2343 0179 0B .uleb128 0xb
+ 2344 017a 3B .uleb128 0x3b
+ 2345 017b 0B .uleb128 0xb
+ 2346 017c 27 .uleb128 0x27
+ 2347 017d 0C .uleb128 0xc
+ 2348 017e 49 .uleb128 0x49
+ 2349 017f 13 .uleb128 0x13
+ 2350 0180 11 .uleb128 0x11
+ 2351 0181 01 .uleb128 0x1
+ 2352 0182 12 .uleb128 0x12
+ 2353 0183 01 .uleb128 0x1
+ 2354 0184 40 .uleb128 0x40
+ 2355 0185 06 .uleb128 0x6
+ 2356 0186 01 .uleb128 0x1
+ 2357 0187 13 .uleb128 0x13
+ 2358 0188 00 .byte 0x0
+ 2359 0189 00 .byte 0x0
+ 2360 018a 20 .uleb128 0x20
+ 2361 018b 34 .uleb128 0x34
+ 2362 018c 00 .byte 0x0
+ 2363 018d 03 .uleb128 0x3
+ 2364 018e 08 .uleb128 0x8
+ 2365 018f 3A .uleb128 0x3a
+ 2366 0190 0B .uleb128 0xb
+ 2367 0191 3B .uleb128 0x3b
+ 2368 0192 0B .uleb128 0xb
+ 2369 0193 49 .uleb128 0x49
+ 2370 0194 13 .uleb128 0x13
+ 2371 0195 02 .uleb128 0x2
+ 2372 0196 0A .uleb128 0xa
+ 2373 0197 00 .byte 0x0
+ 2374 0198 00 .byte 0x0
+ 2375 0199 21 .uleb128 0x21
+ 2376 019a 34 .uleb128 0x34
+ 2377 019b 00 .byte 0x0
+ 2378 019c 03 .uleb128 0x3
+ 2379 019d 0E .uleb128 0xe
+ 2380 019e 49 .uleb128 0x49
+ 2381 019f 13 .uleb128 0x13
+ 2382 01a0 34 .uleb128 0x34
+ 2383 01a1 0C .uleb128 0xc
+ 2384 01a2 02 .uleb128 0x2
+ 2385 01a3 0A .uleb128 0xa
+ 2386 01a4 00 .byte 0x0
+ 2387 01a5 00 .byte 0x0
+ 2388 01a6 22 .uleb128 0x22
+ 2389 01a7 01 .uleb128 0x1
+ 2390 01a8 01 .byte 0x1
+ 2391 01a9 49 .uleb128 0x49
+ 2392 01aa 13 .uleb128 0x13
+ 2393 01ab 01 .uleb128 0x1
+ 2394 01ac 13 .uleb128 0x13
+
GAS LISTING /tmp/ccIEtKUs.s page 50
+
+
+ 2395 01ad 00 .byte 0x0
+ 2396 01ae 00 .byte 0x0
+ 2397 01af 23 .uleb128 0x23
+ 2398 01b0 34 .uleb128 0x34
+ 2399 01b1 00 .byte 0x0
+ 2400 01b2 03 .uleb128 0x3
+ 2401 01b3 0E .uleb128 0xe
+ 2402 01b4 3A .uleb128 0x3a
+ 2403 01b5 0B .uleb128 0xb
+ 2404 01b6 3B .uleb128 0x3b
+ 2405 01b7 0B .uleb128 0xb
+ 2406 01b8 49 .uleb128 0x49
+ 2407 01b9 13 .uleb128 0x13
+ 2408 01ba 02 .uleb128 0x2
+ 2409 01bb 0A .uleb128 0xa
+ 2410 01bc 00 .byte 0x0
+ 2411 01bd 00 .byte 0x0
+ 2412 01be 00 .byte 0x0
+ 2413 .section .debug_pubnames,"", at progbits
+ 2414 0000 2D000000 .long 0x2d
+ 2415 0004 0200 .value 0x2
+ 2416 0006 00000000 .long .Ldebug_info0
+ 2417 000a 700C0000 .long 0xc70
+ 2418 000e 9C0B0000 .long 0xb9c
+ 2419 0012 4B4E756C .string "KNullBlockCipherVecRegMake"
+ 2419 6C426C6F
+ 2419 636B4369
+ 2419 70686572
+ 2419 56656352
+ 2420 002d 00000000 .long 0x0
+ 2421 .section .debug_aranges,"", at progbits
+ 2422 0000 2C000000 .long 0x2c
+ 2423 0004 0200 .value 0x2
+ 2424 0006 00000000 .long .Ldebug_info0
+ 2425 000a 08 .byte 0x8
+ 2426 000b 00 .byte 0x0
+ 2427 000c 0000 .value 0x0
+ 2428 000e 0000 .value 0x0
+ 2429 0010 00000000 .quad .Ltext0
+ 2429 00000000
+ 2430 0018 0C010000 .quad .Letext0-.Ltext0
+ 2430 00000000
+ 2431 0020 00000000 .quad 0x0
+ 2431 00000000
+ 2432 0028 00000000 .quad 0x0
+ 2432 00000000
+ 2433 .section .debug_str,"MS", at progbits,1
+ 2434 .LASF267:
+ 2435 0000 7263496E .string "rcInsufficient"
+ 2435 73756666
+ 2435 69636965
+ 2435 6E7400
+ 2436 .LASF284:
+ 2437 000f 72634475 .string "rcDuplicate"
+ 2437 706C6963
+ 2437 61746500
+ 2438 .LASF87:
+
GAS LISTING /tmp/ccIEtKUs.s page 51
+
+
+ 2439 001b 7263436F .string "rcCondition"
+ 2439 6E646974
+ 2439 696F6E00
+ 2440 .LASF201:
+ 2441 0027 7263456E .string "rcEncrypting"
+ 2441 63727970
+ 2441 74696E67
+ 2441 00
+ 2442 .LASF160:
+ 2443 0034 72634F70 .string "rcOpening"
+ 2443 656E696E
+ 2443 6700
+ 2444 .LASF168:
+ 2445 003e 72635065 .string "rcPersisting"
+ 2445 72736973
+ 2445 74696E67
+ 2445 00
+ 2446 .LASF206:
+ 2447 004b 72635365 .string "rcSending"
+ 2447 6E64696E
+ 2447 6700
+ 2448 .LASF200:
+ 2449 0055 72634170 .string "rcAppending"
+ 2449 70656E64
+ 2449 696E6700
+ 2450 .LASF186:
+ 2451 0061 72635369 .string "rcSignaling"
+ 2451 676E616C
+ 2451 696E6700
+ 2452 .LASF13:
+ 2453 006d 4442475F .string "DBG_BLAST"
+ 2453 424C4153
+ 2453 5400
+ 2454 .LASF242:
+ 2455 0077 72635369 .string "rcSignalSet"
+ 2455 676E616C
+ 2455 53657400
+ 2456 .LASF188:
+ 2457 0083 72634174 .string "rcAttaching"
+ 2457 74616368
+ 2457 696E6700
+ 2458 .LASF120:
+ 2459 008f 72635461 .string "rcTable"
+ 2459 626C6500
+ 2460 .LASF84:
+ 2461 0097 72634275 .string "rcBuffer"
+ 2461 66666572
+ 2461 00
+ 2462 .LASF216:
+ 2463 00a0 72634D65 .string "rcMemory"
+ 2463 6D6F7279
+ 2463 00
+ 2464 .LASF149:
+ 2465 00a9 72634C6F .string "rcLocking"
+ 2465 636B696E
+ 2465 6700
+ 2466 .LASF184:
+
GAS LISTING /tmp/ccIEtKUs.s page 52
+
+
+ 2467 00b3 72635061 .string "rcParsing"
+ 2467 7273696E
+ 2467 6700
+ 2468 .LASF213:
+ 2469 00bd 72635365 .string "rcSelf"
+ 2469 6C6600
+ 2470 .LASF106:
+ 2471 00c4 72634D65 .string "rcMetadata"
+ 2471 74616461
+ 2471 746100
+ 2472 .LASF229:
+ 2473 00cf 72634172 .string "rcArcHardLink"
+ 2473 63486172
+ 2473 644C696E
+ 2473 6B00
+ 2474 .LASF55:
+ 2475 00dd 7263436F .string "rcCont"
+ 2475 6E7400
+ 2476 .LASF237:
+ 2477 00e4 72634368 .string "rcChecksum"
+ 2477 65636B73
+ 2477 756D00
+ 2478 .LASF314:
+ 2479 00ef 5F5F6675 .string "__func__"
+ 2479 6E635F5F
+ 2479 00
+ 2480 .LASF281:
+ 2481 00f8 7263546F .string "rcTooShort"
+ 2481 6F53686F
+ 2481 727400
+ 2482 .LASF111:
+ 2483 0103 72635061 .string "rcPagemap"
+ 2483 67656D61
+ 2483 7000
+ 2484 .LASF63:
+ 2485 010d 72634170 .string "rcApp"
+ 2485 7000
+ 2486 .LASF94:
+ 2487 0113 72634669 .string "rcFileDesc"
+ 2487 6C654465
+ 2487 736300
+ 2488 .LASF233:
+ 2489 011e 72634974 .string "rcItem"
+ 2489 656D00
+ 2490 .LASF125:
+ 2491 0125 72635472 .string "rcTrie"
+ 2491 696500
+ 2492 .LASF66:
+ 2493 012c 72634C61 .string "rcLastModule_v1_0"
+ 2493 73744D6F
+ 2493 64756C65
+ 2493 5F76315F
+ 2493 3000
+ 2494 .LASF73:
+ 2495 013e 72634C61 .string "rcLastModule_v1_1"
+ 2495 73744D6F
+ 2495 64756C65
+
GAS LISTING /tmp/ccIEtKUs.s page 53
+
+
+ 2495 5F76315F
+ 2495 3100
+ 2496 .LASF224:
+ 2497 0150 72634279 .string "rcByteOrder"
+ 2497 74654F72
+ 2497 64657200
+ 2498 .LASF142:
+ 2499 015c 7263436F .string "rcConstructing"
+ 2499 6E737472
+ 2499 75637469
+ 2499 6E6700
+ 2500 .LASF310:
+ 2501 016b 4B4E756C .string "KNullBlockCipherVecRegProcessorSupport"
+ 2501 6C426C6F
+ 2501 636B4369
+ 2501 70686572
+ 2501 56656352
+ 2502 .LASF313:
+ 2503 0192 5F5F5052 .string "__PRETTY_FUNCTION__"
+ 2503 45545459
+ 2503 5F46554E
+ 2503 4354494F
+ 2503 4E5F5F00
+ 2504 .LASF9:
+ 2505 01a6 72635F74 .string "rc_t"
+ 2505 00
+ 2506 .LASF218:
+ 2507 01ab 7263466F .string "rcFormat"
+ 2507 726D6174
+ 2507 00
+ 2508 .LASF276:
+ 2509 01b4 7263556E .string "rcUnauthorized"
+ 2509 61757468
+ 2509 6F72697A
+ 2509 656400
+ 2510 .LASF156:
+ 2511 01c3 72635265 .string "rcRemoving"
+ 2511 6D6F7669
+ 2511 6E6700
+ 2512 .LASF69:
+ 2513 01ce 72634B72 .string "rcKrypto"
+ 2513 7970746F
+ 2513 00
+ 2514 .LASF147:
+ 2515 01d7 72635669 .string "rcVisiting"
+ 2515 73697469
+ 2515 6E6700
+ 2516 .LASF77:
+ 2517 01e2 72634172 .string "rcArc"
+ 2517 6300
+ 2518 .LASF52:
+ 2519 01e8 72634578 .string "rcExe"
+ 2519 6500
+ 2520 .LASF282:
+ 2521 01ee 7263546F .string "rcTooLong"
+ 2521 6F4C6F6E
+ 2521 6700
+
GAS LISTING /tmp/ccIEtKUs.s page 54
+
+
+ 2522 .LASF210:
+ 2523 01f8 52434F62 .string "RCObject"
+ 2523 6A656374
+ 2523 00
+ 2524 .LASF220:
+ 2525 0201 7263496E .string "rcInterface"
+ 2525 74657266
+ 2525 61636500
+ 2526 .LASF148:
+ 2527 020d 72635265 .string "rcResolving"
+ 2527 736F6C76
+ 2527 696E6700
+ 2528 .LASF90:
+ 2529 0219 72634469 .string "rcDirectory"
+ 2529 72656374
+ 2529 6F727900
+ 2530 .LASF2:
+ 2531 0225 6C6F6E67 .string "long int"
+ 2531 20696E74
+ 2531 00
+ 2532 .LASF178:
+ 2533 022e 72635661 .string "rcValidating"
+ 2533 6C696461
+ 2533 74696E67
+ 2533 00
+ 2534 .LASF80:
+ 2535 023b 72634172 .string "rcArgv"
+ 2535 677600
+ 2536 .LASF56:
+ 2537 0242 72634353 .string "rcCS"
+ 2537 00
+ 2538 .LASF137:
+ 2539 0247 72635572 .string "rcUri"
+ 2539 6900
+ 2540 .LASF159:
+ 2541 024d 72634372 .string "rcCreating"
+ 2541 65617469
+ 2541 6E6700
+ 2542 .LASF45:
+ 2543 0258 656E6372 .string "encrypt"
+ 2543 79707400
+ 2544 .LASF35:
+ 2545 0260 76313238 .string "v128_u8_t"
+ 2545 5F75385F
+ 2545 7400
+ 2546 .LASF18:
+ 2547 026a 4442475F .string "DBG_XML"
+ 2547 584D4C00
+ 2548 .LASF30:
+ 2549 0272 4442475F .string "DBG_MOD_COUNT"
+ 2549 4D4F445F
+ 2549 434F554E
+ 2549 5400
+ 2550 .LASF61:
+ 2551 0280 72634442 .string "rcDB"
+ 2551 00
+ 2552 .LASF239:
+
GAS LISTING /tmp/ccIEtKUs.s page 55
+
+
+ 2553 0285 7263436F .string "rcConnection"
+ 2553 6E6E6563
+ 2553 74696F6E
+ 2553 00
+ 2554 .LASF107:
+ 2555 0292 72634D67 .string "rcMgr"
+ 2555 7200
+ 2556 .LASF269:
+ 2557 0298 72635669 .string "rcViolated"
+ 2557 6F6C6174
+ 2557 656400
+ 2558 .LASF202:
+ 2559 02a3 72634465 .string "rcDecrypting"
+ 2559 63727970
+ 2559 74696E67
+ 2559 00
+ 2560 .LASF0:
+ 2561 02b0 7369676E .string "signed char"
+ 2561 65642063
+ 2561 68617200
+ 2562 .LASF5:
+ 2563 02bc 75696E74 .string "uint8_t"
+ 2563 385F7400
+ 2564 .LASF85:
+ 2565 02c4 72634368 .string "rcChar"
+ 2565 617200
+ 2566 .LASF70:
+ 2567 02cb 72635244 .string "rcRDBMS"
+ 2567 424D5300
+ 2568 .LASF179:
+ 2569 02d3 72634578 .string "rcExecuting"
+ 2569 65637574
+ 2569 696E6700
+ 2570 .LASF306:
+ 2571 02df 64656372 .string "decrypt_key"
+ 2571 7970745F
+ 2571 6B657900
+ 2572 .LASF11:
+ 2573 02eb 4442475F .string "DBG_MOD_NOT_FOUND"
+ 2573 4D4F445F
+ 2573 4E4F545F
+ 2573 464F554E
+ 2573 4400
+ 2574 .LASF166:
+ 2575 02fd 72635265 .string "rcReverting"
+ 2575 76657274
+ 2575 696E6700
+ 2576 .LASF82:
+ 2577 0309 72634261 .string "rcBarrier"
+ 2577 72726965
+ 2577 7200
+ 2578 .LASF266:
+ 2579 0313 72634578 .string "rcExhausted"
+ 2579 68617573
+ 2579 74656400
+ 2580 .LASF3:
+ 2581 031f 756E7369 .string "unsigned char"
+
GAS LISTING /tmp/ccIEtKUs.s page 56
+
+
+ 2581 676E6564
+ 2581 20636861
+ 2581 7200
+ 2582 .LASF139:
+ 2583 032d 5243436F .string "RCContext"
+ 2583 6E746578
+ 2583 7400
+ 2584 .LASF102:
+ 2585 0337 72634C6F .string "rcLock"
+ 2585 636B00
+ 2586 .LASF255:
+ 2587 033e 72634261 .string "rcBadVersion"
+ 2587 64566572
+ 2587 73696F6E
+ 2587 00
+ 2588 .LASF256:
+ 2589 034b 72634465 .string "rcDestroyed"
+ 2589 7374726F
+ 2589 79656400
+ 2590 .LASF119:
+ 2591 0357 72635374 .string "rcString"
+ 2591 72696E67
+ 2591 00
+ 2592 .LASF81:
+ 2593 0360 72634174 .string "rcAttr"
+ 2593 747200
+ 2594 .LASF103:
+ 2595 0367 72634C6F .string "rcLog"
+ 2595 6700
+ 2596 .LASF312:
+ 2597 036d 6E65775F .string "new_obj"
+ 2597 6F626A00
+ 2598 .LASF14:
+ 2599 0375 4442475F .string "DBG_KDB"
+ 2599 4B444200
+ 2600 .LASF207:
+ 2601 037d 72635072 .string "rcProcessing"
+ 2601 6F636573
+ 2601 73696E67
+ 2601 00
+ 2602 .LASF57:
+ 2603 038a 72634646 .string "rcFF"
+ 2603 00
+ 2604 .LASF311:
+ 2605 038f 5F426F6F .string "_Bool"
+ 2605 6C00
+ 2606 .LASF58:
+ 2607 0395 72634653 .string "rcFS"
+ 2607 00
+ 2608 .LASF145:
+ 2609 039a 72634163 .string "rcAccessing"
+ 2609 63657373
+ 2609 696E6700
+ 2610 .LASF263:
+ 2611 03a6 7263496E .string "rcInterrupted"
+ 2611 74657272
+ 2611 75707465
+
GAS LISTING /tmp/ccIEtKUs.s page 57
+
+
+ 2611 6400
+ 2612 .LASF271:
+ 2613 03b4 72634E6F .string "rcNotFound"
+ 2613 74466F75
+ 2613 6E6400
+ 2614 .LASF10:
+ 2615 03bf 63686172 .string "char"
+ 2615 00
+ 2616 .LASF109:
+ 2617 03c4 72634E6F .string "rcNode"
+ 2617 646500
+ 2618 .LASF28:
+ 2619 03cb 4442475F .string "DBG_AES"
+ 2619 41455300
+ 2620 .LASF240:
+ 2621 03d3 72634572 .string "rcError"
+ 2621 726F7200
+ 2622 .LASF157:
+ 2623 03db 7263436C .string "rcClearing"
+ 2623 65617269
+ 2623 6E6700
+ 2624 .LASF215:
+ 2625 03e6 72634F66 .string "rcOffset"
+ 2625 66736574
+ 2625 00
+ 2626 .LASF161:
+ 2627 03ef 7263436C .string "rcClosing"
+ 2627 6F73696E
+ 2627 6700
+ 2628 .LASF93:
+ 2629 03f9 72634669 .string "rcFile"
+ 2629 6C6500
+ 2630 .LASF122:
+ 2631 0400 72635469 .string "rcTimeout"
+ 2631 6D656F75
+ 2631 7400
+ 2632 .LASF110:
+ 2633 040a 72634E75 .string "rcNumeral"
+ 2633 6D657261
+ 2633 6C00
+ 2634 .LASF187:
+ 2635 0414 72635761 .string "rcWaiting"
+ 2635 6974696E
+ 2635 6700
+ 2636 .LASF191:
+ 2637 041e 72634650 .string "rcFPCoding"
+ 2637 436F6469
+ 2637 6E6700
+ 2638 .LASF243:
+ 2639 0429 72635369 .string "rcSize"
+ 2639 7A6500
+ 2640 .LASF228:
+ 2641 0430 72634469 .string "rcDirEntry"
+ 2641 72456E74
+ 2641 727900
+ 2642 .LASF180:
+ 2643 043b 72634875 .string "rcHuffmanCoding"
+
GAS LISTING /tmp/ccIEtKUs.s page 58
+
+
+ 2643 66666D61
+ 2643 6E436F64
+ 2643 696E6700
+ 2644 .LASF23:
+ 2645 044b 4442475F .string "DBG_KFG"
+ 2645 4B464700
+ 2646 .LASF261:
+ 2647 0453 72634275 .string "rcBusy"
+ 2647 737900
+ 2648 .LASF20:
+ 2649 045a 4442475F .string "DBG_SRA"
+ 2649 53524100
+ 2650 .LASF219:
+ 2651 0462 72635472 .string "rcTransfer"
+ 2651 616E7366
+ 2651 657200
+ 2652 .LASF17:
+ 2653 046d 4442475F .string "DBG_KFS"
+ 2653 4B465300
+ 2654 .LASF305:
+ 2655 0475 4B4E756C .string "KNullBlockCipherVecRegSetDecryptKey"
+ 2655 6C426C6F
+ 2655 636B4369
+ 2655 70686572
+ 2655 56656352
+ 2656 .LASF174:
+ 2657 0499 72635061 .string "rcPacking"
+ 2657 636B696E
+ 2657 6700
+ 2658 .LASF170:
+ 2659 04a3 7263436F .string "rcCopying"
+ 2659 7079696E
+ 2659 6700
+ 2660 .LASF177:
+ 2661 04ad 72634465 .string "rcDecoding"
+ 2661 636F6469
+ 2661 6E6700
+ 2662 .LASF150:
+ 2663 04b8 7263556E .string "rcUnlocking"
+ 2663 6C6F636B
+ 2663 696E6700
+ 2664 .LASF309:
+ 2665 04c4 4B4E756C .string "KNullBlockCipherVecRegDecrypt"
+ 2665 6C426C6F
+ 2665 636B4369
+ 2665 70686572
+ 2665 56656352
+ 2666 .LASF48:
+ 2667 04e2 4B426C6F .string "KBlockCipherVec_vt_v1"
+ 2667 636B4369
+ 2667 70686572
+ 2667 5665635F
+ 2667 76745F76
+ 2668 .LASF16:
+ 2669 04f8 4442475F .string "DBG_LEGREF"
+ 2669 4C454752
+ 2669 454600
+
GAS LISTING /tmp/ccIEtKUs.s page 59
+
+
+ 2670 .LASF151:
+ 2671 0503 72635265 .string "rcRenaming"
+ 2671 6E616D69
+ 2671 6E6700
+ 2672 .LASF302:
+ 2673 050e 75736572 .string "user_key"
+ 2673 5F6B6579
+ 2673 00
+ 2674 .LASF221:
+ 2675 0517 72634964 .string "rcId"
+ 2675 00
+ 2676 .LASF134:
+ 2677 051c 7263436D .string "rcCmd"
+ 2677 6400
+ 2678 .LASF26:
+ 2679 0522 4442475F .string "DBG_LOADLIB"
+ 2679 4C4F4144
+ 2679 4C494200
+ 2680 .LASF273:
+ 2681 052e 7263556E .string "rcUnlocked"
+ 2681 6C6F636B
+ 2681 656400
+ 2682 .LASF74:
+ 2683 0539 52434D6F .string "RCModule"
+ 2683 64756C65
+ 2683 00
+ 2684 .LASF235:
+ 2685 0542 7263456E .string "rcEncryption"
+ 2685 63727970
+ 2685 74696F6E
+ 2685 00
+ 2686 .LASF270:
+ 2687 054f 72634578 .string "rcExists"
+ 2687 69737473
+ 2687 00
+ 2688 .LASF36:
+ 2689 0558 43697068 .string "CipherVec"
+ 2689 65725665
+ 2689 6300
+ 2690 .LASF289:
+ 2691 0562 72634F70 .string "rcOpen"
+ 2691 656E00
+ 2692 .LASF275:
+ 2693 0569 72634465 .string "rcDeadlock"
+ 2693 61646C6F
+ 2693 636B00
+ 2694 .LASF212:
+ 2695 0574 72634C69 .string "rcLink"
+ 2695 6E6B00
+ 2696 .LASF199:
+ 2697 057b 7263466C .string "rcFlushing"
+ 2697 75736869
+ 2697 6E6700
+ 2698 .LASF247:
+ 2699 0586 72634E6F .string "rcNoErr"
+ 2699 45727200
+ 2700 .LASF226:
+
GAS LISTING /tmp/ccIEtKUs.s page 60
+
+
+ 2701 058e 72635461 .string "rcTag"
+ 2701 6700
+ 2702 .LASF22:
+ 2703 0594 4442475F .string "DBG_ALIGN"
+ 2703 414C4947
+ 2703 4E00
+ 2704 .LASF190:
+ 2705 059e 72634C6F .string "rcLogging"
+ 2705 6767696E
+ 2705 6700
+ 2706 .LASF283:
+ 2707 05a8 7263546F .string "rcTooBig"
+ 2707 6F426967
+ 2707 00
+ 2708 .LASF127:
+ 2709 05b1 72635665 .string "rcVector"
+ 2709 63746F72
+ 2709 00
+ 2710 .LASF162:
+ 2711 05ba 72635265 .string "rcResizing"
+ 2711 73697A69
+ 2711 6E6700
+ 2712 .LASF136:
+ 2713 05c5 72635175 .string "rcQuery"
+ 2713 65727900
+ 2714 .LASF8:
+ 2715 05cd 6C6F6E67 .string "long unsigned int"
+ 2715 20756E73
+ 2715 69676E65
+ 2715 6420696E
+ 2715 7400
+ 2716 .LASF268:
+ 2717 05df 72634578 .string "rcExcessive"
+ 2717 63657373
+ 2717 69766500
+ 2718 .LASF196:
+ 2719 05eb 72634576 .string "rcEvaluating"
+ 2719 616C7561
+ 2719 74696E67
+ 2719 00
+ 2720 .LASF133:
+ 2721 05f8 7263526E .string "rcRng"
+ 2721 6700
+ 2722 .LASF141:
+ 2723 05fe 72634361 .string "rcCasting"
+ 2723 7374696E
+ 2723 6700
+ 2724 .LASF300:
+ 2725 0608 73656C66 .string "self"
+ 2725 00
+ 2726 .LASF101:
+ 2727 060d 72634974 .string "rcIterator"
+ 2727 65726174
+ 2727 6F7200
+ 2728 .LASF49:
+ 2729 0618 4B426C6F .string "KBlockCipherVec"
+ 2729 636B4369
+
GAS LISTING /tmp/ccIEtKUs.s page 61
+
+
+ 2729 70686572
+ 2729 56656300
+ 2730 .LASF320:
+ 2731 0628 4B4E756C .string "KNullBlockCipherVecRegDestroy"
+ 2731 6C426C6F
+ 2731 636B4369
+ 2731 70686572
+ 2731 56656352
+ 2732 .LASF316:
+ 2733 0646 4B4E756C .string "KNullBlockCipherVecReg_vt_"
+ 2733 6C426C6F
+ 2733 636B4369
+ 2733 70686572
+ 2733 56656352
+ 2734 .LASF118:
+ 2735 0661 72635374 .string "rcStorage"
+ 2735 6F726167
+ 2735 6500
+ 2736 .LASF285:
+ 2737 066b 72634F75 .string "rcOutOfKDirectory"
+ 2737 744F664B
+ 2737 44697265
+ 2737 63746F72
+ 2737 7900
+ 2738 .LASF230:
+ 2739 067d 7263526F .string "rcRow"
+ 2739 7700
+ 2740 .LASF19:
+ 2741 0683 4442475F .string "DBG_VDB"
+ 2741 56444200
+ 2742 .LASF130:
+ 2743 068b 72634C61 .string "rcLastTarget_v1_0"
+ 2743 73745461
+ 2743 72676574
+ 2743 5F76315F
+ 2743 3000
+ 2744 .LASF138:
+ 2745 069d 72634C61 .string "rcLastTarget_v1_1"
+ 2745 73745461
+ 2745 72676574
+ 2745 5F76315F
+ 2745 3100
+ 2746 .LASF117:
+ 2747 06af 72635365 .string "rcSemaphore"
+ 2747 6D617068
+ 2747 6F726500
+ 2748 .LASF262:
+ 2749 06bb 7263496E .string "rcIncomplete"
+ 2749 636F6D70
+ 2749 6C657465
+ 2749 00
+ 2750 .LASF291:
+ 2751 06c8 72634E6F .string "rcNotOpen"
+ 2751 744F7065
+ 2751 6E00
+ 2752 .LASF100:
+ 2753 06d2 7263496E .string "rcIndex"
+
GAS LISTING /tmp/ccIEtKUs.s page 62
+
+
+ 2753 64657800
+ 2754 .LASF21:
+ 2755 06da 4442475F .string "DBG_XARC"
+ 2755 58415243
+ 2755 00
+ 2756 .LASF317:
+ 2757 06e3 474E5520 .string "GNU C 4.4.2"
+ 2757 4320342E
+ 2757 342E3200
+ 2758 .LASF53:
+ 2759 06ef 72635275 .string "rcRuntime"
+ 2759 6E74696D
+ 2759 6500
+ 2760 .LASF92:
+ 2761 06f9 7263586D .string "rcXmlDoc"
+ 2761 6C446F63
+ 2761 00
+ 2762 .LASF31:
+ 2763 0702 6C6F6E67 .string "long long int"
+ 2763 206C6F6E
+ 2763 6720696E
+ 2763 7400
+ 2764 .LASF173:
+ 2765 0710 7263506F .string "rcPositioning"
+ 2765 73697469
+ 2765 6F6E696E
+ 2765 6700
+ 2766 .LASF114:
+ 2767 071e 72635175 .string "rcQueue"
+ 2767 65756500
+ 2768 .LASF189:
+ 2769 0726 72634465 .string "rcDetaching"
+ 2769 74616368
+ 2769 696E6700
+ 2770 .LASF104:
+ 2771 0732 72634D44 .string "rcMD5SumFmt"
+ 2771 3553756D
+ 2771 466D7400
+ 2772 .LASF155:
+ 2773 073e 7263496E .string "rcInserting"
+ 2773 73657274
+ 2773 696E6700
+ 2774 .LASF203:
+ 2775 074a 7263436F .string "rcComparing"
+ 2775 6D706172
+ 2775 696E6700
+ 2776 .LASF265:
+ 2777 0756 7263456D .string "rcEmpty"
+ 2777 70747900
+ 2778 .LASF97:
+ 2779 075e 7263466F .string "rcFormatter"
+ 2779 726D6174
+ 2779 74657200
+ 2780 .LASF34:
+ 2781 076a 646F7562 .string "double"
+ 2781 6C6500
+ 2782 .LASF182:
+
GAS LISTING /tmp/ccIEtKUs.s page 63
+
+
+ 2783 0771 72635265 .string "rcRegistering"
+ 2783 67697374
+ 2783 6572696E
+ 2783 6700
+ 2784 .LASF71:
+ 2785 077f 72634E53 .string "rcNS"
+ 2785 00
+ 2786 .LASF214:
+ 2787 0784 72635061 .string "rcParam"
+ 2787 72616D00
+ 2788 .LASF75:
+ 2789 078c 52435461 .string "RCTarget"
+ 2789 72676574
+ 2789 00
+ 2790 .LASF315:
+ 2791 0795 4B4E756C .string "KNullBlockCipherVecRegaes_ncbi_name"
+ 2791 6C426C6F
+ 2791 636B4369
+ 2791 70686572
+ 2791 56656352
+ 2792 .LASF236:
+ 2793 07b9 72634372 .string "rcCrc"
+ 2793 6300
+ 2794 .LASF25:
+ 2795 07bf 4442475F .string "DBG_SEARCH"
+ 2795 53454152
+ 2795 434800
+ 2796 .LASF64:
+ 2797 07ca 7263584D .string "rcXML"
+ 2797 4C00
+ 2798 .LASF27:
+ 2799 07d0 4442475F .string "DBG_VFS"
+ 2799 56465300
+ 2800 .LASF32:
+ 2801 07d8 666C6F61 .string "float"
+ 2801 7400
+ 2802 .LASF158:
+ 2803 07de 72635570 .string "rcUpdating"
+ 2803 64617469
+ 2803 6E6700
+ 2804 .LASF185:
+ 2805 07e9 7263436F .string "rcConverting"
+ 2805 6E766572
+ 2805 74696E67
+ 2805 00
+ 2806 .LASF171:
+ 2807 07f6 7263436F .string "rcConcatenating"
+ 2807 6E636174
+ 2807 656E6174
+ 2807 696E6700
+ 2808 .LASF50:
+ 2809 0806 4B426C6F .string "KBlockCipher"
+ 2809 636B4369
+ 2809 70686572
+ 2809 00
+ 2810 .LASF128:
+ 2811 0813 72634479 .string "rcDylib"
+
GAS LISTING /tmp/ccIEtKUs.s page 64
+
+
+ 2811 6C696200
+ 2812 .LASF277:
+ 2813 081b 72635265 .string "rcReadonly"
+ 2813 61646F6E
+ 2813 6C7900
+ 2814 .LASF7:
+ 2815 0826 756E7369 .string "unsigned int"
+ 2815 676E6564
+ 2815 20696E74
+ 2815 00
+ 2816 .LASF278:
+ 2817 0833 72635772 .string "rcWriteonly"
+ 2817 6974656F
+ 2817 6E6C7900
+ 2818 .LASF272:
+ 2819 083f 72634C6F .string "rcLocked"
+ 2819 636B6564
+ 2819 00
+ 2820 .LASF154:
+ 2821 0848 72635072 .string "rcProjecting"
+ 2821 6F6A6563
+ 2821 74696E67
+ 2821 00
+ 2822 .LASF59:
+ 2823 0855 72635053 .string "rcPS"
+ 2823 00
+ 2824 .LASF244:
+ 2825 085a 72635265 .string "rcRefcount"
+ 2825 66636F75
+ 2825 6E7400
+ 2826 .LASF79:
+ 2827 0865 7263546F .string "rcTocEntry"
+ 2827 63456E74
+ 2827 727900
+ 2828 .LASF234:
+ 2829 0870 72634D6F .string "rcMode"
+ 2829 646500
+ 2830 .LASF293:
+ 2831 0877 7263556E .string "rcUnequal"
+ 2831 65717561
+ 2831 6C00
+ 2832 .LASF274:
+ 2833 0881 72634465 .string "rcDetached"
+ 2833 74616368
+ 2833 656400
+ 2834 .LASF280:
+ 2835 088c 7263496E .string "rcInPlaceNotAllowed"
+ 2835 506C6163
+ 2835 654E6F74
+ 2835 416C6C6F
+ 2835 77656400
+ 2836 .LASF222:
+ 2837 08a0 72635261 .string "rcRange"
+ 2837 6E676500
+ 2838 .LASF319:
+ 2839 08a8 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 2839 652F726F
+
GAS LISTING /tmp/ccIEtKUs.s page 65
+
+
+ 2839 6461726D
+ 2839 65722F73
+ 2839 72615F73
+ 2840 .LASF232:
+ 2841 08f0 72634C61 .string "rcLastObject_v1_0"
+ 2841 73744F62
+ 2841 6A656374
+ 2841 5F76315F
+ 2841 3000
+ 2842 .LASF245:
+ 2843 0902 72634C61 .string "rcLastObject_v1_1"
+ 2843 73744F62
+ 2843 6A656374
+ 2843 5F76315F
+ 2843 3100
+ 2844 .LASF198:
+ 2845 0914 72634C61 .string "rcLastContext_v1_0"
+ 2845 7374436F
+ 2845 6E746578
+ 2845 745F7631
+ 2845 5F3000
+ 2846 .LASF209:
+ 2847 0927 72634C61 .string "rcLastContext_v1_1"
+ 2847 7374436F
+ 2847 6E746578
+ 2847 745F7631
+ 2847 5F3100
+ 2848 .LASF105:
+ 2849 093a 72634D65 .string "rcMemMap"
+ 2849 6D4D6170
+ 2849 00
+ 2850 .LASF129:
+ 2851 0943 72634578 .string "rcExpression"
+ 2851 70726573
+ 2851 73696F6E
+ 2851 00
+ 2852 .LASF175:
+ 2853 0950 7263556E .string "rcUnpacking"
+ 2853 7061636B
+ 2853 696E6700
+ 2854 .LASF91:
+ 2855 095c 7263446F .string "rcDoc"
+ 2855 6300
+ 2856 .LASF12:
+ 2857 0962 4442475F .string "DBG_APP"
+ 2857 41505000
+ 2858 .LASF192:
+ 2859 096a 72634D75 .string "rcMultiplexing"
+ 2859 6C746970
+ 2859 6C657869
+ 2859 6E6700
+ 2860 .LASF194:
+ 2861 0979 72635365 .string "rcSearching"
+ 2861 61726368
+ 2861 696E6700
+ 2862 .LASF294:
+ 2863 0985 72634661 .string "rcFailed"
+
GAS LISTING /tmp/ccIEtKUs.s page 66
+
+
+ 2863 696C6564
+ 2863 00
+ 2864 .LASF259:
+ 2865 098e 7263496E .string "rcIncorrect"
+ 2865 636F7272
+ 2865 65637400
+ 2866 .LASF98:
+ 2867 099a 72634675 .string "rcFunctParam"
+ 2867 6E637450
+ 2867 6172616D
+ 2867 00
+ 2868 .LASF208:
+ 2869 09a7 72634964 .string "rcIdentifying"
+ 2869 656E7469
+ 2869 6679696E
+ 2869 6700
+ 2870 .LASF223:
+ 2871 09b5 7263436F .string "rcConstraint"
+ 2871 6E737472
+ 2871 61696E74
+ 2871 00
+ 2872 .LASF249:
+ 2873 09c2 7263556E .string "rcUnknown"
+ 2873 6B6E6F77
+ 2873 6E00
+ 2874 .LASF88:
+ 2875 09cc 72634375 .string "rcCursor"
+ 2875 72736F72
+ 2875 00
+ 2876 .LASF246:
+ 2877 09d5 52435374 .string "RCState"
+ 2877 61746500
+ 2878 .LASF47:
+ 2879 09dd 4B426C6F .string "KBlockCipherByte"
+ 2879 636B4369
+ 2879 70686572
+ 2879 42797465
+ 2879 00
+ 2880 .LASF38:
+ 2881 09ee 4B426C6F .string "KBlockCipherByte_vt_v1"
+ 2881 636B4369
+ 2881 70686572
+ 2881 42797465
+ 2881 5F76745F
+ 2882 .LASF286:
+ 2883 0a05 72634967 .string "rcIgnored"
+ 2883 6E6F7265
+ 2883 6400
+ 2884 .LASF144:
+ 2885 0a0f 72635265 .string "rcReleasing"
+ 2885 6C656173
+ 2885 696E6700
+ 2886 .LASF67:
+ 2887 0a1b 72634B46 .string "rcKFG"
+ 2887 4700
+ 2888 .LASF225:
+ 2889 0a21 72634D65 .string "rcMessage"
+
GAS LISTING /tmp/ccIEtKUs.s page 67
+
+
+ 2889 73736167
+ 2889 6500
+ 2890 .LASF172:
+ 2891 0a2b 7263466F .string "rcFormatting"
+ 2891 726D6174
+ 2891 74696E67
+ 2891 00
+ 2892 .LASF65:
+ 2893 0a38 72635352 .string "rcSRA"
+ 2893 4100
+ 2894 .LASF241:
+ 2895 0a3e 7263456E .string "rcEnvironment"
+ 2895 7669726F
+ 2895 6E6D656E
+ 2895 7400
+ 2896 .LASF33:
+ 2897 0a4c 6C6F6E67 .string "long long unsigned int"
+ 2897 206C6F6E
+ 2897 6720756E
+ 2897 7369676E
+ 2897 65642069
+ 2898 .LASF40:
+ 2899 0a63 64657374 .string "destroy"
+ 2899 726F7900
+ 2900 .LASF123:
+ 2901 0a6b 7263546F .string "rcToken"
+ 2901 6B656E00
+ 2902 .LASF183:
+ 2903 0a73 7263546F .string "rcTokenizing"
+ 2903 6B656E69
+ 2903 7A696E67
+ 2903 00
+ 2904 .LASF15:
+ 2905 0a80 4442475F .string "DBG_REF"
+ 2905 52454600
+ 2906 .LASF164:
+ 2907 0a88 72635772 .string "rcWriting"
+ 2907 6974696E
+ 2907 6700
+ 2908 .LASF140:
+ 2909 0a92 7263416C .string "rcAllocating"
+ 2909 6C6F6361
+ 2909 74696E67
+ 2909 00
+ 2910 .LASF126:
+ 2911 0a9f 72635479 .string "rcType"
+ 2911 706500
+ 2912 .LASF227:
+ 2913 0aa6 72635265 .string "rcResources"
+ 2913 736F7572
+ 2913 63657300
+ 2914 .LASF108:
+ 2915 0ab2 72634E61 .string "rcNamelist"
+ 2915 6D656C69
+ 2915 737400
+ 2916 .LASF298:
+ 2917 0abd 4B4E756C .string "KNullBlockCipherVecRegBlockSize"
+
GAS LISTING /tmp/ccIEtKUs.s page 68
+
+
+ 2917 6C426C6F
+ 2917 636B4369
+ 2917 70686572
+ 2917 56656352
+ 2918 .LASF299:
+ 2919 0add 4B4E756C .string "KNullBlockCipherVecRegKeySize"
+ 2919 6C426C6F
+ 2919 636B4369
+ 2919 70686572
+ 2919 56656352
+ 2920 .LASF292:
+ 2921 0afb 7263556E .string "rcUndefined"
+ 2921 64656669
+ 2921 6E656400
+ 2922 .LASF260:
+ 2923 0b07 7263496E .string "rcInconsistent"
+ 2923 636F6E73
+ 2923 69737465
+ 2923 6E7400
+ 2924 .LASF205:
+ 2925 0b16 72635265 .string "rcRetrieving"
+ 2925 74726965
+ 2925 76696E67
+ 2925 00
+ 2926 .LASF301:
+ 2927 0b23 656E6372 .string "encrypt_key"
+ 2927 7970745F
+ 2927 6B657900
+ 2928 .LASF46:
+ 2929 0b2f 64656372 .string "decrypt"
+ 2929 79707400
+ 2930 .LASF39:
+ 2931 0b37 76657273 .string "version"
+ 2931 696F6E00
+ 2932 .LASF217:
+ 2933 0b3f 72634E61 .string "rcName"
+ 2933 6D6500
+ 2934 .LASF254:
+ 2935 0b46 72634E75 .string "rcNull"
+ 2935 6C6C00
+ 2936 .LASF176:
+ 2937 0b4d 7263456E .string "rcEncoding"
+ 2937 636F6469
+ 2937 6E6700
+ 2938 .LASF95:
+ 2939 0b58 72634669 .string "rcFileFormat"
+ 2939 6C65466F
+ 2939 726D6174
+ 2939 00
+ 2940 .LASF132:
+ 2941 0b65 7263456E .string "rcEncryptionKey"
+ 2941 63727970
+ 2941 74696F6E
+ 2941 4B657900
+ 2942 .LASF197:
+ 2943 0b75 7263496E .string "rcInflating"
+ 2943 666C6174
+
GAS LISTING /tmp/ccIEtKUs.s page 69
+
+
+ 2943 696E6700
+ 2944 .LASF279:
+ 2945 0b81 72634E6F .string "rcNoPerm"
+ 2945 5065726D
+ 2945 00
+ 2946 .LASF167:
+ 2947 0b8a 72635265 .string "rcResetting"
+ 2947 73657474
+ 2947 696E6700
+ 2948 .LASF41:
+ 2949 0b96 626C6F63 .string "block_size"
+ 2949 6B5F7369
+ 2949 7A6500
+ 2950 .LASF115:
+ 2951 0ba1 72635257 .string "rcRWLock"
+ 2951 4C6F636B
+ 2951 00
+ 2952 .LASF146:
+ 2953 0baa 72634C69 .string "rcListing"
+ 2953 7374696E
+ 2953 6700
+ 2954 .LASF96:
+ 2955 0bb4 72634675 .string "rcFunction"
+ 2955 6E637469
+ 2955 6F6E00
+ 2956 .LASF252:
+ 2957 0bbf 7263556E .string "rcUnrecognized"
+ 2957 7265636F
+ 2957 676E697A
+ 2957 656400
+ 2958 .LASF68:
+ 2959 0bce 7263416C .string "rcAlign"
+ 2959 69676E00
+ 2960 .LASF131:
+ 2961 0bd6 72635072 .string "rcProduction"
+ 2961 6F647563
+ 2961 74696F6E
+ 2961 00
+ 2962 .LASF121:
+ 2963 0be3 72635468 .string "rcThread"
+ 2963 72656164
+ 2963 00
+ 2964 .LASF169:
+ 2965 0bec 72634672 .string "rcFreezing"
+ 2965 65657A69
+ 2965 6E6700
+ 2966 .LASF44:
+ 2967 0bf7 7365745F .string "set_decrypt_key"
+ 2967 64656372
+ 2967 7970745F
+ 2967 6B657900
+ 2968 .LASF51:
+ 2969 0c07 62797465 .string "byte"
+ 2969 00
+ 2970 .LASF37:
+ 2971 0c0c 4B426C6F .string "KBlockCipher_vt"
+ 2971 636B4369
+
GAS LISTING /tmp/ccIEtKUs.s page 70
+
+
+ 2971 70686572
+ 2971 5F767400
+ 2972 .LASF238:
+ 2973 0c1c 72635365 .string "rcSeed"
+ 2973 656400
+ 2974 .LASF195:
+ 2975 0c23 72634C6F .string "rcLoading"
+ 2975 6164696E
+ 2975 6700
+ 2976 .LASF1:
+ 2977 0c2d 73686F72 .string "short int"
+ 2977 7420696E
+ 2977 7400
+ 2978 .LASF321:
+ 2979 0c37 4B4E756C .string "KNullBlockCipherVecRegMake"
+ 2979 6C426C6F
+ 2979 636B4369
+ 2979 70686572
+ 2979 56656352
+ 2980 .LASF288:
+ 2981 0c52 72634C61 .string "rcLastState_v1_0"
+ 2981 73745374
+ 2981 6174655F
+ 2981 76315F30
+ 2981 00
+ 2982 .LASF297:
+ 2983 0c63 72634C61 .string "rcLastState_v1_1"
+ 2983 73745374
+ 2983 6174655F
+ 2983 76315F31
+ 2983 00
+ 2984 .LASF62:
+ 2985 0c74 72635644 .string "rcVDB"
+ 2985 4200
+ 2986 .LASF43:
+ 2987 0c7a 7365745F .string "set_encrypt_key"
+ 2987 656E6372
+ 2987 7970745F
+ 2987 6B657900
+ 2988 .LASF60:
+ 2989 0c8a 72635846 .string "rcXF"
+ 2989 00
+ 2990 .LASF143:
+ 2991 0c8f 72634465 .string "rcDestroying"
+ 2991 7374726F
+ 2991 79696E67
+ 2991 00
+ 2992 .LASF248:
+ 2993 0c9c 7263446F .string "rcDone"
+ 2993 6E6500
+ 2994 .LASF78:
+ 2995 0ca3 7263546F .string "rcToc"
+ 2995 6300
+ 2996 .LASF152:
+ 2997 0ca9 7263416C .string "rcAliasing"
+ 2997 69617369
+ 2997 6E6700
+
GAS LISTING /tmp/ccIEtKUs.s page 71
+
+
+ 2998 .LASF113:
+ 2999 0cb4 72635072 .string "rcProcess"
+ 2999 6F636573
+ 2999 7300
+ 3000 .LASF211:
+ 3001 0cbe 72634E6F .string "rcNoObj"
+ 3001 4F626A00
+ 3002 .LASF250:
+ 3003 0cc6 7263556E .string "rcUnsupported"
+ 3003 73757070
+ 3003 6F727465
+ 3003 6400
+ 3004 .LASF86:
+ 3005 0cd4 7263436F .string "rcColumn"
+ 3005 6C756D6E
+ 3005 00
+ 3006 .LASF251:
+ 3007 0cdd 7263556E .string "rcUnexpected"
+ 3007 65787065
+ 3007 63746564
+ 3007 00
+ 3008 .LASF6:
+ 3009 0cea 75696E74 .string "uint32_t"
+ 3009 33325F74
+ 3009 00
+ 3010 .LASF72:
+ 3011 0cf3 72635646 .string "rcVFS"
+ 3011 5300
+ 3012 .LASF24:
+ 3013 0cf9 4442475F .string "DBG_KRYPTO"
+ 3013 4B525950
+ 3013 544F00
+ 3014 .LASF307:
+ 3015 0d04 4B4E756C .string "KNullBlockCipherVecRegEncrypt"
+ 3015 6C426C6F
+ 3015 636B4369
+ 3015 70686572
+ 3015 56656352
+ 3016 .LASF296:
+ 3017 0d22 72635772 .string "rcWrongType"
+ 3017 6F6E6754
+ 3017 79706500
+ 3018 .LASF231:
+ 3019 0d2e 72634C69 .string "rcLibrary"
+ 3019 62726172
+ 3019 7900
+ 3020 .LASF264:
+ 3021 0d38 72634361 .string "rcCanceled"
+ 3021 6E63656C
+ 3021 656400
+ 3022 .LASF135:
+ 3023 0d43 72634461 .string "rcData"
+ 3023 746100
+ 3024 .LASF99:
+ 3025 0d4a 72634865 .string "rcHeader"
+ 3025 61646572
+ 3025 00
+
GAS LISTING /tmp/ccIEtKUs.s page 72
+
+
+ 3026 .LASF4:
+ 3027 0d53 73686F72 .string "short unsigned int"
+ 3027 7420756E
+ 3027 7369676E
+ 3027 65642069
+ 3027 6E7400
+ 3028 .LASF89:
+ 3029 0d66 72634461 .string "rcDatabase"
+ 3029 74616261
+ 3029 736500
+ 3030 .LASF165:
+ 3031 0d71 7263436F .string "rcCommitting"
+ 3031 6D6D6974
+ 3031 74696E67
+ 3031 00
+ 3032 .LASF193:
+ 3033 0d7e 7263436C .string "rcClassifying"
+ 3033 61737369
+ 3033 6679696E
+ 3033 6700
+ 3034 .LASF124:
+ 3035 0d8c 72635472 .string "rcTree"
+ 3035 656500
+ 3036 .LASF29:
+ 3037 0d93 4442475F .string "DBG_ARGS"
+ 3037 41524753
+ 3037 00
+ 3038 .LASF153:
+ 3039 0d9c 72635365 .string "rcSelecting"
+ 3039 6C656374
+ 3039 696E6700
+ 3040 .LASF54:
+ 3041 0da8 72635465 .string "rcText"
+ 3041 787400
+ 3042 .LASF290:
+ 3043 0daf 72634F75 .string "rcOutoforder"
+ 3043 746F666F
+ 3043 72646572
+ 3043 00
+ 3044 .LASF308:
+ 3045 0dbc 73746174 .string "state"
+ 3045 6500
+ 3046 .LASF257:
+ 3047 0dc2 7263496E .string "rcInvalid"
+ 3047 76616C69
+ 3047 6400
+ 3048 .LASF303:
+ 3049 0dcc 75736572 .string "user_key_size"
+ 3049 5F6B6579
+ 3049 5F73697A
+ 3049 6500
+ 3050 .LASF204:
+ 3051 0dda 7263496E .string "rcInitializing"
+ 3051 69746961
+ 3051 6C697A69
+ 3051 6E6700
+ 3052 .LASF83:
+
GAS LISTING /tmp/ccIEtKUs.s page 73
+
+
+ 3053 0de9 7263426C .string "rcBlob"
+ 3053 6F6200
+ 3054 .LASF181:
+ 3055 0df0 72635265 .string "rcReindexing"
+ 3055 696E6465
+ 3055 78696E67
+ 3055 00
+ 3056 .LASF76:
+ 3057 0dfd 72634E6F .string "rcNoTarg"
+ 3057 54617267
+ 3057 00
+ 3058 .LASF258:
+ 3059 0e06 7263436F .string "rcCorrupt"
+ 3059 72727570
+ 3059 7400
+ 3060 .LASF287:
+ 3061 0e10 72634F75 .string "rcOutofrange"
+ 3061 746F6672
+ 3061 616E6765
+ 3061 00
+ 3062 .LASF116:
+ 3063 0e1d 72635363 .string "rcSchema"
+ 3063 68656D61
+ 3063 00
+ 3064 .LASF112:
+ 3065 0e26 72635061 .string "rcPath"
+ 3065 746800
+ 3066 .LASF163:
+ 3067 0e2d 72635265 .string "rcReading"
+ 3067 6164696E
+ 3067 6700
+ 3068 .LASF42:
+ 3069 0e37 6B65795F .string "key_size"
+ 3069 73697A65
+ 3069 00
+ 3070 .LASF295:
+ 3071 0e40 72634E6F .string "rcNotAvailable"
+ 3071 74417661
+ 3071 696C6162
+ 3071 6C6500
+ 3072 .LASF304:
+ 3073 0e4f 4B4E756C .string "KNullBlockCipherVecRegSetEncryptKey"
+ 3073 6C426C6F
+ 3073 636B4369
+ 3073 70686572
+ 3073 56656352
+ 3074 .LASF318:
+ 3075 0e73 2F686F6D .string "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 3075 652F726F
+ 3075 6461726D
+ 3075 65722F73
+ 3075 72615F73
+ 3076 .LASF253:
+ 3077 0eaa 7263416D .string "rcAmbiguous"
+ 3077 62696775
+ 3077 6F757300
+ 3078 .ident "GCC: (GNU) 4.4.2"
+
GAS LISTING /tmp/ccIEtKUs.s page 74
+
+
+ 3079 .section .note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccIEtKUs.s page 75
+
+
+DEFINED SYMBOLS
+ *ABS*:0000000000000000 null-ncbi.c
+ /tmp/ccIEtKUs.s:13 .rodata:0000000000000000 KNullBlockCipherVecRegaes_ncbi_name
+ /tmp/ccIEtKUs.s:17 .text:0000000000000000 KNullBlockCipherVecRegDestroy
+ /tmp/ccIEtKUs.s:37 .text:000000000000000a KNullBlockCipherVecRegBlockSize
+ /tmp/ccIEtKUs.s:57 .text:0000000000000015 KNullBlockCipherVecRegKeySize
+ /tmp/ccIEtKUs.s:77 .text:0000000000000020 KNullBlockCipherVecRegSetEncryptKey
+ /tmp/ccIEtKUs.s:100 .text:0000000000000036 KNullBlockCipherVecRegSetDecryptKey
+ /tmp/ccIEtKUs.s:123 .text:000000000000004c KNullBlockCipherVecRegEncrypt
+ /tmp/ccIEtKUs.s:145 .text:0000000000000060 KNullBlockCipherVecRegDecrypt
+ /tmp/ccIEtKUs.s:167 .text:0000000000000074 KNullBlockCipherVecRegProcessorSupport
+ /tmp/ccIEtKUs.s:190 .data.rel.ro.local:0000000000000000 KNullBlockCipherVecReg_vt_
+ /tmp/ccIEtKUs.s:207 .text:000000000000007f KNullBlockCipherVecRegMake
+ /tmp/ccIEtKUs.s:269 .rodata:0000000000000050 __func__.7214
+ /tmp/ccIEtKUs.s:274 .rodata:0000000000000070 __PRETTY_FUNCTION__.7213
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/reencfile.c b/libs/krypto/reencfile.c
new file mode 100644
index 0000000..00ed4e3
--- /dev/null
+++ b/libs/krypto/reencfile.c
@@ -0,0 +1,1255 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <krypto/reencfile.h>
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/encfile-priv.h>
+#include "encfile-priv.h"
+
+#include <klib/rc.h>
+#include <klib/checksum.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/debug.h>
+#include <klib/vector.h>
+#include <klib/status.h>
+#include <kfs/file.h>
+#include <kfs/ramfile.h>
+
+#include <sysalloc.h>
+
+#include <byteswap.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <klib/out.h>
+
+#define USE_MISSING_VECTOR false
+
+/* ----------------------------------------------------------------------
+ * KReencFile
+ * Base object class for the encryption, decryption and validation of
+ * the file format defined above
+ */
+#define KFILE_IMPL KReencFile
+#include <kfs/impl.h>
+
+/* -----
+ */
+struct KReencFile
+{
+ KFile dad; /* base class */
+ const KFile * encrypted; /* encrypted file we start from */
+ const KFile * dec; /* decryptor of the original */
+ KFile * enc; /* encryptor */
+ KFile * ram; /* a file that works from a sliding window buffer */
+
+ size_t num_read;
+ size_t num_writ;
+/* block id's can not max out a 64 bit number as that is a file that is 32K times too big */
+#define NO_CURRENT_BLOCK (~(uint64_t)0)
+ uint64_t block_id;
+ uint64_t footer_block; /* if zero, still unknown */
+
+ uint64_t size; /* size as known from the original file [see known_size] */
+ bool known_size; /* is the size of the original file known? */
+
+ char plain_text [ENC_DATA_BLOCK_SIZE];
+ union
+ {
+ KEncFileBlock block;
+ char text [sizeof (KEncFileBlock)];
+ } block;
+ union
+ {
+ KEncFileFooter foot;
+ char text [sizeof (KEncFileFooter)];
+ } foot;
+
+};
+
+/* ----------------------------------------------------------------------
+ * Interface Functions
+ *
+ * Destroy
+ *
+ */
+static
+rc_t CC KReencFileDestroy (KReencFile *self)
+{
+ if (self)
+ {
+ rc_t rc1, rc2, rc3, rc4;
+
+ rc1 = KFileRelease (self->encrypted);
+ if (rc1)
+ LOGERR (klogInt, rc1, "Re-enc failed to release encrypted file");
+
+ rc2 = KFileRelease (self->dec);
+ if (rc2)
+ LOGERR (klogInt, rc2, "Re-enc failed to release decryptor");
+
+ rc3 = KFileRelease (self->ram);
+ if (rc3)
+ LOGERR (klogInt, rc3, "Re-enc failed to release ram file");
+
+ rc4 = KFileRelease (self->enc);
+ if (rc4)
+ LOGERR (klogInt, rc4, "Re-enc failed to release encryptor");
+
+ free (self);
+
+ return (rc1 ? rc1 :
+ rc2 ? rc2 :
+ rc3 ? rc3 :
+ rc4);
+ }
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ * returns an underlying system file object
+ * and starting offset to contiguous region
+ * suitable for memory mapping, or NULL if
+ * no such file is available.
+ *
+ * We do not allow this for read, write or update as you can not memory map the
+ * unencrypted file in a meaningful way.
+ */
+static
+struct KSysFile *CC KReencFileGetSysFileUnsupported (const KReencFile *self, uint64_t *offset)
+{
+ assert (self);
+ assert (offset);
+
+ return NULL;
+}
+
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ * returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KReencFileRandomAccess (const KReencFile *self)
+{
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+
+ return KFileRandomAccess (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ * returns size in bytes of file
+ *
+ * "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KReencFileSize (const KReencFile *self, uint64_t *size)
+{
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+
+ /* -----
+ * the re-encrypted file will be the same size as the
+ * previously encrypted file and we have the same understanding
+ * about knowing the size
+ */
+ return KFileSize (self->encrypted, size);
+}
+
+
+static
+rc_t CC KEncryptFileSize (const KReencFile *self, uint64_t *size)
+{
+ uint64_t z;
+ rc_t rc;
+
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+
+ /* -----
+ * the re-encrypted file will be the same size as the
+ * previously encrypted file and we have the same understanding
+ * about knowing the size
+ */
+ rc = KFileSize (self->encrypted, &z);
+
+ if (rc == 0)
+ {
+ uint64_t bid;
+
+ bid = DecryptedPos_to_BlockId (z, NULL);
+
+ *size = BlockId_to_EncryptedPos (bid + 1) + sizeof (KEncFileFooter);
+ }
+ else
+ *size = z;
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ * sets size in bytes of file
+ *
+ * "size" [ IN ] - new file size
+ */
+static
+rc_t CC KReencFileSetSizeUnsupported (KReencFile *self, uint64_t size)
+{
+ assert (self);
+
+ return RC ( rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported );
+}
+
+
+/*
+ * The next three functions do the actual Out from a KFileRead.
+ * We will only out from the header, or a footer or a single
+ * encrypted block rather than try to fully satisfy all of a
+ * KFileRead. USe KFileReadAll to get more than one part
+ *
+ * For all we have an offset within the part which is the
+ * position from the original read request for the header
+ */
+static __inline__
+rc_t KReencFileReadHeaderOut (KReencFile * self, size_t offset, void * buffer,
+ size_t bsize, size_t *num_read)
+{
+ assert (self);
+ assert (offset < sizeof (KEncFileHeader));
+ assert (buffer);
+ assert (bsize);
+ assert (num_read);
+
+ /* trim request if necessary */
+ if (offset + bsize > sizeof (KEncFileHeader))
+ bsize = sizeof (KEncFileHeader) - offset;
+
+ memcpy (buffer, self->block.text + offset, bsize);
+ self->block_id = NO_CURRENT_BLOCK;
+ *num_read = bsize;
+
+ return 0;
+}
+
+
+static __inline__
+rc_t KReencFileReadBlockOut (KReencFile * self, size_t offset, void * buffer,
+ size_t bsize, size_t * num_read)
+{
+ assert (self);
+ assert (offset < sizeof self->block);
+ assert (buffer);
+ assert (bsize);
+ assert (num_read);
+
+ if (offset + bsize > sizeof self->block)
+ bsize = sizeof self->block - offset;
+
+ memcpy (buffer, self->block.text + offset, bsize);
+ *num_read = bsize;
+
+ return 0;
+}
+
+
+static __inline__
+rc_t KReencFileReadFooterOut (KReencFile * self, size_t offset,
+ void * buffer, size_t bsize, size_t * num_read)
+{
+ /* for the footer we will copy out from the footer in self */
+
+ assert (self);
+ assert (offset < sizeof self->foot);
+ assert (buffer);
+ assert (bsize);
+ assert (num_read);
+
+/* KOutMsg ("%s: offset '%zu' bsize '%zu'",__func__,offset,bsize); */
+ if (offset + bsize > sizeof self->foot)
+ bsize = sizeof self->foot - offset;
+
+ memcpy (buffer, self->foot.text + offset, bsize);
+ self->block_id = NO_CURRENT_BLOCK;
+ *num_read = bsize;
+
+/* KOutMsg (" *num_read '%zu'\n",bsize); */
+/* { */
+/* size_t ix; */
+/* char * b = buffer; */
+/* KOutMsg ("%s:",__func__); */
+/* for (ix = 0; ix < bsize; ++ix) */
+/* KOutMsg (" %2.2x",b[ix]); */
+/* KOutMsg ("\n"); */
+
+/* } */
+ return 0;
+}
+
+
+/*
+ * Handle Read within the Encrypted file header
+ *
+ * We use a private interface into the KEncFile then
+ * the Out function below to take what we write with
+ * the Encryptor and copy it to the callers read buffer.
+ */
+static
+rc_t KReencFileReadHandleBlock (KReencFile *self,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read);
+
+static __inline__
+rc_t KReencFileReadHandleHeader (KReencFile *self,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ rc_t rc;
+
+ assert (self);
+ assert (pos < sizeof (KEncFileHeader));
+ assert (buffer);
+ assert (bsize);
+ assert (num_read);
+
+ /* added to support NCBInenc and NCBIsenc variants of KEncFile
+ * read the first block of the source file but don't write any of it
+ *
+ * If the source is stream mode only then the next block to be read is the
+ * first and this will not violate by seeking. It will just have already
+ * read the block it will want to read real soon. Likewith within a
+ * single call to KFileReadAll.
+ */
+ rc = KReencFileReadHandleBlock (self, 0, NULL, 0, NULL);
+ if (rc)
+ return rc;
+
+ /* use a private function from KEncFile to generate a header */
+ rc = KEncFileWriteHeader (self->enc);
+ if (rc)
+ LOGERR (klogErr, rc, "re-enc error generating encrypted header");
+ else
+ {
+ /*
+ * assume it worked and its the right size
+ * copy the requested portion of the header out to finish the read
+ */
+ rc = KReencFileReadHeaderOut (self, pos, buffer, bsize, num_read);
+ if (rc)
+ LOGERR (klogErr, rc, "re-enc error filling read request");
+ }
+ return rc;
+}
+
+
+/*
+ * Read the requested block form the source encrypted file
+ */
+static
+rc_t KReencFileReadABlock (KReencFile * self, uint64_t block_id)
+{
+ rc_t rc;
+
+
+/* OUTMSG (("%s: block_id %lu\n",__func__,block_id)); */
+
+ if (block_id + 1 == self->footer_block)
+ memset (self->plain_text, 0, sizeof self->plain_text);
+
+ /* -----
+ * simple call down to the decryptor to get the plain text data
+ * for this block. We will regenerate the framing when we re-encrypt
+ */
+ rc = KFileReadAll (self->dec, BlockId_to_DecryptedPos (block_id),
+ &self->plain_text, sizeof (self->plain_text),
+ &self->num_read);
+ if (rc)
+ LOGERR (klogErr, rc, "re-enc error reading a block");
+
+ /*
+ * interpret bytes read for validity
+ *
+ * zero means we hit a premature end of file where we expected a block
+ */
+ else if (self->num_read == 0)
+ {
+ /*misleading RC? */
+ rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcInsufficient);
+ LOGERR (klogErr, rc, "re-enc no block read");
+ }
+ /*
+ * less than a full block must be in the last block
+ */
+ else if (self->num_read < sizeof self->plain_text)
+ {
+/* KOutMsg ("%s: block_id '%lu'num_read '%zu' of '%zu' last_block '%lu'\n", */
+/* __func__, block_id, self->num_read, sizeof self->plain_text, */
+/* self->footer_block); */
+
+ if (block_id + 1 != self->footer_block)
+ {
+ rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcInsufficient);
+ LOGERR (klogErr, rc, "re-enc incomplete block read");
+ }
+ }
+ /*
+ * unlikely scenario, read too much
+ */
+ else if (self->num_read > sizeof self->plain_text)
+ {
+ rc = RC (rcKrypto, rcFile, rcReading, rcBuffer, rcIncorrect);
+ LOGERR (klogErr, rc, "re-enc no block read");
+ }
+ if (rc == 0)
+ self->block_id = block_id;
+ return rc;
+}
+
+
+static
+rc_t KReencFileWriteABlock (KReencFile * self, uint64_t block_id)
+{
+ rc_t rc;
+
+ /* -----
+ * simple call to encrypt an entire data section for the relevant block
+ * We send in up to 32KB of plain text which through two element KFiles will
+ * we written into a buffer back in this KFile. More data will be written
+ * to that buffer than requested here - that is the framing and also the
+ * header if the block is the first one.
+ */
+ rc = KFileWriteAll (self->enc, BlockId_to_DecryptedPos (block_id),
+ self->plain_text, self->num_read, &self->num_writ);
+
+ if (rc)
+ LOGERR (klogInt, rc, "re-enc error encrypting a block");
+
+ else if (self->num_writ != self->num_read)
+ {
+ rc = RC (rcKrypto, rcFile, rcWriting, rcFile, rcIncomplete);
+ LOGERR (klogErr, rc, "re-enc failure encrypting all of block");
+ }
+
+ /* trigger a flush */
+/* if (rc == 0) */
+/* rc = KFileWriteAll (self->enc, BlockId_to_DecryptedPos (block_id^1), */
+/* self->plain_text, self->num_read, &self->num_writ); */
+
+ return rc;
+}
+
+
+/*
+ * Add the current encrypted block to the footer statistics
+ */
+static __inline__
+rc_t KReencFileAddToFooter (KReencFile * self)
+{
+ assert (self);
+/* KOutMsg ("%s: ",__func__); */
+
+ if (self->block.block.crc != self->block.block.crc_copy)
+ {
+ rc_t rc = RC (rcKrypto, rcFile, rcReading, rcChecksum, rcInvalid);
+ LOGERR (klogInt, rc, "rc-enc block CRCs disagree");
+ return rc;
+ }
+
+ ++ self->foot.foot.block_count;
+ self->foot.foot.crc_checksum += self->block.block.crc;
+
+/* KOutMsg ("%lu %lu %lu\n",self->foot.foot.block_count,self->block.block.crc,self->foot.foot.crc_checksum); */
+ return 0;
+}
+
+
+/*
+ * Read a block from the source encrypted block and Write it which reencrypts it
+ *
+ * The new_block parameter says whether this is the first time we've seen this
+ * block. If it is we need to add data to the footer
+ */
+static
+rc_t KReencFileReencBlock (KReencFile * self, uint64_t block_id, bool new_block)
+{
+ rc_t rc;
+
+ assert (self);
+
+/* KOutMsg ("%s: %lu %lu\n", __func__, block_id, self->footer_block); */
+ assert (block_id < self->footer_block);
+ assert ((new_block == true) || (new_block == false));
+
+
+
+ rc = KReencFileReadABlock (self, block_id);
+ if (rc)
+ LOGERR (klogErr, rc, "re-enc failure to read a block");
+ else
+ {
+ if ((self->num_read == 0) || (self->num_read > sizeof (self->plain_text)))
+ {
+ rc = RC (rcFS, rcFile, rcReading, rcSize, rcIncorrect);
+ LOGERR (klogErr, rc, "Bad length on block read of encrypted file");
+ }
+ else
+ {
+ rc = KReencFileWriteABlock (self, block_id);
+ if (rc)
+ LOGERR (klogErr, rc, "re-enc failure to write a block");
+
+ else if (new_block)
+ {
+ rc = KReencFileAddToFooter (self);
+ if (rc)
+ LOGERR (klogErr, rc,
+ "re-enc failure to do block accounting");
+ }
+ }
+ }
+ return rc;
+}
+
+
+/*
+ * Handle Read within the Encrypted file footer
+ */
+static __inline__
+rc_t KReencFileReadHandleFooter (KReencFile *self,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ uint64_t block_id; /* block id for the footer gets us the start of footer */
+ size_t offset;
+ rc_t rc;
+
+/* KOutMsg ("\n\n\n%s: pos '%lu' bsize '%zu'\n",__func__,pos,bsize); */
+
+ assert (self);
+ assert (pos >= sizeof (KEncFileHeader) + sizeof self->block);
+ assert (buffer);
+ assert (bsize);
+ assert (num_read);
+
+ rc = 0;
+ block_id = EncryptedPos_to_BlockId (pos, NULL, NULL);
+
+ /* our library does not allow an empty file to be encrypted
+ * so we call that an error
+ */
+ assert (block_id > 0);
+
+ assert (block_id == self->footer_block);
+
+ offset = pos - BlockId_to_EncryptedPos (block_id);
+
+ assert (offset < sizeof self->foot);
+
+ /* if we are tying to treat this as a footer but it wasn't the next
+ * expected block mark all inbetween as missing to handle in the
+ * function just below this
+ */
+
+/* KOutMsg ("%s: self->next_block %lu\n",__func__, self->next_block); */
+
+ self->foot.foot.block_count = block_id;
+ self->foot.foot.crc_checksum = 0;
+
+ if (rc == 0)
+ {
+ uint64_t header_pos;
+
+ header_pos = BlockId_to_EncryptedPos(block_id);
+
+ assert (header_pos <= pos);
+ assert (pos - header_pos <= sizeof self->foot);
+
+ rc = KReencFileReadFooterOut (self, (size_t)(pos - header_pos),
+ buffer, bsize, num_read);
+
+/* KOutMsg ("%s: footer '%lu' '%lx'\n",__func__, */
+/* self->foot.foot.block_count, */
+/* self->foot.foot.crc_checksum); */
+
+ if (rc)
+ LOGERR (klogInt, rc, "re-enc failed to output footer");
+ }
+ return rc;
+}
+
+
+/*
+ *
+ */
+static
+rc_t KReencFileReadHandleBlock (KReencFile *self,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ rc_t rc = 0; /* we have a path where we need to check this without set */
+ uint64_t block_id; /* block id for the requeted position */
+ uint32_t offset; /* how far into the encrypted block */
+ bool new_block; /* is this the first time for this block */
+
+ /* -----
+ * figure out what block this corresponds to.
+ * the header is for this purpose part of the first block
+ * when we decide what to give the reader. We only care
+ * about which block and not whether it is in the payload
+ * or framing.
+ * This block id is not to a known to exist block. It could be
+ * to the header, the footer or past the end of the file.
+ *
+ * NOTE: This could be a pre-fetch of the first block when
+ * processing the header - it will have some funny values
+ * with just a self and all other parameters 0s.
+ * pos of zero gives block_id of 0 and the bsize of zero
+ * means we never look at the others. Thi sis to allow the
+ * (at the time this was written) new feature of two
+ * different file-signatures for encrypted files.
+ */
+ block_id = EncryptedPos_to_BlockId (pos, NULL, NULL);
+
+ if (block_id != self->block_id)
+ {
+ new_block = true;
+
+ if (rc == 0)
+ {
+ /* read requested block */
+ rc = KReencFileReencBlock (self, block_id, new_block);
+ if (rc)
+ {
+ LOGERR (klogErr, rc,
+ "re-enc failure re-encryptinng a requested block");
+ }
+ }
+ }
+ if ((rc == 0) && (bsize > 0))
+ {
+ /* satisfy read request
+ *
+ * if we are here we decrypted and re-encrypted the
+ * expected block
+ */
+ offset = pos - BlockId_to_EncryptedPos (block_id);
+ rc = KReencFileReadBlockOut (self, offset, buffer, bsize, num_read);
+ if (rc)
+ LOGERR (klogErr, rc, "re-enc error copying out from block");
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Read
+ * read file from known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually read
+ */
+static
+rc_t CC KReencFileReadUnsupported (const KReencFile *self,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ assert (self);
+ assert (buffer);
+ assert (bsize);
+ assert (num_read);
+
+ return RC ( rcFS, rcFile, rcReading, rcFunction, rcUnsupported );
+}
+
+
+/*
+ * Read will often return only a partial read.
+ *
+ * We take the less complex route here and return only from the header, a
+ * single block or the footer, whatever is at the beginning of the requested
+ * region.
+ */
+static
+rc_t CC KReencFileRead (const KReencFile *self_,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ /* make it all mutable and stop using self_ */
+ KReencFile * self = (KReencFile *)self_;
+ rc_t rc = 0;
+
+ assert (self);
+ assert (buffer);
+ assert (bsize);
+ assert (num_read);
+
+ *num_read = 0;
+
+ /* -----
+ * the size of the re-encrypted file will be the same as the size of the
+ * previously encrypted file so we can bail early if we know we can.
+ *
+ * The initial use case is that the file will just be lying out on disk
+ * and a KSysfile so that we do know the size.
+ *
+ * There are three pieces to an encrypted file:
+ * 1 Header
+ * 2 One or More Blocks
+ * 3 Footer
+ *
+ * We will only know if we are in the footer if we already know the size of
+ * the file. Else we have to find the footer by not finding a block when we
+ * try to read it. We'll thus look for the header first, then the footer else
+ * we try to find a block,
+ */
+
+ /* Header */
+ if (pos < sizeof (KEncFileHeader))
+ rc = KReencFileReadHandleHeader (self, pos, buffer, bsize, num_read);
+
+ /* if past the whole encrypted file */
+ else if (pos >= self->size)
+ rc = 0;
+
+ /* Footer */
+ else if (pos >= self->size - sizeof self->foot)
+ rc = KReencFileReadHandleFooter (self, pos, buffer, bsize, num_read);
+
+ /* Blocks */
+ else
+ rc = KReencFileReadHandleBlock (self, pos, buffer, bsize, num_read);
+
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ * write file at known position
+ *
+ * "pos" [ IN ] - starting position within file
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ *
+ * Unsupported as we now treat archives as READ ONLY
+ */
+static
+rc_t CC KReencFileWriteUnsupported (KReencFile *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *num_writ)
+{
+ rc_t rc = RC (rcFS, rcFile, rcReading, rcFunction, rcUnsupported);
+
+ assert (self);
+ assert (buffer);
+ assert (bsize);
+ assert (num_writ);
+
+ assert (false);
+
+ LOGERR (klogInt, rc, "KFileRead failed to filter call");
+
+ return rc;
+}
+
+static
+rc_t CC KReencFileWrite (KReencFile *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *num_writ)
+{
+ assert (self);
+ assert (buffer);
+ assert (bsize);
+ assert (num_writ);
+
+ assert (REENCFILE_WRITE_SUPPORTED);
+
+ /* this needs to be finished before we can support Write open */
+
+ return KReencFileWriteUnsupported (self, pos, buffer, bsize, num_writ);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Type
+ * returns a KFileDesc
+ * not intended to be a content type,
+ * but rather an implementation class
+ */
+static
+uint32_t CC KReencFileType (const KReencFile *self)
+{
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+
+ return KFileType (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KReencFileMake
+ * create a new file object
+ */
+
+
+/* ----------
+ * MakeParamValidate
+ * common parameter validation for both reencryptors
+ */
+static
+rc_t KReencFileMakeParamValidate (const KFile ** pself, const KFile * encrypted,
+ const KKey * deckey, const KKey * enckey)
+{
+ rc_t rc = 0;
+
+ do
+ {
+ if (pself == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+ LOGERR (klogErr, rc,
+ "pointer to self NULL when creating "
+ "a re-encryptor");
+ break;
+ }
+
+ *pself = NULL;
+
+ if (encrypted == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+ LOGERR (klogErr, rc,
+ "encrypted file not supplied when creating "
+ "an encryptor/decryptor");
+ break;
+ }
+
+ if ((enckey == NULL) || (deckey == NULL))
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+ LOGERR (klogErr, rc,
+ "key not supplied when creating a re-encryptor");
+ break;
+ }
+
+ switch (deckey->type)
+ {
+ default:
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+ PLOGERR (klogErr,
+ (klogErr, rc, "invalid key type '$(T)' should be "
+ "kkeyAES128(1), kkeyAES192(2) or kkeyAES256(3)",
+ "T=%u", deckey->type));
+ break;
+
+ case kkeyAES128:
+ case kkeyAES192:
+ case kkeyAES256:
+ break;
+ }
+ switch (enckey->type)
+ {
+ default:
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+ PLOGERR (klogErr,
+ (klogErr, rc, "invalid key type '$(T)' should be "
+ "kkeyAES128(1), kkeyAES192(2) or kkeyAES256(3)",
+ "T=%u", enckey->type));
+ break;
+
+ case kkeyAES128:
+ case kkeyAES192:
+ case kkeyAES256:
+ break;
+ }
+ } while (0);
+ return rc;
+}
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+static const KFile_vt_v1 vtKReencFileRead =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KReencFileDestroy,
+ KReencFileGetSysFileUnsupported,
+ KReencFileRandomAccess,
+ KReencFileSize,
+ KReencFileSetSizeUnsupported,
+ KReencFileRead,
+ KReencFileWriteUnsupported,
+
+ /* 1.1 */
+ KReencFileType
+};
+
+
+LIB_EXPORT rc_t CC KReencFileMakeRead (const KFile ** pself,
+ const KFile * encrypted,
+ const KKey * deckey,
+ const KKey * enckey)
+{
+ KReencFile * self;
+ uint64_t size;
+ uint64_t block_count;
+ rc_t rc;
+
+ rc = KReencFileMakeParamValidate (pself, encrypted, deckey, enckey);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "error constructing decryptor");
+ return rc;
+ }
+
+ rc = KFileSize (encrypted, &size);
+ if (GetRCState (rc) == rcUnsupported)
+ {
+ size = 0;
+ rc = RC (rcKrypto, rcFile, rcConstructing, rcSize, rcUnsupported);
+ LOGERR (klogErr, rc, "Can't re-encrypt files that don't support KFileSize");
+ return rc;
+ }
+
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "Unable to attempt to size encrypted file for reencryption");
+ return rc;
+ }
+
+ rc = KFileAddRef (encrypted);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "Unable to add reference to encrypted file for re-encryptor");
+ return rc;
+ }
+
+ if (size == 0)
+ {
+ *pself = encrypted;
+ return rc;
+ }
+ if (size < sizeof (KEncFileHeader) + sizeof (KEncFileBlock) + sizeof (KEncFileFooter))
+ {
+ rc = RC (rcKrypto, rcFile, rcConstructing, rcSize, rcTooShort);
+ LOGERR (klogErr, rc, "encrypted file too short to be valied for re-encryption");
+ KFileRelease (encrypted);
+ return rc;
+ }
+
+ {
+ uint64_t temp;
+
+ temp = size - (sizeof (KEncFileHeader) + sizeof (KEncFileFooter));
+ block_count = temp / sizeof (KEncFileBlock);
+ if ((block_count * sizeof (KEncFileBlock)) != temp)
+ {
+ rc = RC (rcKrypto, rcFile, rcConstructing, rcSize, rcInvalid);
+ LOGERR (klogErr, rc, "encrypted file invalid size for re-encryption");
+ KFileRelease (encrypted);
+ return rc;
+ }
+ }
+
+ self = calloc (1,sizeof (*self));
+
+ if (self == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+ LOGERR (klogSys, rc,
+ "out of memory creating encrypter and/or decryptor");
+ }
+ else
+ {
+ rc = KFileInit (&self->dad, (const KFile_vt*)&vtKReencFileRead, "KReencFile", "no-name", true, false);
+ if (rc)
+ LOGERR (klogInt, rc, "failed in initialize reenc base class");
+ else
+ {
+ self->encrypted = encrypted;
+ /* dec, enc, ram need to be Make */
+ /* num_read, num_write stay 0 */
+ self->block_id = NO_CURRENT_BLOCK;
+ /* missing needs to be Made */
+ /* next_block stays 0 */
+ /* seek_block stays 0 - obsolete */
+ self->footer_block = EncryptedPos_to_BlockId (size, NULL, NULL);
+ self->size = size;
+ self->known_size = true; /* obsolete */
+ /* plain_text and block stay 0 */
+ self->foot.foot.block_count = self->footer_block;
+
+ rc = KEncFileMakeRead (&self->dec, encrypted, deckey);
+ if (rc)
+ LOGERR (klogErr, rc, "Failed to create re-enc decryptor");
+
+ else
+ {
+ rc = KRamFileMakeUpdate (&self->ram, self->block.text,
+ sizeof self->block.text);
+ if (rc)
+ LOGERR (klogErr, rc,
+ "Failed to create re-enc encryptor");
+ else
+ {
+
+ rc = KEncFileMakeWriteBlock (&self->enc, self->ram, enckey);
+ if (rc)
+ LOGERR (klogErr, rc,
+ "Failed to create RAM file for reenc");
+ else
+ {
+ *pself = &self->dad;
+ return 0;
+ }
+ KFileRelease (self->ram);
+ }
+ KFileRelease (self->dec);
+ }
+ }
+ free (self);
+ }
+ KFileRelease (encrypted);
+ return rc;
+}
+
+
+static const KFile_vt_v1 vtKEncryptFileRead =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KReencFileDestroy,
+ KReencFileGetSysFileUnsupported,
+ KReencFileRandomAccess,
+ KEncryptFileSize,
+ KReencFileSetSizeUnsupported,
+ KReencFileRead,
+ KReencFileWriteUnsupported,
+
+ /* 1.1 */
+ KReencFileType
+};
+
+
+LIB_EXPORT rc_t CC KEncryptFileMakeRead (const KFile ** pself,
+ const KFile * encrypted,
+ const KKey * enckey)
+{
+ KReencFile * self;
+ uint64_t rawsize;
+ uint64_t size;
+ uint64_t max_block;
+ rc_t rc;
+
+ rc = KReencFileMakeParamValidate (pself, encrypted, enckey, enckey);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "error constructing decryptor");
+ return rc;
+ }
+
+ rc = KFileSize (encrypted, &rawsize);
+ if (GetRCState (rc) == rcUnsupported)
+ {
+ size = 0;
+ rc = RC (rcKrypto, rcFile, rcConstructing, rcSize, rcUnsupported);
+ LOGERR (klogErr, rc, "Can't encrypt files that don't support KFileSize");
+ return rc;
+ }
+
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "Unable to attempt to size encrypted file for encryption");
+ return rc;
+ }
+
+ rc = KFileAddRef (encrypted);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "Unable to add reference to unencrypted file for encryptor");
+ return rc;
+ }
+
+ if (rawsize == 0)
+ {
+ *pself = encrypted;
+ return rc;
+ }
+
+ self = calloc (1,sizeof (*self));
+
+ if (self == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+ LOGERR (klogSys, rc,
+ "out of memory creating encrypter and/or decryptor");
+ }
+ else
+ {
+ rc = KFileInit (&self->dad, (const KFile_vt*)&vtKEncryptFileRead, "KEncryptFile", "no-path", true, false);
+ if (rc)
+ LOGERR (klogInt, rc, "failed in initialize reenc base class");
+ else
+ {
+ self->encrypted = encrypted;
+ /* dec, enc, ram need to be made below */
+ /* num_read, num_write stay 0 */
+ self->block_id = NO_CURRENT_BLOCK;
+ /* missing needs to be Made */
+ /* next_block stays 0 */
+ /* seek_block stays 0 - obsolete */
+ max_block = DecryptedPos_to_BlockId (rawsize, NULL);
+ self->footer_block = max_block + 1;
+ size = BlockId_to_EncryptedPos (self->footer_block) + sizeof (KEncFileFooter);
+ self->size = size;
+ self->known_size = true; /* obsolete */
+
+ /* plain_text and block stay 0 */
+ self->foot.foot.block_count = self->footer_block;
+
+ rc = KFileAddRef (self->dec = encrypted);
+ if (rc)
+ LOGERR (klogErr, rc, "Unable to add reference to unencrypted file for encryptor");
+
+ else
+ {
+ rc = KRamFileMakeUpdate (&self->ram, self->block.text,
+ sizeof self->block.text);
+ if (rc)
+ LOGERR (klogErr, rc,
+ "Failed to create ram file for encryptor");
+ else
+ {
+
+ rc = KEncFileMakeWriteBlock (&self->enc, self->ram, enckey);
+ if (rc)
+ LOGERR (klogErr, rc,
+ "Failed to create RAM file for enc");
+ else
+ {
+ *pself = &self->dad;
+ return 0;
+ }
+ KFileRelease (self->ram);
+ }
+ KFileRelease (self->dec);
+ }
+ }
+ free (self);
+ }
+ KFileRelease (encrypted);
+ return rc;
+}
+
+
+/* ----------
+ * Write mode re-encrypted file
+ */
+static const KFile_vt_v1 vtKReencFileWrite =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KReencFileDestroy,
+ KReencFileGetSysFileUnsupported,
+ KReencFileRandomAccess,
+ KReencFileSize,
+ KReencFileSetSizeUnsupported,
+ KReencFileReadUnsupported,
+ KReencFileWrite,
+
+ /* 1.1 */
+ KReencFileType
+};
+
+
+LIB_EXPORT rc_t CC KReencFileMakeWrite (KFile ** pself,
+ KFile * encrypted,
+ const KKey * deckey,
+ const KKey * enckey)
+{
+#if REENCFILE_WRITE_SUPPORTED
+ KReencFile * self;
+ rc_t rc;
+
+ rc = KFileSetSize (encrypted, 0);
+#if 0
+ if (rc)
+ LOGERR (klogWarn, rc, "error truncating output file - "
+ "corrupted file might result");
+#endif
+
+ rc = KReencFileMakeParamValidate (&self, encrypted, deckey, enckey,
+ &vtKEncFileWrite, true);
+ if (rc)
+ LOGERR (klogErr, rc, "error creating encryptor");
+ else
+ *pself = &self->dad;
+ return rc;
+#else
+ return RC ( rcFS, rcFile, rcCreating, rcFunction, rcUnsupported );
+#endif
+}
+
+
+/* end of file reencfile.c */
+
+
diff --git a/libs/krypto/rng-impl.h b/libs/krypto/rng-impl.h
new file mode 100644
index 0000000..04b3418
--- /dev/null
+++ b/libs/krypto/rng-impl.h
@@ -0,0 +1,91 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kryptoimpl_
+#define _h_kryptoimpl_
+
+#include <klib/rc.h>
+#include <klib/refcount.h>
+#include <atomic.h>
+#include <krypto/rng.h>
+#include "rng-priv.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+typedef union KRng_vt KRng_vt;
+
+
+
+
+#ifndef KRNG_IMPL
+#define KRNG_IMPL KRng
+#endif
+
+typedef struct KRng_vt_v1 KRng_vt_v1;
+struct KRng_vt_v1
+{
+ /* version == 1.x */
+ uint32_t maj;
+ uint32_t min;
+
+ /* start minor version == 0 */
+ rc_t (CC * destroy) (KRNG_IMPL * self);
+ rc_t (CC * seed) (KRNG_IMPL * self);
+ rc_t (CC * reseed) (KRNG_IMPL * self, const void * buff, size_t buff_size);
+ rc_t (CC * read) (const KRNG_IMPL *self, void * buff, uint32_t buff_len,
+ uint32_t * num_read);
+ /* end minor version == 0 */
+ /* start minor version == 1 */
+ /* end minor version == 1 */
+ /* end version == 1.x */
+};
+
+union KRng_vt
+{
+ KRng_vt_v1 v1;
+};
+
+static
+rc_t KRngInit (KRng * self, union KRng_vt * vt, const char * type)
+{
+ self->vt = vt;
+ KRefcountInit (&self->refcount, 1, "KRng", "Init", type);
+ return 0;
+}
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kryptoimpl_ */
diff --git a/build/STATIC b/libs/krypto/rng-priv.h
similarity index 100%
rename from build/STATIC
rename to libs/krypto/rng-priv.h
diff --git a/libs/krypto/rng.c b/libs/krypto/rng.c
new file mode 100644
index 0000000..f19c4f9
--- /dev/null
+++ b/libs/krypto/rng.c
@@ -0,0 +1,120 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <krypto/extern.h>
+#include <krypto/rng.h>
+#include <krypto/rng-impl.h>
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <klib/refcount.h>
+
+#include <stdlib.h>
+#include <assert.h>
+
+LIB_EXPORT rc_t CC KRngAddRef (const KRng * self)
+{
+ if (self) switch (KRefcountAdd (&self->refcount, "KRng"))
+ {
+ case krefLimit:
+ return RC (rcRuntime, rcNoTarg, rcAttaching, rcRange, rcExcessive);
+ }
+
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC KRngRelease (const KRng * self)
+{
+ if (self) switch (KRefcountDrop (&self->refcount, "KRng"))
+ {
+ case krefWhack:
+ switch (self->vt->v1.maj)
+ {
+ case 1:
+ return (self->vt->v1.destroy ((KRng*)self));
+ }
+ return RC (rcKrypto, rcRng, rcAccessing, rcSelf, rcBadVersion);
+ }
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC KRngSeed (KRng * self)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcRng, rcReading, rcSelf, rcNull);
+
+ switch (self->vt->v1.maj)
+ {
+ case 1:
+ return (self->vt->v1.seed (self));
+ }
+ return RC (rcKrypto, rcRng, rcAccessing, rcSelf, rcBadVersion);
+}
+
+
+LIB_EXPORT rc_t CC KRngReseed (KRng * self, void * buffer, size_t bsize)
+{
+ if (self == NULL)
+ return RC (rcKrypto, rcRng, rcReading, rcSelf, rcNull);
+ if (buffer == NULL)
+ return RC (rcKrypto, rcRng, rcReading, rcBuffer, rcNull);
+
+ switch (self->vt->v1.maj)
+ {
+ case 1:
+ return (self->vt->v1.reseed (self, buffer, bsize));
+ }
+ return RC (rcKrypto, rcRng, rcAccessing, rcSelf, rcBadVersion);
+}
+
+LIB_EXPORT rc_t CC KRngRead (const KRng * self, void * buffer, uint32_t bsize, uint32_t * num_read)
+{
+ if (num_read == NULL)
+ return RC (rcKrypto, rcRng, rcReading, rcParam, rcNull);
+ *num_read = 0;
+ if (self == NULL)
+ return RC (rcKrypto, rcRng, rcReading, rcSelf, rcNull);
+ if (buffer == NULL)
+ return RC (rcKrypto, rcRng, rcReading, rcBuffer, rcNull);
+
+ switch (self->vt->v1.maj)
+ {
+ case 1:
+ return (self->vt->v1.read (self, buffer, bsize, num_read));
+ }
+ return RC (rcKrypto, rcRng, rcAccessing, rcSelf, rcBadVersion);
+}
+
+LIB_EXPORT rc_t CC KRngInit (KRng * self, union KRng_vt * vt, const char * type)
+{
+ self->vt = vt;
+ KRefcountInit (&self->refcount, 1, "KRng", "Init", type);
+ return 0;
+}
+
+
diff --git a/libs/krypto/testcipher.c b/libs/krypto/testcipher.c
new file mode 100644
index 0000000..d23257f
--- /dev/null
+++ b/libs/krypto/testcipher.c
@@ -0,0 +1,76 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include <krypto/cipher-test.h>
+#include "cipher-priv.h"
+#include <klib/rc.h>
+
+
+KRYPTO_EXTERN
+rc_t KCipherTestVecAesNiMake (struct KCipher ** new_cipher, kcipher_type type)
+{
+ if (new_cipher == NULL)
+ return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+ else
+ return KCipherVecAesNiMake (new_cipher, type);
+}
+
+
+KRYPTO_EXTERN
+rc_t KCipherTestVecRegMake (struct KCipher ** new_cipher, kcipher_type type)
+{
+ if (new_cipher == NULL)
+ return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+ else
+ return KCipherVecRegMake (new_cipher, type);
+}
+
+
+KRYPTO_EXTERN
+rc_t KCipherTestVecMake (struct KCipher ** new_cipher, kcipher_type type)
+{
+ if (new_cipher == NULL)
+ return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+ else
+ return KCipherVecMake (new_cipher, type);
+}
+
+
+KRYPTO_EXTERN
+rc_t KCipherTestByteMake (struct KCipher ** new_cipher, kcipher_type type)
+{
+ if (new_cipher == NULL)
+ return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+ else
+ return KCipherByteMake (new_cipher, type);
+}
+
+
diff --git a/libs/krypto/wgaencrypt.c b/libs/krypto/wgaencrypt.c
new file mode 100644
index 0000000..5844ca9
--- /dev/null
+++ b/libs/krypto/wgaencrypt.c
@@ -0,0 +1,1254 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+#include <krypto/cipher.h>
+#include <krypto/ciphermgr.h>
+
+#include <krypto/wgaencrypt.h>
+
+#include <kfs/file.h>
+#include <kfs/countfile.h>
+#include <kfs/md5.h>
+#include <kfs/buffile.h>
+#include <kfs/nullfile.h>
+
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/checksum.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+
+#include <sysalloc.h>
+
+#include <strtol.h>
+
+#include <time.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <os-native.h> /* strncasecmp on Windows */
+
+/* retain errors in encryption to be compatible with C++ */
+#define RETAINED_COMPATIBILTY_WITH_ERROR 1
+
+
+#define WGA_AES_BITS (256)
+#define ECB_BYTES (16)
+#define DEFAULT_BUFF_SIZE (32*1024)
+
+
+#define DEBUG_STS(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_STS),msg)
+#define DEBUG_CFG(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_CFG_,msg)
+#define DEBUG_ENCRYPT(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_ENCRYPT_,msg)
+#define DEBUG_DECRYPT(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_DECRYPT_,msg)
+
+static
+void CalcMD5 (void * buffer, size_t size, char hexstr [32])
+{
+ static const char to_hex[16] = "0123456789abcdef";
+ MD5State state;
+ uint8_t digest [16];
+ uint8_t * bin;
+ char * hex;
+ int ix;
+
+ MD5StateInit (&state);
+ MD5StateAppend (&state, buffer, size);
+ MD5StateFinish (&state, digest);
+
+ bin = digest;
+ hex = hexstr;
+
+ for (ix = 0; ix < sizeof digest; ++ix)
+ {
+ uint8_t upper;
+ uint8_t lower;
+
+ upper = *bin++;
+ lower = upper & 0xF;
+ upper >>= 4;
+
+ *hex++ = to_hex [upper];
+ *hex++ = to_hex[lower];
+ }
+}
+
+
+/* ----------------------------------------------------------------------
+ * KWGAEncFileMagic is extracted from
+ * internal/WGA/access_countrol/src/wga/fuse/enc_reader.[ch]pp
+ *
+ * the size 9 is not commented on but appears to be the size of ASCIZ
+ * that is the 'magic' pattern including the NUL.
+ *
+ * There is no version number in the header and that NUL could be turned
+ * into a single byte version.
+ */
+typedef char KWGAEncFileMagic [9];
+static const KWGAEncFileMagic ncbi_crypt_magic = "NeCnBcIo";
+
+/* ----------------------------------------------------------------------
+ * Some values are stored in the encrypted file header using an odd radix 33
+ */
+#define KWGA_ENC_FILE_HEADER_RADIX (33)
+
+static
+const char KWGAEncFileHeaderAlphabet[] = "0123456789abcdefghijklmnopqrstuvwxyz";
+
+
+/* ----------------------------------------------------------------------
+ * KWGAEncFileHeader is extracted from
+ * internal/WGA/access_countrol/src/wga/fuse/enc_reader.[ch]pp
+ *
+ * There is no version number in this header; see the comment about KWGAEncFileMagic
+ */
+typedef uint8_t FER_ENCODING;
+enum
+{
+ fer_encDES,
+ fer_encBLF,
+ fer_encAES
+};
+
+typedef struct KWGAEncFileHeader
+{
+ char magic [9]; /* "NeCnBcIo" -- NUL could be turned into a version */ /* 00 */
+ char block_sz [8]; /* radixx33 encoded: block size in bytes / usually 4096 */ /* 09 */
+ char file_sz [16]; /* radixx33 encoded: total size of unencrypted file */ /* 11 */
+ char mtime [8]; /* radixx33 encoded: 32 bit time_t */ /* 21 */
+ char fer_enc; /* see FER_ENCODING */ /* 29 */
+ char md5_here; /* bool if non zero, the whole file MD5 is below */ /* 2A */
+ char md5 [32]; /* whole file MD5 is ASCII hex */ /* 2B */
+ char md51 [32]; /* first block MD5 */ /* 4B */
+ char reserved [21]; /* 6B */
+} KWGAEncFileHeader; /* 80 */
+
+/* Original definition is in internal/WGA/access_countrol/src/wga/fuse/enc_reader.hpp */
+static const int8_t header_table[sizeof (KWGAEncFileHeader)] =
+{
+ 101, -6, -23, 5, -93, 20, -128, -36, /* 00 */
+ -42, 74, -98, 104, 42, 12, 127, 37, /* 08 */
+ -47, -61, 124, 54, -124, -94, 47, 72, /* 10 */
+ 70, 17, -10, 108, 8, 31, 37, -38, /* 18 */
+ 104, -6, -117, 79, 115, 89, 33, -93, /* 20 */
+ -47, -105, -87, -38, 90, -45, -59, -46, /* 28 */
+ -96, 106, 15, -87, -110, -101, 106, -117, /* 30 */
+ 39, 73, 120, -30, -63, 21, 127, -32, /* 38 */
+ 98, -104, -3, -81, -60, -120, 13, -108, /* 40 */
+ -53, 88, 123, 7, 103, 32, -14, -113, /* 48 */
+ -68, -27, 44, 109, -122, -7, 81, -13, /* 50 */
+ 64, 42, -88, -37, -1, -19, 66, -105, /* 58 */
+ -75, -108, -5, -121, -86, 47, -120, -18, /* 60 */
+ -69, -29, -68, 124, -53, -104, -28, 42, /* 68 */
+ 120, 52, -80, -23, -110, -101, 106, -117, /* 70 */
+ -21, -35, 12, -117, 9, -122, -21, 31 /* 78 */
+}; /* 80 */
+
+static const KWGAEncFileHeader header_const =
+{
+ "NeCnBcIo", /* NUL terminator is significant */
+ {0},{0},{0},/* not constant */
+ fer_encAES, /* constant as DES and Blowfish are not implmented */
+ 0,{0},{0}, /* not constant */
+ {0} /* constant */
+};
+
+/* the header is obscured by XOR against a predefined pattern */
+static
+void KWGAEncFileHeaderDecrypt (KWGAEncFileHeader * header)
+{
+ size_t ix;
+ int8_t * p = (int8_t*)header;
+
+ assert (header);
+ for (ix = 0; ix < sizeof (*header); ++ix)
+ p[ix] ^= header_table[ix];
+}
+
+KRYPTO_EXTERN rc_t CC KFileIsWGAEnc (const void * buffer, size_t buffer_size)
+{
+ const uint8_t * ph;
+ const uint8_t * pt;
+ const uint8_t * pb;
+ int ix;
+ int lim;
+
+ if ((buffer == NULL) || (buffer_size == 0))
+ return RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull);
+
+ /* bare minimum size to identify we decide is the first 8
+ * obsfucated ASCII bytes */
+
+ if (buffer_size < (sizeof (header_const.magic) - 1))
+ return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient);
+
+ /* a match is ph[X] ^ pt[X] == pb[X] at specially identified points
+ * we could have put the ^ into a constant for a tad faster operation
+ * but meh...
+ */
+ ph = (const uint8_t*)&header_const;
+ pt = (const uint8_t*)&header_table;
+ pb = (const uint8_t*)buffer;
+
+ ix = offsetof (struct KWGAEncFileHeader, magic);
+ lim = ix + sizeof (header_const.magic);
+ if (lim > buffer_size)
+ lim = buffer_size;
+ for (; (ix < lim) && (ix < buffer_size); ++ix)
+ if ((ph[ix] ^ pt[ix]) != pb[ix])
+ return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType);
+
+ if (buffer_size < offsetof (struct KWGAEncFileHeader, fer_enc))
+ return 0;
+
+ if ((ph[offsetof (struct KWGAEncFileHeader, fer_enc)] ^ pt[offsetof (struct KWGAEncFileHeader, fer_enc)])
+ != pb[offsetof (struct KWGAEncFileHeader, fer_enc)])
+ return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType);
+
+
+ ix = offsetof (struct KWGAEncFileHeader, reserved);
+ if (buffer_size < ix)
+ return 0;
+
+ lim = ix + sizeof (header_const.reserved);
+
+ if (lim > buffer_size)
+ lim = buffer_size;
+
+ for (; ix < lim; ++ix)
+ if ((ph[ix] ^ pt[ix]) != pb[ix])
+ return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType);
+
+ return 0;
+}
+
+
+
+
+
+
+/* ======================================================================
+ * KWGAEncFile
+ */
+
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+typedef struct KWGAEncFile KWGAEncFile;
+#define KFILE_IMPL struct KWGAEncFile
+
+#include <kfs/impl.h>
+
+struct KWGAEncFile
+{
+ KFile dad; /* base class */
+ const KFile * encrypted; /* encrypted file as a read only KFile */
+ uint64_t file_size; /* as read from the encrypted file header */
+ KTime_t mtime; /* as read from the encrypted file header */
+ uint32_t block_size; /* block size is in KB not bytes */
+ KCipher * cipher;
+
+ char inkey [32];
+ size_t inkey_size;
+
+ bool md5_here; /* was the md5 in the header? */
+ char md5[32]; /* external md5 loaded into the header as ASCII hex */
+ char md51[32]; /* md5 of first block loaded into the header as ASCII hex */
+ struct
+ {
+ uint64_t offset; /* position with in the unencrypted file */
+ uint32_t valid; /* how much usable at data */
+ uint8_t data [DEFAULT_BUFF_SIZE];
+ } buffer;
+};
+
+
+/* ----------------------------------------------------------------------
+ * InitKey
+ *
+ * This method mimics the prepare_key method in the WGA C++ code including
+ * what looks like programming errors.
+ *
+ * The goal is compatibility not 'correctness'.
+ */
+static
+rc_t KWGAEncFileKeyInit (KWGAEncFile * self, const char * key, size_t key_size)
+{
+ rc_t rc;
+ char g_key [32]; /* original used 513 but no key uses that much */
+
+ /* scary! */
+ /* this is copied directly from enc_read.cpp with all the 'possibly wrong' code */
+ memset (g_key, 0, sizeof g_key);
+ if (key_size > sizeof (g_key))
+ key_size = sizeof (g_key);
+ memcpy (g_key, key, key_size);
+
+ if (key_size < 16) /* even though g_key and some cipher keys are larger than 16 */
+ {
+ int jx, ix;
+ for ((jx = key_size),(ix = 0); jx < 16; ++jx, ++ix)
+ {
+ g_key[jx] = self->md51[ix] | g_key[ix%(jx?jx:1)]; /* cringe? */
+ }
+ }
+
+ /* okay we'll use 32 bytes from g_key though is is highly
+ * likely we've only got 16 non-zero bytes */
+ rc = KCipherSetDecryptKey (self->cipher, g_key, WGA_AES_BITS/8);
+
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *
+ */
+static
+rc_t CC KWGAEncFileDestroyRead (KWGAEncFile *self)
+{
+ rc_t rc = 0;
+
+ if (self)
+ {
+ rc = KFileRelease (self->encrypted);
+ free (self);
+ }
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ * returns an underlying system file object
+ * and starting offset to contiguous region
+ * suitable for memory mapping, or NULL if
+ * no such file is available.
+ *
+ * We do not allow this for read, write or update as you can not memory map the
+ * unencrypted file in a meaningful way.
+ */
+static
+struct KSysFile *CC KWGAEncFileGetSysFile (const KWGAEncFile *self, uint64_t *offset)
+{
+ assert (self);
+ assert (offset);
+ return NULL;
+}
+
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ * returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KWGAEncFileRandomAccess (const KWGAEncFile *self)
+{
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+ return KFileRandomAccess (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ * returns size in bytes of file
+ *
+ * "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KWGAEncFileSize (const KWGAEncFile *self, uint64_t *size)
+{
+ uint64_t esize;
+ rc_t rc;
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+ assert (size != NULL);
+
+ *size = 0;
+ rc = KFileSize (self->encrypted, &esize);
+ if (rc == 0)
+ *size = esize - sizeof (KWGAEncFileHeader);
+ return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ * sets size in bytes of file
+ *
+ * "size" [ IN ] - new file size
+ */
+static
+rc_t CC KWGAEncFileSetSize (KWGAEncFile *self, uint64_t size)
+{
+ assert (self);
+
+ return RC ( rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported );
+}
+
+
+/* ----------------------------------------------------------------------
+ * Read
+ * read file from known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ * "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually read
+ */
+
+/* local fill the buffer with block or more */
+static
+rc_t KWGAEncFileReadInt (KWGAEncFile * self, uint64_t pos, size_t bsize)
+{
+ uint64_t adjpos;
+ size_t tot_read;
+ size_t num_read;
+ rc_t rc = 0;
+
+ assert (self);
+ assert (bsize);
+ assert (bsize <= 32 * 1024);
+ assert (128%16 == 0);
+
+ memset (self->buffer.data, 0, sizeof self->buffer.data);
+ tot_read = num_read = 0;
+ adjpos = pos + sizeof (KWGAEncFileHeader);
+#if 0
+ do
+ {
+ rc = KFileRead (self->encrypted, adjpos + tot_read,
+ self->buffer.data + tot_read, bsize - tot_read,
+ &num_read);
+ if (rc)
+ return rc;
+ tot_read += num_read;
+ } while ((tot_read < bsize) && (num_read > 0));
+#else
+ rc = KFileReadAll (self->encrypted, adjpos, self->buffer.data, bsize,
+ &tot_read);
+#endif
+ self->buffer.offset = pos;
+ self->buffer.valid = tot_read;
+
+ if (tot_read & 15)
+ rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcInsufficient);
+ else if (tot_read > 0)
+ {
+#if 1
+
+#if RETAINED_COMPATIBILTY_WITH_ERROR
+ KCipherDecryptECB (self->cipher, self->buffer.data, self->buffer.data,
+ (tot_read / ECB_BYTES));
+#else
+/* Well this is wrong for even being wrong now */
+ KCipherDecryptECB (self->cipher, self->buffer.data, self->buffer.data,
+ tot_read);
+#endif
+
+#else
+ uint32_t count;
+ uint32_t ix;
+
+ /* this loop can be replaced by the KCipherDecryptECB
+ * with care taken to match the error in the original
+ * C++
+ */
+
+#if RETAINED_COMPATIBILTY_WITH_ERROR
+ count = tot_read / ECB_BYTES;
+#else
+ /* do all full 16 byte blocks plus a last partial block */
+ count = (tot_read + (ECB_BYTES-1)) / ECB_BYTES;
+#endif
+ for (ix = 0; ix < count; ++ix)
+ {
+ uint8_t * pb = self->buffer.data + (ix * ECB_BYTES);
+
+ rc = KCipherDecrypt (self->cipher, pb, pb);
+ if (rc)
+ break;
+ }
+#endif
+ }
+ return rc;
+}
+
+
+static
+rc_t CC KWGAEncFileRead (const KWGAEncFile *cself,
+ uint64_t pos,
+ void *buffer,
+ size_t bsize,
+ size_t *num_read)
+{
+ KWGAEncFile * self = (KWGAEncFile *)cself; /* mutable values */
+ rc_t rc = 0;
+
+ assert (cself);
+ assert (buffer);
+ assert (num_read);
+
+
+ *num_read = 0;
+
+ /* are we even within the file? If not just say no. Drugs are bad Mmmkay */
+ if (pos >= self->file_size)
+ {}
+ /* are we not reading from out what is already in the decrypted buffer space? */
+ else
+ {
+ if ((self->buffer.valid == 0) ||
+ (pos < self->buffer.offset) ||
+ (pos >= (self->buffer.offset + self->buffer.valid)))
+ {
+ if (pos < self->block_size) /* we'll be reading from the first 'block' */
+ {
+ rc = KWGAEncFileReadInt (self, 0, self->block_size);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "error reading first data block of"
+ " encrypted file");
+ return rc;
+ }
+ if (self->buffer.valid > self->block_size)
+ {
+ rc = RC (rcFS, rcFile, rcReading, rcBuffer, rcTooBig);
+ LOGERR (klogInt, rc, "read wrong amount for first block");
+ return rc;
+ }
+ else
+ {
+ size_t md5_size;
+ size_t nudge = 0;
+ char md51_comp [32];
+
+ if (self->buffer.valid & (ECB_BYTES-1))
+ nudge = ECB_BYTES - (self->buffer.valid & (ECB_BYTES-1));
+ if (nudge)
+ memset (self->buffer.data + self->buffer.valid, 0, nudge);
+
+ md5_size = self->buffer.valid + nudge;
+
+ CalcMD5 (self->buffer.data, md5_size, md51_comp);
+
+#if 1
+ if (strcase_cmp (self->md51, string_size(self->md51),
+ md51_comp, string_size(md51_comp), 32) != 0)
+#else
+ if (strncasecmp (self->md51, md51_comp, 32) != 0)
+#endif
+ {
+ rc = RC (rcFS, rcFile, rcReading, rcConstraint, rcCorrupt);
+ LOGERR (klogErr, rc, "MD5 does not match in decryption");
+ return rc;
+ }
+ }
+ }
+ else /* if (pos >= self->block_size) */
+ {
+ rc = KWGAEncFileReadInt (self, (pos & ~ ( uint64_t ) (16-1)),
+ DEFAULT_BUFF_SIZE);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "error reading data block of"
+ " encrypted file");
+ return rc;
+ }
+ } /* if (pos < self->block_size) */
+ } /* if ((self->buffer.valid == 0) || etc. */
+ /* if here we have a valid buffer and it contains the start pos requested */
+/* assert (pos >= self->buffer.offset); */
+/* assert (pos < (self->buffer.offset +self->buffer.valid)); */
+ {
+ size_t start;
+ size_t limit;
+
+ /* find offset of start for copy within the buffer */
+ start = (size_t)(pos - self->buffer.offset);
+ /* how many bytes available starting here */
+ limit = self->buffer.valid - start;
+
+ if (pos + limit > self->file_size)
+ limit = self->file_size - pos;
+
+ /* are we asking to read more than we have? is so trim the request */
+ if (limit < bsize)
+ bsize = limit;
+
+ memmove (buffer, self->buffer.data + start, bsize);
+ *num_read = bsize;
+ }
+ }
+ return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ * write file at known position
+ *
+ * "pos" [ IN ] - starting position within file
+ *
+ * "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ * "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ * giving number of bytes actually written
+ *
+ * Unsupported as we now treat archives as READ ONLY
+ */
+static
+rc_t CC KWGAEncFileWriteFail (KWGAEncFile *self, uint64_t pos,
+ const void *buffer, size_t bsize,
+ size_t *num_writ)
+{
+ assert (self);
+ return RC (rcFS, rcFile, rcReading, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Type
+ * returns a KFileDesc
+ * not intended to be a content type,
+ * but rather an implementation class
+ */
+static
+uint32_t CC KWGAEncFileType (const KWGAEncFile *self)
+{
+ assert (self != NULL);
+ assert (self->encrypted != NULL);
+
+ return KFileType (self->encrypted);
+}
+
+
+static const KFile_vt_v1 vtKWGAEncFileRead =
+{
+ /* version */
+ 1, 1,
+
+ /* 1.0 */
+ KWGAEncFileDestroyRead,
+ KWGAEncFileGetSysFile,
+ KWGAEncFileRandomAccess,
+ KWGAEncFileSize,
+ KWGAEncFileSetSize,
+ KWGAEncFileRead,
+ KWGAEncFileWriteFail,
+
+ /* 1.1 */
+ KWGAEncFileType
+};
+
+
+static
+rc_t KWGAEncFileHeaderRead (KWGAEncFile * self)
+{
+ KWGAEncFileHeader header;
+ uint8_t * pb;
+ size_t num_read;
+ size_t tot_read;
+ rc_t rc;
+
+ assert (self);
+ assert (sizeof (KWGAEncFileHeader) == 128);
+
+
+ DEBUG_STS (("s: Enter '%p'\n", __func__, self));
+ pb = (void*)&header;
+ for (num_read = tot_read = 0; tot_read < sizeof header; )
+ {
+ rc = KFileRead (self->encrypted, (uint64_t)tot_read, pb,
+ sizeof (header) - tot_read, &num_read);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "Error reading the header for an encrypted file");
+ return rc;
+ }
+
+ if (num_read == 0)
+ {
+ rc = RC (rcFS, rcFile, rcReading, rcFile, rcInsufficient);
+ LOGERR (klogErr, rc, "Header incomplete for an encrypted file");
+ return rc;
+ }
+ tot_read += num_read;
+ pb += num_read;
+ }
+
+ KWGAEncFileHeaderDecrypt (&header);
+
+ if (memcmp (header.magic, ncbi_crypt_magic, sizeof ncbi_crypt_magic) != 0)
+ {
+ rc = RC (rcFS, rcFile, rcReading, rcHeader, rcCorrupt);
+ LOGERR (klogErr, rc, "Header's magic bad for encrypted file");
+ return rc;
+ }
+
+ /* so far unknown legal range */
+ self->block_size = strtou32 (header.block_sz, NULL, KWGA_ENC_FILE_HEADER_RADIX);
+
+ self->file_size = strtou64 (header.file_sz, NULL, KWGA_ENC_FILE_HEADER_RADIX);
+
+ /* file format has limiting feature of a 32 bit timestamp */
+ self->mtime = (KTime_t)strtol (header.mtime, NULL, KWGA_ENC_FILE_HEADER_RADIX);
+
+ switch ((FER_ENCODING)header.fer_enc)
+ {
+ default:
+ rc = RC (rcFS, rcFile, rcReading, rcHeader, rcOutofrange);
+ LOGERR (klogErr, rc, "Enryption type code out of range");
+ return rc;
+ case fer_encDES:
+ case fer_encBLF:
+ rc = RC (rcFS, rcFile, rcReading, rcHeader, rcIncorrect);
+ LOGERR (klogErr, rc, "Enryption type code not supported");
+ return rc;
+ case fer_encAES:
+ break;
+ }
+
+ self->md5_here = (header.md5_here != 0);
+
+ if (self->md5_here)
+ memcpy (self->md5, header.md5, sizeof (self->md5));
+
+ memcpy (self->md51, header.md51, sizeof (self->md51));
+
+ return 0; /* yeah not really checking later errors am i? */
+}
+
+/* ----------------------------------------------------------------------
+ * KWGAEncFileMake
+ * create a new file object
+ *
+ * pself where to put pointer to new object
+ * encrypted a readable file that is encrypted
+ * cipher a cipher object that must support AES with 256 bit key
+ * not verified except through failure to decrypt a file
+ * key bytes containing the user key - should be utf-8 but with no
+ * control characters
+ * key_size how many bytes to use from the key
+ */
+/* read only version for decrypting of existing files */
+KRYPTO_EXTERN rc_t CC KFileMakeWGAEncRead (const struct KFile ** pself,
+ const struct KFile * encrypted,
+ const char * key,
+ size_t key_size)
+{
+ rc_t rc;
+
+ if (pself == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+ LOGERR (klogErr, rc, "key parameter for WGA encrypted file is empty");
+ return rc;
+ }
+
+ *pself = NULL;
+
+ if ((encrypted == NULL)||(key == NULL))
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+ LOGERR (klogErr, rc, "missing WGA encrypted file passed in to constructor");
+ }
+
+ else if (key_size == 0)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+ LOGERR (klogErr, rc, "missing WGA encrypted file passed in to constructor");
+ }
+
+ else if (encrypted->read_enabled == 0)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcIncorrect);
+ LOGERR (klogErr, rc, "encrypted file not readable");
+ }
+ else
+ {
+ KCipherManager * cipher_mgr;
+
+ rc = KCipherManagerMake (&cipher_mgr);
+ if (rc == 0)
+ {
+ KCipher * cipher;
+
+ rc = KCipherManagerMakeCipher (cipher_mgr, &cipher, kcipher_AES);
+ if (rc == 0)
+ {
+ size_t z;
+
+ rc = KCipherBlockSize (cipher, &z);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "unable to get block size for WGA "
+ "encrypted file cipher passed in to constructor");
+ }
+ else
+ {
+ if (z != ECB_BYTES)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcParam,
+ rcInvalid);
+ LOGERR (klogErr, rc, "wrong block size for WGA "
+ "encrypted file cipher passed in to "
+ "constructor");
+ }
+ else
+ {
+ KWGAEncFile * self;
+
+ self = calloc (sizeof (*self), sizeof (uint8_t));
+ if (self == NULL)
+ {
+ rc = RC (rcFS, rcFile, rcConstructing, rcMemory,
+ rcExhausted);
+ LOGERR (klogErr, rc, "out of memory while "
+ "constructing decryptor");
+ }
+ else
+ {
+ rc = KFileAddRef (encrypted);
+ if (rc)
+ LOGERR (klogErr, rc, "unable to add reference "
+ "to encrypted file");
+ else
+ {
+ /* cast to strip const */
+ self->encrypted = encrypted;
+ self->cipher = cipher;
+
+ /* read the header of the encrypted file for
+ * details about the decrypted file */
+ DEBUG_STS(("%s: calling KWGAEncFileHeaderRead\n",
+ __func__));
+ rc = KWGAEncFileHeaderRead (self);
+ if (rc == 0)
+ {
+ /* using the file header's stored encoding
+ * key build a key from the parameter key */
+ DEBUG_STS(("%s: calling "
+ "KWGAEncFileHeaderRead\n",
+ __func__));
+ rc = KWGAEncFileKeyInit (self, key,
+ key_size);
+ }
+ if (rc == 0)
+ {
+ rc = KFileInit (&self->dad,
+ (const KFile_vt*)
+ &vtKWGAEncFileRead,
+ "KWGAEncFile", "no-name",
+ true, false);
+ if (rc)
+ LOGERR (klogInt, rc, "Failed to initialize decrypting file");
+ else
+ {
+ *pself = &self->dad;
+ self->buffer.offset = 0;
+ self->buffer.valid = 0;
+ KCipherManagerRelease (cipher_mgr);
+ return 0;
+ }
+ }
+ /* release of encrypted handled in destroy() */
+ }
+ KWGAEncFileDestroyRead (self);
+ }
+ }
+ }
+ KCipherRelease (cipher);
+ }
+ }
+ }
+ return rc;
+}
+
+static __inline__
+rc_t WGAEncValidateHeader (const KWGAEncFileHeader * header,
+ size_t header_size)
+{
+ rc_t rc = 0;
+ unsigned ix;
+
+ if (header_size != sizeof * header)
+ {
+ rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInsufficient);
+ LOGERR (klogErr, rc, "incomplete header");
+ return rc;
+ }
+
+ if (memcmp (header, &header_const, sizeof header->magic) != 0)
+ {
+ rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInvalid);
+ LOGERR (klogErr, rc, "bad signature in encrypted file header");
+ return rc;
+ }
+
+#if 0
+ /* check block_size */
+ do
+ {
+ for (ix = 0; isspace(header->block_sz[ix]); ++ix)
+ ;
+
+ if (ix >= sizeof (header->block_sz))
+ break;
+
+ if (header->block_sz[ix] == '+')
+ ++ix;
+
+ if (ix >= sizeof (header->block_sz))
+ break;
+
+ for (; (ix < sizeof header->block_sz); ++ix)
+ {
+ if (isdigit (header->block_sz[ix]))
+ ;
+ else if ((header->block_sz[ix] >= 'a') &&
+ (header->block_sz[ix] <= 'w'))
+ ;
+ else if ((header->block_sz[ix] >= 'A') &&
+ (header->block_sz[ix] <= 'W'))
+ ;
+ else
+ break;
+ }
+ for (; (ix < sizeof header->block_sz); ++ix)
+ {
+ if (header->block_sz[ix] == '\0')
+ ;
+ else
+ break;
+ }
+ if (rc)
+
+
+
+ for (ix = 0; ix < sizeof header->block_size; ++ix)
+ {
+ if ()
+ ;
+ }
+
+ ;
+ else if (header->block_sz[ix] == '-')
+ ;
+ else
+ ;
+ }while (0);
+ /* check file_sz */
+ /* check mtime */
+#endif
+
+ if (header->fer_enc != fer_encAES)
+ {
+ rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInvalid);
+ LOGERR (klogErr, rc, "bad encoding flag in encrypted file header");
+ return rc;
+ }
+
+ if ((header->md5_here != true) && (header->md5_here != false))
+ {
+ rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInvalid);
+ LOGERR (klogErr, rc, "bad checksum flag in encrypted file header");
+ return rc;
+ }
+
+ /* check md5 */
+ /* check md51 */
+
+ for (ix = 0; ix < sizeof header->reserved; ++ix)
+ {
+ if (header->reserved[ix] != 0)
+ {
+ rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInvalid);
+ LOGERR (klogErr, rc, "bad reserved space in encrypted file header");
+ return rc;
+ }
+ }
+
+ return 0;
+}
+
+
+KRYPTO_EXTERN rc_t CC WGAEncValidate (const KFile * encrypted,
+ const char * key,
+ size_t key_size)
+{
+ const KFile * buffile;
+ rc_t rc, orc;
+
+ rc = KBufFileMakeRead (&buffile, encrypted, 64*1024);
+ if (rc)
+ LOGERR (klogErr, rc, "unable to buffer encrypted file");
+
+ else
+ {
+ KWGAEncFileHeader header;
+ size_t num_read;
+
+ /* first let's disect the header */
+ rc = KFileReadAll (buffile, 0, &header, sizeof header, &num_read);
+ if (rc)
+ LOGERR (klogErr, rc, "unable to read encrypted file header");
+
+ else
+ {
+ uint64_t file_size;
+ uint64_t header_file_size;
+ char ascii_md5 [32];
+ char header_ascii_md5 [32];
+
+ KWGAEncFileHeaderDecrypt (&header);
+
+ rc = WGAEncValidateHeader (&header, num_read);
+ if (rc)
+ ;
+
+ else
+ {
+ if (key_size == 0)
+ {
+ const KFile * countfile;
+ rc = KFileMakeCounterRead (&countfile, encrypted, &file_size, NULL, false);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "error making file size counter");
+ file_size = 0;
+ }
+ else
+ {
+ KFileAddRef (encrypted);
+ KFileRelease (countfile);
+
+ file_size -= sizeof header;
+ }
+ }
+ else
+ {
+ union
+ {
+ const KFile * decrypted;
+ const KWGAEncFile * decryptor;
+ } u;
+
+ rc = KFileMakeWGAEncRead (&u.decrypted, buffile, key, key_size);
+ if (rc)
+ LOGERR (klogErr, rc, "error making decryptor");
+
+ else
+ {
+ KFile * nullfile;
+
+ rc = KFileMakeNullUpdate (&nullfile);
+ if (rc)
+ LOGERR (klogInt, rc, "error making data sync");
+
+ else
+ {
+ KMD5SumFmt * fmt;
+ static const char name[] = "wgaencrypt";
+
+ rc = KMD5SumFmtMakeUpdate (&fmt, nullfile);
+ if (rc)
+ {
+ LOGERR (klogInt, rc, "error making md5sum database");
+ KFileRelease (nullfile);
+ }
+ else
+ {
+ const KFile * md5file;
+
+ rc = KFileMakeNewMD5Read (&md5file, u.decrypted, fmt, name);
+ if (rc)
+ LOGERR (klogInt, rc, "error making MD5 calculator");
+
+ else
+ {
+ /*
+ * ill mannered md5file steals
+ * references instead of adding one
+ */
+ rc = KFileAddRef (u.decrypted);
+ if (rc)
+ LOGERR (klogInt, rc, "error adding reference to decryptor");
+
+ else
+ {
+
+ const KFile * countfile;
+ rc = KFileMakeCounterRead (&countfile,
+ md5file,
+ &file_size, NULL,
+ true);
+ if (rc)
+ LOGERR (klogErr, rc,
+ "error making file size "
+ "counter");
+ else
+ {
+ /*
+ * ill mannered countfile steals
+ * references instead of adding one
+ */
+ KFileAddRef (md5file);
+ rc = KFileRelease (countfile);
+ }
+
+ orc = KFileRelease (md5file);
+
+ if (rc == 0)
+ rc = orc;
+
+ if (rc == 0)
+ {
+ uint8_t md5 [16];
+ bool bin;
+
+ rc = KMD5SumFmtFind (fmt, name, md5, &bin);
+ if (rc)
+ LOGERR (klogInt, rc, "error locating MD5");
+
+ else
+ {
+ size_t zz;
+ unsigned ix;
+ for (ix = 0; ix < 16; ++ix)
+ {
+ string_printf (&ascii_md5[2*ix], 2, &zz, "%2.2x",
+ (unsigned)(uint8_t)md5[ix]);
+ }
+ memcpy (header_ascii_md5,
+ u.decryptor->md5,
+ sizeof header_ascii_md5);
+ }
+ }
+ }
+ }
+ KMD5SumFmtRelease (fmt);
+ }
+ }
+ KFileRelease (u.decrypted);
+ }
+ }
+ }
+ if (rc == 0)
+ {
+ uint64_t sys_file_size;
+ uint64_t pad_file_size;
+ rc_t orc;
+
+ /* ccheck file size */
+
+ orc = KFileSize (encrypted, &sys_file_size);
+ if (orc == 0)
+ {
+ pad_file_size = file_size + 15;
+ pad_file_size &= ~ ( uint64_t ) 15;
+ pad_file_size += sizeof (KWGAEncFileHeader);
+ }
+ header_file_size = strtou64 (header.file_sz, NULL, KWGA_ENC_FILE_HEADER_RADIX);
+
+ if (key_size == 0)
+ {
+ header_file_size += 15;
+ header_file_size &= ~ ( uint64_t ) 15;
+ }
+
+ if (file_size < header_file_size)
+ rc = RC (rcKrypto, rcFile, rcValidating, rcSize, rcInsufficient);
+
+ else if (file_size > header_file_size)
+ rc = RC (rcKrypto, rcFile, rcValidating, rcSize, rcExcessive);
+
+ else if ((orc == 0) &&
+ (sys_file_size > pad_file_size))
+ rc = RC (rcKrypto, rcFile, rcValidating, rcSize, rcExcessive);
+
+ /* check md5 */
+ else if (!header.md5_here)
+ {
+ /* rc = RC (rcKrypto, rcFile, rcValidating, rcEncryption, rcNotFound); */
+ }
+ else if (key_size == 0)
+ rc = RC (rcKrypto, rcFile, rcValidating, rcEncryption, rcNull);
+
+ else
+ {
+ int cmp;
+
+ cmp = strcase_cmp (ascii_md5, sizeof ascii_md5,
+ header_ascii_md5, sizeof header_ascii_md5,
+ sizeof ascii_md5);
+ if (cmp)
+ {
+ rc = RC (rcKrypto, rcFile, rcValidating, rcChecksum,
+ rcInvalid);
+ LOGERR (klogErr, rc, "Encrypted file MD5 does not match");
+ }
+ }
+ }
+ }
+ KFileRelease (buffile);
+ }
+ return rc;
+}
+#if 0
+ /* not working as planned */
+ if (rc == 0)
+ {
+ uint32_t this_read;
+
+ /* try to read past size now obtained */
+ do
+ {
+ uint8_t throwaway [8192];
+
+ rc = KFileRead (encrypted, z + sizeof (KWGAEncFileHeader), throwaway, sizeof throwaway,
+ &this_read);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "Error reading file");
+ break;
+ }
+ z += this_read;
+
+ } while (this_read);
+ }
+#endif
+
+/* end of file wgaencrypt.c */
+
diff --git a/libs/ktst/Makefile b/libs/ktst/Makefile
new file mode 100644
index 0000000..d5474c2
--- /dev/null
+++ b/libs/ktst/Makefile
@@ -0,0 +1,90 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/ktst
+
+INT_LIBS = \
+ libktst
+
+EXT_LIBS = \
+
+ALL_LIBS = \
+ $(INT_LIBS) \
+ $(EXT_LIBS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): makedirs
+ @ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+ @ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+ $(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# testing framework
+#
+$(ILIBDIR)/libktst: $(addprefix $(ILIBDIR)/libktst.,$(LIBX))
+
+TST_SRC = \
+ runprocesstestcase \
+ testenv \
+ testcase \
+ testrunner
+
+TST_OBJ = \
+ $(addsuffix .$(LOBX),$(TST_SRC))
+
+TST_LIB = \
+
+$(ILIBDIR)/libktst.$(LIBX): $(TST_OBJ)
+ $(LP) --slib -o $@ $^ $(TST_LIB)
+
diff --git a/libs/ktst/testcase.cpp b/libs/ktst/testcase.cpp
new file mode 100644
index 0000000..5c0a948
--- /dev/null
+++ b/libs/ktst/testcase.cpp
@@ -0,0 +1,95 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test.hpp>
+
+#include <klib/printf.h>
+
+using namespace ncbi::NK;
+
+TestCase::TestCase(const std::string& name)
+: _name(name), _ec(0)
+{
+}
+
+void TestCase::report_error(const char* msg, const char* file, int line, bool is_msg, bool isCritical)
+{
+ ncbi::NK::saveLocation(file, line);
+ ++_ec;
+ LOG(LogLevel::e_error, file << "(" << line << "): ");
+ if (isCritical)
+ {
+ LOG(LogLevel::e_error, "fatal ");
+ }
+ LOG(LogLevel::e_error, "error in \"" << _name << "\": ");
+ if (is_msg)
+ {
+ LOG(LogLevel::e_error, msg);
+ }
+ else
+ {
+ if (isCritical)
+ {
+ LOG(LogLevel::e_error, "critical ");
+ }
+ LOG(LogLevel::e_error, "check " << msg << " failed");
+ }
+ LOG(LogLevel::e_error, std::endl);
+ if (isCritical)
+ {
+ throw ncbi::NK::execution_aborted();
+ }
+}
+
+void TestCase::report_passed(const char* msg, const char* file, int line)
+{
+ ncbi::NK::saveLocation(file, line);
+ LOG(LogLevel::e_all, file << "(" << line << "): info: " "check " << msg << " passed" << std::endl);
+}
+
+void TestCase::_REPORT_CRITICAL_ERROR_(const std::string& msg, const char* file, int line, bool is_msg)
+{
+ report_error( msg.c_str(), file, line, is_msg, true );
+}
+
+void TestCase::report_rc(rc_t rc, const char* callStr, const char* file, int line, int successExpected, bool isCritical)
+{
+ if ((successExpected && rc != 0) || (!successExpected && rc == 0))
+ {
+ const int BufSize=1024;
+ char buf[BufSize];
+ size_t num_writ=0;
+ if (0 == string_printf (buf, BufSize, &num_writ, "Unexpected return code from %s: %R\n", callStr, rc))
+ {
+ report_error(buf, file, line, true, isCritical);
+ }
+ else
+ {
+ report_error("***error message too large to print***", file, line, true, isCritical);
+ }
+ }
+}
+
diff --git a/libs/ktst/testenv.cpp b/libs/ktst/testenv.cpp
new file mode 100644
index 0000000..1ded063
--- /dev/null
+++ b/libs/ktst/testenv.cpp
@@ -0,0 +1,503 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test.hpp>
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+
+#include <kapp/main.h> // KAppVersion
+#include <kapp/args.h> // ArgsWhack
+#include <klib/out.h> // KOutMsg
+
+#endif
+
+#include <klib/rc.h>
+#include <sstream>
+#include <csignal>
+#include <cstdlib>
+#include <cstring>
+
+using namespace ::ncbi::NK;
+using std::string;
+
+//const int TestEnv::TEST_CASE_TIMED_OUT=14; //SIGALRM
+//const int TestEnv::TEST_CASE_FAILED=255;
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+struct Args* TestEnv::args = 0;
+#endif
+
+TestEnv::TestEnv(int argc, char* argv[], ArgsHandler* argsHandler)
+ : catch_system_errors(true)
+ , argc2(0)
+ , argv2(NULL)
+{
+ process_args(argc, argv, argsHandler);
+}
+
+TestEnv::~TestEnv ()
+{
+ if (argv2 != NULL) {
+ for (int i = 0; i < argc2; ++i) {
+ free(argv2[i]);
+ argv2[i] = NULL;
+ }
+ free(argv2);
+ }
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+ ArgsWhack(args);
+ args = NULL;
+#endif
+}
+
+string TestEnv::lastLocation;
+LogLevel::E TestEnv::verbosity = LogLevel::e_error;
+
+void CC TestEnv::TermHandler()
+{
+ SigHandler(SIGTERM);
+}
+
+void CC TestEnv::SigHandler(int sig)
+{
+ switch (sig)
+ {
+ case SIGABRT:
+ LOG(ncbi::NK::LogLevel::e_fatal_error,
+ "fatal error: signal: SIGABRT(Abort call)\n");
+ break;
+ case SIGFPE:
+ LOG(ncbi::NK::LogLevel::e_fatal_error,
+ "fatal error: signal: SIGFPE(Floating point exception)\n");
+ break;
+ case SIGILL:
+ LOG(ncbi::NK::LogLevel::e_fatal_error,
+ "fatal error: signal: SIGILL(Illegal instruction)\n");
+ break;
+ case SIGSEGV:
+ LOG(ncbi::NK::LogLevel::e_fatal_error,
+ "fatal error: signal: SIGSEGV(Segmentation fault)\n");
+ break;
+ default:
+ LOG(ncbi::NK::LogLevel::e_fatal_error,
+ "fatal error: signal: " << sig << "\n");
+ break;
+ }
+ if (!ncbi::NK::TestEnv::lastLocation.empty())
+ {
+ LOG(ncbi::NK::LogLevel::e_fatal_error,
+ ncbi::NK::TestEnv::lastLocation << ": last checkpoint\n");
+ }
+ LOG(ncbi::NK::LogLevel::e_fatal_error, "Test is aborted\n");
+ exit(sig);
+}
+
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+
+#define OPTION_DBG "verbose_cmd_line"
+#define ALIAS_DBG "a"
+static const char * dbg_usage[] = { "print command line argument processing information", NULL };
+
+#define OPTION_CSE "catch_system_errors"
+#define ALIAS_CSE "c"
+static const char * cse_usage[] = { "[yes|y|no|n] catch system errors, default is yes", NULL };
+
+#define OPTION_LOG "test_log_level"
+#define ALIAS_LOG "t"
+static const char * log_usage[] = { "test log level, one of:",
+ "'all': report all log messages",
+ " including the passed test notification;",
+ "'test_suite': show test suite messages;",
+ "'message': show user messages",
+ "'warning': report warnings issued by user;",
+ "'error': report all error conditions (default);",
+ "'fatal_error': report user or system originated fatal errors",
+ " (for example, memory access violation);",
+ "'nothing': do not report any information", NULL };
+
+OptDef Options[] = {
+ { OPTION_DBG, ALIAS_DBG, NULL, dbg_usage, 1, false, false }
+ , { OPTION_CSE, ALIAS_CSE, NULL, cse_usage, 1, true , false }
+ , { OPTION_LOG, ALIAS_LOG, NULL, log_usage, 1, true , false }
+};
+
+#endif
+
+rc_t TestEnv::process_args(int argc, char* argv[], ArgsHandler* argsHandler)
+{
+ int arg2 = 9;
+ argv2 = static_cast<char**>(calloc(arg2, sizeof *argv2));
+ if (argv2 == NULL)
+ { return RC (rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted); }
+ argv2[argc2] = strdup(argv[argc2]);
+ if (argv2[argc2] == NULL)
+ { return RC (rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted); }
+ ++argc2;
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+
+ rc_t rc = ArgsMakeAndHandle(&args, argc, argv, 1,
+ Options, sizeof Options / sizeof (OptDef));
+ if (rc)
+ { return rc; }
+
+ bool debug = false;
+ LogLevel::E detected = LogLevel::e_undefined;
+ do {
+ uint32_t pcount = 0;
+
+ rc = ArgsOptionCount(args, OPTION_DBG, &pcount);
+ if (rc)
+ { return rc; }
+ if (pcount) {
+ debug = true;
+ LOG(LogLevel::e_nothing, "debug: debug was set to true\n");
+ }
+
+ rc = ArgsOptionCount(args, OPTION_CSE, &pcount);
+ if (rc)
+ { return rc; }
+ if (pcount) {
+ const char* pc = NULL;
+ rc = ArgsOptionValue(args, OPTION_CSE, 0, &pc);
+ if (rc)
+ { return rc; }
+ if (!strcmp(pc, "n") || !strcmp(pc, "no")) {
+ catch_system_errors = false;
+ if (debug) {
+ LOG(LogLevel::e_nothing,
+ "debug: arg_catch_system_errors was set to false\n");
+ }
+ }
+ else {
+ if (debug) {
+ LOG(LogLevel::e_nothing,
+ "debug: arg_catch_system_errors was set to true\n");
+ }
+ }
+ }
+
+ rc = ArgsOptionCount(args, OPTION_LOG, &pcount);
+ if (rc)
+ { return rc; }
+ if (pcount) {
+ const char* a = NULL;
+ rc = ArgsOptionValue(args, OPTION_LOG, 0, &a);
+ if (rc)
+ { return rc; }
+ if (!strcmp(a, "test_suite"))
+ { detected = LogLevel::e_test_suite; }
+ else if (strcmp(a, "all" ) == 0)
+ { detected = LogLevel::e_all; }
+ else if (strcmp(a, "message") == 0)
+ { detected = LogLevel::e_message; }
+ else if (strcmp(a, "warning") == 0)
+ { detected = LogLevel::e_warning; }
+ else if (strcmp(a, "error" ) == 0)
+ { detected = LogLevel::e_error; }
+ else if (strcmp(a, "nothing") == 0)
+ { detected = LogLevel::e_nothing; }
+ else if (strcmp(a, "fatal_error") == 0)
+ { detected = LogLevel::e_fatal_error; }
+ if (detected != LogLevel::e_undefined) {
+ verbosity = detected;
+ if (debug) {
+ LOG(LogLevel::e_nothing,
+ "debug: log_level was set to " << a << std::endl);
+ }
+ }
+ else {
+ verbosity = LogLevel::e_error;
+ if (debug) {
+ LOG(LogLevel::e_nothing,
+ "debug: log_level was set to error\n");
+ }
+ }
+ }
+ } while (0);
+
+ if (verbosity == LogLevel::e_undefined) {
+ verbosity = LogLevel::e_error;
+ if (debug) {
+ LOG(LogLevel::e_nothing,
+ "debug: log_level was set to error\n");
+ }
+ }
+#else
+
+ rc_t rc = 0;
+
+ bool debug = false;
+ LogLevel::E detected = LogLevel::e_undefined;
+ char arg_catch_system_errors[] = "-catch_system_errors=";
+ char arg_log_level [] = "-l=";
+ char arg_app_args [] = "-app_args=";
+ for (int i = 1; i < argc; ++i)
+ {
+ if (strncmp(argv[i], arg_log_level, strlen(arg_log_level))
+ == 0)
+ {
+ char* a = argv[i] + strlen(arg_log_level);
+ if (strcmp(a, "test_suite") == 0)
+ detected = LogLevel::e_test_suite;
+ else if (strcmp(a, "all" ) == 0)
+ detected = LogLevel::e_all;
+ else if (strcmp(a, "message") == 0)
+ detected = LogLevel::e_message;
+ else if (strcmp(a, "warning") == 0)
+ detected = LogLevel::e_warning;
+ else if (strcmp(a, "error" ) == 0)
+ detected = LogLevel::e_error;
+ else if (strcmp(a, "nothing") == 0)
+ detected = LogLevel::e_nothing;
+ else if (strcmp(a, "fatal_error") == 0)
+ detected = LogLevel::e_fatal_error;
+ if (detected != LogLevel::e_undefined)
+ {
+ verbosity = detected;
+ if (debug)
+ {
+ LOG(LogLevel::e_nothing,
+ "debug: log_level was set to " << a << std::endl);
+ }
+ }
+ else
+ {
+ verbosity = LogLevel::e_error;
+ if (debug)
+ {
+ LOG(LogLevel::e_nothing,
+ "debug: log_level was set to error\n");
+ }
+ }
+ }
+ else if (strncmp(argv[i], arg_catch_system_errors,
+ strlen(arg_catch_system_errors)) == 0)
+ {
+ char* a = argv[i] + strlen(arg_catch_system_errors);
+ if (strcmp(a, "n") == 0 || strcmp(a, "no") == 0)
+ {
+ catch_system_errors = false;
+ if (debug)
+ {
+ LOG(LogLevel::e_nothing,
+ "debug: arg_catch_system_errors was set to false\n");
+ }
+ }
+ else
+ {
+ if (debug)
+ {
+ LOG(LogLevel::e_nothing,
+ "debug: arg_catch_system_errors was set to true\n");
+ }
+ }
+ }
+ else if (strcmp(argv[i], "-debug") == 0)
+ {
+ debug = true;
+ LOG(LogLevel::e_nothing, "debug: debug was set to true\n");
+ }
+ else if (strcmp(argv[i], "-h") == 0)
+ {
+ if (debug)
+ {
+ LOG(LogLevel::e_nothing, "debug: help was set to true\n");
+ }
+ std::cout << "Usage:\n"
+ << argv[0]
+ << " [-debug] [-catch_system_errors=[yes|y|no|n]]\n"
+ " [-app_args='<value>'] [-l=<value>] [-h]\n"
+ "where:\n"
+ "debug - Print recognized command line arguments\n"
+ " (should be specified first)\n"
+ "catch_system_errors - Allows to switch between catching\n"
+ " and ignoring system errors (signals)\n"
+ "app_args - Allows to pass command line arguments\n"
+ " to application handler\n"
+ " (see unit_test.hpp/FIXTURE_TEST_SUITE_WITH_ARGS_HANDLER)\n"
+ "\n"
+ "l (log_level) - Specifies log level\n"
+ "\tall - report all log messages\n"
+ "\t including the passed test notification\n"
+ "\ttest_suite - show test suite messages\n"
+ "\tmessage - show user messages\n"
+ "\twarning - report warnings issued by user\n"
+ "\terror - report all error conditions (default)\n"
+ "\tfatal_error- report user or system originated fatal errors\n"
+ "\t (for example, memory access violation)\n"
+ "\tnothing - do not report any information\n"
+ "\n"
+ "h (help) - this help message\n";
+ exit(0);
+ }
+ else if (strncmp(argv[i], arg_app_args, strlen(arg_app_args)) == 0)
+ {
+ char* a = argv[i] + strlen(arg_app_args);
+ if (debug)
+ {
+ LOG(LogLevel::e_nothing,
+ string("debug: arg_app_args was detected: ") + a + "\n");
+ }
+ char* pch = strtok(a ," ");
+ while (pch != NULL) {
+ if (argc2 >= arg2) {
+ arg2 *= 2;
+ char** tmp = static_cast<char**>(
+ realloc(argv2, arg2 * sizeof *argv2));
+ if (tmp == NULL) {
+ return RC(
+ rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+ }
+ argv2 = tmp;
+ }
+ argv2[argc2] = strdup(pch);
+ if (argv2[argc2] == NULL) {
+ return RC(
+ rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+ }
+ ++argc2;
+ pch = strtok(NULL, " ");
+ }
+ }
+ }
+
+ if (verbosity == LogLevel::e_undefined)
+ {
+ verbosity = LogLevel::e_error;
+ if (debug)
+ {
+ LOG(LogLevel::e_nothing,
+ "debug: log_level was set to error\n");
+ }
+ }
+#endif
+
+ if (rc == 0) {
+ if (argsHandler)
+ { rc = argsHandler(argc2, argv2); }
+ }
+
+ return rc;
+}
+
+void ::ncbi::NK::saveLocation(const char* file, int line)
+{
+ std::ostringstream s;
+ s << file << "(" << line << ")";
+ TestEnv::lastLocation = s.str();
+}
+
+void ::ncbi::NK::_REPORT_CRITICAL_ERROR_(const string& msg, const char* file, int line, bool is_msg)
+{
+ LOG(ncbi::NK::LogLevel::e_error, file << "(" << line << "): ");
+ LOG(ncbi::NK::LogLevel::e_error, "fatal ");
+ LOG(ncbi::NK::LogLevel::e_error, "error in fixture: ");
+ if (is_msg) {
+ LOG(ncbi::NK::LogLevel::e_error, msg);
+ }
+ else {
+ LOG(ncbi::NK::LogLevel::e_error, "critical ");
+ LOG(ncbi::NK::LogLevel::e_error, "check " << msg << " failed");
+ }
+ LOG(ncbi::NK::LogLevel::e_error, std::endl);
+ throw ncbi::NK::execution_aborted();
+ }
+
+ncbi::NK::TestRunner*
+ncbi::NK::GetTestSuite(void)
+{
+ static ncbi::NK::TestRunner t;
+ return &t;
+}
+
+rc_t CC TestEnv::UsageSummary(const char* progname) {
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+ return KOutMsg(
+ "Usage:\n"
+ " %s [--verbose_cmd_line] [--catch_system_errors [yes|y|no|n]] "
+ "[-t <value>] [-h] [...]\n", progname);
+#else
+ std::cout
+ << "Usage:\n"
+ << progname
+ << " [-debug] [-catch_system_errors=[yes|y|no|n]] "
+ "[-l=<value>] [-h] [...]\n";
+ return 0;
+#endif
+}
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+rc_t CC TestEnv::Usage(const Args* args)
+{
+ const char* progname = UsageDefaultName;
+ const char* fullpath = UsageDefaultName;
+
+ rc_t rc = (args == NULL) ?
+ RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull):
+ ArgsProgram(args, &fullpath, &progname);
+
+ if (rc != 0)
+ progname = fullpath = UsageDefaultName;
+
+ UsageSummary(progname);
+
+ KOutMsg("\nOptions:\n");
+
+ HelpOptionLine(ALIAS_DBG, OPTION_DBG, NULL, dbg_usage);
+ HelpOptionLine(ALIAS_CSE, OPTION_CSE, NULL, cse_usage);
+ HelpOptionLine(ALIAS_LOG, OPTION_LOG, NULL, log_usage);
+ KOutMsg("\n");
+ HelpOptionsStandard();
+ HelpVersion(fullpath, KAppVersion());
+
+ return rc;
+}
+#else
+rc_t CC TestEnv::Usage(const char *progname)
+{
+ UsageSummary ( progname );
+ std::cout <<
+ "where:\n"
+ "debug - Print recognized command line arguments (should be specified first)\n"
+ "catch_system_errors - "
+ "Allows to switch between catching and ignoring system errors (signals)\n"
+ "l (log_level) - Specifies log level\n"
+ "\tall - report all log messages\n"
+ "\t including the passed test notification\n"
+ "\ttest_suite - show test suite messages\n"
+ "\tmessage - show user messages\n"
+ "\twarning - report warnings issued by user\n"
+ "\terror - report all error conditions (default)\n"
+ "\tfatal_error- report user or system originated fatal errors\n"
+ "\t (for example, memory access violation)\n"
+ "\tnothing - do not report any information\n"
+ "h (help) - this help message\n";
+ return 0;
+}
+#endif
diff --git a/libs/ktst/testrunner.cpp b/libs/ktst/testrunner.cpp
new file mode 100644
index 0000000..cb31e16
--- /dev/null
+++ b/libs/ktst/testrunner.cpp
@@ -0,0 +1,77 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test.hpp>
+
+using namespace ncbi::NK;
+
+TestRunner::TestRunner() : argc(0), argv(NULL) {}
+
+void TestRunner::ReportTestNumber(void)
+{
+ T::size_type sz = _cases.size();
+ if (sz == 1) {
+ LOG(LogLevel::e_fatal_error, "Running " << sz << " test case...\n");
+ } else if (sz > 1) {
+ LOG(LogLevel::e_fatal_error, "Running " << sz << " test cases...\n");
+ }
+}
+
+void TestRunner::SetArgs(int argc, char* argv[])
+{
+ this->argc = argc;
+ this->argv = argv;
+}
+
+void TestRunner::Add(ncbi::NK::TestInvoker* t)
+{
+ if (t)
+ {
+ _cases.push_back(t);
+ }
+}
+
+counter_t TestRunner::Run(void* globalFixture) const
+{
+ counter_t ec = 0;
+ for (TCI it = _cases.begin(); it != _cases.end(); ++it)
+ {
+ ncbi::NK::TestInvoker* c = *it;
+ try {
+ LOG(LogLevel::e_test_suite,
+ "Entering test case \"" << c->GetName() << "\"\n");
+ c->Run(globalFixture);
+ LOG(LogLevel::e_test_suite,
+ "Leaving test case \"" << c->GetName() << "\"\n");
+ } catch (const ncbi::NK::execution_aborted&) {
+ LOG(LogLevel::e_test_suite,
+ "Leaving test case \"" << c->GetName() << "\"\n");
+ }
+ ec += c->GetErrorCounter();
+ }
+ return ec;
+}
+
diff --git a/libs/ktst/unix/runprocesstestcase.cpp b/libs/ktst/unix/runprocesstestcase.cpp
new file mode 100644
index 0000000..b30eafc
--- /dev/null
+++ b/libs/ktst/unix/runprocesstestcase.cpp
@@ -0,0 +1,100 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test_suite.hpp>
+
+#include <signal.h> // sigaction, not necessarily in csignal :-/
+#include <cstdlib>
+#include <cstring>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+using namespace ncbi::NK;
+
+#define REPORT_ERROR(msg) _REPORT_CRITICAL_ERROR_("TestEnv::" msg, __FILE__, __LINE__, true);
+
+static void alarmHandler(int)
+{
+ exit(TestEnv::TEST_CASE_TIMED_OUT);
+}
+
+int TestEnv::RunProcessTestCase(TestCase& obj, void(TestCase::*meth)(), int timeout)
+{
+ int pid=fork();
+ if (pid == -1)
+ {
+ REPORT_ERROR("RunProcessTestCase: fork() failed");
+ }
+ if (pid == 0)
+ { /* child process */
+ if (timeout != 0)
+ {
+ struct sigaction act;
+ memset(&act, 0, sizeof act);
+ act.sa_handler = alarmHandler;
+ act.sa_flags = SA_RESETHAND;
+ sigaction(SIGALRM , &act, NULL);
+ alarm(timeout);
+ }
+ try
+ {
+ (obj.*meth)();
+ }
+ catch(...)
+ {
+ exit(TEST_CASE_FAILED);
+ }
+ exit(0);
+ }
+ /* parent process */
+ int status;
+ if (waitpid(pid, &status, 0) != pid) /* suspend until the child terminates */
+ {
+ REPORT_ERROR("RunProcessTestCase: wait() failed");
+ }
+ if (!WIFEXITED(status))
+ {
+ REPORT_ERROR("RunProcessTestCase: child exited abnormally");
+ }
+ return WEXITSTATUS(status); /* exit status of the child process */
+}
+
+unsigned int TestEnv::Sleep(unsigned int seconds)
+{
+ return sleep(seconds);
+}
+
+void TestEnv::set_handlers(void)
+{
+ struct sigaction act;
+ memset(&act, 0, sizeof act);
+ act.sa_handler = SigHandler;
+ act.sa_flags = SA_RESETHAND;
+ if (sigaction(SIGFPE , &act, NULL) != 0) REPORT_ERROR("set_handlers: sigaction() failed");
+ if (sigaction(SIGILL , &act, NULL) != 0) REPORT_ERROR("set_handlers: sigaction() failed");
+ if (sigaction(SIGSEGV , &act, NULL) != 0) REPORT_ERROR("set_handlers: sigaction() failed");
+}
diff --git a/libs/ktst/win/runprocesstestcase.cpp b/libs/ktst/win/runprocesstestcase.cpp
new file mode 100644
index 0000000..85a094a
--- /dev/null
+++ b/libs/ktst/win/runprocesstestcase.cpp
@@ -0,0 +1,141 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test_suite.hpp>
+
+#include <csignal>
+#include <windows.h>
+#include <process.h>
+
+using namespace ncbi::NK;
+
+/* signal handlers for a single-test case thread */
+void CC SigSubHandler(int sig)
+{
+ _endthreadex(sig);
+}
+void CC TermSubHandler()
+{
+ SigSubHandler(SIGTERM);
+}
+
+struct TestCaseCall
+{
+ TestCaseCall(TestCase& obj, void(TestCase::*meth)())
+ : object(&obj), method(meth)
+ {
+ }
+
+ TestCase* object;
+ void(TestCase::*method)();
+};
+
+void ThreadProc(void* call)
+{
+ signal(SIGABRT, SigSubHandler);
+ signal(SIGFPE, SigSubHandler);
+ signal(SIGILL, SigSubHandler);
+ signal(SIGINT, SigSubHandler);
+ signal(SIGSEGV, SigSubHandler);
+ signal(SIGTERM, SigSubHandler);
+ set_terminate(TermSubHandler);
+
+ try
+ {
+ TestCaseCall* c=(TestCaseCall*)call;
+ ((c->object)->*(c->method))();
+ }
+ catch (...)
+ {
+ _endthreadex(TestEnv::TEST_CASE_FAILED);
+ }
+ _endthreadex(0);
+}
+
+int TestEnv::RunProcessTestCase(TestCase& obj, void(TestCase::*meth)(), int timeout)
+{
+ TestCaseCall call(obj, meth);
+ HANDLE thread = (HANDLE)_beginthread( ThreadProc, 0, &call );
+ if (thread == NULL)
+ {
+ _REPORT_CRITICAL_ERROR_("TestEnv::RunProcessTestCase: failed to start a test case thread", __FILE__, __LINE__, true);
+ }
+
+ // make sure to restore main process's signal handlers before throwing an exception
+#define CALL_FAILED(call)\
+ _REPORT_CRITICAL_ERROR_("TestEnv::RunProcessTestCase: " call " failed", __FILE__, __LINE__, true);
+
+ DWORD rc=0;
+ DWORD result=WaitForSingleObject( (HANDLE)thread, timeout == 0 ? INFINITE : timeout*1000);
+ try
+ {
+ switch (result)
+ {
+ case WAIT_OBJECT_0:
+ if (GetExitCodeThread(thread, &rc) == 0)
+ {
+ CALL_FAILED("GetExitCodeThread");
+ }
+ break;
+ case WAIT_TIMEOUT:
+ if (!CloseHandle(thread))
+ {
+ CALL_FAILED("GetExitCodeThread");
+ }
+ rc=TEST_CASE_TIMED_OUT;
+ break;
+ default:
+ CALL_FAILED("WaitForSingleObject");
+ break;
+ }
+ }
+ catch(...)
+ {
+ set_handlers();
+ throw;
+ }
+#undef CALL_FAILED
+ set_handlers();
+ return (int)rc;
+}
+
+unsigned int TestEnv::Sleep(unsigned int seconds)
+{
+ ::Sleep(seconds*1000);
+ return 0;
+}
+
+void TestEnv::set_handlers(void)
+{
+ signal(SIGABRT, SigHandler);
+ signal(SIGFPE, SigHandler);
+ signal(SIGILL, SigHandler);
+ signal(SIGINT, SigHandler);
+ signal(SIGSEGV, SigHandler);
+ signal(SIGTERM, SigHandler);
+ set_terminate(TermHandler);
+}
+
diff --git a/libs/kxml/Makefile b/libs/kxml/Makefile
index 24ba8e2..ab13a2a 100644
--- a/libs/kxml/Makefile
+++ b/libs/kxml/Makefile
@@ -116,8 +116,8 @@ XML_OBJ = \
$(addsuffix .$(LOBX),$(XML_SRC))
XML_LIB = \
- -dklib \
- -dkfs
+ -dkfs \
+ -dklib
ifdef LIBXML_LPATH
XML_LIB += \
diff --git a/libs/kxml/libkxfs.vers b/libs/kxml/libkxfs.vers
index ee90284..7ee7020 100644
--- a/libs/kxml/libkxfs.vers
+++ b/libs/kxml/libkxfs.vers
@@ -1 +1 @@
-1.0.4
+1.0.10
diff --git a/libs/kxml/libkxml.vers b/libs/kxml/libkxml.vers
index 238d6e8..5b09c67 100644
--- a/libs/kxml/libkxml.vers
+++ b/libs/kxml/libkxml.vers
@@ -1 +1 @@
-1.0.7
+1.0.14
diff --git a/libs/kxml/xml.c b/libs/kxml/xml.c
index f4f2f3a..ce44542 100644
--- a/libs/kxml/xml.c
+++ b/libs/kxml/xml.c
@@ -28,13 +28,14 @@ struct s_KNodeNamelist;
#define KNAMELIST_IMPL struct s_KNodeNamelist
#include <sysalloc.h>
-#include <klib/xml.h>
+#include <kxml/xml.h>
#include <klib/impl.h>
#include <kfs/file.h>
#include <klib/log.h>
#include <klib/rc.h>
#include <klib/debug.h>
+#include <klib/text.h>
#include <os-native.h> /* for strndup on mac */
#include <strtol.h>
@@ -180,7 +181,7 @@ static void s_xmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED,
va_end(args);
}
-static rc_t ReadFile(const KFile *src, char** aBuffer, uint64_t* aSize)
+static rc_t s_XmlReadFile(const KFile *src, char** aBuffer, uint64_t* aSize)
{
rc_t rc = 0;
bool unknownFileSize = false;
@@ -244,7 +245,7 @@ rc_t KXMLMgrMakeDocRead(const KXMLMgr *self,
if (self && src) {
char* buffer = NULL;
uint64_t size = 0;
- rc = ReadFile(src, &buffer, &size);
+ rc = s_XmlReadFile(src, &buffer, &size);
if (rc)
{ return rc; }
rc = KXMLMgrMakeDocReadFromMemory(self, result, buffer, size);
@@ -348,6 +349,7 @@ static rc_t KXMLNodeset_cTor(const KXMLDoc *parent,
return RC ( rcXML, rcDoc, rcConstructing, rcData, rcIncorrect );
}
{
+ size_t size;
KXMLNodeset *obj = (KXMLNodeset*) malloc(sizeof(KXMLNodeset));
if (!obj) {
return RC ( rcXML, rcDoc, rcConstructing, rcMemory, rcExhausted );
@@ -365,7 +367,7 @@ static rc_t KXMLNodeset_cTor(const KXMLDoc *parent,
KXMLNodesetRelease(obj);
return RC(rcXML, rcDoc, rcConstructing, rcData, rcUnsupported );
}
- obj->path = strdup(path);
+ obj->path = string_dup(path, string_measure(path, &size));
if (!obj->path) {
KXMLNodesetRelease(obj);
return RC ( rcXML, rcDoc, rcConstructing, rcMemory, rcExhausted );
@@ -509,12 +511,15 @@ static rc_t s_KXMLNode_cTor(const KXMLNodeset *self,
obj->path = 0;
obj->children = children;
if (children) {
- /*TODO verify strlen(NULL)*/
size_t size = 0;
+ size_t path_size;
if (path)
- { size += strlen(path) + 1; }
+ { size += string_measure(path, &path_size) + 1; }
if (children->name)
- { size += strlen((char*)children->name); }
+ {
+ size_t sz;
+ size += string_measure((char*)children->name, &sz);
+ }
obj->path = (char*)malloc(size + 1);
if (!obj->path) {
free(obj);
@@ -522,7 +527,7 @@ static rc_t s_KXMLNode_cTor(const KXMLNodeset *self,
}
*obj->path = 0;
if (path && path[0]) {
- strcpy(obj->path, path);
+ string_copy(obj->path, size + 1, path, path_size);
strcat(obj->path, "/");
}
strcat(obj->path, (char*)children->name);
@@ -628,7 +633,8 @@ rc_t KXMLNodeVOpenNodesetRead ( const KXMLNode *self,
if (path[0] == '/')
{ newPath = outpath; }
else {
- if ((strlen(self->parent->path) + 1 + strlen(outpath) + 1 + 3)
+ size_t size;
+ if ((string_measure(self->parent->path, &size) + 1 + string_measure(outpath, &size) + 1 + 3)
> XPATH_MAX_LEN)
{
/* buffer is too small */
@@ -717,7 +723,8 @@ int s_KXMLNode_readTextNode(const xmlNodePtr firstChild,
while (node) {
if (node->type == XML_TEXT_NODE) {
char* content = (char*) node->content;
- size_t chunkSz = strlen(content);
+ size_t size;
+ size_t chunkSz = string_measure(content, &size);
switch (state) {
case eNotFound: {
if (offset < head + chunkSz) {
@@ -733,7 +740,7 @@ int s_KXMLNode_readTextNode(const xmlNodePtr firstChild,
}
if (size) {
assert(buffer);
- strncpy((char*) buffer + copied,
+ string_copy((char*) buffer + copied, bsize - copied,
content + chunkOffset, size);
}
copied += size;
@@ -753,7 +760,7 @@ int s_KXMLNode_readTextNode(const xmlNodePtr firstChild,
}
if (size) {
assert(buffer);
- strncpy((char*) buffer + copied,
+ string_copy((char*) buffer + copied, bsize - copied,
content + chunkOffset, size);
}
copied += size;
@@ -1172,9 +1179,10 @@ rc_t KXMLNodeReadCStr( const KXMLNode *self, char** str, const char* default_val
*str = NULL;
if( (rc = KXMLNodeReadCString(self, b, to_read, &nread)) == 0 ) {
if( nread == 0 && default_value != NULL ) {
- *str = strdup(default_value);
+ size_t size;
+ *str = string_dup(default_value, string_measure(default_value, &size));
} else {
- *str = strndup(b, nread);
+ *str = string_dup(b, nread);
}
if( *str == NULL ) {
rc = RC(rcXML, rcNode, rcReading, rcMemory, rcInsufficient);
@@ -1329,12 +1337,14 @@ rc_t KXMLNodeReadAttrCStr( const KXMLNode *self, const char *attr, char** str, c
*str = NULL;
if( (rc = KXMLNodeReadAttrCString(self, attr, b, to_read, &nread)) == 0 ) {
if( nread == 0 && default_value != NULL ) {
- *str = strdup(default_value);
+ size_t size;
+ *str = string_dup(default_value, string_measure(default_value, &size));
} else {
- *str = strndup(b, nread);
+ *str = string_dup(b, nread);
}
} else if( GetRCState(rc) == rcNotFound && default_value != NULL ) {
- *str = strdup(default_value);
+ size_t size;
+ *str = string_dup(default_value, string_measure(default_value, &size));
rc = 0;
}
if( rc == 0 && *str == NULL ) {
diff --git a/libs/kxml/xtoc-parsexml.c b/libs/kxml/xtoc-parsexml.c
index 541ed8a..b2093d2 100644
--- a/libs/kxml/xtoc-parsexml.c
+++ b/libs/kxml/xtoc-parsexml.c
@@ -25,11 +25,16 @@
#include "xtoc-priv.h" /* XTocParseXml */
-#include <klib/xml.h> /* KXMLNode */
+#include <kxml/xml.h> /* KXMLNode */
/* #include <klib/log.h> LOGERR */
#include <klib/debug.h> /* DBGMSG */
+#include <klib/printf.h>
+#include <klib/out.h>
#include <klib/rc.h> /* RC */
-#include <fmtdef.h>
+
+#include "os-native.h"
+
+#include <sysalloc.h>
#include <assert.h>
#include <stdio.h> /* printf */
@@ -176,12 +181,17 @@ rc_t CC StrToKTime(const char* str, KTime_t* t)
if (DEBUG_PRINT) {
time_t t2 = ( time_t ) * t;
- int len;
+ size_t len;
char buffer [ 64 ];
struct tm gmt;
+#if SUN
+ gmt = * gmtime ( & t2 );
+#else
gmtime_r ( & t2, & gmt );
- len = sprintf ( buffer, "%04d-%02d-%02dT%02d:%02d:%02dZ"
+#endif
+ rc = string_printf ( buffer, sizeof buffer, & len
+ , "%04d-%02d-%02dT%02d:%02d:%02dZ"
, gmt . tm_year + 1900
, gmt . tm_mon + 1
, gmt . tm_mday
@@ -190,8 +200,8 @@ rc_t CC StrToKTime(const char* str, KTime_t* t)
, gmt . tm_sec
);
- printf(">> %s\n", str);
- printf("<< %s\n", buffer);
+ OUTMSG((">> %s\n", str));
+ OUTMSG(("<< %s\n", buffer));
}
}
@@ -212,7 +222,7 @@ rc_t CC StrToKTime(const char* str, KTime_t* t)
"name=%s,attr=%s", data->nodeName, #V)); */
#define PRN_ATTR(NM, V) \
- if (DEBUG_PRINT && data->V) printf("%s=\"%s\" ", NM, data->V)
+ if (DEBUG_PRINT && data->V) OUTMSG(("%s=\"%s\" ", NM, data->V))
#define GET_ATTR(NODE, V) READ_ATTR(NODE, V); PRN_ATTR(#V, V)
@@ -223,7 +233,7 @@ static rc_t CC NodeDataReadAttribs(NodeData* data, const KXMLNode* node,
assert(node && parentName && data);
- if (DEBUG_PRINT) printf("<%s ", data->nodeName);
+ if (DEBUG_PRINT) OUTMSG(("<%s ", data->nodeName));
GET_ATTR(node, id);
GET_ATTR(node, path);
@@ -261,14 +271,14 @@ static rc_t CC NodeDataReadAttribs(NodeData* data, const KXMLNode* node,
}*/
if (DEBUG_PRINT)
{
- printf("%s=\"%" LU64 "\" ", attr, data->iSize);
- printf("%s=\"%" LU64 "\" ", attr, data->iOffset);
+ OUTMSG(("%s=\"%lu\" ", attr, data->iSize));
+ OUTMSG(("%s=\"%lu\" ", attr, data->iOffset));
}
}
- if (DEBUG_PRINT) printf(">");
- if (DEBUG_PRINT && data->nodeValue) printf("%s", data->nodeValue);
- if (DEBUG_PRINT) printf("</%s>\n", data->nodeName);
+ if (DEBUG_PRINT) OUTMSG((">"));
+ if (DEBUG_PRINT && data->nodeValue) OUTMSG(("%s", data->nodeValue));
+ if (DEBUG_PRINT) OUTMSG(("</%s>\n", data->nodeName));
return rc;
}
diff --git a/libs/kxml/xtoc.c b/libs/kxml/xtoc.c
index d5a2fd1..5d2dc22 100644
--- a/libs/kxml/xtoc.c
+++ b/libs/kxml/xtoc.c
@@ -26,7 +26,7 @@
#include <kfs/extern.h>
-#include <klib/xml.h>
+#include <kxml/xml.h>
#include <klib/defs.h>
#include <klib/container.h>
@@ -35,6 +35,7 @@
#include <klib/refcount.h>
#include <klib/vector.h>
#include <klib/log.h>
+#include <klib/out.h>
#include <klib/namelist.h>
#include <kfs/file.h>
@@ -42,6 +43,11 @@
#include <kfs/gzip.h>
#include <kfs/directory.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <sysalloc.h>
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -115,7 +121,7 @@ struct XTocEntry
XTocEntry_t type; /* XTocEntry_e */
union utype
{
- struct idtype
+ struct /* idtype - name conflict on Solaris */
{
XTocEntry * target;
} id;
@@ -234,6 +240,7 @@ rc_t XTocEntryResolvePath (const XTocEntry * self, const char * path_, bool foll
const char * path;
const char * limit;
XTocEntry * node;
+ size_t size;
assert (self);
assert (path_);
@@ -250,7 +257,7 @@ rc_t XTocEntryResolvePath (const XTocEntry * self, const char * path_, bool foll
/* this was causing a seg fault for some reason */
limit = path + string_size (path);
#else
- limit = path + strlen (path);
+ limit = path + string_measure(path, &size);
#endif
do
@@ -874,7 +881,7 @@ rc_t XTocMake (XToc ** pself, const String * base_path)
KRefcountInit (&self->refcount, 1, XTocClassname, "Init", base_path->addr);
rc = XTocEntryMakeInt (&self->root, "/", NULL, NULL,
- (KTime_t)time, 0);
+ (KTime_t)time(NULL), 0);
if (rc)
{
free (self);
@@ -1120,7 +1127,7 @@ static
rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
else
{
- rc = KFileInit (&self->dad, (const KFile_vt*)&vtKXTocFile, true, false);
+ rc = KFileInit (&self->dad, (const KFile_vt*)&vtKXTocFile, "KXTocFile", "no-name", true, false);
if (rc == 0)
{
rc = KFileAddRef (base);
@@ -1163,14 +1170,6 @@ static
}
-
-
-
-
-
-
-
-
struct KXTocDir
{
KDirectory dad;
@@ -1180,7 +1179,7 @@ struct KXTocDir
XTocEntry * entry;
XTocEntry * container;
XTocEntry * root;
- String base_path;
+ String base_path;
};
#if _DEBUGGING
@@ -1893,6 +1892,7 @@ rc_t KXTocDirRelativePath (const KXTocDir *self, enum RCContext ctx,
#else
int backup;
size_t bsize, psize;
+ size_t size;
const char *r = root + self -> root;
const char *p = path + self -> root;
@@ -1923,7 +1923,7 @@ rc_t KXTocDirRelativePath (const KXTocDir *self, enum RCContext ctx,
while (p [ -1 ] != '/') -- p;
/* the size of the remaining relative path */
- psize = strlen (p);
+ psize = string_measure(p, &size);
/* open up space if needed */
if ( (size_t)(p - path) < bsize )
@@ -1941,7 +1941,8 @@ rc_t KXTocDirRelativePath (const KXTocDir *self, enum RCContext ctx,
/* close gap */
if ( (size_t)( p - path ) > bsize )
{
- strcpy (& path [ bsize ], p);
+ size_t size;
+ string_copy (& path [ bsize ], path_max - bsize, p, measure_string(p, &size));
}
return 0;
@@ -2034,13 +2035,14 @@ rc_t CC KXTocDirVisit (const KXTocDir *self,
if (rc == 0)
{
+ size_t size;
KXTocDir * full_dir;
uint32_t path_size;
/* -----
* make a locally accessible private KDirectory/KXTocDir
*/
- for ( path_size = (uint32_t)strlen ( full_path );
+ for ( path_size = (uint32_t)string_measure( full_path, &size );
( path_size > self->root ) && ( full_path[ path_size - 1 ] == '/' );
-- path_size )
{}
@@ -2123,12 +2125,15 @@ static rc_t CC KXTocDirResolvePath (const KXTocDir *self,
rc_t rc;
const char * path;
+ KOutMsg ("+++++\n%s: absolute %d\n", __func__, absolute);
+
assert (self);
assert (resolved);
assert (path_);
*resolved = '\0';
rc = XTocMakePath (&path, false, path_, args);
+ KOutMsg ("%s: rc %R new '%s' old '%s'\n", __func__, rc, path, path_);
if (rc != 0)
{
PLOGERR (klogErr,
@@ -2136,24 +2141,41 @@ static rc_t CC KXTocDirResolvePath (const KXTocDir *self,
}
else
{
+ size_t path_sz = string_size(path);
+
if (absolute)
{
XTocEntry * entry;
rc = XTocEntryResolvePath (self->entry, path, false, &entry);
+
if (rc)
PLOGERR (klogErr,
- (klogErr, rc, "Error resolvong path based on $(P)", "P=%s", path_));
+ (klogErr, rc, "Error resolving path based on $(P)", "P=%s", path_));
else
{
free ((void*)path);
path = NULL;
rc = XTocEntryMakeFullPath (entry, &path);
+ if (rc == 0)
+ {
+ size_t k = self->toc->base_path.size;
+ if (k > 1)
+ {
+ memcpy (resolved, self->toc->base_path.addr, k);
+ resolved += k;
+ rsize -= k;
+ }
+ }
}
}
if (rc == 0)
- string_copy (resolved, rsize, path, string_size (path));
-
+ {
+ if (rsize < (path_sz - 1))
+ rc = RC(rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient);
+ else
+ string_copy(resolved, rsize, path, rsize);
+ }
if (path)
free ((void*)path);
}
@@ -2180,11 +2202,11 @@ static rc_t CC KXTocDirResolveAlias (const KXTocDir * self,
const char *path_,
va_list args)
{
-#if 1
+#if 0
return -1;
#else
rc_t rc;
- char * path;
+ const char * path;
assert (self);
assert (resolved);
@@ -2201,13 +2223,13 @@ static rc_t CC KXTocDirResolveAlias (const KXTocDir * self,
{
XTocEntry * entry;
- rc = XocEntryResolvePath (self->entry, path, true , &entry);
+ rc = XTocEntryResolvePath (self->entry, path, true , &entry);
if (rc)
PLOGERR (klogErr,
- (klogErr, rc, "Error resolvong path based on $(P)", "P=%s", path_));
+ (klogErr, rc, "Error resolving path based on $(P)", "P=%s", path_));
else
{
- free (path);
+ free ((void*)path);
path = NULL;
rc = XTocEntryMakeFullPath (entry, &path);
}
@@ -2220,7 +2242,7 @@ static rc_t CC KXTocDirResolveAlias (const KXTocDir * self,
string_copy (resolved, rsize, path, string_size (path));
if (path)
- free (path);
+ free ((void*)path);
return rc;
#endif
@@ -2402,7 +2424,7 @@ static rc_t CC KXTocDirVDate (const KXTocDir *self,
rc = XTocEntryResolvePath (self->entry, path, false, &entry);
if (rc)
PLOGERR (klogErr,
- (klogErr, rc, "Error resolveing path from $(P)", "P=%s", path_));
+ (klogErr, rc, "Error resolving path from $(P)", "P=%s", path_));
else
*date = entry->mtime;
free ((void*)path);
@@ -2739,7 +2761,7 @@ rc_t CC KXTocDirFileLocator (const KXTocDir *self,
rc = XTocEntryResolvePath (self->entry, path, false, &entry);
if (rc)
PLOGERR (klogErr,
- (klogErr, rc, "Error resolveing path from $(P)", "P=%s", path_));
+ (klogErr, rc, "Error resolving path from $(P)", "P=%s", path_));
else if (entry->type != xtoce_file)
rc = RC (rcFS, rcDirectory, rcAccessing, rcPath, rcIncorrect);
else
@@ -2785,7 +2807,7 @@ rc_t CC KXTocDirFileSize (const KXTocDir *self,
rc = XTocEntryResolvePath (self->entry, path, false, &entry);
if (rc)
PLOGERR (klogErr,
- (klogErr, rc, "Error resolveing path from $(P)", "P=%s", path_));
+ (klogErr, rc, "Error resolving path from $(P)", "P=%s", path_));
else if (entry->type != xtoce_file)
rc = RC (rcFS, rcDirectory, rcAccessing, rcPath, rcIncorrect);
else
@@ -2831,7 +2853,7 @@ rc_t CC KXTocDirFilePhysicalSize (const KXTocDir *self,
rc = XTocEntryResolvePath (self->entry, path, false, &entry);
if (rc)
PLOGERR (klogErr,
- (klogErr, rc, "Error resolveing path from $(P)", "P=%s", path_));
+ (klogErr, rc, "Error resolving path from $(P)", "P=%s", path_));
else if (entry->type != xtoce_file)
rc = RC (rcFS, rcDirectory, rcAccessing, rcPath, rcIncorrect);
else
@@ -2886,6 +2908,7 @@ rc_t CC KXTocDirOpenDirRead (const KXTocDir *self,
#else
char * full;
rc_t rc;
+ size_t size;
assert (self != NULL);
assert (subp != NULL);
@@ -2896,7 +2919,7 @@ rc_t CC KXTocDirOpenDirRead (const KXTocDir *self,
{
const KTocEntry * pnode;
KTocEntryType type;
- size_t path_size = strlen (full);
+ size_t path_size = string_measure (full, &size);
/* -----
* get rid of any extra '/' characters at the end of path
@@ -3163,9 +3186,70 @@ rc_t KXTocDirMake (const KXTocDir ** pself, const KDirectory * base,
}
-LIB_EXPORT rc_t CC KDirectoryOpenXTocDirRead (const KDirectory * self,
- const KDirectory ** pnew_dir,
- const char * base_path, const KFile * xml)
+static
+rc_t KDirectoryOpenXTocDirReadInt (const KDirectory * dir,
+ const KDirectory ** pnew_dir,
+ const KFile * xml,
+ const String * spath)
+{
+ XToc * xtoc;
+ rc_t rc;
+
+ rc = XTocMake (&xtoc, spath);
+ if (rc)
+ LOGERR (klogErr, rc, "Error creating toc for xtc directory");
+ else
+ {
+ String sroot;
+ XTocCache * cache;
+
+ StringInitCString (&sroot, ".");
+ rc = XTocMakeXTocCache (xtoc, &cache, &sroot, xtoc->root);
+ if (rc)
+ LOGERR (klogErr, rc,
+ "Failed to make cache for root for "
+ "xtoc directory");
+ else
+ {
+ const KXTocDir * xdir;
+
+ /* now that we have a cache node we should release
+ * the original reference to the xtoc */
+/* ??? */
+ XTocRelease (xtoc);
+
+ xtoc->cache = xtoc->root->cache = cache;
+
+ rc = KXTocDirMake (&xdir, dir, xtoc, cache, xtoc->root,
+ &sroot);
+ if (rc)
+ LOGERR (klogErr, rc, "Error making xtoc directory");
+ else
+ {
+ DBG_KXTocDir((xdir));
+ cache->dir = xdir;
+
+ rc = XTocParseXml (xtoc->root, xml);
+ if (rc)
+ LOGERR (klogErr, rc, "Error parsing copycat xml file");
+ else
+ {
+ *pnew_dir = &xdir->dad;
+ return 0;
+ }
+ KDirectoryRelease (&xdir->dad);
+ }
+ XTocCacheRelease (cache);
+ }
+ XTocRelease (xtoc);
+ }
+ return rc;
+}
+
+rc_t CC KDirectoryOpenXTocDirReadDir (const KDirectory * self,
+ const KDirectory ** pnew_dir,
+ const KFile * xml,
+ const String * spath)
{
rc_t rc;
@@ -3185,115 +3269,198 @@ LIB_EXPORT rc_t CC KDirectoryOpenXTocDirRead (const KDirectory * self,
LOGERR (klogErr, rc, "self is NULL for opening XToc Directory");
return rc;
}
- if (xml == NULL)
+ else if (xml == NULL)
{
rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
LOGERR (klogErr, rc, "xml parameter is NULL for opening XToc Directory");
return rc;
}
- if (base_path == NULL)
+ else if (spath == NULL)
{
rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
LOGERR (klogErr, rc, "base path parameter is NULL for opening XToc Directory");
return rc;
}
+ else
+ {
+ rc = KDirectoryOpenXTocDirReadInt (self, pnew_dir, xml, spath);
+ }
+ return rc;
+}
+
+rc_t CC KDirectoryVOpenXTocDirRead (const KDirectory * self,
+ const KDirectory ** pnew_dir,
+ bool chroot,
+ const KFile * xml,
+ const char * _path,
+ va_list args )
+{
+ rc_t rc;
+
+ /* loosely validate parameters */
+ if (pnew_dir == NULL)
+ {
+ rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
+ LOGERR (klogErr, rc,
+ "new directory parameter is NULL for opening XToc Directory");
+ return rc;
+ }
+ *pnew_dir = NULL;
+
+ if (self == NULL)
+ {
+ rc = RC (rcFS, rcDirectory, rcOpening, rcSelf, rcNull);
+ LOGERR (klogErr, rc, "self is NULL for opening XToc Directory");
+ return rc;
+ }
+ else if (xml == NULL)
+ {
+ rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
+ LOGERR (klogErr, rc, "xml parameter is NULL for opening XToc Directory");
+ return rc;
+ }
+ else if (_path == NULL)
+ {
+ rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
+ LOGERR (klogErr, rc, "base path parameter is NULL for opening XToc Directory");
+ return rc;
+ }
+ else
/* okay none of our parameters are NULL; they could still be bad but let's start */
{
- size_t base_path_size; /* utf-8 bytes (not characters) in the passed in base path */
- char * slash; /* find the last slash in the given path */
- char * base_path_dir; /* path leading up to the file in the path */
- bool free_base_path_dir = true;
+ String spath;
+ const KDirectory * bdir;
+ KPathType type;
+ char path [8192];
- base_path_size = string_size (base_path);
- slash = string_rchr (base_path, base_path_size, '/');
+ rc = KDirectoryVResolvePath (self, true, path, sizeof path, _path, args);
+ if (rc)
+ return rc;
- if (slash)
+ type = KDirectoryPathType (self, path);
+ switch (type & ~kptAlias)
{
- base_path_dir = malloc ((slash - base_path) + 1);
- if (base_path_dir == NULL)
- {
- rc = RC (rcFS, rcDirectory, rcConstructing, rcMemory, rcExhausted);
- LOGERR (klogErr, rc, "Error allocating memory to build xtoc directory");
- return rc;
- }
- string_copy (base_path_dir, ((slash - base_path) + 1),
- base_path, (slash - base_path));
+ case kptNotFound:
+ rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNotFound);
+ LOGERR (klogErr, rc, "base path parameter is not found when opening XToc Directory");
+ return rc;
+
+ case kptBadPath:
+ rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcInvalid);
+ LOGERR (klogErr, rc, "base path parameter is a bad path when opening XToc Directory");
+ return rc;
+
+ case kptFile:
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ case kptDataset:
+ case kptDatatype:
+ KOutMsg ("%s: type '%u' path '%s'\n",type,path);
+ rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcWrongType);
+ LOGERR (klogErr, rc, "base path parameter is an unusable type when opening XToc Directory");
+ return rc;
+
+ default:
+ rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcCorrupt);
+ LOGERR (klogErr, rc, "base path parameter is not a known type when opening XToc Directory");
+ return rc;
+
+ case kptDir:
+ break;
}
- else
+
+ rc = KDirectoryVOpenDirRead (self, &bdir, true, path, args);
+ if (rc)
{
- free_base_path_dir = false;
- base_path_dir = "/";
+ LOGERR (klogErr, rc, "failed to open base directory for XToc directory");
+ return rc;
}
+ else
{
- const KDirectory * base;
+ static const char absroot[] = "/";
- rc = KDirectoryOpenDirRead (self, &base, true, base_path_dir);
- if (rc)
- LOGERR (klogErr, rc, "Error opening directory for xtoc directory");
+ if (chroot)
+ StringInitCString (&spath, absroot);
else
- {
- String sbase;
- XToc * toc;
+ StringInitCString (&spath, path);
- StringInitCString (&sbase, base_path_dir);
+ rc = KDirectoryOpenXTocDirReadInt (bdir, pnew_dir, xml, &spath);
+ if (rc == 0)
+ return 0;
- rc = XTocMake (&toc, &sbase);
- if (rc)
- LOGERR (klogErr, rc, "Error creating toc for xtc directory");
- else
- {
- XTocCache * cache;
- String sroot;
+ KDirectoryRelease (bdir);
+ }
+ }
+ return rc;
+}
- StringInitCString (&sroot, ".");
- rc = XTocMakeXTocCache (toc, &cache, &sroot, toc->root);
- if (rc)
- LOGERR (klogErr, rc,
- "Failed to make cache for root for "
- "xtoc directory");
- else
- {
- const KXTocDir * xdir;
+rc_t CC KDirectoryOpenXTocDirRead (const KDirectory * self,
+ const KDirectory ** pnew_dir,
+ bool chroot,
+ const KFile * xml,
+ const char * path, ... )
+{
+ rc_t rc;
+ va_list args;
- /* now that we have a cache node we should release
- * the original reference to the xtoc */
- XTocRelease (toc);
+ va_start (args, path);
+ rc = KDirectoryVOpenXTocDirRead (self, pnew_dir, chroot, xml, path, args);
+ va_end (args);
- toc->cache = toc->root->cache = cache;
+ return rc;
+}
- rc = KXTocDirMake (&xdir, base, toc, cache, toc->root,
- &sroot);
- /* done with our reference to base */
- if (rc)
- LOGERR (klogErr, rc, "Error making xtoc directory");
- else
- {
- DBG_KXTocDir((xdir));
- cache->dir = xdir;
- rc = XTocParseXml (toc->root, xml);
- if (rc)
- LOGERR (klogErr, rc, "Error parsing copycat xml file");
- else
- {
- *pnew_dir = &xdir->dad;
- if (free_base_path_dir)
- free (base_path_dir);
- return 0;
- }
- KDirectoryRelease (&xdir->dad);
- }
- }
- }
- KDirectoryRelease (base);
+struct VFSManager;
+
+rc_t CC VFSManagerOpenXTocDirRead (const struct VFSManager * self,
+ const struct KDirectory ** pnew_dir,
+ const struct KFile * xml,
+ const struct VPath * path)
+{
+ rc_t rc = 0;
+
+ /* needs to be replaced with proper checking and rc returns */
+ assert (pnew_dir);
+
+ *pnew_dir = NULL;
+
+ assert (self);
+ assert (xml);
+ assert (path);
+
+ if (rc == 0)
+ {
+ const KDirectory * dir;
+
+ rc = VFSManagerOpenDirectoryRead (self, &dir, path);
+ if (rc == 0)
+ {
+ char pbuff [8192];
+ size_t z;
+
+ rc = VPathReadPath (path, pbuff, sizeof pbuff, &z);
+ if (rc == 0)
+ {
+ String string;
+
+ StringInit (&string, pbuff, z, string_len (pbuff, z));
+
+ rc = KDirectoryOpenXTocDirReadDir (dir, pnew_dir, xml, &string);
+ if (rc == 0)
+ return 0;
}
- if (free_base_path_dir)
- free (base_path_dir);
- }
- }
+
+ KDirectoryRelease (dir);
+ }
+ }
return rc;
}
+
+
/* end of file */
diff --git a/libs/loader/Makefile b/libs/loader/Makefile
new file mode 100644
index 0000000..3e42909
--- /dev/null
+++ b/libs/loader/Makefile
@@ -0,0 +1,99 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: all
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/loader
+
+INT_LIBS = \
+ libloader
+
+EXT_LIBS = \
+
+ALL_LIBS = \
+ $(INT_LIBS) \
+ $(EXT_LIBS)
+
+TEST_TOOLS =
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): makedirs
+ @ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+ @ $(MAKE_CMD) $(LIBDIR)/$@
+
+$(TEST_TOOLS): std makedirs
+ @ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+ $(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# libloader
+#
+$(ILIBDIR)/libloader: $(ILIBDIR)/libloader.$(LIBX)
+
+LOADER_SRC = \
+ mmarray \
+ common-reader \
+ common-writer \
+ sequence-writer \
+ reference-writer \
+ alignment-writer
+
+LOADER_OBJ = \
+ $(addsuffix .$(LOBX),$(LOADER_SRC))
+
+LOADER_LIB = \
+
+$(ILIBDIR)/libloader.$(SHLX): $(LOADER_OBJ)
+ $(LD) --dlib -o $@ $^ $(LOADER_LIB)
+
+$(ILIBDIR)/libloader.$(LIBX): $(LOADER_OBJ)
+ $(LD) --slib -o $@ $^ $(LOADER_LIB)
+
diff --git a/libs/loader/alignment-writer.c b/libs/loader/alignment-writer.c
new file mode 100644
index 0000000..005d7f1
--- /dev/null
+++ b/libs/loader/alignment-writer.c
@@ -0,0 +1,226 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <sysalloc.h>
+#include <klib/out.h>
+
+#include <vdb/vdb-priv.h>
+
+#include <loader/alignment-writer.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+enum e_tables {
+ tblPrimary,
+ tblSecondary,
+ tblN
+};
+
+struct AlignmentWriter {
+ VDatabase *db;
+ TableWriterAlgn const *tbl[tblN];
+ int64_t rowId;
+ int st;
+};
+
+AlignmentWriter *AlignmentMake(VDatabase *db) {
+ AlignmentWriter *self = calloc(1, sizeof(*self));
+
+ if (self) {
+ self->db = db;
+ VDatabaseAddRef(self->db);
+ }
+ return self;
+}
+
+static rc_t SetColumnDefaults(TableWriterAlgn const *tbl)
+{
+ return 0;
+}
+
+static rc_t WritePrimaryRecord(AlignmentWriter *const self, AlignmentRecord *const data, bool expectUnsorted)
+{
+ if (self->tbl[tblPrimary] == NULL) {
+ rc_t rc = TableWriterAlgn_Make(&self->tbl[tblPrimary], self->db,
+ ewalgn_tabletype_PrimaryAlignment,
+ ewalgn_co_TMP_KEY_ID +
+ (expectUnsorted ? ewalgn_co_unsorted : 0));
+ if (rc)
+ return rc;
+ rc = SetColumnDefaults(self->tbl[tblPrimary]);
+ if (rc)
+ return rc;
+ }
+ return TableWriterAlgn_Write(self->tbl[tblPrimary], &data->data, &data->alignId);
+}
+
+static rc_t WriteSecondaryRecord(AlignmentWriter *const self, AlignmentRecord *const data, bool expectUnsorted)
+{
+ if (self->tbl[tblSecondary] == NULL) {
+ rc_t rc = TableWriterAlgn_Make(&self->tbl[tblSecondary], self->db,
+ ewalgn_tabletype_SecondaryAlignment,
+ ewalgn_co_TMP_KEY_ID +
+ (expectUnsorted ? ewalgn_co_unsorted : 0));
+ if (rc)
+ return rc;
+ rc = SetColumnDefaults(self->tbl[tblSecondary]);
+ if (rc)
+ return rc;
+ }
+#if 1
+ /* try to make consistent with cg-load */
+ if (data->mate_ref_pos == 0) {
+ data->data.mate_ref_orientation.elements = 0;
+ }
+#endif
+ return TableWriterAlgn_Write(self->tbl[tblSecondary], &data->data, &data->alignId);
+}
+
+rc_t AlignmentWriteRecord(AlignmentWriter *const self, AlignmentRecord *const data, bool expectUnsorted)
+{
+ return data->isPrimary ? WritePrimaryRecord(self, data, expectUnsorted) : WriteSecondaryRecord(self, data, expectUnsorted);
+}
+
+rc_t AlignmentStartUpdatingSpotIds(AlignmentWriter *const self)
+{
+ return 0;
+}
+
+rc_t AlignmentGetSpotKey(AlignmentWriter *const self, uint64_t * keyId)
+{
+ rc_t rc;
+
+ switch (self->st) {
+ case 0:
+ rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblPrimary]);
+ if (rc)
+ break;
+ self->rowId = 0;
+ ++self->st;
+ case 1:
+ rc = TableWriterAlgn_TmpKey(self->tbl[tblPrimary], ++self->rowId, keyId);
+ if (rc == 0)
+ break;
+ ++self->st;
+ if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow || self->tbl[tblSecondary] == NULL)
+ break;
+ case 2:
+ rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblSecondary]);
+ if (rc)
+ break;
+ self->rowId = 0;
+ ++self->st;
+ case 3:
+ rc = TableWriterAlgn_TmpKey(self->tbl[tblSecondary], ++self->rowId, keyId);
+ if (rc == 0)
+ break;
+ if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow)
+ break;
+ ++self->st;
+ break;
+ default:
+ rc = RC(rcAlign, rcTable, rcUpdating, rcError, rcIgnored);
+ break;
+ }
+ return rc;
+}
+
+rc_t AlignmentWriteSpotId(AlignmentWriter * const self, int64_t const spotId)
+{
+ switch (self->st) {
+ case 1:
+ return TableWriterAlgn_Write_SpotId(self->tbl[tblPrimary], self->rowId, spotId);
+ case 3:
+ return TableWriterAlgn_Write_SpotId(self->tbl[tblSecondary], self->rowId, spotId);
+ default:
+ return RC(rcAlign, rcTable, rcUpdating, rcSelf, rcInconsistent);
+ }
+}
+
+rc_t AlignmentWhack(AlignmentWriter * const self, bool const commit)
+{
+ rc_t const rc = TableWriterAlgn_Whack(self->tbl[tblPrimary], commit, NULL);
+ rc_t const rc2 = self->tbl[tblSecondary] ? TableWriterAlgn_Whack(self->tbl[tblSecondary], commit | (rc == 0), NULL) : 0;
+
+ VDatabaseRelease(self->db);
+ free(self);
+ return rc ? rc : rc2;
+}
+
+void AlignmentRecordInit(AlignmentRecord *self, void *buffer, unsigned readlen, char **endp, bool expectUnsorted)
+{
+ memset(self, 0, sizeof(*self));
+
+ self->data.seq_read_id.buffer = &self->read_id;
+ self->data.seq_read_id.elements = 1;
+ self->data.ref_id.buffer = &self->ref_id;
+ self->data.ref_id.elements = 1;
+ if (expectUnsorted) {
+ self->data.ref_start.buffer = &self->ref_start;
+ self->data.ref_start.elements = 1;
+ }
+ else {
+ self->data.global_ref_start.buffer = &self->global_ref_start;
+ self->data.global_ref_start.elements = 1;
+ }
+ self->data.ref_orientation.buffer = &self->ref_orientation;
+ self->data.ref_orientation.elements = 1;
+ self->data.mapq.buffer = &self->mapq;
+ self->data.mapq.elements = 1;
+ self->data.tmp_key_id.buffer = &self->tmp_key_id;
+ self->data.tmp_key_id.elements = 1;
+
+ self->data.read_start.buffer = &self->read_start;
+ self->data.read_start.elements = 1;
+ self->data.read_len.buffer = &self->read_len;
+ self->data.read_len.elements = 1;
+
+ self->data.mate_ref_orientation.buffer = &self->mate_ref_orientation;
+ self->data.mate_ref_orientation.elements = 1;
+ self->data.mate_ref_id.buffer = &self->mate_ref_id;
+ self->data.mate_ref_id.elements = 1;
+ self->data.mate_ref_pos.buffer = &self->mate_ref_pos;
+ self->data.mate_ref_pos.elements = 1;
+ self->data.mate_align_id.buffer = &self->mate_align_id;
+ self->data.mate_align_id.elements = 1;
+ self->data.template_len.buffer = &self->template_len;
+ self->data.template_len.elements = 1;
+
+ self->data.ref_offset.buffer = (int32_t *)buffer;
+ self->data.has_mismatch.buffer = (bool *)&AR_OFFSET(*self)[readlen];
+ self->data.has_mismatch.elements = readlen;
+ self->data.has_ref_offset.buffer = &AR_HAS_MISMATCH(*self)[readlen];
+ self->data.has_ref_offset.elements = readlen;
+ self->data.mismatch.buffer = (char *)&AR_HAS_OFFSET(*self)[readlen];
+
+ *endp = (char *)&AR_MISMATCH(*self)[readlen];
+}
+
+
diff --git a/libs/loader/common-reader.c b/libs/loader/common-reader.c
new file mode 100644
index 0000000..3839d42
--- /dev/null
+++ b/libs/loader/common-reader.c
@@ -0,0 +1,614 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <loader/common-reader-priv.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include <klib/rc.h>
+
+/*--------------------------------------------------------------------------
+ ReaderFile
+ */
+rc_t CC ReaderFileAddRef ( const ReaderFile *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "ReaderFile" ) )
+ {
+ case krefLimit:
+ return RC ( RC_MODULE, rcFile, rcAttaching, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+rc_t CC ReaderFileRelease ( const ReaderFile *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "ReaderFile" ) )
+ {
+ case krefWhack:
+ return self->vt.v1->destroy( (ReaderFile *)self );
+ case krefLimit:
+ return RC ( RC_MODULE, rcFile, rcReleasing, rcRange, rcExcessive );
+ }
+ }
+ return 0;
+}
+
+rc_t CC ReaderFileGetRecord( const ReaderFile *self, const Record** result)
+{
+ assert(self);
+ assert(result);
+ return self->vt.v1->getRecord( self, result );
+}
+
+float CC ReaderFileGetProportionalPosition ( const READERFILE_IMPL *self )
+{
+ assert(self);
+ assert(self->vt.v1->getProportionalPosition);
+ return self->vt.v1->getProportionalPosition( self );
+}
+
+rc_t CC ReaderFileGetReferenceInfo ( const ReaderFile *self, const ReferenceInfo** result )
+{
+ assert(self);
+ assert(self->vt.v1->getReferenceInfo);
+ return self->vt.v1->getReferenceInfo( self, result );
+}
+
+/* Init
+ * polymorphic parent constructor
+ */
+rc_t CC ReaderFileInit ( ReaderFile *self )
+{
+ if ( self == NULL )
+ return RC ( RC_MODULE, rcFileFormat, rcConstructing, rcSelf, rcNull );
+
+ KRefcountInit ( & self -> refcount, 1, "ReaderFile", "ReaderFileInit", "");
+
+ self->pathname = NULL;
+
+ return 0;
+}
+
+rc_t CC ReaderFileWhack ( ReaderFile *self )
+{
+ if ( self == NULL )
+ return RC ( RC_MODULE, rcFileFormat, rcConstructing, rcSelf, rcNull );
+
+ free( self->pathname );
+
+ return 0;
+}
+
+const char* CC ReaderFileGetPathname ( const ReaderFile *self )
+{
+ if ( self == NULL )
+ return NULL;
+ return self->pathname;
+}
+
+/*--------------------------------------------------------------------------
+ Record
+ */
+
+rc_t CC RecordAddRef ( const Record *self )
+{
+ assert(self);
+ assert(self->vt.v1->addRef);
+ return self->vt.v1->addRef(self);
+}
+
+rc_t CC RecordRelease ( const Record *self )
+{
+ assert(self);
+ assert(self->vt.v1->release);
+ return self->vt.v1->release(self);
+}
+
+rc_t CC RecordGetSequence ( const Record *self, const Sequence** result)
+{
+ assert(self);
+ assert(result);
+ assert(self->vt.v1->getSequence);
+ return self->vt.v1->getSequence(self, result);
+}
+
+rc_t CC RecordGetAlignment( const Record *self, const Alignment** result)
+{
+ assert(self);
+ assert(result);
+ assert(self->vt.v1->getAlignment);
+ return self->vt.v1->getAlignment(self, result);
+}
+
+rc_t CC RecordGetRejected ( const Record *self, const Rejected** result)
+{
+ assert(self);
+ assert(result);
+ assert(self->vt.v1->getRejected);
+ return self->vt.v1->getRejected(self, result);
+}
+
+/*--------------------------------------------------------------------------
+ Sequence
+ */
+rc_t CC SequenceAddRef ( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->addRef);
+ return self->vt.v1->addRef(self);
+}
+
+rc_t CC SequenceRelease ( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->release);
+ return self->vt.v1->release(self);
+}
+
+rc_t CC SequenceGetReadLength ( const Sequence *self, uint32_t *length )
+{
+ assert(self);
+ assert(length);
+ assert(self->vt.v1->getReadLength);
+ return self->vt.v1->getReadLength(self, length);
+}
+
+rc_t CC SequenceGetRead( const Sequence *self, char *sequence )
+{
+ assert(self);
+ assert(sequence);
+ assert(self->vt.v1->getRead);
+ return self->vt.v1->getRead(self, sequence);
+}
+
+rc_t CC SequenceGetRead2 ( const Sequence *self, char *sequence, uint32_t start, uint32_t stop)
+{
+ assert(self);
+ assert(sequence);
+ assert(self->vt.v1->getRead2);
+ return self->vt.v1->getRead2(self, sequence, start, stop);
+}
+
+rc_t CC SequenceGetQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType)
+{
+ assert(self);
+ assert(quality);
+ assert(offset);
+ assert(qualType);
+ assert(self->vt.v1->getQuality);
+ return self->vt.v1->getQuality(self, quality, offset, qualType);
+}
+
+rc_t CC SequenceGetSpotGroup ( const Sequence *self, const char **name, size_t *length )
+{
+ assert(self);
+ assert(name);
+ assert(length);
+ assert(self->vt.v1->getSpotGroup);
+ return self->vt.v1->getSpotGroup(self, name, length);
+}
+
+rc_t CC SequenceGetSpotName ( const Sequence *self, const char **name, size_t *length )
+{
+ assert(self);
+ assert(name);
+ assert(length);
+ assert(self->vt.v1->getSpotName);
+ return self->vt.v1->getSpotName(self, name, length);
+}
+
+bool CC SequenceIsColorSpace ( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->isColorSpace);
+ return self->vt.v1->isColorSpace(self);
+}
+
+rc_t CC SequenceGetCSKey ( const Sequence *self, char cskey[1] )
+{
+ assert(self);
+ assert(self->vt.v1->getCSKey);
+ return self->vt.v1->getCSKey(self, cskey);
+}
+
+rc_t CC SequenceGetCSReadLength ( const Sequence *self, uint32_t *length )
+{
+ assert(self);
+ assert(self->vt.v1->getCSReadLength);
+ return self->vt.v1->getCSReadLength(self, length);
+}
+
+rc_t CC SequenceGetCSRead( const Sequence *self, char *sequence )
+{
+ assert(self);
+ assert(self->vt.v1->getCSRead);
+ return self->vt.v1->getCSRead(self, sequence);
+}
+
+rc_t CC SequenceGetCSQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType)
+{
+ assert(self);
+ assert(quality);
+ assert(offset);
+ assert(qualType);
+ assert(self->vt.v1->getCSQuality);
+ return self->vt.v1->getCSQuality(self, quality, offset, qualType);
+}
+
+bool CC SequenceWasPaired ( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->wasPaired);
+ return self->vt.v1->wasPaired(self);
+}
+
+int CC SequenceGetOrientationSelf( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->orientationSelf);
+ return self->vt.v1->orientationSelf(self);
+}
+
+int CC SequenceGetOrientationMate( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->orientationMate);
+ return self->vt.v1->orientationMate(self);
+}
+
+bool CC SequenceIsFirst ( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->isFirst);
+ return self->vt.v1->isFirst(self);
+}
+
+bool CC SequenceIsSecond ( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->isSecond);
+ return self->vt.v1->isSecond(self);
+}
+
+rc_t SequenceGetTI(Sequence const *self, uint64_t *ti)
+{
+ assert(self);
+ assert(ti);
+ assert(self->vt.v1->getTI);
+ return self->vt.v1->getTI(self, ti);
+}
+
+bool CC SequenceIsDuplicate( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->isDuplicate);
+ return self->vt.v1->isDuplicate(self);
+}
+
+bool CC SequenceIsLowQuality( const Sequence *self )
+{
+ assert(self);
+ assert(self->vt.v1->isLowQuality);
+ return self->vt.v1->isLowQuality(self);
+}
+
+/*--------------------------------------------------------------------------
+ Alignment
+ */
+
+rc_t CC AlignmentAddRef ( const Alignment *self )
+{
+ assert(self);
+ assert(self->vt.v1->addRef);
+ return self->vt.v1->addRef(self);
+}
+
+rc_t CC AlignmentRelease ( const Alignment *self )
+{
+ assert(self);
+ assert(self->vt.v1->release);
+ return self->vt.v1->release(self);
+}
+
+rc_t CC AlignmentGetRefSeqId ( const Alignment *self, int32_t *refSeqId )
+{
+ assert(self);
+ assert(refSeqId);
+ assert(self->vt.v1->getRefSeqId);
+ return self->vt.v1->getRefSeqId(self, refSeqId);
+}
+
+rc_t CC AlignmentGetMateRefSeqId ( const Alignment *self, int32_t *refSeqId )
+{
+ assert(self);
+ assert(refSeqId);
+ assert(self->vt.v1->getMateRefSeqId);
+ return self->vt.v1->getMateRefSeqId(self, refSeqId);
+}
+
+rc_t CC AlignmentGetPosition ( const Alignment *self, int64_t *pos )
+{
+ assert(self);
+ assert(pos);
+ assert(self->vt.v1->getPosition);
+ return self->vt.v1->getPosition(self, pos);
+}
+
+rc_t CC AlignmentGetMatePosition ( const Alignment *self, int64_t *pos )
+{
+ assert(self);
+ assert(pos);
+ assert(self->vt.v1->getMatePosition);
+ return self->vt.v1->getMatePosition(self, pos);
+}
+
+rc_t CC AlignmentGetMapQuality ( const Alignment *self, uint8_t *qual )
+{
+ assert(self);
+ assert(qual);
+ assert(self->vt.v1->getMapQuality);
+ return self->vt.v1->getMapQuality(self, qual);
+}
+
+rc_t CC AlignmentGetAlignmentDetail ( const Alignment *self,
+ AlignmentDetail *rslt,
+ uint32_t count,
+ uint32_t *actual,
+ int32_t *firstMatch,
+ int32_t *lastMatch )
+{
+ assert(self);
+ assert(self->vt.v1->getAlignmentDetail);
+ return self->vt.v1->getAlignmentDetail(self, rslt, count, actual, firstMatch, lastMatch);
+}
+
+rc_t CC AlignmentGetAlignOpCount ( const Alignment *self, uint32_t *n )
+{
+ assert(self);
+ assert(n);
+ assert(self->vt.v1->getAlignOpCount);
+ return self->vt.v1->getAlignOpCount(self, n);
+}
+
+rc_t CC AlignmentGetInsertSize ( const Alignment *self, int64_t *size )
+{
+ assert(self);
+ assert(size);
+ assert(self->vt.v1->getInsertSize);
+ return self->vt.v1->getInsertSize(self, size);
+}
+
+rc_t AlignmentGetCGData ( const ALIGNMENT_IMPL *self, const CGData** result)
+{
+ assert(self);
+ assert(result);
+ assert(self->vt.v1->getCG);
+ return self->vt.v1->getCG(self, result);
+}
+
+rc_t AlignmentGetBAMCigar ( const ALIGNMENT_IMPL *self, uint32_t const **rslt, uint32_t *length )
+{
+ assert(self);
+ assert(rslt);
+ assert(length);
+ assert(self->vt.v1->getBAMCigar);
+ return self->vt.v1->getBAMCigar(self, rslt, length);
+}
+
+bool AlignmentIsSecondary( const Alignment *self )
+{
+ assert(self);
+ assert(self->vt.v1->isSecondary);
+ return self->vt.v1->isSecondary(self);
+}
+
+/*--------------------------------------------------------------------------
+ * CGData
+ */
+rc_t CC CGDataAddRef ( const CGData *self )
+{
+ assert(self);
+ assert(self->vt.v1->addRef);
+ return self->vt.v1->addRef(self);
+}
+
+rc_t CC CGDataRelease ( const CGData *self )
+{
+ assert(self);
+ assert(self->vt.v1->release);
+ return self->vt.v1->release(self);
+}
+
+/* CGGetSeqQual
+ */
+rc_t CC CGDataGetSeqQual ( const CGData* self,
+ char sequence[/* 35 */],
+ uint8_t quality[/* 35 */] )
+{
+ assert(self);
+ assert(sequence);
+ assert(quality);
+ assert(self->vt.v1->getSeqQual);
+ return self->vt.v1->getSeqQual(self, sequence, quality);
+}
+
+/* CGGetCigar
+ */
+rc_t CC CGDataGetCigar ( const CGData* self,
+ uint32_t *cigar,
+ uint32_t cig_max,
+ uint32_t *cig_act )
+{
+ assert(self);
+ assert(cigar);
+ assert(cig_act);
+ assert(self->vt.v1->getCigar);
+ return self->vt.v1->getCigar(self, cigar, cig_max, cig_act);
+}
+
+/* CGGetAlignGroup
+ */
+rc_t CC CGDataGetAlignGroup ( const CGData* self,
+ char buffer[],
+ size_t max_size,
+ size_t *act_size )
+{
+ assert(self);
+ assert(act_size);
+ assert(self->vt.v1->getAlignGroup);
+ return self->vt.v1->getAlignGroup(self, buffer, max_size, act_size);
+}
+
+/*--------------------------------------------------------------------------
+ * Rejected
+ */
+
+rc_t CC RejectedInit ( Rejected *self )
+{
+ KRefcountInit ( & self -> refcount, 1, "Rejected", "RejectedInit", "");
+ StringInit(&self->source, 0, 0, 0);
+ self->message = 0;
+ self->column = 0;
+ self->line = 0;
+ self->fatal = false;
+ return 0;
+}
+
+static rc_t CC RejectedWhack ( const Rejected *self )
+{
+ free( (void*)self->source.addr );
+ free( (void*)self->message );
+ free( (void*)self );
+ return 0;
+}
+
+rc_t CC RejectedAddRef ( const Rejected *self )
+{
+ assert(self);
+ KRefcountAdd( & self->refcount, "Rejected" );
+ /* TODO: handle rc from KRefcountAdd */
+ return 0;
+}
+
+rc_t CC RejectedRelease ( const Rejected *self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "Rejected" ) )
+ {
+ case krefWhack:
+ RejectedWhack( self );
+ break;
+ default:
+ /* TODO: handle other values */
+ break;
+ }
+ }
+ return 0;
+}
+
+rc_t CC RejectedGetError( const Rejected* self, const char** text, uint64_t* line, uint64_t* column, bool* fatal )
+{
+ assert(self);
+ assert(text);
+ assert(line);
+ assert(column);
+ *text = self->message;
+ *line = self->line;
+ *column = self->column;
+ *fatal = self->fatal;
+ return 0;
+}
+
+rc_t CC RejectedGetData( const Rejected* self, const void** data, size_t* length )
+{
+ assert(self);
+ assert(data);
+ assert(length);
+ *data = self->source.addr;
+ *length = StringSize( & self->source );
+ return 0;
+}
+
+/*--------------------------------------------------------------------------
+ * ReferenceInfo
+ */
+rc_t CC ReferenceInfoAddRef ( const ReferenceInfo *self )
+{
+ assert(self);
+ assert(self->vt.v1->addRef);
+ return self->vt.v1->addRef(self);
+}
+
+rc_t CC ReferenceInfoRelease ( const ReferenceInfo *self )
+{
+ assert(self);
+ assert(self->vt.v1->release);
+ return self->vt.v1->release(self);
+}
+
+rc_t CC ReferenceInfoGetRefSeqCount ( const ReferenceInfo *self, uint32_t* count )
+{
+ assert(self);
+ assert(self->vt.v1->getRefSeqCount);
+ return self->vt.v1->getRefSeqCount(self, count);
+}
+
+rc_t CC ReferenceInfoGetRefSeq ( const ReferenceInfo *self, uint32_t n, ReferenceSequence *result )
+{
+ assert(self);
+ assert(self->vt.v1->getRefSeq);
+ return self->vt.v1->getRefSeq(self, n, result);
+}
+
+rc_t CC ReferenceInfoGetReadGroupCount ( const ReferenceInfo *self, uint32_t *count )
+{
+ assert(self);
+ assert(self->vt.v1->getReadGroupCount);
+ return self->vt.v1->getReadGroupCount(self, count);
+}
+
+rc_t CC ReferenceInfoGetReadGroup ( const ReferenceInfo *self, unsigned n, ReadGroup *result )
+{
+ assert(self);
+ assert(self->vt.v1->getReadGroup);
+ return self->vt.v1->getReadGroup(self, n, result);
+}
+
+rc_t CC ReferenceInfoGetReadGroupByName ( const ReferenceInfo *self, const char *name, ReadGroup *result )
+{
+ assert(self);
+ assert(self->vt.v1->getReadGroupByName );
+ return self->vt.v1->getReadGroupByName(self, name, result);
+}
diff --git a/libs/loader/common-writer.c b/libs/loader/common-writer.c
new file mode 100644
index 0000000..827f481
--- /dev/null
+++ b/libs/loader/common-writer.c
@@ -0,0 +1,1987 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <sysalloc.h>
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <klib/status.h>
+
+#include <kdb/btree.h>
+
+#include <kfs/pmem.h>
+#include <kfs/file.h>
+#include <kfs/pagefile.h>
+
+#include <kapp/progressbar.h>
+#include <kapp/main.h>
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+
+#include <loader/sequence-writer.h>
+#include <loader/alignment-writer.h>
+#include <loader/reference-writer.h>
+#include <loader/common-writer.h>
+#include <loader/common-reader-priv.h>
+
+/*--------------------------------------------------------------------------
+ * ctx_value_t, FragmentInfo
+ */
+typedef struct {
+ uint32_t primaryId[2];
+ uint32_t spotId;
+ uint32_t fragmentId;
+ uint16_t seqHash[2];
+ uint8_t platform;
+ uint8_t pId_ext[2];
+ uint8_t spotId_ext;
+ uint8_t alignmentCount[2]; /* 0..254; 254: saturated max; 255: special meaning "too many" */
+ uint8_t unmated: 1,
+ pcr_dup: 1,
+ has_a_read: 1,
+ unaligned_1: 1,
+ unaligned_2: 1;
+} ctx_value_t;
+
+#define CTX_VALUE_SET_P_ID(O,N,V) do { int64_t tv = (V); (O).primaryId[N] = (uint32_t)tv; (O).pId_ext[N] = tv >> 32; } while(0);
+#define CTX_VALUE_GET_P_ID(O,N) ((((int64_t)((O).pId_ext[N])) << 32) | (O).primaryId[N])
+
+#define CTX_VALUE_SET_S_ID(O,V) do { int64_t tv = (V); (O).spotId = (uint32_t)tv; (O).spotId_ext = tv >> 32; } while(0);
+#define CTX_VALUE_GET_S_ID(O) ((((int64_t)(O).spotId_ext) << 32) | (O).spotId)
+
+typedef struct FragmentInfo {
+ uint64_t ti;
+ uint32_t readlen;
+ uint8_t aligned;
+ uint8_t is_bad;
+ uint8_t orientation;
+ uint8_t otherReadNo;
+ uint8_t sglen;
+ uint8_t cskey;
+} FragmentInfo;
+
+
+rc_t OpenKBTree(const CommonWriterSettings* settings, struct KBTree **const rslt, unsigned n, unsigned max)
+{
+ size_t const cacheSize = (((settings->cache_size - (settings->cache_size / 2) - (settings->cache_size / 8)) / max)
+ + 0xFFFFF) & ~((size_t)0xFFFFF);
+ KFile *file = NULL;
+ KDirectory *dir;
+ char fname[4096];
+ rc_t rc;
+
+ rc = KDirectoryNativeDir(&dir);
+ if (rc)
+ return rc;
+
+ rc = string_printf(fname, sizeof(fname), NULL, "%s/key2id.%u.%u", settings->tmpfs, settings->pid, n); if (rc) return rc;
+ STSMSG(1, ("Path for scratch files: %s\n", fname));
+ rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+ KDirectoryRemove(dir, 0, fname);
+ KDirectoryRelease(dir);
+ if (rc == 0) {
+ rc = KBTreeMakeUpdate(rslt, file, cacheSize,
+ false, kbtOpaqueKey,
+ 1, 255, sizeof ( uint32_t ),
+ NULL
+ );
+ KFileRelease(file);
+#if PERF
+ if (rc == 0) {
+ static unsigned treecount = 0;
+
+ (void)PLOGMSG(klogInfo, (klogInfo, "Number of trees: $(cnt)", "cnt=%u", ++treecount));
+ }
+#endif
+ }
+ return rc;
+}
+
+rc_t GetKeyIDOld(const CommonWriterSettings* settings, SpotAssembler* const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], unsigned const namelen)
+{
+ unsigned const keylen = strlen(key);
+ rc_t rc;
+ uint64_t tmpKey;
+
+ if (ctx->key2id_count == 0) {
+ rc = OpenKBTree(settings, &ctx->key2id[0], 1, 1);
+ if (rc) return rc;
+ ctx->key2id_count = 1;
+ }
+ if (memcmp(key, name, keylen) == 0) {
+ /* qname starts with read group; no append */
+ tmpKey = ctx->idCount[0];
+ rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, name, namelen);
+ }
+ else {
+ char sbuf[4096];
+ char *buf = sbuf;
+ char *hbuf = NULL;
+ size_t bsize = sizeof(sbuf);
+ size_t actsize;
+
+ if (keylen + namelen + 2 > bsize) {
+ hbuf = malloc(bsize = keylen + namelen + 2);
+ if (hbuf == NULL)
+ return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+ buf = hbuf;
+ }
+ rc = string_printf(buf, bsize, &actsize, "%s\t%.*s", key, (int)namelen, name);
+
+ tmpKey = ctx->idCount[0];
+ rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, buf, actsize);
+ if (hbuf)
+ free(hbuf);
+ }
+ if (rc == 0) {
+ *rslt = tmpKey;
+ if (*wasInserted)
+ ++ctx->idCount[0];
+ }
+ return rc;
+}
+
+static char const *Print_ctx_value_t(ctx_value_t const *const self)
+{
+ static char buffer[4096];
+ rc_t rc = string_printf(buffer, sizeof(buffer), NULL, "pid: { %lu, %lu }, sid: %lu, fid: %u, alc: { %u, %u }, flg: %x", CTX_VALUE_GET_P_ID(*self, 0), CTX_VALUE_GET_P_ID(*self, 1), CTX_VALUE_GET_S_ID(*self), self->fragmentId, self->alignmentCount[0], self->alignmentCount[1], self->alignmentCount[2]);
+
+ if (rc)
+ return 0;
+ return buffer;
+}
+
+static unsigned HashKey(void const *key, unsigned keylen)
+{
+ /* There is nothing special about this hash. It was randomly generated. */
+ static const uint8_t T1[] = {
+ 64, 186, 39, 203, 54, 211, 98, 32, 26, 23, 219, 94, 77, 60, 56, 184,
+ 129, 242, 10, 91, 84, 192, 19, 197, 231, 133, 125, 244, 48, 176, 160, 164,
+ 17, 41, 57, 137, 44, 196, 116, 146, 105, 40, 122, 47, 220, 226, 213, 212,
+ 107, 191, 52, 144, 9, 145, 81, 101, 217, 206, 85, 134, 143, 58, 128, 20,
+ 236, 102, 83, 149, 148, 180, 167, 163, 12, 239, 31, 0, 73, 152, 1, 15,
+ 75, 200, 4, 165, 5, 66, 25, 111, 255, 70, 174, 151, 96, 126, 147, 34,
+ 112, 161, 127, 181, 237, 78, 37, 74, 222, 123, 21, 132, 95, 51, 141, 45,
+ 61, 131, 193, 68, 62, 249, 178, 33, 7, 195, 228, 82, 27, 46, 254, 90,
+ 185, 240, 246, 124, 205, 182, 42, 22, 198, 69, 166, 92, 169, 136, 223, 245,
+ 118, 97, 115, 80, 252, 209, 49, 79, 221, 38, 28, 35, 36, 208, 187, 248,
+ 158, 201, 202, 168, 2, 18, 189, 119, 216, 214, 11, 6, 89, 16, 229, 109,
+ 120, 43, 162, 106, 204, 8, 199, 235, 142, 210, 86, 153, 227, 230, 24, 100,
+ 224, 113, 190, 243, 218, 215, 225, 173, 99, 238, 138, 59, 183, 154, 171, 232,
+ 157, 247, 233, 67, 88, 50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+ 155, 72, 207, 250, 159, 194, 177, 130, 135, 87, 71, 175, 14, 55, 172, 121,
+ 234, 13, 30, 241, 93, 188, 53, 114, 76, 29, 65, 3, 179, 108, 63, 139
+ };
+ unsigned h = 0x55;
+ unsigned i = keylen;
+
+ do { h = T1[h ^ ((uint8_t)i)]; } while ((i >>= 8) != 0);
+
+ for (i = 0; i != keylen; ++i)
+ h = T1[h ^ ((uint8_t const *)key)[i]];
+
+ return h;
+}
+
+static unsigned SeqHashKey(void const *key, unsigned keylen)
+{
+ /* There is nothing special about this hash. It was randomly generated. */
+ static const uint8_t T1[] = {
+ 64, 186, 39, 203, 54, 211, 98, 32, 26, 23, 219, 94, 77, 60, 56, 184,
+ 129, 242, 10, 91, 84, 192, 19, 197, 231, 133, 125, 244, 48, 176, 160, 164,
+ 17, 41, 57, 137, 44, 196, 116, 146, 105, 40, 122, 47, 220, 226, 213, 212,
+ 107, 191, 52, 144, 9, 145, 81, 101, 217, 206, 85, 134, 143, 58, 128, 20,
+ 236, 102, 83, 149, 148, 180, 167, 163, 12, 239, 31, 0, 73, 152, 1, 15,
+ 75, 200, 4, 165, 5, 66, 25, 111, 255, 70, 174, 151, 96, 126, 147, 34,
+ 112, 161, 127, 181, 237, 78, 37, 74, 222, 123, 21, 132, 95, 51, 141, 45,
+ 61, 131, 193, 68, 62, 249, 178, 33, 7, 195, 228, 82, 27, 46, 254, 90,
+ 185, 240, 246, 124, 205, 182, 42, 22, 198, 69, 166, 92, 169, 136, 223, 245,
+ 118, 97, 115, 80, 252, 209, 49, 79, 221, 38, 28, 35, 36, 208, 187, 248,
+ 158, 201, 202, 168, 2, 18, 189, 119, 216, 214, 11, 6, 89, 16, 229, 109,
+ 120, 43, 162, 106, 204, 8, 199, 235, 142, 210, 86, 153, 227, 230, 24, 100,
+ 224, 113, 190, 243, 218, 215, 225, 173, 99, 238, 138, 59, 183, 154, 171, 232,
+ 157, 247, 233, 67, 88, 50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+ 155, 72, 207, 250, 159, 194, 177, 130, 135, 87, 71, 175, 14, 55, 172, 121,
+ 234, 13, 30, 241, 93, 188, 53, 114, 76, 29, 65, 3, 179, 108, 63, 139
+ };
+ unsigned h1 = 0x55;
+ unsigned h2 = 0x22;
+ unsigned i = keylen;
+
+ do { h1 = T1[h1 ^ ((uint8_t)i)]; } while ((i >>= 8) != 0);
+
+ for (i = 0; i != keylen; ++i)
+ {
+ unsigned temp = ((uint8_t const *)key)[i];
+ h1 = T1[h1 ^ temp];
+ h2 = T1[h2 ^ temp];
+ }
+
+ return (h1 << 8) | h2;
+}
+
+rc_t GetKeyID(CommonWriterSettings* settings, SpotAssembler *const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], unsigned const namelen)
+{
+ if (ctx->key2id_max == 1)
+ return GetKeyIDOld(settings, ctx, rslt, wasInserted, key, name, namelen);
+ else {
+ unsigned const keylen = strlen(key);
+ unsigned const h = HashKey(key, keylen);
+ unsigned f;
+ unsigned e = ctx->key2id_count;
+ uint64_t tmpKey;
+
+ *rslt = 0;
+ {{
+ uint32_t const bucket_value = ctx->key2id_hash[h];
+ unsigned const n = (uint8_t) bucket_value;
+ unsigned const i1 = (uint8_t)(bucket_value >> 8);
+ unsigned const i2 = (uint8_t)(bucket_value >> 16);
+ unsigned const i3 = (uint8_t)(bucket_value >> 24);
+
+ if (n > 0 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i1]) == 0) {
+ f = i1;
+ /*
+ ctx->key2id_hash[h] = (i3 << 24) | (i2 << 16) | (i1 << 8) | n;
+ */
+ goto GET_ID;
+ }
+ if (n > 1 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i2]) == 0) {
+ f = i2;
+ ctx->key2id_hash[h] = (i3 << 24) | (i1 << 16) | (i2 << 8) | n;
+ goto GET_ID;
+ }
+ if (n > 2 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i3]) == 0) {
+ f = i3;
+ ctx->key2id_hash[h] = (i2 << 24) | (i1 << 16) | (i3 << 8) | n;
+ goto GET_ID;
+ }
+ }}
+ f = 0;
+ while (f < e) {
+ unsigned const m = (f + e) / 2;
+ unsigned const oid = ctx->key2id_oid[m];
+ int const diff = strcmp(key, ctx->key2id_names + ctx->key2id_name[oid]);
+
+ if (diff < 0)
+ e = m;
+ else if (diff > 0)
+ f = m + 1;
+ else {
+ f = oid;
+ goto GET_ID;
+ }
+ }
+ if (ctx->key2id_count < ctx->key2id_max) {
+ unsigned const name_max = ctx->key2id_name_max + keylen + 1;
+ KBTree *tree;
+ rc_t rc = OpenKBTree(settings, &tree, ctx->key2id_count + 1, 1); /* ctx->key2id_max); */
+
+ if (rc) return rc;
+
+ if (ctx->key2id_name_alloc < name_max) {
+ unsigned alloc = ctx->key2id_name_alloc;
+ void *tmp;
+
+ if (alloc == 0)
+ alloc = 4096;
+ while (alloc < name_max)
+ alloc <<= 1;
+ tmp = realloc(ctx->key2id_names, alloc);
+ if (tmp == NULL)
+ return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+ ctx->key2id_names = tmp;
+ ctx->key2id_name_alloc = alloc;
+ }
+ if (f < ctx->key2id_count) {
+ memmove(&ctx->key2id_oid[f + 1], &ctx->key2id_oid[f], (ctx->key2id_count - f) * sizeof(ctx->key2id_oid[f]));
+ }
+ ctx->key2id_oid[f] = ctx->key2id_count;
+ ++ctx->key2id_count;
+ f = ctx->key2id_oid[f];
+ ctx->key2id_name[f] = ctx->key2id_name_max;
+ ctx->key2id_name_max = name_max;
+
+ memcpy(&ctx->key2id_names[ctx->key2id_name[f]], key, keylen + 1);
+ ctx->key2id[f] = tree;
+ ctx->idCount[f] = 0;
+ if ((uint8_t)ctx->key2id_hash[h] < 3) {
+ unsigned const n = (uint8_t)ctx->key2id_hash[h] + 1;
+
+ ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | n;
+ }
+ else {
+ /* the hash function isn't working too well
+ * keep the 3 mru
+ */
+ ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | 3;
+ }
+ GET_ID:
+ tmpKey = ctx->idCount[f];
+ rc = KBTreeEntry(ctx->key2id[f], &tmpKey, wasInserted, name, namelen);
+ if (rc == 0) {
+ *rslt = (((uint64_t)f) << 32) | tmpKey;
+ if (*wasInserted)
+ ++ctx->idCount[f];
+ assert(tmpKey < ctx->idCount[f]);
+ }
+ return rc;
+ }
+ return RC(rcExe, rcTree, rcAllocating, rcConstraint, rcViolated);
+ }
+}
+
+static rc_t OpenMMapFile(const CommonWriterSettings* settings, SpotAssembler *const ctx, KDirectory *const dir)
+{
+ KFile *file = NULL;
+ char fname[4096];
+ rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/id2value.%u", settings->tmpfs, settings->pid);
+
+ if (rc)
+ return rc;
+
+ rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+ KDirectoryRemove(dir, 0, fname);
+ if (rc == 0)
+ rc = MMArrayMake(&ctx->id2value, file, sizeof(ctx_value_t));
+ KFileRelease(file);
+ return rc;
+}
+
+static rc_t OpenMBankFile(const CommonWriterSettings* settings, SpotAssembler *const ctx, KDirectory *const dir, int which, size_t climit)
+{
+ KFile *file = NULL;
+ char fname[4096];
+ char const *const suffix = which == 1 ? "One" : "Both";
+ KMemBank **const mbank = which == 1 ? &ctx->fragsOne : &ctx->fragsBoth;
+ rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/frag_data%s.%u", settings->tmpfs, suffix, settings->pid);
+
+ if (rc)
+ return rc;
+
+ rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+ KDirectoryRemove(dir, 0, fname);
+ if (rc == 0) {
+ KPageFile *backing;
+
+ rc = KPageFileMakeUpdate(&backing, file, climit, false);
+ KFileRelease(file);
+ if (rc == 0) {
+ rc = KMemBankMake(mbank, FRAG_CHUNK_SIZE, 0, backing);
+ KPageFileRelease(backing);
+ }
+ }
+ return rc;
+}
+
+rc_t SetupContext(const CommonWriterSettings* settings, SpotAssembler *ctx)
+{
+ rc_t rc = 0;
+
+ memset(ctx, 0, sizeof(*ctx));
+
+ ctx->pass = 1;
+
+ if (settings->mode == mode_Archive) {
+ KDirectory *dir;
+ size_t fragSizeBoth; /*** temporary hold for first side of mate pair with both sides aligned**/
+ size_t fragSizeOne; /*** temporary hold for first side of mate pair with one side aligned**/
+
+ STSMSG(1, ("Cache size: %uM\n", settings->cache_size / 1024 / 1024));
+
+ fragSizeBoth = (settings->cache_size / 8);
+ fragSizeOne = (settings->cache_size / 2);
+
+ rc = KLoadProgressbar_Make(&ctx->progress[0], 0); if (rc) return rc;
+ rc = KLoadProgressbar_Make(&ctx->progress[1], 0); if (rc) return rc;
+ rc = KLoadProgressbar_Make(&ctx->progress[2], 0); if (rc) return rc;
+ rc = KLoadProgressbar_Make(&ctx->progress[3], 0); if (rc) return rc;
+
+ KLoadProgressbar_Append(ctx->progress[0], 100 * settings->numfiles);
+
+ rc = KDirectoryNativeDir(&dir);
+ if (rc == 0)
+ rc = OpenMMapFile(settings, ctx, dir);
+ if (rc == 0)
+ rc = OpenMBankFile(settings, ctx, dir, 0, fragSizeBoth);
+ if (rc == 0)
+ rc = OpenMBankFile(settings, ctx, dir, 1, fragSizeOne);
+ KDirectoryRelease(dir);
+ }
+ return rc;
+}
+
+void ContextReleaseMemBank(SpotAssembler *ctx)
+{
+ KMemBankRelease(ctx->fragsOne);
+ ctx->fragsOne = NULL;
+ KMemBankRelease(ctx->fragsBoth);
+ ctx->fragsBoth = NULL;
+}
+
+void ContextRelease(SpotAssembler *ctx)
+{
+ KLoadProgressbar_Release(ctx->progress[0], true);
+ KLoadProgressbar_Release(ctx->progress[1], true);
+ KLoadProgressbar_Release(ctx->progress[2], true);
+ KLoadProgressbar_Release(ctx->progress[3], true);
+ MMArrayWhack(ctx->id2value);
+}
+
+
+
+rc_t WriteSoloFragments(const CommonWriterSettings* settings, SpotAssembler* ctx, SequenceWriter *seq)
+{
+ uint32_t i;
+ unsigned j;
+ uint32_t fcountOne = 0;
+ uint32_t fcountBoth = 0;
+ uint64_t idCount = 0;
+ rc_t rc;
+ KDataBuffer fragBuf;
+ SequenceRecord srec;
+
+ ++ctx->pass;
+ memset(&srec, 0, sizeof(srec));
+
+ rc = KDataBufferMake(&fragBuf, 8, 0);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KDataBufferMake failed");
+ return rc;
+ }
+ for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+ idCount += ctx->idCount[j];
+ }
+ KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], idCount);
+
+ for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+ for (i = 0; i != ctx->idCount[j]; ++i, ++idCount) {
+ uint64_t const keyId = ((uint64_t)j << 32) | i;
+ ctx_value_t *value;
+ size_t rsize;
+ uint64_t id;
+ uint64_t sz;
+ unsigned readLen[2];
+ unsigned read = 0;
+ FragmentInfo const *fip;
+ uint8_t const *src;
+ KMemBank *frags;
+
+ rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+ if (rc)
+ break;
+ KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+ if (value->fragmentId == 0)
+ continue;
+ if (value->fragmentId & 1) {
+ frags = ctx->fragsOne;
+ fcountOne++;
+ }
+ else {
+ frags = ctx->fragsBoth;
+ fcountBoth++;
+ }
+ id = value->fragmentId >> 1;
+
+ rc = KMemBankSize(frags, id, &sz);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KMemBankSize failed");
+ break;
+ }
+ rc = KDataBufferResize(&fragBuf, (size_t)sz);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KDataBufferResize failed");
+ break;
+ }
+ rc = KMemBankRead(frags, id, 0, fragBuf.base, sz, &rsize);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KMemBankRead failed");
+ break;
+ }
+ assert( rsize == sz );
+ fip = (FragmentInfo const *)fragBuf.base;
+ src = (uint8_t const *)&fip[1];
+
+ readLen[0] = readLen[1] = 0;
+ if (!value->unmated && ( (fip->aligned && CTX_VALUE_GET_P_ID(*value, 0) == 0)
+ || (value->unaligned_2)))
+ {
+ read = 1;
+ }
+
+ readLen[read] = fip->readlen;
+ rc = SequenceRecordInit(&srec, value->unmated ? 1 : 2, readLen);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "SequenceRecordInit failed");
+ break;
+ }
+
+ srec.ti[read] = fip->ti;
+ srec.aligned[read] = fip->aligned;
+ srec.is_bad[read] = fip->is_bad;
+ srec.orientation[read] = fip->orientation;
+ srec.cskey[read] = fip->cskey;
+ memcpy(srec.seq + srec.readStart[read], src, srec.readLen[read]);
+ src += fip->readlen;
+ memcpy(srec.qual + srec.readStart[read], src, srec.readLen[read]);
+ src += fip->readlen;
+ srec.spotGroup = (char *)src;
+ srec.spotGroupLen = fip->sglen;
+ srec.keyId = keyId;
+
+ rc = SequenceWriteRecord(seq, &srec, ctx->isColorSpace, value->pcr_dup, value->platform,
+ settings->keepMismatchQual, settings->no_real_output, settings->hasTI, settings->QualQuantizer);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+ break;
+ }
+ /*rc = KMemBankFree(frags, id);*/
+ CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+ }
+ }
+ /*printf("DONE_SOLO:\tcnt2=%d\tcnt1=%d\n",fcountBoth,fcountOne);*/
+ KDataBufferWhack(&fragBuf);
+ KDataBufferWhack(&srec.storage);
+ return rc;
+}
+
+rc_t AlignmentUpdateSpotInfo(SpotAssembler *ctx, struct AlignmentWriter *align)
+{
+ rc_t rc;
+ uint64_t keyId;
+
+ ++ctx->pass;
+
+ KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->alignCount);
+
+ rc = AlignmentStartUpdatingSpotIds(align);
+ while (rc == 0 && (rc = Quitting()) == 0) {
+ ctx_value_t const *value;
+
+ rc = AlignmentGetSpotKey(align, &keyId);
+ if (rc) {
+ if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+ rc = 0;
+ break;
+ }
+ assert(keyId >> 32 < ctx->key2id_count);
+ assert((uint32_t)keyId < ctx->idCount[keyId >> 32]);
+ rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+ if (rc == 0) {
+ int64_t const spotId = CTX_VALUE_GET_S_ID(*value);
+
+ if (spotId == 0) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(id)' was never assigned a spot id, probably has no primary alignments", "id=%lx", keyId));
+ /* (void)PLOGMSG(klogWarn, (klogWarn, "Spot #$(i): { $(s) }", "i=%lu,s=%s", keyId, Print_ctx_value_t(value))); */
+ }
+ rc = AlignmentWriteSpotId(align, spotId);
+ }
+ KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+ }
+ return rc;
+}
+
+rc_t SequenceUpdateAlignInfo(SpotAssembler *ctx, struct SequenceWriter *seq)
+{
+ rc_t rc = 0;
+ uint64_t row;
+ const ctx_value_t *value;
+ uint64_t keyId;
+
+ ++ctx->pass;
+ KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->spotId + 1);
+
+ for (row = 1; row <= ctx->spotId; ++row) {
+ rc = SequenceReadKey(seq, row, &keyId);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to get key for row $(row)", "row=%u", (unsigned)row));
+ break;
+ }
+ rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read info for row $(row), index $(idx)", "row=%u,idx=%u", (unsigned)row, (unsigned)keyId));
+ break;
+ }
+ if (row != CTX_VALUE_GET_S_ID(*value)) {
+ rc = RC(rcApp, rcTable, rcWriting, rcData, rcUnexpected);
+ (void)PLOGMSG(klogErr, (klogErr, "Unexpected spot id $(spotId) for row $(row), index $(idx)", "spotId=%u,row=%u,idx=%u", (unsigned)CTX_VALUE_GET_S_ID(*value), (unsigned)row, (unsigned)keyId));
+ break;
+ }
+ {{
+ int64_t primaryId[2];
+ /*uint64_t const spotId = CTX_VALUE_GET_S_ID(*value);*/
+
+ primaryId[0] = CTX_VALUE_GET_P_ID(*value, 0);
+ primaryId[1] = CTX_VALUE_GET_P_ID(*value, 1);
+
+ rc = SequenceUpdateAlignData(seq, row, value->unmated ? 1 : 2,
+ primaryId,
+ value->alignmentCount);
+ }}
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed updating AlignmentWriter data in sequence table");
+ break;
+ }
+ KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+ }
+ return rc;
+}
+
+void EditAlignedQualities(const CommonWriterSettings* settings, uint8_t qual[], bool const hasMismatch[], unsigned readlen) /* generic */
+{
+ unsigned i;
+
+ for (i = 0; i < readlen; ++i) {
+ uint8_t const q = hasMismatch[i] ? settings->alignedQualValue : qual[i];
+
+ qual[i] = q;
+ }
+}
+
+void EditUnalignedQualities(uint8_t qual[], bool const hasMismatch[], unsigned readlen) /* generic */
+{
+ unsigned i;
+
+ for (i = 0; i < readlen; ++i) {
+ uint8_t const q = (qual[i] & 0x7F) | (hasMismatch[i] ? 0x80 : 0);
+
+ qual[i] = q;
+ }
+}
+
+bool platform_cmp(char const platform[], char const test[])
+{
+ unsigned i;
+
+ for (i = 0; ; ++i) {
+ int ch1 = test[i];
+ int ch2 = toupper(platform[i]);
+
+ if (ch1 != ch2)
+ break;
+ if (ch1 == 0)
+ return true;
+ }
+ return false;
+}
+
+rc_t CheckLimitAndLogError(CommonWriterSettings* settings)
+{
+ ++settings->errCount;
+ if (settings->maxErrCount > 0 && settings->errCount > settings->maxErrCount) {
+ (void)PLOGERR(klogErr, (klogErr, RC(rcAlign, rcFile, rcReading, rcError, rcExcessive),
+ "Number of errors $(cnt) exceeds limit of $(max): Exiting", "cnt=%lu,max=%lu",
+ settings->errCount, settings->maxErrCount));
+ return RC(rcAlign, rcFile, rcReading, rcError, rcExcessive);
+ }
+ return 0;
+}
+
+void RecordNoMatch(const CommonWriterSettings* settings, char const readName[], char const refName[], uint32_t const refPos)
+{
+ if (settings->noMatchLog) {
+ static uint64_t lpos = 0;
+ char logbuf[256];
+ size_t len;
+
+ if (string_printf(logbuf, sizeof(logbuf), &len, "%s\t%s\t%u\n", readName, refName, refPos) == 0) {
+ KFileWrite(settings->noMatchLog, lpos, logbuf, len, NULL);
+ lpos += len;
+ }
+ }
+}
+
+rc_t LogNoMatch(CommonWriterSettings* settings, char const readName[], char const refName[], unsigned rpos, unsigned matches)
+{
+ rc_t const rc = CheckLimitAndLogError(settings);
+ static unsigned count = 0;
+
+ ++count;
+ if (rc) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+ "occurred=%u", count));
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+ "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+ }
+ else if (settings->maxWarnCount_NoMatch == 0 || count < settings->maxWarnCount_NoMatch)
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+ "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+ return rc;
+}
+
+rc_t LogDupConflict(CommonWriterSettings* settings, char const readName[])
+{
+ rc_t const rc = CheckLimitAndLogError(settings);
+ static unsigned count = 0;
+
+ ++count;
+ if (rc) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+ "occurred=%u", count));
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+ "name=%s", readName));
+ }
+ else if (settings->maxWarnCount_DupConflict == 0 || count < settings->maxWarnCount_DupConflict)
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+ "name=%s", readName));
+ return rc;
+}
+
+void COPY_QUAL(uint8_t D[], uint8_t const S[], unsigned const L, bool const R)
+{
+ if (R) {
+ unsigned i;
+ unsigned j;
+
+ for (i = 0, j = L - 1; i != L; ++i, --j)
+ D[i] = S[j];
+ }
+ else
+ memcpy(D, S, L);
+}
+
+void COPY_READ(INSDC_dna_text D[], INSDC_dna_text const S[], unsigned const L, bool const R)
+{
+ static INSDC_dna_text const compl[] = {
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , '.', 0 ,
+ '0', '1', '2', '3', 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 'T', 'V', 'G', 'H', 0 , 0 , 'C',
+ 'D', 0 , 0 , 'M', 0 , 'K', 'N', 0 ,
+ 0 , 0 , 'Y', 'S', 'A', 'A', 'B', 'W',
+ 0 , 'R', 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 'T', 'V', 'G', 'H', 0 , 0 , 'C',
+ 'D', 0 , 0 , 'M', 0 , 'K', 'N', 0 ,
+ 0 , 0 , 'Y', 'S', 'A', 'A', 'B', 'W',
+ 0 , 'R', 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
+ };
+ if (R) {
+ unsigned i;
+ unsigned j;
+
+ for (i = 0, j = L - 1; i != L; ++i, --j)
+ D[i] = compl[((uint8_t const *)S)[j]];
+ }
+ else
+ memcpy(D, S, L);
+}
+
+/*--------------------------------------------------------------------------
+ * ArchiveFile
+ */
+static uint8_t GetMapQ(Alignment const *rec)
+{
+ uint8_t mapQ;
+
+ AlignmentGetMapQuality(rec, &mapQ);
+ return mapQ;
+}
+
+INSDC_SRA_platform_id PlatformToId(const char* name)
+{
+ if (name != NULL)
+ {
+ switch (toupper(name[0])) {
+ case 'C':
+ if (platform_cmp(name, "COMPLETE GENOMICS") || platform_cmp(name, "COMPLETE_GENOMICS"))
+ return SRA_PLATFORM_COMPLETE_GENOMICS;
+ if (platform_cmp(name, "CAPILLARY"))
+ return SRA_PLATFORM_SANGER;
+ break;
+ case 'H':
+ if (platform_cmp(name, "HELICOS"))
+ return SRA_PLATFORM_HELICOS;
+ break;
+ case 'I':
+ if (platform_cmp(name, "ILLUMINA"))
+ return SRA_PLATFORM_ILLUMINA;
+ if (platform_cmp(name, "IONTORRENT"))
+ return SRA_PLATFORM_ION_TORRENT;
+ break;
+ case 'L':
+ if (platform_cmp(name, "LS454"))
+ return SRA_PLATFORM_454;
+ break;
+ case 'P':
+ if (platform_cmp(name, "PACBIO"))
+ return SRA_PLATFORM_PACBIO_SMRT;
+ break;
+ case 'S':
+ if (platform_cmp(name, "SOLID"))
+ return SRA_PLATFORM_ABSOLID;
+ break;
+ default:
+ break;
+ }
+ }
+ return SRA_PLATFORM_UNDEFINED;
+}
+
+INSDC_SRA_platform_id GetINSDCPlatform(ReferenceInfo const *ref, char const name[]) {
+ if (ref != NULL && name != NULL) {
+ ReadGroup rg;
+
+ rc_t rc = ReferenceInfoGetReadGroupByName(ref, name, &rg);
+ if (rc == 0 && rg.platform)
+ return PlatformToId(rg.platform) ;
+ }
+ return SRA_PLATFORM_UNDEFINED;
+}
+
+void ParseSpotName(char const name[], size_t* namelen)
+{ /* remove trailing #... */
+ const char* hash = string_chr(name, *namelen, '#');
+ if (hash)
+ *namelen = hash - name;
+}
+
+
+static const int8_t toPhred[] =
+{
+ 0, 1, 1, 2, 2, 3, 3,
+ 4, 4, 5, 5, 6, 7, 8, 9,10,10,
+ 11,12,13,14,15,16,17,18,19,20,
+ 21,22,23,24,25,26,27,28,29,30,
+ 31,32,33,34,35,36,37,38,39,40
+};
+
+static int8_t LogOddsToPhred ( int8_t logOdds )
+{ /* conversion table copied from interface/ncbi/seq.vschema */
+ if (logOdds < -6)
+ return 0;
+ if (logOdds > 40)
+ return 40;
+ return toPhred[logOdds + 6];
+}
+
+rc_t ArchiveFile(const struct ReaderFile *reader,
+ CommonWriterSettings* G,
+ struct SpotAssembler *ctx,
+ struct Reference *ref,
+ struct SequenceWriter *seq,
+ struct AlignmentWriter *align,
+ bool *had_alignments,
+ bool *had_sequences)
+{
+ KDataBuffer buf;
+ KDataBuffer fragBuf;
+ KDataBuffer cigBuf;
+ rc_t rc;
+ int32_t lastRefSeqId = -1;
+ size_t rsize;
+ uint64_t keyId = 0;
+ uint64_t reccount = 0;
+ SequenceRecord srec;
+ char spotGroup[512];
+ size_t namelen;
+ unsigned progress = 0;
+ unsigned warned = 0;
+ long fcountBoth=0;
+ long fcountOne=0;
+ int skipRefSeqID = -1;
+ uint64_t recordsProcessed = 0;
+ uint64_t filterFlagConflictRecords=0; /*** counts number of conflicts between flags 'duplicate' and 'lowQuality' ***/
+#define MAX_WARNINGS_FLAG_CONFLICT 10000 /*** maximum errors to report ***/
+
+ bool isColorSpace = false;
+ bool isNotColorSpace = G->noColorSpace;
+ char alignGroup[32];
+ size_t alignGroupLen;
+
+ const ReferenceInfo* header = NULL;
+
+ rc = ReaderFileGetReferenceInfo(reader, &header);
+ if (rc)
+ return rc;
+
+ if (ctx->key2id_max == 0) {
+ if (header != NULL) {
+ uint32_t rgcount;
+ unsigned rgi;
+
+ ReferenceInfoGetReadGroupCount(header, &rgcount);
+ if (rgcount > (sizeof(ctx->key2id)/sizeof(ctx->key2id[0]) - 1))
+ ctx->key2id_max = 1;
+ else
+ ctx->key2id_max = sizeof(ctx->key2id)/sizeof(ctx->key2id[0]);
+
+ for (rgi = 0; rgi != rgcount; ++rgi) {
+ ReadGroup rg;
+
+ rc_t rc2 = ReferenceInfoGetReadGroup(header, rgi, &rg);
+ if (rc2 == 0 && rg.platform && platform_cmp(rg.platform, "CAPILLARY")) {
+ G->hasTI = true;
+ break;
+ }
+ }
+ }
+ else
+ ctx->key2id_max = 1;
+ }
+
+ memset(&srec, 0, sizeof(srec));
+
+ rc = KDataBufferMake(&cigBuf, 32, 0);
+ if (rc)
+ return rc;
+
+ rc = KDataBufferMake(&fragBuf, 8, FRAG_CHUNK_SIZE);
+ if (rc)
+ return rc;
+
+ rc = KDataBufferMake(&buf, (sizeof(int32_t) + sizeof(bool) * 2 + sizeof(char) * 2 + sizeof(uint8_t))*8, 0);
+ if (rc)
+ return rc;
+
+ if (rc == 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Loading '$(file)'", "file=%s", ReaderFileGetPathname(reader)));
+ }
+
+ *had_alignments = false;
+ *had_sequences = false;
+
+ while (rc == 0 && (rc = Quitting()) == 0) {
+ bool aligned;
+ AlignmentRecord data;
+ uint32_t readlen;
+ int64_t rpos=0;
+ char *seqDNA;
+ ReferenceSequence refSeq;
+ ctx_value_t *value;
+ bool wasInserted;
+ int32_t refSeqId=-1;
+ uint8_t *qual;
+ bool mated;
+ const char *name;
+ char cskey = 0;
+ bool originally_aligned;
+ bool isPrimary;
+ uint32_t opCount;
+ bool hasCG;
+ uint64_t ti = 0;
+ uint32_t csSeqLen = 0;
+ int readOrientation;
+
+ const Record* record;
+ const Sequence* sequence = NULL;
+ const Alignment* alignment = NULL;
+ const CGData* cg = NULL;
+
+ rc = ReaderFileGetRecord(reader, &record);
+ if (rc || record == 0)
+ break;
+
+ {
+ const Rejected* rej;
+ rc = RecordGetRejected(record, &rej);
+ if (rc)
+ {
+ (void)LOGERR(klogErr, rc, "ArchiveFile: RecordGetSequence failed");
+ break;
+ }
+ if (rej != NULL)
+ {
+ const char* message;
+ uint64_t line;
+ uint64_t col;
+ bool fatal;
+ rc = RejectedGetError(rej, &message, &line, &col, &fatal);
+ if (rc)
+ {
+ (void)LOGERR(klogErr, rc, "ArchiveFile: RejectedGetError failed");
+ break;
+ }
+ (void)PLOGMSG(klogErr, (klogErr, "$(file):$(l):$(c):$(msg)", "file=%s,l=%lu,c=%lu,msg=%s", ReaderFileGetPathname(reader), line, col, message));
+ rc = CheckLimitAndLogError(G);
+ RejectedRelease(rej);
+
+ if (fatal)
+ {
+ rc = RC(rcExe, rcFile, rcParsing, rcFormat, rcUnsupported);
+ break;
+ }
+
+ goto LOOP_END;
+ }
+ }
+ rc = RecordGetSequence(record, &sequence);
+ if (rc)
+ {
+ (void)LOGERR(klogErr, rc, "ArchiveFile: RecordGetSequence failed");
+ break;
+ }
+ rc = RecordGetAlignment(record, &alignment);
+ if (rc)
+ {
+ (void)LOGERR(klogErr, rc, "ArchiveFile: RecordGetAlignment failed");
+ break;
+ }
+ if (alignment != NULL)
+ {
+ rc = AlignmentGetCGData(alignment, &cg);
+ if (rc)
+ {
+ (void)LOGERR(klogErr, rc, "ArchiveFile: AlignmentGetCG failed");
+ break;
+ }
+ }
+
+ if ((unsigned)(ReaderFileGetProportionalPosition(reader) * 100.0) > progress) {
+ unsigned new_value = ReaderFileGetProportionalPosition(reader) * 100.0;
+ KLoadProgressbar_Process(ctx->progress[0], new_value - progress, false);
+ progress = new_value;
+ }
+
+
+ /**************************************************************/
+ if (!G->noColorSpace) {
+ if (SequenceIsColorSpace(sequence)) {
+ if (isNotColorSpace) {
+ MIXED_BASE_AND_COLOR:
+ rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains base space and color space", "file=%s", ReaderFileGetPathname(reader)));
+ goto LOOP_END;
+ }
+ ctx->isColorSpace = isColorSpace = true;
+ }
+ else if (isColorSpace)
+ goto MIXED_BASE_AND_COLOR;
+ else
+ isNotColorSpace = true;
+ }
+ hasCG = cg != NULL;
+ if (hasCG) {
+ AlignmentGetAlignOpCount(alignment, &opCount);
+ rc = KDataBufferResize(&cigBuf, opCount * 2 + 5);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+ goto LOOP_END;
+ }
+
+ rc = KDataBufferResize(&buf, readlen = 35);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+ goto LOOP_END;
+ }
+
+ AlignmentRecordInit(&data, buf.base, readlen, &seqDNA, G->expectUnsorted);
+ qual = (uint8_t *)&seqDNA[readlen];
+ }
+ else {
+ if (alignment != 0)
+ {
+ uint32_t const *tmp;
+ AlignmentGetBAMCigar(alignment, &tmp, &opCount);
+ rc = KDataBufferResize(&cigBuf, opCount);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+ goto LOOP_END;
+ }
+ memcpy(cigBuf.base, tmp, opCount * sizeof(uint32_t));
+ }
+
+ SequenceGetReadLength(sequence, &readlen);
+ if (isColorSpace) {
+ SequenceGetCSReadLength(sequence, &csSeqLen);
+ if (readlen != csSeqLen && readlen != 0) {
+ rc = RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+ (void)LOGERR(klogErr, rc, "SequenceWriter length and CS SequenceWriter length are not equal");
+ goto LOOP_END;
+ }
+ }
+ else if (readlen == 0) {
+ }
+ rc = KDataBufferResize(&buf, readlen | csSeqLen);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+ goto LOOP_END;
+ }
+
+ AlignmentRecordInit(&data, buf.base, readlen | csSeqLen, &seqDNA, G->expectUnsorted);
+ qual = (uint8_t *)&seqDNA[readlen | csSeqLen];
+ }
+ SequenceGetRead(sequence, seqDNA);
+ if (G->useQUAL) {
+ int8_t const *squal;
+ uint8_t offset=0;
+ int qualType=0;
+
+ SequenceGetQuality(sequence, &squal, &offset, &qualType);
+ memcpy(qual, squal, readlen);
+ }
+ else {
+ int8_t const *squal;
+ uint8_t qoffset = 0;
+ int qualType=0;
+ unsigned i;
+
+ rc = SequenceGetQuality(sequence, &squal, &qoffset, &qualType);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of original quality does not match sequence", "name=%s", name));
+ goto LOOP_END;
+ }
+ if (squal != NULL)
+ {
+ switch (qualType)
+ {
+ case QT_LogOdds:
+ for (i = 0; i != readlen; ++i)
+ qual[i] = LogOddsToPhred(squal[i]);
+ break;
+
+ case QT_Phred:
+ if (qoffset) {
+ for (i = 0; i != readlen; ++i)
+ qual[i] = squal[i] - qoffset;
+ }
+ else
+ memcpy(qual, squal, readlen);
+ break;
+
+ default:
+ memcpy(qual, squal, readlen);
+ break;
+ }
+ }
+ else
+ memset(qual, 0, readlen);
+ }
+ if (hasCG) {
+ rc = CGDataGetSeqQual(cg, seqDNA, qual);
+ if (rc == 0)
+ rc = CGDataGetCigar(cg, cigBuf.base, cigBuf.elem_count, &opCount);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to read CG data");
+ goto LOOP_END;
+ }
+ }
+ if (G->hasTI) {
+ rc = SequenceGetTI(sequence, &ti);
+ if (rc)
+ ti = 0;
+ rc = 0;
+ }
+ data.data.align_group.buffer = alignGroup;
+ if (hasCG && CGDataGetAlignGroup(cg, alignGroup, sizeof(alignGroup), &alignGroupLen) == 0)
+ data.data.align_group.elements = alignGroupLen;
+ else
+ data.data.align_group.elements = 0;
+
+ if (alignment != 0)
+ AR_MAPQ(data) = GetMapQ(alignment);
+ SequenceGetSpotName(sequence, &name, &namelen);
+ if (G->parseSpotName)
+ ParseSpotName(name, &namelen);
+ {{
+ char const *rgname;
+ size_t rgnamelen;
+
+ SequenceGetSpotGroup(sequence, &rgname, &rgnamelen);
+ if (rgname)
+ {
+ string_copy(spotGroup, sizeof(spotGroup), rgname, rgnamelen);
+ spotGroup[rgnamelen] = '\0';
+ }
+ else
+ spotGroup[0] = '\0';
+ }}
+ readOrientation = SequenceGetOrientationSelf(sequence);
+ AR_REF_ORIENT(data) = readOrientation == ReadOrientationReverse;
+ isPrimary = alignment == 0 || ! AlignmentIsSecondary(alignment);
+ if (G->noSecondary && !isPrimary)
+ goto LOOP_END;
+ originally_aligned = (alignment != 0);
+ aligned = originally_aligned && (AR_MAPQ(data) >= G->minMapQual);
+
+ if (aligned && align == NULL) {
+ rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains aligned records", "file=%s", ReaderFileGetPathname(reader)));
+ goto LOOP_END;
+ }
+ if (header != NULL)
+ {
+ while (aligned) {
+ AlignmentGetPosition(alignment, &rpos);
+ AlignmentGetRefSeqId(alignment, &refSeqId);
+ if (rpos >= 0 && refSeqId >= 0) {
+ if (refSeqId == skipRefSeqID)
+ goto LOOP_END;
+ if (refSeqId == lastRefSeqId)
+ break;
+ rc = ReferenceInfoGetRefSeq(header, refSeqId, &refSeq);
+ if (rc != 0) {
+ rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "File '$(file)': Spot '$(name)' refers to an unknown Reference number $(refSeqId)", "file=%s,refSeqId=%i,name=%s", ReaderFileGetPathname(reader), (int)refSeqId, name));
+ rc = CheckLimitAndLogError(G);
+ goto LOOP_END;
+ }
+ else {
+ if (G->refFilter && strcmp(G->refFilter, refSeq.name) != 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Skipping Reference '$(name)'", "name=%s", refSeq.name));
+ skipRefSeqID = refSeqId;
+ goto LOOP_END;
+ }
+
+ rc = ReferenceSetFile(ref, refSeq.name, refSeq.length, refSeq.checksum, G->maxSeqLen);
+ if (rc == 0) {
+ lastRefSeqId = refSeqId;
+ break;
+ }
+ if (GetRCObject(rc) == rcConstraint && GetRCState(rc) == rcViolated) {
+ int const level = G->limit2config ? klogWarn : klogErr;
+
+ (void)PLOGMSG(level, (level, "Could not find a Reference to match { name: '$(name)', length: $(rlen) }", "name=%s,rlen=%u", refSeq.name, (unsigned)refSeq.length));
+ }
+ else if (!G->limit2config)
+ (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)': Spot '$(sname)' refers to an unknown Reference '$(rname)'", "file=%s,rname=%s,sname=%s", ReaderFileGetPathname(reader), refSeq.name, name));
+ if (G->limit2config)
+ rc = 0;
+ goto LOOP_END;
+ }
+ }
+ else {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' was marked aligned, but reference id = $(id) and reference position = $(pos) are invalid", "name=%.*s,id=%i,pos=%i", namelen, name, refSeqId, rpos));
+ if ((rc = CheckLimitAndLogError(G)) != 0) goto LOOP_END;
+ }
+
+ aligned = false;
+ }
+ }
+ if (!aligned && (G->refFilter != NULL || G->limit2config))
+ goto LOOP_END;
+
+ rc = GetKeyID(G, ctx, &keyId, &wasInserted, spotGroup, name, namelen);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KBTreeEntry: failed on key '$(key)'", "key=%.*s", namelen, name));
+ goto LOOP_END;
+ }
+ rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "MMArrayGet: failed on id '$(id)'", "id=%u", keyId));
+ goto LOOP_END;
+ }
+
+ AR_KEY(data) = keyId;
+
+ mated = false;
+ if (SequenceWasPaired(sequence)) {
+ if (SequenceIsFirst(sequence))
+ AR_READNO(data) |= 1;
+ if (SequenceIsSecond(sequence))
+ AR_READNO(data) |= 2;
+ switch (AR_READNO(data)) {
+ case 1:
+ case 2:
+ mated = true;
+ break;
+ case 0:
+ if ((warned & 1) == 0) {
+ (void)LOGMSG(klogWarn, "Spots without fragment info have been encountered");
+ warned |= 1;
+ }
+ break;
+ case 3:
+ if ((warned & 2) == 0) {
+ (void)LOGMSG(klogWarn, "Spots with more than two fragments have been encountered");
+ warned |= 2;
+ }
+ break;
+ }
+ }
+ if (!mated)
+ AR_READNO(data) = 1;
+
+ if (wasInserted) {
+ memset(value, 0, sizeof(*value));
+ value->unmated = !mated;
+ value->pcr_dup = SequenceIsDuplicate(sequence);
+ value->platform = GetINSDCPlatform(header, spotGroup);
+ if (value->platform == SRA_PLATFORM_UNDEFINED)
+ value->platform = G->platform;
+ }
+ else {
+ if (!G->acceptBadDups && value->pcr_dup != SequenceIsDuplicate(sequence)) {
+ rc = LogDupConflict(G, name);
+ goto LOOP_END; /* TODO: is this correct? */
+ }
+ value->pcr_dup &= SequenceIsDuplicate(sequence);
+ if (mated && value->unmated) {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Spot '$(name)', which was first seen without mate info, now has mate info",
+ "name=%s", name));
+ rc = CheckLimitAndLogError(G);
+ goto LOOP_END;
+ }
+ else if (!mated && !value->unmated) {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Spot '$(name)', which was first seen with mate info, now has no mate info",
+ "name=%s", name));
+ rc = CheckLimitAndLogError(G);
+ goto LOOP_END;
+ }
+ }
+
+ ++recordsProcessed;
+
+ if (isPrimary) {
+ switch (AR_READNO(data)) {
+ case 1:
+ if (CTX_VALUE_GET_P_ID(*value, 0) != 0)
+ {
+ isPrimary = false;
+ if (value->seqHash[0] != SeqHashKey(seqDNA, readlen))
+ {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Read 1 of spot '$(name)', possible sequence mismatch", "name=%s", name));
+ rc = CheckLimitAndLogError(G);
+ goto LOOP_END;
+ }
+ }
+ else if (aligned && value->unaligned_1) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Read 1 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+ isPrimary = false;
+ }
+ break;
+ case 2:
+ if (CTX_VALUE_GET_P_ID(*value, 1) != 0)
+ {
+ isPrimary = false;
+ if (value->seqHash[1] != SeqHashKey(seqDNA, readlen))
+ {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Read 2 of spot '$(name)', possible sequence mismatch", "name=%s", name));
+ rc = CheckLimitAndLogError(G);
+ goto LOOP_END;
+ }
+ }
+ else if (aligned && value->unaligned_2) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Read 2 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+ isPrimary = false;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ data.isPrimary = isPrimary;
+ if (aligned) {
+ uint32_t matches = 0;
+
+ rc = ReferenceRead(ref, &data, rpos, cigBuf.base, opCount, seqDNA, readlen, &matches, G->acceptNoMatch, G->minMatchCount, G->maxSeqLen);
+ if (rc) {
+ aligned = false;
+
+ if ( (GetRCState(rc) == rcViolated && GetRCObject(rc) == rcConstraint)
+ || (GetRCState(rc) == rcExcessive && GetRCObject(rc) == rcRange))
+ {
+ RecordNoMatch(G, name, refSeq.name, rpos);
+ }
+ if (GetRCState(rc) == rcViolated && GetRCObject(rc) == rcConstraint) {
+ rc = LogNoMatch(G, name, refSeq.name, (unsigned)rpos, (unsigned)matches);
+ }
+ else if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInvalid) {
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': bad alignment to reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+ CheckLimitAndLogError(G);
+ }
+ else if (GetRCObject(rc) == rcData) {
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': bad alignment to reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+ rc = CheckLimitAndLogError(G);
+ }
+ else {
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': error reading reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+ rc = CheckLimitAndLogError(G);
+ }
+ if (rc) goto LOOP_END;
+ }
+ }
+ if (isColorSpace) {
+ /* must be after ReferenceRead */
+ SequenceGetCSKey(sequence, &cskey);
+ SequenceGetCSRead(sequence, seqDNA);
+ if (!aligned && !G->useQUAL) {
+ int8_t const *squal;
+ uint8_t qoffset = 0;
+ int qualType=0;
+
+ rc = SequenceGetCSQuality(sequence, &squal, &qoffset, &qualType);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of colorspace quality does not match sequence", "name=%s", name));
+ goto LOOP_END;
+ }
+ if (qoffset) {
+ unsigned i;
+
+ for (i = 0; i < csSeqLen; ++i)
+ qual[i] = squal[i] - qoffset;
+ }
+ else if (squal != NULL)
+ memcpy(qual, squal, csSeqLen);
+ readlen = csSeqLen;
+ }
+ }
+
+ if (aligned) {
+ if (G->editAlignedQual ) EditAlignedQualities (G, qual, AR_HAS_MISMATCH(data), readlen);
+ if (G->keepMismatchQual) EditUnalignedQualities(qual, AR_HAS_MISMATCH(data), readlen);
+ }
+ else if (isPrimary) {
+ switch (AR_READNO(data)) {
+ case 1:
+ value->unaligned_1 = 1;
+ break;
+ case 2:
+ value->unaligned_2 = 1;
+ break;
+ default:
+ break;
+ }
+ }
+ if (isPrimary) {
+ switch (AR_READNO(data)) {
+ case 1:
+ if (CTX_VALUE_GET_P_ID(*value, 0) == 0 && aligned) {
+ data.alignId = ++ctx->primaryId;
+ CTX_VALUE_SET_P_ID(*value, 0, data.alignId);
+ }
+ break;
+ case 2:
+ if (CTX_VALUE_GET_P_ID(*value, 1) == 0 && aligned) {
+ data.alignId = ++ctx->primaryId;
+ CTX_VALUE_SET_P_ID(*value, 1, data.alignId);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ if (mated) {
+ if (isPrimary || !originally_aligned) {
+ if (value->spotId != 0) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' has already been assigned a spot id", "name=%.*s", namelen, name));
+ }
+ else if (!value->has_a_read) {
+ /* new mated fragment - do spot assembly */
+ unsigned sz;
+ uint64_t fragmentId;
+ FragmentInfo fi;
+ KMemBank *frags;
+ int32_t mate_refSeqId = -1;
+ int64_t pnext = 0;
+
+ value->seqHash[AR_READNO(data) - 1] = SeqHashKey(seqDNA, readlen);
+
+ memset(&fi, 0, sizeof(fi));
+ fi.aligned = aligned;
+ fi.ti = ti;
+ fi.orientation = readOrientation;
+ fi.otherReadNo = AR_READNO(data);
+ fi.sglen = strlen(spotGroup);
+ fi.readlen = readlen;
+ fi.cskey = cskey;
+ fi.is_bad = SequenceIsLowQuality(sequence);
+ sz = sizeof(fi) + 2*fi.readlen + fi.sglen;
+ if (align && aligned) {
+ AlignmentGetMateRefSeqId(alignment, &mate_refSeqId);
+ AlignmentGetMatePosition(alignment, &pnext);
+ }
+ if(align && aligned && mate_refSeqId == refSeqId && pnext > 0 && pnext!=rpos /*** weird case in some bams**/){
+ frags = ctx->fragsBoth;
+ rc = KMemBankAlloc(frags, &fragmentId, sz, 0);
+ value->fragmentId = fragmentId*2;
+ fcountBoth++;
+ } else {
+ frags = ctx->fragsOne;
+ rc = KMemBankAlloc(frags, &fragmentId, sz, 0);
+ value->fragmentId = fragmentId*2+1;
+ fcountOne++;
+ }
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KMemBankAlloc failed");
+ goto LOOP_END;
+ }
+ /*printf("IN:%10d\tcnt2=%ld\tcnt1=%ld\n",value->fragmentId,fcountBoth,fcountOne);*/
+
+ rc = KDataBufferResize(&fragBuf, sz);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize fragment buffer");
+ goto LOOP_END;
+ }
+ {{
+ uint8_t *dst = (uint8_t*) fragBuf.base;
+ memcpy(dst,&fi,sizeof(fi));
+ dst += sizeof(fi);
+ COPY_READ((char *)dst, seqDNA, fi.readlen, (isColorSpace && !aligned) ? 0 : fi.orientation == ReadOrientationReverse);
+ dst += fi.readlen;
+ COPY_QUAL(dst, qual, fi.readlen, (isColorSpace && !aligned) ? 0 : fi.orientation == ReadOrientationReverse);
+ dst += fi.readlen;
+ memcpy(dst,spotGroup,fi.sglen);
+ }}
+ rc = KMemBankWrite(frags, fragmentId, 0, fragBuf.base, sz, &rsize);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankWrite failed writing fragment $(id)", "id=%u", fragmentId));
+ goto LOOP_END;
+ }
+ value->has_a_read = 1;
+ }
+ else if (value->fragmentId != 0 ) {
+ /* might be second fragment */
+ uint64_t sz;
+ FragmentInfo *fip;
+ KMemBank *frags;
+
+ if(value->fragmentId & 1) frags = ctx->fragsOne;
+ else frags = ctx->fragsBoth;
+
+ rc=KMemBankSize(frags, value->fragmentId>>1, &sz);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankSize failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+ goto LOOP_END;
+ }
+ rc=KDataBufferResize(&fragBuf, (size_t)sz);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to resize fragment buffer", ""));
+ goto LOOP_END;
+ }
+ rc=KMemBankRead(frags, value->fragmentId>>1, 0, fragBuf.base, sz, &rsize);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankRead failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+ goto LOOP_END;
+ }
+
+ assert( rsize == sz );
+ fip = (FragmentInfo *) fragBuf.base;
+ if(AR_READNO(data) != fip->otherReadNo) {
+ /* mate found */
+ unsigned readLen[2];
+ unsigned read1 = 0;
+ unsigned read2 = 1;
+ uint8_t *src = (uint8_t*) fip + sizeof(*fip);
+
+ value->seqHash[AR_READNO(data) - 1] = SeqHashKey(seqDNA, readlen);
+
+ if (AR_READNO(data) < fip->otherReadNo) {
+ read1 = 1;
+ read2 = 0;
+ }
+ readLen[read1] = fip->readlen;
+ readLen[read2] = readlen;
+ rc = SequenceRecordInit(&srec, 2, readLen);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed resizing sequence record buffer", ""));
+ goto LOOP_END;
+ }
+ srec.ti[read1] = fip->ti;
+ srec.aligned[read1] = fip->aligned;
+ srec.is_bad[read1] = fip->is_bad;
+ srec.orientation[read1] = fip->orientation;
+ srec.cskey[read1] = fip->cskey;
+ memcpy(srec.seq + srec.readStart[read1], src, fip->readlen);
+ src += fip->readlen;
+ memcpy(srec.qual + srec.readStart[read1], src, fip->readlen);
+ src += fip->readlen;
+
+ srec.orientation[read2] = readOrientation;
+ COPY_READ(srec.seq + srec.readStart[read2],
+ seqDNA,
+ srec.readLen[read2],
+ (isColorSpace && !aligned) ? 0 : srec.orientation[read2] == ReadOrientationReverse);
+ COPY_QUAL(srec.qual + srec.readStart[read2],
+ qual,
+ srec.readLen[read2],
+ (isColorSpace && !aligned) ? 0 : srec.orientation[read2] == ReadOrientationReverse);
+
+ srec.keyId = keyId;
+ srec.is_bad[read2] = SequenceIsLowQuality(sequence);
+ srec.aligned[read2] = aligned;
+ srec.cskey[read2] = cskey;
+ srec.ti[read2] = ti;
+
+ srec.spotGroup = spotGroup;
+ srec.spotGroupLen = strlen(spotGroup);
+ if (value->pcr_dup && (srec.is_bad[0] || srec.is_bad[1])) {
+ filterFlagConflictRecords++;
+ if(filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT){
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "name=%s", name));
+ } else if(filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT){
+ (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "name=%s", name));
+ }
+ }
+ rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform,
+ G->keepMismatchQual, G->no_real_output, G->hasTI, G->QualQuantizer);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+ goto LOOP_END;
+ }
+ CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+ if(value->fragmentId & 1){
+ fcountOne--;
+ } else {
+ fcountBoth--;
+ }
+ /* printf("OUT:%9d\tcnt2=%ld\tcnt1=%ld\n",value->fragmentId,fcountBoth,fcountOne);*/
+ rc = KMemBankFree(frags, value->fragmentId>>1);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankFree failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+ goto LOOP_END;
+ }
+ value->fragmentId = 0;
+ }
+ }
+ }
+ if (!isPrimary && aligned) {
+ int32_t bam_mrid;
+ int64_t mpos;
+ int64_t mrid;
+ int64_t tlen;
+
+ AlignmentGetMatePosition(alignment, &mpos);
+ AlignmentGetMateRefSeqId(alignment, &bam_mrid);
+ AlignmentGetInsertSize(alignment, &tlen);
+
+ if (mpos >= 0 && bam_mrid >= 0 && tlen != 0 && header != NULL) {
+ ReferenceSequence mref;
+ if (ReferenceInfoGetRefSeq(header, bam_mrid, &mref) == 0) {
+ rc_t rc_temp = ReferenceGet1stRow(ref, &mrid, mref.name);
+ if (rc_temp == 0) {
+ data.mate_ref_pos = mpos;
+ data.template_len = tlen;
+ data.mate_ref_orientation = (SequenceGetOrientationMate(sequence) == ReadOrientationReverse);
+ }
+ else {
+ (void)PLOGERR(klogWarn, (klogWarn, rc_temp, "Failed to get refID for $(name)", "name=%s", mref.name));
+ mrid = 0;
+ }
+ data.mate_ref_id = mrid;
+ }
+ }
+ }
+ }
+ else if (wasInserted & (isPrimary || !originally_aligned)) {
+ /* new unmated fragment - no spot assembly */
+ unsigned readLen[1];
+
+ value->seqHash[0] = SeqHashKey(seqDNA, readlen);
+
+ readLen[0] = readlen;
+ rc = SequenceRecordInit(&srec, 1, readLen);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed resizing sequence record buffer", ""));
+ goto LOOP_END;
+ }
+ srec.ti[0] = ti;
+ srec.aligned[0] = aligned;
+ srec.is_bad[0] = SequenceIsLowQuality(sequence);
+ srec.orientation[0] = readOrientation;
+ srec.cskey[0] = cskey;
+ COPY_READ(srec.seq + srec.readStart[0], seqDNA, readlen, (isColorSpace && !aligned) ? 0 : srec.orientation[0] == ReadOrientationReverse);
+ COPY_QUAL(srec.qual + srec.readStart[0], qual, readlen, (isColorSpace && !aligned) ? 0 : srec.orientation[0] == ReadOrientationReverse);
+
+ srec.keyId = keyId;
+
+ srec.spotGroup = spotGroup;
+ srec.spotGroupLen = strlen(spotGroup);
+ if (value->pcr_dup && srec.is_bad[0]) {
+ filterFlagConflictRecords++;
+ if (filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "name=%s", name));
+ }
+ else if (filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "name=%s", name));
+ }
+ }
+ rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform,
+ G->keepMismatchQual, G->no_real_output, G->hasTI, G->QualQuantizer);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "SequenceWriteRecord failed", ""));
+ goto LOOP_END;
+ }
+ CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+ value->fragmentId = 0;
+ }
+
+ if (aligned) {
+ if (value->alignmentCount[AR_READNO(data) - 1] < 254)
+ ++value->alignmentCount[AR_READNO(data) - 1];
+ ++ctx->alignCount;
+
+ assert(keyId >> 32 < ctx->key2id_count);
+ assert((uint32_t)keyId < ctx->idCount[keyId >> 32]);
+
+ rc = AlignmentWriteRecord(align, &data, G->expectUnsorted);
+ if (rc == 0) {
+ if (!isPrimary)
+ data.alignId = ++ctx->secondId;
+
+ rc = ReferenceAddAlignId(ref, data.alignId, isPrimary);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "ReferenceAddAlignId failed", ""));
+ }
+ else {
+ *had_alignments = true;
+ }
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc, "AlignmentWriteRecord failed", ""));
+ }
+ }
+ /**************************************************************/
+
+ LOOP_END:
+ RecordRelease(record);
+ if (sequence != NULL)
+ SequenceRelease(sequence);
+ if (alignment != NULL)
+ AlignmentRelease(alignment);
+ if (cg != NULL)
+ CGDataRelease(cg);
+
+ ++reccount;
+ if (G->maxAlignCount > 0 && reccount >= G->maxAlignCount)
+ break;
+ if (rc == 0)
+ *had_sequences = true;
+ }
+
+ if (header != NULL)
+ ReferenceInfoRelease(header);
+
+ if (filterFlagConflictRecords > 0) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "$(cnt1) out of $(cnt2) records contained warning : both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "cnt1=%lu,cnt2=%lu", filterFlagConflictRecords,recordsProcessed));
+ }
+ if (rc == 0 && recordsProcessed == 0) {
+ (void)LOGMSG(klogWarn, (G->limit2config || G->refFilter != NULL) ?
+ "All records from the file were filtered out" :
+ "The file contained no records that were processed.");
+ rc = RC(rcAlign, rcFile, rcReading, rcData, rcEmpty);
+ }
+ if (rc == 0 && reccount > 0) {
+ double percentage = ((double)G->errCount) / reccount;
+ double allowed = G->maxErrPct/ 100.0;
+ if (percentage > allowed) {
+ rc = RC(rcExe, rcTable, rcClosing, rcData, rcInvalid);
+ (void)PLOGERR(klogErr,
+ (klogErr, rc,
+ "Too many bad records: "
+ "records: $(records), bad records: $(bad_records), "
+ "bad records percentage: $(percentage), "
+ "allowed percentage: $(allowed)",
+ "records=%lu,bad_records=%lu,percentage=%.2f,allowed=%.2f",
+ reccount, G->errCount, percentage, allowed));
+ }
+ }
+
+ KDataBufferWhack(&buf);
+ KDataBufferWhack(&fragBuf);
+ KDataBufferWhack(&srec.storage);
+ KDataBufferWhack(&cigBuf);
+ return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * CommonWriter
+ */
+
+rc_t CommonWriterInit(CommonWriter* self, struct VDBManager *mgr, struct VDatabase *db, const CommonWriterSettings* G)
+{
+ rc_t rc;
+ assert(self);
+ assert(mgr);
+ assert(db);
+
+ memset(self, 0, sizeof(*self));
+ if (G)
+ self->settings = *G;
+
+ self->ref = malloc(sizeof(*self->ref));
+ if (self->ref == 0)
+ return RC(rcAlign, rcArc, rcAllocating, rcMemory, rcExhausted);
+
+ rc = ReferenceInit(self->ref,
+ mgr,
+ db,
+ self->settings.expectUnsorted,
+ self->settings.acceptHardClip,
+ self->settings.refXRefPath,
+ self->settings.inpath,
+ self->settings.maxSeqLen,
+ self->settings.refFiles);
+ if (rc == 0)
+ {
+ self->seq = malloc(sizeof(*self->seq));
+ if (self->seq == 0)
+ {
+ ReferenceWhack(self->ref, false, 0);
+ free(self->ref);
+ return RC(rcAlign, rcArc, rcAllocating, rcMemory, rcExhausted);
+ }
+ SequenceWriterInit(self->seq, db);
+
+ self->align = AlignmentMake(db);
+ if (self->align == 0)
+ {
+ ReferenceWhack(self->ref, false, 0);
+ free(self->ref);
+
+ SequenceWhack(self->seq, false);
+ free(self->seq);
+
+ return RC(rcAlign, rcArc, rcAllocating, rcMemory, rcExhausted);
+ }
+
+ rc = SetupContext(&self->settings, &self->ctx);
+ if (rc != 0)
+ {
+ ReferenceWhack(self->ref, false, 0);
+ free(self->ref);
+
+ SequenceWhack(self->seq, false);
+ free(self->seq);
+
+ AlignmentWhack(self->align, false);
+ }
+ }
+ if (self->settings.tmpfs == NULL)
+ self->settings.tmpfs = "/tmp";
+
+ self->commit = true;
+
+ return rc;
+}
+
+rc_t CommonWriterArchive(CommonWriter* self, const struct ReaderFile* reader)
+{
+ rc_t rc;
+ assert(self);
+ rc = ArchiveFile(reader,
+ &self->settings,
+ &self->ctx,
+ self->ref,
+ self->seq,
+ self->align,
+ &self->had_alignments,
+ &self->had_sequences);
+ if (rc)
+ self->commit = false;
+
+ self->err_count += self->settings.errCount;
+ return rc;
+}
+
+rc_t CommonWriterComplete(CommonWriter* self, bool quitting)
+{
+ rc_t rc=0;
+ /*** No longer need memory for key2id ***/
+ size_t i;
+ for (i = 0; i != self->ctx.key2id_count; ++i) {
+ KBTreeDropBacking(self->ctx.key2id[i]);
+ KBTreeRelease(self->ctx.key2id[i]);
+ self->ctx.key2id[i] = NULL;
+ }
+ free(self->ctx.key2id_names);
+ self->ctx.key2id_names = NULL;
+ /*******************/
+
+ if (self->had_sequences) {
+ if (!quitting) {
+ (void)LOGMSG(klogInfo, "Writing unpaired sequences");
+ rc = WriteSoloFragments(&self->settings, &self->ctx, self->seq);
+ ContextReleaseMemBank(&self->ctx);
+ if (rc == 0) {
+ rc = SequenceDoneWriting(self->seq);
+ if (rc == 0) {
+ (void)LOGMSG(klogInfo, "Updating sequence alignment info");
+ rc = SequenceUpdateAlignInfo(&self->ctx, self->seq);
+ }
+ }
+ }
+ else
+ ContextReleaseMemBank(&self->ctx);
+ }
+
+ if (self->had_alignments && !quitting) {
+ (void)LOGMSG(klogInfo, "Writing alignment spot ids");
+ rc = AlignmentUpdateSpotInfo(&self->ctx, self->align);
+ }
+
+ return rc;
+}
+
+rc_t CommonWriterWhack(CommonWriter* self)
+{
+ rc_t rc = 0;
+ assert(self);
+
+ ContextRelease(&self->ctx);
+
+ if (self->align)
+ rc = AlignmentWhack(self->align, self->commit);
+
+ if (self->seq)
+ {
+ SequenceWhack(self->seq, self->commit);
+ free(self->seq);
+ }
+
+ if (self->ref)
+ {
+ rc_t rc2 = ReferenceWhack(self->ref, self->commit, self->settings.maxSeqLen);
+ if (rc == 0)
+ rc = rc2;
+ free(self->ref);
+ }
+
+ return rc;
+}
+
diff --git a/libs/loader/mmarray.c b/libs/loader/mmarray.c
new file mode 100644
index 0000000..9a62fd2
--- /dev/null
+++ b/libs/loader/mmarray.c
@@ -0,0 +1,131 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <loader/mmarray.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+#include <klib/rc.h>
+
+#include <kfs/mmap.h>
+#include <kfs/file.h>
+
+#define MMA_NUM_CHUNKS_BITS (24u)
+#define MMA_NUM_SUBCHUNKS_BITS ((32u)-(MMA_NUM_CHUNKS_BITS))
+#define MMA_SUBCHUNK_SIZE (1u << MMA_NUM_CHUNKS_BITS)
+#define MMA_SUBCHUNK_COUNT (1u << MMA_NUM_SUBCHUNKS_BITS)
+
+typedef struct MMArray {
+ KFile *fp;
+ size_t elemSize;
+ uint64_t fsize;
+ struct mma_map_s {
+ struct mma_submap_s {
+ uint8_t *base;
+ KMMap *mmap;
+ } submap[MMA_SUBCHUNK_COUNT];
+ } map[NUM_ID_SPACES];
+} MMArray;
+
+rc_t MMArrayMake(struct MMArray **rslt, KFile *fp, uint32_t elemSize)
+{
+ MMArray *const self = calloc(1, sizeof(*self));
+
+ if (self == NULL)
+ return RC(rcExe, rcMemMap, rcConstructing, rcMemory, rcExhausted);
+ self->elemSize = (elemSize + 3) & ~(3u); /** align to 4 byte **/
+ self->fp = fp;
+ KFileAddRef(fp);
+ *rslt = self;
+ return 0;
+}
+
+#define PERF 0
+
+rc_t MMArrayGet(struct MMArray *const self, void **const value, uint64_t const element)
+{
+ unsigned const bin_no = element >> 32;
+ unsigned const subbin = ((uint32_t)element) >> MMA_NUM_CHUNKS_BITS;
+ unsigned const in_bin = (uint32_t)element & (MMA_SUBCHUNK_SIZE - 1);
+
+ if (bin_no >= sizeof(self->map)/sizeof(self->map[0]))
+ return RC(rcExe, rcMemMap, rcConstructing, rcId, rcExcessive);
+
+ if (self->map[bin_no].submap[subbin].base == NULL) {
+ size_t const chunk = MMA_SUBCHUNK_SIZE * self->elemSize;
+ size_t const fsize = self->fsize + chunk;
+ rc_t rc = KFileSetSize(self->fp, fsize);
+
+ if (rc == 0) {
+ KMMap *mmap;
+
+ self->fsize = fsize;
+ rc = KMMapMakeRgnUpdate(&mmap, self->fp, self->fsize, chunk);
+ if (rc == 0) {
+ void *base;
+
+ rc = KMMapAddrUpdate(mmap, &base);
+ if (rc == 0) {
+#if PERF
+ static unsigned mapcount = 0;
+
+ (void)PLOGMSG(klogInfo, (klogInfo, "Number of mmaps: $(cnt)", "cnt=%u", ++mapcount));
+#endif
+ self->map[bin_no].submap[subbin].mmap = mmap;
+ self->map[bin_no].submap[subbin].base = base;
+
+ goto GET_MAP;
+ }
+ KMMapRelease(mmap);
+ }
+ }
+ return rc;
+ }
+GET_MAP:
+ *value = &self->map[bin_no].submap[subbin].base[(size_t)in_bin * self->elemSize];
+ return 0;
+}
+
+void MMArrayWhack(struct MMArray *self)
+{
+ unsigned i;
+
+ for (i = 0; i != sizeof(self->map)/sizeof(self->map[0]); ++i) {
+ unsigned j;
+
+ for (j = 0; j != sizeof(self->map[0].submap)/sizeof(self->map[0].submap[0]); ++j) {
+ if (self->map[i].submap[j].mmap)
+ KMMapRelease(self->map[i].submap[j].mmap);
+ self->map[i].submap[j].mmap = NULL;
+ self->map[i].submap[j].base = NULL;
+ }
+ }
+ KFileRelease(self->fp);
+ free(self);
+}
+
+
diff --git a/libs/loader/reference-writer.c b/libs/loader/reference-writer.c
new file mode 100644
index 0000000..4fdfbc2
--- /dev/null
+++ b/libs/loader/reference-writer.c
@@ -0,0 +1,459 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <kfs/file.h>
+
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <align/writer-refseq.h>
+
+#include <loader/reference-writer.h>
+
+#include <stdlib.h>
+#include <limits.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+#define SORTED_OPEN_TABLE_LIMIT (2)
+#define SORTED_CACHE_SIZE ((2 * 1024 * 1024)/(SORTED_OPEN_TABLE_LIMIT))
+
+#ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+#define UNSORTED_OPEN_TABLE_LIMIT (8)
+#define UNSORTED_CACHE_SIZE ((1024 * 1024 * 1024)/(UNSORTED_OPEN_TABLE_LIMIT))
+#else
+#define UNSORTED_OPEN_TABLE_LIMIT (64)
+#define UNSORTED_CACHE_SIZE (350 * 1024 * 1024)
+#endif
+
+#if _DEBUGGING
+#define DUMP_CONFIG 1
+#endif
+
+struct overlap_s {
+ uint32_t min; /* minimum start pos of any alignment that ends in this chunk */
+ uint32_t max; /* maximum end pos of any alignment that starts before this chunk and ends in this chunk */
+};
+
+extern void ReferenceMgr_DumpConfig(ReferenceMgr const *const self);
+
+rc_t ReferenceInit(Reference *self,
+ const VDBManager *mgr,
+ VDatabase *db,
+ bool expectUnsorted,
+ bool acceptHardClip,
+ char const *refXRefPath,
+ char const *inpath,
+ uint32_t maxSeqLen,
+ char const** refFiles
+ )
+{
+ rc_t rc;
+ size_t const cache = expectUnsorted ? UNSORTED_CACHE_SIZE : SORTED_CACHE_SIZE;
+ unsigned const open_count = expectUnsorted ? UNSORTED_OPEN_TABLE_LIMIT : SORTED_OPEN_TABLE_LIMIT;
+
+ memset(self, 0, sizeof(*self));
+
+ self->coverage.elem_bits = self->mismatches.elem_bits = self->indels.elem_bits = 32;
+ self->pri_align.elem_bits = self->sec_align.elem_bits = 64;
+ self->pri_overlap.elem_bits = self->sec_overlap.elem_bits = sizeof(struct overlap_s) * 8;
+
+ self->acceptHardClip = acceptHardClip;
+
+ rc = ReferenceMgr_Make(&self->mgr, db, mgr,
+ ewrefmgr_co_Coverage,
+ refXRefPath, inpath,
+ maxSeqLen, cache, open_count);
+ if (rc == 0 && refFiles != NULL) {
+ unsigned i;
+
+ for (i = 0; refFiles[i]; ++i) {
+ rc = ReferenceMgr_FastaPath(self->mgr, refFiles[i]);
+ if (rc) {
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "fasta file '$(file)'", "file=%s", refFiles[i]));
+ break;
+ }
+ }
+#if DUMP_CONFIG
+ if (rc == 0) {
+ ReferenceMgr_DumpConfig(self->mgr);
+ }
+#endif
+ }
+ return rc;
+}
+
+static
+void Unsorted(Reference *self) {
+ (void)LOGMSG(klogWarn, "Alignments are unsorted");
+ self->out_of_order = true;
+ ReferenceMgr_SetCache(self->mgr, UNSORTED_CACHE_SIZE, UNSORTED_OPEN_TABLE_LIMIT);
+ KDataBufferWhack(&self->sec_align);
+ KDataBufferWhack(&self->pri_align);
+ KDataBufferWhack(&self->mismatches);
+ KDataBufferWhack(&self->indels);
+ KDataBufferWhack(&self->coverage);
+ KDataBufferWhack(&self->pri_overlap);
+ KDataBufferWhack(&self->sec_overlap);
+}
+
+#define BAIL_ON_FAIL(STMT) do { rc_t const rc__ = (STMT); if (rc__) return rc__; } while(0)
+
+static rc_t FlushBuffers(Reference *self, uint64_t upto, bool full, bool final, uint32_t maxSeqLen)
+{
+ if (!self->out_of_order && upto > 0) {
+ size_t offset = 0;
+ unsigned *const miss = (unsigned *)self->mismatches.base;
+ unsigned *const indel = (unsigned *)self->indels.base;
+ unsigned *const cov = (unsigned *)self->coverage.base;
+ struct overlap_s *const pri_overlap = (struct overlap_s *)self->pri_overlap.base;
+ struct overlap_s *const sec_overlap = (struct overlap_s *)self->sec_overlap.base;
+ unsigned chunk = 0;
+
+ while ((self->curPos + offset + (full ? 0 : maxSeqLen)) <= upto) {
+ ReferenceSeqCoverage data;
+ uint64_t const curPos = self->curPos + offset;
+ unsigned const n = self->endPos > (curPos + maxSeqLen) ?
+ maxSeqLen : (self->endPos - curPos);
+ unsigned const m = curPos + n > upto ? upto - curPos : n;
+ unsigned i;
+ unsigned hi;
+ unsigned lo;
+
+ if (n == 0) break;
+
+ memset(&data, 0, sizeof(data));
+
+ data.ids[ewrefcov_primary_table].elements = self->pri_align.elem_count;
+ data.ids[ewrefcov_primary_table].buffer = self->pri_align.base;
+ data.overlap_ref_pos[ewrefcov_primary_table] = pri_overlap[chunk].min;
+ data.overlap_ref_len[ewrefcov_primary_table] = pri_overlap[chunk].max ? pri_overlap[chunk].max - curPos : 0;
+
+ data.ids[ewrefcov_secondary_table].elements = self->sec_align.elem_count;
+ data.ids[ewrefcov_secondary_table].buffer = self->sec_align.base;
+ data.overlap_ref_pos[ewrefcov_secondary_table] = sec_overlap[chunk].min;
+ data.overlap_ref_len[ewrefcov_secondary_table] = sec_overlap[chunk].max ? sec_overlap[chunk].max - curPos : 0;
+
+ for (hi = 0, lo = UINT_MAX, i = 0; i != m; ++i) {
+ unsigned const coverage = cov[offset + i];
+
+ if (hi < coverage)
+ hi = coverage;
+ if (lo > coverage)
+ lo = coverage;
+ }
+ data.low = lo > 255 ? 255 : lo;
+ data.high = hi > 255 ? 255 : hi;
+
+ for (i = 0; i != m; ++i)
+ data.mismatches += miss[offset + i];
+
+ for (i = 0; i != m; ++i)
+ data.indels += indel[offset + i];
+
+ {
+ rc_t rc = ReferenceSeq_AddCoverage(self->rseq, curPos, &data);
+
+ if (rc) {
+ Unsorted(self);
+ return 0;
+ }
+ }
+
+ KDataBufferResize(&self->pri_align, 0);
+ KDataBufferResize(&self->sec_align, 0);
+ offset += n;
+ ++chunk;
+ }
+ if (!final && offset > 0) {
+ unsigned const newChunkCount = self->pri_overlap.elem_count - chunk;
+ unsigned const newBaseCount = self->endPos - self->curPos - offset;
+
+ memmove(self->pri_overlap.base, pri_overlap + chunk, newChunkCount * sizeof(pri_overlap[0]));
+ memmove(self->sec_overlap.base, sec_overlap + chunk, newChunkCount * sizeof(sec_overlap[0]));
+ memmove(self->mismatches.base, miss + offset, newBaseCount * sizeof(miss[0]));
+ memmove(self->indels.base, indel + offset, newBaseCount * sizeof(indel[0]));
+ memmove(self->coverage.base, cov + offset, newBaseCount * sizeof(cov[0]));
+
+ KDataBufferResize(&self->pri_overlap, newChunkCount);
+ KDataBufferResize(&self->sec_overlap, newChunkCount);
+
+ self->curPos += offset;
+ }
+ }
+ return 0;
+}
+
+rc_t ReferenceSetFile(Reference *self, const char id[],
+ uint64_t length, uint8_t const md5[16], uint32_t maxSeqLen)
+{
+ const ReferenceSeq *rseq;
+ unsigned n;
+
+ for (n = 0; ; ++n) {
+ if (self->last_id[n] != id[n])
+ break;
+ if (self->last_id[n] == 0 && id[n] == 0)
+ return 0;
+ }
+ while (id[n])
+ ++n;
+ if (n >= sizeof(self->last_id))
+ return RC(rcApp, rcTable, rcAccessing, rcParam, rcTooLong);
+
+ BAIL_ON_FAIL(FlushBuffers(self, self->length, true, true, maxSeqLen));
+ BAIL_ON_FAIL(ReferenceMgr_GetSeq(self->mgr, &rseq, id));
+
+ if (self->rseq)
+ ReferenceSeq_Release(self->rseq);
+ self->rseq = rseq;
+
+ memcpy(self->last_id, id, n + 1);
+ self->curPos = self->endPos = 0;
+ self->length = length;
+ self->lastOffset = 0;
+
+ if(!self->out_of_order) (void)PLOGMSG(klogInfo, (klogInfo, "Processing Reference '$(id)'", "id=%s", id));
+
+ return 0;
+}
+
+rc_t ReferenceVerify(Reference const *self, char const id[], uint64_t length, uint8_t const md5[16])
+{
+ return ReferenceMgr_Verify(self->mgr, id, length, md5);
+}
+
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[])
+{
+ const ReferenceSeq* rseq;
+ rc_t rc = ReferenceMgr_GetSeq(self->mgr, &rseq, refName);
+ if( rc == 0 ) {
+ rc = ReferenceSeq_Get1stRow(rseq, refID);
+ ReferenceSeq_Release(rseq);
+ }
+ return rc;
+}
+
+static
+rc_t ReferenceAddCoverage(Reference *const self,
+ unsigned const refStart,
+ unsigned const refLength,
+ uint32_t const mismatches,
+ uint32_t const indels,
+ bool const isPrimary,
+ uint32_t maxSeqLen
+ )
+{
+ unsigned const refEnd = refStart + refLength;
+
+ if (refEnd > self->endPos) {
+ unsigned const t1 = refEnd + (maxSeqLen - 1);
+ unsigned const adjust = t1 % maxSeqLen;
+ unsigned const newEndPos = t1 - adjust;
+ unsigned const baseCount = self->endPos - self->curPos;
+ unsigned const newBaseCount = newEndPos - self->curPos;
+
+ BAIL_ON_FAIL(KDataBufferResize(&self->coverage, newBaseCount));
+ BAIL_ON_FAIL(KDataBufferResize(&self->mismatches, newBaseCount));
+ BAIL_ON_FAIL(KDataBufferResize(&self->indels, newBaseCount));
+
+ memset(&((unsigned *)self->coverage.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+ memset(&((unsigned *)self->mismatches.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+ memset(&((unsigned *)self->indels.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+ self->endPos = newEndPos;
+ }
+ if ((refEnd - self->curPos) / maxSeqLen >= self->pri_overlap.elem_count) {
+ unsigned const chunks = (refEnd - self->curPos) / maxSeqLen + 1;
+ unsigned const end = self->pri_overlap.elem_count;
+
+ BAIL_ON_FAIL(KDataBufferResize(&self->pri_overlap, chunks));
+ BAIL_ON_FAIL(KDataBufferResize(&self->sec_overlap, chunks));
+
+ memset(&((struct overlap_s *)self->pri_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+ memset(&((struct overlap_s *)self->sec_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+ }
+ BAIL_ON_FAIL(FlushBuffers(self, refStart, false, false, maxSeqLen));
+ if (!self->out_of_order) {
+ unsigned const startBase = refStart - self->curPos;
+ unsigned const endChunk = (startBase + refLength) / maxSeqLen;
+ KDataBuffer *const overlapBuffer = isPrimary ? &self->pri_overlap : &self->sec_overlap;
+ unsigned *const cov = &((unsigned *)self->coverage.base)[startBase];
+ unsigned i;
+
+ ((unsigned *)self->mismatches.base)[startBase] += mismatches;
+ ((unsigned *)self->indels.base)[startBase] += indels;
+
+ if (((struct overlap_s *)overlapBuffer->base)[endChunk].min == 0 ||
+ ((struct overlap_s *)overlapBuffer->base)[endChunk].min > refStart)
+ {
+ ((struct overlap_s *)overlapBuffer->base)[endChunk].min = refStart;
+ }
+ if (endChunk != 0 &&
+ ((struct overlap_s *)overlapBuffer->base)[endChunk].max < refStart + refLength)
+ {
+ ((struct overlap_s *)overlapBuffer->base)[endChunk].max = refStart + refLength;
+ }
+
+ for (i = 0; i != refLength; ++i) {
+ if (cov[i] < UINT_MAX)
+ ++cov[i];
+ }
+ }
+ return 0;
+}
+
+static void GetCounts(AlignmentRecord const *data, unsigned const seqLen,
+ unsigned *const nMatch,
+ unsigned *const nMiss,
+ unsigned *const nIndels)
+{
+ bool const *has_mismatch = data->data.has_mismatch.buffer;
+ bool const *has_offset = data->data.has_ref_offset.buffer;
+ int32_t const *ref_offset = data->data.ref_offset.buffer;
+ unsigned const n = data->data.ref_offset.elements;
+ unsigned const left_clip = (n != 0 && has_offset[0] && ref_offset[0] < 0) ? -ref_offset[0] : 0;
+ int right_edge;
+ unsigned nmis;
+ unsigned nmatch;
+ unsigned i;
+ unsigned j;
+
+ for (right_edge = data->data.ref_len, i = 0; i != n; ++i)
+ right_edge -= ref_offset[i];
+ if (right_edge > seqLen)
+ right_edge = seqLen;
+ for (j = left_clip ? 1 : 0, i = left_clip, nmatch = nmis = 0; i < right_edge; ) {
+ if (has_offset[i]) {
+ int const offs = ref_offset[j++];
+
+ if (offs < 0) {
+ i += (unsigned)(-offs);
+ continue;
+ }
+ }
+ if (has_mismatch[i])
+ ++nmis;
+ else
+ ++nmatch;
+ ++i;
+ }
+ *nMatch = nmatch;
+ *nMiss = nmis;
+ *nIndels = n - (left_clip ? 1 : 0);
+}
+
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t const pos,
+ uint32_t const rawCigar[], uint32_t const cigCount,
+ char const seqDNA[], uint32_t const seqLen, uint32_t *matches, bool acceptNoMatch, unsigned minMatchCount, uint32_t maxSeqLen)
+{
+ *matches = 0;
+ BAIL_ON_FAIL(ReferenceSeq_Compress(self->rseq,
+ (self->acceptHardClip ? ewrefmgr_co_AcceptHardClip : 0) + ewrefmgr_cmp_Binary,
+ pos,
+ seqDNA, seqLen, rawCigar, cigCount, 0, NULL, 0, 0, NULL, 0, &data->data));
+
+ if (!acceptNoMatch && data->data.ref_len == 0)
+ return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+
+ if (!self->out_of_order && pos < self->lastOffset) {
+ Unsorted(self);
+ }
+ if (self->out_of_order)
+ return 0;
+ else {
+ unsigned nmis;
+ unsigned nmatch;
+ unsigned indels;
+
+ self->lastOffset = data->data.effective_offset;
+ GetCounts(data, seqLen, &nmatch, &nmis, &indels);
+ *matches = nmatch;
+
+ if (acceptNoMatch || nmatch >= minMatchCount)
+ return ReferenceAddCoverage(self, data->data.effective_offset,
+ data->data.ref_len, nmis, indels,
+ data->isPrimary, maxSeqLen);
+ else
+ return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+ }
+}
+
+static rc_t IdVecAppend(KDataBuffer *vec, uint64_t id)
+{
+ uint64_t const end = vec->elem_count;
+
+ BAIL_ON_FAIL(KDataBufferResize(vec, end + 1));
+ ((uint64_t *)vec->base)[end] = id;
+ return 0;
+}
+
+rc_t ReferenceAddAlignId(Reference *self,
+ int64_t align_id,
+ bool is_primary
+ )
+{
+ if (self->out_of_order)
+ return 0;
+ return IdVecAppend(is_primary ? &self->pri_align : &self->sec_align, align_id);
+}
+
+rc_t ReferenceWhack(Reference *self, bool commit, uint32_t maxSeqLen)
+{
+ rc_t rc = 0;
+
+ if (self) {
+#if DUMP_CONFIG
+ if (self->mgr)
+ ReferenceMgr_DumpConfig(self->mgr);
+#endif
+ if (commit) {
+ rc = FlushBuffers(self, self->length, true, true, maxSeqLen);
+ if (rc != 0)
+ commit = false;
+ }
+ KDataBufferWhack(&self->sec_align);
+ KDataBufferWhack(&self->pri_align);
+ KDataBufferWhack(&self->mismatches);
+ KDataBufferWhack(&self->indels);
+ KDataBufferWhack(&self->coverage);
+ KDataBufferWhack(&self->pri_overlap);
+ KDataBufferWhack(&self->sec_overlap);
+ if (self->rseq)
+ rc = ReferenceSeq_Release(self->rseq);
+ if (self->out_of_order) {
+ (void)LOGMSG(klogInfo, "Starting coverage calculation");
+ rc = ReferenceMgr_Release(self->mgr, commit, NULL, true);
+ }
+ else {
+ rc = ReferenceMgr_Release(self->mgr, commit, NULL, false);
+ }
+ }
+ return rc;
+}
diff --git a/libs/loader/sequence-writer.c b/libs/loader/sequence-writer.c
new file mode 100644
index 0000000..a5f3e1b
--- /dev/null
+++ b/libs/loader/sequence-writer.c
@@ -0,0 +1,361 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/database.h>
+
+#include <kdb/manager.h>
+
+#include <insdc/sra.h>
+#include <insdc/insdc.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include <ctype.h>
+
+#include <align/writer-sequence.h>
+
+#include <loader/sequence-writer.h>
+#include <loader/common-reader.h>
+
+/* MARK: SequenceWriter Object */
+
+SequenceWriter *SequenceWriterInit(SequenceWriter *self, VDatabase *db) {
+ memset(self, 0, sizeof(*self));
+ self->db = db;
+ VDatabaseAddRef(db);
+ return self;
+}
+
+rc_t SequenceWriteRecord(SequenceWriter *self,
+ SequenceRecord const *rec,
+ bool color,
+ bool isDup,
+ INSDC_SRA_platform_id platform,
+ bool keepMismatchQual,
+ bool no_real_output,
+ bool hasTI,
+ char const *QualQuantizer
+ )
+{
+ rc_t rc = 0;
+ uint8_t nreads = rec->numreads;
+ unsigned i;
+ unsigned seqLen;
+ int64_t dummyRowId;
+
+ uint8_t readInfo[4096];
+ void *h_readInfo = NULL;
+
+ INSDC_coord_zero *readStart = (void *)readInfo;
+ INSDC_coord_len *readLen;
+ uint8_t *alcnt;
+ INSDC_SRA_xread_type *readType;
+ INSDC_SRA_read_filter *readFilter;
+ bool *mask = NULL;
+ size_t const elemSize = sizeof(alcnt[0]) + sizeof(readType[0])
+ + sizeof(readStart[0]) + sizeof(readLen[0])
+ + sizeof(readFilter[0]);
+
+ TableWriterSeqData data;
+
+ for (i = seqLen = 0; i != nreads; ++i) {
+ seqLen += rec->readLen[i];
+ }
+
+ if (nreads * elemSize + keepMismatchQual * seqLen * sizeof(mask[0]) > sizeof(readInfo))
+ {
+ h_readInfo = malloc(nreads * elemSize + keepMismatchQual * seqLen * sizeof(mask[0]));
+ if (h_readInfo == NULL)
+ return RC(rcAlign, rcTable, rcWriting, rcMemory, rcExhausted);
+ readStart = h_readInfo;
+ }
+ readLen = (INSDC_coord_len *)&readStart[nreads];
+ alcnt = (uint8_t *)&readLen[nreads];
+ readType = (INSDC_SRA_xread_type *)&alcnt[nreads];
+ readFilter = (INSDC_SRA_read_filter *)&readType[nreads];
+
+ if (keepMismatchQual) {
+ mask = (bool *)&readFilter[nreads];
+
+ for (i = 0; i != seqLen; ++i) {
+ mask[i] = (rec->qual[i] & 0x80) != 0;
+ }
+ }
+
+ for (i = 0; i != nreads; ++i) {
+ alcnt[i] = rec->aligned[i] ? 1 : 0;
+ readLen[i] = rec->readLen[i];
+ readStart[i] = rec->readStart[i];
+ readType[i] = readLen[i] ? SRA_READ_TYPE_BIOLOGICAL : SRA_READ_TYPE_TECHNICAL;
+ switch ( rec->orientation[i] )
+ {
+ case ReadOrientationForward:
+ readType[i] |= SRA_READ_TYPE_FORWARD;
+ break;
+ case ReadOrientationReverse:
+ readType[i] |= SRA_READ_TYPE_REVERSE;
+ break;
+ case ReadOrientationUnknown:
+ default:
+ break;
+ }
+ readFilter[i] = isDup ? SRA_READ_FILTER_CRITERIA
+ : rec->is_bad[i] ? SRA_READ_FILTER_REJECT : SRA_READ_FILTER_PASS;
+ }
+
+ memset(&data, 0, sizeof(data));
+
+ data.sequence.buffer = rec->seq;
+ data.sequence.elements = seqLen;
+
+ data.quality.buffer = rec->qual;
+ data.quality.elements = seqLen;
+
+ if (keepMismatchQual) {
+ data.no_quantize_mask.buffer = mask;
+ data.no_quantize_mask.elements = seqLen;
+ }
+
+ data.alignment_count.buffer = alcnt;
+ data.alignment_count.elements = nreads;
+
+ data.nreads = nreads;
+
+ data.read_type.buffer = readType;
+ data.read_type.elements = nreads;
+
+ data.read_start.buffer = readStart;
+ data.read_start.elements = nreads;
+
+ data.read_len.buffer = readLen;
+ data.read_len.elements = nreads;
+
+ data.tmp_key_id = rec->keyId;
+
+ data.spot_group.buffer = rec->spotGroup;
+ data.spot_group.elements = rec->spotGroupLen;
+
+ data.cskey.buffer = rec->cskey;
+ data.cskey.elements = nreads;
+
+ data.read_filter.buffer = readFilter;
+ data.read_filter.elements = nreads;
+
+ data.platform.buffer = &platform;
+ data.platform.elements = 1;
+
+ data.ti.buffer = rec->ti;
+ data.ti.elements = nreads;
+
+ if (!no_real_output) {
+ if (self->tbl == NULL) {
+ int csoption = (color ? ewseq_co_ColorSpace : 0);
+
+ if(hasTI) csoption |= ewseq_co_TI;
+
+ rc = TableWriterSeq_Make(&self->tbl, self->db,
+ csoption | ewseq_co_NoLabelData | ewseq_co_SpotGroup, QualQuantizer);
+ }
+ if (rc == 0) {
+ rc = TableWriterSeq_Write(self->tbl, &data, &dummyRowId);
+ }
+ }
+
+ if (h_readInfo)
+ free(h_readInfo);
+
+ return rc;
+}
+
+rc_t SequenceDoneWriting(SequenceWriter *self)
+{
+ return TableWriterSeq_TmpKeyStart(self->tbl);
+}
+
+rc_t SequenceReadKey(const SequenceWriter *cself, int64_t row, uint64_t *keyId)
+{
+ return TableWriterSeq_TmpKey(cself->tbl, row, keyId);
+}
+
+rc_t SequenceUpdateAlignData(SequenceWriter *self, int64_t rowId, unsigned nreads,
+ int64_t const primeId[/* nreads */],
+ uint8_t const algnCnt[/* nreads */])
+{
+ TableWriterData data[2];
+
+ data[0].buffer = primeId; data[0].elements = nreads;
+ data[1].buffer = algnCnt; data[1].elements = nreads;
+
+ return TableWriterSeq_WriteAlignmentData(self->tbl, rowId, &data[0], &data[1]);
+}
+
+void SequenceWhack(SequenceWriter *self, bool commit) {
+ uint64_t dummyRows;
+ rc_t rc;
+
+ VDatabaseRelease(self->db);
+
+ if (self->tbl == NULL)
+ return;
+
+ rc = TableWriterSeq_Whack(self->tbl, commit, &dummyRows);
+}
+
+/* MARK: SequenceRecord Object */
+static
+rc_t SequenceRecordResize(SequenceRecord *self,
+ KDataBuffer *storage,
+ unsigned numreads,
+ unsigned seqLen)
+{
+ size_t sz;
+ rc_t rc;
+
+ sz = seqLen * (sizeof(self->seq[0]) + sizeof(self->qual[0])) +
+ numreads * (sizeof(self->ti) +
+ sizeof(self->readStart[0]) +
+ sizeof(self->readLen[0]) +
+ sizeof(self->aligned[0]) +
+ sizeof(self->orientation[0]) +
+ sizeof(self->alignmentCount[0]) +
+ sizeof(self->cskey[0])
+ );
+ storage->elem_bits = 8;
+ rc = KDataBufferResize(storage, sz);
+ if (rc)
+ return rc;
+ self->numreads = numreads;
+
+ self->ti = (uint64_t *)storage->base;
+ self->readStart = (uint32_t *)&self->ti[numreads];
+ self->readLen = (uint32_t *)&self->readStart[numreads];
+ self->aligned = (bool *)&self->readLen[numreads];
+ self->orientation = (uint8_t *)&self->aligned[numreads];
+ self->is_bad = (uint8_t *)&self->orientation[numreads];
+ self->alignmentCount = (uint8_t *)&self->is_bad[numreads];
+ self->cskey = (char *)&self->alignmentCount[numreads];
+ self->seq = (char *)&self->cskey[numreads];
+ self->qual = (uint8_t *)&self->seq[seqLen];
+
+ self->spotGroup = NULL;
+ self->spotGroupLen = 0;
+
+ return 0;
+}
+
+rc_t SequenceRecordInit(SequenceRecord *self, unsigned numreads, unsigned readLen[])
+{
+ unsigned i;
+ unsigned seqlen = 0;
+ rc_t rc;
+
+ for (i = 0; i != numreads; ++i) {
+ seqlen += readLen[i];
+ }
+ rc = SequenceRecordResize(self, &self->storage, numreads, seqlen);
+ if (rc)
+ return rc;
+ memset(self->storage.base, 0, KDataBufferBytes(&self->storage));
+
+ for (seqlen = 0, i = 0; i != numreads; ++i) {
+ self->readLen[i] = readLen[i];
+ self->readStart[i] = seqlen;
+ seqlen += readLen[i];
+ }
+ self->numreads = numreads;
+ memset(self->cskey, 'T', numreads);
+ return 0;
+}
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+ const SequenceRecord *other
+ )
+{
+ /* save the locations of the original data */
+ unsigned const seq = (uint8_t const *)self->seq - (uint8_t const *)self->storage.base;
+ unsigned const qual = (uint8_t const *)self->qual - (uint8_t const *)self->storage.base;
+ unsigned const cskey = (uint8_t const *)self->cskey - (uint8_t const *)self->storage.base;
+ unsigned const alignmentCount = (uint8_t const *)self->alignmentCount - (uint8_t const *)self->storage.base;
+ unsigned const is_bad = (uint8_t const *)self->is_bad - (uint8_t const *)self->storage.base;
+ unsigned const orientation = (uint8_t const *)self->orientation - (uint8_t const *)self->storage.base;
+ unsigned const aligned = (uint8_t const *)self->aligned - (uint8_t const *)self->storage.base;
+ unsigned const ti = (uint8_t const *)self->ti - (uint8_t const *)self->storage.base;
+ unsigned const readLen = (uint8_t const *)self->readLen - (uint8_t const *)self->storage.base;
+/* unsigned const readStart = (uint8_t const *)self->readStart - (uint8_t const *)self->storage.base;*/
+
+ rc_t rc;
+ unsigned seqlen;
+ unsigned otherSeqlen;
+ unsigned i;
+ unsigned numreads = self->numreads;
+
+ for (seqlen = 0, i = 0; i != numreads; ++i) {
+ seqlen += self->readLen[i];
+ }
+ for (otherSeqlen = 0, i = 0; i != other->numreads; ++i) {
+ otherSeqlen += other->readLen[i];
+ }
+
+ rc = SequenceRecordResize(self, &self->storage, self->numreads + other->numreads, seqlen + otherSeqlen);
+ if (rc)
+ return rc;
+ /* this needs to be reverse order from assignment in Resize function
+ * these regions can overlap
+ */
+ memmove(self->qual, &((uint8_t const *)self->storage.base)[qual], seqlen);
+ memmove(self->seq, &((uint8_t const *)self->storage.base)[seq], seqlen);
+ memmove(self->cskey, &((uint8_t const *)self->storage.base)[cskey], numreads * sizeof(self->cskey[0]));
+ memmove(self->alignmentCount, &((uint8_t const *)self->storage.base)[alignmentCount], numreads * sizeof(self->alignmentCount[0]));
+ memmove(self->is_bad, &((uint8_t const *)self->storage.base)[is_bad], numreads * sizeof(self->is_bad[0]));
+ memmove(self->orientation, &((uint8_t const *)self->storage.base)[orientation], numreads * sizeof(self->orientation[0]));
+ memmove(self->aligned, &((uint8_t const *)self->storage.base)[aligned], numreads * sizeof(self->aligned[0]));
+ memmove(self->readLen, &((uint8_t const *)self->storage.base)[readLen], numreads * sizeof(self->readLen[0]));
+ memmove(self->ti, &((uint8_t const *)self->storage.base)[ti], numreads * sizeof(self->ti[0]));
+
+ memcpy(&self->ti[numreads], other->ti, other->numreads * sizeof(self->ti[0]));
+ memcpy(&self->readLen[numreads], other->readLen, other->numreads * sizeof(self->readLen[0]));
+ memcpy(&self->aligned[numreads], other->aligned, other->numreads * sizeof(self->aligned[0]));
+ memcpy(&self->orientation[numreads], other->orientation, other->numreads * sizeof(self->orientation[0]));
+ memcpy(&self->is_bad[numreads], other->is_bad, other->numreads * sizeof(self->is_bad[0]));
+ memcpy(&self->alignmentCount[numreads], other->alignmentCount, other->numreads * sizeof(self->alignmentCount[0]));
+ memcpy(&self->cskey[numreads], other->cskey, other->numreads * sizeof(self->cskey[0]));
+ memcpy(&self->seq[seqlen], other->seq, otherSeqlen);
+ memcpy(&self->qual[seqlen], other->qual, otherSeqlen);
+
+ for (i = 0, seqlen = 0; i != self->numreads; ++i) {
+ self->readStart[i] = seqlen;
+ seqlen += self->readLen[i];
+ }
+
+ return 0;
+}
diff --git a/libs/search/Makefile b/libs/search/Makefile
index 59a8f9c..dc494ca 100644
--- a/libs/search/Makefile
+++ b/libs/search/Makefile
@@ -42,18 +42,16 @@ include $(TOP)/build/Makefile.env
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
-
-all std: makedirs vers-includes
+all std: makedirs
@ $(MAKE_CMD) $(TARGDIR)/std
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): makedirs
@ $(MAKE_CMD) $(ILIBDIR)/$@
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): makedirs
@ $(MAKE_CMD) $(LIBDIR)/$@
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
#-------------------------------------------------------------------------------
# std
diff --git a/libs/search/libksrch.vers b/libs/search/libksrch.vers
index 238d6e8..2ac9634 100644
--- a/libs/search/libksrch.vers
+++ b/libs/search/libksrch.vers
@@ -1 +1 @@
-1.0.7
+1.0.13
diff --git a/libs/search/libksrch.vers.h b/libs/search/libksrch.vers.h
deleted file mode 100644
index a60a8e9..0000000
--- a/libs/search/libksrch.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBKSRCH_VERS 0x01000007
diff --git a/libs/sra/Makefile b/libs/sra/Makefile
index 3b6c11c..acd8c7c 100644
--- a/libs/sra/Makefile
+++ b/libs/sra/Makefile
@@ -31,7 +31,6 @@ MODULE = libs/sra
INT_LIBS = \
EXT_LIBS = \
- libsrapath \
libsraschema \
libwsraschema \
libsradb \
@@ -49,18 +48,16 @@ VPATH += $(OBJDIR)
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): vers-includes
@ $(MAKE_CMD) $(ILIBDIR)/$@
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): vers-includes
@ $(MAKE_CMD) $(LIBDIR)/$@
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
#-------------------------------------------------------------------------------
# std
@@ -72,10 +69,18 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/all $(TARGDIR)/std
#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
- @ rm -f $(LIBDIR)/libsra-schema.* $(LIBDIR)/libwsra-schema.*
+ @ rm -f $(LIBDIR)/libsra-schema.* $(LIBDIR)/libwsra-schema.* $(LIBDIR)/sra-dflt-schema*
+ @ rm -f $(BINDIR)/libsra-schema.* $(BINDIR)/libwsra-schema.*
.PHONY: clean
@@ -89,35 +94,38 @@ tag: \
#-------------------------------------------------------------------------------
-# srapath stub library
-#
-$(LIBDIR)/libsrapath: $(LIBDIR)/libsrapath.$(LIBX)
-
-SRAPATH_SRC = \
- srapath-stub
-
-SRAPATH_OBJ = \
- $(addsuffix .$(LOBX),$(SRAPATH_SRC))
-
-$(LIBDIR)/libsrapath.$(LIBX): $(SRAPATH_OBJ)
- $(LD) --slib -o $@ $^
-
-libsrapath.vers.h:
- @ true
-
-
-#-------------------------------------------------------------------------------
# sradb embedded schema
#
$(LIBDIR)/libsraschema: $(LIBDIR)/libsraschema.$(LIBX)
$(LIBDIR)/libwsraschema: $(LIBDIR)/libwsraschema.$(LIBX)
-sra-dflt-schema: sra-dflt-schema.$(OBJX)
- $(LD) --exe -o $@ $^ -skapp -svdb -skdb -skfg -skfs -sklib -ldl -sz -sbz2
-
-sra-schema.c: sra-dflt-schema $(SRCDIR)/built-in.vschema $(TOP)/build/sra-dflt-schema.sh
- @ $(TOP)/build/sra-dflt-schema.sh $(OS) ./sra-dflt-schema -o$@ -I$(TOP)/interfaces -T$@.d $(SRCDIR)/built-in.vschema
+SRA_DFLT_SCHEMA_LIBS = \
+ -skapp \
+ -svdb \
+ -skdb \
+ -svfs \
+ -skurl \
+ -skrypto \
+ -skfg \
+ -skfs \
+ -sksproc \
+ -sklib
+
+SRA_DFLT_SCHEMA_OS_LIBS = \
+ -ldl \
+ -sz \
+ -sbz2 \
+ -lm
+
+# set workdir for RUN_REMOTELY in rwin mode
+RWORKDIR=$(OBJDIR)
+
+$(LIBDIR)/sra-dflt-schema: sra-dflt-schema.$(OBJX)
+ $(LD) --exe -o $@ $^ $(SRA_DFLT_SCHEMA_LIBS) $(SRA_DFLT_SCHEMA_OS_LIBS)
+
+sra-schema.c: $(LIBDIR)/sra-dflt-schema $(SRCDIR)/built-in.vschema $(TOP)/build/sra-dflt-schema.sh
+ @ $(TOP)/build/sra-dflt-schema.sh $(BUILD_OS) "$(RUN_REMOTELY) $(LIBDIR)/sra-dflt-schema" -o$@ -I$(TOP)/interfaces -T$(OBJDIR)/$@.d $(SRCDIR)/built-in.vschema
SRA_SCHEMA_SRC = \
sraschema \
@@ -149,17 +157,8 @@ SRASCHEMA_SRC = \
WSRASCHEMA_SRC = \
wsraschema-stub
-ifeq (--static,$(STATIC))
- SRASCHEMA_SRC += $(SRA_SCHEMA_SRC)
-else
- SRASCHEMA_DEPS = $(LIBDIR)/libsra-schema.$(SHLX)
-endif
-
-ifeq (--static,$(STATIC))
- WSRASCHEMA_SRC += $(SRA_SCHEMA_SRC)
-else
- WSRASCHEMA_DEPS = $(LIBDIR)/libwsra-schema.$(SHLX)
-endif
+SRASCHEMA_SRC += $(SRA_SCHEMA_SRC)
+WSRASCHEMA_SRC += $(SRA_SCHEMA_SRC)
SRASCHEMA_OBJ = \
$(addsuffix .$(LOBX),$(SRASCHEMA_SRC))
@@ -186,7 +185,8 @@ SRADBCMN_SRC = \
sramgr-cmn \
sratbl-cmn \
sracol \
- types
+ types \
+ sracache
SRADB_SRC = \
$(SRADBCMN_SRC) \
@@ -198,14 +198,16 @@ SRADB_OBJ = \
SRADB_LIB = \
-ssraschema \
- -ssrapath \
-dvdb \
-dkdb \
+ -dvfs \
-dkfs \
+ -lkfg \
+ -dkproc \
-dklib
$(LIBDIR)/libsradb.$(SHLX): $(SRADB_OBJ)
- $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(SRADB_LIB)
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ -ssrapath $(SRADB_LIB)
$(LIBDIR)/libsradb.$(LIBX): $(SRADB_OBJ)
$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(SRADB_LIB)
@@ -229,14 +231,15 @@ WSRADB_OBJ = \
WSRADB_LIB = \
-ssraschema \
- -ssrapath \
-dwvdb \
-dwkdb \
- -dkfs \
+ -dvfs \
+ -lkfg \
+ -dkproc \
-dklib
$(LIBDIR)/libwsradb.$(SHLX): $(WSRADB_OBJ)
- $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(WSRADB_LIB)
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ -ssrapath $(WSRADB_LIB)
$(LIBDIR)/libwsradb.$(LIBX): $(WSRADB_OBJ)
$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(WSRADB_LIB)
diff --git a/libs/sra/libsradb.vers b/libs/sra/libsradb.vers
index ef538c2..55f20a1 100644
--- a/libs/sra/libsradb.vers
+++ b/libs/sra/libsradb.vers
@@ -1 +1 @@
-3.1.2
+3.1.13
diff --git a/libs/sra/libsradb.vers.h b/libs/sra/libsradb.vers.h
deleted file mode 100644
index 96b09d2..0000000
--- a/libs/sra/libsradb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBSRADB_VERS 0x03010002
diff --git a/libs/sra/libsrareader.vers b/libs/sra/libsrareader.vers
index 781dcb0..0664a8f 100644
--- a/libs/sra/libsrareader.vers
+++ b/libs/sra/libsrareader.vers
@@ -1 +1 @@
-1.1.3
+1.1.6
diff --git a/libs/sra/libsrareader.vers.h b/libs/sra/libsrareader.vers.h
deleted file mode 100644
index 784c8f0..0000000
--- a/libs/sra/libsrareader.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBSRAREADER_VERS 0x01010003
diff --git a/libs/sra/libsraschema.vers.h b/libs/sra/libsraschema.vers.h
deleted file mode 100644
index 98a217f..0000000
--- a/libs/sra/libsraschema.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBSRASCHEMA_VERS 0x01010000
diff --git a/libs/sra/libwsradb.vers b/libs/sra/libwsradb.vers
index ff365e0..55f20a1 100644
--- a/libs/sra/libwsradb.vers
+++ b/libs/sra/libwsradb.vers
@@ -1 +1 @@
-3.1.3
+3.1.13
diff --git a/libs/sra/libwsradb.vers.h b/libs/sra/libwsradb.vers.h
deleted file mode 100644
index 859a66d..0000000
--- a/libs/sra/libwsradb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWSRADB_VERS 0x03010003
diff --git a/libs/sra/libwsraschema.vers.h b/libs/sra/libwsraschema.vers.h
deleted file mode 100644
index 9601db1..0000000
--- a/libs/sra/libwsraschema.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWSRASCHEMA_VERS 0x01010000
diff --git a/libs/sra/reader-abi.c b/libs/sra/reader-abi.c
index 7540201..c48f541 100644
--- a/libs/sra/reader-abi.c
+++ b/libs/sra/reader-abi.c
@@ -30,6 +30,7 @@
#include <sra/abi.h>
#include <os-native.h>
#include <sysalloc.h>
+#include <klib/text.h>
#include "reader-cmn.h"
@@ -62,7 +63,7 @@ struct AbsolidReader {
/* current spot data shortcuts */
const SRAReaderColumn* csread;
const char** cs_key;
- const uint8_t** qual1;
+ const SRAReaderColumn* qual1;
const INSDC_coord_zero** trim_start;
const INSDC_coord_len** trim_len;
const float** signal;
@@ -86,7 +87,7 @@ rc_t AbsolidReaderInit(const AbsolidReader* self,
if( (rc = SRAReaderInit(&self->dad, options, AbsolidReader_master_columns_desc)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[0], &me->csread, NULL)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[1], NULL, (const void***)&self->cs_key)) == 0 &&
- (rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[2], NULL, (const void***)&self->qual1)) == 0 &&
+ (rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[2], &me->qual1, NULL)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[3], NULL, (const void***)&self->trim_start)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[4], NULL, (const void***)&self->trim_len)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[5], NULL, (const void***)&self->signal)) == 0 ) {
@@ -189,7 +190,7 @@ LIB_EXPORT rc_t CC AbsolidReaderSpotName(const AbsolidReader* self,
}
if( psz > 0 ) {
me->prefix_sz = psz + 2;
- strncpy(me->prefix_buf, spotname, me->prefix_sz);
+ string_copy(me->prefix_buf, sizeof(me->prefix_buf), spotname, me->prefix_sz);
} else {
me->prefix_sz = 0;
}
@@ -279,6 +280,8 @@ LIB_EXPORT rc_t CC AbsolidReaderHeader(const AbsolidReader* self, uint32_t readI
char tmp[1024];
if( spotname_sz == 0 ) {
spotname_sz = snprintf(tmp, sizeof(tmp) - 1, "%s.%u", self->dad.accession, self->dad.spot);
+ if ( spotname_sz < 0 )
+ return RC ( rcSRA, rcString, rcConstructing, rcData, rcCorrupt );
spotname = tmp;
}
if( readId > 0 && read_label_sz > 0 ) {
@@ -295,10 +298,14 @@ LIB_EXPORT rc_t CC AbsolidReaderHeader(const AbsolidReader* self, uint32_t readI
self->dad.accession, self->dad.spot, spotname_sz, spotname);
}
}
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
if( ret < 0 ) {
ret = 0;
rc = RC(rcSRA, rcString, rcConstructing, rcMessage, rcUnknown);
} else if( ret >= (int)dsize ) {
+#else
+ if( ret < 0 || ret >= (int)dsize ) {
+#endif
rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
}
if( written != NULL ) {
@@ -317,7 +324,7 @@ LIB_EXPORT rc_t CC AbsolidReaderBase(const AbsolidReader* self, uint32_t readId,
CHECK_SPOT(self->dad);
if( readId > 0 ) {
- if( (rc = AbsolidReader_SpotReadInfo(self, readId, NULL, NULL, NULL, &read_start, &read_len)) != 0 ) {
+ if( (rc = AbsolidReader_SpotReadInfo(self, readId--, NULL, NULL, NULL, &read_start, &read_len)) != 0 ) {
return rc;
}
} else {
@@ -335,7 +342,7 @@ LIB_EXPORT rc_t CC AbsolidReaderBase(const AbsolidReader* self, uint32_t readId,
return RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
} else {
const char* b = self->csread->base;
- data[0] = (*me->cs_key)[readId - 1];
+ data[0] = (*me->cs_key)[readId];
memcpy(&data[1], &b[read_start], read_len - 1);
}
data[read_len] = '\0';
@@ -358,8 +365,8 @@ LIB_EXPORT rc_t CC AbsolidReaderQuality(const AbsolidReader* self, uint32_t read
} else {
return RC(rcSRA, rcFormatter, rcConstructing, rcFormat, rcUnsupported);
}
- if( read_len >= self->minReadLen ) {
- const int8_t* q = (int8_t*)*me->qual1;
+ if( read_len >= self->minReadLen && me->qual1->size ) {
+ const int8_t* q = me->qual1->base;
char* d = data;
INSDC_coord_len i;
@@ -372,6 +379,8 @@ LIB_EXPORT rc_t CC AbsolidReaderQuality(const AbsolidReader* self, uint32_t read
d = data;
}
x = snprintf(d, dsize - j, "%i ", (int)(q[i]));
+ if ( x < 0 )
+ return RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
d += x;
j += x;
}
@@ -420,6 +429,8 @@ rc_t AbsolidReaderSignal(const AbsolidReader* self, uint32_t readId, int idx, ch
d = data;
}
x = snprintf(d, dsize - j, "%.6g ", s[i * 4 + idx]);
+ if ( x < 0 )
+ return RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
d += x;
j += x;
}
diff --git a/libs/sra/reader-fastq.c b/libs/sra/reader-fastq.c
index 008c11f..bfd77ec 100644
--- a/libs/sra/reader-fastq.c
+++ b/libs/sra/reader-fastq.c
@@ -266,6 +266,8 @@ rc_t FastqReader_Header(const FastqReader* self, bool* label,
char tmp[1024];
if( spotname_sz == 0 ) {
ret = snprintf(tmp, sizeof(tmp) - 1, "%s.%u", self->dad.accession, self->dad.spot);
+ if ( ret < 0 )
+ return RC ( rcSRA, rcString, rcConstructing, rcData, rcCorrupt );
spotname = tmp;
spotname_sz = ret;
}
@@ -299,10 +301,14 @@ rc_t FastqReader_Header(const FastqReader* self, bool* label,
}
}
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
if( ret < 0 ) {
ret = 0;
rc = RC(rcSRA, rcString, rcConstructing, rcMessage, rcUnknown);
} else if( ret >= (int)maxlen ) {
+#else
+ if( ret < 0 || ret >= (int)maxlen ) {
+#endif
rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
}
if( written != NULL ) {
@@ -370,6 +376,7 @@ rc_t FastqReader_CSconvert(char from, char to, char* first)
LIB_EXPORT rc_t CC FastqReaderBase(const FastqReader* self, uint32_t readId, char* data, size_t dsize, size_t* written)
{
rc_t rc = 0;
+ uint32_t num_reads;
INSDC_coord_zero read_start = 0;
INSDC_coord_len read_len = 0;
@@ -377,13 +384,13 @@ LIB_EXPORT rc_t CC FastqReaderBase(const FastqReader* self, uint32_t readId, cha
CHECK_SPOT(self->dad);
if( readId > 0 ) {
- if( (rc = FastqReader_SpotReadInfo(self, readId, NULL, NULL, NULL, &read_start, &read_len)) != 0 ) {
+ if( (rc = FastqReader_SpotReadInfo(self, readId--, NULL, NULL, NULL, &read_start, &read_len)) != 0 ) {
return rc;
}
- } else if( me->dad.options & eColorSpace ) {
- return RC(rcSRA, rcFormatter, rcConstructing, rcFormat, rcUnsupported);
- } else if( (rc = FastqReader_SpotInfo(self, NULL, NULL, NULL, NULL, &read_len, NULL)) != 0 ) {
+ } else if( (rc = FastqReader_SpotInfo(self, NULL, NULL, NULL, NULL, &read_len, &num_reads)) != 0 ) {
return rc;
+ } else if( (me->dad.options & eColorSpace) && num_reads > 1 ) {
+ return RC(rcSRA, rcFormatter, rcConstructing, rcFormat, rcUnsupported);
}
if( me->dad.options & eColorSpace ) {
read_len++;
@@ -396,7 +403,6 @@ LIB_EXPORT rc_t CC FastqReaderBase(const FastqReader* self, uint32_t readId, cha
}
if( me->dad.options & eColorSpace ) {
const char* b = self->csread->base;
- --readId;
data[0] = me->csKey == '\0' ? (*self->cs_key)[readId] : me->csKey;
memcpy(&data[1], &b[read_start], read_len - 1);
if( read_len > 1 ) {
diff --git a/libs/sra/reader-illumina.c b/libs/sra/reader-illumina.c
index b3acfdf..4c4e6d3 100644
--- a/libs/sra/reader-illumina.c
+++ b/libs/sra/reader-illumina.c
@@ -30,10 +30,13 @@
#include <sra/illumina.h>
#include <os-native.h>
#include <sysalloc.h>
+#include <va_copy.h>
#include "reader-cmn.h"
#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
#include <string.h>
#include <math.h>
@@ -75,7 +78,7 @@ struct IlluminaReader {
const int32_t** x;
const int32_t** y;
const SRAReaderColumn* read;
- const uint8_t** qual1;
+ const SRAReaderColumn* qual1;
const signed char** qual4;
const float** signal;
const float** noise;
@@ -105,7 +108,7 @@ rc_t IlluminaReaderInit(const IlluminaReader* self, bool read, bool qual1, bool
(rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[2], NULL, (const void***)&self->x)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[3], NULL, (const void***)&self->y)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[4], &me->read, NULL)) == 0 &&
- (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[5], NULL, (const void***)&self->qual1)) == 0 &&
+ (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[5], &me->qual1, NULL)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[6], NULL, (const void***)&self->qual4)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[7], NULL, (const void***)&self->signal)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[8], NULL, (const void***)&self->noise)) == 0 &&
@@ -173,16 +176,16 @@ LIB_EXPORT rc_t CC IlluminaReader_SpotInfo(const IlluminaReader* self,
rc_t rc = SRAReader_SpotInfo(&self->dad, spotname, spotname_sz, spot_len, num_reads);
if( rc == 0 ) {
if( lane ) {
- *lane = self->lane ? **self->lane : 0;
+ *lane = (self->lane && *self->lane) ? **self->lane : 0;
}
if( tile ) {
- *tile = self->tile ? **self->tile : ((self->dad.spot / 10001) + 1);
+ *tile = (self->tile && *self->tile) ? **self->tile : ((self->dad.spot / 10001) + 1);
}
if( x ) {
- *x = self->x ? **self->x : 0;
+ *x = (self->x && *self->x) ? **self->x : 0;
}
if( y ) {
- *y = self->y ? **self->y : self->dad.spot;
+ *y = (self->y && *self->y) ? **self->y : self->dad.spot;
}
}
return rc;
@@ -196,6 +199,39 @@ LIB_EXPORT rc_t CC IlluminaReader_SpotReadInfo(const IlluminaReader* self, uint3
read_label, read_label_sz, read_start, read_len);
}
+static
+int kludge_snprintf ( char *buff, size_t bsize, const char *fmt, ... )
+{
+ int status;
+ va_list args, args2;
+
+ va_start ( args, fmt );
+ va_copy ( args2, args );
+
+ status = vsnprintf ( buff, bsize, fmt, args );
+ if ( status < 0 )
+ {
+ size_t kludge_size = 64 * 1024;
+ void *kludge = malloc ( kludge_size );
+ if ( kludge != NULL )
+ {
+ status = vsnprintf ( kludge, kludge_size, fmt, args2 );
+ if ( status >= 0 )
+ {
+ memcpy ( buff, kludge, ( size_t ) status > bsize ? bsize : ( size_t ) status );
+ if ( ( size_t ) status < bsize )
+ buff [ status ] = 0;
+ }
+ free ( kludge );
+ }
+ }
+
+ va_end ( args2 );
+ va_end ( args );
+
+ return status;
+}
+
LIB_EXPORT rc_t CC IlluminaReaderBase(const IlluminaReader* self, char* data, size_t dsize, size_t* written)
{
rc_t rc = 0;
@@ -213,7 +249,12 @@ LIB_EXPORT rc_t CC IlluminaReaderBase(const IlluminaReader* self, char* data, si
} else if( (rc = IlluminaReader_SpotInfo(self, NULL, NULL, &lane, &tile, &x, &y, &spot_len, NULL)) == 0 ) {
sz = snprintf(data, dsize, "%d\t%d\t%d\t%d\t", lane, tile, x, y);
if( sz < 0 ) {
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+ /* both approaches are wrong - the error code is rcBuffer, rcInsufficient */
+ rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
} else {
sz += spot_len;
if( sz >= (int)dsize ) {
@@ -265,14 +306,22 @@ rc_t IlluminaReader_4floats(const IlluminaReader* self, const float** col_data,
f = *col_data;
sz = snprintf(data, dsize, "%d\t%d\t%d\t%d", lane, tile, x, y);
if( sz < 0 ) {
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+ rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
} else {
for(i = 0; rc == 0 && i < spot_len; i++, f += 4) {
int x = sz >= (int)dsize ? 0 : sz;
x = snprintf(&data[x], dsize - x, "\t%.*f %.*f %.*f %.*f", f[0] ? 1 : 0, f[0], f[1] ? 1 : 0, f[1],
f[2] ? 1 : 0, f[2], f[3] ? 1 : 0, f[3]);
if( x < 0 ) {
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+ rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
}
sz += x;
}
@@ -316,18 +365,21 @@ LIB_EXPORT rc_t CC IlluminaReaderQuality1(const IlluminaReader* self, uint32_t r
rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcNull);
} else if( !(self->dad.options & eQual1) ) {
rc = RC(rcSRA, rcString, rcConstructing, rcMessage, rcUnexpected);
+ } else if( self->qual1 == NULL || self->qual1->size == 0 ) {
+ /* empty value */
} else if( readId > 0 ) {
INSDC_coord_zero read_start;
INSDC_coord_len read_len;
if( (rc = IlluminaReader_SpotReadInfo(self, readId, NULL, NULL, NULL, &read_start, &read_len)) == 0 ) {
sz = read_len;
- p = (*self->qual1) + read_start;
+ p = self->qual1->base;
+ p += read_start;
}
} else {
uint32_t spot_len;
if( (rc = IlluminaReader_SpotInfo(self, NULL, NULL, NULL, NULL, NULL, NULL, &spot_len, NULL)) == 0 ) {
sz = spot_len;
- p = *self->qual1;
+ p = self->qual1->base;
}
}
if( rc == 0 ) {
@@ -376,8 +428,13 @@ LIB_EXPORT rc_t CC IlluminaReaderQuality4(const IlluminaReader* self, char* data
uint32_t len = 0;
for(sz = 0; rc == 0 && len < spot_len; len++, q4 += 4) {
x = snprintf(&data[sz], dsize - sz, "%s%4d %4d %4d %4d", len > 0 ? "\t" : "", q4[0], q4[1], q4[2], q4[3]);
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
if( x < 0 ) {
rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+ if( x < 0 || ( size_t ) sz + x >= dsize ) {
+ rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
}
sz += x;
}
@@ -394,6 +451,7 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
size_t spotname_sz;
uint32_t nreads, spotlen;
INSDC_coord_val lane, tile, x, y;
+ int sz = 0;
CHECK_SELF(IlluminaReader);
CHECK_SPOT(me->dad);
@@ -413,7 +471,7 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
int sg_sz = 1;
const char* runid = "0";
size_t runid_sz = 1;
- int sz = 0, i = 0;
+ int i = 0;
if( spotname_sz > 0 ) {
const char* c = spotname + spotname_sz;
@@ -445,17 +503,19 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
}
i = snprintf(data, dsize, "%.*s\t%.*s\t%d\t%d\t%d\t%d\t%.*s\t%d\t",
(int)spotname_sz, spotname, (int)runid_sz, runid, lane, tile, x, y, sg_sz, sg, readId > 0 ? readId : 1);
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
if( i < 0 ) {
rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+ if( i < 0 || ( size_t ) i >= dsize ) {
+ rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
} else {
sz += i;
i = sz; /* save length of initial part */
/* precalc full line length: seq\tqual\tflt */
sz += 2 * (read_len + 1) + 1;
- if( written != NULL ) {
- *written = sz;
- }
if( sz >= (int)dsize ) {
rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
} else {
@@ -484,10 +544,13 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
}
sz += read_len;
data[sz++] = '\t';
- for(i = 0; i < read_len; i++) {
- data[sz + i] = (*self->qual1)[read_start + i] + 64;
+ if( self->qual1 && self->qual1->size ) {
+ const uint8_t* p = self->qual1->base;
+ for(i = 0; i < read_len; i++) {
+ data[sz + i] = p[read_start + i] + 64;
+ }
+ sz += read_len;
}
- sz += read_len;
data[sz++] = '\t';
data[sz++] = flt;
data[sz] = '\0';
@@ -495,5 +558,8 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
}
}
}
+ if( written != NULL ) {
+ *written = sz;
+ }
return rc;
}
diff --git a/libs/sra/reader-sff.c b/libs/sra/reader-sff.c
index 3b1fe0e..eba2632 100644
--- a/libs/sra/reader-sff.c
+++ b/libs/sra/reader-sff.c
@@ -33,12 +33,14 @@
#include "reader-cmn.h"
-#include <byteswap.h>
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+# include <byteswap.h>
+#else
+# define bswap_16(x) (x)
+# define bswap_32(x) (x)
+#endif
#include <string.h>
-/* remove after initial testing is done */
-#define SFF_READER_AS_OLD_VERSION 0
-
/* column order is important here: see Init function below!!! */
static
const SRAReaderColumn SFFReader_master_columns_desc[] = {
@@ -48,17 +50,10 @@ const SRAReaderColumn SFFReader_master_columns_desc[] = {
{SRAREADER_COL_MANDATORY, "QUALITY", insdc_phred_t, NULL, NULL, 0},
{SRAREADER_COL_MANDATORY, "SIGNAL", ncbi_isamp1_t, NULL, NULL, 0},
{SRAREADER_COL_MANDATORY, "POSITION", "INSDC:position:one", NULL, NULL, 0},
-#if SFF_READER_AS_OLD_VERSION
- {SRAREADER_COL_OPTIONAL, "CLIP_QUALITY_LEFT", vdb_uint16_t, NULL, NULL, 0},
- {SRAREADER_COL_OPTIONAL, "CLIP_QUALITY_RIGHT", vdb_uint16_t, NULL, NULL, 0},
- {SRAREADER_COL_OPTIONAL, "CLIP_ADAPTER_LEFT", vdb_uint16_t, NULL, NULL, 0},
- {SRAREADER_COL_OPTIONAL, "CLIP_ADAPTER_RIGHT", vdb_uint16_t, NULL, NULL, 0},
-#else
{SRAREADER_COL_OPTIONAL, "CLIP_QUALITY_LEFT", "INSDC:coord:one", NULL, NULL, 0},
{SRAREADER_COL_OPTIONAL, "CLIP_QUALITY_RIGHT", "INSDC:coord:one", NULL, NULL, 0},
{SRAREADER_COL_OPTIONAL, "CLIP_ADAPTER_LEFT", "INSDC:coord:one", NULL, NULL, 0},
{SRAREADER_COL_OPTIONAL, "CLIP_ADAPTER_RIGHT", "INSDC:coord:one", NULL, NULL, 0},
-#endif
{0, NULL, NULL, NULL, NULL, 0} /* terminator */
};
@@ -69,20 +64,13 @@ struct SFFReader {
const SRAReaderColumn* flow_chars;
const SRAReaderColumn* key_seq;
const SRAReaderColumn* read;
- const INSDC_quality_phred** qual1;
- const uint16_t** signal;
- const INSDC_position_one** position;
-#if SFF_READER_AS_OLD_VERSION
- const int16_t** clip_q_left;
- const int16_t** clip_q_right;
- const int16_t** clip_adapter_left;
- const int16_t** clip_adapter_right;
-#else
+ const SRAReaderColumn* qual1;
+ const SRAReaderColumn* signal;
+ const SRAReaderColumn* position;
const INSDC_coord_one** clip_q_left;
const INSDC_coord_one** clip_q_right;
const INSDC_coord_one** clip_adapter_left;
const INSDC_coord_one** clip_adapter_right;
-#endif
};
static
@@ -98,9 +86,9 @@ rc_t SFFReaderInit(const SFFReader* self)
(rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[0], &me->flow_chars, NULL)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[1], &me->key_seq, NULL)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[2], &me->read, NULL)) == 0 &&
- (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[3], NULL, (const void***)&self->qual1)) == 0 &&
- (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[4], NULL, (const void***)&self->signal)) == 0 &&
- (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[5], NULL, (const void***)&self->position)) == 0 &&
+ (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[3], &me->qual1, NULL)) == 0 &&
+ (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[4], &me->signal, NULL)) == 0 &&
+ (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[5], &me->position, NULL)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[6], NULL, (const void***)&self->clip_q_left)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[7], NULL, (const void***)&self->clip_q_right)) == 0 &&
(rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[8], NULL, (const void***)&self->clip_adapter_left)) == 0 &&
@@ -268,19 +256,27 @@ LIB_EXPORT rc_t CC SFFReaderReadHeader(const SFFReader* self, char* data, size_t
LIB_EXPORT rc_t CC SFFReaderReadData(const SFFReader* self, char* data, size_t dsize, size_t* written)
{
rc_t rc = 0;
- size_t flows, len = 0;
+ size_t flows, len, padding;
uint32_t spot_len;
+ /* SFF type defining vars, not used */
+ const uint16_t sff_signal;
+ const uint8_t sff_position;
+ const char sff_bases;
+ const uint8_t sff_quality;
CHECK_SELF(SFFReader);
CHECK_SPOT(me->dad);
- flows = self->flow_chars->size;
+ /* if for some reason READ, QUAL and POSITION rows are uneqaul in size,
+ base their length on actual READ size */
+ spot_len = self->read->size / sizeof(INSDC_dna_text);
+ /* this size if fixed across the file */
+ flows = self->flow_chars->size / sizeof(INSDC_dna_text);
- if( (rc = SFFReader_SpotInfo(self, NULL, NULL, &spot_len, NULL)) != 0 ) {
- return rc;
- }
- len = flows * 2 + spot_len * 3;
- len += (len % 8) ? (8 - (len % 8)) : 0;
+ /* read data section size: per SFF spec types sizes + 8-byte padding */
+ len = flows * sizeof(sff_signal) + spot_len * (sizeof(sff_position) + sizeof(sff_bases) + sizeof(sff_quality));
+ padding = (len % 8) ? (8 - (len % 8)) : 0;
+ len += padding;
if( written != NULL ) {
*written = len;
@@ -288,23 +284,52 @@ LIB_EXPORT rc_t CC SFFReaderReadData(const SFFReader* self, char* data, size_t d
if( len > dsize ) {
rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
} else {
- size_t offset = 0;
- uint8_t ppos = 0;
+ size_t qty;
+ INSDC_position_one ppos;
+ const uint16_t* signal = self->signal->base;
+ uint16_t* dst_sig = (uint16_t*)data;
+ const INSDC_position_one* position = self->position->base;
+
+ qty = self->signal->size / sizeof(*signal);
+ if( qty > flows ) {
+ qty = flows;
+ }
+ for(len = 0; len < qty; len++) {
+ dst_sig[len] = bswap_16(signal[len]);
+ }
+ if( qty < flows ) {
+ memset(&data[qty * sizeof(sff_signal)], 0, (flows - qty) * sizeof(sff_signal));
+ }
+ data += flows * sizeof(sff_signal);
- memset(data, 0, len);
- for(len = 0; len < flows; len++) {
- const uint16_t x = bswap_16((*self->signal)[len]);
- memcpy(&data[len * 2], &x, 2);
+ qty = self->position->size / sizeof(*position);
+ if( qty > spot_len ) {
+ qty = spot_len;
+ }
+ for(ppos = 0, len = 0; len < qty; len++) {
+ data[len] = (uint8_t)(position[len] - ppos);
+ ppos = position[len];
+ }
+ if( qty < spot_len ) {
+ memset(&data[qty], 0, (spot_len - qty) * sizeof(sff_position));
+ }
+ data += spot_len;
+
+ /* this are guaranteed above to be same length */
+ memcpy(data, self->read->base, spot_len);
+ data += spot_len;
+
+ qty = self->qual1->size / sizeof(INSDC_quality_phred);
+ if( qty > spot_len ) {
+ qty = spot_len;
+ }
+ memcpy(data, self->qual1->base, qty);
+ if( qty < spot_len ) {
+ memset(&data[qty], 0, (spot_len - qty) * sizeof(sff_quality));
}
- offset = flows * 2;
- for(len = 0; len < spot_len; len++) {
- data[offset + len] = (*self->position)[len] - ppos;
- ppos = (uint8_t)( (*self->position)[len] );
+ if( padding > 0 ) {
+ memset(&data[spot_len], 0, padding);
}
- offset += spot_len;
- memcpy(&data[offset], self->read->base, spot_len);
- offset += spot_len;
- memcpy(&data[offset], *self->qual1, spot_len);
}
return rc;
}
diff --git a/libs/sra/sra-dflt-schema.c b/libs/sra/sra-dflt-schema.c
index 9235481..cbaacf7 100644
--- a/libs/sra/sra-dflt-schema.c
+++ b/libs/sra/sra-dflt-schema.c
@@ -36,7 +36,6 @@
#include <klib/out.h>
#include <klib/rc.h>
#include <klib/namelist.h>
-#include <fmtdef.h>
#include <os-native.h>
#include <sysalloc.h>
diff --git a/libs/sra/sra-priv.h b/libs/sra/sra-priv.h
index 3c74a9c..c5798c5 100644
--- a/libs/sra/sra-priv.h
+++ b/libs/sra/sra-priv.h
@@ -59,7 +59,11 @@ struct VTable;
struct VCursor;
struct VTypedecl;
struct VTypedef;
+struct VResolver;
+struct SRACache;
+#define CSRA_EXT(lite) (lite ? ".lite.sra" : ".sra")
+#define SRA_EXT(lite) (lite ? ".lite.sra" : ".sra")
/*--------------------------------------------------------------------------
* SRAMgr
@@ -68,7 +72,12 @@ struct SRAMgr
{
struct VDBManager KONST *vmgr;
struct VSchema const *schema;
- struct SRAPath *pmgr;
+#if OLD_SRAPATH_MGR
+ struct SRAPath volatile *_pmgr;
+#else
+ struct VResolver volatile *_pmgr;
+#endif
+ struct SRACache* cache;
KRefcount refcount;
KCreateMode mode;
bool read_only;
@@ -86,6 +95,12 @@ SRAMgr *SRAMgrAttach ( const SRAMgr *self );
rc_t SRAMgrSever ( const SRAMgr *self );
+/* AccessSRAPath
+ * returns a new reference to SRAPath
+ * do NOT access "pmgr" directly
+ */
+struct SRAPath *SRAMgrAccessSRAPath ( const SRAMgr *self );
+
/*--------------------------------------------------------------------------
* SRATable
*/
@@ -139,9 +154,9 @@ rc_t SRATableColDatatype ( const SRATable *self, uint32_t idx,
rc_t SRATableGetIdRange ( const SRATable *self, uint32_t idx,
spotid_t id, spotid_t *pfirst, spotid_t *last );
-rc_t SRATableLoadMetadata(SRATable *self);
rc_t ResolveTablePath ( const SRAMgr *mgr, char *path, size_t psize, const char *spec, va_list args );
-
+
+rc_t SRATableFillOut ( SRATable *self, bool update );
/*--------------------------------------------------------------------------
* SRAColumn
diff --git a/libs/sra/sracache.c b/libs/sra/sracache.c
new file mode 100644
index 0000000..ef8a833
--- /dev/null
+++ b/libs/sra/sracache.c
@@ -0,0 +1,466 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <sra/extern.h>
+#include <sra/sradb-priv.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <strtol.h>
+
+#include <klib/rc.h>
+
+#include <kproc/lock.h>
+
+/* some of the above #defines index on sun */
+#undef index
+
+/*================================== SRACacheMetrics ==================================*/
+static
+void
+MetricsInit(SRACacheMetrics* self, const SRATable* table)
+{
+ self->bytes = 0;/* TBD */
+ self->elements = 1;
+ self->threads = 0;/* TBD */
+ self->fds = 0;/* TBD */
+}
+
+LIB_EXPORT
+bool CC
+SRACacheMetricsLessThan(const SRACacheMetrics* a, const SRACacheMetrics* b)
+{
+ if (a->bytes > 0 && b->bytes > 0 && a->bytes >= b->bytes)
+ return false;
+ if (a->elements > 0 && b->elements > 0 && a->elements >= b->elements)
+ return false;
+ if (a->threads > 0 && b->threads > 0 && a->threads >= b->threads)
+ return false;
+ if (a->fds > 0 && b->fds > 0 && a->fds >= b->fds)
+ return false;
+ return true;
+}
+
+static
+void
+MetricsAdd(SRACacheMetrics* a, const SRACacheMetrics* b)
+{
+ a->bytes += b->bytes;
+ a->elements += b->elements;
+ a->threads += b->threads;
+ a->fds += b->fds;
+}
+
+static
+void
+MetricsSubtract(SRACacheMetrics* a, const SRACacheMetrics* b)
+{
+ a->bytes -= b->bytes;
+ a->elements -= b->elements;
+ a->threads -= b->threads;
+ a->fds -= b->fds;
+}
+
+/*================================== SRACacheElement ==================================*/
+LIB_EXPORT rc_t CC SRACacheElementMake(SRACacheElement** self,
+ SRATable* object,
+ struct SRACacheIndex* index,
+ uint32_t key,
+ const SRACacheMetrics* metrics)
+{
+ rc_t rc = 0;
+ if ( self == NULL || object == NULL || index == NULL || metrics == NULL )
+ return RC( rcSRA, rcNode, rcConstructing, rcParam, rcNull );
+
+ *self = malloc(sizeof(**self));
+ if (self == NULL)
+ rc = RC ( rcSRA, rcNode, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ (*self)->dad.next = NULL;
+ (*self)->dad.prev = NULL;
+
+ (*self)->object = object;
+ SRATableAddRef(object);
+
+ (*self)->index = index;
+
+ (*self)->key = key;
+
+ memcpy(&(*self)->metrics, metrics, sizeof((*self)->metrics));
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheElementDestroy(SRACacheElement* self)
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ return RC( rcSRA, rcNode, rcDestroying, rcSelf, rcNull );
+
+ rc = SRATableRelease(self->object);
+
+ free(self);
+
+ return rc;
+}
+
+/*================================== SRACacheIndex ==================================*/
+LIB_EXPORT rc_t CC SRACacheIndexMake(SRACacheIndex** self, String* prefix)
+{
+ rc_t rc = 0;
+ if ( self == NULL || prefix == NULL )
+ return RC( rcSRA, rcIndex, rcConstructing, rcParam, rcNull );
+
+ *self = malloc(sizeof(**self));
+ if (self == NULL)
+ rc = RC ( rcSRA, rcIndex, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ memset(*self, 0, sizeof(**self));
+ rc = StringCopy((const String**)&(*self)->prefix, prefix);
+ if (rc == 0)
+ {
+ rc = KVectorMake(&(*self)->body);
+ if (rc != 0)
+ StringWhack((*self)->prefix);
+ }
+
+ if (rc != 0)
+ {
+ free(*self);
+ *self = NULL;
+ }
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheIndexDestroy(SRACacheIndex* self)
+{
+ rc_t rc;
+ if ( self == NULL )
+ return RC( rcSRA, rcIndex, rcDestroying, rcSelf, rcNull );
+
+ rc = KVectorRelease(self->body);
+ StringWhack(self->prefix);
+ free(self);
+ return rc;
+}
+
+/*================================== SRACache ==================================*/
+
+LIB_EXPORT rc_t CC SRACacheInit(SRACache** self)
+{
+ rc_t rc = 0;
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcConstructing, rcSelf, rcNull );
+
+ *self = malloc(sizeof(**self));
+ if (*self == NULL)
+ rc = RC ( rcSRA, rcData, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ BSTreeInit( & (*self)->indexes );
+ DLListInit( & (*self)->lru );
+
+ (*self)->softThreshold.bytes = SRACacheThresholdSoftBytesDefault;
+ (*self)->softThreshold.elements = SRACacheThresholdSoftElementsDefault;
+ (*self)->softThreshold.threads = SRACacheThresholdSoftThreadsDefault;
+ (*self)->softThreshold.fds = SRACacheThresholdSoftFdsDefault;
+
+ (*self)->hardThreshold.bytes = SRACacheThresholdHardBytesDefault;
+ (*self)->hardThreshold.elements = SRACacheThresholdHardElementsDefault;
+ (*self)->hardThreshold.threads = SRACacheThresholdHardThreadsDefault;
+ (*self)->hardThreshold.fds = SRACacheThresholdHardFdsDefault;
+
+ memset(&(*self)->usage, 0, sizeof(*self)->usage);
+
+ rc = KLockMake(&(*self)->mutex);
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheGetSoftThreshold(SRACache* self, SRACacheMetrics* metrics)
+{
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+ if (metrics == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+ memcpy(metrics, &self->softThreshold, sizeof(self->softThreshold));
+ return 0;
+}
+
+LIB_EXPORT rc_t CC SRACacheSetSoftThreshold(SRACache* self, const SRACacheMetrics* metrics)
+{
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcUpdating, rcSelf, rcNull );
+ if (metrics == NULL)
+ return RC( rcSRA, rcData, rcUpdating, rcParam, rcNull );
+ memcpy(&self->softThreshold, metrics, sizeof(self->softThreshold));
+ return 0;
+}
+
+LIB_EXPORT rc_t CC SRACacheGetHardThreshold(SRACache* self, SRACacheMetrics* metrics)
+{
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+ if (metrics == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+ memcpy(metrics, &self->hardThreshold, sizeof(self->hardThreshold));
+ return 0;
+}
+
+LIB_EXPORT rc_t CC SRACacheSetHardThreshold(SRACache* self, const SRACacheMetrics* metrics)
+{
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcUpdating, rcSelf, rcNull );
+ if (metrics == NULL)
+ return RC( rcSRA, rcData, rcUpdating, rcParam, rcNull );
+ memcpy(&self->hardThreshold, metrics, sizeof(self->hardThreshold));
+ return 0;
+}
+
+static void CC SRACacheIndexDestructor(BSTNode *n, void *data)
+{
+ SRACacheIndexDestroy((SRACacheIndex*)n);
+}
+static void CC SRACacheElementDestructor(DLNode *n, void *data)
+{
+ SRACacheElementDestroy((SRACacheElement*)n);
+}
+
+LIB_EXPORT rc_t CC SRACacheWhack(SRACache* self)
+{
+ rc_t rc = 0;
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcDestroying, rcSelf, rcNull );
+
+ BSTreeWhack(&self->indexes, SRACacheIndexDestructor, NULL);
+ DLListWhack(&self->lru, SRACacheElementDestructor, NULL);
+
+ rc = KLockRelease(self->mutex);
+ free(self);
+ return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheGetUsage(SRACache* self, SRACacheMetrics* metrics)
+{
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+ if (metrics == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+ memcpy(metrics, &self->usage, sizeof(self->usage));
+ return 0;
+}
+
+static
+int CC IndexCmp (const BSTNode * item, const BSTNode * n)
+{
+ return StringCompare( ((const SRACacheIndex *)item)->prefix, ((const SRACacheIndex *)n)->prefix );
+}
+
+static
+int CC PrefixCmp (const void * item, const BSTNode * n)
+{
+ return StringCompare( (const String*)item, ((const SRACacheIndex *)n)->prefix );
+}
+
+static
+rc_t
+AddNewIndex(BSTree* indexes, String* prefix, SRACacheIndex** newIdx)
+{
+ rc_t rc = SRACacheIndexMake(newIdx, prefix);
+ if (rc == 0)
+ {
+ rc = BSTreeInsert(indexes, &(*newIdx)->dad, IndexCmp);
+ if (rc != 0)
+ SRACacheIndexDestroy(*newIdx);
+ }
+ return rc;
+}
+
+static
+rc_t
+ParseAccessionName(const char *acc, String* prefix, uint32_t* key)
+{
+ rc_t rc = 0;
+
+ /* extract the alphabetic prefix from the accession's name */
+ size_t prefLen = 0;
+ while (acc[prefLen] != 0 && isalpha(acc[prefLen]))
+ ++prefLen;
+ StringInit(prefix, acc, prefLen, prefLen);
+
+ { /* the numeric key will be the rest of the accession's name, if fully numeric */
+ char *end;
+ *key = strtou32 ( acc + prefLen, & end, 10 );
+ if ( end [ 0 ] != 0 )
+ rc = RC( rcSRA, rcData, rcAccessing, rcName, rcInvalid );
+ }
+ return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheAddTable(SRACache* self, const char* acc, SRATable* table)
+{ /* if crosses soft threshold, signal BG thread to wake up */
+ rc_t rc = 0;
+ String prefix;
+ uint32_t key;
+
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+ if (acc == NULL || acc[0] == 0 || table == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+
+ rc = ParseAccessionName(acc, &prefix, &key);
+ if (rc == 0)
+ {
+ rc = KLockAcquire(self->mutex);
+ if (rc == 0)
+ {
+ SRACacheIndex* index = (SRACacheIndex*) BSTreeFind ( &self->indexes, &prefix, PrefixCmp );
+ if (index == NULL)
+ rc = AddNewIndex( &self->indexes, &prefix, &index );
+
+ if (rc == 0)
+ {
+ SRACacheElement* elem = NULL;
+ rc = KVectorGetPtr ( index->body, key, (void**)&elem );
+ if (rc == 0 && elem != NULL) /* table already in cache */
+ rc = RC( rcSRA, rcData, rcInserting, rcParam, rcExists );
+ else if (GetRCState(rc) == rcNotFound)
+ {
+ SRACacheMetrics metrics;
+ MetricsInit(&metrics, table);
+ rc = SRACacheElementMake(&elem, table, index, key, &metrics);
+ if (rc == 0)
+ {
+ rc = KVectorSetPtr( index->body, key, elem );
+ if (rc != 0)
+ SRACacheElementDestroy(elem);
+ else
+ { /* success - update global usage and time-sorted list */
+ MetricsAdd(&self->usage, &metrics);
+ DLListPushTail( &self->lru, (DLNode*)elem );
+ }
+ }
+ }
+ }
+
+ {
+ rc_t rc2 = KLockUnlock(self->mutex);
+ if (rc == 0)
+ rc = rc2;
+ }
+ }
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheGetTable(SRACache* self, const char* acc, const SRATable** object)
+{
+ rc_t rc = 0;
+ String prefix;
+ uint32_t key;
+
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+ if (acc == NULL || acc[0] == 0 || object == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+
+ *object = NULL;
+
+ rc = ParseAccessionName(acc, &prefix, &key);
+ if (rc == 0)
+ {
+ rc = KLockAcquire(self->mutex);
+ if (rc == 0)
+ {
+ SRACacheIndex* index = (SRACacheIndex*) BSTreeFind ( &self->indexes, &prefix, PrefixCmp );
+ if (index != NULL)
+ {
+ SRACacheElement* elem = NULL;
+ rc = KVectorGetPtr ( index->body, key, (void**)&elem );
+ if (rc == 0 && elem != NULL)
+ { /* move to the least recently used position */
+ DLListUnlink ( &self->lru, &elem->dad );
+ DLListPushTail ( &self->lru, &elem->dad );
+
+ *object = elem->object;
+ }
+ else if (GetRCState(rc) == rcNotFound || elem == NULL)
+ rc = 0;
+ }
+
+ {
+ rc_t rc2 = KLockUnlock(self->mutex);
+ if (rc == 0)
+ rc = rc2;
+ }
+ }
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheFlush(SRACache* self)
+{
+ rc_t rc = 0;
+ if (self == NULL)
+ return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+
+ rc = KLockAcquire(self->mutex);
+ if (rc == 0)
+ {
+ while ( ! SRACacheMetricsLessThan( &self->usage, &self->softThreshold ) )
+ {
+ SRACacheElement* toFlush = (SRACacheElement*) DLListPopHead( &self->lru );
+ if (toFlush == NULL)
+ break;
+ rc = KVectorUnset( toFlush->index->body, toFlush->key );
+ if (rc != 0)
+ break; /* something is badly wrong */
+ MetricsSubtract( &self->usage, &toFlush->metrics );
+ rc = SRACacheElementDestroy(toFlush);
+ if (rc != 0)
+ break;
+ }
+
+ {
+ rc_t rc2 = KLockUnlock(self->mutex);
+ if (rc == 0)
+ rc = rc2;
+ }
+ }
+
+ return rc;
+}
diff --git a/libs/sra/sramgr-cmn.c b/libs/sra/sramgr-cmn.c
index d73264b..fbfde97 100644
--- a/libs/sra/sramgr-cmn.c
+++ b/libs/sra/sramgr-cmn.c
@@ -26,21 +26,25 @@
#include <sra/extern.h>
-#include <sra/sradb.h>
-#include <sra/sraschema.h>
-#include <sra/srapath.h>
-#include <sra/sradb-priv.h>
-#include <vdb/manager.h>
-#include <vdb/schema.h>
-#include <vdb/vdb-priv.h>
-#include <kdb/manager.h>
-#include <kdb/kdb-priv.h>
-#include <kfs/directory.h>
#include <klib/namelist.h>
#include <klib/refcount.h>
#include <klib/log.h>
#include <klib/rc.h>
+#include <kfs/directory.h>
+#include <kfg/config.h>
+#include <vfs/manager.h>
+#include <vfs/resolver.h>
+#include <kdb/manager.h>
+#include <kdb/kdb-priv.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/vdb-priv.h>
+#include <sra/sradb.h>
+#include <sra/sraschema.h>
+#include <sra/srapath.h>
+#include <sra/sradb-priv.h>
#include <sysalloc.h>
+#include <atomic.h>
#include "sra-priv.h"
@@ -60,11 +64,18 @@ rc_t SRAMgrWhack ( const SRAMgr *that )
VSchemaRelease ( self -> schema );
VDBManagerRelease ( self -> vmgr );
-
+ SRACacheWhack ( self -> cache );
+
/* must check here for NULL because
SRAPathRelease is weak-linked */
- if ( self -> pmgr != NULL )
- SRAPathRelease ( self -> pmgr );
+ if ( self -> _pmgr != NULL )
+ {
+#if OLD_SRAPATH_MGR
+ SRAPathRelease ( self -> _pmgr );
+#else
+ VResolverRelease ( ( const VResolver* ) self -> _pmgr );
+#endif
+ }
free ( self );
return 0;
@@ -146,16 +157,37 @@ rc_t SRAMgrSever ( const SRAMgr *self )
static
rc_t SRAMgrInitPath ( SRAMgr *mgr, const KDirectory *wd )
{
+#if OLD_SRAPATH_MGR
/* try to make the path manager */
- rc_t rc = SRAPathMake ( & mgr -> pmgr, wd );
+ rc_t rc = SRAPathMake ( & mgr -> _pmgr, wd );
+
if ( GetRCState ( rc ) == rcNotFound && GetRCTarget ( rc ) == rcDylib )
{
/* we are operating outside of the archive */
- assert ( mgr -> pmgr == NULL );
+ assert ( mgr -> _pmgr == NULL );
rc = 0;
}
return rc;
+#else
+ KConfig *kfg;
+ rc_t rc = KConfigMake ( & kfg, NULL );
+ if ( rc == 0 )
+ {
+ VFSManager *vfs;
+ rc = VFSManagerMake ( & vfs );
+ if ( rc == 0 )
+ {
+ rc = VFSManagerMakeResolver ( vfs, ( VResolver** ) & mgr -> _pmgr, kfg );
+ VFSManagerRelease ( vfs );
+ }
+ KConfigRelease ( kfg );
+ }
+ if ( rc != 0 )
+ mgr -> _pmgr = NULL;
+
+ return 0;
+#endif
}
rc_t SRAMgrMake ( SRAMgr **mgrp,
@@ -176,13 +208,17 @@ rc_t SRAMgrMake ( SRAMgr **mgrp,
rc = SRAMgrInitPath ( mgr, wd );
if ( rc == 0 )
{
- KRefcountInit ( & mgr -> refcount, 1, "SRAMgr", "SRAMgrMake", "sramgr" );
- mgr -> vmgr = vmgr;
- mgr -> schema = schema;
- mgr -> mode = kcmCreate; /* TBD - should this include parents? */
- mgr -> read_only = true;
- * mgrp = mgr;
- return 0;
+ rc = SRACacheInit ( & mgr -> cache );
+ if ( rc == 0 )
+ {
+ KRefcountInit ( & mgr -> refcount, 1, "SRAMgr", "SRAMgrMake", "sramgr" );
+ mgr -> vmgr = vmgr;
+ mgr -> schema = schema;
+ mgr -> mode = kcmCreate; /* TBD - should this include parents? */
+ mgr -> read_only = true;
+ * mgrp = mgr;
+ return 0;
+ }
}
VSchemaRelease ( schema );
@@ -227,6 +263,24 @@ LIB_EXPORT rc_t CC SRAMgrWritable ( const SRAMgr *self,
}
+/* AccessSRAPath
+ * returns a new reference to SRAPath
+ * do NOT access "pmgr" directly
+ */
+SRAPath *SRAMgrAccessSRAPath ( const SRAMgr *cself )
+{
+ SRAMgr *self = ( SRAMgr* ) cself;
+ if ( self != NULL )
+ {
+#if OLD_SRAPATH_MGR
+ /* get a pointer to object - read is expected to be atomic */
+ SRAPath *pold = self -> _pmgr;
+#endif
+ }
+ return NULL;
+}
+
+
/* GetSRAPath
* retrieve a reference to SRAPath object in use - may be NULL
* UseSRAPath
@@ -235,7 +289,7 @@ LIB_EXPORT rc_t CC SRAMgrWritable ( const SRAMgr *self,
LIB_EXPORT rc_t CC SRAMgrGetSRAPath ( const SRAMgr *self,
SRAPath **path )
{
- rc_t rc;
+ rc_t rc = 0;
if ( path == NULL )
rc = RC ( rcSRA, rcMgr, rcAccessing, rcParam, rcNull );
@@ -243,17 +297,21 @@ LIB_EXPORT rc_t CC SRAMgrGetSRAPath ( const SRAMgr *self,
{
if ( self == NULL )
rc = RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
- else if ( self -> pmgr == NULL )
+#if OLD_SRAPATH_MGR
+ else if ( self -> _pmgr == NULL )
rc = 0;
else
{
- rc = SRAPathAddRef ( self -> pmgr );
+ rc = SRAPathAddRef ( self -> _pmgr );
if ( rc == 0 )
{
- * path = self -> pmgr;
+ * path = self -> _pmgr;
return 0;
}
}
+#else
+ else
+#endif
* path = NULL;
}
@@ -268,15 +326,16 @@ LIB_EXPORT rc_t CC SRAMgrUseSRAPath ( const SRAMgr *cself, SRAPath *path )
if ( self == NULL )
rc = RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
- else if ( path == self -> pmgr )
+#if OLD_SRAPATH_MGR
+ else if ( path == self -> _pmgr )
rc = 0;
else if ( path == NULL )
{
rc = 0;
- if ( self -> pmgr != NULL )
+ if ( self -> _pmgr != NULL )
{
- SRAPathRelease ( self -> pmgr );
- self -> pmgr = NULL;
+ SRAPathRelease ( self -> _pmgr );
+ self -> _pmgr = NULL;
}
}
else
@@ -284,14 +343,61 @@ LIB_EXPORT rc_t CC SRAMgrUseSRAPath ( const SRAMgr *cself, SRAPath *path )
rc = SRAPathAddRef ( path );
if ( rc == 0 )
{
- SRAPathRelease ( self -> pmgr );
- self -> pmgr = path;
+ SRAPathRelease ( self -> _pmgr );
+ self -> _pmgr = path;
}
}
+#else
+ else
+ rc = 0;
+#endif
return rc;
}
+LIB_EXPORT rc_t CC SRAMgrConfigReload( const SRAMgr *cself, const KDirectory *wd )
+{
+#if OLD_SRAPATH_MGR
+ SRAMgr *self = cself;
+
+ /* create a new SRAPath object */
+ SRAPath *pnew;
+ rc_t rc = SRAPathMake ( & pnew, wd );
+ if ( rc == 0 )
+ {
+ /* swap with the old guy */
+ SRAPath *pold = self -> _pmgr;
+ if ( atomic_test_and_set_ptr ( ( void *volatile* ) & self -> _pmgr, pnew, pold ) == ( void* ) pold )
+ SRAPathRelease ( pold );
+ else
+ SRAPathRelease ( pnew );
+ }
+
+ return rc;
+#else
+ return 0;
+#endif
+
+#if 0
+
+
+ /* do not reload VDBManager config for now
+ it cannot reload properly and grows in memory */
+ rc_t rc = 0;
+ /* (not thread) safely re-instanciate sra path config */
+ SRAMgr *self = (SRAMgr*)cself;
+ SRAPath* p = cself->_pmgr;
+ self->_pmgr = NULL;
+ if( (rc = SRAMgrInitPath(self, wd)) == 0 ) {
+ SRAPathRelease(p);
+ } else {
+ /* roll back */
+ self->_pmgr = p;
+ }
+ return rc;
+#endif
+
+}
/* GetVDBManager
* returns a new reference to VDBManager used by SRAMgr
@@ -391,6 +497,33 @@ LIB_EXPORT rc_t CC SRAMgrGetTableModDate ( const SRAMgr *self,
return rc;
}
+LIB_EXPORT rc_t CC SRAMgrSingleFileArchiveExt(const SRAMgr *self, const char* spec, const bool lightweight, const char** ext)
+{
+ rc_t rc;
+
+ if( self == NULL || spec == NULL || ext == NULL ) {
+ rc = RC(rcSRA, rcFile, rcConstructing, rcParam, rcNull);
+ } else {
+ char buf[4096];
+ va_list args;
+
+ if( (rc = ResolveTablePath(self, buf, sizeof(buf), spec, args)) == 0 ) {
+ const KDBManager* kmgr;
+ if( (rc = SRAMgrGetKDBManagerRead(self, &kmgr)) == 0 ) {
+ int type = KDBManagerPathType(kmgr, buf) & ~kptAlias;
+ if( type == kptDatabase ) {
+ *ext = CSRA_EXT(lightweight);
+ } else if( type == kptTable ) {
+ *ext = SRA_EXT(lightweight);
+ } else {
+ rc = RC(rcSRA, rcPath, rcResolving, rcType, rcUnknown);
+ }
+ KDBManagerRelease(kmgr);
+ }
+ }
+ }
+ return rc;
+}
/* FlushPath
* FlushRun
@@ -414,7 +547,14 @@ LIB_EXPORT rc_t CC SRAMgrFlushRun ( const SRAMgr *self, const char *accession )
LIB_EXPORT rc_t CC SRAMgrRunBGTasks ( const SRAMgr *self )
{
- return 0;
+ rc_t rc;
+
+ if( self == NULL )
+ rc = RC(rcSRA, rcFile, rcProcessing, rcSelf, rcNull);
+
+ rc = SRACacheFlush(self->cache);
+
+ return rc;
}
diff --git a/libs/sra/srapath-stub.c b/libs/sra/srapath-stub.c
deleted file mode 100644
index 7112df7..0000000
--- a/libs/sra/srapath-stub.c
+++ /dev/null
@@ -1,408 +0,0 @@
-/*===========================================================================
-*
-* PUBLIC DOMAIN NOTICE
-* National Center for Biotechnology Information
-*
-* This software/database is a "United States Government Work" under the
-* terms of the United States Copyright Act. It was written as part of
-* the author's official duties as a United States Government employee and
-* thus cannot be copyrighted. This software/database is freely available
-* to the public for use. The National Library of Medicine and the U.S.
-* Government have not placed any restriction on its use or reproduction.
-*
-* Although all reasonable efforts have been taken to ensure the accuracy
-* and reliability of the software and data, the NLM and the U.S.
-* Government do not and cannot warrant the performance or results that
-* may be obtained by using this software or data. The NLM and the U.S.
-* Government disclaim all warranties, express or implied, including
-* warranties of performance, merchantability or fitness for any particular
-* purpose.
-*
-* Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#include <klib/rc.h>
-#include <klib/defs.h>
-#include <kfs/dyload.h>
-#include <sra/srapath.h>
-#include <sra/sradb-priv.h>
-#include <sysalloc.h>
-#include <os-native.h>
-
-#include <sra/impl.h>
-
-#include <string.h>
-#include <assert.h>
-#include <stdio.h>
-
-/*--------------------------------------------------------------------------
- * SRAPath
- * manages accession -> path conversion
- */
-
-/* LoadLibrary
- * loads libsraschema and fills out function pointers
- */
-static KDylib *libsrapath = NULL;
-
-static struct
-{
- rc_t ( CC * sraPathMake ) ( SRAPath **pm, struct KDirectory const *dir );
-
-} imports;
-
-static
-rc_t SRAPathLoadLibrary ( void )
-{
- KDyld *dl;
- rc_t rc = KDyldMake ( & dl );
- if ( rc == 0 )
- {
- rc = KDyldLoadLib ( dl, & libsrapath, LPFX "sra-path" SHLX );
- if (rc != 0){
- rc = KDyldLoadLib ( dl, & libsrapath, NULL );
- }
- if ( rc == 0 )
- {
- KSymAddr *sym;
-
- /* resolve symbols */
- rc = KDylibSymbol ( libsrapath, & sym, "SRAPathMakeImpl" );
- if ( rc == 0 )
- {
- KSymAddrAsFunc ( sym, ( fptr_t* ) & imports . sraPathMake );
- KSymAddrRelease ( sym );
- }
-
- /* bail on error */
- if ( rc != 0 )
- {
- KDylibRelease ( libsrapath );
- libsrapath = NULL;
- memset ( & imports, 0, sizeof imports );
- }
- }
- KDyldRelease ( dl );
- }
-
- return rc;
-}
-
-/* Make
- * create path manager
- *
- * the path manager should already be configured with
- * standard search paths, but can be augmented by using
- * the Add*Path messages.
- *
- * "dir" [ IN, NULL OKAY ] - optional root directory to use
- * attaches a new reference
- */
-rc_t CC SRAPathMake ( SRAPath **pm, struct KDirectory const *dir )
-{
- if ( libsrapath == NULL )
- {
- rc_t rc = SRAPathLoadLibrary ();
- if ( rc != 0 )
- {
- /* if the library couldn't be loaded,
- return the error code plus NULL pointer */
- if ( pm != NULL )
- * pm = NULL;
-
-#if _DEBUGGING
- return rc;
-#else
- return RC ( rcFS, rcDylib, rcLoading, rcPath, rcNotFound );
-#endif
- }
- }
-
- assert ( imports . sraPathMake != NULL );
- return ( * imports . sraPathMake ) ( pm, dir );
-}
-
-
-/* AddRef
- * Release
- */
-rc_t CC SRAPathAddRef ( const SRAPath *self )
-{
- if ( self != NULL )
- {
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . addref ( self );
- }
-
- return RC ( rcSRA, rcMgr, rcReleasing, rcInterface, rcBadVersion );
- }
- return 0;
-}
-
-rc_t CC SRAPathRelease ( const SRAPath *self )
-{
- if ( self != NULL )
- {
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . release ( self );
- }
-
- return RC ( rcSRA, rcMgr, rcReleasing, rcInterface, rcBadVersion );
- }
- return 0;
-}
-
-
-/* Version
- * returns the library version
- */
-rc_t CC SRAPathVersion ( const SRAPath *self, uint32_t *version )
-{
- if ( version == NULL )
- return RC ( rcSRA, rcMgr, rcAccessing, rcParam, rcNull );
-
- * version = 0;
-
- if ( self == NULL )
- return RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
-
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . version ( self, version );
- }
-
- return RC ( rcSRA, rcMgr, rcAccessing, rcInterface, rcBadVersion );
-}
-
-
-/* Clear
- * forget all existing server and volume paths
- */
-rc_t CC SRAPathClear ( SRAPath *self )
-{
- if ( self == NULL )
- return RC ( rcSRA, rcMgr, rcResetting, rcSelf, rcNull );
-
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . clear ( self );
- }
-
- return RC ( rcSRA, rcMgr, rcResetting, rcInterface, rcBadVersion );
-}
-
-
-/* AddRepPath
- * add a replication path
- *
- * "rep" [ IN ] - NUL-terminated server search path
- * may be a compound path with ':' separator characters, e.g.
- * "/panfs/traces01:/panfs/traces31"
- *
- * NB - servers are searched in the order provided,
- * first to last, until one of them satisfies a request,
- * at which time the successful server is placed at the
- * head of the search path.
- */
-rc_t CC SRAPathAddRepPath ( SRAPath *self, const char *path )
-{
- if ( self == NULL )
- return RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
- if ( path == NULL )
- return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
- if ( path [ 0 ] == 0 )
- return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
-
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . addRepPath ( self, path );
- }
-
- return RC ( rcSRA, rcMgr, rcUpdating, rcInterface, rcBadVersion );
-}
-
-
-/* AddVolPath
- * add a volume path
- *
- * "vol" [ IN ] - NUL-terminated volume search path
- * may be a compound path with ':' separator characters, e.g.
- * "sra2:sra1:sra0"
- *
- * NB - volumes are searched in the order provided,
- * first to last. they are never re-ordered.
- */
-rc_t CC SRAPathAddVolPath ( SRAPath *self, const char *path )
-{
- if ( self == NULL )
- return RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
- if ( path == NULL )
- return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
- if ( path [ 0 ] == 0 )
- return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
-
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . addVolPath ( self, path );
- }
-
- return RC ( rcSRA, rcMgr, rcUpdating, rcInterface, rcBadVersion );
-}
-
-
-/* Full
- * creates full path from server, volume & accession
- *
- * "rep" [ IN ] - NUL terminated full path of replication
- * server, e.g. "/panfs/traces01"
- *
- * "vol" [ IN ] - NUL terminated relative path of volume,
- * e.g. "sra2"
- *
- * "accession" [ IN ] - NUL terminated run accession,
- * e.g. "SRR000001"
- *
- * "path" [ OUT ] and "path_max" [ IN ] - return buffer for
- * NUL-terminated full path to accession.
- */
-rc_t CC SRAPathFull ( const SRAPath *self, const char *rep,
- const char *vol, const char *accession, char *path, size_t path_max )
-{
- if ( path_max == 0 )
- return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
- if ( path == NULL )
- return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcNull );
-
- /* prepare return for failure */
- path [ 0 ] = 0;
-
- /* test remainder */
- if ( self == NULL )
- return RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
- if ( accession == NULL )
- return RC ( rcSRA, rcMgr, rcAccessing, rcPath, rcNull );
- if ( accession [ 0 ] == 0 )
- return RC ( rcSRA, rcMgr, rcAccessing, rcPath, rcEmpty );
-
- /* turn NULL prefix parts into empty string */
- if ( rep == NULL )
- rep = "";
- if ( vol == NULL )
- vol = "";
-
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . fullPath ( self, rep, vol, accession, path, path_max );
- }
-
- return RC ( rcSRA, rcMgr, rcAccessing, rcInterface, rcBadVersion );
-}
-
-
-/* Test
- * returns true if path appears to be accession
- * the test is a heuristic, and may return false positives
- *
- * "path" [ IN ] - NUL terminated path to run
- */
-bool CC SRAPathTest ( const SRAPath *self, const char *path )
-{
- if ( self == NULL )
- return false;
- if ( path == NULL || path [ 0 ] == 0 )
- return false;
-
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . testPath ( self, path );
- }
-
- return false;
-}
-
-
-/* Find
- * finds location of run within rep-server/volume matrix
- *
- * "accession" [ IN ] - NUL terminated run accession,
- * e.g. "SRR000001"
- *
- * "path" [ OUT ] and "path_max" [ IN ] - return buffer for
- * NUL-terminated full path to accession.
- *
- * returns 0 if path exists, rc state rcNotFound if
- * path cannot be found, and rcInsufficient if buffer is
- * too small.
- */
-rc_t CC SRAPathFindWithRepLen ( const SRAPath *self,
- const char *accession, char *path, size_t path_max, size_t *rep_len )
-{
- if ( path == NULL )
- return RC ( rcSRA, rcMgr, rcSelecting, rcBuffer, rcNull );
- if ( path_max == 0 )
- return RC ( rcSRA, rcMgr, rcSelecting, rcBuffer, rcInsufficient );
-
- path [ 0 ] = 0;
-
- if ( self == NULL )
- return RC ( rcSRA, rcMgr, rcSelecting, rcSelf, rcNull );
- if ( accession == NULL )
- return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNull );
- if ( accession [ 0 ] == 0 )
- return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcEmpty );
-
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . findPath ( self, accession, path, path_max, rep_len );
- }
-
- return RC ( rcSRA, rcMgr, rcSelecting, rcInterface, rcBadVersion );
-}
-
-rc_t CC SRAPathFind ( const SRAPath *self,
- const char *accession, char *path, size_t path_max )
-{
- return SRAPathFindWithRepLen ( self, accession, path, path_max, NULL );
-}
-
-
-/* List
- * list all runs known to SRAPath
- * this can be VERY SLOW due to the large number of runs
- *
- * "runs" [ OUT ] - return parameter for ordered list of accessions
- *
- * "deep" [ IN ] - when false, list only first responding server
- */
-rc_t CC SRAPathList ( const SRAPath *self, struct KNamelist **runs, bool deep )
-{
- if ( runs == NULL )
- return RC ( rcSRA, rcMgr, rcListing, rcParam, rcNull );
-
- * runs = NULL;
-
- if ( self == NULL )
- return RC ( rcSRA, rcMgr, rcListing, rcSelf, rcNull );
-
- switch ( self -> vt -> v1 . maj )
- {
- case 1:
- return self -> vt -> v1 . listPath ( self, runs, deep );
- }
-
- return RC ( rcSRA, rcMgr, rcListing, rcInterface, rcBadVersion );
-}
diff --git a/libs/sra/sraschema-stub.c b/libs/sra/sraschema-stub.c
index d672b42..2cfdc97 100644
--- a/libs/sra/sraschema-stub.c
+++ b/libs/sra/sraschema-stub.c
@@ -26,88 +26,21 @@
#include <sra/sraschema.h>
#include <sra/sradb-priv.h>
-#include <kfs/dyload.h>
#include <klib/rc.h>
-#include <sysalloc.h>
-#include <os-native.h>
-
#include "sra-priv.h"
-#include <string.h>
-#include <assert.h>
-
-
/*--------------------------------------------------------------------------
* SRASchema
* a schema object pre-loaded with default SRA schema
*/
-#if ! _STATIC
-/* LoadLibrary
- * loads libsraschema and fills out function pointers
- */
-static KDylib *libsraschema = NULL;
-
-static struct
-{
- rc_t ( CC * sraSchemaMake ) ( struct VSchema **schema, struct VDBManager const *mgr );
-
-} imports;
-
-static
-rc_t SRASchemaLoadLibrary ( void )
-{
- KDyld *dl;
- rc_t rc = KDyldMake ( & dl );
- if ( rc == 0 )
- {
- rc = KDyldLoadLib ( dl, & libsraschema, LPFX "sra-schema" SHLX );
- if ( rc == 0 )
- {
- KSymAddr *sym;
-
- /* resolve symbols */
- rc = KDylibSymbol ( libsraschema, & sym, "SRASchemaMake" );
- if ( rc == 0 )
- {
- KSymAddrAsFunc ( sym, ( fptr_t* ) & imports . sraSchemaMake );
- KSymAddrRelease ( sym );
- }
-
- /* bail on error */
- if ( rc != 0 )
- {
- KDylibRelease ( libsraschema );
- libsraschema = NULL;
- memset ( & imports, 0, sizeof imports );
- }
- }
- KDyldRelease ( dl );
- }
-
- return rc;
-}
-#endif
-
/* Make
* create an instance of the default SRA schema
*/
rc_t CC VDBManagerMakeSRASchema ( struct VDBManager const *self, struct VSchema **schema )
{
-#if _STATIC
return SRASchemaMake ( schema, self );
-#else
- if ( libsraschema == NULL )
- {
- rc_t rc = SRASchemaLoadLibrary ();
- if ( rc != 0 )
- return rc;
- }
-
- assert ( imports . sraSchemaMake != NULL );
- return ( * imports . sraSchemaMake ) ( schema, self );
-#endif
}
rc_t CC SRAMgrMakeSRASchema ( const SRAMgr *self, struct VSchema **schema )
diff --git a/libs/sra/sratbl-cmn.c b/libs/sra/sratbl-cmn.c
index ab1ead5..0957d67 100644
--- a/libs/sra/sratbl-cmn.c
+++ b/libs/sra/sratbl-cmn.c
@@ -35,10 +35,15 @@
#include <vdb/table.h>
#include <vdb/cursor.h>
#include <vdb/vdb-priv.h>
+#include <vdb/dependencies.h>
#include <kdb/meta.h>
+#include <kdb/manager.h>
#include <kdb/table.h>
#include <kdb/database.h>
#include <kdb/kdb-priv.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <vfs/resolver.h>
#include <klib/refcount.h>
#include <klib/log.h>
#include <klib/debug.h>
@@ -55,6 +60,7 @@
#include <string.h>
#include <stdio.h>
#include <assert.h>
+#include <va_copy.h>
/* Destroy
*/
@@ -74,6 +80,8 @@ void SRATableDestroy ( SRATable *self )
VTableRelease ( self -> vtbl );
SRAMgrSever ( self -> mgr );
+ memset(self, 0, sizeof *self);
+
free ( self );
}
@@ -162,35 +170,191 @@ static rc_t ReadSpotSequence_v1(SRATable *self)
return rc;
}
-rc_t SRATableLoadMetadata( SRATable *self )
+typedef enum {
+ eNotRead,
+ eNotFound,
+ eFailed,
+ eRead
+} EState;
+typedef struct {
+ EState state;
+ rc_t rc;
+} State;
+typedef struct {
+ uint64_t value;
+ State state;
+} U64;
+typedef struct {
+ uint32_t value;
+ State state;
+} U32;
+typedef struct {
+ U64 BASE_COUNT;
+ U32 MAX_SPOT_ID;
+ U32 MIN_SPOT_ID;
+ U64 SPOT_COUNT;
+} PseudoMeta;
+static
+rc_t VCursor_ReadPseudoMeta(rc_t rc, const VCursor *self,
+ const char *name, void *buffer, uint32_t blen, State *state)
+{
+ uint32_t idx = ~0;
+ uint32_t row_len = ~0;
+
+ assert(state);
+ state->rc = 0;
+
+ if (rc != 0)
+ { return rc; }
+
+ state->state = eNotRead;
+
+ rc = VCursorAddColumn(self, &idx, name);
+
+ if (rc != 0) {
+ state->rc = rc;
+
+ if (GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound) {
+ rc = 0;
+ state->state = eNotFound;
+ }
+ else {
+ state->state = eFailed;
+ }
+ }
+
+ if (state->rc == 0) {
+ rc = VCursorReadDirect(self, 1, idx, blen * 8, buffer, blen, &row_len);
+
+ state->rc = rc;
+
+ if (rc != 0)
+ { state->state = eFailed; }
+ else
+ { state->state = eRead; }
+
+ }
+
+ return rc;
+}
+
+static
+rc_t VCursor_ReadPseudoMetaU32(rc_t rc, const VCursor *self,
+ const char *name, U32 *val)
+{
+ assert(val);
+ return VCursor_ReadPseudoMeta(rc, self,
+ name, &val->value, sizeof val->value, &val->state);
+}
+
+static
+rc_t VCursor_ReadPseudoMetaU64(rc_t rc, const VCursor *self,
+ const char *name, U64 *val)
+{
+ assert(val);
+ return VCursor_ReadPseudoMeta(rc, self,
+ name, &val->value, sizeof val->value, &val->state);
+}
+
+static
+rc_t PseudoMetaInit(PseudoMeta *self, const VCursor *curs,
+ bool readSpotCount, uint64_t spot_count)
{
rc_t rc = 0;
- uint32_t idx, len;
-
- assert(self->curs != NULL);
- assert(self->curs_open == true);
-#define RD_META(nm, var, fail, dflt) \
- if( (rc = VCursorAddColumn(self->curs, &idx, nm)) != 0 || \
- (rc = VCursorReadDirect(self->curs, 1, idx, sizeof(var) * 8, \
- &var, sizeof(var), &len)) != 0 ) { \
- if( fail ) return rc; else rc = 0; \
- var = dflt; \
+ assert(self);
+
+ memset(self, 0, sizeof *self);
+
+ if (readSpotCount) {
+ rc =
+ VCursor_ReadPseudoMetaU64(rc, curs, "SPOT_COUNT", &self->SPOT_COUNT);
+ }
+ else {
+ self->SPOT_COUNT.value = spot_count;
+ self->SPOT_COUNT.state.state = eRead;
+ }
+
+ rc = VCursor_ReadPseudoMetaU64(rc, curs, "BASE_COUNT", &self->BASE_COUNT);
+
+ rc = VCursor_ReadPseudoMetaU32(rc, curs, "MIN_SPOT_ID", &self->MIN_SPOT_ID);
+
+ rc = VCursor_ReadPseudoMetaU32(rc, curs, "MAX_SPOT_ID", &self->MAX_SPOT_ID);
+
+ return rc;
+}
+
+static
+rc_t PseudoMetaFix(PseudoMeta *self)
+{
+ rc_t rc = 0;
+
+ assert(self);
+
+ if (self->MIN_SPOT_ID.state.state != eRead)
+ { self->MIN_SPOT_ID.value = 1; }
+
+ if (self->SPOT_COUNT.state.state != eRead &&
+ self->MAX_SPOT_ID.state.state != eRead)
+ {
+ return self->SPOT_COUNT.state.rc;
+ }
+ else if (self->SPOT_COUNT.state.state == eRead) {
+ if (self->MAX_SPOT_ID.state.state != eRead) {
+ self->MAX_SPOT_ID.value
+ = self->MIN_SPOT_ID.value + self->SPOT_COUNT.value - 1;
+ }
+ else if (self->MAX_SPOT_ID.value >= self->MIN_SPOT_ID.value) {
+ if (self->SPOT_COUNT.value
+ > self->MAX_SPOT_ID.value - self->MIN_SPOT_ID.value + 1)
+ {
+ self->SPOT_COUNT.value
+ = self->MAX_SPOT_ID.value - self->MIN_SPOT_ID.value + 1;
+ }
+ }
+ }
+ else {
+ self->SPOT_COUNT.value
+ = self->MAX_SPOT_ID.value - self->MIN_SPOT_ID.value - 1;
}
- if(self->metavers <= 1 ) {
- rc = ReadSpotSequence_v1 ( self );
- if ( rc != 0 ) return rc;
- } else {
- RD_META("SPOT_COUNT", self->spot_count, true, 0);
+ return rc;
+}
+
+static
+rc_t SRATableLoadMetadata(SRATable *self)
+{
+ rc_t rc = 0;
+ PseudoMeta meta;
+ bool readSpotCount = true;
+
+ assert(self && self->curs != NULL);
+ assert(self->curs_open == true);
+
+ readSpotCount = self->metavers > 1;
+ if (!readSpotCount) {
+ rc = ReadSpotSequence_v1(self);
+ if (rc != 0)
+ { return rc; }
}
- RD_META("BASE_COUNT", self->base_count, false, 0);
- RD_META("MIN_SPOT_ID", self->min_spot_id, false, 1);
- RD_META("MAX_SPOT_ID", self->max_spot_id, false, self->spot_count);
+
+ rc = PseudoMetaInit(&meta, self->curs, readSpotCount, self->spot_count);
+ if (rc != 0)
+ { return rc; }
+
+ rc = PseudoMetaFix(&meta);
+ if (rc != 0)
+ { return rc; }
+
+ self->spot_count = meta.SPOT_COUNT.value;
+ self->base_count = meta.BASE_COUNT.value;
+ self->min_spot_id = meta.MIN_SPOT_ID.value;
+ self->max_spot_id = meta.MAX_SPOT_ID.value;
+
return rc;
}
-LIB_EXPORT rc_t CC SRATableFillOut ( SRATable *self )
+rc_t SRATableFillOut ( SRATable *self, bool update )
{
rc_t rc;
@@ -202,7 +366,9 @@ LIB_EXPORT rc_t CC SRATableFillOut ( SRATable *self )
if ( rc != 0 )
return rc;
self -> curs_open = true;
- return SRATableLoadMetadata(self);
+ if ( ! update )
+ rc = SRATableLoadMetadata(self);
+ return rc;
}
@@ -212,15 +378,16 @@ LIB_EXPORT rc_t CC SRATableFillOut ( SRATable *self )
* resolves via SRAPath mgr if present
*/
rc_t ResolveTablePath ( const SRAMgr *mgr,
- char *path, size_t psize, const char *spec, va_list args )
+ char *path, size_t psize, const char *spec, va_list args )
{
+#if OLD_SRAPATH_MGR
int len;
char tblpath [ 4096 ];
- const SRAPath *pmgr = mgr -> pmgr;
+ const SRAPath *pmgr = mgr -> _pmgr;
/* if no path manager or if the spec string has embedded path separators,
then this can't be an accession - just print it out */
- if ( mgr -> pmgr == NULL || strchr( spec, '/' ) != NULL )
+ if ( mgr -> _pmgr == NULL || strchr( spec, '/' ) != NULL )
{
len = vsnprintf ( path, psize, spec, args );
if ( len < 0 || ( size_t ) len >= psize )
@@ -236,7 +403,6 @@ rc_t ResolveTablePath ( const SRAMgr *mgr,
/* test if the path exists in current directory, i.e. with assumed dot */
if ( ! SRAPathTest ( pmgr, tblpath ) )
{
- /* try to resolve the path using mgr */
rc_t rc = SRAPathFind ( pmgr, tblpath, path, psize );
if ( rc == 0 )
return 0;
@@ -248,6 +414,23 @@ rc_t ResolveTablePath ( const SRAMgr *mgr,
strcpy ( path, tblpath );
return 0;
+#else
+ VPath *accession;
+ const VPath *tblpath = NULL;
+ rc_t rc = VPathMakeFmt ( & accession, spec, args );
+ if ( rc == 0 )
+ {
+ rc = VResolverLocal ( ( const VResolver* ) mgr -> _pmgr, accession, & tblpath );
+ if ( rc == 0 )
+ {
+ size_t size;
+ rc = VPathReadPath ( tblpath, path, psize, & size );
+ VPathRelease ( tblpath );
+ }
+ VPathRelease ( accession );
+ }
+ return rc;
+#endif
}
/* OpenRead
@@ -276,66 +459,65 @@ rc_t CC SRAMgrVOpenAltTableRead ( const SRAMgr *self,
rc = RC ( rcSRA, rcTable, rcOpening, rcName, rcEmpty );
else
{
- char path [ 4096 ];
- rc = ResolveTablePath ( self, path, sizeof path, spec, args );
- if ( rc == 0 )
+ SRATable *tbl = calloc ( 1, sizeof *tbl );
+ if ( tbl == NULL )
+ rc = RC ( rcSRA, rcTable, rcConstructing, rcMemory, rcExhausted );
+ else
{
- SRATable *tbl = calloc ( 1, sizeof *tbl );
- if ( tbl == NULL )
- rc = RC ( rcSRA, rcTable, rcConstructing, rcMemory, rcExhausted );
- else
+ VSchema *schema = NULL;
+
+ rc = VDBManagerMakeSRASchema(self -> vmgr, & schema);
+ if ( rc == 0 )
{
- VSchema *schema;
- rc = VDBManagerMakeSRASchema ( self -> vmgr, & schema );
- if ( rc == 0 )
+ va_list args_copy;
+ va_copy ( args_copy, args );
+ rc = VDBManagerVOpenTableRead ( self -> vmgr, & tbl -> vtbl, schema, spec, args );
+ if ( rc != 0 && GetRCObject ( rc ) == rcTable && GetRCState ( rc ) == rcIncorrect )
{
- rc = VDBManagerOpenTableRead ( self -> vmgr, & tbl -> vtbl, schema, path );
- if ( rc != 0 && GetRCObject ( rc ) == rcPath && GetRCState ( rc ) == rcIncorrect )
+ const VDatabase *db;
+ rc_t rc2 = VDBManagerVOpenDBRead ( self -> vmgr, & db, schema, spec, args_copy );
+ if ( rc2 == 0 )
{
- const VDatabase *db;
- rc_t rc2 = VDBManagerOpenDBRead ( self -> vmgr, & db, schema, path );
+ rc2 = VDatabaseOpenTableRead ( db, & tbl -> vtbl, altname );
if ( rc2 == 0 )
- {
- rc2 = VDatabaseOpenTableRead ( db, & tbl -> vtbl, altname );
- if ( rc2 == 0 )
- rc = 0;
+ rc = 0;
- VDatabaseRelease ( db );
- }
+ VDatabaseRelease ( db );
}
+ }
+ va_end ( args_copy );
- VSchemaRelease(schema);
+ VSchemaRelease(schema);
+ if ( rc == 0 )
+ {
+ rc = VTableOpenMetadataRead ( tbl -> vtbl, & tbl -> meta );
if ( rc == 0 )
{
- rc = VTableOpenMetadataRead ( tbl -> vtbl, & tbl -> meta );
+ rc = KMetadataVersion ( tbl -> meta, & tbl -> metavers );
if ( rc == 0 )
{
- rc = KMetadataVersion ( tbl -> meta, & tbl -> metavers );
+ rc = VTableCreateCursorRead ( tbl -> vtbl, & tbl -> curs );
if ( rc == 0 )
{
- rc = VTableCreateCursorRead ( tbl -> vtbl, & tbl -> curs );
+ tbl -> mgr = SRAMgrAttach ( self );
+ tbl -> mode = self -> mode;
+ tbl -> read_only = true;
+ KRefcountInit ( & tbl -> refcount, 1, "SRATable", "OpenTableRead", spec );
+
+ rc = SRATableFillOut ( tbl, false );
if ( rc == 0 )
{
- tbl -> mgr = SRAMgrAttach ( self );
- tbl -> mode = self -> mode;
- tbl -> read_only = true;
- KRefcountInit ( & tbl -> refcount, 1, "SRATable", "OpenTableRead", path );
-
- rc = SRATableFillOut ( tbl );
- if ( rc == 0 )
- {
- * rslt = tbl;
- return 0;
- }
+ * rslt = tbl;
+ return 0;
}
}
}
}
-
}
- SRATableWhack ( tbl );
+
}
+ SRATableWhack ( tbl );
}
}
@@ -408,6 +590,8 @@ rc_t SRATableRead ( const SRATable *self, spotid_t id, uint32_t idx,
* offset = elem_off * elem_bits;
* size = elem_cnt * elem_bits;
return 0;
+ } else if( UIError(rc, NULL, self->vtbl) ) {
+ UITableLOGError(rc, self->vtbl, true);
}
}
}
@@ -1073,14 +1257,16 @@ LIB_EXPORT rc_t CC SRATableMakeSingleFileArchive ( const SRATable *self, const K
const VDatabase *db;
if( (rc = VTableOpenParentRead(self->vtbl, &db)) == 0 && db != NULL ) {
const KDatabase *kdb;
- if( (rc = VDatabaseOpenKDatabaseRead(db, &kdb)) == 0 ) {
+ if ((rc = VDatabaseOpenKDatabaseRead(db, &kdb)) == 0) {
const KDirectory *db_dir;
if( (rc = KDatabaseOpenDirectoryRead(kdb, &db_dir)) == 0 ) {
- rc = KDirectoryOpenTocFileRead(db_dir, sfa, sraAlign4Byte,
- lightweight ? sfa_filter_light : sfa_filter, (void*)sfa_path_type_db, sfa_sort_db);
+ rc = KDirectoryOpenTocFileRead(db_dir, sfa,
+ sraAlign4Byte,
+ lightweight ? sfa_filter_light : sfa_filter,
+ (void*)sfa_path_type_db, sfa_sort_db);
KDirectoryRelease(db_dir);
if( ext != NULL ) {
- *ext = lightweight ? ".lite.csra" : ".csra";
+ *ext = CSRA_EXT(lightweight);
}
}
KDatabaseRelease(kdb);
@@ -1097,7 +1283,7 @@ LIB_EXPORT rc_t CC SRATableMakeSingleFileArchive ( const SRATable *self, const K
lightweight ? sfa_filter_light : sfa_filter, (void*)sfa_path_type_tbl, sfa_sort_tbl);
KDirectoryRelease(tbl_dir);
if( ext != NULL ) {
- *ext = lightweight ? ".lite.sra" : ".sra";
+ *ext = SRA_EXT(lightweight);
}
}
KTableRelease(ktbl);
diff --git a/libs/sra/wsramgr.c b/libs/sra/wsramgr.c
index 0f3f502..6c430bc 100644
--- a/libs/sra/wsramgr.c
+++ b/libs/sra/wsramgr.c
@@ -41,6 +41,7 @@
#include <klib/refcount.h>
#include <klib/log.h>
#include <klib/rc.h>
+#include <klib/text.h>
#include <stdlib.h>
#include <sysalloc.h>
diff --git a/libs/sra/wsraschema-stub.c b/libs/sra/wsraschema-stub.c
old mode 100755
new mode 100644
index a71799f..2cfdc97
--- a/libs/sra/wsraschema-stub.c
+++ b/libs/sra/wsraschema-stub.c
@@ -26,88 +26,21 @@
#include <sra/sraschema.h>
#include <sra/sradb-priv.h>
-#include <kfs/dyload.h>
#include <klib/rc.h>
-#include <sysalloc.h>
-#include <os-native.h>
-
#include "sra-priv.h"
-#include <string.h>
-#include <assert.h>
-
-
/*--------------------------------------------------------------------------
* SRASchema
* a schema object pre-loaded with default SRA schema
*/
-#if ! _STATIC
-/* LoadLibrary
- * loads libsraschema and fills out function pointers
- */
-static KDylib *libsraschema = NULL;
-
-static struct
-{
- rc_t ( CC * sraSchemaMake ) ( struct VSchema **schema, struct VDBManager const *mgr );
-
-} imports;
-
-static
-rc_t SRASchemaLoadLibrary ( void )
-{
- KDyld *dl;
- rc_t rc = KDyldMake ( & dl );
- if ( rc == 0 )
- {
- rc = KDyldLoadLib ( dl, & libsraschema, LPFX "wsra-schema" SHLX );
- if ( rc == 0 )
- {
- KSymAddr *sym;
-
- /* resolve symbols */
- rc = KDylibSymbol ( libsraschema, & sym, "SRASchemaMake" );
- if ( rc == 0 )
- {
- KSymAddrAsFunc ( sym, ( fptr_t* ) & imports . sraSchemaMake );
- KSymAddrRelease ( sym );
- }
-
- /* bail on error */
- if ( rc != 0 )
- {
- KDylibRelease ( libsraschema );
- libsraschema = NULL;
- memset ( & imports, 0, sizeof imports );
- }
- }
- KDyldRelease ( dl );
- }
-
- return rc;
-}
-#endif
-
/* Make
* create an instance of the default SRA schema
*/
rc_t CC VDBManagerMakeSRASchema ( struct VDBManager const *self, struct VSchema **schema )
{
-#if _STATIC
return SRASchemaMake ( schema, self );
-#else
- if ( libsraschema == NULL )
- {
- rc_t rc = SRASchemaLoadLibrary ();
- if ( rc != 0 )
- return rc;
- }
-
- assert ( imports . sraSchemaMake != NULL );
- return ( * imports . sraSchemaMake ) ( schema, self );
-#endif
}
rc_t CC SRAMgrMakeSRASchema ( const SRAMgr *self, struct VSchema **schema )
diff --git a/libs/sra/wsratbl.c b/libs/sra/wsratbl.c
index 0aeec9c..945ae68 100644
--- a/libs/sra/wsratbl.c
+++ b/libs/sra/wsratbl.c
@@ -32,6 +32,7 @@
#include <vdb/cursor.h>
#include <vdb/vdb-priv.h>
#include <kdb/meta.h>
+#include <klib/printf.h> /* string_vprintf */
#include <klib/refcount.h>
#include <klib/log.h>
#include <klib/debug.h>
@@ -94,8 +95,11 @@ LIB_EXPORT rc_t CC SRAMgrVCreateTable ( SRAMgr *self, SRATable **rslt,
rc = RC ( rcSRA, rcTable, rcConstructing, rcString, rcEmpty );
else
{
- char path [ 4096 ];
- rc = ResolveTablePath ( self, path, sizeof path, spec, args );
+ char path [ 4097 ];
+ size_t act_size = 0;
+
+ rc = string_vprintf(path, 4097, &act_size, spec, args);
+ path[act_size] = '\0';
if ( rc == 0 )
{
VTable *vtbl;
@@ -196,11 +200,14 @@ LIB_EXPORT rc_t CC SRAMgrVOpenTableUpdate(SRAMgr *mgr, SRATable **rslt, const ch
self->read_only = false;
KRefcountInit(&self->refcount, 1, "SRATable", "OpenTableUpdate", path);
- SRATableLoadMetadata(self); /* fallible */
- VectorInit(&self->wcol, 0, 16);
+ rc = SRATableFillOut ( self, true );
+ if ( rc == 0 )
+ {
+ VectorInit ( & self -> wcol, 0, 16 );
- *rslt = self;
- return 0;
+ *rslt = self;
+ return 0;
+ }
}
}
}
diff --git a/libs/sraxf/Makefile b/libs/sraxf/Makefile
index dbc168b..453bc1c 100644
--- a/libs/sraxf/Makefile
+++ b/libs/sraxf/Makefile
@@ -43,15 +43,13 @@ include $(TOP)/build/Makefile.env
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(ALL_LIBS))
-
-all std: makedirs vers-includes
+all std: makedirs
@ $(MAKE_CMD) $(TARGDIR)/std
-$(ALL_LIBS): makedirs vers-includes
+$(ALL_LIBS): makedirs
@ $(MAKE_CMD) $(TARGDIR)/$@
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
#-------------------------------------------------------------------------------
# std
@@ -69,14 +67,6 @@ clean: stdclean
.PHONY: clean
#-------------------------------------------------------------------------------
-# tag
-#
-tag: \
- $(addsuffix _tag,$(ALL_LIBS))
-
-.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
-
-#-------------------------------------------------------------------------------
# sra transform library
#
$(TARGDIR)/libsraxf: $(addprefix $(TARGDIR)/libsraxf.,$(MODEXT))
@@ -132,10 +122,7 @@ $(MODDIR)/libsraxf.$(SHLX): $(SRAXF_OBJ)
$(TARGDIR)/libsraxf.$(LIBX): $(ILIBDIR)/libsraxf.$(LIBX)
$(ILIBDIR)/libsraxf.$(LIBX): $(SRAXF_OBJ)
- $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(SRAXF_LIB)
-
-libsraxf_tag:
- @ $(TOP)/build/tag-module.sh $(MODULE) libsraxf $(SRAXF_OBJ)
+ $(LD) --slib -o $@ $^ $(SRAXF_LIB)
#-------------------------------------------------------------------------------
@@ -170,7 +157,4 @@ $(WMODDIR)/libwsraxf.$(SHLX): $(WSRAXF_OBJ)
$(TARGDIR)/libwsraxf.$(LIBX): $(ILIBDIR)/libwsraxf.$(LIBX)
$(ILIBDIR)/libwsraxf.$(LIBX): $(WSRAXF_OBJ)
- $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(WSRAXF_LIB)
-
-libswraxf_tag:
- @ $(TOP)/build/tag-module.sh $(MODULE) libwsraxf $(WSRAXF_OBJ)
+ $(LD) --slib -o $@ $^ $(WSRAXF_LIB)
diff --git a/libs/sraxf/fix_read_seg_impl.h b/libs/sraxf/fix_read_seg_impl.h
new file mode 100644
index 0000000..977485f
--- /dev/null
+++ b/libs/sraxf/fix_read_seg_impl.h
@@ -0,0 +1,169 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/* READ_SEG was engineered to be capable of holding
+ any sort of read description, including out-of-order,
+ non-contiguous, gapped or overlapped segments.
+
+ This property was never used, and READ_SEG is by now
+ obsolete, so we can count on it being used as a sort
+ of READ_LEN where the starts represent an integration
+ of the lengths, i.e. all segments are in order and
+ contiguous. */
+#define READ_SEGS_ALWAYS_CONTIGUOUS 1
+
+static void fix_read_seg_impl(const uint16_t *rs_src, uint32_t nreads,
+ uint32_t spot_len, uint32_t * rs_dst)
+{
+ const uint32_t nreads2 = nreads + nreads;
+ uint32_t i, total;
+
+ assert(rs_src && rs_dst);
+
+#if READ_SEGS_ALWAYS_CONTIGUOUS
+ /* first, check the stated bases within the read-seg */
+ for ( i = 1, total = 0; i < nreads2; i += 2 )
+ total += rs_src [ i ];
+
+ /* if there are no bases reported, just divide the
+ spot_len by the number of reads and rewrite */
+ if ( total == 0 )
+ {
+ /* if there is a single read, fix it */
+ if ( nreads == 1 )
+ {
+ rs_dst [ 0 ] = 0;
+ rs_dst [ 1 ] = spot_len;
+ }
+ else
+ {
+ double fstart = 0;
+ double flen = ( double ) spot_len / nreads;
+ for ( i = total = 0; i < nreads2; fstart += flen, i += 2 )
+ {
+ long int start = lround ( fstart );
+ long int end = lround ( fstart + flen );
+ if ( start >= ( long int ) spot_len )
+ {
+ rs_dst [ i ] = spot_len;
+ rs_dst [ i + 1 ] = 0;
+ }
+ else
+ {
+ if ( end > ( long int ) spot_len )
+ end = ( long int ) spot_len - start;
+ else
+ end -= start;
+
+ rs_dst [ i ] = ( uint32_t ) start;
+ rs_dst [ i + 1 ] = ( uint32_t ) end;
+ }
+
+ total += rs_dst [ i + 1 ];
+ }
+
+ assert ( total == spot_len );
+ }
+ }
+
+ /* have the right number of bases - just rewrite starts */
+ else if ( total == spot_len )
+ {
+ for ( i = total = 0; i < nreads2; i += 2 )
+ {
+ rs_dst [ i ] = total;
+ total += ( rs_dst [ i + 1 ] = rs_src [ i + 1 ] );
+ }
+ }
+
+ /* have too many bases - trust all up to limit */
+ else if ( total > spot_len )
+ {
+ for ( i = total = 0; i < nreads2; i += 2 )
+ {
+ rs_dst [ i ] = total;
+ total += ( rs_dst [ i + 1 ] = rs_src [ i + 1 ] );
+ if ( total > spot_len )
+ {
+ total = spot_len;
+ rs_dst [ i + 1 ] = total - rs_dst [ i ];
+ }
+ }
+ }
+
+ /* too few bases - trust all but last */
+ else
+ {
+ for ( i = 0; i < nreads2; i += 2 )
+ rs_dst [ i + 1 ] = rs_src [ i + 1 ];
+
+ for ( ; total < spot_len && i != 0; )
+ {
+ uint32_t remaining = spot_len - total;
+ i -= 2;
+ rs_dst [ i + 1 ] += remaining;
+ total += remaining;
+ }
+
+ for ( i = 0, total = 0; i < nreads2; i += 2 )
+ {
+ rs_dst [ i ] = total;
+ total += rs_dst [ i + 1 ];
+ }
+ }
+#else
+ /* loop increments by 2
+ where the read start is even, read length odd */
+ for ( i = total = 0; i < nreads2; i += 2 )
+ {
+ /* is start greater than max? */
+ if ( rs_src [ i ] >= spot_len )
+ {
+ /* clip start to end */
+ rs_dst [ i ] = spot_len;
+ /* zero length read */
+ rs_dst [ i + 1 ] = 0;
+ }
+ /* is end greater than max? */
+ else if ( rs_src [ i ] + rs_src [ i + 1 ] > spot_len )
+ {
+ /* keep start */
+ rs_dst [ i ] = rs_src [ i ];
+ /* clip length to end */
+ rs_dst [ i + 1 ] = spot_len - rs_src [ i ];
+ }
+ else
+ {
+ /* copy existing segment */
+ rs_dst [ i ] = rs_src [ i ];
+ rs_dst [ i + 1 ] = rs_src [ i + 1 ];
+ }
+
+ /* sum total length */
+ total += rs_src [ i + 1 ];
+ }
+#endif
+}
diff --git a/libs/sraxf/format-spot-name.c b/libs/sraxf/format-spot-name.c
index 36034e6..9859ed5 100644
--- a/libs/sraxf/format-spot-name.c
+++ b/libs/sraxf/format-spot-name.c
@@ -28,6 +28,7 @@
#include <vdb/xform.h>
#include <klib/data-buffer.h>
#include <klib/text.h>
+#include <klib/printf.h>
#include <klib/rc.h>
#include <sysalloc.h>
#include "name-tokenizer.h"
@@ -85,6 +86,7 @@ rc_t CC format_spot_name ( void *self,
/* check for NAME_FMT */
if ( argv [ 0 ] . u. data . elem_count != 0 )
{
+ size_t num_writ;
char sname[1024]; /** name on stack **/
const char *name_fmt = ((char*)argv[0].u.data.base) + argv[0].u.data.first_elem;
uint32_t i, j, x, y;
@@ -140,7 +142,9 @@ rc_t CC format_spot_name ( void *self,
}
break;
case 'r': case 'R':
- j+=sprintf(sname+j,"%ld",row_id);
+ rc = string_printf ( & sname [ j ], sizeof sname - j, & num_writ, "%ld", row_id );
+ assert ( rc == 0 );
+ j += ( uint32_t ) num_writ;
i+=2;
break;
default:
@@ -227,6 +231,7 @@ rc_t CC format_spot_name_no_coord ( void *self,
/* check for NAME_FMT */
if ( argv [ 0 ] . u. data . elem_count != 0 )
{
+ size_t num_writ;
char sname[1024]; /** name on stack **/
const char *name_fmt = ((char*)argv[0].u.data.base) + argv[0].u.data.first_elem;
uint32_t i, j;
@@ -236,7 +241,9 @@ rc_t CC format_spot_name_no_coord ( void *self,
if( name_fmt [ i ] == '$' ){
switch( name_fmt [ i+1 ]){
case 'r': case 'R':
- j+=sprintf(sname+j,"%ld",row_id);
+ rc = string_printf ( & sname [ j ], sizeof sname - j, & num_writ, "%ld", row_id );
+ assert ( rc == 0 );
+ j += ( uint32_t ) num_writ;
i+=2;
break;
default:
diff --git a/libs/sraxf/index_lookup.c b/libs/sraxf/index_lookup.c
index 1468e9d..fbafa89 100644
--- a/libs/sraxf/index_lookup.c
+++ b/libs/sraxf/index_lookup.c
@@ -81,9 +81,28 @@ static int CC SRAPTNodeFindFmt ( const void *item, const struct PBSTNode *n, voi
for(i=j=0;q[i]!=0 && db[j]!= 0;){
if(q[i] == db[j]){
i++;j++;
- } else if( db[j] == '$'
- && isdigit(q[i])){
+ } else if(db[j] == '$'){
switch(db[j+1]){
+ case 'q':
+ case 'Q':
+ {
+ int k;
+ uint32_t xy=0;
+ j+=2;
+ for(k=0;k<5 && q[i]!=0;k++,i++){
+ xy *= 36;
+ if(isdigit(q[i])){
+ xy += q[i] - '0' + 26;
+ } else if(isalpha(q[i])){
+ xy += toupper(q[i]) - 'A';
+ }
+ }
+ if(u){
+ u->x = xy >> 12;
+ u->y = xy &0xFFF;
+ }
+ break;
+ }
case 'x':
case 'X':
if(u) u->x=atoi(q+i);
diff --git a/libs/sraxf/libsraxf.vers b/libs/sraxf/libsraxf.vers
index 781dcb0..e25d8d9 100644
--- a/libs/sraxf/libsraxf.vers
+++ b/libs/sraxf/libsraxf.vers
@@ -1 +1 @@
-1.1.3
+1.1.5
diff --git a/libs/sraxf/libsraxf.vers.h b/libs/sraxf/libsraxf.vers.h
deleted file mode 100644
index 924b642..0000000
--- a/libs/sraxf/libsraxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBSRAXF_VERS 0x01010003
diff --git a/libs/sraxf/libwsraxf.vers b/libs/sraxf/libwsraxf.vers
index 781dcb0..e25d8d9 100644
--- a/libs/sraxf/libwsraxf.vers
+++ b/libs/sraxf/libwsraxf.vers
@@ -1 +1 @@
-1.1.3
+1.1.5
diff --git a/libs/sraxf/libwsraxf.vers.h b/libs/sraxf/libwsraxf.vers.h
deleted file mode 100644
index dcc1cec..0000000
--- a/libs/sraxf/libwsraxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWSRAXF_VERS 0x01010003
diff --git a/libs/sraxf/prefix-tree-to-name.c b/libs/sraxf/prefix-tree-to-name.c
index 8537495..06a2e1b 100644
--- a/libs/sraxf/prefix-tree-to-name.c
+++ b/libs/sraxf/prefix-tree-to-name.c
@@ -31,9 +31,7 @@
#include <kdb/index.h>
#include <klib/data-buffer.h>
#include <klib/text.h>
-#include <klib/out.h>
#include <klib/rc.h>
-#include <klib/debug.h>
#include <string.h>
#include <assert.h>
diff --git a/libs/sraxf/read-desc.c b/libs/sraxf/read-desc.c
index 15fa952..d3ce922 100644
--- a/libs/sraxf/read-desc.c
+++ b/libs/sraxf/read-desc.c
@@ -33,6 +33,7 @@
#include <sysalloc.h>
#include <assert.h>
+#include <string.h>
static
rc_t CC make_read_desc ( void *self, const VXformInfo *info, int64_t row_id,
@@ -97,6 +98,7 @@ rc_t CC make_read_desc ( void *self, const VXformInfo *info, int64_t row_id,
{
uint32_t label_start = lbl_start [ idx ];
uint32_t label_len = lbl_len [ idx ];
+ size_t label_used;
if ( label_start + label_len > label_max )
{
if ( label_start > label_max )
@@ -110,8 +112,11 @@ rc_t CC make_read_desc ( void *self, const VXformInfo *info, int64_t row_id,
dst[idx].type = read_type[idx] & SRA_READ_TYPE_BIOLOGICAL;
dst[idx].cs_key = cs_key[idx];
- string_copy( dst[idx].label, sizeof(dst[idx].label),
- & label [ label_start ], label_len );
+ label_used = string_copy( dst[idx].label, sizeof(dst[idx].label),
+ & label [ label_start ], label_len );
+ /* Pad with NULs so that bitcmp sees fully initialized data */
+ memset( dst[idx].label + label_used, '\0',
+ sizeof(dst[idx].label) - label_used );
}
rslt->elem_bits = sizeof(*dst) * 8;
diff --git a/libs/sraxf/read-seg-from-readn.c b/libs/sraxf/read-seg-from-readn.c
index 1777690..99bdf68 100644
--- a/libs/sraxf/read-seg-from-readn.c
+++ b/libs/sraxf/read-seg-from-readn.c
@@ -39,8 +39,10 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#include <math.h>
#include <assert.h>
+#include "fix_read_seg_impl.h"
/* readn_read_desc
* "nreads" [ DATA ] - bases for entire spot
@@ -330,10 +332,12 @@ rc_t CC fix_read_seg ( void *data, const VXformInfo *info, int64_t row_id,
{
rc_t rc;
- const uint16_t *rs_src = ((uint16_t*)argv[0].u.data.base)+argv[0].u.data.first_elem;
- const uint32_t nreads = argv[0].u.data.elem_count;
- uint32_t spot_len = ((uint32_t*)argv[1].u.data.base)[argv[1].u.data.first_elem];
- uint32_t nreads2 = nreads + nreads;
+ const uint16_t *rs_src = argv [ 0 ] . u . data . base;
+ const uint32_t nreads = argv [ 0 ] . u . data . elem_count;
+ const uint32_t *spot_lenp = argv [ 1 ] . u . data . base;
+ const uint32_t spot_len = spot_lenp [ argv [ 1 ] . u . data . first_elem ];
+
+ rs_src += argv [ 0 ] . u . data . first_elem;
assert ( spot_len > 0 );
assert ( nreads > 0);
@@ -341,37 +345,8 @@ rc_t CC fix_read_seg ( void *data, const VXformInfo *info, int64_t row_id,
rc = KDataBufferResize ( rslt -> data, nreads );
if ( rc == 0 )
{
- uint32_t i;
uint32_t * rs_dst = rslt -> data -> base;
-
- /* loop increments by 2
- where the read start is even, read length odd */
- for( i = 0; i < nreads2; i += 2 )
- {
- /* is start greater than max? */
- if( rs_src [ i ] >= spot_len )
- {
- /* clip start to end */
- rs_dst [ i ] = spot_len;
- /* zero length read */
- rs_dst [ i + 1 ] = 0;
- }
- /* is end greater than max? */
- else if ( rs_src [ i ] + rs_src [ i + 1 ] > spot_len )
- {
- /* keep start */
- rs_dst [ i ] = rs_src [ i ];
- /* clip length to end */
- rs_dst [ i + 1 ] = spot_len - rs_src [ i ];
- }
- else
- {
- /* copy existing segment */
- rs_dst [ i ] = rs_src [ i ];
- rs_dst [ i + 1 ] = rs_src [ i + 1 ];
- }
- }
-
+ fix_read_seg_impl(rs_src, nreads, spot_len, rs_dst);
rslt -> elem_count = nreads;
}
return rc;
diff --git a/libs/sraxf/stats.c b/libs/sraxf/stats.c
index 691da53..0b53093 100644
--- a/libs/sraxf/stats.c
+++ b/libs/sraxf/stats.c
@@ -30,6 +30,7 @@
#include <vdb/table.h>
#include <klib/data-buffer.h>
#include <klib/text.h>
+#include <klib/printf.h>
#include <klib/rc.h>
#include <kdb/meta.h>
#include <os-native.h> /* strncasecmp */
@@ -58,37 +59,37 @@ typedef struct sra_meta_stats_data_struct
sra_meta_stats_node_group table;
sra_meta_stats_node_group dflt_grp;
char* last_grp_name;
- uint64_t last_grp_name_len;
- uint64_t last_grp_name_sz;
+ uint64_t last_grp_name_len; /* strlen */
+ uint64_t last_grp_name_sz; /* buffer size */
sra_meta_stats_node_group last_grp;
+ uint32_t grp_qty;
} sra_meta_stats_data;
static
-rc_t sra_meta_stats_node_read(KMDataNode* node, void* value, size_t sz)
+rc_t sra_meta_stats_node_read(KMDataNode* node, void* value)
{
- rc_t rc = 0;
- size_t num_read, remaining;
-
- if( (rc = KMDataNodeRead(node, 0, value, sz, &num_read, &remaining)) == 0 &&
- num_read == sz && remaining == 0 ) {
- } else if( rc == 0 && num_read == 0 && remaining == 0 ) {
- memset(value, 0, sz);
- } else {
- rc = rc ? rc : RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcCorrupt);
+ rc_t rc = KMDataNodeReadAsU64(node, value);
+ if ( rc != 0 )
+ {
+ if ( GetRCState ( rc ) == rcIncomplete && GetRCObject ( rc ) == rcTransfer )
+ {
+ * ( uint64_t* ) value = 0;
+ rc = 0;
+ }
}
return rc;
}
static
rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
- const int64_t spot_id, const uint32_t spot_len,
- const uint32_t bio_spot_len, const uint32_t cmp_spot_len)
+ const int64_t spot_id, const uint32_t spot_len,
+ const uint32_t bio_spot_len, const uint32_t cmp_spot_len)
{
rc_t rc = 0;
uint64_t u64;
int64_t i64;
- if( (rc = sra_meta_stats_node_read(g->node_spot_count, &u64, sizeof(u64))) == 0 ) {
+ if( (rc = sra_meta_stats_node_read(g->node_spot_count, &u64)) == 0 ) {
if( u64 + 1 < u64 ) {
rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
} else {
@@ -98,7 +99,7 @@ rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
rc = KMDataNodeWriteB64(g->node_spot_count, &u64);
}
}
- if( (rc = sra_meta_stats_node_read(g->node_base_count, &u64, sizeof(u64))) == 0 ) {
+ if( (rc = sra_meta_stats_node_read(g->node_base_count, &u64)) == 0 ) {
if( u64 + 1 < u64 ) {
rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
} else {
@@ -106,7 +107,7 @@ rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
rc = KMDataNodeWriteB64(g->node_base_count, &u64);
}
}
- if( (rc = sra_meta_stats_node_read(g->node_bio_base_count, &u64, sizeof(u64))) == 0 ) {
+ if( (rc = sra_meta_stats_node_read(g->node_bio_base_count, &u64)) == 0 ) {
if( u64 + bio_spot_len < u64 ) {
rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
} else {
@@ -115,7 +116,7 @@ rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
}
}
if( g->node_cmp_base_count != NULL ) {
- if( (rc = sra_meta_stats_node_read(g->node_cmp_base_count, &u64, sizeof(u64))) == 0 ) {
+ if( (rc = sra_meta_stats_node_read(g->node_cmp_base_count, &u64)) == 0 ) {
if( u64 + cmp_spot_len < u64 ) {
rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
} else {
@@ -124,14 +125,16 @@ rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
}
}
}
- if( (rc = sra_meta_stats_node_read(g->node_spot_max, &i64, sizeof(i64))) == 0 ) {
+ if( (rc = sra_meta_stats_node_read(g->node_spot_max, &i64)) == 0 ) {
if( i64 == 0 || i64 < spot_id ) {
- rc = KMDataNodeWriteB64(g->node_spot_max, &spot_id);
+ i64 = spot_id;
+ rc = KMDataNodeWriteB64(g->node_spot_max, &i64);
}
}
- if( (rc = sra_meta_stats_node_read(g->node_spot_min, &i64, sizeof(i64))) == 0 ) {
+ if( (rc = sra_meta_stats_node_read(g->node_spot_min, &i64)) == 0 ) {
if( i64 == 0 || i64 > spot_id ) {
- rc = KMDataNodeWriteB64(g->node_spot_min, &spot_id);
+ i64 = spot_id;
+ rc = KMDataNodeWriteB64(g->node_spot_min, &i64);
}
}
return rc;
@@ -151,9 +154,6 @@ rc_t sra_meta_stats_node_group_open(KMDataNode* parent, sra_meta_stats_node_grou
if( compressed ) {
rc = KMDataNodeOpenNodeUpdate(parent, &g->node_cmp_base_count, "CMP_BASE_COUNT");
}
- if( rc == 0 ) {
- rc = sra_meta_stats_node_group_update(g, 0, 0, 0, 0);
- }
}
return rc;
}
@@ -161,13 +161,15 @@ rc_t sra_meta_stats_node_group_open(KMDataNode* parent, sra_meta_stats_node_grou
static
void sra_meta_stats_node_group_release(sra_meta_stats_node_group* g)
{
- if( g ) {
+ if ( g != NULL )
+ {
KMDataNodeRelease(g->node_spot_count);
KMDataNodeRelease(g->node_base_count);
KMDataNodeRelease(g->node_bio_base_count);
KMDataNodeRelease(g->node_cmp_base_count);
KMDataNodeRelease(g->node_spot_min);
KMDataNodeRelease(g->node_spot_max);
+ memset ( g, 0, sizeof * g );
}
}
@@ -217,57 +219,120 @@ rc_t sra_meta_stats_make(sra_meta_stats_data** self, VTable* vtbl, bool has_spot
static
rc_t CC sra_meta_stats_update(sra_meta_stats_data* self,
- const int64_t spot_id, const uint32_t spot_len,
- const uint32_t bio_spot_len, const uint32_t cmp_spot_len,
- bool has_grp, const char* grp, uint64_t grp_len)
+ const int64_t spot_id, const uint32_t spot_len,
+ const uint32_t bio_spot_len, const uint32_t cmp_spot_len,
+ bool has_grp, const char* grp, uint64_t grp_len)
{
rc_t rc = 0;
+ const uint32_t max_grp_qty = 10000;
assert(self != NULL);
rc = sra_meta_stats_node_group_update(&self->table, spot_id, spot_len, bio_spot_len, cmp_spot_len);
- if( rc == 0 && has_grp ) {
+ if( has_grp && self->grp_qty <= max_grp_qty && rc == 0 )
+ {
/* an empty group is considered default */
if( grp_len == 0 || grp == NULL || grp[0] == '\0' ||
- (grp_len == 7 && strncasecmp("default", grp, grp_len) == 0 ) ) {
+ (grp_len == 7 && strncasecmp("default", grp, grp_len) == 0 ) )
+ {
rc = sra_meta_stats_node_group_update(&self->dflt_grp, spot_id, spot_len, bio_spot_len, cmp_spot_len);
- } else {
- if( self->last_grp_name == NULL ||
- self->last_grp_name_len != grp_len || strncmp(self->last_grp_name, grp, grp_len) != 0 ) {
- if( self->last_grp_name_sz < (grp_len + 1) ) {
- char* p = realloc(self->last_grp_name, grp_len + 2);
- if( p == NULL ) {
- rc = RC(rcVDB, rcFunction, rcConstructing, rcMemory, rcExhausted);
- } else {
- self->last_grp_name = p;
- self->last_grp_name_sz = grp_len + 2;
- }
+ }
+ else
+ {
+ size_t i;
+ KMDataNode* n;
+ const KMDataNode *cn;
+ bool new_group, unsafe;
+
+ /* look for cached node */
+ if ( self->last_grp_name != NULL &&
+ self->last_grp_name_len == grp_len &&
+ strncmp(self->last_grp_name, grp, grp_len) == 0 )
+ {
+ return sra_meta_stats_node_group_update(&self->last_grp, spot_id, spot_len, bio_spot_len, cmp_spot_len);
+ }
+
+ /* release cached group */
+ sra_meta_stats_node_group_release(&self->last_grp);
+
+ /* realloc cached name */
+ if ( self->last_grp_name == NULL || grp_len >= self->last_grp_name_sz )
+ {
+ char *p = realloc ( self -> last_grp_name, grp_len + 1 );
+ if ( p == NULL )
+ return RC ( rcXF, rcFunction, rcExecuting, rcMemory, rcExhausted );
+
+ self -> last_grp_name = p;
+ self -> last_grp_name_sz = grp_len + 1;
+ }
+
+ /* sanitize name */
+ for ( unsafe = false, i = 0; i < grp_len; ++ i )
+ {
+ if ( ( self -> last_grp_name [ i ] = grp [ i ] ) == '/' )
+ {
+ unsafe = true;
+ self -> last_grp_name [ i ] = '\\';
}
- if( rc == 0 ) {
- KMDataNode *ngrps;
- const char* safe = grp;
-
- char* p = self->last_grp_name;
- self->last_grp_name_len = grp_len;
- string_copy(self->last_grp_name, self->last_grp_name_sz, grp, grp_len);
- /* replace all '/' for '\' in spot_group */
- while( *p != '\0' && (p = strchr(p, '/')) != NULL ) {
- safe = self->last_grp_name;
- *p++ = '\\';
- }
- sra_meta_stats_node_group_release(&self->last_grp);
- if( (rc = KMetadataOpenNodeUpdate(self->meta, &ngrps, "STATS/SPOT_GROUP/%.*s", grp_len, safe)) == 0 ) {
- rc = sra_meta_stats_node_group_open(ngrps, &self->last_grp, self->compressed);
- if( rc == 0 && grp != safe ) {
- string_copy(self->last_grp_name, self->last_grp_name_sz, grp, grp_len);
- rc = KMDataNodeWriteAttr(ngrps, "name", self->last_grp_name);
+ }
+ self -> last_grp_name_len = i;
+ self -> last_grp_name [ i ] = 0;
+
+ /* look for new group */
+ new_group = true;
+ rc = KMetadataOpenNodeRead(self->meta, &cn, "STATS/SPOT_GROUP/%s", self->last_grp_name );
+ if ( rc == 0 )
+ {
+ new_group = false;
+ KMDataNodeRelease ( cn );
+ }
+
+ /* detect abusive quantity of nodes */
+ if ( new_group && ++self->grp_qty > max_grp_qty )
+ {
+ rc = KMetadataOpenNodeUpdate(self->meta, &n, "STATS");
+ if( rc == 0 )
+ {
+ sra_meta_stats_node_group_release(&self->dflt_grp);
+ KMDataNodeDropChild(n, "SPOT_GROUP");
+ KMDataNodeRelease(n);
+ free(self->last_grp_name);
+ self->last_grp_name = NULL;
+ }
+ return rc;
+ }
+
+ /* create new or cache existing group */
+ rc = KMetadataOpenNodeUpdate(self->meta, &n, "STATS/SPOT_GROUP/%s", self->last_grp_name );
+ if ( rc == 0 )
+ {
+ rc = sra_meta_stats_node_group_open(n, &self->last_grp, self->compressed);
+ if (rc == 0 && new_group) {
+ if (unsafe)
+ {
+ char value [ 512 ], *v = value;
+ if ( grp_len >= sizeof value )
+ v = malloc ( grp_len + 1 );
+ if ( v == NULL )
+ rc = RC ( rcXF, rcFunction, rcExecuting, rcMemory, rcExhausted );
+ else
+ {
+ rc = string_printf ( v, grp_len + 1, NULL, "%.*s", ( uint32_t ) grp_len, grp );
+ assert ( rc == 0 );
+ rc = KMDataNodeWriteAttr(n, "name", v);
+ if ( rc == 0 )
+ memcpy ( self->last_grp_name, grp, grp_len );
+ if ( v != value )
+ free ( v );
}
- KMDataNodeRelease(ngrps);
}
+ if ( rc == 0 )
+ rc = sra_meta_stats_node_group_update(&self->last_grp, 0, 0, 0, 0);
}
- }
- if( rc == 0 ) {
- rc = sra_meta_stats_node_group_update(&self->last_grp, spot_id, spot_len, bio_spot_len, cmp_spot_len);
+ KMDataNodeRelease(n);
+
+ if( rc == 0 )
+ rc = sra_meta_stats_node_group_update(&self->last_grp, spot_id, spot_len, bio_spot_len, cmp_spot_len);
}
}
}
diff --git a/libs/sraxf/stats_quality.c b/libs/sraxf/stats_quality.c
index 6a8fc1b..ddc42a3 100644
--- a/libs/sraxf/stats_quality.c
+++ b/libs/sraxf/stats_quality.c
@@ -99,12 +99,12 @@ rc_t CC phred_stats_trigger(void *data, const VXformInfo *info, int64_t row_id,
assert(self != NULL);
assert(argc == 1);
- assert(argv[0].u.data.base != NULL);
assert(argv[0].u.data.elem_bits == (sizeof(INSDC_quality_phred) * 8));
len = argv[0].u.data.elem_count;
if( len > 0 ) {
const INSDC_quality_phred* q = argv[0].u.data.base;
+ assert(argv[0].u.data.base != NULL);
q += argv[0].u.data.first_elem;
do {
self->count[q[--len]]++;
diff --git a/libs/sraxf/tokenize-spot_name-ion-torrent.c b/libs/sraxf/tokenize-spot_name-ion-torrent.c
index bf66ecd..b7f6e98 100644
--- a/libs/sraxf/tokenize-spot_name-ion-torrent.c
+++ b/libs/sraxf/tokenize-spot_name-ion-torrent.c
@@ -53,43 +53,68 @@ rc_t CC tokenize_spot_name_IonTorrent( void *self, const VXformInfo *info, int64
assert(rslt->elem_bits == sizeof(spot_name_tok[0]) * 8);
rslt->data->elem_bits = sizeof(spot_name_tok[0]) * 8;
- if( (rc = KDataBufferResize(rslt->data, EXPECTED_NUMBER_OF_TOKENS)) != 0 ) {
+ rc = KDataBufferResize(rslt->data, EXPECTED_NUMBER_OF_TOKENS);
+ if( rc != 0 )
return rc;
- }
spot_name_tok = rslt->data->base;
/* reverse line parse by format:
/^(.+):([0-9]+):([0-9]+)$/ = (name, x, x) = ($1, $2, $3)
*/
- name = &((const char *)argv[0].u.data.base)[argv[0].u.data.first_elem];
+ name = argv[0].u.data.base;
+ name += argv[0].u.data.first_elem;
end = name + argv[0].u.data.elem_count;
- while(rc == 0 && end > name && tok > 0 ) {
- size_t l = 0;
- while( isdigit(*--end) && end > name ) {
- l++;
- }
- if( *end != ':' || l == 0 ) {
- rc = RC(rcSRA, rcFormatter, rcReading, rcName, rcUnrecognized);
- } else {
- tok--;
- spot_name_tok[tok].s.token_type = types[tok];
- spot_name_tok[tok].s.position = end - name + 1;
- spot_name_tok[tok].s.length = l;
+ while ( end > name && tok > 0 )
+ {
+ const char *num_start, *num_end = end;
+
+ /* examine least significant digit */
+ -- end;
+ if ( ! isdigit ( * end ) )
+ break;
+
+ /* any digit 0-9 is okay as least significant */
+ num_start = end;
+
+ /* examine remaining digits */
+ while ( end > name )
+ {
+ /* require 0-9 to stay within parse */
+ -- end;
+ if ( ! isdigit ( * end ) )
+ break;
+
+ /* only reset numeric start if not 0 */
+ if ( * end != '0' )
+ num_start = end;
}
+
+ /* should have stopped on ':' */
+ if ( *end != ':' )
+ break;
+
+ /* we have a numeric token
+ due to oddities, exclude leading zeros from numeral */
+ -- tok;
+ spot_name_tok[tok].s.token_type = types[tok];
+ spot_name_tok[tok].s.position = num_start - name;
+ spot_name_tok[tok].s.length = num_end - num_start;
}
- if( rc == 0 && tok != 0 ) {
- rc = RC(rcSRA, rcFormatter, rcReading, rcName, rcInvalid);
- }
- if( rc != 0 ) {
+
+ /* if all tokens were seen, the parse was good */
+ if( tok == 0 )
+ rslt->elem_count = EXPECTED_NUMBER_OF_TOKENS;
+ else
+ {
+ /* otherwise, treat entire string as unrecognized */
spot_name_tok[0].s.token_type = nt_unrecognized;
spot_name_tok[0].s.position = 0;
spot_name_tok[0].s.length = argv[0].u.data.elem_count;
rslt->elem_count = 1;
- } else {
- rslt->elem_count = EXPECTED_NUMBER_OF_TOKENS;
}
+
return 0;
}
diff --git a/libs/sraxf/varloc.c b/libs/sraxf/varloc.c
old mode 100755
new mode 100644
diff --git a/libs/vdb/Makefile b/libs/vdb/Makefile
index 86ca6f7..22bfcdb 100644
--- a/libs/vdb/Makefile
+++ b/libs/vdb/Makefile
@@ -43,18 +43,16 @@ include $(TOP)/build/Makefile.env
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): vers-includes
@ $(MAKE_CMD) $(ILIBDIR)/$@
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): vers-includes
@ $(MAKE_CMD) $(LIBDIR)/$@
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
#-------------------------------------------------------------------------------
# std
@@ -66,6 +64,13 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/all $(TARGDIR)/std
#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
@@ -102,6 +107,7 @@ VDBCMN_SRC = \
linker-int \
linker-cmn \
database-cmn \
+ database-depend \
database-load \
table-cmn \
table-load \
@@ -130,7 +136,9 @@ VDBCMN_SRC = \
redimension \
index_project \
index_lookup \
- transpose
+ transpose \
+ delta_average \
+ report-vdb
VDB_SRC = \
$(VDBCMN_SRC) \
@@ -148,8 +156,10 @@ VDB_OBJ = \
VDB_LIB = \
-dkdb \
+ -dvfs \
-dkfg \
-dkfs \
+ -dkproc \
-dklib \
-dz
@@ -187,6 +197,7 @@ WVDB_OBJ = \
WVDB_LIB = \
-dwkdb \
+ -dvfs \
-dkfg \
-dkfs \
-dkproc \
diff --git a/libs/vdb/blob-priv.h b/libs/vdb/blob-priv.h
index c904365..625e979 100644
--- a/libs/vdb/blob-priv.h
+++ b/libs/vdb/blob-priv.h
@@ -31,6 +31,10 @@
#include <klib/defs.h>
#endif
+#ifndef _h_vdb_blob_
+#include <vdb/blob.h>
+#endif
+
#ifndef _h_klib_refcount_
#include <klib/refcount.h>
#endif
@@ -65,10 +69,29 @@ struct BlobHeaders;
struct VProduction;
struct VBlobPageMapCache;
+typedef struct PageMapProcessRequest{
+ struct PageMap *pm; /**** deserialized form **/
+ KDataBuffer data; /**** serialized form **/
+ uint32_t row_count;
+ uint64_t elem_count;
+ rc_t rc; /**** results **/
+
+ volatile enum {
+ ePMPR_STATE_NONE=0,
+ ePMPR_STATE_SERIALIZE_REQUESTED,
+ ePMPR_STATE_DESERIALIZE_REQUESTED,
+ ePMPR_STATE_SERIALIZE_DONE,
+ ePMPR_STATE_DESERIALIZE_DONE,
+ ePMPR_STATE_EXIT
+ } state; /**** request state **/
+ struct KLock *lock;
+ struct KCondition *cond;
+} PageMapProcessRequest;
+
+
/*--------------------------------------------------------------------------
* VBlob
*/
-typedef struct VBlob VBlob;
struct VBlob
{
int64_t start_id;
@@ -106,9 +129,15 @@ struct VBlobPageMapCache {
rc_t VBlobNew( VBlob **lhs, int64_t start_id, int64_t stop_id, const char *name );
+/* use inline-able addref and release on blobs
+ within the library for efficiency */
#if 1
#define VBlobAddRef( self ) \
- ( ( ( self ) == NULL ) ? 0 : ( atomic32_inc ( & ( self ) -> refcount ), 0 ) )
+ ( ( ( self ) == NULL ) ? \
+ 0 : ( atomic32_inc ( & ( self ) -> refcount ), 0 ) )
+#define VBlobRelease( self ) \
+ ( ( ( self ) == NULL || atomic32_read_and_add_gt ( & ( self ) -> refcount, -1, 1 ) > 1 ) ? \
+ 0 : VBlobRelease ( self ) )
#endif
#if _DEBUGGING
@@ -118,20 +147,12 @@ void VBlobCheckIntegrity ( const VBlob *self );
( void ) 0
#endif
-#ifdef VBlobAddRef
-rc_t VBlobReleaseLast ( VBlob *self );
-#define VBlobRelease( self ) \
- ( ( ( self ) == NULL || atomic32_read_and_add_gt ( & ( self ) -> refcount, -1, 1 ) > 1 ) ? 0 : VBlobReleaseLast ( self ) )
-#else
-rc_t VBlobAddRef( VBlob *self );
-rc_t VBlobRelease( VBlob *self );
-#endif
-
rc_t VBlobCreateFromData(
struct VBlob **lhs,
int64_t start_id, int64_t stop_id,
const KDataBuffer *src,
- uint32_t elem_bits
+ uint32_t elem_bits,
+ PageMapProcessRequest const *pmpr
);
rc_t VBlobCreateFromSingleRow(
@@ -140,6 +161,8 @@ rc_t VBlobCreateFromSingleRow(
const KDataBuffer *src,
VByteOrder byte_order
);
+/*** VBlob as a new array; meaning fixed len,data_run(..)=1 **/
+rc_t VBlobNewAsArray(struct VBlob **lhs, int64_t start_id, int64_t stop_id, uint32_t rowlen, uint32_t elem_bits);
rc_t VBlobSerialize( const VBlob *self, KDataBuffer *result );
@@ -151,6 +174,26 @@ rc_t VBlobAppend( struct VBlob *self, const struct VBlob *other );
/**** finds start_id in a blob and builds sub-blob for the number or repetitions ***/
rc_t VBlobSubblob( const struct VBlob *self,struct VBlob **sub, int64_t start_id );
+void VBlobPageMapOptimize( struct VBlob **self );
+
+#define LAST_BLOB_CACHE_SIZE 256
+
+
+typedef struct VBlobMRUCache VBlobMRUCache; /** forward declaration **/
+typedef struct VBlobMRUCacheCursorContext { /** to be used to pass cache context down to production level ***/
+ VBlobMRUCache * cache;
+ uint32_t col_idx;
+} VBlobMRUCacheCursorContext;
+
+VBlobMRUCache * VBlobMRUCacheMake(uint64_t capacity );
+void VBlobMRUCacheDestroy( VBlobMRUCache *self );
+const VBlob* VBlobMRUCacheFind(const VBlobMRUCache *cself, uint32_t col_idx, int64_t row_id);
+rc_t VBlobMRUCacheSave(const VBlobMRUCache *cself, uint32_t col_idx, const VBlob *blob);
+
+
+rc_t PageMapProcessGetPagemap(const PageMapProcessRequest *self,struct PageMap **pm);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/libs/vdb/blob.c b/libs/vdb/blob.c
index 58faa71..dbf63cc 100644
--- a/libs/vdb/blob.c
+++ b/libs/vdb/blob.c
@@ -36,16 +36,23 @@
#include <klib/defs.h>
#include <byteswap.h>
#include <klib/data-buffer.h>
+#include <klib/container.h>
#include <klib/vlen-encode.h>
+#include <kdb/btree.h>
#include <vdb/schema.h>
#include <vdb/xform.h>
#include <klib/log.h>
#include <sysalloc.h>
#include <bitstr.h>
+#include <kproc/timeout.h>
+#include <kproc/lock.h>
+#include <kproc/cond.h>
+
#include <assert.h>
#include <stdlib.h>
#include <string.h>
+#include <os-native.h>
#include <stdio.h> /* temp for debugging */
@@ -55,7 +62,7 @@ void VBlobCheckIntegrity ( const VBlob *self )
if ( self != NULL )
{
rc_t rc = KDataBufferCheckIntegrity ( & self -> data );
- if ( rc != 0 )
+ if ( rc != 0 )
{
fprintf ( stderr, "AAAAAH!\n" );
}
@@ -92,6 +99,24 @@ rc_t VBlobNew ( VBlob **lhs, int64_t start_id, int64_t stop_id, const char *name
}
return RC(rcVDB, rcBlob, rcConstructing, rcMemory, rcExhausted);
}
+rc_t VBlobNewAsArray(struct VBlob **lhs, int64_t start_id, int64_t stop_id, uint32_t rowlen, uint32_t elem_bits)
+{
+ VBlob *y;
+ rc_t rc = VBlobNew(&y,start_id,stop_id,NULL);
+ if(rc == 0){
+ rc = KDataBufferMake(&y->data,elem_bits,rowlen*(stop_id-start_id+1));
+ if(rc == 0){
+ rc=PageMapNewFixedRowLength(&y->pm,stop_id-start_id+1,rowlen);
+ if(rc == 0){
+ *lhs = y;
+ return 0;
+ }
+ PageMapRelease(y->pm);
+ }
+ VBlobRelease(y);
+ }
+ return rc;
+}
static rc_t VBlobDestroy( VBlob *that ) {
if (that->spmc) {
@@ -108,37 +133,6 @@ static rc_t VBlobDestroy( VBlob *that ) {
return 0;
}
-#ifdef VBlobAddRef
-rc_t VBlobReleaseLast ( VBlob *self )
-#else
-rc_t VBlobAddRef ( const VBlob *self )
-{
- if ( self != NULL )
- KRefcountAdd(&self->refcount, "VBlob");
- return 0;
-}
-
-rc_t VBlobRelease ( const VBlob *self )
-#endif
-{
- rc_t rc = 0;
-
- if ( self != 0 )
- {
- switch ( KRefcountDrop(&self->refcount, "VBlob") )
- {
- case krefWhack:
- return VBlobDestroy ( self );
- case krefNegative:
- rc = RC (rcVDB, rcBlob, rcDestroying, rcBlob, rcExcessive);
- PLOGERR ( klogInt, (klogInt, rc, "Released a blob $(B) with no more references",
- PLOG_P(self)));
- break;
- }
- }
- return rc;
-}
-
static rc_t decode_header_byte_v2(
uint8_t header_byte,
uint8_t *variant,
@@ -304,8 +298,8 @@ static rc_t encode_header_v1(
dst[0] = header_byte;
dst[1] = ( uint8_t ) row_length;
dst[2] = ( uint8_t ) ( row_length >> 8 );
- dst[2] = ( uint8_t ) ( row_length >> 16 );
- dst[3] = ( uint8_t ) ( row_length >> 24 );
+ dst[3] = ( uint8_t ) ( row_length >> 16 );
+ dst[4] = ( uint8_t ) ( row_length >> 24 );
}
return 0;
}
@@ -381,13 +375,81 @@ static rc_t encode_header_v2(
}
static
+rc_t PageMapProcessRequestLock(PageMapProcessRequest *self)
+{
+ rc_t rc=RC(rcVDB,rcPagemap, rcConstructing, rcSelf, rcNull);
+ if(self){
+ struct timeout_t tm;
+ TimeoutInit(&tm,0);
+ TimeoutPrepare(&tm);
+ /*** no plans to wait here the thread should be relased by now ****/
+ rc = KLockTimedAcquire(self->lock,&tm);
+ if(rc == 0){
+ if(self->state != ePMPR_STATE_NONE){ /*** thread is not released yet **/
+ assert(0); /** should not happen ***/
+ KLockUnlock(self->lock);
+ rc=RC(rcVDB, rcPagemap, rcConstructing, rcThread, rcBusy);
+ }
+ }
+ }
+ return rc;
+}
+
+static
+void PageMapProcessRequestLaunch(PageMapProcessRequest *self)
+{
+ KLockUnlock(self -> lock);
+ KConditionSignal ( self -> cond );
+}
+
+rc_t PageMapProcessGetPagemap(const PageMapProcessRequest *cself,struct PageMap **pm)
+{
+ rc_t rc=RC(rcVDB,rcPagemap, rcConstructing, rcSelf, rcNull);
+ if(cself){
+ PageMapProcessRequest *self=(PageMapProcessRequest*)cself;
+ if(self->lock == NULL){
+ /** NOT LOCKABLE **/
+ rc=0;
+ } else if((rc = KLockAcquire ( self->lock ))==0){
+CHECK_AGAIN:
+ switch(self->state){
+ case ePMPR_STATE_DESERIALIZE_REQUESTED:
+ /*fprintf(stderr,"Waiting for pagemap %p\n",cself->lock);*/
+ rc = KConditionWait ( self -> cond, self -> lock );
+ goto CHECK_AGAIN;
+ case ePMPR_STATE_DESERIALIZE_DONE:
+ assert(self->pm);
+ /*fprintf(stderr,"Pagemap %p Used R:%6d|DR:%d|LR:%d\n",self->lock, self->pm->row_count,self->pm->data_recs,self->pm->leng_recs);*/
+ *pm=self->pm;
+ self->pm = NULL;
+ KDataBufferWhack(&self->data);
+ self->row_count = 0;
+ self->state = ePMPR_STATE_NONE;
+ KLockUnlock(self -> lock);
+ KConditionSignal(self->cond);
+ break;
+ case ePMPR_STATE_NONE: /* not requested */
+ KLockUnlock(self -> lock);
+ rc = 0;
+ break;
+ default: /** should never happen ***/
+ assert(0);
+ KLockUnlock(self -> lock);
+ return RC(rcVDB, rcPagemap, rcConverting, rcParam, rcInvalid );
+ }
+ }
+ }
+ return rc;
+}
+
+
+static
rc_t VBlobCreateFromData_v2(
VBlob **lhs,
const KDataBuffer *data,
int64_t start_id, int64_t stop_id,
- uint32_t elem_bits
+ uint32_t elem_bits, PageMapProcessRequest *pmpr
) {
- const uint8_t *src = data->base;
uint64_t ssize = data->elem_count;
uint32_t hsize;
uint32_t msize;
@@ -396,8 +458,10 @@ rc_t VBlobCreateFromData_v2(
uint8_t adjust;
VBlob *y;
uint32_t data_offset;
+ uint32_t pagemap_offset;
bitsz_t databits;
uint32_t elem_count;
+ uint8_t *src = data->base;
rc_t rc;
rc = decode_header_v2(src, ssize, &hsize, &msize, &offset, &adjust, &byte_order);
@@ -407,8 +471,8 @@ rc_t VBlobCreateFromData_v2(
if (ssize < offset + hsize + msize)
return RC(rcVDB, rcBlob, rcConstructing, rcData, rcInsufficient);
- src += offset;
- data_offset = offset + hsize + msize;
+ pagemap_offset = offset + hsize;
+ data_offset = pagemap_offset + msize;
assert(data_offset <= ssize);
ssize -= data_offset;
databits = (ssize << 3) - adjust;
@@ -419,9 +483,23 @@ rc_t VBlobCreateFromData_v2(
TRACK_BLOB (VBlobNew, y);
if (rc == 0) {
if (hsize)
- rc = BlobHeadersCreateFromData(&y->headers, src, hsize);
+ rc = BlobHeadersCreateFromData(&y->headers, src+offset , hsize);
if (rc == 0) {
- rc = PageMapDeserialize(&y->pm, src + hsize, msize, BlobRowCount(y));
+ if (msize > 0) {
+ if(PageMapProcessRequestLock(pmpr)==0) {
+ KDataBufferSub(data, &pmpr->data, pagemap_offset, msize);
+ pmpr->row_count = BlobRowCount(y);
+ pmpr->state = ePMPR_STATE_DESERIALIZE_REQUESTED;
+ /*fprintf(stderr,"Pagemap %p Requested R:%6d|SZ:%d|%ld:%ld\n",pmpr->lock, pmpr->row_count,msize,start_id, stop_id);*/
+ PageMapProcessRequestLaunch(pmpr);
+ }
+ else {
+ KDataBuffer tdata;
+ KDataBufferSub(data, &tdata, pagemap_offset, msize);
+ rc = PageMapDeserialize(&y->pm, tdata.base,tdata.elem_count, BlobRowCount(y));
+ KDataBufferWhack(&tdata);
+ }
+ }
if (rc == 0) {
KDataBufferSub(data, &y->data, data_offset, ssize);
y->data.elem_bits = elem_bits;
@@ -461,19 +539,10 @@ rc_t VBlobCreateFromData_v1(
header = *src;
byte_order = header & 3; header >>= 2;
-#if 0
- /* v1 stores adjustment as the number of bits to subtract:
- stored_adjust = ( 8 - ( data_bits & 7 ) ) & 7;
- calculated_bits_from_blob_size = blob_bytes << 3;
- actual_blob_bits = calculated_bits_from_blob_size - stored_adjust; */
- adjust = (8 - (header & 7)) & 7;
-#else
adjust = header & 7;
-#endif
header >>= 3;
rls = header & 3;
-#if 1
/* convert rls from a code to an actual length */
rls = "\x01\x02\x04\x00" [ rls ];
@@ -499,48 +568,35 @@ rc_t VBlobCreateFromData_v1(
#endif
}
-#else
- switch (rls) {
- case 0:
- offset = 2;
- if (ssize < offset)
- return RC(rcVDB, rcBlob, rcConstructing, rcData, rcInsufficient);
- row_len = src[1];
- break;
- case 1:
- offset = 3;
- if (ssize < offset)
- return RC(rcVDB, rcBlob, rcConstructing, rcData, rcInsufficient);
- /* the result of these sub-expressions is a uint8_t
- and will not survive the shifts. casting to uint32_t
- on the very first access will fix the problem */
- row_len = (src[2] << 8) | src[1];
- break;
- case 2:
- offset = 5;
- if (ssize < offset)
- return RC(rcVDB, rcBlob, rcConstructing, rcData, rcInsufficient);
- /* see comment above */
- row_len = (((((src[4] << 8) | src[3]) << 8) | src[2]) << 8) | src[1];
- break;
- default:
- offset = 1;
- row_len = 1;
- break;
- }
-#endif
ssize -= offset;
databits = (ssize << 3) - adjust;
assert(databits % elem_bits == 0);
- /* TBD - row_len CAN be 0 in certain cases
- wait on legacy decoding function to extract
- row length, and then SET IT */
rc = VBlobNew(&y, start_id, stop_id, NULL);
TRACK_BLOB (VBLobNew, y);
if (rc == 0) {
+
+ uint64_t row_count = BlobRowCount ( y );
+
+ /* test for badly formed row-length */
+ if ( rls == 4 )
+ {
+ assert ( row_len != 0 );
+ if ( row_len * row_count != databits / elem_bits )
+ {
+ /* we can fix a length if we know the count */
+ if ( row_count != 0 )
+ row_len = ( databits / elem_bits ) / row_count;
+ else
+ {
+ /* rely on code to handle legacy blobs in prod-cmn.c:VFunctionProdCallByteswap */
+ row_len = 0;
+ }
+ }
+ }
+
if ( row_len != 0 )
- rc = PageMapNewFixedRowLength( &y->pm, BlobRowCount(y), (uint32_t)row_len );
+ rc = PageMapNewFixedRowLength( &y->pm, row_count, row_len );
if (rc == 0) {
KDataBufferSub(data, &y->data, offset, ssize);
y->data.elem_bits = elem_bits;
@@ -557,6 +613,258 @@ rc_t VBlobCreateFromData_v1(
return rc;
}
+static void VBlobOptimize_UnRLE_uint8_t(VBlob **vblobp)
+{
+ VBlob *sblob = *vblobp;
+ VBlob *vblob;
+ rc_t rc = VBlobNewAsArray(&vblob,sblob -> start_id, sblob -> stop_id,sblob->pm->length[0],sblob->data.elem_bits);
+ if( rc == 0){
+ uint32_t i,j;
+ uint8_t *src=sblob->data.base;
+ uint8_t *dst=vblob->data.base;
+ for(i=j=0;i<sblob->pm->data_recs;i++){
+ row_count_t data_len=sblob->pm->data_run[i];
+ while(data_len > 0){
+ assert(j < sblob->pm->row_count);
+ dst[j++] = src[i];
+ data_len--;
+ }
+ }
+ vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+ VBlobRelease(sblob);
+ (*vblobp) = vblob;
+ }
+}
+static void VBlobOptimize_UnRLE_uint16_t(VBlob **vblobp)
+{
+ VBlob *sblob = *vblobp;
+ VBlob *vblob;
+ rc_t rc = VBlobNewAsArray(&vblob,sblob -> start_id, sblob -> stop_id,sblob->pm->length[0],sblob->data.elem_bits);
+ if( rc == 0) {
+ uint32_t i,j;
+ uint16_t *src=sblob->data.base;
+ uint16_t *dst=vblob->data.base;
+ for(i=j=0;i<sblob->pm->data_recs;i++){
+ row_count_t data_len=sblob->pm->data_run[i];
+ while(data_len > 0){
+ assert(j < sblob->pm->row_count);
+ dst[j++] = src[i];
+ data_len--;
+ }
+ }
+ vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+ VBlobRelease(sblob);
+ (*vblobp) = vblob;
+ }
+}
+static void VBlobOptimize_UnRLE_uint32_t(VBlob **vblobp)
+{
+ VBlob *sblob = *vblobp;
+ VBlob *vblob;
+ rc_t rc = VBlobNewAsArray(&vblob,sblob -> start_id, sblob -> stop_id,sblob->pm->length[0],sblob->data.elem_bits);
+ if( rc == 0) {
+ uint32_t i,j;
+ uint32_t *src=sblob->data.base;
+ uint32_t *dst=vblob->data.base;
+ for(i=j=0;i<sblob->pm->data_recs;i++){
+ row_count_t data_len=sblob->pm->data_run[i];
+ while(data_len > 0){
+ assert(j < sblob->pm->row_count);
+ dst[j++] = src[i];
+ data_len--;
+ }
+ }
+ vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+ VBlobRelease(sblob);
+ (*vblobp) = vblob;
+ }
+}
+static void VBlobOptimize_UnRLE_uint64_t(VBlob **vblobp)
+{
+ VBlob *sblob = *vblobp;
+ VBlob *vblob;
+ rc_t rc = VBlobNewAsArray(&vblob,sblob -> start_id, sblob -> stop_id,sblob->pm->length[0],sblob->data.elem_bits);
+ if( rc == 0) {
+ uint32_t i,j;
+ uint64_t *src=sblob->data.base;
+ uint64_t *dst=vblob->data.base;
+ for(i=j=0;i<sblob->pm->data_recs;i++){
+ row_count_t data_len=sblob->pm->data_run[i];
+ while(data_len > 0){
+ assert(j < sblob->pm->row_count);
+ dst[j++] = src[i];
+ data_len--;
+ }
+ }
+ vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+ VBlobRelease(sblob);
+ (*vblobp) = vblob;
+ }
+}
+
+
+void VBlobPageMapOptimize ( VBlob **vblobp)
+{
+ VBlob *sblob = *vblobp;
+ PageMap *pm = sblob->pm;
+ if(pm->optimized != eBlobPageMapOptimizedNone) return; /* do not optimize previously optimized blobs */
+ pm->optimized = eBlobPageMapOptimizedFailed; /*** prevent future optimization if none of the algorithms succeeds ***/
+
+ if(pm->leng_recs == 1)
+ {
+ if( pm->length[0] * sblob->data.elem_bits == 8 /** 1 byte data ***/
+ && pm->data_recs < pm->row_count /** rle was used ***/
+ && pm->data_recs * 6 > pm->row_count){ /** but not super efficiently **/
+ /*printf("OPTIMIZATION: UnRLE(8)\n");*/
+ VBlobOptimize_UnRLE_uint8_t(vblobp);
+ return;
+ }
+ if( pm->length[0] * sblob->data.elem_bits == 16 /** 2 byte data ***/
+ && pm->data_recs < pm->row_count /** rle was used ***/
+ && pm->data_recs * 2 > pm->row_count){ /** but not super efficiently **/
+ /*printf("OPTIMIZATION: UnRLE(16)\n");*/
+ VBlobOptimize_UnRLE_uint16_t(vblobp);
+ return;
+ }
+ if( pm->length[0] * sblob->data.elem_bits == 32 /** 4 byte data ***/
+ && pm->data_recs < pm->row_count /** rle was used ***/
+ && pm->data_recs * 15 > pm->row_count * 10 ){ /** but not super efficiently **/
+ /*printf("OPTIMIZATION: UnRLE(32)\n");*/
+ VBlobOptimize_UnRLE_uint32_t(vblobp);
+ return;
+ }
+ if( pm->length[0] * sblob->data.elem_bits == 64 /** 8 byte data ***/
+ && pm->data_recs < pm->row_count /** rle was used ***/
+ && pm->data_recs * 11 > pm->row_count * 10 ){ /** but not super efficiently **/
+ /*printf("OPTIMIZATION: UnRLE(64)\n");*/
+ VBlobOptimize_UnRLE_uint64_t(vblobp);
+ return;
+ }
+
+ }
+
+ if(pm->row_count > 1024 && (sblob->data.elem_bits & 7) == 0)
+ {
+ elem_count_t minlen,maxlen;
+ elem_count_t elem_sz = sblob->data.elem_bits/8;
+ rc_t rc = PageMapRowLengthRange(pm, &minlen,&maxlen);
+ if( rc == 0 && maxlen*elem_sz > 2 ){
+ /******* TRY dictionary **/
+ int64_t limit_vocab_size;
+ uint32_t vocab_cnt=0;
+ KBTree *vocab_key2id = NULL;
+ bool valid_data_run = (pm->row_count != pm->data_recs);
+ uint32_t *data_offset = NULL;
+ KDataBuffer new_data;
+
+ rc=KDataBufferMake(&new_data,sblob->data.elem_bits,0); /** no allocation - shoulf not fail at all **/
+ assert(rc==0);
+/*******************
+* another formula
+* the savings should not be less than the waste on pointers into data vocabulary
+* it is assumed that the data offsets will cost us not more than 2 bytes on disk
+* the nasty left part is the average number of bytes in a row
+* limit_vocab_size = ((int64_t)sblob->data.elem_count*elem_sz - 2*pm->row_count) * sblob->data.elem_count / pm->data_recs / elem_sz;
+****************/
+ limit_vocab_size = ((int64_t)sblob->data.elem_count*elem_sz +(valid_data_run?pm->data_recs*2:0) - 2*pm->row_count)
+ * pm->data_recs / (int64_t)sblob->data.elem_count / elem_sz;
+
+
+ if(limit_vocab_size <=1 ){
+ rc = RC(rcVDB, rcBlob, rcConstructing, rcId, rcOutofrange);
+ }
+ if(limit_vocab_size > pm->data_recs/4){
+ limit_vocab_size = pm->data_recs/4; /* to limit the amount of work **/
+ }
+#define MAX_VOCAB_SIZE 2048
+ if(limit_vocab_size > MAX_VOCAB_SIZE) limit_vocab_size=MAX_VOCAB_SIZE;
+ if(rc == 0)
+ rc=KBTreeMakeUpdate(&vocab_key2id, NULL, 256*1024*1024,
+ false, kbtOpaqueKey,
+ minlen?minlen*elem_sz:1,maxlen*elem_sz, sizeof ( uint32_t ), NULL);
+ if(rc == 0){
+ uint32_t i,j;
+ uint8_t *src;
+ uint32_t dst_offset;
+ uint32_t vocab_arr[MAX_VOCAB_SIZE];
+ data_offset = malloc(pm->data_recs * sizeof(*data_offset));
+ if(data_offset == NULL){
+ rc = RC(rcVDB, rcBlob, rcConstructing, rcMemory, rcExhausted);
+ }
+ for(i=j=0,src = sblob->data.base,dst_offset=0;i<pm->leng_recs && rc == 0 ;i++){
+ row_count_t leng_run = pm->leng_run[i];
+ if(pm->length[i] == 0){/*** trivial case, can point anywhere - no vocabulary**/
+ for(;leng_run > 0;j++){
+ row_count_t data_run = valid_data_run?pm->data_run[j]:1;
+ assert(leng_run >= data_run);
+ data_offset[j] = 0; /** point to offset=0 **/
+ leng_run -=data_run;
+ }
+ } else for(;leng_run > 0 && rc == 0;j++){
+ row_count_t data_run = valid_data_run?pm->data_run[j]:1;
+ bool wasInserted;
+ uint64_t tmp_id = vocab_cnt;
+ assert(leng_run >= data_run);
+ leng_run -=data_run;
+ rc = KBTreeEntry(vocab_key2id, &tmp_id, &wasInserted, src, pm->length[i]*elem_sz);
+ if(rc == 0){
+ if(wasInserted){
+ vocab_cnt++;
+ if(vocab_cnt == limit_vocab_size) {
+ rc = RC(rcVDB, rcBlob, rcConstructing, rcId, rcTooBig);
+ } else {
+ vocab_arr[tmp_id] = dst_offset; /** save offset */
+ data_offset[j] = dst_offset;
+ rc = KDataBufferResize(&new_data,dst_offset+pm->length[i]);
+ if(rc == 0){
+ memcpy((uint8_t*)new_data.base+dst_offset*elem_sz,src,pm->length[i]*elem_sz);
+ dst_offset += pm->length[i];
+ }
+ }
+ } else {
+ assert(vocab_arr[tmp_id] <= dst_offset);
+ data_offset[j] = vocab_arr[tmp_id]; /** retrieve offset **/
+ }
+ }
+ src +=pm->length[i]*elem_sz;
+ assert(src - (uint8_t*)sblob->data.base <= sblob->data.elem_count * elem_sz);
+ }
+ }
+ if(rc == 0 ){
+ PageMap *new_pm;
+ /*printf("OPTIMIZATION LEVEL REACHED: vocab:%d,rows:%d,data_recs:%d\n",vocab_cnt ,pm->row_count,pm->data_recs);*/
+ rc=PageMapToRandomAccess(&new_pm,pm,data_offset);
+ if(rc == 0){
+ /** DONE ***/
+ VBlob *vblob;
+ rc=VBlobNew(&vblob, sblob->start_id, sblob->stop_id, NULL);
+ if(rc==0){
+ vblob->pm = new_pm;
+ vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+ vblob->data = new_data;
+ VBlobRelease(sblob);
+ *vblobp=vblob;
+ free(data_offset);
+ KBTreeRelease(vocab_key2id);
+ return;
+ }
+ PageMapRelease(new_pm);
+
+ }
+ KDataBufferWhack(&new_data);
+ } else {
+ /*printf("NO OPTIMIZATION: vocab:%d,rows:%d,data_recs:%d\n",vocab_cnt ,pm->row_count,pm->data_recs);*/
+ KDataBufferWhack(&new_data);
+ }
+ if(data_offset) free(data_offset);
+ if(vocab_key2id) KBTreeRelease ( vocab_key2id );
+ }
+ }
+ }
+
+}
+
+
rc_t VBlobSerialize ( const VBlob *self, KDataBuffer *result ) {
uint64_t sz;
rc_t rc;
@@ -631,7 +939,7 @@ rc_t VBlobSerialize ( const VBlob *self, KDataBuffer *result ) {
rc_t VBlobCreateFromData ( struct VBlob **lhs,
int64_t start_id, int64_t stop_id,
const KDataBuffer *src,
- uint32_t elem_bits )
+ uint32_t elem_bits , PageMapProcessRequest const *pmpr)
{
VBlob *y = NULL;
rc_t rc;
@@ -646,7 +954,7 @@ rc_t VBlobCreateFromData ( struct VBlob **lhs,
if ((((const uint8_t *)src->base)[0] & 0x80) == 0)
rc = VBlobCreateFromData_v1(&y, src, start_id, stop_id, elem_bits);
else
- rc = VBlobCreateFromData_v2(&y, src, start_id, stop_id, elem_bits);
+ rc = VBlobCreateFromData_v2(&y, src, start_id, stop_id, elem_bits, (PageMapProcessRequest*)pmpr);
if (rc == 0)
*lhs = y;
@@ -671,17 +979,6 @@ rc_t VBlobCreateFromSingleRow (
if (rc == 0) {
rc = KDataBufferSub(src, &y->data, 0, UINT64_MAX);
if (rc == 0) {
- switch (byte_order) {
- default:
- break;
- case vboNative:
- case vboNone:
-#if __BYTE_ORDER == __LITTLE_ENDIAN
- byte_order = vboLittleEndian;
-#else
- byte_order = vboBigEndian;
-#endif
- }
y->byte_order = byte_order;
*lhs = y;
return 0;
@@ -693,7 +990,7 @@ rc_t VBlobCreateFromSingleRow (
}
bool VBlobIsSingleRow( const struct VBlob *self ) {
- return self->pm && PageMapFastRowCount(self->pm) == BlobRowCount(self) ? true : false;
+ return (self->pm && self->pm->data_recs==1) ? true : false;
}
uint32_t VBlobFixedRowLength( const struct VBlob *self ) {
@@ -836,10 +1133,10 @@ rc_t VBlobSubblob( const struct VBlob *self,struct VBlob **sub, int64_t start_id
rc = KDataBufferSub(&self->data, &kd, offset, length);
if(rc == 0){
- int64_t stop_id;
+ int64_t stop_id;
- if(length > 0) stop_id = start_id + numrep - 1;
- else stop_id = start_id; /*** HACK - 0 sized data may be a sign that real data is somewhere else ***/
+ if(length > 0) stop_id = start_id + numrep - 1;
+ else stop_id = start_id; /*** HACK - 0 sized data may be a sign that real data is somewhere else ***/
rc = VBlobCreateFromSingleRow(sub, start_id, stop_id, &kd, self->byte_order);
KDataBufferWhack(&kd);
@@ -851,3 +1148,401 @@ rc_t VBlobSubblob( const struct VBlob *self,struct VBlob **sub, int64_t start_id
return rc;
}
+
+LIB_EXPORT rc_t CC VBlobIdRange ( const VBlob *self,
+ int64_t *first, uint64_t *count )
+{
+ if ( self == NULL )
+ { return RC ( rcVDB, rcBlob, rcAccessing, rcSelf, rcNull ); }
+
+ if ( first != NULL )
+ { *first = self -> start_id; }
+
+ if ( count != NULL )
+ { *count = self -> stop_id + 1 - self -> start_id; }
+
+ return 0;
+}
+
+LIB_EXPORT rc_t CC VBlobCellData ( const VBlob *self, int64_t row_id,
+ uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len )
+{
+ uint32_t dummyb;
+ uint32_t dummyr;
+ if ( boff == NULL )
+ { boff = & dummyb; }
+ if ( row_len == NULL )
+ { row_len = & dummyr; }
+
+ if ( self == NULL )
+ { return RC ( rcVDB, rcBlob, rcAccessing, rcSelf, rcNull ); }
+
+ if ( base == NULL )
+ { return RC ( rcVDB, rcBlob, rcAccessing, rcParam, rcNull ); }
+
+ *base = self -> data . base;
+
+ if ( elem_bits != NULL )
+ { *elem_bits = self -> data . elem_bits; }
+
+ *row_len = PageMapGetIdxRowInfo ( self -> pm,
+ ( uint32_t ) ( row_id - self -> start_id ), boff );
+
+ return 0;
+}
+
+/* a copy of VCursorRead() */
+LIB_EXPORT rc_t CC VBlobRead ( const VBlob *self, int64_t row_id,
+ uint32_t elem_bits, void *buffer, uint32_t blen, uint32_t *row_len )
+{
+ rc_t rc = 0;
+ const void* base = NULL;
+ uint32_t boff = 0;
+ uint32_t elem_size = 0;
+ uint64_t to_read = 0;
+ uint64_t bsize = 0;
+
+ if ( self == NULL )
+ { return RC ( rcVDB, rcBlob, rcReading, rcSelf, rcNull ); }
+
+ if ( buffer == NULL || row_len == NULL )
+ { return RC ( rcVDB, rcBlob, rcReading, rcParam, rcNull ); }
+
+ if ( elem_bits == 0 || ( elem_bits & 7 ) != 0 )
+ { return RC ( rcVDB, rcCursor, rcReading, rcParam, rcInvalid ); }
+
+ rc = VBlobCellData ( self, row_id, &elem_size, &base, &boff, row_len );
+ if ( rc != 0 )
+ { return rc; }
+ if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
+ { return RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent ); }
+ if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+ { return RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent ); }
+ if ( * row_len == 0 )
+ { return 0; }
+ if ( blen == 0 )
+ { return RC ( rcVDB, rcCursor, rcReading, rcBuffer, rcInsufficient ); }
+
+ to_read = * row_len * elem_size;
+ bsize = blen * elem_bits;
+
+ /* always return the required buffer size */
+ * row_len = ( uint32_t ) ( to_read / elem_bits );
+
+ /* detect buffer too small */
+ if ( to_read > bsize ) {
+ rc = RC ( rcVDB, rcCursor, rcReading, rcBuffer, rcInsufficient );
+ to_read = bsize;
+ }
+
+ /* copy out data up to limit */
+ assert ( boff == 0 );
+ memcpy ( buffer, base, ( size_t ) ( to_read >> 3 ) );
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC VBlobReadBits ( const VBlob *self, int64_t row_id,
+ uint32_t elem_bits, uint32_t start, void *buffer, uint32_t off,
+ uint32_t blen, uint32_t *num_read, uint32_t *remaining )
+{
+ rc_t rc = 0;
+ const void* base = NULL;
+ uint32_t boff = 0;
+ uint32_t elem_size = 0;
+ uint64_t to_read = 0;
+ uint64_t bsize = 0;
+ uint32_t row_len = 0;
+ uint32_t dummy;
+ if ( remaining == NULL )
+ { remaining = & dummy; }
+
+ if ( self == NULL )
+ { return RC ( rcVDB, rcBlob, rcReading, rcSelf, rcNull ); }
+
+ if ( buffer == NULL || num_read == NULL )
+ { return RC ( rcVDB, rcBlob, rcReading, rcParam, rcNull ); }
+
+ if ( elem_bits == 0 || ( elem_bits & 7 ) != 0 )
+ { return RC ( rcVDB, rcBlob, rcReading, rcParam, rcInvalid ); }
+
+ rc = VBlobCellData ( self, row_id, &elem_size, &base, &boff, &row_len );
+ if ( rc != 0 )
+ { return rc; }
+ if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
+ { return RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent ); }
+ if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+ { return RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent ); }
+ if ( row_len == 0 ) {
+ * num_read = * remaining = 0;
+ return 0;
+ }
+ if ( * num_read == 0 )
+ { return 0; }
+ to_read = row_len * elem_size;
+ bsize = blen * elem_bits;
+
+ if ( blen == 0 ) {
+ * num_read = 0;
+ * remaining = ( uint32_t ) ( to_read / elem_bits );
+ return 0;
+ }
+ bsize = blen * elem_size;
+ if ( to_read <= bsize )
+ { * remaining = 0; }
+ else {
+ * remaining = (uint32_t)( ( to_read - bsize ) / elem_bits );
+ to_read = bsize;
+ }
+ bitcpy ( buffer, off, base, boff, ( bitsz_t ) to_read );
+ * num_read = ( uint32_t ) ( to_read / elem_bits );
+
+ return rc;
+}
+
+#undef VBlobAddRef
+#undef VBlobRelease
+
+LIB_EXPORT rc_t CC VBlobAddRef ( const VBlob *self )
+{
+ if ( self != NULL )
+ KRefcountAdd(&self->refcount, "VBlob");
+ return 0;
+}
+
+LIB_EXPORT rc_t CC VBlobRelease ( const VBlob *self )
+{
+ rc_t rc = 0;
+
+ if ( self != 0 )
+ {
+ switch ( KRefcountDrop(&self->refcount, "VBlob") )
+ {
+ case krefWhack:
+ return VBlobDestroy ( (VBlob*) self );
+ case krefNegative:
+ rc = RC (rcVDB, rcBlob, rcDestroying, rcBlob, rcExcessive);
+ PLOGERR ( klogInt, (klogInt, rc, "Released a blob $(B) with no more references",
+ PLOG_P(self)));
+ break;
+ }
+ }
+ return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * VBlobCache
+ */
+typedef struct VBlobCache VBlobCache;
+struct VBlobCache
+{
+ BSTNode bn;
+ DLNode ln;
+ size_t size;
+ const VBlob *blob;
+ uint32_t col_idx;
+};
+
+static
+void CC VBlobCacheWhack ( BSTNode *n, void *ignore )
+{
+ VBlobCache *self = ( VBlobCache* ) n;
+ VBlobRelease ( ( VBlob* ) self -> blob );
+ free ( self );
+}
+
+static
+rc_t VBlobCacheMake ( VBlobCache **bcp, const VBlob *blob, uint32_t col_idx, size_t blob_size )
+{
+ VBlobCache *bc = malloc ( sizeof * bc );
+ if ( bc == NULL )
+ return RC ( rcVDB, rcCursor, rcReading, rcMemory, rcExhausted );
+
+ bc -> size = blob_size;
+ bc -> blob = blob;
+ VBlobAddRef(blob);
+ bc -> col_idx = col_idx;
+ * bcp = bc;
+ return 0;
+}
+typedef struct VBlobCacheKey VBlobCacheKey;
+struct VBlobCacheKey
+{
+ int64_t row_id;
+ uint32_t col_idx;
+};
+
+static
+int CC VBlobCacheCmp ( const void *a, const BSTNode *b )
+{
+ const VBlobCacheKey * key = a;
+ const VBlobCache * node = ( const VBlobCache* ) b;
+
+ if ( key -> col_idx != node -> col_idx )
+ return ( int ) key -> col_idx - ( int ) node -> col_idx;
+
+ if ( key -> row_id < node -> blob -> start_id )
+ return -1;
+ return key -> row_id > node -> blob -> stop_id;
+}
+
+static
+int CC VBlobCacheSort ( const BSTNode *a, const BSTNode *b )
+{
+ const VBlobCache * item = ( const VBlobCache* ) a;
+ const VBlobCache * node = ( const VBlobCache* ) b;
+
+ if ( item -> col_idx != node -> col_idx )
+ return ( int ) item -> col_idx - ( int ) node -> col_idx;
+
+ if ( item -> blob -> stop_id < node -> blob -> start_id )
+ return -1;
+ return item -> blob -> start_id > node -> blob -> stop_id;
+}
+
+struct VBlobMRUCache { /* read-only blob cache */
+ BSTree cache;
+ DLList lru;
+ size_t capacity;
+ size_t contents;
+ /* last blob cache */
+ VBlob *last[LAST_BLOB_CACHE_SIZE]; /** last 4 blob to be cached per given col_idx, limiting col_idx **/
+};
+
+
+VBlobMRUCache * VBlobMRUCacheMake(uint64_t capacity )
+{
+ VBlobMRUCache *self = NULL;
+ if(capacity > 0){
+ self = malloc(sizeof(*self));
+ if(self){
+ BSTreeInit ( & self -> cache);
+ DLListInit ( & self -> lru );
+ memset(self -> last,0,LAST_BLOB_CACHE_SIZE*sizeof(*self -> last));
+ self->capacity = capacity;
+ self->contents = 0;
+ }
+ }
+ return self;
+}
+
+void VBlobMRUCacheDestroy( VBlobMRUCache *self )
+{
+ if(self){
+ int i;
+ BSTreeWhack ( & self -> cache, VBlobCacheWhack, NULL );
+ DLListInit ( & self -> lru );
+ for(i=0;i<LAST_BLOB_CACHE_SIZE;i++){
+ if(self -> last[i]) {
+ VBlobRelease(self -> last[i]);
+ self->last[i] = NULL;
+ }
+ }
+ free(self);
+ }
+}
+
+const VBlob* VBlobMRUCacheFind(const VBlobMRUCache *cself, uint32_t col_idx, int64_t row_id)
+{
+ const VBlob* blob;
+ VBlobCache *bc;
+ VBlobCacheKey bck;
+ VBlobMRUCache *self = (VBlobMRUCache*)cself;
+
+ /* check MRU blob */
+ if(col_idx <= LAST_BLOB_CACHE_SIZE)
+ {
+ blob = self->last[col_idx-1];
+ if(blob && row_id >= blob->start_id && row_id <= blob->stop_id)
+ {
+ return blob;
+
+ }
+ }
+
+ /* check cache for entry */
+ bck . row_id = row_id;
+ bck . col_idx = col_idx;
+ bc = ( VBlobCache* ) BSTreeFind ( & self -> cache, & bck, VBlobCacheCmp );
+ if ( bc != NULL )
+ {
+ /* save in MRU */
+ if(col_idx <= LAST_BLOB_CACHE_SIZE)
+ {
+ if(self->last[col_idx-1])
+ VBlobRelease(self->last[col_idx-1]);
+ self->last[col_idx-1] = (VBlob*)bc->blob;
+ if(VBlobAddRef (self->last[col_idx-1])!=0)
+ return NULL;
+ }
+ /* maintain LRU */
+ DLListUnlink (&self->lru,&bc->ln);
+ DLListPushHead(&self->lru,&bc->ln);
+ /* ask column to read from blob */
+ return bc->blob;
+ }
+ return NULL;
+}
+rc_t VBlobMRUCacheSave(const VBlobMRUCache *cself, uint32_t col_idx, const VBlob *blob)
+{
+ rc_t rc;
+ size_t blob_size =sizeof(VBlobCache) + sizeof(VBlob);
+ VBlobCache *bc=NULL;
+ VBlobMRUCache *self = (VBlobMRUCache*)cself;
+
+ if(blob->no_cache) return 0;
+
+ blob_size += KDataBufferBytes(&blob->data);
+ if (blob->pm != NULL) {
+ blob_size +=
+ KDataBufferBytes(&blob->pm->cstorage)
+ + KDataBufferBytes(&blob->pm->dstorage)
+ + KDataBufferBytes(&blob->pm->istorage);
+ }
+ /** auto-raise capacity for large blob **/
+ if(blob_size > self -> capacity) self -> capacity = blob_size;
+
+ /* now cache the blob */
+ rc = VBlobCacheMake ( & bc, blob, col_idx, blob_size );
+ if ( rc == 0 ) {
+ /* attempt a unique insertion */
+ VBlobCache *existing;
+ rc = BSTreeInsertUnique ( &self -> cache, & bc -> bn, ( BSTNode** ) & existing, VBlobCacheSort );
+ if ( rc != 0 ){
+ VBlobCacheWhack ( & bc -> bn, NULL );
+ rc = 0;
+ } else {
+ /* remember as last used **/
+ if(col_idx <= LAST_BLOB_CACHE_SIZE)
+ {
+ if(self->last[col_idx-1])
+ VBlobRelease(self->last[col_idx-1]);
+ self->last[col_idx-1] = (VBlob*)bc->blob;
+ rc = VBlobAddRef (self->last[col_idx-1]);
+ if(rc != 0)
+ return rc;
+ }
+ /* perform accounting */
+ self -> contents += blob_size;
+ while ( self -> contents > self -> capacity )
+ {
+ /* get least recently used */
+ DLNode *last = DLListPopTail ( & self -> lru );
+ if ( last == NULL )
+ break;
+
+ /* drop blob */
+ existing = ( VBlobCache* ) ( ( char* ) last - sizeof existing -> bn );
+
+ BSTreeUnlink ( & self -> cache, & existing -> bn );
+ self -> contents -= existing -> size;
+ VBlobCacheWhack ( & existing -> bn, NULL );
+ }
+
+ /* insert at head of list */
+ DLListPushHead ( & self -> lru, & bc -> ln );
+ }
+ }
+ return 0;
+}
+
diff --git a/libs/vdb/blob.h b/libs/vdb/blob.h
index 28b44e4..860e7c8 100644
--- a/libs/vdb/blob.h
+++ b/libs/vdb/blob.h
@@ -45,13 +45,6 @@ enum VBlobVariant_t {
};
-#ifndef VBlobAddRef
-rc_t VBlobAddRef(const VBlob *self);
-#endif
-#ifndef VBlobRelease
-rc_t VBlobRelease(const VBlob *self);
-#endif
-
/* Write the row lengths for the rows from start_id thru stop_id, inclusive
*/
rc_t VBlobWritePageMap( VBlob *self, int64_t start_id, int64_t stop_id, const uint32_t row_length[] );
diff --git a/libs/vdb/column-cmn.c b/libs/vdb/column-cmn.c
index 17f96ea..ab7ef52 100644
--- a/libs/vdb/column-cmn.c
+++ b/libs/vdb/column-cmn.c
@@ -226,7 +226,7 @@ rc_t VColumnReadCachedBlob ( const VColumn *self, const VBlob *vblob, int64_t ro
}
rc_t VColumnReadBlob ( const VColumn *cself, const VBlob **vblobp, int64_t row_id,
- uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len )
+ uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len, VBlobMRUCacheCursorContext *cctx )
{
rc_t rc;
@@ -235,7 +235,7 @@ rc_t VColumnReadBlob ( const VColumn *cself, const VBlob **vblobp, int64_t row_i
else
{
VBlob *vblob;
- rc = VProductionReadBlob ( cself -> in, & vblob, row_id, 1 );
+ rc = VProductionReadBlob ( cself -> in, & vblob, row_id, 1, cctx );
if ( rc == 0 )
{
VColumn *self = ( VColumn* ) cself;
@@ -259,28 +259,32 @@ rc_t VColumnReadBlob ( const VColumn *cself, const VBlob **vblobp, int64_t row_i
}
rc_t VColumnRead ( const VColumn *cself, int64_t row_id,
- uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len )
+ uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len,
+ VBlob **vblob)
{
rc_t rc;
+ VBlob *dummy = NULL;
+ if (vblob == NULL)
+ { vblob = &dummy; }
if ( cself -> in == NULL )
rc = RC ( rcVDB, rcColumn, rcReading, rcColumn, rcNotOpen );
else
{
- VBlob *vblob;
- rc = VProductionReadBlob ( cself -> in, & vblob, row_id, 1 );
+ rc = VProductionReadBlob ( cself -> in, vblob, row_id, 1, NULL );
if ( rc == 0 )
{
VColumn *self = ( VColumn* ) cself;
- VColumnReadCachedBlob ( self, vblob, row_id, elem_bits, base, boff, row_len );
+ VColumnReadCachedBlob ( self, *vblob, row_id, elem_bits, base, boff, row_len );
#if USE_KURT
TRACK_BLOB ( VBlobRelease, self -> cache );
( void ) VBlobRelease ( self -> cache );
- self -> cache = vblob;
+ self -> cache = *vblob;
#else
- TRACK_BLOB ( VBlobRelease, vblob );
- ( void ) VBlobRelease ( vblob );
+ TRACK_BLOB ( VBlobRelease, *vblob );
+ ( void ) VBlobRelease ( *vblob );
+ *vblob = NULL;
#endif
}
}
diff --git a/libs/vdb/column-priv.h b/libs/vdb/column-priv.h
index b001cbf..5cb10a8 100644
--- a/libs/vdb/column-priv.h
+++ b/libs/vdb/column-priv.h
@@ -63,6 +63,7 @@ struct SColumn;
struct SExpression;
struct VProduction;
struct VBlob;
+struct VBlobMRUCacheCursorContext;
/*--------------------------------------------------------------------------
@@ -117,10 +118,11 @@ rc_t VColumnDatatype ( const VColumn *self,
struct VTypedecl *type, struct VTypedesc *desc );
rc_t VColumnRead ( const VColumn *self, int64_t row_id,
- uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len );
+ uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len,
+ struct VBlob **vblob );
rc_t VColumnReadBlob ( const VColumn *self, struct VBlob const **blob, int64_t row_id,
- uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len );
+ uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len, struct VBlobMRUCacheCursorContext *cctx);
rc_t VColumnReadCachedBlob ( const VColumn *self, struct VBlob const *blob, int64_t row_id,
uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len );
@@ -140,9 +142,6 @@ struct WColumn
/* half-closed id for page cutoff */
int64_t cutoff_id;
- /* manager - for mempool */
- struct VDBManager *mgr;
-
/* alternate read production */
struct VProduction *alt;
@@ -155,27 +154,30 @@ struct WColumn
/* output page */
struct VBlob *page;
+ /* default row data */
+ KDataBuffer dflt;
+
/* accumulators */
- DLList data, rowmap;
+ KDataBuffer data, rowmap;
- /* buffer offsets */
- bitsz_t data_off;
- size_t rowmap_off;
+ /* peak byte size history of data accumulator */
+ size_t data_peak_hist [ 16 ];
+ size_t data_peak;
- /* size to trigger page commit */
- size_t trigger;
+ /* total committed bits in buffer */
+ bitsz_t bits_in_buffer;
- /* default row data */
- KDataBuffer dflt;
+ /* number of uncommitted bits in buffer */
+ bitsz_t row_len;
+
+ /* size ( in bytes ) to trigger page commit */
+ size_t trigger;
/* number of committed rows in buffer */
size_t num_rows;
- /* number of committed elements in buffer */
- size_t num_elems;
-
- /* number of uncommitted elements in buffer */
- size_t row_len;
+ /* peak history index */
+ uint8_t peak_hist_idx;
/* true if there is a default value */
bool have_dflt;
@@ -183,23 +185,19 @@ struct WColumn
/* set upon any successful write */
bool row_written;
+ /* set if the last row written was default */
+ bool dflt_last;
+
/* set upon row commit */
bool row_committed;
};
/* WColumnRowMap
- * NB - size must be an integral power of 2
- * 8, 16, 32 are okay, but not 24.
- *
- * in particular, sizeof VDBMem.page % sizeof WColumnRowMap == 0 || aaaaah!
*/
typedef struct WColumnRowMap WColumnRowMap;
struct WColumnRowMap
{
-#if _DEBUGGING
int64_t start_id;
- int64_t align;
-#endif
uint64_t len, cnt;
};
@@ -245,6 +243,14 @@ bool CC WColumnRowDefaults ( void *self, void *rc );
*/
bool CC WColumnCommitRow ( void *self, void *end_id );
+/* RepeatRow
+ * go into the last row entry
+ * extend the count by count
+ * data points to this structure
+ */
+typedef struct { int64_t end_id; uint64_t count; } WColumnRepeatRowData;
+void CC WColumnRepeatRow ( void *self, void *data );
+
/* CloseRow
* discards uncommitted data
* update state
diff --git a/libs/vdb/cursor-cmn.c b/libs/vdb/cursor-cmn.c
index 2891de6..f42149a 100644
--- a/libs/vdb/cursor-cmn.c
+++ b/libs/vdb/cursor-cmn.c
@@ -45,6 +45,7 @@
#undef KONST
#undef SKONST
#include "blob-priv.h"
+#include "page-map.h"
#include <vdb/cursor.h>
#include <vdb/table.h>
@@ -62,20 +63,26 @@
#include <os-native.h>
#include <sysalloc.h>
+#include <kproc/lock.h>
+#include <kproc/cond.h>
+#include <kproc/thread.h>
+
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
-#if _DEBUGGING
-#include <fmtdef.h>
-#endif
-
#define PERMIT_POST_OPEN_ADD 1
#define DISABLE_READ_CACHE 0
+/* normally false
+ can be set for certain applications using VDBManagerDisablePagemapThread
+*/
+static bool s_disable_pagemap_thread;
+
/*--------------------------------------------------------------------------
* VCursorCache
@@ -191,77 +198,45 @@ int CC NamedParamNodeComp ( const BSTNode *A, const BSTNode *B )
return StringOrderNoNullCheck ( & a -> name, & b -> name );
}
-
-
/*--------------------------------------------------------------------------
- * VBlobCache
+ * LinkedCursorNode
*/
-typedef struct VBlobCache VBlobCache;
-struct VBlobCache
+
+typedef struct LinkedCursorNode LinkedCursorNode;
+struct LinkedCursorNode
{
- BSTNode bn;
- DLNode ln;
- size_t size;
- const VBlob *blob;
- uint32_t col_idx;
+ BSTNode n;
+ char tbl[64];
+ VCursor *curs;
};
static
-void CC VBlobCacheWhack ( BSTNode *n, void *ignore )
+void CC LinkedCursorNodeWhack ( BSTNode *n, void *ignore )
{
- VBlobCache *self = ( VBlobCache* ) n;
- VBlobRelease ( ( VBlob* ) self -> blob );
+ LinkedCursorNode *self = ( LinkedCursorNode* ) n;
+ VCursorRelease ( self -> curs );
free ( self );
}
static
-rc_t VBlobCacheMake ( VBlobCache **bcp, const VBlob *blob, uint32_t col_idx )
+int CC LinkedCursorComp ( const void *item, const BSTNode *n )
{
- VBlobCache *bc = malloc ( sizeof * bc );
- if ( bc == NULL )
- return RC ( rcVDB, rcCursor, rcReading, rcMemory, rcExhausted );
+ const char *tbl = item;
+ const LinkedCursorNode *node = ( const LinkedCursorNode* ) n;
- bc -> size = BlobBufferBytes ( blob );
- bc -> blob = blob;
- bc -> col_idx = col_idx;
- * bcp = bc;
- return 0;
+ return strncmp ( tbl, node -> tbl, sizeof(node -> tbl) );
}
-typedef struct VBlobCacheKey VBlobCacheKey;
-struct VBlobCacheKey
-{
- int64_t row_id;
- uint32_t col_idx;
-};
-
static
-int CC VBlobCacheCmp ( const void *a, const BSTNode *b )
+int CC LinkedCursorNodeComp ( const BSTNode *A, const BSTNode *B )
{
- const VBlobCacheKey * key = a;
- const VBlobCache * node = ( const VBlobCache* ) b;
+ const LinkedCursorNode *a = (const LinkedCursorNode *) A;
+ const LinkedCursorNode *b = (const LinkedCursorNode *) B;
- if ( key -> col_idx != node -> col_idx )
- return ( int ) key -> col_idx - ( int ) node -> col_idx;
-
- if ( key -> row_id < node -> blob -> start_id )
- return -1;
- return key -> row_id > node -> blob -> stop_id;
+ return strncmp ( a -> tbl, b -> tbl,sizeof(a->tbl) );
}
-static
-int CC VBlobCacheSort ( const BSTNode *a, const BSTNode *b )
-{
- const VBlobCache * item = ( const VBlobCache* ) a;
- const VBlobCache * node = ( const VBlobCache* ) b;
-
- if ( item -> col_idx != node -> col_idx )
- return ( int ) item -> col_idx - ( int ) node -> col_idx;
- if ( item -> blob -> stop_id < node -> blob -> start_id )
- return -1;
- return item -> blob -> start_id > node -> blob -> stop_id;
-}
/*--------------------------------------------------------------------------
* VCursor
@@ -279,14 +254,11 @@ static void CC VCursorVColumnWhack_checked( void *item, void *data )
rc_t VCursorDestroy ( VCursor *self )
{
KRefcountWhack ( & self -> refcount, "VCursor" );
-
- BSTreeWhack ( & self -> blob_cache, VBlobCacheWhack, NULL );
- DLListInit ( & self -> blob_lru );
-
+ VBlobMRUCacheDestroy ( self->blob_mru_cache);
if ( self -> user_whack != NULL )
( * self -> user_whack ) ( self -> user );
-
BSTreeWhack ( & self -> named_params, NamedParamNodeWhack, NULL );
+ BSTreeWhack ( & self -> linked_cursors, LinkedCursorNodeWhack, NULL );
VCursorCacheWhack ( & self -> col, NULL, NULL );
VCursorCacheWhack ( & self -> phys, VPhysicalWhack, NULL );
VCursorCacheWhack ( & self -> prod, NULL, NULL );
@@ -352,7 +324,7 @@ rc_t VCursorMake ( VCursor **cursp, const VTable *tbl )
/* create a structure */
curs = calloc ( 1, sizeof * curs );
- if ( tbl == NULL )
+ if ( curs == NULL )
rc = RC ( rcVDB, rcCursor, rcConstructing, rcMemory, rcExhausted );
else
{
@@ -373,9 +345,8 @@ rc_t VCursorMake ( VCursor **cursp, const VTable *tbl )
VectorInit ( & curs -> trig, 0, 64 );
KRefcountInit ( & curs -> refcount, 1, "VCursor", "make", "vcurs" );
curs -> state = vcConstruct;
-#if PERMIT_POST_OPEN_ADD
- curs -> permit_post_open_add = true;
-#endif
+ curs -> permit_add_column = true;
+ curs -> suspend_triggers = false;
* cursp = curs;
return 0;
}
@@ -493,7 +464,8 @@ rc_t VCursorSupplementStatic ( const KSymTable *tbl, const VCursor *self )
rc = VSchemaResolveTypedecl ( self -> schema, & td, typedecl );
if ( rc == 0 )
rc = VCursorSupplementName ( tbl, self -> stbl, & td, name );
- rc = 0; /*** don't care if name is not in the schema ***/
+
+ rc = 0; /*** don't care if name is not in the schema ***/
}
@@ -533,48 +505,61 @@ rc_t VCursorSupplementSchema ( const VCursor *self )
* "capacity" [ IN ] - the maximum bytes to cache on the cursor before
* dropping least recently used blobs
*/
+static rc_t VTableCreateCachedCursorReadImpl(const VTable *self, const VCursor **cursp, size_t capacity,bool create_pagemap_thread);
LIB_EXPORT rc_t CC VTableCreateCachedCursorRead ( const VTable *self,
const VCursor **cursp, size_t capacity )
{
+ return VTableCreateCachedCursorReadImpl(self,cursp,capacity,true);
+}
+/**
+*** VTableCreateCursorReadInternal is only visible in vdb and needed for schema resolutions
+****/
+rc_t VTableCreateCursorReadInternal(const VTable *self, const VCursor **cursp)
+{
+ return VTableCreateCachedCursorReadImpl(self,cursp,0,false);
+}
+static rc_t VTableCreateCachedCursorReadImpl ( const VTable *self,
+ const VCursor **cursp, size_t capacity, bool create_pagemap_thread )
+{
rc_t rc;
-
#if DISABLE_READ_CACHE
capacity = 0;
#endif
-
if ( cursp == NULL )
rc = RC ( rcVDB, rcTable, rcOpening, rcParam, rcNull );
- else
- {
+ else {
if ( self == NULL )
rc = RC ( rcVDB, rcTable, rcOpening, rcSelf, rcNull );
- else
- {
+ else {
VCursor *curs;
-
#if LAZY_OPEN_COL_NODE
if ( self -> col_node == NULL )
KMetadataOpenNodeRead ( self -> meta, & ( ( VTable* ) self ) -> col_node, "col" );
#endif
rc = VCursorMake ( & curs, self );
- if ( rc == 0 )
- {
- curs -> blob_cache_capacity = capacity;
+ if ( rc == 0 ) {
+ curs -> blob_mru_cache = VBlobMRUCacheMake(capacity);
curs -> read_only = true;
rc = VCursorSupplementSchema ( curs );
+
+#if 0
+ if(create_pagemap_thread && capacity > 0 && rc == 0 )
+ rc = VCursorLaunchPagemapThread ( curs );
+#endif
if ( rc == 0 )
{
+ if(capacity > 0)
+ curs->launch_cnt = 5;
+ else
+ curs->launch_cnt=200;
* cursp = curs;
return 0;
}
-
VCursorRelease ( curs );
}
}
-
* cursp = NULL;
}
-
return rc;
}
@@ -614,6 +599,25 @@ LIB_EXPORT rc_t CC VCursorPermitPostOpenAdd ( const VCursor *cself )
return rc;
}
+/* SuspendTriggers
+ * blocks resolution of schema-based triggers
+ *
+ */
+LIB_EXPORT rc_t CC VCursorSuspendTriggers ( const VCursor *cself )
+{
+ rc_t rc;
+ VCursor *self = ( VCursor* ) cself;
+
+ if ( self == NULL )
+ rc = RC ( rcVDB, rcCursor, rcUpdating, rcSelf, rcNull );
+ else
+ {
+ self -> suspend_triggers = true;
+ rc = 0;
+ }
+
+ return rc;
+}
/* AddSColumn
@@ -749,7 +753,7 @@ LIB_EXPORT rc_t CC VCursorVAddColumn ( const VCursor *cself,
rc = RC ( rcVDB, rcCursor, rcUpdating, rcName, rcEmpty );
else if ( self -> state == vcFailed )
rc = RC ( rcVDB, rcCursor, rcUpdating, rcCursor, rcInvalid );
- else if ( self -> state != vcConstruct && ! self -> permit_post_open_add )
+ else if ( self -> state != vcConstruct && ! self -> permit_add_column )
rc = RC ( rcVDB, rcCursor, rcUpdating, rcCursor, rcLocked );
else
{
@@ -764,7 +768,7 @@ LIB_EXPORT rc_t CC VCursorVAddColumn ( const VCursor *cself,
return rc;
}
- if ( ! self -> permit_post_open_add )
+ if ( ! self -> permit_add_column )
{
PLOGERR ( klogErr, ( klogErr, rc, "failed to add column '$(spec)' to cursor",
"spec=%s", colspec ));
@@ -985,21 +989,24 @@ struct VCursorIdRangeData
static
bool CC column_id_range ( void *item, void *data )
{
- int64_t first, last;
- VCursorIdRangeData *pb = data;
+ if ( ( size_t ) item > 8 )
+ {
+ int64_t first, last;
+ VCursorIdRangeData *pb = data;
- rc_t rc = VColumnIdRange ( ( const void* ) item, & first, & last );
+ rc_t rc = VColumnIdRange ( ( const void* ) item, & first, & last );
- if ( GetRCState ( rc ) == rcEmpty )
- return false;
+ if ( GetRCState ( rc ) == rcEmpty )
+ return false;
- if ( ( pb -> rc = rc ) != 0 )
- return true;
+ if ( ( pb -> rc = rc ) != 0 )
+ return true;
- if ( first < pb -> first )
- pb -> first = first;
- if ( last > pb -> last )
- pb -> last = last;
+ if ( first < pb -> first )
+ pb -> first = first;
+ if ( last > pb -> last )
+ pb -> last = last;
+ }
return false;
}
@@ -1119,54 +1126,58 @@ struct VProdResolveData
static
bool CC VCursorResolveColumn ( void *item, void *data )
{
- void *ignore;
- VCursor *self;
+ if ( item != NULL )
+ {
+ void *ignore;
+ VCursor *self;
- VColumn *col = item;
- VProdResolveData *pb = data;
- SColumn *scol = ( SColumn* ) col -> scol;
+ VColumn *col = item;
+ VProdResolveData *pb = data;
+ SColumn *scol = ( SColumn* ) col -> scol;
- VProduction *src = NULL;
- pb -> rc = VProdResolveColumnRoot ( & pb -> pr, & src, scol );
- if ( pb -> rc == 0 )
- {
- if ( src > FAILED_PRODUCTION )
+ VProduction *src = NULL;
+ pb -> rc = VProdResolveColumnRoot ( & pb -> pr, & src, scol );
+ if ( pb -> rc == 0 )
{
- /* repair for incomplete implicit column decl */
- if ( scol -> td . type_id == 0 )
- scol -> td = src -> fd . td;
+ if ( src > FAILED_PRODUCTION )
+ {
+ /* repair for incomplete implicit column decl */
+ if ( scol -> td . type_id == 0 )
+ scol -> td = src -> fd . td;
- return false;
- }
+ return false;
+ }
- pb -> rc = RC ( rcVDB, rcCursor, rcOpening, rcColumn, rcUndefined );
- }
+ pb -> rc = RC ( rcVDB, rcCursor, rcOpening, rcColumn, rcUndefined );
+ }
- /* check for tolerance */
- self = pb -> pr . curs;
- if ( ! pb -> pr . ignore_column_errors )
- {
- if ( ! self -> permit_post_open_add )
+ /* check for tolerance */
+ self = pb -> pr . curs;
+ if ( ! pb -> pr . ignore_column_errors )
{
- PLOGERR ( klogErr, ( klogErr, pb -> rc, "failed to resolve column '$(name)' idx '$(idx)'",
- "name=%.*s,idx=%u"
- , ( int ) scol -> name -> name . size
- , scol -> name -> name . addr
- , col -> ord ));
+ if ( ! self -> permit_post_open_add )
+ {
+ PLOGERR ( klogErr, ( klogErr, pb -> rc, "failed to resolve column '$(name)' idx '$(idx)'",
+ "name=%.*s,idx=%u"
+ , ( int ) scol -> name -> name . size
+ , scol -> name -> name . addr
+ , col -> ord ));
+ }
+
+ return true;
}
- return true;
- }
+ /* remove from row and cache */
+ VectorSwap ( & self -> row, col -> ord, NULL, & ignore );
+ VCursorCacheSwap ( & self -> col, & scol -> cid, NULL, & ignore );
- /* remove from row and cache */
- VectorSwap ( & self -> row, col -> ord, NULL, & ignore );
- VCursorCacheSwap ( & self -> col, & scol -> cid, NULL, & ignore );
+ /* dump the VColumn */
+ VColumnWhack ( col, NULL );
- /* dump the VColumn */
- VColumnWhack ( col, NULL );
+ /* return no-error */
+ pb -> rc = 0;
+ }
- /* return no-error */
- pb -> rc = 0;
return false;
}
@@ -1360,84 +1371,152 @@ rc_t VCursorCloseRowRead ( VCursor *self )
*/
static
rc_t VCursorReadColumnDirectInt ( const VCursor *cself, int64_t row_id, uint32_t col_idx,
- uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len )
+ uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len,
+ const VBlob **rslt )
{
- rc_t rc;
- VBlobCache *bc;
- VBlobCacheKey bck;
- const VBlob *blob;
+ rc_t rc,rc_cache=0;
const VColumn *col;
- size_t sz_cache_overhead=sizeof(VBlobCache) + sizeof(VBlob);
+ const VBlob *blob;
col = ( const void* ) VectorGet ( & cself -> row, col_idx );
if ( col == NULL )
return RC ( rcVDB, rcCursor, rcReading, rcColumn, rcInvalid );
/* 2.0 behavior if not caching */
- if ( cself -> blob_cache_capacity == 0 )
- return VColumnRead ( col, row_id, elem_bits, base, boff, row_len );
-
- /* check cache for entry */
- bck . row_id = row_id;
- bck . col_idx = col_idx;
- bc = ( VBlobCache* ) BSTreeFind ( & cself -> blob_cache, & bck, VBlobCacheCmp );
- if ( bc != NULL )
- {
+ if ( cself -> blob_mru_cache == NULL )
+ return VColumnRead ( col, row_id, elem_bits, base, boff, row_len, (VBlob**) rslt );
+
+ /* check MRU blob */
+ blob = VBlobMRUCacheFind(cself->blob_mru_cache,col_idx,row_id);
+ if(blob){
/* ask column to read from blob */
- return VColumnReadCachedBlob ( col, bc -> blob, bck . row_id, elem_bits, base, boff, row_len );
+ assert(row_id >= blob->start_id && row_id <= blob->stop_id);
+ return VColumnReadCachedBlob ( col, blob, row_id, elem_bits, base, boff, row_len);
}
-
- /* ask column to produce a blob to be cached */
- rc = VColumnReadBlob ( col, & blob, bck . row_id, elem_bits, base, boff, row_len );
- if ( rc != 0 || blob == NULL )
+ { /* ask column to produce a blob to be cached */
+ VBlobMRUCacheCursorContext cctx;
+ cctx.cache=cself -> blob_mru_cache;
+ cctx.col_idx = col_idx;
+ rc = VColumnReadBlob(col,&blob,row_id,elem_bits,base,boff,row_len,&cctx);
+ }
+ if ( rc != 0 || blob == NULL ){
+ if(rslt) *rslt = NULL;
return rc;
-
- if( blob -> no_cache
- || BlobBufferBytes(blob) <= 128 /*** blob overhead is ~ 200 overhead ****/
- || BlobBufferBytes(blob) > cself->blob_cache_capacity ){
- VBlobRelease ( ( VBlob* ) blob );
- return 0;
}
+ if(blob->stop_id > blob->start_id + 4)
+ rc_cache=VBlobMRUCacheSave(cself->blob_mru_cache, col_idx, blob);
+ if(rslt==NULL){ /** user does not care about the blob ***/
+ if( rc_cache == 0){
+ VBlobRelease((VBlob*)blob);
+ } /** else the memory will leak **/
+ } else {
+ *rslt=blob;
+ }
+ return 0;
+}
- /* now cache the blob */
- rc = VBlobCacheMake ( & bc, blob, col_idx );
- if ( rc != 0 )
- VBlobRelease ( ( VBlob* ) blob );
+/* GetBlob
+ * retrieve a blob of data containing the current row id
+ * GetBlobDirect
+ * retrieve a blob of data containing the requested row id
+ *
+ * "blob" [ OUT ] - return parameter for a new reference
+ * to VBlob containing requested cell. NB - must be released
+ * via VBlobRelease when no longer needed.
+ *
+ * "row_id" [ IN ] - allows ReadDirect random access to any cell
+ * in column
+ *
+ * "col_idx" [ IN ] - index of column to be read, returned by "AddColumn"
+ */
+LIB_EXPORT rc_t CC VCursorGetBlob ( const VCursor *self,
+ const VBlob **blob, uint32_t col_idx )
+{
+ rc_t rc;
+
+ if ( blob == NULL )
+ rc = RC ( rcVDB, rcCursor, rcAccessing, rcParam, rcNull );
else
{
- /* mutable cache object */
- VCursor *self = ( VCursor* ) cself;
-
- /* attempt an unique insertion */
- VBlobCache *existing;
- rc = BSTreeInsertUnique ( & self -> blob_cache,
- & bc -> bn, ( BSTNode** ) & existing, VBlobCacheSort );
- if ( rc != 0 )
- VBlobCacheWhack ( & bc -> bn, NULL );
+ if ( self == NULL )
+ rc = RC ( rcVDB, rcCursor, rcAccessing, rcSelf, rcNull );
+ else if ( ! self -> read_only )
+ rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcWriteonly );
else
{
- /* perform accounting */
- self -> blob_cache_contents += bc -> size + sz_cache_overhead;
- while ( self -> blob_cache_contents > self -> blob_cache_capacity )
- {
- /* get least recently used */
- DLNode *last = DLListPopTail ( & self -> blob_lru );
- if ( last == NULL )
- break;
+ const void *base;
+ uint32_t elem_bits, boff, row_len;
- /* drop blob */
- existing = ( VBlobCache* ) ( ( char* ) last - sizeof existing -> bn );
- BSTreeUnlink ( & self -> blob_cache, & existing -> bn );
- self -> blob_cache_contents -= existing -> size + sz_cache_overhead;
- VBlobCacheWhack ( & existing -> bn, NULL );
+ switch ( self -> state )
+ {
+ case vcConstruct:
+ rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcNotOpen );
+ break;
+ case vcReady:
+ rc = RC ( rcVDB, rcCursor, rcReading, rcRow, rcNotOpen );
+ break;
+ case vcRowOpen:
+ rc = VCursorReadColumnDirectInt
+ ( self, self -> row_id, col_idx, &elem_bits, &base, &boff, &row_len, blob );
+ if ( rc == 0 )
+ {
+ rc = VBlobAddRef ( ( VBlob* ) *blob );
+ if ( rc == 0 )
+ return 0;
+ }
+ break;
+ default:
+ rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcInvalid );
}
-
- /* insert at head of list */
- DLListPushHead ( & self -> blob_lru, & bc -> ln );
}
+
+ * blob = NULL;
}
+ return rc;
+}
- return 0;
+LIB_EXPORT rc_t CC VCursorGetBlobDirect ( const VCursor *self,
+ const VBlob **blob, int64_t row_id, uint32_t col_idx )
+{
+ rc_t rc;
+
+ if ( blob == NULL )
+ rc = RC ( rcVDB, rcCursor, rcAccessing, rcParam, rcNull );
+ else
+ {
+ if ( self == NULL )
+ rc = RC ( rcVDB, rcCursor, rcAccessing, rcSelf, rcNull );
+ else if ( ! self -> read_only )
+ rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcWriteonly );
+ else
+ {
+ const void *base;
+ uint32_t elem_bits, boff, row_len;
+
+ switch ( self -> state )
+ {
+ case vcConstruct:
+ rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcNotOpen );
+ break;
+ case vcReady:
+ case vcRowOpen:
+ rc = VCursorReadColumnDirectInt
+ ( self, row_id, col_idx, &elem_bits, &base, &boff, &row_len, blob );
+ if ( rc == 0 )
+ {
+ rc = VBlobAddRef ( ( VBlob* ) *blob );
+ if ( rc == 0 )
+ return 0;
+ }
+ break;
+ default:
+ rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcInvalid );
+ }
+ }
+
+ * blob = NULL;
+ }
+ return rc;
}
static
@@ -1458,7 +1537,8 @@ rc_t VCursorReadColumnDirect ( const VCursor *self, int64_t row_id, uint32_t col
return RC ( rcVDB, rcCursor, rcReading, rcCursor, rcInvalid );
}
- return VCursorReadColumnDirectInt ( self, row_id, col_idx, elem_bits, base, boff, row_len );
+ return VCursorReadColumnDirectInt
+ ( self, row_id, col_idx, elem_bits, base, boff, row_len, NULL );
}
@@ -1469,17 +1549,32 @@ rc_t VCursorReadColumn ( const VCursor *self, uint32_t col_idx,
if ( ! self -> read_only )
return RC ( rcVDB, rcCursor, rcReading, rcCursor, rcWriteonly );
- if ( self -> state != vcRowOpen ) switch ( self -> state )
+ switch ( self -> state )
{
case vcConstruct:
return RC ( rcVDB, rcCursor, rcReading, rcCursor, rcNotOpen );
case vcReady:
return RC ( rcVDB, rcCursor, rcReading, rcRow, rcNotOpen );
+ case vcRowOpen:
+ break;
default:
return RC ( rcVDB, rcCursor, rcReading, rcCursor, rcInvalid );
}
- return VCursorReadColumnDirectInt ( self, self -> row_id, col_idx, elem_bits, base, boff, row_len );
+ return VCursorReadColumnDirectInt
+ ( self, self -> row_id, col_idx, elem_bits, base, boff, row_len, NULL );
+}
+
+static __inline__
+bool bad_elem_bits ( uint32_t elem_size, uint32_t elem_bits )
+{
+ if ( elem_size != elem_bits )
+ {
+ if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
+ return true;
+ return ( elem_size % elem_bits != 0 );
+ }
+ return false;
}
LIB_EXPORT rc_t CC VCursorRead ( const VCursor *self, uint32_t col_idx,
@@ -1502,9 +1597,7 @@ LIB_EXPORT rc_t CC VCursorRead ( const VCursor *self, uint32_t col_idx,
& base, & boff, row_len );
if ( rc == 0 )
{
- if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
- rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
- else if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+ if ( bad_elem_bits ( elem_size, elem_bits ) )
rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
else if ( * row_len != 0 )
{
@@ -1563,9 +1656,7 @@ LIB_EXPORT rc_t CC VCursorReadDirect ( const VCursor *self, int64_t row_id, uint
& elem_size, & base, & boff, row_len );
if ( rc == 0 )
{
- if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
- rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
- else if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+ if ( bad_elem_bits ( elem_size, elem_bits ) )
rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
else if ( * row_len != 0 )
{
@@ -1654,13 +1745,13 @@ LIB_EXPORT rc_t CC VCursorReadBits ( const VCursor *self, uint32_t col_idx,
& base, & boff, num_read );
if ( rc == 0 )
{
- if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
- rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
- else if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+ if ( bad_elem_bits ( elem_size, elem_bits ) )
rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
else if ( * num_read != 0 )
{
uint64_t to_read = * num_read * elem_size;
+ uint64_t doff = start * elem_bits;
+ to_read = to_read > doff ? to_read - doff : 0;
if ( blen == 0 )
{
* num_read = 0;
@@ -1680,7 +1771,7 @@ LIB_EXPORT rc_t CC VCursorReadBits ( const VCursor *self, uint32_t col_idx,
* remaining = (uint32_t)( ( to_read - bsize ) / elem_bits );
to_read = bsize;
}
- bitcpy ( buffer, off, base, boff, ( bitsz_t ) to_read );
+ bitcpy ( buffer, off, base, boff + doff, ( bitsz_t ) to_read );
* num_read = ( uint32_t ) ( to_read / elem_bits );
return 0;
}
@@ -1721,13 +1812,13 @@ LIB_EXPORT rc_t CC VCursorReadBitsDirect ( const VCursor *self, int64_t row_id,
& elem_size, & base, & boff, num_read );
if ( rc == 0 )
{
- if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
- rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
- else if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+ if ( bad_elem_bits ( elem_size, elem_bits ) )
rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
else if ( * num_read != 0 )
{
uint64_t to_read = * num_read * elem_size;
+ uint64_t doff = start * elem_bits;
+ to_read = to_read > doff ? to_read - doff : 0;
if ( blen == 0 )
{
* num_read = 0;
@@ -1747,7 +1838,7 @@ LIB_EXPORT rc_t CC VCursorReadBitsDirect ( const VCursor *self, int64_t row_id,
* remaining = (uint32_t)( ( to_read - bsize ) / elem_bits );
to_read = bsize;
}
- bitcpy ( buffer, off, base, boff, ( bitsz_t ) to_read );
+ bitcpy ( buffer, off, base, boff + doff, ( bitsz_t ) to_read );
* num_read = ( uint32_t ) ( to_read / elem_bits );
return 0;
}
@@ -2002,6 +2093,51 @@ LIB_EXPORT rc_t CC VCursorSetUserData ( const VCursor *cself,
return 0;
}
+LIB_EXPORT rc_t CC VCursorLinkedCursorGet(const VCursor *cself,const char *tbl,VCursor const **curs)
+{
+ LinkedCursorNode *node;
+ VCursor *self = (VCursor *)cself;
+
+ if(cself == NULL)
+ return RC(rcVDB, rcCursor, rcAccessing, rcSelf, rcNull);
+ if(tbl == NULL)
+ return RC(rcVDB, rcCursor, rcAccessing, rcName, rcNull);
+ if(tbl[0] == '\0')
+ return RC(rcVDB, rcCursor, rcAccessing, rcName, rcEmpty);
+ node = (LinkedCursorNode *)BSTreeFind(&self->linked_cursors, tbl, LinkedCursorComp);
+ if (node == NULL)
+ return RC(rcVDB, rcCursor, rcAccessing, rcName, rcNotFound);
+
+ *curs = node->curs;
+ return 0;
+}
+LIB_EXPORT rc_t CC VCursorLinkedCursorSet(const VCursor *cself,const char *tbl,VCursor const *curs)
+{
+ LinkedCursorNode *node;
+ VCursor *self = (VCursor *)cself;
+ rc_t rc;
+
+ if(cself == NULL)
+ return RC(rcVDB, rcCursor, rcAccessing, rcSelf, rcNull);
+ if(tbl == NULL)
+ return RC(rcVDB, rcCursor, rcAccessing, rcName, rcNull);
+ if(tbl[0] == '\0')
+ return RC(rcVDB, rcCursor, rcAccessing, rcName, rcEmpty);
+
+ node = malloc(sizeof(*node));
+ if (node == NULL)
+ return RC(rcVDB, rcCursor, rcAccessing, rcMemory, rcExhausted);
+ strncpy(node->tbl,tbl,sizeof(node->tbl));
+ node->curs=(VCursor*)curs;
+ rc = BSTreeInsertUnique(&self->linked_cursors, (BSTNode *)node, NULL, LinkedCursorNodeComp);
+ if (rc)
+ free(node);
+ else
+ VCursorAddRef(curs);
+ return rc;
+}
+
+
/* private */
LIB_EXPORT rc_t CC VCursorParamsGet( struct VCursorParams const *cself,
const char *Name, KDataBuffer **value )
@@ -2144,3 +2280,125 @@ LIB_EXPORT struct VSchema const * CC VCursorGetSchema ( struct VCursor const *se
{
return self ? self->schema : NULL;
}
+
+
+static rc_t run_pagemap_thread ( const KThread *t, void *data )
+{
+ rc_t rc;
+ VCursor *self = data;
+ /* acquire lock */
+ MTCURSOR_DBG (( "run_pagemap_thread: acquiring lock\n" ));
+ while((rc = KLockAcquire ( self -> pmpr.lock ))==0){
+CHECK_AGAIN:
+ switch(self->pmpr.state){
+ case ePMPR_STATE_NONE: /* wait for new request */
+ case ePMPR_STATE_SERIALIZE_DONE: /* wait for result pickup **/
+ case ePMPR_STATE_DESERIALIZE_DONE: /* wait for result pickup **/
+ MTCURSOR_DBG (( "run_pagemap_thread: waiting for new request\n" ));
+ rc = KConditionWait ( self -> pmpr.cond, self -> pmpr.lock );
+ goto CHECK_AGAIN;
+ case ePMPR_STATE_EXIT: /** exit requested ***/
+ MTCURSOR_DBG (( "run_pagemap_thread: exit by request\n" ));
+ KLockUnlock(self -> pmpr.lock);
+ return 0;
+ case ePMPR_STATE_DESERIALIZE_REQUESTED:
+ MTCURSOR_DBG (( "run_pagemap_thread: request to deserialize\n" ));
+ self->pmpr.rc = PageMapDeserialize(&self->pmpr.pm,self->pmpr.data.base,self->pmpr.data.elem_count,self->pmpr.row_count);
+ if(self->pmpr.rc == 0){
+ self->pmpr.rc=PageMapExpandFull(self->pmpr.pm);
+ /*self->pmpr.rc=PageMapExpand(self->pmpr.pm,self->pmpr.row_count<2048?self->pmpr.row_count-1:2048);*/
+ assert(self->pmpr.rc == 0);
+ }
+ self->pmpr.state = ePMPR_STATE_DESERIALIZE_DONE;
+ /*fprintf(stderr,"Pagemap %p Done R:%6d|DR:%d|LR:%d\n",self->pmpr.lock, self->pmpr.pm->row_count,self->pmpr.pm->data_recs,self->pmpr.pm->leng_recs);*/
+ KLockUnlock(self -> pmpr.lock);
+ KConditionSignal ( self -> pmpr.cond );
+ break;
+ case ePMPR_STATE_SERIALIZE_REQUESTED:
+ MTCURSOR_DBG (( "run_pagemap_thread: request to serialize\n" ));
+ self->pmpr.rc = PageMapSerialize(self->pmpr.pm,&self->pmpr.data,0,&self->pmpr.elem_count);
+ self->pmpr.state = ePMPR_STATE_SERIALIZE_DONE;
+ KLockUnlock(self -> pmpr.lock);
+ KConditionSignal ( self -> pmpr.cond );
+ break;
+ default:
+ assert(0);
+ KLockUnlock(self -> pmpr.lock);
+ return RC(rcVDB, rcPagemap, rcConverting, rcParam, rcInvalid );
+
+ }
+ }
+ MTCURSOR_DBG (( "run_pagemap_thread: exit\n" ));
+ return rc;
+}
+
+rc_t VCursorLaunchPagemapThread(VCursor *curs)
+{
+ rc_t rc;
+
+ assert ( curs != NULL );
+ curs -> pagemap_thread = NULL; /** if fails - will not use **/
+
+ if ( s_disable_pagemap_thread )
+ return RC ( rcVDB, rcCursor, rcExecuting, rcThread, rcNotAvailable );
+
+ rc = KLockMake ( & curs -> pmpr.lock );
+ if(rc == 0)
+ {
+ rc = KConditionMake ( & curs -> pmpr.cond );
+ if(rc == 0)
+ {
+ rc = KThreadMake ( & curs -> pagemap_thread, run_pagemap_thread, curs );
+ if ( rc == 0 )
+ return 0;
+
+ KConditionRelease ( curs -> pmpr . cond );
+ curs -> pmpr . cond = NULL;
+ }
+
+ KLockRelease ( curs -> pmpr . lock );
+ curs -> pmpr . lock = NULL;
+ }
+
+ return rc;
+}
+
+rc_t VCursorTerminatePagemapThread(VCursor *self)
+{
+ rc_t rc=0;
+
+ assert ( self != NULL );
+
+ if(self -> pagemap_thread != NULL)
+ {
+ rc = KLockAcquire ( self -> pmpr.lock );
+ if ( rc == 0 )
+ {
+ self -> pmpr.state = ePMPR_STATE_EXIT;
+ KConditionSignal ( self -> pmpr.cond );
+ KLockUnlock ( self -> pmpr.lock );
+ }
+ KThreadWait ( self -> pagemap_thread, NULL );
+ }
+
+ KThreadRelease ( self -> pagemap_thread );
+ KConditionRelease ( self -> pmpr.cond );
+ KLockRelease ( self -> pmpr.lock );
+
+ self -> pagemap_thread = NULL;
+ self -> pmpr . cond = NULL;
+ self -> pmpr . lock = NULL;
+
+ return rc;
+}
+
+/* DisablePagemapThread
+ * this can cause difficulties for some clients
+ */
+LIB_EXPORT rc_t CC VDBManagerDisablePagemapThread ( struct VDBManager const *self )
+{
+ if ( self == NULL )
+ return RC ( rcVDB, rcMgr, rcUpdating, rcSelf, rcNull );
+ s_disable_pagemap_thread = true;
+ return 0;
+}
diff --git a/libs/vdb/cursor-priv.h b/libs/vdb/cursor-priv.h
index b0e3da8..ec91798 100644
--- a/libs/vdb/cursor-priv.h
+++ b/libs/vdb/cursor-priv.h
@@ -55,6 +55,11 @@
extern "C" {
#endif
+#include "blob-priv.h"
+
+#define MTCURSOR_DBG( msg ) DBGMSG ( DBG_VDB, DBG_FLAG ( DBG_VDB_MTCURSOR ), msg )
+
+
#define VCURSOR_WRITE_MODES_SUPPORTED 0
@@ -71,6 +76,7 @@ extern "C" {
struct KLock;
struct KCondition;
struct KThread;
+struct KNamelist;
struct KDlset;
struct VTable;
struct VCtxId;
@@ -141,6 +147,7 @@ enum
vfExit
};
+
struct VCursor
{
/* row id */
@@ -160,22 +167,26 @@ struct VCursor
struct STable SKONST *stbl;
/* background flush thread objects */
+ int64_t launch_cnt;
struct KThread *flush_thread;
struct KLock *flush_lock;
struct KCondition *flush_cond;
+ /* background pagemap conversion objects */
+ struct KThread *pagemap_thread;
+ PageMapProcessRequest pmpr;
+
/* user data */
void *user;
void ( CC * user_whack ) ( void *data );
/* external named cursor parameters */
BSTree named_params;
+ /* linked cursors */
+ BSTree linked_cursors;
/* read-only blob cache */
- BSTree blob_cache;
- DLList blob_lru;
- size_t blob_cache_capacity;
- size_t blob_cache_contents;
+ VBlobMRUCache *blob_mru_cache;
/* external row of VColumn* by ord ( owned ) */
Vector row;
@@ -185,6 +196,7 @@ struct VCursor
/* physical columns by cid ( owned ) */
VCursorCache phys;
+ uint32_t phys_cnt;
/* productions by cid ( not-owned ) */
VCursorCache prod;
@@ -208,7 +220,10 @@ struct VCursor
bool read_only;
/* support for sradb-v1 API */
+ bool permit_add_column;
bool permit_post_open_add;
+ /* support suspension of schema-declared triggers **/
+ bool suspend_triggers;
};
@@ -216,6 +231,8 @@ struct VCursor
*/
rc_t VCursorMake ( struct VCursor **cursp, struct VTable const *tbl );
+rc_t VTableCreateCursorWriteInt ( struct VTable *self, struct VCursor **cursp, KCreateMode mode, bool create_thread );
+
/* Whack
* Destroy
*/
@@ -245,6 +262,11 @@ rc_t VCursorSetRowIdRead ( struct VCursor *self, int64_t row_id );
/* Open
*/
rc_t VCursorOpenRead ( struct VCursor *self, struct KDlset const *libs );
+/**
+*** VTableCreateCursorReadInternal is only visible in vdb and needed for schema resolutions
+****/
+rc_t VTableCreateCursorReadInternal(const struct VTable *self, const struct VCursor **cursp);
+
/* ListReadableColumns
* performs an insert of '*' to cursor
@@ -261,6 +283,7 @@ rc_t VCursorListReadableColumns ( struct VCursor *self, BSTree *columns );
* populates BTree with VColumnRef objects
*/
rc_t VCursorListWritableColumns ( struct VCursor *self, BSTree *columns );
+rc_t VCursorListSeededWritableColumns ( struct VCursor *self, BSTree *columns, struct KNamelist const *seed );
/* PostOpenAdd
* handle opening of a column after the cursor is opened
@@ -275,6 +298,11 @@ rc_t VCursorOpenRowRead ( struct VCursor *self );
rc_t VCursorCloseRowRead ( struct VCursor *self );
+/** pagemap supporting thread **/
+rc_t VCursorLaunchPagemapThread(struct VCursor *self);
+rc_t VCursorTerminatePagemapThread(struct VCursor *self);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/libs/vdb/cursor.c b/libs/vdb/cursor.c
index 6fd8525..4786fef 100644
--- a/libs/vdb/cursor.c
+++ b/libs/vdb/cursor.c
@@ -61,6 +61,7 @@
*/
rc_t VCursorWhack ( VCursor *self )
{
+ VCursorTerminatePagemapThread(self);
return VCursorDestroy ( self );
}
@@ -113,7 +114,7 @@ LIB_EXPORT rc_t CC VCursorOpen ( const VCursor *cself )
{
/* permit empty open when run from sradb */
if ( GetRCState ( rc ) == rcEmpty && GetRCObject ( rc ) == rcRange &&
- self -> permit_post_open_add && VectorLength ( & self -> row ) == 0 )
+ self -> permit_add_column && VectorLength ( & self -> row ) == 0 )
{
rc = 0;
}
diff --git a/libs/vdb/database-cmn.c b/libs/vdb/database-cmn.c
index e952264..83eaf98 100644
--- a/libs/vdb/database-cmn.c
+++ b/libs/vdb/database-cmn.c
@@ -364,6 +364,31 @@ LIB_EXPORT bool CC VDatabaseLocked ( const VDatabase *self )
}
+/* IsAlias
+ * returns true if object name is an alias
+ * returns path to fundamental name if it was aliased
+ *
+ * "type" [ IN ] - a KDBPathType
+ * valid values are kptDatabase, kptTable and kptIndex
+ *
+ * "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ * for fundamenta object name if "alias" is not a fundamental name,
+ *
+ * "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC VDatabaseIsAlias ( const VDatabase *self, uint32_t type,
+ char *resolved, size_t rsize, const char *name )
+{
+ if ( self != NULL )
+ return KDatabaseIsAlias ( self -> kdb, type, resolved, rsize, name );
+
+ if ( resolved != NULL && rsize != 0 )
+ * resolved = 0;
+
+ return false;
+}
+
+
/* Writable
* returns 0 if object is writable
* or a reason why if not
diff --git a/libs/vdb/database-depend.c b/libs/vdb/database-depend.c
new file mode 100644
index 0000000..0b66975
--- /dev/null
+++ b/libs/vdb/database-depend.c
@@ -0,0 +1,1715 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/* /netmnt/traces04/sra3/SRR/000379/SRR388696
+ /netmnt/traces04/sra4/SRR/000345/SRR353827 */
+
+#include <vdb/extern.h>
+
+#include <vdb/cursor.h>
+#include <vdb/table.h>
+#include <vdb/database.h>
+#include <vdb/dependencies.h>
+
+#include <kdb/manager.h>
+
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h>
+
+#include <kfg/config.h>
+
+#include <klib/container.h>
+#include <klib/printf.h> /* string_printf */
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include "cursor-priv.h"
+
+/* missing macros/function from klib/rc.h
+ */
+#define GetRCSTATE( rc ) \
+ ( ( rc ) & 0x00003FFF )
+#define RC_STATE( obj, state) \
+ ( rc_t ) ( ( ( rc_t ) ( obj ) << 6 ) | \
+ ( ( rc_t ) ( state ) ) )
+
+#include <assert.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+static bool OLD = true;
+
+typedef struct {
+ /* deprecated way */
+ char ref[PATH_MAX + 1];
+
+ /* new way */
+ const String *local;
+ const String *remote;
+ const String *cache;
+
+ uint32_t count;
+ rc_t rc;
+} Resolved;
+typedef struct {
+ BSTNode n;
+
+ bool circular;
+ char* name;
+ uint32_t readLen;
+ char* seqId;
+ bool local;
+
+ Resolved resolved;
+} RefNode;
+static rc_t _ResolvedRelease(Resolved *self) {
+ rc_t rc = 0;
+
+ assert(self);
+
+ free((void*)self->local);
+ free((void*)self->cache);
+ free((void*)self->remote);
+
+ memset(self, 0, sizeof *self);
+
+ return rc;
+}
+
+
+static void CC bstWhack( BSTNode* n, void* ignore )
+{
+ RefNode* sn = (RefNode*) n;
+
+ assert( sn );
+
+ free( sn->name );
+
+ free( sn->seqId );
+
+ _ResolvedRelease( &sn->resolved );
+
+ memset( sn, 0, sizeof *sn );
+
+ free( sn );
+}
+
+static
+int CC bstCmpBySeqId(const void* item, const BSTNode* n)
+{
+ const char* s1 = item;
+ const RefNode* sn = (const RefNode*) n;
+
+ assert(s1 && sn);
+
+ return strcmp(s1, sn->seqId);
+}
+
+static int CC bstCmpByRemote(const void* item, const BSTNode* n)
+{
+ const String* s1 = item;
+ const RefNode* sn = (const RefNode*) n;
+
+ assert(sn);
+
+ if (s1 == NULL) {
+ return sn->resolved.remote != NULL;
+ }
+ else {
+ int min = s1->size < sn->resolved.remote->size
+ ? s1->size : sn->resolved.remote->size;
+ return strncmp(s1->addr, sn->resolved.remote->addr, min);
+ }
+}
+
+static
+int CC bstSortBySeqId(const BSTNode* item, const BSTNode* n)
+{
+ const RefNode* sn = (const RefNode*) item;
+
+ return bstCmpBySeqId(sn->seqId, n);
+}
+
+static
+int CC bstSortByRemote(const BSTNode* item, const BSTNode* n)
+{
+ const RefNode* sn = (const RefNode*) item;
+
+ return bstCmpByRemote(sn->resolved.remote, n);
+}
+
+typedef struct Column {
+ uint32_t idx;
+ const char* name;
+ uint32_t expected;
+ uint32_t elem_bits;
+} Column;
+
+static
+rc_t AddColumn(rc_t rc, const VCursor* curs, Column* col)
+{
+ if (rc == 0) {
+ assert(curs && col);
+
+ rc = VCursorAddColumn(curs, &col->idx, col->name);
+ }
+
+ return rc;
+}
+
+/* Read a column data from a Cursor */
+static
+rc_t CursorRead(rc_t rc, const VCursor* curs, int64_t row_id,
+ const Column* col, void* buffer, uint32_t blen, uint32_t* row_len)
+{
+ assert(curs);
+
+ if (rc == 0) {
+ uint32_t elem_bits = col->elem_bits;
+ uint32_t expected = col->expected;
+ assert(col);
+
+ if (blen == 0) {
+ assert(buffer == NULL);
+ ++blen;
+ }
+
+ rc = VCursorReadDirect
+ (curs, row_id, col->idx, elem_bits, buffer, blen - 1, row_len);
+
+ if (rc != 0) {
+ if (buffer == NULL &&
+ rc == RC(rcVDB, rcCursor, rcReading, rcBuffer, rcInsufficient))
+ {
+ rc = 0;
+ }
+ }
+ else {
+ if (expected > 0 && *row_len != expected) {
+ rc = RC(rcVDB, rcCursor, rcReading, rcData, rcUnexpected);
+ }
+ if (buffer != NULL && expected == 0)
+ { ((char*)buffer)[*row_len] = '\0'; }
+ }
+ }
+
+ return rc;
+}
+
+/* Read a String from Configuration into "value" buffer */
+static rc_t ReadCfgStr
+(const KConfig* kfg, const char* path, char* value, size_t value_sz)
+{
+ rc_t rc = 0;
+ const KConfigNode *node = NULL;
+
+ rc = KConfigOpenNodeRead(kfg, &node, path);
+ if (rc == 0) {
+ size_t num_read = 0;
+ size_t remaining = 0;
+ rc = KConfigNodeRead
+ (node, 0, value, value_sz - 1, &num_read, &remaining);
+ if (rc == 0) {
+ if (remaining != 0)
+ { rc = RC(rcVDB, rcString, rcReading, rcSize, rcExcessive); }
+/* TODO: make sure check value[num_read] assignment is valid
+ when remaining == 0 */
+ else { value[num_read] = '\0'; }
+ }
+ }
+
+ RELEASE(KConfigNode, node);
+
+ return rc;
+}
+
+#define SIZE 4096
+
+/* Ctx struct is used to find a file using KConfig "refseq" parameters */
+typedef struct {
+ KDirectory* dir;
+
+ char servers[SIZE];
+ char volumes[SIZE];
+ char paths[SIZE];
+
+ VResolver* resolver;
+
+ const Resolved* last;
+ bool hasDuplicates;
+} Ctx;
+static rc_t CtxInit(Ctx* self) {
+ rc_t rc = 0;
+ KConfig* cfg = NULL;
+
+ assert(self);
+
+ memset(self, 0, sizeof *self);
+
+ if (rc == 0) {
+ rc = KConfigMake(&cfg, NULL);
+ if (rc == 0) {
+ const KConfigNode *node = NULL;
+ rc = KConfigOpenNodeRead(cfg, &node, "repository");
+ if (rc == 0) {
+ OLD = false;
+ LOGMSG(klogInfo, "KConfig(repository) found: using VResolver");
+ }
+ else {
+ OLD = true;
+ LOGMSG(klogInfo,
+ "KConfig(repository) not found: not using VResolver");
+ }
+ RELEASE(KConfigNode, node);
+ }
+ }
+
+ if (OLD) {
+ if (self->dir != NULL) {
+ return rc;
+ }
+
+ rc = KDirectoryNativeDir(&self->dir);
+
+ if (rc == 0) {
+ const char path[] = "refseq/servers";
+ rc = ReadCfgStr(cfg, path, self->servers, sizeof self->servers);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound)
+ { rc = 0; }
+ }
+ else {
+ const char path[] = "refseq/volumes";
+ rc = ReadCfgStr(cfg, path, self->volumes, sizeof self->volumes);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound)
+ { rc = 0; }
+ }
+ }
+
+ if (rc == 0) {
+ const char path[] = "refseq/paths";
+ rc = ReadCfgStr(cfg, path, self->paths, sizeof self->paths);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound)
+ { rc = 0; }
+ }
+ }
+ }
+ }
+ else {
+ VFSManager* mgr = NULL;
+
+ rc = VFSManagerMake(&mgr);
+
+ if (rc == 0) {
+ rc = VFSManagerMakeResolver(mgr, &self->resolver, cfg);
+ }
+
+ RELEASE(VFSManager, mgr);
+ }
+
+ RELEASE(KConfig, cfg);
+
+ return rc;
+}
+
+static rc_t CtxDestroy(Ctx* self) {
+ rc_t rc = 0;
+
+ assert(self);
+
+ RELEASE(KDirectory, self->dir);
+ RELEASE(VResolver, self->resolver);
+
+ memset(self, 0, sizeof *self);
+
+ return rc;
+}
+
+typedef struct {
+ const char* file;
+ bool found;
+} FindRefseq;
+static rc_t CC is_file_in_dir(const KDirectory* dir,
+ uint32_t type, const char* name, void* data)
+{
+ rc_t rc = 0;
+
+ FindRefseq* t = data;
+
+ assert(dir && name && data && t->file);
+
+ if (strcmp(t->file, name) == 0) {
+ uint64_t size = 0;
+ rc = KDirectoryFileSize(dir, &size, name);
+ if (rc == 0 && size > 0) {
+ /* compensate configuration-assistant.perl behavior:
+ it used to create an empty refseq file
+ when failed to download it */
+ t->found = true;
+ }
+ }
+
+ return rc;
+}
+
+/* Find file within srv/vol. If found then copy complete path to buf.
+ * Return true if found
+ */
+static bool FindInDir(rc_t* aRc, const KDirectory* native, const char* srv,
+ const char* vol, const char* file, char* buf, size_t blen)
+{
+ rc_t rc = 0;
+
+ const KDirectory* dir = NULL;
+
+ FindRefseq t;
+
+ assert(aRc && native && srv && file && buf && blen);
+
+ rc = *aRc;
+
+ if (rc != 0)
+ { return false; }
+
+ if (vol)
+ { rc = KDirectoryOpenDirRead(native, &dir, false, "%s/%s", srv, vol); }
+ else
+ { rc = KDirectoryOpenDirRead(native, &dir, false, srv); }
+
+ if (rc == 0) {
+ memset(&t, 0, sizeof t);
+ t.file = file;
+ rc = KDirectoryVVisit(dir, false, is_file_in_dir, &t, ".", NULL);
+ if (GetRCObject(rc) == rcDirectory && GetRCState(rc) == rcUnauthorized)
+ { rc = 0; }
+
+ if (rc == 0 && t.found) {
+ if (vol) {
+ rc = KDirectoryResolvePath(native,
+ true, buf, blen, "%s/%s/%s", srv, vol, file);
+ }
+ else {
+ rc = KDirectoryResolvePath(native,
+ true, buf, blen, "%s/%s", srv, file);
+ }
+ }
+ }
+ else if (rc == SILENT_RC(rcFS,
+ rcDirectory, rcOpening, rcPath, rcIncorrect))
+ {
+ /* ignored nonexistent directory */
+ rc = 0;
+ }
+
+ RELEASE(KDirectory, dir);
+
+ *aRc = rc;
+
+ return t.found;
+}
+
+#define rcResolver rcTree
+static bool NotFoundByResolver(rc_t rc) {
+ if (GetRCModule(rc) == rcVFS) {
+ if (GetRCTarget(rc) == rcResolver) {
+ if (GetRCContext(rc) == rcResolving) {
+ if (GetRCState(rc) == rcNotFound) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+
+/* find remote reference using VResolver */
+static rc_t FindRef(Ctx* ctx, const char* seqId, Resolved* resolved) {
+ rc_t rc = 0;
+
+ VPath* acc = NULL;
+ const VPath *remote = NULL;
+ size_t num_writ = 0;
+ char ncbiAcc[512] = "";
+
+ assert(resolved);
+
+ if (rc == 0) {
+ rc = string_printf(ncbiAcc, sizeof ncbiAcc, &num_writ,
+ "ncbi-acc:%s?vdb-ctx=refseq", seqId);
+ if (rc == 0 && num_writ > sizeof ncbiAcc) {
+ return RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+ }
+ }
+
+ if (rc == 0) {
+ rc = VPathMake(&acc, ncbiAcc);
+ }
+
+ if (rc == 0) {
+ bool remoteNotFound = false;
+ const VPath *local = NULL;
+ rc = VResolverLocal(ctx->resolver, acc, &local);
+ if (rc == 0) {
+ rc = VPathMakeString(local, &resolved->local);
+ RELEASE(VPath, local);
+ }
+ else if (NotFoundByResolver(rc)) {
+ rc = 0;
+ }
+
+ if (rc == 0) {
+ rc = VResolverRemote(ctx->resolver, acc, &remote, NULL);
+ if (rc == 0) {
+ rc = VPathMakeString(remote, &resolved->remote);
+ if (rc == 0) {
+ char *fragment = string_chr(resolved->remote->addr,
+ resolved->remote->size, '#');
+ if (fragment != NULL) {
+ *fragment = '\0';
+ }
+ }
+ }
+ else if (NotFoundByResolver(rc)) {
+ remoteNotFound = true;
+ rc = 0;
+ }
+ }
+
+ if (rc == 0 && !remoteNotFound) {
+ uint64_t file_size = 0;
+ const VPath *cache = NULL;
+ rc = VResolverCache(ctx->resolver, remote, &cache, file_size);
+ if (rc == 0) {
+ rc = VPathMakeString(cache, &resolved->cache);
+ }
+ else if (NotFoundByResolver(rc)) {
+ rc = 0;
+ }
+ RELEASE(VPath, cache);
+ }
+
+ if (rc == 0) {
+ if (ctx->last == NULL) {
+ ctx->last = resolved;
+ }
+ else {
+ const String *last = ctx->last->remote;
+ const String *crnt = resolved->remote;
+ if (last != NULL && crnt != NULL &&
+ last->addr != NULL && crnt->addr != NULL)
+ {
+ int min = crnt->size < last->size ? crnt->size : last->size;
+ if (strncmp(last->addr, crnt->addr, min) == 0) {
+ ctx->hasDuplicates = true;
+ }
+ }
+ }
+ }
+ }
+
+ RELEASE(VPath, remote);
+ RELEASE(VPath, acc);
+
+ return rc;
+}
+
+/* find remote reference using KConfig values */
+static
+rc_t DeprecatedFindRef(Ctx* ctx, const char* seqId, Resolved* resolved)
+{
+ rc_t rc = 0;
+ bool found = false;
+
+ int i = ~0;
+
+ char* buf = NULL;
+ size_t blen = 0;
+
+ assert(ctx && seqId && resolved);
+
+ memset(resolved, 0, sizeof *resolved);
+ buf = resolved->ref;
+ blen = sizeof resolved->ref;
+
+ for (i = 0; i < 2 && !found; ++i) {
+ char prefix[7] = "";
+ if (i > 0) {
+ if (strlen(seqId) > 6) {
+ strncpy(prefix, seqId, 6);
+ prefix[6] = '\0';
+ seqId = prefix;
+ }
+ else {
+ break;
+ }
+ }
+ if (rc == 0 && ctx->dir != NULL) {
+ if (FindInDir(&rc, ctx->dir, ".", NULL, seqId, buf, blen)) {
+ found = true;
+ }
+ else {
+ if (ctx->paths[0]) {
+ char paths[SIZE];
+ char* path_rem = paths;
+ char* path_sep = NULL;
+ strcpy(paths, ctx->paths);
+ do {
+ char const* path = path_rem;
+ path_sep = strchr(path, ':');
+ if (path_sep) {
+ path_rem = path_sep + 1;
+ *path_sep = 0;
+ }
+ if (FindInDir(&rc, ctx->dir, path, NULL,
+ seqId, buf, blen))
+ {
+ found = true;
+ break;
+ }
+ } while(path_sep && rc == 0);
+ }
+ if (!found && ctx->servers[0] && ctx->volumes[0]) {
+ char server[SIZE];
+ char vol[SIZE];
+ char* srv_sep = NULL;
+ char* srv_rem = server;
+ strcpy(server, ctx->servers);
+ /* TODO check for multiple servers/volumes */
+ do {
+ char* vol_rem = vol;
+ char* vol_sep = NULL;
+ strcpy(vol, ctx->volumes);
+ srv_sep = strchr(server, ':');
+ if (srv_sep) {
+ srv_rem = srv_sep + 1;
+ *srv_sep = '\0';
+ }
+ do {
+ char const* volume = vol_rem;
+ vol_sep = strchr(volume, ':');
+ if (vol_sep) {
+ vol_rem = vol_sep + 1;
+ *vol_sep = 0;
+ }
+ if (FindInDir(&rc, ctx->dir, server, volume,
+ seqId, buf, blen))
+ {
+ found = true;
+ break;
+ }
+ } while (vol_sep && rc == 0);
+ } while (!found && srv_sep && rc == 0);
+ }
+ }
+ }
+ }
+
+ return rc;
+}
+
+typedef struct {
+/* row values */
+ uint32_t readLen;
+ char circular[8];
+ char name[256];
+ char seqId[256];
+
+/* we do not read CMP_READ value, just its row_len */
+ uint32_t row_lenCMP_READ;
+} Row;
+
+/* Add a REFERENCE table Row to BSTree */
+static
+rc_t AddRow(BSTree* tr, Row* data, Ctx* ctx)
+{
+ rc_t rc = 0;
+ bool newRemote = false;
+ RefNode* sn = NULL;
+
+ assert(tr && data && ctx);
+
+ sn = (RefNode*) BSTreeFind(tr, data->seqId, bstCmpBySeqId);
+ if (sn == NULL) {
+ sn = calloc(1, sizeof *sn);
+ if (sn == NULL) {
+ return RC
+ (rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+ sn->seqId = string_dup_measure(data->seqId, NULL);
+ if (sn->seqId == NULL) {
+ bstWhack((BSTNode*) sn, NULL);
+ sn = NULL;
+ return RC
+ (rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+
+ sn->name = string_dup_measure(data->name, NULL);
+ if (sn->name == NULL) {
+ bstWhack((BSTNode*) sn, NULL);
+ sn = NULL;
+ return RC
+ (rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+
+ sn->circular = data->circular[0];
+ sn->readLen = data->readLen;
+ sn->local = (data->row_lenCMP_READ != 0);
+ newRemote = ! sn->local;
+
+ BSTreeInsert(tr, (BSTNode*)sn, bstSortBySeqId);
+ }
+ else {
+ if (data->row_lenCMP_READ != 0) {
+ sn->local = true;
+ }
+ if (strcmp(sn->name, data->name) || sn->circular != data->circular[0]) {
+ return RC(rcVDB, rcCursor, rcReading, rcData, rcInconsistent);
+ }
+ sn->readLen += data->readLen;
+ }
+
+ if (rc == 0 && newRemote) {
+ if (OLD) {
+ rc = DeprecatedFindRef(ctx, sn->seqId, &sn->resolved);
+ }
+ else {
+ rc = FindRef(ctx, sn->seqId, &sn->resolved);
+ }
+ }
+
+ return rc;
+}
+
+struct VDBDependencies {
+ uint32_t count;
+ RefNode** dependencies;
+
+ BSTree* tr;
+
+ /* open references */
+ KRefcount refcount;
+};
+typedef struct Initializer {
+ bool all; /* IN: when false: process just missed */
+ bool fill; /* IN:
+ false: count(fill count); true: fill dep(use count) */
+ uint32_t count; /* IO: all/missed count */
+ VDBDependencies* dep;/* OUT: to be filled */
+ uint32_t i; /* PRIVATE: index in dep */
+ rc_t rc; /* OUT */
+} Initializer;
+
+/* Work function to process dependencies tree
+ * Input parameters are in Initializer:
+ * all (true: all dependencies, false: just missing)
+ * fill(false: count dependencies, true: fill dependencies array
+ */
+static void CC bstProcess(BSTNode* n, void* data) {
+ RefNode* elm = (RefNode*) n;
+ Initializer* obj = (Initializer*) data;
+ bool go = false;
+
+ assert(elm && obj);
+
+ /* remore reference && refseq table not found */
+ if (obj->all) {
+ go = true;
+ }
+ else if (!elm->local) {
+ if (OLD) {
+ if (elm->resolved.ref[0] == '\0') {
+ go = true;
+ }
+ }
+ else {
+ if (elm->resolved.local == NULL) {
+ go = true;
+ }
+ }
+ }
+
+ if (!go) {
+ return;
+ }
+
+ if (!obj->fill) {
+ ++obj->count;
+ }
+ else {
+ if (obj->dep == NULL || obj->dep->dependencies == NULL) {
+ return;
+ }
+ if (obj->i < obj->count) {
+ *(obj->dep->dependencies + ((obj->i)++)) = elm;
+ }
+ else {
+ obj->rc = RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcCorrupt);
+ }
+ }
+}
+
+/* Read REFERENCE table; fill in BSTree */
+static
+rc_t CC VDatabaseDependencies(const VDatabase *self, BSTree* tr,
+ bool* has_no_REFERENCE, bool* hasDuplicates)
+{
+ rc_t rc = 0;
+
+ int64_t i = 0;
+ int64_t firstId = 0;
+ int64_t lastId = 0;
+
+ Column CIRCULAR = { 0, "CIRCULAR", 1, 8 };
+ Column CMP_READ = { 0, "CMP_READ", 0, 8 };
+ Column NAME = { 0, "NAME" , 0, 8 };
+ Column READ_LEN = { 0, "READ_LEN", 1, 32 };
+ Column SEQ_ID = { 0, "SEQ_ID", 0, 8 };
+
+ const VTable* tbl = NULL;
+ const VCursor* curs = NULL;
+
+ Ctx ctx;
+
+ assert(self && tr && has_no_REFERENCE);
+
+ *has_no_REFERENCE = false;
+
+ if (rc == 0) {
+ rc = CtxInit(&ctx);
+ }
+
+ if (rc == 0) {
+ rc = VDatabaseOpenTableRead(self, &tbl, "REFERENCE");
+ if (GetRCState(rc) == rcNotFound) {
+ *has_no_REFERENCE = true;
+ }
+ }
+ if (rc == 0) {
+ rc = VTableCreateCursorReadInternal(tbl, &curs);
+ }
+
+ rc = AddColumn(rc, curs, &CIRCULAR);
+ rc = AddColumn(rc, curs, &CMP_READ);
+ rc = AddColumn(rc, curs, &NAME );
+ rc = AddColumn(rc, curs, &READ_LEN);
+ rc = AddColumn(rc, curs, &SEQ_ID );
+
+ if (rc == 0) {
+ rc = VCursorOpen(curs);
+ }
+ if (rc == 0) {
+ uint64_t count = 0;
+ rc = VCursorIdRange(curs, 0, &firstId, &count);
+ lastId = firstId + count - 1;
+ }
+
+ for (i = firstId; i <= lastId && rc == 0; ++i) {
+ uint32_t row_len = 0;
+ Row data;
+ if (rc == 0) {
+ rc = CursorRead(rc, curs, i, &CIRCULAR,
+ data.circular, sizeof data.circular, &row_len);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "failed to read cursor(col='CIRCULAR', spot='$(id)')",
+ "id=%ld", i));
+ }
+ }
+ if (rc == 0) {
+ rc = CursorRead(rc, curs, i, &CMP_READ,
+ NULL, 0, &data.row_lenCMP_READ);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "failed to read cursor(col='CMP_READ', spot='$(id)')",
+ "id=%ld", i));
+ }
+ }
+ if (rc == 0) {
+ rc = CursorRead(rc, curs, i, &NAME,
+ data.name, sizeof data.name, &row_len);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "failed to read cursor(col='NAME', spot='$(id)')",
+ "id=%ld", i));
+ }
+ }
+ if (rc == 0) {
+ rc = CursorRead(rc, curs, i, &READ_LEN,
+ &data.readLen, sizeof data.readLen, &row_len);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "failed to read cursor(col='READ_LEN', spot='$(id)')",
+ "id=%ld", i));
+ }
+ }
+ if (rc == 0) {
+ rc = CursorRead(rc, curs, i, &SEQ_ID,
+ data.seqId, sizeof data.seqId, &row_len);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "failed to read cursor(col='SEQ_ID', spot='$(id)')",
+ "id=%ld", i));
+ }
+ }
+ if (rc == 0) {
+ rc = AddRow(tr, &data, &ctx);
+ }
+ }
+
+ if (rc == 0 && hasDuplicates != NULL) {
+ *hasDuplicates = ctx.hasDuplicates;
+ }
+
+ if (*has_no_REFERENCE) {
+ rc = 0;
+ }
+
+ {
+ rc_t rc2 = CtxDestroy(&ctx);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ RELEASE(VCursor, curs);
+ RELEASE(VTable, tbl);
+
+ return rc;
+}
+
+/* Get dependency number "idx" */
+static
+rc_t VDBDependenciesGet(const VDBDependencies* self,
+ RefNode** dep, uint32_t idx)
+{
+ rc_t rc = 0;
+
+ assert(dep);
+
+ if (self == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcNull);
+ }
+
+ if (idx >= self->count) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcExcessive);
+ }
+
+ *dep = *(self->dependencies + idx);
+ if (*dep == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcCorrupt);
+ }
+
+ return rc;
+}
+
+/* Count
+ * retrieve the number of dependencies
+ *
+ * "count" [ OUT ] - return parameter for dependencies count
+ */
+LIB_EXPORT rc_t CC VDBDependenciesCount(const VDBDependencies* self,
+ uint32_t* count)
+{
+ if (self == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcNull);
+ }
+
+ if (count == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ *count = self->count;
+
+ return 0;
+}
+
+/* Circular */
+LIB_EXPORT rc_t CC VDBDependenciesCircular(const VDBDependencies* self,
+ bool* circular, uint32_t idx)
+{
+ rc_t rc = 0;
+ RefNode* dep = NULL;
+
+ if (circular == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ rc = VDBDependenciesGet(self, &dep, idx);
+
+ if (rc == 0) {
+ *circular = dep->circular;
+ }
+
+ return rc;
+}
+
+/* Local
+ * retrieve local property
+ *
+ * "local" [ OUT ] - true if object is stored internally
+ *
+ * "idx" [ IN ] - zero-based index of dependency
+ */
+LIB_EXPORT rc_t CC VDBDependenciesLocal(const VDBDependencies* self,
+ bool* local, uint32_t idx)
+{
+ rc_t rc = 0;
+ RefNode* dep = NULL;
+
+ if (local == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ rc = VDBDependenciesGet(self, &dep, idx);
+
+ if (rc == 0) {
+ *local = dep->local;
+ }
+
+ return rc;
+}
+
+/* Name
+ *
+ * "name" [ OUT ] - returned pointed should not be released.
+ * it becomes invalid after VDBDependenciesRelease
+ */
+LIB_EXPORT rc_t CC VDBDependenciesName(const VDBDependencies* self,
+ const char** name, uint32_t idx)
+{
+ rc_t rc = 0;
+ RefNode* dep = NULL;
+
+ if (name == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ rc = VDBDependenciesGet(self, &dep, idx);
+
+ if (rc == 0) {
+ *name = dep->name;
+ }
+
+ return rc;
+}
+
+static rc_t VDBDependencyGetPath(const String* from, const char** to) {
+ assert(to);
+
+ *to = NULL;
+
+ if (OLD) {
+ return 0;
+ }
+
+ if (from == NULL) {
+ return 0;
+ }
+
+ if (from->addr != NULL && from->size > 0 &&
+ from->addr[from->size - 1] != '\0' &&
+ from->addr[from->size] != '\0')
+ {
+ return RC(rcVDB, rcString, rcValidating, rcChar, rcInvalid);
+ }
+
+ *to = from->addr;
+ return 0;
+}
+
+/* Path
+ * for remote dependencies: returns:
+ * path for resolved dependency,
+ * NULL for missing dependency.
+ * returns NULL for local dependencies
+ *
+ * "path" [ OUT ] - returned pointed should not be released.
+ * it becomes invalid after VDBDependenciesRelease
+ */
+LIB_EXPORT rc_t CC VDBDependenciesPath(const VDBDependencies* self,
+ const char** path, uint32_t idx)
+{
+ rc_t rc = 0;
+ RefNode* dep = NULL;
+
+ if (path == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ rc = VDBDependenciesGet(self, &dep, idx);
+
+ if (rc == 0) {
+ if (dep->local) {
+ *path = NULL;
+ }
+ else {
+ if (OLD) {
+ *path = dep->resolved.ref;
+ }
+ else {
+ rc = VDBDependencyGetPath(dep->resolved.local, path);
+ }
+ }
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC VDBDependenciesPathRemote(const VDBDependencies* self,
+ const char** path, uint32_t idx)
+{
+ rc_t rc = 0;
+ RefNode* dep = NULL;
+
+ if (path == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ rc = VDBDependenciesGet(self, &dep, idx);
+
+ if (rc == 0) {
+ rc = VDBDependencyGetPath(dep->resolved.remote, path);
+ }
+
+ return rc;
+}
+
+LIB_EXPORT rc_t CC VDBDependenciesPathCache(const VDBDependencies* self,
+ const char** path, uint32_t idx)
+{
+ rc_t rc = 0;
+ RefNode* dep = NULL;
+
+ if (path == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ rc = VDBDependenciesGet(self, &dep, idx);
+
+ if (rc == 0) {
+ rc = VDBDependencyGetPath(dep->resolved.cache, path);
+ }
+
+ return rc;
+}
+
+/* SeqId
+ *
+ * "seq_id" [ OUT ] - returned pointed should not be released.
+ * it becomes invalid after VDBDependenciesRelease
+ */
+LIB_EXPORT rc_t CC VDBDependenciesSeqId(const VDBDependencies* self,
+ const char** seq_id, uint32_t idx)
+{
+ rc_t rc = 0;
+ RefNode* dep = NULL;
+
+ if (seq_id == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ rc = VDBDependenciesGet(self, &dep, idx);
+
+ if (rc == 0) {
+ *seq_id = dep->seqId;
+ }
+
+ return rc;
+}
+
+/* Type
+ *
+ * "type" [ OUT ] - a KDBPathType from kdb/manager.h
+ */
+LIB_EXPORT rc_t CC VDBDependenciesType(const VDBDependencies* self,
+ uint32_t* type, uint32_t idx)
+{
+ rc_t rc = 0;
+ RefNode* dep = NULL;
+
+ if (type == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ rc = VDBDependenciesGet(self, &dep, idx);
+
+ if (rc == 0) {
+ *type = kptTable;
+ }
+
+ return rc;
+}
+
+#define CLSNAME "VDBDependencies"
+
+VDB_EXTERN rc_t CC VDBDependenciesAddRef(const VDBDependencies* self ) {
+ if (self != NULL) {
+ switch (KRefcountAdd(&self->refcount, CLSNAME)) {
+ case krefLimit:
+ return RC(rcVDB, rcDatabase, rcAttaching, rcRange, rcExcessive);
+ }
+ }
+
+ return 0;
+}
+
+static rc_t VDBDependenciesWhack(VDBDependencies* self) {
+ if (self == NULL) {
+ return 0;
+ }
+
+ KRefcountWhack(&self->refcount, CLSNAME);
+
+ BSTreeWhack(self->tr, bstWhack, NULL);
+ free(self->tr);
+
+ free(self->dependencies);
+
+ memset(self, 0, sizeof *self);
+
+ free(self);
+
+ return 0;
+}
+
+/* Release
+ * (objects ARE NOT reference counted)
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC VDBDependenciesRelease(const VDBDependencies* self) {
+ if (self != NULL) {
+ switch (KRefcountDrop(&self->refcount, CLSNAME)) {
+ case krefWhack:
+ return VDBDependenciesWhack((VDBDependencies*)self);
+ case krefLimit:
+ return RC(rcVDB, rcDatabase, rcReleasing, rcRange, rcExcessive);
+ }
+ }
+
+ return 0;
+}
+
+typedef struct {
+ BSTree* tr;
+ int count;
+ bool all;
+} SBstCopy;
+
+static void CC bstCopy(BSTNode* n, void* data) {
+ RefNode* sn = NULL;
+ RefNode* elm = (RefNode*) n;
+ SBstCopy* x = (SBstCopy*)data;
+ BSTree* tr = x->tr;
+ bool go = false;
+ assert(elm && tr);
+
+ if (x->all) {
+ go = true;
+ } else if (!elm->local) {
+ assert(!OLD);
+ if (elm->resolved.local == NULL) {
+ go = true;
+ }
+ }
+
+ if (!go) {
+ return;
+ }
+
+ sn = (RefNode*) BSTreeFind(tr, elm->resolved.remote, bstCmpByRemote);
+ if (sn == NULL) {
+ sn = calloc(1, sizeof *sn);
+ if (sn == NULL) {
+/* TODO: generate error message */
+ return;
+ }
+
+ sn->seqId = string_dup_measure(elm->seqId, NULL);
+ if (sn->seqId == NULL) {
+ bstWhack((BSTNode*) sn, NULL);
+ return;
+ }
+
+ sn->name = string_dup_measure(elm->name, NULL);
+ if (sn->name == NULL) {
+ bstWhack((BSTNode*) sn, NULL);
+ return;
+ }
+
+ sn->circular = elm->circular;
+ sn->readLen = elm->readLen;
+ sn->local = elm->local;
+
+ sn->resolved.count = 1;
+
+ sn->resolved.local = elm->resolved.local;
+ elm->resolved.local = NULL;
+
+ sn->resolved.remote = elm->resolved.remote;
+ elm->resolved.remote = NULL;
+
+ sn->resolved.cache = elm->resolved.cache;
+ elm->resolved.cache = NULL;
+
+ BSTreeInsert(tr, (BSTNode*)sn, bstSortByRemote);
+ ++x->count;
+ }
+ else {
+ bool archived = false;
+ if (sn->resolved.rc != 0) {
+ return;
+ }
+ else if (sn->circular != elm->circular) {
+ sn->resolved.rc
+ = RC(rcVDB, rcNumeral, rcComparing, rcData, rcInvalid);
+ }
+ else if ((sn->name == NULL && elm->name != NULL)
+ || (sn->name != NULL && elm->name == NULL))
+ {
+ sn->resolved.rc
+ = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+ }
+ else if (strcmp(sn->name, elm->name) != 0) {
+ if (strncmp(sn->name, elm->name, 6) == 0) {
+ archived = true;
+ }
+ else {
+ sn->resolved.rc
+ = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+ }
+ }
+
+ if (sn->resolved.rc != 0) {
+ }
+ else if (sn->readLen != elm->readLen && !archived) {
+ sn->resolved.rc
+ = RC(rcVDB, rcNumeral, rcComparing, rcData, rcInvalid);
+ }
+ else if (sn->seqId == NULL || elm->seqId == NULL) {
+ sn->resolved.rc
+ = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+ }
+ else if (sn->local != elm->local) {
+ sn->resolved.rc
+ = RC(rcVDB, rcNumeral, rcComparing, rcData, rcInvalid);
+ }
+ else if (sn->resolved.ref[0] != '\0' || elm->resolved.ref[0] != '\0') {
+ sn->resolved.rc
+ = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+ }
+ else if (sn->resolved.local != NULL || elm->resolved.local != NULL) {
+ sn->resolved.rc
+ = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+ }
+ else if (StringCompare(sn->resolved.remote, elm->resolved.remote) != 0)
+ {
+ int min = sn->resolved.remote->size < elm->resolved.remote->size
+ ? sn->resolved.remote->size : elm->resolved.remote->size;
+ if (!archived || strncmp(sn->resolved.remote->addr,
+ elm->resolved.remote->addr, min) != 0)
+ {
+ sn->resolved.rc
+ = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+ }
+ }
+
+ if (sn->resolved.rc != 0) {
+ }
+ else if (StringCompare(sn->resolved.cache, elm->resolved.cache) != 0)
+ {
+ sn->resolved.rc
+ = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+ }
+ else {
+ if (archived) {
+ int i = 0;
+ bool tail = false;
+ for (;;++i) {
+ char* c1 = &sn->seqId[i];
+ const char c2 = elm->seqId[i];
+ if (*c1 == '\0') {
+ break;
+ }
+ if (!tail && (c2 == '\0' || *c1 != c2)) {
+ tail = true;
+ }
+ if (tail) {
+ /* incorrect:
+ we keep at least one seqid for archived refseqs to be able to resolve them
+ *c1 = '.'; */
+ }
+ }
+ }
+ ++sn->resolved.count;
+ }
+ }
+}
+
+/* ListDependencies
+ * create a dependencies object: list all dependencies
+ *
+ * "dep" [ OUT ] - return for VDBDependencies object
+ *
+ * "missing" [ IN ] - if true, list only missing dependencies
+ * otherwise, list all dependencies
+ *
+ * N.B. If missing == true then
+ * just one refseq dependency will be returned for 'container' Refseq files.
+ */
+LIB_EXPORT rc_t CC VDatabaseListDependencies(const VDatabase* self,
+ const VDBDependencies** dep, bool missing)
+{
+ rc_t rc = 0;
+ VDBDependencies* obj;
+ bool all = ! missing;
+ bool has_no_REFERENCE = false;
+ bool hasDuplicates = false;
+
+ if (self == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcNull);
+ }
+ if (dep == NULL) {
+ return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+ }
+
+ obj = calloc(1, sizeof *obj);
+ if (obj == NULL) {
+ return RC(rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+
+ obj->tr = malloc(sizeof *obj->tr);
+ if (obj->tr == NULL) {
+ free(obj);
+ return RC(rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+ BSTreeInit(obj->tr);
+
+ /* initialize dependencie tree */
+ rc = VDatabaseDependencies(self, obj->tr,
+ &has_no_REFERENCE, &hasDuplicates);
+ if (rc == 0 && has_no_REFERENCE) {
+ *dep = obj;
+ return rc;
+ }
+
+ if (rc == 0) {
+ Initializer init;
+ memset(&init, 0, sizeof init);
+
+ /* count all/missing dependencies */
+ init.all = all;
+ init.fill = false;
+ BSTreeForEach(obj->tr, false, bstProcess, &init);
+ /* now init.count = number of (all == true ? 'all' : 'missed') references*/
+
+ rc = init.rc;
+ if (rc == 0) {
+ obj->count = init.count;
+ }
+
+ if (rc == 0 && missing && hasDuplicates) {
+ /* references have duplicates. e.g. AAAB01... */
+ SBstCopy x;
+ BSTree* tr = malloc(sizeof *tr);
+ if (tr == NULL) {
+ rc = RC(rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ return rc;
+ }
+ BSTreeInit(tr);
+ x.count = 0;
+ x.tr = tr;
+ x.all = all;
+
+ /* compact obj->tr into tr, skip duplicates
+ x.count is the number of all references from obj.tr */
+ BSTreeForEach(obj->tr, false, bstCopy, &x);
+ BSTreeWhack(obj->tr, bstWhack, NULL);
+ free(obj->tr);
+ obj->tr = tr;
+ obj->count = init.count = x.count;
+ }
+
+ if (rc == 0) {
+ /* initialize dependencies array with pointers to tree values */
+ if (obj->count > 0) {
+ obj->dependencies
+ = calloc(obj->count, sizeof obj->dependencies);
+ if (obj->dependencies == NULL) {
+ free(obj);
+ return RC
+ (rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+ init.fill = true;
+ init.dep = obj;
+ BSTreeForEach(obj->tr, false, bstProcess, &init);
+ rc = init.rc;
+ if (rc == 0 && init.i != init.count) {
+ rc = RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcCorrupt);
+ }
+ }
+ }
+ }
+
+ if (rc == 0) {
+ KRefcountInit(&obj->refcount, 1, CLSNAME, "make", "dep");
+ *dep = obj;
+ }
+ else {
+ VDBDependenciesRelease(obj);
+ }
+
+ return rc;
+}
+
+static bool DependenciesError(rc_t rc) {
+ return GetRCModule(rc) == rcAlign && GetRCObject(rc) == rcTable
+ && GetRCState(rc) == rcNotFound;
+}
+
+typedef enum ErrType {
+ eUnknown,
+ eNoEncInKfg,
+ ePwdFileNotFound,
+ eBadPwdFile,
+ eBadEncKey
+} ErrType;
+static ErrType DependenciesType(rc_t rc) {
+ if (GetRCTarget(rc) == rcEncryptionKey)
+ {
+ switch (GetRCSTATE(rc))
+ {
+ /* no configuration or environment */
+ case RC_STATE(rcFile, rcUnknown):
+ return eNoEncInKfg;
+
+ /* no file where told to look */
+ case RC_STATE(rcFile, rcNotFound):
+ return ePwdFileNotFound;
+
+ /* after decryption the file wasn't a database object */
+ case RC_STATE(rcEncryption, rcIncorrect):
+ return eBadEncKey;
+
+ default:
+ break;
+ }
+ }
+ else if (GetRCTarget(rc) == rcMgr)
+ {
+ switch (GetRCSTATE(rc))
+ {
+ case RC_STATE(rcEncryptionKey, rcTooShort): /* too short */
+ case RC_STATE(rcEncryptionKey, rcTooLong): /* too long */
+ return eBadPwdFile;
+
+ default:
+ break;
+ }
+ }
+ return eUnknown;
+}
+
+LIB_EXPORT bool CC UIError( rc_t rc,
+ const VDatabase* db, const VTable* table)
+{
+ bool retval = false;
+ if( db != NULL || table != NULL ) {
+ if( DependenciesError(rc) ) {
+ if( db != NULL ) {
+ VDatabaseAddRef(db);
+ } else if( VTableOpenParentRead(table, &db) != 0 ) {
+ db = NULL;
+ }
+ if( db != NULL ) {
+ const VTable* ref;
+ if( VDatabaseOpenTableRead(db, &ref, "REFERENCE") == 0 ) {
+ const VCursor* c;
+ if( VTableCreateCachedCursorRead(ref, &c, 0) == 0 ) {
+ uint32_t i;
+ retval = VCursorAddColumn(c, &i, "CIRCULAR") == 0
+ && VCursorOpen(c) == 0;
+ VCursorRelease(c);
+ }
+ VTableRelease(ref);
+ }
+ VDatabaseRelease(db);
+ }
+ }
+ }
+ else if (db == NULL && table == NULL) {
+ ErrType type = DependenciesType(rc);
+ if (type != eUnknown) {
+ retval = true;
+ }
+ }
+ return retval;
+}
+
+static
+void CC VDBDependenciesLOGMissing( rc_t rc,
+ const VDatabase* db, bool log_list )
+{
+ static bool once = false;
+ if( !once ) {
+ KWrtHandler handler;
+
+ once = true;
+
+ handler.writer = KOutWriterGet();
+ handler.data = KOutDataGet();
+ KOutHandlerSetStdErr();
+
+ if (DependenciesError(rc)) {
+ OUTMSG(("This operation requires access to external"
+ " reference sequence(s) that could not be located\n"));
+ if (db && log_list) {
+ const VDBDependencies* dep = NULL;
+ uint32_t i, count = 0;
+ if( VDatabaseListDependencies(db, &dep, true) == 0 &&
+ VDBDependenciesCount(dep, &count) == 0 ) {
+ for(i = 0; i < count; i++) {
+ const char* name = NULL, *seqId = NULL;
+ if (VDBDependenciesName(dep, &name, i) == 0
+ && VDBDependenciesSeqId(dep, &seqId, i) == 0)
+ {
+ OUTMSG(("Reference sequence %s %s was not found\n",
+ seqId, name));
+ }
+ }
+ VDBDependenciesRelease(dep);
+ }
+ }
+ OUTMSG((
+ "Please run \"perl configuration-assistant.perl\" and try again\n"
+ ));
+ }
+ else {
+ switch (DependenciesType(rc)) {
+ case eNoEncInKfg:
+ OUTMSG((
+"The file you are trying to open is encrypted,\n"
+"but no decryption password could be located.\n"
+"To set up a password,\n"
+"run the 'configuration-assistant.perl' script provided with the toolkit.\n"));
+ break;
+ case ePwdFileNotFound:
+ OUTMSG((
+"The file you are trying to open is encrypted,\n"
+"but no decryption password could be obtained\n"
+"from the path given in configuration.\n"
+"To set up or change a password,\n"
+"run the 'configuration-assistant.perl' script provided with the toolkit.\n"));
+ break;
+ case eBadEncKey:
+ OUTMSG((
+"The file you are trying to open is encrypted, but could not be opened.\n"
+"Either your password is incorrect or the downloaded file is corrupt.\n"
+"To set up or change a password,\n"
+"run the 'configuration-assistant.perl' script provided with the toolkit.\n"
+"To test the file for corruption,\n"
+"run the 'nencvalid' tool provided with the toolkit.\n"));
+ break;
+ case eBadPwdFile:
+ OUTMSG((
+"The file you are trying to open is encrypted, but could not be opened.\n"
+"The password in the password file in unusable either from being 0 bytes\n"
+"or more than 4096 bytes long. The password starts at the beginning of\n"
+"the file and ends with the first CR (\\r) pr LF (\\n) or at the end of\n"
+"the file.\n"
+"To set up or change a password,\n"
+"run the 'configuration-assistant.perl' script provided with the toolkit.\n"));
+ break;
+ default:
+ assert(0);
+ }
+ }
+
+ OUTMSG(("\n"));
+ KOutHandlerSet(handler.writer, handler.data);
+ }
+}
+
+LIB_EXPORT const char* CC UIDatabaseGetErrorString(rc_t rc)
+{
+ if (DependenciesError(rc)) {
+ return "This operation requires access to external"
+ " reference sequence(s) that could not be located";
+ }
+ else {
+ switch (DependenciesType(rc)) {
+ case eNoEncInKfg:
+ return "The file is encrypted, "
+ "but no decryption password could be located";
+ case ePwdFileNotFound:
+ return "The file is encrypted, "
+ "but no decryption password could be obtained "
+ "from the path given in configuration";
+ case eBadEncKey:
+ return "The file is encrypted, but could not be opened. "
+ "Either the password is incorrect or the file is corrupt";
+ case eBadPwdFile:
+ return "The file is encrypted, but could not be opened. "
+ "The password in the password file in unusable";
+ default:
+ assert(0);
+ return "Unexpected Dependency Type";
+ }
+ }
+}
+
+LIB_EXPORT void CC UIDatabaseLOGError( rc_t rc,
+ const VDatabase* db, bool log_list )
+{
+ VDBDependenciesLOGMissing(rc, db, log_list);
+}
+
+LIB_EXPORT void CC UITableLOGError( rc_t rc,
+ const VTable* table, bool log_list )
+{
+ const VDatabase* db;
+ if( table == NULL ) {
+ VDBDependenciesLOGMissing(rc, NULL, log_list);
+ }
+ else if( VTableOpenParentRead(table, &db) == 0 && db != NULL ) {
+ VDBDependenciesLOGMissing(rc, db, log_list);
+ VDatabaseRelease(db);
+ }
+}
diff --git a/libs/vdb/dbmgr-cmn.c b/libs/vdb/dbmgr-cmn.c
index ad8f7f0..7d8c0c9 100644
--- a/libs/vdb/dbmgr-cmn.c
+++ b/libs/vdb/dbmgr-cmn.c
@@ -38,11 +38,16 @@
#include <vdb/manager.h>
#include <vdb/database.h>
+#include <vdb/table.h>
#include <vdb/vdb-priv.h>
#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
#include <kfg/config.h>
#include <kfs/directory.h>
#include <kfs/dyload.h>
+#include <klib/log.h>
#include <klib/text.h>
#include <klib/rc.h>
#include <sysalloc.h>
@@ -53,51 +58,12 @@
#include <assert.h>
#if 1
-#define DEBUG_PRINT(fmt, ...) { do { } while(0); }
+#define DEBUG_PRINT( fmt, ... ) ( void ) 0
#else
#define DEBUG_PRINT(fmt, ...) fprintf(stderr, "%s - " fmt "\n", __func__, __VA_ARGS__)
#endif
/*--------------------------------------------------------------------------
- * VDBMem
- */
-
-/* Whack
- */
-static
-void CC VDBMemWhack ( DLNode *n, void *ignore )
-{
- DEBUG_PRINT("freeing mem", 0);
- free ( n );
-}
-
-
-/* Release
- */
-void CC VDBMemRelease ( DLNode *item, void *data )
-{
- VDBMem *self = ( VDBMem* ) item;
- VDBManager *mgr = data;
-
- if ( self != NULL )
- {
- if ( mgr == NULL || mgr -> pcount >= mgr -> plimit ) {
- if (mgr) {
- DEBUG_PRINT("freeing mem, pcount: %u, plimit: %u", mgr->pcount, mgr->plimit);
- --mgr->mcount;
- }
- free ( self );
- }
- else
- {
- DEBUG_PRINT("pooling mem, pcount: %u, plimit: %u", mgr->pcount, mgr->plimit);
- DLListPushTail ( & mgr -> mpool, & self -> n );
- ++ mgr -> pcount;
- }
- }
-}
-
-/*--------------------------------------------------------------------------
* VDBManager
* opaque handle to library
*/
@@ -124,7 +90,6 @@ rc_t VDBManagerWhack ( VDBManager *self )
VSchemaRelease ( self -> schema );
VLinkerRelease ( self -> linker );
- DLListWhack ( & self -> mpool, VDBMemWhack, NULL );
free ( self );
return 0;
}
@@ -356,15 +321,27 @@ rc_t VDBManagerConfigFromKfg ( VDBManager *self, bool update )
/* add path between "path" and "colon" */
rc = VDBManagerAddSchemaIncludePath ( self, "%.*s", ( int ) ( colon - path ), path );
if ( rc != 0 )
- break;
- num_read -= ( colon - path ) - 1;
+ {
+ PLOGERR ( klogWarn, ( klogWarn, rc, "schema path '$(path)' was rejected",
+ "path=%.*s", ( int ) ( colon - path ), path ) );
+ rc = 0;
+ }
+ num_read -= colon - path + 1;
path = colon + 1;
colon = string_chr ( path, num_read, ':' );
}
/* add in last portion */
if ( rc == 0 && num_read != 0 )
+ {
rc = VDBManagerAddSchemaIncludePath ( self, "%.*s", ( int ) ( num_read ), path );
+ if ( rc != 0 )
+ {
+ PLOGERR ( klogWarn, ( klogWarn, rc, "schema path '$(path)' was rejected",
+ "path=%.*s", ( int ) num_read, path ) );
+ rc = 0;
+ }
+ }
}
KConfigRelease ( kfg );
@@ -513,93 +490,258 @@ LIB_EXPORT rc_t CC VDBManagerSetUserData ( const VDBManager *cself,
return 0;
}
-
-/* MakeMem
- * pops a buffer from pool
- * or allocates a new one on demand
+/* OpenKDBManager
+ * returns a new reference to KDBManager used by VDBManager
*/
-rc_t VDBManagerMakeMem ( VDBManager *self, VDBMem **memp )
+LIB_EXPORT rc_t CC VDBManagerOpenKDBManagerRead ( const VDBManager *self, const KDBManager **kmgr )
{
rc_t rc;
- if ( memp == NULL )
- rc = RC ( rcVDB, rcMgr, rcAllocating, rcParam, rcNull );
+ if ( kmgr == NULL )
+ rc = RC ( rcVDB, rcMgr, rcAccessing, rcParam, rcNull );
else
{
if ( self == NULL )
- rc = RC ( rcVDB, rcMgr, rcAllocating, rcSelf, rcNull );
+ rc = RC ( rcVDB, rcMgr, rcAccessing, rcSelf, rcNull );
else
{
- VDBMem *mem;
-
- if ( self -> pcount > 0 )
+ rc = KDBManagerAddRef ( self -> kmgr );
+ if ( rc == 0 )
{
- /* "count" tells us that there is at least 1 pooled buffer */
- mem = ( VDBMem* ) DLListPopHead ( & self -> mpool );
- assert ( mem != NULL );
+ * kmgr = self -> kmgr;
+ return 0;
+ }
+ }
- /* should always happen */
- if ( mem != NULL )
- {
- DEBUG_PRINT("retrieving mem from pool", 0);
- -- self -> pcount;
- * memp = mem;
- return 0;
- }
+ * kmgr = NULL;
+ }
- /* should never happen */
- self -> pcount = 0;
- }
-
- if (self->mcount > self->mlimit) {
- rc = RC(rcVDB, rcMgr, rcAllocating, rcResources, rcExhausted);
- DEBUG_PRINT("refusing to allocate; too many allocs", 0);
- }
- else {
- mem = malloc ( sizeof * mem );
- if ( mem == NULL )
- rc = RC ( rcVDB, rcMgr, rcAllocating, rcMemory, rcExhausted );
- else
+ return rc;
+}
+
+
+static
+ver_t VDBManagerGetLoaderVersFromMeta ( const KMetadata * meta )
+{
+ const KMDataNode *node = NULL;
+ rc_t rc = KMetadataOpenNodeRead ( meta, & node, "SOFTWARE/loader" );
+ KMDataNodeRelease ( node );
+ if ( rc == 0 )
+ {
+ size_t num_read;
+ char vers_string [ 64 ];
+ rc = KMDataNodeReadAttr ( node, "vers", vers_string, sizeof vers_string, & num_read );
+ if ( rc == 0 )
+ {
+ char *end, *start = vers_string;
+ unsigned long maj = strtoul ( start, & end, 10 );
+
+ KMDataNodeRelease ( node );
+
+ if ( end > start && end [ 0 ] == '.' )
+ {
+ unsigned long min = strtoul ( start = end + 1, & end, 10 );
+ if ( end > start && end [ 0 ] == '.' )
{
- ++self->mcount;
- DEBUG_PRINT("allocating mem %u", self->mcount);
- * memp = mem;
- return 0;
+ unsigned long rel = strtoul ( start = end + 1, & end, 10 );
+ if ( end > start )
+ return ( maj << 24 ) | ( min << 16 ) | rel;
}
}
}
+ }
+ return 0;
+}
- * memp = NULL;
+
+/* VDBManagerGetVersFromMeta
+ * helper-function for VDBManagerGetObjVersion
+ */
+static
+ver_t VDBManagerGetVersFromMeta ( const KMetadata * meta, bool is_db )
+{
+ rc_t rc = 0;
+ uint32_t meta_vers;
+ const KMDataNode *node;
+
+ /* look for loader version as first clue */
+ ver_t version = VDBManagerGetLoaderVersFromMeta ( meta );
+ if ( VersionGetMajor ( version ) >= 2 ) {
+ return version;
}
- return rc;
+ /* was the run vdb-copied? */
+ rc = KMetadataOpenNodeRead ( meta, & node, "SOFTWARE/update" );
+ if ( rc == 0 ) {
+ KMDataNodeRelease ( node );
+ return 0x2000000;
+ }
+
+ /* If SOFTWARE/loader/@vers exists but SOFTWARE/update does not
+ * then return the former */
+ if ( version != 0 ) {
+ return version;
+ }
+
+ /* THE PRINCIPAL DESCRIPTION OF SOFTWARE VERSION
+ WAS NOT FOUND. USE HEURISTICS TO DETERMINE VERSION
+ FROM THIS POINT FORWARD. */
+
+ /* look at the version of the metadata file itself
+ metdata version 1 means pre-vdb, i.e. v0 */
+ rc = KMetadataVersion ( meta, & meta_vers );
+ if ( rc == 0 && meta_vers < 2 )
+ return 0;
+
+ /* assume all databases are v2 */
+ if ( is_db )
+ return 0x2000000;
+
+
+ /* AT THIS POINT, WE KNOW WE MUST HAVE A TABLE,
+ BUT WE DON'T HAVE PERFECT EVIDENCE OF VERSION,
+ SINCE THE SOFTWARE NODE IS NOT MANDATORY. */
+
+ /* if "schema" exists, it's v2 */
+ rc = KMetadataOpenNodeRead ( meta, & node, "schema" );
+ if ( rc == 0 )
+ {
+ KMDataNodeRelease ( node );
+ return 0x2000000;
+ }
+
+ /* if "col" exists, it's v1 */
+ rc = KMetadataOpenNodeRead ( meta, &node, "col" );
+ if ( rc == 0 )
+ {
+ KMDataNodeRelease ( node );
+ return 0x1000000;
+ }
+
+ /* appears to be v0 */
+ return 0;
}
-/* OpenKDBManager
- * returns a new reference to KDBManager used by VDBManager
+
+/* VDBManagerGetObjVersion
+ * returns the vdb-version of the given object
*/
-LIB_EXPORT rc_t CC VDBManagerOpenKDBManagerRead ( const VDBManager *self, const KDBManager **kmgr )
+LIB_EXPORT rc_t CC VDBManagerGetObjVersion ( const VDBManager *self, ver_t * version, const char *path )
{
rc_t rc;
- if ( kmgr == NULL )
+ if ( version == NULL )
rc = RC ( rcVDB, rcMgr, rcAccessing, rcParam, rcNull );
else
{
if ( self == NULL )
rc = RC ( rcVDB, rcMgr, rcAccessing, rcSelf, rcNull );
+ else if ( path == NULL )
+ rc = RC ( rcVDB, rcMgr, rcAccessing, rcPath, rcNull );
+ else if ( path [ 0 ] == 0 )
+ rc = RC ( rcVDB, rcMgr, rcAccessing, rcPath, rcEmpty );
else
{
- rc = KDBManagerAddRef ( self -> kmgr );
+ const KTable *tbl;
+ const KDatabase *db;
+ const KMetadata *meta;
+
+ int path_type = KDBManagerPathType ( self -> kmgr, path ) & ~ kptAlias;
+ switch ( path_type )
+ {
+ case kptDatabase:
+ rc = KDBManagerOpenDBRead ( self -> kmgr, & db, path );
+ if ( rc == 0 )
+ {
+ rc = KDatabaseOpenMetadataRead ( db, & meta );
+ KDatabaseRelease ( db );
+ }
+ break;
+ case kptTable:
+ rc = KDBManagerOpenTableRead ( self -> kmgr, & tbl, path );
+ if ( rc == 0 )
+ {
+ rc = KTableOpenMetadataRead ( tbl, & meta );
+ KTableRelease ( tbl );
+ }
+ break;
+
+ case kptPrereleaseTbl:
+ * version = 0;
+ return 0;
+
+ default:
+ rc = RC ( rcVDB, rcMgr, rcAccessing, rcPath, rcIncorrect );
+ }
+
if ( rc == 0 )
{
- * kmgr = self -> kmgr;
+ * version = VDBManagerGetVersFromMeta ( meta, path_type == kptDatabase );
+ KMetadataRelease ( meta );
return 0;
}
}
- * kmgr = NULL;
+ * version = 0;
}
return rc;
}
+
+
+/* ListExternalSchemaModules
+ */
+LIB_EXPORT rc_t CC VDBManagerListExternalSchemaModules ( const VDBManager *self, KNamelist **listp )
+{
+ rc_t rc;
+
+ if ( listp == NULL )
+ rc = RC ( rcVDB, rcMgr, rcListing, rcParam, rcNull );
+ else
+ {
+ if ( self == NULL )
+ rc = RC ( rcVDB, rcMgr, rcListing, rcSelf, rcNull );
+ else
+ {
+ rc = VLinkerListExternalSchemaModules ( self -> linker, listp );
+ if ( rc == 0 )
+ return 0;
+ }
+
+ * listp = NULL;
+ }
+
+ return rc;
+}
+
+
+/* PathType
+ * check the path type of an object/directory path.
+ *
+ * this is an extension of the KDirectoryPathType ( see <kdb/manager.h> )
+ * and will return the KDirectory values if a path type is not specifically
+ * a VDB or KDB object.
+ */
+LIB_EXPORT int CC VDBManagerPathType ( const VDBManager * self,
+ const char *path, ... )
+{
+ int type;
+
+ va_list args;
+ va_start ( args, path );
+
+ type = VDBManagerVPathType ( self, path, args );
+
+ va_end ( args );
+
+ return type;
+}
+
+LIB_EXPORT int CC VDBManagerVPathType ( const VDBManager * self,
+ const char *path, va_list args )
+{
+ if ( self != NULL )
+ return KDBManagerVPathType ( self -> kmgr, path, args );
+
+ return kptBadPath;
+}
diff --git a/libs/vdb/dbmgr-priv.h b/libs/vdb/dbmgr-priv.h
index 310c7a8..aa1b36b 100644
--- a/libs/vdb/dbmgr-priv.h
+++ b/libs/vdb/dbmgr-priv.h
@@ -47,13 +47,6 @@
#define KONST
#endif
-#if _DEBUGGING && 0
-#define VDBM_PAGE_SIZE 256
-#elif _DEBUGGING && 0
-#define VDBM_PAGE_SIZE ( 256 * 1024 )
-#else
-#define VDBM_PAGE_SIZE ( 32 * 1024 )
-#endif
#ifdef __cplusplus
extern "C" {
@@ -69,27 +62,6 @@ struct VLinker;
/*--------------------------------------------------------------------------
- * VDBMem
- * a page of pooled memory
- */
-typedef struct VDBMem VDBMem;
-struct VDBMem
-{
- DLNode n;
- uint8_t page [ VDBM_PAGE_SIZE ];
-};
-
-#undef VDBM_PAGE_SIZE
-
-
-/* Release
- * return memory block to pool
- * or delete it if pool is already full
- */
-void CC VDBMemRelease ( DLNode *self, void *mgr );
-
-
-/*--------------------------------------------------------------------------
* VDBManager
* handle to library
*/
@@ -108,13 +80,6 @@ struct VDBManager
void *user;
void ( CC * user_whack ) ( void *data );
- /* memory pool, max buffers to keep, count in pool */
- DLList mpool;
- uint32_t plimit;
- uint32_t pcount;
- uint32_t mlimit; /* alloc'ed limit */
- uint32_t mcount; /* alloc'ed count */
-
/* open references */
KRefcount refcount;
};
@@ -135,13 +100,6 @@ rc_t VDBManagerSever ( const VDBManager *self );
rc_t VDBManagerConfigPaths ( VDBManager *self, bool update );
-/* MakeMem
- * pops a buffer from pool
- * or allocates a new one on demand
- */
-rc_t VDBManagerMakeMem ( VDBManager *self, VDBMem **mem );
-
-
/*--------------------------------------------------------------------------
* generic whackers
*/
diff --git a/libs/vdb/dbmgr.c b/libs/vdb/dbmgr.c
index 753c804..2551b6b 100644
--- a/libs/vdb/dbmgr.c
+++ b/libs/vdb/dbmgr.c
@@ -90,11 +90,6 @@ LIB_EXPORT rc_t CC VDBManagerMakeRead ( const VDBManager **mgrp, const KDirector
{
mgr -> user = NULL;
mgr -> user_whack = NULL;
- DLListInit ( & mgr -> mpool );
- mgr -> mlimit = 0;
- mgr -> mcount = 0;
- mgr -> plimit = 0;
- mgr -> pcount = 0;
KRefcountInit ( & mgr -> refcount, 1, "VDBManager", "make-read", "vmgr" );
* mgrp = mgr;
return 0;
diff --git a/libs/vdb/delta_average.c b/libs/vdb/delta_average.c
new file mode 100644
index 0000000..a00e1eb
--- /dev/null
+++ b/libs/vdb/delta_average.c
@@ -0,0 +1,297 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vdb/extern.h>
+
+#include <vdb/xform.h>
+#include <klib/rc.h>
+
+#include "xform-priv.h"
+#include "blob-priv.h"
+#include "blob-headers.h"
+#include "blob.h"
+#include "page-map.h"
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+
+/* Create
+ *
+ * Create a new blob. A new data buffer is sized to
+ * 'element_count' * sizeof datatype; its contents are
+ * uninitialized.
+ */
+static
+rc_t VBlobCreateEncode ( VBlob **blobp, const VBlob *in, uint32_t max_rl_bytes,uint8_t *avg, uint32_t elem_bytes )
+{
+ rc_t rc = VBlobNew ( blobp, in -> start_id, in -> stop_id, "delta_average" );
+ if ( rc == 0 )
+ {
+ VBlob *blob = * blobp;
+ rc = PageMapAddRef ( in -> pm );
+ if(rc == 0) {
+ blob->pm = in -> pm ;
+ if(max_rl_bytes > 0){
+ rc = KDataBufferMake ( & blob -> data, in -> data . elem_bits, in -> data . elem_count );
+ } else {
+ rc = KDataBufferSub(&in->data, &blob->data, 0, UINT64_MAX);
+ }
+ if ( rc == 0 ){
+ rc = BlobHeadersCreateChild(in->headers, &blob->headers);
+ if ( rc == 0) {
+ VBlobHeader *hdr = BlobHeadersGetHdrWrite(blob->headers);
+ assert(hdr!=NULL);
+ if(hdr != 0){
+ int i;
+ VBlobHeaderSetVersion (hdr, 1);
+ rc = VBlobHeaderArgPushTail(hdr, max_rl_bytes);
+ assert(rc == 0);
+ rc = VBlobHeaderArgPushTail(hdr, elem_bytes);
+ assert(rc == 0);
+ for(i=0; i< max_rl_bytes; i++){
+ rc = VBlobHeaderOpPushTail(hdr,avg[i]);
+ assert(rc==0);
+ }
+ blob -> byte_order = in -> byte_order;
+ VBlobHeaderRelease(hdr);
+ return 0;
+ }
+ }
+ }
+ PageMapRelease( blob->pm);
+ }
+ VBlobRelease ( blob );
+ * blobp = NULL;
+ }
+ return rc;
+}
+
+static
+rc_t VBlobCreateDecode ( VBlob **blobp, const VBlob *in, uint32_t *max_rl_bytes,uint8_t **avg, uint32_t *elem_bytes)
+{
+ rc_t rc = VBlobNew ( blobp, in -> start_id, in -> stop_id, "undelta_average" );
+ if ( rc == 0 )
+ {
+ VBlob *blob = * blobp;
+ rc = PageMapAddRef ( in -> pm );
+ if(rc == 0) {
+ VBlobHeader *hdr;
+ blob->pm = in -> pm ;
+ blob->headers = (BlobHeaders *)BlobHeadersGetNextFrame(in->headers);
+ BlobHeadersAddRef(blob->headers);
+ hdr = BlobHeadersGetHeader(in->headers);
+ if(hdr || VBlobHeaderVersion(hdr)!=1) {
+ int64_t len;
+ int64_t eb;
+ rc = VBlobHeaderArgPopHead(hdr, &len);
+ if( rc == 0)
+ rc = VBlobHeaderArgPopHead(hdr, &eb);
+ if( rc == 0){
+ *max_rl_bytes=len;
+ *elem_bytes = eb;
+ if(len > 0){
+ rc = KDataBufferMake ( & blob -> data, in -> data . elem_bits, in -> data . elem_count );
+ if ( rc == 0){
+ *avg=malloc(len);
+ if(*avg){
+ int i;
+ for(i=0;i<len && rc == 0;i++){
+ rc = VBlobHeaderOpPopHead(hdr,(*avg)+i);
+ }
+ if(rc == 0){
+ VBlobHeaderRelease(hdr);
+ return 0;
+ } else {
+ rc = RC(rcVDB, rcFunction, rcExecuting, rcHeader, rcCorrupt) ;
+ }
+ } else {
+ rc = RC(rcVDB, rcFunction, rcExecuting, rcMemory, rcExhausted) ;
+ }
+ }
+ } else {
+ rc = KDataBufferSub(&in->data, &blob->data, 0, UINT64_MAX);
+ if(rc == 0){
+ VBlobHeaderRelease(hdr);
+ return 0;
+ }
+ }
+ VBlobHeaderRelease(hdr);
+ } else {
+ rc = RC(rcVDB, rcFunction, rcExecuting, rcHeader, rcCorrupt) ;
+ }
+ } else {
+ rc = RC(rcVDB, rcFunction, rcExecuting, rcHeader, rcCorrupt) ;
+ }
+ PageMapRelease( blob->pm);
+ }
+ VBlobRelease ( blob );
+ * blobp = NULL;
+ }
+ return rc;
+}
+
+static
+rc_t CC undelta_average ( void *self, const VXformInfo *info, int64_t row_id,
+ VBlob **rslt, uint32_t argc, const VBlob *argv [] )
+{
+ uint32_t max_rl_bytes;
+ uint8_t *avg = NULL;
+ uint32_t elem_bytes;
+ /* input blob - schema assures us that it is ready to go */
+ const VBlob *in = argv [ 0 ];
+ /* allocate output blob of same size */
+ rc_t rc = VBlobCreateDecode ( rslt, in,&max_rl_bytes,&avg,&elem_bytes );
+ if(rc == 0 && max_rl_bytes > 0){
+ uint8_t *dst = (*rslt)->data.base; /** destination pointer **/
+ uint8_t *src = in -> data.base;
+ int i,j,k;
+ PageMap *pm = in->pm;
+
+ for(i=j=0,src = in -> data.base;i<pm->leng_recs;i++){
+ row_count_t leng_run=pm->leng_run[i];
+ elem_count_t len = pm->length[i];
+ assert(len<=max_rl_bytes);
+ while(leng_run > 0){
+ for(k=0;k<len*elem_bytes;k++,src++,dst++){
+ dst[0] = avg[k] - src[0]; /** symmetrical to encode **/
+ }
+ assert(leng_run >= (pm->data_run?pm->data_run[j]:1));
+ leng_run -= pm->data_run?pm->data_run[j]:1;
+ j++;
+ }
+ }
+
+ }
+ if(avg) free(avg);
+ return rc;
+}
+
+VTRANSFACT_BUILTIN_IMPL ( vdb_undelta_average, 1, 0, 0 )
+ ( const void *self, const VXfactInfo *info, VFuncDesc *rslt,
+ const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ VFUNCDESC_INTERNAL_FUNCS ( rslt ) -> bfN = undelta_average;
+ rslt -> variant = vftBlobN;
+ return 0;
+}
+
+static
+rc_t CC delta_average ( void *self, const VXformInfo *info, int64_t row_id,
+ VBlob **rslt, uint32_t argc, const VBlob *argv [] )
+{
+ rc_t rc;
+ /* input blob - schema assures us that it is ready to go */
+ const VBlob *in = argv [ 0 ];
+ const PageMap *pm = in->pm;
+ uint8_t *src;
+ elem_count_t min_row_len,max_row_len;
+ uint64_t min_rl_bytes,max_rl_bytes;
+ uint32_t *cnts;
+ uint32_t elem_bytes;
+ int i,j,k;
+ uint8_t *avg=NULL;
+ uint64_t sum_rle;
+ uint8_t last;
+
+ if(pm->row_count < 256 || (in->data.elem_bits & 7)!=0){
+ return VBlobCreateEncode ( rslt, in, 0,NULL,0 );
+ }
+ elem_bytes = in->data.elem_bits >> 3;
+ PageMapRowLengthRange(pm,&min_row_len,&max_row_len);
+ if(max_row_len > 1024){
+ return VBlobCreateEncode ( rslt, in, 0,NULL,0 );
+ }
+ /*** rescale to bytes **/
+ min_rl_bytes = (min_row_len * in->data.elem_bits) >> 3;
+ max_rl_bytes = (max_row_len * in->data.elem_bits) >> 3;
+
+ cnts=calloc(sizeof(*cnts),256*max_rl_bytes); /** computing counts of values **/
+ avg=malloc(max_rl_bytes);
+
+ /** collect sums and averages ***/
+ /** using tight loop instead of iterators **/
+ for(i=j=0,src = in -> data.base, sum_rle=0,last=0;i<pm->leng_recs;i++){
+ row_count_t leng_run=pm->leng_run[i];
+ elem_count_t len = pm->length[i];
+ assert(len<=max_rl_bytes);
+ while(leng_run > 0){
+ for(k=0;k<len*elem_bytes;k++,src++){
+ if(last==src[0]) sum_rle++;
+ cnts[256*k+src[0]]++;
+ last=src[0];
+ }
+ assert(leng_run >= (pm->data_run?pm->data_run[j]:1));
+ leng_run -= pm->data_run?pm->data_run[j]:1;
+ j++;
+ }
+ }
+ if(sum_rle * 10 > elem_bytes * in->data.elem_count * 3){/** total number of repetitions is high - leave it for zlib RLE ***/
+ free(cnts);
+ free(avg);
+ return VBlobCreateEncode(rslt,in,0,NULL,0);
+ }
+
+ for(i=0;i<max_rl_bytes;i++){
+ avg[i] = 0;
+ for(j=1;j<256;j++){
+ if(cnts[256*i+j] > cnts[256*i+avg[i]]){
+ avg[i]=j;
+ }
+ }
+ }
+ rc = VBlobCreateEncode ( rslt, in, max_rl_bytes,avg,elem_bytes );
+ if (rc == 0 ){
+ uint8_t *dst = (*rslt)->data.base; /** destination pointer **/
+ for(i=j=0,src = in -> data.base;i<pm->leng_recs;i++){
+ row_count_t leng_run=pm->leng_run[i];
+ elem_count_t len = pm->length[i];
+ assert(len<=max_rl_bytes);
+ while(leng_run > 0){
+ for(k=0;k < len*elem_bytes;k++,src++,dst++){
+ dst[0] = avg[k] - src[0]; /** will do it in this direction **/
+ }
+ assert(leng_run >= (pm->data_run?pm->data_run[j]:1));
+ leng_run -= pm->data_run?pm->data_run[j]:1;
+ j++;
+ }
+ }
+ }
+ if(cnts) free(cnts);
+ if(avg) free(avg);
+ return rc;
+}
+
+VTRANSFACT_BUILTIN_IMPL ( vdb_delta_average, 1, 0, 0 )
+ ( const void *self, const VXfactInfo *info, VFuncDesc *rslt,
+ const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ VFUNCDESC_INTERNAL_FUNCS ( rslt ) -> bfN = delta_average;
+ rslt -> variant = vftBlobN;
+ return 0;
+}
diff --git a/libs/vdb/libvdb.vers b/libs/vdb/libvdb.vers
index 530cdd9..2714f53 100644
--- a/libs/vdb/libvdb.vers
+++ b/libs/vdb/libvdb.vers
@@ -1 +1 @@
-2.2.4
+2.6.4
diff --git a/libs/vdb/libvdb.vers.h b/libs/vdb/libvdb.vers.h
deleted file mode 100644
index 926364c..0000000
--- a/libs/vdb/libvdb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBVDB_VERS 0x02020004
diff --git a/libs/vdb/libwvdb.vers b/libs/vdb/libwvdb.vers
index 530cdd9..2714f53 100644
--- a/libs/vdb/libwvdb.vers
+++ b/libs/vdb/libwvdb.vers
@@ -1 +1 @@
-2.2.4
+2.6.4
diff --git a/libs/vdb/libwvdb.vers.h b/libs/vdb/libwvdb.vers.h
deleted file mode 100644
index e22dd0f..0000000
--- a/libs/vdb/libwvdb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWVDB_VERS 0x02020004
diff --git a/libs/vdb/linker-cmn.c b/libs/vdb/linker-cmn.c
index a1ed68e..a68e6de 100644
--- a/libs/vdb/linker-cmn.c
+++ b/libs/vdb/linker-cmn.c
@@ -34,6 +34,7 @@
#include <kfs/directory.h>
#include <kfs/dyload.h>
+#include <kfs/kfs-priv.h>
#include <klib/symbol.h>
#include <klib/symtab.h>
#include <klib/rc.h>
@@ -619,3 +620,27 @@ rc_t VLinkerFindUntyped ( VLinker *self, const KDlset *libs,
}
return rc;
}
+
+
+/* ListExternalSchemaModules
+ */
+rc_t VLinkerListExternalSchemaModules ( const VLinker *self, struct KNamelist **listp )
+{
+ rc_t rc;
+
+ assert ( listp != NULL );
+ if ( self == NULL )
+ rc = RC ( rcVDB, rcDylib, rcListing, rcSelf, rcNull );
+ else
+ {
+ KDlset *libs;
+ rc = VLinkerOpen ( self, & libs );
+ if ( rc == 0 )
+ {
+ rc = KDlsetList ( libs, listp );
+ KDlsetRelease ( libs );
+ }
+ }
+
+ return rc;
+}
diff --git a/libs/vdb/linker-int.c b/libs/vdb/linker-int.c
index afb8886..d1a614f 100644
--- a/libs/vdb/linker-int.c
+++ b/libs/vdb/linker-int.c
@@ -34,6 +34,7 @@
#include <klib/token.h>
#include <klib/symtab.h>
#include <klib/symbol.h>
+#include <klib/out.h>
#include <klib/rc.h>
#include <sysalloc.h>
@@ -54,6 +55,8 @@ extern VTRANSFACT_DECL ( vdb_merge );
extern VTRANSFACT_DECL ( vdb_split );
extern VTRANSFACT_DECL ( vdb_transpose );
extern VTRANSFACT_DECL ( vdb_detranspose );
+extern VTRANSFACT_DECL ( vdb_delta_average );
+extern VTRANSFACT_DECL ( vdb_undelta_average );
extern VTRANSFACT_DECL ( meta_read );
extern VTRANSFACT_DECL ( meta_value );
extern VTRANSFACT_DECL ( meta_attr_read );
@@ -81,15 +84,13 @@ VTRANSFACT_BUILTIN_IMPL ( vdb_select, 1, 0, 0 ) ( const void *self,
/* temporary silly stuff
*/
-#include <stdio.h>
-#include "fmtdef.h"
static
rc_t CC hello_func ( void *self, const VXformInfo *info, int64_t row_id,
VRowResult *rslt, uint32_t argc, const VRowData argv [] )
{
char *func_hello = self;
- printf ( "%s - row id %" LD64 "\n", func_hello, row_id );
+ OUTMSG (( "%s - row id %ld\n", func_hello, row_id ));
return 0;
}
@@ -114,7 +115,7 @@ VTRANSFACT_BUILTIN_IMPL ( vdb_hello, 1, 0, 0 ) ( const void *self,
rslt -> u . rf = hello_func;
rslt -> variant = vftRow;
- printf ( "%s - %u factory params, %u function params\n", fact_hello, cp -> argc, dp -> argc );
+ OUTMSG (( "%s - %u factory params, %u function params\n", fact_hello, cp -> argc, dp -> argc ));
return 0;
}
@@ -208,6 +209,8 @@ rc_t VLinkerInitFactoriesRead ( VLinker *self, KSymTable *tbl, const SchemaEnv
{ vdb_split, "vdb:split" },
{ vdb_transpose, "vdb:transpose" },
{ vdb_detranspose, "vdb:detranspose" },
+ { vdb_delta_average, "vdb:delta_average" },
+ { vdb_undelta_average, "vdb:undelta_average" },
{ meta_read, "meta:read" },
{ meta_value, "meta:value" },
{ meta_attr_read, "meta:attr:read" },
diff --git a/libs/vdb/linker-priv.h b/libs/vdb/linker-priv.h
index fdf6566..6144cd5 100644
--- a/libs/vdb/linker-priv.h
+++ b/libs/vdb/linker-priv.h
@@ -65,6 +65,7 @@ extern "C" {
*/
struct KSymbol;
struct KSymTable;
+struct KNamelist;
struct KDyld;
struct KDlset;
struct KSymAddr;
@@ -207,6 +208,12 @@ rc_t VLinkerFindUntyped ( VLinker *self, struct KDlset const *libs,
VUntypedTableTest *func, struct SFunction const *proto );
+/* ListExternalSchemaModules
+ */
+rc_t VLinkerListExternalSchemaModules ( const VLinker *self,
+ struct KNamelist **list );
+
+
/*--------------------------------------------------------------------------
* LFactory
* describes an external C function factory
diff --git a/libs/vdb/meta-attr-write.c b/libs/vdb/meta-attr-write.c
index 5cbdd64..2a2421c 100644
--- a/libs/vdb/meta-attr-write.c
+++ b/libs/vdb/meta-attr-write.c
@@ -27,13 +27,13 @@
#include <vdb/extern.h>
#include <klib/defs.h>
+#include <klib/printf.h>
#include <klib/rc.h>
#include <vdb/table.h>
#include <vdb/xform.h>
#include <vdb/schema.h>
#include <kdb/meta.h>
#include <klib/data-buffer.h>
-#include <fmtdef.h>
#include <sysalloc.h>
#include "xform-priv.h"
@@ -56,18 +56,21 @@ static void CC self_whack( void *vp ) {
free( vp );
}
-static rc_t meta_attr_write_fmt( self_t *self, const char *fmt, ... ) {
- int n;
+static rc_t meta_attr_write_fmt( self_t *self, const char *fmt, ... )
+{
+ rc_t rc;
+ size_t n;
char sbuf[4096];
va_list va;
va_start(va, fmt);
- n = vsnprintf(sbuf, sizeof(sbuf), fmt, va);
+ rc = string_vprintf(sbuf, sizeof(sbuf), & n, fmt, va);
va_end(va);
- if (n < 0 || n >= sizeof sbuf)
- return RC(rcVDB, rcFunction, rcExecuting, rcParam, rcExcessive);
- return KMDataNodeWriteAttr(self->node, self->name, sbuf);
+ if ( rc == 0 )
+ rc = KMDataNodeWriteAttr(self->node, self->name, sbuf);
+
+ return rc;
}
static
@@ -326,7 +329,7 @@ rc_t CC meta_attr_write_I64(
return rc;
*(int64_t *)rslt->data->base = value;
- rc = meta_attr_write_fmt(self, "%" LD64, value);
+ rc = meta_attr_write_fmt(self, "%ld", value);
if (rc)
return rc;
@@ -355,7 +358,7 @@ rc_t CC meta_attr_write_U64(
return rc;
*(uint64_t *)rslt->data->base = value;
- rc = meta_attr_write_fmt(self, "%" LU64, value);
+ rc = meta_attr_write_fmt(self, "%lu", value);
if (rc)
return rc;
diff --git a/libs/vdb/page-map.c b/libs/vdb/page-map.c
index 847c151..08c0066 100644
--- a/libs/vdb/page-map.c
+++ b/libs/vdb/page-map.c
@@ -34,8 +34,6 @@
#include <klib/pack.h>
#include <klib/vlen-encode.h>
-#include <klib/refcount.h>
-#include <klib/data-buffer.h>
#include <sysalloc.h>
#include "page-map.h"
@@ -51,129 +49,475 @@
* I.e. if two identical rows are stored sequentially
*/
-typedef uint32_t pm_size_t;
-struct PageMap {
- /* memory allocation object for length[], leng_run[], data_run[] */
- KDataBuffer cstorage;
- /* memory allocation object for explength[], exp_offset[] */
- KDataBuffer estorage;
-
- /* array of row lengths
- * has leng_recs elements
- * is sized to reserve_leng elements
- * == storage.base
- */
- elem_count_t *length;
-
- /* array of run lengths of row lengths
- * has leng_recs elements
- * is sized to reserve_leng elements
- * == length + reserve_leng
- */
- row_count_t *leng_run;
-
- /* array of repeat counts of data
- * has data_recs elements
- * is sized to reserve_data elements
- * == leng_run + reserve_leng
- */
- row_count_t *data_run;
-
- elem_count_t *exp_length;
- elem_count_t *exp_offset;
- row_count_t *exp_repeat;
- pm_size_t exp_length_last; /* index of last length expanded */
- pm_size_t exp_offset_last; /* index of last offset expanded */
- elem_count_t exp_offset_next;
-
- pm_size_t leng_recs; /* number of valid elements in length[] and leng_run[] */
- pm_size_t data_recs; /* number of valid elements in data_run[] */
- pm_size_t reserve_leng; /* number of allocated elements in length[] and leng_run[] */
- pm_size_t reserve_data; /* number of allocated elements in data_run[] */
- pm_size_t start_valid; /* the expanded array contains valid data upto start_valid */
- row_count_t row_count; /* total number of rows in page map */
- KRefcount refcount;
-};
#define VALIDATE_PAGEMAPS 0
+#define PAGEMAP_STATISTICS 0
+#if PAGEMAP_STATISTICS
+static struct {
+ size_t currentFootprint;
+ size_t maxFootprint;
+ size_t currentWaste;
+ size_t maxWaste;
+ unsigned alive;
+ unsigned maxAlive;
+ unsigned create;
+ unsigned createStatic;
+ unsigned createFixedRow;
+ unsigned createSingle;
+ unsigned grows;
+ unsigned expands;
+ unsigned expandCalls;
+ unsigned appends;
+} pm_stats;
+#endif
elem_count_t PageMapLastLength(const PageMap *cself) {
return cself->leng_recs > 0 ? cself->length[cself->leng_recs - 1] : 0;
}
-static rc_t PageMapExpand( const PageMap *cself, row_count_t upto ) {
- if (cself->start_valid < upto) {
- PageMap *self = (PageMap *)cself;
- elem_count_t *offset;
- row_count_t *repeat;
- pm_size_t i;
- pm_size_t j;
- pm_size_t m;
-
- if (cself->estorage.elem_count < cself->row_count) {
- rc_t rc;
-
- self->exp_length_last = self->exp_offset_last = self->exp_offset_next = 0;
- self->start_valid = 0;
-
- self->estorage.elem_bits = 32 * 3;
- rc = KDataBufferResize(&self->estorage, cself->row_count * 2);
- if (rc) return rc;
-
- self->exp_offset = self->estorage.base;
- self->exp_repeat = &self->exp_offset[self->estorage.elem_count];
- self->exp_length = &self->exp_repeat[self->estorage.elem_count];
- }
- offset = self->exp_offset;
- repeat = self->exp_repeat;
-
- if (cself->leng_recs > 1) {
- elem_count_t *length = self->exp_length;
- elem_count_t n = cself->exp_offset_next;
-
- j = cself->start_valid;
- for (i = cself->exp_length_last; i != cself->leng_recs; ++i) {
- for (m = 0; m != cself->leng_run[i]; ++m, ++j) {
- length[j] = cself->length[i];
- }
- }
-
- j = cself->start_valid;
- for (i = cself->exp_offset_last; i != cself->data_recs; ++i) {
- elem_count_t temp = n;
-
- n += length[j];
- for (m = 0; m != cself->data_run[i]; ++m, ++j) {
- offset[j] = temp;
- repeat[j] = cself->data_run[i] - m;
- }
- }
- self->exp_offset_next = n; /* where to start next time */
+
+
+static rc_t PageMapRegionExpand(PageMap *self,pm_expand_region_type_t TYPE,row_count_t numrows,elem_count_t length,elem_count_t data_offset)
+{
+ rc_t rc;
+ if( self->exp_rgn_last == 0 /** not started **/
+ || self->exp_rgn_last->type != TYPE /** another type **/
+ || (TYPE == PM_REGION_EXPAND_SAMEDATA && self->exp_rgn_last->data_offset != data_offset) /** not the same data */
+ || (TYPE!=PM_REGION_EXPAND_FULL && self->exp_rgn_last->length != length) /** all non-full types are length-dependant**/
+ ){ /** New region **/
+ self->exp_rgn_cnt++;
+ rc = KDataBufferResize(&self->istorage, self->exp_rgn_cnt);
+ if(rc) return rc;
+
+ self->exp_rgn_last = (PageMapRegion *)self->istorage.base + self->exp_rgn_cnt -1;
+ self->exp_rgn_last->type=TYPE;
+ self->exp_rgn_last->start_row=self->exp_row_last;
+ self->exp_rgn_last->data_offset = data_offset;
+ self->exp_rgn_last->length = length;
+ self->exp_rgn_last->numrows = numrows;
+ self->exp_rgn_last->expanded = false;
+ } else { /** continue with existing region **/
+ if(TYPE == PM_REGION_EXPAND_FULL){
+ row_count_t i;
+ elem_count_t *base;
+ uint64_t old_cnt = self->dstorage.elem_count;
+ uint64_t new_cnt = old_cnt + 2*numrows;
+ if(!self->exp_rgn_last->expanded){/*** need to start expansion ***/
+ new_cnt += 2*self->exp_rgn_last->numrows; /*** need to catch up **/
+ rc = KDataBufferResize(&self->dstorage, new_cnt);
+ if(rc) return rc;
+ base = (elem_count_t *)self->dstorage.base + old_cnt;
+ for(i=0;i<self->exp_rgn_last->numrows;i++){
+ base[2*i] = self->exp_rgn_last->length;
+ base[2*i+1] = self->exp_rgn_last->data_offset;
+ }
+ self->exp_rgn_last->data_offset = old_cnt;
+ self->exp_rgn_last->expanded=true;
+ } else {
+ rc = KDataBufferResize(&self->dstorage, new_cnt);
+ if(rc) return rc;
+ base = (elem_count_t *)self->dstorage.base + self->exp_rgn_last->data_offset;
+ }
+ base += 2*self->exp_rgn_last->numrows;
+ for(i=0;i<numrows;i++){
+ base[2*i] = length;
+ base[2*i+1] = data_offset;
+ }
+ } else if(TYPE == PM_REGION_EXPAND_SAMELEN){
+ row_count_t i;
+ elem_count_t *base;
+ uint64_t old_cnt = self->dstorage.elem_count;
+ uint64_t new_cnt = old_cnt + numrows;
+ if(!self->exp_rgn_last->expanded){/*** need to start expansion ***/
+ new_cnt += self->exp_rgn_last->numrows; /*** need to catch up **/
+ rc = KDataBufferResize(&self->dstorage, new_cnt);
+ if(rc) return rc;
+ base = (elem_count_t *)self->dstorage.base + old_cnt;
+ for(i=0;i<self->exp_rgn_last->numrows;i++){
+ base[i] = self->exp_rgn_last->data_offset;
+ }
+ self->exp_rgn_last->data_offset = old_cnt;
+ self->exp_rgn_last->expanded=true;
+ } else {
+ rc = KDataBufferResize(&self->dstorage, new_cnt);
+ if(rc) return rc;
+ base = (elem_count_t *)self->dstorage.base + self->exp_rgn_last->data_offset;
+ }
+ base += self->exp_rgn_last->numrows;
+ for(i=0;i<numrows;i++){
+ base[i] = data_offset;
+ }
+ }
+ self->exp_rgn_last->numrows += numrows;
+ }
+ return 0;
+}
+
+rc_t PageMapPreExpandFull(const PageMap *cself, row_count_t upto) /*** mostly for use as a temporary pagemap ***/
+{
+ rc_t rc=0;
+ if(upto > 0){
+ PageMap *self = (PageMap *)cself;
+ assert(self->exp_rgn_last == 0);
+ rc = KDataBufferResize(&self->istorage, 1); /** one and only one pagemap **/
+ if(rc) return rc;
+
+ self->exp_rgn_last = (PageMapRegion *)self->istorage.base + self->exp_rgn_cnt;
+ self->exp_rgn_cnt = ++self->exp_dr_last;
+
+ self->exp_rgn_last->data_offset = 0;
+ rc=KDataBufferResize(&self->dstorage, upto*2);
+ if(rc) return rc;
+ self->exp_rgn_last->start_row = 0;
+ self->exp_rgn_last->numrows = 0;
+ self->exp_rgn_last->type = PM_REGION_EXPAND_FULL;
+ self->exp_rgn_last->expanded = true;
+ self->pre_exp_row_count = upto;
+ }
+ return rc;
+}
+
+rc_t PageMapExpandFull(const PageMap *cself)
+{
+ rc_t rc;
+ PageMap *self = (PageMap *)cself;
+ if(self->leng_recs == 1){
+ if( self->data_recs == 1 /* static */
+ || self->random_access ){
+ return 0;
+ } else if(self->data_recs == self->row_count && !self->random_access){ /** equidistant **/
+ rc=PageMapRegionExpand(self,PM_REGION_EXPAND_EQUIDISTANT,self->row_count,self->length[0],0);
+ if(rc) return rc;
+ self->exp_data_offset_last += self->row_count*self->length[0];
+ self->exp_row_last = self->row_count ;
+ self->exp_dr_last = self->row_count;
+ self->exp_lr_last = 1;
+ self->exp_lr_used = self->row_count;
+ return 0;
+ }
}
- else {
- j = cself->start_valid;
- for (i = cself->exp_offset_last; i != cself->data_recs; ++i) {
- for (m = 0; m != cself->data_run[i]; ++m, ++j) {
- offset[j] = i * cself->length[0];
- repeat[j] = cself->data_run[i] - m;
- }
- }
+ return 0;
+/*** OTHER VARIANTS ***
+ return PageMapExpand(cself, cself->row_count);
+ return PageMapExpand(cself, cself->row_count < 1024?cself->row_count:1024);
+******************/
+}
+
+rc_t PageMapExpand(const PageMap *cself, row_count_t upto)
+{
+ rc_t rc;
+ PageMap *self = (PageMap *)cself;
+#define LENG_RUN_TRIGGER 8
+#define DATA_RUN_TRIGGER 8
+#define EQUI_RUN_TRIGGER 8
+ if( self->leng_recs == 1 && self->row_count > self->data_recs*12/10 && !self->random_access){ /*** Shortcut to make tight loop ***/
+
+ if(self->exp_rgn_last == 0){
+ rc = KDataBufferResize(&self->istorage, self->data_recs);
+ if(rc) return rc;
+ }
+ self->exp_rgn_last = (PageMapRegion *)self->istorage.base + self->exp_rgn_cnt;
+ while(self->exp_dr_last < self->data_recs && self->exp_row_last <= upto + 128){
+ self->exp_rgn_last->start_row = self->exp_row_last;
+ self->exp_rgn_last->data_offset = self->length[0]*self->exp_dr_last;
+ self->exp_rgn_last->numrows = self->data_run?self->data_run[self->exp_dr_last]:1;
+ self->exp_row_last += self->data_run?self->data_run[self->exp_dr_last]:1;
+ self->exp_rgn_last->type = PM_REGION_EXPAND_SAMEDATA;
+ self->exp_rgn_last->length = self->length[0];
+ self->exp_rgn_last->expanded = false;
+ self->exp_dr_last ++;
+ self->exp_rgn_last ++;
+ }
+ self->exp_rgn_cnt = self->exp_dr_last;
+ } else for(;self->exp_lr_last < self->leng_recs && self->exp_dr_last < self->data_recs && self->exp_row_last <= upto + 128;){
+ row_count_t leng_run=self->leng_run[self->exp_lr_last] - self->exp_lr_used;
+ elem_count_t length =self->length[self->exp_lr_last];
+ if(leng_run == 0) {
+ self->exp_lr_last++;
+ self->exp_lr_used=0;
+ continue;
+ }
+ if(leng_run >= LENG_RUN_TRIGGER && !self->random_access){
+ while(leng_run > 0 && self->exp_row_last <= upto + 128){
+ row_count_t data_run=self->data_run?self->data_run[self->exp_dr_last]:1;
+ assert(leng_run >= data_run);/** data runs should have the same lengths **/
+ assert(data_run > 0);
+ if(data_run >= DATA_RUN_TRIGGER){
+ rc=PageMapRegionExpand(self,PM_REGION_EXPAND_SAMEDATA,data_run, length,self->exp_data_offset_last);
+ if(rc) return rc;
+ assert(leng_run >= data_run);
+ leng_run -= data_run;
+ self->exp_lr_used += data_run;
+ self->exp_row_last+= data_run;
+ self->exp_dr_last++;
+ self->exp_data_offset_last += length;
+ } else if( /**** quick check if all remaining rows are equidistant ****/
+ self->exp_lr_last == self->leng_recs - 1 /*** last leng_run ***/
+ && self->row_count - self->exp_row_last == self->data_recs - self->exp_dr_last /*** all remaining data_runs are 1 ***/
+ && self->row_count - self->exp_row_last > EQUI_RUN_TRIGGER){
+ assert( leng_run == self->row_count - self->exp_row_last);
+ assert(data_run == 1);
+ rc=PageMapRegionExpand(self,PM_REGION_EXPAND_EQUIDISTANT,leng_run, length,self->exp_data_offset_last);
+ if(rc) return rc;
+ self->exp_data_offset_last += leng_run*length;
+ self->exp_row_last = self->row_count ;
+ self->exp_dr_last = self->data_recs;
+ self->exp_lr_last = self->leng_recs;
+ self->exp_lr_used += leng_run;
+ leng_run = 0;
+
+ } else {
+ if( data_run == 1){
+ row_count_t data_run_unique;
+ for( data_run_unique =0;
+ data_run_unique < leng_run && ((self->data_run==NULL)||self->data_run[self->exp_dr_last+data_run_unique]==1);
+ data_run_unique++){}
+ if(data_run_unique >= EQUI_RUN_TRIGGER){
+ rc=PageMapRegionExpand(self,PM_REGION_EXPAND_EQUIDISTANT,data_run_unique,length,self->exp_data_offset_last);
+ self->exp_dr_last += data_run_unique;
+ self->exp_data_offset_last += data_run_unique*length;
+ assert(leng_run >= data_run_unique);
+ leng_run -= data_run_unique;
+ self->exp_lr_used += data_run_unique;
+ self->exp_row_last += data_run_unique;
+ } else while(data_run_unique){
+ rc=PageMapRegionExpand(self,PM_REGION_EXPAND_SAMELEN,data_run,length,self->exp_data_offset_last);
+ if(rc) return rc;
+ assert(leng_run > 0);
+ leng_run --;
+ self->exp_lr_used ++;
+ self->exp_row_last++;
+ self->exp_dr_last++;
+ self->exp_data_offset_last += length;
+ data_run_unique--;
+ }
+ } else {
+ rc=PageMapRegionExpand(self,PM_REGION_EXPAND_SAMELEN,data_run,length,self->exp_data_offset_last);
+ if(rc) return rc;
+ assert(leng_run >= data_run);
+ leng_run -= data_run;
+ self->exp_lr_used += data_run;
+ self->exp_row_last+= data_run;
+ self->exp_dr_last++;
+ self->exp_data_offset_last += length;
+ }
+ }
+ }
+ assert(self->exp_row_last <= self->row_count);
+ } else {
+ while(leng_run > 0){
+ row_count_t data_run=cself->data_run?cself->data_run[self->exp_dr_last]:1;
+ assert(leng_run >= data_run);/** data runs should have the same lengths **/
+ if(self->random_access){
+ rc=PageMapRegionExpand(self,PM_REGION_EXPAND_FULL,data_run,length,self->data_offset[self->exp_row_last]);
+ self->exp_data_offset_last = self->data_offset[self->exp_row_last] + length;
+ } else {
+ rc=PageMapRegionExpand(self,PM_REGION_EXPAND_FULL,data_run,length,self->exp_data_offset_last);
+ self->exp_data_offset_last += length;
+ }
+ if(rc) return rc;
+ self->exp_row_last += data_run;
+ assert(leng_run >= data_run);
+ leng_run -= data_run;
+ self->exp_lr_used += data_run;
+ self->exp_dr_last++;
+ }
+ }
+ }
+ return 0;
+}
+
+static rc_t PageMapFindRegion(const PageMap *cself,uint64_t row,PageMapRegion **pmr)
+{
+ /*** in PageMap rows are 0-based **/
+ rc_t rc;
+ pm_size_t left,right,i_rgn;
+ if(row >= cself->row_count )
+ return RC (rcVDB, rcPagemap, rcSearching, rcRow, rcNotFound );
+ if(cself -> exp_row_last <= row){
+ rc=PageMapExpand(cself,row);
+ if(rc) return rc;
+ }
+
+ if(cself->exp_rgn_cnt > 1){
+ i_rgn = cself->i_rgn_last;
+ left = 0;
+ right = cself->exp_rgn_cnt - 1;
+ while(right > left){
+ PageMapRegion* rgn= (PageMapRegion*)cself->istorage.base + i_rgn;
+ assert(i_rgn < cself->exp_rgn_cnt);
+ if(row < rgn->start_row){
+ right = i_rgn-1;
+ i_rgn = (left + right) / 2;
+ } else if(row == rgn->start_row + rgn->numrows){ /*** special case for positive sequentual scans ***/
+ i_rgn++;
+ } else if(row > rgn->start_row + rgn->numrows){
+ left = i_rgn+1;
+ i_rgn = (left + right + 1) / 2;
+ } else {
+ break;
+ }
+ }
+ } else {
+ i_rgn = 0;
+ }
+ {
+ PageMap *self = (PageMap *)cself;
+ self->i_rgn_last = i_rgn;
+ self->rgn_last = (PageMapRegion*)self->istorage.base+cself->i_rgn_last;
+ }
+ assert(cself->rgn_last->start_row <= row);
+ assert(cself->rgn_last->start_row + cself->rgn_last->numrows > row);
+ if(pmr) *pmr=(PageMapRegion*)cself->istorage.base + i_rgn;
+ return 0;
+}
+
+static rc_t PageMapRegionGetData(const PageMapRegion *cself,const elem_count_t *exp_base,uint64_t row,uint32_t * data_offset,uint32_t * data_length,uint32_t * repeat_count)
+{
+ if(row < cself->start_row || row >= cself->start_row + cself->numrows)
+ return RC (rcVDB, rcPagemap, rcSearching, rcRow, rcNotFound );
+
+ if(data_offset != NULL || data_length != NULL || repeat_count != NULL){
+ if(!cself->expanded){
+ if(data_length) *data_length=cself->length;
+ if(data_offset){
+ *data_offset=cself->data_offset;
+ if(cself->type == PM_REGION_EXPAND_EQUIDISTANT){
+ *data_offset += cself->length * (row - cself->start_row);
+ }
+ }
+ if(repeat_count) {
+ if(cself->type == PM_REGION_EXPAND_EQUIDISTANT) *repeat_count=1;
+ else *repeat_count = cself->numrows + cself->start_row - row;
+ }
+ } else switch(cself->type){
+ case PM_REGION_EXPAND_FULL:
+ {
+ row_count_t i = row - cself->start_row;
+ exp_base += cself->data_offset;
+ if(data_length) *data_length = exp_base[2*i];
+ if(data_offset) *data_offset = exp_base[2*i+1];
+ if(repeat_count){
+ int j;
+ for(j=i+1; j<cself->numrows
+ && exp_base[2*i] == exp_base[2*j]
+ && exp_base[2*i+1] == exp_base[2*j+1];j++){}
+ *repeat_count = j-i;
+ }
+ }
+ break;
+ case PM_REGION_EXPAND_SAMELEN:
+ if(data_length) *data_length=cself->length;
+ if(data_offset || repeat_count){
+ row_count_t i = row - cself->start_row;
+ exp_base += cself->data_offset;
+ if(data_offset) *data_offset = exp_base[i];
+ if(repeat_count){
+ int j;
+ for(j=i+1;j<cself->numrows && exp_base[i] == exp_base[j];j++){}
+ *repeat_count = j-i;
+ }
+ }
+ break;
+ default: /*** should not happen to anything but 2 above **/
+ return RC (rcVDB, rcPagemap, rcSearching, rcData, rcInconsistent );
+ }
+ }
+ return 0;
+}
+
+/*** This is a heavy-weight function which gets data by integration all the time - useful for debugging ****/
+static rc_t PageMapGetData_HW(const PageMap *cself,uint64_t row,uint32_t * data_offset,uint32_t * data_length,uint32_t * repeat_count)
+{
+ if(row >= cself->row_count)
+ return RC (rcVDB, rcPagemap, rcSearching, rcRow, rcNotFound );
+ if(data_offset != NULL || data_length != NULL || repeat_count != NULL){
+ uint64_t i,j,r;
+ uint32_t dto,dtl,dtr;
+ uint32_t leng_run,data_run;
+ r=dto=i=j=0;
+ leng_run=cself->leng_run[0];
+ while(1){
+ dtl = cself->length[i];
+ data_run=cself->data_run?cself->data_run[j]:1;
+ j++;
+ r+= data_run;
+ if(r > row){
+ dtr = r - row;
+ break;
+ }
+ dto += dtl;
+ leng_run -= data_run;
+ if(leng_run == 0){
+ i++;
+ leng_run=cself->leng_run[i];
+ }
+ }
+ if(data_length) *data_length=dtl;
+ if(data_offset) *data_offset=dto;
+ if(repeat_count) *repeat_count=dtr;
+ }
+ return 0;
+}
+/*** another function to help debugging ***/
+static int DEBUG_PageMapPrintSum(const PageMap *pm, uint32_t row)
+{
+ int i,r;
+ for(i=0,r=row; i < pm->data_recs && r > 0;r-=pm->data_run?pm->data_run[i]:1,i++){}
+ printf("Data recs= <%d>, rows_left = <%d>\n",i,r);
+ for(i=0,r=row; i < pm->leng_recs && r >0;r-=pm->leng_run[i++]){}
+ printf("Leng recs= <%d>, rows_left = <%d>\n",i,r);
+ return 0;
+}
+rc_t PageMapFindRow(const PageMap *cself,uint64_t row,uint32_t * data_offset,uint32_t * data_length,uint32_t * repeat_count)
+{
+ rc_t rc=0;
+ PageMapRegion *pmr;
+
+ if(cself->data_recs == 1){ /** static **/
+ if(repeat_count) *repeat_count = UINT32_MAX;
+ if(data_offset) *data_offset = 0;
+ if(data_length) *data_length = cself->length[0];
+ return 0;
}
- self->exp_length_last = cself->leng_recs; /* where to start next time */
- self->exp_offset_last = cself->data_recs; /* where to start next time */
-
- self->start_valid = j;
- }
- return 0;
+ if(cself->random_access && cself->leng_recs == 1){
+ if(row >= cself->data_recs)
+ return RC(rcVDB, rcPagemap, rcAccessing, rcRow, rcOutofrange);
+ if(data_length) *data_length = cself->length[0];
+ if(data_offset) *data_offset = cself->data_offset[row];
+ if(repeat_count){
+ uint64_t i;
+ for( i=row+1, repeat_count[0]=1; i < cself->data_recs && cself->data_offset[i] == cself->data_offset[row]; i++, repeat_count[0]++ ){}
+ }
+ return 0;
+ }
+
+ rc = PageMapFindRegion(cself,row,&pmr);
+ if(rc) return rc;
+
+ rc = PageMapRegionGetData(pmr,cself->dstorage.base,row,data_offset,data_length,repeat_count);
+ if(rc) return rc;
+
+#if _HEAVY_PAGEMAP_DEBUGGING
+ {
+ uint32_t dto,dtl,dtr;
+ rc = PageMapGetData_HW(cself,row,&dto,&dtl,&dtr);
+ assert(rc == 0);
+ if(data_length) assert(dtl==*data_length);
+ if(data_offset) assert(dto==*data_offset);
+ if(repeat_count) assert(dtr==*repeat_count);
+ }
+#endif
+ return 0;
}
rc_t PageMapNewIterator(const PageMap *self, PageMapIterator *lhs, uint64_t first_row, uint64_t num_rows)
{
rc_t rc;
- if (num_rows > self->row_count)
- num_rows = self->row_count;
+ if (first_row + num_rows > self->row_count)
+ num_rows = self->row_count - first_row;
#if _DEBUGGING
if (self->data_recs > 1) {
@@ -185,45 +529,96 @@ rc_t PageMapNewIterator(const PageMap *self, PageMapIterator *lhs, uint64_t firs
memset(lhs, 0, sizeof(*lhs));
- lhs->end_row = first_row + num_rows;
+#if _HEAVY_PAGEMAP_DEBUGGING
+ lhs->parent = self;
+#endif
+
+ lhs->last_row = first_row + num_rows;
lhs->cur_row = first_row;
-
- lhs->length = self->length;
-
- if (self->data_recs == 1) {
- lhs->variant = pmivConstant;
-
- return 0;
+ if(self->data_recs == 1){
+ lhs->repeat_count = (num_rows < UINT32_MAX)?num_rows:UINT32_MAX;
+ lhs->static_datalen = self->length[0];
+ return 0;
}
- if (self->leng_recs == 1 && self->data_recs == self->row_count) {
- lhs->variant = pmivVersion1;
-
- return 0;
+ if(self->random_access && self->leng_recs == 1 && first_row < self->row_count){ /** simple random access - no explosion needed **/
+ lhs->static_datalen = self->length[0];
+ lhs->exp_base = &self->data_offset;
+ if(lhs->last_row > self->row_count) lhs->last_row = self->row_count;
+ return 0;
}
+ if( self->exp_row_last < lhs->last_row){
+ rc = PageMapExpand(self,lhs->last_row-1);
+ if(rc) return rc;
+ }
+ rc = PageMapFindRow(self,first_row,NULL,NULL,NULL);
+ if(rc) return rc;
+ lhs->rgns = (PageMapRegion**) &self->istorage.base;
+ lhs->exp_base = (elem_count_t**) &self->dstorage.base;
+ lhs->cur_rgn = self->i_rgn_last;
+ lhs->cur_rgn_row = lhs->cur_row - (*lhs->rgns)[self->i_rgn_last].start_row;
+ assert(lhs->cur_rgn_row < (*lhs->rgns)[self->i_rgn_last].numrows);
+ return 0;
+}
- rc = PageMapExpand(self, lhs->end_row);
- if (rc == 0) {
- lhs->repeat = self->exp_repeat;
- lhs->offset = self->exp_offset;
- if (self->leng_recs == 1) {
- lhs->variant = pmivFixedRowLength;
- }
- else {
- lhs->variant = pmivFull;
- lhs->length = self->exp_length;
- }
+static PageMap *new_PageMap(void) {
+
+ PageMap *y;
+ y = malloc(sizeof(*y));
+ if (y) {
+ memset(y,0,sizeof(*y));
+ KRefcountInit(&y->refcount, 1, "PageMap", "new", "");
+ y->istorage.elem_bits = sizeof(PageMapRegion)*8;
+ y->dstorage.elem_bits = sizeof(elem_count_t)*8;
}
- return rc;
+ return y;
+}
+
+static PageMap *new_StaticPageMap(unsigned length, unsigned data) {
+ union {
+ PageMap pm;
+ row_count_t rcnt;
+ elem_count_t ecnt;
+ } *y;
+ size_t const sz = sizeof(*y)
+ + sizeof(y->pm.length[0]) * length
+ + sizeof(y->pm.leng_run[0]) * length
+ + sizeof(y->pm.data_run[0]) * data;
+
+ y = malloc(sz);
+ if (y) {
+#if PAGEMAP_STATISTICS
+ ++pm_stats.createStatic;
+ ++pm_stats.alive;
+ if (pm_stats.maxAlive < pm_stats.alive)
+ pm_stats.maxAlive = pm_stats.alive;
+ pm_stats.currentFootprint += sz;
+ if (pm_stats.maxFootprint < pm_stats.currentFootprint)
+ pm_stats.maxFootprint = pm_stats.currentFootprint;
+#endif
+ memset(&y->pm, 0, sizeof(y->pm));
+ KRefcountInit(&y->pm.refcount, 1, "PageMap", "new_Static", "");
+ y->pm.length = (elem_count_t *)&y[1];
+ y->pm.leng_run = (row_count_t *)&y->pm.length[length];
+ y->pm.data_run = &y->pm.leng_run[length];
+ y->pm.reserve_leng = length;
+ y->pm.reserve_data = data;
+ y->pm.istorage.elem_bits = sizeof(PageMapRegion)*8;
+ y->pm.dstorage.elem_bits = sizeof(elem_count_t)*8;
+ }
+ return &y->pm;
}
static
-rc_t PageMapGrow( PageMap *self, uint32_t new_reserve_leng, uint32_t new_reserve_data ) {
+rc_t PageMapGrow(PageMap *self, uint32_t new_reserve_leng, uint32_t new_reserve_data) {
uint32_t sz;
PageMap temp = *self;
uint32_t reserve_data = self->reserve_data;
uint32_t reserve_leng = self->reserve_leng;
rc_t rc;
-
+
+#if PAGEMAP_STATISTICS
+ ++pm_stats.grows;
+#endif
if (new_reserve_leng > (1UL << 31) || new_reserve_data > (1UL << 31))
return RC(rcVDB, rcPagemap, rcAllocating, rcParam, rcExcessive);
@@ -234,74 +629,148 @@ rc_t PageMapGrow( PageMap *self, uint32_t new_reserve_leng, uint32_t new_reserve
#define MIN_KBUF_RESERVE_SIZE 256
while (reserve_leng < new_reserve_leng)
reserve_leng <<= 1;
- if ( reserve_leng < MIN_KBUF_RESERVE_SIZE) reserve_leng = MIN_KBUF_RESERVE_SIZE;
+ if (reserve_leng < MIN_KBUF_RESERVE_SIZE) reserve_leng = MIN_KBUF_RESERVE_SIZE;
while (reserve_data < new_reserve_data)
reserve_data <<= 1;
- if ( reserve_data < MIN_KBUF_RESERVE_SIZE) reserve_data = MIN_KBUF_RESERVE_SIZE;
+ if (reserve_data < MIN_KBUF_RESERVE_SIZE) reserve_data = MIN_KBUF_RESERVE_SIZE;
sz = reserve_leng * 2 + reserve_data;
- KDataBufferWhack(&self->estorage);
+#if PAGEMAP_STATISTICS
+ pm_stats.currentFootprint -= KDataBufferMemorySize(&self->estorage);
+#endif
{
KDataBuffer new_buffer;
rc = KDataBufferMake(&new_buffer, 8 * sizeof(uint32_t), sz);
if (rc)
return rc;
+#if PAGEMAP_STATISTICS
+ pm_stats.currentFootprint += KDataBufferMemorySize(&self->estorage);
+ if (pm_stats.maxFootprint < pm_stats.currentFootprint)
+ pm_stats.maxFootprint = pm_stats.currentFootprint;
+#endif
self->cstorage = new_buffer;
}
- self->reserve_leng = reserve_leng;
- self->reserve_data = reserve_data;
self->length = self->cstorage.base;
self->leng_run = self->length + reserve_leng;
self->data_run = self->leng_run + reserve_leng;
- self->exp_length = NULL;
- self->exp_offset = NULL;
self->start_valid = 0;
if (self->leng_recs > 0 && temp.length != NULL) {
- memcpy(self->length , temp.length , self->leng_recs * sizeof(uint32_t));
- memcpy(self->leng_run, temp.leng_run, self->leng_recs * sizeof(uint32_t));
+ memcpy(self->length , temp.length , self->reserve_leng * sizeof(uint32_t));
+ memcpy(self->leng_run, temp.leng_run, self->reserve_leng * sizeof(uint32_t));
}
if (self->data_recs > 0 && temp.data_run != NULL)
- memcpy(self->data_run, temp.data_run, self->data_recs * sizeof(uint32_t));
+ memcpy(self->data_run, temp.data_run, self->reserve_data * sizeof(uint32_t));
+ self->reserve_leng = reserve_leng;
+ self->reserve_data = reserve_data;
+#if PAGEMAP_STATISTICS
+ pm_stats.currentWaste += (self->reserve_data - self->data_recs) * sizeof(self->data_run[0]) +
+ (self->reserve_leng - self->leng_recs) * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+ if (pm_stats.maxWaste < pm_stats.currentWaste)
+ pm_stats.maxWaste = pm_stats.currentWaste;
+#endif
KDataBufferWhack(&temp.cstorage);
return 0;
}
-rc_t PageMapNew ( PageMap **lhs, uint32_t reserve ) {
- PageMap *y;
+rc_t PageMapNew(PageMap **lhs, uint32_t reserve) {
+ PageMap *y = new_PageMap();
- y = calloc(1, sizeof(*y));
if (y == NULL)
return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
- KRefcountInit(&y->refcount, 1, "PageMap", "new", "");
if (reserve > 0) {
rc_t rc = PageMapGrow(y, reserve, reserve);
if (rc) {
free(y);
return rc;
}
+#if PAGEMAP_STATISTICS
+ --pm_stats.grows;
+#endif
}
*lhs = y;
+#if PAGEMAP_STATISTICS
+ ++pm_stats.create;
+ ++pm_stats.alive;
+ if (pm_stats.maxAlive < pm_stats.alive)
+ pm_stats.maxAlive = pm_stats.alive;
+ pm_stats.currentFootprint += sizeof(*y);
+ if (pm_stats.maxFootprint < pm_stats.currentFootprint)
+ pm_stats.maxFootprint = pm_stats.currentFootprint;
+#endif
return 0;
}
-rc_t PageMapNewFixedRowLength ( PageMap **lhs, uint64_t row_count, uint64_t row_len ) {
+rc_t PageMapToRandomAccess(PageMap **rslt, PageMap * src,uint32_t *data_offset) /** data_offset should have dimension of data_run ***/
+{
+ rc_t rc;
+ bool simple = (src->row_count == src->data_recs);
+ PageMap *dst;
+ assert(src->row_count >= src->leng_recs);
+ rc = PageMapNew(&dst, 0);
+ if(rc == 0){
+ dst->leng_recs=src->leng_recs;
+ dst->row_count=src->row_count;
+ rc = KDataBufferMake(&dst->cstorage, 8 * sizeof(uint32_t), 2*dst->leng_recs+(data_offset?dst->row_count:0));
+ if(rc == 0){
+ dst->length = dst->cstorage.base;
+ dst->leng_run = dst->length + dst->leng_recs;
+ dst->data_recs = src->row_count;
+ memcpy(dst->length, src->length, sizeof(uint32_t)*dst->leng_recs);
+ memcpy(dst->leng_run,src->leng_run,sizeof(uint32_t)*dst->leng_recs);
+ if(data_offset){
+ dst->data_offset = dst->leng_run + dst->leng_recs;
+ if(simple){
+ memcpy(dst->data_offset,data_offset,sizeof(uint32_t)*dst->row_count);
+ } else {
+ uint32_t i,j;
+ for(i=j=0;i<src->data_recs;i++){
+ elem_count_t data_len=src->data_run[i];
+ while(data_len > 0){
+ assert(j < src->row_count);
+ dst->data_offset[j++] = data_offset[i];
+ data_len--;
+ }
+ }
+ }
+ dst->random_access=true;
+ }
+ dst->reserve_leng = dst->leng_recs;
+ dst->reserve_data = dst->row_count;
+ dst->start_valid = dst->row_count;
+ *rslt = dst;
+ return 0;
+ }
+ PageMapRelease(dst);
+ }
+ return rc;
+}
+
+
+rc_t PageMapNewFixedRowLength(PageMap **lhs, uint64_t row_count, uint64_t row_len) {
PageMap *y;
rc_t rc;
- unsigned i;
if (row_count >> 32 != 0 || row_len >> 32 != 0)
return RC(rcVDB, rcPagemap, rcConstructing, rcParam, rcTooBig);
rc = PageMapNew(&y, 0);
+#if PAGEMAP_STATISTICS
+ ++pm_stats.createFixedRow;
+ --pm_stats.create;
+#endif
if (rc)
return rc;
rc = PageMapGrow(y, 1, (uint32_t)row_count);
+#if PAGEMAP_STATISTICS
+ --pm_stats.grows;
+#endif
if (rc == 0) {
+ int i;
*lhs = y;
y->length[0] = (uint32_t)row_len;
y->leng_run[0] = (uint32_t)row_count;
@@ -311,13 +780,14 @@ rc_t PageMapNewFixedRowLength ( PageMap **lhs, uint64_t row_count, uint64_t row_
for (i = 0; i != (uint32_t)row_count; ++i) {
y->data_run[i] = 1;
}
+
}
if (rc)
PageMapRelease(y);
return rc;
}
-rc_t PageMapNewSingle ( PageMap **lhs, uint64_t row_count, uint64_t row_len ) {
+rc_t PageMapNewSingle(PageMap **lhs, uint64_t row_count, uint64_t row_len) {
PageMap *y;
rc_t rc;
@@ -326,6 +796,10 @@ rc_t PageMapNewSingle ( PageMap **lhs, uint64_t row_count, uint64_t row_len ) {
rc = PageMapNewFixedRowLength(&y, 1, row_len);
if (rc == 0) {
+#if PAGEMAP_STATISTICS
+ ++pm_stats.createSingle;
+ --pm_stats.createFixedRow;
+#endif
y->row_count = y->data_run[0] = y->leng_run[0] = (uint32_t)row_count;
*lhs = y;
}
@@ -336,15 +810,7 @@ bool PageMapHasRows(const PageMap *self) {
return self->data_recs > 0;
}
-uint32_t PageMapFastRowCount ( const PageMap *self ) {
- uint32_t rslt = 0;
-
- if (self->data_recs == 1)
- rslt = self->data_run[0];
- return rslt;
-}
-
-uint32_t PageMapFixedRowLength ( const PageMap *self ) {
+uint32_t PageMapFixedRowLength (const PageMap *self) {
uint32_t rslt = 0;
if (self->leng_recs == 1)
@@ -352,22 +818,31 @@ uint32_t PageMapFixedRowLength ( const PageMap *self ) {
return rslt;
}
-uint32_t PageMapHasSimpleStructure( const PageMap *self ) {
+rc_t PageMapRowLengthRange (const PageMap *self,elem_count_t *min,elem_count_t *max)
+{
+ int i;
+ *min = *max = self->length[0];
+ for(i=1;i<self->leng_recs;i++){
+ if (self->length[i] < *min) *min = self->length[i];
+ else if (self->length[i] > *max) *max = self->length[i];
+ }
+ return 0;
+}
+
+
+uint32_t PageMapHasSimpleStructure(const PageMap *self) {
uint32_t rslt = PageMapFixedRowLength(self);
- unsigned i;
if (rslt == 0)
return rslt;
- for (i = 0; i != self->data_recs; ++i) {
- if (self->data_run[i] != 1)
- return 0;
- }
+ if(self->data_recs != self->row_count) return 0;
+
return rslt;
}
#if 0
-static bool PageMapValidate( const PageMap *cself ) {
+static bool PageMapValidate(const PageMap *cself) {
unsigned i;
uint32_t n;
uint32_t m;
@@ -379,7 +854,7 @@ static bool PageMapValidate( const PageMap *cself ) {
}
static
-rc_t PageMapAppendRun( PageMap *self, uint32_t run_length, uint32_t row_length ) {
+rc_t PageMapAppendRun(PageMap *self, uint32_t run_length, uint32_t row_length) {
return -1;
}
#endif
@@ -401,6 +876,11 @@ rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length,
same_data = false;
leng_cur = self->leng_recs;
++self->leng_recs;
+
+#if PAGEMAP_STATISTICS
+ pm_stats.currentWaste -= sizeof(self->leng_run[0]) + sizeof(self->length[0]);
+#endif
+
if (self->leng_recs >= self->reserve_leng) {
rc = PageMapGrow(self, self->leng_recs, 0);
if (rc)
@@ -414,6 +894,11 @@ rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length,
else {
data_cur = self->data_recs;
++self->data_recs;
+
+#if PAGEMAP_STATISTICS
+ pm_stats.currentWaste -= sizeof(self->data_run[0]);
+#endif
+
if (self->data_recs >= self->reserve_data) {
rc = PageMapGrow(self, 0, self->data_recs);
if (rc)
@@ -421,6 +906,28 @@ rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length,
}
self->data_run[data_cur] = run_length;
}
+ if(self->row_count < self->pre_exp_row_count){
+ int i;
+ elem_count_t *exp_base = self->dstorage.base;
+ elem_count_t data_offset;
+ if(same_data){
+ if(self->row_count == 0){
+ data_offset = 0;
+ } else {
+ data_offset = exp_base[2*self->row_count-1];
+ }
+ } else {
+ data_offset = self->exp_data_offset_last;
+ self->exp_data_offset_last += row_length;
+ }
+ for(i=self->row_count;i<run_length+self->row_count;i++){
+ exp_base[2*i] = row_length;
+ exp_base[2*i+1]= data_offset;
+ }
+ self->exp_row_last += run_length;
+ self->exp_rgn_last->numrows += run_length;
+
+ }
self->row_count += run_length;
return 0;
}
@@ -449,37 +956,105 @@ static rc_t serialize_lengths(
return rc;
}
+#if 0
+
static rc_t deserialize_lengths(
uint32_t run[],
unsigned runs,
- const uint8_t *src,
- uint64_t ssize,
+ uint8_t const src[],
+ unsigned ssize,
uint64_t *consumed
) {
- rc_t rc = 0;
unsigned i;
- uint64_t j;
+ unsigned j;
uint64_t n;
*consumed = 0;
- for (i = 0, j = 0; i != runs; ++i, j += n) {
+ for (i = 0, j = 0; i != runs; ++i, j += (unsigned)n) {
uint64_t val;
+ rc_t rc = vlen_decodeU1(&val, src + j, ssize - j, &n);
- rc = vlen_decodeU1(&val, src + j, ssize - j, &n);
- if (rc)
- break;
+ if (rc) return rc;
run[i] = (uint32_t)val;
}
- if (rc == 0)
- *consumed = j;
- return rc;
+ *consumed = j;
+ return 0;
}
+#else
+
+#if _ARCH_BITS == 32
+#define FLAG_64 0x8080808080808080ULL
+#define VAL_64 0x7F7F7F7F7F7F7F7FULL
+#else
+#define FLAG_64 0x8080808080808080UL
+#define VAL_64 0x7F7F7F7F7F7F7F7FUL
+#endif
+
+static rc_t deserialize_lengths(
+ uint32_t run[],
+ unsigned runs,
+ uint8_t const src[],
+ unsigned ssize,
+ uint64_t *consumed
+) {
+ uint8_t to_align = 16 - (((long)src)&15);/** alignmentto 16 bytes will make optimizer and cpu happy. don't care about loss in cast - we need the lowest byte **/
+ int si=0;/**source index **/
+ int di=0;/** destination index **/
+ int pcnt = (ssize - to_align )/8;
+
+ memset(run,0,runs*sizeof(*run));
+ if(pcnt){ /** does it make sense at all ***/
+ uint64_t *ptr=(uint64_t*) (src + to_align);
+ int pi;
+
+ for(;si<to_align && di < runs ;si++){ /** align the pointer first **/
+ if(((int8_t)src[si]) < 0) {
+ run[di] += src[si] & 0x7F;
+ run[di] <<= 7;
+ } else {
+ run[di++] += src[si];
+ }
+ }
+ assert((((long)ptr)&15) == 0);
+ for(pi = 0; pi < pcnt && di < runs; pi++){ /** do bulk staff **/
+ uint64_t flag = ptr[pi] & FLAG_64;
+ uint64_t val = ptr[pi] & VAL_64;
+ int i;
+ int8_t *cf = (int8_t*)&flag;
+ uint8_t *cv = (uint8_t*)&val;
+ for(i=0;i<8 && di < runs;i++){ /** no endian problem - casting of ptr matches casting of flag & val **/
+ si++;
+ run[di] += cv[i];
+ if(cf[i] < 0){
+ run[di] <<= 7;
+ } else {
+ di++;
+ }
+ }
+ }
+ }
+
+ for(;si < ssize && di < runs;si++){/** deal with tails **/
+ if(((int8_t)src[si]) < 0) {
+ run[di] += src[si] & 0x7F;
+ run[di] <<= 7;
+ } else {
+ run[di++] += src[si];
+ }
+ }
+ *consumed = si;
+ return 0;
+}
+
+#endif
static
-rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
+rc_t serialize(const PageMap *self, KDataBuffer *buffer, uint64_t *size) {
/*
variant 0: fixed row length, data_run[..] == 1
vlencode(row_length)
+ version 2: same as 0 but random access
+ adds serialize(data_offset)
variant 1: fixed row length, variable data_run
vlencode(row_length)
@@ -490,6 +1065,8 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
vlencode(leng_recs)
serialize(length)
serialize(leng_run)
+ versuion 2: same as 2 but random access
+ adds serialize(data_offset)
variant 3: variable row length, variable data_run
vlencode(leng_recs)
@@ -498,26 +1075,21 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
serialize(leng_run)
serialize(data_run)
+
+
*/
- uint8_t version = 1;
+ uint8_t version = self->random_access?2:1;
uint8_t variant = 0;
uint8_t header;
rc_t rc = 0;
- bool simple_data = true;
- unsigned i;
uint64_t sz;
KDataBuffer compress;
+
+
memset(&compress, 0, sizeof(compress));
-
- for (i = 0; i != self->data_recs; ++i) {
- if (self->data_run[i] != 1) {
- simple_data = false;
- break;
- }
- }
-
- variant = (simple_data ? 0 : 1) | ((self->leng_recs == 1 ? 0 : 1) << 1);
+
+ variant = ( (self->data_recs == self->row_count)? 0 : 1) | ((self->leng_recs == 1 ? 0 : 1) << 1);
header = (version << 2) | variant;
switch (variant) {
case 0:
@@ -525,7 +1097,14 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
if (rc == 0) {
((uint8_t *)buffer->base)[0] = header;
vlen_encodeU1(((uint8_t *)buffer->base) + 1, 5, &sz, self->length[0]);
- buffer->elem_count = sz + 1;
+ buffer->elem_count = sz + 1;
+ if(self->random_access){
+ rc = KDataBufferMakeBytes(&compress, 5*self->row_count);
+ if(rc == 0){
+ rc = serialize_lengths(&compress, 0, self->data_offset, self->row_count, &sz);
+ compress.elem_count = sz;
+ }
+ }
}
break;
case 1:
@@ -547,7 +1126,7 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
case 2:
rc = KDataBufferResize(buffer, 6);
if (rc == 0) {
- rc = KDataBufferMakeBytes(&compress, 10 * self->leng_recs);
+ rc = KDataBufferMakeBytes(&compress, 10 * self->leng_recs + (self->random_access?5*self->row_count:0));
if (rc == 0) {
((uint8_t *)buffer->base)[0] = header;
vlen_encodeU1(((uint8_t *)buffer->base) + 1, 5, &sz, self->leng_recs);
@@ -556,12 +1135,16 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
rc = serialize_lengths(&compress, 0, self->length, self->leng_recs, &sz);
compress.elem_count = sz;
if (rc == 0) {
- rc = serialize_lengths(&compress, sz, self->leng_run, self->leng_recs, &sz);
+ rc = serialize_lengths(&compress, compress.elem_count, self->leng_run, self->leng_recs, &sz);
compress.elem_count += sz;
+ if(self->random_access && rc == 0) {
+ rc = serialize_lengths(&compress, compress.elem_count, self->data_offset, self->row_count, &sz);
+ compress.elem_count += sz;
+ }
}
}
}
- break;
+ break;
case 3:
rc = KDataBufferResize(buffer, 11);
if (rc == 0) {
@@ -611,18 +1194,10 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
zr = deflateInit2(&zs, Z_BEST_SPEED, Z_DEFLATED, -15, 9, Z_DEFAULT_STRATEGY);
switch (zr) {
case Z_OK:
- break;
- case Z_MEM_ERROR:
- rc = RC(rcVDB, rcPagemap, rcWriting, rcMemory, rcExhausted);
- break;
- default:
- rc = RC(rcVDB, rcPagemap, rcWriting, rcParam, rcInvalid);
- }
- if (rc == 0) {
- for ( ; ; ) {
+ for (; ;) {
zr = deflate(&zs, Z_FINISH);
if (zr == Z_OK) {
- unsigned offset = (unsigned int)( zs.next_out - (Bytef *)buffer->base );
+ unsigned const offset = (unsigned)(zs.next_out - (Bytef *)buffer->base);
rc = KDataBufferResize(buffer, buffer->elem_count * 2);
if (rc)
break;
@@ -639,6 +1214,12 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
}
}
deflateEnd(&zs);
+ break;
+ case Z_MEM_ERROR:
+ rc = RC(rcVDB, rcPagemap, rcWriting, rcMemory, rcExhausted);
+ break;
+ default:
+ rc = RC(rcVDB, rcPagemap, rcWriting, rcParam, rcInvalid);
}
}
}
@@ -650,7 +1231,7 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
return rc;
}
-rc_t PageMapSerialize ( const PageMap *self, KDataBuffer *buffer, uint64_t offset, uint64_t *size ) {
+rc_t PageMapSerialize (const PageMap *self, KDataBuffer *buffer, uint64_t offset, uint64_t *size) {
rc_t rc;
KDataBuffer temp;
@@ -674,133 +1255,145 @@ rc_t PageMapSerialize ( const PageMap *self, KDataBuffer *buffer, uint64_t offse
}
static
-rc_t PageMapDeserialize_v0( PageMap **lhs, const uint8_t *src, uint64_t ssize, uint32_t row_count ) {
- uint8_t variant = *src & 3;
- const uint8_t * const endp = src + ssize;
- uint64_t val;
+rc_t PageMapDeserialize_v0(PageMap **lhs, uint8_t const src[], unsigned ssize, row_count_t row_count) {
+ uint8_t variant = src[0] & 3;
+ uint8_t version =src[0] >> 2;
+ unsigned cur = 1;
+ uint64_t row_len;
+ uint64_t data_recs;
+ uint64_t leng_recs;
uint64_t sz;
+ bool random_access=(version==2?true:false);
rc_t rc = 0;
- ++src;
switch (variant) {
case 0:
- rc = vlen_decodeU1(&val, src, endp - src, &sz);
- if (rc == 0)
- return PageMapNewFixedRowLength( lhs, row_count, (uint32_t)val );
+ /*
+ variant 0: fixed row length, data_run[..] == 1
+ vlencode(row_length)
+ */
+ rc = vlen_decodeU1(&row_len, &src[cur], ssize - cur, &sz); if (rc) return rc;
+ cur += sz;
+
+ *lhs = new_StaticPageMap(1, random_access?row_count:1);
+ if (*lhs == NULL)
+ return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
+
+ (**lhs).data_recs = row_count;
+ (**lhs).leng_recs = 1;
+
+ (**lhs).length[0] = (elem_count_t)row_len;
+ (**lhs).leng_run[0] = row_count;
+
+ if(random_access){
+ (**lhs).data_offset= (**lhs).data_run;
+ rc = deserialize_lengths((**lhs).data_offset, (unsigned)row_count, &src[cur], ssize - cur, &sz);
+ }
+ (**lhs).data_run = 0;
break;
case 1:
- {
- uint32_t row_length;
-
- rc = vlen_decodeU1( &val, src, endp - src, &sz );
- if (rc == 0) {
- src += sz;
- row_length = (uint32_t)val;
- rc = vlen_decodeU1( &val, src, endp - src, &sz );
- if (rc == 0) {
- src += sz;
- /* i'm lying about the row_count, this will create val entries
- * in the data_run array and that is how many i need
- * i'll then decompress into the data_run array.
- */
- rc = PageMapNewFixedRowLength( lhs, (uint32_t)val, row_length );
- if (rc == 0) {
- (*lhs)->leng_run[0] = row_count;
- rc = deserialize_lengths( (*lhs)->data_run, (unsigned int)val, src, endp - src, &sz );
- if (rc == 0)
- {
- uint32_t ix;
- uint32_t sum;
- uint32_t *pdr = (**lhs).data_run;
-
- for (sum = ix = 0; ix < (**lhs).data_recs; ++ix)
- sum += *pdr++;
- (**lhs).leng_run[0] = sum;
- return 0;
- }
- PageMapRelease(*lhs);
- }
- }
- }
- }
+ /*
+ variant 1: fixed row length, variable data_run
+ vlencode(row_length)
+ vlencode(data_recs)
+ serialize(data_run)
+ */
+ rc = vlen_decodeU1(&row_len, &src[cur], ssize - cur, &sz); if (rc) return rc;
+ cur += sz;
+
+ rc = vlen_decodeU1(&data_recs, &src[cur], ssize - cur, &sz); if (rc) return rc;
+ cur += sz;
+
+ *lhs = new_StaticPageMap(1, data_recs);
+ if (*lhs == NULL)
+ return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
+
+ (**lhs).data_recs = data_recs;
+ (**lhs).leng_recs = 1;
+
+ (**lhs).length[0] = (elem_count_t)row_len;
+ (**lhs).leng_run[0] = row_count;
+
+ rc = deserialize_lengths((**lhs).data_run, (unsigned)data_recs, &src[cur], ssize - cur, &sz);
break;
case 2:
- rc = vlen_decodeU1( &val, src, endp - src, &sz );
+ /*
+ variant 2: variable row length, data_run[..] == 1
+ vlencode(leng_recs)
+ serialize(length)
+ serialize(leng_run)
+ */
+ rc = vlen_decodeU1(&leng_recs, &src[cur], ssize - cur, &sz); if (rc) return rc;
+ cur += sz;
+
+ *lhs = new_StaticPageMap((unsigned)leng_recs, random_access?row_count:1);
+ if (*lhs == NULL)
+ return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
+
+ (**lhs).data_recs = row_count;
+ (**lhs).leng_recs = leng_recs;
+
+#if 0
+ rc = deserialize_lengths((**lhs).length, (unsigned)leng_recs, &src[cur], ssize - cur, &sz);
if (rc == 0) {
- src += sz;
- rc = PageMapNewFixedRowLength( lhs, row_count, 1 );
- if (rc == 0) {
- do {
- rc = PageMapGrow( *lhs, (uint32_t)val, 0 );
- if (rc)
- break;
- rc = deserialize_lengths( (*lhs)->length, (unsigned)val, src, endp - src, &sz );
- if (rc)
- break;
- src += sz;
- rc = deserialize_lengths( (*lhs)->leng_run, (unsigned)val, src, endp - src, &sz );
- if (rc == 0) {
- (*lhs)->leng_recs = (uint32_t)val;
- (*lhs)->data_recs = row_count;
- return 0;
- }
- } while (0);
- PageMapRelease(*lhs);
- *lhs = 0;
- break;
- }
+ cur += sz;
+ rc = deserialize_lengths((**lhs).leng_run, (unsigned)leng_recs, &src[cur], ssize - cur, &sz);
}
+#else /** can use the fact that both length and leng_run a sequentually allocated ***/
+ rc = deserialize_lengths((**lhs).length, (unsigned)(2*leng_recs), &src[cur], ssize - cur, &sz);
+ if(rc == 0 && random_access){
+ cur+=sz;
+ (**lhs).data_offset= (**lhs).data_run;
+ rc = deserialize_lengths((**lhs).data_offset, (unsigned)row_count, &src[cur], ssize - cur, &sz);
+ }
+ (**lhs).data_run = 0;
+
+#endif
break;
case 3:
- do {
- uint32_t leng_recs;
- uint32_t data_recs;
-
- rc = vlen_decodeU1( &val, src, endp - src, &sz );
- if (rc)
- break;
- src += sz;
- leng_recs = (uint32_t)val;
-
- rc = vlen_decodeU1( &val, src, endp - src, &sz );
- if (rc)
- break;
- src += sz;
- data_recs = (uint32_t)val;
-
- rc = PageMapNew(lhs, 0);
+ /*
+ variant 3: variable row length, variable data_run
+ vlencode(leng_recs)
+ vlencode(data_recs)
+ serialize(length)
+ serialize(leng_run)
+ serialize(data_run)
+ */
+ rc = vlen_decodeU1(&leng_recs, &src[cur], ssize - cur, &sz); if (rc) return rc;
+ cur += sz;
+
+ rc = vlen_decodeU1(&data_recs, &src[cur], ssize - cur, &sz); if (rc) return rc;
+ cur += sz;
+
+ *lhs = new_StaticPageMap(leng_recs, data_recs);
+ if (*lhs == NULL)
+ return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
+
+ (**lhs).data_recs = data_recs;
+ (**lhs).leng_recs = leng_recs;
+#if 0
+ rc = deserialize_lengths((**lhs).length, leng_recs, &src[cur], ssize - cur, &sz);
+ if (rc == 0) {
+ cur += sz;
+ rc = deserialize_lengths((**lhs).leng_run, leng_recs, &src[cur], ssize - cur, &sz);
if (rc == 0) {
- do {
- rc = PageMapGrow(*lhs, leng_recs, data_recs);
- if (rc)
- break;
- rc = deserialize_lengths( (*lhs)->length, leng_recs, src, endp - src, &sz );
- if (rc)
- break;
- src += sz;
- rc = deserialize_lengths( (*lhs)->leng_run, leng_recs, src, endp - src, &sz );
- if (rc)
- break;
- src += sz;
- rc = deserialize_lengths( (*lhs)->data_run, data_recs, src, endp - src, &sz );
- if (rc == 0) {
- (*lhs)->leng_recs = leng_recs;
- (*lhs)->data_recs = data_recs;
- return 0;
- }
- } while (0);
- PageMapRelease(*lhs);
- *lhs = 0;
- break;
+ cur += sz;
+ rc = deserialize_lengths((*lhs)->data_run, data_recs, &src[cur], ssize - cur, &sz);
}
- } while (0);
+ }
+#else /** can use the fact that both length and leng_run a sequentually allocated ***/
+ rc = deserialize_lengths((**lhs).length, (unsigned)(2*leng_recs+data_recs), &src[cur], ssize - cur, &sz);
+#endif
break;
+ default:
+ rc = RC(rcVDB, rcPagemap, rcConstructing, rcFormat, rcUnrecognized);
}
+ (**lhs).random_access = random_access;
return rc;
}
static
-rc_t PageMapDeserialize_v1( PageMap **lhs, const uint8_t *Src, uint64_t ssize, uint32_t row_count ) {
+rc_t PageMapDeserialize_v1(PageMap **lhs, const uint8_t *Src, uint64_t ssize, uint32_t row_count) {
const uint8_t *src = Src;
const uint8_t * const endp = src + ssize;
uint8_t variant = *src & 3;
@@ -812,10 +1405,20 @@ rc_t PageMapDeserialize_v1( PageMap **lhs, const uint8_t *Src, uint64_t ssize, u
KDataBuffer decompress;
z_stream zs;
int zr;
+ bool random_access = ((src[0]>>2)==2);
switch (variant) {
case 0:
- return PageMapDeserialize_v0(lhs, src, ssize, row_count);
+ if(!random_access)
+ return PageMapDeserialize_v0(lhs, src, ssize, row_count);
+ ++src;
+ rc = vlen_decodeU1(&val, src, endp - src, &sz);
+ if( rc == 0){
+ src += sz;
+ hsize = src - Src;
+ bsize = 5 * row_count;
+ }
+ break;
case 1:
++src;
rc = vlen_decodeU1(&val, src, endp - src, &sz);
@@ -836,6 +1439,9 @@ rc_t PageMapDeserialize_v1( PageMap **lhs, const uint8_t *Src, uint64_t ssize, u
src += sz;
hsize = src - Src;
bsize = 10 * val;
+ if(random_access){
+ bsize += 5 * row_count;
+ }
}
break;
case 3:
@@ -889,7 +1495,7 @@ rc_t PageMapDeserialize_v1( PageMap **lhs, const uint8_t *Src, uint64_t ssize, u
return rc;
}
-rc_t PageMapDeserialize ( PageMap **lhs, const void *src, uint64_t ssize, uint64_t row_count ) {
+rc_t PageMapDeserialize (PageMap **lhs, const void *src, uint64_t ssize, uint64_t row_count) {
rc_t rc;
if ((uint32_t)row_count != row_count)
@@ -901,11 +1507,13 @@ rc_t PageMapDeserialize ( PageMap **lhs, const void *src, uint64_t ssize, uint64
*lhs = NULL;
if (src == NULL || ssize == 0)
return 0;
+
switch (*(const uint8_t *)src >> 2) {
case 0:
rc = PageMapDeserialize_v0(lhs, src, ssize, (uint32_t)row_count);
break;
case 1:
+ case 2:
rc = PageMapDeserialize_v1(lhs, src, ssize, (uint32_t)row_count);
break;
default:
@@ -913,19 +1521,55 @@ rc_t PageMapDeserialize ( PageMap **lhs, const void *src, uint64_t ssize, uint64
}
if (rc == 0)
(**lhs).row_count = (uint32_t)row_count;
+ else
+ PageMapRelease(*lhs);
return rc;
}
static
-rc_t PageMapDestroy( PageMap *that )
+rc_t PageMapDestroy(PageMap *that)
{
- KDataBufferWhack( &that->estorage );
- KDataBufferWhack( &that->cstorage );
- free( that );
+#if PAGEMAP_STATISTICS
+ pm_stats.currentWaste -= (that->reserve_data - that->data_recs) * sizeof(that->data_run[0]) +
+ (that->reserve_leng - that->leng_recs) * (sizeof(that->leng_run[0]) + sizeof(that->length[0]));
+ pm_stats.currentFootprint -= sizeof(*that) + that->reserve_data * sizeof(that->data_run[0]) +
+ that->reserve_leng * (sizeof(that->leng_run[0]) + sizeof(that->length[0]));
+ --pm_stats.alive;
+ if (pm_stats.alive == 0) {
+ fprintf(stderr,
+ "PM Stats:\n"
+ "Footprint (cur/max): %u/%u\n"
+ "Waste (cur/max): %u/%u\n"
+ "Alive (cur/max): %u/%u\n"
+ "Created (static/fixed/single/total): %u/%u/%u/%u\n"
+ "Grows: %u\n"
+ "Expands (act/calls): %u/%u\n"
+ "Appends: %u\n\n",
+ (unsigned)pm_stats.currentFootprint,
+ (unsigned)pm_stats.maxFootprint,
+ (unsigned)pm_stats.currentWaste,
+ (unsigned)pm_stats.maxWaste,
+ pm_stats.alive,
+ pm_stats.maxAlive,
+ pm_stats.createStatic,
+ pm_stats.createFixedRow,
+ pm_stats.createSingle,
+ pm_stats.create + pm_stats.createStatic + pm_stats.createFixedRow + pm_stats.createSingle,
+ pm_stats.grows,
+ pm_stats.expands,
+ pm_stats.expandCalls,
+ pm_stats.appends
+ );
+ }
+#endif
+ KDataBufferWhack(&that->istorage);
+ KDataBufferWhack(&that->dstorage);
+ KDataBufferWhack(&that->cstorage);
+ free(that);
return 0;
}
-rc_t PageMapRelease ( const PageMap *self ) {
+rc_t PageMapRelease (const PageMap *self) {
if (self) {
if (KRefcountDrop(&self->refcount, "PageMap") == krefWhack)
return PageMapDestroy((PageMap *)self);
@@ -933,48 +1577,34 @@ rc_t PageMapRelease ( const PageMap *self ) {
return 0;
}
-rc_t PageMapAddRef ( const PageMap *self ) {
+rc_t PageMapAddRef (const PageMap *self) {
if (self)
KRefcountAdd(&self->refcount, "PageMap");
return 0;
}
-uint32_t PageMapGetIdxRowInfo ( const PageMap *cself, uint32_t idx, uint32_t *starting_element ) {
- rc_t rc;
-
- if (idx == 0 || cself->data_recs == 1) {
- if (starting_element)
- *starting_element = 0;
- if (cself->leng_recs == 0)
- return 0;
- return cself->length[0];
- }
- if (cself->leng_recs == 1) {
- if (starting_element == NULL)
- return cself->length[0];
-
- if (cself->data_recs == cself->row_count) {
- /* fixed row length and no rle on data */
- if (starting_element)
- *starting_element = idx * cself->length[0];
- return cself->length[0];
- }
- }
-
- rc = PageMapExpand(cself, idx);
- if (rc)
- return 0;
-
- if (starting_element)
- *starting_element = cself->exp_offset[idx];
- return cself->leng_recs > 1 ? cself->exp_length[idx] : cself->length[0];
+uint32_t PageMapGetIdxRowInfo (const PageMap *cself, uint32_t idx, uint32_t *starting_element)
+{
+ rc_t rc=0;
+ uint32_t len;
+
+ if (idx < (cself->data_run?cself->data_run[0]:1) || cself->data_recs == 1) {
+ if (starting_element) *starting_element = 0;
+ if (cself->leng_recs == 0) len=0;
+ else len = cself->length[0];
+ return cself->length[0];
+ } else {
+ rc = PageMapFindRow(cself,idx,starting_element,&len,NULL);
+ if(rc) len=0;
+ }
+ return len;
}
-int PageMapCompare( const PageMap *a, const PageMap *b ) {
- unsigned i;
- unsigned j;
- unsigned i_rl;
- unsigned j_rl;
+int PageMapCompare(const PageMap *a, const PageMap *b) {
+ unsigned ai;
+ unsigned bi;
+ unsigned ar; /* runs in a */
+ unsigned br; /* runs in b */
if (
a == b || (
@@ -986,33 +1616,33 @@ int PageMapCompare( const PageMap *a, const PageMap *b ) {
))
return 2;
- i = j = 0;
- i_rl = a->leng_run[0];
- j_rl = b->leng_run[0];
+ ai = bi = 0;
+ ar = a->leng_run[0];
+ br = b->leng_run[0];
- while (i < a->leng_recs && j < b->leng_recs) {
- if (a->length[i] != b->length[j])
+ while (ai < a->leng_recs && bi < b->leng_recs) {
+ if (a->length[ai] != b->length[bi])
return 0;
- if (i_rl < j_rl) {
- j_rl -= i_rl;
- i_rl = 0;
+ if (ar < br) {
+ br -= ar;
+ ar = a->leng_run[++ai];
+ }
+ else if (ar == br) {
+ ar = a->leng_run[++ai];
+ br = b->leng_run[++bi];
}
else {
- i_rl -= j_rl;
- j_rl = 0;
+ ar -= br;
+ br = b->leng_run[++bi];
}
- if (i_rl == 0)
- i_rl = a->leng_run[++i];
- if (j_rl == 0)
- j_rl = b->leng_run[++j];
}
- if (i != a->leng_recs || j != b->leng_recs)
+ if (ai != a->leng_recs || bi != b->leng_recs)
return -1;
else
return 1;
}
-int PageMapCompareStatic ( const PageMap *a, const PageMap *b ) {
+int PageMapCompareStatic (const PageMap *a, const PageMap *b) {
if (
a->data_recs != 1 ||
a->leng_recs != 1 ||
@@ -1038,16 +1668,23 @@ int PageMapCompareStatic ( const PageMap *a, const PageMap *b ) {
return 0; /* not same */
}
-rc_t PageMapAppend( PageMap *self, const PageMap *other ) {
+rc_t PageMapAppend(PageMap *self, const PageMap *other) {
KDataBuffer cstorage;
rc_t rc;
rc = KDataBufferMake(&cstorage, sizeof(self->length[0]) * 8, (self->leng_recs + other->leng_recs) * 2 + self->data_recs + other->data_recs);
if (rc == 0) {
- uint32_t *length = cstorage.base;
- uint32_t *leng_run = length + self->leng_recs + other->leng_recs;
- uint32_t *data_run = leng_run + self->leng_recs + other->leng_recs;
+ uint32_t *const length = cstorage.base;
+ uint32_t *const leng_run = length + self->leng_recs + other->leng_recs;
+ uint32_t *const data_run = leng_run + self->leng_recs + other->leng_recs;
+#if PAGEMAP_STATISTICS
+ ++pm_stats.appends;
+ pm_stats.currentWaste -= (self->reserve_data - self->data_recs) * sizeof(self->data_run[0]) +
+ (self->reserve_leng - self->leng_recs) * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+ pm_stats.currentFootprint -= self->reserve_data * sizeof(self->data_run[0]) +
+ self->reserve_leng * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+#endif
memcpy(length , self->length , self->leng_recs * sizeof(length[0]));
memcpy(length + self->leng_recs, other->length, other->leng_recs * sizeof(length[0]));
@@ -1070,6 +1707,14 @@ rc_t PageMapAppend( PageMap *self, const PageMap *other ) {
self->reserve_leng = self->leng_recs;
self->reserve_data = self->data_recs;
+#if PAGEMAP_STATISTICS
+ pm_stats.currentWaste += (self->reserve_data - self->data_recs) * sizeof(self->data_run[0]) +
+ (self->reserve_leng - self->leng_recs) * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+ pm_stats.currentFootprint += self->reserve_data * sizeof(self->data_run[0]) +
+ self->reserve_leng * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+ if (pm_stats.maxFootprint < pm_stats.currentFootprint)
+ pm_stats.maxFootprint = pm_stats.currentFootprint;
+#endif
return 0;
}
return rc;
diff --git a/libs/vdb/page-map.h b/libs/vdb/page-map.h
index f57158a..427dc45 100644
--- a/libs/vdb/page-map.h
+++ b/libs/vdb/page-map.h
@@ -27,6 +27,8 @@
#ifndef _h_page_map_
#define _h_page_map_
+#include <assert.h>
+
#ifndef _h_vdb_extern_
#include <vdb/extern.h>
#endif
@@ -35,11 +37,98 @@
#include <klib/defs.h>
#endif
+#include <klib/data-buffer.h>
+#include <klib/refcount.h>
+
+#if _DEBUGGING
+#define _HEAVY_PAGEMAP_DEBUGGING 0
+#endif
+
struct KDataBuffer;
-typedef struct PageMap PageMap;
+
+typedef uint32_t pm_size_t;
typedef uint32_t row_count_t;
typedef uint32_t elem_count_t;
+typedef enum { PM_REGION_EXPAND_UNKNOWN=0, /** notset **/
+ PM_REGION_EXPAND_FULL, /** full expansion - 2 arrays: offset,length**/
+ PM_REGION_EXPAND_SAMELEN, /** partial expansion - 1 array: offset **/
+ PM_REGION_EXPAND_EQUIDISTANT, /** data have same length and always unique - no expansion needed **/
+ PM_REGION_EXPAND_SAMEDATA /** same data - no expansion needed ***/
+} pm_expand_region_type_t;
+
+typedef struct PageMapRegion {
+ row_count_t start_row;
+ row_count_t numrows;
+ elem_count_t data_offset;/** for unexpanded regions first direct offset into data**/
+ /** for expanded regions - offset into expanded storage **/
+ elem_count_t length; /** first length of the region ***/
+ uint8_t type; /** one of the types from pm_expand_region_type_t*/
+ bool expanded; /** if expandable storage is being used ***/
+} PageMapRegion;
+
+
+
+
+typedef struct PageMap {
+ /* memory allocation object for length[], leng_run[], data_run[] */
+ KDataBuffer cstorage;
+
+ /* array of row lengths
+ * has leng_recs elements
+ * is sized to reserve_leng elements
+ * == storage.base
+ */
+ bool random_access;
+ enum { eBlobPageMapOptimizedNone, eBlobPageMapOptimizedSucceeded, eBlobPageMapOptimizedFailed} optimized;
+ elem_count_t *length;
+
+ /* array of run lengths of row lengths
+ * has leng_recs elements
+ * is sized to reserve_leng elements
+ * == length + reserve_leng
+ */
+ row_count_t *leng_run;
+
+ /* array of repeat counts of data
+ * has data_recs elements
+ * is sized to reserve_data elements
+ * == leng_run + reserve_leng
+ */
+ row_count_t *data_run;
+ /** expanded offsets into data - needed for random access ***/
+ /** only valid when random_access is true **/
+ elem_count_t *data_offset;
+
+/******* DYNAMIC EXPANSION CONTROL *****************/
+ PageMapRegion *exp_rgn_last;
+ row_count_t exp_row_last; /* last row analyzed for region expansion */
+ row_count_t exp_lr_used; /* how much leng_run was used from the */
+ pm_size_t exp_lr_last; /* index of last leng_run expanded */
+ pm_size_t exp_dr_last; /* index of last data_run expanded */
+ pm_size_t exp_rgn_cnt; /* current number of expanded regions */
+ elem_count_t exp_data_offset_last;/* last offset into data */
+
+
+ KDataBuffer istorage; /* binary searchable storage for expansion regions */
+ KDataBuffer dstorage; /* storage for expanded data */
+/** LAST SEARCH CONTROL *****/
+ pm_size_t i_rgn_last; /* region index found in previous lookup **/
+ PageMapRegion* rgn_last; /* redundant - region found in previous lookup **/
+
+/****************************/
+
+ pm_size_t leng_recs; /* number of valid elements in length[] and leng_run[] */
+ pm_size_t data_recs; /* number of valid elements in data_run[] */
+ pm_size_t reserve_leng; /* number of allocated elements in length[] and leng_run[] */
+ pm_size_t reserve_data; /* number of allocated elements in data_run[] */
+ pm_size_t start_valid; /* the expanded array contains valid data upto start_valid */
+ row_count_t row_count; /* total number of rows in page map */
+ row_count_t pre_exp_row_count; /* number of rows pre-expanded */
+ KRefcount refcount;
+} PageMap;
+
+
/* a pessimistic estimate - actual size will *always* be less than or equal */
size_t PageMapGetMaxBufferSize(const PageMap *self);
@@ -79,10 +168,12 @@ rc_t PageMapNewSingle(PageMap **lhs, uint64_t row_count, uint64_t row_length);
rc_t PageMapNewFixedRowLength(PageMap **lhs, uint64_t row_count, uint64_t row_len);
-uint32_t PageMapFastRowCount(const PageMap *self);
+rc_t PageMapToRandomAccess(PageMap **rslt, PageMap * src,uint32_t *data_offset);
uint32_t PageMapFixedRowLength(const PageMap *self);
+rc_t PageMapRowLengthRange(const PageMap *self, elem_count_t *min,elem_count_t *max);
+
uint32_t PageMapHasSimpleStructure(const PageMap *self);
rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length, bool same_data);
@@ -95,6 +186,9 @@ rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length,
/* concatenate two page maps */
rc_t PageMapAppend(PageMap *self, const PageMap *other);
+/** Find data using pagemap ***/
+rc_t PageMapFindRow(const PageMap *cself,uint64_t row,uint32_t * data_offset,uint32_t * data_length,uint32_t * repeat_count);
+
/*
-1: error
@@ -106,28 +200,36 @@ int PageMapCompare(const PageMap *a, const PageMap *b);
/* same but static columns */
int PageMapCompareStatic(const PageMap *a, const PageMap *b);
-enum PageMapIteratorVariants {
- pmivConstant,
- pmivVersion1, /* fixed row length and no repeats */
- pmivFixedRowLength,
- pmivFull /* variable row length and has repeats */
-};
-
typedef struct PageMapIterator PageMapIterator;
struct PageMapIterator {
- row_count_t end_row;
- row_count_t cur_row;
- const elem_count_t *length;
- const elem_count_t *offset;
- const row_count_t *repeat;
- enum PageMapIteratorVariants variant;
+ row_count_t last_row;
+ row_count_t cur_row;
+ PageMapRegion** rgns; /** all regions from the pagemap **/
+ pm_size_t cur_rgn; /** offset of the current region **/
+ row_count_t cur_rgn_row; /** row relative to offset of the region **/
+ elem_count_t **exp_base; /*** exp buffer ***/
+ row_count_t repeat_count; /** remaining repeat count **/
+ elem_count_t static_datalen;
+#if _HEAVY_PAGEMAP_DEBUGGING
+ PageMap *parent;
+#endif
};
rc_t PageMapNewIterator(const PageMap *self, PageMapIterator *lhs, uint64_t first_row, uint64_t num_rows);
-static __inline__ bool PageMapIteratorAdvance(PageMapIterator *self, row_count_t rows) {
- if (self->cur_row + rows < self->end_row) {
- self->cur_row += rows;
+static __inline__ bool PageMapIteratorAdvance(PageMapIterator *self, row_count_t rows)
+{
+ if (self->cur_row + rows < self->last_row) {
+ self->cur_row += rows;
+ self->cur_rgn_row += rows;
+ if(self->repeat_count > rows) self->repeat_count-= rows;
+ else self->repeat_count = 0;
+ if(self->rgns){/** non-static, non simple random access**/
+ while((*self->rgns)[self->cur_rgn].numrows <= self->cur_rgn_row){
+ self->cur_rgn_row -= (*self->rgns)[self->cur_rgn].numrows;
+ self->cur_rgn++;
+ }
+ }
return true;
}
return false;
@@ -135,38 +237,147 @@ static __inline__ bool PageMapIteratorAdvance(PageMapIterator *self, row_count_t
#define PageMapIteratorNext(SELF) PageMapIteratorAdvance(SELF, 1)
-static __inline__ elem_count_t PageMapIteratorDataLength(const PageMapIterator *self) {
- switch (self->variant) {
- default:
- return self->length[0];
- case pmivFull:
- return self->length[self->cur_row];
+static __inline__ elem_count_t PageMapIteratorDataLength(const PageMapIterator *self)
+{
+ elem_count_t datalen=0;
+ if(self->rgns == NULL) {/* static or simple random-access*/
+ return self->static_datalen;
}
+ switch ((*self->rgns)[self->cur_rgn].type){
+ case PM_REGION_EXPAND_FULL:
+ if((*self->rgns)[self->cur_rgn].expanded){
+ datalen = (*self->exp_base)[(*self->rgns)[self->cur_rgn].data_offset + 2*self->cur_rgn_row];
+ } else {
+ datalen = (*self->rgns)[self->cur_rgn].length;
+ }
+ break;
+ case PM_REGION_EXPAND_SAMELEN:
+ case PM_REGION_EXPAND_EQUIDISTANT:
+ case PM_REGION_EXPAND_SAMEDATA:
+ datalen = (*self->rgns)[self->cur_rgn].length;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+#if _HEAVY_PAGEMAP_DEBUGGING
+ {
+ elem_count_t dtl,dto,dtr;
+ PageMapFindRow(self->parent,self->cur_row,&dto,&dtl,&dtr);
+ assert(dtl==datalen);
+ }
+#endif
+ /*printf("DATA_LEN=%d\n",datalen);*/
+ return datalen;
}
-static __inline__ elem_count_t PageMapIteratorDataOffset(const PageMapIterator *self) {
- switch (self->variant) {
- case pmivConstant:
- return 0;
- case pmivVersion1:
- return self->length[0] * self->cur_row;
- default:
- return self->offset[self->cur_row];
+static __inline__ elem_count_t PageMapIteratorDataOffset(const PageMapIterator *self)
+{
+ elem_count_t dataoff=0;
+ if(self->rgns == NULL){ /** static or simple random **/
+ if(self->exp_base != NULL) /** simple random access */
+ dataoff= (*self->exp_base)[self->cur_row];
+ return dataoff;
+ }
+ switch ((*self->rgns)[self->cur_rgn].type){
+ case PM_REGION_EXPAND_FULL:
+ if((*self->rgns)[self->cur_rgn].expanded){
+ dataoff = (*self->exp_base)[(*self->rgns)[self->cur_rgn].data_offset + 2*self->cur_rgn_row + 1];
+ } else {
+ dataoff = (*self->rgns)[self->cur_rgn].data_offset;
+ }
+ break;
+ case PM_REGION_EXPAND_SAMELEN:
+ if((*self->rgns)[self->cur_rgn].expanded){
+ dataoff = (*self->exp_base)[(*self->rgns)[self->cur_rgn].data_offset + self->cur_rgn_row];
+ } else {
+ dataoff = (*self->rgns)[self->cur_rgn].data_offset;
+ }
+ break;
+ case PM_REGION_EXPAND_EQUIDISTANT:
+ dataoff = (*self->rgns)[self->cur_rgn].data_offset + (*self->rgns)[self->cur_rgn].length * self->cur_rgn_row;
+ break;
+ case PM_REGION_EXPAND_SAMEDATA:
+ dataoff = (*self->rgns)[self->cur_rgn].data_offset;
+ break;
+ default:
+ assert(0);
+ break;
}
+#if _HEAVY_PAGEMAP_DEBUGGING
+ {
+ elem_count_t dtl,dto,dtr;
+ PageMapFindRow(self->parent,self->cur_row,&dto,&dtl,&dtr);
+ assert(dto==dataoff);
+ }
+#endif
+ return dataoff;
}
-static __inline__ row_count_t PageMapIteratorRepeatCount(const PageMapIterator *self) {
- switch (self->variant) {
- case pmivConstant:
- return self->end_row - self->cur_row;
- case pmivVersion1:
- return 1;
- default:
- return self->repeat[self->cur_row];
+static __inline__ row_count_t PageMapIteratorRepeatCount(const PageMapIterator *cself)
+{
+ if(cself->repeat_count==0){
+ PageMapIterator *self = (PageMapIterator*) cself;
+ if(self->rgns==NULL){ /** must be simple random access **/
+ uint64_t i;
+ assert(*self->exp_base);
+ for(i=self->cur_row+1,self->repeat_count=1;
+ i< self->last_row && (*self->exp_base)[i]==(*self->exp_base)[self->cur_row];
+ i++,self->repeat_count++){}
+ } else {
+ switch ((*self->rgns)[self->cur_rgn].type){
+ case PM_REGION_EXPAND_FULL:
+ if((*self->rgns)[self->cur_rgn].expanded){
+ int i;
+ elem_count_t* base = (*self->exp_base) + (*self->rgns)[self->cur_rgn].data_offset;
+ self->repeat_count = 1;
+ for(i=self->cur_rgn_row+1;i<(*self->rgns)[self->cur_rgn].numrows;i++){
+ if(base[2*self->cur_rgn_row]== base[2*i] && base[2*self->cur_rgn_row+1]== base[2*i+1]) self->repeat_count++;
+ else break;
+ }
+ } else {
+ self->repeat_count = (*self->rgns)[self->cur_rgn].numrows - self->cur_rgn_row;
+ }
+ break;
+ case PM_REGION_EXPAND_SAMELEN:
+ if((*self->rgns)[self->cur_rgn].expanded){
+ int i;
+ elem_count_t* base = (*self->exp_base) + (*self->rgns)[self->cur_rgn].data_offset;
+ self->repeat_count = 1;
+ for(i=self->cur_rgn_row+1;i<(*self->rgns)[self->cur_rgn].numrows;i++){
+ if(base[self->cur_rgn_row] == base[i]) self->repeat_count++;
+ else break;
+ }
+ } else {
+ self->repeat_count = (*self->rgns)[self->cur_rgn].numrows - self->cur_rgn_row;
+ }
+ break;
+ case PM_REGION_EXPAND_EQUIDISTANT:
+ self->repeat_count = 1;
+ break;
+ case PM_REGION_EXPAND_SAMEDATA:
+ self->repeat_count = (*self->rgns)[self->cur_rgn].numrows - self->cur_rgn_row;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+ }
}
+#if _HEAVY_PAGEMAP_DEBUGGING
+ {
+ elem_count_t dtl,dto,dtr;
+ PageMapFindRow(cself->parent,cself->cur_row,&dto,&dtl,&dtr);
+ assert(dtr==cself->repeat_count);
+ }
+#endif
+ return cself->repeat_count;
}
elem_count_t PageMapLastLength(const PageMap *cself);
bool PageMapHasRows(const PageMap *self);
+rc_t PageMapExpand(const PageMap *cself, row_count_t upto);
+rc_t PageMapExpandFull(const PageMap *cself);
+rc_t PageMapPreExpandFull(const PageMap *cself, row_count_t upto);
#endif /* _h_page_map_ */
diff --git a/libs/vdb/phys-cmn.c b/libs/vdb/phys-cmn.c
index 727b61c..7af0c10 100644
--- a/libs/vdb/phys-cmn.c
+++ b/libs/vdb/phys-cmn.c
@@ -415,7 +415,7 @@ rc_t VPhysicalReadKColumn ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t
num_read = 2;
/* create data buffer */
- rc = KDataBufferMakeBytes ( & buffer, (uint32_t)( num_read + remaining ) );
+ rc = KDataBufferMakeBytes ( & buffer, num_read + remaining );
if ( rc == 0 )
{
/* read entire blob */
@@ -458,7 +458,7 @@ rc_t VPhysicalReadKColumn ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t
* read a blob from static data or decoding chain
*/
static
-rc_t VPhysicalReadStatic ( VPhysical *self, VBlob **vblob, uint32_t elem_bits )
+rc_t VPhysicalReadStatic ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t elem_bits )
{
bool reversed;
rc_t rc = KMDataNodeByteOrder ( self -> knode, & reversed );
@@ -515,10 +515,23 @@ rc_t VPhysicalReadStatic ( VPhysical *self, VBlob **vblob, uint32_t elem_bits )
rc = KDataBufferMake ( & buffer, elem_bits, ( uint32_t ) ( row_bits / elem_bits ) );
if ( rc == 0 )
{
+ int64_t sstart_id = self -> sstart_id;
+ int64_t sstop_id = self -> sstop_id;
+
/* copy out single row */
memcpy ( buffer . base, base, bytes );
+ self->fixed_len = buffer.elem_count;
+
+ /* limit row range */
+ if ( ( ( sstop_id - sstart_id ) >> 32 ) != 0 )
+ {
+ sstart_id = ((id-1) & ~0x7fffffffUL ) + 1; /** Truncate to the nearest 2 billion **/
+ if ( ( ( sstop_id - sstart_id ) >> 32 ) != 0 ) /** still not enough ***/
+ sstop_id = sstart_id + 0x80000000UL ; /** leave only 2 billion */
+ }
+
rc = VBlobCreateFromSingleRow ( vblob,
- self -> sstart_id, self -> sstop_id, & buffer, byte_order );
+ sstart_id, sstop_id, & buffer, byte_order );
KDataBufferWhack( &buffer );
}
}
@@ -537,11 +550,18 @@ rc_t VPhysicalReadBlob ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t el
if ( self -> knode != NULL &&
id >= self -> sstart_id && id <= self -> sstop_id )
{
- return VPhysicalReadStatic ( self, vblob, elem_bits );
+ return VPhysicalReadStatic ( self, vblob, id, elem_bits );
}
-
+ {
/* need to read from kcolumn path */
- return VProductionReadBlob ( self -> b2p, vblob, id , 1);
+ rc_t rc = VProductionReadBlob ( self -> b2p, vblob, id , 1, NULL);
+ if(rc == 0){
+ if((*vblob)->pm==NULL){
+ rc = PageMapProcessGetPagemap(&self->curs->pmpr,&(*vblob)->pm);
+ }
+ }
+ return rc;
+ }
}
@@ -550,9 +570,10 @@ rc_t VPhysicalReadBlob ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t el
*/
rc_t VPhysicalProdMake ( VProduction **prodp, Vector *owned,
- VPhysical *phys, int sub, const char *name,
+ struct VCursor *curs, VPhysical *phys, int sub, const char *name,
const VFormatdecl *fd, const VTypedesc *desc )
{
+#define PHYSPROD_INDEX_OFFSET 1000000000
VPhysicalProd *prod;
rc_t rc = VProductionMake ( prodp, owned, sizeof * prod,
prodPhysical, sub, name, fd, desc, NULL, chainDecoding );
@@ -562,6 +583,10 @@ rc_t VPhysicalProdMake ( VProduction **prodp, Vector *owned,
/* this class only knows how to redirect messages to VPhysical */
prod -> phys = phys;
+ if(sub == prodPhysicalOut){
+ (*prodp) -> cctx.cache = curs->blob_mru_cache;
+ (*prodp) -> cctx.col_idx = PHYSPROD_INDEX_OFFSET + (++curs -> phys_cnt);
+ }
}
return rc;
}
diff --git a/libs/vdb/prod-cmn.c b/libs/vdb/prod-cmn.c
index bc0e275..3be26a4 100644
--- a/libs/vdb/prod-cmn.c
+++ b/libs/vdb/prod-cmn.c
@@ -65,6 +65,10 @@
#include <stdio.h>
#include <limits.h>
+#if ! WINDOWS
+#define LAUNCH_PAGEMAP_THREAD 1
+#endif
+
/*--------------------------------------------------------------------------
* VBlob
@@ -168,7 +172,7 @@ static
void VProductionFlushCacheDeep ( VProduction *self, const char *context )
{
int i;
- for ( i = 0; i < PROD_CACHE; ++ i )
+ for ( i = 0; i < self -> cache_cnt; ++ i )
{
#if TRACKING_BLOBS
if ( self -> cache [ i ] != NULL )
@@ -196,7 +200,7 @@ void VProductionFlushCacheDeep ( VProduction *self, const char *context )
/* Make
*/
-rc_t VSimpleProdMake ( VProduction **prodp, Vector *owned,
+rc_t VSimpleProdMake ( VProduction **prodp, Vector *owned, struct VCursor const *curs,
int sub, const char *name, const VFormatdecl *fd, const VTypedesc *desc,
const VCtxId *cid, VProduction *in, uint8_t chain )
{
@@ -207,6 +211,7 @@ rc_t VSimpleProdMake ( VProduction **prodp, Vector *owned,
{
prod = ( VSimpleProd* ) * prodp;
prod -> in = in;
+ prod -> curs = curs;
}
return rc;
}
@@ -214,7 +219,7 @@ rc_t VSimpleProdMake ( VProduction **prodp, Vector *owned,
static
rc_t VSimpleProdPage2Blob ( VSimpleProd *self, VBlob **rslt, int64_t id ,uint32_t cnt)
{
- return VProductionReadBlob(self->in, rslt, id, cnt);
+ return VProductionReadBlob(self->in, rslt, id, cnt, NULL);
}
static
@@ -222,7 +227,7 @@ rc_t VSimpleProdSerial2Blob ( VSimpleProd *self, VBlob **rslt, int64_t id, uint3
{
/* read serialized blob */
VBlob *sblob;
- rc_t rc = VProductionReadBlob ( self -> in, &sblob, id, cnt );
+ rc_t rc = VProductionReadBlob ( self -> in, &sblob, id, cnt, NULL );
if ( rc == 0 )
{
/* recast data to 8 bit */
@@ -232,8 +237,18 @@ rc_t VSimpleProdSerial2Blob ( VSimpleProd *self, VBlob **rslt, int64_t id, uint3
{
/* create a new, fluffy blob having rowmap and headers */
VBlob *y;
+#if LAUNCH_PAGEMAP_THREAD
+ if(self->curs->pagemap_thread == NULL){
+ VCursor *curs = (VCursor*) self->curs;
+ if(--curs->launch_cnt<=0){
+ /* ignoring errors because we operate with or without thread */
+ VCursorLaunchPagemapThread(curs);
+ }
+ }
+#endif
+
rc = VBlobCreateFromData ( & y, sblob -> start_id, sblob -> stop_id,
- & buffer, VTypedescSizeof ( & self -> dad . desc ) );
+ & buffer, VTypedescSizeof ( & self -> dad . desc ), self->curs->pagemap_thread?&self->curs->pmpr:NULL );
KDataBufferWhack ( & buffer );
/* return on success */
@@ -254,7 +269,7 @@ rc_t VSimpleProdBlob2Serial( VSimpleProd *self, VBlob **rslt, int64_t id, uint32
rc_t rc;
VBlob *sblob;
- rc = VProductionReadBlob(self->in, &sblob, id, cnt);
+ rc = VProductionReadBlob(self->in, &sblob, id, cnt, NULL);
if (rc == 0) {
VBlob *y;
@@ -283,14 +298,14 @@ rc_t VSimpleProdBlob2Serial( VSimpleProd *self, VBlob **rslt, int64_t id, uint32
/* Read
* return a blob containing row id
*/
-rc_t VSimpleProdRead ( VSimpleProd *self, VBlob **vblob, int64_t id, uint32_t cnt )
+rc_t VSimpleProdRead ( VSimpleProd *self, VBlob **vblob, int64_t id, uint32_t cnt, VBlobMRUCacheCursorContext *cctx)
{
rc_t rc;
switch ( self -> dad . sub )
{
case prodSimpleCast:
- rc = VProductionReadBlob ( self -> in, vblob, id , cnt );
+ rc = VProductionReadBlob ( self -> in, vblob, id , cnt, cctx );
break;
case prodSimplePage2Blob:
return VSimpleProdPage2Blob(self, vblob, id, cnt);
@@ -494,8 +509,6 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
uint32_t row_count, const VXformInfo *info, Vector *args )
{
rc_t rc;
- int64_t start_id;
- int64_t stop_id;
uint32_t i, argc = VectorLength ( args );
VRowResult rslt;
VRowData args_os[16], *args_oh, *argv;
@@ -505,6 +518,7 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
PageMapIterator iter_os[16], *iter_oh, *iter;
uint64_t last = 0;
uint32_t last_len = 0;
+ uint64_t window;
if (argc == 0) {
memset(&scratch, 0, sizeof(scratch));
@@ -536,44 +550,56 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
KDataBufferWhack(&scratch);
return rc;
}
-
- /* get row range */
-#define MAX_BLOB_REGROUP 1024 /** max rows in blob for regrouping ***/
-#if 1
- for (start_id=-INT64_MAX - 1,stop_id=INT64_MAX,i = 0; i != argc; ++ i) {
+
+
+#define MAX_BLOB_REGROUP 256 /** max rows in blob for regrouping ***/
+ window=self->stop_id-self->start_id+1;/*** from previous fetch **/
+ if(row_id == self->stop_id+1){ /** sequentual io ***/
+ if( window < MAX_BLOB_REGROUP && (row_id%(4*window))==1){
+ window *=4;
+ }
+ } else {
+ window = 1;
+ }
+
+ if(window == 1){
+ self->start_id=self->stop_id=row_id;
+ if(row_count > 0) self->stop_id += row_count-1;
+ } else {
+ for (self->start_id=-INT64_MAX - 1,self->stop_id=INT64_MAX,i = 0; i != argc; ++ i) {
in = VectorGet(args, i);
- if(start_id < in->start_id) start_id=in->start_id;
- if(stop_id > in->stop_id ) stop_id =in->stop_id;
+ if(self->start_id < in->start_id) self->start_id=in->start_id;
+ if(self->stop_id > in->stop_id ) self->stop_id =in->stop_id;
}
- assert(row_id >= start_id && row_id + row_count -1 <= stop_id);
- if(start_id==-INT64_MAX - 1 || stop_id==INT64_MAX){
- start_id=stop_id=row_id;
- if(row_count > 0) stop_id += row_count-1;
+ assert(row_id >= self->start_id && row_id + row_count -1 <= self->stop_id);
+ if(self->start_id==-INT64_MAX - 1 || self->stop_id==INT64_MAX){
+ self->start_id=self->stop_id=row_id;
+ if(row_count > 0) self->stop_id += row_count-1;
} else if ( row_count ==1 /*we are re-blobing */
- && stop_id - start_id > 2*MAX_BLOB_REGROUP){
- int n=(row_id-1)/MAX_BLOB_REGROUP;
- if(start_id <= n*MAX_BLOB_REGROUP) start_id=n*MAX_BLOB_REGROUP+1;
- if(stop_id > (n+1) * MAX_BLOB_REGROUP) stop_id = (n+1)*MAX_BLOB_REGROUP;
+ && self->stop_id - self->start_id > 2*window){
+ int64_t n=(row_id-1)/window;
+ if(self->start_id <= n*window) self->start_id=n*window+1;
+ if(self->stop_id > (n+1) * window) self->stop_id = (n+1)*window;
}
-#else
- start_id=stop_id=row_id;
- if(row_count > 0) stop_id += row_count-1;
-#endif
+ }
#if PROD_NAME
- rc = VBlobNew ( &blob, start_id, stop_id, self->dad.name );
+ rc = VBlobNew ( &blob, self->start_id, self->stop_id, self->dad.name );
#else
- rc = VBlobNew ( &blob, start_id, stop_id, "VFunctionProdCallDetRowFunc" );
+ rc = VBlobNew ( &blob, self->start_id, self->stop_id, "VFunctionProdCallDetRowFunc" );
#endif
TRACK_BLOB ( VBlobNew, blob );
if (rc)
return rc;
rc = PageMapNew(&blob->pm, BlobRowCount(blob));
+ if (rc == 0)
+ rc = PageMapPreExpandFull(blob->pm, BlobRowCount(blob));
if (rc) {
vblob_release(blob, NULL);
return rc;
}
+
memset(&scratch, 0, sizeof(scratch));
rslt.data = &scratch;
rslt.elem_bits = scratch.elem_bits = blob->data.elem_bits = VTypedescSizeof(&self->dad.desc);
@@ -585,22 +611,28 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
for (i = 0; i != argc; ++ i) {
in = VectorGet(args, i);
-
- rc = PageMapNewIterator(in->pm, &iter[i], 0, -1);
+
+ if(in->start_id == -INT64_MAX - 1 ) {
+ rc = PageMapNewIterator(in->pm, &iter[i],0,-1);
+ } else {
+ rc = PageMapNewIterator(in->pm, &iter[i], self->start_id-in->start_id, self->stop_id - self->start_id + 1);
+ }
if ( rc ) break;
+/*********
if ( !PageMapIteratorAdvance( &iter[i], (uint32_t)( start_id - in->start_id ) ) ) {
rc = RC(rcVDB, rcFunction, rcExecuting, rcBlob, rcCorrupt);
break;
}
+**********/
memset(&argv[i], 0, sizeof(argv[i]));
argv[i].variant = vrdData;
argv[i].u.data.elem_bits = in->data.elem_bits;
argv[i].u.data.base = in->data.base;
}
- for (row_id = start_id; row_id <= stop_id && rc == 0; ) {
+ for (row_id = self->start_id; row_id <= self->stop_id && rc == 0; ) {
uint32_t row_count = 1;
- if(self->dad.sub == vftRow){
+ if(self->dad.sub == vftRow ){
row_count = PageMapIteratorRepeatCount(&iter[0]);
for (i = 1; i != argc; ++i) {
@@ -608,8 +640,8 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
if (row_count > j)
row_count = j;
}
- if (row_id + row_count > stop_id + 1)
- row_count = (uint32_t)( stop_id + 1 - row_id );
+ if (row_id + row_count > self->stop_id + 1)
+ row_count = (uint32_t)( self->stop_id + 1 - row_id );
}
for (i = 0; i != argc; ++i) {
@@ -623,7 +655,7 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
assert(rslt.elem_count >> 32 == 0);
- if (row_id == start_id || last_len != rslt.elem_count ||
+ if ( row_id == self->start_id || last_len != rslt.elem_count ||
bitcmp(blob->data.base, last * rslt.elem_bits,
rslt.data->base, 0, rslt.elem_count * rslt.elem_bits) != 0)
{
@@ -745,7 +777,7 @@ rc_t VFunctionProdCallPageFunc( VFunctionProd *self, VBlob **rslt, int64_t id,
VECTOR_ALLOC_ARRAY(argc, argv, on_stack, on_heap);
VECTOR_ALLOC_ARRAY(argc, param, pb_stack, pb_heap);
-
+
memset(argv, 0, sizeof(argv[0]) * argc);
for (start_id = stop_id = 0,
@@ -754,6 +786,13 @@ rc_t VFunctionProdCallPageFunc( VFunctionProd *self, VBlob **rslt, int64_t id,
i = 0; i != argc ; ++i) {
const VBlob *b = (const VBlob *)VectorGet(args, i);
const VProduction *prod = (const VProduction *)VectorGet(&self->parms, i);
+
+
+ if(b->pm == NULL){
+ rc=PageMapProcessGetPagemap(&self->curs->pmpr,&b->pm);
+ if(rc != 0) return rc;
+ }
+
if (prod->control) {
param[i].variant = vrdControl;
@@ -1014,7 +1053,11 @@ rc_t VFunctionProdCallBlobFuncDecoding( VFunctionProd *self, VBlob *rslt,
* are fixed row-length so we know the data size
* we are relying on the blob deserialization code
* to set the page map up correctly */
- hdr = BlobHeadersCreateDummyHeader(0, 0, 0, BlobRowCount(sblob) * PageMapGetIdxRowInfo(sblob->pm, 0, 0));
+ if (sblob->pm == NULL) {
+ hdr = BlobHeadersCreateDummyHeader(0, 0, 0, (sblob->data.elem_bits * sblob->data.elem_count + 7) >> 3);
+ }
+ else
+ hdr = BlobHeadersCreateDummyHeader(0, 0, 0, BlobRowCount(sblob) * PageMapGetIdxRowInfo(sblob->pm, 0, 0));
/* leave rslt->headers null so that the next
* stage will also create a dummy header */
}
@@ -1083,7 +1126,12 @@ rc_t VFunctionProdCallBlobFunc( VFunctionProd *self, VBlob **prslt,
sblob = VectorGet(args, 0);
assert(sblob);
-
+ if(self->dad.chain == chainEncoding){
+ VBlobAddRef(sblob);
+ if(sblob->headers==NULL)/**first in encryption chain***/
+ VBlobPageMapOptimize(&sblob); /** try to optimize the blob **/
+ }
+
#if PROD_NAME
rc = VBlobNew(&rslt, sblob->start_id, sblob->stop_id, self->dad.name);
#else
@@ -1100,10 +1148,12 @@ rc_t VFunctionProdCallBlobFunc( VFunctionProd *self, VBlob **prslt,
rslt->byte_order = sblob->byte_order;
- if (self->dad.chain == chainEncoding)
+ if (self->dad.chain == chainEncoding){
rc = VFunctionProdCallBlobFuncEncoding(self, rslt, id, info, sblob);
- else
+ vblob_release( sblob, NULL );
+ } else {
rc = VFunctionProdCallBlobFuncDecoding(self, rslt, id, info, sblob);
+ }
if (rc == 0) {
*prslt = rslt;
@@ -1123,6 +1173,16 @@ rc_t VFunctionProdCallBlobNFunc( VFunctionProd *self, VBlob **rslt,
rc_t rc;
VECTOR_TO_ARRAY(argc, argv, on_stack, on_heap, args);
+ {
+ int i;
+ for(i=0;i<argc;i++){
+ VBlob const *vb=argv[i];
+ if(vb->pm == NULL){
+ rc=PageMapProcessGetPagemap(&self->curs->pmpr,&vb->pm);
+ if(rc != 0) return rc;
+ }
+ }
+ }
rc = self->u.bfN(self->fself, info, id, rslt, argc, argv);
if ( on_heap )
free( (void*) on_heap );
@@ -1203,34 +1263,13 @@ rc_t VFunctionProdCallByteswap ( VFunctionProd *self, VBlob **vblob,
* repair missing pagemap
*/
if (blob->pm == NULL) {
-#if 0
- uint32_t row_length = blob->data.elem_count / blob->row_count;
-
- if (row_length == 0)
- rc = RC(rcVDB, rcBlob, rcReading, rcBlob, rcCorrupt);
- else {
- uint32_t elem_count = row_length * blob->row_count;
- if (elem_count < blob->data.elem_count) {
- fprintf(stderr, "blob contains too much elements, expected %u have %u\n", elem_count, blob->data.elem_count );
-#if 1
- blob->data.elem_count = elem_count;
-#else
- blob->row_count = blob->data.elem_count / row_length;
- blob->stop_id = blob->start_id + blob->row_count - 1;
- fprintf(stderr, "new row_count: %u\n", blob->row_count );
-#endif
- }
- rc = PageMapNewFixedRowLength(&blob->pm, blob->row_count, row_length);
- }
-#else
- if (blob->data.elem_count % BlobRowCount(blob) != 0)
+ uint64_t row_count = BlobRowCount ( blob );
+ if ( row_count == 0 || blob->data.elem_count % row_count != 0)
rc = RC(rcVDB, rcBlob, rcReading, rcBlob, rcCorrupt);
else {
- uint64_t row_len = blob->data.elem_count / BlobRowCount(blob);
- assert(row_len >> 32 == 0);
- rc = PageMapNewFixedRowLength(&blob->pm, BlobRowCount(blob), (uint32_t)row_len);
+ uint64_t row_len = blob->data.elem_count / row_count;
+ rc = PageMapNewFixedRowLength(&blob->pm, row_count, row_len);
}
-#endif
}
}
@@ -1290,7 +1329,7 @@ rc_t VFunctionProdCallCompare1(VFunctionProd *self, VBlob **vblob, int64_t id, u
*vblob = NULL;
assert(VectorLength(&self->parms) == 2);
- rc = VProductionReadBlob((const VProduction *)VectorGet(&self->parms, 0), &orig, id, cnt);
+ rc = VProductionReadBlob((const VProduction *)VectorGet(&self->parms, 0), &orig, id, cnt, NULL);
if (rc == 0) {
int64_t i;
PageMapIterator oi;
@@ -1308,7 +1347,7 @@ rc_t VFunctionProdCallCompare1(VFunctionProd *self, VBlob **vblob, int64_t id, u
j = PageMapIteratorDataLength(&oi);
- rc = VProductionReadBlob(test_prod, &test, i, 1);
+ rc = VProductionReadBlob(test_prod, &test, i, 1, NULL);
if (rc == 0) {
if (orig->data.elem_bits != test->data.elem_bits || orig->byte_order != test->byte_order)
rc = RC(rcVDB, rcBlob, rcValidating, rcBlob, rcCorrupt);
@@ -1380,8 +1419,7 @@ rc_t VFunctionProdCallCompare1(VFunctionProd *self, VBlob **vblob, int64_t id, u
}
vblob_release(test, NULL);
if (rc)
- break;
- }
+ break; }
else
break;
PageMapIteratorAdvance(&oi, 1);
@@ -1396,19 +1434,24 @@ static
rc_t VFunctionProdCallCompare( VFunctionProd *self, VBlob **vblob, int64_t id, uint32_t cnt ) {
VBlob *orig;
rc_t rc;
+ VProduction const *orig_prod;
*vblob = NULL;
assert(VectorLength(&self->parms) == 2);
- rc = VProductionReadBlob((const VProduction *)VectorGet(&self->parms, 0), &orig, id, cnt);
+ orig_prod = (const VProduction *)VectorGet(&self->parms, 0);
+ rc = VProductionReadBlob(orig_prod, &orig, id, cnt, NULL);
if (rc == 0) {
VBlob *test;
const VProduction *test_prod = VectorGet(&self->parms, 1);
- rc = VProductionReadBlob(test_prod, &test, id, cnt);
+ rc = VProductionReadBlob(test_prod, &test, id, cnt, NULL);
if (rc == 0) {
- if (orig->data.elem_bits != test->data.elem_bits || orig->byte_order != test->byte_order)
+ if (orig->data.elem_bits != test->data.elem_bits || orig->byte_order != test->byte_order){
rc = RC(rcVDB, rcBlob, rcValidating, rcBlob, rcCorrupt);
- else {
+ } else if( orig->pm->data_recs != 1 /*** catching static **/
+ || test->pm->data_recs != 1 /*** trying quick comparison **/
+ || orig->data.elem_count != test->data.elem_count
+ || memcmp( orig->data.base, test->data.base, (orig->data.elem_bits*orig->data.elem_count+7)/8)){
uint64_t i;
PageMapIterator oi;
PageMapIterator ti;
@@ -1464,7 +1507,7 @@ rc_t VFunctionProdCallCompare( VFunctionProd *self, VBlob **vblob, int64_t id, u
break;
}
i += j;
- if ( done || (int64_t)i > orig->stop_id || !PageMapIteratorAdvance( &ti, 0 ) )
+ if ( done || (int64_t)i > orig->stop_id || test->pm->random_access || orig->pm->random_access || !PageMapIteratorAdvance( &ti, 0 ) )
break;
}
if (rc)
@@ -1492,7 +1535,7 @@ rc_t VFunctionProdCallCompare( VFunctionProd *self, VBlob **vblob, int64_t id, u
if (!PageMapIteratorAdvance(&ti, 0)) {
VBlob *temp;
- rc = VProductionReadBlob(test_prod, &temp, i, orig->stop_id - i);
+ rc = VProductionReadBlob(test_prod, &temp, i, orig->stop_id - i, NULL);
if (rc == 0) {
vblob_release(test, NULL);
test = temp;
@@ -1532,7 +1575,7 @@ bool CC fetch_param_blob ( void *item, void *data )
fetch_param_blob_data *pb = data;
VBlob *blob;
- pb -> rc = VProductionReadBlob ( item, & blob, pb -> id , pb -> cnt);
+ pb -> rc = VProductionReadBlob ( item, & blob, pb -> id , pb -> cnt, NULL);
if ( pb -> rc == 0 )
{
pb -> rc = VectorAppend ( pb -> inputs, NULL, blob );
@@ -1552,7 +1595,7 @@ bool CC fetch_first_param_blob ( void *item, void *data )
{
fetch_param_blob_data *pb = data;
- pb -> rc = VProductionReadBlob ( item, &pb->vblob, pb -> id , pb -> cnt);
+ pb -> rc = VProductionReadBlob ( item, &pb->vblob, pb -> id , pb -> cnt, NULL);
if (GetRCState(pb->rc) == rcNotFound)
return false;
if ( pb -> vblob -> data.elem_count == 0 )
@@ -1660,7 +1703,7 @@ static rc_t VFunctionProdReadNormal ( VFunctionProd *self, VBlob **vblob, int64_
rc = RC ( rcVDB, rcFunction, rcReading, rcProduction, rcNull );
}
else {
- if (vb -> start_id > id_run) { /*** shoudn't happen ***/
+ if (vb -> start_id > id_run || vb -> stop_id < id_run) { /*** shoudn't happen ***/
rc = RC ( rcVDB, rcBlob, rcReading, rcRange, rcInsufficient );
}
if (*vblob == NULL) {
@@ -1784,7 +1827,7 @@ bool CC fetch_param_FixedRowLength ( void *item, void *data )
static
uint32_t VFunctionProdFixedRowLength ( const VFunctionProd *self, int64_t row_id,bool ignore_self )
{
- if(ignore_self == false && (self->dad.sub == vftRow || self->dad.sub == vftNonDetRow || self->dad.sub == vftIdDepRow)){
+ if(ignore_self == false && (self->dad.sub == vftRow || self->dad.sub == vftNonDetRow || self->dad.sub == vftIdDepRow )){
return 0;
} else {
fetch_param_FixedRowLength_data pb;
@@ -1800,7 +1843,7 @@ uint32_t VFunctionProdFixedRowLength ( const VFunctionProd *self, int64_t row_id
* VScriptProd
*/
-rc_t VScriptProdMake ( VScriptProd **prodp, Vector *owned,
+rc_t VScriptProdMake ( VScriptProd **prodp, Vector *owned, struct VCursor const *curs,
int sub, const char *name, const VFormatdecl *fd,
const VTypedesc *desc, uint8_t chain )
{
@@ -1810,6 +1853,7 @@ rc_t VScriptProdMake ( VScriptProd **prodp, Vector *owned,
if ( rc == 0 )
{
prod = * prodp;
+ prod -> curs = curs;
VectorInit ( & prod -> owned, 0, 4 );
}
return rc;
@@ -1825,7 +1869,7 @@ void VScriptProdDestroy ( VScriptProd *self )
*/
rc_t VScriptProdRead ( VScriptProd *self, VBlob **vblob, int64_t id,uint32_t cnt )
{
- return VProductionReadBlob ( self -> rtn, vblob, id , cnt);
+ return VProductionReadBlob ( self -> rtn, vblob, id , cnt, NULL);
}
static rc_t VScriptProdColumnIdRange ( const VScriptProd *self, int64_t *first, int64_t *last )
@@ -1957,6 +2001,9 @@ LIB_EXPORT int CC VProductionSort ( const void *item, const void *n )
rc_t VProductionColumnIdRange ( const VProduction *self,
int64_t *first, int64_t *last )
{
+ if ( self <= FAILED_PRODUCTION )
+ return 0;
+
switch ( self -> var )
{
case prodSimple:
@@ -1970,7 +2017,7 @@ rc_t VProductionColumnIdRange ( const VProduction *self,
case prodColumn:
return RC ( rcVDB, rcColumn, rcAccessing, rcRange, rcEmpty );
}
-
+
return RC ( rcVDB, rcColumn, rcAccessing, rcType, rcUnknown );
}
@@ -1978,7 +2025,7 @@ rc_t VProductionPageIdRange ( VProduction *self,
int64_t id, int64_t *first, int64_t *last )
{
VBlob *blob;
- rc_t rc = VProductionReadBlob ( self, & blob, id , 1);
+ rc_t rc = VProductionReadBlob ( self, & blob, id , 1, NULL);
if ( rc == 0 )
{
* first = blob -> start_id;
@@ -1997,11 +2044,11 @@ uint32_t VProductionRowLength ( const VProduction *self, int64_t row_id )
uint32_t row_len;
VBlob *blob;
- rc_t rc = VProductionReadBlob ( self, & blob, row_id, 1 );
+ rc_t rc = VProductionReadBlob ( self, & blob, row_id, 1, NULL );
if ( rc != 0 )
return 0;
- row_len = PageMapGetIdxRowInfo ( blob -> pm, (uint32_t)row_id, NULL );
+ row_len = PageMapGetIdxRowInfo ( blob -> pm, (uint32_t)( row_id - blob -> start_id) , NULL );
vblob_release ( blob, NULL );
@@ -2032,7 +2079,7 @@ uint32_t VProductionFixedRowLength ( const VProduction *self, int64_t row_id,boo
/* ReadBlob
*/
-rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id, uint32_t cnt )
+rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id, uint32_t cnt, VBlobMRUCacheCursorContext *cctx )
{
rc_t rc;
VProduction *self = ( VProduction* ) cself;
@@ -2048,9 +2095,25 @@ rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id,
if ( self == NULL )
return RC ( rcVDB, rcProduction, rcReading, rcSelf, rcNull );
+ /*** Cursor-level column blobs may be 1-to-1 with production blobs ***/
+ if(cctx != NULL && self->cctx.cache == NULL ){ /*** we are connected to read cursor **/
+ self->cctx = *cctx; /*** remember it ***/
+ /** No need to do anything else here - we are on "direct line" to the column ***/
+ } else if(self->cctx.cache != NULL){
+ /** somewhere else this production is connected to a cursor **/
+ /** lets try to get answers from the cursor **/
+ blob=(VBlob*) VBlobMRUCacheFind(self->cctx.cache,self->cctx.col_idx,id);
+ if(blob){
+ rc = VBlobAddRef ( blob );
+ if ( rc != 0 ) return rc;
+ *vblob=blob;
+ return 0;
+ }
+ }
+
#if PROD_CACHE
/* check cache */
- for ( i = 0; i < PROD_CACHE; ++ i )
+ for ( i = 0; i < self -> cache_cnt; ++ i )
{
blob = self -> cache [ i ];
if ( self -> cache [ i ] != NULL )
@@ -2083,10 +2146,11 @@ rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id,
/* MRU cache */
if ( i > 0 )
{
- do
- self -> cache [ i ] = self -> cache [ i - 1 ];
- while ( -- i > 0 );
+ memmove(self -> cache +1,self -> cache,i*sizeof(*self->cache));
self -> cache [ 0 ] = blob;
+ if( i > self->cache_cnt_max / 2 -1 ){ /** this is how wash area is defined **/
+ self->cache_wash_access_cnt++; /** we are accessing wash area of the cache **/
+ }
}
#endif
return 0;
@@ -2099,7 +2163,7 @@ rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id,
switch ( self -> var )
{
case prodSimple:
- rc = VSimpleProdRead ( ( VSimpleProd* ) self, vblob, id, cnt );
+ rc = VSimpleProdRead ( ( VSimpleProd* ) self, vblob, id, cnt,cctx );
break;
case prodFunc:
rc = VFunctionProdRead ( ( VFunctionProd* ) self, vblob, id , cnt);
@@ -2135,24 +2199,41 @@ rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id,
if ( ! blob -> no_cache )
return 0;
#endif
+ if(cctx == NULL && self->cctx.cache != NULL && blob->stop_id > blob->start_id + 4){/** we will benefit from caching here **/
+ VBlobMRUCacheSave(self->cctx.cache,self->cctx.col_idx,blob);
+ return 0;
+ }
+
+ if(blob->pm == NULL) return 0;
+
/* cache output */
rc = VBlobAddRef ( blob );
if ( rc == 0 )
{
VBlobCheckIntegrity ( blob );
-
- /* release whatever was there previously */
- vblob_release ( self -> cache [ PROD_CACHE - 1 ], NULL );
-
-#if PROD_CACHE > 1
- /* drop LRU */
- if ( self -> cache [ 0 ] != NULL )
- {
- for ( i = PROD_CACHE - 1; i > 0; -- i )
- self -> cache [ i ] = self -> cache [ i - 1 ];
- }
+ if(self -> cache_cnt_max == 0){ /*** set the cache size now ***/
+ self -> cache_cnt_max = PROD_CACHE;
+#if 0
+ } else if( self->var==prodScript
+ && self -> cache_cnt >= self -> cache_cnt_max
+ && self -> cache_cnt_max/PROD_CACHE < PROD_CACHE_MAX_EXTENTS
+ && self -> cache_wash_access_cnt > PROD_CACHE_WASH_ACCESS_THRESHOLD){ /** try to extend the cache ***/
+ self -> cache_cnt_max += PROD_CACHE;
+ self -> cache_wash_access_cnt = 0;
#endif
+ }
+ if(self -> cache_cnt < self -> cache_cnt_max){
+ if(self -> cache_cnt > 0 ){
+ memmove(self -> cache + 1, self -> cache , self -> cache_cnt * sizeof(*self -> cache));
+ }
+ self -> cache_cnt ++;
+ } else {
+ /* release whatever was there previously */
+ /* drop LRU */
+ vblob_release ( self -> cache [ self -> cache_cnt - 1 ], NULL );
+ memmove(self -> cache + 1, self -> cache , (self -> cache_cnt -1) * sizeof(*self -> cache));
+ }
/* insert a head of list */
self -> cache [ 0 ] = blob;
diff --git a/libs/vdb/prod-expr.c b/libs/vdb/prod-expr.c
index 3a2e9da..07a3080 100644
--- a/libs/vdb/prod-expr.c
+++ b/libs/vdb/prod-expr.c
@@ -127,7 +127,7 @@ rc_t VProdResolveCastExpr ( const VProdResolve *self, VProduction **out, const S
in all cases, the sizeof rh production element
matches "cast" size */
- rc = VSimpleProdMake ( out, self -> owned, prodSimpleCast,
+ rc = VSimpleProdMake ( out, self -> owned, self -> curs, prodSimpleCast,
"cast", & cast, & desc, NULL, * out, self -> chain );
}
@@ -196,7 +196,7 @@ rc_t VProdResolveSProduction ( const VProdResolve *self, VProduction **out, cons
{
const char *name = sprod -> name -> name . addr;
assert ( name [ sprod -> name -> name . size ] == 0 );
- rc = VSimpleProdMake ( out, self -> owned, prodSimpleCast,
+ rc = VSimpleProdMake ( out, self -> owned, self -> curs, prodSimpleCast,
name, & fd, & desc, & sprod -> cid, * out, self -> chain );
if ( rc == 0 )
{
@@ -762,7 +762,7 @@ rc_t VProdResolveColumnRead ( const VProdResolve *self,
/* create a simple prod to manage fd and desc */
name = scol -> name -> name . addr;
assert ( name [ scol -> name -> name . size ] == 0 );
- rc = VSimpleProdMake ( out, self -> owned, prodSimpleCast,
+ rc = VSimpleProdMake ( out, self -> owned, self->curs, prodSimpleCast,
name, & fd, & vcol -> desc, NULL, * out, self -> chain );
assert (rc != -1);
@@ -829,7 +829,7 @@ rc_t VProdResolvePhysicalRead ( const VProdResolve *self, VPhysical *phys )
/* create output adapter */
rc = VPhysicalProdMake ( & prod, self -> owned,
- phys, prodPhysicalOut, name, & fd, & desc );
+ curs, phys, prodPhysicalOut, name, & fd, & desc );
if ( rc != 0 )
return rc;
@@ -853,12 +853,12 @@ rc_t VProdResolvePhysicalRead ( const VProdResolve *self, VPhysical *phys )
/* create adapter */
rc = VPhysicalProdMake ( & prod, self -> owned,
- phys, prodPhysicalKCol, name, & fd, & desc );
+ curs, phys, prodPhysicalKCol, name, & fd, & desc );
if ( rc != 0 )
return rc;
/* create serial-to-blob stage */
- rc = VSimpleProdMake ( & prod, self -> owned,
+ rc = VSimpleProdMake ( & prod, self -> owned, self->curs,
prodSimpleSerial2Blob, name, & fd, & desc, NULL, prod, chainDecoding );
if ( rc != 0 )
return rc;
diff --git a/libs/vdb/prod-func.c b/libs/vdb/prod-func.c
index a7e18bd..173bd09 100644
--- a/libs/vdb/prod-func.c
+++ b/libs/vdb/prod-func.c
@@ -251,7 +251,7 @@ rc_t VProdResolveFuncParamExpr ( const VProdResolve *self, Vector *out,
assert ( name [ sprod -> name -> name . size ] == 0 );
}
- rc = VSimpleProdMake ( & prod, self -> owned,
+ rc = VSimpleProdMake ( & prod, self -> owned, self-> curs,
prodSimpleCast, name,fd, & desc, NULL, prod, self -> chain);
if ( rc == 0 )
{
@@ -405,7 +405,7 @@ rc_t VProdResolveScriptExpr ( const VProdResolve *self,
/* by this time, we have bound all parameters */
VScriptProd *script;
- rc = VScriptProdMake ( & script, self -> owned,
+ rc = VScriptProdMake ( & script, self -> owned, self->curs,
prodScriptFunction, name, & fd, & desc, self -> chain );
if ( rc == 0 )
{
@@ -766,7 +766,7 @@ rc_t VProdResolveEncodingExpr ( const VProdResolve *self,
{
VScriptProd *script;
const char *name = sphys -> name -> name . addr;
- rc = VScriptProdMake ( & script, self -> owned,
+ rc = VScriptProdMake ( & script, self -> owned, self->curs,
prodScriptFunction, name, & fd, NULL, self -> chain );
if ( rc == 0 )
{
diff --git a/libs/vdb/prod-priv.h b/libs/vdb/prod-priv.h
index b30d37c..81a45fb 100644
--- a/libs/vdb/prod-priv.h
+++ b/libs/vdb/prod-priv.h
@@ -43,12 +43,34 @@
#include "schema-priv.h"
#endif
+#ifndef _h_blob_priv_
+#include "blob-priv.h"
+#endif
+
+
#ifdef __cplusplus
extern "C" {
#endif
-#define PROD_CACHE 4
+#define PROD_CACHE 2 /** default size of Production Cache ***/
+#define PROD_CACHE_MAX_EXTENTS 4 /** maximum multiplier for extending selected production caches when random io is detected ***/
+#define PROD_CACHE_WASH_ACCESS_THRESHOLD 10 /** number of accesses to wash part of the cache to trigger cache extension ***/
+ /** this is to determine random access pattern ***/
+
+/* IT IS A BAD IDEA TO USE EXTERN COLUMNS IN EXPRESSIONS
+ but it used to be okay in version 0 of the schema, so
+ it still occurs sometimes. We have allowed opening
+ columns from within schema but were afraid to alter the
+ row vector because this disturbs the serial allocation
+ of ids that could fool programmers trying to be clever.
+ Unfortunately, this resulted in a stray reference after
+ we shifted reference ownership to the row vector.
+
+ Setting this symbol to 1 will cause schema-opened columns
+ to be inserted into the row vector, disturbing the index
+ series passed out to clients, but not losing the reference. */
+#define OPEN_COLUMN_ALTERS_ROW 1
#if _DEBUGGING
#define PROD_NAME 1
@@ -63,6 +85,7 @@ struct VBlob;
struct VColumn;
struct VPhysical;
struct VProdResolve;
+struct VBlobMRUCacheCursorContext;
/*--------------------------------------------------------------------------
@@ -107,7 +130,10 @@ struct VProduction
#endif
#if PROD_CACHE
/* cached output */
- struct VBlob *cache [ PROD_CACHE ];
+ struct VBlob *cache [ PROD_CACHE * PROD_CACHE_MAX_EXTENTS];
+ uint32_t cache_cnt_max;
+ uint32_t cache_cnt;
+ uint32_t cache_wash_access_cnt;
#endif
/* format declaration and element type description */
VFormatdecl fd;
@@ -130,6 +156,8 @@ struct VProduction
/* true if used as control parameter */
bool control;
+ /* is this production directly connected to a Column in a Cursor */
+ VBlobMRUCacheCursorContext cctx;
};
@@ -203,7 +231,7 @@ uint32_t VProductionFixedRowLength ( const VProduction *self, int64_t row_id, bo
* fetch a blob containing at least the requested row
* returns a new reference
*/
-rc_t VProductionReadBlob ( const VProduction *self, struct VBlob **vblob, int64_t id , uint32_t cnt);
+rc_t VProductionReadBlob ( const VProduction *self, struct VBlob **vblob, int64_t id , uint32_t cnt, struct VBlobMRUCacheCursorContext* cctx);
/*--------------------------------------------------------------------------
@@ -228,10 +256,11 @@ struct VSimpleProd
{
VProduction dad;
VProduction *in;
+ struct VCursor const *curs;
};
rc_t VSimpleProdMake ( VProduction **prod, Vector *owned,
- int sub, const char *name, const VFormatdecl *fd,
+ struct VCursor const *curs,int sub, const char *name, const VFormatdecl *fd,
const VTypedesc *desc, const VCtxId *cid,
VProduction *in, uint8_t chain );
@@ -241,7 +270,7 @@ rc_t VSimpleProdMake ( VProduction **prod, Vector *owned,
/* Read
* return a blob containing row id
*/
-rc_t VSimpleProdRead ( VSimpleProd *self, struct VBlob **vblob, int64_t id, uint32_t cnt );
+rc_t VSimpleProdRead ( VSimpleProd *self, struct VBlob **vblob, int64_t id, uint32_t cnt, struct VBlobMRUCacheCursorContext *cctx );
/*--------------------------------------------------------------------------
@@ -294,6 +323,10 @@ struct VFunctionProd
/* vector of VProduction input parameters */
Vector parms;
+
+ /* adaptive prefetch parameters */
+ int64_t start_id;
+ int64_t stop_id;
};
@@ -332,11 +365,12 @@ struct VScriptProd
VProduction dad;
VProduction *rtn;
Vector owned;
+ struct VCursor const *curs;
};
rc_t VScriptProdMake ( VScriptProd **prod, Vector *owned,
- int sub, const char *name, const VFormatdecl *fd,
+ struct VCursor const *curs, int sub, const char *name, const VFormatdecl *fd,
const VTypedesc *desc, uint8_t chain );
void VScriptProdDestroy ( VScriptProd *self );
@@ -345,7 +379,7 @@ void VScriptProdDestroy ( VScriptProd *self );
/* Read
*/
rc_t VScriptProdRead ( VScriptProd *self,
- struct VBlob **vblob, int64_t id, uint32_t cnt );
+ struct VBlob **vblob, int64_t id, uint32_t cnt);
/*--------------------------------------------------------------------------
@@ -366,7 +400,7 @@ struct VPhysicalProd
};
rc_t VPhysicalProdMake ( VProduction **prod, Vector *owned,
- struct VPhysical *phys, int sub, const char *name,
+ struct VCursor *curs, struct VPhysical *phys, int sub, const char *name,
const VFormatdecl *fd, const VTypedesc *desc );
void VPhysicalProdDestroy ( VPhysicalProd *self );
diff --git a/libs/vdb/prod.c b/libs/vdb/prod.c
index d3370e4..eb9730d 100644
--- a/libs/vdb/prod.c
+++ b/libs/vdb/prod.c
@@ -83,9 +83,22 @@ rc_t VProdResolveColumn ( const VProdResolve *self,
if ( rc != 0 )
return rc;
+#if OPEN_COLUMN_ALTERS_ROW
+ rc = VectorAppend ( & curs -> row, & vcol -> ord, vcol );
+ if ( rc != 0 )
+ {
+ VColumnWhack ( vcol, NULL );
+ return rc;
+ }
+#endif
rc = VCursorCacheSet ( & curs -> col, & scol -> cid, vcol );
if ( rc != 0 )
{
+#if OPEN_COLUMN_ALTERS_ROW
+ void *ignore;
+ VectorSwap ( & curs -> row, vcol -> ord, NULL, & ignore );
+ vcol -> ord = 0;
+#endif
VColumnWhack ( vcol, NULL );
return rc;
}
diff --git a/libs/vdb/redimension.c b/libs/vdb/redimension.c
index e312c3b..3e22dfe 100644
--- a/libs/vdb/redimension.c
+++ b/libs/vdb/redimension.c
@@ -69,6 +69,7 @@ rc_t CC redimension_drvr(
if (rc == 0) {
y->byte_order = src->byte_order;
PageMapAddRef(y->pm = src->pm);
+ y->pm->optimized = eBlobPageMapOptimizedFailed; /** pagemap is no longer valid; prevent optimization ***/
BlobHeadersAddRef(y->headers = src->headers);
*rslt = y;
diff --git a/libs/vdb/report-vdb.c b/libs/vdb/report-vdb.c
new file mode 100644
index 0000000..a231dd7
--- /dev/null
+++ b/libs/vdb/report-vdb.c
@@ -0,0 +1,856 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vdb/extern.h>
+
+#include <klib/report.h> /* ReportInit */
+#include <klib/time.h> /* KTime */
+#include <klib/namelist.h> /* KNamelistRelease */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/klib-priv.h> /* ReportFuncs */
+
+#include <vdb/report.h> /* ... */
+#include <vdb/manager.h> /* VDBManagerVersion */
+#include <vdb/vdb-priv.h> /* VTableOpenKTableRead */
+#include <vdb/database.h> /* VDatabaseRelease */
+#include <vdb/table.h> /* VTableOpenParentRead */
+#include <vdb/dependencies.h> /* VDBDependenciesRelease */
+
+#include <kdb/kdb-priv.h> /* KDatabaseGetPath */
+#include <kdb/manager.h> /* kptDatabase */
+#include <kdb/database.h> /* KDatabaseRelease */
+#include <kdb/table.h> /* KTableRelease */
+
+#include <kfs/dyload.h> /* KDyld */
+#include <kfs/file.h> /* KFileRead */
+#include <kfs/nullfile.h> /* KFileMakeNullUpdate */
+#include <kfs/md5.h> /* KMD5SumFmt */
+
+#include <atomic.h>
+
+#include <stdarg.h> /* va_start */
+#include <stdio.h> /* sprintf */
+#include <stdlib.h> /* malloc */
+#include <string.h> /* memset */
+#include <limits.h> /* PATH_MAX */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+typedef struct Report {
+ const VDBManager* mgr;
+ const VDatabase* db;
+ const VTable* table;
+} Report;
+
+static Report *report_singleton;
+
+static rc_t CC ReportRelease ( void )
+{
+ rc_t rc = 0;
+ Report *prev_report, *cur_report;
+
+ cur_report = report_singleton;
+ do
+ {
+ prev_report = cur_report;
+ cur_report = atomic_test_and_set_ptr ( ( void* volatile* ) & report_singleton, NULL, prev_report );
+ }
+ while ( cur_report != prev_report );
+
+ if ( cur_report != NULL )
+ {
+ /* cleanup */
+ VTableRelease ( cur_report -> table );
+ VDatabaseRelease ( cur_report -> db );
+ VDBManagerRelease ( cur_report -> mgr );
+ memset ( cur_report, 0, sizeof * cur_report );
+ }
+
+ return rc;
+}
+
+static rc_t CC ReportObj(const ReportFuncs *f, uint32_t indent,
+ const char *path, bool *wasDbOrTableSet);
+static rc_t CC ReportSOFTWARE ( const ReportFuncs *f, uint32_t indent, const char *argv_0, const char *date, ver_t tool_ver );
+
+static rc_t ReportGet(Report** self)
+{
+ rc_t rc = 0;
+
+ static bool latch;
+ if ( ! latch )
+ {
+ static Report self;
+
+ rc = ReportInitVDB ( ReportObj, ReportSOFTWARE, ReportRelease );
+ if ( rc == 0 )
+ {
+ report_singleton = & self;
+ latch = true;
+ }
+ }
+
+ * self = ( Report* ) report_singleton;
+
+ return rc;
+}
+
+#define report ( * f -> report )
+#define reportData ( * f -> reportData )
+#define reportData1 ( * f -> reportData1 )
+#define reportOpen ( * f -> reportOpen )
+#define reportOpen1 ( * f -> reportOpen1 )
+#define reportClose ( * f -> reportClose )
+#define reportClose1 ( * f -> reportClose1 )
+#define reportError ( * f -> reportError )
+#define reportErrorStr ( * f -> reportErrorStr )
+#define reportErrorStrImpl ( * f -> reportErrorStrImpl )
+#define reportErrorStrInt ( * f -> reportErrorStrInt )
+#define reportError3Str ( * f -> reportError3Str )
+
+static
+rc_t ReportBuild(const ReportFuncs *f, uint32_t indent, bool dynamic, const VDBManager* mgr)
+{
+ rc_t rc = 0;
+ if (!dynamic)
+ { report(indent, "Build", 1, "static", 's', "true"); }
+ else {
+ KNamelist* list = NULL;
+ reportOpen(indent, "Build", 1, "static", 's', "false");
+ if (mgr) {
+ rc_t rc2 = VDBManagerListExternalSchemaModules(mgr, &list);
+ if (rc2 != 0) {
+ reportError
+ (indent + 1, rc2, "VDBManagerListExternalSchemaModules");
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ else {
+ uint32_t count = 0;
+ rc2 = KNamelistCount(list, &count);
+ if (rc2 != 0) {
+ reportErrorStr(indent + 1, rc2, "KNamelistCount", "origin",
+ "VDBManagerListExternalSchemaModules");
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ else {
+ int64_t i = 0;
+ for (i = 0; i < count && rc2 == 0; ++i) {
+ const char* name = NULL;
+ rc2 = KNamelistGet(list, i, &name);
+ if (rc2 != 0) {
+ reportErrorStr(
+ indent + 1, rc2, "KNamelistGet", "origin",
+ "VDBManagerListExternalSchemaModules");
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ else {
+ report(indent + 1, "Module", 1, "name", 's', name);
+ }
+ }
+ }
+ }
+ }
+ RELEASE(KNamelist, list);
+ reportClose(indent, "Build");
+ }
+ return rc;
+}
+
+static rc_t VDBDependenciesReportDepend1(const VDBDependencies *self,
+ const ReportFuncs *f,
+ uint32_t count, uint32_t indent, bool toreport, uint32_t *missing)
+{
+ KDirectory *dir = NULL;
+ rc_t rc = 0;
+ uint32_t i = ~0;
+
+ assert(count && missing);
+
+ *missing = 0;
+
+ for (i = 0; i < count; ++i) {
+ bool isMissing = false;
+ bool local = false;
+ const char* seq_id = "";
+ const char* path = NULL;
+ rc = VDBDependenciesSeqId(self, &seq_id, i);
+ if (rc != 0 && toreport)
+ reportErrorStrInt(indent, rc, "VDBDependenciesSeqId",
+ "origin", "VDatabaseListDependencies", "idx", i);
+ if (rc == 0) {
+ rc = VDBDependenciesLocal(self, &local, i);
+ if (rc != 0 && toreport) {
+ reportErrorStrInt(indent, rc,
+ "VDBDependenciesLocal",
+ "origin", "VDatabaseListDependencies", "idx", i);
+ }
+ }
+ if (rc == 0) {
+ rc = VDBDependenciesPath(self, &path, i);
+ if (rc != 0 && toreport) {
+ reportErrorStrInt(indent, rc, "VDBDependenciesPath",
+ "origin", "VDatabaseListDependencies", "idx", i);
+ }
+ }
+ if (rc == 0) {
+ if (!local && (path == NULL || path[0] == '\0')) {
+ isMissing = true;
+ ++*missing;
+ }
+ if (toreport) {
+ bool reported = false;
+ if (!isMissing && !local) {
+ rc_t rc = 0;
+ bool readable = false;
+ uint64_t size = ~0;
+ KTime_t date = 0;
+ bool ready = false;
+ if (dir == NULL)
+ { rc = KDirectoryNativeDir(&dir); }
+ assert(!local && path && path[0]);
+ if (dir != NULL) {
+ rc = KDirectoryFileSize(dir, &size, path);
+ if (rc == 0)
+ { rc = KDirectoryDate(dir, &date, path); }
+ if (rc == 0) {
+ const KFile* f = NULL;
+ rc = KDirectoryOpenFileRead(dir, &f, path);
+ if (rc == 0) {
+ char buffer[1024];
+ size_t num_read = 0;
+ size_t bsize =
+ size > sizeof buffer ? sizeof buffer : size;
+ rc = KFileReadAll(f,
+ 0, buffer, bsize, &num_read);
+ if (rc == 0 && num_read != bsize) {
+ rc = RC(rcVDB, rcFile, rcReading,
+ rcBuffer, rcExcessive);
+ }
+ if (rc == 0)
+ { readable = true; }
+ }
+ KFileRelease(f);
+ }
+ if (rc == 0)
+ { ready = true; }
+ }
+ if (ready) {
+ KTime kt;
+ memset(&kt, 0, sizeof kt);
+ KTimeLocal(&kt, date);
+ report(indent, "Dependency", 7,
+ "index", 'd', i,
+ "seq_id", 's', seq_id,
+ "local", 's', local ? "true" : "false",
+ "path", 's', path,
+ "size", 'u', size,
+ "date", 'T', &kt,
+ "readable", 's', readable ? "true" : "false");
+ reported = true;
+ }
+ else {
+ report(indent, "Dependency", 5,
+ "index", 'd', i,
+ "seq_id", 's', seq_id,
+ "local", 's', local ? "true" : "false",
+ "path", 's', path,
+ "error", 'R', rc);
+ reported = true;
+ }
+ }
+ if (!reported) {
+ report(indent, "Dependency", 4,
+ "index", 'd', i,
+ "seq_id", 's', seq_id,
+ "local", 's', local ? "true" : "false",
+ "path", 's', path == NULL ? "" : path);
+ }
+ }
+ }
+ if (rc != 0 && !toreport)
+ { break; }
+ }
+
+ RELEASE(KDirectory, dir);
+
+ return rc;
+}
+
+static rc_t ReportDepend(const ReportFuncs *f,
+ uint32_t indent, const VDatabase* db)
+{
+ rc_t rc = 0;
+
+ const VDBDependencies* dep = NULL;
+
+ const char tag[] = "Dependencies";
+
+ assert(db);
+
+ reportOpen(indent, tag, 0);
+
+ rc = VDatabaseListDependencies(db, &dep, false);
+ if (rc != 0) {
+ reportError(indent + 1, rc, "VDatabaseListDependencies");
+ }
+ else {
+ uint32_t count = 0;
+ rc = VDBDependenciesCount(dep, &count);
+ if (rc != 0) {
+ reportError(indent + 1, rc, "VDBDependenciesCount");
+ }
+ else {
+ uint32_t missing = 0;
+ const char tag[] = "List";
+ rc = VDBDependenciesReportDepend1(dep, f,
+ count, indent + 2, false, &missing);
+
+ if (rc == 0) {
+ reportOpen(indent + 1, tag, 2, "count", 'd', count,
+ "missing", 'd', missing);
+ }
+ else {
+ reportOpen(indent + 1, tag, 1, "count", 'd', count);
+ }
+
+ rc = VDBDependenciesReportDepend1(dep, f,
+ count, indent + 2, true, &missing);
+ reportClose(indent + 1, tag);
+ }
+ }
+
+ reportClose(indent, tag);
+
+ RELEASE(VDBDependencies, dep);
+
+ return rc;
+}
+
+typedef struct Total {
+ int64_t sz;
+ int64_t files;
+} Total;
+
+static rc_t CC visitor(const KDirectory* dir,
+ uint32_t type, const char* name, void* data)
+{
+ rc_t rc = 0;
+ Total* total = (Total*) data;
+ if (type & kptAlias)
+ { return rc; }
+ assert(total);
+ switch (type) {
+ case kptFile: {
+ uint64_t size = 0;
+ rc = KDirectoryFileSize(dir, &size, name);
+ if (rc == 0) {
+ total->sz += size;
+ }
+ ++total->files;
+ break;
+ }
+ case kptDir:
+ rc = KDirectoryVisit(dir, false, visitor, total, name);
+ break;
+ default:
+ rc = RC(rcVDB, rcDirectory, rcVisiting, rcType, rcUnexpected);
+ break;
+ }
+ return rc;
+}
+
+static rc_t ReportDir(const ReportFuncs *f, uint32_t indent, const KTable* tbl) {
+ rc_t rc = 0;
+ const KDirectory* dir = NULL;
+ if (tbl == NULL) {
+ report(indent, "Error", 1, "KTable" , 's', "NULL");
+ return rc;
+ }
+ rc = KTableOpenDirectoryRead(tbl, &dir);
+ if (rc != 0) {
+ reportError(indent, rc, "KTableOpenDirectoryRead");
+ }
+ else {
+ Total total;
+ memset(&total, 0, sizeof total);
+ rc = KDirectoryVisit(dir, false, visitor, &total, NULL);
+ report(indent, "Directory", 2,
+ "size", 'l', total.sz, "files", 'l', total.files);
+ }
+ RELEASE(KDirectory, dir);
+ return rc;
+}
+
+#define OBJ_OPEN(indent,count,path,type) reportOpen(indent, "Object", count, \
+ "path", 's', path, "type", 's', type
+#define OBJ_P_OPEN(indent,count,path,type,file_type) \
+ OBJ_OPEN(indent, count, path, type), "fs_type", 's', file_type
+
+#define OBJ(indent,path,type) \
+ OBJ_OPEN(indent, 2, path, type) )
+#define OBJ_P(indent,path,type,file_type) \
+ OBJ_P_OPEN(indent, 3, path, type, file_type) )
+#define OBJ_P_A(indent,path,type,file_type) \
+ OBJ_P_OPEN(indent, 4, path, type, file_type), "alias", 's', "true")
+#define OBJ_P_S(indent,path,type,file_type,size) \
+ OBJ_P_OPEN(indent, 4, path, type, file_type), "size", 'l', size)
+#define OBJ_P_S_A(indent,path,type,file_type,size) \
+ OBJ_P_OPEN(indent, 5, path, type, file_type), "size", 'l', size, \
+ "alias", 's', "true")
+
+static rc_t CC ReportObj(const ReportFuncs *f, uint32_t indent,
+ const char *object, bool *wasDbOrTableSet)
+{
+ Report* self = NULL;
+ const char* fullpath = NULL;
+ const KDatabase* kdb = NULL;
+ const KTable* ktbl = NULL;
+ const VDatabase* db = NULL;
+ KPathType type = kptNotFound;
+ KPathType file_type = kptNotFound;
+ bool alias = false;
+ uint64_t size = 0;
+ bool size_unknown = true;
+
+ rc_t rc = ReportGet(&self);
+ assert(self);
+
+ if (wasDbOrTableSet != NULL) {
+ *wasDbOrTableSet = self->db != NULL || self->table != NULL;
+ return 0;
+ }
+
+ if (self->db != NULL) {
+ type = kptDatabase;
+ db = self->db;
+ }
+ else if (self->table != NULL) {
+ rc_t rc2 = VTableOpenParentRead(self->table, &db);
+ if (rc2)
+ {
+ if (rc == 0)
+ {
+ rc = rc2;
+ }
+ }
+ else if (!db)
+ {
+ type = kptTable;
+ rc2 = VTableGetKTableRead(self->table, &ktbl);
+ if (rc2)
+ {
+ if (rc == 0)
+ {
+ rc = rc2;
+ }
+ }
+ else
+ {
+ rc2 = KTableGetPath(ktbl, &fullpath);
+ }
+ }
+ }
+
+ if (db) {
+ rc_t rc2 = VDatabaseOpenKDatabaseRead(db, &kdb);
+ type = kptDatabase;
+ if (rc2) {
+ if (rc == 0)
+ { rc = rc2; }
+ }
+ else {
+ rc2 = KDatabaseGetPath(kdb, &fullpath);
+ if (rc2) {
+ if (rc == 0)
+ { rc = rc2; }
+ }
+ }
+ }
+
+ if (fullpath) {
+ KDirectory* dir = NULL;
+ rc_t rc2 = KDirectoryNativeDir(&dir);
+ if (rc2) {
+ if (rc == 0)
+ { rc = rc2; }
+ }
+ else {
+ file_type = KDirectoryPathType(dir, fullpath);
+ alias = file_type & kptAlias;
+ file_type &= ~kptAlias;
+ if (file_type == kptFile) {
+ rc2 = KDirectoryFileSize(dir, &size, fullpath);
+ if (rc2) {
+ if (rc == 0)
+ { rc = rc2; }
+ }
+ else { size_unknown = false; }
+ }
+ }
+ RELEASE(KDirectory, dir);
+ }
+
+ if (object || type != kptNotFound) {
+ const char* path
+ = fullpath ? fullpath : object ? object : "not set";
+ const char* stype = type == kptTable ? "table" :
+ type == kptDatabase ? "database" : "unknown";
+ const char* sfile_type = file_type == kptFile ? "archive" :
+ file_type == kptDir ? "dir" : "unexpected";
+
+ if (fullpath && !size_unknown) {
+ if (alias)
+ { OBJ_P_S_A(indent, path, stype, sfile_type, size); }
+ else
+ { OBJ_P_S (indent, path, stype, sfile_type, size); }
+ }
+ else if (fullpath && size_unknown) {
+ if (alias)
+ { OBJ_P_A (indent, path, stype, sfile_type); }
+ else
+ { OBJ_P (indent, path, stype, sfile_type); }
+ }
+ else
+ { OBJ (indent, path, stype); }
+
+ if (!db)
+ { db = self->db; }
+
+ if (db) {
+ rc_t rc2 = ReportDepend(f, indent + 1, db);
+ if (rc == 0)
+ { rc = rc2; }
+ }
+ if (file_type == kptDir) {
+ rc_t rc2 = ReportDir(f, indent + 1, ktbl);
+ if (rc == 0)
+ { rc = rc2; }
+ }
+
+ reportClose(indent, "Object");
+ }
+
+ if (db != self->db)
+ { RELEASE(VDatabase, db); }
+ RELEASE(KTable, ktbl);
+ RELEASE(KDatabase, kdb);
+
+ return rc;
+}
+
+#ifdef _STATIC
+
+static
+rc_t md5(const char* path, uint8_t digest[16], const KDirectory* dir)
+{
+ const KFile* kf = NULL;
+ rc_t rc = KDirectoryOpenFileRead(dir, &kf, path);
+ if (rc == 0) {
+ KFile* fnull = NULL;
+ rc = KFileMakeNullUpdate(&fnull);
+ if (rc == 0) {
+ KMD5SumFmt* fmt = NULL;
+ rc = KMD5SumFmtMakeUpdate(&fmt, fnull);
+ if (rc == 0) {
+ const KFile* md5 = NULL;
+ rc = KFileMakeNewMD5Read(&md5, kf, fmt, path);
+ if (rc == 0) {
+ uint64_t ps = 0;
+ char buffer[512];
+ size_t read = 0;
+ do {
+ rc = KFileRead(md5, ps, buffer, sizeof buffer, &read);
+ if (rc == 0)
+ { ps += read; }
+ } while (rc == 0 && read > 0);
+ if (rc == 0) {
+ bool bin;
+ rc = KMD5SumFmtFind(fmt, path, digest, &bin);
+ }
+ }
+ RELEASE(KFile, md5);
+ }
+ RELEASE(KMD5SumFmt, fmt);
+ }
+/* RELEASE(KFile, fnull); fnull is released by KMD5SumFmt* fmt */
+ }
+/* RELEASE(KFile, kf); kf is released by KFile* md5 */
+ return rc;
+}
+
+static
+rc_t ReportAlias(const ReportFuncs *f, uint32_t indent, const char* alias, const KDirectory* dir)
+{
+ char resolved[PATH_MAX + 1];
+ rc_t rc
+ = KDirectoryResolveAlias(dir, false, resolved, sizeof resolved, alias);
+ if (rc == 0) {
+ const char tag[] = "Alias";
+ uint32_t type = KDirectoryPathType(dir, resolved);
+ if (type & kptAlias) {
+ reportOpen(indent, tag, 1, "resolved", 's', resolved);
+ rc = ReportAlias(f, indent + 1, resolved, dir);
+ reportClose(indent, tag);
+ }
+ else
+ { report(indent, tag, 1, "resolved", 's', resolved); }
+ }
+ return rc;
+}
+
+static rc_t ReportBinary(const ReportFuncs *f, uint32_t indent, const char* argv0) {
+ rc_t rc = 0;
+#ifdef _STATIC
+ KDyld *dyld = NULL;
+ assert(argv0);
+ rc = KDyldMake(&dyld);
+ if (rc != 0) {
+ reportError(indent + 1, rc, "KDyldMake");
+ }
+ else {
+ const KDirectory* dir = NULL;
+ rc = KDyldHomeDirectory(dyld, &dir, (fptr_t) ReportFinalize);
+ if (rc != 0) {
+ reportError(indent + 1, rc, "KDyldHomeDirectory");
+ }
+ else {
+ char binary[PATH_MAX + 1];
+ const char* name = strpbrk(argv0, "/\\");
+ const char* last_name = name;
+ if (last_name)
+ { ++last_name; }
+ while (name) {
+ name = strpbrk(last_name, "/\\");
+ if (name) {
+ last_name = name;
+ if (last_name)
+ { ++last_name; }
+ }
+ }
+ name = last_name ? last_name : argv0;
+ rc = KDirectoryResolvePath(dir, true, binary, sizeof binary, name);
+ if (rc != 0) {
+ reportErrorStr(indent + 1, rc, "KDirectoryResolvePath",
+ "origin", "KDyldHomeDirectory");
+ }
+ else {
+ bool found = false;
+ const char tag[] = "Binary";
+ const char* sType = NULL;
+ uint8_t digest[16];
+ uint32_t type = KDirectoryPathType(dir, binary);
+ switch (type & ~kptAlias) {
+ case kptFile:
+ sType = type & kptAlias ? "alias" : "file";
+ found = true;
+ break;
+ case kptNotFound:
+ sType = "not found";
+ break;
+ default:
+ sType = "unknown";
+ break;
+ }
+ if (found)
+ { rc = md5(name, digest, dir); }
+ if (type & kptAlias) {
+ if (found && rc == 0) {
+ reportOpen(indent, tag, 3, "path", 's', binary,
+ "type", 's', sType, "md5", 'M', digest);
+ }
+ else {
+ reportOpen(indent, tag, 2, "path", 's', binary,
+ "type", 's', sType);
+ }
+ if (rc == 0 && type & kptAlias)
+ { rc = ReportAlias(f, indent + 1, name, dir); }
+ reportClose(indent, tag);
+ }
+ else {
+ if (found && rc == 0) {
+ report(indent, tag, 3, "path", 's', binary,
+ "type", 's', sType, "md5", 'M', digest);
+ }
+ else {
+ report(indent, tag, 2, "path", 's', binary,
+ "type", 's', sType);
+ }
+ }
+ }
+ }
+ RELEASE(KDirectory, dir);
+ }
+ RELEASE(KDyld, dyld);
+#endif
+ return rc;
+}
+#endif
+
+static rc_t CC ReportSOFTWARE(const ReportFuncs *f, uint32_t indent, const char *argv_0, const char *date, ver_t tool_ver ) {
+ rc_t rc = 0;
+
+ Report* self = NULL;
+ ReportGet(&self);
+ assert(self);
+
+ reportOpen(indent, "SOFTWARE", 0);
+
+ if (self->mgr) {
+ uint32_t version = 0;
+ rc = VDBManagerVersion(self->mgr, &version);
+ if (rc != 0) {
+ reportOpen(indent + 1, "Library", 0);
+ reportError(indent + 2, rc, "VDBManagerVersion");
+ reportClose(indent + 1, "Library");
+ }
+ else { report(indent + 1, "VDBLibrary", 1, "vers", 'V', version); }
+ }
+
+ {
+#ifdef _STATIC
+ bool dynamic = false;
+#else
+ bool dynamic = true;
+#endif
+
+ rc_t rc2 = ReportBuild(f, indent + 1, dynamic, self->mgr);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+
+ if (argv_0) {
+ const char tag[] = "Tool";
+#ifdef _STATIC
+ reportOpen(indent + 1, tag, 3, "date", 's', date,
+ "name", 's', argv_0, "vers", 'V', tool_ver);
+ {
+ rc_t rc2 = ReportBinary(f, indent + 2, argv_0);
+ if (rc == 0 && rc2 != 0)
+ { rc = rc2; }
+ }
+ reportClose(indent + 1, tag);
+#else
+ report(indent + 1, tag, 3, "date", 's', date,
+ "name", 's', argv_0, "vers", 'V', tool_ver);
+#endif
+ }
+
+ reportClose(indent, "SOFTWARE");
+
+ return rc;
+}
+
+
+
+/* SetVDBManager
+ * remember the manager in use
+ */
+LIB_EXPORT rc_t CC ReportSetVDBManager(const VDBManager *mgr) {
+ rc_t rc = 0;
+
+ Report* self = NULL;
+ ReportGet(&self);
+ if ( self != NULL )
+ {
+ rc = VDBManagerAddRef ( mgr );
+ if ( rc == 0 )
+ {
+ rc = VDBManagerRelease ( self -> mgr );
+ if ( rc != 0 )
+ VDBManagerRelease ( mgr );
+ else
+ self -> mgr = mgr;
+ }
+ }
+ return rc;
+}
+
+
+/* SetDatabase
+ * call it if you work with Database
+ *
+ * "path" [ IN ] - path to the database that is used to access it
+ */
+LIB_EXPORT rc_t CC ReportResetDatabase ( const char *path, const VDatabase *db )
+{
+ rc_t rc = 0;
+
+ Report* self = NULL;
+ ReportGet(&self);
+ if ( self != NULL )
+ {
+ rc = VDatabaseAddRef ( db );
+ if ( rc == 0 )
+ {
+ VTableRelease ( self -> table ), self -> table = NULL;
+ VDatabaseRelease ( self -> db );
+ self -> db = db;
+ }
+ }
+
+ return rc;
+}
+
+
+/* SetTable
+ * call it if you work with Table
+ *
+ * "path" [ IN ] - path to the table that is used to access it
+ */
+LIB_EXPORT rc_t CC ReportResetTable ( const char *path, const VTable *tbl )
+{
+ rc_t rc = 0;
+
+ Report* self = NULL;
+ ReportGet(&self);
+ if ( self != NULL )
+ {
+ rc = VTableAddRef ( tbl );
+ if ( rc == 0 )
+ {
+ VDatabaseRelease ( self -> db ), self -> db = NULL;
+ VTableRelease ( self -> table );
+ self -> table = tbl;
+ }
+ }
+
+ return rc;
+}
diff --git a/libs/vdb/schema-dump.c b/libs/vdb/schema-dump.c
index f45bad2..5ef2ca3 100644
--- a/libs/vdb/schema-dump.c
+++ b/libs/vdb/schema-dump.c
@@ -32,11 +32,11 @@
#include "schema-expr.h"
#include <klib/text.h>
+#include <klib/printf.h>
#include <klib/symbol.h>
#include <klib/symtab.h>
#include <klib/log.h>
#include <klib/rc.h>
-#include <fmtdef.h>
#include <os-native.h>
#include <sysalloc.h>
@@ -217,6 +217,7 @@ rc_t SDumperVPrint ( SDumper *self, const char *fmt, va_list args )
for ( rc = 0, start = end = fmt; * end != 0; ++ end )
{
int len;
+ size_t size;
char buffer [ 256 ];
switch ( * end )
@@ -274,30 +275,36 @@ rc_t SDumperVPrint ( SDumper *self, const char *fmt, va_list args )
switch ( * ( ++ end ) )
{
case 'd':
- len = sprintf ( buffer, "%" LD64, va_arg ( args, int64_t ) );
- rc = SDumperWrite ( self, buffer, len );
+ rc = string_printf ( buffer, sizeof buffer, & size, "%ld", va_arg ( args, int64_t ) );
+ if ( rc == 0 )
+ rc = SDumperWrite ( self, buffer, size );
break;
case 'u':
- len = sprintf ( buffer, "%" LU64, va_arg ( args, uint64_t ) );
- rc = SDumperWrite ( self, buffer, len );
+ rc = string_printf ( buffer, sizeof buffer, & size, "%lu", va_arg ( args, uint64_t ) );
+ if ( rc == 0 )
+ rc = SDumperWrite ( self, buffer, size );
break;
case 'x':
- len = sprintf ( buffer, "%" Lx64, va_arg ( args, uint64_t ) );
- rc = SDumperWrite ( self, buffer, len );
+ rc = string_printf ( buffer, sizeof buffer, & size, "%lx", va_arg ( args, uint64_t ) );
+ if ( rc == 0 )
+ rc = SDumperWrite ( self, buffer, size );
break;
case 'X':
- len = sprintf ( buffer, "%" LX64, va_arg ( args, uint64_t ) );
- rc = SDumperWrite ( self, buffer, len );
+ rc = string_printf ( buffer, sizeof buffer, & size, "%lX", va_arg ( args, uint64_t ) );
+ if ( rc == 0 )
+ rc = SDumperWrite ( self, buffer, size );
break;
}
break;
case 'p':
- len = sprintf ( buffer, "0x%" LXSZ, va_arg ( args, size_t ) );
- rc = SDumperWrite ( self, buffer, len );
+ rc = string_printf ( buffer, sizeof buffer, & size, "0x%p", va_arg ( args, size_t ) );
+ if ( rc == 0 )
+ rc = SDumperWrite ( self, buffer, size );
break;
case 'z':
- len = sprintf ( buffer, "%" LUSZ, va_arg ( args, size_t ) );
- rc = SDumperWrite ( self, buffer, len );
+ rc = string_printf ( buffer, sizeof buffer, & size, "%zu", va_arg ( args, size_t ) );
+ if ( rc == 0 )
+ rc = SDumperWrite ( self, buffer, size );
break;
case 's':
len = snprintf ( buffer, sizeof buffer, "%s", va_arg ( args, const char* ) );
@@ -616,9 +623,9 @@ static rc_t CC dump_to_stderr(void *dst, const void *buf, size_t sz)
return 0;
}
-rc_t VSchemaDebugPrint(const VSchema *self, const char *decl)
+rc_t VSchemaDebugPrint ( const VSchema *self, const char *decl )
{
- return VSchemaDump(self, sdmPrint, decl, dump_to_stderr, NULL);
+ return VSchemaDump ( self, sdmPrint, decl, dump_to_stderr, NULL );
}
/* ToText
diff --git a/libs/vdb/schema-expr.c b/libs/vdb/schema-expr.c
index adfcdfe..df73ba2 100644
--- a/libs/vdb/schema-expr.c
+++ b/libs/vdb/schema-expr.c
@@ -505,10 +505,14 @@ static
rc_t SPhysEncExprDump ( const SPhysEncExpr *self, SDumper *b )
{
rc_t rc;
+ bool compact = SDumperMode ( b ) == sdmCompact ? true : false;
if ( VectorLength ( & self -> schem ) != 0 )
{
- rc = SExpressionBracketListDump ( & self -> schem, b, "< ", " > " );
+ if ( compact )
+ rc = SExpressionBracketListDump ( & self -> schem, b, "<", ">" );
+ else
+ rc = SExpressionBracketListDump ( & self -> schem, b, "< ", " > " );
if ( rc != 0 )
return rc;
}
@@ -526,7 +530,10 @@ rc_t SPhysEncExprDump ( const SPhysEncExpr *self, SDumper *b )
if ( VectorLength ( & self -> pfact ) != 0 )
{
- rc = SExpressionBracketListDump ( & self -> pfact, b, " < ", " >" );
+ if ( compact )
+ rc = SExpressionBracketListDump ( & self -> pfact, b, "<", ">" );
+ else
+ rc = SExpressionBracketListDump ( & self -> pfact, b, " < ", " >" );
if ( rc != 0 )
return rc;
}
diff --git a/libs/vdb/schema-int.c b/libs/vdb/schema-int.c
index 572384f..d0204cf 100644
--- a/libs/vdb/schema-int.c
+++ b/libs/vdb/schema-int.c
@@ -87,6 +87,7 @@ rc_t init_keywords ( KSymTable *tbl )
KEYWORD ( typeset ),
KEYWORD ( validate ),
KEYWORD ( version ),
+ KEYWORD ( view ),
KEYWORD ( virtual ),
KEYWORD ( void ),
KEYWORD ( writeonly ),
diff --git a/libs/vdb/schema-parse.c b/libs/vdb/schema-parse.c
index a19d864..d36cd8b 100644
--- a/libs/vdb/schema-parse.c
+++ b/libs/vdb/schema-parse.c
@@ -65,6 +65,14 @@ void SchemaEnvInitFeatures ( SchemaEnv *env )
env -> mixed_fact_param_list = 1;
env -> script_function_called_schema = 1;
break;
+ case 1:
+ switch ( ( uint8_t ) ( env -> version >> 16 ) )
+ {
+ case 1:
+ env -> default_view_decl = 1;
+ env -> has_view_keyword = 1;
+ break;
+ }
}
}
diff --git a/libs/vdb/schema-parse.h b/libs/vdb/schema-parse.h
index 22317ba..2c955dc 100644
--- a/libs/vdb/schema-parse.h
+++ b/libs/vdb/schema-parse.h
@@ -175,6 +175,7 @@ enum
kw_typeset,
kw_validate,
kw_version,
+ kw_view,
kw_virtual,
kw_void,
kw_writeonly,
@@ -201,6 +202,10 @@ struct SchemaEnv
uint32_t schema_param_types_absent : 1;
uint32_t mixed_fact_param_list : 1;
uint32_t script_function_called_schema : 1;
+
+ /* V1 SWITCHES */
+ uint32_t default_view_decl : 1;
+ uint32_t has_view_keyword : 1;
};
/* SCHEMA_LANG_VERSION
diff --git a/libs/vdb/schema-priv.h b/libs/vdb/schema-priv.h
index 1d96432..dab6a6c 100644
--- a/libs/vdb/schema-priv.h
+++ b/libs/vdb/schema-priv.h
@@ -923,6 +923,9 @@ struct STable
/* optional expression for limiting all columns' blob sizes */
struct SExpression const *limit;
+ /* optional default view declaration */
+ const String *dflt_view;
+
/* scope */
BSTree scope;
diff --git a/libs/vdb/schema-tbl.c b/libs/vdb/schema-tbl.c
index 586b434..2a0be41 100644
--- a/libs/vdb/schema-tbl.c
+++ b/libs/vdb/schema-tbl.c
@@ -52,6 +52,9 @@
/* make implicit physical expressions explicit on output */
#define DUMP_EXPLICIT_PHYS_MEMBERS 0
+/* temporary v1 schema modification */
+#define ALLOW_DEFAULT_VIEW_DECL 1
+
/*--------------------------------------------------------------------------
* SColumn
@@ -444,6 +447,10 @@ bool CC STableOverridesClone ( void *item, void *data )
void CC STableWhack ( void *item, void *ignore )
{
STable *self = item;
+
+ if ( self -> dflt_view != NULL )
+ StringWhack ( self -> dflt_view );
+
#if SLVL >= 8
VectorWhack ( & self -> col, SColumnWhack, NULL );
VectorWhack ( & self -> cname, SNameOverloadWhack, NULL );
@@ -2205,6 +2212,42 @@ rc_t untyped_tbl_expr ( KSymTable *tbl, KTokenSource *src, KToken *t,
return rc;
}
+#if SLVL >= 8
+static
+rc_t default_view_decl ( KSymTable *tbl, KTokenSource *src, KToken *t,
+ const SchemaEnv *env, VSchema *self, STable *table )
+{
+ rc_t rc;
+ bool string_too_long;
+
+ if ( next_token ( tbl, src, t ) -> id != eString )
+ return KTokenExpected ( t, klogErr, "default view declaration" );
+
+ string_too_long = false;
+ if ( t -> str . size >= 236 + 2 )
+ {
+ KTokenExpected ( t, klogWarn, "default view declaration less than 236 characters" );
+ string_too_long = true;
+ }
+
+ rc = expect ( tbl, src, t, eSemiColon, ";", true );
+ if ( rc == 0 && ! string_too_long )
+ {
+ String decl = t -> str;
+ ++ decl . addr;
+ decl . size -= 2;
+ decl . len -= 2;
+
+ if ( table -> dflt_view != NULL )
+ StringWhack ( table -> dflt_view );
+
+ rc = StringCopy ( & table -> dflt_view, & decl );
+ }
+
+ return rc;
+}
+#endif
+
/*
* table-local-decl = [ 'virtual' ] 'column' <column-decl>
* | 'physical' [ 'column' ] <physical-decl>
@@ -2220,6 +2263,14 @@ rc_t table_local_decl ( KSymTable *tbl, KTokenSource *src, KToken *t,
{
#if SLVL >= 8
case kw_default:
+ if ( env -> default_view_decl )
+ {
+ KToken t2;
+ if ( next_token ( tbl, src, & t2 ) -> id == kw_view )
+ return default_view_decl ( tbl, src, t, env, self, table );
+ KTokenSourceReturn ( src, & t2 );
+ }
+ /* no break */
case kw_extern:
case kw_column:
case kw_readonly:
@@ -2808,14 +2859,13 @@ rc_t table_declaration ( KSymTable *tbl, KTokenSource *src, KToken *t,
rc_t rc;
void *ignore;
- STable *table = malloc ( sizeof * table );
+ STable *table = calloc ( 1, sizeof * table );
if ( table == NULL )
{
rc = RC ( rcVDB, rcSchema, rcParsing, rcMemory, rcExhausted );
return KTokenRCExplain ( t, klogInt, rc );
}
- memset ( table, 0, sizeof * table );
rc = table_decl ( tbl, src, t, env, self, table );
if ( rc == 0 )
{
diff --git a/libs/vdb/schema-type.c b/libs/vdb/schema-type.c
index 019b1df..0bb5186 100644
--- a/libs/vdb/schema-type.c
+++ b/libs/vdb/schema-type.c
@@ -1343,7 +1343,7 @@ rc_t VTypedeclDump ( const VTypedecl *self, SDumper *b )
{
const SDatatype *dt = VSchemaFindTypeid ( b -> schema, type_id );
rc = SDatatypeDump ( dt, b );
- if ( rc == 0 && dt -> id == 0 )
+ if ( rc == 0 && dt != NULL && dt -> id == 0 )
return 0;
}
else if ( type_id < 0x80000000 )
@@ -1818,7 +1818,13 @@ rc_t create_fqn_sym ( KSymTable *tbl, KTokenSource *src, KToken *t,
if ( KTokenizerNext ( kDefaultTokenizer, & src2, & t2 ) -> id == eColon )
{
/* and again to find ident or name */
- if ( KTokenizerNext ( kDefaultTokenizer, & src2, & t2 ) -> id == eIdent || t2 . id == eName )
+ KTokenizerNext ( kDefaultTokenizer, & src2, & t2 );
+
+ /* allow reserved word "view" to be used in schemas <= 1.0 */
+ if ( t2 . id == kw_view && ! env -> has_view_keyword )
+ t2 . id = eIdent;
+
+ if ( t2 . id == eIdent || t2 . id == eName )
{
/* create a namespace and go in */
KSymbol *ns;
@@ -1869,6 +1875,13 @@ rc_t enter_namespace ( KSymTable *tbl, KTokenSource *src, KToken *t,
case eName:
rc = create_fqn_sym ( tbl, src, t, env, id, obj );
break;
+ case kw_view:
+ if ( ! env -> has_view_keyword )
+ {
+ rc = create_fqn_sym ( tbl, src, t, env, id, obj );
+ break;
+ }
+ /* no break */
default:
if ( t -> id == id )
rc = RC ( rcVDB, rcSchema, rcParsing, rcToken, rcExists );
@@ -1890,7 +1903,6 @@ rc_t create_fqn ( KSymTable *tbl, KTokenSource *src, KToken *t,
return enter_namespace ( tbl, src, t, env, id, obj );
case eIdent:
return create_fqn_sym ( tbl, src, t, env, id, obj );
-
default:
if ( t -> id == id )
return RC ( rcVDB, rcSchema, rcParsing, rcToken, rcExists );
diff --git a/libs/vdb/schema.c b/libs/vdb/schema.c
index 343ff8c..183df2a 100644
--- a/libs/vdb/schema.c
+++ b/libs/vdb/schema.c
@@ -47,8 +47,8 @@
#include <klib/namelist.h>
#include <klib/data-buffer.h>
#include <klib/printf.h>
+#include <klib/out.h>
#include <klib/rc.h>
-#include <fmtdef.h>
#include <os-native.h> /* because of snprintf on windows */
#include <sysalloc.h>
@@ -181,11 +181,11 @@ void CC KSymbolList ( BSTNode *item, void *data )
const KSymbol *self = ( const KSymbol* ) item;
const char *indent = ( const char* ) data;
- printf ( "%s%.*s = 0x%" LUSZ
+ OUTMSG (( "%s%.*s = %#p"
, indent
, ( int ) self -> name . size, self -> name . addr
- , ( size_t ) self
- );
+ , self
+ ));
if ( self -> type != eNamespace )
putchar ( '\n' );
@@ -202,10 +202,10 @@ void CC KSymbolList ( BSTNode *item, void *data )
static
void CC BSTreeListSymbols ( const BSTree *self, const char *indent )
{
- printf ( "%sscope = 0x%" LUSZ "\n"
+ OUTMSG (( "%sscope = %#p\n"
, indent
- , ( size_t ) self
- );
+ , self
+ ));
if ( indent [ -1 ] != '.' )
-- indent;
@@ -741,7 +741,8 @@ rc_t CC VSchemaParseTextInt ( VSchema *self,
KTokenText tt;
KTokenSource src;
String str, path;
-
+ rc_t rc;
+
if ( name == NULL || name [ 0 ] == 0 )
CONST_STRING ( & path, "<unnamed>" );
else
@@ -751,7 +752,14 @@ rc_t CC VSchemaParseTextInt ( VSchema *self,
KTokenTextInit ( & tt, & str, & path );
KTokenSourceInit ( & src, & tt );
- return schema ( & src, self );
+ rc = schema ( & src, self );
+
+ if (rc == 0)
+ PARSE_DEBUG( ("Parsed schema from %s\n", name) );
+ else
+ PARSE_DEBUG( ("Failed to parse schema from %s\n", name) );
+
+ return rc;
}
LIB_EXPORT rc_t CC VSchemaParseText ( VSchema *self, const char *name,
diff --git a/libs/vdb/table-cmn.c b/libs/vdb/table-cmn.c
index 980ac23..3b289b2 100644
--- a/libs/vdb/table-cmn.c
+++ b/libs/vdb/table-cmn.c
@@ -518,7 +518,7 @@ rc_t list_readable_columns ( const VTable *cself )
VTable *self = ( VTable* ) cself;
VCursor *curs;
- rc_t rc = VTableCreateCursorRead ( self, ( const VCursor** ) & curs );
+ rc_t rc = VTableCreateCursorReadInternal ( self, ( const VCursor** ) & curs );
if ( rc == 0 )
{
/* let this private VCursor-function list the columns */
@@ -596,6 +596,97 @@ LIB_EXPORT rc_t CC VTableListCol ( const VTable *cself, KNamelist **names )
}
+
+/* ListPhysColumns
+ * avail: 2.4
+ */
+LIB_EXPORT rc_t CC VTableListPhysColumns ( const VTable *self, KNamelist **names )
+{
+ rc_t rc;
+
+ if ( names == NULL )
+ rc = RC ( rcVDB, rcTable, rcListing, rcParam, rcNull );
+ else
+ {
+ * names = NULL;
+
+ if ( self == NULL )
+ rc = RC ( rcVDB, rcTable, rcListing, rcSelf, rcNull );
+ else
+ {
+ KNamelist *kcol_names;
+ rc = KTableListCol ( self -> ktbl, & kcol_names );
+ if ( rc == 0 )
+ {
+ uint32_t kcol_count;
+ rc = KNamelistCount ( kcol_names, & kcol_count );
+ if ( rc == 0 )
+ {
+ uint32_t scol_count = 0;
+ KNamelist *scol_names = NULL;
+ const KMDataNode *col_node = self -> col_node;
+
+#if LAZY_OPEN_COL_NODE
+ if ( col_node == NULL )
+ {
+ rc = KMetadataOpenNodeRead ( self -> meta, & ( ( VTable* ) self ) -> col_node, "col" );
+ if ( rc == 0 || GetRCState ( rc ) != rcNotFound )
+ col_node = self -> col_node;
+ }
+#endif
+ if ( col_node != NULL )
+ {
+ rc = KMDataNodeListChildren ( col_node, & scol_names );
+ if ( rc == 0 )
+ rc = KNamelistCount ( scol_names, & scol_count );
+ }
+
+ if ( rc == 0 )
+ {
+ VNamelist *vnames;
+ rc = VNamelistMake ( & vnames, kcol_count + scol_count );
+ if ( rc == 0 )
+ {
+ uint32_t i;
+ const char *name;
+
+ for ( i = 0; i < kcol_count && rc == 0; ++ i )
+ {
+ rc = KNamelistGet ( kcol_names, i, & name );
+ if ( rc == 0 )
+ rc = VNamelistAppend ( vnames, name );
+ }
+
+ for ( i = 0; i < scol_count && rc == 0; ++ i )
+ {
+ rc = KNamelistGet ( scol_names, i, & name );
+ if ( rc == 0 )
+ rc = VNamelistAppend ( vnames, name );
+ }
+
+ if ( rc == 0 )
+ {
+ rc = VNamelistToNamelist ( vnames, names );
+ if ( rc == 0 )
+ VNamelistReorder ( vnames, false );
+ }
+ }
+
+ VNamelistRelease ( vnames );
+ }
+
+ KNamelistRelease ( scol_names );
+ }
+
+ KNamelistRelease ( kcol_names );
+ }
+ }
+ }
+
+ return rc;
+}
+
+
/* ListDatatypes
* returns list of typedecls for named column
*
@@ -946,6 +1037,34 @@ LIB_EXPORT rc_t CC VTableTypespec ( const VTable *self, char *ts_buff, size_t ts
}
+/* HasStaticColumn - PRIVATE
+ * given a physical column name, report whether it exists
+ * and is ( currently ) static
+ * avail: 2.5
+ */
+LIB_EXPORT bool CC VTableHasStaticColumn ( const VTable *self, const char *name )
+{
+ if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+ {
+ /* a full check of this might include testing that the column
+ can be opened for read or write, but the API is purposely
+ vague on what this means.
+
+ currently the meaning of this ( PRIVATE ) API is whether
+ there is a metadata column entry with this name - period. */
+ const KMDataNode *node;
+ rc_t rc = KMetadataOpenNodeRead ( self -> meta, & node, "/col/%s", name );
+ if ( rc == 0 )
+ {
+ KMDataNodeRelease ( node );
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
/*--------------------------------------------------------------------------
* VColumnRef
* cache entry
@@ -1027,7 +1146,7 @@ rc_t create_cursor_all_readable_columns(const VTable *self,
rc_t rc = VTableListReadableColumns(self, &list);
if (rc == 0) {
- rc = VTableCreateCursorRead(self, curs);
+ rc = VTableCreateCursorReadInternal(self, curs);
if (rc == 0) {
uint32_t n;
diff --git a/libs/vdb/table-priv.h b/libs/vdb/table-priv.h
index e9078ec..4835628 100644
--- a/libs/vdb/table-priv.h
+++ b/libs/vdb/table-priv.h
@@ -175,7 +175,7 @@ rc_t VTableLoadSchema ( VTable *self );
/* StoreSchema
* stores schema definition in metadata
*/
-rc_t VTableStoreSchema ( VTable *self );
+VDB_EXTERN rc_t VTableStoreSchema ( VTable *self );
/* support for listing
*/
diff --git a/libs/vdb/wcolumn.c b/libs/vdb/wcolumn.c
index 44a93a2..1a4fa97 100644
--- a/libs/vdb/wcolumn.c
+++ b/libs/vdb/wcolumn.c
@@ -49,175 +49,27 @@
#include <string.h>
#include <assert.h>
-#define DFLT_TRIGGER ( 2 * 1024 * 1024 )
-#define USE_RLE 1
-
-/*--------------------------------------------------------------------------
- * VDBMemBuffer
- * manages a linked list of VDBMem objects
- */
-typedef struct VDBMemBuffer VDBMemBuffer;
-struct VDBMemBuffer
-{
- bitsz_t start; /* offset in bits from the first memory page start to the first unwritten element */
- bitsz_t end; /* bit offset just past last unwritten element */
- bitsz_t marker; /* a cursor of sorts that should be in the page referred to by mem */
- /* NOTE: marker is not always referring to an element and the user of this object
- * is required to track this */
- const VDBMem *mem; /* a memory page that should contain the marker below */
-};
-
-/* these are compile time constants */
-#define VDBMemBitsInPage() ((bitsz_t)(sizeof ((VDBMem*)0)->page * 8))
-#define VDBMemBitsInPageMask() (VDBMemBitsInPage()-1)
-
-/* InitHead
- * initialize buffer to point to left edge of first element
- * buffer may be empty
- *
- * Parameters are expected to be good, no production run-time verification applied.
- */
-static
-void VDBMemBufferInitHead ( VDBMemBuffer *self, void *mem,
- bitsz_t start, bitsz_t elem_size, uint64_t elem_count )
-{
- /* during development these are validated: element size can't ever be zero
- * the memory page must be an actual page or if its not then there can't be
- * any elements or offset with in the NULL page */
- assert (self != NULL);
- assert (elem_size != 0);
- assert ((mem != NULL) || ((mem == NULL) && (start == 0) && (elem_count == 0)));
-
- self -> mem = ( const void* ) mem;
- self -> start = self -> marker = start; /* cursor at first element */
- self -> end = start + elem_size * elem_count; /* just past last element */
-}
-
-/* InitTail
- * initialize buffer to point to last bit
- * buffer must not be empty
- *
- * Parameters are expected to be good, no verification applied.
- */
-static
-void VDBMemBufferInitTail ( VDBMemBuffer *self, void *mem,
- bitsz_t start, bitsz_t elem_size, uint64_t elem_count )
-{
- /* during development these are validated: element size can't ever be zero
- * the memory page must be an actual page and there must be valid elements */
- assert (self != NULL);
- assert (elem_size != 0);
- assert ( mem != NULL );
- assert (elem_count != 0);
- assert (start < VDBMemBitsInPage());
-
- self -> mem = ( const void* ) mem;
- self -> start = start;
- self -> end = start + elem_size * elem_count;
- assert ( self -> end > start );
- self -> marker = self -> end - 1; /* cursor at last element's last bit */
- /* NOTE: with marker not referring to an element the first "advance" must
- * take that off by one bit into account rather than seek the exact number of bits
- * in elements that we'd want to move the marker */
-}
-
-/* Advance
- * sets marker
- */
-static
-bool VDBMemBufferAdvance ( VDBMemBuffer *self, bitsz_t bits, bool reverse )
-{
- if ( bits != 0 )
- {
- bitsz_t marker;
- const VDBMem *mem;
- uint64_t cur, targ;
-
- if ( ! reverse ) /* forward */
- marker = self -> marker + bits;
- else /* backward */
- {
- if ( self -> marker < bits ) /* can't back up past beginning of buffer list */
- return false;
- marker = self -> marker - bits;
- if ( marker < self -> start ) /* can't back up past stored begining of valid data */
- return false;
- }
-
- /* anything beyond buffer is an illegal seek */
- if ( marker >= self -> end )
- return false;
-
- /* convert markers to zero-based page ids */
- cur = self -> marker / ( sizeof mem -> page * 8 );
- targ = marker / ( sizeof mem -> page * 8 );
- if ( cur != targ ) /* change pages if we have to */
- {
- /* rewind loop */
- for ( mem = self -> mem; cur > targ; -- cur )
- {
- mem = ( const VDBMem* ) DLNodePrev ( & mem -> n );
- assert ( mem != NULL );
- }
-
- /* forward loop */
- for ( ; cur < targ; ++ cur )
- {
- mem = ( const VDBMem* ) DLNodeNext ( & mem -> n );
- assert ( mem != NULL );
- }
-
- self -> mem = mem;
- }
-
- /* take new marker */
- self -> marker = marker;
- }
-
- return true;
-}
-
-/* Access
- * return pointer to current element (by marker/cursor)
- * along with bit offset and number of BITS available
- */
-static
-const void *VDBMemBufferAccess ( VDBMemBuffer *self, bitsz_t *boff, bitsz_t *avail )
-{
- const VDBMem *mem = self -> mem;
- bitsz_t bits, marker = self -> marker;
-
- /* if nothing was ever added to the buffer list */
- assert (marker < self->end);
- if ( mem == NULL )
- {
- if ( boff != NULL )
- * boff = 0;
- if ( avail != NULL )
- * avail = 0;
- return NULL;
- }
-
- /* bits available in page past marker */
- bits = VDBMemBitsInPage() - ( marker & VDBMemBitsInPageMask()) ;
+/* these constants MUST each be a power of two */
+#define INITIAL_DATA_PEAK ( 32 * 1024 )
+#define SINGLE_PAGE_SIZE ( 4 * 1024 )
- /* limit to end of buffer if not full page */
- if ( marker + bits > self -> end )
- bits = self -> end - marker;
-
- /* return bit offset */
- if ( boff != NULL )
- * boff = marker & 7;
+/* this is a fairly high value, useful for writing single tables
+ of data that are generally accessed serially. it's bad for random. */
+#define DFLT_TRIGGER ( 2 * 1024 * 1024 )
- /* return bytes available */
- if ( avail != NULL )
- * avail = bits;
+/* debugging aid - Row-wise RunLengthEncoding ( repeated column
+ elimination ) can be disabled to check for errors it may introduce. */
+#define USE_RLE 1
- /* return byte pointer */
-/* return & mem -> page [ ( marker >> 3 ) & ( sizeof mem -> page - 1 ) ]; */
- return & mem->page[(marker & VDBMemBitsInPageMask()) >> 3];
-}
+/* when defined, use as an additional condition for detecting
+ auto-commit cutoff points, with a limit in kilo-rows given below */
+#define ROW_COUNT_CUTOFFS 128
+#if ROW_COUNT_CUTOFFS
+#define MAX_ROW_COUNT ( ROW_COUNT_CUTOFFS * 1024 )
+#else
+#define MAX_ROW_COUNT 0x40000000
+#endif
/*--------------------------------------------------------------------------
@@ -225,15 +77,17 @@ const void *VDBMemBufferAccess ( VDBMemBuffer *self, bitsz_t *boff, bitsz_t *ava
*/
static
-void WColumnDestroy (WColumn * self)
+void WColumnDestroy ( WColumn * self )
{
#if PROD_REFCOUNT && ! PROD_ALL_IN_CURSOR
- PROD_TRACK_REFCOUNT (VProductionRelease,self->out);
- VProductionRelease ( self->out, NULL);
- PROD_TRACK_REFCOUNT (VProductionRelease,self->val);
- VProductionRelease (self->val, NULL);
+ PROD_TRACK_REFCOUNT ( VProductionRelease, self -> out );
+ VProductionRelease ( self -> out, NULL );
+ PROD_TRACK_REFCOUNT ( VProductionRelease, self -> val );
+ VProductionRelease ( self -> val, NULL );
#endif
}
+
+
/* Whack
* perform read-only cleanup
*/
@@ -251,19 +105,18 @@ void CC VColumnWhack ( void *item, void *data )
if ( ! self -> read_only )
{
- WColumn *wself = (WColumn *)self;
+ WColumn *wself = ( WColumn* ) self;
if ( wself -> page != NULL )
{
TRACK_BLOB (VBlobRelease, wself->page);
- (void)VBlobRelease ( wself -> page );
+ VBlobRelease ( wself -> page );
}
KDataBufferWhack ( & wself -> dflt );
- DLListWhack ( & wself -> data, VDBMemRelease, wself -> mgr );
- DLListWhack ( & wself -> rowmap, VDBMemRelease, wself -> mgr );
- VDBManagerSever ( wself -> mgr );
- WColumnDestroy (wself);
+ KDataBufferWhack ( & wself -> data );
+ KDataBufferWhack ( & wself -> rowmap );
+ WColumnDestroy ( wself );
}
@@ -286,27 +139,35 @@ rc_t WColumnMake ( VColumn **colp, const VSchema *schema,
assert ( scol != NULL );
assert ( mgr != NULL );
- col = malloc ( sizeof * col );
+ col = calloc ( 1, sizeof * col );
if ( col == NULL )
rc = RC ( rcVDB, rcColumn, rcConstructing, rcMemory, rcExhausted );
else
{
- memset ( col, 0, sizeof * col );
rc = VColumnInit ( & col -> dad, schema, scol );
if ( rc == 0 )
{
- col -> mgr = VDBManagerAttach ( mgr );
- DLListInit ( & col -> data );
- DLListInit ( & col -> rowmap );
+ uint32_t i;
+
+ /* initialize peak histories */
+ for ( i = 0; i < sizeof col -> data_peak_hist / sizeof col -> data_peak_hist [ 0 ]; ++ i )
+ col -> data_peak_hist [ i ] = INITIAL_DATA_PEAK;
+ /* initial current peak */
+ col -> data_peak = INITIAL_DATA_PEAK;
+
+ /* use column-specific expression if provided */
if ( scol -> limit != NULL )
blob_limit = scol -> limit;
+ /* evaluate blob cutoff limit expression */
if ( blob_limit == NULL )
{
#ifdef DFLT_TRIGGER
+ /* use define */
col -> trigger = DFLT_TRIGGER;
#else
+ /* produce max unsigned integer */
-- col -> trigger;
#endif
}
@@ -375,7 +236,7 @@ rc_t WColumnSetDefault ( VColumn *vcol,
bitsz_t elem_bits, const void *buffer, bitsz_t boff, uint64_t len )
{
rc_t rc;
- bitsz_t elem_size;
+ bitsz_t elem_size, to_copy;
WColumn *self = ( WColumn* ) vcol;
assert ( elem_bits != 0 );
@@ -412,11 +273,16 @@ rc_t WColumnSetDefault ( VColumn *vcol,
}
/* copy in the row */
- bitcpy ( self -> dflt . base, 0, buffer, boff, len * elem_bits );
+ to_copy = len * elem_bits;
+ if ( ( ( boff | to_copy ) & 7 ) != 0 )
+ bitcpy ( self -> dflt . base, 0, buffer, boff, to_copy );
+ else
+ memcpy ( self -> dflt . base, & ( ( const uint8_t* ) buffer ) [ boff >> 3 ], to_copy >> 3 );
self -> have_dflt = true;
return 0;
}
+
/* OpenRow
* update state
*
@@ -426,22 +292,24 @@ rc_t WColumnSetDefault ( VColumn *vcol,
void CC WColumnOpenRow ( void *item, void *const_row_id )
{
WColumn *self = item;
- int64_t row_id = * ( const int64_t* ) const_row_id;
-
- assert ( ! self -> row_written );
- if ( self -> start_id != self -> end_id )
- {
- assert ( row_id == self -> end_id );
- }
- else
+ if ( self != NULL )
{
- /* capture row id */
- self -> start_id = self -> end_id = self -> cutoff_id = row_id;
- assert ( self -> data_off == 0 );
- assert ( self -> rowmap_off == 0 );
- assert ( self -> num_rows == 0 );
- assert ( self -> num_elems == 0 );
- assert ( self -> row_len == 0 );
+ int64_t row_id = * ( const int64_t* ) const_row_id;
+
+ assert ( ! self -> row_written );
+ if ( self -> start_id != self -> end_id )
+ {
+ assert ( row_id == self -> end_id );
+ }
+ else
+ {
+ /* capture row id */
+ self -> start_id = self -> end_id = self -> cutoff_id = row_id;
+ assert ( self -> bits_in_buffer == 0 );
+ assert ( self -> row_len == 0 );
+ assert ( self -> num_rows == 0 );
+ assert ( self -> dflt_last == false );
+ }
}
}
@@ -451,30 +319,34 @@ void CC WColumnOpenRow ( void *item, void *const_row_id )
rc_t WColumnWrite ( VColumn *cself,
bitsz_t elem_bits, const void *buffer, bitsz_t boff, uint64_t len )
{
- rc_t rc;
- bitsz_t elem_size;
WColumn *self = ( WColumn* ) cself;
- DLList data;
- VDBMem *mem;
- uint8_t *dst;
- bitsz_t num_bits, num_writ, to_write, doff;
+ bitsz_t elem_size, num_bits, data_bits, doff;
assert ( elem_bits != 0 );
assert ( buffer != NULL || ( boff == 0 && len == 0 ) );
+ /* the number of bits to write */
+ num_bits = ( bitsz_t ) elem_bits * len;
+
/* test "compatibility" of elem_bits
this is used to interpret "len" */
elem_size = VTypedescSizeof ( & self -> dad . desc );
- if ( elem_bits < elem_size && elem_size % elem_bits != 0 )
- return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
- if ( elem_bits > elem_size && elem_bits % elem_size != 0 )
- return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
+ if ( elem_bits != elem_size )
+ {
+ if ( elem_bits < elem_size && elem_size % elem_bits != 0 )
+ return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
+ if ( elem_bits > elem_size && elem_bits % elem_size != 0 )
+ return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
+ if ( num_bits % elem_size != 0 )
+ return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
+ }
/* allow empty row */
if ( len == 0 )
{
self -> row_written = true;
+ self -> dflt_last = false;
return 0;
}
@@ -482,58 +354,55 @@ rc_t WColumnWrite ( VColumn *cself,
if ( self -> row_committed )
return RC ( rcVDB, rcColumn, rcUpdating, rcColumn, rcBusy );
- /* the number of bits to write */
- num_bits = ( bitsz_t ) elem_bits * len;
-
- /* prepare data row pointer */
- doff = self -> data_off + ( self -> num_elems + self -> row_len ) * elem_size;
- doff &= sizeof mem -> page * 8 - 1;
+ /* total number of bits to be put into buffer */
+ doff = self -> bits_in_buffer + self -> row_len;
+ data_bits = doff + num_bits;
- /* prepare whack lists */
- DLListInit ( & data );
+ /* see if it fits into buffer */
+ if ( data_bits > KDataBufferBits ( & self -> data ) )
+ {
+ rc_t rc;
- /* prepare initial destination pointer */
- mem = ( VDBMem* ) DLListTail ( & self -> data );
- dst = ( mem == NULL ) ? NULL : mem -> page;
+ /* calculate needed bytes */
+ size_t new_size = ( ( size_t ) ( ( data_bits + 7 ) >> 3 ) + INITIAL_DATA_PEAK - 1 )
+ & ~ ( size_t ) ( INITIAL_DATA_PEAK - 1 );
- /* append row data */
- for ( rc = 0, num_writ = 0; num_writ < num_bits; doff += to_write, num_writ += to_write )
- {
- bitsz_t avail;
+ /* need buffer memory */
+ if ( self -> data . elem_count == 0 )
+ {
+ /* always go with the peak size if larger */
+ if ( new_size < self -> data_peak )
+ new_size = self -> data_peak;
- /* allocate more buffer space */
- if ( ( doff & ( sizeof mem -> page * 8 - 1 ) ) == 0 )
+ /* make initial buffer at most recent peak */
+ rc = KDataBufferMakeBytes ( & self -> data, new_size );
+ if ( rc != 0 )
+ return rc;
+ }
+ else
{
- rc = VDBManagerMakeMem ( self -> mgr, & mem );
+ /* we have a new peak */
+ rc = KDataBufferResize ( & self -> data, new_size );
if ( rc != 0 )
- break;
- DLListPushTail ( & data, & mem -> n );
- dst = mem -> page;
- doff = 0;
+ return rc;
}
-
- /* decide on the bits to write */
- avail = ( sizeof mem -> page * 8 ) - doff;
- to_write = num_bits - num_writ;
- if ( avail < to_write )
- to_write = avail;
-
- /* copy in the data */
- bitcpy ( dst, doff, buffer, boff + num_writ, to_write );
}
- /* if all were written, accept changes */
- if ( rc == 0 )
+ /* copy in data */
+ if ( ( ( boff | doff | num_bits ) & 7 ) != 0 )
+ bitcpy ( self -> data . base, doff, buffer, boff, num_bits );
+ else
{
- self -> row_len += num_bits / elem_size;
- DLListAppendList ( & self -> data, & data );
- self -> row_written = true;
+ memcpy ( & ( ( uint8_t* ) self -> data . base ) [ doff >> 3 ],
+ & ( ( const uint8_t* ) buffer ) [ boff >> 3 ], num_bits >> 3 );
}
- /* drop any uncommitted buffers */
- DLListWhack ( & data, VDBMemRelease, self -> mgr );
+ /* accept changes */
+ self -> row_len += num_bits;
+ self -> row_written = true;
+ self -> dflt_last = false;
- return rc;
+ return 0;
}
/* RowDefaults
@@ -551,31 +420,52 @@ bool CC WColumnRowDefaults ( void *item, void *data )
rc_t *rc = data;
/* nothing to do if row written */
- if ( self -> row_written )
+ if ( self == NULL || self -> row_written )
return false;
/* error if no default value */
if ( ! self -> have_dflt )
{
* rc = RC ( rcVDB, rcColumn, rcClosing, rcRow, rcIncomplete );
- (void)PLOGERR(klogErr, (klogErr, *rc, "Column: $(col)", "col=%.*s", self->dad.scol->name->name.size, self->dad.scol->name->name.addr));
+ PLOGERR ( klogErr,
+ ( klogErr, * rc, "Column: $(col)", "col=%.*s"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr )
+ );
return true;
}
-
+
/* detect NULL row as default */
if ( self -> dflt . elem_bits == 0 )
{
- /* need to clip here, i.e. need to cut off blobs */
* rc = RC ( rcVDB, rcColumn, rcClosing, rcRow, rcNull );
- (void)PLOGERR(klogWarn, (klogWarn, *rc, "Column: $(col)", "col=%.*s", self->dad.scol->name->name.size, self->dad.scol->name->name.addr));
+ PLOGERR ( klogWarn,
+ ( klogWarn, * rc, "Column: $(col)", "col=%.*s"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr )
+ );
+ return false;
+ }
+
+ /* if the last column written was default,
+ there is an opportunity for simply incrementing the repeat count */
+ if ( USE_RLE && self -> dflt_last )
+ {
+ WColumnRowMap *rm = self -> rowmap . base;
+ assert ( self -> num_rows != 0 );
+ ++ rm [ self -> num_rows - 1 ] . cnt;
return false;
}
/* write default data */
* rc = WColumnWrite ( & self -> dad, self -> dflt . elem_bits,
self -> dflt . base, 0, self -> dflt . elem_count );
-
- return ( * rc != 0 ) ? true : false;
+ if ( * rc != 0 )
+ return true;
+
+ /* record the fact that this was default */
+ self -> dflt_last = true;
+ return false;
}
/* CommitRow
@@ -590,166 +480,115 @@ bool CC WColumnRowDefaults ( void *item, void *data )
*
* returns true if there was a memory error.
*/
-bool CC WColumnCommitRow ( void *item, void *data )
+static
+bool WColumnCommitRepeatedRow ( WColumn *self, WColumnRowMap *rm, int64_t end_id )
{
- WColumn *self = item;
- int64_t *end_id = data;
+ /* if we've previously declared a cutoff id,
+ incorporate the repeated row into the range */
+ if ( ( self -> cutoff_id != self -> start_id ) && ( self -> cutoff_id + 1 == end_id ) )
+ self -> cutoff_id = end_id;
- VDBMem *mem;
+ /* just account for the repeated row */
+ ++ rm -> cnt;
+
+ /* drop data */
+ self -> row_len = 0;
+
+ /* the row has been successfully committed */
+ self -> row_committed = true;
+
+ /* no error */
+ return false;
+}
+
+static
+bool WColumnCommitRowData ( WColumn *self, int64_t *end_id )
+{
+ size_t cur_size;
+ uint64_t row_len;
bitsz_t elem_bits;
WColumnRowMap *rm;
- size_t rmoff, cur_size;
/* if no data were written and that's okay, ignore */
if ( ! self -> row_written )
{
+ assert ( self -> row_len == 0 );
self -> row_committed = true;
return false;
}
- /* likely to need this later */
+ /* column's element size */
elem_bits = VTypedescSizeof ( & self -> dad . desc );
+ assert ( self -> row_len % elem_bits == 0 );
+ row_len = self -> row_len / elem_bits;
- /* last buffer */
- mem = ( VDBMem* ) DLListTail ( & self -> rowmap );
-
- /* detect a prior row */
- if ( self -> num_rows != 0 )
+ /* detect repeated row */
+ if ( USE_RLE && self -> num_rows != 0 )
{
- /* byte offset to rowmap entry */
- rmoff = ( self -> num_rows + self -> rowmap_off - 1 ) * sizeof * rm;
+ rm = self -> rowmap . base;
+ rm += self -> num_rows - 1;
- assert ( mem != NULL );
+ if ( rm -> len == row_len )
+ {
+ bitsz_t poff, coff;
+ const uint8_t *base;
- /* point to prior row entry */
- rm = ( void* ) & mem -> page [ rmoff & ( sizeof mem -> page - 1 ) ];
+ if ( row_len == 0 )
+ return WColumnCommitRepeatedRow ( self, rm, * end_id );
- /* RLE comparison starts with lengths */
- if ( USE_RLE && rm -> len == self -> row_len )
- {
- /* two consecutive rows with same length */
- if ( self -> row_len == 0 )
+ base = ( const void* ) self -> data . base;
+ assert ( self -> bits_in_buffer >= self -> row_len );
+ coff = self -> bits_in_buffer;
+ poff = self -> bits_in_buffer - self -> row_len;
+
+ if ( ( ( poff | coff | self -> row_len ) & 7 ) != 0 )
{
- /* when the length is zero, there's nothing much to do */
- ++ rm -> cnt;
- self -> row_committed = true;
- return false;
+ if ( bitcmp ( base, poff, base, coff, self -> row_len ) == 0 )
+ return WColumnCommitRepeatedRow ( self, rm, * end_id );
}
else
{
- VDBMemBuffer cur, prior;
- bitsz_t cnt, to_cmp, num_bits = ( bitsz_t ) elem_bits * self -> row_len;
-
- /* create first view onto buffer at tail */
- VDBMemBufferInitTail ( & cur, DLListTail ( & self -> data ),
- self -> data_off, elem_bits, self -> num_elems + self -> row_len );
-
- /* back up to beginning of uncommitted row */
- if ( ! VDBMemBufferAdvance ( & cur, num_bits - 1, true ) )
- return true;
-
- /* "cur" points at the current row. prepare "prior" to point to
- the row before that which is the last committed row, which we
- know is the same length as the current row */
- prior = cur;
- assert ( self -> num_elems >= self -> row_len );
- if ( ! VDBMemBufferAdvance ( & prior, num_bits, true ) )
- return true;
-
- /* comparison loop */
- for ( cnt = to_cmp = 0; cnt < num_bits; cnt += to_cmp )
- {
- const void *p, *c;
- bitsz_t coff, cavail, poff, pavail;
-
- VDBMemBufferAdvance ( & prior, to_cmp, false );
- p = VDBMemBufferAccess ( & prior, & poff, & pavail );
- c = VDBMemBufferAccess ( & cur, & coff, & cavail );
- if ( p == NULL || c == NULL )
- return true;
-
- to_cmp = num_bits - cnt;
- if ( to_cmp > pavail )
- to_cmp = pavail;
- if ( to_cmp > cavail )
- to_cmp = cavail;
-
- /* compare bits */
- if ( bitcmp ( p, poff, c, coff, to_cmp ) != 0 )
- break;
-
- /* advance buffers */
- VDBMemBufferAdvance ( & cur, to_cmp, false );
- }
-
- /* if the rows were identical */
- if ( cnt == num_bits )
- {
- /* just bump the repeat count */
- ++ rm -> cnt;
-
- if ((self->cutoff_id != self->start_id) && (self->cutoff_id + 1 == *end_id))
- self->cutoff_id = *end_id;
-#if 1
- /* drop any extra buffers used during write */
- for ( mem = ( VDBMem* ) DLNodeNext ( & prior . mem -> n );
- mem != NULL;
- mem = ( VDBMem* ) DLNodeNext ( & prior . mem -> n ) )
- {
- DLListUnlink ( & self -> data, & mem -> n );
- VDBMemRelease ( & mem -> n, self -> mgr );
- }
-#else
- while ( DLListTail ( & self -> data ) != prior . mem -> n )
- {
- mem = ( VDBMem * ) DLListPopTail ( & self -> data );
- VDBMemRelease ( & mem -> n, self -> mgr );
- }
-#endif
-
- /* consider the row committed */
- self -> row_len = 0;
- self -> row_committed = true;
- goto check_size;
- }
+ if ( memcmp ( & base [ poff >> 3 ], & base [ coff >> 3 ], self -> row_len >> 3 ) == 0 )
+ return WColumnCommitRepeatedRow ( self, rm, * end_id );
}
}
}
- /* offset to next rowmap entry */
- rmoff = ( self -> num_rows + self -> rowmap_off ) * sizeof * rm;
-
- /* check for space */
- if ( mem == NULL ||( rmoff & ( sizeof mem -> page - 1 ) ) == 0 )
+ /* need to add a new row */
+ if ( ( uint64_t ) self -> num_rows == self -> rowmap . elem_count )
{
- rc_t rc = VDBManagerMakeMem ( self -> mgr, & mem );
+ /* need more memory */
+ rc_t rc;
+ self -> rowmap . elem_bits = sizeof * rm * 8;
+ rc = KDataBufferResize ( & self -> rowmap, self -> rowmap . elem_count + 16 * 1024 );
if ( rc != 0 )
+ {
+ PLOGERR ( klogErr,
+ ( klogErr, rc, "Column: $(col) failed to resize row map", "col=%.*s"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr )
+ );
return true;
- DLListPushTail ( & self -> rowmap, & mem -> n );
- rmoff = 0;
+ }
}
- /* mem might not be initialized! */
- /* new rowmap entry */
- rm = ( void* ) & mem -> page [ rmoff & ( sizeof mem -> page - 1 ) ];
-#if _DEBUGGING
+ rm = self -> rowmap . base;
+ rm += self -> num_rows;
+
rm -> start_id = self -> end_id;
-#endif
- rm -> len = self -> row_len;
+ rm -> len = row_len;
rm -> cnt = 1;
- self -> num_elems += self -> row_len;
- ++ self -> num_rows;
+ self -> bits_in_buffer += self -> row_len;
self -> row_len = 0;
+
+ ++ self -> num_rows;
self -> row_committed = true;
-check_size:
- /* current size in bytes */
- cur_size = ( (size_t)self -> num_elems * elem_bits + 7 ) >> 3;
- /* if the buffer is large enough */
+ /* detect 1x blob cutoff */
+ cur_size = ( size_t ) ( self -> bits_in_buffer + 7 ) >> 3;
if ( cur_size >= self -> trigger )
{
-
/* if size just crossed the trigger boundary and
* cutoff_id has not been advanced yet */
if ( self -> cutoff_id == self -> start_id )
@@ -763,56 +602,116 @@ check_size:
/* set to min of current end or our cutoff */
if ( self -> cutoff_id < * end_id )
{
+#if ROW_COUNT_CUTOFFS
+ /* the number of rows until our cutoff */
+ uint64_t row_count = self -> cutoff_id - self -> start_id;
+ if ( row_count != 0 )
+ {
+ int64_t end;
+ uint64_t msb = row_count;
+
+ /* adjust id to nearest power of two size
+ that does not exceed current id */
+ while ( ( msb & ( msb - 1 ) ) != 0 )
+ msb &= msb - 1;
+
+ /* add in rounding factor to row_count */
+ row_count += ( msb >> 1 );
+
+ /* truncate */
+ row_count &= ~ ( msb - 1 );
+
+ if ( row_count >= 1024 )
+ {
+ /* limit to current row */
+ while ( row_count > 1024 && self -> start_id + row_count > * end_id )
+ row_count >>= 1;
+
+ if ( self -> start_id + row_count <= * end_id )
+ self -> cutoff_id = self -> start_id + row_count;
+ }
+ }
+#endif
* end_id = self -> cutoff_id;
}
}
}
+
return false;
}
-/* CloseRow
- * discards uncommitted data
- * update state
- */
-void CC WColumnCloseRow ( void *item, void *ignore )
+bool CC WColumnCommitRow ( void *item, void *data )
{
WColumn *self = item;
-
- if ( self -> row_len != 0 )
+ if ( self != NULL )
{
- /* discard any extra buffers used */
- VDBMem *mem;
- bitsz_t elem_bits = VTypedescSizeof ( & self -> dad . desc );
- bitsz_t boff = self -> data_off + self -> num_elems * elem_bits;
- bitsz_t origin = boff + self -> row_len * elem_bits;
+ int64_t *end_id = data;
- /* set origin to the start of last buffer */
- origin = ( origin - 1 ) & ~ ( bitsz_t ) ( sizeof mem -> page * 8 - 1 );
+ if ( WColumnCommitRowData ( self, end_id ) )
+ return true;
- if ((boff == 0) && (origin == 0)) /* we got nothing */
+ /* if the row range is too great */
+ if ( ( self -> end_id - self -> start_id ) >= MAX_ROW_COUNT )
{
- /* delete all but it should only be one if any */
- while ((mem = (VDBMem*)DLListPopTail (&self->data)) != NULL)
- VDBMemRelease ( & mem -> n, self -> mgr );
- }
- else
- {
- /* not reached, not tested, not understood */
- for ( ; origin >= boff ; origin -= sizeof mem -> page * 8 )
+ /* if row range has just crossed the boundary and
+ * cutoff_id has not been advanced yet */
+ if ( self -> cutoff_id == self -> start_id )
{
- mem = ( VDBMem* ) DLListPopTail ( & self -> data );
- assert ( mem != NULL );
- VDBMemRelease ( & mem -> n, self -> mgr );
+ self -> cutoff_id = * end_id;
+ }
+
+ /* set to min of current end or our cutoff */
+ else if ( self -> cutoff_id < * end_id )
+ {
+ * end_id = self -> cutoff_id;
}
}
}
- if ( self -> row_committed )
- ++ self -> end_id;
+ return false;
+}
- self -> row_len = 0;
- self -> row_written = false;
- self -> row_committed = false;
+/* RepeatRow
+ * go into the last row entry
+ * extend the count by uint64_t
+ */
+void CC WColumnRepeatRow ( void *item, void *data )
+{
+ WColumn *self = item;
+ const WColumnRepeatRowData *pb = data;
+
+ if ( self != NULL && self -> num_rows != 0 )
+ {
+ WColumnRowMap *rm = self -> rowmap . base;
+ rm += self -> num_rows - 1;
+
+ /* if we've previously declared a cutoff id,
+ incorporate the repeated row into the range */
+ if ( ( self -> cutoff_id != self -> start_id ) && ( self -> cutoff_id + 1 == pb -> end_id ) )
+ self -> cutoff_id = pb -> end_id + pb -> count;
+
+ /* just account for the repeated row */
+ rm -> cnt += pb -> count;
+ self -> end_id += pb -> count;
+ }
+}
+
+/* CloseRow
+ * discards uncommitted data
+ * update state
+ */
+void CC WColumnCloseRow ( void *item, void *ignore )
+{
+ WColumn *self = item;
+ if ( self != NULL )
+ {
+ if ( self -> row_committed )
+ ++ self -> end_id;
+
+ self -> row_len = 0;
+ self -> row_written = false;
+ self -> row_committed = false;
+ }
}
/* BufferPage
@@ -825,248 +724,316 @@ void CC WColumnCloseRow ( void *item, void *ignore )
* returns true if there was a memory error.
*/
static
-rc_t WColumnMakePage ( WColumn *self, int64_t end_id,
- bitsz_t elem_bits, uint64_t num_elems, uint64_t num_rows )
+bool WColumnSplitBuffer ( WColumn *self, int64_t end_id, size_t rm_idx )
{
rc_t rc;
+ int64_t id;
+ VBlob *vblob;
+ bool splitting;
+ size_t i, data_cur;
+ uint64_t sum_elems;
+
+ const WColumnRowMap *rm = self -> rowmap . base;
+
+ uint64_t num_rows = rm [ rm_idx ] . start_id + rm [ rm_idx ] . cnt - self -> start_id;
+ assert ( rm [ 0 ] . start_id == self -> start_id );
+
+ /* adjust end_id [ TAKES CARE OF THEORETICAL ERROR CONDITION
+ NOT KNOWN TO EXIST ] and num_rows ( when splitting repeat ) */
+ id = end_id;
+ splitting = false;
+ if ( self -> start_id + num_rows <= id )
+ id = self -> start_id + num_rows;
+ else
+ {
+ num_rows = id - self -> start_id;
+ splitting = true;
+ }
+ /* release previous ( but unexpected ) cache if there */
if ( self -> page != NULL )
{
- TRACK_BLOB (VBlobRelease, self->page);
- ( void ) VBlobRelease ( self -> page );
+ TRACK_BLOB ( VBlobRelease, self -> page );
+ VBlobRelease ( self -> page );
self -> page = NULL;
}
- rc = VBlobNew ( & self -> page, self -> start_id, end_id - 1, self -> dad . scol -> name -> name . addr );
- TRACK_BLOB (VBlobNew, self->page);
-
- if ( rc == 0 )
+ /* create new blob */
+ rc = VBlobNew ( & vblob,
+ self -> start_id, id - 1,
+ self -> dad . scol -> name -> name . addr );
+ TRACK_BLOB ( VBlobNew, vblob );
+ if ( rc != 0 )
{
- VBlob *vblob = self -> page;
- rc = KDataBufferMake ( & vblob -> data, elem_bits, num_elems );
- if ( rc == 0 )
- {
- rc = PageMapNew ( & vblob -> pm, num_rows );
- if ( rc == 0 )
- return 0;
- }
+ PLOGERR ( klogErr,
+ ( klogErr, rc, "Column: $(col) failed to allocate page", "col=%.*s"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr )
+ );
+ return true;
+ }
- TRACK_BLOB (VBlobRelease, vblob);
- (void)VBlobRelease ( vblob );
- self -> page = NULL;
+ /* create blob page map */
+ rc = PageMapNew ( & vblob -> pm, rm_idx + 1 ); /*** rm_idx tells many WColumnRowMap need to be added to PageMap ***/
+ if ( rc != 0 )
+ {
+ TRACK_BLOB ( VBlobRelease, vblob );
+ VBlobRelease ( vblob );
+
+ PLOGERR ( klogErr,
+ ( klogErr, rc, "Column: $(col) failed to create page map", "col=%.*s"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr )
+ );
+ return true;
}
- return rc;
-}
-#define ROWMAPS_PER_PAGE (sizeof(((const VDBMem *)0)->page) / sizeof(WColumnRowMap))
-#define ROWMAP_BITS (sizeof(WColumnRowMap) * 8)
-/* false return is good, true return is failure of some sort */
-bool CC WColumnBufferPage ( void *item, void *const_end_id )
-{
- rc_t rc;
- WColumn *self = item;
- int64_t id, end_id = * ( const int64_t* ) const_end_id;
-
- VDBMem *mem;
- bool seek_ok;
- const WColumnRowMap *rm = NULL;
- VDBMemBuffer rowmap, data;
- uint64_t num_elems, num_rows;
- uint64_t rowmap_off;
- bitsz_t cnt, num_bits, to_cpy, elem_bits;
- bool advance = true;
-
- /* initialize buffer onto rowmap */
- VDBMemBufferInitHead ( & rowmap, DLListHead ( & self -> rowmap ),
- self -> rowmap_off * ROWMAP_BITS, ROWMAP_BITS, self -> num_rows );
-
- /* walk row map to count rows and elements through end_id not the whole list */
- num_elems = num_rows = 0;
- for ( id = self -> start_id;
- id < end_id;
- id += rm -> cnt )
+ /* write page map up to ( but not including ) last entry */
+ for ( sum_elems = 0, i = 0; i < rm_idx; ++ i )
{
- rm = VDBMemBufferAccess ( & rowmap, NULL, NULL );
- if ( rm == NULL )
- return true;
- if (advance)
- advance = VDBMemBufferAdvance ( & rowmap, ROWMAP_BITS, false );
- else
+ sum_elems += rm [ i ] . len;
+ rc = PageMapAppendSomeRows ( vblob -> pm, rm [ i ] . len, rm [ i ] . cnt );
+ if ( rc != 0 )
{
- /* assert (0); */
+ TRACK_BLOB ( VBlobRelease, vblob );
+ VBlobRelease ( vblob );
+
+ PLOGERR ( klogErr,
+ ( klogErr, rc, "Column: $(col) failed to write page map", "col=%.*s"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr )
+ );
return true;
}
- num_elems += rm -> len;
- assert (rm->start_id == id);
- ++ num_rows;
}
- /* allocate page */
- elem_bits = VTypedescSizeof ( & self -> dad . desc );
- rc = WColumnMakePage ( self, end_id, elem_bits, num_elems, num_rows );
+ sum_elems += rm [ i ] . len;
+ rc = PageMapAppendSomeRows ( vblob -> pm, rm [ i ] . len, id - rm [ i ] . start_id );
if ( rc != 0 )
+ {
+ TRACK_BLOB ( VBlobRelease, vblob );
+ VBlobRelease ( vblob );
+
+ PLOGERR ( klogErr,
+ ( klogErr, rc, "Column: $(col) failed to write page map", "col=%.*s"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr )
+ );
return true;
+ }
- /* initialize data buffer */
- VDBMemBufferInitHead ( & data, DLListHead ( & self -> data ),
- self -> data_off, elem_bits, self -> num_elems + self -> row_len );
+ /* determine current data buffer usage */
+ data_cur = ( size_t ) ( ( ( self -> bits_in_buffer + 7 ) >> 3 )
+ + SINGLE_PAGE_SIZE - 1 ) & ~ ( size_t ) ( SINGLE_PAGE_SIZE - 1 );
- /* copy data */
- num_bits = KDataBufferBits ( & self -> page -> data );
- for ( seek_ok = true, cnt = 0; cnt < num_bits; cnt += to_cpy )
+ /* update peak history */
+ if ( self -> data_peak_hist [ self -> peak_hist_idx ] == self -> data_peak )
{
- bitsz_t avail, soff;
- const void *src = VDBMemBufferAccess ( & data, & soff, & avail );
- if ( src == NULL )
- return true;
+ int j;
+ size_t data_peak = data_cur;
- to_cpy = num_bits - cnt;
- if ( to_cpy > avail )
- to_cpy = avail;
-
- bitcpy ( self -> page -> data . base, cnt, src, soff, to_cpy );
+ for ( j = ( self -> peak_hist_idx + 1 ) & 0xF;
+ j != self -> peak_hist_idx;
+ j = ( j + 1 ) & 0xF )
+ {
+ if ( self -> data_peak_hist [ j ] > data_peak )
+ data_peak = self -> data_peak_hist [ j ];
+ }
- seek_ok = VDBMemBufferAdvance ( & data, to_cpy, false );
+ self -> data_peak = data_peak;
}
+ self -> data_peak_hist [ self -> peak_hist_idx ] = data_cur;
+ self -> peak_hist_idx = ( self -> peak_hist_idx + 1 ) & 0xF;
+ if ( data_cur > self -> data_peak )
+ self -> data_peak = data_cur;
+
+ /* hand data over to blob */
+ vblob -> data = self -> data;
+ vblob -> data . elem_bits = VTypedescSizeof ( & self -> dad . desc );
+ vblob -> data . elem_count = sum_elems;
+
+ /* handle residual data */
+ if ( splitting )
+ sum_elems -= rm [ rm_idx ] . len;
+ else
+ ++ rm_idx;
- /* if last seek failed, "to_cpy" represents the bits remaining */
- if ( seek_ok )
- to_cpy = 0;
-
- /* capture left edge of data */
- self -> data_off = data . marker + to_cpy;
-
- /* if keeping the last row, back off by that amount:
- * we could only "over shoot" by one in the loop above */
- if ( id > end_id )
+ if ( rm_idx == self -> num_rows )
{
- self -> data_off -= elem_bits * rm -> len;
+ /* no residual data/rows */
+ memset ( & self -> data, 0, sizeof self -> data );
+ self -> bits_in_buffer = 0;
+ self -> num_rows = 0;
+ self -> start_id = self -> cutoff_id = end_id;
}
- /* drop data pages */
- for ( ; self -> data_off >= sizeof mem -> page * 8; self -> data_off -= sizeof mem -> page * 8 )
+ else
{
- mem = ( VDBMem* ) DLListPopHead ( & self -> data );
- VDBMemRelease ( & mem -> n, self -> mgr );
- }
-
- /* re-initialize rowmap buffer */
- VDBMemBufferInitHead ( & rowmap, DLListHead ( & self -> rowmap ),
- self -> rowmap_off * ROWMAP_BITS, ROWMAP_BITS, self -> num_rows );
+ KDataBuffer data;
+ bitsz_t boff, to_copy;
- /* copy row map */
- for ( ; num_rows > 1; -- num_rows )
- {
- rm = VDBMemBufferAccess ( & rowmap, NULL, NULL );
- assert ( rm != NULL );
- rc = PageMapAppendSomeRows ( self -> page -> pm, rm -> len, rm -> cnt );
- if ( rc != 0 )
- return true;
- VDBMemBufferAdvance ( & rowmap, ROWMAP_BITS, false );
- }
- for ( seek_ok = true; num_rows > 0; -- num_rows )
- {
- uint64_t row_count;
-
- rm = VDBMemBufferAccess ( & rowmap, NULL, NULL );
- assert ( rm != NULL );
-
- row_count = rm -> cnt - ( id - end_id );
- rc = PageMapAppendSomeRows ( self -> page -> pm, rm -> len, row_count);
+ /* allocate a new data buffer */
+ rc = KDataBufferMakeBytes ( & data, self -> data_peak );
if ( rc != 0 )
+ {
+ /* forget transfer of blob */
+ memset ( & vblob -> data, 0, sizeof vblob -> data );
+
+ TRACK_BLOB ( VBlobRelease, vblob );
+ VBlobRelease ( vblob );
+
+ PLOGERR ( klogErr,
+ ( klogErr, rc, "Column: $(col) failed to split page", "col=%.*s"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr )
+ );
return true;
-#if _DEBUGGING
- if (id - end_id)
+ }
+
+ /* copy data */
+ boff = ( rm_idx > 0 ) ?
+ sum_elems * vblob -> data . elem_bits : 0;
+ to_copy = self -> bits_in_buffer - boff;
+ if ( ( ( boff | to_copy ) & 7 ) != 0 )
+ bitcpy ( data . base, 0, self -> data . base, boff, to_copy );
+ else
+ memcpy ( data . base, & ( ( const uint8_t* ) self -> data . base ) [ boff >> 3 ], to_copy >> 3 );
+
+ self -> data = data;
+ self -> bits_in_buffer = to_copy;
+
+ /* copy row map */
+ memmove ( self -> rowmap . base, & rm [ rm_idx ], ( self -> num_rows -= rm_idx ) * sizeof * rm );
+
+ /* adjust starting id and repeat count if splitting single row */
+ if ( splitting )
{
- ((WColumnRowMap *)rm)->start_id += row_count;
+ WColumnRowMap *split = self -> rowmap . base;
+ split -> cnt = split -> start_id + split -> cnt - id;
+ split -> start_id = id;
}
-#endif
- seek_ok = VDBMemBufferAdvance ( & rowmap, ROWMAP_BITS, false );
+
+ self -> start_id = self -> cutoff_id = id;
}
- /* capture left edge of rowmap: that is capture the number of bits to the new
- * offset to the first unwritten rowmap that might be a different page than the
- * current rowmap offset */
- rowmap_off = rowmap . marker / ROWMAP_BITS;
+ self -> page = vblob;
+ self -> dflt_last = false;
- /* if last advance failed, incorporate bits */
- if ( ! seek_ok )
- ++rowmap_off;
+ return false;
+}
- /* if last rowmap entry needs to be preserved */
- if ( id > end_id )
- {
- /* back up to preserve row */
- --rowmap_off;
- /* adjust row count */
- ( ( WColumnRowMap* ) rm ) -> cnt = id - end_id;
- }
+static
+int WColumnRowMapCompare ( const WColumnRowMap *self, int64_t id )
+{
+ /* id is right-edge exclusive */
+ if ( self -> start_id >= id )
+ return -1;
+ return id > self -> start_id + self -> cnt;
+}
- /* drop rowmap pages and fix up other fields
- * this is less complex if we are clearing out all pages */
- if (rowmap_off - self->rowmap_off == self->num_rows)
+bool CC WColumnBufferPage ( void *item, void *const_end_id )
+{
+ WColumn *self = item;
+ if ( self != NULL )
{
- /* delete all */
- while ((mem = (VDBMem*)DLListPopHead (&self->rowmap)) != NULL)
- VDBMemRelease (&mem->n, self->mgr);
+ int64_t end_id = * ( const int64_t* ) const_end_id;
- self->num_elems = 0;
- self->num_rows = 0;
- self->rowmap_off = 0;
- }
- else
- {
- uint64_t rowmaps_this_page;
-
- /* page must be exactly divisible by sizeof ( WColumnRowMap ) */
- assert ( VDBMemBitsInPage () % sizeof ( WColumnRowMap ) == 0 );
-
- /* Kind of ugly: The first page might have less that the
- * maximum number of rowmaps due to its having an offset
- * to the first current rowmap. When that page is dropped
- * the number of rows needs to be reduced by that partial
- * number of rowmaps. But this seemed preferable to
- * a more awkward check for a first partial page followed by
- * a loop over full pages. */
- for ( rowmaps_this_page = ROWMAPS_PER_PAGE - self->rowmap_off;
- rowmap_off >= ROWMAPS_PER_PAGE;
- rowmaps_this_page = ROWMAPS_PER_PAGE )
+ int diff;
+ const WColumnRowMap *rm = self -> rowmap . base;
+ size_t i, left, right = self -> num_rows;
+
+ /* find the entry mentioned */
+ if ( self -> num_rows == 0 )
{
- mem = ( VDBMem* ) DLListPopHead ( & self -> rowmap );
- assert ( mem != NULL );
- VDBMemRelease ( & mem -> n, self -> mgr );
- rowmap_off -= ROWMAPS_PER_PAGE;
- assert ( self->num_rows > rowmaps_this_page );
- self->num_rows -= rowmaps_this_page;
- self->rowmap_off = 0; /* old rowmap_off is no longer on the same page */
+ PLOGMSG ( klogWarn,
+ ( klogWarn, "Column: $(col) has no rows to buffer", "col=%.*s"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr )
+ );
+ return true;
}
- /* new number of rows needs to lose the rows on this page that are done;
- * that might be just the new rowmap_off or it might be new - old
- * this expression assumes new is page decremented in the loop and
- * the old is dropped in the loop or that the loop is not run
- * and the new and old are both from the same page
- */
- assert ( self->num_rows > (rowmap_off - self->rowmap_off));
- self->num_rows -= (rowmap_off - self->rowmap_off);
- self->rowmap_off = rowmap_off;
-
- /* reinitialize buffer onto rowmap */
- VDBMemBufferInitHead ( & rowmap, DLListHead ( & self -> rowmap ),
- rowmap_off * ROWMAP_BITS, ROWMAP_BITS, self -> num_rows );
-
- /* walk row map to count actual elements */
- for ( num_elems = 0, num_rows = 0; num_rows != self -> num_rows; ++num_rows )
+
+ /* check last entry */
+ i = right - 1;
+ diff = WColumnRowMapCompare ( & rm [ i ], end_id );
+ if ( diff >= 0 )
+ return WColumnSplitBuffer ( self, end_id, i );
+
+ /* check that the id is within our range at all */
+ assert ( self -> start_id == rm [ 0 ] . start_id );
+ if ( end_id < self -> start_id )
{
- rm = VDBMemBufferAccess ( & rowmap, NULL, NULL );
- if ( rm == NULL )
- return true;
- VDBMemBufferAdvance ( & rowmap, ROWMAP_BITS, false );
- num_elems += rm->len;
+ PLOGMSG ( klogWarn,
+ ( klogWarn, "Column: $(col) cutoff id $(id) is not within range"
+ , "col=%.*s,id=%ld"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr
+ , end_id )
+ );
+ return true;
}
- self->num_elems = num_elems;
+
+ /* search rails are left ( inclusive ) at 0, right ( exclusive ) at num_rows */
+ left = 0;
+
+ /* perform arithmetic search for initial portion */
+ if ( right > 1000 )
+ {
+ double p = ( double ) ( end_id - rm [ left ] . start_id ) /
+ ( rm [ right - 1 ] . start_id + rm [ right - 1 ] . cnt - rm [ left ] . start_id );
+ assert ( p >= 0.0 && p <= 1.0 );
+
+ i = left + p * ( right - left );
+
+ diff = WColumnRowMapCompare ( & rm [ i ], end_id );
+ if ( diff == 0 )
+ return WColumnSplitBuffer ( self, end_id, i );
+ if ( diff < 0 )
+ right = i;
+ else
+ left = i + 1;
+
+ if ( left < right )
+ {
+ p = ( double ) ( end_id - rm [ left ] . start_id ) /
+ ( rm [ right - 1 ] . start_id + rm [ right - 1 ] . cnt - rm [ left ] . start_id );
+ assert ( p >= 0.0 && p <= 1.0 );
+
+ i = left + p * ( right - left );
+
+ diff = WColumnRowMapCompare ( & rm [ i ], end_id );
+ if ( diff == 0 )
+ return WColumnSplitBuffer ( self, end_id, i );
+ if ( diff < 0 )
+ right = i;
+ else
+ left = i + 1;
+ }
+ }
+
+ /* normal binary search */
+ while ( left < right )
+ {
+ i = ( left + right ) >> 1;
+
+ diff = WColumnRowMapCompare ( & rm [ i ], end_id );
+ if ( diff == 0 )
+ return WColumnSplitBuffer ( self, end_id, i );
+ if ( diff < 0 )
+ right = i;
+ else
+ left = i + 1;
+ }
+
+ PLOGMSG ( klogErr,
+ ( klogErr, "Column: $(col) cutoff id $(id) is not within range"
+ , "col=%.*s,id=%ld"
+ , self -> dad . scol -> name -> name . size
+ , self -> dad . scol -> name -> name . addr
+ , end_id )
+ );
}
- self->start_id = self->cutoff_id = end_id;
- return false;
+ return true;
}
/* ReadBlob
@@ -1081,8 +1048,8 @@ rc_t WColumnReadBlob ( WColumn *self, VBlob **vblob, int64_t id )
return RC ( rcVDB, rcColumn, rcReading, rcRow, rcNotFound );
* vblob = self -> page;
- (void)VBlobAddRef ( self -> page );
- TRACK_BLOB(VBlobAddRef, self->page);
+ VBlobAddRef ( self -> page );
+ TRACK_BLOB ( VBlobAddRef, self -> page );
return 0;
}
@@ -1093,10 +1060,10 @@ rc_t WColumnReadBlob ( WColumn *self, VBlob **vblob, int64_t id )
void CC WColumnDropPage ( void *item, void *ignore )
{
WColumn *self = item;
- if ( self -> page != NULL )
+ if ( self != NULL && self -> page != NULL )
{
- TRACK_BLOB(VBlobRelease,self->page);
- (void)VBlobRelease ( self -> page );
+ TRACK_BLOB ( VBlobRelease, self -> page );
+ VBlobRelease ( self -> page );
self -> page = NULL;
}
}
diff --git a/libs/vdb/wcursor.c b/libs/vdb/wcursor.c
index e8c1939..6c88983 100644
--- a/libs/vdb/wcursor.c
+++ b/libs/vdb/wcursor.c
@@ -68,14 +68,17 @@
#include <string.h>
#include <assert.h>
-#define MTCURSOR_DBG( msg ) \
- DBGMSG ( DBG_VDB, DBG_FLAG ( DBG_VDB_MTCURSOR ), msg )
/*--------------------------------------------------------------------------
* VCursor
* a row cursor onto a VTable
*/
+/* forward
+ * to avoid reordering whole page
+ */
+static
+rc_t VCursorFlushPageInt ( VCursor *self );
/* Whack
@@ -107,6 +110,7 @@ rc_t VCursorWhack ( VCursor *self )
KConditionRelease ( self -> flush_cond );
KLockRelease ( self -> flush_lock );
#endif
+ VCursorTerminatePagemapThread(self);
return VCursorDestroy ( self );
}
@@ -127,7 +131,7 @@ rc_t VCursorWhack ( VCursor *self )
static rc_t CC run_flush_thread ( const KThread *t, void *data );
#endif
-LIB_EXPORT rc_t CC VTableCreateCursorWrite ( VTable *self, VCursor **cursp, KCreateMode mode )
+rc_t VTableCreateCursorWriteInt ( VTable *self, VCursor **cursp, KCreateMode mode, bool create_thread )
{
rc_t rc;
@@ -158,13 +162,17 @@ LIB_EXPORT rc_t CC VTableCreateCursorWrite ( VTable *self, VCursor **cursp, KCre
{
rc = VCursorSupplementSchema ( curs );
#if VCURSOR_FLUSH_THREAD
- if ( rc == 0 )
+ if ( rc == 0 && create_thread )
+ {
rc = KLockMake ( & curs -> flush_lock );
- if ( rc == 0 )
- rc = KConditionMake ( & curs -> flush_cond );
- if ( rc == 0 )
- rc = KThreadMake ( & curs -> flush_thread, run_flush_thread, curs );
+ if ( rc == 0 )
+ rc = KConditionMake ( & curs -> flush_cond );
+ if ( rc == 0 )
+ rc = KThreadMake ( & curs -> flush_thread, run_flush_thread, curs );
+ }
#endif
+ if(rc == 0)
+ rc = VCursorLaunchPagemapThread(curs);
if ( rc == 0 )
{
* cursp = curs;
@@ -181,6 +189,11 @@ LIB_EXPORT rc_t CC VTableCreateCursorWrite ( VTable *self, VCursor **cursp, KCre
return rc;
}
+LIB_EXPORT rc_t CC VTableCreateCursorWrite ( VTable *self, VCursor **cursp, KCreateMode mode )
+{
+ return VTableCreateCursorWriteInt ( self, cursp, mode, true );
+}
+
/* MakeColumn
*/
@@ -293,7 +306,8 @@ LIB_EXPORT rc_t CC VCursorOpen ( const VCursor *cself )
pr . ignore_column_errors = false;
pr . discover_writable_columns = false;
- rc = VProdResolveAddTriggers ( & pr, self -> stbl );
+ if ( !self -> suspend_triggers )
+ rc = VProdResolveAddTriggers ( & pr, self -> stbl );
}
if ( rc == 0 )
{
@@ -311,7 +325,7 @@ LIB_EXPORT rc_t CC VCursorOpen ( const VCursor *cself )
if ( ! self -> read_only ||
/* permit empty open when run from sradb */
( GetRCObject ( rc ) == rcRange &&
- self -> permit_post_open_add &&
+ self -> permit_add_column &&
VectorLength ( & self -> row ) == 0 ) )
{
rc = 0;
@@ -351,18 +365,56 @@ LIB_EXPORT rc_t CC VCursorOpen ( const VCursor *cself )
* records any SColumn that can be reached
* populates BTree with VColumnRef objects
*/
+struct resolve_phys_data
+{
+ VProdResolve pr;
+ const KNamelist *seed;
+ uint32_t count;
+};
+
static
void CC resolve_writable_sphys ( void *item, void *data )
{
- VProdResolve *self = data;
+ struct resolve_phys_data *pb = data;
+ const SPhysMember *smbr = ( const void* ) item;
VProduction *out = NULL;
- VProdResolveSPhysMember ( self, & out, item );
+
+ if ( pb -> seed == NULL )
+ VProdResolveSPhysMember ( & pb -> pr, & out, smbr );
+ else
+ {
+ uint32_t i;
+ const KSymbol *sym = smbr -> name;
+ const char *sname = sym -> name . addr;
+ size_t ssize = sym -> name . size;
+ if ( sname [ 0 ] == '.' )
+ {
+ ++ sname;
+ -- ssize;
+ }
+
+ /* TBD - this is not too speedy, but it is
+ very low frequency in all known cases */
+ for ( i = 0; i < pb -> count; ++ i )
+ {
+ const char *name;
+ rc_t rc = KNamelistGet ( pb -> seed, i, & name );
+ if ( rc == 0 )
+ {
+ if ( strlen ( name ) == ssize && memcmp ( sname, name, ssize ) == 0 )
+ {
+ VProdResolveSPhysMember ( & pb -> pr, & out, smbr );
+ break;
+ }
+ }
+ }
+ }
}
static
-void VProdResolveWritableColumns ( VProdResolve *self )
+void VProdResolveWritableColumns ( struct resolve_phys_data *pb, bool suspend_triggers )
{
- const STable *dad, *stbl = self -> stbl;
+ const STable *dad, *stbl = pb -> pr . stbl;
/* walk table schema looking for parents */
uint32_t i = VectorStart ( & stbl -> overrides );
@@ -370,40 +422,51 @@ void VProdResolveWritableColumns ( VProdResolve *self )
for ( end += i; i < end; ++ i )
{
dad = STableFindOrdAncestor ( stbl, i );
- VectorForEach ( & dad -> phys, false, resolve_writable_sphys, self );
+ VectorForEach ( & dad -> phys, false, resolve_writable_sphys, pb );
}
/* walk current table */
- VectorForEach ( & stbl -> phys, false, resolve_writable_sphys, self );
+ VectorForEach ( & stbl -> phys, false, resolve_writable_sphys, pb );
/* add triggers */
- self -> chain = chainUncommitted;
- VProdResolveAddTriggers ( self, stbl );
+ if ( !suspend_triggers && pb -> seed == NULL )
+ {
+ pb -> pr . chain = chainUncommitted;
+ VProdResolveAddTriggers ( & pb -> pr, stbl );
+ }
}
-rc_t VCursorListWritableColumns ( VCursor *self, BSTree *columns )
+rc_t VCursorListSeededWritableColumns ( VCursor *self, BSTree *columns, const KNamelist *seed )
{
rc_t rc;
KDlset *libs;
- VProdResolve pb;
- pb . schema = self -> schema;
- pb . ld = self -> tbl -> linker;
- pb . stbl = self -> stbl;
- pb . curs = self;
- pb . cache = & self -> prod;
- pb . owned = & self -> owned;
- pb . chain = chainEncoding;
- pb . blobbing = false;
- pb . ignore_column_errors = true;
- pb . discover_writable_columns = true;
+ struct resolve_phys_data pb;
+ pb . pr . schema = self -> schema;
+ pb . pr . ld = self -> tbl -> linker;
+ pb . pr . stbl = self -> stbl;
+ pb . pr . curs = self;
+ pb . pr . cache = & self -> prod;
+ pb . pr . owned = & self -> owned;
+ pb . pr . chain = chainEncoding;
+ pb . pr . blobbing = false;
+ pb . pr . ignore_column_errors = true;
+ pb . pr . discover_writable_columns = true;
+ pb . seed = seed;
+
+ if ( seed != NULL )
+ {
+ rc = KNamelistCount ( seed, & pb . count );
+ if ( rc != 0 )
+ return rc;
+ }
/* open the dynamic linker libraries */
- rc = VLinkerOpen ( pb . ld, & libs );
+ rc = VLinkerOpen ( pb . pr . ld, & libs );
if ( rc == 0 )
{
- pb . libs = libs;
- VProdResolveWritableColumns ( & pb );
+ pb . pr . libs = libs;
+ VProdResolveWritableColumns ( & pb , self->suspend_triggers );
KDlsetRelease ( libs );
if ( rc == 0 )
@@ -432,6 +495,11 @@ rc_t VCursorListWritableColumns ( VCursor *self, BSTree *columns )
return rc;
}
+rc_t VCursorListWritableColumns ( VCursor *self, BSTree *columns )
+{
+ return VCursorListSeededWritableColumns ( self, columns, NULL );
+}
+
/* SetRowId
* seek to given row id
*
@@ -524,7 +592,7 @@ LIB_EXPORT rc_t CC VCursorCommitRow ( VCursor *self )
rc = 0;
else
{
- self -> permit_post_open_add = false;
+ self -> permit_add_column = self -> permit_post_open_add;
/* tell columns to slam in any default values */
rc = 0;
@@ -553,6 +621,52 @@ LIB_EXPORT rc_t CC VCursorCommitRow ( VCursor *self )
return rc;
}
+/* RepeatRow
+ * repeats the current row by the count provided
+ * row must have been committed
+ *
+ * AVAILABILITY: version 2.6
+ *
+ * "count" [ IN ] - the number of times to repeat
+ * the current row.
+ */
+LIB_EXPORT rc_t CC VCursorRepeatRow ( VCursor *self, uint64_t count )
+{
+ rc_t rc = 0;
+
+ if ( self == NULL )
+ rc = RC ( rcVDB, rcCursor, rcUpdating, rcSelf, rcNull );
+ else if ( self -> read_only )
+ rc = RC ( rcVDB, rcCursor, rcUpdating, rcCursor, rcReadonly );
+ else if ( self -> state == vcFailed )
+ rc = RC ( rcVDB, rcCursor, rcUpdating, rcCursor, rcInvalid );
+ else if ( self -> state < vcRowOpen )
+ rc = RC ( rcVDB, rcCursor, rcUpdating, rcRow, rcNotOpen );
+ else if ( self -> state < vcRowCommitted )
+ rc = RC ( rcVDB, rcCursor, rcUpdating, rcRow, rcInvalid );
+ else if ( count != 0 )
+ {
+ WColumnRepeatRowData pb;
+ pb . end_id = self -> row_id;
+ pb . count = count;
+
+ /* tell columns to commit the row, and allow
+ each to return an earlier cutoff id ( half-closed ) */
+ VectorForEach ( & self -> row, false, WColumnRepeatRow, & pb );
+
+ /* extend the current row-id */
+ if ( self -> end_id < self -> row_id )
+ self -> row_id += count;
+ else
+ {
+ self -> row_id += count;
+ self -> end_id += count;
+ }
+ }
+
+ return rc;
+}
+
/* CloseRow
* balances OpenRow message
* if there are uncommitted modifications,
@@ -584,7 +698,7 @@ LIB_EXPORT rc_t CC VCursorCloseRow ( const VCursor *cself )
/* close off the page if so requested */
if ( self -> state == vcPageCommit )
{
- rc = VCursorFlushPage ( self );
+ rc = VCursorFlushPageInt ( self );
if ( rc )
{
self -> state = vcFailed;
@@ -719,7 +833,7 @@ bool CC run_trigger_prods ( void *item, void *data )
VProduction *prod = item;
VBlob *blob;
- pb -> rc = VProductionReadBlob ( prod, & blob, pb -> id , pb -> cnt);
+ pb -> rc = VProductionReadBlob ( prod, & blob, pb -> id , pb -> cnt, NULL);
if ( pb -> rc != 0 )
return true;
if ( blob != NULL )
@@ -824,7 +938,8 @@ rc_t CC run_flush_thread ( const KThread *t, void *data )
}
#endif
-LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
+static
+rc_t VCursorFlushPageInt ( VCursor *self )
{
rc_t rc;
@@ -862,22 +977,22 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
}
#if VCURSOR_FLUSH_THREAD
- MTCURSOR_DBG (( "VCursorFlushPage: going to acquire lock\n" ));
+ MTCURSOR_DBG (( "VCursorFlushPageInt: going to acquire lock\n" ));
/* get lock */
rc = KLockAcquire ( self -> flush_lock );
if ( rc != 0 )
return rc;
- MTCURSOR_DBG (( "VCursorFlushPage: have lock\n" ));
+ MTCURSOR_DBG (( "VCursorFlushPageInt: have lock\n" ));
/* make sure that background thread is ready */
while ( self -> flush_state == vfBusy )
{
- MTCURSOR_DBG (( "VCursorFlushPage: waiting for background thread\n" ));
+ MTCURSOR_DBG (( "VCursorFlushPageInt: waiting for background thread\n" ));
rc = KConditionWait ( self -> flush_cond, self -> flush_lock );
if ( rc != 0 )
{
- LOGERR ( klogSys, rc, "VCursorFlushPage: wait failed - exiting" );
+ LOGERR ( klogSys, rc, "VCursorFlushPageInt: wait failed - exiting" );
KLockUnlock ( self -> flush_lock );
return rc;
}
@@ -890,23 +1005,23 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
else
{
rc_t rc2;
- MTCURSOR_DBG (( "VCursorFlushPage: waiting on thread to exit\n" ));
+ MTCURSOR_DBG (( "VCursorFlushPageInt: waiting on thread to exit\n" ));
rc = KThreadWait ( self -> flush_thread, & rc2 );
if ( rc == 0 )
{
rc = rc2;
- MTCURSOR_DBG (( "VCursorFlushPage: releasing thread\n" ));
+ MTCURSOR_DBG (( "VCursorFlushPageInt: releasing thread\n" ));
KThreadRelease ( self -> flush_thread );
self -> flush_thread = NULL;
}
}
- LOGERR ( klogInt, rc, "VCursorFlushPage: not in ready state - exiting" );
+ PLOGERR ( klogInt, (klogInt, rc, "VCursorFlushPageInt: not in ready state[$(state)] - exiting","state=%hu",self -> flush_state ));
KLockUnlock ( self -> flush_lock );
return rc;
}
- MTCURSOR_DBG (( "VCursorFlushPage: running buffer page\n" ));
+ MTCURSOR_DBG (( "VCursorFlushPageInt: running buffer page\n" ));
#endif
/* first, tell all columns to bundle up their pages into buffers */
@@ -922,7 +1037,7 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
/* supposed to be constant */
assert ( end_id == self -> end_id );
#if VCURSOR_FLUSH_THREAD
- MTCURSOR_DBG (( "VCursorFlushPage: pages buffered - capturing id and count\n" ));
+ MTCURSOR_DBG (( "VCursorFlushPageInt: pages buffered - capturing id and count\n" ));
self -> flush_id = self -> start_id;
self -> flush_cnt = self -> end_id - self -> start_id;
@@ -930,11 +1045,11 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
self -> end_id = self -> row_id + 1;
self -> state = vcReady;
- MTCURSOR_DBG (( "VCursorFlushPage: state set to busy - signaling bg thread\n" ));
+ MTCURSOR_DBG (( "VCursorFlushPageInt: state set to busy - signaling bg thread\n" ));
self -> flush_state = vfBusy;
rc = KConditionSignal ( self -> flush_cond );
if ( rc != 0 )
- LOGERR ( klogSys, rc, "VCursorFlushPage: condition returned error on signal" );
+ LOGERR ( klogSys, rc, "VCursorFlushPageInt: condition returned error on signal" );
#else
/* run all validation and trigger productions */
pb . id = self -> start_id;
@@ -955,7 +1070,7 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
}
#if VCURSOR_FLUSH_THREAD
- MTCURSOR_DBG (( "VCursorFlushPage: unlocking\n" ));
+ MTCURSOR_DBG (( "VCursorFlushPageInt: unlocking\n" ));
KLockUnlock ( self -> flush_lock );
#endif
}
@@ -964,6 +1079,67 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
return rc;
}
+LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
+{
+ rc_t rc = VCursorFlushPageInt ( self );
+ if ( rc == 0 )
+ {
+#if VCURSOR_FLUSH_THREAD
+ MTCURSOR_DBG (( "VCursorFlushPage: going to acquire lock\n" ));
+ /* get lock */
+ rc = KLockAcquire ( self -> flush_lock );
+ if ( rc != 0 )
+ return rc;
+
+ MTCURSOR_DBG (( "VCursorFlushPage: have lock\n" ));
+
+ /* wait until background thread has finished */
+ while ( self -> flush_state == vfBusy )
+ {
+ MTCURSOR_DBG (( "VCursorFlushPage: waiting for background thread\n" ));
+ rc = KConditionWait ( self -> flush_cond, self -> flush_lock );
+ if ( rc != 0 )
+ {
+ LOGERR ( klogSys, rc, "VCursorFlushPage: wait failed - exiting" );
+ KLockUnlock ( self -> flush_lock );
+ return rc;
+ }
+ }
+
+ /* what was the proper rc */
+ if ( self -> flush_state != vfReady )
+ {
+ if ( self -> flush_state != vfBgErr )
+ rc = RC ( rcVDB, rcCursor, rcFlushing, rcCursor, rcInconsistent );
+ else
+ {
+ rc_t rc2;
+ MTCURSOR_DBG (( "VCursorFlushPage: waiting on thread to exit\n" ));
+ rc = KThreadWait ( self -> flush_thread, & rc2 );
+ if ( rc == 0 )
+ {
+ rc = rc2;
+ MTCURSOR_DBG (( "VCursorFlushPage: releasing thread\n" ));
+ KThreadRelease ( self -> flush_thread );
+ self -> flush_thread = NULL;
+ }
+ }
+
+ PLOGERR ( klogInt, (klogInt, rc, "VCursorFlushPage: not in ready state[$(state)] - exiting",
+ "state=%hu", self -> flush_state ));
+
+ KLockUnlock ( self -> flush_lock );
+ return rc;
+ }
+ KLockUnlock ( self -> flush_lock );
+#endif
+ assert ( self -> row_id == self -> start_id );
+ self -> end_id = self -> row_id;
+ }
+
+ return rc;
+}
+
LIB_EXPORT rc_t CC VCursorCommit ( VCursor *self )
{
rc_t rc = VCursorFlushPage ( self );
diff --git a/libs/vdb/wdbmgr.c b/libs/vdb/wdbmgr.c
index 63e1a5d..f45a53f 100644
--- a/libs/vdb/wdbmgr.c
+++ b/libs/vdb/wdbmgr.c
@@ -47,7 +47,6 @@
#include <stdlib.h>
#include <assert.h>
-#define MLIMIT ( 512 * 1024 * 1024 )
/*--------------------------------------------------------------------------
* VDBManager
@@ -85,14 +84,8 @@ LIB_EXPORT rc_t CC VDBManagerMakeUpdate ( VDBManager **mgrp, KDirectory *wd )
rc = VDBManagerConfigPaths ( mgr, true );
if ( rc == 0 )
{
- const VDBMem *mem;
mgr -> user = NULL;
mgr -> user_whack = NULL;
- DLListInit ( & mgr -> mpool );
- mgr -> plimit = MLIMIT / sizeof mem -> page;
- mgr -> mlimit = MLIMIT / sizeof mem -> page;
- mgr -> pcount = 0;
- mgr -> mcount = 0;
KRefcountInit ( & mgr -> refcount, 1, "VDBManager", "make-update", "vmgr" );
* mgrp = mgr;
return 0;
diff --git a/libs/vdb/wphys.c b/libs/vdb/wphys.c
index a9a180c..e1f2d27 100644
--- a/libs/vdb/wphys.c
+++ b/libs/vdb/wphys.c
@@ -70,6 +70,9 @@
* VPhysical
*/
+static
+rc_t VPhysicalConvertStatic ( VPhysical *self );
+
/* Whack
*/
@@ -78,6 +81,16 @@ void CC VPhysicalWhack ( void *item, void *ignore )
VPhysical *self = item;
if ( self > FAILED_PHYSICAL )
{
+#if PROD_CACHE
+ /* detect close of static column */
+ if ( ! self -> read_only && self -> knode != NULL )
+ {
+ /* if the column is fairly large for metadata */
+ if ( KDataBufferBytes ( & self -> srow ) > 64 * 1024 )
+ /* convert it to a single blob */
+ VPhysicalConvertStatic ( self );
+ }
+#endif
if ( ! self -> read_only )
{
rc_t rc;
@@ -637,55 +650,77 @@ rc_t VPhysicalConvertStatic ( VPhysical *self )
rc_t rc = VPhysicalCreateKColumn ( self );
if ( rc == 0 )
{
- /* put incoming blob cache on stack */
- VBlob *cache [ PROD_CACHE ];
+ int64_t sstart_id, sstop_id;
+
+ /* save incoming blob cache on stack */
+ VBlob *cache [ PROD_CACHE * PROD_CACHE_MAX_EXTENTS ];
assert ( sizeof cache == sizeof self -> in -> cache );
memcpy ( cache, self -> in -> cache, sizeof cache );
/* set incoming blob cache to empty */
memset ( self -> in -> cache, 0, sizeof self -> in -> cache );
- /* recreate a VBlob from static that can be sent through encoding */
- rc = VBlobCreateFromSingleRow ( & self -> in -> cache [ 0 ],
- self -> sstart_id, self -> sstop_id, & self -> srow, vboNative );
- if ( rc == 0 )
+ for ( sstart_id = self -> sstart_id;
+ rc == 0 && sstart_id <= self -> sstop_id;
+ sstart_id = sstop_id + 1 )
{
- /* get an encoded version of static blob */
- VBlob *vblob;
- rc = VProductionReadBlob ( self -> b2s, & vblob, self -> sstart_id, 1 );
+ /* 3G rows */
+ sstop_id = sstart_id + 0xC0000000;
+ assert ( sstop_id > sstart_id );
+
+ /* limit to actual end */
+ if ( sstop_id > self -> sstop_id )
+ sstop_id = self -> sstop_id;
+
+ /* don't create tiny additional blobs */
+ else if ( ( self -> sstop_id - sstop_id ) < 1000 )
+ sstop_id = self -> sstop_id;
+
+ /* recreate a VBlob from static that can be sent through encoding */
+ rc = VBlobCreateFromSingleRow ( & self -> in -> cache [ 0 ],
+ sstart_id, sstop_id, & self -> srow, vboNative );
if ( rc == 0 )
{
- /* write encoded blob to physical */
- rc = VPhysicalWriteKColumn ( self, vblob );
+ /* get an encoded version of static blob */
+ VBlob *vblob;
+ rc = VProductionReadBlob ( self -> b2s, & vblob, sstart_id, 1,NULL );
if ( rc == 0 )
{
- const String *name;
- VCursor *curs = self -> curs;
- VTable *tbl = curs -> tbl;
-
- /* tear down static */
- KMDataNodeRelease ( self -> knode );
- self -> knode = NULL;
+ /* write encoded blob to physical */
+ rc = VPhysicalWriteKColumn ( self, vblob );
- /* delete column from table */
- name = & self -> smbr -> name -> name;
- assert ( tbl -> col_node != NULL );
- rc = KMDataNodeDropChild ( tbl -> col_node,
- "%.*s.tmp", ( int ) name -> size - 1, name -> addr + 1 );
+ /* in all events, release blob */
+ TRACK_BLOB ( VBlobRelease, vblob );
+ ( void ) VBlobRelease ( vblob );
}
-
- TRACK_BLOB ( VBlobRelease, vblob );
- ( void ) VBlobRelease ( vblob );
- }
- /* release the blob from static */
- TRACK_BLOB ( VBlobRelease, self -> in -> cache [ 0 ] );
- ( void ) VBlobRelease ( self -> in -> cache [ 0 ] );
+ /* release the blob from static */
+ TRACK_BLOB ( VBlobRelease, self -> in -> cache [ 0 ] );
+ ( void ) VBlobRelease ( self -> in -> cache [ 0 ] );
+ }
}
/* restore cache from stack */
memcpy ( self -> in -> cache, cache, sizeof self -> in -> cache );
+
+ if ( rc == 0 )
+ {
+ const String *name;
+ VCursor *curs = self -> curs;
+ VTable *tbl = curs -> tbl;
+
+ /* tear down static */
+ KMDataNodeRelease ( self -> knode );
+ self -> knode = NULL;
+
+ /* delete column from table */
+ name = & self -> smbr -> name -> name;
+ assert ( tbl -> col_node != NULL );
+ rc = KMDataNodeDropChild ( tbl -> col_node,
+ "%.*s.tmp", ( int ) name -> size - 1, name -> addr + 1 );
+ }
}
+
return rc;
#endif
}
@@ -762,7 +797,7 @@ rc_t VPhysicalWrite ( VPhysical *self, int64_t id, uint32_t cnt )
{
/* read from page space */
VBlob *vblob;
- rc_t rc = VProductionReadBlob ( self -> in, & vblob, id , cnt);
+ rc_t rc = VProductionReadBlob ( self -> in, & vblob, id , cnt,NULL);
if ( rc == 0 )
{
/* test for single row in blob */
@@ -837,7 +872,7 @@ rc_t VPhysicalWrite ( VPhysical *self, int64_t id, uint32_t cnt )
{
TRACK_BLOB ( VBlobRelease, vblob );
( void ) VBlobRelease ( vblob );
- rc = VProductionReadBlob ( self -> b2s, & vblob, id, cnt );
+ rc = VProductionReadBlob ( self -> b2s, & vblob, id, cnt,NULL );
if ( rc == 0 )
{
/* write encoded blob to physical */
diff --git a/libs/vdb/wprod.c b/libs/vdb/wprod.c
index a1ba4a8..41db5e9 100644
--- a/libs/vdb/wprod.c
+++ b/libs/vdb/wprod.c
@@ -124,7 +124,7 @@ rc_t VProdResolveColumnRoot ( const VProdResolve *self,
/* pick up production */
if ( scol -> validate != NULL )
{
- rc = VSimpleProdMake ( & wcol -> val, self -> owned,
+ rc = VSimpleProdMake ( & wcol -> val, self -> owned, self -> curs,
prodSimpleCast, name, NULL, NULL, NULL, in, chainDecoding );
if ( rc != 0 )
return rc;
@@ -180,9 +180,22 @@ rc_t VProdResolveColumn ( const VProdResolve *self,
if ( rc != 0 )
return rc;
+#if OPEN_COLUMN_ALTERS_ROW
+ rc = VectorAppend ( & curs -> row, & vcol -> ord, vcol );
+ if ( rc != 0 )
+ {
+ VColumnWhack ( vcol, NULL );
+ return rc;
+ }
+#endif
rc = VCursorCacheSet ( & curs -> col, & scol -> cid, vcol );
if ( rc != 0 )
{
+#if OPEN_COLUMN_ALTERS_ROW
+ void *ignore;
+ VectorSwap ( & curs -> row, vcol -> ord, NULL, & ignore );
+ vcol -> ord = 0;
+#endif
VColumnWhack ( vcol, NULL );
return rc;
}
@@ -207,19 +220,19 @@ rc_t VProdResolveColumn ( const VProdResolve *self,
wcol = VCursorCacheGet ( & curs -> col, & scol -> cid );
if ( wcol == NULL )
{
- uint32_t idx;
-
/* normally write-only cursor must have existing column */
if ( ! self -> discover_writable_columns )
return 0;
/* auto-create writable column for purposes of discovery */
+ if ( scol -> read_only )
+ return 0;
rc = VCursorMakeColumn ( curs, & vcol, scol );
if ( rc != 0 )
return rc;
/* add it to the row as if user had done it */
- rc = VectorAppend ( & curs -> row, & idx, vcol );
+ rc = VectorAppend ( & curs -> row, & vcol -> ord, vcol );
if ( rc == 0 )
{
/* add it to the indexed vector */
@@ -227,7 +240,8 @@ rc_t VProdResolveColumn ( const VProdResolve *self,
if ( rc != 0 )
{
void *ignore;
- VectorSwap ( & curs -> row, idx, NULL, & ignore );
+ VectorSwap ( & curs -> row, vcol -> ord, NULL, & ignore );
+ vcol -> ord = 0;
}
}
@@ -331,7 +345,7 @@ rc_t VProdResolvePhysicalWrite ( const VProdResolve *self, VPhysical *phys )
/* build encoding schema in steps:
in <- page-to-blob
*/
- rc = VSimpleProdMake ( & prod, pr . owned,
+ rc = VSimpleProdMake ( & prod, pr . owned, self->curs,
prodSimplePage2Blob, name, & fd, & desc, NULL, phys -> in, chainEncoding );
if ( rc == 0 && enc != NULL )
{
@@ -347,7 +361,7 @@ rc_t VProdResolvePhysicalWrite ( const VProdResolve *self, VPhysical *phys )
}
if ( rc == 0 )
{
- rc = VSimpleProdMake ( & phys -> b2s, pr . owned,
+ rc = VSimpleProdMake ( & phys -> b2s, pr . owned, self->curs,
prodSimpleBlob2Serial, name, & fd, & desc, NULL, prod, chainEncoding );
}
diff --git a/libs/vdb/wtable.c b/libs/vdb/wtable.c
index 23a3243..6a6b2ef 100644
--- a/libs/vdb/wtable.c
+++ b/libs/vdb/wtable.c
@@ -64,9 +64,9 @@
/* StoreSchema
* stores schema definition in metadata
*
- * <schema type="">...</schema>
+ * <schema name="">...</schema>
*/
-rc_t VTableStoreSchema ( VTable *self )
+LIB_EXPORT rc_t VTableStoreSchema ( VTable *self )
{
/* open schema node */
KMDataNode *node;
@@ -82,10 +82,45 @@ rc_t VTableStoreSchema ( VTable *self )
else
{
expr [ num_writ ] = 0;
- rc = KMDataNodeWriteAttr ( node, "name", expr );
- if ( rc != 0 )
- PLOGERR ( klogInt, ( klogInt, rc, "failed to write table type '$(expr)'", "expr=%s", expr ));
- else
+
+ /* if table has a default view declaration,
+ store the table information under a new attribute */
+ if ( self -> stbl -> dflt_view != NULL )
+ {
+ uint32_t type;
+ const SNameOverload *name;
+ const STable *view = VSchemaFind ( self -> schema, & name, & type,
+ self -> stbl -> dflt_view-> addr, __func__, false );
+ if ( view == NULL )
+ {
+ rc = RC ( rcVDB, rcTable, rcUpdating, rcSchema, rcNotFound );
+ PLOGERR ( klogInt, ( klogInt, rc, "failed to locate default view schema '$(expr)'",
+ "expr=%S", self -> stbl -> dflt_view ));
+ }
+ else
+ {
+ rc = KMDataNodeWriteAttr ( node, "table", expr );
+ if ( rc != 0 )
+ PLOGERR ( klogInt, ( klogInt, rc, "failed to write table type '$(expr)'", "expr=%s", expr ));
+ else
+ {
+ rc = VSchemaToText ( self -> schema, expr, sizeof expr - 1, & num_writ,
+ "%N%V", view -> name, view -> version );
+ if ( rc != 0 )
+ LOGERR ( klogInt, rc, "failed to determine table default view schema" );
+ else
+ expr [ num_writ ] = 0;
+ }
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ rc = KMDataNodeWriteAttr ( node, "name", expr );
+ if ( rc != 0 )
+ PLOGERR ( klogInt, ( klogInt, rc, "failed to write table name '$(expr)'", "expr=%s", expr ));
+ }
+ if ( rc == 0 )
{
/* truncate existing schema */
rc = KMDataNodeWrite ( node, "", 0 );
@@ -660,9 +695,11 @@ rc_t list_writable_columns ( VTable *self )
return 0;
}
- rc = VTableCreateCursorWrite ( self, & curs, kcmInsert );
+ rc = VTableCreateCursorWriteInt ( self, & curs, kcmInsert, false );
if ( rc == 0 )
{
+ /* no need for schema-based triggers to fire **/
+ VCursorSuspendTriggers ( curs );
/* let this private VCursor-function list the columns */
rc = VCursorListWritableColumns ( curs, & self -> write_col_cache );
VCursorRelease ( curs );
@@ -697,6 +734,50 @@ LIB_EXPORT rc_t CC VTableListWritableColumns ( VTable *self, KNamelist **names )
return rc;
}
+LIB_EXPORT rc_t CC VTableListSeededWritableColumns ( VTable *self,
+ KNamelist **names, const KNamelist *seed )
+{
+ rc_t rc;
+
+ if ( names == NULL )
+ rc = RC ( rcVDB, rcTable, rcListing, rcParam, rcNull );
+ else
+ {
+ * names = NULL;
+
+ if ( self == NULL )
+ rc = RC ( rcVDB, rcTable, rcListing, rcSelf, rcNull );
+ else if ( seed == NULL )
+ rc = RC ( rcVDB, rcTable, rcListing, rcParam, rcNull );
+ else
+ {
+ BSTree cache;
+ BSTreeInit ( & cache );
+
+ rc = 0;
+
+ if ( ! self -> read_only )
+ {
+ VCursor *curs;
+ rc = VTableCreateCursorWriteInt ( self, & curs, kcmInsert, false );
+ if ( rc == 0 )
+ {
+ /* let this private VCursor-function list the columns */
+ rc = VCursorListSeededWritableColumns ( curs, & cache, seed );
+ VCursorRelease ( curs );
+ }
+ }
+
+ if ( rc == 0 )
+ rc = make_column_namelist ( & cache, names );
+
+ BSTreeWhack ( & cache, VColumnRefWhack, NULL );
+ }
+ }
+
+ return rc;
+}
+
/* ListDatatypes
* returns list of typedecls for named column
@@ -886,3 +967,21 @@ LIB_EXPORT rc_t CC VTableDropColumn(VTable *self, const char fmt[], ...)
va_end(va);
return rc;
}
+
+LIB_EXPORT rc_t CC VTableRenameColumn ( struct VTable *self, bool force,
+ const char *from, const char *to )
+{
+ rc_t rc;
+
+ if ( self == NULL )
+ rc = RC ( rcVDB, rcTable, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ rc = KTableRenameColumn ( self->ktbl, force, from, to );
+ if ( GetRCState(rc) == rcNotFound )
+ rc = KMDataNodeRenameChild( self->col_node, from, to );
+ }
+
+ return rc;
+}
+
diff --git a/libs/vfs/Makefile b/libs/vfs/Makefile
new file mode 100644
index 0000000..390cc48
--- /dev/null
+++ b/libs/vfs/Makefile
@@ -0,0 +1,139 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: all
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/vfs
+
+INT_LIBS = \
+
+EXT_LIBS = \
+ libsrapath \
+ libvfs
+
+ALL_LIBS = \
+ $(INT_LIBS) \
+ $(EXT_LIBS)
+
+TEST_TOOLS = \
+
+include $(TOP)/build/Makefile.env
+
+RWORKDIR=$(TOP)/$(MODULE)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): vers-includes
+ @ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): vers-includes
+ @ $(MAKE_CMD) $(LIBDIR)/$@
+
+$(TEST_TOOLS): makedirs
+ @ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+ $(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+ @ rm -f $(addsuffix *,$(addprefix $(TEST_BINDIR)/,$(TEST_TOOLS)))
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+ $(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
+#-------------------------------------------------------------------------------
+# srapath library
+#
+$(LIBDIR)/libsrapath: $(LIBDIR)/libsrapath.$(LIBX)
+
+SRAPATH_SRC = \
+ srapath-stub \
+ srapath
+
+SRAPATH_OBJ = \
+ $(addsuffix .$(LOBX),$(SRAPATH_SRC))
+
+$(LIBDIR)/libsrapath.$(LIBX): $(SRAPATH_OBJ)
+ $(LD) --slib --vers $(SRCDIR) -o $@ $^
+
+#-------------------------------------------------------------------------------
+# vfs
+#
+$(LIBDIR)/libvfs: $(addprefix $(LIBDIR)/libvfs.,$(LIBEXT))
+
+VFS_SRC = \
+ path \
+ syspath \
+ manager \
+ resolver
+
+VFS_OBJ = \
+ $(addsuffix .$(LOBX),$(VFS_SRC))
+
+VFS_LIB = \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lklib
+
+$(LIBDIR)/libvfs.$(SHLX): $(VFS_OBJ)
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ -ssrapath $(VFS_LIB)
+
+$(LIBDIR)/libvfs.$(LIBX): $(VFS_OBJ)
+ $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(VFS_LIB)
+
+libvfs_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) libvfs $(VFS_OBJ)
+
diff --git a/libs/vfs/libsrapath.vers b/libs/vfs/libsrapath.vers
new file mode 100644
index 0000000..e9bc149
--- /dev/null
+++ b/libs/vfs/libsrapath.vers
@@ -0,0 +1 @@
+1.1.14
diff --git a/libs/vfs/libvfs.vers b/libs/vfs/libvfs.vers
new file mode 100644
index 0000000..59e9e60
--- /dev/null
+++ b/libs/vfs/libvfs.vers
@@ -0,0 +1 @@
+1.0.11
diff --git a/libs/vfs/manager.c b/libs/vfs/manager.c
new file mode 100644
index 0000000..15086c5
--- /dev/null
+++ b/libs/vfs/manager.c
@@ -0,0 +1,3709 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <vfs/extern.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include "path-priv.h"
+
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+#include <krypto/ciphermgr.h>
+#include <kfg/config.h>
+#include <kfg/repository.h>
+
+#include <vfs/resolver.h>
+#include <sra/srapath.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/sra.h>
+#include <kfs/tar.h>
+#include <kfs/dyload.h>
+#include <kfs/kfs-priv.h>
+#include <kfs/nullfile.h>
+#include <kfs/buffile.h>
+#include <kfs/quickmount.h>
+#include <kfs/cacheteefile.h>
+
+#include <kns/curl-file.h>
+#include <kxml/xml.h>
+#include <klib/refcount.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+
+#ifdef _DEBUGGING
+#define MGR_DEBUG(msg) DBGMSG(DBG_VFS,DBG_FLAG(DBG_VFS_MGR), msg)
+#else
+#define MGR_DEBUG(msg)
+#endif
+
+
+#define DEFAULT_CACHE_BLOCKSIZE ( 32768 * 4 )
+#define DEFAULT_CACHE_CLUSTER 1
+
+/*--------------------------------------------------------------------------
+ * VFSManager
+ */
+
+/* currently expected to be a singleton and not use a vtable but
+ * be fully fleashed out here */
+struct VFSManager
+{
+ KRefcount refcount;
+
+ /* the current directory in the eyes of the O/S when created */
+ KDirectory * cwd;
+
+ /* the underlying operating systems view of the path of the
+ * current working directory */
+ VPath * cpath;
+
+
+ /* configuration manager */
+ KConfig * cfg;
+
+ /* krypto's cipher manager */
+ KCipherManager * cipher;
+
+ /* SRAPath will be replaced with a VResolver */
+ struct VResolver * resolver;
+ /* SRAPath */
+ struct SRAPath * srapath;
+
+ /* if not NULL, need to remove from environment and free */
+ char *pw_env;
+};
+
+static const char kfsmanager_classname [] = "VFSManager";
+
+static
+VFSManager * singleton = NULL;
+
+
+/* Destroy
+ * destroy file
+ */
+LIB_EXPORT rc_t CC VFSManagerDestroy ( VFSManager *self )
+{
+ if ( self == NULL )
+ return RC ( rcVFS, rcFile, rcDestroying, rcSelf, rcNull );
+
+ KRefcountWhack (&self->refcount, kfsmanager_classname);
+
+ KDirectoryRelease (self->cwd);
+
+ VPathRelease (self->cpath);
+
+ KConfigRelease (self->cfg);
+
+ KCipherManagerRelease (self->cipher);
+
+ VResolverRelease ( self->resolver );
+
+ SRAPathRelease ( self->srapath );
+
+ if ( self -> pw_env != NULL )
+ {
+ putenv ( "VDB_PWFILE=" );
+ free ( self -> pw_env );
+ }
+
+ free (self);
+
+ singleton = NULL;
+ return 0;
+}
+
+/* AddRef
+ * creates a new reference
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC VFSManagerAddRef ( const VFSManager *self )
+{
+ if (self != NULL)
+ {
+ switch (KRefcountAdd (&self->refcount, kfsmanager_classname))
+ {
+ case krefOkay:
+ break;
+ case krefZero:
+ return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcIncorrect);
+ case krefLimit:
+ return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcExhausted);
+ case krefNegative:
+ return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+ default:
+ return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+ }
+ }
+ return 0;
+}
+
+/* Release
+ * discard reference to file
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC VFSManagerRelease ( const VFSManager *self )
+{
+ rc_t rc = 0;
+ if (self != NULL)
+ {
+ switch (KRefcountDrop (&self->refcount, kfsmanager_classname))
+ {
+ case krefOkay:
+ case krefZero:
+ break;
+ case krefWhack:
+ rc = VFSManagerDestroy ((VFSManager*)self);
+ break;
+ case krefNegative:
+ return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+ default:
+ rc = RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+ break;
+ }
+ }
+ return rc;
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * VFSManagerMakeCurlFile
+ */
+static
+rc_t VFSManagerMakeCurlFile( const VFSManager * self, const KFile **cfp,
+ const char * url, const char * cache_location )
+{
+ rc_t rc = KCurlFileMake ( cfp, url, false );
+ if ( rc == 0 )
+ {
+ const KFile *temp_file;
+ rc_t rc2;
+ if ( cache_location == NULL )
+ {
+ /* there is no cache_location! just wrap the remote file in a buffer */
+ rc2 = KBufFileMakeRead ( & temp_file, * cfp, 128 * 1024 * 1024 );
+ }
+ else
+ {
+ /* we do have a cache_location! wrap the remote file in a cacheteefile */
+ rc2 = KDirectoryMakeCacheTee ( self->cwd, &temp_file, *cfp, NULL,
+ DEFAULT_CACHE_BLOCKSIZE, DEFAULT_CACHE_CLUSTER,
+ false, "%s", cache_location );
+ }
+ if ( rc2 == 0 )
+ {
+ KFileRelease ( * cfp );
+ * cfp = temp_file;
+ }
+ }
+ return rc;
+}
+
+
+
+LIB_EXPORT rc_t CC VFSManagerGetConfigPWFd ( const VFSManager * self,
+ char * b, size_t bz, size_t * pz)
+{
+#if 1
+ rc_t rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcUnsupported);
+#else
+ const KConfigNode * node;
+ size_t oopsy;
+ size_t z;
+ rc_t rc;
+
+ *pz = 0;
+
+/* rc = KConfigOpenNodeRead (self->cfg, &node, KRYPTO_PWFD); */
+ rc = KConfigOpenNodeRead (self->cfg, &node, "krypto/pwfd");
+ if (rc == 0)
+ {
+ rc = KConfigNodeRead (node, 0, b, bz-1, &z, &oopsy);
+ if (rc == 0)
+ {
+ if (oopsy != 0)
+ rc = RC (rcKrypto, rcMgr, rcReading, rcBuffer, rcInsufficient);
+ else
+ {
+ b[z] = '\0';
+ *pz = z;
+ }
+ }
+ KConfigNodeRelease (node);
+ }
+#endif
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetConfigPWFile (const VFSManager * self,
+ char * b, size_t bz, size_t * pz)
+{
+ const char * env;
+ const KConfigNode * node;
+ size_t oopsy;
+ size_t z;
+ rc_t rc;
+
+ if (pz)
+ *pz = 0;
+
+/*#ifdef ENV_KRYPTO_PWFILE */
+/* env = getenv (ENV_KRYPTO_PWFILE); */
+ env = getenv ("VDB_PWFILE");
+
+ if (env)
+ {
+ z = string_copy (b, bz, env, string_size (env));
+
+ /* force a NUL that string_copy might have omitted
+ * even if this truncates the path */
+ b[bz-1] = '\0';
+
+ if (pz)
+ *pz = z;
+
+ return 0;
+ }
+/* #endif */
+
+/* rc = KConfigOpenNodeRead (self->cfg, &node, KFG_KRYPTO_PWFILE); */
+ rc = KConfigOpenNodeRead (self->cfg, &node, "krypto/pwfile");
+ if (rc)
+ {
+ /* if not found, change object from path to encryption key */
+ if (GetRCState(rc) == rcNotFound)
+ rc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcNotFound);
+ }
+ else
+ {
+ rc = KConfigNodeRead (node, 0, b, bz-1, &z, &oopsy);
+ if (rc == 0)
+ {
+ if (oopsy != 0)
+ rc = RC (rcKrypto, rcMgr, rcReading, rcBuffer, rcInsufficient);
+ else
+ {
+ b[z] = '\0';
+ *pz = z;
+ }
+ }
+ KConfigNodeRelease (node);
+ }
+ return rc;
+}
+
+
+/*
+ * This is still hack - must match VFSManagerResolvePathRelativeDir()
+ */
+LIB_EXPORT rc_t CC VFSManagerWGAValidateHack (const VFSManager * self,
+ const KFile * file,
+ const char * path) /* we'll move this to a vpath */
+{
+ VPath * vpath;
+ rc_t rc = 0;
+
+ rc = VPathMake (&vpath, path);
+ if (rc == 0)
+ {
+ size_t z;
+ char obuff [4096 + 2]; /* 1 for over-read and 1 for NUL */
+ const KFile * pwfile;
+ bool is_fd = false;
+ bool have_pwd = false;
+/* char tbuff [4096 + 2]; */
+
+ /* -----
+ * get the path to and open the pwfile
+ *
+ * first check the insecure password on the command line hack
+ * then check the option for pwfile in the VPath
+ * then check the option for pwfd
+ * then check the environment
+ * then check the configuration
+ *
+ * some odd jumping around due to ordering of where
+ * to look
+ */
+ /* obviously not used yet */
+ if (VPathOption (vpath, vpopt_temporary_pw_hack, obuff, sizeof obuff, &z) == 0)
+ {
+ if (z < 1)
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+ else
+ {
+ size_t x = 0;
+ size_t y = 0;
+ int ch, h, l;
+
+ while (x < z)
+ {
+ h = tolower(obuff[x++]);
+ l = tolower(obuff[x++]);
+
+ if (!isxdigit(h) || !isxdigit(l))
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+ if (isdigit(h))
+ ch = (h - '0') << 4;
+ else
+ ch = (h + 10 - 'a') << 4;
+ if (isdigit(l))
+ ch |= (l - '0');
+ else
+ ch |= (l + 10 - 'a');
+
+ /* added for compatibility with other passwords */
+ if ((ch == '\r') || (ch == '\r'))
+ break;
+ obuff[y++] = (char)ch;
+ }
+ obuff[y] = '\0';
+ assert (z == x);
+ assert (z/2 == y);
+ z = y;
+ }
+ }
+ else
+ {
+ /* also not used yet */
+ if (VPathOption (vpath, vpopt_pwpath, obuff,
+ sizeof obuff - 1, &z) == 0)
+ have_pwd = true;
+
+ /* also not used yet */
+ else if (VPathOption (vpath, vpopt_pwfd, obuff,
+ sizeof obuff - 1, &z) == 0)
+ have_pwd = is_fd = true;
+
+ /* This is used */
+ else if (VFSManagerGetConfigPWFile(self, obuff,
+ sizeof obuff-1,
+ &z) == 0)
+ have_pwd = true;
+
+ else
+ rc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcUnknown);
+
+ if (have_pwd)
+ {
+ /* force a NUL terminator that is probably already
+ * there */
+ obuff [z] = '\0';
+
+ /* -----
+ * pwfd is not fully a VPath at this point: we
+ * should obsolete it
+ */
+ if (is_fd)
+ rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+
+ else
+ {
+ VPath * pwp;
+
+ rc = VPathMakeSysPath (&pwp, obuff);
+ if (rc == 0)
+ {
+ rc = VFSManagerOpenFileRead (self, &pwfile, pwp);
+ if (rc)
+ {
+ rc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcNotFound);
+ /* log? */
+ }
+ VPathRelease (pwp);
+ }
+ }
+
+ /* if rc is 0 then we have opened a password file */
+ if (rc == 0)
+ {
+ /* at this point we are only getting the password from a
+ * file but in the future if we can get it from a pipe of
+ * some sort we can't count on the ReadAll to really know
+ * if we hit end of file and not just a pause in the
+ * streaming. VDB 3 / VFS/KFS 2 will have to fix this somehow
+ */
+
+ /* 2 is one for overread and one ful NUL */
+ assert (VFS_KRYPTO_PASSWORD_MAX_SIZE <= sizeof obuff - 2);
+
+ /* read the password into obuff */
+ rc = KFileReadAll (pwfile, 0, obuff, sizeof obuff - 1, &z);
+
+ /* we're done with the password file (or fd) now */
+ KFileRelease (pwfile);
+
+ if (rc == 0)
+ {
+ char * pc;
+
+ /* -----
+ * trim back the contents of the file to
+ * a single ASCII/UTF-8 text line
+ * We actually only check for the two normal
+ * end of line characters so it could have other
+ * control characters...
+ */
+ assert (z < sizeof (obuff));
+
+ obuff[z] = '\0';
+
+ pc = string_chr (obuff, z, '\r');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+ pc = string_chr (obuff, z, '\n');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+
+ if (z == 0)
+ rc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcTooShort);
+
+ else if (VFS_KRYPTO_PASSWORD_MAX_SIZE < z) /* pwz came in as greater than 4096 */
+ rc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcTooLong);
+ }
+ }
+ }
+ }
+ if (rc == 0)
+ {
+ rc = WGAEncValidate (file, obuff, z);
+ }
+ }
+ return rc;
+}
+
+
+
+/* ResolvePath
+ *
+ * take a VPath and resolve to a final form apropriate for KDB
+ *
+ * that is take a relative path and resolve it against the CWD
+ * or take an accession and resolve into the local or remote
+ * VResolver file based on config. It is just a single resolution percall
+ */
+static rc_t VFSManagerResolvePathResolver (const VFSManager * self,
+ uint32_t flags,
+ const VPath * in_path,
+ VPath ** out_path)
+{
+ rc_t rc = 0;
+
+ *out_path = NULL;
+
+ /*
+ * this RC perculates up for ncbi-acc: schemes but not for
+ * no scheme uris
+ */
+ if ((flags & vfsmgr_rflag_no_acc) == vfsmgr_rflag_no_acc)
+ {
+ /* hack */
+ if (in_path->scheme == vpuri_none)
+ rc = SILENT_RC (rcVFS, rcMgr, rcResolving, rcSRA, rcNotAvailable);
+ else
+ rc = RC (rcVFS, rcMgr, rcResolving, rcSRA, rcNotAvailable);
+ }
+ else
+ {
+ bool not_done = true;
+
+ /*
+ * cast because we seem to have the restriction on the output from
+ * VResolver that seems too restrictive
+ */
+ if ((flags & vfsmgr_rflag_no_acc_local) == 0)
+ {
+ rc = VResolverLocal (self->resolver, in_path, (const VPath **)out_path);
+ if (rc == 0)
+ not_done = false;
+ }
+
+ if (not_done && ((flags & vfsmgr_rflag_no_acc_remote) == 0))
+ rc = VResolverRemote (self->resolver, in_path,
+ (const VPath **)out_path, NULL);
+ }
+ return rc;
+}
+
+
+static rc_t VFSManagerResolvePathInt (const VFSManager * self,
+ uint32_t flags,
+ const KDirectory * base_dir,
+ const VPath * in_path,
+ VPath ** out_path)
+{
+ char * pc;
+ rc_t rc;
+
+ assert (self);
+ assert (in_path);
+ assert (out_path);
+
+ switch (in_path->scheme)
+ {
+ default:
+ rc = RC (rcVFS, rcMgr, rcResolving, rcPath, rcInvalid);
+ break;
+
+ case vpuri_not_supported:
+ case vpuri_ncbi_legrefseq:
+ rc = RC (rcVFS, rcMgr, rcResolving, rcPath, rcUnsupported);
+ break;
+
+ case vpuri_ncbi_acc:
+ rc = VFSManagerResolvePathResolver (self, flags, in_path, out_path);
+ break;
+
+ case vpuri_none:
+ /* for KDB purposes, no scheme might be an accession */
+ if (flags & vfsmgr_rflag_kdb_acc)
+ {
+ /* no '/' is permitted in an accession */
+ pc = string_chr (in_path->path.addr, in_path->path.size, '/');
+ if (pc == NULL)
+ {
+ rc = VFSManagerResolvePathResolver (self, flags, in_path, out_path);
+ if (rc == 0)
+ break;
+ }
+ }
+ /* Fall through */
+ case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+ case vpuri_file:
+#endif
+ /* check for relative versus full path : assumes no 'auth' not starting with '/' */
+ if (in_path->path.addr[0] == '/')
+ {
+ rc = VPathAddRef (in_path);
+ if (rc == 0)
+ *out_path = (VPath *)in_path; /* oh these const ptr are annoying */
+ }
+ else
+ {
+ char b [4 * 1024];
+
+ /* not 'properly' handling query, fragment etc. for relative path
+ * assumes path within VPath is ASCIZ
+ *
+ * If KDirectoryResolvePath took our format and not vsnprintf we
+ * could use %S and get the string out of the VPath.
+ */
+ rc = KDirectoryResolvePath (base_dir, true, b, sizeof b,
+ in_path->path.addr);
+ if (rc == 0)
+ {
+ VPath * v;
+ char u [32 * 1024];
+
+ switch (in_path->scheme)
+ {
+ default:
+ rc = RC (rcVFS, rcMgr, rcResolving, rcFunction, rcInvalid);
+ break;
+
+ case vpuri_ncbi_vfs:
+ rc = string_printf (u, sizeof u, NULL, "%s:%s?%s#%s",
+ in_path->storage, b,
+ in_path->query, in_path->fragment);
+ if (rc == 0)
+ rc = VPathMake (&v, u);
+ break;
+
+ case vpuri_none:
+ case vpuri_file:
+ rc = VPathMake (&v, b);
+ break;
+ }
+ if (rc == 0)
+ *out_path = v;
+ }
+ }
+ break;
+
+ /* these are considered fully resolved already */
+ case vpuri_http:
+ case vpuri_ftp:
+ rc = VPathAddRef (in_path);
+ if (rc == 0)
+ *out_path = (VPath*)in_path;
+ break;
+
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerResolvePath (const VFSManager * self,
+ uint32_t flags,
+ const VPath * in_path,
+ VPath ** out_path)
+{
+ if (out_path == NULL)
+ return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+ *out_path = NULL;
+
+ if (self == NULL)
+ return RC (rcVFS, rcMgr, rcResolving, rcSelf, rcNull);
+
+ if (in_path == NULL)
+ return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+ return VFSManagerResolvePathInt (self, flags, self->cwd, in_path, out_path);
+}
+
+LIB_EXPORT rc_t CC VFSManagerResolvePathRelative (const VFSManager * self,
+ uint32_t flags,
+ const struct VPath * base_path,
+ const struct VPath * in_path,
+ struct VPath ** out_path)
+{
+ const KDirectory * dir;
+ rc_t rc;
+
+ if (out_path == NULL)
+ rc = RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+ *out_path = NULL;
+
+ if (self == NULL)
+ return RC (rcVFS, rcMgr, rcResolving, rcSelf, rcNull);
+
+ if (in_path == NULL)
+ return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+ rc = VFSManagerOpenDirectoryRead (self, &dir, base_path);
+ if (rc == 0)
+ rc = VFSManagerResolvePathInt (self, flags, dir, in_path, out_path);
+
+ return rc;
+}
+
+/*
+ * This is still hack - must match VFSManagerGetEncryptionKey()
+ */
+
+LIB_EXPORT rc_t CC VFSManagerResolvePathRelativeDir (const VFSManager * self,
+ uint32_t flags,
+ const KDirectory * base_dir,
+ const VPath * in_path,
+ VPath ** out_path)
+{
+ if (out_path == NULL)
+ return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+ *out_path = NULL;
+
+ if (self == NULL)
+ return RC (rcVFS, rcMgr, rcResolving, rcSelf, rcNull);
+
+ if (in_path == NULL)
+ return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+ return VFSManagerResolvePathInt (self, flags, base_dir, in_path, out_path);
+}
+
+
+/* OpenFileRead
+ * opens an existing file with read-only access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ */
+static
+rc_t VFSManagerOpenFileReadDecryption (const VFSManager *self,
+ const KDirectory * dir,
+ const KFile ** f,
+ const KFile * file,
+ const VPath * path,
+ bool force_decrypt,
+ bool * was_encrypted)
+{
+ rc_t rc = 0;
+ size_t z;
+ char obuff [4096 + 2]; /* 1 for over-read and 1 for NUL */
+ bool has_enc_opt;
+
+ if (was_encrypted)
+ *was_encrypted = false;
+
+ /* -----
+ * at this point we have no fatal errors and we have the
+ * file opened but we have not seen if we have to decrypt
+ * or use other query options
+ */
+ has_enc_opt = (VPathOption (path, vpopt_encrypted, obuff,
+ sizeof obuff, &z) == 0);
+
+ if ((has_enc_opt == false) &&
+ (force_decrypt == false))
+ {
+ /* if we are not told to decrypt, don't and we are done */
+ KFileAddRef (file);
+ *f = file;
+ }
+
+ else /* we are told to decrypt if possible */
+ {
+ rc_t erc = 0;
+ const KFile * pwfile;
+ bool is_fd = false;
+ bool have_pwd = false;
+ char tbuff [4096];
+
+ /* -----
+ * get the path to and open the pwfile
+ *
+ * first check the insecure password on the command line hack
+ * then check the option for pwfile in the VPath
+ * then check the option for pwfd
+ * then check the environment
+ * then check the configuration
+ *
+ * some odd jumping around due to ordering of where
+ * to look
+ */
+ if (VPathOption (path, vpopt_temporary_pw_hack, obuff, sizeof obuff, &z) == 0)
+ {
+ if (z < 1)
+ erc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+ else
+ {
+ size_t x = 0;
+ size_t y = 0;
+ int ch, h, l;
+
+ while (x < z)
+ {
+
+ h = tolower(obuff[x++]);
+ l = tolower(obuff[x++]);
+
+ if (!isxdigit(h) || !isxdigit(l))
+ erc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+ if (isdigit(h))
+ ch = (h - '0') << 4;
+ else
+ ch = (h + 10 - 'a') << 4;
+ if (isdigit(l))
+ ch |= (l - '0');
+ else
+ ch |= (l + 10 - 'a');
+
+ /* added for compatibility with other passwords */
+ if ((ch == '\r') || (ch == '\r'))
+ break;
+
+ obuff[y++] = (char)ch;
+ }
+ obuff[y] = '\0';
+ assert (z == x);
+ assert (z/2 == y);
+ z = y;
+ }
+ }
+ else
+ {
+ if (VPathOption (path, vpopt_pwpath, obuff,
+ sizeof obuff - 1, &z) == 0)
+ have_pwd = true;
+
+ else if (VPathOption (path, vpopt_pwfd, obuff,
+ sizeof obuff - 1, &z) == 0)
+ have_pwd = is_fd = true;
+
+ else if (VFSManagerGetConfigPWFile(self, obuff,
+ sizeof obuff-1,
+ &z) == 0)
+ have_pwd = true;
+
+ else
+ erc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcUnknown);
+
+ if (have_pwd)
+ {
+ /* force a NUL terminator that is probably already
+ * there */
+ obuff [z] = '\0';
+
+ /* -----
+ * pwfd is not fully a VPath at this point: we
+ * should obsolete it
+ */
+ if (is_fd)
+ rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+
+ else
+ {
+ VPath * pwp;
+
+ erc = VPathMakeSysPath (&pwp, obuff);
+ if (erc)
+ ; /* log ? */
+
+ else
+ {
+ erc = VFSManagerOpenFileRead (self, &pwfile, pwp);
+ if (erc)
+ {
+ erc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcNotFound);
+ /* log? */
+ }
+ VPathRelease (pwp);
+ }
+ }
+
+
+ /* if erc is 0 then we have opened a password file */
+ if (erc == 0)
+ {
+ /* at this point we are only getting the password from a
+ * file but in the future if we can get it from a pipe of
+ * some sort we can't count on the ReadAll to really know
+ * if we hit end of file and not just a pause in the
+ * streaming. VDB 3 / VFS/KFS 2 will have to fix this somehow
+ */
+
+ /* 2 is one for overread and one ful NUL */
+ assert (VFS_KRYPTO_PASSWORD_MAX_SIZE <= sizeof obuff - 2);
+
+ /* read the password into obuff */
+ erc = KFileReadAll (pwfile, 0, obuff, sizeof obuff - 1, &z);
+
+ /* we're done with the password file (or fd) now */
+ KFileRelease (pwfile);
+
+ if (erc)
+ ; /* log ? */
+
+ else
+ {
+ char * pc;
+
+ /* -----
+ * trim back the contents of the file to
+ * a single ASCII/UTF-8 text line
+ * We actually only check for the two normal
+ * end of line characters so it could have other
+ * control characters...
+ */
+
+ assert (z < sizeof (obuff));
+
+ obuff[z] = '\0';
+
+ pc = string_chr (obuff, z, '\r');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+ pc = string_chr (obuff, z, '\n');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+
+ if (z == 0)
+ erc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcTooShort);
+
+ else if (VFS_KRYPTO_PASSWORD_MAX_SIZE < z) /* pwz came in as greater than 4096 */
+ erc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcTooLong);
+ }
+ }
+ }
+ }
+
+ /* -----
+ * pre-read 4kb from the 'encrypted file'
+ */
+ rc = KFileRandomAccess (file);
+ if (rc == 0)
+ ;
+ /* most common and easiest option is it has random
+ * access - a no-op here
+ */
+ else if (GetRCState(rc) == rcUnsupported)
+ {
+ const KFile * buffile;
+
+ rc = KBufFileMakeRead (&buffile, file, 32 * 2 * 1024);
+ if (rc)
+ ;
+ else
+ {
+ /* there is an extra reference to file now, but
+ * it gets removed after this function returns
+ */
+ file = buffile;
+ }
+ }
+
+ if (rc == 0)
+ {
+ size_t tz;
+
+ /* we now have a file from which we can pre-read the
+ * possible encrypted format header */
+ rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+ if (rc == 0)
+ {
+ /*
+ * we've successfully read 4KB from the file,
+ * now decide if is actually an encrypted file
+ * format we support
+ */
+ const KFile * encfile;
+
+ /* is this the header of an ecnrypted file? */
+ if (KFileIsEnc (tbuff, tz) == 0)
+ {
+ if (was_encrypted)
+ *was_encrypted = true;
+
+ if (erc)
+ rc = erc;
+
+ else
+ {
+ KKey key;
+
+ /* create the AES Key */
+ rc = KKeyInitRead (&key, kkeyAES128, obuff, z);
+ if (rc)
+ ;
+ else
+ {
+ rc = KEncFileMakeRead (&encfile, file, &key);
+ if (rc)
+ ;
+ else
+ {
+ const KFile * buffile;
+
+ /*
+ * TODO: make the bsize a config item not a hard constant
+ */
+ rc = KBufFileMakeRead (&buffile, encfile,
+ 256 * 1024 * 1024);
+ if (rc == 0)
+ {
+ /* we'll release an extra reference to file
+ * after this function returns
+ */
+ *f = buffile;
+ return 0;
+ }
+ KFileRelease (encfile);
+ }
+ }
+ }
+ }
+ else if (KFileIsWGAEnc (tbuff, tz) == 0)
+ {
+ if (was_encrypted)
+ *was_encrypted = true;
+
+ if (erc)
+ rc = erc;
+
+ else
+ {
+ rc = KFileMakeWGAEncRead (&encfile, file, obuff, z);
+ if (rc)
+ ;
+ else
+ {
+ /* we'll release anextra reference to file
+ * after this function returns
+ */
+ *f = encfile;
+ return 0;
+ }
+ }
+ }
+ else
+ {
+ /* -----
+ * not encrypted in a manner we can decrypt so
+ * give back the raw file (possibly buffered
+ *
+ * since file is released in the caller
+ * we need another reference
+ */
+ KFileAddRef (file);
+ *f = file;
+ return 0;
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+/*
+ * try to open the file as a regular file
+ */
+static
+rc_t VFSManagerOpenFileReadRegularFile (char * pbuff, size_t z,
+ KFile const ** file,
+ const KDirectory * dir)
+{
+ rc_t rc;
+ char rbuff [8192];
+
+ assert ((pbuff) && (pbuff[0]));
+ assert (*file == NULL);
+
+ rc = KDirectoryResolvePath (dir, true, rbuff, sizeof rbuff,
+ pbuff);
+ if (rc)
+ ; /* log? */
+ else
+ {
+ /* validate that the file system agrees the path refers
+ * to a regular file (even if through a link */
+ uint32_t type;
+
+ type = KDirectoryPathType (dir, rbuff);
+ switch (type & ~kptAlias)
+ {
+ case kptNotFound:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile,
+ rcNotFound);
+ break;
+
+ case kptBadPath:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile,
+ rcInvalid);
+ break;
+
+ case kptDir:
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile,
+ rcIncorrect);
+ break;
+
+ default:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcUnknown);
+ break;
+
+ case kptFile:
+ /*
+ * this is the good/successful path: open the file
+ * as a const KFile
+ */
+ rc = KDirectoryOpenFileRead (dir, file, rbuff);
+ break;
+ }
+ }
+
+ return rc;
+}
+
+/*
+ * if successful set *file to a usable KFile * and return 0
+ * if unsuccessful but without error, set *file to NULL and return 0
+ * if an error encountered set *file to NULL and return non-zero.
+ */
+static
+rc_t VFSManagerOpenFileReadSpecial (char * pbuff, size_t z, KFile const ** file)
+{
+ rc_t rc;
+ static const char dev [] = "/dev/";
+ static const char dev_stdin [] = "/dev/stdin";
+ static const char dev_null [] = "/dev/null";
+
+ assert (pbuff);
+ assert (z);
+ assert (file);
+
+ *file = NULL;
+
+ /*
+ * Handle a few special case path names that are pre-opened
+ * 'file descriptors'
+ *
+ * This probably needs to be system specific eventually
+ *
+ * First check for the path being in the 'dev' directory in
+ * posix/unix terms
+ */
+ if (string_cmp (dev, sizeof dev - 1, pbuff, z, sizeof dev - 1) != 0)
+ rc = 0; /* we're done */
+
+ else
+ {
+ if (strcmp (dev_stdin, pbuff) == 0)
+ rc = KFileMakeStdIn (file);
+
+ else if (strcmp (dev_null, pbuff) == 0)
+ rc = KFileMakeNullRead (file);
+
+ else if (strncmp ("/dev/fd/", pbuff, sizeof "/dev/fd/" - 1) == 0)
+ {
+ char * pc;
+ size_t ix;
+
+ pc = pbuff + sizeof "/dev/fd/" - 1;
+
+ for (ix = 0; isdigit (pc[ix]); ++ix)
+ assert (ix <= z);
+
+ if ((ix > 0)&&(pc[ix] == '\0'))
+ {
+ int fd;
+
+ fd = atoi (pc);
+ rc = KFileMakeFDFileRead (file, fd);
+ }
+ }
+ }
+
+ return rc;
+}
+
+static
+rc_t VFSManagerOpenFileReadInt (const VFSManager *self,
+ const KDirectory * dir,
+ KFile const **f,
+ const VPath * path,
+ bool force_decrypt,
+ bool * was_encrypted)
+{
+ /* -----
+ * this is a first pass that only opens files directory referenced from
+ * the ced or have a sysdir root; that is it uses KSysDir and KSysFile
+ * only.
+ */
+ const KFile * file = NULL;
+ size_t num_read;
+ char pbuff [4096];
+ rc_t rc;
+
+ rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+ if (rc)
+ ; /* log? */
+ else
+ {
+ /* -----
+ * try to open path as a special file if requested
+ *
+ * *file will be set or a usable file or to NULL and rc will reflect
+ * any error
+ */
+ rc = VFSManagerOpenFileReadSpecial (pbuff, num_read, &file);
+
+
+ /* -----
+ * If we didn't open the file using the special
+ * logic above for special paths open the file and have no error,
+ * continue
+ */
+ if ((rc == 0) && (file == NULL))
+ rc = VFSManagerOpenFileReadRegularFile (pbuff, num_read,
+ &file, dir);
+
+ /*
+ * we either have an rc to return with or we have an open KFile:
+ * check for possible encryption that we are told to decrypt
+ */
+ if (rc == 0)
+ {
+ rc = VFSManagerOpenFileReadDecryption (self, dir, f, file, path,
+ force_decrypt, was_encrypted);
+ }
+ }
+ /* release file if we are here and it is open */
+ KFileRelease (file);
+ return rc;
+}
+
+
+static
+rc_t VFSManagerOpenFileReadDirectoryRelativeInt (const VFSManager *self,
+ const KDirectory * dir,
+ KFile const **f,
+ const VPath * path,
+ bool force_decrypt,
+ bool * was_encrypted)
+{
+ rc_t rc;
+
+ if (f == NULL)
+ rc = RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+ else
+ {
+ *f = NULL;
+
+ if ((f == NULL) || (path == NULL))
+ rc = RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+ else if (self == NULL)
+ rc = RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+ else
+ {
+
+ rc = VFSManagerOpenFileReadInt (self, dir, f, path, force_decrypt, was_encrypted);
+ }
+ }
+ return rc;
+}
+
+
+/* we will create a KFile from a http or ftp url... */
+static rc_t VFSManagerOpenCurlFile ( const VFSManager *self,
+ KFile const **f,
+ const VPath * path )
+{
+ rc_t rc;
+/* const char * url; */
+ const String * uri = NULL;
+
+ if ( f == NULL )
+ return RC( rcVFS, rcMgr, rcOpening, rcParam, rcNull );
+ *f = NULL;
+ if ( self == NULL )
+ return RC( rcVFS, rcMgr, rcOpening, rcSelf, rcNull );
+ if ( path == NULL )
+ return RC( rcVFS, rcMgr, rcOpening, rcParam, rcNull );
+
+/* url = path->path.addr; */
+ rc = VPathMakeString ( path, &uri );
+ if ( rc == 0 )
+ {
+ if ( self->resolver != NULL )
+ {
+ const VPath * local_cache;
+ /* find cache - vresolver call */
+ rc = VResolverCache ( self->resolver, path, &local_cache, 0 );
+ if ( rc == 0 )
+ /* we did find a place for local cache --> use it! */
+ rc = VFSManagerMakeCurlFile( self, f, uri->addr, local_cache->path.addr );
+ else
+ /* we did NOT find a place for local cache --> we are not caching! */
+ rc = VFSManagerMakeCurlFile( self, f, uri->addr, NULL );
+ }
+ else
+ rc = VFSManagerMakeCurlFile( self, f, uri->addr, NULL );
+ free( ( void * )uri );
+ }
+ return rc;
+}
+
+
+LIB_EXPORT
+rc_t CC VFSManagerOpenFileReadDirectoryRelative (const VFSManager *self,
+ const KDirectory * dir,
+ KFile const **f,
+ const VPath * path)
+{
+ return VFSManagerOpenFileReadDirectoryRelativeInt (self, dir, f, path, false, NULL);
+}
+
+LIB_EXPORT
+rc_t CC VFSManagerOpenFileReadDirectoryRelativeDecrypt (const VFSManager *self,
+ const KDirectory * dir,
+ KFile const **f,
+ const VPath * path,
+ bool force_decrypt)
+{
+ return VFSManagerOpenFileReadDirectoryRelativeInt (self, dir, f, path, true, NULL);
+}
+
+
+static rc_t ResolveVPathByVResolver( struct VResolver * resolver, const VPath ** path )
+{
+ rc_t rc;
+
+ if ( resolver == NULL )
+ rc = RC ( rcVFS, rcFile, rcOpening, rcSRA, rcUnsupported );
+ else
+ {
+ const VPath * tpath;
+ rc = VResolverLocal ( resolver, *path, &tpath );
+ if ( rc == 0 )
+ {
+ VPathRelease ( *path );
+ *path = tpath;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t ResolveVPathBySRAPath( SRAPath * srapath, const VPath ** path )
+{
+ rc_t rc;
+
+ if ( srapath == NULL )
+ rc = RC ( rcVFS, rcFile, rcOpening, rcSRA, rcUnsupported );
+ else
+ {
+ char spath [ 8192 ];
+ rc = SRAPathFind ( srapath, (*path)->path.addr, spath, sizeof spath );
+ if ( rc == 0 )
+ {
+ char npath [ 8192 ];
+ size_t zz;
+
+ if ( (*path)->query && (*path)->query[ 0 ] )
+ rc = string_printf ( npath, sizeof npath, &zz, "ncbi-file:%s?%s",
+ spath, (*path)->query );
+ else
+ rc = string_printf ( npath, sizeof npath, &zz, "ncbi-file:%s",
+ spath );
+ if ( rc == 0 )
+ {
+ VPath * tpath;
+ rc = VPathMake ( &tpath, npath );
+ if ( rc == 0 )
+ {
+ VPathRelease ( *path );
+ *path = tpath;
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenFileRead ( const VFSManager *self,
+ KFile const **f,
+ const VPath * path_ )
+{
+ rc_t rc;
+
+ if ( f == NULL )
+ rc = RC (rcVFS, rcMgr, rcOpen, rcParam, rcNull);
+ else
+ {
+ *f = NULL;
+
+ if (self == NULL )
+ rc = RC ( rcVFS, rcMgr, rcOpen, rcSelf, rcNull );
+ else if ( f == NULL )
+ rc = RC ( rcVFS, rcMgr, rcOpen, rcParam, rcNull );
+ else
+ {
+ rc = VPathAddRef ( path_ );
+ if ( rc == 0 )
+ {
+ const VPath * path = path_;
+
+ switch ( path->scheme )
+ {
+ default:
+ case vpuri_invalid:
+ rc = RC (rcVFS, rcFile, rcOpening, rcPath, rcInvalid);
+ break;
+
+ case vpuri_not_supported:
+ rc = RC (rcVFS, rcFile, rcOpening, rcPath, rcUnsupported);
+ break;
+
+ case vpuri_ncbi_acc:
+ if ( self->resolver != NULL )
+ rc = ResolveVPathByVResolver( self->resolver, &path );
+ else
+ rc = ResolveVPathBySRAPath( self->srapath, &path );
+
+ if ( rc != 0 )
+ break;
+
+ /* !!! fall through !!! */
+
+ case vpuri_none:
+ case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+ case vpuri_file:
+#endif
+ rc = VFSManagerOpenFileReadDirectoryRelativeInt ( self, self->cwd, f, path, false, NULL );
+ break;
+
+ case vpuri_ncbi_legrefseq:
+ rc = RC ( rcVFS, rcFile, rcOpening, rcPath, rcIncorrect );
+ break;
+
+ case vpuri_http:
+ case vpuri_ftp:
+ rc = VFSManagerOpenCurlFile ( self, f, path );
+ break;
+ }
+ VPathRelease (path);
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenFileReadDecrypt (const VFSManager *self,
+ KFile const **f,
+ const VPath * path)
+{
+ return VFSManagerOpenFileReadDirectoryRelativeInt ( self, self->cwd, f, path, true, NULL );
+}
+
+
+static
+rc_t get_config_password (const VFSManager * self, char * b, size_t s, size_t * p)
+{
+ const KFile * pwfile;
+ size_t z;
+ rc_t rc;
+ char obuff [4096 + 16];
+
+ assert (b && s && p);
+
+ rc = VFSManagerGetConfigPWFile(self, obuff, sizeof obuff, &z);
+ if (rc == 0)
+ {
+ VPath * vpath;
+
+ rc = VPathMake (&vpath, obuff);
+ if (rc)
+ ;
+
+ else
+ {
+ rc = VFSManagerOpenFileRead (self, &pwfile, vpath);
+ if (rc)
+ rc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcNotFound);
+
+ else
+ {
+ VPathRelease (vpath);
+
+ /* read the password into obuff */
+ rc = KFileReadAll (pwfile, 0, obuff, sizeof obuff - 1, &z);
+
+ KFileRelease (pwfile);
+
+ if (rc == 0)
+ {
+ char * pc;
+
+ /* -----
+ * trim back the contents of the file to
+ * a single ASCII/UTF-8 text line
+ * We actually only check for the two normal
+ * end of line characters so it could have other
+ * control characters...
+ */
+ obuff[z] = '\0';
+ pc = string_chr (obuff, z, '\r');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+ pc = string_chr (obuff, z, '\n');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+
+ if (z > 4096) /* arbitrary maximum size */
+ rc = RC (rcKrypto, rcEncryptionKey, rcRetrieving, rcEncryptionKey, rcExcessive);
+
+ else if (s < z)
+ rc = RC (rcKrypto, rcEncryptionKey, rcRetrieving, rcBuffer, rcInsufficient);
+
+ else
+ {
+ memcpy (b, obuff, z);
+ if (s>z)
+ b[z] = '\0';
+ *p = z;
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT
+rc_t CC VFSManagerOpenDirectoryUpdateDirectoryRelative (const VFSManager *self,
+ const KDirectory * dir,
+ KDirectory **d,
+ const VPath * path)
+{
+ size_t num_read;
+ char pbuff [4096]; /* path buffer */
+ rc_t rc;
+
+ if ((d == NULL) || (path == NULL))
+ return RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+ *d = NULL;
+
+ if (self == NULL)
+ return RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+ switch ( path->scheme )
+ {
+ case vpuri_http :
+ case vpuri_ftp :
+ return RC( rcVFS, rcMgr, rcOpening, rcParam, rcWrongType );
+
+ default :
+ rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+ if (rc == 0)
+ {
+ char rbuff [4096]; /* resolved path buffer */
+
+ rc = KDirectoryResolvePath (dir, true, rbuff, sizeof rbuff, pbuff);
+ if (rc == 0)
+ {
+ uint32_t type;
+
+ type = KDirectoryPathType (dir, rbuff);
+ switch (type & ~kptAlias)
+ {
+ case kptNotFound:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcNotFound);
+ break;
+
+ case kptFile:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcReadonly);
+ break;
+
+ case kptBadPath:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcInvalid);
+ break;
+
+ case kptDir:
+ rc = KDirectoryOpenDirUpdate ((KDirectory*)dir, d, false, rbuff);
+ return rc;
+
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcIncorrect);
+ break;
+
+ default:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcUnknown);
+ break;
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenDirectoryUpdate (const VFSManager *self,
+ KDirectory **d,
+ const VPath * path)
+{
+ return VFSManagerOpenDirectoryUpdateDirectoryRelative (self, self->cwd, d, path);
+}
+
+
+static
+rc_t TransformFileToDirectory(const KDirectory * dir,
+ const KFile * file,
+ KDirectory const **d,
+ const char *path_str,
+ bool was_encrypted)
+{
+ rc_t rc;
+
+ rc = KFileRandomAccess( file );
+ if (rc)
+ PLOGERR(klogErr,(klogErr, rc, "Can not use files without random access"
+ " as database archives '$(P)'", "P=%s", path_str));
+ else
+ {
+ size_t tz;
+ char tbuff [4096];
+
+ rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+ if ( rc )
+ LOGERR (klogErr, rc, "Error reading the head of an archive to use as a database object");
+ else
+ {
+ /* we only use KAR/SRA or tar files as archives so try to identify
+ * as our KAR/SRA file */
+ if ( KFileIsSRA( tbuff, tz ) == 0 )
+ /* if it was open it as a directory */
+ rc = KDirectoryOpenSraArchiveReadUnbounded_silent_preopened( dir, d, false, file, path_str );
+
+ else
+ {
+ rc = KDirectoryOpenTarArchiveRead_silent_preopened( dir, d, false, file, path_str );
+
+ /*
+ * if RC here we did not have an SRA and did not have
+ * a tar file we could use; assume the problem was decryption
+ * if the file was encrypted
+ */
+ if ( was_encrypted )
+ {
+ rc = RC( rcVFS, rcEncryptionKey, rcOpening, rcEncryption,
+ rcIncorrect );
+ PLOGERR (klogErr, (klogErr, rc, "could not use '$(P)' as an "
+ "archive it was encrypted so the password"
+ " was possibly wrong", "P=%s", path_str));
+ }
+ else
+ PLOGERR (klogInfo, (klogInfo, rc, "could not use '$(P)' as an "
+ "archive not identified as SRA or"
+ " TAR file", "P=%s", path_str));
+ }
+ }
+ }
+ return rc;
+}
+
+/* also handles ftp - if it cant we'll need another function */
+static
+rc_t VFSManagerOpenDirectoryReadHttp (const VFSManager *self,
+ const KDirectory * dir,
+ KDirectory const **d,
+ const VPath * path,
+ bool force_decrypt)
+{
+ rc_t rc;
+
+ {
+ char urlbuffer[ 4096 ];
+ size_t num_writ;
+
+ /*
+ * we have to rebuild the full http-uri again from scheme + path
+ *
+ * This should become a method in the ath class rather than this
+ * quick hack
+ *
+ * NOTE we need to eventually remove encryption related options
+ */
+ rc = string_printf (urlbuffer, sizeof urlbuffer, &num_writ, "%s:%s", path->storage, path->path.addr );
+
+ if (rc)
+ PLOGERR (klogErr, (klogErr, rc, "error with url re-creation "
+ "'$(U)' from '$(P)'","U=%s,P=%S",
+ urlbuffer,&path->path));
+ else
+ {
+ const KFile * file = NULL;
+
+ rc = VFSManagerOpenCurlFile ( self, &file, path );
+/* rc = VFSManagerMakeCurlFile( self, &file, urlbuffer, NULL ); */
+ if ( rc != 0 )
+ PLOGERR ( klogErr, ( klogErr, rc, "error with curl open '$(U)'",
+ "U=%s", urlbuffer ) );
+ else
+ {
+ const char mountpointpath[] = "/";
+ const KDirectory * mountpoint;
+
+ rc = KQuickMountDirMake (self->cwd, &mountpoint, file,
+ mountpointpath, sizeof mountpointpath - 1,
+ path->path.addr, path->path.size);
+ if (rc)
+ PLOGERR (klogErr, (klogErr, rc, "error creating mount "
+ "'$(M)' for '$(F)", "M=%s,F=%S",
+ mountpointpath, &path->path));
+ else
+ {
+ const KFile * f;
+ bool was_encrypted = false;
+
+ rc = VFSManagerOpenFileReadDecryption (self, mountpoint, &f,
+ file, path,
+ force_decrypt,
+ &was_encrypted);
+ if (rc == 0)
+ {
+
+ rc = TransformFileToDirectory (mountpoint, f, d,
+ path->path.addr,
+ was_encrypted);
+ /* hacking in the fragment bit */
+ if ((rc == 0) && (path->fragment != NULL) && (path->fragment[0] != '\0'))
+ {
+ const KDirectory * tempd;
+
+ tempd = *d;
+
+ rc = KDirectoryOpenDirRead (tempd, d, false, path->fragment);
+
+ KDirectoryRelease (tempd);
+ }
+ KFileRelease (f);
+ }
+ KDirectoryRelease (mountpoint);
+ }
+ KFileRelease (file);
+ }
+ }
+ }
+ return rc;
+}
+
+
+static
+rc_t VFSManagerOpenDirectoryReadKfs (const VFSManager *self,
+ const KDirectory * dir,
+ KDirectory const **d,
+ const VPath * path,
+ bool force_decrypt)
+{
+ const KFile * file;
+ size_t num_read;
+ char pbuff [4096]; /* path buffer */
+ rc_t rc;
+
+ assert (self);
+ assert (dir);
+ assert (d);
+ assert (path);
+ assert ((force_decrypt == false) || (force_decrypt == true));
+ assert (*d == NULL);
+
+ file = NULL;
+
+ rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+ if ( rc == 0 )
+ {
+ char rbuff[ 4096 ]; /* resolved path buffer */
+ rc = KDirectoryResolvePath( dir, true, rbuff, sizeof rbuff, pbuff );
+ if ( rc == 0 )
+ {
+ uint32_t type;
+ bool was_encrypted;
+
+ type = KDirectoryPathType( dir, rbuff );
+ switch (type & ~kptAlias)
+ {
+ case kptNotFound:
+ rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcNotFound );
+ break;
+
+ case kptFile:
+ rc = VFSManagerOpenFileReadDirectoryRelativeInt (self, dir,
+ &file, path,
+ force_decrypt,
+ &was_encrypted);
+ if (rc == 0)
+ rc = TransformFileToDirectory (dir, file, d, rbuff,
+ was_encrypted);
+ break;
+
+ case kptBadPath:
+ rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcInvalid );
+ break;
+
+ case kptDir:
+ rc = KDirectoryOpenDirRead( dir, d, false, rbuff );
+ return rc;
+
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcIncorrect );
+ break;
+
+ default:
+ rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcUnknown );
+ break;
+ }
+
+ /* hacking in the fragment bit */
+ if ((rc == 0) && (path->fragment != NULL) && (path->fragment[0] != '\0'))
+ {
+ const KDirectory * tempd;
+
+ tempd = *d;
+
+ rc = KDirectoryOpenDirRead (tempd, d, false, path->fragment);
+
+ KDirectoryRelease (tempd);
+ }
+
+
+ }
+ }
+
+ KFileRelease(file);
+
+ return rc;
+}
+
+
+static
+rc_t VFSManagerOpenDirectoryReadLegrefseq (const VFSManager *self,
+ const KDirectory * dir,
+ KDirectory const **d,
+ const VPath * path,
+ bool force_decrypt)
+{
+ const KFile * file;
+ const KDirectory * dd;
+ size_t num_read;
+ char pbuff [4096]; /* path buffer */
+ rc_t rc;
+
+ assert (self);
+ assert (dir);
+ assert (d);
+ assert (path);
+ assert ((force_decrypt == false) || (force_decrypt == true));
+ assert (*d == NULL);
+
+ file = NULL;
+ dd = NULL;
+
+ /* hier part only */
+ rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+ if ( rc == 0 )
+ {
+ char rbuff[ 4096 ]; /* resolved path buffer */
+ rc = KDirectoryResolvePath( dir, true, rbuff, sizeof rbuff, pbuff );
+ if ( rc == 0 )
+ {
+ uint32_t type;
+ bool was_encrypted;
+
+ type = KDirectoryPathType( dir, rbuff );
+ switch (type & ~kptAlias)
+ {
+ case kptNotFound:
+ rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcNotFound );
+ break;
+
+ case kptFile:
+ rc = VFSManagerOpenFileReadDirectoryRelativeInt (self, dir,
+ &file, path,
+ force_decrypt,
+ &was_encrypted);
+ if (rc == 0)
+ rc = TransformFileToDirectory (dir, file, &dd, rbuff,
+ was_encrypted);
+ break;
+
+ case kptBadPath:
+ rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcInvalid );
+ break;
+
+ case kptDir:
+ rc = KDirectoryOpenDirRead( dir, &dd, false, rbuff );
+ break;
+
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcIncorrect );
+ break;
+
+ default:
+ rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcUnknown );
+ break;
+ }
+
+ if (rc == 0)
+ {
+ rc = KDirectoryOpenDirRead (dd, d, false, path->fragment);
+
+ KDirectoryRelease (dd);
+ }
+ }
+ }
+ return rc;
+}
+
+
+static
+rc_t VFSManagerOpenDirectoryReadDirectoryRelativeInt (const VFSManager *self,
+ const KDirectory * dir,
+ KDirectory const **d,
+ const VPath * path_,
+ bool force_decrypt)
+{
+ rc_t rc;
+ do
+ {
+ if (d == NULL)
+ {
+ rc = RC (rcVFS, rcDirectory, rcOpening, rcParam, rcNull);
+ break;
+ }
+
+ *d = NULL;
+
+ if (self == NULL)
+ {
+ rc = RC (rcVFS, rcDirectory, rcOpening, rcSelf, rcNull);
+ break;
+ }
+
+ if ((dir == NULL) || (path_ == NULL))
+ {
+ rc = RC (rcVFS, rcDirectory, rcOpening, rcParam, rcNull);
+ break;
+ }
+
+ if ((force_decrypt != false) && (force_decrypt != true))
+ {
+ rc = RC (rcVFS, rcDirectory, rcOpening, rcParam, rcInvalid);
+ break;
+ }
+
+ rc = VPathAddRef (path_);
+ if ( rc )
+ break;
+ else
+ {
+ const VPath *path = path_;
+
+ switch ( path->scheme )
+ {
+ default:
+ case vpuri_invalid:
+ rc = RC (rcVFS, rcDirectory, rcOpening, rcPath, rcInvalid);
+ break;
+
+
+ case vpuri_not_supported:
+ rc = RC (rcVFS, rcDirectory, rcOpening, rcPath, rcUnsupported);
+ break;
+
+ case vpuri_ncbi_acc:
+ if ( self->resolver != NULL )
+ rc = ResolveVPathByVResolver( self->resolver, &path );
+ else
+ rc = ResolveVPathBySRAPath( self->srapath, &path );
+ if ( rc != 0 )
+ break;
+
+ /* !!! fall through !!! */
+
+ case vpuri_none:
+ case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+ case vpuri_file:
+#endif
+ rc = VFSManagerOpenDirectoryReadKfs ( self, dir, d, path, force_decrypt );
+ break;
+
+ case vpuri_ncbi_legrefseq:
+ rc = VFSManagerOpenDirectoryReadLegrefseq ( self, dir, d, path, force_decrypt );
+ break;
+
+ case vpuri_http:
+ case vpuri_ftp:
+ rc = VFSManagerOpenDirectoryReadHttp ( self, dir, d, path, force_decrypt );
+ break;
+ }
+ VPathRelease ( path ); /* same as path_ if not uri */
+ }
+ } while (0);
+ return rc;
+}
+
+
+LIB_EXPORT
+rc_t CC VFSManagerOpenDirectoryReadDirectoryRelative (const VFSManager *self,
+ const KDirectory * dir,
+ KDirectory const **d,
+ const VPath * path)
+{
+ return VFSManagerOpenDirectoryReadDirectoryRelativeInt (self, dir, d, path, false);
+}
+
+
+LIB_EXPORT
+rc_t CC VFSManagerOpenDirectoryReadDirectoryRelativeDecrypt (const VFSManager *self,
+ const KDirectory * dir,
+ KDirectory const **d,
+ const VPath * path)
+{
+ return VFSManagerOpenDirectoryReadDirectoryRelativeInt (self, dir, d, path, true);
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenDirectoryReadDecrypt (const VFSManager *self,
+ KDirectory const **d,
+ const VPath * path)
+{
+ return VFSManagerOpenDirectoryReadDirectoryRelativeInt (self, self->cwd, d, path, true);
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenDirectoryRead (const VFSManager *self,
+ KDirectory const **d,
+ const VPath * path)
+{
+ return VFSManagerOpenDirectoryReadDirectoryRelativeInt (self, self->cwd, d, path, false);
+}
+
+
+/* OpenFileWrite
+ * opens an existing file with write access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "update" [ IN ] - if true, open in read/write mode
+ * otherwise, open in write-only mode
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target file
+ */
+LIB_EXPORT rc_t CC VFSManagerOpenFileWrite (const VFSManager *self,
+ KFile **f, bool update,
+ const VPath * path )
+{
+ /* -----
+ * this is a first pass that only opens files directory referenced from
+ * the ced or have a sysdir root; that is it uses KSysDir and KSysFile
+ * only.
+ */
+ KFile * file = NULL;
+ size_t num_read;
+ char pbuff [4096];
+ rc_t rc;
+
+ if ((f == NULL) || (path == NULL))
+ return RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+ *f = NULL;
+
+ if (self == NULL)
+ return RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+ rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+ if (rc == 0)
+ {
+ /* handle a few special case path names
+ * This probably needs to be system specifica eventually
+ */
+ if (strncmp ("/dev/", pbuff, sizeof "/dev/" - 1) == 0)
+ {
+
+ if (strcmp ("/dev/stdout", pbuff) == 0)
+ rc = KFileMakeStdOut (&file);
+ else if (strcmp ("/dev/stderr", pbuff) == 0)
+ rc = KFileMakeStdErr (&file);
+ else if (strcmp ("/dev/null", pbuff) == 0)
+ rc = KFileMakeNullUpdate (&file);
+ else if (strncmp ("/dev/fd/", pbuff, sizeof "/dev/fd/" - 1) == 0)
+ {
+ char * pc;
+ size_t ix;
+
+ pc = pbuff + sizeof "/dev/fd/" - 1;
+
+ for (ix = 0; isdigit (pc[ix]); ++ix)
+ ;
+
+ if ((ix > 0)&&(pc[ix] == '\0'))
+ {
+ int fd = atoi (pc);
+
+ rc = KFileMakeFDFileWrite (&file, update, fd);
+ }
+ }
+ }
+ if ((rc == 0)&&(file == NULL))
+ {
+ char rbuff [4096];
+
+ rc = KDirectoryResolvePath (self->cwd, true, rbuff, sizeof rbuff, pbuff);
+ if (rc == 0)
+ {
+ uint32_t type;
+
+ type = KDirectoryPathType (self->cwd, rbuff);
+ switch (type & ~kptAlias)
+ {
+ case kptNotFound:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcNotFound);
+ break;
+
+ case kptFile:
+ rc = KDirectoryOpenFileWrite (self->cwd, f, update, rbuff);
+ break;
+
+ case kptBadPath:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcInvalid);
+ break;
+ case kptDir:
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcIncorrect);
+ break;
+
+ default:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcUnknown);
+ break;
+ }
+ }
+ }
+ }
+ if (rc == 0)
+ {
+ size_t z;
+ char obuff [4096+1];
+
+ if (VPathOption (path, vpopt_encrypted, obuff, sizeof obuff, &z) == 0)
+ {
+ const KFile * pwfile;
+
+ if (VPathOption (path, vpopt_temporary_pw_hack, obuff, sizeof obuff, &z) == 0)
+ {
+ if (z < 1)
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+ else
+ {
+ size_t x = 0;
+ size_t y = 0;
+
+ while (x < z)
+ {
+ int ch, h, l;
+
+ h = tolower(obuff[x++]);
+ l = tolower(obuff[x++]);
+
+ if (!isxdigit(h) || !isxdigit(l))
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+ if (!isxdigit(h) || !isxdigit(l))
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+ if (isdigit(h))
+ ch = (h - '0') << 4;
+ else
+ ch = (h + 10 - 'a') << 4;
+ if (isdigit(l))
+ ch |= (l - '0');
+ else
+ ch |= (l + 10 - 'a');
+
+ obuff[y++] = ch;
+ }
+ obuff[y] = '\0';
+ assert (z == x);
+ assert (z/2 == y);
+ z = y;
+ }
+ if (rc == 0)
+ goto have_password;
+ }
+ else if (VPathOption (path, vpopt_pwpath, obuff, sizeof obuff, &z) == 0)
+ rc = KDirectoryOpenFileRead (self->cwd, &pwfile, obuff);
+
+ else if (VPathOption (path, vpopt_pwfd, obuff, sizeof obuff, &z) == 0)
+ rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+
+ else if ((rc = VFSManagerGetConfigPWFile(self, obuff, sizeof obuff, &z)) == 0)
+ rc = KDirectoryOpenFileRead (self->cwd, &pwfile, obuff);
+
+ else
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcUnsupported);
+
+ if (rc == 0)
+ {
+ rc = KFileReadAll (pwfile, 0, obuff, sizeof obuff - 1, &z);
+
+ KFileRelease (pwfile);
+
+ have_password:
+
+ if (rc == 0)
+ {
+ KKey key;
+ KFile * encfile;
+ char * pc;
+
+ obuff[z] = '\0';
+ pc = string_chr (obuff, z, '\r');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+ pc = string_chr (obuff, z, '\n');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+
+ rc = KKeyInitUpdate (&key, kkeyAES128, obuff, z);
+ if (rc == 0)
+ {
+ rc = KEncFileMakeWrite (&encfile, file, &key);
+ if (rc == 0)
+ {
+ *f = encfile;
+ return 0;
+ }
+ }
+ }
+ }
+ if (rc)
+ KFileRelease (file);
+ }
+ else
+ {
+ *f = file;
+ return 0;
+ }
+ }
+ return rc;
+}
+
+
+/* CreateFile
+ * opens a file with write access
+ *
+ * "f" [ OUT ] - return parameter for newly opened file
+ *
+ * "update" [ IN ] - if true, open in read/write mode
+ * otherwise, open in write-only mode
+ *
+ * "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ * "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ * "path" [ IN ] VPath representing the path, URL or URN of the desired file
+ */
+LIB_EXPORT rc_t CC VFSManagerCreateFile ( const VFSManager *self, KFile **f,
+ bool update, uint32_t access, KCreateMode mode, const VPath * path )
+{
+ /* -----
+ * this is a first pass that only opens files directory referenced from
+ * the ced or have a sysdir root; that is it uses KSysDir and KSysFile
+ * only.
+ */
+ KFile * file = NULL;
+ size_t num_read;
+ rc_t rc;
+ bool file_created = false;
+ char pbuff [4096];
+ char rbuff [4096];
+
+ if ((f == NULL) || (path == NULL))
+ return RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+ *f = NULL;
+
+ if (self == NULL)
+ return RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+ rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+ if (rc == 0)
+ {
+
+ /* handle a few special case path names
+ * This probably needs to be system specifica eventually
+ */
+ if (strncmp ("/dev/", pbuff, sizeof "/dev/" - 1) == 0)
+ {
+
+ if (strcmp ("/dev/stdout", pbuff) == 0)
+ rc = KFileMakeStdOut (&file);
+ else if (strcmp ("/dev/stderr", pbuff) == 0)
+ rc = KFileMakeStdErr (&file);
+ else if (strcmp ("/dev/null", pbuff) == 0)
+ rc = KFileMakeNullUpdate (&file);
+ else if (strncmp ("/dev/fd/", pbuff, sizeof "/dev/fd/" - 1) == 0)
+ {
+ char * pc;
+ size_t ix;
+
+ pc = pbuff + sizeof "/dev/fd/" - 1;
+
+ for (ix = 0; isdigit (pc[ix]); ++ix)
+ ;
+
+ if ((ix > 0)&&(pc[ix] == '\0'))
+ {
+ int fd = atoi (pc);
+
+ rc = KFileMakeFDFileWrite (&file, update, fd);
+ }
+ }
+ }
+ if ((rc == 0)&&(file == NULL))
+ {
+ rc = KDirectoryResolvePath (self->cwd, true, rbuff, sizeof rbuff, pbuff);
+ if (rc == 0)
+ {
+ uint32_t type;
+
+ type = KDirectoryPathType (self->cwd, rbuff);
+ switch (type & ~kptAlias)
+ {
+ case kptNotFound:
+ case kptFile:
+ rc = KDirectoryCreateFile (self->cwd, &file, update, access, mode,
+ rbuff);
+ if (rc == 0)
+ file_created = true;
+ break;
+
+ case kptBadPath:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcInvalid);
+ break;
+ case kptDir:
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcIncorrect);
+ break;
+
+ default:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcUnknown);
+ break;
+ }
+ }
+ }
+ }
+ if (rc == 0)
+ {
+ size_t z;
+ char obuff [4096];
+
+ if (VPathOption (path, vpopt_encrypted, obuff, sizeof obuff, &z) == 0)
+ {
+ const KFile * pwfile;
+
+ if (VPathOption (path, vpopt_temporary_pw_hack, obuff, sizeof obuff, &z) == 0)
+ {
+ if (z < 1)
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+ else
+ {
+ size_t x = 0;
+ size_t y = 0;
+
+ while (x < z)
+ {
+ int ch, h, l;
+
+ h = tolower(obuff[x++]);
+ l = tolower(obuff[x++]);
+
+ if (!isxdigit(h) || !isxdigit(l))
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+ if (!isxdigit(h) || !isxdigit(l))
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+ if (isdigit(h))
+ ch = (h - '0') << 4;
+ else
+ ch = (h + 10 - 'a') << 4;
+ if (isdigit(l))
+ ch |= (l - '0');
+ else
+ ch |= (l + 10 - 'a');
+
+ obuff[y++] = ch;
+ }
+ obuff[y] = '\0';
+ assert (z == x);
+ assert (z/2 == y);
+ z = y;
+ }
+ if (rc == 0)
+ goto have_password;
+ }
+
+ else if (VPathOption (path, vpopt_pwpath, obuff, sizeof obuff, &z) == 0)
+ rc = KDirectoryOpenFileRead (self->cwd, &pwfile, obuff);
+
+ else if (VPathOption (path, vpopt_pwfd, obuff, sizeof obuff, &z) == 0)
+ rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+ else
+ rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcUnsupported);
+
+ if (rc == 0)
+ {
+ rc = KFileRead (pwfile, 0, obuff, sizeof obuff, &z);
+
+ KFileRelease (pwfile);
+
+ have_password:
+
+ if (rc == 0)
+ {
+ KKey key;
+ KFile * encfile;
+ char * pc;
+
+ pc = string_chr (obuff, z, '\r');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+ pc = string_chr (obuff, z, '\n');
+ if (pc)
+ {
+ *pc = '\0';
+ z = pc - obuff;
+ }
+
+ rc = KKeyInitUpdate (&key, kkeyAES128, obuff, z);
+
+ obuff[z] = '\0';
+
+ rc = KEncFileMakeWrite (&encfile, file, &key);
+ if (rc == 0)
+ {
+ *f = encfile;
+ return 0;
+ }
+ }
+ }
+ if (rc)
+ KFileRelease (file);
+ }
+ else
+ {
+ *f = file;
+ return 0;
+ }
+ }
+ if (rc && file_created)
+ KDirectoryRemove (self->cwd, true, rbuff);
+ return rc;
+}
+
+
+/* Remove
+ * remove an accessible object from its directory
+ *
+ * "force" [ IN ] - if true and target is a directory,
+ * remove recursively
+ *
+ * "path" [ IN ] - NUL terminated string in directory-native
+ * character set denoting target object
+ */
+LIB_EXPORT rc_t CC VFSManagerRemove ( const VFSManager *self, bool force,
+ const VPath * path )
+{
+ /* -----
+ * this is a first pass that only opens files directory referenced from
+ * the ced or have a sysdir root; that is it uses KSysDir and KSysFile
+ * only.
+ */
+ size_t num_read;
+ char pbuff [4096];
+ rc_t rc;
+
+ if (path == NULL)
+ return RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+ if (self == NULL)
+ return RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+ rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+ if (rc == 0)
+ {
+ char rbuff [4096];
+
+ rc = KDirectoryResolvePath (self->cwd, true, rbuff, sizeof rbuff, pbuff);
+ if (rc == 0)
+ {
+ uint32_t type;
+
+ type = KDirectoryPathType (self->cwd, rbuff);
+ switch (type & ~kptAlias)
+ {
+ case kptNotFound:
+ break;
+
+ case kptFile:
+ case kptDir:
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ rc = KDirectoryRemove (self->cwd, force, rbuff);
+ break;
+
+ case kptBadPath:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcInvalid);
+ break;
+/* rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcIncorrect); */
+/* break; */
+
+ default:
+ rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcUnknown);
+ break;
+ }
+ }
+ }
+ return rc;
+}
+
+static
+rc_t VFSManagerCaptureCurrentEncryptionKey ( VFSManager * self )
+{
+ rc_t rc = 0;
+
+ /* kludge time - for today, we check to see if there is
+ already a path to an encryption-key file. should not
+ be, but we never know. if present, it continues to
+ override everything else. if not present, we can use
+ the current behavior to set it to have a path to the
+ current file if there. */
+ const char * env = getenv ( "VDB_PWFILE" );
+ if ( env == NULL || env [ 0 ] == 0 )
+ {
+ const KRepositoryMgr *rmgr;
+ rc = KConfigMakeRepositoryMgrRead ( self -> cfg, & rmgr );
+ if ( rc != 0 )
+ rc = 0;
+ else
+ {
+ const KRepository *protected;
+ rc = KRepositoryMgrCurrentProtectedRepository ( rmgr, & protected );
+ if ( rc != 0 )
+ rc = 0;
+ else
+ {
+ char path [ 4096 + 16 ];
+ const size_t env_key_size = sizeof "VDB_PWFILE=" - 1;
+ memcpy ( path, "VDB_PWFILE=", env_key_size );
+ rc = KRepositoryEncryptionKeyFile ( protected, & path [ env_key_size ], sizeof path - env_key_size, NULL );
+ if ( rc == 0 && path [ env_key_size ] != 0 )
+ {
+ size_t env_size = string_size ( path );
+ self -> pw_env = malloc ( env_size + 1 );
+ if ( self -> pw_env == NULL )
+ rc = RC ( rcVFS, rcMgr, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ int status;
+ memcpy ( self -> pw_env, path, env_size + 1 );
+ status = putenv ( self -> pw_env );
+ if ( status != 0 )
+ {
+ rc = RC ( rcVFS, rcMgr, rcConstructing, rcPath, rcCorrupt );
+ free ( self -> pw_env );
+ self -> pw_env = NULL;
+ }
+ }
+ }
+
+ KRepositoryRelease ( protected );
+ }
+
+ KRepositoryMgrRelease ( rmgr );
+ }
+ }
+
+ return rc;
+}
+
+
+/* Make
+ */
+LIB_EXPORT rc_t CC VFSManagerMake ( VFSManager ** pmanager )
+{
+ rc_t rc;
+
+ if (pmanager == NULL)
+ return RC (rcVFS, rcMgr, rcConstructing, rcParam, rcNull);
+
+ *pmanager = singleton;
+ if (singleton != NULL)
+ {
+ rc = VFSManagerAddRef ( singleton );
+ if ( rc != 0 )
+ *pmanager = NULL;
+ }
+ else
+ {
+ VFSManager * obj;
+
+ obj = calloc (1, sizeof (*obj));
+ if (obj == NULL)
+ rc = RC (rcVFS, rcMgr, rcConstructing, rcMemory, rcExhausted);
+ else
+ {
+ KRefcountInit (&obj->refcount, 1, kfsmanager_classname, "init",
+ kfsmanager_classname);
+
+ rc = KDirectoryNativeDir (&obj->cwd);
+ if (rc == 0)
+ {
+ rc = VPathMakeCurrentPath (&obj->cpath);
+ if ( rc == 0 )
+ {
+ rc = KConfigMake (&obj->cfg, NULL);
+ if ( rc == 0 )
+ {
+ rc = VFSManagerCaptureCurrentEncryptionKey ( obj );
+ if ( rc == 0 )
+ {
+ rc = KCipherManagerMake (&obj->cipher);
+ if ( rc == 0 )
+ {
+
+ rc = VFSManagerMakeResolver ( obj, &obj->resolver, obj->cfg );
+ if ( rc != 0 )
+ {
+ LOGERR ( klogWarn, rc, "could not build vfs-resolver" );
+ rc = 0;
+ }
+
+ rc = SRAPathMake ( &obj->srapath, obj->cwd );
+ if ( rc != 0 )
+ {
+ LOGERR ( klogWarn, rc, "could not build srapath manager" );
+ rc = 0;
+ }
+
+ *pmanager = singleton = obj;
+ return rc;
+ }
+ }
+ }
+ }
+ }
+ }
+ VFSManagerDestroy (obj);
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetCWD (const VFSManager * self, KDirectory ** cwd)
+{
+ rc_t rc;
+
+ if (cwd == NULL)
+ return RC (rcVFS, rcMgr, rcAccessing, rcParam, rcNull);
+
+ *cwd = NULL;
+
+ if (self == NULL)
+ return RC (rcVFS, rcMgr, rcAccessing, rcSelf, rcNull);
+
+ rc = KDirectoryAddRef ( self->cwd );
+ if (rc)
+ return rc;
+
+ *cwd = self->cwd;
+
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetSRAPath ( const VFSManager * self, struct SRAPath ** pmgr )
+{
+ if ( pmgr == NULL )
+ return RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcNull );
+
+ *pmgr = NULL;
+
+ if ( self == NULL )
+ return RC ( rcVFS, rcMgr, rcAccessing, rcSelf, rcNull );
+
+ if ( self->srapath )
+ {
+ rc_t rc = SRAPathAddRef ( self->srapath );
+ if ( rc != 0 )
+ return rc;
+ }
+ *pmgr = self->srapath;
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetResolver ( const VFSManager * self, struct VResolver ** resolver )
+{
+ if ( resolver == NULL )
+ return RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcNull );
+
+ *resolver = NULL;
+
+ if ( self == NULL )
+ return RC ( rcVFS, rcMgr, rcAccessing, rcSelf, rcNull );
+
+ if ( self->resolver )
+ {
+ rc_t rc = VResolverAddRef ( self->resolver );
+ if ( rc != 0 )
+ return rc;
+ }
+ *resolver = self->resolver;
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetKryptoPassword (const VFSManager * self,
+ char * password,
+ size_t max_size,
+ size_t * size)
+{
+ rc_t rc;
+
+ if (self == NULL)
+ rc = RC (rcVFS, rcMgr, rcAccessing, rcSelf, rcNull);
+
+ else if ((password == NULL) || (max_size == 0) || (size == NULL))
+ rc = RC (rcVFS, rcMgr, rcAccessing, rcParam, rcNull);
+
+ else
+ rc = get_config_password (self, password, max_size, size);
+
+ return rc;
+}
+
+
+#if 0 /* not using this now */
+LIB_EXPORT rc_t CC VFSManagerSetKryptoPassword (const VFSManager * self,
+ char * password,
+ size_t size)
+{
+ rc_t rc;
+
+ if (self == NULL)
+ rc = RC (rcVFS, rcMgr, rcAccessing, rcSelf, rcNull);
+
+ else if ((password == NULL) || (size == NULL))
+ rc = RC (rcVFS, rcMgr, rcAccessing, rcParam, rcNull);
+
+ else
+ {
+ KFile * pwfile;
+ size_t size;
+ char buffer [8192];
+
+
+ rc = VFSManagerGetConfigPWFile (self, buffer, sizeof buffer, &size);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr,
+ "failed to obtain configured path for password file "
+ "'$(P)'", "P=%s", buffer));
+
+ else
+ {
+ VPath * vpath;
+
+ buffer[size] = '\0';
+
+ rc = VPathMake (&vpath, buffer);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr,
+ "failed to create vpath for password file '$(P)'",
+ "P=%s", buffer));
+
+ else
+ {
+ KPath * file;
+
+ rc = VFSManagerCreateFile (self, &file, false, 0600,
+ kcmInit|kcmParents, vpath);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr,
+ "failed to create password file '$(P)'",
+ "P=%s", buffer));
+
+ else
+ {
+ size_t writ;
+
+ rc = KFileWriteAll (file, 0, password, size, &writ);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr,
+ "failed to write to password file '$(P)'",
+ "P=%s", buffer));
+ else
+ {
+ if (writ != size)
+ {
+ rc = KFileSetSize (file. 0);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr,
+ "failed to emplty corrupt "
+ "password file '$(P)'",
+ "P=%s", buffer));
+
+ rc = RC (rcVfs, rcMgr, rcWriting,
+ rcInsufficient);
+ }
+ }
+ KFileRelease (file);
+
+ if (rc)
+ {
+ rc_t orc;
+
+ orc = KDirectoryRemove (self->cwd, force, buffer);
+ if (orc)
+ PLOGERR (klogErr,
+ (klogErr,
+ "failed to delete bad password file "
+ "'$(P)'", "P=%s", buffer));
+ }
+ }
+ VPathRelease (vpath);
+ }
+ }
+ }
+
+ return rc;
+}
+#endif
+
+LIB_EXPORT rc_t CC VFSManagerUpdateKryptoPassword (const VFSManager * self,
+ const char * password,
+ size_t size,
+ char * pwd_dir,
+ size_t pwd_dir_size)
+{
+ static const char temp_extension [] = ".tmp";
+ rc_t rc;
+
+ if (self == NULL)
+ rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcSelf, rcNull);
+
+ else if ((password == NULL) || (size == 0))
+ rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcParam, rcNull);
+
+ else if (size > VFS_KRYPTO_PASSWORD_MAX_SIZE)
+ rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcSize, rcExcessive);
+
+ else if ((string_chr (password, size, '\n') != NULL) ||
+ (string_chr (password, size, '\r') != NULL))
+ rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcEncryptionKey, rcInvalid);
+
+ else
+ {
+ size_t old_password_file_size;
+ char old_password_file [8193];
+
+ rc = VFSManagerGetConfigPWFile (self, old_password_file,
+ sizeof old_password_file - 1,
+ &old_password_file_size);
+ if (rc) {
+ if (rc ==
+ SILENT_RC(rcKrypto, rcMgr, rcReading, rcBuffer, rcInsufficient))
+ {
+ rc =
+ RC(rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcExcessive);
+ }
+ LOGERR (klogErr, rc, "failed to obtain configured path for password file");
+ }
+
+ else if (old_password_file_size >= (sizeof old_password_file - 1))
+ {
+ rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcExcessive);
+ PLOGERR (klogErr,
+ (klogErr, rc, "configured path too long for function "
+ "'$(P)' '${F}'", "P=%s,F=%s",
+ old_password_file, __func__));
+ }
+ else
+ {
+ KPathType ftype;
+ bool old_exists;
+
+ old_password_file[old_password_file_size] = '\0';
+ ftype = KDirectoryPathType (self->cwd, old_password_file);
+
+ switch (ftype)
+ {
+ case kptNotFound:
+ old_exists = false;
+ break;
+
+ case kptBadPath:
+ rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcInvalid);
+ break;
+
+ case kptFile:
+ old_exists = true;
+ break;
+
+ case kptDir:
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ case kptDataset:
+ case kptDatatype:
+ rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcIncorrect);
+ break;
+
+ default:
+ rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcCorrupt);
+ break;
+ }
+
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "cannot use configured path for "
+ "password file '$(P)'", "P=%s", old_password_file));
+
+ else
+ {
+ VPath * vold;
+ size_t new_password_file_size;
+ char new_password_file [sizeof old_password_file + sizeof temp_extension];
+ size_t password_dir_size;
+ char password_dir [sizeof old_password_file];
+/* bool save_old_password; */
+ char * pc;
+
+ memcpy (password_dir, old_password_file, old_password_file_size);
+ memcpy (new_password_file, old_password_file, old_password_file_size);
+ memcpy (new_password_file + old_password_file_size, temp_extension, sizeof temp_extension);
+ new_password_file_size = old_password_file_size + sizeof temp_extension - 1;
+
+ pc = string_rchr (password_dir, old_password_file_size, '/');
+ if (pc == NULL)
+ {
+ password_dir[0] = '.';
+ pc = password_dir+1;
+ }
+ *pc = '\0';
+ password_dir_size = pc - password_dir;
+
+ if (pwd_dir && pwd_dir_size) {
+ size_t n = string_copy(pwd_dir, pwd_dir_size,
+ password_dir, password_dir_size + 1);
+ if (n >= pwd_dir_size) {
+ int i = 0;
+ size_t p = pwd_dir_size - 1;
+ pwd_dir[p] = '\0';
+ for (i = 0; i < 3; ++i) {
+ if (p == 0)
+ { break; }
+ pwd_dir[--p] = '.';
+ }
+ if (p != 0)
+ { pwd_dir[--p] = ' '; }
+ }
+ }
+
+ rc = VPathMake (&vold, old_password_file);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "could not create vpath for "
+ "password file '$(P)'", "P=%s",
+ old_password_file));
+
+ else
+ {
+ VPath * vnew;
+
+ rc = VPathMake (&vnew, new_password_file);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "could not create vpath for "
+ "password file '$(P)'", "P=%s",
+ new_password_file));
+
+ else
+ {
+ const KFile * fold = NULL;
+ KFile * fnew = NULL;
+
+ if (old_exists)
+ {
+ rc = VFSManagerOpenFileRead (self, &fold, vold);
+
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "unable to open existing "
+ "password file '$(P)'", "P=%s",
+ old_password_file));
+ }
+
+
+ if (rc == 0)
+ {
+ rc = VFSManagerCreateFile (self, &fnew, false, 0600,
+ kcmInit|kcmParents,
+ vnew);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "unable to open temporary "
+ "password file '$(P)'", "P=%s",
+ new_password_file));
+
+ else
+ {
+ uint64_t writ;
+ size_t this_writ;
+
+ rc = KFileWriteAll (fnew, 0, password, size, &this_writ);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "unable to write "
+ "password to temporary password "
+ "file '$(P)'", "P=%s",
+ new_password_file));
+
+ else if (this_writ != size)
+ {
+ rc = RC (rcVFS, rcEncryptionKey, rcWriting,
+ rcFile, rcInsufficient);
+ PLOGERR (klogErr,
+ (klogErr, rc, "unable to write complete "
+ "password to temporary password "
+ "file '$(P)'", "P=%s",
+ new_password_file));
+ }
+
+ else
+ {
+ writ = this_writ;
+
+ rc = KFileWriteAll (fnew, this_writ, "\n", 1, &this_writ);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "unable to write "
+ "password to temporary password "
+ "file '$(P)'", "P=%s",
+ new_password_file));
+
+ else if (this_writ != 1)
+ {
+ rc = RC (rcVFS, rcEncryptionKey, rcWriting,
+ rcFile, rcInsufficient);
+ PLOGERR (klogErr,
+ (klogErr, rc, "unable to write complete "
+ "password to temporary password "
+ "file '$(P)'", "P=%s",
+ new_password_file));
+ }
+
+ else
+ {
+ bool do_rename;
+
+ do_rename = true;
+ ++writ;
+
+ if (old_exists)
+ {
+ uint64_t read;
+ size_t this_read;
+ char buffer [VFS_KRYPTO_PASSWORD_MAX_SIZE+4];
+
+ rc = KFileReadAll (fold, 0, buffer,
+ sizeof buffer, &this_read);
+ if (rc)
+ ;
+
+ else
+ {
+ read = this_read;
+ /* look for duplicated password */
+ if (read > size)
+ {
+ char cc;
+
+ cc = buffer[size];
+ if (((cc == '\n') || (cc == '\r')) &&
+ (memcmp (buffer, password, size) == 0))
+ {
+ do_rename = false;
+ }
+ }
+ if (read)
+ rc = KFileWriteAll (fnew, writ, buffer, read, &this_writ);
+
+ if (rc)
+ ;
+ else if (do_rename)
+ {
+ writ += this_writ;
+
+ do
+ {
+ rc = KFileReadAll (fold, read, buffer,
+ sizeof buffer, &this_read);
+ if (rc)
+ ;
+
+ else if (this_read == 0)
+ break;
+
+ else
+ {
+ rc = KFileWriteAll (fnew, writ, buffer,
+ this_read, &this_writ);
+ if (rc)
+ ;
+
+ else if (this_read != this_writ)
+ {
+ rc = RC (rcVFS, rcEncryptionKey, rcWriting,
+ rcFile, rcInsufficient);
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "unable to write complete "
+ "password to temporary password "
+ "file '$(P)'", "P=%s",
+ new_password_file));
+ }
+
+ else
+ {
+ read += this_read;
+ writ += this_writ;
+ }
+ }
+ } while (rc == 0);
+ }
+ }
+ KFileRelease (fold);
+ fold = NULL;
+ }
+
+ KFileRelease (fnew);
+ fnew = NULL;
+
+ if (rc == 0)
+ {
+ if (do_rename)
+ {
+ rc = KDirectoryRename (self->cwd, true,
+ new_password_file,
+ old_password_file);
+ }
+ else
+ {
+ KDirectoryRemove (self->cwd, true, new_password_file);
+ }
+
+#if !WINDOWS
+ if (rc == 0)
+ {
+ uint32_t access;
+
+ rc = KDirectoryAccess (self->cwd,
+ &access, password_dir);
+ if (rc)
+ ;
+
+ else
+ {
+ if (access & 0027)
+ rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcDirectory, rcExcessive);
+ }
+ }
+#endif
+ }
+ }
+ }
+ KFileRelease (fnew);
+ }
+ KFileRelease (fold);
+ }
+ VPathRelease (vold);
+ }
+ VPathRelease (vnew);
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetCPath (const VFSManager * self, VPath ** cpath)
+{
+ rc_t rc;
+
+ if (cpath == NULL)
+ return RC (rcVFS, rcMgr, rcAccessing, rcParam, rcNull);
+
+ *cpath = NULL;
+
+ if (self == NULL)
+ return RC (rcVFS, rcMgr, rcAccessing, rcSelf, rcNull);
+
+ rc = VPathAddRef (self->cpath);
+ if (rc)
+ return rc;
+
+ *cpath = self->cpath;
+
+ return 0;
+}
+
+
+
+
+
+/*--------------------------------------------------------------------------
+ * KConfig
+ * placing some KConfig code that relies upon VFS here
+ */
+
+
+/* ReadVPath
+ * read a VPath node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigReadVPath ( struct KConfig const* self, const char* path, struct VPath** result )
+{
+ rc_t rc;
+
+ if ( result == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+ else
+ {
+ struct KConfigNode const *n;
+ rc = KConfigOpenNodeRead ( self, & n, path );
+ if ( rc == 0 )
+ {
+ rc = KConfigNodeReadVPath ( n, result );
+ KConfigNodeRelease ( n );
+ return rc;
+ }
+
+ * result = NULL;
+ }
+
+ return rc;
+}
+
+/* ReadVPath
+ * read a VPath node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadVPath ( struct KConfigNode const *self, struct VPath** result )
+{
+ rc_t rc;
+
+ if ( result == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+ else
+ {
+ char buffer [ 4096 ];
+ size_t num_read, to_read;
+ rc = KConfigNodeRead ( self, 0, buffer, sizeof buffer, & num_read, & to_read );
+ if ( rc == 0 )
+ {
+ char *p;
+
+ if ( to_read == 0 && num_read < sizeof buffer )
+ {
+ buffer [ num_read ] = 0;
+ return VPathMake ( result, buffer );
+ }
+
+ p = malloc ( num_read + to_read + 1 );
+ if ( p == NULL )
+ rc = RC ( rcKFG, rcNode, rcReading, rcMemory, rcExhausted );
+ else
+ {
+ rc = KConfigNodeRead ( self, 0, p, num_read + to_read + 1, & num_read, & to_read );
+ if ( rc == 0 )
+ {
+ p [ num_read ] = 0;
+ rc = VPathMake ( result, p );
+ }
+
+ free ( p );
+ return rc;
+ }
+ }
+
+ * result = NULL;
+ }
+
+ return rc;
+}
+
+
+static rc_t VFSManagerResolveAcc( const VFSManager * self,
+ const struct VPath * source,
+ struct VPath ** path_to_build,
+ const struct KFile ** remote_file,
+ const struct VPath ** local_cache )
+{
+ rc_t rc;
+
+ assert (self);
+ assert (source);
+ assert (path_to_build);
+ assert (remote_file);
+ assert (local_cache);
+
+ /* first try to find it localy */
+ rc = VResolverLocal ( self->resolver, source, (const VPath **)path_to_build );
+ if ( GetRCState( rc ) == rcNotFound )
+ {
+ /* if not found localy, try to find it remotely */
+ rc = VResolverRemote ( self->resolver, source, (const VPath **)path_to_build, remote_file );
+ if ( rc == 0 && remote_file != NULL && local_cache != NULL )
+ {
+ /* if found and the caller wants to know the location of a local cache file... */
+ uint64_t size_of_remote_file = 0;
+ if ( *remote_file != NULL )
+ rc = KFileSize ( *remote_file, &size_of_remote_file );
+ if ( rc == 0 )
+ rc = VResolverCache ( self->resolver, *path_to_build, local_cache, size_of_remote_file );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t VFSManagerResolveLocal( const VFSManager * self,
+ const char * local_path,
+ struct VPath ** path_to_build )
+{
+ char buffer[ 4096 ];
+ size_t num_writ;
+ rc_t rc;
+
+ assert (self);
+ assert (local_path);
+ assert (path_to_build);
+
+ rc = string_printf ( buffer, sizeof buffer, &num_writ, "ncbi-file:%s", local_path );
+ if ( rc == 0 && num_writ > 0 )
+ {
+ rc = VPathMake ( path_to_build, buffer );
+ }
+ return rc;
+}
+
+static rc_t VFSManagerResolvePathOrAcc( const VFSManager * self,
+ const struct VPath * source,
+ struct VPath ** path_to_build,
+ const struct KFile ** remote_file,
+ const struct VPath ** local_cache,
+ bool resolve_acc )
+{
+ char buffer[ 4096 ];
+ size_t num_read;
+ rc_t rc = VPathReadPath ( source, buffer, sizeof buffer, &num_read );
+ if ( rc == 0 && num_read > 0 )
+ {
+ char * pos_of_slash = string_chr ( buffer, string_size( buffer ), '/' );
+ if ( pos_of_slash != NULL )
+ {
+ /* we can now assume that the source is a filesystem-path :
+ we build a new VPath and prepend with 'ncbi-file:' */
+ rc = VFSManagerResolveLocal( self, buffer, path_to_build );
+ }
+ else if ( resolve_acc )
+ {
+ /* we assume the source is an accession! */
+ rc = VFSManagerResolveAcc( self, source, path_to_build, remote_file, local_cache );
+ if ( GetRCState( rc ) == rcNotFound )
+ {
+ /* if we were not able to find the source as accession, we assume it is a local path */
+ rc = VFSManagerResolveLocal( self, buffer, path_to_build );
+ }
+ }
+ else
+ {
+ rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcInvalid );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t VFSManagerResolveRemote( const VFSManager * self,
+ struct VPath ** source,
+ struct VPath ** path_to_build,
+ const struct KFile ** remote_file,
+ const struct VPath ** local_cache )
+{
+ rc_t rc = 0;
+ *path_to_build = *source;
+ if ( local_cache != NULL && remote_file != NULL && self->resolver != NULL )
+ {
+
+/* VFS_EXTERN rc_t CC VPathMakeString ( const VPath * self, const String ** uri ); */
+ char full_url[ 4096 ];
+ size_t num_read;
+ rc = VPathReadPath ( *source, full_url, sizeof full_url, &num_read );
+ if ( rc == 0 && num_read > 0 )
+ {
+ rc = KCurlFileMake ( remote_file, full_url, false );
+ if ( rc == 0 )
+ {
+ uint64_t size_of_remote_file = 0;
+ rc = KFileSize ( *remote_file, &size_of_remote_file );
+ if ( rc == 0 )
+ rc = VResolverCache ( self->resolver, *source, local_cache, size_of_remote_file );
+ }
+ }
+ }
+ *source = NULL;
+ return rc;
+}
+
+/* DEPRECATED */
+LIB_EXPORT rc_t CC VFSManagerResolveSpec ( const VFSManager * self,
+ const char * spec,
+ struct VPath ** path_to_build,
+ const struct KFile ** remote_file,
+ const struct VPath ** local_cache,
+ bool resolve_acc )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ rc = RC ( rcVFS, rcMgr, rcAccessing, rcSelf, rcNull );
+ else if ( spec == NULL || path_to_build == NULL )
+ rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcNull );
+ else if ( spec[ 0 ] == 0 )
+ rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcEmpty );
+ else
+ {
+ VPath * temp;
+ *path_to_build = NULL;
+ if ( local_cache != NULL )
+ *local_cache = NULL;
+ if ( remote_file != NULL )
+ *remote_file = NULL;
+ rc = VPathMake ( &temp, spec );
+ if ( rc == 0 )
+ {
+ VPUri_t uri_type;
+ rc = VPathGetScheme_t( temp, &uri_type );
+ if ( rc == 0 )
+ {
+ switch ( uri_type )
+ {
+ default : /* !! fall through !! */
+ case vpuri_invalid : rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcInvalid );
+ break;
+
+ case vpuri_none : /* !! fall through !! */
+ case vpuri_not_supported : rc = VFSManagerResolvePathOrAcc( self, temp, path_to_build, remote_file, local_cache, resolve_acc );
+ break;
+
+ case vpuri_ncbi_vfs : /* !! fall through !! */
+ case vpuri_file : *path_to_build = temp;
+ temp = NULL;
+ break;
+
+ case vpuri_ncbi_acc : if ( resolve_acc )
+ rc = VFSManagerResolveAcc( self, temp, path_to_build, remote_file, local_cache );
+ else
+ rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcInvalid );
+ break;
+
+ case vpuri_http : /* !! fall through !! */
+ case vpuri_ftp : rc = VFSManagerResolveRemote( self, &temp, path_to_build, remote_file, local_cache );
+ break;
+
+ case vpuri_ncbi_legrefseq: /* ??? */
+ break;
+ }
+ }
+ if ( temp != NULL )
+ VPathRelease ( temp );
+ }
+ }
+ return rc;
+}
+
+
+
+#if 0
+static rc_t VFSManagerResolveSpecLocal( const VFSManager * self,
+ const VPath * vpath,
+ const KDirectory ** dir )
+{
+ char path[ 4096 ];
+ size_t num_read;
+ rc_t rc = VPathReadPath ( vpath, path, sizeof path, &num_read );
+ if ( rc == 0 && num_read > 0 )
+ {
+ const KFile * local_file = NULL;
+ /* it is a local file or directory... */
+ rc = VFSManagerOpenFileReadRegularFile( path, sizeof path, &local_file, self->cwd );
+ if ( rc == 0 )
+ {
+ bool was_encrypted = false;
+ /* handle encryption here */
+
+ /* it is possible to open it as a file: transform it now into a directory */
+ rc = TransformFileToDirectory ( self->cwd, local_file, dir,
+ vpath->path.addr, was_encrypted );
+ }
+ else
+ {
+ /* try to open it as a directory */
+ rc = KDirectoryOpenDirRead ( self->cwd, dir, false, "%s", path );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t VFSManagerResolveSpecRemote( const VFSManager * self,
+ const VPath * vpath,
+ const KFile * remote_file,
+ const VPath * local_cache,
+ const KDirectory ** dir )
+{
+ const KFile *temp_file;
+ rc_t rc;
+ if ( local_cache == NULL )
+ rc = KBufFileMakeRead ( &temp_file, remote_file, 128 * 1024 * 1024 );
+ else
+ {
+ char buffer[ 4096 ];
+ size_t num_read;
+ rc = VPathReadPath ( local_cache, buffer, sizeof buffer, &num_read );
+ if ( rc == 0 && num_read > 0 )
+ rc = KDirectoryMakeCacheTee ( self->cwd, &temp_file, remote_file, NULL,
+ DEFAULT_CACHE_BLOCKSIZE, DEFAULT_CACHE_CLUSTER,
+ false, "%s", buffer );
+ }
+ KFileRelease ( remote_file ); /* we can do that, because it is wrapped now */
+ if ( rc == 0 )
+ {
+ const char mountpointpath[] = "/";
+ const KDirectory * mountpoint;
+
+ rc = KQuickMountDirMake ( self->cwd, &mountpoint, remote_file,
+ mountpointpath, sizeof mountpointpath - 1,
+ vpath->path.addr, vpath->path.size );
+ if ( rc != 0 )
+ PLOGERR ( klogErr, ( klogErr, rc, "error creating mount "
+ "'$(M)' for '$(F)", "M=%s,F=%S",
+ mountpointpath, &vpath->path ) );
+ else
+ {
+ bool was_encrypted = false;
+ /* handle encryption here */
+ rc = TransformFileToDirectory ( mountpoint, temp_file, dir,
+ vpath->path.addr,
+ was_encrypted );
+ KDirectoryRelease ( mountpoint );
+ }
+ /* release the temp_file after it was transformed into a directory? */
+ KFileRelease( temp_file );
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerResolveSpecIntoDir ( const VFSManager * self,
+ const char * spec,
+ const KDirectory ** dir,
+ bool resolve_acc )
+{
+ rc_t rc;
+
+ if ( dir == NULL )
+ rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcNull );
+ else
+ {
+ VPath * vpath;
+ const KFile * remote_file;
+ const VPath * local_cache;
+
+ *dir = NULL;
+ rc = VFSManagerResolveSpec ( self, spec, &vpath, &remote_file, &local_cache, resolve_acc );
+ if ( rc == 0 )
+ {
+ if ( remote_file == NULL )
+ rc = VFSManagerResolveSpecLocal( self, vpath, dir );
+ else
+ {
+ rc = VFSManagerResolveSpecRemote( self, vpath, remote_file, local_cache, dir );
+ KFileRelease( remote_file );
+ if ( local_cache != NULL )
+ VPathRelease( local_cache );
+ }
+
+ VPathRelease( vpath );
+ }
+ }
+ return rc;
+}
+#endif
+
diff --git a/libs/vfs/path-priv.h b/libs/vfs/path-priv.h
new file mode 100644
index 0000000..a4cd28d
--- /dev/null
+++ b/libs/vfs/path-priv.h
@@ -0,0 +1,115 @@
+/*===========================================================================
+*
+* Public Domain Notice
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_path_priv_libs_
+#define _h_vfs_path_priv_libs_
+
+#include <vfs/extern.h>
+#include <klib/defs.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <klib/text.h>
+#include <klib/refcount.h>
+#include <klib/container.h>
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef USE_VRESOLVER
+#define USE_VRESOLVER 1
+#endif
+
+#ifndef SUPPORT_FILE_URL
+#define SUPPORT_FILE_URL 1
+#endif
+
+#ifndef USE_EXPERIMENTAL_CODE
+#define USE_EXPERIMENTAL_CODE 1
+#endif
+
+#ifndef USE_VPATH_OPTIONS_STRINGS
+#define USE_VPATH_OPTIONS_STRINGS 0
+#endif
+
+#ifdef _DEBUGGING
+#define PATH_DEBUG(msg) DBGMSG(DBG_VFS,DBG_FLAG(DBG_VFS_PATH), msg)
+#else
+#define PATH_DEBUG(msg)
+#endif
+#define OFF_PATH_DEBUG(msg)
+
+
+typedef struct VPOption VPOption;
+struct VPOption
+{
+ BSTNode node;
+ VPOption_t name;
+ String value;
+/* const char * value; */
+};
+
+struct VPath
+{
+#if USE_VPATH_OPTIONS_STRINGS
+ const VPath * root;
+
+ KRefcount refcount;
+
+ String fullpath;
+
+ String scheme;
+
+
+#else
+ const VPath * root;
+ KRefcount refcount;
+ String path;
+ BSTree options; /* query section of an uri; maybe set other ways as well. */
+ char * query;
+ char * fragment;
+ size_t alloc_size; /* how much extra space allocated for a path too long for the built in buffer */
+ size_t asciz_size; /* doubles as allocated size -1 if less than the size of the buffer below */
+ VPUri_t scheme;
+ char * storage;
+#endif
+};
+
+
+/* not externally callable */
+rc_t CC VPathTransformSysPath (VPath * self);
+rc_t VPathTransformPathHier (char ** uri_path);
+
+rc_t VPathInitAuthority (VPath * self, char ** next);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_path_priv_ */
diff --git a/libs/vfs/path.c b/libs/vfs/path.c
new file mode 100644
index 0000000..ba9591d
--- /dev/null
+++ b/libs/vfs/path.c
@@ -0,0 +1,2457 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <vfs/extern.h>
+#include <os-native.h>
+#include <vfs/path.h>
+#include <vfs/manager.h>
+#include <vfs/resolver.h>
+
+#include "path-priv.h"
+
+#include <sra/srapath.h> /* this only looks like its a module problem */
+#include <kfs/directory.h>
+#include <klib/refcount.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <sysalloc.h>
+#include <ctype.h>
+#include <assert.h>
+
+rc_t VPOptionMake (VPOption ** new_obj, VPOption_t name, const char * value, size_t size)
+{
+ VPOption * obj;
+
+ assert (new_obj);
+
+ obj = malloc (sizeof (*obj));
+ if (obj == NULL)
+ return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+
+ obj->name = name;
+ StringInit (&obj->value, value, size, string_len (value, size));
+ *new_obj = obj;
+ return 0;
+}
+
+void CC VPOptionWhack (BSTNode * self, void * ignored)
+{
+ free (self);
+}
+
+int CC VPOptionCmp ( const void * item, const BSTNode * n )
+{
+ VPOption_t o = (VPOption_t)(size_t)item;
+ const VPOption * b = (const VPOption *)n;
+
+ return o - b->name;
+}
+
+int CC VPOptionSort ( const BSTNode * item, const BSTNode * n )
+{
+ const VPOption * a = (const VPOption *)item;
+ const VPOption * b = (const VPOption *)n;
+
+ return a->name - b->name;
+}
+
+
+#if 0
+static
+rc_t VPathMakeCanon (VPath * self)
+{
+ char * low; /* 'root' location in path */
+ char * dst; /* target reference for removing . and .. nodes */
+ char * last; /* '/' at end of previous node */
+ char * lim; /* '\0' at end of the path string coming in */
+
+
+ end = self->path.addr + self->path.size;
+ low = self->path.addr;
+ if (low[1] == '/') /* path starts with // which we allow in windows */
+ ++low;
+ dst = last = low;
+
+ for (;;)
+ {
+ char * src; /* '/' or '\0' at end of this path node */
+
+ src = strchr (prev + 1, '/');
+ if (src == NULL)
+ src = lim;
+
+ /* detect special sequences based on length of node */
+ switch (src-last)
+ {
+ case 1: /* an empty node name - only allowed in the beginning */
+ last = src; /* skip over */
+ if (src != lim)
+ continue;
+ break;
+ case 2:
+ if (last[1] == '.')
+ {
+ last = src; /* skip over */
+ if (src != lim)
+ continue;
+ }
+ break;
+
+ case 3:
+ if ((last[1] == '.') && (last[2] == '.'))
+ {
+ /* remove previous node name */
+ dst[0] = '\0';
+ dst = strrchr (low, '/');
+ if ((dst == NULL) || (dst < low))
+ return RC (rcFS, rcPath, rcAccessing, rcPath, rcInvalid);
+
+ last = src;
+ if (src != lim)
+ continue;
+ }
+ break;
+ }
+
+ assert (src >= last);
+ if (dst != last)
+ memmove (dst, last, src-last);
+ }
+}
+#endif
+/* Destroy
+ */
+rc_t VPathDestroy (const VPath * cself)
+{
+ if (cself)
+ {
+ VPath * self = (VPath*)cself;
+ PATH_DEBUG (("-----\n%s: %p %p\n\n", __func__, cself, cself->storage ));
+ BSTreeWhack (&self->options, VPOptionWhack, NULL);
+ free (self->storage);
+ free (self);
+ }
+ return 0;
+}
+
+
+static const char class_name[] = "VPath";
+
+/* AddRef
+ * creates a new reference
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC VPathAddRef ( const VPath *self )
+{
+ if ( self != NULL )
+ {
+ switch (KRefcountAdd (&self->refcount, class_name))
+ {
+ case krefLimit:
+ case krefNegative:
+ return RC (rcFS, rcPath, rcAttaching, rcRange, rcInvalid);
+ }
+ }
+ return 0;
+}
+
+
+/* Release
+ * discard reference to file
+ * ignores NULL references
+ */
+LIB_EXPORT rc_t CC VPathRelease ( const VPath *self )
+{
+ if ( self != NULL )
+ {
+ switch (KRefcountDrop (&self->refcount, class_name))
+ {
+ case krefWhack:
+ VPathDestroy (self);
+ break;
+ case krefLimit:
+ case krefNegative:
+ return RC (rcFS, rcPath, rcReleasing, rcRange, rcInvalid);
+ }
+ }
+ return 0;
+}
+
+
+/* not fully reselient to bad input */
+static __inline__
+char decode_nibble (char c)
+{
+ if ((c >= '0') && (c <= '9'))
+ return (c - '0');
+ if ((c >= 'a') && (c <= 'z'))
+ return (c - 'a');
+ if ((c >= 'A') && (c <= 'Z'))
+ return (c - 'A');
+ return (0);
+}
+
+
+static __inline__
+bool string_decode (char * p)
+{
+ char * q;
+ size_t limit;
+ size_t ix;
+
+ q = p;
+ limit = string_size (p);
+
+ for (ix = 0; ix < limit; ++ix)
+ {
+ if (p[0] == '%')
+ {
+ if ((ix + 2 > limit) || ! isxdigit (p[1]) || ! isxdigit (p[2]))
+ return false;
+ *q = decode_nibble (*++p) << 4;
+ *q += decode_nibble (*++p);
+
+ }
+ else if (q != p)
+ *q = *p;
+ ++p;
+ ++q;
+ }
+ if (p != q)
+ *q = '\0';
+ return true;
+}
+
+
+#if 0
+static __inline__
+rc_t StringDecode (String * self)
+{
+ size_t limit;
+ size_t ix;
+ char * p;
+ char * q;
+
+ p = q = (char *)self->addr;
+ limit = self->size;
+ for (ix = 0; ix < limit; ++ix)
+ {
+ if (p[0] == '%')
+ {
+ if ((ix + 2 > limit) || ! isxdigit (p[1]) || ! isxdigit (p[2]))
+ return RC (rcFS, rcPath, rcDecoding, rcPath, rcInvalid);
+ *q = decode_nibble (p[1]) << 4;
+ *q += decode_nibble (p[2]);
+ }
+ else if (q != p)
+ *q = *p;
+ ++p;
+ ++q;
+ }
+ if (p != q)
+ {
+ *q = '\0';
+ self->size = q - self->addr;
+ self->len = string_len (self->addr, self->size);
+ }
+ return 0;
+}
+#endif
+
+/*
+ * Coded against the ABNF from RFC 3987 International Resource Identifiers and
+ * RFC 3986 Universal Resource Identifiers
+ */
+
+static __inline__
+bool is_sub_delim (int ch)
+{
+ switch (ch)
+ {
+ case '!': case '$': case '&': case '\'':
+ case '(': case ')': case '*': case '+':
+ case ',': case ';': case '=':
+ return true;
+ default:
+ return false;
+ }
+}
+
+
+static __inline__
+bool is_gen_delim (int ch)
+{
+ switch (ch)
+ {
+ case ':': case '/': case '?': case '#': case '[': case ']': case '@':
+ return true;
+ default:
+ return false;
+ }
+}
+
+
+static __inline__
+bool is_reserved (int ch)
+{
+ return is_gen_delim (ch) || is_sub_delim (ch);
+}
+
+
+static __inline__
+bool is_unreserved (int ch)
+{
+ return (isalnum (ch) || /* ALPHA and DIGIT */
+ (ch == '-') ||
+ (ch == '.') ||
+ (ch == '_') ||
+ (ch == '~'));
+}
+
+
+static __inline__
+bool is_pct_encoded (const char * str)
+{
+ return (
+ (str[0] == '%') &&
+ (isxdigit (str[1])) &&
+ (isxdigit (str[2])));
+}
+
+
+static __inline__
+const char * eat_dec_octet (const char * str)
+{
+ /* not a number */
+ if (! isdigit (str[0]))
+ return str;
+
+ /* 0-9 single digit */
+ if (! isdigit (str[1]))
+ return str+1;
+
+ /* no leading zeroes */
+ if (str[0] == '0')
+ return str;
+
+ /* 10-99 */
+ if (! isdigit (str[2]))
+ return str+2;
+
+ /* 1000 and up */
+ if (isdigit (str[2]))
+ return str;
+
+ /* 100-199 */
+ if (str[0] == '1')
+ return str+3;
+
+ /* 300-999 */
+ if (str[0] != '2')
+ return str;
+
+ /* 200-249 */
+ if (str[1] < '5')
+ return str+2;
+
+ /* 260-299 */
+ if (str[1] > '5')
+ return str;
+
+ /* 256-259 */
+ if (str[2] > '5')
+ return str;
+
+ /* 250-255 */
+ return str+2;
+}
+
+
+static __inline__
+const char * eat_IPv4address (const char * str)
+{
+ const char * t0;
+ const char * t1;
+
+ t0 = str;
+
+ t1 = eat_dec_octet (t0);
+ if (t1 == t0)
+ return str;
+
+ if (*t1 != '.')
+ return str;
+
+ t0 = t1 + 1;
+
+ t1 = eat_dec_octet (t0);
+ if (t1 == t0)
+ return str;
+
+ if (*t1 != '.')
+ return str;
+
+ t0 = t1 + 1;
+
+ t1 = eat_dec_octet (t0);
+ if (t1 == t0)
+ return str;
+
+ if (*t1 != '.')
+ return str;
+
+ t0 = t1 + 1;
+
+ t1 = eat_dec_octet (t0);
+ if (t1 == t0)
+ return str;
+
+ return t1;
+}
+
+
+static __inline__
+const char * eat_IPv6address (const char * str)
+{
+ /* not going there yet */
+ return str;
+}
+
+
+
+
+static __inline__
+bool is_scheme_char (int ch)
+{
+ return (isalnum (ch) ||
+ (ch == '+') ||
+ (ch == '-') ||
+ (ch == ','));
+}
+
+
+static __inline__
+bool is_scheme (const char * str)
+{
+ if ( !isalpha (*str++))
+ return false;
+ while (*str)
+ if ( ! is_scheme_char (*str++))
+ return false;
+ return true;
+}
+
+
+static __inline__
+bool is_iprivate (int ch )
+{
+ return (((ch >= 0x00E000) && (ch <= 0x00F8FF)) ||
+ ((ch >= 0x0F0000) && (ch <= 0x0FFFFD)) ||
+ ((ch >= 0x100000) && (ch <= 0x10FFFD)));
+}
+
+
+static __inline__
+bool is_ucschar (int ch)
+{
+ return (((ch >= 0xA0) && (ch <= 0xD7FF)) ||
+ ((ch >= 0xF900) && (ch <= 0xFDCF)) ||
+ ((ch >= 0xFDF0) && (ch <= 0xFFEF)) ||
+ ((ch >= 0x10000) && (ch <= 0x1FFFD)) ||
+ ((ch >= 0x20000) && (ch <= 0x2FFFD)) ||
+ ((ch >= 0x30000) && (ch <= 0x3FFFD)) ||
+ ((ch >= 0x40000) && (ch <= 0x4FFFD)) ||
+ ((ch >= 0x50000) && (ch <= 0x5FFFD)) ||
+ ((ch >= 0x60000) && (ch <= 0x6FFFD)) ||
+ ((ch >= 0x70000) && (ch <= 0x7FFFD)) ||
+ ((ch >= 0x80000) && (ch <= 0x8FFFD)) ||
+ ((ch >= 0x90000) && (ch <= 0x9FFFD)) ||
+ ((ch >= 0xA0000) && (ch <= 0xAFFFD)) ||
+ ((ch >= 0xB0000) && (ch <= 0xBFFFD)) ||
+ ((ch >= 0xC0000) && (ch <= 0xCFFFD)) ||
+ ((ch >= 0xD0000) && (ch <= 0xDFFFD)) ||
+ ((ch >= 0xE0000) && (ch <= 0xEFFFD)));
+}
+
+static __inline__
+bool is_iunreserved (int ch)
+{
+ return is_unreserved (ch) || is_ucschar (ch);
+}
+
+
+static __inline__
+bool is_ipchar (int ch)
+{
+ return is_iunreserved (ch) || is_sub_delim (ch) ||
+ (ch == ':') || (ch == '@');
+}
+
+
+static __inline__
+bool is_query (const char * str)
+{
+ for ( ; *str; ++str)
+ {
+ if (! is_ipchar (*str) &&
+ ! is_iprivate (*str) &&
+ (*str != '/') &&
+ (*str != '?'))
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+static __inline__
+bool is_fragment (const char * str)
+{
+ for ( ; *str; ++str)
+ {
+ if (! is_ipchar (*str) &&
+ ! is_sub_delim (*str) &&
+ (*str != '/') &&
+ (*str != '?'))
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+#if 0
+static __inline__
+bool is_isegment (const char * str, size_t sz)
+{
+ const char * end = str + sz;
+ size_t ix;
+ int cnt;
+
+ for (ix = 0; ix < sz; ix += cnt)
+ {
+ uint32_t ch;
+ cnt = utf8_utf32 (&ch, str + ix, end);
+ if (cnt <= 0)
+ return false;
+ if ( ! is_ipchar (ch))
+ return false;
+ }
+ return true;
+}
+#endif
+
+
+static __inline__
+const char * eat_iuserinfo (const char * str)
+{
+ for (;;++str)
+ {
+ if (is_iunreserved (*str))
+ ;
+ else if (is_sub_delim (*str))
+ ;
+ else if (*str != ':')
+ break;
+ }
+ return str;
+}
+
+
+static __inline__
+const char * eat_ireg_name (const char * str)
+{
+ for (;;++str)
+ {
+ if (is_iunreserved (*str))
+ ;
+ else if (is_sub_delim (*str))
+ ;
+ else
+ break;
+ }
+ return str;
+}
+
+
+static __inline__
+const char * eat_port (const char * str)
+{
+ while (isdigit (*str))
+ ++str;
+ return str;
+}
+
+
+static __inline__
+const char * eat_ihost (const char * str)
+{
+ /* not doing ip addresses yet */
+
+ return eat_ireg_name (str);
+}
+
+
+static __inline__
+const char * eat_iuserinfo_at (const char * str)
+{
+ const char * temp = eat_iuserinfo (str);
+ if (temp == NULL)
+ return temp;
+ if (*++temp != '@')
+ return NULL;
+ return temp;
+}
+
+
+static __inline__
+const char * eat_iauthority (const char * str)
+{
+ const char * temp;
+
+ temp = eat_iuserinfo_at (str);
+
+ if (temp != NULL)
+ str = temp;
+
+ temp = eat_ihost (str);
+ if (temp == NULL)
+ return false;
+ str = temp;
+
+ if (*str == ':')
+ return eat_port (str+1);
+
+ return str;
+}
+
+
+static __inline__
+const char * eat_file_iauthority (const char * str)
+{
+ const char * temp;
+
+ temp = eat_ihost (str);
+ if (temp == NULL)
+ return false;
+ return temp;
+}
+
+
+static __inline__
+const char * eat_isegment (const char * str)
+{
+ while (*str)
+ {
+ if (is_ipchar (*str))
+ {
+ ++str;
+ continue;
+ }
+ if (is_pct_encoded (str))
+ {
+ str += 3;
+ continue;
+ }
+ else
+ break;
+ }
+ return str;
+}
+
+
+static __inline__
+const char * eat_isegment_nz (const char * str)
+{
+ const char * temp = eat_isegment (str);
+ if (temp == str)
+ return NULL;
+ return temp;
+}
+
+
+#if 0
+static __inline__
+const char * eat_isegment_nz_nc (const char * str)
+{
+ const char * temp = str;
+
+ while (is_iunreserved (*str) ||
+ is_sub_delim (*str) ||
+ (*str == '@'))
+ ++str;
+ if (temp == str)
+ return false;
+ return str;
+}
+#endif
+
+
+#if 0
+static __inline__
+bool is_isegment_nz (const char * str, size_t sz)
+{
+ if (sz == 0)
+ return false;
+ return is_isegment (str, sz);
+}
+#endif
+
+
+#if 0
+static __inline__
+bool is_isegment_nz_nc (const char * str, size_t sz)
+{
+ if (sz == 0)
+ return false;
+ if (string_chr (str, sz, ':') != NULL)
+ return false;
+ return is_isegment (str, sz);
+}
+#endif
+
+
+#if 0
+static __inline__
+bool is_ireg_name (const char * str, size_t sz)
+{
+ const char * end = str + sz;
+ size_t ix;
+ int cnt;
+
+ for (ix = 0; ix < sz; ix += cnt)
+ {
+ uint32_t ch;
+ cnt = utf8_utf32 (&ch, str + ix, end);
+ if (cnt <= 0)
+ return false;
+ if ( ! is_iunreserved (ch) &&
+ ! is_sub_delim (ch))
+ return false;
+ }
+ return true;
+}
+#endif
+
+
+static __inline__
+bool is_ipath_rootless (const char * str);
+
+static __inline__
+bool is_ipath_absolute (const char * str)
+{
+ if (*str++ != '/')
+ return false;
+ return is_ipath_rootless (str);
+}
+
+
+static __inline__
+bool is_ipath_empty (const char * str)
+{
+ return (*str == '\0');
+}
+
+
+static __inline__
+bool is_ipath_abempty (const char * str)
+{
+ for (;;)
+ {
+ if (is_ipath_empty (str))
+ return true;
+
+ else if (*str++ != '/')
+ return false;
+
+ else
+ {
+ const char * temp = eat_isegment (str);
+ if (temp == NULL)
+ return false;
+ str = temp;
+ }
+ }
+}
+
+
+static __inline__
+bool is_ipath_rootless (const char * str)
+{
+ str = eat_isegment_nz (str);
+ if (str == NULL)
+ return false;
+
+ return is_ipath_abempty (str);
+}
+
+
+#if 0
+static __inline__
+bool is_ipath_noscheme (const char * str)
+{
+ str = eat_isegment_nz_nc (str);
+
+ if (str == NULL)
+ return false;
+
+ return is_ipath_abempty (str);
+}
+#endif
+
+
+static __inline__
+bool is_hier (const char * str)
+{
+ if ((str[0] == '/') && (str[1] == '/'))
+ {
+ const char * temp = eat_iauthority (str);
+ if (temp != NULL)
+ if (is_ipath_abempty (temp))
+ return true;
+ }
+ if (is_ipath_absolute (str))
+ return true;
+
+ if (is_ipath_rootless (str))
+ return true;
+
+ if (is_ipath_empty (str))
+ return true;
+
+ return false;
+}
+
+
+#if 0
+/*
+ * confusion and ambiguity in the world of RFCs...
+ * We're gonna go with the RFC-3987 definition of ihost as ireg-name
+ */
+static __inline__
+const char * eat_hostname (const char * str)
+{
+ /* -----
+ * hostname = ireg_name
+ * ireg_name = *(iunreserved / pct_encoded / sub_delim
+ *
+ * legal terminators are NUL or '/'
+ */
+ while (is_iunreserved (*str) &&
+ is_sub_delim (*str))
+ ++str;
+ switch (*str)
+ {
+ case '\0':
+ case '/':
+ return str;
+ default:
+ return NULL;
+ }
+}
+#endif
+#if 0
+/* -----
+ * number.number.number.numer
+ * does not range check number
+ * sigh...
+ */
+static __inline__
+const char * eat_ipv6 (const char * str)
+{
+#if 1
+ return NULL; /* not gonna do them yet */
+#else
+ const char * temp;
+ int digits;
+ int colons;
+ int doublecolons = 0;
+
+ /* non empty first part */
+ for (digits = 0; isxdigit (*str); ++str)
+ ;
+ if ((digits == 0) || (digits > 4))
+ return NULL;
+
+ if (*str++ != ':')
+ return NULL;
+
+ for (digits = 0; isxdigit (*str); ++str)
+ ;
+ if (digits == 0)
+ doublecolons = 1;
+ else if (digits > 4)
+ return NULL;
+
+ for (digits = 0; isxdigit (*str); ++str)
+ ;
+ if (digits == 0)
+ {
+ if (doublecolons > 0)
+ return NULL;
+ doublecolons = 1;
+ }
+ else if (digits > 4)
+ return NULL;
+
+ for (digits = 0; isxdigit (*str); ++str)
+ ;
+ if (digits == 0)
+ {
+ if (doublecolons > 0)
+ return NULL;
+ doublecolons = 1;
+ }
+ else if (digits > 4)
+ return NULL;
+
+/* ... eeek! */
+ return NULL;
+#endif
+}
+#endif
+#if 0
+/* -----
+ * number.number.number.numer
+ * does not range check number
+ */
+static __inline__
+const char * eat_ipv4 (const char * str)
+{
+ do
+ if (! isdigit(*str++))
+ return NULL;
+ while (*str != '.');
+ ++str;
+ do
+ if (! isdigit(*str++))
+ return NULL;
+ while (*str != '.');
+ ++str;
+ do
+ if (! isdigit(*str++))
+ return NULL;
+ while (*str != '.');
+ ++str;
+ do
+ if (! isdigit(*str++))
+ return NULL;
+ while (isdigit (*str));
+ return str;
+}
+#endif
+#if 0
+static __inline__
+const char * eat_hostnumber (const char * str)
+{
+ const char * temp;
+
+ temp = eat_ipv4 (str);
+ if (temp == NULL)
+ temp = eat_ipv6 (str);
+ return temp;
+}
+#endif
+#if 0
+static __inline__
+const char * eat_host (const char * str)
+{
+ const char * temp;
+
+ temp = eat_hostnumber (str);
+ if (temp == NULL)
+ temp = eat_hostname (str);
+ return temp;
+}
+#endif
+
+
+#if 0
+static __inline__
+const char * eat_fsegment (const char * str)
+{
+ for (;;++str)
+ {
+ if ((*str == '/') ||
+ (*str == '\0'))
+ {
+ break;
+ }
+ else if ( ! is_ipchar (*str))
+ return NULL;
+ }
+ return str;
+}
+#endif
+
+
+/* fpath = fsegment *[ "/" fsegment ] */
+#if 0
+static __inline__
+bool is_fpath (const char * str)
+{
+ for (;;)
+ {
+ str = eat_fsegment (str);
+ if (str == NULL)
+ return false;
+ if (*str == '\0')
+ return true;
+ if (*str != '/')
+ return false;
+ ++str;
+ }
+ return false; /* unreachable really */
+}
+#endif
+
+
+static __inline__
+bool is_file_hier (const char * str)
+{
+#if 0
+ const char * temp;
+ /*
+ * we'll expect the "file://host/fpath"
+ * but also accept the inccorect "file:/fpath"
+ */
+ if (*str++ != '/')
+ return false;
+
+ if (*str == '/') /* must be correct version */
+ {
+ ++str;
+ temp = eat_host (str);
+ if (temp == NULL)
+ return false;
+ str = temp;
+ if (*str++ != '/')
+ return false;
+ }
+ return is_fpath (str);
+#else
+#if 0
+ if ((str[0] == '/') && (str[1] == '/'))
+ {
+ const char * temp = eat_file_iauthority (str);
+ if (temp != NULL)
+ if (is_ipath_abempty (temp))
+ return true;
+ }
+ if (is_ipath_absolute (str))
+ return true;
+
+ if (is_ipath_rootless (str))
+ return true;
+
+ if (is_ipath_empty (str))
+ return true;
+
+ return false;
+#else
+ /* by this point we aren't limited to ASCII leave it for KFS*/
+ return true;
+#endif
+#endif
+}
+
+
+static __inline__
+bool is_file_query (const char * str)
+{
+ return (*str == '\0');
+
+}
+
+
+static __inline__
+bool is_file_fragment (const char * str)
+{
+ return (*str == '\0');
+}
+
+
+static __inline__
+bool is_kfs_hier (const char * str)
+{
+ return is_file_hier (str);
+}
+
+
+static __inline__
+bool is_acc_hier (const char * str)
+{
+ /* not really doing this now */
+ return true;
+}
+
+
+static __inline__
+const char * eat_kfs_query (const char * str, VPOption ** opt)
+{
+ /*
+ * query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
+ */
+ assert (str);
+ assert (opt);
+
+ switch (tolower (str[0]))
+ {
+ case 'e':
+ if (strncasecmp ("nc", str+1, 2) == 0)
+ {
+ const char * temp = NULL;
+
+ if ((str[3] == '\0') || (str[3] == '&'))
+ temp = str + 3;
+
+ else if ((strncasecmp ("rypt", str+3, 4) == 0) &&
+ ((str[7] == '\0') || (str[7] == '&')))
+ temp = str + 7;
+
+ if (temp)
+ {
+ VPOption * o;
+ rc_t rc;
+
+ rc = VPOptionMake (&o, vpopt_encrypted, temp, 0);
+ if (rc)
+ return false;
+ *opt = o;
+ return temp;
+ }
+ }
+ break;
+
+ case 'p':
+ if (strncasecmp ("wfile=", str + 1, sizeof ("wfile=") - 1) == 0)
+ {
+ const char * temp1 = str + 1 + sizeof ("wfile=") - 1;
+ const char * temp2 = temp1;
+
+ while ((*temp1 != '\0') && (*temp1 != '&'))
+ ++temp1;
+ if (temp1 != temp2)
+ {
+ VPOption * o;
+ rc_t rc;
+
+ rc = VPOptionMake (&o, vpopt_pwpath, temp2, temp1-temp2);
+ if (rc)
+ return false;
+ *opt = o;
+ return temp1;
+ }
+ break;
+ }
+ if (strncasecmp ("wfd=", str + 1, sizeof ("wfd=") - 1) == 0)
+ {
+ const char * temp1 = str + 1 + sizeof ("wfd=") - 1;
+ const char * temp2 = temp1;
+ while (isdigit(*temp1))
+ ++temp1;
+ if (temp1 == temp2)
+ break;
+ if ((*temp1 == '\0') || (*temp1 == '&'))
+ {
+ VPOption * o;
+ rc_t rc;
+
+ rc = VPOptionMake (&o, vpopt_pwfd, temp2, temp1-temp2);
+ if (rc)
+ return false;
+ *opt = o;
+ return temp1;
+ }
+ }
+ break;
+ case 'r':
+ if (strncasecmp ("eadgroup=", str + 1, sizeof ("eadgroup=") - 1) == 0)
+ {
+ const char * temp1 = str + 1 + sizeof ("eadgroup=") - 1;
+ const char * temp2 = temp1;
+ while (isprint(*temp1))
+ ++temp1;
+ if (temp1 == temp2)
+ break;
+ if ((*temp1 == '\0') || (*temp1 == '&'))
+ {
+ VPOption * o;
+ rc_t rc;
+
+ rc = VPOptionMake (&o, vpopt_readgroup, temp2, temp1-temp2);
+ if (rc)
+ return false;
+ *opt = o;
+ return temp1;
+ }
+ }
+ break;
+ case 't':
+ if (strncasecmp ("emporary_pw_hack=", str + 1, sizeof ("emporary_pw_hack=") - 1) == 0)
+ {
+ const char * temp1 = str + 1 + sizeof ("emporary_pw_hack=") - 1;
+ const char * temp2 = temp1;
+ while (isalnum(*temp1))
+ ++temp1;
+ if (temp1 == temp2)
+ break;
+ if ((*temp1 == '\0') || (*temp1 == '&'))
+ {
+ VPOption * o;
+ rc_t rc;
+
+ rc = VPOptionMake (&o, vpopt_temporary_pw_hack, temp2, temp1-temp2);
+ if (rc)
+ return false;
+ *opt = o;
+ return temp1;
+ }
+ }
+ else if (strncasecmp ("ic=", str + 1, sizeof ("ic=") - 1) == 0)
+ {
+ const char * temp1 = str + 1 + sizeof ("ic=") - 1;
+ const char * temp2 = temp1;
+ while ( * temp1 != 0 && * temp1 != '&' )
+ ++temp1;
+ if (temp1 == temp2)
+ break;
+ if ((*temp1 == '\0') || (*temp1 == '&'))
+ {
+ VPOption * o;
+ rc_t rc;
+
+ rc = VPOptionMake (&o, vpopt_gap_ticket, temp2, temp1-temp2);
+ if (rc)
+ return false;
+ *opt = o;
+ return temp1;
+ }
+ }
+ break;
+ case 'v':
+ if (strncasecmp ("db-ctx=", str + 1, sizeof ("db-ctx=") - 1) == 0)
+ {
+ const char * temp1 = str + 1 + sizeof ("db-ctx=") - 1;
+ const char * temp2 = temp1;
+ while (isalnum(*temp1))
+ ++temp1;
+ if (temp1 == temp2)
+ break;
+ if ((*temp1 == '\0') || (*temp1 == '&'))
+ {
+ VPOption * o;
+ rc_t rc;
+
+ rc = VPOptionMake (&o, vpopt_vdb_ctx, temp2, temp1-temp2);
+ if (rc)
+ return false;
+ *opt = o;
+ return temp1;
+ }
+ }
+ break;
+ }
+ PATH_DEBUG (("%s: failed '%s'\n",__func__,str));
+ return NULL;
+}
+
+
+static __inline__
+bool is_kfs_query (const char * str, BSTree * tree)
+{
+ /*
+ * query = query_entry [ * ( "&" query_entry ) ]
+ *
+ * query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
+ */
+ const char * temp;
+
+ if (*str == '\0')
+ return true;
+
+ for (;;)
+ {
+ VPOption * o = NULL;
+
+ /* this returns an allocation */
+ temp = eat_kfs_query (str, &o);
+ if ( o == NULL )
+ return false;
+ if ( temp == NULL )
+ {
+ VPOptionWhack ( & o -> node, NULL );
+ return false;
+ }
+
+ switch ( o -> name )
+ {
+ case vpopt_pwpath:
+ case vpopt_pwfd:
+ /* can only have one of these */
+ if ( BSTreeInsertUnique ( tree, &o->node, NULL, VPOptionSort ) != 0)
+ {
+ VPOptionWhack ( & o -> node, NULL );
+ return false;
+ }
+ break;
+ case vpopt_temporary_pw_hack:
+ case vpopt_vdb_ctx:
+ case vpopt_gap_ticket:
+ case vpopt_encrypted:
+ case vpopt_readgroup:
+ /* the behavior here appears to be
+ tolerate repeats, but only insert first */
+ if ( BSTreeInsertUnique ( tree, &o->node, NULL, VPOptionSort ) != 0)
+ VPOptionWhack ( & o -> node, NULL );
+ break;
+
+ default:
+ VPOptionWhack ( & o -> node, NULL );
+ break;
+ }
+
+ str = temp;
+ if (*str == '\0')
+ break;
+ if (*str == '&')
+ /**(char *)str = '\0'*/;
+ else
+ return false;
+ ++str;
+ }
+ return true;
+}
+
+static __inline__
+bool is_http_query (const char * str, BSTree * tree)
+{
+ return is_kfs_query (str, tree);
+}
+
+
+static __inline__
+bool is_acc_query (const char * str, BSTree * tree)
+{
+ return is_kfs_query (str, tree);
+}
+
+
+static __inline__
+bool is_kfs_fragment (const char * str)
+{
+ return true;
+/* return (*str == '\0'); */
+}
+
+
+static __inline__
+bool is_acc_fragment (const char * str)
+{
+ return (*str == '\0');
+}
+
+
+
+/*
+ * file://host/path bue we allow file:/path
+ *
+ * RFC-1738
+ *
+ * fileurl = "file://" [host / "localhost" ] "/" fpath
+ */
+static
+rc_t VPathMakeUriFile (VPath * self, char * new_allocation,
+ size_t sz, char * hier, char * query,
+ char * fragment)
+{
+ rc_t rc;
+ assert (self);
+ assert (new_allocation);
+ assert (sz);
+ assert (hier);
+ assert (query);
+ assert (fragment);
+
+ if ((!is_file_hier (hier)) ||
+ (!is_file_query (query)) ||
+ (!is_file_fragment (fragment)))
+ {
+ return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+ }
+
+ free (self->storage);
+ self->storage = new_allocation;
+ self->alloc_size = sz;
+
+ PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+ hier, query, fragment));
+ rc = VPathTransformPathHier (&hier);
+ PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+ hier, query, fragment));
+ if (rc)
+ {
+ self->storage = NULL;
+ return rc;
+ }
+ StringInitCString (&self->path, hier);
+ self->query = query;
+ self->fragment = fragment;
+ PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+ &self->path, self->fragment));
+ return 0;
+}
+
+
+static
+rc_t VPathMakeUriKfs (VPath * self, char * new_allocation,
+ size_t sz, char * hier,
+ char * query, char * fragment)
+{
+ rc_t rc;
+ assert (self);
+ assert (new_allocation);
+ assert (sz);
+ assert (hier);
+ assert (query);
+ assert (fragment);
+
+ if (!is_kfs_hier (hier))
+ {
+ PATH_DEBUG (("%s: failed is_kfs_hier '%s'\n",__func__, hier));
+ return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+ }
+
+ if (!is_kfs_query (query, &self->options))
+ {
+ PATH_DEBUG (("%s: failed is_kfs_query '%s'\n",__func__, query));
+ return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+ }
+
+ if (!is_kfs_fragment (fragment))
+ {
+ PATH_DEBUG (("%s: failed is_kfs_fragment '%s'\n",__func__, fragment));
+ return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+ }
+
+ free (self->storage);
+ self->storage = new_allocation;
+ self->alloc_size = sz;
+
+ PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+ hier, query, fragment));
+ rc = VPathTransformPathHier (&hier);
+ PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+ hier, query, fragment));
+ if (rc)
+ {
+ self->storage = NULL;
+ return rc;
+ }
+ StringInitCString (&self->path, hier);
+ self->query = query;
+ self->fragment = fragment;
+ PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+ &self->path, self->fragment));
+ return 0;
+}
+
+
+
+static
+rc_t VPathMakeUriAcc (VPath * self, char * new_allocation,
+ size_t sz, char * hier,
+ char * query, char * fragment)
+{
+ rc_t rc;
+
+ assert (self);
+ assert (new_allocation);
+ assert (sz);
+ assert (hier);
+ assert (query);
+ assert (fragment);
+
+ if (!is_acc_hier (hier))
+ {
+ PATH_DEBUG (("%s: failed is_acc_hier '%s'\n", __func__, hier));
+ return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+ }
+
+ if (!is_acc_query (query, &self->options))
+ {
+ PATH_DEBUG (("%s: failed is_kfs_query '%s'\n",__func__, query));
+ return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+ }
+
+ if (!is_kfs_fragment (fragment))
+ {
+ PATH_DEBUG (("%s: failed is_kfs_fragment '%s'\n",__func__, fragment));
+ return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+ }
+
+ free (self->storage);
+ self->storage = new_allocation;
+ self->alloc_size = sz;
+
+ PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+ hier, query, fragment));
+ rc = VPathTransformPathHier (&hier);
+ PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+ hier, query, fragment));
+ if (rc)
+ {
+ self->storage = NULL;
+ return rc;
+ }
+ StringInitCString (&self->path, hier);
+ self->query = query;
+ self->fragment = fragment;
+ PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+ &self->path, self->fragment));
+ return 0;
+}
+
+
+static
+rc_t VPathMakeUriHttp (VPath * self, char * new_allocation,
+ size_t sz, char * hier,
+ char * query, char * fragment)
+{
+ assert (self);
+ assert (new_allocation);
+ assert (sz);
+ assert (hier);
+ assert (query);
+ assert (fragment);
+
+ if (!is_http_query (query, &self->options))
+ {
+ PATH_DEBUG (("%s: failed is_http_query '%s'\n",__func__, query));
+ return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+ }
+
+ free (self->storage);
+ self->storage = new_allocation;
+ self->alloc_size = sz;
+
+ StringInitCString (&self->path, hier);
+ self -> query = query;
+ self->fragment = fragment;
+ PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+ &self->path, self->fragment));
+ return 0;
+}
+
+
+static
+rc_t VPathMakeUriFtp (VPath * self, char * new_allocation,
+ size_t sz, char * hier,
+ char * query, char * fragment)
+{
+ assert (self);
+ assert (new_allocation);
+ assert (sz);
+ assert (hier);
+ assert (query);
+ assert (fragment);
+
+ free (self->storage);
+ self->storage = new_allocation;
+ self->alloc_size = sz;
+
+ StringInitCString (&self->path, hier);
+ self->fragment = fragment;
+ PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+ &self->path, self->fragment));
+ return 0;
+}
+
+static
+rc_t VPathMakeUriNcbiLegrefseq (VPath * self, char * new_allocation,
+ size_t sz, char * hier,
+ char * query, char * fragment)
+{
+ assert (self);
+ assert (new_allocation);
+ assert (sz);
+ assert (hier);
+ assert (query);
+ assert (fragment);
+
+ free (self->storage);
+ self->storage = new_allocation;
+ self->alloc_size = sz;
+
+ StringInitCString (&self->path, hier);
+ self->fragment = fragment;
+ PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+ &self->path, self->fragment));
+ return 0;
+}
+
+
+
+
+static
+VPUri_t scheme_type (const char * scheme)
+{
+ /* We have a "legal" scheme name. We'll only look for specific schemes we
+ * support and mark all others as merely unsupported rather than
+ * differentiate types we don't care about.
+ */
+ switch (tolower(scheme[0]))
+ {
+ case '\0':
+ PATH_DEBUG (("%s: no scheme\n",__func__));
+ return vpuri_none;
+
+ case 'f':
+ if (strcasecmp ("file", scheme) == 0)
+ {
+ PATH_DEBUG (("%s: file scheme\n",__func__));
+ return vpuri_file;
+ }
+ if (strcasecmp (FTP_SCHEME, scheme) == 0)
+ {
+ PATH_DEBUG (("%s: " FTP_SCHEME " scheme\n",__func__));
+ return vpuri_ftp;
+ }
+ break;
+
+ case 'n':
+ if (strcasecmp (NCBI_FILE_SCHEME, scheme) == 0)
+ {
+ PATH_DEBUG (("%s: " NCBI_FILE_SCHEME " scheme\n",__func__));
+ return vpuri_ncbi_vfs;
+ }
+ else if (strcasecmp (NCBI_ACCESSION_SCHEME, scheme) == 0)
+ {
+ PATH_DEBUG (("%s: " NCBI_ACCESSION_SCHEME " scheme\n",__func__));
+ return vpuri_ncbi_acc;
+ }
+ break;
+
+ case 'h':
+ if (strcasecmp (HTTP_SCHEME, scheme) == 0)
+ {
+ PATH_DEBUG (("%s: " HTTP_SCHEME " scheme\n",__func__));
+ return vpuri_http;
+ }
+ break;
+
+ case 'x':
+ if (strcasecmp (NCBI_LEGREFSEQ_SCHEME, scheme) == 0)
+ {
+ PATH_DEBUG (("%s: " NCBI_LEGREFSEQ_SCHEME " scheme\n",__func__));
+ return vpuri_ncbi_legrefseq;
+ }
+ break;
+ }
+
+ return vpuri_not_supported;
+}
+
+
+/*
+ * See RFC 3986 / RFC 3987
+ * We will allow utf-8 in our URI with the extended Unicode characters not
+ * required to be %-encoded. We would have to do this encoding if we wish
+ * to pass this uri out of our environment.
+ *
+ * we demand a valid set of characters for the scheme but do no validation
+ * of the other parts waiting for a scheme specific parsing
+ */
+
+/* pcopy and scheme point to the same place - seems redundant */
+static
+rc_t VPathSplitUri (VPath * self, char ** pcopy, size_t * psiz, char ** scheme, char ** hier,
+ char ** query, char ** fragment)
+{
+ char * copy;
+ size_t z;
+
+ assert (self && pcopy && psiz && scheme && hier && query && fragment);
+
+ *pcopy = *scheme = *hier = *query = *fragment = NULL;
+ *psiz = 0;
+
+ z = self->asciz_size + 1;
+ copy = malloc (z);
+ if (copy == NULL)
+ return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+ strcpy (copy, self->storage);
+ for (;;)
+ {
+ char * s; /* start/scheme */
+ char * h; /* hier-part */
+ char * q; /* query */
+ char * f; /* fragment */
+ char * e; /* EOS (terminating NUL */
+
+ s = copy;
+
+ /* point at NUL at end */
+ f = q = e = s + strlen (self->storage);
+
+ /* find the scheme - terminated by first ':' from the beginning (left) */
+ h = strchr (s, ':');
+
+ /* scheme must be present as must the ':' and not % encoded
+ * and must have some size
+ * the character set for scheme is very limited - ASCII Alphanumeric
+ * with "-", ",", "_", and "~"
+ */
+ if ((h == NULL) || (h == s))
+ {
+ h = s;
+ s = e;
+ break;
+ }
+
+ *h++ = '\0';
+
+ if (! is_scheme (s))
+ {
+ h[-1] = ':';
+ h = s;
+ s = e;
+ break;
+ }
+ if (h != e)
+ {
+ f = strchr (h, '#');
+
+ if (f == NULL)
+ f = e;
+ else
+ *f++ = '\0';
+
+ q = strchr (h, '?');
+
+ if (q == NULL)
+ q = e;
+ else
+ *q++ = '\0';
+ }
+#if 0
+ if (! is_hier (h))
+ break;
+
+ if (! is_query (q))
+ break;
+
+ if (! is_fragment (f))
+ break;
+#endif
+ if (! string_decode (h))
+ break;
+
+ if (! string_decode (q))
+ break;
+
+ if (! string_decode (f))
+ break;
+
+ *scheme = s;
+ *hier = h;
+ *query = q;
+ *fragment = f;
+ *psiz = z; /* WHAT???? */
+ *pcopy = copy;
+ return 0;
+ }
+
+ free (copy);
+ return SILENT_RC (rcFS, rcPath, rcParsing, rcUri, rcInvalid);
+}
+
+
+static
+rc_t VPathParseURI (VPath * self)
+{
+ char * parsed_uri;
+ char * scheme;
+ char * hier;
+ char * query;
+ char * fragment;
+ size_t allocated;
+ rc_t rc;
+
+ PATH_DEBUG (("%s: starting path '%s'\n",__func__,self->path.addr));
+ rc = VPathSplitUri (self, &parsed_uri, &allocated, &scheme, &hier, &query, &fragment);
+ PATH_DEBUG (("%s: allocated %p '%zu'\n",__func__,parsed_uri,allocated));
+ if (rc == 0)
+ {
+ switch (self->scheme = scheme_type (scheme))
+ {
+ case vpuri_invalid:
+ rc = RC (rcFS, rcPath, rcParsing, rcUri, rcInvalid);
+ break;
+
+ case vpuri_not_supported:
+ rc = RC (rcFS, rcPath, rcParsing, rcUri, rcIncorrect);
+ break;
+
+ case vpuri_file:
+ PATH_DEBUG (("%s: call VPathMakeUriFile\n",__func__));
+ rc = VPathMakeUriFile (self, parsed_uri, allocated, hier, query,
+ fragment);
+ break;
+
+ case vpuri_ncbi_vfs:
+ PATH_DEBUG (("%s: call VPathMakeUriKfs\n",__func__));
+ rc = VPathMakeUriKfs (self, parsed_uri, allocated, hier, query,
+ fragment);
+ break;
+
+ case vpuri_ncbi_acc:
+ PATH_DEBUG (("%s: call VPathMakeUriAcc\n",__func__));
+ rc = VPathMakeUriAcc (self, parsed_uri, allocated, hier, query,
+ fragment);
+ break;
+
+ case vpuri_http:
+ PATH_DEBUG (("%s: call VPathMakeUriHttp\n",__func__));
+ rc = VPathMakeUriHttp (self, parsed_uri, allocated, hier, query,
+ fragment);
+
+ break;
+
+ case vpuri_ftp:
+ PATH_DEBUG (("%s: call VPathMakeUriFtp\n",__func__));
+ rc = VPathMakeUriFtp (self, parsed_uri, allocated, hier, query,
+ fragment);
+
+ break;
+
+ case vpuri_ncbi_legrefseq:
+ PATH_DEBUG (("%s: call VPathMakeUriNcbiLegrefseq\n",__func__));
+ rc = VPathMakeUriNcbiLegrefseq (self, parsed_uri, allocated, hier, query,
+ fragment);
+
+ break;
+
+
+ default:
+ rc = RC (rcFS, rcPath, rcParsing, rcUri, rcCorrupt);
+ break;
+ }
+ if (rc)
+ free (parsed_uri);
+ }
+ return rc;
+}
+
+
+static
+rc_t VPathAlloc (VPath ** pself, const char * path_string)
+{
+ rc_t rc;
+ size_t z, zz;
+ VPath * self;
+
+
+ zz = 1 + (z = string_size (path_string));
+
+ OFF_PATH_DEBUG(("%s: %s 'z' '%zu' zz '%zu'\n",__func__,path_string,z,zz));
+
+ self = calloc (sizeof (*self), 1);
+ if (self == NULL)
+ rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+ else
+ {
+ self->storage = malloc (zz);
+ if (self->storage == NULL)
+ rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+ else
+ {
+
+ PATH_DEBUG (("-----\n%s: %p %zu %p %zu\n\n", __func__, self, sizeof (*self),
+ self->storage, zz));
+ self->alloc_size = zz;
+
+ memcpy (self->storage, path_string, zz);
+
+ KRefcountInit (&self->refcount, 1, class_name, "init", self->storage);
+
+ self->asciz_size = z;
+
+ StringInit (&self->path, self->storage, z, string_len(self->storage, z));
+
+ BSTreeInit (&self->options);
+
+ self->fragment = self->storage + z;
+
+ *pself = self;
+
+ OFF_PATH_DEBUG (("%s: path '%S'\n", __func__, &self->path));
+
+ return 0;
+ }
+
+ free (self);
+ }
+ return rc;
+}
+
+
+static
+rc_t VPathMakeValidateParams (VPath ** new_path, const char * path)
+{
+ if (new_path == NULL)
+ return RC (rcFS, rcPath, rcConstructing, rcSelf, rcNull);
+ *new_path = NULL;
+ if (path == NULL)
+ return RC (rcFS, rcPath, rcConstructing, rcParam, rcNull);
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC VPathMake ( VPath ** new_path, const char * posix_path)
+{
+ VPath * self;
+ rc_t rc;
+
+ rc = VPathMakeValidateParams (new_path, posix_path);
+ if (rc == 0)
+ {
+ rc = VPathAlloc (&self, posix_path);
+ if (rc == 0)
+ {
+ rc = VPathParseURI (self);
+
+ /* ignore return - if its bad just leave the path alone even if
+ * it turns out to be bad later */
+ *new_path = self;
+ return 0;
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeSysPath ( VPath ** new_path, const char * sys_path)
+{
+ VPath * self;
+ rc_t rc;
+
+ rc = VPathMakeValidateParams (new_path, sys_path);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "error with VPathMakeValidateParams");
+ return rc;
+ }
+
+ rc = VPathAlloc (&self, sys_path);
+ if (rc)
+ return rc;
+
+ /* first try as URI then as a system specific path */
+ rc = VPathParseURI (self);
+ if (rc)
+ {
+ PATH_DEBUG (("%s: failed VPathParse URI '%R'\n",__func__,rc));
+ rc = VPathTransformSysPath(self);
+ if (rc)
+ PATH_DEBUG (("%s: failed VPathTransformSysPath URI '%R'\n",__func__,rc));
+ }
+ if (rc)
+ VPathDestroy (self);
+ else
+ *new_path = self;
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeVFmt ( VPath ** new_path, const char * fmt, va_list args )
+{
+ size_t len;
+ rc_t rc;
+ char buffer [32*1024]; /* okay we really don't want any larger than this I suppose */
+
+ rc = VPathMakeValidateParams (new_path, fmt);
+ if (rc)
+ return rc;
+
+ rc = string_vprintf (buffer, sizeof (buffer), &len, fmt, args);
+ if (rc)
+ return rc;
+
+ if (len >= sizeof buffer)
+ return RC (rcFS, rcPath, rcConstructing, rcBuffer, rcInsufficient);
+
+ return VPathMake (new_path, buffer);
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeFmt ( VPath ** new_path, const char * fmt, ... )
+{
+ rc_t rc;
+ va_list args;
+
+ va_start (args, fmt);
+ rc = VPathMakeVFmt (new_path, fmt, args);
+ va_end (args);
+
+ return rc;
+}
+
+
+
+/* -----
+ * for this to work
+ * the base path must be a directory or have no hiearchical part at all
+ *
+ * is the srapathmgr is not NULL we first try to resolve the relative path as
+ * an srapath 'alias'
+ */
+LIB_EXPORT rc_t CC VPathMakeDirectoryRelative ( VPath ** new_path, const KDirectory * basedir,
+ const char * relative_path, SRAPath * srapathmgr )
+{
+ VPath * vpath = NULL;
+ VPath * rpath = NULL;
+ VPath * fpath = NULL;
+ char sbuff [8192];
+ rc_t rc;
+
+/* KOutMsg ("%s: %s\n", __func__, relative_path); */
+
+ if (new_path == NULL)
+ return RC (rcVFS, rcPath, rcConstructing, rcSelf, rcNull);
+
+ *new_path = NULL;
+
+ if ((basedir == NULL) ||
+ (relative_path == NULL))
+ return RC (rcVFS, rcPath, rcConstructing, rcParam, rcNull);
+
+ /*
+ * create a VPath off the relative path. This will create one of three things
+ * as of when this was writen:
+ * 1: kfile_acs uri
+ * 2: full path
+ * 3: relative path
+ *
+ * Handling (1) is easy and mirrors the quick out above.
+ */
+ rc = VPathMakeSysPath (&rpath, relative_path);
+ if (rc == 0)
+ {
+ VFSManager *vmgr;
+ bool it_worked = false;
+
+ switch (rpath->scheme)
+ {
+ case vpuri_none:
+ if (string_chr (relative_path, string_size (relative_path), '/') != NULL)
+ goto treat_as_file_path;
+ /* else fall through no break */
+ case vpuri_ncbi_acc:
+ /*
+ * First we'll see if the relative path is actually an accession
+ * in which case we ignore the base dir
+ */
+ rc = VFSManagerMake (&vmgr);
+ if (rc == 0)
+ {
+ VResolver * resolver;
+
+ rc = VFSManagerGetResolver (vmgr, &resolver);
+ if (rc == 0)
+ {
+ rc = VResolverLocal (resolver, rpath, (const VPath **)&fpath);
+ if (rc == 0)
+ it_worked = true;
+
+ else if (GetRCState (rc) == rcNotFound)
+ {
+ rc = VResolverRemote (resolver, rpath, ( const VPath** ) &fpath, NULL);
+ if (rc == 0)
+ it_worked = true;
+ }
+ VResolverRelease (resolver);
+ }
+ VFSManagerRelease (vmgr);
+ }
+ if (it_worked)
+ {
+ *new_path = fpath;
+ rc = 0;
+ }
+ break;
+
+ case vpuri_ncbi_vfs:
+ case vpuri_file:
+ treat_as_file_path:
+ /* full path or relative? */
+ if (rpath->path.addr[0] == '/')
+ {
+ /* full path is done */
+ *new_path = rpath;
+ return 0;
+ }
+ /* our relative path really is relative and must be resolved */
+ rc = KDirectoryResolvePath (basedir, true, sbuff, sizeof sbuff,
+ rpath->path.addr);
+ if (rc == 0)
+ {
+ rc = VPathMake (&vpath, sbuff);
+ if (rc == 0)
+ {
+ char * use_opts;
+
+/* KOutMsg ("%s: 2.5 %s %s\n", __func__, sbuff, vpath->path.addr); */
+
+ use_opts = vpath->query;
+/* KOutMsg ("%s: 2.6 %s %s\n", __func__, sbuff, vpath->path.addr); */
+ if ((use_opts == NULL) || (use_opts[0] == '\0'))
+ {
+/* KOutMsg ("%s: 2.7 %s %s\n", __func__, sbuff, vpath->path.addr); */
+ use_opts = rpath->query;
+ }
+/* KOutMsg ("%s: 2.8 %s %s\n", __func__, sbuff, vpath->path.addr); */
+
+ memmove (sbuff, "ncbi-file:", sizeof "ncbi-file:");
+ memmove (sbuff + sizeof "ncbi-file", vpath->path.addr, vpath->path.size + 1);
+ if (use_opts)
+ {
+ sbuff[sizeof "ncbi-file" + vpath->path.size] = '?';
+ memmove (sbuff + sizeof "ncbi-file" + vpath->path.size + 1, use_opts, string_size (use_opts) + 1);
+ }
+/* KOutMsg ("%s: 2.9 %s %s\n", __func__, sbuff, vpath->path.addr); */
+
+ rc = VPathMake (&fpath, sbuff);
+ if (rc == 0)
+ {
+/* KOutMsg ("%s: 2.10 %s %s\n", __func__, sbuff, vpath->path.addr); */
+
+ VPathRelease (vpath);
+ VPathRelease (rpath);
+ *new_path = fpath;
+ return 0;
+ }
+ VPathRelease (vpath);
+ }
+ }
+ break;
+
+ case vpuri_http:
+ case vpuri_ftp:
+ *new_path = rpath;
+ return 0;
+
+ case vpuri_not_supported:
+ case vpuri_invalid:
+ default:
+ break;
+ }
+ VPathRelease (rpath);
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeCurrentPath ( VPath ** new_path )
+{
+ char buff [4096];
+ char * a = NULL;
+ char * b = buff;
+ size_t z;
+ rc_t rc;
+
+ rc = VPathGetCWD (b, sizeof buff);
+ if (rc)
+ {
+ for (z = 2 * sizeof buff; rc; z += sizeof buff)
+ {
+ b = realloc (a, z);
+ if (b == NULL)
+ {
+ free (a);
+ return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+ }
+ rc = VPathGetCWD (b, z);
+ }
+ }
+ rc = VPathMakeSysPath (new_path, b);
+ if (b != buff)
+ free (b);
+ return rc;
+}
+
+
+/* ----------
+ * VPathReadPath
+ *
+ * Copy the path as a ASCIZ string to the buffer. The form will be the KFS
+ * internal "posix-path" form.
+ */
+LIB_EXPORT rc_t CC VPathReadPath (const VPath * self, char * buffer, size_t buffer_size,
+ size_t * num_read)
+{
+ size_t z = StringSize (&self->path);
+
+ if (buffer_size < z)
+ return RC (rcFS, rcPath, rcReading, rcBuffer, rcInsufficient);
+
+
+ PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+ &self->path, self->fragment));
+ PATH_DEBUG (("%s: should copy '%*.*s' length '%zu'\n", __func__, z, z,
+ self->path.addr, z));
+
+ memcpy ( buffer, self->path.addr, z );
+ if ( buffer_size > z )
+ buffer[ z ] = '\0';
+ if ( num_read != NULL )
+ *num_read = z;
+
+ PATH_DEBUG (("%s: copied '%*.*s' length '%zu'\n", __func__, z, z,
+ buffer, z));
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC VPathReadQuery (const VPath * self, char * buffer, size_t buffer_size,
+ size_t * num_read)
+{
+ if (num_read == NULL)
+ return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
+ *num_read = 0;
+
+ if (buffer == NULL)
+ return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
+
+ if (self == NULL)
+ return RC (rcFS, rcPath, rcAccessing, rcSelf, rcNull);
+
+ *num_read = string_copy (buffer, buffer_size, self->query,
+ self->alloc_size);
+ return 0;
+}
+
+
+LIB_EXPORT rc_t CC VPathReadFragment (const VPath * self, char * buffer, size_t buffer_size,
+ size_t * num_read)
+{
+ if (num_read == NULL)
+ return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
+ *num_read = 0;
+
+ if (buffer == NULL)
+ return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
+
+ if (self == NULL)
+ return RC (rcFS, rcPath, rcAccessing, rcSelf, rcNull);
+
+
+
+ *num_read = string_copy (buffer, buffer_size, self->fragment,
+ self->alloc_size);
+ return 0;
+}
+
+
+/* ----------
+ */
+LIB_EXPORT rc_t CC VPathOption (const VPath * self, VPOption_t option,
+ char * buffer, size_t buffer_size,
+ size_t * num_read)
+{
+ size_t o = (size_t)option; /* some oddness to use a value instead of a pointer */
+ BSTNode * n = BSTreeFind (&self->options, (void*)o, VPOptionCmp);
+ VPOption * opt;
+
+ if (n == NULL)
+ return RC (rcFS, rcPath, rcAccessing, rcParam, rcNotFound);
+ opt = (VPOption*)n;
+ *num_read = string_copy (buffer, buffer_size, opt->value.addr, opt->value.size);
+ return 0;
+}
+
+
+LIB_EXPORT VPUri_t VPathGetUri_t (const VPath * self)
+{
+ if (self)
+ {
+ VPUri_t v = self->scheme;
+ if ((v < vpuri_invalid) ||
+ (v >= vpuri_count))
+ v = vpuri_invalid;
+ return v;
+ }
+ return vpuri_invalid;
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeString ( const VPath * self, const String ** uri )
+{
+ rc_t rc = 0;
+ if ( uri == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcParam, rcNull );
+ else
+ {
+ *uri = NULL;
+ if ( self == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ /* this version is a bit of a hack */
+ struct
+ {
+ String s;
+ char b[ 1 ];
+ } * t;
+ size_t z = self->path.addr - self->storage;
+
+ t = malloc ( sizeof * t + self->alloc_size );
+ if ( t == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcMemory, rcExhausted );
+ else
+ {
+ char *s = &( t->b[ 0 ] );
+
+ if ( z != 0 )
+ {
+ memcpy ( s, self->storage, z - 1 );
+ s [ z - 1 ] = ':';
+ }
+
+ memcpy ( &s[ z ], self->path.addr, self->path.size );
+ z += self->path.size;
+
+ if ( self->query != NULL && self->query[ 0 ] != '\0' )
+ {
+ size_t y = string_size ( self->query );
+ s[ z++ ] = '?';
+ memcpy ( &s[ z ], self->query, y );
+ z += y;
+ }
+
+ if ( self->fragment != NULL && self->fragment[ 0 ] != '\0' )
+ {
+ size_t y = string_size ( self->fragment );
+ s[ z++ ] = '#';
+ memcpy ( &s[ z ], self->fragment, y );
+ z += y;
+ }
+
+ s[ z ] = '\0';
+ StringInit ( &t->s, s, z, string_len ( s, z ) );
+ *uri = &t->s;
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathGetScheme ( const VPath * self, const String ** scheme )
+{
+ rc_t rc = 0;
+ if ( scheme == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcParam, rcNull );
+ else
+ {
+ *scheme = NULL;
+ if ( self == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ size_t z = ( self->path.addr - self->storage );
+ if ( z > 0 )
+ {
+ struct
+ {
+ String s;
+ char b[ 1 ];
+ } * t;
+ t = malloc ( sizeof * t + z );
+ if ( t == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcMemory, rcExhausted );
+ else
+ {
+ size_t i;
+ char *s = &( t->b[ 0 ] );
+ memcpy ( s, self->storage, z - 1 );
+ for ( i = 0; i < z; ++i )
+ s[ i ] = tolower( s[ i ] );
+ s[ z ] = '\0';
+ StringInit ( &t->s, s, z, string_len ( s, z ) );
+ *scheme = &t->s;
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathGetScheme_t( const VPath * self, VPUri_t * uri_type )
+{
+ rc_t rc = 0;
+ if ( uri_type == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcParam, rcNull );
+ else
+ {
+ *uri_type = vpuri_invalid;
+ if ( self == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcSelf, rcNull );
+ else
+ *uri_type = self->scheme;
+ }
+ return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathGetPath ( const VPath * self, const String ** path )
+{
+ rc_t rc = 0;
+ if ( path == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcParam, rcNull );
+ else
+ {
+ *path = NULL;
+ if ( self == NULL )
+ rc = RC ( rcVFS, rcPath, rcAccessing, rcSelf, rcNull );
+ else
+ {
+ if ( StringSize ( &self->path ) > 0 )
+ rc = StringCopy ( path, &self->path );
+ }
+ }
+ return rc;
+}
diff --git a/libs/vfs/resolver-priv.h b/libs/vfs/resolver-priv.h
new file mode 100644
index 0000000..860c601
--- /dev/null
+++ b/libs/vfs/resolver-priv.h
@@ -0,0 +1,144 @@
+/*===========================================================================
+*
+* Public Domain Notice
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_resolver_priv_
+#define _h_resolver_priv_
+
+#ifndef _h_vfs_resolver_
+#include <vfs/resolver.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * KConfig Repository Structure
+ * expressed in pseudo BNF:
+ *
+ * base-config
+ * = "repository" <category>*
+ * ;
+ *
+ * category
+ * = "remote" <remote-sub-category>*
+ * | "site" <site-sub-category>*
+ * | "user" <user-sub-category>*
+ * ;
+ *
+ * remote-sub-category
+ * = "main" <public-remote-named-repository>*
+ * | "aux" <public-remote-named-repository>*
+ * | "protected" <protected-remote-named-repository>*
+ * ;
+ *
+ * site-sub-category
+ * = "main" <site-named-repository>*
+ * | "aux" <site-named-repository>*
+ * ;
+ *
+ * user-sub-category
+ * = "public" <public-user-named-repository>*
+ * | "protected" ID <protected-user-named-repository>*
+ * ;
+ *
+ * public-remote-named-repository
+ * = ID <public-remote-repository>
+ * ;
+ *
+ * protected-remote-named-repository
+ * = ID <protected-remote-repository>
+ * ;
+ *
+ * site-named-repository
+ * = ID <site-repository>
+ * ;
+ *
+ * public-user-named-repository
+ * = ID <public-user-repository>
+ * ;
+ *
+ * protected-user-named-repository
+ * = ID <protected-user-repository>
+ * ;
+ *
+ * public-remote-repository
+ * = <public-remote-root> [ <disabled> ] <apps>*
+ * ;
+ *
+ * protected-remote-repository
+ * = <protected-remote-root> [ <disabled> ] <apps>*
+ * ;
+ *
+ * site-repository
+ * = <local-root> [ <disabled> ] <apps>*
+ * ;
+ *
+ * public-user-repository
+ * = <local-root> [ <disabled> ] [ <cache-enabled> ] <apps>*
+ * ;
+ *
+ * protected-user-repository
+ * = <local-root> <passwd> <download-ticket> [ <disabled> ] [ <cache-enabled> ] <apps>*
+ * ;
+ *
+ * apps
+ * = "refseq" <app>
+ * | "sra" <app>
+ * | "wgs" <app>
+ * ;
+ *
+ * app
+ * = [ <disabled> ] "volumes" <volume>*
+ * ;
+ *
+ * volume
+ * = <expansion-alg> "=" <path-list>
+ * ;
+ *
+ * expansion-alg
+ * = "flat" | "sra1000" | "sra1024" | "fuse1000" | "refseq" | ...
+ * ;
+ *
+ * disabled
+ * = "disabled" "=" ( "true" | * ) # any value other than "true" is false
+ * ;
+ *
+ * cache-enabled
+ * = "cache-enabled" "=" ( "true" | * ) # any value other than "true" is false
+ * ;
+ */
+
+#define rcResolver rcTree
+#define rcRepository rcDirectory
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_resolver_priv_ */
diff --git a/libs/vfs/resolver.c b/libs/vfs/resolver.c
new file mode 100644
index 0000000..69f522d
--- /dev/null
+++ b/libs/vfs/resolver.c
@@ -0,0 +1,2694 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#include <vfs/extern.h>
+#include "resolver-priv.h"
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <kns/manager.h>
+#include <kns/curl-file.h>
+#include <kns/KCurlRequest.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfg/repository.h>
+#include <kfg/config.h>
+#include <klib/text.h>
+#include <klib/vector.h>
+#include <klib/refcount.h>
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <klib/data-buffer.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <vfs/path-priv.h>
+#include "path-priv.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+/* to turn of CGI name resolution for
+ any refseq accessions */
+#define NO_REFSEQ_CGI 1
+
+/* to turn of CGI name resolution for
+ legacy WGS packages used by refseq */
+#define NO_LEGACY_WGS_REFSEQ_CGI NO_REFSEQ_CGI
+
+
+/*--------------------------------------------------------------------------
+ * String
+ */
+static
+void CC string_whack ( void *obj, void *ignore )
+{
+ StringWhack ( ( String* ) obj );
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * VResolverAccToken
+ * breaks up an accession into parts
+ *
+ * "acc" is entire accession as given
+ *
+ * the remainder is divided like so:
+ *
+ * [<prefix>_]<alpha><digits>[.<ext1>[.<ext2>]]
+ *
+ * prefix is optional
+ * alpha can be zero length iff prefix is not zero length
+ * digits must be non-zero length
+ * ext1 and ext2 are optional
+ */
+typedef struct VResolverAccToken VResolverAccToken;
+struct VResolverAccToken
+{
+ String acc;
+ String prefix;
+ String alpha;
+ String digits;
+ String ext1;
+ String ext2;
+};
+
+/*--------------------------------------------------------------------------
+ * VResolverAlg
+ * represents a set of zero or more volumes
+ * each of which is addressed using a particular expansion algorithm
+ */
+typedef enum
+{
+ appUnknown,
+ appAny,
+ appREFSEQ,
+ appSRA,
+ appWGS,
+ appCount
+} VResolverAppID;
+
+typedef enum
+{
+ algCGI,
+ algSRAFlat,
+ algSRA1024,
+ algSRA1000,
+ algFUSE1000,
+ algREFSEQ,
+ algWGSFlat,
+ algWGS,
+ algFuseWGS,
+ algSRA_NCBI,
+ algSRA_EBI,
+
+ /* leave as last value */
+ algUnknown
+
+} VResolverAlgID;
+
+typedef enum
+{
+ cacheDisallow,
+ cacheAllow
+} VResolverCacheAllow;
+
+typedef struct VResolverAlg VResolverAlg;
+struct VResolverAlg
+{
+ /* volume paths - stored as String* */
+ Vector vols;
+
+ /* root path - borrowed reference */
+ const String *root;
+
+ /* download ticket - borrowed reference
+ non-NULL means that the root is a
+ resolver CGI. also, don't rely on
+ presence of any volumes... */
+ const String *ticket;
+
+ /* app_id helps to filter out volumes by app */
+ VResolverAppID app_id;
+
+ /* how to expand an accession */
+ VResolverAlgID alg_id;
+
+ /* a property of the repository */
+ bool protected;
+
+ /* whether the volumes are cache-capable
+ in particularl, enabled if cache forced */
+ bool cache_capable;
+
+ /* whether the volumes are cache-enabled */
+ bool cache_enabled;
+
+ /* whether the volume is disabled in config */
+ bool disabled;
+};
+
+
+/* Whack
+ */
+static
+void CC VResolverAlgWhack ( void *item, void *ignore )
+{
+ VResolverAlg *self = item;
+
+ /* drop any volumes */
+ VectorWhack ( & self -> vols, string_whack, NULL );
+
+ /* everything else is a borrowed reference */
+
+ free ( self );
+}
+
+/* Make
+ */
+static
+rc_t VResolverAlgMake ( VResolverAlg **algp, const String *root,
+ VResolverAppID app_id, VResolverAlgID alg_id, bool protected, bool disabled )
+{
+ rc_t rc;
+ VResolverAlg *alg = calloc ( 1, sizeof * alg );
+ if ( alg == NULL )
+ rc = RC ( rcVFS, rcMgr, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ VectorInit ( & alg -> vols, 0, 8 );
+ alg -> root = root;
+ alg -> app_id = app_id;
+ alg -> alg_id = alg_id;
+ alg -> protected = protected;
+ alg -> disabled = disabled;
+ rc = 0;
+ }
+
+ * algp = alg;
+ return rc;
+}
+
+/* MakeeLocalWGSRefseqURI
+ * create a special URI that tells KDB how to open this
+ * obscured table, hidden away within a KAR file
+ */
+static
+rc_t VResolverAlgMakeLocalWGSRefseqURI ( const VResolverAlg *self,
+ const String *vol, const String *exp, const String *acc, const VPath ** path )
+{
+ if ( self -> root == NULL )
+ return VPathMakeFmt ( ( VPath** ) path, NCBI_FILE_SCHEME ":%S/%S#tbl/%S", vol, exp, acc );
+ return VPathMakeFmt ( ( VPath** ) path, NCBI_FILE_SCHEME ":%S/%S/%S#tbl/%S", self -> root, vol, exp, acc );
+}
+
+/* MakeeRemoteWGSRefseqURI
+ * create a special URI that tells KDB how to open this
+ * obscured table, hidden away within a KAR file
+ */
+static
+rc_t VResolverAlgMakeRemoteWGSRefseqURI ( const VResolverAlg *self,
+ const char *url, const String *acc, const VPath ** path )
+{
+ return VPathMakeFmt ( ( VPath** ) path, "%s#tbl/%S", url, acc );
+}
+
+/* MakeRemotePath
+ * the path is known to exist in the remote file system
+ * turn it into a VPath
+ */
+static
+rc_t VResolverAlgMakeRemotePath ( const VResolverAlg *self,
+ const char *url, const VPath ** path )
+{
+ return VPathMakeFmt ( ( VPath** ) path, url );
+}
+
+/* MakeLocalPath
+ * the path is known to exist in the local file system
+ * turn it into a VPath
+ */
+static
+rc_t VResolverAlgMakeLocalPath ( const VResolverAlg *self,
+ const String *vol, const String *exp, const VPath ** path )
+{
+ if ( self -> root == NULL )
+ return VPathMakeFmt ( ( VPath** ) path, "%S/%S", vol, exp );
+ return VPathMakeFmt ( ( VPath** ) path, "%S/%S/%S", self -> root, vol, exp );
+}
+
+/* expand_accession
+ * expand accession according to algorithm
+ */
+static
+rc_t expand_algorithm ( const VResolverAlg *self, const VResolverAccToken *tok,
+ char *expanded, size_t bsize, size_t *size, bool legacy_wgs_refseq )
+{
+ rc_t rc;
+ uint32_t num;
+
+ switch ( self -> alg_id )
+ {
+ case algCGI:
+ return RC ( rcVFS, rcResolver, rcResolving, rcType, rcIncorrect );
+ case algSRAFlat:
+ rc = string_printf ( expanded, bsize, size,
+ "%S%S.sra", & tok -> alpha, & tok -> digits );
+ break;
+ case algSRA1024:
+ num = ( uint32_t ) strtoul ( tok -> digits . addr, NULL, 10 );
+ rc = string_printf ( expanded, bsize, size,
+ "%S/%06u/%S%S.sra", & tok -> alpha, num >> 10, & tok -> alpha, & tok -> digits );
+ break;
+ case algSRA1000:
+ num = ( uint32_t ) ( tok -> alpha . size + tok -> digits . size - 3 );
+ rc = string_printf ( expanded, bsize, size,
+ "%S/%.*S/%S%S.sra", & tok -> alpha, num, & tok -> acc, & tok -> alpha, & tok -> digits );
+ break;
+ case algFUSE1000:
+ num = ( uint32_t ) ( tok -> alpha . size + tok -> digits . size - 3 );
+ rc = string_printf ( expanded, bsize, size,
+ "%S/%.*S/%S%S/%S%S.sra", & tok -> alpha, num, & tok -> acc,
+ & tok -> alpha, & tok -> digits, & tok -> alpha, & tok -> digits );
+ break;
+ case algREFSEQ:
+ if ( ! legacy_wgs_refseq )
+ rc = string_printf ( expanded, bsize, size, "%S", & tok -> acc );
+ else
+ rc = string_printf ( expanded, bsize, size, "%S%.2S", & tok -> alpha, & tok -> digits );
+ break;
+ case algWGSFlat:
+ num = ( uint32_t ) ( tok -> alpha . size + 2 );
+ if ( tok -> prefix . size != 0 )
+ num += tok -> prefix . size + 1;
+ rc = string_printf ( expanded, bsize, size,
+ "%.*S", num, & tok -> acc );
+ break;
+ case algWGS:
+ num = ( uint32_t ) ( tok -> alpha . size + 2 );
+ if ( tok -> prefix . size != 0 )
+ num += tok -> prefix . size + 1;
+ rc = string_printf ( expanded, bsize, size,
+ "WGS/%.2s/%.2s/%.*S", tok -> alpha . addr, tok -> alpha . addr + 2, num, & tok -> acc );
+ break;
+ case algFuseWGS:
+ num = ( uint32_t ) ( tok -> alpha . size + 2 );
+ if ( tok -> prefix . size != 0 )
+ num += tok -> prefix . size + 1;
+ rc = string_printf ( expanded, bsize, size,
+ "%.2s/%.2s/%.*S", tok -> alpha . addr, tok -> alpha . addr + 2, num, & tok -> acc );
+ break;
+ case algSRA_NCBI:
+ num = ( uint32_t ) strtoul ( tok -> digits . addr, NULL, 10 );
+ rc = string_printf ( expanded, bsize, size,
+ "%S/%06u/%S%S", & tok -> alpha, num >> 10, & tok -> alpha, & tok -> digits );
+ break;
+ case algSRA_EBI:
+ num = ( uint32_t ) ( tok -> alpha . size + tok -> digits . size - 3 );
+ rc = string_printf ( expanded, bsize, size,
+ "%S/%.*S/%S%S", & tok -> alpha, num, & tok -> acc, & tok -> alpha, & tok -> digits );
+ break;
+ default:
+ return RC ( rcVFS, rcResolver, rcResolving, rcType, rcUnrecognized );
+ }
+
+ return rc;
+}
+
+/* LocalResolve
+ * resolve an accession into a VPath or not found
+ *
+ * 1. expand accession according to algorithm
+ * 2. search all volumes for accession
+ * 3. return not found or new VPath
+ */
+static
+rc_t VResolverAlgLocalResolve ( const VResolverAlg *self,
+ const KDirectory *wd, const VResolverAccToken *tok,
+ const VPath ** path, bool legacy_wgs_refseq, bool for_cache )
+{
+ KPathType kpt;
+ uint32_t i, count;
+
+ /* expanded accession */
+ String exp;
+ size_t size;
+ char expanded [ 256 ];
+
+ /* in some cases, "root" is NULL */
+ const String *vol, *root = self -> root;
+
+ /* expand the accession */
+ rc_t rc = expand_algorithm ( self, tok, expanded, sizeof expanded, & size, legacy_wgs_refseq );
+
+ /* should never have a problem here... */
+ if ( rc != 0 )
+ return rc;
+
+ /* if this is to detect a cache file, append extension */
+ if ( for_cache )
+ {
+ size += string_copy ( & expanded [ size ], sizeof expanded - size, ".cache", sizeof ".cache" - 1 );
+ if ( size == sizeof expanded )
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+ }
+
+ /* turn the expanded portion into a String
+ we know that size is also length due to
+ accession content rules */
+ StringInit ( & exp, expanded, size, ( uint32_t ) size );
+
+ /* remove the cache extension */
+ if ( for_cache )
+ {
+ exp . len -= sizeof ".cache" - 1;
+ exp . size -= sizeof ".cache" - 1;
+ }
+
+ /* now search all volumes */
+ count = VectorLength ( & self -> vols );
+ if ( root == NULL )
+ {
+ for ( i = 0; i < count; ++ i )
+ {
+ vol = VectorGet ( & self -> vols, i );
+ kpt = KDirectoryPathType ( wd, "%.*s/%.*s"
+ , ( int ) vol -> size, vol -> addr
+ , ( int ) size, expanded );
+ switch ( kpt & ~ kptAlias )
+ {
+ case kptFile:
+ case kptDir:
+ if ( legacy_wgs_refseq )
+ return VResolverAlgMakeLocalWGSRefseqURI ( self, vol, & exp, & tok -> acc, path );
+ return VResolverAlgMakeLocalPath ( self, vol, & exp, path );
+ default:
+ break;
+ }
+ }
+ }
+ else
+ {
+ for ( i = 0; i < count; ++ i )
+ {
+ vol = VectorGet ( & self -> vols, i );
+ kpt = KDirectoryPathType ( wd, "%.*s/%.*s/%.*s"
+ , ( int ) root -> size, root -> addr
+ , ( int ) vol -> size, vol -> addr
+ , ( int ) size, expanded );
+ switch ( kpt & ~ kptAlias )
+ {
+ case kptFile:
+ case kptDir:
+ if ( legacy_wgs_refseq )
+ return VResolverAlgMakeLocalWGSRefseqURI ( self, vol, & exp, & tok -> acc, path );
+ return VResolverAlgMakeLocalPath ( self, vol, & exp, path );
+ default:
+ break;
+ }
+ }
+ }
+
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+/* ParseResolverCGIResponse_1_0
+ * expect single row table, with this structure:
+ *
+ * <accession>|<download-ticket>|<url>|<result-code>|<message>
+ */
+static
+rc_t VResolverAlgParseResolverCGIResponse_1_0 ( const char *start, size_t size, const VPath ** path, const String *acc )
+{
+ rc_t rc;
+ KLogLevel lvl;
+ uint32_t result_code;
+ const char *url_start, *url_end;
+ const char *ticket_start, *ticket_end;
+
+ /* skip over accession */
+ const char *end = start + size;
+ const char *sep = string_chr ( start, size, '|' );
+ if ( sep == NULL )
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+
+ /* get the download-ticket */
+ start = sep + 1;
+ sep = string_chr ( start, end - start, '|' );
+ if ( sep == NULL )
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+
+ /* capture ticket */
+ ticket_start = start;
+ ticket_end = sep;
+
+ /* get the url */
+ start = sep + 1;
+ sep = string_chr ( start, end - start, '|' );
+ if ( sep == NULL )
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+
+ /* capture url */
+ url_start = start;
+ url_end = sep;
+
+ /* get the result code */
+ start = sep + 1;
+ sep = string_chr ( start, end - start, '|' );
+ if ( sep == NULL )
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+ result_code = strtoul ( start, NULL, 10 );
+
+ /* get the message */
+ start = sep + 1;
+ sep = string_chr ( start, end - start, '\n' );
+ if ( sep == NULL )
+ {
+ sep = string_chr ( start, end - start, '\r' );
+ if ( sep == NULL )
+ sep = end;
+ }
+ else if ( sep > start && sep [ -1 ] == '\r' )
+ {
+ -- sep;
+ }
+
+ switch ( result_code / 100 )
+ {
+ case 1:
+ /* informational response
+ not much we can do here */
+ lvl = klogInt;
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+ break;
+
+ case 2:
+ /* successful response
+ but can only handle 200 */
+ if ( result_code == 200 )
+ {
+ /* detect protected response */
+ if ( ticket_end > ticket_start )
+ {
+ return VPathMakeFmt ( ( VPath** ) path, "%.*s?tic=%.*s"
+ , ( uint32_t ) ( url_end - url_start ), url_start
+ , ( uint32_t ) ( ticket_end - ticket_start ), ticket_start
+ );
+ }
+
+ /* normal public response */
+ return VPathMakeFmt ( ( VPath** ) path, "%.*s", ( uint32_t ) ( url_end - url_start ), url_start );
+ }
+
+ lvl = klogInt;
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+ break;
+
+ case 3:
+ /* redirection
+ currently this is being handled by our request object */
+ lvl = klogInt;
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+ break;
+
+ case 4:
+ /* client error */
+ lvl = klogErr;
+ switch ( result_code )
+ {
+ case 400:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcMessage, rcInvalid );
+ break;
+ case 401:
+ case 403:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcQuery, rcUnauthorized );
+ break;
+ case 404:
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+ case 410:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+ break;
+ default:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+ }
+ break;
+
+ case 5:
+ /* server error */
+ lvl = klogSys;
+ switch ( result_code )
+ {
+ case 503:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcDatabase, rcNotAvailable );
+ break;
+ case 504:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcTimeout, rcExhausted );
+ break;
+ default:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+ }
+ break;
+
+ default:
+ lvl = klogInt;
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+ }
+
+ /* log message to user */
+ PLOGERR ( lvl, ( lvl, rc, "failed to resolve accession '$(acc)' - $(msg) ( $(code) )",
+ "acc=%S,msg=%.*s,code=%u", acc, ( uint32_t ) ( sep - start ), start, result_code ) );
+ return rc;
+}
+
+
+/* ParseResolverCGIResponse
+ * the response should be NUL terminated
+ * but should also be close to the size of result
+ */
+static
+rc_t VResolverAlgParseResolverCGIResponse ( const KDataBuffer *result, const VPath ** path, const String *acc )
+{
+ /* the textual response */
+ const char *start = ( const void* ) result -> base;
+ size_t i, size = KDataBufferBytes ( result );
+
+ /* peel back buffer to significant bytes */
+ while ( size > 0 && start [ size - 1 ] == 0 )
+ -- size;
+
+ /* skip over blanks */
+ for ( i = 0; i < size; ++ i )
+ {
+ if ( ! isspace ( start [ i ] ) )
+ break;
+ }
+
+ /* at this point, we expect only version 1.0 */
+ if ( string_cmp ( & start [ i ], size - i, "#1.0", sizeof "#1.0" - 1, sizeof "#1.0" - 1 ) == 0 )
+ {
+ do
+ {
+ /* accept version line */
+ i += sizeof "#1.0" - 1;
+
+ /* must be followed by eoln */
+ if ( start [ i ] == '\r' && start [ i + 1 ] == '\n' )
+ i += 2;
+ else if ( start [ i ] == '\n' )
+ i += 1;
+ else
+ break;
+
+ /* parse 1.0 response table */
+ return VResolverAlgParseResolverCGIResponse_1_0 ( & start [ i ], size - i, path, acc );
+ }
+ while ( false );
+ }
+
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+/* RemoteProtectedResolve
+ * use NCBI CGI to resolve accession into URL
+ */
+static
+rc_t VResolverAlgRemoteProtectedResolve ( const VResolverAlg *self,
+ const KNSManager *kns, const String *acc,
+ const VPath ** path, bool legacy_wgs_refseq )
+{
+ struct KCurlRequest *req;
+ rc_t rc = KNSManagerMakeRequest ( kns, & req, self -> root -> addr, false );
+ if ( rc == 0 )
+ {
+ String name, val;
+
+ /* build up POST information: */
+ CONST_STRING ( & name, "version" );
+ CONST_STRING (& val, "1.0" );
+ rc = KCurlRequestAddSField ( req, & name, & val );
+ if ( rc == 0 )
+ {
+ CONST_STRING ( & name, "acc" );
+ rc = KCurlRequestAddSField ( req, & name, acc );
+ }
+ if ( rc == 0 && legacy_wgs_refseq )
+ {
+ CONST_STRING ( & name, "ctx" );
+ CONST_STRING (& val, "refseq" );
+ rc = KCurlRequestAddSField ( req, & name, & val );
+ }
+ if ( rc == 0 && self -> ticket != NULL )
+ {
+ CONST_STRING ( & name, "tic" );
+ rc = KCurlRequestAddSField ( req, & name, self -> ticket );
+ }
+
+ /* execute post */
+ if ( rc == 0 )
+ {
+ KDataBuffer result;
+ memset ( & result, 0, sizeof result );
+ rc = KCurlRequestPerform ( req, & result );
+ if ( rc == 0 )
+ {
+ /* expect a table as a NUL-terminated string, but
+ having close to the number of bytes in results */
+ rc = VResolverAlgParseResolverCGIResponse ( & result, path, acc );
+ KDataBufferWhack ( & result );
+ }
+ }
+
+ KCurlRequestRelease ( req );
+ }
+
+ return rc == 0 ? 0 : RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+/* RemoteResolve
+ * resolve an accession into a VPath or not found
+ *
+ * 1. expand accession according to algorithm
+ * 2. search all volumes for accession
+ * 3. return not found or new VPath
+ */
+static
+rc_t VResolverAlgRemoteResolve ( const VResolverAlg *self,
+ const KNSManager *kns, const VResolverAccToken *tok,
+ const VPath ** path, const KFile ** opt_file_rtn,
+ bool legacy_wgs_refseq )
+{
+ rc_t rc;
+ uint32_t i, count;
+
+ /* expanded accession */
+ String exp;
+ size_t size;
+ char expanded [ 256 ];
+
+ const String *root;
+
+ /* check for download ticket */
+ if ( self -> alg_id == algCGI
+#if NO_LEGACY_WGS_REFSEQ_CGI
+ && ! legacy_wgs_refseq
+#endif
+ )
+ {
+ rc = VResolverAlgRemoteProtectedResolve ( self,
+ kns, & tok -> acc, path, legacy_wgs_refseq );
+ if (rc == 0 && path != NULL && *path != NULL &&
+ opt_file_rtn != NULL && *opt_file_rtn == NULL)
+ {
+ const String *s = NULL;
+ rc_t rc = VPathMakeString(*path, &s);
+ if (rc != 0) {
+ LOGERR(klogInt, rc,
+ "failed to make string from remote protected path");
+ }
+ else {
+ rc = KCurlFileMake(opt_file_rtn, s->addr, false);
+ if (rc != 0) {
+ PLOGERR(klogInt, (klogInt, rc,
+ "failed to open file for $(path)", "path=%s", s->addr));
+ }
+ free((void*)s);
+ }
+ }
+ return rc;
+ }
+
+ /* for remote, root can never be NULL */
+ root = self -> root;
+
+ /* expand the accession */
+ rc = expand_algorithm ( self, tok, expanded, sizeof expanded, & size, legacy_wgs_refseq );
+
+ /* should never have a problem here... */
+ if ( rc != 0 )
+ return rc;
+
+ /* turn the expanded portion into a String
+ we know that size is also length due to
+ accession content rules */
+ StringInit ( & exp, expanded, size, ( uint32_t ) size );
+
+ /* now search all remote volumes */
+ count = VectorLength ( & self -> vols );
+ for ( i = 0; i < count; ++ i )
+ {
+ char url [ 8192 ];
+ const String *vol = VectorGet ( & self -> vols, i );
+ rc = string_printf ( url, sizeof url, NULL, "%S/%S/%S", root, vol, & exp );
+ if ( rc == 0 )
+ {
+ const KFile *f;
+ rc = KCurlFileMake ( & f, url, false );
+ if ( rc == 0 )
+ {
+ if ( opt_file_rtn != NULL )
+ * opt_file_rtn = f;
+ else
+ KFileRelease ( f );
+
+ if ( legacy_wgs_refseq )
+ return VResolverAlgMakeRemoteWGSRefseqURI ( self, url, & tok -> acc, path );
+ return VResolverAlgMakeRemotePath ( self, url, path );
+ }
+ }
+ }
+
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+/* CacheResolve
+ * try to resolve accession for currently cached file
+ */
+static
+rc_t VResolverAlgCacheResolve ( const VResolverAlg *self,
+ const KDirectory *wd, const VResolverAccToken *tok,
+ const VPath ** path, bool legacy_wgs_refseq )
+{
+ /* see if the cache file already exists */
+ const bool for_cache = true;
+ rc_t rc = VResolverAlgLocalResolve ( self, wd, tok, path, legacy_wgs_refseq, for_cache );
+ if ( rc == 0 )
+ return 0;
+
+ /* TBD - see if any of these volumes is a good candidate for creating a file */
+
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+
+/* MakeCachePath
+ * we have an accession that matches this volume
+ * create a path for it
+ */
+static
+rc_t VResolverAlgMakeCachePath ( const VResolverAlg *self,
+ const VResolverAccToken *tok, const VPath ** path, bool legacy_wgs_refseq )
+{
+ uint32_t i, count;
+
+ /* expanded accession */
+ String exp;
+ size_t size;
+ char expanded [ 256 ];
+
+ const String *vol;
+
+ /* expand the accession */
+ rc_t rc = expand_algorithm ( self, tok, expanded, sizeof expanded, & size, legacy_wgs_refseq );
+
+ /* should never have a problem here... */
+ if ( rc != 0 )
+ return rc;
+
+ /* turn the expanded portion into a String
+ we know that size is also length due to
+ accession content rules */
+ StringInit ( & exp, expanded, size, ( uint32_t ) size );
+
+ /* now search all volumes */
+ count = VectorLength ( & self -> vols );
+ for ( i = 0; i < count; ++ i )
+ {
+ vol = VectorGet ( & self -> vols, i );
+ return VResolverAlgMakeLocalPath ( self, vol, & exp, path );
+ }
+
+ return RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNotFound );
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * VResolver
+ */
+struct VResolver
+{
+ /* root paths - stored as String* */
+ Vector roots;
+
+ /* volume algorithms - stored as VResolverAlg* */
+ Vector local;
+ Vector remote;
+
+ /* working directory for testing local paths */
+ const KDirectory *wd;
+
+ /* if there is a protected remote resolver,
+ we will need a KNS manager */
+ const KNSManager *kns;
+
+ /* if there is a working protected repository,
+ store the download ticket here */
+ const String *ticket;
+
+ KRefcount refcount;
+
+ /* counters for various app volumes */
+ uint32_t num_app_vols [ appCount ];
+};
+
+
+/* "process" global settings
+ * actually, they are library-closure global
+ */
+static atomic32_t enable_local, enable_remote, enable_cache;
+
+
+/* Whack
+ */
+static
+rc_t VResolverWhack ( VResolver *self )
+{
+ KRefcountWhack ( & self -> refcount, "VResolver" );
+
+ /* drop all remote volume sets */
+ VectorWhack ( & self -> remote, VResolverAlgWhack, NULL );
+
+ /* drop local volume sets */
+ VectorWhack ( & self -> local, VResolverAlgWhack, NULL );
+
+ /* drop download ticket */
+ if ( self -> ticket != NULL )
+ StringWhack ( ( String* ) self -> ticket );
+
+ /* drop root paths */
+ VectorWhack ( & self -> roots, string_whack, NULL );
+
+ /* release kns */
+ if ( self -> kns != NULL )
+ KNSManagerRelease ( self -> kns );
+
+ /* release directory onto local file system */
+ KDirectoryRelease ( self -> wd );
+
+ free ( self );
+ return 0;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT
+rc_t CC VResolverAddRef ( const VResolver * self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "VResolver" ) )
+ {
+ case krefOkay:
+ break;
+ case krefZero:
+ return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcIncorrect );
+ case krefLimit:
+ return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcExhausted );
+ case krefNegative:
+ return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcInvalid );
+ default:
+ return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcUnknown );
+ }
+ }
+ return 0;
+}
+
+LIB_EXPORT
+rc_t CC VResolverRelease ( const VResolver * self )
+{
+ rc_t rc = 0;
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "VResolver" ) )
+ {
+ case krefOkay:
+ case krefZero:
+ break;
+ case krefWhack:
+ VResolverWhack ( ( VResolver* ) self );
+ break;
+ case krefNegative:
+ return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcInvalid );
+ default:
+ rc = RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcUnknown );
+ break;
+ }
+ }
+ return rc;
+}
+
+
+/* get_accession_code
+ */
+static
+uint32_t get_accession_code ( const String * accession, VResolverAccToken *tok )
+{
+#if USE_VPATH_OPTIONS_STRINGS
+#error this thing is wrong
+#else
+ uint32_t code;
+
+ const char *acc = accession -> addr;
+ size_t i, size = accession -> size;
+
+ /* capture the whole accession */
+ tok -> acc = * accession;
+
+ /* scan prefix or alpha */
+ for ( i = 0; i < size; ++ i )
+ {
+ if ( ! isalpha ( acc [ i ] ) )
+ break;
+ }
+
+ /* terrible situation - unrecognizable */
+ if ( i == size || i == 0 || i >= 16 )
+ {
+ StringInit ( & tok -> prefix, acc, 0, 0 );
+ StringInit ( & tok -> alpha, acc, i, i );
+ StringInit ( & tok -> digits, & acc [ i ], 0, 0 );
+ tok -> ext1 = tok -> ext2 = tok -> digits;
+ return 0;
+ }
+
+ /* if stopped on '_', we have a prefix */
+ if ( acc [ i ] == '_' )
+ {
+ /* prefix
+ store only its presence, not length */
+ code = 1 << 4 * 4;
+ StringInit ( & tok -> prefix, acc, i, i );
+
+ /* remove prefix */
+ acc += ++ i;
+ size -= i;
+
+ /* scan for alpha */
+ for ( i = 0; i < size; ++ i )
+ {
+ if ( ! isalpha ( acc [ i ] ) )
+ break;
+ }
+
+ if ( i == size || i >= 16 )
+ {
+ StringInit ( & tok -> alpha, acc, i, i );
+ StringInit ( & tok -> digits, & acc [ i ], 0, 0 );
+ tok -> ext1 = tok -> ext2 = tok -> digits;
+ return 0;
+ }
+
+ code |= i << 4 * 3;
+ StringInit ( & tok -> alpha, acc, i, i );
+ }
+ else if ( ! isdigit ( acc [ i ] ) )
+ {
+ StringInit ( & tok -> prefix, acc, 0, 0 );
+ StringInit ( & tok -> alpha, acc, i, i );
+ StringInit ( & tok -> digits, & acc [ i ], 0, 0 );
+ tok -> ext1 = tok -> ext2 = tok -> digits;
+ return 0;
+ }
+ else
+ {
+ /* alpha */
+ code = i << 4 * 3;
+ StringInit ( & tok -> prefix, acc, 0, 0 );
+ StringInit ( & tok -> alpha, acc, i, i );
+ }
+
+ /* remove alpha */
+ acc += i;
+ size -= i;
+
+ /* scan digits */
+ for ( i = 0; i < size; ++ i )
+ {
+ if ( ! isdigit ( acc [ i ] ) )
+ break;
+ }
+
+ /* record digits */
+ StringInit ( & tok -> digits, acc, i, i );
+ StringInit ( & tok -> ext1, & acc [ i ], 0, 0 );
+ tok -> ext2 = tok -> ext1;
+
+ if ( i == 0 || i >= 16 )
+ return 0;
+
+ code |= i << 4 * 2;
+
+ /* normal return point for SRA */
+ if ( i == size )
+ return code;
+
+ /* check for extension */
+ if ( acc [ i ] != '.' )
+ return 0;
+
+ /* remove digit */
+ acc += ++ i;
+ size -= i;
+
+ /* scan numeric extension */
+ for ( i = 0; i < size; ++ i )
+ {
+ if ( ! isdigit ( acc [ i ] ) )
+ break;
+ }
+
+ if ( i == 0 || i >= 16 )
+ return 0;
+
+ /* record the actual extension */
+ StringInit ( & tok -> ext1, acc, i, i );
+ /* codify the extension simply as present, not by its length */
+ code |= 1 << 4 * 1;
+
+ if ( i == size )
+ return code;
+
+ if ( acc [ i ] != '.' )
+ return 0;
+
+
+ /* remove first extension */
+ acc += ++ i;
+ size -= i;
+
+ /* scan 2nd numeric extension */
+ for ( i = 0; i < size; ++ i )
+ {
+ if ( ! isdigit ( acc [ i ] ) )
+ break;
+ }
+
+ if ( i == 0 || i >= 16 )
+ return 0;
+
+ StringInit ( & tok -> ext2, acc, i, i );
+ code |= 1 << 4 * 0;
+
+ if ( i == size )
+ return code;
+
+ /* no other patterns are accepted */
+ return 0;
+#endif
+}
+
+
+/* get_accession_app
+ */
+static
+VResolverAppID get_accession_app ( const String * accession, bool refseq_ctx,
+ VResolverAccToken *tok, bool *legacy_wgs_refseq )
+{
+ VResolverAppID app;
+ uint32_t code = get_accession_code ( accession, tok );
+
+ /* disregard extensions at this point */
+ switch ( code >> 4 * 2 )
+ {
+ case 0x015: /* e.g. "J01415" or "J01415.2" */
+ case 0x026: /* e.g. "CM000071" or "CM000039.2" */
+ case 0x126: /* e.g. "NZ_DS995509.1" */
+ app = appREFSEQ;
+ break;
+
+ case 0x036: /* e.g. "SRR012345" */
+ case 0x037: /* e.g. "SRR0123456" */
+ case 0x038: /* e.g. "SRR01234567" */
+ case 0x039: /* e.g. "SRR012345678" */
+ app = appSRA;
+ break;
+
+ case 0x106: /* e.g. "NC_000012.10" */
+ case 0x109: /* e.g. "NW_003315935.1", "GPC_000000393.1" */
+ app = appREFSEQ;
+ break;
+
+ case 0x042: /* e.g. "AAAB01" is WGS package name */
+ case 0x048: /* e.g. "AAAA01000001" */
+ case 0x049: /* contig can be 6 or 7 digits */
+ case 0x142: /* e.g. "NZ_AAEW01" */
+ case 0x148: /* e.g. "NZ_AAEW01000001" */
+ case 0x149:
+ app = appWGS;
+ break;
+
+ default:
+ /* TBD - people appear to be able to throw anything into refseq,
+ so anything unrecognized we may as well test out there...
+ but this should not stay the case */
+ app = appREFSEQ;
+ }
+
+ if ( app == appWGS )
+ {
+ /* if we know this is for refseq, clobber it here */
+ if ( refseq_ctx )
+ {
+ app = appREFSEQ;
+ * legacy_wgs_refseq = true;
+ }
+ }
+
+ return app;
+}
+
+
+/* LocalResolve
+ * resolve an accession into a VPath or not found
+ *
+ * 1. determine the type of accession we have, i.e. its "app"
+ * 2. search all local algorithms of app type for accession
+ * 3. return not found or new VPath
+ */
+static
+rc_t VResolverLocalResolve ( const VResolver *self,
+ const String * accession, const VPath ** path, bool refseq_ctx )
+{
+ rc_t rc;
+ uint32_t i, count;
+
+ VResolverAccToken tok;
+ bool legacy_wgs_refseq = false;
+ VResolverAppID app = get_accession_app ( accession, refseq_ctx, & tok, & legacy_wgs_refseq );
+
+ /* search all local volumes by app and accession algorithm expansion */
+ count = VectorLength ( & self -> local );
+ for ( i = 0; i < count; ++ i )
+ {
+ const VResolverAlg *alg = VectorGet ( & self -> local, i );
+ if ( alg -> app_id == app )
+ {
+ const bool for_cache = false;
+ rc = VResolverAlgLocalResolve ( alg, self -> wd, & tok, path, legacy_wgs_refseq, for_cache );
+ if ( rc == 0 )
+ return 0;
+ }
+ }
+
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+static
+bool VPathHasRefseqContext ( const VPath * accession )
+{
+ size_t num_read;
+ char option [ 64 ];
+ rc_t rc = VPathOption ( accession, vpopt_vdb_ctx, option, sizeof option, & num_read );
+ if ( rc != 0 )
+ return false;
+ return ( num_read == sizeof "refseq" - 1 &&
+ strcase_cmp ( "refseq", sizeof "refseq" - 1,
+ option, num_read, num_read ) == 0 );
+}
+
+
+/* Local
+ * Find an existing local file/directory that is named by the accession.
+ * rcState of rcNotFound means it does not exist.
+ *
+ * other rc code for failure are possible.
+ *
+ * Accession must be an ncbi-acc scheme or a simple name with no
+ * directory paths.
+ */
+LIB_EXPORT
+rc_t CC VResolverLocal ( const VResolver * self,
+ const VPath * accession, const VPath ** path )
+{
+ rc_t rc;
+
+ if ( path == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcParam, rcNull );
+ else
+ {
+ * path = NULL;
+
+ if ( self == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcSelf, rcNull );
+ else if ( accession == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNull );
+ else
+ {
+ bool refseq_ctx = false;
+ VPUri_t uri_type = VPathGetUri_t ( accession );
+ switch ( uri_type )
+ {
+ case vpuri_none:
+ /* this is a simple spec -
+ check for not being a POSIX path */
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+ if ( string_chr ( accession -> path . addr, accession -> path . size, '/' ) == NULL )
+ return VResolverLocalResolve ( self, & accession -> path, path, refseq_ctx );
+#endif
+
+ /* no break */
+ case vpuri_not_supported:
+ case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+ case vpuri_file:
+#endif
+ case vpuri_http:
+ case vpuri_ftp:
+ case vpuri_ncbi_legrefseq:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcIncorrect );
+ break;
+
+ case vpuri_ncbi_acc:
+ {
+ refseq_ctx = VPathHasRefseqContext ( accession );
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+ return VResolverLocalResolve ( self, & accession -> path, path, refseq_ctx );
+#endif
+ }
+
+ default:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcInvalid );
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* LocalEnable
+ * modify settings for using local repositories,
+ * meaning site, user-public and user-protected.
+ *
+ * "enable" [ IN ] - enable or disable local access,
+ * or follow settings in KConfig
+ *
+ * returns the previous state of "remote-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ * shared libraries in separate closures will have separate
+ * state. this can only occur if dynamic ( manual ) loading of
+ * shared libraries is used, and will not occur with normal
+ * usage. in VDB-3 the state will be stored with the process,
+ * not the library.
+ */
+LIB_EXPORT VResolverEnableState CC VResolverLocalEnable ( const VResolver * self, VResolverEnableState enable )
+{
+ int32_t val, cur, prior;
+
+ if ( self == NULL )
+ return false;
+
+ /* convert "VResolverEnableState" to 32-bit signed integer for atomic operation */
+ val = ( int32_t ) enable;
+
+ /* before performing atomic swap, get the current setting,
+ and return right away if it is already set correctly */
+ prior = atomic32_read ( & enable_local );
+ if ( prior != val ) do
+ {
+ cur = prior;
+ prior = atomic32_test_and_set ( & enable_local, val, prior );
+ }
+ while ( prior != cur );
+
+ return prior;
+}
+
+
+/* RemoteEnable
+ * apply or remove a process-wide enabling of remote access
+ * regardless of configuration settings
+ *
+ * "enable" [ IN ] - if "true", enable all remote access
+ * if false, use settings from configuration.
+ *
+ * returns the previous state of "remote-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ * shared libraries in separate closures will have separate
+ * state. this can only occur if dynamic ( manual ) loading of
+ * shared libraries is used, and will not occur with normal
+ * usage. in VDB-3 the state will be stored with the process,
+ * not the library.
+ */
+LIB_EXPORT VResolverEnableState CC VResolverRemoteEnable ( const VResolver * self, VResolverEnableState enable )
+{
+ int32_t val, cur, prior;
+
+ if ( self == NULL )
+ return false;
+
+ /* convert "VResolverEnableState" to 32-bit signed integer for atomic operation */
+ val = ( int32_t ) enable;
+
+ /* before performing atomic swap, get the current setting,
+ and return right away if it is already set correctly */
+ prior = atomic32_read ( & enable_remote );
+ if ( prior != val ) do
+ {
+ cur = prior;
+ prior = atomic32_test_and_set ( & enable_remote, val, prior );
+ }
+ while ( prior != cur );
+
+ return prior;
+}
+
+
+/* CacheEnable
+ * modify settings for caching files in user repositories
+ *
+ * "enable" [ IN ] - enable or disable user repository cache,
+ * or follow settings in KConfig
+ *
+ * returns the previous state of "cache-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ * shared libraries in separate closures will have separate
+ * state. this can only occur if dynamic ( manual ) loading of
+ * shared libraries is used, and will not occur with normal
+ * usage. in VDB-3 the state will be stored with the process,
+ * not the library.
+ */
+LIB_EXPORT VResolverEnableState CC VResolverCacheEnable ( const VResolver * self, VResolverEnableState enable )
+{
+ int32_t val, cur, prior;
+
+ if ( self == NULL )
+ return false;
+
+ /* convert "VResolverEnableState" to 32-bit signed integer for atomic operation */
+ val = ( int32_t ) enable;
+
+ /* before performing atomic swap, get the current setting,
+ and return right away if it is already set correctly */
+ prior = atomic32_read ( & enable_cache );
+ if ( prior != val ) do
+ {
+ cur = prior;
+ prior = atomic32_test_and_set ( & enable_cache, val, prior );
+ }
+ while ( prior != cur );
+
+ return prior;
+}
+
+
+/* RemoteResolve
+ * resolve an accession into a remote VPath or not found
+ * may optionally open a KFile to the object in the process
+ * of finding it
+ *
+ * 2. determine the type of accession we have, i.e. its "app"
+ * 3. search all local algorithms of app type for accession
+ * 4. return not found or new VPath
+ */
+static
+rc_t VResolverRemoteResolve ( const VResolver *self,
+ const String * accession, const VPath ** path,
+ const KFile ** opt_file_rtn, bool refseq_ctx )
+{
+ rc_t rc, try_rc;
+ uint32_t i, count;
+
+ VResolverAccToken tok;
+ VResolverAppID app, wildCard;
+ bool legacy_wgs_refseq = false;
+
+ /* here, determine whether remote access is globally disabled */
+ VResolverEnableState remote_state = atomic32_read ( & enable_remote );
+ if ( remote_state == vrAlwaysDisable )
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+
+ /* subject the accession to pattern recognition */
+ app = get_accession_app ( accession, refseq_ctx, & tok, & legacy_wgs_refseq );
+
+ /* search all remote volumes by app and accession algorithm expansion */
+ count = VectorLength ( & self -> remote );
+
+ /* allow matching wildcard app */
+ wildCard = appAny;
+#if NO_REFSEQ_CGI
+ if ( app == appREFSEQ )
+ wildCard = -1;
+#endif
+
+ /* no error recorded yet */
+ rc = 0;
+
+ /* test for forced enable, which applies only to main guys
+ TBD - limit to main sub-category */
+ if ( remote_state == vrAlwaysEnable )
+ {
+ for ( i = 0; i < count; ++ i )
+ {
+ const VResolverAlg *alg = VectorGet ( & self -> remote, i );
+ if ( alg -> app_id == app || alg -> app_id == wildCard )
+ {
+ try_rc = VResolverAlgRemoteResolve ( alg, self -> kns, & tok, path, opt_file_rtn, legacy_wgs_refseq );
+ if ( try_rc == 0 )
+ return 0;
+ if ( rc == 0 )
+ rc = try_rc;
+ }
+ }
+ }
+ else
+ {
+ for ( i = 0; i < count; ++ i )
+ {
+ const VResolverAlg *alg = VectorGet ( & self -> remote, i );
+ if ( ( alg -> app_id == app || alg -> app_id == wildCard ) && ! alg -> disabled )
+ {
+ try_rc = VResolverAlgRemoteResolve ( alg, self -> kns, & tok, path, opt_file_rtn, legacy_wgs_refseq );
+ if ( try_rc == 0 )
+ return 0;
+ if ( rc == 0 )
+ rc = try_rc;
+ }
+ }
+ }
+
+ if ( rc != 0 )
+ return rc;
+
+ return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+/* Remote
+ * Find an existing remote file that is named by the accession.
+ *
+ * rcState of rcNotFound means it did not exist and can not be
+ * downloaded. Probably a bad accession name.
+ *
+ * Need a specific rc for no network configured.
+ * Need a specific rc for network access permitted.
+ *
+ * Other rc code for failure are possible.
+ *
+ * Accession must be an ncbi-acc scheme or a simple name with no
+ * directory paths.
+ *
+ * "opt_file_rtn" [ OUT, NULL OKAY ] - optional return parameter for
+ * any KFile that may be opened as a result of resolution. This can
+ * happen if resolving an accession involves opening a URL to a
+ * remote server, for example, in which case the KFile can be returned.
+ */
+LIB_EXPORT
+rc_t CC VResolverRemote ( const VResolver * self,
+ const VPath * accession, const VPath ** path,
+ const KFile ** opt_file_rtn )
+{
+ rc_t rc;
+
+ if ( path == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcParam, rcNull );
+ else
+ {
+ * path = NULL;
+
+ if ( opt_file_rtn != NULL )
+ * opt_file_rtn = NULL;
+
+ if ( self == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcSelf, rcNull );
+ else if ( accession == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNull );
+ else
+ {
+ bool refseq_ctx = false;
+ VPUri_t uri_type = VPathGetUri_t ( accession );
+ switch ( uri_type )
+ {
+ case vpuri_none:
+ /* this is a simple spec -
+ check for not being a POSIX path */
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+ if ( string_chr ( accession -> path . addr, accession -> path . size, '/' ) == NULL )
+ return VResolverRemoteResolve ( self, & accession -> path, path, opt_file_rtn, refseq_ctx );
+#endif
+
+ /* no break */
+ case vpuri_not_supported:
+ case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+ case vpuri_file:
+#endif
+ case vpuri_http:
+ case vpuri_ftp:
+ case vpuri_ncbi_legrefseq:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcIncorrect );
+ break;
+
+ case vpuri_ncbi_acc:
+ {
+ refseq_ctx = VPathHasRefseqContext ( accession );
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+ return VResolverRemoteResolve ( self, & accession -> path, path, opt_file_rtn, refseq_ctx );
+#endif
+ }
+
+ default:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcInvalid );
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* ExtractURLAccessionApp
+ * examine a URL for accession portion,
+ * and try to recognize what app it belongs to
+ */
+static
+VResolverAppID VResolverExtractURLAccessionApp ( const VResolver *self, const VPath * url,
+ String * accession, VResolverAccToken * tok, bool *legacy_wgs_refseq )
+{
+ const char *p;
+ bool refseq_ctx = false;
+
+ /* have the difficulty here of determining whether there is
+ a table fragment, which would indicate that the download
+ is appREFSEQ even if the accession indicates appWGS. */
+
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+ * accession = url -> path;
+ if ( url -> fragment != NULL && url -> fragment [ 0 ] != 0 )
+ refseq_ctx = true;
+#endif
+ p = string_rchr ( accession -> addr, accession -> size, '/' );
+ if ( p != NULL )
+ {
+ accession -> size -= ++ p - accession -> addr;
+ accession -> addr = p;
+ accession -> len = string_len ( p, accession -> size );
+ }
+ p = string_rchr ( accession -> addr, accession -> size, '.' );
+ if ( p != NULL )
+ {
+ if ( strcase_cmp ( p, accession -> size - ( p - accession -> addr ),
+ ".sra", sizeof ".sra" - 1, -1 ) == 0 )
+ {
+ accession -> size -= sizeof ".sra" - 1;
+ accession -> len -= sizeof ".sra" - 1;
+ }
+ else if ( strcase_cmp ( p, accession -> size - ( p - accession -> addr ),
+ ".wgs", sizeof ".wgs" - 1, -1 ) == 0 )
+ {
+ accession -> size -= sizeof ".wgs" - 1;
+ accession -> len -= sizeof ".wgs" - 1;
+ }
+ }
+
+ /* should have something looking like an accession.
+ determine its app to see if we were successful */
+ return get_accession_app ( accession, refseq_ctx, tok, legacy_wgs_refseq );
+}
+
+static
+bool VPathHasDownloadTicket ( const VPath * url )
+{
+ size_t num_read;
+ char option [ 64 ];
+ rc_t rc = VPathOption ( url, vpopt_gap_ticket, option, sizeof option, & num_read );
+ return rc == 0;
+}
+
+
+/* Cache
+ * Find a cache directory that might or might not contain a partially
+ * downloaded file.
+ *
+ * Accession must be an ncbi-acc scheme, an http url or a simple name with no
+ * directory paths. All three should return the same directory URL as a VPath. (?)
+ * Or should it be a directory or a file url depending upon finding a partial
+ * download? This would require co-ordination with all download mechanisms that
+ * we permit.
+ *
+ * With refseq holding wgs objects we have a case were the downloaded file is not
+ * named the same as the original accession as the file archive you want is a
+ * container for other files.
+ *
+ * Find local will give a path that has a special scheme in these cases.
+ * Find remote will give the url for the container that contains the accession
+ * so using the returned VPath from resolve remote is better than the original
+ * accession in this one case. I think...
+ */
+LIB_EXPORT
+rc_t CC VResolverCache ( const VResolver * self,
+ const VPath * url, const VPath ** path, uint64_t file_size )
+{
+ rc_t rc;
+
+ VResolverEnableState cache_state = atomic32_read ( & enable_cache );
+
+ if ( path == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcParam, rcNull );
+ else
+ {
+ * path = NULL;
+
+ if ( self == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcSelf, rcNull );
+ else if ( url == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcParam, rcNull );
+ else if ( cache_state == vrAlwaysDisable )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNotFound );
+ else
+ {
+ VPUri_t uri_type = VPathGetUri_t ( url );
+ switch ( uri_type )
+ {
+ case vpuri_http:
+ {
+ String accession;
+ VResolverAccToken tok;
+ bool legacy_wgs_refseq = false;
+ VResolverAppID app = VResolverExtractURLAccessionApp ( self,
+ url, & accession, & tok, & legacy_wgs_refseq );
+
+ /* going to walk the local volumes, and remember
+ which one was best. actually, we have no algorithm
+ for determining it, so it's just the comment for TBD */
+ const VResolverAlg *alg, *best = NULL;
+
+ /* search the volumes for a cache-enabled place */
+ uint32_t i, count = VectorLength ( & self -> local );
+
+ /* check for protected status by presence of a download ticket */
+ bool protected = VPathHasDownloadTicket ( url );
+
+ /* check for cache-enable override */
+ if ( cache_state == vrAlwaysEnable )
+ {
+ for ( i = 0; i < count; ++ i )
+ {
+ alg = VectorGet ( & self -> local, i );
+ if ( alg -> cache_capable && alg -> protected == protected &&
+ ( alg -> app_id == app || alg -> app_id == appAny ) )
+ {
+ /* try to find an existing cache file
+ NB - race condition exists unless
+ we do something with lock files */
+ rc = VResolverAlgCacheResolve ( alg, self -> wd, & tok, path, legacy_wgs_refseq );
+ if ( rc == 0 )
+ return 0;
+
+ /* just remember the first as best for now */
+ if ( best == NULL )
+ best = alg;
+ }
+ }
+ }
+ else
+ {
+ for ( i = 0; i < count; ++ i )
+ {
+ alg = VectorGet ( & self -> local, i );
+ if ( alg -> cache_enabled && alg -> protected == protected &&
+ ( alg -> app_id == app || alg -> app_id == appAny ) )
+ {
+ /* try to find an existing cache file
+ NB - race condition exists unless
+ we do something with lock files */
+ rc = VResolverAlgCacheResolve ( alg, self -> wd, & tok, path, legacy_wgs_refseq );
+ if ( rc == 0 )
+ return 0;
+
+ /* just remember the first as best for now */
+ if ( best == NULL )
+ best = alg;
+ }
+ }
+ }
+
+ /* no existing cache file was found,
+ so create a new one using the best
+ TBD - this should remember a volume path */
+ if ( best == NULL )
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNotFound );
+ else
+ rc = VResolverAlgMakeCachePath ( best, & tok, path, legacy_wgs_refseq );
+ break;
+ }
+ default:
+ rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcInvalid );
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* LoadVolume
+ * capture volume path and other information
+ */
+static
+rc_t VResolverAlgLoadVolume ( VResolverAlg *self, uint32_t *num_vols, const char *start, size_t size )
+{
+ rc_t rc = 0;
+
+#if 0
+ /* trim volume whitespace */
+ while ( size != 0 && isspace ( start [ 0 ] ) )
+ {
+ ++ start;
+ -- size;
+ }
+ while ( size != 0 && isspace ( start [ size - 1 ] ) )
+ -- size;
+#endif
+
+ /* trim trailing slashes */
+ while ( size != 0 && start [ size - 1 ] == '/' )
+ -- size;
+
+ /* now see if the string survives */
+ if ( size != 0 )
+ {
+ String loc_vol_str;
+ const String *vol_str;
+ StringInit ( & loc_vol_str, start, size, string_len ( start, size ) );
+ rc = StringCopy ( & vol_str, & loc_vol_str );
+ if ( rc == 0 )
+ {
+ rc = VectorAppend ( & self -> vols, NULL, vol_str );
+ if ( rc == 0 )
+ {
+ * num_vols += 1;
+ return 0;
+ }
+
+ StringWhack ( vol_str );
+ }
+ }
+
+ return rc;
+}
+
+/* LoadVolumes
+ *
+ * path-list
+ * = PATH
+ * | <path-list> ':' PATH ;
+ */
+static
+rc_t VResolverAlgLoadVolumes ( VResolverAlg *self, uint32_t *num_vols, const String *vol_list )
+{
+ const char *start = vol_list -> addr;
+ const char *end = & vol_list -> addr [ vol_list -> size ];
+ const char *sep = string_chr ( start, end - start, ':' );
+ while ( sep != NULL )
+ {
+ rc_t rc = VResolverAlgLoadVolume ( self, num_vols, start, sep - start );
+ if ( rc != 0 )
+ return rc;
+ start = sep + 1;
+ sep = string_chr ( start, end - start, ':' );
+ }
+ return VResolverAlgLoadVolume ( self, num_vols, start, end - start );
+}
+
+/* LoadAlgVolumes
+ *
+ * volumes
+ * = <path-list> ;
+ */
+static
+rc_t VResolverLoadAlgVolumes ( Vector *algs, const String *root, const String *ticket,
+ VResolverCacheAllow allow_cache, VResolverAppID app_id, VResolverAlgID alg_id,
+ uint32_t *num_vols, const String *vol_list, bool protected, bool disabled, bool caching )
+{
+ VResolverAlg *alg;
+ rc_t rc = VResolverAlgMake ( & alg, root, app_id, alg_id, protected, disabled );
+ if ( rc == 0 )
+ {
+ alg -> ticket = ticket;
+ alg -> cache_capable = allow_cache == cacheAllow;
+ alg -> cache_enabled = caching;
+
+ if ( ticket != NULL )
+ alg -> alg_id = algCGI;
+
+ rc = VResolverAlgLoadVolumes ( alg, num_vols, vol_list );
+ if ( rc == 0 && VectorLength ( & alg -> vols ) != 0 )
+ {
+ rc = VectorAppend ( algs, NULL, alg );
+ if ( rc == 0 )
+ return 0;
+ }
+
+ VResolverAlgWhack ( alg, NULL );
+ }
+
+ return rc;
+}
+
+/* LoadApp
+ *
+ * alg-block
+ * = <alg-type> <volumes> ;
+ *
+ * alg-type
+ * = "flat" | "sraFlat" | "sra1024" | "sra1000" | "fuse1000"
+ * | "refseq" | "wgs" | "fuseWGS" | "ncbi" | "ddbj" | "ebi" ;
+ */
+static
+rc_t VResolverLoadVolumes ( Vector *algs, const String *root, const String *ticket,
+ VResolverCacheAllow allow_cache, VResolverAppID app_id, uint32_t *num_vols,
+ const KConfigNode *vols, bool resolver_cgi, bool protected, bool disabled, bool caching )
+{
+ KNamelist *algnames;
+ rc_t rc = KConfigNodeListChildren ( vols, & algnames );
+ if ( rc == 0 )
+ {
+ uint32_t i, count;
+ rc = KNamelistCount ( algnames, & count );
+ for ( i = 0; i < count && rc == 0; ++ i )
+ {
+ const char *algname;
+ rc = KNamelistGet ( algnames, i, & algname );
+ if ( rc == 0 )
+ {
+ const KConfigNode *alg;
+ rc = KConfigNodeOpenNodeRead ( vols, & alg, algname );
+ if ( rc == 0 )
+ {
+ VResolverAlgID alg_id = algUnknown;
+
+ /* if using CGI for resolution */
+ if ( resolver_cgi || strcmp ( algname, "cgi" ) == 0 )
+ alg_id = algCGI;
+ /* stored in a flat directory with ".sra" extension */
+ else if ( strcmp ( algname, "sraFlat" ) == 0 )
+ alg_id = algSRAFlat;
+ /* stored in a three-level directory with 1K banks and ".sra" extension */
+ else if ( strcmp ( algname, "sra1024" ) == 0 )
+ alg_id = algSRA1024;
+ /* stored in a three-level directory with 1000 banks and ".sra" extension */
+ else if ( strcmp ( algname, "sra1000" ) == 0 )
+ alg_id = algSRA1000;
+ /* stored in a four-level directory with 1000 banks and ".sra" extension */
+ else if ( strcmp ( algname, "fuse1000" ) == 0 )
+ alg_id = algFUSE1000;
+ /* stored in a flat directory with no extension */
+ else if ( strcmp ( algname, "refseq" ) == 0 )
+ alg_id = algREFSEQ;
+ /* stored in a flat directory with no extension */
+ else if ( strcmp ( algname, "wgsFlat" ) == 0 )
+ alg_id = algWGSFlat;
+ /* stored in a multi-level directory with no extension */
+ else if ( strcmp ( algname, "wgs" ) == 0 )
+ alg_id = algWGS;
+ else if ( strcmp ( algname, "fuseWGS" ) == 0 )
+ alg_id = algFuseWGS;
+ /* stored in a three-level directory with 1K banks and no extension */
+ else if ( strcmp ( algname, "ncbi" ) == 0 ||
+ strcmp ( algname, "ddbj" ) == 0 )
+ alg_id = algSRA_NCBI;
+ /* stored in a three-level directory with 1000 banks and no extension */
+ else if ( strcmp ( algname, "ebi" ) == 0 )
+ alg_id = algSRA_EBI;
+
+ if ( alg_id != algUnknown )
+ {
+ String *vol_list;
+ rc = KConfigNodeReadString ( alg, & vol_list );
+ if ( rc == 0 )
+ {
+ if ( StringLength ( vol_list ) != 0 )
+ {
+ rc = VResolverLoadAlgVolumes ( algs, root, ticket, allow_cache,
+ app_id, alg_id, num_vols, vol_list, protected, disabled, caching );
+ }
+ StringWhack ( vol_list );
+ }
+ }
+
+ KConfigNodeRelease ( alg );
+ }
+ }
+ }
+
+ KNamelistRelease ( algnames );
+ }
+ return rc;
+}
+
+/* LoadApp
+ *
+ * app
+ * = [ <disabled> ] [ <cache-enabled> ] <vol-group> ;
+ *
+ * disabled
+ * = "disabled" '=' ( "true" | "false" ) ;
+ *
+ * cache-enabled
+ * = "cache-enabled" '=' ( "true" | "false" ) ;
+ *
+ * vol-group
+ * = "volumes" <alg-block>* ;
+ */
+static
+rc_t VResolverLoadApp ( VResolver *self, Vector *algs, const String *root, const String *ticket,
+ VResolverCacheAllow allow_cache, VResolverAppID app_id, uint32_t *num_vols,
+ const KConfigNode *app, bool resolver_cgi, bool protected, bool disabled, bool caching )
+{
+ const KConfigNode *node;
+
+ /* test for disabled app - it is entirely possible */
+ rc_t rc = KConfigNodeOpenNodeRead ( app, & node, "disabled" );
+ if ( rc == 0 )
+ {
+ bool app_disabled = false;
+ rc = KConfigNodeReadBool ( node, & app_disabled );
+ KConfigNodeRelease ( node );
+ if ( rc == 0 && app_disabled && algs == & self -> local )
+ return 0;
+ disabled |= app_disabled;
+ }
+
+ /* test again for cache enabled */
+ if ( allow_cache == cacheAllow )
+ {
+ rc = KConfigNodeOpenNodeRead ( app, & node, "cache-enabled" );
+ if ( rc == 0 )
+ {
+ /* allow this node to override current value */
+ bool cache;
+ rc = KConfigNodeReadBool ( node, & cache );
+ KConfigNodeRelease ( node );
+ if ( rc == 0 )
+ caching = cache;
+ }
+ }
+
+ /* get volumes */
+ rc = KConfigNodeOpenNodeRead ( app, & node, "volumes" );
+ if ( GetRCState ( rc ) == rcNotFound )
+ rc = 0;
+ else if ( rc == 0 )
+ {
+ rc = VResolverLoadVolumes ( algs, root, ticket, allow_cache,
+ app_id, num_vols, node, resolver_cgi, protected, disabled, caching );
+ KConfigNodeRelease ( node );
+ }
+
+ return rc;
+}
+
+/* LoadApps
+ *
+ * app-block
+ * = <app-name> <app> ;
+ *
+ * app-name
+ * = "refseq" | "sra" | "wgs" ;
+ */
+static
+rc_t VResolverLoadApps ( VResolver *self, Vector *algs, const String *root,
+ const String *ticket, VResolverCacheAllow allow_cache, const KConfigNode *apps,
+ bool resolver_cgi, bool protected, bool disabled, bool caching )
+{
+ KNamelist *appnames;
+ rc_t rc = KConfigNodeListChildren ( apps, & appnames );
+ if ( rc == 0 )
+ {
+ uint32_t i, count;
+ rc = KNamelistCount ( appnames, & count );
+ if ( resolver_cgi && rc == 0 && count == 0 )
+ {
+ VResolverAlg *cgi;
+ rc = VResolverAlgMake ( & cgi, root, appAny, algCGI, protected, disabled );
+ if ( rc == 0 )
+ {
+ rc = VectorAppend ( algs, NULL, cgi );
+ if ( rc == 0 )
+ {
+ ++ self -> num_app_vols [ appAny ];
+ return 0;
+ }
+ }
+ }
+ else for ( i = 0; i < count && rc == 0; ++ i )
+ {
+ const char *appname;
+ rc = KNamelistGet ( appnames, i, & appname );
+ if ( rc == 0 )
+ {
+ const KConfigNode *app;
+ rc = KConfigNodeOpenNodeRead ( apps, & app, appname );
+ if ( rc == 0 )
+ {
+ VResolverAppID app_id = appUnknown;
+ if ( strcmp ( appname, "refseq" ) == 0 )
+ app_id = appREFSEQ;
+ else if ( strcmp ( appname, "sra" ) == 0 )
+ app_id = appSRA;
+ else if ( strcmp ( appname, "wgs" ) == 0 )
+ app_id = appWGS;
+
+ rc = VResolverLoadApp ( self, algs, root, ticket, allow_cache, app_id,
+ & self -> num_app_vols [ app_id ], app, resolver_cgi, protected, disabled, caching );
+
+ KConfigNodeRelease ( app );
+ }
+ }
+ }
+ KNamelistRelease ( appnames );
+ }
+ return rc;
+}
+
+/* LoadRepo
+ *
+ * repository
+ * = [ <disabled> ] [ <cache-enabled> ] <root> <app-group> ;
+ *
+ * disabled
+ * = "disabled" '=' ( "true" | "false" ) ;
+ *
+ * cache-enabled
+ * = "cache-enabled" '=' ( "true" | "false" ) ;
+ *
+ * root
+ * = "root" '=' PATH ;
+ *
+ * app-group
+ * = "apps" <app-block>* ;
+ */
+static
+rc_t VResolverLoadRepo ( VResolver *self, Vector *algs, const KConfigNode *repo,
+ const String *ticket, VResolverCacheAllow allow_cache, bool protected )
+{
+ const KConfigNode *node;
+ bool caching, resolver_cgi;
+
+ /* test for disabled repository */
+ bool disabled = false;
+ rc_t rc = KConfigNodeOpenNodeRead ( repo, & node, "disabled" );
+ if ( rc == 0 )
+ {
+ rc = KConfigNodeReadBool ( node, & disabled );
+ KConfigNodeRelease ( node );
+
+ /* don't bother recording local, disabled repositories */
+ if ( rc == 0 && disabled && algs == & self -> local )
+ return 0;
+ }
+
+ /* check for caching */
+ caching = allow_cache;
+ if ( allow_cache )
+ {
+ rc = KConfigNodeOpenNodeRead ( repo, & node, "cache-enabled" );
+ if ( rc == 0 )
+ {
+ rc = KConfigNodeReadBool ( node, & caching );
+ KConfigNodeRelease ( node );
+ if ( rc != 0 )
+ caching = false;
+ }
+ }
+
+ /* cache-capable repositories cannot be remote resolvers */
+ resolver_cgi = false;
+ if ( allow_cache )
+ rc = KConfigNodeOpenNodeRead ( repo, & node, "root" );
+ else
+ {
+ /* check for specific resolver CGI */
+ rc = KConfigNodeOpenNodeRead ( repo, & node, "resolver-cgi" );
+ if ( rc == 0 )
+ resolver_cgi = true;
+ /* or get the repository root */
+ else if ( GetRCState ( rc ) == rcNotFound )
+ {
+ rc = KConfigNodeOpenNodeRead ( repo, & node, "root" );
+ }
+ }
+ if ( GetRCState ( rc ) == rcNotFound )
+ rc = 0;
+ else if ( rc == 0 )
+ {
+ /* read root as String */
+ String *root;
+ rc = KConfigNodeReadString ( node, & root );
+ KConfigNodeRelease ( node );
+ if ( GetRCState ( rc ) == rcNotFound )
+ rc = 0;
+ else if ( rc == 0 )
+ {
+ /* perform a bit of cleanup on root */
+ while ( root -> size != 0 && root -> addr [ root -> size - 1 ] == '/' )
+ {
+ /* this is terribly nasty, but known to be safe */
+ -- root -> len;
+ -- root -> size;
+ }
+
+ /* store string on VResolver for management purposes,
+ pass the loaned reference to sub-structures */
+ rc = VectorAppend ( & self -> roots, NULL, root );
+ if ( rc != 0 )
+ StringWhack ( root );
+ else
+ {
+ /* open the "apps" sub-node */
+ rc = KConfigNodeOpenNodeRead ( repo, & node, "apps" );
+ if ( rc == 0 )
+ {
+ rc = VResolverLoadApps ( self, algs, root, ticket,
+ allow_cache, node, resolver_cgi, protected, disabled, caching );
+ KConfigNodeRelease ( node );
+ }
+ else if ( GetRCState ( rc ) == rcNotFound )
+ {
+ rc = 0;
+ if ( resolver_cgi )
+ {
+ VResolverAlg *cgi;
+ rc = VResolverAlgMake ( & cgi, root, appAny, algCGI, protected, disabled );
+ if ( rc == 0 )
+ {
+ cgi -> ticket = ticket;
+
+ rc = VectorAppend ( algs, NULL, cgi );
+ if ( rc == 0 )
+ {
+ ++ self -> num_app_vols [ appAny ];
+ return 0;
+ }
+ }
+
+ VResolverAlgWhack ( cgi, NULL );
+ }
+ }
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+/* LoadNamedRepo
+ *
+ * repository-block
+ * = ID <repository> ;
+ */
+static
+rc_t VResolverLoadNamedRepo ( VResolver *self, Vector *algs, const KConfigNode *sub,
+ const String *ticket, const char *name, VResolverCacheAllow allow_cache, bool protected )
+{
+ const KConfigNode *repo;
+ rc_t rc = KConfigNodeOpenNodeRead ( sub, & repo, name );
+ if ( GetRCState ( rc ) == rcNotFound )
+ rc = 0;
+ else if ( rc == 0 )
+ {
+ rc = VResolverLoadRepo ( self, algs, repo, ticket, allow_cache, protected );
+ KConfigNodeRelease ( repo );
+ }
+ return rc;
+}
+
+/* LoadSubCategory
+ *
+ * sub-category-block
+ * = <sub-category> <repository-block>* ;
+ *
+ * sub-category
+ * = "main" | "aux" | "protected"
+ *
+ * repository-block
+ * = ID <repository> ;
+ */
+static
+rc_t VResolverLoadSubCategory ( VResolver *self, Vector *algs, const KConfigNode *kfg,
+ const String *ticket, const char *sub_path, VResolverCacheAllow allow_cache, bool protected )
+{
+ const KConfigNode *sub;
+ rc_t rc = KConfigNodeOpenNodeRead ( kfg, & sub, sub_path );
+ if ( GetRCState ( rc ) == rcNotFound )
+ rc = 0;
+ else if ( rc == 0 )
+ {
+ KNamelist *children;
+ rc = KConfigNodeListChildren ( sub, & children );
+ if ( rc == 0 )
+ {
+ uint32_t i, count;
+ rc = KNamelistCount ( children, & count );
+ for ( i = 0; i < count && rc == 0; ++ i )
+ {
+ const char *name;
+ rc = KNamelistGet ( children, i, & name );
+ if ( rc == 0 )
+ rc = VResolverLoadNamedRepo ( self, algs, sub, ticket, name, allow_cache, protected );
+ }
+
+ KNamelistRelease ( children );
+ }
+ KConfigNodeRelease ( sub );
+ }
+ return rc;
+}
+
+/* LoadProtected
+ * special function to handle single, active protected workspace
+ */
+static
+rc_t VResolverLoadProtected ( VResolver *self, const KConfigNode *kfg, const char *rep_name )
+{
+ const KConfigNode *repo;
+ rc_t rc = KConfigNodeOpenNodeRead ( kfg, & repo, "user/protected/%s", rep_name );
+ if ( GetRCState ( rc ) == rcNotFound )
+ rc = 0;
+ else if ( rc == 0 )
+ {
+ rc = VResolverLoadRepo ( self, & self -> local, repo, NULL, cacheAllow, true );
+ KConfigNodeRelease ( repo );
+ }
+ return rc;
+}
+
+/* LoadLegacyRefseq
+ * load refseq information from KConfig
+ *
+ * there are two legacy versions being supported
+ *
+ * legacy-refseq
+ * = "refseq" <legacy-vol-or-repo> ;
+ *
+ * legacy-vol-or-repo
+ * = "volumes" '=' <path-list>
+ * | <legacy-refseq-repo> <legacy-refseq-vols>
+ * ;
+ */
+static
+rc_t VResolverLoadLegacyRefseq ( VResolver *self, const KConfig *cfg )
+{
+ const KConfigNode *vols;
+ rc_t rc = KConfigOpenNodeRead ( cfg, & vols, "/refseq/paths" );
+ if ( GetRCState ( rc ) == rcNotFound )
+ rc = 0;
+ else if ( rc == 0 )
+ {
+ String *vol_list;
+ rc = KConfigNodeReadString ( vols, & vol_list );
+ if ( rc == 0 )
+ {
+ const bool protected = false;
+ const bool disabled = false;
+ const bool caching = true;
+ rc = VResolverLoadAlgVolumes ( & self -> local, NULL, NULL, cacheAllow,
+ appREFSEQ, algREFSEQ, & self -> num_app_vols [ appREFSEQ ],
+ vol_list, protected, disabled, caching );
+ StringWhack ( vol_list );
+ }
+ KConfigNodeRelease ( vols );
+ }
+
+ return rc;
+}
+
+
+/* ForceRemoteRefseq
+ * makes sure there is a remote source of refseq
+ * or else adds a hard-coded URL to NCBI
+ */
+static
+rc_t VResolverForceRemoteRefseq ( VResolver *self )
+{
+ rc_t rc;
+ bool found;
+ String local_root;
+ const String *root;
+
+ uint32_t i, count = VectorLength ( & self -> remote );
+ for ( found = false, i = 0; i < count; ++ i )
+ {
+ VResolverAlg *alg = ( VResolverAlg* ) VectorGet ( & self -> remote, i );
+ if ( alg -> app_id == appREFSEQ )
+ {
+ found = true;
+ if ( alg -> disabled )
+ alg -> disabled = false;
+ }
+ }
+
+ if ( found )
+ return 0;
+
+ if ( self -> num_app_vols [ appAny ] != 0 )
+ {
+ for ( i = 0; i < count; ++ i )
+ {
+ VResolverAlg *alg = ( VResolverAlg* ) VectorGet ( & self -> remote, i );
+ if ( alg -> app_id == appAny )
+ {
+ found = true;
+ if ( alg -> disabled )
+ alg -> disabled = false;
+ }
+ }
+ }
+
+ if ( found )
+ return 0;
+
+ /* create one from hard-coded constants */
+ StringInitCString ( & local_root, "http://ftp-trace.ncbi.nlm.nih.gov/sra" );
+ rc = StringCopy ( & root, & local_root );
+ if ( rc == 0 )
+ {
+ rc = VectorAppend ( & self -> roots, NULL, root );
+ if ( rc != 0 )
+ StringWhack ( root );
+ else
+ {
+ String vol_list;
+ const bool protected = false;
+ const bool disabled = false;
+ const bool caching = false;
+ StringInitCString ( & vol_list, "refseq" );
+ rc = VResolverLoadAlgVolumes ( & self -> remote, root, NULL, cacheDisallow,
+ appREFSEQ, algREFSEQ, & self -> num_app_vols [ appREFSEQ ],
+ & vol_list, protected, disabled, caching );
+ }
+ }
+
+ return rc;
+}
+
+
+/* GetDownloadTicket
+ * if we are within a working environment that has a download ticket,
+ * capture it here and add that local repository into the mix
+ */
+static
+const String *VResolverGetDownloadTicket ( const VResolver *self, const KConfig *cfg,
+ char *buffer, size_t bsize )
+{
+ const String *ticket = NULL;
+ const KRepositoryMgr *rmgr;
+ rc_t rc = KConfigMakeRepositoryMgrRead ( cfg, & rmgr );
+ if ( rc == 0 )
+ {
+ const KRepository *protected;
+ rc = KRepositoryMgrCurrentProtectedRepository ( rmgr, & protected );
+ if ( rc == 0 )
+ {
+ rc = KRepositoryName ( protected, buffer, bsize, NULL );
+ if ( rc == 0 )
+ {
+ size_t ticsz;
+ char ticbuf [ 256 ];
+ rc = KRepositoryDownloadTicket ( protected, ticbuf, sizeof ticbuf, & ticsz );
+ if ( rc == 0 )
+ {
+ String tic;
+ StringInit ( & tic, ticbuf, ticsz, ( uint32_t ) ticsz );
+ rc = StringCopy ( & ticket, & tic );
+ }
+ }
+
+ KRepositoryRelease ( protected );
+ }
+
+ KRepositoryMgrRelease ( rmgr );
+ }
+ return ticket;
+}
+
+
+/* ForceRemoteProtected
+ * makes sure there is a remote CGI
+ */
+static
+rc_t VResolverForceRemoteProtected ( VResolver *self )
+{
+ rc_t rc;
+ const String *root;
+
+ /* create one from hard-coded constants */
+ String cgi_root;
+ StringInitCString ( & cgi_root, "http://www.ncbi.nlm.nih.gov/Traces/names/names.cgi" );
+ rc = StringCopy ( & root, & cgi_root );
+ if ( rc == 0 )
+ {
+ rc = VectorAppend ( & self -> roots, NULL, root );
+ if ( rc != 0 )
+ StringWhack ( root );
+ else
+ {
+ const bool protected = true;
+ const bool disabled = false;
+
+ VResolverAlg *cgi;
+ rc = VResolverAlgMake ( & cgi, root, appAny, algCGI, protected, disabled );
+ if ( rc == 0 )
+ {
+ cgi -> ticket = self -> ticket;
+
+ rc = VectorAppend ( & self -> remote, NULL, cgi );
+ if ( rc == 0 )
+ {
+ ++ self -> num_app_vols [ appAny ];
+ return 0;
+ }
+ }
+
+ VResolverAlgWhack ( cgi, NULL );
+ }
+ }
+
+ return rc;
+}
+
+
+/* Load
+ * load the respository from ( current ) KConfig
+ *
+ * using pseudo BNF, it looks like this:
+ *
+ * repositories
+ * = "repository" <category-block>* ;
+ *
+ * category-block
+ * = <category> <sub-category-block>* ;
+ *
+ * category
+ * = "remote" | "site" | "user" ;
+ *
+ * sub-category-block
+ * = <sub-category> <repository-block>* ;
+ *
+ * sub-category
+ * = "main" | "aux" | "protected"
+ */
+static
+rc_t VResolverLoad ( VResolver *self, const KConfig *cfg )
+{
+ bool have_remote_protected = false;
+
+ const KConfigNode *kfg;
+ rc_t rc = KConfigOpenNodeRead ( cfg, & kfg, "repository" );
+ if ( GetRCState ( rc ) == rcNotFound )
+ rc = 0;
+ else if ( rc == 0 )
+ {
+ /* if the user is inside of a protected workspace, load it first */
+ char buffer [ 256 ];
+ self -> ticket = VResolverGetDownloadTicket ( self, cfg, buffer, sizeof buffer );
+ if ( self -> ticket != NULL )
+ rc = VResolverLoadProtected ( self, kfg, buffer );
+
+ /* now load user public repositories */
+ if ( rc == 0 )
+ rc = VResolverLoadSubCategory ( self, & self -> local, kfg, NULL, "user/main", cacheAllow, false );
+ if ( rc == 0 )
+ rc = VResolverLoadSubCategory ( self, & self -> local, kfg, NULL, "user/aux", cacheAllow, false );
+
+ /* load any site repositories */
+ if ( rc == 0 )
+ rc = VResolverLoadSubCategory ( self, & self -> local, kfg, NULL, "site/main", cacheDisallow, false );
+ if ( rc == 0 )
+ rc = VResolverLoadSubCategory ( self, & self -> local, kfg, NULL, "site/aux", cacheDisallow, false );
+
+ /* if within a protected workspace, load protected remote repositories */
+ if ( rc == 0 && self -> ticket != NULL )
+ {
+ rc = KNSManagerMake ( ( KNSManager** ) & self -> kns );
+ if ( rc == 0 )
+ {
+ uint32_t entry_vols = VectorLength ( & self -> remote );
+ rc = VResolverLoadSubCategory ( self, & self -> remote, kfg,
+ self -> ticket, "remote/protected", cacheDisallow, true );
+ have_remote_protected = VectorLength ( & self -> remote ) > entry_vols;
+ }
+ }
+
+ /* load any remote repositories */
+ if ( rc == 0 )
+ rc = VResolverLoadSubCategory ( self, & self -> remote, kfg, NULL, "remote/main", cacheDisallow, false );
+ if ( rc == 0 )
+ rc = VResolverLoadSubCategory ( self, & self -> remote, kfg, NULL, "remote/aux", cacheDisallow, false );
+
+ KConfigNodeRelease ( kfg );
+
+ /* recover from public remote repositories using resolver CGI */
+ if ( self -> kns == NULL && self -> num_app_vols [ appAny ] != 0 )
+ rc = KNSManagerMake ( ( KNSManager** ) & self -> kns );
+ }
+
+ if ( rc == 0 && self -> num_app_vols [ appAny ] == 0 )
+ {
+ bool has_current_refseq = true;
+
+ /* AT THIS POINT, a current configuration will have something.
+ But, older out-of-date configurations may exist and need special handling. */
+ if ( self -> num_app_vols [ appREFSEQ ] == 0 )
+ {
+ has_current_refseq = false;
+ rc = VResolverLoadLegacyRefseq ( self, cfg );
+ }
+
+ /* now, one more special case - for external users
+ who had legacy refseq configuration but nothing for SRA,
+ force existence of a remote refseq access */
+ if ( rc == 0
+ && ! has_current_refseq
+ && self -> num_app_vols [ appREFSEQ ] != 0
+ && self -> num_app_vols [ appSRA ] == 0 )
+ {
+ rc = VResolverForceRemoteRefseq ( self );
+ }
+ }
+
+ if ( rc == 0 && self -> ticket != NULL && ! have_remote_protected )
+ rc = VResolverForceRemoteProtected ( self );
+
+ return rc;
+}
+
+
+/* Make
+ * internal factory function
+ */
+static
+rc_t VResolverMake ( VResolver ** objp, const KDirectory *wd, const KConfig *kfg )
+{
+ rc_t rc;
+
+ VResolver *obj = calloc ( 1, sizeof * obj );
+ if ( obj == NULL )
+ rc = RC ( rcVFS, rcMgr, rcCreating, rcMemory, rcExhausted );
+ else
+ {
+ VectorInit ( & obj -> roots, 0, 8 );
+ VectorInit ( & obj -> local, 0, 8 );
+ VectorInit ( & obj -> remote, 0, 8 );
+ obj -> wd = wd;
+
+ KRefcountInit ( & obj -> refcount, 1, "VResolver", "make", "resolver" );
+
+ rc = VResolverLoad ( obj, kfg );
+ if ( rc == 0 )
+ {
+ * objp = obj;
+ return 0;
+ }
+
+ VResolverWhack ( obj );
+ }
+
+ return rc;
+}
+
+/* Make
+ * ask the VFS manager to make a resolver
+ */
+LIB_EXPORT
+rc_t CC VFSManagerMakeResolver ( const VFSManager * self,
+ VResolver ** new_resolver, const KConfig * cfg )
+{
+ rc_t rc;
+
+ if ( new_resolver == NULL )
+ rc = RC ( rcVFS, rcMgr, rcCreating, rcParam, rcNull );
+ else
+ {
+ if ( self == NULL )
+ rc = RC ( rcVFS, rcMgr, rcCreating, rcSelf, rcNull );
+ else if ( cfg == NULL )
+ rc = RC ( rcVFS, rcMgr, rcCreating, rcParam, rcNull );
+ else
+ {
+ KDirectory *wd;
+ rc = VFSManagerGetCWD ( self, & wd );
+ if ( rc == 0 )
+ {
+ rc = VResolverMake ( new_resolver, wd, cfg );
+ if ( rc == 0 )
+ return 0;
+
+ KDirectoryRelease ( wd );
+ }
+ }
+
+ *new_resolver = NULL;
+ }
+
+ return rc;
+}
diff --git a/libs/vfs/srapath-stub.c b/libs/vfs/srapath-stub.c
new file mode 100644
index 0000000..da0985d
--- /dev/null
+++ b/libs/vfs/srapath-stub.c
@@ -0,0 +1,372 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <sra/extern.h>
+#include <klib/rc.h>
+#include <klib/defs.h>
+#include <klib/refcount.h>
+#include <sra/srapath.h>
+#include <sra/sradb-priv.h>
+#include <sysalloc.h>
+#include <os-native.h>
+
+#include <sra/impl.h>
+
+#include <string.h>
+#include <assert.h>
+#include <stdio.h>
+
+
+/*--------------------------------------------------------------------------
+ * SRAPath
+ * manages accession -> path conversion
+ */
+
+/* Make
+ * create path manager
+ *
+ * the path manager should already be configured with
+ * standard search paths, but can be augmented by using
+ * the Add*Path messages.
+ *
+ * "dir" [ IN, NULL OKAY ] - optional root directory to use
+ * attaches a new reference
+ */
+LIB_EXPORT rc_t CC SRAPathMake ( SRAPath **pm, struct KDirectory const *dir )
+{
+ rc_t rc;
+
+ if ( pm == NULL )
+ rc = RC ( rcSRA, rcMgr, rcConstructing, rcParam, rcNull );
+ else
+ {
+ rc = SRAPathMakeImpl( pm, dir );
+ if ( rc == 0 )
+ return 0;
+
+ * pm = NULL;
+ }
+
+ return rc;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC SRAPathAddRef ( const SRAPath *self )
+{
+ if ( self != NULL )
+ {
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ case 2:
+ return self -> vt -> v1 . addref ( self );
+ }
+
+ return RC ( rcSRA, rcMgr, rcReleasing, rcInterface, rcBadVersion );
+ }
+ return 0;
+}
+
+LIB_EXPORT rc_t CC SRAPathRelease ( const SRAPath *self )
+{
+ if ( self != NULL )
+ {
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ case 2:
+ return self -> vt -> v1 . release ( self );
+ }
+
+ return RC ( rcSRA, rcMgr, rcReleasing, rcInterface, rcBadVersion );
+ }
+ return 0;
+}
+
+
+/* Version
+ * returns the library version
+ */
+LIB_EXPORT rc_t CC SRAPathVersion ( const SRAPath *self, uint32_t *version )
+{
+ if ( version == NULL )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcParam, rcNull );
+
+ * version = 0;
+
+ if ( self == NULL )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ case 2:
+ return self -> vt -> v1 . version ( self, version );
+ }
+
+ return RC ( rcSRA, rcMgr, rcAccessing, rcInterface, rcBadVersion );
+}
+
+
+/* Clear
+ * forget all existing server and volume paths
+ */
+LIB_EXPORT rc_t CC SRAPathClear ( SRAPath *self )
+{
+ if ( self == NULL )
+ return RC ( rcSRA, rcMgr, rcResetting, rcSelf, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ case 2:
+ return self -> vt -> v1 . clear ( self );
+ }
+
+ return RC ( rcSRA, rcMgr, rcResetting, rcInterface, rcBadVersion );
+}
+
+
+/* AddRepPath
+ * add a replication path
+ *
+ * "rep" [ IN ] - NUL-terminated server search path
+ * may be a compound path with ':' separator characters, e.g.
+ * "/panfs/traces01:/panfs/traces31"
+ *
+ * NB - servers are searched in the order provided,
+ * first to last, until one of them satisfies a request,
+ * at which time the successful server is placed at the
+ * head of the search path.
+ */
+LIB_EXPORT rc_t CC SRAPathAddRepPath ( SRAPath *self, const char *path )
+{
+ if ( self == NULL )
+ return RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
+ if ( path == NULL )
+ return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
+ if ( path [ 0 ] == 0 )
+ return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ case 2:
+ return self -> vt -> v1 . addRepPath ( self, path );
+ }
+
+ return RC ( rcSRA, rcMgr, rcUpdating, rcInterface, rcBadVersion );
+}
+
+
+/* AddVolPath
+ * add a volume path
+ *
+ * "vol" [ IN ] - NUL-terminated volume search path
+ * may be a compound path with ':' separator characters, e.g.
+ * "sra2:sra1:sra0"
+ *
+ * NB - volumes are searched in the order provided,
+ * first to last. they are never re-ordered.
+ */
+LIB_EXPORT rc_t CC SRAPathAddVolPath ( SRAPath *self, const char *path )
+{
+ if ( self == NULL )
+ return RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
+ if ( path == NULL )
+ return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
+ if ( path [ 0 ] == 0 )
+ return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ case 2:
+ return self -> vt -> v1 . addVolPath ( self, path );
+ }
+
+ return RC ( rcSRA, rcMgr, rcUpdating, rcInterface, rcBadVersion );
+}
+
+
+/* Full
+ * creates full path from server, volume & accession
+ *
+ * "rep" [ IN ] - NUL terminated full path of replication
+ * server, e.g. "/panfs/traces01"
+ *
+ * "vol" [ IN ] - NUL terminated relative path of volume,
+ * e.g. "sra2"
+ *
+ * "accession" [ IN ] - NUL terminated run accession,
+ * e.g. "SRR000001"
+ *
+ * "path" [ OUT ] and "path_max" [ IN ] - return buffer for
+ * NUL-terminated full path to accession.
+ */
+LIB_EXPORT rc_t CC SRAPathFull ( const SRAPath *self, const char *rep,
+ const char *vol, const char *accession, char *path, size_t path_max )
+{
+ if ( path_max == 0 )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ if ( path == NULL )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcNull );
+
+ /* prepare return for failure */
+ path [ 0 ] = 0;
+
+ /* test remainder */
+ if ( self == NULL )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
+ if ( accession == NULL )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcPath, rcNull );
+ if ( accession [ 0 ] == 0 )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcPath, rcEmpty );
+
+ /* turn NULL prefix parts into empty string */
+ if ( rep == NULL )
+ rep = "";
+ if ( vol == NULL )
+ vol = "";
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ case 2:
+ return self -> vt -> v1 . fullPath ( self, rep, vol, accession, path, path_max );
+ }
+
+ return RC ( rcSRA, rcMgr, rcAccessing, rcInterface, rcBadVersion );
+}
+
+
+/* Test
+ * returns true if path appears to be accession
+ * the test is a heuristic, and may return false positives
+ *
+ * "path" [ IN ] - NUL terminated path to run
+ */
+LIB_EXPORT bool CC SRAPathTest ( const SRAPath *self, const char *path )
+{
+ if ( self == NULL )
+ return false;
+ if ( path == NULL || path [ 0 ] == 0 )
+ return false;
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ case 2:
+ return self -> vt -> v1 . testPath ( self, path );
+ }
+
+ return false;
+}
+
+
+/* Find
+ * finds location of run within rep-server/volume matrix
+ *
+ * "accession" [ IN ] - NUL terminated run accession,
+ * e.g. "SRR000001"
+ *
+ * "path" [ OUT ] and "path_max" [ IN ] - return buffer for
+ * NUL-terminated full path to accession.
+ *
+ * returns 0 if path exists, rc state rcNotFound if
+ * path cannot be found, and rcInsufficient if buffer is
+ * too small.
+ */
+LIB_EXPORT rc_t CC SRAPathFindWithRepLen ( const SRAPath *self,
+ const char *accession, char *path, size_t path_max, size_t *rep_len )
+{
+ if ( path == NULL )
+ return RC ( rcSRA, rcMgr, rcSelecting, rcBuffer, rcNull );
+ if ( path_max == 0 )
+ return RC ( rcSRA, rcMgr, rcSelecting, rcBuffer, rcInsufficient );
+
+ /* looking for illegal character in the accession 'name'
+ * this will be the RC from something like "ncbi-acc:./SRR000001"
+ * or if this is called as a default resolution in the old manner
+ */
+ if ( strchr ( accession, '/' ) != NULL )
+ return RC ( rcSRA, rcUri, rcResolving, rcPath, rcIncorrect );
+
+ path [ 0 ] = 0;
+
+ if ( self == NULL )
+ return RC ( rcSRA, rcMgr, rcSelecting, rcSelf, rcNull );
+ if ( accession == NULL )
+ return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNull );
+ if ( accession [ 0 ] == 0 )
+ return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcEmpty );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ case 2:
+ return self -> vt -> v1 . findPath ( self, accession, path, path_max, rep_len );
+ }
+
+ return RC ( rcSRA, rcMgr, rcSelecting, rcInterface, rcBadVersion );
+}
+
+LIB_EXPORT rc_t CC SRAPathFind ( const SRAPath *self,
+ const char *accession, char *path, size_t path_max )
+{
+ return SRAPathFindWithRepLen ( self, accession, path, path_max, NULL );
+}
+
+
+/* List (Deprecated)
+ * list all runs known to SRAPath
+ * this can be VERY SLOW due to the large number of runs
+ *
+ * "runs" [ OUT ] - return parameter for ordered list of accessions
+ *
+ * "deep" [ IN ] - when false, list only first responding server
+ */
+LIB_EXPORT rc_t CC SRAPathList ( const SRAPath *self, struct KNamelist **runs, bool deep )
+{
+ if ( runs == NULL )
+ return RC ( rcSRA, rcMgr, rcListing, rcParam, rcNull );
+
+ * runs = NULL;
+
+ if ( self == NULL )
+ return RC ( rcSRA, rcMgr, rcListing, rcSelf, rcNull );
+
+ switch ( self -> vt -> v1 . maj )
+ {
+ case 1:
+ return RC ( rcSRA, rcMgr, rcListing, rcInterface, rcUnsupported ); /* removed from v1 */
+ }
+
+ return RC ( rcSRA, rcMgr, rcListing, rcInterface, rcBadVersion );
+}
diff --git a/libs/vfs/srapath.c b/libs/vfs/srapath.c
new file mode 100644
index 0000000..eb1ae28
--- /dev/null
+++ b/libs/vfs/srapath.c
@@ -0,0 +1,1424 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <sra/path-extern.h>
+
+struct SRARunlist;
+#define KNAMELIST_IMPL struct SRARunlist
+#include <klib/impl.h>
+
+struct NCBISRAPath;
+#define SRAPATH_IMPL struct NCBISRAPath
+#include <sra/impl.h>
+
+#include "libsrapath.vers.h"
+
+#include <vfs/manager.h>
+#include <sra/srapath.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <kfs/dyload.h>
+#include <klib/container.h>
+#include <klib/vector.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <kfg/config.h>
+#include <kfg/kfg-priv.h>
+#include <klib/debug.h>
+#include <klib/log.h>
+#include <os-native.h>
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "path-priv.h"
+
+/*--------------------------------------------------------------------------
+ * SRAPathString
+ */
+enum
+{
+ alg_none,
+ alg_ncbi,
+ alg_ddbj,
+ alg_ebi,
+ alg_refseq,
+ alg_wgs
+};
+
+typedef struct SRAPathString SRAPathString;
+struct SRAPathString
+{
+ DLNode n;
+ uint8_t alg;
+ char path [ 1 ];
+};
+
+/* Whack
+ */
+static
+void CC SRAPathStringWhack ( DLNode *n, void *ignore )
+{
+ free ( n );
+}
+
+/* Make
+ */
+static
+rc_t SRAPathStringMake ( DLList *list, const char *path, size_t sz, uint8_t alg )
+{
+ SRAPathString *s = (SRAPathString*) malloc ( sizeof * s + sz );
+ if ( s == NULL )
+ return RC ( rcSRA, rcMgr, rcUpdating, rcMemory, rcExhausted );
+
+ s -> alg = alg;
+ string_copy ( s -> path, sz + 1, path, sz );
+ DLListPushTail ( list, & s -> n );
+
+ return 0;
+}
+
+
+/* Find
+ */
+typedef struct SRAPathFindInfo SRAPathFindInfo;
+struct SRAPathFindInfo
+{
+ const char *path;
+ size_t size;
+ uint8_t alg;
+ bool found;
+};
+
+static
+bool CC SRAPathStringFind ( DLNode *n, void *data )
+{
+ const SRAPathString *p = ( const SRAPathString* ) n;
+ SRAPathFindInfo *pb = ( SRAPathFindInfo* ) data;
+ if ( memcmp ( p -> path, pb -> path, pb -> size ) == 0 )
+ {
+ if ( p -> path [ pb -> size ] == 0 )
+ {
+ pb -> alg = p -> alg;
+ return pb -> found = true;
+ }
+ }
+ return false;
+}
+
+/*--------------------------------------------------------------------------
+ * NCBIRepository
+ * represents a repository: replication server(s) / volume(s)
+ */
+typedef struct NCBIRepository NCBIRepository;
+struct NCBIRepository
+{
+ DLNode n;
+
+ uint8_t type; /* repository type: alg_ncbi (sra: ncbi/ebi/ddbj), alg_wgs, alg_refseq*/
+
+ /* replication servers */
+ DLList repsrv;
+
+ /* volumes upon each repserver */
+ DLList vols;
+};
+/* Init
+ */
+static
+rc_t CC SRARepoMake(NCBIRepository** repo)
+{
+ *repo = (NCBIRepository*)malloc(sizeof(NCBIRepository));
+ if (* repo == 0)
+ {
+ return RC ( rcSRA, rcMgr, rcInitializing, rcMemory, rcExhausted );
+ }
+ (*repo)->type = alg_ncbi;
+ (*repo)->n.next = NULL;
+ (*repo)->n.prev = NULL;
+ DLListInit(&(*repo)->repsrv);
+ DLListInit(&(*repo)->vols);
+ return 0;
+}
+/* Whack
+ */
+static
+void CC SRARepoWhack ( DLNode *n, void *ignore )
+{
+ if (n != NULL)
+ {
+ DLListWhack ( & ((NCBIRepository*) n) -> repsrv, SRAPathStringWhack, NULL );
+ DLListWhack ( & ((NCBIRepository*) n) -> vols, SRAPathStringWhack, NULL );
+ free ( (NCBIRepository*) n );
+ }
+}
+
+static
+const char* AlgToStr(uint8_t alg)
+{
+ switch (alg)
+ {
+ case alg_ncbi:
+ case alg_ddbj:
+ case alg_ebi: return "SRA";
+ case alg_wgs: return "WGS";
+ case alg_refseq: return "REFSEQ";
+ default: return "<unknown>";
+ }
+}
+
+
+static
+void CC LogVolume( DLNode *n, void *data )
+{
+ const SRAPathString* self = (const SRAPathString*)n;
+ PATH_DEBUG ((" \"%s\", type=%s\n",
+ self->path,
+ AlgToStr(self->alg)));
+}
+
+static
+void CC LogServer( DLNode *n, void *data )
+{
+ const SRAPathString* self = (const SRAPathString*)n;
+ PATH_DEBUG ((" \"%s\"\n", self->path));
+}
+
+static
+void CC LogRepository ( DLNode *n, void *data )
+{
+ if (n != NULL)
+ {
+ const NCBIRepository* self = (const NCBIRepository*)n;
+ PATH_DEBUG ((" type=%s\n", AlgToStr(self->type)));
+ PATH_DEBUG ((" servers:\n"));
+ DLListForEach ( & self->repsrv, false, LogServer, NULL );
+ PATH_DEBUG ((" volumes:\n"));
+ DLListForEach ( & self->vols, false, LogVolume, NULL );
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * NCBISRAPath
+ * manages accession -> path conversion
+ */
+typedef struct NCBISRAPath NCBISRAPath;
+struct NCBISRAPath
+{
+ struct SRAPath dad;
+
+ /* working directory */
+ const KDirectory *dir;
+
+ /* repositories */
+ DLList repos;
+ NCBIRepository* dflt_repo; /* default repository (likely to be removed in the future versions) */
+
+ atomic32_t refcount;
+};
+
+static void LogPathInfo(const NCBISRAPath* self)
+{
+ PATH_DEBUG (("NCBISRAPath configuration:\n"));
+ DLListForEach ( & self->repos, false, LogRepository, NULL );
+ PATH_DEBUG (("default repository:\n"));
+ LogRepository( (DLNode*) self->dflt_repo, NULL );
+}
+
+/* Whack
+ */
+static
+rc_t SRAPathWhack ( NCBISRAPath *self )
+{
+ rc_t rc = KDirectoryRelease ( self -> dir );
+ if ( rc == 0 )
+ {
+ DLListWhack ( & self -> repos, SRARepoWhack, NULL );
+ SRARepoWhack ( (DLNode*) self -> dflt_repo, NULL );
+ free ( self );
+ }
+ return rc;
+}
+
+
+/* AddRef
+ * Release
+ */
+static
+rc_t CC NCBISRAPathAddRef ( const NCBISRAPath *cself )
+{
+ atomic32_inc ( & ( ( NCBISRAPath* ) cself ) -> refcount );
+ return 0;
+}
+
+static
+rc_t CC NCBISRAPathRelease ( const NCBISRAPath *cself )
+{
+ NCBISRAPath *self = ( NCBISRAPath* ) cself;
+ if ( atomic32_dec_and_test ( & self -> refcount ) )
+ return SRAPathWhack ( self );
+ return 0;
+}
+
+
+/* Version
+ * returns the library version
+ */
+static
+rc_t CC NCBISRAPathVersion ( const NCBISRAPath *self, uint32_t *version )
+{
+ * version = LIBSRAPATH_VERS;
+ return 0;
+}
+
+
+/* Clear
+ * forget existing server and volume paths for the default repository
+ */
+static
+rc_t CC NCBISRAPathClear ( NCBISRAPath *self )
+{
+ DLListWhack ( & self -> dflt_repo -> repsrv, SRAPathStringWhack, NULL );
+ DLListWhack ( & self -> dflt_repo -> vols, SRAPathStringWhack, NULL );
+ DLListInit ( & self -> dflt_repo -> repsrv );
+ DLListInit ( & self -> dflt_repo -> vols );
+
+ return 0;
+}
+
+
+/* AddPath
+ * add an alternate replication or volume path
+ *
+ * "path" [ IN ] and "size" [ IN ] - sets a search path
+ *
+ * "alt" [ IN ] - use std or alternate volume path algorithm
+ */
+static
+rc_t SRAPathAddSubPath ( DLList *list, const char *path, size_t size, uint8_t alg )
+{
+ /* see if it's already there */
+ SRAPathFindInfo pb;
+ pb . path = path;
+ pb . size = size;
+ pb . found = 0;
+ DLListDoUntil ( list, 0, SRAPathStringFind, & pb );
+ if ( pb . found )
+ return 0;
+
+ /* create a new one */
+ return SRAPathStringMake ( list, path, size, alg );
+}
+
+static
+rc_t SRAPathAddPath ( DLList *list, const char *path, uint8_t alg )
+{
+ rc_t rc;
+ if ( path == NULL )
+ rc = RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
+ else if ( path [ 0 ] == 0 )
+ rc = RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
+ else
+ {
+ /* treat path as a Unix-style multi-path */
+ size_t size = string_size ( path );
+ while ( 1 )
+ {
+ /* find separator */
+ const char *sep = string_chr ( path, size, ':' );
+ if ( sep == NULL )
+ break;
+
+ /* add sub-path */
+ rc = SRAPathAddSubPath ( list, path, sep - path, alg );
+ if ( rc != 0 )
+ return rc;
+
+ /* consume ':' */
+ ++ sep;
+
+ /* pop from string */
+ size -= sep - path;
+ path = sep;
+ }
+
+ return SRAPathAddSubPath ( list, path, size, alg );
+ }
+ return rc;
+}
+
+/* AddRepPath
+ * add a replication path to a repository
+ *
+ * "rep" [ IN ] - NUL-terminated server search path
+ * may be a compound path with ':' separator characters, e.g.
+ * "/panfs/traces01:/panfs/traces31"
+ *
+ * NB - servers are searched in the order provided,
+ * first to last, until one of them satisfies a request,
+ * at which time the successful server is placed at the
+ * head of the search path.
+ */
+static
+rc_t CC NCBISRAPathAddRepPath ( NCBIRepository* repo, const char *rep )
+{
+ return SRAPathAddPath ( & repo -> repsrv, rep, alg_none );
+}
+static
+rc_t CC NCBISRAPathAddRepPathDefault ( NCBISRAPath *self, const char *rep )
+{
+ return NCBISRAPathAddRepPath ( self -> dflt_repo, rep );
+}
+
+/* AddVolPath
+ * add a volume path to the default repository
+ *
+ * "vol" [ IN ] - NUL-terminated volume search path
+ * may be a compound path with ':' separator characters, e.g.
+ * "sra2:sra1:sra0"
+ *
+ * NB - volumes are searched in the order provided,
+ * first to last. they are never re-ordered.
+ */
+static
+rc_t SRAPathAddAlgVolPath ( NCBIRepository* repo, const char *vol, uint8_t alg )
+{
+ return SRAPathAddPath ( & repo -> vols, vol, alg );
+}
+static
+rc_t CC NCBISRAPathAddVolPathDefault ( NCBISRAPath *self, const char *vol )
+{
+ return SRAPathAddAlgVolPath ( self -> dflt_repo, vol, alg_ncbi);
+}
+
+/* Config
+ * configure an existing path manager
+ */
+static
+rc_t SRAPathConfigValue ( const KConfig *kfg, const char *node_path,
+ char *value, size_t value_size, const char *dflt )
+{
+ const KConfigNode *node;
+ rc_t rc = KConfigOpenNodeRead ( kfg, & node, node_path );
+ if ( rc == 0 )
+ {
+ size_t num_read, remaining;
+ rc = KConfigNodeRead ( node, 0, value, value_size - 1, & num_read, & remaining );
+ if ( rc == 0 )
+ {
+ if ( remaining != 0 )
+ rc = RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+ else
+ value [ num_read ] = 0;
+ }
+
+ KConfigNodeRelease ( node );
+ }
+
+ if ( rc != 0 )
+ {
+ if ( dflt != NULL && dflt [ 0 ] != 0 )
+ {
+ size_t num_read = string_copy_measure ( value, value_size, dflt );
+ rc = 0;
+ if ( num_read == value_size )
+ rc = RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+ }
+ else
+ value[0] = 0;
+ }
+ return rc;
+}
+
+static
+rc_t ConfigVolume(NCBIRepository* repo, KConfig * kfg, const char* keyPref, const char* keySuff, uint8_t alg )
+{
+ char value [ 4096 ];
+ char key [ 4096 ];
+ size_t pSize = string_size(keyPref);
+ size_t sSize = string_size(keySuff);
+ if ( pSize + sSize >= sizeof(key))
+ {
+ return RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+ }
+ string_copy(key, sizeof(key), keyPref, pSize);
+ string_copy(key + pSize, sizeof(key) - pSize, keySuff, sSize);
+ key[pSize+sSize] = 0;
+ value[0] = '\0';
+ if ( SRAPathConfigValue ( kfg, key, value, sizeof value, NULL ) == 0 )
+ SRAPathAddAlgVolPath ( repo, value, alg );
+ return 0;
+}
+
+static
+rc_t ConfigRepo(KConfig * kfg, const char *dflt, const char* reps, const char* volPref, uint8_t type, NCBIRepository** repo)
+{
+ char value [ 4096 ] = "";
+ rc_t rc;
+
+ /* set up a new repo */
+ rc = SRARepoMake(repo);
+ if ( rc == 0 )
+ {
+ (*repo)->type = type;
+
+ /* set up servers */
+ if ( SRAPathConfigValue ( kfg, reps, value, sizeof value, dflt ) == 0 )
+ NCBISRAPathAddRepPath ( *repo, value );
+
+ if ( type == alg_ncbi )
+ {
+ /* set up NCBI volumes */
+ rc = ConfigVolume( *repo, kfg, volPref, "/ncbi/volumes", alg_ncbi );
+
+ /* set up EBI volumes */
+ if (rc == 0)
+ rc = ConfigVolume( *repo, kfg, volPref, "/ebi/volumes", alg_ebi );
+
+ /* set up DDBJ volumes */
+ if (rc == 0)
+ rc = ConfigVolume( *repo, kfg, volPref, "/ddbj/volumes", alg_ddbj );
+ }
+ else if (rc == 0)
+ {
+ rc = ConfigVolume( *repo, kfg, volPref, "/volumes", type);
+ }
+ }
+ return rc;
+}
+
+static
+rc_t ConfigRepoSet(DLList* repos, KConfig * kfg, const char* kfgPath, const char *dflt, uint8_t type)
+{
+ const KConfigNode *node;
+
+ rc_t rc = KConfigOpenNodeRead ( kfg, & node, kfgPath );
+ if ( rc == 0 )
+ {
+ KNamelist* children;
+ rc = KConfigNodeListChild ( node, &children );
+ if ( rc == 0 )
+ {
+ uint32_t count;
+ rc = KNamelistCount ( children, &count );
+ if ( rc == 0 )
+ {
+ uint32_t i;
+ for (i = 0; i < count; ++i)
+ {
+ const char* name;
+ rc = KNamelistGet ( children, i, &name );
+ if ( rc == 0 )
+ {
+ #define BufSize 4096
+ char buf[ BufSize ];
+ size_t bSize = string_size(kfgPath);
+ string_copy(buf, BufSize, kfgPath, bSize);
+ if (bSize + string_size(name) < sizeof(buf))
+ {
+ NCBIRepository* repo;
+ string_copy(buf + bSize, sizeof(buf) - bSize, name, string_size(name) + 1);
+ rc = ConfigRepo( kfg, dflt, buf, buf, type, &repo );
+ DLListPushTail( repos, (DLNode*) repo );
+ }
+ #undef BufSize
+ }
+ else
+ {
+ rc = RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+ }
+ if ( rc != 0 )
+ {
+ break;
+ }
+ }
+ }
+ KNamelistRelease ( children );
+ }
+
+ KConfigNodeRelease ( node );
+ }
+ if (GetRCState(rc) == rcNotFound)
+ {
+ return 0;
+ }
+ return rc;
+}
+
+static
+rc_t SRAPathConfig ( NCBISRAPath *self )
+{
+ const char *dflt;
+ KConfig * kfg;
+ rc_t rc = KConfigMakeLocal ( & kfg, NULL );
+ assert ( ( rc == 0 && kfg != NULL ) || ( rc != 0 && kfg == NULL ) );
+
+ /* look for defaults */
+ dflt = getenv ( "SRAPATH" );
+
+ /* locate and configure all repositories */
+ if ( rc == 0 )
+ rc = ConfigRepoSet( & self->repos, kfg, "/sra/repository/", dflt, alg_ncbi );
+ if ( rc == 0 )
+ rc = ConfigRepoSet( & self->repos, kfg, "/wgs/repository/", dflt, alg_wgs );
+ if ( rc == 0 )
+ rc = ConfigRepoSet( & self->repos, kfg, "/refseq/repository/", dflt, alg_refseq );
+
+ if ( rc == 0 )
+ { /* default repository for backwards compatibility */
+ rc = ConfigRepo( kfg, dflt, "sra/servers", "sra", alg_ncbi, &self->dflt_repo );
+
+ /* set up REFSEQ volumes */
+ if (rc == 0)
+ rc = ConfigVolume( self->dflt_repo, kfg, "", "/refseq/volumes", alg_refseq );
+
+ /* set up WGS volumes */
+ if (rc == 0)
+ rc = ConfigVolume( self->dflt_repo, kfg, "sra", "/wgs/volumes", alg_wgs );
+ }
+
+ LogPathInfo(self);
+
+ /* kfg may be NULL */
+ KConfigRelease ( kfg );
+
+ return rc;
+}
+
+
+/* ParseRunAccession
+ * accession is a string matching <prefix><number>
+ * extract prefix length and accession number
+ */
+static
+rc_t SRAPathParseRunAccession ( const char *accession, uint32_t *prefix, uint32_t *number )
+{
+ char *end;
+ uint32_t i;
+
+ for ( i = 0; accession [ i ] != 0; ++ i )
+ {
+ if ( isdigit ( accession [ i ] ) )
+ break;
+ }
+
+ if ( i == 0 )
+ return RC ( rcSRA, rcMgr, rcResolving, rcPath, rcInvalid );
+
+ * prefix = i;
+ * number = ( uint32_t ) strtoul ( & accession [ i ], & end, 10 );
+
+ if (( end [ 0 ] == 0 ) || ( end [ 0 ] == '.' ))
+ {
+ return 0;
+ }
+ return RC ( rcSRA, rcMgr, rcResolving, rcPath, rcInvalid );
+}
+
+
+/* Full
+ * creates full path from server, volume & accession
+ *
+ * "rep" [ IN ] - NUL terminated full path of replication
+ * server, e.g. "/panfs/traces01"
+ *
+ * "vol" [ IN ] - NUL terminated relative path of volume,
+ * e.g. "sra2"
+ *
+ * "accession" [ IN ] - NUL terminated run accession,
+ * e.g. "SRR000001"
+ *
+ * "path" [ OUT ] and "path_max" [ IN ] - return buffer for
+ * NUL-terminated full path to accession.
+ */
+static
+rc_t SRAPathFullInt ( const NCBISRAPath *self, const char *rep, const char *vol,
+ const char *accession, char *path, size_t path_max, size_t bank_size )
+{
+ /* pick apart accession */
+ uint32_t prefix, number;
+ rc_t rc = SRAPathParseRunAccession ( accession, & prefix, & number );
+ if ( rc == 0 )
+ {
+ size_t len;
+ size_t total = 0;
+ uint32_t bank = number / bank_size;
+
+ if ( rep [ 0 ] != 0 && vol [ 0 ] != 0 )
+ {
+ /* normally write all parts at once */
+ if ( rep [ strlen (rep) - 1 ] == '/') /* check for need or not a '/' between rep and vol */
+ rc= string_printf ( path, path_max, &len, "%s%s/%.*s/%06u/%s"
+ , rep
+ , vol
+ , ( int ) prefix, accession
+ , bank
+ , accession );
+ else
+ rc= string_printf ( path, path_max, &len, "%s/%s/%.*s/%06u/%s"
+ , rep
+ , vol
+ , ( int ) prefix, accession
+ , bank
+ , accession );
+ }
+ else
+ {
+ /* allow for individual rep-server and volume parts */
+ if ( rep [ 0 ] != 0 )
+ {
+ rc = string_printf ( path, path_max, &len, "%s/", rep );
+ if ( rc != 0 || ( total = len ) >= path_max )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+ else if ( vol [ 0 ] != 0 )
+ {
+ rc = string_printf ( & path [ total ], path_max - total, &len, "%s/", vol );
+ if ( rc != 0 || ( total = len ) >= path_max )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+
+ /* append the accession */
+ rc = string_printf ( & path [ total ], path_max - total, &len, "%.*s/%06u/%s"
+ , ( int ) prefix, accession
+ , bank
+ , accession );
+ }
+
+ /* common detection of buffer overflow */
+ if ( rc != 0 || ( total += len ) >= path_max )
+ rc = RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+
+ return rc;
+}
+
+static
+rc_t SRAPathFullEBI ( const NCBISRAPath *self, const char *rep, const char *vol,
+ const char *accession, char *path, size_t path_max )
+{
+ /* pick apart accession */
+ uint32_t prefix, number;
+ rc_t rc = SRAPathParseRunAccession ( accession, & prefix, & number );
+ if ( rc == 0 )
+ {
+ size_t len;
+ size_t total = 0;
+ uint32_t bank = number / 1000;
+
+ if ( rep [ 0 ] != 0 && vol [ 0 ] != 0 )
+ {
+ /* normally write all parts at once */
+ if ( rep [ strlen (rep) - 1 ] == '/') /* check for need or not a '/' between rep and vol */
+ rc= string_printf ( path, path_max, &len, "%s%s/%.*s/%.*s%03u/%s"
+ , rep
+ , vol
+ , ( int ) prefix, accession
+ , ( int ) prefix, accession
+ , bank
+ , accession );
+ else
+ rc= string_printf ( path, path_max, &len, "%s/%s/%.*s/%.*s%03u/%s"
+ , rep
+ , vol
+ , ( int ) prefix, accession
+ , ( int ) prefix, accession
+ , bank
+ , accession );
+ }
+ else
+ {
+ /* allow for individual rep-server and volume parts */
+ if ( rep [ 0 ] != 0 )
+ {
+ rc = string_printf ( path, path_max, &len, "%s/", rep );
+ if ( rc < 0 || ( total = len ) >= path_max )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+ else if ( vol [ 0 ] != 0 )
+ {
+ rc = string_printf ( & path [ total ], path_max - total, &len, "%s/", vol );
+ if ( rc != 0 || ( total = len ) >= path_max )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+
+ /* append the accession */
+ rc = string_printf ( & path [ total ], path_max - total, &len, "%.*s/%.*s%03u/%s"
+ , ( int ) prefix, accession
+ , ( int ) prefix, accession
+ , bank
+ , accession );
+ }
+
+ /* common detection of buffer overflow */
+ if ( len < 0 || ( total += len ) >= path_max )
+ rc = RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+
+ return rc;
+}
+
+/*
+* Refseq-style accessions come in 2 naming flavors, flat or SRA-like.
+* If an accession with a flat name does not exist, use SRAPathFullInt to create an SRA-like path
+*/
+static
+rc_t SRAPathFullREFSEQ ( const NCBISRAPath *self, const char *rep, const char *vol,
+ const char *accession, char *path, size_t path_max )
+{
+ /* pick apart accession */
+ uint32_t prefix, number;
+ rc_t rc = SRAPathParseRunAccession ( accession, & prefix, & number );
+ if ( rc == 0 )
+ {
+ size_t len;
+ size_t total = 0;
+
+ if ( rep [ 0 ] != 0 && vol [ 0 ] != 0 )
+ {
+ /* normally write all parts at once */
+ if ( rep [ strlen (rep) - 1 ] == '/') /* check for need or not a '/' between rep and vol */
+ rc= string_printf ( path, path_max, &len, "%s%s/%s"
+ , rep
+ , vol
+ , accession );
+ else
+ rc= string_printf ( path, path_max, &len, "%s/%s/%s"
+ , rep
+ , vol
+ , accession );
+ }
+ else
+ {
+ /* allow for individual rep-server and volume parts */
+ if ( rep [ 0 ] != 0 )
+ {
+ rc = string_printf ( path, path_max, &len, "%s/", rep );
+ if ( rc != 0 || ( total = len ) >= path_max )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+ else if ( vol [ 0 ] != 0 )
+ {
+ rc = string_printf ( & path [ total ], path_max - total, &len, "%s/", vol );
+ if ( rc != 0 || ( total = len ) >= path_max )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+
+ /* append the accession */
+ rc = string_printf ( & path [ total ], path_max - total, &len, "%s"
+ , accession );
+ }
+
+ /* common detection of buffer overflow */
+ if ( rc != 0 || ( total += len ) >= path_max )
+ rc = RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+
+ return rc;
+}
+
+/*
+ * Try to locate in RefSeq Archives:
+ * check for pattern '(\w{4}\d{2})[\.\d]+'; the archive is $1
+ * use the scheme "x-ncbi-legrefseq" for vfs to recognize special case
+ */
+static
+rc_t SRAPathFullREFSEQArchive(NCBISRAPath const *self,
+ char const rep[],
+ char const vol[],
+ char const accession[],
+ char path[],
+ size_t path_max
+ )
+{
+ size_t const rep_sz = strlen(rep);
+ size_t const vol_sz = strlen(vol);
+ char const *const rep_sep = (rep_sz > 0 && rep[rep_sz - 1] != '/') ? "/" : "";
+ char const *const vol_sep = (vol_sz > 0 && vol[vol_sz - 1] != '/') ? "/" : "";
+ size_t sz;
+ unsigned i;
+ VFSManager *vfs;
+ rc_t rc = VFSManagerMake(&vfs);
+ VPath *vpath;
+ KDirectory const *dir;
+ KPathType type;
+
+ if (rc)
+ return rc;
+
+ for (i = 0; i < 4; ++i) {
+ int const ch = accession[i];
+
+ if (ch == 0 || !isalpha(ch))
+ return RC(rcSRA, rcMgr, rcAccessing, rcPath, rcIncorrect);
+ }
+ for ( ; ; ++i) {
+ int const ch = accession[i];
+
+ if (ch == 0)
+ break;
+ if (ch != '.' && !isdigit(ch))
+ return RC(rcSRA, rcMgr, rcAccessing, rcPath, rcIncorrect);
+ }
+ if (i < 8)
+ return RC(rcSRA, rcMgr, rcAccessing, rcPath, rcIncorrect);
+
+ rc = string_printf(path, path_max, &sz, "x-ncbi-legrefseq:%s%s%s%s%.6s", rep, rep_sep, vol, vol_sep, accession);
+ if (rc) return rc;
+ i = sz;
+
+ rc = VPathMake(&vpath, path + 17);
+ if (rc) return rc;
+
+ rc = VFSManagerOpenDirectoryRead(vfs, &dir, vpath);
+ VPathRelease(vpath);
+ VFSManagerRelease(vfs);
+ if (rc) return rc;
+
+ type = KDirectoryPathType(dir, "tbl/%s", accession);
+ KDirectoryRelease(dir);
+
+ if (type != kptDir)
+ return RC(rcSRA, rcMgr, rcAccessing, rcPath, rcIncorrect);
+
+ rc = string_printf(path + i, path_max - i, &sz, "#tbl/%s", accession);
+
+ return rc;
+}
+
+/*
+* WGS style naming: accession name ABCD01 resolves into WGS/AB/CD/ABCD01
+*/
+static
+rc_t SRAPathFullWGS( const NCBISRAPath *self, const char *rep, const char *vol,
+ const char *accession, char *path, size_t path_max )
+{
+ /* pick apart accession */
+ uint32_t prefix, number;
+ rc_t rc = SRAPathParseRunAccession ( accession, & prefix, & number );
+ if ( rc == 0 )
+ {
+ size_t len;
+ size_t total = 0;
+
+ if ( prefix < 4 )
+ {
+ return RC ( rcSRA, rcMgr, rcResolving, rcName, rcTooShort );
+ }
+
+ if ( rep [ 0 ] != 0 && vol [ 0 ] != 0 )
+ {
+ /* normally write all parts at once */
+ if ( rep [ strlen (rep) - 1 ] == '/') /* check for need or not a '/' between rep and vol */
+ rc= string_printf ( path, path_max, &len, "%s%s/WGS/%.2s/%.2s/%s"
+ , rep
+ , vol
+ , accession
+ , accession+2
+ , accession );
+ else
+ rc= string_printf ( path, path_max, &len, "%s/%s/WGS/%.2s/%.2s/%s"
+ , rep
+ , vol
+ , accession
+ , accession+2
+ , accession );
+ }
+ else
+ {
+ /* allow for individual rep-server and volume parts */
+ if ( rep [ 0 ] != 0 )
+ {
+ rc = string_printf ( path, path_max, &len, "%s/", rep );
+ if ( rc != 0 || ( total = len ) >= path_max )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+ else if ( vol [ 0 ] != 0 )
+ {
+ rc = string_printf ( & path [ total ], path_max - total, &len, "%s/", vol );
+ if ( rc != 0 || ( total = len ) >= path_max )
+ return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+
+ /* append the accession */
+ rc= string_printf ( & path [ total ], path_max - total, &len, "WGS/%.2s/%.2s/%s"
+ , accession
+ , accession+2
+ , accession );
+ }
+
+ /* common detection of buffer overflow */
+ if ( rc != 0 || ( total += len ) >= path_max )
+ rc = RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+ }
+
+ return rc;
+}
+
+static
+rc_t ApplyAlg( const NCBISRAPath *self, const char *rep, const char *vol,
+ const char *accession, char *path, size_t path_max, NCBIRepository *repo, bool* found)
+{
+ SRAPathFindInfo pb;
+ /* see if we recognize volume */
+ pb . path = vol;
+ pb . size = strlen ( vol );
+ pb . found = 0;
+
+ DLListDoUntil ( & repo -> vols, 0, SRAPathStringFind, & pb );
+ if ( pb . found )
+ {
+ *found = true;
+ switch (pb . alg)
+ {
+ case alg_ebi:
+ return SRAPathFullEBI ( self, rep, vol, accession, path, path_max );
+ case alg_refseq:
+ {
+ rc_t rc = SRAPathFullREFSEQ ( self, rep, vol, accession, path, path_max );
+ if ( rc == 0) /* check for existence of accession at the root of the volume, and if not found try to apply the default path-building scheme */
+ {
+ switch ( KDirectoryPathType ( self -> dir, path ) )
+ {
+ case kptNotFound:
+ case kptBadPath:
+ return SRAPathFullREFSEQArchive( self, rep, vol, accession, path, path_max );
+ default:
+ return 0;
+ }
+ }
+ }
+ case alg_wgs:
+ return SRAPathFullWGS ( self, rep, vol, accession, path, path_max );
+ default:
+ break;
+ }
+ }
+ *found = false;
+ return 0;
+}
+
+static
+rc_t CC NCBISRAPathFull ( const NCBISRAPath *self, const char *rep, const char *vol,
+ const char *accession, char *path, size_t path_max )
+{
+ NCBIRepository *repo;
+ bool found;
+ rc_t rc;
+
+ /* loop through repositories */
+ for ( repo = ( NCBIRepository* ) DLListHead ( & self -> repos );
+ repo != NULL; repo = ( NCBIRepository* ) DLNodeNext ( & repo -> n ) )
+ {
+ rc = ApplyAlg( self, rep, vol, accession, path, path_max, repo, &found);
+ if (found)
+ {
+ return rc;
+ }
+ }
+ /* try the default repository */
+ rc = ApplyAlg( self, rep, vol, accession, path, path_max, self -> dflt_repo, &found);
+ if (found)
+ {
+ return rc;
+ }
+ /* internal version */
+ return SRAPathFullInt ( self, rep, vol, accession, path, path_max, 1024 );
+}
+
+
+/* Test
+ * returns true if path appears to be accession
+ * the test is a heuristic, and may return false positives
+ *
+ * "path" [ IN ] - NUL terminated path to run
+ */
+static
+bool SRAPathTestTable ( const KDirectory *dir, uint32_t type, const char *path )
+{
+ /* differentiate between legacy and current structure */
+ switch ( KDirectoryPathType ( dir, "%s/idx", path ) )
+ {
+ case kptNotFound:
+ switch ( KDirectoryPathType ( dir, "%s/meta", path ) )
+ {
+ case kptFile:
+ case kptFile | kptAlias:
+ switch ( KDirectoryPathType ( dir, "%s/skey", path ) )
+ {
+ case kptFile:
+ case kptFile | kptAlias:
+ return true;
+ }
+ break;
+ }
+ break;
+
+ case kptDir:
+ case kptDir | kptAlias:
+ switch ( KDirectoryPathType ( dir, "%s/md/cur", path ) )
+ {
+ case kptFile:
+ case kptFile | kptAlias:
+ return true;
+ }
+ break;
+ }
+
+ /* not a table */
+ return false;
+}
+
+static
+bool SRAPathTestDatabase ( const KDirectory *dir, uint32_t type, const char *path )
+{
+ /* don't have a more stringent requirement for database at this time */
+ return true;
+}
+
+static
+bool SRAPathTestFile ( const KDirectory *dir, uint32_t type, const char *path )
+{
+ /* TBD - need to look at magic information */
+ return false;
+}
+
+static
+bool SRAPathTestInt ( const KDirectory *dir, uint32_t type, const char *path )
+{
+ switch ( type )
+ {
+ case kptDir:
+ case kptDir | kptAlias:
+ break;
+
+ case kptFile:
+ case kptFile | kptAlias:
+ return SRAPathTestFile ( dir, type, path );
+
+ default:
+ return false;
+ }
+
+ /* detect apparent tables */
+ switch ( KDirectoryPathType ( dir, "%s/col", path ) )
+ {
+ case kptDir:
+ case kptDir | kptAlias:
+ return SRAPathTestTable ( dir, type, path );
+ }
+
+ /* detect apparent databases */
+ switch ( KDirectoryPathType ( dir, "%s/tbl", path ) )
+ {
+ case kptDir:
+ case kptDir | kptAlias:
+ return SRAPathTestDatabase ( dir, type, path );
+ }
+
+ /* not a recognized accession */
+ return false;
+}
+
+static
+bool CC NCBISRAPathTest ( const NCBISRAPath *self, const char *path )
+{
+ return SRAPathTestInt ( self -> dir,
+ KDirectoryPathType ( self -> dir, path ), path );
+}
+
+
+/* FindOnServer
+ * find accession on rep-server
+ */
+static
+rc_t SRAPathFindOnServer ( const NCBISRAPath *self, const NCBIRepository *repo, const SRAPathString *srv,
+ const char *accession, char *path, size_t path_max, int vol_type )
+{
+ const SRAPathString *vol;
+
+ PATH_DEBUG (("SRAPathFindOnServer(%s)\n", srv->path));
+
+ for ( vol = ( const SRAPathString* ) DLListHead ( & repo -> vols );
+ vol != NULL; vol = ( const SRAPathString* ) DLNodeNext ( & vol -> n ) )
+ {
+ if ( vol_type == alg_none || vol_type == vol->alg )
+ {
+ rc_t rc;
+
+ PATH_DEBUG (("SRAPathFindOnServer trying volume %s\n", vol->path));
+
+ switch ( vol -> alg )
+ {
+ case alg_ebi:
+ rc = SRAPathFullEBI ( self, srv -> path, vol -> path, accession, path, path_max );
+ break;
+ case alg_refseq:
+ rc = SRAPathFullREFSEQ ( self, srv -> path, vol -> path, accession, path, path_max );
+ if ( rc == 0) /* check for existence of accession at the root of the volume, and if not found try to apply the default path-building scheme */
+ {
+ switch ( KDirectoryPathType ( self -> dir, path ) )
+ {
+ case kptNotFound:
+ case kptBadPath:
+ rc = SRAPathFullREFSEQArchive( self, srv -> path, vol -> path, accession, path, path_max );
+ if (rc == 0) {
+ PATH_DEBUG (("SRAPathFindOnServer: found(%s)\n", path));
+ return 0;
+ }
+ break;
+ default:
+ return 0;
+ }
+ }
+ break;
+ case alg_wgs:
+ rc = SRAPathFullWGS ( self, srv -> path, vol -> path, accession, path, path_max );
+ break;
+ default:
+ rc = SRAPathFullInt ( self, srv -> path, vol -> path, accession, path, path_max, 1024 );
+ break;
+ }
+ if ( rc == 0 )
+ {
+ switch ( KDirectoryPathType ( self -> dir, path ) )
+ {
+ case kptNotFound:
+ case kptBadPath:
+ break;
+ default:
+ PATH_DEBUG (("SRAPathFindOnServer: found(%s)\n", path));
+ return 0;
+ }
+ }
+ else
+ {
+ if ( GetRCState( rc ) == rcInsufficient )
+ return rc;
+ }
+ }
+ }
+
+ return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNotFound );
+}
+
+/* FindInRepo
+ * find accession in a repository
+ */
+static
+rc_t SRAPathFindInRepo ( const NCBISRAPath *self, NCBIRepository *repo, const char *accession,
+ char *path, size_t path_max, size_t *rep_len, int vol_type )
+{
+ SRAPathString *srv;
+
+ PATH_DEBUG (("SRAPathFindInRepo(%s)\n", AlgToStr(repo->type)));
+
+ /* look for accession on a rep-server */
+ for ( srv = ( SRAPathString* ) DLListHead ( & repo -> repsrv ); srv != NULL; srv = ( SRAPathString* ) DLNodeNext ( & srv -> n ) )
+ {
+ /* try with this server */
+ rc_t rc = SRAPathFindOnServer ( self, repo, srv, accession, path, path_max, vol_type );
+ if ( rc == 0 )
+ {
+ /* make sure server is at head of list */
+ if ( DLNodePrev ( & srv -> n ) != NULL )
+ {
+ DLListUnlink ( & repo -> repsrv, & srv -> n );
+ DLListPushHead ( & repo -> repsrv, & srv -> n );
+ }
+
+ if ( rep_len != NULL )
+ * rep_len = strlen ( srv -> path );
+
+ return 0;
+ }
+
+ if ( GetRCState ( rc ) != rcNotFound )
+ return rc;
+ }
+
+ return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNotFound );
+}
+
+/* FindInRepoByType
+ * find accession in a repository of a given type
+ */
+static
+rc_t SRAPathFindInRepoByType ( const NCBISRAPath *self, const char *accession, char *path, size_t path_max, size_t *rep_len, int repo_type, int vol_type )
+{
+ /* loop through all repositories */
+ NCBIRepository *repo;
+ for ( repo = ( NCBIRepository* ) DLListHead ( & self -> repos ); repo != NULL; repo = ( NCBIRepository* ) DLNodeNext ( & repo -> n ) )
+ {
+ if ( repo->type == repo_type && SRAPathFindInRepo(self, repo, accession, path, path_max, rep_len, vol_type) == 0 )
+ return 0;
+ }
+ return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNotFound );
+}
+
+/* FastFind
+ * Uses heuristics to select the repository most likely to contain the accession, then tries to locate the acecssion in the repository.
+*/
+static
+rc_t FindFast( const NCBISRAPath *cself, const char *accession, char *path, size_t path_max, size_t *rep_len )
+{
+ /*TODO: look up cache first */
+
+ /* recognize known naming schemes */
+ size_t size = string_size(accession);
+ if ( string_cmp(accession, size, "SRR", 3, 3) == 0 )
+ return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_ncbi, alg_ncbi);
+
+ if ( string_cmp(accession, size, "ERR", 3, 3) == 0 )
+ return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_ncbi, alg_ebi);
+
+ if ( string_cmp(accession, size, "DRR", 3, 3) == 0 )
+ return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_ncbi, alg_ddbj);
+
+ if ( string_chr(accession, size, '.') != NULL )
+ return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_refseq, alg_none);
+
+ if ( size > 2 && isdigit(accession[size-1]) && isdigit(accession[size-2]) && ! isdigit(accession[size-3]) )
+ return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_wgs, alg_none);
+
+ return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNotFound );
+}
+
+/* Find
+ * finds location of run within rep-server/volume matrix
+ *
+ * "accession" [ IN ] - NUL terminated run accession,
+ * e.g. "SRR000001"
+ *
+ * "path" [ OUT ] and "path_max" [ IN ] - return buffer for
+ * NUL-terminated full path to accession.
+ *
+ * returns 0 if path exists, rc state rcNotFound if
+ * path cannot be found, and rcInsufficient if buffer is
+ * too small.
+ */
+static
+rc_t CC NCBISRAPathFindWithRepLen ( const NCBISRAPath *cself, const char *accession, char *path, size_t path_max, size_t *rep_len )
+{
+ rc_t rc;
+ NCBIRepository *repo;
+
+ PATH_DEBUG(("NCBISRAPathFindWithRepLen(%s)\n", accession));
+
+ rc = FindFast( cself, accession, path, path_max, rep_len );
+ if ( rc == 0 )
+ return 0;
+
+ /* loop through all repositories */
+ for ( repo = ( NCBIRepository* ) DLListHead ( & cself -> repos ); repo != NULL; repo = ( NCBIRepository* ) DLNodeNext ( & repo -> n ) )
+ {
+ rc = SRAPathFindInRepo(cself, repo, accession, path, path_max, rep_len, alg_none);
+ if ( rc == 0 )
+ return 0;
+ }
+ /* default repository */
+ return SRAPathFindInRepo(cself, cself -> dflt_repo, accession, path, path_max, rep_len, alg_none);
+}
+
+struct SRAPath_vt_v2 vtSRAPath =
+{
+ 2, 1,
+ NCBISRAPathAddRef,
+ NCBISRAPathRelease,
+ NCBISRAPathVersion,
+ NCBISRAPathClear,
+ NCBISRAPathAddRepPathDefault,
+ NCBISRAPathAddVolPathDefault,
+ NCBISRAPathFull,
+ NCBISRAPathTest,
+ NCBISRAPathFindWithRepLen
+};
+
+/* Make
+ * create path manager
+ *
+ * the path manager should already be configured with
+ * standard search paths, but can be augmented by using
+ * the Add*Path messages.
+ *
+ * "dir" [ IN, NULL OKAY ] - optional root directory to use
+ * attaches a new reference
+ */
+MOD_EXPORT
+rc_t CC SRAPathMakeImpl ( SRAPath **pm, const KDirectory *dir )
+{
+ rc_t rc;
+
+ if ( pm == NULL )
+ rc = RC ( rcSRA, rcMgr, rcConstructing, rcParam, rcNull );
+ else
+ {
+ NCBISRAPath *p = (NCBISRAPath *) malloc ( sizeof * p );
+ if ( p == NULL )
+ rc = RC ( rcSRA, rcMgr, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ p -> dad . vt = ( SRAPath_vt* ) & vtSRAPath;
+ p -> dir = dir;
+ if ( dir != NULL )
+ rc = KDirectoryAddRef ( dir );
+ else
+ {
+ KDirectory *wd;
+ rc = KDirectoryNativeDir ( & wd );
+ p -> dir = wd;
+ }
+
+ if ( rc != 0 )
+ free ( p );
+ else
+ {
+ DLListInit ( & p -> repos );
+ p -> dflt_repo = NULL;
+ atomic32_set ( & p -> refcount, 1 );
+
+ /* the object is now complete */
+ rc = SRAPathConfig ( p );
+ if ( rc == 0 )
+ {
+ * pm = & p -> dad;
+ return 0;
+ }
+
+ SRAPathWhack ( p );
+ }
+ }
+
+ * pm = NULL;
+ }
+
+ return rc;
+}
diff --git a/libs/vfs/unix/syspath.c b/libs/vfs/unix/syspath.c
new file mode 100644
index 0000000..540dd84
--- /dev/null
+++ b/libs/vfs/unix/syspath.c
@@ -0,0 +1,127 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vfs/extern.h>
+
+#include <vfs/path.h>
+#include "path-priv.h"
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+
+#include <stdlib.h>
+
+#include <string.h>
+#include <unistd.h>
+
+rc_t VPathTransformSysPath (VPath * self)
+{
+#if 1
+ return 0;
+#else
+ size_t path_size = strlen (sys_path) + 1; /* includes NUL */
+ rc_t rc = 0;
+ void * temp = self->storage;
+
+ if (self->storage == self->buffer)
+ {
+ if (path_size > sizeof (self->buffer))
+ temp = self->storage = NULL;
+ }
+ else if (self->alloc_size < path_size)
+ {
+ temp = NULL;
+ }
+
+ if (temp == NULL)
+ {
+ temp = realloc (self->storage, path_size);
+ if (temp == NULL)
+ {
+ rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+ if (self->alloc_size == 0)
+ self->storage = self->buffer;
+ }
+ else
+ {
+ self->alloc_size = path_size;
+ self->storage = temp;
+ }
+ }
+ if (rc == 0)
+ {
+ /* replace this with a minimal path validator */
+ strcpy (self->storage, sys_path);
+ self->asciz_size = path_size-1;
+ }
+ return rc;
+#endif
+}
+
+
+rc_t VPathGetCWD (char * buffer, size_t buffer_size)
+{
+ char * temp = getcwd (buffer, buffer_size);
+ if (temp == NULL)
+ return RC (rcFS, rcPath, rcAccessing, rcBuffer, rcInsufficient);
+ return 0;
+}
+
+
+rc_t VPathTransformPathHier (char ** ppath)
+{
+#if USE_EXPERIMENTAL_CODE && 0
+/* turning this off until http urls are better handled. */
+ char * pc;
+
+ pc = *ppath;
+ PATH_DEBUG (("%s: incoming path '%s'\n",__func__, *ppath));
+
+ if ((pc[0] == '/') && (pc[1] == '/'))
+ {
+ pc += 2;
+
+ if (pc[0] != '/')
+ {
+ static const char localhost[] = "localhost";
+ size_t z = strlen (localhost);
+
+ if (strncmp (localhost, pc, z ) == 0)
+ pc += z;
+ else
+ {
+ rc_t rc = RC (rcFS, rcPath, rcConstructing, rcUri, rcIncorrect);
+ LOGERR (klogErr, rc, "illegal host in kfs/path url");
+ return rc;
+ }
+ }
+ *ppath = pc;
+ }
+ PATH_DEBUG (("%s: outgoing path '%s'\n",__func__, *ppath));
+#endif
+ return 0;
+}
diff --git a/libs/vfs/win/syspath.c b/libs/vfs/win/syspath.c
new file mode 100644
index 0000000..707e833
--- /dev/null
+++ b/libs/vfs/win/syspath.c
@@ -0,0 +1,288 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#define CHECK_WINDOWS_PATH_LENGTH 0
+#include <vfs/extern.h>
+
+#include <vfs/path.h>
+#include "path-priv.h"
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <windows.h>
+#include <direct.h>
+
+static const
+char * reserved_device_names [] =
+{
+ "CON:",
+ "PRN:",
+ "AUX:",
+ "NUL:",
+ "COM1:",
+ "COM2:",
+ "COM3:",
+ "COM4:",
+ "COM5:",
+ "COM6:",
+ "COM7:",
+ "COM8:",
+ "COM9:",
+ "LPT1:",
+ "LPT2:",
+ "LPT3:",
+ "LPT4:",
+ "LPT5;",
+ "LPT6:",
+ "LPT7:",
+ "LPT8:",
+ "LPT9:",
+ NULL
+};
+
+rc_t CC VPathTransformSysPath (VPath * self)
+{
+ char * pc;
+ size_t lim;
+ size_t ix;
+ rc_t rc = 0;
+
+ pc = (char *)(self->path.addr);
+ lim = StringSize (&self->path);
+
+ if (lim == 0)
+ return 0;
+
+ /* -----
+ * toss out windows/dos device names
+ */
+ for (ix = 0; reserved_device_names[ix] != NULL; ++ix)
+ if (strcmp (reserved_device_names[ix], pc) == 0)
+ return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
+
+ /* -----
+ * look for for mingw and cygwin full paths and make them windowish
+ * NOTE we could screw things up here with bad strings like
+ * /cygdrive/haha/fooled-you
+ */
+
+ if (pc[0] == '/')
+ {
+ static const char cygdrive [] = "/cygdrive/";
+
+ if (strncmp (pc, cygdrive, sizeof cygdrive - 1) == 0)
+ {
+ pc += sizeof cygdrive - 2;
+ lim -= sizeof cygdrive - 2;
+ /* NOTE: if the macro changes this could fail! */
+ StringInit (&self->path, pc,
+ StringSize(&self->path) - sizeof cygdrive - 2,
+ StringLength(&self->path) - sizeof cygdrive - 2);
+ }
+
+ /* if here we had a mingw or cygwin specification */
+ if (isalpha (pc[1]) && (pc[2] == '/'))
+ {
+ /* change it back to a windows specification */
+ pc[0] = pc[1];
+ pc[1] = ':';
+ }
+ }
+
+ /* change from Windows '/' to posix '/' segment dividers */
+ for (ix = 0; ix < lim; ++ix)
+ if (pc [ix] == '\\')
+ pc [ix] = '/';
+
+ /* look for stray ':' characters */
+ for (ix = 0; ix < lim; ++ix)
+ {
+ if (pc[ix] == ':')
+ {
+ rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
+ PLOGERR (klogErr,
+ (klogErr, rc, "incorrect use of ':' in path '$(path)'",
+ "path=%s", pc));
+ return rc;
+ }
+ if (ix == 0)
+ ++ix;
+ }
+
+ if ((lim > 1) && (pc[1] == ':'))
+ {
+ if (!isalpha (pc[0]))
+ {
+ rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
+ PLOGERR (klogErr,
+ (klogErr, rc, "invalid character as drive letter '$(c)' ($(d)) in path '$(S)'",
+ "c=%c,d=%d,s=%s",pc[0],pc[0],pc));
+ return rc;
+ }
+ /* we don't support drive relative addressing at this point
+ * we should correct this in the future */
+ if (pc[2] != '/')
+ {
+ rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
+ PLOGERR (klogErr,
+ (klogErr, rc, "drive relative addressing not currently supported '$(path)'",
+ "path=%s", pc));
+ return rc;
+ }
+ }
+
+ if ((pc[0] == '/') && (pc[1] == '/')) /* UNC form */
+ {
+ if (pc[2] == '.') /* device space name - we don't handle these */
+ return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
+
+ if (pc[2] == '?') /* special space name - we don't handle these */
+ return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
+ }
+
+/* possible future stuff? */
+#if DO_MORE_STUFF_TO_VALIDATE_PATH
+ /* -----
+ * this size thing is turned off to allow paths into archives
+ */
+ ix = string_size (ipc = inpath);
+ if (ix > MAX_PATH)
+ return RC (rcFS, rcPath, rcConstructing, rcPath, rcTooLong);
+ {
+ DWORD insize = ilen;
+ DWORD outlen;
+
+ outlen = GetFullPathNameA (ipc, (DWORD)sizeof (temp), temp, NULL);
+
+ if (outlen == 0)
+ return RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
+ if (outlen > sizeof temp)
+ return RC (rcFS, rcPath, rcConstructing, rcPath, rcTooShort);
+
+ ipc = temp;
+
+ opc[0] = '/';
+ opc[1] = ipc [0];
+
+ ix = jx = 2;
+ }
+
+ do
+ {
+ switch (ipc[ix])
+ {
+ case '\0':
+ normalize_done = true;
+ /* fall through */
+ default:
+ opc[jx++] = ipc[ix++];
+ break;
+
+ case '\\':
+ opc[jx++] = '/';
+ ++ix;
+ break;
+
+ case '\x1': /* never allowed */
+ case '\x2':
+ case '\x3':
+ case '\x4':
+ case '\x5':
+ case '\x6':
+ case '\x7':
+ case '\x8':
+ case '\x9':
+ case '\xA':
+ case '\xB':
+ case '\xC':
+ case '\xD':
+ case '\xE':
+ case '\xF':
+ case '\x10':
+ case '\x11':
+ case '\x12':
+ case '\x13':
+ case '\x14':
+ case '\x15':
+ case '\x16':
+ case '\x17':
+ case '\x18':
+ case '\x19':
+ case '\x1A':
+ case '\x1B':
+ case '\x1C':
+ case '\x1D':
+ case '\x1E':
+ case '\x1F':
+ case ':':
+ case '<':
+ case '>':
+ case '"':
+ case '|':
+ case '*':
+ case '?':
+ rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
+ PLOGERR (klogErr,
+ (klogErr, rc, "invalid character '$(c)' ($(d)) in path '$(s)'",
+ "c=%c,d=%d,s=%s",ipc[ix],ipc[ix],ipc));
+ return rc;
+ }
+ } while (!normalize_done);
+
+ self->asciz_size = ix - 1;
+
+#endif
+ /* put drive based paths (back?) into our form */
+ if ((lim > 1) && (pc[1] == ':'))
+ {
+ pc[1] = pc[0];
+ pc[0] = '/';
+ self->scheme = vpuri_ncbi_vfs;
+ }
+ return 0;
+}
+
+rc_t VPathTransformPathHier (char ** uri_path)
+{
+ return 0;
+}
+
+LIB_EXPORT rc_t CC VPathGetCWD (char * buffer, size_t buffer_size)
+{
+ char * temp = _getcwd (buffer, (int)buffer_size);
+ if (temp == NULL)
+ return RC (rcFS, rcPath, rcAccessing, rcBuffer, rcInsufficient);
+ return 0;
+}
+
+#if USE_EXPERIMENTAL_CODE
+rc_t VPathInitAuthority (struct VPath * self, char ** next)
+{
+/* static const char null_string[] = ""; */
+/* CONST_STRING (&self->authority, null_string); */
+ return 0;
+}
+#endif
diff --git a/libs/vxf/Makefile b/libs/vxf/Makefile
index ebd2c1a..930dd5f 100644
--- a/libs/vxf/Makefile
+++ b/libs/vxf/Makefile
@@ -32,23 +32,27 @@ MOD_LIBS = \
libvxf \
libwvxf
-ALL_LIBS = \
- $(MOD_LIBS)
+TEST_TOOLS = \
+ wb-test-vxf
include $(TOP)/build/Makefile.env
+ALL_LIBS = \
+ $(MOD_LIBS)
+
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(ALL_LIBS))
-
-all std: makedirs vers-includes
+all std: makedirs
@ $(MAKE_CMD) $(TARGDIR)/std
-$(MOD_LIBS): makedirs vers-includes
+$(MOD_LIBS): makedirs
@ $(MAKE_CMD) $(TARGDIR)/$@
-.PHONY: vers-includes all std $(ALL_LIBS)
+$(TEST_TOOLS): makedirs
+ @ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
#-------------------------------------------------------------------------------
# std
@@ -66,14 +70,6 @@ clean: stdclean
.PHONY: clean
#-------------------------------------------------------------------------------
-# tag
-#
-tag: \
- $(addsuffix _tag,$(ALL_LIBS))
-
-.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
-
-#-------------------------------------------------------------------------------
# vdb transform library
#
$(TARGDIR)/libvxf: $(addprefix $(TARGDIR)/libvxf.,$(MODEXT))
@@ -119,7 +115,9 @@ VXF_SRC = \
simple-sub-select \
extract_token \
strtonum \
- sprintf
+ sprintf \
+ wgs-tokenize-accession \
+ lower-case-tech-reads
VXF_OBJ = \
$(addsuffix .$(LOBX),$(VXF_SRC))
@@ -137,10 +135,7 @@ $(MODDIR)/libvxf.$(SHLX): $(VXF_OBJ)
$(TARGDIR)/libvxf.$(LIBX): $(ILIBDIR)/libvxf.$(LIBX)
$(ILIBDIR)/libvxf.$(LIBX): $(VXF_OBJ)
- $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(VXF_LIB)
-
-libvxf_tag:
- @ $(TOP)/build/tag-module.sh $(MODULE) libvxf $(VXF_OBJ)
+ $(LD) --slib -o $@ $^ $(VXF_LIB)
#-------------------------------------------------------------------------------
# wvdb transform library
@@ -176,12 +171,37 @@ $(WMODDIR)/libwvxf.$(SHLX): $(WVXF_OBJ)
$(TARGDIR)/libwvxf.$(LIBX): $(ILIBDIR)/libwvxf.$(LIBX)
$(ILIBDIR)/libwvxf.$(LIBX): $(WVXF_OBJ)
- $(LD) --slib --vers $(SRCDIR) -o $@ $^ $(WVXF_LIB)
-
-libwvxf_tag:
- @ $(TOP)/build/tag-module.sh $(MODULE) libwvxf $(WVXF_OBJ)
+ $(LD) --slib -o $@ $^ $(WVXF_LIB)
libwvxf.vers.h:
@ true
.PHONY: $(TARGDIR)/libwvxf $(TARGDIR)/libwvxf.$(SHLX) $(TARGDIR)/libwvxf.$(LIBX)
+
+#-------------------------------------------------------------------------------
+# white-box test
+#
+TEST_SRC = \
+ wb-test-vxf \
+ wb-irzip-impl
+
+TEST_OBJ = \
+ $(addsuffix .$(OBJX),$(TEST_SRC))
+
+TEST_LIBS = \
+ -skapp \
+ -svdb \
+ -skdb \
+ -svfs \
+ -skurl \
+ -skrypto \
+ -skfg \
+ -skfs \
+ -skproc \
+ -sktst \
+ -sklib
+
+$(TEST_BINDIR)/wb-test-vxf: $(TEST_OBJ)
+ $(LP) --exe -o $@ $^ $(TEST_LIBS)
+
+
diff --git a/libs/vxf/checksum.c b/libs/vxf/checksum.c
index b63404a..37b3903 100644
--- a/libs/vxf/checksum.c
+++ b/libs/vxf/checksum.c
@@ -33,6 +33,8 @@
#include <klib/text.h>
#include <klib/rc.h>
+#include <sysalloc.h>
+
#include <bitstr.h>
#include <stdlib.h>
diff --git a/libs/vxf/irzip.c b/libs/vxf/irzip.c
index 9b3c54e..2ef4995 100644
--- a/libs/vxf/irzip.c
+++ b/libs/vxf/irzip.c
@@ -304,10 +304,14 @@ rc_t CC irzip(
/*
function izip_fmt izip #2.1 ( izip_set in )
*/
-VTRANSFACT_IMPL(vdb_izip, 2, 1, 0) (const void *Self, const VXfactInfo *info,
+VTRANSFACT_IMPL(vdb_izip, 2, 1, 1) (const void *Self, const VXfactInfo *info,
VFuncDesc *rslt, const VFactoryParams *cp,
const VFunctionParams *dp )
{
+/*
+* 2.1.1: bug fix for #VDB-539, bad conversions in encode_u64
+*/
+
if (dp->argc != 1) {
#if _DEBUGGING
fprintf(stderr, "dp->argc = %u != 1\n", dp->argc);
diff --git a/libs/vxf/irzip.impl.h b/libs/vxf/irzip.impl.h
index 0335ed8..ff12a7b 100644
--- a/libs/vxf/irzip.impl.h
+++ b/libs/vxf/irzip.impl.h
@@ -43,9 +43,8 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
unsigned k;
rc_t rc=0;
STYPE min,a0;
- STYPE y_cur;
- int64_t slope, delta_type = DELTA_UND;
- uint64_t sum_a0,sum_min,sum_i,sum_delta;
+ int64_t slope, delta_type = DELTA_UND,y_cur;
+ uint64_t sum_a0,sum_min,sum_y,sum_delta;
uint64_t max_diff;
uint8_t *scratch=NULL;
#ifdef TRY2SERIES
@@ -76,22 +75,20 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
/*** floating point calculations are avoided ***/
a0 = Y[0];
y_cur = Y[1];
- slope = (int64_t)Y[1] - Y[0];
- if(Y[1] < Y[0]) {
- min = y_cur;
- /*** can overflow when STYPE is uint64_t ***/
- assert ( slope < 0 );
- sum_min = -slope;
+ sum_y = Y[0] + Y[1];
+ slope = (int64_t)Y[1] - (int64_t)Y[0];
+ if(slope < 0) {
+ min = Y[1];
+ sum_delta = -slope;
delta_type = DELTA_NEG;
} else {
- min = a0;
- sum_min = slope;
+ min = Y[0];
+ sum_delta = slope;
if( slope != 0 ) delta_type = DELTA_POS;
}
- sum_a0 = 0;
- max_diff = sum_delta = sum_min;
+ max_diff = sum_delta;
#ifdef TRY2SERIES
- if(sum_min >= TRIGGER_2ND_SERIES){
+ if(sum_delta >= TRIGGER_2ND_SERIES){
last[0]=0; last[1]=1;
series[0]=0; series[1]=1;
} else {
@@ -102,17 +99,14 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
max_diff2[0]= sum_delta;
}
#endif
- sum_i = 1;
for (i = 2; i < N; ++i) {
- int64_t ad;
- int64_t md = (int64_t)Y[i] - min;
- int64_t diff = (int64_t)Y[i] - Y[i-1];
- int64_t abs_diff = labs(diff);
+ int64_t md = (int64_t)Y[i] - (int64_t)min;
+ int64_t diff = (int64_t)Y[i] - (int64_t)Y[i-1];
+ uint64_t abs_diff = (diff >= 0) ? diff : -diff;
#ifdef TRY2SERIES
int64_t last_delta_type = delta_type ;
#endif
-
-
+ sum_y += Y[i];
sum_delta += abs_diff;
if(abs_diff > max_diff) max_diff = abs_diff;
#define MACRO_SET_DELTA_TYPE(Diff,DeltaType) \
@@ -139,10 +133,10 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
series[i]=0;
}
} else { /*** second series is in being built ***/
- int64_t diff1 = (int64_t)Y[i] - Y[last[0]];
- int64_t diff2 = (int64_t)Y[i] - Y[last[1]];
- int64_t abs_diff1 = labs(diff1);
- int64_t abs_diff2 = labs(diff2);
+ int64_t diff1 = (int64_t)Y[i] - (int64_t)Y[last[0]];
+ int64_t diff2 = (int64_t)Y[i] - (int64_t)Y[last[1]];
+ uint64_t abs_diff1 = (diff1 >= 0) ? diff1 : -diff1;
+ uint64_t abs_diff2 = (diff2 >= 0) ? diff2 : -diff2;
if(abs_diff1 <= abs_diff2){
last[0]=i;
series[i]=0;
@@ -158,32 +152,24 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
}
}
#endif
-
- sum_i += i;
- if ( md > 0) {
- sum_min+= md;
- } else if ( md < 0 ) {
+ if ( md < 0 ) {
min = Y[i];
- sum_min += -md * (i - 1 ); /** running sum difference increases by this amount ***/
}
y_cur += slope;
- ad = (int64_t)Y[i] - y_cur;
- if ( ad > 0 ) {
- sum_a0 += ad;
- } else if (ad < 0 ){ /** need to adjust the slope ***/
- int64_t sd = -ad / i;
- if (sd*i < -ad) sd++; /** to adjust for rounding above **/
-
- y_cur -= sd*i;
- slope -= sd;
- sum_a0 = sum_a0 + ad + sum_i*sd;
-
+ if(y_cur > (int64_t)Y[i]){/*** reduce the slope ***/
+ slope = ((int64_t)Y[i] - (int64_t)Y[0] - i+1/**round down**/) /i;
+ y_cur = (int64_t)Y[0] + (int64_t)(i* slope);
+ assert( y_cur <= (int64_t)Y[i]);
}
}
/*** define which delta is the smallest **/
*series_count=1;
if(delta_type == DELTA_BOTH) sum_delta <<= 1; /*** in DELTA_BOTH case we will use extra bit ***/
+
+ sum_min = sum_y - N*min;
+ sum_a0 = sum_y - N*a0 - slope*N*(N-1)/2;
+
if( (delta_type == DELTA_POS || delta_type == DELTA_NEG ||
(delta_type == DELTA_BOTH && max_diff < (((uint64_t)1)<<(sizeof(STYPE)*8-1))) /*** to prevent loosing a bit **/
@@ -281,7 +267,7 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
} else if( slope == DELTA_NEG){
for( i = 0; i != N; ++i){
uint64_t val = a0 - Y[i];
- assert(Y[i] < a0);
+ assert(Y[i] <= a0);
a0 = Y[i];
MACRO_FLUSH_VALUE;
}
@@ -299,7 +285,7 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
} else {
for( i = 0; i != N; ++i){
uint64_t val = Y[i] - a0 - slope*i;
- assert(Y[i] >= a0 + slope*i);
+ assert((int64_t)Y[i] >= (int64_t)a0 + slope*i);
MACRO_FLUSH_VALUE;
}
}
@@ -334,9 +320,10 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
unsigned i;
uint8_t *scratch=NULL;
rc_t rc=0;
+ bool first;
memset(Y, 0, sizeof(Y[0]) * N);
- for (j = k = 0, m = 1; m < 0x100; m <<= 1, k += 8) {
+ for (j = k = 0, m = 1,first=true; m < 0x100; m <<= 1, k += 8) {
size_t n;
if ((planes & m) == 0)
@@ -348,18 +335,92 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
rc = zlib_decompress(scratch, N, &n, src + j, ssize - j);
if (rc) goto DONE;
j += n;
-
- for (i = 0; i != N; ++i)
- Y[i] |= ((STYPE)scratch[i]) << k;
+ if(first){
+ for (i = 0; i != N; ++i) Y[i] = ((STYPE)scratch[i]) << k;
+ first = false;
+ } else {
+ for (i = 0; i != N; ++i) Y[i] |= ((STYPE)scratch[i]) << k;
+ }
}
if(series_count == 2){
+#if 0 /** trying to unroll ***/
+ STYPE Ylast;
+ if(slope[0]==DELTA_BOTH){
+ if(slope[1]==DELTA_BOTH){
+ for(i = 0; i != N; ++i){
+ scratch[i] = Y[i]&3;
+ Y[i] = ((USTYPE)Y[i]) >> 2;
+ }
+ } else {
+ for(i = 0; i != N; ++i){
+ uint8_t tmp = Y[i]&1;
+ if(tmp){
+ scratch[i] = tmp;
+ Y[i] = ((USTYPE)Y[i]) >> 1;
+ } else {
+ scratch[i] = Y[i]&3;
+ Y[i] = ((USTYPE)Y[i]) >> 2;
+ }
+ }
+
+ }
+ } else {
+ if(slope[1]==DELTA_BOTH){
+ for(i = 0; i != N; ++i){
+ uint8_t tmp = Y[i]&1;
+ if(!tmp){
+ scratch[i] = tmp;
+ Y[i] = ((USTYPE)Y[i]) >> 1;
+ } else {
+ scratch[i] = Y[i]&3;
+ Y[i] = ((USTYPE)Y[i]) >> 2;
+
+ }
+ }
+ } else {
+ for(i = 0; i != N; ++i){
+ scratch[i] = Y[i]&1;
+ Y[i] = ((USTYPE)Y[i]) >> 1;
+ }
+ }
+ }
+ /** k=0 - main series, k=1 -secondary **/
+ for(k=0;k<2;k++){
+ Ylast = min[k];
+ if(slope[k]==DELTA_POS) {
+ for (i = 0; i != N; ++i){
+ if((scratch[i]&1)==k){
+ Y[i] = Ylast + Y[i];
+ Ylast = Y[i];
+ }
+ }
+ } else if (slope[k]==DELTA_NEG){
+ for (i = 0; i != N; ++i){
+ if((scratch[i]&1)==k){
+ Y[i] = Ylast - Y[i];
+ Ylast = Y[i];
+ }
+ }
+ } else for (i = 0; i != N; ++i){
+ if((scratch[i]&1)==k){
+ if(scratch[i]&2){
+ Y[i] = Ylast - Y[i];
+ } else {
+ Y[i] = Ylast + Y[i];
+ }
+ Ylast = Y[i];
+ }
+ }
+ }
+
+#else
uint32_t last[2]={0,0};
for (i = 0; i != N; ++i){
if( (Y[i]&1) == 0 ){/**main series **/
USTYPE val = (USTYPE)Y[i];
val >>= 1;
if(i==0){
- Y[i] = min[0];
+ Y[i] = (STYPE)min[0];
last[0]=i;
}
if(slope[0]==DELTA_POS) Y[i] = Y[last[0]] + val;
@@ -371,7 +432,7 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
USTYPE val = (USTYPE)Y[i];
val >>= 1;
if(last[1]==0){
- Y[i] = min[1];
+ Y[i] = (STYPE)min[1];
last[1]=i;
}
if(slope[1]==DELTA_POS) Y[i] = Y[last[1]] + val;
@@ -381,22 +442,23 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
last[1]=i;
}
}
+#endif
} else if(min[0]==0 && slope[0]==0){ /*** no slope no offset - nothing to do ***/
} else if(slope[0] == DELTA_POS){
assert(Y[0] == 0);
- Y[0] = min[0];
+ Y[0] = (STYPE)min[0];
for (i = 1; i != N; ++i){
Y[i] = Y[i-1] + Y[i];
}
} else if (slope[0] == DELTA_NEG ) {
assert(Y[0] == 0);
- Y[0] = min[0];
+ Y[0] = (STYPE)min[0];
for (i = 1; i != N; ++i){
Y[i] = Y[i-1] - Y[i];
}
} else if (slope[0] == DELTA_BOTH){
assert(Y[0] == 0);
- Y[0] = min[0];
+ Y[0] = (STYPE)min[0];
for (i = 1; i != N; ++i){
USTYPE val = (USTYPE)Y[i];
val >>= 1;
@@ -405,16 +467,16 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
}
} else if(slope[0] == 0) {
for (i = 0; i != N; ++i){
- Y[i] += min[0];
+ Y[i] += (STYPE)min[0];
}
} else {
for (i = 0; i != N; ++i){
- Y[i] += min[0];
+ Y[i] += (STYPE)min[0];
min[0] += slope[0];
}
}
DONE:
- free(scratch);
+ if(scratch) free(scratch);
return rc;
}
diff --git a/libs/vxf/iunzip.c b/libs/vxf/iunzip.c
index acd5ecc..fb9cf52 100644
--- a/libs/vxf/iunzip.c
+++ b/libs/vxf/iunzip.c
@@ -400,7 +400,12 @@ static rc_t decode_encoded(struct decoded *y, const struct encoded *x) {
n = x->u.izipped.diff_size;
memcpy(y->diff->data.u8, x->u.izipped.diff, n);
}
- elem_bits = (n * 8) / y->diff->size;
+
+ if ( y->diff->size != 0 )
+ elem_bits = (n * 8) / y->diff->size;
+ else
+ return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+
if (elem_bits * y->diff->size / 8 != n)
return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
BITS_TO_VARIANT(y->diff, elem_bits);
diff --git a/libs/vxf/izip-common.h b/libs/vxf/izip-common.h
index ee9f9db..c6dc84c 100644
--- a/libs/vxf/izip-common.h
+++ b/libs/vxf/izip-common.h
@@ -69,8 +69,8 @@ static nbuf *alloc_nbuf(unsigned cnt, unsigned var) {
nbuf *rslt;
rslt = malloc(sizeof(*rslt) - sizeof(rslt->data) + cnt * sizeof(rslt->data.raw[0]));
- memset(rslt, 0, sizeof(*rslt) - sizeof(rslt->data));
- if (rslt) {
+ if ( rslt != NULL ) {
+ memset(rslt, 0, sizeof(*rslt) - sizeof(rslt->data));
rslt->size = cnt;
rslt->used = 0;
rslt->var = var;
diff --git a/libs/vxf/libvxf.vers b/libs/vxf/libvxf.vers
index e25d8d9..2bf1ca5 100644
--- a/libs/vxf/libvxf.vers
+++ b/libs/vxf/libvxf.vers
@@ -1 +1 @@
-1.1.5
+1.1.7
diff --git a/libs/vxf/libvxf.vers.h b/libs/vxf/libvxf.vers.h
deleted file mode 100644
index 9ddfc82..0000000
--- a/libs/vxf/libvxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBVXF_VERS 0x01010005
diff --git a/libs/vxf/libwvxf.vers b/libs/vxf/libwvxf.vers
index 65087b4..0664a8f 100644
--- a/libs/vxf/libwvxf.vers
+++ b/libs/vxf/libwvxf.vers
@@ -1 +1 @@
-1.1.4
+1.1.6
diff --git a/libs/vxf/lower-case-tech-reads.c b/libs/vxf/lower-case-tech-reads.c
new file mode 100644
index 0000000..9f9e911
--- /dev/null
+++ b/libs/vxf/lower-case-tech-reads.c
@@ -0,0 +1,111 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <insdc/insdc.h>
+#include <klib/data-buffer.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+
+static
+rc_t CC lower_case_tech_reads ( void *data, const VXformInfo *info, int64_t row_id,
+ VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+ uint32_t i, j, k;
+
+ char *mixed;
+ const char *read_text = argv [ 0 ] . u . data . base;
+ const INSDC_coord_len *read_len = argv [ 1 ] . u . data . base;
+ const INSDC_read_type *read_type = argv [ 2 ] . u . data . base;
+
+ rc_t rc = KDataBufferResize ( rslt -> data, argv [ 0 ] . u . data . elem_count );
+ if ( rc != 0 )
+ return rc;
+
+ rslt -> elem_count = argv [ 0 ] . u . data . elem_count;
+
+ mixed = rslt -> data -> base;
+ read_text += argv [ 0 ] . u . data . first_elem;
+ read_len += argv [ 1 ] . u . data . first_elem;
+ read_type += argv [ 2 ] . u . data . first_elem;
+
+ for ( i = j = 0; i < argv [ 0 ] . u . data . elem_count; ++ j )
+ {
+ /* should still have reads described */
+ if ( j == argv [ 1 ] . u . data . elem_count || j == argv [ 2 ] . u . data . elem_count )
+ break;
+
+ /* get read length */
+ k = read_len [ j ];
+ if ( i + k > argv [ 0 ] . u . data . elem_count )
+ k = argv [ 0 ] . u . data . elem_count - i;
+
+ /* decide upon upper or lower case */
+ if ( ( read_type [ j ] & 1 ) != READ_TYPE_BIOLOGICAL )
+ {
+ for ( ; k > 0; ++ i, -- k )
+ mixed [ i ] = tolower ( read_text [ i ] );
+ }
+ else
+ {
+ for ( ; k > 0; ++ i, -- k )
+ mixed [ i ] = toupper ( read_text [ i ] );
+ }
+ }
+
+ for ( ; i < argv [ 0 ] . u . data . elem_count; ++ i )
+ mixed [ i ] = toupper ( read_text [ i ] );
+
+ return 0;
+}
+
+
+/* lower_case_tech_reads
+ * locates technical reads within an IUPAC sequence
+ * converts them to lower-case
+ *
+ * "read_text" [ DATA ] - IUPAC source text
+ *
+ * "read_len" [ DATA ] - ordered array of read lengths
+ *
+ * "read_type" [ DATA ] - describes which reads are technical
+ * and which are biological. determines the case of each read segment
+ *
+ * extern function
+ * INSDC:dna:mixed_case:text NCBI:lower_case_tech_reads #1 ( INSDC:dna:text read_text,
+ * INSDC:coord:len read_len, INSDC:read:type read_type );
+ */
+VTRANSFACT_IMPL ( NCBI_lower_case_tech_reads, 1, 0, 0 ) ( const void *self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rslt -> u . rf = lower_case_tech_reads;
+ rslt -> variant = vftRow;
+ return 0;
+}
diff --git a/libs/vxf/math-funcs-impl.h b/libs/vxf/math-funcs-impl.h
index 73269ea..8f95e12 100644
--- a/libs/vxf/math-funcs-impl.h
+++ b/libs/vxf/math-funcs-impl.h
@@ -225,7 +225,7 @@ rc_t CC array_func(
self_t hack;
hack.vp = Self;
- hack.f(dst, src, num_elements);
+ hack.f(dst, src, ( size_t ) num_elements);
return 0;
}
diff --git a/libs/vxf/simple-sub-select.c b/libs/vxf/simple-sub-select.c
index f04e34c..044d0aa 100644
--- a/libs/vxf/simple-sub-select.c
+++ b/libs/vxf/simple-sub-select.c
@@ -28,6 +28,7 @@
#include <vdb/database.h>
#include <vdb/table.h>
#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
#include <klib/rc.h>
@@ -49,6 +50,10 @@ struct SubSelect
{
const VCursor *curs;
uint32_t idx;
+ const VCursor *native_curs; /** Native cursors are either master cursor or sub_cursors - no need to AddRef **/
+ bool first_time;
+ char *col_name;
+ uint32_t col_name_len;
};
static
@@ -76,6 +81,18 @@ rc_t CC simple_sub_select ( void *data, const VXformInfo *info,
const int32_t *remote_idx = argv[1].u.data.base;
idx=remote_idx[argv[1].u.data.first_elem];
}
+ if(self->native_curs && self->first_time){ /*** can we use native cursor for the data? ***/
+ SubSelect *mself = (SubSelect *)self;
+ uint32_t idx;
+ rc = VCursorAddColumn ( mself->native_curs, & idx, "%.*s", mself->col_name_len, mself->col_name );
+ if(rc == 0 || GetRCState(rc) == rcExists){
+ VCursorRelease( mself->curs);
+ mself->curs = mself->native_curs;
+ mself->idx = idx;
+ }
+ mself->first_time = false;
+ rc = 0; /** reset rc? **/
+ }
/* sub-select */
rc = VCursorCellDataDirect ( self -> curs, * remote_row_id, self -> idx,
@@ -122,39 +139,53 @@ rc_t CC simple_sub_select ( void *data, const VXformInfo *info,
/* open_sub_cursor
*/
static
-rc_t open_sub_cursor ( SubSelect **fself, const VXfactInfo *info, const VFactoryParams *cp )
+rc_t open_sub_cursor ( SubSelect **fself, const VXfactInfo *info, const VFactoryParams *cp, const VCursor *native_curs )
{
rc_t rc=0;
- const VDatabase *db;
const VTable *tbl, *ftbl = NULL;
+ char name[256]="";
+ const VCursor *curs;
if ( cp -> argv [ 0 ] . count > 0 )
{
- rc = VTableOpenParentRead ( info -> tbl, & db );
- if ( rc ==0 )
- {
- rc = VDatabaseOpenTableRead ( db, & ftbl,"%.*s",
- ( int ) cp -> argv [ 0 ] . count, cp -> argv [ 0 ] . data . ascii );
- VDatabaseRelease ( db );
- tbl = ftbl;
- }
+ sprintf(name,"%.*s",(int)cp->argv[0].count,cp->argv[0].data.ascii);
+ rc = VCursorLinkedCursorGet(native_curs,name,&curs);
+ if(rc == 0){
+ rc = VCursorOpenParentRead(curs,&ftbl);
+ if(rc != 0)
+ return rc;
+ VCursorAddRef(curs);
+ tbl = ftbl;
+ } else {
+ const VDatabase *db;
+ rc = VTableOpenParentRead ( info -> tbl, & db );
+ if(rc != 0) return rc;
+ rc = VDatabaseOpenTableRead ( db, & ftbl,name);
+ if(rc != 0) return rc;
+ VDatabaseRelease ( db );
+ tbl = ftbl;
+ rc = VTableCreateCachedCursorRead ( tbl, (const VCursor**)& curs, 256*1024*1024 ); /*** some random io is expected ***/
+ if(rc != 0) return rc;
+ rc = VCursorPermitPostOpenAdd( curs );
+ if(rc != 0) return rc;
+ rc = VCursorOpen( curs );
+ if(rc != 0) return rc;
+ rc = VCursorLinkedCursorSet(native_curs,name,curs);
+ if(rc != 0) return rc;
+ }
+ native_curs = NULL;
}
- else
+ else /** we don't now if native_curs permits adding columns **/
{
tbl = info -> tbl;
+ rc = VTableCreateCachedCursorRead ( tbl, & curs, 0 ); /*** some random io is expected ***/
}
-
-
if ( rc == 0 )
{
- const VCursor *curs;
- rc = VTableCreateCachedCursorRead ( tbl, & curs, 4*1024*1024 ); /*** some random io is expected ***/
- if ( rc == 0 )
- {
uint32_t idx;
rc = VCursorAddColumn ( curs, & idx, "%.*s",
( int ) cp -> argv [ 1 ] . count, cp -> argv [ 1 ] . data . ascii );
- if ( rc == 0 )
+ if ( rc == 0 || GetRCState(rc) == rcExists)
{
rc = VCursorOpen ( curs );
if ( rc == 0 )
@@ -179,6 +210,11 @@ rc_t open_sub_cursor ( SubSelect **fself, const VXfactInfo *info, const VFactory
{
self -> curs = curs;
self -> idx = idx;
+ self->native_curs = native_curs;
+ self->first_time = true;
+ self->col_name_len = cp->argv[1].count;
+ self->col_name = malloc(self->col_name_len);
+ memcpy(self->col_name,cp->argv[1].data.ascii,self->col_name_len);
* fself = self;
if ( ftbl != NULL )
VTableRelease ( ftbl );
@@ -189,9 +225,7 @@ rc_t open_sub_cursor ( SubSelect **fself, const VXfactInfo *info, const VFactory
}
}
VCursorRelease ( curs );
- }
}
-
if ( ftbl != NULL )
VTableRelease ( ftbl );
@@ -205,7 +239,8 @@ static
void CC close_sub_cursor ( void *data )
{
SubSelect *self = data;
- VCursorRelease ( self -> curs );
+ if(self->curs != self->native_curs) VCursorRelease ( self -> curs );
+ free ( self->col_name);
free ( self );
}
@@ -224,7 +259,7 @@ VTRANSFACT_IMPL ( vdb_simple_sub_select_1, 1, 0, 0 ) ( const void *Self, const V
assert ( cp -> argc == 2 );
assert ( dp -> argc == 1 || dp -> argc == 2);
- rc = open_sub_cursor ( & fself, info, cp );
+ rc = open_sub_cursor ( & fself, info, cp, (const VCursor*)info->parms );
if ( rc == 0 )
{
rslt -> self = fself;
diff --git a/libs/vxf/sprintf.c b/libs/vxf/sprintf.c
index f275f97..385d25c 100644
--- a/libs/vxf/sprintf.c
+++ b/libs/vxf/sprintf.c
@@ -24,132 +24,1256 @@
*
*/
#include <vdb/extern.h>
-#include <insdc/insdc.h>
-#include <klib/defs.h>
-#include <klib/rc.h>
-#include <vdb/table.h>
+
#include <vdb/xform.h>
#include <vdb/schema.h>
-#include <kdb/meta.h>
#include <klib/data-buffer.h>
-#include <bitstr.h>
-#include <os-native.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/debug.h>
+#include <klib/rc.h>
#include <sysalloc.h>
-#include <stdint.h>
#include <stdlib.h>
-#include <assert.h>
#include <string.h>
-#include <stdio.h>
+#include <ctype.h>
+#include <assert.h>
+
+
+/* the number of PrintFmt, PrintArg and String
+ elements to allocate in function-local storage */
+#define LOCAL_FMT_COUNT 64
+
+typedef struct Sprintf Sprintf;
+struct Sprintf
+{
+ const PrintFmt *fmt;
+ PrintArg *args;
+ String *str;
+};
+
+static uint8_t const radix2_size [ 4 ] = { 8, 16, 32, 64 };
+static uint8_t const radix8_size [ 4 ] = { 3, 6, 11, 22 };
+static uint8_t const radix10_size [ 4 ] = { 3, 5, 10, 20 };
+static uint8_t const radix16_size [ 4 ] = { 2, 4, 8, 16 };
+
+#if _DEBUGGING
static
-rc_t CC sprintf_1 ( void *data, const VXformInfo *info, int64_t row_id,
- VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+rc_t validate_obj ( const Sprintf *obj, bool fmt_only )
{
- rc_t rc;
- uint32_t const *val = argv[0].u.data.base;
- int n;
- int count;
-
- assert(argv[0].u.data.elem_bits == sizeof(val[0]) * 8);
- val += argv[0].u.data.first_elem;
-
- n = 11;
- rslt->data->elem_bits = rslt->elem_bits;
-
- /* loop up to 2 times for resize errors */
- for (count = 0; count != 2; ++count) {
-
- /* set buffer size */
- rc = KDataBufferResize(rslt->data, n);
- if (rc) return rc;
-
- /* try snprintf and check return */
- n = snprintf(rslt->data->base, n, "%u", val[0]);
- if ( n >= 0 && n < rslt->data->elem_count)
- {
- /* "n" is valid */
- rslt->elem_count = n;
- return 0;
- }
-
- /* "n" says we probably didn't have enough buffer space
- loop again */
- if ( n < 0 )
- n = rslt->data->elem_count * 2;
+ uint32_t i;
+
+ /* validate the format blocks */
+ for ( i = 0; obj -> fmt [ i ] . type != sptTerm; ++ i )
+ {
+ /* at this point, only looking for bad formats */
+ if ( obj -> fmt [ i ] . type == sptLiteral )
+ {
+ if ( obj -> fmt [ i ] . u . l . text == NULL )
+ return RC ( rcXF, rcFunction, rcConstructing, rcString, rcNull );
+ if ( obj -> fmt [ i ] . u . l . size == 0 )
+ return RC ( rcXF, rcFunction, rcConstructing, rcString, rcEmpty );
+ if ( string_chr ( obj -> fmt [ i ] . u . l . text, obj -> fmt [ i ] . u . l . size, 0 ) != NULL )
+ return RC ( rcXF, rcFunction, rcConstructing, rcString, rcInvalid );
+ }
}
- return RC(rcXF, rcFunction, rcExecuting, rcConstraint, rcViolated);
+
+ return 0;
}
+#endif
static
-rc_t CC sprintf_3 ( void *data, const VXformInfo *info, int64_t row_id,
- VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+size_t get_radix_size ( const PrintFmt *fmt, uint32_t selector )
{
- rc_t rc;
- char const *str = argv[0].u.data.base;
- uint32_t const *len = argv[1].u.data.base;
- uint32_t const *val = argv[2].u.data.base;
- int n;
- int count;
-
- assert(argv[0].u.data.elem_bits == sizeof(str[0]) * 8);
- assert(argv[1].u.data.elem_bits == sizeof(len[0]) * 8);
- assert(argv[2].u.data.elem_bits == sizeof(val[0]) * 8);
-
- str += argv[0].u.data.first_elem;
- len += argv[1].u.data.first_elem;
- val += argv[2].u.data.first_elem;
-
- if (argv[0].u.data.elem_count == 0 && len[0] == 0) {
- rslt->elem_count = 0;
+ const uint8_t *radix_size;
+ switch ( fmt -> radix )
+ {
+ case 0:
return 0;
+ case 10:
+ radix_size = radix10_size;
+ break;
+ case 16:
+ radix_size = radix16_size;
+ break;
+ case 8:
+ radix_size = radix8_size;
+ break;
+ default:
+ radix_size = radix2_size;
}
+ return radix_size [ selector ];
+}
+
+typedef struct FuncArgs FuncArgs;
+struct FuncArgs
+{
+ const VRowData *argv;
+ uint32_t argc;
+ uint32_t idx;
+};
+
+static
+const void *access_cell_data ( FuncArgs *args, uint64_t *row_len, size_t *size )
+{
+ size_t elem_bytes;
+ const uint8_t *data;
- n = argv[0].u.data.elem_count + len[0] + 1;
- rslt->data->elem_bits = rslt->elem_bits;
+ if ( args -> idx == args -> argc )
+ return NULL;
- for (count = 0; count != 2; ++count) {
+ elem_bytes = args -> argv [ args -> idx ] . u . data . elem_bits / 8;
+ assert ( elem_bytes * 8 == args -> argv [ args -> idx ] . u . data . elem_bits );
- rc = KDataBufferResize(rslt->data, n);
- if (rc) return rc;
+ data = args -> argv [ args -> idx ] . u . data . base;
+ * row_len = args -> argv [ args -> idx ] . u . data . elem_count;
+
+ data += args -> argv [ args -> idx ] . u . data . first_elem * elem_bytes;
+
+ if ( size != NULL )
+ * size = ( size_t ) ( * row_len * elem_bytes );
+
+ ++ args -> idx;
+ return data;
+}
- if (len[0]) {
- n = snprintf(rslt->data->base, n, "%.*s%0*u",
- (int)argv[0].u.data.elem_count, str,
- (int)len[0], val[0]);
+static
+rc_t capture_uint_scalar ( FuncArgs *args, uint64_t *val )
+{
+ uint64_t row_len;
+ const void *data = access_cell_data ( args, & row_len, NULL );
+
+ if ( data == NULL )
+ return RC ( rcXF, rcFunction, rcExecuting, rcData, rcNull );
+
+ if ( row_len != 1 )
+ return RC ( rcXF, rcFunction, rcExecuting, rcRange, rcExcessive );
+
+ switch ( args -> argv [ args -> idx - 1 ] . u . data . elem_bits )
+ {
+ case 8:
+ * val = * ( const uint8_t* ) data;
+ break;
+ case 16:
+ * val = * ( const uint16_t* ) data;
+ break;
+ case 32:
+ * val = * ( const uint32_t* ) data;
+ break;
+ case 64:
+ * val = * ( const uint64_t* ) data;
+ break;
+ }
+
+ return 0;
+}
+
+static
+rc_t CC sprintf_func ( void *obj,
+ const VXformInfo *info, int64_t row_id, VRowResult *rslt,
+ uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ size_t cell_size;
+ uint32_t str_idx, fmt_idx, arg_idx;
+
+ Sprintf *self = obj;
+
+ const PrintFmt *fmt = self -> fmt;
+ PrintArg *args = self -> args;
+ String *str = self -> str;
+
+ FuncArgs vargs;
+ vargs . argv = argv;
+ vargs . argc = argc;
+ vargs . idx = 0;
+
+ str_idx = fmt_idx = arg_idx = 0;
+
+#if _DEBUGGING
+ rc = validate_obj ( self, false );
+ if ( rc != 0 )
+ KDbgMsg ( "%s - self is bad on entry: %R\n", __func__, rc );
+#endif
+
+ /* initial pass - prepare argument list & estimate cell size */
+ for ( rc = 0, cell_size = 0; fmt [ fmt_idx ] . type != sptTerm; ++ fmt_idx )
+ {
+ size_t arg_size;
+ bool check_index;
+ uint64_t row_len, start_idx, select_len;
+ uint32_t ext_start_index, ext_stop_index;
+
+ row_len = 0;
+
+ /* test for external field width, precision, index */
+ if ( fmt [ fmt_idx ] . ext_field_width )
+ {
+ rc = capture_uint_scalar ( & vargs, & args [ arg_idx ++ ] . u );
+ if ( rc != 0 )
+ return rc;
}
- else {
- /* snprintf puts '\0' when len[0] == 0
- and adds this characted into returned count */
- n = snprintf(rslt->data->base, n, "%.*s",
- (int)argv[0].u.data.elem_count, str);
+ if ( fmt [ fmt_idx ] . ext_precision )
+ {
+ rc = capture_uint_scalar ( & vargs, & args [ arg_idx ++ ] . u );
+ if ( rc != 0 )
+ return rc;
}
- if (n >= 0 && n < rslt->data->elem_count)
+
+ if ( ! fmt [ fmt_idx ] . ext_start_index )
+ start_idx = fmt [ fmt_idx ] . u . f . start_idx;
+ else
{
- rslt->elem_count = n;
- return 0;
+ /* if the start index is the last in vector,
+ this needs to be suspended until later */
+ if ( ! fmt [ fmt_idx ] . inf_start_index )
+ {
+ rc = capture_uint_scalar ( & vargs, & start_idx );
+ if ( rc != 0 )
+ return rc;
+ args [ arg_idx ] . u = start_idx;
+ }
+
+ ext_start_index = arg_idx ++;
}
- if ( n < 0 )
- n = ( argv[0].u.data.elem_count + len[0] + 1 ) * 2;
+ if ( ! fmt [ fmt_idx ] . ext_stop_index && ! fmt [ fmt_idx ] . ext_select_len )
+ select_len = fmt [ fmt_idx ] . u . f . select_len;
+ else
+ {
+ /* if the stop index is the last in vector,
+ this needs to be suspended until later */
+ if ( ! fmt [ fmt_idx ] . inf_stop_index )
+ {
+ rc = capture_uint_scalar ( & vargs, & select_len );
+ if ( rc != 0 )
+ return rc;
+ args [ arg_idx ] . u = select_len;
+ }
+ ext_stop_index = arg_idx ++;
+ }
+
+ /* make an estimate of the bytes needed by sprintf engine for argument
+ get row_len at the same time */
+ check_index = false;
+ switch ( fmt [ fmt_idx ] . type )
+ {
+ case sptLiteral: /* char literal - arg in fmt */
+ assert ( fmt [ fmt_idx ] . u . l . text != NULL );
+ arg_size = fmt [ fmt_idx ] . u . l . size;
+ row_len = arg_size;
+ -- arg_idx;
+ break;
+ case sptSignedInt8Vect: /* signed vector int - arg is d8 */
+ args [ arg_idx ] . d8 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 0 ) + 1;
+ break;
+ case sptSignedInt16Vect: /* signed vector int - arg is d16 */
+ args [ arg_idx ] . d16 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 1 ) + 1;
+ break;
+ case sptSignedInt32Vect: /* signed vector int - arg is d32 */
+ args [ arg_idx ] . d32 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 2 ) + 1;
+ break;
+ case sptSignedInt64Vect: /* signed vector int - arg is d64 */
+ args [ arg_idx ] . d64 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 3 ) + 1;
+ break;
+ case sptUnsignedInt8Vect: /* unsigned vector int - arg is u8 */
+ args [ arg_idx ] . u8 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 0 ) + 2;
+ break;
+ case sptUnsignedInt16Vect: /* unsigned vector int - arg is u16 */
+ args [ arg_idx ] . u16 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 1 ) + 2;
+ break;
+ case sptUnsignedInt32Vect: /* unsigned vector int - arg is u32 */
+ args [ arg_idx ] . u32 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 2 ) + 2;
+ break;
+ case sptUnsignedInt64Vect: /* unsigned vector int - arg is u64 */
+ args [ arg_idx ] . u64 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 3 ) + 2;
+ break;
+ case sptFloat32Vect: /* vector float - arg is f32 */
+ args [ arg_idx ] . f32 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = 32;
+ break;
+ case sptFloat64Vect: /* vector float - arg is f64 */
+ args [ arg_idx ] . f64 = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = 32;
+ break;
+ case sptFloatLongVect: /* vector float - arg is flong */
+ args [ arg_idx ] . flong = access_cell_data ( & vargs, & row_len, NULL );
+ arg_size = 32;
+ break;
+ case sptString: /* vector character - arg is S */
+ str [ str_idx ] . addr = access_cell_data ( & vargs, & row_len, & str [ str_idx ] . size );
+ str [ str_idx ] . len = ( uint32_t ) str [ str_idx ] . size;
+ arg_size = str [ str_idx ] . size;
+ args [ arg_idx ] . S = & str [ str_idx ++ ];
+ check_index = true;
+ break;
+ case sptUCS2String: /* vector character - arg is S */
+ case sptUTF32String: /* vector character - arg is S */
+ return RC ( rcXF, rcFunction, rcExecuting, rcType, rcUnsupported );
+ case sptRowId: /* current row id - arg is d */
+ args [ arg_idx ] . d = row_id;
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 3 ) + 1;
+ ++ arg_idx;
+ continue;
+ case sptRowLen: /* current row length - arg is u */
+ access_cell_data ( & vargs, & args [ arg_idx ] . u, NULL );
+ arg_size = get_radix_size ( & fmt [ fmt_idx ], 3 ) + 2;
+ ++ arg_idx;
+ continue;
+ }
+
+ /* back-fill based upon row-length in case of non-empty rows */
+ if ( row_len != 0 )
+ {
+ /* start index is last in row */
+ if ( fmt [ fmt_idx ] . inf_start_index )
+ start_idx = args [ ext_start_index ] . u = row_len - 1;
+
+ /* end index is last in row */
+ if ( fmt [ fmt_idx ] . inf_stop_index )
+ select_len = args [ ext_stop_index ] . u = row_len - 1;
+ }
+
+ /* detect runtime error condition */
+ if ( start_idx >= row_len )
+ args [ arg_idx ] . p = NULL;
+ else
+ {
+ /* adjust size by index */
+ if ( check_index )
+ {
+ /* the select_len should be correct,
+ unless the end is a stop coordinate */
+ if ( fmt [ fmt_idx ] . ext_stop_index )
+ {
+ if ( select_len <= start_idx )
+ select_len = 1;
+ else
+ select_len -= start_idx - 1;
+ }
+
+ /* select_len of 0 means infinite */
+ if ( select_len == 0 )
+ select_len = row_len - start_idx;
+
+ /* real size after sub-str */
+ arg_size = argv [ vargs . idx - 1 ] . u . data . elem_bits * select_len / 8;
+ }
+
+ /* incorporate size into calcuation */
+ cell_size += arg_size;
+ }
+
+ /* done with argument */
+ ++ arg_idx;
}
- return RC(rcXF, rcFunction, rcExecuting, rcConstraint, rcViolated);
+
+ /* round cell-size up to nearest 4K */
+ cell_size = ( cell_size + 4095 ) & ~ ( size_t ) 4095;
+
+ /* set output buffer size */
+ rc = KDataBufferResize( rslt -> data, cell_size );
+ if ( rc == 0 )
+ {
+#if _DEBUGGING
+ rc = validate_obj ( self, false );
+ if ( rc != 0 )
+ KDbgMsg ( "%s - self is bad before invoking structured_sprintf: %R\n", __func__, rc );
+#endif
+ /* invoke sprintf engine */
+ rc = structured_sprintf ( rslt -> data -> base,
+ rslt -> data -> elem_count, & cell_size, fmt, args );
+
+ /* recover from buffer insufficient */
+ if ( GetRCState ( rc ) == rcInsufficient && GetRCObject ( rc ) == rcBuffer )
+ {
+ rc = KDataBufferResize ( rslt -> data, cell_size + 1 );
+ if ( rc == 0 )
+ {
+ rc = structured_sprintf ( rslt -> data -> base,
+ rslt -> data -> elem_count, & cell_size, fmt, args );
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ /* set the return parameters */
+ rc = KDataBufferResize ( rslt -> data, cell_size );
+ if ( rc == 0 )
+ {
+ rslt -> elem_count = cell_size;
+ rslt -> elem_bits = 8;
+ }
+ }
+ }
+
+ return rc;
}
-VTRANSFACT_IMPL ( vdb_sprintf, 1, 0, 0 ) ( const void *Self, const VXfactInfo *info,
- VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+typedef struct ParseData ParseData;
+struct ParseData
+{
+ KDataBuffer overflow;
+ size_t fmt_size;
+ size_t lit_size;
+ PrintFmt *fmt;
+ uint32_t str_idx;
+ uint32_t fmt_idx;
+ uint32_t arg_idx;
+};
+
+/* create_overflow
+ * create a buffer so large that it cannot overflow again
+ * copy in existing structures
+ */
+static
+rc_t create_overflow ( ParseData *pd, uint32_t fmt_idx )
+{
+ /* infer that we can never have more format items than characters in the string... */
+
+ /* our size will create a format for every byte.
+ this should be a total overkill. */
+ size_t buff_size = sizeof pd -> fmt [ 0 ] * pd -> fmt_size;
+
+ /* make the buffer */
+ rc_t rc = KDataBufferMakeBytes ( & pd -> overflow, buff_size );
+ if ( rc == 0 )
+ {
+ /* capture pointers to stack structures */
+ const PrintFmt *fmt = pd -> fmt;
+
+ /* destination pointer */
+ pd -> fmt = pd -> overflow . base;
+
+ /* copy existing data */
+ memcpy ( pd -> fmt, fmt, fmt_idx * sizeof pd -> fmt [ 0 ] );
+ }
+
+ pd -> fmt_idx = fmt_idx;
+
+ return rc;
+}
+
+typedef struct VAList VAList;
+struct VAList
+{
+ const VFunctionParams *dp;
+ uint32_t idx;
+};
+
+static
+rc_t check_integer_arg ( VAList *vargs )
{
- switch (dp->argc) {
- case 1:
- rslt->u.rf = sprintf_1;
+ if ( vargs -> idx == vargs -> dp -> argc )
+ return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcInsufficient );
+
+ switch ( vargs -> dp -> argv [ vargs -> idx ] . desc . domain )
+ {
+ case vtdBool:
+ case vtdInt:
+ case vtdUint:
break;
- case 3:
- rslt->u.rf = sprintf_3;
+ default:
+ return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+ }
+
+ switch ( VTypedescSizeof ( & vargs -> dp -> argv [ vargs -> idx ] . desc ) )
+ {
+ case 8:
+ case 16:
+ case 32:
+ case 64:
break;
default:
- return RC(rcXF, rcFunction, rcConstructing, rcParam, rcUnsupported);
+ return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+ }
+
+ ++ vargs -> idx;
+ return 0;
+}
+
+static
+rc_t extract_size_modifier ( VAList *vargs, char *size_modifier )
+{
+ switch ( vargs -> dp -> argv [ vargs -> idx ] . desc . domain )
+ {
+ case vtdBool:
+ * size_modifier = 0;
+ break;
+ case vtdUint:
+ case vtdInt:
+ switch ( VTypedescSizeof ( & vargs -> dp -> argv [ vargs -> idx ] . desc ) )
+ {
+ case 8:
+ * size_modifier = 't';
+ break;
+ case 16:
+ * size_modifier = 'h';
+ break;
+ case 32:
+ * size_modifier = 0;
+ break;
+ case 64:
+ * size_modifier = 'l';
+ break;
+ default:
+ return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+ }
+ break;
+ case vtdFloat:
+ switch ( VTypedescSizeof ( & vargs -> dp -> argv [ vargs -> idx ] . desc ) )
+ {
+ case 32:
+ * size_modifier = 'h';
+ break;
+ case 64:
+ * size_modifier = 0;
+ break;
+ default:
+ return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+ }
+ break;
+ case vtdAscii:
+ * size_modifier = 0;
+ break;
+ case vtdUnicode:
+ switch ( vargs -> dp -> argv [ vargs -> idx ] . desc . intrinsic_bits )
+ {
+ case 8:
+ * size_modifier = 0;
+ break;
+ case 16:
+ * size_modifier = 'h';
+ break;
+ case 32:
+ * size_modifier = 'l';
+ break;
+ default:
+ return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+ }
break;
+ default:
+ return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
}
- rslt->variant = vftRow;
return 0;
}
+
+
+/* parse_format_string
+ * parse format string and args into structured format
+ */
+static
+rc_t parse_format_string ( const char *fmt_str, ParseData *pd, VAList *vargs )
+{
+ rc_t rc;
+ uint32_t i, fmt_idx;
+
+ PrintFmt *fmt = pd -> fmt;
+
+ /* initialize returned counters */
+ pd -> lit_size = 0;
+ pd -> str_idx = pd -> fmt_idx = pd -> arg_idx = 0;
+
+ /* loop over format string */
+ for ( rc = 0, i = fmt_idx = 0; fmt_str [ i ] != 0; ++ i )
+ {
+ uint32_t domain;
+ bool alternate, numeric;
+ char size_modifier, time_modifier;
+ bool has_width, has_precision, has_index;
+
+ /* loop to gather literal portions */
+ uint32_t start;
+ for ( start = i; ; ++ i )
+ {
+ /* run until we hit start of substitution token
+ or until we hit end of format string */
+ if ( fmt_str [ i ] != 0 && fmt_str [ i ] != '%' )
+ continue;
+
+ /* detect a literal string */
+ if ( i != start )
+ {
+ /* expand into overflow */
+ if ( fmt_idx == LOCAL_FMT_COUNT )
+ {
+ rc = create_overflow ( pd, fmt_idx );
+ if ( rc != 0 )
+ return rc;
+
+ fmt = pd -> fmt;
+ }
+
+ /* create a text-literal format */
+ memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+ fmt [ fmt_idx ] . u . l . text = & fmt_str [ start ];
+ fmt [ fmt_idx ] . u . l . size = i - start;
+ pd -> lit_size += i - start;
+ fmt [ fmt_idx ] . fmt = spfText;
+ fmt [ fmt_idx ] . type = sptLiteral;
+
+ /* increment counter */
+ ++ fmt_idx;
+ }
+
+ /* detect escape sequence */
+ if ( fmt_str [ i ] == 0 || fmt_str [ i + 1 ] != '%' )
+ break;
+
+ /* skip over escape */
+ start = ++ i;
+ }
+
+ /* done when NUL byte is seen */
+ if ( fmt_str [ i ] == 0 )
+ break;
+
+ /* detect overflow */
+ if ( fmt_idx == LOCAL_FMT_COUNT )
+ {
+ rc = create_overflow ( pd, fmt_idx );
+ if ( rc != 0 )
+ return rc;
+
+ fmt = pd -> fmt;
+ }
+
+ /* initial format
+ * thousands_separate = false
+ * add_prefix = false
+ * force_decimal_point = false
+ * leave_trailing_zeros = false
+ * print_time = false
+ * print_date = false
+ * print_weekday = false
+ * print_timezone = false
+ * hour_24 = false
+ * sign = 0
+ * left_fill = space
+ */
+ memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+ fmt [ fmt_idx ] . left_fill = ' ';
+
+ /* scan flags */
+ alternate = false;
+ while ( 1 )
+ {
+ switch ( fmt_str [ ++ i ] )
+ {
+ /* plus and space modify application of sign
+ to signed integer and floating point conversions.
+ plus overrides space. */
+ case ' ':
+ if ( fmt [ fmt_idx ] . sign == 0 )
+ case '+':
+ fmt [ fmt_idx ] . sign = fmt_str [ i ];
+ continue;
+
+ /* dash indicates left-alignment. indicate this
+ by setting "left_fill" to NUL. */
+ case '-':
+ fmt [ fmt_idx ] . left_fill = 0;
+ continue;
+
+ /* zero indicates an alternate left-fill for
+ numeric conversions. the zero is inserted before
+ any sign character in { '+', '-' or ' ' }.
+ since "left_fill" is also used to indicate
+ alignment, only store when right aligning. */
+ case '0':
+ if ( fmt [ fmt_idx ] . left_fill != 0 )
+ fmt [ fmt_idx ] . left_fill = '0';
+ continue;
+
+ /* hash indicates that the formatter should use an
+ "alternate" approach. that approach is specific
+ to the format. */
+ case '#':
+ alternate = true;
+ continue;
+
+ /* comma ( or apostrophe outside of US ) indicates
+ that the integer portion of a numeral should use
+ a comma as a thousands separator for legibility. */
+ case ',':
+ case '\'':
+ fmt [ fmt_idx ] . thousands_separate = 1;
+ continue;
+ }
+
+ /* we've hit a non-flag character */
+ break;
+ }
+
+ /* minimum field width */
+ has_width = false;
+ if ( isdigit ( fmt_str [ i ] ) )
+ {
+ /* literal */
+ has_width = true;
+ fmt [ fmt_idx ] . u . f . min_field_width = fmt_str [ i ] - '0';
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ fmt [ fmt_idx ] . u . f . min_field_width *= 10;
+ fmt [ fmt_idx ] . u . f . min_field_width += fmt_str [ i ] - '0';
+ }
+ }
+ else if ( fmt_str [ i ] == '*' )
+ {
+ /* external */
+ rc = check_integer_arg ( vargs );
+ if ( rc != 0 )
+ return rc;
+
+ has_width = true;
+ fmt [ fmt_idx ] . ext_field_width = 1;
+ ++ pd -> arg_idx;
+ ++ i;
+ }
+
+ /* precision */
+ has_precision = false;
+ if ( fmt_str [ i ] == '.' )
+ {
+ /* a single dot implies a precision value of 0 */
+ has_precision = true;
+
+ if ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ /* a literal precision */
+ fmt [ fmt_idx ] . u . f . precision = fmt_str [ i ] - '0';
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ fmt [ fmt_idx ] . u . f . precision *= 10;
+ fmt [ fmt_idx ] . u . f . precision += fmt_str [ i ] - '0';
+ }
+ }
+ else if ( fmt_str [ i ] == '*' )
+ {
+ /* external */
+ rc = check_integer_arg ( vargs );
+ if ( rc != 0 )
+ return rc;
+
+ fmt [ fmt_idx ] . ext_precision = 1;
+ ++ pd -> arg_idx;
+ ++ i;
+ }
+ else if ( fmt_str [ i ] == '-' )
+ {
+ /* eat a negative precision - treat as 0 */
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ ( void ) 0;
+ }
+ }
+
+ /* index - given when parameter is a vector */
+ has_index = false;
+ if ( fmt_str [ i ] == ':' )
+ {
+ bool has_start, has_len, has_end, end_is_stop;
+ has_start = has_len = has_end = end_is_stop = false;
+
+ /* parameter is taken as a vector,
+ with a default index starting at 0 */
+ has_index = true;
+
+ if ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ /* literal index */
+ fmt [ fmt_idx ] . u . f . start_idx = fmt_str [ i ] - '0';
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ fmt [ fmt_idx ] . u . f . start_idx *= 10;
+ fmt [ fmt_idx ] . u . f . start_idx += fmt_str [ i ] - '0';
+ }
+ has_start = true;
+ }
+ else switch ( fmt_str [ i ] )
+ {
+ case '*':
+ /* external */
+ rc = check_integer_arg ( vargs );
+ if ( rc != 0 )
+ return rc;
+
+ fmt [ fmt_idx ] . ext_start_index = 1;
+ ++ pd -> arg_idx;
+ ++ i;
+ has_start = true;
+ break;
+ case '$':
+ fmt [ fmt_idx ] . inf_start_index = 1;
+ fmt [ fmt_idx ] . ext_start_index = 1;
+ ++ pd -> arg_idx;
+ ++ i;
+ has_start = true;
+ break;
+ }
+
+ /* detect range */
+ switch ( fmt_str [ i ] )
+ {
+ /* given as start-stop */
+ case '-':
+ end_is_stop = true;
+
+ /* given as start/len */
+ case '/':
+
+ has_len = true;
+
+ if ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ /* literal selection length or end */
+ fmt [ fmt_idx ] . u . f . select_len = fmt_str [ i ] - '0';
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ {
+ fmt [ fmt_idx ] . u . f . select_len *= 10;
+ fmt [ fmt_idx ] . u . f . select_len += fmt_str [ i ] - '0';
+ }
+ has_end = true;
+ }
+ else switch ( fmt_str [ i ] )
+ {
+ case '*':
+ /* external */
+ rc = check_integer_arg ( vargs );
+ if ( rc != 0 )
+ return rc;
+
+ /* external selection length or end */
+ fmt [ fmt_idx ] . ext_stop_index = end_is_stop;
+ fmt [ fmt_idx ] . ext_select_len = ! end_is_stop;
+ ++ pd -> arg_idx;
+ ++ i;
+ has_end = true;
+ break;
+ case '$':
+ /* ignore index end if start is infinite */
+ if ( ! fmt [ fmt_idx ] . inf_start_index )
+ {
+ fmt [ fmt_idx ] . inf_stop_index = 1;
+ fmt [ fmt_idx ] . ext_stop_index = 1;
+ ++ pd -> arg_idx;
+ end_is_stop = has_end = true;
+ }
+ ++ i;
+ break;
+ case '-':
+ /* negatives are garbage */
+ while ( isdigit ( fmt_str [ ++ i ] ) )
+ ( void ) 0;
+ break;
+ default:
+ end_is_stop = false;
+ }
+ break;
+ }
+
+ if ( ! has_len && has_start )
+ fmt [ fmt_idx ] . u . f . select_len = 1;
+ }
+
+ /* size - accept for brownie-points and for KTime */
+ size_modifier = time_modifier = 0;
+ switch ( fmt_str [ i ] )
+ {
+ /* "Tiny" modifier - like "hh" in C format */
+ case 't':
+ /* "Half" modifier - same as C format */
+ case 'h':
+ /* "Long" modifier - means 64-bit for integers, otherwise like C */
+ case 'l':
+ size_modifier = time_modifier = fmt_str [ i ++ ];
+ break;
+ /* "siZe" modifier - whatever the size of size_t is */
+ case 'z':
+ ++ i;
+ time_modifier = 'z';
+ if ( sizeof ( size_t ) == sizeof ( uint64_t ) )
+ size_modifier = 'l';
+ break;
+ }
+
+ /* output format
+ describes the formatting to apply on output
+ if precision has not been set, give it a default value */
+ domain = 0;
+ numeric = false;
+ switch ( fmt_str [ i ] )
+ {
+ /* decimal signed integer */
+ case 'd':
+ case 'i':
+ fmt [ fmt_idx ] . radix = 10;
+ fmt [ fmt_idx ] . fmt = spfSignedInt;
+ numeric = true;
+ if ( ! has_precision )
+ fmt [ fmt_idx ] . u . f . precision = 1;
+ else if ( fmt [ fmt_idx ] . left_fill == '0' )
+ fmt [ fmt_idx ] . left_fill = ' ';
+ domain = vtdInt;
+ break;
+
+ /* decimal unsigned integer */
+ case 'u':
+ fmt [ fmt_idx ] . radix = 10;
+ unsigned_int:
+ fmt [ fmt_idx ] . fmt = spfUnsigned;
+ fmt [ fmt_idx ] . sign = 0;
+ numeric = true;
+ if ( ! has_precision )
+ fmt [ fmt_idx ] . u . f . precision = 1;
+ else if ( fmt [ fmt_idx ] . left_fill == '0' )
+ fmt [ fmt_idx ] . left_fill = ' ';
+ domain = vtdUint;
+ break;
+
+ /* hex unsigned integer */
+ case 'x':
+ fmt [ fmt_idx ] . add_prefix = alternate;
+ fmt [ fmt_idx ] . radix = 16;
+ goto unsigned_int;
+
+ /* upper-case hex unsigned integer */
+ case 'X':
+ fmt [ fmt_idx ] . upper_case_num = 1;
+ fmt [ fmt_idx ] . add_prefix = alternate;
+ fmt [ fmt_idx ] . radix = 16;
+ goto unsigned_int;
+
+ /* octal unsigned integer */
+ case 'o':
+ fmt [ fmt_idx ] . add_prefix = alternate;
+ fmt [ fmt_idx ] . radix = 8;
+ goto unsigned_int;
+
+ /* binary unsigned integer */
+ case 'b':
+ fmt [ fmt_idx ] . add_prefix = alternate;
+ fmt [ fmt_idx ] . radix = 2;
+ goto unsigned_int;
+
+ /* decimal signed floating point */
+ case 'f':
+ fmt [ fmt_idx ] . fmt = spfStdFloat;
+ fmt_float:
+ fmt [ fmt_idx ] . radix = 10;
+ fmt [ fmt_idx ] . force_decimal_point = alternate;
+ numeric = true;
+ if ( ! has_precision )
+ fmt [ fmt_idx ] . u . f . precision = 6;
+ domain = vtdFloat;
+ break;
+
+ /* scientific notation floating point */
+ case 'e':
+ fmt [ fmt_idx ] . fmt = spfSciFloat;
+ goto fmt_float;
+
+ /* "general" floating point */
+ case 'g':
+ fmt [ fmt_idx ] . leave_trailing_zeros = alternate;
+ fmt [ fmt_idx ] . fmt = spfGenFloat;
+ goto fmt_float;
+
+ /* character data */
+ case 's':
+ if ( ! has_precision )
+ /* no break */
+ case 'c':
+ fmt [ fmt_idx ] . u . f . precision = -1;
+ fmt [ fmt_idx ] . fmt = spfText;
+ domain = vtdUnicode;
+ break;
+
+ default:
+ return RC ( rcXF, rcString, rcFormatting, rcFormat, rcUnrecognized );
+ }
+
+ /* handle zero padding for non-numeric cases */
+ if ( ! numeric && fmt [ fmt_idx ] . left_fill == '0' )
+ fmt [ fmt_idx ] . left_fill = ' ';
+
+ /* take size from actual parameter */
+ rc = extract_size_modifier ( vargs, & size_modifier );
+ if ( rc != 0 )
+ return rc;
+
+ /* determine type from argument */
+ switch ( vargs -> dp -> argv [ vargs -> idx ] . desc . domain )
+ {
+ case vtdBool:
+ case vtdUint:
+ switch ( domain )
+ {
+ case vtdBool:
+ case vtdUint:
+ case vtdInt:
+ break;
+ case vtdFloat:
+ fmt [ fmt_idx ] . type_cast = 1;
+ break;
+ default:
+ return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+ }
+
+ switch ( size_modifier )
+ {
+ case 't':
+ fmt [ fmt_idx ] . type = sptUnsignedInt8Vect;
+ break;
+ case 'h':
+ fmt [ fmt_idx ] . type = sptUnsignedInt16Vect;
+ break;
+ case 0:
+ fmt [ fmt_idx ] . type = sptUnsignedInt32Vect;
+ break;
+ case 'l':
+ fmt [ fmt_idx ] . type = sptUnsignedInt64Vect;
+ break;
+ }
+ break;
+
+ case vtdInt:
+ switch ( domain )
+ {
+ case vtdBool:
+ case vtdUint:
+ case vtdInt:
+ break;
+ case vtdFloat:
+ fmt [ fmt_idx ] . type_cast = 1;
+ break;
+ default:
+ return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+ }
+
+ switch ( size_modifier )
+ {
+ case 't':
+ fmt [ fmt_idx ] . type = sptSignedInt8Vect;
+ break;
+ case 'h':
+ fmt [ fmt_idx ] . type = sptSignedInt16Vect;
+ break;
+ case 0:
+ fmt [ fmt_idx ] . type = sptSignedInt32Vect;
+ break;
+ case 'l':
+ fmt [ fmt_idx ] . type = sptSignedInt64Vect;
+ break;
+ }
+ break;
+
+ case vtdFloat:
+ switch ( domain )
+ {
+ case vtdBool:
+ case vtdUint:
+ case vtdInt:
+ fmt [ fmt_idx ] . type_cast = 1;
+ break;
+ case vtdFloat:
+ break;
+ default:
+ return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+ }
+
+ switch ( size_modifier )
+ {
+ case 'h':
+ fmt [ fmt_idx ] . type = sptFloat32Vect;
+ break;
+ case 0:
+ fmt [ fmt_idx ] . type = sptFloat64Vect;
+ break;
+ }
+ break;
+
+ case vtdAscii:
+ switch ( domain )
+ {
+ case vtdAscii:
+ case vtdUnicode:
+ if ( size_modifier != 0 )
+ fmt [ fmt_idx ] . type_cast = 1;
+ break;
+ default:
+ return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+ }
+
+ fmt [ fmt_idx ] . type = sptString;
+
+ ++ pd -> str_idx;
+ break;
+
+ case vtdUnicode:
+ switch ( domain )
+ {
+ case vtdAscii:
+ case vtdUnicode:
+ switch ( size_modifier )
+ {
+ case 0:
+ fmt [ fmt_idx ] . type = sptString;
+ break;
+ case 'h':
+ fmt [ fmt_idx ] . type_cast = 1;
+ fmt [ fmt_idx ] . type = sptUCS2String;
+ break;
+ case 'l':
+ fmt [ fmt_idx ] . type_cast = 1;
+ fmt [ fmt_idx ] . type = sptUTF32String;
+ break;
+ }
+ break;
+ default:
+ return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+ }
+
+ ++ pd -> str_idx;
+ break;
+ }
+
+ /* account for format argument */
+ ++ fmt_idx;
+ ++ pd -> arg_idx;
+ ++ vargs -> idx;
+ }
+
+ /* record final fmt */
+ if ( rc == 0 )
+ {
+ if ( fmt_idx == LOCAL_FMT_COUNT )
+ {
+ rc = create_overflow ( pd, fmt_idx );
+ if ( rc != 0 )
+ return rc;
+
+ fmt = pd -> fmt;
+ }
+
+ memset ( & fmt [ fmt_idx ++ ], 0, sizeof fmt [ 0 ] );
+
+ /* if not all arguments were consumed, should this be an error? */
+ if ( vargs -> idx != vargs -> dp -> argc )
+ {
+ /* produce warning */
+ }
+ }
+
+ pd -> fmt_idx = fmt_idx;
+
+ return rc;
+}
+
+VTRANSFACT_IMPL ( vdb_sprintf, 1, 0, 0 ) ( const void *self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rc_t rc;
+ Sprintf *obj;
+
+ /* const format string */
+ VAList vargs;
+ const char *fmt_str = cp -> argv [ 0 ] . data . ascii;
+
+ /* local formatting storage */
+ PrintFmt fmt [ LOCAL_FMT_COUNT ];
+
+ /* data block for parse */
+ ParseData pd;
+ pd . fmt_size = cp -> argv [ 0 ] . count;
+ pd . fmt = fmt;
+
+ /* packaged va_list */
+ vargs . dp = dp;
+ vargs . idx = 0;
+
+ /* parse the format string */
+ rc = parse_format_string ( fmt_str, & pd, & vargs );
+ if ( rc == 0 )
+ {
+ /* the object size:
+ literal data bytes +
+ space for PrintFmt +
+ space for PrintArg */
+ size_t obj_extra = pd . lit_size +
+ pd . fmt_idx * sizeof ( PrintFmt ) +
+ pd . arg_idx * sizeof ( PrintArg ) +
+ pd . str_idx * sizeof ( String );
+ obj = malloc ( sizeof * obj + 1 + obj_extra );
+ if ( obj == NULL )
+ rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ uint32_t i;
+
+ char *lit;
+ PrintFmt *dfmt;
+ size_t lit_size;
+
+ obj -> args = ( void* ) ( obj + 1 );
+ dfmt = ( void* ) & obj -> args [ pd . arg_idx ];
+ obj -> str = ( void* ) & dfmt [ pd . fmt_idx ];
+ lit = ( void* ) & obj -> str [ pd . str_idx ];
+ obj -> fmt = dfmt;
+
+ /* not necessary or even helpful, but doesn't cost much */
+ memset ( obj -> args, 0, pd . arg_idx * sizeof obj -> args [ 0 ] );
+ memset ( obj -> str, 0, pd . str_idx * sizeof obj -> str [ 0 ] );
+
+ /* copy format and literals */
+ for ( lit_size = 0, i = 0; i < pd . fmt_idx; ++ i )
+ {
+ /* simple copy */
+ dfmt [ i ] = pd . fmt [ i ];
+ if ( pd . fmt [ i ] . type == sptLiteral )
+ {
+ /* copy over literal data */
+ dfmt [ i ] . u . l . text = & lit [ lit_size ];
+ memcpy ( & lit [ lit_size ],
+ pd . fmt [ i ] . u . l . text,
+ pd . fmt [ i ] . u . l . size );
+ lit_size += pd . fmt [ i ] . u . l . size;
+ }
+ }
+
+ /* NUL-terminate the literal text - again, doesn't help but doesn't hurt */
+ lit [ lit_size ] = 0;
+ }
+ }
+
+ /* douse any overflow memory used */
+ if ( pd . fmt != fmt )
+ KDataBufferWhack ( & pd . overflow );
+
+#if _DEBUGGING
+ if ( rc == 0 )
+ {
+ rc = validate_obj ( obj, true );
+ if ( rc != 0 )
+ KDbgMsg ( "%s - self is bad on factory exit: %R\n", __func__, rc );
+ }
+#endif
+
+ if ( rc == 0 )
+ {
+ rslt -> self = obj;
+ rslt -> whack = free;
+ rslt -> u . rf = sprintf_func;
+ rslt -> variant = vftRow;
+ }
+
+ return rc;
+}
diff --git a/libs/vxf/unzip.c b/libs/vxf/unzip.c
index 615a2dc..7b4f4f3 100644
--- a/libs/vxf/unzip.c
+++ b/libs/vxf/unzip.c
@@ -38,6 +38,7 @@
#include <byteswap.h>
#include <string.h>
#include <zlib.h>
+#include <assert.h>
static rc_t invoke_zlib(void *dst, size_t dsize, const void *src, size_t ssize, int windowBits)
{
@@ -123,14 +124,17 @@ rc_t unzip_func_v2(
dst -> byte_order = src -> byte_order;
dst -> elem_bits = 1;
- rc = invoke_zlib(dst->data, (((size_t)dst->elem_count + 7) >> 3),
+ /* the feed to zlib MUST be byte aligned
+ so the output must be as well */
+ assert ( ( dst -> elem_count & 7 ) == 0 );
+ rc = invoke_zlib(dst->data, (((size_t)dst->elem_count) >> 3),
src->data, (((size_t)src->elem_count * src->elem_bits + 7) >> 3),
-15);
- if ( rc == 0 )
- {
- dst -> elem_count &= ( uint64_t ) ~ 7;
- dst -> elem_count |= trailing;
- }
+
+ /* if the original, uncompressed source was NOT byte aligned,
+ back off the rounded up byte and add in the original bit count */
+ if ( rc == 0 && trailing != 0 )
+ dst -> elem_count -= 8 - trailing;
}
return rc;
diff --git a/libs/vxf/vec-sum.c b/libs/vxf/vec-sum.c
index af9f1b9..9903124 100644
--- a/libs/vxf/vec-sum.c
+++ b/libs/vxf/vec-sum.c
@@ -28,6 +28,7 @@
#include <klib/rc.h>
#include <vdb/xform.h>
#include <vdb/schema.h>
+#include <klib/data-buffer.h>
#include <sysalloc.h>
#include <stdint.h>
@@ -35,7 +36,9 @@
#include <math.h>
#include <assert.h>
-typedef void (*math_f)(void *dst, const void *src, uint32_t vec_length, uint32_t vec_count);
+typedef void (*math_f)(void *const dst,
+ void const *const src, uint32_t const offset,
+ uint32_t const vec_length, uint32_t const vec_count);
typedef struct self_t {
uint32_t vec_length;
math_f f;
@@ -44,10 +47,10 @@ typedef struct self_t {
#define FUNC(VALTYPE) F_ ## VALTYPE
#define FUNC_DEF(VALTYPE) \
-static void FUNC(VALTYPE)(void *Dst, const void *Src, uint32_t vec_length, uint32_t vec_count) { \
+static void FUNC(VALTYPE)(void *Dst, void const *Src, uint32_t const offset, uint32_t const vec_length, uint32_t const vec_count) { \
VALTYPE sum; \
- VALTYPE *dst = (VALTYPE *)Dst; \
- const VALTYPE *src = (const VALTYPE *)Src; \
+ VALTYPE *const dst = (VALTYPE *)Dst; \
+ VALTYPE const *const src = &((VALTYPE const *)Src)[offset]; \
uint32_t i; \
uint32_t j; \
uint32_t k; \
@@ -71,7 +74,30 @@ FUNC_DEF(int32_t)
FUNC_DEF(int64_t)
static
-rc_t CC array_func(
+rc_t CC vec_sum_row_func(void *const Self,
+ VXformInfo const *info,
+ int64_t const row_id,
+ VRowResult *const rslt,
+ uint32_t const argc,
+ VRowData const argv[])
+{
+ self_t const *self = Self;
+ rc_t rc;
+
+ assert(argc == 1);
+
+ rslt->data->elem_bits = rslt->elem_bits;
+ rc = KDataBufferResize(rslt->data, rslt->elem_count = 1);
+ if (rc == 0) {
+ self->f(rslt->data->base,
+ argv[0].u.data.base, argv[0].u.data.first_elem,
+ argv[0].u.data.elem_count, 1);
+ }
+ return rc;
+}
+
+static
+rc_t CC vec_sum_array_func(
void *Self,
const VXformInfo *info,
void *dst,
@@ -82,7 +108,7 @@ rc_t CC array_func(
assert(elem_count % self->vec_length == 0);
assert((elem_count / self->vec_length) >> 32 == 0);
- self->f(dst, src, self->vec_length, (uint32_t)(elem_count / self->vec_length));
+ self->f(dst, src, 0, self->vec_length, (uint32_t)(elem_count / self->vec_length));
return 0;
}
@@ -92,90 +118,122 @@ void CC vxf_vec_sum_wrapper( void *ptr )
free( ptr );
}
-/*
- function < type T, U32 dim >
- T vec_sum #1.0 ( T [ dim ] in )
- */
-VTRANSFACT_IMPL(vdb_vec_sum, 1, 0, 0) (
- const void *Self,
- const VXfactInfo *info,
- VFuncDesc *rslt,
- const VFactoryParams *cp,
- const VFunctionParams *dp
-) {
+rc_t vec_sum_make(self_t **const rslt,
+ VXfactInfo const *const info,
+ VFunctionParams const *const dp)
+{
self_t *self;
rc_t rc = 0;
self = malloc(sizeof(*self));
if (self == NULL)
- return RC(rcVDB, rcFunction, rcConstructing, rcMemory, rcExhausted);
-
- rslt->self = self;
- rslt->whack = vxf_vec_sum_wrapper;
- rslt->variant = vftArray;
- rslt->u.af = array_func;
-
- self->vec_length = dp->argv[0].fd.td.dim;
-
- switch (info->fdesc.desc.intrinsic_bits) {
- case 8:
- switch (info->fdesc.desc.domain) {
- case vtdInt:
- self->f = FUNC(int8_t);
+ rc = RC(rcVDB, rcFunction, rcConstructing, rcMemory, rcExhausted);
+ else {
+ self->vec_length = dp->argv[0].fd.td.dim;
+
+ switch (info->fdesc.desc.intrinsic_bits) {
+ case 8:
+ switch (info->fdesc.desc.domain) {
+ case vtdInt:
+ self->f = FUNC(int8_t);
+ break;
+ case vtdUint:
+ self->f = FUNC(uint8_t);
+ break;
+ default:
+ rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+ }
break;
- case vtdUint:
- self->f = FUNC(uint8_t);
+ case 16:
+ switch (info->fdesc.desc.domain) {
+ case vtdInt:
+ self->f = FUNC(int16_t);
+ break;
+ case vtdUint:
+ self->f = FUNC(uint16_t);
+ break;
+ default:
+ rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+ }
break;
- default:
- rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
- }
- break;
- case 16:
- switch (info->fdesc.desc.domain) {
- case vtdInt:
- self->f = FUNC(int16_t);
+ case 32:
+ switch (info->fdesc.desc.domain) {
+ case vtdInt:
+ self->f = FUNC(int32_t);
+ break;
+ case vtdUint:
+ self->f = FUNC(uint32_t);
+ break;
+ case vtdFloat:
+ self->f = FUNC(float);
+ break;
+ default:
+ rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+ }
break;
- case vtdUint:
- self->f = FUNC(uint16_t);
+ case 64:
+ switch (info->fdesc.desc.domain) {
+ case vtdInt:
+ self->f = FUNC(int64_t);
+ break;
+ case vtdUint:
+ self->f = FUNC(uint64_t);
+ break;
+ case vtdFloat:
+ self->f = FUNC(double);
+ break;
+ default:
+ rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+ }
break;
default:
rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
}
- break;
- case 32:
- switch (info->fdesc.desc.domain) {
- case vtdInt:
- self->f = FUNC(int32_t);
- break;
- case vtdUint:
- self->f = FUNC(uint32_t);
- break;
- case vtdFloat:
- self->f = FUNC(float);
- break;
- default:
- rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+ if (rc) {
+ free(self);
+ self = NULL;
}
- break;
- case 64:
- switch (info->fdesc.desc.domain) {
- case vtdInt:
- self->f = FUNC(int64_t);
- break;
- case vtdUint:
- self->f = FUNC(uint64_t);
- break;
- case vtdFloat:
- self->f = FUNC(double);
- break;
- default:
- rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
- }
- break;
- default:
- rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
}
- if (rc)
- free(self);
- return 0;
+ *rslt = self;
+ return rc;
+}
+
+VTRANSFACT_IMPL(vdb_vec_sum, 1, 0, 0)(const void *Self,
+ const VXfactInfo *info,
+ VFuncDesc *rslt,
+ const VFactoryParams *cp,
+ const VFunctionParams *dp)
+{
+ self_t *self;
+ rc_t rc = vec_sum_make(&self, info, dp);
+
+ if (rc == 0) {
+ rslt->self = self;
+ rslt->whack = vxf_vec_sum_wrapper;
+ rslt->variant = vftRow;
+ rslt->u.rf = vec_sum_row_func;
+ }
+ return rc;
+}
+
+/*
+ function < type T, U32 dim >
+ T vec_sum #1.0 ( T [ dim ] in )
+ */
+VTRANSFACT_IMPL(vdb_fixed_vec_sum, 1, 0, 0)(const void *Self,
+ const VXfactInfo *info,
+ VFuncDesc *rslt,
+ const VFactoryParams *cp,
+ const VFunctionParams *dp)
+{
+ self_t *self;
+ rc_t rc = vec_sum_make(&self, info, dp);
+
+ if (rc == 0) {
+ rslt->self = self;
+ rslt->whack = vxf_vec_sum_wrapper;
+ rslt->variant = vftArray;
+ rslt->u.af = vec_sum_array_func;
+ }
+ return rc;
}
diff --git a/libs/vxf/wgs-tokenize-accession.c b/libs/vxf/wgs-tokenize-accession.c
new file mode 100644
index 0000000..04454fc
--- /dev/null
+++ b/libs/vxf/wgs-tokenize-accession.c
@@ -0,0 +1,212 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+
+#include <vdb/xform.h>
+#include <vdb/schema.h>
+#include <klib/data-buffer.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+enum
+{
+ NCBI_WGS_acc_token_unrecognized = 1,
+ NCBI_WGS_acc_token_prefix,
+ NCBI_WGS_acc_token_contig
+};
+
+enum
+{
+ TTextToken_id,
+ TTextToken_start,
+ TTextToken_len
+};
+
+
+static
+uint32_t ParseWgsAccession ( uint16_t *tok, const char *acc, size_t acc_len )
+{
+ /* WGS accessions have form:
+ * [NZ_]<4-letter prefix><2-digit version><6-7 digit contig>
+ */
+ size_t i;
+
+ /* scan non-digits */
+ for ( i = 0; i < acc_len; ++ i )
+ {
+ if ( isdigit ( acc [ i ] ) )
+ break;
+ }
+
+ /* require at least 4 characters... */
+ if ( i >= 4 )
+ {
+ /* require at least 8 digits */
+ if ( acc_len - i >= 8 )
+ {
+ /* 2-digit version */
+ if ( isdigit ( acc [ ++ i ] ) )
+ {
+ /* record first token as prefix */
+ tok [ 0 + TTextToken_id ] = NCBI_WGS_acc_token_prefix;
+ tok [ 0 + TTextToken_start ] = 0;
+ tok [ 0 + TTextToken_len ] = ( uint16_t ) ++ i;
+
+ /* the remainder should be contig */
+ tok [ 3 + TTextToken_id ] = NCBI_WGS_acc_token_contig;
+ tok [ 3 + TTextToken_start ] = ( uint16_t ) i;
+ tok [ 3 + TTextToken_len ] = ( uint16_t ) ( acc_len - i );
+
+ /* verify that it is numeric */
+ for ( ; i < acc_len; ++ i )
+ {
+ if ( ! isdigit ( acc [ i ] ) )
+ break;
+ }
+
+ /* great success */
+ if ( i == acc_len )
+ return 2;
+ }
+ }
+ }
+
+ tok [ 0 + TTextToken_id ] = NCBI_WGS_acc_token_unrecognized;
+ tok [ 0 + TTextToken_start ] = 0;
+ tok [ 0 + TTextToken_len ] = ( uint16_t ) acc_len;
+
+ return 1;
+}
+
+static
+rc_t CC tokenize_nuc_accession ( void *obj,
+ const VXformInfo *info, int64_t row_id, VRowResult *rslt,
+ uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ const char *acc;
+
+ assert ( rslt -> elem_bits == 16 * 3 );
+
+ rslt -> data -> elem_bits = rslt -> elem_bits;
+ rc = KDataBufferResize ( rslt -> data, 2 );
+ if ( rc != 0 )
+ return rc;
+
+ acc = argv [ 0 ] . u . data . base;
+ acc += argv [ 0 ] . u . data . first_elem;
+
+ rslt -> elem_count = ParseWgsAccession ( rslt -> data -> base, acc, argv [ 0 ] . u . data . elem_count );
+ if ( rslt -> elem_count != 2 )
+ rc = KDataBufferResize ( rslt -> data, rslt -> elem_count );
+
+ return rc;
+}
+
+static
+uint32_t ParseProtAccession ( uint16_t *tok, const char *acc, size_t acc_len )
+{
+ /* Protein accessions generally have pattern
+ * <Cap-letter prefix><digital suffix>
+ * If this doesn't hold, use full accession as prefix, and make suffix empty.
+ */
+ size_t i;
+
+ for ( i = 0; i < acc_len; ++ i )
+ {
+ if ( isdigit ( acc [ i ] ) )
+ break;
+ }
+
+ tok [ 0 + TTextToken_id ] = NCBI_WGS_acc_token_prefix;
+ tok [ 0 + TTextToken_start ] = 0;
+ tok [ 0 + TTextToken_len ] = ( uint16_t ) i;
+
+ for ( ; i < acc_len; ++ i )
+ {
+ if ( ! isdigit ( acc [ i ] ) )
+ break;
+ }
+
+ if ( i == acc_len )
+ {
+ tok [ 3 + TTextToken_id ] = NCBI_WGS_acc_token_contig;
+ tok [ 3 + TTextToken_start ] = tok [ 0 + TTextToken_len ];
+ tok [ 3 + TTextToken_len ] = ( uint16_t ) ( i - tok [ 0 + TTextToken_len ] );
+ return 2;
+ }
+
+ tok [ 0 + TTextToken_len ] = ( uint16_t ) acc_len;
+ return 1;
+}
+
+static
+rc_t CC tokenize_prot_accession ( void *obj,
+ const VXformInfo *info, int64_t row_id, VRowResult *rslt,
+ uint32_t argc, const VRowData argv [] )
+{
+ rc_t rc;
+ const char *acc;
+
+ assert ( rslt -> elem_bits == 16 * 3 );
+
+ rslt -> data -> elem_bits = rslt -> elem_bits;
+ rc = KDataBufferResize ( rslt -> data, 2 );
+ if ( rc != 0 )
+ return rc;
+
+ acc = argv [ 0 ] . u . data . base;
+ acc += argv [ 0 ] . u . data . first_elem;
+
+ rslt -> elem_count = ParseProtAccession ( rslt -> data -> base, acc, argv [ 0 ] . u . data . elem_count );
+ if ( rslt -> elem_count != 2 )
+ rc = KDataBufferResize ( rslt -> data, rslt -> elem_count );
+
+ return rc;
+}
+
+VTRANSFACT_IMPL ( NCBI_WGS_tokenize_nuc_accession, 1, 0, 0 ) ( const void *self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rslt -> u . rf = tokenize_nuc_accession;
+ rslt -> variant = vftRow;
+ return 0;
+}
+
+VTRANSFACT_IMPL ( NCBI_WGS_tokenize_prot_accession, 1, 0, 0 ) ( const void *self, const VXfactInfo *info,
+ VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+ rslt -> u . rf = tokenize_prot_accession;
+ rslt -> variant = vftRow;
+ return 0;
+}
diff --git a/libs/wgsxf/Makefile b/libs/wgsxf/Makefile
new file mode 100644
index 0000000..8342ebf
--- /dev/null
+++ b/libs/wgsxf/Makefile
@@ -0,0 +1,138 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/wgsxf
+
+MOD_LIBS = \
+ libwgsxf \
+ libwwgsxf
+
+TEST_TOOLS = \
+
+include $(TOP)/build/Makefile.env
+
+RWORKDIR = $(BINDIR)
+
+ALL_LIBS = \
+ $(MOD_LIBS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(MOD_LIBS): makedirs
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(TEST_TOOLS): makedirs
+ @ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(TARGDIR)/,$(MOD_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# wgs-vdb transform library
+#
+$(TARGDIR)/libwgsxf: $(addprefix $(TARGDIR)/libwgsxf.,$(MODEXT))
+
+$(TARGDIR)/libwgsxf.$(SHLX): $(MODDIR)/libwgsxf.$(SHLX)
+
+WGSXF_SRC = \
+ build_scaffold \
+ build_read_type
+
+WGSXF_OBJ = \
+ $(addsuffix .$(LOBX),$(WGSXF_SRC))
+
+WGSXF_LIB = \
+ -dvdb \
+ -dklib \
+ -dm \
+ -dz \
+ -dbz2
+
+$(MODDIR)/libwgsxf.$(SHLX): $(WGSXF_OBJ)
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(WGSXF_LIB)
+
+$(TARGDIR)/libwgsxf.$(LIBX): $(ILIBDIR)/libwgsxf.$(LIBX)
+
+$(ILIBDIR)/libwgsxf.$(LIBX): $(WGSXF_OBJ)
+ $(LD) --slib -o $@ $^ $(WGSXF_LIB)
+
+.PHONY: $(TARGDIR)/libwgsxf $(TARGDIR)/libwgsxf.$(SHLX) $(TARGDIR)/libwgsxf.$(LIBX)
+
+#-------------------------------------------------------------------------------
+# update-side wgs transform library
+#
+
+$(TARGDIR)/libwwgsxf: $(addprefix $(TARGDIR)/libwwgsxf.,$(MODEXT))
+
+$(TARGDIR)/libwwgsxf.$(SHLX): $(WMODDIR)/libwwgsxf.$(SHLX)
+
+WWGSXF_SRC = \
+ $(WGSXF_SRC)
+
+WWGSXF_OBJ = \
+ $(addsuffix .$(LOBX),$(WWGSXF_SRC))
+
+# temporary
+WWGSXF_LIB = \
+ -dwvdb \
+ -dwkdb \
+ -dklib \
+ -dm \
+ -dz \
+ -dbz2
+
+$(WMODDIR)/libwwgsxf.$(SHLX): $(WWGSXF_OBJ)
+ $(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(WWGSXF_LIB)
+
+$(TARGDIR)/libwwgsxf.$(LIBX): $(ILIBDIR)/libwwgsxf.$(LIBX)
+
+$(ILIBDIR)/libwwgsxf.$(LIBX): $(WWGSXF_OBJ)
+ $(LD) --slib -o $@ $^ $(WWGSXF_LIB)
+
+libwwgsxf.vers.h:
+ @ true
+
+.PHONY: $(TARGDIR)/libwwgsxf $(TARGDIR)/libwwgsxf.$(SHLX) $(TARGDIR)/libwwgsxf.$(LIBX)
diff --git a/libs/wgsxf/build_read_type.c b/libs/wgsxf/build_read_type.c
new file mode 100644
index 0000000..02ebed5
--- /dev/null
+++ b/libs/wgsxf/build_read_type.c
@@ -0,0 +1,113 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/schema.h>
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <ncbi/wgs-contig.h>
+
+static
+rc_t build_read_type(INSDC_SRA_xread_type dst[],
+ unsigned const components,
+ NCBI_WGS_component_props const Props[/* components */])
+{
+ unsigned i;
+
+ for (i = 0; i != components; ++i) {
+ int const props = Props[i];
+
+ if (props < 0) {
+ dst[i] = SRA_READ_TYPE_TECHNICAL;
+ }
+ else {
+ int const type = props & 0x0F;
+
+ if (type == 0) {
+ int const strand = props & ~(NCBI_WGS_strand_plus | NCBI_WGS_strand_minus);
+
+ switch (strand) {
+ case 0:
+ dst[i] = SRA_READ_TYPE_BIOLOGICAL;
+ break;
+ case NCBI_WGS_strand_plus:
+ dst[i] = SRA_READ_TYPE_BIOLOGICAL | SRA_READ_TYPE_FORWARD;
+ break;
+ case NCBI_WGS_strand_minus:
+ dst[i] = SRA_READ_TYPE_BIOLOGICAL | SRA_READ_TYPE_REVERSE;
+ break;
+ default:
+ return RC(rcXF, rcFunction, rcExecuting, rcType, rcInvalid);
+ }
+ }
+ else
+ return RC(rcXF, rcFunction, rcExecuting, rcType, rcInvalid);
+ }
+ }
+ return 0;
+}
+
+/*
+ * function INSDC:SRA:xread_type NCBI:WGS:build_read_type #1
+ * ( NCBI:WGS:component_props component_props )
+ */
+
+static
+rc_t CC build_read_type_impl(void *self, VXformInfo const *info, int64_t row_id,
+ VFixedRowResult const *rslt,
+ uint32_t argc, VRowData const argv[])
+{
+ NCBI_WGS_component_props const *const props = argv[0].u.data.base;
+ unsigned const components = argv[0].u.data.elem_count;
+ INSDC_SRA_xread_type *const dst = rslt->base;
+
+ return build_read_type(&dst[rslt->first_elem], components,
+ &props[argv[0].u.data.first_elem]);
+}
+
+VTRANSFACT_IMPL(NCBI_WGS_build_read_type, 1, 0, 0)(void const *const Self,
+ VXfactInfo const *const info,
+ VFuncDesc *const rslt,
+ VFactoryParams const *const cp,
+ VFunctionParams const *const dp)
+{
+ rslt->variant = vftFixedRow;
+ rslt->u.pf = build_read_type_impl;
+ return 0;
+}
diff --git a/libs/wgsxf/build_scaffold.c b/libs/wgsxf/build_scaffold.c
new file mode 100644
index 0000000..c9f3f2b
--- /dev/null
+++ b/libs/wgsxf/build_scaffold.c
@@ -0,0 +1,388 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/schema.h>
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <kdb/meta.h>
+#include <klib/data-buffer.h>
+#include <insdc/insdc.h>
+#include <align/refseq-mgr.h>
+#include <bitstr.h>
+#include <sysalloc.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <insdc/sra.h>
+#include <ncbi/wgs-contig.h>
+
+#define READ_GAP_VALUE (0)
+#define QUAL_GAP_VALUE (2)
+
+#define CURSOR_CACHE_SIZE (4 * 1024 * 1024)
+
+typedef struct self_t self_t;
+typedef rc_t (*impl_f)(self_t const *const self, void *const Dst,
+ unsigned const components,
+ INSDC_coord_one const start[/* components */],
+ INSDC_coord_len const length[/* components */],
+ NCBI_WGS_component_props const props[/* components */],
+ int64_t const join[/* components */]);
+
+struct self_t
+{
+ VCursor const *curs;
+ uint32_t col_idx;
+ impl_f impl;
+};
+
+static void free_self(self_t *const self)
+{
+ VCursorRelease(self->curs);
+}
+
+static
+void CC whack(void *vp)
+{
+ if (vp) {
+ free_self(vp);
+ free(vp);
+ }
+}
+
+static
+rc_t init_self(self_t *self, VTable const *const srctbl, char const column[])
+{
+ VDatabase const *db;
+ rc_t rc = VTableOpenParentRead(srctbl, &db);
+
+ if (rc == 0) {
+ VTable const *tbl;
+
+ rc = VDatabaseOpenTableRead(db, &tbl, "SEQUENCE");
+ VDatabaseRelease(db);
+ if (rc == 0) {
+ VCursor const *curs;
+#if CURSOR_CACHE_SIZE
+ rc = VTableCreateCachedCursorRead(tbl, &curs, CURSOR_CACHE_SIZE);
+#else
+ rc = VTableCreateCursorRead(tbl, &curs);
+#endif
+ VTableRelease(tbl);
+ if (rc == 0) {
+ uint32_t col_idx;
+
+ rc = VCursorAddColumn(curs, &col_idx, column);
+ if (rc == 0) {
+ rc = VCursorOpen(curs);
+ if (rc == 0) {
+ self->curs = curs;
+ self->col_idx = col_idx;
+ return 0;
+ }
+ if (GetRCObject(rc) == rcColumn && GetRCState(rc) == rcUndefined)
+ rc = 0;
+ }
+ VCursorRelease(curs);
+ }
+ }
+ }
+ return rc;
+}
+
+static
+rc_t build_scaffold_read_impl(self_t const *const self, void *const Dst,
+ unsigned const components,
+ INSDC_coord_one const Start[/* components */],
+ INSDC_coord_len const Length[/* components */],
+ NCBI_WGS_component_props const Props[/* components */],
+ int64_t const join[/* components */])
+{
+ INSDC_4na_bin *const dst = Dst;
+ unsigned i;
+ unsigned j;
+ unsigned id;
+ rc_t rc;
+
+ for (rc = 0, id = j = i = 0; rc == 0 && i != components; ++i) {
+ INSDC_coord_len const length = Length[i];
+ int const props = Props[i];
+
+ if (props < 0) {
+ /* gap */
+ memset(dst + j, READ_GAP_VALUE, length);
+ }
+ else if (self->curs == NULL) {
+ memset(dst + j, 15, length);
+ }
+ else {
+ int const type = props & 0x0F;
+ int const strand = (props & ~(NCBI_WGS_strand_plus | NCBI_WGS_strand_minus)) >> 4;
+
+ if (type != 0 || strand == 3)
+ rc = RC(rcXF, rcFunction, rcExecuting, rcType, rcInvalid);
+ else {
+ int64_t const row = join[id++];
+ uint32_t elem_bits;
+ uint32_t bit_offset;
+ uint32_t elem_count;
+ void const *base;
+
+ rc = VCursorCellDataDirect(self->curs, row, self->col_idx,
+ &elem_bits, &base, &bit_offset,
+ &elem_count);
+ assert(bit_offset == 0);
+ if (rc == 0) {
+ INSDC_coord_one const start = Start[i] - 1;
+
+ if (elem_count < start + length)
+ rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInsufficient);
+ else {
+ INSDC_4na_bin const *const src = base;
+
+ if (strand == 2) {
+ static INSDC_4na_bin const complement[] = {
+ /* 0 0000 - 0000*/ 0,
+ /* 1 0001 - 1000*/ 8,
+ /* 2 0010 - 0100*/ 4,
+ /* 3 0011 - 1100*/ 12,
+ /* 4 0100 - 0010*/ 2,
+ /* 5 0101 - 1010*/ 10,
+ /* 6 0110 - 0110*/ 6,
+ /* 7 0111 - 1110*/ 14,
+ /* 8 1000 - 0001*/ 1,
+ /* 9 1001 - 1001*/ 9,
+ /*10 1010 - 0101*/ 5,
+ /*11 1011 - 1101*/ 13,
+ /*12 1100 - 0011*/ 3,
+ /*13 1101 - 1011*/ 11,
+ /*14 1110 - 0111*/ 7,
+ /*15 1111 - 1111*/ 15
+ };
+ unsigned k;
+ unsigned jj;
+
+ for (jj = j + length, k = 0; k != length; ++k) {
+ INSDC_4na_bin const elem = src[start + k];
+
+ assert(0 <= elem && elem <= 15);
+ --jj;
+ dst[jj] = complement[elem];
+ }
+ }
+ else
+ memcpy(&dst[j], &src[start], length);
+ }
+ }
+ }
+ }
+
+ j += length;
+ }
+ return rc;
+}
+
+static
+rc_t build_scaffold_qual_impl(self_t const *const self, void *const Dst,
+ unsigned const components,
+ INSDC_coord_one const Start[/* components */],
+ INSDC_coord_len const Length[/* components */],
+ NCBI_WGS_component_props const Props[/* components */],
+ int64_t const join[/* components */])
+{
+ INSDC_quality_phred *const dst = Dst;
+ unsigned i;
+ unsigned j;
+ unsigned id;
+ rc_t rc;
+
+ for (rc = 0, id = j = i = 0; rc == 0 && i != components; ++i) {
+ INSDC_coord_len const length = Length[i];
+ int const props = Props[i];
+
+ if (props < 0) {
+ /* gap */
+ memset(dst + j, QUAL_GAP_VALUE, length);
+ }
+ else if (self->curs == NULL) {
+ memset(dst + j, 30, length);
+ }
+ else {
+ int const type = props & 0x0F;
+ int const strand = (props & ~(NCBI_WGS_strand_plus | NCBI_WGS_strand_minus)) >> 4;
+
+ if (type != 0 || strand == 3)
+ rc = RC(rcXF, rcFunction, rcExecuting, rcType, rcInvalid);
+ else {
+ int64_t const row = join[id++];
+ uint32_t elem_bits;
+ uint32_t bit_offset;
+ uint32_t elem_count;
+ void const *base;
+
+ rc = VCursorCellDataDirect(self->curs, row, self->col_idx,
+ &elem_bits, &base, &bit_offset,
+ &elem_count);
+ assert(bit_offset == 0);
+ if (rc == 0) {
+ INSDC_quality_phred const start = Start[i] - 1;
+
+ if (elem_count < start + length)
+ rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInsufficient);
+ else {
+ INSDC_quality_phred const *const src = base;
+
+ if (strand == 2) {
+ unsigned k;
+ unsigned jj;
+
+ for (jj = j + length, k = 0; k != length; ++k) {
+ INSDC_quality_phred const elem = src[start + k];
+
+ --jj;
+ dst[jj] = elem;
+ }
+ }
+ else
+ memcpy(&dst[j], &src[start], length);
+ }
+ }
+ }
+ }
+
+ j += length;
+ }
+ return rc;
+}
+
+static
+unsigned total_length(unsigned const components, INSDC_coord_len const length[/* components */])
+{
+ unsigned i;
+ unsigned len;
+
+ for (i = len = 0; i != components; ++i)
+ len += length[i];
+ return len;
+}
+
+
+/*
+ * function INSDC:4na:bin NCBI:WGS:build_scaffold_read #1
+ * ( INSDC:coord:one component_start, INSDC:coord:len component_len,
+ * NCBI:WGS:component_props component_props, I64 component_id )
+ *
+ * function INSDC:quality:phred NCBI:WGS:build_scaffold_qual #1
+ * ( INSDC:coord:one component_start, INSDC:coord:len component_len,
+ * NCBI:WGS:component_props component_props, I64 component_id )
+ */
+
+static
+rc_t CC build_scaffold_impl(void *const data, VXformInfo const *const info,
+ int64_t const row_id, VRowResult *const rslt,
+ uint32_t const argc, VRowData const argv[])
+{
+ self_t const *const self = data;
+ INSDC_coord_one const *const start = argv[0].u.data.base;
+ INSDC_coord_len const *const length = argv[1].u.data.base;
+ NCBI_WGS_component_props const *const props = argv[2].u.data.base;
+ int64_t const *const join = argv[3].u.data.base;
+ unsigned const components = argv[0].u.data.elem_count;
+ rc_t rc;
+
+ assert(argv[1].u.data.elem_count == components);
+ assert(argv[2].u.data.elem_count == components);
+
+ assert(start != NULL);
+ assert(length != NULL);
+ assert(props != NULL);
+ assert(join != NULL);
+
+ assert(rslt->elem_bits == 8);
+ rslt->elem_count = total_length(components, &length[argv[1].u.data.first_elem]);
+ rc = KDataBufferResize(rslt->data, rslt->elem_count);
+ if (rc == 0)
+ rc = self->impl(self, rslt->data->base, components,
+ &start[argv[0].u.data.first_elem],
+ &length[argv[1].u.data.first_elem],
+ &props[argv[2].u.data.first_elem],
+ &join[argv[3].u.data.first_elem]);
+ return rc;
+}
+
+VTRANSFACT_IMPL(NCBI_WGS_build_scaffold_read, 1, 0, 0)(void const * Self,
+ VXfactInfo const * info,
+ VFuncDesc * rslt,
+ VFactoryParams const * cp,
+ VFunctionParams const * dp)
+{
+ self_t *self = calloc(1, sizeof(*self));
+ if (self) {
+ rc_t const rc = init_self(self, info->tbl, "(INSDC:4na:bin)READ");
+
+ if (rc == 0) {
+ self->impl = build_scaffold_read_impl;
+
+ rslt->self = self;
+ rslt->whack = whack;
+ rslt->variant = vftRow;
+ rslt->u.rf = build_scaffold_impl;
+ }
+ return rc;
+ }
+ return RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
+}
+
+VTRANSFACT_IMPL(NCBI_WGS_build_scaffold_qual, 1, 0, 0)(void const * Self,
+ VXfactInfo const * info,
+ VFuncDesc * rslt,
+ VFactoryParams const * cp,
+ VFunctionParams const * dp)
+{
+ self_t *self = calloc(1, sizeof(*self));
+ if (self) {
+ rc_t const rc = init_self(self, info->tbl, "(INSDC:quality:phred)QUALITY");
+
+ if (rc == 0) {
+ self->impl = build_scaffold_qual_impl;
+
+ rslt->self = self;
+ rslt->whack = whack;
+ rslt->variant = vftRow;
+ rslt->u.rf = build_scaffold_impl;
+ }
+ return rc;
+ }
+ return RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
+}
diff --git a/libs/align/libalign-writer.vers b/libs/wgsxf/libwgsxf.vers
similarity index 100%
copy from libs/align/libalign-writer.vers
copy to libs/wgsxf/libwgsxf.vers
diff --git a/libs/align/libalign-writer.vers b/libs/wgsxf/libwwgsxf.vers
similarity index 100%
rename from libs/align/libalign-writer.vers
rename to libs/wgsxf/libwwgsxf.vers
diff --git a/tools/Makefile b/tools/Makefile
index ec5f90d..87cbc82 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -38,12 +38,22 @@ SUBDIRS = \
vdb-dump \
sra-dump \
sra-load \
- sam-dump \
+ sra-pileup \
+ bam-loader \
+ srapath \
sra-stat \
vdb-copy \
sra-dbcc \
vdb-config \
- align-info
+ align-info \
+ prefetch \
+ nenctool \
+ nencvalid \
+ vdb-decrypt \
+ vdb-validate \
+ sra-sort \
+ cg-load \
+ fastq-loader
default: $(SUBDIRS)
@@ -101,6 +111,17 @@ $(SUBDIRS_TAG):
.PHONY: tag $(SUBDIRS_TAG)
+#-------------------------------------------------------------------------------
+# runtests
+#
+SUBDIRS_RUNTESTS = $(addsuffix _runtests, bam-loader fastq-loader)
+
+runtests: std $(SUBDIRS_RUNTESTS)
+
+$(SUBDIRS_RUNTESTS):
+ @ $(MAKE) -C $(subst _runtests,,$@) runtests
+
+.PHONY: runtests $(SUBDIRS_RUNTESTS)
#-------------------------------------------------------------------------------
# pass-through
diff --git a/tools/align-info/Makefile b/tools/align-info/Makefile
index c5e5312..030af03 100644
--- a/tools/align-info/Makefile
+++ b/tools/align-info/Makefile
@@ -25,7 +25,7 @@
default: std
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
MODULE = tools/align-info
include $(TOP)/build/Makefile.env
@@ -42,15 +42,13 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# std
@@ -61,19 +59,18 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
-# clean
+# vers-includes
#
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
#-------------------------------------------------------------------------------
-# tag
+# clean
#
-tag: \
- $(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
#-------------------------------------------------------------------------------
# align-info
@@ -88,22 +85,18 @@ ALIGN_INFO_LIB = \
-lkapp \
-lsraschema \
-dalign-reader \
- -daxf \
- -dsraxf \
- -dvxf \
+ $(READONLY_SCHEMA_LIBS) \
-dksrch \
-lvdb \
-lkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
+ -lkproc \
-lklib \
- -lbz2 \
- -ldl \
- -lz \
-lm
$(BINDIR)/align-info: $(ALIGN_INFO_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(ALIGN_INFO_LIB)
-
-align_info_tag:
- @ $(TOP)/build/tag-module.sh $(MODULE) align-info $(ALIGN_INFO_OBJ)
diff --git a/tools/align-info/align-info.c b/tools/align-info/align-info.c
index bd52e46..40bc8a8 100644
--- a/tools/align-info/align-info.c
+++ b/tools/align-info/align-info.c
@@ -30,14 +30,17 @@
#include <vdb/manager.h> /* VDBManager */
#include <vdb/database.h> /* VDatabase */
+#include <vdb/dependencies.h> /* VDBDependencies */
#include <vdb/table.h> /* VTable */
#include <vdb/schema.h> /* VSchema */
#include <vdb/cursor.h> /* VCursor */
+#include <vdb/vdb-priv.h> /* VDBManagerOpenKDBManagerRead */
#include <kapp/main.h>
#include <kfg/config.h> /* KConfig */
+#include <kdb/manager.h> /* KDBManagerRelease */
#include <kdb/namelist.h> /* KMDataNodeListChild */
#include <kdb/meta.h> /* KMetadata */
@@ -49,15 +52,10 @@
#include <klib/rc.h> /* RC */
#include <assert.h>
-#include <limits.h> /* PATH_MAX */
#include <stdio.h> /* sscanf */
#include <stdlib.h> /* free */
#include <string.h> /* strcmp */
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
-
#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
PLOGERR(klogInt, (klogInt,rc, "$(msg): $(name)","msg=%s,name=%s",msg,name)))
@@ -71,253 +69,6 @@ typedef struct Params {
bool paramQuality;
bool paramRef;
} Params;
-typedef struct RefNode {
- BSTNode n;
- bool circular;
- char* name;
- char* seqId;
- bool row_lenCMP_READwas0;
-} RefNode;
-static rc_t ReadCfgStr
-(const KConfig* kfg, const char* path, char* value, size_t value_sz)
-{
- rc_t rc = 0;
- const KConfigNode *node = NULL;
-
- rc = KConfigOpenNodeRead(kfg, &node, path);
- if (rc == 0) {
- size_t num_read = 0;
- size_t remaining = 0;
- rc = KConfigNodeRead
- (node, 0, value, value_sz - 1, &num_read, &remaining);
- if (rc == 0) {
- if (remaining != 0)
- { rc = RC(rcExe, rcConfig, rcReading, rcString, rcTooLong); }
- else { value[num_read] = '\0'; }
- }
- }
-
- DESTRUCT(KConfigNode, node);
-
- return rc;
-}
-
-typedef struct FindRefseq {
- const char* seqId;
- bool found;
-} FindRefseq;
-static rc_t CC scan_refseq_dir(const KDirectory* dir,
- uint32_t type, const char* name, void* data)
-{
- FindRefseq* t = data;
- assert(dir && name && data && t->seqId);
- if (strcmp(t->seqId, name) == 0)
- { t->found = true; }
- return 0;
-}
-
-static bool construct(rc_t* aRc, const KDirectory* native, const char* srv,
- const char* vol, const char* seqId, char* buf, size_t blen)
-{
- rc_t rc = 0;
-
- const KDirectory* dir = NULL;
-
- FindRefseq t;
-
- assert(aRc && native && srv && seqId && buf && blen);
-
- rc = *aRc;
-
- if (rc != 0)
- { return false; }
-
- if (vol)
- { rc = KDirectoryOpenDirRead(native, &dir, false, "%s/%s", srv, vol); }
- else
- { rc = KDirectoryOpenDirRead(native, &dir, false, srv); }
-
- if (rc == 0) {
- memset(&t, 0, sizeof t);
- t.seqId = seqId;
- rc = KDirectoryVVisit(dir, false, scan_refseq_dir, &t, ".", NULL);
- }
-
- if (rc == 0 && t.found) {
- if (vol) {
- rc = KDirectoryResolvePath
- (native, true, buf, blen, "%s/%s/%s", srv, vol, seqId);
- }
- else {
- rc = KDirectoryResolvePath
- (native, true, buf, blen, "%s/%s", srv, seqId);
- }
- }
-
- DESTRUCT(KDirectory, dir);
-
- *aRc = rc;
-
- return t.found;
-}
-
-static
-rc_t privFindRef(const char* seqId, char* buf, size_t blen,
- bool destroy)
-{
-#define SIZE 4096
- rc_t rc = 0;
- static KDirectory* dir = NULL;
- static KConfig* cfg = NULL;
- static char Servers[SIZE] = "";
- static char Volumes[SIZE] = "";
- static char Paths[SIZE] = "";
- if (cfg == NULL && !destroy) {
- if (rc == 0) {
- rc = KDirectoryNativeDir(&dir);
- DISP_RC(rc, "while calling KDirectoryNativeDir");
- }
- if (rc == 0) {
- rc = KConfigMake(&cfg, NULL);
- DISP_RC(rc, "while calling KConfigMake");
- }
- if (rc == 0) {
- const char path[] = "refseq/servers";
- rc = ReadCfgStr(cfg, path, Servers, sizeof Servers);
- if (rc != 0) {
- if (GetRCState(rc) == rcNotFound)
- { rc = 0; }
- else { DISP_RC2(rc, path, "while reading Node"); }
- }
- else {
- const char path[] = "refseq/volumes";
- rc = ReadCfgStr(cfg, path, Volumes, sizeof Volumes);
- if (rc != 0) {
- if (GetRCState(rc) == rcNotFound)
- { rc = 0; }
- else { DISP_RC2(rc, path, "while reading Node"); }
- }
- }
- if (rc == 0) {
- const char path[] = "refseq/paths";
- rc = ReadCfgStr(cfg, path, Paths, sizeof Paths);
- if (rc != 0) {
- if (GetRCState(rc) == rcNotFound)
- { rc = 0; }
- else { DISP_RC2(rc, path, "while reading Node"); }
- }
- }
- }
- }
- if (!destroy && rc == 0 && dir != NULL && cfg != NULL) {
- if (Servers[0] && Volumes[0])
- {
- char server[SIZE];
- char vol[SIZE];
- char* srv_sep = NULL;
- char *srv_rem = server;
- strcpy(server, Servers);
- /* TODO check for multiple servers/volumes */
- do {
- char *vol_rem = vol;
- char *vol_sep = NULL;
- strcpy(vol, Volumes);
- srv_sep = strchr(server, ':');
- if (srv_sep) {
- srv_rem = srv_sep + 1;
- *srv_sep = '\0';
- }
- do {
- char const* volume = vol_rem;
- vol_sep = strchr(volume, ':');
- if (vol_sep) {
- vol_rem = vol_sep + 1;
- *vol_sep = 0;
- }
- if (construct(&rc, dir, server, volume,
- seqId, buf, blen))
- { break; }
- } while(vol_sep && rc == 0);
- } while(srv_sep && rc == 0);
- }
- else if (Paths[0]) {
- char paths[SIZE];
- char *path_rem = paths;
- char *path_sep = NULL;
- strcpy(paths, Paths);
- do {
- char const* path = path_rem;
- path_sep = strchr(path, ':');
- if (path_sep) {
- path_rem = path_sep + 1;
- *path_sep = 0;
- }
- if (construct(&rc, dir, path, NULL, seqId, buf, blen))
- { break; }
- } while(path_sep && rc == 0);
- }
- }
- if (destroy) {
- DESTRUCT(KConfig, cfg);
- DESTRUCT(KDirectory, dir);
- }
- return rc;
-}
-
-static rc_t DestroyConfig(void) { return privFindRef(NULL, NULL, 0, true); }
-
-static rc_t FindRef(const char* seqId, char* buf, size_t blen)
-{ return privFindRef(seqId, buf, blen, false); }
-
-static int CC bstCmp(const void* item, const BSTNode* n) {
- const char* lhs = item;
- const RefNode* sn = (const RefNode*) n;
-
- assert(lhs && sn);
-
- return strcmp(lhs, sn->seqId);
-}
-
-static int CC bstSort(const BSTNode* item, const BSTNode* n) {
- const RefNode* sn = (const RefNode*) item;
-
- return bstCmp(sn->seqId, n);
-}
-
-static void CC bstPrint(BSTNode* n, void* data) {
- char buf[PATH_MAX + 1] = "";
- bool remote = false;
- const RefNode* sn = (const RefNode*) n;
-
- assert(sn);
-
- remote = sn->row_lenCMP_READwas0;
- if (remote) {
- rc_t rc = FindRef(sn->seqId, buf, sizeof buf);
- if (rc)
- { buf[0] = '\0'; }
- }
-
- OUTMSG(("%s,%s,%s,%s", sn->seqId, sn->name,
- (sn->circular ? "true" : "false"), (remote ? "remote" : "local")));
- if (buf[0])
- { OUTMSG((":%s", buf)); }
- OUTMSG(("\n"));
-}
-
-static void CC bstWhack(BSTNode* n, void* ignore) {
- RefNode* sn = (RefNode*) n;
-
- assert(sn);
-
- free(sn->name);
- sn->name = NULL;
-
- free(sn->seqId);
- sn->seqId = NULL;
-
- free(sn);
-}
#define ALIAS_ALL "a"
#define OPTION_ALL "all"
@@ -391,67 +142,6 @@ const char UsageDefaultName[] = "align-info";
ver_t CC KAppVersion(void) { return ALIGN_INFO_VERS; }
-static rc_t ArgsRelease(Args* self) { return ArgsWhack(self); }
-
-typedef struct Column {
- uint32_t idx;
- const char* name;
-} Column;
-
-static rc_t AddColumn(rc_t rc, const VCursor* curs, Column* col) {
- if (rc == 0) {
- assert(col);
-
- rc = VCursorAddColumn(curs, &col->idx, col->name);
- DISP_RC2(rc, col->name, "while calling VCursorAddColumn");
- }
-
- return rc;
-}
-
-static rc_t CursorRead(rc_t rc, const VCursor* curs, int64_t row_id,
- const Column* col, char* buffer, uint32_t blen, uint32_t expected,
- uint32_t* row_len)
-{
- if (rc == 0) {
- assert(col);
-
- if (blen == 0) {
- assert(buffer == NULL);
- ++blen;
- }
-
- rc = VCursorReadDirect
- (curs, row_id, col->idx, 8, buffer, blen - 1, row_len);
-
- if (rc != 0) {
- if (buffer == NULL &&
- rc == RC(rcVDB, rcCursor, rcReading, rcBuffer, rcInsufficient))
- {
- rc = 0;
- }
- else {
- PLOGERR(klogInt, (klogInt, rc,
- "Error while calling VCursorReadDirect"
- "($(name), row_len=$(row_len))",
- "name=%s,row_len=%d", col->name, *row_len));
- }
- }
- else {
- if (expected > 0 && *row_len != expected) {
- rc = RC(rcExe, rcCursor, rcReading, rcData, rcUnexpected);
- PLOGERR(klogInt, (klogInt, rc,
- "$(name) row_len = $(row_len)",
- "name=%s,row_len=%d", col->name, row_len));
- }
- if (buffer != NULL)
- { buffer[*row_len] = '\0'; }
- }
- }
-
- return rc;
-}
-
static rc_t bam_header(const VDatabase* db) {
rc_t rc = 0;
const char path[] = "BAM_HEADER";
@@ -625,151 +315,141 @@ static rc_t qual_stats(const Params* prm, const VDatabase* db) {
return rc;
}
-static rc_t Valign_info(const VDatabase* db, BSTree* tr) {
- rc_t rc = 0;
- int64_t i = 0;
- int64_t firstId = 0;
- int64_t lastId = 0;
- const char tblName[] = "REFERENCE";
- Column CIRCULAR = { 0, "CIRCULAR" };
- Column CMP_READ = { 0, "CMP_READ" };
- Column NAME = { 0, "NAME" };
- Column SEQ_ID = { 0, "SEQ_ID" };
- const VCursor* curs = NULL;
- const VTable* tbl = NULL;
- if (db == NULL || tr == NULL)
- { return RC(rcExe, rcQuery, rcExecuting, rcParam, rcNull); }
- if (rc == 0) {
- rc = VDatabaseOpenTableRead(db, &tbl, tblName);
- DISP_RC2(rc, tblName, "while calling VDatabaseOpenTableRead");
- }
- if (rc == 0) {
- rc = VTableCreateCursorRead(tbl, &curs);
- DISP_RC2(rc, tblName, "while calling VTableCreateCursorRead");
- }
- rc = AddColumn(rc, curs, &CIRCULAR);
- rc = AddColumn(rc, curs, &CMP_READ);
- rc = AddColumn(rc, curs, &NAME);
- rc = AddColumn(rc, curs, &SEQ_ID);
- if (rc == 0) {
- rc = VCursorOpen(curs);
- DISP_RC2(rc, tblName, "while calling VCursorOpen");
- }
- if (rc == 0) {
- uint64_t count = 0;
- rc = VCursorIdRange(curs, 0, &firstId, &count);
- DISP_RC2(rc, tblName, "while calling VCursorIdRange");
- lastId = firstId + count - 1;
- }
- for (i = firstId; i <= lastId && rc == 0; ++i) {
- uint32_t row_len = 0;
- uint32_t row_lenCMP_READ = 0;
- char circular[8] = "";
- char name[256] = "";
- char seqId[256] = "";
- rc = CursorRead(rc, curs, i, &CMP_READ, NULL, 0, 0, &row_lenCMP_READ);
- rc = CursorRead(rc, curs, i, &CIRCULAR, circular, sizeof circular, 1,
- &row_len);
- rc = CursorRead(rc, curs, i, &SEQ_ID, seqId, sizeof seqId, 0, &row_len);
- rc = CursorRead(rc, curs, i, &NAME, name, sizeof name, 0, &row_len);
- if (rc == 0) {
- RefNode* sn = NULL;
- DBGMSG(DBG_APP, DBG_COND_1, ("SEQ_ID: %s\n", seqId));
- sn = (RefNode*) BSTreeFind(tr, seqId, bstCmp);
- if (sn == NULL) {
- sn = calloc(1, sizeof(*sn));
- if (sn == NULL) {
- rc = RC
- (rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
- break;
- }
- sn->seqId = strdup(seqId);
- if (sn->seqId == NULL) {
- bstWhack((BSTNode*) sn, NULL);
- sn = NULL;
- rc = RC
- (rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
- break;
- }
- sn->name = strdup(name);
- if (sn->name == NULL) {
- bstWhack((BSTNode*) sn, NULL);
- sn = NULL;
- rc = RC
- (rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
- break;
- }
- sn->circular = circular[0];
- sn->row_lenCMP_READwas0 = (row_lenCMP_READ == 0);
- BSTreeInsert(tr, (BSTNode*)sn, bstSort);
- }
- else {
- if (row_lenCMP_READ == 0)
- { sn->row_lenCMP_READwas0 = true; }
- if (strcmp(sn->name, name) || sn->circular != circular[0]) {
- rc = RC(rcExe, rcCursor, rcReading, rcData, rcInconsistent);
- PLOGERR(klogInt, (klogInt, rc,
- "while reading row $(row_id)", "row_id=%d", i));
- }
- }
- }
- }
- DESTRUCT(VTable, tbl);
- DESTRUCT(VCursor, curs);
- return rc;
-}
-
static rc_t align_info(const Params* prm) {
rc_t rc = 0;
+
const VDatabase* db = NULL;
const VDBManager* mgr = NULL;
+ const KDBManager *kmgr = NULL;
VSchema* schema = NULL;
+ bool is_db = false;
+
if (prm == NULL)
{ return RC(rcExe, rcQuery, rcExecuting, rcParam, rcNull); }
+
if (rc == 0) {
rc = VDBManagerMakeRead(&mgr, NULL);
DISP_RC(rc, "while calling VDBManagerMakeRead");
}
+
+ if (rc == 0) {
+ rc = VDBManagerOpenKDBManagerRead(mgr, &kmgr);
+ DISP_RC(rc, "while calling VDBManagerOpenKDBManagerRead");
+ }
+
if (rc == 0) {
rc = VDBManagerMakeSRASchema(mgr, &schema);
DISP_RC(rc, "while calling VDBManagerMakeSRASchema");
}
+
if (rc == 0) {
/* const char path[] = "/panfs/pan1/trace_work/scratch/XXX000013"; */
rc = VDBManagerOpenDBRead(mgr, &db, schema, prm->dbPath);
- if (rc)
- { PLOGERR(klogErr,(klogErr, rc, "$(path)", "path=%s", prm->dbPath)); }
+ if (rc == 0) {
+ is_db = true;
+ }
+ else if (rc == SILENT_RC(rcDB, rcMgr, rcOpening, rcDatabase, rcIncorrect)) {
+ PLOGMSG(klogWarn, (klogWarn,
+ "'$(path)' is not a database", "path=%s", prm->dbPath));
+ rc = 0;
+ }
+ else {
+ PLOGERR(klogErr,
+ (klogErr, rc, "$(path)", "path=%s", prm->dbPath));
+ }
}
- if (rc == 0) {
- if (prm->paramRef) {
- BSTree tr;
- BSTreeInit(&tr);
- rc = Valign_info(db, &tr);
- if (rc == 0) {
- BSTreeForEach(&tr, false, bstPrint, NULL);
- OUTMSG(("\n"));
+
+ if (is_db) {
+ if (rc == 0) {
+ if (prm->paramRef) {
+ const VDBDependencies* dep = NULL;
+ uint32_t count = 0;
+ int i = 0;
+ rc = VDatabaseListDependencies(db, &dep, false);
+ DISP_RC2(rc, prm->dbPath,
+ "while calling VDatabaseListDependencies");
+ if (rc == 0) {
+ rc = VDBDependenciesCount(dep, &count);
+ DISP_RC2(rc, prm->dbPath,
+ "while calling VDBDependenciesCount");
+ }
+ for (i = 0; i < count && rc == 0; ++i) {
+ bool circular = false;
+ const char* name = NULL;
+ const char* path = NULL;
+ const char* remote = NULL;
+ bool local = false;
+ const char* seqId = NULL;
+ rc = VDBDependenciesCircular(dep, &circular, i);
+ if (rc != 0) {
+ DISP_RC2(rc, prm->dbPath,
+ "while calling VDBDependenciesCircular");
+ break;
+ }
+ rc = VDBDependenciesName(dep, &name, i);
+ if (rc != 0) {
+ DISP_RC2(rc, prm->dbPath,
+ "while calling VDBDependenciesName");
+ break;
+ }
+ rc = VDBDependenciesPath(dep, &path, i);
+ if (rc != 0) {
+ DISP_RC2(rc, prm->dbPath,
+ "while calling VDBDependenciesPath");
+ break;
+ }
+ rc = VDBDependenciesLocal(dep, &local, i);
+ if (rc != 0) {
+ DISP_RC2(rc, prm->dbPath,
+ "while calling VDBDependenciesLocal");
+ break;
+ }
+ rc = VDBDependenciesSeqId(dep, &seqId, i);
+ if (rc != 0) {
+ DISP_RC2(rc, prm->dbPath,
+ "while calling VDBDependenciesSeqId");
+ break;
+ }
+ rc = VDBDependenciesPathRemote(dep, &remote, i);
+ if (rc != 0) {
+ DISP_RC2(rc, prm->dbPath,
+ "while calling VDBDependenciesRemote");
+ break;
+ }
+ OUTMSG(("%s,%s,%s,%s", seqId, name,
+ (circular ? "true" : "false"),
+ (local ? "local" : "remote")));
+ if (path && path[0]) {
+ OUTMSG((":%s", path));
+ }
+ else if (remote && remote[0]) {
+ OUTMSG(("::%s", remote));
+ }
+ OUTMSG(("\n"));
+ }
+ DESTRUCT(VDBDependencies, dep);
}
- BSTreeWhack(&tr, bstWhack, NULL);
- {
- rc_t rc2 = DestroyConfig();
- if (rc2 != 0 && rc == 0)
- { rc = rc2; }
+
+ if (prm->paramBamHeader) {
+ rc_t rc3 = bam_header(db);
+ if (rc3 != 0 && rc == 0)
+ { rc = rc3; }
+ }
+
+ if (prm->paramQuality) {
+ rc_t rc3 = qual_stats(prm, db);
+ if (rc3 != 0 && rc == 0)
+ { rc = rc3; }
}
}
- if (prm->paramBamHeader) {
- rc_t rc3 = bam_header(db);
- if (rc3 != 0 && rc == 0)
- { rc = rc3; }
- }
- if (prm->paramQuality) {
- rc_t rc3 = qual_stats(prm, db);
- if (rc3 != 0 && rc == 0)
- { rc = rc3; }
- }
+
}
+
DESTRUCT(VSchema, schema);
+ DESTRUCT(KDBManager, kmgr);
DESTRUCT(VDBManager, mgr);
DESTRUCT(VDatabase, db);
+
return rc;
}
@@ -795,8 +475,9 @@ rc_t CC KMain(int argc, char* argv[]) {
break;
}
if (pcount < 1) {
- rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
MiniUsage(args);
+ DESTRUCT(Args, args);
+ exit(1);
break;
}
if (pcount > 1) {
diff --git a/tools/align-info/align-info.vers b/tools/align-info/align-info.vers
index 04b10b4..f90b1af 100644
--- a/tools/align-info/align-info.vers
+++ b/tools/align-info/align-info.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/align-info/align-info.vers.h b/tools/align-info/align-info.vers.h
deleted file mode 100644
index 76b6f33..0000000
--- a/tools/align-info/align-info.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ALIGN_INFO_VERS 0x02010007
diff --git a/tools/bam-loader/Globals.h b/tools/bam-loader/Globals.h
new file mode 100644
index 0000000..50a0d9c
--- /dev/null
+++ b/tools/bam-loader/Globals.h
@@ -0,0 +1,90 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_GLOBALS_H_
+#define BAM_LOAD_GLOBALS_H_ 1
+
+enum LoaderModes {
+ mode_Archive,
+ mode_Analysis
+};
+
+typedef struct globals
+{
+ char const *inpath;
+ char const *outpath;
+ char const *tmpfs;
+
+ struct KFile *noMatchLog;
+
+ char const *schemaPath;
+ char const *schemaIncludePath;
+
+ char const *refXRefPath;
+
+ char const *QualQuantizer;
+
+ char const *refFilter;
+
+ char const** refFiles; /* NULL-terminated array pointing to argv */
+
+ char const *headerText;
+
+ uint64_t maxAlignCount;
+ size_t cache_size;
+
+ unsigned errCount;
+ unsigned maxErrCount;
+ unsigned maxWarnCount_NoMatch;
+ unsigned maxWarnCount_DupConflict;
+ unsigned pid;
+ unsigned minMatchCount; /* minimum number of matches to count as an alignment */
+ int minMapQual;
+ enum LoaderModes mode;
+ uint32_t maxSeqLen;
+ bool omit_aligned_reads;
+ bool omit_reference_reads;
+ bool no_real_output;
+ bool expectUnsorted;
+ bool noVerifyReferences;
+ bool onlyVerifyReferences;
+ bool useQUAL;
+ bool limit2config;
+ bool editAlignedQual;
+ bool keepMismatchQual;
+ bool acceptBadDups; /* accept spots with inconsistent PCR duplicate flags */
+ bool acceptNoMatch; /* accept without any matching bases */
+ bool noSpotAssembly;
+ uint8_t alignedQualValue;
+ bool allUnaligned; /* treat all records as unaligned */
+ bool noColorSpace;
+ bool noSecondary;
+ bool hasTI;
+ bool acceptHardClip;
+} Globals;
+
+extern Globals G;
+#endif
diff --git a/tools/bam-loader/KFileHelper.c b/tools/bam-loader/KFileHelper.c
new file mode 100644
index 0000000..b9c65c0
--- /dev/null
+++ b/tools/bam-loader/KFileHelper.c
@@ -0,0 +1,142 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "KFileHelper.h"
+#include <string.h>
+
+rc_t BufferedKFileGets(KDataBuffer *buf, unsigned offset, unsigned *nread, BufferedKFile *strm) {
+ unsigned i;
+ unsigned n;
+ int ch;
+ rc_t rc;
+
+ do {
+ if (strm->cur != strm->inbuf) {
+ ch = strm->buf[strm->cur];
+
+ if (ch == '\r' || ch == '\n')
+ ++strm->cur;
+ else
+ break;
+ }
+ else {
+ size_t numread;
+
+ rc = KFileRead(strm->kfp, strm->fpos, strm->buf, sizeof(strm->buf), &numread);
+ if (rc) return -1;
+
+ strm->cur = 0;
+ strm->inbuf = numread;
+ strm->fpos += numread;
+ if (numread == 0) {
+ *nread = 0;
+ return 0;
+ }
+ }
+ } while (1);
+
+ for (n = 0, i = offset; ; ++i, ++n) {
+ if (strm->cur != strm->inbuf) {
+ ch = strm->buf[strm->cur++];
+ }
+ else {
+ size_t numread;
+
+ rc = KFileRead(strm->kfp, strm->fpos, strm->buf, sizeof(strm->buf), &numread);
+ if (rc) return rc;
+
+ strm->cur = 0;
+ strm->inbuf = numread;
+ if (numread == 0) break;
+ strm->fpos += numread;
+ ch = strm->buf[strm->cur++];
+ }
+ if (ch == '\r' || ch == '\n') break;
+ if (i >= buf->elem_count) {
+ rc = KDataBufferResize(buf, buf->elem_count ? buf->elem_count * 2 : 1024);
+ if (rc) return rc;
+ }
+ ((char *)buf->base)[i] = ch;
+ }
+ *nread = n;
+ return 0;
+}
+
+rc_t BufferedKFileOpen(const KDirectory *directory, BufferedKFile *rslt, const char *fileName, ...) {
+ va_list va;
+ rc_t rc;
+
+ memset(rslt, 0, sizeof(rslt) - sizeof(rslt->buf));
+
+ va_start(va, fileName);
+ rc = KDirectoryVOpenFileRead(directory, &rslt->kfp, fileName, va);
+ va_end(va);
+
+ return rc;
+}
+
+rc_t BufferedKFileClose(BufferedKFile *strm) {
+ return KFileRelease(strm->kfp);
+}
+
+rc_t LoadFile(KDataBuffer *dst, uint64_t *lineCount, const KDirectory *dir, const char *fileName, ...) {
+ BufferedKFile strm;
+ rc_t rc;
+ unsigned line = 0;
+
+ memset(&strm, 0, sizeof(strm) - sizeof(strm.buf));
+ {
+ va_list va;
+
+ va_start(va, fileName);
+ rc = KDirectoryVOpenFileRead(dir, &strm.kfp, fileName, va);
+ va_end(va);
+ }
+ if (rc == 0) {
+ unsigned offset = 0;
+ unsigned i;
+
+ while ((rc = BufferedKFileGets(dst, offset, &i, &strm)) == 0 && i) {
+ offset += i;
+ if (offset + 1 >= dst->elem_count) {
+ rc = KDataBufferResize(dst, offset + 1);
+ if (rc)
+ break;
+ }
+ ((char *)dst->base)[offset++] = '\0';
+ ++line;
+ }
+ BufferedKFileClose(&strm);
+ if (rc == 0)
+ rc = KDataBufferResize(dst, offset);
+ }
+ if (rc != 0) {
+ KDataBufferResize(dst, 0);
+ line = 0;
+ }
+ if (lineCount) *lineCount = line;
+ return rc;
+}
diff --git a/tools/bam-loader/KFileHelper.h b/tools/bam-loader/KFileHelper.h
new file mode 100644
index 0000000..4551952
--- /dev/null
+++ b/tools/bam-loader/KFileHelper.h
@@ -0,0 +1,48 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_KFILEHELPER_H_
+#define BAM_LOAD_KFILEHELPER_H_ 1
+#include <klib/data-buffer.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+typedef struct BufferedKFile BufferedKFile;
+
+#define KFILE_BUF_SIZE (4096)
+struct BufferedKFile {
+ uint64_t fpos;
+ const KFile *kfp;
+ unsigned inbuf;
+ unsigned cur;
+ char buf[KFILE_BUF_SIZE];
+};
+
+rc_t BufferedKFileGets(KDataBuffer *buf, unsigned offset, unsigned *nread, BufferedKFile *strm);
+rc_t BufferedKFileOpen(const KDirectory *directory, BufferedKFile *rslt, const char *fileName, ...);
+rc_t BufferedKFileClose(BufferedKFile *strm);
+rc_t LoadFile(KDataBuffer *dst, uint64_t *lineCount, const KDirectory *dir, const char *fileName, ...);
+#endif
diff --git a/tools/bam-loader/KVPFile.c b/tools/bam-loader/KVPFile.c
new file mode 100644
index 0000000..c9d60cd
--- /dev/null
+++ b/tools/bam-loader/KVPFile.c
@@ -0,0 +1,355 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "KVPFile.h"
+
+#include <kfs/file.h>
+#include <klib/rc.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define USE_KDB_BTREE 1
+
+#if USE_KDB_BTREE
+#include <kdb/btree.h>
+#else
+#include "hashtable.h"
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#endif
+
+
+
+#if USE_KDB_BTREE
+
+/* going to make an index with:
+ * a) backing file
+ * b) page size is fixed at 32K, otherwise the page size would have to be stored somewhere
+ * c) page cache - need cache limit in bytes
+ * d) 2 chunked value streams - need key chunking and value chunking
+ * e) B-Tree-ish index, requiring a comparison function. this interface uses opaque keys.
+ * the "matched-count" parameter is useful for trie traversal, but this will be built-in
+ */
+rc_t KVPFileMake ( KVPFile **rslt, KFile *file, size_t climit,
+ size_t kchunk_size, size_t vchunk_size,
+ size_t min_ksize, size_t max_ksize, size_t min_vsize, size_t max_vsize,
+ KVPFileCompareFunc cmp )
+{
+ return KBTreeMakeUpdate ( ( KBTree** ) rslt, file, climit, false, kbtOpaqueKey,
+ kchunk_size, vchunk_size, min_ksize, max_ksize, min_vsize, max_vsize, cmp );
+}
+
+
+/* this whacker works fine
+ */
+rc_t KVPFileWhack ( KVPFile *xself, bool commit )
+{
+ KBTree *self = ( KBTree* ) xself;
+
+ rc_t rc = 0;
+
+ if ( self != NULL )
+ {
+ /* drop the backing file unless commiting */
+ if ( ! commit )
+ rc = KBTreeDropBacking ( self );
+
+ /* drop the b-tree */
+ rc = KBTreeRelease ( self );
+ }
+
+ return rc;
+}
+
+
+/* whacker */
+void KVPValueWhack ( KVPValue *self )
+{
+ KBTreeValueWhack ( self );
+}
+
+/* return the pointer to thingie */
+rc_t KVPValueAccessRead ( const KVPValue *self, const void **mem, size_t *bytes )
+{
+ return KBTreeValueAccessRead ( self, mem, bytes );
+}
+
+rc_t KVPValueAccessUpdate ( KVPValue *self, void **mem, size_t *bytes )
+{
+ return KBTreeValueAccessUpdate ( self, mem, bytes );
+}
+
+
+/* find will not modify the index in any way
+ * returns a pointer into a page, meaning that the values cannot exceed 32K in size
+ * this is done
+ */
+rc_t KVPFileFind ( const KVPFile *self, KVPValue *val, const void *key, size_t ksize )
+{
+ return KBTreeFind ( ( const KBTree* ) self, val, key, ksize );
+}
+
+
+
+/* find or insert will return an existing or create a new entry
+ * note that the new entry is initially zeroed
+ */
+rc_t KVPFileFindOrInsert ( KVPFile *self, KVPValue *val,
+ bool *was_inserted, size_t alloc_size,
+ const void *key, size_t ksize )
+{
+ return KBTreeEntry ( ( KBTree* ) self, val, was_inserted, alloc_size, key, ksize );
+}
+
+rc_t KVPFileForEach ( const KVPFile *self,
+ void ( CC * f )( const void *key, size_t ksize, KVPValue *val, void *ctx ),
+ void *ctx )
+{
+ return KBTreeForEach((KBTree *)self, 0, f, ctx);
+}
+
+
+#else
+typedef struct KTempMMap {
+ void *base;
+ size_t sz;
+ int fd;
+ unsigned elemsize;
+ unsigned fileNo;
+} KTempMMap;
+
+static rc_t KTempMMapMake(KTempMMap *rslt, size_t initSize, size_t elemSize)
+{
+ char fname[4096];
+
+ memset(rslt, 0, sizeof(*rslt));
+ rslt->elemsize = elemSize;
+
+ sprintf(fname, "/tmp/kvp.%u.XXXXXX", getpid());
+ rslt->fd = mkstemp(fname);
+ if (rslt->fd < 0) {
+ perror(fname);
+ return RC(rcApp, rcFile, rcCreating, rcFile, rcUnknown);
+ }
+ unlink(fname);
+
+ if (ftruncate(rslt->fd, initSize * elemSize) != 0)
+ return RC(rcApp, rcFile, rcResizing, rcFile, rcUnknown);
+
+ rslt->sz = initSize;
+
+ rslt->base = mmap(0, initSize * elemSize, PROT_READ | PROT_WRITE, MAP_SHARED, rslt->fd, 0);
+ if (rslt->base == MAP_FAILED)
+ return RC(rcApp, rcMemMap, rcCreating, rcMemory, rcInsufficient);
+
+ return 0;
+}
+
+static rc_t KTempMMapWhack(KTempMMap *self)
+{
+ close(self->fd);
+ madvise(self->base, self->sz, MADV_DONTNEED);
+ munmap(self->base, self->sz);
+ return 0;
+}
+
+static void *KTempMMapPointer(KTempMMap *self, size_t offset, size_t count)
+{
+ void *temp;
+ size_t newsz;
+
+ if (offset + count <= self->sz)
+ return &((uint8_t *)self->base)[offset * self->elemsize];
+
+ newsz = self->sz;
+ while (newsz < offset + count)
+ newsz <<= 1;
+
+ if (ftruncate(self->fd, newsz * self->elemsize) != 0)
+ return NULL;
+
+ temp = mmap(0, newsz * self->elemsize, PROT_READ | PROT_WRITE, MAP_SHARED, self->fd, 0);
+ if (temp == MAP_FAILED)
+ return NULL;
+
+ munmap(self->base, self->sz);
+ self->base = temp;
+ self->sz = newsz;
+
+ return &((uint8_t *)self->base)[offset * self->elemsize];
+}
+
+typedef struct key_t {
+ uint8_t len;
+ char key[255];
+} my_key_t;
+
+struct KVPFile {
+ HashTable *ht;
+ size_t next_obj;
+ KTempMMap keys;
+ KTempMMap values;
+};
+
+typedef struct KVPValueImpl KVPValueImpl;
+struct KVPValueImpl
+{
+ KVPFile * file;
+ size_t offset;
+ size_t size;
+};
+
+static int KeyComp(const void *id, const void *key, uint32_t len, void *ctx)
+{
+ KVPFile *self = ctx;
+ const my_key_t *test = KTempMMapPointer(&self->keys, (intptr_t)id, 1);
+ int r = memcmp(test->key, key, test->len < len ? test->len : len);
+ if (r == 0)
+ r = test->len - len;
+ return r;
+}
+
+rc_t KVPFileMake(KVPFile **rslt,
+ KFile *file,
+ size_t climit,
+ size_t kchunk_size, size_t vchunk_size,
+ size_t min_ksize, size_t max_ksize,
+ size_t min_vsize, size_t max_vsize,
+ KVPFileCompareFunc cmp
+ )
+{
+ rc_t rc;
+ KVPFile *self = calloc(1, sizeof(*self));
+
+ if (self == NULL)
+ return RC(rcApp, rcMemMap, rcAllocating, rcMemory, rcExhausted);
+
+ rc = KTempMMapMake(&self->keys, 256, sizeof(my_key_t));
+ if (rc == 0) {
+ rc = KTempMMapMake(&self->values, 256, max_vsize);
+ if (rc == 0) {
+ rc = HashTableMake(&self->ht, 256, KeyComp, self);
+ if (rc == 0) {
+ *rslt = self;
+ return 0;
+ }
+ KTempMMapWhack(&self->values);
+ }
+ KTempMMapWhack(&self->keys);
+ }
+ free(self);
+ return rc;
+}
+
+rc_t KVPFileWhack(KVPFile *self, bool commit)
+{
+ if (self) {
+ KTempMMapWhack(&self->values);
+ KTempMMapWhack(&self->keys);
+ HashTableWhack(self->ht, 0, 0);
+ free(self);
+ }
+ return 0;
+}
+
+rc_t KVPFileFind(const KVPFile *self, KVPValue *xval, const void *key, size_t ksize)
+{
+ KVPValueImpl *val = ( KVPValueImpl* ) xval;
+ const HashTableIterator iter = HashTableLookup(self->ht, key, ksize);
+ if (HashTableIteratorHasValue(&iter)) {
+ val->file = (void *)self;
+ val->offset = (intptr_t)HashTableIteratorGetValue(&iter);
+ val->size = 1;
+ return 0;
+ }
+ return RC(rcApp, rcMemMap, rcReading, rcId, rcNotFound);
+}
+
+rc_t KVPFileFindOrInsert(KVPFile *self, KVPValue *xval,
+ bool *was_inserted, size_t alloc_size,
+ const void *key, size_t ksize
+ )
+{
+ KVPValueImpl *val = ( KVPValueImpl* ) xval;
+ HashTableIterator iter = HashTableLookup(self->ht, key, ksize);
+
+ if (HashTableIteratorHasValue(&iter)) {
+ val->file = (void *)self;
+ val->offset = (intptr_t)HashTableIteratorGetValue(&iter);
+ val->size = 1;
+ *was_inserted = false;
+ return 0;
+ }
+ else {
+ size_t new_id = self->next_obj++;
+ my_key_t *new_key = KTempMMapPointer(&self->keys, new_id, 1);
+
+ new_key->len = ksize;
+ memcpy(new_key->key, key, ksize);
+
+ *was_inserted = true;
+ val->file = (void *)self;
+ val->offset = new_id;
+ val->size = 1;
+ HashTableIteratorSetValue(&iter, (void *)(val->offset));
+ }
+ return 0;
+}
+
+static rc_t KVPValueAccess(const KVPValueImpl *value, void **mem, size_t *bytes)
+{
+ KVPFile *self = value->file;
+ void *temp = KTempMMapPointer(&self->values, value->offset, value->size);
+
+ if (temp != NULL) {
+ *bytes = self->values.elemsize * value->size;
+ *mem = temp;
+ return 0;
+ }
+ *bytes = 0;
+ *mem = NULL;
+ return RC(rcApp, rcMemMap, rcReading, rcMemory, rcNotFound);
+}
+
+rc_t KVPValueAccessRead(const KVPValue *self, const void **mem, size_t *bytes)
+{
+ return KVPValueAccess((const KVPValueImpl*)self, (void **)mem, bytes);
+}
+
+rc_t KVPValueAccessUpdate(KVPValue *self, void **mem, size_t *bytes)
+{
+ return KVPValueAccess((KVPValueImpl*)self, mem, bytes);
+}
+
+void KVPValueWhack(KVPValue *self)
+{
+}
+
+#endif /* USE_KDB_BTREE */
diff --git a/tools/bam-loader/KVPFile.h b/tools/bam-loader/KVPFile.h
new file mode 100644
index 0000000..01de157
--- /dev/null
+++ b/tools/bam-loader/KVPFile.h
@@ -0,0 +1,164 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_KVPFile_
+#define _h_KVPFile_
+
+#ifndef _h_kdb_btree_
+#include <kdb/btree.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* this can be made to work as we go forward
+ */
+typedef struct KVPFile KVPFile;
+
+
+/* generic comparison function
+ * size_t indicates bytes
+ */
+typedef KBTreeCompareFunc KVPFileCompareFunc;
+
+
+/* going to make an index with:
+ * a) backing file
+ * b) page size is fixed at 32K, otherwise the page size would have to be stored somewhere
+ * c) page cache - need cache limit in bytes
+ * d) 2 chunked value streams - need key chunking and value chunking
+ * e) B-Tree-ish index, requiring a comparison function. this interface uses opaque keys.
+ * the "matched-count" parameter is useful for trie traversal, but this will be built-in
+ *
+ * "rslt" [ OUT ] - return of Ken's object
+ *
+ * "file" [ IN ] - open file with read/write permissions.
+ * NB - a reference will be attached to this file, so you still own it
+ *
+ * "climit" [ IN ] - cache limit in bytes. the internal page cache will
+ * retain UP TO ( but not exceeding ) the limit specified. for 32K pages,
+ * this means than the byte values 0..0x7FFF will result in NO CACHE.
+ * internally, this limit is converted to a page count by simple division,
+ * i.e. cpage-limit = climit / PGSIZE.
+ *
+ * "kchunk_size" [ IN ] and "vchunk_size" [ IN ] - the "chunking" ( alignment )
+ * factor for storing keys and values, respectively. rounded up to the nearest
+ * power of 2 that will hold the bytes specified.
+ *
+ * "min_ksize" [ IN ] and "max_ksize" [ IN ] - specifies the allowed key sizes. if
+ * unknown, a min of 1 and a max of ~ ( size_t ) 0 will allow for any size. if fixed,
+ * min_ksize == max_ksize will indicate this, and the size will be used exactly as
+ * chunking factor ( see "kchunk_size" above ).
+ *
+ * "min_vsize" [ IN ] and "max_vsize" [ IN ] - specifies allowed value sizes. see above.
+ *
+ * "cmp" [ IN ] - comparison callback function for opaque keys. later, we'll want to
+ * make use of key type knowledge to improve traversal ( callbacks are expensive ), but
+ * for now, we can treat them as opaque.
+ */
+rc_t KVPFileMake ( KVPFile **rslt, struct KFile *file, size_t climit,
+ size_t kchunk_size, size_t vchunk_size,
+ size_t min_ksize, size_t max_ksize, size_t min_vsize, size_t max_vsize,
+ KVPFileCompareFunc cmp );
+
+
+
+/* this whacker works fine
+ *
+ * "commit" [ IN ] - if false, tells the underlying pagefile
+ * to forget its backing before whacking the cache.
+ */
+rc_t KVPFileWhack ( KVPFile *self, bool commit );
+
+
+/* results point directly into pages, and thus require a reference
+ * I'm going to invent a structure to use and some functions - the
+ * structure itself may change, but we should be able to make it work
+ *
+ * it will be an defined structure, although it may be defined simply as
+ * an array of 3 size_t to make it opaque. if it were made an allocation,
+ * then we'd have to have a special allocator in order to keep the noise
+ * down. maybe that's the way to go, but it means more code. for now,...
+ */
+typedef struct KBTreeValue KVPValue;
+
+
+/* whacker */
+void KVPValueWhack ( KVPValue *self );
+
+/* return the pointer to thingie */
+rc_t KVPValueAccessRead ( const KVPValue *self, const void **mem, size_t *bytes );
+rc_t KVPValueAccessUpdate ( KVPValue *self, void **mem, size_t *bytes );
+
+
+/* find will not modify the index in any way
+ * returns a pointer into a page, meaning that the values cannot exceed 32K in size
+ * this is done
+ *
+ * "val" [ OUT ] - pointer to an uninitialized block that will contain
+ * information on how to access data within a page. note that the value
+ * is "live", and if accessed for update will cause the page to be modified.
+ * it is not clear whether this is desired or side-effect behavior, so I'm
+ * leaving it alone for now.
+ *
+ * "key" [ IN ] and "ksize" [ IN ] - opaque key description
+ */
+rc_t KVPFileFind ( const KVPFile *self, KVPValue *val, const void *key, size_t ksize );
+
+
+
+/* find or insert will return an existing or create a new entry
+ * note that the new entry is initially zeroed
+ *
+ * "val" [ OUT ] - pointer to uninitialized block that will contain value data.
+ * since the intention is to modify the value, access to val will most certainly
+ * be via "KVPValueAccessUpdate" which will dirty the page regardless.
+ *
+ * "was_inserted" [ OUT ] - if true, the returned value was the result of an
+ * insertion and can be guaranteed to be all 0 bits. otherwise, the returned
+ * value will be whatever was there previously.
+ *
+ * "alloc_size" [ IN ] - the number of value bytes to allocate upon insertion,
+ * i.e. if the key was not found. this value must agree with the limits specified
+ * in Make.
+ *
+ * "key" [ IN ] and "ksize" [ IN ] - opaque key description
+ */
+rc_t KVPFileFindOrInsert ( KVPFile *self, KVPValue *val,
+ bool *was_inserted, size_t alloc_size,
+ const void *key, size_t ksize );
+
+rc_t KVPFileForEach ( const KVPFile *self,
+ void ( CC * f )( const void *key, size_t ksize, KVPValue *val, void *ctx ),
+ void *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_KVPFile_ */
diff --git a/tools/bam-loader/Makefile b/tools/bam-loader/Makefile
new file mode 100644
index 0000000..eb098de
--- /dev/null
+++ b/tools/bam-loader/Makefile
@@ -0,0 +1,136 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/bam-loader
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+ bam-load
+
+TEST_TOOLS = \
+ wb-test-bam-loader
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+RUNTESTS_OVERRIDE=1
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifeq (win,$(OS))
+all std:
+ @ echo "not building bam-load under Windows"
+else
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/std
+endif
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+$(TEST_TOOLS): makedirs
+ @ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS) $(TEST_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+ $(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+
+#-------------------------------------------------------------------------------
+# bam-load.2.*
+#
+BAMLOAD_SRC = \
+ bam-loader \
+ alignment-writer \
+ reference-writer \
+ sequence-writer \
+ loader-imp
+
+BAMLOAD_OBJ = \
+ $(addsuffix .$(OBJX),$(BAMLOAD_SRC))
+
+BAMLOAD_LIB = \
+ -lkapp \
+ -dwaxf \
+ -dwsraxf \
+ -dwvxf \
+ -lload \
+ -lncbi-bam \
+ -lalign-writer \
+ -lwvdb \
+ -lwkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lksrch \
+ -lkproc \
+ -lkq \
+ -lklib \
+ -lm \
+ -lz
+
+$(BINDIR)/bam-load: $(BAMLOAD_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(BAMLOAD_LIB)
+
+bam-load_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) bam-load $(BAMLOAD_OBJ)
diff --git a/tools/bam-loader/alignment-writer.c b/tools/bam-loader/alignment-writer.c
new file mode 100644
index 0000000..fe84dc8
--- /dev/null
+++ b/tools/bam-loader/alignment-writer.c
@@ -0,0 +1,176 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <sysalloc.h>
+#include <klib/out.h>
+
+#include <vdb/vdb-priv.h>
+
+#include "alignment-writer.h"
+#include "Globals.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+enum e_tables {
+ tblPrimary,
+ tblSecondary,
+ tblN
+};
+
+struct s_alignment {
+ VDatabase *db;
+ TableWriterAlgn const *tbl[tblN];
+ int64_t rowId;
+ int st;
+};
+
+Alignment *AlignmentMake(VDatabase *db) {
+ Alignment *self = calloc(1, sizeof(*self));
+
+ if (self) {
+ self->db = db;
+ VDatabaseAddRef(self->db);
+ }
+ return self;
+}
+
+static rc_t SetColumnDefaults(TableWriterAlgn const *tbl)
+{
+ return 0;
+}
+
+static rc_t WritePrimaryRecord(Alignment *const self, AlignmentRecord *const data)
+{
+ if (self->tbl[tblPrimary] == NULL) {
+ rc_t rc = TableWriterAlgn_Make(&self->tbl[tblPrimary], self->db,
+ ewalgn_tabletype_PrimaryAlignment,
+ ewalgn_co_TMP_KEY_ID +
+ (G.expectUnsorted ? ewalgn_co_unsorted : 0));
+ if (rc)
+ return rc;
+ rc = SetColumnDefaults(self->tbl[tblPrimary]);
+ if (rc)
+ return rc;
+ }
+ return TableWriterAlgn_Write(self->tbl[tblPrimary], &data->data, &data->alignId);
+}
+
+static rc_t WriteSecondaryRecord(Alignment *const self, AlignmentRecord *const data)
+{
+ if (self->tbl[tblSecondary] == NULL) {
+ rc_t rc = TableWriterAlgn_Make(&self->tbl[tblSecondary], self->db,
+ ewalgn_tabletype_SecondaryAlignment,
+ ewalgn_co_TMP_KEY_ID +
+ (G.expectUnsorted ? ewalgn_co_unsorted : 0));
+ if (rc)
+ return rc;
+ rc = SetColumnDefaults(self->tbl[tblSecondary]);
+ if (rc)
+ return rc;
+ }
+#if 1
+ /* try to make consistent with cg-load */
+ if (data->mate_ref_pos == 0) {
+ data->data.mate_ref_orientation.elements = 0;
+ }
+#endif
+ return TableWriterAlgn_Write(self->tbl[tblSecondary], &data->data, &data->alignId);
+}
+
+rc_t AlignmentWriteRecord(Alignment *const self, AlignmentRecord *const data)
+{
+ return data->isPrimary ? WritePrimaryRecord(self, data) : WriteSecondaryRecord(self, data);
+}
+
+rc_t AlignmentStartUpdatingSpotIds(Alignment *const self)
+{
+ return 0;
+}
+
+rc_t AlignmentGetSpotKey(Alignment *const self, uint64_t * keyId)
+{
+ rc_t rc;
+
+ switch (self->st) {
+ case 0:
+ rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblPrimary]);
+ if (rc)
+ break;
+ self->rowId = 0;
+ ++self->st;
+ case 1:
+ rc = TableWriterAlgn_TmpKey(self->tbl[tblPrimary], ++self->rowId, keyId);
+ if (rc == 0)
+ break;
+ ++self->st;
+ if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow || self->tbl[tblSecondary] == NULL)
+ break;
+ case 2:
+ rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblSecondary]);
+ if (rc)
+ break;
+ self->rowId = 0;
+ ++self->st;
+ case 3:
+ rc = TableWriterAlgn_TmpKey(self->tbl[tblSecondary], ++self->rowId, keyId);
+ if (rc == 0)
+ break;
+ if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow)
+ break;
+ ++self->st;
+ break;
+ default:
+ rc = RC(rcAlign, rcTable, rcUpdating, rcError, rcIgnored);
+ break;
+ }
+ return rc;
+}
+
+rc_t AlignmentWriteSpotId(Alignment * const self, int64_t const spotId)
+{
+ switch (self->st) {
+ case 1:
+ return TableWriterAlgn_Write_SpotId(self->tbl[tblPrimary], self->rowId, spotId);
+ case 3:
+ return TableWriterAlgn_Write_SpotId(self->tbl[tblSecondary], self->rowId, spotId);
+ default:
+ return RC(rcAlign, rcTable, rcUpdating, rcSelf, rcInconsistent);
+ }
+}
+
+rc_t AlignmentWhack(Alignment * const self, bool const commit)
+{
+ rc_t const rc = TableWriterAlgn_Whack(self->tbl[tblPrimary], commit, NULL);
+ rc_t const rc2 = self->tbl[tblSecondary] ? TableWriterAlgn_Whack(self->tbl[tblSecondary], commit | (rc == 0), NULL) : 0;
+
+ VDatabaseRelease(self->db);
+ free(self);
+ return rc ? rc : rc2;
+}
diff --git a/tools/bam-loader/alignment-writer.h b/tools/bam-loader/alignment-writer.h
new file mode 100644
index 0000000..bd8dfed
--- /dev/null
+++ b/tools/bam-loader/alignment-writer.h
@@ -0,0 +1,95 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_ALIGNMENT_WRITER_H_
+#define BAM_LOAD_ALIGNMENT_WRITER_H_ 1
+
+#include <klib/text.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <insdc/insdc.h>
+
+#include <align/writer-alignment.h>
+
+typedef struct s_alignment Alignment;
+typedef struct AlignmentRecord AlignmentRecord;
+
+struct AlignmentRecord {
+ TableWriterAlgnData data;
+ int64_t alignId;
+ bool isPrimary;
+
+ INSDC_coord_one read_id;
+ int64_t ref_id;
+ INSDC_coord_zero ref_start;
+ uint64_t global_ref_start;
+ bool ref_orientation;
+ uint32_t mapq;
+ uint64_t tmp_key_id;
+
+ INSDC_coord_zero read_start;
+ INSDC_coord_len read_len;
+
+ bool mate_ref_orientation;
+ int64_t mate_ref_id;
+ INSDC_coord_zero mate_ref_pos;
+ int64_t mate_align_id;
+ int32_t template_len;
+};
+
+#define AR_REF_ID(X) ((X).ref_id)
+#define AR_REF_START(X) ((X).global_ref_start)
+#define AR_REF_LEN(X) ((X).ref_len)
+#define AR_REF_ORIENT(X) ((X).ref_orientation)
+#define AR_READNO(X) ((X).read_id)
+#define AR_MAPQ(X) ((X).mapq)
+#define AR_KEY(X) ((X).tmp_key_id)
+
+#define AR_BASECOUNT(X) ((X).data.has_mismatch.elements)
+#define AR_HAS_MISMATCH(X) ((bool *)((X).data.has_mismatch.buffer))
+#define AR_HAS_OFFSET(X) ((bool *)((X).data.has_ref_offset.buffer))
+
+#define AR_NUM_MISMATCH(X) ((X).data.mismatch.elements)
+#define AR_MISMATCH(X) ((char *)((X).data.mismatch.buffer))
+
+#define AR_NUM_OFFSET(X) ((X).data.ref_offset.elements)
+#define AR_OFFSET(X) ((INSDC_coord_zero *)((X).data.ref_offset.buffer))
+
+Alignment *AlignmentMake(VDatabase *db);
+
+rc_t AlignmentWriteRecord(Alignment *self, AlignmentRecord *data);
+
+rc_t AlignmentStartUpdatingSpotIds(Alignment *self);
+
+rc_t AlignmentGetSpotKey(Alignment *self, uint64_t *keyId);
+
+rc_t AlignmentWriteSpotId(Alignment *self, int64_t spotId);
+
+rc_t AlignmentWhack(Alignment *self, bool commit);
+
+#endif
diff --git a/tools/bam-loader/analysis.c b/tools/bam-loader/analysis.c
new file mode 100644
index 0000000..cccc329
--- /dev/null
+++ b/tools/bam-loader/analysis.c
@@ -0,0 +1,157 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/data-buffer.h>
+#include <klib/sort.h>
+
+#include "KFileHelper.h"
+#include "analysis.h"
+#include "Globals.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static rc_t ParseAnalysis(Analysis *rslt, unsigned lines, char *src) {
+ unsigned i;
+
+ rslt->N = lines;
+ memset(&rslt->line[0], 0, lines * sizeof(rslt->line[0]));
+
+ for (i = 0; i != lines; ++i) {
+ char *endp;
+ char *tab;
+
+ endp = strchr(src, 0);
+ assert(endp);
+
+ rslt->line[i].name = src;
+ tab = strchr(src, '\t');
+ if (!tab) break;
+ src = tab + 1;
+ tab[0] = '\0';
+
+ rslt->line[i].refID = src;
+ tab = strchr(src, '\t');
+ if (!tab) break;
+ src = tab + 1;
+ tab[0] = '\0';
+
+ tab = strchr(src, '\t');
+ if (!tab) break;
+ src = tab + 1;
+
+ rslt->line[i].bamFile = src;
+ tab = strchr(src, '\t');
+ if (!tab) break;
+ src = tab + 1;
+ tab[0] = '\0';
+
+ rslt->line[i].asoFile = src;
+ tab = strchr(src, '\t');
+ if (!tab) break;
+ tab[0] = '\0';
+
+ src = endp + 1;
+ }
+ for (i = 0; i != lines; ++i) {
+ if (rslt->line[i].name == NULL ||
+ rslt->line[i].refID == NULL ||
+ rslt->line[i].bamFile == NULL ||
+ rslt->line[i].asoFile == NULL
+ )
+ {
+ return RC(rcApp, rcFile, rcReading, rcData, rcCorrupt);
+ }
+ }
+ return 0;
+}
+
+static int CC CompAnalysisLineBamFile(const void *A, const void *B, void *ignore) {
+ const AnalysisLine *a = A;
+ const AnalysisLine *b = B;
+ int rslt = strcmp(a->bamFile, b->bamFile);
+
+ if (rslt == 0)
+ rslt = strcmp(a->name, b->name);
+ return rslt;
+}
+
+const char *AnalysisNextBAMFile(const char *last) {
+ unsigned i;
+ if (last == NULL) {
+ return G.analysis->line[0].bamFile;
+ }
+ for (i = 1; i < G.analysis->N; ++i) {
+ if (strcmp(last, G.analysis->line[i].bamFile) > 0) {
+ return G.analysis->line[i].bamFile;
+ }
+ }
+ return NULL;
+}
+
+AnalysisLine *AnalysisMatch(const char *bamFile, const char *name) {
+ unsigned i;
+
+ for (i = 0; i != G.analysis->N; ++i) {
+ if (strcmp(bamFile, G.analysis->line[i].bamFile) == 0 &&
+ strcmp(name, G.analysis->line[i].name) == 0
+ )
+ {
+ return &G.analysis->line[i];
+ }
+ }
+ return NULL;
+}
+
+rc_t LoadAnalysis(const char *fileName) {
+ rc_t rc;
+ KDataBuffer buf;
+ uint64_t lines;
+
+ memset(&buf, 0, sizeof(buf));
+ buf.elem_bits = 8;
+
+ rc = LoadFile(&buf, &lines, G.inDir, fileName);
+ if (rc == 0) {
+ if (lines > 0 && buf.elem_count > 0) {
+ G.analysis = malloc(sizeof(*G.analysis) + (lines - 1) * sizeof(G.analysis->line[0]) + buf.elem_count);
+ if (G.analysis)
+ memcpy(&G.analysis->line[lines], buf.base, buf.elem_count);
+ else
+ rc = RC(rcApp, rcFile, rcReading, rcMemory, rcExhausted);
+ }
+ else
+ rc = RC(rcApp, rcFile, rcReading, rcData, rcEmpty);
+ }
+ KDataBufferWhack(&buf);
+ if (rc == 0) {
+ rc = ParseAnalysis(G.analysis, lines, (char *)&G.analysis->line[lines]);
+ }
+ return rc;
+}
+
diff --git a/tools/bam-loader/analysis.h b/tools/bam-loader/analysis.h
new file mode 100644
index 0000000..766a652
--- /dev/null
+++ b/tools/bam-loader/analysis.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_ANALYSIS_H_
+#define BAM_LOAD_ANALYSIS_H_ 1
+#include <klib/rc.h>
+
+typedef struct s_analysis_line {
+ const char *name;
+ const char *refID;
+ const char *bamFile;
+ const char *asoFile;
+ uint64_t startPos;
+} AnalysisLine;
+
+typedef struct s_analysis {
+ unsigned N;
+ AnalysisLine line[1];
+} Analysis;
+
+const char *AnalysisNextBAMFile(const char *last);
+
+AnalysisLine *AnalysisMatch(const char *bamFile, const char *name);
+
+rc_t LoadAnalysis(const char *fileName);
+#endif
diff --git a/tools/bam-loader/bam-load.vers b/tools/bam-loader/bam-load.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/bam-loader/bam-load.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/bam-loader/bam-loader.c b/tools/bam-loader/bam-loader.c
new file mode 100644
index 0000000..3d4ab92
--- /dev/null
+++ b/tools/bam-loader/bam-loader.c
@@ -0,0 +1,987 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "bam-load.vers.h"
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kapp/log-xml.h>
+#include <align/writer-refseq.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <limits.h>
+
+#include "Globals.h"
+#include "loader-imp.h"
+
+/* MARK: Arguments and Usage */
+static char const option_input[] = "input";
+static char const option_output[] = "output";
+static char const option_tmpfs[] = "tmpfs";
+static char const option_config[] = "config";
+static char const option_min_mapq[] = "min-mapq";
+static char const option_qual_compress[] = "qual-quant";
+static char const option_cache_size[] = "cache-size";
+static char const option_unsorted[] = "unsorted";
+static char const option_max_err_count[] = "max-err-count";
+static char const option_max_rec_count[] = "max-rec-count";
+static char const option_no_verify[] = "no-verify";
+static char const option_only_verify[] = "only-verify";
+static char const option_use_qual[] = "use-QUAL";
+static char const option_ref_filter[] = "ref-filter";
+static char const option_ref_config[] = "ref-config";
+static char const option_edit_aligned_qual[] = "edit-aligned-qual";
+static char const option_unaligned[] = "unaligned";
+static char const option_accept_dup[] = "accept-dups";
+static char const option_accept_nomatch[] = "accept-nomatch";
+static char const option_nomatch_log[] = "nomatch-log";
+static char const option_keep_mismatch_qual[] = "keep-mismatch-qual";
+static char const option_min_match[] = "minimum-match";
+static char const option_header[] = "header";
+static char const option_no_cs[] = "no-cs";
+static char const option_no_secondary[] = "no-secondary";
+static char const option_ref_file[] = "ref-file";
+static char const option_TI[] = "TI";
+static char const option_max_warn_dup_flag[] = "max-warning-dup-flag";
+static char const option_accept_hard_clip[] = "accept-hard-clip";
+
+#define OPTION_INPUT option_input
+#define OPTION_OUTPUT option_output
+#define OPTION_TMPFS option_tmpfs
+#define OPTION_CONFIG option_config
+#define OPTION_MINMAPQ option_min_mapq
+#define OPTION_QCOMP option_qual_compress
+#define OPTION_CACHE_SIZE option_cache_size
+#define OPTION_MAX_ERR_COUNT option_max_err_count
+#define OPTION_MAX_REC_COUNT option_max_rec_count
+#define OPTION_UNALIGNED option_unaligned
+#define OPTION_ACCEPT_DUP option_accept_dup
+#define OPTION_ACCEPT_NOMATCH option_accept_nomatch
+#define OPTION_NOMATCH_LOG option_nomatch_log
+#define OPTION_MIN_MATCH option_min_match
+#define OPTION_HEADER option_header
+#define OPTION_NO_CS option_no_cs
+#define OPTION_NO_SECONDARY option_no_secondary
+#define OPTION_REF_FILE option_ref_file
+#define OPTION_TI option_TI
+#define OPTION_MAX_WARN_DUP_FLAG option_max_warn_dup_flag
+#define OPTION_ACCEPT_HARD_CLIP option_accept_hard_clip
+
+#define ALIAS_INPUT "i"
+#define ALIAS_OUTPUT "o"
+#define ALIAS_TMPFS "t"
+#define ALIAS_CONFIG "k"
+#define ALIAS_MINMAPQ "q"
+#define ALIAS_QCOMP "Q"
+#define ALIAS_MAX_ERR_COUNT "E"
+#define ALIAS_UNALIGNED "u"
+#define ALIAS_ACCEPT_DUP "d"
+#define ALIAS_NO_SECONDARY "P"
+#define ALIAS_REF_FILE "r"
+
+static
+char const * input_usage[] =
+{
+ "Path where to get fasta files from.",
+ NULL
+};
+
+static
+char const * output_usage[] =
+{
+ "Path and Name of the output database.",
+ NULL
+};
+
+static
+char const * tmpfs_usage[] =
+{
+ "Path to be used for scratch files.",
+ NULL
+};
+
+static
+char const * config_usage[] =
+{
+ "Path to configuration file:",
+ "maps the input BAM file's reference names to the equivalent GenBank accession.",
+ "It is a tab-delimited text file with unix line endings (\\n - LF) with the following fields in this order:",
+ "#1 reference name as it occurs in the BAM file's SN field of @SQ header record;",
+ "#2 INSDC reference ID",
+ NULL
+};
+
+static
+char const * min_mapq_usage[] =
+{
+ "Minimum mapping quality to be considered an alignment.",
+ NULL
+};
+
+static
+char const * qcomp_usage[] =
+{
+ "Quality scores quantization level, can be a number (0: none, 1: 2bit, 2: 1bit), or a string like '1:10,10:20,20:30,30:-' (which is equivalent to 1) (nb. the endpoint is exclusive).",
+ NULL
+};
+
+static
+char const * unsorted_usage[] =
+{
+ "Tell the loader to expect unsorted input (requires more memory)",
+ NULL
+};
+
+static
+char const * cache_size_usage[] =
+{
+ "Set the cache size in MB for the temporary indices",
+ NULL
+};
+
+static
+char const * mrc_usage[] =
+{
+ "Set the maximum number of records to process from the BAM file",
+ NULL
+};
+
+static
+char const * mec_usage[] =
+{
+ "Set the maximum number of errors to ignore from the BAM file",
+ NULL
+};
+
+static
+char const * no_verify_usage[] =
+{
+ "Skip verify existence of references from the BAM file",
+ NULL
+};
+
+static
+char const * only_verify_usage[] =
+{
+ "Exit after verifying existence of references from the BAM file",
+ NULL
+};
+
+static
+char const * use_QUAL_usage[] =
+{
+ "use QUAL column for quality values (default is to use OQ if it is available)",
+ NULL
+};
+
+static
+char const * use_ref_filter[] =
+{
+ "Only process alignments to the given reference",
+ NULL
+};
+
+static
+char const * use_ref_config[] =
+{
+ "Only process alignments to references in the config file",
+ NULL
+};
+
+static
+char const * use_edit_aligned_qual[] =
+{
+ "Convert quality at aligned positions to this value",
+ NULL
+};
+
+static
+char const * use_keep_mismatch_qual[] =
+{
+ "Don't quantized quality at mismatched positions",
+ NULL
+};
+
+static
+char const * use_unaligned[] =
+{
+ "Specify file without aligned reads",
+ NULL
+};
+
+static
+char const * use_accept_dups[] =
+{
+ "Accept spots inconsistent PCR duplicate flags",
+ NULL
+};
+
+static
+char const * use_accept_nomatch[] =
+{
+ "Accept alignments with no matching bases",
+ NULL
+};
+
+static
+char const * use_nomatch_log[] =
+{
+ "Where to write info for alignments with no matching bases",
+ NULL
+};
+
+static
+char const * use_min_match[] =
+{
+ "minimum number of matches for an alignment",
+ NULL
+};
+
+static
+char const * use_header[] =
+{
+ "path to a file containing the SAM header to store in the resulting cSRA, recommended in case of multiple input BAMs",
+ NULL
+};
+
+static
+char const * use_no_cs[] =
+{
+ "turn off awareness of colorspace",
+ NULL
+};
+
+static
+char const * use_no_secondary[] =
+{
+ "ignore alignments marked as secondary",
+ NULL
+};
+
+static
+char const * use_ref_file[] =
+{
+ "path to a fasta file with references",
+ NULL
+};
+
+static
+char const * use_TI[] =
+{
+ "for trace alignments",
+ NULL
+};
+
+static
+char const * use_max_dup_warnings[] =
+{
+ "set limit for number of duplicate flag mismatch warnings",
+ NULL
+};
+
+static
+char const * use_accept_hard_clip[] =
+{
+ "accept hard clipping in CIGAR",
+ NULL
+};
+
+OptDef Options[] =
+{
+ /* order here is same as in param array below!!! */
+ { OPTION_INPUT, ALIAS_INPUT, NULL, input_usage, 1, true, false },
+ { OPTION_OUTPUT, ALIAS_OUTPUT, NULL, output_usage, 1, true, true },
+ { OPTION_CONFIG, ALIAS_CONFIG, NULL, config_usage, 1, true, false },
+ { OPTION_HEADER, NULL, NULL, use_header, 1, true, false },
+ { OPTION_TMPFS, ALIAS_TMPFS, NULL, tmpfs_usage, 1, true, false },
+ { OPTION_UNALIGNED, ALIAS_UNALIGNED, NULL, use_unaligned, 256, true, false },
+ { OPTION_ACCEPT_DUP, ALIAS_ACCEPT_DUP, NULL, use_accept_dups, 1, false, false },
+ { OPTION_ACCEPT_NOMATCH, NULL, NULL, use_accept_nomatch, 1, false, false },
+ { OPTION_NOMATCH_LOG, NULL, NULL, use_nomatch_log, 1, true, false },
+ { OPTION_QCOMP, ALIAS_QCOMP, NULL, qcomp_usage, 1, true, false },
+ { OPTION_MINMAPQ, ALIAS_MINMAPQ, NULL, min_mapq_usage, 1, true, false },
+ { OPTION_CACHE_SIZE, NULL, NULL, cache_size_usage, 1, true, false },
+ { OPTION_NO_CS, NULL, NULL, use_no_cs, 1, false, false },
+ { OPTION_MIN_MATCH, NULL, NULL, use_min_match, 1, true, false },
+ { OPTION_NO_SECONDARY, ALIAS_NO_SECONDARY, NULL, use_no_secondary, 1, false, false },
+ { option_unsorted, NULL, NULL, unsorted_usage, 1, false, false },
+ { option_no_verify, NULL, NULL, no_verify_usage, 1, false, false },
+ { option_only_verify, NULL, NULL, only_verify_usage, 1, false, false },
+ { option_use_qual, NULL, NULL, use_QUAL_usage, 1, false, false },
+ { option_ref_config, NULL, NULL, use_ref_config, 1, false, false },
+ { option_ref_filter, NULL, NULL, use_ref_filter, 1, true, false },
+ { option_edit_aligned_qual, NULL, NULL, use_edit_aligned_qual, 1, true, false },
+ { option_keep_mismatch_qual, NULL, NULL, use_keep_mismatch_qual, 1, false, false },
+ { OPTION_MAX_REC_COUNT, NULL, NULL, mrc_usage, 1, true, false },
+ { OPTION_MAX_ERR_COUNT, ALIAS_MAX_ERR_COUNT, NULL, mec_usage, 1, true, false },
+ { OPTION_REF_FILE, ALIAS_REF_FILE, NULL, use_ref_file, 0, true, false },
+ { OPTION_TI, NULL, NULL, use_TI, 1, false, false },
+ { OPTION_MAX_WARN_DUP_FLAG, NULL, NULL, use_max_dup_warnings, 1, true, false },
+ { OPTION_ACCEPT_HARD_CLIP, NULL, NULL, use_accept_hard_clip, 1, false, false }
+};
+
+const char* OptHelpParam[] =
+{
+ /* order here is same as in OptDef array above!!! */
+ "path",
+ "path",
+ "path-to-file",
+ "path-to-file",
+ "path",
+ "path-to-file",
+ NULL,
+ NULL,
+ NULL,
+ "level",
+ "phred-score",
+ "mbytes",
+ NULL,
+ "count",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "name",
+ "new-value",
+ NULL,
+ NULL,
+ NULL,
+ "path-to-file",
+ NULL,
+ "count",
+ NULL
+};
+
+rc_t UsageSummary (char const * progname)
+{
+ return KOutMsg (
+ "Usage:\n"
+ "\t%s [options] <bam-file>\n"
+ "\n"
+ "Summary:\n"
+ "\tLoad a BAM formatted data file\n"
+ "\n"
+ "Example:\n"
+ "\t%s -o /tmp/SRZ123456 -k analysis.bam.cfg 123456.bam\n"
+ "\n"
+ ,progname, progname);
+}
+
+char const UsageDefaultName[] = "bam-load";
+
+rc_t CC Usage (const Args * args)
+{
+ rc_t rc;
+ int i;
+ const char * progname = UsageDefaultName;
+ const char * fullpath = UsageDefaultName;
+ const size_t argsQty = sizeof(Options) / sizeof(Options[0]);
+
+ if (args == NULL)
+ rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ else
+ rc = ArgsProgram (args, &fullpath, &progname);
+ if (rc)
+ progname = fullpath = UsageDefaultName;
+
+ UsageSummary (progname);
+
+ for(i = 0; i < argsQty; i++ ) {
+ if( Options[i].required && Options[i].help[0] != NULL ) {
+ HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+ }
+ }
+ OUTMSG(("\nOptions:\n"));
+ for(i = 0; i < argsQty; i++ ) {
+ if( !Options[i].required && Options[i].help[0] != NULL ) {
+ HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+ }
+ }
+ XMLLogger_Usage();
+ OUTMSG(("\n"));
+ HelpOptionsStandard ();
+ HelpVersion (fullpath, KAppVersion());
+ return rc;
+}
+
+/* MARK: Definitions and Globals */
+
+#define SCHEMAFILE "align/align.vschema"
+
+Globals G;
+
+uint32_t CC KAppVersion (void)
+{
+ return BAM_LOAD_VERS;
+}
+
+#ifdef _WIN32
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+static void set_pid(void)
+{
+ G.pid = getpid();
+}
+
+static rc_t PathWithBasePath(char rslt[], size_t sz, char const path[], char const base[])
+{
+ size_t const plen = strlen(path);
+ bool const hasBase = base && base[0];
+ bool const isBareName = strchr(path, '/') == NULL;
+
+ if (isBareName && hasBase) {
+ if (string_printf(rslt, sz, NULL, "%s/%s", base, path) == 0)
+ return 0;
+ }
+ else if (plen < sz) {
+ strcpy(rslt, path);
+ return 0;
+ }
+ {
+ rc_t const rc = RC(rcApp, rcArgv, rcAccessing, rcBuffer, rcInsufficient);
+ (void)LOGERR(klogErr, rc, "The path to the file is too long");
+ return rc;
+ }
+}
+
+static rc_t OpenFile(KFile const **kf, char const path[], char const base[])
+{
+ char fname[4096];
+ rc_t rc = PathWithBasePath(fname, sizeof(fname), path, base);
+
+ if (rc == 0) {
+ KDirectory *dir;
+
+ rc = KDirectoryNativeDir(&dir);
+ if (rc == 0) {
+ rc = KDirectoryOpenFileRead(dir, kf, fname);
+ KDirectoryRelease(dir);
+ }
+ }
+ return rc;
+}
+
+static rc_t LoadHeader(char const **rslt, char const path[], char const base[])
+{
+ KFile const *kf;
+ rc_t rc = OpenFile(&kf, path, base);
+
+ *rslt = NULL;
+ if (rc == 0) {
+ uint64_t fsize;
+ rc = KFileSize(kf, &fsize);
+ if (rc == 0) {
+ char *fdata = malloc(fsize+1);
+
+ if (fdata) {
+ size_t nread;
+ rc = KFileRead(kf, 0, fdata, fsize, &nread);
+ if (rc == 0) {
+ if (nread) {
+ fdata[nread] = '\0';
+ *rslt = fdata;
+ }
+ else {
+ free(fdata);
+ rc = RC(rcApp, rcArgv, rcAccessing, rcFile, rcEmpty);
+ (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' is empty", "file=%s", path));
+ }
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read file '$(file)'", "file=%s", path));
+ }
+ }
+ else {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read file '$(file)'", "file=%s", path));
+ }
+ }
+ KFileRelease(kf);
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open file '$(file)'", "file=%s", path));
+ }
+ return rc;
+}
+
+rc_t CC KMain (int argc, char * argv[])
+{
+ Args * args;
+ rc_t rc;
+ unsigned n_aligned = 0;
+ unsigned n_unalgnd = 0;
+ char *aligned[256];
+ char *unalgnd[256];
+ char *name_buffer = NULL;
+ unsigned next_name = 0;
+ unsigned nbsz = 0;
+ char const *value;
+ char *dummy;
+ const XMLLogger* xml_logger = NULL;
+
+ memset(&G, 0, sizeof(G));
+
+ G.mode = mode_Archive;
+ G.maxSeqLen = TableWriterRefSeq_MAX_SEQ_LEN;
+ G.schemaPath = SCHEMAFILE;
+ G.omit_aligned_reads = true;
+ G.omit_reference_reads = true;
+ G.minMapQual = 0; /* accept all */
+ G.tmpfs = "/tmp";
+#if _ARCH_BITS == 32
+ G.cache_size = ( size_t ) 1 << 30;
+#else
+ G.cache_size = ( size_t ) 10 << 30;
+#endif
+ G.maxErrCount = 1000;
+ G.minMatchCount = 10;
+
+ set_pid();
+
+ rc = ArgsMakeAndHandle (&args, argc, argv, 2, Options,
+ sizeof Options / sizeof (OptDef), XMLLogger_Args, XMLLogger_ArgsQty);
+
+ while (rc == 0) {
+ uint32_t pcount;
+
+ if( (rc = XMLLogger_Make(&xml_logger, NULL, args)) != 0 ) {
+ break;
+ }
+ rc = ArgsOptionCount(args, option_only_verify, &pcount);
+ if (rc)
+ break;
+ G.onlyVerifyReferences = (pcount > 0);
+
+ rc = ArgsOptionCount(args, option_no_verify, &pcount);
+ if (rc)
+ break;
+ G.noVerifyReferences = (pcount > 0);
+
+ rc = ArgsOptionCount(args, option_use_qual, &pcount);
+ if (rc)
+ break;
+ G.useQUAL = (pcount > 0);
+
+ rc = ArgsOptionCount(args, option_ref_config, &pcount);
+ if (rc)
+ break;
+ G.limit2config = (pcount > 0);
+
+ rc = ArgsOptionCount(args, OPTION_REF_FILE, &pcount);
+ if (rc)
+ break;
+ G.refFiles = calloc(pcount + 1, sizeof(*(G.refFiles)));
+ if( !G.refFiles ) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+ break;
+ }
+ while(pcount-- > 0) {
+ rc = ArgsOptionValue(args, OPTION_REF_FILE, pcount, &G.refFiles[pcount]);
+ if (rc)
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_TMPFS, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_TMPFS, 0, &G.tmpfs);
+ if (rc)
+ break;
+ }
+ else if (pcount > 1)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+ OUTMSG (("Single parameter required\n"));
+ MiniUsage (args);
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_INPUT, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_INPUT, 0, &G.inpath);
+ if (rc)
+ break;
+ }
+ else if (pcount > 1)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+ OUTMSG (("Single input parameter required\n"));
+ MiniUsage (args);
+ break;
+ }
+
+ rc = ArgsOptionCount (args, option_ref_filter, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, option_ref_filter, 0, &G.refFilter);
+ if (rc)
+ break;
+ }
+ else if (pcount > 1)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+ OUTMSG (("Single parameter required\n"));
+ MiniUsage (args);
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_CONFIG, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_CONFIG, 0, &G.refXRefPath);
+ if (rc)
+ break;
+ }
+ else if (pcount > 1)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+ OUTMSG (("Single input parameter required\n"));
+ MiniUsage (args);
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_OUTPUT, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_OUTPUT, 0, &G.outpath);
+ if (rc)
+ break;
+ }
+ else if (pcount > 1)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+ OUTMSG (("Single output parameter required\n"));
+ MiniUsage (args);
+ break;
+ }
+ else if (!G.onlyVerifyReferences) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+ OUTMSG (("Output parameter required\n"));
+ MiniUsage (args);
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_MINMAPQ, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_MINMAPQ, 0, &value);
+ if (rc)
+ break;
+ G.minMapQual = strtoul(value, &dummy, 0);
+ }
+
+ rc = ArgsOptionCount (args, OPTION_QCOMP, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_QCOMP, 0, &G.QualQuantizer);
+ if (rc)
+ break;
+ }
+
+ rc = ArgsOptionCount (args, option_edit_aligned_qual, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, option_edit_aligned_qual, 0, &value);
+ if (rc)
+ break;
+ G.alignedQualValue = strtoul(value, &dummy, 0);
+ if (G.alignedQualValue == 0) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+ OUTMSG (("edit-aligned-qual: bad value\n"));
+ MiniUsage (args);
+ break;
+ }
+ G.editAlignedQual = true;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_CACHE_SIZE, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_CACHE_SIZE, 0, &value);
+ if (rc)
+ break;
+ G.cache_size = strtoul(value, &dummy, 0) * 1024UL * 1024UL;
+ if (G.cache_size == 0) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+ OUTMSG (("cache-size: bad value\n"));
+ MiniUsage (args);
+ break;
+ }
+ }
+
+ rc = ArgsOptionCount (args, OPTION_MAX_WARN_DUP_FLAG, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_MAX_WARN_DUP_FLAG, 0, &value);
+ if (rc)
+ break;
+ G.maxWarnCount_DupConflict = strtoul(value, &dummy, 0);
+ }
+
+ rc = ArgsOptionCount (args, option_unsorted, &pcount);
+ if (rc)
+ break;
+ G.expectUnsorted = pcount > 0;
+
+ rc = ArgsOptionCount (args, OPTION_MAX_REC_COUNT, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_MAX_REC_COUNT, 0, &value);
+ if (rc)
+ break;
+ G.maxAlignCount = strtoul(value, &dummy, 0);
+ }
+
+ rc = ArgsOptionCount (args, OPTION_MAX_ERR_COUNT, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_MAX_ERR_COUNT, 0, &value);
+ if (rc)
+ break;
+ G.maxErrCount = strtoul(value, &dummy, 0);
+ }
+
+ rc = ArgsOptionCount (args, OPTION_MIN_MATCH, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_MIN_MATCH, 0, &value);
+ if (rc)
+ break;
+ G.minMatchCount = strtoul(value, &dummy, 0);
+ }
+
+ rc = ArgsOptionCount (args, OPTION_ACCEPT_DUP, &pcount);
+ if (rc)
+ break;
+ G.acceptBadDups = pcount > 0;
+
+ rc = ArgsOptionCount (args, OPTION_ACCEPT_NOMATCH, &pcount);
+ if (rc)
+ break;
+ G.acceptNoMatch = pcount > 0;
+
+ rc = ArgsOptionCount (args, option_keep_mismatch_qual, &pcount);
+ if (rc)
+ break;
+ G.keepMismatchQual = pcount > 0;
+
+ rc = ArgsOptionCount (args, OPTION_NO_CS, &pcount);
+ if (rc)
+ break;
+ G.noColorSpace = pcount > 0;
+
+ rc = ArgsOptionCount (args, OPTION_NO_SECONDARY, &pcount);
+ if (rc)
+ break;
+ G.noSecondary = pcount > 0;
+
+ rc = ArgsOptionCount (args, OPTION_TI, &pcount);
+ if (rc)
+ break;
+ G.hasTI = pcount > 0;
+
+ rc = ArgsOptionCount (args, OPTION_ACCEPT_HARD_CLIP, &pcount);
+ if (rc)
+ break;
+ G.acceptHardClip = pcount > 0;
+
+ rc = ArgsOptionCount (args, OPTION_NOMATCH_LOG, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ KDirectory *dir;
+
+ rc = ArgsOptionValue (args, OPTION_NOMATCH_LOG, 0, &value);
+ if (rc) break;
+ rc = KDirectoryNativeDir(&dir);
+ if (rc) break;
+ rc = KDirectoryCreateFile(dir, &G.noMatchLog, 0, 0664, kcmInit, value);
+ KDirectoryRelease(dir);
+ if (rc) break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_HEADER, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1) {
+ rc = ArgsOptionValue (args, OPTION_HEADER, 0, &value);
+ if (rc) break;
+ rc = LoadHeader(&G.headerText, value, G.inpath);
+ if (rc) break;
+ }
+
+ rc = ArgsParamCount (args, &pcount);
+ if (rc) break;
+ if (pcount == 0)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+ MiniUsage (args);
+ break;
+ }
+ else if (pcount > sizeof(aligned)/sizeof(aligned[0])) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+ (void)PLOGERR(klogErr, (klogErr, rc, "$(count) input files is too many, $(max) is the limit",
+ "count=%u,max=%u", (unsigned)pcount, (unsigned)(sizeof(aligned)/sizeof(aligned[0]))));
+ break;
+ }
+ else {
+ unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0;
+ unsigned i;
+
+ for (i = 0; i < pcount; ++i) {
+ rc = ArgsParamValue(args, i, &value);
+ if (rc) break;
+ need += strlen(value) + 1;
+ }
+ nbsz = need;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_UNALIGNED, &pcount);
+ if (rc)
+ break;
+ if (pcount > 0)
+ {
+ unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0;
+ unsigned i;
+
+ for (i = 0; i < pcount; ++i) {
+ rc = ArgsOptionValue(args, OPTION_UNALIGNED, i, &value);
+ if (rc) break;
+ need += strlen(value) + 1;
+ }
+ if (rc) break;
+ nbsz += need;
+ }
+
+ name_buffer = malloc(nbsz);
+ if (name_buffer == NULL) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_UNALIGNED, &pcount);
+ if (rc == 0) {
+ unsigned i;
+
+ for (i = 0; i < pcount; ++i) {
+ rc = ArgsOptionValue(args, OPTION_UNALIGNED, i, &value);
+ if (rc) break;
+
+ unalgnd[n_unalgnd++] = name_buffer + next_name;
+ rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath);
+ if (rc) break;
+ next_name += strlen(name_buffer + next_name) + 1;
+ }
+ if (rc) break;
+ }
+ else
+ break;
+
+ rc = ArgsParamCount (args, &pcount);
+ if (rc == 0) {
+ unsigned i;
+
+ for (i = 0; i < pcount; ++i) {
+ rc = ArgsParamValue(args, i, &value);
+ if (rc) break;
+
+ aligned[n_aligned++] = name_buffer + next_name;
+ rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath);
+ if (rc) break;
+ next_name += strlen(name_buffer + next_name) + 1;
+ }
+ }
+ else
+ break;
+
+ rc = run(argv[0], n_aligned, (char const **)aligned, n_unalgnd, (char const **)unalgnd);
+ break;
+ }
+ free(name_buffer);
+ free((void *)G.headerText);
+ free(G.refFiles);
+
+ value = G.outpath ? strrchr(G.outpath, '/') : "/???";
+ if( value == NULL ) {
+ value = G.outpath;
+ } else {
+ value++;
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "load failed",
+ "severity=total,status=failure,accession=%s,errors=%u", value, G.errCount));
+ } else {
+ (void)PLOGMSG(klogInfo, (klogInfo, "loaded",
+ "severity=total,status=success,accession=%s,errors=%u", value, G.errCount));
+ }
+ ArgsWhack(args);
+ XMLLogger_Release(xml_logger);
+ return rc;
+}
diff --git a/tools/bam-loader/hashtable.c b/tools/bam-loader/hashtable.c
new file mode 100644
index 0000000..ee8f8e6
--- /dev/null
+++ b/tools/bam-loader/hashtable.c
@@ -0,0 +1,878 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#if TESTING
+#include <stdio.h>
+#include <string.h>
+#endif
+
+#include "hashtable.h"
+
+typedef struct HTBucket HTBucket;
+typedef struct HTEntry HTEntry;
+
+#define HASH_TABLE_ENTRIES_MAX (0x80000)
+#define HASH_TABLE_PREALLOC_MAX 1
+
+struct HTEntry {
+ const void *payload;
+ uint32_t hashValue;
+};
+
+struct HTBucket {
+ HTBucket *overflow;
+ uint32_t used; /* one bit per entry */
+ HTEntry entry[32];
+};
+
+struct HashTable {
+ size_t hashMask; /* the "size" of the table is hashMask + 1 */
+ size_t entryCount; /* total number of entries in table */
+
+ HashTableKeyCompFunc comp_func;
+ const void *ctx;
+
+#if HASH_TABLE_PREALLOC_MAX
+ HTBucket table[HASH_TABLE_ENTRIES_MAX];
+#else
+ HTBucket *table;
+#endif
+};
+
+typedef struct HashTableRealIterator {
+ HashTable *table;
+ HTBucket *bucket;
+ uint32_t slot;
+ uint32_t hashValue;
+} HashTableRealIterator;
+
+typedef union HashTableImplIterator {
+ HashTableRealIterator real;
+ HashTableIterator user;
+} HashTableImplIterator;
+
+static unsigned FirstSet(unsigned bits)
+{
+ assert(bits != 0);
+ if ((bits & 0xFFFF) != 0) {
+ if ((bits & 0xFF) != 0) {
+ if ((bits & 0xF) != 0) {
+ if ((bits & 0x3) != 0) {
+ if ((bits & 0x1) != 0)
+ return 0;
+ else
+ return 1;
+ }
+ else if ((bits & 0x4) != 0)
+ return 2;
+ else
+ return 3;
+ }
+ else if ((bits & 0x30) != 0) {
+ if ((bits & 0x10) != 0)
+ return 4;
+ else
+ return 5;
+ }
+ else if ((bits & 0x40) != 0)
+ return 6;
+ else
+ return 7;
+ }
+ else if ((bits & 0xF00) != 0) {
+ if ((bits & 0x300) != 0) {
+ if ((bits & 0x100) != 0)
+ return 8;
+ else
+ return 9;
+ }
+ else if ((bits & 0x400) != 0)
+ return 10;
+ else
+ return 11;
+ }
+ else if ((bits & 0x3000) != 0) {
+ if ((bits & 0x1000) != 0)
+ return 12;
+ else
+ return 13;
+ }
+ else if ((bits & 0x4000) != 0)
+ return 14;
+ else
+ return 15;
+ }
+ else if ((bits & 0xFF0000) != 0) {
+ if ((bits & 0xF0000) != 0) {
+ if ((bits & 0x30000) != 0) {
+ if ((bits & 0x10000) != 0)
+ return 16;
+ else
+ return 17;
+ }
+ else if ((bits & 0x40000) != 0)
+ return 18;
+ else
+ return 19;
+ }
+ else if ((bits & 0x300000) != 0) {
+ if ((bits & 0x100000) != 0)
+ return 20;
+ else
+ return 21;
+ }
+ else if ((bits & 0x400000) != 0)
+ return 22;
+ else
+ return 23;
+ }
+ else if ((bits & 0xF000000) != 0) {
+ if ((bits & 0x3000000) != 0) {
+ if ((bits & 0x1000000) != 0)
+ return 24;
+ else
+ return 25;
+ }
+ else if ((bits & 0x4000000) != 0)
+ return 26;
+ else
+ return 27;
+ }
+ else if ((bits & 0x30000000) != 0) {
+ if ((bits & 0x10000000) != 0)
+ return 28;
+ else
+ return 29;
+ }
+ else if ((bits & 0x40000000) != 0)
+ return 30;
+ else
+ return 31;
+
+}
+
+static rc_t HTBucketNextOpenSlot(HTBucket *self, HTBucket **rslt, unsigned *slot)
+{
+ while (self->used == 0xFFFFFFFF) {
+ if (self->overflow != NULL) {
+ self = self->overflow;
+ continue;
+ }
+ self->overflow = malloc(sizeof(*self->overflow));
+ if (self->overflow == NULL)
+ return RC(rcCont, rcBuffer, rcAllocating, rcMemory, rcExhausted);
+ self->overflow->overflow = NULL;
+ self->overflow->used = 0;
+ *rslt = self->overflow;
+ *slot = 0;
+ return 0;
+ }
+ *rslt = self;
+ *slot = FirstSet(~self->used);
+
+ return 0;
+}
+
+static rc_t HTBucketInsert(HTBucket *self, const HTEntry *entry)
+{
+ HTBucket *found;
+ unsigned slot;
+ rc_t rc = HTBucketNextOpenSlot(self, &found, &slot);
+
+ if (rc)
+ return rc;
+ found->used |= (1 << slot);
+ found->entry[slot] = *entry;
+ return 0;
+}
+
+static bool HTBucketFreeSlot(HTBucket *self, unsigned slot)
+{
+ unsigned i;
+
+ self->used &= ~(1 << slot);
+#if _DEBUGGING
+ self->entry[slot].payload = NULL;
+#endif
+ if (self->overflow == NULL)
+ return true;
+
+ /* pull something out of the overflow */
+ i = FirstSet(self->overflow->used);
+ self->entry[slot] = self->overflow->entry[i];
+ self->used |= (1 << slot);
+ HTBucketFreeSlot(self->overflow, i);
+ if (self->overflow->used == 0) {
+ free(self->overflow);
+ self->overflow = NULL;
+ }
+ return false;
+}
+
+static void HTBucketForEach(const HTBucket *self, void (*fn)(void *payload, void *ctx), void *ctx)
+{
+ do {
+ uint32_t bits = self->used;
+ unsigned i;
+
+ for (i = 0; i != 32 && bits != 0; ++i, bits >>= 1) {
+ if ((bits & 1) == 0)
+ continue;
+ fn((void *)self->entry[i].payload, ctx);
+ }
+ self = self->overflow;
+ } while (self != NULL);
+}
+
+static bool HTBucketDoUntil(const HTBucket *self, bool (*fn)(void *payload, void *ctx), void *ctx)
+{
+ do {
+ uint32_t bits = self->used;
+ unsigned i;
+
+ for (i = 0; i != 32 && bits != 0; ++i, bits >>= 1) {
+ if ((bits & 1) == 0)
+ continue;
+ if (fn((void *)self->entry[i].payload, ctx))
+ return true;
+ }
+ self = self->overflow;
+ } while (self != NULL);
+ return false;
+}
+
+static bool HTBucketValidate(const HTBucket *self, uint32_t hash, uint32_t mask)
+{
+ do {
+ uint32_t bits = self->used;
+ unsigned i;
+
+ for (i = 0; i != 32 && bits != 0; ++i, bits >>= 1) {
+ const HTEntry *entry = &self->entry[i];
+ bool is_free = (bits & 1) == 0;
+#if _DEBUGGING
+ bool is_null = entry->payload == NULL;
+
+ if (is_free != is_null)
+ return true;
+#endif
+ if (is_free)
+ continue;
+ if ((entry->hashValue & mask) != hash)
+ return true;
+ }
+ if (self->overflow && self->overflow->used == 0)
+ return true;
+ self = self->overflow;
+ } while (self != NULL);
+ return false;
+}
+
+static void HTBucketWhack(HTBucket *self, void (*fn)(void *payload, void *ctx), void *ctx)
+{
+ uint32_t bits;
+ unsigned i;
+
+ if (self->overflow) {
+ HTBucketWhack(self->overflow, fn, ctx);
+ free(self->overflow);
+ }
+ for (i = 0, bits = self->used; i != 32 && bits != 0 && fn; ++i, bits >>= 1) {
+ if ((bits & 1) == 0)
+ continue;
+ fn((void *)self->entry[i].payload, ctx);
+ }
+}
+
+static uint32_t GetHashValue(const uint8_t *key, unsigned len)
+{
+ /*
+ * My basic hash function is Pearson's hash.
+ * The tables below contain each value between 0 and 255 inclusive, in
+ * random order. The tables were generated with the following perl script.
+ *
+ * #!perl -w
+ * my @x = (0 .. 255); # each value between 0 and 255 inclusive
+ * foreach (0 .. 10000) { # randomize the order
+ * my $i = $_ % 256; # a sequential index
+ * my $r = rand(256); # a random index
+ * ($x[$i], $x[$r]) = ($x[$r], $x[$i]); # swap x[i] and x[r]
+ * }
+ * print join(', ', map { sprintf '%3u', $_; } @x);
+ *
+ * You can generate lots of different 8-bit hash functions this way.
+ *
+ * I generate four 8-bit hashes and combine them to make a 32-bit one.
+ * Even though I may not use all bits for the hash (e.g. the limit on the
+ * table's size is much less than UINT32_MAX), computing and storing the
+ * full hash reduces the number of string compares I have to do when buckets
+ * have lots of items in them.
+ */
+ static const uint8_t T1[] = {
+ 64, 186, 39, 203, 54, 211, 98, 32, 26, 23, 219, 94, 77, 60, 56, 184,
+ 129, 242, 10, 91, 84, 192, 19, 197, 231, 133, 125, 244, 48, 176, 160, 164,
+ 17, 41, 57, 137, 44, 196, 116, 146, 105, 40, 122, 47, 220, 226, 213, 212,
+ 107, 191, 52, 144, 9, 145, 81, 101, 217, 206, 85, 134, 143, 58, 128, 20,
+ 236, 102, 83, 149, 148, 180, 167, 163, 12, 239, 31, 0, 73, 152, 1, 15,
+ 75, 200, 4, 165, 5, 66, 25, 111, 255, 70, 174, 151, 96, 126, 147, 34,
+ 112, 161, 127, 181, 237, 78, 37, 74, 222, 123, 21, 132, 95, 51, 141, 45,
+ 61, 131, 193, 68, 62, 249, 178, 33, 7, 195, 228, 82, 27, 46, 254, 90,
+ 185, 240, 246, 124, 205, 182, 42, 22, 198, 69, 166, 92, 169, 136, 223, 245,
+ 118, 97, 115, 80, 252, 209, 49, 79, 221, 38, 28, 35, 36, 208, 187, 248,
+ 158, 201, 202, 168, 2, 18, 189, 119, 216, 214, 11, 6, 89, 16, 229, 109,
+ 120, 43, 162, 106, 204, 8, 199, 235, 142, 210, 86, 153, 227, 230, 24, 100,
+ 224, 113, 190, 243, 218, 215, 225, 173, 99, 238, 138, 59, 183, 154, 171, 232,
+ 157, 247, 233, 67, 88, 50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+ 155, 72, 207, 250, 159, 194, 177, 130, 135, 87, 71, 175, 14, 55, 172, 121,
+ 234, 13, 30, 241, 93, 188, 53, 114, 76, 29, 65, 3, 179, 108, 63, 139
+ };
+ static const uint8_t T2[] = {
+ 119, 174, 44, 225, 94, 226, 141, 197, 35, 241, 179, 154, 26, 161, 129, 10,
+ 104, 53, 97, 12, 243, 80, 51, 123, 185, 13, 66, 214, 114, 17, 74, 165,
+ 110, 143, 170, 222, 242, 73, 40, 101, 56, 163, 68, 86, 198, 9, 21, 90,
+ 8, 1, 146, 121, 103, 70, 5, 160, 149, 50, 145, 236, 100, 75, 148, 58,
+ 55, 15, 33, 131, 127, 186, 6, 109, 115, 2, 108, 52, 209, 128, 208, 47,
+ 220, 173, 45, 72, 156, 212, 152, 102, 77, 36, 134, 137, 162, 54, 235, 167,
+ 28, 255, 155, 240, 135, 176, 246, 244, 22, 157, 20, 224, 210, 192, 71, 140,
+ 14, 211, 251, 204, 30, 213, 132, 248, 178, 187, 142, 62, 215, 106, 229, 125,
+ 41, 216, 49, 29, 98, 32, 18, 237, 79, 206, 63, 227, 25, 99, 150, 223,
+ 171, 118, 4, 139, 81, 0, 133, 95, 188, 120, 27, 124, 61, 195, 231, 207,
+ 31, 202, 91, 252, 46, 39, 250, 144, 238, 254, 219, 200, 130, 201, 48, 107,
+ 205, 177, 88, 16, 147, 221, 164, 184, 89, 67, 190, 11, 175, 42, 136, 189,
+ 245, 117, 83, 3, 180, 172, 76, 43, 183, 84, 218, 169, 253, 159, 196, 59,
+ 193, 249, 181, 116, 153, 24, 87, 239, 138, 199, 111, 82, 69, 105, 78, 151,
+ 122, 168, 126, 85, 228, 233, 34, 113, 194, 191, 19, 230, 182, 96, 217, 38,
+ 234, 232, 92, 23, 57, 203, 65, 60, 64, 37, 158, 247, 93, 166, 112, 7
+ };
+ static const uint8_t T3[] = {
+ 103, 33, 228, 32, 183, 231, 139, 60, 67, 80, 184, 100, 70, 19, 14, 58,
+ 104, 48, 140, 10, 91, 137, 31, 96, 102, 180, 77, 121, 251, 167, 37, 206,
+ 79, 151, 109, 15, 92, 174, 108, 16, 95, 145, 18, 236, 49, 177, 135, 0,
+ 165, 86, 83, 107, 144, 44, 27, 116, 168, 193, 119, 230, 56, 97, 138, 149,
+ 132, 21, 176, 39, 205, 12, 69, 179, 210, 25, 213, 194, 239, 209, 248, 28,
+ 93, 38, 224, 66, 105, 160, 40, 17, 23, 129, 212, 8, 178, 118, 163, 73,
+ 3, 63, 57, 94, 254, 186, 131, 166, 61, 191, 133, 192, 78, 114, 250, 200,
+ 222, 136, 188, 204, 101, 11, 247, 146, 142, 152, 171, 157, 110, 141, 199, 29,
+ 147, 88, 211, 240, 164, 196, 189, 50, 65, 112, 219, 237, 197, 115, 126, 154,
+ 246, 170, 227, 235, 42, 148, 84, 201, 242, 85, 35, 6, 173, 122, 215, 218,
+ 75, 82, 1, 169, 143, 195, 51, 155, 54, 9, 71, 24, 53, 7, 47, 229,
+ 158, 26, 245, 89, 150, 181, 255, 249, 221, 217, 223, 76, 90, 36, 216, 130,
+ 220, 125, 182, 55, 202, 234, 203, 123, 34, 172, 74, 30, 4, 241, 162, 233,
+ 64, 62, 127, 20, 52, 106, 190, 253, 185, 111, 232, 2, 187, 13, 68, 117,
+ 128, 98, 208, 41, 159, 46, 207, 244, 226, 22, 252, 214, 5, 243, 99, 113,
+ 120, 225, 175, 124, 134, 161, 156, 45, 72, 87, 43, 59, 198, 153, 238, 81
+ };
+ static const uint8_t T4[] = {
+ 103, 124, 53, 254, 91, 106, 131, 69, 158, 23, 249, 171, 241, 30, 194, 217,
+ 64, 123, 129, 118, 35, 16, 209, 190, 155, 104, 148, 163, 78, 188, 174, 245,
+ 218, 125, 210, 250, 107, 212, 117, 17, 109, 44, 71, 38, 253, 177, 11, 114,
+ 60, 192, 133, 219, 97, 246, 41, 228, 127, 151, 62, 213, 224, 234, 138, 162,
+ 31, 110, 222, 141, 25, 135, 18, 49, 132, 242, 203, 207, 68, 130, 116, 59,
+ 63, 67, 169, 147, 94, 0, 134, 77, 51, 128, 247, 21, 88, 145, 122, 19,
+ 40, 58, 9, 39, 252, 8, 156, 126, 146, 80, 159, 201, 186, 175, 74, 89,
+ 54, 173, 208, 86, 239, 6, 61, 139, 66, 87, 150, 231, 82, 42, 197, 202,
+ 199, 196, 121, 112, 161, 99, 90, 144, 105, 195, 255, 27, 3, 216, 187, 172,
+ 12, 4, 221, 182, 215, 214, 76, 98, 15, 33, 47, 200, 113, 140, 227, 191,
+ 100, 24, 251, 185, 152, 237, 235, 92, 96, 1, 193, 2, 154, 72, 198, 223,
+ 28, 46, 13, 56, 153, 232, 233, 143, 108, 184, 43, 119, 84, 189, 120, 211,
+ 10, 164, 73, 230, 149, 238, 20, 37, 95, 166, 240, 29, 204, 167, 243, 236,
+ 45, 170, 220, 5, 7, 50, 160, 83, 157, 22, 168, 111, 55, 137, 206, 36,
+ 85, 180, 79, 142, 102, 181, 14, 115, 57, 34, 75, 244, 248, 48, 93, 183,
+ 229, 101, 205, 70, 226, 225, 165, 176, 136, 179, 52, 32, 26, 81, 65, 178
+ };
+ unsigned h1 = 0;
+ unsigned h2 = 0;
+ unsigned h3 = 0;
+ unsigned h4 = 0;
+ unsigned i;
+
+ for (i = 0; i != len; ++i) {
+ uint8_t ch = key[i];
+ h1 = T1[h1 ^ ch];
+ h2 = T2[h2 ^ ch];
+ h3 = T3[h3 ^ ch];
+ h4 = T4[h4 ^ ch];
+ }
+
+ return (h4 << 24) | (h3 << 16) | (h2 << 8) | h1;
+}
+
+rc_t HashTableMake(HashTable **rslt, uint32_t initialSize, HashTableKeyCompFunc kf, const void *ctx)
+{
+ HashTable *self;
+ unsigned i;
+
+ *rslt = NULL;
+
+ if (initialSize == 0)
+ initialSize = 2;
+ else {
+ uint32_t m;
+
+ for (m = 2; m < initialSize; m <<= 1)
+ ;
+ initialSize = m;
+
+ if (initialSize > HASH_TABLE_ENTRIES_MAX)
+ initialSize = HASH_TABLE_ENTRIES_MAX;
+ }
+
+ self = malloc(sizeof(*self));
+ if (self == NULL)
+ return RC(rcCont, rcSelf, rcAllocating, rcMemory, rcExhausted);
+
+#if HASH_TABLE_PREALLOC_MAX
+#else
+ self->table = malloc(initialSize * sizeof(self->table[0]));
+ if (self == NULL) {
+ free(self);
+ return RC(rcCont, rcSelf, rcAllocating, rcMemory, rcExhausted);
+ }
+#endif
+
+ for (i = 0; i != initialSize; ++i) {
+ self->table[i].used = 0;
+ self->table[i].overflow = NULL;
+ }
+
+ self->hashMask = initialSize - 1;
+ self->entryCount = 0;
+
+ self->comp_func = kf;
+ self->ctx = ctx;
+
+ *rslt = self;
+
+ return 0;
+}
+
+static bool HashTableValidate(const HashTable *self)
+{
+ unsigned i;
+
+ for (i = 0; i != self->hashMask + 1; ++i) {
+ if (HTBucketValidate(&self->table[i], i, self->hashMask))
+ return true;
+ }
+ return false;
+}
+
+static rc_t HashTableExpand(HashTable *self)
+{
+ const uint32_t mask = (self->hashMask << 1) | 1;
+ size_t size;
+ unsigned i;
+#if HASH_TABLE_PREALLOC_MAX
+#else
+ HTBucket *temp;
+#endif
+
+ /* the table must be smaller than the limit */
+ if (self->hashMask >= HASH_TABLE_ENTRIES_MAX - 1)
+ return 0;
+
+ size = self->hashMask + 1;
+
+ /* the density of used slots needs to be high enough */
+ if (self->entryCount * 4 < size * 3 * 32)
+ return 0;
+
+#if HASH_TABLE_PREALLOC_MAX
+#else
+ temp = realloc(self->table, size * 2);
+ if (temp == NULL)
+ return RC(rcCont, rcTable, rcResizing, rcMemory, rcExhausted);
+ self->table = temp;
+#endif
+
+ /* move any items that should be moved
+ * to the new buckets (about half should)
+ */
+ for (i = 0; i != size; ++i) {
+ HTBucket *bucket = &self->table[i];
+ HTBucket *other = &self->table[i + size];
+
+ other->overflow = NULL;
+ other->used = 0;
+ do {
+ unsigned j;
+ uint32_t bits = bucket->used;
+
+ for (j = 0; j != 32 && bits != 0; ++j, bits >>= 1) {
+ /* slot j occupied? */
+ if ((bits & 1) != 0) {
+ HTEntry *entry = &bucket->entry[j];
+
+ assert((entry->hashValue & self->hashMask) == i);
+
+ while ((entry->hashValue & mask) != i) {
+ rc_t rc;
+
+ /* move to new bucket */
+ assert((entry->hashValue & mask) == i + size);
+
+ rc = HTBucketInsert(other, entry);
+ if (rc) return rc;
+ if (HTBucketFreeSlot(bucket, j))
+ break;
+
+ /* FreeSlot decided to reuse the slot
+ * for something from the overflow,
+ * so process the new thing
+ */
+ assert((entry->hashValue & self->hashMask) == i);
+ }
+ }
+ }
+ bucket = bucket->overflow;
+ } while (bucket);
+ }
+ self->hashMask = mask;
+#if 0
+ HashTableValidate(self);
+#endif
+ return 0;
+}
+
+static rc_t HashTableShrink(HashTable *self)
+{
+ const uint32_t mask = self->hashMask >> 1;
+ size_t size;
+ unsigned i;
+ unsigned j;
+
+ if (self->hashMask > 255)
+ return 0;
+
+ size = self->hashMask + 1;
+
+ if (self->entryCount * 4 >= size * 3 * 32)
+ return 0;
+
+ for (j = 0, i = mask + 1; i != size; ++i, ++j) {
+ HTBucket *bucket = &self->table[i];
+ HTBucket *other = &self->table[j];
+
+ do {
+ unsigned k;
+ uint32_t bits = bucket->used;
+
+ for (k = 0; k != 32 && bits != 0; ++k, bits >>= 1) {
+ if ((bits & 1) != 0) {
+ rc_t rc;
+ HTEntry *entry = &bucket->entry[k];
+
+ assert((entry->hashValue & self->hashMask) == i);
+ assert((entry->hashValue & mask) == j);
+
+ rc = HTBucketInsert(other, entry);
+ if (rc) return rc;
+ }
+ }
+ bucket = bucket->overflow;
+ } while (bucket);
+ }
+ self->hashMask = mask;
+#if 0
+ HashTableValidate(self);
+#endif
+ return 0;
+}
+
+static bool HashTableFindSlot(const HashTable *self,
+ const void *key,
+ uint32_t key_len,
+ HashTableRealIterator *iter
+ )
+{
+ uint32_t h = GetHashValue(key, key_len);
+ const HTBucket *bucket = &self->table[h & self->hashMask];
+ const HTBucket *open_bucket = NULL;
+ int slot = 0;
+
+ iter->hashValue = h;
+ do {
+ unsigned i;
+ uint32_t bits = bucket->used;
+
+ for (i = 0; i != 32 && (bits != 0 || open_bucket == NULL); ++i, bits >>= 1) {
+ if ((bits & 1) == 0) {
+ if (open_bucket == NULL) {
+ open_bucket = bucket;
+ slot = i;
+ }
+ continue;
+ }
+ if (bucket->entry[i].hashValue != h)
+ continue;
+ if (self->comp_func(bucket->entry[i].payload, key, key_len, (void *)self->ctx) != 0)
+ continue;
+
+ iter->bucket = (HTBucket *)bucket;
+ iter->slot = i;
+ return true;
+ }
+ if (bucket->overflow == NULL)
+ break;
+ bucket = bucket->overflow;
+ } while (1);
+ if (open_bucket == NULL) {
+ iter->bucket = (HTBucket *)bucket;
+ iter->slot = 32;
+ }
+ else {
+ iter->bucket = (HTBucket *)open_bucket;
+ iter->slot = slot;
+ }
+
+ return false;
+}
+
+HashTableIterator HashTableLookup(HashTable *self, const void *key, uint32_t key_length)
+{
+ HashTableImplIterator rslt;
+
+ rslt.real.table = self;
+ HashTableFindSlot(self, key, key_length, &rslt.real);
+
+ return rslt.user;
+}
+
+void HashTableRemove(HashTable *self, const HashTableIterator *iter,
+ HashTableFreeFunc whack, void *ctx)
+{
+ const HashTableRealIterator *i = &((const HashTableImplIterator *)iter)->real;
+ uint32_t hv;
+
+ assert(i->table == self);
+ if (i->slot > 32)
+ return;
+ if ((i->bucket->used & (1 << i->slot)) == 0)
+ return;
+
+ hv = i->hashValue;
+ assert(hv == i->bucket->entry[i->slot].hashValue);
+
+ if (whack)
+ whack((void *)i->bucket->entry[i->slot].payload, ctx);
+
+ HTBucketFreeSlot(i->bucket, i->slot);
+ if (i->bucket->used == 0) {
+ HTBucket *parent = &self->table[hv & self->hashMask];
+
+ if (i->bucket != parent) {
+ while (parent->overflow != i->bucket)
+ parent = parent->overflow;
+ assert(parent->overflow == i->bucket);
+ assert(i->bucket->overflow == NULL);
+ parent->overflow = NULL;
+ free(i->bucket);
+ }
+ }
+ --self->entryCount;
+}
+
+void HashTableForEach(const HashTable *self, void (*fn)(void *payload, void *ctx), void *ctx)
+{
+ unsigned i;
+
+ for (i = 0; i != self->hashMask + 1; ++i) {
+ HTBucketForEach(&self->table[i], fn, ctx);
+ }
+}
+
+bool HashTableDoUntil(const HashTable *self, bool (*fn)(void *payload, void *ctx), void *ctx)
+{
+ unsigned i;
+
+ for (i = 0; i != self->hashMask + 1; ++i) {
+ if (HTBucketDoUntil(&self->table[i], fn, ctx))
+ return true;
+ }
+ return false;
+}
+
+void HashTableWhack(HashTable *self, HashTableFreeFunc fn, void *ctx)
+{
+ unsigned i;
+
+ if (self) {
+ for (i = 0; i != self->hashMask + 1; ++i)
+ HTBucketWhack(&self->table[i], fn, ctx);
+#if HASH_TABLE_PREALLOC_MAX
+#else
+ free(self->table);
+#endif
+ free(self);
+ }
+}
+
+bool HashTableIteratorHasValue(const HashTableIterator *iter)
+{
+ const HashTableRealIterator *i = &((const HashTableImplIterator *)iter)->real;
+
+ if (i->slot < 32 && (i->bucket->used & (1 << i->slot)) != 0)
+ return true;
+ return false;
+}
+
+const void *HashTableIteratorGetValue(const HashTableIterator *iter)
+{
+ const HashTableRealIterator *i = &((const HashTableImplIterator *)iter)->real;
+ return i->bucket->entry[i->slot].payload;
+}
+
+rc_t HashTableIteratorSetValue(HashTableIterator *iter, const void *value)
+{
+ HashTableRealIterator *i = &((HashTableImplIterator *)iter)->real;
+ HashTable *self = i->table;
+
+ if (i->slot >= 32) {
+ rc_t rc;
+
+ assert(i->bucket->used == 0xFFFFFFFF);
+ rc = HashTableExpand(self);
+ if (rc)
+ return rc;
+ rc = HTBucketNextOpenSlot(&self->table[i->hashValue & self->hashMask], &i->bucket, &i->slot);
+ if (rc)
+ return rc;
+ }
+ assert((i->bucket->used & (1 << i->slot)) == 0);
+ i->bucket->entry[i->slot].hashValue = i->hashValue;
+ i->bucket->entry[i->slot].payload = value;
+ i->bucket->used |= (1 << i->slot);
+ ++self->entryCount;
+ return 0;
+}
+
+#define TESTING 0
+#if TESTING
+#include <stdio.h>
+#include <string.h>
+
+struct pstring {
+ uint8_t len;
+ char str[255];
+};
+
+static int comp_func(const void *Obj, const void *key, uint32_t len, void *ignore)
+{
+ const struct pstring *obj = Obj;
+ return obj->len == len ? memcmp(obj->str, key, len) : obj->len - len;
+}
+
+static void print_key(void *Obj, void *ignore)
+{
+ const struct pstring *obj = Obj;
+
+ printf("%s\n", obj->str);
+ return;
+}
+
+static struct pstring **LoadTestData(unsigned *count) {
+ FILE *fp = fopen("spot_name.txt", "r");
+ unsigned N = 0;
+ unsigned bytes = 0;
+ struct pstring **rslt;
+
+ *count = 0;
+ if (fp == NULL) {
+ perror("failed to open test data file");
+ return NULL;
+ }
+ do {
+ char buf[256];
+ int i = fscanf(fp, " %256s ", buf);
+ if (i != 1)
+ break;
+ ++N;
+ bytes += strlen(buf);
+ } while (1);
+ rewind(fp);
+
+ rslt = malloc(N * (sizeof(*rslt) + 2) + bytes);
+ if (rslt) {
+ unsigned i;
+ char *cp = (char *)&rslt[N];
+
+ for (i = 0; i != N; ++i) {
+ rslt[i] = (struct pstring *)cp;
+ fscanf(fp, " %s ", rslt[i]->str);
+ rslt[i]->len = strlen(rslt[i]->str);
+ cp += rslt[i]->len + 2;
+ }
+ *count = N;
+ }
+ fclose(fp);
+ return rslt;
+}
+
+bool is_not_consistent(void *payload, void *context)
+{
+ return payload == NULL;
+}
+
+void test(void) {
+ HashTable *ht;
+ struct pstring **testdata;
+ unsigned N;
+ unsigned i;
+
+ srand(time(0));
+
+ testdata = LoadTestData(&N);
+
+ if (HashTableMake(&ht, 0, comp_func, 0) != 0)
+ return;
+
+ for (i = 0; i != N; ++i) {
+ const struct pstring *val = testdata[i % N];
+ HashTableIterator iter = HashTableLookup(ht, val->str, val->len);
+
+ if (HashTableIteratorHasValue(&iter)) {
+ HashTableRemove(ht, &iter, 0, 0);
+ }
+ else {
+ HashTableIteratorSetValue(&iter, val);
+ }
+ }
+#if 1
+ HashTableValidate(ht);
+#else
+ HashTableForEach(ht, print_key, 0);
+#endif
+ HashTableWhack(ht, 0, 0);
+}
+#endif
+
diff --git a/tools/bam-loader/hashtable.h b/tools/bam-loader/hashtable.h
new file mode 100644
index 0000000..e77ee9c
--- /dev/null
+++ b/tools/bam-loader/hashtable.h
@@ -0,0 +1,55 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct HashTable HashTable;
+typedef struct HashTableIterator HashTableIterator;
+
+typedef int (*HashTableKeyCompFunc)(const void *value, const void *key, uint32_t key_length, void *context);
+typedef void (*HashTableFreeFunc)(void *value, void *context);
+
+struct HashTableIterator {
+ const void *root;
+ const void *bucket;
+ uint64_t id;
+};
+
+rc_t HashTableMake(HashTable **rslt, uint32_t initialSize, HashTableKeyCompFunc kf, const void *context);
+
+void HashTableForEach(const HashTable *self, void (*fn)(void *value, void *context), void *context);
+
+bool HashTableDoUntil(const HashTable *self, bool (*fn)(void *value, void *context), void *context);
+
+HashTableIterator HashTableLookup(HashTable *self, const void *key, uint32_t key_length);
+
+void HashTableWhack(HashTable *self, HashTableFreeFunc fn, void *context);
+
+void HashTableRemove(HashTable *self, const HashTableIterator *iter, HashTableFreeFunc whack, void *context);
+
+bool HashTableIteratorHasValue(const HashTableIterator *iter);
+
+const void *HashTableIteratorGetValue(const HashTableIterator *iter);
+
+rc_t HashTableIteratorSetValue(HashTableIterator *iter, const void *value);
diff --git a/tools/bam-loader/loader-imp.c b/tools/bam-loader/loader-imp.c
new file mode 100644
index 0000000..1747156
--- /dev/null
+++ b/tools/bam-loader/loader-imp.c
@@ -0,0 +1,2097 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+/* #include "bam-load.vers.h" */
+
+#include <klib/callconv.h>
+#include <klib/data-buffer.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/sort.h>
+#include <klib/printf.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <kfs/pagefile.h>
+#include <kfs/pmem.h>
+#include <kdb/btree.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <align/dna-reverse-cmpl.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <kapp/loader-file.h>
+#include <kapp/loader-meta.h>
+#include <kapp/log-xml.h>
+#include <kapp/progressbar.h>
+
+#include <sysalloc.h>
+#include <atomic32.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <limits.h>
+#include <time.h>
+
+#include <align/bam.h>
+
+#include "Globals.h"
+#include "sequence-writer.h"
+#include "reference-writer.h"
+#include "alignment-writer.h"
+
+#define NUM_ID_SPACES (256u)
+
+#define MMA_NUM_CHUNKS_BITS (24u)
+#define MMA_NUM_SUBCHUNKS_BITS ((32u)-(MMA_NUM_CHUNKS_BITS))
+#define MMA_SUBCHUNK_SIZE (1u << MMA_NUM_CHUNKS_BITS)
+#define MMA_SUBCHUNK_COUNT (1u << MMA_NUM_SUBCHUNKS_BITS)
+
+typedef struct {
+ KFile *fp;
+ size_t elemSize;
+ uint64_t fsize;
+ struct mma_map_s {
+ struct mma_submap_s {
+ uint8_t *base;
+ KMMap *mmap;
+ } submap[MMA_SUBCHUNK_COUNT];
+ } map[NUM_ID_SPACES];
+} MMArray;
+
+#define FRAG_CHUNK_SIZE (128)
+typedef struct {
+ uint32_t primaryId[2];
+ uint32_t spotId;
+ uint32_t fragmentId;
+ uint8_t platform;
+ uint8_t pId_ext[2];
+ uint8_t spotId_ext;
+ uint8_t alignmentCount[2]; /* 0..254; 254: saturated max; 255: special meaning "too many" */
+ uint8_t unmated: 1,
+ pcr_dup: 1,
+ has_a_read: 1,
+ unaligned_1: 1,
+ unaligned_2: 1;
+} ctx_value_t;
+
+#define CTX_VALUE_SET_P_ID(O,N,V) do { int64_t tv = (V); (O).primaryId[N] = (uint32_t)tv; (O).pId_ext[N] = tv >> 32; } while(0);
+#define CTX_VALUE_GET_P_ID(O,N) ((((int64_t)((O).pId_ext[N])) << 32) | (O).primaryId[N])
+
+#define CTX_VALUE_SET_S_ID(O,V) do { int64_t tv = (V); (O).spotId = (uint32_t)tv; (O).spotId_ext = tv >> 32; } while(0);
+#define CTX_VALUE_GET_S_ID(O) ((((int64_t)(O).spotId_ext) << 32) | (O).spotId)
+
+typedef struct FragmentInfo {
+ uint64_t ti;
+ uint32_t readlen;
+ uint8_t aligned;
+ uint8_t is_bad;
+ uint8_t orientation;
+ uint8_t otherReadNo;
+ uint8_t sglen;
+ uint8_t cskey;
+} FragmentInfo;
+
+typedef struct context_t {
+ const KLoadProgressbar *progress[4];
+ KBTree *key2id[NUM_ID_SPACES];
+ char *key2id_names;
+ MMArray *id2value;
+ KMemBank *fragsBoth; /*** mate will be there soon ***/
+ KMemBank *fragsOne; /*** mate may not be found soon or even show up ***/
+ int64_t spotId;
+ int64_t primaryId;
+ int64_t secondId;
+ uint64_t alignCount;
+
+ uint32_t idCount[NUM_ID_SPACES];
+ uint32_t key2id_hash[NUM_ID_SPACES];
+
+ unsigned key2id_max;
+ unsigned key2id_name_max;
+ unsigned key2id_name_alloc;
+ unsigned key2id_count;
+
+ unsigned key2id_name[NUM_ID_SPACES];
+ /* this array is kept in name order */
+ /* this maps the names to key2id and idCount */
+ unsigned key2id_oid[NUM_ID_SPACES];
+
+ unsigned pass;
+ bool isColorSpace;
+} context_t;
+
+static char const *Print_ctx_value_t(ctx_value_t const *const self)
+{
+ static char buffer[4096];
+ rc_t rc = string_printf(buffer, sizeof(buffer), NULL, "pid: { %lu, %lu }, sid: %lu, fid: %u, alc: { %u, %u }, flg: %x", CTX_VALUE_GET_P_ID(*self, 0), CTX_VALUE_GET_P_ID(*self, 1), CTX_VALUE_GET_S_ID(*self), self->fragmentId, self->alignmentCount[0], self->alignmentCount[1], self->alignmentCount[2]);
+
+ if (rc)
+ return 0;
+ return buffer;
+}
+
+static rc_t MMArrayMake(MMArray **rslt, KFile *fp, uint32_t elemSize)
+{
+ MMArray *const self = calloc(1, sizeof(*self));
+
+ if (self == NULL)
+ return RC(rcExe, rcMemMap, rcConstructing, rcMemory, rcExhausted);
+ self->elemSize = (elemSize + 3) & ~(3u); /** align to 4 byte **/
+ self->fp = fp;
+ KFileAddRef(fp);
+ *rslt = self;
+ return 0;
+}
+
+#define PERF 0
+
+static rc_t MMArrayGet(MMArray *const self, void **const value, uint64_t const element)
+{
+ unsigned const bin_no = element >> 32;
+ unsigned const subbin = ((uint32_t)element) >> MMA_NUM_CHUNKS_BITS;
+ unsigned const in_bin = (uint32_t)element & (MMA_SUBCHUNK_SIZE - 1);
+
+ if (bin_no >= sizeof(self->map)/sizeof(self->map[0]))
+ return RC(rcExe, rcMemMap, rcConstructing, rcId, rcExcessive);
+
+ if (self->map[bin_no].submap[subbin].base == NULL) {
+ size_t const chunk = MMA_SUBCHUNK_SIZE * self->elemSize;
+ size_t const fsize = self->fsize + chunk;
+ rc_t rc = KFileSetSize(self->fp, fsize);
+
+ if (rc == 0) {
+ KMMap *mmap;
+
+ self->fsize = fsize;
+ rc = KMMapMakeRgnUpdate(&mmap, self->fp, self->fsize, chunk);
+ if (rc == 0) {
+ void *base;
+
+ rc = KMMapAddrUpdate(mmap, &base);
+ if (rc == 0) {
+#if PERF
+ static unsigned mapcount = 0;
+
+ (void)PLOGMSG(klogInfo, (klogInfo, "Number of mmaps: $(cnt)", "cnt=%u", ++mapcount));
+#endif
+ self->map[bin_no].submap[subbin].mmap = mmap;
+ self->map[bin_no].submap[subbin].base = base;
+
+ goto GET_MAP;
+ }
+ KMMapRelease(mmap);
+ }
+ }
+ return rc;
+ }
+GET_MAP:
+ *value = &self->map[bin_no].submap[subbin].base[(size_t)in_bin * self->elemSize];
+ return 0;
+}
+
+static void MMArrayWhack(MMArray *self)
+{
+ unsigned i;
+
+ for (i = 0; i != sizeof(self->map)/sizeof(self->map[0]); ++i) {
+ unsigned j;
+
+ for (j = 0; j != sizeof(self->map[0].submap)/sizeof(self->map[0].submap[0]); ++j) {
+ if (self->map[i].submap[j].mmap)
+ KMMapRelease(self->map[i].submap[j].mmap);
+ self->map[i].submap[j].mmap = NULL;
+ self->map[i].submap[j].base = NULL;
+ }
+ }
+ KFileRelease(self->fp);
+ free(self);
+}
+
+static rc_t OpenKBTree(KBTree **const rslt, unsigned n, unsigned max)
+{
+ size_t const cacheSize = (((G.cache_size - (G.cache_size / 2) - (G.cache_size / 8)) / max)
+ + 0xFFFFF) & ~((size_t)0xFFFFF);
+ KFile *file = NULL;
+ KDirectory *dir;
+ char fname[4096];
+ rc_t rc;
+
+ rc = KDirectoryNativeDir(&dir);
+ if (rc)
+ return rc;
+
+ rc = string_printf(fname, sizeof(fname), NULL, "%s/key2id.%u.%u", G.tmpfs, G.pid, n); if (rc) return rc;
+ rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+ KDirectoryRemove(dir, 0, fname);
+ KDirectoryRelease(dir);
+ if (rc == 0) {
+ rc = KBTreeMakeUpdate(rslt, file, cacheSize,
+ false, kbtOpaqueKey,
+ 1, 255, sizeof ( uint32_t ),
+ NULL
+ );
+ KFileRelease(file);
+#if PERF
+ if (rc == 0) {
+ static unsigned treecount = 0;
+
+ (void)PLOGMSG(klogInfo, (klogInfo, "Number of trees: $(cnt)", "cnt=%u", ++treecount));
+ }
+#endif
+ }
+ return rc;
+}
+
+static rc_t GetKeyIDOld(context_t *const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], unsigned const namelen)
+{
+ unsigned const keylen = strlen(key);
+ rc_t rc;
+ uint64_t tmpKey;
+
+ if (ctx->key2id_count == 0) {
+ rc = OpenKBTree(&ctx->key2id[0], 1, 1);
+ if (rc) return rc;
+ ctx->key2id_count = 1;
+ }
+ if (memcmp(key, name, keylen) == 0) {
+ /* qname starts with read group; no append */
+ tmpKey = ctx->idCount[0];
+ rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, name, namelen);
+ }
+ else {
+ char sbuf[4096];
+ char *buf = sbuf;
+ char *hbuf = NULL;
+ size_t bsize = sizeof(sbuf);
+ size_t actsize;
+
+ if (keylen + namelen + 2 > bsize) {
+ hbuf = malloc(bsize = keylen + namelen + 2);
+ if (hbuf == NULL)
+ return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+ buf = hbuf;
+ }
+ rc = string_printf(buf, bsize, &actsize, "%s\t%.*s", key, (int)namelen, name);
+
+ tmpKey = ctx->idCount[0];
+ rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, buf, actsize);
+ if (hbuf)
+ free(hbuf);
+ }
+ if (rc == 0) {
+ *rslt = tmpKey;
+ if (*wasInserted)
+ ++ctx->idCount[0];
+ }
+ return rc;
+}
+
+static unsigned HashKey(void const *key, unsigned keylen)
+{
+ /* There is nothing special about this hash. It was randomly generated. */
+ static const uint8_t T1[] = {
+ 64, 186, 39, 203, 54, 211, 98, 32, 26, 23, 219, 94, 77, 60, 56, 184,
+ 129, 242, 10, 91, 84, 192, 19, 197, 231, 133, 125, 244, 48, 176, 160, 164,
+ 17, 41, 57, 137, 44, 196, 116, 146, 105, 40, 122, 47, 220, 226, 213, 212,
+ 107, 191, 52, 144, 9, 145, 81, 101, 217, 206, 85, 134, 143, 58, 128, 20,
+ 236, 102, 83, 149, 148, 180, 167, 163, 12, 239, 31, 0, 73, 152, 1, 15,
+ 75, 200, 4, 165, 5, 66, 25, 111, 255, 70, 174, 151, 96, 126, 147, 34,
+ 112, 161, 127, 181, 237, 78, 37, 74, 222, 123, 21, 132, 95, 51, 141, 45,
+ 61, 131, 193, 68, 62, 249, 178, 33, 7, 195, 228, 82, 27, 46, 254, 90,
+ 185, 240, 246, 124, 205, 182, 42, 22, 198, 69, 166, 92, 169, 136, 223, 245,
+ 118, 97, 115, 80, 252, 209, 49, 79, 221, 38, 28, 35, 36, 208, 187, 248,
+ 158, 201, 202, 168, 2, 18, 189, 119, 216, 214, 11, 6, 89, 16, 229, 109,
+ 120, 43, 162, 106, 204, 8, 199, 235, 142, 210, 86, 153, 227, 230, 24, 100,
+ 224, 113, 190, 243, 218, 215, 225, 173, 99, 238, 138, 59, 183, 154, 171, 232,
+ 157, 247, 233, 67, 88, 50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+ 155, 72, 207, 250, 159, 194, 177, 130, 135, 87, 71, 175, 14, 55, 172, 121,
+ 234, 13, 30, 241, 93, 188, 53, 114, 76, 29, 65, 3, 179, 108, 63, 139
+ };
+ unsigned h = 0x55;
+ unsigned i = keylen;
+
+ do { h = T1[h ^ ((uint8_t)i)]; } while ((i >>= 8) != 0);
+
+ for (i = 0; i != keylen; ++i)
+ h = T1[h ^ ((uint8_t const *)key)[i]];
+
+ return h;
+}
+
+static rc_t GetKeyID(context_t *const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], unsigned const namelen)
+{
+ if (ctx->key2id_max == 1)
+ return GetKeyIDOld(ctx, rslt, wasInserted, key, name, namelen);
+ else {
+ unsigned const keylen = strlen(key);
+ unsigned const h = HashKey(key, keylen);
+ unsigned f;
+ unsigned e = ctx->key2id_count;
+ uint64_t tmpKey;
+
+ *rslt = 0;
+ {{
+ uint32_t const bucket_value = ctx->key2id_hash[h];
+ unsigned const n = (uint8_t) bucket_value;
+ unsigned const i1 = (uint8_t)(bucket_value >> 8);
+ unsigned const i2 = (uint8_t)(bucket_value >> 16);
+ unsigned const i3 = (uint8_t)(bucket_value >> 24);
+
+ if (n > 0 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i1]) == 0) {
+ f = i1;
+ /*
+ ctx->key2id_hash[h] = (i3 << 24) | (i2 << 16) | (i1 << 8) | n;
+ */
+ goto GET_ID;
+ }
+ if (n > 1 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i2]) == 0) {
+ f = i2;
+ ctx->key2id_hash[h] = (i3 << 24) | (i1 << 16) | (i2 << 8) | n;
+ goto GET_ID;
+ }
+ if (n > 2 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i3]) == 0) {
+ f = i3;
+ ctx->key2id_hash[h] = (i2 << 24) | (i1 << 16) | (i3 << 8) | n;
+ goto GET_ID;
+ }
+ }}
+ f = 0;
+ while (f < e) {
+ unsigned const m = (f + e) / 2;
+ unsigned const oid = ctx->key2id_oid[m];
+ int const diff = strcmp(key, ctx->key2id_names + ctx->key2id_name[oid]);
+
+ if (diff < 0)
+ e = m;
+ else if (diff > 0)
+ f = m + 1;
+ else {
+ f = oid;
+ goto GET_ID;
+ }
+ }
+ if (ctx->key2id_count < ctx->key2id_max) {
+ unsigned const name_max = ctx->key2id_name_max + keylen + 1;
+ KBTree *tree;
+ rc_t rc = OpenKBTree(&tree, ctx->key2id_count + 1, 1); /* ctx->key2id_max); */
+
+ if (rc) return rc;
+
+ if (ctx->key2id_name_alloc < name_max) {
+ unsigned alloc = ctx->key2id_name_alloc;
+ void *tmp;
+
+ if (alloc == 0)
+ alloc = 4096;
+ while (alloc < name_max)
+ alloc <<= 1;
+ tmp = realloc(ctx->key2id_names, alloc);
+ if (tmp == NULL)
+ return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+ ctx->key2id_names = tmp;
+ ctx->key2id_name_alloc = alloc;
+ }
+ if (f < ctx->key2id_count) {
+ memmove(&ctx->key2id_oid[f + 1], &ctx->key2id_oid[f], (ctx->key2id_count - f) * sizeof(ctx->key2id_oid[f]));
+ }
+ ctx->key2id_oid[f] = ctx->key2id_count;
+ ++ctx->key2id_count;
+ f = ctx->key2id_oid[f];
+ ctx->key2id_name[f] = ctx->key2id_name_max;
+ ctx->key2id_name_max = name_max;
+
+ memcpy(&ctx->key2id_names[ctx->key2id_name[f]], key, keylen + 1);
+ ctx->key2id[f] = tree;
+ ctx->idCount[f] = 0;
+ if ((uint8_t)ctx->key2id_hash[h] < 3) {
+ unsigned const n = (uint8_t)ctx->key2id_hash[h] + 1;
+
+ ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | n;
+ }
+ else {
+ /* the hash function isn't working too well
+ * keep the 3 mru
+ */
+ ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | 3;
+ }
+ GET_ID:
+ tmpKey = ctx->idCount[f];
+ rc = KBTreeEntry(ctx->key2id[f], &tmpKey, wasInserted, name, namelen);
+ if (rc == 0) {
+ *rslt = (((uint64_t)f) << 32) | tmpKey;
+ if (*wasInserted)
+ ++ctx->idCount[f];
+ assert(tmpKey < ctx->idCount[f]);
+ }
+ return rc;
+ }
+ return RC(rcExe, rcTree, rcAllocating, rcConstraint, rcViolated);
+ }
+}
+
+static rc_t OpenMMapFile(context_t *const ctx, KDirectory *const dir)
+{
+ KFile *file = NULL;
+ char fname[4096];
+ rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/id2value.%u", G.tmpfs, G.pid);
+
+ if (rc)
+ return rc;
+
+ rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+ KDirectoryRemove(dir, 0, fname);
+ if (rc == 0)
+ rc = MMArrayMake(&ctx->id2value, file, sizeof(ctx_value_t));
+ KFileRelease(file);
+ return rc;
+}
+
+static rc_t OpenMBankFile(context_t *const ctx, KDirectory *const dir, int which, size_t climit)
+{
+ KFile *file = NULL;
+ char fname[4096];
+ char const *const suffix = which == 1 ? "One" : "Both";
+ KMemBank **const mbank = which == 1 ? &ctx->fragsOne : &ctx->fragsBoth;
+ rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/frag_data%s.%u", G.tmpfs, suffix, G.pid);
+
+ if (rc)
+ return rc;
+
+ rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+ KDirectoryRemove(dir, 0, fname);
+ if (rc == 0) {
+ KPageFile *backing;
+
+ rc = KPageFileMakeUpdate(&backing, file, climit, false);
+ KFileRelease(file);
+ if (rc == 0) {
+ rc = KMemBankMake(mbank, FRAG_CHUNK_SIZE, 0, backing);
+ KPageFileRelease(backing);
+ }
+ }
+ return rc;
+}
+
+static rc_t SetupContext(context_t *ctx, unsigned numfiles)
+{
+ rc_t rc = 0;
+
+ memset(ctx, 0, sizeof(*ctx));
+
+ if (G.mode == mode_Archive) {
+ KDirectory *dir;
+ size_t fragSizeBoth; /*** temporary hold for first side of mate pair with both sides aligned**/
+ size_t fragSizeOne; /*** temporary hold for first side of mate pair with one side aligned**/
+
+ fragSizeBoth = (G.cache_size / 8);
+ fragSizeOne = (G.cache_size / 2);
+
+ rc = KLoadProgressbar_Make(&ctx->progress[0], 0); if (rc) return rc;
+ rc = KLoadProgressbar_Make(&ctx->progress[1], 0); if (rc) return rc;
+ rc = KLoadProgressbar_Make(&ctx->progress[2], 0); if (rc) return rc;
+ rc = KLoadProgressbar_Make(&ctx->progress[3], 0); if (rc) return rc;
+
+ KLoadProgressbar_Append(ctx->progress[0], 100 * numfiles);
+
+ rc = KDirectoryNativeDir(&dir);
+ if (rc == 0)
+ rc = OpenMMapFile(ctx, dir);
+ if (rc == 0)
+ rc = OpenMBankFile(ctx, dir, 0, fragSizeBoth);
+ if (rc == 0)
+ rc = OpenMBankFile(ctx, dir, 1, fragSizeOne);
+ KDirectoryRelease(dir);
+ }
+ return rc;
+}
+
+static void ContextReleaseMemBank(context_t *ctx)
+{
+ KMemBankRelease(ctx->fragsOne);
+ ctx->fragsOne = NULL;
+ KMemBankRelease(ctx->fragsBoth);
+ ctx->fragsBoth = NULL;
+}
+
+static void ContextRelease(context_t *ctx)
+{
+ KLoadProgressbar_Release(ctx->progress[0], true);
+ KLoadProgressbar_Release(ctx->progress[1], true);
+ KLoadProgressbar_Release(ctx->progress[2], true);
+ KLoadProgressbar_Release(ctx->progress[3], true);
+ MMArrayWhack(ctx->id2value);
+}
+
+static
+void COPY_QUAL(uint8_t D[], uint8_t const S[], unsigned const L, bool const R)
+{
+ if (R) {
+ unsigned i;
+ unsigned j;
+
+ for (i = 0, j = L - 1; i != L; ++i, --j)
+ D[i] = S[j];
+ }
+ else
+ memcpy(D, S, L);
+}
+
+static
+void COPY_READ(INSDC_dna_text D[], INSDC_dna_text const S[], unsigned const L, bool const R)
+{
+ static INSDC_dna_text const compl[] = {
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , '.', 0 ,
+ '0', '1', '2', '3', 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 'T', 'V', 'G', 'H', 0 , 0 , 'C',
+ 'D', 0 , 0 , 'M', 0 , 'K', 'N', 0 ,
+ 0 , 0 , 'Y', 'S', 'A', 'A', 'B', 'W',
+ 0 , 'R', 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 'T', 'V', 'G', 'H', 0 , 0 , 'C',
+ 'D', 0 , 0 , 'M', 0 , 'K', 'N', 0 ,
+ 0 , 0 , 'Y', 'S', 'A', 'A', 'B', 'W',
+ 0 , 'R', 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
+ };
+ if (R) {
+ unsigned i;
+ unsigned j;
+
+ for (i = 0, j = L - 1; i != L; ++i, --j)
+ D[i] = compl[((uint8_t const *)S)[j]];
+ }
+ else
+ memcpy(D, S, L);
+}
+
+static rc_t OpenBAM(const BAMFile **bam, VDatabase *db, const char bamFile[])
+{
+ rc_t rc = BAMFileMakeWithHeader(bam, G.headerText, bamFile);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open '$(file)'", "file=%s", bamFile));
+ }
+ else if (db) {
+ KMetadata *dbmeta;
+
+ rc = VDatabaseOpenMetadataUpdate(db, &dbmeta);
+ if (rc == 0) {
+ KMDataNode *node;
+
+ rc = KMetadataOpenNodeUpdate(dbmeta, &node, "BAM_HEADER");
+ KMetadataRelease(dbmeta);
+ if (rc == 0) {
+ char const *header;
+ size_t size;
+
+ rc = BAMFileGetHeaderText(*bam, &header, &size);
+ if (rc == 0) {
+ rc = KMDataNodeWrite(node, header, size);
+ }
+ KMDataNodeRelease(node);
+ }
+ }
+ }
+
+ return rc;
+}
+
+static rc_t VerifyReferences(BAMFile const *bam, Reference const *ref)
+{
+ rc_t rc = 0;
+ uint32_t n;
+ unsigned i;
+
+ BAMFileGetRefSeqCount(bam, &n);
+ for (i = 0; i != n; ++i) {
+ BAMRefSeq const *refSeq;
+
+ BAMFileGetRefSeq(bam, i, &refSeq);
+ if (G.refFilter && strcmp(refSeq->name, G.refFilter) != 0)
+ continue;
+
+ rc = ReferenceVerify(ref, refSeq->name, refSeq->length, refSeq->checksum);
+ if (rc) {
+ if (GetRCObject(rc) == rcChecksum && GetRCState(rc) == rcUnequal) {
+#if NCBI
+ (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); checksums do not match", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+#endif
+ }
+ else
+ if (GetRCObject(rc) == rcSize && GetRCState(rc) == rcUnequal) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); lengths do not match", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+ }
+ else if (GetRCObject(rc) == rcSize && GetRCState(rc) == rcEmpty) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); fasta file is empty", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+ }
+ else if (GetRCObject(rc) == rcId && GetRCState(rc) == rcNotFound) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); no match found", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+ }
+ else {
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "Reference: '$(name)', Length: $(len); error", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+ }
+ }
+ else if (G.onlyVerifyReferences) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Reference: '$(name)', Length: $(len); match found", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+ }
+ }
+ return 0;
+}
+
+static uint8_t GetMapQ(BAMAlignment const *rec)
+{
+ uint8_t mapQ;
+
+ BAMAlignmentGetMapQuality(rec, &mapQ);
+ return mapQ;
+}
+
+static void EditAlignedQualities(uint8_t qual[], bool const hasMismatch[], unsigned readlen)
+{
+ unsigned i;
+
+ for (i = 0; i < readlen; ++i) {
+ uint8_t const q = hasMismatch[i] ? G.alignedQualValue : qual[i];
+
+ qual[i] = q;
+ }
+}
+
+static void EditUnalignedQualities(uint8_t qual[], bool const hasMismatch[], unsigned readlen)
+{
+ unsigned i;
+
+ for (i = 0; i < readlen; ++i) {
+ uint8_t const q = (qual[i] & 0x7F) | (hasMismatch[i] ? 0x80 : 0);
+
+ qual[i] = q;
+ }
+}
+
+static void AlignmentRecordInit(AlignmentRecord *self, void *buffer, unsigned readlen, char **endp)
+{
+ memset(self, 0, sizeof(*self));
+
+ self->data.seq_read_id.buffer = &self->read_id;
+ self->data.seq_read_id.elements = 1;
+ self->data.ref_id.buffer = &self->ref_id;
+ self->data.ref_id.elements = 1;
+ if (G.expectUnsorted) {
+ self->data.ref_start.buffer = &self->ref_start;
+ self->data.ref_start.elements = 1;
+ }
+ else {
+ self->data.global_ref_start.buffer = &self->global_ref_start;
+ self->data.global_ref_start.elements = 1;
+ }
+ self->data.ref_orientation.buffer = &self->ref_orientation;
+ self->data.ref_orientation.elements = 1;
+ self->data.mapq.buffer = &self->mapq;
+ self->data.mapq.elements = 1;
+ self->data.tmp_key_id.buffer = &self->tmp_key_id;
+ self->data.tmp_key_id.elements = 1;
+
+ self->data.read_start.buffer = &self->read_start;
+ self->data.read_start.elements = 1;
+ self->data.read_len.buffer = &self->read_len;
+ self->data.read_len.elements = 1;
+
+ self->data.mate_ref_orientation.buffer = &self->mate_ref_orientation;
+ self->data.mate_ref_orientation.elements = 1;
+ self->data.mate_ref_id.buffer = &self->mate_ref_id;
+ self->data.mate_ref_id.elements = 1;
+ self->data.mate_ref_pos.buffer = &self->mate_ref_pos;
+ self->data.mate_ref_pos.elements = 1;
+ self->data.mate_align_id.buffer = &self->mate_align_id;
+ self->data.mate_align_id.elements = 1;
+ self->data.template_len.buffer = &self->template_len;
+ self->data.template_len.elements = 1;
+
+ self->data.ref_offset.buffer = (int32_t *)buffer;
+ self->data.has_mismatch.buffer = (bool *)&AR_OFFSET(*self)[readlen];
+ self->data.has_mismatch.elements = readlen;
+ self->data.has_ref_offset.buffer = &AR_HAS_MISMATCH(*self)[readlen];
+ self->data.has_ref_offset.elements = readlen;
+ self->data.mismatch.buffer = (char *)&AR_HAS_OFFSET(*self)[readlen];
+
+ *endp = (char *)&AR_MISMATCH(*self)[readlen];
+}
+
+static bool platform_cmp(char const platform[], char const test[])
+{
+ unsigned i;
+
+ for (i = 0; ; ++i) {
+ int ch1 = test[i];
+ int ch2 = toupper(platform[i]);
+
+ if (ch1 != ch2)
+ break;
+ if (ch1 == 0)
+ return true;
+ }
+ return false;
+}
+
+static
+INSDC_SRA_platform_id GetINSDCPlatform(BAMFile const *bam, char const name[]) {
+ if (name) {
+ BAMReadGroup const *rg;
+
+ BAMFileGetReadGroupByName(bam, name, &rg);
+ if (rg && rg->platform) {
+ switch (toupper(rg->platform[0])) {
+ case 'C':
+ if (platform_cmp(rg->platform, "COMPLETE GENOMICS"))
+ return SRA_PLATFORM_COMPLETE_GENOMICS;
+ if (platform_cmp(rg->platform, "CAPILLARY"))
+ return SRA_PLATFORM_SANGER;
+ break;
+ case 'H':
+ if (platform_cmp(rg->platform, "HELICOS"))
+ return SRA_PLATFORM_HELICOS;
+ break;
+ case 'I':
+ if (platform_cmp(rg->platform, "ILLUMINA"))
+ return SRA_PLATFORM_ILLUMINA;
+ if (platform_cmp(rg->platform, "IONTORRENT"))
+ return SRA_PLATFORM_ION_TORRENT;
+ break;
+ case 'L':
+ if (platform_cmp(rg->platform, "LS454"))
+ return SRA_PLATFORM_454;
+ break;
+ case 'P':
+ if (platform_cmp(rg->platform, "PACBIO"))
+ return SRA_PLATFORM_PACBIO_SMRT;
+ break;
+ case 'S':
+ if (platform_cmp(rg->platform, "SOLID"))
+ return SRA_PLATFORM_ABSOLID;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ return SRA_PLATFORM_UNDEFINED;
+}
+
+static
+rc_t CheckLimitAndLogError(void)
+{
+ ++G.errCount;
+ if (G.maxErrCount > 0 && G.errCount > G.maxErrCount) {
+ (void)PLOGERR(klogErr, (klogErr, RC(rcAlign, rcFile, rcReading, rcError, rcExcessive), "Number of errors $(cnt) exceeds limit of $(max): Exiting", "cnt=%u,max=%u", G.errCount, G.maxErrCount));
+ return RC(rcAlign, rcFile, rcReading, rcError, rcExcessive);
+ }
+ return 0;
+}
+
+static
+void RecordNoMatch(char const readName[], char const refName[], uint32_t const refPos)
+{
+ if (G.noMatchLog) {
+ static uint64_t lpos = 0;
+ char logbuf[256];
+ size_t len;
+
+ if (string_printf(logbuf, sizeof(logbuf), &len, "%s\t%s\t%u\n", readName, refName, refPos) == 0) {
+ KFileWrite(G.noMatchLog, lpos, logbuf, len, NULL);
+ lpos += len;
+ }
+ }
+}
+
+static
+rc_t LogNoMatch(char const readName[], char const refName[], unsigned rpos, unsigned matches)
+{
+ rc_t const rc = CheckLimitAndLogError();
+ static unsigned count = 0;
+
+ ++count;
+ if (rc) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+ "occurred=%u", count));
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+ "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+ }
+ else if (G.maxWarnCount_NoMatch == 0 || count < G.maxWarnCount_NoMatch)
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+ "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+ return rc;
+}
+
+static
+rc_t LogDupConflict(char const readName[])
+{
+ rc_t const rc = CheckLimitAndLogError();
+ static unsigned count = 0;
+
+ ++count;
+ if (rc) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+ "occurred=%u", count));
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+ "name=%s", readName));
+ }
+ else if (G.maxWarnCount_DupConflict == 0 || count < G.maxWarnCount_DupConflict)
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+ "name=%s", readName));
+ return rc;
+}
+
+static rc_t ProcessBAM(char const bamFile[], context_t *ctx, VDatabase *db,
+ Reference *ref, Sequence *seq, Alignment *align,
+ bool *had_alignments, bool *had_sequences)
+{
+ const BAMFile *bam;
+ const BAMAlignment *rec;
+ KDataBuffer buf;
+ KDataBuffer fragBuf;
+ KDataBuffer cigBuf;
+ rc_t rc;
+ int32_t lastRefSeqId = -1;
+ size_t rsize;
+ uint64_t keyId = 0;
+ uint64_t reccount = 0;
+ SequenceRecord srec;
+ char spotGroup[512];
+ size_t namelen;
+ unsigned progress = 0;
+ unsigned warned = 0;
+ long fcountBoth=0;
+ long fcountOne=0;
+ int skipRefSeqID = -1;
+ uint64_t recordsProcessed = 0;
+ uint64_t filterFlagConflictRecords=0; /*** counts number of conflicts between flags 0x400 and 0x200 ***/
+#define MAX_WARNINGS_FLAG_CONFLICT 10000 /*** maximum errors to report ***/
+
+ bool isColorSpace = false;
+ bool isNotColorSpace = G.noColorSpace;
+ char alignGroup[32];
+ size_t alignGroupLen;
+
+ rc = OpenBAM(&bam, db, bamFile);
+ if (rc) return rc;
+ if (!G.noVerifyReferences && ref != NULL) {
+ rc = VerifyReferences(bam, ref);
+ if (G.onlyVerifyReferences) {
+ BAMFileRelease(bam);
+ return rc;
+ }
+ }
+ if (ctx->key2id_max == 0) {
+ uint32_t rgcount;
+ unsigned rgi;
+
+ BAMFileGetReadGroupCount(bam, &rgcount);
+ if (rgcount > (sizeof(ctx->key2id)/sizeof(ctx->key2id[0]) - 1))
+ ctx->key2id_max = 1;
+ else
+ ctx->key2id_max = sizeof(ctx->key2id)/sizeof(ctx->key2id[0]);
+
+ for (rgi = 0; rgi != rgcount; ++rgi) {
+ BAMReadGroup const *rg;
+
+ BAMFileGetReadGroup(bam, rgi, &rg);
+ if (rg && rg->platform && platform_cmp(rg->platform, "CAPILLARY")) {
+ G.hasTI = true;
+ break;
+ }
+ }
+ }
+ memset(&srec, 0, sizeof(srec));
+
+ rc = KDataBufferMake(&cigBuf, 32, 0);
+ if (rc)
+ return rc;
+
+ rc = KDataBufferMake(&fragBuf, 8, FRAG_CHUNK_SIZE);
+ if (rc)
+ return rc;
+
+ rc = KDataBufferMake(&buf, (sizeof(int32_t) + sizeof(bool) * 2 + sizeof(char) * 2 + sizeof(uint8_t))*8, 0);
+ if (rc)
+ return rc;
+
+ if (rc == 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Loading '$(file)'", "file=%s", bamFile));
+ }
+ while (rc == 0 && (rc = Quitting()) == 0) {
+ bool aligned;
+ AlignmentRecord data;
+ uint32_t readlen;
+ uint16_t flags;
+ int64_t rpos=0;
+ char *seqDNA;
+ const BAMRefSeq *refSeq;
+ ctx_value_t *value;
+ bool wasInserted;
+ int32_t refSeqId=-1;
+ uint8_t *qual;
+ bool mated;
+ const char *name;
+ char cskey = 0;
+ bool originally_aligned;
+ bool isPrimary;
+ uint32_t opCount;
+ bool hasCG;
+ uint64_t ti = 0;
+ uint32_t csSeqLen = 0;
+
+ rc = BAMFileRead(bam, &rec);
+ if (rc) {
+ if (GetRCModule(rc) == rcAlign && GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+ rc = 0;
+ break;
+ }
+ if ((unsigned)(BAMFileGetProportionalPosition(bam) * 100.0) > progress) {
+ unsigned new_value = BAMFileGetProportionalPosition(bam) * 100.0;
+ KLoadProgressbar_Process(ctx->progress[0], new_value - progress, false);
+ progress = new_value;
+ }
+
+
+ /**************************************************************/
+ if (!G.noColorSpace) {
+ if (BAMAlignmentHasColorSpace(rec)) {/*BAM*/
+ if (isNotColorSpace) {
+ MIXED_BASE_AND_COLOR:
+ rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains base space and color space", "file=%s", bamFile));
+ goto LOOP_END;
+ }
+ ctx->isColorSpace = isColorSpace = true;
+ }
+ else if (isColorSpace)
+ goto MIXED_BASE_AND_COLOR;
+ else
+ isNotColorSpace = true;
+ }
+ hasCG = BAMAlignmentHasCGData(rec);/*BAM*/
+ if (hasCG) {
+ BAMAlignmentGetCigarCount(rec, &opCount);/*BAM*/
+ rc = KDataBufferResize(&cigBuf, opCount * 2 + 5);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+ goto LOOP_END;
+ }
+
+ rc = KDataBufferResize(&buf, readlen = 35);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+ goto LOOP_END;
+ }
+
+ AlignmentRecordInit(&data, buf.base, readlen, &seqDNA);
+ qual = (uint8_t *)&seqDNA[readlen];
+ }
+ else {
+ uint32_t const *tmp;
+
+ BAMAlignmentGetRawCigar(rec, &tmp, &opCount);/*BAM*/
+ rc = KDataBufferResize(&cigBuf, opCount);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+ goto LOOP_END;
+ }
+ memcpy(cigBuf.base, tmp, opCount * sizeof(uint32_t));
+
+ BAMAlignmentGetReadLength(rec, &readlen);/*BAM*/
+ if (isColorSpace) {
+ BAMAlignmentGetCSSeqLen(rec, &csSeqLen);
+ if (readlen != csSeqLen && readlen != 0) {
+ rc = RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+ (void)LOGERR(klogErr, rc, "Sequence length and CS Sequence length are not equal");
+ goto LOOP_END;
+ }
+ }
+ else if (readlen == 0) {
+ }
+ rc = KDataBufferResize(&buf, readlen | csSeqLen);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+ goto LOOP_END;
+ }
+
+ AlignmentRecordInit(&data, buf.base, readlen | csSeqLen, &seqDNA);
+ qual = (uint8_t *)&seqDNA[readlen | csSeqLen];
+ }
+ BAMAlignmentGetSequence(rec, seqDNA);/*BAM*/
+ if (G.useQUAL) {
+ uint8_t const *squal;
+
+ BAMAlignmentGetQuality(rec, &squal);/*BAM*/
+ memcpy(qual, squal, readlen);
+ }
+ else {
+ uint8_t const *squal;
+ uint8_t qoffset = 0;
+ unsigned i;
+
+ rc = BAMAlignmentGetQuality2(rec, &squal, &qoffset);/*BAM*/
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of original quality does not match sequence", "name=%s", name));
+ goto LOOP_END;
+ }
+ if (qoffset) {
+ for (i = 0; i != readlen; ++i)
+ qual[i] = squal[i] - qoffset;
+ }
+ else
+ memcpy(qual, squal, readlen);
+ }
+ if (hasCG) {
+ rc = BAMAlignmentGetCGSeqQual(rec, seqDNA, qual);/*BAM*/
+ if (rc == 0)
+ rc = BAMAlignmentGetCGCigar(rec, cigBuf.base, cigBuf.elem_count, &opCount);/*BAM*/
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to read CG data");
+ goto LOOP_END;
+ }
+ }
+ if (G.hasTI) {
+ rc = BAMAlignmentGetTI(rec, &ti);/*BAM*/
+ if (rc)
+ ti = 0;
+ rc = 0;
+ }
+ data.data.align_group.buffer = alignGroup;
+ if (BAMAlignmentGetCGAlignGroup(rec, alignGroup, sizeof(alignGroup), &alignGroupLen) == 0)/*BAM*/
+ data.data.align_group.elements = alignGroupLen;
+ else
+ data.data.align_group.elements = 0;
+
+ AR_MAPQ(data) = GetMapQ(rec);
+ BAMAlignmentGetFlags(rec, &flags);/*BAM*/
+ BAMAlignmentGetReadName2(rec, &name, &namelen);/*BAM*/
+ {{
+ char const *rgname;
+
+ BAMAlignmentGetReadGroupName(rec, &rgname);/*BAM*/
+ if (rgname)
+ strcpy(spotGroup, rgname);
+ else
+ spotGroup[0] = '\0';
+ }}
+ AR_REF_ORIENT(data) = (flags & BAMFlags_SelfIsReverse) == 0 ? false : true;/*BAM*/
+ isPrimary = (flags & BAMFlags_IsNotPrimary) == 0 ? true : false;/*BAM*/
+ if (G.noSecondary && !isPrimary)
+ goto LOOP_END;
+ originally_aligned = (flags & BAMFlags_SelfIsUnmapped) == 0;/*BAM*/
+ aligned = originally_aligned && (AR_MAPQ(data) >= G.minMapQual);
+
+ if (aligned && align == NULL) {
+ rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains aligned records", "file=%s", bamFile));
+ goto LOOP_END;
+ }
+ while (aligned) {
+ BAMAlignmentGetPosition(rec, &rpos);/*BAM*/
+ BAMAlignmentGetRefSeqId(rec, &refSeqId);/*BAM*/
+ if (rpos >= 0 && refSeqId >= 0) {
+ if (refSeqId == skipRefSeqID)
+ goto LOOP_END;
+ if (refSeqId == lastRefSeqId)
+ break;
+ refSeq = NULL;
+ BAMFileGetRefSeqById(bam, refSeqId, &refSeq);/*BAM*/
+ if (refSeq == NULL) {
+ rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "File '$(file)': Spot '$(name)' refers to an unknown Reference number $(refSeqId)", "file=%s,refSeqId=%i,name=%s", bamFile, (int)refSeqId, name));
+ rc = CheckLimitAndLogError();
+ goto LOOP_END;
+ }
+ else {
+ if (G.refFilter && strcmp(G.refFilter, refSeq->name) != 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Skipping Reference '$(name)'", "name=%s", refSeq->name));
+ skipRefSeqID = refSeqId;
+ goto LOOP_END;
+ }
+
+ rc = ReferenceSetFile(ref, refSeq->name, refSeq->length, refSeq->checksum);
+ if (rc == 0) {
+ lastRefSeqId = refSeqId;
+ break;
+ }
+ if (GetRCObject(rc) == rcConstraint && GetRCState(rc) == rcViolated) {
+ int const level = G.limit2config ? klogWarn : klogErr;
+
+ (void)PLOGMSG(level, (level, "Could not find a Reference to match { name: '$(name)', length: $(rlen) }", "name=%s,rlen=%u", refSeq->name, (unsigned)refSeq->length));
+ }
+ else if (!G.limit2config)
+ (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)': Spot '$(sname)' refers to an unknown Reference '$(rname)'", "file=%s,rname=%s,sname=%s", bamFile, refSeq->name, name));
+ if (G.limit2config)
+ rc = 0;
+ goto LOOP_END;
+ }
+ }
+ else if (refSeqId < 0) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' was marked aligned, but reference id = $(id) is invalid", "name=%.*s,id=%i", namelen, name, refSeqId));
+ if ((rc = CheckLimitAndLogError()) != 0) goto LOOP_END;
+ }
+ else {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' was marked aligned, but reference position = $(pos) is invalid", "name=%.*s,pos=%i", namelen, name, rpos));
+ if ((rc = CheckLimitAndLogError()) != 0) goto LOOP_END;
+ }
+
+ aligned = false;
+ }
+ if (!aligned && (G.refFilter != NULL || G.limit2config))
+ goto LOOP_END;
+
+ rc = GetKeyID(ctx, &keyId, &wasInserted, spotGroup, name, namelen);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KBTreeEntry: failed on key '$(key)'", "key=%.*s", namelen, name));
+ goto LOOP_END;
+ }
+ rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "MMArrayGet: failed on id '$(id)'", "id=%u", keyId));
+ goto LOOP_END;
+ }
+
+ AR_KEY(data) = keyId;
+
+ mated = false;
+ if (flags & BAMFlags_WasPaired) {/*BAM*/
+ if ((flags & BAMFlags_IsFirst) != 0)/*BAM*/
+ AR_READNO(data) |= 1;
+ if ((flags & BAMFlags_IsSecond) != 0)/*BAM*/
+ AR_READNO(data) |= 2;
+ switch (AR_READNO(data)) {
+ case 1:
+ case 2:
+ mated = true;
+ break;
+ case 0:
+ if ((warned & 1) == 0) {
+ (void)LOGMSG(klogWarn, "Spots without fragment info have been encountered");
+ warned |= 1;
+ }
+ break;
+ case 3:
+ if ((warned & 2) == 0) {
+ (void)LOGMSG(klogWarn, "Spots with more than two fragments have been encountered");
+ warned |= 2;
+ }
+ break;
+ }
+ }
+ if (!mated)
+ AR_READNO(data) = 1;
+
+ if (wasInserted) {
+ memset(value, 0, sizeof(*value));
+ value->unmated = !mated;
+ value->pcr_dup = (flags & BAMFlags_IsDuplicate) == 0 ? 0 : 1;/*BAM*/
+ value->platform = GetINSDCPlatform(bam, spotGroup);
+ }
+ else {
+ if (!G.acceptBadDups && value->pcr_dup != ((flags & BAMFlags_IsDuplicate) == 0 ? 0 : 1)) {/*BAM*/
+ rc = LogDupConflict(name);
+ goto LOOP_END; /* TODO: is this correct? */
+ }
+ value->pcr_dup &= (flags & BAMFlags_IsDuplicate) == 0 ? 0 : 1;/*BAM*/
+ if (mated && value->unmated) {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Spot '$(name)', which was first seen without mate info, now has mate info",
+ "name=%s", name));
+ rc = CheckLimitAndLogError();
+ goto LOOP_END;
+ }
+ else if (!mated && !value->unmated) {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+ "Spot '$(name)', which was first seen with mate info, now has no mate info",
+ "name=%s", name));
+ rc = CheckLimitAndLogError();
+ goto LOOP_END;
+ }
+ }
+
+ ++recordsProcessed;
+
+ if (isPrimary) {
+ switch (AR_READNO(data)) {
+ case 1:
+ if (CTX_VALUE_GET_P_ID(*value, 0) != 0)
+ isPrimary = false;
+ else if (aligned && value->unaligned_1) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Read 1 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+ isPrimary = false;
+ }
+ break;
+ case 2:
+ if (CTX_VALUE_GET_P_ID(*value, 1) != 0)
+ isPrimary = false;
+ else if (aligned && value->unaligned_2) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Read 2 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+ isPrimary = false;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ data.isPrimary = isPrimary;
+ if (aligned) {
+ uint32_t matches = 0;
+
+ rc = ReferenceRead(ref, &data, rpos, cigBuf.base, opCount, seqDNA, readlen, &matches);
+ if (rc) {
+ aligned = false;
+
+ if ( (GetRCState(rc) == rcViolated && GetRCObject(rc) == rcConstraint)
+ || (GetRCState(rc) == rcExcessive && GetRCObject(rc) == rcRange))
+ {
+ RecordNoMatch(name, refSeq->name, rpos);
+ }
+ if (GetRCState(rc) == rcViolated && GetRCObject(rc) == rcConstraint) {
+ rc = LogNoMatch(name, refSeq->name, (unsigned)rpos, (unsigned)matches);
+ }
+ else if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInvalid) {
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': bad alignment to reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+ CheckLimitAndLogError();
+ }
+ else if (GetRCObject(rc) == rcData) {
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': bad alignment to reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+ rc = CheckLimitAndLogError();
+ }
+ else {
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': error reading reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+ rc = CheckLimitAndLogError();
+ }
+ if (rc) goto LOOP_END;
+ }
+ }
+ if (isColorSpace) {
+ /* must be after ReferenceRead */
+ BAMAlignmentGetCSKey(rec, &cskey);/*BAM*/
+ BAMAlignmentGetCSSequence(rec, seqDNA, csSeqLen);/*BAM*/
+ if (!aligned && !G.useQUAL) {
+ uint8_t const *squal;
+ uint8_t qoffset = 0;
+
+ rc = BAMAlignmentGetCSQuality(rec, &squal, &qoffset);/*BAM*/
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of colorspace quality does not match sequence", "name=%s", name));
+ goto LOOP_END;
+ }
+ if (qoffset) {
+ unsigned i;
+
+ for (i = 0; i < csSeqLen; ++i)
+ qual[i] = squal[i] - qoffset;
+ }
+ else
+ memcpy(qual, squal, csSeqLen);
+ readlen = csSeqLen;
+ }
+ }
+
+ if (aligned) {
+ if (G.editAlignedQual ) EditAlignedQualities (qual, AR_HAS_MISMATCH(data), readlen);
+ if (G.keepMismatchQual) EditUnalignedQualities(qual, AR_HAS_MISMATCH(data), readlen);
+ }
+ else if (isPrimary) {
+ switch (AR_READNO(data)) {
+ case 1:
+ value->unaligned_1 = 1;
+ break;
+ case 2:
+ value->unaligned_2 = 1;
+ break;
+ default:
+ break;
+ }
+ }
+ if (isPrimary) {
+ switch (AR_READNO(data)) {
+ case 1:
+ if (CTX_VALUE_GET_P_ID(*value, 0) == 0 && aligned) {
+ data.alignId = ++ctx->primaryId;
+ CTX_VALUE_SET_P_ID(*value, 0, data.alignId);
+ }
+ break;
+ case 2:
+ if (CTX_VALUE_GET_P_ID(*value, 1) == 0 && aligned) {
+ data.alignId = ++ctx->primaryId;
+ CTX_VALUE_SET_P_ID(*value, 1, data.alignId);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ if (mated) {
+ if (isPrimary || !originally_aligned) {
+ if (CTX_VALUE_GET_S_ID(*value) != 0) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' has already been assigned a spot id", "name=%.*s", namelen, name));
+ }
+ else if (!value->has_a_read) {
+ /* new mated fragment - do spot assembly */
+ unsigned sz;
+ uint64_t fragmentId;
+ FragmentInfo fi;
+ KMemBank *frags;
+ int32_t mate_refSeqId = -1;
+ int64_t pnext = 0;
+
+ memset(&fi, 0, sizeof(fi));
+ fi.aligned = aligned;
+ fi.ti = ti;
+ fi.orientation = AR_REF_ORIENT(data);
+ fi.otherReadNo = AR_READNO(data);
+ fi.sglen = strlen(spotGroup);
+ fi.readlen = readlen;
+ fi.cskey = cskey;
+ fi.is_bad = (flags & BAMFlags_IsLowQuality) != 0;/*BAM*/
+ sz = sizeof(fi) + 2*fi.readlen + fi.sglen;
+ if (align) {
+ BAMAlignmentGetMateRefSeqId(rec, &mate_refSeqId);/*BAM*/
+ BAMAlignmentGetMatePosition(rec, &pnext);/*BAM*/
+ }
+ if(align && mate_refSeqId == refSeqId && pnext > 0 && pnext!=rpos /*** weird case in some bams**/){
+ frags = ctx->fragsBoth;
+ rc = KMemBankAlloc(frags, &fragmentId, sz, 0);
+ value->fragmentId = fragmentId*2;
+ fcountBoth++;
+ } else {
+ frags = ctx->fragsOne;
+ rc = KMemBankAlloc(frags, &fragmentId, sz, 0);
+ value->fragmentId = fragmentId*2+1;
+ fcountOne++;
+ }
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KMemBankAlloc failed");
+ goto LOOP_END;
+ }
+ /*printf("IN:%10d\tcnt2=%ld\tcnt1=%ld\n",value->fragmentId,fcountBoth,fcountOne);*/
+
+ rc = KDataBufferResize(&fragBuf, sz);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed to resize fragment buffer");
+ goto LOOP_END;
+ }
+ {{
+ uint8_t *dst = (uint8_t*) fragBuf.base;
+ memcpy(dst,&fi,sizeof(fi));
+ dst += sizeof(fi);
+ COPY_READ((char *)dst, seqDNA, fi.readlen, (isColorSpace && !aligned) ? 0 : fi.orientation);
+ dst += fi.readlen;
+ COPY_QUAL(dst, qual, fi.readlen, (isColorSpace && !aligned) ? 0 : fi.orientation);
+ dst += fi.readlen;
+ memcpy(dst,spotGroup,fi.sglen);
+ }}
+ rc = KMemBankWrite(frags, fragmentId, 0, fragBuf.base, sz, &rsize);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankWrite failed writing fragment $(id)", "id=%u", fragmentId));
+ goto LOOP_END;
+ }
+ value->has_a_read = 1;
+ }
+ else if (value->fragmentId != 0 ) {
+ /* might be second fragment */
+ uint64_t sz;
+ FragmentInfo *fip;
+ KMemBank *frags;
+
+ if(value->fragmentId & 1) frags = ctx->fragsOne;
+ else frags = ctx->fragsBoth;
+
+ rc=KMemBankSize(frags, value->fragmentId>>1, &sz);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankSize failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+ goto LOOP_END;
+ }
+ rc=KDataBufferResize(&fragBuf, (size_t)sz);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to resize fragment buffer", ""));
+ goto LOOP_END;
+ }
+ rc=KMemBankRead(frags, value->fragmentId>>1, 0, fragBuf.base, sz, &rsize);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankRead failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+ goto LOOP_END;
+ }
+
+ assert( rsize == sz );
+ fip = (FragmentInfo *) fragBuf.base;
+ if(AR_READNO(data) != fip->otherReadNo) {
+ /* mate found */
+ unsigned readLen[2];
+ unsigned read1 = 0;
+ unsigned read2 = 1;
+ uint8_t *src = (uint8_t*) fip + sizeof(*fip);
+
+ if (AR_READNO(data) < fip->otherReadNo) {
+ read1 = 1;
+ read2 = 0;
+ }
+ readLen[read1] = fip->readlen;
+ readLen[read2] = readlen;
+ rc = SequenceRecordInit(&srec, 2, readLen);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed resizing sequence record buffer", ""));
+ goto LOOP_END;
+ }
+ srec.ti[read1] = fip->ti;
+ srec.aligned[read1] = fip->aligned;
+ srec.is_bad[read1] = fip->is_bad;
+ srec.orientation[read1] = fip->orientation;
+ srec.cskey[read1] = fip->cskey;
+ memcpy(srec.seq + srec.readStart[read1], src, fip->readlen);
+ src += fip->readlen;
+ memcpy(srec.qual + srec.readStart[read1], src, fip->readlen);
+ src += fip->readlen;
+
+ srec.orientation[read2] = AR_REF_ORIENT(data);
+ COPY_READ(srec.seq + srec.readStart[read2], seqDNA, srec.readLen[read2], (isColorSpace && !aligned) ? 0 : srec.orientation[read2]);
+ COPY_QUAL(srec.qual + srec.readStart[read2], qual, srec.readLen[read2], (isColorSpace && !aligned) ? 0 : srec.orientation[read2]);
+
+ srec.keyId = keyId;
+ srec.is_bad[read2] = (flags & BAMFlags_IsLowQuality) != 0;
+ srec.aligned[read2] = aligned;
+ srec.cskey[read2] = cskey;
+ srec.ti[read2] = ti;
+
+ srec.spotGroup = spotGroup;
+ srec.spotGroupLen = strlen(spotGroup);
+ if (value->pcr_dup && (srec.is_bad[0] || srec.is_bad[1])) {
+ filterFlagConflictRecords++;
+ if(filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT){
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+ } else if(filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT){
+ (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+ }
+ }
+ rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+ goto LOOP_END;
+ }
+ CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+ if(value->fragmentId & 1){
+ fcountOne--;
+ } else {
+ fcountBoth--;
+ }
+ /* printf("OUT:%9d\tcnt2=%ld\tcnt1=%ld\n",value->fragmentId,fcountBoth,fcountOne);*/
+ rc = KMemBankFree(frags, value->fragmentId>>1);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankFree failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+ goto LOOP_END;
+ }
+ value->fragmentId = 0;
+ }
+ }
+ }
+ if (!isPrimary && aligned) {
+ int32_t bam_mrid;
+ int64_t mpos;
+ int64_t mrid;
+ int64_t tlen;
+
+ BAMAlignmentGetMatePosition(rec, &mpos);/*BAM*/
+ BAMAlignmentGetMateRefSeqId(rec, &bam_mrid);/*BAM*/
+ BAMAlignmentGetInsertSize(rec, &tlen);/*BAM*/
+
+ if (mpos >= 0 && bam_mrid >= 0 && tlen != 0) {
+ BAMRefSeq const *mref;/*BAM*/
+
+ BAMFileGetRefSeq(bam, bam_mrid, &mref);/*BAM*/
+ if (mref) {
+ rc_t rc_temp = ReferenceGet1stRow(ref, &mrid, mref->name);
+ if (rc_temp == 0) {
+ data.mate_ref_pos = mpos;
+ data.template_len = tlen;
+ data.mate_ref_orientation = (flags & BAMFlags_MateIsReverse) ? 1 : 0;
+ }
+ else {
+ (void)PLOGERR(klogWarn, (klogWarn, rc_temp, "Failed to get refID for $(name)", "name=%s", mref->name));
+ mrid = 0;
+ }
+ data.mate_ref_id = mrid;
+ }
+ }
+ }
+ }
+ else if (wasInserted & (isPrimary || !originally_aligned)) {
+ /* new unmated fragment - no spot assembly */
+ unsigned readLen[1];
+
+ readLen[0] = readlen;
+ rc = SequenceRecordInit(&srec, 1, readLen);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed resizing sequence record buffer", ""));
+ goto LOOP_END;
+ }
+ srec.ti[0] = ti;
+ srec.aligned[0] = aligned;
+ srec.is_bad[0] = (flags & BAMFlags_IsLowQuality) != 0;
+ srec.orientation[0] = AR_REF_ORIENT(data);
+ srec.cskey[0] = cskey;
+ COPY_READ(srec.seq + srec.readStart[0], seqDNA, readlen, (isColorSpace && !aligned) ? 0 : srec.orientation[0]);
+ COPY_QUAL(srec.qual + srec.readStart[0], qual, readlen, (isColorSpace && !aligned) ? 0 : srec.orientation[0]);
+
+ srec.keyId = keyId;
+
+ srec.spotGroup = spotGroup;
+ srec.spotGroupLen = strlen(spotGroup);
+ if (value->pcr_dup && srec.is_bad[0]) {
+ filterFlagConflictRecords++;
+ if (filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+ }
+ else if (filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+ }
+ }
+ rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "SequenceWriteRecord failed", ""));
+ goto LOOP_END;
+ }
+ CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+ value->fragmentId = 0;
+ }
+
+ if (aligned) {
+ if (value->alignmentCount[AR_READNO(data) - 1] < 254)
+ ++value->alignmentCount[AR_READNO(data) - 1];
+ ++ctx->alignCount;
+
+ assert(keyId >> 32 < ctx->key2id_count);
+ assert((uint32_t)keyId < ctx->idCount[keyId >> 32]);
+
+ rc = AlignmentWriteRecord(align, &data);
+ if (rc == 0) {
+ if (!isPrimary)
+ data.alignId = ++ctx->secondId;
+
+ rc = ReferenceAddAlignId(ref, data.alignId, isPrimary);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "ReferenceAddAlignId failed", ""));
+ }
+ else {
+ *had_alignments = true;
+ }
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc, "AlignmentWriteRecord failed", ""));
+ }
+ }
+ /**************************************************************/
+
+ LOOP_END:
+ BAMAlignmentRelease(rec);
+ ++reccount;
+ if (G.maxAlignCount > 0 && reccount >= G.maxAlignCount)
+ break;
+ if (rc == 0)
+ *had_sequences = true;
+ }
+ if (filterFlagConflictRecords > 0) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "$(cnt1) out of $(cnt2) records contained warning : both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "cnt1=%lu,cnt2=%lu", filterFlagConflictRecords,recordsProcessed));
+ }
+ if (rc == 0 && recordsProcessed == 0) {
+ (void)LOGMSG(klogWarn, (G.limit2config || G.refFilter != NULL) ?
+ "All records from the file were filtered out" :
+ "The file contained no records that were processed.");
+ rc = RC(rcAlign, rcFile, rcReading, rcData, rcEmpty);
+ }
+ BAMFileRelease(bam);
+ KDataBufferWhack(&buf);
+ KDataBufferWhack(&fragBuf);
+ KDataBufferWhack(&srec.storage);
+ KDataBufferWhack(&cigBuf);
+ return rc;
+}
+
+static rc_t WriteSoloFragments(context_t *ctx, Sequence *seq)
+{
+ uint32_t i;
+ unsigned j;
+ uint32_t fcountOne = 0;
+ uint32_t fcountBoth = 0;
+ uint64_t idCount = 0;
+ rc_t rc;
+ KDataBuffer fragBuf;
+ SequenceRecord srec;
+
+ ++ctx->pass;
+ memset(&srec, 0, sizeof(srec));
+
+ rc = KDataBufferMake(&fragBuf, 8, 0);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KDataBufferMake failed");
+ return rc;
+ }
+ for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+ idCount += ctx->idCount[j];
+ }
+ KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], idCount);
+
+ for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+ for (i = 0; i != ctx->idCount[j]; ++i, ++idCount) {
+ uint64_t const keyId = ((uint64_t)j << 32) | i;
+ ctx_value_t *value;
+ size_t rsize;
+ uint64_t id;
+ uint64_t sz;
+ unsigned readLen[2];
+ unsigned read = 0;
+ FragmentInfo const *fip;
+ uint8_t const *src;
+ KMemBank *frags;
+
+ rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+ if (rc)
+ break;
+ KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+ if (value->fragmentId == 0)
+ continue;
+ if (value->fragmentId & 1) {
+ frags = ctx->fragsOne;
+ fcountOne++;
+ }
+ else {
+ frags = ctx->fragsBoth;
+ fcountBoth++;
+ }
+ id = value->fragmentId >> 1;
+
+ rc = KMemBankSize(frags, id, &sz);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KMemBankSize failed");
+ break;
+ }
+ rc = KDataBufferResize(&fragBuf, (size_t)sz);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KDataBufferResize failed");
+ break;
+ }
+ rc = KMemBankRead(frags, id, 0, fragBuf.base, sz, &rsize);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "KMemBankRead failed");
+ break;
+ }
+ assert( rsize == sz );
+ fip = (FragmentInfo const *)fragBuf.base;
+ src = (uint8_t const *)&fip[1];
+
+ readLen[0] = readLen[1] = 0;
+ if (!value->unmated && ( (fip->aligned && CTX_VALUE_GET_P_ID(*value, 0) == 0)
+ || (value->unaligned_2)))
+ {
+ read = 1;
+ }
+
+ readLen[read] = fip->readlen;
+ rc = SequenceRecordInit(&srec, value->unmated ? 1 : 2, readLen);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "SequenceRecordInit failed");
+ break;
+ }
+
+ srec.ti[read] = fip->ti;
+ srec.aligned[read] = fip->aligned;
+ srec.is_bad[read] = fip->is_bad;
+ srec.orientation[read] = fip->orientation;
+ srec.cskey[read] = fip->cskey;
+ memcpy(srec.seq + srec.readStart[read], src, srec.readLen[read]);
+ src += fip->readlen;
+ memcpy(srec.qual + srec.readStart[read], src, srec.readLen[read]);
+ src += fip->readlen;
+ srec.spotGroup = (char *)src;
+ srec.spotGroupLen = fip->sglen;
+ srec.keyId = keyId;
+
+ rc = SequenceWriteRecord(seq, &srec, ctx->isColorSpace, value->pcr_dup, value->platform);
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+ break;
+ }
+ /*rc = KMemBankFree(frags, id);*/
+ CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+ }
+ }
+ /*printf("DONE_SOLO:\tcnt2=%d\tcnt1=%d\n",fcountBoth,fcountOne);*/
+ KDataBufferWhack(&fragBuf);
+ KDataBufferWhack(&srec.storage);
+ return rc;
+}
+
+static rc_t SequenceUpdateAlignInfo(context_t *ctx, Sequence *seq)
+{
+ rc_t rc = 0;
+ uint64_t row;
+ const ctx_value_t *value;
+ uint64_t keyId;
+
+ ++ctx->pass;
+ KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->spotId + 1);
+
+ for (row = 1; row <= ctx->spotId; ++row) {
+ rc = SequenceReadKey(seq, row, &keyId);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to get key for row $(row)", "row=%u", (unsigned)row));
+ break;
+ }
+ rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read info for row $(row), index $(idx)", "row=%u,idx=%u", (unsigned)row, (unsigned)keyId));
+ break;
+ }
+ if (row != CTX_VALUE_GET_S_ID(*value)) {
+ rc = RC(rcApp, rcTable, rcWriting, rcData, rcUnexpected);
+ (void)PLOGMSG(klogErr, (klogErr, "Unexpected spot id $(spotId) for row $(row), index $(idx)", "spotId=%u,row=%u,idx=%u", (unsigned)CTX_VALUE_GET_S_ID(*value), (unsigned)row, (unsigned)keyId));
+ break;
+ }
+ {{
+ int64_t primaryId[2];
+ uint64_t const spotId = CTX_VALUE_GET_S_ID(*value);
+
+ primaryId[0] = CTX_VALUE_GET_P_ID(*value, 0);
+ primaryId[1] = CTX_VALUE_GET_P_ID(*value, 1);
+
+ rc = SequenceUpdateAlignData(seq, row, value->unmated ? 1 : 2,
+ primaryId,
+ value->alignmentCount);
+ }}
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Failed updating Alignment data in sequence table");
+ break;
+ }
+ KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+ }
+ return rc;
+}
+
+static rc_t AlignmentUpdateSpotInfo(context_t *ctx, Alignment *align)
+{
+ rc_t rc;
+ uint64_t keyId;
+
+ ++ctx->pass;
+
+ KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->alignCount);
+
+ rc = AlignmentStartUpdatingSpotIds(align);
+ while (rc == 0 && (rc = Quitting()) == 0) {
+ ctx_value_t const *value;
+
+ rc = AlignmentGetSpotKey(align, &keyId);
+ if (rc) {
+ if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+ rc = 0;
+ break;
+ }
+ assert(keyId >> 32 < ctx->key2id_count);
+ assert((uint32_t)keyId < ctx->idCount[keyId >> 32]);
+ rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+ if (rc == 0) {
+ int64_t const spotId = CTX_VALUE_GET_S_ID(*value);
+
+ if (spotId == 0) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(id)' was never assigned a spot id, probably has no primary alignments", "id=%lx", keyId));
+ /* (void)PLOGMSG(klogWarn, (klogWarn, "Spot #$(i): { $(s) }", "i=%lu,s=%s", keyId, Print_ctx_value_t(value))); */
+ }
+ rc = AlignmentWriteSpotId(align, spotId);
+ }
+ KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+ }
+ return rc;
+}
+
+static rc_t ArchiveBAM(VDBManager *mgr, VDatabase *db,
+ unsigned bamFiles, char const *bamFile[],
+ unsigned seqFiles, char const *seqFile[],
+ bool *has_alignments)
+{
+ rc_t rc = 0;
+ rc_t rc2;
+ Reference ref;
+ Sequence seq;
+ Alignment *align;
+ context_t ctx;
+ bool has_sequences = false;
+ unsigned i;
+
+ *has_alignments = false;
+ rc = ReferenceInit(&ref, mgr, db);
+ if (rc)
+ return rc;
+
+ if (G.onlyVerifyReferences) {
+ for (i = 0; i < bamFiles && rc == 0; ++i) {
+ rc = ProcessBAM(bamFile[i], NULL, db, &ref, NULL, NULL, NULL, NULL);
+ }
+ ReferenceWhack(&ref, false);
+ return rc;
+ }
+ SequenceInit(&seq, db);
+ align = AlignmentMake(db);
+
+ rc = SetupContext(&ctx, bamFiles + seqFiles);
+ if (rc)
+ return rc;
+
+ ++ctx.pass;
+ for (i = 0; i < bamFiles && rc == 0; ++i) {
+ bool this_has_alignments = false;
+ bool this_has_sequences = false;
+
+ rc = ProcessBAM(bamFile[i], &ctx, db, &ref, &seq, align, &this_has_alignments, &this_has_sequences);
+ *has_alignments |= this_has_alignments;
+ has_sequences |= this_has_sequences;
+ }
+ for (i = 0; i < seqFiles && rc == 0; ++i) {
+ bool this_has_alignments = false;
+ bool this_has_sequences = false;
+
+ rc = ProcessBAM(seqFile[i], &ctx, db, &ref, &seq, align, &this_has_alignments, &this_has_sequences);
+ *has_alignments |= this_has_alignments;
+ has_sequences |= this_has_sequences;
+ }
+/*** No longer need memory for key2id ***/
+ for (i = 0; i != ctx.key2id_count; ++i) {
+ KBTreeDropBacking(ctx.key2id[i]);
+ KBTreeRelease(ctx.key2id[i]);
+ ctx.key2id[i] = NULL;
+ }
+ free(ctx.key2id_names);
+ ctx.key2id_names = NULL;
+/*******************/
+
+ if (has_sequences) {
+ if (rc == 0 && (rc = Quitting()) == 0) {
+ (void)LOGMSG(klogInfo, "Writing unpaired sequences");
+ rc = WriteSoloFragments(&ctx, &seq);
+ ContextReleaseMemBank(&ctx);
+ if (rc == 0) {
+ rc = SequenceDoneWriting(&seq);
+ if (rc == 0) {
+ (void)LOGMSG(klogInfo, "Updating sequence alignment info");
+ rc = SequenceUpdateAlignInfo(&ctx, &seq);
+ }
+ }
+ }
+ }
+
+ if (*has_alignments && rc == 0 && (rc = Quitting()) == 0) {
+ (void)LOGMSG(klogInfo, "Writing alignment spot ids");
+ rc = AlignmentUpdateSpotInfo(&ctx, align);
+ }
+ rc2 = AlignmentWhack(align, *has_alignments && rc == 0 && (rc = Quitting()) == 0);
+ if (rc == 0)
+ rc = rc2;
+
+ rc2 = ReferenceWhack(&ref, *has_alignments && rc == 0 && (rc = Quitting()) == 0);
+ if (rc == 0)
+ rc = rc2;
+
+ SequenceWhack(&seq, rc == 0);
+
+ ContextRelease(&ctx);
+
+ if (rc == 0) {
+ (void)LOGMSG(klogInfo, "Successfully loaded all files");
+ }
+ return rc;
+}
+
+rc_t WriteLoaderSignature(KMetadata *meta, char const progName[])
+{
+ KMDataNode *node;
+ rc_t rc = KMetadataOpenNodeUpdate(meta, &node, "/");
+
+ if (rc == 0) {
+ rc = KLoaderMeta_Write(node, progName, __DATE__, "BAM", KAppVersion());
+ KMDataNodeRelease(node);
+ }
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Cannot update loader meta");
+ }
+ return rc;
+}
+
+rc_t OpenPath(char const path[], KDirectory **dir)
+{
+ KDirectory *p;
+ rc_t rc = KDirectoryNativeDir(&p);
+
+ if (rc == 0) {
+ rc = KDirectoryOpenDirUpdate(p, dir, false, path);
+ KDirectoryRelease(p);
+ }
+ return rc;
+}
+
+static
+rc_t ConvertDatabaseToUnmapped(VDatabase *db)
+{
+ VTable* tbl;
+ rc_t rc = VDatabaseOpenTableUpdate(db, &tbl, "SEQUENCE");
+ if (rc == 0)
+ {
+ VTableRenameColumn(tbl, false, "CMP_ALTREAD", "ALTREAD");
+ VTableRenameColumn(tbl, false, "CMP_READ", "READ");
+ VTableRenameColumn(tbl, false, "CMP_ALTCSREAD", "ALTCSREAD");
+ VTableRenameColumn(tbl, false, "CMP_CSREAD", "CSREAD");
+ rc = VTableRelease(tbl);
+ }
+ return rc;
+}
+rc_t run(char const progName[],
+ unsigned bamFiles, char const *bamFile[],
+ unsigned seqFiles, char const *seqFile[])
+{
+ VDBManager *mgr;
+ rc_t rc;
+ rc_t rc2;
+ char const *db_type = G.expectUnsorted ? "NCBI:align:db:alignment_unsorted" : "NCBI:align:db:alignment_sorted";
+
+ rc = VDBManagerMakeUpdate(&mgr, NULL);
+ if (rc) {
+ (void)LOGERR (klogErr, rc, "failed to create VDB Manager!");
+ }
+ else {
+ bool has_alignments = false;
+
+ if (G.onlyVerifyReferences) {
+ rc = ArchiveBAM(mgr, NULL, bamFiles, bamFile, 0, NULL, &has_alignments);
+ }
+ else {
+ VSchema *schema;
+
+ rc = VDBManagerMakeSchema(mgr, &schema);
+ if (rc) {
+ (void)LOGERR (klogErr, rc, "failed to create schema");
+ }
+ else {
+ (void)(rc = VSchemaAddIncludePath(schema, G.schemaIncludePath));
+ rc = VSchemaParseFile(schema, G.schemaPath);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "failed to parse schema file $(file)", "file=%s", G.schemaPath));
+ }
+ else {
+ VDatabase *db;
+
+ rc = VDBManagerCreateDB(mgr, &db, schema, db_type,
+ kcmInit + kcmMD5, G.outpath);
+ rc2 = VSchemaRelease(schema);
+ if (rc2)
+ (void)LOGERR(klogWarn, rc2, "Failed to release schema");
+ if (rc == 0)
+ rc = rc2;
+ if (rc == 0) {
+ rc = ArchiveBAM(mgr, db, bamFiles, bamFile, seqFiles, seqFile, &has_alignments);
+ if (rc == 0 && !has_alignments) {
+ rc = ConvertDatabaseToUnmapped(db);
+ }
+
+ rc2 = VDatabaseRelease(db);
+ if (rc2)
+ (void)LOGERR(klogWarn, rc2, "Failed to close database");
+ if (rc == 0)
+ rc = rc2;
+
+ if (rc == 0) {
+ KMetadata *meta;
+ KDBManager *kmgr;
+
+ rc = VDBManagerOpenKDBManagerUpdate(mgr, &kmgr);
+ if (rc == 0) {
+ KDatabase *kdb;
+
+ rc = KDBManagerOpenDBUpdate(kmgr, &kdb, G.outpath);
+ if (rc == 0) {
+ rc = KDatabaseOpenMetadataUpdate(kdb, &meta);
+ KDatabaseRelease(kdb);
+ }
+ KDBManagerRelease(kmgr);
+ }
+ if (rc == 0) {
+ rc = WriteLoaderSignature(meta, progName);
+ KMetadataRelease(meta);
+ }
+ }
+ }
+ }
+ }
+ }
+ rc2 = VDBManagerRelease(mgr);
+ if (rc2)
+ (void)LOGERR(klogWarn, rc2, "Failed to release VDB Manager");
+ if (rc == 0)
+ rc = rc2;
+ }
+ return rc;
+}
diff --git a/tools/bam-loader/loader-imp.h b/tools/bam-loader/loader-imp.h
new file mode 100644
index 0000000..6f524a7
--- /dev/null
+++ b/tools/bam-loader/loader-imp.h
@@ -0,0 +1,29 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+rc_t run(char const argv0[],
+ unsigned countAligned, char const *bamFile[],
+ unsigned countUnaligned, char const *unaligned[]);
diff --git a/tools/bam-loader/reference-writer.c b/tools/bam-loader/reference-writer.c
new file mode 100644
index 0000000..dd1dc68
--- /dev/null
+++ b/tools/bam-loader/reference-writer.c
@@ -0,0 +1,447 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <kfs/file.h>
+
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <align/writer-refseq.h>
+
+#include "reference-writer.h"
+#include "Globals.h"
+
+#include <stdlib.h>
+#include <limits.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+#define SORTED_OPEN_TABLE_LIMIT (2)
+#define SORTED_CACHE_SIZE ((2 * 1024 * 1024)/(SORTED_OPEN_TABLE_LIMIT))
+
+#ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+#define UNSORTED_OPEN_TABLE_LIMIT (8)
+#define UNSORTED_CACHE_SIZE ((1024 * 1024 * 1024)/(UNSORTED_OPEN_TABLE_LIMIT))
+#else
+#define UNSORTED_OPEN_TABLE_LIMIT (64)
+#define UNSORTED_CACHE_SIZE (350 * 1024 * 1024)
+#endif
+
+#if _DEBUGGING
+#define DUMP_CONFIG 1
+#endif
+
+struct overlap_s {
+ uint32_t min; /* minimum start pos of any alignment that ends in this chunk */
+ uint32_t max; /* maximum end pos of any alignment that starts before this chunk and ends in this chunk */
+};
+
+extern void ReferenceMgr_DumpConfig(ReferenceMgr const *const self);
+
+rc_t ReferenceInit(Reference *self, const VDBManager *mgr, VDatabase *db)
+{
+ rc_t rc;
+ size_t const cache = G.expectUnsorted ? UNSORTED_CACHE_SIZE : SORTED_CACHE_SIZE;
+ unsigned const open_count = G.expectUnsorted ? UNSORTED_OPEN_TABLE_LIMIT : SORTED_OPEN_TABLE_LIMIT;
+
+ memset(self, 0, sizeof(*self));
+
+ self->coverage.elem_bits = self->mismatches.elem_bits = self->indels.elem_bits = 32;
+ self->pri_align.elem_bits = self->sec_align.elem_bits = 64;
+ self->pri_overlap.elem_bits = self->sec_overlap.elem_bits = sizeof(struct overlap_s) * 8;
+
+ rc = ReferenceMgr_Make(&self->mgr, db, mgr, ewrefmgr_co_Coverage,
+ G.refXRefPath, G.inpath,
+ G.maxSeqLen, cache, open_count);
+ if (rc == 0) {
+ unsigned i;
+
+ for (i = 0; G.refFiles[i]; ++i) {
+ rc = ReferenceMgr_FastaPath(self->mgr, G.refFiles[i]);
+ if (rc) {
+ (void)PLOGERR(klogWarn, (klogWarn, rc, "fasta file '$(file)'", "file=%s", G.refFiles[i]));
+ break;
+ }
+ }
+#if DUMP_CONFIG
+ if (rc == 0) {
+ ReferenceMgr_DumpConfig(self->mgr);
+ }
+#endif
+ }
+ return rc;
+}
+
+static
+void Unsorted(Reference *self) {
+ (void)LOGMSG(klogWarn, "Alignments are unsorted");
+ self->out_of_order = true;
+ ReferenceMgr_SetCache(self->mgr, UNSORTED_CACHE_SIZE, UNSORTED_OPEN_TABLE_LIMIT);
+ KDataBufferWhack(&self->sec_align);
+ KDataBufferWhack(&self->pri_align);
+ KDataBufferWhack(&self->mismatches);
+ KDataBufferWhack(&self->indels);
+ KDataBufferWhack(&self->coverage);
+ KDataBufferWhack(&self->pri_overlap);
+ KDataBufferWhack(&self->sec_overlap);
+}
+
+#define BAIL_ON_FAIL(STMT) do { rc_t const rc__ = (STMT); if (rc__) return rc__; } while(0)
+
+static rc_t FlushBuffers(Reference *self, uint64_t upto, bool full, bool final)
+{
+ if (!self->out_of_order && upto > 0) {
+ size_t offset = 0;
+ unsigned *const miss = (unsigned *)self->mismatches.base;
+ unsigned *const indel = (unsigned *)self->indels.base;
+ unsigned *const cov = (unsigned *)self->coverage.base;
+ struct overlap_s *const pri_overlap = (struct overlap_s *)self->pri_overlap.base;
+ struct overlap_s *const sec_overlap = (struct overlap_s *)self->sec_overlap.base;
+ unsigned chunk = 0;
+
+ while ((self->curPos + offset + (full ? 0 : G.maxSeqLen)) <= upto) {
+ ReferenceSeqCoverage data;
+ uint64_t const curPos = self->curPos + offset;
+ unsigned const n = self->endPos > (curPos + G.maxSeqLen) ?
+ G.maxSeqLen : (self->endPos - curPos);
+ unsigned const m = curPos + n > upto ? upto - curPos : n;
+ unsigned i;
+ unsigned hi;
+ unsigned lo;
+
+ if (n == 0) break;
+
+ memset(&data, 0, sizeof(data));
+
+ data.ids[ewrefcov_primary_table].elements = self->pri_align.elem_count;
+ data.ids[ewrefcov_primary_table].buffer = self->pri_align.base;
+ data.overlap_ref_pos[ewrefcov_primary_table] = pri_overlap[chunk].min;
+ data.overlap_ref_len[ewrefcov_primary_table] = pri_overlap[chunk].max ? pri_overlap[chunk].max - curPos : 0;
+
+ data.ids[ewrefcov_secondary_table].elements = self->sec_align.elem_count;
+ data.ids[ewrefcov_secondary_table].buffer = self->sec_align.base;
+ data.overlap_ref_pos[ewrefcov_secondary_table] = sec_overlap[chunk].min;
+ data.overlap_ref_len[ewrefcov_secondary_table] = sec_overlap[chunk].max ? sec_overlap[chunk].max - curPos : 0;
+
+ for (hi = 0, lo = UINT_MAX, i = 0; i != m; ++i) {
+ unsigned const coverage = cov[offset + i];
+
+ if (hi < coverage)
+ hi = coverage;
+ if (lo > coverage)
+ lo = coverage;
+ }
+ data.low = lo > 255 ? 255 : lo;
+ data.high = hi > 255 ? 255 : hi;
+
+ for (i = 0; i != m; ++i)
+ data.mismatches += miss[offset + i];
+
+ for (i = 0; i != m; ++i)
+ data.indels += indel[offset + i];
+
+ {
+ rc_t rc = ReferenceSeq_AddCoverage(self->rseq, curPos, &data);
+
+ if (rc) {
+ Unsorted(self);
+ return 0;
+ }
+ }
+
+ KDataBufferResize(&self->pri_align, 0);
+ KDataBufferResize(&self->sec_align, 0);
+ offset += n;
+ ++chunk;
+ }
+ if (!final && offset > 0) {
+ unsigned const newChunkCount = self->pri_overlap.elem_count - chunk;
+ unsigned const newBaseCount = self->endPos - self->curPos - offset;
+
+ memmove(self->pri_overlap.base, pri_overlap + chunk, newChunkCount * sizeof(pri_overlap[0]));
+ memmove(self->sec_overlap.base, sec_overlap + chunk, newChunkCount * sizeof(sec_overlap[0]));
+ memmove(self->mismatches.base, miss + offset, newBaseCount * sizeof(miss[0]));
+ memmove(self->indels.base, indel + offset, newBaseCount * sizeof(indel[0]));
+ memmove(self->coverage.base, cov + offset, newBaseCount * sizeof(cov[0]));
+
+ KDataBufferResize(&self->pri_overlap, newChunkCount);
+ KDataBufferResize(&self->sec_overlap, newChunkCount);
+
+ self->curPos += offset;
+ }
+ }
+ return 0;
+}
+
+rc_t ReferenceSetFile(Reference *self, const char id[],
+ uint64_t length, uint8_t const md5[16])
+{
+ const ReferenceSeq *rseq;
+ unsigned n;
+
+ for (n = 0; ; ++n) {
+ if (self->last_id[n] != id[n])
+ break;
+ if (self->last_id[n] == 0 && id[n] == 0)
+ return 0;
+ }
+ while (id[n])
+ ++n;
+ if (n >= sizeof(self->last_id))
+ return RC(rcApp, rcTable, rcAccessing, rcParam, rcTooLong);
+
+ BAIL_ON_FAIL(FlushBuffers(self, self->length, true, true));
+ BAIL_ON_FAIL(ReferenceMgr_GetSeq(self->mgr, &rseq, id));
+
+ if (self->rseq)
+ ReferenceSeq_Release(self->rseq);
+ self->rseq = rseq;
+
+ memcpy(self->last_id, id, n + 1);
+ self->curPos = self->endPos = 0;
+ self->length = length;
+ self->lastOffset = 0;
+ KDataBufferResize(&self->pri_overlap, 0);
+ KDataBufferResize(&self->sec_overlap, 0);
+
+ if(!self->out_of_order) (void)PLOGMSG(klogInfo, (klogInfo, "Processing Reference '$(id)'", "id=%s", id));
+
+ return 0;
+}
+
+rc_t ReferenceVerify(Reference const *self, char const id[], uint64_t length, uint8_t const md5[16])
+{
+ return ReferenceMgr_Verify(self->mgr, id, length, md5);
+}
+
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[])
+{
+ const ReferenceSeq* rseq;
+ rc_t rc = ReferenceMgr_GetSeq(self->mgr, &rseq, refName);
+ if( rc == 0 ) {
+ rc = ReferenceSeq_Get1stRow(rseq, refID);
+ ReferenceSeq_Release(rseq);
+ }
+ return rc;
+}
+
+static
+rc_t ReferenceAddCoverage(Reference *const self,
+ unsigned const refStart,
+ unsigned const refLength,
+ uint32_t const mismatches,
+ uint32_t const indels,
+ bool const isPrimary
+ )
+{
+ unsigned const refEnd = refStart + refLength;
+
+ if (refEnd > self->endPos) {
+ unsigned const t1 = refEnd + (G.maxSeqLen - 1);
+ unsigned const adjust = t1 % G.maxSeqLen;
+ unsigned const newEndPos = t1 - adjust;
+ unsigned const baseCount = self->endPos - self->curPos;
+ unsigned const newBaseCount = newEndPos - self->curPos;
+
+ BAIL_ON_FAIL(KDataBufferResize(&self->coverage, newBaseCount));
+ BAIL_ON_FAIL(KDataBufferResize(&self->mismatches, newBaseCount));
+ BAIL_ON_FAIL(KDataBufferResize(&self->indels, newBaseCount));
+
+ memset(&((unsigned *)self->coverage.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+ memset(&((unsigned *)self->mismatches.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+ memset(&((unsigned *)self->indels.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+ self->endPos = newEndPos;
+ }
+ if ((refEnd - self->curPos) / G.maxSeqLen >= self->pri_overlap.elem_count) {
+ unsigned const chunks = (refEnd - self->curPos) / G.maxSeqLen + 1;
+ unsigned const end = self->pri_overlap.elem_count;
+
+ BAIL_ON_FAIL(KDataBufferResize(&self->pri_overlap, chunks));
+ BAIL_ON_FAIL(KDataBufferResize(&self->sec_overlap, chunks));
+
+ memset(&((struct overlap_s *)self->pri_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+ memset(&((struct overlap_s *)self->sec_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+ }
+ BAIL_ON_FAIL(FlushBuffers(self, refStart, false, false));
+ if (!self->out_of_order) {
+ unsigned const startBase = refStart - self->curPos;
+ unsigned const endChunk = (startBase + refLength) / G.maxSeqLen;
+ KDataBuffer *const overlapBuffer = isPrimary ? &self->pri_overlap : &self->sec_overlap;
+ unsigned *const cov = &((unsigned *)self->coverage.base)[startBase];
+ unsigned i;
+
+ ((unsigned *)self->mismatches.base)[startBase] += mismatches;
+ ((unsigned *)self->indels.base)[startBase] += indels;
+
+ if (((struct overlap_s *)overlapBuffer->base)[endChunk].min == 0 ||
+ ((struct overlap_s *)overlapBuffer->base)[endChunk].min > refStart)
+ {
+ ((struct overlap_s *)overlapBuffer->base)[endChunk].min = refStart;
+ }
+ if (endChunk != 0 &&
+ ((struct overlap_s *)overlapBuffer->base)[endChunk].max < refStart + refLength)
+ {
+ ((struct overlap_s *)overlapBuffer->base)[endChunk].max = refStart + refLength;
+ }
+
+ for (i = 0; i != refLength; ++i) {
+ if (cov[i] < UINT_MAX)
+ ++cov[i];
+ }
+ }
+ return 0;
+}
+
+static void GetCounts(AlignmentRecord const *data, unsigned const seqLen,
+ unsigned *const nMatch,
+ unsigned *const nMiss,
+ unsigned *const nIndels)
+{
+ bool const *has_mismatch = data->data.has_mismatch.buffer;
+ bool const *has_offset = data->data.has_ref_offset.buffer;
+ int32_t const *ref_offset = data->data.ref_offset.buffer;
+ unsigned const n = data->data.ref_offset.elements;
+ unsigned const left_clip = (n != 0 && has_offset[0] && ref_offset[0] < 0) ? -ref_offset[0] : 0;
+ int right_edge;
+ unsigned nmis;
+ unsigned nmatch;
+ unsigned i;
+ unsigned j;
+
+ for (right_edge = data->data.ref_len, i = 0; i != n; ++i)
+ right_edge -= ref_offset[i];
+ if (right_edge > seqLen)
+ right_edge = seqLen;
+ for (j = left_clip ? 1 : 0, i = left_clip, nmatch = nmis = 0; i < right_edge; ) {
+ if (has_offset[i]) {
+ int const offs = ref_offset[j++];
+
+ if (offs < 0) {
+ i += (unsigned)(-offs);
+ continue;
+ }
+ }
+ if (has_mismatch[i])
+ ++nmis;
+ else
+ ++nmatch;
+ ++i;
+ }
+ *nMatch = nmatch;
+ *nMiss = nmis;
+ *nIndels = n - (left_clip ? 1 : 0);
+}
+
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t const pos,
+ uint32_t const rawCigar[], uint32_t const cigCount,
+ char const seqDNA[], uint32_t const seqLen, uint32_t *matches)
+{
+ *matches = 0;
+ BAIL_ON_FAIL(ReferenceSeq_Compress(self->rseq, (G.acceptHardClip ? ewrefmgr_co_AcceptHardClip : 0) + ewrefmgr_cmp_Binary, pos,
+ seqDNA, seqLen, rawCigar, cigCount, 0, NULL, 0, 0, NULL, 0, &data->data));
+
+ if (!G.acceptNoMatch && data->data.ref_len == 0)
+ return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+
+ if (!self->out_of_order && pos < self->lastOffset) {
+ Unsorted(self);
+ }
+ if (self->out_of_order)
+ return 0;
+ else {
+ unsigned nmis;
+ unsigned nmatch;
+ unsigned indels;
+
+ self->lastOffset = data->data.effective_offset;
+ GetCounts(data, seqLen, &nmatch, &nmis, &indels);
+ *matches = nmatch;
+
+ if (G.acceptNoMatch || nmatch >= G.minMatchCount)
+ return ReferenceAddCoverage(self, data->data.effective_offset,
+ data->data.ref_len, nmis, indels,
+ data->isPrimary);
+ else
+ return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+ }
+}
+
+static rc_t IdVecAppend(KDataBuffer *vec, uint64_t id)
+{
+ uint64_t const end = vec->elem_count;
+
+ BAIL_ON_FAIL(KDataBufferResize(vec, end + 1));
+ ((uint64_t *)vec->base)[end] = id;
+ return 0;
+}
+
+rc_t ReferenceAddAlignId(Reference *self,
+ int64_t align_id,
+ bool is_primary
+ )
+{
+ if (self->out_of_order)
+ return 0;
+ return IdVecAppend(is_primary ? &self->pri_align : &self->sec_align, align_id);
+}
+
+rc_t ReferenceWhack(Reference *self, bool commit)
+{
+ rc_t rc = 0;
+
+ if (self) {
+#if DUMP_CONFIG
+ if (self->mgr)
+ ReferenceMgr_DumpConfig(self->mgr);
+#endif
+ if (commit) {
+ rc = FlushBuffers(self, self->length, true, true);
+ if (rc != 0)
+ commit = false;
+ }
+ KDataBufferWhack(&self->sec_align);
+ KDataBufferWhack(&self->pri_align);
+ KDataBufferWhack(&self->mismatches);
+ KDataBufferWhack(&self->indels);
+ KDataBufferWhack(&self->coverage);
+ KDataBufferWhack(&self->pri_overlap);
+ KDataBufferWhack(&self->sec_overlap);
+ if (self->rseq)
+ rc = ReferenceSeq_Release(self->rseq);
+ if (self->out_of_order) {
+ (void)LOGMSG(klogInfo, "Starting coverage calculation");
+ rc = ReferenceMgr_Release(self->mgr, commit, NULL, true);
+ }
+ else {
+ rc = ReferenceMgr_Release(self->mgr, commit, NULL, false);
+ }
+ }
+ return rc;
+}
diff --git a/tools/bam-loader/reference-writer.h b/tools/bam-loader/reference-writer.h
new file mode 100644
index 0000000..67d57f4
--- /dev/null
+++ b/tools/bam-loader/reference-writer.h
@@ -0,0 +1,69 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_REFERENCE_WRITER_H_
+#define BAM_LOAD_REFERENCE_WRITER_H_ 1
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <klib/data-buffer.h>
+
+#include <align/writer-reference.h>
+#include "alignment-writer.h"
+
+typedef struct s_reference {
+ const ReferenceMgr *mgr;
+ const ReferenceSeq *rseq;
+ int64_t lastRefId;
+ int32_t lastOffset;
+ unsigned curPos;
+ unsigned endPos;
+ unsigned length;
+ KDataBuffer coverage;
+ KDataBuffer mismatches;
+ KDataBuffer indels;
+ KDataBuffer pri_align;
+ KDataBuffer sec_align;
+ KDataBuffer pri_overlap;
+ KDataBuffer sec_overlap;
+ bool out_of_order;
+ char last_id[256];
+} Reference;
+
+rc_t ReferenceInit(Reference *self, const VDBManager *mgr, VDatabase *db);
+rc_t ReferenceSetFile(Reference *self, const char *id, uint64_t length, uint8_t const md5[16]);
+rc_t ReferenceVerify(Reference const *self, char const id[], uint64_t length, uint8_t const md5[16]);
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[]);
+rc_t ReferenceAddAlignId(Reference *self,
+ int64_t align_id,
+ bool is_primary
+ );
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t pos,
+ uint32_t const rawCigar[], uint32_t cigCount,
+ char const seqDNA[], uint32_t seqLen, uint32_t *matches);
+rc_t ReferenceWhack(Reference *self, bool commit);
+
+#endif
diff --git a/tools/bam-loader/sequence-writer.c b/tools/bam-loader/sequence-writer.c
new file mode 100644
index 0000000..ec0f22e
--- /dev/null
+++ b/tools/bam-loader/sequence-writer.c
@@ -0,0 +1,345 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/database.h>
+
+#include <kdb/manager.h>
+
+#include <insdc/sra.h>
+#include <insdc/insdc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include <ctype.h>
+
+#include "Globals.h"
+#include <align/writer-sequence.h>
+#include "sequence-writer.h"
+
+/* MARK: Sequence Object */
+
+Sequence *SequenceInit(Sequence *self, VDatabase *db) {
+ memset(self, 0, sizeof(*self));
+ self->db = db;
+ VDatabaseAddRef(db);
+ return self;
+}
+
+rc_t SequenceWriteRecord(Sequence *self,
+ SequenceRecord const *rec,
+ bool color,
+ bool isDup,
+ INSDC_SRA_platform_id platform
+ )
+{
+ rc_t rc = 0;
+ uint8_t nreads = rec->numreads;
+ unsigned i;
+ unsigned seqLen;
+ int64_t dummyRowId;
+
+ uint8_t readInfo[4096];
+ void *h_readInfo = NULL;
+
+ INSDC_coord_zero *readStart = (void *)readInfo;
+ INSDC_coord_len *readLen;
+ uint8_t *alcnt;
+ INSDC_SRA_xread_type *readType;
+ INSDC_SRA_read_filter *readFilter;
+ bool *mask = NULL;
+ size_t const elemSize = sizeof(alcnt[0]) + sizeof(readType[0])
+ + sizeof(readStart[0]) + sizeof(readLen[0])
+ + sizeof(readFilter[0]);
+
+ TableWriterSeqData data;
+
+ for (i = seqLen = 0; i != nreads; ++i) {
+ seqLen += rec->readLen[i];
+ }
+
+ if (nreads * elemSize + G.keepMismatchQual * seqLen * sizeof(mask[0]) > sizeof(readInfo))
+ {
+ h_readInfo = malloc(nreads * elemSize + G.keepMismatchQual * seqLen * sizeof(mask[0]));
+ if (h_readInfo == NULL)
+ return RC(rcAlign, rcTable, rcWriting, rcMemory, rcExhausted);
+ readStart = h_readInfo;
+ }
+ readLen = (INSDC_coord_len *)&readStart[nreads];
+ alcnt = (uint8_t *)&readLen[nreads];
+ readType = (INSDC_SRA_xread_type *)&alcnt[nreads];
+ readFilter = (INSDC_SRA_read_filter *)&readType[nreads];
+
+ if (G.keepMismatchQual) {
+ mask = (bool *)&readFilter[nreads];
+
+ for (i = 0; i != seqLen; ++i) {
+ mask[i] = (rec->qual[i] & 0x80) != 0;
+ }
+ }
+
+ for (i = 0; i != nreads; ++i) {
+ alcnt[i] = rec->aligned[i] ? 1 : 0;
+ readLen[i] = rec->readLen[i];
+ readStart[i] = rec->readStart[i];
+ readType[i] = SRA_READ_TYPE_BIOLOGICAL | (rec->orientation[i] ?
+ SRA_READ_TYPE_REVERSE:
+ SRA_READ_TYPE_FORWARD
+ );
+ readFilter[i] = isDup ? SRA_READ_FILTER_CRITERIA
+ : rec->is_bad[i] ? SRA_READ_FILTER_REJECT : SRA_READ_FILTER_PASS;
+ }
+
+ memset(&data, 0, sizeof(data));
+
+ data.sequence.buffer = rec->seq;
+ data.sequence.elements = seqLen;
+
+ data.quality.buffer = rec->qual;
+ data.quality.elements = seqLen;
+
+ if (G.keepMismatchQual) {
+ data.no_quantize_mask.buffer = mask;
+ data.no_quantize_mask.elements = seqLen;
+ }
+
+ data.alignment_count.buffer = alcnt;
+ data.alignment_count.elements = nreads;
+
+ data.nreads = nreads;
+
+ data.read_type.buffer = readType;
+ data.read_type.elements = nreads;
+
+ data.read_start.buffer = readStart;
+ data.read_start.elements = nreads;
+
+ data.read_len.buffer = readLen;
+ data.read_len.elements = nreads;
+
+ data.tmp_key_id = rec->keyId;
+
+ data.spot_group.buffer = rec->spotGroup;
+ data.spot_group.elements = rec->spotGroupLen;
+
+ data.cskey.buffer = rec->cskey;
+ data.cskey.elements = nreads;
+
+ data.read_filter.buffer = readFilter;
+ data.read_filter.elements = nreads;
+
+ data.platform.buffer = &platform;
+ data.platform.elements = 1;
+
+ data.ti.buffer = rec->ti;
+ data.ti.elements = nreads;
+
+ if (!G.no_real_output) {
+ if (self->tbl == NULL) {
+ int csoption = (color ? ewseq_co_ColorSpace : 0);
+
+ if(G.hasTI) csoption |= ewseq_co_TI;
+
+ rc = TableWriterSeq_Make(&self->tbl, self->db,
+ csoption | ewseq_co_NoLabelData | ewseq_co_SpotGroup, G.QualQuantizer);
+ }
+ if (rc == 0) {
+ rc = TableWriterSeq_Write(self->tbl, &data, &dummyRowId);
+ }
+ }
+
+ if (h_readInfo)
+ free(h_readInfo);
+
+ return rc;
+}
+
+rc_t SequenceDoneWriting(Sequence *self)
+{
+ return TableWriterSeq_TmpKeyStart(self->tbl);
+}
+
+rc_t SequenceReadKey(const Sequence *cself, int64_t row, uint64_t *keyId)
+{
+ return TableWriterSeq_TmpKey(cself->tbl, row, keyId);
+}
+
+rc_t SequenceUpdateAlignData(Sequence *self, int64_t rowId, unsigned nreads,
+ int64_t const primeId[/* nreads */],
+ uint8_t const algnCnt[/* nreads */])
+{
+ TableWriterData data[2];
+
+ data[0].buffer = primeId; data[0].elements = nreads;
+ data[1].buffer = algnCnt; data[1].elements = nreads;
+
+ return TableWriterSeq_WriteAlignmentData(self->tbl, rowId, &data[0], &data[1]);
+}
+
+void SequenceWhack(Sequence *self, bool commit) {
+ uint64_t dummyRows;
+ rc_t rc;
+
+ VDatabaseRelease(self->db);
+
+ if (self->tbl == NULL)
+ return;
+
+ rc = TableWriterSeq_Whack(self->tbl, commit, &dummyRows);
+}
+
+/* MARK: SequenceRecord Object */
+static
+rc_t SequenceRecordResize(SequenceRecord *self,
+ KDataBuffer *storage,
+ unsigned numreads,
+ unsigned seqLen)
+{
+ size_t sz;
+ rc_t rc;
+
+ sz = seqLen * (sizeof(self->seq[0]) + sizeof(self->qual[0])) +
+ numreads * (sizeof(self->ti) +
+ sizeof(self->readStart[0]) +
+ sizeof(self->readLen[0]) +
+ sizeof(self->aligned[0]) +
+ sizeof(self->orientation[0]) +
+ sizeof(self->alignmentCount[0]) +
+ sizeof(self->cskey[0])
+ );
+ storage->elem_bits = 8;
+ rc = KDataBufferResize(storage, sz);
+ if (rc)
+ return rc;
+ self->numreads = numreads;
+
+ self->ti = (uint64_t *)storage->base;
+ self->readStart = (uint32_t *)&self->ti[numreads];
+ self->readLen = (uint32_t *)&self->readStart[numreads];
+ self->aligned = (bool *)&self->readLen[numreads];
+ self->orientation = (uint8_t *)&self->aligned[numreads];
+ self->is_bad = (uint8_t *)&self->orientation[numreads];
+ self->alignmentCount = (uint8_t *)&self->is_bad[numreads];
+ self->cskey = (char *)&self->alignmentCount[numreads];
+ self->seq = (char *)&self->cskey[numreads];
+ self->qual = (uint8_t *)&self->seq[seqLen];
+
+ self->spotGroup = NULL;
+ self->spotGroupLen = 0;
+
+ return 0;
+}
+
+rc_t SequenceRecordInit(SequenceRecord *self, unsigned numreads, unsigned readLen[])
+{
+ unsigned i;
+ unsigned seqlen = 0;
+ rc_t rc;
+
+ for (i = 0; i != numreads; ++i) {
+ seqlen += readLen[i];
+ }
+ rc = SequenceRecordResize(self, &self->storage, numreads, seqlen);
+ if (rc)
+ return rc;
+ memset(self->storage.base, 0, KDataBufferBytes(&self->storage));
+
+ for (seqlen = 0, i = 0; i != numreads; ++i) {
+ self->readLen[i] = readLen[i];
+ self->readStart[i] = seqlen;
+ seqlen += readLen[i];
+ }
+ self->numreads = numreads;
+ memset(self->cskey, 'T', numreads);
+ return 0;
+}
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+ const SequenceRecord *other
+ )
+{
+ /* save the locations of the original data */
+ unsigned const seq = (uint8_t const *)self->seq - (uint8_t const *)self->storage.base;
+ unsigned const qual = (uint8_t const *)self->qual - (uint8_t const *)self->storage.base;
+ unsigned const cskey = (uint8_t const *)self->cskey - (uint8_t const *)self->storage.base;
+ unsigned const alignmentCount = (uint8_t const *)self->alignmentCount - (uint8_t const *)self->storage.base;
+ unsigned const is_bad = (uint8_t const *)self->is_bad - (uint8_t const *)self->storage.base;
+ unsigned const orientation = (uint8_t const *)self->orientation - (uint8_t const *)self->storage.base;
+ unsigned const aligned = (uint8_t const *)self->aligned - (uint8_t const *)self->storage.base;
+ unsigned const ti = (uint8_t const *)self->ti - (uint8_t const *)self->storage.base;
+ unsigned const readLen = (uint8_t const *)self->readLen - (uint8_t const *)self->storage.base;
+ unsigned const readStart = (uint8_t const *)self->readStart - (uint8_t const *)self->storage.base;
+
+ rc_t rc;
+ unsigned seqlen;
+ unsigned otherSeqlen;
+ unsigned i;
+ unsigned numreads = self->numreads;
+
+ for (seqlen = 0, i = 0; i != numreads; ++i) {
+ seqlen += self->readLen[i];
+ }
+ for (otherSeqlen = 0, i = 0; i != other->numreads; ++i) {
+ otherSeqlen += other->readLen[i];
+ }
+
+ rc = SequenceRecordResize(self, &self->storage, self->numreads + other->numreads, seqlen + otherSeqlen);
+ if (rc)
+ return rc;
+ /* this needs to be reverse order from assignment in Resize function
+ * these regions can overlap
+ */
+ memmove(self->qual, &((uint8_t const *)self->storage.base)[qual], seqlen);
+ memmove(self->seq, &((uint8_t const *)self->storage.base)[seq], seqlen);
+ memmove(self->cskey, &((uint8_t const *)self->storage.base)[cskey], numreads * sizeof(self->cskey[0]));
+ memmove(self->alignmentCount, &((uint8_t const *)self->storage.base)[alignmentCount], numreads * sizeof(self->alignmentCount[0]));
+ memmove(self->is_bad, &((uint8_t const *)self->storage.base)[is_bad], numreads * sizeof(self->is_bad[0]));
+ memmove(self->orientation, &((uint8_t const *)self->storage.base)[orientation], numreads * sizeof(self->orientation[0]));
+ memmove(self->aligned, &((uint8_t const *)self->storage.base)[aligned], numreads * sizeof(self->aligned[0]));
+ memmove(self->readLen, &((uint8_t const *)self->storage.base)[readLen], numreads * sizeof(self->readLen[0]));
+ memmove(self->ti, &((uint8_t const *)self->storage.base)[ti], numreads * sizeof(self->ti[0]));
+
+ memcpy(&self->ti[numreads], other->ti, other->numreads * sizeof(self->ti[0]));
+ memcpy(&self->readLen[numreads], other->readLen, other->numreads * sizeof(self->readLen[0]));
+ memcpy(&self->aligned[numreads], other->aligned, other->numreads * sizeof(self->aligned[0]));
+ memcpy(&self->orientation[numreads], other->orientation, other->numreads * sizeof(self->orientation[0]));
+ memcpy(&self->is_bad[numreads], other->is_bad, other->numreads * sizeof(self->is_bad[0]));
+ memcpy(&self->alignmentCount[numreads], other->alignmentCount, other->numreads * sizeof(self->alignmentCount[0]));
+ memcpy(&self->cskey[numreads], other->cskey, other->numreads * sizeof(self->cskey[0]));
+ memcpy(&self->seq[seqlen], other->seq, otherSeqlen);
+ memcpy(&self->qual[seqlen], other->qual, otherSeqlen);
+
+ for (i = 0, seqlen = 0; i != self->numreads; ++i) {
+ self->readStart[i] = seqlen;
+ seqlen += self->readLen[i];
+ }
+
+ return 0;
+}
diff --git a/tools/bam-loader/sequence-writer.h b/tools/bam-loader/sequence-writer.h
new file mode 100644
index 0000000..ccd4071
--- /dev/null
+++ b/tools/bam-loader/sequence-writer.h
@@ -0,0 +1,84 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_SEQUENCE_WRITER_H_
+#define BAM_LOAD_SEQUENCE_WRITER_H_ 1
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+
+struct TableWriterSeq;
+
+typedef struct s_sequence_record {
+ char *seq;
+ uint8_t *qual;
+ uint32_t *readStart;
+ uint32_t *readLen;
+ uint8_t *orientation;
+ uint8_t *is_bad;
+ uint8_t *alignmentCount;
+ char *spotGroup;
+ bool *aligned;
+ char *cskey;
+ uint64_t *ti;
+ uint64_t keyId;
+ unsigned spotGroupLen;
+ KDataBuffer storage;
+ uint8_t numreads;
+} SequenceRecord;
+
+
+rc_t SequenceRecordInit(SequenceRecord *self,
+ unsigned numreads, unsigned readLen[]);
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+ const SequenceRecord *other);
+
+typedef struct s_sequence {
+ VDatabase *db;
+ struct TableWriterSeq const *tbl;
+} Sequence;
+
+Sequence *SequenceInit(Sequence *self, VDatabase *db);
+
+rc_t SequenceWriteRecord(Sequence *self, SequenceRecord const *rec,
+ bool color, bool isDup, INSDC_SRA_platform_id platform);
+
+rc_t SequenceDoneWriting(Sequence *self);
+rc_t SequenceReadKey(const Sequence *self, int64_t row, uint64_t *key);
+rc_t SequenceUpdateAlignData(Sequence *self, int64_t row, unsigned nreads,
+ const int64_t primeId[/* nreads */],
+ const uint8_t alignCount[/* nreads */]);
+
+void SequenceWhack(Sequence *self, bool commit);
+
+
+#endif /* ndef BAM_LOAD_SEQUENCE_WRITER_H_ */
diff --git a/tools/cg-load/Makefile b/tools/cg-load/Makefile
new file mode 100644
index 0000000..a84ba01
--- /dev/null
+++ b/tools/cg-load/Makefile
@@ -0,0 +1,119 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/cg-load
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+ cg-load
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# cg-load
+#
+CGLOAD_SRC = \
+ file-version-factory \
+ file \
+ f1_3 \
+ f1_5 \
+ f2_0 \
+ f2_2 \
+ factory-reads \
+ factory-mappings \
+ factory-evidence-intervals \
+ factory-evidence-dnbs \
+ writer-seq \
+ writer-algn \
+ writer-evidence-intervals \
+ writer-evidence-dnbs \
+ cg-load
+
+CGLOAD_OBJ = \
+ $(addsuffix .$(OBJX),$(CGLOAD_SRC))
+
+CGLOAD_LIB = \
+ -lload \
+ -lkapp \
+ -lalign-writer \
+ -dwaxf \
+ -dwsraxf \
+ -dwvxf \
+ -lwvdb \
+ -lwkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lksrch \
+ -lkfg \
+ -lkfs \
+ -lklib \
+ -lkq \
+ -lkproc \
+ -lm
+
+$(BINDIR)/cg-load: $(CGLOAD_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(CGLOAD_LIB)
diff --git a/tools/cg-load/cg-load.c b/tools/cg-load/cg-load.c
new file mode 100644
index 0000000..c73db05
--- /dev/null
+++ b/tools/cg-load/cg-load.c
@@ -0,0 +1,1120 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kfs/directory.h>
+#include <kfs/arc.h>
+#include <kfs/tar.h>
+#include <kfs/file.h>
+#include <kdb/manager.h>
+#include <kdb/meta.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <kapp/loader-meta.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <insdc/insdc.h>
+#include <align/writer-reference.h>
+#include <kapp/log-xml.h>
+
+#include "debug.h"
+#include "cg-load.vers.h"
+#include "file.h"
+#include "writer-seq.h"
+#include "writer-algn.h"
+#include "writer-evidence-intervals.h"
+
+#include <os-native.h>
+#include <sysalloc.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+#include <assert.h>
+
+typedef struct SParam_struct
+{
+ const char* argv0;
+
+ KDirectory* input_dir;
+ const KDirectory *map_dir;
+ const KDirectory *asm_dir;
+ KDirectory* output_dir;
+
+ const char* map_path;
+ const char* asm_path;
+ const char* schema;
+ const char* refseqcfg;
+ const char* refseqpath;
+ const char* library;
+ char const** refFiles; /* NULL-terminated array pointing to argv */
+ /* mostly for debugging */
+ uint32_t refseq_chunk;
+ const char* out;
+ uint32_t force;
+ uint32_t force_refw;
+ uint32_t force_readw;
+ uint32_t no_read_ahead;
+ const char* qual_quant;
+ uint32_t no_spot_group;
+ uint32_t min_mapq;
+ uint32_t single_mate;
+ uint32_t cluster_size;
+} SParam;
+
+typedef struct DB_Handle_struct {
+ VDBManager* mgr;
+ VSchema* schema;
+ VDatabase* db;
+ const ReferenceMgr* rmgr;
+ const CGWriterSeq* wseq;
+ TReadsData* reads;
+ const CGWriterAlgn* walgn;
+ TMappingsData* mappings;
+ const CGWriterEvdInt* wev_int;
+ TEvidenceIntervalsData* ev_int;
+ const CGWriterEvdDnbs* wev_dnb;
+ TEvidenceDnbsData* ev_dnb;
+} DB_Handle;
+
+static
+rc_t DB_Init(const SParam* p, DB_Handle* h)
+{
+ rc_t rc;
+
+ if( (rc = VDBManagerMakeUpdate(&h->mgr, NULL)) != 0 ) {
+ LOGERR(klogErr, rc, "failed to create VDB Manager");
+
+ }
+ else if( (rc = VDBManagerMakeSchema(h->mgr, &h->schema)) != 0 ) {
+ LOGERR(klogErr, rc, "failed to create schema");
+
+ }
+ else if( (rc = VSchemaParseFile(h->schema, p->schema)) != 0 ) {
+ PLOGERR(klogErr, (klogErr, rc, "failed to parse schema file '$(schema)'", PLOG_S(schema), p->schema));
+
+ }
+ else if( (rc = VDBManagerCreateDB(h->mgr, &h->db, h->schema, "NCBI:align:db:alignment_evidence",
+ p->force ? kcmInit : kcmCreate, p->out)) != 0 ) {
+ PLOGERR(klogErr, (klogErr, rc, "failed to create database at '$(path)'", PLOG_S(path), p->out));
+
+ }
+ else if( (rc = ReferenceMgr_Make(&h->rmgr, h->db, h->mgr, (p->force_refw ? ewrefmgr_co_allREADs : 0),
+ p->refseqcfg, p->refseqpath, p->refseq_chunk, 350 * 1024 * 1024, 0)) != 0 ) {
+ LOGERR(klogErr, rc, "failed to create reference manager");
+
+ }
+ else if( (rc = CGWriterAlgn_Make(&h->walgn, &h->mappings, h->db, h->rmgr, p->min_mapq, p->single_mate, p->cluster_size)) != 0 ) {
+ LOGERR(klogErr, rc, "failed to create alignment writer");
+
+ }
+ else if( (rc = CGWriterSeq_Make(&h->wseq, &h->reads, h->db, (p->force_readw ? ewseq_co_SaveRead : 0) |
+ (p->no_spot_group ? 0 : ewseq_co_SpotGroup), p->qual_quant)) != 0 ) {
+ LOGERR(klogErr, rc, "failed to create sequence writer");
+
+ } else if( p->asm_path && (rc = CGWriterEvdInt_Make(&h->wev_int, &h->ev_int, h->db, h->rmgr, 0)) != 0 ) {
+ LOGERR(klogErr, rc, "failed to create evidence intervals writer");
+
+ } else if( p->asm_path && (rc = CGWriterEvdDnbs_Make(&h->wev_dnb, &h->ev_dnb, h->db, h->rmgr, 0)) != 0 ) {
+ LOGERR(klogErr, rc, "failed to create evidence dnbs writer");
+ } else {
+ const char** r = p->refFiles;
+ while( rc == 0 && *r != NULL ) {
+ if( (rc = ReferenceMgr_FastaPath(h->rmgr, *r++)) != 0 ) {
+ PLOGERR(klogInfo, (klogInfo, rc, "fasta file '$(file)'", "file=%s", r[-1]));
+ }
+ }
+ }
+ return rc;
+}
+
+static
+rc_t DB_Fini(const SParam* p, DB_Handle* h, bool drop)
+{
+ rc_t rc = 0, rc2;
+
+ /* THIS FUNCTION MAKES NO ATTEMPT TO PRESERVE INITIAL ERROR CODES
+ EACH SUCCESSIVE ERROR OVERWRITES THE PREVIOUS CODE */
+ if( h != NULL ) {
+ PLOGMSG(klogInfo, (klogInfo, "Fini SEQUENCE", "severity=status"));
+ if( (rc2 = CGWriterSeq_Whack(h->wseq, !drop, NULL)) != 0 && !drop ) {
+ drop = true;
+ rc = rc2;
+ }
+ h->wseq = NULL;
+ h->reads = NULL;
+ PLOGMSG(klogInfo, (klogInfo, "Fini (PRI&SEC)_ALIGNMENT", "severity=status"));
+ if( (rc2 = CGWriterAlgn_Whack(h->walgn, !drop, NULL, NULL)) != 0 && !drop ) {
+ drop = true;
+ rc = rc2;
+ }
+ h->walgn = NULL;
+ h->mappings = NULL;
+ PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_INTERVAL", "severity=status"));
+ if( (rc2 = CGWriterEvdInt_Whack(h->wev_int, !drop, NULL)) != 0 && !drop ) {
+ drop = true;
+ rc = rc2;
+ }
+ h->wev_int = NULL;
+ h->ev_int = NULL;
+ PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_ALIGNMENT", "severity=status"));
+ if( (rc2 = CGWriterEvdDnbs_Whack(h->wev_dnb, !drop, NULL)) != 0 && !drop ) {
+ drop = true;
+ rc = rc2;
+ }
+ h->wev_dnb = NULL;
+ h->ev_dnb = NULL;
+ PLOGMSG(klogInfo, (klogInfo, "Fini calculating reference coverage", "severity=status"));
+ if( (rc2 = ReferenceMgr_Release(h->rmgr, !drop, NULL, drop ? false : true)) != 0 && !drop ) {
+ drop = true;
+ rc = rc2;
+ LOGERR(klogErr, rc, "Failed calculating reference coverage");
+ }
+ h->rmgr = NULL;
+ if( rc == 0 )
+ {
+ KMetadata* meta;
+ if( (rc = VDatabaseOpenMetadataUpdate(h->db, &meta)) == 0 ) {
+ KMDataNode *node;
+ if( (rc = KMetadataOpenNodeUpdate(meta, &node, "/")) == 0 ) {
+ if( (rc = KLoaderMeta_Write(node, p->argv0, __DATE__, "Complete Genomics", KAppVersion())) != 0 ) {
+ LOGERR(klogErr, rc, "Cannot update loader meta");
+ }
+ KMDataNodeRelease(node);
+ }
+ KMetadataRelease(meta);
+ }
+ }
+ PLOGMSG(klogInfo, (klogInfo, "Fini VDatabaseRelease", "severity=status"));
+ VDatabaseRelease(h->db);
+ h->db = NULL;
+ VSchemaRelease(h->schema);
+ h->schema = NULL;
+ if( drop || rc != 0 ) {
+ rc2 = VDBManagerDrop(h->mgr, kptDatabase, p->out);
+ if( GetRCState(rc2) == rcNotFound ) {
+ /* WHAT WOULD BE THE POINT OF RESETTING "rc" TO ZERO? */
+ rc = 0;
+ } else if( rc2 != 0 ) {
+ if ( rc == 0 )
+ rc = rc2;
+ PLOGERR(klogErr, (klogErr, rc2, "cannot drop db at '$(path)'", PLOG_S(path), p->out));
+ }
+ }
+ VDBManagerRelease(h->mgr);
+ h->mgr = NULL;
+ }
+ return rc;
+}
+
+typedef struct FGroupKey_struct {
+ CG_EFileType type;
+ const CGFIELD_ASSEMBLY_ID_TYPE* assembly_id;
+ union {
+ struct {
+ const CGFIELD_SLIDE_TYPE* slide;
+ const CGFIELD_LANE_TYPE* lane;
+ const CGFIELD_BATCH_FILE_NUMBER_TYPE* batch_file_number;
+ } map;
+ struct {
+ const CGFIELD_SAMPLE_TYPE* sample;
+ const CGFIELD_CHROMOSOME_TYPE* chromosome;
+ } asmb;
+ } u;
+} FGroupKey;
+
+static
+rc_t CC FGroupKey_Make(FGroupKey* key, const CGLoaderFile* file, const SParam* param)
+{
+ rc_t rc = 0;
+ CG_EFileType ftype;
+
+ if( (rc = CGLoaderFile_GetType(file, &ftype)) == 0 ) {
+ switch(ftype) {
+ case cg_eFileType_READS:
+ case cg_eFileType_MAPPINGS:
+ key->type = cg_eFileType_READS;
+ if( (rc = CGLoaderFile_GetAssemblyId(file, &key->assembly_id)) == 0 &&
+ (rc = CGLoaderFile_GetSlide(file, &key->u.map.slide)) == 0 &&
+ (rc = CGLoaderFile_GetLane(file, &key->u.map.lane)) == 0 ) {
+ rc = CGLoaderFile_GetBatchFileNumber(file, &key->u.map.batch_file_number);
+ }
+ break;
+ case cg_eFileType_EVIDENCE_INTERVALS:
+ case cg_eFileType_EVIDENCE_DNBS:
+ if( param->asm_path != NULL ) {
+ /* do not pick up ASM files if not requested */
+ key->type = cg_eFileType_EVIDENCE_INTERVALS;
+ if( (rc = CGLoaderFile_GetAssemblyId(file, &key->assembly_id)) == 0 &&
+ (rc = CGLoaderFile_GetSample(file, &key->u.asmb.sample)) == 0 ) {
+ rc = CGLoaderFile_GetChromosome(file, &key->u.asmb.chromosome);
+ }
+ break;
+ }
+ default:
+ rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcIgnored);
+ break;
+ }
+ }
+ return rc;
+}
+static
+rc_t CC FGroupKey_Validate(const FGroupKey* key)
+{
+ rc_t rc = 0;
+ DEBUG_MSG(5, ("KEY: "));
+ switch( key->type ) {
+ case cg_eFileType_READS:
+ DEBUG_MSG(5, ("%s:%s:%s:%04u", key->assembly_id, key->u.map.slide, key->u.map.lane, key->u.map.batch_file_number));
+ if( !key->assembly_id || !key->u.map.slide || !key->u.map.lane || !key->u.map.batch_file_number ) {
+ rc = RC(rcExe, rcQueue, rcValidating, rcId, rcIncomplete);
+ }
+ break;
+ case cg_eFileType_EVIDENCE_INTERVALS:
+ DEBUG_MSG(5, ("%s:%s:%s", key->assembly_id, key->u.asmb.sample, key->u.asmb.chromosome));
+ if( !key->assembly_id || !key->u.asmb.sample || !key->u.asmb.chromosome ) {
+ rc = RC(rcExe, rcQueue, rcValidating, rcId, rcIncomplete);
+ }
+ break;
+ default:
+ DEBUG_MSG(5, ("CORRUPT!!"));
+ rc = RC(rcExe, rcQueue, rcValidating, rcId, rcWrongType);
+ break;
+ }
+ return rc;
+}
+
+typedef struct FGroupMAP_struct {
+ BSTNode dad;
+ FGroupKey key;
+ const CGLoaderFile* seq;
+ const CGLoaderFile* align;
+} FGroupMAP;
+
+static
+void FGroupMAP_CloseFiles(FGroupMAP *g)
+{
+ CGLoaderFile_Close(g->seq);
+ CGLoaderFile_Close(g->align);
+}
+
+static
+void CC FGroupMAP_Whack( BSTNode *node, void *data )
+{
+ FGroupMAP* n = (FGroupMAP*)node;
+ CGLoaderFile_Release(n->seq, false);
+ CGLoaderFile_Release(n->align, false);
+ free(node);
+}
+
+static
+int CC FGroupMAP_Cmp( const void *item, const BSTNode *node )
+{
+ const FGroupKey* i = (const FGroupKey*)item;
+ const FGroupMAP* n = (const FGroupMAP*)node;
+
+ int r = strcmp(i->assembly_id, n->key.assembly_id);
+ if( r == 0 ) {
+ if( i->type == n->key.type ) {
+ switch( i->type ) {
+ case cg_eFileType_READS:
+ if( (r = strcmp(i->u.map.slide, n->key.u.map.slide)) == 0 ) {
+ if( (r = strcmp(i->u.map.lane, n->key.u.map.lane)) == 0 ) {
+ r = *(i->u.map.batch_file_number) - *(n->key.u.map.batch_file_number);
+ }
+ }
+ break;
+ case cg_eFileType_EVIDENCE_INTERVALS:
+ if( (r = strcmp(i->u.asmb.sample, n->key.u.asmb.sample)) == 0 ) {
+ r = strcmp(i->u.asmb.chromosome, n->key.u.asmb.chromosome);
+ }
+ break;
+ default:
+ r = -1;
+ break;
+ }
+ } else {
+ r = -1;
+ }
+ }
+ return r;
+}
+
+static
+int CC FGroupMAP_Sort( const BSTNode *item, const BSTNode *n )
+{
+ return FGroupMAP_Cmp(&((const FGroupMAP*)item)->key, n);
+}
+
+typedef struct FGroupMAP_FindData_struct {
+ FGroupKey key;
+ int64_t rowid;
+} FGroupMAP_FindData;
+
+static
+bool CC FGroupMAP_FindRowId( BSTNode *node, void *data )
+{
+ FGroupMAP_FindData* d = (FGroupMAP_FindData*)data;
+ const FGroupMAP* n = (const FGroupMAP*)node;
+
+ if( FGroupMAP_Cmp(&d->key, node) == 0 ) {
+ if( CGLoaderFile_GetStartRow(n->seq, &d->rowid) == 0 ) {
+ return true;
+ }
+ }
+ return false;
+}
+
+static
+rc_t CC FGroupMAP_Set(FGroupMAP* g, const CGLoaderFile* file)
+{
+ rc_t rc = 0;
+ CG_EFileType ftype;
+
+ if( (rc = CGLoaderFile_GetType(file, &ftype)) == 0 ) {
+ if( g->key.type == cg_eFileType_READS ) {
+ if( ftype == cg_eFileType_READS ) {
+ if( g->seq == NULL ) {
+ g->seq = file;
+ } else {
+ rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+ }
+ } else if( ftype == cg_eFileType_MAPPINGS ) {
+ if( g->align == NULL ) {
+ g->align = file;
+ } else {
+ rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+ }
+ } else {
+ rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcWrongType);
+ }
+ } else if( g->key.type == cg_eFileType_EVIDENCE_INTERVALS ) {
+ if( ftype == cg_eFileType_EVIDENCE_INTERVALS ) {
+ if( g->seq != NULL ) {
+ rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+ } else {
+ g->seq = file;
+ }
+ } else if( ftype == cg_eFileType_EVIDENCE_DNBS ) {
+ if( g->align == NULL ) {
+ g->align = file;
+ } else {
+ rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+ }
+ } else {
+ rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcWrongType);
+ }
+ } else {
+ rc = RC(rcExe, rcQueue, rcInserting, rcType, rcUnexpected);
+ }
+ }
+ return rc;
+}
+
+static
+void CC FGroupMAP_Validate( BSTNode *n, void *data )
+{
+ const FGroupMAP* g = (const FGroupMAP*)n;
+ rc_t rc = 0, *rc_out = (rc_t*)data;
+ const char* rnm = NULL, *mnm = NULL;
+
+ rc = FGroupKey_Validate(&g->key);
+ if( g->seq != NULL ) {
+ CGLoaderFile_Filename(g->seq, &rnm);
+ rnm = rnm ? strrchr(rnm, '/') : rnm;
+ DEBUG_MSG(5, (" READS(%s)", rnm));
+ }
+ if( g->align ) {
+ CGLoaderFile_Filename(g->align, &mnm);
+ mnm = mnm ? strrchr(mnm, '/') : mnm;
+ DEBUG_MSG(5, (" MAPPINGS(%s)", mnm));
+ }
+ DEBUG_MSG(5, ("\n"));
+ if( rc == 0 && g->seq == NULL ) {
+ rc = RC(rcExe, rcQueue, rcValidating, rcItem, rcIncomplete);
+ }
+
+ /* THIS USED TO WIPE OUT THE "rc" ON EACH ENTRY */
+ if( rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc, "file pair $(f1)[mandatory], $(f2)[optional]", PLOG_2(PLOG_S(f1),PLOG_S(f2)), rnm, mnm));
+ if ( * rc_out == 0 )
+ *rc_out = rc;
+#if 0
+ } else {
+ *rc_out = RC(0, 0, 0, 0, 0);
+#endif
+ }
+}
+
+typedef struct DirVisit_Data_Struct {
+ const SParam* param;
+ BSTree* tree;
+ const KDirectory* dir;
+} DirVisit_Data;
+
+/* you cannot addref to this dir object cause it's created on stack silently */
+static
+rc_t CC DirVisitor(const KDirectory *dir, uint32_t type, const char *name, void *data)
+{
+ rc_t rc = 0;
+ DirVisit_Data* d = (DirVisit_Data*)data;
+
+ if( (type & ~kptAlias) == kptFile ) {
+ if (strcmp(&name[strlen(name) - 4], ".tsv") == 0 ||
+ strcmp(&name[strlen(name) - 8], ".tsv.bz2") == 0 ||
+ strcmp(&name[strlen(name) - 7], ".tsv.gz") == 0)
+ {
+ char buf[4096];
+ const CGLoaderFile* file;
+ FGroupKey key;
+ if( (rc = KDirectoryResolvePath(dir, true, buf, sizeof(buf), name)) == 0 &&
+ (rc = CGLoaderFile_Make(&file, d->dir, buf, NULL, !d->param->no_read_ahead)) == 0 &&
+ (rc = FGroupKey_Make(&key, file, d->param)) == 0 ) {
+
+ FGroupMAP* found = (FGroupMAP*)BSTreeFind(d->tree, &key, FGroupMAP_Cmp);
+ DEBUG_MSG(5, ("file %s recognized\n", name));
+ if( found != NULL ) {
+ rc = FGroupMAP_Set(found, file);
+ } else {
+ FGroupMAP* x = calloc(1, sizeof(*x));
+ if( x == NULL ) {
+ rc = RC(rcExe, rcFile, rcInserting, rcMemory, rcExhausted);
+ } else {
+ memcpy(&x->key, &key, sizeof(key));
+ if( (rc = FGroupMAP_Set(x, file)) == 0 ) {
+ rc = BSTreeInsertUnique(d->tree, &x->dad, NULL, FGroupMAP_Sort);
+ }
+ }
+ }
+ } else if( GetRCObject(rc) == rcItem && GetRCState(rc) == rcIgnored ) {
+ DEBUG_MSG(5, ("file %s ignored\n", name));
+ rc = CGLoaderFile_Release(file, true);
+ file = NULL;
+ }
+ if( rc != 0 && file != NULL ) {
+ CGLoaderFile_LOG(file, klogErr, rc, NULL, NULL);
+ CGLoaderFile_Release(file, true);
+ }
+ } else if( strcmp(&name[strlen(name) - 4], ".tar") == 0 ) {
+ const KDirectory* tmp = d->dir;
+ if( (rc = KDirectoryOpenArcDirRead(dir, &d->dir, true, name, tocKFile, KArcParseTAR, NULL, NULL)) == 0 ) {
+ rc = KDirectoryVisit(d->dir, true, DirVisitor, d, ".");
+ KDirectoryRelease(d->dir);
+ }
+ d->dir = tmp;
+ }
+ }
+ return rc;
+}
+
+typedef struct FGroupMAP_LoadData_struct {
+ rc_t rc;
+ const SParam* param;
+ DB_Handle db;
+ const BSTree* reads;
+} FGroupMAP_LoadData;
+
+bool CC FGroupMAP_LoadReads( BSTNode *node, void *data )
+{
+ FGroupMAP* n = (FGroupMAP*)node;
+ FGroupMAP_LoadData* d = (FGroupMAP_LoadData*)data;
+
+ DEBUG_MSG(5, (" started\n", FGroupKey_Validate(&n->key)));
+ while( d->rc == 0 )
+ {
+ if( (d->rc = CGLoaderFile_GetRead(n->seq, d->db.reads)) == 0 ) {
+ if( (d->db.reads->flags & (cg_eLeftHalfDnbNoMatches | cg_eLeftHalfDnbMapOverflow)) &&
+ (d->db.reads->flags & (cg_eRightHalfDnbNoMatches | cg_eRightHalfDnbMapOverflow)) ) {
+ d->db.mappings->map_qty = 0;
+ } else {
+ d->rc = CGLoaderFile_GetMapping(n->align, d->db.mappings);
+ }
+ /* alignment written 1st than sequence -> primary_alignment_id must be set!! */
+ if( d->rc == 0 && (d->rc = CGWriterAlgn_Write(d->db.walgn, d->db.reads)) == 0 ) {
+ d->rc = CGWriterSeq_Write(d->db.wseq);
+ }
+ }
+ if( GetRCState(d->rc) == rcDone && GetRCObject(d->rc) == rcData ) {
+ bool eof = false;
+ d->rc = 0;
+ if( n->align == NULL || ((d->rc = CGLoaderFile_IsEof(n->align, &eof)) == 0 && eof) ) {
+ /* mappings file EOF detected ok */
+ DEBUG_MSG(5, (" done\n", FGroupKey_Validate(&n->key)));
+ break;
+ } else if( d->rc == 0 ) {
+ /* not EOF */
+ d->rc = RC(rcExe, rcFile, rcReading, rcData, rcUnexpected);
+ CGLoaderFile_LOG(n->align, klogErr, d->rc,
+ "extra mappings, possible that corresponding reads file is truncated", NULL);
+ }
+ }
+ d->rc = d->rc ? d->rc : Quitting();
+ }
+ if( d->rc != 0 ) {
+ CGLoaderFile_LOG(n->seq, klogErr, d->rc, NULL, NULL);
+ CGLoaderFile_LOG(n->align, klogErr, d->rc, NULL, NULL);
+ }
+ FGroupMAP_CloseFiles(n);
+ return d->rc != 0;
+}
+
+bool CC FGroupMAP_LoadEvidence( BSTNode *node, void *data )
+{
+ FGroupMAP* n = (FGroupMAP*)node;
+ FGroupMAP_LoadData* d = (FGroupMAP_LoadData*)data;
+
+ DEBUG_MSG(5, ("' started\n", FGroupKey_Validate(&n->key)));
+ while( d->rc == 0 ) {
+ if( (d->rc = CGLoaderFile_GetEvidenceIntervals(n->seq, d->db.ev_int)) == 0 ) {
+ int64_t evint_rowid;
+ if( n->align != NULL ) {
+ d->rc = CGLoaderFile_GetEvidenceDnbs(n->align, d->db.ev_int->interval_id, d->db.ev_dnb);
+ } else {
+ d->db.ev_dnb->qty = 0; /***weird, but the easiest place to fix ***/
+ }
+ /* interval written 1st than dnbs which uses interval as reference */
+ if( d->rc == 0 ) {
+ d->rc = CGWriterEvdInt_Write(d->db.wev_int, d->db.ev_dnb, &evint_rowid);
+ }
+ if( d->rc == 0 && n->align != NULL ) {
+ /* attach dnbs to reads */
+ uint16_t i;
+ FGroupMAP_FindData found;
+
+ found.key.type = cg_eFileType_READS;
+ d->rc = CGLoaderFile_GetAssemblyId(n->align, &found.key.assembly_id);
+ for(i = 0; d->rc == 0 && i < d->db.ev_dnb->qty; i++) {
+ found.key.u.map.slide = d->db.ev_dnb->dnbs[i].slide;
+ found.key.u.map.lane = d->db.ev_dnb->dnbs[i].lane;
+ found.key.u.map.batch_file_number = &d->db.ev_dnb->dnbs[i].file_num_in_lane;
+ if( BSTreeDoUntil(d->reads, false, FGroupMAP_FindRowId, &found) ) {
+ d->rc = CGWriterEvdDnbs_SetSEQ(d->db.wev_dnb, i, found.rowid);
+ } else {
+ d->rc = RC(rcExe, rcFile, rcWriting, rcData, rcInconsistent);
+ }
+ }
+ }
+ if( d->rc == 0 && n->align != NULL ) {
+ d->rc = CGWriterEvdDnbs_Write(d->db.wev_dnb, d->db.ev_int, evint_rowid);
+ }
+ }
+ if( GetRCState(d->rc) == rcDone && GetRCObject(d->rc) == rcData ) {
+ bool eof = false;
+ d->rc = 0;
+ if( n->align == NULL || ((d->rc = CGLoaderFile_IsEof(n->align, &eof)) == 0 && eof) ) {
+ /* dnbs file EOF detected ok */
+ DEBUG_MSG(5, ("' done\n", FGroupKey_Validate(&n->key)));
+ break;
+ } else if( d->rc == 0 ) {
+ /* not EOF */
+ d->rc = RC(rcExe, rcFile, rcReading, rcData, rcUnexpected);
+ CGLoaderFile_LOG(n->align, klogErr, d->rc,
+ "extra dnbs, possible that corresponding intervals file is truncated", NULL);
+ }
+ }
+ d->rc = d->rc ? d->rc : Quitting();
+ }
+ if( d->rc != 0 ) {
+ CGLoaderFile_LOG(n->seq, klogErr, d->rc, NULL, NULL);
+ CGLoaderFile_LOG(n->align, klogErr, d->rc, NULL, NULL);
+ }
+ FGroupMAP_CloseFiles(n);
+ return d->rc != 0;
+}
+
+
+static const char * lib_dst = "extra/library";
+
+static rc_t copy_library( const KDirectory * src_dir, KDirectory * dst_dir,
+ const char * in_path, const char * out_path )
+{
+ rc_t rc;
+ size_t l = string_size( out_path ) + string_size( lib_dst ) + 2;
+ char * dst = malloc( l );
+ if ( dst == NULL )
+ rc = RC( rcExe, rcFile, rcCopying, rcMemory, rcExhausted );
+ else
+ {
+ size_t written;
+ rc = string_printf( dst, l, &written, "%s/%s", out_path, lib_dst );
+ if ( rc == 0 )
+ rc = KDirectoryCopy( src_dir, dst_dir, true, in_path, dst );
+ free( dst );
+ }
+ return rc;
+}
+
+
+static rc_t open_dir_or_tar( const KDirectory *dir, const KDirectory **sub, const char * name )
+{
+ rc_t rc1, rc2;
+ rc1 = KDirectoryOpenDirRead( dir, sub, true, name );
+ if ( rc1 != 0 )
+ {
+ rc2 = KDirectoryOpenTarArchiveRead( dir, sub, true, name );
+ if ( rc2 == 0 )
+ rc1 = rc2;
+ }
+ return rc1;
+}
+
+static rc_t Load( SParam* param )
+{
+ rc_t rc = 0, rc1 = 0;
+ BSTree slides, evidence;
+
+
+ param->map_dir = NULL;
+ param->asm_dir = NULL;
+ param->output_dir = ( KDirectory * )param->input_dir;
+ BSTreeInit( &slides );
+ BSTreeInit( &evidence );
+
+ rc = open_dir_or_tar( param->input_dir, ¶m->map_dir, param->map_path );
+ if ( rc == 0 )
+ {
+ DirVisit_Data dv;
+
+ dv.param = param;
+ dv.tree = &slides;
+ dv.dir = param->map_dir;
+ rc = KDirectoryVisit( param->map_dir, true, DirVisitor, &dv, NULL );
+ if ( rc == 0 )
+ {
+ if ( param->asm_path != NULL )
+ {
+ rc_t rc2 = open_dir_or_tar( param->input_dir, ¶m->asm_dir, param->asm_path );
+ if ( rc2 == 0 )
+ {
+ dv.tree = &evidence;
+ dv.dir = param->asm_dir;
+ rc = KDirectoryVisit( param->asm_dir, true, DirVisitor, &dv, NULL );
+ }
+ }
+ if ( rc == 0 )
+ {
+ /* SHOULD HAVE A BSTreeEmpty FUNCTION OR SOMETHING...
+ MAKE ONE HERE - WITH KNOWLEDGE THAT TREE IS NOT NULL: */
+#ifndef BSTreeEmpty
+#define BSTreeEmpty( bst ) \
+ ( ( bst ) -> root == NULL )
+#endif
+ if ( BSTreeEmpty ( & slides ) && BSTreeEmpty ( & evidence ) )
+ rc = RC( rcExe, rcFile, rcReading, rcData, rcInsufficient );
+ else
+ {
+ /* CORRECTED SETTING OF "rc" IN "FGroupMAP_Validate" */
+ assert ( rc == 0 );
+ BSTreeForEach( &slides, false, FGroupMAP_Validate, &rc );
+ BSTreeForEach( &evidence, false, FGroupMAP_Validate, &rc );
+ }
+
+ if ( rc == 0 )
+ {
+ FGroupMAP_LoadData data;
+
+ PLOGMSG( klogInfo, ( klogInfo, "file set validation complete", "severity=status" ) );
+ memset( &data, 0, sizeof( data ) );
+ data.rc = 0;
+ data.param = param;
+ data.reads = &slides;
+ rc = DB_Init( param, &data.db );
+ if ( rc == 0 )
+ {
+ BSTreeDoUntil( &slides, false, FGroupMAP_LoadReads, &data );
+ rc = data.rc;
+ if ( rc == 0 )
+ {
+ PLOGMSG( klogInfo, ( klogInfo, "MAP loaded", "severity=status" ) );
+ BSTreeDoUntil( &evidence, false, FGroupMAP_LoadEvidence, &data );
+ rc = data.rc;
+ if ( rc == 0 )
+ PLOGMSG( klogInfo, ( klogInfo, "ASM loaded", "severity=status" ) );
+ }
+ }
+ rc1 = DB_Fini( param, &data.db, rc != 0 );
+ if ( rc == 0 )
+ rc = rc1;
+ }
+ }
+ }
+
+ /* copy the extra library ( file or recursive directory ) */
+ if ( rc == 0 && param->library != NULL )
+ {
+ const KDirectory *lib_src;
+ rc = open_dir_or_tar( param->input_dir, &lib_src, param->library );
+ if ( rc == 0 )
+ {
+ rc = copy_library( param->input_dir, param->output_dir,
+ param->library, param->out );
+ if ( rc == 0 )
+ STSMSG( 0, ( "extra lib copied" ) );
+ else
+ LOGERR( klogErr, rc, "failed to copy extra library" );
+ KDirectoryRelease( lib_src );
+ }
+/*
+ else
+ {
+ rc = copy_library( param->input_dir, param->output_dir,
+ ".", param->out );
+ if ( rc == 0 )
+ STSMSG( 0, ( "extra lib copied" ) );
+ else
+ LOGERR( klogErr, rc, "failed to copy extra library" );
+ }
+*/
+ }
+ KDirectoryRelease( param->map_dir );
+ KDirectoryRelease( param->asm_dir );
+ }
+ BSTreeWhack( &slides, FGroupMAP_Whack, NULL );
+ BSTreeWhack( &evidence, FGroupMAP_Whack, NULL );
+ return rc;
+}
+
+
+ver_t CC KAppVersion( void )
+{
+ return CG_LOAD_VERS;
+}
+
+const char* map_usage[] = {"MAP input directory path containing files", NULL};
+const char* asm_usage[] = {"ASM input directory path containing files", NULL};
+const char* schema_usage[] = {"database schema file name", NULL};
+const char* output_usage[] = {"output database path", NULL};
+const char* force_usage[] = {"force output overwrite", NULL};
+const char* refseqcfg_usage[] = {"path to a file with reference-to-accession list", NULL};
+const char* refseqpath_usage[] = {"path to a directory with reference sequences in fasta", NULL};
+const char* refseqchunk_usage[] = {NULL, "hidden param to override REFERENCE table seq chunk size for testing", NULL};
+const char* reffile_usage[] = {"path to fasta file with references", NULL};
+const char* forceref_usage[] = {"force reference sequence write", NULL};
+const char* forceread_usage[] = {"force reads write", NULL};
+const char* qualquant_usage[] = {"quality scores quantization level, can be a number (0: none, 1: 2bit, 2: 1bit), or a string like '1:10,10:20,20:30,30:-' (which is equivalent to 1)", NULL};
+const char* nospotgroup_usage[] = {"do not write source file key to SPOT_GROUP column", NULL};
+const char* min_mapq_usage[] = {"filter secondary mappings by minimum weight (phred)", NULL};
+const char* no_secondary_usage[] = {"preserve only one mapping per half-DNB based on weight", NULL};
+const char* single_mate_usage[] = {"if secondary mates have duplicates preserve only one in each pair based on weight", NULL};
+const char* cluster_size_usage[] = {"defines cluster window on the reference, records only 1 placement from given cluster size; default is zero which means ignore", NULL};
+const char* no_read_ahead_usage[] = {"disable input files threaded caching", NULL};
+const char* library_usage[] = {"copy extra file/directory into output", NULL};
+
+/* this enum must have same order as MainArgs array below */
+enum OptDefIndex {
+ eopt_MapInput = 0,
+ eopt_AsmInput,
+ eopt_Schema,
+ eopt_RefSeqConfig,
+ eopt_RefSeqPath,
+ eopt_RefSeqChunk,
+ eopt_RefFile,
+ eopt_Output,
+ eopt_Force,
+ eopt_ForceRef,
+ eopt_ForceRead,
+ eopt_QualQuantization,
+ eopt_NoSpotGroup,
+ eopt_MinMapQ,
+ eopt_No2nd_ary,
+ eopt_SingleMate,
+ eopt_ClusterSize,
+ eopt_noReadAhead,
+ eopt_Library
+};
+
+OptDef MainArgs[] =
+{
+ /* if you change order in this array, rearrange enum above accordingly! */
+ { "map", "m", NULL, map_usage, 1, true, true },
+ { "asm", "a", NULL, asm_usage, 1, true, false },
+ { "schema", "s", NULL, schema_usage, 1, true, false },
+ { "refseq-config", "k", NULL, refseqcfg_usage, 1, true, false },
+ { "refseq-path", "i", NULL, refseqpath_usage, 1, true, false },
+ { "refseq-chunk", "C", NULL, refseqchunk_usage, 1, true, false },
+ { "ref-file", "r", NULL, reffile_usage, 1, true, false },
+ { "output", "o", NULL, output_usage, 1, true, true },
+ { "force", "f", NULL, force_usage, 1, false, false },
+ { "write-reference", "g", NULL, forceref_usage, 1, false, false },
+ { "write-read", "w", NULL, forceread_usage, 1, false, false },
+ { "qual-quant", "Q", NULL, qualquant_usage, 1, true, false },
+ { "no-spotgroup", "G", NULL, nospotgroup_usage, 1, false, false },
+ { "min-mapq", "q", NULL, min_mapq_usage, 1, true, false },
+ { "no-secondary", "P", NULL, no_secondary_usage, 1, false, false },
+ { "single-mate", NULL, NULL, single_mate_usage, 1, false, false },
+ { "cluster-size", NULL, NULL, cluster_size_usage, 1, true, false },
+ { "input-no-threads", "t", NULL, no_read_ahead_usage, 1, false, false },
+ { "library", "l", NULL, library_usage, 1, true, false }
+};
+const size_t MainArgsQty = sizeof(MainArgs) / sizeof(MainArgs[0]);
+
+rc_t UsageSummary (char const * progname)
+{
+ OUTMSG((
+ "Usage:\n"
+ "\t%s [options] -m map-dir -o path-to-run\n"
+ "\n"
+ "Summary:\n"
+ "\tLoad a Complete Genomics formatted data files\n"
+ "\n"
+ "Example:\n"
+ "\t%s -m build36/MAP -o /tmp/SRZ123456\n"
+ "\n"
+ ,progname, progname));
+ return 0;
+}
+
+char const UsageDefaultName[] = "cg-load";
+
+rc_t CC Usage( const Args* args )
+{
+ rc_t rc;
+ int i;
+ const char* progname = UsageDefaultName;
+ const char* fullname = UsageDefaultName;
+
+ rc = ArgsProgram(args, &fullname, &progname);
+
+ UsageSummary(progname);
+
+ for(i = 0; i < MainArgsQty; i++ ) {
+ if( MainArgs[i].required && MainArgs[i].help[0] != NULL ) {
+ HelpOptionLine(MainArgs[i].aliases, MainArgs[i].name, NULL, MainArgs[i].help);
+ }
+ }
+ OUTMSG(("\nOptions:\n"));
+ for(i = 0; i < MainArgsQty; i++ ) {
+ if( !MainArgs[i].required && MainArgs[i].help[0] != NULL ) {
+ HelpOptionLine(MainArgs[i].aliases, MainArgs[i].name, NULL, MainArgs[i].help);
+ }
+ }
+ XMLLogger_Usage();
+ OUTMSG(("\n"));
+ HelpOptionsStandard();
+ HelpVersion(fullname, KAppVersion());
+ return rc;
+}
+
+rc_t CC KMain( int argc, char* argv[] )
+{
+ rc_t rc = 0;
+ Args* args = NULL;
+ const char* errmsg = NULL, *refseq_chunk = NULL, *min_mapq = NULL, *cluster_size = NULL;
+ const XMLLogger* xml_logger = NULL;
+ SParam params;
+ memset(¶ms, 0, sizeof(params));
+ params.schema = "align/align.vschema";
+
+ params.argv0 = argv[0];
+
+ if( (rc = ArgsMakeAndHandle(&args, argc, argv, 2, MainArgs, MainArgsQty, XMLLogger_Args, XMLLogger_ArgsQty)) == 0 ) {
+ uint32_t count;
+ if( (rc = ArgsParamCount (args, &count)) != 0 || count != 0 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ ArgsParamValue(args, 0, &errmsg);
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Output].name, &count)) != 0 || count != 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+ errmsg = MainArgs[eopt_Output].name;
+ } else if( (rc = ArgsOptionValue(args, MainArgs[eopt_Output].name, 0, ¶ms.out)) != 0 ) {
+ errmsg = MainArgs[eopt_Output].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_MapInput].name, &count)) != 0 || count != 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+ errmsg = MainArgs[eopt_MapInput].name;
+ } else if( (rc = ArgsOptionValue(args, MainArgs[eopt_MapInput].name, 0, ¶ms.map_path)) != 0 ) {
+ errmsg = MainArgs[eopt_MapInput].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Schema].name, &count)) != 0 || count > 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+ errmsg = MainArgs[eopt_Schema].name;
+ } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_Schema].name, 0, ¶ms.schema)) != 0 ) {
+ errmsg = MainArgs[eopt_Schema].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_AsmInput].name, &count)) != 0 || count > 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ errmsg = MainArgs[eopt_AsmInput].name;
+ } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_AsmInput].name, 0, ¶ms.asm_path)) != 0 ) {
+ errmsg = MainArgs[eopt_AsmInput].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqConfig].name, &count)) != 0 || count > 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ errmsg = MainArgs[eopt_RefSeqConfig].name;
+ } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqConfig].name, 0, ¶ms.refseqcfg)) != 0 ) {
+ errmsg = MainArgs[eopt_RefSeqConfig].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqPath].name, &count)) != 0 || count > 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ errmsg = MainArgs[eopt_RefSeqPath].name;
+ } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqPath].name, 0, ¶ms.refseqpath)) != 0 ) {
+ errmsg = MainArgs[eopt_RefSeqPath].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Library].name, &count)) != 0 || count > 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ errmsg = MainArgs[eopt_Library].name;
+ } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_Library].name, 0, ¶ms.library)) != 0 ) {
+ errmsg = MainArgs[eopt_Library].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqChunk].name, &count)) != 0 || count > 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ errmsg = MainArgs[eopt_RefSeqChunk].name;
+ } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqChunk].name, 0, &refseq_chunk)) != 0 ) {
+ errmsg = MainArgs[eopt_RefSeqChunk].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Force].name, ¶ms.force)) != 0 ) {
+ errmsg = MainArgs[eopt_Force].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ForceRef].name, ¶ms.force_refw)) != 0 ) {
+ errmsg = MainArgs[eopt_ForceRef].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ForceRead].name, ¶ms.force_readw)) != 0 ) {
+ errmsg = MainArgs[eopt_ForceRead].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_noReadAhead].name, ¶ms.no_read_ahead)) != 0 ) {
+ errmsg = MainArgs[eopt_noReadAhead].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_NoSpotGroup].name, ¶ms.no_spot_group)) != 0 ) {
+ errmsg = MainArgs[eopt_NoSpotGroup].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_No2nd_ary].name, ¶ms.min_mapq)) != 0 ) {
+ errmsg = MainArgs[eopt_No2nd_ary].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_QualQuantization].name, &count)) != 0 || count > 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ errmsg = MainArgs[eopt_QualQuantization].name;
+ } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_QualQuantization].name, 0, ¶ms.qual_quant)) != 0 ) {
+ errmsg = MainArgs[eopt_QualQuantization].name;
+
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_MinMapQ].name, &count)) != 0 || count > 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ errmsg = MainArgs[eopt_MinMapQ].name;
+ } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_MinMapQ].name, 0, &min_mapq)) != 0 ) {
+ errmsg = MainArgs[eopt_MinMapQ].name;
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ClusterSize].name, &count)) != 0 || count > 1 ) {
+ rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ errmsg = MainArgs[eopt_ClusterSize].name;
+ } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_ClusterSize].name, 0, &cluster_size)) != 0 ) {
+ errmsg = MainArgs[eopt_ClusterSize].name;
+ } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_SingleMate].name, ¶ms.single_mate)) != 0 ) {
+ errmsg = MainArgs[eopt_SingleMate].name;
+
+ } else {
+ do {
+ long val = 0;
+ char* end = NULL;
+ uint32_t count;
+
+ if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefFile].name, &count)) != 0 ) {
+ break;
+ } else {
+ params.refFiles = calloc(count + 1, sizeof(*(params.refFiles)));
+ if( params.refFiles == NULL ) {
+ rc = RC(rcApp, rcArgv, rcReading, rcMemory, rcExhausted);
+ break;
+ }
+ while(rc == 0 && count-- > 0) {
+ rc = ArgsOptionValue(args, MainArgs[eopt_RefFile].name, count, ¶ms.refFiles[count]);
+ }
+ }
+
+ if( refseq_chunk != NULL ) {
+ errno = 0;
+ val = strtol(refseq_chunk, &end, 10);
+ if( errno != 0 || refseq_chunk == end || *end != '\0' || val < 0 || val > UINT32_MAX ) {
+ rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+ break;
+ }
+ params.refseq_chunk = val;
+ }
+ if( params.min_mapq > 0 ) {
+ params.min_mapq = ~0;
+ } else if( min_mapq != NULL ) {
+ errno = 0;
+ val = strtol(min_mapq, &end, 10);
+ if( errno != 0 || min_mapq == end || *end != '\0' || val < 0 || val > 255 ) {
+ rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+ break;
+ }
+ params.min_mapq = val;
+ }
+
+ if ( cluster_size )
+ params.cluster_size = atoi( cluster_size );
+ else
+ params.cluster_size = 0;
+
+ rc = KDirectoryNativeDir( ¶ms.input_dir );
+ if ( rc != 0 )
+ errmsg = "current directory";
+ else
+ {
+ rc = XMLLogger_Make( &xml_logger, params.input_dir, args );
+ if ( rc != 0 )
+ errmsg = "XML logging";
+ else
+ rc = Load( ¶ms );
+ }
+ } while( false );
+ KDirectoryRelease( params.input_dir );
+ }
+ }
+ /* find accession as last part of path for internal XML logging */
+ refseq_chunk = params.out ? strrchr(params.out, '/') : "/???";
+ if( refseq_chunk ++ == NULL )
+ refseq_chunk = params.out;
+
+ if( argc < 2 )
+ MiniUsage(args);
+ else if( rc != 0 )
+ {
+ if( errmsg )
+ {
+ MiniUsage(args);
+ LOGERR(klogErr, rc, errmsg);
+ }
+ else
+ {
+ PLOGERR(klogErr, (klogErr, rc, "load failed: $(reason_short)",
+ "severity=total,status=failure,accession=%s", refseq_chunk));
+ }
+ }
+ else
+ {
+ PLOGMSG(klogInfo, (klogInfo, "loaded",
+ "severity=total,status=success,accession=%s", refseq_chunk));
+ }
+ ArgsWhack(args);
+ XMLLogger_Release(xml_logger);
+ return rc;
+}
diff --git a/tools/cg-load/cg-load.vers b/tools/cg-load/cg-load.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/cg-load/cg-load.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/cg-load/debug.h b/tools/cg-load/debug.h
new file mode 100644
index 0000000..2d732c4
--- /dev/null
+++ b/tools/cg-load/debug.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_debug_h_
+#define _tools_cg_load_debug_h_
+
+#include <klib/debug.h>
+
+#define DEBUG_MSG_PASTE(a,b) a##b
+#define DEBUG_MSG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(DEBUG_MSG_PASTE(DBG_APP_,flag)), msg)
+
+#endif /* _tools_cg_load_debug_h_ */
diff --git a/tools/cg-load/defs.h b/tools/cg-load/defs.h
new file mode 100644
index 0000000..9e06969
--- /dev/null
+++ b/tools/cg-load/defs.h
@@ -0,0 +1,136 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_defs_h_
+#define _tools_cg_load_defs_h_
+
+/* buffers and sizes */
+
+/*
+#define CG_CHROMOSOME_NAME (8) make if fit NC_003977 */
+#define CG_CHROMOSOME_NAME (10)
+
+#define CG_SLIDE (32)
+#define CG_LANE (8)
+
+#define CG_READS_NREADS (2)
+#define CG_READS_SPOT_LEN (70)
+#define CG_READS_NGAPS (3)
+#define CG_MAPPINGS_MAX (2048)
+#define CG_EVDNC_PLOIDY (3)
+#define CG_EVDNC_INTERVALID_LEN (32)
+#define CG_EVDNC_SPOT_LEN (10 * 1024)
+
+/* CG_EVDNC_ALLELE_NUM is 3 in v.1.5; 4 in v.2 */
+#define CG_EVDNC_ALLELE_NUM (4)
+
+#define CG_EVDNC_ALLELE_LEN (10 * 1024)
+#define CG_EVDNC_ALLELE_CIGAR_LEN (10 * 1024)
+
+typedef char CGFIELD_LIBRARY_TYPE;
+typedef char CGFIELD_SAMPLE_TYPE;
+typedef char CGFIELD_SLIDE_TYPE;
+typedef char CGFIELD_LANE_TYPE;
+typedef char CGFIELD_CHROMOSOME_TYPE;
+typedef char CGFIELD_ASSEMBLY_ID_TYPE;
+typedef char CGFIELD_SOFTWARE_VERSION_TYPE;
+typedef char CGFIELD_DBSNP_BUILD_TYPE;
+typedef char CGFIELD_COSMIC_TYPE;
+typedef char CGFIELD_PFAM_DATE_TYPE;
+typedef char CGFIELD_MIRBASE_VERSION_TYPE;
+typedef char CGFIELD_DGV_VERSION_TYPE;
+typedef char CGFIELD_GENERATED_AT_TYPE;
+typedef char CGFIELD_GENERATED_BY_TYPE;
+typedef char CGFIELD_GENE_ANNOTATIONS_TYPE;
+typedef char CGFIELD_GENOME_REFERENCE_TYPE;
+typedef uint32_t CGFIELD_BATCH_FILE_NUMBER_TYPE;
+typedef uint64_t CGFIELD_BATCH_OFFSET_TYPE;
+typedef uint32_t CGFIELD_FIELD_SIZE_TYPE;
+typedef uint32_t CGFIELD_MAX_PLOIDY_TYPE;
+typedef uint16_t CGFIELD_WINDOW_SHIFT_TYPE;
+typedef uint16_t CGFIELD_WINDOW_WIDTH_TYPE;
+typedef uint16_t CGFIELD_NUMBER_LEVELS_TYPE;
+typedef uint16_t CGFIELD_MEAN_LEVEL_X_TYPE;
+
+typedef enum CG_EFileType_enum {
+ cg_eFileType_Unknown = 0,
+ cg_eFileType_READS = 1,
+ cg_eFileType_MAPPINGS,
+ cg_eFileType_LIB_DNB,
+ cg_eFileType_LIB_MATE_GAPS,
+ cg_eFileType_LIB_SEQDEP_GAPS,
+ cg_eFileType_REFMETRICS,
+ cg_eFileType_IDENTIFIER_MAPPING,
+ cg_eFileType_DBSNP_TO_CGI,
+ cg_eFileType_GENE_ANNOTATION,
+ cg_eFileType_SUMMARY_REPORT,
+ cg_eFileType_VAR_ANNOTATION,
+ cg_eFileType_GENE_VAR_SUMMARY_REPORT,
+ cg_eFileType_EVIDENCE_CORRELATION,
+ cg_eFileType_EVIDENCE_DNBS,
+ cg_eFileType_EVIDENCE_INTERVALS,
+ cg_eFileType_COVERAGE_DISTRIBUTION,
+ cg_eFileType_COVERAGE_BY_GC,
+ cg_eFileType_DEPTH_OF_COVERAGE,
+ cg_eFileType_INDEL_LENGTH_CODING,
+ cg_eFileType_INDEL_LENGTH,
+ cg_eFileType_SUBSTITUTION_LENGTH_CODING,
+ cg_eFileType_SUBSTITUTION_LENGTH,
+ cg_eFileType_CNV_SEGMENTS,
+ cg_eFileType_TUMOR_CNV_SEGMENTS,
+ cg_eFileType_CNV_DETAILS_SCORES,
+ cg_eFileType_TUMOR_DETAILS_SCORES,
+ cg_eFileType_NONDIPLOID_SOMATIC_CNV_SEGMENTS,
+ cg_eFileType_NONDIPLOID_SOMATIC_CNV_DETAILS,
+ cg_eFileType_JUNCTIONS,
+ cg_eFileType_JUNCTION_DNBS,
+ cg_eFileType_SV_EVENTS,
+ cg_eFileType_VAR_OLPL,
+ cg_eFileType_MEI,
+ cg_eFileType_TUMOR_CNV_DETAILS,
+ cg_eFileType_DIPLOID_SOMATIC_CNV_SEGMENTS,
+ cg_eFileType_COVERAGE_DISTRIBUTION_CODING,
+ cg_eFileType_COVERAGE_BY_GC_CODING,
+ cg_eFileType_LIB_SMALL_GAPS_ROLLUP,
+ cg_eFileType_DIPLOID_SOMATIC_CNV_DETAILSCORES,
+ cg_eFileType_Last
+} CG_EFileType;
+
+typedef enum CG_EReadsFlags_enum {
+ cg_eLeftHalfDnbNoMatches = 0x01,
+ cg_eLeftHalfDnbMapOverflow = 0x02,
+ cg_eRightHalfDnbNoMatches = 0x04,
+ cg_eRightHalfDnbMapOverflow = 0x08
+} CG_EReadsFlags;
+
+typedef enum CG_EMappingsFlags_enum {
+ cg_eLastDNBRecord = 0x01,
+ cg_eLeftHalfDnbMap = 0x00,
+ cg_eRightHalfDnbMap = 0x02,
+ cg_eFwdDnbStrand = 0x00,
+ cg_eRevDnbStrand = 0x04
+} CG_EMappingsFlags;
+
+#endif /* _tools_cg_load_defs_h_ */
diff --git a/tools/cg-load/f1_3.c b/tools/cg-load/f1_3.c
new file mode 100644
index 0000000..315f4e0
--- /dev/null
+++ b/tools/cg-load/f1_3.c
@@ -0,0 +1,76 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-reads.h"
+#include "factory-mappings.h"
+#include "factory-evidence-intervals.h"
+#include "factory-evidence-dnbs.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+ { "READS", cg_eFileType_READS, CGReads13_Make },
+ { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings13_Make },
+ { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+ { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+ { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+ { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+ { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+ { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+ { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+ { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+ { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+ { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+ { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs13_Make },
+ { "EVIDENCE-INTERVALS",
+ cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals13_Make },
+ { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+ { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+ { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+ { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+ { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+ { "SUBSTITUTION-LENGTH-CODING",
+ cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+ { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+ { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+ { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+ { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+ { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+ { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+ { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+ /* undocumented */
+ { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL }
+
+};
+
+rc_t CGFile13_Make(const CGFileType** self,
+ const char* type, const CGLoaderFile* file)
+{
+ return CGLoaderFileMakeCGFileType(file, type,
+ cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+ self);
+}
diff --git a/tools/cg-load/f1_5.c b/tools/cg-load/f1_5.c
new file mode 100644
index 0000000..dcb152c
--- /dev/null
+++ b/tools/cg-load/f1_5.c
@@ -0,0 +1,76 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-reads.h"
+#include "factory-mappings.h"
+#include "factory-evidence-intervals.h"
+#include "factory-evidence-dnbs.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+ { "READS", cg_eFileType_READS, CGReads15_Make },
+ { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings15_Make },
+ { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+ { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+ { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+ { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+ { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+ { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+ { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+ { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+ { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+ { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+ { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs15_Make },
+ { "EVIDENCE-INTERVALS",
+ cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals15_Make },
+ { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+ { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+ { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+ { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+ { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+ { "SUBSTITUTION-LENGTH-CODING",
+ cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+ { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+ { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+ { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+ { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+ { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+ { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+ { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+ /* undocumented */
+ { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL }
+
+};
+
+rc_t CGFile15_Make(const CGFileType** self,
+ const char* type, const CGLoaderFile* file)
+{
+ return CGLoaderFileMakeCGFileType(file, type,
+ cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+ self);
+}
diff --git a/tools/cg-load/f2_0.c b/tools/cg-load/f2_0.c
new file mode 100644
index 0000000..ba28f44
--- /dev/null
+++ b/tools/cg-load/f2_0.c
@@ -0,0 +1,79 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-reads.h"
+#include "factory-mappings.h"
+#include "factory-evidence-intervals.h"
+#include "factory-evidence-dnbs.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+ { "READS", cg_eFileType_READS, CGReads20_Make },
+ { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings20_Make },
+ { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+ { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+ { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+ { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+ { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+ { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+ { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+ { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+ { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+ { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+ { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs20_Make },
+ { "EVIDENCE-INTERVALS",
+ cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals20_Make },
+ { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+ { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+ { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+ { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+ { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+ { "SUBSTITUTION-LENGTH-CODING",
+ cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+ { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+ { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+ { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+ { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+ { "TUMOR-CNV-SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+ { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "CNV-DETAILS-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+ { "TUMOR-DETAILS-SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+ { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+ { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+ { "SV-EVENTS", cg_eFileType_SV_EVENTS, NULL },
+ { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL },
+ { "MEI", cg_eFileType_MEI, NULL },
+};
+
+rc_t CGFile20_Make(const CGFileType** self,
+ const char* type, const CGLoaderFile* file)
+{
+ return CGLoaderFileMakeCGFileType(file, type,
+ cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+ self);
+}
diff --git a/tools/cg-load/f2_2.c b/tools/cg-load/f2_2.c
new file mode 100644
index 0000000..1d4986d
--- /dev/null
+++ b/tools/cg-load/f2_2.c
@@ -0,0 +1,95 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-reads.h"
+#include "factory-mappings.h"
+#include "factory-evidence-intervals.h"
+#include "factory-evidence-dnbs.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+ { "READS", cg_eFileType_READS, CGReads22_Make },
+ { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings22_Make },
+ { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+ { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+ { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+ { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+ { "IDENTIFIER-MAPPING", cg_eFileType_IDENTIFIER_MAPPING, NULL },
+ { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+ { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+ { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+ { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+ { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+ { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+ { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs22_Make },
+ { "EVIDENCE-INTERVALS",
+ cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals22_Make },
+ { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+ { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+ { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+ { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+ { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+ { "SUBSTITUTION-LENGTH-CODING",
+ cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+ { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+ { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+ { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+ { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+ { "TUMOR-CNV-SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+ { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "CNV-DETAILS-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+ { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+ { "TUMOR-DETAILS-SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+ { "NONDIPLOID-SOMATIC-CNV-SEGMENTS",
+ cg_eFileType_NONDIPLOID_SOMATIC_CNV_SEGMENTS, NULL },
+ { "NONDIPLOID-SOMATIC-CNV-DETAILS",
+ cg_eFileType_NONDIPLOID_SOMATIC_CNV_DETAILS, NULL },
+ { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+ { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+ { "SV-EVENTS", cg_eFileType_SV_EVENTS, NULL },
+ { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL },
+ { "MEI", cg_eFileType_MEI, NULL },
+ /* from Standard Sequencing Service Data File Formats file test */
+ { "TUMOR-CNV-DETAILS", cg_eFileType_TUMOR_CNV_DETAILS, NULL },
+ { "DIPLOID-SOMATIC-CNV-SEGMENTS",
+ cg_eFileType_DIPLOID_SOMATIC_CNV_SEGMENTS, NULL },
+ { "COVERAGE-DISTRIBUTION-CODING",
+ cg_eFileType_COVERAGE_DISTRIBUTION_CODING, NULL },
+ { "COVERAGE-BY-GC-CODING", cg_eFileType_COVERAGE_BY_GC_CODING, NULL },
+ { "LIB-SMALL-GAPS-ROLLUP", cg_eFileType_LIB_SMALL_GAPS_ROLLUP, NULL },
+ /* from Cancer Sequencing Service Data File Formats file test */
+ { "DIPLOID-SOMATIC-CNV-DETAILSCORES",
+ cg_eFileType_DIPLOID_SOMATIC_CNV_DETAILSCORES, NULL },
+};
+
+rc_t CGFile22_Make(const CGFileType** self,
+ const char* type, const CGLoaderFile* file)
+{
+ return CGLoaderFileMakeCGFileType(file, type,
+ cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+ self);
+}
diff --git a/tools/cg-load/factory-cmn.h b/tools/cg-load/factory-cmn.h
new file mode 100644
index 0000000..a2eaaaa
--- /dev/null
+++ b/tools/cg-load/factory-cmn.h
@@ -0,0 +1,61 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_cmh_h_
+#define _tools_cg_load_factory_cmh_h_
+
+#include <klib/defs.h>
+#include "defs.h"
+
+typedef CGFIELD_LIBRARY_TYPE CGFIELD15_LIBRARY[32];
+typedef CGFIELD_SAMPLE_TYPE CGFIELD15_SAMPLE[32];
+typedef CGFIELD_SLIDE_TYPE CGFIELD15_SLIDE[CG_SLIDE];
+typedef CGFIELD_LANE_TYPE CGFIELD15_LANE[CG_LANE];
+typedef CGFIELD_CHROMOSOME_TYPE CGFIELD15_CHROMOSOME[CG_CHROMOSOME_NAME];
+typedef CGFIELD_ASSEMBLY_ID_TYPE CGFIELD15_ASSEMBLY_ID[32];
+
+/* VDB-951: make it process invalid #SOFTWARE_VERSION value
+typedef CGFIELD_SOFTWARE_VERSION_TYPE CGFIELD15_SOFTWARE_VERSION[16];*/
+typedef CGFIELD_SOFTWARE_VERSION_TYPE CGFIELD15_SOFTWARE_VERSION[38];
+
+typedef CGFIELD_DBSNP_BUILD_TYPE CGFIELD15_DBSNP_BUILD[8];
+typedef CGFIELD_COSMIC_TYPE CGFIELD15_COSMIC[8];
+typedef CGFIELD_PFAM_DATE_TYPE CGFIELD15_PFAM_DATE[16];
+typedef CGFIELD_MIRBASE_VERSION_TYPE CGFIELD15_MIRBASE_VERSION[8];
+typedef CGFIELD_DGV_VERSION_TYPE CGFIELD15_DGV_VERSION[16];
+typedef CGFIELD_GENERATED_AT_TYPE CGFIELD15_GENERATED_AT[32];
+typedef CGFIELD_GENERATED_BY_TYPE CGFIELD15_GENERATED_BY[32];
+typedef CGFIELD_GENE_ANNOTATIONS_TYPE CGFIELD15_GENE_ANNOTATIONS[16];
+typedef CGFIELD_GENOME_REFERENCE_TYPE CGFIELD15_GENOME_REFERENCE[16];
+typedef CGFIELD_BATCH_FILE_NUMBER_TYPE CGFIELD15_BATCH_FILE_NUMBER;
+typedef CGFIELD_BATCH_OFFSET_TYPE CGFIELD15_BATCH_OFFSET;
+typedef CGFIELD_FIELD_SIZE_TYPE CGFIELD15_FIELD_SIZE;
+typedef CGFIELD_MAX_PLOIDY_TYPE CGFIELD15_MAX_PLOIDY;
+typedef CGFIELD_WINDOW_SHIFT_TYPE CGFIELD15_WINDOW_SHIFT;
+typedef CGFIELD_WINDOW_WIDTH_TYPE CGFIELD15_WINDOW_WIDTH;
+typedef CGFIELD_NUMBER_LEVELS_TYPE CGFIELD15_NUMBER_LEVELS;
+typedef CGFIELD_MEAN_LEVEL_X_TYPE CGFIELD15_MEAN_LEVEL_X;
+
+#endif /* _tools_cg_load_factory_cmh_h_ */
diff --git a/tools/cg-load/factory-evidence-dnbs.c b/tools/cg-load/factory-evidence-dnbs.c
new file mode 100644
index 0000000..a4af12b
--- /dev/null
+++ b/tools/cg-load/factory-evidence-dnbs.c
@@ -0,0 +1,351 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+typedef struct CGEvidenceDnbs15 CGEvidenceDnbs15;
+#define CGFILETYPE_IMPL CGEvidenceDnbs15
+#include "file.h"
+#include "factory-cmn.h"
+#include "factory-evidence-dnbs.h"
+#include "debug.h"
+
+#include <assert.h>
+#include <string.h>
+#include <stdlib.h>
+
+struct CGEvidenceDnbs15 {
+ CGFileType dad;
+ const CGLoaderFile* file;
+ uint64_t records;
+ /* headers */
+ CGFIELD15_ASSEMBLY_ID assembly_id;
+ CGFIELD15_CHROMOSOME chromosome;
+ CGFIELD15_GENERATED_AT generated_at;
+ CGFIELD15_GENERATED_BY generated_by;
+ CGFIELD15_SAMPLE sample;
+ CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+void CGEvidenceDnbs15_Release(const CGEvidenceDnbs15* cself, uint64_t* records)
+{
+ if( cself != NULL ) {
+ CGEvidenceDnbs15* self = (CGEvidenceDnbs15*)cself;
+ if( records != NULL ) {
+ *records = cself->records;
+ }
+ free(self);
+ }
+}
+
+static
+rc_t CC CGEvidenceDnbs15_Header(const CGEvidenceDnbs15* cself, const char* buf, const size_t len)
+{
+ rc_t rc = 0;
+ size_t slen;
+ CGEvidenceDnbs15* self = (CGEvidenceDnbs15*)cself;
+
+ if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+ } else if( strncmp("CHROMOSOME\t", buf, slen = 11) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->chromosome, sizeof(self->chromosome));
+ } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+ } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+ } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+ } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+ } else {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+ }
+ return rc;
+}
+
+static
+rc_t CGEvidenceDnbs15_GetAssemblyId(const CGEvidenceDnbs15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+ if( cself->assembly_id[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *assembly_id = cself->assembly_id;
+ return 0;
+}
+
+static
+rc_t CGEvidenceDnbs15_GetSample(const CGEvidenceDnbs15* cself, const CGFIELD_SAMPLE_TYPE** sample)
+{
+ if( cself->sample[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *sample = cself->sample;
+ return 0;
+}
+
+static
+rc_t CGEvidenceDnbs15_GetChromosome(const CGEvidenceDnbs15* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome)
+{
+ if( cself->chromosome[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *chromosome = cself->chromosome;
+ return 0;
+}
+
+static
+rc_t CC CGEvidenceDnbs_Read(const CGEvidenceDnbs15* cself, const char* interval_id, TEvidenceDnbsData* data, int score_allele_num)
+{
+ rc_t rc = 0;
+ TEvidenceDnbsData_dnb* m = NULL;
+ static TEvidenceDnbsData_dnb next_rec;
+ static char next_interval_id[32] = "";
+
+ /* local copy of unused TEvidenceDnbsData_dnb struct elements */
+ char reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+ INSDC_coord_zero mate_offset_in_reference;
+ char mate_reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+ uint16_t score_allele[4] = {0, 0, 0, 0}; /* v1.5 has ScoreAllele[012]; v2.0 - [0123] */
+ char qual[CG_EVDNC_SPOT_LEN];
+
+ strcpy(data->interval_id, interval_id);
+ data->qty = 0;
+ /* already read one rec for this interval_id */
+ if( next_interval_id[0] != '\0' ) {
+ if( strcmp(next_interval_id, interval_id) != 0 ) {
+ /* nothing todo since next interval id is different */
+ return rc;
+ }
+ m = &data->dnbs[data->qty++];
+ memcpy(m, &next_rec, sizeof(next_rec));
+ DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+ "\t%i\tnot_used\t0\tnot_used\t%c\t0\t0\t0\t'%.*s'\t'--'\n",
+ data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+ m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+ m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+ m->mapping_quality, m->read_len, m->read));
+ }
+ do {
+ int i = 0;
+ char tmp[2];
+ CG_LINE_START(cself->file, b, len, p);
+ if( b == NULL || len == 0 ) {
+ next_interval_id[0] = '\0';
+ break; /* EOF */
+ }
+ if( data->qty >= data->max_qty ) {
+ TEvidenceDnbsData_dnb* x;
+ data->max_qty += 100;
+ x = realloc(data->dnbs, sizeof(*(data->dnbs)) * data->max_qty);
+ if( x == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcMemory, rcExhausted);
+ break;
+ }
+ data->dnbs = x;
+ }
+ m = &data->dnbs[data->qty++];
+
+ /*DEBUG_MSG(10, ("%2hu evidenceDnbs: '%.*s'\n", data->qty, len, b));*/
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, next_interval_id, sizeof(next_interval_id));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, m->slide, sizeof(m->slide));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, m->lane, sizeof(m->lane));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u32(b, p - b, &m->file_num_in_lane);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u64(b, p - b, &m->dnb_offset_in_lane_file);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u16(b, p - b, &m->allele_index);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, tmp, sizeof(tmp));
+ if( tmp[0] != 'L' && tmp[0] != 'R' ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+ }
+ m->side = tmp[0];
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, tmp, sizeof(tmp));
+ if( tmp[0] != '+' && tmp[0] != '-' ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+ }
+ m->strand = tmp[0];
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &m->offset_in_allele);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, m->allele_alignment, sizeof(m->allele_alignment));
+ m->allele_alignment_length = p - b;
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &m->offset_in_reference);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, reference_alignment, sizeof(reference_alignment));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &mate_offset_in_reference);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, mate_reference_alignment, sizeof(mate_reference_alignment));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, tmp, sizeof(tmp));
+ if( tmp[0] < 33 || tmp[0] > 126 ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+ }
+ m->mapping_quality = tmp[0];
+ for (i = 0; i < score_allele_num; ++i) {
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u16(b, p - b, &score_allele[i]);
+ if(rc){
+ score_allele[i] =0;
+ rc =0;
+ }
+ }
+ CG_LINE_NEXT_FIELD(b, len, p);
+ m->read_len = p - b;
+ rc = str2buf(b, m->read_len, m->read, sizeof(m->read));
+ CG_LINE_LAST_FIELD(b, len, p);
+ if( m->read_len != p - b ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInconsistent);
+ } else {
+ rc = str2buf(b, p - b, qual, sizeof(qual));
+ }
+ ((CGEvidenceDnbs15*)cself)->records++;
+ if( strcmp(next_interval_id, data->interval_id) != 0 ) {
+ if (score_allele_num == 3) {
+ DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+ "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
+ data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+ m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+ m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+ reference_alignment, mate_offset_in_reference, mate_reference_alignment,
+ m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], m->read_len, m->read, qual));
+ }
+ else if (score_allele_num == 4) {
+ DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+ "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
+ data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+ m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+ m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+ reference_alignment, mate_offset_in_reference, mate_reference_alignment,
+ m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], score_allele[3], m->read_len, m->read, qual));
+ }
+ else { assert(0); }
+ }
+ CG_LINE_END();
+ if( next_interval_id[0] == '\0' ) {
+ break;
+ }
+ if( strcmp(next_interval_id, data->interval_id) != 0 ) {
+ /* next record is from next interval, remeber it and stop */
+ memcpy(&next_rec, m, sizeof(next_rec));
+ data->qty--;
+ break;
+ }
+ } while( rc == 0 );
+ return rc;
+}
+
+static
+rc_t CC CGEvidenceDnbs15_Read(const CGEvidenceDnbs15* self, const char* interval_id, TEvidenceDnbsData* data)
+{ return CGEvidenceDnbs_Read(self, interval_id, data, 3); }
+
+static
+rc_t CC CGEvidenceDnbs20_Read(const CGEvidenceDnbs15* self, const char* interval_id, TEvidenceDnbsData* data)
+{ return CGEvidenceDnbs_Read(self, interval_id, data, 4); }
+
+static const CGFileType_vt CGEvidenceDnbs15_vt =
+{
+ CGEvidenceDnbs15_Header,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CGEvidenceDnbs15_Read,
+ CGEvidenceDnbs15_GetAssemblyId,
+ NULL,
+ NULL,
+ NULL,
+ CGEvidenceDnbs15_GetSample,
+ CGEvidenceDnbs15_GetChromosome,
+ CGEvidenceDnbs15_Release
+};
+
+static const CGFileType_vt CGEvidenceDnbs20_vt =
+{
+ CGEvidenceDnbs15_Header,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CGEvidenceDnbs20_Read,
+ CGEvidenceDnbs15_GetAssemblyId,
+ NULL,
+ NULL,
+ NULL,
+ CGEvidenceDnbs15_GetSample,
+ CGEvidenceDnbs15_GetChromosome,
+ CGEvidenceDnbs15_Release
+};
+
+static
+rc_t CC CGEvidenceDnbs_Make(const CGFileType** cself, const CGLoaderFile* file,
+ const CGFileType_vt* vt)
+{
+ rc_t rc = 0;
+ CGEvidenceDnbs15* obj = NULL;
+
+ assert(vt);
+
+ if( cself == NULL || file == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+ } else {
+ *cself = NULL;
+ if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ obj->file = file;
+ obj->dad.type = cg_eFileType_EVIDENCE_DNBS;
+ obj->dad.vt = vt;
+ }
+ }
+ if( rc == 0 ) {
+ *cself = &obj->dad;
+ } else {
+ CGEvidenceDnbs15_Release(obj, NULL);
+ }
+ return rc;
+}
+
+rc_t CC CGEvidenceDnbs15_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs15_vt); }
+
+rc_t CC CGEvidenceDnbs13_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGEvidenceDnbs15_Make(self, file); }
+
+rc_t CC CGEvidenceDnbs20_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs20_vt); }
+
+rc_t CC CGEvidenceDnbs22_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs20_vt); }
diff --git a/tools/cg-load/factory-evidence-dnbs.h b/tools/cg-load/factory-evidence-dnbs.h
new file mode 100644
index 0000000..4ba4b4f
--- /dev/null
+++ b/tools/cg-load/factory-evidence-dnbs.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_evidence_dnbs_h_
+#define _tools_cg_load_factory_evidence_dnbs_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGEvidenceDnbs13_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs15_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs20_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs22_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_evidence_dnbs_h_ */
diff --git a/tools/cg-load/factory-evidence-intervals.c b/tools/cg-load/factory-evidence-intervals.c
new file mode 100644
index 0000000..1705bdc
--- /dev/null
+++ b/tools/cg-load/factory-evidence-intervals.c
@@ -0,0 +1,306 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+typedef struct CGEvidenceIntervals15 CGEvidenceIntervals15;
+#define CGFILETYPE_IMPL CGEvidenceIntervals15
+#include "file.h"
+#include "factory-cmn.h"
+#include "factory-evidence-intervals.h"
+#include "debug.h"
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct CGEvidenceIntervals15 {
+ CGFileType dad;
+ const CGLoaderFile* file;
+ uint64_t records;
+ /* headers */
+ CGFIELD15_ASSEMBLY_ID assembly_id;
+ CGFIELD15_CHROMOSOME chromosome;
+ CGFIELD15_GENERATED_AT generated_at;
+ CGFIELD15_GENERATED_BY generated_by;
+ CGFIELD15_SAMPLE sample;
+ CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+static
+rc_t CC CGEvidenceIntervals15_Header(const CGEvidenceIntervals15* cself, const char* buf, const size_t len)
+{
+ rc_t rc = 0;
+ size_t slen;
+ CGEvidenceIntervals15* self = (CGEvidenceIntervals15*)cself;
+
+ if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+ } else if( strncmp("CHROMOSOME\t", buf, slen = 11) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->chromosome, sizeof(self->chromosome));
+ } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+ } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+ } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+ } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+ } else {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+ }
+ return rc;
+}
+
+static
+rc_t CGEvidenceIntervals15_GetAssemblyId(const CGEvidenceIntervals15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+ if( cself->assembly_id[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *assembly_id = cself->assembly_id;
+ return 0;
+}
+
+static
+rc_t CGEvidenceIntervals15_GetSample(const CGEvidenceIntervals15* cself, const CGFIELD_SAMPLE_TYPE** sample)
+{
+ if( cself->sample[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *sample = cself->sample;
+ return 0;
+}
+
+static
+rc_t CGEvidenceIntervals15_GetChromosome(const CGEvidenceIntervals15* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome)
+{
+ if( cself->chromosome[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *chromosome = cself->chromosome;
+ return 0;
+}
+
+static
+rc_t CC CGEvidenceIntervals15_Read(const CGEvidenceIntervals15* cself, TEvidenceIntervalsData* data)
+{
+ rc_t rc = 0;
+
+ CG_LINE_START(cself->file, b, len, p);
+ if( b == NULL || len == 0) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+ break;
+ }
+ /*DEBUG_MSG(10, ("evidenceIntervals: '%.*s'\n", len, b));*/
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->interval_id, sizeof(data->interval_id));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->chr, sizeof(data->chr));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &data->offset);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u32(b, p - b, &data->length);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u16(b, p - b, &data->ploidy);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele_indexes, sizeof(data->allele_indexes));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &data->score);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele[0], sizeof(data->allele[0]));
+ data->allele_length[0] = p - b;
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele[1], sizeof(data->allele[1]));
+ data->allele_length[1] = p - b;
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele[2], sizeof(data->allele[2]));
+ data->allele_length[2] = p - b;
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele_alignment[1], sizeof(data->allele_alignment[1]));
+ data->allele_alignment_length[1] = p - b;
+ CG_LINE_LAST_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele_alignment[2], sizeof(data->allele_alignment[2]));
+ data->allele_alignment_length[2] = p - b;
+ ((CGEvidenceIntervals15*)cself)->records++;
+ DEBUG_MSG(10, ("evidenceIntervals: '%s'\t'%s'\t%i\t%u\t%u\t%s\t%u\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\n",
+ data->interval_id, data->chr, data->offset, data->length, data->ploidy,
+ data->allele_indexes, data->score, data->allele[0], data->allele[1], data->allele[2],
+ data->allele_alignment[1], data->allele_alignment[2]));
+ CG_LINE_END();
+ return rc;
+}
+
+static
+rc_t CC CGEvidenceIntervals20_Read(const CGEvidenceIntervals15* cself, TEvidenceIntervalsData* data)
+{
+ rc_t rc = 0;
+
+ CG_LINE_START(cself->file, b, len, p);
+ if( b == NULL || len == 0) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+ break;
+ }
+ /*DEBUG_MSG(10, ("evidenceIntervals: '%.*s'\n", len, b));*/
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->interval_id, sizeof(data->interval_id));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->chr, sizeof(data->chr));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &data->offset);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u32(b, p - b, &data->length);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u16(b, p - b, &data->ploidy);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele_indexes, sizeof(data->allele_indexes));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &data->scoreVAF);
+ data->score = data->scoreVAF; /***TODO: do we need re-calculation? ***/
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &data->scoreEAF);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele[0], sizeof(data->allele[0]));
+ data->allele_length[0] = p - b;
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele[1], sizeof(data->allele[1]));
+ data->allele_length[1] = p - b;
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele[2], sizeof(data->allele[2]));
+ data->allele_length[2] = p - b;
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele[3], sizeof(data->allele[3]));
+ data->allele_length[3] = p - b;
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele_alignment[1], sizeof(data->allele_alignment[1]));
+ data->allele_alignment_length[1] = p - b;
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele_alignment[2], sizeof(data->allele_alignment[2]));
+ data->allele_alignment_length[2] = p - b;
+ CG_LINE_LAST_FIELD(b, len, p);
+ rc = str2buf(b, p - b, data->allele_alignment[3], sizeof(data->allele_alignment[3]));
+ data->allele_alignment_length[3] = p - b;
+ ((CGEvidenceIntervals15*)cself)->records++;
+ DEBUG_MSG(10, (
+ "evidenceIntervals: '%s'\t'%s'\t%i\t%u\t%u\t%s\t%u\t%u\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\n",
+ data->interval_id, data->chr, data->offset, data->length, data->ploidy,
+ data->allele_indexes, data->scoreVAF, data->scoreEAF,
+ data->allele[0], data->allele[1], data->allele[2], data->allele[3],
+ data->allele_alignment[1], data->allele_alignment[2], data->allele_alignment[3]));
+ CG_LINE_END();
+ return rc;
+}
+
+static
+void CC CGEvidenceIntervals15_Release(const CGEvidenceIntervals15* cself, uint64_t* records)
+{
+ if( cself != NULL ) {
+ CGEvidenceIntervals15* self = (CGEvidenceIntervals15*)cself;
+ if( records != NULL ) {
+ *records = cself->records;
+ }
+ free(self);
+ }
+}
+
+static const CGFileType_vt CGEvidenceIntervals15_vt =
+{
+ CGEvidenceIntervals15_Header,
+ NULL,
+ NULL,
+ NULL,
+ CGEvidenceIntervals15_Read,
+ NULL,
+ CGEvidenceIntervals15_GetAssemblyId,
+ NULL,
+ NULL,
+ NULL,
+ CGEvidenceIntervals15_GetSample,
+ CGEvidenceIntervals15_GetChromosome,
+ CGEvidenceIntervals15_Release
+};
+
+static const CGFileType_vt CGEvidenceIntervals20_vt =
+{
+ CGEvidenceIntervals15_Header,
+ NULL,
+ NULL,
+ NULL,
+ CGEvidenceIntervals20_Read,
+ NULL,
+ CGEvidenceIntervals15_GetAssemblyId,
+ NULL,
+ NULL,
+ NULL,
+ CGEvidenceIntervals15_GetSample,
+ CGEvidenceIntervals15_GetChromosome,
+ CGEvidenceIntervals15_Release
+};
+
+static
+rc_t CGEvidenceIntervals_Make(const CGFileType** cself, const CGLoaderFile* file, const CGFileType_vt* vt)
+{
+ rc_t rc = 0;
+ CGEvidenceIntervals15* obj = NULL;
+
+ assert(vt);
+
+ if( cself == NULL || file == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+ }
+ if( rc == 0 ) {
+ *cself = NULL;
+ if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ obj->file = file;
+ obj->dad.type = cg_eFileType_EVIDENCE_INTERVALS;
+ obj->dad.vt = vt;
+ }
+ }
+ if( rc == 0 ) {
+ *cself = &obj->dad;
+ } else {
+ CGEvidenceIntervals15_Release(obj, NULL);
+ }
+ return rc;
+}
+
+rc_t CGEvidenceIntervals15_Make(const CGFileType** self,
+ const CGLoaderFile* file)
+{ return CGEvidenceIntervals_Make(self, file, &CGEvidenceIntervals15_vt); }
+
+rc_t CGEvidenceIntervals13_Make(const CGFileType** self,
+ const CGLoaderFile* file)
+{ return CGEvidenceIntervals15_Make(self, file); }
+
+rc_t CGEvidenceIntervals20_Make(const CGFileType** self,
+ const CGLoaderFile* file)
+{ return CGEvidenceIntervals_Make(self, file, &CGEvidenceIntervals20_vt); }
+
+rc_t CGEvidenceIntervals22_Make(const CGFileType** self,
+ const CGLoaderFile* file)
+{ return CGEvidenceIntervals20_Make(self, file); }
diff --git a/tools/cg-load/factory-evidence-intervals.h b/tools/cg-load/factory-evidence-intervals.h
new file mode 100644
index 0000000..2f84fd4
--- /dev/null
+++ b/tools/cg-load/factory-evidence-intervals.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_evidence_intervals_h_
+#define _tools_cg_load_factory_evidence_intervals_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CGEvidenceIntervals13_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals15_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals20_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals22_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_evidence_intervals_h_ */
diff --git a/tools/cg-load/factory-file.h b/tools/cg-load/factory-file.h
new file mode 100644
index 0000000..8931fca
--- /dev/null
+++ b/tools/cg-load/factory-file.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_file_h_
+#define _tools_cg_load_factory_file_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CGFile13_Make(const struct CGFileType** self,
+ const char* type, const struct CGLoaderFile* file);
+rc_t CGFile15_Make(const struct CGFileType** self,
+ const char* type, const struct CGLoaderFile* file);
+rc_t CGFile20_Make(const struct CGFileType** self,
+ const char* type, const struct CGLoaderFile* file);
+rc_t CGFile22_Make(const struct CGFileType** self,
+ const char* type, const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_file_h_ */
diff --git a/tools/cg-load/factory-mappings.c b/tools/cg-load/factory-mappings.c
new file mode 100644
index 0000000..43537f2
--- /dev/null
+++ b/tools/cg-load/factory-mappings.c
@@ -0,0 +1,338 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+typedef struct CGMappings15 CGMappings15;
+#define CGFILETYPE_IMPL CGMappings15
+#include "file.h"
+#include "factory-cmn.h"
+#include "factory-mappings.h"
+#include "debug.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+struct CGMappings15 {
+ CGFileType dad;
+ const CGLoaderFile* file;
+ uint64_t records;
+ /* headers */
+ CGFIELD15_ASSEMBLY_ID assembly_id;
+ CGFIELD15_BATCH_FILE_NUMBER batch_file_number;
+ CGFIELD15_GENERATED_AT generated_at;
+ CGFIELD15_GENERATED_BY generated_by;
+ CGFIELD15_LANE lane;
+ CGFIELD15_LIBRARY library;
+ CGFIELD15_SAMPLE sample;
+ CGFIELD15_SLIDE slide;
+ CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+void CGMappings15_Release(const CGMappings15* cself, uint64_t* records)
+{
+ if( cself != NULL ) {
+ CGMappings15* self = (CGMappings15*)cself;
+ if( records != NULL ) {
+ *records = cself->records;
+ }
+ free(self);
+ }
+}
+
+static
+rc_t CC CGMappings15_Header(const CGMappings15* cself, const char* buf, const size_t len)
+{
+ rc_t rc = 0;
+ size_t slen;
+ CGMappings15* self = (CGMappings15*)cself;
+
+ if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+ } else if( strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0 ) {
+ rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+ if( self->batch_file_number < 1 ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+ }
+ } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+ } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+ } else if( strncmp("LANE\t", buf, slen = 5) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
+ } else if( strncmp("LIBRARY\t", buf, slen = 8) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library));
+ } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+ } else if( strncmp("SLIDE\t", buf, slen = 6) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
+ } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+ } else {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+ }
+ return rc;
+}
+
+static
+rc_t CGMappings15_GetAssemblyId(const CGMappings15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+ if( cself->assembly_id[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *assembly_id = cself->assembly_id;
+ return 0;
+}
+
+static
+rc_t CGMappings15_GetSlide(const CGMappings15* cself, const CGFIELD_SLIDE_TYPE** slide)
+{
+ if( cself->slide[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *slide = cself->slide;
+ return 0;
+}
+
+static
+rc_t CGMappings15_GetLane(const CGMappings15* cself, const CGFIELD_LANE_TYPE** lane)
+{
+ if( cself->lane[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *lane = cself->lane;
+ return 0;
+}
+
+static
+rc_t CGMappings15_GetBatchFileNumber(const CGMappings15* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+ *batch_file_number = &cself->batch_file_number;
+ return 0;
+}
+
+static
+rc_t CC CGMappings15_Read(const CGMappings15* cself, TMappingsData* data)
+{
+ rc_t rc = 0;
+ TMappingsData_map* m = NULL;
+
+ data->map_qty = 0;
+ do {
+ char tmp[2];
+ CG_LINE_START(cself->file, b, len, p);
+ if( b == NULL || len == 0 ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInsufficient);
+ break;
+ }
+ m = &data->map[data->map_qty];
+ m->saved = false;
+ /*DEBUG_MSG(10, ("mappings %4u: '%.*s'\n", data->map_qty, len, b));*/
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u16(b, p - b, &m->flags);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &m->offset);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i16(b, p - b, &m->gap[0]);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i16(b, p - b, &m->gap[1]);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i16(b, p - b, &m->gap[2]);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, tmp, sizeof(tmp));
+ if( tmp[0] < 33 || tmp[0] > 126 ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+ }
+ m->weight = tmp[0];
+ CG_LINE_LAST_FIELD(b, len, p);
+ if( (rc = str2u32(b, p - b, &m->mate)) != 0 ) {
+ } else if( m->flags > 7 ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+ } else if( ++data->map_qty >= CG_MAPPINGS_MAX ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcBuffer, rcInsufficient);
+ }
+ ((CGMappings15*)cself)->records++;
+ DEBUG_MSG(10, ("mappings %4u: %u\t'%s'\t%u\t%i\t%i\t%i\t%c\t%u\n",
+ data->map_qty - 1, m->flags, m->chr, m->offset,
+ m->gap[0], m->gap[1], m->gap[2], m->weight, m->mate));
+ CG_LINE_END();
+ } while( rc == 0 && !(m->flags & cg_eLastDNBRecord) );
+ if (rc == 0) {
+ unsigned i;
+ unsigned const n = data->map_qty;
+
+ for (i = 0; i != n && rc == 0; ++i) {
+ unsigned const mate = data->map[i].mate;
+
+ if (mate > n)
+ data->map[i].mate = i;
+ }
+ }
+ return rc;
+}
+
+static
+rc_t CC CGMappings22_Read(const CGMappings15* cself, TMappingsData* data)
+{
+ rc_t rc = 0;
+ TMappingsData_map* m = NULL;
+
+ data->map_qty = 0;
+ do {
+ char tmp[2];
+ char armWeight = '\0';
+ CG_LINE_START(cself->file, b, len, p);
+ if( b == NULL || len == 0 ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInsufficient);
+ break;
+ }
+ m = &data->map[data->map_qty];
+ m->saved = false;
+ /*DEBUG_MSG(10, ("mappings %4u: '%.*s'\n", data->map_qty, len, b));*/
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2u16(b, p - b, &m->flags);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i32(b, p - b, &m->offset);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i16(b, p - b, &m->gap[0]);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i16(b, p - b, &m->gap[1]);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2i16(b, p - b, &m->gap[2]);
+ CG_LINE_NEXT_FIELD(b, len, p);
+ rc = str2buf(b, p - b, tmp, sizeof(tmp));
+ if( tmp[0] < 33 || tmp[0] > 126 ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+ }
+ m->weight = tmp[0];
+ CG_LINE_NEXT_FIELD(b, len, p);
+ if( (rc = str2u32(b, p - b, &m->mate)) != 0 ) {
+ } else if( m->flags > 7 ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+ } else if( ++data->map_qty >= CG_MAPPINGS_MAX ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcBuffer, rcInsufficient);
+ }
+ CG_LINE_LAST_FIELD(b, len, p);
+ rc = str2buf(b, p - b, tmp, sizeof(tmp));
+ if (tmp[0] < 33 || tmp[0] > 126)
+ { rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange); }
+ armWeight = tmp[0]; /* ignore armWeight */
+ ((CGMappings15*)cself)->records++;
+ DEBUG_MSG(10, ("mappings %4u: %u\t'%s'\t%u\t%i\t%i\t%i\t%c\t%u\t%c\n",
+ data->map_qty - 1, m->flags, m->chr, m->offset,
+ m->gap[0], m->gap[1], m->gap[2], m->weight, m->mate, armWeight));
+ CG_LINE_END();
+ } while( rc == 0 && !(m->flags & cg_eLastDNBRecord) );
+ if (rc == 0) {
+ unsigned i;
+ unsigned const n = data->map_qty;
+
+ for (i = 0; i != n && rc == 0; ++i) {
+ unsigned const mate = data->map[i].mate;
+
+ if (mate > n)
+ data->map[i].mate = n;
+ }
+ }
+ return rc;
+}
+
+static const CGFileType_vt CGMappings15_vt =
+{
+ CGMappings15_Header,
+ NULL,
+ NULL,
+ CGMappings15_Read,
+ NULL,
+ NULL,
+ CGMappings15_GetAssemblyId,
+ CGMappings15_GetSlide,
+ CGMappings15_GetLane,
+ CGMappings15_GetBatchFileNumber,
+ NULL,
+ NULL,
+ CGMappings15_Release
+};
+
+static const CGFileType_vt CGMappings22_vt =
+{
+ CGMappings15_Header,
+ NULL,
+ NULL,
+ CGMappings22_Read,
+ NULL,
+ NULL,
+ CGMappings15_GetAssemblyId,
+ CGMappings15_GetSlide,
+ CGMappings15_GetLane,
+ CGMappings15_GetBatchFileNumber,
+ NULL,
+ NULL,
+ CGMappings15_Release
+};
+
+static
+rc_t CC CGMappings_Make(const CGFileType** cself,
+ const CGLoaderFile* file, const CGFileType_vt* vt)
+{
+ rc_t rc = 0;
+ CGMappings15* obj = NULL;
+
+ if( cself == NULL || file == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+ } else {
+ *cself = NULL;
+ if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ obj->file = file;
+ obj->dad.type = cg_eFileType_MAPPINGS;
+ obj->dad.vt = vt;
+ }
+ }
+ if( rc == 0 ) {
+ *cself = &obj->dad;
+ } else {
+ CGMappings15_Release(obj, NULL);
+ }
+ return rc;
+}
+
+rc_t CC CGMappings15_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGMappings_Make(self, file, &CGMappings15_vt); }
+
+rc_t CC CGMappings13_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGMappings15_Make(self, file); }
+
+rc_t CC CGMappings20_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGMappings15_Make(self, file); }
+
+rc_t CC CGMappings22_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGMappings_Make(self, file, &CGMappings22_vt); }
diff --git a/tools/cg-load/factory-mappings.h b/tools/cg-load/factory-mappings.h
new file mode 100644
index 0000000..cc283b7
--- /dev/null
+++ b/tools/cg-load/factory-mappings.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_mappings_h_
+#define _tools_cg_load_factory_mappings_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGMappings13_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CC CGMappings15_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CC CGMappings20_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CC CGMappings22_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_mappings_h_ */
diff --git a/tools/cg-load/factory-reads.c b/tools/cg-load/factory-reads.c
new file mode 100644
index 0000000..8b39f9a
--- /dev/null
+++ b/tools/cg-load/factory-reads.c
@@ -0,0 +1,261 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+typedef struct CGReads15 CGReads15;
+#define CGFILETYPE_IMPL CGReads15
+#include "file.h"
+#include "factory-cmn.h"
+#include "factory-reads.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <os-native.h>
+
+struct CGReads15 {
+ CGFileType dad;
+ const CGLoaderFile* file;
+ int64_t start_rowid;
+ char spot_group[512];
+ uint64_t records;
+ /* headers */
+ CGFIELD15_ASSEMBLY_ID assembly_id;
+ CGFIELD15_BATCH_FILE_NUMBER batch_file_number;
+ CGFIELD15_BATCH_OFFSET batch_offset;
+ CGFIELD15_FIELD_SIZE field_size;
+ CGFIELD15_GENERATED_AT generated_at;
+ CGFIELD15_GENERATED_BY generated_by;
+ CGFIELD15_LANE lane;
+ CGFIELD15_LIBRARY library;
+ CGFIELD15_SAMPLE sample;
+ CGFIELD15_SLIDE slide;
+ CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+static
+rc_t CC CGReads15_Header(const CGReads15* cself, const char* buf, const size_t len)
+{
+ rc_t rc = 0;
+ size_t slen;
+ CGReads15* self = (CGReads15*)cself;
+
+ if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+ } else if( strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0 ) {
+ rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+ if( self->batch_file_number < 1 ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+ }
+ } else if( strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0 ) {
+ rc = str2u64(&buf[slen], len - slen, &self->batch_offset);
+ } else if( strncmp("FIELD_SIZE\t", buf, slen = 11) == 0 ) {
+ rc = str2u32(&buf[slen], len - slen, &self->field_size);
+ } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+ } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+ } else if( strncmp("LANE\t", buf, slen = 5) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
+ } else if( strncmp("LIBRARY\t", buf, slen = 8) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library));
+ } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+ } else if( strncmp("SLIDE\t", buf, slen = 6) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
+ } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+ rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+ } else {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+ }
+ return rc;
+}
+
+static
+rc_t CGReads15_GetAssemblyId(const CGReads15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+ if( cself->assembly_id[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *assembly_id = cself->assembly_id;
+ return 0;
+}
+
+static
+rc_t CGReads15_GetSlide(const CGReads15* cself, const CGFIELD_SLIDE_TYPE** slide)
+{
+ if( cself->slide[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *slide = cself->slide;
+ return 0;
+}
+
+static
+rc_t CGReads15_GetLane(const CGReads15* cself, const CGFIELD_LANE_TYPE** lane)
+{
+ if( cself->lane[0] == '\0' ) {
+ return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+ }
+ *lane = cself->lane;
+ return 0;
+}
+
+static
+rc_t CGReads15_GetBatchFileNumber(const CGReads15* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+ *batch_file_number = &cself->batch_file_number;
+ return 0;
+}
+
+static
+rc_t CC CGReads15_Read(const CGReads15* cself, TReadsData* data)
+{
+ rc_t rc = 0;
+
+ if( cself->start_rowid == 0 ) {
+ ((CGReads15*)cself)->start_rowid = data->rowid;
+ }
+ CG_LINE_START(cself->file, b, len, p);
+ if( b == NULL || len == 0) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+ break;
+ }
+ /*DEBUG_MSG(10, ("reads: '%.*s'\n", len, b));*/
+ CG_LINE_NEXT_FIELD(b, len, p);
+ if( (rc = str2u16(b, p - b, &data->flags)) != 0 ) {
+ } else if( data->flags > 10 ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+ } else if( (data->flags & 0x03) == 3 || (data->flags & 0x07) == 7 ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+ }
+ CG_LINE_NEXT_FIELD(b, len, p);
+ data->seq.sequence.elements = p - b;
+ if( data->seq.sequence.elements != CG_READS_SPOT_LEN ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+ } else {
+ rc = str2buf(b, data->seq.sequence.elements, data->read, sizeof(data->read));
+ /* clear cache, set in algnment writer */
+ data->reverse[0] = '\0';
+ data->reverse[CG_READS_SPOT_LEN / 2] = '\0';
+ }
+ CG_LINE_LAST_FIELD(b, len, p);
+ data->seq.quality.elements = p - b;
+ if( data->seq.quality.elements != CG_READS_SPOT_LEN ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+ } else {
+ rc = str2buf(b, data->seq.quality.elements, data->qual, sizeof(data->qual));
+ }
+ if( cself->records == 0 ) {
+ size_t w;
+
+#if 0
+ rc = string_printf(((CGReads15*)cself)->spot_group, sizeof(cself->spot_group), &w, "%s:%s:%s:%04u",
+ cself->assembly_id, cself->slide, cself->lane, cself->batch_file_number);
+#else
+ rc = string_printf(((CGReads15*)cself)->spot_group, sizeof(cself->spot_group), &w, "%s-%s",
+ cself->slide, cself->lane);
+#endif
+ data->seq.spot_group.buffer = cself->spot_group;
+ data->seq.spot_group.elements = w;
+ }
+ ((CGReads15*)cself)->records++;
+ DEBUG_MSG(10, ("reads: %u\t'%s'\t'%s'\n", data->flags, data->read, data->qual));
+ CG_LINE_END();
+ return rc;
+}
+
+static
+rc_t CGReads15_GetStartRow(const CGReads15* cself, int64_t* rowid)
+{
+ *rowid = cself->start_rowid;
+ return 0;
+}
+
+static
+void CC CGReads15_Release(const CGReads15* cself, uint64_t* records)
+{
+ if( cself != NULL ) {
+ CGReads15* self = (CGReads15*)cself;
+ if( records != NULL ) {
+ *records = cself->records;
+ }
+ free(self);
+ }
+}
+
+static const CGFileType_vt CGReads15_vt =
+{
+ CGReads15_Header,
+ CGReads15_Read,
+ CGReads15_GetStartRow,
+ NULL,
+ NULL,
+ NULL,
+ CGReads15_GetAssemblyId,
+ CGReads15_GetSlide,
+ CGReads15_GetLane,
+ CGReads15_GetBatchFileNumber,
+ NULL,
+ NULL,
+ CGReads15_Release
+};
+
+rc_t CC CGReads15_Make(const CGFileType** cself, const CGLoaderFile* file)
+{
+ rc_t rc = 0;
+ CGReads15* obj = NULL;
+
+ if( cself == NULL || file == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+ }
+ if( rc == 0 ) {
+ *cself = NULL;
+ if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ obj->file = file;
+ obj->dad.type = cg_eFileType_READS;
+ obj->dad.vt = &CGReads15_vt;
+ }
+ }
+ if( rc == 0 ) {
+ *cself = &obj->dad;
+ } else {
+ CGReads15_Release(obj, NULL);
+ }
+ return rc;
+}
+
+rc_t CC CGReads13_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGReads15_Make(self, file); }
+
+rc_t CC CGReads20_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGReads15_Make(self, file); }
+
+rc_t CC CGReads22_Make(const CGFileType** self, const CGLoaderFile* file)
+{ return CGReads15_Make(self, file); }
diff --git a/tools/cg-load/factory-reads.h b/tools/cg-load/factory-reads.h
new file mode 100644
index 0000000..e0266d3
--- /dev/null
+++ b/tools/cg-load/factory-reads.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_reads_h_
+#define _tools_cg_load_factory_reads_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGReads13_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CC CGReads15_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CC CGReads20_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+rc_t CC CGReads22_Make(const struct CGFileType** self,
+ const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_reads_h_ */
diff --git a/tools/cg-load/file-version-factory.c b/tools/cg-load/file-version-factory.c
new file mode 100644
index 0000000..55372f8
--- /dev/null
+++ b/tools/cg-load/file-version-factory.c
@@ -0,0 +1,157 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-file.h" /* CGFile15_Make ... */
+
+typedef struct CGIgnored CGIgnored;
+#define CGFILETYPE_IMPL CGIgnored
+
+#include "file.h" /* CGLoaderFile */
+
+#include <assert.h>
+
+rc_t CGLoaderFile_CreateCGFile(CGLoaderFile* self,
+ uint32_t FORMAT_VERSION, const char* TYPE)
+{
+ assert(self && !self->cg_file);
+
+ switch (FORMAT_VERSION) {
+ case 0x01030000:
+ return CGFile13_Make(&self->cg_file, TYPE, self);
+ case 0x01050000:
+ case 0x01060000:
+ return CGFile15_Make(&self->cg_file, TYPE, self);
+ case 0x02000000:
+ return CGFile20_Make(&self->cg_file, TYPE, self);
+ case 0x02020000:
+ return CGFile22_Make(&self->cg_file, TYPE, self);
+ default: {
+ const char* name = NULL;
+ rc_t rc = CGLoaderFile_Filename(self, &name);
+ if (rc != 0 || name == NULL)
+ { name = " | UNKNOWN | "; }
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcBadVersion);
+ PLOGERR(klogErr, (klogErr, rc,
+ "Unexpected #FORMAT_VERSION value '$(FORMAT_VERSION)' "
+ "in CG file '$(name)'",
+ "FORMAT_VERSION=%X,name=%s", FORMAT_VERSION, name));
+ return rc;
+ }
+ }
+}
+
+struct CGIgnored {
+ CGFileType dad;
+};
+
+static
+void CC CGIgnored_Release(const CGIgnored* cself, uint64_t* records)
+{
+ if( cself != NULL ) {
+ CGIgnored* self = (CGIgnored*)cself;
+ if( records != NULL ) {
+ *records = 0;
+ }
+ free(self);
+ }
+}
+
+static
+rc_t CC CGIgnored_Header(const CGIgnored* cself,
+ const char* buf, const size_t len)
+{
+ return 0;
+}
+
+static const CGFileType_vt CGIgnored_vt =
+{
+ CGIgnored_Header,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CGIgnored_Release
+};
+
+rc_t CGLoaderFileMakeCGFileType(const CGLoaderFile* self, const char* type,
+ const CGFileTypeFactory* factory, size_t factories,
+ const CGFileType** ftype)
+{
+ rc_t rc = 0;
+ CGIgnored* obj = NULL;
+ uint32_t i;
+
+ if (self == NULL || type == NULL ||
+ factory == NULL || factories == 0 || ftype == NULL)
+ {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+ }
+ else {
+ *ftype = NULL;
+
+ for (i = 0; i < factories; ++i) {
+ if (strcmp(type, factory[i].name) == 0) {
+ if (factory[i].make != NULL) {
+ return factory[i].make(ftype, self);
+ } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+ rc = RC(rcRuntime,
+ rcFile, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ obj->dad.vt = &CGIgnored_vt;
+ obj->dad.type = factory[i].type;
+ }
+ break;
+ }
+ }
+
+ if( obj == NULL ) {
+ const char* name = NULL;
+ rc = CGLoaderFile_Filename(self, &name);
+ if (rc != 0 || name == NULL)
+ { name = " | UNKNOWN | "; }
+
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcUnrecognized);
+ PLOGERR(klogErr, (klogErr, rc,
+ "Unexpected header #TYPE value '$(TYPE)' in CG file '$(name)'",
+ "TYPE=%s,name=%s", type, name));
+ }
+ }
+
+ if( rc == 0 ) {
+ *ftype = &obj->dad;
+ }
+ else {
+ CGIgnored_Release(obj, NULL);
+ }
+
+ return rc;
+}
diff --git a/tools/cg-load/file.c b/tools/cg-load/file.c
new file mode 100644
index 0000000..0e9a272
--- /dev/null
+++ b/tools/cg-load/file.c
@@ -0,0 +1,403 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/status.h>
+#include <kfs/directory.h>
+#include <kapp/loader-file.h>
+#include <strtol.h>
+
+#include "defs.h"
+#include "file.h"
+#include "factory-file.h"
+#include "debug.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+rc_t CGLoaderFile_IsEof(const CGLoaderFile* cself, bool* eof)
+{
+ return KLoaderFile_IsEof(cself ? cself->file : NULL, eof);
+}
+
+rc_t CGLoaderFile_Close(const CGLoaderFile* cself)
+{
+ const char* nm;
+
+ if( KLoaderFile_FullName(cself ? cself->file : NULL, &nm) == 0 ) {
+ PLOGMSG(klogInfo, (klogInfo, "File $(file) done", "severity=status,file=%s", nm));
+ }
+ return KLoaderFile_Close(cself ? cself->file : NULL);
+}
+
+rc_t CGLoaderFile_Line(const CGLoaderFile* cself, uint64_t* line)
+{
+ return KLoaderFile_Line(cself ? cself->file : NULL, line);
+}
+
+
+rc_t CGLoaderFile_Readline(const CGLoaderFile* cself, const void** buffer, size_t* length)
+{
+ return KLoaderFile_Readline(cself ? cself->file : NULL, buffer, length);
+}
+
+rc_t CGLoaderFile_Filename(const CGLoaderFile* cself, const char** name)
+{
+ return KLoaderFile_Name(cself ? cself->file : NULL, name);
+}
+
+rc_t CGLoaderFile_LOG(const CGLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...)
+{
+ if( cself != NULL ) {
+ va_list args;
+ va_start(args, fmt);
+ rc = KLoaderFile_VLOG(cself->file, lvl, rc, msg, fmt, args);
+ va_end(args);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_Release(const CGLoaderFile* cself, bool ignored)
+{
+ rc_t rc = 0;
+
+ if( cself ) {
+ CGLoaderFile* self = (CGLoaderFile*)cself;
+ /* may return md5 check error here */
+ if( self->cg_file && self->cg_file->vt->destroy ) {
+ uint64_t recs = 0;
+ self->cg_file->vt->destroy(self->cg_file, &recs);
+ if( rc == 0 && !ignored ) {
+ const char* name = NULL;
+ CGLoaderFile_Filename(cself, &name);
+ STSMSG(0, ("file %s %lu records", name, recs));
+ }
+ }
+ rc = KLoaderFile_Release(self->file, ignored);
+ free(self);
+ }
+ return rc;
+}
+
+static
+rc_t parse_version(const char* buf, size_t len, uint32_t* v)
+{
+ rc_t rc = 0;
+ int i = 0;
+ int64_t q;
+ char* end = (char*)buf;
+ const size_t sz = sizeof(*v) / sizeof(char);
+
+ *v = 0;
+ do {
+ if( i == sz ) {
+ rc = RC(rcRuntime, rcHeader, rcConstructing, rcFile, rcBadVersion);
+ } else {
+ q = strtoi64(end, &end, 10);
+ if( q < 0 || q > 255 ) {
+ rc = RC(rcRuntime, rcHeader, rcConstructing, rcFile, rcBadVersion);
+ } else if( *end == '.' ) {
+ end++;
+ } else if( end - buf < len ) {
+ rc = RC(rcRuntime, rcHeader, rcConstructing, rcFile, rcBadVersion);
+ }
+ *v = *v | ((uint8_t)q << ((sz - ++i) * 8));
+ }
+ } while( rc == 0 && end - buf < len);
+ return rc;
+}
+
+static
+rc_t CGLoaderFile_header(const CGLoaderFile* cself)
+{
+ rc_t rc = 0;
+
+ if( cself->cg_file == NULL ) {
+ CGLoaderFile* self = (CGLoaderFile*)cself;
+ const char* buf;
+ size_t len;
+ uint32_t fver = 0;
+ char type[64];
+
+ do {
+ if( (rc = CGLoaderFile_Readline(self, (const void**)&buf, &len)) == 0 ) {
+ if( buf == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcTooShort);
+ } else if( len == 0 ) {
+ /* empty line: skip */
+ } else if( buf[0] == '>' ) {
+ /* start of records */
+ break;
+ } else if( buf[0] == '#' ) {
+ len--; buf++;
+ if( strncmp("FORMAT_VERSION\t", buf, 15) == 0 ) {
+ rc = parse_version(&buf[15], len - 15, &fver);
+ } else if( strncmp("TYPE\t", buf, 5) == 0 ) {
+ rc = str2buf(&buf[5], len - 5, type, sizeof(type));
+ }
+ } else {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcUnrecognized);
+ }
+ }
+ } while( rc == 0 && self->cg_file == NULL );
+ if( rc == 0 ) {
+ rc = CGLoaderFile_CreateCGFile(self, fver, type);
+
+ if( rc == 0 ) {
+ CGFileType* f = (CGFileType*)self->cg_file;
+ f->format_version = fver;
+ if( f->type == cg_eFileType_Unknown || !f->vt || !f->vt->header ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcInterface, rcIncomplete);
+ }
+ }
+ if( rc == 0 ) {
+ /* we need to restart file for loading all header by sub class */
+ KLoaderFile_Reset(self->file);
+ }
+ while( rc == 0 ) {
+ if( (rc = CGLoaderFile_Readline(self, (const void**)&buf, &len)) == 0 ) {
+ if( buf == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcTooShort);
+ } else if( len == 0 ) {
+ /* empty line: skip */
+ } else if( buf[0] == '>' ) {
+ /* start of records */
+ break;
+ } else if( buf[0] == '#' ) {
+ if( strncmp("FORMAT_VERSION\t", &buf[1], 15) != 0 && strncmp("TYPE\t", &buf[1], 5) != 0 ) {
+ rc = cself->cg_file->vt->header(cself->cg_file, &buf[1], len - 1);
+ }
+ } else {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcUnrecognized);
+ }
+ }
+ }
+ }
+ /* close file after file is processed, but stay at data start */
+ KLoaderFile_SetReadAhead(self->file, self->read_ahead);
+ KLoaderFile_Close(self->file);
+ }
+
+ return rc;
+}
+
+rc_t CGLoaderFile_Make(const CGLoaderFile** cself, const KDirectory* dir, const char* filename,
+ const uint8_t* md5_digest, bool read_ahead)
+{
+ rc_t rc = 0;
+ CGLoaderFile* obj = NULL;
+
+ if( cself == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcSelf, rcNull);
+ } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+ } else if( (rc = KLoaderFile_Make(&obj->file, dir, filename, md5_digest, false)) == 0 ) {
+ obj->read_ahead = read_ahead;
+ }
+ if( rc == 0 ) {
+ *cself = obj;
+ } else {
+ CGLoaderFile_Release(obj, true);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetType(const CGLoaderFile* cself, CG_EFileType* type)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || type == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcClassifying, rcParam, rcNull);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ *type = cself->cg_file->type;
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetRead(const CGLoaderFile* cself, TReadsData* data)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || data == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->type != cg_eFileType_READS ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( cself->cg_file->vt->reads == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->reads(cself->cg_file, data);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetStartRow(const CGLoaderFile* cself, int64_t* rowid)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || rowid == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->type != cg_eFileType_READS ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( cself->cg_file->vt->get_start_row == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->get_start_row(cself->cg_file, rowid);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetMapping(const CGLoaderFile* cself, TMappingsData* data)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || data == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->type != cg_eFileType_MAPPINGS ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( cself->cg_file->vt->mappings == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->mappings(cself->cg_file, data);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetEvidenceIntervals(const CGLoaderFile* cself, TEvidenceIntervalsData* data)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || data == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->type != cg_eFileType_EVIDENCE_INTERVALS ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( cself->cg_file->vt->evidence_intervals == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->evidence_intervals(cself->cg_file, data);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetEvidenceDnbs(const CGLoaderFile* cself, const char* interval_id, TEvidenceDnbsData* data)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || interval_id == NULL || data == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->type != cg_eFileType_EVIDENCE_DNBS ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( cself->cg_file->vt->evidence_dnbs == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->evidence_dnbs(cself->cg_file, interval_id, data);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetAssemblyId(const CGLoaderFile* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || assembly_id == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->vt->assembly_id == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->assembly_id(cself->cg_file, assembly_id);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetSlide(const CGLoaderFile* cself, const CGFIELD_SLIDE_TYPE** slide)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || slide == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->vt->slide == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->slide(cself->cg_file, slide);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetLane(const CGLoaderFile* cself, const CGFIELD_LANE_TYPE** lane)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || lane == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->vt->lane == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->lane(cself->cg_file, lane);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetBatchFileNumber(const CGLoaderFile* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || batch_file_number == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->vt->batch_file_number == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->batch_file_number(cself->cg_file, batch_file_number);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetSample(const CGLoaderFile* cself, const CGFIELD_SAMPLE_TYPE** sample)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || sample == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->vt->sample == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->sample(cself->cg_file, sample);
+ }
+ return rc;
+}
+
+rc_t CGLoaderFile_GetChromosome(const CGLoaderFile* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome)
+{
+ rc_t rc = 0;
+
+ if( cself == NULL || chromosome == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+ } else if( cself->cg_file->vt->chromosome == NULL ) {
+ rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+ } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+ rc = cself->cg_file->vt->chromosome(cself->cg_file, chromosome);
+ }
+ return rc;
+}
diff --git a/tools/cg-load/file.h b/tools/cg-load/file.h
new file mode 100644
index 0000000..d9bc44a
--- /dev/null
+++ b/tools/cg-load/file.h
@@ -0,0 +1,330 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_file_h_
+#define _tools_cg_load_file_h_
+
+#include <kfs/file.h>
+#include <kfs/directory.h>
+
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include "defs.h"
+#include "writer-seq.h"
+#include "writer-algn.h"
+#include "writer-evidence-intervals.h"
+#include "writer-evidence-dnbs.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <strtol.h>
+
+
+/* some usefull utils */
+/* strchr but in fixed size buffer (not asciiZ!) */
+static __inline__ const char* str_chr(const char* str, const size_t len, char sep)
+{
+ const char* end = str + len;
+ while( str < end ) {
+ if( *str == sep ) {
+ break;
+ }
+ str++;
+ }
+ return str == end ? NULL : str;
+}
+
+static __inline__
+rc_t str2buf(const char* str, const size_t len, char* buf, const size_t buf_sz)
+{
+ if( buf_sz <= len ) {
+ rc_t rc = RC(rcRuntime, rcString, rcCopying, rcBuffer, rcInsufficient);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc, "'$(str)': $(sz) <= $(len)",
+ "str=%.*s,sz=%lu,len=%lu", len, str, buf_sz, len));
+ }
+ return rc;
+ }
+ memcpy(buf, str, len);
+ buf[len] = '\0';
+ return 0;
+}
+
+static __inline__
+rc_t str2unsigned(const char* str, const size_t len, uint64_t max, uint64_t* value)
+{
+ char* end;
+ int64_t q;
+
+ if( len == 0 ) {
+ return RC(rcRuntime, rcString, rcConverting, rcData, rcTooShort);
+ }
+ q = strtou64(str, &end, 10);
+ if( end - str != len ) {
+ return RC(rcRuntime, rcString, rcConverting, rcData, rcInvalid);
+ }
+ if( q < 0 || ( uint64_t ) q > max ) {
+ return RC(rcRuntime, rcString, rcConverting, rcData, rcOutofrange);
+ }
+ *value = q;
+ return 0;
+}
+static __inline__
+rc_t str2u64(const char* str, const size_t len, uint64_t* value)
+{
+ rc_t rc;
+ uint64_t q;
+
+ if( (rc = str2unsigned(str, len, -1, &q)) == 0 ) {
+ *value = q;
+ }
+ return rc;
+}
+
+static __inline__
+rc_t str2signed(const char* str, const size_t len, int64_t min, int64_t max, int64_t* value)
+{
+ char* end;
+ int64_t q;
+
+ if( len == 0 ) {
+ return RC(rcRuntime, rcString, rcConverting, rcData, rcTooShort);
+ }
+ q = strtoi64(str, &end, 10);
+ if( end - str != len ) {
+ return RC(rcRuntime, rcString, rcConverting, rcData, rcInvalid);
+ }
+ if( q < min || q > max ) {
+ return RC(rcRuntime, rcString, rcConverting, rcData, rcOutofrange);
+ }
+ *value = q;
+ return 0;
+}
+static __inline__
+rc_t str2i64(const char* str, const size_t len, int64_t* value)
+{
+ rc_t rc;
+ int64_t q;
+
+#if _ARCH_BITS == 32
+ if( (rc = str2signed(str, len, -0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFFLL, &q)) == 0 ) {
+ *value = q;
+ }
+#else
+ if( (rc = str2signed(str, len, -0x7FFFFFFFFFFFFFFFL, 0x7FFFFFFFFFFFFFFFL, &q)) == 0 ) {
+ *value = q;
+ }
+#endif
+ return rc;
+}
+static __inline__
+rc_t str2i32(const char* str, const size_t len, int32_t* value)
+{
+ rc_t rc;
+ int64_t q;
+
+ if( (rc = str2signed(str, len, -0x7FFFFFFF - 1, 0x7FFFFFFF, &q)) == 0 ) {
+ *value = ( int32_t ) q;
+ }
+ return rc;
+}
+static __inline__
+rc_t str2u32(const char* str, const size_t len, uint32_t* value)
+{
+ rc_t rc;
+ uint64_t q;
+
+ if( (rc = str2unsigned(str, len, 0xFFFFFFFF, &q)) == 0 ) {
+ *value = ( uint32_t ) q;
+ }
+ return rc;
+}
+static __inline__
+rc_t str2i16(const char* str, const size_t len, int16_t* value)
+{
+ rc_t rc;
+ int64_t q;
+
+ if( (rc = str2signed(str, len, -0x7FFF - 1, 0x7FFF, &q)) == 0 ) {
+ *value = ( int16_t ) q;
+ }
+ return rc;
+}
+static __inline__
+rc_t str2u16(const char* str, const size_t len, uint16_t* value)
+{
+ rc_t rc;
+ uint64_t q;
+
+ if( (rc = str2unsigned(str, len, 0xFFFF, &q)) == 0 ) {
+ *value = ( uint16_t ) q;
+ }
+ return rc;
+}
+#define CG_LINE_START(file, buf, len, res) \
+ do { \
+ const char* buf, *res; \
+ size_t len; \
+ if( (rc = CGLoaderFile_Readline(file, (const void**)&buf, &len)) != 0 ) { \
+ break; \
+ } \
+ res = buf - 1;
+
+#define CG_LINE_NEXT_FIELD(buf, len, res) \
+ if( rc != 0 ) { \
+ break; \
+ } else { \
+ len -= ++res - buf; \
+ buf = res; \
+ if( (res = str_chr(buf, len, '\t')) == NULL ) { \
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcCorrupt); \
+ break; \
+ } \
+ }
+
+#define CG_LINE_LAST_FIELD(buf, len, res) \
+ if( rc != 0 ) { \
+ break; \
+ } else { \
+ len -= ++res - buf; \
+ buf = res; \
+ res = buf + len; \
+ if( str_chr(buf, len, '\t') != NULL ) { \
+ rc = RC(rcRuntime, rcFile, rcReading, rcData, rcCorrupt); \
+ break; \
+ } \
+ }
+
+#define CG_LINE_END() \
+ } while(false)
+
+#ifndef CGFILETYPE_IMPL
+#define CGFILETYPE_IMPL CGFileType
+#endif
+
+typedef struct CGFileType CGFileType;
+
+typedef struct CGFileType_vt_struct {
+ rc_t ( CC *header ) (const CGFILETYPE_IMPL* self, const char* buf, const size_t len);
+
+ rc_t ( CC *reads ) (const CGFILETYPE_IMPL* cself, TReadsData* data);
+ rc_t ( CC *get_start_row ) (const CGFILETYPE_IMPL* cself, int64_t* rowid);
+ rc_t ( CC *mappings ) (const CGFILETYPE_IMPL* cself, TMappingsData* data);
+ rc_t ( CC *evidence_intervals )(const CGFILETYPE_IMPL* cself, TEvidenceIntervalsData* data);
+ rc_t ( CC *evidence_dnbs )(const CGFILETYPE_IMPL* cself, const char* interval_id, TEvidenceDnbsData* data);
+
+ rc_t ( CC *assembly_id) (const CGFILETYPE_IMPL* self, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id);
+ rc_t ( CC *slide) (const CGFILETYPE_IMPL* self, const CGFIELD_SLIDE_TYPE** slide);
+ rc_t ( CC *lane) (const CGFILETYPE_IMPL* self, const CGFIELD_LANE_TYPE** lane);
+ rc_t ( CC *batch_file_number) (const CGFILETYPE_IMPL* self, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number);
+ rc_t ( CC *sample) (const CGFILETYPE_IMPL* self, const CGFIELD_SAMPLE_TYPE** sample);
+ rc_t ( CC *chromosome) (const CGFILETYPE_IMPL* self, const CGFIELD_CHROMOSOME_TYPE** chromosome);
+
+ void ( CC *destroy ) (const CGFILETYPE_IMPL* self, uint64_t* records);
+} CGFileType_vt;
+
+struct CGFileType {
+ uint32_t format_version;
+ CG_EFileType type;
+ const CGFileType_vt* vt;
+};
+
+typedef struct CGLoaderFile
+{
+ bool read_ahead;
+ const struct KLoaderFile *file;
+ const CGFileType* cg_file;
+} CGLoaderFile;
+
+typedef struct CGFileTypeFactory {
+ const char* name;
+ CG_EFileType type;
+ rc_t ( CC *make ) (const CGFileType** self, const CGLoaderFile* file);
+} CGFileTypeFactory;
+
+rc_t CGLoaderFile_Make(const CGLoaderFile **cself, const KDirectory* dir, const char* filename,
+ const uint8_t* md5_digest, bool read_ahead);
+
+rc_t CGLoaderFile_Release(const CGLoaderFile* cself, bool ignored);
+
+/* returns true if eof is reached and buffer is empty */
+rc_t CGLoaderFile_IsEof(const CGLoaderFile* cself, bool* eof);
+
+/* closes the underlying file */
+rc_t CGLoaderFile_Close(const CGLoaderFile* cself);
+
+/* returns current 1-based line number in file */
+rc_t CGLoaderFile_Line(const CGLoaderFile* cself, uint64_t* line);
+
+rc_t CGLoaderFile_Filename(const CGLoaderFile *cself, const char** name);
+
+rc_t CGLoaderFile_LOG(const CGLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...);
+
+rc_t CGLoaderFile_GetType(const CGLoaderFile* cself, CG_EFileType* type);
+
+rc_t CGLoaderFile_GetRead(const CGLoaderFile* cself, TReadsData* data);
+rc_t CGLoaderFile_GetStartRow(const CGLoaderFile* cself, int64_t* rowid);
+
+rc_t CGLoaderFile_GetMapping(const CGLoaderFile* cself, TMappingsData* data);
+
+rc_t CGLoaderFile_GetEvidenceIntervals(const CGLoaderFile* cself, TEvidenceIntervalsData* data);
+
+rc_t CGLoaderFile_GetEvidenceDnbs(const CGLoaderFile* cself, const char* interval_id, TEvidenceDnbsData* data);
+
+rc_t CGLoaderFile_GetAssemblyId(const CGLoaderFile* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id);
+rc_t CGLoaderFile_GetSlide(const CGLoaderFile* cself, const CGFIELD_SLIDE_TYPE** slide);
+rc_t CGLoaderFile_GetLane(const CGLoaderFile* cself, const CGFIELD_LANE_TYPE** lane);
+rc_t CGLoaderFile_GetBatchFileNumber(const CGLoaderFile* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number);
+rc_t CGLoaderFile_GetSample(const CGLoaderFile* cself, const CGFIELD_SAMPLE_TYPE** sample);
+rc_t CGLoaderFile_GetChromosome(const CGLoaderFile* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome);
+
+
+/* Readline
+ * makes next line from a file available in buffer.
+ * eligable EOL symbols are: \n (unix), \r (older mac), \r\n (win)
+ * EOL symbol(s) never included in buffer length.
+ * line is \0 terminated.
+ * if there is no EOL at EOF - not an error.
+ * fails if internal buffer is insufficient.
+ * buffer is NULL on EOF
+ * rc state of (rcString rcTooLong) means line was too long
+ * you may copy line and readline again for the tail of the line
+ *
+ * "buffer" [ OUT ] and "length" [ OUT ] - returned line and it's length
+ */
+rc_t CGLoaderFile_Readline(const CGLoaderFile* cself, const void** buffer, size_t* length);
+
+rc_t CGLoaderFile_CreateCGFile(CGLoaderFile* self,
+ uint32_t FORMAT_VERSION, const char* TYPE);
+
+rc_t CGLoaderFileMakeCGFileType(const CGLoaderFile* self, const char* type,
+ const CGFileTypeFactory* factory, size_t factories,
+ const CGFileType** ftype);
+
+#endif /* _tools_cg_load_file_h_ */
diff --git a/tools/cg-load/writer-algn.c b/tools/cg-load/writer-algn.c
new file mode 100644
index 0000000..cb025dc
--- /dev/null
+++ b/tools/cg-load/writer-algn.c
@@ -0,0 +1,775 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <klib/sort.h>
+#include <kfs/file.h>
+#include <insdc/insdc.h>
+#include <align/dna-reverse-cmpl.h>
+
+#include "defs.h"
+#include "writer-algn.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <assert.h>
+
+typedef struct CGWriterAlgn_match_struct {
+ /* filled out by ReferenceMgr_Compress */
+ INSDC_coord_zero read_start;
+ INSDC_coord_len read_len;
+ bool has_ref_offset[CG_READS_SPOT_LEN];
+ int32_t ref_offset[CG_READS_SPOT_LEN];
+ bool has_mismatch[CG_READS_SPOT_LEN];
+ char mismatch[CG_READS_SPOT_LEN];
+ int64_t ref_id;
+ INSDC_coord_zero ref_start;
+ /* fill oud here */
+ int64_t seq_spot_id;
+ INSDC_coord_one seq_read_id;
+ bool ref_orientation;
+ uint32_t mapq;
+ /* used only only in secondary */
+ bool mate_ref_orientation;
+ int64_t mate_ref_id;
+ INSDC_coord_zero mate_ref_pos;
+ INSDC_coord_zero template_len;
+ INSDC_coord_len ref_len;
+} CGWriterAlgn_match;
+
+struct CGWriterAlgn {
+ const ReferenceMgr* rmgr;
+ const TableWriterAlgn* primary;
+ const TableWriterAlgn* secondary;
+ TableWriterAlgnData algn[CG_MAPPINGS_MAX];
+ CGWriterAlgn_match match[CG_MAPPINGS_MAX];
+ TMappingsData data;
+ uint32_t min_mapq;
+ bool single_mate;
+ uint64_t forced_pairs_cnt;
+ uint64_t dropped_mates_cnt;
+};
+
+
+static uint32_t global_cluster_size;
+
+rc_t CGWriterAlgn_Make(const CGWriterAlgn** cself, TMappingsData** data, VDatabase* db, const ReferenceMgr* rmgr,
+ uint32_t min_mapq, bool single_mate, uint32_t cluster_size)
+{
+ rc_t rc = 0;
+ CGWriterAlgn* self;
+
+ if( cself == NULL || db == NULL ) {
+ return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+ }
+ self = calloc(1, sizeof(*self));
+ if( self == NULL ) {
+ rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ if( (rc = TableWriterAlgn_Make(&self->primary, db,
+ ewalgn_tabletype_PrimaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ){
+ LOGERR(klogErr, rc, "primary alignment table");
+ } else if( (rc = TableWriterAlgn_Make(&self->secondary, db,
+ ewalgn_tabletype_SecondaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ) {
+ LOGERR(klogErr, rc, "secondary alignment table");
+ } else {
+ int i;
+ /* interconnect buffers */
+ for(i = 0; i < CG_MAPPINGS_MAX; i++) {
+ self->algn[i].seq_spot_id.buffer = &self->match[i].seq_spot_id;
+ self->algn[i].seq_spot_id.elements = 1;
+
+ self->algn[i].seq_read_id.buffer = &self->match[i].seq_read_id;
+ self->algn[i].seq_read_id.elements = 1;
+
+ self->algn[i].read_start.buffer = &self->match[i].read_start;
+
+ self->algn[i].read_len.buffer = &self->match[i].read_len;
+
+ self->algn[i].has_ref_offset.buffer = self->match[i].has_ref_offset;
+
+ self->algn[i].ref_offset.buffer = self->match[i].ref_offset;
+
+ self->algn[i].ref_id.buffer = &self->match[i].ref_id;
+
+ self->algn[i].ref_start.buffer = &self->match[i].ref_start;
+
+ self->algn[i].has_mismatch.buffer = self->match[i].has_mismatch;
+
+ self->algn[i].mismatch.buffer = self->match[i].mismatch;
+
+ self->algn[i].ref_orientation.buffer = &self->match[i].ref_orientation;
+ self->algn[i].ref_orientation.elements = 1;
+
+ self->algn[i].mapq.buffer = &self->match[i].mapq;
+ self->algn[i].mapq.elements = 1;
+
+ self->algn[i].mate_ref_orientation.buffer = &self->match[i].mate_ref_orientation;
+ self->algn[i].mate_ref_orientation.elements = 1;
+
+ self->algn[i].mate_ref_id.buffer = &self->match[i].mate_ref_id;
+ self->algn[i].mate_ref_id.elements = 1;
+
+ self->algn[i].mate_ref_pos.buffer = &self->match[i].mate_ref_pos;
+ self->algn[i].mate_ref_pos.elements = 1;
+
+ self->algn[i].template_len.buffer = &self->match[i].template_len;
+ self->algn[i].template_len.elements = 1;
+ }
+ self->rmgr = rmgr;
+ self->min_mapq = min_mapq;
+ self->single_mate = single_mate;
+ global_cluster_size = cluster_size;
+ *data = &self->data;
+ }
+ }
+ if( rc == 0 ) {
+ *cself = self;
+ } else {
+ CGWriterAlgn_Whack(self, false, NULL, NULL);
+ }
+ return rc;
+}
+
+rc_t CGWriterAlgn_Whack(const CGWriterAlgn* cself, bool commit, uint64_t* rows_1st, uint64_t* rows_2nd)
+{
+ rc_t rc = 0;
+ if( cself != NULL ) {
+ CGWriterAlgn* self = (CGWriterAlgn*)cself;
+ rc_t rc1 = TableWriterAlgn_Whack(cself->primary, commit, rows_1st);
+ rc_t rc2 = TableWriterAlgn_Whack(cself->secondary, commit, rows_2nd);
+ if( self->forced_pairs_cnt > 0 ) {
+ PLOGMSG(klogInfo, (klogInfo, "$(forced_pairs_cnt) forced pairs to PRIMARY", "forced_pairs_cnt=%lu", self->forced_pairs_cnt));
+ }
+ if( self->dropped_mates_cnt > 0 ) {
+ PLOGMSG(klogInfo, (klogInfo, "$(dropped_mates_cnt) dropped duplicate mates in SECONDARY", "dropped_mates_cnt=%lu", self->dropped_mates_cnt));
+ }
+ rc = rc1 ? rc1 : rc2;
+ free(self);
+ }
+ return rc;
+}
+
+static
+rc_t CGWriterAlgn_Save(CGWriterAlgn *const self,
+ TReadsData *const rd,
+ TableWriterAlgn const *const writer,
+ uint32_t const mate,
+ int64_t *const rowid)
+{
+ rc_t rc = 0;
+ TMappingsData_map *const map = &self->data.map[mate];
+
+ if( !map->saved ) {
+ CGWriterAlgn_match *const match = &self->match[mate];
+ TableWriterAlgnData *const algn = &self->algn[mate];
+ uint32_t* cigar, g;
+ uint32_t left_cigar[] = { 5 << 4, 0, 10 << 4, 0, 10 << 4, 0, 10 << 4 };
+ uint32_t right_cigar[] = { 10 << 4, 0, 10 << 4, 0, 10 << 4, 0, 5 << 4 };
+ const uint32_t read_len = CG_READS_SPOT_LEN / 2;
+ const char* read;
+
+ if (match->seq_read_id == 2) {
+ read = &((const char*)(rd->seq.sequence.buffer))[read_len];
+ cigar = right_cigar;
+ g = CG_READS_SPOT_LEN / 2;
+ }
+ else {
+ read = rd->seq.sequence.buffer;
+ cigar = left_cigar;
+ g = 0;
+ }
+ if (match->ref_orientation) {
+ if( rd->reverse[g] == '\0' ) {
+ if( (rc = DNAReverseCompliment(read, &rd->reverse[g], read_len)) != 0) {
+ return rc;
+ }
+ DEBUG_MSG(10, ("'%.*s' -> cg_eRevDnbStrand: '%.*s'\n", read_len, read, read_len, &rd->reverse[g]));
+ }
+ read = &rd->reverse[g];
+ cigar = (cigar == left_cigar) ? right_cigar : left_cigar;
+ }
+ for(g = 0; g < CG_READS_NGAPS; g++) {
+ if( map->gap[g] > 0 ) {
+ cigar[g * 2 + 1] = (map->gap[g] << 4) | 2; /* 'xN' */
+ } else if( map->gap[g] < 0 ) {
+ cigar[g * 2 + 1] = (-map->gap[g] << 4) | 9; /* 'xB' */
+ } else {
+ cigar[g * 2 + 1] = 0; /* '0M' */
+ }
+ }
+ algn->ploidy = 0;
+ if( (rc = ReferenceMgr_Compress(self->rmgr, ewrefmgr_cmp_Binary,
+ map->chr, map->offset, read, read_len, cigar, 7, 0, NULL, 0, 0, NULL, 0, algn)) != 0 ) {
+ PLOGERR(klogErr, (klogErr, rc, "compression failed $(id) $(o)",
+ PLOG_2(PLOG_S(id),PLOG_I32(o)), map->chr, map->offset));
+ }
+ else {
+#if 1
+ /* this is to try represent these alignments as unmated to match cgatools
+ * axf uses the row length of MATE_REF_ORIENTATION as the indicator of
+ * mate presence
+ */
+ unsigned const save = algn->mate_ref_orientation.elements;
+
+ if (map->mate == mate)
+ algn->mate_ref_orientation.elements = 0;
+
+ rc = TableWriterAlgn_Write(writer, algn, rowid);
+
+ if (map->mate == mate)
+ algn->mate_ref_orientation.elements = save;
+#else
+ rc = TableWriterAlgn_Write(writer, algn, rowid);
+#endif
+ map->saved = true;
+ }
+ }
+ return rc;
+}
+
+#if 1
+static
+double JointQ(double const Q1, double const Q2)
+{
+ double const P1 = 1.0 - pow(10.0, Q1/-10.0); /* prob that 1 is not incorrect */
+ double const P2 = 1.0 - pow(10.0, Q2/-10.0); /* prob that 2 is not incorrect */
+ double const Pj = 1.0 - P1*P2; /* prob that 1+2 is incorrect */
+ double const Q = -10.0 * log10(Pj);
+
+ return Q;
+}
+
+static
+unsigned FindBestPair(TMappingsData *const data)
+{
+ unsigned const N = data->map_qty;
+ unsigned i;
+ double maxq;
+ unsigned best = N;
+
+ /* pick best of the reciprocal pairs */
+ for (i = 0, maxq = -1.0; i != N; ++i) {
+ unsigned const mate = data->map[i].mate;
+ bool const is_left = (data->map[i].flags & cg_eRightHalfDnbMap) == 0;
+
+ if (mate < N && mate != i && data->map[mate].mate == i && is_left) {
+ double const Q1 = (int)data->map[i].weight - 33;
+ double const Q2 = (int)data->map[mate].weight - 33;
+ double const q = JointQ(Q1, Q2);
+
+ assert(Q1 >= 0);
+ assert(Q2 >= 0);
+ assert(q >= 0);
+ if (maxq < q) {
+ maxq = q;
+ best = i;
+ }
+ }
+ }
+ if (best < N)
+ return best;
+
+ /* no reciprocal pairs, pick best of any pair */
+ for (i = 0, maxq = 0.0; i != N; ++i) {
+ unsigned const mate = data->map[i].mate;
+ if (mate < N && mate != i) {
+ double const Q1 = (int)data->map[i].weight - 33;
+ double const Q2 = (int)data->map[mate].weight - 33;
+ double const q = JointQ(Q1, Q2);
+
+ assert(Q1 >= 0);
+ assert(Q2 >= 0);
+ assert(q >= 0);
+ if (maxq < q) {
+ maxq = q;
+ best = i;
+ }
+ }
+ }
+ if (best == N) {
+ /* no pair with a joint Q > 0; pick best mapping */
+ for (i = 0, maxq = 0.0; i != N; ++i) {
+ unsigned const mate = data->map[i].mate;
+ if (mate < N && mate != i) {
+ double const q = (int)data->map[i].weight - 33;
+
+ if (maxq < q) {
+ maxq = q;
+ best = i;
+ }
+ }
+ }
+ if (best == N) {
+ /* no mapping with Q > 0; pick first */
+ for (i = 0, maxq = 0.0; i != N; ++i) {
+ unsigned const mate = data->map[i].mate;
+ if (mate < N && mate != i) {
+ best = i;
+ break;
+ }
+ }
+ if (best == N) {
+ /* give up */
+ return N;
+ }
+ }
+ }
+ {
+ /* make the pair reciprocal */
+ unsigned const mate = data->map[best].mate;
+
+ if (mate < N) {
+ data->map[mate].mate = best;
+ return (data->map[best].flags & cg_eRightHalfDnbMap) ? mate : best;
+ }
+ return N;
+ }
+}
+
+static
+unsigned FindBestLeft(TMappingsData *const data)
+{
+ unsigned const N = data->map_qty;
+ unsigned i;
+ unsigned best;
+ int maxq;
+
+ for (best = N, maxq = -1, i = 0; i != N; ++i) {
+ int const q = (int)data->map[i].weight;
+
+ if ((data->map[i].flags & cg_eRightHalfDnbMap) == 0 && maxq < q) {
+ maxq = q;
+ best = i;
+ }
+ }
+ return best;
+}
+
+static
+unsigned FindBestRight(TMappingsData *const data)
+{
+ unsigned const N = data->map_qty;
+ unsigned i;
+ unsigned best;
+ int maxq;
+
+ for (best = N, maxq = -1, i = 0; i != N; ++i) {
+ int const q = (int)data->map[i].weight;
+
+ if ((data->map[i].flags & cg_eRightHalfDnbMap) != 0 && maxq < q) {
+ maxq = q;
+ best = i;
+ }
+ }
+ return best;
+}
+
+static
+bool check_in_cluster(TMappingsData_map const *const a, TMappingsData_map const *const b)
+{
+ if ( (a->flags & cg_eRightHalfDnbMap) == (b->flags & cg_eRightHalfDnbMap)
+ && (strcmp(a->chr, b->chr) == 0)
+ && abs((int)a->offset - (int)b->offset) <= global_cluster_size)
+ {
+ return true;
+ }
+ return false;
+}
+
+static
+int clustering_sort_cb(void const *const A, void const *const B, void *const ctx)
+{
+ TMappingsData const *const data = (TMappingsData const *)ctx;
+ unsigned const ia = *(unsigned const *)A;
+ unsigned const ib = *(unsigned const *)B;
+ TMappingsData_map const *const a = &data->map[ia];
+ TMappingsData_map const *const b = &data->map[ib];
+ int res;
+
+ res = (int)(a->flags & cg_eRightHalfDnbMap) - (int)(b->flags & cg_eRightHalfDnbMap); /**** separate by DNP side ***/
+ if (res) return res;
+
+ res = strcmp(a->chr, b->chr); /* same chromosome ? **/
+ if (res) return res;
+
+ res = (a->offset - b->offset) / (global_cluster_size + 1); /*** is it within the range ***/
+ if (res) return res;
+
+ /**cluster is defined here; now pick the winner **/
+ res = (int)a->saved - (int)b->saved; /*** if already saved **/
+ if (res) return -res;
+
+ res = (int)a->weight - (int)b->weight; /*** has higher score **/
+ if (res) return -res;
+
+ res = (int)(a->gap[0] + a->gap[1] + a->gap[2])
+ - (int)(b->gap[0] + b->gap[1] + b->gap[2]); /** has lower projection on the reference **/
+ return res;
+}
+
+static
+void cluster_mates(TMappingsData *const data)
+{
+ unsigned index[CG_MAPPINGS_MAX];
+ unsigned i;
+ unsigned j;
+
+ for (i = 0; i != data->map_qty; ++i)
+ index[i] = i;
+
+ ksort(index, data->map_qty, sizeof(index[0]), clustering_sort_cb, data);
+ for (i = 0, j = 1; j != data->map_qty; ++j) {
+ unsigned const ii = index[i];
+ unsigned const ij = index[j];
+ TMappingsData_map *const a = &data->map[ij];
+ TMappingsData_map const *const b = &data->map[ii];
+
+ if (check_in_cluster(a, b)) {
+ unsigned const a_mate = a->mate;
+ unsigned const b_mate = b->mate;
+
+ if ( a_mate == ij /** remove singletons **/
+ || a_mate == b_mate) /** or cluster originator has the same mate **/
+ {
+ a->saved = true;
+ DEBUG_MSG(10, ("mapping %u was dropped as a part of cluster at mapping %u\n", ij, ii));
+ }
+ }
+ else
+ i = j;
+ }
+}
+
+static
+INSDC_coord_zero template_length(unsigned const self_left,
+ unsigned const mate_left,
+ unsigned const self_len,
+ unsigned const mate_len,
+ unsigned const read_id)
+{
+ /* adapted from libs/axf/template_len.c */
+ unsigned const self_right = self_left + self_len;
+ unsigned const mate_right = mate_left + mate_len;
+ unsigned const leftmost = (self_left < mate_left ) ? self_left : mate_left;
+ unsigned const rightmost = (self_right > mate_right) ? self_right : mate_right;
+ unsigned const tlen = rightmost - leftmost;
+
+ /* The standard says, "The leftmost segment has a plus sign and the rightmost has a minus sign." */
+ if ( (self_left <= mate_left && self_right >= mate_right) /* mate fully contained within self or */
+ || (mate_left <= self_left && mate_right >= self_right)) /* self fully contained within mate; */
+ {
+ if (self_left < mate_left || (read_id == 1 && self_left == mate_left))
+ return (INSDC_coord_zero)tlen;
+ else
+ return -(INSDC_coord_zero)tlen;
+ }
+ else if ( (self_right == mate_right && mate_left == leftmost) /* both are rightmost, but mate is leftmost */
+ || self_right == rightmost)
+ {
+ return -(INSDC_coord_zero)tlen;
+ }
+ else
+ return (INSDC_coord_zero)tlen;
+}
+
+static
+rc_t CGWriterAlgn_Write_int(CGWriterAlgn *const self, TReadsData *const read)
+{
+ TMappingsData *const data = &self->data;
+ unsigned const N = data->map_qty;
+ rc_t rc = 0;
+
+ if (N != 0) {
+ unsigned left_prime = N;
+ unsigned right_prime = N;
+ unsigned i;
+ unsigned countLeft = 0;
+ unsigned countRight = 0;
+
+ for (i = 0; i != N; ++i) {
+ char const *const refname = data->map[i].chr;
+ unsigned j;
+ INSDC_coord_len reflen = 35;
+ ReferenceSeq const *rseq;
+
+ memset(&self->match[i], 0, sizeof(self->match[i]));
+
+ rc = ReferenceMgr_GetSeq(self->rmgr, &rseq, refname);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed accessing Reference '$(ref)'", "ref=%s", refname));
+ break;
+ }
+ rc = ReferenceSeq_Get1stRow(rseq, &self->match[i].ref_id); /* if the above worked, this is infallible */
+ assert(rc == 0);
+ ReferenceSeq_Release(rseq);
+
+ for (j = 0; j != CG_READS_NGAPS; ++j)
+ reflen += data->map[i].gap[j];
+
+ self->match[i].seq_spot_id = read->rowid;
+ self->match[i].mapq = data->map[i].weight - 33;
+ self->match[i].ref_orientation = (data->map[i].flags & cg_eRevDnbStrand) ? true : false;
+ self->match[i].ref_len = reflen;
+
+ if (data->map[i].flags & cg_eRightHalfDnbMap) {
+ self->match[i].seq_read_id = 2;
+ ++countRight;
+ }
+ else {
+ self->match[i].seq_read_id = 1;
+ ++countLeft;
+ }
+ }
+
+ if (countLeft > 0 && countRight > 0) {
+ left_prime = FindBestPair(data);
+ if (left_prime < N) {
+ right_prime = data->map[left_prime].mate;
+ }
+ else { /* force the pairing */
+ left_prime = FindBestLeft(data);
+ right_prime = FindBestRight(data);
+ data->map[left_prime].mate = right_prime;
+ data->map[right_prime].mate = left_prime;
+ }
+ for (i = 0; i != N; ++i) {
+ unsigned const mate = data->map[i].mate;
+
+ if (mate < N && mate != i) {
+ INSDC_coord_zero const tlen = (self->match[i].ref_id == self->match[mate].ref_id)
+ ? template_length(data->map[i].offset,
+ data->map[mate].offset,
+ self->match[i].ref_len,
+ self->match[mate].ref_len,
+ self->match[i].seq_read_id)
+ : 0;
+
+ self->match[i].mate_ref_id = self->match[mate].ref_id;
+ self->match[i].mate_ref_orientation = self->match[mate].ref_orientation;
+ self->match[i].mate_ref_pos = data->map[mate].offset;
+ self->match[i].template_len = tlen;
+ }
+ }
+ }
+ else if (countLeft > 0) {
+ left_prime = FindBestLeft(data);
+ }
+ else {
+ assert(countRight > 0);
+ right_prime = FindBestRight(data);
+ }
+
+ read->align_count[0] = countLeft < 254 ? countLeft : 255;
+ read->align_count[1] = countRight < 254 ? countRight : 255;
+ if (rc == 0 && left_prime < N) {
+ rc = CGWriterAlgn_Save(self, read, self->primary, left_prime,
+ &read->prim_algn_id[0]);
+ read->prim_is_reverse[0] = self->match[left_prime].ref_orientation;
+ data->map[left_prime].saved = 1;
+ }
+ if (rc == 0 && right_prime < N) {
+ rc = CGWriterAlgn_Save(self, read, self->primary, right_prime,
+ &read->prim_algn_id[1]);
+ read->prim_is_reverse[1] = self->match[right_prime].ref_orientation;
+ data->map[right_prime].saved = 1;
+ }
+ if (global_cluster_size > 0 && data->map_qty > 1 + (left_prime < N ? 1 : 0) + (right_prime < N ? 1 : 0)) {
+ cluster_mates(data);
+ }
+ for (i = 0; i != N && rc == 0; ++i) {
+ if (data->map[i].saved || self->match[i].mapq < self->min_mapq)
+ continue;
+ rc = CGWriterAlgn_Save(self, read, self->secondary, i, NULL);
+ }
+ }
+ return rc;
+}
+
+rc_t CGWriterAlgn_Write(const CGWriterAlgn* cself, TReadsData* read)
+{
+ assert(cself != NULL);
+ assert(read != NULL);
+ assert(read->seq.sequence.buffer != NULL && read->seq.sequence.elements == CG_READS_SPOT_LEN);
+
+ memset(read->prim_algn_id, 0, sizeof(read->prim_algn_id));
+ memset(read->align_count, 0, sizeof(read->align_count));
+ memset(read->prim_is_reverse, 0, sizeof(read->prim_is_reverse));
+
+ return CGWriterAlgn_Write_int((CGWriterAlgn *)cself, read);
+}
+
+#else
+
+rc_t CGWriterAlgn_Write(const CGWriterAlgn* cself, TReadsData* read)
+{
+ if( cself->data.map_qty != 0 ) {
+ /* primary is-found indicator: weights are ASCII-33 so they can't be 0 if found */
+ uint8_t left_weight = 0, right_weight = 0, pair_weight = 0;
+ uint32_t i, left_prim = 0, right_prim = 0, paired = 0;
+
+ CGWriterAlgn* self = (CGWriterAlgn*)cself;
+ TMappingsData* data = &self->data;
+
+ /* find best left, right and pair */
+ for(i = 0; i < data->map_qty; i++) {
+ int k = (data->map[i].flags & cg_eRightHalfDnbMap) ? 1 : 0;
+ if( read->align_count[k] < 254 ) {
+ read->align_count[k]++;
+ }
+ if( k == 0 ) {
+ if( left_weight < data->map[i].weight ) {
+ left_prim = i;
+ left_weight = data->map[i].weight;
+ }
+ } else {
+ if( right_weight < data->map[i].weight ) {
+ right_prim = i;
+ right_weight = data->map[i].weight;
+ }
+ }
+ if( i != data->map[i].mate && pair_weight < data->map[i].weight ) {
+ if( data->map[i].mate < data->map_qty ) {
+ /* note pair's left mate id */
+ paired = k == 0 ? i : data->map[i].mate;
+ pair_weight = data->map[i].weight;
+ } else {
+ /* fail safe in case mate id is out of map boundaries */
+ data->map[i].mate = i;
+ }
+ }
+ }
+ /* choose primary pair */
+ if( left_weight > right_weight && data->map[left_prim].mate != left_prim ) {
+ /* left is better and has a mate -> choose left pair */
+ right_prim = data->map[left_prim].mate;
+ right_weight = data->map[right_prim].weight;
+ } else if( right_weight > left_weight && data->map[right_prim].mate != right_prim ) {
+ /* right is better and has a mate -> choose right pair */
+ left_prim = data->map[right_prim].mate;
+ left_weight = data->map[left_prim].weight;
+ } else if( pair_weight > 0 ) {
+ /* use paired as primary */
+ left_prim = paired;
+ left_weight = data->map[left_prim].weight;
+ right_prim = data->map[left_prim].mate;
+ right_weight = data->map[right_prim].weight;
+ } else if( left_weight > 0 && right_weight > 0 ) {
+ /* force best left and right to be mates */
+ data->map[left_prim].mate = right_prim;
+ data->map[right_prim].mate = left_prim;
+ self->forced_pairs_cnt++;
+ DEBUG_MSG(10, ("forced pair: %u %u\n", left_prim, right_prim));
+ }
+#if _DEBUGGING
+ DEBUG_MSG(10, ("alignment_count [%hu,%hu]", read->align_count[0], read->align_count[1]));
+ DEBUG_MSG(10, (" left primary: "));
+ if( left_weight > 0 ) {
+ DEBUG_MSG(10, ("weight %hu [%c], id %u", left_weight, left_weight, left_prim));
+ } else {
+ DEBUG_MSG(10, ("none"));
+ }
+ DEBUG_MSG(10, ("; right primary: "));
+ if( right_weight > 0 ) {
+ DEBUG_MSG(10, ("weight %hu [%c], id %u", right_weight, right_weight, right_prim));
+ } else {
+ DEBUG_MSG(10, ("none"));
+ }
+ DEBUG_MSG(10, ("\n"));
+#endif
+ assert((left_weight == 0 && read->align_count[0] == 0) || (left_weight > 0 && read->align_count[0] > 0));
+ assert((right_weight == 0 && read->align_count[1] == 0) || (right_weight > 0 && read->align_count[1] > 0));
+
+ /* write left primary */
+ if( rc == 0 && left_weight > 0 ) {
+ rc = CGWriterAlgn_Save(self, read, self->primary, left_prim, &read->prim_algn_id[0]);
+ read->prim_is_reverse[0] = cself->match[left_prim].ref_orientation;
+ }
+ /* write right primary */
+ if( rc == 0 && right_weight > 0 ) {
+ rc = CGWriterAlgn_Save(self, read, self->primary, right_prim, &read->prim_algn_id[1]);
+ read->prim_is_reverse[1] = cself->match[right_prim].ref_orientation;
+ }
+ DEBUG_MSG(10, ("prim_algn_rowid [%li,%li], ", read->prim_algn_id[0], read->prim_algn_id[1]));
+ DEBUG_MSG(10, ("prim_is_reverse [%hu,%hu]\n", read->prim_is_reverse[0], read->prim_is_reverse[1]));
+ if( rc == 0 ) {
+ /* others go to secondary */
+ int64_t row;
+
+ rc = TableWriterAlgn_GetNextRowId(cself->secondary, &row);
+ if( global_cluster_size > 0 && data->map_qty > 1) {
+ cluster_mates(data);
+ }
+ if( cself->single_mate ) {
+ /* we need to re-mate in case original mate's weight is lower */
+ for(i = 0; rc == 0 && i < data->map_qty; i++ ) {
+ if( !data->map[i].saved && data->map[i].weight >= cself->min_mapq ) {
+ uint32_t mate = data->map[i].mate;
+ if( mate != i && data->map[mate].mate != i ) {
+ self->dropped_mates_cnt++;
+ if( data->map[data->map[mate].mate].weight < data->map[i].weight ) {
+ /* do not save my mate's mate */
+ DEBUG_MSG(10, ("mate %u dropped as pair of %u\n", data->map[mate].mate, mate));
+ data->map[data->map[mate].mate].saved = true;
+ /* repoint mate to me */
+ data->map[mate].mate = i;
+ } else {
+ /* do not save me */
+ DEBUG_MSG(10, ("mate %u dropped as pair of %u\n", i, mate));
+ data->map[i].saved = true;
+ }
+ }
+ }
+ }
+ }
+ for(i = 0; rc == 0 && i < data->map_qty; i++ ) {
+ if( !data->map[i].saved && data->map[i].weight >= cself->min_mapq ) {
+ uint32_t mate = data->map[i].mate;
+ /* no mate or mate is under-weigth */
+ if( mate == i || data->map[mate].weight < cself->min_mapq ||
+ /* or mate was saved in primary */
+ (left_weight > 0 && mate == left_prim) || (right_weight > 0 && mate == right_prim) ) {
+ self->match[i].mate_align_id = 0;
+ rc = CGWriterAlgn_Save(self, read, self->secondary, i, NULL);
+ row++;
+ } else {
+ self->match[mate].mate_align_id = row++;
+ self->match[i].mate_align_id = row++;
+ if( (rc = CGWriterAlgn_Save(self, read, self->secondary, i, NULL)) == 0 ) {
+ rc = CGWriterAlgn_Save(self, read, self->secondary, mate, NULL);
+ }
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+#endif
diff --git a/tools/cg-load/writer-algn.h b/tools/cg-load/writer-algn.h
new file mode 100644
index 0000000..6ccb019
--- /dev/null
+++ b/tools/cg-load/writer-algn.h
@@ -0,0 +1,62 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_algn_h_
+#define _tools_cg_load_writer_algn_h_
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/manager.h>
+#include <insdc/insdc.h>
+#include <align/writer-alignment.h>
+#include <align/writer-reference.h>
+
+#include "writer-seq.h"
+
+typedef struct TMappingsData_map_struct {
+ bool saved;
+ uint16_t flags;
+ char chr[CG_CHROMOSOME_NAME];
+ INSDC_coord_zero offset;
+ int16_t gap[CG_READS_NGAPS];
+ uint8_t weight;
+ uint32_t mate;
+} TMappingsData_map;
+
+typedef struct TMappingsData_struct {
+ uint16_t map_qty;
+ TMappingsData_map map[CG_MAPPINGS_MAX];
+} TMappingsData;
+
+typedef struct CGWriterAlgn CGWriterAlgn;
+
+rc_t CGWriterAlgn_Make(const CGWriterAlgn** cself, TMappingsData** data, VDatabase* db, const ReferenceMgr* rmgr,
+ uint32_t min_mapq, bool single_mate, uint32_t cluster_size);
+
+rc_t CGWriterAlgn_Whack(const CGWriterAlgn* cself, bool commit, uint64_t* rows_1st, uint64_t* rows_2nd);
+
+rc_t CGWriterAlgn_Write(const CGWriterAlgn* cself, TReadsData* read);
+
+#endif /* _tools_cg_load_writer_algn_h_ */
diff --git a/tools/cg-load/writer-evidence-dnbs.c b/tools/cg-load/writer-evidence-dnbs.c
new file mode 100644
index 0000000..18be548
--- /dev/null
+++ b/tools/cg-load/writer-evidence-dnbs.c
@@ -0,0 +1,227 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <kfs/file.h>
+#include <insdc/insdc.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <align/writer-alignment.h>
+#include <align/dna-reverse-cmpl.h>
+
+#include "debug.h"
+#include "defs.h"
+#include "writer-evidence-intervals.h"
+#include "writer-evidence-dnbs.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+typedef struct CGWriterEvdDnb_match_struct {
+
+ int64_t seq_spot_id;
+ INSDC_coord_one seq_read_id;
+
+ /* filled out by ReferenceMgr_Compress */
+ INSDC_coord_zero read_start;
+ INSDC_coord_len read_len;
+ bool has_ref_offset[CG_EVDNC_ALLELE_LEN];
+ int32_t ref_offset[CG_EVDNC_ALLELE_LEN];
+ int64_t ref_id;
+ INSDC_coord_zero ref_start;
+ bool has_mismatch[CG_EVDNC_ALLELE_LEN];
+ char mismatch[CG_EVDNC_ALLELE_LEN];
+
+ bool ref_orientation;
+ uint32_t ref_ploidy;
+ uint32_t mapq;
+
+} CGWriterEvdDnb_match;
+
+struct CGWriterEvdDnbs {
+ const ReferenceMgr* rmgr;
+ const TableWriterAlgn* writer;
+
+ TableWriterAlgnData algn;
+ CGWriterEvdDnb_match match;
+
+ TEvidenceDnbsData data;
+
+ uint64_t bad_allele_index;
+};
+
+rc_t CGWriterEvdDnbs_Make(const CGWriterEvdDnbs** cself, TEvidenceDnbsData** data,
+ VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options)
+{
+ rc_t rc = 0;
+ CGWriterEvdDnbs* self;
+
+ if( cself == NULL || db == NULL ) {
+ return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+ }
+ self = calloc(1, sizeof(*self));
+ if( self == NULL ) {
+ rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ if( (rc = TableWriterAlgn_Make(&self->writer, db, ewalgn_tabletype_EvidenceAlignment, ewalgn_co_SEQ_SPOT_ID)) == 0 ) {
+ self->algn.seq_spot_id.buffer = &self->match.seq_spot_id;
+ self->algn.seq_spot_id.elements = 1;
+ self->algn.seq_read_id.buffer = &self->match.seq_read_id;
+ self->algn.seq_read_id.elements = 1;
+
+ self->algn.read_start.buffer = &self->match.read_start;
+ self->algn.read_len.buffer = &self->match.read_len;
+ self->algn.has_ref_offset.buffer = self->match.has_ref_offset;
+ self->algn.ref_offset.buffer = self->match.ref_offset;
+ self->algn.ref_id.buffer = &self->match.ref_id;
+ self->algn.ref_id.elements = 1;
+ self->algn.ref_start.buffer = &self->match.ref_start;
+ self->algn.ref_start.elements = 1;
+ self->algn.has_mismatch.buffer = self->match.has_mismatch;
+ self->algn.mismatch.buffer = self->match.mismatch;
+ self->algn.ref_orientation.buffer = &self->match.ref_orientation;
+ self->algn.ref_orientation.elements = 1;
+ self->algn.ref_ploidy.buffer = &self->match.ref_ploidy;
+ self->algn.ref_ploidy.elements = 1;
+ self->algn.mapq.buffer = &self->match.mapq;
+ self->algn.mapq.elements = 1;
+ self->rmgr = rmgr;
+
+ /* set to 1st row for evidence_interval to collect ids */
+ self->data.last_rowid = 1;
+ *data = &self->data;
+ }
+ }
+ if( rc == 0 ) {
+ *cself = self;
+ } else {
+ CGWriterEvdDnbs_Whack(self, false, NULL);
+ }
+ return rc;
+}
+
+rc_t CGWriterEvdDnbs_Whack(const CGWriterEvdDnbs* cself, bool commit, uint64_t* rows)
+{
+ rc_t rc = 0;
+ if( cself != NULL ) {
+ CGWriterEvdDnbs* self = (CGWriterEvdDnbs*)cself;
+ if( self->bad_allele_index > 0 ) {
+ PLOGMSG(klogInfo, (klogInfo, "$(bad_allele_index) bad allele_indexes in evidence dnbs",
+ "bad_allele_index=%lu", self->bad_allele_index));
+ }
+ rc = TableWriterAlgn_Whack(cself->writer, commit, rows);
+ free(self->data.dnbs);
+ free(self);
+ }
+ return rc;
+}
+
+rc_t CGWriterEvdDnbs_SetSEQ(const CGWriterEvdDnbs* cself, uint16_t dnb, const int64_t seq_spot_id_1st)
+{
+ rc_t rc = 0;
+ CGWriterEvdDnbs* self =(CGWriterEvdDnbs*)cself;
+
+ assert(cself != NULL);
+
+ self->data.dnbs[dnb].seq_spot_id = seq_spot_id_1st + self->data.dnbs[dnb].dnb_offset_in_lane_file;
+
+ return rc;
+}
+
+rc_t CGWriterEvdDnbs_Write(const CGWriterEvdDnbs* cself, const TEvidenceIntervalsData* ref, int64_t ref_rowid)
+{
+ rc_t rc = 0;
+ uint16_t i;
+ int64_t last_rowid;
+ CGWriterEvdDnbs* self =(CGWriterEvdDnbs*)cself;
+
+ assert(cself != NULL);
+ assert(ref != NULL);
+
+ for(i = 0; rc == 0 && i < cself->data.qty; i++) {
+
+ /* align against allele */
+ uint16_t ai = cself->data.dnbs[i].allele_index;
+ self->match.ref_ploidy = ref->allele_indexes_to_read_number[ai];
+ if( self->match.ref_ploidy == 0 ) {
+ DEBUG_MSG(3, ("bad allele_index for interval %s %s[%hu]\n", cself->data.dnbs[i].chr, cself->data.interval_id, i + 1));
+ self->bad_allele_index++;
+ continue;
+ } else {
+ const char* read;
+ char reversed[CG_READS_SPOT_LEN];
+ uint32_t read_len = CG_READS_SPOT_LEN / 2;
+
+ if( cself->data.dnbs[i].side == 'L' ) {
+ self->match.seq_read_id = 1;
+ read = cself->data.dnbs[i].read;
+ } else {
+ self->match.seq_read_id = 2;
+ read = &cself->data.dnbs[i].read[read_len];
+ }
+ if( cself->data.dnbs[i].strand == '-' ) {
+ if( (rc = DNAReverseCompliment(read, reversed, read_len)) != 0 ) {
+ break;
+ }
+ read = reversed;
+ self->match.ref_orientation = true;
+ } else {
+ self->match.ref_orientation = false;
+ }
+ self->algn.ploidy = 0;
+ if( (rc = ReferenceMgr_Compress(cself->rmgr, 0, cself->data.dnbs[i].chr,
+ cself->data.dnbs[i].offset_in_reference, read, read_len,
+ cself->data.dnbs[i].allele_alignment, cself->data.dnbs[i].allele_alignment_length,
+ ref->offset,
+ ref->allele[ai], ref->allele_length[ai],
+ cself->data.dnbs[i].offset_in_allele,
+ ref->allele_alignment[ai], ref->allele_alignment_length[ai],
+ &self->algn)) == 0 ) {
+ self->match.mapq = cself->data.dnbs[i].mapping_quality - 33;
+ /* pointer to SEQUENCE table spot and read */
+ self->match.seq_spot_id = cself->data.dnbs[i].seq_spot_id;
+ self->match.ref_id = ref_rowid;
+ self->match.ref_start = cself->data.dnbs[i].offset_in_allele;
+ DEBUG_MSG(3, ("REF_ID: %li, REF_START: %i, REF_PLOIDY: %hu\n",
+ self->match.ref_id, self->match.ref_start, self->match.ref_ploidy));
+ rc = TableWriterAlgn_Write(cself->writer, &self->algn, &last_rowid);
+ if( rc == 0 && self->data.last_rowid++ != last_rowid ) {
+ rc = RC(rcExe, rcTable, rcWriting, rcData, rcInconsistent);
+ }
+ } else if( GetRCObject(rc) == rcOffset && GetRCState(rc) == rcOutofrange ) {
+ PLOGERR(klogErr, (klogErr, rc, "evidence dnb for $(chr) interval $(interval) OffsetInReference $(offset) skipped",
+ "chr=%s,interval=%s,offset=%i", ref->chr, ref->interval_id, cself->data.dnbs[i].offset_in_reference));
+ rc = 0;
+ }
+ }
+ }
+ return rc;
+}
diff --git a/tools/cg-load/writer-evidence-dnbs.h b/tools/cg-load/writer-evidence-dnbs.h
new file mode 100644
index 0000000..6c9014b
--- /dev/null
+++ b/tools/cg-load/writer-evidence-dnbs.h
@@ -0,0 +1,88 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_evidence_dnbs_h_
+#define _tools_cg_load_writer_evidence_dnbs_h_
+
+#include <insdc/insdc.h>
+#include <vdb/database.h>
+#include <sra/sradb.h>
+
+#include "defs.h"
+#include "factory-cmn.h"
+
+typedef struct TEvidenceDnbsData_dnb_struct {
+
+ /* translated:
+ slide+lane+file_num_in_lane+dnb_offset_in_lane_file --> SEQ_SPOT_ID */
+ int64_t seq_spot_id;
+
+ char chr[CG_CHROMOSOME_NAME];
+ char slide[CG_SLIDE];
+ char lane[CG_LANE];
+ CGFIELD15_BATCH_FILE_NUMBER file_num_in_lane;
+ uint64_t dnb_offset_in_lane_file; /* zero-based */
+ uint16_t allele_index;
+ char side;
+ char strand;
+ INSDC_coord_zero offset_in_allele;
+ char allele_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+ /* strlen for allele_alignment[] buffer */
+ size_t allele_alignment_length;
+ uint8_t mapping_quality;
+ INSDC_coord_zero offset_in_reference;
+ /* moved into reading function since it is not used after reading anyway
+ char reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+ INSDC_coord_zero mate_offset_in_reference;
+ char mate_reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+ uint16_t score_allele[3];*/
+ char read[CG_EVDNC_SPOT_LEN];
+ size_t read_len;
+ /*char qual[CG_EVDNC_SPOT_LEN];
+ */
+} TEvidenceDnbsData_dnb;
+
+typedef struct TEvidenceDnbsData {
+ char interval_id[CG_EVDNC_INTERVALID_LEN];
+ uint16_t qty;
+ uint16_t max_qty;
+ TEvidenceDnbsData_dnb* dnbs;
+ int64_t last_rowid; /* last used rowid in this table */
+} TEvidenceDnbsData;
+
+typedef struct CGWriterEvdDnbs CGWriterEvdDnbs;
+
+struct TEvidenceIntervalsData;
+
+rc_t CGWriterEvdDnbs_Make(const CGWriterEvdDnbs** cself, TEvidenceDnbsData** data,
+ VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options);
+
+rc_t CGWriterEvdDnbs_Whack(const CGWriterEvdDnbs* cself, bool commit, uint64_t* rows);
+
+rc_t CGWriterEvdDnbs_SetSEQ(const CGWriterEvdDnbs* cself, uint16_t dnb, const int64_t seq_spot_id_1st);
+
+rc_t CGWriterEvdDnbs_Write(const CGWriterEvdDnbs* cself, const struct TEvidenceIntervalsData* ref, int64_t ref_rowid);
+
+#endif /* _tools_cg_load_writer_evidence_dnbs_h_ */
diff --git a/tools/cg-load/writer-evidence-intervals.c b/tools/cg-load/writer-evidence-intervals.c
new file mode 100644
index 0000000..070cfc7
--- /dev/null
+++ b/tools/cg-load/writer-evidence-intervals.c
@@ -0,0 +1,255 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <kfs/file.h>
+#include <vdb/table.h>
+
+#include "defs.h"
+#include "writer-evidence-intervals.h"
+#include "writer-evidence-dnbs.h"
+#include "debug.h"
+#include "file.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+typedef struct CGWriterEvdInt_match_struct {
+
+ /* filled out by ReferenceMgr_Compress */
+ INSDC_coord_zero read_start[CG_EVDNC_PLOIDY];
+ INSDC_coord_len read_len[CG_EVDNC_PLOIDY];
+ bool has_ref_offset[CG_EVDNC_ALLELE_LEN];
+ int32_t ref_offset[CG_EVDNC_ALLELE_LEN];
+ bool has_mismatch[CG_EVDNC_ALLELE_LEN];
+ char mismatch[CG_EVDNC_ALLELE_LEN];
+ int64_t ref_id;
+ INSDC_coord_zero ref_start;
+ bool ref_orientation;
+ uint32_t mapq;
+
+} CGWriterEvdInt_match;
+
+struct CGWriterEvdInt {
+ const ReferenceMgr* rmgr;
+ const TableWriterAlgn* writer;
+ TableWriterAlgnData algn;
+ TEvidenceIntervalsData data;
+ CGWriterEvdInt_match match;
+ int64_t* dnbs_ids;
+ uint64_t dnbs_ids_max;
+};
+
+rc_t CGWriterEvdInt_Make(const CGWriterEvdInt** cself, TEvidenceIntervalsData** data,
+ VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options)
+{
+ rc_t rc = 0;
+ CGWriterEvdInt* self;
+
+ if( cself == NULL || db == NULL ) {
+ return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+ }
+ self = calloc(1, sizeof(*self));
+ if( self == NULL ) {
+ rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ if( (rc = TableWriterAlgn_Make(&self->writer, db, ewalgn_tabletype_EvidenceInterval, 0)) == 0 ) {
+ self->algn.read_start.buffer = &self->match.read_start;
+ self->algn.read_len.buffer = &self->match.read_len;
+ self->algn.has_ref_offset.buffer = self->match.has_ref_offset;
+ self->algn.ref_offset.buffer = self->match.ref_offset;
+ self->algn.has_mismatch.buffer = self->match.has_mismatch;
+ self->algn.mismatch.buffer = self->match.mismatch;
+ self->algn.ref_id.buffer = &self->match.ref_id;
+ self->algn.ref_id.elements = 1;
+ self->algn.ref_start.buffer = &self->match.ref_start;
+ self->algn.ref_start.elements = 1;
+ self->match.ref_orientation = false;
+ self->algn.ref_orientation.buffer = &self->match.ref_orientation;
+ self->algn.ref_orientation.elements = 1;
+ self->algn.mapq.buffer = &self->match.mapq;
+ self->algn.mapq.elements = 1;
+ self->algn.alingment_ids.buffer = self->dnbs_ids;
+ self->rmgr = rmgr;
+ *data = &self->data;
+ }
+ }
+ if( rc == 0 ) {
+ *cself = self;
+ } else {
+ CGWriterEvdInt_Whack(self, false, NULL);
+ }
+ return rc;
+}
+
+rc_t CGWriterEvdInt_Whack(const CGWriterEvdInt* cself, bool commit, uint64_t* rows)
+{
+ rc_t rc = 0;
+ if( cself != NULL ) {
+ CGWriterEvdInt* self = (CGWriterEvdInt*)cself;
+ rc = TableWriterAlgn_Whack(cself->writer, commit, rows);
+ free(self->dnbs_ids);
+ free(self);
+ }
+ return rc;
+}
+
+rc_t CGWriterEvdInt_Write(const CGWriterEvdInt* cself, const TEvidenceDnbsData* dnbs, int64_t* rowid)
+{
+ rc_t rc = 0;
+ CGWriterEvdInt* self = (CGWriterEvdInt*)cself;
+
+ assert(cself != NULL);
+
+ memset(self->data.allele_indexes_to_read_number, 0, sizeof(self->data.allele_indexes_to_read_number));
+ if( self->data.ploidy == 1 ) {
+
+ uint32_t i = self->data.allele_indexes[0] - '0';
+
+ if( self->data.allele_indexes[1] != '\0' || i > 2 ) {
+ rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcOutofrange);
+ } else if( self->data.allele_alignment_length[i] == 0 ) {
+ rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcEmpty);
+ } else {
+ if( i == 0 ) {
+ rc = string_printf(self->data.allele_alignment[0], sizeof(self->data.allele_alignment[0]),
+ &self->data.allele_alignment_length[0], "%uM", self->data.length);
+ }
+ if( rc == 0 ) {
+ self->algn.ploidy = 0;
+ rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i], self->data.allele_length[i],
+ self->data.allele_alignment[i], self->data.allele_alignment_length[i],
+ 0, NULL, 0, 0, NULL, 0, &self->algn);
+ self->data.allele_indexes_to_read_number[i] = 1; /* 1st read */
+ }
+ }
+
+ } else if( self->data.ploidy == 2 ) { /** possibilities: 0;1 1;2 and 1;1 - single ploidy but recorded as dual **/
+ uint32_t i1 = self->data.allele_indexes[0] - '0';
+ uint32_t i2 = self->data.allele_indexes[2] - '0';
+
+ if( self->data.allele_indexes[1] != ';' || self->data.allele_indexes[3] != '\0' || i1 > 2 || i2 > 2) {
+ rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcOutofrange);
+ } else {
+ if( i1 == 0 || i2 == 0 ) {
+ rc = string_printf(self->data.allele_alignment[0], sizeof(self->data.allele_alignment[0]),
+ &self->data.allele_alignment_length[0], "%uM", self->data.length);
+ }
+ if( self->data.allele_alignment_length[i1] == 0 || self->data.allele_alignment_length[i2] == 0 ) {
+ rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcEmpty);
+ }
+ if( rc == 0 ) {
+ self->algn.ploidy = 0;
+ rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i1], self->data.allele_length[i1],
+ self->data.allele_alignment[i1], self->data.allele_alignment_length[i1],
+ 0, NULL, 0, 0, NULL, 0, &self->algn);
+ self->data.allele_indexes_to_read_number[i1] = 1; /* 1st read */
+ }
+ if( rc == 0 ) {
+ if ( i2 != i1 ) {
+ rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i2], self->data.allele_length[i2],
+ self->data.allele_alignment[i2], self->data.allele_alignment_length[i2],
+ 0, NULL, 0, 0, NULL, 0, &self->algn);
+ self->data.allele_indexes_to_read_number[i2] = 2; /* 2nd read */
+ } else {
+ self->data.ploidy = 1;
+ }
+ }
+ }
+
+ } else if( self->data.ploidy == 3 ) { /** possibilities: 0;1;2 1;2;3 **/
+ uint32_t i1 = self->data.allele_indexes[0] - '0';
+ uint32_t i2 = self->data.allele_indexes[2] - '0';
+ uint32_t i3 = self->data.allele_indexes[4] - '0';
+
+
+ if( self->data.allele_indexes[1] != ';' || self->data.allele_indexes[3] != ';' || self->data.allele_indexes[5] != '\0' || i1 > 3 || i2 > 3 || i3 > 3) {
+ rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcOutofrange);
+ } else {
+ if( i1 == 0 || i2 == 0 || i3 == 0) {
+ rc = string_printf(self->data.allele_alignment[0], sizeof(self->data.allele_alignment[0]),
+ &self->data.allele_alignment_length[0], "%uM", self->data.length);
+ }
+ if( self->data.allele_alignment_length[i1] == 0 || self->data.allele_alignment_length[i2] == 0 || self->data.allele_alignment_length[i3]==0) {
+ rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcEmpty);
+ }
+ if( rc == 0 ) {
+ self->algn.ploidy = 0;
+ rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i1], self->data.allele_length[i1],
+ self->data.allele_alignment[i1], self->data.allele_alignment_length[i1],
+ 0, NULL, 0, 0, NULL, 0, &self->algn);
+ self->data.allele_indexes_to_read_number[i1] = 1; /* 1st read */
+ }
+ if( rc == 0 ) {
+ rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i2], self->data.allele_length[i2],
+ self->data.allele_alignment[i2], self->data.allele_alignment_length[i2],
+ 0, NULL, 0, 0, NULL, 0, &self->algn);
+ self->data.allele_indexes_to_read_number[i2] = 2; /* 2nd read */
+ }
+ if( rc == 0 ) {
+ rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i3], self->data.allele_length[i3],
+ self->data.allele_alignment[i3], self->data.allele_alignment_length[i3],
+ 0, NULL, 0, 0, NULL, 0, &self->algn);
+ self->data.allele_indexes_to_read_number[i3] = 3; /* 3rd read */
+ }
+ }
+
+ } else {
+ rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcUnrecognized);
+ }
+ if( rc == 0 ) { /*** a bit careful here - were are predicting what EvidenceDnb writer will do ***/
+ uint32_t i,valid_qty;
+ for(valid_qty = i = 0;i< dnbs->qty;i++){
+ if(self->data.allele_indexes_to_read_number[dnbs->dnbs[i].allele_index] > 0){
+ valid_qty++;
+ }
+ }
+ if( self->dnbs_ids_max < valid_qty ) {
+ void* p = realloc(self->dnbs_ids, sizeof(*(self->dnbs_ids)) * valid_qty);
+ if( p == NULL ) {
+ rc = RC(rcExe, rcFormatter, rcWriting, rcMemory, rcExhausted);
+ } else {
+ self->dnbs_ids = p;
+ self->dnbs_ids_max = valid_qty;
+ self->algn.alingment_ids.buffer = self->dnbs_ids;
+ }
+ }
+ if( rc == 0 ) {
+ self->algn.alingment_ids.elements = valid_qty;
+ for(i=0;i<valid_qty;i++){
+ self->dnbs_ids[i] = dnbs->last_rowid + i;
+ }
+ }
+ }
+ if( rc == 0 ) {
+ self->match.mapq = self->data.score;
+ rc = TableWriterAlgn_Write(self->writer, &self->algn, rowid);
+ }
+ return rc;
+}
diff --git a/tools/cg-load/writer-evidence-intervals.h b/tools/cg-load/writer-evidence-intervals.h
new file mode 100644
index 0000000..7a8f586
--- /dev/null
+++ b/tools/cg-load/writer-evidence-intervals.h
@@ -0,0 +1,68 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_evidence_intervals
+#define _tools_cg_load_writer_evidence_intervals
+
+#include <vdb/database.h>
+#include <vdb/manager.h>
+#include <insdc/insdc.h>
+
+#include "defs.h"
+#include <align/writer-alignment.h>
+#include <align/writer-reference.h>
+
+typedef struct TEvidenceIntervalsData {
+ char interval_id[CG_EVDNC_INTERVALID_LEN];
+ char chr[CG_CHROMOSOME_NAME];
+ INSDC_coord_zero offset;
+ INSDC_coord_len length;
+ uint16_t ploidy;
+ char allele_indexes[16];
+ /* translation from allele_indexes into read id for use in dnbs */
+ uint8_t allele_indexes_to_read_number[CG_EVDNC_ALLELE_NUM];
+ int32_t score;
+ int32_t scoreVAF;
+ int32_t scoreEAF;
+ char allele[CG_EVDNC_ALLELE_NUM][CG_EVDNC_ALLELE_LEN];
+ /* strlen for allele[3][] buffers */
+ size_t allele_length[CG_EVDNC_ALLELE_NUM];
+ char allele_alignment[CG_EVDNC_ALLELE_NUM][CG_EVDNC_ALLELE_CIGAR_LEN];
+ /* strlen for allele_alignment[3][] buffers */
+ size_t allele_alignment_length[CG_EVDNC_ALLELE_NUM];
+} TEvidenceIntervalsData;
+
+typedef struct CGWriterEvdInt CGWriterEvdInt;
+
+struct TEvidenceDnbsData;
+
+rc_t CGWriterEvdInt_Make(const CGWriterEvdInt** cself, TEvidenceIntervalsData** data,
+ VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options);
+
+rc_t CGWriterEvdInt_Whack(const CGWriterEvdInt* cself, bool commit, uint64_t* rows);
+
+rc_t CGWriterEvdInt_Write(const CGWriterEvdInt* cself, const struct TEvidenceDnbsData* dnbs, int64_t* rowid);
+
+#endif /* _tools_cg_load_writer_evidence_intervals */
diff --git a/tools/cg-load/writer-seq.c b/tools/cg-load/writer-seq.c
new file mode 100644
index 0000000..43b34bd
--- /dev/null
+++ b/tools/cg-load/writer-seq.c
@@ -0,0 +1,135 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <insdc/insdc.h>
+
+#include "debug.h"
+#include "defs.h"
+#include "writer-seq.h"
+
+#include <stdlib.h>
+#include <assert.h>
+
+const INSDC_SRA_platform_id DFTL_platform = SRA_PLATFORM_COMPLETE_GENOMICS;
+const char DFTL_label[] = "LeftRight";
+const INSDC_coord_zero DFTL_label_start[CG_READS_NREADS] = {0, 4};
+const INSDC_coord_len DFTL_label_len[CG_READS_NREADS] = {4, 5};
+const INSDC_coord_zero DFTL_read_start[CG_READS_NREADS] = {0, 35};
+const INSDC_coord_len DFTL_read_len[CG_READS_NREADS] = {35, 35};
+const INSDC_SRA_read_filter DFTL_read_filter[CG_READS_NREADS] = {SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS};
+
+struct CGWriterSeq {
+ const TableWriterSeq* base;
+ TReadsData data;
+};
+
+rc_t CGWriterSeq_Make(const CGWriterSeq** cself, TReadsData** data, VDatabase* db, const uint32_t options, const char* quality_quantization)
+{
+ rc_t rc = 0;
+ CGWriterSeq* self;
+
+ if( cself == NULL || db == NULL ) {
+ return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+ }
+ self = calloc(1, sizeof(*self));
+ if( self == NULL ) {
+ rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ TableWriterData p;
+ p.buffer = &DFTL_platform;
+ p.elements = 1;
+ if( (rc = TableWriterSeq_Make(&self->base, db, options | ewseq_co_AlignData | ewseq_co_SpotGroup, quality_quantization)) != 0 ) {
+ LOGERR(klogErr, rc, "sequence table");
+ } else if( (rc = TableWriteSeq_WriteDefault(self->base, ewseq_cn_PLATFORM, &p)) == 0 ) {
+ /* attach data pointer to data */
+ self->data.seq.nreads = CG_READS_NREADS;
+ self->data.seq.alignment_count.buffer = self->data.align_count;
+ self->data.seq.alignment_count.elements = CG_READS_NREADS;
+ self->data.seq.primary_alignment_id.buffer = self->data.prim_algn_id;
+ self->data.seq.primary_alignment_id.elements = CG_READS_NREADS;
+ self->data.seq.sequence.buffer = self->data.read;
+ self->data.seq.quality.buffer = self->data.qual;
+ self->data.seq.label.buffer = DFTL_label;
+ self->data.seq.label.elements = sizeof(DFTL_label) - 1;
+ self->data.seq.label_start.buffer = DFTL_label_start;
+ self->data.seq.label_start.elements = CG_READS_NREADS;
+ self->data.seq.label_len.buffer = DFTL_label_len;
+ self->data.seq.label_len.elements = CG_READS_NREADS;
+ self->data.seq.read_type.buffer = self->data.read_type;
+ self->data.seq.read_type.elements = CG_READS_NREADS;
+ self->data.seq.read_start.buffer = DFTL_read_start;
+ self->data.seq.read_start.elements = CG_READS_NREADS;
+ self->data.seq.read_len.buffer = DFTL_read_len;
+ self->data.seq.read_len.elements = CG_READS_NREADS;
+ self->data.seq.read_filter.buffer = DFTL_read_filter;
+ self->data.seq.read_filter.elements = CG_READS_NREADS;
+
+ /* set to 1st row for aligment to refer */
+ self->data.rowid = 1;
+ *data = &self->data;
+ }
+ }
+ if( rc == 0 ) {
+ *cself = self;
+ } else {
+ CGWriterSeq_Whack(self, false, NULL);
+ }
+ return rc;
+}
+
+rc_t CGWriterSeq_Whack(const CGWriterSeq* cself, bool commit, uint64_t* rows)
+{
+ rc_t rc = 0;
+ if( cself != NULL ) {
+ CGWriterSeq* self = (CGWriterSeq*)cself;
+ rc = TableWriterSeq_Whack(cself->base, commit, rows);
+ free(self);
+ }
+ return rc;
+}
+
+rc_t CGWriterSeq_Write(const CGWriterSeq* cself)
+{
+ uint64_t i;
+ int64_t r;
+ rc_t rc;
+ INSDC_quality_phred* b;
+ CGWriterSeq* self = (CGWriterSeq*)cself;
+
+ assert(cself != NULL);
+
+ b = (INSDC_quality_phred*)(self->data.seq.quality.buffer);
+ for(i = 0; i < cself->data.seq.quality.elements; i++ ) {
+ b[i] -= 33;
+ }
+ for(i = 0; i < CG_READS_NREADS; i++) {
+ self->data.read_type[i] = SRA_READ_TYPE_BIOLOGICAL |
+ (cself->data.prim_is_reverse[i] ? SRA_READ_TYPE_REVERSE : SRA_READ_TYPE_FORWARD);
+ }
+ rc = TableWriterSeq_Write(cself->base, &cself->data.seq, &r);
+ return rc ? rc : (self->data.rowid++ == r ? 0 : RC(rcExe, rcTable, rcWriting, rcData, rcInconsistent));
+}
diff --git a/tools/cg-load/writer-seq.h b/tools/cg-load/writer-seq.h
new file mode 100644
index 0000000..b9a1da7
--- /dev/null
+++ b/tools/cg-load/writer-seq.h
@@ -0,0 +1,58 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_seq_h_
+#define _tools_cg_load_writer_seq_h_
+
+#include <insdc/insdc.h>
+#include <vdb/database.h>
+#include <sra/sradb.h>
+#include <align/writer-sequence.h>
+
+typedef struct TReadsData_struct {
+ uint16_t flags;
+ char read[CG_READS_SPOT_LEN + 1];
+ char qual[CG_READS_SPOT_LEN + 1];
+
+ /* reverse read cache by half-dnb */
+ INSDC_dna_text reverse[CG_READS_SPOT_LEN];
+
+ TableWriterSeqData seq;
+ int64_t rowid;
+ uint8_t align_count[CG_READS_NREADS];
+ int64_t prim_algn_id[CG_READS_NREADS];
+ bool prim_is_reverse[CG_READS_NREADS];
+ SRAReadTypes read_type[CG_READS_NREADS];
+} TReadsData;
+
+typedef struct CGWriterSeq CGWriterSeq;
+
+rc_t CGWriterSeq_Make(const CGWriterSeq** cself, TReadsData** data, VDatabase* db, const uint32_t options, const char* quality_quantization);
+
+rc_t CGWriterSeq_Whack(const CGWriterSeq* cself, bool commit, uint64_t* rows);
+
+rc_t CGWriterSeq_Write(const CGWriterSeq* cself);
+
+#endif /* _tools_cg_load_writer_seq_h_ */
diff --git a/tools/fastq-loader/Makefile b/tools/fastq-loader/Makefile
new file mode 100644
index 0000000..77bcfae
--- /dev/null
+++ b/tools/fastq-loader/Makefile
@@ -0,0 +1,222 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/fastq-loader
+
+INT_LIBS = \
+ libfastqloader
+
+ALL_LIBS = \
+ $(INT_LIBS) \
+ $(EXT_LIBS)
+
+EXT_TOOLS = \
+ latf-load
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+TEST_TOOLS = \
+ wb-test-fastq
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): vers-includes
+ @ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+$(TEST_TOOLS): std
+ @ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+valgrind: $(TEST_TOOLS)
+ @echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ @echo Run $(TEST_BINDIR)/$(TEST_TOOLS)
+ valgrind $(RUN_REMOTELY) $(TEST_BINDIR)/$(TEST_TOOLS)
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS) valgrind
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+ $(addprefix $(LIBDIR)/,$(EXT_LIBS)) \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+INTERM_SRC = \
+ $(SRCDIR)/fastq-lex.c \
+ $(SRCDIR)/fastq-grammar.c \
+ $(SRCDIR)/fastq-tokens.h
+
+clean: stdclean
+ @ rm -f $(addsuffix *,$(addprefix $(TEST_BINDIR)/,$(TEST_TOOLS)))
+
+.PHONY: clean
+
+.PRECIOUS: $(INTERM_SRC)
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+ $(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
+#-------------------------------------------------------------------------------
+# fastq
+#
+$(ILIBDIR)/libfastqloader: $(ILIBDIR)/libfastqloader.$(LIBX)
+
+FASTQ_SRC = \
+ fastq-reader \
+ fastq-grammar \
+ fastq-lex
+
+$(SRCDIR)/fastq-grammar.c $(SRCDIR)/fastq-tokens.h: $(SRCDIR)/fastq-grammar.y
+ $(YACC) -o $(SRCDIR)/fastq-grammar.c --defines=$(SRCDIR)/fastq-tokens.h -v $^
+
+FASTQ_OBJ = \
+ $(addsuffix .$(LOBX),$(FASTQ_SRC))
+
+FASTQ_LIB = \
+ -lload \
+ -lloader \
+ -lkfs \
+ -lklib \
+
+ifneq (win,$(OS))
+ FASTQ_LIB += -lkq
+endif
+
+$(ILIBDIR)/libfastqloader.$(SHLX): $(INTERM_SRC) $(FASTQ_OBJ)
+ $(LD) --dlib -o $@ $^ $(FASTQ_LIB)
+
+$(ILIBDIR)/libfastqloader.$(LIBX): $(INTERM_SRC) $(FASTQ_OBJ)
+ $(LD) --slib -o $@ $^ $(FASTQ_LIB)
+
+libfastqloader_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) libfastqloader $(FASTQ_OBJ)
+
+#------------------------------------------------------------------------------
+# fastq-load.3
+#
+FASTQ_LOAD_SRC = \
+ fastq-loader \
+ loader-imp
+
+FASTQ_LOAD_OBJ = \
+ $(addsuffix .$(OBJX),$(FASTQ_LOAD_SRC))
+
+ifneq (win, $(OS))
+ QLIB = -skq
+endif
+FASTQ_LOADER_LIB = \
+ -skapp \
+ -dwvxf \
+ -dwaxf \
+ -dwsraxf \
+ -sfastqloader \
+ -sload \
+ -sloader \
+ -salign-writer \
+ -swvdb \
+ -swkdb \
+ -svfs \
+ -skurl \
+ -skrypto \
+ -skfg \
+ -skfs \
+ -lksrch \
+ $(QLIB) \
+ -skproc \
+ -sklib \
+ -lz \
+ -lm
+
+
+$(BINDIR)/latf-load: $(FASTQ_LOAD_OBJ)
+ $(LD) --exe --vers $(SRCDIR)/latf-load.vers -o $@ $^ $(FASTQ_LOADER_LIB)
+
+#-------------------------------------------------------------------------------
+# white-box test
+#
+FASTQ_TEST_SRC = \
+ wb-test-fastq
+
+FASTQ_TEST_OBJ = \
+ $(addsuffix .$(OBJX),$(FASTQ_TEST_SRC))
+
+ifneq (win, $(OS))
+ QLIB = -skq
+endif
+
+FASTQ_TEST_LIB = \
+ -sktst \
+ -skapp \
+ -sfastqloader \
+ -sload \
+ -sloader \
+ -salign-writer \
+ -swvdb \
+ -swkdb \
+ -svfs \
+ -skurl \
+ -skrypto \
+ -skfg \
+ -skfs \
+ $(QLIB) \
+ -skproc \
+ -sklib
+
+$(TEST_BINDIR)/wb-test-fastq: $(FASTQ_TEST_OBJ)
+ $(LP) --exe -o $@ $^ $(FASTQ_TEST_LIB)
diff --git a/tools/fastq-loader/fastq-grammar.c b/tools/fastq-loader/fastq-grammar.c
new file mode 100644
index 0000000..b8cc5cd
--- /dev/null
+++ b/tools/fastq-loader/fastq-grammar.c
@@ -0,0 +1,2100 @@
+/* A Bison parser, made by GNU Bison 2.5. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.5"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 1
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names. */
+#define yyparse FASTQ_parse
+#define yylex FASTQ_lex
+#define yyerror FASTQ_error
+#define yylval FASTQ_lval
+#define yychar FASTQ_char
+#define yydebug FASTQ_debug
+#define yynerrs FASTQ_nerrs
+
+
+/* Copy the first part of user declarations. */
+
+
+ #include <ctype.h>
+ #include <stdlib.h>
+ #include <string.h>
+
+ #include "fastq-parse.h"
+
+ #define YYSTYPE FASTQToken
+ #define YYLEX_PARAM pb->scanner
+ #define YYDEBUG 1
+
+ #include "fastq-tokens.h"
+
+ static void AddQuality(FASTQParseBlock* pb, const FASTQToken* token);
+ static void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token);
+ static void GrowTagLine(FASTQParseBlock* pb, const FASTQToken* token);
+ static void StopSpotName(FASTQParseBlock* pb);
+ static void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token);
+ static void SetRead(FASTQParseBlock* pb, const FASTQToken* token);
+
+ #define UNLEX do { if (yychar != YYEMPTY && yychar != YYEOF) FASTQ_unlex(pb, & yylval); } while (0)
+
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 1
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ fqENDOFTEXT = 0,
+ fqNUMBER = 258,
+ fqALPHANUM = 259,
+ fqWS = 260,
+ fqENDLINE = 261,
+ fqBASESEQ = 262,
+ fqCOLORSEQ = 263,
+ fqTOKEN = 264,
+ fqASCQUAL = 265,
+ fqUNRECOGNIZED = 266
+ };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations. */
+
+
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 24
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 89
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 22
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 50
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 86
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 127
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 266
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 18, 2, 2, 2, 2,
+ 2, 2, 2, 21, 2, 16, 17, 19, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 12, 2,
+ 2, 20, 14, 2, 13, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 15, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint8 yyprhs[] =
+{
+ 0, 0, 3, 6, 8, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 46, 50, 52,
+ 54, 57, 59, 63, 68, 72, 75, 78, 80, 82,
+ 83, 87, 88, 93, 94, 98, 99, 104, 106, 108,
+ 110, 113, 114, 118, 120, 122, 125, 128, 131, 134,
+ 137, 140, 141, 145, 146, 150, 151, 152, 156, 157,
+ 161, 162, 166, 167, 172, 173, 174, 175, 176, 177,
+ 178, 192, 194, 196, 197, 199, 202, 205, 208, 211,
+ 214, 218, 223, 225, 228, 231, 235
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 23, 0, -1, 37, 68, -1, 37, -1, 68, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 4, 24, 12, 25, 3, 26, 12, 27, 3,
+ 28, 12, 29, 3, 30, 12, 31, 3, 32, 12,
+ 33, 46, 12, 34, 70, -1, 4, 1, 36, -1,
+ 35, -1, 0, -1, 36, 35, -1, 6, -1, 38,
+ 36, 39, -1, 38, 36, 1, 36, -1, 1, 36,
+ 39, -1, 13, 47, -1, 14, 47, -1, 40, -1,
+ 43, -1, -1, 7, 41, 36, -1, -1, 40, 7,
+ 42, 36, -1, -1, 8, 44, 36, -1, -1, 43,
+ 8, 45, 36, -1, 7, -1, 8, -1, 48, -1,
+ 48, 54, -1, -1, 50, 49, 51, -1, 4, -1,
+ 3, -1, 50, 15, -1, 50, 16, -1, 50, 17,
+ -1, 50, 12, -1, 50, 4, -1, 50, 3, -1,
+ -1, 18, 52, 3, -1, -1, 18, 53, 4, -1,
+ -1, -1, 19, 55, 3, -1, -1, 5, 56, 59,
+ -1, -1, 5, 57, 67, -1, -1, 54, 5, 58,
+ 67, -1, -1, -1, -1, -1, -1, -1, 3, 60,
+ 12, 61, 4, 62, 12, 63, 3, 64, 12, 65,
+ 66, -1, 4, -1, 3, -1, -1, 4, -1, 67,
+ 3, -1, 67, 4, -1, 67, 15, -1, 67, 19,
+ -1, 67, 20, -1, 69, 36, 70, -1, 69, 36,
+ 1, 36, -1, 21, -1, 69, 9, -1, 71, 36,
+ -1, 70, 71, 36, -1, 10, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint8 yyrline[] =
+{
+ 0, 70, 70, 72, 74, 76, 77, 78, 79, 80,
+ 81, 82, 83, 84, 85, 87, 76, 90, 92, 96,
+ 97, 101, 105, 106, 107, 111, 112, 116, 117, 121,
+ 121, 123, 123, 128, 128, 130, 130, 135, 136, 141,
+ 142, 146, 146, 151, 152, 153, 154, 155, 156, 157,
+ 158, 162, 162, 164, 164, 166, 170, 170, 172, 172,
+ 174, 174, 176, 176, 180, 181, 182, 183, 184, 185,
+ 180, 189, 190, 191, 195, 196, 197, 198, 199, 200,
+ 206, 207, 211, 212, 216, 217, 220
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "fqENDOFTEXT", "error", "$undefined", "fqNUMBER", "fqALPHANUM", "fqWS",
+ "fqENDLINE", "fqBASESEQ", "fqCOLORSEQ", "fqTOKEN", "fqASCQUAL",
+ "fqUNRECOGNIZED", "':'", "'@'", "'>'", "'_'", "'-'", "'.'", "'#'", "'/'",
+ "'='", "'+'", "$accept", "sequence", "$@1", "$@2", "$@3", "$@4", "$@5",
+ "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "endfile", "endline",
+ "readLines", "header", "read", "baseRead", "$@12", "$@13", "csRead",
+ "$@14", "$@15", "inlineRead", "tagLine", "nameSpotGroup", "$@16", "name",
+ "spotGroup", "$@17", "$@18", "readNumberOrTail", "$@19", "$@20", "$@21",
+ "$@22", "casava1_8", "$@23", "$@24", "$@25", "$@26", "$@27", "$@28",
+ "indexSequence", "tail", "qualityLines", "qualityHeader", "quality",
+ "qualityLine", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 58, 64, 62, 95, 45, 46, 35, 47,
+ 61, 43
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 22, 23, 23, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 23, 23, 23, 35,
+ 35, 36, 37, 37, 37, 38, 38, 39, 39, 41,
+ 40, 42, 40, 44, 43, 45, 43, 46, 46, 47,
+ 47, 49, 48, 50, 50, 50, 50, 50, 50, 50,
+ 50, 52, 51, 53, 51, 51, 55, 54, 56, 54,
+ 57, 54, 58, 54, 60, 61, 62, 63, 64, 65,
+ 59, 66, 66, 66, 67, 67, 67, 67, 67, 67,
+ 68, 68, 69, 69, 70, 70, 71
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 2, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 24, 3, 1, 1,
+ 2, 1, 3, 4, 3, 2, 2, 1, 1, 0,
+ 3, 0, 4, 0, 3, 0, 4, 1, 1, 1,
+ 2, 0, 3, 1, 1, 2, 2, 2, 2, 2,
+ 2, 0, 3, 0, 3, 0, 0, 3, 0, 3,
+ 0, 3, 0, 4, 0, 0, 0, 0, 0, 0,
+ 13, 1, 1, 0, 1, 2, 2, 2, 2, 2,
+ 3, 4, 1, 2, 2, 3, 1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 0, 19, 0, 0, 21, 0, 0, 82, 0, 18,
+ 0, 3, 0, 4, 0, 0, 0, 0, 44, 43,
+ 25, 39, 41, 26, 1, 20, 2, 0, 83, 0,
+ 29, 33, 24, 27, 28, 17, 6, 58, 56, 40,
+ 50, 49, 48, 45, 46, 47, 55, 0, 22, 0,
+ 86, 80, 0, 0, 0, 31, 35, 0, 0, 0,
+ 0, 62, 51, 42, 23, 81, 0, 84, 30, 34,
+ 0, 0, 7, 64, 59, 74, 61, 57, 0, 0,
+ 0, 85, 32, 36, 0, 0, 75, 76, 77, 78,
+ 79, 63, 52, 54, 8, 65, 0, 0, 9, 66,
+ 0, 0, 10, 67, 0, 0, 11, 68, 0, 0,
+ 12, 69, 0, 73, 13, 72, 71, 70, 0, 14,
+ 0, 37, 38, 0, 15, 0, 16
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ -1, 8, 17, 57, 84, 96, 100, 104, 108, 112,
+ 118, 120, 125, 9, 10, 11, 12, 32, 33, 53,
+ 70, 34, 54, 71, 123, 20, 21, 46, 22, 63,
+ 79, 80, 39, 60, 58, 59, 78, 74, 85, 97,
+ 101, 105, 109, 113, 117, 76, 13, 14, 51, 52
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -52
+static const yytype_int8 yypact[] =
+{
+ 3, -52, 6, 9, -52, 34, 34, -52, 23, -52,
+ 2, 8, 6, -52, 16, 35, 6, 19, -52, -52,
+ -52, 1, 24, -52, -52, -52, -52, 25, -52, 4,
+ -52, -52, -52, 40, 46, -52, -52, 51, -52, 52,
+ -52, -52, -52, -52, -52, -52, 38, 6, -52, 6,
+ -52, 48, 6, 6, 6, -52, -52, 56, 57, 58,
+ 60, -52, 62, -52, -52, -52, 6, -52, -52, -52,
+ 6, 6, -52, -52, -52, -52, 15, -52, 58, 61,
+ 63, -52, -52, -52, 49, 59, -52, -52, -52, -52,
+ -52, 15, -52, -52, -52, -52, 65, 68, -52, -52,
+ 64, 66, -52, -52, 70, 71, -52, -52, 67, 69,
+ -52, -52, 74, 41, -52, -52, -52, -52, 72, -52,
+ 42, -52, -52, 73, -52, 48, 48
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -52, -52, -52, -52, -52, -52, -52, -52, -52, -52,
+ -52, -52, -52, 76, -1, -52, -52, 53, -52, -52,
+ -52, -52, -52, -52, -52, 77, -52, -52, -52, -52,
+ -52, -52, -52, -52, -52, -52, -52, -52, -52, -52,
+ -52, -52, -52, -52, -52, 10, 78, -52, -43, -51
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -61
+static const yytype_int8 yytable[] =
+{
+ 66, 15, 1, 1, 2, 49, 37, 3, 4, 4,
+ 16, 27, 4, 29, 50, 35, 5, 6, 86, 87,
+ 38, -5, 4, 24, 7, 28, 47, 40, 41, 7,
+ 88, 36, 30, 31, 89, 90, 42, 18, 19, 43,
+ 44, 45, 30, 31, 115, 116, 64, 55, 65, 121,
+ 122, 67, 68, 69, 56, -60, 62, 61, 50, 72,
+ 73, 94, 75, 77, 92, 81, -53, 93, 98, 82,
+ 83, 95, 99, 106, 107, 66, 102, 114, 103, 110,
+ 48, 111, 126, 23, 119, 124, 25, 0, 91, 26
+};
+
+#define yypact_value_is_default(yystate) \
+ ((yystate) == (-52))
+
+#define yytable_value_is_error(yytable_value) \
+ YYID (0)
+
+static const yytype_int8 yycheck[] =
+{
+ 51, 2, 0, 0, 1, 1, 5, 4, 6, 6,
+ 1, 12, 6, 14, 10, 16, 13, 14, 3, 4,
+ 19, 12, 6, 0, 21, 9, 1, 3, 4, 21,
+ 15, 12, 7, 8, 19, 20, 12, 3, 4, 15,
+ 16, 17, 7, 8, 3, 4, 47, 7, 49, 7,
+ 8, 52, 53, 54, 8, 4, 18, 5, 10, 3,
+ 3, 12, 4, 3, 3, 66, 4, 4, 3, 70,
+ 71, 12, 4, 3, 3, 126, 12, 3, 12, 12,
+ 27, 12, 125, 6, 12, 12, 10, -1, 78, 11
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 0, 1, 4, 6, 13, 14, 21, 23, 35,
+ 36, 37, 38, 68, 69, 36, 1, 24, 3, 4,
+ 47, 48, 50, 47, 0, 35, 68, 36, 9, 36,
+ 7, 8, 39, 40, 43, 36, 12, 5, 19, 54,
+ 3, 4, 12, 15, 16, 17, 49, 1, 39, 1,
+ 10, 70, 71, 41, 44, 7, 8, 25, 56, 57,
+ 55, 5, 18, 51, 36, 36, 71, 36, 36, 36,
+ 42, 45, 3, 3, 59, 4, 67, 3, 58, 52,
+ 53, 36, 36, 36, 26, 60, 3, 4, 15, 19,
+ 20, 67, 3, 4, 12, 12, 27, 61, 3, 4,
+ 28, 62, 12, 12, 29, 63, 3, 3, 30, 64,
+ 12, 12, 31, 65, 3, 3, 4, 66, 32, 12,
+ 33, 7, 8, 46, 12, 34, 70
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (pb, YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* This macro is provided for backward compatibility. */
+
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, pb)
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value, pb); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FASTQParseBlock* pb)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+ FASTQParseBlock* pb;
+#endif
+{
+ if (!yyvaluep)
+ return;
+ YYUSE (pb);
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FASTQParseBlock* pb)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, pb)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+ FASTQParseBlock* pb;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, FASTQParseBlock* pb)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, pb)
+ YYSTYPE *yyvsp;
+ int yyrule;
+ FASTQParseBlock* pb;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ , pb);
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule, pb); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = 0;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
+ {
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
+ }
+
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, FASTQParseBlock* pb)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, pb)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+ FASTQParseBlock* pb;
+#endif
+{
+ YYUSE (yyvaluep);
+ YYUSE (pb);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (FASTQParseBlock* pb);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (FASTQParseBlock* pb)
+#else
+int
+yyparse (pb)
+ FASTQParseBlock* pb;
+#endif
+#endif
+{
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+
+ /* Number of syntax errors so far. */
+ int yynerrs;
+
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yytoken = 0;
+ yyss = yyssa;
+ yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 2:
+
+ { UNLEX; return 1; }
+ break;
+
+ case 3:
+
+ { UNLEX; return 1; }
+ break;
+
+ case 4:
+
+ { UNLEX; return 1; }
+ break;
+
+ case 5:
+
+ { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 6:
+
+ { GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+ break;
+
+ case 7:
+
+ { GrowTagLine(pb, &(yyvsp[(5) - (5)])); }
+ break;
+
+ case 8:
+
+ { GrowTagLine(pb, &(yyvsp[(7) - (7)]));}
+ break;
+
+ case 9:
+
+ { GrowTagLine(pb, &(yyvsp[(9) - (9)])); }
+ break;
+
+ case 10:
+
+ { GrowTagLine(pb, &(yyvsp[(11) - (11)])); }
+ break;
+
+ case 11:
+
+ { GrowTagLine(pb, &(yyvsp[(13) - (13)])); }
+ break;
+
+ case 12:
+
+ { GrowTagLine(pb, &(yyvsp[(15) - (15)])); }
+ break;
+
+ case 13:
+
+ { GrowTagLine(pb, &(yyvsp[(17) - (17)])); }
+ break;
+
+ case 14:
+
+ { FASTQScan_inline_sequence(pb); }
+ break;
+
+ case 15:
+
+ { FASTQScan_inline_quality(pb); }
+ break;
+
+ case 16:
+
+ { UNLEX; return 1; }
+ break;
+
+ case 17:
+
+ { UNLEX; return 1; }
+ break;
+
+ case 18:
+
+ { return 0; }
+ break;
+
+ case 27:
+
+ { pb->record->seq.is_colorspace = false; }
+ break;
+
+ case 28:
+
+ { pb->record->seq.is_colorspace = true; }
+ break;
+
+ case 29:
+
+ { SetRead(pb, & (yyvsp[(1) - (1)])); }
+ break;
+
+ case 31:
+
+ { SetRead(pb, & (yyvsp[(2) - (2)])); }
+ break;
+
+ case 33:
+
+ { SetRead(pb, & (yyvsp[(1) - (1)])); }
+ break;
+
+ case 35:
+
+ { SetRead(pb, & (yyvsp[(2) - (2)])); }
+ break;
+
+ case 37:
+
+ { SetRead(pb, & (yyvsp[(1) - (1)])); pb->record->seq.is_colorspace = false; }
+ break;
+
+ case 38:
+
+ { SetRead(pb, & (yyvsp[(1) - (1)])); pb->record->seq.is_colorspace = true; }
+ break;
+
+ case 41:
+
+ { StopSpotName(pb); }
+ break;
+
+ case 43:
+
+ { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 44:
+
+ { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 45:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 46:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 47:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 48:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 49:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 50:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 51:
+
+ { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 52:
+
+ { SetSpotGroup(pb, &(yyvsp[(3) - (3)])); GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+ break;
+
+ case 53:
+
+ { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 54:
+
+ { SetSpotGroup(pb, &(yyvsp[(3) - (3)])); GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+ break;
+
+ case 56:
+
+ { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 57:
+
+ { SetReadNumber(pb, &(yyvsp[(3) - (3)])); GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+ break;
+
+ case 58:
+
+ { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 60:
+
+ { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 62:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 64:
+
+ { SetReadNumber(pb, &(yyvsp[(1) - (1)])); GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 65:
+
+ { GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+ break;
+
+ case 66:
+
+ { GrowTagLine(pb, &(yyvsp[(5) - (5)])); if ((yyvsp[(5) - (5)]).tokenLength == 1 && (yyvsp[(5) - (5)]).tokenText[0] == 'Y') pb->record->seq.lowQuality = true; }
+ break;
+
+ case 67:
+
+ { GrowTagLine(pb, &(yyvsp[(7) - (7)])); }
+ break;
+
+ case 68:
+
+ { GrowTagLine(pb, &(yyvsp[(9) - (9)])); }
+ break;
+
+ case 69:
+
+ { GrowTagLine(pb, &(yyvsp[(11) - (11)])); }
+ break;
+
+ case 71:
+
+ { SetSpotGroup(pb, &(yyvsp[(1) - (1)])); GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 72:
+
+ { SetSpotGroup(pb, &(yyvsp[(1) - (1)])); GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 74:
+
+ { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+ break;
+
+ case 75:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 76:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 77:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 78:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 79:
+
+ { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+ break;
+
+ case 86:
+
+ { AddQuality(pb, & (yyvsp[(1) - (1)])); }
+ break;
+
+
+
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (pb, YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (pb, yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval, pb);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp, pb);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (pb, YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval, pb);
+ }
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp, pb);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+
+
+
+static
+void GrowByteBuffer(KDataBuffer* self, const char* buf, uint64_t length)
+{
+ uint64_t oldSize = self->elem_count;
+ KDataBufferResize( self, oldSize + length );
+ memcpy( (char*)self->base + oldSize, buf, length );
+}
+
+void AddQuality(FASTQParseBlock* pb, const FASTQToken* token)
+{
+ if (pb->phredOffset != 0)
+ {
+ uint8_t floor = pb->phredOffset == 33 ? MIN_PHRED_33 : MIN_PHRED_64;
+ uint8_t ceiling = pb->phredOffset == 33 ? MAX_PHRED_33 : MAX_PHRED_64;
+ unsigned int i;
+ for (i=0; i < token->tokenLength; ++i)
+ {
+ char buf[200];
+ if (token->tokenText[i] < floor || token->tokenText[i] > ceiling)
+ {
+ sprintf(buf, "Invalid quality value (%d): for %s, valid range is from %d to %d.",
+ token->tokenText[i],
+ pb->phredOffset == 33 ? "Phred33": "Phred64",
+ floor,
+ ceiling);
+ pb->fatalError = true;
+ yyerror(pb, buf);
+ return;
+ }
+ }
+ }
+ GrowByteBuffer( & pb->quality, token->tokenText, token->tokenLength);
+}
+
+void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token)
+{
+ if (token->tokenLength == 1)
+ {
+ switch (token->tokenText[0])
+ {
+ case '1': pb->record->seq.readnumber = 1; return;
+ case '2': pb->record->seq.readnumber = 2; return;
+ }
+ }
+ pb->record->seq.readnumber = pb->defaultReadNumber;
+}
+
+void GrowTagLine(FASTQParseBlock* pb, const FASTQToken* token)
+{
+ /* TODO: move tagline to FileReader, move this function to fastq-reader.c */
+
+ /* grow the buffer as necessary*/
+ uint64_t oldSize = pb->tagLine.elem_count;
+ KDataBufferResize( & pb->tagLine, oldSize + token->tokenLength);
+ string_copy((char*)pb->tagLine.base + oldSize, pb->tagLine.elem_count - oldSize, token->tokenText, token->tokenLength);
+
+ if (!pb->spotNameDone)
+ pb->spotNameLength = pb->tagLine.elem_count;
+}
+
+void StopSpotName(FASTQParseBlock* pb)
+{ /* spot name is the current content of the tag line (there may be more tokens coming, they will not be a part of the spot name) */
+ pb->spotNameDone = true;
+}
+
+void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token)
+{
+ if (token->tokenLength != 1 || token->tokenText[0] != '0') /* ignore spot group 0 */
+ {
+ pb->spotGroupOffset = pb->tagLine.elem_count;
+ pb->spotGroupLength = token->tokenLength;
+ }
+}
+
+void SetRead(FASTQParseBlock* pb, const FASTQToken* token)
+{
+ if (pb->record->seq.read)
+ {
+ pb->record->seq.read = (char*)realloc(pb->record->seq.read, strlen(pb->record->seq.read) + 1 + token->tokenLength + 1);
+ strcat(pb->record->seq.read, token->tokenText);
+ ++pb->expectedQualityLines;
+ }
+ else
+ {
+ pb->record->seq.read = (char*)malloc(token->tokenLength+1);
+ strcpy(pb->record->seq.read, token->tokenText);
+ pb->expectedQualityLines = 1;
+ }
+}
+
diff --git a/tools/fastq-loader/fastq-grammar.y b/tools/fastq-loader/fastq-grammar.y
new file mode 100644
index 0000000..66c36ef
--- /dev/null
+++ b/tools/fastq-loader/fastq-grammar.y
@@ -0,0 +1,294 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+%{
+ #include <ctype.h>
+ #include <stdlib.h>
+
+ #include "fastq-parse.h"
+
+ #define YYSTYPE FASTQToken
+ #define YYLEX_PARAM pb->scanner
+ #define YYDEBUG 1
+
+ #include "fastq-tokens.h"
+
+ static uint64_t string_touint(const char* str, size_t length);
+ static void AddBinaryQuality(FASTQParseBlock* pb, int8_t value);
+ static void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token);
+ static void SetTagLine(FASTQParseBlock* pb, const char* start, size_t length, const FASTQToken* coords);
+ static void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token);
+
+%}
+
+%pure-parser
+%parse-param {FASTQParseBlock* pb }
+%lex-param {FASTQParseBlock* pb }
+
+%name-prefix="FASTQ_"
+
+%token fqNUMBER
+%token fqALPHANUM
+%token fqWS
+%token fqENDLINE
+%token fqBASESEQ
+%token fqCOLORSEQ
+%token fqTOKEN
+%token fqASC33QUAL
+%token fqASC64QUAL
+%token fqUNRECOGNIZED
+%token fqENDOFTEXT 0
+
+%%
+
+sequence
+ : readLines qualityLines { return 1; }
+ | readLines { if (yychar != YYEMPTY && yychar != YYEOF) FASTQ_unlex(pb, & yylval); return 1; }
+ | readQualityLines { return 1; }
+ | qualityLines { return 1; }
+ | name ':' coords ':' { FASTQScan_inline_sequence(pb); }
+ read ':' { FASTQScan_inline_quality(pb); }
+ quality endline { return 1; }
+ | name error endline { return 1; }
+ | endfile { return 0; }
+ ;
+
+endfile
+ : fqENDOFTEXT
+ | endline fqENDOFTEXT
+ | endline endfile
+ ;
+
+endline
+ : fqENDLINE
+ ;
+
+readLines
+ : header endline read endline
+ | qheader endline read endline
+ | header endline error endline
+ | error endline read endline
+ ;
+
+readQualityLines
+ : qheader endline quality endline
+ | qheader endline error endline
+ ;
+
+read
+ : fqBASESEQ { pb->record->seq.read = string_dup($1.tokenText, $1.tokenLength); pb->record->seq.is_colorspace = false; }
+ | fqCOLORSEQ { pb->record->seq.read = string_dup($1.tokenText, $1.tokenLength); pb->record->seq.is_colorspace = true; }
+ ;
+
+header
+ : headerStart tagLine;
+
+headerStart
+ : '@' { pb->tagStart = $1.tokenText + 1; }
+ ;
+
+qheader
+ : qheaderStart tagLine;
+
+qheaderStart
+ : '>' { pb->tagStart = $1.tokenText + 1; }
+ ;
+
+tagLine
+ : name ':' coords tail { SetTagLine(pb, $1.tokenText, $1.tokenLength + $2.tokenLength + $3.tokenLength + $4.tokenLength, &$3); }
+ | name ':' coords { SetTagLine(pb, $1.tokenText, $1.tokenLength + $2.tokenLength + $3.tokenLength, &$3); }
+ | name { SetTagLine(pb, $1.tokenText, $1.tokenLength, 0); /* coords may be embbedded in the name with '_' as the separator */ }
+ | coords tail { SetTagLine(pb, $1.tokenText, $1.tokenLength + $2.tokenLength, &$1); }
+ | coords { SetTagLine(pb, $1.tokenText, $1.tokenLength, &$1); }
+ ;
+
+name
+ : fqALPHANUM { $$ = $1; }
+ | name '_' { $$ = $1; $$.tokenLength += $2.tokenLength; }
+ | name '-' { $$ = $1; $$.tokenLength += $2.tokenLength; }
+ | name fqALPHANUM { $$ = $1; $$.tokenLength += $2.tokenLength; }
+ | name fqNUMBER { $$ = $1; $$.tokenLength += $2.tokenLength; }
+ ;
+
+coords
+ : fqNUMBER ':' fqNUMBER ':' signedNumber ':' signedNumber
+ { $$ = $1; $$.tokenLength += ($2.tokenLength + $3.tokenLength + $4.tokenLength + $5.tokenLength + $6.tokenLength + $7.tokenLength); }
+ ;
+
+signedNumber
+ : '+' fqNUMBER { pb->signedNumber = (int8_t)string_touint($2.tokenText, $2.tokenLength); }
+ | '-' fqNUMBER { pb->signedNumber = - (int8_t)string_touint($2.tokenText, $2.tokenLength); }
+ | fqNUMBER { pb->signedNumber = (int8_t)string_touint($1.tokenText, $1.tokenLength); }
+ ;
+
+tail
+ : tailPiece
+ | tail tailPiece
+ ;
+
+tailPiece
+ : ':' { $$ = $1; }
+ | ':' fqNUMBER { $$ = $1; $$.tokenLength += $2.tokenLength; }
+ | '.' fqNUMBER { $$ = $1; $$.tokenLength += $2.tokenLength; }
+
+ | '#' fqNUMBER { $$ = $1; $$.tokenLength += $2.tokenLength; SetSpotGroup(pb, & $2); }
+ | '#' fqALPHANUM { $$ = $1; $$.tokenLength += $2.tokenLength; SetSpotGroup(pb, & $2); }
+ | '/' fqNUMBER { $$ = $1; $$.tokenLength += $2.tokenLength; SetReadNumber(pb, & $2); }
+
+ | fqWS fqALPHANUM '=' value { $$ = $1; $$.tokenLength += ($2.tokenLength + $3.tokenLength + $4.tokenLength); }
+ ;
+
+value
+ : anyToken
+ | value anyToken { $$ = $1; $$.tokenLength += $2.tokenLength; }
+ ;
+
+anyToken
+ : fqNUMBER
+ | fqALPHANUM
+ |'_'
+ ;
+
+qualityLines
+ : qualityHeader endline quality endline
+ | qualityHeader endline error endline
+ ;
+
+qualityHeader
+ : '+'
+ | qualityHeader fqTOKEN
+ ;
+
+quality
+ : fqASC33QUAL {
+ pb->record->seq.qualityBase = 33;
+ pb->record->seq.qualityType = QT_Phred;
+ pb->record->seq.quality = (int8_t*)string_dup($1.tokenText, $1.tokenLength);
+ pb->record->seq.qualityLength = $1.tokenLength;
+ }
+ | fqASC64QUAL {
+ pb->record->seq.qualityBase = 64;
+ pb->record->seq.qualityType = QT_Phred;
+ pb->record->seq.quality = (int8_t*)string_dup($1.tokenText, $1.tokenLength);
+ pb->record->seq.qualityLength = $1.tokenLength;
+ }
+ | decList { /*consume the quality buffer */
+ pb->record->seq.qualityBase = 0;
+ pb->record->seq.qualityType = QT_LogOdds;
+ pb->record->seq.quality = pb->quality.buffer;
+ pb->record->seq.qualityLength = pb->quality.curIdx;
+ pb->quality.buffer = 0;
+ pb->quality.curIdx = 0;
+ }
+ ;
+
+decList
+ : signedNumber { AddBinaryQuality(pb, (int8_t)pb->signedNumber); }
+ | decList signedNumber { AddBinaryQuality(pb, (int8_t)pb->signedNumber); }
+ | decList ',' signedNumber { AddBinaryQuality(pb, (int8_t)pb->signedNumber); }
+ ;
+
+%%
+
+static
+uint64_t string_touint(const char* str, size_t length)
+{
+ size_t i;
+ uint64_t ret = 0;
+ for (i = 0; i < length; ++i)
+ {
+ if (isdigit(str[i]))
+ {
+ ret = ret*10 + (str[i] - '0');
+ }
+ }
+ return ret;
+}
+
+void AddBinaryQuality(FASTQParseBlock* pb, int8_t value)
+{
+ #define ChunkSize 128
+
+ if (pb->quality.buffer == 0)
+ { /* allocate based on the size of the previous buffer, if any */
+ if (pb->quality.bufLen == 0)
+ {
+ pb->quality.bufLen = ChunkSize;
+ }
+ pb->quality.buffer = (int8_t*)malloc(pb->quality.bufLen);
+ pb->quality.curIdx = 0;
+ }
+ else if (pb->quality.curIdx == pb->quality.bufLen)
+ { /* grow the buffer */
+ pb->quality.bufLen += ChunkSize;
+ pb->quality.buffer = (int8_t*)realloc(pb->quality.buffer, pb->quality.bufLen);
+ }
+ pb->quality.buffer[pb->quality.curIdx] = value;
+ ++ pb->quality.curIdx;
+
+ #undef ChunkSize
+}
+
+void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token)
+{
+ if (token->tokenLength == 1)
+ {
+ switch (token->tokenText[0])
+ {
+ case '1': pb->record->seq.readnumber = 1; return;
+ case '2': pb->record->seq.readnumber = 2; return;
+ }
+ }
+ pb->record->seq.readnumber = 0;
+}
+
+void SetTagLine(FASTQParseBlock* pb, const char* start, size_t length, const FASTQToken* coords)
+{
+ pb->record->seq.tagline = string_dup(start, length);
+ if (coords != 0)
+ { /* assumes that a buffer switch can only happen at a line boundary*/
+ StringInit(& pb->record->seq.spotname, pb->record->seq.tagline, coords->tokenText - start + coords->tokenLength + 1, coords->tokenText - start + coords->tokenLength);
+ }
+ else
+ {
+ StringInit(& pb->record->seq.spotname, pb->record->seq.tagline, length + 1, length);
+ }
+ if (pb->spotGroupOffset != 0)
+ {
+ StringInit(& pb->record->seq.spotgroup, pb->record->seq.tagline + pb->spotGroupOffset, pb->spotGroupLength, pb->spotGroupLength);
+ pb->spotGroupOffset = 0;
+ }
+ else
+ {
+ StringInit(& pb->record->seq.spotgroup, 0, 0, 0);
+ }
+}
+
+void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token)
+{
+ pb->spotGroupOffset = token->tokenText - pb->tagStart;
+ pb->spotGroupLength = token->tokenLength;
+}
diff --git a/tools/fastq-loader/fastq-lex.c b/tools/fastq-loader/fastq-lex.c
new file mode 100644
index 0000000..c8b018d
--- /dev/null
+++ b/tools/fastq-loader/fastq-lex.c
@@ -0,0 +1,2418 @@
+
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* An opaque pointer. */
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
+
+/* For convenience, these vars (plus the bison vars far below)
+ are macros in the reentrant scanner. */
+#define yyin yyg->yyin_r
+#define yyout yyg->yyout_r
+#define yyextra yyg->yyextra_r
+#define yyleng yyg->yyleng_r
+#define yytext yyg->yytext_r
+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
+#define yy_flex_debug yyg->yy_flex_debug_r
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yyg->yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yyg->yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE FASTQ_restart(yyin ,yyscanner )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+ * access to the local variable yy_act. Since yyless() is a macro, it would break
+ * existing scanners that call yyless() from OUTSIDE FASTQ_lex.
+ * One obvious solution it to make yy_act a global. I tried that, and saw
+ * a 5% performance hit in a non-yylineno scanner, because yy_act is
+ * normally declared as a register variable-- so it is not worth it.
+ */
+ #define YY_LESS_LINENO(n) \
+ do { \
+ int yyl;\
+ for ( yyl = n; yyl < yyleng; ++yyl )\
+ if ( yytext[yyl] == '\n' )\
+ --yylineno;\
+ }while(0)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = yyg->yy_hold_char; \
+ YY_RESTORE_YY_MORE_OFFSET \
+ yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via FASTQ_restart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
+ ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
+
+void FASTQ_restart (FILE *input_file ,yyscan_t yyscanner );
+void FASTQ__switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+YY_BUFFER_STATE FASTQ__create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+void FASTQ__delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void FASTQ__flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void FASTQ_push_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+void FASTQ_pop_buffer_state (yyscan_t yyscanner );
+
+static void FASTQ_ensure_buffer_stack (yyscan_t yyscanner );
+static void FASTQ__load_buffer_state (yyscan_t yyscanner );
+static void FASTQ__init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
+
+#define YY_FLUSH_BUFFER FASTQ__flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+
+YY_BUFFER_STATE FASTQ__scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+YY_BUFFER_STATE FASTQ__scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+YY_BUFFER_STATE FASTQ__scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
+
+void *FASTQ_alloc (yy_size_t ,yyscan_t yyscanner );
+void *FASTQ_realloc (void *,yy_size_t ,yyscan_t yyscanner );
+void FASTQ_free (void * ,yyscan_t yyscanner );
+
+#define yy_new_buffer FASTQ__create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ FASTQ_ensure_buffer_stack (yyscanner); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ FASTQ_ensure_buffer_stack (yyscanner); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define FASTQ_wrap(n) 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+typedef int yy_state_type;
+
+#define yytext_ptr yytext_r
+
+static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner);
+static int yy_get_next_buffer (yyscan_t yyscanner );
+static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ yyg->yytext_ptr = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ yyg->yy_hold_char = *yy_cp; \
+ *yy_cp = '\0'; \
+ yyg->yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 27
+#define YY_END_OF_BUFFER 28
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_acclist[175] =
+ { 0,
+ 28, 9, 27, 6, 9, 27, 26, 27, 9, 26,
+ 27, 5, 9, 27, 4, 5, 9, 27, 3, 9,
+ 27, 9, 27,16391, 2, 9, 27, 1, 9, 27,
+ 5, 9, 27,16391, 5, 9, 27,16391, 6, 9,
+ 27, 10, 27, 9, 10, 27, 27, 27, 14, 27,
+ 27,16397, 27,16395,16397, 27,16395,16397, 27, 18,
+ 27, 18, 27, 22, 27, 19, 22, 27, 21, 27,
+ 21, 22, 27, 22, 27,16404, 19, 22, 27,16404,
+ 15, 27, 15, 27, 25, 27, 19, 25, 27, 24,
+ 27, 24, 25, 27, 25, 27,16407, 19, 25, 27,
+
+ 16407, 6, 26, 5, 4, 5, 8199, 8199,16391,16391,
+ 16392, 5,16392, 5,16391, 6, 10, 10, 14, 8205,
+ 14, 8205,16397, 8203, 8205, 14, 8203, 8205,16395,16397,
+ 16395,16396,16397,16396,16397, 17, 17, 18, 19, 21,
+ 8212, 8212,16404, 19,16404, 15, 15, 16, 16, 24,
+ 8215, 8215,16407, 19,16407, 8199, 8200, 8199, 8200,16392,
+ 8200, 8200, 8203, 8204, 8205, 14, 8203, 8204, 8205, 8204,
+ 8205, 14, 8204, 8205
+ } ;
+
+static yyconst flex_int16_t yy_accept[113] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 4, 7, 9, 12, 15, 19,
+ 22, 25, 28, 31, 35, 39, 42, 44, 47, 48,
+ 49, 51, 53, 56, 59, 60, 62, 64, 66, 69,
+ 71, 74, 77, 81, 83, 85, 87, 90, 92, 95,
+ 98, 102, 103, 104, 105, 107, 108, 109, 110, 112,
+ 114, 116, 117, 118, 119, 119, 120, 122, 123, 124,
+ 127, 129, 131, 134, 136, 136, 137, 139, 140, 141,
+ 142, 143, 144, 146, 147, 149, 150, 151, 152, 153,
+
+ 154, 156, 158, 160, 161, 162, 163, 167, 170, 173,
+ 175, 175
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 4, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 6, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 7, 5, 8, 9, 5, 10, 10, 10,
+ 10, 11, 11, 11, 11, 11, 11, 5, 5, 5,
+ 5, 12, 5, 13, 14, 8, 14, 8, 8, 8,
+ 14, 8, 8, 8, 8, 8, 8, 15, 8, 8,
+ 8, 8, 8, 14, 8, 8, 8, 8, 8, 8,
+ 5, 5, 5, 5, 8, 5, 14, 8, 14, 8,
+
+ 8, 8, 14, 8, 8, 8, 8, 8, 8, 15,
+ 8, 8, 8, 8, 8, 14, 8, 8, 8, 8,
+ 8, 8, 5, 5, 5, 5, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int32_t yy_meta[16] =
+ { 0,
+ 1, 1, 2, 2, 3, 3, 3, 4, 5, 4,
+ 4, 3, 3, 6, 6
+ } ;
+
+static yyconst flex_int16_t yy_base[125] =
+ { 0,
+ 0, 9, 23, 21, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 36, 16, 28, 50, 56, 54, 0,
+ 69, 75, 172, 252, 59, 252, 168, 0, 23, 252,
+ 63, 252, 252, 79, 75, 93, 252, 167, 252, 162,
+ 252, 99, 103, 82, 161, 252, 160, 252, 107, 252,
+ 159, 107, 117, 0, 105, 252, 120, 252, 150, 121,
+ 125, 128, 252, 0, 0, 252, 149, 129, 132, 145,
+ 0, 0, 252, 137, 113, 252, 252, 105, 155, 252,
+ 95, 0, 157, 165, 83, 252, 252, 137, 252, 252,
+ 77, 134, 0, 0, 0, 135, 252, 252, 71, 147,
+
+ 0, 252, 61, 173, 252, 52, 252, 25, 252, 14,
+ 252, 183, 189, 195, 201, 207, 210, 215, 221, 227,
+ 233, 238, 240, 245
+ } ;
+
+static yyconst flex_int16_t yy_def[125] =
+ { 0,
+ 111, 1, 1, 3, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 111, 113, 113, 114, 115, 112, 19,
+ 116, 116, 111, 111, 111, 111, 111, 117, 117, 111,
+ 118, 111, 111, 111, 34, 111, 111, 111, 111, 119,
+ 111, 120, 120, 43, 121, 111, 121, 111, 111, 111,
+ 111, 122, 122, 123, 123, 111, 111, 111, 111, 124,
+ 124, 111, 111, 117, 29, 111, 111, 118, 111, 117,
+ 35, 36, 111, 111, 119, 111, 111, 119, 120, 111,
+ 119, 43, 43, 79, 121, 111, 111, 111, 111, 111,
+ 111, 122, 53, 123, 55, 111, 111, 111, 111, 124,
+
+ 61, 111, 111, 111, 111, 111, 111, 119, 111, 119,
+ 0, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111
+ } ;
+
+static yyconst flex_int16_t yy_nxt[268] =
+ { 0,
+ 24, 25, 26, 27, 24, 25, 24, 28, 24, 29,
+ 29, 24, 24, 28, 28, 30, 109, 31, 46, 47,
+ 32, 33, 34, 35, 36, 37, 38, 107, 36, 31,
+ 46, 47, 65, 65, 34, 35, 40, 40, 41, 40,
+ 42, 42, 42, 42, 43, 42, 42, 42, 42, 44,
+ 43, 49, 50, 51, 105, 49, 48, 49, 50, 51,
+ 62, 53, 54, 102, 62, 66, 67, 55, 54, 56,
+ 57, 58, 59, 98, 61, 56, 57, 58, 59, 90,
+ 61, 66, 67, 68, 64, 86, 64, 69, 70, 64,
+ 83, 84, 71, 71, 72, 73, 74, 80, 72, 75,
+
+ 75, 77, 78, 75, 75, 80, 81, 77, 88, 90,
+ 91, 82, 88, 95, 96, 76, 82, 82, 88, 90,
+ 91, 88, 93, 98, 99, 88, 88, 98, 99, 62,
+ 101, 66, 67, 62, 102, 103, 90, 91, 88, 73,
+ 69, 104, 88, 96, 96, 68, 68, 105, 106, 98,
+ 99, 66, 97, 104, 70, 75, 75, 77, 78, 107,
+ 108, 89, 87, 86, 76, 83, 84, 109, 110, 73,
+ 63, 111, 111, 84, 84, 105, 106, 111, 111, 111,
+ 111, 104, 104, 39, 39, 39, 39, 39, 39, 45,
+ 45, 45, 45, 45, 45, 48, 48, 48, 48, 48,
+
+ 48, 52, 52, 52, 52, 52, 52, 60, 60, 60,
+ 60, 60, 60, 64, 111, 64, 68, 111, 111, 68,
+ 68, 75, 75, 75, 75, 75, 75, 79, 79, 79,
+ 79, 79, 79, 85, 85, 85, 85, 85, 85, 92,
+ 92, 92, 92, 92, 94, 94, 100, 100, 100, 100,
+ 100, 23, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111
+ } ;
+
+static yyconst flex_int16_t yy_chk[268] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 110, 2, 15, 15,
+ 2, 2, 2, 2, 3, 3, 3, 108, 3, 4,
+ 16, 16, 29, 29, 4, 4, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 17, 17, 17, 106, 17, 18, 18, 18, 18,
+ 25, 18, 19, 103, 25, 31, 31, 19, 19, 21,
+ 21, 21, 21, 99, 21, 22, 22, 22, 22, 91,
+ 22, 34, 34, 35, 35, 85, 34, 34, 34, 34,
+ 44, 44, 34, 34, 36, 36, 36, 81, 36, 42,
+
+ 42, 42, 42, 43, 43, 43, 43, 78, 49, 52,
+ 52, 43, 49, 55, 55, 75, 43, 43, 53, 53,
+ 53, 57, 53, 60, 60, 57, 61, 61, 61, 62,
+ 61, 68, 68, 62, 69, 69, 92, 92, 88, 74,
+ 69, 69, 88, 96, 96, 69, 69, 70, 70, 100,
+ 100, 67, 59, 70, 70, 79, 79, 79, 79, 83,
+ 83, 51, 47, 45, 40, 83, 83, 84, 84, 38,
+ 27, 23, 0, 84, 84, 104, 104, 0, 0, 0,
+ 0, 104, 104, 112, 112, 112, 112, 112, 112, 113,
+ 113, 113, 113, 113, 113, 114, 114, 114, 114, 114,
+
+ 114, 115, 115, 115, 115, 115, 115, 116, 116, 116,
+ 116, 116, 116, 117, 0, 117, 118, 0, 0, 118,
+ 118, 119, 119, 119, 119, 119, 119, 120, 120, 120,
+ 120, 120, 120, 121, 121, 121, 121, 121, 121, 122,
+ 122, 122, 122, 122, 123, 123, 124, 124, 124, 124,
+ 124, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111
+ } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[28] =
+ { 0,
+0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0,
+ 1, 1, 0, 1, 1, 0, 1, 0, };
+
+#define YY_TRAILING_MASK 0x2000
+#define YY_TRAILING_HEAD_MASK 0x4000
+#define REJECT \
+{ \
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ \
+yy_cp = yyg->yy_full_match; /* restore poss. backed-over text */ \
+yyg->yy_lp = yyg->yy_full_lp; /* restore orig. accepting pos. */ \
+yyg->yy_state_ptr = yyg->yy_full_state; /* restore orig. state */ \
+yy_current_state = *yyg->yy_state_ptr; /* restore curr. state */ \
+++yyg->yy_lp; \
+goto find_rule; \
+}
+
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ #include <ctype.h>
+
+ #include <klib/rc.h>
+
+ #include "fastq-parse.h"
+ #include "fastq-tokens.h"
+
+ #define YYSTYPE FASTQToken
+
+ /* code to populate token with internal values */
+ #define YY_USER_ACTION \
+ yylval -> tokenText = yytext; \
+ yylval -> tokenLength = yyleng; \
+ yylval -> line_no = yylineno; \
+ yylval -> column_no = yyextra -> column; \
+ yyextra -> column += yyleng; \
+ yyextra -> length += yyleng; \
+ yyextra -> lastToken = yylval;
+
+ #define ENDLINE \
+ yyextra -> column=1;\
+ return fqENDLINE;
+
+ #define YY_INPUT(buf, result, max_size) \
+ result = yyextra->input(yyextra, buf, max_size)
+
+ #define ECHO
+
+#define YY_NO_UNISTD_H 1
+/*%option debug*/
+
+/* there are more: =ACMGRSVTWYHKDBN. plus lowercase */
+
+#define INITIAL 0
+#define TAG_LINE 1
+#define SEE_COORDS 2
+#define PAST_COORDS 3
+#define READ_NUMBER 4
+#define NAMEVALUE 5
+#define IN_SEQUENCE 6
+#define QTAG_LINE 7
+#define IN_QUALITY 8
+#define INLINE_SEQUENCE 9
+#define INLINE_QUALITY 10
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#define YY_EXTRA_TYPE FASTQParseBlock*
+
+/* Holds the entire state of the reentrant scanner. */
+struct yyguts_t
+ {
+
+ /* User-defined. Not touched by flex. */
+ YY_EXTRA_TYPE yyextra_r;
+
+ /* The rest are the same as the globals declared in the non-reentrant scanner. */
+ FILE *yyin_r, *yyout_r;
+ size_t yy_buffer_stack_top; /**< index of top of stack. */
+ size_t yy_buffer_stack_max; /**< capacity of stack. */
+ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
+ char yy_hold_char;
+ int yy_n_chars;
+ int yyleng_r;
+ char *yy_c_buf_p;
+ int yy_init;
+ int yy_start;
+ int yy_did_buffer_switch_on_eof;
+ int yy_start_stack_ptr;
+ int yy_start_stack_depth;
+ int *yy_start_stack;
+ yy_state_type yy_last_accepting_state;
+ char* yy_last_accepting_cpos;
+
+ int yylineno_r;
+ int yy_flex_debug_r;
+
+ yy_state_type *yy_state_buf;
+ yy_state_type *yy_state_ptr;
+ char *yy_full_match;
+ int yy_lp;
+
+ /* These are only needed for trailing context rules,
+ * but there's no conditional variable for that yet. */
+ int yy_looking_for_trail_begin;
+ int yy_full_lp;
+ int *yy_full_state;
+
+ char *yytext_r;
+ int yy_more_flag;
+ int yy_more_len;
+
+ YYSTYPE * yylval_r;
+
+ }; /* end struct yyguts_t */
+
+static int yy_init_globals (yyscan_t yyscanner );
+
+ /* This must go here because YYSTYPE and YYLTYPE are included
+ * from bison output in section 1.*/
+ # define yylval yyg->yylval_r
+
+int FASTQ_lex_init (yyscan_t* scanner);
+
+int FASTQ_lex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int FASTQ_lex_destroy (yyscan_t yyscanner );
+
+int FASTQ_get_debug (yyscan_t yyscanner );
+
+void FASTQ_set_debug (int debug_flag ,yyscan_t yyscanner );
+
+YY_EXTRA_TYPE FASTQ_get_extra (yyscan_t yyscanner );
+
+void FASTQ_set_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
+
+FILE *FASTQ_get_in (yyscan_t yyscanner );
+
+void FASTQ_set_in (FILE * in_str ,yyscan_t yyscanner );
+
+FILE *FASTQ_get_out (yyscan_t yyscanner );
+
+void FASTQ_set_out (FILE * out_str ,yyscan_t yyscanner );
+
+int FASTQ_get_leng (yyscan_t yyscanner );
+
+char *FASTQ_get_text (yyscan_t yyscanner );
+
+int FASTQ_get_lineno (yyscan_t yyscanner );
+
+void FASTQ_set_lineno (int line_number ,yyscan_t yyscanner );
+
+YYSTYPE * FASTQ_get_lval (yyscan_t yyscanner );
+
+void FASTQ_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int FASTQ_wrap (yyscan_t yyscanner );
+#else
+extern int FASTQ_wrap (yyscan_t yyscanner );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr ,yyscan_t yyscanner);
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (yyscan_t yyscanner );
+#else
+static int input (yyscan_t yyscanner );
+#endif
+
+#endif
+
+ static void yy_push_state (int new_state ,yyscan_t yyscanner);
+
+ static void yy_pop_state (yyscan_t yyscanner );
+
+ static int yy_top_state (yyscan_t yyscanner );
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ int n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int FASTQ_lex \
+ (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+
+#define YY_DECL int FASTQ_lex \
+ (YYSTYPE * yylval_param , yyscan_t yyscanner)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ if ( yyleng > 0 ) \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
+ (yytext[yyleng - 1] == '\n'); \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ yylval = yylval_param;
+
+ if ( !yyg->yy_init )
+ {
+ yyg->yy_init = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ /* Create the reject buffer large enough to save one state per allowed character. */
+ if ( ! yyg->yy_state_buf )
+ yyg->yy_state_buf = (yy_state_type *)FASTQ_alloc(YY_STATE_BUF_SIZE ,yyscanner);
+ if ( ! yyg->yy_state_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in FASTQ_lex()" );
+
+ if ( ! yyg->yy_start )
+ yyg->yy_start = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ FASTQ_ensure_buffer_stack (yyscanner);
+ YY_CURRENT_BUFFER_LVALUE =
+ FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+ }
+
+ FASTQ__load_buffer_state(yyscanner );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = yyg->yy_c_buf_p;
+
+ /* Support of yytext. */
+ *yy_cp = yyg->yy_hold_char;
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = yyg->yy_start;
+ yy_current_state += YY_AT_BOL();
+
+ yyg->yy_state_ptr = yyg->yy_state_buf;
+ *yyg->yy_state_ptr++ = yy_current_state;
+
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 112 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ *yyg->yy_state_ptr++ = yy_current_state;
+ ++yy_cp;
+ }
+ while ( yy_current_state != 111 );
+
+yy_find_action:
+ yy_current_state = *--yyg->yy_state_ptr;
+ yyg->yy_lp = yy_accept[yy_current_state];
+find_rule: /* we branch to this label when backing up */
+ for ( ; ; ) /* until we find what rule we matched */
+ {
+ if ( yyg->yy_lp && yyg->yy_lp < yy_accept[yy_current_state + 1] )
+ {
+ yy_act = yy_acclist[yyg->yy_lp];
+ if ( yy_act & YY_TRAILING_HEAD_MASK ||
+ yyg->yy_looking_for_trail_begin )
+ {
+ if ( yy_act == yyg->yy_looking_for_trail_begin )
+ {
+ yyg->yy_looking_for_trail_begin = 0;
+ yy_act &= ~YY_TRAILING_HEAD_MASK;
+ break;
+ }
+ }
+ else if ( yy_act & YY_TRAILING_MASK )
+ {
+ yyg->yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
+ yyg->yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
+ }
+ else
+ {
+ yyg->yy_full_match = yy_cp;
+ yyg->yy_full_state = yyg->yy_state_ptr;
+ yyg->yy_full_lp = yyg->yy_lp;
+ break;
+ }
+ ++yyg->yy_lp;
+ goto find_rule;
+ }
+ --yy_cp;
+ yy_current_state = *--yyg->yy_state_ptr;
+ yyg->yy_lp = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+ if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+ {
+ int yyl;
+ for ( yyl = 0; yyl < yyleng; ++yyl )
+ if ( yytext[yyl] == '\n' )
+
+ do{ yylineno++;
+ yycolumn=0;
+ }while(0)
+;
+ }
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+case 1:
+YY_RULE_SETUP
+{ BEGIN TAG_LINE; return yytext[0]; }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+{ BEGIN TAG_LINE; return yytext[0]; }
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+{ BEGIN QTAG_LINE; return yytext[0]; }
+ YY_BREAK
+
+case 4:
+YY_RULE_SETUP
+{ return fqNUMBER; }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+{ return fqALPHANUM; }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+{ return fqWS; }
+ YY_BREAK
+case 7:
+/* rule 7 can match eol */
+YY_RULE_SETUP
+{ return fqBASESEQ; }
+ YY_BREAK
+case 8:
+/* rule 8 can match eol */
+YY_RULE_SETUP
+{ return fqCOLORSEQ; }
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+{ return yytext[0]; }
+ YY_BREAK
+
+case 10:
+/* rule 10 can match eol */
+YY_RULE_SETUP
+{ BEGIN IN_SEQUENCE; ENDLINE; }
+ YY_BREAK
+
+case 11:
+/* rule 11 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; return fqBASESEQ; }
+ YY_BREAK
+case 12:
+/* rule 12 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; return fqCOLORSEQ; }
+ YY_BREAK
+case 13:
+/* rule 13 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; return fqASCQUAL; }
+ YY_BREAK
+case 14:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ BEGIN 0; return fqUNRECOGNIZED; }
+ YY_BREAK
+
+case 15:
+YY_RULE_SETUP
+{ BEGIN 0; return fqBASESEQ; }
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+{ BEGIN 0; return fqCOLORSEQ; }
+ YY_BREAK
+
+case 17:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ return fqTOKEN; /* do not bother to parse the inside of the line */ }
+ YY_BREAK
+case 18:
+/* rule 18 can match eol */
+YY_RULE_SETUP
+{ BEGIN IN_QUALITY; ENDLINE }
+ YY_BREAK
+
+case 19:
+YY_RULE_SETUP
+{ }
+ YY_BREAK
+
+case 20:
+/* rule 20 can match eol */
+YY_RULE_SETUP
+{ return fqASCQUAL; }
+ YY_BREAK
+case 21:
+/* rule 21 can match eol */
+YY_RULE_SETUP
+{ /* if read was split across several lines, expect the same number of lines in quality */
+ if (yyextra->expectedQualityLines <= 1)
+ BEGIN 0;
+ else
+ --yyextra->expectedQualityLines;
+ ENDLINE;
+ }
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+{ return yytext[0]; }
+ YY_BREAK
+
+case 23:
+/* rule 23 can match eol */
+YY_RULE_SETUP
+{ return fqASCQUAL; }
+ YY_BREAK
+case 24:
+/* rule 24 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; ENDLINE; }
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+{ return yytext[0]; }
+ YY_BREAK
+
+case 26:
+/* rule 26 can match eol */
+YY_RULE_SETUP
+{ ENDLINE; }
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+ECHO;
+ YY_BREAK
+ case YY_STATE_EOF(INITIAL):
+ case YY_STATE_EOF(TAG_LINE):
+ case YY_STATE_EOF(SEE_COORDS):
+ case YY_STATE_EOF(PAST_COORDS):
+ case YY_STATE_EOF(READ_NUMBER):
+ case YY_STATE_EOF(NAMEVALUE):
+ case YY_STATE_EOF(IN_SEQUENCE):
+ case YY_STATE_EOF(QTAG_LINE):
+ case YY_STATE_EOF(IN_QUALITY):
+ case YY_STATE_EOF(INLINE_SEQUENCE):
+ case YY_STATE_EOF(INLINE_QUALITY):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = yyg->yy_hold_char;
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * FASTQ_lex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( yyscanner );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
+
+ yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++yyg->yy_c_buf_p;
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = yyg->yy_c_buf_p;
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( yyscanner ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ yyg->yy_did_buffer_switch_on_eof = 0;
+
+ if ( FASTQ_wrap(yyscanner ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! yyg->yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yyg->yy_c_buf_p =
+ yyg->yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( yyscanner );
+
+ yy_cp = yyg->yy_c_buf_p;
+ yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ yyg->yy_c_buf_p =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
+
+ yy_current_state = yy_get_previous_state( yyscanner );
+
+ yy_cp = yyg->yy_c_buf_p;
+ yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of FASTQ_lex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = yyg->yytext_ptr;
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
+
+ else
+ {
+ int num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ yyg->yy_n_chars, (size_t) num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+ }
+
+ if ( yyg->yy_n_chars == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ FASTQ_restart(yyin ,yyscanner);
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) FASTQ_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ yyg->yy_n_chars += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+ yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ yy_current_state = yyg->yy_start;
+ yy_current_state += YY_AT_BOL();
+
+ yyg->yy_state_ptr = yyg->yy_state_buf;
+ *yyg->yy_state_ptr++ = yy_current_state;
+
+ for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 112 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ *yyg->yy_state_ptr++ = yy_current_state;
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner)
+{
+ register int yy_is_jam;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
+
+ register YY_CHAR yy_c = 1;
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 112 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 111);
+ if ( ! yy_is_jam )
+ *yyg->yy_state_ptr++ = yy_current_state;
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
+{
+ register char *yy_cp;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ yy_cp = yyg->yy_c_buf_p;
+
+ /* undo effects of setting up yytext */
+ *yy_cp = yyg->yy_hold_char;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register int number_to_move = yyg->yy_n_chars + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ if ( c == '\n' ){
+ --yylineno;
+ }
+
+ yyg->yytext_ptr = yy_bp;
+ yyg->yy_hold_char = *yy_cp;
+ yyg->yy_c_buf_p = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (yyscan_t yyscanner)
+#else
+ static int input (yyscan_t yyscanner)
+#endif
+
+{
+ int c;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ *yyg->yy_c_buf_p = yyg->yy_hold_char;
+
+ if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+ /* This was really a NUL. */
+ *yyg->yy_c_buf_p = '\0';
+
+ else
+ { /* need more input */
+ int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+ ++yyg->yy_c_buf_p;
+
+ switch ( yy_get_next_buffer( yyscanner ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ FASTQ_restart(yyin ,yyscanner);
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( FASTQ_wrap(yyscanner ) )
+ return EOF;
+
+ if ( ! yyg->yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput(yyscanner);
+#else
+ return input(yyscanner);
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
+ *yyg->yy_c_buf_p = '\0'; /* preserve yytext */
+ yyg->yy_hold_char = *++yyg->yy_c_buf_p;
+
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
+
+ do{ yylineno++;
+ yycolumn=0;
+ }while(0)
+;
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * @param yyscanner The scanner object.
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void FASTQ_restart (FILE * input_file , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if ( ! YY_CURRENT_BUFFER ){
+ FASTQ_ensure_buffer_stack (yyscanner);
+ YY_CURRENT_BUFFER_LVALUE =
+ FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+ }
+
+ FASTQ__init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
+ FASTQ__load_buffer_state(yyscanner );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * @param yyscanner The scanner object.
+ */
+ void FASTQ__switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * FASTQ_pop_buffer_state();
+ * FASTQ_push_buffer_state(new_buffer);
+ */
+ FASTQ_ensure_buffer_stack (yyscanner);
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *yyg->yy_c_buf_p = yyg->yy_hold_char;
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ FASTQ__load_buffer_state(yyscanner );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (FASTQ_wrap()) processing, but the only time this flag
+ * is looked at is after FASTQ_wrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+static void FASTQ__load_buffer_state (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ yyg->yy_hold_char = *yyg->yy_c_buf_p;
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * @param yyscanner The scanner object.
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE FASTQ__create_buffer (FILE * file, int size , yyscan_t yyscanner)
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) FASTQ_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in FASTQ__create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) FASTQ_alloc(b->yy_buf_size + 2 ,yyscanner );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in FASTQ__create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ FASTQ__init_buffer(b,file ,yyscanner);
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with FASTQ__create_buffer()
+ * @param yyscanner The scanner object.
+ */
+ void FASTQ__delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ FASTQ_free((void *) b->yy_ch_buf ,yyscanner );
+
+ FASTQ_free((void *) b ,yyscanner );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a FASTQ_restart() or at EOF.
+ */
+ static void FASTQ__init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
+
+{
+ int oerrno = errno;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ FASTQ__flush_buffer(b ,yyscanner);
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then FASTQ__init_buffer was _probably_
+ * called from FASTQ_restart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * @param yyscanner The scanner object.
+ */
+ void FASTQ__flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ FASTQ__load_buffer_state(yyscanner );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_push_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if (new_buffer == NULL)
+ return;
+
+ FASTQ_ensure_buffer_stack(yyscanner);
+
+ /* This block is copied from FASTQ__switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *yyg->yy_c_buf_p = yyg->yy_hold_char;
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ yyg->yy_buffer_stack_top++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from FASTQ__switch_to_buffer. */
+ FASTQ__load_buffer_state(yyscanner );
+ yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_pop_buffer_state (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ FASTQ__delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if (yyg->yy_buffer_stack_top > 0)
+ --yyg->yy_buffer_stack_top;
+
+ if (YY_CURRENT_BUFFER) {
+ FASTQ__load_buffer_state(yyscanner );
+ yyg->yy_did_buffer_switch_on_eof = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void FASTQ_ensure_buffer_stack (yyscan_t yyscanner)
+{
+ int num_to_alloc;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if (!yyg->yy_buffer_stack) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ yyg->yy_buffer_stack = (struct yy_buffer_state**)FASTQ_alloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ , yyscanner);
+ if ( ! yyg->yy_buffer_stack )
+ YY_FATAL_ERROR( "out of dynamic memory in FASTQ_ensure_buffer_stack()" );
+
+ memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ yyg->yy_buffer_stack_max = num_to_alloc;
+ yyg->yy_buffer_stack_top = 0;
+ return;
+ }
+
+ if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
+ yyg->yy_buffer_stack = (struct yy_buffer_state**)FASTQ_realloc
+ (yyg->yy_buffer_stack,
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ , yyscanner);
+ if ( ! yyg->yy_buffer_stack )
+ YY_FATAL_ERROR( "out of dynamic memory in FASTQ_ensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
+ yyg->yy_buffer_stack_max = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE FASTQ__scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) FASTQ_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in FASTQ__scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ FASTQ__switch_to_buffer(b ,yyscanner );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to FASTQ_lex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * FASTQ__scan_bytes() instead.
+ */
+YY_BUFFER_STATE FASTQ__scan_string (yyconst char * yystr , yyscan_t yyscanner)
+{
+
+ return FASTQ__scan_bytes(yystr,strlen(yystr) ,yyscanner);
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to FASTQ_lex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE FASTQ__scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner)
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) FASTQ_alloc(n ,yyscanner );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in FASTQ__scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = FASTQ__scan_buffer(buf,n ,yyscanner);
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in FASTQ__scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+ static void yy_push_state (int new_state , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth )
+ {
+ yy_size_t new_size;
+
+ yyg->yy_start_stack_depth += YY_START_STACK_INCR;
+ new_size = yyg->yy_start_stack_depth * sizeof( int );
+
+ if ( ! yyg->yy_start_stack )
+ yyg->yy_start_stack = (int *) FASTQ_alloc(new_size ,yyscanner );
+
+ else
+ yyg->yy_start_stack = (int *) FASTQ_realloc((void *) yyg->yy_start_stack,new_size ,yyscanner );
+
+ if ( ! yyg->yy_start_stack )
+ YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+ }
+
+ yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START;
+
+ BEGIN(new_state);
+}
+
+ static void yy_pop_state (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ if ( --yyg->yy_start_stack_ptr < 0 )
+ YY_FATAL_ERROR( "start-condition stack underflow" );
+
+ BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]);
+}
+
+ static int yy_top_state (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1];
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = yyg->yy_hold_char; \
+ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
+ yyg->yy_hold_char = *yyg->yy_c_buf_p; \
+ *yyg->yy_c_buf_p = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the user-defined data for this scanner.
+ * @param yyscanner The scanner object.
+ */
+YY_EXTRA_TYPE FASTQ_get_extra (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyextra;
+}
+
+/** Get the current line number.
+ * @param yyscanner The scanner object.
+ */
+int FASTQ_get_lineno (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if (! YY_CURRENT_BUFFER)
+ return 0;
+
+ return yylineno;
+}
+
+/** Get the current column number.
+ * @param yyscanner The scanner object.
+ */
+int FASTQ_get_column (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ if (! YY_CURRENT_BUFFER)
+ return 0;
+
+ return yycolumn;
+}
+
+/** Get the input stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *FASTQ_get_in (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyin;
+}
+
+/** Get the output stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *FASTQ_get_out (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyout;
+}
+
+/** Get the length of the current token.
+ * @param yyscanner The scanner object.
+ */
+int FASTQ_get_leng (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yyleng;
+}
+
+/** Get the current token.
+ * @param yyscanner The scanner object.
+ */
+
+char *FASTQ_get_text (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yytext;
+}
+
+/** Set the user-defined data. This data is never touched by the scanner.
+ * @param user_defined The data to be associated with this scanner.
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_set_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yyextra = user_defined ;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_set_lineno (int line_number , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* lineno is only valid if an input buffer exists. */
+ if (! YY_CURRENT_BUFFER )
+ yy_fatal_error( "FASTQ_set_lineno called with no buffer" , yyscanner);
+
+ yylineno = line_number;
+}
+
+/** Set the current column.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_set_column (int column_no , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* column is only valid if an input buffer exists. */
+ if (! YY_CURRENT_BUFFER )
+ yy_fatal_error( "FASTQ_set_column called with no buffer" , yyscanner);
+
+ yycolumn = column_no;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * @param yyscanner The scanner object.
+ * @see FASTQ__switch_to_buffer
+ */
+void FASTQ_set_in (FILE * in_str , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yyin = in_str ;
+}
+
+void FASTQ_set_out (FILE * out_str , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yyout = out_str ;
+}
+
+int FASTQ_get_debug (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yy_flex_debug;
+}
+
+void FASTQ_set_debug (int bdebug , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yy_flex_debug = bdebug ;
+}
+
+/* Accessor methods for yylval and yylloc */
+
+YYSTYPE * FASTQ_get_lval (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ return yylval;
+}
+
+void FASTQ_set_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ yylval = yylval_param;
+}
+
+/* User-visible API */
+
+/* FASTQ_lex_init is special because it creates the scanner itself, so it is
+ * the ONLY reentrant function that doesn't take the scanner as the last argument.
+ * That's why we explicitly handle the declaration, instead of using our macros.
+ */
+
+int FASTQ_lex_init(yyscan_t* ptr_yy_globals)
+
+{
+ if (ptr_yy_globals == NULL){
+ errno = EINVAL;
+ return 1;
+ }
+
+ *ptr_yy_globals = (yyscan_t) FASTQ_alloc ( sizeof( struct yyguts_t ), NULL );
+
+ if (*ptr_yy_globals == NULL){
+ errno = ENOMEM;
+ return 1;
+ }
+
+ /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
+ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+ return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* FASTQ_lex_init_extra has the same functionality as FASTQ_lex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to FASTQ_alloc in
+ * the yyextra field.
+ */
+
+int FASTQ_lex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+
+{
+ struct yyguts_t dummy_yyguts;
+
+ FASTQ_set_extra (yy_user_defined, &dummy_yyguts);
+
+ if (ptr_yy_globals == NULL){
+ errno = EINVAL;
+ return 1;
+ }
+
+ *ptr_yy_globals = (yyscan_t) FASTQ_alloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+
+ if (*ptr_yy_globals == NULL){
+ errno = ENOMEM;
+ return 1;
+ }
+
+ /* By setting to 0xAA, we expose bugs in
+ yy_init_globals. Leave at 0x00 for releases. */
+ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+ FASTQ_set_extra (yy_user_defined, *ptr_yy_globals);
+
+ return yy_init_globals ( *ptr_yy_globals );
+}
+
+static int yy_init_globals (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from FASTQ_lex_destroy(), so don't allocate here.
+ */
+
+ yyg->yy_buffer_stack = 0;
+ yyg->yy_buffer_stack_top = 0;
+ yyg->yy_buffer_stack_max = 0;
+ yyg->yy_c_buf_p = (char *) 0;
+ yyg->yy_init = 0;
+ yyg->yy_start = 0;
+
+ yyg->yy_start_stack_ptr = 0;
+ yyg->yy_start_stack_depth = 0;
+ yyg->yy_start_stack = NULL;
+
+ yyg->yy_state_buf = 0;
+ yyg->yy_state_ptr = 0;
+ yyg->yy_full_match = 0;
+ yyg->yy_lp = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * FASTQ_lex_init()
+ */
+ return 0;
+}
+
+/* FASTQ_lex_destroy is for both reentrant and non-reentrant scanners. */
+int FASTQ_lex_destroy (yyscan_t yyscanner)
+{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ FASTQ__delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ FASTQ_pop_buffer_state(yyscanner);
+ }
+
+ /* Destroy the stack itself. */
+ FASTQ_free(yyg->yy_buffer_stack ,yyscanner);
+ yyg->yy_buffer_stack = NULL;
+
+ /* Destroy the start condition stack. */
+ FASTQ_free(yyg->yy_start_stack ,yyscanner );
+ yyg->yy_start_stack = NULL;
+
+ FASTQ_free ( yyg->yy_state_buf , yyscanner);
+ yyg->yy_state_buf = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * FASTQ_lex() is called, initialization will occur. */
+ yy_init_globals( yyscanner);
+
+ /* Destroy the main struct (reentrant only). */
+ FASTQ_free ( yyscanner , yyscanner );
+ yyscanner = NULL;
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *FASTQ_alloc (yy_size_t size , yyscan_t yyscanner)
+{
+ return (void *) malloc( size );
+}
+
+void *FASTQ_realloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void FASTQ_free (void * ptr , yyscan_t yyscanner)
+{
+ free( (char *) ptr ); /* see FASTQ_realloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+rc_t CC FASTQScan_yylex_init(FASTQParseBlock* sb, bool debug)
+{
+ if (FASTQ_lex_init_extra(sb,&sb->scanner) != 0)
+ {
+ return RC ( rcKFG, rcMgr, rcParsing, rcMemory, rcExhausted );
+ }
+
+ sb->length = 0;
+ sb->lastToken = NULL;
+ sb->record = NULL;
+ sb->column = 1;
+ KDataBufferMakeBytes( &sb->tagLine, 1024);
+
+ sb->spotNameLength = 0;
+ sb->spotNameDone = false;
+ sb->spotGroupOffset = 0;
+ sb->spotGroupLength = 0;
+
+ KDataBufferMakeBytes( &sb->quality, 1024);
+ sb->expectedQualityLines = 0;
+
+ FASTQ_set_debug(debug ? 1 : 0,sb->scanner);
+
+ yy_push_state(INITIAL, sb->scanner);
+
+ return 0;
+}
+
+void CC FASTQScan_yylex_destroy(FASTQParseBlock* sb)
+{
+ KDataBufferWhack( & sb->tagLine);
+ KDataBufferWhack( & sb->quality);
+ if (sb->scanner)
+ {
+ FASTQ_lex_destroy(sb->scanner);
+ }
+ sb->scanner=0;
+}
+
+void CC FASTQScan_inline_sequence(FASTQParseBlock* pb)
+{
+ yy_pop_state(pb->scanner);
+ yy_push_state(INLINE_SEQUENCE, pb->scanner);
+}
+
+void CC FASTQScan_inline_quality(FASTQParseBlock* pb)
+{
+ yy_pop_state(pb->scanner);
+ yy_push_state(INLINE_QUALITY, pb->scanner);
+}
+
+void CC FASTQ_unlex(FASTQParseBlock* pb, FASTQToken* token)
+{
+ size_t i;
+ struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+ for (i = 0; i < token->tokenLength; ++i)
+ {
+ yyunput(token->tokenText[token->tokenLength-1-i], yyg->yytext_r, pb->scanner);
+ }
+ yyextra -> column -= token->tokenLength;
+ yyextra -> length -= token->tokenLength;
+}
+
diff --git a/tools/fastq-loader/fastq-lex.l b/tools/fastq-loader/fastq-lex.l
new file mode 100644
index 0000000..64481aa
--- /dev/null
+++ b/tools/fastq-loader/fastq-lex.l
@@ -0,0 +1,294 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+%{
+ #include <ctype.h>
+
+ #include <klib/rc.h>
+
+ #include "fastq-parse.h"
+ #include "fastq-tokens.h"
+
+ #define YYSTYPE FASTQToken
+
+ /* code to populate token with internal values */
+ #define YY_USER_ACTION \
+ yylval -> tokenText = yytext; \
+ yylval -> tokenLength = yyleng; \
+ yylval -> line_no = yylineno; \
+ yylval -> column_no = yyextra -> column; \
+ yyextra -> column += yyleng; \
+ yyextra -> length += yyleng; \
+ yyextra -> lastToken = yylval;
+
+ #define ENDLINE \
+ yyextra -> column=1;\
+ return fqENDLINE;
+
+ #define YY_INPUT(buf, result, max_size) \
+ result = yyextra->input(yyextra, buf, max_size)
+
+ #define ECHO
+
+ static bool IsDecList(const char*, size_t*, int*);
+
+ #define CHECK_FOR_DECLIST \
+ int token; \
+ size_t firstNumLen = yylval -> tokenLength; \
+ if (IsDecList(yytext, & firstNumLen, & token)) \
+ { \
+ yyextra -> column -= (yyleng - firstNumLen); \
+ yyextra -> length -= (yyleng - firstNumLen); \
+ yylval -> tokenLength = firstNumLen; \
+ BEGIN DECLIST; \
+ yyless(firstNumLen); \
+ return token; \
+ }
+%}
+
+%option never-interactive nounistd yylineno reentrant bison-bridge stack noyywrap
+
+%option prefix="FASTQ_"
+%option extra-type="FASTQParseBlock*"
+
+ /*%option debug*/
+
+%x TAG_LINE
+%x SEE_COORDS
+%x PAST_COORDS
+%x READ_NUMBER
+%x NAMEVALUE
+%x IN_SEQUENCE
+%x QTAG_LINE
+%x IN_QUALITY
+%x INLINE_SEQUENCE
+%x INLINE_QUALITY
+%x DECLIST
+
+ws [ \t]+
+digits [0-9]+
+alphanum [A-Za-z0-9]+
+eol (\r\n|\r|\n)
+
+/* there are more: =ACMGRSVTWYHKDBN. plus lowercase */
+base [ACGTacgtNn.]
+cskey [ACGTacgt]
+color [0-3.]
+
+asc33qual [\x0E-\x1F \x21-\x7E]+
+asc64qual [\x40-\x7E]+
+
+%%
+
+^@ { BEGIN TAG_LINE; return yytext[0]; }
+^> { BEGIN TAG_LINE; return yytext[0]; }
+
+^\+ { BEGIN QTAG_LINE; return yytext[0]; }
+
+<INITIAL,TAG_LINE>
+{
+ {digits} { return fqNUMBER; }
+ {alphanum} { return fqALPHANUM; }
+ {ws} { return fqWS; }
+ . { return yytext[0]; }
+}
+
+<TAG_LINE>[ \t]*{eol} { BEGIN IN_SEQUENCE; ENDLINE; }
+
+<IN_SEQUENCE>
+{
+ ^{base}+/{eol} { BEGIN 0; return fqBASESEQ; }
+ ^{cskey}{color}+/{eol} { BEGIN 0; return fqCOLORSEQ; }
+ ^{asc64qual}/{eol} { CHECK_FOR_DECLIST; BEGIN 0; return fqASC64QUAL; }
+ ^{asc33qual}/{eol} { CHECK_FOR_DECLIST; BEGIN 0; return fqASC33QUAL; }
+ ^.*$ { BEGIN 0; return fqUNRECOGNIZED; }
+}
+
+<INLINE_SEQUENCE>
+{
+ {base}+ { BEGIN 0; return fqBASESEQ; }
+ {cskey}{color}+ { BEGIN 0; return fqCOLORSEQ; }
+}
+
+<QTAG_LINE>
+{
+ .+$ { return fqTOKEN; /* do not bother to parse the inside of the line */ }
+ {eol} { BEGIN IN_QUALITY; ENDLINE }
+}
+
+<IN_QUALITY,INLINE_QUALITY,DECLIST>
+{
+ {ws} { }
+ {digits} { BEGIN DECLIST; return fqNUMBER; }
+}
+
+<IN_QUALITY>
+{
+ ^{asc64qual}/{eol} { CHECK_FOR_DECLIST; return fqASC64QUAL; }
+ ^{asc33qual}/{eol} { CHECK_FOR_DECLIST; return fqASC33QUAL; }
+ {eol} { BEGIN 0; ENDLINE; }
+ . { return yytext[0]; }
+}
+
+<INLINE_QUALITY>
+{
+ {digits}/{eol} { BEGIN DECLIST; return fqNUMBER; }
+ {asc64qual}/{eol} { CHECK_FOR_DECLIST; return fqASC64QUAL; }
+ {asc33qual}/{eol} { CHECK_FOR_DECLIST; return fqASC33QUAL; }
+ {eol} { BEGIN 0; ENDLINE; }
+ . { return yytext[0]; }
+}
+
+<DECLIST>
+{
+ {digits}/{eol} { return fqNUMBER; }
+ {eol} { BEGIN 0; ENDLINE; }
+ . { return yytext[0]; }
+}
+
+{eol} { ENDLINE; }
+
+%%
+
+rc_t CC FASTQScan_yylex_init(FASTQParseBlock* sb, bool debug)
+{
+ if (yylex_init_extra(sb, &sb->scanner) != 0)
+ {
+ return RC ( rcKFG, rcMgr, rcParsing, rcMemory, rcExhausted );
+ }
+
+ yyset_debug(debug ? 1 : 0, sb->scanner);
+
+ yy_push_state(INITIAL, sb->scanner);
+
+ sb->column = 1;
+
+ return 0;
+}
+
+void CC FASTQScan_yylex_destroy(FASTQParseBlock* sb)
+{
+ if (sb->scanner)
+ {
+ yylex_destroy(sb->scanner);
+ }
+ sb->scanner=0;
+}
+
+void CC FASTQScan_inline_sequence(FASTQParseBlock* pb)
+{
+ yy_pop_state(pb->scanner);
+ yy_push_state(INLINE_SEQUENCE, pb->scanner);
+}
+
+void CC FASTQScan_inline_quality(FASTQParseBlock* pb)
+{
+ yy_pop_state(pb->scanner);
+ yy_push_state(INLINE_QUALITY, pb->scanner);
+}
+
+/*
+ * True if the token appears to be a comma/whitespace separated list of signed decimals, each no longer than 3 decimal positions.
+ */
+bool IsDecList(const char* token, size_t* size, int* p_newToken)
+{
+ size_t firstTokenSize = 0;
+ size_t curNumberSize = 0;
+ int newToken;
+ bool inFirstToken = true;
+ size_t i;
+ for (i=0; i < *size; ++i)
+ {
+ char ch=token[i];
+ if (strchr("0123456789, -+", ch) == NULL)
+ {
+ return false;
+ }
+ if (inFirstToken)
+ {
+ if (i == 0)
+ { /* decide on the first character */
+ if (isdigit(ch))
+ {
+ newToken = fqNUMBER;
+ firstTokenSize = 1;
+ curNumberSize = 1;
+ }
+ else if (ch == '-' || ch == '+')
+ {
+ newToken = ch;
+ firstTokenSize = 1;
+ inFirstToken = false;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else if (isdigit(ch))
+ { /* keep on tracking the first token's size */
+ ++firstTokenSize;
+ ++curNumberSize;
+ if (curNumberSize > 3)
+ {
+ return false;
+ }
+ }
+ else
+ { /* end of the first token */
+ curNumberSize = 0;
+ inFirstToken = false;
+ }
+ }
+ else if (isdigit(ch))
+ { /* keep on tracking the current number's size */
+ ++curNumberSize;
+ if (curNumberSize > 3)
+ {
+ return false;
+ }
+ }
+ else
+ {
+ curNumberSize = 0;
+ }
+ }
+ *size = firstTokenSize;
+ *p_newToken = newToken;
+ return true;
+}
+
+void CC FASTQ_unlex(FASTQParseBlock* pb, FASTQToken* token)
+{
+ size_t i;
+ struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+ for (i = 0; i < token->tokenLength; ++i)
+ {
+ yyunput(token->tokenText[token->tokenLength-1-i], yyg->yytext_r, pb->scanner);
+ }
+ yyextra -> column -= token->tokenLength;
+ yyextra -> length -= token->tokenLength;
+}
diff --git a/tools/fastq-loader/fastq-loader.c b/tools/fastq-loader/fastq-loader.c
new file mode 100644
index 0000000..9acc6e5
--- /dev/null
+++ b/tools/fastq-loader/fastq-loader.c
@@ -0,0 +1,541 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "latf-load.vers.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <loader/common-writer.h>
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kapp/log-xml.h>
+#include <align/writer-refseq.h>
+
+extern rc_t run(char const argv0[],
+ struct CommonWriterSettings* G,
+ unsigned countReads,
+ const char* reads[],
+ uint8_t qualityOffset,
+ const uint8_t defaultReadNumbers[]);
+
+/* MARK: Arguments and Usage */
+static char const option_input[] = "input";
+static char const option_output[] = "output";
+static char const option_tmpfs[] = "tmpfs";
+static char const option_qual_compress[] = "qual-quant";
+static char const option_cache_size[] = "cache-size";
+static char const option_max_err_count[] = "max-err-count";
+static char const option_max_rec_count[] = "max-rec-count";
+static char const option_platform[] = "platform";
+static char const option_quality[] = "quality";
+static char const option_read[] = "read";
+static char const option_max_err_pct[] = "max-err-pct";
+
+#define OPTION_INPUT option_input
+#define OPTION_OUTPUT option_output
+#define OPTION_TMPFS option_tmpfs
+#define OPTION_QCOMP option_qual_compress
+#define OPTION_CACHE_SIZE option_cache_size
+#define OPTION_MAX_ERR_COUNT option_max_err_count
+#define OPTION_MAX_REC_COUNT option_max_rec_count
+#define OPTION_PLATFORM option_platform
+#define OPTION_QUALITY option_quality
+#define OPTION_READ option_read
+#define OPTION_MAX_ERR_PCT option_max_err_pct
+
+#define ALIAS_INPUT "i"
+#define ALIAS_OUTPUT "o"
+#define ALIAS_TMPFS "t"
+#define ALIAS_QCOMP "Q"
+#define ALIAS_MAX_ERR_COUNT "E"
+#define ALIAS_PLATFORM "p"
+#define ALIAS_READ "r"
+/* this alias is deprecated (conflicts with -q for --quiet): */
+#define ALIAS_QUALITY "q"
+
+static
+char const * output_usage[] =
+{
+ "Path and Name of the output database.",
+ NULL
+};
+
+static
+char const * tmpfs_usage[] =
+{
+ "Path to be used for scratch files.",
+ NULL
+};
+
+static
+char const * qcomp_usage[] =
+{
+ "Quality scores quantization level, can be a number (0: none - default, 1: 2bit, 2: 1bit), or a string like '1:10,10:20,20:30,30:-' (which is equivalent to 1).",
+ NULL
+};
+
+static
+char const * cache_size_usage[] =
+{
+ "Set the cache size in MB for the temporary indices",
+ NULL
+};
+
+static
+char const * mrc_usage[] =
+{
+ "Set the maximum number of records to process from the FASTQ file",
+ NULL
+};
+
+static
+char const * mec_usage[] =
+{
+ "Set the maximum number of errors to ignore from the FASTQ file",
+ NULL
+};
+
+static
+char const * use_platform[] =
+{
+ "Platform (ILLUMINA, LS454, SOLID, COMPLETE_GENOMICS, HELICOS, PACBIO, IONTORRENT, CAPILLARY)",
+ NULL
+};
+
+static
+char const * use_quality[] =
+{
+ "Quality encoding (PHRED_33, PHRED_64)",
+ NULL
+};
+
+/*static
+char const * use_read[] =
+{
+ "Default read number (1 or 2)",
+ NULL
+};*/
+
+static
+char const * use_max_err_pct[] =
+{
+ "acceptable percentage of spots creation errors, default is 5",
+ NULL
+};
+
+OptDef Options[] =
+{
+ /* order here is same as in param array below!!! */ /* max#, needs param, required */
+ { OPTION_OUTPUT, ALIAS_OUTPUT, NULL, output_usage, 1, true, true },
+ { OPTION_TMPFS, ALIAS_TMPFS, NULL, tmpfs_usage, 1, true, false },
+ { OPTION_QCOMP, ALIAS_QCOMP, NULL, qcomp_usage, 1, true, false },
+ { OPTION_CACHE_SIZE, NULL, NULL, cache_size_usage, 1, true, false },
+ { OPTION_MAX_REC_COUNT, NULL, NULL, mrc_usage, 1, true, false },
+ { OPTION_MAX_ERR_COUNT, ALIAS_MAX_ERR_COUNT, NULL, mec_usage, 1, true, false },
+ { OPTION_PLATFORM, ALIAS_PLATFORM, NULL, use_platform, 1, true, false },
+ { OPTION_QUALITY, ALIAS_QUALITY, NULL, use_quality, 1, true, true },
+ { OPTION_MAX_ERR_PCT, NULL, NULL, use_max_err_pct, 1, true, false },
+/* { OPTION_READ, ALIAS_READ, NULL, use_read, 0, true, false },*/
+};
+
+const char* OptHelpParam[] =
+{
+ /* order here is same as in OptDef array above!!! */
+ "path",
+ "path-to-file",
+ "phred-score",
+ "mbytes",
+ "count",
+ "count",
+ NULL,
+ NULL,
+ NULL,
+};
+
+rc_t UsageSummary (char const * progname)
+{
+ return KOutMsg (
+ "Usage:\n"
+ "\t%s [options] <fastq-file> ...\n"
+ "\n"
+ "Summary:\n"
+ "\tLoad FASTQ formatted data files\n"
+ "\n"
+ "Example:\n"
+ "\t%s -p 454 -o /tmp/SRZ123456 123456-1.fastq 123456-2.fastq\n"
+ "\n"
+ ,progname, progname);
+}
+
+char const UsageDefaultName[] = "fastq-load";
+
+rc_t CC Usage (const Args * args)
+{
+ rc_t rc;
+ int i;
+ const char * progname = UsageDefaultName;
+ const char * fullpath = UsageDefaultName;
+ const size_t argsQty = sizeof(Options) / sizeof(Options[0]);
+
+ if (args == NULL)
+ rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ else
+ rc = ArgsProgram (args, &fullpath, &progname);
+ if (rc)
+ progname = fullpath = UsageDefaultName;
+
+ UsageSummary (progname);
+
+ for(i = 0; i < argsQty; i++ ) {
+ if( Options[i].required && Options[i].help[0] != NULL ) {
+ HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+ }
+ }
+ OUTMSG(("\nOptions:\n"));
+ for(i = 0; i < argsQty; i++ ) {
+ if( !Options[i].required && Options[i].help[0] != NULL ) {
+ HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+ }
+ }
+ XMLLogger_Usage();
+ OUTMSG(("\n"));
+ HelpOptionsStandard ();
+ HelpVersion (fullpath, KAppVersion());
+ return rc;
+}
+
+/* MARK: Definitions and Globals */
+
+#define SCHEMAFILE "align/align.vschema"
+
+CommonWriterSettings G;
+
+uint32_t CC KAppVersion (void)
+{
+ return LATF_LOAD_VERS;
+}
+
+#ifdef _WIN32
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+static void set_pid(void)
+{
+ G.pid = getpid();
+}
+
+static rc_t PathWithBasePath(char rslt[], size_t sz, char const path[], char const base[])
+{
+ size_t const plen = strlen(path);
+ bool const hasBase = base && base[0];
+ bool const isBareName = strchr(path, '/') == NULL;
+
+ if (isBareName && hasBase) {
+ if (string_printf(rslt, sz, NULL, "%s/%s", base, path) == 0)
+ return 0;
+ }
+ else if (plen < sz) {
+ strcpy(rslt, path);
+ return 0;
+ }
+ {
+ rc_t const rc = RC(rcApp, rcArgv, rcAccessing, rcBuffer, rcInsufficient);
+ (void)LOGERR(klogErr, rc, "The path to the file is too long");
+ return rc;
+ }
+}
+
+rc_t CC KMain (int argc, char * argv[])
+{
+ Args * args;
+ rc_t rc;
+ char *files[256];
+ uint8_t defaultReadNumbers[256];
+ char *name_buffer = NULL;
+ unsigned next_name = 0;
+ unsigned nbsz = 0;
+ char const *value;
+ char *dummy;
+ const XMLLogger* xml_logger = NULL;
+ uint8_t qualityOffset;
+
+ memset(&G, 0, sizeof(G));
+
+ G.mode = mode_Archive;
+ G.maxSeqLen = TableWriterRefSeq_MAX_SEQ_LEN;
+ G.schemaPath = SCHEMAFILE;
+ G.omit_aligned_reads = true;
+ G.omit_reference_reads = true;
+ G.minMapQual = 0; /* accept all */
+ G.tmpfs = "/tmp";
+#if _ARCH_BITS == 32
+ G.cache_size = ( size_t ) 1 << 30;
+#else
+ G.cache_size = ( size_t ) 10 << 30;
+#endif
+ G.maxErrCount = 1000;
+ G.maxErrPct = 5;
+ G.acceptNoMatch = true;
+ G.minMatchCount = 0;
+ G.QualQuantizer="0";
+
+ set_pid();
+
+ rc = ArgsMakeAndHandle (&args, argc, argv, 2, Options,
+ sizeof Options / sizeof (OptDef), XMLLogger_Args, XMLLogger_ArgsQty);
+
+ while (rc == 0) {
+ uint32_t pcount;
+
+ if( (rc = XMLLogger_Make(&xml_logger, NULL, args)) != 0 ) {
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_TMPFS, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_TMPFS, 0, &G.tmpfs);
+ if (rc)
+ break;
+ }
+ else if (pcount > 1)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+ OUTMSG (("Single parameter required\n"));
+ MiniUsage (args);
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_OUTPUT, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_OUTPUT, 0, &G.outpath);
+ if (rc)
+ break;
+ }
+ else if (pcount > 1)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+ OUTMSG (("Single output parameter required\n"));
+ MiniUsage (args);
+ break;
+ }
+ else {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+ OUTMSG (("Output parameter required\n"));
+ MiniUsage (args);
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_QCOMP, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_QCOMP, 0, &G.QualQuantizer);
+ if (rc)
+ break;
+ }
+
+ rc = ArgsOptionCount (args, OPTION_CACHE_SIZE, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_CACHE_SIZE, 0, &value);
+ if (rc)
+ break;
+ G.cache_size = strtoul(value, &dummy, 0) * 1024UL * 1024UL;
+ if (G.cache_size == 0 || G.cache_size == ULONG_MAX) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+ OUTMSG (("cache-size: bad value\n"));
+ MiniUsage (args);
+ break;
+ }
+ }
+
+ G.expectUnsorted = true;
+
+ rc = ArgsOptionCount (args, OPTION_MAX_REC_COUNT, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_MAX_REC_COUNT, 0, &value);
+ if (rc)
+ break;
+ G.maxAlignCount = strtoul(value, &dummy, 0);
+ }
+
+ rc = ArgsOptionCount (args, OPTION_MAX_ERR_COUNT, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_MAX_ERR_COUNT, 0, &value);
+ if (rc)
+ break;
+ G.maxErrCount = strtoul(value, &dummy, 0);
+ }
+
+ rc = ArgsOptionCount (args, OPTION_MAX_ERR_PCT, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_MAX_ERR_PCT, 0, &value);
+ if (rc)
+ break;
+ G.maxErrPct = strtoul(value, &dummy, 0);
+ }
+
+ rc = ArgsOptionCount (args, OPTION_PLATFORM, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_PLATFORM, 0, &value);
+ if (rc)
+ break;
+ G.platform = PlatformToId(value);
+ if (G.platform == SRA_PLATFORM_UNDEFINED)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Invalid platform $(v)",
+ "v=%s", value));
+ break;
+ }
+ }
+ else
+ G.platform = SRA_PLATFORM_UNDEFINED;
+
+ rc = ArgsOptionCount (args, OPTION_QUALITY, &pcount);
+ if (rc)
+ break;
+ if (pcount == 1)
+ {
+ rc = ArgsOptionValue (args, OPTION_QUALITY, 0, &value);
+ if (rc)
+ break;
+ if (strcmp(value, "PHRED_33") == 0)
+ qualityOffset = 33;
+ else if (strcmp(value, "PHRED_64") == 0)
+ qualityOffset = 64;
+ else
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Invalid quality encoding $(v)",
+ "v=%s", value));
+ break;
+ }
+ }
+ else
+ qualityOffset = 0;
+
+ rc = ArgsParamCount (args, &pcount);
+ if (rc) break;
+ if (pcount == 0)
+ {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+ MiniUsage (args);
+ break;
+ }
+ else if (pcount > sizeof(files)/sizeof(files[0])) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+ (void)PLOGERR(klogErr, (klogErr, rc, "$(count) input files is too many, $(max) is the limit",
+ "count=%u,max=%u", (unsigned)pcount, (unsigned)(sizeof(files)/sizeof(files[0]))));
+ break;
+ }
+ else {
+ unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0;
+ unsigned i;
+
+ for (i = 0; i < pcount; ++i) {
+ rc = ArgsParamValue(args, i, &value);
+ if (rc) break;
+ need += strlen(value) + 1;
+ }
+ nbsz = need;
+ }
+
+ name_buffer = malloc(nbsz);
+ if (name_buffer == NULL) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+ break;
+ }
+
+ rc = ArgsParamCount (args, &pcount);
+ if (rc == 0) {
+ unsigned i;
+
+ for (i = 0; i < pcount; ++i) {
+ rc = ArgsParamValue(args, i, &value);
+ if (rc) break;
+
+ defaultReadNumbers[i] = 0;
+ files[i] = name_buffer + next_name;
+ rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath);
+ if (rc) break;
+ next_name += strlen(name_buffer + next_name) + 1;
+ }
+ }
+ else
+ break;
+
+ rc = run(argv[0], &G, pcount, (char const **)files, qualityOffset, defaultReadNumbers);
+ break;
+ }
+ free(name_buffer);
+
+ value = G.outpath ? strrchr(G.outpath, '/') : "/???";
+ if( value == NULL ) {
+ value = G.outpath;
+ } else {
+ value++;
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "load failed",
+ "severity=total,status=failure,accession=%s,errors=%u", value, G.errCount));
+ } else {
+ (void)PLOGMSG(klogInfo, (klogInfo, "loaded",
+ "severity=total,status=success,accession=%s,errors=%u", value, G.errCount));
+ }
+ ArgsWhack(args);
+ XMLLogger_Release(xml_logger);
+ return rc;
+}
diff --git a/tools/fastq-loader/fastq-parse.h b/tools/fastq-loader/fastq-parse.h
new file mode 100644
index 0000000..fdd4d2d
--- /dev/null
+++ b/tools/fastq-loader/fastq-parse.h
@@ -0,0 +1,140 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_fastq_scan_
+#define _h_fasta_scan_
+
+#include <align/extern.h>
+#include <klib/text.h>
+
+#include <loader/common-reader-priv.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* values used in validating quality lines */
+#define MIN_PHRED_33 33
+#define MAX_PHRED_33 74
+#define MIN_PHRED_64 64
+#define MAX_PHRED_64 127
+
+struct FastqSequence
+{
+ Sequence_vt sequence_vt;
+ KRefcount refcount;
+
+ /* tagline components: */
+ String spotname; /* tag line up to and including coordinates */
+ String spotgroup; /* token following '#' */
+ uint8_t readnumber; /* token following '/' 1 - IsFirst, 2 - IsSecond, 0 - dont know */
+
+ /* not populated at this time: */
+#if 0
+ String rungroup;
+ String fmt_name; /* x and y replaced with $X and $Y */
+ uint8_t coord_num;
+ int32_t coords[16];
+#endif
+
+ char* read;
+ bool is_colorspace;
+
+ String quality;
+ uint8_t qualityOffset;
+
+ bool lowQuality;
+};
+
+struct FastqRecord
+{
+ Record dad;
+
+ KDataBuffer source;
+ struct FastqSequence seq;
+ Rejected* rej;
+};
+
+typedef struct FASTQToken
+{
+ const char* tokenText;
+ size_t tokenLength;
+ size_t line_no;
+ size_t column_no;
+} FASTQToken;
+
+typedef struct FASTQParseBlock
+{
+ void* self;
+ size_t (CC *input)(struct FASTQParseBlock* sb, char* buf, size_t max_size);
+ uint8_t phredOffset;
+
+ void* scanner;
+ size_t length; /* input characters consumed for the current record */
+ FASTQToken* lastToken;
+ struct FastqRecord* record;
+ size_t column;
+
+ /* temporaries for bison: */
+ KDataBuffer tagLine;
+
+ size_t spotNameLength;
+ bool spotNameDone;
+ size_t spotGroupOffset;
+ size_t spotGroupLength;
+
+ KDataBuffer quality;
+ size_t expectedQualityLines;
+
+ uint8_t defaultReadNumber;
+
+ bool fatalError;
+} FASTQParseBlock;
+
+extern rc_t CC FASTQScan_yylex_init(FASTQParseBlock* context, bool debug);
+extern void CC FASTQScan_yylex_destroy(FASTQParseBlock* context);
+
+/* explicit FLEX state control for bison*/
+extern void CC FASTQScan_inline_sequence(FASTQParseBlock* pb);
+extern void CC FASTQScan_inline_quality(FASTQParseBlock* pb);
+
+extern void CC FASTQ_set_lineno (int line_number, void* scanner);
+
+extern int CC FASTQ_lex(FASTQToken* pb, void * scanner);
+extern void CC FASTQ_unlex(FASTQParseBlock* pb, FASTQToken* token);
+extern void CC FASTQ_qualityContext(FASTQParseBlock* pb);
+
+extern int FASTQ_debug; /* set to 1 to print Bison trace */
+
+extern int CC FASTQ_parse(FASTQParseBlock* pb); /* 0 = end of input, 1 = success, a new record is in context->record, 2 - syntax error */
+
+extern void CC FASTQ_error(FASTQParseBlock* pb, const char* msg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_fastq_scan_ */
diff --git a/tools/fastq-loader/fastq-reader.c b/tools/fastq-loader/fastq-reader.c
new file mode 100644
index 0000000..6129920
--- /dev/null
+++ b/tools/fastq-loader/fastq-reader.c
@@ -0,0 +1,701 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct FastqReaderFile FastqReaderFile;
+typedef struct FastqRecord FastqRecord;
+typedef struct FastqSequence FastqSequence;
+
+#define READERFILE_IMPL FastqReaderFile
+#define RECORD_IMPL FastqRecord
+#define SEQUENCE_IMPL FastqSequence
+
+#include "fastq-reader.h"
+#include "fastq-parse.h"
+
+#include <stdlib.h>
+#include <sysalloc.h>
+#include <assert.h>
+#include <string.h>
+
+#include <kapp/loader-file.h>
+#include <kfs/directory.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+static rc_t FastqSequenceInit(FastqSequence* self);
+
+/*--------------------------------------------------------------------------
+ * FastqRecord
+ */
+static rc_t FastqRecordAddRef ( const FastqRecord* self );
+static rc_t FastqRecordRelease ( const FastqRecord* self );
+static rc_t FastqRecordGetSequence ( const FastqRecord* self, const Sequence** result);
+static rc_t FastqRecordGetAlignment ( const FastqRecord* self, const Alignment** result);
+static rc_t FastqRecordGetRejected ( const FastqRecord* self, const Rejected** result);
+
+static Record_vt_v1 FastqRecord_vt =
+{
+ 1, 0,
+ /* start minor version == 0 */
+ FastqRecordAddRef,
+ FastqRecordRelease,
+ FastqRecordGetSequence,
+ FastqRecordGetAlignment,
+ FastqRecordGetRejected,
+ /* end minor version == 0 */
+};
+
+static rc_t CC FastqRecordInit ( FastqRecord* self )
+{
+ assert(self);
+ self->dad.vt.v1 = & FastqRecord_vt;
+ KDataBufferMakeBytes ( & self->source, 0 );
+ self->rej = 0;
+ return FastqSequenceInit(& self->seq);
+}
+
+static rc_t FastqRecordWhack( const FastqRecord* cself )
+{
+ rc_t rc = 0;
+ FastqRecord* self = (FastqRecord*)cself;
+ assert(self);
+
+ free((void*)self->seq.read);
+
+ rc = KDataBufferWhack( & self->source );
+
+ if (rc)
+ RejectedRelease(self->rej);
+ else
+ rc = RejectedRelease(self->rej);
+
+ free(self);
+
+ return rc;
+}
+
+static rc_t FastqRecordAddRef( const FastqRecord* self )
+{
+ assert(self);
+ KRefcountAdd( & self->seq.refcount, "FastqRecord" );
+ /* TODO: handle rc from KRefcountAdd */
+ return 0;
+}
+
+static rc_t FastqRecordRelease( const FastqRecord* cself )
+{
+ if ( cself != NULL )
+ {
+ FastqRecord *self = ( FastqRecord* ) cself;
+ switch ( KRefcountDrop ( & self ->seq.refcount, "FastqRecord" ) )
+ {
+ case krefWhack:
+ FastqRecordWhack( self );
+ break;
+ default:
+ /* TODO: handle other values */
+ break;
+ }
+ }
+ return 0;
+}
+
+static rc_t FastqRecordGetSequence( const FastqRecord* self, const Sequence** result )
+{
+ rc_t rc = 0;
+ assert(result);
+ *result = 0;
+ if (self->rej == 0)
+ {
+ rc = FastqRecordAddRef(self);
+ if (rc == 0)
+ *result = (const Sequence*) & self->seq;
+ }
+ return rc;
+}
+
+static rc_t FastqRecordGetAlignment( const FastqRecord* self, const Alignment** result)
+{
+ *result = 0;
+ return 0;
+}
+
+static rc_t FastqRecordGetRejected( const FastqRecord* self, const Rejected** result)
+{
+ rc_t rc = 0;
+ assert(result);
+ *result = 0;
+ if (self->rej != 0)
+ {
+ rc = RejectedAddRef(self->rej);
+ if (rc == 0)
+ *result = self->rej;
+ }
+ return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * FastqSequence
+ */
+
+static rc_t FastqSequenceAddRef ( const SEQUENCE_IMPL* self );
+static rc_t FastqSequenceRelease ( const SEQUENCE_IMPL* self );
+static rc_t FastqSequenceGetReadLength ( const SEQUENCE_IMPL *self, uint32_t *length );
+static rc_t FastqSequenceGetRead ( const SEQUENCE_IMPL *self, char *sequence );
+static rc_t FastqSequenceGetRead2 ( const SEQUENCE_IMPL *self, char *sequence, uint32_t start, uint32_t stop );
+static rc_t FastqSequenceGetQuality ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+static rc_t FastqSequenceGetSpotGroup ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+static rc_t FastqSequenceGetSpotName ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+static bool FastqSequenceIsColorSpace ( const SEQUENCE_IMPL *self );
+static rc_t FastqSequenceGetCSKey ( const SEQUENCE_IMPL *self, char cskey[1] );
+static rc_t FastqSequenceGetCSReadLength ( const SEQUENCE_IMPL *self, uint32_t *length );
+static rc_t FastqSequenceGetCSRead ( const SEQUENCE_IMPL *self, char *sequence );
+static rc_t FastqSequenceGetCSQuality ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+static bool FastqSequenceRecordWasPaired ( const SEQUENCE_IMPL *self );
+static int FastqSequenceGetOrientationSelf ( const SEQUENCE_IMPL *self );
+static int FastqSequenceGetOrientationMate ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceRecordIsFirst ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceRecordIsSecond ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceIsDuplicate ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceIsLowQuality ( const SEQUENCE_IMPL *self );
+static rc_t FastqSequenceGetTI ( const SEQUENCE_IMPL *self, uint64_t *ti );
+
+static Sequence_vt_v1 FastqSequence_vt =
+{
+ 1, 0,
+ /* start minor version == 0 */
+ FastqSequenceAddRef,
+ FastqSequenceRelease,
+ FastqSequenceGetReadLength,
+ FastqSequenceGetRead,
+ FastqSequenceGetRead2,
+ FastqSequenceGetQuality,
+ FastqSequenceGetSpotGroup,
+ FastqSequenceGetSpotName,
+ FastqSequenceIsColorSpace,
+ FastqSequenceGetCSKey,
+ FastqSequenceGetCSReadLength,
+ FastqSequenceGetCSRead,
+ FastqSequenceGetCSQuality,
+ FastqSequenceRecordWasPaired,
+ FastqSequenceGetOrientationSelf,
+ FastqSequenceGetOrientationMate,
+ FastqSequenceRecordIsFirst,
+ FastqSequenceRecordIsSecond,
+ FastqSequenceIsDuplicate,
+ FastqSequenceIsLowQuality,
+ FastqSequenceGetTI,
+ /* end minor version == 0 */
+};
+
+static
+rc_t
+FastqSequenceInit(FastqSequence* self)
+{
+ self->sequence_vt.v1 = & FastqSequence_vt;
+ KRefcountInit ( & self -> refcount, 1, "FastqSequence", "FastqSequenceInit", "");
+
+ StringInit(&self->spotname, 0, 0, 0);
+ StringInit(&self->spotgroup, 0, 0, 0);
+ self->readnumber = 0;
+
+ self->read = 0;
+ self->is_colorspace = false;
+ StringInit(&self->quality, 0, 0, 0);
+ self->qualityOffset = 0;
+ self->lowQuality = false;
+
+ return 0;
+}
+
+static const FastqRecord*
+FastqSequenceToRecord(const FastqSequence* seq)
+{
+ return ( const FastqRecord * ) ( (uint8_t*)seq - offsetof ( FastqRecord, seq ) );
+}
+
+static rc_t FastqSequenceAddRef( const FastqSequence* self )
+{
+ switch (KRefcountAdd( & self->refcount, "FastqSequence" ))
+ {
+ case krefLimit:
+ return RC ( RC_MODULE, rcData, rcAttaching, rcRange, rcExcessive );
+ case krefNegative:
+ return RC ( RC_MODULE, rcData, rcAttaching, rcRefcount, rcInvalid );
+ }
+ return 0;
+}
+
+static rc_t FastqSequenceRelease( const FastqSequence* self )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "FastqSequence" ) )
+ {
+ case krefWhack:
+ return FastqRecordWhack ( FastqSequenceToRecord(self) );
+
+ case krefNegative:
+ return RC ( RC_MODULE, rcData, rcDestroying, rcSelf, rcDestroyed );
+ }
+ }
+
+ return 0;
+
+}
+
+static rc_t FastqSequenceGetReadLength ( const FastqSequence *self, uint32_t *length )
+{
+ assert(self);
+ if ( self->read == NULL || self->is_colorspace )
+ {
+ *length = 0;
+ }
+ else
+ {
+ *length = string_measure(self->read, NULL);
+ }
+ return 0;
+}
+
+static rc_t FastqSequenceGetRead ( const FastqSequence *self, char *sequence )
+{
+ assert(self);
+ assert(sequence);
+ if ( self->read != NULL && !self->is_colorspace )
+ {
+ uint32_t length = string_measure(self->read, NULL);
+ string_copy(sequence, length, self->read, length);
+ }
+ return 0;
+}
+
+static rc_t FastqSequenceGetRead2 ( const FastqSequence *self, char *sequence, uint32_t start, uint32_t stop )
+{
+ assert(self);
+ assert(sequence);
+ if ( self->read == NULL || self->is_colorspace )
+ {
+ return RC( RC_MODULE, rcData, rcAccessing, rcItem, rcEmpty );
+ }
+ else
+ {
+ uint32_t length = string_measure(self->read, NULL);
+ if (start >= length || stop >= length || start >= stop)
+ {
+ return RC( RC_MODULE, rcData, rcAccessing, rcRange, rcInvalid);
+ }
+ string_copy(sequence, stop - start, self->read + start, stop - start);
+ }
+ return 0;
+}
+
+static rc_t FastqSequenceGetQuality ( const FastqSequence *self, const int8_t **quality, uint8_t *offset, int *qualType )
+{
+ assert(self);
+ assert(quality);
+ assert(offset);
+ assert(qualType);
+ *quality = NULL;
+ if ( self->quality.size != 0)
+ {
+ *quality = (const int8_t *)self->quality.addr;
+ *offset = self->qualityOffset;
+ }
+ else
+ {
+ *quality = NULL;
+ *offset = 0;
+ }
+ *qualType = QT_Phred;
+ return 0;
+}
+
+static rc_t FastqSequenceGetSpotGroup ( const FastqSequence *self, const char **name, size_t *length )
+{
+ assert(self);
+ assert(name);
+ *name = self->spotgroup.addr;
+ *length = self->spotgroup.len;
+ return 0;
+}
+
+static rc_t FastqSequenceGetSpotName ( const FastqSequence *self, const char **name, size_t *length )
+{
+ assert(self);
+ assert(name);
+ *name = self->spotname.addr;
+ *length = self->spotname.len;
+ return 0;
+}
+
+static bool FastqSequenceIsColorSpace ( const FastqSequence *self )
+{
+ assert(self);
+ return self->is_colorspace;
+}
+
+static rc_t FastqSequenceGetCSKey ( const FastqSequence *self, char cskey[1] )
+{
+ assert(self);
+ if (self->is_colorspace)
+ cskey[0] = self->read[0];
+ return 0;
+}
+
+static rc_t FastqSequenceGetCSReadLength ( const FastqSequence *self, uint32_t *length )
+{
+ assert(self);
+ if ( self->read == NULL )
+ {
+ *length = 0;
+ }
+ else if (self->is_colorspace)
+ {
+ *length = string_measure(self->read + 1, NULL);
+ }
+ return 0;
+}
+
+static rc_t FastqSequenceGetCSRead ( const FastqSequence *self, char *sequence )
+{
+ assert(self);
+ assert(sequence);
+ if ( self->read != NULL && self->is_colorspace )
+ {
+ uint32_t length = string_measure(self->read + 1, NULL);
+ string_copy(sequence, length, self->read + 1, length);
+ }
+ return 0;
+}
+
+static rc_t FastqSequenceGetCSQuality ( const FastqSequence *self, const int8_t **quality, uint8_t *offset, int *qualType )
+{
+ assert(self);
+ assert(quality);
+ assert(offset);
+ assert(qualType);
+ *quality = NULL;
+ if ( self->quality.size != 0 && self->is_colorspace )
+ {
+ *quality = (const int8_t *)self->quality.addr + 1;
+ *offset = self->qualityOffset;
+ }
+ else
+ {
+ *quality = NULL;
+ *offset = 0;
+ }
+ *qualType = QT_Phred;
+ return 0;
+}
+
+static bool FastqSequenceRecordWasPaired ( const FastqSequence *self )
+{
+ assert(self);
+ return self->readnumber != 0;
+}
+
+static int FastqSequenceGetOrientationSelf ( const FastqSequence *self )
+{
+ assert(self);
+ return ReadOrientationUnknown;
+}
+
+static int FastqSequenceGetOrientationMate ( const FastqSequence *self )
+{
+ assert(self);
+ return ReadOrientationUnknown;
+}
+
+static bool FastqSequenceRecordIsFirst ( const FastqSequence *self )
+{
+ assert(self);
+ return self->readnumber == 1;
+}
+
+static bool FastqSequenceRecordIsSecond ( const FastqSequence *self )
+{
+ assert(self);
+ return self->readnumber == 2;
+}
+
+static bool FastqSequenceIsDuplicate ( const SEQUENCE_IMPL *self )
+{
+ assert(self);
+ return 0;
+}
+
+static bool FastqSequenceIsLowQuality ( const SEQUENCE_IMPL *self )
+{
+ assert(self);
+ return self->lowQuality;
+}
+
+static rc_t FastqSequenceGetTI ( const SEQUENCE_IMPL *self, uint64_t *ti )
+{
+ assert(self);
+ return false;
+}
+
+/*--------------------------------------------------------------------------
+ * FastqReaderFile
+ */
+
+static rc_t FastqReaderFileWhack( READERFILE_IMPL* self );
+static rc_t FastqReaderFileGetRecord ( const READERFILE_IMPL *self, const Record** result );
+static float FastqReaderFileGetProportionalPosition ( const READERFILE_IMPL *self );
+static rc_t FastqReaderFileGetReferenceInfo ( const READERFILE_IMPL *self, const ReferenceInfo** result );
+
+static ReaderFile_vt_v1 FastqReaderFile_vt =
+{
+ 1, 0,
+ /* start minor version == 0 */
+ FastqReaderFileWhack,
+ FastqReaderFileGetRecord,
+ FastqReaderFileGetProportionalPosition,
+ FastqReaderFileGetReferenceInfo,
+ /* end minor version == 0 */
+};
+
+struct FastqReaderFile
+{
+ ReaderFile dad;
+
+ FASTQParseBlock pb;
+ const KLoaderFile* reader;
+
+ const char* recordStart; /* raw source of the record being currently parsed */
+ size_t curPos; /* current tokenization position relative to recordStart */
+ bool lastEol;
+ bool eolInserted;
+};
+
+rc_t FastqReaderFileWhack( FastqReaderFile* f )
+{
+ FastqReaderFile* self = (FastqReaderFile*) f;
+
+ FASTQScan_yylex_destroy(& self->pb);
+
+ if (self->reader)
+ KLoaderFile_Release ( self->reader, true );
+
+ ReaderFileWhack( &self->dad );
+
+ free ( self );
+ return 0;
+}
+
+rc_t FastqReaderFileGetRecord ( const FastqReaderFile *f, const Record** result )
+{
+ rc_t rc;
+ FastqReaderFile* self = (FastqReaderFile*) f;
+
+ if (self->pb.fatalError)
+ return 0;
+
+ self->pb.record = (FastqRecord*)malloc(sizeof(FastqRecord));
+ if (self->pb.record == NULL)
+ {
+ rc = RC ( RC_MODULE, rcData, rcAllocating, rcMemory, rcExhausted );
+ return 0;
+ }
+ rc = FastqRecordInit(self->pb.record);
+ if (rc != 0)
+ return rc;
+
+ self->pb.length = 0;
+ KDataBufferResize( & self->pb.tagLine, 0 );
+ KDataBufferResize( & self->pb.quality, 0 );
+ self->pb.spotNameDone = false;
+
+ if ( FASTQ_parse( & self->pb ) == 0 && self->pb.record->rej == 0 )
+ { /* normal end of input */
+ RecordRelease((const Record*)self->pb.record);
+ *result = 0;
+ return 0;
+ }
+
+ /*TODO: remove? compensate for an artificially inserted trailing \n */
+ if ( self->eolInserted )
+ {
+ -- self->pb.length;
+ self->eolInserted = false;
+ }
+
+ if (self->pb.record->rej != 0) /* had error(s) */
+ { /* save the complete raw source in the Rejected object */
+ StringInit(& self->pb.record->rej->source, string_dup(self->recordStart, self->pb.length), self->pb.length, self->pb.length);
+ self->pb.record->rej->fatal = self->pb.fatalError;
+ }
+
+ if (rc == 0 && self->reader != 0)
+ {
+ /* advance the record start pointer beyond the last token */
+ size_t length;
+ rc = KLoaderFile_Read( self->reader, self->pb.length, 0, (const void**)& self->recordStart, & length);
+ if (rc != 0)
+ LogErr(klogErr, rc, "FastqReaderFileGetRecord failed");
+
+ self->curPos -= self->pb.length;
+ }
+
+ StringInit( & self->pb.record->seq.spotname, (const char*)self->pb.tagLine.base, self->pb.spotNameLength, self->pb.spotNameLength);
+ StringInit( & self->pb.record->seq.spotgroup, (const char*)self->pb.tagLine.base + self->pb.spotGroupOffset, self->pb.spotGroupLength, self->pb.spotGroupLength);
+ StringInit( & self->pb.record->seq.quality, (const char*)self->pb.quality.base, self->pb.quality.elem_count, self->pb.quality.elem_count);
+ self->pb.record->seq.qualityOffset = self->pb.phredOffset;
+
+ if (self->pb.record->seq.readnumber == 0)
+ self->pb.record->seq.readnumber = self->pb.defaultReadNumber;
+
+ *result = (const Record*) self->pb.record;
+
+ return rc;
+}
+
+void CC FASTQ_error(struct FASTQParseBlock* sb, const char* msg)
+{
+ if (sb->record->rej == 0)
+ { /* save the error information in the Rejected object */
+ sb->record->rej = (Rejected*)malloc(sizeof(Rejected));
+ RejectedInit(sb->record->rej);
+
+ sb->record->rej->message = string_dup(msg, strlen(msg));
+ sb->record->rej->line = sb->lastToken->line_no;
+ sb->record->rej->column = sb->lastToken->column_no;
+ }
+ /* subsequent errors in this record will be ignored */
+}
+
+size_t CC FASTQ_input(FASTQParseBlock* pb, char* buf, size_t max_size)
+{
+ FastqReaderFile* self = (FastqReaderFile*)pb->self;
+ size_t length;
+
+ rc_t rc = KLoaderFile_Read( self->reader, 0, self->curPos + max_size, (const void**)& self->recordStart, & length);
+
+ if ( rc != 0 )
+ {
+ LogErr(klogErr, rc, "FASTQ_input failed");
+ return 0;
+ }
+
+ length -= self->curPos;
+ if ( length == 0 ) /* nothing new read = end of file */
+ { /* insert an additional \n before the end of file if missing */
+ if ( !self->lastEol )
+ {
+ buf[0] = '\n';
+ self->eolInserted = true;
+ self->lastEol = true;
+ return 1;
+ }
+ else
+ {
+ return 0; /* signal EOF to flex */
+ }
+ }
+
+ memcpy(buf, self->recordStart + self->curPos, length);
+ self->lastEol = ( buf[length-1] == '\n' );
+ self->curPos += length;
+ return length;
+}
+
+rc_t CC FastqReaderFileMake( const ReaderFile **reader, const KDirectory* dir, const char* file, uint8_t phredOffset, uint8_t defaultReadNumber)
+{
+ rc_t rc;
+ FastqReaderFile* self = (FastqReaderFile*) malloc ( sizeof * self );
+ if ( self == NULL )
+ {
+ rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
+ }
+ else
+ {
+ memset(self, 0, sizeof(*self));
+ rc = ReaderFileInit ( self );
+ self->dad.vt.v1 = & FastqReaderFile_vt;
+
+ self->dad.pathname = string_dup(file, strlen(file)+1);
+ if ( self->dad.pathname == NULL )
+ {
+ rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
+ }
+ else
+ {
+ rc = KLoaderFile_Make( & self->reader, dir, file, 0, true );
+ }
+ if (rc == 0)
+ {
+ self->pb.self = self;
+ self->pb.input = FASTQ_input;
+ self->pb.phredOffset = phredOffset;
+ /* TODO:
+ if phredOffset is 0,
+ guess based on the raw values on the first quality line:
+ if all values are above MAX_PHRED_33, phredOffset = 64
+ if all values are in MIN_PHRED_33..MAX_PHRED_33, phredOffset = 33
+ if any value is below MIN_PHRED_33, abort
+ if the guess is 33 and proven wrong (a raw quality value >MAX_PHRED_33 is encountered and no values below MIN_PHRED_64 ever seen)
+ reopen the file,
+ phredOffset = 64
+ try to parse again
+ if a value below MIN_PHRED_64 seen, abort
+ */
+ self->pb.defaultReadNumber = defaultReadNumber;
+
+ rc = FASTQScan_yylex_init(& self->pb, true);
+ if (rc == 0)
+ {
+ *reader = (const ReaderFile *) self;
+ }
+ else
+ {
+ KLoaderFile_Release( self->reader, true );
+ ReaderFileRelease( & self->dad );
+ *reader = 0;
+ }
+ }
+ else
+ {
+ ReaderFileRelease( & self->dad );
+ *reader = 0;
+ }
+ }
+
+ return rc;
+}
+
+float FastqReaderFileGetProportionalPosition ( const READERFILE_IMPL *self )
+{
+ return 0.0f;
+}
+
+rc_t FastqReaderFileGetReferenceInfo ( const READERFILE_IMPL *self, const ReferenceInfo** result )
+{
+ *result = NULL;
+ return 0;
+}
diff --git a/tools/fastq-loader/fastq-reader.h b/tools/fastq-loader/fastq-reader.h
new file mode 100644
index 0000000..bd92150
--- /dev/null
+++ b/tools/fastq-loader/fastq-reader.h
@@ -0,0 +1,50 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_fastq_reader_
+#define _h_fastq_reader_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KDirectory;
+struct ReaderFile;
+
+rc_t CC FastqReaderFileMake( const struct ReaderFile **self, const struct KDirectory* dir, const char* file, uint8_t phredOffset, uint8_t defaultReadNumber);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_fastq_reader_ */
diff --git a/tools/fastq-loader/fastq-tokens.h b/tools/fastq-loader/fastq-tokens.h
new file mode 100644
index 0000000..bcb059d
--- /dev/null
+++ b/tools/fastq-loader/fastq-tokens.h
@@ -0,0 +1,64 @@
+/* A Bison parser, made by GNU Bison 2.5. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ fqENDOFTEXT = 0,
+ fqNUMBER = 258,
+ fqALPHANUM = 259,
+ fqWS = 260,
+ fqENDLINE = 261,
+ fqBASESEQ = 262,
+ fqCOLORSEQ = 263,
+ fqTOKEN = 264,
+ fqASCQUAL = 265,
+ fqUNRECOGNIZED = 266
+ };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+
+
diff --git a/tools/fastq-loader/latf-load.vers b/tools/fastq-loader/latf-load.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/fastq-loader/latf-load.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/fastq-loader/loader-imp.c b/tools/fastq-loader/loader-imp.c
new file mode 100644
index 0000000..e75f860
--- /dev/null
+++ b/tools/fastq-loader/loader-imp.c
@@ -0,0 +1,242 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kdb/btree.h>
+#include <kdb/meta.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+
+#include <kapp/loader-meta.h>
+#include <kapp/main.h>
+
+#include <kfs/directory.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/vdb-priv.h>
+
+#include <loader/common-reader.h>
+#include <loader/common-writer.h>
+#include <loader/sequence-writer.h>
+#include <loader/reference-writer.h>
+
+#include "fastq-reader.h"
+
+rc_t AcrhiveFASTQ(CommonWriterSettings* G,
+ VDBManager *mgr,
+ VDatabase *db,
+ unsigned seqFiles,
+ char const *seqFile[],
+ uint8_t qualityOffset,
+ const uint8_t defaultReadNumbers[])
+{
+ rc_t rc = 0;
+ unsigned i;
+ CommonWriter cw;
+
+ KDirectory *dir;
+ rc = KDirectoryNativeDir(&dir);
+ if (rc != 0)
+ return rc;
+
+ rc = CommonWriterInit( &cw, mgr, db, G);
+ if (rc != 0)
+ {
+ KDirectoryRelease(dir);
+ return rc;
+ }
+
+ for (i = 0; i < seqFiles; ++i) {
+ const ReaderFile *reader;
+ rc = FastqReaderFileMake(&reader, dir, seqFile[i], qualityOffset, defaultReadNumbers[i]);
+ if (rc == 0)
+ {
+ rc = CommonWriterArchive( &cw, reader );
+ if (rc != 0)
+ ReaderFileRelease(reader);
+ else
+ rc = ReaderFileRelease(reader);
+ }
+ if (rc != 0)
+ break;
+ }
+ if (rc == 0)
+ rc = CommonWriterComplete( &cw, Quitting() != 0 );
+ else
+ CommonWriterComplete( &cw, true );
+
+ G->errCount = cw.err_count;
+
+ if (rc == 0)
+ rc = CommonWriterWhack( &cw );
+ else
+ CommonWriterWhack( &cw );
+
+ if (rc == 0)
+ rc = KDirectoryRelease(dir);
+ else
+ KDirectoryRelease(dir);
+
+ if (rc == 0) {
+ (void)LOGMSG(klogInfo, "Successfully loaded all files");
+ }
+ return rc;
+}
+
+rc_t WriteLoaderSignature(KMetadata *meta, char const progName[])
+{
+ KMDataNode *node;
+ rc_t rc = KMetadataOpenNodeUpdate(meta, &node, "/");
+
+ if (rc == 0) {
+ rc = KLoaderMeta_Write(node, progName, __DATE__, "FASTQ", KAppVersion());
+ KMDataNodeRelease(node);
+ }
+ if (rc) {
+ (void)LOGERR(klogErr, rc, "Cannot update loader meta");
+ }
+ return rc;
+}
+
+rc_t OpenPath(char const path[], KDirectory **dir)
+{
+ KDirectory *p;
+ rc_t rc = KDirectoryNativeDir(&p);
+
+ if (rc == 0) {
+ rc = KDirectoryOpenDirUpdate(p, dir, false, path);
+ KDirectoryRelease(p);
+ }
+ return rc;
+}
+
+rc_t ConvertDatabaseToUnmapped(VDatabase* db)
+{
+ VTable* tbl;
+ rc_t rc = VDatabaseOpenTableUpdate(db, &tbl, "SEQUENCE");
+ if (rc == 0)
+ {
+ rc = VTableRenameColumn(tbl, false, "CMP_ALTREAD", "ALTREAD");
+ if (rc == 0 || GetRCState(rc) == rcNotFound)
+ rc = VTableRenameColumn(tbl, false, "CMP_READ", "READ");
+/* if (rc == 0 || GetRCState(rc) == rcNotFound)
+ rc = VTableRenameColumn(tbl, false, "CMP_ALTCSREAD", "ALTCSREAD");
+ if (rc == 0 || GetRCState(rc) == rcNotFound)
+ rc = VTableRenameColumn(tbl, false, "CMP_CSREAD", "CSREAD");*/
+ if (GetRCState(rc) == rcNotFound)
+ rc = 0;
+ rc = VTableRelease(tbl);
+ }
+ return rc;
+}
+
+rc_t run(char const progName[], CommonWriterSettings* G, unsigned seqFiles, const char *seqFile[], uint8_t qualityOffset, const uint8_t defaultReadNumbers[])
+{
+ VDBManager *mgr;
+ rc_t rc;
+ rc_t rc2;
+ char const *db_type = "NCBI:align:db:alignment_sorted";
+
+ rc = VDBManagerMakeUpdate(&mgr, NULL);
+ if (rc) {
+ (void)LOGERR (klogErr, rc, "failed to create VDB Manager!");
+ }
+ else {
+ VSchema *schema;
+
+ rc = VDBManagerMakeSchema(mgr, &schema);
+ if (rc) {
+ (void)LOGERR (klogErr, rc, "failed to create schema");
+ }
+ else {
+ (void)(rc = VSchemaAddIncludePath(schema, G->schemaIncludePath));
+ rc = VSchemaParseFile(schema, G->schemaPath);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "failed to parse schema file $(file)", "file=%s", G->schemaPath));
+ }
+ else {
+ VDatabase *db;
+
+ rc = VDBManagerCreateDB(mgr, &db, schema, db_type, kcmInit + kcmMD5, G->outpath);
+ rc2 = VSchemaRelease(schema);
+ if (rc2)
+ (void)LOGERR(klogWarn, rc2, "Failed to release schema");
+ if (rc == 0)
+ rc = rc2;
+ if (rc == 0) {
+ rc = AcrhiveFASTQ(G, mgr, db, seqFiles, seqFile, qualityOffset, defaultReadNumbers);
+ }
+
+ if (rc == 0) {
+ rc = ConvertDatabaseToUnmapped(db);
+ }
+
+ rc2 = VDatabaseRelease(db);
+ if (rc == 0)
+ {
+ if (rc2)
+ (void)LOGERR(klogWarn, rc2, "Failed to close database");
+ rc = rc2;
+ }
+
+ if (rc == 0) {
+ KMetadata *meta;
+ KDBManager *kmgr;
+
+ rc = VDBManagerOpenKDBManagerUpdate(mgr, &kmgr);
+ if (rc == 0) {
+ KDatabase *kdb;
+
+ rc = KDBManagerOpenDBUpdate(kmgr, &kdb, G->outpath);
+ if (rc == 0) {
+ rc = KDatabaseOpenMetadataUpdate(kdb, &meta);
+ KDatabaseRelease(kdb);
+ }
+ KDBManagerRelease(kmgr);
+ }
+ if (rc == 0) {
+ rc = WriteLoaderSignature(meta, progName);
+ KMetadataRelease(meta);
+ }
+ }
+ }
+ rc2 = VDBManagerRelease(mgr);
+ if (rc2)
+ (void)LOGERR(klogWarn, rc2, "Failed to release VDB Manager");
+ if (rc == 0)
+ rc = rc2;
+ }
+ }
+ return rc;
+}
diff --git a/tools/kar/Makefile b/tools/kar/Makefile
index 9b2ed86..99b0798 100644
--- a/tools/kar/Makefile
+++ b/tools/kar/Makefile
@@ -43,15 +43,13 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# std
@@ -62,6 +60,13 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
@@ -89,11 +94,14 @@ KAR_OBJ = \
KAR_LIB = \
-skapp \
+ -lvfs \
+ -lkurl \
+ -lkfg \
+ -lkrypto \
-lkfs \
+ -lkproc \
-lklib \
- -ldl \
- -lz \
- -lbz2
+ -lm
$(BINDIR)/kar: $(KAR_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(KAR_LIB)
@@ -113,17 +121,17 @@ SRA_KAR_OBJ = \
SRA_KAR_LIB = \
-skapp \
- -ssraschema \
- -lsrapath \
-lsradb \
-lvdb \
-lkdb \
+ -lvfs \
+ -lkurl \
-lkfg \
+ -lkrypto \
-lkfs \
+ -lkproc \
-lklib \
- -ldl \
- -lz \
- -lbz2
+ -lm
$(BINDIR)/sra-kar: $(SRA_KAR_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRA_KAR_LIB)
diff --git a/tools/kar/kar.c b/tools/kar/kar.c
index 96a06d1..92c6f2d 100644
--- a/tools/kar/kar.c
+++ b/tools/kar/kar.c
@@ -46,7 +46,6 @@
#include <kapp/main.h>
#include <kapp/args.h>
-#include <fmtdef.h>
#include <stdio.h>
@@ -93,7 +92,7 @@ static const char * directory_usage[] =
static const char * force_usage[] =
{ "(no parameter) this will cause the extract or",
"create to over-write existing files unless",
- "they are write-protected. without this",
+ "they are write-protected. Without this",
"option the program will fail if the archive",
"already exists for a create or the target",
"directory exists for an extract", NULL };
@@ -164,10 +163,12 @@ rc_t CC Usage (const Args * args)
HelpOptionLine (ALIAS_TEST, OPTION_TEST, archive, test_usage);
OUTMSG (("\n"
"Archive:\n"
- " Path to a file that will/does hold the archive of other files\n"
+ " Path to a file that will/does hold the archive of other files.\n"
+ " This can be a full or relative path.\n"
"\n"
"Directory:\n"
- " Required for create or extract command, ignored for test command\n"
+ " Required for create or extract command, ignored for test command.\n"
+ " This can be a full or relative path.\n"
"\n"
"Filters:\n"
" When present these act as include filters.\n"
@@ -183,6 +184,37 @@ rc_t CC Usage (const Args * args)
HelpOptionsStandard ();
+ OUTMSG (("\n"
+ "Use examples:"
+ "\n"
+ " To create an archive named 'example.sra' that contains the same\n"
+ " contents as a subdirectory 'example' of the current directory\n"
+ "\n"
+ " $ %s --%s example.sra --%s example\n",
+ progname, OPTION_CREATE, OPTION_DIRECTORY));
+
+ OUTMSG (("\n"
+ " To replace an existing archive named 'example.sra' with another that contains\n"
+ " the same contents as a subdirectory 'example' of the current directory\n"
+ "\n"
+ " $ %s -%s -%s example.sra -%s example\n",
+ progname, ALIAS_FORCE, ALIAS_CREATE, ALIAS_DIRECTORY));
+
+ OUTMSG (("\n"
+ " To examine in detail the contents of an archive named 'example.sra'\n"
+ "\n"
+ " $ %s --%s --%s example.sra\n",
+ progname, OPTION_LONGLIST, OPTION_TEST));
+
+ OUTMSG (("\n"
+ " To extract the files from an archive named 'example.sra' into\n"
+ " a subdirectory 'example' of the current directory.\n"
+ " NOTE: all extracted files will be read only.\n"
+ "\n"
+ " $ %s --%s example.sra --%s example\n",
+ progname, OPTION_EXTRACT, OPTION_DIRECTORY));
+
+
HelpVersion (fullpath, KAppVersion());
return rc;
@@ -327,6 +359,54 @@ static KSRAFileAlignment get_alignment (const char * str)
}
return sraAlignInvalid;
}
+
+static
+int CC sort_cmp (const void ** l, const void ** r, void * data)
+{
+ KDirectory * d;
+ uint64_t lz, rz;
+ rc_t rc;
+
+ d = data;
+/* lz = l; */
+/* rz = r; */
+
+ rc = KDirectoryFileSize (data, &lz, *l);
+ if (rc == 0)
+ {
+ rc = KDirectoryFileSize (data, &rz, *r);
+ if (rc == 0)
+ {
+ int64_t zdiff;
+
+ zdiff = lz - rz;
+ if (zdiff != 0)
+ return (zdiff < 0) ? -1 : 1;
+ else
+ {
+ size_t lsz = string_size (*l);
+ size_t rsz = string_size (*r);
+
+ return string_cmp (*l, lsz, *r, rsz, lsz+1);
+ }
+ }
+ }
+ return 0; /* dunno just leave it... */
+}
+
+
+static
+rc_t CC sort_size_then_rel_path (const KDirectory * d, struct Vector * v)
+{
+ VectorReorder (v, sort_cmp, (void*)d);
+
+ return 0;
+}
+
+
+
+
+
static
rc_t open_dir_as_archive (const char * path, const KFile ** file)
{
@@ -360,7 +440,7 @@ rc_t open_dir_as_archive (const char * path, const KFile ** file)
}
if (rc == 0)
{
- rc = KDirectoryOpenTocFileRead ( d, file, alignment, pnamesFilter, NULL, NULL );
+ rc = KDirectoryOpenTocFileRead (d, file, alignment, pnamesFilter, NULL, sort_size_then_rel_path );
KDirectoryRelease (d);
}
return rc;
@@ -466,6 +546,14 @@ rc_t open_out_file (const char * path, KFile ** fout)
}
return rc;
}
+
+
+static
+void remove_out_file (const char * path)
+{
+ KDirectoryRemove (kdir, true, path);
+}
+
static
rc_t copy_file (const KFile * fin, KFile *fout)
{
@@ -761,6 +849,12 @@ rc_t run_kar_create(const char * archive, const char * directory)
}
KFileRelease (fout);
free (directorystr);
+
+ if (rc)
+ {
+ remove_out_file (archive);
+ }
+
}
return rc;
}
diff --git a/tools/kar/kar.vers b/tools/kar/kar.vers
index 04b10b4..f90b1af 100644
--- a/tools/kar/kar.vers
+++ b/tools/kar/kar.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/kar/kar.vers.h b/tools/kar/kar.vers.h
deleted file mode 100644
index 4b110aa..0000000
--- a/tools/kar/kar.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define KAR_VERS 0x02010007
diff --git a/tools/kar/sra-kar.c b/tools/kar/sra-kar.c
index 2c771da..67d8745 100644
--- a/tools/kar/sra-kar.c
+++ b/tools/kar/sra-kar.c
@@ -119,6 +119,41 @@ rc_t run ( srakar_parms *pb )
KFile * outfile;
rc_t rc;
+ const SRAMgr *mgr;
+
+ rc = SRAMgrMakeRead ( & mgr );
+ if ( rc != 0 )
+ LOGERR ( klogInt, rc, "failed to open SRAMgr" );
+ else
+ {
+ const SRATable *tbl;
+ rc = SRAMgrOpenTableRead ( mgr, & tbl, pb -> src_path );
+ if ( rc != 0 )
+ PLOGERR ( klogInt, (klogInt, rc,
+ "failed to open SRATable '$(spec)'", "spec=%s",
+ pb -> src_path ));
+ else
+ {
+ rc = KDirectoryCreateFile (pb->dir, &outfile, false, 0446,
+ kcmParents | ( pb->force ? kcmInit : kcmCreate) , pb->dst_path);
+ if (rc == 0)
+ {
+ const KFile * archive;
+
+ rc = SRATableMakeSingleFileArchive (tbl, &archive, pb->lite,
+ NULL);
+ if (rc == 0)
+ {
+ rc = copy_file (archive, outfile);
+ KFileRelease (archive);
+ }
+ KFileRelease (outfile);
+ }
+ SRATableRelease ( tbl );
+ }
+ SRAMgrRelease (mgr);
+ }
+/*
rc = KDirectoryCreateFile (pb->dir, &outfile, false, 0446, kcmParents | ( pb->force ? kcmInit : kcmCreate) , pb->dst_path);
if (rc == 0)
@@ -150,7 +185,7 @@ rc_t run ( srakar_parms *pb )
}
KFileRelease (outfile);
}
-
+*/
return rc;
}
diff --git a/tools/kar/sra-kar.vers b/tools/kar/sra-kar.vers
index 04b10b4..f90b1af 100644
--- a/tools/kar/sra-kar.vers
+++ b/tools/kar/sra-kar.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/kar/sra-kar.vers.h b/tools/kar/sra-kar.vers.h
deleted file mode 100644
index 21cdd87..0000000
--- a/tools/kar/sra-kar.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRA_KAR_VERS 0x02010007
diff --git a/tools/nenctool/Makefile b/tools/nenctool/Makefile
new file mode 100644
index 0000000..f6a51c8
--- /dev/null
+++ b/tools/nenctool/Makefile
@@ -0,0 +1,123 @@
+# ==============================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+USE_GCC_IF_ICC = 1
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/nenctool
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+ nenctool
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# nenctool
+# Copy files from one directory to another while cataloging the contents.
+# XML files can be redirected as well.
+#
+NENCTOOL_SRC = \
+ nenctool
+
+NENCTOOL_OBJ = \
+ $(addsuffix .$(OBJX),$(NENCTOOL_SRC))
+
+NENCTOOL_LIB = \
+ -lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lkproc \
+ -lklib
+
+$(BINDIR)/nenctool: $(NENCTOOL_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(NENCTOOL_LIB)
+
+#-------------------------------------------------------------------------------
+# nenctest
+# Copy files from one directory to another while cataloging the contents.
+# XML files can be redirected as well.
+#
+NENCTEST_SRC = \
+ nenctest
+
+NENCTEST_OBJ = \
+ $(addsuffix .$(OBJX),$(NENCTEST_SRC))
+
+NENCTEST_LIB = \
+ -lkapp \
+ -lvfs \
+ -lkurl \
+ -lkryptotest \
+ -lkfg \
+ -lkfs \
+ -lkproc \
+ -lklib
+
+$(BINDIR)/nenctest: $(NENCTEST_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(NENCTEST_LIB)
diff --git a/tools/nenctool/nenctest.c b/tools/nenctool/nenctest.c
new file mode 100644
index 0000000..fb9fe53
--- /dev/null
+++ b/tools/nenctool/nenctest.c
@@ -0,0 +1,502 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "nenctest.vers.h"
+
+#include <kapp/main.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <krypto/testciphermgr.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h>
+
+#include <assert.h>
+
+
+/* Version EXTERN
+ * return 4-part version code: 0xMMmmrrrr, where
+ * MM = major release
+ * mm = minor release
+ * rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+ return NENCTEST_VERS;
+}
+
+
+#define OPTION_FORCE "force"
+#define ALIAS_FORCE "f"
+static
+const char * force_usage[] =
+{ "force overwrite of existing files", NULL };
+
+
+#define OPTION_CIPHER "cipher"
+#define ALIAS_CIPHER "c"
+static
+const char * cipher_usage[] =
+{ "choose cipher version ",
+ "0-byte oritented vector",
+ "1-vector",
+ "2-vector register",
+ "3-aes-ni",
+ "not all implementatons exist on all platforms",
+ NULL };
+static
+OptDef Options[] =
+{
+ /* name alias max times oparam required fmtfunc help text loc */
+ { OPTION_FORCE, ALIAS_FORCE, NULL, force_usage, 0, false, false },
+ { OPTION_CIPHER, ALIAS_CIPHER, NULL, cipher_usage, 1, true, false }
+};
+
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "nencvalid";
+
+rc_t CC UsageSummary (const char * progname)
+{
+ return KOutMsg (
+ "\n"
+ "Usage:\n"
+ " %s [options] <source-file-path> <destination-file-path>\n"
+ "\n"
+ "Summary:\n"
+ " Copy a file from the first parameter to the second parameter\n"
+ " Encryption, decryption, or re-encryption are the expected purpose.\n"
+ " This is a version of nenctool with some testing features added.\n"
+ " The first added feature is some level of cipher implementation\n"
+ " selection.\n"
+ "\n", progname);
+}
+
+static
+const char * first_usage[] =
+{
+ "The path to a file either in native format",
+};
+
+static
+const char * second_usage[] =
+{
+ "in 'file' URI scheme or in 'ncbi-file'",
+ "URI scheme.",
+ "\"ncbi-file\" scheme adds a query to the \"file\" scheme",
+ "where 'enc' or 'encrypt' means the file is encrypted",
+ "and 'pwfile=<path>' points to a file to get the password",
+ "or 'pwfd=<fd>' refers to a file descriptor from which to",
+ "read a password."
+};
+
+rc_t CC Usage (const Args * args)
+{
+ const char * progname = UsageDefaultName;
+ const char * fullpath = UsageDefaultName;
+ rc_t rc;
+
+ if (args == NULL)
+ rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ else
+ rc = ArgsProgram (args, &fullpath, &progname);
+
+ UsageSummary (progname);
+
+ KOutMsg ("Parameters:\n");
+
+ HelpParamLine ("source-file-path", first_usage);
+ HelpParamLine ("destination-file-path", second_usage);
+
+ KOutMsg ("\nOptions:\n");
+
+ HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+ HelpOptionLine (ALIAS_CIPHER, OPTION_CIPHER, "implementation", cipher_usage);
+
+ HelpOptionsStandard ();
+
+ OUTMSG (("\n"
+ "ncbi-file uri syntax:\n"
+ " 'ncbi-file' uris are based on a combination of the standard\n"
+ " 'file' and 'http' syntax familiar to browser users.\n"
+ " Enclosing questions marks are probably necessary.\n"
+ "\n"
+ " URI syntax is 'scheme:'hierarchical-part'?'query'#'fragment'\n"
+ " scheme:\n"
+ " ncbi-file\n"
+ " hierarchical-part:\n"
+ " this is the same as for scheme file and can be the native form or\n"));
+ OUTMSG ((" the ncbi 'posix' format that matches most flavors of Unix.\n"
+ " Environment variables and short hands such as '~' are not interpreted.\n"
+ " query:\n"
+ " Zero or two symbols separated by the '&'. The whole query can be omitted.\n"
+ " enc or encrypt\n"
+ " pwfile='path to a file containing a password'\n"
+ " pwfd='file descriptor where the password can be read'\n"
+ " If the encrypt is present exactly one of the other two must be present.\n"
+ " fragment:\n"
+ " No fragment is permitted.\n"));
+ OUTMSG (("\n"
+ "password contents:\n"
+ " The file or file descriptor containing the password is read enough to satisfy\n"
+ " the following restriction. The password is terminated by the end of file,\n"
+ " a carriage return or a line feed. The length must be no more than 4096 bytes.\n"
+ " The password file should have limited read access to protect it.\n"));
+
+
+ OUTMSG (("\n"
+ "Use examples:"
+ "\n"
+ " To encrypt a create a file named 'example' with a password from a file\n"
+ " named 'password-file' to a file named 'example.nenc' all in the current\n"
+ " directory:\n"
+ "\n"
+ " $ %s example \"ncbi-file:example.nenc?encrypt&pwfile=password-file\"\n",
+ progname));
+ OUTMSG (("\n"
+ " To decrypt a file named 'example.nenc' with a password from a file\n"
+ " named 'password-file' to a file named 'example' in directories implied\n"
+ " in the command:\n"
+ "\n"
+ " $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=/home/user/password-file\" example\n",
+ progname));
+ OUTMSG (("\n"
+ " To change the encryption of a file from one password to another:\n"
+ "\n"
+ " $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=old-password-file\" \\\n"
+ " \"ncbi-file:example.nenc?encrypt&pwfile=/home/user/new-password-file\"\n",
+ progname));
+
+ HelpVersion (fullpath, KAppVersion());
+
+ return rc;
+}
+
+
+static
+rc_t copy_file (const char * src, const char * dst, const KFile * fin, KFile *fout)
+{
+ rc_t rc;
+ uint8_t buff [64 * 1024];
+ size_t num_read;
+ uint64_t inpos;
+ uint64_t outpos;
+
+ assert (src);
+ assert (dst);
+ assert (fin);
+ assert (fout);
+
+ inpos = 0;
+ outpos = 0;
+
+#if 1
+ for (inpos = 0; ; inpos += num_read)
+ {
+ rc = Quitting ();
+ if (rc)
+ {
+ LOGMSG (klogFatal, "Received quit");
+ break;
+ }
+ else
+ {
+ rc = KFileReadAll (fin, inpos, buff, sizeof (buff), &num_read);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to read from file $(F) at $(P)",
+ "F=%s,P=%lu", src, inpos));
+ break;
+ }
+ else if (num_read)
+ {
+ size_t num_writ;
+
+ rc = KFileWriteAll (fout, inpos, buff, num_read, &num_writ);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to write to file $(F) at $(P)",
+ "F=%s,P=%lu", dst, outpos));
+ break;
+ }
+ else if (num_writ != num_read)
+ {
+ rc = RC (rcExe, rcFile, rcWriting, rcFile, rcInsufficient);
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to write all to file $(F) at $(P)",
+ "F=%s,P=%lu", dst, outpos));
+ break;
+ }
+ }
+ else
+ break;
+ }
+ }
+#else
+ do
+ {
+ rc = Quitting ();
+ if (rc)
+ {
+ LOGMSG (klogFatal, "Received quit");
+ break;
+ }
+ rc = KFileRead (fin, inpos, buff, sizeof (buff), &num_read);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to read from file $(F) at $(P)",
+ "F=%s,P=%lu", src, inpos));
+ break;
+ }
+ else if (num_read > 0)
+ {
+ size_t to_write;
+
+ inpos += (uint64_t)num_read;
+
+ STSMSG (2, ("Read %zu bytes to %lu", num_read, inpos));
+
+ to_write = num_read;
+ while (to_write > 0)
+ {
+ size_t num_writ;
+ rc = KFileWrite (fout, outpos, buff, num_read, &num_writ);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to write to file $(F) at $(P)",
+ "F=%s,P=%lu", dst, outpos));
+ break;
+ }
+ outpos += num_writ;
+ to_write -= num_writ;
+ }
+ }
+ if (rc)
+ break;
+ } while (num_read != 0);
+#endif
+ return rc;
+}
+
+
+static
+rc_t nenctest (const char * srcstr, const char * dststr, bool force)
+{
+ VFSManager * mgr;
+ rc_t rc;
+
+ rc = VFSManagerMake (&mgr);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to create file system manager");
+ else
+ {
+ VPath * srcpath;
+
+ rc = VPathMake (&srcpath, srcstr);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "Failed to parse source path '$(path)'",
+ "path=%s", srcstr));
+ else
+ {
+ VPath * dstpath;
+
+ rc = VPathMake (&dstpath, dststr);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "Failed to parse destination path '$(path)'",
+ "path=%s", dststr));
+ else
+ {
+ const KFile * srcfile;
+
+ rc = VFSManagerOpenFileRead (mgr, &srcfile, srcpath);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "Failed to open source path '$(path)'",
+ "path=%s", srcstr));
+ else
+ {
+ KFile * dstfile;
+
+ rc = VFSManagerCreateFile (mgr, &dstfile, false, 0666,
+ kcmParents | (force ? kcmInit : kcmCreate),
+ dstpath);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "failed to open destination path '$(path)'",
+ "path=%s", dststr));
+ else
+ {
+ rc = copy_file (srcstr, dststr, srcfile, dstfile);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc, "failed to copy '$(S)' to '$(D)'",
+ "S=%s,D=%s", srcstr, dststr));
+
+ VFSManagerRemove (mgr, true, dstpath);
+ }
+
+ KFileRelease (dstfile);
+ }
+ KFileRelease (srcfile);
+ }
+ VPathRelease (dstpath);
+ }
+ VPathRelease (srcpath);
+ }
+ VFSManagerRelease (mgr);
+ }
+ return rc;
+}
+
+
+/* KMain - EXTERN
+ * executable entrypoint "main" is implemented by
+ * an OS-specific wrapper that takes care of establishing
+ * signal handlers, logging, etc.
+ *
+ * in turn, OS-specific "main" will invoke "KMain" as
+ * platform independent main entrypoint.
+ *
+ * "argc" [ IN ] - the number of textual parameters in "argv"
+ * should never be < 0, but has been left as a signed int
+ * for reasons of tradition.
+ *
+ * "argv" [ IN ] - array of NUL terminated strings expected
+ * to be in the shell-native character set: ASCII or UTF-8
+ * element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+ Args* args = NULL;
+ rc_t rc;
+
+ rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+ if (rc)
+ LOGERR (klogInt, rc, "failed to parse command line parameters");
+ if (rc == 0)
+ {
+ uint32_t pcount;
+ bool force;
+
+ rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to examine force option");
+ else
+ {
+ force = (pcount > 0);
+
+ rc = ArgsOptionCount (args, OPTION_CIPHER, &pcount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to examine cipher option");
+ else
+ {
+ if (pcount)
+ {
+ const char * value;
+
+ rc = ArgsOptionValue (args, OPTION_CIPHER, 0, &value);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to examine cipher value");
+ else
+ {
+ if (value[1])
+ rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ else
+ switch (value[0])
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ KCipherSubType = value[0] - '0';
+ break;
+ default:
+ rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ break;
+ }
+ if (rc)
+ LOGERR (klogErr, rc, "bad value for cipher implmentation");
+ }
+ }
+ if (rc == 0)
+ {
+ rc = ArgsParamCount (args, &pcount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to count parameters");
+ else
+ {
+ if (pcount != 2)
+ MiniUsage (args);
+ else
+ {
+ const char * src;
+
+ rc = ArgsParamValue (args, 0, &src);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to get source parameter");
+ else
+ {
+ const char * dst;
+ rc = ArgsParamValue (args, 1, &dst);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to get destination parameter");
+ else
+ {
+ rc = nenctest (src, dst, force);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ ArgsWhack (args);
+ }
+ STSMSG (1, ("exiting: %R (%u)", rc, rc));
+ return rc;
+}
+
+/* EOF */
diff --git a/tools/nenctool/nenctest.vers b/tools/nenctool/nenctest.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/nenctool/nenctest.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/nenctool/nenctool.c b/tools/nenctool/nenctool.c
new file mode 100644
index 0000000..3cf5f5f
--- /dev/null
+++ b/tools/nenctool/nenctool.c
@@ -0,0 +1,446 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "nenctool.vers.h"
+
+#include <kapp/main.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h>
+
+#include <assert.h>
+
+
+/* Version EXTERN
+ * return 4-part version code: 0xMMmmrrrr, where
+ * MM = major release
+ * mm = minor release
+ * rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+ return NENCTOOL_VERS;
+}
+
+
+#define OPTION_FORCE "force"
+#define ALIAS_FORCE "f"
+static
+const char * force_usage[] =
+{ "force overwrite of existing files", NULL };
+static
+OptDef Options[] =
+{
+ /* name alias max times oparam required fmtfunc help text loc */
+ { OPTION_FORCE, ALIAS_FORCE, NULL, force_usage, 0, false, false }
+};
+
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "nencvalid";
+
+rc_t CC UsageSummary (const char * progname)
+{
+ return KOutMsg (
+ "\n"
+ "Usage:\n"
+ " %s [options] <source-file-path> <destination-file-path>\n"
+ "\n"
+ "Summary:\n"
+ " Copy a file from the first parameter to the second parameter\n"
+ " Encryption, decryption, or re-encryption are the expected purpose.\n"
+ "\n", progname);
+}
+
+static
+const char * first_usage[] =
+{
+ "The path to a file either in native format",
+};
+
+static
+const char * second_usage[] =
+{
+ "in 'file' URI scheme or in 'ncbi-file'",
+ "URI scheme.",
+ "\"ncbi-file\" scheme adds a query to the \"file\" scheme",
+ "where 'enc' or 'encrypt' means the file is encrypted",
+ "and 'pwfile=<path>' points to a file to get the password",
+ "or 'pwfd=<fd>' refers to a file descriptor from which to",
+ "read a password."
+};
+
+rc_t CC Usage (const Args * args)
+{
+ const char * progname = UsageDefaultName;
+ const char * fullpath = UsageDefaultName;
+ rc_t rc;
+
+ if (args == NULL)
+ rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ else
+ rc = ArgsProgram (args, &fullpath, &progname);
+
+ UsageSummary (progname);
+
+ KOutMsg ("Parameters:\n");
+
+ HelpParamLine ("source-file-path", first_usage);
+ HelpParamLine ("destination-file-path", second_usage);
+
+ KOutMsg ("\nOptions:\n");
+
+ HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+
+ HelpOptionsStandard ();
+
+ OUTMSG (("\n"
+ "ncbi-file uri syntax:\n"
+ " 'ncbi-file' uris are based on a combination of the standard\n"
+ " 'file' and 'http' syntax familiar to browser users.\n"
+ " Enclosing questions marks are probably necessary.\n"
+ "\n"
+ " URI syntax is 'scheme:'hierarchical-part'?'query'#'fragment'\n"
+ " scheme:\n"
+ " ncbi-file\n"
+ " hierarchical-part:\n"
+ " this is the same as for scheme file and can be the native form or\n"));
+ OUTMSG ((" the ncbi 'posix' format that matches most flavors of Unix.\n"
+ " Environment variables and short hands such as '~' are not interpreted.\n"
+ " query:\n"
+ " Zero or two symbols separated by the '&'. The whole query can be omitted.\n"
+ " enc or encrypt\n"
+ " pwfile='path to a file containing a password'\n"
+ " pwfd='file descriptor where the password can be read'\n"
+ " If the encrypt is present exactly one of the other two must be present.\n"
+ " fragment:\n"
+ " No fragment is permitted.\n"));
+ OUTMSG (("\n"
+ "password contents:\n"
+ " The file or file descriptor containing the password is read enough to satisfy\n"
+ " the following restriction. The password is terminated by the end of file,\n"
+ " a carriage return or a line feed. The length must be no more than 4096 bytes.\n"
+ " The password file should have limited read access to protect it.\n"));
+
+
+ OUTMSG (("\n"
+ "Use examples:"
+ "\n"
+ " To encrypt a create a file named 'example' with a password from a file\n"
+ " named 'password-file' to a file named 'example.nenc' all in the current\n"
+ " directory:\n"
+ "\n"
+ " $ %s example \"ncbi-file:example.nenc?encrypt&pwfile=password-file\"\n",
+ progname));
+ OUTMSG (("\n"
+ " To decrypt a file named 'example.nenc' with a password from a file\n"
+ " named 'password-file' to a file named 'example' in directories implied\n"
+ " in the command:\n"
+ "\n"
+ " $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=/home/user/password-file\" example\n",
+ progname));
+ OUTMSG (("\n"
+ " To change the encryption of a file from one password to another:\n"
+ "\n"
+ " $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=old-password-file\" \\\n"
+ " \"ncbi-file:example.nenc?encrypt&pwfile=/home/user/new-password-file\"\n",
+ progname));
+
+ HelpVersion (fullpath, KAppVersion());
+
+ return rc;
+}
+
+
+static
+rc_t copy_file (const char * src, const char * dst, const KFile * fin, KFile *fout)
+{
+ rc_t rc;
+ uint8_t buff [64 * 1024];
+ size_t num_read;
+ uint64_t inpos;
+ uint64_t outpos;
+
+ assert (src);
+ assert (dst);
+ assert (fin);
+ assert (fout);
+
+ inpos = 0;
+ outpos = 0;
+
+#if 1
+ for (inpos = 0; ; inpos += num_read)
+ {
+ rc = Quitting ();
+ if (rc)
+ {
+ LOGMSG (klogFatal, "Received quit");
+ break;
+ }
+ else
+ {
+ rc = KFileReadAll (fin, inpos, buff, sizeof (buff), &num_read);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to read from file $(F) at $(P)",
+ "F=%s,P=%lu", src, inpos));
+ break;
+ }
+ else if (num_read)
+ {
+ size_t num_writ;
+
+ rc = KFileWriteAll (fout, inpos, buff, num_read, &num_writ);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to write to file $(F) at $(P)",
+ "F=%s,P=%lu", dst, outpos));
+ break;
+ }
+ else if (num_writ != num_read)
+ {
+ rc = RC (rcExe, rcFile, rcWriting, rcFile, rcInsufficient);
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to write all to file $(F) at $(P)",
+ "F=%s,P=%lu", dst, outpos));
+ break;
+ }
+ }
+ else
+ break;
+ }
+ }
+#else
+ do
+ {
+ rc = Quitting ();
+ if (rc)
+ {
+ LOGMSG (klogFatal, "Received quit");
+ break;
+ }
+ rc = KFileRead (fin, inpos, buff, sizeof (buff), &num_read);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to read from file $(F) at $(P)",
+ "F=%s,P=%lu", src, inpos));
+ break;
+ }
+ else if (num_read > 0)
+ {
+ size_t to_write;
+
+ inpos += (uint64_t)num_read;
+
+ STSMSG (2, ("Read %zu bytes to %lu", num_read, inpos));
+
+ to_write = num_read;
+ while (to_write > 0)
+ {
+ size_t num_writ;
+ rc = KFileWrite (fout, outpos, buff, num_read, &num_writ);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to write to file $(F) at $(P)",
+ "F=%s,P=%lu", dst, outpos));
+ break;
+ }
+ outpos += num_writ;
+ to_write -= num_writ;
+ }
+ }
+ if (rc)
+ break;
+ } while (num_read != 0);
+#endif
+ return rc;
+}
+
+
+static
+rc_t nenctool (const char * srcstr, const char * dststr, bool force)
+{
+ VFSManager * mgr;
+ rc_t rc;
+
+ rc = VFSManagerMake (&mgr);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to create file system manager");
+ else
+ {
+ VPath * srcpath;
+
+ rc = VPathMake (&srcpath, srcstr);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "Failed to parse source path '$(path)'",
+ "path=%s", srcstr));
+ else
+ {
+ VPath * dstpath;
+
+ rc = VPathMake (&dstpath, dststr);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "Failed to parse destination path '$(path)'",
+ "path=%s", dststr));
+ else
+ {
+ const KFile * srcfile;
+
+ rc = VFSManagerOpenFileRead (mgr, &srcfile, srcpath);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "Failed to open source path '$(path)'",
+ "path=%s", srcstr));
+ else
+ {
+ KFile * dstfile;
+
+ rc = VFSManagerCreateFile (mgr, &dstfile, false, 0666,
+ kcmParents | (force ? kcmInit : kcmCreate),
+ dstpath);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "failed to open destination path '$(path)'",
+ "path=%s", dststr));
+ else
+ {
+ rc = copy_file (srcstr, dststr, srcfile, dstfile);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc, "failed to copy '$(S)' to '$(D)'",
+ "S=%s,D=%s", srcstr, dststr));
+
+ VFSManagerRemove (mgr, true, dstpath);
+ }
+
+ KFileRelease (dstfile);
+ }
+ KFileRelease (srcfile);
+ }
+ VPathRelease (dstpath);
+ }
+ VPathRelease (srcpath);
+ }
+ VFSManagerRelease (mgr);
+ }
+ return rc;
+}
+
+
+/* KMain - EXTERN
+ * executable entrypoint "main" is implemented by
+ * an OS-specific wrapper that takes care of establishing
+ * signal handlers, logging, etc.
+ *
+ * in turn, OS-specific "main" will invoke "KMain" as
+ * platform independent main entrypoint.
+ *
+ * "argc" [ IN ] - the number of textual parameters in "argv"
+ * should never be < 0, but has been left as a signed int
+ * for reasons of tradition.
+ *
+ * "argv" [ IN ] - array of NUL terminated strings expected
+ * to be in the shell-native character set: ASCII or UTF-8
+ * element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+ Args* args = NULL;
+ rc_t rc;
+
+ rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+ if (rc)
+ LOGERR (klogInt, rc, "failed to parse command line parameters");
+ if (rc == 0)
+ {
+ uint32_t pcount;
+ bool force;
+
+ rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to examine force option");
+ else
+ {
+ force = (pcount > 0);
+
+ rc = ArgsParamCount (args, &pcount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to count parameters");
+ else
+ {
+ if (pcount != 2)
+ MiniUsage (args);
+ else
+ {
+ const char * src;
+
+ rc = ArgsParamValue (args, 0, &src);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to get source parameter");
+ else
+ {
+ const char * dst;
+ rc = ArgsParamValue (args, 1, &dst);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to get destination parameter");
+ else
+ {
+ rc = nenctool (src, dst, force);
+ }
+ }
+ }
+ }
+ }
+ ArgsWhack (args);
+ }
+ STSMSG (1, ("exiting: %R (%u)", rc, rc));
+ return rc;
+}
+
+/* EOF */
diff --git a/tools/nenctool/nenctool.vers b/tools/nenctool/nenctool.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/nenctool/nenctool.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/nencvalid/Makefile b/tools/nencvalid/Makefile
new file mode 100644
index 0000000..2628e5e
--- /dev/null
+++ b/tools/nencvalid/Makefile
@@ -0,0 +1,111 @@
+# ==============================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/nencvalid
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+ nencvalid
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+ $(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS)) $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# nencvalid
+# Copy files from one directory to another while cataloging the contents.
+# XML files can be redirected as well.
+#
+NENCVALID_SRC = \
+ nencvalid
+
+NENCVALID_OBJ = \
+ $(addsuffix .$(OBJX),$(NENCVALID_SRC))
+
+NENCVALID_LIB = \
+ -lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lkproc \
+ -lklib
+
+$(BINDIR)/nencvalid: $(NENCVALID_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(NENCVALID_LIB)
+
+nencvalid_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) nencvalid $(NENCVALID_OBJ)
+
+
+
diff --git a/tools/nencvalid/nencvalid.c b/tools/nencvalid/nencvalid.c
new file mode 100644
index 0000000..f3833fc
--- /dev/null
+++ b/tools/nencvalid/nencvalid.c
@@ -0,0 +1,683 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "nencvalid.vers.h"
+
+#include <kapp/main.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+
+#include <klib/log.h>
+#include <klib/status.h>
+#include <klib/out.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h>
+#include <klib/text.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+/* Version EXTERN
+ * return 4-part version code: 0xMMmmrrrr, where
+ * MM = major release
+ * mm = minor release
+ * rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+ return NENCVALID_VERS;
+}
+
+#define OPTION_DECRYPT_BIN_COMPATIBILITY "compatibility-mode"
+/* "decrypt.bin" */
+
+static
+OptDef Options[] =
+{
+ /* private option for decrypt.bin script */
+ { OPTION_DECRYPT_BIN_COMPATIBILITY, NULL, NULL, NULL, 0, false, false }
+};
+
+enum CompatibilityModeExitCode
+{
+ CMEC_NO_ERROR = 0,
+ CMEC_BAD_TYPE = 100,
+ CMEC_BAD_HEADER = 101,
+ CMEC_TRUNCATED = 102,
+ CMEC_EXCESS = 103,
+ CMEC_NO_CHECKSUM = 104,
+ CMEC_NO_PASSWORD = 105,
+ CMEC_BAD_CHECKSUM = 106
+};
+
+/* Usage
+ */
+const char UsageDefaultName [] = "nencvalid";
+
+rc_t CC UsageSummary (const char * progname)
+{
+ return KOutMsg (
+ "\n"
+ "Usage:\n"
+ " %s [options] <file-path> [ <file-path> ...]\n"
+ "\n"
+ "Summary:\n"
+ " Validate the consistency of NCBI format encrypted files\n"
+ "\n", progname);
+}
+
+static
+const char * param_usage[] =
+{
+ "A file in an NCBI encrypted file format.",
+ "The first version encrypted file format",
+ "needs a password to validate the content",
+ "while the second version does not. If the",
+ "ncbi-file uri format is used if you ask",
+ "file decryption (encrypt in the query)",
+ "the validation will be on the decrypted",
+ "file which might not be the intention.",
+ "The password if needed for validation will",
+ "have to be in the standard NCBI VDB",
+ "configuration as 'krypto/pwfile' or ",
+ "referenced by the environment variable",
+ "VDB_PWFILE or Config parameter", NULL
+};
+
+rc_t CC Usage (const Args * args)
+{
+ const char * progname = UsageDefaultName;
+ const char * fullpath = UsageDefaultName;
+ rc_t rc;
+
+ if (args == NULL)
+ rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ else
+ rc = ArgsProgram (args, &fullpath, &progname);
+
+ UsageSummary (progname);
+
+ KOutMsg ("Parameters:\n");
+
+ HelpParamLine ("file-path", param_usage);
+
+ KOutMsg ("\nOptions:\n");
+
+ HelpOptionsStandard ();
+
+ HelpVersion (fullpath, KAppVersion());
+
+ return rc;
+}
+
+static rc_t wga_log_error (const char * path, rc_t rc, bool decrypt_bin_compatible)
+{
+ switch (GetRCObject(rc))
+ {
+ case rcSize:
+ switch (GetRCState(rc))
+ {
+ case rcExcessive:
+ if (decrypt_bin_compatible)
+ exit (CMEC_EXCESS);
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "probably mis-concatenated file '$(P)'",
+ "P=%s", path));
+ return rc;
+
+ case rcInsufficient:
+ if (decrypt_bin_compatible)
+ exit (CMEC_TRUNCATED);
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "probably truncated file '$(P)'",
+ "P=%s", path));
+ return rc;
+
+ default:
+ break;
+ }
+ break;
+
+ case rcChecksum:
+ switch (GetRCState(rc))
+ {
+ case rcInvalid:
+ if (decrypt_bin_compatible)
+ exit (CMEC_BAD_CHECKSUM);
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "checksum of contents '$(P)'",
+ "P=%s", path));
+ return rc;
+
+ case rcNull:
+ if (decrypt_bin_compatible)
+ exit (CMEC_NO_CHECKSUM);
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "checksum of contents without password '$(P)'",
+ "P=%s", path));
+ return 0;
+
+ default:
+ break;
+ }
+ break;
+
+ case rcConstraint:
+ switch (GetRCState(rc))
+ {
+ case rcCorrupt:
+ if (decrypt_bin_compatible)
+ exit (CMEC_BAD_CHECKSUM);
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "checksum of contents '$(P)'",
+ "P=%s", path));
+ return rc;
+
+ default:
+ break;
+ }
+ break;
+
+ case rcEncryption:
+ switch (GetRCState(rc))
+ {
+ case rcNull:
+ if (decrypt_bin_compatible)
+ exit (CMEC_NO_PASSWORD);
+ LOGERR (klogWarn, rc, "length validated but content not checked without a password");
+ return 0;
+
+ case rcNotFound:
+ if (decrypt_bin_compatible)
+ exit (CMEC_NO_CHECKSUM);
+ LOGERR (klogWarn, rc, "length validated but content not has no checksum");
+ return 0;
+
+ default:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "with non-specified error file "
+ "'$(P)'", "P=%s", path));
+ return rc;
+}
+
+static rc_t nencvalidWGAEncValidate (const char * path, const KFile * file, VFSManager * mgr, bool decrypt_bin_compatible)
+{
+ rc_t rc;
+ size_t ppathz;
+ char ppath [4097];
+ size_t pwz;
+ char pw [8192];
+ bool error_logged = false;
+
+ rc = VFSManagerGetConfigPWFile (mgr, ppath, sizeof (ppath) - 1, &ppathz);
+
+ /* failure to read configuration */
+ if (rc)
+ {
+ if (GetRCState(rc) != rcNotFound)
+ {
+ LOGERR (klogInt, rc, "unable to read configuration to get password file");
+ error_logged = true;
+ }
+ else
+ {
+ LOGERR (klogWarn, rc, "no password file configured file content will not be validated");
+
+ /* configuration did not contain a password file so set it to nul */
+ pw[0] = '\0';
+ pwz = 0;
+ rc = 0;
+ }
+ }
+ /* we got a password file from configuration */
+ else
+ {
+ VPath * vpath;
+
+ pwz = 0;
+
+ /* force to ASCIZ which is probably redundant */
+ ppath[ppathz] = '\0';
+
+ rc = VPathMake (&vpath, ppath);
+ if (rc)
+ {
+ PLOGERR (klogInt, (klogInt, rc, "unable to create vpath for "
+ "password file '$(P)'", "P=%s", ppath));
+ error_logged = true;
+ }
+ else
+ {
+ const KFile * pwfile;
+
+ rc = VFSManagerOpenFileRead (mgr, &pwfile, vpath);
+ if (rc)
+ {
+ PLOGERR (klogInt, (klogInt, rc, "unable to open "
+ "password file '$(P)'", "P=%s", ppath));
+ error_logged = true;
+ }
+ else
+ {
+ rc = KFileReadAll (pwfile, 0, pw, sizeof pw - 1, &pwz);
+ if (rc)
+ {
+ PLOGERR (klogInt, (klogInt, rc, "unable to read "
+ "password file '$(P)'", "P=%s", ppath));
+ error_logged = true;
+ }
+
+ else
+ {
+ char * pc;
+
+ pc = string_chr (pw, pwz, '\n');
+ if (pc)
+ {
+ *pc = '\0';
+ pwz = pc - pw;
+ }
+
+ pc = string_chr (pw, pwz, '\r');
+ if (pc)
+ {
+ *pc = '\0';
+ pwz = pc - pw;
+ }
+
+ if (pwz == sizeof pw-1)
+ {
+ rc = RC (rcExe, rcFile, rcAccessing, rcBuffer, rcInsufficient);
+ PLOGERR (klogInt, (klogInt, rc, "password too long in "
+ "password file '$(P)' ignoring", "P=%s", ppath));
+ pwz = 0;
+ }
+ }
+ KFileRelease (pwfile);
+ }
+ VPathRelease (vpath);
+ }
+ }
+
+ if (rc == 0)
+ {
+ rc = WGAEncValidate (file, pw, pwz);
+ if (rc)
+ rc = wga_log_error (path, rc, decrypt_bin_compatible);
+ }
+ return rc;
+}
+
+
+/*
+ * do out thing on a single file name
+ */
+static
+rc_t HandleOneFile (VFSManager * mgr, const char * path, bool decrypt_bin_compatible)
+{
+ rc_t rc;
+ VPath * vpath;
+
+ rc = VPathMake (&vpath, path);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "failed to parse path "
+ "parameter '$(P)'", "P=%s", path));
+
+ else
+ {
+ const KFile * file;
+
+ rc = VFSManagerOpenFileRead (mgr, &file, vpath);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "failed to parse path "
+ "parameter '$(P)'", "P=%s", path));
+
+ else
+ {
+ size_t buffread;
+ const KFile * buffile;
+
+ rc = KBufFileMakeRead (&buffile, file, 64*1024);
+ if (rc)
+ LOGERR (klogInt, rc, "unable to buffer file");
+ else
+ {
+ /* the two current encrypted file types have an 8 byte signature (magic(
+ * at the beginning of the file. If these 8 don't match we don't even call it
+ * an encrypted file at all */
+ char buffer [8];
+
+ rc = KFileRead (buffile, 0, buffer, sizeof buffer, &buffread);
+ if (rc)
+ LOGERR (klogInt, rc, "Unable to read file signature");
+ else
+ {
+ if (buffread < sizeof buffer)
+ {
+ if (decrypt_bin_compatible)
+ exit (CMEC_BAD_TYPE);
+ else
+ {
+ rc = RC (rcExe, rcFile, rcValidating, rcHeader, rcWrongType);
+ LOGERR (klogErr, rc, "File too short to be encrypted file");
+ }
+ }
+ else
+ {
+ rc = KFileIsEnc (buffer, sizeof buffer);
+
+ switch (GetRCState(rc))
+ {
+ case 0:
+ case rcInsufficient:
+ rc = KEncFileValidate (buffile);
+ if (rc)
+ {
+ switch (GetRCObject(rc))
+ {
+ /* unsuable header */
+ case rcHeader:
+ case rcByteOrder:
+ if (decrypt_bin_compatible)
+ exit (CMEC_BAD_HEADER);
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "with a bad header file '$(P)'",
+ "P=%s", path));
+ break;
+
+ case rcFile:
+ switch (GetRCState(rc))
+ {
+ /* bad block count in the footer: guess it was a truncataiont
+ * an inconvienent point */
+ case rcCorrupt:
+ /* block read was neither a block nor a footer */
+ case rcInsufficient:
+ if (decrypt_bin_compatible)
+ exit (CMEC_TRUNCATED);
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "probably truncated file '$(P)'",
+ "P=%s", path));
+
+ break;
+ default:
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "with non-specified error file "
+ "'$(P)'", "P=%s", path));
+
+ break;
+ }
+ break;
+
+ case rcCrc:
+ if (decrypt_bin_compatible)
+ exit (CMEC_BAD_CHECKSUM);
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "with good length but bad checksum file "
+ "'$(P)'", "P=%s", path));
+ break;
+
+ default:
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "with non-specified error file "
+ "'$(P)'", "P=%s", path));
+ break;
+ }
+ }
+ else
+ STSMSG (1, ("validated file content and size for '%s'\n", path));
+ break;
+
+ case rcWrongType:
+ rc = KFileIsWGAEnc (buffer, buffread);
+ switch (GetRCState(rc))
+ {
+ case 0:
+ rc = nencvalidWGAEncValidate (path, buffile, mgr, decrypt_bin_compatible);
+ break;
+
+ case rcWrongType:
+ if (decrypt_bin_compatible)
+ exit (CMEC_BAD_TYPE);
+ STSMSG (1, ("'%s' is not an encrypted file", path));
+ break;
+
+ default:
+ break;
+ }
+
+ default:
+ if (rc)
+ PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+ "with non-specified error file "
+ "'$(P)'", "P=%s", path));
+ break;
+ }
+ }
+ }
+ KFileRelease (buffile);
+ }
+ KFileRelease (file);
+ }
+ VPathRelease (vpath);
+ }
+ if (rc)
+ STSMSG (1, ("failed validation '%s'", path));
+ else
+ STSMSG (1, ("passed validation '%s'", path));
+
+ return rc;
+}
+
+
+/*
+ * params are file names so retrienve them one by one and process them
+ */
+static __inline__
+rc_t HandleParams (VFSManager * mgr, Args * args, uint32_t pcount)
+{
+ rc_t rc;
+ rc_t orc;
+ uint32_t ix;
+
+ rc = orc = 0;
+ for (ix = 0; (ix < pcount); ++ix)
+ {
+ const char * pc;
+
+ rc = ArgsParamValue (args, ix, &pc);
+ if (rc)
+ PLOGERR (klogErr,
+ (klogErr, rc, "failed to retrieve "
+ "parameter '$(P)'", "P=%u", ix));
+ else
+ {
+ /*
+ * we will return rc but use orc to handle
+ * the return error code form the first found error on a parameter
+ * though we will continue to process all file parameters
+ */
+ orc = HandleOneFile (mgr, pc, false);
+ if (rc == 0)
+ rc = orc;
+ }
+ }
+ return rc;
+}
+
+
+/*
+ * handle the command line options then handle the file name parameters
+ */
+static __inline__
+rc_t HandleOptions (Args * args)
+{
+ uint32_t pcount;
+ rc_t rc;
+
+ rc = ArgsParamCount (args, &pcount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to count parameters");
+
+ else
+ {
+ if (pcount == 0)
+ MiniUsage(args);
+
+ else
+ {
+ uint32_t ocount;
+
+ rc = ArgsOptionCount (args, OPTION_QUIET, &ocount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to retrieve quiet option");
+
+ else
+ {
+ bool quiet;
+
+ quiet = (ocount != 0);
+
+ rc = ArgsOptionCount (args, OPTION_DECRYPT_BIN_COMPATIBILITY, &ocount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to retrieve compatibility option");
+
+ else
+ {
+ VFSManager * mgr;
+
+ rc = VFSManagerMake (&mgr);
+ if (rc)
+ LOGERR (klogErr, rc, "failed to open file system manager");
+
+ else
+ {
+ bool decrypt_bin_compatible;
+
+ if (ocount == 0)
+ decrypt_bin_compatible = false;
+
+ else
+ decrypt_bin_compatible = true;
+
+
+ if (quiet)
+ {
+ KStsLevelSet (0);
+ KLogLevelSet (0);
+ }
+ else if (!decrypt_bin_compatible)
+ {
+ if (KStsLevelGet() == 0)
+ KStsLevelSet(1);
+ }
+
+
+ if (decrypt_bin_compatible)
+ {
+ if (pcount > 1)
+ {
+ rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+ LOGERR (0, rc, "compatibility mode can only handle one file parameter");
+ }
+ else
+ {
+ const char * pc;
+
+ rc = ArgsParamValue (args, 0, &pc);
+ if (rc)
+ LOGERR (0, rc, "unable to retrieve file parameter");
+
+ if (rc == 0)
+ rc = HandleOneFile (mgr, pc, true);
+ }
+ }
+ else
+ {
+ rc = HandleParams (mgr, args, pcount);
+ }
+
+ VFSManagerRelease (mgr);
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+/* KMain - EXTERN
+ * executable entrypoint "main" is implemented by
+ * an OS-specific wrapper that takes care of establishing
+ * signal handlers, logging, etc.
+ *
+ * in turn, OS-specific "main" will invoke "KMain" as
+ * platform independent main entrypoint.
+ *
+ * "argc" [ IN ] - the number of textual parameters in "argv"
+ * should never be < 0, but has been left as a signed int
+ * for reasons of tradition.
+ *
+ * "argv" [ IN ] - array of NUL terminated strings expected
+ * to be in the shell-native character set: ASCII or UTF-8
+ * element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+ Args* args = NULL;
+ rc_t rc;
+
+ rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (Options[0]) );
+ if (rc)
+ LOGERR (klogInt, rc, "failed to parse command line parameters");
+ if (rc == 0)
+ {
+ rc = HandleOptions (args);
+
+ ArgsWhack (args);
+ }
+ STSMSG (2,("exiting: %R (%u)", rc, rc));
+ return rc;
+}
+
+/* EOF */
diff --git a/tools/nencvalid/nencvalid.vers b/tools/nencvalid/nencvalid.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/nencvalid/nencvalid.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/prefetch/Makefile b/tools/prefetch/Makefile
new file mode 100644
index 0000000..9b03031
--- /dev/null
+++ b/tools/prefetch/Makefile
@@ -0,0 +1,111 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/prefetch
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+ prefetch
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# prefetch
+#
+PREFETCH_SRC = \
+ prefetch
+
+PREFETCH_OBJ = \
+ $(addsuffix .$(OBJX),$(PREFETCH_SRC))
+
+PREFETCH_LIB = \
+ -ssraschema \
+ -dsraxf \
+ -dvxf \
+ -lvdb \
+ -lkapp \
+ -lkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lksrch \
+ -lklib \
+ -lkproc \
+ -lm
+
+
+$(BINDIR)/prefetch: $(PREFETCH_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(PREFETCH_LIB)
diff --git a/tools/prefetch/prefetch.c b/tools/prefetch/prefetch.c
new file mode 100644
index 0000000..771ef70
--- /dev/null
+++ b/tools/prefetch/prefetch.c
@@ -0,0 +1,1177 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "prefetch.vers.h"
+
+#include <kapp/main.h> /* KAppVersion */
+
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/database.h> /* VDatabase */
+#include <vdb/dependencies.h> /* VDBDependencies */
+
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h> /* VPath */
+
+#include <kfg/config.h> /* KConfig */
+
+#include <kfs/file.h> /* KFile */
+
+#include <klib/printf.h> /* string_printf */
+#include <klib/container.h> /* BSTree */
+#include <klib/text.h> /* String */
+#include <klib/status.h> /* STSMSG */
+#include <klib/log.h> /* PLOGERR */
+#include <klib/out.h> /* KOutMsg */
+#include <klib/rc.h>
+
+#include <assert.h>
+#include <stdlib.h> /* free */
+#include <string.h> /* memset */
+#include <time.h> /* time */
+
+#include <stdio.h> /* printf */
+
+#define DISP_RC(rc, err) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, err))
+
+#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
+ PLOGERR(klogInt, (klogInt,rc, "$(msg): $(name)","msg=%s,name=%s",msg,name)))
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define STS_TOP 0
+#define STS_INFO 1
+#define STS_DBG 2
+#define STS_FIN 3
+
+#define rcResolver rcTree
+static bool NotFoundByResolver(rc_t rc) {
+ if (GetRCModule(rc) == rcVFS) {
+ if (GetRCTarget(rc) == rcResolver) {
+ if (GetRCContext(rc) == rcResolving) {
+ if (GetRCState(rc) == rcNotFound) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+
+typedef struct {
+ const VPath *path;
+ const String *str;
+} VPathStr;
+static rc_t VPathStrFini(VPathStr *self) {
+ rc_t rc = 0;
+ assert(self);
+ VPathRelease(self->path);
+ free((void*)self->str);
+ memset(self, 0, sizeof *self);
+ return rc;
+}
+static rc_t VResolverResolve(VResolver *self, const char *accession,
+ VPathStr *local, const String **remote, const String **cache,
+ const KFile **file)
+{
+ rc_t rc = 0;
+ VPath* vaccession = NULL;
+ const VPath* vremote = NULL;
+ if (self == NULL) {
+ return RC(rcVFS, rcResolver, rcResolving, rcSelf, rcNull);
+ }
+ if (accession == NULL) {
+ return RC(rcVFS, rcResolver, rcResolving, rcParam, rcNull);
+ }
+ if (rc == 0) {
+ rc = VPathMake(&vaccession, accession);
+ DISP_RC2(rc, "VPathMake", accession);
+ }
+ if (rc == 0 && local != NULL) {
+ memset(local, 0, sizeof *local);
+ rc = VResolverLocal(self, vaccession, &local->path);
+ if (rc == 0) {
+ rc = VPathMakeString(local->path, &local->str);
+ DISP_RC2(rc, "VPathMakeString(VResolverLocal)", accession);
+ }
+ else if (NotFoundByResolver(rc)) {
+ rc = 0;
+ }
+ else {
+ DISP_RC2(rc, "VResolverLocal", accession);
+ }
+ }
+ if (rc == 0 && remote != NULL) {
+ rc = VResolverRemote(self, vaccession, &vremote, file);
+ if (rc == 0) {
+ rc = VPathMakeString(vremote, remote);
+ DISP_RC2(rc, "VPathMakeString(VResolverRemote)", accession);
+ }
+ else if (NotFoundByResolver(rc)) {
+ PLOGERR(klogErr, (klogErr, rc, "$(acc) cannot be found.",
+ "acc=%s", accession));
+ }
+ else {
+ DISP_RC2(rc, "Cannot resolve remote", accession);
+ }
+ }
+ if (rc == 0 && cache != NULL) {
+ const VPath* vpath = NULL;
+ uint64_t file_size = 0;
+ rc = VResolverCache(self, vremote, &vpath, file_size);
+ if (rc == 0) {
+ rc = VPathMakeString(vpath, cache);
+ DISP_RC2(rc, "VPathMakeString(VResolverCache)", accession);
+ }
+ else {
+ DISP_RC2(rc, "Cannot resolve cache", accession);
+ }
+ RELEASE(VPath, vpath);
+ }
+ RELEASE(VPath, vremote);
+ RELEASE(VPath, vaccession);
+ return rc;
+}
+
+typedef enum {
+ eForceNo, /* do not download found and complete objects */
+ eForceYes,/* force download of found and complete objects */
+ eForceYES /* force download; ignore lockes */
+} Force;
+typedef struct {
+ BSTNode n;
+ char *path;
+} TreeNode;
+typedef struct {
+ Args *args;
+ bool check_all;
+ Force force;
+ const VDBManager *mgr;
+ KDirectory *dir;
+ VResolver *resolver;
+
+ void *buffer;
+ size_t bsize;
+
+ BSTree downloaded;
+} Main;
+static rc_t StringRelease(const String *self) {
+ free((String*)self);
+ return 0;
+}
+
+typedef struct {
+ VPathStr local;
+ const String *remote;
+ const String *cache;
+ const KFile *file;
+
+ bool existing;
+
+ /* path to the resolved object : either local or cache:
+ should not be released */
+ const char *path;
+
+ const char *acc; /* do not release */
+} Resolved;
+static rc_t ResolvedInit(Resolved *self,
+ const char *acc, VResolver *resolver, KDirectory *dir)
+{
+ rc_t rc = 0;
+ KPathType type = kptNotFound;
+
+ assert(self);
+
+ memset(self, 0, sizeof *self);
+
+ self->acc = acc;
+
+ type = KDirectoryPathType(dir, acc) & ~kptAlias;
+ if (type == kptFile || type == kptDir) {
+ self->path = acc;
+ self->existing = true;
+ return 0;
+ }
+
+ rc = VResolverResolve(resolver,
+ acc, &self->local, &self->remote, &self->cache, &self->file);
+
+ STSMSG(STS_DBG, ("Resolve(%s) = %R:", acc, rc));
+ STSMSG(STS_DBG, ("local(%s)",
+ self->local.str ? self->local.str->addr : "NULL"));
+ STSMSG(STS_DBG, ("remote(%s)", self->remote ? self->remote->addr : "NULL"));
+ STSMSG(STS_DBG, ("cache(%s)", self->cache ? self->cache->addr : "NULL"));
+
+ if (rc == 0) {
+ if (self->local.str == NULL
+ && (self->cache == NULL ||
+ self->remote == NULL || self->file == NULL))
+ {
+ rc = RC(rcExe, rcPath, rcValidating, rcParam, rcNull);
+ PLOGERR(klogInt, (klogInt, rc,
+ "bad VResolverResolve($(acc)) result", "acc=%s", acc));
+ }
+ }
+
+ return rc;
+}
+
+static rc_t ResolvedFini(Resolved *self) {
+ rc_t rc = 0;
+
+ assert(self);
+
+ rc = VPathStrFini(&self->local);
+
+ RELEASE(String, self->remote);
+ RELEASE(String, self->cache);
+
+ RELEASE(KFile, self->file);
+
+ memset(self, 0, sizeof *self);
+
+ return rc;
+}
+
+/** isLocal is set to true when the object is found locally.
+ i.e. does not need need not be [re]downloaded */
+static rc_t ResolvedLocal(const Resolved *self,
+ const KDirectory *dir, bool *isLocal, Force force)
+{
+ rc_t rc = 0;
+ uint64_t sRemote = 0;
+ uint64_t sLocal = 0;
+ const KFile *local = NULL;
+ char path[PATH_MAX] = "";
+
+ assert(isLocal && self);
+
+ *isLocal = false;
+
+ if (self->local.str == NULL) {
+ return 0;
+ }
+
+ rc = VPathReadPath(self->local.path, path, sizeof path, NULL);
+ DISP_RC(rc, "VPathReadPath");
+
+ if (rc == 0 && KDirectoryPathType(dir, path) != kptFile) {
+ if (force == eForceNo) {
+ STSMSG(STS_TOP,
+ ("%s (not a file) is found locally: consider it complete",
+ path));
+ *isLocal = true;
+ }
+ else {
+ STSMSG(STS_TOP,
+ ("%s (not a file) is found locally and will be redownloaded",
+ path));
+ }
+ return 0;
+ }
+
+ if (rc == 0) {
+ rc = KFileSize(self->file, &sRemote);
+ DISP_RC2(rc, "KFileSize(remote)", self->acc);
+ }
+
+ if (rc == 0) {
+ rc = KDirectoryOpenFileRead(dir, &local, path);
+ DISP_RC2(rc, "KDirectoryOpenFileRead", path);
+ }
+
+ if (rc == 0) {
+ rc = KFileSize(local, &sLocal);
+ DISP_RC2(rc, "KFileSize", path);
+ }
+
+ if (rc == 0) {
+ if (sRemote == sLocal) {
+ if (force == eForceNo) {
+ *isLocal = true;
+ STSMSG(STS_INFO, ("%s (%lu) is found and is complete",
+ path, sLocal));
+ }
+ else {
+ STSMSG(STS_INFO, ("%s (%lu) is found and will be redownloaded",
+ path, sLocal));
+ }
+ }
+ else {
+ STSMSG(STS_TOP, ("%s (%lu) is incomplete. Expected size is %lu. "
+ "It will be re-downloaded", path, sLocal, sRemote));
+ }
+ }
+
+ RELEASE(KFile, local);
+
+ return rc;
+}
+
+static rc_t _KDirectoryMkTmpPrefix(const KDirectory *self,
+ const String *prefix, char *out, size_t sz)
+{
+ size_t num_writ = 0;
+ rc_t rc = string_printf(out, sz, &num_writ,
+ "%.*s.tmp", prefix->size, prefix->addr);
+ if (rc != 0) {
+ DISP_RC2(rc, "string_printf(tmp)", prefix->addr);
+ return rc;
+ }
+
+ if (num_writ > sz) {
+ rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+ PLOGERR(klogInt, (klogInt, rc,
+ "bad string_printf($(s).tmp) result", "s=%s", prefix->addr));
+ return rc;
+ }
+
+ return rc;
+}
+
+static rc_t _KDirectoryMkTmpName(const KDirectory *self,
+ const String *prefix, char *out, size_t sz)
+{
+ rc_t rc = 0;
+ int i = 0;
+
+ assert(prefix);
+
+ while (rc == 0) {
+ size_t num_writ = 0;
+ rc = string_printf(out, sz, &num_writ,
+ "%.*s.tmp.%d.tmp", prefix->size, prefix->addr, rand() % 100000);
+ if (rc != 0) {
+ DISP_RC2(rc, "string_printf(tmp.rand)", prefix->addr);
+ break;
+ }
+
+ if (num_writ > sz) {
+ rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+ PLOGERR(klogInt, (klogInt, rc,
+ "bad string_printf($(s).tmp.rand) result",
+ "s=%s", prefix->addr));
+ return rc;
+ }
+ if (KDirectoryPathType(self, out) == kptNotFound) {
+ break;
+ }
+ if (++i > 999) {
+ rc = RC(rcExe, rcFile, rcCopying, rcName, rcUndefined);
+ PLOGERR(klogInt, (klogInt, rc,
+ "cannot generate unique tmp file name for $(name)", "name=%s",
+ prefix->addr));
+ return rc;
+ }
+ }
+
+ return rc;
+}
+
+static rc_t _KDirectoryMkLockName(const KDirectory *self,
+ const String *prefix, char *out, size_t sz)
+{
+ rc_t rc = 0;
+ size_t num_writ = 0;
+
+ assert(prefix);
+
+ rc = string_printf(out, sz, &num_writ,
+ "%.*s.lock", prefix->size, prefix->addr);
+ DISP_RC2(rc, "string_printf(lock)", prefix->addr);
+
+ if (rc == 0 && num_writ > sz) {
+ rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+ PLOGERR(klogInt, (klogInt, rc,
+ "bad string_printf($(s).lock) result", "s=%s", prefix->addr));
+ return rc;
+ }
+
+ return rc;
+}
+
+static rc_t _KDirectoryCleanCache(KDirectory *self, const String *local) {
+ rc_t rc = 0;
+
+ char cache[PATH_MAX] = "";
+ size_t num_writ = 0;
+
+ assert(self && local && local->addr);
+
+ if (rc == 0) {
+ rc = string_printf(cache, sizeof cache, &num_writ, "%s.cache",
+ local->addr);
+ DISP_RC2(rc, "string_printf(.cache)", local->addr);
+ }
+
+ if (rc == 0 && KDirectoryPathType(self, cache) != kptNotFound) {
+ STSMSG(STS_DBG, ("removing %s", cache));
+ rc = KDirectoryRemove(self, false, cache);
+ }
+
+ return rc;
+}
+
+static rc_t _KDirectoryClean(KDirectory *self, const String *cache,
+ const char *lock, const char *tmp, bool rmSelf)
+{
+ rc_t rc = 0;
+ rc_t rc2 = 0;
+
+ char tmpName[PATH_MAX] = "";
+ const char *dir = tmpName;
+ const char *tmpPfx = NULL;
+ size_t tmpPfxLen = 0;
+
+ assert(self && cache);
+
+ rc = _KDirectoryMkTmpPrefix(self, cache, tmpName, sizeof tmpName);
+ if (rc == 0) {
+ char *slash = strrchr(tmpName, '/');
+ if (slash != NULL) {
+ if (strlen(tmpName) == slash + 1 - tmpName) {
+ rc = RC(rcExe,
+ rcDirectory, rcSearching, rcDirectory, rcIncorrect);
+ PLOGERR(klogInt, (klogInt, rc,
+ "bad file name $(path)", "path=%s", tmpName));
+ }
+ else {
+ *slash = '\0';
+ tmpPfx = slash + 1;
+ }
+ }
+ else {
+ rc = RC(rcExe, rcDirectory, rcSearching, rcChar, rcNotFound);
+ PLOGERR(klogInt, (klogInt, rc,
+ "cannot extract directory from $(path)", "path=%s", dir));
+ }
+ tmpPfxLen = strlen(tmpPfx);
+ }
+
+ if (tmp != NULL && KDirectoryPathType(self, tmp) != kptNotFound) {
+ rc_t rc3 = 0;
+ STSMSG(STS_DBG, ("removing %s", tmp));
+ rc3 = KDirectoryRemove(self, false, tmp);
+ if (rc2 == 0 && rc3 != 0) {
+ rc2 = rc3;
+ }
+ }
+
+ if (rmSelf && KDirectoryPathType(self, cache->addr) != kptNotFound) {
+ rc_t rc3 = 0;
+ STSMSG(STS_DBG, ("removing %s", cache->addr));
+ rc3 = KDirectoryRemove(self, false, cache->addr);
+ if (rc2 == 0 && rc3 != 0) {
+ rc2 = rc3;
+ }
+ }
+
+ if (rc == 0) {
+ uint32_t count = 0;
+ uint32_t i = 0;
+ KNamelist *list = NULL;
+ STSMSG(STS_DBG, ("listing %s for old temporary files", dir));
+ rc = KDirectoryList(self, &list, NULL, NULL, dir);
+ DISP_RC2(rc, "KDirectoryList", dir);
+
+ if (rc == 0) {
+ rc = KNamelistCount(list, &count);
+ DISP_RC2(rc, "KNamelistCount(KDirectoryList)", dir);
+ }
+
+ for (i = 0; i < count && rc == 0; ++i) {
+ const char *name = NULL;
+ rc = KNamelistGet(list, i, &name);
+ if (rc != 0) {
+ DISP_RC2(rc, "KNamelistGet(KDirectoryList)", dir);
+ }
+ else {
+ if (strncmp(name, tmpPfx, tmpPfxLen) == 0) {
+ rc_t rc3 = 0;
+ STSMSG(STS_DBG, ("removing %s", name));
+ rc3 = KDirectoryRemove(self, false,
+ "%s%c%s", dir, '/', name);
+ if (rc2 == 0 && rc3 != 0) {
+ rc2 = rc3;
+ }
+ }
+ }
+ }
+
+ RELEASE(KNamelist, list);
+ }
+
+ if (lock != NULL && KDirectoryPathType(self, lock) != kptNotFound) {
+ rc_t rc3 = 0;
+ STSMSG(STS_DBG, ("removing %s", lock));
+ rc3 = KDirectoryRemove(self, false, lock);
+ if (rc2 == 0 && rc3 != 0) {
+ rc2 = rc3;
+ }
+ }
+
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+
+ return rc;
+}
+
+static int CC bstCmp(const void *item, const BSTNode *n) {
+ const char* path = item;
+ const TreeNode* sn = (const TreeNode*) n;
+
+ assert(path && sn && sn->path);
+
+ return strcmp(path, sn->path);
+}
+
+static int CC bstSort(const BSTNode* item, const BSTNode* n) {
+ const TreeNode* sn = (const TreeNode*) item;
+
+ return bstCmp(sn->path, n);
+}
+
+static void CC bstWhack(BSTNode* n, void* ignore) {
+ TreeNode* sn = (TreeNode*) n;
+
+ assert(sn);
+
+ free(sn->path);
+
+ memset(sn, 0, sizeof *sn);
+
+ free(sn);
+}
+
+static bool MainHasDownloaded(const Main *self, const char *local) {
+ TreeNode *sn = NULL;
+
+ assert(self);
+
+ sn = (TreeNode*) BSTreeFind(&self->downloaded, local, bstCmp);
+
+ return sn != NULL;
+}
+
+static rc_t MainDownloaded(Main *self, const char *path) {
+ TreeNode *sn = NULL;
+
+ assert(self);
+
+ if (MainHasDownloaded(self, path)) {
+ return 0;
+ }
+
+ sn = calloc(1, sizeof *sn);
+ if (sn == NULL) {
+ return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+
+ sn->path = string_dup_measure(path, NULL);
+ if (sn->path == NULL) {
+ bstWhack((BSTNode*) sn, NULL);
+ sn = NULL;
+ return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+
+ BSTreeInsert(&self->downloaded, (BSTNode*)sn, bstSort);
+
+ return 0;
+}
+
+static rc_t ResolvedDownload(const Resolved *self, Main *main) {
+ rc_t rc = 0;
+ KFile *out = NULL;
+ KFile *flock = NULL;
+ uint64_t pos = 0;
+ size_t num_read = 0;
+ uint64_t opos = 0;
+ size_t num_writ = 0;
+
+ char tmp[PATH_MAX] = "";
+ char lock[PATH_MAX] = "";
+
+ assert(self
+ && self->cache && self->cache->size && self->cache->addr && main);
+
+ if (main->force != eForceYES &&
+ MainHasDownloaded(main, self->cache->addr))
+ {
+ STSMSG(STS_INFO, ("%s has just been downloaded", self->cache->addr));
+ return 0;
+ }
+
+ if (rc == 0) {
+ rc = _KDirectoryMkLockName(main->dir, self->cache, lock, sizeof lock);
+ }
+
+ if (rc == 0) {
+ rc = _KDirectoryMkTmpName(main->dir, self->cache, tmp, sizeof tmp);
+ }
+
+ if (KDirectoryPathType(main->dir, lock) != kptNotFound) {
+ if (main->force != eForceYES) {
+ KTime_t date = 0;
+ rc = KDirectoryDate(main->dir, &date, lock);
+ if (rc == 0) {
+ time_t t = time(NULL) - date;
+ if (t < 60 * 60 * 24) { /* 24 hours */
+ STSMSG(STS_DBG, ("%s found: canceling download", lock));
+ rc = RC(rcExe, rcFile, rcCopying, rcLock, rcExists);
+ PLOGERR(klogWarn, (klogWarn, rc,
+ "Lock file $(file) exists: download canceled",
+ "file=%s", lock));
+ return rc;
+ }
+ else {
+ STSMSG(STS_DBG, ("%s found and ignored as too old", lock));
+ rc = _KDirectoryClean(main->dir,
+ self->cache, NULL, NULL, true);
+ }
+ }
+ else {
+ STSMSG(STS_DBG, ("%s found", lock));
+ DISP_RC2(rc, "KDirectoryDate", lock);
+ }
+ }
+ else {
+ STSMSG(STS_DBG, ("%s found and forced to be ignored", lock));
+ rc = _KDirectoryClean(main->dir, self->cache, NULL, NULL, true);
+ }
+ }
+ else {
+ STSMSG(STS_DBG, ("%s not found", lock));
+ }
+
+ if (rc == 0) {
+ STSMSG(STS_DBG, ("creating %s", lock));
+ rc = KDirectoryCreateFile(main->dir, &flock,
+ false, 0664, kcmInit | kcmParents, lock);
+ DISP_RC2(rc, "Cannot OpenFileWrite", lock);
+ }
+
+ if (rc == 0) {
+ STSMSG(STS_DBG, ("creating %s", tmp));
+ rc = KDirectoryCreateFile(main->dir, &out,
+ false, 0664, kcmInit | kcmParents, tmp);
+ DISP_RC2(rc, "Cannot OpenFileWrite", tmp);
+ }
+
+ assert(self->remote);
+
+ STSMSG(STS_INFO, ("%s -> %s", self->remote->addr, tmp));
+ do {
+ rc = Quitting();
+
+ if (rc == 0) {
+ STSMSG(STS_FIN,
+ ("> Reading %lu bytes from pos. %lu", main->bsize, pos));
+ rc = KFileRead(self->file,
+ pos, main->buffer, main->bsize, &num_read);
+ if (rc != 0) {
+ DISP_RC2(rc, "Cannot KFileRead", self->remote->addr);
+ }
+ else {
+ STSMSG(STS_FIN,
+ ("< Read %lu bytes from pos. %lu", num_read, pos));
+ pos += num_read;
+ }
+ }
+
+ if (rc == 0 && num_read > 0) {
+ rc = KFileWrite(out, opos, main->buffer, num_read, &num_writ);
+ DISP_RC2(rc, "Cannot KFileWrite", tmp);
+ opos += num_writ;
+ }
+ } while (rc == 0 && num_read > 0);
+
+ RELEASE(KFile, out);
+ RELEASE(KFile, flock);
+
+ if (rc == 0) {
+ STSMSG(STS_DBG, ("renaming %s -> %s", tmp, self->cache->addr));
+ rc = KDirectoryRename(main->dir, true, tmp, self->cache->addr);
+ if (rc != 0) {
+ PLOGERR(klogInt, (klogInt, rc, "cannot rename $(from) to $(to)",
+ "from=%s,to=%s", tmp, self->cache->addr));
+ }
+ }
+
+ if (rc == 0) {
+ rc = MainDownloaded(main, self->cache->addr);
+ }
+
+ if (rc == 0) {
+ rc_t rc2 = _KDirectoryCleanCache(main->dir, self->cache);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ {
+ rc_t rc2 = _KDirectoryClean(main->dir, self->cache, lock, tmp, rc != 0);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ return rc;
+}
+
+static
+rc_t ResolvedResolve(Resolved *self, Main *main, const char *acc)
+{
+ static int n = 0;
+ rc_t rc = 0;
+ bool isLocal = false;
+
+ assert(self && main);
+
+ ++n;
+
+ rc = ResolvedInit(self, acc, main->resolver, main->dir);
+
+ if (rc == 0) {
+ if (self->existing) {
+ self->path = acc;
+ return rc;
+ }
+
+ rc = ResolvedLocal(self, main->dir, &isLocal, main->force);
+ }
+
+ if (rc == 0) {
+ if (isLocal) {
+ STSMSG(STS_TOP, ("%d) %s is found locally", n, acc));
+ if (self->local.str != NULL) {
+ self->path = self->local.str->addr;
+ }
+ }
+ else {
+ STSMSG(STS_TOP, ("%d) Downloading %s...", n, acc));
+ rc = ResolvedDownload(self, main);
+ if (rc == 0) {
+ STSMSG(STS_TOP, ("%d) %s was downloaded successfully", n, acc));
+ if (self->cache != NULL) {
+ self->path = self->cache->addr;
+ }
+ }
+ else {
+ STSMSG(STS_TOP, ("%d) failed to download %s", n, acc));
+ }
+ }
+ }
+
+ return rc;
+}
+
+static rc_t MainDependenciesList(const Main *self,
+ const char *path, const VDBDependencies **deps)
+{
+ rc_t rc = 0;
+ bool isDb = true;
+ const VDatabase *db = NULL;
+
+ assert(self && path && deps);
+
+ rc = VDBManagerOpenDBRead(self->mgr, &db, NULL, path);
+ if (rc != 0) {
+ if (rc == SILENT_RC(rcDB, rcMgr, rcOpening, rcDatabase, rcIncorrect)) {
+ isDb = false;
+ rc = 0;
+ }
+ DISP_RC2(rc, "Cannot open database", path);
+ }
+
+ if (rc == 0 && isDb) {
+ bool all = self->check_all || self->force != eForceNo;
+ rc = VDatabaseListDependencies(db, deps, !all);
+ DISP_RC2(rc, "VDatabaseListDependencies", path);
+ }
+
+ RELEASE(VDatabase, db);
+
+ return rc;
+}
+
+static rc_t MainExecute(Main *self, const char *acc) {
+ rc_t rc = 0;
+ rc_t rc2 = 0;
+ const VDBDependencies *deps = NULL;
+ uint32_t count = 0;
+ uint32_t i = 0;
+
+ Resolved resolved;
+
+ assert(self);
+
+ rc = ResolvedResolve(&resolved, self, acc);
+
+ if (rc == 0) {
+ rc = MainDependenciesList(self, resolved.path, &deps);
+ }
+
+ if (rc == 0 && deps != NULL) {
+ rc = VDBDependenciesCount(deps, &count);
+ if (rc == 0) {
+ STSMSG(STS_TOP, ("%s has %d%s dependenc%s",
+ acc, count, self->check_all ? "" : " unresolved",
+ count > 1 ? "ies" : "y"));
+ }
+ else {
+ DISP_RC2(rc, "Failed to check %s's dependencies", acc);
+ }
+ }
+
+ for (i = 0; i < count && rc == 0; ++i) {
+ bool local = true;
+ const char *seq_id = NULL;
+
+ if (rc == 0) {
+ rc = VDBDependenciesLocal(deps, &local, i);
+ DISP_RC2(rc, "VDBDependenciesLocal", acc);
+ if (local) {
+ continue;
+ }
+ }
+
+ if (rc == 0) {
+ rc = VDBDependenciesSeqId(deps, &seq_id, i);
+ DISP_RC2(rc, "VDBDependenciesSeqId", acc);
+ }
+
+ if (rc == 0) {
+ size_t num_writ = 0;
+ char ncbiAcc[512] = "";
+
+ assert(seq_id);
+
+ rc = string_printf(ncbiAcc, sizeof ncbiAcc, &num_writ,
+ "ncbi-acc:%s?vdb-ctx=refseq", seq_id);
+ DISP_RC2(rc, "string_printf(?vdb-ctx=refseq)", seq_id);
+ if (rc == 0 && num_writ > sizeof ncbiAcc) {
+ rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+ PLOGERR(klogInt, (klogInt, rc,
+ "bad string_printf($(s)?vdb-ctx=refseq) result",
+ "s=%s", seq_id));
+ }
+
+ if (rc == 0) {
+ Resolved resolved;
+ rc = ResolvedResolve(&resolved, self, ncbiAcc);
+ rc2 = ResolvedFini(&resolved);
+ }
+ }
+ }
+
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+
+ RELEASE(VDBDependencies, deps);
+
+ {
+ rc_t rc2 = ResolvedFini(&resolved);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ return rc;
+}
+
+#define CHECK_ALL_ALIAS "c"
+#define CHECK_ALL_OPTION "check-all"
+static const char* CHECK_ALL_USAGE[] = { "double-check all refseqs", NULL };
+
+#define FORCE_ALIAS "f"
+#define FORCE_OPTION "force"
+static const char* FORCE_USAGE[] = { "force object download::",
+ "no [default]: skip download if the object if found and complete;",
+ "yes: download it even if it is found and is complete;", "all: ignore lock "
+ "files (stale locks or it is beeing downloaded by another process)", NULL };
+
+static OptDef Options[] = {
+ /* needs_value required*/
+ { CHECK_ALL_OPTION, CHECK_ALL_ALIAS, NULL, CHECK_ALL_USAGE, 1, false, false
+ },
+ { FORCE_OPTION , FORCE_ALIAS , NULL, FORCE_USAGE , 1, true, false }
+};
+
+static rc_t MainProcessArgs(Main *self, int argc, char *argv[]) {
+ rc_t rc = 0;
+
+ uint32_t pcount = 0;
+
+ assert(self);
+
+ rc = ArgsMakeAndHandle(&self->args, argc, argv, 1,
+ Options, sizeof Options / sizeof (OptDef));
+ if (rc != 0) {
+ DISP_RC(rc, "ArgsMakeAndHandle");
+ return rc;
+ }
+
+ do {
+ rc = ArgsOptionCount (self->args, FORCE_OPTION, &pcount);
+ if (rc != 0) {
+ LOGERR(klogErr, rc, "Failure to get '" FORCE_OPTION "' argument");
+ break;
+ }
+
+ if (pcount > 0) {
+ const char *val = NULL;
+ rc = ArgsOptionValue(self->args, FORCE_OPTION, 0, &val);
+ if (rc != 0) {
+ LOGERR(klogErr, rc,
+ "Failure to get '" FORCE_OPTION "' argument value");
+ break;
+ }
+ if (val == NULL || val[0] == '\0') {
+ rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+ LOGERR(klogErr, rc,
+ "Unrecognized '" FORCE_OPTION "' argument value");
+ break;
+ }
+ switch (val[0]) {
+ case 'n':
+ case 'N':
+ self->force = eForceNo;
+ break;
+ case 'y':
+ case 'Y':
+ self->force = eForceYes;
+ break;
+ case 'a':
+ case 'A':
+ self->force = eForceYES;
+ break;
+ default:
+ rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+ LOGERR(klogErr, rc,
+ "Unrecognized '" FORCE_OPTION "' argument value");
+ break;
+ }
+ if (rc != 0) {
+ break;
+ }
+ }
+
+ rc = ArgsOptionCount (self->args, CHECK_ALL_OPTION, &pcount);
+ if (rc != 0) {
+ LOGERR(klogErr,
+ rc, "Failure to get '" CHECK_ALL_OPTION "' argument");
+ break;
+ }
+ if (pcount > 0 || self->force != eForceNo) {
+ self->check_all = true;
+ }
+ } while (false);
+ return rc;
+}
+
+static rc_t MainInit(int argc, char *argv[], Main *self) {
+ rc_t rc = 0;
+ VFSManager *mgr = NULL;
+ KConfig *cfg = NULL;
+
+ assert(self);
+ memset(self, 0, sizeof *self);
+
+ BSTreeInit(&self->downloaded);
+
+ if (rc == 0) {
+ rc = MainProcessArgs(self, argc, argv);
+ }
+
+ if (rc == 0) {
+ self->bsize = 1024 * 1024;
+ self->buffer = malloc(self->bsize);
+ if (self->buffer == NULL) {
+ rc = RC(rcExe, rcData, rcAllocating, rcMemory, rcExhausted);
+ }
+ }
+
+ if (rc == 0) {
+ rc = VFSManagerMake(&mgr);
+ DISP_RC(rc, "VFSManagerMake");
+ }
+
+ if (rc == 0) {
+ VResolver *resolver = NULL;
+ rc = VFSManagerGetResolver(mgr, &resolver);
+ DISP_RC(rc, "VFSManagerGetResolver");
+ VResolverRemoteEnable(resolver, vrAlwaysEnable);
+ RELEASE(VResolver, resolver);
+ }
+
+ if (rc == 0) {
+ rc = KConfigMake(&cfg, NULL);
+ DISP_RC(rc, "KConfigMake");
+ }
+
+ if (rc == 0) {
+ rc = VFSManagerMakeResolver(mgr, &self->resolver, cfg);
+ DISP_RC(rc, "VFSManagerMakeResolver");
+ }
+
+ if (rc == 0) {
+ VResolverRemoteEnable ( self -> resolver, vrAlwaysEnable );
+ VResolverCacheEnable ( self -> resolver, vrAlwaysEnable );
+ }
+
+ if (rc == 0) {
+ rc = VDBManagerMakeRead(&self->mgr, NULL);
+ DISP_RC(rc, "VDBManagerMakeRead");
+ }
+
+ if (rc == 0) {
+ rc = KDirectoryNativeDir(&self->dir);
+ DISP_RC(rc, "KDirectoryNativeDir");
+ }
+
+ if (rc == 0) {
+ srand(time(NULL));
+ }
+
+ RELEASE(KConfig, cfg);
+ RELEASE(VFSManager, mgr);
+
+ return rc;
+}
+
+static rc_t MainFini(Main *self) {
+ rc_t rc = 0;
+
+ assert(self);
+
+ RELEASE(VResolver, self->resolver);
+ RELEASE(VDBManager, self->mgr);
+ RELEASE(KDirectory, self->dir);
+ RELEASE(Args, self->args);
+
+ free(self->buffer);
+
+ BSTreeWhack(&self->downloaded, bstWhack, NULL);
+
+ memset(self, 0, sizeof *self);
+
+ return rc;
+}
+
+const char UsageDefaultName[] = "prefetch";
+rc_t UsageSummary(const char *progname) {
+ return OUTMSG((
+ "Usage:\n"
+ " %s [options] <SRA accession> [...]\n"
+ " Download SRA file and its dependencies\n"
+ "\n"
+ " %s [options] <SRA file> [...]\n"
+ " Check SRA for missed dependencies and download them\n",
+ progname, progname));
+}
+
+rc_t CC Usage(const Args *args) {
+ rc_t rc = 0;
+ int i = 0;
+
+ const char *progname = UsageDefaultName;
+ const char *fullpath = UsageDefaultName;
+
+ if (args == NULL) {
+ rc = RC(rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ }
+ else {
+ rc = ArgsProgram(args, &fullpath, &progname);
+ }
+ if (rc != 0) {
+ progname = fullpath = UsageDefaultName;
+ }
+
+ UsageSummary(progname);
+ OUTMSG(("\n"));
+
+ OUTMSG(("Options:\n"));
+ for (i = 0; i < sizeof(Options) / sizeof(Options[0]); i++ ) {
+ const char *param = NULL;
+ if (strcmp(Options[i].aliases, FORCE_ALIAS) == 0) {
+ param = "value";
+ }
+ HelpOptionLine(Options[i].aliases, Options[i].name,
+ param, Options[i].help);
+ }
+
+ OUTMSG(("\n"));
+ HelpOptionsStandard();
+ HelpVersion(fullpath, KAppVersion());
+
+ return rc;
+}
+
+ver_t CC KAppVersion(void) { return PREFETCH_VERS; }
+
+/******************************************************************************/
+
+rc_t CC KMain(int argc, char *argv[]) {
+ rc_t rc = 0;
+ uint32_t pcount = 0;
+ uint32_t i = ~0;
+
+ Main pars;
+ rc = MainInit(argc, argv, &pars);
+
+ if (rc == 0) {
+ rc = ArgsParamCount(pars.args, &pcount);
+ }
+
+ if (rc == 0 && pcount == 0) {
+ rc = UsageSummary(UsageDefaultName);
+ }
+
+ for (i = 0; rc == 0 && i < pcount; ++i) {
+ const char *path = NULL;
+ rc = ArgsParamValue(pars.args, i, &path);
+ DISP_RC(rc, "ArgsParamValue");
+ if (rc == 0) {
+ rc = MainExecute(&pars, path);
+ }
+ }
+
+ {
+ rc_t rc2 = MainFini(&pars);
+ if (rc2 != 0 && rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ return rc;
+}
diff --git a/tools/prefetch/prefetch.vers b/tools/prefetch/prefetch.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/prefetch/prefetch.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/refseq-load/Makefile b/tools/refseq-load/Makefile
old mode 100755
new mode 100644
index 8287971..8c7cf8c
--- a/tools/refseq-load/Makefile
+++ b/tools/refseq-load/Makefile
@@ -42,20 +42,18 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
ifeq (win,$(OS))
all std:
@ echo "not building refseq-load under Windows"
else
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/$@
endif
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# all
@@ -74,6 +72,13 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
@@ -88,8 +93,7 @@ tag: $(addsuffix _tag,$(ALL_TOOLS))
.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
#-------------------------------------------------------------------------------
-# vdb-copy
-# vdb copy tool
+# refseq-load
#
REFSEQ_LOAD_SRC = \
context \
@@ -99,7 +103,6 @@ REFSEQ_LOAD_OBJ = \
$(addsuffix .$(OBJX),$(REFSEQ_LOAD_SRC))
REFSEQ_LOAD_LIB = \
- -ssrapath \
-ssraschema \
-dwsraxf \
-dwvxf \
@@ -109,15 +112,16 @@ REFSEQ_LOAD_LIB = \
-lwvdb \
-lwkdb \
-lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
-lksrch \
-lcurl \
-lklib \
+ -lkq \
-lkproc \
- -ldl \
- -lz \
- -lbz2 \
-lm
$(BINDIR)/refseq-load: $(REFSEQ_LOAD_OBJ)
diff --git a/tools/refseq-load/context.c b/tools/refseq-load/context.c
index 43d1d54..06f9312 100644
--- a/tools/refseq-load/context.c
+++ b/tools/refseq-load/context.c
@@ -160,24 +160,36 @@ static rc_t context_evaluate_arguments( const Args *my_args, p_context ctx )
uint32_t count, idx;
rc_t rc = ArgsParamCount( my_args, &count );
- DISP_RC( rc, "ArgsParamCount() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ArgsParamCount() failed" );
+ }
if ( rc != 0 ) return rc;
for ( idx = 0; idx < count && rc == 0; ++idx )
{
const char *value = NULL;
rc = ArgsParamValue( my_args, idx, &value );
- DISP_RC( rc, "ArgsParamValue() failed" );
- if ( rc == 0 )
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ArgsParamValue() failed" );
+ }
+ else
{
switch( idx )
{
case 0 : rc = context_set_src( ctx, value );
- DISP_RC( rc, "context_set_src() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "context_set_src() failed" );
+ }
break;
case 1 : rc = context_set_dst_path( ctx, value );
- DISP_RC( rc, "context_set_dst_path() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "context_set_dst_path() failed" );
+ }
break;
}
}
@@ -191,7 +203,10 @@ static bool context_get_bool_option( const Args *my_args,
{
uint32_t count;
rc_t rc = ArgsOptionCount( my_args, name, &count );
- DISP_RC( rc, "ArgsOptionCount() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ArgsOptionCount() failed" );
+ }
return ( ( rc == 0 && count > 0 ) );
}
@@ -202,11 +217,17 @@ static const char* context_get_str_option( const Args *my_args,
const char* res = NULL;
uint32_t count;
rc_t rc = ArgsOptionCount( my_args, name, &count );
- DISP_RC( rc, "ArgsOptionCount() failed" );
- if ( ( rc == 0 )&&( count > 0 ) )
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ArgsOptionCount() failed" );
+ }
+ else if ( count > 0 )
{
rc = ArgsOptionValue( my_args, name, 0, &res );
- DISP_RC( rc, "ArgsOptionValue() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ArgsOptionValue() failed" );
+ }
}
return res;
}
@@ -218,13 +239,22 @@ static uint32_t context_get_uint_32_option( const Args *my_args,
{
uint32_t count, res = def;
rc_t rc = ArgsOptionCount( my_args, name, &count );
- DISP_RC( rc, "ArgsOptionCount() failed" );
- if ( ( rc == 0 )&&( count > 0 ) )
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ArgsOptionCount() failed" );
+ }
+ else if ( count > 0 )
{
const char *s;
rc = ArgsOptionValue( my_args, name, 0, &s );
- DISP_RC( rc, "ArgsOptionValue() failed" );
- if ( rc == 0 ) res = atoi( s );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ArgsOptionValue() failed" );
+ }
+ else
+ {
+ res = atoi( s );
+ }
}
return res;
}
@@ -241,16 +271,24 @@ static rc_t context_evaluate_options( const Args *my_args, p_context ctx )
context_set_src( ctx, context_get_str_option( my_args, OPTION_SRC ) );
context_set_dst_path( ctx, context_get_str_option( my_args, OPTION_DST_PATH ) );
context_set_schema( ctx, context_get_str_option( my_args, OPTION_SCHEMA ) );
- ctx->chunk_size = context_get_uint_32_option( my_args, OPTION_CHUNK_SIZE, 0 );
- circular = context_get_str_option( my_args, OPTION_CIRCULAR );
- ctx->quiet = context_get_bool_option( my_args, OPTION_QUIET );
- if( circular != NULL ) {
- if(strcasecmp(circular, "yes") == 0 ) {
+ ctx->chunk_size = context_get_uint_32_option( my_args, OPTION_CHUNK_SIZE, 0 );
+ circular = context_get_str_option( my_args, OPTION_CIRCULAR );
+ ctx->quiet = context_get_bool_option( my_args, OPTION_QUIET );
+ ctx->force_target = context_get_bool_option( my_args, OPTION_FORCE );
+ ctx->input_is_file = context_get_bool_option( my_args, OPTION_IFILE );
+ if ( circular != NULL )
+ {
+ if ( strcasecmp( circular, "yes" ) == 0 )
+ {
ctx->circular = true;
- } else if(strcasecmp(circular, "no") == 0 ) {
+ }
+ else if ( strcasecmp( circular, "no" ) == 0 )
+ {
ctx->circular = false;
- } else {
- rc = RC( rcExe, rcNoTarg, rcParsing, rcParam, rcUnrecognized);
+ }
+ else
+ {
+ rc = RC( rcExe, rcNoTarg, rcParsing, rcParam, rcUnrecognized );
}
}
else
@@ -267,17 +305,34 @@ static rc_t context_evaluate_options( const Args *my_args, p_context ctx )
*/
rc_t context_capture_arguments_and_options( const Args * args, p_context ctx )
{
- rc_t rc;
-
- rc = context_evaluate_arguments( args, ctx );
- DISP_RC( rc, "evaluate_arguments() failed" );
- if ( rc == 0 )
+ rc_t rc = context_evaluate_arguments( args, ctx );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "context_evaluate_arguments() failed" );
+ }
+ else
{
- if( (rc = context_evaluate_options( args, ctx )) == 0 ) {
+ rc = context_evaluate_options( args, ctx );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "context_evaluate_options() failed" );
+ }
+ else
+ {
context_check_if_usage_necessary( ctx );
-
- rc = ArgsHandleLogLevel( args );
- DISP_RC( rc, "ArgsHandleLogLevel() failed" );
+ rc = ArgsArgvValue( args, 0, &ctx->argv0 );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ArgsArgvValue() failed" );
+ }
+ else
+ {
+ rc = ArgsHandleLogLevel( args );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ArgsHandleLogLevel() failed" );
+ }
+ }
}
}
return rc;
diff --git a/tools/refseq-load/context.h b/tools/refseq-load/context.h
index 5f1c0b4..5eb5ccc 100644
--- a/tools/refseq-load/context.h
+++ b/tools/refseq-load/context.h
@@ -42,21 +42,25 @@ extern "C" {
#include <kapp/args.h>
#define OPTION_DST_PATH "dst-path"
+#define OPTION_FORCE "Force"
#define OPTION_SRC "src"
#define OPTION_SCHEMA "schema"
#define OPTION_CHUNK_SIZE "chunk-size"
#define OPTION_CIRCULAR "circular"
#define OPTION_QUIET "quiet"
+#define OPTION_IFILE "input-is-file"
#define ALIAS_DST_PATH "d"
+#define ALIAS_FORCE "F"
#define ALIAS_SRC "f"
#define ALIAS_SCHEMA "s"
#define ALIAS_CHUNK_SIZE "b"
#define ALIAS_CIRCULAR "c"
-#define ALIAS_QUIET "q"
+#define ALIAS_IFILE "i"
typedef struct context
{
+ const char* argv0;
char *dst_path;
char *src;
char *schema;
@@ -64,6 +68,8 @@ typedef struct context
bool usage_requested;
bool circular;
bool quiet;
+ bool force_target;
+ bool input_is_file;
} context;
typedef context* p_context;
diff --git a/tools/refseq-load/definitions.h b/tools/refseq-load/definitions.h
index faf5507..ee4b2bb 100644
--- a/tools/refseq-load/definitions.h
+++ b/tools/refseq-load/definitions.h
@@ -43,10 +43,6 @@ extern "C" {
#include <klib/rc.h>
#endif
-#define DISP_RC(rc,err) (void)((rc == 0) ? 0 : LOGERR( klogInt, rc, err ))
-
-#define DISP_RC2(rc,err,succ) \
- (void)((rc != 0)? 0 : (succ) ? LOGMSG( klogInfo, succ ) : LOGERR( klogInt, rc, err ))
#define DEFAULT_SCHEMA "align/refseq.vschema"
#define ENTREZ_URL "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&rettype=fasta&id="
diff --git a/tools/refseq-load/refseq-load.c b/tools/refseq-load/refseq-load.c
index deeaec4..c0de17a 100644
--- a/tools/refseq-load/refseq-load.c
+++ b/tools/refseq-load/refseq-load.c
@@ -41,7 +41,6 @@
#include <sysalloc.h>
#include <curl/curl.h>
-#include <curl/types.h>
#include <curl/easy.h>
#include <stdlib.h>
@@ -49,19 +48,21 @@
static const char * src_usage[] = { "full url or name of accession", NULL };
static const char * dst_usage[] = { "name of the table to write", NULL };
+static const char * force_usage[] = { "force target overwrite ", NULL };
static const char * schema_usage[] = { "name of the schema-file for dst-table", NULL };
static const char * chunk_size_usage[] = { "size of the seq-chunk (default = 5k)", NULL };
static const char * circular_usage[] = { "indicate if refseq is circular (ex: mitochondria)", NULL };
-static const char * quiet_usage[] = { "switch off all 'non-error' output", NULL };
+static const char * ifile_usage[] = { "treats input-obj as filename not url", NULL };
OptDef MyOptions[] =
-{
- { OPTION_SRC, ALIAS_SRC, NULL, src_usage, 1, true, false },
- { OPTION_DST_PATH, ALIAS_DST_PATH, NULL, dst_usage, 1, true, false },
- { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 1, true, false },
- { OPTION_CHUNK_SIZE, ALIAS_CHUNK_SIZE, NULL, chunk_size_usage, 1, true, false },
- { OPTION_CIRCULAR, ALIAS_CIRCULAR, NULL, circular_usage, 1, true, true },
- { OPTION_QUIET, ALIAS_QUIET, NULL, quiet_usage, 1, false, false }
+{ /* needs_value, required */
+ { OPTION_SRC, ALIAS_SRC, NULL, src_usage, 1, true, false },
+ { OPTION_DST_PATH, ALIAS_DST_PATH, NULL, dst_usage, 1, true, false },
+ { OPTION_FORCE, ALIAS_FORCE, NULL, force_usage, 1, false, false },
+ { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 1, true, false },
+ { OPTION_CHUNK_SIZE, ALIAS_CHUNK_SIZE, NULL, chunk_size_usage, 1, true, false },
+ { OPTION_CIRCULAR, ALIAS_CIRCULAR, NULL, circular_usage, 1, true, true },
+ { OPTION_IFILE, ALIAS_IFILE, NULL, ifile_usage, 1, false, false }
};
const char UsageDefaultName [] = "refseq-load";
@@ -83,7 +84,7 @@ rc_t CC Usage ( const Args * args )
rc_t rc;
if (args == NULL)
- rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ rc = RC (rcExe, rcArgv, rcAccessing, rcSelf, rcNull);
else
rc = ArgsProgram (args, &fullpath, &progname);
if (rc)
@@ -91,18 +92,18 @@ rc_t CC Usage ( const Args * args )
UsageSummary (progname);
- KOutMsg ("Options:\n");
+ KOutMsg ( "Options:\n" );
HelpOptionLine ( ALIAS_SRC, OPTION_SRC, "src", src_usage );
HelpOptionLine ( ALIAS_DST_PATH, OPTION_DST_PATH, "dst", dst_usage );
HelpOptionLine ( ALIAS_CIRCULAR, OPTION_CIRCULAR, "yes|no", circular_usage);
- OUTMSG (( "\nOptions:\n" ));
+ KOutMsg ( "\nOptions:\n" );
HelpOptionLine ( ALIAS_SCHEMA, OPTION_SCHEMA, "schema", schema_usage );
HelpOptionLine ( ALIAS_CHUNK_SIZE, OPTION_CHUNK_SIZE, "chunk-size", chunk_size_usage );
- HelpOptionLine ( ALIAS_QUIET, OPTION_QUIET, "quiet", quiet_usage );
- OUTMSG (( "\n" ));
+ HelpOptionLine ( ALIAS_IFILE, OPTION_IFILE, "fileinput", ifile_usage);
+ KOutMsg( "\n" );
HelpOptionsStandard ();
@@ -129,6 +130,7 @@ static bool is_full_url( const char * s )
return strchr(s, '/' ) != NULL;
}
+
static rc_t build_full_url( char ** s )
{
rc_t rc;
@@ -147,6 +149,7 @@ static rc_t build_full_url( char ** s )
return rc;
}
+
typedef struct data_ctx
{
char *buffer;
@@ -160,6 +163,7 @@ typedef struct data_ctx
} data_ctx;
typedef data_ctx* p_data_ctx;
+
static rc_t write_default_uint32( const uint32_t value,
enum ETableWriterRefSeq_ColNames which_col,
const TableWriterRefSeq* wr )
@@ -169,10 +173,14 @@ static rc_t write_default_uint32( const uint32_t value,
data.buffer = &value;
data.elements = 1;
rc = TableWriterRefSeq_WriteDefault( wr, which_col, &data );
- DISP_RC( rc, "write_default_uint32:TableWriterRefSeq_WriteDefault() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "write_default_uint32:TableWriterRefSeq_WriteDefault() failed" );
+ }
return rc;
}
+
static rc_t write_default_str( const char * value,
enum ETableWriterRefSeq_ColNames which_col,
const TableWriterRefSeq* wr )
@@ -182,10 +190,14 @@ static rc_t write_default_str( const char * value,
data.buffer = (void*)value;
data.elements = strlen( value );
rc = TableWriterRefSeq_WriteDefault( wr, which_col, &data );
- DISP_RC( rc, "write_default_str:TableWriterRefSeq_WriteDefault() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "write_default_str:TableWriterRefSeq_WriteDefault() failed" );
+ }
return rc;
}
+
static rc_t write_default_bool( const bool value,
enum ETableWriterRefSeq_ColNames which_col,
const TableWriterRefSeq* wr )
@@ -195,10 +207,14 @@ static rc_t write_default_bool( const bool value,
data.buffer = &value;
data.elements = 1;
rc = TableWriterRefSeq_WriteDefault( wr, which_col, &data );
- DISP_RC( rc, "write_default_bool:TableWriterRefSeq_WriteDefault() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "write_default_bool:TableWriterRefSeq_WriteDefault() failed" );
+ }
return rc;
}
+
static void write_curl_data( p_data_ctx dctx )
{
TableWriterRefSeqData data;
@@ -206,10 +222,16 @@ static void write_curl_data( p_data_ctx dctx )
data.read.buffer = dctx->buffer;
data.read.elements = dctx->data_count;
dctx->rc = TableWriterRefSeq_Write( dctx->wr, &data, &dctx->rowid );
- DISP_RC( dctx->rc, "handle_curl_byte:TableWriterRefSeq_Write() failed" );
- if ( dctx->rowid % 100 == 0 )
- if ( !dctx->quiet )
- OUTMSG (( "row %ld\r", dctx->rowid ));
+ if ( dctx->rc != 0 )
+ {
+ LOGERR( klogErr, dctx->rc, "handle_curl_byte:TableWriterRefSeq_Write() failed" );
+ }
+
+ if ( ( !dctx->quiet ) && ( dctx->rowid % 100 == 0 ) )
+ {
+ KOutMsg( "row %ld\r", dctx->rowid );
+ }
+
dctx->data_count = 0;
}
@@ -248,15 +270,16 @@ static bool handle_first_line( p_data_ctx dctx )
*space = 0;
}
if ( !dctx->quiet )
- OUTMSG(( "SEQ_ID: %s\n", s ));
+ KOutMsg( "SEQ_ID: %s\n", s );
write_default_str( s, ewrefseq_cn_SEQ_ID, dctx->wr );
space++;
if ( !dctx->quiet )
- OUTMSG(( "DEF_LINE: %s\n", space ));
+ KOutMsg( "DEF_LINE: %s\n", space );
write_default_str( space, ewrefseq_cn_DEF_LINE, dctx->wr );
return true;
}
+
static void handle_curl_byte( const char c, p_data_ctx dctx )
{
if ( dctx->first_line )
@@ -266,8 +289,8 @@ static void handle_curl_byte( const char c, p_data_ctx dctx )
dctx->buffer[ dctx->data_count++ ] = 0;
if ( !handle_first_line( dctx ) )
{
- dctx->rc = RC ( rcApp, rcBuffer, rcAccessing, rcData, rcInvalid );
- DISP_RC( dctx->rc, "server returned invalid data, possibly wrong accession/url" );
+ dctx->rc = RC(rcExe, rcBuffer, rcAccessing, rcData, rcInvalid );
+ LOGERR( klogErr, dctx->rc, "server returned invalid data, possibly wrong accession/url" );
}
dctx->data_count = 0;
dctx->first_line = false;
@@ -302,7 +325,9 @@ static size_t CC on_curl_data( void *ptr, size_t size, size_t nmemb, void *data
/* to be able to cancel the loop by signal */
dctx->rc = Quitting();
for ( idx = 0; idx < given_bytes && dctx->rc == 0; ++idx )
+ {
handle_curl_byte( ((char *)ptr)[idx], dctx );
+ }
/* tell curl via return value to stop downloading,
if we encountered an error or quit */
@@ -313,6 +338,43 @@ static size_t CC on_curl_data( void *ptr, size_t size, size_t nmemb, void *data
}
+static rc_t init_data_context( const p_context ctx, const TableWriterRefSeq* wr, data_ctx * dctx )
+{
+ rc_t rc = 0;
+ dctx->buff_size = ctx->chunk_size;
+ dctx->data_count = 0;
+ dctx->first_line = true;
+ dctx->quiet = ctx->quiet;
+ dctx->wr = wr;
+ dctx->rc = 0;
+ dctx->rowid = 0;
+ dctx->byte_count = 0;
+ dctx->buffer = malloc( dctx->buff_size );
+ if ( dctx->buffer == NULL )
+ {
+ rc = RC( rcExe, rcFile, rcConstructing, rcMemory, rcExhausted );
+ LOGERR( klogErr, rc, "creating receive-buffer failed" );
+ }
+ return rc;
+}
+
+
+static void finish_data_context( const p_context ctx, data_ctx * dctx )
+{
+ /* write the remainder of data that is eventually left
+ in the buffer by the callback */
+ if ( dctx->data_count > 0 )
+ {
+ /* returns the rc-code in dctx.rc, this function will return this code at the end */
+ write_curl_data( dctx );
+ }
+
+ if ( !ctx->quiet )
+ KOutMsg( "%ld bases\n", dctx->byte_count );
+ free( dctx->buffer );
+}
+
+
static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr )
{
CURL *curl_handle;
@@ -324,29 +386,20 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
if ( curl_handle == NULL )
{
rc = RC( rcExe, rcFile, rcConstructing, rcData, rcInvalid );
- DISP_RC( rc, "cur_easy_init() failed" );
+ LOGERR( klogErr, rc, "cur_easy_init() failed" );
return rc;
}
#ifdef _DEBUGGING
- if( KDbgTestModConds(DBG_APP, DBG_FLAG_ANY) ) {
+ if( KDbgTestModConds( DBG_APP, DBG_FLAG_ANY ) )
+ {
curl_easy_setopt( curl_handle, CURLOPT_VERBOSE , 1 );
}
#endif
- dctx.buff_size = ctx->chunk_size;
- dctx.data_count = 0;
- dctx.first_line = true;
- dctx.quiet = ctx->quiet;
- dctx.wr = wr;
- dctx.rc = 0;
- dctx.rowid = 0;
- dctx.byte_count = 0;
- dctx.buffer = malloc( dctx.buff_size );
- if ( dctx.buffer == NULL )
+ rc = init_data_context( ctx, wr, &dctx );
+ if ( rc != 0 )
{
- rc = RC( rcExe, rcFile, rcConstructing, rcMemory, rcExhausted );
- DISP_RC( rc, "creating receive-buffer failed" );
curl_easy_cleanup( curl_handle );
return rc;
}
@@ -355,7 +408,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
if ( rcc != CURLE_OK )
{
rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
- DISP_RC( rc, "curl_easy_setopt(callback) failed" );
+ LOGERR( klogErr, rc, "curl_easy_setopt(callback) failed" );
free( dctx.buffer );
curl_easy_cleanup( curl_handle );
return rc;
@@ -365,7 +418,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
if ( rcc != CURLE_OK )
{
rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
- DISP_RC( rc, "curl_easy_setopt(context) failed" );
+ LOGERR( klogErr, rc, "curl_easy_setopt(context) failed" );
free( dctx.buffer );
curl_easy_cleanup( curl_handle );
return rc;
@@ -375,7 +428,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
if ( rcc != CURLE_OK )
{
rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
- DISP_RC( rc, "curl_easy_setopt(uri) failed" );
+ LOGERR( klogErr, rc, "curl_easy_setopt(uri) failed" );
free( dctx.buffer );
curl_easy_cleanup( curl_handle );
return rc;
@@ -385,7 +438,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
if ( rcc != CURLE_OK )
{
rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
- DISP_RC( rc, "curl_easy_setopt(CURLOPT_LOW_SPEED_LIMIT) to 1000 failed" );
+ LOGERR( klogErr, rc, "curl_easy_setopt(CURLOPT_LOW_SPEED_LIMIT) to 1000 failed" );
free( dctx.buffer );
curl_easy_cleanup( curl_handle );
return rc;
@@ -395,7 +448,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
if ( rcc != CURLE_OK )
{
rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
- DISP_RC( rc, "curl_easy_setopt(CURLOPT_LOW_SPEED_TIME) to 5 failed" );
+ LOGERR( klogErr, rc, "curl_easy_setopt(CURLOPT_LOW_SPEED_TIME) to 5 failed" );
free( dctx.buffer );
curl_easy_cleanup( curl_handle );
return rc;
@@ -405,20 +458,10 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
if ( rcc != CURLE_OK )
{
rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
- DISP_RC( rc, "curl_easy_perform() failed" );
- }
-
- /* write the remainder of data that is eventually left
- in the buffer by the callback */
- if ( dctx.data_count > 0 )
- {
- /* returns the rc-code in dctx.rc, this function will return this code at the end */
- write_curl_data( &dctx );
+ LOGERR( klogErr, rc, "curl_easy_perform() failed" );
}
- if ( !ctx->quiet )
- OUTMSG (( "%ld bases\n", dctx.byte_count ));
- free( dctx.buffer );
+ finish_data_context( ctx, &dctx );
curl_easy_cleanup( curl_handle );
if ( dctx.rc == 0 )
{
@@ -428,38 +471,129 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
}
-static rc_t perform_load( const p_context ctx, VDBManager *mgr )
+static rc_t perform_file_load( const p_context ctx, KDirectory *dir, const TableWriterRefSeq* wr )
{
- const TableWriterRefSeq* wr;
+ rc_t rc = 0;
+ uint32_t pt = KDirectoryPathType ( dir, "%s", ctx->src );
+ if ( pt != kptFile )
+ {
+ rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
+ LOGERR( klogErr, rc, "input-file not found" );
+ }
+ else
+ {
+ const KFile * f;
+ rc = KDirectoryOpenFileRead ( dir, &f, "%s", ctx->src );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "cannot open input-file for read" );
+ }
+ else
+ {
+ data_ctx dctx;
+ rc = init_data_context( ctx, wr, &dctx );
+ if ( rc == 0 )
+ {
+ uint64_t pos = 0;
+ bool done = false;
+ while ( !done )
+ {
+ size_t num_read;
+ char buffer[ 8192 ];
+ rc = KFileReadAll ( f, pos, buffer, sizeof buffer, &num_read );
+ if ( rc != 0 )
+ {
+ PLOGERR( klogErr, ( klogErr, rc, "$(path) at $(pos)", "path=%s,pos=%lu", ctx->src, pos ) );
+ done = true;
+ }
+ else
+ {
+ on_curl_data( buffer, 1, num_read, &dctx );
+
+ if ( num_read < sizeof( buffer ) )
+ done = true;
+ else
+ pos += num_read;
+ }
+ }
+ finish_data_context( ctx, &dctx );
+ if ( dctx.rc == 0 )
+ {
+ dctx.rc = rc;
+ }
+ }
+ KFileRelease( f );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t perform_load( const p_context ctx, KDirectory *dir, VDBManager *mgr )
+{
+ const TableWriterRefSeq * wr;
rc_t rc = TableWriterRefSeq_Make( &wr, mgr, ctx->schema, ctx->dst_path, 0 );
- DISP_RC( rc, "perform_load:TableWriterRefSeq_Make() failed" );
- if ( rc == 0 )
+ if ( rc != 0 )
{
+ LOGERR( klogErr, rc, "perform_load:TableWriterRefSeq_Make() failed" );
+ }
+ else
+ {
+ rc_t rc1;
uint64_t rows;
if ( ctx->chunk_size != TableWriterRefSeq_MAX_SEQ_LEN )
{
rc = write_default_uint32( ctx->chunk_size,
ewrefseq_cn_MAX_SEQ_LEN, wr );
- DISP_RC( rc, "perform_load:write_default_uint32() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "perform_load:write_default_uint32() failed" );
+ }
}
if ( rc == 0 )
{
rc = write_default_bool( ctx->circular, ewrefseq_cn_CIRCULAR, wr );
- DISP_RC( rc, "perform_load:write_default_bool() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "perform_load:write_default_bool() failed" );
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ if ( ctx->input_is_file )
+ {
+ rc = perform_file_load( ctx, dir, wr ); /* <====================== */
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "perform_load:perform_file_load() failed" );
+ }
+ }
+ else
+ {
+ rc = perform_curl_load( ctx, wr ); /* <====================== */
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "perform_load:perform_curl_load() failed" );
+ }
+ }
}
+ rc1 = TableWriterRefSeq_Whack( wr, rc == 0, &rows, ctx->argv0, __DATE__, "RefSeq", REFSEQ_LOAD_VERS );
if ( rc == 0 )
{
- rc = perform_curl_load( ctx, wr );
- DISP_RC( rc, "perform_load:perform_curl_load() failed" );
+ if ( rc1 != 0 )
+ {
+ LOGERR( klogErr, rc1, "perform_load:TableWriterRefSeq_Whack() failed" );
+ }
+ rc = rc1;
}
- TableWriterRefSeq_Whack( wr, rc == 0, &rows );
if ( !ctx->quiet )
- OUTMSG (( "%lu rows were written\n", rows ));
+ KOutMsg( "%lu rows were written\n", rows );
}
return rc;
}
@@ -469,23 +603,38 @@ static rc_t check_if_schema_exists( KDirectory * dir, const char * schema_name )
{
KConfig * cfg;
rc_t rc = KConfigMake ( &cfg, NULL );
- if ( rc == 0 )
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "check_if_schema_exists:KConfigMake() failed" );
+ }
+ else
{
const KConfigNode *node;
rc = KConfigOpenNodeRead ( cfg, &node, "vdb/schema/paths" );
- if ( rc == 0 )
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "check_if_schema_exists:KConfigOpenNodeRead( 'vdb/schema/paths' ) failed" );
+ }
+ else
{
char buffer[ 1024 ];
size_t num_read;
rc = KConfigNodeRead ( node, 0, buffer, sizeof buffer, &num_read, NULL );
- if ( rc == 0 )
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "check_if_schema_exists:KConfigNodeRead() failed" );
+ }
+ else
{
uint32_t path_type;
buffer[ num_read ] = 0;
path_type = KDirectoryPathType ( dir, "%s/%s", buffer, schema_name );
if ( ( path_type & kptFile ) == 0 )
+ {
rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
+ }
}
+ KConfigNodeRelease ( node );
}
KConfigRelease ( cfg );
}
@@ -496,42 +645,49 @@ static rc_t check_if_schema_exists( KDirectory * dir, const char * schema_name )
static rc_t prepare_load( KDirectory * dir, const p_context ctx )
{
rc_t rc = 0;
- if ( !is_full_url( ctx->src ) )
- {
- if ( !ctx->quiet )
- OUTMSG (( "src is not a full url, assuming it is a accession\n" ));
- rc = build_full_url( &ctx->src );
- DISP_RC( rc, "ref_seq_load_main:build_full_url() failed" );
- }
- if ( rc != 0 )
- {
- return rc;
- }
- if ( ctx->schema == NULL )
- {
- ctx->schema = string_dup_measure ( DEFAULT_SCHEMA, NULL );
- }
- if ( ctx->chunk_size == 0 )
- {
- ctx->chunk_size = TableWriterRefSeq_MAX_SEQ_LEN;
- }
- rc = check_if_schema_exists( dir, ctx->schema );
- DISP_RC( rc, "check_if_schema_exists() failed" );
- if ( rc != 0 )
+ if ( !ctx->input_is_file )
{
- return rc;
+ /* if the input is not specified as a file, we check for url and correctness */
+ if ( !is_full_url( ctx->src ) )
+ {
+ if ( !ctx->quiet )
+ KOutMsg( "src is not a full url, assuming it is a accession\n" );
+ rc = build_full_url( &ctx->src );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "prepare_load:build_full_url() failed" );
+ }
+ }
}
- if ( !ctx->quiet )
+ /* and then we look if the given schema does exist */
+ if ( rc == 0 )
{
- OUTMSG (( "src = '%s'\n", ctx->src ));
- OUTMSG (( "dst = '%s'\n", ctx->dst_path ));
- OUTMSG (( "schema = '%s'\n", ctx->schema ));
- OUTMSG (( "chunk-size = %u\n", ctx->chunk_size ));
- }
+ if ( ctx->schema == NULL )
+ {
+ ctx->schema = string_dup_measure ( DEFAULT_SCHEMA, NULL );
+ }
+ if ( ctx->chunk_size == 0 )
+ {
+ ctx->chunk_size = TableWriterRefSeq_MAX_SEQ_LEN;
+ }
- return 0;
+ rc = check_if_schema_exists( dir, ctx->schema );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "check_if_schema_exists() failed" );
+ }
+ else if ( !ctx->quiet )
+ {
+ KOutMsg( "src = '%s'\n", ctx->src );
+ KOutMsg( "dst = '%s'\n", ctx->dst_path );
+ KOutMsg( "schema = '%s'\n", ctx->schema );
+ KOutMsg( "chunk-size = %u\n", ctx->chunk_size );
+ KOutMsg( "srs is file= %s\n", ctx->input_is_file ? "yes" : "no" );
+ }
+ }
+ return rc;
}
@@ -540,35 +696,71 @@ static rc_t remove_path( KDirectory * dir, const char * path, bool quiet )
rc_t rc;
if ( !quiet )
+ {
PLOGMSG( klogInfo, ( klogInfo, "removing '$(path)'", "path=%s", path ));
+ }
rc = KDirectoryRemove ( dir, true, path );
- DISP_RC( rc, "remove_path:KDirectoryRemove() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "remove_path:KDirectoryRemove() failed" );
+ }
return rc;
}
static rc_t ref_seq_load_main( const p_context ctx )
{
- rc_t rc;
KDirectory *dir;
-
- rc = KDirectoryNativeDir( &dir );
- DISP_RC( rc, "ref_seq_load_main:KDirectoryNativeDir() failed" );
- if ( rc == 0 )
+ rc_t rc = KDirectoryNativeDir( &dir );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ref_seq_load_main:KDirectoryNativeDir() failed" );
+ }
+ else
{
VDBManager *mgr;
rc = VDBManagerMakeUpdate ( &mgr, dir );
- DISP_RC( rc, "ref_seq_load_main:VDBManagerMakeRead() failed" );
- if ( rc == 0 )
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ref_seq_load_main:VDBManagerMakeRead() failed" );
+ }
+ else
{
rc = prepare_load( dir, ctx );
- DISP_RC( rc, "ref_seq_load_main:prepare_load() failed" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ref_seq_load_main:prepare_load() failed" );
+ }
+ else
+ {
+ char tblpath[ 4096 ];
+ rc = KDirectoryResolvePath( dir, true, tblpath, sizeof tblpath, ctx->dst_path );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "ref_seq_load_main:KDirectoryResolvePath() failed" );
+ }
+ else
+ {
+ KPathType type = VDBManagerPathType( mgr, tblpath );
+ if ( type != kptNotFound )
+ {
+ rc = RC( rcExe, rcDatabase, rcCreating, rcFile, rcExists );
+ PLOGERR( klogErr, ( klogErr, rc, "$(path)", "path=%s", tblpath ) );
+ }
+ }
+ }
+
if ( rc == 0 )
- rc = perform_load( ctx, mgr );
+ {
+ rc = perform_load( ctx, dir, mgr ); /* <====================== */
+ if ( rc != 0 )
+ {
+ remove_path( dir, ctx->dst_path, ctx->quiet );
+ }
+ }
+
VDBManagerRelease( mgr );
}
- if ( rc != 0 )
- remove_path( dir, ctx->dst_path, ctx->quiet );
KDirectoryRelease( dir );
}
return rc;
@@ -587,37 +779,41 @@ static rc_t ref_seq_load_main( const p_context ctx )
rc_t CC KMain ( int argc, char *argv [] )
{
Args * args;
- context *ctx;
-
rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
- MyOptions, sizeof MyOptions / sizeof ( OptDef ) );
- DISP_RC( rc, "KMain:ArgsMakeAndHandle() failed" );
- if ( rc != 0 ) return rc;
-
- KLogHandlerSetStdErr();
- rc = context_init( &ctx );
- DISP_RC( rc, "KMain:copy_context_init() failed" );
+ MyOptions, sizeof MyOptions / sizeof ( OptDef ) );
if ( rc != 0 )
{
- ArgsWhack ( args );
- return rc;
+ LOGERR( klogErr, rc, "ArgsMakeAndHandle() failed" );
}
-
- rc = context_capture_arguments_and_options( args, ctx );
- if ( rc != 0 )
+ else
{
- MiniUsage( args );
- context_destroy( ctx );
- ArgsWhack ( args );
- return rc;
- }
+ context *ctx;
- if ( ctx->usage_requested )
- MiniUsage( args );
- else
- rc = ref_seq_load_main( ctx );
+ KLogHandlerSetStdErr();
+ rc = context_init( &ctx );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "KMain:context_init() failed" );
- context_destroy( ctx );
- ArgsWhack (args);
+ }
+ else
+ {
+ rc = context_capture_arguments_and_options( args, ctx );
+ if ( rc != 0 )
+ {
+ MiniUsage( args );
+ if ( argc < 2 ) rc = 0;
+ }
+ else
+ {
+ if ( ctx->usage_requested )
+ MiniUsage( args );
+ else
+ rc = ref_seq_load_main( ctx ); /* <====================== */
+ }
+ context_destroy( ctx );
+ }
+ ArgsWhack ( args );
+ }
return rc;
}
diff --git a/tools/refseq-load/refseq-load.vers b/tools/refseq-load/refseq-load.vers
index 63a1a1c..f90b1af 100644
--- a/tools/refseq-load/refseq-load.vers
+++ b/tools/refseq-load/refseq-load.vers
@@ -1 +1 @@
-2.1.9
+2.3.2
diff --git a/tools/refseq-load/refseq-load.vers.h b/tools/refseq-load/refseq-load.vers.h
deleted file mode 100644
index d3401fe..0000000
--- a/tools/refseq-load/refseq-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define REFSEQ_LOAD_VERS 0x02010005
diff --git a/tools/sam-dump/#Makefile# b/tools/sam-dump/#Makefile#
new file mode 100644
index 0000000..4c1363e
--- /dev/null
+++ b/tools/sam-dump/#Makefile#
@@ -0,0 +1,118 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/sam-dump
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+ sam-dump
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+ $(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# sam-dump
+#
+SAMDUMP_SRC = \
+ sam-dump
+
+SAMDUMP_OBJ = \
+ $(addsuffix .$(OBJX),$(SAMDUMP_SRC))
+
+SAMDUMP_LIB = \
+ -lkapp \
+ -ssrapath \
+ -lalign-reader \
+ -daxf \
+ -lsraschema \
+ -dsraxf \
+ -dvxf \
+ -lvdb \
+ -lkdb \
+ -lvfs \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lksrch \
+ -lklib \
+ -lm
+
+ifdef NCBI
+CFLAGS += -DNCBI
+endif
+
+$(BINDIR)/sam-dump: $(SAMDUMP_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SAMDUMP_LIB)
+
+samdump_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) samdump $(SAMDUMP_OBJ)
diff --git a/tools/sam-dump/Makefile b/tools/sam-dump/Makefile
index 4fda8fe..8d1d212 100644
--- a/tools/sam-dump/Makefile
+++ b/tools/sam-dump/Makefile
@@ -25,7 +25,7 @@
default: std
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
MODULE = tools/sam-dump
include $(TOP)/build/Makefile.env
@@ -42,15 +42,13 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# std
@@ -61,19 +59,18 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
-# clean
+# vers-includes
#
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
#-------------------------------------------------------------------------------
-# tag
+# clean
#
-tag: \
- $(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
#-------------------------------------------------------------------------------
# sam-dump
@@ -86,25 +83,20 @@ SAMDUMP_OBJ = \
SAMDUMP_LIB = \
-lkapp \
- -ssrapath \
-lalign-reader \
- -daxf \
+ $(READONLY_SCHEMA_LIBS) \
-lsraschema \
- -dsraxf \
- -dvxf \
-lvdb \
-lkdb \
+ -lvfs \
+ -ssrapath \
+ -lkrypto \
-lkfg \
-lkfs \
-lksrch \
+ -lkproc \
-lklib \
- -ldl \
- -lz \
- -lbz2 \
-lm
$(BINDIR)/sam-dump: $(SAMDUMP_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SAMDUMP_LIB)
-
-samdump_tag:
- @ $(TOP)/build/tag-module.sh $(MODULE) samdump $(SAMDUMP_OBJ)
diff --git a/tools/sam-dump/sam-dump.c b/tools/sam-dump/sam-dump.c
index f359554..682f264 100644
--- a/tools/sam-dump/sam-dump.c
+++ b/tools/sam-dump/sam-dump.c
@@ -23,29 +23,41 @@
* ===========================================================================
*
*/
+#include <klib/report.h>
#include <klib/container.h>
#include <klib/log.h>
#include <klib/out.h>
#include <klib/status.h>
#include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/printf.h>
+#include <klib/data-buffer.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
#include <kfs/file.h>
#include <kfs/buffile.h>
#include <kfs/gzip.h>
#include <kfs/bzip.h>
-#include <kdb/manager.h>
#include <kdb/meta.h>
#include <kdb/namelist.h>
#include <kapp/main.h>
#include <kapp/args.h>
#include <insdc/insdc.h>
#include <insdc/sra.h>
+#include <vdb/report.h>
#include <vdb/manager.h>
#include <vdb/database.h>
#include <vdb/table.h>
#include <vdb/cursor.h>
#include <vdb/vdb-priv.h>
#include <vdb/schema.h>
+#include <vdb/dependencies.h>
#include <sra/sraschema.h>
+#include <sra/srapath.h>
+#include <align/dna-reverse-cmpl.h>
+#include <align/iterator.h>
+#include <align/reference.h>
+#include <align/quality-quantizer.h>
#include <kfs/directory.h>
#include <os-native.h>
@@ -53,14 +65,28 @@
#include <stdio.h>
#include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
#include <string.h>
+#include <strtol.h>
#include <ctype.h>
#include <assert.h>
#include "debug.h"
#include "sam-dump.vers.h"
-typedef struct TAlignedRegion_struct {
+#if _ARCH_BITS == 64
+#define USE_MATE_CACHE 1
+#define CURSOR_CACHE (4 * 1024 * 1024 * 1024UL)
+#else
+#define USE_MATE_CACHE 0
+#define CURSOR_CACHE (256 * 1024 * 1024)
+#endif
+
+
+
+typedef struct TAlignedRegion_struct
+{
char name[1024];
struct {
INSDC_coord_zero from;
@@ -68,18 +94,29 @@ typedef struct TAlignedRegion_struct {
} r[10240];
int rq;
INSDC_coord_zero max_to;
+ INSDC_coord_zero min_from;
+ int printed;
} TAlignedRegion;
-typedef struct TMatepairDistance_struct {
- uint64_t from;
- uint64_t to;
+
+typedef struct TMatepairDistance_struct
+{
+ uint32_t from;
+ uint32_t to;
} TMatepairDistance;
-typedef struct SParam_struct {
- const char* accession;
- const char* path;
- bool use_seqid;
+
+struct params_s
+{
+ /* which outputs are on */
+ bool primaries;
+ bool secondaries;
bool unaligned;
+ bool cg_evidence;
+ bool cg_ev_dnb;
+ bool cg_sam;
+
+ bool use_seqid;
bool long_cigar;
bool reheader;
bool noheader;
@@ -87,7 +124,16 @@ typedef struct SParam_struct {
bool fasta;
bool fastq;
bool spot_group_in_name;
- const char* name_prefix;
+ bool cg_friendly_names;
+ bool reverse_unaligned;
+ bool unaligned_spots;
+
+ bool output_gzip;
+ bool output_bz2;
+
+ bool xi;
+ int cg_style; /* 0: raw; 1: with B's; 2: without B's, fixed up SEQ/QUAL; */
+ char const *name_prefix;
/* region filter data */
TAlignedRegion* region;
uint32_t region_qty;
@@ -95,668 +141,1663 @@ typedef struct SParam_struct {
bool mp_dist_unknown;
TMatepairDistance* mp_dist;
uint32_t mp_dist_qty;
-} SParam;
-
-typedef union UData_union {
- const void* v;
- const uint32_t* u32;
- const int32_t* i32;
- const int64_t* i64;
- const uint8_t* u8;
- const char* str;
+ uint32_t test_rows;
+
+ /* mate info cache */
+ int64_t mate_row_gap_cachable;
+
+ char const **comments;
+
+ bool quantizeQual;
+ uint8_t qualQuant[256];
+ uint8_t qualQuantSingle; /*** the quality is quantized - single value, no need to retrieve **/
+};
+
+
+struct params_s const *param;
+ReferenceList const *gRefList;
+
+
+typedef union UData_union
+{
+ void const *v;
+ uint32_t const *u32;
+ int32_t const *i32;
+ int64_t const *i64;
+ uint64_t const *u64;
+ uint8_t const *u8;
+ char const *str;
+ bool const *tf;
INSDC_coord_one* coord1;
INSDC_coord_zero* coord0;
INSDC_coord_len* coord_len;
INSDC_coord_val* coord_val;
INSDC_SRA_xread_type* read_type;
+ INSDC_SRA_read_filter* read_filter;
} UData;
-typedef struct SCol_struct {
- const char* name;
+
+typedef struct SCol_struct
+{
+ char const *name;
uint32_t idx;
UData base;
uint32_t len;
bool optional;
} SCol;
-static
-rc_t OpenVTable(const VDatabase* db, const VTable** tbl, const char *name, bool optional)
+
+typedef struct STable_struct
{
- rc_t rc = VDatabaseOpenTableRead(db, tbl, name);
- if( GetRCState(rc) == rcNotFound && optional ) {
- rc = 0;
- *tbl = NULL;
+ char const *name;
+ VTable const *vtbl;
+} STable;
+
+
+typedef struct SCursCache_struct
+{
+ KVector* cache;
+ KVector* cache_unaligned_mate; /* keeps unaligned-mate for a half-aligned spots */
+ uint32_t sam_flags;
+ INSDC_coord_zero pnext;
+ int32_t tlen;
+ ReferenceObj const *ref;
+ /* cache stats */
+ uint64_t projected;
+ uint64_t added;
+ uint64_t hit;
+ uint64_t bad;
+} SCursCache;
+
+
+typedef struct SCurs_struct
+{
+ STable const *tbl;
+ VCursor const *vcurs;
+ SCursCache* cache;
+ SCursCache cache_local;
+ uint64_t col_reads_qty;
+} SCurs;
+
+enum eDSTableType
+{
+ edstt_NotSpecified,
+ edstt_Reference,
+ edstt_Sequence,
+ edstt_PrimaryAlignment,
+ edstt_SecondaryAlignment,
+ edstt_EvidenceAlignment,
+ edstt_EvidenceInterval
+};
+
+
+typedef struct DataSource_s {
+ STable tbl;
+ SCurs curs;
+ SCol *cols;
+ enum eDSTableType type;
+} DataSource;
+
+
+#define DATASOURCE_INIT(O, NAME) do { memset(&O, 0, sizeof(O)); O.tbl.name = NAME; O.curs.tbl = &O.tbl; } while(0)
+
+
+typedef struct SAM_dump_ctx_s
+{
+ VDatabase const *db;
+ char const *fullPath;
+ char const *accession;
+ char const *readGroup;
+
+ DataSource ref;
+ DataSource pri;
+ DataSource sec;
+ DataSource evi;
+ DataSource eva;
+ DataSource seq;
+} SAM_dump_ctx_t;
+
+
+enum ealg_col
+{
+ alg_SEQ_SPOT_ID = 0,
+ alg_SEQ_NAME,
+ alg_MAPQ,
+ alg_CIGAR,
+ alg_READ,
+ alg_READ_START,
+ alg_READ_LEN,
+ alg_CIGAR_LEN,
+ alg_SAM_QUALITY,
+ alg_SPOT_GROUP,
+ alg_SEQ_SPOT_GROUP,
+ alg_SEQ_READ_ID,
+ alg_REVERSED,
+ alg_ALIGNMENT_COUNT,
+ alg_EDIT_DISTANCE,
+ alg_READ_FILTER,
+ alg_MATE_ALIGN_ID,
+ alg_MATE_REF_NAME,
+ alg_SAM_FLAGS,
+ alg_REF_START,
+ alg_MATE_REF_POS,
+ alg_ALIGN_GROUP,
+ alg_EVIDENCE_ALIGNMENT_IDS,
+ alg_REF_PLOIDY,
+ alg_REF_ID,
+ alg_MATE_REF_ID,
+ alg_HAS_MISMATCH,
+ alg_REGION_FILTER,
+ alg_REF_NAME = alg_REGION_FILTER,
+ alg_REF_SEQ_ID,
+ alg_REF_POS,
+ alg_REF_LEN,
+ alg_DISTANCE_FILTER,
+ alg_TEMPLATE_LEN = alg_DISTANCE_FILTER,
+ alg_CG_TAGS_STR
+};
+
+
+SCol const g_alg_col_tmpl[] =
+{
+ { "SEQ_SPOT_ID", 0, {NULL}, 0, true },
+ { "SEQ_NAME", 0, {NULL}, 0, false },
+ { "MAPQ", 0, {NULL}, 0, false },
+ { "?CIGAR column name?", 0, {NULL}, 0, false },
+ { "?READ column name?", 0, {NULL}, 0, false },
+ { "READ_START", 0, {NULL}, 0, false }, /* READ_START */
+ { "READ_LEN", 0, {NULL}, 0, false }, /* READ_LEN */
+ { "?CIGAR_LEN column name?", 0, {NULL}, 0, true }, /* CIGAR_LEN */
+ { "SAM_QUALITY", 0, {NULL}, 0, false },
+ { "SPOT_GROUP", 0, {NULL}, 0, true },
+ { "SEQ_SPOT_GROUP", 0, {NULL}, 0, true },
+ { "SEQ_READ_ID", 0, {NULL}, 0, true },
+ { "REF_ORIENTATION", 0, {NULL}, 0, true },
+ { "ALIGNMENT_COUNT", 0, {NULL}, 0, true },
+ { "EDIT_DISTANCE", 0, {NULL}, 0, false },
+ { "", 0, {NULL}, 0, false },
+ /* start cols used as standalone in DumpUnaligned */
+ /* MATE_ALIGN_ID col must preceeed
+ MATE_REF_NAME, MATE_REF_POS, SAM_FLAGS, TEMPLATE_LEN for cache to work */
+ { "MATE_ALIGN_ID", 0, {NULL}, 0, false },
+ { "?MATE_REF_NAME column name?", 0, {NULL}, 0, false },
+ { "SAM_FLAGS", 0, {NULL}, 0, false },
+ { "REF_START", 0, {NULL}, 0, false }, /* priming cursor cache */
+ { "MATE_REF_POS", 0, {NULL}, 0, false },
+ { "ALIGN_GROUP", 0, {NULL}, 0, true },
+ { "", 0, {NULL}, 0, true }, /* EVIDENCE_ALIGNMENT_IDS */
+ { "", 0, {NULL}, 0, true }, /* REF_PLOIDY */
+ { "REF_ID", 0, {NULL}, 0, true }, /* REF_ID */
+ { "MATE_REF_ID", 0, {NULL}, 0, true }, /* priming cursor cache */
+ { "(bool)HAS_MISMATCH", 0, {NULL}, 0, true },
+ /* these are read before any other for filtering so they must be last */
+ { "REF_NAME", 0, {NULL}, 0, false },
+ { "REF_SEQ_ID", 0, {NULL}, 0, false },
+ { "REF_POS", 0, {NULL}, 0, false },
+ /* end cols used as standalone in DumpUnaligned */
+ { "REF_LEN", 0, {NULL}, 0, false },
+ { "TEMPLATE_LEN", 0, {NULL}, 0, false },
+ { NULL, 0, {NULL}, 0, false }, /* alg_CG_TAGS_STR */
+ { NULL, 0, {NULL}, 0, false }
+};
+
+enum eseq_col
+{
+ seq_READ = 0,
+ seq_QUALITY,
+ seq_SPOT_GROUP,
+ seq_READ_START,
+ seq_READ_LEN,
+ seq_READ_TYPE,
+ seq_READ_FILTER,
+ seq_NAME,
+ seq_PRIMARY_ALIGNMENT_ID
+};
+
+static
+SCol const gSeqCol[] =
+{
+ { "READ", 0, {NULL}, 0, false },
+/* { "(INSDC:quality:text:phred_33)QUALITY", 0, {NULL}, 0, false }, */
+ { "(INSDC:quality:phred)QUALITY", 0, {NULL}, 0, false }, /* changed Jan 29 2013, because some runs don't have the phred_33-type in schema */
+ { "SPOT_GROUP", 0, {NULL}, 0, true },
+ { "READ_START", 0, {NULL}, 0, true },
+ { "READ_LEN", 0, {NULL}, 0, true },
+ { "READ_TYPE", 0, {NULL}, 0, true },
+ { "READ_FILTER", 0, {NULL}, 0, true },
+ { "NAME", 0, {NULL}, 0, true },
+ /* must be last in list to avoid reading all columns */
+ { "PRIMARY_ALIGNMENT_ID", 0, {NULL}, 0, true },
+ { NULL, 0, {NULL}, 0, false }
+};
+
+
+static rc_t RefSeqPrint( void )
+{
+ rc_t rc = 0;
+ uint32_t i, count = 0;
+
+ rc = ReferenceList_Count( gRefList, &count );
+ for( i = 0; rc == 0 && i < count; i++ )
+ {
+ ReferenceObj const *obj;
+ rc = ReferenceList_Get( gRefList, &obj, i );
+ if ( rc == 0 )
+ {
+ char const *seqid = NULL;
+ rc = ReferenceObj_SeqId( obj, &seqid );
+ if ( rc == 0 )
+ {
+ char const *name = NULL;
+ rc = ReferenceObj_Name( obj, &name );
+ if ( rc == 0 )
+ {
+ INSDC_coord_len len;
+ rc = ReferenceObj_SeqLength( obj, &len );
+ if ( rc == 0 )
+ {
+ char const *nm;
+ if ( param->use_seqid && seqid != NULL && seqid[ 0 ] != '\0' )
+ {
+ nm = seqid;
+ }
+ else
+ {
+ nm = name;
+ }
+ KOutMsg( "@SQ\tSN:%s", nm );
+ if ( nm != seqid && seqid != NULL && seqid[ 0 ] != '\0' && strcmp( nm, seqid ) != 0)
+ {
+ KOutMsg( "\tAS:%s", seqid );
+ }
+ KOutMsg( "\tLN:%u\n", len );
+ }
+ }
+ }
+ ReferenceObj_Release( obj );
+ }
}
return rc;
}
-static
-rc_t Cursor_Init(const VTable* tbl, const VCursor** curs, SCol* cols)
+
+#if USE_MATE_CACHE
+static rc_t Cache_Init( SCursCache* c )
+{
+ if ( c != NULL )
+ {
+ rc_t rc;
+ memset( c, 0, sizeof( *c ) );
+ rc=KVectorMake( &c->cache );
+ if(rc == 0){
+ rc=KVectorMake( &c->cache_unaligned_mate );
+ }
+ }
+ return 0;
+}
+
+
+static void Cache_Close( char const *name, SCursCache* c )
+{
+ if ( c != NULL )
+ {
+ KVectorRelease( c->cache );
+ KVectorRelease( c->cache_unaligned_mate );
+ if ( c->added > 0 )
+ {
+ SAM_DUMP_DBG( 2, ( "%s cache stats: projected %lu added of those %lu; "
+ "hits %lu of those broken %lu;\n",
+ name, c->projected, c->added, c->hit, c->bad ) );
+ }
+ }
+ memset( c, 0, sizeof( *c ) );
+}
+
+
+static rc_t Cache_Add( uint64_t key, SCurs const *curs, SCol const *cols )
{
+ /* compact values for mate record to cache as:
+ pos_delta - 32bit, ref_proj - 11bit, flags - 11bit, rnext_idx - 10bit = 64bit
+ */
rc_t rc = 0;
+ ReferenceObj const *r = NULL;
+ uint32_t rid = 0;
+ uint64_t val = 0;
+ int64_t mate_id = cols[ alg_MATE_ALIGN_ID ].len > 0 ? cols[ alg_MATE_ALIGN_ID ].base.i64[ 0 ] : 0;
- *curs = NULL;
- if (tbl == NULL)
- return 0;
+ rc = ReferenceList_Find( gRefList, &r, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len );
+ if ( rc == 0 )
+ {
+ rc = ReferenceObj_Idx( r, &rid );
+ }
+#if _DEBUGGING
+ {
+ char const *rname = NULL;
+ curs->cache->projected++;
+ ReferenceObj_Name( r, &rname );
+ SAM_DUMP_DBG( 10, ( "to cache row %li for mate %li: %u,%s[%hu],%u,%u,%i",
+ key, mate_id, cols[ alg_SAM_FLAGS ].base.u32[ 0 ], rname, rid,
+ cols[ alg_REF_POS ].len ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0,
+ cols[ alg_MATE_REF_POS ].len ? cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] : 0,
+ cols[ alg_TEMPLATE_LEN ].len > 0 ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0));
+ }
+#endif
+ if ( rc == 0 && !( rid & 0xFC00 ) )
+ {
+ int64_t pos_delta64;
+ int32_t pos_delta32;
- rc = VTableCreateCachedCursorRead(tbl, curs, 32 * 1024 * 1024);
- while(rc == 0 && cols->name != NULL) {
- if( (rc = VCursorAddColumn(*curs, &cols->idx, cols->name)) != 0 ) {
- if( GetRCState(rc) == rcExists ||
- (GetRCState(rc) == rcNotFound && cols->optional) ) {
- rc = 0;
- } else {
- PLOGERR(klogErr, (klogErr, rc, "column $(c)", PLOG_S(c), cols->name));
+ if ( mate_id != 0 )
+ {
+ ReferenceObj const *rm = NULL;
+ uint32_t rm_id;
+
+ rc = ReferenceList_Find( gRefList, &rm, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len );
+ if ( rc == 0 )
+ {
+ rc = ReferenceObj_Idx( rm, &rm_id );
+ }
+ assert( rm != NULL );
+ if ( rc == 0 && rid != rm_id )
+ {
+ char const *rm_name = NULL;
+ ReferenceObj_Name( rm, &rm_name );
+ mate_id = 0;
+ SAM_DUMP_DBG( 10, ( " mate ref differ: %s[%hu]!", rm_name, rm_id ) );
+ }
+ ReferenceObj_Release( rm );
+ }
+
+ if ( mate_id != 0 )
+ {
+ pos_delta64 = cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] - cols[ alg_REF_POS ].base.coord0[ 0 ];
+ }
+ else
+ {
+ pos_delta64 = cols[ alg_REF_POS ].base.coord0[ 0 ];
+ }
+
+ pos_delta32 = pos_delta64;
+ if ( pos_delta64 == pos_delta32 )
+ {
+ int64_t ref_proj;
+ if ( mate_id == 0 )
+ {
+ ref_proj = 0; /* indicates full value in delta */
+ }
+ else if ( cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] < 0 )
+ {
+ assert( pos_delta32 <= 0 );
+ ref_proj = pos_delta32 - cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ];
+ }
+ else
+ {
+ assert( pos_delta32 >= 0 );
+ ref_proj = cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] - pos_delta32;
+ }
+
+ if ( !( ref_proj & 0xFFFFF800 ) )
+ {
+ val = ( pos_delta64 << 32 ) | ( ref_proj << 21 ) | ( cols[ alg_SAM_FLAGS ].base.u32[ 0 ] << 10 ) | rid;
+ rc = KVectorSetU64( curs->cache->cache, key, val );
}
}
- cols++;
}
- if( rc == 0 ) {
- rc = VCursorOpen(*curs);
+ ReferenceObj_Release( r );
+
+#if _DEBUGGING
+ if ( val == 0 )
+ {
+ SAM_DUMP_DBG( 10, ( " --> out of range\n" ) );
}
- if( rc != 0 ) {
- VCursorRelease(*curs);
- *curs = NULL;
+ else
+ {
+ SAM_DUMP_DBG( 10, ( " --> %016lX\n", val ) );
+ curs->cache->added++;
}
+#endif
return rc;
}
-static
-rc_t Cursor_Read(const VCursor* curs, int64_t row_id, SCol* cols)
+
+static rc_t Cache_Get( SCurs const *curs, uint64_t key, uint64_t* val )
{
- rc_t rc = 0;
- if( (rc = VCursorCloseRow(curs)) == 0 &&
- (rc = VCursorSetRowId(curs, row_id)) == 0 &&
- (rc = VCursorOpenRow(curs)) == 0 ) {
- while( rc == 0 && cols->name != NULL ) {
- if( cols->idx != 0 && (rc = VCursorCellData(curs, cols->idx, NULL, &cols->base.v, NULL, &cols->len)) != 0 ) {
- SAM_DUMP_DBG(2, ("%s: read column %s spot %u %R\n", __func__, cols->name, row_id, rc));
- break;
- }
- cols++;
+ rc_t rc = KVectorGetU64( curs->cache->cache, key, val );
+ if ( rc == 0 )
+ {
+ uint32_t id = ( *val & 0x3FF );
+#if _DEBUGGING
+ curs->cache->hit++;
+#endif
+ KVectorUnset( curs->cache->cache, key );
+ rc = ReferenceList_Get( gRefList, &curs->cache->ref, id );
+ if ( rc != 0 )
+ {
+ *val = 0;
+ curs->cache->ref = NULL;
+ rc = RC( rcExe, rcNoTarg, rcSearching, rcItem, rcNotFound );
+#if _DEBUGGING
+ curs->cache->bad++;
+#endif
+ }
+ else
+ {
+ SAM_DUMP_DBG( 10, ( "from cache row %li %016lX", key, *val ) );
}
}
return rc;
}
-struct {
- KWrtWriter writer;
- void* data;
- KFile* kfile;
- uint64_t pos;
-} g_out_writer = {NULL};
-static
-rc_t CC BufferedWriter(void* self, const char* buffer, size_t bufsize, size_t* num_writ)
+static void Cache_Unpack( uint64_t val, int64_t mate_id, SCurs const *curs, SCol* cols )
{
- rc_t rc = 0;
+ int32_t pos_delta = ( val & 0xFFFFFFFF00000000 ) >> 32;
+ uint32_t ref_proj = ( val & 0x00000000FFE00000 ) >> 21;
+ uint32_t flags = ( val & 0x00000000001FFC00 ) >> 10;
- assert(buffer != NULL);
- assert(num_writ != NULL);
+ if ( mate_id != 0 )
+ {
+ /* adjust flags for mate record */
+ curs->cache->sam_flags = ( flags & 0x1 ) |
+ ( flags & 0x2 ) |
+ ( ( flags & 0x8 ) >> 1 ) |
+ ( ( flags & 0x4 ) << 1 ) |
+ ( ( flags & 0x20 ) >> 1 ) |
+ ( ( flags & 0x10 ) << 1 ) |
+ ( ( flags & 0x40 ) ? 0x80 : 0x40 ) |
+ ( flags & 0x700 );
+ }
+ else
+ {
+ /* preserve flags as if original records is restored */
+ curs->cache->sam_flags = flags;
+ }
+ cols[ alg_SAM_FLAGS ].base.u32 = &curs->cache->sam_flags;
+ cols[ alg_SAM_FLAGS ].len = sizeof( curs->cache->sam_flags );
- do {
- if( (rc = KFileWrite(g_out_writer.kfile, g_out_writer.pos, buffer, bufsize, num_writ)) == 0 ) {
- buffer += *num_writ;
- bufsize -= *num_writ;
- g_out_writer.pos += *num_writ;
- }
- } while(rc == 0 && bufsize > 0);
+ if ( param->use_seqid )
+ {
+ ReferenceObj_SeqId( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+ }
+ else
+ {
+ ReferenceObj_Name( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+ }
+
+ cols[ alg_MATE_REF_NAME ].len = strlen( cols[ alg_MATE_REF_NAME ].base.str );
+
+ if ( ref_proj == 0 )
+ {
+ curs->cache->pnext = pos_delta;
+ curs->cache->tlen = 0;
+ }
+ else if ( pos_delta > 0 )
+ {
+ curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+ curs->cache->tlen = - ( ref_proj + pos_delta );
+ }
+ else
+ {
+ curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+ curs->cache->tlen = ref_proj - pos_delta;
+ }
+
+ cols[ alg_MATE_REF_POS ].base.coord0 = &curs->cache->pnext;
+ cols[ alg_MATE_REF_POS ].len = sizeof( curs->cache->pnext );
+ cols[ alg_TEMPLATE_LEN ].base.i32 = &curs->cache->tlen;
+ cols[ alg_TEMPLATE_LEN ].len = sizeof( curs->cache->tlen );
+ {
+ uint32_t id;
+ ReferenceObj_Idx( curs->cache->ref, &id );
+ SAM_DUMP_DBG( 10, ( " --> mate %li: %u,%s[%hu],%u,%i\n",
+ mate_id, curs->cache->sam_flags, cols[ alg_MATE_REF_NAME ].base.str,
+ id, curs->cache->pnext, curs->cache->tlen ) );
+ }
+}
+#endif /* USE_MATE_CACHE */
+
+#if 0
+static rc_t OpenVTable( VDatabase const *db, STable* tbl, char const *name, bool optional )
+{
+ rc_t rc = VDatabaseOpenTableRead( db, &tbl->vtbl, name );
+ if ( GetRCState( rc ) == rcNotFound && optional )
+ {
+ rc = 0;
+ tbl->vtbl = NULL;
+ }
+ tbl->name = name;
return rc;
}
+#endif
-static
-rc_t BufferedWriterMake(bool gzip, bool bzip2)
+static rc_t Cursor_Open( STable const *const tbl, SCurs *const curs, SCol cols[], SCursCache* cache )
{
rc_t rc = 0;
+ unsigned i;
+
+ curs->vcurs = NULL;
+ if ( tbl == NULL || tbl->vtbl == NULL )
+ return 0;
+
+ rc = VTableCreateCachedCursorRead( tbl->vtbl, &curs->vcurs, CURSOR_CACHE );
+ if ( rc != 0 )
+ return rc;
+
+ rc = VCursorPermitPostOpenAdd( curs->vcurs );
+ if ( rc != 0 )
+ return rc;
- if( gzip && bzip2 ) {
- rc = RC(rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous);
- } else if( g_out_writer.writer != NULL ) {
- rc = RC(rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous);
- } else if( (rc = KFileMakeStdOut(&g_out_writer.kfile)) == 0 ) {
- g_out_writer.pos = 0;
- if( gzip ) {
- KFile* gz;
- if( (rc = KFileMakeGzipForWrite(&gz, g_out_writer.kfile)) == 0 ) {
- KFileRelease(g_out_writer.kfile);
- g_out_writer.kfile = gz;
+ if ( rc == 0 )
+ {
+ rc = VCursorOpen( curs->vcurs );
+ if ( rc == 0 )
+ {
+#if USE_MATE_CACHE
+ if ( cache != NULL )
+ {
+ curs->cache = cache;
}
- } else if( bzip2 ) {
- KFile* bz;
- if( (rc = KFileMakeBzip2ForWrite(&bz, g_out_writer.kfile)) == 0 ) {
- KFileRelease(g_out_writer.kfile);
- g_out_writer.kfile = bz;
+ else
+ {
+ curs->cache = &curs->cache_local;
+ rc = Cache_Init( &curs->cache_local );
}
+#endif /* USE_MATE_CACHE */
+ curs->tbl = tbl;
}
- if( rc == 0 ) {
- KFile* buf;
- if( (rc = KBufFileMakeWrite(&buf, g_out_writer.kfile, false, 128 * 1024)) == 0 ) {
- KFileRelease(g_out_writer.kfile);
- g_out_writer.kfile = buf;
- g_out_writer.writer = KOutWriterGet();
- g_out_writer.data = KOutDataGet();
- rc = KOutHandlerSet(BufferedWriter, &g_out_writer);
+ }
+
+ for ( i = 0; cols[ i ].name != NULL; ++i )
+ {
+ if ( cols[ i ].name[ 0 ] == 0 )
+ continue;
+ rc = VCursorAddColumn( curs->vcurs, &cols[ i ].idx, cols[ i ].name );
+ if ( GetRCObject( rc ) == rcColumn )
+ {
+ switch ( GetRCState( rc ) )
+ {
+ case rcNotFound:
+ case rcUndefined:
+ if ( !cols[ i ].optional )
+ break;
+ case rcExists:
+ rc = 0;
+ default:
+ break;
}
}
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t) column $(c)", "t=%s,c=%s", tbl->name, cols[ i ].name ) );
+ break;
+ }
+ }
+ if ( rc != 0 )
+ {
+ VCursorRelease( curs->vcurs );
+ curs->vcurs = NULL;
+ if ( rc != KLogLastErrorCode() )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t)", "t=%s", tbl->name ) );
+ }
+ }
+ else
+ {
+ SAM_DUMP_DBG( 2, ( "%s: table %s\n", __func__, curs->tbl->name ) );
}
return rc;
}
-static
-void BufferedWriterRelease(void)
+
+static void Cursor_Close( SCurs* curs )
{
- KFileRelease(g_out_writer.kfile);
- if( g_out_writer.writer != NULL ) {
- KOutHandlerSet(g_out_writer.writer, g_out_writer.data);
+ if ( curs != NULL && curs->vcurs != NULL )
+ {
+ SAM_DUMP_DBG( 2, ( "%s: table %s, columns rows read %lu\n", __func__, curs->tbl->name, curs->col_reads_qty ) );
+ VCursorRelease( curs->vcurs );
+#if USE_MATE_CACHE
+ if ( curs->cache == &curs->cache_local )
+ {
+ Cache_Close( curs->tbl->name, curs->cache );
+ }
+#endif /* USE_MATE_CACHE */
+ memset( curs, 0, sizeof( *curs ) );
}
- g_out_writer.writer = NULL;
}
-typedef struct RefSeq {
- BSTNode node;
- char name[1024];
- char seqid[1024];
- uint32_t len;
-} RefSeq;
-static
-int CC RefSeq_sort( const BSTNode* item, const BSTNode* node )
+static rc_t Cursor_Read( DataSource *ds, int64_t row_id, int firstCol, unsigned nCols )
{
- return strcmp(((const RefSeq*)item)->name, ((const RefSeq*)node)->name);
+ rc_t rc = 0;
+
+ if ( ds->curs.vcurs == NULL )
+ {
+ rc = Cursor_Open( &ds->tbl, &ds->curs, ds->cols, ds->curs.cache );
+ if ( rc != 0 )
+ return rc;
+ }
+ if (1)
+ {
+ SCol *const col = &ds->cols[ firstCol ];
+ unsigned i;
+
+ for ( i = 0; i < nCols && col[ i ].name; ++i )
+ {
+ uint32_t const idx = col[ i ].idx;
+
+ if ( idx != 0 )
+ {
+ uint32_t elem_bits;
+ uint32_t bit_offset;
+ uint32_t elem_count;
+ void const *base;
+
+ rc = VCursorCellDataDirect( ds->curs.vcurs, row_id, idx, &elem_bits, &base, &bit_offset, &elem_count );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+ ds->tbl.name, row_id, col[ i ].name ) );
+ return rc;
+ }
+
+ assert( bit_offset == 0 );
+ assert( elem_bits % 8 == 0 );
+
+ col[ i ].base.v = base;
+ col[ i ].len = elem_count;
+ }
+ }
+ }
+ return rc;
}
-typedef struct RefSeq_rowrange_data_struct {
- int64_t ref_id;
- const RefSeq* node;
-} RefSeq_rowrange_data;
+struct
+{
+ KWrtWriter writer;
+ void* data;
+ KFile* kfile;
+ uint64_t pos;
+} g_out_writer = {NULL};
+
-static
-void CC RefSeq_dump( BSTNode *n, void *data )
+static rc_t CC BufferedWriter( void *const self, char const buffer[], size_t const bufsize, size_t *const pnum_writ )
{
- const RefSeq* r = (RefSeq*)n;
- const SParam* p = (SParam*)data;
- const char* nm;
+ rc_t rc = 0;
+ size_t written = 0;
- if( p->use_seqid && r->seqid[0] != '\0' ) {
- nm = r->seqid;
- } else {
- nm = r->name;
- }
- OUTMSG(("@SQ SN:%s", nm));
- if( nm != r->seqid && r->seqid[0] != '\0' && strcmp(nm, r->seqid) != 0 ) {
- OUTMSG((" AS:%s", r->seqid));
+ assert( buffer != NULL );
+
+ while ( written < bufsize )
+ {
+ size_t n;
+
+ rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos + written, &buffer[ written ], bufsize - written, &n );
+ if ( rc != 0 )
+ break;
+ written += n;
}
- OUTMSG((" LN:%u\n", r->len));
+ g_out_writer.pos += written;
+ if ( pnum_writ != NULL )
+ *pnum_writ = written;
+ return rc;
}
-static
-rc_t CC DumpRefSeqs(const VTable* tbl, const SParam* param)
+
+static rc_t BufferedWriterMake( bool gzip, bool bzip2 )
{
rc_t rc = 0;
- const VCursor* curs;
- BSTree tree;
-
- SCol cols[] = {
- {"NAME", 0, {NULL}, 0, false},
- {"SEQ_ID", 0, {NULL}, 0, false},
- {"SEQ_LEN", 0, {NULL}, 0, false},
- {NULL, 0, {NULL}, 0, false}
- };
- BSTreeInit(&tree);
- if( (rc = Cursor_Init(tbl, &curs, cols)) == 0 ) {
- int64_t start;
- uint64_t count;
-
- if( (rc = VCursorIdRange(curs, 0, &start, &count)) == 0 ) {
- RefSeq* node = NULL;
- uint32_t last_len = 0;
- while( count > 0 && rc == 0 ) {
- if( (rc = Cursor_Read(curs, start, cols)) == 0 ) {
- if( node == NULL || last_len != cols[0].len || strncmp(cols[0].base.str, node->name, cols[0].len) != 0 ) {
- node = malloc(sizeof(*node));
- if( node == NULL ) {
- rc = RC(rcExe, rcNode, rcConstructing, rcMemory, rcExhausted);
- } else if( cols[0].len >= sizeof(node->name) ||
- cols[1].len >= sizeof(node->seqid) ) {
- rc = RC(rcExe, rcString, rcCopying, rcBuffer, rcInsufficient);
- } else {
- last_len = cols[0].len;
- strncpy(node->name, cols[0].base.str, last_len);
- strncpy(node->seqid, cols[1].base.str, cols[1].len);
- node->name[last_len] = '\0';
- node->seqid[cols[1].len] = '\0';
- node->len = 0;
- rc = BSTreeInsertUnique(&tree, &node->node, NULL, RefSeq_sort);
- }
- }
- node->len += cols[2].base.coord_len[0];
- } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
- /* a gap in ids? */
- rc = 0;
+ if ( gzip && bzip2 )
+ {
+ rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+ }
+ else if ( g_out_writer.writer != NULL )
+ {
+ rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+ }
+ else
+ {
+ rc = KFileMakeStdOut( &g_out_writer.kfile );
+ if ( rc == 0 )
+ {
+ g_out_writer.pos = 0;
+ if ( gzip )
+ {
+ KFile* gz;
+ rc = KFileMakeGzipForWrite( &gz, g_out_writer.kfile );
+ if ( rc == 0 )
+ {
+ KFileRelease( g_out_writer.kfile );
+ g_out_writer.kfile = gz;
+ }
+ }
+ else if ( bzip2 )
+ {
+ KFile* bz;
+ rc = KFileMakeBzip2ForWrite( &bz, g_out_writer.kfile );
+ if ( rc == 0 )
+ {
+ KFileRelease( g_out_writer.kfile );
+ g_out_writer.kfile = bz;
+ }
+ }
+ if ( rc == 0 )
+ {
+ KFile* buf;
+ rc = KBufFileMakeWrite( &buf, g_out_writer.kfile, false, 128 * 1024 );
+ if ( rc == 0 )
+ {
+ KFileRelease( g_out_writer.kfile );
+ g_out_writer.kfile = buf;
+ g_out_writer.writer = KOutWriterGet();
+ g_out_writer.data = KOutDataGet();
+ rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
}
- start++;
- count--;
}
}
- VCursorRelease(curs);
- }
- if( rc == 0 ) {
- BSTreeForEach(&tree, false, RefSeq_dump, (void*)param);
}
- BSTreeWhack(&tree, NULL, NULL);
return rc;
}
-typedef struct ReadGroup {
+
+static void BufferedWriterRelease( bool flush )
+{
+ if ( flush )
+ {
+ /* avoid flushing buffered data after failure */
+ KFileRelease( g_out_writer.kfile );
+ }
+ if ( g_out_writer.writer != NULL )
+ {
+ KOutHandlerSet( g_out_writer.writer, g_out_writer.data );
+ }
+ g_out_writer.writer = NULL;
+}
+
+
+typedef struct ReadGroup
+{
BSTNode node;
- char name[1024];
+ char name[ 1024 ];
} ReadGroup;
-static
-int CC ReadGroup_sort( const BSTNode *item, const BSTNode *node )
+
+static int CC ReadGroup_sort( BSTNode const *item, BSTNode const *node )
{
- return strcmp(((const ReadGroup*)item)->name, ((const ReadGroup*)node)->name);
+ return strcmp( ( ( ReadGroup const * )item )->name, ( ( ReadGroup const * ) node )->name );
}
-static
-void CC ReadGroup_dump( BSTNode *n, void *data )
+
+static void ReadGroup_print( char const *nm )
{
- const ReadGroup* g = (ReadGroup*)n;
- OUTMSG(("@RG ID:%s\n", g->name));
+ if ( nm[ 0 ] != '\0' && strcasecmp( nm, "default" ) )
+ {
+ KOutMsg( "@RG\tID:%s\n", nm );
+ }
}
-static
-rc_t CC DumpReadGroupsScan(const VTable* tbl)
+static void CC ReadGroup_dump( BSTNode *n, void *data )
+{
+ ReadGroup const *g = ( ReadGroup* )n;
+ ReadGroup_print( g->name );
+}
+
+
+static rc_t CC DumpReadGroupsScan( STable const *tbl )
{
+ SCol cols[] =
+ {
+ { "SPOT_GROUP", 0, {NULL}, 0, false },
+ { NULL, 0, {NULL}, 0, false }
+ };
rc_t rc = 0;
- const VCursor* curs = NULL;
BSTree tree;
+ DataSource ds;
- SCol cols[] = {
- {"SPOT_GROUP", 0, {NULL}, 0, false},
- {NULL, 0, {NULL}, 0, false}
- };
+ memset( &ds, 0, sizeof( ds ) );
+ ds.cols = cols;
- BSTreeInit(&tree);
- if( (rc = Cursor_Init(tbl, &curs, cols)) == 0 ) {
+ BSTreeInit( &tree );
+ rc = Cursor_Open( tbl, &ds.curs, ds.cols, NULL );
+ if ( rc == 0 )
+ {
int64_t start;
uint64_t count;
- if( (rc = VCursorIdRange(curs, 0, &start, &count)) == 0 ) {
- RefSeq* node = NULL;
+ rc = VCursorIdRange( ds.curs.vcurs, 0, &start, &count );
+ if ( rc == 0 )
+ {
+ ReadGroup* node = NULL;
uint32_t last_len = 0;
- while( count > 0 && rc == 0 ) {
- if( (rc = Cursor_Read(curs, start, cols)) == 0 && cols[0].len != 0 ) {
- if( node == NULL || last_len != cols[0].len || strncmp(cols[0].base.str, node->name, cols[0].len) != 0 ) {
- node = malloc(sizeof(*node));
- if( node == NULL ) {
- rc = RC(rcExe, rcNode, rcConstructing, rcMemory, rcExhausted);
- } else if( cols[0].len > sizeof(node->name) ) {
- rc = RC(rcExe, rcString, rcCopying, rcBuffer, rcInsufficient);
- } else {
- last_len = cols[0].len;
- strncpy(node->name, cols[0].base.str, last_len);
- node->name[last_len] = '\0';
- rc = BSTreeInsertUnique(&tree, &node->node, NULL, ReadGroup_sort);
- if (GetRCState(rc) == rcExists) {
- free(node);
+ while ( count > 0 && rc == 0 )
+ {
+ rc = Cursor_Read( &ds, start, 0, ~(unsigned)0 );
+ if ( rc == 0 && cols[ 0 ].len != 0 )
+ {
+ if ( node == NULL ||
+ last_len != cols[ 0 ].len ||
+ strncmp( cols[ 0 ].base.str, node->name, cols[ 0 ].len ) != 0 )
+ {
+ node = malloc( sizeof( *node ) );
+ if ( node == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcConstructing, rcMemory, rcExhausted );
+ }
+ else if ( cols[ 0 ].len > sizeof( node->name ) )
+ {
+ rc = RC( rcExe, rcString, rcCopying, rcBuffer, rcInsufficient );
+ }
+ else
+ {
+ last_len = cols[ 0 ].len;
+ strncpy( node->name, cols[ 0 ].base.str, last_len );
+ node->name[ last_len ] = '\0';
+ rc = BSTreeInsertUnique( &tree, &node->node, NULL, ReadGroup_sort );
+ if ( GetRCState( rc ) == rcExists )
+ {
+ free( node );
rc = 0;
}
}
}
- } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
- /* a gap in ids? */
+ }
+ else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+ {
rc = 0;
}
start++;
count--;
}
}
- VCursorRelease(curs);
+ Cursor_Close( &ds.curs );
+ }
+
+ if ( rc == 0 )
+ {
+ BSTreeForEach( &tree, false, ReadGroup_dump, NULL );
}
- if( rc == 0 ) {
- BSTreeForEach(&tree, false, ReadGroup_dump, NULL);
+ else if ( rc != KLogLastErrorCode() )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
}
- BSTreeWhack(&tree, NULL, NULL);
+ BSTreeWhack( &tree, NULL, NULL );
return rc;
}
-rc_t CC DumpReadGroups(const VTable* tbl)
+
+rc_t CC DumpReadGroups( STable const *tbl )
{
rc_t rc = 0;
- const KMetadata* m;
+ KMetadata const *m;
/* try getting list from stats meta */
- if( (rc = VTableOpenMetadataRead(tbl, &m)) == 0 ) {
- const KMDataNode* n;
- if( (rc = KMetadataOpenNodeRead(m, &n, "/STATS/SPOT_GROUP")) == 0 ) {
+ rc = VTableOpenMetadataRead( tbl->vtbl, &m );
+ if ( rc == 0 )
+ {
+ KMDataNode const *n;
+ rc = KMetadataOpenNodeRead( m, &n, "/STATS/SPOT_GROUP" );
+ if ( rc == 0 )
+ {
KNamelist* names;
- if( (rc = KMDataNodeListChild(n, &names)) == 0 ) {
+ rc = KMDataNodeListChild( n, &names );
+ if ( rc == 0 )
+ {
uint32_t i, q;
- if( (rc = KNamelistCount(names, &q)) == 0 ) {
- for(i = 0; rc == 0 && i < q; i++) {
- const char* nm;
- if( (rc = KNamelistGet(names, i, &nm)) == 0 && strcasecmp(nm, "default") ) {
- OUTMSG(("@RG ID:%s\n", nm));
+ rc = KNamelistCount( names, &q );
+ if ( rc == 0 )
+ {
+ for ( i = 0; rc == 0 && i < q; i++ )
+ {
+ char const *nm;
+ rc = KNamelistGet( names, i, &nm );
+ if ( rc == 0 )
+ {
+ ReadGroup_print( nm );
}
}
}
- KNamelistRelease(names);
+ KNamelistRelease( names );
}
- KMDataNodeRelease(n);
+ KMDataNodeRelease( n );
}
- KMetadataRelease(m);
+ KMetadataRelease( m );
}
- if( GetRCState(rc) == rcNotFound ) {
- rc = DumpReadGroupsScan(tbl);
+
+ if ( GetRCState( rc ) == rcNotFound )
+ {
+ rc = DumpReadGroupsScan( tbl );
+ }
+ else if ( rc != 0 && rc != KLogLastErrorCode() )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
}
return rc;
}
-enum ealg_col {
- alg_SEQ_NAME = 0,
- alg_SAM_FLAGS,
- alg_MAPQ,
- alg_CIGAR,
- alg_MATE_REF_NAME,
- alg_MATE_REF_POS,
- alg_READ,
- alg_SAM_QUALITY,
- alg_SPOT_GROUP,
- alg_SEQ_SPOT_GROUP,
- alg_SEQ_SPOT_ID,
- alg_SEQ_READ_ID,
- alg_EDIT_DISTANCE,
- alg_REGION_FILTER,
- alg_REF_NAME = alg_REGION_FILTER,
- alg_REF_SEQ_ID,
- alg_REF_POS,
- alg_REF_LEN,
- alg_DISTANCE_FILTER,
- alg_TEMPLATE_LEN = alg_DISTANCE_FILTER
-};
+static rc_t Cursor_ReadAlign( SCurs const *curs, int64_t row_id, SCol* cols, uint32_t idx )
+{
+ rc_t rc = 0;
+ SCol* c = NULL;
+ SCol* mate_id = NULL;
+#if USE_MATE_CACHE
+ uint64_t cache_val = 0;
+ bool cache_miss = false;
+#endif /* USE_MATE_CACHE */
-enum eseq_col {
- seq_READ = 0,
- seq_QUALITY,
- seq_SPOT_GROUP,
- seq_READ_START,
- seq_READ_LEN,
- seq_READ_TYPE,
- seq_NAME
-};
+
+ for( ; rc == 0 && cols[ idx ].name != NULL; idx++ )
+ {
+ c = &cols[ idx ];
+ if ( c->idx != 0 )
+ {
+#if USE_MATE_CACHE
+ if ( mate_id != NULL && curs->cache != NULL && !cache_miss &&
+ ( idx == alg_SAM_FLAGS || idx == alg_MATE_REF_NAME || idx == alg_MATE_REF_POS || idx == alg_TEMPLATE_LEN ) &&
+ mate_id->idx && mate_id->len > 0 && mate_id->base.i64[ 0 ] > 0 )
+ {
+ if ( cache_val != 0 )
+ {
+ continue;
+ }
+ rc = Cache_Get( curs, mate_id->base.u64[ 0 ], &cache_val );
+ if ( rc == 0 )
+ {
+ continue;
+ }
+ else if ( !( GetRCObject( rc ) == rcItem && GetRCState( rc ) == rcNotFound ) )
+ {
+ break;
+ }
+ else
+ {
+ /* avoid multiple lookups in cache */
+ cache_miss = true;
+ }
+ }
+#endif /* USE_MATE_CACHE */
+ rc = VCursorCellDataDirect( curs->vcurs, row_id, c->idx, NULL, &c->base.v, NULL, &c->len );
+ if ( rc == 0 )
+ {
+ if ( idx == alg_SEQ_SPOT_ID && ( c->len ==0 || c->base.i64[ 0 ] == 0 ) )
+ {
+ return RC( rcExe, rcColumn, rcReading, rcRow, rcNotFound );
+ }
+ if ( idx == alg_MATE_ALIGN_ID )
+ {
+ mate_id = &cols[ alg_MATE_ALIGN_ID ];
+ }
+#if _DEBUGGING
+ ( ( SCurs* )curs )->col_reads_qty++;
+#endif
+ }
+ }
+ else
+ {
+ static INSDC_coord_zero readStart;
+ static INSDC_coord_len readLen;
+ static INSDC_coord_len cigarLen;
+
+ switch ( (int)idx )
+ {
+ case alg_READ_START:
+ readStart = 0;
+ c->base.coord0 = &readStart;
+ c->len = 1;
+ break;
+ case alg_READ_LEN:
+ readLen = cols[ alg_READ ].len;
+ c->base.coord_len = &readLen;
+ c->len = 1;
+ break;
+ case alg_CIGAR_LEN:
+ cigarLen = cols[ alg_CIGAR ].len;
+ c->base.coord_len = &cigarLen;
+ c->len = 1;
+ break;
+ }
+ }
+ }
-static
-void DumpName(const SParam* param, const char* name, size_t name_len,
- const char spot_group_sep, const char* spot_group, size_t spot_group_len)
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+ curs->tbl->name, row_id, c ? c->name : "<none>" ) );
+#if USE_MATE_CACHE
+ }
+ else if ( curs->cache == NULL )
+ {
+ }
+ else if ( cache_val == 0 )
+ {
+ /* this row is not from cache */
+ int64_t mate_align_id = ( mate_id != NULL && mate_id->len > 0 ) ? mate_id->base.i64[ 0 ] : 0;
+ if ( cols[ 0 ].idx != 0 && /* we have full cursor which means we are reading alignment table */
+ /* no mate -> unaligned (not secondary!) */
+ ( ( mate_align_id == 0 && param->unaligned && curs->cache != &curs->cache_local ) ||
+ /* 2nd mate with higher rowid and more than set gap rows away */
+ ( mate_align_id != 0 && mate_align_id > row_id && ( mate_align_id - row_id) > param->mate_row_gap_cachable ) ) )
+ {
+ rc = Cache_Add( row_id, curs, cols );
+ }
+ if(param->unaligned == true && mate_align_id == 0 ){
+ rc = KVectorSetBool( curs->cache->cache_unaligned_mate, cols[alg_SEQ_SPOT_ID].base.i64[0], true );
+ }
+ }
+ else
+ {
+ Cache_Unpack( cache_val, row_id, curs, cols );
+#endif /* USE_MATE_CACHE */
+ }
+ return rc;
+}
+
+
+static void DumpName( char const *name, size_t name_len,
+ const char spot_group_sep, char const *spot_group,
+ size_t spot_group_len, int64_t spot_id )
{
- size_t nm;
- if( param->name_prefix != NULL ) {
- OUTMSG(("%s.", param->name_prefix));
+ if ( param->cg_friendly_names ) {
+ KOutMsg("%.*s-1:%lu", spot_group_len, spot_group, spot_id);
}
- BufferedWriter(NULL, name, name_len, &nm);
- if( param->spot_group_in_name && spot_group_len > 0 ) {
- BufferedWriter(NULL, &spot_group_sep, 1, &nm);
- BufferedWriter(NULL, spot_group, spot_group_len, &nm);
+ else {
+ if ( param->name_prefix != NULL )
+ {
+ KOutMsg( "%s.", param->name_prefix );
+ }
+ BufferedWriter( NULL, name, name_len, NULL );
+ if ( param->spot_group_in_name && spot_group_len > 0 )
+ {
+ BufferedWriter( NULL, &spot_group_sep, 1, NULL );
+ BufferedWriter( NULL, spot_group, spot_group_len, NULL );
+ }
}
}
-static
-void DumpUnalignedFastX(const SCol cols[], const SParam* param, uint32_t read_id,
- INSDC_coord_zero readStart, INSDC_coord_len readLen)
+
+static void DumpQuality( char const quality[], unsigned const count, bool const reverse, bool const quantize )
+{
+ if ( quality == NULL )
+ {
+ unsigned i;
+
+ for ( i = 0; i < count; ++i )
+ {
+ char const newValue = ((param->qualQuant && param->qualQuantSingle)?param->qualQuantSingle:30) + 33;
+
+ BufferedWriter( NULL, &newValue, 1, NULL );
+ }
+ }
+ else if ( reverse || quantize )
+ {
+ unsigned i;
+
+ for ( i = 0; i < count; ++i )
+ {
+ char const qual = quality[ reverse ? ( count - i - 1 ) : i ];
+
+ /* changed Jan 29 2013, because some runs dont have the phred_33 - type */
+ /* char const newValue = quantize ? param->qualQuant[ qual - 33 ] + 33 : qual; */
+ char const newValue = ( quantize ? param->qualQuant[ (unsigned int)qual ] : qual ) + 33 ;
+ BufferedWriter( NULL, &newValue, 1, NULL );
+ }
+ }
+ else
+ {
+ /* changed Jan 29 2013, because some runs dont have the phred_33 - type */
+ /* BufferedWriter( NULL, quality, count, NULL ); */
+ unsigned i;
+ for ( i = 0; i < count; ++i )
+ {
+ char const qual = quality[ i ] + 33;
+ BufferedWriter( NULL, &qual, 1, NULL );
+ }
+ }
+}
+
+
+static void DumpQuality_33( char const quality[], unsigned const count, bool const reverse, bool const quantize )
+{
+ if ( quality == NULL )
+ {
+ unsigned i;
+
+ for ( i = 0; i < count; ++i )
+ {
+ char const newValue = ((param->qualQuant && param->qualQuantSingle)?param->qualQuantSingle:30) + 33;
+
+ BufferedWriter( NULL, &newValue, 1, NULL );
+ }
+ }
+ else if ( reverse || quantize )
+ {
+ unsigned i;
+
+ for ( i = 0; i < count; ++i )
+ {
+ char const qual = quality[ reverse ? ( count - i - 1 ) : i ];
+ char const newValue = quantize ? param->qualQuant[ qual - 33 ] + 33 : qual;
+ BufferedWriter( NULL, &newValue, 1, NULL );
+ }
+ }
+ else
+ {
+ BufferedWriter( NULL, quality, count, NULL );
+ }
+}
+
+
+static void DumpUnalignedFastX( const SCol cols[], uint32_t read_id, INSDC_coord_zero readStart, INSDC_coord_len readLen, int64_t row_id )
{
- size_t nm;
/* fast[AQ] represnted in SAM fields:
[@|>]QNAME unaligned
SEQ
+
QUAL
*/
- BufferedWriter(NULL, param->fastq ? "@" : ">", 1, &nm);
+ BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+
/* QNAME: [PFX.]SEQUENCE:NAME[#SPOT_GROUP] */
- DumpName(param, cols[seq_NAME].base.str, cols[seq_NAME].len, '#', cols[seq_SPOT_GROUP].base.str, cols[seq_SPOT_GROUP].len);
- if( read_id > 0 ) {
- OUTMSG(("/%u", read_id));
+ DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '#',
+ cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
+ if ( read_id > 0 )
+ {
+ KOutMsg( "/%u", read_id );
}
- BufferedWriter(NULL, " unaligned\n", 11, &nm);
+ BufferedWriter( NULL, " unaligned\n", 11, NULL );
+
/* SEQ: SEQUENCE.READ */
- BufferedWriter(NULL, &cols[seq_READ].base.str[readStart], readLen, &nm);
- if( param->fastq ) {
+ BufferedWriter( NULL, &cols[ seq_READ ].base.str[readStart], readLen, NULL );
+ if ( param->fastq )
+ {
/* QUAL: SEQUENCE.QUALITY */
- BufferedWriter(NULL, "\n+\n", 3, &nm);
- BufferedWriter(NULL, &cols[seq_QUALITY].base.str[readStart], readLen, &nm);
+ BufferedWriter( NULL, "\n+\n", 3, NULL );
+ DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, false, param->quantizeQual );
}
- BufferedWriter(NULL, "\n", 1, &nm);
+ BufferedWriter( NULL, "\n", 1, NULL );
}
-static
-void DumpAlignedFastX(const SCol cols[], const SParam* param, uint32_t read_id, bool primary)
+
+static void DumpAlignedFastX( const SCol cols[], int64_t const alignId, uint32_t read_id, bool primary, bool secondary )
{
size_t nm;
+ unsigned readId;
+ unsigned const nreads = cols[ alg_READ_LEN ].len;
- /* fast[AQ] represnted in SAM fields:
- [@|>]QNAME primary|secondary ref=RNAME pos=POS mapq=MAPQ
- SEQ
- +
- QUAL
- */
- BufferedWriter(NULL, param->fastq ? "@" : ">", 1, &nm);
- /* QNAME: [PFX.]SEQ_NAME[#SPOT_GROUP] */
- nm = cols[alg_SPOT_GROUP].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
- DumpName(param, cols[alg_SEQ_NAME].base.str, cols[alg_SEQ_NAME].len, '#', cols[nm].base.str, cols[nm].len);
- if( read_id > 0 ) {
- OUTMSG(("/%u", read_id));
- }
- if( primary ) {
- BufferedWriter(NULL, " primary", 8, &nm);
- } else {
- BufferedWriter(NULL, " secondary", 10, &nm);
- }
- /* RNAME: REF_NAME or REF_SEQ_ID */
- BufferedWriter(NULL, " ref=", 5, &nm);
- if( param->use_seqid ) {
- BufferedWriter(NULL, cols[alg_REF_SEQ_ID].base.str, cols[alg_REF_SEQ_ID].len, &nm);
- } else {
- BufferedWriter(NULL, cols[alg_REF_NAME].base.str, cols[alg_REF_NAME].len, &nm);
- }
- /* POS: REF_POS, MAPQ: MAPQ */
- OUTMSG((" pos=%u mapq=%i\n", cols[alg_REF_POS].base.coord0[0] + 1, cols[alg_MAPQ].base.i32[0]));
-
- /* SEQ: READ */
- BufferedWriter(NULL, cols[alg_READ].base.str, cols[alg_READ].len, &nm);
- if( param->fastq ) {
- /* QUAL: SAM_QUALITY */
- BufferedWriter(NULL, "\n+\n", 3, &nm);
- BufferedWriter(NULL, cols[alg_SAM_QUALITY].base.str, cols[alg_SAM_QUALITY].len, &nm);
+ for ( readId = 0; readId < nreads; ++readId )
+ {
+ char const *qname = cols[ alg_SEQ_NAME ].base.str;
+ size_t qname_len = cols[ alg_SEQ_NAME ].len;
+ char synth_qname[ 40 ];
+ int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+ char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+ char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+ ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+ : NULL;
+ unsigned const readlen = cols[ alg_READ_LEN ].base.coord_len[ readId ];
+
+ /* fast[AQ] represnted in SAM fields:
+ [@|>]QNAME primary|secondary ref=RNAME pos=POS mapq=MAPQ
+ SEQ
+ +
+ QUAL
+ */
+ BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+ /* QNAME: [PFX.]SEQ_NAME[#SPOT_GROUP] */
+ if ( qname_len == 0 || qname == NULL )
+ {
+ string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%li.%u", alignId, readId + 1 );
+ qname = synth_qname;
+ }
+ nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+ DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id);
+
+ if ( read_id > 0 )
+ {
+ KOutMsg( "/%u", read_id );
+ }
+
+ if ( primary )
+ {
+ BufferedWriter( NULL, " primary", 8, NULL );
+ }
+ else if ( secondary )
+ {
+ BufferedWriter( NULL, " secondary", 10, NULL );
+ }
+
+ /* RNAME: REF_NAME or REF_SEQ_ID */
+ BufferedWriter( NULL, " ref=", 5, NULL );
+ if ( param->use_seqid )
+ {
+ BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+ }
+ else
+ {
+ BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+ }
+
+ /* POS: REF_POS, MAPQ: MAPQ */
+ KOutMsg( " pos=%u mapq=%i\n", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1, cols[ alg_MAPQ ].base.i32[ 0 ] );
+
+ /* SEQ: READ */
+ BufferedWriter( NULL, read, readlen, NULL );
+ if ( param->fastq )
+ {
+ /* QUAL: SAM_QUALITY */
+ BufferedWriter( NULL, "\n+\n", 3, NULL );
+ DumpQuality_33( qual, readlen, false, param->quantizeQual );
+ }
+ BufferedWriter( NULL, "\n", 1, NULL );
}
- BufferedWriter(NULL, "\n", 1, &nm);
}
+
static
-void DumpUnalignedSAM(const SCol cols[], const SParam* param,
- uint16_t flags, INSDC_coord_zero readStart, INSDC_coord_len readLen,
- const char* rnext, uint32_t rnext_len, INSDC_coord_zero pnext)
+void DumpUnalignedSAM( const SCol cols[], uint32_t flags, INSDC_coord_zero readStart, INSDC_coord_len readLen,
+ char const *rnext, uint32_t rnext_len, INSDC_coord_zero pnext, char const readGroup[], int64_t row_id )
{
- size_t nm;
+ unsigned i;
+
/* QNAME: [PFX.]NAME[.SPOT_GROUP] */
- DumpName(param, cols[seq_NAME].base.str, cols[seq_NAME].len, '.', cols[seq_SPOT_GROUP].base.str, cols[seq_SPOT_GROUP].len);
+ DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '.',
+ cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
/* all these fields are const text for now */
- OUTMSG(("\t%u\t*\t0\t0\t*\t%.*s\t%u\t0\t", (unsigned)flags,
- rnext_len ? rnext_len : 1, rnext_len ? rnext : "*", pnext ? pnext : pnext));
+ KOutMsg( "\t%u\t*\t0\t0\t*\t%.*s\t%u\t0\t",
+ flags, rnext_len ? rnext_len : 1, rnext_len ? rnext : "*", pnext );
/* SEQ: SEQUENCE.READ */
- BufferedWriter(NULL, &cols[seq_READ].base.str[readStart], readLen, &nm);
- BufferedWriter(NULL, "\t", 1, &nm);
+ if ( flags & 0x10 )
+ {
+ for( i = 0; i < readLen; i++ )
+ {
+ char base;
+
+ DNAReverseCompliment( &cols[ seq_READ ].base.str[ readStart + readLen - 1 - i ], &base, 1 );
+ BufferedWriter( NULL, &base, 1, NULL );
+ }
+ }
+ else
+ {
+ BufferedWriter( NULL, &cols[ seq_READ ].base.str[ readStart ], readLen, NULL );
+ }
+
+ BufferedWriter( NULL, "\t", 1, NULL );
/* QUAL: SEQUENCE.QUALITY */
- BufferedWriter(NULL, &cols[seq_QUALITY].base.str[readStart], readLen, &nm);
+ DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, flags & 0x10, param->quantizeQual );
+
/* optional fields: */
- if( cols[seq_SPOT_GROUP].len > 0 ) {
+ if ( readGroup )
+ {
+ BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ BufferedWriter( NULL, readGroup, strlen( readGroup ), NULL );
+ }
+ else if ( cols[ seq_SPOT_GROUP ].len > 0 )
+ {
/* read group */
- BufferedWriter(NULL, "\tRG:Z:", 6, &nm);
- BufferedWriter(NULL, cols[seq_SPOT_GROUP].base.str, cols[seq_SPOT_GROUP].len, &nm);
+ BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ BufferedWriter( NULL, cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, NULL );
}
- BufferedWriter(NULL, "\n", 1, &nm);
+ BufferedWriter( NULL, "\n", 1, NULL );
}
+
static
-void DumpAlignedSAM(const SCol cols[], const SParam* param)
+void DumpAlignedSAM(SAM_dump_ctx_t *const ctx,
+ DataSource const *ds,
+ int64_t alignId,
+ char const readGroup[],
+ int type)
{
- size_t nm;
- uint32_t flags;
-
- /* QNAME: [SPOT_GROUP.]SEQ_NAME */
- nm = cols[alg_SPOT_GROUP].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
- DumpName(param, cols[alg_SEQ_NAME].base.str, cols[alg_SEQ_NAME].len, '.', cols[nm].base.str, cols[nm].len);
- /* FLAG: SAM_FLAGS */
- flags = cols[alg_SAM_FLAGS].base.u32[0];
- if( !param->unaligned ) {
- flags &= ~0xC9; /* turn off 0x001 0x008 0x040 0x080 */
- }
- OUTMSG(("\t%u\t", flags));
- /* RNAME: REF_NAME or REF_SEQ_ID */
- if( param->use_seqid ) {
- BufferedWriter(NULL, cols[alg_REF_SEQ_ID].base.str, cols[alg_REF_SEQ_ID].len, &nm);
- BufferedWriter(NULL, "\t", 1, &nm);
- } else {
- BufferedWriter(NULL, cols[alg_REF_NAME].base.str, cols[alg_REF_NAME].len, &nm);
- BufferedWriter(NULL, "\t", 1, &nm);
- }
- /* POS: REF_POS */
- OUTMSG(("%u\t", cols[alg_REF_POS].base.coord0[0] + 1));
- /* MAPQ: MAPQ */
- OUTMSG(("%i\t", cols[alg_MAPQ].base.i32[0]));
- /* CIGAR: CIGAR_* */
- BufferedWriter(NULL, cols[alg_CIGAR].base.str, cols[alg_CIGAR].len, &nm);
- BufferedWriter(NULL, "\t", 1, &nm);
-
- /* RNEXT: MATE_REF_NAME or '*' */
- if( cols[alg_MATE_REF_NAME].len ) {
- if( cols[alg_MATE_REF_NAME].len == cols[alg_REF_NAME].len &&
- memcmp(cols[alg_MATE_REF_NAME].base.str, cols[alg_REF_NAME].base.str, cols[alg_MATE_REF_NAME].len) == 0 ) {
- BufferedWriter(NULL, "=\t", 2, &nm);
- } else {
- BufferedWriter(NULL, cols[alg_MATE_REF_NAME].base.str, cols[alg_MATE_REF_NAME].len, &nm);
- BufferedWriter(NULL, "\t", 1, &nm);
- }
- } else {
- BufferedWriter(NULL, "*\t", 2, &nm);
- }
- /* PNEXT: MATE_REF_POS or 0 */
- if( cols[alg_MATE_REF_POS].len ) {
- OUTMSG(("%u\t", cols[alg_MATE_REF_POS].base.coord0[0] + 1));
- } else {
- BufferedWriter(NULL, "0\t", 2, &nm);
- }
- /* TLEN: TEMPLATE_LEN */
- OUTMSG(("%i\t", cols[alg_TEMPLATE_LEN].base.i32[0]));
- /* SEQ: READ */
- BufferedWriter(NULL, cols[alg_READ].base.str, cols[alg_READ].len, &nm);
- BufferedWriter(NULL, "\t", 1, &nm);
- /* QUAL: SAM_QUALITY */
- BufferedWriter(NULL, cols[alg_SAM_QUALITY].base.str, cols[alg_SAM_QUALITY].len, &nm);
+ unsigned const nreads = ds->cols[ alg_READ_LEN ].len;
+ SCol const *const cols = ds->cols;
+ int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+ INSDC_coord_one const read_id = cols[alg_SEQ_READ_ID].len > 0 ? cols[alg_SEQ_READ_ID].base.coord1[0] : 0;
+ INSDC_SRA_read_filter const *align_filter = cols[alg_READ_FILTER].len == nreads ? cols[alg_READ_FILTER].base.read_filter : NULL;
+ INSDC_SRA_read_filter seq_filter = 0;
+ unsigned readId;
+ unsigned cigOffset = 0;
+
+ if (align_filter == NULL && spot_id && read_id && ctx->seq.cols) {
+ rc_t rc;
+
+ rc = Cursor_Read(&ctx->seq, spot_id, seq_READ_FILTER, 1);
+ if (rc == 0 && ctx->seq.cols[seq_READ_FILTER].len >= read_id)
+ seq_filter = ctx->seq.cols[seq_READ_FILTER].base.read_filter[read_id - 1];
+ }
+ for ( readId = 0; readId < nreads; ++readId ) {
+ char const *qname = cols[ alg_SEQ_NAME ].base.str;
+ size_t qname_len = cols[ alg_SEQ_NAME ].len;
+ char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+ char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+ ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+ : NULL;
+ unsigned const readlen = nreads > 1 ? cols[ alg_READ_LEN ].base.coord_len[ readId ] : cols[ alg_READ ].len;
+ unsigned const sflags = cols[ alg_SAM_FLAGS ].base.v ? cols[ alg_SAM_FLAGS ].base.u32[ readId ] : 0;
+ INSDC_SRA_read_filter const filt = align_filter ? align_filter[readId] : seq_filter;
+ unsigned const flags = (sflags & ~((unsigned)0x200)) | ((filt == SRA_READ_FILTER_REJECT) ? 0x200 : 0);
+ char const *const cigar = cols[ alg_CIGAR ].base.str + cigOffset;
+ unsigned const cigLen = nreads > 1 ? cols[ alg_CIGAR_LEN ].base.coord_len[ readId ] : cols[ alg_CIGAR ].len;
+ size_t nm;
+ char synth_qname[1024];
+
+ cigOffset += cigLen;
+ if ( qname_len == 0 || qname == NULL )
+ {
+ string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "ALLELE_%li.%u", alignId, readId + 1 );
+ qname = synth_qname;
+ }
+ else if (ds->type == edstt_EvidenceAlignment) {
+ string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%u/ALLELE_%li.%u", spot_id, cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+ qname = synth_qname;
+ }
+ nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+ DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id );
- /* optional fields: */
- if( cols[alg_SPOT_GROUP].len > 0 ) {
- /* read group */
- BufferedWriter(NULL, "\tRG:Z:", 6, &nm);
- BufferedWriter(NULL, cols[alg_SPOT_GROUP].base.str, cols[alg_SPOT_GROUP].len, &nm);
- } else if( cols[alg_SEQ_SPOT_GROUP].len > 0 ) {
- /* backward compatibility */
- BufferedWriter(NULL, "\tRG:Z:", 6, &nm);
- BufferedWriter(NULL, cols[alg_SEQ_SPOT_GROUP].base.str, cols[alg_SEQ_SPOT_GROUP].len, &nm);
+ /* FLAG: SAM_FLAGS */
+ if (ds->type == edstt_EvidenceAlignment) {
+ bool const cmpl = cols[alg_REVERSED].base.v && readId < cols[alg_REVERSED].len ? cols[alg_REVERSED].base.tf[readId] : false;
+
+ KOutMsg( "\t%u\t", 1 | (cmpl ? 0x10 : 0) | (read_id == 1 ? 0x40 : 0x80) );
+ }
+ else if ( !param->unaligned /** not going to dump unaligned **/
+ && ( flags & 0x1 ) /** but we have sequenced multiple fragments **/
+ && ( flags & 0x8 ) ) /** and not all of them align **/
+ {
+ /*** remove flags talking about multiple reads **/
+ /* turn off 0x001 0x008 0x040 0x080 */
+ KOutMsg( "\t%u\t", flags & ~0xC9 );
+ }
+ else
+ KOutMsg( "\t%u\t", flags );
+
+ if ( ds->type == edstt_EvidenceAlignment && type == 0 )
+ KOutMsg( "ALLELE_%li.%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+ else
+ {
+ /* RNAME: REF_NAME or REF_SEQ_ID */
+ if ( param->use_seqid )
+ BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+ else
+ BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+ }
+ BufferedWriter( NULL, "\t", 1, NULL );
+
+ /* POS: REF_POS */
+ KOutMsg( "%i\t", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1 );
+ /* MAPQ: MAPQ */
+ KOutMsg( "%i\t", cols[ alg_MAPQ ].base.i32[ 0 ] );
+ /* CIGAR: CIGAR_* */
+ if (ds->type == edstt_EvidenceInterval) {
+ unsigned i;
+
+ for (i = 0; i != cigLen; ++i) {
+ char ch = cigar[i];
+
+ if (ch == 'S')
+ ch = 'I';
+ BufferedWriter(NULL, &ch, 1, NULL);
+ }
+ }
+ else
+ BufferedWriter( NULL, cigar, cigLen, NULL );
+ BufferedWriter( NULL, "\t", 1, NULL );
+
+ /* RNEXT: MATE_REF_NAME or '*' */
+ /* PNEXT: MATE_REF_POS or 0 */
+ if ( cols[ alg_MATE_REF_NAME ].len )
+ {
+ if ( cols[ alg_MATE_REF_NAME ].len == cols[ alg_REF_NAME ].len &&
+ memcmp( cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len ) == 0 )
+ {
+ BufferedWriter( NULL, "=\t", 2, NULL );
+ }
+ else
+ {
+ BufferedWriter( NULL, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len, NULL );
+ BufferedWriter( NULL, "\t", 1, NULL );
+ }
+ KOutMsg( "%u\t", cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] + 1 );
+ }
+ else
+ {
+ BufferedWriter( NULL, "*\t0\t", 4, NULL );
+ }
+ /* TLEN: TEMPLATE_LEN */
+ KOutMsg( "%i\t", cols[ alg_TEMPLATE_LEN ].base.v ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0 );
+ /* SEQ: READ */
+ BufferedWriter( NULL, read, readlen, NULL );
+ BufferedWriter( NULL, "\t", 1, NULL );
+ /* QUAL: SAM_QUALITY */
+ DumpQuality_33( qual, readlen, false, param->quantizeQual );
+
+ /* optional fields: */
+ if ( ds->type == edstt_EvidenceInterval )
+ {
+ KOutMsg( "\tRG:Z:ALLELE_%u", readId + 1 );
+ }
+ if ( readGroup )
+ {
+ BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ BufferedWriter( NULL, readGroup, strlen( readGroup ), NULL );
+ }
+ else if ( cols[ alg_SPOT_GROUP ].len > 0 )
+ {
+ /* read group */
+ BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ BufferedWriter( NULL, cols[ alg_SPOT_GROUP ].base.str, cols[ alg_SPOT_GROUP ].len, NULL );
+ }
+ else if ( cols[ alg_SEQ_SPOT_GROUP ].len > 0 )
+ {
+ /* backward compatibility */
+ BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ BufferedWriter( NULL, cols[ alg_SEQ_SPOT_GROUP ].base.str, cols[ alg_SEQ_SPOT_GROUP ].len, NULL );
+ }
+ if ( param->cg_style > 0 && cols[ alg_CG_TAGS_STR ].len > 0 )
+ {
+ BufferedWriter( NULL, cols[ alg_CG_TAGS_STR ].base.str, cols[ alg_CG_TAGS_STR ].len, NULL );
+ }
+
+ if ( param->cg_style > 0 && cols[ alg_ALIGN_GROUP ].len > 0 )
+ {
+ char const *ZI = cols[ alg_ALIGN_GROUP ].base.str;
+ unsigned i;
+
+ for ( i = 0; i < cols[ alg_ALIGN_GROUP ].len - 1; ++i )
+ {
+ if ( ZI[ i ] == '_' )
+ {
+ KOutMsg( "\tZI:i:%.*s\tZA:i:%.1s", i, ZI, ZI + i + 1 );
+ break;
+ }
+ }
+ }
+ else if ( ds->type == edstt_EvidenceAlignment && type == 1 )
+ KOutMsg( "\tZI:i:%li\tZA:i:%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+
+ /* align id */
+ if ( param->xi )
+ KOutMsg( "\tXI:i:%li", alignId );
+
+ /* hit count */
+ if (cols[alg_ALIGNMENT_COUNT].len)
+ KOutMsg( "\tNH:i:%i", (int)cols[ alg_ALIGNMENT_COUNT ].base.u8[ readId ] );
+
+ /* edit distance */
+ if ( cols[ alg_EDIT_DISTANCE ].len )
+ KOutMsg( "\tNM:i:%i", cols[ alg_EDIT_DISTANCE ].base.i32[ readId ] );
+
+ KOutMsg( "\n" );
}
- /* edit distance */
- OUTMSG(("\tNM:i:%i\n", cols[alg_EDIT_DISTANCE].len ? cols[alg_EDIT_DISTANCE].base.i32[0] : 0));
}
-static
-rc_t DumpUnalignedSpot(const SParam* param, const SCol calg_col[], int64_t row_id,
- const VCursor* cseq, SCol cseq_col[], int col_id, uint64_t* rcount)
+
+static rc_t DumpUnalignedReads( SAM_dump_ctx_t *const ctx, SCol const calg_col[], int64_t row_id, uint64_t* rcount )
{
rc_t rc = 0;
uint32_t i, nreads = 0;
- if( calg_col != NULL ) {
+ if ( calg_col != NULL )
+ {
+ if ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x02 )
+ {
+ /* skip all aligned rows by flag */
+ return rc;
+ }
/* get primary alignments only */
- rc = Cursor_Read(cseq, calg_col[alg_SEQ_SPOT_ID].base.i64[0], &cseq_col[col_id]);
-
- for(i = 0; i < cseq_col[col_id].len; i++) {
- if( cseq_col[col_id].base.i64[i] != 0 ) {
- if( cseq_col[col_id].base.i64[i] < row_id ) {
- /* unaligned were printed with 1st aligment */
- return rc;
+ rc = Cursor_Read( &ctx->seq, calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ], seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+ if ( rc == 0 )
+ {
+ for ( i = 0; i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+ {
+ if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+ {
+ if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] < row_id )
+ {
+ /* unaligned were printed with 1st aligment */
+ return rc;
+ }
+ }
+ else
+ {
+ nreads++;
}
- } else {
- nreads++;
}
+ if ( nreads == ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len )
+ {
+ /* skip all aligned rows by actual data, if flag above is not set properly */
+ return rc;
+ }
+ row_id = calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ];
}
- if( nreads == cseq_col[col_id].len ) {
- /* all aligned */
- return rc;
- }
- row_id = calg_col[alg_SEQ_SPOT_ID].base.i64[0];
}
- if( (rc = Cursor_Read(cseq, row_id, cseq_col)) == 0 ) {
- nreads = cseq_col[seq_READ_LEN].idx != 0 ? cseq_col[seq_READ_LEN].len : 1;
-
- for(i = 0; i < nreads; i++) {
- INSDC_coord_zero readStart;
- INSDC_coord_len readLen;
+ if ( rc == 0 )
+ {
+ rc = Cursor_Read( &ctx->seq, row_id, 0, ~(unsigned)0 );
+ if ( rc == 0 )
+ {
+ unsigned non_empty_reads = 0;
+
+ nreads = ctx->seq.cols[ seq_READ_LEN ].idx != 0 ? ctx->seq.cols[ seq_READ_LEN ].len : 1;
- if( calg_col != NULL && cseq_col[col_id].base.i64[i] != 0 ) {
- continue;
- }
- if( cseq_col[seq_READ_TYPE].idx != 0 && !(cseq_col[seq_READ_TYPE].base.read_type[i] & SRA_READ_TYPE_BIOLOGICAL) ) {
- continue;
- }
- readLen = cseq_col[seq_READ_LEN].idx ? cseq_col[seq_READ_LEN].base.coord_len[i] : cseq_col[seq_READ].len;
- if( readLen == 0 ) {
- continue;
+ for( i = 0; i < nreads; i++ ) {
+ unsigned const readLen = ctx->seq.cols[ seq_READ_LEN ].idx
+ ? ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ]
+ : 0;
+
+ if (readLen)
+ ++non_empty_reads;
}
- readStart = cseq_col[seq_READ_START].idx ? cseq_col[seq_READ_START].base.coord0[i] : 0;
- if( param->fasta || param->fastq) {
- DumpUnalignedFastX(cseq_col, param, nreads > 1 ? i + 1 : 0, readStart, readLen);
- } else {
- if( calg_col == NULL ) {
- DumpUnalignedSAM(cseq_col, param,
- 4 | (nreads > 1 ? 1 : 0) | (i == 0 ? 0x40 : 0) | (i == nreads - 1 ? 0x80 : 0),
- readStart, readLen, NULL, 0, 0);
- } else {
- int c = param->use_seqid ? alg_REF_SEQ_ID : alg_REF_NAME;
- uint16_t flags = 1 | 4 |
- ((calg_col[alg_SAM_FLAGS].base.u32[0] & 0x10) << 1) |
- ((calg_col[alg_SAM_FLAGS].base.u32[0] & 0x40) ? 0x80 : 0x40) |
- (calg_col[alg_SAM_FLAGS].base.u32[0] & 0x400);
- DumpUnalignedSAM(cseq_col, param, flags, readStart, readLen,
- calg_col[c].base.str, calg_col[c].len, calg_col[alg_REF_POS].base.coord0[0] + 1);
+ for( i = 0; i < nreads; i++ )
+ {
+ INSDC_coord_zero readStart;
+ INSDC_coord_len readLen;
+
+ if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx != 0 &&
+ ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+ {
+ continue;
}
- }
- if( rcount != NULL ) {
- *rcount += 1;
+
+ if ( ctx->seq.cols[ seq_READ_TYPE ].idx != 0 &&
+ !( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_BIOLOGICAL ) )
+ {
+ continue;
+ }
+
+ readLen = ctx->seq.cols[ seq_READ_LEN ].idx ?
+ ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ] :
+ ctx->seq.cols[ seq_READ ].len;
+ if ( readLen == 0 )
+ {
+ continue;
+ }
+
+ readStart = ctx->seq.cols[ seq_READ_START ].idx ?
+ ctx->seq.cols[ seq_READ_START ].base.coord0[ i ] :
+ 0;
+ if ( param->fasta || param->fastq )
+ {
+ DumpUnalignedFastX( ctx->seq.cols, nreads > 1 ? i + 1 : 0, readStart, readLen, row_id );
+ }
+ else
+ {
+ uint32_t cflags = 0x4;
+ if ( param->reverse_unaligned )
+ {
+ if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_REVERSE )
+ {
+ cflags |= 0x10;
+ }
+ if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i == nreads - 1 ? 0 : ( i + 1 ) ] & SRA_READ_TYPE_REVERSE )
+ {
+ cflags |= 0x20;
+ }
+ }
+ if ( ctx->seq.cols[ seq_READ_FILTER ].idx != 0 )
+ {
+ if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_REJECT )
+ {
+ cflags |= 0x200;
+ }
+ else if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_CRITERIA )
+ {
+ cflags |= 0x400;
+ }
+ }
+ if ( calg_col == NULL )
+ {
+ DumpUnalignedSAM( ctx->seq.cols, cflags |
+ ( non_empty_reads > 1 ? ( 0x1 | 0x8 | ( i == 0 ? 0x40 : 0x00 ) | ( i == nreads - 1 ? 0x80 : 0x00 ) ) : 0x00 ),
+ readStart, readLen, NULL, 0, 0, ctx->readGroup, row_id );
+ }
+ else
+ {
+ int c = param->use_seqid ? alg_REF_SEQ_ID : alg_REF_NAME;
+ uint16_t flags = cflags | 0x1 |
+ ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x10 ) << 1 ) |
+ ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x40 ) ? 0x80 : 0x40 );
+ DumpUnalignedSAM( ctx->seq.cols, flags, readStart, readLen,
+ calg_col[ c ].base.str, calg_col[ c ].len,
+ calg_col[ alg_REF_POS ].base.coord0[ 0 ] + 1, ctx->readGroup, row_id );
+ }
+ }
+ *rcount = *rcount + 1;
}
}
}
return rc;
}
-static
-bool AlignRegionFilter(const SParam* param, const SCol* cols)
+
+static bool AlignRegionFilter( SCol const *cols )
{
- if( cols[alg_REF_NAME].len != 0 || cols[alg_REF_SEQ_ID].len != 0 ) {
- uint32_t i, j, k;
+ if ( param->region_qty == 0 )
+ return true;
+ if ( cols[ alg_REF_NAME ].len != 0 || cols[ alg_REF_SEQ_ID ].len != 0 )
+ {
+ unsigned i;
- assert(cols[alg_REF_POS].len == cols[alg_REF_LEN].len);
+ assert( cols[ alg_REF_POS ].len == cols[ alg_REF_LEN ].len );
- for(i = 0; i < param->region_qty; i++) {
- for(j = 0; j < cols[alg_REF_POS].len; j++) {
- for(k = 0; k < param->region[i].rq; k++) {
- if( !( cols[alg_REF_POS].base.coord0[j] + cols[alg_REF_LEN].base.coord_len[j] < param->region[i].r[k].from ||
- cols[alg_REF_POS].base.coord0[j] > param->region[i].r[k].to ) ) {
+ for ( i = 0; i < param->region_qty; i++ )
+ {
+ unsigned j;
+
+ for ( j = 0; j < cols[ alg_REF_POS ].len; j++ )
+ {
+ unsigned const refStart_zero = cols[ alg_REF_POS ].base.coord0[ j ];
+ unsigned const refEnd_exclusive = refStart_zero + cols[ alg_REF_LEN ].base.coord_len[ j ];
+ unsigned k;
+
+ for ( k = 0; k < param->region[ i ].rq; k++ )
+ {
+ unsigned const from_zero = param->region[ i ].r[ k ].from;
+ unsigned const to_inclusive = param->region[ i ].r[ k ].to;
+
+ if ( from_zero < refEnd_exclusive && refStart_zero <= to_inclusive )
return true;
- }
}
}
}
@@ -764,19 +1805,26 @@ bool AlignRegionFilter(const SParam* param, const SCol* cols)
return false;
}
-static
-bool AlignDistanceFilter(const SParam* param, const SCol* cols)
+
+static bool AlignDistanceFilter( SCol const *cols )
{
- if( param->mp_dist_qty != 0 || param->mp_dist_unknown ) {
- if( cols[alg_TEMPLATE_LEN].len == 0 && param->mp_dist_unknown ) {
+ if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+ {
+ if ( cols[ alg_TEMPLATE_LEN ].len == 0 && param->mp_dist_unknown )
+ {
return true;
- } else {
+ }
+ else
+ {
uint32_t i, j;
- for(i = 0; i < param->mp_dist_qty; i++) {
- for(j = 0; j < cols[alg_TEMPLATE_LEN].len; j++) {
- if( (cols[alg_TEMPLATE_LEN].base.i32[j] == 0 && param->mp_dist_unknown) ||
- (param->mp_dist[i].from <= cols[alg_TEMPLATE_LEN].base.i32[j] &&
- cols[alg_TEMPLATE_LEN].base.i32[j] <= param->mp_dist[i].to) ) {
+ for( i = 0; i < param->mp_dist_qty; i++ )
+ {
+ for( j = 0; j < cols[ alg_TEMPLATE_LEN ].len; j++ )
+ {
+ if ( ( cols[ alg_TEMPLATE_LEN ].base.i32[ j ] == 0 && param->mp_dist_unknown ) ||
+ ( param->mp_dist[ i ].from <= cols[ alg_TEMPLATE_LEN ].base.i32[ j ] &&
+ cols[ alg_TEMPLATE_LEN ].base.i32[ j ] <= param->mp_dist[ i ].to ) )
+ {
return true;
}
}
@@ -787,765 +1835,3036 @@ bool AlignDistanceFilter(const SParam* param, const SCol* cols)
return true;
}
-static
-rc_t DumpAlignmentList(const SParam* param, const VCursor* curs, SCol* cols, const SCol* ids,
- const VCursor* cseq, SCol cseq_col[], int col_id)
+
+typedef struct cgOp_s
{
- rc_t rc = 0;
- uint32_t i;
-
- for(i = 0; rc == 0 && i < ids->len; i++) {
- if( (rc = Cursor_Read(curs, ids->base.i64[i], &cols[alg_REGION_FILTER])) == 0 ) {
- if( AlignRegionFilter(param, cols) && AlignDistanceFilter(param, cols) ) {
- if( (rc = Cursor_Read(curs, ids->base.i64[i], cols)) == 0 ) {
- if( param->fasta || param->fastq) {
- DumpAlignedFastX(cols, param, cols[alg_SEQ_READ_ID].base.coord1[0], cseq != NULL);
- } else {
- DumpAlignedSAM(cols, param);
- }
- if( cseq_col && param->unaligned ) {
- rc = DumpUnalignedSpot(param, cols, ids->base.i64[i], cseq, cseq_col, col_id, NULL);
- }
- }
- }
- } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
- /* a gap in ids? */
- rc = 0;
+ uint16_t length;
+ uint8_t type; /* 0: match, 1: insert, 2: delete */
+ char code;
+} cgOp;
+
+
+static void print_CG_cigar( int line, cgOp const op[], unsigned const ops, unsigned const gap[ 3 ] )
+{
+#if _DEBUGGING
+ unsigned i;
+
+ SAM_DUMP_DBG( 3, ( "%5i: ", line ) );
+ for ( i = 0; i < ops; ++i )
+ {
+ if ( gap && ( i == gap[ 0 ] || i == gap[ 1 ] || i == gap[ 2 ] ) )
+ {
+ SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, tolower( op[ i ].code ) ) );
+ }
+ else
+ {
+ SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, toupper( op[ i ].code ) ) );
}
- rc = rc ? rc : Quitting();
}
- return rc;
+ SAM_DUMP_DBG( 3, ( "\n" ) );
+#endif
}
-static
-rc_t DumpAlignments(const SParam* param, const VTable* talgP, const VTable* talgS,
- const VTable* tref, const VTable* tseq)
+/* gap contains the indices of the wobbles in op
+ * gap[0] is between read 1 and 2; it is the 'B'
+ * gap[1] is between read 2 and 3; it is an 'N'
+ * gap[2] is between read 3 and 4; it is an 'N'
+ */
+
+static rc_t CIGAR_to_CG_Ops( cgOp op[], unsigned const maxOps,
+ unsigned *const opCnt,
+ unsigned gap[ 3 ],
+ char const cigar[], unsigned const ciglen,
+ unsigned *const S_adjust,
+ unsigned *const CG_adjust,
+ unsigned const read,
+ bool const reversed )
{
- rc_t rc = 0;
- const VCursor *calgP = NULL, *calgS = NULL, *cseq = NULL;
-
- /* see enums above!!! */
- SCol calg_col[] = {
- {"SEQ_NAME", 0, {NULL}, 0, false},
- {"SAM_FLAGS", 0, {NULL}, 0, false},
- {"MAPQ", 0, {NULL}, 0, false},
- {"?CIGAR field column name?", 0, {NULL}, 0, false},
- {"MATE_REF_NAME", 0, {NULL}, 0, false},
- {"MATE_REF_POS", 0, {NULL}, 0, false},
- {"?READ filed column name?", 0, {NULL}, 0, false},
- {"SAM_QUALITY", 0, {NULL}, 0, false},
- {"SPOT_GROUP", 0, {NULL}, 0, true},
- {"SEQ_SPOT_GROUP", 0, {NULL}, 0, true},
- {"SEQ_SPOT_ID", 0, {NULL}, 0, true},
- {"SEQ_READ_ID", 0, {NULL}, 0, true},
- {"EDIT_DISTANCE", 0, {NULL}, 0, false},
- /* this are read before any other for filtering so they must be last */
- {"REF_NAME", 0, {NULL}, 0, false},
- {"REF_SEQ_ID", 0, {NULL}, 0, false},
- {"REF_POS", 0, {NULL}, 0, false},
- {"REF_LEN", 0, {NULL}, 0, false},
- {"TEMPLATE_LEN", 0, {NULL}, 0, false},
- {NULL, 0, {NULL}, 0, false}
- },
- cseq_col[] = {
- /* APPEND ONLY TO THIS LIST OF COLUMNS!!!
- unless you change enum above and SCol in DumpUnaligned below in sync!! */
- {"READ", 0, {NULL}, 0, false},
- {"(INSDC:quality:text:phred_33)QUALITY", 0, {NULL}, 0, false},
- {"SPOT_GROUP", 0, {NULL}, 0, true},
- {"READ_START", 0, {NULL}, 0, true},
- {"READ_LEN", 0, {NULL}, 0, true},
- {"READ_TYPE", 0, {NULL}, 0, true},
- {"NAME", 0, {NULL}, 0, true},
- {"PRIMARY_ALIGNMENT_ID", 0, {NULL}, 0, true},
- {NULL, 0, {NULL}, 0, false}
- };
- if( param->fasta || param->fastq ) {
- calg_col[alg_READ].name = "RAW_READ";
- } else {
- calg_col[alg_READ].name = param->hide_identical? "MISMATCH_READ" : "READ";
- }
- calg_col[alg_CIGAR].name = param->long_cigar ? "CIGAR_LONG" : "CIGAR_SHORT";
-
- if( (rc = Cursor_Init(talgP, &calgP, calg_col)) == 0 &&
- (rc = Cursor_Init(talgS, &calgS, calg_col)) == 0 &&
- ((param->unaligned && (rc = Cursor_Init(tseq, &cseq, cseq_col)) == 0) || !param->unaligned) ) {
-
- int64_t start = 0;
- uint64_t count = 0;
-
- if( param->region_qty == 0 ) {
- SAM_DUMP_DBG(2, ("%s PRIMARY_ALIGNMENTs\n", param->accession));
- if( rc == 0 && (rc = VCursorIdRange(calgP, 0, &start, &count)) == 0 ) {
- uint64_t rcount = 0;
-
- SAM_DUMP_DBG(2, ("range from %ld qty %lu\n", start, count));
- while( count > 0 && rc == 0 ) {
- if( (rc = Cursor_Read(calgP, start, &calg_col[alg_DISTANCE_FILTER])) == 0 ) {
- if( AlignDistanceFilter(param, calg_col) ) {
- if( (rc = Cursor_Read(calgP, start, calg_col)) == 0 ) {
- if( param->fasta || param->fastq ) {
- DumpAlignedFastX(calg_col, param, calg_col[alg_SEQ_READ_ID].base.coord1[0], true);
- } else {
- DumpAlignedSAM(calg_col, param);
- }
- if( param->unaligned ) {
- rc = DumpUnalignedSpot(param, calg_col, start, cseq, cseq_col, seq_NAME + 1, &rcount);
- }
- }
- }
- } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
- /* a gap in ids? */
- rc = 0;
+ unsigned i;
+ unsigned ops = 0;
+ unsigned gapno;
+
+ *opCnt = 0;
+ *S_adjust = 0;
+ for ( i = 0; i < ciglen; ++ops )
+ {
+ char opChar=0;
+ int opLen=0;
+ int n;
+
+ for(n=0;n+i<ciglen && isdigit(cigar[n+i]);n++){
+ opLen = opLen * 10 + cigar[n+i] - '0';
+ }
+ if(n+i<ciglen){
+ opChar = cigar[n+i];
+ n++;
+ }
+ if ( ops + 1 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+
+ i += n;
+
+ op[ ops ].length = opLen;
+ op[ ops ].code = opChar;
+ switch ( opChar )
+ {
+ case 'M':
+ case '=':
+ case 'X':
+ op[ ops ].type = 0;
+ break;
+ case 'S':
+ *S_adjust += opLen;
+ case 'I':
+ op[ ops ].type = 1;
+ op[ ops ].code = 'I';
+ break;
+ case 'D':
+ op[ ops ].type = 2;
+ break;
+ default:
+ return RC( rcExe, rcData, rcReading, rcConstraint, rcViolated );
+ }
+ }
+ *opCnt = ops;
+ gap[ 0 ] = gap[ 1 ] = gap[ 2 ] = ops;
+ print_CG_cigar( __LINE__, op, ops, NULL );
+ if ( ops < 3 )
+ return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+
+ {
+ unsigned fwd = 0; /* 5 10 10 10 */
+ unsigned rev = 0; /* 10 10 10 5 */
+ unsigned acc; /* accumulated length */
+
+ if ( ( read == 1 && !reversed ) || ( read == 2 && reversed ) )
+ {
+ for ( i = 0, acc = 0; i < ops && acc <=5; ++i )
+ {
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc == 5 && op[ i + 1 ].type == 1 )
+ {
+ fwd = i + 1;
+ break;
+ }
+ else if ( acc > 5 )
+ {
+ unsigned const right = acc - 5;
+ unsigned const left = op[ i ].length - right;
+
+ memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 2;
+ op[ i ].length = left;
+ op[ i + 2 ].length = right;
+
+ op[ i + 1 ].type = 1;
+ op[ i + 1 ].code = 'B';
+ op[ i + 1 ].length = 0;
+
+ fwd = i + 1;
+ break;
}
- start++;
- count--;
- ++rcount;
- rc = rc ? rc : Quitting();
}
- SAM_DUMP_DBG(2, ("%s: dumped %lu PRIMARY_ALIGNMENTs\n", param->accession, rcount));
- }
- SAM_DUMP_DBG(2, ("%s SECONDARY_ALIGNMENTs\n", param->accession));
- if( calgS != NULL && rc == 0 && (rc = VCursorIdRange(calgS, 0, &start, &count)) == 0 ) {
- uint64_t rcount = 0;
-
- SAM_DUMP_DBG(2, ("range from %ld qty %lu\n", start, count));
- while( count > 0 && rc == 0 ) {
- if( (rc = Cursor_Read(calgS, start, &calg_col[alg_DISTANCE_FILTER])) == 0 ) {
- if( AlignDistanceFilter(param, calg_col) ) {
- if( (rc = Cursor_Read(calgS, start, calg_col)) == 0 ) {
- if( param->fasta || param->fastq ) {
- DumpAlignedFastX(calg_col, param, calg_col[alg_SEQ_READ_ID].base.coord1[0], false);
- } else {
- DumpAlignedSAM(calg_col, param);
- }
- }
- }
- } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
- /* a gap in ids? */
- rc = 0;
+ }
+ }
+ else if ( ( read == 2 && !reversed ) || ( read == 1 && reversed ) )
+ {
+ for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+ {
+ --i;
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc == 5 && op[ i ].type == 1 )
+ {
+ rev = i;
+ break;
+ }
+ else if ( acc > 5 )
+ {
+ unsigned const left = acc - 5;
+ unsigned const right = op[ i ].length - left;
+
+ memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 2;
+ op[ i ].length = left;
+ op[ i + 2 ].length = right;
+
+ op[ i + 1 ].type = 1;
+ op[ i + 1 ].code = 'B';
+ op[ i + 1 ].length = 0;
+
+ rev = i + 1;
+ break;
}
- start++;
- count--;
- ++rcount;
- rc = rc ? rc : Quitting();
}
- SAM_DUMP_DBG(2, ("%s: dumped %lu SECONDARY_ALIGNMENTs\n", param->accession, rcount));
- }
- } else {
- /* use index to set REF_NAME ranges */
- uint32_t r;
- const KIndex* iname = NULL;
- const VCursor *cref = NULL;
-
- SCol cref_col[] = {
- {"MAX_SEQ_LEN", 0, {NULL}, 0, false},
- {"PRIMARY_ALIGNMENT_IDS", 0, {NULL}, 0, false},
- {"SECONDARY_ALIGNMENT_IDS", 0, {NULL}, 0, false},
- {NULL, 0, {NULL}, 0, false}
- };
- enum eref_col {
- ref_MAX_SEQ_LEN = 0,
- ref_PRIMARY_ALIGNMENT_IDS,
- ref_SECONDARY_ALIGNMENT_IDS
- };
-
- if( (rc = VTableOpenIndexRead(tref, &iname, "i_name")) == 0 &&
- (rc = Cursor_Init(tref, &cref, cref_col)) == 0 ) {
- for(r = 0; rc == 0 && r < param->region_qty; r++ ) {
- if( (rc = KIndexFindText(iname, param->region[r].name, &start, &count, NULL, NULL)) == 0 ) {
- bool skip_initial = true;
- uint64_t cur_pos = 0;
- uint32_t max_seq_len = 0;
-
- SAM_DUMP_DBG(2, ("REFERENCE %s index range is [%lu:%lu]\n", param->region[r].name, start, start + count - 1));
- while( count > 0 && rc == 0 ) {
- if( (rc = Cursor_Read(cref, start, cref_col)) == 0 ) {
- if( skip_initial ) {
- /* scroll to row with 1st region offset - 1 so algnmts tails in the range are not lost */
- uint64_t inc = param->region[r].r[0].from / cref_col[ref_MAX_SEQ_LEN].base.u32[0];
- max_seq_len = cref_col[ref_MAX_SEQ_LEN].base.u32[0];
- skip_initial = false;
- inc = inc ? inc - 1 : 0;
- if( start + inc != start ) {
- start += inc;
- count -= inc;
- cur_pos = max_seq_len * inc;
- continue;
- }
- } else if( cur_pos > param->region[r].max_to ) {
- break;
- }
- SAM_DUMP_DBG(2, ("row %s index range is [%lu:%lu] pos %lu\n",
- param->region[r].name, start, start + count - 1, cur_pos));
- if( (rc = DumpAlignmentList(param, calgP, calg_col, &cref_col[ref_PRIMARY_ALIGNMENT_IDS],
- cseq, cseq_col, seq_NAME + 1)) == 0 ) {
- if( calgS != NULL ) {
- rc = DumpAlignmentList(param, calgS, calg_col,
- &cref_col[ref_SECONDARY_ALIGNMENT_IDS], NULL, NULL, 0);
- }
- }
- } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
- /* a gap in ids? */
- rc = 0;
+ }
+ }
+ else
+ {
+ /* fprintf(stderr, "guessing layout\n"); */
+ for ( i = 0, acc = 0; i < ops && acc <= 5; ++i )
+ {
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc == 5 && op[ i + 1 ].type == 1 )
+ {
+ fwd = i + 1;
+ }
+ }
+ }
+ for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+ {
+ --i;
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc == 5 && op[i].type == 1 )
+ {
+ rev = i;
+ }
+ }
+ }
+ if ( ( fwd == 0 && rev == 0 ) || ( fwd != 0 && rev != 0 ) )
+ {
+ for ( i = 0; i < ops; ++i )
+ {
+ if ( op[ i ].type == 2 )
+ {
+ op[ i ].code = 'N';
+ *CG_adjust += op[ i ].length;
+ }
+ }
+ return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+ }
+ }
+ if ( fwd && op[ fwd ].type == 1 )
+ {
+ for ( i = ops, acc = 0; i > fwd + 1; )
+ {
+ --i;
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc >= 10 )
+ {
+ if ( acc > 10 )
+ {
+ unsigned const r = 10 + op[ i ].length - acc;
+ unsigned const l = op[ i ].length - r;
+
+ if ( ops + 2 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 2;
+ op[ i + 2 ].length = r;
+ op[ i ].length = l;
+
+ op[ i + 1 ].length = 0;
+ op[ i + 1 ].type = 2;
+ op[ i + 1 ].code = 'N';
+ i += 2;
+ }
+ else if ( i - 1 > fwd )
+ {
+ if ( op[ i - 1 ].type == 2 )
+ op[ i - 1 ].code = 'N';
+ else
+ {
+ if ( ops + 1 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 1;
+ op[ i ].length = 0;
+ op[ i ].type = 2;
+ op[ i ].code = 'N';
+ i += 1;
}
- start++;
- count--;
- cur_pos += max_seq_len;
- rc = rc ? rc : Quitting();
}
- } else if( GetRCState(rc) == rcNotFound ) {
- PLOGMSG(klogWarn, (klogWarn, "REFERENCE $(r) not present in data", "r=%s", param->region[r].name));
- rc = 0;
+ acc = 0;
}
}
}
- VCursorRelease(cref);
- KIndexRelease(iname);
+ /** change I to B+M **/
+ op[ fwd ].code = 'B';
+ memmove( &op[ fwd + 1 ], &op[ fwd ], ( ops - fwd ) * sizeof( op[ 0 ] ) );
+ ops += 1;
+ op[ fwd + 1 ].code = 'M';
+ *opCnt = ops;
+ /** set the gaps now **/
+ for ( gapno = 3, i = ops; gapno > 1 && i > 0; )
+ {
+ --i;
+ if ( op[ i ].code == 'N' )
+ gap[ --gapno ] = i;
+ }
+ gap[ 0 ] = fwd;
+ print_CG_cigar( __LINE__, op, ops, gap );
+ return 0;
}
- }
- VCursorRelease(calgP);
- VCursorRelease(calgS);
- VCursorRelease(cseq);
- return rc;
-}
-
-static
-rc_t DumpUnaligned(const SParam* param, const VTable* tseq)
-{
- rc_t rc = 0;
- const VCursor* cflt = NULL, *cseq = NULL;
-
- SCol cseq_flt[] = {
- {"PRIMARY_ALIGNMENT_ID", 0, {NULL}, 0, true},
- {NULL, 0, {NULL}, 0, false}
- },
- cseq_col[] = {
- /* APPEND ONLY TO THIS LIST OF COLUMNS!!!
- unless you change enum above and SCol in DumpAlignments above in sync!! */
- {"READ", 0, {NULL}, 0, false},
- {"(INSDC:quality:text:phred_33)QUALITY", 0, {NULL}, 0, false},
- {"SPOT_GROUP", 0, {NULL}, 0, true},
- {"READ_START", 0, {NULL}, 0, true},
- {"READ_LEN", 0, {NULL}, 0, true},
- {"READ_TYPE", 0, {NULL}, 0, true},
- {"NAME", 0, {NULL}, 0, true},
- {NULL, 0, {NULL}, 0, false}
- };
- enum eseq_flt {
- seq_PRIMARY_ALIGNMENT_ID = 0
- };
-
- if( (rc = Cursor_Init(tseq, &cflt, cseq_flt)) == 0 &&
- (rc = Cursor_Init(tseq, &cseq, cseq_col)) == 0 ) {
- int64_t start = 0;
- uint64_t count = 0;
- if( (rc = VCursorIdRange(cseq, 0, &start, &count)) == 0 ) {
- uint64_t rcount = 0;
-
- SAM_DUMP_DBG(2, ("%s SEQUENCEs without PRIMARY_ALIGNMENT_ID or equal 0\n", param->accession));
- SAM_DUMP_DBG(2, ("range from %ld qty %lu\n", start, count));
- while( count > 0 && rc == 0 ) {
- uint32_t i, nreads = 1;
-
- /* to avoid reading whole sequence cursor data unnecessarily
- nreads is used as flag based on PRIMARY_ALIGNMENT_ID column presence and values */
- if( cseq_flt[seq_PRIMARY_ALIGNMENT_ID].idx != 0 ) {
- if( (rc = Cursor_Read(cflt, start, cseq_flt)) == 0 ) {
- nreads = 1;
- /* count unaligned reads on spot */
- for(i = 0; i < cseq_flt[seq_PRIMARY_ALIGNMENT_ID].len; i++) {
- if( cseq_flt[seq_PRIMARY_ALIGNMENT_ID].base.i64[i] != 0 ) {
- /* skip partially unaligned spots, they are printed
- together with aligned read (with lowest alignment id)
- in PRIMARY_ALIGNMENT loop */
- nreads = 0;
- break;
+ if ( rev && op[ rev ].type == 1 )
+ {
+ for ( acc = i = 0; i < rev; ++i )
+ {
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc >= 10 )
+ {
+ if ( acc > 10 )
+ {
+ unsigned const l = 10 + op[ i ].length - acc;
+ unsigned const r = op[ i ].length - l;
+
+ if ( ops + 2 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 2;
+ op[ i + 2 ].length = r;
+ op[ i ].length = l;
+
+ op[ i + 1 ].length = 0;
+ op[ i + 1 ].type = 2;
+ op[ i + 1 ].code = 'N';
+ rev += 2;
+ i += 2;
+ }
+ else if ( i + 1 < rev )
+ {
+ if ( op[ i + 1 ].type == 2)
+ op[ i + 1 ].code = 'N';
+ else
+ {
+ if ( ops + 1 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 1;
+ op[ i + 1 ].length = 0;
+ op[ i + 1 ].type = 2;
+ op[ i + 1 ].code = 'N';
+ rev += 1;
+ i += 1;
}
}
+ acc = 0;
}
}
- if( rc == 0 && nreads != 0 ) {
- DumpUnalignedSpot(param, NULL, start, cseq, cseq_col, 0, &rcount);
- } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
- /* a gap in ids? */
- rc = 0;
- }
- start++;
- count--;
- rc = rc ? rc : Quitting();
}
- SAM_DUMP_DBG(2, ("%s: dumped %lu unaligned reads\n", param->accession, rcount));
+ for ( gapno = 3, i = 0; gapno > 1 && i < ops; ++i )
+ {
+ if ( op[ i ].code == 'N' )
+ gap[ --gapno ] = i;
+ }
+ gap[ 0 ] = rev;
+ op[ rev ].code = 'B';
+ memmove( &op[ rev + 1 ], &op[ rev ], ( ops - rev ) * sizeof( op[ 0 ] ) );
+ ops += 1;
+ op[ rev + 1 ].code = 'M';
+ *opCnt = ops;
+ print_CG_cigar( __LINE__, op, ops, gap );
+ return 0;
}
}
- VCursorRelease(cseq);
- return rc;
+ return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
}
-static
-rc_t Dump(uint32_t idx, bool multi_run, SParam* param)
+
+static rc_t GenerateCGData( SCol cols[], unsigned style )
{
rc_t rc = 0;
- const VDBManager* mgr = NULL;
- const KDBManager* kmgr = NULL;
-
- if( (rc = VDBManagerMakeRead(&mgr, NULL)) == 0 &&
- (rc = VDBManagerOpenKDBManagerRead(mgr, &kmgr)) == 0 ) {
-
- int pathType = KDBManagerPathType(kmgr, param->path) & ~kptAlias;
- if( pathType == kptDatabase ) {
- const VDatabase* db;
- if( (rc = VDBManagerOpenDBRead(mgr, &db, NULL, param->path)) == 0 ) {
- const VTable* seq = NULL, *algP = NULL, *algS = NULL, *ref = NULL;
- if( (rc = OpenVTable(db, &ref, "REFERENCE", false)) == 0 &&
- (rc = OpenVTable(db, &seq, "SEQUENCE", false)) == 0 &&
- (rc = OpenVTable(db, &algP, "PRIMARY_ALIGNMENT", false)) == 0 &&
- (rc = OpenVTable(db, &algS, "SECONDARY_ALIGNMENT", true)) == 0 ) {
-
- if( !param->noheader && !param->reheader && !multi_run ) {
- /* grab header from db meta node */
- const KMetadata* m;
- if( (rc = VDatabaseOpenMetadataRead(db, &m)) == 0 ) {
- const KMDataNode* n;
- if( (rc = KMetadataOpenNodeRead(m, &n, "BAM_HEADER")) == 0 ) {
- size_t offset = 0, num_read, remaining = ~0;
- char buffer[40960];
- while(rc == 0 && remaining > 0 ) {
- if( (rc = KMDataNodeRead(n, offset, buffer, sizeof(buffer),
- &num_read, &remaining)) == 0 ) {
- OUTMSG(("%.*s", ( uint32_t ) num_read, buffer));
- offset += num_read;
- }
- }
- if( rc == 0 && buffer[num_read - 1] != '\n' ) {
- OUTMSG(("\n"));
- }
- KMDataNodeRelease(n);
- } else if( GetRCState(rc) == rcNotFound ) {
- param->reheader = true;
- rc = 0;
- }
- KMetadataRelease(m);
- }
+
+ memset( &cols[ alg_CG_TAGS_STR], 0, sizeof( cols[ alg_CG_TAGS_STR ] ) );
+
+ if ( cols[ alg_READ ].len == 35 && cols[ alg_SAM_QUALITY ].len == 35 )
+ {
+ static char newCIGAR[ 35 * 11 ];
+ static int32_t newEditDistance;
+ unsigned gap[ 3 ] = { 0, 0, 0 };
+ cgOp cigOp[ 35 ];
+ unsigned opCnt;
+ unsigned i;
+ unsigned j;
+ size_t sz;
+ unsigned S_adjust = 0;
+ unsigned CG_adjust = 0;
+ unsigned const read = cols[ alg_SEQ_READ_ID ].len && cols[ alg_REVERSED ].len ? cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+ bool const reversed = cols[ alg_REVERSED ].len ? cols[ alg_REVERSED ].base.u8[ 0 ] : false;
+
+ rc = CIGAR_to_CG_Ops( cigOp, sizeof( cigOp ) / sizeof( cigOp[ 0 ] ), &opCnt, gap,
+ cols[ alg_CIGAR ].base.str, cols[ alg_CIGAR ].len,
+ &S_adjust, &CG_adjust, read, reversed );
+ if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+ {
+ rc = 0;
+ if ( style == 1 )
+ goto CLEAN_CIGAR;
+ else
+ goto PRINT_CIGAR;
+ }
+ if ( rc != 0 )
+ return 0;
+
+ if ( CG_adjust == 0 )
+ CG_adjust = ( gap[ 0 ] < opCnt ? cigOp[ gap[ 0 ] ].length : 0 )
+ + ( gap[ 1 ] < opCnt ? cigOp[ gap[ 1 ] ].length : 0 )
+ + ( gap[ 2 ] < opCnt ? cigOp[ gap[ 2 ] ].length : 0 );
+
+ print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+ if ( style == 1 )
+ {
+ static char newSeq[ 35 ];
+ static char newQual[ 35 ];
+ static char tags[ 35*22 + 1 ];
+ unsigned const B_len = cigOp[ gap[ 0 ] ].length;
+ unsigned const B_at = gap[ 0 ] < gap[ 2 ] ? 5 : 30;
+
+ if ( 0 < B_len && B_len < 5 )
+ {
+ memcpy( newSeq, cols[ alg_READ ].base.v, 35 );
+ memcpy( newQual, cols[ alg_SAM_QUALITY ].base.v, 35 );
+
+ cols[ alg_CG_TAGS_STR ].base.v = tags;
+
+ cols[ alg_READ ].base.v = newSeq;
+ cols[ alg_READ ].len = 35 - B_len;
+
+ cols[ alg_SAM_QUALITY ].base.v = newQual;
+ cols[ alg_SAM_QUALITY ].len = 35 - B_len;
+
+ /* nBnM -> nB0M */
+ cigOp[ gap[ 0 ] + 1 ].length -= B_len;
+ if ( gap[ 0 ] < gap[ 2 ] )
+ {
+ rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+ 5 - B_len, B_len, 30 - B_len, 2 * B_len, &newSeq[ 5 - B_len ], 2 * B_len, &newQual[ 5 - B_len ] );
+ if ( rc == 0 )
+ {
+ cols[ alg_CG_TAGS_STR ].len = sz;
}
- if( rc == 0 && !param->noheader && (param->reheader || multi_run) ) {
- if( !multi_run || idx == 0 ) {
- OUTMSG(("@HD VN:1.3\n"));
+ memmove( &cigOp[ gap[ 0 ] ],
+ &cigOp[ gap[ 0 ] + 1 ],
+ ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+ --opCnt;
+ }
+ else
+ {
+ rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+ 30 - B_len, B_len, 5 - B_len, 2 * B_len, &newSeq[ 30 - B_len ], 2 * B_len, &newQual[ 30 - B_len ] );
+ if ( rc == 0 )
+ {
+ cols[ alg_CG_TAGS_STR ].len = sz;
+ }
+ memmove( &cigOp[ gap[ 0 ] ],
+ &cigOp[ gap[ 0 ] + 1 ],
+ ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+ --opCnt;
+ }
+ if ( rc == 0 )
+ {
+ for ( i = B_at; i < B_at + B_len; ++i )
+ {
+ int const Lq = newQual[ i - B_len ];
+ int const Rq = newQual[ i ];
+
+ if ( Lq <= Rq )
+ {
+ newSeq[ i - B_len ] = newSeq[ i ];
+ newQual[ i - B_len ] = Rq;
}
- if( !multi_run && (rc = DumpRefSeqs(ref, param)) == 0 ) {
- rc = DumpReadGroups(seq);
+ else
+ {
+ newSeq[ i ] = newSeq[ i - B_len ];
+ newQual[ i ] = Lq;
}
}
- if( rc == 0 ) {
- rc = DumpAlignments(param, algP, algS, ref, seq);
- if( rc == 0 && param->unaligned ) {
- rc = DumpUnaligned(param, seq);
- }
+ memmove( &newSeq [ B_at ], &newSeq [ B_at + B_len ], 35 - B_at - B_len );
+ memmove( &newQual[ B_at ], &newQual[ B_at + B_len ], 35 - B_at - B_len );
+ }
+ }
+ else
+ {
+ int len = cigOp[ gap[ 0 ] ].length;
+
+ cigOp[ gap[ 0 ] ].code = 'I';
+ for (i = gap[0] + 1; i < opCnt && len > 0; ++i) {
+ if (cigOp[i].length <= len){
+ len -= cigOp[i].length;
+ cigOp[i].length = 0;
+ }
+ else {
+ cigOp[i].length -= len;
+ len = 0;
}
}
- VTableRelease(ref);
- VTableRelease(seq);
- VTableRelease(algP);
- VTableRelease(algS);
- VDatabaseRelease(db);
- }
- } else {
- const VTable* seq = NULL;
- VSchema* schema = NULL;
-
-UseLegacy:
- if( (rc = VDBManagerOpenTableRead(mgr, &seq, schema, param->path)) == 0 ) {
- OUTMSG(("@HD VN:1.3\n"));
- if( (rc = DumpReadGroups(seq)) == 0 ) {
- rc = DumpUnaligned(param, seq);
+ CG_adjust -= cigOp[ gap[ 0 ] ].length;
+ }
+ }
+ if ( rc == 0 )
+ {
+ PRINT_CIGAR:
+ CLEAN_CIGAR:
+ print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+ /* remove zero length ops */
+ for ( j = i = 0; i < opCnt; )
+ {
+ if ( cigOp[ j ].length == 0)
+ {
+ ++j;
+ --opCnt;
+ continue;
}
- VTableRelease(seq);
+ cigOp[ i++ ] = cigOp[ j++ ];
+ }
+ print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+ if ( cols[ alg_EDIT_DISTANCE ].len )
+ {
+ int const edit_distance = cols[ alg_EDIT_DISTANCE ].base.i32[ 0 ];
+ int const adjusted = edit_distance + S_adjust - CG_adjust;
+
+ newEditDistance = adjusted > 0 ? adjusted : 0;
+ SAM_DUMP_DBG( 4, ( "NM: before: %u, after: %u(+%u-%u)\n", edit_distance, newEditDistance, S_adjust, CG_adjust ) );
+ cols[ alg_EDIT_DISTANCE ].base.v = &newEditDistance;
+ cols[ alg_EDIT_DISTANCE ].len = 1;
}
- if( rc != 0 && schema == NULL ) {
- if( (rc = VDBManagerMakeSRASchema(mgr, &schema)) == 0 ) {
- goto UseLegacy;
+ /* merge adjacent ops */
+ for ( i = opCnt; i > 1; )
+ {
+ --i;
+ if ( cigOp[ i - 1 ].code == cigOp[ i ].code )
+ {
+ cigOp[ i - 1 ].length += cigOp[ i ].length;
+ memmove( &cigOp[ i ], &cigOp[ i + 1 ], ( opCnt - 1 - i ) * sizeof( cigOp[ 0 ] ) );
+ --opCnt;
}
}
- VSchemaRelease(schema);
+ print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+ for ( i = j = 0; i < opCnt && rc == 0; ++i )
+ {
+ rc = string_printf( &newCIGAR[ j ], sizeof( newCIGAR ) - j, &sz, "%u%c", cigOp[ i ].length, cigOp[ i ].code);
+ j += sz;
+ }
+ cols[ alg_CIGAR ].base.v = newCIGAR;
+ cols[ alg_CIGAR ].len = j;
}
}
- VDBManagerRelease(mgr);
- KDBManagerRelease(kmgr);
return rc;
}
-ver_t CC KAppVersion( void )
+
+static bool DumpAlignedRow( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+ int64_t row,
+ bool const primary,
+ int const cg_style,
+ rc_t *prc )
{
- return SAM_DUMP_VERS;
+ rc_t rc;
+
+ /* if SEQ_SPOT_ID is open then skip rows with no SEQ_SPOT_ID */
+ if ( ds->cols[ alg_SEQ_SPOT_ID ].idx )
+ {
+ rc = Cursor_Read( ds, row, alg_SEQ_SPOT_ID, 1 );
+ if ( rc != 0 )
+ {
+ if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+ *prc = rc;
+ return false;
+ }
+ if ( ds->cols[ alg_SEQ_SPOT_ID ].len == 0 ||
+ ds->cols[ alg_SEQ_SPOT_ID ].base.i64[ 0 ] == 0 )
+ return false;
+ }
+
+ /* skip rows that fail mate distance filter */
+ if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+ {
+ rc = Cursor_Read( ds, row, alg_TEMPLATE_LEN, 1 );
+ if ( rc != 0 )
+ {
+ if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+ *prc = rc;
+ return false;
+ }
+ if ( !AlignDistanceFilter( ds->cols ) )
+ return false;
+ }
+
+ rc = Cursor_ReadAlign( &ds->curs, row, ds->cols, 0 );
+ if ( rc != 0 )
+ {
+ if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+ *prc = rc;
+ return false;
+ }
+
+ if ( param->fasta || param->fastq )
+ {
+ unsigned const read_id = ds->cols[ alg_SEQ_READ_ID ].base.v ? ds->cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+
+ DumpAlignedFastX( ctx->pri.cols, row, read_id, primary, false );
+ }
+ else
+ {
+ if ( cg_style != 0 )
+ {
+ rc = GenerateCGData( ds->cols, cg_style );
+ if ( rc != 0 )
+ {
+ *prc = rc;
+ return false;
+ }
+ }
+ DumpAlignedSAM(ctx, ds, row, ctx->readGroup, 0 );
+ }
+ *prc = 0;
+ return true;
}
-const char* seq_id_usage[] = {"Print reference SEQ_ID in RNAME instead of NAME", NULL};
-const char* unaligned_usage[] = {"Output unaligned reads", NULL};
-const char* cigartype_usage[] = {"Output long version of CIGAR", NULL};
-const char* header_usage[] = {"Always reconstruct header", NULL};
-const char* noheader_usage[] = {"Do not output headers", NULL};
-const char* region_usage[] = {"Filter by position on genome.",
- "Name can either be file specific name (ex: \"chr1\" or \"1\").",
- "\"from\" and \"to\" are 1-based coordinates", NULL};
-const char* distance_usage[] = {"Filter by distance between matepairs.",
- "Use \"unknown\" to find matepairs split between the references.",
- "Use from-to to limit matepair distance on the same reference", NULL};
-const char* identicalbases_usage[] = {"Output '=' if base is identical to reference", NULL};
-const char* gzip_usage[] = {"Compress output using gzip", NULL};
-const char* bzip2_usage[] = {"Compress output using bzip2", NULL};
-const char* qname_usage[] = {"Add .SPOT_GROUP to QNAME", NULL};
-const char* fasta_usage[] = {"Produce Fasta formatted ouput", NULL};
-const char* fastq_usage[] = {"Produce FastQ formatted ouput", NULL};
-const char* prefix_usage[] = {"Prefix QNAME: prefix.QNAME", NULL};
-
-const char* usage_params[] =
-{
- NULL,
- NULL,
- NULL,
- NULL,
- "name[:from-to]",
- "from-to|unknown",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "<prefix>"
-};
-enum eArgs {
- earg_seq_id = 0,
- earg_unaligned,
- earg_cigartype,
- earg_header,
- earg_region,
- earg_distance,
- earg_identicalbases,
- earg_gzip,
- earg_bzip2,
- earg_qname,
- earg_noheader,
- earg_fastq,
- earg_fasta,
- earg_prefix
+static rc_t DumpAlignedRowList( SAM_dump_ctx_t *const ctx, DataSource *const ds, SCol const *const ids,
+ int64_t *rcount,
+ bool const primary,
+ int const cg_style,
+ bool const noFilter )
+{
+ rc_t rc;
+ unsigned i;
+ unsigned const n = ids->len;
+
+ for ( i = 0; ( rc = Quitting() ) == 0 && i < n; ++i )
+ {
+ int64_t const row = ids->base.i64[ i ];
+
+ if ( ! noFilter )
+ rc = Cursor_Read( ds, row, alg_REGION_FILTER, ~(unsigned)0 );
+
+ if ( rc == 0 )
+ {
+ if ( noFilter || AlignRegionFilter(ds->cols) )
+ {
+ if ( DumpAlignedRow( ctx, ds, row, primary, cg_style, &rc ) )
+ ++*rcount;
+ if ( rc != 0 )
+ break;
+ }
+ }
+ }
+ return rc;
+}
+
+static rc_t DumpAlignedRowListIndirect( SAM_dump_ctx_t *const ctx,
+ DataSource *const indirectSource,
+ DataSource *const directSource,
+ SCol const *const directIDs,
+ int64_t *rcount,
+ bool const primary,
+ int const cg_style )
+{
+ unsigned i;
+
+ for ( i = 0; i < directIDs->len; ++i )
+ {
+ int64_t const row = directIDs->base.i64[ i ];
+ rc_t rc = Cursor_Read( directSource, row, alg_REGION_FILTER, ~(unsigned)0 );
+
+ if ( rc != 0 )
+ return rc;
+
+ if ( !AlignRegionFilter( directSource->cols ) )
+ continue;
+
+ rc = Cursor_Read( directSource, row, alg_EVIDENCE_ALIGNMENT_IDS, 1 );
+ if ( rc != 0 )
+ return rc;
+
+ rc = DumpAlignedRowList( ctx, indirectSource, &directSource->cols[ alg_EVIDENCE_ALIGNMENT_IDS ],
+ rcount, primary, cg_style, true );
+ if ( rc != 0 )
+ return rc;
+ }
+ return 0;
+}
+
+
+enum e_tables
+{
+ primary_alignment,
+ secondary_alignment,
+ evidence_interval,
+ evidence_alignment
};
-OptDef DumpArgs[] =
+enum e_IDS_opts
{
- {"seqid", "s", NULL, seq_id_usage, 0, false, false},
- {"unaligned", "u", NULL, unaligned_usage, 0, false, false},
- {"cigar-long", "c", NULL, cigartype_usage, 0, false, false},
- {"header", "r", NULL, header_usage, 0, false, false},
- {"aligned-region", NULL, NULL, region_usage, 0, true, false},
- {"matepair-distance", NULL, NULL, distance_usage, 0, true, false},
- {"hide-identical", "=", NULL, identicalbases_usage, 0, false, false},
- {"gzip", NULL, NULL, gzip_usage, 0, false, false},
- {"bzip2", NULL, NULL, bzip2_usage, 0, false, false},
- {"spot-group", "g", NULL, qname_usage, 0, false, false},
- {"no-header", "n", NULL, noheader_usage, 0, false, false},
-#ifdef NCBI
- {"fastq", NULL, NULL, fasta_usage, 0, false, false},
- {"fasta", NULL, NULL, fastq_usage, 0, false, false},
-#else
- {"fastq", NULL, NULL, NULL, 0, false, false},
- {"fasta", NULL, NULL, NULL, 0, false, false},
-#endif
- {"prefix", "p", NULL, prefix_usage, 0, true, false},
+ primary_IDS = ( 1 << primary_alignment ),
+ secondary_IDS = ( 1 << secondary_alignment ),
+ evidence_interval_IDS = ( 1 << evidence_interval ),
+ evidence_alignment_IDS = ( 1 << evidence_alignment )
};
-const char UsageDefaultName[] = "sam-dump";
-rc_t CC UsageSummary (const char * progname)
+static rc_t DumpAlignedRowList_cb( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn,
+ int options, int which, int64_t *rcount, SCol const *const IDS )
{
- return KOutMsg ( "Usage:\n"
- "\t%s [options] path[ path ...]\n\n", progname );
- return 0;
+ /*SAM_DUMP_DBG(2, ("row %s index range is [%lu:%lu] pos %lu\n",
+ param->region[r].name, start, start + count - 1, cur_pos));*/
+ switch ( which )
+ {
+ case primary_IDS:
+ return DumpAlignedRowList( ctx, &ctx->pri, IDS, rcount, true, param->cg_style, false );
+
+ case secondary_IDS:
+ return DumpAlignedRowList( ctx, &ctx->sec, IDS, rcount, false, param->cg_style, false );
+
+ case evidence_interval_IDS:
+ {
+ rc_t rc = 0;
+
+ if ( ( options & evidence_interval_IDS ) != 0 )
+ rc = DumpAlignedRowList( ctx, &ctx->evi, IDS, rcount, true, 0, false );
+
+ if ( rc == 0 && ( options & evidence_alignment_IDS ) != 0 )
+ rc = DumpAlignedRowListIndirect( ctx, &ctx->eva, &ctx->evi, IDS, rcount, true, param->cg_style );
+
+ return rc;
+ }
+ }
+ return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
}
-rc_t CC Usage( const Args* args )
+typedef struct CigOps{
+ char op;
+ int8_t ref_sign; /*** 0;+1;-1; ref_offset = ref_sign * offset ***/
+ int8_t seq_sign; /*** 0;+1;-1; seq_offset = seq_sign * offset ***/
+ uint32_t oplen;
+} CigOps;
+
+static void SetCigOp(CigOps *dst,char op,uint32_t oplen)
{
- const char * progname = UsageDefaultName;
- const char * fullpath = UsageDefaultName;
- rc_t rc;
- int i;
+ dst->op = op;
+ dst->oplen = oplen;
+ switch(op) { /*MX= DN B IS PH*/
+ case 'M': case 'X': case '=':
+ dst->ref_sign=+1;
+ dst->seq_sign=+1;
+ break;
+ case 'D': case 'N':
+ dst->ref_sign=+1;
+ dst->seq_sign= 0;
+ break;
+ case 'B':
+ dst->ref_sign=-1;
+ dst->seq_sign= 0;
+ break;
+ case 'S': case 'I':
+ dst->ref_sign= 0;
+ dst->seq_sign=+1;
+ break;
+ case 'P': case 'H':
+ case 0: /** terminating op **/
+ dst->ref_sign= 0;
+ dst->seq_sign= 0;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+}
+
+static unsigned ExplodeCIGAR( CigOps dst[], unsigned len, char const cigar[], unsigned ciglen )
+{
+ unsigned i;
+ unsigned j;
+ int opLen;
+
+ for ( i = j = opLen=0; i < ciglen; i++) {
+ if(isdigit(cigar[i])){
+ opLen = opLen * 10 + cigar[i] - '0';
+ } else {
+ assert(isalpha(cigar[i]));
+ SetCigOp(dst+j,cigar[i],opLen);
+ opLen=0;
+ j++;
+ }
+ }
+ SetCigOp(dst+j,0,0);
+ j++;
+ return j;
+}
+
- rc = ArgsProgram(args, &fullpath, &progname);
+#define CG_CIGAR_STRING_MAX (35 * 11 + 1)
- OUTMSG (( "\nUsage:\n"
- "\t%s [options] path[ path ...]\n\n", progname));
- OUTMSG (("Options:\n"));
- for(i = 0; i < sizeof(DumpArgs)/sizeof(DumpArgs[0]); i++ ) {
- if( DumpArgs[i].help != NULL ) {
- HelpOptionLine(DumpArgs[i].aliases, DumpArgs[i].name, usage_params[i], DumpArgs[i].help);
+#if 0
+static unsigned FormatCIGAR( char dst[], unsigned cp, unsigned oplen, int opcode )
+{
+ size_t sz;
+ string_printf( dst + cp, CG_CIGAR_STRING_MAX - cp, &sz, "%u%c", oplen, opcode );
+ return sz;
+}
+
+
+static unsigned DeletedCIGAR( char dst[], unsigned const cp, int opcode, unsigned D,
+ uint32_t const Op[], int ri, unsigned len )
+{
+ unsigned i;
+ unsigned curPos = 0;
+ int curOp = opcode;
+ unsigned oplen = 0;
+
+ for ( i = 0; i < D && ri < len; ++i, ++ri )
+ {
+ uint32_t const op = Op[ ri ];
+ int const d = op >> 2;
+ int const m = op & 1;
+ int const nxtOp = m ? opcode : 'P';
+
+ if ( d != 0 )
+ {
+ if ( oplen != 0 )
+ curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+ curPos += FormatCIGAR( dst, cp, d, 'D' );
+ oplen = 0;
+ }
+ if ( oplen == 0 || nxtOp == curOp )
+ {
+ ++oplen;
+ }
+ else
+ {
+ curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+ oplen = 1;
}
+ curOp = nxtOp;
}
- OUTMSG (("\n"));
- HelpOptionsStandard();
- HelpVersion(fullpath, KAppVersion());
+ if ( oplen != 0 && curOp != opcode)
+ {
+ curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+ oplen = 0;
+ }
+ if ( i < D )
+ oplen += D - i;
+ if ( oplen )
+ curPos += FormatCIGAR( dst, curPos + cp, oplen, opcode );
+ return curPos;
+}
+#endif
- return rc;
+static char merge_M_type_ops(char a,char b)
+{ /*MX=*/
+ char c=0;
+ switch(b){
+ case 'X':
+ switch(a){
+ case '=': c='X'; break;
+ case 'X': c='M'; break; /**we don't know - 2X may create '=' **/
+ case 'M': c='M'; break;
+ }
+ break;
+ case 'M':
+ c='M';
+ break;
+ case '=':
+ c=a;
+ break;
+ }
+ assert(c!=0);
+ return c;
}
-rc_t CC KMain( int argc, char* argv[] )
+
+static unsigned CombineCIGAR( char dst[], CigOps const seqOp[], unsigned seq_len,
+ int refPos, CigOps const refOp[], unsigned ref_len )
{
- rc_t rc = 0;
- Args* args;
- const char* errmsg = "stop";
+ bool done=false;
+ unsigned ciglen=0,last_ciglen=0;
+ char last_cig_op;
+ uint32_t last_cig_oplen=0;
+ int si=0,ri=0;
+ CigOps seq_cop={0,0,0,0},ref_cop={0,0,0,0};
+ int seq_pos=0; /** seq_pos is tracked roughly - with every extraction from seqOp **/
+ int ref_pos=0; /** ref_pos is tracked precisely - with every delta and consumption in cigar **/
+ int delta=refPos; /*** delta in relative positions of seq and ref **/
+ /*** when delta < 0 - rewind or extend the reference ***/
+ /*** wher delta > 0 - skip reference ***/
+#define MACRO_BUILD_CIGAR(OP,OPLEN) \
+ if( last_cig_oplen > 0 && last_cig_op == OP){ \
+ last_cig_oplen += OPLEN; \
+ ciglen = last_ciglen + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op); \
+ } else { \
+ last_ciglen = ciglen; \
+ last_cig_oplen = OPLEN; \
+ last_cig_op = OP; \
+ ciglen = ciglen + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op); \
+ }
+ while(!done){
+ while(delta < 0){
+ ref_pos += delta; /** we will make it to back up this way **/
+ if(ri > 0){ /** backing up on ref if possible ***/
+ int avail_oplen = refOp[ri-1].oplen - ref_cop.oplen;
+ if(avail_oplen > 0 ){
+ if((-delta) <= avail_oplen * ref_cop.ref_sign){ /*** rewind within last operation **/
+ ref_cop.oplen -= delta;
+ delta -= delta * ref_cop.ref_sign;
+ } else { /*** rewind the whole ***/
+ ref_cop.oplen += avail_oplen;
+ delta += avail_oplen * ref_cop.ref_sign;
+ }
+ } else {
+ ri--;
+ /** pick the previous as used up **/
+ ref_cop = refOp[ri-1];
+ ref_cop.oplen =0;
+ }
+ } else { /** extending the reference **/
+ SetCigOp(&ref_cop,'=',ref_cop.oplen - delta);
+ delta = 0;
+ }
+ ref_pos -= delta;
+ }
+ if(ref_cop.oplen == 0){ /*** advance the reference ***/
+ ref_cop = refOp[ri++];
+ if(ref_cop.oplen == 0) { /** extending beyond the reference **/
+ SetCigOp(&ref_cop,'=',1000);
+ }
+ assert(ref_cop.oplen > 0 );
+ }
+ if(delta > 0){ /*** skip refOps ***/
+ ref_pos += delta; /** may need to back up **/
+ if(delta >= ref_cop.oplen){ /** full **/
+ delta -= ref_cop.oplen * ref_cop.ref_sign;
+ ref_cop.oplen = 0;
+ } else { /** partial **/
+ ref_cop.oplen -= delta;
+ delta -= delta * ref_cop.ref_sign;
+ }
+ ref_pos -= delta; /** if something left - restore ***/
+ continue;
+ }
+ /*** seq and ref should be synchronized here **/
+ assert(delta == 0);
+ if(seq_cop.oplen == 0){ /*** advance sequence ***/
+ if(seq_pos < seq_len){
+ seq_cop = seqOp[si++];
+ assert(seq_cop.oplen > 0 );
+ seq_pos += seq_cop.oplen * seq_cop.seq_sign;
+ } else {
+ done=true;
+ }
+ }
+ if(!done){
+ int seq_seq_step = seq_cop.oplen * seq_cop.seq_sign; /** sequence movement**/
+ int seq_ref_step = seq_cop.oplen * seq_cop.ref_sign; /** influence of sequence movement on intermediate reference **/
+ int ref_seq_step = ref_cop.oplen * ref_cop.seq_sign; /** movement of the intermediate reference ***/
+ int ref_ref_step = ref_cop.oplen * ref_cop.ref_sign; /** influence of the intermediate reference movement on final reference ***/
+ assert( ref_ref_step >= 0); /** no B in the reference **/
+ if( seq_ref_step <= 0){ /** BSIPH in the sequence against anything ***/
+ MACRO_BUILD_CIGAR( seq_cop.op, seq_cop.oplen );
+ seq_cop.oplen = 0;
+ delta = seq_ref_step; /** if negative - will force rewind next cycle **/
+ } else if(ref_ref_step <= 0){ /** MX=DN against SIPH in the reference***/
+ if(ref_seq_step == 0){ /** MX=DN against PH **/
+ MACRO_BUILD_CIGAR( ref_cop.op,ref_cop.oplen);
+ ref_cop.oplen = 0;
+ } else {
+ int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+ if(seq_seq_step == 0){ /** DN agains SI **/
+ MACRO_BUILD_CIGAR('P',min_len);
+ } else { /** MX= agains SI ***/
+ MACRO_BUILD_CIGAR( ref_cop.op,min_len);
+ }
+ seq_cop.oplen -= min_len;
+ ref_cop.oplen -= min_len;
+ }
+ } else { /*MX=DN against MX=DN*/
+ int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+ if(seq_seq_step == 0){ /* DN against MX=DN */
+ if(ref_seq_step == 0){ /** padding DN against DN **/
+ MACRO_BUILD_CIGAR('P',min_len);
+ ref_cop.oplen -= min_len;
+ seq_cop.oplen -= min_len;
+ } else { /* DN against MX= **/
+ MACRO_BUILD_CIGAR(seq_cop.op,min_len);
+ seq_cop.oplen -= min_len;
+ }
+ } else if (ref_cop.seq_sign == 0){ /* MX= against DN - always wins */
+ MACRO_BUILD_CIGAR(ref_cop.op,min_len);
+ ref_cop.oplen -= min_len;
+ } else { /** MX= against MX= ***/
+ MACRO_BUILD_CIGAR(merge_M_type_ops(seq_cop.op,ref_cop.op),min_len);
+ ref_cop.oplen -= min_len;
+ seq_cop.oplen -= min_len;
+ }
+ ref_pos += min_len;
+ }
+ }
+ }
+ return ciglen;
+}
- memset(&g_out_writer, 0, sizeof(g_out_writer));
- KOutHandlerSetStdOut();
- KStsHandlerSetStdErr();
- KLogHandlerSetStdErr();
- ( void ) KDbgHandlerSetStdErr();
- if( (rc = ArgsMakeAndHandle(&args, argc, argv, 1, DumpArgs, sizeof(DumpArgs)/sizeof(DumpArgs[0]))) == 0 ) {
- SParam params;
- uint32_t pcount, count[sizeof(DumpArgs)/sizeof(DumpArgs[0])];
+static rc_t DumpCGSAM( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn, int options,
+ int which, int64_t *rows, SCol const *const ids )
+{
+ if ( which == evidence_interval_IDS )
+ {
+ rc_t rc = 0;
+ unsigned i;
+
+ for ( i = 0; i < ids->len; ++i )
+ {
+ int64_t const rowInterval = ids->base.i64[ i ];
- memset(¶ms, 0, sizeof(params));
- if( (rc = ArgsParamCount(args, &pcount)) != 0 || pcount < 1 ) {
- errmsg = "";
- rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
- MiniUsage(args);
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_seq_id].name, &count[earg_seq_id])) != 0 ) {
- errmsg = DumpArgs[earg_seq_id].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_unaligned].name, &count[earg_unaligned])) != 0 ) {
- errmsg = DumpArgs[earg_unaligned].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_cigartype].name, &count[earg_cigartype])) != 0 ) {
- errmsg = DumpArgs[earg_cigartype].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_header].name, &count[earg_header])) != 0 ) {
- errmsg = DumpArgs[earg_header].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_region].name, &count[earg_region])) != 0 ) {
- errmsg = DumpArgs[earg_region].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_distance].name, &count[earg_distance])) != 0 ) {
- errmsg = DumpArgs[earg_distance].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_identicalbases].name, &count[earg_identicalbases])) != 0 ) {
- errmsg = DumpArgs[earg_identicalbases].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_gzip].name, &count[earg_gzip])) != 0 ) {
- errmsg = DumpArgs[earg_gzip].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_bzip2].name, &count[earg_bzip2])) != 0 ) {
- errmsg = DumpArgs[earg_bzip2].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_qname].name, &count[earg_qname])) != 0 ) {
- errmsg = DumpArgs[earg_qname].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_noheader].name, &count[earg_noheader])) != 0 ) {
- errmsg = DumpArgs[earg_noheader].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_fastq].name, &count[earg_fastq])) != 0 ) {
- errmsg = DumpArgs[earg_fastq].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_fasta].name, &count[earg_fasta])) != 0 ) {
- errmsg = DumpArgs[earg_fasta].name;
- } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_prefix].name, &count[earg_prefix])) != 0 || count[earg_prefix] > 1) {
- rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
- errmsg = DumpArgs[earg_prefix].name;
- } else if( count[earg_prefix] > 0 && (rc = ArgsOptionValue(args, DumpArgs[earg_prefix].name, 0, ¶ms.name_prefix)) != 0 ) {
- errmsg = DumpArgs[earg_prefix].name;
- } else {
- uint32_t p, i;
- const char* arg;
-
- for(p = 0; rc == 0 && p < count[earg_region]; p++) {
- /* name[:[from][-[to]]] 1-based!!! */
- TAlignedRegion r;
-
- errmsg = DumpArgs[earg_region].name;
- if( (rc = ArgsOptionValue(args, DumpArgs[earg_region].name, p, &arg)) == 0 ) {
- const char* c = strchr(arg, ':');
- if( c == NULL ) {
- strncpy(r.name, arg, sizeof(r.name));
- r.rq = 0;
- } else {
- INSDC_coord_zero* v;
-
- r.r[0].from = (c - arg) > sizeof(r.name) ? sizeof(r.name) : c - arg;
- strncpy(r.name, arg, r.r[0].from);
- r.name[r.r[0].from] = '\0';
- r.rq = 1;
- r.r[0].from = -1;
- r.r[0].to = -1;
- r.max_to = 0;
- v = &r.r[0].from;
- while(rc == 0 && *++c != '\0') {
- if( *c == '-' ) {
- v = &r.r[0].to;
- } else if( *c == '+' ) {
- if( *v != 0 ) {
- rc = RC(rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange);
+ rc = Cursor_Read( &ctx->evi, rowInterval, alg_REGION_FILTER, ~(0u) );
+ if ( rc == 0 )
+ {
+ if ( AlignRegionFilter( ctx->evi.cols ) )
+ {
+ rc = Cursor_ReadAlign( &ctx->evi.curs, rowInterval, ctx->evi.cols, 0 );
+ if ( rc == 0 )
+ {
+ unsigned const evidence = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].len;
+ if ( evidence != 0 )
+ {
+ INSDC_coord_len const *const refLen = ctx->evi.cols[ alg_READ_LEN ].base.coord_len;
+ INSDC_coord_len const *const cigLen = ctx->evi.cols[ alg_CIGAR_LEN ].base.coord_len;
+ unsigned const ploids = ctx->evi.cols[ alg_CIGAR_LEN ].len;
+ unsigned const totalIntervalReadLen = ctx->evi.cols[ alg_READ ].len;
+ CigOps refCigOps_stack[1024];
+ CigOps *refCigOps_heap=NULL;
+ CigOps *refCigOps;
+
+ if( totalIntervalReadLen > 1000){
+ refCigOps=refCigOps_heap = malloc( sizeof( refCigOps[ 0 ] ) * (totalIntervalReadLen+ploids) );
+ } else {
+ refCigOps=refCigOps_stack;
+ }
+
+ if ( refCigOps != NULL )
+ {
+ unsigned j;
+ unsigned start;
+ unsigned cigop_starts[256];
+
+ assert(ploids < 256);
+
+ for ( start = j = 0, cigop_starts[0]=0; j < ploids; ++j )
+ {
+ unsigned len = cigLen[ j ];
+ cigop_starts[j+1] = cigop_starts[j] + ExplodeCIGAR( refCigOps + cigop_starts[j], refLen[ j ],
+ ctx->evi.cols[ alg_CIGAR ].base.str + start, len );
+ start += len;
}
- } else if( !isdigit(*c) ) {
- rc = RC(rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange);
- } else {
- if( *v == -1 ) {
- *v = 0;
+
+ for ( j = 0; j < evidence; ++j )
+ {
+ int64_t const rowAlign = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].base.i64[ j ];
+
+ rc = Cursor_ReadAlign( &ctx->eva.curs, rowAlign, ctx->eva.cols, 0 );
+ if ( rc == 0 )
+ {
+ if(param->cg_style != 0)
+ rc = GenerateCGData( ctx->eva.cols, param->cg_style );
+ if ( rc == 0 )
+ {
+ int const ploidy = ctx->eva.cols[ alg_REF_PLOIDY ].base.u32[ 0 ];
+ int const readLen = ctx->eva.cols[ alg_READ ].len;
+ INSDC_coord_zero refPos = ctx->eva.cols[ alg_REF_POS ].base.coord0[ 0 ];
+ CigOps op[ 36 ];
+ char cigbuf[ CG_CIGAR_STRING_MAX ];
+
+ memset( cigbuf, 0, CG_CIGAR_STRING_MAX );
+ ExplodeCIGAR( op, readLen, ctx->eva.cols[ alg_CIGAR ].base.str,
+ ctx->eva.cols[ alg_CIGAR ].len );
+ ctx->eva.cols[ alg_CIGAR ].len = CombineCIGAR( cigbuf, op, readLen, refPos,
+ refCigOps + cigop_starts[ ploidy - 1 ], refLen[ ploidy - 1 ] );
+ ctx->eva.cols[ alg_CIGAR ].base.str = cigbuf;
+ ctx->eva.cols[ alg_REF_POS ].base.v = &refPos;
+ refPos += ctx->evi.cols[ alg_REF_POS ].base.coord0[ 0 ] ;
+ if(refPos < 0){
+ ReferenceObj const *r = NULL;
+ rc = ReferenceList_Find( gRefList, &r,
+ ctx->evi.cols[ alg_REF_NAME ].base.str,
+ ctx->evi.cols[ alg_REF_NAME ].len );
+ if(rc == 0){
+ bool circular=false;
+ rc=ReferenceObj_Circular(r, &circular);
+ if(rc == 0 && circular){
+ INSDC_coord_len len;
+ rc=ReferenceObj_SeqLength(r,&len);
+ if(rc == 0)
+ refPos += len;
+ }
+ ReferenceObj_Release(r);
+ }
+ }
+ DumpAlignedSAM(ctx, &ctx->eva, rowAlign, ctx->readGroup, 1);
+ ++*rows;
+ }
+ else
+ break;
+ }
+ else
+ break;
}
- *v = *v * 10 + (*c - '0');
+ if(refCigOps_heap) free( refCigOps_heap );
}
- }
- /* convert to 0-based offset */
- if( r.r[0].from > 0 ) {
- r.r[0].from--;
- } else if( r.r[0].to > 0 ) {
- r.r[0].from = 0;
- }
- if(r.r[0].to > 0 ) {
- r.r[0].to--;
- } else if( r.r[0].from >= 0 && r.r[0].to < 0 ) {
- r.r[0].to = r.r[0].from;
- }
- if( r.r[0].from < 0 && r.r[0].to < 0 ) {
- r.rq = 0;
- } else if( r.r[0].from > r.r[0].to ) {
- uint64_t x = r.r[0].from;
- r.r[0].from = r.r[0].to;
- r.r[0].to = x;
+ else
+ rc = RC( rcExe, rcTable, rcReading, rcMemory, rcExhausted );
}
}
- if( rc == 0 ) {
- TAlignedRegion* x = NULL;
- for(i = 0; i < params.region_qty; i++) {
- if( strcmp(params.region[i].name, r.name) == 0 ) {
- x = ¶ms.region[i];
- break;
- }
- }
- if( x == NULL ) {
- if( (x = realloc(params.region, sizeof(*params.region) * ++params.region_qty)) == NULL ) {
- rc = RC(rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted);
- } else {
- params.region = x;
- memcpy(¶ms.region[params.region_qty - 1], &r, sizeof(r));
- }
- } else {
- int32_t k = x->rq;
- for(i = 0; i < x->rq; i++) {
- /* sort by from asc */
- if( r.r[0].from <= x->r[i].from ) {
- k = i;
- break;
+ }
+ }
+ else
+ break;
+ rc = rc ? rc : Quitting();
+ if ( rc != 0 )
+ break;
+ }
+ return rc;
+ }
+ return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
+}
+
+
+static rc_t ForEachAlignedRegion( SAM_dump_ctx_t *const ctx, enum e_IDS_opts const Options,
+ rc_t ( *user_func )( SAM_dump_ctx_t *ctx, TAlignedRegion const *rgn, int options, int which, int64_t *rows, SCol const *IDS ) )
+{
+ SCol cols[] =
+ {
+ { "MAX_SEQ_LEN", 0, { NULL }, 0, false },
+ { "OVERLAP_REF_POS", 0, { NULL }, 0, true },
+ { "PRIMARY_ALIGNMENT_IDS", 0, { NULL }, 0, false },
+ { "SECONDARY_ALIGNMENT_IDS", 0, { NULL }, 0, true },
+ { "EVIDENCE_INTERVAL_IDS", 0, { NULL }, 0, true },
+ { NULL, 0, { NULL }, 0, false }
+ };
+ enum eref_col
+ {
+ ref_MAX_SEQ_LEN = 0,
+ ref_OVERLAP_REF_LEN,
+ ref_PRIMARY_ALIGNMENT_IDS,
+ ref_SECONDARY_ALIGNMENT_IDS,
+ ref_EVIDENCE_INTERVAL_IDS
+ };
+
+ KIndex const *iname = NULL;
+ int64_t rows = 0;
+ rc_t rc = 0;
+ int options = Options & 7;
+
+ if ( Options & evidence_alignment_IDS )
+ options |= evidence_interval_IDS;
+
+ if ( ( options & primary_IDS ) == 0 )
+ cols[ ref_PRIMARY_ALIGNMENT_IDS ].name = "";
+ if ( ( options & secondary_IDS ) == 0 )
+ cols[ ref_SECONDARY_ALIGNMENT_IDS ].name = "";
+ if ( ( options & evidence_interval_IDS ) == 0 )
+ cols[ ref_EVIDENCE_INTERVAL_IDS ].name = "";
+
+ ctx->ref.cols = cols;
+
+ rc = VTableOpenIndexRead( ctx->ref.tbl.vtbl, &iname, "i_name" );
+ if ( rc == 0 )
+ {
+ rc = Cursor_Open( &ctx->ref.tbl, &ctx->ref.curs, ctx->ref.cols, NULL );
+ if ( rc == 0 )
+ {
+ int64_t rowid = 1;
+ uint64_t count = 0;
+ char refname[ 1024 ];
+ size_t sz;
+
+ if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS ].idx == 0 )
+ options &= ~primary_IDS;
+ if ( ctx->ref.cols[ ref_SECONDARY_ALIGNMENT_IDS ].idx == 0 )
+ options &= ~secondary_IDS;
+ if ( ctx->ref.cols[ ref_EVIDENCE_INTERVAL_IDS ].idx == 0 )
+ options &= ~evidence_interval_IDS;
+
+ /* new: if we have a list of regions, reset the their print-flag */
+ if ( param->region_qty > 0 )
+ {
+ unsigned r;
+ for ( r = 0; r < param->region_qty; ++r )
+ {
+ param->region[ r ].printed = 0;
+ }
+ }
+
+ while ( ( rc = KIndexProjectText(iname, rowid + count, &rowid, &count, refname, sizeof( refname ), &sz ) ) == 0 )
+ {
+ bool include;
+ unsigned r;
+ unsigned max_to = UINT_MAX;
+ unsigned min_from = 0;
+
+ for ( include = false, r = 0; r < param->region_qty; ++r )
+ {
+ if ( sz == strlen( param->region[ r ].name ) &&
+ memcmp( param->region[ r ].name, refname, sz ) == 0 )
+ {
+ include = true;
+ max_to = param->region[ r ].max_to;
+ min_from = param->region[ r ].min_from;
+ param->region[ r ].printed++; /* new: mark a region as printed */
+ break;
+ }
+ }
+
+ if ( param->region_qty == 0 || include )
+ {
+ int64_t const endrow_exclusive = rowid + count;
+ unsigned m;
+ unsigned k;
+
+ for ( k = 0, m = 1; rc == 0 && k < 3; ++k, m <<= 1 )
+ {
+ if ( m & options )
+ {
+ unsigned lookback = 0;
+ int64_t row;
+ int32_t row_start_offset;
+ unsigned pos;
+ unsigned const maxseqlen = 5000; /***** TODO: this code is to be rewritten anyway ****/
+
+ if ( param->region_qty )
+ {
+ if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].idx )
+ {
+ rc = Cursor_Read( &ctx->ref, rowid, 0, ~(0u) );
+ if ( rc != 0 )
+ break;
+ if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].len > k )
+ {
+ unsigned const overlap = ctx->ref.cols[ ref_OVERLAP_REF_LEN ].base.coord0[ k ];
+
+ if ( overlap != 0 )
+ {
+
+ assert( overlap < rowid * maxseqlen );
+ lookback = ( rowid - ( overlap / maxseqlen ) );
+ }
+ }
}
+ else
+ lookback = 1;
}
- if( k >= 0 ) {
- /* insert at k position */
- if( x->rq >= sizeof(x->r) / sizeof(x->r[0]) ) {
- rc = RC(rcExe, rcArgv, rcProcessing, rcBuffer, rcInsufficient);
- } else {
- memmove(&x->r[k + 1], &x->r[k], sizeof(x->r[0]) * (x->rq - k));
- x->r[k].from = r.r[0].from;
- x->r[k].to = r.r[0].to;
- x->rq++;
+ row_start_offset = min_from/maxseqlen - lookback;
+ if(row_start_offset < 0) row_start_offset=0;
+
+
+ for ( pos = row_start_offset*maxseqlen, row = rowid + row_start_offset; rc == 0 && row < endrow_exclusive; ++row )
+ {
+ if ( row < 1 )
+ {
+ row = 0;
+ continue;
}
+ rc = Cursor_Read( &ctx->ref, row, 0, ~(0u) );
+ if ( rc != 0 )
+ break;
+ if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ].len > 0 )
+ rc = user_func( ctx, ¶m->region[r], Options, m, &rows,
+ &ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ] );
+ pos += ctx->ref.cols[ ref_MAX_SEQ_LEN ].base.u32[ 0 ];
+ if ( pos >= max_to )
+ break;
+ if ( param->test_rows != 0 && rows > param->test_rows )
+ break;
}
}
}
}
- }
- for(p = 0; p < params.region_qty; p++) {
- SAM_DUMP_DBG(2, ("filter by %s\n", params.region[p].name));
- if( params.region[p].rq == 0 ) {
- params.region[p].rq = 1;
- params.region[p].r[0].from = 0;
- params.region[p].r[0].to = 0x7FFFFFFF;
- }
- for(i = 0; i < params.region[p].rq; i++) {
- SAM_DUMP_DBG(2, (" range: [%u:%u]\n", params.region[p].r[i].from, params.region[p].r[i].to));
- if( params.region[p].max_to < params.region[p].r[i].to ) {
- params.region[p].max_to = params.region[p].r[i].to;
+ if ( param->test_rows != 0 && rows > param->test_rows )
+ break;
+ if ( rc != 0 )
+ break;
+ } /* while */
+
+ /* new: walk the list of regions and report what was NOT printed ( found ) ... */
+ if ( param->region_qty > 0 && GetRCState( rc ) != rcCanceled )
+ {
+ unsigned r;
+ for ( r = 0; r < param->region_qty; ++r )
+ {
+ if ( param->region[ r ].printed == 0 )
+ {
+ (void)PLOGMSG( klogWarn, ( klogWarn, "reference >$(a)< not found", "a=%s", param->region[ r ].name ) );
}
}
}
- for(p = 0; rc == 0 && p < count[earg_distance]; p++) {
- /* from[-to] | [from]-to | unknown */
- errmsg = DumpArgs[earg_distance].name;
- if( (rc = ArgsOptionValue(args, DumpArgs[earg_distance].name, p, &arg)) != 0 ) {
- } else if( strcasecmp(arg, "unknown") == 0 ) {
- params.mp_dist_unknown = true;
- } else {
- TMatepairDistance* p;
- if( (p = realloc(params.mp_dist, sizeof(*params.mp_dist) * ++params.mp_dist_qty)) == NULL ) {
- rc = RC(rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted);
- } else {
- uint64_t* v;
- params.mp_dist = p;
- p = ¶ms.mp_dist[params.mp_dist_qty - 1];
- p->from = 0;
- p->to = 0;
- v = &p->from;
- while(rc == 0 && *arg != '\0') {
- if( *arg == '-' ) {
- v = &p->to;
- } else if( *arg == '+' ) {
- if( *v != 0 ) {
- rc = RC(rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange);
- }
- } else if( !isdigit(*arg) ) {
- rc = RC(rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange);
- } else {
- *v = *v * 10 + (*arg - '0');
- }
- arg++;
- }
- if( p->from > p->to && p->to != 0 ) {
- uint64_t x = p->from;
- p->from = p->to;
- p->to = x;
+
+ if ( GetRCObject( rc ) == rcId && GetRCState( rc ) == rcNotFound )
+ {
+ rc = 0;
+ }
+
+ }
+ }
+ Cursor_Close( &ctx->ref.curs );
+ KIndexRelease( iname );
+
+ return rc;
+}
+
+
+static rc_t DumpAlignedTable( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+ bool const primary, int const cg_style, unsigned *const rcount )
+{
+ unsigned i;
+ int64_t start;
+ uint64_t count;
+ rc_t rc = VCursorIdRange( ds->curs.vcurs, 0, &start, &count );
+
+ if ( rc != 0 )
+ return rc;
+ for ( i = 0; i != (unsigned)count; ++i )
+ {
+ if ( DumpAlignedRow(ctx, ds, start + i, primary, cg_style, &rc ) )
+ ++*rcount;
+ if ( rc != 0 || ( rc = Quitting() ) != 0 )
+ return rc;
+ if ( param->test_rows && *rcount > param->test_rows )
+ break;
+ }
+ return 0;
+}
+
+
+static rc_t DumpUnsorted( SAM_dump_ctx_t *const ctx )
+{
+ rc_t rc = 0;
+ unsigned rcount;
+
+ if ( rc == 0 && param->cg_evidence )
+ {
+ SAM_DUMP_DBG( 2, ( "%s EVIDENCE_INTERVAL\n", ctx->accession ) );
+ rcount = 0;
+ rc = DumpAlignedTable( ctx, &ctx->evi, false, 0, &rcount );
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) allele sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ if ( rc == 0 && param->cg_ev_dnb )
+ {
+ SAM_DUMP_DBG( 2, ( "%s EVIDENCE_ALIGNMENT\n", ctx->accession ) );
+ rcount = 0;
+ rc = DumpAlignedTable( ctx, &ctx->eva, false, param->cg_style, &rcount );
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) support sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ if ( rc == 0 && ctx->pri.curs.vcurs )
+ {
+ SAM_DUMP_DBG( 2, ( "%s PRIMARY_ALIGNMENT\n", ctx->accession ) );
+ rcount = 0;
+ rc = DumpAlignedTable( ctx, &ctx->pri, true, param->cg_style, &rcount );
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) primary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ if ( rc == 0 && ctx->sec.curs.vcurs )
+ {
+ SAM_DUMP_DBG( 2, ( "%s SECONDARY_ALIGNMENT\n", ctx->accession ) );
+ rcount = 0;
+ rc = DumpAlignedTable( ctx, &ctx->sec, false, param->cg_style, &rcount );
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) secondary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ return rc;
+}
+
+
+static rc_t DumpUnaligned( SAM_dump_ctx_t *const ctx, bool const aligned )
+{
+ rc_t rc = 0;
+ int64_t start = 0;
+ uint64_t count = 0;
+
+ rc = VCursorIdRange( ctx->seq.curs.vcurs, 0, &start, &count );
+ if ( rc == 0 )
+ {
+ uint64_t rcount = 0;
+ if ( param->test_rows != 0 && count > param->test_rows )
+ {
+ count = param->test_rows;
+ }
+ SAM_DUMP_DBG( 2, ( "%s SEQUENCE table range from %ld qty %lu\n", ctx->accession, start, count ) );
+ while ( count > 0 && rc == 0 )
+ {
+ uint32_t i;
+
+ if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx == 0)
+ {
+ rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+ }
+ else
+ {
+ /* avoid reading whole sequence cursor data unnecessarily */
+ rc = Cursor_Read( &ctx->seq, start, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+ if ( rc == 0 )
+ {
+ /* find if its completely unaligned */
+ int64_t min_prim_id = 0;
+ bool has_unaligned = false;
+ for ( i = 0; rc == 0 && i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+ {
+ int64_t x = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ];
+ has_unaligned |= x == 0;
+ if ( ( min_prim_id == 0 && x != 0 ) || min_prim_id < x )
+ {
+ min_prim_id = x;
}
- if( p->from == 0 && p->to == 0 ) {
- params.mp_dist_qty--;
+ }
+ if ( min_prim_id == 0 )
+ {
+ /* fully unaligned spot */
+ rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+ }
+ else if ( has_unaligned && !param->unaligned_spots )
+ {
+ if ( rc == 0 )
+ {
+#if USE_MATE_CACHE
+ uint64_t val;
+ rc = Cache_Get( &ctx->pri.curs, min_prim_id, &val );
+ if ( rc == 0 )
+ {
+ ctx->pri.cols[ alg_REF_POS ].len = 0;
+ Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+ ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &start;
+ ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+ memcpy( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+ memcpy( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+ memcpy( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+ }
+ else if ( !( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcItem ) )
+ {
+ break;
+ }
+ else
+ {
+#endif /* USE_MATE_CACHE */
+ rc = Cursor_ReadAlign( &ctx->pri.curs, min_prim_id, ctx->pri.cols, alg_MATE_ALIGN_ID );
+#if USE_MATE_CACHE
+ }
+#endif /* USE_MATE_CACHE */
+ rc = rc ? rc : DumpUnalignedReads( ctx, ctx->pri.cols, min_prim_id, &rcount );
}
}
+ } else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+ {
+ rc = 0;
}
}
- for(p = 0; p < params.mp_dist_qty; p++) {
- if( params.mp_dist_unknown ) {
- SAM_DUMP_DBG(2, ("distance 'unknown'\n"));
- }
- SAM_DUMP_DBG(2, ("distance [%lu-%lu]\n", params.mp_dist[p].from, params.mp_dist[p].to));
- }
- params.use_seqid = (count[earg_seq_id] > 0) || (pcount > 1);
- params.unaligned = count[earg_unaligned] > 0;
- params.long_cigar = count[earg_cigartype] > 0;
- params.reheader = count[earg_header] > 0;
- params.hide_identical = count[earg_identicalbases] > 0;
- params.fasta = count[earg_fasta] > 0;
- params.fastq = count[earg_fastq] > 0;
- params.spot_group_in_name = (count[earg_qname] > 0) || (pcount > 1);
- params.noheader = (count[earg_noheader] > 0) || params.fasta || params.fastq;
+ start++;
+ count--;
+ rc = rc ? rc : Quitting();
+ }
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) unaligned sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ return rc;
+}
+
+#if USE_MATE_CACHE
+static rc_t FlushUnalignedRead_cb (uint64_t key, bool value,void *user_data)
+{
+ rc_t rc;
+ int64_t spot_id = (int64_t) key;
+ int64_t aligned_mate_id = (int64_t) value;
+ SAM_dump_ctx_t *const ctx = user_data;
+ rc = Cursor_Read( &ctx->seq, spot_id, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+ if ( rc == 0 ) {
+ uint64_t rcount;
+ uint64_t val;
+ assert(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len == 2);
+ if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0]==0){
+ aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1];
+ assert(aligned_mate_id != 0);
+ } else if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1] == 0){
+ aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0];
+ assert(aligned_mate_id != 0);
+ } else {
+ assert(0);
+ }
+ rc = Cache_Get( &ctx->pri.curs, aligned_mate_id, &val );
+ if ( rc == 0 ) {
+ ctx->pri.cols[ alg_REF_POS ].len = 0;
+ Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+ ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &spot_id;
+ ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+ memcpy( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+ memcpy( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+ memcpy( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+ rc =DumpUnalignedReads( ctx, ctx->pri.cols, aligned_mate_id, &rcount );
+ }
+ }
+ return rc;
+}
+static rc_t FlushUnaligned( SAM_dump_ctx_t *const ctx, const SCursCache * cache )
+{
+ return KVectorVisitBool (cache->cache_unaligned_mate, false, FlushUnalignedRead_cb, ctx );
+}
+#endif
+
+static rc_t DumpHeader( SAM_dump_ctx_t const *ctx )
+{
+ bool reheader = param->reheader;
+ rc_t rc = 0;
+
+ if ( !reheader )
+ {
+ if ( ctx->db )
+ {
+ /* grab header from db meta node */
+ KMetadata const *meta;
- if( rc == 0 ) {
- rc = BufferedWriterMake(count[earg_gzip] > 0, count[earg_bzip2] > 0);
- }
- for(p = 0; rc == 0 && p < pcount; p++) {
- if( (rc = ArgsParamValue(args, p, ¶ms.path)) == 0 ) {
- int i;
- params.accession = params.path;
- /* remove trailing /\ */
- for(i = strlen(params.path) - 1; i >= 0; i--) {
- if( params.path[i] != '/' && params.path[i] != '\\' ) {
+ rc = VDatabaseOpenMetadataRead( ctx->db, &meta );
+ if ( rc == 0 )
+ {
+ KMDataNode const *node;
+
+ rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+ KMetadataRelease( meta );
+
+ if ( rc == 0 )
+ {
+ size_t offset = 0;
+
+ for ( offset = 0; ; )
+ {
+ size_t remain;
+ size_t nread;
+ char buffer[ 4096 ];
+
+ rc = KMDataNodeRead( node, offset, buffer, sizeof(buffer), &nread, &remain );
+ if ( rc != 0 )
break;
- }
- ((char*)params.path)[i] = '\0';
- }
- /* use last path element as accession */
- for(i = strlen(params.path) - 1; i >= 0; i--) {
- if( params.path[i] == '/' || params.path[i] == '\\' ) {
- params.accession = ¶ms.path[i + 1];
+ BufferedWriter( NULL, buffer, nread, NULL );
+ if ( remain == 0 )
+ {
+ if ( buffer[nread - 1] != '\n' )
+ {
+ buffer[ 0 ] = '\n';
+ BufferedWriter( NULL, buffer, 1, NULL );
+ }
break;
}
+ offset += nread;
}
- rc = Dump(p, pcount > 1, ¶ms);
+ KMDataNodeRelease(node);
+ }
+ else if ( GetRCState( rc ) == rcNotFound )
+ {
+ reheader = true;
+ rc = 0;
}
}
- BufferedWriterRelease();
+ }
+ else
+ {
+ reheader = true;
+ rc = 0;
+ }
+ }
+
+ if ( rc == 0 && reheader )
+ {
+ KOutMsg( "@HD\tVN:1.3\n" );
+ if ( gRefList )
+ rc = RefSeqPrint();
+ if ( ctx->readGroup )
+ ReadGroup_print( ctx->readGroup );
+ if ( ctx->seq.tbl.vtbl )
+ rc = DumpReadGroups( &ctx->seq.tbl );
+ }
+ if ( rc == 0 && param->comments )
+ {
+ unsigned i;
+
+ for( i = 0; param->comments[ i ]; ++i )
+ KOutMsg( "@CO\t%s\n", param->comments[ i ] );
+ }
+ return rc;
+}
+
+
+static rc_t DumpDB( SAM_dump_ctx_t *const ctx )
+{
+ rc_t rc = 0;
+
+ if ( ctx->ref.tbl.vtbl != NULL )
+ rc = ReferenceList_MakeTable( &gRefList, ctx->ref.tbl.vtbl, 0, CURSOR_CACHE, NULL, 0 );
+ if ( !param->noheader )
+ rc = DumpHeader( ctx );
+ if ( rc == 0 )
+ {
+ if ( param->region_qty ){
+ rc = ForEachAlignedRegion( ctx
+ , ( param->primaries ? primary_IDS : 0 )
+ | ( param->secondaries ? secondary_IDS : 0 )
+ | ( param->cg_evidence ? evidence_interval_IDS : 0 )
+ | ( param->cg_ev_dnb ? evidence_alignment_IDS : 0 )
+ , DumpAlignedRowList_cb );
+#if USE_MATE_CACHE
+ if ( rc == 0 && param->unaligned ){
+ rc = FlushUnaligned( ctx,ctx->pri.curs.cache);
+ }
+#endif
+ }
+ if ( param->cg_sam )
+ rc = ForEachAlignedRegion( ctx, evidence_interval_IDS, DumpCGSAM );
+
+ if ( param->region_qty == 0 )
+ {
+ rc = DumpUnsorted( ctx );
+ if ( rc == 0 && param->unaligned )
+ rc = DumpUnaligned( ctx, ctx->pri.tbl.vtbl != NULL );
+ }
+ }
+ ReferenceList_Release( gRefList );
+ return rc;
+}
+
+
+static rc_t DumpTable( SAM_dump_ctx_t *ctx )
+{
+ rc_t rc = 0;
+
+ if ( !param->noheader )
+ rc = DumpHeader( ctx );
+ if ( rc == 0 )
+ rc = DumpUnaligned( ctx, false );
+ return rc;
+}
+
+
+static rc_t ProcessTable( VDBManager const *mgr, char const fullPath[],
+ char const accession[], char const readGroup[] )
+{
+ VTable const *tbl;
+ rc_t rc = VDBManagerOpenTableRead( mgr, &tbl, 0, fullPath );
+
+ if ( rc != 0 )
+ {
+ VSchema *schema;
+
+ rc = VDBManagerMakeSRASchema( mgr, &schema );
+ if ( rc == 0 )
+ {
+ rc = VDBManagerOpenTableRead( mgr, &tbl, schema, fullPath );
+ VSchemaRelease( schema );
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ SAM_dump_ctx_t ctx;
+ SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+
+ memset( &ctx, 0, sizeof( ctx ) );
+
+ ctx.fullPath = fullPath;
+ ctx.accession = accession;
+ ctx.readGroup = readGroup;
+
+ DATASOURCE_INIT( ctx.seq, accession );
+ ctx.seq.tbl.vtbl = tbl;
+ ctx.seq.type = edstt_Sequence;
+
+ ReportResetTable( fullPath, tbl );
+
+ ctx.seq.cols = seq_cols;
+ memcpy( ctx.seq.cols, gSeqCol, sizeof( gSeqCol ) );
+ rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+ if ( rc == 0 ) {
+ rc = DumpTable( &ctx );
+ Cursor_Close(&ctx.seq.curs);
+ }
+ VTableRelease( tbl );
+ }
+ return rc;
+}
+
+
+static void SetupColumns( DataSource *ds, enum eDSTableType type )
+{
+ memcpy( ds->cols, g_alg_col_tmpl, sizeof( g_alg_col_tmpl ) );
+
+ ds->type = type;
+ if ( param->use_seqid )
+ ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_SEQ_ID";
+ else
+ ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_NAME";
+
+ if ( param->fasta || param->fastq )
+ ds->cols[ alg_READ ].name = "RAW_READ";
+ else if ( param->hide_identical )
+ ds->cols[ alg_READ ].name = "MISMATCH_READ";
+ else
+ ds->cols[ alg_READ ].name = "READ";
+
+ if ( param->long_cigar )
+ {
+ ds->cols[ alg_CIGAR ].name = "CIGAR_LONG";
+ ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_LONG_LEN";
+ }
+ else
+ {
+ ds->cols[ alg_CIGAR ].name = "CIGAR_SHORT";
+ ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_SHORT_LEN";
+ }
+
+ if(param->qualQuant && param->qualQuantSingle){ /** we don't really need quality ***/
+ ds->cols[ alg_SAM_QUALITY ].name = "";
+ }
+
+ switch ( type )
+ {
+ case edstt_EvidenceInterval:
+
+ ds->cols[ alg_SEQ_SPOT_ID ].name = "";
+ ds->cols[ alg_SEQ_NAME ].name = "";
+ ds->cols[ alg_SAM_QUALITY ].name = "";
+ ds->cols[ alg_SPOT_GROUP ].name = "";
+ ds->cols[ alg_SEQ_SPOT_GROUP].name = "";
+ ds->cols[ alg_SEQ_READ_ID ].name = "";
+ ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+ ds->cols[ alg_MATE_REF_ID ].name = "";
+ ds->cols[ alg_MATE_REF_NAME ].name = "";
+ ds->cols[ alg_SAM_FLAGS ].name = "";
+ ds->cols[ alg_MATE_REF_POS ].name = "";
+ ds->cols[ alg_ALIGN_GROUP ].name = "";
+ ds->cols[ alg_TEMPLATE_LEN ].name = "";
+ if ( param->cg_sam || param->cg_ev_dnb )
+ ds->cols[ alg_EVIDENCE_ALIGNMENT_IDS ].name = "EVIDENCE_ALIGNMENT_IDS";
+ break;
+
+ case edstt_EvidenceAlignment:
+ ds->cols[ alg_REF_PLOIDY ].name = "REF_PLOIDY";
+ ds->cols[ alg_REF_ID ].name = "REF_ID";
+ ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+ ds->cols[ alg_MATE_REF_ID ].name = "";
+ ds->cols[ alg_MATE_REF_NAME ].name = "";
+ ds->cols[ alg_SAM_FLAGS ].name = "";
+ ds->cols[ alg_MATE_REF_POS ].name = "";
+ ds->cols[ alg_ALIGN_GROUP ].name = "";
+ ds->cols[ alg_TEMPLATE_LEN ].name = "";
+ break;
+ default:
+ break;
+ }
+}
+
+
+static rc_t ProcessDB( VDatabase const *db, char const fullPath[],
+ char const accession[], char const readGroup[] )
+{
+ char const *const refTableName = ( param->region_qty > 0
+ || param->cg_evidence
+ || param->cg_ev_dnb
+ || param->cg_sam
+ || param->reheader
+ || param->primaries
+ || param->secondaries
+ )
+ ? "REFERENCE"
+ : 0;
+ char const *const priTableName = param->primaries ? "PRIMARY_ALIGNMENT" : 0;
+ char const *const secTableName = param->secondaries ? "SECONDARY_ALIGNMENT" : 0;
+ char const *const seqTableName = ( param->unaligned || param->reheader ) ? "SEQUENCE" : 0;
+ char const *const eviTableName = ( param->cg_evidence || ( param->cg_ev_dnb & ( param->region_qty > 0 ) ) || param->cg_sam ) ? "EVIDENCE_INTERVAL" : 0;
+ char const *const evaTableName = ( param->cg_ev_dnb || param->cg_sam ) ? "EVIDENCE_ALIGNMENT" : 0;
+
+ SAM_dump_ctx_t ctx;
+ SCol align_cols[ ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) * 4 ];
+ SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+ rc_t rc = 0;
+
+ memset( &ctx, 0, sizeof( ctx ) );
+ memset( align_cols, 0, sizeof( align_cols ) );
+ memset( seq_cols, 0, sizeof( seq_cols ) );
+
+ ctx.db = db;
+ ctx.fullPath = fullPath;
+ ctx.accession = accession;
+ ctx.readGroup = readGroup;
+
+ DATASOURCE_INIT( ctx.seq, seqTableName );
+ DATASOURCE_INIT( ctx.ref, refTableName );
+ DATASOURCE_INIT( ctx.pri, priTableName );
+ DATASOURCE_INIT( ctx.sec, secTableName );
+ DATASOURCE_INIT( ctx.evi, eviTableName );
+ DATASOURCE_INIT( ctx.eva, evaTableName );
+
+ if ( ctx.seq.tbl.name )
+ {
+ rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, ctx.seq.tbl.name );
+ if ( rc == 0 )
+ {
+ ctx.seq.cols = seq_cols;
+ memcpy(seq_cols, gSeqCol, sizeof(gSeqCol));
+ rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+ }
+ }
+ ctx.pri.cols = &align_cols[ 0 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+ ctx.sec.cols = &align_cols[ 1 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+ ctx.evi.cols = &align_cols[ 2 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+ ctx.eva.cols = &align_cols[ 3 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+
+ SetupColumns( &ctx.pri, edstt_PrimaryAlignment );
+ SetupColumns( &ctx.sec, edstt_SecondaryAlignment );
+ SetupColumns( &ctx.evi, edstt_EvidenceInterval );
+ SetupColumns( &ctx.eva, edstt_EvidenceAlignment );
+
+ if ( ctx.pri.tbl.name )
+ VDatabaseOpenTableRead( db, &ctx.pri.tbl.vtbl, ctx.pri.tbl.name );
+ if ( ctx.sec.tbl.name )
+ VDatabaseOpenTableRead( db, &ctx.sec.tbl.vtbl, ctx.sec.tbl.name );
+ if ( ctx.evi.tbl.name )
+ VDatabaseOpenTableRead( db, &ctx.evi.tbl.vtbl, ctx.evi.tbl.name );
+ if ( ctx.eva.tbl.name )
+ VDatabaseOpenTableRead( db, &ctx.eva.tbl.vtbl, ctx.eva.tbl.name );
+
+ if ( ctx.pri.tbl.vtbl == NULL
+ && ctx.sec.tbl.vtbl == NULL
+ && ctx.evi.tbl.vtbl == NULL
+ && ctx.eva.tbl.vtbl == NULL )
+ {
+ memset (&ctx.pri, 0, sizeof( ctx.pri ) * 4 );
+ if ( ctx.seq.tbl.name == NULL )
+ {
+ ctx.seq.tbl.name = "SEQUENCE";
+ rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, ctx.seq.tbl.name );
+ }
+ if ( rc == 0 )
+ {
+ ctx.seq.cols = seq_cols;
+ memcpy(seq_cols, gSeqCol, sizeof(gSeqCol));
+ rc = Cursor_Open(&ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL);
+ if ( rc == 0 )
+ {
+ rc = DumpTable( &ctx );
+ Cursor_Close(&ctx.seq.curs);
+ }
+ VTableRelease(ctx.seq.tbl.vtbl);
+ }
+ VDatabaseRelease( db );
+ return rc;
+ }
+ ReportResetDatabase( fullPath, db );
+
+ if ( ctx.ref.tbl.name )
+ {
+ rc = VDatabaseOpenTableRead( db, &ctx.ref.tbl.vtbl, ctx.ref.tbl.name );
+ ctx.ref.type = edstt_Reference;
+ }
+ if ( rc == 0 )
+ rc = Cursor_Open( &ctx.pri.tbl, &ctx.pri.curs, ctx.pri.cols, ctx.seq.curs.cache );
+ if ( rc == 0 )
+ rc = Cursor_Open( &ctx.sec.tbl, &ctx.sec.curs, ctx.sec.cols, NULL );
+ if ( rc == 0 )
+ rc = Cursor_Open( &ctx.evi.tbl, &ctx.evi.curs, ctx.evi.cols, NULL );
+ if ( rc == 0 )
+ rc = Cursor_Open( &ctx.eva.tbl, &ctx.eva.curs, ctx.eva.cols, NULL );
+ if ( rc == 0 )
+ rc = DumpDB( &ctx );
+
+ Cursor_Close(&ctx.ref.curs);
+ Cursor_Close(&ctx.pri.curs);
+ Cursor_Close(&ctx.sec.curs);
+ Cursor_Close(&ctx.evi.curs);
+ Cursor_Close(&ctx.eva.curs);
+ Cursor_Close(&ctx.seq.curs);
+
+ VTableRelease( ctx.ref.tbl.vtbl );
+ VTableRelease( ctx.pri.tbl.vtbl );
+ VTableRelease( ctx.sec.tbl.vtbl );
+ VTableRelease( ctx.evi.tbl.vtbl );
+ VTableRelease( ctx.eva.tbl.vtbl );
+ VTableRelease( ctx.seq.tbl.vtbl );
+
+ return rc;
+}
+
+#if 0
+rc_t ResolvePath( char const *accession, char const ** path )
+{
+ rc_t rc = 0;
+ static char tblpath[ 4096 ];
+#if TOOLS_USE_SRAPATH != 0
+ static SRAPath* pmgr = NULL;
+
+ if ( accession == NULL && path == NULL )
+ {
+ SRAPathRelease( pmgr );
+ return 0;
+ }
+ if ( pmgr != NULL
+ || ( rc = SRAPathMake( &pmgr, NULL ) ) == 0
+ || ( GetRCState( rc ) == rcNotFound && GetRCTarget( rc ) == rcDylib ) )
+ {
+ *path = tblpath;
+ tblpath[ 0 ] = '\0';
+ rc = 0;
+ do {
+ if ( pmgr != NULL && !SRAPathTest( pmgr, accession ) )
+ {
+ /* try to resolve the path using mgr */
+ rc = SRAPathFind( pmgr, accession, tblpath, sizeof( tblpath ) );
+ if ( rc == 0 )
+ break;
+ }
+ if ( strlen( accession ) >= sizeof( tblpath ) )
+ {
+ rc = RC( rcExe, rcPath, rcResolving, rcBuffer, rcInsufficient );
+ }
+ else
+ {
+ strcpy( tblpath, accession );
+ rc = 0;
+ }
+ } while( false );
+ }
+#else
+ if ( accession != NULL && path != NULL )
+ {
+ *path = tblpath;
+ strcpy( tblpath, accession );
+ }
+#endif
+
+ return rc;
+}
+#endif
+
+
+static rc_t ProcessPath( VDBManager const *mgr, char const Path[] )
+{
+#if 0
+ unsigned pathlen = strlen( Path );
+ char *readGroup = NULL;
+ char *path = NULL;
+ unsigned i;
+ rc_t rc;
+
+ /* strip trailing path seperators */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = Path[ --i ];
+
+ if ( ch == '/' || ch == '\\' )
+ --pathlen;
+ else
+ break;
+ }
+
+ /* find read group alias */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = Path[ --i ];
+
+ if ( ch == '=' )
+ {
+ unsigned const pos = i + 1;
+ unsigned const len = pathlen - pos;
+
+ pathlen = i;
+
+ readGroup = malloc( len + 1 );
+ if ( readGroup == NULL )
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ memcpy( readGroup, &Path[ pos ], len );
+ readGroup[ len ] = '\0';
+ break;
+ }
+ }
+
+ path = malloc( pathlen + 1 );
+ if ( path == NULL )
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ memcpy( path, Path, pathlen );
+ path[ pathlen ] = '\0';
+
+ rc = ReportResetObject( path );
+ if ( rc == 0 )
+ {
+ char const *fullPath;
+
+ rc = ResolvePath( path, &fullPath );
+ if ( rc == 0 )
+ {
+ char const *accession = fullPath;
+ VDatabase const *db;
+
+ /* use last path element as accession */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = path[ --i ];
+
+ if ( ch == '/' || ch == '\\' )
+ {
+ accession = &fullPath[ i + i ];
+ break;
+ }
+ }
+ rc = VDBManagerOpenDBRead( mgr, &db, NULL, fullPath );
+ if ( rc == 0 )
+ {
+ rc = ProcessDB( db, fullPath, accession, readGroup );
+ VDatabaseRelease( db );
+ }
+ else
+ rc = ProcessTable( mgr, fullPath, accession, readGroup );
+ }
+ }
+ free( path );
+ free( readGroup );
+ return rc;
+
+#else
+
+ char * pc;
+ rc_t rc = 0;
+
+ pc = strchr (Path, ':');
+ if (pc == NULL)
+ {
+ unsigned pathlen;
+ char *readGroup;
+ char *path;
+ unsigned i;
+
+ old:
+ pathlen = strlen( Path );
+ readGroup = NULL;
+ path = NULL;
+
+ /* strip trailing path seperators */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = Path[ --i ];
+
+ if ( ch == '/' || ch == '\\' )
+ --pathlen;
+ else
+ break;
+ }
+
+ /* find read group alias */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = Path[ --i ];
+
+ if ( ch == '=' )
+ {
+ unsigned const pos = i + 1;
+ unsigned const len = pathlen - pos;
+
+ pathlen = i;
+
+ readGroup = malloc( len + 1 );
+ if ( readGroup == NULL )
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ memcpy( readGroup, &Path[ pos ], len );
+ readGroup[ len ] = '\0';
+ break;
+ }
+ }
+
+ path = malloc( pathlen + 1 );
+ if ( path == NULL )
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ memcpy( path, Path, pathlen );
+ path[ pathlen ] = '\0';
+
+ rc = ReportResetObject( path );
+ if ( rc == 0 )
+ {
+ char const *accession = path;
+ VDatabase const *db;
+
+ /* use last path element as accession */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = path[ --i ];
+
+ if ( ch == '/' || ch == '\\' )
+ {
+ accession = &path[ i + 1 ];
+ break;
+ }
+ }
+ rc = VDBManagerOpenDBRead( mgr, &db, NULL, path );
+ if ( rc == 0 )
+ {
+ rc = ProcessDB( db, path, accession, readGroup );
+ if (UIError(rc, db, NULL)) {
+ UIDatabaseLOGError(rc, db, true);
+/* *error_reported = true; */
+ }
+ VDatabaseRelease( db );
+ }
+ else {
+ rc = ProcessTable( mgr, path, accession, readGroup );
+ if (UIError(rc, NULL, NULL)) {
+ UITableLOGError(rc, NULL, true);
+/* *error_reported = true; */
+ }
+ }
+ }
+ free( path );
+ free( readGroup );
+ return rc;
+ }
+ else
+ {
+ VPath * vpath;
+ char * basename;
+ size_t zz;
+ char buffer [8193];
+ char readgroup_ [257];
+ char * readgroup;
+
+ rc = VPathMake (&vpath, Path);
+ if (rc)
+ ; /* LOGERR */
+ else
+ {
+ VPUri_t uri_t;
+ switch (uri_t = VPathGetUri_t (vpath))
+ {
+ default:
+ case vpuri_invalid:
+ rc = RC (rcExe, rcParam, rcAccessing, rcPath, rcInvalid);
+ break;
+ case vpuri_not_supported:
+ rc = RC (rcExe, rcParam, rcAccessing, rcPath, rcUnsupported);
+ break;
+ case vpuri_none:
+ goto old;
+
+ case vpuri_ncbi_vfs:
+ case vpuri_file:
+ case vpuri_ncbi_acc:
+ case vpuri_http:
+ rc = VPathReadPath (vpath, buffer, sizeof buffer - 1, &zz);
+ if (rc)
+ ;
+ else
+ {
+ loop:
+ basename = strrchr (buffer, '/');
+ if (basename)
+ {
+ if (basename[1] == '\0')
+ {
+ basename[0] = '\0';
+ goto loop;
+ }
+ else
+ ++basename;
+ }
+ else
+ basename = buffer;
+
+ {
+ char * ext;
+
+ /* cut off [.lite].[c]sra[.nenc||.ncbi_enc] if any */
+ ext = strrchr( basename, '.' );
+ if ( ext != NULL )
+ {
+ if ( strcasecmp( ext, ".nenc" ) == 0 || strcasecmp( ext, ",ncbi_enc" ) == 0 )
+ {
+ *ext = '\0';
+ ext = strrchr( basename, '.' );
+ }
+ if ( ext != NULL )
+ {
+ if ( strcasecmp( ext, ".sra" ) == 0 || strcasecmp( ext, ".csra" ) == 0 )
+ {
+ *ext = '\0';
+ ext = strrchr( basename, '.' );
+ if ( ext != NULL && strcasecmp( ext, ".lite" ) == 0 )
+ *ext = '\0';
+ }
+ }
+ }
+ }
+
+ rc = VPathOption (vpath, vpopt_readgroup, readgroup_,
+ sizeof readgroup_ - 1, &zz);
+ if (rc)
+ {
+ if (GetRCState (rc) == rcNotFound)
+ {
+ rc = 0;
+ readgroup = NULL;
+ }
+ }
+ else
+ readgroup = readgroup_;
+
+
+ if (rc)
+ ;
+ else
+ {
+ VDatabase const *db;
+
+ rc = VDBManagerOpenDBRead( mgr, &db, NULL, Path );
+ if ( rc == 0 )
+ {
+ rc = ProcessDB( db, Path, basename, readgroup );
+ VDatabaseRelease( db );
+ }
+ else
+ rc = ProcessTable( mgr, Path, basename, readgroup );
+ }
+ }
+ break;
+ }
+ VPathRelease (vpath);
+ }
+ }
+ return rc;
+#endif
+}
+
+
+ver_t CC KAppVersion( void )
+{
+ return SAM_DUMP_VERS;
+}
+
+char const *unaligned_usage[] = {"Output unaligned reads", NULL};
+char const *unaligned_only_usage[] = {"Only output unaligned spots", NULL};
+char const *primaryonly_usage[] = {"Output only primary alignments", NULL};
+char const *cigartype_usage[] = {"Output long version of CIGAR", NULL};
+char const *cigarCG_usage[] = {"Output CG version of CIGAR", NULL};
+char const *cigarCGMerge_usage[] = {"Apply CG fixups to CIGAR/SEQ/QUAL and outputs CG-specific columns", NULL};
+char const *CG_evidence[] = {"Output CG evidence aligned to reference", NULL};
+char const *CG_ev_dnb[] = {"Output CG evidence DNB's aligned to evidence", NULL};
+char const *CG_SAM[] = {"Output CG evidence DNB's aligned to reference ", NULL};
+char const *CG_mappings[] = {"Output CG sequences aligned to reference ", NULL};
+char const *header_usage[] = {"Replace original BAM header with a reconstructed one", NULL};
+char const *noheader_usage[] = {"Do not output headers", NULL};
+char const *region_usage[] = {"Filter by position on genome.",
+ "Name can either be file specific name (ex: \"chr1\" or \"1\").",
+ "\"from\" and \"to\" are 1-based coordinates", NULL};
+char const *distance_usage[] = {"Filter by distance between matepairs.",
+ "Use \"unknown\" to find matepairs split between the references.",
+ "Use from-to to limit matepair distance on the same reference", NULL};
+char const *seq_id_usage[] = {"Print reference SEQ_ID in RNAME instead of NAME", NULL};
+char const *identicalbases_usage[] = {"Output '=' if base is identical to reference", NULL};
+char const *gzip_usage[] = {"Compress output using gzip", NULL};
+char const *bzip2_usage[] = {"Compress output using bzip2", NULL};
+char const *qname_usage[] = {"Add .SPOT_GROUP to QNAME", NULL};
+char const *fasta_usage[] = {"Produce Fasta formatted output", NULL};
+char const *fastq_usage[] = {"Produce FastQ formatted output", NULL};
+char const *prefix_usage[] = {"Prefix QNAME: prefix.QNAME", NULL};
+char const *reverse_usage[] = {"Reverse unaligned reads according to read type", NULL};
+char const *comment_usage[] = {"Add comment to header. Use multiple times for several lines. Use quotes", NULL};
+char const *XI_usage[] = {"Output cSRA alignment id in XI column", NULL};
+char const *qual_quant_usage[] = {"Quality scores quantization level",
+ "a string like '1:10,10:20,20:30,30:-'", NULL};
+char const *CG_names[] = { "Generate CG friendly read names", NULL};
+
+char const *usage_params[] =
+{
+ NULL, /* unaligned */
+ NULL, /* unaligned-only */
+ NULL, /* primaryonly */
+ NULL, /* cigartype */
+ NULL, /* cigarCG */
+ NULL, /* header */
+ NULL, /* no-header */
+ "'text'", /* comment */
+ "name[:from-to]", /* region */
+ "from-to|unknown", /* distance */
+ NULL, /* seq-id */
+ NULL, /* identical-bases */
+ NULL, /* gzip */
+ NULL, /* bzip2 */
+ NULL, /* qname */
+ NULL, /* fasta */
+ NULL, /* fastq */
+ "prefix", /* prefix */
+ NULL, /* reverse */
+ NULL, /* test-rows */
+ NULL, /* mate-row-gap-cacheable */
+ NULL, /* cigarCGMerge */
+ NULL, /* XI */
+ "quantization string", /* qual-quant */
+ NULL, /* cigarCGMerge */
+ NULL, /* CG-evidence */
+ NULL, /* CG-ev-dnb */
+ NULL, /* CG-mappings */
+ NULL, /* CG-SAM */
+ NULL /* CG-names */
+};
+
+enum eArgs
+{
+ earg_unaligned = 0, /* unaligned */
+ earg_unaligned_only, /* unaligned */
+ earg_prim_only, /* primaryonly */
+ earg_cigartype, /* cigartype */
+ earg_cigarCG, /* cigarCG */
+ earg_header, /* header */
+ earg_noheader, /* no-header */
+ earg_comment, /* comment */
+ earg_region, /* region */
+ earg_distance, /* distance */
+ earg_seq_id, /* seq-id */
+ earg_identicalbases, /* identical-bases */
+ earg_gzip, /* gzip */
+ earg_bzip2, /* bzip2 */
+ earg_qname, /* qname */
+ earg_fastq, /* fasta */
+ earg_fasta, /* fastq */
+ earg_prefix, /* prefix */
+ earg_reverse, /* reverse */
+ earg_test_rows, /* test-rows */
+ earg_mate_row_gap_cachable, /* mate-row-gap-cacheable */
+ earg_cigarCG_merge, /* cigarCGMerge */
+ earg_XI, /* XI */
+ earg_QualQuant, /* qual-quant */
+ earg_CG_evidence, /* CG-evidence */
+ earg_CG_ev_dnb, /* CG-ev-dnb */
+ earg_CG_mappings, /* CG-mappings */
+ earg_CG_SAM, /* CG-SAM */
+ earg_CG_names /* CG-names */
+};
+
+OptDef DumpArgs[] =
+{
+ { "unaligned", "u", NULL, unaligned_usage, 0, false, false }, /* unaligned */
+ { "unaligned-only", "U", NULL, unaligned_only_usage, 0, false, false }, /* unaligned-only */
+ { "primary", "1", NULL, primaryonly_usage, 0, false, false }, /* primaryonly */
+ { "cigar-long", "c", NULL, cigartype_usage, 0, false, false }, /* cigartype */
+ { "cigar-CG", NULL, NULL, cigarCG_usage, 0, false, false }, /* cigarCG */
+ { "header", "r", NULL, header_usage, 0, false, false }, /* header */
+ { "no-header", "n", NULL, noheader_usage, 0, false, false }, /* no-header */
+ { "header-comment", NULL, NULL, comment_usage, 0, true, false }, /* comment */
+ { "aligned-region", NULL, NULL, region_usage, 0, true, false }, /* region */
+ { "matepair-distance", NULL, NULL, distance_usage, 0, true, false }, /* distance */
+ { "seqid", "s", NULL, seq_id_usage, 0, false, false }, /* seq-id */
+ { "hide-identical", "=", NULL, identicalbases_usage, 0, false, false }, /* identical-bases */
+ { "gzip", NULL, NULL, gzip_usage, 0, false, false }, /* gzip */
+ { "bzip2", NULL, NULL, bzip2_usage, 0, false, false }, /* bzip2 */
+ { "spot-group", "g", NULL, qname_usage, 0, false, false }, /* qname */
+ { "fastq", NULL, NULL, fastq_usage, 0, false, false }, /* fasta */
+ { "fasta", NULL, NULL, fasta_usage, 0, false, false }, /* fastq */
+ { "prefix", "p", NULL, prefix_usage, 0, true, false }, /* prefix */
+ { "reverse", NULL, NULL, reverse_usage, 0, false, false }, /* reverse */
+ { "test-rows", NULL, NULL, NULL, 0, true, false }, /* test-rows */
+ { "mate-cache-row-gap", NULL, NULL, NULL, 0, true, false }, /* mate-row-gap-cacheable */
+ { "cigar-CG-merge", NULL, NULL, cigarCGMerge_usage, 0, false, false }, /* cigarCGMerge */
+ { "XI", NULL, NULL, XI_usage, 0, false, false }, /* XI */
+ { "qual-quant", "Q", NULL, qual_quant_usage, 0, true, false }, /* qual-quant */
+ { "CG-evidence", NULL, NULL, CG_evidence, 0, false, false }, /* CG-evidence */
+ { "CG-ev-dnb" , NULL, NULL, CG_ev_dnb , 0, false, false }, /* CG-ev-dnb */
+ { "CG-mappings", NULL, NULL, CG_mappings, 0, false, false }, /* CG-mappings */
+ { "CG-SAM", NULL, NULL, CG_SAM, 0, false, false }, /* CG-SAM */
+ { "CG-names", NULL, NULL, CG_names, 0, false, false } /* CG-names */
+};
+
+
+const char UsageDefaultName[] = "sam-dump";
+
+
+rc_t CC UsageSummary( char const *progname )
+{
+ return KOutMsg( "Usage:\n"
+ "\t%s [options] path-to-run[ path-to-run ...] > output.sam\n\n", progname );
+}
+
+
+rc_t CC Usage( Args const *args)
+{
+ char const *progname = UsageDefaultName;
+ char const *fullpath = UsageDefaultName;
+ rc_t rc;
+ unsigned i;
+
+ rc = ArgsProgram( args, &fullpath, &progname );
+
+ UsageSummary( progname );
+
+ KOutMsg( "Options:\n" );
+ for( i = 0; i < sizeof( DumpArgs ) / sizeof( DumpArgs[ 0 ] ); i++ )
+ {
+ if ( DumpArgs[ i ].help != NULL )
+ {
+ HelpOptionLine( DumpArgs[ i ].aliases, DumpArgs[ i ].name,
+ usage_params[ i ], DumpArgs[ i ].help);
+ }
+ }
+ KOutMsg( "\n" );
+ HelpOptionsStandard();
+
+ HelpVersion( fullpath, KAppVersion() );
+
+ return rc;
+}
+
+
+#define ARGS_COUNT (sizeof(DumpArgs)/sizeof(DumpArgs[0]))
+
+
+static unsigned ParamCount( Args const *const args, rc_t *const prc )
+{
+ uint32_t y = 0;
+ rc_t rc = ArgsParamCount( args, &y );
+
+ if ( prc != NULL )
+ *prc = rc;
+ return y;
+}
+
+
+static unsigned ArgCount( Args const *const args, rc_t *const prc )
+{
+ uint32_t y = 0;
+ rc_t rc = ArgsArgvCount( args, &y );
+
+ if ( prc != NULL )
+ *prc = rc;
+ return y;
+}
+
+
+static rc_t CountArgs( Args const *const args, unsigned count[],
+ char const **const errmsg )
+{
+ rc_t rc;
+ unsigned const pcount = ParamCount( args, &rc );
+
+ memset( count, 0, ARGS_COUNT );
+ if ( rc != 0 || pcount == 0 )
+ {
+ *errmsg = "";
+ MiniUsage( args );
+ return ( ArgCount( args, NULL ) < 2 )
+ ? 0
+ : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+ }
+#define COUNT_ARG(E) do {\
+ char const *const optname = DumpArgs[ (E) ].name; \
+ if ( ( rc = ArgsOptionCount( args, optname, &count[ (E) ] ) ) != 0 ) { \
+ *errmsg = optname; \
+ return rc; \
+ } } while( 0 )
+
+
+ /* record source options */
+ COUNT_ARG( earg_unaligned );
+ COUNT_ARG( earg_unaligned_only );
+ COUNT_ARG( earg_prim_only );
+ COUNT_ARG( earg_CG_evidence );
+ COUNT_ARG( earg_CG_ev_dnb );
+ COUNT_ARG( earg_CG_mappings );
+ COUNT_ARG( earg_CG_SAM );
+
+ /* record filter options */
+ COUNT_ARG( earg_region );
+ COUNT_ARG( earg_distance );
+
+ /* output format options */
+ COUNT_ARG( earg_fastq );
+ COUNT_ARG( earg_fasta );
+
+ /* SAM header options */
+ COUNT_ARG( earg_header );
+ COUNT_ARG( earg_noheader );
+ COUNT_ARG( earg_comment );
+
+ /* SAM field options */
+ COUNT_ARG( earg_prefix );
+ COUNT_ARG( earg_qname );
+ COUNT_ARG( earg_seq_id );
+ COUNT_ARG( earg_CG_names );
+
+ COUNT_ARG( earg_cigartype );
+ COUNT_ARG( earg_cigarCG );
+ COUNT_ARG( earg_cigarCG_merge );
+
+ COUNT_ARG( earg_identicalbases );
+ COUNT_ARG( earg_reverse );
+ COUNT_ARG( earg_QualQuant );
+
+ /* output encoding options */
+ COUNT_ARG( earg_gzip );
+ COUNT_ARG( earg_bzip2 );
+
+ COUNT_ARG( earg_mate_row_gap_cachable );
+
+ /* debug options */
+ COUNT_ARG( earg_XI );
+ COUNT_ARG( earg_test_rows );
+#undef COUNT_ARG
+ return 0;
+}
+
+
+static unsigned GetOptValU( Args const *const args, char const *const argname,
+ unsigned const defval, rc_t *const prc )
+{
+ unsigned y = defval;
+ char const *valstr;
+ rc_t rc = ArgsOptionValue( args, argname, 0, &valstr );
+
+ if ( rc == 0 )
+ {
+ char *endp;
+
+ y = strtou32( valstr, &endp, 0 );
+ if ( *endp != '\0' )
+ {
+ rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+ y = 0;
+ }
+ if ( y == 0 )
+ y = defval;
+ }
+ if ( prc )
+ *prc = rc;
+ return y;
+}
+
+
+static rc_t GetComments( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+ parms->comments = calloc( n + 1, sizeof( parms->comments[ 0 ] ) );
+ if ( parms->comments != NULL )
+ {
+ unsigned i;
+
+ for ( i = 0; i < n; ++i )
+ {
+ rc_t const rc = ArgsOptionValue( args, DumpArgs[ earg_comment ].name, i, &parms->comments[ i ] );
+ if ( rc != 0 )
+ {
+ free( parms->comments );
+ parms->comments = NULL;
+ return rc;
+ }
+ }
+ return 0;
+ }
+ else
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+}
+
+
+static rc_t ParseFromTo( int *const pFrom, int *const pTo, char const str[] )
+{
+ /* $str =~ /((\d+)-(\d+))|(-(\d+))|(\d+)/ */
+ int n;
+ char fr_str[ 16 ];
+ char to_str[ 16 ];
+ uint32_t fr = 0;
+ uint32_t to = 0;
+ int i = sscanf( str, "%15[0-9]-%15[0-9]%n", fr_str, to_str, &n );
+
+ if ( i != 2 )
+ {
+ unsigned const offset = ( str[ 0 ] == '-' ) ? 1 : 0;
+
+ fr = 0;
+ i = sscanf( str + offset, "%15[0-9]%n", to_str, &n );
+ if ( i != 1 )
+ return RC( rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange );
+ to = strtou32( to_str, 0, 0 );
+ }
+ else
+ {
+ fr = strtou32( fr_str, 0, 0 );
+ to = strtou32( to_str, 0, 0 );
+
+ if ( to < fr )
+ {
+ uint32_t const tmp = to;
+ to = fr;
+ fr = tmp;
+ }
+ }
+ /* was the entire string consumed */
+ if ( str[ n ] != 0 )
+ return RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+ *pFrom = ( int )fr;
+ *pTo = ( int )to;
+ return 0;
+}
+
+
+static rc_t GetDistance( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+ rc_t rc;
+ TMatepairDistance *const mpd = calloc( n, sizeof( mpd[ 0 ] ) );
+
+ if ( mpd == NULL )
+ rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ else
+ {
+ unsigned i;
+ unsigned j;
+
+ for ( j = i = 0; i < n; ++i )
+ {
+ char const *valstr;
+ int from = 0;
+ int to = 0;
+
+ rc = ArgsOptionValue( args, DumpArgs[earg_distance].name, i, &valstr );
+ if ( rc != 0 )
+ break;
+ if ( strcasecmp( valstr, "unknown" ) == 0 )
+ {
+ parms->mp_dist_unknown = true;
+ continue;
+ }
+ rc = ParseFromTo( &from, &to, valstr );
+ if ( rc != 0 )
+ break;
+ if ( ( from != 0 ) || ( to != 0 ) )
+ {
+ mpd[ j ].from = from;
+ mpd[ j ].to = to;
+ ++j;
+ }
+ }
+ if ( rc == 0 )
+ {
+ parms->mp_dist = mpd;
+ parms->mp_dist_qty = j;
+
+ SAM_DUMP_DBG( 2, ( "filter by mate pair distance\n" ) );
+ if ( parms->mp_dist_unknown )
+ SAM_DUMP_DBG( 2, ( " distance: unknown\n" ) );
+ for ( i = 0; i < j; ++i )
+ {
+ SAM_DUMP_DBG( 2, ( " distance [%lu-%lu]\n",
+ parms->mp_dist[ i ].from, parms->mp_dist[ i ].to ) );
+ }
+ }
+ else
+ free( mpd );
+ }
+ return rc;
+}
+
+
+static rc_t GetRegion( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+ rc_t rc;
+ TAlignedRegion *const reg = calloc( n, sizeof( reg[ 0 ] ) );
+
+ if ( reg == NULL )
+ rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ else
+ {
+ unsigned i;
+ unsigned j;
+
+ for ( rc = 0, j = i = 0; i < n; ++i )
+ {
+ char const *valstr;
+ char const *sep;
+ unsigned namelen;
+ unsigned f;
+ unsigned e;
+ TAlignedRegion r;
+
+ memset(&r,0,sizeof(r));
+
+ rc = ArgsOptionValue( args, DumpArgs[ earg_region ].name, i, &valstr );
+ if ( rc != 0 ) break;
+
+ sep = strchr( valstr, ':' );
+ if ( sep != NULL )
+ namelen = sep - valstr;
+ else
+ namelen = strlen( valstr );
+
+ if ( namelen >= sizeof( r.name ) )
+ return RC( rcExe, rcArgv, rcProcessing, rcParam, rcTooLong );
+
+ memcpy( r.name, valstr, namelen );
+ r.name[ namelen ] = '\0';
+
+ r.rq = UINT_MAX;
+ if ( sep != NULL )
+ {
+ int from = -1;
+ int to = -1;
+
+ rc = ParseFromTo( &from, &to, sep + 1 );
+ if ( rc != 0 )
+ break;
+ if ( from > 0 ) /* convert to 0-based */
+ --from;
+ else if ( to > 0 )
+ from = 0;
+ if ( to > 0 )
+ --to;
+ else if ( from >= 0 && to < 0 )
+ to = from;
+ if ( from >= 0 || to >= 0 )
+ {
+ if ( from > to )
+ {
+ int tmp = to;
+ to = from;
+ from = tmp;
+ }
+ r.r[ 0 ].from = from;
+ r.r[ 0 ].to = to;
+ r.rq = 1;
+ }
+ }
+
+ for ( f = 0, e = j; f < e; )
+ {
+ unsigned const m = ( ( f + e ) / 2 );
+ int const diff = strcmp( r.name, reg[ m ].name );
+
+ if ( diff < 0 )
+ e = m;
+ else
+ f = m + 1;
+ }
+ if ( 0 < e && e < j && strcmp( r.name, reg[ e-1 ].name ) == 0 )
+ {
+ TAlignedRegion *const fnd = ®[ e - 1 ];
+
+ if ( fnd->rq != UINT_MAX )
+ {
+ for ( f = 0, e = fnd->rq; f < e; )
+ {
+ unsigned const m = ( ( f + e ) / 2 );
+
+ if ( r.r[ 0 ].from < fnd->r[ m ].from )
+ e = m;
+ else
+ f = m + 1;
+ }
+ if ( fnd->rq >= ( sizeof( r.r ) / sizeof( r.r[0] ) ) )
+ {
+ rc = RC( rcExe, rcArgv, rcProcessing, rcBuffer, rcInsufficient );
+ break;
+ }
+ memmove( &fnd->r[ e +1 ], &fnd->r[ e ], ( fnd->rq - e ) * sizeof( fnd->r[ 0 ] ) );
+ fnd->r[ e ] = r.r[ 0 ];
+ ++fnd->rq;
+ }
+ }
+ else
+ {
+ memmove( ®[ e + 1 ], ®[ e ], ( j - e ) * sizeof( reg[ 0 ] ) );
+ reg[ e ] = r;
+ ++j;
+ }
+ }
+ if ( rc == 0 )
+ {
+ parms->region = reg;
+ parms->region_qty = j;
+
+ for ( i = 0; i < parms->region_qty; ++i )
+ {
+ TAlignedRegion *const r = &parms->region[ i ];
+
+ SAM_DUMP_DBG( 2, ( "filter by %s\n", r->name ) );
+ if ( r->rq == UINT_MAX )
+ {
+ r->rq = 1;
+ r->r[ 0 ].from = 0;
+ r->r[ 0 ].to = UINT_MAX;
+ }
+ for ( j = 0; j < r->rq; ++j )
+ {
+ unsigned const to = r->r[ j ].to;
+ unsigned const from = r->r[ j ].from;
+
+ SAM_DUMP_DBG( 2, ( " range: [%u:%u]\n", r->r[ j ].from, to ) );
+ if ( r->max_to < to ) r->max_to = to;
+ if ( r->min_from < from ) r->min_from = from;
+ }
+ }
+ }
+ else
+ free( reg );
+ }
+ return rc;
+}
+
+
+static rc_t GetQualQuant( Args const *const args, struct params_s *const parms )
+{
+ char const *valstr;
+ int i;
+ rc_t rc = ArgsOptionValue( args, DumpArgs[ earg_QualQuant ].name, 0, &valstr );
+
+ if ( rc == 0 && strcmp( valstr, "0" ) != 0 )
+ parms->quantizeQual = QualityQuantizerInitMatrix( parms->qualQuant, valstr );
+ for(i=1; parms->qualQuant[i]==parms->qualQuant[0] && i<256;i++){}
+ if(i<256) parms->qualQuantSingle=0;
+ else parms->qualQuantSingle = parms->qualQuant[0];
+ return rc;
+}
+
+
+static rc_t GetArgs( Args const *const args, unsigned const count[],
+ char const **const errmsg )
+{
+ static struct params_s parms;
+ bool const multipass = ParamCount( args, 0 ) > 1;
+ rc_t rc;
+
+ memset( &parms, 0, sizeof( parms ) );
+
+ if ( count[ earg_comment ] )
+ {
+ rc = GetComments( args, &parms, count[ earg_comment ] );
+ if ( rc != 0 )
+ {
+ *errmsg = DumpArgs[ earg_comment ].name;
+ return rc;
+ }
+ }
+
+ if ( count[ earg_region ] && count[ earg_unaligned_only ] == 0 )
+ {
+ rc = GetRegion( args, &parms, count[ earg_region ] );
+ if ( rc != 0 )
+ {
+ *errmsg = DumpArgs[ earg_region ].name;
+ return rc;
+ }
+ }
+
+ if ( count[ earg_distance ] && count[ earg_unaligned_only ] == 0 )
+ {
+ rc = GetDistance( args, &parms, count[ earg_distance ] );
+ if ( rc != 0 )
+ {
+ *errmsg = DumpArgs[ earg_distance ].name;
+ return rc;
+ }
+ }
+
+ if ( count[ earg_QualQuant ] )
+ {
+ rc = GetQualQuant( args, &parms );
+ if ( rc != 0 )
+ {
+ *errmsg = DumpArgs[ earg_QualQuant ].name;
+ return rc;
+ }
+ }
+
+ parms.cg_sam = ( count[ earg_CG_SAM ] != 0 );
+ parms.cg_evidence = ( count[ earg_CG_evidence ] != 0 );
+ parms.cg_ev_dnb = ( count[ earg_CG_ev_dnb ] != 0 );
+
+ if ( count[ earg_CG_mappings ] == 0 &&
+ ( parms.cg_sam || parms.cg_evidence || parms.cg_ev_dnb ) )
+ {
+ parms.primaries = false;
+ parms.secondaries = false;
+ parms.unaligned = false;
+ }
+ else
+ {
+ parms.primaries = true;
+ parms.secondaries = ( count[ earg_prim_only ] == 0 );
+ parms.unaligned = ( ( count[ earg_unaligned ] != 0 ) /*&& ( parms.region_qty == 0 )*/ );
+ }
+
+ parms.long_cigar = ( count[ earg_cigartype ] != 0 );
+ parms.use_seqid = ( ( count[ earg_seq_id ] != 0 ) || multipass );
+ parms.hide_identical = ( count[ earg_identicalbases ] != 0 );
+ parms.fasta = ( count[ earg_fasta ] != 0 );
+ parms.fastq = ( count[ earg_fastq ] != 0 );
+ parms.reverse_unaligned = ( count[ earg_reverse ] != 0 );
+ parms.cg_friendly_names = count[ earg_CG_names ] != 0;
+ parms.spot_group_in_name = ( count[ earg_qname ] != 0 || multipass );
+ parms.noheader = ( ( count[ earg_noheader ] != 0 ) || parms.fasta || parms.fastq || multipass );
+ parms.reheader = ( ( count[ earg_header ] != 0 ) && !parms.noheader );
+ parms.xi = ( count[ earg_XI ] != 0 );
+ if ( ( count[ earg_cigarCG ] == 0 ) && ( count[ earg_cigarCG_merge ] == 0 ) )
+ {
+ parms.cg_style = 0;
+ }
+ else if ( count[ earg_cigarCG ] == 0 )
+ {
+ parms.cg_style = 1;
+ parms.long_cigar = false;
+ }
+ else if ( count[ earg_cigarCG_merge ] == 0 )
+ {
+ parms.cg_style = 2;
+ }
+ else
+ {
+ rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInconsistent );
+ *errmsg = "cigar-CG and CG are mutually exclusive";
+ parms.cg_style = 0;
+ }
+
+ if (count[ earg_unaligned_only ] > 0) {
+ parms.unaligned_spots = true;
+
+ parms.primaries = false;
+ parms.secondaries = false;
+ parms.unaligned = true;
+ parms.cg_ev_dnb = false;
+ parms.cg_evidence = false;
+ parms.cg_sam = false;
+ parms.cg_style = 0;
+ }
+
+ parms.test_rows = GetOptValU( args, DumpArgs[ earg_test_rows ].name, 0, NULL );
+ parms.mate_row_gap_cachable = GetOptValU( args, DumpArgs[ earg_mate_row_gap_cachable ].name, 1000000, NULL );
+
+ param = &parms;
+ return 0;
+}
+
+
+static rc_t GetParams( Args const *const args, char const **const errmsg )
+{
+ unsigned count[ ARGS_COUNT ];
+ rc_t rc = CountArgs( args, count, errmsg );
+
+ if ( rc == 0 )
+ rc = GetArgs( args, count, errmsg );
+ return rc;
+}
+
+
+rc_t CC SAM_Dump_Main( int argc, char* argv[] )
+{
+ rc_t rc = 0;
+ Args* args;
+ char const *errmsg = "stop";
+ bool error_reported = false;
+
+ memset( &g_out_writer, 0, sizeof( g_out_writer ) );
+ KOutHandlerSetStdOut();
+ KStsHandlerSetStdErr();
+ KLogHandlerSetStdErr();
+ (void)KDbgHandlerSetStdErr();
+
+ ReportBuildDate( __DATE__ );
+
+ rc = ArgsMakeAndHandle( &args, argc, argv, 1, DumpArgs, ARGS_COUNT );
+ if ( rc == 0 )
+ {
+ uint32_t pcount;
+
+ rc = ArgsParamCount( args, &pcount );
+ if ( rc != 0 || pcount < 1 )
+ {
+ errmsg = "";
+ rc = argc < 2 ? 0 : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+ MiniUsage( args );
+ }
+ else if ( ( rc = GetParams( args, &errmsg ) ) != 0 )
+ {
+ }
+ else
+ {
+ VDBManager const *mgr;
+
+ rc = VDBManagerMakeRead( &mgr, NULL );
+ if ( rc == 0 )
+ {
+ rc = BufferedWriterMake( param->output_gzip, param->output_bz2 );
+ if ( rc == 0 )
+ {
+ unsigned i;
+
+ for ( i = 0; i < pcount; ++i )
+ {
+ char const *arg;
+
+ rc = ArgsParamValue( args, i, &arg );
+ if ( rc != 0 ) break;
+ rc = ProcessPath( mgr, arg );
+#if _ARCH_BITS < 64
+ /* look for "param excessive while writing vector within container module" */
+ if (GetRCState(rc) == rcExcessive &&
+ GetRCObject(rc) == rcParam &&
+ GetRCContext(rc) == rcWriting &&
+ GetRCTarget(rc) == rcVector &&
+ GetRCModule(rc) == rcCont)
+ {
+ ( void )PLOGMSG( klogErr, (klogErr, "This run '$(run)' contains too many reads to be processed with a $(bits)-bit executable; please try again with a 64-bit executable.", "run=%s,bits=%u", arg, _ARCH_BITS));
+ }
+#endif
+ if ( rc != 0 ) break;
+ }
+ BufferedWriterRelease( rc == 0 );
+ }
+ VDBManagerRelease( mgr );
+ }
+ }
+ ArgsWhack( args );
+ }
+
+ if ( rc != 0 && !error_reported )
+ {
+ if ( errmsg[ 0 ] )
+ {
+ ( void )LOGERR( klogErr, rc, errmsg );
+ } else if ( KLogLastErrorCode() != rc )
+ {
+ ( void )LOGERR( klogErr, rc, "stop" );
+ }
+ }
+
+ {
+ /* Report execution environment if necessary */
+ rc_t rc2 = ReportFinalize( rc );
+ if ( rc == 0 )
+ rc = rc2;
+ }
+ return rc;
+}
+
+
+rc_t CC KMain( int argc, char* argv[] )
+{
+ char filename[ 4096 ];
+ /*
+ Try to find a option-file - parameter in the original parameters
+ This is a hack to teach sam-dump to read it's parameters from a file/pipe instead
+ of the commandline
+ It is neccessary because the code above does not use libkapp to parse parameters!
+ */
+ rc_t rc = Args_find_option_in_argv( argc, argv, "--option-file", filename, sizeof filename );
+ if ( rc == 0 )
+ {
+ int new_argc;
+ char ** new_argv;
+ /* we found it! Now comes the special treatment: we fake a new argc/argv-pair! */
+ rc = Args_tokenize_file_and_progname_into_argv( filename, "sam-dump", &new_argc, &new_argv );
+ if ( rc == 0 )
+ {
+ /* pass the faked input-parameters from */
+ rc = SAM_Dump_Main( new_argc, new_argv );
+ Args_free_token_argv( new_argc, new_argv );
}
- ArgsWhack(args);
}
- if( rc != 0 && errmsg[0] ) {
- LOGERR(klogErr, rc, errmsg);
+ else
+ {
+ /* we did not found the special option, just use the commandline-parameters unchanged */
+ rc = SAM_Dump_Main( argc, argv );
}
return rc;
}
diff --git a/tools/sam-dump/sam-dump.vers b/tools/sam-dump/sam-dump.vers
index 04b10b4..5859406 100644
--- a/tools/sam-dump/sam-dump.vers
+++ b/tools/sam-dump/sam-dump.vers
@@ -1 +1 @@
-2.1.7
+2.2.3
diff --git a/tools/sam-dump/sam-dump.vers.h b/tools/sam-dump/sam-dump.vers.h
deleted file mode 100644
index e4ee002..0000000
--- a/tools/sam-dump/sam-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SAM_DUMP_VERS 0x02010007
diff --git a/tools/sra-dbcc/#Makefile# b/tools/sra-dbcc/#Makefile#
new file mode 100644
index 0000000..d642b90
--- /dev/null
+++ b/tools/sra-dbcc/#Makefile#
@@ -0,0 +1,126 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/sra-dbcc
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+
+EXT_TOOLS = \
+ sra-dbcc
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: $(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# sra-dbcc
+#
+SRA_DBCC_SRC = \
+ sra-dbcc
+
+SRA_DBCC_OBJ = \
+ $(addsuffix .$(OBJX),$(SRA_DBCC_SRC))
+
+SRA_DBCC_LIB = \
+ -dalign-reader \
+ -daxf \
+ -dsraxf \
+ -dvxf \
+ -dksrch \
+ -lsradb \
+ -lvdb \
+ -lkdb \
+ -lkapp \
+ -lvfs \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lklib \
+ -lm \
+ -lkproc
+
+sra-dbcc.vers.h: sra-dbcc.vers
+ $(TOP)/build/make-vers-inc.sh SRA_DBCC_VERS $^ > $@
+
+$(BINDIR)/sra-dbcc: $(SRA_DBCC_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRA_DBCC_LIB)
+
+sra-dbcc_tag:
+ @ $(TOP)/build/tag-module.sh \
+ $(MODULE) table-vers $(SRA_DBCC_OBJ)
diff --git a/tools/sra-dbcc/Makefile b/tools/sra-dbcc/Makefile
index 3befa25..beeda09 100644
--- a/tools/sra-dbcc/Makefile
+++ b/tools/sra-dbcc/Makefile
@@ -25,14 +25,13 @@
default: std
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
MODULE = tools/sra-dbcc
include $(TOP)/build/Makefile.env
INT_TOOLS = \
-
EXT_TOOLS = \
sra-dbcc
@@ -43,15 +42,13 @@ ALL_TOOLS = \
#------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(ALL_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/$@
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# all
@@ -70,18 +67,18 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
-# clean
+# vers-includes
#
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
#-------------------------------------------------------------------------------
-# tag
+# clean
#
-tag: $(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
#-------------------------------------------------------------------------------
# sra-dbcc
@@ -93,15 +90,20 @@ SRA_DBCC_OBJ = \
$(addsuffix .$(OBJX),$(SRA_DBCC_SRC))
SRA_DBCC_LIB = \
- -lsrapath \
+ -dalign-reader \
+ $(READONLY_SCHEMA_LIBS) \
+ -dksrch \
+ -lsradb \
+ -lvdb \
-lkdb \
-lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
+ -lkproc \
-lklib \
- -ldl \
- -lz \
- -lbz2 \
-lm
sra-dbcc.vers.h: sra-dbcc.vers
@@ -109,7 +111,3 @@ sra-dbcc.vers.h: sra-dbcc.vers
$(BINDIR)/sra-dbcc: $(SRA_DBCC_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRA_DBCC_LIB)
-
-sra-dbcc_tag:
- @ $(TOP)/build/tag-module.sh \
- $(MODULE) table-vers $(SRA_DBCC_OBJ)
diff --git a/tools/sra-dbcc/sra-dbcc.c b/tools/sra-dbcc/sra-dbcc.c
index 8ce032a..869a787 100644
--- a/tools/sra-dbcc/sra-dbcc.c
+++ b/tools/sra-dbcc/sra-dbcc.c
@@ -24,30 +24,88 @@
*
*/
+#include "sra-dbcc.vers.h"
+
#include <kapp/main.h>
-#include <klib/log.h>
-#include <klib/rc.h>
-#include <klib/namelist.h>
-#include <klib/container.h>
-#include <klib/debug.h>
+#include <kapp/args.h>
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+
+#include <sra/sradb.h>
+#include <sra/sraschema.h>
+#include <sra/srapath.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
#include <kdb/manager.h>
#include <kdb/database.h>
#include <kdb/table.h>
-#include <kdb/namelist.h>
+#include <kdb/meta.h>
#include <kdb/consistency-check.h>
-#include <vdb/manager.h>
-#include <vdb/table.h>
+#include <kdb/namelist.h>
+
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h> /* VPath */
+
+#include <kfs/sra.h>
+#include <kfs/tar.h>
#include <kfs/kfs-priv.h>
-#include <sra/srapath.h>
+
+#include <klib/container.h>
+#include <klib/sort.h>
+#include <klib/namelist.h>
+#include <klib/data-buffer.h>
+#include <klib/text.h> /* String */
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/rc.h>
+
#include <sysalloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
+#include <assert.h>
-#include "sra-dbcc.vers.h"
+#ifndef PATH_MAX
+ #define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
static bool exhaustive;
+static bool md5_required;
+static bool ref_int_check;
+static bool s_IndexOnly = false;
+
+struct node_s {
+ int parent;
+ int prvSibl;
+ int nxtSibl;
+ int firstChild;
+ unsigned depth;
+ unsigned name;
+ uint32_t objType;
+};
+typedef struct node_s node_t;
+
+typedef struct cc_context_s {
+ node_t *nodes;
+ char *names;
+ rc_t rc;
+ unsigned num_columns;
+ unsigned nextNode;
+ unsigned nextName;
+} cc_context_t;
static
rc_t report_rtn ( rc_t rc )
@@ -55,27 +113,25 @@ rc_t report_rtn ( rc_t rc )
return exhaustive ? 0 : rc;
}
-rc_t CC Usage ( struct Args const * args ) { return 0; }
-
-static rc_t report_index(const CCReportInfoBlock *what, void *ctx)
+static rc_t report_index(CCReportInfoBlock const *what, cc_context_t *ctx)
{
- rc_t *rc2 = ctx;
-
switch (what->type) {
case ccrpt_Done:
if (what->info.done.rc) {
- (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Index '$(index)': $(mesg)", "index=%s,mesg=%s", what->objName, what->info.done.mesg));
- if (*rc2 == 0)
- *rc2 = what->info.done.rc;
+ (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Index '$(index)': $(mesg)",
+ "index=%s,mesg=%s", what->objName, what->info.done.mesg));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.done.rc;
}
return report_rtn (what->info.done.rc);
case ccrpt_Index:
return 0; /* continue with check */
case ccrpt_MD5:
if (what->info.MD5.rc) {
- (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of index '$(index)' failed MD5 check", "file=%s,index=%s", what->info.MD5.file, what->objName));
- if (*rc2 == 0)
- *rc2 = what->info.MD5.rc;
+ (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of index '$(index)' failed MD5 check",
+ "file=%s,index=%s", what->info.MD5.file, what->objName));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.MD5.rc;
}
return report_rtn (what->info.MD5.rc);
default:
@@ -83,25 +139,30 @@ static rc_t report_index(const CCReportInfoBlock *what, void *ctx)
}
}
-static rc_t report_column(const CCReportInfoBlock *what, void *ctx)
+static rc_t report_column(CCReportInfoBlock const *what, cc_context_t *ctx)
{
- rc_t *rc2 = ctx;
-
switch (what->type) {
case ccrpt_Done:
if (what->info.done.rc) {
- (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Column '$(column)': $(mesg)", "column=%s,mesg=%s", what->objName, what->info.done.mesg));
- if (*rc2 == 0)
- *rc2 = what->info.done.rc;
+ (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Column '$(column)': $(mesg)",
+ "column=%s,mesg=%s", what->objName, what->info.done.mesg));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.done.rc;
+ }
+ else {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Column '$(column)': $(mesg)", "column=%s,mesg=%s",
+ what->objName, what->info.done.mesg ? what->info.done.mesg : "checked"));
+ ++ctx->num_columns;
}
return report_rtn (what->info.done.rc);
case ccrpt_Blob:
return 0; /* continue with check */
case ccrpt_MD5:
if (what->info.MD5.rc) {
- (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of column '$(column)' failed MD5 check", "file=%s,column=%s", what->info.MD5.file, what->objName));
- if (*rc2 == 0)
- *rc2 = what->info.MD5.rc;
+ (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of column '$(column)' failed MD5 check",
+ "file=%s,column=%s", what->info.MD5.file, what->objName));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.MD5.rc;
}
return report_rtn (what->info.MD5.rc);
default:
@@ -109,23 +170,39 @@ static rc_t report_column(const CCReportInfoBlock *what, void *ctx)
}
}
-static rc_t report_table(const CCReportInfoBlock *what, void *ctx)
+static rc_t report_table(CCReportInfoBlock const *what, cc_context_t *ctx)
{
- rc_t *rc2 = ctx;
-
switch (what->type) {
case ccrpt_Done:
if (what->info.done.rc) {
- (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Table '$(table)': $(mesg)", "table=%s,mesg=%s", what->objName, what->info.done.mesg));
- if (*rc2 == 0)
- *rc2 = what->info.done.rc;
+ (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Table '$(table)': $(mesg)",
+ "table=%s,mesg=%s", what->objName, what->info.done.mesg));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.done.rc;
+ }
+ else if (what->info.done.mesg) {
+ if (strcmp(what->info.done.mesg, "missing md5 file") == 0 && md5_required) {
+ rc_t rc = RC(0, rcTable, rcValidating, rcChecksum, rcNotFound);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(table)': is missing required md5 files",
+ "table=%s", what->objName));
+ return rc;
+ }
+ else if (strncmp("unexpected object ", what->info.done.mesg, 18) == 0) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Table '$(tbl)': $(mesg)", "tbl=%s,mesg=%s",
+ what->objName, what->info.done.mesg));
+ }
+ else {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Table '$(tbl)' metadata: $(mesg)",
+ "tbl=%s,mesg=%s", what->objName, what->info.done.mesg));
+ }
}
return report_rtn (what->info.done.rc);
case ccrpt_MD5:
if (what->info.MD5.rc) {
- (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of table '$(table)' failed MD5 check", "file=%s,table=%s", what->info.MD5.file, what->objName));
- if (*rc2 == 0)
- *rc2 = what->info.MD5.rc;
+ (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of table '$(table)' failed MD5 check",
+ "file=%s,table=%s", what->info.MD5.file, what->objName));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.MD5.rc;
}
return report_rtn (what->info.MD5.rc);
default:
@@ -133,23 +210,35 @@ static rc_t report_table(const CCReportInfoBlock *what, void *ctx)
}
}
-static rc_t report_database(const CCReportInfoBlock *what, void *ctx)
+static rc_t report_database(CCReportInfoBlock const *what, cc_context_t *ctx)
{
- rc_t *rc2 = ctx;
-
switch (what->type) {
case ccrpt_Done:
if (what->info.done.rc) {
- (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Database '$(db)': $(mesg)", "db=%s,mesg=%s", what->objName, what->info.done.mesg));
- if (*rc2 == 0)
- *rc2 = what->info.done.rc;
+ (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Database '$(db)': $(mesg)",
+ "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.done.rc;
+ }
+ else if (what->info.done.mesg) {
+ if (strcmp(what->info.done.mesg, "missing md5 file") == 0 && md5_required) {
+ rc_t rc = RC(0, rcTable, rcValidating, rcChecksum, rcNotFound);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(table)': is missing required md5 files",
+ "table=%s", what->objName));
+ return rc;
+ }
+ else {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(db)' metadata: $(mesg)",
+ "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+ }
}
return report_rtn (what->info.done.rc);
case ccrpt_MD5:
if (what->info.MD5.rc) {
- (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of database '$(db)' failed MD5 check", "file=%s,db=%s", what->info.MD5.file, what->objName));
- if (*rc2 == 0)
- *rc2 = what->info.MD5.rc;
+ (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of database '$(db)' failed MD5 check",
+ "file=%s,db=%s", what->info.MD5.file, what->objName));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.MD5.rc;
}
return report_rtn (what->info.MD5.rc);
default:
@@ -157,12 +246,53 @@ static rc_t report_database(const CCReportInfoBlock *what, void *ctx)
}
}
-static rc_t CC report(const CCReportInfoBlock *what, void *ctx)
+static rc_t visiting(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+ unsigned const nn = ctx->nextNode++;
+ node_t *const nxt = &ctx->nodes[nn];
+ node_t *const cur = nxt - 1;
+
+ nxt->parent = nxt->prvSibl = nxt->nxtSibl = nxt->firstChild = -1;
+ nxt->depth = what->info.visit.depth;
+ nxt->objType = what->objType;
+ nxt->name = ctx->nextName;
+ ctx->nextName += strlen(what->objName) + 1;
+ strcpy(&ctx->names[nxt->name], what->objName);
+
+ if (nn) {
+ if (cur->depth == nxt->depth) {
+ nxt->parent = cur->parent;
+ nxt->prvSibl = nn - 1;
+ cur->nxtSibl = nn;
+ }
+ else if (cur->depth < nxt->depth) {
+ nxt->parent = nn - 1;
+ cur->firstChild = nn;
+ }
+ else {
+ unsigned sibling = cur->parent;
+
+ while (ctx->nodes[sibling].depth > nxt->depth)
+ sibling = ctx->nodes[sibling].parent;
+ nxt->parent = ctx->nodes[sibling].parent;
+ nxt->prvSibl = sibling;
+ ctx->nodes[sibling].nxtSibl = nn;
+ }
+ }
+ return 0;
+}
+
+static rc_t CC report(CCReportInfoBlock const *what, void *Ctx)
{
+ cc_context_t *ctx = Ctx;
rc_t rc = Quitting();
if (rc)
return rc;
+
+ if (what->type == ccrpt_Visit)
+ return visiting(what, ctx);
+
switch (what->objType) {
case kptDatabase:
return report_database(what, ctx);
@@ -178,50 +308,79 @@ static rc_t CC report(const CCReportInfoBlock *what, void *ctx)
}
static
-rc_t kdbcc(const KDirectory *dir, const char name[], int mode, bool *is_db)
+rc_t kdbcc(const KDirectory *dir, char const name[], uint32_t mode, bool *is_db,
+ bool is_file, node_t nodes[], char names[], INSDC_SRA_platform_id platform)
{
const KDBManager *mgr;
- rc_t rc = KDBManagerMakeRead ( & mgr, dir );
+ rc_t rc = KDBManagerMakeRead ( & mgr, NULL );
+
if ( rc == 0 )
{
- rc_t rc2 = 0;
+ cc_context_t ctx;
+ char const *objtype;
+
uint32_t level = ( mode & 4 ) ? 3 : ( mode & 2 ) ? 1 : 0;
+ if (s_IndexOnly) {
+ level |= CC_INDEX_ONLY;
+ }
+
+ memset(&ctx, 0, sizeof(ctx));
+ ctx.nodes = &nodes[0];
+ ctx.names = &names[0];
* is_db = KDBManagerExists ( mgr, kptDatabase, name );
if ( * is_db )
{
const KDatabase *db;
+
+ objtype = "database";
rc = KDBManagerOpenDBRead ( mgr, & db, name );
if ( rc == 0 )
{
- rc = KDatabaseConsistencyCheck ( db, level, report, & rc2 );
- if ( rc == 0 )
- rc = rc2;
-
+ rc = KDatabaseConsistencyCheck ( db, 0, level, report, & ctx );
+ if ( rc == 0 ) {
+ rc = ctx.rc;
+ if (s_IndexOnly)
+ { (void)LOGMSG(klogInfo, "Indices: checked"); }
+ }
KDatabaseRelease ( db );
}
}
- else
+ else
{
const KTable *tbl;
+
+ objtype = "table";
rc = KDBManagerOpenTableRead ( mgr, & tbl, name );
if ( rc == 0 )
{
- rc = KTableConsistencyCheck ( tbl, level, report, & rc2 );
- if ( rc == 0 )
- rc = rc2;
-
+ rc = KTableConsistencyCheck ( tbl, 0, level, report, & ctx,
+ platform );
+ if ( rc == 0 ) {
+ rc = ctx.rc;
+ }
+ if ( rc == 0 && s_IndexOnly ) {
+ (void)LOGMSG(klogInfo, "Index: checked");
+ }
KTableRelease ( tbl );
}
}
-
+ if (rc == 0 && ctx.num_columns == 0 && !s_IndexOnly) {
+ if (is_file) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; the file '$(file)' has no checksums or is truncated.", "file=%s", name));
+ }
+ else {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; the $(type) '$(file)' has no checksums or is empty.", "type=%s,file=%s", objtype, name));
+ }
+ }
+
KDBManagerRelease ( mgr );
}
return rc;
}
static
-rc_t vdbcc(const KDirectory *dir, const char name[], int mode, bool is_db)
+rc_t vdbcc(const KDirectory *dir, char const name[], uint32_t mode, bool is_db, bool is_file)
{
#if 0
if (mode & 8) {
@@ -241,13 +400,826 @@ rc_t vdbcc(const KDirectory *dir, const char name[], int mode, bool is_db)
return 0;
}
+typedef struct ColumnInfo_s {
+ char const *name;
+ union {
+ void const *vp;
+ char const *string;
+ bool const *tf;
+ int8_t const *i8;
+ uint8_t const *u8;
+ int16_t const *i16;
+ uint16_t const *u16;
+ int32_t const *i32;
+ uint32_t const *u32;
+ int64_t const *i64;
+ uint64_t const *u64;
+ float const *f32;
+ double const *f64;
+ } value;
+ uint32_t idx;
+ uint32_t elem_bits;
+ uint32_t elem_count;
+} ColumnInfo;
+
+static rc_t CC get_sizes_cb(const KDirectory *dir, uint32_t type, const char *name, void *data)
+{
+ struct {
+ unsigned count;
+ size_t size;
+ } *pb = data;
+
+ ++pb->count;
+ pb->size += strlen(name) + 1;
+
+ return 0;
+}
+
+static rc_t get_sizes(KDirectory const *dir, unsigned *nobj, size_t *namesz)
+{
+ rc_t rc;
+ struct {
+ unsigned count;
+ size_t size;
+ } pb;
+
+ memset(&pb, 0, sizeof(pb));
+ rc = KDirectoryVVisit(dir, true, get_sizes_cb, &pb, NULL, NULL);
+ if (rc)
+ memset(&pb, 0, sizeof(pb));
+ *nobj = pb.count;
+ *namesz = pb.size;
+ return rc;
+}
+
+static rc_t init_dbcc(KDirectory const *dir, char const name[], bool is_file, node_t **nodes, char **names)
+{
+ KDirectory const *obj;
+ unsigned nobj;
+ size_t namesz;
+ rc_t rc;
+
+ if (is_file) {
+ rc = KDirectoryOpenSraArchiveRead_silent(dir, &obj, false, name);
+ if (rc)
+ rc = KDirectoryOpenTarArchiveRead_silent(dir, &obj, false, name);
+ }
+ else {
+ rc = KDirectoryOpenDirRead(dir, &obj, false, name);
+ }
+ if (rc)
+ return rc;
+ rc = get_sizes(obj, &nobj, &namesz);
+ KDirectoryRelease(obj);
+ if (rc) {
+ *nodes = NULL;
+ *names = NULL;
+ }
+ else {
+ *nodes = malloc(nobj * sizeof(**nodes) + namesz);
+ if (nodes)
+ *names = (char *)&(*nodes)[nobj];
+ else
+ rc = RC(rcExe, rcSelf, rcConstructing, rcMemory, rcExhausted);
+ }
+ return rc;
+}
+
+static rc_t get_schema_info(KMetadata const *meta, char buffer[], size_t bsz, char **vers)
+{
+ KMDataNode const *node;
+ rc_t rc = KMetadataOpenNodeRead(meta, &node, "schema");
+
+ if (rc == 0) {
+ size_t sz;
+
+ rc = KMDataNodeReadAttr(node, "name", buffer, bsz, &sz);
+ if (rc == 0) {
+ buffer[sz] = '\0';
+ *vers = &buffer[sz];
+ while (sz) {
+ --sz;
+ if (buffer[sz] == '#') {
+ buffer[sz] = '\0';
+ *vers = &buffer[sz + 1];
+ break;
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+static rc_t get_tbl_schema_info(VTable const *tbl, char buffer[], size_t bsz, char **vers)
+{
+ KMetadata const *meta;
+ rc_t rc = VTableOpenMetadataRead(tbl, &meta);
+
+ *(*vers = &buffer[0]) = '\0';
+ if (rc == 0) rc = get_schema_info(meta, buffer, bsz, vers);
+ return 0;
+}
+
+static rc_t get_db_schema_info(VDatabase const *db, char buffer[], size_t bsz, char **vers)
+{
+ KMetadata const *meta;
+ rc_t rc = VDatabaseOpenMetadataRead(db, &meta);
+
+ *(*vers = &buffer[0]) = '\0';
+ if (rc == 0) rc = get_schema_info(meta, buffer, bsz, vers);
+ return rc;
+}
+
+static rc_t sra_dbcc_454(VTable const *tbl, char const name[])
+{
+ /* TODO: complete this */
+ return 0;
+}
+
+static rc_t sra_dbcc_fastq(VTable const *tbl, char const name[])
+{
+ static char const *const cn_FastQ[] = {
+ "READ", "QUALITY", "SPOT_LEN", "READ_START", "READ_LEN", "READ_TYPE"
+ };
+
+ VCursor const *curs;
+ rc_t rc = VTableCreateCursorRead(tbl, &curs);
+
+ if (rc == 0) {
+ unsigned const n = sizeof(cn_FastQ)/sizeof(cn_FastQ[0]);
+ ColumnInfo cols[sizeof(cn_FastQ)/sizeof(cn_FastQ[0])];
+ unsigned i;
+
+ memset(cols, 0, sizeof(cols));
+ for (i = 0; i < n; ++i) {
+ cols[i].name = cn_FastQ[i];
+ VCursorAddColumn(curs, &cols[i].idx, cols[i].name);
+ }
+ rc = VCursorOpen(curs);
+ if (rc == 0) {
+ rc = VCursorOpenRow(curs);
+ for (i = 0; i < n && rc == 0; ++i) {
+ VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits, &cols[i].value.vp, NULL, &cols[i].elem_count);
+ }
+ if ( cols[0].idx == 0 || cols[0].elem_bits == 0 || cols[0].value.vp == NULL
+ || cols[1].idx == 0 || cols[1].elem_bits == 0 || cols[1].value.vp == NULL)
+ {
+ rc = RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound);
+ }
+ else if (cols[2].idx == 0 || cols[2].elem_bits == 0 || cols[2].value.vp == NULL) {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound),
+ "Table '$(name)' is usable for fasta only; no quality data", "name=%s", name));
+ }
+ }
+ VCursorRelease(curs);
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(name)' is damaged beyond any use", "name=%s", name));
+ }
+ return rc;
+}
+
+static rc_t VTable_get_platform(VTable const *tbl, INSDC_SRA_platform_id *rslt)
+{
+ rc_t rc;
+ VCursor const *curs;
+ INSDC_SRA_platform_id platform = -1;
+
+ rc = VTableCreateCursorRead(tbl, &curs);
+ if (rc == 0) {
+ uint32_t cid;
+
+ rc = VCursorAddColumn(curs, &cid, "("sra_platform_id_t")PLATFORM");
+ if (rc == 0) {
+ rc = VCursorOpen(curs);
+ if (rc == 0) {
+ uint32_t ebits;
+ void const *data;
+ uint32_t boff;
+ uint32_t ecnt;
+
+ rc = VCursorCellDataDirect(curs, 1, cid, &ebits, &data, &boff, &ecnt);
+ if (rc == 0) {
+ if (ebits == sizeof(platform) * 8 && boff == 0 && ecnt == 1)
+ platform = ((INSDC_SRA_platform_id *)data)[0];
+ else
+ rc = RC(rcExe, rcTable, rcReading, rcType, rcUnexpected);
+ }
+ }
+ }
+ else
+ rc = 0;
+ VCursorRelease(curs);
+ }
+ rslt[0] = platform;
+ return rc;
+}
+
+static rc_t verify_table(VTable const *tbl, char const name[])
+{
+ char schemaName[1024];
+ char *schemaVers = NULL;
+ rc_t rc = 0;
+
+ get_tbl_schema_info(tbl, schemaName, sizeof(schemaName), &schemaVers);
+
+ if (schemaName[0] == '\0' || strncmp(schemaName, "NCBI:SRA:", 9) == 0) {
+ /* SRA or legacy SRA */
+ INSDC_SRA_platform_id platform;
+
+ rc = VTable_get_platform(tbl, &platform);
+ if (rc == 0) {
+ if (platform == (INSDC_SRA_platform_id)-1) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Couldn't determine SRA Platform; type of table '$(name)' is indeterminate.", "name=%s", name));
+ }
+ rc = sra_dbcc_fastq(tbl, name);
+ if (rc == 0 && platform == SRA_PLATFORM_454) {
+ rc = sra_dbcc_454(tbl, name);
+ }
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read table '$(name)'", "name=%s", name));
+ }
+ }
+ return rc;
+}
+
+static rc_t verify_mgr_table(VDBManager const *mgr, char const name[])
+{
+ VTable const *tbl;
+ VSchema *sra_schema = NULL;
+
+ for ( ; ; ) {
+ rc_t rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+ VSchemaRelease(sra_schema);
+ if (rc == 0) {
+ rc = verify_table(tbl, name);
+ VTableRelease(tbl);
+ return rc;
+ }
+ else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcSchema && sra_schema == NULL) {
+ rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open table '$(name)'", "name=%s", name));
+ return rc;
+ }
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open table '$(name)'", "name=%s", name));
+ return rc;
+ }
+ }
+}
+
+#if 0
+static rc_t verify_db_table(VDatabase const *db, char const name[])
+{
+ VTable const *tbl;
+ rc_t rc = VDatabaseOpenTableRead(db, &tbl, name);
+
+ if (rc == 0) {
+ rc = verify_table(tbl, name);
+ VTableRelease(tbl);
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open table '$(name)'", "name=%s", name));
+ }
+ return rc;
+}
+
+static rc_t align_dbcc_primary_alignment(VTable const *tbl, char const name[])
+{
+ VCursor const *curs;
+ rc_t rc = VTableCreateCursorRead(tbl, &curs);
+
+ if (rc == 0) {
+ static char const *const cn_SAM[] = {
+ "SEQ_NAME",
+ "SAM_FLAGS",
+ "REF_NAME",
+ "REF_POS",
+ "MAPQ",
+ "HAS_MISMATCH",
+ "HAS_REF_OFFSET",
+ "REF_OFFSET",
+ "MATE_REF_NAME",
+ "MATE_REF_POS",
+ "TEMPLATE_LEN",
+ "READ",
+ "QUALITY"
+ };
+ unsigned const n = sizeof(cn_SAM)/sizeof(cn_SAM[0]);
+ ColumnInfo cols[sizeof(cn_SAM)/sizeof(cn_SAM[0])];
+ unsigned i;
+
+ memset(cols, 0, sizeof(cols));
+ for (i = 0; i < n; ++i) {
+ cols[i].name = cn_SAM[i];
+ VCursorAddColumn(curs, &cols[i].idx, cols[i].name);
+ }
+ rc = VCursorOpen(curs);
+ if (rc == 0) {
+ rc = VCursorOpenRow(curs);
+ for (i = 0; i < n && rc == 0; ++i) {
+ VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits, &cols[i].value.vp, NULL, &cols[i].elem_count);
+ }
+ for (i = 0; i < n && rc == 0; ++i) {
+ if (cols[i].idx == 0 || cols[i].elem_bits == 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' could not be used to generate SAM", "name=%s", name));
+ break;
+ }
+ }
+ }
+ VCursorRelease(curs);
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)' is damaged beyond any use", "name=%s", name));
+ }
+ return rc;
+}
+#endif
+
+typedef struct id_pair_s {
+ int64_t first;
+ int64_t second;
+} id_pair_t;
+
+static int CC id_pair_cmp(void const *A, void const *B, void *ignored)
+{
+ id_pair_t const *a = A;
+ id_pair_t const *b = B;
+
+ return a->first < b->first ? -1 : a->first == b->first ? a->second < b->second ? -1 : a->second == b->second ? 0 : 1 : 1;
+}
+
+static rc_t ric_align_ref_and_align(char const dbname[],
+ VTable const *ref,
+ VTable const *align,
+ int which)
+{
+ char const *const id_col_name = which == 0 ? "PRIMARY_ALIGNMENT_IDS"
+ : which == 1 ? "SECONDARY_ALIGNMENT_IDS"
+ : which == 2 ? "EVIDENCE_ALIGNMENT_IDS"
+ : NULL;
+ rc_t rc;
+ VCursor const *curs = NULL;
+ ColumnInfo ci;
+ int64_t startId;
+ uint64_t count;
+
+ rc = VTableCreateCursorRead(align, &curs);
+ if (rc == 0) {
+ rc = VCursorAddColumn(curs, &ci.idx, "REF_ID");
+ if (rc == 0)
+ rc = VCursorOpen(curs);
+ if (rc == 0)
+ rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': alignment table can not be read", "name=%s", dbname));
+ }
+ else {
+ id_pair_t *const id_pair = malloc(sizeof(id_pair_t) * count);
+
+ if (id_pair) {
+ uint64_t i;
+ uint64_t j;
+
+ for (j = i = 0; i < count && rc == 0; ++i) {
+ int64_t const row = startId + i;
+
+ rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+ if (rc == 0) {
+ if (ci.elem_count != 1) {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcUnexpected);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': failed referential integrity check", "name=%s", dbname));
+ break;
+ }
+ else {
+ id_pair[j].second = row;
+ id_pair[j].first = ci.value.i64[0];
+ ++j;
+ }
+ }
+ else if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+ rc = 0;
+ }
+ VCursorRelease(curs); curs = NULL;
+ if (rc == 0) {
+ bool ooo_warned = false;
+ bool failed = false;
+
+ ksort(id_pair, count, sizeof(id_pair_t), id_pair_cmp, NULL);
+
+ rc = VTableCreateCursorRead(ref, &curs);
+ if (rc == 0)
+ rc = VCursorAddColumn(curs, &ci.idx, id_col_name);
+ if (rc == 0)
+ rc = VCursorOpen(curs);
+ if (rc == 0)
+ rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+ if (rc == 0) {
+ for (i = j = 0; rc == 0 && i < count; ++i) {
+ int64_t const row = startId + i;
+
+ rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+ if (rc == 0) {
+ unsigned k;
+ int64_t prvId = ci.value.i64[0];
+
+ for (k = 0; rc == 0 && k < ci.elem_count; ++k, ++j) {
+ int64_t const alignId = ci.value.i64[k];
+
+ if (!ooo_warned && prvId > alignId) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Database '$(name)': column '$(idcol)' is not ordered", "name=%s,idcol=%s", dbname, id_col_name));
+ ooo_warned = true;
+ }
+ if (id_pair[j].first != row) {
+ if (!failed) {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': column '$(idcol)' failed referential integrity check", "name=%s,idcol=%s", dbname, id_col_name));
+ }
+ failed = true;
+ }
+ else if (id_pair[j].second != alignId) {
+ if (!ooo_warned) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Database '$(name)': column '$(idcol)' might fail referential integrity check", "name=%s,idcol=%s", dbname, id_col_name));
+ }
+ }
+ prvId = alignId;
+ }
+ }
+ else if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+ rc = 0;
+ }
+ if (!failed && i < count) {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': column '$(idcol)' failed referential integrity check", "name=%s,idcol=%s", dbname, id_col_name));
+ }
+ }
+ else
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': reference table can not be read", "name=%s", dbname));
+ }
+ free(id_pair);
+ VCursorRelease(curs);
+ }
+ else {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': referential integrity could not be checked", "name=%s", dbname));
+ }
+ }
+ return rc;
+}
+
+static rc_t ric_align_seq_and_pri(char const dbname[],
+ VTable const *seq,
+ VTable const *pri)
+{
+ rc_t rc;
+ VCursor const *curs = NULL;
+ ColumnInfo ci;
+ int64_t startId;
+ uint64_t count;
+
+ rc = VTableCreateCursorRead(pri, &curs);
+ if (rc == 0) {
+ rc = VCursorAddColumn(curs, &ci.idx, "SEQ_SPOT_ID");
+ if (rc == 0)
+ rc = VCursorOpen(curs);
+ if (rc == 0)
+ rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': alignment table can not be read", "name=%s", dbname));
+ }
+ else {
+ id_pair_t *const id_pair = malloc(sizeof(id_pair_t) * count);
+
+ if (id_pair) {
+ uint64_t i;
+ uint64_t j;
+
+ for (j = i = 0; i < count && rc == 0; ++i) {
+ int64_t const row = startId + i;
+
+ rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+ if (rc == 0) {
+ if (ci.elem_count != 1) {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcUnexpected);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': failed referential integrity check", "name=%s", dbname));
+ break;
+ }
+ else {
+ id_pair[j].second = row;
+ id_pair[j].first = ci.value.i64[0];
+ ++j;
+ }
+ }
+ else if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+ rc = 0;
+ }
+ VCursorRelease(curs); curs = NULL;
+ if (rc == 0) {
+ ksort(id_pair, count, sizeof(id_pair_t), id_pair_cmp, NULL);
+
+ rc = VTableCreateCursorRead(seq, &curs);
+ if (rc == 0)
+ rc = VCursorAddColumn(curs, &ci.idx, "PRIMARY_ALIGNMENT_ID");
+ if (rc == 0)
+ rc = VCursorOpen(curs);
+ if (rc == 0) {
+ for (i = 0; rc == 0 && i < count; ++i) {
+ int64_t const row = id_pair[i].first;
+ int64_t const alignId = id_pair[i].second;
+
+ rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+ if (rc == 0) {
+ bool found = false;
+
+ for (j = 0; j < ci.elem_count; ++j)
+ found |= (alignId == ci.value.i64[j]);
+
+ if (!found) {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': column 'SEQ_SPOT_ID' failed referential integrity check", "name=%s", dbname));
+ }
+ }
+ else if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound) {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': column 'SEQ_SPOT_ID' failed referential integrity check", "name=%s", dbname));
+ }
+ else
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': sequence table can not be read", "name=%s", dbname));
+ }
+ }
+ else
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': sequence table can not be read", "name=%s", dbname));
+ }
+ free(id_pair);
+ }
+ else {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': referential integrity could not be checked", "name=%s", dbname));
+ }
+ VCursorRelease(curs);
+ }
+ return rc;
+}
+
+/* database referential integrity check for alignment database */
+static rc_t dbric_align(char const dbname[],
+ VTable const *pri,
+ VTable const *seq,
+ VTable const *ref)
+{
+ rc_t rc = 0;
+
+ if ((rc == 0 || exhaustive) && (pri != NULL && seq != NULL)) {
+ rc_t rc2 = ric_align_seq_and_pri(dbname, seq, pri);
+
+ if (rc2 == 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok", "dbname=%s", dbname));
+ }
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+ if ((rc == 0 || exhaustive) && (pri != NULL && ref != NULL)) {
+ rc_t rc2 = ric_align_ref_and_align(dbname, ref, pri, 0);
+
+ if (rc2 == 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok", "dbname=%s", dbname));
+ }
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t verify_database_align(VDatabase const *db, char const name[], node_t const nodes[], char const names[])
+{
+ rc_t rc = 0;
+ unsigned tables = 0;
+ node_t const *tbl = &nodes[nodes[0].firstChild];
+ enum table_bits {
+ tbEvidenceInterval = ( 1u << 0 ),
+ tbEvidenceAlignment = ( 1u << 1 ),
+ tbPrimaryAlignment = ( 1u << 2 ),
+ tbReference = ( 1u << 3 ),
+ tbSequence = ( 1u << 4 ),
+ tbSecondaryAlignment = ( 1u << 5 )
+ };
+
+ if (nodes[0].firstChild) {
+ for ( ; ; ) {
+ char const *tname = &names[tbl->name];
+ unsigned this_table = 0;
+
+ if (tbl->objType == kptTable) {
+ switch (tname[0]) {
+ case 'E':
+ if (strcmp(tname, "EVIDENCE_INTERVAL") == 0)
+ this_table |= tbEvidenceInterval;
+ else if (strcmp(tname, "EVIDENCE_ALIGNMENT") == 0)
+ this_table |= tbEvidenceAlignment;
+ break;
+ case 'P':
+ if (strcmp(tname, "PRIMARY_ALIGNMENT") == 0)
+ this_table |= tbPrimaryAlignment;
+ break;
+ case 'R':
+ if (strcmp(tname, "REFERENCE") == 0)
+ this_table |= tbReference;
+ break;
+ case 'S':
+ if (strcmp(tname, "SEQUENCE") == 0)
+ this_table |= tbSequence;
+ else if (strcmp(tname, "SECONDARY_ALIGNMENT") == 0)
+ this_table |= tbSecondaryAlignment;
+ break;
+ }
+ if (this_table == 0) {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcExe, rcDatabase, rcValidating, rcTable, rcUnexpected),
+ "Database '$(name)' contains unexpected table '$(table)'",
+ "name=%s,table=%s", name, tname));
+ }
+ tables |= this_table;
+ }
+ else {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcExe, rcDatabase, rcValidating, rcType, rcUnexpected),
+ "Database '$(name)' contains unexpected object '$(obj)'",
+ "name=%s,obj=%s", name, tname));
+ }
+ if (tbl->nxtSibl > 0)
+ tbl = &nodes[tbl->nxtSibl];
+ else
+ break;
+ }
+ }
+ if (tables == tbSequence) {
+ /* sequence data only */
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' contains only unaligned reads", "name=%s", name));
+ }
+ else if ( (tables & tbReference) == 0
+ || (tables & tbPrimaryAlignment) == 0)
+ {
+ /* missing reference or primary alignment */
+ (void)PLOGERR(klogWarn, (klogWarn, rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete),
+ "Database '$(name)' does not contain all required tables",
+ "name=%s", name));
+ }
+ else if ( ((tables & tbEvidenceAlignment) != 0)
+ != ((tables & tbEvidenceInterval ) != 0))
+ {
+ /* both must be present or both must be absent */
+ (void)PLOGERR(klogWarn, (klogWarn, rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete),
+ "Database '$(name)' does not contain all required tables",
+ "name=%s", name));
+ }
+ while (ref_int_check) {
+ VTable const *pri = NULL;
+ VTable const *seq = NULL;
+ VTable const *ref = NULL;
+
+ if ((tables & tbPrimaryAlignment) != 0) {
+ rc = VDatabaseOpenTableRead(db, &pri, "PRIMARY_ALIGNMENT");
+ if (rc) break;
+ }
+ if ((tables & tbSequence) != 0) {
+ rc = VDatabaseOpenTableRead(db, &seq, "SEQUENCE");
+ if (rc) break;
+ }
+ if ((tables & tbReference) != 0) {
+ rc = VDatabaseOpenTableRead(db, &ref, "REFERENCE");
+ if (rc) break;
+ }
+ rc = dbric_align(name, pri, seq, ref);
+ break;
+ }
+ return rc;
+}
+
+static rc_t verify_database(VDatabase const *db, char const name[], node_t const nodes[], char const names[])
+{
+ char schemaName[1024];
+ char *schemaVers = NULL;
+ rc_t rc;
+
+ rc = get_db_schema_info(db, schemaName, sizeof(schemaName), &schemaVers);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failed to find database schema for '$(name)'", "name=%s", name));
+ }
+ else if (strncmp(schemaName, "NCBI:var:db:", 12) == 0) {
+ /* TODO: verify NCBI:var:db:* */
+ }
+ else if (strncmp(schemaName, "NCBI:WGS:db:", 12) == 0) {
+ /* TODO: verify NCBI:WGS:db:* */
+ }
+ else if (strncmp(schemaName, "NCBI:align:db:", 14) == 0) {
+ rc = verify_database_align(db, name, nodes, names);
+ }
+ else if (strcmp(schemaName, "NCBI:SRA:PacBio:smrt:db") == 0) {
+ /* TODO: verify NCBI:SRA:PacBio:smrt:db */
+ }
+ else {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(rcExe, rcDatabase, rcValidating, rcType, rcUnrecognized),
+ "Database '$(name)' has unrecognized type '$(type)'",
+ "name=%s,type=%s", name, schemaName));
+ }
+ return rc;
+}
+
+static rc_t verify_mgr_database(VDBManager const *mgr, char const name[], node_t const nodes[], char const names[])
+{
+ VDatabase const *child;
+ rc_t rc = VDBManagerOpenDBRead(mgr, &child, NULL, name);
+
+ if (rc == 0) {
+ rc = verify_database(child, name, nodes, names);
+ VDatabaseRelease(child);
+ }
+ return rc;
+}
+
+static rc_t sra_dbcc(KDirectory const *dir, char const name[], node_t const nodes[], char const names[])
+{
+ const VDBManager *mgr;
+ rc_t rc = VDBManagerMakeRead(&mgr, NULL);
+
+ if (rc) return rc;
+
+ if (nodes[0].objType == kptDatabase)
+ rc = verify_mgr_database(mgr, name, nodes, names);
+ else
+ rc = verify_mgr_table(mgr, name);
+ VDBManagerRelease(mgr);
+
+ return rc;
+}
+
static
-rc_t dbcc(const KDirectory *dir, const char name[], int mode, bool *is_db)
+rc_t get_platform(const KDirectory *dir, const VDBManager *aMgr,
+ const VTable *aTbl, char const name[], INSDC_SRA_platform_id *platform)
{
- rc_t rc = kdbcc(dir, name, mode, is_db);
+ rc_t rc = 0;
+ const VDBManager *mgr = aMgr;
+ const VTable *tbl = aTbl;
+ assert(name && platform);
+ if (mgr == NULL) {
+ rc = VDBManagerMakeRead(&mgr, NULL);
+ if (rc != 0) {
+ return rc;
+ }
+ }
+ if (tbl == NULL) {
+ VSchema *sra_schema = NULL;
+ for ( ; rc == 0; ) {
+ rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+ VSchemaRelease(sra_schema);
+ if (rc == 0) {
+ rc = VTable_get_platform(tbl, platform);
+ break;
+ }
+ else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcSchema
+ && sra_schema == NULL)
+ {
+ rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+ }
+ }
+ }
+ if (aTbl == NULL) {
+ VTableRelease(tbl);
+ }
+ if (aMgr == NULL) {
+ VDBManagerRelease(mgr);
+ }
+ return rc;
+}
- if ( rc == 0 )
- rc = vdbcc(dir, name, mode, * is_db);
+static
+rc_t dbcc(const char *src_path, const KDirectory *dir,
+ char const name[], uint32_t mode, bool *is_db, bool is_file)
+{
+ rc_t rc;
+ node_t *nodes = NULL;
+ char *names;
+
+ assert(src_path);
+
+ rc = init_dbcc(dir, name, is_file, &nodes, &names);
+ if (rc == 0) {
+ INSDC_SRA_platform_id platform = SRA_PLATFORM_UNDEFINED;
+ get_platform(dir, NULL, NULL, src_path, &platform);
+ rc = kdbcc(dir, src_path, mode, is_db, is_file, nodes, names, platform);
+ if ( rc == 0 )
+ rc = vdbcc(dir, src_path, mode, * is_db, is_file);
+ }
+ if (rc == 0)
+ rc = sra_dbcc(dir, src_path, nodes, names);
+
+ free(nodes);
return rc;
}
@@ -259,30 +1231,68 @@ static char const* const defaultLogLevel =
"info";
#endif
-/*******************************************************************************
+/******************************************************************************
* Usage
- *******************************************************************************/
+ ******************************************************************************/
const char UsageDefaultName[] = "sra-dbcc";
-rc_t CC UsageSummary(const char * name) {return 0;}
-static void usage(const char *progName)
+rc_t CC UsageSummary(const char *prog_name)
{
- const char* p = strrchr(progName, '/');
- p = p ? p + 1 : progName;
- printf("\nUsage: %s [options] table\n\n", p);
- printf(
- " -5|--md5 Check components md5s if present, fail otherwise,\n"
- " unless other checks are requested (default: yes)\n"
- " -b|--blob-crc Check blobs CRC32 (default: no)\n"
-#if 0
- " -i|--index Check 'skey' index (default: no)\n"
+ return KOutMsg("Usage: %s [options] table\n\n", prog_name);
+}
+
+char const *help_text[] =
+{
+ "Check components md5s if present, fail unless other checks are requested (default: yes)", NULL,
+ "Check blobs CRC32 (default: no)", NULL,
+ "Check 'skey' index (default: no)", NULL,
+ "Continue checking table for all possible errors (default: no)", NULL,
+ "Check data referential integrity for databases (default: no)", NULL,
+ "Check index-only with blobs CRC32 (default: no)", NULL
+};
+
+OptDef Options[] =
+{
+ { "md5" , "5", NULL, &help_text[0], 1, false, false },
+ { "blob-crc" , "b", NULL, &help_text[2], 1, false, false },
+#if CHECK_INDEX
+ { "index" , "i", NULL, &help_text[4], 1, false, false },
#endif
- " -x|--exhaustive Continue checking table for all possible errors\n"
- " ( default is to exit after first error )\n"
- "\n"
- " -h|--help This help\n"
- " -V|--version Program version\n"
- "\n");
+ { "exhaustive", "x", NULL, &help_text[6], 1, false, false },
+ { "dri" , "d", NULL, &help_text[8], 1, false, false },
+
+ /* should be the last one here: it is not printed by --help */
+ { "index-only",NULL, NULL, &help_text[10], 1, false, false }
+};
+#define NOPTS ( sizeof(Options)/sizeof(Options[0]))
+
+rc_t CC Usage (const Args * args)
+{
+ const char * progname = UsageDefaultName;
+ const char * fullpath = UsageDefaultName;
+ rc_t rc;
+ unsigned i;
+
+ if (args == NULL)
+ rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ else
+ rc = ArgsProgram (args, &fullpath, &progname);
+ if (rc)
+ progname = fullpath = UsageDefaultName;
+
+ UsageSummary (progname);
+
+ KOutMsg ("Options:\n");
+
+ for (i = 0; i != NOPTS - 1; ++i) {
+ HelpOptionLine(Options[i].aliases, Options[i].name, NULL, Options[i].help);
+ }
+
+ HelpOptionsStandard ();
+
+ HelpVersion (fullpath, KAppVersion());
+
+ return 0;
}
uint32_t CC KAppVersion(void)
@@ -290,144 +1300,278 @@ uint32_t CC KAppVersion(void)
return SRA_DBCC_VERS;
}
+#ifdef MAC
+#define SRAPathMake(...) (RC(rcRuntime, rcDylib, rcSearching, rcFunction, rcUnsupported))
+#define SRAPathFind(...) (RC(rcRuntime, rcDylib, rcSearching, rcFunction, rcUnsupported))
+#define SRAPathRelease(...) ((rc_t)(0))
+#endif
+
rc_t CC KMain ( int argc, char *argv [] )
{
- rc_t rc = 0;
- int i;
+ Args * args;
+ char *src_dir_path = NULL;
char *src_path = NULL;
- char *tbl_name = NULL;
+ char *obj_name = NULL;
bool md5_chk = true, md5_chk_explicit = false;
bool blob_crc = false;
bool index_chk = false;
+ bool is_file = false;
const KDirectory *src_dir = NULL;
+/* char path_buffer [ 4096 ]; */
+ VFSManager *mgr = NULL;
+ VResolver *resolver = NULL;
- char path_buffer [ 4096 ];
+ rc_t rc = KLogLevelSet ( klogInfo );
- KLogLevelSet(klogInfo);
+ if ( rc == 0 )
+ rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, NOPTS);
- if (argc < 2)
- {
- usage(argv[0]);
- return RC(rcExe, rcArgv, rcReading, rcParam, rcUnknown);
+ if (rc == 0) {
+ rc = VFSManagerMake(&mgr);
+ if (rc != 0) {
+ LOGERR(klogErr, rc, "Failed to VFSManagerMake()");
+ }
}
- for (i = 1; rc == 0 && i < argc; i++)
- {
- char *arg = argv[i];
- if (arg[0] != '-' && src_path == NULL)
- {
+ if (rc == 0) {
+ rc = VFSManagerGetResolver(mgr, &resolver);
+ if (rc != 0) {
+ LOGERR(klogInt, rc, "Cannot VFSManagerGetResolver");
+ }
+ else {
+ VResolverRemoteEnable(resolver, vrAlwaysDisable);
+ }
+ }
+
+ RELEASE(VFSManager, mgr);
+
+ while (rc == 0) {
+ uint32_t pcount;
+
+ rc = ArgsParamCount(args, &pcount); if (rc) break;
+ if (pcount == 1) {
KDirectory *dir;
rc = KDirectoryNativeDir(&dir);
if (rc == 0)
{
- src_path = arg;
- tbl_name = strrchr(src_path, '/');
- if (tbl_name != NULL)
+ char const *value;
+
+ rc = ArgsParamValue (args, 0, &value); if (rc) break;
+ src_dir_path = strdup(value);
+ src_path = strdup(value);
+ obj_name = strrchr(src_dir_path, '/');
+ if ( obj_name != NULL && obj_name [ 1 ] == 0 )
+ {
+ * obj_name = 0;
+ obj_name = strrchr(src_dir_path, '/');
+ }
+ if (obj_name != NULL)
{
- if (tbl_name == src_path)
- src_path = "/";
- *tbl_name++ = '\0';
+ if (obj_name == src_dir_path) {
+ src_dir_path[0] = '/';
+ src_dir_path[1] = '\0';
+ }
+ *obj_name++ = '\0';
}
else
{
- SRAPath *pmgr;
-
- /* check for accession */
- rc = SRAPathMake ( & pmgr, dir );
- if ( rc == 0 )
- {
- rc = SRAPathFind ( pmgr, src_path, path_buffer, sizeof path_buffer );
+ uint32_t type
+ = KDirectoryPathType(dir, src_path) & ~kptAlias;
+ if (type != kptFile && type != kptDir) {
+ /* check for accession */
+ VPath *acc = NULL;
+ const VPath *pLocal = NULL;
+ const String *local = NULL;
+
+ if (rc == 0) {
+ rc = VPathMake(&acc, src_path);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "VPathMake($(path)) failed",
+ PLOG_S(path), src_path));
+ }
+ else {
+ rc = VResolverLocal(resolver, acc, &pLocal);
+ }
+ }
+ if (rc == 0) {
+ rc = VPathMakeString(pLocal, &local);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "VPathMake(local $(path)) failed",
+ PLOG_S(path), src_path));
+ }
+ }
if ( rc == 0 )
{
+ PLOGMSG(klogInfo, (klogInfo,
+ "Validating '$(path)'...", PLOG_S(path),
+ local->addr));
/* use mapped path */
- src_path = path_buffer;
- tbl_name = strrchr(src_path, '/');
- if ( tbl_name == NULL )
- tbl_name = src_path;
+ free(src_path);
+ src_path = string_dup(local->addr, local->size);
+ free(src_dir_path);
+ src_dir_path = string_dup(local->addr, local->size);
+ obj_name = strrchr(src_dir_path, '/');
+ if ( obj_name == NULL )
+ obj_name = src_dir_path;
else
{
- if ( tbl_name == src_path )
- src_path = "/";
- * tbl_name ++ = '\0';
+ if ( obj_name == src_dir_path ) {
+ src_dir_path[0] = '/';
+ src_dir_path[1] = '\0';
+ }
+ * obj_name ++ = '\0';
}
}
-
- (void)SRAPathRelease ( pmgr );
+
+ RELEASE(VPath, pLocal);
+ RELEASE(VPath, acc);
+ free((void*)local);
}
-
+ else {
+ char full[PATH_MAX];
+ rc = KDirectoryResolvePath(dir, true,
+ full, sizeof full, src_path);
+ if (rc == 0) {
+ PLOGMSG(klogInfo, (klogInfo,
+ "Validating '$(path)'...", PLOG_S(path),
+ full));
+ /* use mapped path */
+ free(src_path);
+ src_path = string_dup(full, strlen(full));
+ free(src_dir_path);
+ src_dir_path = string_dup(full, strlen(full));
+ obj_name = strrchr(src_dir_path, '/');
+ if ( obj_name == NULL )
+ obj_name = src_dir_path;
+ else
+ {
+ if ( obj_name == src_dir_path ) {
+ src_dir_path[0] = '/';
+ src_dir_path[1] = '\0';
+ }
+ * obj_name ++ = '\0';
+ }
+ }
+ }
+
if ( rc != 0 )
{
/* appears to be a simple name */
- tbl_name = src_path;
- src_path = ".";
+ obj_name = strdup(src_dir_path);
+ src_dir_path[0] = '.';
+ src_dir_path[1] = '\0';
}
}
- rc = KDirectoryOpenDirRead(dir, &src_dir, false, src_path);
+ rc = KDirectoryOpenDirRead(dir, &src_dir, false, src_dir_path);
KDirectoryRelease(dir);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to open '$(dir)'", "dir=%s", src_dir_path));
+ break;
+ }
+ else {
+ uint32_t const obj_type = KDirectoryPathType(src_dir, obj_name) & (~((uint32_t)kptAlias));
+
+ switch (obj_type) {
+ case kptFile:
+ is_file = true;
+ break;
+ default:
+ break;
+ }
+ }
}
}
- else if (strcmp(arg, "-5") == 0 || strcmp(arg, "--md5") == 0 ) {
- md5_chk_explicit = true;
+ else {
+ MiniUsage(args);
+ ArgsWhack(args);
+ exit(EXIT_FAILURE);
}
- else if (strcmp(arg, "-b") == 0 || strcmp(arg, "--blob-crc") == 0 ) {
- blob_crc = true;
+
+ rc = ArgsOptionCount(args, "md5", &pcount); if (rc) break;
+ md5_chk_explicit = md5_required = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
+ }
+
+ rc = ArgsOptionCount(args, "blob-crc", &pcount); if (rc) break;
+ blob_crc = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
}
- else if (strcmp(arg, "-x") == 0 || strcmp(arg, "--exhaustive") == 0 ) {
- exhaustive = true;
+
+ rc = ArgsOptionCount(args, "exhaustive", &pcount); if (rc) break;
+ exhaustive = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
}
-#if 1
- else if (strcmp(arg, "-i") == 0 || strcmp(arg, "--index") == 0 ) {
- index_chk = true;
+
+ rc = ArgsOptionCount(args, "dri", &pcount); if (rc) break;
+ ref_int_check = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
}
-#endif
- else if (strcmp(arg, "-h") == 0 || strcmp(arg, "--help") == 0 ) {
- usage(argv[0]);
- return 0;
+
+#if CHECK_INDEX
+ rc = ArgsOptionCount(args, "index", &pcount); if (rc) break;
+ index_chk = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
}
- else if (strcmp(arg, "-V") == 0 || strcmp(arg, "--version") == 0 ) {
- printf("Version: %u.%u.%u\n", KAppVersion() >> 24, (KAppVersion() >> 16) & 0xFF, KAppVersion() & 0xFFFF);
- return 0;
+#endif
+
+ rc = ArgsOptionCount(args, "index-only", &pcount);
+ if (rc) {
+ break;
}
- else {
- usage(argv[0]);
- rc = RC(rcExe, rcArgv, rcReading, rcParam, rcUnknown);
+ if (pcount > 0) {
+ s_IndexOnly = blob_crc = true;
}
- }
+
- if (rc == 0)
- {
if (blob_crc || index_chk)
{
/* if blob or index is requested, md5 is off unless explicitly requested */
md5_chk = md5_chk_explicit;
}
-
- if (src_path == NULL)
- rc = RC(rcExe, rcArgv, rcReading, rcParam, rcNotFound);
- else
+
{
bool is_db = false;
- rc = dbcc(src_dir, tbl_name, (md5_chk ? 1 : 0)|(blob_crc ? 2 : 0)|(index_chk ? 4 : 0), & is_db);
+ rc = dbcc(src_path, src_dir, obj_name, (md5_chk ? 1 : 0)|(blob_crc ? 2 : 0)|(index_chk ? 4 : 0), & is_db, is_file);
if ( is_db )
{
if ( rc != 0 )
- (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(db)' check failed", PLOG_S(db), tbl_name));
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(db)' check failed", PLOG_S(db), obj_name));
else
- (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(db)' ok", PLOG_S(db), tbl_name));
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(db)' is consistent", PLOG_S(db), obj_name));
}
else
{
if ( rc != 0 )
- (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(table)' check failed", PLOG_S(table), tbl_name));
+ (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(table)' check failed", PLOG_S(table), obj_name));
else
- (void)PLOGMSG(klogInfo, (klogInfo, "Table '$(table)' ok", PLOG_S(table), tbl_name));
+ (void)PLOGMSG(klogInfo, (klogInfo, "Table '$(table)' is consistent", PLOG_S(table), obj_name));
}
}
+ break;
}
- KDirectoryRelease(src_dir);
-
-
+ RELEASE(VResolver, resolver);
+ RELEASE(KDirectory, src_dir);
+ free(src_path);
+
return rc;
}
diff --git a/tools/sra-dbcc/sra-dbcc.vers b/tools/sra-dbcc/sra-dbcc.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dbcc/sra-dbcc.vers
+++ b/tools/sra-dbcc/sra-dbcc.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dbcc/sra-dbcc.vers.h b/tools/sra-dbcc/sra-dbcc.vers.h
deleted file mode 100644
index 26b549c..0000000
--- a/tools/sra-dbcc/sra-dbcc.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRA_DBCC_VERS 0x02010007
diff --git a/tools/sra-dump/Makefile b/tools/sra-dump/Makefile
index 88c228b..7e2d4cc 100644
--- a/tools/sra-dump/Makefile
+++ b/tools/sra-dump/Makefile
@@ -46,15 +46,13 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# std
@@ -65,6 +63,13 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
@@ -92,21 +97,18 @@ SRADUMP_OBJ = \
SRADUMP_LIB = \
-lkapp \
-lsradb \
- -ssrapath \
- -ssraschema \
-lalign-reader \
- -daxf \
- -dsraxf \
- -dvxf \
+ $(READONLY_SCHEMA_LIBS) \
-lvdb \
-lkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
-dksrch \
+ -lkproc \
-lklib \
- -ldl \
- -lz \
- -lbz2 \
-lm
$(BINDIR)/sra-dump: $(SRADUMP_OBJ)
@@ -120,27 +122,27 @@ sradump_tag:
#
DUMP_COMMON_SRC = \
factory \
+ fasta_dump \
core
DUMP_COMMON_LIB = \
- -lsradb \
- -lsrareader \
- -ssrapath \
- -ssraschema \
+ -lkapp \
-dsraxf \
- -dalign-reader \
-daxf \
- -lkapp \
-dvxf \
+ -lsradb \
+ -lsrareader \
+ -lalign-reader \
-lvdb \
-lkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
-dksrch \
+ -lkproc \
-lklib \
- -ldl \
- -lz \
- -lbz2 \
-lm
#-------------------------------------------------------------------------------
diff --git a/tools/sra-dump/abi-dump.vers b/tools/sra-dump/abi-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/abi-dump.vers
+++ b/tools/sra-dump/abi-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/abi-dump.vers.h b/tools/sra-dump/abi-dump.vers.h
deleted file mode 100644
index fc0e775..0000000
--- a/tools/sra-dump/abi-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ABI_DUMP_VERS 0x02010007
diff --git a/tools/sra-dump/abi.c b/tools/sra-dump/abi.c
index 60ebd9c..3cdfdcc 100644
--- a/tools/sra-dump/abi.c
+++ b/tools/sra-dump/abi.c
@@ -25,6 +25,7 @@
*/
#include <klib/log.h>
#include <klib/container.h>
+#include <klib/printf.h>
#include <kapp/main.h>
#include <sra/sradb.h>
@@ -41,6 +42,8 @@
#include "abi-dump.vers.h"
#include "debug.h"
+#define DATABUFFERINITSIZE 10240
+
/* ============== Absolid read type (bio/tech) filter ============================ */
typedef struct Absolid2BioFilter_struct {
@@ -76,7 +79,7 @@ rc_t Absolid2BioFilter_GetKey(const SRASplitter* cself, const char** key, spotid
*key = "";
copy_readmask(new_mask, readmask);
}
- } else if( GetRCState(rc) == rcNotFound ) {
+ } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
*key = NULL;
rc = 0;
@@ -155,8 +158,8 @@ rc_t Absolid2BioFilterFactory_Make(const SRASplitterFactory** cself, const char*
typedef struct AbsolidLabelerFilter_struct {
const AbsolidReader* reader;
bool is_platform_cs_native;
- SRASplitter_Keys keys[4];
- size_t key_sz[4];
+ SRASplitter_Keys keys[7];
+ size_t key_sz[7];
} AbsolidLabelerFilter;
static
@@ -208,7 +211,7 @@ rc_t AbsolidLabelerFilter_GetKeySet(const SRASplitter* cself, const SRASplitter_
q++;
}
}
- } else if( GetRCState(rc) == rcNotFound ) {
+ } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
rc = 0;
}
@@ -254,10 +257,16 @@ rc_t AbsolidLabelerFilterFactory_NewObj(const SRASplitterFactory* cself, const S
((AbsolidLabelerFilter*)(*splitter))->keys[1].key = "R3";
((AbsolidLabelerFilter*)(*splitter))->keys[2].key = "F5-P2";
((AbsolidLabelerFilter*)(*splitter))->keys[3].key = "F5-BC";
+ ((AbsolidLabelerFilter*)(*splitter))->keys[4].key = "F5-RNA";
+ ((AbsolidLabelerFilter*)(*splitter))->keys[5].key = "F5-DNA";
+ ((AbsolidLabelerFilter*)(*splitter))->keys[6].key = "F3-DNA";
((AbsolidLabelerFilter*)(*splitter))->key_sz[0] = 2;
((AbsolidLabelerFilter*)(*splitter))->key_sz[1] = 2;
((AbsolidLabelerFilter*)(*splitter))->key_sz[2] = 5;
((AbsolidLabelerFilter*)(*splitter))->key_sz[3] = 5;
+ ((AbsolidLabelerFilter*)(*splitter))->key_sz[4] = 6;
+ ((AbsolidLabelerFilter*)(*splitter))->key_sz[5] = 6;
+ ((AbsolidLabelerFilter*)(*splitter))->key_sz[6] = 6;
}
}
return rc;
@@ -333,7 +342,7 @@ rc_t AbsolidReadLenFilter_GetKey(const SRASplitter* cself, const char** key, spo
}
copy_readmask(new_mask, readmask);
}
- } else if( GetRCState(rc) == rcNotFound ) {
+ } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
*key = NULL;
rc = 0;
@@ -417,7 +426,7 @@ rc_t AbsolidReadLenFilterFactory_Make(const SRASplitterFactory** cself, const ch
typedef struct AbsolidQFilter_struct {
const AbsolidReader* reader;
- char buf[512 * 1024];
+ KDataBuffer* b;
} AbsolidQFilter;
@@ -444,8 +453,9 @@ rc_t AbsolidQFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t
clear_readmask(new_mask);
for(readId = 0; rc == 0 && readId < num_reads; readId++) {
if( (rc = AbsolidReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len)) == 0 ) {
- if( (rc = AbsolidReaderBase(self->reader, readId + 1, self->buf, sizeof(self->buf), NULL)) == 0 ) {
- if( strncmp(&self->buf[1], colorStr, xLen) == 0 && strcmp(&self->buf[read_len - xLen + 1], colorStr) == 0 ) {
+ IF_BUF((AbsolidReaderBase(self->reader, readId + 1, self->b->base, KDataBufferBytes(self->b), NULL)), self->b, read_len) {
+ const char* b = self->b->base;
+ if( strncmp(&b[1], colorStr, xLen) == 0 && strcmp(&b[read_len - xLen + 1], colorStr) == 0 ) {
continue;
}
}
@@ -455,7 +465,7 @@ rc_t AbsolidQFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t
*key = "";
copy_readmask(new_mask, readmask);
}
- } else if( GetRCState(rc) == rcNotFound ) {
+ } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
*key = NULL;
rc = 0;
@@ -469,6 +479,7 @@ typedef struct AbsolidQFilterFactory_struct {
const SRATable* table;
bool clip;
const AbsolidReader* reader;
+ KDataBuffer buf;
} AbsolidQFilterFactory;
static
@@ -479,7 +490,7 @@ rc_t AbsolidQFilterFactory_Init(const SRASplitterFactory* cself)
if( self == NULL ) {
rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else {
+ } else if( (rc = KDataBufferMakeBytes(&self->buf, DATABUFFERINITSIZE)) == 0 ) {
rc = AbsolidReaderMake(&self->reader, self->table, self->accession,
false, self->clip, 0, 0, 0, false);
}
@@ -497,6 +508,7 @@ rc_t AbsolidQFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASpli
} else {
if( (rc = SRASplitter_Make(splitter, sizeof(AbsolidQFilter), AbsolidQFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
((AbsolidQFilter*)(*splitter))->reader = self->reader;
+ ((AbsolidQFilter*)(*splitter))->b = &self->buf;
}
}
return rc;
@@ -507,6 +519,7 @@ void AbsolidQFilterFactory_Release(const SRASplitterFactory* cself)
{
if( cself != NULL ) {
AbsolidQFilterFactory* self = (AbsolidQFilterFactory*)cself;
+ KDataBufferWhack(&self->buf);
AbsolidReaderWhack(self->reader);
}
}
@@ -535,10 +548,10 @@ rc_t AbsolidQFilterFactory_Make(const SRASplitterFactory** cself, const char* ac
typedef struct AbsolidFormatterSplitter_struct {
const AbsolidReader* reader;
- char pfx[1024];
+ char pfx[10 * 1024];
int pfx_sz;
- char head[10 * 1024];
- char buf[1024 * 1024];
+ KDataBuffer* hb;
+ KDataBuffer* b;
} AbsolidFormatterSplitter;
static
@@ -566,74 +579,73 @@ rc_t AbsolidFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, cons
if( head_sz >= sizeof(self->pfx) ) {
rc = RC(rcSRA, rcString, rcCopying, rcBuffer, rcInsufficient);
} else {
- int x;
self->pfx_sz = head_sz;
memcpy(self->pfx, prefix, head_sz);
- x = snprintf(self->head, sizeof(self->head) - 1, "#\n# Title: %.*s\n#\n", self->pfx_sz, self->pfx);
- if( x < 0 || x == sizeof(self->head) - 1 ) {
- rc = RC(rcSRA, rcType, rcExecuting, rcBuffer, rcInsufficient);
- }
- head_sz = x;
+ IF_BUF((string_printf(self->hb->base, KDataBufferBytes(self->hb), &head_sz,
+ "#\n# Title: %.*s\n#\n", self->pfx_sz, self->pfx)), self->hb, head_sz);
}
} else {
head_sz = 0;
}
}
- if( rc == 0 && (rc = AbsolidReaderHeader(self->reader, readId,
- &self->head[head_sz], sizeof(self->head) - head_sz - 1, &writ)) == 0 ) {
- head_sz += writ;
- self->head[head_sz++] = '\n';
+ if( rc == 0 ) {
+ char* h = self->hb->base;
+ IF_BUF((AbsolidReaderHeader(self->reader, readId, &h[head_sz],
+ KDataBufferBytes(self->hb) - head_sz - 1, &writ)), self->hb, writ + head_sz + 1) {
+ head_sz += writ;
+ h[head_sz++] = '\n';
+ }
}
if( rc == 0 && (rc = SRASplitter_FileActivate(cself, ".csfasta")) == 0 ) {
- if( (rc = AbsolidReaderBase(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0) {
- if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ IF_BUF((AbsolidReaderBase(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
}
}
}
if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_QV.qual")) == 0 ) {
- if( (rc = AbsolidReaderQuality(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ IF_BUF((AbsolidReaderQuality(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
}
}
}
if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledFTC.fasta")) == 0 ) {
- if( (rc = AbsolidReaderSignalFTC(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ IF_BUF((AbsolidReaderSignalFTC(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
}
}
}
if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledCY3.fasta")) == 0 ) {
- if( (rc = AbsolidReaderSignalCY3(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ IF_BUF((AbsolidReaderSignalCY3(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
}
}
}
if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledTXR.fasta")) == 0 ) {
- if( (rc = AbsolidReaderSignalTXR(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ IF_BUF((AbsolidReaderSignalTXR(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
}
}
}
if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledCY5.fasta")) == 0 ) {
- if( (rc = AbsolidReaderSignalCY5(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ IF_BUF((AbsolidReaderSignalCY5(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
}
}
}
}
- } else if( GetRCState(rc) == rcNotFound ) {
+ } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
rc = 0;
}
@@ -647,6 +659,8 @@ typedef struct AbsolidFormatterFactory_struct {
bool orig;
bool clip;
const AbsolidReader* reader;
+ KDataBuffer hbuf;
+ KDataBuffer buf;
} AbsolidFormatterFactory;
static
@@ -657,7 +671,8 @@ rc_t AbsolidFormatterFactory_Init(const SRASplitterFactory* cself)
if( self == NULL ) {
rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
- } else {
+ } else if( (rc = KDataBufferMakeBytes(&self->hbuf, DATABUFFERINITSIZE)) == 0 &&
+ (rc = KDataBufferMakeBytes(&self->buf, DATABUFFERINITSIZE)) == 0 ) {
rc = AbsolidReaderMake(&self->reader, self->table, self->accession,
self->orig, !self->clip, 0, 0, 0, true);
}
@@ -677,6 +692,9 @@ rc_t AbsolidFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRASp
((AbsolidFormatterSplitter*)(*splitter))->reader = self->reader;
((AbsolidFormatterSplitter*)(*splitter))->pfx[0] = '\0';
((AbsolidFormatterSplitter*)(*splitter))->pfx_sz = 0;
+ ((AbsolidFormatterSplitter*)(*splitter))->hb = &self->hbuf;
+ ((AbsolidFormatterSplitter*)(*splitter))->b = &self->buf;
+
}
}
return rc;
@@ -687,6 +705,8 @@ void AbsolidFormatterFactory_Release(const SRASplitterFactory* cself)
{
if( cself != NULL ) {
AbsolidFormatterFactory* self = (AbsolidFormatterFactory*)cself;
+ KDataBufferWhack(&self->hbuf);
+ KDataBufferWhack(&self->buf);
AbsolidReaderWhack(self->reader);
}
}
diff --git a/tools/sra-dump/core.c b/tools/sra-dump/core.c
index 3c59be2..5388297 100644
--- a/tools/sra-dump/core.c
+++ b/tools/sra-dump/core.c
@@ -23,10 +23,19 @@
* ===========================================================================
*
*/
+
+#include <vdb/table.h> /* VTableRelease */
+#include <kfg/config.h> /* KConfigDisableUserSettings */
+
+#include <vdb/manager.h> /* VDBManagerRelease */
+#include <vdb/dependencies.h> /* UIError */
+#include <klib/report.h> /* ReportInit */
+#include <vdb/report.h>
#include <klib/container.h>
#include <klib/log.h>
#include <klib/out.h>
#include <klib/status.h>
+#include <klib/text.h>
#include <kapp/main.h>
#include <kfs/directory.h>
#include <sra/sradb-priv.h>
@@ -36,34 +45,45 @@
#include "debug.h"
#include "core.h"
+#include "fasta_dump.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <assert.h>
/* ### checks to see if NREADS <= nreads_max defined in factory.h ##################################################### */
-typedef struct MaxNReadsValidator_struct {
+typedef struct MaxNReadsValidator_struct
+{
const SRAColumn* col;
} MaxNReadsValidator;
-static
-rc_t MaxNReadsValidator_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t MaxNReadsValidator_GetKey( const SRASplitter* cself,
+ const char** key, spotid_t spot, readmask_t* readmask )
{
rc_t rc = 0;
- MaxNReadsValidator* self = (MaxNReadsValidator*)cself;
+ MaxNReadsValidator* self = ( MaxNReadsValidator* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
const void* nreads = NULL;
bitsz_t o = 0, sz = 0;
uint64_t nn = 0;
*key = "";
- if( self->col != NULL ) {
- if( (rc = SRAColumnRead(self->col, spot, &nreads, &o, &sz)) == 0 ) {
- switch(sz) {
+ if ( self->col != NULL )
+ {
+ rc = SRAColumnRead( self->col, spot, &nreads, &o, &sz );
+ if ( rc == 0 )
+ {
+ switch( sz )
+ {
case 8:
nn = *((const uint8_t*)nreads);
break;
@@ -77,40 +97,49 @@ rc_t MaxNReadsValidator_GetKey(const SRASplitter* cself, const char** key, spoti
nn = *((const uint64_t*)nreads);
break;
default:
- rc = RC(rcSRA, rcNode, rcExecuting, rcData, rcUnexpected);
+ rc = RC( rcSRA, rcNode, rcExecuting, rcData, rcUnexpected );
break;
}
- if( nn > nreads_max ) {
- clear_readmask(readmask);
+ if ( nn > nreads_max )
+ {
+ clear_readmask( readmask );
PLOGMSG(klogWarn, (klogWarn, "too many reads $(nreads) at spot id $(row), maximum $(max) supported, skipped",
PLOG_3(PLOG_U64(nreads),PLOG_I64(row),PLOG_U32(max)), nn, spot, nreads_max));
- } else if( nn == nreads_max - 1 ) {
+ }
+ else if ( nn == nreads_max - 1 )
+ {
PLOGMSG(klogWarn, (klogWarn, "too many reads $(nreads) at spot id $(row), truncated to $(max)",
PLOG_3(PLOG_U64(nreads),PLOG_I64(row),PLOG_U32(max)), nn + 1, spot, nreads_max));
}
-
}
}
}
return rc;
}
-typedef struct MaxNReadsValidatorFactory_struct {
+typedef struct MaxNReadsValidatorFactory_struct
+{
const SRATable* table;
const SRAColumn* col;
} MaxNReadsValidatorFactory;
-static
-rc_t MaxNReadsValidatorFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t MaxNReadsValidatorFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- MaxNReadsValidatorFactory* self = (MaxNReadsValidatorFactory*)cself;
+ MaxNReadsValidatorFactory* self = ( MaxNReadsValidatorFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
- } else {
- if( (rc = SRATableOpenColumnRead(self->table, &self->col, "NREADS", NULL)) != 0 ) {
- if( GetRCState(rc) == rcNotFound || GetRCState(rc) == rcExists ) {
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRATableOpenColumnRead( self->table, &self->col, "NREADS", NULL );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) == rcNotFound || GetRCState( rc ) == rcExists )
+ {
rc = 0;
}
}
@@ -118,52 +147,67 @@ rc_t MaxNReadsValidatorFactory_Init(const SRASplitterFactory* cself)
return rc;
}
-static
-rc_t MaxNReadsValidatorFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t MaxNReadsValidatorFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- MaxNReadsValidatorFactory* self = (MaxNReadsValidatorFactory*)cself;
+ MaxNReadsValidatorFactory* self = ( MaxNReadsValidatorFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(MaxNReadsValidator), MaxNReadsValidator_GetKey, NULL, NULL, NULL)) == 0 ) {
- ((MaxNReadsValidator*)(*splitter))->col = self->col;
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof(MaxNReadsValidator),
+ MaxNReadsValidator_GetKey, NULL, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (MaxNReadsValidator*)(*splitter) )->col = self->col;
}
}
return rc;
}
-static
-void MaxNReadsValidatorFactory_Release(const SRASplitterFactory* cself)
+
+static void MaxNReadsValidatorFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- MaxNReadsValidatorFactory* self = (MaxNReadsValidatorFactory*)cself;
- SRAColumnRelease(self->col);
+ if ( cself != NULL )
+ {
+ MaxNReadsValidatorFactory* self = ( MaxNReadsValidatorFactory* )cself;
+ SRAColumnRelease( self->col );
}
}
-static
-rc_t MaxNReadsValidatorFactory_Make(const SRASplitterFactory** cself, const SRATable* table)
+
+static rc_t MaxNReadsValidatorFactory_Make( const SRASplitterFactory** cself, const SRATable* table )
{
rc_t rc = 0;
MaxNReadsValidatorFactory* obj = NULL;
- if( cself == NULL || table == NULL ) {
- rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
- MaxNReadsValidatorFactory_Init,
- MaxNReadsValidatorFactory_NewObj,
- MaxNReadsValidatorFactory_Release)) == 0 ) {
- obj = (MaxNReadsValidatorFactory*)*cself;
- obj->table = table;
+ if( cself == NULL || table == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+ MaxNReadsValidatorFactory_Init,
+ MaxNReadsValidatorFactory_NewObj,
+ MaxNReadsValidatorFactory_Release);
+ if ( rc == 0 )
+ {
+ obj = ( MaxNReadsValidatorFactory* )*cself;
+ obj->table = table;
+ }
}
return rc;
}
/* ### READ_FILTER splitter/filter ##################################################### */
-enum EReadFilterSplitter_names {
+enum EReadFilterSplitter_names
+{
EReadFilterSplitter_pass = 0,
EReadFilterSplitter_reject,
EReadFilterSplitter_criteria,
@@ -172,49 +216,72 @@ enum EReadFilterSplitter_names {
EReadFilterSplitter_max
};
-typedef struct ReadFilterSplitter_struct {
+
+typedef struct ReadFilterSplitter_struct
+{
const SRAColumn* col_rdf;
SRAReadFilter read_filter;
SRASplitter_Keys keys[5];
} ReadFilterSplitter;
-static
-rc_t ReadFilterSplitter_GetKeySet(const SRASplitter* cself, const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask)
+
+static rc_t ReadFilterSplitter_GetKeySet( const SRASplitter* cself,
+ const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask )
{
rc_t rc = 0;
- ReadFilterSplitter* self = (ReadFilterSplitter*)cself;
+ ReadFilterSplitter* self = ( ReadFilterSplitter* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
const INSDC_SRA_read_filter* rdf;
bitsz_t o = 0, sz = 0;
*keys = 0;
- if( self->col_rdf != NULL ) {
- if( (rc = SRAColumnRead(self->col_rdf, spot, (const void **)&rdf, &o, &sz)) == 0 ) {
- int32_t j, i = sz / sizeof(INSDC_SRA_read_filter) / 8;
+ if ( self->col_rdf != NULL )
+ {
+ rc = SRAColumnRead( self->col_rdf, spot, (const void **)&rdf, &o, &sz );
+ if ( rc == 0 )
+ {
+ int32_t j, i = sz / sizeof( INSDC_SRA_read_filter ) / 8;
*key = self->keys;
- *keys = sizeof(self->keys) / sizeof(self->keys[0]);
- for(j = 0; j < *keys; j++) {
- clear_readmask(self->keys[j].readmask);
+ *keys = sizeof( self->keys ) / sizeof( self->keys[ 0 ] );
+ for ( j = 0; j < *keys; j++ )
+ {
+ clear_readmask( self->keys[ j ].readmask );
}
- while( i > 0 ) {
+ while ( i > 0 )
+ {
i--;
- if( self->read_filter != 0xFF && self->read_filter != rdf[i] ) {
+ if ( self->read_filter != 0xFF && self->read_filter != rdf[i] )
+ {
/* skip by filter value != to command line */
- } else if( rdf[i] == SRA_READ_FILTER_PASS ) {
- set_readmask(self->keys[EReadFilterSplitter_pass].readmask, i);
- } else if( rdf[i] == SRA_READ_FILTER_REJECT ) {
- set_readmask(self->keys[EReadFilterSplitter_reject].readmask, i);
- } else if( rdf[i] == SRA_READ_FILTER_CRITERIA ) {
- set_readmask(self->keys[EReadFilterSplitter_criteria].readmask, i);
- } else if( rdf[i] == SRA_READ_FILTER_REDACTED ) {
- set_readmask(self->keys[EReadFilterSplitter_redacted].readmask, i);
- } else {
- set_readmask(self->keys[EReadFilterSplitter_unknown].readmask, i);
- PLOGMSG(klogWarn, (klogWarn, "unknown READ_FILTER value $(value) at spot id $(row)",
- PLOG_2(PLOG_U8(value),PLOG_I64(row)), rdf[i], spot));
+ }
+ else if ( rdf[ i ] == SRA_READ_FILTER_PASS )
+ {
+ set_readmask( self->keys[ EReadFilterSplitter_pass ].readmask, i );
+ }
+ else if ( rdf[ i ] == SRA_READ_FILTER_REJECT )
+ {
+ set_readmask( self->keys[ EReadFilterSplitter_reject ].readmask, i );
+ }
+ else if( rdf[ i ] == SRA_READ_FILTER_CRITERIA )
+ {
+ set_readmask( self->keys[ EReadFilterSplitter_criteria ].readmask, i );
+ }
+ else if( rdf[ i ] == SRA_READ_FILTER_REDACTED )
+ {
+ set_readmask( self->keys[ EReadFilterSplitter_redacted ].readmask, i );
+ }
+ else
+ {
+ set_readmask( self->keys[ EReadFilterSplitter_unknown ].readmask, i );
+ PLOGMSG( klogWarn, ( klogWarn,
+ "unknown READ_FILTER value $(value) at spot id $(row)",
+ PLOG_2( PLOG_U8( value ), PLOG_I64( row ) ), rdf[ i ], spot ) );
}
}
}
@@ -223,26 +290,36 @@ rc_t ReadFilterSplitter_GetKeySet(const SRASplitter* cself, const SRASplitter_Ke
return rc;
}
-typedef struct ReadFilterSplitterFactory_struct {
+
+typedef struct ReadFilterSplitterFactory_struct
+{
const SRATable* table;
const SRAColumn* col_rdf;
SRAReadFilter read_filter;
} ReadFilterSplitterFactory;
-static
-rc_t ReadFilterSplitterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t ReadFilterSplitterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- ReadFilterSplitterFactory* self = (ReadFilterSplitterFactory*)cself;
-
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
- } else {
- if( (rc = SRATableOpenColumnRead(self->table, &self->col_rdf, "READ_FILTER", sra_read_filter_t)) != 0 ) {
- if( GetRCState(rc) == rcNotFound ) {
- LOGMSG(klogWarn, "Column READ_FILTER was not found, param ignored");
+ ReadFilterSplitterFactory* self = ( ReadFilterSplitterFactory* )cself;
+
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRATableOpenColumnRead( self->table, &self->col_rdf, "READ_FILTER", sra_read_filter_t );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) == rcNotFound )
+ {
+ LOGMSG( klogWarn, "Column READ_FILTER was not found, param ignored" );
rc = 0;
- } else if( GetRCState(rc) == rcExists ) {
+ }
+ else if ( GetRCState( rc ) == rcExists )
+ {
rc = 0;
}
}
@@ -250,101 +327,134 @@ rc_t ReadFilterSplitterFactory_Init(const SRASplitterFactory* cself)
return rc;
}
-static
-rc_t ReadFilterSplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t ReadFilterSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- ReadFilterSplitterFactory* self = (ReadFilterSplitterFactory*)cself;
+ ReadFilterSplitterFactory* self = ( ReadFilterSplitterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(ReadFilterSplitter), NULL, ReadFilterSplitter_GetKeySet, NULL, NULL)) == 0 ) {
- ((ReadFilterSplitter*)(*splitter))->col_rdf = self->col_rdf;
- ((ReadFilterSplitter*)(*splitter))->read_filter = self->read_filter;
- ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_pass].key = "pass";
- ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_reject].key = "reject";
- ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_criteria].key = "criteria";
- ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_redacted].key = "redacted";
- ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_unknown].key = "unknown";
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof(ReadFilterSplitter), NULL,
+ ReadFilterSplitter_GetKeySet, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (ReadFilterSplitter*)(*splitter) )->col_rdf = self->col_rdf;
+ ( (ReadFilterSplitter*)(*splitter) )->read_filter = self->read_filter;
+ ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_pass ].key = "pass";
+ ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_reject ].key = "reject";
+ ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_criteria ].key = "criteria";
+ ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_redacted ].key = "redacted";
+ ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_unknown ].key = "unknown";
}
}
return rc;
}
-static
-void ReadFilterSplitterFactory_Release(const SRASplitterFactory* cself)
+
+static void ReadFilterSplitterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- ReadFilterSplitterFactory* self = (ReadFilterSplitterFactory*)cself;
- SRAColumnRelease(self->col_rdf);
+ if ( cself != NULL )
+ {
+ ReadFilterSplitterFactory* self = ( ReadFilterSplitterFactory* )cself;
+ SRAColumnRelease( self->col_rdf );
}
}
-static
-rc_t ReadFilterSplitterFactory_Make(const SRASplitterFactory** cself, const SRATable* table, SRAReadFilter read_filter)
+
+static rc_t ReadFilterSplitterFactory_Make( const SRASplitterFactory** cself,
+ const SRATable* table, SRAReadFilter read_filter )
{
rc_t rc = 0;
ReadFilterSplitterFactory* obj = NULL;
- if( cself == NULL || table == NULL ) {
- rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterRead, sizeof(*obj),
- ReadFilterSplitterFactory_Init,
- ReadFilterSplitterFactory_NewObj,
- ReadFilterSplitterFactory_Release)) == 0 ) {
- obj = (ReadFilterSplitterFactory*)*cself;
- obj->table = table;
- obj->read_filter = read_filter;
+ if ( cself == NULL || table == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterRead, sizeof( *obj ),
+ ReadFilterSplitterFactory_Init,
+ ReadFilterSplitterFactory_NewObj,
+ ReadFilterSplitterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( ReadFilterSplitterFactory* ) *cself;
+ obj->table = table;
+ obj->read_filter = read_filter;
+ }
}
return rc;
}
+
/* ### SPOT_GROUP splitter/filter ##################################################### */
-typedef struct SpotGroupSplitter_struct {
- char cur_key[256];
+typedef struct SpotGroupSplitter_struct
+{
+ char cur_key[ 256 ];
const SRAColumn* col;
bool split;
char* const* spot_group;
} SpotGroupSplitter;
-static
-rc_t SpotGroupSplitter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t SpotGroupSplitter_GetKey( const SRASplitter* cself,
+ const char** key, spotid_t spot, readmask_t* readmask )
{
rc_t rc = 0;
- SpotGroupSplitter* self = (SpotGroupSplitter*)cself;
+ SpotGroupSplitter* self = ( SpotGroupSplitter* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
*key = self->cur_key;
- if( self->col != NULL ) {
+ if ( self->col != NULL )
+ {
const char* g = NULL;
bitsz_t o = 0, sz = 0;
- if( (rc = SRAColumnRead(self->col, spot, (const void **)&g, &o, &sz)) == 0 ) {
+ rc = SRAColumnRead( self->col, spot, (const void **)&g, &o, &sz );
+ if ( rc == 0 )
+ {
sz /= 8;
/* truncate trailing \0 */
- while( sz > 0 && g[sz - 1] == '\0' ) {
+ while ( sz > 0 && g[ sz - 1 ] == '\0' )
+ {
sz--;
}
- if( sz > sizeof(self->cur_key) - 1 ) {
- rc = RC(rcSRA, rcNode, rcExecuting, rcBuffer, rcInsufficient);
- } else {
+ if ( sz > sizeof( self->cur_key ) - 1 )
+ {
+ rc = RC( rcSRA, rcNode, rcExecuting, rcBuffer, rcInsufficient );
+ }
+ else
+ {
int i;
bool found = false;
- memcpy(self->cur_key, g, sz);
- self->cur_key[sz] = '\0';
- for(i = 0; self->spot_group[i] != NULL; i++) {
- if( strcmp(self->cur_key, self->spot_group[i]) == 0 ) {
+ memcpy( self->cur_key, g, sz );
+ self->cur_key[ sz ] = '\0';
+ for ( i = 0; self->spot_group[ i ] != NULL; i++ )
+ {
+ if ( strcmp( self->cur_key, self->spot_group[ i ] ) == 0 )
+ {
found = true;
break;
}
}
- if( self->spot_group[0] != NULL && !found ) {
+ if ( self->spot_group[ 0 ] != NULL && !found )
+ {
/* list not empty and not in list -> skip */
*key = NULL;
- } else if( !self->split ) {
+ }
+ else if ( !self->split )
+ {
*key = "";
}
}
@@ -354,27 +464,37 @@ rc_t SpotGroupSplitter_GetKey(const SRASplitter* cself, const char** key, spotid
return rc;
}
-typedef struct SpotGroupSplitterFactory_struct {
+
+typedef struct SpotGroupSplitterFactory_struct
+{
const SRATable* table;
const SRAColumn* col;
bool split;
char* const* spot_group;
} SpotGroupSplitterFactory;
-static
-rc_t SpotGroupSplitterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t SpotGroupSplitterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- SpotGroupSplitterFactory* self = (SpotGroupSplitterFactory*)cself;
+ SpotGroupSplitterFactory* self = ( SpotGroupSplitterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
- } else {
- if( (rc = SRATableOpenColumnRead(self->table, &self->col, "SPOT_GROUP", vdb_ascii_t)) != 0 ) {
- if( GetRCState(rc) == rcNotFound ) {
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRATableOpenColumnRead( self->table, &self->col, "SPOT_GROUP", vdb_ascii_t );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) == rcNotFound )
+ {
LOGMSG(klogWarn, "Column SPOT_GROUP was not found, param ignored");
rc = 0;
- } else if( GetRCState(rc) == rcExists ) {
+ }
+ else if ( GetRCState( rc ) == rcExists )
+ {
rc = 0;
}
}
@@ -382,187 +502,223 @@ rc_t SpotGroupSplitterFactory_Init(const SRASplitterFactory* cself)
return rc;
}
-static
-rc_t SpotGroupSplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t SpotGroupSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- SpotGroupSplitterFactory* self = (SpotGroupSplitterFactory*)cself;
+ SpotGroupSplitterFactory* self = ( SpotGroupSplitterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(SpotGroupSplitter), SpotGroupSplitter_GetKey, NULL, NULL, NULL)) == 0 ) {
- ((SpotGroupSplitter*)(*splitter))->col = self->col;
- ((SpotGroupSplitter*)(*splitter))->split = self->split;
- ((SpotGroupSplitter*)(*splitter))->spot_group = self->spot_group;
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( SpotGroupSplitter ),
+ SpotGroupSplitter_GetKey, NULL, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (SpotGroupSplitter*)(*splitter) )->col = self->col;
+ ( (SpotGroupSplitter*)(*splitter) )->split = self->split;
+ ( (SpotGroupSplitter*)(*splitter) )->spot_group = self->spot_group;
}
}
return rc;
}
-static
-void SpotGroupSplitterFactory_Release(const SRASplitterFactory* cself)
+
+static void SpotGroupSplitterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- SpotGroupSplitterFactory* self = (SpotGroupSplitterFactory*)cself;
- SRAColumnRelease(self->col);
+ if ( cself != NULL )
+ {
+ SpotGroupSplitterFactory* self = ( SpotGroupSplitterFactory* )cself;
+ SRAColumnRelease( self->col );
}
}
-static
-rc_t SpotGroupSplitterFactory_Make(const SRASplitterFactory** cself, const SRATable* table, bool split, char* const spot_group[])
+
+static rc_t SpotGroupSplitterFactory_Make( const SRASplitterFactory** cself,
+ const SRATable* table, bool split, char* const spot_group[] )
{
rc_t rc = 0;
SpotGroupSplitterFactory* obj = NULL;
- if( cself == NULL || table == NULL ) {
- rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
+ if ( cself == NULL || table == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
SpotGroupSplitterFactory_Init,
SpotGroupSplitterFactory_NewObj,
- SpotGroupSplitterFactory_Release)) == 0 ) {
- obj = (SpotGroupSplitterFactory*)*cself;
- obj->table = table;
- obj->split = split;
- obj->spot_group = spot_group;
+ SpotGroupSplitterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( SpotGroupSplitterFactory* ) *cself;
+ obj->table = table;
+ obj->split = split;
+ obj->spot_group = spot_group;
+ }
}
return rc;
}
/* ### Common dumper code ##################################################### */
-static
-rc_t SRADumper_DumpRun(const SRATable* table, spotid_t minSpotId, spotid_t maxSpotId, const SRASplitterFactory* factories)
+
+static rc_t SRADumper_DumpRun( const SRATable* table,
+ spotid_t minSpotId, spotid_t maxSpotId, const SRASplitterFactory* factories )
{
rc_t rc = 0, rcr = 0;
spotid_t spot = 0;
- make_readmask(readmask);
+ make_readmask( readmask );
const SRASplitter* root_splitter = NULL;
- rc = SRASplitterFactory_NewObj(factories, &root_splitter);
+ rc = SRASplitterFactory_NewObj( factories, &root_splitter );
- for(spot = minSpotId; rc == 0 && spot <= maxSpotId; spot++ ) {
- reset_readmask(readmask);
- rc = SRASplitter_AddSpot(root_splitter, spot, readmask);
+ for( spot = minSpotId; rc == 0 && spot <= maxSpotId; spot++ )
+ {
+ reset_readmask( readmask );
+ rc = SRASplitter_AddSpot( root_splitter, spot, readmask );
rc = rc ? rc : Quitting();
}
- rcr = SRASplitter_Release(root_splitter);
+ rcr = SRASplitter_Release( root_splitter );
return rc ? rc : rcr;
}
+
static const SRADumperFmt_Arg KMainArgs[] =
- {
- {"A", "accession", "accession", {"Replaces accession derived from <path> in filename(s) and deflines (only for single table dump)", NULL}},
- {"O", "outdir", "path", {"Output directory, default is working directory ( '.' )", NULL}},
- {"Z", "stdout", NULL, {"Output to stdout, all split data become joined into single stream", NULL}},
- {NULL, "gzip", NULL, {"Compress output using gzip", NULL}},
- {NULL, "bzip2", NULL, {"Compress output using bzip2", NULL}},
- {"N", "minSpotId", "rowid", {"Minimum spot id", NULL}},
- {"X", "maxSpotId", "rowid", {"Maximum spot id", NULL}},
- {"G", "spot-group", NULL, {"Split into files by SPOT_GROUP (member name)", NULL}},
- {NULL, "spot-groups", "[list]", {"Filter by SPOT_GROUP (member): name[,...]", NULL}},
- {"R", "read-filter", "[filter]", {"Split into files by READ_FILTER value",
- "optionally filter by a value: pass|reject|criteria|redacted", NULL}},
- {"T", "group-in-dirs", NULL, {"Split into subdirectories instead of files", NULL}},
- {"K", "keep-empty-files", NULL, {"Do not delete empty files", NULL}},
- {NULL, "table", "table-name", {"[NEW] Table name within cSRA object, default is \"SEQUENCE\"", NULL}},
-
- {"h", "help", NULL, {"Output a brief explanation of program usage", NULL}},
- {"V", "version", NULL, {"Display the version of the program", NULL}},
-
- {"L", "log-level", "level", {"Logging level as number or enum string",
- "One of (fatal|sys|int|err|warn|info) or (0-5)",
- "Current/default is warn", NULL}},
- {"v", "verbose", NULL, {"Increase the verbosity level of the program",
- "Use multiple times for more verbosity", NULL}},
+{
+ { NULL, "no-user-settings", NULL, {"Internal Only", NULL}},
+ { "A", "accession", "accession", {"Replaces accession derived from <path> in filename(s) and deflines (only for single table dump)", NULL}},
+ { "O", "outdir", "path", {"Output directory, default is working directory ( '.' )", NULL}},
+ { "Z", "stdout", NULL, {"Output to stdout, all split data become joined into single stream", NULL}},
+ { NULL, "gzip", NULL, {"Compress output using gzip", NULL}},
+ { NULL, "bzip2", NULL, {"Compress output using bzip2", NULL}},
+ { "N", "minSpotId", "rowid", {"Minimum spot id", NULL}},
+ { "X", "maxSpotId", "rowid", {"Maximum spot id", NULL}},
+ { "G", "spot-group", NULL, {"Split into files by SPOT_GROUP (member name)", NULL}},
+ { NULL, "spot-groups", "[list]", {"Filter by SPOT_GROUP (member): name[,...]", NULL}},
+ { "R", "read-filter", "[filter]", {"Split into files by READ_FILTER value",
+ "optionally filter by a value: pass|reject|criteria|redacted", NULL}},
+ { "T", "group-in-dirs", NULL, {"Split into subdirectories instead of files", NULL}},
+ { "K", "keep-empty-files", NULL, {"Do not delete empty files", NULL}},
+ { NULL, "table", "table-name", {"Table name within cSRA object, default is \"SEQUENCE\"", NULL}},
+
+ { "h", "help", NULL, {"Output a brief explanation of program usage", NULL}},
+ { "V", "version", NULL, {"Display the version of the program", NULL}},
+
+ { "L", "log-level", "level", {"Logging level as number or enum string",
+ "One of (fatal|sys|int|err|warn|info) or (0-5)",
+ "Current/default is warn", NULL}},
+ { "v", "verbose", NULL, {"Increase the verbosity level of the program",
+ "Use multiple times for more verbosity", NULL}},
+ { NULL, OPTION_REPORT, NULL, {
+"Control program execution environment report generation (if implemented).",
+"One of (never|error|always). Default is error",
+ NULL}},
#if _DEBUGGING
{"+", "debug", "Module[-Flag]", {"Turn on debug output for module",
"All flags if not specified", NULL}},
#endif
- {NULL, NULL, NULL, {NULL}} /* terminator */
- };
+ { NULL, NULL, NULL, {NULL}} /* terminator */
+};
+
rc_t CC Usage ( const Args * args )
{
- const char * progname;
- const char * fullname;
- rc_t rc;
- ver_t version;
-
- fullname = "core-dumper";
- progname = fullname;
- version = KAppVersion();
- rc = ArgsProgram (args, &fullname, &progname);
-
- OUTMSG (( "\nUsage:\n" ));
- return 0;
+ return fasta_dump_usage ( args );
}
-void CC SRADumper_PrintArg(const SRADumperFmt_Arg* arg)
+
+void CC SRADumper_PrintArg( const SRADumperFmt_Arg* arg )
{
-
+ /* ??? */
}
-static
-void CoreUsage(const char* prog, const SRADumperFmt* fmt, bool brief)
+
+static void CoreUsage( const char* prog, const SRADumperFmt* fmt, bool brief, int exit_status )
{
- OUTMSG(("\n"
- "Usage:\n"
- " %s [options] [ -A ] <accession>\n"
- " %s [options] <path [path...]>\n"
- "\n", prog, prog));
-
- if( !brief ) {
- if( fmt->usage ) {
- rc_t rc = fmt->usage(fmt, KMainArgs);
- if( rc != 0 ) {
+ OUTMSG(( "\n"
+ "Usage:\n"
+ " %s [options] <path [path...]>\n"
+ " %s [options] [ -A ] <accession>\n"
+ "\n", prog, prog));
+
+ if ( !brief )
+ {
+ if ( fmt->usage )
+ {
+ rc_t rc = fmt->usage( fmt, KMainArgs, 1 );
+ if ( rc != 0 )
+ {
LOGERR(klogErr, rc, "Usage print failed");
}
- } else {
+ }
+ else
+ {
int k, i;
- const SRADumperFmt_Arg* d[2] = { KMainArgs, NULL };
- d[1] = fmt->arg_desc;
- for( k = 0; k < sizeof(d) / sizeof(d[0]); k++) {
- for( i = 0; d[k] != NULL && (d[k][i].abbr != NULL || d[k][i].full != NULL); i++) {
- if( (!fmt->gzip && strcmp(d[k][i].full, "gzip") == 0) ||
- (!fmt->bzip2 && strcmp(d[k][i].full, "bzip2") == 0) ) {
+ const SRADumperFmt_Arg* d[ 2 ] = { KMainArgs, NULL };
+
+ d[ 1 ] = fmt->arg_desc;
+ for ( k = 0; k < ( sizeof( d ) / sizeof( d[0] ) ); k++ )
+ {
+ for ( i = 1;
+ d[k] != NULL && ( d[ k ][ i ].abbr != NULL || d[ k ][ i ].full != NULL );
+ ++ i )
+ {
+ if ( ( !fmt->gzip && strcmp( d[ k ][ i ].full, "gzip" ) == 0 ) ||
+ ( !fmt->bzip2 && strcmp (d[ k ][ i ].full, "bzip2" ) == 0 ) )
+ {
continue;
}
- if( k > 0 && i == 0 ) {
+ if ( k > 0 && i == 0 )
+ {
OUTMSG(("\nFormat options:\n\n"));
}
- HelpOptionLine(d[k][i].abbr, d[k][i].full, d[k][i].param, (const char**)(d[k][i].descr));
- if( k == 0 && i == 0 ) {
- OUTMSG(("\nOptions:\n\n"));
+ HelpOptionLine( d[ k ][ i ].abbr, d[ k ][ i ].full,
+ d[ k ][ i ].param, (const char**)( d[ k ][ i ].descr ) );
+ if ( k == 0 && i == 0 )
+ {
+ OUTMSG(( "\nOptions:\n\n" ));
}
}
}
}
- } else {
- OUTMSG(("Use option --help for more information\n"));
}
- HelpVersion(prog, KAppVersion());
- exit(rcArgv);
+ else
+ {
+ OUTMSG(( "Use option --help for more information\n" ));
+ }
+ HelpVersion( prog, KAppVersion() );
+ exit( exit_status );
}
-static
-rc_t SRADumper_ArgsValidate(const char* prog, const SRADumperFmt* fmt)
+
+static rc_t SRADumper_ArgsValidate( const char* prog, const SRADumperFmt* fmt )
{
rc_t rc = 0;
int k, i;
/* set default log level */
const char* default_log_level = "warn";
- if( (rc = LogLevelSet(default_log_level)) != 0 ) {
- PLOGERR(klogErr, (klogErr, rc, "default log level to '$(lvl)'", PLOG_S(lvl), default_log_level));
- CoreUsage(prog, fmt, true);
- }
- for( i = 0; KMainArgs[i].abbr != NULL; i++) {
- for( k = 0; fmt->arg_desc != NULL && fmt->arg_desc[k].abbr != NULL; k++) {
- if( strcmp(fmt->arg_desc[k].abbr, KMainArgs[i].abbr) == 0 ||
- (fmt->arg_desc[k].full != NULL && strcmp(fmt->arg_desc[k].full, KMainArgs[i].full) == 0) ) {
+ rc = LogLevelSet( default_log_level );
+ if ( rc != 0 )
+ {
+ PLOGERR( klogErr, ( klogErr, rc, "default log level to '$(lvl)'",
+ PLOG_S( lvl ), default_log_level ) );
+ CoreUsage( prog, fmt, true, EXIT_FAILURE );
+ }
+ for ( i = 0; KMainArgs[ i ].abbr != NULL; i++ )
+ {
+ for ( k = 0; fmt->arg_desc != NULL && fmt->arg_desc[ k ].abbr != NULL; k++ )
+ {
+ if ( strcmp( fmt->arg_desc[ k ].abbr, KMainArgs[ i ].abbr ) == 0 ||
+ ( fmt->arg_desc[ k ].full != NULL && strcmp( fmt->arg_desc[ k ].full, KMainArgs[ i ].full ) == 0 ) )
+ {
rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcDuplicate);
}
}
@@ -570,60 +726,122 @@ rc_t SRADumper_ArgsValidate(const char* prog, const SRADumperFmt* fmt)
return rc;
}
-bool CC SRADumper_GetArg(const SRADumperFmt* fmt, char const* const abbr, char const* const full,
- int* i, int argc, char *argv[], const char** value)
+
+bool CC SRADumper_GetArg( const SRADumperFmt* fmt, char const* const abbr, char const* const full,
+ int* i, int argc, char *argv[], const char** value )
{
rc_t rc = 0;
const char* arg = argv[*i];
- while(*arg == '-' && *arg != '\0') {
+ while ( *arg == '-' && *arg != '\0')
+ {
arg++;
}
- if( abbr != NULL && strcmp(arg, abbr) == 0 ) {
- SRA_DUMP_DBG(9, ("GetArg key: '%s'\n", arg));
- arg = arg + strlen(abbr);
- if( value != NULL && arg[0] == '\0' && (*i + 1) < argc ) {
+ if ( abbr != NULL && strcmp(arg, abbr) == 0 )
+ {
+ SRA_DUMP_DBG( 9, ( "GetArg key: '%s'\n", arg ) );
+ arg = arg + strlen( abbr );
+ if ( value != NULL && arg[0] == '\0' && (*i + 1) < argc )
+ {
arg = NULL;
- if( argv[*i + 1][0] != '-' ) {
+ if ( argv[ *i + 1 ][ 0 ] != '-' )
+ {
/* advance only if next is not an option with '-' */
*i = *i + 1;
- arg = argv[*i];
+ arg = argv[ *i ];
}
- } else {
+ }
+ else
+ {
arg = NULL;
}
- } else if( full != NULL && strcmp(arg, full) == 0 ) {
- SRA_DUMP_DBG(9, ("GetArg key: '%s'\n", arg));
+ }
+ else if ( full != NULL && strcmp( arg, full ) == 0 )
+ {
+ SRA_DUMP_DBG( 9, ( "GetArg key: '%s'\n", arg ) );
arg = NULL;
- if( value != NULL && (*i + 1) < argc ) {
- if( argv[*i + 1][0] != '-' ) {
+ if ( value != NULL && ( *i + 1 ) < argc )
+ {
+ if ( argv[ *i + 1 ][ 0 ] != '-' )
+ {
/* advance only if next is not an option with '-' */
*i = *i + 1;
- arg = argv[*i];
+ arg = argv[ *i ];
}
}
- } else {
+ }
+ else
+ {
return false;
}
- SRA_DUMP_DBG(9, ("GetArg val: '%s'\n", arg));
- if( value == NULL && arg != NULL ) {
- rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcUnexpected);
- } else if( value != NULL ) {
- if( arg == NULL && *value == '\0' ) {
- rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcNotFound);
- } else if( arg != NULL && arg[0] != '\0' ) {
+ SRA_DUMP_DBG( 9, ( "GetArg val: '%s'\n", arg ) );
+ if ( value == NULL && arg != NULL )
+ {
+ rc = RC( rcApp, rcArgv, rcAccessing, rcParam, rcUnexpected );
+ }
+ else if ( value != NULL )
+ {
+ if ( arg == NULL && *value == '\0' )
+ {
+ rc = RC( rcApp, rcArgv, rcAccessing, rcParam, rcNotFound );
+ }
+ else if ( arg != NULL && arg[0] != '\0' )
+ {
*value = arg;
}
}
- if( rc != 0 ) {
- PLOGERR(klogErr, (klogErr, rc, "$(a0)$(a1)$(a2)$(f0)$(f1): $(v)",
+ if ( rc != 0 )
+ {
+ PLOGERR( klogErr, ( klogErr, rc, "$(a0)$(a1)$(a2)$(f0)$(f1): $(v)",
PLOG_3(PLOG_S(a0),PLOG_S(a1),PLOG_S(a2))","PLOG_3(PLOG_S(f0),PLOG_S(f1),PLOG_S(v)),
abbr ? "-": "", abbr ? abbr : "", abbr ? ", " : "", full ? "--" : "", full ? full : "", arg));
- CoreUsage(argv[0], fmt, true);
+ CoreUsage( argv[ 0 ], fmt, true, EXIT_FAILURE );
}
return rc == 0 ? true : false;
}
+
+static bool reportToUserSffFromNot454Run(rc_t rc, char* argv0, bool silent) {
+ assert( argv0 );
+ if ( rc == SILENT_RC( rcSRA, rcFormatter, rcConstructing,
+ rcData, rcUnsupported ) )
+ {
+ const char* name = strpbrk( argv0, "/\\" );
+ const char* last_name = name;
+ if ( last_name )
+ {
+ ++last_name;
+ }
+ while ( name )
+ {
+ name = strpbrk( last_name, "/\\" );
+ if ( name )
+ {
+ last_name = name;
+ if ( last_name )
+ {
+ ++last_name;
+ }
+ }
+ }
+ name = last_name ? last_name : argv0;
+ if ( strcmp( "sff-dump", name ) == 0 )
+ {
+ if (!silent) {
+ OUTMSG((
+ "This run cannot be transformed into SFF format.\n"
+ "Conversion cannot be completed because the source lacks\n"
+ "one or more of the data series required by the SFF format.\n"
+ "You should be able to dump it as FASTQ by running fastq-dump.\n"
+ "\n"));
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+
/*******************************************************************************
* KMain - defined for use with kapp library
*******************************************************************************/
@@ -658,146 +876,249 @@ rc_t CC KMain ( int argc, char* argv[] )
bool read_filter_on = false;
SRAReadFilter read_filter = 0xFF;
- memset(&fmt, 0, sizeof(fmt));
- if( (rc = SRADumper_Init(&fmt)) != 0 ) {
+ /* for the fasta-ouput of fastq-dump: branch out completely of 'common' code */
+ if ( fasta_dump_requested( argc, argv ) )
+ {
+ return fasta_dump( argc, argv );
+ }
+
+ /* Prepare for the worst: report this information after disaster */
+ ReportBuildDate ( __DATE__ );
+
+ memset( &fmt, 0, sizeof( fmt ) );
+ rc = SRADumper_Init( &fmt );
+ if ( rc != 0 )
+ {
LOGERR(klogErr, rc, "formatter initialization");
return 100;
- } else if( fmt.get_factory == NULL ) {
- rc = RC(rcExe, rcFormatter, rcValidating, rcInterface, rcNull);
- LOGERR(klogErr, rc, "formatter factory");
+ }
+ else if ( fmt.get_factory == NULL )
+ {
+ rc = RC( rcExe, rcFormatter, rcValidating, rcInterface, rcNull );
+ LOGERR( klogErr, rc, "formatter factory" );
return 101;
- } else if( (rc = SRADumper_ArgsValidate(argv[0], &fmt)) != 0 ) {
- LOGERR(klogErr, rc, "formatter args list");
- return 102;
}
- if ( argc < 2 ) {
- CoreUsage(argv[0], &fmt, true);
+ else
+ {
+ rc = SRADumper_ArgsValidate( argv[0], &fmt );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "formatter args list" );
+ return 102;
+ }
+ }
+
+ if ( argc < 2 )
+ {
+ CoreUsage( argv[0], &fmt, true, EXIT_FAILURE );
return 0;
}
- for(i = 1; i < argc; i++)
+
+ for ( i = 1; i < argc; i++ )
{
- arg = argv[i];
- if( arg[0] != '-' ) {
+ arg = argv[ i ];
+ if ( arg[ 0 ] != '-' )
+ {
uint32_t k;
- for(k = 0; k < table_path_qty; k++) {
- if( strcmp(arg, table_path[k]) == 0 ) {
+ for ( k = 0; k < table_path_qty; k++ )
+ {
+ if ( strcmp( arg, table_path[ k ] ) == 0 )
+ {
break;
}
}
- if( k >= table_path_qty ) {
- if( (table_path_qty + 1) >= (sizeof(table_path) / sizeof(table_path[0])) ) {
- rc = RC(rcExe, rcArgv, rcReading, rcBuffer, rcInsufficient);
+ if ( k >= table_path_qty )
+ {
+ if ( ( table_path_qty + 1 ) >= ( sizeof( table_path ) / sizeof( table_path[ 0 ] ) ) )
+ {
+ rc = RC( rcExe, rcArgv, rcReading, rcBuffer, rcInsufficient );
goto Catch;
}
- table_path[table_path_qty++] = arg;
+ table_path[ table_path_qty++ ] = arg;
}
continue;
}
arg = NULL;
- if( SRADumper_GetArg(&fmt, "L", "log-level", &i, argc, argv, &arg) ) {
- if( (rc = LogLevelSet(arg)) != 0 ) {
- PLOGERR(klogErr, (klogErr, rc, "log level $(lvl)", PLOG_S(lvl), arg));
+ if ( SRADumper_GetArg( &fmt, "L", "log-level", &i, argc, argv, &arg ) )
+ {
+ rc = LogLevelSet( arg );
+ if ( rc != 0 )
+ {
+ PLOGERR( klogErr, ( klogErr, rc, "log level $(lvl)", PLOG_S( lvl ), arg ) );
goto Catch;
}
- } else if( SRADumper_GetArg(&fmt, "+", "debug", &i, argc, argv, &arg) ) {
+ }
+ else if ( SRADumper_GetArg( &fmt, NULL, OPTION_REPORT, &i, argc, argv, &arg ) )
+ {
+ }
+ else if ( SRADumper_GetArg( &fmt, "+", "debug", &i, argc, argv, &arg ) )
+ {
#if _DEBUGGING
- if( (rc = KDbgSetString(arg)) != 0 ) {
- PLOGERR(klogErr, (klogErr, rc, "debug level $(lvl)", PLOG_S(lvl), arg));
+ rc = KDbgSetString( arg );
+ if ( rc != 0 )
+ {
+ PLOGERR( klogErr, ( klogErr, rc, "debug level $(lvl)", PLOG_S( lvl ), arg ) );
goto Catch;
}
#endif
- } else if(SRADumper_GetArg(&fmt, "H", "help", &i, argc, argv, NULL) ||
- SRADumper_GetArg(&fmt, "?", "h", &i, argc, argv, NULL) ) {
- CoreUsage(argv[0], &fmt, false);
+ }
+ else if ( SRADumper_GetArg( &fmt, "H", "help", &i, argc, argv, NULL ) ||
+ SRADumper_GetArg( &fmt, "?", "h", &i, argc, argv, NULL ) )
+ {
+ CoreUsage( argv[ 0 ], &fmt, false, EXIT_SUCCESS );
- } else if(SRADumper_GetArg(&fmt, "V", "version", &i, argc, argv, NULL) ) {
- HelpVersion (argv[0], KAppVersion());
+ }
+ else if ( SRADumper_GetArg( &fmt, "V", "version", &i, argc, argv, NULL ) )
+ {
+ HelpVersion ( argv[ 0 ], KAppVersion() );
return 0;
- } else if(SRADumper_GetArg(&fmt, "v", NULL, &i, argc, argv, NULL) ) {
- KStsLevelAdjust(1);
+ }
+ else if ( SRADumper_GetArg( &fmt, "v", NULL, &i, argc, argv, NULL ) )
+ {
+ KStsLevelAdjust( 1 );
- } else if( SRADumper_GetArg(&fmt, "D", "table-path", &i, argc, argv, &D_option) ) {
- LOGMSG(klogErr, "option -D is deprecated, see --help");
- } else if( SRADumper_GetArg(&fmt, "P", "path", &i, argc, argv, &P_option) ) {
- LOGMSG(klogErr, "option -P is deprecated, see --help");
+ }
+ else if ( SRADumper_GetArg( &fmt, "D", "table-path", &i, argc, argv, &D_option ) )
+ {
+ LOGMSG( klogErr, "option -D is deprecated, see --help" );
+ }
+ else if ( SRADumper_GetArg( &fmt, "P", "path", &i, argc, argv, &P_option ) )
+ {
+ LOGMSG( klogErr, "option -P is deprecated, see --help" );
- } else if( SRADumper_GetArg(&fmt, "A", "accession", &i, argc, argv, &accession) ) {
- } else if( SRADumper_GetArg(&fmt, "O", "outdir", &i, argc, argv, &outdir) ) {
- } else if( SRADumper_GetArg(&fmt, "Z", "stdout", &i, argc, argv, NULL) ) {
+ }
+ else if ( SRADumper_GetArg( &fmt, "A", "accession", &i, argc, argv, &accession ) )
+ {
+ }
+ else if ( SRADumper_GetArg( &fmt, "O", "outdir", &i, argc, argv, &outdir ) )
+ {
+ }
+ else if ( SRADumper_GetArg( &fmt, "Z", "stdout", &i, argc, argv, NULL ) )
+ {
to_stdout = true;
- } else if( fmt.gzip && SRADumper_GetArg(&fmt, NULL, "gzip", &i, argc, argv, NULL) ) {
+ }
+ else if ( fmt.gzip && SRADumper_GetArg( &fmt, NULL, "gzip", &i, argc, argv, NULL ) )
+ {
do_gzip = true;
- } else if( fmt.bzip2 && SRADumper_GetArg(&fmt, NULL, "bzip2", &i, argc, argv, NULL) ) {
+ }
+ else if ( fmt.bzip2 && SRADumper_GetArg( &fmt, NULL, "bzip2", &i, argc, argv, NULL ) )
+ {
do_bzip2 = true;
- } else if( SRADumper_GetArg(&fmt, NULL, "table", &i, argc, argv, &table_name) ) {
- } else if( SRADumper_GetArg(&fmt, "N", "minSpotId", &i, argc, argv, &arg) ) {
- minSpotId = AsciiToU32(arg, NULL, NULL);
- } else if( SRADumper_GetArg(&fmt, "X", "maxSpotId", &i, argc, argv, &arg) ) {
- maxSpotId = AsciiToU32(arg, NULL, NULL);
- } else if( SRADumper_GetArg(&fmt, "G", "spot-group", &i, argc, argv, NULL) ) {
+ }
+ else if ( SRADumper_GetArg( &fmt, NULL, "table", &i, argc, argv, &table_name ) )
+ {
+ }
+ else if ( SRADumper_GetArg( &fmt, "N", "minSpotId", &i, argc, argv, &arg ) )
+ {
+ minSpotId = AsciiToU32( arg, NULL, NULL );
+ }
+ else if ( SRADumper_GetArg( &fmt, "X", "maxSpotId", &i, argc, argv, &arg ) )
+ {
+ maxSpotId = AsciiToU32( arg, NULL, NULL );
+ }
+ else if ( SRADumper_GetArg( &fmt, "G", "spot-group", &i, argc, argv, NULL ) )
+ {
spot_group_on = true;
- } else if( SRADumper_GetArg(&fmt, NULL, "spot-groups", &i, argc, argv, NULL) ) {
- if( i + 1 < argc && argv[i + 1][0] != '-' ) {
+ }
+ else if ( SRADumper_GetArg( &fmt, NULL, "spot-groups", &i, argc, argv, NULL ) )
+ {
+ if ( i + 1 < argc && argv[ i + 1 ][ 0 ] != '-' )
+ {
int f = 0, t = 0;
i++;
- while( argv[i][t] != '\0' ) {
- if( argv[i][t] == ',' ) {
- if( t - f > 0 ) {
- spot_group[spot_groups++] = strndup(&argv[i][f], t - f);
+ while ( argv[ i ][ t ] != '\0' )
+ {
+ if ( argv[ i ][ t ] == ',' )
+ {
+ if ( t - f > 0 )
+ {
+ spot_group[ spot_groups++ ] = string_dup( &argv[ i ][ f ], t - f );
}
f = t + 1;
}
t++;
}
- if( t - f > 0 ) {
- spot_group[spot_groups++] = strndup(&argv[i][f], t - f);
+ if ( t - f > 0 )
+ {
+ spot_group[ spot_groups++ ] = string_dup( &argv[ i ][ f ], t - f );
}
- if( spot_groups < 1 ) {
- rc = RC(rcApp, rcArgv, rcReading, rcParam, rcEmpty);
- PLOGERR(klogErr, (klogErr, rc, "$(p)", PLOG_S(p), argv[i - 1]));
- CoreUsage(argv[0], &fmt, false);
+ if ( spot_groups < 1 )
+ {
+ rc = RC( rcApp, rcArgv, rcReading, rcParam, rcEmpty );
+ PLOGERR( klogErr, ( klogErr, rc, "$(p)", PLOG_S( p ), argv[ i - 1 ] ) );
+ CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
}
- spot_group[spot_groups] = NULL;
+ spot_group[ spot_groups ] = NULL;
}
- } else if( SRADumper_GetArg(&fmt, "R", "read-filter", &i, argc, argv, NULL) ) {
+ }
+ else if ( SRADumper_GetArg( &fmt, "R", "read-filter", &i, argc, argv, NULL ) )
+ {
read_filter_on = true;
- if( i + 1 < argc && argv[i + 1][0] != '-' ) {
+ if ( i + 1 < argc && argv[ i + 1 ][ 0 ] != '-' )
+ {
i++;
- if( read_filter != 0xFF ) {
- rc = RC(rcApp, rcArgv, rcReading, rcParam, rcDuplicate);
- PLOGERR(klogErr, (klogErr, rc, "$(p): $(o)", PLOG_2(PLOG_S(p),PLOG_S(o)), argv[i - 1], argv[i]));
- CoreUsage(argv[0], &fmt, false);
+ if ( read_filter != 0xFF )
+ {
+ rc = RC( rcApp, rcArgv, rcReading, rcParam, rcDuplicate );
+ PLOGERR( klogErr, ( klogErr, rc, "$(p): $(o)",
+ PLOG_2( PLOG_S( p ),PLOG_S( o ) ), argv[ i - 1 ], argv[ i ] ) );
+ CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
}
- if( strcasecmp(argv[i], "pass") == 0 ) {
+ if ( strcasecmp( argv[ i ], "pass" ) == 0 )
+ {
read_filter = SRA_READ_FILTER_PASS;
- } else if( strcasecmp(argv[i], "reject") == 0 ) {
+ }
+ else if ( strcasecmp( argv[ i ], "reject" ) == 0 )
+ {
read_filter = SRA_READ_FILTER_REJECT;
- } else if( strcasecmp(argv[i], "criteria") == 0 ) {
+ }
+ else if ( strcasecmp( argv[ i ], "criteria" ) == 0 )
+ {
read_filter = SRA_READ_FILTER_CRITERIA;
- } else if( strcasecmp(argv[i], "redacted") == 0 ) {
+ }
+ else if ( strcasecmp( argv[ i ], "redacted" ) == 0 )
+ {
read_filter = SRA_READ_FILTER_REDACTED;
- } else {
+ }
+ else
+ {
/* must be accession */
i--;
}
}
- } else if( SRADumper_GetArg(&fmt, "T", "group-in-dirs", &i, argc, argv, NULL) ) {
+ }
+ else if ( SRADumper_GetArg( &fmt, "T", "group-in-dirs", &i, argc, argv, NULL ) )
+ {
sub_dir = true;
- } else if( SRADumper_GetArg(&fmt, "K", "keep-empty-files", &i, argc, argv, NULL) ) {
+ }
+ else if ( SRADumper_GetArg( &fmt, "K", "keep-empty-files", &i, argc, argv, NULL ) )
+ {
keep_empty = true;
- } else if( fmt.add_arg && fmt.add_arg(&fmt, SRADumper_GetArg, &i, argc, argv) ) {
- } else {
- rc = RC(rcApp, rcArgv, rcReading, rcParam, rcIncorrect);
- PLOGERR(klogErr, (klogErr, rc, "$(p)", PLOG_S(p), argv[i]));
- CoreUsage(argv[0], &fmt, false);
+ }
+ else if ( SRADumper_GetArg( &fmt, NULL, "no-user-settings", &i, argc, argv, NULL ) )
+ {
+ KConfigDisableUserSettings ();
+ }
+ else if ( fmt.add_arg && fmt.add_arg( &fmt, SRADumper_GetArg, &i, argc, argv ) )
+ {
+ }
+ else
+ {
+ rc = RC( rcApp, rcArgv, rcReading, rcParam, rcIncorrect );
+ PLOGERR( klogErr, ( klogErr, rc, "$(p)", PLOG_S( p ), argv[ i ] ) );
+ CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
}
}
- if( to_stdout ) {
- if( outdir != NULL || sub_dir || keep_empty ||
- spot_group_on || (read_filter_on && read_filter == 0xFF) ) {
- LOGMSG(klogWarn, "stdout mode is set, some options are ignored");
+
+ if ( to_stdout )
+ {
+ if ( outdir != NULL || sub_dir || keep_empty ||
+ spot_group_on || ( read_filter_on && read_filter == 0xFF ) )
+ {
+ LOGMSG( klogWarn, "stdout mode is set, some options are ignored" );
spot_group_on = false;
- if( read_filter == 0xFF ) {
+ if ( read_filter == 0xFF )
+ {
read_filter_on = false;
}
}
@@ -806,197 +1127,386 @@ rc_t CC KMain ( int argc, char* argv[] )
KLogHandlerSetStdErr();
( void ) KDbgHandlerSetStdErr();
}
- if( do_gzip && do_bzip2 ) {
- rc = RC(rcApp, rcArgv, rcReading, rcParam, rcAmbiguous);
- LOGERR(klogErr, rc, "output compression method");
- CoreUsage(argv[0], &fmt, false);
+
+ if ( do_gzip && do_bzip2 )
+ {
+ rc = RC( rcApp, rcArgv, rcReading, rcParam, rcAmbiguous );
+ LOGERR( klogErr, rc, "output compression method" );
+ CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
}
- if( minSpotId > maxSpotId ) {
+
+ if ( minSpotId > maxSpotId )
+ {
spotid_t temp = maxSpotId;
maxSpotId = minSpotId;
minSpotId = temp;
}
- if( table_path_qty == 0 ) {
- if( D_option != NULL && D_option[0] != '\0' ) {
+
+ if ( table_path_qty == 0 )
+ {
+ if ( D_option != NULL && D_option[ 0 ] != '\0' )
+ {
/* support deprecated '-D' option */
- table_path[table_path_qty++] = D_option;
- } else if( accession == NULL || accession[0] == '\0' ) {
+ table_path[ table_path_qty++ ] = D_option;
+ }
+ else if ( accession == NULL || accession[ 0 ] == '\0' )
+ {
/* must have accession to proceed */
- rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcEmpty);
- LOGERR(klogErr, rc, "expected accession");
+ rc = RC( rcExe, rcArgv, rcValidating, rcParam, rcEmpty );
+ LOGERR( klogErr, rc, "expected accession" );
goto Catch;
- } else if( P_option != NULL && P_option[0] != '\0' ) {
+ }
+ else if ( P_option != NULL && P_option[ 0 ] != '\0' )
+ {
/* support deprecated '-P' option */
- i = snprintf(P_option_buffer, sizeof(P_option_buffer), "%s/%s", P_option, accession);
- if( i < 0 || i >= sizeof(P_option_buffer) ) {
- rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcExcessive);
- LOGERR(klogErr, rc, "path too long");
+ i = snprintf( P_option_buffer, sizeof( P_option_buffer ), "%s/%s", P_option, accession );
+ if ( i < 0 || i >= sizeof( P_option_buffer ) )
+ {
+ rc = RC( rcExe, rcArgv, rcValidating, rcParam, rcExcessive );
+ LOGERR( klogErr, rc, "path too long" );
goto Catch;
}
- table_path[table_path_qty++] = P_option_buffer;
- } else {
- table_path[table_path_qty++] = accession;
+ table_path[ table_path_qty++ ] = P_option_buffer;
+ }
+ else
+ {
+ table_path[ table_path_qty++ ] = accession;
}
}
- if( (rc = SRAMgrMakeRead(&sraMGR)) != 0 ) {
- LOGERR(klogErr, rc, "failed to open SRA manager");
- goto Catch;
- } else if( (rc = SRASplitterFactory_FilerInit(to_stdout, do_gzip, do_bzip2, sub_dir, keep_empty, outdir)) != 0 ) {
- LOGERR(klogErr, rc, "failed to initialize files");
+
+ rc = SRAMgrMakeRead( &sraMGR );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "failed to open SRA manager" );
goto Catch;
}
+ else
+ {
+ rc = SRASplitterFactory_FilerInit( to_stdout, do_gzip, do_bzip2, sub_dir, keep_empty, outdir );
+ if ( rc != 0 )
+ {
+ LOGERR( klogErr, rc, "failed to initialize files" );
+ goto Catch;
+ }
+ }
+
+ {
+ const VDBManager* vmgr = NULL;
+ rc_t rc2 = SRAMgrGetVDBManagerRead( sraMGR, &vmgr );
+ if ( rc2 != 0 )
+ {
+ LOGERR( klogErr, rc2, "while calling SRAMgrGetVDBManagerRead" );
+ }
+ rc2 = ReportSetVDBManager( vmgr );
+ VDBManagerRelease( vmgr );
+ }
+
+
/* loop tables */
- for(i = 0; i < table_path_qty; i++) {
+ for ( i = 0; i < table_path_qty; i++ )
+ {
const SRASplitterFactory* fact_head = NULL;
spotid_t smax, smin;
- SRA_DUMP_DBG(5, ("table path '%s', name '%s'\n", table_path[i], table_name));
- if( table_name != NULL && (rc = SRAMgrOpenAltTableRead(sraMGR, &fmt.table, table_name, table_path[i])) != 0 ) {
- PLOGERR(klogErr, (klogErr, rc, "failed to open '$(path):$(table)'", "path=%s,table=%s", table_path[i], table_name));
- continue;
+ SRA_DUMP_DBG( 5, ( "table path '%s', name '%s'\n", table_path[ i ], table_name ) );
+ if ( table_name != NULL )
+ {
+ rc = SRAMgrOpenAltTableRead( sraMGR, &fmt.table, table_name, table_path[ i ] );
+ if ( rc != 0 )
+ {
+ PLOGERR( klogErr, ( klogErr, rc,
+ "failed to open '$(path):$(table)'", "path=%s,table=%s",
+ table_path[ i ], table_name ) );
+ continue;
+ }
}
- if( fmt.table == NULL && (rc = SRAMgrOpenTableRead(sraMGR, &fmt.table, table_path[i])) != 0 ) {
- PLOGERR(klogErr, (klogErr, rc, "failed to open '$(path)'", "path=%s", table_path[i]));
- continue;
+
+ ReportResetObject( table_path[ i ] );
+ if ( fmt.table == NULL )
+ {
+ rc = SRAMgrOpenTableRead( sraMGR, &fmt.table, table_path[ i ] );
+ if ( rc != 0 )
+ {
+ if ( UIError( rc, NULL, NULL ) )
+ {
+ UITableLOGError( rc, NULL, true );
+ }
+ else
+ {
+ PLOGERR( klogErr, ( klogErr, rc,
+ "failed to open '$(path)'", "path=%s", table_path[ i ] ) );
+ }
+ continue;
+ }
}
+
/* infer accession from table_path if missing or more than one table */
fmt.accession = table_path_qty > 1 ? NULL : accession;
- if( fmt.accession == NULL || fmt.accession[0] == 0 ) {
+ if ( fmt.accession == NULL || fmt.accession[ 0 ] == 0 )
+ {
+ char * basename;
char *ext;
size_t l;
+ bool is_url = false;
+
+ strcpy( P_option_buffer, table_path[ i ] );
+
+ basename = strchr ( P_option_buffer, ':' );
+ if ( basename )
+ {
+ ++basename;
+ if ( basename [0] == '\0' )
+ basename = P_option_buffer;
+ else
+ is_url = true;
+ }
+ else
+ basename = P_option_buffer;
+
+ if ( is_url )
+ {
+ ext = strchr ( basename, '#' );
+ if ( ext )
+ ext[ 0 ] = '\0';
+ ext = strchr ( basename, '?' );
+ if ( ext )
+ ext[ 0 ] = '\0';
+ }
- strcpy(P_option_buffer, table_path[i]);
- l = strlen(P_option_buffer);
- while( strchr("\\/", P_option_buffer[l - 1]) != NULL ) {
- P_option_buffer[--l] = '\0';
- }
- fmt.accession = strrchr(P_option_buffer, '/');
- if( fmt.accession++ == NULL ) {
- fmt.accession = P_option_buffer;
- }
- /* cut of [.lite].[c]sra if any */
- ext = strrchr(fmt.accession, '.');
- if( ext != NULL && (strcasecmp(ext, ".sra") == 0 || strcasecmp(ext, ".csra") == 0) ) {
- *ext = '\0';
- ext = strrchr(fmt.accession, '.');
- if( ext != NULL && strcasecmp(ext, ".lite") == 0 ) {
+
+ l = strlen( basename );
+ while ( strchr( "\\/", basename[ l - 1 ] ) != NULL )
+ {
+ basename[ --l ] = '\0';
+ }
+ fmt.accession = strrchr( basename, '/' );
+ if ( fmt.accession++ == NULL )
+ {
+ fmt.accession = basename;
+ }
+
+ /* cut off [.lite].[c]sra[.nenc||.ncbi_enc] if any */
+ ext = strrchr( fmt.accession, '.' );
+ if ( ext != NULL )
+ {
+ if ( strcasecmp( ext, ".nenc" ) == 0 || strcasecmp( ext, ",ncbi_enc" ) == 0 )
+ {
*ext = '\0';
+ ext = strrchr( fmt.accession, '.' );
+ }
+ if ( ext != NULL && ( strcasecmp( ext, ".sra" ) == 0 || strcasecmp( ext, ".csra" ) == 0 ) )
+ {
+ *ext = '\0';
+ ext = strrchr( fmt.accession, '.' );
+ if ( ext != NULL && strcasecmp( ext, ".lite" ) == 0 )
+ {
+ *ext = '\0';
+ }
}
}
}
- SRA_DUMP_DBG(5, ("accession: '%s'\n", fmt.accession));
- rc = SRASplitterFactory_FilerPrefix(accession ? accession : fmt.accession);
- while( rc == 0 ) {
+ SRA_DUMP_DBG( 5, ( "accession: '%s'\n", fmt.accession ) );
+ rc = SRASplitterFactory_FilerPrefix( accession ? accession : fmt.accession );
+
+ while ( rc == 0 )
+ {
/* sort out the spot id range */
- if( (rc = SRATableMaxSpotId(fmt.table, &smax)) != 0 ||
- (rc = SRATableMinSpotId(fmt.table, &smin)) != 0 ) {
+ if ( ( rc = SRATableMaxSpotId( fmt.table, &smax ) ) != 0 ||
+ ( rc = SRATableMinSpotId( fmt.table, &smin ) ) != 0 )
+ {
break;
}
+
+ {
+ const struct VTable* tbl = NULL;
+ rc_t rc2 = SRATableGetVTableRead( fmt.table, &tbl );
+ if ( rc == 0 )
+ {
+ rc = rc2;
+ }
+ rc2 = ReportResetTable( table_path[i], tbl );
+ if ( rc == 0 )
+ {
+ rc = rc2;
+ }
+ VTableRelease( tbl ); /* SRATableGetVTableRead adds Reference to tbl! */
+ }
+
/* test if we have to dump anything... */
- if( smax < minSpotId || smin > maxSpotId ) {
+ if ( smax < minSpotId || smin > maxSpotId )
+ {
break;
}
- if( smax > maxSpotId ) {
+ if ( smax > maxSpotId )
+ {
smax = maxSpotId;
}
- if( smin < minSpotId) {
+ if ( smin < minSpotId )
+ {
smin = minSpotId;
}
+
/* hack to reduce looping in AddSpot: needs redesign to pass nreads along through tree */
- if( true ) {
+ if ( true ) /* ??? */
+ {
const SRAColumn* c = NULL;
nreads_max = NREADS_MAX;
- if( (rc = SRATableOpenColumnRead(fmt.table, &c, "PLATFORM", sra_platform_id_t)) == 0 ) {
- const INSDC_SRA_platform_id* platform;
+ rc = SRATableOpenColumnRead( fmt.table, &c, "PLATFORM", sra_platform_id_t );
+ if ( rc == 0 )
+ {
+ const INSDC_SRA_platform_id *platform;
bitsz_t o, z;
- if( (rc = SRAColumnRead(c, 1, (const void **)&platform, &o, &z)) == 0 ) {
- if( *platform != SRA_PLATFORM_PACBIO_SMRT ) {
+ rc = SRAColumnRead( c, 1, (const void **)&platform, &o, &z );
+ if ( rc == 0 && platform != NULL )
+ {
+ if ( *platform != SRA_PLATFORM_PACBIO_SMRT )
+ {
nreads_max = 32;
}
}
- SRAColumnRelease(c);
- } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcColumn ) {
+ SRAColumnRelease( c );
+ }
+ else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcColumn )
+ {
rc = 0;
}
}
+
/* table dependent */
- if( (rc = fmt.get_factory(&fmt, &fact_head)) != 0 ) {
+ rc = fmt.get_factory( &fmt, &fact_head );
+ if ( rc != 0 )
+ {
break;
}
- if( fact_head == NULL ) {
- rc = RC(rcExe, rcFormatter, rcResolving, rcInterface, rcNull);
+ if ( fact_head == NULL )
+ {
+ rc = RC( rcExe, rcFormatter, rcResolving, rcInterface, rcNull );
break;
}
- if( rc == 0 && (spot_group_on || spot_groups > 0) ) {
+
+ if ( rc == 0 && ( spot_group_on || spot_groups > 0 ) )
+ {
const SRASplitterFactory* f = NULL;
- if( (rc = SpotGroupSplitterFactory_Make(&f, fmt.table, spot_group_on, spot_group)) == 0 ) {
- if( (rc = SRASplitterFactory_AddNext(f, fact_head)) == 0 ) {
+ rc = SpotGroupSplitterFactory_Make( &f, fmt.table, spot_group_on, spot_group );
+ if ( rc == 0 )
+ {
+ rc = SRASplitterFactory_AddNext( f, fact_head );
+ if ( rc == 0 )
+ {
fact_head = f;
- } else {
- SRASplitterFactory_Release(f);
+ }
+ else
+ {
+ SRASplitterFactory_Release( f );
}
}
}
- if( rc == 0 && read_filter_on ) {
+
+ if ( rc == 0 && read_filter_on )
+ {
const SRASplitterFactory* f = NULL;
- if( (rc = ReadFilterSplitterFactory_Make(&f, fmt.table, read_filter)) == 0 ) {
- if( (rc = SRASplitterFactory_AddNext(f, fact_head)) == 0 ) {
+ rc = ReadFilterSplitterFactory_Make( &f, fmt.table, read_filter );
+ if ( rc == 0 )
+ {
+ rc = SRASplitterFactory_AddNext( f, fact_head );
+ if ( rc == 0 )
+ {
fact_head = f;
- } else {
- SRASplitterFactory_Release(f);
+ }
+ else
+ {
+ SRASplitterFactory_Release( f );
}
}
}
- if( rc == 0 ) {
+
+ if ( rc == 0 )
+ {
/* this filter takes over head of chain to be first and kill off bad NREADS */
const SRASplitterFactory* f = NULL;
- if( (rc = MaxNReadsValidatorFactory_Make(&f, fmt.table)) == 0 ) {
- if( (rc = SRASplitterFactory_AddNext(f, fact_head)) == 0 ) {
+ rc = MaxNReadsValidatorFactory_Make( &f, fmt.table );
+ if ( rc == 0 )
+ {
+ rc = SRASplitterFactory_AddNext( f, fact_head );
+ if ( rc == 0 )
+ {
fact_head = f;
- } else {
- SRASplitterFactory_Release(f);
+ }
+ else
+ {
+ SRASplitterFactory_Release( f );
}
}
}
- if( (rc = SRASplitterFactory_Init(fact_head)) == 0 &&
- (rc = SRADumper_DumpRun(fmt.table, smin, smax, fact_head)) == 0 ) {
- uint64_t total = 0, file = 0;
- SRASplitterFactory_FilerReport(&total, &file);
- OUTMSG(("Written %lu spots for %s\n", total - total_spots, table_path[i]));
- if( to_stdout && total > 0 ) {
- PLOGMSG(klogInfo, (klogInfo, "$(t) biggest file has $(n) spots",
- PLOG_2(PLOG_S(t),PLOG_U64(n)), table_path[i], file));
+
+ rc = SRASplitterFactory_Init( fact_head );
+ if ( rc == 0 )
+ {
+ /* ********************************************************** */
+ rc = SRADumper_DumpRun( fmt.table, smin, smax, fact_head );
+ /* ********************************************************** */
+ if ( rc == 0 )
+ {
+ uint64_t total = 0, file = 0;
+ SRASplitterFactory_FilerReport( &total, &file );
+ OUTMSG(( "Written %lu spots for %s\n", total - total_spots, table_path[ i ] ));
+ if ( to_stdout && total > 0 )
+ {
+ PLOGMSG( klogInfo, ( klogInfo, "$(t) biggest file has $(n) spots",
+ PLOG_2( PLOG_S( t ), PLOG_U64( n ) ), table_path[ i ], file ));
+ }
+ total_spots = total;
}
- total_spots = total;
}
break;
}
- SRASplitterFactory_Release(fact_head);
- SRATableRelease(fmt.table);
+
+ SRASplitterFactory_Release( fact_head );
+ SRATableRelease( fmt.table );
fmt.table = NULL;
- if( rc == 0 ) {
- PLOGMSG(klogInfo, (klogInfo, "$(path)$(dot)$(table) $(spots) spots",
+ if ( rc == 0 )
+ {
+ PLOGMSG( klogInfo, ( klogInfo, "$(path)$(dot)$(table) $(spots) spots",
PLOG_4(PLOG_S(path),PLOG_S(dot),PLOG_S(table),PLOG_U32(spots)),
- table_path[i], table_name ? ":" : "", table_name ? table_name : "", smax - smin + 1));
- } else {
- PLOGERR(klogErr, (klogErr, rc, "failed $(path)$(dot)$(table)",
+ table_path[ i ], table_name ? ":" : "", table_name ? table_name : "", smax - smin + 1 ) );
+ }
+ else if (!reportToUserSffFromNot454Run(rc, argv [0], false)) {
+ PLOGERR( klogErr, ( klogErr, rc, "failed $(path)$(dot)$(table)",
PLOG_3(PLOG_S(path),PLOG_S(dot),PLOG_S(table)),
- table_path[i], table_name ? ":" : "", table_name ? table_name : ""));
+ table_path[ i ], table_name ? ":" : "", table_name ? table_name : "" ) );
}
}
+
Catch:
- if( fmt.release ) {
- rc_t rr = fmt.release(&fmt);
- if( rr != 0 ) {
- SRA_DUMP_DBG(1, ("formatter release error %R\n", rr));
+ if ( fmt.release )
+ {
+ rc_t rr = fmt.release( &fmt );
+ if ( rr != 0 )
+ {
+ SRA_DUMP_DBG( 1, ( "formatter release error %R\n", rr ) );
}
}
- for(i = 0; i < spot_groups; i++) {
- free(spot_group[i]);
+
+ for ( i = 0; i < spot_groups; i++ )
+ {
+ free( spot_group[ i ] );
}
SRASplitterFiler_Release();
- SRAMgrRelease(sraMGR);
- OUTMSG(("Written %lu spots total\n", total_spots));
+ SRAMgrRelease( sraMGR );
+ OUTMSG(( "Written %lu spots total\n", total_spots ));
+
+
+ /* Report execution environment if necessary */
+ if (rc != 0 && reportToUserSffFromNot454Run(rc, argv [0], true)) {
+ ReportSilence();
+ }
+ {
+ rc_t rc2 = ReportFinalize( rc );
+ if ( rc == 0 )
+ {
+ rc = rc2;
+ }
+ }
return rc;
}
diff --git a/tools/sra-dump/core.h b/tools/sra-dump/core.h
index 5861475..493b1ab 100644
--- a/tools/sra-dump/core.h
+++ b/tools/sra-dump/core.h
@@ -54,7 +54,7 @@ struct SRADumperFmt
const SRADumperFmt_Arg* arg_desc;
/* optional - prints custom help page */
- rc_t (*usage)(const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args);
+ rc_t (*usage)(const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args, int first );
/* optional */
rc_t (*release)(const SRADumperFmt* fmt);
/* optional process current arg and advance i by number of processed args */
diff --git a/tools/sra-dump/factory.c b/tools/sra-dump/factory.c
index e0f5741..d4b9d29 100644
--- a/tools/sra-dump/factory.c
+++ b/tools/sra-dump/factory.c
@@ -181,8 +181,7 @@ rc_t SRASplitterFiler_PopKey(void)
if( g_filer->path_tail == 0 ) {
return RC(rcExe, rcFile, rcDetaching, rcDirEntry, rcTooShort);
}
- g_filer->path_tail--;
- g_filer->path_len -= strlen(g_filer->path[g_filer->path_tail]) + 1;
+ g_filer->path_len -= strlen(g_filer->path[--g_filer->path_tail]) + 1;
return 0;
}
@@ -412,12 +411,14 @@ rc_t SRASplitterFactory_FilerPrefix(const char* prefix)
if( g_filer == NULL ) {
rc = RC(rcExe, rcFile, rcUpdating, rcSelf, rcNotOpen);
} else if( prefix == NULL || strcmp(prefix, g_filer->prefix) != 0 ) {
- free(g_filer->prefix);
- g_filer->prefix = strdup(prefix ? prefix : "");
- if( g_filer->prefix == NULL ) {
- rc = RC(rcExe, rcFile, rcConstructing, rcMemory, rcExhausted);
- } else if( (rc = SRASplitterFiler_PopKey()) == 0 ) {
- rc = SRASplitterFiler_PushKey(g_filer->prefix);
+ if( (rc = SRASplitterFiler_PopKey()) == 0 ) {
+ free(g_filer->prefix);
+ g_filer->prefix = strdup(prefix ? prefix : "");
+ if( g_filer->prefix == NULL ) {
+ rc = RC(rcExe, rcFile, rcConstructing, rcMemory, rcExhausted);
+ } else {
+ rc = SRASplitterFiler_PushKey(g_filer->prefix);
+ }
}
}
return rc;
@@ -823,24 +824,32 @@ rc_t SRASplitter_FileActivate(const SRASplitter* cself, const char* key)
return rc;
}
-rc_t SRASplitter_FileWrite(const SRASplitter* cself, spotid_t spot, const void* buf, size_t size)
+rc_t SRASplitter_FileWrite( const SRASplitter* cself, spotid_t spot, const void* buf, size_t size )
{
- rc_t rc = 0;
SRASplitter* self = NULL;
-
- if( (rc = SRASplitter_ResolveSelf(cself, rcWriting, &self)) == 0 ) {
- if( self->last_found == NULL ) {
- rc = RC(rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown);
- } else if( buf != NULL && size > 0 ) {
+
+ rc_t rc = SRASplitter_ResolveSelf( cself, rcWriting, &self );
+ if ( rc == 0 )
+ {
+ if ( self->last_found == NULL )
+ {
+ rc = RC( rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown );
+ }
+ else if ( buf != NULL && size > 0 )
+ {
size_t writ = 0;
- SRASplitterFile* f = (SRASplitterFile*)(self->last_found->child.file);
- if( (rc = KFileWrite(f->file, f->pos, buf, size, &writ)) == 0 ) {
+ SRASplitterFile* f = ( SRASplitterFile* )( self->last_found->child.file );
+ rc = KFileWrite( f->file, f->pos, buf, size, &writ );
+ if ( rc == 0 )
+ {
f->pos += writ;
- if( f->curr_spot != spot && spot != 0 ) {
- f->curr_spot = spot;
- f->spot_qty = f->spot_qty + 1;
+ if ( f->curr_spot != spot && spot != 0 )
+ {
+ f->curr_spot = spot;
+ f->spot_qty = f->spot_qty + 1;
}
- if( g_filer->curr_spot != spot && spot != 0 ) {
+ if ( g_filer->curr_spot != spot && spot != 0 )
+ {
g_filer->curr_spot = spot;
g_filer->spot_qty = g_filer->spot_qty + 1;
}
@@ -850,24 +859,30 @@ rc_t SRASplitter_FileWrite(const SRASplitter* cself, spotid_t spot, const void*
return rc;
}
-rc_t SRASplitter_FileWritePos(const SRASplitter* cself, spotid_t spot, uint64_t pos, const void* buf, size_t size)
+rc_t SRASplitter_FileWritePos( const SRASplitter* cself, spotid_t spot,
+ uint64_t pos, const void* buf, size_t size )
{
- rc_t rc = 0;
SRASplitter* self = NULL;
- if( (rc = SRASplitter_ResolveSelf(cself, rcWriting, &self)) == 0 ) {
- if( self->last_found == NULL ) {
- rc = RC(rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown);
- } else if( buf != NULL && size > 0 ) {
+ rc_t rc = SRASplitter_ResolveSelf( cself, rcWriting, &self );
+ if ( rc == 0 )
+ {
+ if ( self->last_found == NULL )
+ {
+ rc = RC( rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown );
+ }
+ else if ( buf != NULL && size > 0 )
+ {
const SRASplitterFile* f = self->last_found->child.file;
/* remember last position */
uint64_t old_pos = f->pos;
- ((SRASplitterFile*)f)->pos = pos;
+ ( ( SRASplitterFile* ) f )->pos = pos;
/* write to requested position */
- rc = SRASplitter_FileWrite(cself, spot, buf, size);
- if( f->pos < old_pos ) {
+ rc = SRASplitter_FileWrite( cself, spot, buf, size );
+ if ( f->pos < old_pos )
+ {
/* revert to last position if wrote less than it was */
- ((SRASplitterFile*)f)->pos = old_pos;
+ ( ( SRASplitterFile* ) f )->pos = old_pos;
}
}
}
diff --git a/tools/sra-dump/factory.h b/tools/sra-dump/factory.h
index d92d5b3..fcf91ff 100644
--- a/tools/sra-dump/factory.h
+++ b/tools/sra-dump/factory.h
@@ -28,8 +28,23 @@
#include <klib/rc.h>
#include <kfs/file.h>
+#include <klib/data-buffer.h>
#include <sra/sradb.h>
+#define DATABUFFER_INC_SZ 4096
+
+/* KDataBuffer is used as byte buffer-only here! */
+#define IF_BUF(expr, buf, writ) \
+ while( (rc = (expr)) != 0 && \
+ (GetRCObject(rc) == rcMemory || GetRCObject(rc) == rcBuffer) && \
+ (GetRCState(rc) == rcInsufficient || GetRCState(rc) == rcExhausted) ) { \
+ SRA_DUMP_DBG(10, ("\n%s grow buffer from %u to %u\n", __func__, buf->elem_count, writ + DATABUFFER_INC_SZ)); \
+ if( (rc = KDataBufferResize(buf, writ + DATABUFFER_INC_SZ)) != 0 ) { \
+ break; \
+ } \
+ } \
+ if( rc == 0 )
+
typedef enum {
eSplitterSpot = 1,
eSplitterRead,
@@ -39,8 +54,8 @@ typedef enum {
typedef struct SRASplitter SRASplitter;
#define NREADS_MAX (8*1024)
-typedef uint8_t readmask_t;
-uint32_t nreads_max;
+typedef uint8_t readmask_t;
+extern uint32_t nreads_max;
#define make_readmask(m) readmask_t m[NREADS_MAX]
#define copy_readmask(src,dst) (memcpy(dst, src, sizeof(readmask_t) * nreads_max))
@@ -108,8 +123,8 @@ rc_t SRASplitter_FileActivate(const SRASplitter* self, const char* key);
spot can be zero to indicate file header/footer
which no considered as actual data and file treated as empty if no actual spots is written
*/
-rc_t SRASplitter_FileWrite(const SRASplitter* self, spotid_t spot, const void* buf, size_t size);
-rc_t SRASplitter_FileWritePos(const SRASplitter* self, spotid_t spot, uint64_t pos, const void* buf, size_t size);
+rc_t SRASplitter_FileWrite( const SRASplitter* cself, spotid_t spot, const void* buf, size_t size );
+rc_t SRASplitter_FileWritePos( const SRASplitter* cself, spotid_t spot, uint64_t pos, const void* buf, size_t size );
typedef struct SRASplitterFactory SRASplitterFactory;
diff --git a/tools/sra-dump/fasta_dump.c b/tools/sra-dump/fasta_dump.c
new file mode 100644
index 0000000..41e7b58
--- /dev/null
+++ b/tools/sra-dump/fasta_dump.c
@@ -0,0 +1,752 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/printf.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+
+#include <vdb/manager.h>
+
+#include <align/manager.h>
+#include <align/reference.h>
+
+#include <sra/srapath.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+static bool string_ends_with( const char * s, const char * pattern )
+{
+ const char * found = strstr ( s, pattern );
+ if ( found == NULL )
+ return false;
+ else
+ {
+ size_t len_string = string_size ( s );
+ size_t len_pattern = string_size ( pattern );
+ size_t found_at = ( found - s );
+ return ( found_at == ( len_string - len_pattern ) );
+ }
+}
+
+
+static char * fasta_ref = "--fastaref";
+
+/* we have to test if argv[0] ends in 'fastq-dump' or 'fastq-dump.exe',
+ and we have an argument called '--fasta' */
+bool fasta_dump_requested( int argc, char* argv[] )
+{
+ if ( string_ends_with( argv[ 0 ], "fastq-dump" ) ||
+ string_ends_with( argv[ 0 ], "fastq-dump.exe" ) )
+ {
+ int i;
+ for ( i = 1; i < argc; ++i )
+ {
+ if ( strcmp( argv[ i ], fasta_ref ) == 0 )
+ return true;
+ }
+ }
+
+ return false;
+}
+
+#define OPTION_OUTF "outfile"
+#define ALIAS_OUTF "o"
+
+#define OPTION_WIDTH "width"
+#define ALIAS_WIDTH "w"
+
+#define OPTION_GZIP "gzip"
+#define ALIAS_GZIP NULL
+
+#define OPTION_BZIP "bzip2"
+#define ALIAS_BZIP NULL
+
+#define OPTION_REFNAME "refname"
+#define ALIAS_REFNAME "r"
+
+#define OPTION_FROM "from"
+#define ALIAS_FROM "N"
+
+#define OPTION_LENGTH "length"
+#define ALIAS_LENGTH "X"
+
+#define OPTION_FAREF "fastaref"
+#define ALIAS_FAREF NULL
+
+
+OptDef MyOptions[] =
+{
+ /*name, alias, hfkt, usage-help, maxcount, needs value, required */
+ { OPTION_OUTF, ALIAS_OUTF, NULL, NULL, 1, true, false },
+ { OPTION_WIDTH, ALIAS_WIDTH, NULL, NULL, 1, true, false },
+ { OPTION_GZIP, ALIAS_GZIP, NULL, NULL, 1, false, false },
+ { OPTION_BZIP, ALIAS_BZIP, NULL, NULL, 1, false, false },
+ { OPTION_REFNAME, ALIAS_REFNAME, NULL, NULL, 0, true, false },
+ { OPTION_FROM, ALIAS_FROM, NULL, NULL, 1, true, false },
+ { OPTION_LENGTH, ALIAS_LENGTH, NULL, NULL, 1, true, false },
+ { OPTION_FAREF, ALIAS_FAREF, NULL, NULL, 1, false, false }
+};
+
+
+/* =========================================================================================== */
+
+
+/* GLOBAL VARIABLES */
+struct {
+ KWrtWriter org_writer;
+ void* org_data;
+ KFile* kfile;
+ uint64_t pos;
+} g_out_writer = { NULL };
+
+
+/* =========================================================================================== */
+
+static rc_t get_str_option( const Args *args, const char *name, const char ** res )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, name, &count );
+ *res = NULL;
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+ }
+ else
+ {
+ if ( count > 0 )
+ {
+ rc = ArgsOptionValue( args, name, 0, res );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t get_bool_option( const Args *args, const char *name, bool *res, const bool def )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, name, &count );
+ if ( rc == 0 && count > 0 )
+ {
+ *res = true;
+ }
+ else
+ {
+ *res = def;
+ }
+ return rc;
+}
+
+
+static rc_t get_int_option( const Args *args, const char *name, uint32_t *res, const uint32_t def )
+{
+ const char * s;
+ rc_t rc = get_str_option( args, name, &s );
+ *res = def;
+ if ( rc == 0 && s != NULL )
+ {
+ *res = atoi( s );
+ }
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t CC BufferedWriter ( void* self, const char* buffer, size_t bufsize, size_t* num_writ )
+{
+ rc_t rc = 0;
+
+ assert( buffer != NULL );
+ assert( num_writ != NULL );
+
+ do {
+ rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos, buffer, bufsize, num_writ );
+ if ( rc == 0 )
+ {
+ buffer += *num_writ;
+ bufsize -= *num_writ;
+ g_out_writer.pos += *num_writ;
+ }
+ } while ( rc == 0 && bufsize > 0 );
+ return rc;
+}
+
+
+static rc_t set_stdout_to( bool gzip, bool bzip2, const char * filename, size_t bufsize )
+{
+ rc_t rc = 0;
+ if ( gzip && bzip2 )
+ {
+ rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+ }
+ else
+ {
+ KDirectory *dir;
+ rc = KDirectoryNativeDir( &dir );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+ else
+ {
+ KFile *of;
+ rc = KDirectoryCreateFile ( dir, &of, false, 0664, kcmInit, "%s", filename );
+ if ( rc == 0 )
+ {
+ KFile *buf;
+ if ( gzip )
+ {
+ KFile *gz;
+ rc = KFileMakeGzipForWrite( &gz, of );
+ if ( rc == 0 )
+ {
+ KFileRelease( of );
+ of = gz;
+ }
+ }
+ if ( bzip2 )
+ {
+ KFile *bz;
+ rc = KFileMakeBzip2ForWrite( &bz, of );
+ if ( rc == 0 )
+ {
+ KFileRelease( of );
+ of = bz;
+ }
+ }
+
+ rc = KBufFileMakeWrite( &buf, of, false, bufsize );
+ if ( rc == 0 )
+ {
+ g_out_writer.kfile = buf;
+ g_out_writer.org_writer = KOutWriterGet();
+ g_out_writer.org_data = KOutDataGet();
+ rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+ }
+ KFileRelease( of );
+ }
+ KDirectoryRelease( dir );
+ }
+ }
+ return rc;
+}
+
+
+static void release_stdout_redirection( void )
+{
+ KFileRelease( g_out_writer.kfile );
+ if( g_out_writer.org_writer != NULL )
+ {
+ KOutHandlerSet( g_out_writer.org_writer, g_out_writer.org_data );
+ }
+ g_out_writer.org_writer = NULL;
+}
+
+
+static rc_t CC write_to_FILE( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+ * num_writ = fwrite ( buffer, 1, bytes, f );
+ if ( * num_writ != bytes )
+ return RC( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+ return 0;
+}
+
+
+/* =========================================================================================== */
+
+typedef struct fasta_options
+{
+ uint32_t width;
+ bool gzip;
+ bool bzip;
+ const char * outfile;
+ INSDC_coord_zero from;
+ INSDC_coord_len length;
+} fasta_options;
+
+
+static rc_t get_fasta_options( Args * args, fasta_options *opts )
+{
+ rc_t rc = get_int_option( args, OPTION_WIDTH, &opts->width, 80 );
+
+ if ( rc == 0 )
+ rc = get_str_option( args, OPTION_OUTF, &opts->outfile );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_GZIP, &opts->gzip, false );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_BZIP, &opts->bzip, false );
+
+ if ( rc == 0 )
+ {
+ uint32_t x;
+ rc = get_int_option( args, OPTION_FROM, &x, 0 );
+ if ( rc == 0 )
+ opts->from = x;
+ }
+
+ if ( rc == 0 )
+ {
+ uint32_t x;
+ rc = get_int_option( args, OPTION_LENGTH, &x, 0 );
+ if ( rc == 0 )
+ opts->length = x;
+ }
+
+ return rc;
+}
+
+/* =========================================================================================== */
+
+#if TOOLS_USE_SRAPATH != 0
+static bool is_this_a_filesystem_path( const char * path )
+{
+ bool res = false;
+ size_t i, n = string_size ( path );
+ for ( i = 0; i < n && !res; ++i )
+ {
+ char c = path[ i ];
+ res = ( c == '.' || c == '/' || c == '\\' );
+ }
+ return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static char *translate_accession( SRAPath *my_sra_path,
+ const char *accession,
+ const size_t bufsize )
+{
+ rc_t rc;
+ char * res = calloc( 1, bufsize );
+ if ( res == NULL ) return NULL;
+
+ rc = SRAPathFind( my_sra_path, accession, res, bufsize );
+ if ( GetRCState( rc ) == rcNotFound )
+ {
+ free( res );
+ return NULL;
+ }
+ else if ( GetRCState( rc ) == rcInsufficient )
+ {
+ free( res );
+ return translate_accession( my_sra_path, accession, bufsize * 2 );
+ }
+ else if ( rc != 0 )
+ {
+ free( res );
+ return NULL;
+ }
+ return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static rc_t resolve_accession( const KDirectory *my_dir, char ** path )
+{
+ SRAPath *my_sra_path;
+ rc_t rc = 0;
+
+ if ( strchr ( *path, '/' ) != NULL )
+ return 0;
+
+ rc = SRAPathMake( &my_sra_path, my_dir );
+ if ( rc != 0 )
+ {
+ if ( GetRCState ( rc ) != rcNotFound || GetRCTarget ( rc ) != rcDylib )
+ {
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "SRAPathMake() failed" );
+ }
+ else
+ rc = 0;
+ }
+ else
+ {
+ if ( !SRAPathTest( my_sra_path, *path ) )
+ {
+ char *buf = translate_accession( my_sra_path, *path, 64 );
+ if ( buf != NULL )
+ {
+ free( (char*)(*path) );
+ *path = buf;
+ }
+ }
+ SRAPathRelease( my_sra_path );
+ }
+ return rc;
+}
+#endif
+
+/* =========================================================================================== */
+
+
+typedef struct fasta_ctx
+{
+ KDirectory *dir;
+ const VDBManager *vdb_mgr;
+ const AlignMgr *almgr;
+} fasta_ctx;
+
+
+static rc_t dump_reference_loop( fasta_options *opts, const ReferenceObj* refobj )
+{
+ rc_t rc = 0;
+ uint8_t * buffer = malloc( opts->width + 2 );
+ if ( buffer == NULL )
+ {
+ rc = RC( rcExe, rcNoTarg, rcListing, rcMemory, rcExhausted );
+ LOGERR( klogInt, rc, "allocating reference-buffer failed!" );
+ }
+ else
+ {
+ INSDC_coord_zero pos = opts->from;
+ INSDC_coord_len w = opts->length;
+
+ while ( w > 0 && rc == 0 )
+ {
+ INSDC_coord_len written;
+ INSDC_coord_len to_read = ( w > opts->width ? opts->width : w );
+ rc = ReferenceObj_Read( refobj, pos, to_read, buffer, &written );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ReferenceObj_Read() failed" );
+ else
+ {
+ OUTMSG(( "%.*s\n", written, buffer ));
+ w -= written;
+ pos += written;
+ }
+ }
+ free( buffer );
+ }
+ return rc;
+}
+
+
+static rc_t dump_reference( fasta_options *opts, const ReferenceObj* refobj )
+{
+ const char * name;
+ rc_t rc = ReferenceObj_Name( refobj, &name );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ReferenceObj_Name() failed!" );
+ else
+ {
+ INSDC_coord_len seq_len;
+ rc = ReferenceObj_SeqLength( refobj, &seq_len );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ReferenceObj_SeqLength() failed!" );
+ else
+ {
+ if ( opts->from == 0 )
+ {
+ if ( opts->length == 0 )
+ opts->length = seq_len;
+ }
+ else
+ {
+ if ( opts->length == 0 )
+ opts->length = ( seq_len - opts->from );
+ }
+ if ( opts->from >= seq_len )
+ {
+ rc = RC( rcExe, rcNoTarg, rcListing, rcParam, rcInvalid );
+ LOGERR( klogInt, rc, "reference-start-point beyond reference-end!" );
+ }
+ else
+ {
+ if ( opts->from + opts->length > seq_len )
+ opts->length = ( seq_len - opts->from );
+ OUTMSG(( ">%s|from %u|%u bases\n", name, opts->from, opts->from + opts->length -1 ));
+ rc = dump_reference_loop( opts, refobj );
+ }
+ }
+ }
+ return 0;
+}
+
+
+static rc_t dump_all_reference( fasta_options *opts, const ReferenceList* reflist )
+{
+ uint32_t count;
+ rc_t rc = ReferenceList_Count( reflist, &count );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ReferenceList_Count() failed!" );
+ else
+ {
+ uint32_t i;
+ for ( i = 0; i < count && rc == 0; ++i )
+ {
+ const ReferenceObj* refobj;
+ rc = ReferenceList_Get( reflist, &refobj, i );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ReferenceList_Get() failed!" );
+ else
+ rc = dump_reference( opts, refobj );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t foreach_refname( Args * args, fasta_options *opts, fasta_ctx *ctx, const char * path )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, OPTION_REFNAME, &count );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsOptionCount( REFNAME ) failed" );
+ }
+ else
+ {
+ const ReferenceList* reflist;
+
+ rc = ReferenceList_MakePath( &reflist, ctx->vdb_mgr, path,
+ ereferencelist_usePrimaryIds, 0, NULL, 0 );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ReferenceList_MakePath() failed!" );
+ else
+ {
+ if ( count == 0 )
+ {
+ /* dump all references... */
+ rc = dump_all_reference( opts, reflist );
+ }
+ else
+ {
+ uint32_t i;
+ for ( i = 0; i < count && rc == 0; ++i )
+ {
+ const char * refname;
+ rc = ArgsOptionValue( args, OPTION_REFNAME, 0, &refname );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsOptionValue( REFNAME ) failed" );
+ }
+ else
+ {
+ const ReferenceObj* refobj;
+ rc = ReferenceList_Find( reflist, &refobj, refname, string_size( refname ) );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ReferenceList_Find() failed" );
+ else
+ rc = dump_reference( opts, refobj );
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t foreach_argument( Args * args, fasta_options *opts, fasta_ctx *ctx )
+{
+ uint32_t count;
+ rc_t rc = ArgsParamCount( args, &count );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+ else
+ {
+ uint32_t idx;
+ if ( count < 1 )
+ {
+ rc = RC( rcExe, rcNoTarg, rcListing, rcParam, rcEmpty );
+ LOGERR( klogInt, rc, "no source-files given!" );
+ }
+ else
+ {
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ const char *param = NULL;
+ rc = ArgsParamValue( args, idx, ¶m );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+ else
+ {
+ char *path = string_dup_measure ( param, NULL );
+ if ( path == NULL )
+ {
+ rc = RC( rcExe, rcNoTarg, rcListing, rcMemory, rcExhausted );
+ LOGERR( klogInt, rc, "allocating path to source-file failed!" );
+ }
+ else
+ {
+
+#if TOOLS_USE_SRAPATH != 0
+ if ( !is_this_a_filesystem_path( path ) )
+ {
+ rc = resolve_accession( ctx->dir, &path );
+ }
+#endif
+
+ if ( rc == 0 )
+ {
+ rc = foreach_refname( args, opts, ctx, path );
+ }
+ free( path );
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t fasta_main( Args * args, fasta_options *opts )
+{
+ rc_t rc;
+ fasta_ctx ctx;
+
+ memset( &ctx, 0, sizeof ctx );
+ rc = KDirectoryNativeDir( &ctx.dir );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+ else
+ {
+ rc = VDBManagerMakeRead ( &ctx.vdb_mgr, ctx.dir );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+ else
+ {
+ rc = AlignMgrMakeRead ( &ctx.almgr );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "AlignMgrMake() failed" );
+ else
+ {
+ rc = foreach_argument( args, opts, &ctx );
+ AlignMgrRelease ( ctx.almgr );
+ }
+ VDBManagerRelease( ctx.vdb_mgr );
+ }
+ KDirectoryRelease( ctx.dir );
+ }
+ return rc;
+}
+
+/* =========================================================================================== */
+
+
+rc_t fasta_dump( int argc, char* argv[] )
+{
+ rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+ else
+ {
+ Args * args;
+
+ KLogHandlerSetStdErr();
+ rc = ArgsMakeAndHandle( &args, argc, argv, 1,
+ MyOptions, sizeof MyOptions / sizeof MyOptions [ 0 ] );
+ if ( rc == 0 )
+ {
+ fasta_options opts;
+ rc = get_fasta_options( args, &opts );
+ if ( rc == 0 )
+ {
+ if ( opts.outfile != NULL )
+ {
+ rc = set_stdout_to( opts.gzip,
+ opts.bzip,
+ opts.outfile,
+ 32 * 1024 );
+ }
+
+ if ( rc == 0 )
+ {
+ /* ============================== */
+ rc = fasta_main( args, &opts );
+ /* ============================== */
+ }
+
+ if ( opts.outfile != NULL )
+ release_stdout_redirection();
+ }
+ ArgsWhack( args );
+ }
+ }
+ return rc;
+}
+
+
+static const char * outf_usage[] = { "output to stdout if omitted", NULL };
+static const char * width_usage[] = { "default = 80 bases", NULL };
+static const char * gzip_usage[] = { "for file and stdout", NULL };
+static const char * bzip_usage[] = { "for file and stdout", NULL };
+static const char * refname_usage[] = { "multiple ref's permitted", NULL };
+static const char * from_usage[] = { "zero-based", NULL };
+static const char * length_usage[] = { NULL };
+
+rc_t CC fasta_dump_usage ( const Args * args )
+{
+ rc_t rc;
+ const char * fullname = "fastq-dump";
+ const char * progname = fullname;
+
+ if ( args == NULL )
+ rc = RC( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+ else
+ rc = ArgsProgram( args, &fullname, &progname );
+
+ KOutMsg( "\nUsage:\n"
+ " %s <path> [options]\n"
+ "\n", progname );
+
+ KOutMsg( "Options:\n" );
+
+ HelpOptionLine( ALIAS_OUTF, OPTION_OUTF, "output-file", outf_usage );
+ HelpOptionLine( ALIAS_WIDTH, OPTION_WIDTH, "bases per line", width_usage );
+ HelpOptionLine( ALIAS_GZIP, OPTION_GZIP, "output gzipped", gzip_usage );
+ HelpOptionLine( ALIAS_BZIP, OPTION_BZIP, "output bzipped", bzip_usage );
+ HelpOptionLine( ALIAS_REFNAME, OPTION_REFNAME, "reference to dump", refname_usage );
+ HelpOptionLine( ALIAS_FROM, OPTION_FROM, "start-offset", from_usage );
+ HelpOptionLine( ALIAS_LENGTH, OPTION_LENGTH, "length of sequence", length_usage );
+
+ HelpOptionsStandard ();
+ HelpVersion ( fullname, KAppVersion() );
+ return rc;
+}
diff --git a/tools/sra-dump/fasta_dump.h b/tools/sra-dump/fasta_dump.h
new file mode 100644
index 0000000..9d3fe8a
--- /dev/null
+++ b/tools/sra-dump/fasta_dump.h
@@ -0,0 +1,36 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_fasta_dump_hdr_
+#define _h_fasta_dump_hdr_
+
+
+bool fasta_dump_requested( int argc, char* argv[] );
+
+rc_t fasta_dump( int argc, char* argv[] );
+
+rc_t CC fasta_dump_usage ( const Args * args );
+
+#endif
diff --git a/tools/sra-dump/fastq-dump.vers b/tools/sra-dump/fastq-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/fastq-dump.vers
+++ b/tools/sra-dump/fastq-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/fastq-dump.vers.h b/tools/sra-dump/fastq-dump.vers.h
deleted file mode 100644
index 56c1ee4..0000000
--- a/tools/sra-dump/fastq-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define FASTQ_DUMP_VERS 0x02010007
diff --git a/tools/sra-dump/fastq.c b/tools/sra-dump/fastq.c
index 29bb12b..f5a1f74 100644
--- a/tools/sra-dump/fastq.c
+++ b/tools/sra-dump/fastq.c
@@ -26,6 +26,7 @@
#include <klib/log.h>
#include <klib/out.h>
#include <klib/container.h>
+#include <klib/text.h>
#include <kapp/main.h>
#include <sra/sradb.h>
@@ -39,12 +40,17 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+#include <errno.h>
+#include <strtol.h>
#include "core.h"
#include "fastq-dump.vers.h"
#include "debug.h"
-typedef struct TAlignedRegion_struct {
+#define DATABUFFERINITSIZE 10240
+
+typedef struct TAlignedRegion_struct
+{
const char* name;
uint32_t name_len;
/* 1-based, 0 - means not set */
@@ -52,12 +58,16 @@ typedef struct TAlignedRegion_struct {
uint64_t to;
} TAlignedRegion;
-typedef struct TMatepairDistance_struct {
+
+typedef struct TMatepairDistance_struct
+{
uint64_t from;
uint64_t to;
} TMatepairDistance;
-struct FastqArgs_struct {
+
+struct FastqArgs_struct
+{
bool is_platform_cs_native;
int maxReads;
@@ -79,7 +89,7 @@ struct FastqArgs_struct {
bool split_files;
bool split_3;
bool split_spot;
- bool fasta;
+ uint64_t fasta;
const char* file_extension;
bool aligned;
bool unaligned;
@@ -90,7 +100,9 @@ struct FastqArgs_struct {
uint32_t mp_dist_qty;
} FastqArgs;
-typedef enum DefNodeType_enum {
+
+typedef enum DefNodeType_enum
+{
DefNode_Unknown = 0,
DefNode_Text = 1,
DefNode_Optional,
@@ -105,146 +117,180 @@ typedef enum DefNodeType_enum {
DefNode_Last
} DefNodeType;
-typedef struct DefNode_struct {
+
+typedef struct DefNode_struct
+{
SLNode node;
DefNodeType type;
- union {
+ union
+ {
SLList* optional;
char* text;
} data;
} DefNode;
-typedef struct DeflineData_struct {
+
+typedef struct DeflineData_struct
+{
rc_t rc;
bool optional;
- union {
+ union
+ {
spotid_t* id;
- struct {
+ struct
+ {
const char* s;
size_t sz;
} str;
uint32_t* u32;
- } values[DefNode_Last];
+ } values[ DefNode_Last ];
char* buf;
size_t buf_sz;
size_t* writ;
} DeflineData;
-static
-bool CC Defline_Builder( SLNode *node, void *data )
+
+static bool CC Defline_Builder( SLNode *node, void *data )
{
- DefNode* n = (DefNode*)node;
- DeflineData* d = (DeflineData*)data;
- char s[256];
+ DefNode* n = ( DefNode* )node;
+ DeflineData* d = ( DeflineData* )data;
+ char s[ 256 ];
size_t w;
int x = 0;
- s[0] = '\0';
- switch(n->type) {
- case DefNode_Optional:
+ s[ 0 ] = '\0';
+ switch ( n->type )
+ {
+ case DefNode_Optional :
d->optional = true;
w = *d->writ;
*d->writ = 0;
SLListDoUntil( n->data.optional, Defline_Builder, data );
- x = (*d->writ == 0) ? 0 : 1;
+ x = ( *d->writ == 0 ) ? 0 : 1;
d->optional = false;
*d->writ = w;
- if( x > 0 ) {
+ if ( x > 0 )
+ {
SLListDoUntil( n->data.optional, Defline_Builder, data );
}
break;
- case DefNode_Text:
- if( d->optional ) {
+ case DefNode_Text :
+ if ( d->optional )
+ {
break;
}
d->values[n->type].str.s = n->data.text;
- d->values[n->type].str.sz = strlen(n->data.text);
- case DefNode_Accession:
- case DefNode_SpotName:
- case DefNode_SpotGroup:
- case DefNode_ReadName:
- if( d->values[n->type].str.s != NULL ) {
- x = d->values[n->type].str.sz;
- if( x < sizeof(s) ) {
- strncpy(s, d->values[n->type].str.s, x);
- s[x] = '\0';
+ d->values[n->type].str.sz = strlen( n->data.text );
+
+ case DefNode_Accession :
+ case DefNode_SpotName :
+ case DefNode_SpotGroup :
+ case DefNode_ReadName :
+ if ( d->values[n->type].str.s != NULL )
+ {
+ x = d->values[ n->type ].str.sz;
+ if ( x < sizeof( s ) )
+ {
+ strncpy( s, d->values[ n->type ].str.s, x );
+ s[ x ] = '\0';
*d->writ = *d->writ + x;
- } else {
- d->rc = RC(rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient);
+ }
+ else
+ {
+ d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
}
}
break;
- case DefNode_SpotId:
- if( d->values[n->type].id != NULL && (!d->optional || *d->values[n->type].id > 0) ) {
- x = snprintf(s, sizeof(s), "%u", *d->values[n->type].id);
- if( x < 0 || x >= sizeof(s) ) {
- d->rc = RC(rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient);
- } else {
+ case DefNode_SpotId :
+ if ( d->values[ n->type ].id != NULL &&
+ ( !d->optional || *d->values[ n->type ].id > 0 ) )
+ {
+ x = snprintf( s, sizeof( s ), "%u", *d->values[ n->type ].id );
+ if ( x < 0 || x >= sizeof( s ) )
+ {
+ d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
+ }
+ else
+ {
*d->writ = *d->writ + x;
}
}
break;
- case DefNode_ReadId:
- case DefNode_SpotLen:
- case DefNode_ReadLen:
- if( d->values[n->type].u32 != NULL && (!d->optional || *d->values[n->type].u32 > 0) ) {
- x = snprintf(s, sizeof(s), "%u", *d->values[n->type].u32);
- if( x < 0 || x >= sizeof(s) ) {
- d->rc = RC(rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient);
- } else {
+ case DefNode_ReadId :
+ case DefNode_SpotLen :
+ case DefNode_ReadLen :
+ if ( d->values[ n->type] .u32 != NULL &&
+ ( !d->optional || *d->values[ n->type ].u32 > 0 ) )
+ {
+ x = snprintf( s, sizeof( s ), "%u", *d->values[ n->type ].u32 );
+ if ( x < 0 || x >= sizeof( s ) )
+ {
+ d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
+ }
+ else
+ {
*d->writ = *d->writ + x;
}
}
break;
default:
- d->rc = RC(rcExe, rcNamelist, rcExecuting, rcId, rcInvalid);
- }
- if( d->rc == 0 && !d->optional && n->type != DefNode_Optional ) {
- if( *d->writ < d->buf_sz ) {
- strcat(d->buf, s);
- } else {
- d->rc = RC(rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient);
+ d->rc = RC( rcExe, rcNamelist, rcExecuting, rcId, rcInvalid );
+ } /* switch */
+
+ if ( d->rc == 0 && !d->optional && n->type != DefNode_Optional )
+ {
+ if ( *d->writ < d->buf_sz )
+ {
+ strcat( d->buf, s );
+ }
+ else
+ {
+ d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
}
}
return d->rc != 0;
}
-static
-rc_t Defline_Bind(DeflineData* data, const char* accession,
- spotid_t* spotId, const char* spot_name, size_t spotname_sz,
- const char* spot_group, size_t sgrp_sz, uint32_t* spot_len,
- uint32_t* readId, const char* read_name, INSDC_coord_len rlabel_sz, INSDC_coord_len* read_len)
-{
- if( data == NULL ) {
- return RC(rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient);
- }
- data->values[DefNode_Unknown].str.s = NULL;
- data->values[DefNode_Text].str.s = NULL;
- data->values[DefNode_Optional].str.s = NULL;
- data->values[DefNode_Accession].str.s = accession;
- data->values[DefNode_Accession].str.sz = strlen(accession);
- data->values[DefNode_SpotId].id = spotId;
- data->values[DefNode_SpotName].str.s = spot_name;
- data->values[DefNode_SpotName].str.sz = spotname_sz;
- data->values[DefNode_SpotGroup].str.s = spot_group;
- data->values[DefNode_SpotGroup].str.sz = sgrp_sz;
- data->values[DefNode_SpotLen].u32 = spot_len;
- data->values[DefNode_ReadId].u32 = readId;
- data->values[DefNode_ReadName].str.s = read_name;
- data->values[DefNode_ReadName].str.sz = rlabel_sz;
- data->values[DefNode_ReadLen].u32 = read_len;
+
+static rc_t Defline_Bind( DeflineData* data, const char* accession,
+ spotid_t* spotId, const char* spot_name, size_t spotname_sz,
+ const char* spot_group, size_t sgrp_sz, uint32_t* spot_len,
+ uint32_t* readId, const char* read_name, INSDC_coord_len rlabel_sz,
+ INSDC_coord_len* read_len )
+{
+ if ( data == NULL )
+ {
+ return RC( rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient );
+ }
+ data->values[ DefNode_Unknown ].str.s = NULL;
+ data->values[ DefNode_Text ].str.s = NULL;
+ data->values[ DefNode_Optional ].str.s = NULL;
+ data->values[ DefNode_Accession ].str.s = accession;
+ data->values[ DefNode_Accession ].str.sz = strlen( accession );
+ data->values[ DefNode_SpotId ].id = spotId;
+ data->values[ DefNode_SpotName ].str.s = spot_name;
+ data->values[ DefNode_SpotName ].str.sz = spotname_sz;
+ data->values[ DefNode_SpotGroup ].str.s = spot_group;
+ data->values[ DefNode_SpotGroup ].str.sz = sgrp_sz;
+ data->values[ DefNode_SpotLen ].u32 = spot_len;
+ data->values[ DefNode_ReadId ].u32 = readId;
+ data->values[ DefNode_ReadName ].str.s = read_name;
+ data->values[ DefNode_ReadName ].str.sz = rlabel_sz;
+ data->values[ DefNode_ReadLen ].u32 = read_len;
return 0;
}
-static
-rc_t Defline_Build(const SLList* def, DeflineData* data, char* buf, size_t buf_sz, size_t* writ)
+
+static rc_t Defline_Build( const SLList* def, DeflineData* data, char* buf,
+ size_t buf_sz, size_t* writ )
{
- if( data == NULL ) {
- return RC(rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient);
+ if ( data == NULL )
+ {
+ return RC( rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient );
}
data->rc = 0;
@@ -253,253 +299,287 @@ rc_t Defline_Build(const SLList* def, DeflineData* data, char* buf, size_t buf_s
data->buf_sz = buf_sz;
data->writ = writ;
- data->buf[0] = '\0';
+ data->buf[ 0 ] = '\0';
*data->writ = 0;
SLListDoUntil( def, Defline_Builder, data );
return data->rc;
}
-static
-rc_t DeflineNode_Add(SLList* list, DefNode** node, DefNodeType type, const char* text, size_t text_sz)
+
+static rc_t DeflineNode_Add( SLList* list, DefNode** node,
+ DefNodeType type, const char* text, size_t text_sz )
{
rc_t rc = 0;
- *node = calloc(1, sizeof(**node));
- if( *node == NULL ) {
- rc = RC(rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted);
- } else if(type == DefNode_Text && (text == NULL || text_sz == 0) ) {
- rc = RC(rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid);
- } else {
- (*node)->type = type;
- if( type == DefNode_Text ) {
- (*node)->data.text = strndup(text, text_sz);
- if( (*node)->data.text == NULL ) {
- rc = RC(rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted);
- free(*node);
+ *node = calloc( 1, sizeof( **node ) );
+ if ( *node == NULL )
+ {
+ rc = RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+ }
+ else if ( type == DefNode_Text && ( text == NULL || text_sz == 0 ) )
+ {
+ rc = RC( rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid );
+ }
+ else
+ {
+ ( *node )->type = type;
+ if ( type == DefNode_Text )
+ {
+ ( *node )->data.text = string_dup( text, text_sz );
+ if ( ( *node )->data.text == NULL )
+ {
+ rc = RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+ free( *node );
+ }
+ }
+ else if ( type == DefNode_Optional )
+ {
+ ( *node )->data.optional = malloc( sizeof( SLList ) );
+ if ( ( *node )->data.optional == NULL )
+ {
+ rc = RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+ free( *node );
}
- } else if( type == DefNode_Optional ) {
- (*node)->data.optional = malloc(sizeof(SLList));
- if( (*node)->data.optional == NULL ) {
- rc = RC(rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted);
- free(*node);
- } else {
- SLListInit((*node)->data.optional);
+ else
+ {
+ SLListInit( ( *node )->data.optional );
}
}
- if( rc == 0 ) {
- SLListPushTail(list, &(*node)->node);
+ if ( rc == 0 )
+ {
+ SLListPushTail( list, &( *node )->node );
}
}
return rc;
}
-static
-void Defline_Release(SLList* list);
-static
-void CC DeflineNode_Whack( SLNode* node, void* data )
+static void Defline_Release( SLList* list );
+
+
+static void CC DeflineNode_Whack( SLNode* node, void* data )
{
- if( node != NULL ) {
+ if ( node != NULL )
+ {
DefNode* n = (DefNode*)node;
- if( n->type == DefNode_Text ) {
- free(n->data.text);
- } else if( n->type == DefNode_Optional ) {
- Defline_Release(n->data.optional);
+ if ( n->type == DefNode_Text )
+ {
+ free( n->data.text );
+ }
+ else if ( n->type == DefNode_Optional )
+ {
+ Defline_Release( n->data.optional );
}
- free(node);
+ free( node );
}
}
-static
-void Defline_Release( SLList* list )
+
+static void Defline_Release( SLList* list )
{
- if( list != NULL ) {
+ if ( list != NULL )
+ {
SLListForEach( list, DeflineNode_Whack, NULL );
- free(list);
+ free( list );
}
}
+
#if _DEBUGGING
-static
-void CC Defline_Dump( SLNode* node, void* data )
+static void CC Defline_Dump( SLNode* node, void* data )
{
- DefNode* n = (DefNode*)node;
+ DefNode* n = ( DefNode* )node;
const char* s = NULL, *t;
- if( n->type == DefNode_Text ) {
+ if ( n->type == DefNode_Text )
+ {
s = n->data.text;
}
- switch(n->type) {
- case DefNode_Unknown:
- t = "Unknown";
- break;
- case DefNode_Text:
- t = "Text";
- break;
- case DefNode_Optional:
- t = "Optional";
- break;
- case DefNode_Accession:
- t = "Accession";
- break;
- case DefNode_SpotId:
- t = "SpotId";
- break;
- case DefNode_SpotName:
- t = "SpotName";
- break;
- case DefNode_SpotGroup:
- t = "SpotGroup";
- break;
- case DefNode_SpotLen:
- t = "SpotLen";
- break;
- case DefNode_ReadId:
- t = "ReadId";
- break;
- case DefNode_ReadName:
- t = "ReadName";
- break;
- case DefNode_ReadLen:
- t = "ReadLen";
- break;
- default:
- t = "ERROR";
- }
-
- SRA_DUMP_DBG(3, ("%s type %s", data, t));
- if( s ) {
- SRA_DUMP_DBG(3, (": '%s'", s));
+ switch ( n->type )
+ {
+ case DefNode_Unknown : t = "Unknown"; break;
+ case DefNode_Text : t = "Text"; break;
+ case DefNode_Optional : t = "Optional"; break;
+ case DefNode_Accession : t = "Accession"; break;
+ case DefNode_SpotId : t = "SpotId"; break;
+ case DefNode_SpotName : t = "SpotName"; break;
+ case DefNode_SpotGroup : t = "SpotGroup"; break;
+ case DefNode_SpotLen : t = "SpotLen"; break;
+ case DefNode_ReadId : t = "ReadId"; break;
+ case DefNode_ReadName : t = "ReadName"; break;
+ case DefNode_ReadLen : t = "ReadLen"; break;
+ default : t = "ERROR";
+ }
+
+ SRA_DUMP_DBG( 3, ( "%s type %s", data, t ) );
+ if ( s )
+ {
+ SRA_DUMP_DBG( 3, ( ": '%s'", s ) );
}
- SRA_DUMP_DBG(3, ("\n"));
- if( n->type == DefNode_Optional ) {
+ SRA_DUMP_DBG( 3, ( "\n" ) );
+ if ( n->type == DefNode_Optional )
+ {
SLListForEach( n->data.optional, Defline_Dump, "+-->" );
}
}
#endif
-static
-rc_t Defline_Parse(SLList** def, const char* line)
+
+static rc_t Defline_Parse( SLList** def, const char* line )
{
rc_t rc = 0;
size_t i, sz, text = 0, opt_vars = 0;
DefNode* node;
SLList* list = NULL;
- if( def == NULL || line == NULL ) {
- return RC(rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid);
+ if ( def == NULL || line == NULL )
+ {
+ return RC( rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid );
}
- *def = malloc(sizeof(SLList));
- if( *def == NULL ) {
- return RC(rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted);
+ *def = malloc( sizeof( SLList ) );
+ if ( *def == NULL )
+ {
+ return RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
}
- sz = strlen(line);
+ sz = strlen( line );
list = *def;
- SLListInit(list);
+ SLListInit( list );
- for(i = 0; rc == 0 && i < sz; i++ ) {
- if( line[i] == '[' ) {
- if( (i + 1) < sz && line[i + 1] == '[' ) {
+ for ( i = 0; rc == 0 && i < sz; i++ )
+ {
+ if ( line[ i ] == '[' )
+ {
+ if ( ( i + 1 ) < sz && line[ i + 1 ] == '[' )
+ {
i++;
- } else {
- if( list != *def ) {
- rc = RC(rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect);
- } else if( i > text ) {
- rc = DeflineNode_Add(list, &node, DefNode_Text, &line[text], i - text);
- }
- if( rc == 0 && (rc = DeflineNode_Add(list, &node, DefNode_Optional, NULL, 0)) == 0 ) {
- opt_vars = 0;
- list = node->data.optional;
- text = i + 1;
+ }
+ else
+ {
+ if ( list != *def )
+ {
+ rc = RC( rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect );
+ }
+ else if ( i > text )
+ {
+ rc = DeflineNode_Add( list, &node, DefNode_Text, &line[text], i - text );
+ }
+ if ( rc == 0 )
+ {
+ rc = DeflineNode_Add( list, &node, DefNode_Optional, NULL, 0 );
+ if ( rc == 0 )
+ {
+ opt_vars = 0;
+ list = node->data.optional;
+ text = i + 1;
+ }
}
}
- } else if( line[i] == ']' ) {
- if( (i + 1) < sz && line[i + 1] == ']' ) {
+ }
+ else if ( line[ i ] == ']' )
+ {
+ if ( ( i + 1 ) < sz && line[ i + 1 ] == ']' )
+ {
i++;
- } else {
- if( list == *def ) {
- rc = RC(rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect);
- } else {
- if( opt_vars < 1 ) {
- rc = RC(rcExe, rcNamelist, rcConstructing, rcConstraint, rcEmpty);
- } else if( i > text ) {
- rc = DeflineNode_Add(list, &node, DefNode_Text, &line[text], i - text);
+ }
+ else
+ {
+ if ( list == *def )
+ {
+ rc = RC( rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect );
+ }
+ else
+ {
+ if ( opt_vars < 1 )
+ {
+ rc = RC( rcExe, rcNamelist, rcConstructing, rcConstraint, rcEmpty );
+ }
+ else if ( i > text )
+ {
+ rc = DeflineNode_Add( list, &node, DefNode_Text, &line[text], i - text );
}
list = *def;
text = i + 1;
}
}
- } else if( line[i] == '$' ) {
- if( (i + 1) < sz && line[i + 1] == '$' ) {
+ }
+ else if ( line[ i ] == '$' )
+ {
+ if ( ( i + 1 ) < sz && line[ i + 1 ] == '$' )
+ {
i++;
- } else {
+ }
+ else
+ {
DefNodeType type = DefNode_Unknown;
- switch(line[++i]) {
- case 'a':
- switch(line[++i]) {
- case 'c':
- type = DefNode_Accession;
- break;
+ switch ( line[ ++i] )
+ {
+ case 'a' :
+ switch( line[ ++i ] )
+ {
+ case 'c': type = DefNode_Accession; break;
}
break;
- case 's':
- switch(line[++i]) {
- case 'i':
- type = DefNode_SpotId;
- break;
- case 'n':
- type = DefNode_SpotName;
- break;
- case 'g':
- type = DefNode_SpotGroup;
- break;
- case 'l':
- type = DefNode_SpotLen;
- break;
+
+ case 's' :
+ switch ( line[ ++i ] )
+ {
+ case 'i': type = DefNode_SpotId; break;
+ case 'n': type = DefNode_SpotName; break;
+ case 'g': type = DefNode_SpotGroup; break;
+ case 'l': type = DefNode_SpotLen; break;
}
break;
- case 'r':
- switch(line[++i]) {
- case 'i':
- type = DefNode_ReadId;
- break;
- case 'n':
- type = DefNode_ReadName;
- break;
- case 'l':
- type = DefNode_ReadLen;
- break;
+ case 'r' :
+ switch( line[ ++i ] )
+ {
+ case 'i': type = DefNode_ReadId; break;
+ case 'n': type = DefNode_ReadName; break;
+ case 'l': type = DefNode_ReadLen; break;
}
break;
}
- if( type == DefNode_Unknown ) {
- rc = RC(rcExe, rcNamelist, rcConstructing, rcName, rcUnrecognized);
- } else {
- if( (i - 2) > text ) {
- rc = DeflineNode_Add(list, &node, DefNode_Text, &line[text], i - text - 2);
+ if ( type == DefNode_Unknown )
+ {
+ rc = RC( rcExe, rcNamelist, rcConstructing, rcName, rcUnrecognized );
+ }
+ else
+ {
+ if ( ( i - 2 ) > text )
+ {
+ rc = DeflineNode_Add( list, &node, DefNode_Text, &line[ text ], i - text - 2 );
}
- if( rc == 0 && (rc = DeflineNode_Add(list, &node, type, NULL, 0)) == 0 ) {
- opt_vars++;
- text = i + 1;
+ if ( rc == 0 )
+ {
+ rc = DeflineNode_Add( list, &node, type, NULL, 0 );
+ if ( rc == 0 )
+ {
+ opt_vars++;
+ text = i + 1;
+ }
}
}
}
}
}
- if( rc == 0 ) {
- if( list != *def ) {
- rc = RC(rcExe, rcNamelist, rcConstructing, rcFormat, rcInvalid);
- } else if( i > text ) {
- rc = DeflineNode_Add(list, &node, DefNode_Text, &line[text], i - text);
+ if ( rc == 0 )
+ {
+ if ( list != *def )
+ {
+ rc = RC( rcExe, rcNamelist, rcConstructing, rcFormat, rcInvalid );
+ }
+ else if ( i > text )
+ {
+ rc = DeflineNode_Add( list, &node, DefNode_Text, &line[ text ], i - text );
}
}
- if( rc != 0 ) {
+ if ( rc != 0 )
+ {
i = i < sz ? i : sz;
- PLOGERR(klogErr,(klogErr, rc, "$(l1) -->$(c)<-- $(l2)",
- "l1=%.*s,c=%c,l2=%.*s", i - 1, line, line[i - 1], sz - i, &line[i]));
+ PLOGERR( klogErr, ( klogErr, rc, "$(l1) -->$(c)<-- $(l2)",
+ "l1=%.*s,c=%c,l2=%.*s", i - 1, line, line[ i - 1 ], sz - i, &line[ i ] ) );
}
#if _DEBUGGING
- SRA_DUMP_DBG(3, ("| defline\n"));
+ SRA_DUMP_DBG( 3, ( "| defline\n" ) );
SLListForEach( *def, Defline_Dump, "+->" );
#endif
return rc;
@@ -507,31 +587,41 @@ rc_t Defline_Parse(SLList** def, const char* line)
/* ### ALIGNMENT_COUNT based filtering ##################################################### */
-typedef struct AlignedFilter_struct {
+typedef struct AlignedFilter_struct
+{
const SRAColumn* col;
bool aligned;
bool unaligned;
} AlignedFilter;
-static
-rc_t AlignedFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t AlignedFilter_GetKey( const SRASplitter* cself, const char** key,
+ spotid_t spot, readmask_t* readmask )
{
rc_t rc = 0;
- AlignedFilter* self = (AlignedFilter*)cself;
+ AlignedFilter* self = ( AlignedFilter* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
*key = "";
- if( self->col != NULL ) {
+ if ( self->col != NULL )
+ {
const uint8_t* ac = NULL;
bitsz_t o = 0, sz = 0;
- if( (rc = SRAColumnRead(self->col, spot, (const void **)&ac, &o, &sz)) == 0 ) {
- sz = sz / 8 / sizeof(*ac);
- for(o = 0; o < sz; o++) {
- if( (self->aligned && !self->unaligned && ac[o] == 0) ||
- (self->unaligned && !self->aligned && ac[o] != 0) ) {
- unset_readmask(readmask, o);
+ rc = SRAColumnRead( self->col, spot, (const void **)&ac, &o, &sz );
+ if ( rc == 0 )
+ {
+ sz = sz / 8 / sizeof( *ac );
+ for( o = 0; o < sz; o++ )
+ {
+ if ( ( self->aligned && !self->unaligned && ac[ o ] == 0 ) ||
+ ( self->unaligned && !self->aligned && ac[ o ] != 0 ) )
+ {
+ unset_readmask( readmask, o );
}
}
}
@@ -540,27 +630,37 @@ rc_t AlignedFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t s
return rc;
}
-typedef struct AlignedFilterFactory_struct {
+
+typedef struct AlignedFilterFactory_struct
+{
const SRATable* table;
const SRAColumn* col;
bool aligned;
bool unaligned;
} AlignedFilterFactory;
-static
-rc_t AlignedFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t AlignedFilterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- AlignedFilterFactory* self = (AlignedFilterFactory*)cself;
-
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
- } else {
- if( (rc = SRATableOpenColumnRead(self->table, &self->col, "ALIGNMENT_COUNT", vdb_uint8_t)) != 0 ) {
- if( GetRCState(rc) == rcNotFound ) {
- LOGMSG(klogWarn, "Column ALIGNMENT_COUNT was not found, param ignored");
+ AlignedFilterFactory* self = ( AlignedFilterFactory* )cself;
+
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRATableOpenColumnRead( self->table, &self->col, "ALIGNMENT_COUNT", vdb_uint8_t );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) == rcNotFound )
+ {
+ LOGMSG( klogWarn, "Column ALIGNMENT_COUNT was not found, param ignored" );
rc = 0;
- } else if( GetRCState(rc) == rcExists ) {
+ }
+ else if ( GetRCState( rc ) == rcExists )
+ {
rc = 0;
}
}
@@ -568,56 +668,73 @@ rc_t AlignedFilterFactory_Init(const SRASplitterFactory* cself)
return rc;
}
-static
-rc_t AlignedFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t AlignedFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- AlignedFilterFactory* self = (AlignedFilterFactory*)cself;
+ AlignedFilterFactory* self = ( AlignedFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(AlignedFilter), AlignedFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
- ((AlignedFilter*)(*splitter))->col = self->col;
- ((AlignedFilter*)(*splitter))->aligned = self->aligned;
- ((AlignedFilter*)(*splitter))->unaligned = self->unaligned;
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( AlignedFilter ),
+ AlignedFilter_GetKey, NULL, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (AlignedFilter*)(*splitter) )->col = self->col;
+ ( (AlignedFilter*)(*splitter) )->aligned = self->aligned;
+ ( (AlignedFilter*)(*splitter) )->unaligned = self->unaligned;
}
}
return rc;
}
-static
-void AlignedFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void AlignedFilterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- AlignedFilterFactory* self = (AlignedFilterFactory*)cself;
- SRAColumnRelease(self->col);
+ if ( cself != NULL )
+ {
+ AlignedFilterFactory* self = ( AlignedFilterFactory* )cself;
+ SRAColumnRelease( self->col );
}
}
-static
-rc_t AlignedFilterFactory_Make(const SRASplitterFactory** cself, const SRATable* table, bool aligned, bool unaligned)
+
+static rc_t AlignedFilterFactory_Make( const SRASplitterFactory** cself,
+ const SRATable* table, bool aligned, bool unaligned )
{
rc_t rc = 0;
AlignedFilterFactory* obj = NULL;
- if( cself == NULL || table == NULL ) {
- rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
- AlignedFilterFactory_Init,
- AlignedFilterFactory_NewObj,
- AlignedFilterFactory_Release)) == 0 ) {
- obj = (AlignedFilterFactory*)*cself;
- obj->table = table;
- obj->aligned = aligned;
- obj->unaligned = unaligned;
+ if ( cself == NULL || table == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+ }
+ else
+ {
+ SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+ AlignedFilterFactory_Init,
+ AlignedFilterFactory_NewObj,
+ AlignedFilterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( AlignedFilterFactory* )*cself;
+ obj->table = table;
+ obj->aligned = aligned;
+ obj->unaligned = unaligned;
+ }
}
return rc;
}
+
/* ### alignment region filtering ##################################################### */
-typedef struct AlignRegionFilter_struct {
+typedef struct AlignRegionFilter_struct
+{
const SRAColumn* col_pos;
const SRAColumn* col_name;
const SRAColumn* col_seqid;
@@ -625,65 +742,86 @@ typedef struct AlignRegionFilter_struct {
uint32_t alregion_qty;
} AlignRegionFilter;
-static
-rc_t AlignRegionFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t AlignRegionFilter_GetKey( const SRASplitter* cself, const char** key,
+ spotid_t spot, readmask_t* readmask )
{
rc_t rc = 0;
- AlignRegionFilter* self = (AlignRegionFilter*)cself;
+ AlignRegionFilter* self = ( AlignRegionFilter* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
*key = "";
- reset_readmask(readmask);
- if( self->col_name || self->col_seqid ) {
+ reset_readmask( readmask );
+ if ( self->col_name || self->col_seqid )
+ {
bool match = false;
uint32_t i;
const char* nm, *si;
bitsz_t o, nm_len = 0, si_len = 0;
- if( self->col_name ) {
- rc = SRAColumnRead(self->col_name, spot, (const void **)&nm, &o, &nm_len);
+ if ( self->col_name )
+ {
+ rc = SRAColumnRead( self->col_name, spot, (const void **)&nm, &o, &nm_len );
nm_len /= 8;
}
- if( rc == 0 && self->col_seqid ) {
- rc = SRAColumnRead(self->col_seqid, spot, (const void **)&si, &o, &si_len);
+ if ( rc == 0 && self->col_seqid )
+ {
+ rc = SRAColumnRead( self->col_seqid, spot, (const void **)&si, &o, &si_len );
si_len /= 8;
}
- for(i = 0; rc == 0 && i < self->alregion_qty; i++) {
- if( (self->alregion[i].name_len == nm_len &&
- strncasecmp(self->alregion[i].name, nm, nm_len) == 0) ||
- (self->alregion[i].name_len == si_len &&
- strncasecmp(self->alregion[i].name, si, si_len) == 0)) {
- if( self->col_pos ) {
+ for ( i = 0; rc == 0 && i < self->alregion_qty; i++ )
+ {
+ if ( ( self->alregion[i].name_len == nm_len &&
+ strncasecmp( self->alregion[ i ].name, nm, nm_len ) == 0 ) ||
+ ( self->alregion[i].name_len == si_len &&
+ strncasecmp(self->alregion[i].name, si, si_len) == 0 ) )
+ {
+ if ( self->col_pos )
+ {
INSDC_coord_zero* pos;
bitsz_t nreads, j;
- if( (rc = SRAColumnRead(self->col_pos, spot, (const void **)&pos, &o, &nreads)) == 0 ) {
+ rc = SRAColumnRead( self->col_pos, spot, ( const void ** )&pos, &o, &nreads );
+ if ( rc == 0 )
+ {
nreads = nreads / sizeof(*pos) / 8;
- for(i = 0; !match && i < self->alregion_qty; i++) {
- for(j = 0; j < nreads; j++) {
- if( self->alregion[i].from <= pos[j] && pos[j] <= self->alregion[i].to ) {
+ for ( i = 0; !match && i < self->alregion_qty; i++ )
+ {
+ for ( j = 0; j < nreads; j++ )
+ {
+ if ( self->alregion[i].from <= pos[j] &&
+ pos[j] <= self->alregion[i].to )
+ {
match = true;
break;
}
}
}
}
- } else {
+ }
+ else
+ {
match = true;
}
break;
}
}
- if( !match ) {
- clear_readmask(readmask);
+ if ( !match )
+ {
+ clear_readmask( readmask );
}
}
}
return rc;
}
-typedef struct AlignRegionFilterFactory_struct {
+
+typedef struct AlignRegionFilterFactory_struct
+{
const SRATable* table;
const SRAColumn* col_pos;
const SRAColumn* col_name;
@@ -692,54 +830,75 @@ typedef struct AlignRegionFilterFactory_struct {
uint32_t alregion_qty;
} AlignRegionFilterFactory;
-static
-rc_t AlignRegionFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t AlignRegionFilterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- AlignRegionFilterFactory* self = (AlignRegionFilterFactory*)cself;
+ AlignRegionFilterFactory* self = ( AlignRegionFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
- } else {
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
#define COLNF(v,n,t) (!(rc == 0 && ((rc = SRATableOpenColumnRead(self->table, &v, n, t)) == 0 || \
GetRCState(rc) == rcExists)) && GetRCState(rc) == rcNotFound)
- if( COLNF(self->col_name, "REF_NAME", vdb_ascii_t) ) {
- SRAColumnRelease(self->col_name);
+ if ( COLNF( self->col_name, "REF_NAME", vdb_ascii_t ) )
+ {
+ SRAColumnRelease( self->col_name );
self->col_name = NULL;
rc = 0;
}
- if( COLNF(self->col_seqid, "REF_SEQ_ID", vdb_ascii_t) ) {
- SRAColumnRelease(self->col_seqid);
+
+ if ( COLNF( self->col_seqid, "REF_SEQ_ID", vdb_ascii_t ) )
+ {
+ SRAColumnRelease( self->col_seqid );
self->col_seqid = NULL;
rc = 0;
}
- if( self->col_name == NULL && self->col_seqid == NULL ) {
- LOGMSG(klogWarn, "None of columns REF_NAME or REF_SEQ_ID was found, no region filtering");
- } else {
+
+ if ( self->col_name == NULL && self->col_seqid == NULL )
+ {
+ LOGMSG( klogWarn, "None of columns REF_NAME or REF_SEQ_ID was found, no region filtering" );
+ }
+ else
+ {
bool range_used = false;
uint32_t i;
/* see if there are any actual ranges set and open col only if yes */
- for(i = 0; i < self->alregion_qty; i++) {
- if( self->alregion[i].from != 0 || self->alregion[i].to != 0 ) {
+ for ( i = 0; i < self->alregion_qty; i++ )
+ {
+ if ( self->alregion[ i ].from != 0 || self->alregion[ i ].to != 0 )
+ {
range_used = true;
break;
}
}
- if( range_used ) {
- if( COLNF(self->col_pos, "REF_POS", "INSDC:coord:zero") ) {
- LOGMSG(klogWarn, "Column REF_POS is not found, no region position filtering");
+ if ( range_used )
+ {
+ if ( COLNF( self->col_pos, "REF_POS", "INSDC:coord:zero" ) )
+ {
+ LOGMSG( klogWarn, "Column REF_POS is not found, no region position filtering" );
rc = 0;
- } else {
- for(i = 0; i < self->alregion_qty; i++) {
- if( self->alregion[i].from > 0 ) {
- self->alregion[i].from--;
+ }
+ else
+ {
+ for ( i = 0; i < self->alregion_qty; i++ )
+ {
+ if ( self->alregion[ i ].from > 0 )
+ {
+ self->alregion[ i ].from--;
+ }
+ if ( self->alregion[ i ].to > 0 )
+ {
+ self->alregion[ i ].to--;
}
- if( self->alregion[i].to > 0 ) {
- self->alregion[i].to--;
- } else if( self->alregion[i].to == 0 ) {
- self->alregion[i].to = ~0;
+ else if ( self->alregion[ i ].to == 0 )
+ {
+ self->alregion[ i ].to = ~0;
}
}
}
@@ -750,89 +909,115 @@ rc_t AlignRegionFilterFactory_Init(const SRASplitterFactory* cself)
return rc;
}
-static
-rc_t AlignRegionFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t AlignRegionFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- AlignRegionFilterFactory* self = (AlignRegionFilterFactory*)cself;
+ AlignRegionFilterFactory* self = ( AlignRegionFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(AlignRegionFilter), AlignRegionFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
- ((AlignRegionFilter*)(*splitter))->col_pos = self->col_pos;
- ((AlignRegionFilter*)(*splitter))->col_name = self->col_name;
- ((AlignRegionFilter*)(*splitter))->col_seqid = self->col_seqid;
- ((AlignRegionFilter*)(*splitter))->alregion = self->alregion;
- ((AlignRegionFilter*)(*splitter))->alregion_qty = self->alregion_qty;
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( AlignRegionFilter ),
+ AlignRegionFilter_GetKey, NULL, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (AlignRegionFilter*)(*splitter) )->col_pos = self->col_pos;
+ ( (AlignRegionFilter*)(*splitter) )->col_name = self->col_name;
+ ( (AlignRegionFilter*)(*splitter) )->col_seqid = self->col_seqid;
+ ( (AlignRegionFilter*)(*splitter) )->alregion = self->alregion;
+ ( (AlignRegionFilter*)(*splitter) )->alregion_qty = self->alregion_qty;
}
}
return rc;
}
-static
-void AlignRegionFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void AlignRegionFilterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- AlignRegionFilterFactory* self = (AlignRegionFilterFactory*)cself;
- SRAColumnRelease(self->col_pos);
- SRAColumnRelease(self->col_name);
- SRAColumnRelease(self->col_seqid);
+ if ( cself != NULL )
+ {
+ AlignRegionFilterFactory* self = ( AlignRegionFilterFactory* )cself;
+ SRAColumnRelease( self->col_pos );
+ SRAColumnRelease( self->col_name );
+ SRAColumnRelease( self->col_seqid );
}
}
-static
-rc_t AlignRegionFilterFactory_Make(const SRASplitterFactory** cself, const SRATable* table,
- TAlignedRegion* alregion, uint32_t alregion_qty)
+
+static rc_t AlignRegionFilterFactory_Make( const SRASplitterFactory** cself,
+ const SRATable* table, TAlignedRegion* alregion, uint32_t alregion_qty )
{
rc_t rc = 0;
AlignRegionFilterFactory* obj = NULL;
- if( cself == NULL || table == NULL ) {
- rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
- AlignRegionFilterFactory_Init,
- AlignRegionFilterFactory_NewObj,
- AlignRegionFilterFactory_Release)) == 0 ) {
- obj = (AlignRegionFilterFactory*)*cself;
- obj->table = table;
- obj->alregion = alregion;
- obj->alregion_qty = alregion_qty;
+ if ( cself == NULL || table == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+ AlignRegionFilterFactory_Init,
+ AlignRegionFilterFactory_NewObj,
+ AlignRegionFilterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( AlignRegionFilterFactory* )*cself;
+ obj->table = table;
+ obj->alregion = alregion;
+ obj->alregion_qty = alregion_qty;
+ }
}
return rc;
}
/* ### alignment meta-pair distance filtering ##################################################### */
-typedef struct AlignPairDistanceFilter_struct {
+typedef struct AlignPairDistanceFilter_struct
+{
const SRAColumn* col_tlen;
bool mp_dist_unknown;
const TMatepairDistance* mp_dist;
uint32_t mp_dist_qty;
} AlignPairDistanceFilter;
-static
-rc_t AlignPairDistanceFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t AlignPairDistanceFilter_GetKey( const SRASplitter* cself,
+ const char** key, spotid_t spot, readmask_t* readmask )
{
rc_t rc = 0;
- AlignPairDistanceFilter* self = (AlignPairDistanceFilter*)cself;
+ AlignPairDistanceFilter* self = ( AlignPairDistanceFilter* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
*key = "";
- reset_readmask(readmask);
- if( self->col_tlen ) {
+ reset_readmask( readmask );
+ if ( self->col_tlen )
+ {
uint32_t i, j;
bitsz_t o, nreads;
int32_t* tlen;
- if( (rc = SRAColumnRead(self->col_tlen, spot, (const void **)&tlen, &o, &nreads)) == 0 ) {
+ rc = SRAColumnRead( self->col_tlen, spot, (const void **)&tlen, &o, &nreads );
+ if ( rc == 0 )
+ {
nreads = nreads / sizeof(*tlen) / 8;
- for(i = 0; i < self->mp_dist_qty; i++) {
- for(j = 0; j < nreads; j++) {
- if( (tlen[j] == 0 && !self->mp_dist_unknown) ||
- (tlen[j] != 0 && (tlen[j] < self->mp_dist[i].from || self->mp_dist[i].to < tlen[j])) ) {
- unset_readmask(readmask, j);
+ for ( i = 0; i < self->mp_dist_qty; i++ )
+ {
+ for ( j = 0; j < nreads; j++ )
+ {
+ if ( ( tlen[ j ] == 0 && !self->mp_dist_unknown) ||
+ ( tlen[ j ] != 0 &&
+ ( tlen[ j ] < self->mp_dist[ i ].from || self->mp_dist[ i ].to < tlen[ j ] ) ) )
+ {
+ unset_readmask( readmask, j );
}
}
}
@@ -842,7 +1027,9 @@ rc_t AlignPairDistanceFilter_GetKey(const SRASplitter* cself, const char** key,
return rc;
}
-typedef struct AlignPairDistanceFilterFactory_struct {
+
+typedef struct AlignPairDistanceFilterFactory_struct
+{
const SRATable* table;
const SRAColumn* col_tlen;
bool mp_dist_unknown;
@@ -850,26 +1037,33 @@ typedef struct AlignPairDistanceFilterFactory_struct {
uint32_t mp_dist_qty;
} AlignPairDistanceFilterFactory;
-static
-rc_t AlignPairDistanceFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t AlignPairDistanceFilterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- AlignPairDistanceFilterFactory* self = (AlignPairDistanceFilterFactory*)cself;
-
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
- } else {
- if( !((rc = SRATableOpenColumnRead(self->table, &self->col_tlen, "TEMPLATE_LEN", "I32")) == 0 ||
- GetRCState(rc) == rcExists) && GetRCState(rc) == rcNotFound ) {
- LOGMSG(klogWarn, "Column TLEN was not found, no distance filtering");
+ AlignPairDistanceFilterFactory* self = ( AlignPairDistanceFilterFactory* )cself;
+
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRATableOpenColumnRead( self->table, &self->col_tlen, "TEMPLATE_LEN", "I32" );
+ if( !( rc == 0 || GetRCState( rc ) == rcExists ) && GetRCState( rc ) == rcNotFound )
+ {
+ LOGMSG( klogWarn, "Column TLEN was not found, no distance filtering" );
self->col_tlen = NULL;
rc = 0;
}
- if( rc == 0 ) {
+ if ( rc == 0 )
+ {
uint32_t i;
- for(i = 0; i < self->mp_dist_qty; i++ ) {
- if( self->mp_dist[i].to == 0 ) {
- self->mp_dist[i].to = ~0;
+ for ( i = 0; i < self->mp_dist_qty; i++ )
+ {
+ if ( self->mp_dist[ i ].to == 0 )
+ {
+ self->mp_dist[ i ].to = ~0;
}
}
}
@@ -877,1093 +1071,1599 @@ rc_t AlignPairDistanceFilterFactory_Init(const SRASplitterFactory* cself)
return rc;
}
-static
-rc_t AlignPairDistanceFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t AlignPairDistanceFilterFactory_NewObj( const SRASplitterFactory* cself,
+ const SRASplitter** splitter )
{
rc_t rc = 0;
- AlignPairDistanceFilterFactory* self = (AlignPairDistanceFilterFactory*)cself;
+ AlignPairDistanceFilterFactory* self = ( AlignPairDistanceFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(AlignPairDistanceFilter), AlignPairDistanceFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
- ((AlignPairDistanceFilter*)(*splitter))->col_tlen = self->col_tlen;
- ((AlignPairDistanceFilter*)(*splitter))->mp_dist_unknown = self->mp_dist_unknown;
- ((AlignPairDistanceFilter*)(*splitter))->mp_dist = self->mp_dist;
- ((AlignPairDistanceFilter*)(*splitter))->mp_dist_qty = self->mp_dist_qty;
+ if ( self == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( AlignPairDistanceFilter ),
+ AlignPairDistanceFilter_GetKey, NULL, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (AlignPairDistanceFilter*)(*splitter) )->col_tlen = self->col_tlen;
+ ( (AlignPairDistanceFilter*)(*splitter) )->mp_dist_unknown = self->mp_dist_unknown;
+ ( (AlignPairDistanceFilter*)(*splitter) )->mp_dist = self->mp_dist;
+ ( (AlignPairDistanceFilter*)(*splitter) )->mp_dist_qty = self->mp_dist_qty;
}
}
return rc;
}
-static
-void AlignPairDistanceFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void AlignPairDistanceFilterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- AlignPairDistanceFilterFactory* self = (AlignPairDistanceFilterFactory*)cself;
- SRAColumnRelease(self->col_tlen);
+ if ( cself != NULL )
+ {
+ AlignPairDistanceFilterFactory* self = ( AlignPairDistanceFilterFactory* )cself;
+ SRAColumnRelease( self->col_tlen );
}
}
-static
-rc_t AlignPairDistanceFilterFactory_Make(const SRASplitterFactory** cself, const SRATable* table,
- bool mp_dist_unknown, TMatepairDistance* mp_dist, uint32_t mp_dist_qty)
+
+static rc_t AlignPairDistanceFilterFactory_Make( const SRASplitterFactory** cself,
+ const SRATable* table, bool mp_dist_unknown, TMatepairDistance* mp_dist, uint32_t mp_dist_qty )
{
rc_t rc = 0;
AlignPairDistanceFilterFactory* obj = NULL;
- if( cself == NULL || table == NULL ) {
- rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
- AlignPairDistanceFilterFactory_Init,
- AlignPairDistanceFilterFactory_NewObj,
- AlignPairDistanceFilterFactory_Release)) == 0 ) {
- obj = (AlignPairDistanceFilterFactory*)*cself;
- obj->table = table;
- obj->mp_dist_unknown = mp_dist_unknown;
- obj->mp_dist = mp_dist;
- obj->mp_dist_qty = mp_dist_qty;
+ if ( cself == NULL || table == NULL )
+ {
+ rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+ AlignPairDistanceFilterFactory_Init,
+ AlignPairDistanceFilterFactory_NewObj,
+ AlignPairDistanceFilterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( AlignPairDistanceFilterFactory* ) *cself;
+ obj->table = table;
+ obj->mp_dist_unknown = mp_dist_unknown;
+ obj->mp_dist = mp_dist;
+ obj->mp_dist_qty = mp_dist_qty;
+ }
}
return rc;
}
+
/* ============== FASTQ read type (bio/tech) filter ============================ */
-typedef struct FastqBioFilter_struct {
+typedef struct FastqBioFilter_struct
+{
const FastqReader* reader;
} FastqBioFilter;
/* filter out non-bio reads */
-static
-rc_t FastqBioFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+static rc_t FastqBioFilter_GetKey( const SRASplitter* cself, const char** key,
+ spotid_t spot, readmask_t* readmask )
{
rc_t rc = 0;
- FastqBioFilter* self = (FastqBioFilter*)cself;
+ FastqBioFilter* self = ( FastqBioFilter* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+ }
+ else
+ {
uint32_t num_reads = 0;
*key = NULL;
- if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
- if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
+ rc = FastqReaderSeekSpot( self->reader, spot );
+ if ( rc == 0 )
+ {
+ rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+ if ( rc == 0 )
+ {
uint32_t readId;
- SRA_DUMP_DBG(3, ("%s %u row reads: ", __func__, spot));
- for(readId = 0; rc == 0 && readId < num_reads; readId++) {
- if( isset_readmask(readmask, readId) ) {
+ SRA_DUMP_DBG( 3, ( "%s %u row reads: ", __func__, spot ) );
+ for (readId = 0; rc == 0 && readId < num_reads; readId++ )
+ {
+ if ( isset_readmask( readmask, readId ) )
+ {
SRAReadTypes read_type;
- if( (rc = FastqReader_SpotReadInfo(self->reader, readId + 1, &read_type,
- NULL, NULL, NULL, NULL)) == 0 ) {
- if( !(read_type & SRA_READ_TYPE_BIOLOGICAL) ) {
- unset_readmask(readmask, readId);
- } else {
- SRA_DUMP_DBG(3, (" %u", readId));
+ rc = FastqReader_SpotReadInfo( self->reader, readId + 1, &read_type,
+ NULL, NULL, NULL, NULL);
+ if ( rc == 0 )
+ {
+ if ( !( read_type & SRA_READ_TYPE_BIOLOGICAL ) )
+ {
+ unset_readmask( readmask, readId );
+ }
+ else
+ {
+ SRA_DUMP_DBG( 3, ( " %u", readId ) );
}
}
}
}
*key = "";
- SRA_DUMP_DBG(3, (" key '%s'\n", *key));
+ SRA_DUMP_DBG( 3, ( " key '%s'\n", *key ) );
}
- } else if( GetRCState(rc) == rcNotFound ) {
- SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+ }
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
rc = 0;
}
}
return rc;
}
-typedef struct FastqBioFilterFactory_struct {
+
+typedef struct FastqBioFilterFactory_struct
+{
const char* accession;
const SRATable* table;
const FastqReader* reader;
} FastqBioFilterFactory;
-static
-rc_t FastqBioFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqBioFilterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- FastqBioFilterFactory* self = (FastqBioFilterFactory*)cself;
+ FastqBioFilterFactory* self = ( FastqBioFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else {
- rc = FastqReaderMake(&self->reader, self->table, self->accession,
- /* preserve orig spot format to save on conversions */
- FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false,
- false, !FastqArgs.applyClip, 0,
- FastqArgs.offset, '\0', 0, 0);
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = FastqReaderMake( &self->reader, self->table, self->accession,
+ /* preserve orig spot format to save on conversions */
+ FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false,
+ false, !FastqArgs.applyClip, 0,
+ FastqArgs.offset, '\0', 0, 0) ;
}
return rc;
}
-static
-rc_t FastqBioFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqBioFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- FastqBioFilterFactory* self = (FastqBioFilterFactory*)cself;
+ FastqBioFilterFactory* self = ( FastqBioFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(FastqBioFilter), FastqBioFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
- ((FastqBioFilter*)(*splitter))->reader = self->reader;
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( FastqBioFilter ),
+ FastqBioFilter_GetKey, NULL, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (FastqBioFilter*)(*splitter) )->reader = self->reader;
}
}
return rc;
}
-static
-void FastqBioFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqBioFilterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- FastqBioFilterFactory* self = (FastqBioFilterFactory*)cself;
- FastqReaderWhack(self->reader);
+ if ( cself != NULL )
+ {
+ FastqBioFilterFactory* self = ( FastqBioFilterFactory* )cself;
+ FastqReaderWhack( self->reader );
}
}
-static
-rc_t FastqBioFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqBioFilterFactory_Make( const SRASplitterFactory** cself,
+ const char* accession, const SRATable* table )
{
rc_t rc = 0;
FastqBioFilterFactory* obj = NULL;
- if( cself == NULL || accession == NULL || table == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
- FastqBioFilterFactory_Init,
- FastqBioFilterFactory_NewObj,
- FastqBioFilterFactory_Release)) == 0 ) {
- obj = (FastqBioFilterFactory*)*cself;
- obj->accession = accession;
- obj->table = table;
+ if ( cself == NULL || accession == NULL || table == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+ FastqBioFilterFactory_Init,
+ FastqBioFilterFactory_NewObj,
+ FastqBioFilterFactory_Release );
+
+ if ( rc == 0 )
+ {
+ obj = ( FastqBioFilterFactory* )*cself;
+ obj->accession = accession;
+ obj->table = table;
+ }
}
return rc;
}
+
/* ============== FASTQ number of reads filter ============================ */
-typedef struct FastqRNumberFilter_struct {
+typedef struct FastqRNumberFilter_struct
+{
const FastqReader* reader;
} FastqRNumberFilter;
-static
-rc_t FastqRNumberFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+static rc_t FastqRNumberFilter_GetKey( const SRASplitter* cself, const char** key,
+ spotid_t spot, readmask_t* readmask )
{
rc_t rc = 0;
- FastqRNumberFilter* self = (FastqRNumberFilter*)cself;
+ FastqRNumberFilter* self = ( FastqRNumberFilter* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+ }
+ else
+ {
uint32_t num_reads = 0;
*key = NULL;
- if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
- if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
+ rc = FastqReaderSeekSpot( self->reader, spot );
+ if ( rc == 0 )
+ {
+ rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+ if ( rc == 0 )
+ {
int readId, q;
- SRA_DUMP_DBG(3, ("%s %u row reads: ", __func__, spot));
- for(readId = 0, q = 0; readId < num_reads; readId++) {
- if( isset_readmask(readmask, readId) ) {
- if( ++q > FastqArgs.maxReads ) {
- unset_readmask(readmask, 1 << readId);
- } else {
- SRA_DUMP_DBG(3, (" %u", readId));
+ SRA_DUMP_DBG( 3, ( "%s %u row reads: ", __func__, spot ) );
+ for ( readId = 0, q = 0; readId < num_reads; readId++ )
+ {
+ if ( isset_readmask( readmask, readId ) )
+ {
+ if ( ++q > FastqArgs.maxReads )
+ {
+ unset_readmask( readmask, 1 << readId );
+ }
+ else
+ {
+ SRA_DUMP_DBG( 3, ( " %u", readId ) );
}
}
}
*key = "";
- SRA_DUMP_DBG(3, (" key '%s'\n", *key));
+ SRA_DUMP_DBG( 3, ( " key '%s'\n", *key ) );
}
- } else if( GetRCState(rc) == rcNotFound ) {
- SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+ }
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
rc = 0;
}
}
return rc;
}
-typedef struct FastqRNumberFilterFactory_struct {
+
+typedef struct FastqRNumberFilterFactory_struct
+{
const char* accession;
const SRATable* table;
const FastqReader* reader;
} FastqRNumberFilterFactory;
-static
-rc_t FastqRNumberFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqRNumberFilterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- FastqRNumberFilterFactory* self = (FastqRNumberFilterFactory*)cself;
+ FastqRNumberFilterFactory* self = ( FastqRNumberFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else {
- rc = FastqReaderMake(&self->reader, self->table, self->accession,
- /* preserve orig spot format to save on conversions */
- FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false,
- false, !FastqArgs.applyClip, 0,
- FastqArgs.offset, '\0', 0, 0);
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = FastqReaderMake( &self->reader, self->table, self->accession,
+ /* preserve orig spot format to save on conversions */
+ FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false,
+ false, !FastqArgs.applyClip, 0,
+ FastqArgs.offset, '\0', 0, 0 );
}
return rc;
}
-static
-rc_t FastqRNumberFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqRNumberFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- FastqRNumberFilterFactory* self = (FastqRNumberFilterFactory*)cself;
+ FastqRNumberFilterFactory* self = ( FastqRNumberFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(FastqRNumberFilter), FastqRNumberFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
- ((FastqRNumberFilter*)(*splitter))->reader = self->reader;
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( FastqRNumberFilter ),
+ FastqRNumberFilter_GetKey, NULL, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (FastqRNumberFilter*)(*splitter) )->reader = self->reader;
}
}
return rc;
}
-static
-void FastqRNumberFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqRNumberFilterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- FastqRNumberFilterFactory* self = (FastqRNumberFilterFactory*)cself;
- FastqReaderWhack(self->reader);
+ if ( cself != NULL )
+ {
+ FastqRNumberFilterFactory* self = ( FastqRNumberFilterFactory* )cself;
+ FastqReaderWhack( self->reader );
}
}
-static
-rc_t FastqRNumberFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqRNumberFilterFactory_Make( const SRASplitterFactory** cself,
+ const char* accession, const SRATable* table )
{
rc_t rc = 0;
FastqRNumberFilterFactory* obj = NULL;
- if( cself == NULL || accession == NULL || table == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
- FastqRNumberFilterFactory_Init,
- FastqRNumberFilterFactory_NewObj,
- FastqRNumberFilterFactory_Release)) == 0 ) {
- obj = (FastqRNumberFilterFactory*)*cself;
- obj->accession = accession;
- obj->table = table;
+ if ( cself == NULL || accession == NULL || table == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
}
- return rc;
-}
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+ FastqRNumberFilterFactory_Init,
+ FastqRNumberFilterFactory_NewObj,
+ FastqRNumberFilterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( FastqRNumberFilterFactory* )*cself;
+ obj->accession = accession;
+ obj->table = table;
+ }
+ }
+ return rc;
+}
/* ============== FASTQ quality filter ============================ */
-typedef struct FastqQFilter_struct {
+typedef struct FastqQFilter_struct
+{
const FastqReader* reader;
- char buf[512 * 1024];
+ KDataBuffer* kdbuf;
} FastqQFilter;
/* filter out reads by leading/trialing quality */
-static
-rc_t FastqQFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+static rc_t FastqQFilter_GetKey( const SRASplitter* cself, const char** key,
+ spotid_t spot, readmask_t* readmask )
{
rc_t rc = 0;
- FastqQFilter* self = (FastqQFilter*)cself;
+ FastqQFilter* self = ( FastqQFilter* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+ }
+ else
+ {
uint32_t num_reads = 0, spot_len;
*key = NULL;
- if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
- if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads)) == 0 ) {
+ rc = FastqReaderSeekSpot( self->reader, spot );
+ if ( rc == 0 )
+ {
+ rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads );
+ if ( rc == 0 )
+ {
static char const* const baseStr = "NNNNNNNNNN";
static char const* const colorStr = "..........";
- uint32_t readId, xLen = 10;
+ static const uint32_t strLen = 10;
- SRA_DUMP_DBG(3, ("%s %u row reads: ", __func__, spot));
- if( FastqArgs.split_spot ) {
- INSDC_coord_len read_len = 0;
- for(readId = 0; rc == 0 && readId < num_reads; readId++) {
- if( isset_readmask(readmask, readId) ) {
- if( (rc = FastqReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len)) == 0 ) {
- if( read_len < xLen ) {
- xLen = read_len;
- }
- if( (rc = FastqReaderBase(self->reader, readId + 1, self->buf, sizeof(self->buf), NULL)) == 0 ) {
- if( (FastqArgs.is_platform_cs_native &&
- (strncmp(&self->buf[1], colorStr, xLen) == 0 ||
- strcmp(&self->buf[read_len - xLen + 1], colorStr) == 0)) ||
- (strncmp(self->buf, baseStr, xLen) == 0 ||
- strcmp(&self->buf[read_len - xLen], baseStr) == 0) ) {
- unset_readmask(readmask, readId);
- } else {
- SRA_DUMP_DBG(3, (" %u", readId));
+ SRA_DUMP_DBG( 3, ( "%s %u row reads: ", __func__, spot ) );
+ if ( FastqArgs.split_spot )
+ {
+ uint32_t readId;
+ INSDC_coord_len read_len;
+ for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+ {
+ if ( isset_readmask( readmask, readId ) )
+ {
+ rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len );
+ if ( rc == 0 )
+ {
+ uint32_t xLen = read_len < strLen ? read_len : strLen;
+ IF_BUF( ( FastqReaderBase(self->reader, readId + 1,
+ self->kdbuf->base, KDataBufferBytes( self->kdbuf ), NULL) ), self->kdbuf, read_len )
+ {
+ const char* b = self->kdbuf->base;
+ if ( ( FastqArgs.is_platform_cs_native &&
+ ( strncmp( &b[ 1 ], colorStr, xLen) == 0 || strcmp( &b[ read_len - xLen + 1 ], colorStr ) == 0 ) ) ||
+ ( strncmp( b, baseStr, xLen ) == 0 || strcmp( &b[ read_len - xLen ], baseStr ) == 0 ) )
+ {
+ unset_readmask( readmask, readId );
+ }
+ else
+ {
+ SRA_DUMP_DBG( 3, ( " %u", readId ) );
}
}
}
}
}
*key = "";
- } else {
- if( spot_len < xLen ) {
- xLen = spot_len;
- }
- if( (rc = FastqReaderBase(self->reader, 0, self->buf, sizeof(self->buf), NULL)) == 0 ) {
- if( (FastqArgs.is_platform_cs_native &&
- (strncmp(&self->buf[1], colorStr, xLen) == 0 ||
- strcmp(&self->buf[spot_len - xLen + 1], colorStr) == 0)) ||
- (strncmp(self->buf, baseStr, xLen) == 0 ||
- strcmp(&self->buf[spot_len - xLen], baseStr) == 0) ) {
- } else {
+ }
+ else
+ {
+ uint32_t xLen = spot_len < strLen ? spot_len : strLen;
+ IF_BUF( ( FastqReaderBase( self->reader, 0, self->kdbuf->base, KDataBufferBytes( self->kdbuf ), NULL ) ), self->kdbuf, spot_len )
+ {
+ const char* b = self->kdbuf->base;
+ if ( ( FastqArgs.is_platform_cs_native &&
+ ( strncmp( &b[ 1 ], colorStr, xLen ) == 0 || strcmp( &b[ spot_len - xLen + 1 ], colorStr ) == 0 ) ) ||
+ ( strncmp( b, baseStr, xLen ) == 0 || strcmp( &b[ spot_len - xLen ], baseStr ) == 0 ) )
+ {
+ }
+ else
+ {
*key = "";
- SRA_DUMP_DBG(3, (" whole spot"));
+ SRA_DUMP_DBG( 3, ( " whole spot" ) );
}
}
}
- SRA_DUMP_DBG(3, (" key '%s'\n", *key));
+ SRA_DUMP_DBG( 3, ( " key '%s'\n", *key ) );
}
- } else if( GetRCState(rc) == rcNotFound ) {
- SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+ }
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
rc = 0;
}
}
return rc;
}
-typedef struct FastqQFilterFactory_struct {
+
+typedef struct FastqQFilterFactory_struct
+{
const char* accession;
const SRATable* table;
const FastqReader* reader;
+ KDataBuffer kdbuf;
} FastqQFilterFactory;
-static
-rc_t FastqQFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqQFilterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- FastqQFilterFactory* self = (FastqQFilterFactory*)cself;
+ FastqQFilterFactory* self = ( FastqQFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else {
- rc = FastqReaderMake(&self->reader, self->table, self->accession,
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = KDataBufferMakeBytes( &self->kdbuf, DATABUFFERINITSIZE );
+ if ( rc == 0 )
+ {
+ rc = FastqReaderMake( &self->reader, self->table, self->accession,
/* preserve orig spot format to save on conversions */
- FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false,
+ FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false,
false, !FastqArgs.applyClip, 0,
- FastqArgs.offset, '\0', 0, 0);
+ FastqArgs.offset, '\0', 0, 0 );
+ }
}
return rc;
}
-static
-rc_t FastqQFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqQFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- FastqQFilterFactory* self = (FastqQFilterFactory*)cself;
+ FastqQFilterFactory* self = ( FastqQFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(FastqQFilter), FastqQFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
- ((FastqQFilter*)(*splitter))->reader = self->reader;
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( FastqQFilter ), FastqQFilter_GetKey, NULL, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (FastqQFilter*)(*splitter) )->reader = self->reader;
+ ( (FastqQFilter*)(*splitter) )->kdbuf = &self->kdbuf;
}
}
return rc;
}
-static
-void FastqQFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqQFilterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- FastqQFilterFactory* self = (FastqQFilterFactory*)cself;
- FastqReaderWhack(self->reader);
+ if ( cself != NULL )
+ {
+ FastqQFilterFactory* self = ( FastqQFilterFactory* )cself;
+ KDataBufferWhack( &self->kdbuf );
+ FastqReaderWhack( self->reader );
}
}
-static
-rc_t FastqQFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqQFilterFactory_Make( const SRASplitterFactory** cself,
+ const char* accession, const SRATable* table )
{
rc_t rc = 0;
FastqQFilterFactory* obj = NULL;
- if( cself == NULL || accession == NULL || table == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
- FastqQFilterFactory_Init,
- FastqQFilterFactory_NewObj,
- FastqQFilterFactory_Release)) == 0 ) {
- obj = (FastqQFilterFactory*)*cself;
- obj->accession = accession;
- obj->table = table;
+ if ( cself == NULL || accession == NULL || table == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+ FastqQFilterFactory_Init,
+ FastqQFilterFactory_NewObj,
+ FastqQFilterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( FastqQFilterFactory* )*cself;
+ obj->accession = accession;
+ obj->table = table;
+ }
}
return rc;
}
+
/* ============== FASTQ min read length filter ============================ */
-typedef struct FastqReadLenFilter_struct {
+
+typedef struct FastqReadLenFilter_struct
+{
const FastqReader* reader;
} FastqReadLenFilter;
-static
-rc_t FastqReadLenFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t FastqReadLenFilter_GetKey( const SRASplitter* cself, const char** key,
+ spotid_t spot, readmask_t* readmask )
{
rc_t rc = 0;
- FastqReadLenFilter* self = (FastqReadLenFilter*)cself;
+ FastqReadLenFilter* self = ( FastqReadLenFilter* )cself;
- if( self == NULL || key == NULL ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+ }
+ else
+ {
uint32_t num_reads = 0, spot_len = 0;
*key = NULL;
- if( rc == 0 && (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
- if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads)) == 0 ) {
- SRA_DUMP_DBG(3, ("%s %u row reads:", __func__, spot));
- if( FastqArgs.split_spot ) {
+ rc = FastqReaderSeekSpot( self->reader, spot );
+ if ( rc == 0 )
+ {
+ rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads );
+ if ( rc == 0 )
+ {
+ SRA_DUMP_DBG( 3, ( "%s %u row reads:", __func__, spot ) );
+ if ( FastqArgs.split_spot )
+ {
uint32_t readId;
INSDC_coord_len read_len = 0;
- for(readId = 0; rc == 0 && readId < num_reads; readId++) {
- if( isset_readmask(readmask, readId) ) {
- if( (rc = FastqReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len)) == 0 ) {
- if( read_len < FastqArgs.minReadLen ) {
- unset_readmask(readmask, readId);
- } else {
- SRA_DUMP_DBG(3, (" %u", readId));
+ for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+ {
+ if ( isset_readmask( readmask, readId ) )
+ {
+ rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len );
+ if ( rc == 0 )
+ {
+ if ( read_len < FastqArgs.minReadLen )
+ {
+ unset_readmask( readmask, readId );
+ }
+ else
+ {
+ SRA_DUMP_DBG( 3, ( " %u", readId ) );
}
}
}
}
*key = "";
- } else {
- if( spot_len >= FastqArgs.minReadLen ) {
+ }
+ else
+ {
+ if ( spot_len >= FastqArgs.minReadLen )
+ {
*key = "";
- SRA_DUMP_DBG(3, (" whole spot"));
+ SRA_DUMP_DBG( 3, ( " whole spot" ) );
}
}
- SRA_DUMP_DBG(3, ("\n"));
+ SRA_DUMP_DBG( 3, ( "\n" ) );
}
- } else if( GetRCState(rc) == rcNotFound ) {
- SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+ }
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
rc = 0;
}
}
return rc;
}
-typedef struct FastqReadLenFilterFactory_struct {
+
+typedef struct FastqReadLenFilterFactory_struct
+{
const char* accession;
const SRATable* table;
const FastqReader* reader;
} FastqReadLenFilterFactory;
-static
-rc_t FastqReadLenFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqReadLenFilterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- FastqReadLenFilterFactory* self = (FastqReadLenFilterFactory*)cself;
+ FastqReadLenFilterFactory* self = ( FastqReadLenFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else {
- rc = FastqReaderMake(&self->reader, self->table, self->accession,
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = FastqReaderMake( &self->reader, self->table, self->accession,
/* preserve orig spot format to save on conversions */
- FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false,
- false, !FastqArgs.applyClip, 0,
- FastqArgs.offset, '\0', 0, 0);
+ FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false,
+ false, !FastqArgs.applyClip, 0,
+ FastqArgs.offset, '\0', 0, 0 );
}
return rc;
}
-static
-rc_t FastqReadLenFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqReadLenFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- FastqReadLenFilterFactory* self = (FastqReadLenFilterFactory*)cself;
+ FastqReadLenFilterFactory* self = ( FastqReadLenFilterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(FastqReadLenFilter), FastqReadLenFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
- ((FastqReadLenFilter*)(*splitter))->reader = self->reader;
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( FastqReadLenFilter ),
+ FastqReadLenFilter_GetKey, NULL, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (FastqReadLenFilter*)(*splitter) )->reader = self->reader;
}
}
return rc;
}
-static
-void FastqReadLenFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqReadLenFilterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- FastqReadLenFilterFactory* self = (FastqReadLenFilterFactory*)cself;
- FastqReaderWhack(self->reader);
+ if ( cself != NULL )
+ {
+ FastqReadLenFilterFactory* self = ( FastqReadLenFilterFactory* )cself;
+ FastqReaderWhack( self->reader );
}
}
-static
-rc_t FastqReadLenFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqReadLenFilterFactory_Make( const SRASplitterFactory** cself,
+ const char* accession, const SRATable* table )
{
rc_t rc = 0;
FastqReadLenFilterFactory* obj = NULL;
- if( cself == NULL || accession == NULL || table == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
- FastqReadLenFilterFactory_Init,
- FastqReadLenFilterFactory_NewObj,
- FastqReadLenFilterFactory_Release)) == 0 ) {
- obj = (FastqReadLenFilterFactory*)*cself;
- obj->accession = accession;
- obj->table = table;
+ if ( cself == NULL || accession == NULL || table == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+ FastqReadLenFilterFactory_Init,
+ FastqReadLenFilterFactory_NewObj,
+ FastqReadLenFilterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( FastqReadLenFilterFactory* )*cself;
+ obj->accession = accession;
+ obj->table = table;
+ }
}
return rc;
}
+
/* ============== FASTQ read splitter ============================ */
char* FastqReadSplitter_key_buf = NULL;
-typedef struct FastqReadSplitter_struct {
+
+typedef struct FastqReadSplitter_struct
+{
const FastqReader* reader;
SRASplitter_Keys* keys;
uint32_t keys_max;
} FastqReadSplitter;
-static
-rc_t FastqReadSplitter_GetKeySet(const SRASplitter* cself, const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask)
+
+static rc_t FastqReadSplitter_GetKeySet( const SRASplitter* cself, const SRASplitter_Keys** key,
+ uint32_t* keys, spotid_t spot, const readmask_t* readmask )
{
rc_t rc = 0;
- FastqReadSplitter* self = (FastqReadSplitter*)cself;
+ FastqReadSplitter* self = ( FastqReadSplitter* )cself;
const size_t key_offset = 5;
- if( self == NULL || key == NULL ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+ }
+ else
+ {
uint32_t num_reads = 0;
*keys = 0;
- if( FastqReadSplitter_key_buf == NULL ) {
+ if ( FastqReadSplitter_key_buf == NULL )
+ {
/* initial alloc key_buf: " 1\0 2\0...\0 9\0 10\0 11\0...\03220..\08192\0" */
- if( nreads_max > 9999 ) {
+ if ( nreads_max > 9999 )
+ {
/* key_offset and sprintf format size are insufficient for keys longer than 4 digits */
- rc = RC(rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient);
- } else if( (FastqReadSplitter_key_buf = malloc(nreads_max * key_offset)) == NULL ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcMemory, rcExhausted);
- } else {
- /* fill buffer w/keys */
- int i;
- char* p = FastqReadSplitter_key_buf;
- for(i = 1; rc == 0 && i <= nreads_max; i++) {
- if( sprintf(p, "%4u", i) <= 0 ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete);
+ rc = RC( rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient );
+ }
+ else
+ {
+ FastqReadSplitter_key_buf = malloc( nreads_max * key_offset );
+ if ( FastqReadSplitter_key_buf == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcMemory, rcExhausted );
+ }
+ else
+ {
+ /* fill buffer w/keys */
+ int i;
+ char* p = FastqReadSplitter_key_buf;
+ for ( i = 1; rc == 0 && i <= nreads_max; i++ )
+ {
+ if ( sprintf( p, "%4u", i ) <= 0 )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete );
+ }
+ p += key_offset;
}
- p += key_offset;
}
}
}
- if( rc == 0 && (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
- if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
- uint32_t readId, good = 0;
- SRA_DUMP_DBG(3, ("%s %u row reads:", __func__, spot));
- for(readId = 0; rc == 0 && readId < num_reads; readId++) {
- rc = FastqReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL);
- if( !isset_readmask(readmask, readId) ) {
- continue;
- }
- if( self->keys_max < (good + 1) ) {
- void* p = realloc(self->keys, sizeof(*self->keys) * (good + 1));
- if( p == NULL ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcMemory, rcExhausted);
- break;
- } else {
- self->keys = p;
- self->keys_max = good + 1;
+ if ( rc == 0 )
+ {
+ rc = FastqReaderSeekSpot( self->reader, spot );
+ if ( rc == 0 )
+ {
+ rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+ if ( rc == 0 )
+ {
+ uint32_t readId, good = 0;
+
+ SRA_DUMP_DBG( 3, ( "%s %u row reads:", __func__, spot ) );
+ for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+ {
+ rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL );
+ if ( !isset_readmask( readmask, readId ) )
+ {
+ continue;
}
+ if ( self->keys_max < ( good + 1 ) )
+ {
+ void* p = realloc( self->keys, sizeof( *self->keys ) * ( good + 1 ) );
+ if ( p == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcMemory, rcExhausted );
+ break;
+ }
+ else
+ {
+ self->keys = p;
+ self->keys_max = good + 1;
+ }
+ }
+ self->keys[ good ].key = &FastqReadSplitter_key_buf[ readId * key_offset ];
+ while ( self->keys[ good ].key[ 0 ] == ' ' && self->keys[ good ].key[0] != '\0' )
+ {
+ self->keys[ good ].key++;
+ }
+ clear_readmask( self->keys[ good ].readmask );
+ set_readmask( self->keys[good].readmask, readId );
+ SRA_DUMP_DBG( 3, ( " key['%s']+=%u", self->keys[ good ].key, readId ) );
+ good++;
}
- self->keys[good].key = &FastqReadSplitter_key_buf[readId * key_offset];
- while( self->keys[good].key[0] == ' ' && self->keys[good].key[0] != '\0' ) {
- self->keys[good].key++;
+ if ( rc == 0 )
+ {
+ *key = self->keys;
+ *keys = good;
}
- clear_readmask(self->keys[good].readmask);
- set_readmask(self->keys[good].readmask, readId);
- SRA_DUMP_DBG(3, (" key['%s']+=%u", self->keys[good].key, readId));
- good++;
- }
- if( rc == 0 ) {
- *key = self->keys;
- *keys = good;
+ SRA_DUMP_DBG( 3, ( "\n" ) );
}
- SRA_DUMP_DBG(3, ("\n"));
}
- } else if( GetRCState(rc) == rcNotFound ) {
- SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
- rc = 0;
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+ rc = 0;
+ }
+ }
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+ rc = 0;
}
}
return rc;
}
-rc_t FastqReadSplitter_Release(const SRASplitter* cself)
+
+rc_t FastqReadSplitter_Release( const SRASplitter* cself )
{
- if( cself != NULL ) {
- FastqReadSplitter* self = (FastqReadSplitter*)cself;
- free(self->keys);
+ if ( cself != NULL )
+ {
+ FastqReadSplitter* self = ( FastqReadSplitter* )cself;
+ free( self->keys );
}
return 0;
}
-typedef struct FastqReadSplitterFactory_struct {
+
+typedef struct FastqReadSplitterFactory_struct
+{
const char* accession;
const SRATable* table;
const FastqReader* reader;
} FastqReadSplitterFactory;
-static
-rc_t FastqReadSplitterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqReadSplitterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- FastqReadSplitterFactory* self = (FastqReadSplitterFactory*)cself;
+ FastqReadSplitterFactory* self = ( FastqReadSplitterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else {
- rc = FastqReaderMake(&self->reader, self->table, self->accession,
- /* preserve orig spot format to save on conversions */
- FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false,
- false, !FastqArgs.applyClip, 0,
- FastqArgs.offset, '\0', 0, 0);
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = FastqReaderMake( &self->reader, self->table, self->accession,
+ /* preserve orig spot format to save on conversions */
+ FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false,
+ false, !FastqArgs.applyClip, 0,
+ FastqArgs.offset, '\0', 0, 0 );
}
return rc;
}
-static
-rc_t FastqReadSplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqReadSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- FastqReadSplitterFactory* self = (FastqReadSplitterFactory*)cself;
+ FastqReadSplitterFactory* self = ( FastqReadSplitterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(FastqReadSplitter), NULL, FastqReadSplitter_GetKeySet, NULL, FastqReadSplitter_Release)) == 0 ) {
- ((FastqReadSplitter*)(*splitter))->reader = self->reader;
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( FastqReadSplitter ), NULL,
+ FastqReadSplitter_GetKeySet, NULL, FastqReadSplitter_Release );
+ if ( rc == 0 )
+ {
+ ( (FastqReadSplitter*)(*splitter) )->reader = self->reader;
}
}
return rc;
}
-static
-void FastqReadSplitterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqReadSplitterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- FastqReadSplitterFactory* self = (FastqReadSplitterFactory*)cself;
- FastqReaderWhack(self->reader);
- free(FastqReadSplitter_key_buf);
+ if ( cself != NULL )
+ {
+ FastqReadSplitterFactory* self = ( FastqReadSplitterFactory* )cself;
+ FastqReaderWhack( self->reader );
+ free( FastqReadSplitter_key_buf );
+ FastqReadSplitter_key_buf = NULL;
}
}
-static
-rc_t FastqReadSplitterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqReadSplitterFactory_Make( const SRASplitterFactory** cself,
+ const char* accession, const SRATable* table )
{
rc_t rc = 0;
FastqReadSplitterFactory* obj = NULL;
- if( cself == NULL || accession == NULL || table == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterRead, sizeof(*obj),
- FastqReadSplitterFactory_Init,
- FastqReadSplitterFactory_NewObj,
- FastqReadSplitterFactory_Release)) == 0 ) {
- obj = (FastqReadSplitterFactory*)*cself;
- obj->accession = accession;
- obj->table = table;
+ if ( cself == NULL || accession == NULL || table == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterRead, sizeof( *obj ),
+ FastqReadSplitterFactory_Init,
+ FastqReadSplitterFactory_NewObj,
+ FastqReadSplitterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( FastqReadSplitterFactory* )*cself;
+ obj->accession = accession;
+ obj->table = table;
+ }
}
return rc;
}
+
/* ============== FASTQ 3 read splitter ============================ */
char* Fastq3ReadSplitter_key_buf = NULL;
-typedef struct Fastq3ReadSplitter_struct {
+typedef struct Fastq3ReadSplitter_struct
+{
const FastqReader* reader;
- SRASplitter_Keys keys[2];
+ SRASplitter_Keys keys[ 2 ];
} Fastq3ReadSplitter;
+
/* if all active reads len >= minreadlen, reads are splitted into separate files, otherwise on single key "" is returnded for all reads */
-static
-rc_t Fastq3ReadSplitter_GetKeySet(const SRASplitter* cself, const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask)
+static rc_t Fastq3ReadSplitter_GetKeySet( const SRASplitter* cself, const SRASplitter_Keys** key,
+ uint32_t* keys, spotid_t spot, const readmask_t* readmask )
{
rc_t rc = 0;
- Fastq3ReadSplitter* self = (Fastq3ReadSplitter*)cself;
+ Fastq3ReadSplitter* self = ( Fastq3ReadSplitter* )cself;
const size_t key_offset = 5;
- if( self == NULL || key == NULL ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
- } else {
+ if ( self == NULL || key == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+ }
+ else
+ {
uint32_t num_reads = 0;
*keys = 0;
- if( Fastq3ReadSplitter_key_buf == NULL ) {
+ if ( Fastq3ReadSplitter_key_buf == NULL )
+ {
/* initial alloc key_buf: " 1\0 2\0...\0 9\0 10\0 11\0...\03220..\08192\0" */
- if( nreads_max > 9999 ) {
+ if ( nreads_max > 9999 )
+ {
/* key_offset and sprintf format size are insufficient for keys longer than 4 digits */
- rc = RC(rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient);
- } else if( (Fastq3ReadSplitter_key_buf = malloc(nreads_max * key_offset)) == NULL ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcMemory, rcExhausted);
- } else {
- /* fill buffer w/keys */
- int i;
- char* p = Fastq3ReadSplitter_key_buf;
- for(i = 1; rc == 0 && i <= nreads_max; i++) {
- if( sprintf(p, "%4u", i) <= 0 ) {
- rc = RC(rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete);
+ rc = RC( rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient );
+ }
+ else
+ {
+ Fastq3ReadSplitter_key_buf = malloc( nreads_max * key_offset );
+ if ( Fastq3ReadSplitter_key_buf == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcMemory, rcExhausted );
+ }
+ else
+ {
+ /* fill buffer w/keys */
+ int i;
+ char* p = Fastq3ReadSplitter_key_buf;
+ for ( i = 1; rc == 0 && i <= nreads_max; i++ )
+ {
+ if ( sprintf( p, "%4u", i ) <= 0 )
+ {
+ rc = RC( rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete );
+ }
+ p += key_offset;
}
- p += key_offset;
}
}
}
- if( rc == 0 && (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
- if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
- uint32_t readId, good = 0;
- const uint32_t max_reads = sizeof(self->keys) /sizeof(self->keys[0]);
- SRA_DUMP_DBG(3, ("%s %u row reads:", __func__, spot));
- for(readId = 0; rc == 0 && readId < num_reads && good < max_reads; readId++) {
- rc = FastqReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL);
- if( !isset_readmask(readmask, readId) ) {
- continue;
- }
- self->keys[good].key = &Fastq3ReadSplitter_key_buf[good * key_offset];
- while( self->keys[good].key[0] == ' ' && self->keys[good].key[0] != '\0' ) {
- self->keys[good].key++;
+ if ( rc == 0 )
+ {
+ rc = FastqReaderSeekSpot( self->reader, spot );
+ if ( rc == 0 )
+ {
+ rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+ if ( rc == 0 )
+ {
+ uint32_t readId, good = 0;
+ const uint32_t max_reads = sizeof( self->keys ) /sizeof( self->keys[ 0 ] );
+
+ SRA_DUMP_DBG( 3, ( "%s %u row reads:", __func__, spot ) );
+ for ( readId = 0; rc == 0 && readId < num_reads && good < max_reads; readId++ )
+ {
+ rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL );
+ if ( !isset_readmask( readmask, readId ) )
+ {
+ continue;
+ }
+ self->keys[ good ].key = &Fastq3ReadSplitter_key_buf[ good * key_offset ];
+ while ( self->keys[ good ].key[ 0 ] == ' ' && self->keys[good].key[ 0 ] != '\0' )
+ {
+ self->keys[ good ].key++;
+ }
+ clear_readmask( self->keys[ good ].readmask );
+ set_readmask( self->keys[ good ].readmask, readId );
+ SRA_DUMP_DBG( 3, ( " key['%s']+=%u", self->keys[ good ].key, readId ) );
+ good++;
}
- clear_readmask(self->keys[good].readmask);
- set_readmask(self->keys[good].readmask, readId);
- SRA_DUMP_DBG(3, (" key['%s']+=%u", self->keys[good].key, readId));
- good++;
- }
- if( rc == 0 ) {
- *key = self->keys;
- *keys = good;
- if( good != max_reads ) {
- /* some are short -> reset keys to same value for all valid reads */
- /* run has just one read -> no suffix */
- /* or single file was requested */
- for(readId = 0; readId < good; readId++) {
- self->keys[readId].key = "";
+ if ( rc == 0 )
+ {
+ *key = self->keys;
+ *keys = good;
+ if ( good != max_reads )
+ {
+ /* some are short -> reset keys to same value for all valid reads */
+ /* run has just one read -> no suffix */
+ /* or single file was requested */
+ for ( readId = 0; readId < good; readId++ )
+ {
+ self->keys[ readId ].key = "";
+ }
+ SRA_DUMP_DBG( 3, ( " all keys joined to ''" ) );
}
- SRA_DUMP_DBG(3, (" all keys joined to ''"));
}
+ SRA_DUMP_DBG( 3, ( "\n" ) );
}
- SRA_DUMP_DBG(3, ("\n"));
}
- } else if( GetRCState(rc) == rcNotFound ) {
- SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+ rc = 0;
+ }
+ }
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
rc = 0;
}
}
return rc;
}
-typedef struct Fastq3ReadSplitterFactory_struct {
+typedef struct Fastq3ReadSplitterFactory_struct
+{
const char* accession;
const SRATable* table;
const FastqReader* reader;
} Fastq3ReadSplitterFactory;
-static
-rc_t Fastq3ReadSplitterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t Fastq3ReadSplitterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- Fastq3ReadSplitterFactory* self = (Fastq3ReadSplitterFactory*)cself;
+ Fastq3ReadSplitterFactory* self = ( Fastq3ReadSplitterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else {
- rc = FastqReaderMake(&self->reader, self->table, self->accession,
- /* preserve orig spot format to save on conversions */
- FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false,
- false, !FastqArgs.applyClip, 0,
- FastqArgs.offset, '\0', 0, 0);
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = FastqReaderMake( &self->reader, self->table, self->accession,
+ /* preserve orig spot format to save on conversions */
+ FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false,
+ false, !FastqArgs.applyClip, 0,
+ FastqArgs.offset, '\0', 0, 0 );
}
return rc;
}
-static
-rc_t Fastq3ReadSplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t Fastq3ReadSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- Fastq3ReadSplitterFactory* self = (Fastq3ReadSplitterFactory*)cself;
+ Fastq3ReadSplitterFactory* self = ( Fastq3ReadSplitterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(Fastq3ReadSplitter), NULL, Fastq3ReadSplitter_GetKeySet, NULL, NULL)) == 0 ) {
- ((Fastq3ReadSplitter*)(*splitter))->reader = self->reader;
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make( splitter, sizeof( Fastq3ReadSplitter ),
+ NULL, Fastq3ReadSplitter_GetKeySet, NULL, NULL );
+ if ( rc == 0 )
+ {
+ ( (Fastq3ReadSplitter*)(*splitter) )->reader = self->reader;
}
}
return rc;
}
-static
-void Fastq3ReadSplitterFactory_Release(const SRASplitterFactory* cself)
+
+static void Fastq3ReadSplitterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- Fastq3ReadSplitterFactory* self = (Fastq3ReadSplitterFactory*)cself;
- FastqReaderWhack(self->reader);
- free(Fastq3ReadSplitter_key_buf);
+ if ( cself != NULL )
+ {
+ Fastq3ReadSplitterFactory* self = ( Fastq3ReadSplitterFactory* )cself;
+ FastqReaderWhack( self->reader );
+ free( Fastq3ReadSplitter_key_buf );
}
}
-static
-rc_t Fastq3ReadSplitterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t Fastq3ReadSplitterFactory_Make( const SRASplitterFactory** cself,
+ const char* accession, const SRATable* table )
{
rc_t rc = 0;
Fastq3ReadSplitterFactory* obj = NULL;
- if( cself == NULL || accession == NULL || table == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterRead, sizeof(*obj),
- Fastq3ReadSplitterFactory_Init,
- Fastq3ReadSplitterFactory_NewObj,
- Fastq3ReadSplitterFactory_Release)) == 0 ) {
- obj = (Fastq3ReadSplitterFactory*)*cself;
- obj->accession = accession;
- obj->table = table;
+ if ( cself == NULL || accession == NULL || table == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterRead, sizeof( *obj ),
+ Fastq3ReadSplitterFactory_Init,
+ Fastq3ReadSplitterFactory_NewObj,
+ Fastq3ReadSplitterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = ( Fastq3ReadSplitterFactory* )*cself;
+ obj->accession = accession;
+ obj->table = table;
+ }
}
return rc;
}
+
/* ============== FASTQ formatter object ============================ */
-typedef struct FastqFormatterSplitter_struct {
+
+typedef struct FastqFormatterSplitter_struct
+{
const char* accession;
const FastqReader* reader;
- char l[4][1024 * 1024];
+ KDataBuffer* b[ 5 ];
+ size_t bsz[ 5 ]; /* fifth is for fasta line wrap */
} FastqFormatterSplitter;
-static
-rc_t FastqFormatterSplitter_DumpByRead(const SRASplitter* cself, spotid_t spot, const readmask_t* readmask)
+
+static rc_t FastqFormatterSplitter_WrapLine( const KDataBuffer* src, size_t src_sz,
+ KDataBuffer* dst, size_t* dst_sz, const uint64_t width )
{
rc_t rc = 0;
- FastqFormatterSplitter* self = (FastqFormatterSplitter*)cself;
+ size_t sz = src_sz + ( src_sz - 1 ) / width;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
- if( (rc = SRASplitter_FileActivate(cself, FastqArgs.file_extension)) == 0 ) {
+ if ( KDataBufferBytes( dst ) < sz )
+ {
+ SRA_DUMP_DBG( 10, ( "%s grow buffer from %u to %u\n", __func__, KDataBufferBytes( dst ), sz + 10 ) );
+ rc = KDataBufferResize( dst, sz + 10 );
+ }
+ if ( rc == 0 )
+ {
+ const char* s = src->base;
+ char* d = dst->base;
+ *dst_sz = sz = src_sz;
+ while ( sz > 0 )
+ {
+ memcpy( d, s, sz > width ? width : sz );
+ if ( sz <= width )
+ {
+ break;
+ }
+ d += width;
+ *d++ = '\n';
+ *dst_sz = *dst_sz + 1;
+ s += width;
+ sz -= width;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t FastqFormatterSplitter_DumpByRead( const SRASplitter* cself, spotid_t spot, const readmask_t* readmask )
+{
+ rc_t rc = 0;
+ FastqFormatterSplitter* self = ( FastqFormatterSplitter* )cself;
+
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = FastqReaderSeekSpot( self->reader, spot );
+ if ( rc == 0 )
+ {
+ rc = SRASplitter_FileActivate( cself, FastqArgs.file_extension );
+ if ( rc == 0 )
+ {
DeflineData def_data;
const char* spot_name = NULL, *spot_group = NULL, *read_name = NULL;
uint32_t readIdx, spot_len = 0;
uint32_t num_reads, readId, k;
- size_t lsz[4], sname_sz, sgrp_sz;
+ size_t sname_sz, sgrp_sz;
INSDC_coord_len rlabel_sz = 0, read_len = 0;
- if( FastqArgs.b_defline || FastqArgs.q_defline ) {
- rc = FastqReader_SpotInfo(self->reader, &spot_name, &sname_sz, &spot_group, &sgrp_sz, &spot_len, &num_reads);
- } else {
- rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads);
+ if ( FastqArgs.b_defline || FastqArgs.q_defline )
+ {
+ rc = FastqReader_SpotInfo( self->reader, &spot_name, &sname_sz, &spot_group, &sgrp_sz, &spot_len, &num_reads );
+ }
+ else
+ {
+ rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
}
- for(readId = 1, readIdx = 1; rc == 0 && readId <= num_reads; readId++, readIdx++) {
- if( !isset_readmask(readmask, readId - 1) ) {
+ for ( readId = 1, readIdx = 1; rc == 0 && readId <= num_reads; readId++, readIdx++ )
+ {
+ if ( !isset_readmask( readmask, readId - 1 ) )
+ {
continue;
}
- if( FastqArgs.b_defline || FastqArgs.q_defline ) {
- if( (rc = FastqReader_SpotReadInfo(self->reader, readId, NULL, &read_name, &rlabel_sz, NULL, &read_len)) == 0 ) {
- rc = Defline_Bind(&def_data, self->accession, &spot, spot_name, sname_sz, spot_group, sgrp_sz,
- &spot_len, &readIdx, read_name, rlabel_sz, &read_len);
+ if ( FastqArgs.b_defline || FastqArgs.q_defline )
+ {
+ rc = FastqReader_SpotReadInfo( self->reader, readId, NULL, &read_name, &rlabel_sz, NULL, &read_len );
+ if ( rc == 0 )
+ {
+ rc = Defline_Bind( &def_data, self->accession, &spot, spot_name, sname_sz, spot_group, sgrp_sz,
+ &spot_len, &readIdx, read_name, rlabel_sz, &read_len );
}
}
- if( rc == 0 ) {
- if( FastqArgs.b_defline ) {
- rc = Defline_Build(FastqArgs.b_defline, &def_data, self->l[0], sizeof(self->l[0]), &lsz[0]);
- } else {
- rc = FastqReaderBaseName(self->reader, readId, &FastqArgs.dumpCs, self->l[0], sizeof(self->l[0]), &lsz[0]);
+ if ( rc == 0 )
+ {
+ if ( FastqArgs.b_defline )
+ {
+ IF_BUF( ( Defline_Build( FastqArgs.b_defline, &def_data, self->b[0]->base,
+ KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+ }
+ else
+ {
+ IF_BUF( ( FastqReaderBaseName( self->reader, readId, &FastqArgs.dumpCs, self->b[0]->base,
+ KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
}
}
- if( rc == 0 ) {
- rc = FastqReaderBase(self->reader, readId, self->l[1], sizeof(self->l[1]), &lsz[1]);
+ if ( rc == 0 )
+ {
+ if ( FastqArgs.fasta > 0 )
+ {
+ IF_BUF( ( FastqReaderBase( self->reader, readId, self->b[4]->base, KDataBufferBytes( self->b[4] ),
+ &self->bsz[4] ) ), self->b[4], self->bsz[4] )
+ {
+ rc = FastqFormatterSplitter_WrapLine( self->b[4], self->bsz[4], self->b[1], &self->bsz[1], FastqArgs.fasta );
+ }
+ }
+ else
+ {
+ IF_BUF( ( FastqReaderBase( self->reader, readId, self->b[1]->base,
+ KDataBufferBytes( self->b[1] ), &self->bsz[1] ) ), self->b[1], self->bsz[1] );
+ }
}
- if( !FastqArgs.fasta && rc == 0 ) {
- if( FastqArgs.q_defline ) {
- rc = Defline_Build(FastqArgs.q_defline, &def_data, self->l[2], sizeof(self->l[2]), &lsz[2]);
- } else {
- rc = FastqReaderQualityName(self->reader, readId, &FastqArgs.dumpCs, self->l[2], sizeof(self->l[2]), &lsz[2]);
+ if ( !FastqArgs.fasta && rc == 0 )
+ {
+ if ( FastqArgs.q_defline )
+ {
+ IF_BUF( ( Defline_Build( FastqArgs.q_defline, &def_data, self->b[2]->base,
+ KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+ }
+ else
+ {
+ IF_BUF( ( FastqReaderQualityName( self->reader, readId, &FastqArgs.dumpCs, self->b[2]->base,
+ KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
}
- if( rc == 0 ) {
- rc = FastqReaderQuality(self->reader, readId, self->l[3], sizeof(self->l[3]), &lsz[3]);
+ if ( rc == 0 )
+ {
+ IF_BUF( ( FastqReaderQuality( self->reader, readId, self->b[3]->base,
+ KDataBufferBytes( self->b[3] ), &self->bsz[3] ) ), self->b[3], self->bsz[3] );
}
- } else if( self->l[0][0] == '@' ) {
- self->l[0][0] = '>';
}
- for(k = 0; rc == 0 && k < (FastqArgs.fasta ? 2 : 4); k++) {
- if( (rc = SRASplitter_FileWrite(cself, spot, self->l[k], lsz[k])) == 0 ) {
- rc = SRASplitter_FileWrite(cself, spot, "\n", 1);
+ else if ( ( (char*)(self->b[0]->base))[0] == '@' )
+ {
+ ( (char*)(self->b[0]->base) )[0] = '>';
+ }
+ for ( k = 0; rc == 0 && k < ( FastqArgs.fasta ? 2 : 4); k++ )
+ {
+ rc = SRASplitter_FileWrite( cself, spot, self->b[ k ]->base, self->bsz[ k ] );
+ if ( rc == 0 )
+ {
+ rc = SRASplitter_FileWrite( cself, spot, "\n", 1 );
}
}
}
}
- } else if( GetRCState(rc) == rcNotFound ) {
- SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+ }
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
rc = 0;
}
}
return rc;
}
-static
-rc_t FastqFormatterSplitter_DumpBySpot(const SRASplitter* cself, spotid_t spot, const readmask_t* readmask)
+
+static rc_t Fasta_dump( const SRASplitter* cself, FastqFormatterSplitter* self, spotid_t spot, uint32_t columns )
+{
+ uint32_t readId;
+ rc_t rc = FastqFormatterSplitter_WrapLine( self->b[4], self->bsz[4], self->b[1], &self->bsz[1], columns );
+ for ( readId = 0; rc == 0 && readId < 2; readId++ )
+ {
+ rc = SRASplitter_FileWrite( cself, spot, self->b[readId]->base, self->bsz[ readId ] );
+ if ( rc == 0 )
+ {
+ rc = SRASplitter_FileWrite( cself, spot, "\n", 1 );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t FastqFormatterSplitter_DumpBySpot( const SRASplitter* cself, spotid_t spot, const readmask_t* readmask )
{
rc_t rc = 0;
- FastqFormatterSplitter* self = (FastqFormatterSplitter*)cself;
+ FastqFormatterSplitter* self = ( FastqFormatterSplitter* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = FastqReaderSeekSpot( self->reader, spot );
+ if ( rc == 0 )
+ {
uint32_t num_reads, readId;
- rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads);
- for(readId = 0; rc == 0 && readId < num_reads; readId++) {
+ rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+ for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+ {
/* if any read in readmask is not set - skip whole spot */
- if( !isset_readmask(readmask, readId) ) {
+ if ( !isset_readmask( readmask, readId ) )
+ {
return 0;
}
}
- if( rc == 0 && (rc = SRASplitter_FileActivate(cself, FastqArgs.file_extension)) == 0 ) {
- DeflineData def_data;
- const char* spot_name = NULL, *spot_group = NULL;
- uint32_t spot_len = 0;
- size_t lsz[4], writ, sname_sz, sgrp_sz;
- const size_t lmax = sizeof(self->l[0]);
-
- if( FastqArgs.b_defline || FastqArgs.q_defline ) {
- if( (rc = FastqReader_SpotInfo(self->reader, &spot_name, &sname_sz, &spot_group, &sgrp_sz, &spot_len, NULL)) == 0 ) {
- rc = Defline_Bind(&def_data, self->accession, &spot, spot_name, sname_sz, spot_group, sgrp_sz,
- &spot_len, &readId, NULL, 0, &spot_len);
- }
- }
- if( rc == 0 ) {
- if( FastqArgs.b_defline ) {
- rc = Defline_Build(FastqArgs.b_defline, &def_data, self->l[0], sizeof(self->l[0]), &lsz[0]);
- } else {
- rc = FastqReaderBaseName(self->reader, 0, &FastqArgs.dumpCs, self->l[0], sizeof(self->l[0]), &lsz[0]);
+ if ( rc == 0 )
+ {
+ rc = SRASplitter_FileActivate( cself, FastqArgs.file_extension );
+ if ( rc == 0 )
+ {
+ DeflineData def_data;
+ const char* spot_name = NULL, *spot_group = NULL;
+ uint32_t spot_len = 0;
+ size_t writ, sname_sz, sgrp_sz;
+ const int base_i = FastqArgs.fasta ? 4 : 1;
+
+ if ( FastqArgs.b_defline || FastqArgs.q_defline )
+ {
+ rc = FastqReader_SpotInfo( self->reader, &spot_name, &sname_sz,
+ &spot_group, &sgrp_sz, &spot_len, NULL );
+ if ( rc == 0 )
+ {
+ rc = Defline_Bind( &def_data, self->accession, &spot, spot_name,
+ sname_sz, spot_group, sgrp_sz,
+ &spot_len, &readId, NULL, 0, &spot_len );
+ }
}
- lsz[1] = 0;
- if( !FastqArgs.fasta && rc == 0 ) {
- if( FastqArgs.q_defline ) {
- rc = Defline_Build(FastqArgs.q_defline, &def_data, self->l[2], sizeof(self->l[2]), &lsz[2]);
- } else {
- rc = FastqReaderQualityName(self->reader, 0, &FastqArgs.dumpCs, self->l[2], sizeof(self->l[2]), &lsz[2]);
+
+ if ( rc == 0 )
+ {
+ if ( FastqArgs.b_defline )
+ {
+ IF_BUF( ( Defline_Build( FastqArgs.b_defline, &def_data, self->b[0]->base,
+ KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+ }
+ else
+ {
+ IF_BUF( ( FastqReaderBaseName( self->reader, 0, &FastqArgs.dumpCs, self->b[0]->base,
+ KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+ }
+ self->bsz[ base_i ] = 0;
+ if ( !FastqArgs.fasta && rc == 0 )
+ {
+ if ( FastqArgs.q_defline )
+ {
+ IF_BUF( ( Defline_Build( FastqArgs.q_defline, &def_data, self->b[2]->base,
+ KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+ }
+ else
+ {
+ IF_BUF( ( FastqReaderQualityName( self->reader, 0, &FastqArgs.dumpCs, self->b[2]->base,
+ KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+ }
+ self->bsz[3] = 0;
+ }
+ else if ( ( (char*)(self->b[0]->base) )[0] == '@' )
+ {
+ ( (char*)(self->b[0]->base) )[0] = '>';
}
- lsz[3] = 0;
- } else if( self->l[0][0] == '@' ) {
- self->l[0][0] = '>';
}
- }
- for(readId = 1; rc == 0 && readId <= num_reads; readId++) {
- rc = FastqReaderBase(self->reader, readId, &self->l[1][lsz[1]], lmax - lsz[1], &writ);
- lsz[1] += writ;
- if( !FastqArgs.fasta && rc == 0 ) {
- rc = FastqReaderQuality(self->reader, readId, &self->l[3][lsz[3]], lmax - lsz[3], &writ);
- lsz[3] += writ;
+
+ for ( readId = 1; rc == 0 && readId <= num_reads; readId++ )
+ {
+ IF_BUF( ( FastqReaderBase( self->reader, readId, &( (char*)(self->b[base_i]->base) )[ self->bsz[ base_i ] ],
+ KDataBufferBytes( self->b[ base_i ] ) - self->bsz[ base_i ], &writ) ), self->b[ base_i ], self->bsz[ base_i ] + writ )
+ {
+ self->bsz[base_i] += writ;
+ if ( !FastqArgs.fasta )
+ {
+ IF_BUF( ( FastqReaderQuality( self->reader, readId, &( (char*)(self->b[3]->base) )[ self->bsz[3] ],
+ KDataBufferBytes( self->b[3] ) - self->bsz[3], &writ ) ), self->b[3], self->bsz[3] + writ )
+ {
+ self->bsz[ 3 ] += writ;
+ }
+ }
+ }
}
- }
- for(readId = 0; rc == 0 && readId < (FastqArgs.fasta ? 2 : 4); readId++) {
- if( (rc = SRASplitter_FileWrite(cself, spot, self->l[readId], lsz[readId])) == 0 ) {
- rc = SRASplitter_FileWrite(cself, spot, "\n", 1);
+
+ if ( rc == 0 )
+ {
+ if ( FastqArgs.fasta > 0 )
+ {
+ /* special printint of fasta-output ( line-wrap... ) */
+ rc = Fasta_dump( cself, self, spot, FastqArgs.fasta );
+ }
+ else
+ {
+ for ( readId = 0; rc == 0 && readId < 4; readId++ )
+ {
+ rc = SRASplitter_FileWrite( cself, spot, self->b[readId]->base, self->bsz[ readId ] );
+ if ( rc == 0 )
+ {
+ rc = SRASplitter_FileWrite( cself, spot, "\n", 1 );
+ }
+ }
+ }
}
}
}
- } else if( GetRCState(rc) == rcNotFound ) {
- SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+ }
+ else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+ {
+ SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
rc = 0;
}
}
return rc;
}
-typedef struct FastqFormatterFactory_struct {
+
+typedef struct FastqFormatterFactory_struct
+{
const char* accession;
const SRATable* table;
const FastqReader* reader;
+ KDataBuffer buf[ 5 ]; /* fifth is for fasta line wrap */
} FastqFormatterFactory;
-static
-rc_t FastqFormatterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqFormatterFactory_Init( const SRASplitterFactory* cself )
{
rc_t rc = 0;
- FastqFormatterFactory* self = (FastqFormatterFactory*)cself;
+ FastqFormatterFactory* self = ( FastqFormatterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else {
- rc = FastqReaderMake(&self->reader, self->table, self->accession,
- FastqArgs.dumpCs, FastqArgs.dumpOrigFmt, FastqArgs.fasta, FastqArgs.dumpCs,
- FastqArgs.readIds, !FastqArgs.applyClip, 0,
- FastqArgs.offset, FastqArgs.desiredCsKey[0], 0, 0);
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = FastqReaderMake( &self->reader, self->table, self->accession,
+ FastqArgs.dumpCs, FastqArgs.dumpOrigFmt, FastqArgs.fasta > 0, FastqArgs.dumpCs,
+ FastqArgs.readIds, !FastqArgs.applyClip, 0,
+ FastqArgs.offset, FastqArgs.desiredCsKey[ 0 ], 0, 0 );
+ if ( rc == 0 )
+ {
+ int i;
+ for( i = 0; rc == 0 && i < sizeof( self->buf ) / sizeof( self->buf[ 0 ] ); i++ )
+ {
+ rc = KDataBufferMakeBytes( &self->buf[ i ], DATABUFFERINITSIZE );
+ }
+ }
}
return rc;
}
-static
-rc_t FastqFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqFormatterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
{
rc_t rc = 0;
- FastqFormatterFactory* self = (FastqFormatterFactory*)cself;
+ FastqFormatterFactory* self = ( FastqFormatterFactory* )cself;
- if( self == NULL ) {
- rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
- } else {
- if( (rc = SRASplitter_Make(splitter, sizeof(FastqFormatterSplitter), NULL, NULL,
- FastqArgs.split_spot ?
- FastqFormatterSplitter_DumpByRead :
- FastqFormatterSplitter_DumpBySpot, NULL)) == 0 ) {
- ((FastqFormatterSplitter*)(*splitter))->accession = self->accession;
- ((FastqFormatterSplitter*)(*splitter))->reader = self->reader;
+ if ( self == NULL )
+ {
+ rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitter_Make ( splitter, sizeof( FastqFormatterSplitter ), NULL, NULL,
+ FastqArgs.split_spot ?
+ FastqFormatterSplitter_DumpByRead :
+ FastqFormatterSplitter_DumpBySpot, NULL );
+ if ( rc == 0 )
+ {
+ int i;
+ ( (FastqFormatterSplitter*)(*splitter) )->accession = self->accession;
+ ( (FastqFormatterSplitter*)(*splitter) )->reader = self->reader;
+ for ( i = 0; i < sizeof( self->buf ) / sizeof( self->buf[ 0 ] ); i++ )
+ {
+ ( (FastqFormatterSplitter*)(*splitter) )->b[ i ] = &self->buf[ i ];
+ }
}
}
return rc;
}
-static
-void FastqFormatterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqFormatterFactory_Release( const SRASplitterFactory* cself )
{
- if( cself != NULL ) {
- FastqFormatterFactory* self = (FastqFormatterFactory*)cself;
- FastqReaderWhack(self->reader);
+ if ( cself != NULL )
+ {
+ int i;
+ FastqFormatterFactory* self = ( FastqFormatterFactory* )cself;
+ FastqReaderWhack( self->reader );
+ for ( i = 0; i < sizeof( self->buf ) / sizeof( self->buf[ 0 ] ); i++ )
+ {
+ KDataBufferWhack( &self->buf[ i ] );
+ }
}
}
-static
-rc_t FastqFormatterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqFormatterFactory_Make( const SRASplitterFactory** cself,
+ const char* accession, const SRATable* table )
{
rc_t rc = 0;
FastqFormatterFactory* obj = NULL;
- if( cself == NULL || accession == NULL || table == NULL ) {
- rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
- } else if( (rc = SRASplitterFactory_Make(cself, eSplitterFormat, sizeof(*obj),
- FastqFormatterFactory_Init,
- FastqFormatterFactory_NewObj,
- FastqFormatterFactory_Release)) == 0 ) {
- obj = (FastqFormatterFactory*)*cself;
- obj->accession = accession;
- obj->table = table;
+ if ( cself == NULL || accession == NULL || table == NULL )
+ {
+ rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+ }
+ else
+ {
+ rc = SRASplitterFactory_Make( cself, eSplitterFormat, sizeof( *obj ),
+ FastqFormatterFactory_Init,
+ FastqFormatterFactory_NewObj,
+ FastqFormatterFactory_Release );
+ if ( rc == 0 )
+ {
+ obj = (FastqFormatterFactory*)*cself;
+ obj->accession = accession;
+ obj->table = table;
+ }
}
return rc;
}
+
/* ### External entry points ##################################################### */
+
const char UsageDefaultName[] = "fastq-dump";
-rc_t CC UsageSummary (const char * progname)
+
+rc_t CC UsageSummary ( const char * progname )
{
return 0;
}
@@ -1974,211 +2674,306 @@ ver_t CC KAppVersion( void )
}
-rc_t FastqDumper_Usage(const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args)
+rc_t FastqDumper_Usage( const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args, int first )
{
int i, j;
/* known core options */
- const SRADumperFmt_Arg* core[13];
-
- memset(core, 0, sizeof(core));
- for(i = 0; core_args[i].abbr != NULL || core_args[i].full != NULL; i++) {
- const char* nm = core_args[i].abbr;
- nm = nm ? nm : core_args[i].full;
- if( strcmp(nm, "A") == 0 ) {
- core[0] = &core_args[i];
- } else if( strcmp(nm, "O") == 0 ) {
- core[1] = &core_args[i];
- } else if( strcmp(nm, "N") == 0 ) {
- core[2] = &core_args[i];
- } else if( strcmp(nm, "X") == 0 ) {
- core[3] = &core_args[i];
- } else if( strcmp(nm, "G") == 0 ) {
- core[4] = &core_args[i];
- } else if( strcmp(nm, "spot-groups") == 0 ) {
- core[5] = &core_args[i];
- } else if( strcmp(nm, "R") == 0 ) {
- core[6] = &core_args[i];
- } else if( strcmp(nm, "T") == 0 ) {
- core[7] = &core_args[i];
- } else if( strcmp(nm, "K") == 0 ) {
- core[8] = &core_args[i];
- } else if( strcmp(nm, "table") == 0 ) {
- core[9] = &core_args[i];
- } else if( strcmp(nm, "Z") == 0 ) {
- core[10] = &core_args[i];
- } else if( strcmp(nm, "gzip") == 0 ) {
- core[11] = &core_args[i];
- } else if( strcmp(nm, "bzip2") == 0 ) {
- core[12] = &core_args[i];
+ const SRADumperFmt_Arg* core[ 13 ];
+
+ memset( (void*)core, 0, sizeof( core ) );
+ for ( i = first; core_args[i].abbr != NULL || core_args[ i ].full != NULL; i++ )
+ {
+ const char* nm = core_args[ i ].abbr;
+ nm = nm ? nm : core_args[ i ].full;
+ if ( strcmp( nm, "A" ) == 0 )
+ {
+ core[ 0 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "O" ) == 0 )
+ {
+ core[ 1 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "N" ) == 0 )
+ {
+ core[ 2 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "X" ) == 0 )
+ {
+ core[ 3 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "G" ) == 0 )
+ {
+ core[ 4 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "spot-groups" ) == 0 )
+ {
+ core[ 5 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "R" ) == 0 )
+ {
+ core[ 6 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "T" ) == 0 )
+ {
+ core[ 7 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "K" ) == 0 )
+ {
+ core[ 8 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "table" ) == 0 )
+ {
+ core[ 9 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "Z" ) == 0 )
+ {
+ core[ 10 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "gzip" ) == 0 )
+ {
+ core[ 11 ] = &core_args[ i ];
+ }
+ else if ( strcmp( nm, "bzip2" ) == 0 )
+ {
+ core[ 12 ] = &core_args[ i ];
}
}
#define OARG(arg,msg) (arg ? HelpOptionLine((arg)->abbr, (arg)->full, (arg)->param, \
msg ? msg : (const char**)((arg)->descr)) : ((void)(0)))
- OUTMSG(("INPUT\n"));
- OARG(core[0], NULL);
- OARG(core[9], NULL);
-
- OUTMSG(("\nPROCESSING\n"));
- OUTMSG(("\nRead Splitting Sequence data may be used in raw form or\n"));
- OUTMSG((" split into individual reads\n"));
- OARG(&fmt->arg_desc[0], NULL);
-
- OUTMSG(("\nFull Spot Filters Applied to the full spot independently\n"));
- OUTMSG((" of --%s\n", fmt->arg_desc[0].full));
- OARG(core[2], NULL);
- OARG(core[3], NULL);
- OARG(core[5], NULL);
- OARG(&fmt->arg_desc[1], NULL);
-
- OUTMSG(("\nCommon Filters Applied to spots when --%s is not\n",
- fmt->arg_desc[0].full));
- OUTMSG((" set, otherwise - to individual reads\n"));
- OARG(&fmt->arg_desc[2], NULL);
- OARG(core[6], NULL);
- OARG(&fmt->arg_desc[3], NULL);
-
- OUTMSG(("\nFilters based on alignments Filters are active when alignment\n"));
- OUTMSG((" data are present\n"));
- OARG(&fmt->arg_desc[16], NULL);
- OARG(&fmt->arg_desc[17], NULL);
- OARG(&fmt->arg_desc[18], NULL);
- OARG(&fmt->arg_desc[19], NULL);
-
- OUTMSG(("\nFilters for individual reads Applied only with --%s set\n",
- fmt->arg_desc[0].full));
- OARG(&fmt->arg_desc[4], NULL);
-
- OUTMSG(("\nOUTPUT\n"));
- OARG(core[1], NULL);
- OARG(core[10], NULL);
- OARG(core[11], NULL);
- OARG(core[12], NULL);
-
- OUTMSG(("\nMultiple File Options Setting these options will produce more\n"));
- OUTMSG((" than 1 file, each of which will be suffixed\n"));
- OUTMSG((" according to splitting criteria.\n"));
- OARG(&fmt->arg_desc[5], NULL);
- OARG(&fmt->arg_desc[6], NULL);
- OARG(core[4], NULL);
- OARG(core[6], NULL);
- OARG(core[7], NULL);
- OARG(core[8], NULL);
-
- OUTMSG(("\nFORMATTING\n"));
- OUTMSG(("\nSequence\n"));
- OARG(&fmt->arg_desc[7], NULL);
- OARG(&fmt->arg_desc[8], NULL);
-
- OUTMSG(("\nQuality\n"));
- OARG(&fmt->arg_desc[9], NULL);
- OARG(&fmt->arg_desc[10], NULL);
-
- OUTMSG(("\nDefline\n"));
- OARG(&fmt->arg_desc[11], NULL);
- OARG(&fmt->arg_desc[12], NULL);
- OARG(&fmt->arg_desc[13], NULL);
- OARG(&fmt->arg_desc[14], NULL);
- OARG(&fmt->arg_desc[15], NULL);
-
- OUTMSG(("OTHER:\n"));
- for(i = 0; core_args[i].abbr != NULL || core_args[i].full != NULL; i++) {
+ OUTMSG(( "INPUT\n" ));
+ OARG( core[ 0 ], NULL );
+ OARG( core[ 9 ], NULL );
+
+ OUTMSG(( "\nPROCESSING\n" ));
+ OUTMSG(( "\nRead Splitting Sequence data may be used in raw form or\n"));
+ OUTMSG(( " split into individual reads\n" ));
+ OARG( &fmt->arg_desc[ 0 ], NULL);
+
+ OUTMSG(( "\nFull Spot Filters Applied to the full spot independently\n" ));
+ OUTMSG(( " of --%s\n", fmt->arg_desc[0].full ));
+ OARG( core[ 2 ], NULL );
+ OARG( core[ 3 ], NULL );
+ OARG( core[ 5 ], NULL );
+ OARG( &fmt->arg_desc[ 1 ], NULL );
+
+ OUTMSG(( "\nCommon Filters Applied to spots when --%s is not\n",
+ fmt->arg_desc[0].full ));
+ OUTMSG(( " set, otherwise - to individual reads\n" ));
+ OARG( &fmt->arg_desc[ 2 ], NULL );
+ OARG( core[ 6 ], NULL );
+ OARG( &fmt->arg_desc[ 3 ], NULL );
+
+ OUTMSG(( "\nFilters based on alignments Filters are active when alignment\n" ));
+ OUTMSG(( " data are present\n" ));
+ OARG( &fmt->arg_desc[ 16 ], NULL );
+ OARG( &fmt->arg_desc[ 17 ], NULL );
+ OARG( &fmt->arg_desc[ 18 ], NULL );
+ OARG( &fmt->arg_desc[ 19 ], NULL );
+
+ OUTMSG(( "\nFilters for individual reads Applied only with --%s set\n",
+ fmt->arg_desc[0].full ));
+ OARG( &fmt->arg_desc[ 4 ], NULL );
+
+ OUTMSG(( "\nOUTPUT\n" ));
+ OARG( core[ 1 ], NULL );
+ OARG( core[ 10 ], NULL );
+ OARG( core[ 11 ], NULL );
+ OARG( core[ 12 ], NULL);
+
+ OUTMSG(( "\nMultiple File Options Setting these options will produce more\n" ));
+ OUTMSG(( " than 1 file, each of which will be suffixed\n" ));
+ OUTMSG(( " according to splitting criteria.\n" ));
+ OARG( &fmt->arg_desc[ 5 ], NULL );
+ OARG( &fmt->arg_desc[ 6 ], NULL );
+ OARG( core[ 4 ], NULL );
+ OARG( core[ 6 ], NULL );
+ OARG( core[ 7 ], NULL );
+ OARG( core[ 8 ], NULL );
+
+ OUTMSG(( "\nFORMATTING\n" ));
+ OUTMSG(( "\nSequence\n" ));
+ OARG( &fmt->arg_desc[ 7 ], NULL );
+ OARG( &fmt->arg_desc[ 8 ], NULL );
+
+ OUTMSG(( "\nQuality\n" ));
+ OARG( &fmt->arg_desc[ 9 ], NULL );
+ OARG( &fmt->arg_desc[ 10 ], NULL );
+
+ OUTMSG(( "\nDefline\n" ));
+ OARG( &fmt->arg_desc[ 11 ], NULL );
+ OARG( &fmt->arg_desc[ 12 ], NULL );
+ OARG( &fmt->arg_desc[ 13 ], NULL );
+ OARG( &fmt->arg_desc[ 14 ], NULL );
+ OARG( &fmt->arg_desc[ 15 ], NULL );
+
+ OUTMSG(( "OTHER:\n" ));
+ for ( i = first; core_args[ i ].abbr != NULL || core_args[ i ].full != NULL; i++ )
+ {
bool print = true;
- for(j = 0; j < sizeof(core) / sizeof(core[0]); j++) {
- if( core[j] == &core_args[i] ) {
+ for ( j = 0; j < sizeof( core ) / sizeof( core[ 0 ] ); j++ )
+ {
+ if ( core[ j ] == &core_args[ i ] )
+ {
print = false;
break;
}
}
- if( print ) {
- OARG(&core_args[i], NULL);
+ if ( print )
+ {
+ OARG( &core_args[ i ], NULL );
}
}
return 0;
}
-rc_t FastqDumper_Release(const SRADumperFmt* fmt)
+
+rc_t FastqDumper_Release( const SRADumperFmt* fmt )
{
- if( fmt == NULL ) {
- return RC(rcExe, rcFormatter, rcDestroying, rcParam, rcInvalid);
- } else {
- Defline_Release(FastqArgs.b_defline);
- Defline_Release(FastqArgs.q_defline);
- free(FastqArgs.alregion);
+ if ( fmt == NULL )
+ {
+ return RC( rcExe, rcFormatter, rcDestroying, rcParam, rcInvalid );
+ }
+ else
+ {
+ Defline_Release( FastqArgs.b_defline );
+ Defline_Release( FastqArgs.q_defline );
+ free( FastqArgs.alregion );
}
return 0;
}
-bool FastqDumper_AddArg(const SRADumperFmt* fmt, GetArg* f, int* i, int argc, char *argv[])
+
+bool FastqDumper_AddArg( const SRADumperFmt* fmt, GetArg* f, int* i, int argc, char *argv[] )
{
const char* arg = NULL;
- if( fmt == NULL || f == NULL || i == NULL || argv == NULL ) {
- LOGERR(klogErr, RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid), "null param");
+ if ( fmt == NULL || f == NULL || i == NULL || argv == NULL )
+ {
+ LOGERR( klogErr, RC( rcExe, rcArgv, rcReading, rcParam, rcInvalid ), "null param" );
return false;
- } else if( f(fmt, "M", "minReadLen", i, argc, argv, &arg) ) {
- FastqArgs.minReadLen = AsciiToU32(arg, NULL, NULL);
- } else if( f(fmt, "W", "clip", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, "M", "minReadLen", i, argc, argv, &arg ) )
+ {
+ FastqArgs.minReadLen = AsciiToU32( arg, NULL, NULL );
+ }
+ else if ( f( fmt, "W", "clip", i, argc, argv, NULL ) )
+ {
FastqArgs.applyClip = true;
- } else if( f(fmt, "F", "origfmt", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, "F", "origfmt", i, argc, argv, NULL ) )
+ {
FastqArgs.dumpOrigFmt = true;
- } else if( f(fmt, "C", "dumpcs", i, argc, argv, NULL) ) {
- int k = (*i) + 1;
+ }
+ else if ( f( fmt, "C", "dumpcs", i, argc, argv, NULL ) )
+ {
+ int k = ( *i ) + 1;
FastqArgs.dumpCs = true;
- if( k < argc && strlen(argv[k]) == 1 && strchr("acgtACGT", argv[k][0]) != NULL ) {
- FastqArgs.desiredCsKey = argv[k];
+ if ( k < argc && strlen( argv[ k ] ) == 1 && strchr( "acgtACGT", argv[ k ][ 0 ] ) != NULL )
+ {
+ FastqArgs.desiredCsKey = argv[ k ];
*i = k;
}
- } else if( f(fmt, "B", "dumpbase", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, "B", "dumpbase", i, argc, argv, NULL ) )
+ {
FastqArgs.dumpBase = true;
- } else if( f(fmt, "Q", "offset", i, argc, argv, &arg) ) {
- FastqArgs.offset = AsciiToU32(arg, NULL, NULL);
- } else if( f(fmt, "I", "readids", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, "Q", "offset", i, argc, argv, &arg ) )
+ {
+ FastqArgs.offset = AsciiToU32( arg, NULL, NULL );
+ }
+ else if ( f( fmt, "I", "readids", i, argc, argv, NULL ) )
+ {
FastqArgs.readIds = true;
- } else if( f(fmt, "E", "qual-filter", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, "E", "qual-filter", i, argc, argv, NULL ) )
+ {
FastqArgs.qual_filter = true;
- } else if( f(fmt, "DB", "defline-seq", i, argc, argv, &arg) ) {
+ }
+ else if ( f( fmt, "DB", "defline-seq", i, argc, argv, &arg ) )
+ {
FastqArgs.b_deffmt = arg;
- } else if( f(fmt, "DQ", "defline-qual", i, argc, argv, &arg) ) {
+ }
+ else if ( f( fmt, "DQ", "defline-qual", i, argc, argv, &arg ) )
+ {
FastqArgs.q_deffmt = arg;
- } else if( f(fmt, "TR", "skip-technical", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, "TR", "skip-technical", i, argc, argv, NULL ) )
+ {
FastqArgs.skipTechnical = true;
- } else if( f(fmt, "SF", "split-files", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, "SF", "split-files", i, argc, argv, NULL ) )
+ {
FastqArgs.split_spot = true;
FastqArgs.split_files = true;
- } else if( f(fmt, NULL, "split-3", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, NULL, "split-3", i, argc, argv, NULL ) )
+ {
FastqArgs.split_3 = true;
FastqArgs.split_spot = true;
FastqArgs.maxReads = 2;
FastqArgs.skipTechnical = true;
- } else if( f(fmt, "SL", "split-spot", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, "SL", "split-spot", i, argc, argv, NULL ) )
+ {
FastqArgs.split_spot = true;
- } else if( f(fmt, "HS", "helicos", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, "HS", "helicos", i, argc, argv, NULL ) )
+ {
FastqArgs.b_deffmt = "@$sn";
FastqArgs.q_deffmt = "+";
- } else if( f(fmt, "FA", "fasta", i, argc, argv, NULL) ) {
- FastqArgs.fasta = true;
+ }
+ else if ( f( fmt, "FA", "fasta", i, argc, argv, NULL ) )
+ {
+ int k = (*i) + 1;
+ FastqArgs.fasta = 70;
+ if ( k < argc && isdigit( argv[ k ][ 0 ] ) )
+ {
+ char* endp = NULL;
+ errno = 0;
+ FastqArgs.fasta = strtou64( argv[ k ], &endp, 10 );
+ if ( errno != 0 || endp == NULL || *endp != '\0' )
+ {
+ return false;
+ }
+ *i = k;
+ if ( FastqArgs.fasta == 0 )
+ {
+ FastqArgs.fasta = ~0;
+ }
+ }
FastqArgs.file_extension = ".fasta";
- } else if( f(fmt, NULL, "aligned", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, NULL, "aligned", i, argc, argv, NULL ) )
+ {
FastqArgs.aligned = true;
- } else if( f(fmt, NULL, "unaligned", i, argc, argv, NULL) ) {
+ }
+ else if ( f( fmt, NULL, "unaligned", i, argc, argv, NULL ) )
+ {
FastqArgs.unaligned = true;
- } else if( f(fmt, NULL, "aligned-region", i, argc, argv, &arg) ) {
+ }
+ else if ( f( fmt, NULL, "aligned-region", i, argc, argv, &arg ) )
+ {
/* name[:[from][-[to]]] */
- TAlignedRegion* r = realloc(FastqArgs.alregion, sizeof(*FastqArgs.alregion) * ++FastqArgs.alregion_qty);
- if( r == NULL ) {
+ TAlignedRegion* r = realloc( FastqArgs.alregion, sizeof( *FastqArgs.alregion ) * ++FastqArgs.alregion_qty );
+ if ( r == NULL )
+ {
return false;
}
FastqArgs.alregion = r;
- r = &FastqArgs.alregion[FastqArgs.alregion_qty - 1];
- r->name = strchr(arg, ':');
+ r = &FastqArgs.alregion[ FastqArgs.alregion_qty - 1 ];
+ r->name = strchr( arg, ':' );
r->from = 0;
r->to = 0;
- if( r->name == NULL ) {
+ if ( r->name == NULL )
+ {
r->name = arg;
- r->name_len = strlen(arg);
- } else {
+ r->name_len = strlen( arg );
+ }
+ else
+ {
const char* c;
uint64_t* v;
@@ -2187,250 +2982,407 @@ bool FastqDumper_AddArg(const SRADumperFmt* fmt, GetArg* f, int* i, int argc, ch
r->name = arg;
v = &r->from;
- while(*++c != '\0') {
- if( *c == '-' ) {
+ while ( *++c != '\0')
+ {
+ if ( *c == '-' )
+ {
v = &r->to;
- } else if( *c == '+' ) {
- if( *v != 0 ) {
+ }
+ else if ( *c == '+' )
+ {
+ if ( *v != 0 )
+ {
return false;
}
- } else if( !isdigit(*c) ) {
+ }
+ else if ( !isdigit( *c ) )
+ {
return false;
- } else {
- *v = *v * 10 + (*c - '0');
+ }
+ else
+ {
+ *v = *v * 10 + ( *c - '0' );
}
}
- if( r->from > r->to && r->to != 0 ) {
+ if ( r->from > r->to && r->to != 0 )
+ {
uint64_t x = r->from;
r->from = r->to;
r->to = x;
}
}
- } else if( f(fmt, NULL, "matepair-distance", i, argc, argv, &arg) ) {
+ }
+ else if ( f( fmt, NULL, "matepair-distance", i, argc, argv, &arg ) )
+ {
/* from[-to] | [from]-to | unknown */
- if( strcmp(arg, "unknown") == 0 ) {
+ if ( strcmp( arg, "unknown" ) == 0 )
+ {
FastqArgs.mp_dist_unknown = true;
- } else {
+ }
+ else
+ {
uint64_t* v;
- TMatepairDistance* p = realloc(FastqArgs.mp_dist, sizeof(*FastqArgs.mp_dist) * ++FastqArgs.mp_dist_qty);
- if( p == NULL ) {
+ TMatepairDistance* p = realloc( FastqArgs.mp_dist, sizeof( *FastqArgs.mp_dist ) * ++FastqArgs.mp_dist_qty );
+ if ( p == NULL )
+ {
return false;
}
FastqArgs.mp_dist = p;
- p = &FastqArgs.mp_dist[FastqArgs.mp_dist_qty - 1];
+ p = &FastqArgs.mp_dist[ FastqArgs.mp_dist_qty - 1 ];
p->from = 0;
p->to = 0;
v = &p->from;
- while(*++arg != '\0') {
- if( *arg == '-' ) {
+ while ( *++arg != '\0' )
+ {
+ if ( *arg == '-' )
+ {
v = &p->to;
- } else if( *arg == '+' ) {
- if( *v != 0 ) {
+ }
+ else if ( *arg == '+' )
+ {
+ if ( *v != 0 )
+ {
return false;
}
- } else if( !isdigit(*arg) ) {
+ }
+ else if ( !isdigit( *arg ) )
+ {
return false;
- } else {
- *v = *v * 10 + (*arg - '0');
+ }
+ else
+ {
+ *v = *v * 10 + ( *arg - '0' );
}
}
- if( p->from > p->to && p->to != 0 ) {
+ if ( p->from > p->to && p->to != 0 )
+ {
uint64_t x = p->from;
p->from = p->to;
p->to = x;
}
- if( p->from == 0 && p->to == 0 ) {
+ if ( p->from == 0 && p->to == 0 )
+ {
FastqArgs.mp_dist_qty--;
}
}
- } else {
+ }
+ else
+ {
return false;
}
return true;
}
-rc_t FastqDumper_Factories(const SRADumperFmt* fmt, const SRASplitterFactory** factory)
+
+rc_t FastqDumper_Factories( const SRADumperFmt* fmt, const SRASplitterFactory** factory )
{
rc_t rc = 0;
const SRASplitterFactory* parent = NULL, *child = NULL;
- if( fmt == NULL || factory == NULL ) {
- return RC(rcExe, rcFormatter, rcReading, rcParam, rcInvalid);
+ if ( fmt == NULL || factory == NULL )
+ {
+ return RC( rcExe, rcFormatter, rcReading, rcParam, rcInvalid );
}
*factory = NULL;
{
const SRAColumn* c = NULL;
- if( (rc = SRATableOpenColumnRead(fmt->table, &c, "PLATFORM", sra_platform_id_t)) == 0 ) {
- const INSDC_SRA_platform_id* platform;
+ rc = SRATableOpenColumnRead( fmt->table, &c, "PLATFORM", sra_platform_id_t );
+ if ( rc == 0 )
+ {
+ const INSDC_SRA_platform_id * platform;
bitsz_t o, z;
- if( (rc = SRAColumnRead(c, 1, (const void **)&platform, &o, &z)) == 0 ) {
- if( !FastqArgs.dumpCs && !FastqArgs.dumpBase ) {
- if( *platform == SRA_PLATFORM_ABSOLID ) {
+ rc = SRAColumnRead( c, 1, ( const void ** )&platform, &o, &z );
+ if ( rc == 0 )
+ {
+ if ( !FastqArgs.dumpCs && !FastqArgs.dumpBase )
+ {
+ if ( platform != NULL && *platform == SRA_PLATFORM_ABSOLID )
+ {
FastqArgs.dumpCs = true;
- } else {
+ }
+ else
+ {
FastqArgs.dumpBase = true;
}
}
- if( *platform == SRA_PLATFORM_ABSOLID ) {
+ if ( platform != NULL && *platform == SRA_PLATFORM_ABSOLID )
+ {
FastqArgs.is_platform_cs_native = true;
}
}
- SRAColumnRelease(c);
- } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcColumn ) {
+ SRAColumnRelease( c );
+ }
+ else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcColumn )
+ {
rc = 0;
}
}
- if( (FastqArgs.aligned || FastqArgs.unaligned) && !(FastqArgs.aligned && FastqArgs.unaligned) ) {
- if( (rc = AlignedFilterFactory_Make(&child, fmt->table, FastqArgs.aligned, FastqArgs.unaligned)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+
+ if ( ( FastqArgs.aligned || FastqArgs.unaligned ) && !( FastqArgs.aligned && FastqArgs.unaligned ) )
+ {
+ rc = AlignedFilterFactory_Make( &child, fmt->table, FastqArgs.aligned, FastqArgs.unaligned );
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
SRASplitterFactory_Release(child);
- } else {
+ }
+ else
+ {
parent = child;
}
- } else {
+ }
+ else
+ {
parent = child;
*factory = parent;
}
}
}
- if( FastqArgs.alregion_qty > 0 ) {
- if( (rc = AlignRegionFilterFactory_Make(&child, fmt->table, FastqArgs.alregion, FastqArgs.alregion_qty)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
- SRASplitterFactory_Release(child);
- } else {
+
+ if ( FastqArgs.alregion_qty > 0 )
+ {
+ rc = AlignRegionFilterFactory_Make( &child, fmt->table, FastqArgs.alregion, FastqArgs.alregion_qty );
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
+ SRASplitterFactory_Release( child );
+ }
+ else
+ {
parent = child;
}
- } else {
+ }
+ else
+ {
parent = child;
*factory = parent;
}
}
}
- if( FastqArgs.mp_dist_unknown || FastqArgs.mp_dist_qty > 0 ) {
- if( (rc = AlignPairDistanceFilterFactory_Make(&child, fmt->table,
- FastqArgs.mp_dist_unknown, FastqArgs.mp_dist, FastqArgs.mp_dist_qty)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+
+ if ( FastqArgs.mp_dist_unknown || FastqArgs.mp_dist_qty > 0 )
+ {
+ rc = AlignPairDistanceFilterFactory_Make( &child, fmt->table,
+ FastqArgs.mp_dist_unknown, FastqArgs.mp_dist, FastqArgs.mp_dist_qty);
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
SRASplitterFactory_Release(child);
- } else {
+ }
+ else
+ {
parent = child;
}
- } else {
+ }
+ else
+ {
parent = child;
*factory = parent;
}
}
}
- if( rc == 0 && FastqArgs.skipTechnical && FastqArgs.split_spot ) {
- if( (rc = FastqBioFilterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
- SRASplitterFactory_Release(child);
- } else {
+
+ if ( rc == 0 && FastqArgs.skipTechnical && FastqArgs.split_spot )
+ {
+ rc = FastqBioFilterFactory_Make( &child, fmt->accession, fmt->table );
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
+ SRASplitterFactory_Release( child );
+ }
+ else
+ {
parent = child;
}
- } else {
+ }
+ else
+ {
parent = child;
*factory = parent;
}
}
}
- if( rc == 0 && FastqArgs.maxReads > 0 ) {
- if( (rc = FastqRNumberFilterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
- SRASplitterFactory_Release(child);
- } else {
+
+ if ( rc == 0 && FastqArgs.maxReads > 0 )
+ {
+ rc = FastqRNumberFilterFactory_Make( &child, fmt->accession, fmt->table );
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
+ SRASplitterFactory_Release( child );
+ }
+ else
+ {
parent = child;
}
- } else {
+ }
+ else
+ {
parent = child;
*factory = parent;
}
}
}
- if( rc == 0 && FastqArgs.qual_filter ) {
- if( (rc = FastqQFilterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
- SRASplitterFactory_Release(child);
- } else {
+
+ if ( rc == 0 && FastqArgs.qual_filter )
+ {
+ rc = FastqQFilterFactory_Make( &child, fmt->accession, fmt->table );
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
+ SRASplitterFactory_Release( child );
+ }
+ else
+ {
parent = child;
}
- } else {
+ }
+ else
+ {
parent = child;
*factory = parent;
}
}
}
- if( rc == 0 ) {
- if( (rc = FastqReadLenFilterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
- SRASplitterFactory_Release(child);
- } else {
+
+ if ( rc == 0 )
+ {
+ rc = FastqReadLenFilterFactory_Make( &child, fmt->accession, fmt->table );
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
+ SRASplitterFactory_Release( child );
+ }
+ else
+ {
parent = child;
}
- } else {
+ }
+ else
+ {
parent = child;
*factory = parent;
}
}
}
- if( rc == 0 ) {
- if( FastqArgs.split_3 ) {
- if( (rc = Fastq3ReadSplitterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
- SRASplitterFactory_Release(child);
- } else {
+
+ if ( rc == 0 )
+ {
+ if ( FastqArgs.split_3 )
+ {
+ rc = Fastq3ReadSplitterFactory_Make( &child, fmt->accession, fmt->table );
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
+ SRASplitterFactory_Release( child );
+ }
+ else
+ {
parent = child;
}
- } else {
+ }
+ else
+ {
parent = child;
*factory = parent;
}
}
- } else if( FastqArgs.split_files ) {
- if( (rc = FastqReadSplitterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+ }
+ else if ( FastqArgs.split_files )
+ {
+ rc = FastqReadSplitterFactory_Make( &child, fmt->accession, fmt->table );
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
SRASplitterFactory_Release(child);
- } else {
+ }
+ else
+ {
parent = child;
}
- } else {
+ }
+ else
+ {
parent = child;
*factory = parent;
}
}
}
}
- if( rc == 0 ) {
- if( FastqArgs.b_deffmt != NULL ) {
- rc = Defline_Parse(&FastqArgs.b_defline, FastqArgs.b_deffmt);
+
+ if ( rc == 0 )
+ {
+ if ( FastqArgs.b_deffmt != NULL )
+ {
+ rc = Defline_Parse( &FastqArgs.b_defline, FastqArgs.b_deffmt );
}
- if( FastqArgs.q_deffmt != NULL ) {
- rc = Defline_Parse(&FastqArgs.q_defline, FastqArgs.q_deffmt);
+ if ( FastqArgs.q_deffmt != NULL )
+ {
+ rc = Defline_Parse( &FastqArgs.q_defline, FastqArgs.q_deffmt );
}
- if( rc == 0 && (rc = FastqFormatterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
- if( parent != NULL ) {
- if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
- SRASplitterFactory_Release(child);
+ if ( rc == 0 )
+ {
+ rc = FastqFormatterFactory_Make( &child, fmt->accession, fmt->table );
+ if ( rc == 0 )
+ {
+ if ( parent != NULL )
+ {
+ rc = SRASplitterFactory_AddNext( parent, child );
+ if ( rc != 0 )
+ {
+ SRASplitterFactory_Release( child );
+ }
+ }
+ else
+ {
+ *factory = child;
}
- } else {
- *factory = child;
}
}
}
return rc;
}
+
/* main entry point of the file */
-rc_t SRADumper_Init(SRADumperFmt* fmt)
+rc_t SRADumper_Init( SRADumperFmt* fmt )
{
static const SRADumperFmt_Arg arg[] =
{
@@ -2461,7 +3413,7 @@ rc_t SRADumper_Init(SRADumperFmt* fmt)
/* DO NOT ADD IN THE MIDDLE ORDER IS IMPORTANT IN USAGE FUNCTION ABOVE!!! */
{"Q", "offset", "integer", {"Offset to use for quality conversion, default is 33", NULL}},
- {NULL, "fasta", NULL, {"FASTA only, no qualities", NULL}},
+ {NULL, "fasta", "[line width]", {"FASTA only, no qualities, optional line wrap width (set to zero for no wrapping)", NULL}},
{"F", "origfmt", NULL, {"Defline contains only original sequence name", NULL}},
{"I", "readids", NULL, {"Append read id after spot id as 'accession.spot.readid' on defline", NULL}},
@@ -2490,11 +3442,12 @@ rc_t SRADumper_Init(SRADumperFmt* fmt)
{NULL, NULL, NULL, {NULL}}
};
- if( fmt == NULL ) {
- return RC(rcExe, rcFileFormat, rcConstructing, rcParam, rcNull);
+ if ( fmt == NULL )
+ {
+ return RC( rcExe, rcFileFormat, rcConstructing, rcParam, rcNull );
}
- memset(&FastqArgs, 0, sizeof(FastqArgs));
+ memset( &FastqArgs, 0, sizeof( FastqArgs ) );
FastqArgs.is_platform_cs_native = false;
FastqArgs.maxReads = 0;
FastqArgs.skipTechnical = false;
@@ -2514,7 +3467,7 @@ rc_t SRADumper_Init(SRADumperFmt* fmt)
FastqArgs.split_files = false;
FastqArgs.split_3 = false;
FastqArgs.split_spot = false;
- FastqArgs.fasta = false;
+ FastqArgs.fasta = 0;
FastqArgs.file_extension = ".fastq";
FastqArgs.aligned = false;
FastqArgs.unaligned = false;
diff --git a/tools/sra-dump/illumina-dump.vers b/tools/sra-dump/illumina-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/illumina-dump.vers
+++ b/tools/sra-dump/illumina-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/illumina-dump.vers.h b/tools/sra-dump/illumina-dump.vers.h
deleted file mode 100644
index e610c68..0000000
--- a/tools/sra-dump/illumina-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ILLUMINA_DUMP_VERS 0x02010007
diff --git a/tools/sra-dump/illumina.c b/tools/sra-dump/illumina.c
index a4d28af..17e8d23 100644
--- a/tools/sra-dump/illumina.c
+++ b/tools/sra-dump/illumina.c
@@ -38,6 +38,8 @@
#include "core.h"
#include "illumina-dump.vers.h"
+#define DATABUFFERINITSIZE 10240
+
typedef enum {
eRead = 0x01,
eQual1_S = 0x02,
@@ -96,7 +98,7 @@ rc_t IlluminaU32Splitter_GetKey(const SRASplitter* cself, const char** key, spot
if( rc == 0 ) {
sprintf(self->key, "%0*d", w, val);
}
- } else if( GetRCState(rc) == rcNotFound ) {
+ } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
*key = NULL;
rc = 0;
@@ -183,7 +185,7 @@ rc_t IlluminaU32SplitterFactory_Make(const SRASplitterFactory** cself, const cha
typedef struct IlluminaFormatterSplitter_struct {
const IlluminaReader* reader;
- char buf[512 * 1024];
+ KDataBuffer* b;
} IlluminaFormatterSplitter;
static
@@ -200,16 +202,20 @@ rc_t IlluminaFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, con
if( rc == 0 && (IlluminaArgs.opt & eRead) &&
(rc = SRASplitter_FileActivate(cself, "seq.txt")) == 0 ) {
- if( (rc = IlluminaReaderBase(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ IF_BUF((IlluminaReaderBase(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+ }
}
}
if( rc == 0 && (IlluminaArgs.opt & eQual1_S) &&
(rc = SRASplitter_FileActivate(cself, "qcal.txt")) == 0 ) {
- if( (rc = IlluminaReaderQuality1(self->reader, 0, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ IF_BUF((IlluminaReaderQuality1(self->reader, 0, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+ }
}
}
if( rc == 0 && (IlluminaArgs.opt & eQual1_M) ) {
@@ -219,47 +225,55 @@ rc_t IlluminaFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, con
char key[128];
for(readId = 1; rc == 0 && readId <= num_reads; readId++) {
sprintf(key, "%u_qcal.txt", readId);
- if( (rc = SRASplitter_FileActivate(cself, key)) == 0 &&
- (rc = IlluminaReaderQuality1(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ if( (rc = SRASplitter_FileActivate(cself, key)) == 0 ) {
+ IF_BUF((IlluminaReaderQuality1(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+ }
+ }
}
}
}
}
- if( rc == 0 && (IlluminaArgs.opt & eQual4) &&
- (rc = SRASplitter_FileActivate(cself, "prb.txt")) == 0 ) {
- if( (rc = IlluminaReaderQuality4(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ if( rc == 0 && (IlluminaArgs.opt & eQual4) && (rc = SRASplitter_FileActivate(cself, "prb.txt")) == 0 ) {
+ IF_BUF((IlluminaReaderQuality4(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+ }
}
}
- if( rc == 0 && (IlluminaArgs.opt & eIntensity) &&
- (rc = SRASplitter_FileActivate(cself, "int.txt")) == 0 ) {
- if( (rc = IlluminaReaderIntensity(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ if( rc == 0 && (IlluminaArgs.opt & eIntensity) && (rc = SRASplitter_FileActivate(cself, "int.txt")) == 0 ) {
+ IF_BUF((IlluminaReaderIntensity(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+ }
}
}
- if( rc == 0 && (IlluminaArgs.opt & eNoise) &&
- (rc = SRASplitter_FileActivate(cself, "nse.txt")) == 0 ) {
- if( (rc = IlluminaReaderNoise(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ if( rc == 0 && (IlluminaArgs.opt & eNoise) && (rc = SRASplitter_FileActivate(cself, "nse.txt")) == 0 ) {
+ IF_BUF((IlluminaReaderNoise(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+ }
}
}
- if( rc == 0 && (IlluminaArgs.opt & eSignal) &&
- (rc = SRASplitter_FileActivate(cself, "sig2.txt")) == 0 ) {
- if( (rc = IlluminaReaderSignal(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ if( rc == 0 && (IlluminaArgs.opt & eSignal) && (rc = SRASplitter_FileActivate(cself, "sig2.txt")) == 0 ) {
+ IF_BUF((IlluminaReaderSignal(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+ }
}
}
- if( rc == 0 && (IlluminaArgs.opt & eQSeq_S) &&
- (rc = SRASplitter_FileActivate(cself, "qseq.txt")) == 0 ) {
- if( (rc = IlluminaReaderQSeq(self->reader, 0, true, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ if( rc == 0 && (IlluminaArgs.opt & eQSeq_S) && (rc = SRASplitter_FileActivate(cself, "qseq.txt")) == 0 ) {
+ IF_BUF((IlluminaReaderQSeq(self->reader, 0, true, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+ }
}
}
if( rc == 0 && (IlluminaArgs.opt & eQSeq_M) ) {
@@ -269,15 +283,18 @@ rc_t IlluminaFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, con
char key[128];
for(readId = 1; rc == 0 && readId <= num_reads; readId++) {
sprintf(key, "%u_qseq.txt", readId);
- if( (rc = SRASplitter_FileActivate(cself, key)) == 0 &&
- (rc = IlluminaReaderQSeq(self->reader, readId, true, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
- self->buf[writ] = '\n';
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+ if( (rc = SRASplitter_FileActivate(cself, key)) == 0 ) {
+ IF_BUF((IlluminaReaderQSeq(self->reader, readId, true, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+ if( writ > 0 ) {
+ ((char*)(self->b->base))[writ] = '\n';
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+ }
+ }
}
}
}
}
- } else if( GetRCState(rc) == rcNotFound ) {
+ } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
rc = 0;
}
@@ -289,6 +306,7 @@ typedef struct IlluminaFormatterFactory_struct {
const char* accession;
const SRATable* table;
const IlluminaReader* reader;
+ KDataBuffer buf;
} IlluminaFormatterFactory;
static
@@ -299,11 +317,11 @@ rc_t IlluminaFormatterFactory_Init(const SRASplitterFactory* cself)
if( self == NULL ) {
rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
- } else {
- rc = IlluminaReaderMake(&self->reader, self->table, self->accession,
+ } else if( (rc = IlluminaReaderMake(&self->reader, self->table, self->accession,
IlluminaArgs.opt & eRead, IlluminaArgs.opt & (eQual1_S | eQual1_M), IlluminaArgs.opt & eQual4,
IlluminaArgs.opt & eIntensity, IlluminaArgs.opt & eNoise, IlluminaArgs.opt & eSignal,
- IlluminaArgs.opt & (eQSeq_S | eQSeq_M), 0, 0);
+ IlluminaArgs.opt & (eQSeq_S | eQSeq_M), 0, 0)) == 0 ) {
+ rc = KDataBufferMakeBytes(&self->buf, DATABUFFERINITSIZE);
}
return rc;
}
@@ -319,6 +337,7 @@ rc_t IlluminaFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRAS
} else {
if( (rc = SRASplitter_Make(splitter, sizeof(IlluminaFormatterSplitter), NULL, NULL, IlluminaFormatterSplitter_Dump, NULL)) == 0 ) {
((IlluminaFormatterSplitter*)(*splitter))->reader = self->reader;
+ ((IlluminaFormatterSplitter*)(*splitter))->b = &self->buf;
}
}
return rc;
@@ -330,6 +349,7 @@ void IlluminaFormatterFactory_Release(const SRASplitterFactory* cself)
if( cself != NULL ) {
IlluminaFormatterFactory* self = (IlluminaFormatterFactory*)cself;
IlluminaReaderWhack(self->reader);
+ KDataBufferWhack(&self->buf);
}
}
diff --git a/tools/sra-dump/sff-dump.vers b/tools/sra-dump/sff-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/sff-dump.vers
+++ b/tools/sra-dump/sff-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/sff-dump.vers.h b/tools/sra-dump/sff-dump.vers.h
deleted file mode 100644
index f5e4559..0000000
--- a/tools/sra-dump/sff-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SFF_DUMP_VERS 0x02010007
diff --git a/tools/sra-dump/sff.c b/tools/sra-dump/sff.c
index f635d13..cf39716 100644
--- a/tools/sra-dump/sff.c
+++ b/tools/sra-dump/sff.c
@@ -37,10 +37,12 @@
#include "core.h"
#include "sff-dump.vers.h"
+#define DATABUFFERINITSIZE 10240
+
typedef struct SFFFormatterSplitter_struct {
const SFFReader* reader;
spotid_t spots;
- char buf[1 * 1024 * 1024];
+ KDataBuffer* b;
} SFFFormatterSplitter;
static const char* SFFFormatterSplitter_Dump_Ext = ".sff";
@@ -58,17 +60,17 @@ rc_t SFFFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, const re
if( (rc = SRASplitter_FileActivate(cself, SFFFormatterSplitter_Dump_Ext)) == 0 ) {
if( self->spots == 0 ) {
- if( (rc = SFFReaderHeader(self->reader, 0, self->buf, sizeof(self->buf), &writ)) == 0 ) {
- rc = SRASplitter_FileWrite(cself, 0, self->buf, writ);
+ IF_BUF((SFFReaderHeader(self->reader, 0, self->b->base, KDataBufferBytes(self->b), &writ)), self->b, writ) {
+ rc = SRASplitter_FileWrite(cself, 0, self->b->base, writ);
}
}
if( rc == 0 ) {
if( (rc = SFFReaderSeekSpot(self->reader, spot)) == 0 ) {
- if( (rc = SFFReader_GetCurrentSpotData(self->reader, self->buf, sizeof(self->buf), &writ)) == 0 ) {
- rc = SRASplitter_FileWrite(cself, spot, self->buf, writ);
+ IF_BUF((SFFReader_GetCurrentSpotData(self->reader, self->b->base, KDataBufferBytes(self->b), &writ)), self->b, writ) {
+ rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ);
self->spots++;
}
- } else if( GetRCState(rc) == rcNotFound ) {
+ } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
self->spots++;
rc = 0;
@@ -91,8 +93,8 @@ rc_t SFFFormatterSplitter_Release(const SRASplitter* cself)
if( self->spots > 0 ) {
size_t writ = 0;
/* tweak SFF file header with real number of reads per file */
- if( (rc = SFFReaderHeader(self->reader, self->spots, self->buf, sizeof(self->buf), &writ)) == 0 ) {
- rc = SRASplitter_FileWritePos(cself, 0, 0, self->buf, writ);
+ IF_BUF((SFFReaderHeader(self->reader, self->spots, self->b->base, KDataBufferBytes(self->b), &writ)), self->b, writ) {
+ rc = SRASplitter_FileWritePos(cself, 0, 0, self->b->base, writ);
}
}
}
@@ -103,6 +105,7 @@ typedef struct SFFFormatterFactory_struct {
const char* accession;
const SRATable* table;
const SFFReader* reader;
+ KDataBuffer kdbuf;
} SFFFormatterFactory;
static
@@ -113,7 +116,7 @@ rc_t SFFFormatterFactory_Init(const SRASplitterFactory* cself)
if( self == NULL ) {
rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
- } else {
+ } else if( (rc = KDataBufferMakeBytes(&self->kdbuf, DATABUFFERINITSIZE)) == 0 ) {
rc = SFFReaderMake(&self->reader, self->table, self->accession, 0, 0);
}
return rc;
@@ -130,6 +133,7 @@ rc_t SFFFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitt
} else {
if( (rc = SRASplitter_Make(splitter, sizeof(SFFFormatterSplitter), NULL, NULL, SFFFormatterSplitter_Dump, SFFFormatterSplitter_Release)) == 0 ) {
((SFFFormatterSplitter*)(*splitter))->reader = self->reader;
+ ((SFFFormatterSplitter*)(*splitter))->b = &self->kdbuf;
}
}
return rc;
@@ -140,6 +144,7 @@ void SFFFormatterFactory_Release(const SRASplitterFactory* cself)
{
if( cself != NULL ) {
SFFFormatterFactory* self = (SFFFormatterFactory*)cself;
+ KDataBufferWhack(&self->kdbuf);
SFFReaderWhack(self->reader);
}
}
diff --git a/tools/sra-dump/sra-dump.c b/tools/sra-dump/sra-dump.c
index ab83c81..8355511 100644
--- a/tools/sra-dump/sra-dump.c
+++ b/tools/sra-dump/sra-dump.c
@@ -39,7 +39,6 @@
#include <klib/status.h>
#include <klib/container.h>
#include <klib/rc.h>
-#include <fmtdef.h>
#include <os-native.h>
#include <sysalloc.h>
@@ -81,9 +80,9 @@ void dump_text ( const void *base, bitsz_t row_bits )
for ( i = 0; i < count; ++ i )
{
if ( isprint ( data [ i ] ) )
- putchar ( data [ i ] );
+ OUTMSG(( "%c", data [ i ] ));
else
- printf ( "\\x%2x", data [ i ] );
+ OUTMSG(( "\\x%2x", data [ i ] ));
}
}
@@ -95,7 +94,7 @@ void dump_I8 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 3;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%d", sep, data [ i ] );
+ OUTMSG(( "%s%d", sep, data [ i ] ));
}
static
@@ -106,7 +105,7 @@ void dump_U8 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 3;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%u", sep, data [ i ] );
+ OUTMSG(( "%s%u", sep, data [ i ] ));
}
static
@@ -117,7 +116,7 @@ void dump_I16 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 4;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%d", sep, data [ i ] );
+ OUTMSG(( "%s%d", sep, data [ i ] ));
}
static
@@ -128,7 +127,7 @@ void dump_U16 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 4;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%u", sep, data [ i ] );
+ OUTMSG(( "%s%u", sep, data [ i ] ));
}
static
@@ -139,7 +138,7 @@ void dump_I32 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 5;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%d", sep, data [ i ] );
+ OUTMSG(( "%s%d", sep, data [ i ] ));
}
static
@@ -150,7 +149,7 @@ void dump_U32 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 5;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%u", sep, data [ i ] );
+ OUTMSG(( "%s%u", sep, data [ i ] ));
}
static
@@ -161,7 +160,7 @@ void dump_I64 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 6;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%" LD64, sep, data [ i ] );
+ OUTMSG(( "%s%ld", sep, data [ i ] ));
}
static
@@ -172,7 +171,7 @@ void dump_U64 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 6;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%" LU64, sep, data [ i ] );
+ OUTMSG(( "%s%lu", sep, data [ i ] ));
}
static
@@ -183,7 +182,7 @@ void dump_F32 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 5;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%f", sep, data [ i ] );
+ OUTMSG(( "%s%f", sep, data [ i ] ));
}
static
@@ -194,7 +193,7 @@ void dump_F64 ( const void *base, bitsz_t row_bits )
uint32_t i, count = row_bits >> 6;
for ( i = 0; i < count; sep = ",", ++ i )
- printf ( "%s%f", sep, data [ i ] );
+ OUTMSG(( "%s%f", sep, data [ i ] ));
}
@@ -215,10 +214,10 @@ void dump_platform ( const void *base, bitsz_t row_bits )
CASE ( SRA_PLATFORM_COMPLETE_GENOMICS );
CASE ( SRA_PLATFORM_HELICOS );
default:
- printf ( "%u", data [ 0 ] );
+ OUTMSG(( "%u", data [ 0 ] ));
return;
}
- printf ( "%s", p );
+ OUTMSG(( "%s", p ));
}
static
@@ -239,10 +238,10 @@ void dump_readtype ( const void *base, bitsz_t row_bits )
CASE ( SRA_READ_TYPE_TECHNICAL|SRA_READ_TYPE_REVERSE );
CASE ( SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_REVERSE );
default:
- printf ( "%s%u", sep, data [ 0 ] );
+ OUTMSG(( "%s%u", sep, data [ 0 ] ));
continue;
}
- printf ( "%s%s", sep, p );
+ OUTMSG(( "%s%s", sep, p ));
}
}
@@ -262,10 +261,10 @@ void dump_readfilt ( const void *base, bitsz_t row_bits )
CASE ( SRA_READ_FILTER_CRITERIA );
CASE ( SRA_READ_FILTER_REDACTED );
default:
- printf ( "%s%u", sep, data [ 0 ] );
+ OUTMSG(( "%s%u", sep, data [ 0 ] ));
continue;
}
- printf ( "%s%s", sep, p );
+ OUTMSG(( "%s%s", sep, p ));
}
}
@@ -302,7 +301,7 @@ rc_t dump_row ( const sradump_parms *pb, const column_map *cm, uint32_t count, s
}
/* write cell header - TBD - improve column alignment for readability */
- printf ( "%u. %s: ", row, cm [ i ] . name );
+ OUTMSG(( "%u. %s: ", row, cm [ i ] . name ));
/* write cell data */
if ( cm [ i ] . td . dim == 1 )
@@ -316,14 +315,14 @@ rc_t dump_row ( const sradump_parms *pb, const column_map *cm, uint32_t count, s
for ( sep = "{", j = 0; j < row_len; sep = "},{", ++ j )
{
- printf ( "%s", sep );
+ OUTMSG(( "%s", sep ));
( cm [ i ] . dump ) ( & data [ j * elem_bits >> 3 ], elem_bits );
}
- putchar ( '}' );
+ OUTMSG(( "}" ));
}
- putchar ( '\n' );
+ OUTMSG(( "\n" ));
}
return rc;
@@ -881,7 +880,7 @@ rc_t CC Usage (const Args * args)
UsageSummary (progname);
- KOutMsg ("Options:\n");
+ OUTMSG (( "Options:\n" ));
OUTMSG (("table:\n"
" path to table or accession id within NCBI\n"
@@ -891,7 +890,7 @@ rc_t CC Usage (const Args * args)
HelpParamLine (name_param[0], name_param+1);
HelpParamLine (typedecl_param[0], typedecl_param+1);
- KOutMsg ("\nOptions:\n");
+ OUTMSG (( "\nOptions:\n" ));
HelpOptionLine (ALIAS_START, OPTION_START, "ID", start_usage);
@@ -977,11 +976,11 @@ rc_t CC KMain ( int argc, char *argv [] )
if (rc)
break;
- if (pcount == 0)
- {
- OUTMSG (("missing source table\n"));
+ if (pcount == 0) {
+ OUTMSG (("missing source table\n"));
rc = MiniUsage (args);
- break;
+ ArgsWhack(args);
+ exit(EXIT_FAILURE);
}
rc = ArgsParamValue (args, 0, &pb.src_path);
@@ -1017,7 +1016,8 @@ rc_t CC KMain ( int argc, char *argv [] )
}
if ( pcount != 1 )
- free ( pb.columns );
+ /* brain damaged windows compiler warned about next line */
+ free ( (void*)pb.columns );
}
} while (0);
diff --git a/tools/sra-dump/sra-dump.vers b/tools/sra-dump/sra-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/sra-dump.vers
+++ b/tools/sra-dump/sra-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/sra-dump.vers.h b/tools/sra-dump/sra-dump.vers.h
deleted file mode 100644
index 9b50d59..0000000
--- a/tools/sra-dump/sra-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRA_DUMP_VERS 0x02010007
diff --git a/tools/sra-load/Makefile b/tools/sra-load/Makefile
index c2fa13f..1198ac2 100644
--- a/tools/sra-load/Makefile
+++ b/tools/sra-load/Makefile
@@ -46,20 +46,18 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
ifeq (win,$(OS))
all std:
@ echo "not building loaders under Windows"
else
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
endif
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# std
@@ -70,6 +68,13 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
@@ -102,25 +107,24 @@ LOADER_OBJ = \
$(addsuffix .$(OBJX),$(LOADER_SRC))
LOADER_LIB = \
- -lwsradb \
- -ssrapath \
- -ssraschema \
- -dwsraxf \
-lkapp \
+ -lload \
+ -dwsraxf \
-dwvxf \
+ -lwsradb \
-lwvdb \
-lwkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkxml \
+ -lkxfs \
-lkfg \
- -lload \
-lkfs \
-lksrch \
- -lkxml \
- -lkxfs \
- -lklib \
+ -lkq \
-lkproc \
- -ldl \
- -lz \
- -lbz2 \
+ -lklib \
-lm
ifneq (win,$(OS))
diff --git a/tools/sra-load/abi-load.vers b/tools/sra-load/abi-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/abi-load.vers
+++ b/tools/sra-load/abi-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/abi-load.vers.h b/tools/sra-load/abi-load.vers.h
deleted file mode 100644
index 911efb9..0000000
--- a/tools/sra-load/abi-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ABI_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/absolid-fmt.c b/tools/sra-load/absolid-fmt.c
index ead3f3c..f8b5186 100644
--- a/tools/sra-load/absolid-fmt.c
+++ b/tools/sra-load/absolid-fmt.c
@@ -526,12 +526,6 @@ rc_t AbiLoaderFmt_Whack(AbiLoaderFmt *self, SRATable** table)
const char UsageDefaultName[] = "abi-load";
-rc_t CC UsageSummary (const char * progname)
-{
- return 0;
-}
-
-
uint32_t KAppVersion(void)
{
return ABI_LOAD_VERS;
diff --git a/tools/sra-load/common-xml.c b/tools/sra-load/common-xml.c
index 314b246..9b1b389 100644
--- a/tools/sra-load/common-xml.c
+++ b/tools/sra-load/common-xml.c
@@ -557,23 +557,6 @@ rc_t XMLNode_get_u32node(const KXMLNode* node, const char* child, bool optional,
return rc;
}
-static
-rc_t PlatformXML_verify_instrument_model(const char** models, const char* instrument_model)
-{
- rc_t rc = RC(rcExe, rcFormatter, rcConstructing, rcId, rcOutofrange);
- int i = 0;
- while( models[i] != NULL ) {
- if( strcmp(instrument_model, models[i++]) == 0 ) {
- rc = 0;
- break;
- }
- }
- if( rc != 0 ) {
- PLOGERR(klogErr, (klogErr, rc, "INSTRUMENT_MODEL $(model)", PLOG_S(model), instrument_model));
- }
- return rc;
-}
-
rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t* spot_length)
{
rc_t rc = 0;
@@ -594,10 +577,7 @@ rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t*
if( (rc = KXMLNodeElementName(n, &name)) == 0 ) {
DEBUG_MSG (4, ("PLATFORM: %s\n", name));
if( strcmp(name, "LS454") == 0 ) {
- const char* models[] = {"454 GS", "454 GS 20", "454 GS FLX", "454 GS FLX Titanium", "454 Titanium", "454 GS Junior", NULL};
- if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.ls454.instrument_model)) == 0 &&
- (rc = PlatformXML_verify_instrument_model(models, platform->param.ls454.instrument_model)) == 0 &&
- (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ls454.key_sequence)) == 0 &&
+ if( (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ls454.key_sequence)) == 0 &&
(rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.ls454.flow_sequence)) == 0 &&
(rc = XMLNode_get_u32node(n, "FLOW_COUNT", true, &platform->param.ls454.flow_count)) == 0 ) {
platform->id = SRA_PLATFORM_454;
@@ -629,10 +609,7 @@ rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t*
}
}
} else if( strcmp(name, "ION_TORRENT") == 0 ) {
- const char* models[] = {"Ion Torrent PGM", NULL};
- if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.ion_torrent.instrument_model)) == 0 &&
- (rc = PlatformXML_verify_instrument_model(models, platform->param.ion_torrent.instrument_model)) == 0 &&
- (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ion_torrent.key_sequence)) == 0 &&
+ if( (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ion_torrent.key_sequence)) == 0 &&
(rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.ion_torrent.flow_sequence)) == 0 &&
(rc = XMLNode_get_u32node(n, "FLOW_COUNT", true, &platform->param.ion_torrent.flow_count)) == 0 ) {
platform->id = SRA_PLATFORM_ION_TORRENT;
@@ -664,51 +641,30 @@ rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t*
}
}
} else if( strcmp(name, "ILLUMINA") == 0 ) {
- const char* models[] = {"Illumina Genome Analyzer", "Illumina Genome Analyzer II",
- "Illumina Genome Analyzer IIx", "Illumina HiSeq 2000", NULL};
- if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.illumina.instrument_model)) == 0 &&
- (rc = PlatformXML_verify_instrument_model(models, platform->param.illumina.instrument_model)) == 0 ) {
- if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
- GetRCState(rc) == rcNotFound ) {
- rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
- }
- if( rc == 0 ) {
- platform->id = SRA_PLATFORM_ILLUMINA;
- }
+ if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
+ GetRCState(rc) == rcNotFound ) {
+ rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
+ }
+ if( rc == 0 ) {
+ platform->id = SRA_PLATFORM_ILLUMINA;
}
} else if( strcmp(name, "HELICOS") == 0 ) {
- const char* models[] = {"Helicos HeliScope", NULL};
- if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.helicos.instrument_model)) == 0 &&
- (rc = PlatformXML_verify_instrument_model(models, platform->param.helicos.instrument_model)) == 0 &&
- (rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.helicos.flow_sequence)) == 0 &&
+ if( (rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.helicos.flow_sequence)) == 0 &&
(rc = XMLNode_get_u32node(n, "FLOW_COUNT", true, &platform->param.helicos.flow_count)) == 0 ) {
platform->id = SRA_PLATFORM_HELICOS;
}
} else if( strcmp(name, "ABI_SOLID") == 0 ) {
- const char* models[] = {"AB SOLiD System", "AB SOLiD System 2.0", "AB SOLiD System 3.0",
- "AB SOLiD 4 System", "AB SOLiD 4hq System", "AB SOLiD PI System", NULL};
- if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.absolid.instrument_model)) == 0 &&
- (rc = PlatformXML_verify_instrument_model(models, platform->param.absolid.instrument_model)) == 0 ) {
- if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
- GetRCState(rc) == rcNotFound ) {
- rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
- }
+ if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
+ GetRCState(rc) == rcNotFound ) {
+ rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
}
if( rc == 0 ) {
platform->id = SRA_PLATFORM_ABSOLID;
}
} else if( strcmp(name, "PACBIO_SMRT") == 0 ) {
- const char* models[] = {"PacBio RS", NULL};
- if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.pacbio_smrt.instrument_model)) == 0 &&
- (rc = PlatformXML_verify_instrument_model(models, platform->param.pacbio_smrt.instrument_model)) == 0 ) {
- platform->id = SRA_PLATFORM_PACBIO_SMRT;
- }
+ platform->id = SRA_PLATFORM_PACBIO_SMRT;
} else if( strcmp(name, "COMPLETE_GENOMICS") == 0 ) {
- const char* models[] = {"Complete Genomics", NULL};
- if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.complete_genomics.instrument_model)) == 0 &&
- (rc = PlatformXML_verify_instrument_model(models, platform->param.complete_genomics.instrument_model)) == 0 ) {
- platform->id = SRA_PLATFORM_COMPLETE_GENOMICS;
- }
+ platform->id = SRA_PLATFORM_COMPLETE_GENOMICS;
}
if( rc != 0 || platform->id == SRA_PLATFORM_UNDEFINED ) {
rc = rc ? rc : RC(rcExe, rcFormatter, rcConstructing, rcId, rcUnrecognized);
@@ -737,30 +693,23 @@ void PlatformXML_Whack(const PlatformXML* cself)
PlatformXML* self = (PlatformXML*)cself;
switch(self->id) {
case SRA_PLATFORM_454:
- free(self->param.ls454.instrument_model);
free(self->param.ls454.key_sequence);
free(self->param.ls454.flow_sequence);
break;
case SRA_PLATFORM_ION_TORRENT:
- free(self->param.ion_torrent.instrument_model);
free(self->param.ion_torrent.key_sequence);
free(self->param.ion_torrent.flow_sequence);
break;
case SRA_PLATFORM_ILLUMINA:
- free(self->param.illumina.instrument_model);
break;
case SRA_PLATFORM_HELICOS:
- free(self->param.helicos.instrument_model);
free(self->param.helicos.flow_sequence);
break;
case SRA_PLATFORM_ABSOLID:
- free(self->param.absolid.instrument_model);
break;
case SRA_PLATFORM_PACBIO_SMRT:
- free(self->param.pacbio_smrt.instrument_model);
break;
case SRA_PLATFORM_COMPLETE_GENOMICS:
- free(self->param.complete_genomics.instrument_model);
break;
case SRA_PLATFORM_UNDEFINED:
break;
diff --git a/tools/sra-load/common-xml.h b/tools/sra-load/common-xml.h
index a39a3f1..918a142 100644
--- a/tools/sra-load/common-xml.h
+++ b/tools/sra-load/common-xml.h
@@ -26,7 +26,7 @@
#ifndef _sra_load_common_xml_
#define _sra_load_common_xml_
-#include <klib/xml.h>
+#include <kxml/xml.h>
#include <search/grep.h>
#include <sra/sradb.h>
@@ -38,49 +38,21 @@ typedef struct PlatformXML_struct {
SRAPlatforms id;
union {
struct {
- char* instrument_model;
char* key_sequence; /* optional */
char* flow_sequence; /* optional */
uint32_t flow_count; /* optional */
} ls454;
struct {
- char* instrument_model;
char* key_sequence; /* optional */
char* flow_sequence; /* optional */
uint32_t flow_count; /* optional */
} ion_torrent;
struct {
- char* instrument_model;
- /* CYCLE_COUNT not optional, but deprecated so this is filled instead */
- /* SEQUENCE_LENGTH is not yet deprecated but we use SPOT_LENGTH from SPOT_DECODE_SPEC as primary source */
- } illumina;
-
- struct {
- char* instrument_model;
char* flow_sequence; /* optional */
uint32_t flow_count; /* optional */
} helicos;
-
- struct {
- char* instrument_model;
- /* not used now
- ????? color_matrix;
- char* color_matrix_code;
- */
- /* CYCLE_COUNT not optional, but deprecated so this is filled instead */
- /* SEQUENCE_LENGTH is not yet deprecated but we use SPOT_LENGTH from SPOT_DECODE_SPEC as primary source */
- } absolid;
-
- struct {
- char* instrument_model;
- } pacbio_smrt;
-
- struct {
- char* instrument_model;
- } complete_genomics;
-
} param;
} PlatformXML;
diff --git a/tools/sra-load/experiment-xml.c b/tools/sra-load/experiment-xml.c
index 9cfc664..3995c90 100644
--- a/tools/sra-load/experiment-xml.c
+++ b/tools/sra-load/experiment-xml.c
@@ -55,8 +55,6 @@ typedef struct PoolMember_struct {
BSTNode node;
const char *name;
PoolReadSpec spec[MAX_SPOT_DESCRIPTOR_READS];
- uint32_t added;
- uint32_t removed;
} PoolMember;
struct ExperimentXML {
@@ -135,107 +133,6 @@ void CC PoolMember_Dump( BSTNode *node, void *data )
}
#endif
-typedef struct PoolMember_Stat_struct {
- SLNode node;
- const char *member;
- uint32_t added;
- uint32_t deleted;
-} PoolMember_Stat;
-
-typedef struct PoolMember_StatFindData_struct {
- const char* search;
- PoolMember_Stat* node;
-} PoolMember_StatFindData;
-
-static
-bool CC PoolMemberStats_Find(SLNode *n, void *d)
-{
- PoolMember_Stat* node = (PoolMember_Stat*)n;
- PoolMember_StatFindData* data = (PoolMember_StatFindData*)d;
-
- if( ((node->member == NULL || node->member[0] == '\0') && (data->search == NULL || data->search[0] == '\0')) ||
- (node->member != NULL && data->search != NULL && strcmp(node->member, data->search) == 0) ) {
- data->node = node;
- return true;
- }
- return false;
-}
-
-static
-void CC PoolMemberStats_Log( SLNode *n, void *data )
-{
- PoolMember_Stat* node = (PoolMember_Stat*)n;
-
- const char* mm = node->member ? node->member : "default";
- PLOGMSG(klogInfo, (klogInfo, "Member stat $(name): +$(added), -$(removed)",
- "severity=member,name=%s,added=%u,removed=%u", mm, node->added, node->deleted));
-}
-
-static
-void CC PoolMemberStats_Whack( SLNode *n, void *data )
-{
- PoolMember_Stat* node = (PoolMember_Stat*)n;
- free((void*)node->member);
- free(node);
-}
-
-static
-rc_t PoolMemberStats(const ExperimentXML* self, const char* member_name, PoolMember_Stat** node)
-{
- rc_t rc = 0;
- PoolMember_StatFindData data;
-
- data.node = NULL;
- data.search = member_name;
-
- if( !SLListDoUntil(&self->member_stats, PoolMemberStats_Find, &data) ) {
- char* nm = (member_name && member_name[0] != '\0') ? strdup(member_name) : NULL;
- data.node = calloc(1, sizeof(*data.node));
- if( data.node == NULL || (nm == NULL && member_name && member_name[0] != '\0') ) {
- free(data.node);
- free(nm);
- rc = RC(rcSRA, rcFormatter, rcResolving, rcMemory, rcExhausted);
- } else {
- data.node->member = nm;
- SLListPushTail((SLList*)&self->member_stats, &data.node->node);
- }
- }
- *node = data.node;
- return rc;
-}
-
-static
-rc_t PoolMemberStats_Set(const ExperimentXML* self, const char* member_name)
-{
- PoolMember_Stat* node = NULL;
-
- return PoolMemberStats(self, member_name, &node);
-}
-
-static
-rc_t PoolMemberStats_Add(const ExperimentXML* self, const char* member_name)
-{
- rc_t rc = 0;
- PoolMember_Stat* node = NULL;
-
- if( (rc = PoolMemberStats(self, member_name, &node)) == 0 ) {
- node->added++;
- }
- return rc;
-}
-
-static
-rc_t PoolMemberStats_Delete(const ExperimentXML* self, const char* member_name)
-{
- rc_t rc = 0;
- PoolMember_Stat* node = NULL;
-
- if( (rc = PoolMemberStats(self, member_name, &node)) == 0 ) {
- node->deleted++;
- }
- return rc;
-}
-
static
rc_t PoolMember_Add(ExperimentXML* self, const char* name)
{
@@ -320,7 +217,6 @@ rc_t PoolMember_Add(ExperimentXML* self, const char* name)
break;
}
}
- rc = PoolMemberStats_Set(self, member->name);
} else {
PoolMember_Whack(&member->node, NULL);
}
@@ -536,20 +432,32 @@ bool Experiment_ExpectedTableMatch(const ReadSpecXML_read_BASECALL_TABLE* table,
match.score = -1;
if( data->left_adjusted ) {
if( AgrepFindFirst(bc->agrep, bc->max_mismatch, data->seq, data->len, &match) ) {
- if( match.position > bc->max_mismatch - match.score ) {
- match.score = -1;
- } else if( match.position > 0 ) {
- match.score += match.position;
- match.length += match.position;
- match.position = 0;
+ if( data->direction == etm_Reverse ) {
+ int32_t right_tail = data->len - match.position - strlen(bc->basecall);
+ if( right_tail > bc->max_mismatch - match.score ) {
+ match.score = -1;
+ } else if( match.position > 0 ) {
+ match.score += right_tail;
+ match.length += right_tail;
+ match.position = 0;
+ }
+ } else {
+ if( match.position > bc->max_mismatch - match.score ) {
+ match.score = -1;
+ } else if( match.position > 0 ) {
+ match.score += match.position;
+ match.length += match.position;
+ match.position = 0;
+ }
}
}
} else {
AgrepFindBest(bc->agrep, bc->max_mismatch, data->seq, data->len, &match);
}
if( !(match.score < 0) ) {
- DEBUG_MSG(3, ("agrep match bc %s, min: %u, max: %u, edge: %s, [%d:%d] score %d\n", bc->basecall, bc->min_match, bc->max_mismatch,
+ DEBUG_MSG(3, ("agrep match bc %s, min: %u, max: %u, edge: %s%s, [%d:%d] score %d\n", bc->basecall, bc->min_match, bc->max_mismatch,
bc->match_edge == match_edge_Full ? "Full" : (bc->match_edge == match_edge_Start ? "Start" : "End"),
+ data->left_adjusted ? " left adjusted" : "",
match.position, match.length, match.score));
if( (data->match.score < 0 || data->match.score > match.score) ) {
memcpy(&data->match, &match, sizeof(data->match));
@@ -669,20 +577,20 @@ rc_t Experiment_FillRead(const ReadSpecXML_read* spec, PoolReadSpec* pool,
break;
}
for(i = 0; i < data.len; i++) {
- /* reverse part of seq */
+ /* reverse a portion of seq */
r[i] = bases[pool[1].start - i - 1];
}
data.seq = r;
data.tag = *tag;
data.direction = etm_Reverse;
- data.left_adjusted = true;
+ data.left_adjusted = spec[1].coord_type != rdsp_RelativeOrder_ct && pool[1].start > 0;
DEBUG_MSG(3, ("agrep find read %u rev in: '%.*s' = %u\n", nreads, data.len, data.seq, data.len));
if( Experiment_ExpectedTableMatch(&spec->coord.expected_basecalls, &data) ) {
DEBUG_MSG(3, ("agrep found rev from %hd match %d:%d - %d '%s' in '%.*s' \n",
start, data.match.position, data.match.length, data.match.score,
data.bc->basecall, data.len, &bases[pool[1].start - data.len]));
if( pool->length < 0 || data.match.score < pool->score ) {
- pool->start = pool[1].start - data.match.length;
+ pool->start = pool[1].start - data.match.position - data.match.length;
pool->length = data.match.length;
pool->item[0] = data.bc;
pool->score = data.match.score;
@@ -700,7 +608,12 @@ rc_t Experiment_FillRead(const ReadSpecXML_read* spec, PoolReadSpec* pool,
gap = pool[1].start - (pool->start + pool->length);
if( gap > 0 ) {
/* right gap */
- if( spec[1].coord_type >= rdsp_ExpectedBaseCall_ct &&
+ if( spec[1].coord_type == rdsp_RelativeOrder_ct ) {
+ /* adjust right read's start to the tail of current read */
+ pool[1].start -= gap;
+ pool[1].length += gap;
+ gap = 0;
+ } else if( spec[1].coord_type >= rdsp_ExpectedBaseCall_ct &&
spec[1].coord.expected_basecalls.base_coord <= 0 && pool[1].item[0] != NULL ) {
/* move left read's start to left as much as possible */
int32_t left = pool[1].item[0]->max_mismatch - pool[1].score;
@@ -881,17 +794,10 @@ rc_t Experiment_MemberSeg(const ExperimentXML* self,
if( self->member_pool == NULL || self->processing.barcode_rule == eBarcodeRule_ignore_barcode ) {
if( (rc = Experiment_FillSegAgrep(self, pool, self->member_null, nbases, bases, NULL)) == 0 ) {
*new_member_name = mm;
- rc = PoolMemberStats_Add(self, *new_member_name);
}
} else if( mm == NULL ) {
*new_member_name = NULL;
- if( (rc = Experiment_FillSegAgrep(self, pool, self->member_null, nbases, bases, new_member_name)) == 0 ) {
- if( (rc = PoolMemberStats_Add(self, *new_member_name)) == 0 ) {
- if( *new_member_name != NULL && **new_member_name != '\0' ) {
- rc = PoolMemberStats_Delete(self, NULL);
- }
- }
- }
+ rc = Experiment_FillSegAgrep(self, pool, self->member_null, nbases, bases, new_member_name);
} else {
PoolMember* pm = (PoolMember*)BSTreeFind(self->member_pool, mm, PoolMember_FindByName);
if( pm == NULL ) {
@@ -900,7 +806,6 @@ rc_t Experiment_MemberSeg(const ExperimentXML* self,
} else {
if( (rc = Experiment_FillSegAgrep(self, pool, pm, nbases, bases, NULL)) == 0 ) {
*new_member_name = mm;
- rc = PoolMemberStats_Add(self, *new_member_name);
}
}
}
@@ -962,7 +867,7 @@ rc_t Experiment_MemberSeg(const ExperimentXML* self,
size_t max = sizeof(err_buf);
for(i = 1; i <= self->reads->nreads; i++) {
- int x = snprintf(p, max, "[%hd:%hd, len = %hd", pool[i].start, pool[i].start + pool[i].length, pool[i].length);
+ int x = snprintf(p, max, "[%hd:%d, len = %hd", pool[i].start, pool[i].start + pool[i].length, pool[i].length);
if( x > 0 && x < max ) {
max -= x;
p += x;
@@ -1018,9 +923,6 @@ rc_t Experiment_MemberSegSimple(const ExperimentXML* self,
*new_member_name = NULL;
break;
}
- if( rc == 0 ) {
- rc = PoolMemberStats_Add(self, *new_member_name);
- }
}
return rc;
}
@@ -1337,17 +1239,6 @@ rc_t Experiment_ReadSegDefault(const ExperimentXML* self, SRASegment* seg)
return rc;
}
-rc_t Experiment_LogStats(const ExperimentXML* cself)
-{
- rc_t rc = 0;
- if( cself == NULL ) {
- rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
- } else {
- SLListForEach(&cself->member_stats, PoolMemberStats_Log, NULL);
- }
- return rc;
-}
-
void Experiment_Whack(const ExperimentXML* cself)
{
if( cself != NULL ) {
@@ -1358,7 +1249,6 @@ void Experiment_Whack(const ExperimentXML* cself)
BSTreeWhack(self->member_pool, PoolMember_Whack, NULL);
free(self->member_pool);
PoolMember_Whack(&self->member_null->node, NULL);
- SLListWhack(&self->member_stats, PoolMemberStats_Whack, NULL);
PlatformXML_Whack(self->platform);
free(self);
}
diff --git a/tools/sra-load/experiment-xml.h b/tools/sra-load/experiment-xml.h
index ff81c05..8ab869d 100644
--- a/tools/sra-load/experiment-xml.h
+++ b/tools/sra-load/experiment-xml.h
@@ -71,7 +71,6 @@ rc_t Experiment_MemberSegSimple(const ExperimentXML* self,
const char* const file_member_name, const char* const data_block_member_name,
const char** const new_member_name);
-rc_t Experiment_LogStats(const ExperimentXML* cself);
void Experiment_Whack(const ExperimentXML* cself);
diff --git a/tools/sra-load/fastq-fmt.c b/tools/sra-load/fastq-fmt.c
index efcc7f9..35c3090 100644
--- a/tools/sra-load/fastq-fmt.c
+++ b/tools/sra-load/fastq-fmt.c
@@ -98,6 +98,7 @@ static
rc_t file_read_line(FastqFileInfo* file, bool optional)
{
rc_t rc = 0;
+static unsigned long lineNo=0;
if( file->line == NULL ) {
if( (rc = SRALoaderFileReadline(file->file, (const void**)&file->line, &file->line_len)) == 0 ) {
@@ -119,6 +120,7 @@ rc_t file_read_line(FastqFileInfo* file, bool optional)
}
}
}
+ ++lineNo;
}
return rc;
}
@@ -248,8 +250,8 @@ uint8_t parse_spot_name(const SRALoaderFile* file, FileReadData* spot, const cha
x++;
}
/* find last '=' and use only whatever is to the left of it */
- if( (x = memrchr(spot->name.data, '=', spot->name.len)) == NULL ) {
- rc = pstring_assign(&spot->name, x + 1, spot->name.len - (x - spot->name.data));
+ if( (x = memrchr(spot->name.data, '=', spot->name.len)) != NULL ) {
+ rc = pstring_assign(&spot->name, spot->name.data, (x - spot->name.data) );
}
}
return score;
@@ -476,13 +478,16 @@ rc_t read_next_spot(FastqLoaderFmt* self, FastqFileInfo* file)
if( rd->ready && rd->read.qual_type != ILLUMINAWRITER_COLMASK_NOTSET ) {
if( file->qualOffset == 0 ) {
/* detect and remember */
- file->qualOffset = 64;
+ file->qualOffset = 33;
+ file->qualMax = 94;
rc = pstring_quality_convert(&rd->read.qual, file->qualEnc, file->qualOffset, file->qualMin, file->qualMax);
if( GetRCState(rc) == rcOutofrange ) {
- file->qualOffset = 33;
+ file->qualOffset = 64;
+ file->qualMax = 61;
rc = pstring_quality_convert(&rd->read.qual, file->qualEnc, file->qualOffset, file->qualMin, file->qualMax);
}
} else {
+ if(file->qualOffset == 33) file->qualMax = 94;
rc = pstring_quality_convert(&rd->read.qual, file->qualEnc, file->qualOffset, file->qualMin, file->qualMax);
}
if( rc != 0 ) {
@@ -541,7 +546,7 @@ rc_t FastqLoaderFmt_WriteData(FastqLoaderFmt* self, uint32_t argc, const SRALoad
case eExperimentQualityType_Phred:
file->qualType = ILLUMINAWRITER_COLMASK_QUALITY_PHRED;
file->qualMin = 0;
- file->qualMax = (self->wIllumina) ? 41: 127;
+ file->qualMax = (self->wIllumina) ? 61: 127;
break;
}
}
@@ -631,12 +636,6 @@ rc_t FastqLoaderFmt_Whack(FastqLoaderFmt *self, SRATable** table)
const char UsageDefaultName[] = "fastq-load";
-rc_t CC UsageSummary (const char * progname)
-{
- return 0;
-}
-
-
uint32_t KAppVersion(void)
{
return FASTQ_LOAD_VERS;
@@ -682,22 +681,10 @@ rc_t SRALoaderFmtMake(SRALoaderFmt **self, const SRALoaderConfig *config)
return rc;
}
if( platform->id == SRA_PLATFORM_454 ) {
- if( platform->param.ls454.flow_sequence == NULL ) {
- LOGMSG(klogWarn, "missing FLOW_SEQUENCE in PLATFORM");
- }
- if( platform->param.ls454.key_sequence == NULL ) {
- LOGMSG(klogWarn, "missing KEY_SEQUENCE in PLATFORM");
- }
if( rc == 0 && (rc = SRAWriter454_Make(&fmt->w454, config)) != 0 ) {
LOGERR(klogInt, rc, "failed to initialize 454 writer");
}
} else if( platform->id == SRA_PLATFORM_ION_TORRENT ) {
- if( platform->param.ion_torrent.flow_sequence == NULL ) {
- LOGMSG(klogWarn, "missing FLOW_SEQUENCE in PLATFORM");
- }
- if( platform->param.ion_torrent.key_sequence == NULL ) {
- LOGMSG(klogWarn, "missing KEY_SEQUENCE in PLATFORM");
- }
if( rc == 0 && (rc = SRAWriterIonTorrent_Make(&fmt->wIonTorrent, config)) != 0 ) {
LOGERR(klogInt, rc, "failed to initialize Ion Torrent writer");
}
diff --git a/tools/sra-load/fastq-load.vers b/tools/sra-load/fastq-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/fastq-load.vers
+++ b/tools/sra-load/fastq-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/fastq-load.vers.h b/tools/sra-load/fastq-load.vers.h
deleted file mode 100644
index 517027e..0000000
--- a/tools/sra-load/fastq-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define FASTQ_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/helicos-fmt.c b/tools/sra-load/helicos-fmt.c
index 810f427..d2f254b 100644
--- a/tools/sra-load/helicos-fmt.c
+++ b/tools/sra-load/helicos-fmt.c
@@ -227,11 +227,6 @@ rc_t HelicosLoaderFmt_Whack(HelicosLoaderFmt *self, SRATable** table)
const char UsageDefaultName[] = "helicos-load";
-rc_t CC UsageSummary (const char * progname)
-{
- return 0;
-}
-
uint32_t KAppVersion(void)
{
return HELICOS_LOAD_VERS;
diff --git a/tools/sra-load/helicos-load.vers b/tools/sra-load/helicos-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/helicos-load.vers
+++ b/tools/sra-load/helicos-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/helicos-load.vers.h b/tools/sra-load/helicos-load.vers.h
deleted file mode 100644
index d25307a..0000000
--- a/tools/sra-load/helicos-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define HELICOS_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/illumina-fmt.c b/tools/sra-load/illumina-fmt.c
index 9bafe77..ad0caa6 100644
--- a/tools/sra-load/illumina-fmt.c
+++ b/tools/sra-load/illumina-fmt.c
@@ -797,11 +797,6 @@ rc_t IlluminaLoaderFmt_Whack(IlluminaLoaderFmt *self, SRATable** table)
const char UsageDefaultName[] = "illumina-load";
-rc_t CC UsageSummary (const char * progname)
-{
- return 0;
-}
-
uint32_t KAppVersion(void)
{
return ILLUMINA_LOAD_VERS;
diff --git a/tools/sra-load/illumina-load.vers b/tools/sra-load/illumina-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/illumina-load.vers
+++ b/tools/sra-load/illumina-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/illumina-load.vers.h b/tools/sra-load/illumina-load.vers.h
deleted file mode 100644
index 77ce9c4..0000000
--- a/tools/sra-load/illumina-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ILLUMINA_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/loader-file.c b/tools/sra-load/loader-file.c
index 879ecdf..feeff1a 100644
--- a/tools/sra-load/loader-file.c
+++ b/tools/sra-load/loader-file.c
@@ -76,6 +76,11 @@ rc_t SRALoaderFileFullName(const SRALoaderFile *cself, const char **name)
return KLoaderFile_FullName(cself ? cself->lfile : NULL, name);
}
+rc_t SRALoaderFileResolveName(const SRALoaderFile *self, char *resolved, size_t rsize)
+{
+ return KLoaderFile_ResolveName(self ? self->lfile : NULL, resolved, rsize);
+}
+
rc_t SRALoaderFileBlockName ( const SRALoaderFile *cself, const char **block_name )
{
if( cself == NULL || block_name == NULL ) {
@@ -162,7 +167,7 @@ rc_t SRALoaderFile_Release(const SRALoaderFile* cself)
}
rc_t SRALoaderFile_Make(const SRALoaderFile **cself, const KDirectory* dir, const char* filename,
- const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest)
+ const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest, bool read_ahead)
{
rc_t rc = 0;
SRALoaderFile* obj;
@@ -172,7 +177,7 @@ rc_t SRALoaderFile_Make(const SRALoaderFile **cself, const KDirectory* dir, cons
} else {
if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
rc = RC(rcSRA, rcFile, rcConstructing, rcMemory, rcExhausted);
- } else if( (rc = KLoaderFile_Make(&obj->lfile, dir, filename, md5_digest)) == 0 ) {
+ } else if( (rc = KLoaderFile_Make(&obj->lfile, dir, filename, md5_digest, read_ahead)) == 0 ) {
obj->data_block = block;
obj->file_attr = fileattr;
*cself = obj;
diff --git a/tools/sra-load/loader-file.h b/tools/sra-load/loader-file.h
index 73cbffc..261eb32 100644
--- a/tools/sra-load/loader-file.h
+++ b/tools/sra-load/loader-file.h
@@ -40,7 +40,7 @@
typedef struct SRALoaderFile SRALoaderFile;
rc_t SRALoaderFile_Make(const SRALoaderFile **cself, const KDirectory* dir, const char* filename,
- const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest);
+ const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest, bool read_ahead);
rc_t SRALoaderFile_Release(const SRALoaderFile* cself);
@@ -59,6 +59,8 @@ rc_t SRALoaderFileName ( const SRALoaderFile *cself, const char **name );
rc_t SRALoaderFileFullName(const SRALoaderFile *cself, const char **name);
+rc_t SRALoaderFileResolveName(const SRALoaderFile *self, char *resolved, size_t rsize);
+
/* DATA_BLOCK name attribute */
rc_t SRALoaderFileBlockName ( const SRALoaderFile *cself, const char **block_name );
diff --git a/tools/sra-load/loader-fmt.h b/tools/sra-load/loader-fmt.h
index 3a25fd5..9ef888c 100644
--- a/tools/sra-load/loader-fmt.h
+++ b/tools/sra-load/loader-fmt.h
@@ -50,6 +50,7 @@ typedef struct TArgs_struct {
const char *_runXmlPath;
const char* _input_path;
uint32_t _input_unpacked; /* as bool */
+ uint32_t _no_read_ahead; /* as bool */
const char *_experimentXmlPath;
const char *_target;
diff --git a/tools/sra-load/loader.c b/tools/sra-load/loader.c
index f2c09f8..9c9c888 100644
--- a/tools/sra-load/loader.c
+++ b/tools/sra-load/loader.c
@@ -28,7 +28,7 @@
#include <klib/log.h>
#include <klib/out.h>
#include <klib/status.h>
-#include <klib/xml.h>
+#include <kxml/xml.h>
#include <kfs/md5.h>
#include <kfs/arc.h>
#include <kfs/tar.h>
@@ -64,6 +64,7 @@ enum TArgsIndex {
targs_RunXML = 0,
targs_InputPath,
targs_InputUnpacked,
+ targs_InputNoCache,
targs_ExperimentXML,
targs_Target,
targs_ForceTarget,
@@ -79,6 +80,7 @@ const char* usage_text[targs_ArgsQty][5] = {
{ "path to run.xml describing input files", NULL },
{ "input files location, default '.'", NULL },
{ "input files are unpacked", NULL },
+ { "disable input files threaded caching", NULL },
{ "path to experiment.xml", NULL },
{ "target location", NULL },
{ "force target overwrite", NULL },
@@ -86,10 +88,10 @@ const char* usage_text[targs_ArgsQty][5] = {
{ "acceptable number of spot creation errors, default is 50", NULL },
{ "acceptable percentage of spots creation errors, default is 5", NULL },
{ "path to expected.xml", NULL },
- { "[on | off] load intensity data, default is off:",
+ { "[on | off] load intensity data, default is off. For ",
" Illumina: signal, intensity, noise;",
" AB SOLiD: signal(s);",
- " LS454: signal, position (for SFF files ON by default).", NULL }
+ " LS454: signal, position (for SFF files this option is ON by default).", NULL },
};
OptDef TArgsDef[] =
@@ -98,16 +100,23 @@ OptDef TArgsDef[] =
{"run-xml", "r", NULL, usage_text[targs_RunXML], 1, true, true},
{"input-path", "i", NULL, usage_text[targs_InputPath], 1, true, false},
{"input-unpacked", "u", NULL, usage_text[targs_InputUnpacked], 1, false, false},
+ {"input-no-threads", "t", NULL, usage_text[targs_InputNoCache], 1, false, false},
{"experiment", "e", NULL, usage_text[targs_ExperimentXML], 1, true, true},
{"output-path", "o", NULL, usage_text[targs_Target], 1, true, true},
{"force", "f", NULL, usage_text[targs_ForceTarget], 1, false, false},
{"spots-number", "n", NULL, usage_text[targs_SpotsNumber], 1, true, false},
- {"bad-spot-number", "b", NULL, usage_text[targs_BadSpotsNumber], 1, true, false},
+ {"bad-spot-number", "bE", NULL, usage_text[targs_BadSpotsNumber], 1, true, false},
{"bad-spot-percentage", "p", NULL, usage_text[targs_BadSpotPercentage], 1, true, false},
{"expected", "x", NULL, usage_text[targs_ExpectedXML], 1, true, false},
{"intensities", "s", NULL, usage_text[targs_Intensities], 1, true, false}
};
+rc_t CC UsageSummary (const char * progname)
+{
+ OUTMSG(( "\nUsage:\n\t%s [options] -r run.xml -e experiment.xml -o output-path\n\n", progname));
+ return 0;
+}
+
rc_t Usage( const Args * args )
{
const char * progname = UsageDefaultName;
@@ -115,19 +124,15 @@ rc_t Usage( const Args * args )
rc_t rc;
int i;
- if (args == NULL)
+ if(args == NULL) {
rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
- else
+ } else {
rc = ArgsProgram (args, &fullpath, &progname);
- if (rc)
+ }
+ if(rc != 0 ) {
progname = fullpath = UsageDefaultName;
-
-/* UsageSummary (progname); */
-
-/* KOutMsg ("Options:\n"); */
-
-
- OUTMSG(( "\nUsage:\n\t%s [options] -r run.xml -e experiment.xml -o output-path\n\n", progname));
+ }
+ UsageSummary(progname);
for(i = 0; i < targs_ArgsQty; i++ ) {
if( TArgsDef[i].required && TArgsDef[i].help[0] != NULL ) {
@@ -192,6 +197,9 @@ rc_t TArgsParse(TArgs *args, int argc, char *argv[])
} else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_InputUnpacked].name, &args->_input_unpacked)) != 0 ) {
errmsg = TArgsDef[targs_InputUnpacked].name;
+ } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_InputNoCache].name, &args->_no_read_ahead)) != 0 ) {
+ errmsg = TArgsDef[targs_InputNoCache].name;
+
} else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_ForceTarget].name, &args->_force_target)) != 0 ) {
errmsg = TArgsDef[targs_ForceTarget].name;
@@ -322,7 +330,12 @@ rc_t TArgsMake(TArgs **args, int argc, char *argv[])
r->_spots_bad_allowed = 50;
r->_spots_bad_allowed_percentage = 5;
r->_input_unpacked = false;
- rc = TArgsParse(r, argc, argv);
+ if( argc > 1 ) {
+ rc = TArgsParse(r, argc, argv);
+ } else {
+ MiniUsage(r->args);
+ exit(0);
+ }
}
if( rc == 0 ) {
*args = r;
@@ -631,9 +644,6 @@ static rc_t TArgsLogResultTotal(const TArgs *self, rc_t status, uint64_t spotCou
/* raise log level in order to print stats */
tmp_lvl = KLogLevelGet();
KLogLevelSet(klogInfo);
- if(status == 0) {
- Experiment_LogStats(self->_experiment);
- }
for(i = 0; self->_expected != NULL && i < self->_expected->number_of_results && rc == 0; i++) {
ResultXML *f = self->_expected->result[i];
PLOGMSG(klogInfo, (klogInfo, "loaded",
@@ -755,15 +765,12 @@ rc_t SInputOpen(const SInput **cself, TArgs *args)
const KFile* kf = NULL;
if( ccdirs_qty + 1 > sizeof(ccdirs) / sizeof(ccdirs[0]) ) {
rc = RC(rcExe, rcStorage, rcAllocating, rcNamelist, rcTooLong);
- } else if( (rc = KDirectoryOpenFileRead(args->_input_dir, &kf, "%s.xml", b->files[j].cc_xml)) == 0)
- {
+ } else if( (rc = KDirectoryOpenFileRead(args->_input_dir, &kf, "%s.xml", b->files[j].cc_xml)) == 0) {
char base_path[4096];
int r = snprintf(base_path, sizeof base_path, "%s/", b->files[j].cc_xml);
if (r >= sizeof base_path) {
rc = RC(rcExe, rcStorage, rcAllocating, rcFile, rcTooLong);
- }
- else if ((rc = KDirectoryOpenXTocDirRead(args->_input_dir, &ccdirs[ccdirs_qty].xdir,
- base_path, kf)) == 0 ) {
+ } else if ((rc = KDirectoryOpenXTocDirRead(args->_input_dir, &ccdirs[ccdirs_qty].xdir, false, kf, base_path)) == 0 ) {
cd = ccdirs_qty++;
ccdirs[cd].uid = b->files[j].cc_xml;
KFileRelease(kf);
@@ -777,7 +784,8 @@ rc_t SInputOpen(const SInput **cself, TArgs *args)
if( fn == NULL ) {
rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
} else {
- rc = SRALoaderFile_Make(&self->blocks[i].files[f++], fdir, fn, b, &b->files[j].attr, NULL);
+ rc = SRALoaderFile_Make(&self->blocks[i].files[f++], fdir, fn, b, &b->files[j].attr,
+ NULL, !args->_no_read_ahead);
file_qty++;
free(fn);
}
@@ -825,7 +833,8 @@ rc_t SInputOpen(const SInput **cself, TArgs *args)
}
self->blocks[i].files = p;
for(k = 0; k < data.count; k++) {
- rc = SRALoaderFile_Make(&self->blocks[i].files[f++], tar, data.files[k], b, &b->files[j].attr, NULL);
+ rc = SRALoaderFile_Make(&self->blocks[i].files[f++], tar, data.files[k], b, &b->files[j].attr,
+ NULL, !args->_no_read_ahead);
file_qty++;
}
free(data.files);
@@ -836,7 +845,8 @@ rc_t SInputOpen(const SInput **cself, TArgs *args)
if( fn == NULL ) {
rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
} else {
- rc = SRALoaderFile_Make(&self->blocks[i].files[f++], args->_input_dir, fn, b, &b->files[j].attr, b->files[j].md5_digest);
+ rc = SRALoaderFile_Make(&self->blocks[i].files[f++], args->_input_dir, fn, b, &b->files[j].attr,
+ b->files[j].md5_digest, !args->_no_read_ahead);
file_qty++;
free(fn);
}
@@ -1106,8 +1116,8 @@ rc_t KMain(int argc, char *argv[])
/* make sure the error was reported */
if( rc != 0 &&
- rc != RC(rcExe, rcProcess, rcExecuting, rcProcess, rcCanceled) &&
- rc != RC(rcExe, rcProcess, rcExecuting, rcTransfer, rcDone)) {
+ rc != SILENT_RC(rcExe, rcProcess, rcExecuting, rcProcess, rcCanceled) &&
+ rc != SILENT_RC(rcExe, rcProcess, rcExecuting, rcTransfer, rcDone)) {
if (lastRc == 0) {
lastRc = KLogLastErrorCode();
}
diff --git a/tools/sra-load/run-xml.c b/tools/sra-load/run-xml.c
index a569ea7..12399eb 100644
--- a/tools/sra-load/run-xml.c
+++ b/tools/sra-load/run-xml.c
@@ -101,7 +101,8 @@ const struct {
{ "Illumina_native_int", rft_IlluminaNativeInt },
{ "Illumina_native_qseq", rft_IlluminaNativeQseq },
{ "SOLiD_native_csfasta", rft_ABINativeCSFasta },
- { "SOLiD_native_qual", rft_ABINativeQuality }
+ { "SOLiD_native_qual", rft_ABINativeQuality },
+ { "PacBio_HDF5", rft_PacBio_HDF5 }
};
static
@@ -248,7 +249,7 @@ rc_t parse_FILE(const KXMLNode* FILE, DataBlockFile* file)
if( file->attr.filetype == 0 ) {
rc4 = RC(rcExe, rcStorage, rcConstructing, rcAttr, rcOutofrange);
PLOGERR(klogErr, (klogErr, rc4, "FILE $(file) @filetype '$(type)'",
- PLOG_2(PLOG_S(file),PLOG_S(digits)), file->filename, filetype));
+ PLOG_2(PLOG_S(file),PLOG_S(type)), file->filename, filetype));
}
}
rc = rc1 ? rc1 : (rc2 ? rc2 : (rc3 ? rc3 : rc4));
diff --git a/tools/sra-load/run-xml.h b/tools/sra-load/run-xml.h
index f1119dd..b46172b 100644
--- a/tools/sra-load/run-xml.h
+++ b/tools/sra-load/run-xml.h
@@ -43,7 +43,8 @@ typedef enum ERunFileType_enum {
rft_IlluminaNativeInt,
rft_IlluminaNativeQseq,
rft_ABINativeCSFasta,
- rft_ABINativeQuality
+ rft_ABINativeQuality,
+ rft_PacBio_HDF5
} ERunFileType;
typedef struct DataBlockFileAttr_struct {
diff --git a/tools/sra-load/sff-fmt.c b/tools/sra-load/sff-fmt.c
index 66a7ca4..49ce718 100644
--- a/tools/sra-load/sff-fmt.c
+++ b/tools/sra-load/sff-fmt.c
@@ -404,11 +404,6 @@ rc_t SFFLoaderFmtWriteDataFile(SFFLoaderFmt* self, const SRALoaderFile* file)
const char UsageDefaultName[] = "sff-load";
-rc_t CC UsageSummary (const char * progname)
-{
- return 0;
-}
-
uint32_t KAppVersion(void)
{
return SFF_LOAD_VERS;
diff --git a/tools/sra-load/sff-load.vers b/tools/sra-load/sff-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/sff-load.vers
+++ b/tools/sra-load/sff-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/sff-load.vers.h b/tools/sra-load/sff-load.vers.h
deleted file mode 100644
index e2c52f4..0000000
--- a/tools/sra-load/sff-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SFF_LOAD_VERS 0x02010000
diff --git a/tools/sra-load/srf-fmt.c b/tools/sra-load/srf-fmt.c
index c0f8749..19252f3 100644
--- a/tools/sra-load/srf-fmt.c
+++ b/tools/sra-load/srf-fmt.c
@@ -40,11 +40,6 @@
const char UsageDefaultName[] = "srf-load";
-rc_t CC UsageSummary (const char * progname)
-{
- return 0;
-}
-
uint32_t KAppVersion(void)
{
return SRF_LOAD_VERS;
diff --git a/tools/sra-load/srf-load.vers b/tools/sra-load/srf-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/srf-load.vers
+++ b/tools/sra-load/srf-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/srf-load.vers.h b/tools/sra-load/srf-load.vers.h
deleted file mode 100644
index c1e1293..0000000
--- a/tools/sra-load/srf-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRF_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/writer-absolid.c b/tools/sra-load/writer-absolid.c
index 922360c..faaaec4 100644
--- a/tools/sra-load/writer-absolid.c
+++ b/tools/sra-load/writer-absolid.c
@@ -38,8 +38,8 @@
#include <ctype.h>
#include <assert.h>
-const int AbisolidReadType2ReadNumber [] = {0, 0, 0, 1, 1, 1};
-const char *AbisolidReadType2ReadLabel [] = {"", "", "F3", "R3", "F5-P2", "F5-BC"};
+const int AbisolidReadType2ReadNumber [] = {0, 0, 0, 1, 1, 1, 1, 1, 1};
+const char *AbisolidReadType2ReadLabel [] = {"", "", "F3", "R3", "F5-P2", "F5-BC", "F5-RNA", "F5-DNA", "F3-DNA"};
void AbsolidRead_Init(AbsolidRead* read)
{
@@ -75,6 +75,12 @@ EAbisolidReadType AbsolidRead_Suffix2ReadType(const char* s)
type = eAbisolidReadType_F5_P2;
} else if( len > 4 && strcmp(&s[len - 5], "F5-BC") == 0 ) {
type = eAbisolidReadType_F5_BC;
+ } else if( len > 5 && strcmp(&s[len - 6], "F5-RNA") == 0 ) {
+ type = eAbisolidReadType_F5_RNA;
+ } else if( len > 5 && strcmp(&s[len - 6], "F5-DNA") == 0 ) {
+ type = eAbisolidReadType_F5_DNA;
+ } else if( len > 5 && strcmp(&s[len - 6], "F3-DNA") == 0 ) {
+ type = eAbisolidReadType_F3_DNA;
} else {
int i;
for(i = 0; i < len; i++) {
diff --git a/tools/sra-load/writer-absolid.h b/tools/sra-load/writer-absolid.h
index 74bdcf7..220a990 100644
--- a/tools/sra-load/writer-absolid.h
+++ b/tools/sra-load/writer-absolid.h
@@ -46,7 +46,10 @@ typedef enum EAbisolidReadType_enum {
eAbisolidReadType_F3 = 2,
eAbisolidReadType_R3 = 3,
eAbisolidReadType_F5_P2 = 4,
- eAbisolidReadType_F5_BC = 5
+ eAbisolidReadType_F5_BC = 5,
+ eAbisolidReadType_F5_RNA = 6,
+ eAbisolidReadType_F5_DNA = 7,
+ eAbisolidReadType_F3_DNA = 8
} EAbisolidReadType;
extern const int AbisolidReadType2ReadNumber [];
diff --git a/tools/sra-pileup/Makefile b/tools/sra-pileup/Makefile
new file mode 100644
index 0000000..2eb89fa
--- /dev/null
+++ b/tools/sra-pileup/Makefile
@@ -0,0 +1,152 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/sra-pileup
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+ sra-pileup \
+ sam-dump
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# sra-pileup
+#
+TOOL_SRC = \
+ cmdline_cmn \
+ reref \
+ sra-pileup
+
+TOOL_OBJ = \
+ $(addsuffix .$(OBJX),$(TOOL_SRC))
+
+TOOL_LIB = \
+ -lkapp \
+ -lalign-reader \
+ $(READONLY_SCHEMA_LIBS) \
+ -lsraschema \
+ -lvdb \
+ -lkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lksrch \
+ -lkproc \
+ -lklib \
+ -lm
+
+$(BINDIR)/sra-pileup: $(TOOL_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(TOOL_LIB)
+
+#-------------------------------------------------------------------------------
+# sam-dump
+#
+SAMDUMP3_SRC = \
+ inputfiles \
+ sam-dump-opts \
+ out_redir \
+ sam-hdr \
+ matecache \
+ read_fkt \
+ sam-aligned \
+ sam-unaligned \
+ cg_tools \
+ sam-dump \
+ sam-dump3
+
+SAMDUMP3_OBJ = \
+ $(addsuffix .$(OBJX),$(SAMDUMP3_SRC))
+
+SAMDUMP3_LIB = \
+ -lkapp \
+ -lalign-reader \
+ $(READONLY_SCHEMA_LIBS) \
+ -lsraschema \
+ -lvdb \
+ -lkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lksrch \
+ -lkproc \
+ -lklib \
+ -lm
+
+$(BINDIR)/sam-dump: $(SAMDUMP3_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SAMDUMP3_LIB)
diff --git a/tools/sra-pileup/cg_tools.c b/tools/sra-pileup/cg_tools.c
new file mode 100644
index 0000000..77b8f78
--- /dev/null
+++ b/tools/sra-pileup/cg_tools.c
@@ -0,0 +1,532 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cg_tools.h"
+#include "debug.h"
+
+#include <klib/printf.h>
+#include <sysalloc.h>
+#include <ctype.h>
+#include <string.h>
+#include <assert.h>
+
+typedef struct CigOps
+{
+ char op;
+ int8_t ref_sign; /* 0;+1;-1; ref_offset = ref_sign * offset */
+ int8_t seq_sign; /* 0;+1;-1; seq_offset = seq_sign * offset */
+ uint32_t oplen;
+} CigOps;
+
+
+static void SetCigOp( CigOps * dst, char op, uint32_t oplen )
+{
+ dst->op = op;
+ dst->oplen = oplen;
+ switch( op )
+ { /*MX= DN B IS PH*/
+
+ case 'M' :
+ case 'X' :
+ case '=' : dst->ref_sign = +1;
+ dst->seq_sign = +1;
+ break;
+
+ case 'D' :
+ case 'N' : dst->ref_sign = +1;
+ dst->seq_sign = 0;
+ break;
+
+ case 'B' : dst->ref_sign = -1;
+ dst->seq_sign = 0;
+ break;
+
+ case 'S' :
+ case 'I' : dst->ref_sign = 0;
+ dst->seq_sign = +1;
+ break;
+
+ case 'P' :
+ case 'H' :
+ case 0 : dst->ref_sign= 0; /* terminating op */
+ dst->seq_sign= 0;
+ break;
+
+ default : assert( 0 );
+ break;
+ }
+}
+
+
+static int32_t ExplodeCIGAR( CigOps dst[], uint32_t len, char const cigar[], uint32_t ciglen )
+{
+ uint32_t i;
+ uint32_t j;
+ int32_t opLen;
+
+ for ( i = j = opLen = 0; i < ciglen; ++i )
+ {
+ if ( isdigit( cigar[ i ] ) )
+ {
+ opLen = opLen * 10 + cigar[ i ] - '0';
+ }
+ else
+ {
+ assert( isalpha( cigar[ i ] ) );
+ SetCigOp( dst + j, cigar[ i ], opLen );
+ opLen = 0;
+ j++;
+ }
+ }
+ SetCigOp( dst + j, 0, 0 );
+ j++;
+ return j;
+}
+
+
+typedef struct cgOp_s
+{
+ uint16_t length;
+ uint8_t type; /* 0: match, 1: insert, 2: delete */
+ char code;
+} cgOp;
+
+
+static void print_CG_cigar( int line, cgOp const op[], unsigned const ops, unsigned const gap[ 3 ] )
+{
+#if _DEBUGGING
+ unsigned i;
+
+ SAM_DUMP_DBG( 3, ( "%5i: ", line ) );
+ for ( i = 0; i < ops; ++i )
+ {
+ if ( gap && ( i == gap[ 0 ] || i == gap[ 1 ] || i == gap[ 2 ] ) )
+ {
+ SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, tolower( op[ i ].code ) ) );
+ }
+ else
+ {
+ SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, toupper( op[ i ].code ) ) );
+ }
+ }
+ SAM_DUMP_DBG( 3, ( "\n" ) );
+#endif
+}
+
+
+/* gap contains the indices of the wobbles in op
+ * gap[0] is between read 1 and 2; it is the 'B'
+ * gap[1] is between read 2 and 3; it is an 'N'
+ * gap[2] is between read 3 and 4; it is an 'N'
+ */
+
+typedef struct cg_cigar_temp
+{
+ unsigned gap[ 3 ];
+ cgOp cigOp[ MAX_READ_LEN ];
+ unsigned opCnt;
+ unsigned S_adjust;
+ unsigned CG_adjust;
+} cg_cigar_temp;
+
+
+static rc_t CIGAR_to_CG_Ops( const cg_cigar_input * input,
+ cg_cigar_temp * tmp )
+{
+ unsigned i;
+ unsigned ops = 0;
+ unsigned gapno;
+
+ tmp->opCnt = 0;
+ tmp->S_adjust = 0;
+ for ( i = 0; i < input->cigar_len; ++ops )
+ {
+ char opChar = 0;
+ int opLen = 0;
+ int n;
+
+ for ( n = 0; ( ( n + i ) < input->cigar_len ) && ( isdigit( input->cigar[ n + i ] ) ); n++ )
+ {
+ opLen = opLen * 10 + input->cigar[ n + i ] - '0';
+ }
+
+ if ( ( n + i ) < input->cigar_len )
+ {
+ opChar = input->cigar[ n + i ];
+ n++;
+ }
+
+ if ( ( ops + 1 ) >= MAX_READ_LEN )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+
+ i += n;
+
+ tmp->cigOp[ ops ].length = opLen;
+ tmp->cigOp[ ops ].code = opChar;
+ switch ( opChar )
+ {
+ case 'M' :
+ case '=' :
+ case 'X' : tmp->cigOp[ ops ].type = 0;
+ break;
+
+ case 'S' : tmp->S_adjust += opLen;
+ case 'I' : tmp->cigOp[ ops ].type = 1;
+ tmp->cigOp[ ops ].code = 'I';
+ break;
+
+ case 'D': tmp->cigOp[ ops ].type = 2;
+ break;
+
+ default : return RC( rcExe, rcData, rcReading, rcConstraint, rcViolated );
+ }
+ }
+
+ tmp->opCnt = ops;
+ tmp->gap[ 0 ] = tmp->gap[ 1 ] = tmp->gap[ 2 ] = ops;
+ print_CG_cigar( __LINE__, tmp->cigOp, ops, NULL );
+
+ if ( ops < 3 )
+ return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+
+ {
+ unsigned fwd = 0; /* 5 10 10 10 */
+ unsigned rev = 0; /* 10 10 10 5 */
+ unsigned acc; /* accumulated length */
+
+ if ( ( input->seq_req_id == 1 && !input->orientation ) ||
+ ( input->seq_req_id == 2 && input->orientation ) )
+ {
+ for ( i = 0, acc = 0; i < ops && acc <= 5; ++i )
+ {
+ if ( tmp->cigOp[ i ].type != 2 )
+ {
+ acc += tmp->cigOp[ i ].length;
+ if ( acc == 5 && tmp->cigOp[ i + 1 ].type == 1 )
+ {
+ fwd = i + 1;
+ break;
+ }
+ else if ( acc > 5 )
+ {
+ unsigned const right = acc - 5;
+ unsigned const left = tmp->cigOp[ i ].length - right;
+
+ memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+ ops += 2;
+ tmp->cigOp[ i ].length = left;
+ tmp->cigOp[ i + 2 ].length = right;
+
+ tmp->cigOp[ i + 1 ].type = 1;
+ tmp->cigOp[ i + 1 ].code = 'B';
+ tmp->cigOp[ i + 1 ].length = 0;
+
+ fwd = i + 1;
+ break;
+ }
+ }
+ }
+ }
+ else if ( ( input->seq_req_id == 2 && !input->orientation ) ||
+ ( input->seq_req_id == 1 && input->orientation ) )
+ {
+ for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+ {
+ --i;
+ if ( tmp->cigOp[ i ].type != 2 )
+ {
+ acc += tmp->cigOp[ i ].length;
+ if ( acc == 5 && tmp->cigOp[ i ].type == 1 )
+ {
+ rev = i;
+ break;
+ }
+ else if ( acc > 5 )
+ {
+ unsigned const left = acc - 5;
+ unsigned const right = tmp->cigOp[ i ].length - left;
+
+ memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+ ops += 2;
+ tmp->cigOp[ i ].length = left;
+ tmp->cigOp[ i + 2 ].length = right;
+
+ tmp->cigOp[ i + 1 ].type = 1;
+ tmp->cigOp[ i + 1 ].code = 'B';
+ tmp->cigOp[ i + 1 ].length = 0;
+
+ rev = i + 1;
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ /* fprintf(stderr, "guessing layout\n"); */
+ for ( i = 0, acc = 0; i < ops && acc <= 5; ++i )
+ {
+ if ( tmp->cigOp[ i ].type != 2 )
+ {
+ acc += tmp->cigOp[ i ].length;
+ if ( acc == 5 && tmp->cigOp[ i + 1 ].type == 1 )
+ {
+ fwd = i + 1;
+ }
+ }
+ }
+ for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+ {
+ --i;
+ if ( tmp->cigOp[ i ].type != 2 )
+ {
+ acc += tmp->cigOp[ i ].length;
+ if ( acc == 5 && tmp->cigOp[i].type == 1 )
+ {
+ rev = i;
+ }
+ }
+ }
+ if ( ( fwd == 0 && rev == 0 ) || ( fwd != 0 && rev != 0 ) )
+ {
+ for ( i = 0; i < ops; ++i )
+ {
+ if ( tmp->cigOp[ i ].type == 2 )
+ {
+ tmp->cigOp[ i ].code = 'N';
+ tmp->CG_adjust += tmp->cigOp[ i ].length;
+ }
+ }
+ return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+ }
+ }
+ if ( fwd && tmp->cigOp[ fwd ].type == 1 )
+ {
+ for ( i = ops, acc = 0; i > fwd + 1; )
+ {
+ --i;
+ if ( tmp->cigOp[ i ].type != 2 )
+ {
+ acc += tmp->cigOp[ i ].length;
+ if ( acc >= 10 )
+ {
+ if ( acc > 10 )
+ {
+ unsigned const r = 10 + tmp->cigOp[ i ].length - acc;
+ unsigned const l = tmp->cigOp[ i ].length - r;
+
+ if ( ops + 2 >= MAX_READ_LEN )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+ ops += 2;
+ tmp->cigOp[ i + 2 ].length = r;
+ tmp->cigOp[ i ].length = l;
+
+ tmp->cigOp[ i + 1 ].length = 0;
+ tmp->cigOp[ i + 1 ].type = 2;
+ tmp->cigOp[ i + 1 ].code = 'N';
+ i += 2;
+ }
+ else if ( i - 1 > fwd )
+ {
+ if ( tmp->cigOp[ i - 1 ].type == 2 )
+ tmp->cigOp[ i - 1 ].code = 'N';
+ else
+ {
+ if ( ops + 1 >= MAX_READ_LEN )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &tmp->cigOp[ i + 1 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+ ops += 1;
+ tmp->cigOp[ i ].length = 0;
+ tmp->cigOp[ i ].type = 2;
+ tmp->cigOp[ i ].code = 'N';
+ i += 1;
+ }
+ }
+ acc = 0;
+ }
+ }
+ }
+ /** change I to B+M **/
+ tmp->cigOp[ fwd ].code = 'B';
+ memmove( &tmp->cigOp[ fwd + 1 ], &tmp->cigOp[ fwd ], ( ops - fwd ) * sizeof( tmp->cigOp[ 0 ] ) );
+ ops += 1;
+ tmp->cigOp[ fwd + 1 ].code = 'M';
+ tmp->opCnt = ops;
+ /** set the gaps now **/
+ for ( gapno = 3, i = ops; gapno > 1 && i > 0; )
+ {
+ --i;
+ if ( tmp->cigOp[ i ].code == 'N' )
+ tmp->gap[ --gapno ] = i;
+ }
+ tmp->gap[ 0 ] = fwd;
+ print_CG_cigar( __LINE__, tmp->cigOp, ops, tmp->gap );
+ return 0;
+ }
+ if ( rev && tmp->cigOp[ rev ].type == 1 )
+ {
+ for ( acc = i = 0; i < rev; ++i )
+ {
+ if ( tmp->cigOp[ i ].type != 2 )
+ {
+ acc += tmp->cigOp[ i ].length;
+ if ( acc >= 10 )
+ {
+ if ( acc > 10 )
+ {
+ unsigned const l = 10 + tmp->cigOp[ i ].length - acc;
+ unsigned const r = tmp->cigOp[ i ].length - l;
+
+ if ( ops + 2 >= MAX_READ_LEN )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+ ops += 2;
+ tmp->cigOp[ i + 2 ].length = r;
+ tmp->cigOp[ i ].length = l;
+
+ tmp->cigOp[ i + 1 ].length = 0;
+ tmp->cigOp[ i + 1 ].type = 2;
+ tmp->cigOp[ i + 1 ].code = 'N';
+ rev += 2;
+ i += 2;
+ }
+ else if ( i + 1 < rev )
+ {
+ if ( tmp->cigOp[ i + 1 ].type == 2 )
+ tmp->cigOp[ i + 1 ].code = 'N';
+ else
+ {
+ if ( ops + 1 >= MAX_READ_LEN )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &tmp->cigOp[ i + 1 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+ ops += 1;
+ tmp->cigOp[ i + 1 ].length = 0;
+ tmp->cigOp[ i + 1 ].type = 2;
+ tmp->cigOp[ i + 1 ].code = 'N';
+ rev += 1;
+ i += 1;
+ }
+ }
+ acc = 0;
+ }
+ }
+ }
+ for ( gapno = 3, i = 0; gapno > 1 && i < ops; ++i )
+ {
+ if ( tmp->cigOp[ i ].code == 'N' )
+ tmp->gap[ --gapno ] = i;
+ }
+ tmp->gap[ 0 ] = rev;
+ tmp->cigOp[ rev ].code = 'B';
+ memmove( &tmp->cigOp[ rev + 1 ], &tmp->cigOp[ rev ], ( ops - rev ) * sizeof( tmp->cigOp[ 0 ] ) );
+ ops += 1;
+ tmp->cigOp[ rev + 1 ].code = 'M';
+ tmp->opCnt = ops;
+ print_CG_cigar( __LINE__, tmp->cigOp, ops, tmp->gap );
+ return 0;
+ }
+ }
+ return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+}
+
+
+static rc_t adjust_cigar( const cg_cigar_input * input, cg_cigar_temp * tmp, cg_cigar_output * output )
+{
+ rc_t rc = 0;
+ unsigned i, j;
+ size_t sz;
+
+ print_CG_cigar( __LINE__, tmp->cigOp, tmp->opCnt, NULL );
+
+ /* remove zero length ops */
+ for ( j = i = 0; i < tmp->opCnt; )
+ {
+ if ( tmp->cigOp[ j ].length == 0 )
+ {
+ ++j;
+ --(tmp->opCnt);
+ continue;
+ }
+ tmp->cigOp[ i++ ] = tmp->cigOp[ j++ ];
+ }
+
+ print_CG_cigar( __LINE__, tmp->cigOp, tmp->opCnt, NULL );
+
+ if ( input->edit_dist_available )
+ {
+ int const adjusted = input->edit_dist + tmp->S_adjust - tmp->CG_adjust;
+ output->edit_dist = adjusted > 0 ? adjusted : 0;
+ SAM_DUMP_DBG( 4, ( "NM: before: %u, after: %u(+%u-%u)\n", input->edit_dist, output->edit_dist, tmp->S_adjust, tmp->CG_adjust ) );
+ }
+ else
+ {
+ output->edit_dist = input->edit_dist;
+ }
+
+ /* merge adjacent ops */
+ for ( i = tmp->opCnt; i > 1; )
+ {
+ --i;
+ if ( tmp->cigOp[ i - 1 ].code == tmp->cigOp[ i ].code )
+ {
+ tmp->cigOp[ i - 1 ].length += tmp->cigOp[ i ].length;
+ memmove( &tmp->cigOp[ i ], &tmp->cigOp[ i + 1 ], ( tmp->opCnt - 1 - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+ --(tmp->opCnt);
+ }
+ }
+ print_CG_cigar( __LINE__, tmp->cigOp, tmp->opCnt, NULL );
+ for ( i = j = 0; i < tmp->opCnt && rc == 0; ++i )
+ {
+ rc = string_printf( &output->cigar[ j ], sizeof( output->cigar ) - j, &sz, "%u%c", tmp->cigOp[ i ].length, tmp->cigOp[ i ].code );
+ j += sz;
+ }
+ output->cigar_len = j;
+ return rc;
+}
+
+
+rc_t make_cg_cigar( const cg_cigar_input * input, cg_cigar_output * output )
+{
+ rc_t rc;
+ cg_cigar_temp tmp;
+ memset( &tmp, 0, sizeof tmp );
+
+ rc = CIGAR_to_CG_Ops( input, &tmp );
+ if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+ {
+ memmove( &output->cigar[ 0 ], &input->cigar[ 0 ], input->cigar_len );
+ output->cigar_len = input->cigar_len;
+ output->cigar[ output->cigar_len ] = 0;
+ output->edit_dist = input->edit_dist;
+ rc = 0;
+ }
+ else if ( rc == 0 )
+ {
+ rc = adjust_cigar( input, &tmp, output );
+ }
+ return rc;
+}
diff --git a/tools/sra-pileup/cg_tools.h b/tools/sra-pileup/cg_tools.h
new file mode 100644
index 0000000..bf40134
--- /dev/null
+++ b/tools/sra-pileup/cg_tools.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cgtools_
+#define _h_cgtools_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/rc.h>
+
+#define MAX_CG_CIGAR_LEN ( ( 11 * 35 ) + 1 )
+#define MAX_GC_LEN ( ( 11 * 3 ) + 1 )
+#define MAX_READ_LEN ( 35 )
+
+typedef struct cg_cigar_input
+{
+ const char *cigar;
+ size_t cigar_len;
+ bool orientation;
+ uint32_t seq_req_id;
+ bool edit_dist_available;
+ int32_t edit_dist;
+} cg_cigar_input;
+
+
+typedef struct cg_cigar_output
+{
+ char cigar[ MAX_CG_CIGAR_LEN ];
+ size_t cigar_len;
+ int32_t edit_dist;
+} cg_cigar_output;
+
+
+rc_t make_cg_cigar( const cg_cigar_input * input, cg_cigar_output * output );
+
+#endif
\ No newline at end of file
diff --git a/tools/sra-pileup/cmdline_cmn.c b/tools/sra-pileup/cmdline_cmn.c
new file mode 100644
index 0000000..6ee4088
--- /dev/null
+++ b/tools/sra-pileup/cmdline_cmn.c
@@ -0,0 +1,1042 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cmdline_cmn.h"
+
+#include <kapp/args.h>
+
+#include <vdb/report.h> /* ReportResetTable */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+
+#include <sra/srapath.h>
+
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+const char * ref_usage[] = { "Filter by position on genome.",
+ "Name can either be file specific name",
+ "(ex: \"chr1\" or \"1\").",
+ "\"from\" and \"to\" are 1-based coordinates",
+ NULL };
+
+const char * outf_usage[] = { "Output will be written to this file",
+ "instead of std-out", NULL };
+
+const char * table_usage[] = { "Which alignment table(s) to use (p|s|e):",
+ "p - primary, s - secondary, e - evidence-interval",
+ "(default = p)", NULL };
+
+const char * gzip_usage[] = { "Compress output using gzip", NULL };
+
+const char * bzip_usage[] = { "Compress output using bzip2", NULL };
+
+const char * inf_usage[] = { "File with all input-parameters / options", NULL };
+
+const char * schema_usage[] = { "optional schema-file to be used", NULL };
+
+#define OPTION_REF "aligned-region"
+#define ALIAS_REF "r"
+
+#define OPTION_OUTF "outfile"
+#define ALIAS_OUTF "o"
+
+#define OPTION_TABLE "table"
+#define ALIAS_TABLE "t"
+
+#define OPTION_GZIP "gzip"
+#define ALIAS_GZIP NULL
+
+#define OPTION_BZIP "bzip2"
+#define ALIAS_BZIP NULL
+
+#define OPTION_INF "infile"
+#define ALIAS_INF "f"
+
+#define OPTION_SCHEMA "schema"
+#define ALIAS_SCHEMA "S"
+
+OptDef CommonOptions[] =
+{
+ /*name, alias, hfkt, usage-help, maxcount, needs value, required */
+ { OPTION_REF, ALIAS_REF, NULL, ref_usage, 0, true, false },
+ { OPTION_OUTF, ALIAS_OUTF, NULL, outf_usage, 1, true, false },
+ { OPTION_TABLE, ALIAS_TABLE, NULL, table_usage, 1, true, false },
+ { OPTION_GZIP, ALIAS_GZIP, NULL, gzip_usage, 1, false, false },
+ { OPTION_BZIP, ALIAS_BZIP, NULL, bzip_usage, 1, false, false },
+ { OPTION_INF, ALIAS_INF, NULL, inf_usage, 0, true, false },
+ { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 1, true, false }
+};
+
+
+/* =========================================================================================== */
+
+static rc_t get_str_option( const Args *args, const char *name, const char ** res )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, name, &count );
+ *res = NULL;
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+ }
+ else
+ {
+ if ( count > 0 )
+ {
+ rc = ArgsOptionValue( args, name, 0, res );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t get_bool_option( const Args *args, const char *name, bool *res, const bool def )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, name, &count );
+ if ( rc == 0 && count > 0 )
+ {
+ *res = true;
+ }
+ else
+ {
+ *res = def;
+ }
+ return rc;
+}
+
+/* =========================================================================================== */
+
+rc_t get_common_options( Args * args, common_options *opts )
+{
+ rc_t rc = get_str_option( args, OPTION_OUTF, &opts->output_file );
+
+ if ( rc == 0 )
+ rc = get_str_option( args, OPTION_INF, &opts->input_file );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_GZIP, &opts->gzip_output, false );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_BZIP, &opts->bzip_output, false );
+
+ if ( rc == 0 )
+ rc = get_str_option( args, OPTION_SCHEMA, &opts->schema_file );
+
+ if ( rc == 0 )
+ {
+ const char * table2use = NULL;
+ rc = get_str_option( args, OPTION_TABLE, &table2use );
+ opts->tab_select = primary_ats;
+ if ( rc == 0 && table2use != NULL )
+ {
+ size_t l = string_size ( table2use );
+ opts->tab_select = 0;
+ if ( ( string_chr ( table2use, l, 'p' ) != NULL )||
+ ( string_chr ( table2use, l, 'P' ) != NULL ) )
+ { opts->tab_select |= primary_ats; };
+
+ if ( ( string_chr ( table2use, l, 's' ) != NULL )||
+ ( string_chr ( table2use, l, 'S' ) != NULL ) )
+ { opts->tab_select |= secondary_ats; };
+
+ if ( ( string_chr ( table2use, l, 'e' ) != NULL )||
+ ( string_chr ( table2use, l, 'E' ) != NULL ) )
+ { opts->tab_select |= evidence_ats; };
+ }
+ }
+
+ return rc;
+}
+
+void print_common_helplines( void )
+{
+ HelpOptionLine ( ALIAS_REF, OPTION_REF, "name[:from-to]", ref_usage );
+ HelpOptionLine ( ALIAS_OUTF, OPTION_OUTF, "output-file", outf_usage );
+ HelpOptionLine ( ALIAS_TABLE, OPTION_TABLE, "table", table_usage );
+ HelpOptionLine ( ALIAS_BZIP, OPTION_BZIP, "bzip", bzip_usage );
+ HelpOptionLine ( ALIAS_GZIP, OPTION_GZIP, "gzip", gzip_usage );
+}
+
+
+OptDef * CommonOptions_ptr( void )
+{
+ return &CommonOptions[ 0 ];
+}
+
+size_t CommonOptions_count( void )
+{
+ return ( sizeof CommonOptions / sizeof CommonOptions [ 0 ] );
+}
+
+
+/* =========================================================================================== */
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+ int res = 0;
+ if ( ( a != NULL )&&( b != NULL ) )
+ {
+ size_t len_a = string_size( a );
+ size_t len_b = string_size( b );
+ res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+ }
+ return res;
+}
+
+
+/* =========================================================================================== */
+
+
+typedef struct range
+{
+ uint32_t start;
+ uint32_t end;
+} range;
+
+
+static range * make_range( const uint64_t start, const uint64_t end )
+{
+ range *res = calloc( sizeof *res, 1 );
+ if ( res != NULL )
+ {
+ res->start = start;
+ res->end = end;
+ }
+ return res;
+}
+
+
+static int cmp_range( const range * a, const range * b )
+{
+
+ int res = ( a->start - b->start );
+ if ( res == 0 )
+ res = ( a->end - b->end );
+ return res;
+}
+
+
+static bool range_overlapp( const range * a, const range * b )
+{
+ return ( !( ( b->end < a->start ) || ( b->start > a->end ) ) );
+}
+
+
+/* =========================================================================================== */
+
+typedef struct reference_region
+{
+ BSTNode node;
+ const char * name;
+ Vector ranges;
+} reference_region;
+
+
+static reference_region * make_reference_region( const char *name )
+{
+ reference_region *res = calloc( sizeof *res, 1 );
+ if ( res != NULL )
+ {
+ res->name = string_dup_measure ( name, NULL );
+ VectorInit ( &res->ranges, 0, 5 );
+ }
+ return res;
+}
+
+
+static int CC cmp_range_wrapper( const void *item, const void *n )
+{ return cmp_range( item, n ); }
+
+
+static rc_t add_ref_region_range( reference_region * self, const uint64_t start, const uint64_t end )
+{
+ rc_t rc = 0;
+ range *r = make_range( start, end );
+ if ( r == NULL )
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = VectorInsert ( &self->ranges, r, NULL, cmp_range_wrapper );
+ if ( rc != 0 )
+ free( r );
+ }
+ return rc;
+}
+
+
+#define RR_NAME 1
+#define RR_START 2
+#define RR_END 3
+
+
+static void put_c( char *s, size_t size, size_t *dst, char c )
+{
+ if ( *dst < ( size - 1 ) )
+ s[ *dst ] = c;
+ (*dst)++;
+}
+
+static void finish_txt( char *s, size_t size, size_t *dst )
+{
+ if ( *dst > size )
+ s[ size - 1 ] = 0;
+ else
+ s[ *dst ] = 0;
+ *dst = 0;
+}
+
+static uint64_t finish_num( char *s, size_t size, size_t *dst )
+{
+ uint64_t res = 0;
+ char *endp;
+ finish_txt( s, size, dst );
+ res = strtou64( s, &endp, 10 );
+ return res;
+}
+
+
+/* s = refname:1000-2000 */
+static void parse_definition( const char *s, char * name, size_t len,
+ uint64_t *start, uint64_t *end )
+{
+ size_t n = string_size( s );
+
+ *start = 0;
+ *end = 0;
+ name[ 0 ] = 0;
+ if ( n > 0 )
+ {
+ size_t i, st, dst = 0;
+ char tmp[ 32 ];
+ st = RR_NAME;
+ for ( i = 0; i < n; ++i )
+ {
+ char c = s[ i ];
+ switch( st )
+ {
+ case RR_NAME : if ( c == ':' )
+ {
+ finish_txt( name, len, &dst );
+ st = RR_START;
+ }
+ else
+ {
+ put_c( name, len, &dst, c );
+ }
+ break;
+
+ case RR_START : if ( c == '-' )
+ {
+ *start = finish_num( tmp, sizeof tmp, &dst );
+ st = RR_END;
+ }
+ else if ( ( c >= '0' )&&( c <= '9' ) )
+ {
+ put_c( tmp, sizeof tmp, &dst, c );
+ }
+ break;
+
+ case RR_END : if ( ( c >= '0' )&&( c <= '9' ) )
+ {
+ put_c( tmp, sizeof tmp, &dst, c );
+ }
+ break;
+ }
+ }
+ switch( st )
+ {
+ case RR_NAME : finish_txt( name, len, &dst );
+ break;
+
+ case RR_START : *start = finish_num( tmp, sizeof tmp, &dst );
+ break;
+
+ case RR_END : *end = finish_num( tmp, sizeof tmp, &dst );
+ break;
+ }
+ }
+}
+
+
+static void CC release_range_wrapper( void * item, void * data )
+{
+ free( item );
+}
+
+
+static void free_reference_region( reference_region * self )
+{
+ free( (void*)self->name );
+ VectorWhack ( &self->ranges, release_range_wrapper, NULL );
+ free( self );
+}
+
+
+static void check_ref_region_ranges( reference_region * self )
+{
+ uint32_t n = VectorLength( &self->ranges );
+ uint32_t i = 0;
+ range *a = NULL;
+ while ( i < n )
+ {
+ range *b = VectorGet ( &self->ranges, i );
+ bool remove = false;
+ if ( a != NULL )
+ {
+ remove = range_overlapp( a, b );
+ if ( remove )
+ {
+ range *r;
+ a->end = b->end;
+ VectorRemove ( &self->ranges, i, (void**)&r );
+ free( r );
+ n--;
+ }
+ }
+ if ( !remove )
+ {
+ a = b;
+ ++i;
+ }
+ }
+}
+
+
+/* =========================================================================================== */
+
+
+static int CC reference_vs_pchar_wrapper( const void *item, const BSTNode *n )
+{
+ const reference_region * r = ( const reference_region * )n;
+ return cmp_pchar( (const char *)item, r->name );
+}
+
+static reference_region * find_reference_region( BSTree * regions, const char * name )
+{
+ return ( reference_region * ) BSTreeFind ( regions, name, reference_vs_pchar_wrapper );
+}
+
+static int CC ref_vs_ref_wrapper( const BSTNode *item, const BSTNode *n )
+{
+ const reference_region * a = ( const reference_region * )item;
+ const reference_region * b = ( const reference_region * )n;
+ return cmp_pchar( a->name, b->name );
+}
+
+static rc_t add_refrange( BSTree * regions, const char * name, const uint64_t start, const uint64_t end )
+{
+ rc_t rc;
+
+ reference_region * r = find_reference_region( regions, name );
+ if ( r == NULL )
+ {
+ r = make_reference_region( name );
+ if ( r == NULL )
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ else
+ rc = add_ref_region_range( r, start, end );
+ if ( rc == 0 )
+ rc = BSTreeInsert ( regions, (BSTNode *)r, ref_vs_ref_wrapper );
+ if ( rc != 0 )
+ free_reference_region( r );
+ }
+ else
+ {
+ rc = add_ref_region_range( r, start, end );
+ }
+ return rc;
+}
+
+
+rc_t parse_and_add_region( BSTree * regions, const char * s )
+{
+ uint64_t start, end;
+ char name[ 64 ];
+ parse_definition( s, name, sizeof name, &start, &end );
+ if ( name[ 0 ] == 0 )
+ return RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ else
+ return add_refrange( regions, name, start, end );
+}
+
+
+static void CC check_refrange_wrapper( BSTNode *n, void *data )
+{
+ check_ref_region_ranges( ( reference_region * ) n );
+}
+
+
+void check_ref_regions( BSTree * regions )
+{
+ BSTreeForEach ( regions, false, check_refrange_wrapper, NULL );
+}
+
+
+static void CC release_ref_region_wrapper( BSTNode *n, void * data )
+{
+ free_reference_region( ( reference_region * ) n );
+}
+
+
+void free_ref_regions( BSTree * regions )
+{
+ BSTreeWhack ( regions, release_ref_region_wrapper, NULL );
+}
+
+
+rc_t init_ref_regions( BSTree * tree, Args * args )
+{
+ uint32_t count;
+ rc_t rc;
+
+ BSTreeInit( tree );
+ rc = ArgsOptionCount( args, OPTION_REF, &count );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+ }
+ else
+ {
+ uint32_t i;
+ for ( i = 0; i < count && rc == 0; ++i )
+ {
+ const char * s;
+ rc = ArgsOptionValue( args, OPTION_REF, i, &s );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+ else
+ rc = parse_and_add_region( tree, s );
+ }
+ }
+ return rc;
+}
+
+
+static void CC count_ref_region_wrapper( BSTNode *n, void *data )
+{
+ reference_region * r = ( reference_region * ) n;
+ uint32_t * count = ( uint32_t * ) data;
+ *count += VectorLength( &(r->ranges) );
+}
+
+
+uint32_t count_ref_regions( BSTree * regions )
+{
+ uint32_t res = 0;
+ BSTreeForEach ( regions, false, count_ref_region_wrapper, &res );
+ return res;
+}
+
+
+typedef struct foreach_ref_region_func
+{
+ rc_t ( CC * on_region ) ( const char * name, uint32_t start, uint32_t end, void *data );
+ const char * name;
+ void * data;
+ rc_t rc;
+} foreach_ref_region_func;
+
+
+static void CC foreach_range_vector_wrapper( void *item, void *data )
+{
+ range * r = ( range * ) item;
+ foreach_ref_region_func * func = ( foreach_ref_region_func * )data;
+
+ if ( func->rc == 0 )
+ {
+ func->rc = func->on_region( func->name, r->start, r->end, func->data );
+ }
+}
+
+
+static void CC foreach_ref_region_wrapper( BSTNode *n, void *data )
+{
+ reference_region * r = ( reference_region * ) n;
+ foreach_ref_region_func * func = ( foreach_ref_region_func * )data;
+
+ if ( func->rc == 0 )
+ {
+ func->name = r->name;
+ VectorForEach ( &(r->ranges), false, foreach_range_vector_wrapper, data );
+ }
+}
+
+
+rc_t foreach_ref_region( BSTree * regions,
+ rc_t ( CC * on_region ) ( const char * name, uint32_t start, uint32_t end, void *data ),
+ void *data )
+{
+ foreach_ref_region_func func;
+
+ func.on_region = on_region;
+ func.data = data;
+ func.rc = 0;
+ BSTreeForEach ( regions, false, foreach_ref_region_wrapper, &func );
+ return func.rc;
+}
+
+
+/* =========================================================================================== */
+
+#if TOOLS_USE_SRAPATH != 0
+static bool is_this_a_filesystem_path( const char * path )
+{
+ bool res = false;
+ size_t i, n = string_size ( path );
+ for ( i = 0; i < n && !res; ++i )
+ {
+ char c = path[ i ];
+ res = ( c == '.' || c == '/' || c == '\\' );
+ }
+ return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static char *translate_accession( SRAPath *my_sra_path,
+ const char *accession,
+ const size_t bufsize )
+{
+ rc_t rc;
+ char * res = calloc( 1, bufsize );
+ if ( res == NULL ) return NULL;
+
+ rc = SRAPathFind( my_sra_path, accession, res, bufsize );
+ if ( GetRCState( rc ) == rcNotFound )
+ {
+ free( res );
+ return NULL;
+ }
+ else if ( GetRCState( rc ) == rcInsufficient )
+ {
+ free( res );
+ return translate_accession( my_sra_path, accession, bufsize * 2 );
+ }
+ else if ( rc != 0 )
+ {
+ free( res );
+ return NULL;
+ }
+ return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static rc_t resolve_accession( const KDirectory *my_dir, char ** path )
+{
+ SRAPath *my_sra_path;
+ rc_t rc = 0;
+
+ if ( strchr ( *path, '/' ) != NULL )
+ return 0;
+
+ rc = SRAPathMake( &my_sra_path, my_dir );
+ if ( rc != 0 )
+ {
+ if ( GetRCState ( rc ) != rcNotFound || GetRCTarget ( rc ) != rcDylib )
+ {
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "SRAPathMake() failed" );
+ }
+ }
+ else
+ rc = 0;
+ }
+ else
+ {
+ if ( !SRAPathTest( my_sra_path, *path ) )
+ {
+ char *buf = translate_accession( my_sra_path, *path, 64 );
+ if ( buf != NULL )
+ {
+ free( (char*)(*path) );
+ *path = buf;
+ }
+ }
+ SRAPathRelease( my_sra_path );
+ }
+ return rc;
+}
+#endif
+
+
+/* =========================================================================================== */
+
+
+/****************************************************************************************
+ splits an argument
+
+ example: "/path/file=grp1" into path = "/path/file" and attribute = "grp1"
+ or
+ example: "/path/file" into path = "/path/file" and attribute = NULL
+
+****************************************************************************************/
+static rc_t split_argument( const char *argument, char ** path, char ** attribute, char delim )
+{
+ if ( argument == NULL || path == NULL || attribute == NULL )
+ return RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcNull );
+ else
+ {
+ char * delim_ptr = string_chr ( argument, string_size ( argument ), delim );
+ if ( delim_ptr == NULL )
+ {
+ *path = string_dup_measure( argument, NULL );
+ *attribute = NULL;
+ }
+ else
+ {
+ size_t len = string_size( argument );
+ size_t len1 = ( delim_ptr - argument );
+ *path = string_dup ( argument, len1 );
+ if ( delim_ptr < argument + len - 1 )
+ *attribute = string_dup ( delim_ptr + 1, len - ( len1 + 1 ) );
+ else
+ *attribute = NULL;
+ }
+ }
+ return 0;
+}
+
+
+static rc_t split_vpath_into_path_and_readgroup( VPath *vpath, const char *argument, char ** path, char ** attribute )
+{
+ size_t zz;
+ char readgroup_buffer[ 256 ];
+ rc_t rc1 = VPathOption( vpath, vpopt_readgroup, readgroup_buffer, sizeof readgroup_buffer - 1, &zz );
+ if ( rc1 == 0 )
+ *attribute = string_dup( readgroup_buffer, zz );
+ *path = string_dup( argument, string_size( argument ) );
+ return 0;
+}
+
+
+static rc_t test_split_vpath_into_path_and_readgroup( VPath *vpath, const char *argument, char ** path, char ** attribute )
+{
+ rc_t rc = 0;
+ VPUri_t uri_type = VPathGetUri_t( vpath );
+ switch ( uri_type )
+ {
+ default:
+ case vpuri_invalid:
+ rc = RC( rcExe, rcParam, rcAccessing, rcPath, rcInvalid );
+ break;
+
+ case vpuri_not_supported:
+ rc = RC( rcExe, rcParam, rcAccessing, rcPath, rcUnsupported );
+ break;
+
+ case vpuri_none:
+ rc = split_argument( argument, path, attribute, '=' );
+ break;
+
+ case vpuri_ncbi_vfs:
+ case vpuri_file:
+ case vpuri_ncbi_acc:
+ case vpuri_http:
+ rc = split_vpath_into_path_and_readgroup( vpath, argument, path, attribute );
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t split_argument_into_path_and_readgroup( const char *argument, char ** path, char ** attribute )
+{
+ rc_t rc;
+ char * colon_ptr = string_chr ( argument, string_size ( argument ), ':' );
+ if ( colon_ptr == NULL )
+ {
+ /* we do not have a colon in the argument, that means: there is no uri-syntax involved
+ ---> we can split the "old fashioned way" at the equal-sign */
+ rc = split_argument( argument, path, attribute, '=' );
+ }
+ else
+ {
+ VPath * vpath;
+ rc_t rc = VPathMake( &vpath, argument );
+ *path = NULL;
+ *attribute = NULL;
+
+ if ( rc == 0 )
+ {
+ rc = test_split_vpath_into_path_and_readgroup( vpath, argument, path, attribute );
+ VPathRelease( vpath );
+ }
+ }
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+rc_t foreach_argument( Args * args, KDirectory *dir, bool div_by_spotgrp, bool * empty,
+ rc_t ( CC * on_argument ) ( const char * path, const char * spot_group, void * data ), void * data )
+{
+ uint32_t count;
+ rc_t rc = ArgsParamCount( args, &count );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+ }
+ else
+ {
+ uint32_t idx;
+ if ( empty != NULL )
+ {
+ *empty = ( count == 0 );
+ }
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ const char *param = NULL;
+ rc = ArgsParamValue( args, idx, ¶m );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+ }
+ else
+ {
+
+ char * path = NULL;
+ char * spot_group = NULL;
+
+ rc = split_argument_into_path_and_readgroup( param, &path, &spot_group );
+ if ( rc == 0 && path != NULL )
+ {
+ /* in case there is no spotgroup-override from the commandline AND
+ the option to divide by spot-group is set, let spot_group point
+ to an empty string ---> divide by original spot-group! */
+ if ( spot_group == NULL && div_by_spotgrp )
+ {
+ spot_group = calloc( 1, 1 );
+ }
+
+#if TOOLS_USE_SRAPATH != 0
+ if ( !is_this_a_filesystem_path( path ) )
+ {
+ rc = resolve_accession( dir, &path );
+ }
+#endif
+
+ if ( rc == 0 )
+ {
+ rc = on_argument( path, spot_group, data );
+ }
+
+ free( path );
+ if ( spot_group != NULL )
+ free( spot_group );
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t prepare_whole_file( prepare_ctx * ctx )
+{
+ rc_t rc = 0;
+ if ( ctx->reflist != NULL )
+ {
+ uint32_t count;
+ rc = ReferenceList_Count( ctx->reflist, &count );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ReferenceList_Count() failed" );
+ }
+ else
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ rc = ReferenceList_Get( ctx->reflist, &ctx->refobj, idx );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ReferenceList_Get() failed" );
+ }
+ else
+ {
+ rc = ctx->on_section( ctx, 0, 0 );
+ if ( rc == 0 )
+ ReferenceObj_Release( ctx->refobj );
+ }
+ }
+ }
+ }
+ else
+ {
+ ctx->refobj = NULL;
+ rc = ctx->on_section( ctx, 0, 0 );
+ }
+ return rc;
+}
+
+
+static rc_t CC prepare_region_cb( const char * name, uint32_t start, uint32_t end, void * data )
+{
+ prepare_ctx * ctx = ( prepare_ctx * )data;
+ rc_t rc = ReferenceList_Find( ctx->reflist, &ctx->refobj, name, string_size( name ) );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ReferenceList_Find() failed" );
+ }
+ else
+ {
+ rc = ctx->on_section( ctx, start, end );
+ if ( rc == 0 )
+ ReferenceObj_Release( ctx->refobj );
+ }
+ return rc;
+}
+
+
+static rc_t prepare_db_table( prepare_ctx *ctx,
+ const VDBManager *vdb_mgr,
+ VSchema *vdb_schema,
+ const char * path )
+{
+ rc_t rc;
+ ctx->db = NULL;
+ ctx->seq_tab = NULL;
+
+ rc = VDBManagerOpenDBRead ( vdb_mgr, &ctx->db, vdb_schema, "%s", path );
+ if ( rc != 0 )
+ {
+ rc = VDBManagerOpenTableRead ( vdb_mgr, &ctx->seq_tab, NULL, "%s", path );
+ if ( rc != 0 )
+ {
+ PLOGERR(klogInt, (klogInt, rc, "failed to open '$(path)'",
+ "path=%s", path));
+ }
+ else {
+ ReportResetTable(path, ctx->seq_tab);
+ }
+ }
+ else
+ {
+ rc = VDatabaseOpenTableRead( ctx->db, &ctx->seq_tab, "SEQUENCE" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VDatabaseOpenTableRead( SEQUENCE ) failed" );
+ }
+ else {
+ ReportResetDatabase(path, ctx->db);
+ }
+ }
+ return rc;
+}
+
+
+static rc_t prepare_reflist( prepare_ctx *ctx )
+{
+ rc_t rc = 0;
+ ctx->reflist = NULL;
+ if ( ctx->db != NULL )
+ {
+ uint32_t reflist_options = ereferencelist_4na;
+
+ if ( ctx->use_primary_alignments )
+ reflist_options |= ereferencelist_usePrimaryIds;
+
+ if ( ctx->use_secondary_alignments )
+ reflist_options |= ereferencelist_useSecondaryIds;
+
+ if ( ctx->use_evidence_alignments )
+ reflist_options |= ereferencelist_useEvidenceIds;
+
+ rc = ReferenceList_MakeDatabase( &ctx->reflist, ctx->db, reflist_options, 0, NULL, 0 );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ReferenceList_MakeDatabase() failed" );
+ }
+ }
+ return rc;
+}
+
+
+rc_t prepare_ref_iter( prepare_ctx *ctx,
+ const VDBManager *vdb_mgr,
+ VSchema *vdb_schema,
+ const char * path,
+ BSTree * regions )
+{
+ rc_t rc = prepare_db_table( ctx, vdb_mgr, vdb_schema, path );
+ if ( rc == 0 )
+ {
+ rc = prepare_reflist( ctx );
+ if( rc == 0 )
+ {
+ if ( ctx->reflist == NULL || count_ref_regions( regions ) == 0 )
+ {
+ /* the user has not specified a reference-range : use the whole file... */
+ rc = prepare_whole_file( ctx );
+ }
+ else
+ {
+ /* pick only the requested ranges... */
+ rc = foreach_ref_region( regions, prepare_region_cb, ctx );
+ }
+ }
+ if ( ctx->reflist != NULL )
+ {
+ ReferenceList_Release( ctx->reflist );
+ }
+ }
+ VTableRelease ( ctx->seq_tab );
+ VDatabaseRelease ( ctx->db );
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+rc_t parse_inf_file( Args * args )
+{
+ return Args_parse_inf_file( args, OPTION_INF );
+}
diff --git a/tools/sra-pileup/cmdline_cmn.h b/tools/sra-pileup/cmdline_cmn.h
new file mode 100644
index 0000000..bb46575
--- /dev/null
+++ b/tools/sra-pileup/cmdline_cmn.h
@@ -0,0 +1,133 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cmdline_cmn_
+#define _h_cmdline_cmn_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <kapp/args.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/vector.h>
+#include <klib/container.h>
+
+#include <kfs/directory.h>
+/* #include <sra/srapath.h> */
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+
+#include <align/iterator.h>
+#include <align/reference.h>
+
+#include <strtol.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+typedef uint8_t align_tab_select;
+enum { primary_ats = 1, secondary_ats = 2, evidence_ats = 4 };
+
+typedef struct common_options
+{
+ bool gzip_output;
+ bool bzip_output;
+ align_tab_select tab_select;
+ const char * output_file;
+ const char * input_file;
+ const char * schema_file;
+} common_options;
+
+
+void print_common_helplines( void );
+
+rc_t get_common_options( Args * args, common_options *opts );
+OptDef * CommonOptions_ptr( void );
+size_t CommonOptions_count( void );
+
+/* get ref-ranges from the command-line and iterate them... */
+rc_t init_ref_regions( BSTree * regions, Args * args );
+uint32_t count_ref_regions( BSTree * regions );
+
+rc_t parse_and_add_region( BSTree * regions, const char * s );
+
+rc_t foreach_ref_region( BSTree * regions,
+ rc_t ( CC * on_range ) ( const char * name, uint32_t start, uint32_t end, void *data ),
+ void *data );
+
+void check_ref_regions( BSTree * regions );
+void free_ref_regions( BSTree * regions );
+
+rc_t foreach_argument( Args * args, KDirectory *dir, bool div_by_spotgrp, bool * empty,
+ rc_t ( CC * on_argument ) ( const char * path, const char * spot_group, void * data ), void * data );
+
+
+typedef struct prepare_ctx
+{
+ ReferenceIterator *ref_iter;
+ PlacementSetIterator *plset_iter;
+ const VDatabase *db;
+ const VTable *seq_tab;
+ const ReferenceList *reflist;
+ const ReferenceObj *refobj;
+ const char * spot_group;
+ bool omit_qualities;
+ bool use_primary_alignments;
+ bool use_secondary_alignments;
+ bool use_evidence_alignments;
+ void * data;
+ rc_t ( CC * on_section ) ( struct prepare_ctx * ctx, uint32_t start, uint32_t end );
+ const char *path;
+} prepare_ctx;
+
+
+
+rc_t prepare_ref_iter( prepare_ctx *ctx,
+ const VDBManager *vdb_mgr,
+ VSchema *vdb_schema,
+ const char * path,
+ BSTree * regions );
+
+rc_t prepare_plset_iter( prepare_ctx *ctx,
+ const VDBManager *vdb_mgr,
+ VSchema *vdb_schema,
+ const char * path,
+ BSTree * ranges );
+
+
+rc_t parse_inf_file( Args * args );
+
+#endif
diff --git a/tools/sra-pileup/debug.h b/tools/sra-pileup/debug.h
new file mode 100644
index 0000000..d1a321b
--- /dev/null
+++ b/tools/sra-pileup/debug.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_sam_dump_debug_h_
+#define _tools_sam_dump_debug_h_
+
+#include <klib/debug.h>
+
+#define SAM_DUMP_DBG_PASTE(a,b) a##b
+#define SAM_DUMP_DBG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(SAM_DUMP_DBG_PASTE(DBG_APP_,flag)), msg)
+
+#endif /* _tools_sam_dump_debug_h_ */
diff --git a/tools/sra-pileup/inputfiles.c b/tools/sra-pileup/inputfiles.c
new file mode 100644
index 0000000..0c8ba0d
--- /dev/null
+++ b/tools/sra-pileup/inputfiles.c
@@ -0,0 +1,376 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "inputfiles.h"
+
+#include <sra/sraschema.h> /* VDBManagerMakeSRASchema */
+#include <vdb/schema.h> /* VSchemaRelease */
+
+#include <kdb/manager.h>
+#include <kfs/file.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+
+static void free_input_database( input_database * id )
+{
+ if ( id->path != NULL ) free( id->path );
+ if ( id->db != NULL ) VDatabaseRelease( id->db );
+ if ( id->reflist != NULL ) ReferenceList_Release( id->reflist );
+ if ( id->prim_ctx != NULL ) free( id->prim_ctx );
+ if ( id->sec_ctx != NULL ) free( id->sec_ctx );
+ if ( id->ev_ctx != NULL ) free( id->ev_ctx );
+ free( id );
+}
+
+
+static void free_input_table( input_table * it )
+{
+ if ( it->path != NULL ) free( it->path );
+ if ( it->tab != NULL ) VTableRelease( it->tab );
+ free( it );
+}
+
+
+static rc_t append_database( input_files *self, const VDatabase * db,
+ const char * path, uint32_t reflist_options, bool show_err )
+{
+ const ReferenceList *reflist;
+ rc_t rc = ReferenceList_MakeDatabase( &reflist, db, reflist_options, 0, NULL, 0 );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot create reflist for '$(t)'", "t=%s", path ) );
+ }
+ else
+ {
+ input_database * id = calloc( sizeof * id, 1 );
+ if ( id == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "cannot create input-database structure" );
+ }
+ else
+ {
+ uint32_t idx;
+
+ id->db = db;
+ id->reflist = reflist;
+ id->path = string_dup( path, string_size( path ) );
+
+ rc = VectorAppend( &self->dbs, &idx, id );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot append db '$(t)' to inputfiles", "t=%s", path ) );
+ free_input_database( id );
+ }
+ else
+ {
+ ++(self->database_count);
+ id->db_idx = idx;
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t append_table( input_files *self, const VTable *tab, const char * path )
+{
+ rc_t rc = 0;
+ input_table * it = calloc( sizeof * it, 1 );
+ if ( it == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "cannot create input-table structure" );
+ }
+ else
+ {
+ it->path = string_dup( path, string_size( path ) );
+ it->tab = tab;
+
+ rc = VectorAppend( &self->tabs, NULL, it );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot append tab '$(t)' to inputfiles", "t=%s", path ) );
+ free_input_table( it );
+ }
+ else
+ {
+ ++(self->table_count);
+ }
+ }
+ return rc;
+}
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+ int res = 0;
+ if ( ( a != NULL )&&( b != NULL ) )
+ {
+ size_t len_a = string_size( a );
+ size_t len_b = string_size( b );
+ res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+ }
+ return res;
+}
+
+
+static rc_t contains_ref_and_alignments( const VDatabase * db, const char * path, bool * res, bool show_err )
+{
+ KNamelist *tables;
+ rc_t rc = VDatabaseListTbl ( db, &tables );
+ if ( rc != 0 )
+ {
+ if ( show_err )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "VDatabaseListTbl() failed on '$(t)'", "t=%s", path ) );
+ }
+ }
+ else
+ {
+ uint32_t count;
+ rc = KNamelistCount ( tables, &count );
+ if ( rc != 0 )
+ {
+ if ( show_err )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "KNamelistCount on Table-Names-List failed on '$(t)'", "t=%s", path ) );
+ }
+ }
+ else
+ {
+ uint32_t idx;
+ bool has_ref = false;
+ bool has_alignment = false;
+ for ( idx = 0; rc == 0 && idx < count; ++idx )
+ {
+ const char * tabname;
+ rc = KNamelistGet ( tables, idx, &tabname );
+ if ( rc != 0 )
+ {
+ if ( show_err )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "KNamelistGet on Table-Names-List failed on '$(t)'", "t=%s", path ) );
+ }
+ }
+ else
+ {
+ if ( cmp_pchar( tabname, "REFERENCE" ) == 0 )
+ has_ref = true;
+ if ( cmp_pchar( tabname, "PRIMARY_ALIGNMENT" ) == 0 )
+ has_alignment = true;
+ }
+ }
+ *res = ( has_ref && has_alignment );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t open_database( input_files *self, const VDBManager *mgr,
+ const char * path, uint32_t reflist_options, bool show_err )
+{
+ const VDatabase * db;
+ rc_t rc = VDBManagerOpenDBRead( mgr, &db, NULL, "%s", path );
+ if ( rc != 0 )
+ {
+ if ( show_err )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open db '$(t)'", "t=%s", path ) );
+ }
+ }
+ else
+ {
+ bool has_alignments = false;
+ rc = contains_ref_and_alignments( db, path, &has_alignments, show_err );
+ if ( rc == 0 )
+ {
+ if ( has_alignments )
+ {
+ rc = append_database( self, db, path, reflist_options, show_err );
+ }
+ else
+ {
+ const VTable *tab;
+ rc = VDatabaseOpenTableRead ( db, &tab, "SEQUENCE" );
+ if ( rc != 0 )
+ {
+ if ( show_err )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open table SEQUENCE for '$(t)'", "t=%s", path ) );
+ }
+ }
+ else
+ {
+ rc = append_table( self, tab, path );
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t open_table( input_files *self, const VDBManager *mgr, const char * path, bool show_error )
+{
+ const VTable * tab;
+
+ rc_t rc = VDBManagerOpenTableRead( mgr, &tab, NULL, "%s", path );
+ if ( rc != 0 )
+ {
+ struct VSchema* schema = NULL;
+ rc = VDBManagerMakeSRASchema( mgr, &schema );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot MakeSRASchema" );
+ }
+ else
+ {
+ rc = VDBManagerOpenTableRead( mgr, &tab, schema, "%s", path );
+ if ( rc != 0 )
+ {
+ if ( show_error )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open tab '$(t)'", "t=%s", path ) );
+ }
+ }
+ VSchemaRelease( schema );
+ }
+ }
+
+ if ( rc == 0 )
+ rc = append_table( self, tab, path );
+
+ return rc;
+}
+
+
+static rc_t is_unknown( input_files *self, const char * path )
+{
+ rc_t rc = VNamelistAppend( self->not_found, path );
+ if ( rc == 0 )
+ ++( self->not_found_count );
+ return rc;
+}
+
+
+static rc_t split_input_files( input_files *self, const VDBManager *mgr,
+ const VNamelist * src, uint32_t reflist_options )
+{
+ uint32_t src_count;
+ rc_t rc = VNameListCount( src, &src_count );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "VNameListCount failed" );
+ }
+ else
+ {
+ uint32_t src_idx;
+ for ( src_idx = 0; src_idx < src_count && rc == 0 ; ++src_idx )
+ {
+ const char * path;
+ rc = VNameListGet( src, src_idx, &path );
+ if ( rc == 0 && path != NULL )
+ {
+ int path_type = VDBManagerPathType ( mgr, path );
+ if ( rc == 0 )
+ {
+ switch( path_type )
+ {
+ case kptDatabase : rc = open_database( self, mgr, path, reflist_options, true ); break;
+
+ case kptPrereleaseTbl :
+ case kptTable : rc = open_table( self, mgr, path, true ); break;
+
+ default : rc = is_unknown( self, path ); break;
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+rc_t discover_input_files( input_files **self, const VDBManager *mgr,
+ const VNamelist * src, uint32_t reflist_options )
+{
+ rc_t rc = 0;
+
+ input_files * ipf = calloc( sizeof * ipf, 1 );
+ *self = NULL;
+ if ( ipf == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "cannot create inputfiles structure" );
+ }
+ else
+ {
+ rc = VNamelistMake( &( ipf->not_found ), 5 );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot create inputfiles.not_found structure" );
+ else
+ {
+ VectorInit( &( ipf->dbs ), 0, 5 );
+ VectorInit( &( ipf->tabs ), 0, 5 );
+ rc = split_input_files( ipf, mgr, src, reflist_options );
+ }
+ if ( rc != 0 )
+ release_input_files( ipf );
+ else
+ *self = ipf;
+ }
+ return rc;
+}
+
+
+static void CC db_whack( void * item, void * data )
+{
+ input_database * id = ( input_database * )item;
+ free_input_database( id );
+}
+
+
+static void CC tab_whack( void * item, void * data )
+{
+ input_table * it = ( input_table * )item;
+ free( it->path );
+ VTableRelease( it->tab );
+ free( it );
+}
+
+
+void release_input_files( input_files *self )
+{
+ VectorWhack( &self->dbs, db_whack, NULL );
+ VectorWhack( &self->tabs, tab_whack, NULL );
+ VNamelistRelease( self->not_found );
+ free( self );
+}
diff --git a/tools/sra-pileup/inputfiles.h b/tools/sra-pileup/inputfiles.h
new file mode 100644
index 0000000..4698785
--- /dev/null
+++ b/tools/sra-pileup/inputfiles.h
@@ -0,0 +1,99 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_inputfiles_
+#define _h_inputfiles_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/namelist.h>
+
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+
+#include <align/reference.h>
+#include <align/manager.h>
+
+/*
+ the VNamelist of input-files/accessions/uri's is tested one at a time
+ if it is: a database, a table or cannot be found
+ in case of a database : a vdb-db-handle is opened
+ in case of a table : a vdb-tab-handle is opened
+ in case of not found : name is put into the not-found list
+*/
+
+
+typedef struct input_database
+{
+ uint32_t db_idx;
+ char * path;
+ const VDatabase * db;
+ const ReferenceList *reflist;
+ void * prim_ctx;
+ void * sec_ctx;
+ void * ev_ctx;
+} input_database;
+
+
+typedef struct input_table
+{
+ char * path;
+ const VTable * tab;
+} input_table;
+
+
+
+typedef struct input_files
+{
+ uint32_t database_count;
+ uint32_t table_count;
+ uint32_t not_found_count;
+
+ Vector dbs;
+ Vector tabs;
+ VNamelist * not_found;
+} input_files;
+
+
+
+rc_t discover_input_files( input_files **self, const VDBManager *mgr,
+ const VNamelist * src, uint32_t reflist_options );
+
+void release_input_files( input_files *self );
+
+#endif
diff --git a/tools/sra-pileup/matecache.c b/tools/sra-pileup/matecache.c
new file mode 100644
index 0000000..646eeb6
--- /dev/null
+++ b/tools/sra-pileup/matecache.c
@@ -0,0 +1,439 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "matecache.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+
+void release_matecache( matecache * const self )
+{
+ if ( self != NULL )
+ {
+ if ( self->per_file != NULL )
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < self->count; ++idx )
+ {
+ if ( self->per_file[ idx ].same_ref_64 != NULL )
+ KVectorRelease( self->per_file[ idx ].same_ref_64 );
+ if ( self->per_file[ idx ].same_ref_16 != NULL )
+ KVectorRelease( self->per_file[ idx ].same_ref_16 );
+
+ if ( self->per_file[ idx ].unaligned_64_a != NULL )
+ KVectorRelease( self->per_file[ idx ].unaligned_64_a );
+ if ( self->per_file[ idx ].unaligned_64_b != NULL )
+ KVectorRelease( self->per_file[ idx ].unaligned_64_b );
+ }
+ free( self->per_file );
+ }
+ free( self );
+ }
+}
+
+
+rc_t make_matecache( matecache **self, uint32_t count )
+{
+ rc_t rc = 0;
+
+ matecache * mc = calloc( sizeof * mc, 1 );
+ *self = NULL;
+ if ( mc == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "cannot create matecache structure" );
+ }
+ else
+ {
+ mc->count = count;
+ mc->per_file = calloc( sizeof *(mc->per_file), count );
+ if ( mc->per_file == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "cannot create matecache internal structure" );
+ }
+ else
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ rc = KVectorMake( &( mc->per_file[ idx ].same_ref_64 ) );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot create KVector (same-ref) U64" );
+ else
+ {
+ rc = KVectorMake( &( mc->per_file[ idx ].same_ref_16 ) );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot create KVector (same-ref) U16" );
+ else
+ {
+ rc = KVectorMake( &( mc->per_file[ idx ].unaligned_64_a ) );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot create KVector (unaligned a) U64" );
+ else
+ {
+ rc = KVectorMake( &( mc->per_file[ idx ].unaligned_64_b ) );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot create KVector (unaligned b) U64" );
+ }
+ }
+ }
+ }
+ if ( rc == 0 )
+ *self = mc;
+ }
+ if ( rc != 0 )
+ release_matecache( mc );
+ }
+ return rc;
+}
+
+#if 0
+static int32_t calc_tlen( uint32_t self_pos, uint32_t mate_pos,
+ uint32_t self_len, uint32_t mate_len, uint32_t read_num )
+{
+ int32_t res = 0;
+ unsigned const self_left = self_pos;
+ unsigned const mate_left = mate_pos;
+ unsigned const self_right = self_left + self_len;
+ unsigned const mate_right = mate_left + mate_len;
+ unsigned const leftmost = (self_left < mate_left ) ? self_left : mate_left;
+ unsigned const rightmost = (self_right > mate_right) ? self_right : mate_right;
+ unsigned const tlen = rightmost - leftmost;
+
+ /* The standard says, "The leftmost segment has a plus sign and the rightmost has a minus sign." */
+ if ( ( self_left <= mate_left && self_right >= mate_right ) /* mate fully contained within self or */
+ || ( mate_left <= self_left && mate_right >= self_right ) ) /* self fully contained within mate; */
+ {
+ if ( self_left < mate_left || ( read_num == 1 && self_left == mate_left ) )
+ res = tlen;
+ else
+ res = -tlen;
+ }
+ else if ( ( self_right == mate_right && mate_left == leftmost ) /* both are rightmost, but mate is leftmost */
+ || self_right == rightmost )
+ {
+ res = -tlen;
+ }
+ else
+ res = tlen;
+
+ return res;
+}
+#endif
+
+static rc_t matecache_check( const matecache * const self, uint32_t db_idx, matecache_per_file ** mcpf )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+ (void)LOGERR( klogErr, rc, "cannot insert into same-ref-cache" );
+ }
+ else if ( db_idx < self->count )
+ {
+ *mcpf = &self->per_file[ db_idx ];
+ if ( mcpf == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid );
+ (void)LOGERR( klogErr, rc, "cannot insert into same-ref-cache" );
+ }
+ }
+ return rc;
+}
+
+
+rc_t matecache_insert_same_ref( matecache * const self,
+ uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t flags, INSDC_coord_len tlen )
+{
+ matecache_per_file * mcpf = NULL;
+ rc_t rc = matecache_check( self, db_idx, &mcpf );
+ if ( rc == 0 )
+ {
+ uint64_t ref_pos_and_tlen = ref_pos;
+ ref_pos_and_tlen <<= 32;
+ ref_pos_and_tlen |= tlen;
+ rc = KVectorSetU64( mcpf->same_ref_64, key, ref_pos_and_tlen );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot insert into KVector (same-ref) U64" );
+ else
+ {
+ rc = KVectorSetU16( mcpf->same_ref_16, key, flags );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot insert into KVector (same-ref) U16" );
+ }
+ if ( rc == 0 )
+ {
+ mcpf->stat_same_ref.count++;
+ if ( mcpf->stat_same_ref.count > mcpf->maxcount_same_ref )
+ mcpf->maxcount_same_ref = mcpf->stat_same_ref.count;
+ mcpf->stat_same_ref.inserts++;
+ }
+ }
+ return rc;
+}
+
+
+rc_t matecache_lookup_same_ref( const matecache * const self, uint32_t db_idx, int64_t key,
+ INSDC_coord_zero *ref_pos, uint32_t *flags, INSDC_coord_len *tlen )
+{
+ matecache_per_file * mcpf = NULL;
+ rc_t rc = matecache_check( self, db_idx, &mcpf );
+ if ( rc == 0 )
+ {
+ uint64_t value64;
+ mcpf->stat_same_ref.lookups++;
+ rc = KVectorGetU64( mcpf->same_ref_64, key, &value64 );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcNotFound )
+ (void)LOGERR( klogErr, rc, "cannot retrieve value (same-ref) U64" );
+ }
+ else
+ {
+ uint16_t value16;
+ rc = KVectorGetU16( mcpf->same_ref_16, key, &value16 );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcNotFound )
+ (void)LOGERR( klogErr, rc, "cannot retrieve value (same-ref) U16" );
+ }
+ else
+ {
+ *ref_pos = ( value64 >> 32 );
+ *tlen = ( value64 & 0xFFFFFFFF );
+ *flags = value16;
+ mcpf->stat_same_ref.finds++;
+ }
+ }
+ }
+ return rc;
+}
+
+
+rc_t matecache_remove_same_ref( matecache * const self, uint32_t db_idx, int64_t key )
+{
+ matecache_per_file * mcpf = NULL;
+ rc_t rc = matecache_check( self, db_idx, &mcpf );
+ if ( rc == 0 )
+ {
+ rc = KVectorUnset( mcpf->same_ref_64, key );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot remove from same-ref-cache (64bit)" );
+ else
+ {
+ rc = KVectorUnset( mcpf->same_ref_16, key );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot remove from same-ref-cache (16bit)" );
+ }
+ if ( rc == 0 && mcpf->stat_same_ref.count > 0 )
+ mcpf->stat_same_ref.count--;
+ }
+ return rc;
+}
+
+
+static rc_t matecache_clear_same_ref_per_file( matecache_per_file * const mcpf )
+{
+ rc_t rc = KVectorRelease( mcpf->same_ref_64 );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot release same-ref-cache (64bit)" );
+ else
+ {
+ rc = KVectorRelease( mcpf->same_ref_16 );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot release same-ref-cache (16bit)" );
+ else
+ {
+ rc = KVectorMake( &mcpf->same_ref_64 );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot make same-ref-cache (64bit)" );
+ else
+ {
+ rc = KVectorMake( &mcpf->same_ref_16 );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot make same-ref-cache (16bit)" );
+ }
+ }
+ }
+ return rc;
+}
+
+
+rc_t matecache_clear_same_ref( matecache * const self )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+ (void)LOGERR( klogErr, rc, "cannot clear same-ref-cache" );
+ }
+ else
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < self->count && rc == 0; ++idx )
+ {
+ rc = matecache_clear_same_ref_per_file( &self->per_file[ idx ] );
+ }
+ self->flashes++;
+ }
+ return rc;
+}
+
+
+rc_t matecache_report( const matecache * const self )
+{
+ rc_t rc = 0;
+ if ( self == NULL )
+ {
+ rc = RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+ (void)LOGERR( klogErr, rc, "cannot report same-ref-cache" );
+ }
+ else
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < self->count && rc == 0; ++idx )
+ {
+ rc = KOutMsg( "on same reference:\n" );
+ if ( rc == 0 )
+ rc = KOutMsg( "matecache[ %u ].maxcount = %,lu\n", idx, self->per_file[ idx ].maxcount_same_ref );
+ if ( rc == 0 )
+ rc = KOutMsg( "matecache[ %u ].inserts = %,lu\n", idx, self->per_file[ idx ].stat_same_ref.inserts );
+ if ( rc == 0 )
+ rc = KOutMsg( "matecache[ %u ].lookups = %,lu\n", idx, self->per_file[ idx ].stat_same_ref.lookups );
+ if ( rc == 0 )
+ rc = KOutMsg( "matecache[ %u ].finds = %,lu\n", idx, self->per_file[ idx ].stat_same_ref.finds );
+ if ( rc == 0 )
+ rc = KOutMsg( "unaligned:\n" );
+ if ( rc == 0 )
+ rc = KOutMsg( "matecache[ %u ].count = %,lu\n", idx, self->per_file[ idx ].stat_unaligned.count );
+ if ( rc == 0 )
+ rc = KOutMsg( "matecache[ %u ].lookups = %,lu\n", idx, self->per_file[ idx ].stat_unaligned.lookups );
+ if ( rc == 0 )
+ rc = KOutMsg( "matecache[ %u ].finds = %,lu\n", idx, self->per_file[ idx ].stat_unaligned.finds );
+ }
+ if ( rc == 0 )
+ rc = KOutMsg( "matecache.flashes = %,lu\n", idx, self->flashes );
+ }
+ return rc;
+}
+
+
+rc_t matecache_insert_unaligned( matecache * const self,
+ uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t ref_idx, int64_t seq_id )
+{
+ matecache_per_file * mcpf = NULL;
+ rc_t rc = matecache_check( self, db_idx, &mcpf );
+ if ( rc == 0 )
+ {
+ uint64_t ref_pos_and_ref_idx = ref_pos;
+ ref_pos_and_ref_idx <<= 32;
+ ref_pos_and_ref_idx |= ref_idx;
+ rc = KVectorSetU64( mcpf->unaligned_64_a, key, ref_pos_and_ref_idx );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot insert into KVector (unaligned a) U64" );
+ else
+ {
+ rc = KVectorSetU64( mcpf->unaligned_64_b, key, seq_id );
+ if ( rc != 0 )
+ (void)LOGERR( klogErr, rc, "cannot insert into KVector (unaligned b) U64" );
+ }
+ if ( rc == 0 )
+ {
+ mcpf->stat_unaligned.count++;
+ mcpf->stat_unaligned.inserts++;
+ }
+ }
+ return rc;
+}
+
+
+rc_t matecache_lookup_unaligned( const matecache * const self, uint32_t db_idx, int64_t key,
+ INSDC_coord_zero * const ref_pos, uint32_t * const ref_idx, int64_t * const seq_id )
+{
+ matecache_per_file * mcpf = NULL;
+ rc_t rc = matecache_check( self, db_idx, &mcpf );
+ if ( rc == 0 )
+ {
+ uint64_t value64_a;
+ mcpf->stat_unaligned.lookups++;
+ rc = KVectorGetU64( mcpf->unaligned_64_a, key, &value64_a );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcNotFound )
+ (void)LOGERR( klogErr, rc, "cannot retrieve value (unaligned a) U64" );
+ }
+ else
+ {
+ uint64_t value64_b;
+ rc = KVectorGetU64( mcpf->unaligned_64_b, key, &value64_b );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcNotFound )
+ (void)LOGERR( klogErr, rc, "cannot retrieve value (unaligned b) U64" );
+ }
+ else
+ {
+ *seq_id = ( int64_t )value64_b;
+ *ref_pos = ( value64_a >> 32 );
+ *ref_idx = ( value64_a & 0xFFFFFFFF );
+ mcpf->stat_unaligned.finds++;
+ }
+ }
+ }
+ return rc;
+}
+
+
+typedef struct visit_ctx
+{
+ rc_t ( CC * f ) ( int64_t seq_id, int64_t al_id, void * user_data );
+ void * user_data;
+} visit_ctx;
+
+
+static rc_t CC on_seq_id( uint64_t key, int64_t value, void *user_data )
+{
+ visit_ctx * vctx = user_data;
+ return vctx->f( ( int64_t )key, value, vctx->user_data );
+}
+
+
+rc_t foreach_unaligned_entry( const matecache * const self,
+ uint32_t db_idx,
+ rc_t ( CC * f ) ( int64_t seq_id, int64_t al_id, void * user_data ),
+ void * user_data )
+{
+ matecache_per_file * mcpf = NULL;
+ rc_t rc = matecache_check( self, db_idx, &mcpf );
+ if ( rc == 0 )
+ {
+ visit_ctx vctx;
+ vctx.f = f;
+ vctx.user_data = user_data;
+ rc = KVectorVisitI64 ( mcpf->unaligned_64_b, false, on_seq_id, &vctx );
+ }
+ return rc;
+}
diff --git a/tools/sra-pileup/matecache.h b/tools/sra-pileup/matecache.h
new file mode 100644
index 0000000..0b8d9df
--- /dev/null
+++ b/tools/sra-pileup/matecache.h
@@ -0,0 +1,119 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_matecache_
+#define _h_matecache_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <insdc/sra.h>
+
+typedef struct matecache_stat
+{
+ uint64_t count;
+ uint64_t lookups;
+ uint64_t finds;
+ uint64_t inserts;
+} matecache_stat;
+
+
+typedef struct matecache_per_file
+{
+ KVector *same_ref_64; /* ref-pos and ref-idx */
+ KVector *same_ref_16; /* flags */
+
+ KVector *unaligned_64_a; /* ref-pos and ref-idx */
+ KVector *unaligned_64_b; /* seq_spot_id */
+
+ matecache_stat stat_same_ref;
+ matecache_stat stat_unaligned;
+ uint64_t maxcount_same_ref;
+} matecache_per_file;
+
+
+typedef struct matecache
+{
+ matecache_per_file *per_file;
+ uint32_t count;
+ uint32_t flashes;
+} matecache;
+
+
+/* general cache functions */
+
+rc_t make_matecache( matecache **self, uint32_t count );
+
+void release_matecache( matecache * const self );
+
+rc_t matecache_clear_same_ref( matecache * const self );
+
+rc_t matecache_report( const matecache * const self );
+
+
+/* cache functions for aligned mates on the same reference */
+
+rc_t matecache_insert_same_ref( matecache * const self,
+ uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t flags, INSDC_coord_len tlen );
+
+rc_t matecache_lookup_same_ref( const matecache * const self, uint32_t db_idx, int64_t key,
+ INSDC_coord_zero *ref_pos, uint32_t *flags, INSDC_coord_len *tlen );
+
+rc_t matecache_remove_same_ref( matecache * const self, uint32_t db_idx, int64_t key );
+
+
+/* cache functions for half aligned mates */
+
+/*
+ db_idx ... index, what input-file did the alignment come from
+ key ... row-id of aligned half
+ pos ... position of the aligned half
+ flags ... sam-flags of the aligned half
+ ref_idx ... idx of reference the aligned half aligns to
+*/
+
+rc_t matecache_insert_unaligned( matecache * const self,
+ uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t ref_idx, int64_t seq_id );
+
+rc_t matecache_lookup_unaligned( const matecache * const self, uint32_t db_idx, int64_t key,
+ INSDC_coord_zero * const ref_pos, uint32_t * const ref_idx, int64_t * const seq_id );
+
+rc_t foreach_unaligned_entry( const matecache * const self,
+ uint32_t db_idx,
+ rc_t ( CC * f ) ( int64_t seq_id, int64_t al_id, void * user_data ),
+ void * user_data );
+
+
+#endif
diff --git a/tools/sra-pileup/out_redir.c b/tools/sra-pileup/out_redir.c
new file mode 100644
index 0000000..c089d78
--- /dev/null
+++ b/tools/sra-pileup/out_redir.c
@@ -0,0 +1,120 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "out_redir.h"
+
+#include <kfs/directory.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+#include <sysalloc.h>
+
+static rc_t CC out_redir_callback( void * self, const char * buffer, size_t bufsize, size_t * num_writ )
+{
+ out_redir * redir = ( out_redir * )self;
+ rc_t rc = KFileWriteAll( redir->kfile, redir->pos, buffer, bufsize, num_writ );
+ if ( rc == 0 )
+ redir->pos += *num_writ;
+ return rc;
+}
+
+
+rc_t init_out_redir( out_redir * self, enum out_redir_mode mode, const char * filename, size_t bufsize )
+{
+ rc_t rc;
+ KFile *output_file;
+
+ if ( filename != NULL )
+ {
+ KDirectory *dir;
+ rc = KDirectoryNativeDir( &dir );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+ else
+ {
+ rc = KDirectoryCreateFile ( dir, &output_file, false, 0664, kcmInit, "%s", filename );
+ KDirectoryRelease( dir );
+ }
+ }
+ else
+ rc = KFileMakeStdOut ( &output_file );
+
+ if ( rc == 0 )
+ {
+ KFile *temp_file;
+
+ /* wrap the output-file in compression, if requested */
+ switch ( mode )
+ {
+ case orm_gzip : rc = KFileMakeGzipForWrite( &temp_file, output_file ); break;
+ case orm_bzip2 : rc = KFileMakeBzip2ForWrite( &temp_file, output_file ); break;
+ case orm_uncompressed : break;
+ }
+ if ( rc == 0 )
+ {
+ if ( mode != orm_uncompressed )
+ {
+ KFileRelease( output_file );
+ output_file = temp_file;
+ }
+
+ /* wrap the output/compressed-file in buffering, if requested */
+ if ( bufsize != 0 )
+ {
+ rc = KBufFileMakeWrite( &temp_file, output_file, false, bufsize );
+ if ( rc == 0 )
+ {
+ KFileRelease( output_file );
+ output_file = temp_file;
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ self->kfile = output_file;
+ self->org_writer = KOutWriterGet();
+ self->org_data = KOutDataGet();
+ self->pos = 0;
+ rc = KOutHandlerSet( out_redir_callback, self );
+ if ( rc != 0 )
+ LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+ }
+ }
+ }
+ return rc;
+}
+
+
+void release_out_redir( out_redir * self )
+{
+ KFileRelease( self->kfile );
+ if( self->org_writer != NULL )
+ {
+ KOutHandlerSet( self->org_writer, self->org_data );
+ }
+ self->org_writer = NULL;
+}
+
diff --git a/tools/sra-pileup/out_redir.h b/tools/sra-pileup/out_redir.h
new file mode 100644
index 0000000..6eacab5
--- /dev/null
+++ b/tools/sra-pileup/out_redir.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_out_redir_
+#define _h_out_redir_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kfs/file.h>
+
+enum out_redir_mode
+{
+ orm_uncompressed = 0,
+ orm_gzip,
+ orm_bzip2
+};
+
+
+/* GLOBAL VARIABLES */
+typedef struct out_redir
+{
+ KWrtWriter org_writer;
+ void* org_data;
+ KFile* kfile;
+ uint64_t pos;
+} out_redir;
+
+
+rc_t init_out_redir( out_redir * self, enum out_redir_mode mode, const char * filename, size_t bufsize );
+
+void release_out_redir( out_redir * self );
+
+#endif
diff --git a/tools/sra-pileup/read_fkt.c b/tools/sra-pileup/read_fkt.c
new file mode 100644
index 0000000..5a7fa68
--- /dev/null
+++ b/tools/sra-pileup/read_fkt.c
@@ -0,0 +1,338 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "read_fkt.h"
+#include <sysalloc.h>
+
+rc_t read_bool( int64_t row_id, const VCursor * cursor, uint32_t idx, bool *res, bool dflt )
+{
+ const bool * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) bool failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ *res = row_len > 0 ? *value : dflt;
+ }
+ return rc;
+}
+
+
+rc_t read_int64( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t *res, int64_t dflt )
+{
+ const int64_t *value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) int64 failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ *res = row_len > 0 ? *value : dflt;
+ }
+ return rc;
+}
+
+
+rc_t read_char_ptr_and_size( int64_t row_id, const VCursor * cursor, uint32_t idx, const char **res, size_t *res_len )
+{
+ const char * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) char_ptr failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = value;
+ if ( res_len != NULL )
+ *res_len = ( size_t )row_len;
+ }
+ return rc;
+}
+
+
+rc_t read_u8_ptr_and_size( int64_t row_id, const VCursor * cursor, uint32_t idx, const uint8_t **res, size_t *res_len )
+{
+ const uint8_t * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) char_ptr failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = value;
+ if ( res_len != NULL )
+ *res_len = ( size_t )row_len;
+ }
+ return rc;
+}
+
+
+rc_t read_INSDC_coord_zero( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_zero *res, size_t *res_len )
+{
+ INSDC_coord_zero * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_coord_zero failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = *value;
+ if ( res_len != NULL )
+ *res_len = ( size_t )row_len;
+ }
+ return rc;
+}
+
+
+rc_t read_INSDC_coord_len( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_len *res )
+{
+ INSDC_coord_len * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_coord_len failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else if ( row_len > 0 )
+ *res = *value;
+ return rc;
+}
+
+
+rc_t read_uint32_t( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t *res, uint32_t dflt )
+{
+ uint32_t * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) uint32_t failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ *res = ( row_len > 0 ) ? *value : dflt;
+ }
+ return rc;
+}
+
+
+rc_t read_uint32_t_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t **res, uint32_t *len )
+{
+ uint32_t * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) uint32_t (ptr) failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = value;
+ *len = row_len;
+ }
+ return rc;
+}
+
+
+rc_t read_int64_t_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t **res, uint32_t *len )
+{
+ int64_t * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) uint64_t (ptr) failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = value;
+ *len = row_len;
+ }
+ return rc;
+}
+
+
+rc_t read_INSDC_read_type_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_type **res, uint32_t *len )
+{
+ const INSDC_read_type * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_read_type (ptr) failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = value;
+ *len = row_len;
+ }
+ return rc;
+}
+
+
+rc_t read_INSDC_read_filter_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_filter **res, uint32_t *len )
+{
+ const INSDC_read_filter * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_read_filter (ptr) failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = value;
+ *len = row_len;
+ }
+ return rc;
+}
+
+
+rc_t read_INSDC_coord_len_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_len **res, uint32_t *len )
+{
+ const INSDC_coord_len * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_coord_len (ptr) failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = value;
+ *len = row_len;
+ }
+ return rc;
+}
+
+
+rc_t read_INSDC_coord_zero_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_zero **res, uint32_t *len )
+{
+ const INSDC_coord_zero * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_coord_zero (ptr) failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = value;
+ *len = row_len;
+ }
+ return rc;
+}
+
+
+rc_t read_INSDC_dna_text_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_dna_text **res, uint32_t *len )
+{
+ const INSDC_dna_text * value;
+ uint32_t elem_bits, boff, row_len;
+ rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_dna_text (ptr) failed",
+ "tr=%li,ti=%u", row_id, idx ) );
+ }
+ else
+ {
+ if ( row_len > 0 )
+ *res = value;
+ *len = row_len;
+ }
+ return rc;
+}
+
+
+rc_t add_column( const VCursor * cursor, const char *colname, uint32_t * idx )
+{
+ rc_t rc = VCursorAddColumn( cursor, idx, colname );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorAddColumn( $(cn) ) failed", "cn=%s", colname ) );
+ }
+ return rc;
+}
+
+
+bool namelist_contains( const KNamelist *tables, const char * table_name )
+{
+ bool res = false;
+ uint32_t count;
+ rc_t rc = KNamelistCount( tables, &count );
+ if ( rc == 0 && count > 0 )
+ {
+ uint32_t idx;
+ size_t table_name_len = string_size( table_name );
+ for ( idx = 0; idx < count && rc == 0 && !res; ++idx )
+ {
+ const char * name;
+ rc = KNamelistGet( tables, idx, &name );
+ if ( rc == 0 && name != NULL )
+ {
+ size_t name_len = string_size( name );
+ size_t max_len = table_name_len > name_len ? table_name_len : name_len;
+ int cmp = string_cmp( table_name, table_name_len, name, name_len, max_len );
+ if ( cmp == 0 )
+ res = true;
+ }
+ }
+ }
+ return res;
+}
diff --git a/tools/sra-pileup/read_fkt.h b/tools/sra-pileup/read_fkt.h
new file mode 100644
index 0000000..0290864
--- /dev/null
+++ b/tools/sra-pileup/read_fkt.h
@@ -0,0 +1,63 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_read_fkt_
+#define _h_read_fkt_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/cursor.h>
+#include <insdc/sra.h>
+
+rc_t read_bool( int64_t row_id, const VCursor * cursor, uint32_t idx, bool *res, bool dflt );
+rc_t read_int64( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t *res, int64_t dflt );
+rc_t read_char_ptr_and_size( int64_t row_id, const VCursor * cursor, uint32_t idx, const char **res, size_t *res_len );
+rc_t read_u8_ptr_and_size( int64_t row_id, const VCursor * cursor, uint32_t idx, const uint8_t **res, size_t *res_len );
+rc_t read_INSDC_coord_zero( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_zero *res, size_t *res_len );
+rc_t read_INSDC_coord_len( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_len *res );
+rc_t read_uint32_t( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t *res, uint32_t dflt );
+rc_t read_uint32_t_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t **res, uint32_t *len );
+rc_t read_int64_t_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t **res, uint32_t *len );
+rc_t read_INSDC_read_type_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_type **res, uint32_t *len );
+rc_t read_INSDC_read_filter_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_filter **res, uint32_t *len );
+rc_t read_INSDC_coord_len_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_len **res, uint32_t *len );
+rc_t read_INSDC_coord_zero_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_zero **res, uint32_t *len );
+rc_t read_INSDC_dna_text_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_dna_text **res, uint32_t *len );
+
+rc_t add_column( const VCursor * cursor, const char *colname, uint32_t * idx );
+bool namelist_contains( const KNamelist *tables, const char * table_name );
+
+#endif
\ No newline at end of file
diff --git a/tools/sra-pileup/reref.c b/tools/sra-pileup/reref.c
new file mode 100644
index 0000000..201d995
--- /dev/null
+++ b/tools/sra-pileup/reref.c
@@ -0,0 +1,498 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "reref.h"
+
+#include <klib/text.h>
+#include <kfs/file.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+#include <align/reference.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+typedef struct report_row_ctx
+{
+ uint32_t prim_idx;
+ uint32_t sec_idx;
+ int64_t row_id;
+} report_row_ctx;
+
+
+static rc_t report_ref_row( const VCursor *cur, report_row_ctx * row_ctx )
+{
+ rc_t rc = 0;
+ uint32_t elem_bits, boff, prim_count, sec_count;
+ const void *base;
+ rc = VCursorCellDataDirect ( cur, row_ctx->row_id, row_ctx->prim_idx, &elem_bits, &base, &boff, &prim_count );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot read colum >PRIMARY_ALIGNMENT_IDS<" );
+ }
+ else
+ {
+ rc = VCursorCellDataDirect ( cur, row_ctx->row_id, row_ctx->sec_idx, &elem_bits, &base, &boff, &sec_count );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot read colum >SECONDARY_ALIGNMENT_IDS<" );
+ }
+ else if ( prim_count > 0 || sec_count > 0 )
+ {
+ rc = KOutMsg( "ROW[ %,lu ]: PRIM:%,u SEC:%,u\n", row_ctx->row_id, prim_count, sec_count );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t report_ref_cursor( const VCursor *cur, int64_t start, int64_t stop )
+{
+ report_row_ctx row_ctx;
+ rc_t rc = VCursorAddColumn ( cur, &row_ctx.prim_idx, "PRIMARY_ALIGNMENT_IDS" );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot add column >PRIMARY_ALIGNMENT_IDS<" );
+ }
+ else
+ {
+ rc = VCursorAddColumn ( cur, &row_ctx.sec_idx, "SECONDARY_ALIGNMENT_IDS" );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot add column >SECONDARY_ALIGNMENT_IDS<" );
+ }
+ else
+ {
+ rc = VCursorOpen ( cur );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot open REFERENCE-CURSOR" );
+ }
+ else
+ {
+ for ( row_ctx.row_id = start; rc == 0 && row_ctx.row_id <= stop; ++row_ctx.row_id )
+ {
+ rc = report_ref_row( cur, &row_ctx );
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t report_ref_table( const VDBManager *vdb_mgr, const char * path, int64_t start, int64_t stop )
+{
+ const VDatabase* db;
+ rc_t rc = VDBManagerOpenDBRead ( vdb_mgr, &db, NULL, "%s", path );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot open vdb-database" );
+ }
+ else
+ {
+ const VTable* tb;
+ rc = VDatabaseOpenTableRead ( db, &tb, "REFERENCE" );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot open REFERENCE-table" );
+ }
+ else
+ {
+ const VCursor *cur;
+ rc = VTableCreateCursorRead ( tb, &cur );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot open REFERENCE-cursor" );
+ }
+ else
+ {
+ rc = report_ref_cursor( cur, start, stop );
+ VCursorRelease( cur );
+ }
+ VTableRelease ( tb );
+ }
+ VDatabaseRelease ( db );
+ }
+ return rc;
+}
+
+
+static rc_t report_ref_table2( const ReferenceObj* ref_obj, int64_t start, int64_t stop )
+{
+ rc_t rc = 0;
+ int64_t row_id, max_prim_at, max_sec_at, max_ev_at;
+ uint64_t sum_prim, sum_sec, sum_ev, max_prim, max_sec, max_ev;
+ sum_prim = sum_sec = sum_ev = max_prim = max_sec = max_ev = 0;
+
+ for ( row_id = start; rc == 0 && row_id <= stop; ++row_id )
+ {
+ uint32_t count[ 3 ];
+ rc = ReferenceObj_GetIdCount( ref_obj, row_id, count );
+ if ( rc == 0 )
+ {
+ sum_prim += count[ 0 ];
+ sum_sec += count[ 1 ];
+ sum_ev += count[ 2 ];
+
+ if ( count[ 0 ] > max_prim )
+ {
+ max_prim = count[ 0 ];
+ max_prim_at = row_id;
+ }
+ if ( count[ 1 ] > max_sec )
+ {
+ max_sec = count[ 1 ];
+ max_sec_at = row_id;
+ }
+ if ( count[ 2 ] > max_ev )
+ {
+ max_ev = count[ 2 ];
+ max_ev_at = row_id;
+ }
+ }
+ }
+
+ rc = KOutMsg( "alignments:\t%,u PRI\t%,u SEC\t%,u EV\n", sum_prim, sum_sec, sum_ev );
+ if ( rc == 0 && max_prim > 0 )
+ {
+ uint64_t from = ( ( max_prim_at - start ) * 5000 ) + 1;
+ rc = KOutMsg( "max. PRI:\t%,u\tat row #%,i ( from pos: %,u ... %,u )\n", max_prim, max_prim_at, from, from + 4999 );
+ }
+ if ( rc == 0 && max_sec > 0 )
+ {
+ uint64_t from = ( ( max_sec_at - start ) * 5000 ) + 1;
+ rc = KOutMsg( "max. SEC:\t%,u\tat row #%,i ( from pos: %,u ... %,u )\n", max_sec, max_sec_at, from, from + 4999 );
+ }
+ if ( rc == 0 && max_ev > 0 )
+ {
+ uint64_t from = ( ( max_ev_at - start ) * 5000 ) + 1;
+ rc = KOutMsg( "max. EV:\t%,u\tat row #%,i ( from pos: %,u ... %,u )\n", max_ev, max_ev_at, from, from + 4999 );
+ }
+ return rc;
+}
+
+
+const char * ss_Database = "Database";
+const char * ss_Table = "Table";
+const char * ss_PrereleaseTbl = "Prerelease Table";
+const char * ss_Column = "Column";
+const char * ss_Index = "Index";
+const char * ss_NotFound = "not found";
+const char * ss_BadPath = "bad path";
+const char * ss_File = "File";
+const char * ss_Dir = "Dir";
+const char * ss_CharDev = "CharDev";
+const char * ss_BlockDev = "BlockDev";
+const char * ss_FIFO = "FIFO";
+const char * ss_ZombieFile = "ZombieFile";
+const char * ss_Dataset = "Dataset";
+const char * ss_Datatype = "Datatype";
+const char * ss_unknown = "unknown pathtype";
+
+
+static const char * path_type_2_str( const uint32_t pt )
+{
+ const char * res = ss_unknown;
+ switch ( pt )
+ {
+ case kptDatabase : res = ss_Database; break;
+ case kptTable : res = ss_Table; break;
+ case kptPrereleaseTbl : res = ss_PrereleaseTbl; break;
+ case kptColumn : res = ss_Column; break;
+ case kptIndex : res = ss_Index; break;
+ case kptNotFound : res = ss_NotFound; break;
+ case kptBadPath : res = ss_BadPath; break;
+ case kptFile : res = ss_File; break;
+ case kptDir : res = ss_Dir; break;
+ case kptCharDev : res = ss_CharDev; break;
+ case kptBlockDev : res = ss_BlockDev; break;
+ case kptFIFO : res = ss_FIFO; break;
+ case kptZombieFile : res = ss_ZombieFile; break;
+ case kptDataset : res = ss_Dataset; break;
+ case kptDatatype : res = ss_Datatype; break;
+ default : res = ss_unknown; break;
+ }
+ return res;
+}
+
+
+static rc_t resolve_accession( VFSManager * vfs_mgr, const char * accession, const String ** path )
+{
+ VResolver * resolver;
+ rc_t rc = VFSManagerGetResolver( vfs_mgr, &resolver );
+ if ( rc == 0 )
+ {
+ const VPath * vpath;
+ rc = VPathMakeSysPath( ( VPath** )&vpath, accession );
+ if ( rc == 0 )
+ {
+ const VPath * rpath;
+ rc = VResolverLocal( resolver, vpath, &rpath );
+ if ( GetRCState( rc ) == rcNotFound )
+ rc = VResolverRemote( resolver, vpath, &rpath, NULL );
+ if ( rc == 0 )
+ {
+ const String * s;
+ rc = VPathMakeString( rpath, &s );
+ if ( rc == 0 )
+ {
+ rc = StringCopy ( path, s );
+ free ((void*)s);
+ }
+ VPathRelease ( rpath );
+ }
+ VPathRelease ( vpath );
+ }
+ VResolverRelease( resolver );
+ }
+ return rc;
+}
+
+
+static rc_t report_ref_loc( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * seq_id )
+{
+ const String * path;
+ rc_t rc = resolve_accession( vfs_mgr, seq_id, &path );
+ if ( rc == 0 )
+ {
+ rc = KOutMsg( "location:\t%S\n", path );
+ if ( rc == 0 )
+ {
+ uint32_t pt = VDBManagerPathType ( vdb_mgr, "%S", path );
+ const char * spt = path_type_2_str( pt );
+ rc = KOutMsg( "pathtype:\t%s\n", spt );
+ }
+ free ( (void*) path );
+ }
+ return rc;
+}
+
+
+static rc_t report_ref_obj( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * path, uint32_t idx,
+ const ReferenceObj* ref_obj, bool extended )
+{
+ const char * s;
+ const char * seq_id;
+ INSDC_coord_len len;
+ bool circular, external;
+ int64_t start, stop;
+
+ rc_t rc = ReferenceObj_Name( ref_obj, &s );
+ if ( rc == 0 )
+ rc = KOutMsg( "\nREF[%u].Name = '%s'\n", idx, s );
+
+ if ( rc == 0 )
+ rc = ReferenceObj_SeqId( ref_obj, &seq_id );
+ if ( rc == 0 )
+ rc = KOutMsg( "REF[%u].SeqId = '%s'\n", idx, seq_id );
+
+ if ( rc == 0 )
+ rc = ReferenceObj_SeqLength( ref_obj, &len );
+ if ( rc == 0 )
+ rc = KOutMsg( "REF[%u].Length = %,u\n", idx, len );
+
+ if ( rc == 0 )
+ rc = ReferenceObj_Circular( ref_obj, &circular );
+ if ( rc == 0 )
+ rc = KOutMsg( "REF[%u].Circular = %s\n", idx, circular ? "yes" : "no" );
+
+ if ( rc == 0 )
+ rc = ReferenceObj_IdRange( ref_obj, &start, &stop );
+ if ( rc == 0 )
+ rc = KOutMsg( "REF[%u].IdRange = [%,lu]...[%,lu]\n", idx, start, stop );
+
+ if ( rc == 0 )
+ rc = ReferenceObj_External( ref_obj, &external, NULL );
+ if ( rc == 0 )
+ rc = KOutMsg( "REF[%u].Extern = %s\n", idx, external ? "yes" : "no" );
+ if ( rc == 0 && external )
+ {
+ rc = report_ref_loc( vdb_mgr, vfs_mgr, seq_id );
+ }
+
+ if ( rc == 0 && extended )
+ rc = report_ref_table2( ref_obj, start, stop );
+
+ return rc;
+}
+
+
+static rc_t report_ref_database( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * path, bool extended )
+{
+ const ReferenceList* reflist;
+ uint32_t options = ( ereferencelist_usePrimaryIds | ereferencelist_useSecondaryIds | ereferencelist_useEvidenceIds );
+ rc_t rc = ReferenceList_MakePath( &reflist, vdb_mgr, path, options, 0, NULL, 0 );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot create ReferenceList" );
+ }
+ else
+ {
+ uint32_t count;
+ rc = ReferenceList_Count( reflist, &count );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "ReferenceList_Count() failed" );
+ }
+ else
+ {
+ rc = KOutMsg( "this object uses %u references\n", count );
+ if ( rc == 0 )
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ const ReferenceObj* ref_obj;
+ rc = ReferenceList_Get( reflist, &ref_obj, idx );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "ReferenceList_Get() failed" );
+ }
+ else
+ {
+ rc = report_ref_obj( vdb_mgr, vfs_mgr, path, idx, ref_obj, extended );
+ ReferenceObj_Release( ref_obj );
+ }
+ }
+ }
+ }
+ ReferenceList_Release( reflist );
+ }
+ return rc;
+}
+
+
+static rc_t report_references( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * spec,
+ bool extended )
+{
+ rc_t rc = KOutMsg( "\nreporting references of '%s'\n", spec );
+ if ( rc == 0 )
+ {
+ VPath * path = NULL;
+ const VPath * local_cache = NULL;
+ const KFile * remote_file = NULL;
+ rc = VFSManagerResolveSpec ( vfs_mgr, spec, &path, &remote_file, &local_cache, true );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot resolve spec via VFSManager" );
+ }
+ else
+ {
+ char buffer[ 4096 ];
+ size_t num_read;
+ rc = VPathReadPath ( path, buffer, sizeof buffer, &num_read );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot read path from vpath" );
+ }
+ else
+ {
+ rc = KOutMsg( "resolved into '%s'\n", buffer );
+ if ( rc == 0 )
+ {
+ int path_type = ( VDBManagerPathType ( vdb_mgr, "%s", buffer ) & ~ kptAlias );
+ switch( path_type )
+ {
+ case kptDatabase : rc = report_ref_database( vdb_mgr, vfs_mgr, buffer, extended );
+ break;
+
+ case kptTable : rc = KOutMsg( "cannot report references on a table-object\n" );
+ break;
+
+ default : rc = KOutMsg( "the given object is not a vdb-database\n" );
+ break;
+ }
+ }
+ }
+ KFileRelease( remote_file );
+ VPathRelease ( local_cache );
+ VPathRelease ( path );
+ }
+ }
+ return rc;
+}
+
+
+rc_t report_on_reference( Args * args, bool extended )
+{
+ uint32_t count;
+ rc_t rc = ArgsParamCount( args, &count );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+ }
+ else
+ {
+ KDirectory *dir;
+ rc = KDirectoryNativeDir( &dir );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+ }
+ else
+ {
+ const VDBManager *vdb_mgr;
+ rc = VDBManagerMakeRead ( &vdb_mgr, dir );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+ }
+ else
+ {
+ VFSManager * vfs_mgr;
+ rc = VFSManagerMake ( &vfs_mgr );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot make vfs-manager" );
+ }
+ else
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ const char *param = NULL;
+ rc = ArgsParamValue( args, idx, ¶m );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+ }
+ else
+ {
+ /* rc value not used, because it can be something that has no references */
+ report_references( vdb_mgr, vfs_mgr, param, extended );
+ }
+ }
+ VFSManagerRelease ( vfs_mgr );
+ }
+ VDBManagerRelease( vdb_mgr );
+ }
+ KDirectoryRelease( dir );
+ }
+ }
+ return rc;
+}
\ No newline at end of file
diff --git a/tools/sra-pileup/reref.h b/tools/sra-pileup/reref.h
new file mode 100644
index 0000000..13e3136
--- /dev/null
+++ b/tools/sra-pileup/reref.h
@@ -0,0 +1,48 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_reref_
+#define _h_reref_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <kapp/args.h>
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/manager.h>
+
+rc_t report_on_reference( Args * args, bool extended );
+
+#endif
diff --git a/tools/sra-pileup/sam-aligned.c b/tools/sra-pileup/sam-aligned.c
new file mode 100644
index 0000000..fbcdea7
--- /dev/null
+++ b/tools/sra-pileup/sam-aligned.c
@@ -0,0 +1,1604 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <align/manager.h>
+#include <align/iterator.h>
+#include <kapp/main.h>
+#include <sysalloc.h>
+
+#include "read_fkt.h"
+#include "cg_tools.h"
+#include "sam-aligned.h"
+
+/* -------------------------------------------------------------------------------------------
+ column PRIM SEC EV_INT EV_ALIGN ( outside of iterator )
+
+ SEQ_SPOT_ID X X - X
+ SAM_FLAGS X X - -
+ CIGAR_LONG X X X X
+ CIGAR_SHORT X X X X
+ CIGAR_LONG_LEN X X X X
+ CIGAR_SHORT_LEN X X X X
+ MATE_ALIGN_ID X X - -
+ MATE_REF_NAME X X - -
+ MATE_REF_POS X X - -
+ TEMPLATE_LEN X X - -
+ READ X X X X
+ READ_LEN X X X X
+ MISMATCH_READ X X X X
+ SAM_QUALITY X X X X
+ REF_ORIENTATION X X X X
+ EDIT_DISTANCE X X X X
+ SEQ_SPOT_GROUP X X - X
+ SEQ_READ_ID X X - X
+ RAW_READ X X X X
+ READ_FILTER X X X X
+ EVIDENCE_ALIGNMENT_IDS - - X -
+ REF_POS o
+ REF_PLOIDY o
+ -------------------------------------------------------------------------------------------*/
+
+
+#define COL_NOT_AVAILABLE 0xFFFFFFFF
+
+#define COL_SEQ_SPOT_ID "(I64)SEQ_SPOT_ID"
+#define COL_SAM_FLAGS "(U32)SAM_FLAGS"
+#define COL_LONG_CIGAR "(ascii)CIGAR_LONG"
+#define COL_SHORT_CIGAR "(ascii)CIGAR_SHORT"
+#define COL_MATE_ALIGN_ID "(I64)MATE_ALIGN_ID"
+#define COL_MATE_REF_NAME "(ascii)MATE_REF_NAME"
+#define COL_MATE_REF_POS "(INSDC:coord:zero)MATE_REF_POS"
+#define COL_TEMPLATE_LEN "(I32)TEMPLATE_LEN"
+#define COL_MISMATCH_READ "(ascii)MISMATCH_READ"
+#define COL_SAM_QUALITY "(INSDC:quality:text:phred_33)SAM_QUALITY"
+#define COL_REF_ORIENTATION "(bool)REF_ORIENTATION"
+#define COL_EDIT_DIST "(U32)EDIT_DISTANCE"
+#define COL_SEQ_SPOT_GROUP "(ascii)SEQ_SPOT_GROUP"
+#define COL_SEQ_READ_ID "(INSDC:coord:one)SEQ_READ_ID"
+#define COL_RAW_READ "(INSDC:dna:text)RAW_READ"
+#define COL_PLOIDY "(NCBI:align:ploidy)PLOIDY"
+#define COL_CIGAR_LONG_LEN "(INSDC:coord:len)CIGAR_LONG_LEN"
+#define COL_CIGAR_SHORT_LEN "(INSDC:coord:len)CIGAR_SHORT_LEN"
+#define COL_READ_LEN "(INSDC:coord:len)READ_LEN"
+#define COL_EV_ALIGNMENTS "(I64)EVIDENCE_ALIGNMENT_IDS"
+#define COL_REF_POS "(INSDC:coord:zero)REF_POS"
+#define COL_REF_PLOIDY "(U32)REF_PLOIDY"
+#define COL_READ_FILTER "(INSDC:SRA:read_filter)READ_FILTER"
+
+
+enum align_table_type
+{
+ att_primary = 0,
+ att_secondary,
+ att_evidence
+};
+
+
+/* the part common to prim/sec/ev-alignment */
+typedef struct align_cmn_context
+{
+ const VCursor * cursor;
+
+ uint32_t seq_spot_id_idx;
+ uint32_t cigar_idx;
+ uint32_t cigar_len_idx;
+ uint32_t read_idx;
+ uint32_t read_len_idx;
+ uint32_t edit_dist_idx;
+ uint32_t seq_spot_group_idx;
+ uint32_t seq_read_id_idx;
+ uint32_t raw_read_idx;
+ uint32_t sam_quality_idx;
+ uint32_t ref_orientation_idx;
+ uint32_t read_filter_idx;
+} align_cmn_context;
+
+
+typedef struct align_table_context
+{
+ /* which Reference-Obj in the ReferenceList we are aligning against... */
+ const ReferenceObj* ref_obj;
+ uint32_t ref_idx;
+
+ /* which index into the input-files object / needed to distinguish cache entries with the same number
+ but comming from different input-files */
+ uint32_t db_idx;
+
+ /* objects of which table are we aligning PRIM/SEC/EV ? */
+ enum align_table_type align_table_type;
+
+ /* the part common to prim/sec/ev-alignment */
+ align_cmn_context cmn;
+
+ /* this is specific to pim/sec */
+ uint32_t sam_flags_idx;
+ uint32_t mate_align_id_idx;
+ uint32_t mate_ref_name_idx;
+ uint32_t mate_ref_pos_idx;
+ uint32_t tlen_idx;
+
+ /* this is specific to ev-interval/ev-alignmnet */
+ uint32_t ploidy_idx;
+ uint32_t ev_alignments_idx;
+ uint32_t ref_pos_idx;
+ uint32_t ref_ploidy_idx;
+
+ /* the common part repeats for evidence-alignment */
+ align_cmn_context eval;
+} align_table_context;
+
+
+static void invalidate_all_cmn_column_idx( align_cmn_context * const actx )
+{
+ actx->seq_spot_id_idx = COL_NOT_AVAILABLE;
+ actx->cigar_idx = COL_NOT_AVAILABLE;
+ actx->cigar_len_idx = COL_NOT_AVAILABLE;
+ actx->read_idx = COL_NOT_AVAILABLE;
+ actx->read_len_idx = COL_NOT_AVAILABLE;
+ actx->edit_dist_idx = COL_NOT_AVAILABLE;
+ actx->seq_spot_group_idx = COL_NOT_AVAILABLE;
+ actx->seq_read_id_idx = COL_NOT_AVAILABLE;
+ actx->raw_read_idx = COL_NOT_AVAILABLE;
+ actx->sam_quality_idx = COL_NOT_AVAILABLE;
+ actx->ref_orientation_idx = COL_NOT_AVAILABLE;
+ actx->read_filter_idx = COL_NOT_AVAILABLE;
+}
+
+static void invalidate_all_column_idx( align_table_context * const atx )
+{
+ atx->sam_flags_idx = COL_NOT_AVAILABLE;
+ atx->mate_align_id_idx = COL_NOT_AVAILABLE;
+ atx->mate_ref_name_idx = COL_NOT_AVAILABLE;
+ atx->mate_ref_pos_idx = COL_NOT_AVAILABLE;
+ atx->tlen_idx = COL_NOT_AVAILABLE;
+ atx->ploidy_idx = COL_NOT_AVAILABLE;
+ atx->ev_alignments_idx = COL_NOT_AVAILABLE;
+ atx->ref_pos_idx = COL_NOT_AVAILABLE;
+ atx->ref_ploidy_idx = COL_NOT_AVAILABLE;
+ invalidate_all_cmn_column_idx( &atx->cmn );
+ invalidate_all_cmn_column_idx( &atx->eval );
+}
+
+
+static rc_t prepare_cmn_table_rows( const samdump_opts * const opts, align_cmn_context * const cmn, bool prim_sec )
+{
+ const VCursor * cursor = cmn->cursor;
+ rc_t rc = 0;
+
+ if ( prim_sec )
+ rc = add_column( cursor, COL_SEQ_SPOT_ID, &cmn->seq_spot_id_idx );
+
+ if ( rc == 0 )
+ {
+ if ( opts->use_long_cigar )
+ {
+ rc = add_column( cursor, COL_LONG_CIGAR, &cmn->cigar_idx );
+ if ( rc == 0 && !prim_sec )
+ rc = add_column( cursor, COL_CIGAR_LONG_LEN, &cmn->cigar_len_idx );
+ }
+ else
+ {
+ rc = add_column( cursor, COL_SHORT_CIGAR, &cmn->cigar_idx );
+ if ( rc == 0 && !prim_sec )
+ rc = add_column( cursor, COL_CIGAR_SHORT_LEN, &cmn->cigar_len_idx );
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ if ( opts->print_matches_as_equal_sign )
+ rc = add_column( cursor, COL_MISMATCH_READ, &cmn->read_idx );
+ else
+ rc = add_column( cursor, COL_READ, &cmn->read_idx );
+ }
+
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_READ_LEN, &cmn->read_len_idx );
+
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_SAM_QUALITY, &cmn->sam_quality_idx );
+
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_REF_ORIENTATION, &cmn->ref_orientation_idx );
+
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_EDIT_DIST, &cmn->edit_dist_idx );
+
+ if ( prim_sec && rc == 0 )
+ rc = add_column( cursor, COL_SEQ_SPOT_GROUP, &cmn->seq_spot_group_idx );
+
+ if ( prim_sec && rc == 0 )
+ rc = add_column( cursor, COL_SEQ_READ_ID, &cmn->seq_read_id_idx );
+
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_RAW_READ, &cmn->raw_read_idx );
+
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_READ_FILTER, &cmn->read_filter_idx );
+
+ return rc;
+}
+
+
+static rc_t prepare_prim_sec_table_cursor( const samdump_opts * const opts, const VDatabase * db,
+ const char * table_name, align_table_context * const atx )
+{
+ const VTable *tbl;
+ rc_t rc = VDatabaseOpenTableRead( db, &tbl, table_name );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseOpenTableRead( $(tn) ) failed", "tn=%s", table_name ) );
+ }
+ else
+ {
+ if ( opts->cursor_cache_size == 0 )
+ rc = VTableCreateCursorRead( tbl, &atx->cmn.cursor );
+ else
+ rc = VTableCreateCachedCursorRead( tbl, &atx->cmn.cursor, opts->cursor_cache_size );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( $(tn) ) failed", "tn=%s", table_name ) );
+ }
+ else
+ {
+ const VCursor * cursor = atx->cmn.cursor;
+
+ rc = prepare_cmn_table_rows( opts, &atx->cmn, true );
+
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_SAM_FLAGS, &atx->sam_flags_idx );
+
+ /* i don't have to add REF_NAME or REF_SEQ_ID, because i have it from the ref_obj later
+ i don't have to add REF_POS, because i have it from the iterator later
+ i don't have to add MAPQ, it is in the PlacementRecord later
+ ... when walking the iterator ...
+ */
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_MATE_ALIGN_ID, &atx->mate_align_id_idx );
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_MATE_REF_NAME, &atx->mate_ref_name_idx );
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_MATE_REF_POS, &atx->mate_ref_pos_idx );
+ if ( rc == 0 )
+ rc = add_column( cursor, COL_TEMPLATE_LEN, &atx->tlen_idx );
+
+ if ( rc != 0 )
+ VCursorRelease( cursor );
+ }
+ VTableRelease ( tbl ); /* the cursor keeps the table alive */
+ }
+ return rc;
+}
+
+
+static rc_t prepare_evidence_table_cursor( const samdump_opts * const opts, const VDatabase * db,
+ const char * table_name, align_table_context * const atx )
+{
+ const VTable *evidence_interval_tbl;
+ rc_t rc = VDatabaseOpenTableRead( db, &evidence_interval_tbl, table_name );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseOpenTableRead( $(tn) ) failed", "tn=%s", table_name ) );
+ }
+ else
+ {
+ if ( opts->cursor_cache_size == 0 )
+ rc = VTableCreateCursorRead( evidence_interval_tbl, &atx->cmn.cursor );
+ else
+ rc = VTableCreateCachedCursorRead( evidence_interval_tbl, &atx->cmn.cursor, opts->cursor_cache_size );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( $(tn) ) failed", "tn=%s", table_name ) );
+ }
+ else
+ {
+ rc = prepare_cmn_table_rows( opts, &atx->cmn, false );
+ if ( rc == 0 )
+ rc = add_column( atx->cmn.cursor, COL_PLOIDY, &atx->ploidy_idx );
+
+ if ( rc == 0 && opts->dump_cg_sam )
+ rc = add_column( atx->cmn.cursor, COL_EV_ALIGNMENTS, &atx->ev_alignments_idx );
+
+ if ( rc == 0 && opts->dump_cg_sam )
+ {
+ const VTable *evidence_alignment_tbl;
+ rc = VDatabaseOpenTableRead( db, &evidence_alignment_tbl, "EVIDENCE_ALIGNMENT" );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseOpenTableRead( $(tn) ) failed", "tn=%s", "EVIDENCE_ALIGNMENT" ) );
+ }
+ else
+ {
+ if ( opts->cursor_cache_size == 0 )
+ rc = VTableCreateCursorRead( evidence_alignment_tbl, &atx->eval.cursor );
+ else
+ rc = VTableCreateCachedCursorRead( evidence_alignment_tbl, &atx->eval.cursor, opts->cursor_cache_size );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( $(tn) ) failed", "tn=%s", "EVIDENCE_ALIGNMENT" ) );
+ }
+ else
+ {
+ rc = prepare_cmn_table_rows( opts, &atx->eval, false ); /* common to prim/sec/ev-align */
+ if ( rc == 0 )
+ {
+ /* special to ev-align */
+ rc = add_column( atx->eval.cursor, COL_REF_POS, &atx->ref_pos_idx );
+ if ( rc == 0 )
+ rc = add_column( atx->eval.cursor, COL_REF_PLOIDY, &atx->ref_ploidy_idx );
+ }
+ rc = VCursorOpen( atx->eval.cursor );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( $(tn) ) failed", "tn=%s", "EVIDENCE_ALIGNMENT" ) );
+ }
+ }
+ }
+ VTableRelease ( evidence_alignment_tbl ); /* the cursor keeps the table alive */
+ }
+ if ( rc != 0 )
+ VCursorRelease( atx->cmn.cursor );
+ }
+ VTableRelease ( evidence_interval_tbl ); /* the cursor keeps the table alive */
+ }
+ return rc;
+}
+
+
+static rc_t add_table_pl_iter( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+ const ReferenceObj * const ref_obj, const input_database * const ids,
+ INSDC_coord_zero ref_pos, INSDC_coord_len ref_len, const char * spot_group,
+ const char * table_name, align_id_src id_src_selector, Vector * const context_list )
+{
+ rc_t rc = 0;
+ align_table_context * atx;
+ PlacementRecordExtendFuncs ext_0; /* ReferenceObj_MakePlacementIterator makes copies of the elements */
+
+ memset( &ext_0, 0, sizeof ext_0 );
+ atx = calloc( sizeof *atx, 1 );
+ if ( atx == NULL )
+ {
+ rc = RC( rcExe, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ (void)PLOGERR( klogInt, ( klogInt, rc, "align-context-allocation for $(tn) failed", "tn=%s", table_name ) );
+ }
+ else
+ {
+ atx->db_idx = ids->db_idx;
+ atx->ref_obj = ref_obj;
+ invalidate_all_column_idx( atx );
+ rc = ReferenceObj_Idx( ref_obj, &atx->ref_idx );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "failed to detect ref-idx for $(tn) failed", "tn=%s", table_name ) );
+ }
+ else
+ {
+ switch( id_src_selector )
+ {
+ case primary_align_ids : atx->align_table_type = att_primary;
+ rc = prepare_prim_sec_table_cursor( opts, ids->db, table_name, atx );
+ break;
+
+ case secondary_align_ids : atx->align_table_type = att_secondary;
+ rc = prepare_prim_sec_table_cursor( opts, ids->db, table_name, atx );
+ break;
+
+ case evidence_align_ids : atx->align_table_type = att_evidence;
+ rc = prepare_evidence_table_cursor( opts, ids->db, table_name, atx );
+ break;
+ }
+ }
+ if ( rc == 0 )
+ {
+ ext_0.data = atx;
+ /* we must put the atx-ptr into a global list, in order to close everything later at the end... */
+ }
+ else
+ free( atx );
+ }
+
+ if ( rc == 0 )
+ {
+ int32_t min_mapq = 0;
+ PlacementIterator *pl_iter;
+
+ if ( opts->use_min_mapq )
+ min_mapq = opts->min_mapq;
+
+ rc = ReferenceObj_MakePlacementIterator( ref_obj, /* the reference-obj it is made from */
+ &pl_iter, /* the placement-iterator we want to make */
+ ref_pos, /* where it starts on the reference */
+ ref_len, /* the whole length of this reference/chromosome */
+ min_mapq, /* no minimal mapping-quality to filter out */
+ NULL, /* no special reference-cursor */
+ atx->cmn.cursor, /* a cursor into the PRIMARY/SECONDARY/EVIDENCE-table */
+ id_src_selector, /* what ID-source to select from REFERENCE-table (ref_obj) */
+ &ext_0, /* placement-record extensions #0 with data-ptr pointing to cursor/index-struct */
+ NULL, /* no placement-record extensions #1 */
+ spot_group ); /* no spotgroup re-grouping (yet) */
+ if ( rc == 0 )
+ {
+ rc = PlacementSetIteratorAddPlacementIterator ( set_iter, pl_iter );
+ if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+ }
+ }
+
+ if ( rc == 0 )
+ rc = VectorAppend ( context_list, NULL, atx );
+ return rc;
+}
+
+
+static rc_t add_pl_iter( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+ const ReferenceObj * const ref_obj, const input_database * const ids,
+ INSDC_coord_zero ref_pos, INSDC_coord_len ref_len,
+ const char * spot_group, Vector * const context_list )
+{
+ KNamelist *tables;
+ rc_t rc = VDatabaseListTbl( ids->db, &tables );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseListTbl( $(tn) ) failed", "tn=%s", ids->path ) );
+ }
+ else
+ {
+ if ( opts->dump_primary_alignments && namelist_contains( tables, "PRIMARY_ALIGNMENT" ) )
+ {
+ rc = add_table_pl_iter( opts, set_iter, ref_obj, ids, ref_pos, ref_len, spot_group,
+ "PRIMARY_ALIGNMENT", primary_align_ids, context_list );
+ }
+
+ if ( rc == 0 && opts->dump_secondary_alignments && namelist_contains( tables, "SECONDARY_ALIGNMENT" ) )
+ {
+ rc = add_table_pl_iter( opts, set_iter, ref_obj, ids, ref_pos, ref_len, spot_group,
+ "SECONDARY_ALIGNMENT", secondary_align_ids, context_list );
+ }
+
+ if ( rc == 0 && ( opts->dump_cg_evidence ) && namelist_contains( tables, "EVIDENCE_INTERVAL" ) )
+ {
+ rc = add_table_pl_iter( opts, set_iter, ref_obj, ids, ref_pos, ref_len, spot_group,
+ "EVIDENCE_INTERVAL", evidence_align_ids, context_list );
+ }
+ KNamelistRelease( tables );
+ }
+ return rc;
+}
+
+
+/* the user did not specify ranges on the reference, that means the whole file has to be dumped...
+ the reflist is iterated over all ref-objects it contains ... */
+static rc_t prepare_whole_files( const samdump_opts * const opts, const input_files * const ifs,
+ PlacementSetIterator * const set_iter, Vector * const context_list )
+{
+ rc_t rc = 0;
+ uint32_t db_idx;
+ /* we now loop through all input-databases... */
+ for ( db_idx = 0; db_idx < ifs->database_count && rc == 0; ++db_idx )
+ {
+ const input_database * ids = VectorGet( &ifs->dbs, db_idx );
+ if ( ids != NULL )
+ {
+ uint32_t refobj_count;
+ rc = ReferenceList_Count( ids->reflist, &refobj_count );
+ if ( rc == 0 && refobj_count > 0 )
+ {
+ uint32_t ref_idx;
+ for ( ref_idx = 0; ref_idx < refobj_count && rc == 0; ++ref_idx )
+ {
+ const ReferenceObj* ref_obj;
+ rc = ReferenceList_Get( ids->reflist, &ref_obj, ref_idx );
+ if ( rc == 0 && ref_obj != NULL )
+ {
+ INSDC_coord_len ref_len;
+ rc = ReferenceObj_SeqLength( ref_obj, &ref_len );
+ if ( rc == 0 )
+ rc = add_pl_iter( opts,
+ set_iter,
+ ref_obj,
+ ids,
+ 0, /* where it starts on the reference */
+ ref_len, /* the whole length of this reference/chromosome */
+ NULL, /* no spotgroup re-grouping (yet) */
+ context_list
+ );
+ ReferenceObj_Release( ref_obj );
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+typedef struct on_region_ctx
+{
+ rc_t rc;
+ const samdump_opts * opts;
+ input_database * ids;
+ PlacementSetIterator * set_iter;
+ Vector *context_list;
+} on_region_ctx;
+
+
+static void CC on_region( BSTNode *n, void *data )
+{
+ on_region_ctx * rctx = data;
+ if ( rctx->rc == 0 )
+ {
+ reference_region * ref_rgn = ( reference_region * )n;
+ const ReferenceObj * ref_obj;
+ rctx->rc = ReferenceList_Find( rctx->ids->reflist, &ref_obj, ref_rgn->name, string_size( ref_rgn->name ) );
+ if ( rctx->rc == 0 )
+ {
+ uint32_t range_idx, range_count = VectorLength( &ref_rgn->ranges );
+ for ( range_idx = 0; range_idx < range_count && rctx->rc == 0; ++range_idx )
+ {
+ range * r = VectorGet( &ref_rgn->ranges, range_idx );
+ if ( r != NULL )
+ {
+ INSDC_coord_len len;
+ if ( r->start == 0 && r->end == 0 )
+ {
+ r->start = 1;
+ rctx->rc = ReferenceObj_SeqLength( ref_obj, &len );
+ if ( rctx->rc == 0 )
+ r->end = ( r->start + len );
+ }
+ else
+ {
+ len = ( r->end - r->start + 1 );
+ }
+ if ( rctx->rc == 0 )
+ {
+ rctx->rc = add_pl_iter( rctx->opts, rctx->set_iter, ref_obj, rctx->ids,
+ r->start, /* where the range starts on the reference */
+ len, /* the length of this range */
+ NULL, /* no spotgroup re-grouping (yet) */
+ rctx->context_list
+ );
+ }
+ }
+ }
+ ReferenceObj_Release( ref_obj );
+ }
+ else
+ {
+ if ( GetRCState( rctx->rc ) == rcNotFound ) rctx->rc = 0;
+ }
+ }
+}
+
+
+static rc_t prepare_regions( const samdump_opts * const opts, const input_files * const ifs,
+ PlacementSetIterator * const set_iter, Vector * const context_list )
+{
+ uint32_t db_idx;
+ on_region_ctx rctx;
+
+ rctx.rc = 0;
+ rctx.opts = opts;
+ rctx.set_iter = set_iter;
+ rctx.context_list = context_list;
+ /* we now loop through all input-databases... */
+ for ( db_idx = 0; db_idx < ifs->database_count && rctx.rc == 0; ++db_idx )
+ {
+ rctx.ids = VectorGet( &ifs->dbs, db_idx );
+ if ( rctx.ids != NULL )
+ BSTreeForEach( ( BSTree * ) &opts->regions, false, on_region, &rctx );
+ }
+ return rctx.rc;
+}
+
+
+static uint32_t calc_mate_flags( uint32_t flags )
+{
+ uint32_t res = ( flags & 0x1 ) |
+ ( flags & 0x2 ) |
+ ( ( flags & 0x8 ) >> 1 ) |
+ ( ( flags & 0x4 ) << 1 ) |
+ ( ( flags & 0x20 ) >> 1 ) |
+ ( ( flags & 0x10 ) << 1 ) |
+ ( ( flags & 0x40 ) ? 0x80 : 0x40 ) |
+ ( flags & 0x700 );
+ return res;
+}
+
+
+static const char *equal_sign = "=";
+
+
+static rc_t print_slice( const char * source, uint32_t source_str_len, uint32_t *source_offset,
+ uint32_t *source_len_vector, uint32_t source_len_vector_len,
+ uint32_t slice_nr )
+{
+ rc_t rc = 0;
+ if ( *source_offset > source_str_len || slice_nr >= source_len_vector_len )
+ rc = RC( rcExe, rcNoTarg, rcReading, rcParam, rcInvalid );
+ else
+ {
+ uint32_t len = source_len_vector[ slice_nr ];
+ if ( len > 0 )
+ {
+ const char * ptr = &source[ *source_offset ];
+ rc = KOutMsg( "%.*s\t", len, ptr );
+ *source_offset += len;
+ }
+ else
+ rc = KOutMsg( "*\t" );
+ }
+ return rc;
+}
+
+
+static rc_t print_qslice( const samdump_opts * const opts, bool reverse, const char * source, uint32_t source_str_len,
+ uint32_t *source_offset, uint32_t *source_len_vector,
+ uint32_t source_len_vector_len, uint32_t slice_nr )
+{
+ rc_t rc = 0;
+ if ( *source_offset > source_str_len || slice_nr >= source_len_vector_len )
+ rc = RC( rcExe, rcNoTarg, rcReading, rcParam, rcInvalid );
+ else
+ {
+ uint32_t len = source_len_vector[ slice_nr ];
+ if ( len > 0 )
+ {
+ const char * ptr = &source[ *source_offset ];
+ rc = dump_quality_33( opts, ptr, len, reverse ); /* sam-dump-opts.c */
+ if ( rc == 0 )
+ {
+ rc = KOutMsg( "\t" );
+ if ( rc == 0 )
+ *source_offset += len;
+ }
+ }
+ else
+ rc = KOutMsg( "*\t" );
+ }
+ return rc;
+}
+
+
+static rc_t print_allel_name( const PlacementRecord * const rec, uint32_t ploidy_idx )
+{
+ rc_t rc = KOutMsg( "ALLELE_%li.%u\t", rec->id, ploidy_idx + 1 );
+ return rc;
+}
+
+static rc_t print_char_ptr( int64_t row_id, const VCursor * cursor, uint32_t col_idx )
+{
+ const char *ptr;
+ size_t len;
+ rc_t rc = read_char_ptr_and_size( row_id, cursor, col_idx, &ptr, &len );
+ if ( rc == 0 )
+ {
+ if ( len > 0 )
+ rc = KOutMsg( "%.*s\t", len, ptr );
+ else
+ rc = KOutMsg( "*\t" );
+ }
+ return rc;
+}
+
+
+static rc_t modify_and_print_cigar( int64_t row_id, const VCursor * cursor, uint32_t col_idx )
+{
+ cg_cigar_input input;
+ rc_t rc = read_char_ptr_and_size( row_id, cursor, col_idx, &input.cigar, &input.cigar_len );
+ if ( rc == 0 )
+ {
+ if ( input.cigar_len > 0 )
+ {
+ cg_cigar_output output;
+
+ input.orientation = false;
+ input.seq_req_id = 0;
+ input.edit_dist_available = false;
+ input.edit_dist = 0;
+ rc = make_cg_cigar( &input, &output ); /* cg_tools.c */
+ if ( rc == 0 )
+ rc = KOutMsg( "%.*s\t", output.cigar_len, output.cigar );
+ }
+ else
+ rc = KOutMsg( "*\t" );
+ }
+ return rc;
+}
+
+
+static rc_t print_evidence_alignment( const samdump_opts * const opts, const PlacementRecord * const rec,
+ const align_table_context * const atx, int64_t align_id, uint32_t ploidy_idx )
+{
+ uint32_t ref_ploidy;
+ const VCursor * cursor = atx->eval.cursor;
+ rc_t rc = read_uint32_t( align_id, cursor, atx->ref_ploidy_idx, &ref_ploidy, 0 );
+ if ( rc == 0 && ( ref_ploidy == ploidy_idx ) )
+ {
+ uint32_t sam_flags = 0x40;
+ INSDC_coord_zero ref_pos;
+ size_t ref_pos_len;
+
+ /* SAM-FIELD: QNAME constructed from allel-id/sub-id */
+ rc = KOutMsg( "%li\t", align_id );
+
+ if ( rc == 0 )
+ rc = read_INSDC_coord_zero( align_id, cursor, atx->ref_pos_idx, &ref_pos, &ref_pos_len );
+
+ /* SAM-FIELD: FLAG SRA-column: SAM_FLAGS ( uint32 ) */
+ /* SAM-FIELD: RNAME SRA-column: ALLEL-NAME.ploidy_idx */
+ /* SAM-FIELD: POS SRA-column: REF_POS + 1 */
+ /* SAM-FIELD: MAPQ SRA-column: MAPQ */
+ if ( rc == 0 )
+ rc = KOutMsg( "%u\tALLELE_%li.%u\t%i\t%d\t", sam_flags, rec->id, ploidy_idx, ref_pos + 1, rec->mapq );
+
+ /* SAM-FIELD: CIGAR SRA-column: CIGAR_SHORT / with special treatment */
+ if ( rc == 0 )
+ rc = modify_and_print_cigar( align_id, cursor, atx->eval.cigar_idx );
+
+
+ /* SAM-FIELD: RNEXT SRA-column: MATE_REF_NAME '*' no mates! */
+ /* SAM-FIELD: PNEXT SRA-column: MATE_REF_POS + 1 '0' no mates */
+ /* SAM-FIELD: TLEN SRA-column: TEMPLATE_LEN '0' not in table */
+ if ( rc == 0 )
+ rc = KOutMsg( "*\t0\t0\t" );
+
+ /* SAM-FIELD: SEQ SRA-column: READ */
+ if ( rc == 0 )
+ rc = print_char_ptr( align_id, cursor, atx->eval.read_idx );
+
+ /* SAM-FIELD: QUAL SRA-column: SAM_QUALITY */
+ if ( rc == 0 )
+ {
+ const char * quality;
+ size_t quality_str_len;
+
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->eval.sam_quality_idx, &quality, &quality_str_len );
+ if ( rc == 0 )
+ rc = dump_quality_33( opts, quality, quality_str_len, false );
+ }
+
+ /* OPT SAM-FIELD: XI SRA-column: ALIGN_ID */
+ if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+ rc = KOutMsg( "\tXI:i:%u", align_id );
+
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+
+ }
+ return rc;
+}
+
+
+static rc_t print_evidence_alignments( const samdump_opts * const opts, const PlacementRecord * const rec,
+ const align_table_context * const atx, uint32_t ploidy_idx )
+{
+ int64_t *ev_al_ids;
+ uint32_t ev_al_ids_count;
+ rc_t rc = read_int64_t_ptr( rec->id, atx->cmn.cursor, atx->ev_alignments_idx, &ev_al_ids, &ev_al_ids_count );
+ if ( rc == 0 && ev_al_ids_count > 0 )
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < ev_al_ids_count && rc == 0; ++idx )
+ {
+ rc = print_evidence_alignment( opts, rec, atx, ev_al_ids[ idx ], ploidy_idx );
+ }
+ }
+ return rc;
+}
+
+
+/* print minimal one alignment from the EVIDENCE-INTERVAL / EVIDENCE-ALIGNMENT - table(s) */
+static rc_t print_alignment_sam_ev( const samdump_opts * const opts, const char * ref_name,
+ INSDC_coord_zero pos,
+ const PlacementRecord * const rec, const align_table_context * const atx,
+ uint64_t * const rows_so_far )
+{
+ uint32_t ploidy;
+ const VCursor * cursor = atx->cmn.cursor;
+ rc_t rc = read_uint32_t( rec->id, cursor, atx->ploidy_idx, &ploidy, 0 );
+ if ( rc == 0 && ploidy > 0 )
+ {
+ uint32_t ploidy_idx, cigar_len_vector_len, read_len_vector_len, edit_dist_vector_len;
+ size_t cigar_str_len=0, read_str_len, quality_str_len;
+ uint32_t *cigar_len_vector;
+ uint32_t *read_len_vector;
+ uint32_t *edit_dist_vector;
+ uint32_t cigar_offset = 0;
+ uint32_t read_offset = 0;
+ uint32_t quality_offset = 0;
+ uint32_t sam_flags = 0x40;
+ const char * cigar = NULL;
+ const char * read;
+ const char * quality;
+
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.cigar_idx, &cigar, &cigar_str_len );
+ if ( rc == 0 )
+ rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.cigar_len_idx, &cigar_len_vector, &cigar_len_vector_len );
+ if ( rc == 0 )
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.read_idx, &read, &read_str_len );
+ if ( rc == 0 )
+ rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.read_len_idx, &read_len_vector, &read_len_vector_len );
+ if ( rc == 0 )
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.sam_quality_idx, &quality, &quality_str_len );
+ if ( rc == 0 )
+ rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.edit_dist_idx, &edit_dist_vector, &edit_dist_vector_len );
+
+ for ( ploidy_idx = 0; ploidy_idx < ploidy && rc == 0; ++ploidy_idx )
+ {
+ /* SAM-FIELD: QNAME SRA-column: eventually prefixed row-id into EVIDENCE_INTERVAL - table */
+ rc = print_allel_name( rec, ploidy_idx );
+
+ /* SAM-FIELD: FLAG SRA-column: SAM_FLAGS ( uint32 ) */
+ /* SAM-FIELD: RNAME SRA-column: REF_NAME / REF_SEQ_ID ( char * ) */
+ /* SAM-FIELD: POS SRA-column: REF_POS + 1 */
+ /* SAM-FIELD: MAPQ SRA-column: MAPQ */
+ if ( rc == 0 )
+ rc = KOutMsg( "%u\t%s\t%u\t%d\t", sam_flags, ref_name, pos + 1, rec->mapq );
+
+ /* SAM-FIELD: CIGAR SRA-column: CIGAR_SHORT / CIGAR_LONG sliced!!! */
+ if ( rc == 0 )
+ rc = print_slice( cigar, cigar_str_len, &cigar_offset, cigar_len_vector, cigar_len_vector_len, ploidy_idx );
+
+ /* SAM-FIELD: RNEXT SRA-column: MATE_REF_NAME ( !!! row_len can be zero !!! ) */
+ /* SAM-FIELD: PNEXT SRA-column: MATE_REF_POS + 1 ( !!! row_len can be zero !!! ) */
+ /* SAM-FIELD: TLEN SRA-column: TEMPLATE_LEN ( !!! row_len can be zero !!! ) */
+ if ( rc == 0 )
+ rc = KOutMsg( "*\t%u\t%d\t", 0, 0 );
+
+ /* SAM-FIELD: SEQ SRA-column: READ sliced!!! */
+ if ( rc == 0 )
+ rc = print_slice( read, read_str_len, &read_offset, read_len_vector, read_len_vector_len, ploidy_idx );
+
+ /* SAM-FIELD: QUAL SRA-column: SAM_QUALITY sliced!!! */
+ if ( rc == 0 )
+ rc = print_qslice( opts, false, quality, quality_str_len, &quality_offset, read_len_vector, read_len_vector_len, ploidy_idx );
+
+ /* OPT SAM-FIELD: XI SRA-column: ALIGN_ID */
+ if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+ rc = KOutMsg( "\tXI:i:%u", rec->id );
+
+ /* OPT SAM-FIELD: NM SRA-column: EDIT_DISTANCE sliced!!! */
+ if ( rc == 0 )
+ {
+ if ( ploidy_idx < edit_dist_vector_len )
+ rc = KOutMsg( "\tNM:i:%u", edit_dist_vector[ ploidy_idx ] );
+ }
+
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+
+ (*rows_so_far)++;
+
+ /* we do that here per ALLEL-READ, not at the end per ALLEL, because we have to test which alignments
+ fit the ploidy_idx */
+ if ( rc == 0 && opts->dump_cg_sam )
+ rc = print_evidence_alignments( opts, rec, atx, ploidy_idx + 1 );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t print_alignment_sam_ps( const samdump_opts * const opts, const char * ref_name,
+ INSDC_coord_zero pos, matecache * const mc,
+ const PlacementRecord * const rec, const align_table_context * const atx,
+ uint64_t * const rows_so_far )
+{
+ uint32_t sam_flags = 0;
+ INSDC_coord_zero mate_ref_pos = 0;
+ INSDC_coord_len tlen = 0;
+ int64_t mate_align_id = 0;
+ const char * mate_ref_name = ref_name;
+ size_t mate_ref_name_len = string_size( ref_name );
+ size_t mate_ref_pos_len = 0;
+ const VCursor * cursor = atx->cmn.cursor;
+ int64_t *seq_spot_id;
+ uint32_t seq_spot_id_len;
+
+ /* SAM-FIELD: NONE SRA-column: MATE_ALIGN_ID ( int64 ) ... for cache lookup's */
+ rc_t rc = read_int64( rec->id, cursor, atx->mate_align_id_idx, &mate_align_id, 0 );
+
+ /* pre-read seq-spot-id, needed for unaligned cache and SAM-field QNAME */
+ if ( rc == 0 )
+ rc = read_int64_t_ptr( rec->id, cursor, atx->cmn.seq_spot_id_idx, &seq_spot_id, &seq_spot_id_len );
+
+ /* try to find the info about the mate in the CACHE... */
+ if ( rc == 0 )
+ {
+ if ( mate_align_id != 0 )
+ {
+ if ( opts->use_mate_cache && mc != NULL )
+ {
+ rc = matecache_lookup_same_ref( mc, atx->db_idx, mate_align_id, &mate_ref_pos, &sam_flags, &tlen );
+ if ( rc == 0 )
+ {
+ const INSDC_read_filter * read_filter;
+ uint32_t read_filter_len;
+
+ /* cache entry-found! (on the same reference) -> that means we have now mate_ref_pos, flags and tlen */
+ rc = matecache_remove_same_ref( mc, atx->db_idx, mate_align_id );
+ mate_ref_name = equal_sign;
+ mate_ref_name_len = 1;
+ mate_ref_pos_len = 1;
+
+ /* read the read-filter column and adjust the sam-flags value to reflect the presense
+ of the flag SRA_READ_FILTER_REJECT, if it is there switch 0x200 on, of not switch 0x200 off */
+ rc = read_INSDC_read_filter_ptr( rec->id, cursor, atx->cmn.read_filter_idx, &read_filter, &read_filter_len );
+ if ( rc == 0 && read_filter_len > 0 )
+ {
+ if ( ( read_filter[ 0 ] & READ_FILTER_REJECT ) == READ_FILTER_REJECT )
+ sam_flags |= 0x200;
+ else
+ sam_flags &= ~0x200;
+
+ if ( ( read_filter[ 0 ] & READ_FILTER_CRITERIA ) == READ_FILTER_CRITERIA )
+ sam_flags |= 0x400;
+ else
+ sam_flags &= ~0x400;
+ }
+ }
+ }
+ else
+ {
+ rc = RC( rcApp, rcNoTarg, rcAccessing, rcItem, rcNotFound );
+ }
+ }
+
+ if ( ( mate_align_id != 0 && GetRCState( rc ) == rcNotFound )||( mate_align_id == 0 ) )
+ {
+ /* no cache entry-found OR do not use mate-cache
+ ---> that means we have to read it from the table... */
+
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->mate_ref_name_idx, &mate_ref_name, &mate_ref_name_len );
+ if ( rc == 0 )
+ rc = read_INSDC_coord_zero( rec->id, cursor, atx->mate_ref_pos_idx, &mate_ref_pos, &mate_ref_pos_len );
+ if ( rc == 0 )
+ rc = read_INSDC_coord_len( rec->id, cursor, atx->tlen_idx, &tlen );
+ if ( rc == 0 )
+ rc = read_uint32_t( rec->id, cursor, atx->sam_flags_idx, &sam_flags, 0 );
+
+ if ( rc == 0 )
+ {
+ if ( mate_align_id != 0 )
+ {
+ /* now that we have the data, store it in sam-ref-cache it the mate is on the same ref. */
+ if ( mate_ref_name_len > 0 )
+ {
+ int cmp = string_cmp( mate_ref_name, mate_ref_name_len, ref_name, string_size( ref_name ), mate_ref_name_len );
+ if ( cmp == 0 )
+ {
+ if ( opts->use_mate_cache )
+ {
+ uint32_t mate_flags = calc_mate_flags( sam_flags );
+ rc = matecache_insert_same_ref( mc, atx->db_idx, rec->id, pos, mate_flags, -tlen );
+ }
+ mate_ref_name = equal_sign;
+ mate_ref_name_len = 1;
+ }
+ }
+ }
+ else if ( opts->print_half_unaligned_reads )
+ {
+ if ( opts->use_mate_cache )
+ {
+ rc = matecache_insert_unaligned( mc, atx->db_idx, rec->id, pos, atx->ref_idx, *seq_spot_id );
+ }
+ }
+ }
+ }
+ }
+
+ if ( rc == 0 && opts->use_matepair_filter )
+ {
+ if ( !filter_by_matepair_dist( opts, tlen ) )
+ return 0;
+ }
+
+ (*rows_so_far)++;
+
+ /* SAM-FIELD: QNAME SRA-column: SEQ_SPOT_ID ( int64 ) */
+ if ( rc == 0 )
+ {
+ if ( seq_spot_id_len > 0 )
+ {
+ if ( opts->print_spot_group_in_name | opts->print_cg_names )
+ {
+ const char * spot_group;
+ size_t spot_group_len;
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.seq_spot_group_idx, &spot_group, &spot_group_len );
+ if ( rc == 0 )
+ rc = dump_name( opts, *seq_spot_id, spot_group, spot_group_len );
+ }
+ else
+ rc = dump_name( opts, *seq_spot_id, NULL, 0 );
+ }
+ else
+ rc = KOutMsg( "*" );
+ }
+
+ if ( rc == 0 )
+ rc = KOutMsg( "\t" );
+
+
+ /* massage the sam-flag if we are not dumping unaligned reads... */
+ if ( !opts->dump_unaligned_reads /** not going to dump unaligned **/
+ && ( sam_flags & 0x1 ) /** but we have sequenced multiple fragments **/
+ && ( sam_flags & 0x8 ) ) /** and not all of them align **/
+ {
+ /*** remove flags talking about multiple reads **/
+ /* turn off 0x001 0x008 0x040 0x080 */
+ sam_flags &= ~0xC9;
+ }
+
+ /* SAM-FIELD: FLAG SRA-column: SAM_FLAGS ( uint32 ) */
+ /* SAM-FIELD: RNAME SRA-column: REF_NAME / REF_SEQ_ID ( char * ) */
+ /* SAM-FIELD: POS SRA-column: REF_POS + 1 */
+ /* SAM-FIELD: MAPQ SRA-column: MAPQ */
+ if ( rc == 0 )
+ rc = KOutMsg( "%u\t%s\t%u\t%d\t", sam_flags, ref_name, pos + 1, rec->mapq );
+
+ /* SAM-FIELD: CIGAR SRA-column: CIGAR_SHORT / CIGAR_LONG */
+ if ( rc == 0 )
+ rc = print_char_ptr( rec->id, cursor, atx->cmn.cigar_idx );
+
+ /* SAM-FIELD: RNEXT SRA-column: MATE_REF_NAME ( !!! row_len can be zero !!! ) */
+ /* SAM-FIELD: PNEXT SRA-column: MATE_REF_POS + 1 ( !!! row_len can be zero !!! ) */
+ /* SAM-FIELD: TLEN SRA-column: TEMPLATE_LEN ( !!! row_len can be zero !!! ) */
+ if ( rc == 0 )
+ {
+ if ( mate_ref_name_len > 0 )
+ {
+ rc = KOutMsg( "%.*s\t%u\t%d\t", mate_ref_name_len, mate_ref_name, mate_ref_pos + 1, tlen );
+ }
+ else
+ {
+ if ( mate_ref_pos_len == 0 )
+ rc = KOutMsg( "*\t0\t%d\t", tlen );
+ else
+ rc = KOutMsg( "*\t%u\t%d\t", mate_ref_pos + 1, tlen );
+ }
+ }
+
+ /* SAM-FIELD: SEQ SRA-column: READ */
+ if ( rc == 0 )
+ rc = print_char_ptr( rec->id, cursor, atx->cmn.read_idx );
+
+ /* SAM-FIELD: QUAL SRA-column: SAM_QUALITY */
+ if ( rc == 0 )
+ {
+ const char * quality;
+ size_t quality_len;
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.sam_quality_idx, &quality, &quality_len );
+ if ( rc == 0 )
+ {
+ if ( quality_len > 0 )
+ rc = dump_quality_33( opts, quality, quality_len, false );
+ else
+ rc = KOutMsg( "*" );
+ }
+ }
+
+ /* OPT SAM-FIELD: RG SRA-column: SPOT_GROUP */
+ if ( rc == 0 )
+ {
+ if ( atx->cmn.seq_spot_group_idx != COL_NOT_AVAILABLE )
+ {
+ const char * spot_grp;
+ size_t spot_grp_len;
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.seq_spot_group_idx, &spot_grp, &spot_grp_len );
+ if ( rc == 0 && spot_grp_len > 0 )
+ rc = KOutMsg( "\tRG:Z:%.*s", spot_grp_len, spot_grp );
+ }
+ }
+
+ /* OPT SAM-FIELD: XI SRA-column: ALIGN_ID */
+ if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+ rc = KOutMsg( "\tXI:i:%u", rec->id );
+
+ /* OPT SAM-FIELD: NM SRA-column: EDIT_DISTANCE */
+ if ( rc == 0 )
+ {
+ uint32_t *edit_dist;
+ uint32_t edit_dist_len;
+ rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.edit_dist_idx, &edit_dist, &edit_dist_len );
+ if ( rc == 0 && edit_dist_len > 0 )
+ rc = KOutMsg( "\tNM:i:%u", *edit_dist );
+ }
+
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+ return rc;
+}
+
+
+static rc_t print_alignment_fastx( const samdump_opts * const opts, const char * ref_name,
+ INSDC_coord_zero pos, matecache * const mc,
+ const PlacementRecord * const rec, const align_table_context * const atx,
+ uint64_t * const rows_so_far )
+{
+ bool orientation;
+ const VCursor *cursor = atx->cmn.cursor;
+ int64_t mate_align_id;
+ int64_t * seq_spot_id;
+ uint32_t seq_spot_id_len;
+
+ rc_t rc = read_int64_t_ptr( rec->id, cursor, atx->cmn.seq_spot_id_idx, &seq_spot_id, &seq_spot_id_len );
+
+ /* this is here to detect if the mate is aligned, if NOT, we want to put it into the unaligned-cache! */
+ if ( rc == 0 && opts->print_half_unaligned_reads )
+ {
+ rc = read_int64( rec->id, cursor, atx->mate_align_id_idx, &mate_align_id, 0 );
+ if ( rc == 0 && mate_align_id == 0 && mc != NULL && opts->use_mate_cache )
+ {
+ rc = matecache_insert_unaligned( mc, atx->db_idx, rec->id, pos, atx->ref_idx, *seq_spot_id );
+ }
+ }
+
+ ( *rows_so_far )++;
+
+ if ( opts->output_format == of_fastq )
+ rc = KOutMsg( "@" );
+ else
+ rc = KOutMsg( ">" );
+
+ /* SAM-FIELD: QNAME 1.row: name */
+ if ( rc == 0 )
+ {
+ if ( seq_spot_id_len > 0 )
+ {
+ if ( opts->print_spot_group_in_name )
+ {
+ const char * spot_grp;
+ size_t spot_grp_len;
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.seq_spot_group_idx, &spot_grp, &spot_grp_len );
+ if ( rc == 0 )
+ rc = dump_name( opts, *seq_spot_id, spot_grp, spot_grp_len );
+ }
+ else
+ rc = dump_name( opts, *seq_spot_id, NULL, 0 );
+ }
+ else
+ rc = KOutMsg( "*" );
+
+ if ( rc == 0 )
+ {
+ uint32_t * seq_read_id;
+ uint32_t seq_read_id_len;
+ rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.seq_read_id_idx, &seq_read_id, &seq_read_id_len );
+ if ( rc == 0 && seq_read_id_len > 0 )
+ rc = KOutMsg( "/%u", *seq_read_id );
+ }
+ }
+
+ /* SRA-column: REF_ORIENTATION ( bool ) ... needed for quality */
+ if ( rc == 0 )
+ rc = read_bool( rec->id, cursor, atx->cmn.ref_orientation_idx, &orientation, false );
+
+ /* source of the alignment: primary/secondary/evidence */
+ if ( rc == 0 )
+ {
+ switch( atx->align_table_type )
+ {
+ case att_primary : rc = KOutMsg( " primary" ); break;
+ case att_secondary : rc = KOutMsg( " secondary" ); break;
+ case att_evidence : rc = KOutMsg( " evidence" ); break;
+ }
+ }
+
+ /* against what reference aligned, at what position, with what mapping-quality */
+ if ( rc == 0 )
+ rc = KOutMsg( " ref=%s pos=%u mapq=%i\n", ref_name, pos + 1, rec->mapq );
+
+ /* READ at a new line */
+ if ( rc == 0 )
+ {
+ const char * read;
+ size_t read_size;
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.raw_read_idx, &read, &read_size );
+ if ( rc == 0 )
+ {
+ if ( read_size > 0 )
+ rc = KOutMsg( "%.*s\n", read_size, read );
+ else
+ rc = KOutMsg( "*\n" );
+ }
+ }
+
+ /* QUALITY on a new line if in fastq-mode */
+ if ( rc == 0 && opts->output_format == of_fastq )
+ {
+ rc = KOutMsg( "+\n" );
+ if ( rc == 0 )
+ {
+ const char * quality;
+ size_t quality_size;
+ rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.sam_quality_idx, &quality, &quality_size );
+ if ( rc == 0 )
+ {
+ if ( quality_size > 0 )
+ rc = dump_quality_33( opts, quality, quality_size, false );
+ else
+ rc = KOutMsg( "*" );
+ }
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+ }
+ }
+
+ return rc;
+}
+
+
+/* print one record of alignment-information in SAM-format */
+static rc_t walk_position( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+ const char * ref_name, INSDC_coord_zero pos,
+ matecache * const mc, uint64_t * const rows_so_far )
+{
+ rc_t rc = 0;
+ while ( rc == 0 && !test_limit_reached( opts, *rows_so_far ) )
+ {
+ rc = Quitting ();
+ if ( rc == 0 )
+ {
+ const PlacementRecord *rec;
+ rc = PlacementSetIteratorNextRecordAt( set_iter, pos, &rec );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "PlacementSetIteratorNextRecordAt() failed" );
+ }
+ }
+ else
+ {
+ align_table_context * atx = PlacementRecord_get_ext_data_ptr( rec, placementRecordExtension0 );
+ if ( atx == NULL )
+ {
+ rc = RC( rcExe, rcNoTarg, rcReading, rcParam, rcNull );
+ LOGERR( klogInt, rc, "no placement-record-context available" );
+ }
+ else
+ {
+ if ( opts->output_format == of_sam )
+ {
+ if ( atx->align_table_type == att_evidence )
+ rc = print_alignment_sam_ev( opts, ref_name, pos, rec, atx, rows_so_far );
+ else
+ rc = print_alignment_sam_ps( opts, ref_name, pos, mc, rec, atx, rows_so_far );
+ }
+ else
+ rc = print_alignment_fastx( opts, ref_name, pos, mc, rec, atx, rows_so_far );
+ }
+ }
+ }
+ }
+ if ( GetRCState( rc ) == rcDone ) rc = 0;
+ return rc;
+}
+
+
+static rc_t walk_window( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+ const char * ref_name, matecache * const mc, uint64_t * const rows_so_far )
+{
+ rc_t rc = 0;
+ while ( rc == 0 && !test_limit_reached( opts, *rows_so_far ) )
+ {
+ rc = Quitting ();
+ if ( rc == 0 )
+ {
+ INSDC_coord_zero pos;
+ rc = PlacementSetIteratorNextAvailPos( set_iter, &pos, NULL );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "PlacementSetIteratorNextAvailPos() failed" );
+ }
+ }
+ else
+ {
+ rc = walk_position( opts, set_iter, ref_name, pos, mc, rows_so_far );
+ }
+ }
+ }
+ if ( GetRCState( rc ) == rcDone ) rc = 0;
+ return rc;
+}
+
+
+static rc_t walk_reference( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+ struct ReferenceObj const * ref_obj, const char * ref_name,
+ matecache * const mc, uint64_t * const rows_so_far )
+{
+ rc_t rc = 0;
+ while ( rc == 0 && !test_limit_reached( opts, *rows_so_far ) )
+ {
+ rc = Quitting ();
+ if ( rc == 0 )
+ {
+ INSDC_coord_zero first_pos;
+ INSDC_coord_len len;
+ rc = PlacementSetIteratorNextWindow( set_iter, &first_pos, &len );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "PlacementSetIteratorNextWindow() failed" );
+ }
+ }
+ else
+ rc = walk_window( opts, set_iter, ref_name, mc, rows_so_far );
+ }
+ }
+ if ( GetRCState( rc ) == rcDone ) rc = 0;
+
+ if ( rc == 0 && mc != NULL && opts->use_mate_cache )
+ rc = matecache_clear_same_ref( mc );
+
+ return rc;
+}
+
+
+static rc_t walk_placements( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+ matecache * const mc, uint64_t * const rows_so_far )
+{
+ rc_t rc = 0;
+ while ( rc == 0 && !test_limit_reached( opts, *rows_so_far ) )
+ {
+ struct ReferenceObj const * ref_obj;
+
+ rc = PlacementSetIteratorNextReference( set_iter, NULL, NULL, &ref_obj );
+ if ( rc == 0 )
+ {
+ if ( ref_obj != NULL )
+ {
+ const char * ref_name = NULL;
+ if ( opts->use_seqid_as_refname )
+ rc = ReferenceObj_SeqId( ref_obj, &ref_name );
+ else
+ rc = ReferenceObj_Name( ref_obj, &ref_name );
+
+ if ( rc == 0 )
+ rc = walk_reference( opts, set_iter, ref_obj, ref_name, mc, rows_so_far );
+ else
+ {
+ if ( opts->use_seqid_as_refname )
+ {
+ (void)LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+ }
+ else
+ {
+ (void)LOGERR( klogInt, rc, "ReferenceObj_Name() failed" );
+ }
+ }
+ }
+ }
+ else if ( GetRCState( rc ) != rcDone )
+ {
+ (void)LOGERR( klogInt, rc, "ReferenceIteratorNextReference() failed" );
+ }
+ }
+
+ if ( GetRCState( rc ) == rcDone )
+ rc = 0;
+ return rc;
+}
+
+
+static void CC destroy_align_table_context( void *item, void *data )
+{
+ align_table_context * atx = item;
+ VCursorRelease( atx->cmn.cursor );
+ VCursorRelease( atx->eval.cursor );
+ free( atx );
+}
+
+
+static rc_t print_all_aligned_spots_of_this_reference( const samdump_opts * const opts, const input_database * const ids,
+ matecache * const mc, const AlignMgr * const a_mgr,
+ const ReferenceObj * const ref_obj, uint64_t * const rows_so_far )
+{
+ PlacementSetIterator * set_iter;
+ /* the we ask the alignment-manager to produce a placement-set-iterator... */
+ rc_t rc = AlignMgrMakePlacementSetIterator( a_mgr, &set_iter );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot create PlacementSetIterator" );
+ }
+ else
+ {
+ /* here we need a vector to passed along into the creation of the iterators */
+ Vector context_list;
+ INSDC_coord_len ref_len;
+
+ VectorInit ( &context_list, 0, 5 );
+
+ rc = ReferenceObj_SeqLength( ref_obj, &ref_len );
+ if ( rc == 0 )
+ {
+ rc = add_pl_iter( opts, set_iter, ref_obj, ids,
+ 0, /* where it starts on the reference */
+ ref_len, /* the whole length of this reference/chromosome */
+ NULL, /* no spotgroup re-grouping (yet) */
+ &context_list
+ );
+ if ( rc == 0 )
+ rc = walk_placements( opts, set_iter, mc, rows_so_far );
+ }
+
+ /* walk the context_list to free the align_table_context records, close/free the cursors... */
+ VectorWhack ( &context_list, destroy_align_table_context, NULL );
+ PlacementSetIteratorRelease( set_iter );
+ }
+ return rc;
+}
+
+
+/*
+ the user did not specify regions, print all alignments from all input-files
+ this is strategy #1 to do this, create a ref_iter for every reference each
+ + ... less cursors will be open at the same time, more resource efficient
+ - ... if more than one input-file, the output will be sorted only within each reference
+*/
+static rc_t print_all_aligned_spots_0( const samdump_opts * const opts, const input_files * const ifs,
+ matecache * const mc, const AlignMgr * const a_mgr, uint64_t * const rows_so_far )
+{
+ rc_t rc = 0;
+ uint32_t db_idx;
+ /* we now loop through all input-databases... */
+ for ( db_idx = 0; db_idx < ifs->database_count && rc == 0; ++db_idx )
+ {
+ const input_database * ids = VectorGet( &ifs->dbs, db_idx );
+ if ( ids != NULL )
+ {
+ uint32_t refobj_count;
+ rc = ReferenceList_Count( ids->reflist, &refobj_count );
+ if ( rc == 0 && refobj_count > 0 )
+ {
+ uint32_t ref_idx;
+ for ( ref_idx = 0; ref_idx < refobj_count && rc == 0; ++ref_idx )
+ {
+ const ReferenceObj * ref_obj;
+ rc = ReferenceList_Get( ids->reflist, &ref_obj, ref_idx );
+ if ( rc == 0 && ref_obj != NULL )
+ {
+ rc = print_all_aligned_spots_of_this_reference( opts, ids, mc, a_mgr, ref_obj, rows_so_far );
+ ReferenceObj_Release( ref_obj );
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+/*
+ the user did not specify regions, print all alignments from all input-files
+ this is strategy #2 to do this, throw all iterators for all input-files and all there references
+ into one set_iter.
+ + ... if more than one input-file, everything will be sorted
+ - ... creates a large number of open cursors ( because of sub-cursors due to schema-functions )
+ this can result in not beeing able to perform the functions at all because of running out of resources
+ - ... a long delay at start up, before the 1st alignment is printed ( all the cursors have to be opened )
+*/
+static rc_t print_all_aligned_spots_1( const samdump_opts * const opts, const input_files * const ifs,
+ matecache * const mc, const AlignMgr * const a_mgr, uint64_t * const rows_so_far )
+{
+ PlacementSetIterator * set_iter;
+ /* the we ask the alignment-manager to produce a placement-set-iterator... */
+ rc_t rc = AlignMgrMakePlacementSetIterator( a_mgr, &set_iter );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot create PlacementSetIterator" );
+ }
+ else
+ {
+ /* here we need a vector to passed along into the creation of the iterators */
+ Vector context_list;
+ VectorInit ( &context_list, 0, 5 );
+
+ rc = prepare_whole_files( opts, ifs, set_iter, &context_list );
+
+ if ( rc == 0 )
+ rc = walk_placements( opts, set_iter, mc, rows_so_far );
+
+ /* walk the context_list to free the align_table_context records, close/free the cursors... */
+ VectorWhack ( &context_list, destroy_align_table_context, NULL );
+ PlacementSetIteratorRelease( set_iter );
+ }
+ return rc;
+}
+
+
+/*
+ the user has specified certain regions on the references,
+ print only alignments, that start in these regions
+*/
+static rc_t print_selected_aligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+ matecache * const mc, const AlignMgr * const a_mgr, uint64_t * const rows_so_far )
+{
+ PlacementSetIterator * set_iter;
+ /* the we ask the alignment-manager to produce a placement-set-iterator... */
+ rc_t rc = AlignMgrMakePlacementSetIterator( a_mgr, &set_iter );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot create PlacementSetIterator" );
+ }
+ else
+ {
+ /* here we need a vector to passed along into the creation of the iterators */
+ Vector context_list;
+ VectorInit ( &context_list, 0, 5 );
+
+ rc = prepare_regions( opts, ifs, set_iter, &context_list );
+
+ if ( rc == 0 )
+ rc = walk_placements( opts, set_iter, mc, rows_so_far );
+
+ /* walk the context_list to free the align_table_context records, close/free the cursors... */
+ VectorWhack ( &context_list, destroy_align_table_context, NULL );
+
+ PlacementSetIteratorRelease( set_iter );
+ }
+ return rc;
+}
+
+
+/*
+ this is called from sam-dump3.c, it prepares the iterators and then walks them
+ ---> only entry into this module <---
+*/
+rc_t print_aligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+ matecache * const mc, uint64_t * const rows_so_far )
+{
+ const AlignMgr * a_mgr;
+ /* first we make an alignment-manager */
+ rc_t rc = AlignMgrMakeRead( &a_mgr );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot create alignment-manager" );
+ }
+ else
+ {
+ if ( opts->region_count == 0 )
+ {
+ /* the user did not specify regions to be printed ==> print all alignments */
+ switch( opts->dump_mode )
+ {
+ case dm_one_ref_at_a_time : rc = print_all_aligned_spots_0( opts, ifs, mc, a_mgr, rows_so_far ); break;
+ case dm_prepare_all_refs : rc = print_all_aligned_spots_1( opts, ifs, mc, a_mgr, rows_so_far ); break;
+ }
+ }
+ else
+ {
+ /* the user did specify regions to be printed ==> print only the alignments in these regions */
+ rc = print_selected_aligned_spots( opts, ifs, mc, a_mgr, rows_so_far );
+ }
+ AlignMgrRelease( a_mgr );
+ }
+ return rc;
+}
diff --git a/tools/sra-pileup/sam-aligned.h b/tools/sra-pileup/sam-aligned.h
new file mode 100644
index 0000000..b8a4260
--- /dev/null
+++ b/tools/sra-pileup/sam-aligned.h
@@ -0,0 +1,45 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_aligned_
+#define _h_sam_aligned_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+#include "matecache.h"
+
+#define COL_READ "(INSDC:dna:text)READ"
+
+rc_t print_aligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+ matecache * const mc, uint64_t * const rows_so_far );
+
+#endif
\ No newline at end of file
diff --git a/tools/sra-pileup/sam-dump-opts.c b/tools/sra-pileup/sam-dump-opts.c
new file mode 100644
index 0000000..6a069c1
--- /dev/null
+++ b/tools/sra-pileup/sam-dump-opts.c
@@ -0,0 +1,1493 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#include "sam-dump-opts.h"
+#include <align/quality-quantizer.h>
+#include <sysalloc.h>
+
+#define CURSOR_CACHE_SIZE 256*1024*1024
+
+/* =========================================================================================== */
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+ int res = 0;
+ if ( ( a != NULL )&&( b != NULL ) )
+ {
+ size_t len_a = string_size( a );
+ size_t len_b = string_size( b );
+ res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+ }
+ return res;
+}
+
+
+/* =========================================================================================== */
+
+
+static range * make_range( const uint64_t start, const uint64_t end )
+{
+ range *res = calloc( sizeof *res, 1 );
+ if ( res != NULL )
+ {
+ res->start = start;
+ res->end = end;
+ }
+ return res;
+}
+
+
+static int cmp_range( const range * a, const range * b )
+{
+
+ int res = ( a->start - b->start );
+ if ( res == 0 )
+ res = ( a->end - b->end );
+ return res;
+}
+
+
+static bool range_overlapp( const range * a, const range * b )
+{
+ return ( !( ( b->end < a->start ) || ( b->start > a->end ) ) );
+}
+
+
+/* =========================================================================================== */
+
+
+static reference_region * make_reference_region( const char *name )
+{
+ reference_region *res = calloc( sizeof *res, 1 );
+ if ( res != NULL )
+ {
+ res->name = string_dup_measure ( name, NULL );
+ if ( res->name == NULL )
+ {
+ free( res );
+ res = NULL;
+ }
+ else
+ VectorInit ( &res->ranges, 0, 5 );
+ }
+ return res;
+}
+
+
+static int CC cmp_range_wrapper( const void *item, const void *n )
+{ return cmp_range( item, n ); }
+
+
+static rc_t add_ref_region_range( reference_region * self, const uint64_t start, const uint64_t end )
+{
+ rc_t rc = 0;
+ range *r = make_range( start, end );
+ if ( r == NULL )
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ rc = VectorInsert ( &self->ranges, r, NULL, cmp_range_wrapper );
+ if ( rc != 0 )
+ free( r );
+ }
+ return rc;
+}
+
+
+#define RR_NAME 1
+#define RR_START 2
+#define RR_END 3
+
+
+static void put_c( char *s, size_t size, size_t *dst, char c )
+{
+ if ( *dst < ( size - 1 ) )
+ s[ *dst ] = c;
+ (*dst)++;
+}
+
+static void finish_txt( char *s, size_t size, size_t *dst )
+{
+ if ( *dst > size )
+ s[ size - 1 ] = 0;
+ else
+ s[ *dst ] = 0;
+ *dst = 0;
+}
+
+static uint64_t finish_num( char *s, size_t size, size_t *dst )
+{
+ uint64_t res = 0;
+ char *endp;
+ finish_txt( s, size, dst );
+ res = strtou64( s, &endp, 10 );
+ return res;
+}
+
+
+/* s = refname:1000-2000 */
+static void parse_definition( const char *s, char * name, size_t len,
+ uint64_t *start, uint64_t *end )
+{
+ size_t n = string_size( s );
+
+ *start = 0;
+ *end = 0;
+ name[ 0 ] = 0;
+ if ( n > 0 )
+ {
+ size_t i, st, dst = 0;
+ char tmp[ 32 ];
+ st = RR_NAME;
+ for ( i = 0; i < n; ++i )
+ {
+ char c = s[ i ];
+ switch( st )
+ {
+ case RR_NAME : if ( c == ':' )
+ {
+ finish_txt( name, len, &dst );
+ st = RR_START;
+ }
+ else
+ {
+ put_c( name, len, &dst, c );
+ }
+ break;
+
+ case RR_START : if ( c == '-' )
+ {
+ *start = finish_num( tmp, sizeof tmp, &dst );
+ st = RR_END;
+ }
+ else if ( ( c >= '0' )&&( c <= '9' ) )
+ {
+ put_c( tmp, sizeof tmp, &dst, c );
+ }
+ break;
+
+ case RR_END : if ( ( c >= '0' )&&( c <= '9' ) )
+ {
+ put_c( tmp, sizeof tmp, &dst, c );
+ }
+ break;
+ }
+ }
+ switch( st )
+ {
+ case RR_NAME : finish_txt( name, len, &dst );
+ break;
+
+ case RR_START : *start = finish_num( tmp, sizeof tmp, &dst );
+ break;
+
+ case RR_END : *end = finish_num( tmp, sizeof tmp, &dst );
+ break;
+ }
+ }
+}
+
+
+static void CC release_range_wrapper( void * item, void * data )
+{
+ free( item );
+}
+
+
+static void free_reference_region( reference_region * self )
+{
+ free( (void*)self->name );
+ VectorWhack ( &self->ranges, release_range_wrapper, NULL );
+ free( self );
+}
+
+
+static void check_ref_region_ranges( reference_region * self )
+{
+ uint32_t n = VectorLength( &self->ranges );
+ uint32_t i = 0;
+ range *a = NULL;
+ while ( i < n )
+ {
+ range *b = VectorGet ( &self->ranges, i );
+ bool remove = false;
+ if ( a != NULL )
+ {
+ remove = range_overlapp( a, b );
+ if ( remove )
+ {
+ range *r;
+ a->end = b->end;
+ VectorRemove ( &self->ranges, i, (void**)&r );
+ free( r );
+ n--;
+ }
+ }
+ if ( !remove )
+ {
+ a = b;
+ ++i;
+ }
+ }
+}
+
+
+/* =========================================================================================== */
+
+
+static int CC reference_vs_pchar_wrapper( const void *item, const BSTNode *n )
+{
+ const reference_region * r = ( const reference_region * )n;
+ return cmp_pchar( (const char *)item, r->name );
+}
+
+static reference_region * find_reference_region( BSTree * regions, const char * name )
+{
+ return ( reference_region * ) BSTreeFind ( regions, name, reference_vs_pchar_wrapper );
+}
+
+
+typedef struct frrl
+{
+ const char * name;
+ size_t len;
+} frrl;
+
+
+static int cmp_pchar_vs_len( const char * a, const char * b, size_t len_b )
+{
+ int res = 0;
+ if ( ( a != NULL )&&( b != NULL ) )
+ {
+ size_t len_a = string_size( a );
+ res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+ }
+ return res;
+}
+
+static int CC reference_vs_frr_wrapper( const void *item, const BSTNode *n )
+{
+ const reference_region * r = ( const reference_region * )n;
+ const frrl * ctx = item;
+ return cmp_pchar_vs_len( r->name, ctx->name, ctx->len );
+}
+
+static reference_region * find_reference_region_len( BSTree * regions, const char * name, size_t len )
+{
+ frrl ctx;
+ ctx.name = name;
+ ctx.len = len;
+ return ( reference_region * ) BSTreeFind ( regions, &ctx, reference_vs_frr_wrapper );
+}
+
+
+static int CC ref_vs_ref_wrapper( const BSTNode *item, const BSTNode *n )
+{
+ const reference_region * a = ( const reference_region * )item;
+ const reference_region * b = ( const reference_region * )n;
+ return cmp_pchar( a->name, b->name );
+}
+
+static rc_t add_refrange( BSTree * regions, const char * name, const uint64_t start, const uint64_t end )
+{
+ rc_t rc;
+
+ reference_region * r = find_reference_region( regions, name );
+ if ( r == NULL )
+ {
+ r = make_reference_region( name );
+ if ( r == NULL )
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ else
+ rc = add_ref_region_range( r, start, end );
+ if ( rc == 0 )
+ rc = BSTreeInsert ( regions, (BSTNode *)r, ref_vs_ref_wrapper );
+ if ( rc != 0 )
+ free_reference_region( r );
+ }
+ else
+ {
+ rc = add_ref_region_range( r, start, end );
+ }
+ return rc;
+}
+
+
+static rc_t parse_and_add_region( BSTree * regions, const char * s )
+{
+ rc_t rc = 0;
+ uint64_t start, end;
+ char name[ 64 ];
+ parse_definition( s, name, sizeof name, &start, &end );
+ if ( name[ 0 ] == 0 )
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ else
+ {
+ uint64_t start_0based = ( start > 0 ) ? start - 1 : 0;
+ uint64_t end_0based = ( end > 0 ) ? end - 1 : 0;
+ if ( end_0based != 0 && end_0based < start_0based )
+ {
+ uint64_t temp = end_0based;
+ end_0based = start_0based;
+ start_0based = temp;
+ }
+ rc = add_refrange( regions, name, start_0based, end_0based );
+ }
+ return rc;
+}
+
+
+static void CC check_refrange_wrapper( BSTNode *n, void *data )
+{
+ check_ref_region_ranges( ( reference_region * ) n );
+}
+
+
+static void check_ref_regions( BSTree * regions )
+{
+ BSTreeForEach ( regions, false, check_refrange_wrapper, NULL );
+}
+
+
+static void CC release_ref_region_wrapper( BSTNode *n, void * data )
+{
+ free_reference_region( ( reference_region * ) n );
+}
+
+
+static void free_ref_regions( BSTree * regions )
+{
+ BSTreeWhack ( regions, release_ref_region_wrapper, NULL );
+}
+
+
+static void CC count_ref_region_wrapper( BSTNode *n, void *data )
+{
+ reference_region * r = ( reference_region * ) n;
+ uint32_t * count = ( uint32_t * ) data;
+ *count += VectorLength( &(r->ranges) );
+}
+
+
+static uint32_t count_ref_regions( BSTree * regions )
+{
+ uint32_t res = 0;
+ BSTreeForEach ( regions, false, count_ref_region_wrapper, &res );
+ return res;
+}
+
+
+/* =========================================================================================== */
+
+
+static void CC foreach_reference_wrapper( BSTNode *n, void *data )
+{
+ reference_region * r = ( reference_region * ) n;
+ foreach_reference_func * func = ( foreach_reference_func * )data;
+
+ if ( func->rc == 0 )
+ func->rc = func->on_reference( r->name, &(r->ranges), func->data );
+}
+
+
+rc_t foreach_reference( BSTree * regions,
+ rc_t ( CC * on_reference ) ( const char * name, Vector *ranges, void *data ),
+ void *data )
+{
+ foreach_reference_func func;
+
+ func.on_reference = on_reference;
+ func.data = data;
+ func.rc = 0;
+ BSTreeForEach ( regions, false, foreach_reference_wrapper, &func );
+ return func.rc;
+}
+
+
+/* =========================================================================================== */
+
+/* s = 1000-2000 */
+static void parse_matepair_definition( const char *s, uint64_t *start, uint64_t *end )
+{
+ size_t n = string_size( s );
+ if ( n > 0 )
+ {
+ size_t i, st, dst = 0;
+ char tmp[ 32 ];
+ st = RR_START;
+ for ( i = 0; i < n; ++i )
+ {
+ char c = s[ i ];
+ switch( st )
+ {
+ case RR_START : if ( c == '-' )
+ {
+ *start = finish_num( tmp, sizeof tmp, &dst );
+ st = RR_END;
+ }
+ else if ( ( c >= '0' )&&( c <= '9' ) )
+ {
+ put_c( tmp, sizeof tmp, &dst, c );
+ }
+ break;
+
+ case RR_END : if ( ( c >= '0' )&&( c <= '9' ) )
+ {
+ put_c( tmp, sizeof tmp, &dst, c );
+ }
+ break;
+ }
+ }
+ switch( st )
+ {
+ case RR_START : *start = finish_num( tmp, sizeof tmp, &dst );
+ break;
+
+ case RR_END : *end = finish_num( tmp, sizeof tmp, &dst );
+ break;
+ }
+ }
+}
+
+
+static rc_t parse_and_add_matepair_dist( Vector * dist_vector, const char * s )
+{
+ rc_t rc = 0;
+ uint64_t start = 0, end = 0;
+ range *r;
+
+ if ( cmp_pchar( s, "unknown" ) != 0 )
+ parse_matepair_definition( s, &start, &end );
+
+ r = make_range( start, end );
+ if ( r == NULL )
+ {
+ rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "error storing matepair-distance" );
+ }
+ else
+ {
+ rc = VectorInsert ( dist_vector, r, NULL, cmp_range_wrapper );
+ if ( rc != 0 )
+ free( r );
+ }
+ return rc;
+}
+
+
+bool filter_by_matepair_dist( const samdump_opts * opts, int32_t tlen )
+{
+ bool res = false;
+
+ uint32_t count = VectorLength( &opts->mp_dist );
+ if ( count > 0 )
+ {
+ uint32_t idx, tlen_v;
+
+ res = false;
+ if ( tlen < 0 )
+ tlen_v = -(tlen);
+ else
+ tlen_v = tlen;
+
+ for ( idx = 0; idx < count && !res; ++idx )
+ {
+ range * r = VectorGet( &opts->mp_dist, idx );
+ if ( r != NULL )
+ res = ( ( tlen_v >= r->start )&&( tlen_v <= r->end ) );
+ }
+ }
+ return res;
+}
+
+/* =========================================================================================== */
+
+
+static rc_t get_bool_option( Args * args, const char * name, bool *value )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, name, &count );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error reading comandline option '$(t)'", "t=%s", name ) );
+ }
+ else
+ {
+ *value = ( count > 0 );
+ }
+ return rc;
+}
+
+
+static rc_t gather_region_options( Args * args, samdump_opts * opts )
+{
+ uint32_t count;
+
+ rc_t rc = ArgsOptionCount( args, OPT_REGION, &count );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", OPT_REGION ) );
+ }
+ else if ( count > 0 )
+ {
+ uint32_t i;
+
+ BSTreeInit( &opts->regions );
+ for ( i = 0; i < count && rc == 0; ++i )
+ {
+ const char * s;
+ rc = ArgsOptionValue( args, OPT_REGION, i, &s );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", OPT_REGION ) );
+ }
+ else
+ rc = parse_and_add_region( &opts->regions, s );
+ }
+ if ( rc == 0 )
+ {
+ check_ref_regions( &opts->regions );
+ opts->region_count = count_ref_regions( &opts->regions );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t gather_matepair_distances( Args * args, samdump_opts * opts )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, OPT_MATE_DIST, &count );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", OPT_REGION ) );
+ }
+ else if ( count > 0 )
+ {
+ uint32_t i;
+
+ VectorInit( &opts->mp_dist, 0, 10 );
+ for ( i = 0; i < count && rc == 0; ++i )
+ {
+ const char * s;
+ rc = ArgsOptionValue( args, OPT_MATE_DIST, i, &s );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", OPT_MATE_DIST ) );
+ }
+ else
+ rc = parse_and_add_matepair_dist( &opts->mp_dist, s );
+ }
+ opts->use_matepair_filter = ( VectorLength( &opts->mp_dist ) > 0 );
+ }
+ return rc;
+}
+
+
+static rc_t gather_2_bool( Args * args, const char *name1, const char *name2, bool *b1, bool *b2 )
+{
+ rc_t rc = get_bool_option( args, name1, b1 );
+ if ( rc != 0 ) return rc;
+
+ rc = get_bool_option( args, name2, b2 );
+ if ( rc != 0 ) return rc;
+
+ if ( *b1 && *b2 )
+ {
+ rc = RC( rcExe, rcNoTarg, rcValidating, rcParam, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "the parameters '--$(p1)' and '--$(p2)' are mutually exclusive",
+ "p1=%s,p2=%s", name1, name2 ) );
+ }
+ return rc;
+}
+
+
+static rc_t gather_flag_options( Args * args, samdump_opts * opts )
+{
+ bool dump_prim_only;
+
+ /* do we have to dump unaligned reads too? */
+ rc_t rc = get_bool_option( args, OPT_UNALIGNED, &opts->dump_unaligned_reads );
+ if ( rc != 0 ) return rc;
+
+ /* assume we have to dump primary alignments, maybe switched off later by other option */
+ opts->dump_primary_alignments = true;
+
+ /* we are dumping secondary alignments only if the user does
+ not explicitly ask for "primary only" */
+ rc = get_bool_option( args, OPT_PRIM_ONLY, &dump_prim_only );
+ if ( rc != 0 ) return rc;
+ opts->dump_secondary_alignments = !dump_prim_only;
+
+ /* check if we are asked to be in cga-tool compatible mode */
+ rc = get_bool_option( args, OPT_CG_SAM, &opts->dump_cg_sam );
+ if ( rc != 0 ) return rc;
+
+ /* check if we have to dump "EVIDENCE_INTERVAL" against the reference */
+ rc = get_bool_option( args, OPT_CG_EVIDENCE, &opts->dump_cg_evidence );
+ if ( rc != 0 ) return rc;
+
+ /* check if we have to dump "EVIDENCE_ALIGNMENT" against "EVIDENCE_INTERVAL" */
+ rc = get_bool_option( args, OPT_CG_EV_DNB, &opts->dump_cg_ev_dnb );
+ if ( rc != 0 ) return rc;
+
+ {
+ bool dump_cg_mappings;
+
+ /* look if cg-mappings is requested */
+ rc = get_bool_option( args, OPT_CG_MAPP, &dump_cg_mappings );
+ if ( rc != 0 ) return rc;
+
+ /* do some mode logic ... */
+ if ( !dump_cg_mappings &&
+ ( opts->dump_cga_tools_mode || opts->dump_cg_evidence || opts->dump_cg_ev_dnb ) )
+ {
+ opts->dump_primary_alignments = false;
+ opts->dump_secondary_alignments = false;
+ opts->dump_unaligned_reads = false;
+ }
+ else
+ {
+ opts->dump_primary_alignments = true;
+ opts->dump_secondary_alignments = !dump_prim_only;
+ /* opts->dump_unaligned_reads = ( opts->dump_unaligned_reads && opts->region_count == 0 ); */
+ }
+ }
+
+ /* do we have to print the long-version of the cigar-string? */
+ rc = get_bool_option( args, OPT_CIGAR_LONG, &opts->use_long_cigar );
+ if ( rc != 0 ) return rc;
+
+ /* print the sequence-id instead of the sequence-name */
+ rc = get_bool_option( args, OPT_USE_SEQID, &opts->use_seqid_as_refname );
+ if ( rc != 0 ) return rc;
+
+ /* print the READ where matched bases are replaced with '=' */
+ rc = get_bool_option( args, OPT_HIDE_IDENT, &opts->print_matches_as_equal_sign );
+ if ( rc != 0 ) return rc;
+
+ {
+ bool recalc_header, dont_print_header;
+
+ /* do we have to recalculate the header instead of printing the meta-data */
+ rc = get_bool_option( args, OPT_RECAL_HDR, &recalc_header );
+ if ( rc != 0 ) return rc;
+ /* should we suppress the header completely */
+ rc = get_bool_option( args, OPT_NO_HDR, &dont_print_header );
+ if ( rc != 0 ) return rc;
+ if ( dont_print_header )
+ opts->header_mode = hm_none;
+ else if ( recalc_header )
+ opts->header_mode = hm_recalc;
+ else
+ opts->header_mode = hm_dump;
+ }
+
+ {
+ bool cigar_cg, cigar_cg_merge;
+
+ /* do we have to transform cigar into cg-style ( has B/N ) */
+ /* do we have to transform cg-data(length of read/patterns in cigar) into valid SAM (cigar/READ/QUALITY) */
+ rc = gather_2_bool( args, OPT_CIGAR_CG, OPT_CIGAR_CG, &cigar_cg, &cigar_cg_merge );
+ if ( rc != 0 ) return rc;
+ if ( cigar_cg )
+ opts->cigar_treatment = ct_cg_style;
+ if ( cigar_cg_merge )
+ opts->cigar_treatment = ct_cg_merge;
+ }
+
+ {
+ bool gzip, bzip2;
+
+ /* do we have to compress the output with gzip ? */
+ /* do we have to compress the output with bzip2 ? */
+ rc = gather_2_bool( args, OPT_GZIP, OPT_BZIP2, &gzip, &bzip2 );
+ if ( rc != 0 ) return rc;
+ if ( gzip )
+ opts->output_compression = oc_gzip;
+ if ( bzip2 )
+ opts->output_compression = oc_bzip2;
+ }
+
+
+ {
+ bool fasta, fastq;
+
+ /* output in FASTA - mode ? */
+ /* output in FASTQ - mode ? */
+ rc = gather_2_bool( args, OPT_FASTA, OPT_FASTQ, &fasta, &fastq );
+ if ( rc != 0 ) return rc;
+ if ( fasta )
+ opts->output_format = of_fasta;
+ if ( fastq )
+ opts->output_format = of_fastq;
+ }
+
+
+ /* do we have to reverse unaligned reads if the flag in the row says so */
+ rc = get_bool_option( args, OPT_REVERSE, &opts->reverse_unaligned_reads );
+ if ( rc != 0 ) return rc;
+
+ /* do we have to add the spotgroup to the qname-column */
+ rc = get_bool_option( args, OPT_SPOTGRP, &opts->print_spot_group_in_name );
+ if ( rc != 0 ) return rc;
+
+ /* do we have to report options instead of executing */
+ rc = get_bool_option( args, OPT_REPORT, &opts->report_options );
+ if ( rc != 0 ) return rc;
+
+ /* do we have to print the alignment id in column XI */
+ rc = get_bool_option( args, OPT_XI_DEBUG, &opts->print_alignment_id_in_column_xi );
+ if ( rc != 0 ) return rc;
+
+ /* do we have to print the alignment id in column XI */
+ rc = get_bool_option( args, OPT_CACHEREPORT, &opts->report_cache );
+ if ( rc != 0 ) return rc;
+
+ /* do we have to dump unaligned reads only */
+ rc = get_bool_option( args, OPT_UNALIGNED_ONLY, &opts->dump_unaligned_only );
+ if ( rc != 0 ) return rc;
+
+ /* do we have to print the spot-group in a special way */
+ rc = get_bool_option( args, OPT_CG_NAMES, &opts->print_cg_names );
+ if ( rc != 0 ) return rc;
+
+ /* do we use a mate-cache */
+ rc = get_bool_option( args, OPT_NO_MATE_CACHE, &opts->use_mate_cache );
+ if ( rc != 0 ) return rc;
+ opts->use_mate_cache = !opts->use_mate_cache;
+
+ /* do we use a mate-cache */
+ rc = get_bool_option( args, OPT_LEGACY, &opts->force_legacy );
+ if ( rc != 0 ) return rc;
+
+ /* do we have to merge cigar ( and read/qual ) for cg-operations in cigar */
+ rc = get_bool_option( args, OPT_CIGAR_CG_M, &opts->merge_cg_cigar );
+
+ return rc;
+}
+
+
+static rc_t get_str_option( Args * args, const char * name, const char ** s )
+{
+ uint32_t count;
+
+ rc_t rc = ArgsOptionCount( args, name, &count );
+ *s = NULL;
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", name ) );
+ }
+ else if ( count > 0 )
+ {
+ rc = ArgsOptionValue( args, name, 0, s );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", name ) );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t get_int_option( Args * args, const char * name, uint32_t def, uint32_t * value, bool dflt_if_zero )
+{
+ const char * s;
+ rc_t rc = get_str_option( args, name, &s );
+ *value = def;
+ if ( rc == 0 && s != NULL )
+ {
+ char *endp;
+ *value = strtou32( s, &endp, 0 );
+ if ( *endp != '\0' )
+ {
+ rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
+ }
+ else if ( dflt_if_zero && *value == 0 )
+ *value = def;
+ }
+ return rc;
+}
+
+
+static rc_t get_int32_options( Args * args, const char * name, int32_t * value, bool * used )
+{
+ const char * s;
+ rc_t rc = get_str_option( args, name, &s );
+ if ( rc == 0 && s != NULL )
+ {
+ char *endp;
+ *value = strtoi32( s, &endp, 0 );
+ if ( *endp != '\0' )
+ {
+ rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
+ }
+ else
+ {
+ *used = true;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t get_int64_option( Args * args, const char * name, uint64_t def, uint64_t * value )
+{
+ const char * s;
+ rc_t rc = get_str_option( args, name, &s );
+ *value = def;
+ if ( rc == 0 && s != NULL )
+ {
+ char *endp;
+ *value = strtou32( s, &endp, 0 );
+ if ( *endp != '\0' )
+ {
+ rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
+ }
+ else if ( *value == 0 )
+ *value = def;
+ }
+ return rc;
+}
+
+
+static rc_t gather_int_options( Args * args, samdump_opts * opts )
+{
+ rc_t rc = get_int_option( args, OPT_MATE_GAP, 10000, &opts->mape_gap_cache_limit, true );
+ if ( rc == 0 )
+ rc = get_int64_option( args, OPT_TEST_ROWS, 0, &opts->test_rows );
+ if ( rc == 0 )
+ rc = get_int_option( args, OPT_OUTBUFSIZE, 1024 * 32, &opts->output_buffer_size, false );
+ if ( rc == 0 )
+ {
+ uint32_t cs;
+ rc = get_int_option( args, OPT_CURSOR_CACHE, CURSOR_CACHE_SIZE, &cs, false );
+ if ( rc == 0 )
+ opts->cursor_cache_size = ( size_t )cs;
+ }
+ if ( rc == 0 )
+ {
+ uint32_t mode;
+ rc = get_int_option( args, OPT_DUMP_MODE, 0, &mode, true );
+ if ( rc == 0 )
+ {
+ switch( mode )
+ {
+ case 0 : opts->dump_mode = dm_one_ref_at_a_time; break;
+ case 1 : opts->dump_mode = dm_prepare_all_refs; break;
+ default : opts->dump_mode = dm_one_ref_at_a_time; break;
+ }
+ }
+ }
+ if ( rc == 0 )
+ {
+ rc = get_int32_options( args, OPT_MIN_MAPQ, &opts->min_mapq, &opts->use_min_mapq );
+ }
+ return rc;
+}
+
+
+static rc_t gather_string_options( Args * args, samdump_opts * opts )
+{
+ const char * s;
+ uint32_t count;
+
+ rc_t rc = get_str_option( args, OPT_PREFIX, &s );
+ if ( rc == 0 && s != NULL )
+ {
+ opts->qname_prefix = string_dup_measure( s, NULL );
+ if ( opts->qname_prefix == NULL )
+ {
+ rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "error storing QNAME-PREFIX" );
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ rc = get_str_option( args, OPT_Q_QUANT, &s );
+ if ( rc == 0 && s != NULL )
+ {
+ opts->qual_quant = string_dup_measure( s, NULL );
+ if ( opts->qual_quant == NULL )
+ {
+ rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "error storing QUAL-QUANT" );
+ }
+ else
+ {
+ bool bres = QualityQuantizerInitMatrix( opts->qual_quant_matrix, opts->qual_quant );
+ if ( !bres )
+ {
+ rc = RC( rcExe, rcNoTarg, rcValidating, rcParam, rcInvalid );
+ (void)LOGERR( klogErr, rc, "error initializing quality-quantizer-matrix" );
+ }
+ }
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ rc = get_str_option( args, OPT_OUTPUTFILE, &s );
+ if ( rc == 0 && s != NULL )
+ {
+ opts->outputfile = string_dup_measure( s, NULL );
+ if ( opts->outputfile == NULL )
+ {
+ rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "error storing OUTPUTFILE" );
+ }
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ rc = ArgsOptionCount( args, OPT_HDR_COMMENT, &count );
+ if ( rc == 0 && count > 0 )
+ {
+ uint32_t i;
+ rc = VNamelistMake( &opts->hdr_comments, 10 );
+ for ( i = 0; i < count && rc == 0; ++i )
+ {
+ const char * src;
+ rc = ArgsOptionValue( args, OPT_HDR_COMMENT, i, &src );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)' #$(n)",
+ "t=%s,n=%u", OPT_HDR_COMMENT, i ) );
+ }
+ else
+ {
+ rc = VNamelistAppend( opts->hdr_comments, src );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error appending hdr-comment '$(t)'",
+ "t=%s", src ) );
+ }
+ }
+ }
+ if ( rc != 0 )
+ {
+ VNamelistRelease( opts->hdr_comments );
+ opts->hdr_comments = NULL;
+ }
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ rc = ArgsParamCount( args, &count );
+ if ( rc == 0 && count > 0 )
+ {
+ uint32_t i;
+ rc = VNamelistMake( &opts->input_files, 10 );
+ for ( i = 0; i < count && rc == 0; ++i )
+ {
+ const char * src;
+ rc = ArgsParamValue( args, i, &src );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline param #$(n)",
+ "n=%u", i ) );
+ }
+ else
+ {
+ rc = VNamelistAppend( opts->input_files, src );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error appending input_file '$(t)'",
+ "t=%s", src ) );
+ }
+ }
+ }
+ if ( rc != 0 )
+ {
+ VNamelistRelease( opts->input_files );
+ opts->input_files = NULL;
+ }
+ }
+ opts->input_file_count = count;
+ }
+
+ rc = get_str_option( args, OPT_CIGAR_TEST, &s );
+ if ( rc == 0 && s != NULL )
+ {
+ opts->cigar_test = string_dup_measure( s, NULL );
+ if ( opts->cigar_test == NULL )
+ {
+ rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+ (void)LOGERR( klogErr, rc, "error storing CIGAR-TEST" );
+ }
+ }
+
+ return rc;
+}
+
+
+/*********************************************************************************************
+
+ fa ... fully aligned reads
+ ha ... half aligned reads
+ hu ... half unaligned reads
+ fu ... fully unaligned reads
+
+ regions > 0 | dump-unaligned |
+ ----------------------------------------------------------------------
+ no | no | fa ha hu
+ no | yes | fa ha hu fu
+ yes | no | fa ha
+ yes | yes | fa ha hu
+
+*********************************************************************************************/
+static void gather_unaligned_options( samdump_opts * opts )
+{
+ if ( opts->region_count == 0 )
+ {
+ if ( opts->dump_unaligned_only )
+ {
+ opts->print_half_unaligned_reads = false;
+ opts->print_fully_unaligned_reads = true;
+ }
+ else
+ {
+ opts->print_half_unaligned_reads = true;
+ opts->print_fully_unaligned_reads = opts->dump_unaligned_reads;
+ }
+ }
+ else
+ {
+ opts->print_fully_unaligned_reads = false;
+ opts->print_half_unaligned_reads = opts->dump_unaligned_reads;
+ }
+}
+
+/* =========================================================================================== */
+
+
+static rc_t CC report_reference_cb( const char * name, Vector * ranges, void *data )
+{
+ rc_t rc = KOutMsg( "region: <%s>\n", name );
+ if ( rc == 0 )
+ {
+ uint32_t count = VectorLength( ranges );
+ if ( count > 0 )
+ {
+ uint32_t i;
+ for ( i = VectorStart( ranges ); i < count && rc == 0; ++i )
+ {
+ range *r = VectorGet( ranges, i );
+ if ( r->end == 0 )
+ {
+ if ( r->start == 0 )
+ rc = KOutMsg( "\t[ start ... end ]\n" );
+ else
+ rc = KOutMsg( "\t[ %u ... ]\n", r->start );
+ }
+ else
+ rc = KOutMsg( "\t[ %u ... %u ]\n", r->start, r->end );
+ }
+ }
+ }
+ return rc;
+}
+
+
+void report_options( const samdump_opts * opts )
+{
+ rc_t rc;
+ uint32_t len;
+
+ KOutMsg( "dump unaligned reads : %s\n", opts->dump_unaligned_reads ? "YES" : "NO" );
+ KOutMsg( "dump unaligned only : %s\n", opts->dump_unaligned_only ? "YES" : "NO" );
+ KOutMsg( "dump prim. alignments : %s\n", opts->dump_primary_alignments ? "YES" : "NO" );
+ KOutMsg( "dump sec. alignments : %s\n", opts->dump_secondary_alignments ? "YES" : "NO" );
+ KOutMsg( "dump cga-tools-mode : %s\n", opts->dump_cga_tools_mode ? "YES" : "NO" );
+ KOutMsg( "dump cg-evidence : %s\n", opts->dump_cg_evidence ? "YES" : "NO" );
+ KOutMsg( "dump cg-ev-dnb : %s\n", opts->dump_cg_ev_dnb ? "YES" : "NO" );
+ KOutMsg( "dump cg-sam : %s\n", opts->dump_cg_sam ? "YES" : "NO" );
+ KOutMsg( "merge cg-cigar : %s\n", opts->merge_cg_cigar ? "YES" : "NO" );
+
+ KOutMsg( "use long cigar : %s\n", opts->use_long_cigar ? "YES" : "NO" );
+ KOutMsg( "print seqid : %s\n", opts->use_seqid_as_refname ? "YES" : "NO" );
+ KOutMsg( "print READ with '=' : %s\n", opts->print_matches_as_equal_sign ? "YES" : "NO" );
+ KOutMsg( "reverse unaligned rd : %s\n", opts->reverse_unaligned_reads ? "YES" : "NO" );
+ KOutMsg( "add spotgrp to qname : %s\n", opts->print_spot_group_in_name ? "YES" : "NO" );
+ KOutMsg( "print id in col. XI : %s\n", opts->print_alignment_id_in_column_xi ? "YES" : "NO" );
+ KOutMsg( "report matecache : %s\n", opts->report_cache ? "YES" : "NO" );
+ KOutMsg( "print cg-names : %s\n", opts->print_cg_names ? "YES" : "NO" );
+
+ switch( opts->header_mode )
+ {
+ case hm_none : KOutMsg( "header-mode : dont print\n" ); break;
+ case hm_recalc : KOutMsg( "header-mode : recalculate\n" ); break;
+ case hm_dump : KOutMsg( "header-mode : print meta-data\n" ); break;
+ default : KOutMsg( "header-mode : unknown\n" ); break;
+ }
+
+ switch( opts->cigar_treatment )
+ {
+ case ct_unchanged : KOutMsg( "cigar-treatment : unchanged\n" ); break;
+ case ct_cg_style : KOutMsg( "cigar-treatment : transform cg to 'cg-style\n" ); break;
+ case ct_cg_merge : KOutMsg( "cigar-treatment : transform cg to valid SAM\n" ); break;
+ default : KOutMsg( "cigar-treatment : unknow'\n" ); break;
+ }
+
+ switch( opts->output_compression )
+ {
+ case oc_none : KOutMsg( "output-compression : none\n" ); break;
+ case oc_gzip : KOutMsg( "output-compression : gzip\n" ); break;
+ case oc_bzip2 : KOutMsg( "output-compression : bzip2\n" ); break;
+ default : KOutMsg( "output-compression : unknown\n" ); break;
+ }
+
+ switch( opts->output_format )
+ {
+ case of_sam : KOutMsg( "output-format : SAM\n" ); break;
+ case of_fasta : KOutMsg( "output-format : FASTA\n" ); break;
+ case of_fastq : KOutMsg( "output-format : FASTQ\n" ); break;
+ default : KOutMsg( "output-format : unknown\n" ); break;
+ }
+
+ switch( opts->dump_mode )
+ {
+ case dm_one_ref_at_a_time : KOutMsg( "dump-mode : one ref at a time\n" ); break;
+ case dm_prepare_all_refs : KOutMsg( "dump-mode : prepare all refs\n" ); break;
+ default : KOutMsg( "dump-mode : unknown\n" ); break;
+ }
+
+ KOutMsg( "number of regions : %u\n", opts->region_count );
+ if ( opts->region_count > 0 )
+ foreach_reference( (BSTree *)&opts->regions, report_reference_cb, NULL );
+
+ if ( opts->qname_prefix == NULL )
+ KOutMsg( "qname-prefix : NONE\n" );
+ else
+ KOutMsg( "qname-prefix : '%s'\n", opts->qname_prefix );
+
+ if ( opts->qual_quant == NULL )
+ KOutMsg( "quality-quantization : NONE\n" );
+ else
+ KOutMsg( "quality-quantization : '%s'\n", opts->qual_quant );
+
+ if ( opts->hdr_comments != NULL )
+ {
+ rc = VNameListCount( opts->hdr_comments, &len );
+ if ( rc == 0 && len > 0 )
+ {
+ uint32_t i;
+
+ KOutMsg( "header-comments-count : %u\n", len );
+ for ( i = 0; i < len; ++i )
+ {
+ const char * s;
+ rc = VNameListGet( opts->hdr_comments, i, &s );
+ if ( rc == 0 && s != NULL )
+ KOutMsg( "header-comment[ %u ] : '%s'\n", i, s );
+ }
+ }
+ }
+
+ if ( opts->input_files != NULL )
+ {
+ rc = VNameListCount( opts->input_files, &len );
+ if ( rc == 0 && len > 0 )
+ {
+ uint32_t i;
+
+ KOutMsg( "input-file-count : %u\n", len );
+ for ( i = 0; i < len; ++i )
+ {
+ const char * s;
+ rc = VNameListGet( opts->input_files, i, &s );
+ if ( rc == 0 && s != NULL )
+ KOutMsg( "input-file[ %u ] : '%s'\n", i, s );
+ }
+ }
+ }
+
+ len = VectorLength( &opts->mp_dist );
+ if ( len > 0 )
+ {
+ uint32_t i;
+
+ KOutMsg( "matepair-dist-filters : %u\n", len );
+ for ( i = 0; i < len; ++i )
+ {
+ range *r = VectorGet( &opts->mp_dist, i );
+ if ( r != NULL )
+ KOutMsg( "matepair-dist[ %u ] : '%u ... %u'\n", i, r->start, r->end );
+ }
+ }
+
+ KOutMsg( "mate-gap-cache-limit : %u\n", opts->mape_gap_cache_limit );
+ KOutMsg( "test-row limit : %u\n", opts->test_rows );
+ KOutMsg( "outputfile : %s\n", opts->outputfile );
+ KOutMsg( "outputbuffer-size : %u\n", opts->output_buffer_size );
+ KOutMsg( "cursor-cache-size : %u\n", opts->cursor_cache_size );
+
+ KOutMsg( "use mate-cache : %s\n", opts->use_mate_cache ? "YES" : "NO" );
+ KOutMsg( "force legacy code : %s\n", opts->force_legacy ? "YES" : "NO" );
+ KOutMsg( "use min-mapq : %s\n", opts->use_min_mapq ? "YES" : "NO" );
+ KOutMsg( "min-mapq : %i\n", opts->min_mapq );
+}
+
+
+/* =========================================================================================== */
+
+
+void release_options( samdump_opts * opts )
+{
+ free_ref_regions( &opts->regions );
+ if ( opts->qname_prefix != NULL )
+ free( (void*)opts->qname_prefix );
+ if ( opts->qual_quant != NULL )
+ free( (void*)opts->qual_quant );
+ if( opts->outputfile != NULL )
+ free( (void*)opts->outputfile );
+ VNamelistRelease( opts->hdr_comments );
+ VNamelistRelease( opts->input_files );
+ VectorWhack ( &opts->mp_dist, release_range_wrapper, NULL );
+}
+
+/* =========================================================================================== */
+
+
+rc_t gather_options( Args * args, samdump_opts * opts )
+{
+ rc_t rc = gather_region_options( args, opts );
+ if ( rc == 0 )
+ rc = gather_flag_options( args, opts );
+ if ( rc == 0 )
+ rc = gather_string_options( args, opts );
+ if ( rc == 0 )
+ rc = gather_int_options( args, opts );
+ if ( rc == 0 )
+ rc = gather_matepair_distances( args, opts );
+ if ( rc == 0 )
+ gather_unaligned_options( opts );
+ return rc;
+}
+
+
+bool is_this_alignment_requested( const samdump_opts * opts, const char *refname, uint32_t refname_len,
+ uint64_t start, uint64_t end )
+{
+ bool res = false;
+ if ( opts != NULL )
+ {
+ reference_region *rr = find_reference_region_len( ( BSTree * )&opts->regions, refname, refname_len );
+ if ( rr != NULL )
+ {
+ Vector *v = &(rr->ranges);
+ uint32_t i, count = VectorLength( v );
+ for ( i = 0; i < count && !res; ++i )
+ {
+ range * r = VectorGet ( v, i );
+ if ( r != NULL )
+ {
+ res = ( ( end >= r->start )&&( start <= r->end ) );
+ }
+ }
+ }
+ }
+ return res;
+}
+
+
+bool test_limit_reached( const samdump_opts * opts, uint64_t rows_so_far )
+{
+ bool res = false;
+ if ( opts->test_rows > 0 )
+ res = ( rows_so_far >= opts->test_rows );
+ return res;
+}
+
+
+rc_t dump_name( const samdump_opts * opts, int64_t seq_spot_id,
+ const char * spot_group, uint32_t spot_group_len )
+{
+ rc_t rc;
+
+ if ( opts->print_cg_names )
+ {
+ if ( spot_group != NULL && spot_group_len != 0 )
+ rc = KOutMsg( "%.*s_1:%d", spot_group_len, spot_group, seq_spot_id );
+ else
+ rc = KOutMsg( "%d", seq_spot_id );
+ }
+ else
+ {
+ if ( opts->qname_prefix != NULL )
+ {
+ /* we do have to print a prefix */
+ if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+ rc = KOutMsg( "%s.%d.%.*s", opts->qname_prefix, seq_spot_id, spot_group_len, spot_group );
+ else
+ /* we do NOT have to append the spot-group */
+ rc = KOutMsg( "%s.%d", opts->qname_prefix, seq_spot_id );
+ }
+ else
+ {
+ /* we do NOT have to print a prefix */
+ if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+ rc = KOutMsg( "%d.%.*s", seq_spot_id, spot_group_len, spot_group );
+ else
+ /* we do NOT have to append the spot-group */
+ rc = KOutMsg( "%d", seq_spot_id );
+ }
+ }
+ return rc;
+}
+
+
+rc_t dump_name_legacy( const samdump_opts * opts, const char * name, size_t name_len,
+ const char * spot_group, uint32_t spot_group_len )
+{
+ rc_t rc;
+
+ if ( opts->qname_prefix != NULL )
+ {
+ /* we do have to print a prefix */
+ if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+ rc = KOutMsg( "%s.%.*s%.*s", opts->qname_prefix, name_len, name, spot_group_len, spot_group );
+ else
+ /* we do NOT have to append the spot-group */
+ rc = KOutMsg( "%s.%.*s", opts->qname_prefix, name_len, name );
+ }
+ else
+ {
+ /* we do NOT have to print a prefix */
+ if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+ rc = KOutMsg( "%.*s.%.*s", name_len, name, spot_group_len, spot_group );
+ else
+ /* we do NOT have to append the spot-group */
+ rc = KOutMsg( "%.*s", name_len, name );
+ }
+ return rc;
+}
+
+
+rc_t dump_quality( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse )
+{
+ rc_t rc = 0;
+ bool quantize = ( opts->qual_quant != NULL );
+ uint32_t i;
+ if ( reverse )
+ {
+ if ( quantize )
+ {
+ for ( i = 0; i < qual_len && rc == 0; ++i )
+ {
+ uint32_t qual = quality[ qual_len - i - 1 ];
+ char newValue = ( opts->qual_quant_matrix[ qual ] + 33 );
+ rc = KOutMsg( "%c", newValue );
+ }
+ }
+ else
+ {
+ for ( i = 0; i < qual_len && rc == 0; ++i )
+ {
+ char qual = quality[ qual_len - i - 1 ] + 33;
+ rc = KOutMsg( "%c", qual );
+ }
+ }
+ }
+ else
+ {
+ if ( quantize )
+ {
+ for ( i = 0; i < qual_len && rc == 0; ++i )
+ {
+ uint32_t qual = quality[ i ];
+ char newValue = opts->qual_quant_matrix[ qual ] + 33;
+ rc = KOutMsg( "%c", newValue );
+ }
+
+ }
+ else
+ {
+ for ( i = 0; i < qual_len && rc == 0; ++i )
+ {
+ char qual = quality[ i ] + 33;
+ rc = KOutMsg( "%c", qual );
+ }
+ }
+ }
+ return rc;
+}
+
+
+rc_t dump_quality_33( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse )
+{
+ rc_t rc = 0;
+ bool quantize = ( opts->qual_quant != NULL );
+ uint32_t i;
+ if ( reverse )
+ {
+ if ( quantize )
+ {
+ for ( i = 0; i < qual_len && rc == 0; ++i )
+ {
+ uint32_t qual = quality[ qual_len - i - 1 ] - 33;
+ char newValue = ( opts->qual_quant_matrix[ qual ] + 33 );
+ rc = KOutMsg( "%c", newValue );
+ }
+ }
+ else
+ {
+ for ( i = 0; i < qual_len && rc == 0; ++i )
+ {
+ char qual = quality[ qual_len - i - 1 ];
+ rc = KOutMsg( "%c", qual );
+ }
+ }
+ }
+ else
+ {
+ if ( quantize )
+ {
+ for ( i = 0; i < qual_len && rc == 0; ++i )
+ {
+ uint32_t qual = quality[ i ] - 33;
+ char newValue = opts->qual_quant_matrix[ qual ] + 33;
+ rc = KOutMsg( "%c", newValue );
+ }
+
+ }
+ else
+ {
+ rc = KOutMsg( "%.*s", qual_len, quality );
+ }
+ }
+ return rc;
+}
+
+
diff --git a/tools/sra-pileup/sam-dump-opts.h b/tools/sra-pileup/sam-dump-opts.h
new file mode 100644
index 0000000..acd933c
--- /dev/null
+++ b/tools/sra-pileup/sam-dump-opts.h
@@ -0,0 +1,277 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_sam_dump_opts_
+#define _h_sam_dump_opts_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/container.h>
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/namelist.h>
+
+#include <kapp/args.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <strtol.h>
+
+
+#define OPT_UNALIGNED "unaligned"
+#define OPT_PRIM_ONLY "primary"
+#define OPT_CIGAR_LONG "cigar-long"
+#define OPT_CG_SAM "CG-SAM"
+#define OPT_CG_EVIDENCE "CG-evidence"
+#define OPT_CG_EV_DNB "CG-ev-dnb"
+#define OPT_CG_MAPP "CG-mappings"
+#define OPT_REGION "aligned-region"
+#define OPT_RECAL_HDR "header"
+#define OPT_NO_HDR "no-header"
+#define OPT_USE_SEQID "seqid"
+#define OPT_HIDE_IDENT "hide-identical"
+#define OPT_CIGAR_CG "cigar-CG"
+#define OPT_CIGAR_CG_M "cigar-CG-merge"
+#define OPT_PREFIX "prefix"
+#define OPT_REVERSE "reverse"
+#define OPT_SPOTGRP "spot-group"
+#define OPT_MATE_GAP "mate-cache-row-gap"
+#define OPT_TEST_ROWS "test-rows"
+#define OPT_XI_DEBUG "XI"
+#define OPT_Q_QUANT "qual-quant"
+#define OPT_GZIP "gzip"
+#define OPT_BZIP2 "bzip2"
+#define OPT_FASTQ "fastq"
+#define OPT_FASTA "fasta"
+#define OPT_HDR_COMMENT "header-comment"
+#define OPT_MATE_DIST "matepair-distance"
+#define OPT_OUTPUTFILE "output-file"
+#define OPT_OUTBUFSIZE "output-buffer-size"
+#define OPT_REPORT "report"
+#define OPT_CACHEREPORT "cachereport"
+#define OPT_UNALIGNED_ONLY "unaligned-spots-only"
+#define OPT_CG_NAMES "CG-names"
+#define OPT_CIGAR_TEST "cigar-test"
+#define OPT_CURSOR_CACHE "cursor-cache"
+#define OPT_DUMP_MODE "dump-mode"
+#define OPT_MIN_MAPQ "min-mapq"
+#define OPT_NO_MATE_CACHE "no-mate-cache"
+#define OPT_LEGACY "legacy"
+
+typedef struct range
+{
+ uint64_t start;
+ uint64_t end;
+} range;
+
+
+typedef struct reference_region
+{
+ BSTNode node;
+ const char * name; /* the name of the reference */
+ Vector ranges; /* what regions on this reference */
+} reference_region;
+
+
+enum header_mode
+{
+ hm_none = 0, /* do not dump the headers at all */
+ hm_recalc, /* recalculate the headers */
+ hm_dump /* dump the header found in metadata */
+};
+
+enum output_format
+{
+ of_sam = 0, /* use sam-tools format */
+ of_fasta, /* use fasta-format */
+ of_fastq /* use fastq-format */
+};
+
+enum output_compression
+{
+ oc_none = 0, /* do not compress output */
+ oc_gzip, /* compress output with gzip */
+ oc_bzip2 /* compress output with bzip2 */
+};
+
+enum cigar_treatment
+{
+ ct_unchanged = 0, /* use the cigar-string as it is stored */
+ ct_cg_style, /* transform cigar into cg-style ( has B/N ) */
+ ct_cg_merge /* transform cg-data(length of read/patterns in cigar) into valid SAM (cigar/READ/QUALITY) */
+};
+
+
+enum dump_mode
+{
+ /* in case of: aligned reads requested + no regions given */
+ dm_one_ref_at_a_time = 0, /* create a set-iter each for every reference sequentially, put only one reference into it */
+ dm_prepare_all_refs /* create only ONE set-iter, put ALL references into it */
+};
+
+
+typedef struct samdump_opts
+{
+ /* tree with regions, each node has a sorted vector of ranges, can be empty ... */
+ BSTree regions; /* contains reference_region structs */
+
+ /* vector with header-comments, can be empty... */
+ VNamelist * hdr_comments;
+
+ /* vector input files/accessions/url's */
+ VNamelist * input_files;
+
+ /* vector with metapair-distances... */
+ Vector mp_dist;
+
+ /* prepend qname with this prefix */
+ const char * qname_prefix;
+
+ /* the quality quantization string */
+ const char * qual_quant;
+
+ /* optional outputfile */
+ const char * outputfile;
+
+ /* cigar-test >>> not advertized! */
+ const char * cigar_test;
+
+ uint32_t region_count;
+ uint32_t input_file_count;
+
+ int32_t min_mapq;
+
+ /* how much buffering on the output-buffer, of OFF if zero */
+ uint32_t output_buffer_size;
+
+ /* mate's farther apart than this are not cached */
+ uint32_t mape_gap_cache_limit;
+
+ /* limit the output of each table to max. this number of rows, if set to a vaue greater than zero */
+ uint64_t test_rows;
+ uint64_t rows_so_far;
+
+ size_t cursor_cache_size;
+
+ /* how the sam-headers are treated */
+ enum header_mode header_mode;
+
+ /* how the cigar-string is treated */
+ enum cigar_treatment cigar_treatment;
+
+ /* in which format should the output be created */
+ enum output_format output_format;
+
+ /* should the output be compressed / in which format */
+ enum output_compression output_compression;
+
+ /* how to process in case of: aligned reads requested + no regions given */
+ enum dump_mode dump_mode;
+
+ /* use a mate-cache to dump aligned and half-aligned reads */
+ bool use_mate_cache;
+ bool force_legacy;
+
+ /* which tables have to be processed/dumped */
+ bool dump_primary_alignments;
+ bool dump_secondary_alignments;
+ bool dump_cg_evidence;
+ bool dump_cg_sam;
+ bool dump_cg_ev_dnb;
+ bool merge_cg_cigar;
+
+ bool dump_unaligned_reads;
+ bool dump_unaligned_only;
+ bool dump_cga_tools_mode;
+
+ /* what alignment/unaligned reads should be dumped */
+ bool print_half_unaligned_reads;
+ bool print_fully_unaligned_reads;
+
+ /* flag that shows if we need to filter by matepair-distance */
+ bool use_matepair_filter;
+ bool use_min_mapq;
+
+ /* options changing the output-format */
+ bool use_seqid_as_refname;
+ bool use_long_cigar;
+ bool print_matches_as_equal_sign;
+ bool print_spot_group_in_name;
+ bool reverse_unaligned_reads;
+ bool print_alignment_id_in_column_xi;
+ bool report_options;
+ bool report_cache;
+ bool print_cg_names;
+
+ uint8_t qual_quant_matrix[ 256 ];
+} samdump_opts;
+
+
+typedef struct foreach_reference_func
+{
+ rc_t ( CC * on_reference ) ( const char * name, Vector *ranges, void *data );
+ const char * name;
+ void * data;
+ rc_t rc;
+} foreach_reference_func;
+
+
+rc_t foreach_reference( BSTree * regions,
+ rc_t ( CC * on_reference ) ( const char * name, Vector *ranges, void *data ),
+ void *data );
+
+
+rc_t gather_options( Args * args, samdump_opts * opts );
+void report_options( const samdump_opts * opts );
+void release_options( samdump_opts * opts );
+
+bool filter_by_matepair_dist( const samdump_opts * opts, int32_t tlen );
+
+bool is_this_alignment_requested( const samdump_opts * opts, const char *refname, uint32_t refname_len,
+ uint64_t start, uint64_t len );
+
+bool test_limit_reached( const samdump_opts * opts, uint64_t rows_so_far );
+
+rc_t dump_name( const samdump_opts * opts, int64_t seq_spot_id,
+ const char * spot_group, uint32_t spot_group_len );
+rc_t dump_name_legacy( const samdump_opts * opts, const char * name, size_t name_len,
+ const char * spot_group, uint32_t spot_group_len );
+
+rc_t dump_quality( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse );
+
+rc_t dump_quality_33( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse );
+
+#endif
diff --git a/tools/sra-pileup/sam-dump.c b/tools/sra-pileup/sam-dump.c
new file mode 100644
index 0000000..4532c97
--- /dev/null
+++ b/tools/sra-pileup/sam-dump.c
@@ -0,0 +1,4917 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/report.h>
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/printf.h>
+#include <klib/data-buffer.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <kfs/gzip.h>
+#include <kfs/bzip.h>
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <vdb/report.h>
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <vdb/schema.h>
+#include <vdb/dependencies.h>
+#include <sra/sraschema.h>
+#include <sra/srapath.h>
+#include <align/dna-reverse-cmpl.h>
+#include <align/iterator.h>
+#include <align/reference.h>
+#include <align/quality-quantizer.h>
+
+#include <kfs/directory.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
+#include <string.h>
+#include <strtol.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "debug.h"
+/* #include "sam-dump.vers.h" */
+
+#if _ARCH_BITS == 64
+#define USE_MATE_CACHE 1
+#define CURSOR_CACHE (4 * 1024 * 1024 * 1024UL)
+#else
+#define USE_MATE_CACHE 0
+#define CURSOR_CACHE (256 * 1024 * 1024)
+#endif
+
+
+
+typedef struct TAlignedRegion_struct
+{
+ char name[1024];
+ struct {
+ INSDC_coord_zero from;
+ INSDC_coord_zero to;
+ } r[10240];
+ int rq;
+ INSDC_coord_zero max_to;
+ INSDC_coord_zero min_from;
+ int printed;
+} TAlignedRegion;
+
+
+typedef struct TMatepairDistance_struct
+{
+ uint32_t from;
+ uint32_t to;
+} TMatepairDistance;
+
+
+struct params_s
+{
+ /* which outputs are on */
+ bool primaries;
+ bool secondaries;
+ bool unaligned;
+ bool cg_evidence;
+ bool cg_ev_dnb;
+ bool cg_sam;
+
+ bool use_seqid;
+ bool long_cigar;
+ bool reheader;
+ bool noheader;
+ bool hide_identical;
+ bool fasta;
+ bool fastq;
+ bool spot_group_in_name;
+ bool cg_friendly_names;
+ bool reverse_unaligned;
+ bool unaligned_spots;
+
+ bool output_gzip;
+ bool output_bz2;
+
+ bool xi;
+ int cg_style; /* 0: raw; 1: with B's; 2: without B's, fixed up SEQ/QUAL; */
+ char const *name_prefix;
+ /* region filter data */
+ TAlignedRegion* region;
+ uint32_t region_qty;
+ /* distance filter data */
+ bool mp_dist_unknown;
+ TMatepairDistance* mp_dist;
+ uint32_t mp_dist_qty;
+ uint32_t test_rows;
+
+ /* mate info cache */
+ int64_t mate_row_gap_cachable;
+
+ char const **comments;
+
+ bool quantizeQual;
+ uint8_t qualQuant[256];
+ uint8_t qualQuantSingle; /*** the quality is quantized - single value, no need to retrieve **/
+};
+
+
+struct params_s const *param;
+ReferenceList const *gRefList;
+
+
+typedef union UData_union
+{
+ void const *v;
+ uint32_t const *u32;
+ int32_t const *i32;
+ int64_t const *i64;
+ uint64_t const *u64;
+ uint8_t const *u8;
+ char const *str;
+ bool const *tf;
+ INSDC_coord_one* coord1;
+ INSDC_coord_zero* coord0;
+ INSDC_coord_len* coord_len;
+ INSDC_coord_val* coord_val;
+ INSDC_SRA_xread_type* read_type;
+ INSDC_SRA_read_filter* read_filter;
+} UData;
+
+
+typedef struct SCol_struct
+{
+ char const *name;
+ uint32_t idx;
+ UData base;
+ uint32_t len;
+ bool optional;
+} SCol;
+
+
+typedef struct STable_struct
+{
+ char const *name;
+ VTable const *vtbl;
+} STable;
+
+
+typedef struct SCursCache_struct
+{
+ KVector* cache;
+ KVector* cache_unaligned_mate; /* keeps unaligned-mate for a half-aligned spots */
+ uint32_t sam_flags;
+ INSDC_coord_zero pnext;
+ int32_t tlen;
+ ReferenceObj const *ref;
+ /* cache stats */
+ uint64_t projected;
+ uint64_t added;
+ uint64_t hit;
+ uint64_t bad;
+} SCursCache;
+
+
+typedef struct SCurs_struct
+{
+ STable const *tbl;
+ VCursor const *vcurs;
+ SCursCache* cache;
+ SCursCache cache_local;
+ uint64_t col_reads_qty;
+} SCurs;
+
+enum eDSTableType
+{
+ edstt_NotSpecified,
+ edstt_Reference,
+ edstt_Sequence,
+ edstt_PrimaryAlignment,
+ edstt_SecondaryAlignment,
+ edstt_EvidenceAlignment,
+ edstt_EvidenceInterval
+};
+
+
+typedef struct DataSource_s {
+ STable tbl;
+ SCurs curs;
+ SCol *cols;
+ enum eDSTableType type;
+} DataSource;
+
+
+#define DATASOURCE_INIT(O, NAME) do { memset(&O, 0, sizeof(O)); O.tbl.name = NAME; O.curs.tbl = &O.tbl; } while(0)
+
+
+typedef struct SAM_dump_ctx_s
+{
+ VDatabase const *db;
+ char const *fullPath;
+ char const *accession;
+ char const *readGroup;
+
+ DataSource ref;
+ DataSource pri;
+ DataSource sec;
+ DataSource evi;
+ DataSource eva;
+ DataSource seq;
+} SAM_dump_ctx_t;
+
+
+enum ealg_col
+{
+ alg_SEQ_SPOT_ID = 0,
+ alg_SEQ_NAME,
+ alg_MAPQ,
+ alg_CIGAR,
+ alg_READ,
+ alg_READ_START,
+ alg_READ_LEN,
+ alg_CIGAR_LEN,
+ alg_SAM_QUALITY,
+ alg_SPOT_GROUP,
+ alg_SEQ_SPOT_GROUP,
+ alg_SEQ_READ_ID,
+ alg_REVERSED,
+ alg_ALIGNMENT_COUNT,
+ alg_EDIT_DISTANCE,
+ alg_READ_FILTER,
+ alg_MATE_ALIGN_ID,
+ alg_MATE_REF_NAME,
+ alg_SAM_FLAGS,
+ alg_REF_START,
+ alg_MATE_REF_POS,
+ alg_ALIGN_GROUP,
+ alg_EVIDENCE_ALIGNMENT_IDS,
+ alg_REF_PLOIDY,
+ alg_REF_ID,
+ alg_MATE_REF_ID,
+ alg_HAS_MISMATCH,
+ alg_REGION_FILTER,
+ alg_REF_NAME = alg_REGION_FILTER,
+ alg_REF_SEQ_ID,
+ alg_REF_POS,
+ alg_REF_LEN,
+ alg_DISTANCE_FILTER,
+ alg_TEMPLATE_LEN = alg_DISTANCE_FILTER,
+ alg_CG_TAGS_STR
+};
+
+
+SCol const g_alg_col_tmpl[] =
+{
+ { "SEQ_SPOT_ID", 0, {NULL}, 0, true },
+ { "SEQ_NAME", 0, {NULL}, 0, false },
+ { "MAPQ", 0, {NULL}, 0, false },
+ { "?CIGAR column name?", 0, {NULL}, 0, false },
+ { "?READ column name?", 0, {NULL}, 0, false },
+ { "READ_START", 0, {NULL}, 0, false }, /* READ_START */
+ { "READ_LEN", 0, {NULL}, 0, false }, /* READ_LEN */
+ { "?CIGAR_LEN column name?", 0, {NULL}, 0, true }, /* CIGAR_LEN */
+ { "SAM_QUALITY", 0, {NULL}, 0, false },
+ { "SPOT_GROUP", 0, {NULL}, 0, true },
+ { "SEQ_SPOT_GROUP", 0, {NULL}, 0, true },
+ { "SEQ_READ_ID", 0, {NULL}, 0, true },
+ { "REF_ORIENTATION", 0, {NULL}, 0, true },
+ { "ALIGNMENT_COUNT", 0, {NULL}, 0, true },
+ { "EDIT_DISTANCE", 0, {NULL}, 0, false },
+ { "", 0, {NULL}, 0, false },
+ /* start cols used as standalone in DumpUnaligned */
+ /* MATE_ALIGN_ID col must preceeed
+ MATE_REF_NAME, MATE_REF_POS, SAM_FLAGS, TEMPLATE_LEN for cache to work */
+ { "MATE_ALIGN_ID", 0, {NULL}, 0, false },
+ { "?MATE_REF_NAME column name?", 0, {NULL}, 0, false },
+ { "SAM_FLAGS", 0, {NULL}, 0, false },
+ { "REF_START", 0, {NULL}, 0, false }, /* priming cursor cache */
+ { "MATE_REF_POS", 0, {NULL}, 0, false },
+ { "ALIGN_GROUP", 0, {NULL}, 0, true },
+ { "", 0, {NULL}, 0, true }, /* EVIDENCE_ALIGNMENT_IDS */
+ { "", 0, {NULL}, 0, true }, /* REF_PLOIDY */
+ { "REF_ID", 0, {NULL}, 0, true }, /* REF_ID */
+ { "MATE_REF_ID", 0, {NULL}, 0, true }, /* priming cursor cache */
+ { "(bool)HAS_MISMATCH", 0, {NULL}, 0, true },
+ /* these are read before any other for filtering so they must be last */
+ { "REF_NAME", 0, {NULL}, 0, false },
+ { "REF_SEQ_ID", 0, {NULL}, 0, false },
+ { "REF_POS", 0, {NULL}, 0, false },
+ /* end cols used as standalone in DumpUnaligned */
+ { "REF_LEN", 0, {NULL}, 0, false },
+ { "TEMPLATE_LEN", 0, {NULL}, 0, false },
+ { NULL, 0, {NULL}, 0, false }, /* alg_CG_TAGS_STR */
+ { NULL, 0, {NULL}, 0, false }
+};
+
+enum eseq_col
+{
+ seq_READ = 0,
+ seq_QUALITY,
+ seq_SPOT_GROUP,
+ seq_READ_START,
+ seq_READ_LEN,
+ seq_READ_TYPE,
+ seq_READ_FILTER,
+ seq_NAME,
+ seq_PRIMARY_ALIGNMENT_ID
+};
+
+static
+SCol const gSeqCol[] =
+{
+ { "READ", 0, {NULL}, 0, false },
+ { "(INSDC:quality:text:phred_33)QUALITY", 0, {NULL}, 0, false },
+ { "SPOT_GROUP", 0, {NULL}, 0, true },
+ { "READ_START", 0, {NULL}, 0, true },
+ { "READ_LEN", 0, {NULL}, 0, true },
+ { "READ_TYPE", 0, {NULL}, 0, true },
+ { "READ_FILTER", 0, {NULL}, 0, true },
+ { "NAME", 0, {NULL}, 0, true },
+ /* must be last in list to avoid reading all columns */
+ { "PRIMARY_ALIGNMENT_ID", 0, {NULL}, 0, true },
+ { NULL, 0, {NULL}, 0, false }
+};
+
+
+static rc_t RefSeqPrint( void )
+{
+ rc_t rc = 0;
+ uint32_t i, count = 0;
+
+ rc = ReferenceList_Count( gRefList, &count );
+ for( i = 0; rc == 0 && i < count; i++ )
+ {
+ ReferenceObj const *obj;
+ rc = ReferenceList_Get( gRefList, &obj, i );
+ if ( rc == 0 )
+ {
+ char const *seqid = NULL;
+ rc = ReferenceObj_SeqId( obj, &seqid );
+ if ( rc == 0 )
+ {
+ char const *name = NULL;
+ rc = ReferenceObj_Name( obj, &name );
+ if ( rc == 0 )
+ {
+ INSDC_coord_len len;
+ rc = ReferenceObj_SeqLength( obj, &len );
+ if ( rc == 0 )
+ {
+ char const *nm;
+ if ( param->use_seqid && seqid != NULL && seqid[ 0 ] != '\0' )
+ {
+ nm = seqid;
+ }
+ else
+ {
+ nm = name;
+ }
+ KOutMsg( "@SQ\tSN:%s", nm );
+ if ( nm != seqid && seqid != NULL && seqid[ 0 ] != '\0' && strcmp( nm, seqid ) != 0)
+ {
+ KOutMsg( "\tAS:%s", seqid );
+ }
+ KOutMsg( "\tLN:%u\n", len );
+ }
+ }
+ }
+ ReferenceObj_Release( obj );
+ }
+ }
+ return rc;
+}
+
+
+#if USE_MATE_CACHE
+static rc_t Cache_Init( SCursCache* c )
+{
+ if ( c != NULL )
+ {
+ rc_t rc;
+ memset( c, 0, sizeof( *c ) );
+ rc=KVectorMake( &c->cache );
+ if(rc == 0){
+ rc=KVectorMake( &c->cache_unaligned_mate );
+ }
+ }
+ return 0;
+}
+
+
+static void Cache_Close( char const *name, SCursCache* c )
+{
+ if ( c != NULL )
+ {
+ KVectorRelease( c->cache );
+ KVectorRelease( c->cache_unaligned_mate );
+ if ( c->added > 0 )
+ {
+ SAM_DUMP_DBG( 2, ( "%s cache stats: projected %lu added of those %lu; "
+ "hits %lu of those broken %lu;\n",
+ name, c->projected, c->added, c->hit, c->bad ) );
+ }
+ }
+ memset( c, 0, sizeof( *c ) );
+}
+
+
+static rc_t Cache_Add( uint64_t key, SCurs const *curs, SCol const *cols )
+{
+ /* compact values for mate record to cache as:
+ pos_delta - 32bit, ref_proj - 11bit, flags - 11bit, rnext_idx - 10bit = 64bit
+ */
+ rc_t rc = 0;
+ ReferenceObj const *r = NULL;
+ uint32_t rid = 0;
+ uint64_t val = 0;
+ int64_t mate_id = cols[ alg_MATE_ALIGN_ID ].len > 0 ? cols[ alg_MATE_ALIGN_ID ].base.i64[ 0 ] : 0;
+
+ rc = ReferenceList_Find( gRefList, &r, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len );
+ if ( rc == 0 )
+ {
+ rc = ReferenceObj_Idx( r, &rid );
+ }
+#if _DEBUGGING
+ {
+ char const *rname = NULL;
+ curs->cache->projected++;
+ ReferenceObj_Name( r, &rname );
+ SAM_DUMP_DBG( 10, ( "to cache row %li for mate %li: %u,%s[%hu],%u,%u,%i",
+ key, mate_id, cols[ alg_SAM_FLAGS ].base.u32[ 0 ], rname, rid,
+ cols[ alg_REF_POS ].len ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0,
+ cols[ alg_MATE_REF_POS ].len ? cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] : 0,
+ cols[ alg_TEMPLATE_LEN ].len > 0 ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0));
+ }
+#endif
+ if ( rc == 0 && !( rid & 0xFC00 ) )
+ {
+ int64_t pos_delta64;
+ int32_t pos_delta32;
+
+ if ( mate_id != 0 )
+ {
+ ReferenceObj const *rm = NULL;
+ uint32_t rm_id;
+
+ rc = ReferenceList_Find( gRefList, &rm, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len );
+ if ( rc == 0 )
+ {
+ rc = ReferenceObj_Idx( rm, &rm_id );
+ }
+ assert( rm != NULL );
+ if ( rc == 0 && rid != rm_id )
+ {
+ char const *rm_name = NULL;
+ ReferenceObj_Name( rm, &rm_name );
+ mate_id = 0;
+ SAM_DUMP_DBG( 10, ( " mate ref differ: %s[%hu]!", rm_name, rm_id ) );
+ }
+ ReferenceObj_Release( rm );
+ }
+
+ if ( mate_id != 0 )
+ {
+ pos_delta64 = cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] - cols[ alg_REF_POS ].base.coord0[ 0 ];
+ }
+ else
+ {
+ pos_delta64 = cols[ alg_REF_POS ].base.coord0[ 0 ];
+ }
+
+ pos_delta32 = pos_delta64;
+ if ( pos_delta64 == pos_delta32 )
+ {
+ int64_t ref_proj;
+ if ( mate_id == 0 )
+ {
+ ref_proj = 0; /* indicates full value in delta */
+ }
+ else if ( cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] < 0 )
+ {
+ assert( pos_delta32 <= 0 );
+ ref_proj = pos_delta32 - cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ];
+ }
+ else
+ {
+ assert( pos_delta32 >= 0 );
+ ref_proj = cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] - pos_delta32;
+ }
+
+ if ( !( ref_proj & 0xFFFFF800 ) )
+ {
+ val = ( pos_delta64 << 32 ) | ( ref_proj << 21 ) | ( cols[ alg_SAM_FLAGS ].base.u32[ 0 ] << 10 ) | rid;
+ rc = KVectorSetU64( curs->cache->cache, key, val );
+ }
+ }
+ }
+ ReferenceObj_Release( r );
+
+#if _DEBUGGING
+ if ( val == 0 )
+ {
+ SAM_DUMP_DBG( 10, ( " --> out of range\n" ) );
+ }
+ else
+ {
+ SAM_DUMP_DBG( 10, ( " --> %016lX\n", val ) );
+ curs->cache->added++;
+ }
+#endif
+ return rc;
+}
+
+
+static rc_t Cache_Get( SCurs const *curs, uint64_t key, uint64_t* val )
+{
+ rc_t rc = KVectorGetU64( curs->cache->cache, key, val );
+ if ( rc == 0 )
+ {
+ uint32_t id = ( *val & 0x3FF );
+#if _DEBUGGING
+ curs->cache->hit++;
+#endif
+ KVectorUnset( curs->cache->cache, key );
+ rc = ReferenceList_Get( gRefList, &curs->cache->ref, id );
+ if ( rc != 0 )
+ {
+ *val = 0;
+ curs->cache->ref = NULL;
+ rc = RC( rcExe, rcNoTarg, rcSearching, rcItem, rcNotFound );
+#if _DEBUGGING
+ curs->cache->bad++;
+#endif
+ }
+ else
+ {
+ SAM_DUMP_DBG( 10, ( "from cache row %li %016lX", key, *val ) );
+ }
+ }
+ return rc;
+}
+
+
+static void Cache_Unpack( uint64_t val, int64_t mate_id, SCurs const *curs, SCol* cols )
+{
+ int32_t pos_delta = ( val & 0xFFFFFFFF00000000 ) >> 32;
+ uint32_t ref_proj = ( val & 0x00000000FFE00000 ) >> 21;
+ uint32_t flags = ( val & 0x00000000001FFC00 ) >> 10;
+
+ if ( mate_id != 0 )
+ {
+ /* adjust flags for mate record */
+ curs->cache->sam_flags = ( flags & 0x1 ) |
+ ( flags & 0x2 ) |
+ ( ( flags & 0x8 ) >> 1 ) |
+ ( ( flags & 0x4 ) << 1 ) |
+ ( ( flags & 0x20 ) >> 1 ) |
+ ( ( flags & 0x10 ) << 1 ) |
+ ( ( flags & 0x40 ) ? 0x80 : 0x40 ) |
+ ( flags & 0x700 );
+ }
+ else
+ {
+ /* preserve flags as if original records is restored */
+ curs->cache->sam_flags = flags;
+ }
+ cols[ alg_SAM_FLAGS ].base.u32 = &curs->cache->sam_flags;
+ cols[ alg_SAM_FLAGS ].len = sizeof( curs->cache->sam_flags );
+
+ if ( param->use_seqid )
+ {
+ ReferenceObj_SeqId( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+ }
+ else
+ {
+ ReferenceObj_Name( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+ }
+
+ cols[ alg_MATE_REF_NAME ].len = string_size( cols[ alg_MATE_REF_NAME ].base.str );
+
+ if ( ref_proj == 0 )
+ {
+ curs->cache->pnext = pos_delta;
+ curs->cache->tlen = 0;
+ }
+ else if ( pos_delta > 0 )
+ {
+ curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+ curs->cache->tlen = - ( ref_proj + pos_delta );
+ }
+ else
+ {
+ curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+ curs->cache->tlen = ref_proj - pos_delta;
+ }
+
+ cols[ alg_MATE_REF_POS ].base.coord0 = &curs->cache->pnext;
+ cols[ alg_MATE_REF_POS ].len = sizeof( curs->cache->pnext );
+ cols[ alg_TEMPLATE_LEN ].base.i32 = &curs->cache->tlen;
+ cols[ alg_TEMPLATE_LEN ].len = sizeof( curs->cache->tlen );
+ {
+ uint32_t id;
+ ReferenceObj_Idx( curs->cache->ref, &id );
+ SAM_DUMP_DBG( 10, ( " --> mate %li: %u,%s[%hu],%u,%i\n",
+ mate_id, curs->cache->sam_flags, cols[ alg_MATE_REF_NAME ].base.str,
+ id, curs->cache->pnext, curs->cache->tlen ) );
+ }
+}
+#endif /* USE_MATE_CACHE */
+
+#if 0
+static rc_t OpenVTable( VDatabase const *db, STable* tbl, char const *name, bool optional )
+{
+ rc_t rc = VDatabaseOpenTableRead( db, &tbl->vtbl, name );
+ if ( GetRCState( rc ) == rcNotFound && optional )
+ {
+ rc = 0;
+ tbl->vtbl = NULL;
+ }
+ tbl->name = name;
+ return rc;
+}
+#endif
+
+static rc_t Cursor_Open( STable const *const tbl, SCurs *const curs, SCol cols[], SCursCache* cache )
+{
+ rc_t rc = 0;
+ unsigned i;
+
+ curs->vcurs = NULL;
+ if ( tbl == NULL || tbl->vtbl == NULL )
+ return 0;
+
+ rc = VTableCreateCachedCursorRead( tbl->vtbl, &curs->vcurs, CURSOR_CACHE );
+ if ( rc != 0 )
+ return rc;
+
+ rc = VCursorPermitPostOpenAdd( curs->vcurs );
+ if ( rc != 0 )
+ return rc;
+
+ if ( rc == 0 )
+ {
+ rc = VCursorOpen( curs->vcurs );
+ if ( rc == 0 )
+ {
+#if USE_MATE_CACHE
+ if ( cache != NULL )
+ {
+ curs->cache = cache;
+ }
+ else
+ {
+ curs->cache = &curs->cache_local;
+ rc = Cache_Init( &curs->cache_local );
+ }
+#endif /* USE_MATE_CACHE */
+ curs->tbl = tbl;
+ }
+ }
+
+ for ( i = 0; cols[ i ].name != NULL; ++i )
+ {
+ if ( cols[ i ].name[ 0 ] == 0 )
+ continue;
+ rc = VCursorAddColumn( curs->vcurs, &cols[ i ].idx, cols[ i ].name );
+ if ( GetRCObject( rc ) == rcColumn )
+ {
+ switch ( GetRCState( rc ) )
+ {
+ case rcNotFound:
+ case rcUndefined:
+ if ( !cols[ i ].optional )
+ break;
+ case rcExists:
+ rc = 0;
+ default:
+ break;
+ }
+ }
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t) column $(c)", "t=%s,c=%s", tbl->name, cols[ i ].name ) );
+ break;
+ }
+ }
+ if ( rc != 0 )
+ {
+ VCursorRelease( curs->vcurs );
+ curs->vcurs = NULL;
+ if ( rc != KLogLastErrorCode() )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t)", "t=%s", tbl->name ) );
+ }
+ }
+ else
+ {
+ SAM_DUMP_DBG( 2, ( "%s: table %s\n", __func__, curs->tbl->name ) );
+ }
+ return rc;
+}
+
+
+static void Cursor_Close( SCurs* curs )
+{
+ if ( curs != NULL && curs->vcurs != NULL )
+ {
+ SAM_DUMP_DBG( 2, ( "%s: table %s, columns rows read %lu\n", __func__, curs->tbl->name, curs->col_reads_qty ) );
+ VCursorRelease( curs->vcurs );
+#if USE_MATE_CACHE
+ if ( curs->cache == &curs->cache_local )
+ {
+ Cache_Close( curs->tbl->name, curs->cache );
+ }
+#endif /* USE_MATE_CACHE */
+ memset( curs, 0, sizeof( *curs ) );
+ }
+}
+
+
+static rc_t Cursor_Read( DataSource *ds, int64_t row_id, int firstCol, unsigned nCols )
+{
+ rc_t rc = 0;
+
+ if ( ds->curs.vcurs == NULL )
+ {
+ rc = Cursor_Open( &ds->tbl, &ds->curs, ds->cols, ds->curs.cache );
+ if ( rc != 0 )
+ return rc;
+ }
+ if (1)
+ {
+ SCol *const col = &ds->cols[ firstCol ];
+ unsigned i;
+
+ for ( i = 0; i < nCols && col[ i ].name; ++i )
+ {
+ uint32_t const idx = col[ i ].idx;
+
+ if ( idx != 0 )
+ {
+ uint32_t elem_bits;
+ uint32_t bit_offset;
+ uint32_t elem_count;
+ void const *base;
+
+ rc = VCursorCellDataDirect( ds->curs.vcurs, row_id, idx, &elem_bits, &base, &bit_offset, &elem_count );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+ ds->tbl.name, row_id, col[ i ].name ) );
+ return rc;
+ }
+
+ assert( bit_offset == 0 );
+ assert( elem_bits % 8 == 0 );
+
+ col[ i ].base.v = base;
+ col[ i ].len = elem_count;
+ }
+ }
+ }
+ return rc;
+}
+
+struct
+{
+ KWrtWriter writer;
+ void* data;
+ KFile* kfile;
+ uint64_t pos;
+} g_out_writer = {NULL};
+
+
+static rc_t CC BufferedWriter( void *const self, char const buffer[], size_t const bufsize, size_t *const pnum_writ )
+{
+ rc_t rc = 0;
+ size_t written = 0;
+
+ assert( buffer != NULL );
+
+ while ( written < bufsize )
+ {
+ size_t n;
+
+ rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos + written, &buffer[ written ], bufsize - written, &n );
+ if ( rc != 0 )
+ break;
+ written += n;
+ }
+ g_out_writer.pos += written;
+ if ( pnum_writ != NULL )
+ *pnum_writ = written;
+ return rc;
+}
+
+
+static rc_t BufferedWriterMake( bool gzip, bool bzip2 )
+{
+ rc_t rc = 0;
+
+ if ( gzip && bzip2 )
+ {
+ rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+ }
+ else if ( g_out_writer.writer != NULL )
+ {
+ rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+ }
+ else
+ {
+ rc = KFileMakeStdOut( &g_out_writer.kfile );
+ if ( rc == 0 )
+ {
+ g_out_writer.pos = 0;
+ if ( gzip )
+ {
+ KFile* gz;
+ rc = KFileMakeGzipForWrite( &gz, g_out_writer.kfile );
+ if ( rc == 0 )
+ {
+ KFileRelease( g_out_writer.kfile );
+ g_out_writer.kfile = gz;
+ }
+ }
+ else if ( bzip2 )
+ {
+ KFile* bz;
+ rc = KFileMakeBzip2ForWrite( &bz, g_out_writer.kfile );
+ if ( rc == 0 )
+ {
+ KFileRelease( g_out_writer.kfile );
+ g_out_writer.kfile = bz;
+ }
+ }
+ if ( rc == 0 )
+ {
+ KFile* buf;
+ rc = KBufFileMakeWrite( &buf, g_out_writer.kfile, false, 128 * 1024 );
+ if ( rc == 0 )
+ {
+ KFileRelease( g_out_writer.kfile );
+ g_out_writer.kfile = buf;
+ g_out_writer.writer = KOutWriterGet();
+ g_out_writer.data = KOutDataGet();
+ rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static void BufferedWriterRelease( bool flush )
+{
+ if ( flush )
+ {
+ /* avoid flushing buffered data after failure */
+ KFileRelease( g_out_writer.kfile );
+ }
+ if ( g_out_writer.writer != NULL )
+ {
+ KOutHandlerSet( g_out_writer.writer, g_out_writer.data );
+ }
+ g_out_writer.writer = NULL;
+}
+
+
+typedef struct ReadGroup
+{
+ BSTNode node;
+ char name[ 1024 ];
+} ReadGroup;
+
+
+static int CC ReadGroup_sort( BSTNode const *item, BSTNode const *node )
+{
+ return strcmp( ( ( ReadGroup const * )item )->name, ( ( ReadGroup const * ) node )->name );
+}
+
+
+static rc_t ReadGroup_print( char const *nm )
+{
+ rc_t rc = 0;
+ if ( nm[ 0 ] != '\0' && strcasecmp( nm, "default" ) )
+ {
+ rc = KOutMsg( "@RG\tID:%s\n", nm );
+ }
+ return rc;
+}
+
+
+static void CC ReadGroup_dump( BSTNode *n, void *data )
+{
+ ReadGroup const *g = ( ReadGroup* )n;
+ ReadGroup_print( g->name );
+}
+
+
+static rc_t CC DumpReadGroupsScan( STable const *tbl )
+{
+ SCol cols[] =
+ {
+ { "SPOT_GROUP", 0, {NULL}, 0, false },
+ { NULL, 0, {NULL}, 0, false }
+ };
+ rc_t rc = 0;
+ BSTree tree;
+ DataSource ds;
+
+ memset( &ds, 0, sizeof( ds ) );
+ ds.cols = cols;
+
+ BSTreeInit( &tree );
+ rc = Cursor_Open( tbl, &ds.curs, ds.cols, NULL );
+ if ( rc == 0 )
+ {
+ int64_t start;
+ uint64_t count;
+
+ rc = VCursorIdRange( ds.curs.vcurs, 0, &start, &count );
+ if ( rc == 0 )
+ {
+ ReadGroup* node = NULL;
+ uint32_t last_len = 0;
+
+ while ( count > 0 && rc == 0 )
+ {
+ rc = Cursor_Read( &ds, start, 0, ~(unsigned)0 );
+ if ( rc == 0 && cols[ 0 ].len != 0 )
+ {
+ if ( node == NULL ||
+ last_len != cols[ 0 ].len ||
+ strncmp( cols[ 0 ].base.str, node->name, cols[ 0 ].len ) != 0 )
+ {
+ node = malloc( sizeof( *node ) );
+ if ( node == NULL )
+ {
+ rc = RC( rcExe, rcNode, rcConstructing, rcMemory, rcExhausted );
+ }
+ else if ( cols[ 0 ].len > sizeof( node->name ) )
+ {
+ rc = RC( rcExe, rcString, rcCopying, rcBuffer, rcInsufficient );
+ }
+ else
+ {
+ last_len = cols[ 0 ].len;
+ string_copy( node->name, ( sizeof node->name ) - 1, cols[ 0 ].base.str, last_len );
+ node->name[ last_len ] = '\0';
+ rc = BSTreeInsertUnique( &tree, &node->node, NULL, ReadGroup_sort );
+ if ( GetRCState( rc ) == rcExists )
+ {
+ free( node );
+ rc = 0;
+ }
+ }
+ }
+ }
+ else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+ {
+ rc = 0;
+ }
+ start++;
+ count--;
+ }
+ }
+ Cursor_Close( &ds.curs );
+ }
+
+ if ( rc == 0 )
+ {
+ BSTreeForEach( &tree, false, ReadGroup_dump, NULL );
+ }
+ else if ( rc != KLogLastErrorCode() )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
+ }
+ BSTreeWhack( &tree, NULL, NULL );
+ return rc;
+}
+
+
+rc_t CC DumpReadGroups( STable const *tbl )
+{
+ rc_t rc = 0;
+ KMetadata const *m;
+
+ /* try getting list from stats meta */
+ rc = VTableOpenMetadataRead( tbl->vtbl, &m );
+ if ( rc == 0 )
+ {
+ KMDataNode const *n;
+ rc = KMetadataOpenNodeRead( m, &n, "/STATS/SPOT_GROUP" );
+ if ( rc == 0 )
+ {
+ KNamelist* names;
+ rc = KMDataNodeListChild( n, &names );
+ if ( rc == 0 )
+ {
+ uint32_t i, q;
+ rc = KNamelistCount( names, &q );
+ if ( rc == 0 )
+ {
+ for ( i = 0; rc == 0 && i < q; i++ )
+ {
+ char const *nm;
+ rc = KNamelistGet( names, i, &nm );
+ if ( rc == 0 )
+ {
+ rc = ReadGroup_print( nm );
+ }
+ }
+ }
+ KNamelistRelease( names );
+ }
+ KMDataNodeRelease( n );
+ }
+ KMetadataRelease( m );
+ }
+
+ if ( GetRCState( rc ) == rcNotFound )
+ {
+ rc = DumpReadGroupsScan( tbl );
+ }
+ else if ( rc != 0 && rc != KLogLastErrorCode() )
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
+ }
+ return rc;
+}
+
+static rc_t Cursor_ReadAlign( SCurs const *curs, int64_t row_id, SCol* cols, uint32_t idx )
+{
+ rc_t rc = 0;
+ SCol* c = NULL;
+ SCol* mate_id = NULL;
+#if USE_MATE_CACHE
+ uint64_t cache_val = 0;
+ bool cache_miss = false;
+#endif /* USE_MATE_CACHE */
+
+
+ for( ; rc == 0 && cols[ idx ].name != NULL; idx++ )
+ {
+ c = &cols[ idx ];
+ if ( c->idx != 0 )
+ {
+#if USE_MATE_CACHE
+ if ( mate_id != NULL && curs->cache != NULL && !cache_miss &&
+ ( idx == alg_SAM_FLAGS || idx == alg_MATE_REF_NAME || idx == alg_MATE_REF_POS || idx == alg_TEMPLATE_LEN ) &&
+ mate_id->idx && mate_id->len > 0 && mate_id->base.i64[ 0 ] > 0 )
+ {
+ if ( cache_val != 0 )
+ {
+ continue;
+ }
+ rc = Cache_Get( curs, mate_id->base.u64[ 0 ], &cache_val );
+ if ( rc == 0 )
+ {
+ continue;
+ }
+ else if ( !( GetRCObject( rc ) == rcItem && GetRCState( rc ) == rcNotFound ) )
+ {
+ break;
+ }
+ else
+ {
+ /* avoid multiple lookups in cache */
+ cache_miss = true;
+ }
+ }
+#endif /* USE_MATE_CACHE */
+ rc = VCursorCellDataDirect( curs->vcurs, row_id, c->idx, NULL, &c->base.v, NULL, &c->len );
+ if ( rc == 0 )
+ {
+ if ( idx == alg_SEQ_SPOT_ID && ( c->len ==0 || c->base.i64[ 0 ] == 0 ) )
+ {
+ return RC( rcExe, rcColumn, rcReading, rcRow, rcNotFound );
+ }
+ if ( idx == alg_MATE_ALIGN_ID )
+ {
+ mate_id = &cols[ alg_MATE_ALIGN_ID ];
+ }
+#if _DEBUGGING
+ ( ( SCurs* )curs )->col_reads_qty++;
+#endif
+ }
+ }
+ else
+ {
+ static INSDC_coord_zero readStart;
+ static INSDC_coord_len readLen;
+ static INSDC_coord_len cigarLen;
+
+ switch ( (int)idx )
+ {
+ case alg_READ_START:
+ readStart = 0;
+ c->base.coord0 = &readStart;
+ c->len = 1;
+ break;
+ case alg_READ_LEN:
+ readLen = cols[ alg_READ ].len;
+ c->base.coord_len = &readLen;
+ c->len = 1;
+ break;
+ case alg_CIGAR_LEN:
+ cigarLen = cols[ alg_CIGAR ].len;
+ c->base.coord_len = &cigarLen;
+ c->len = 1;
+ break;
+ }
+ }
+ }
+
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+ curs->tbl->name, row_id, c ? c->name : "<none>" ) );
+#if USE_MATE_CACHE
+ }
+ else if ( curs->cache == NULL )
+ {
+ }
+ else if ( cache_val == 0 )
+ {
+ /* this row is not from cache */
+ int64_t mate_align_id = ( mate_id != NULL && mate_id->len > 0 ) ? mate_id->base.i64[ 0 ] : 0;
+ if ( cols[ 0 ].idx != 0 && /* we have full cursor which means we are reading alignment table */
+ /* no mate -> unaligned (not secondary!) */
+ ( ( mate_align_id == 0 && param->unaligned && curs->cache != &curs->cache_local ) ||
+ /* 2nd mate with higher rowid and more than set gap rows away */
+ ( mate_align_id != 0 && mate_align_id > row_id && ( mate_align_id - row_id) > param->mate_row_gap_cachable ) ) )
+ {
+ rc = Cache_Add( row_id, curs, cols );
+ }
+ if(param->unaligned == true && mate_align_id == 0 ){
+ rc = KVectorSetBool( curs->cache->cache_unaligned_mate, cols[alg_SEQ_SPOT_ID].base.i64[0], true );
+ }
+ }
+ else
+ {
+ Cache_Unpack( cache_val, row_id, curs, cols );
+#endif /* USE_MATE_CACHE */
+ }
+ return rc;
+}
+
+
+static rc_t DumpName( char const *name, size_t name_len,
+ const char spot_group_sep, char const *spot_group,
+ size_t spot_group_len, int64_t spot_id )
+{
+ rc_t rc = 0;
+ if ( param->cg_friendly_names )
+ {
+ rc = KOutMsg( "%.*s-1:%lu", spot_group_len, spot_group, spot_id );
+ }
+ else
+ {
+ if ( param->name_prefix != NULL )
+ {
+ rc = KOutMsg( "%s.", param->name_prefix );
+ }
+ rc = BufferedWriter( NULL, name, name_len, NULL );
+ if ( rc == 0 && param->spot_group_in_name && spot_group_len > 0 )
+ {
+ rc = BufferedWriter( NULL, &spot_group_sep, 1, NULL );
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, spot_group, spot_group_len, NULL );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t DumpQuality( char const quality[], unsigned const count, bool const reverse, bool const quantize )
+{
+ rc_t rc = 0;
+ if ( quality == NULL )
+ {
+ unsigned i;
+
+ for ( i = 0; rc == 0 && i < count; ++i )
+ {
+ char const newValue = ((param->qualQuant && param->qualQuantSingle)?param->qualQuantSingle:30) + 33;
+ rc = BufferedWriter( NULL, &newValue, 1, NULL );
+ }
+ }
+ else if ( reverse || quantize )
+ {
+ unsigned i;
+
+ for ( i = 0; rc == 0 && i < count; ++i )
+ {
+ char const qual = quality[ reverse ? ( count - i - 1 ) : i ];
+ char const newValue = quantize ? param->qualQuant[ qual - 33 ] + 33 : qual;
+
+ rc = BufferedWriter( NULL, &newValue, 1, NULL );
+ }
+ }
+ else
+ {
+ rc = BufferedWriter( NULL, quality, count, NULL );
+ }
+ return rc;
+}
+
+
+static rc_t DumpUnalignedFastX( const SCol cols[], uint32_t read_id, INSDC_coord_zero readStart, INSDC_coord_len readLen, int64_t row_id )
+{
+ /* fast[AQ] represnted in SAM fields:
+ [@|>]QNAME unaligned
+ SEQ
+ +
+ QUAL
+ */
+ rc_t rc = BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+
+ /* QNAME: [PFX.]SEQUENCE:NAME[#SPOT_GROUP] */
+ if ( rc == 0 )
+ rc = DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '#',
+ cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
+ if ( rc == 0 && read_id > 0 )
+ {
+ rc = KOutMsg( "/%u", read_id );
+ }
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, " unaligned\n", 11, NULL );
+
+ /* SEQ: SEQUENCE.READ */
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, &cols[ seq_READ ].base.str[readStart], readLen, NULL );
+ if ( rc == 0 && param->fastq )
+ {
+ /* QUAL: SEQUENCE.QUALITY */
+ rc = BufferedWriter( NULL, "\n+\n", 3, NULL );
+ if ( rc == 0 )
+ rc = DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, false, param->quantizeQual );
+ }
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, "\n", 1, NULL );
+ return rc;
+}
+
+
+static rc_t DumpAlignedFastX( const SCol cols[], int64_t const alignId, uint32_t read_id, bool primary, bool secondary )
+{
+ rc_t rc = 0;
+ size_t nm;
+ unsigned readId;
+ unsigned const nreads = cols[ alg_READ_LEN ].len;
+
+ for ( readId = 0; readId < nreads && rc == 0 ; ++readId )
+ {
+ char const *qname = cols[ alg_SEQ_NAME ].base.str;
+ size_t qname_len = cols[ alg_SEQ_NAME ].len;
+ char synth_qname[ 40 ];
+ int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+ char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+ char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+ ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+ : NULL;
+ unsigned const readlen = cols[ alg_READ_LEN ].base.coord_len[ readId ];
+
+ /* fast[AQ] represnted in SAM fields:
+ [@|>]QNAME primary|secondary ref=RNAME pos=POS mapq=MAPQ
+ SEQ
+ +
+ QUAL
+ */
+ rc = BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+ /* QNAME: [PFX.]SEQ_NAME[#SPOT_GROUP] */
+ if ( qname_len == 0 || qname == NULL )
+ {
+ string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%li.%u", alignId, readId + 1 );
+ qname = synth_qname;
+ }
+ nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+ if ( rc == 0 )
+ rc = DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id);
+
+ if ( rc == 0 && read_id > 0 )
+ rc = KOutMsg( "/%u", read_id );
+
+ if ( rc == 0 )
+ {
+ if ( primary )
+ {
+ rc = BufferedWriter( NULL, " primary", 8, NULL );
+ }
+ else if ( secondary )
+ {
+ rc = BufferedWriter( NULL, " secondary", 10, NULL );
+ }
+ }
+
+ /* RNAME: REF_NAME or REF_SEQ_ID */
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, " ref=", 5, NULL );
+ if ( rc == 0 )
+ {
+ if ( param->use_seqid )
+ {
+ rc = BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+ }
+ else
+ {
+ rc = BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+ }
+ }
+
+ /* POS: REF_POS, MAPQ: MAPQ */
+ if ( rc == 0 )
+ rc = KOutMsg( " pos=%u mapq=%i\n", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1, cols[ alg_MAPQ ].base.i32[ 0 ] );
+
+ /* SEQ: READ */
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, read, readlen, NULL );
+ if ( rc == 0 && param->fastq )
+ {
+ /* QUAL: SAM_QUALITY */
+ rc = BufferedWriter( NULL, "\n+\n", 3, NULL );
+ if ( rc == 0 )
+ rc = DumpQuality( qual, readlen, false, param->quantizeQual );
+ }
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, "\n", 1, NULL );
+ }
+ return rc;
+}
+
+
+static
+rc_t DumpUnalignedSAM( const SCol cols[], uint32_t flags, INSDC_coord_zero readStart, INSDC_coord_len readLen,
+ char const *rnext, uint32_t rnext_len, INSDC_coord_zero pnext, char const readGroup[], int64_t row_id )
+{
+ unsigned i;
+
+ /* QNAME: [PFX.]NAME[.SPOT_GROUP] */
+ rc_t rc = DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '.',
+ cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
+
+ /* all these fields are const text for now */
+ if ( rc == 0 )
+ rc = KOutMsg( "\t%u\t*\t0\t0\t*\t%.*s\t%u\t0\t",
+ flags, rnext_len ? rnext_len : 1, rnext_len ? rnext : "*", pnext );
+ /* SEQ: SEQUENCE.READ */
+ if ( flags & 0x10 )
+ {
+ for( i = 0; i < readLen && rc == 0; i++ )
+ {
+ char base;
+
+ DNAReverseCompliment( &cols[ seq_READ ].base.str[ readStart + readLen - 1 - i ], &base, 1 );
+ rc = BufferedWriter( NULL, &base, 1, NULL );
+ }
+ }
+ else
+ {
+ rc = BufferedWriter( NULL, &cols[ seq_READ ].base.str[ readStart ], readLen, NULL );
+ }
+
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, "\t", 1, NULL );
+ /* QUAL: SEQUENCE.QUALITY */
+ if ( rc == 0 )
+ rc = DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, flags & 0x10, param->quantizeQual );
+
+ /* optional fields: */
+ if ( rc == 0 )
+ {
+ if ( readGroup )
+ {
+ rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, readGroup, string_size( readGroup ), NULL );
+ }
+ else if ( cols[ seq_SPOT_GROUP ].len > 0 )
+ {
+ /* read group */
+ rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, NULL );
+ }
+ }
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, "\n", 1, NULL );
+ return rc;
+}
+
+
+static
+rc_t DumpAlignedSAM( SAM_dump_ctx_t *const ctx,
+ DataSource const *ds,
+ int64_t alignId,
+ char const readGroup[],
+ int type)
+{
+ rc_t rc = 0;
+ unsigned const nreads = ds->cols[ alg_READ_LEN ].len;
+ SCol const *const cols = ds->cols;
+ int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+ INSDC_coord_one const read_id = cols[alg_SEQ_READ_ID].len > 0 ? cols[alg_SEQ_READ_ID].base.coord1[0] : 0;
+ INSDC_SRA_read_filter const *align_filter = cols[alg_READ_FILTER].len == nreads ? cols[alg_READ_FILTER].base.read_filter : NULL;
+ INSDC_SRA_read_filter seq_filter = 0;
+ unsigned readId;
+ unsigned cigOffset = 0;
+
+ if ( align_filter == NULL && spot_id && read_id && ctx->seq.cols )
+ {
+ rc_t rc;
+
+ rc = Cursor_Read(&ctx->seq, spot_id, seq_READ_FILTER, 1);
+ if (rc == 0 && ctx->seq.cols[seq_READ_FILTER].len >= read_id)
+ seq_filter = ctx->seq.cols[seq_READ_FILTER].base.read_filter[read_id - 1];
+ }
+
+ for ( readId = 0; readId < nreads && rc == 0 ; ++readId )
+ {
+ char const *qname = cols[ alg_SEQ_NAME ].base.str;
+ size_t qname_len = cols[ alg_SEQ_NAME ].len;
+ char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+ char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+ ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+ : NULL;
+ unsigned const readlen = nreads > 1 ? cols[ alg_READ_LEN ].base.coord_len[ readId ] : cols[ alg_READ ].len;
+ unsigned const sflags = cols[ alg_SAM_FLAGS ].base.v ? cols[ alg_SAM_FLAGS ].base.u32[ readId ] : 0;
+ INSDC_SRA_read_filter const filt = align_filter ? align_filter[readId] : seq_filter;
+ unsigned const flags = (sflags & ~((unsigned)0x200)) | ((filt == SRA_READ_FILTER_REJECT) ? 0x200 : 0);
+ char const *const cigar = cols[ alg_CIGAR ].base.str + cigOffset;
+ unsigned const cigLen = nreads > 1 ? cols[ alg_CIGAR_LEN ].base.coord_len[ readId ] : cols[ alg_CIGAR ].len;
+ size_t nm;
+ char synth_qname[1024];
+
+ cigOffset += cigLen;
+ if ( qname_len == 0 || qname == NULL )
+ {
+ string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "ALLELE_%li.%u", alignId, readId + 1 );
+ qname = synth_qname;
+ }
+ else if (ds->type == edstt_EvidenceAlignment) {
+ string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%u/ALLELE_%li.%u", spot_id, cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+ qname = synth_qname;
+ }
+ nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+ rc = DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id );
+
+ /* FLAG: SAM_FLAGS */
+ if ( rc == 0 )
+ {
+ if ( ds->type == edstt_EvidenceAlignment )
+ {
+ bool const cmpl = cols[alg_REVERSED].base.v && readId < cols[alg_REVERSED].len ? cols[alg_REVERSED].base.tf[readId] : false;
+ rc = KOutMsg( "\t%u\t", 1 | (cmpl ? 0x10 : 0) | (read_id == 1 ? 0x40 : 0x80) );
+ }
+ else if ( !param->unaligned /** not going to dump unaligned **/
+ && ( flags & 0x1 ) /** but we have sequenced multiple fragments **/
+ && ( flags & 0x8 ) ) /** and not all of them align **/
+ {
+ /*** remove flags talking about multiple reads **/
+ /* turn off 0x001 0x008 0x040 0x080 */
+ rc = KOutMsg( "\t%u\t", flags & ~0xC9 );
+ }
+ else
+ {
+ rc = KOutMsg( "\t%u\t", flags );
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ if ( ds->type == edstt_EvidenceAlignment && type == 0 )
+ {
+ rc = KOutMsg( "ALLELE_%li.%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+ }
+ else
+ {
+ /* RNAME: REF_NAME or REF_SEQ_ID */
+ if ( param->use_seqid )
+ rc = BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+ else
+ rc = BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+ }
+ }
+
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, "\t", 1, NULL );
+
+ /* POS: REF_POS */
+ if ( rc == 0 )
+ rc = KOutMsg( "%i\t", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1 );
+
+ /* MAPQ: MAPQ */
+ if ( rc == 0 )
+ rc = KOutMsg( "%i\t", cols[ alg_MAPQ ].base.i32[ 0 ] );
+
+ /* CIGAR: CIGAR_* */
+ if ( ds->type == edstt_EvidenceInterval )
+ {
+ unsigned i;
+
+ for ( i = 0; i != cigLen && rc == 0; ++i )
+ {
+ char ch = cigar[i];
+ if ( ch == 'S' ) ch = 'I';
+ rc = BufferedWriter(NULL, &ch, 1, NULL);
+ }
+ }
+ else
+ {
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, cigar, cigLen, NULL );
+ }
+
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, "\t", 1, NULL );
+
+ /* RNEXT: MATE_REF_NAME or '*' */
+ /* PNEXT: MATE_REF_POS or 0 */
+ if ( rc == 0 )
+ {
+ if ( cols[ alg_MATE_REF_NAME ].len )
+ {
+ if ( cols[ alg_MATE_REF_NAME ].len == cols[ alg_REF_NAME ].len &&
+ memcmp( cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len ) == 0 )
+ {
+ rc = BufferedWriter( NULL, "=\t", 2, NULL );
+ }
+ else
+ {
+ rc = BufferedWriter( NULL, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len, NULL );
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, "\t", 1, NULL );
+ }
+ if ( rc == 0 )
+ rc = KOutMsg( "%u\t", cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] + 1 );
+ }
+ else
+ {
+ rc = BufferedWriter( NULL, "*\t0\t", 4, NULL );
+ }
+ }
+
+ /* TLEN: TEMPLATE_LEN */
+ if ( rc == 0 )
+ rc = KOutMsg( "%i\t", cols[ alg_TEMPLATE_LEN ].base.v ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0 );
+
+ /* SEQ: READ */
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, read, readlen, NULL );
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, "\t", 1, NULL );
+
+ /* QUAL: SAM_QUALITY */
+ if ( rc == 0 )
+ rc = DumpQuality( qual, readlen, false, param->quantizeQual );
+
+ /* optional fields: */
+ if ( rc == 0 && ds->type == edstt_EvidenceInterval )
+ rc = KOutMsg( "\tRG:Z:ALLELE_%u", readId + 1 );
+
+ if ( rc == 0 )
+ {
+ if ( readGroup )
+ {
+ rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, readGroup, string_size( readGroup ), NULL );
+ }
+ else if ( cols[ alg_SPOT_GROUP ].len > 0 )
+ {
+ /* read group */
+ rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, cols[ alg_SPOT_GROUP ].base.str, cols[ alg_SPOT_GROUP ].len, NULL );
+ }
+ else if ( cols[ alg_SEQ_SPOT_GROUP ].len > 0 )
+ {
+ /* backward compatibility */
+ rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+ if ( rc == 0 )
+ rc = BufferedWriter( NULL, cols[ alg_SEQ_SPOT_GROUP ].base.str, cols[ alg_SEQ_SPOT_GROUP ].len, NULL );
+ }
+ }
+
+ if ( rc == 0 && param->cg_style > 0 && cols[ alg_CG_TAGS_STR ].len > 0 )
+ rc = BufferedWriter( NULL, cols[ alg_CG_TAGS_STR ].base.str, cols[ alg_CG_TAGS_STR ].len, NULL );
+
+ if ( rc == 0 )
+ {
+ if ( param->cg_style > 0 && cols[ alg_ALIGN_GROUP ].len > 0 )
+ {
+ char const *ZI = cols[ alg_ALIGN_GROUP ].base.str;
+ unsigned i;
+
+ for ( i = 0; rc == 0 && i < cols[ alg_ALIGN_GROUP ].len - 1; ++i )
+ {
+ if ( ZI[ i ] == '_' )
+ {
+ rc = KOutMsg( "\tZI:i:%.*s\tZA:i:%.1s", i, ZI, ZI + i + 1 );
+ break;
+ }
+ }
+ }
+ else if ( ds->type == edstt_EvidenceAlignment && type == 1 )
+ {
+ rc = KOutMsg( "\tZI:i:%li\tZA:i:%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+ }
+ }
+
+ /* align id */
+ if ( rc == 0 && param->xi )
+ rc = KOutMsg( "\tXI:i:%li", alignId );
+
+ /* hit count */
+ if ( rc == 0 && cols[alg_ALIGNMENT_COUNT].len )
+ rc = KOutMsg( "\tNH:i:%i", (int)cols[ alg_ALIGNMENT_COUNT ].base.u8[ readId ] );
+
+ /* edit distance */
+ if ( rc == 0 && cols[ alg_EDIT_DISTANCE ].len )
+ rc = KOutMsg( "\tNM:i:%i", cols[ alg_EDIT_DISTANCE ].base.i32[ readId ] );
+
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+ }
+ return rc;
+}
+
+
+static rc_t DumpUnalignedReads( SAM_dump_ctx_t *const ctx, SCol const calg_col[], int64_t row_id, uint64_t* rcount )
+{
+ rc_t rc = 0;
+ uint32_t i, nreads = 0;
+
+ if ( calg_col != NULL )
+ {
+ if ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x02 )
+ {
+ /* skip all aligned rows by flag */
+ return rc;
+ }
+ /* get primary alignments only */
+ rc = Cursor_Read( &ctx->seq, calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ], seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+ if ( rc == 0 )
+ {
+ for ( i = 0; i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+ {
+ if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+ {
+ if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] < row_id )
+ {
+ /* unaligned were printed with 1st aligment */
+ return rc;
+ }
+ }
+ else
+ {
+ nreads++;
+ }
+ }
+ if ( nreads == ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len )
+ {
+ /* skip all aligned rows by actual data, if flag above is not set properly */
+ return rc;
+ }
+ row_id = calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ];
+ }
+ }
+ if ( rc == 0 )
+ {
+ rc = Cursor_Read( &ctx->seq, row_id, 0, ~(unsigned)0 );
+ if ( rc == 0 )
+ {
+ unsigned non_empty_reads = 0;
+
+ nreads = ctx->seq.cols[ seq_READ_LEN ].idx != 0 ? ctx->seq.cols[ seq_READ_LEN ].len : 1;
+
+ for( i = 0; i < nreads; i++ ) {
+ unsigned const readLen = ctx->seq.cols[ seq_READ_LEN ].idx
+ ? ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ]
+ : 0;
+
+ if (readLen)
+ ++non_empty_reads;
+ }
+ for( i = 0; i < nreads; i++ )
+ {
+ INSDC_coord_zero readStart;
+ INSDC_coord_len readLen;
+
+ if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx != 0 &&
+ ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+ {
+ continue;
+ }
+
+ if ( ctx->seq.cols[ seq_READ_TYPE ].idx != 0 &&
+ !( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_BIOLOGICAL ) )
+ {
+ continue;
+ }
+
+ readLen = ctx->seq.cols[ seq_READ_LEN ].idx ?
+ ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ] :
+ ctx->seq.cols[ seq_READ ].len;
+ if ( readLen == 0 )
+ {
+ continue;
+ }
+
+ readStart = ctx->seq.cols[ seq_READ_START ].idx ?
+ ctx->seq.cols[ seq_READ_START ].base.coord0[ i ] :
+ 0;
+ if ( param->fasta || param->fastq )
+ {
+ rc = DumpUnalignedFastX( ctx->seq.cols, nreads > 1 ? i + 1 : 0, readStart, readLen, row_id );
+ }
+ else
+ {
+ uint32_t cflags = 0x4;
+ if ( param->reverse_unaligned )
+ {
+ if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_REVERSE )
+ {
+ cflags |= 0x10;
+ }
+ if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i == nreads - 1 ? 0 : ( i + 1 ) ] & SRA_READ_TYPE_REVERSE )
+ {
+ cflags |= 0x20;
+ }
+ }
+ if ( ctx->seq.cols[ seq_READ_FILTER ].idx != 0 )
+ {
+ if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_REJECT )
+ {
+ cflags |= 0x200;
+ }
+ else if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_CRITERIA )
+ {
+ cflags |= 0x400;
+ }
+ }
+ if ( calg_col == NULL )
+ {
+ rc = DumpUnalignedSAM( ctx->seq.cols, cflags |
+ ( non_empty_reads > 1 ? ( 0x1 | 0x8 | ( i == 0 ? 0x40 : 0x00 ) | ( i == nreads - 1 ? 0x80 : 0x00 ) ) : 0x00 ),
+ readStart, readLen, NULL, 0, 0, ctx->readGroup, row_id );
+ }
+ else
+ {
+ int c = param->use_seqid ? alg_REF_SEQ_ID : alg_REF_NAME;
+ uint16_t flags = cflags | 0x1 |
+ ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x10 ) << 1 ) |
+ ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x40 ) ? 0x80 : 0x40 );
+ rc = DumpUnalignedSAM( ctx->seq.cols, flags, readStart, readLen,
+ calg_col[ c ].base.str, calg_col[ c ].len,
+ calg_col[ alg_REF_POS ].base.coord0[ 0 ] + 1, ctx->readGroup, row_id );
+ }
+ }
+ *rcount = *rcount + 1;
+ }
+ }
+ }
+ return rc;
+}
+
+
+static bool AlignRegionFilter( SCol const *cols )
+{
+ if ( param->region_qty == 0 )
+ return true;
+ if ( cols[ alg_REF_NAME ].len != 0 || cols[ alg_REF_SEQ_ID ].len != 0 )
+ {
+ unsigned i;
+
+ assert( cols[ alg_REF_POS ].len == cols[ alg_REF_LEN ].len );
+
+ for ( i = 0; i < param->region_qty; i++ )
+ {
+ unsigned j;
+
+ for ( j = 0; j < cols[ alg_REF_POS ].len; j++ )
+ {
+ unsigned const refStart_zero = cols[ alg_REF_POS ].base.coord0[ j ];
+ unsigned const refEnd_exclusive = refStart_zero + cols[ alg_REF_LEN ].base.coord_len[ j ];
+ unsigned k;
+
+ for ( k = 0; k < param->region[ i ].rq; k++ )
+ {
+ unsigned const from_zero = param->region[ i ].r[ k ].from;
+ unsigned const to_inclusive = param->region[ i ].r[ k ].to;
+
+ if ( from_zero < refEnd_exclusive && refStart_zero <= to_inclusive )
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+
+
+static bool AlignDistanceFilter( SCol const *cols )
+{
+ if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+ {
+ if ( cols[ alg_TEMPLATE_LEN ].len == 0 && param->mp_dist_unknown )
+ {
+ return true;
+ }
+ else
+ {
+ uint32_t i, j;
+ for( i = 0; i < param->mp_dist_qty; i++ )
+ {
+ for( j = 0; j < cols[ alg_TEMPLATE_LEN ].len; j++ )
+ {
+ if ( ( cols[ alg_TEMPLATE_LEN ].base.i32[ j ] == 0 && param->mp_dist_unknown ) ||
+ ( param->mp_dist[ i ].from <= cols[ alg_TEMPLATE_LEN ].base.i32[ j ] &&
+ cols[ alg_TEMPLATE_LEN ].base.i32[ j ] <= param->mp_dist[ i ].to ) )
+ {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+ return true;
+}
+
+
+typedef struct cgOp_s
+{
+ uint16_t length;
+ uint8_t type; /* 0: match, 1: insert, 2: delete */
+ char code;
+} cgOp;
+
+
+static void print_CG_cigar( int line, cgOp const op[], unsigned const ops, unsigned const gap[ 3 ] )
+{
+#if _DEBUGGING
+ unsigned i;
+
+ SAM_DUMP_DBG( 3, ( "%5i: ", line ) );
+ for ( i = 0; i < ops; ++i )
+ {
+ if ( gap && ( i == gap[ 0 ] || i == gap[ 1 ] || i == gap[ 2 ] ) )
+ {
+ SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, tolower( op[ i ].code ) ) );
+ }
+ else
+ {
+ SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, toupper( op[ i ].code ) ) );
+ }
+ }
+ SAM_DUMP_DBG( 3, ( "\n" ) );
+#endif
+}
+
+/* gap contains the indices of the wobbles in op
+ * gap[0] is between read 1 and 2; it is the 'B'
+ * gap[1] is between read 2 and 3; it is an 'N'
+ * gap[2] is between read 3 and 4; it is an 'N'
+ */
+
+static rc_t CIGAR_to_CG_Ops( cgOp op[], unsigned const maxOps,
+ unsigned *const opCnt,
+ unsigned gap[ 3 ],
+ char const cigar[], unsigned const ciglen,
+ unsigned *const S_adjust,
+ unsigned *const CG_adjust,
+ unsigned const read,
+ bool const reversed )
+{
+ unsigned i;
+ unsigned ops = 0;
+ unsigned gapno;
+
+ *opCnt = 0;
+ *S_adjust = 0;
+ for ( i = 0; i < ciglen; ++ops )
+ {
+ char opChar=0;
+ int opLen=0;
+ int n;
+
+ for(n=0;n+i<ciglen && isdigit(cigar[n+i]);n++){
+ opLen = opLen * 10 + cigar[n+i] - '0';
+ }
+ if(n+i<ciglen){
+ opChar = cigar[n+i];
+ n++;
+ }
+ if ( ops + 1 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+
+ i += n;
+
+ op[ ops ].length = opLen;
+ op[ ops ].code = opChar;
+ switch ( opChar )
+ {
+ case 'M':
+ case '=':
+ case 'X':
+ op[ ops ].type = 0;
+ break;
+ case 'S':
+ *S_adjust += opLen;
+ case 'I':
+ op[ ops ].type = 1;
+ op[ ops ].code = 'I';
+ break;
+ case 'D':
+ op[ ops ].type = 2;
+ break;
+ default:
+ return RC( rcExe, rcData, rcReading, rcConstraint, rcViolated );
+ }
+ }
+ *opCnt = ops;
+ gap[ 0 ] = gap[ 1 ] = gap[ 2 ] = ops;
+ print_CG_cigar( __LINE__, op, ops, NULL );
+ if ( ops < 3 )
+ return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+
+ {
+ unsigned fwd = 0; /* 5 10 10 10 */
+ unsigned rev = 0; /* 10 10 10 5 */
+ unsigned acc; /* accumulated length */
+
+ if ( ( read == 1 && !reversed ) || ( read == 2 && reversed ) )
+ {
+ for ( i = 0, acc = 0; i < ops && acc <=5; ++i )
+ {
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc == 5 && op[ i + 1 ].type == 1 )
+ {
+ fwd = i + 1;
+ break;
+ }
+ else if ( acc > 5 )
+ {
+ unsigned const right = acc - 5;
+ unsigned const left = op[ i ].length - right;
+
+ memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 2;
+ op[ i ].length = left;
+ op[ i + 2 ].length = right;
+
+ op[ i + 1 ].type = 1;
+ op[ i + 1 ].code = 'B';
+ op[ i + 1 ].length = 0;
+
+ fwd = i + 1;
+ break;
+ }
+ }
+ }
+ }
+ else if ( ( read == 2 && !reversed ) || ( read == 1 && reversed ) )
+ {
+ for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+ {
+ --i;
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc == 5 && op[ i ].type == 1 )
+ {
+ rev = i;
+ break;
+ }
+ else if ( acc > 5 )
+ {
+ unsigned const left = acc - 5;
+ unsigned const right = op[ i ].length - left;
+
+ memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 2;
+ op[ i ].length = left;
+ op[ i + 2 ].length = right;
+
+ op[ i + 1 ].type = 1;
+ op[ i + 1 ].code = 'B';
+ op[ i + 1 ].length = 0;
+
+ rev = i + 1;
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ /* fprintf(stderr, "guessing layout\n"); */
+ for ( i = 0, acc = 0; i < ops && acc <= 5; ++i )
+ {
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc == 5 && op[ i + 1 ].type == 1 )
+ {
+ fwd = i + 1;
+ }
+ }
+ }
+ for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+ {
+ --i;
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc == 5 && op[i].type == 1 )
+ {
+ rev = i;
+ }
+ }
+ }
+ if ( ( fwd == 0 && rev == 0 ) || ( fwd != 0 && rev != 0 ) )
+ {
+ for ( i = 0; i < ops; ++i )
+ {
+ if ( op[ i ].type == 2 )
+ {
+ op[ i ].code = 'N';
+ *CG_adjust += op[ i ].length;
+ }
+ }
+ return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+ }
+ }
+ if ( fwd && op[ fwd ].type == 1 )
+ {
+ for ( i = ops, acc = 0; i > fwd + 1; )
+ {
+ --i;
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc >= 10 )
+ {
+ if ( acc > 10 )
+ {
+ unsigned const r = 10 + op[ i ].length - acc;
+ unsigned const l = op[ i ].length - r;
+
+ if ( ops + 2 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 2;
+ op[ i + 2 ].length = r;
+ op[ i ].length = l;
+
+ op[ i + 1 ].length = 0;
+ op[ i + 1 ].type = 2;
+ op[ i + 1 ].code = 'N';
+ i += 2;
+ }
+ else if ( i - 1 > fwd )
+ {
+ if ( op[ i - 1 ].type == 2 )
+ op[ i - 1 ].code = 'N';
+ else
+ {
+ if ( ops + 1 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 1;
+ op[ i ].length = 0;
+ op[ i ].type = 2;
+ op[ i ].code = 'N';
+ i += 1;
+ }
+ }
+ acc = 0;
+ }
+ }
+ }
+ /** change I to B+M **/
+ op[ fwd ].code = 'B';
+ memmove( &op[ fwd + 1 ], &op[ fwd ], ( ops - fwd ) * sizeof( op[ 0 ] ) );
+ ops += 1;
+ op[ fwd + 1 ].code = 'M';
+ *opCnt = ops;
+ /** set the gaps now **/
+ for ( gapno = 3, i = ops; gapno > 1 && i > 0; )
+ {
+ --i;
+ if ( op[ i ].code == 'N' )
+ gap[ --gapno ] = i;
+ }
+ gap[ 0 ] = fwd;
+ print_CG_cigar( __LINE__, op, ops, gap );
+ return 0;
+ }
+ if ( rev && op[ rev ].type == 1 )
+ {
+ for ( acc = i = 0; i < rev; ++i )
+ {
+ if ( op[ i ].type != 2 )
+ {
+ acc += op[ i ].length;
+ if ( acc >= 10 )
+ {
+ if ( acc > 10 )
+ {
+ unsigned const l = 10 + op[ i ].length - acc;
+ unsigned const r = op[ i ].length - l;
+
+ if ( ops + 2 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 2;
+ op[ i + 2 ].length = r;
+ op[ i ].length = l;
+
+ op[ i + 1 ].length = 0;
+ op[ i + 1 ].type = 2;
+ op[ i + 1 ].code = 'N';
+ rev += 2;
+ i += 2;
+ }
+ else if ( i + 1 < rev )
+ {
+ if ( op[ i + 1 ].type == 2)
+ op[ i + 1 ].code = 'N';
+ else
+ {
+ if ( ops + 1 >= maxOps )
+ return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+ memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+ ops += 1;
+ op[ i + 1 ].length = 0;
+ op[ i + 1 ].type = 2;
+ op[ i + 1 ].code = 'N';
+ rev += 1;
+ i += 1;
+ }
+ }
+ acc = 0;
+ }
+ }
+ }
+ for ( gapno = 3, i = 0; gapno > 1 && i < ops; ++i )
+ {
+ if ( op[ i ].code == 'N' )
+ gap[ --gapno ] = i;
+ }
+ gap[ 0 ] = rev;
+ op[ rev ].code = 'B';
+ memmove( &op[ rev + 1 ], &op[ rev ], ( ops - rev ) * sizeof( op[ 0 ] ) );
+ ops += 1;
+ op[ rev + 1 ].code = 'M';
+ *opCnt = ops;
+ print_CG_cigar( __LINE__, op, ops, gap );
+ return 0;
+ }
+ }
+ return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+}
+
+
+static rc_t GenerateCGData( SCol cols[], unsigned style )
+{
+ rc_t rc = 0;
+
+ memset( &cols[ alg_CG_TAGS_STR], 0, sizeof( cols[ alg_CG_TAGS_STR ] ) );
+
+ if ( cols[ alg_READ ].len == 35 && cols[ alg_SAM_QUALITY ].len == 35 )
+ {
+ static char newCIGAR[ 35 * 11 ];
+ static int32_t newEditDistance;
+ unsigned gap[ 3 ] = { 0, 0, 0 };
+ cgOp cigOp[ 35 ];
+ unsigned opCnt;
+ unsigned i;
+ unsigned j;
+ size_t sz;
+ unsigned S_adjust = 0;
+ unsigned CG_adjust = 0;
+ unsigned const read = cols[ alg_SEQ_READ_ID ].len && cols[ alg_REVERSED ].len ? cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+ bool const reversed = cols[ alg_REVERSED ].len ? cols[ alg_REVERSED ].base.u8[ 0 ] : false;
+
+ rc = CIGAR_to_CG_Ops( cigOp, sizeof( cigOp ) / sizeof( cigOp[ 0 ] ), &opCnt, gap,
+ cols[ alg_CIGAR ].base.str, cols[ alg_CIGAR ].len,
+ &S_adjust, &CG_adjust, read, reversed );
+ if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+ {
+ rc = 0;
+ if ( style == 1 )
+ goto CLEAN_CIGAR;
+ else
+ goto PRINT_CIGAR;
+ }
+ if ( rc != 0 )
+ return 0;
+
+ if ( CG_adjust == 0 )
+ CG_adjust = ( gap[ 0 ] < opCnt ? cigOp[ gap[ 0 ] ].length : 0 )
+ + ( gap[ 1 ] < opCnt ? cigOp[ gap[ 1 ] ].length : 0 )
+ + ( gap[ 2 ] < opCnt ? cigOp[ gap[ 2 ] ].length : 0 );
+
+ print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+ if ( style == 1 )
+ {
+ static char newSeq[ 35 ];
+ static char newQual[ 35 ];
+ static char tags[ 35*22 + 1 ];
+ unsigned const B_len = cigOp[ gap[ 0 ] ].length;
+ unsigned const B_at = gap[ 0 ] < gap[ 2 ] ? 5 : 30;
+
+ if ( 0 < B_len && B_len < 5 )
+ {
+ memcpy( newSeq, cols[ alg_READ ].base.v, 35 );
+ memcpy( newQual, cols[ alg_SAM_QUALITY ].base.v, 35 );
+
+ cols[ alg_CG_TAGS_STR ].base.v = tags;
+
+ cols[ alg_READ ].base.v = newSeq;
+ cols[ alg_READ ].len = 35 - B_len;
+
+ cols[ alg_SAM_QUALITY ].base.v = newQual;
+ cols[ alg_SAM_QUALITY ].len = 35 - B_len;
+
+ /* nBnM -> nB0M */
+ cigOp[ gap[ 0 ] + 1 ].length -= B_len;
+ if ( gap[ 0 ] < gap[ 2 ] )
+ {
+ rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+ 5 - B_len, B_len, 30 - B_len, 2 * B_len, &newSeq[ 5 - B_len ], 2 * B_len, &newQual[ 5 - B_len ] );
+ if ( rc == 0 )
+ {
+ cols[ alg_CG_TAGS_STR ].len = sz;
+ }
+ memmove( &cigOp[ gap[ 0 ] ],
+ &cigOp[ gap[ 0 ] + 1 ],
+ ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+ --opCnt;
+ }
+ else
+ {
+ rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+ 30 - B_len, B_len, 5 - B_len, 2 * B_len, &newSeq[ 30 - B_len ], 2 * B_len, &newQual[ 30 - B_len ] );
+ if ( rc == 0 )
+ {
+ cols[ alg_CG_TAGS_STR ].len = sz;
+ }
+ memmove( &cigOp[ gap[ 0 ] ],
+ &cigOp[ gap[ 0 ] + 1 ],
+ ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+ --opCnt;
+ }
+ if ( rc == 0 )
+ {
+ for ( i = B_at; i < B_at + B_len; ++i )
+ {
+ int const Lq = newQual[ i - B_len ];
+ int const Rq = newQual[ i ];
+
+ if ( Lq <= Rq )
+ {
+ newSeq[ i - B_len ] = newSeq[ i ];
+ newQual[ i - B_len ] = Rq;
+ }
+ else
+ {
+ newSeq[ i ] = newSeq[ i - B_len ];
+ newQual[ i ] = Lq;
+ }
+ }
+ memmove( &newSeq [ B_at ], &newSeq [ B_at + B_len ], 35 - B_at - B_len );
+ memmove( &newQual[ B_at ], &newQual[ B_at + B_len ], 35 - B_at - B_len );
+ }
+ }
+ else
+ {
+ int len = cigOp[ gap[ 0 ] ].length;
+
+ cigOp[ gap[ 0 ] ].code = 'I';
+ for (i = gap[0] + 1; i < opCnt && len > 0; ++i) {
+ if (cigOp[i].length <= len){
+ len -= cigOp[i].length;
+ cigOp[i].length = 0;
+ }
+ else {
+ cigOp[i].length -= len;
+ len = 0;
+ }
+ }
+ CG_adjust -= cigOp[ gap[ 0 ] ].length;
+ }
+ }
+ if ( rc == 0 )
+ {
+ PRINT_CIGAR:
+ CLEAN_CIGAR:
+ print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+ /* remove zero length ops */
+ for ( j = i = 0; i < opCnt; )
+ {
+ if ( cigOp[ j ].length == 0)
+ {
+ ++j;
+ --opCnt;
+ continue;
+ }
+ cigOp[ i++ ] = cigOp[ j++ ];
+ }
+ print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+ if ( cols[ alg_EDIT_DISTANCE ].len )
+ {
+ int const edit_distance = cols[ alg_EDIT_DISTANCE ].base.i32[ 0 ];
+ int const adjusted = edit_distance + S_adjust - CG_adjust;
+
+ newEditDistance = adjusted > 0 ? adjusted : 0;
+ SAM_DUMP_DBG( 4, ( "NM: before: %u, after: %u(+%u-%u)\n", edit_distance, newEditDistance, S_adjust, CG_adjust ) );
+ cols[ alg_EDIT_DISTANCE ].base.v = &newEditDistance;
+ cols[ alg_EDIT_DISTANCE ].len = 1;
+ }
+ /* merge adjacent ops */
+ for ( i = opCnt; i > 1; )
+ {
+ --i;
+ if ( cigOp[ i - 1 ].code == cigOp[ i ].code )
+ {
+ cigOp[ i - 1 ].length += cigOp[ i ].length;
+ memmove( &cigOp[ i ], &cigOp[ i + 1 ], ( opCnt - 1 - i ) * sizeof( cigOp[ 0 ] ) );
+ --opCnt;
+ }
+ }
+ print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+ for ( i = j = 0; i < opCnt && rc == 0; ++i )
+ {
+ rc = string_printf( &newCIGAR[ j ], sizeof( newCIGAR ) - j, &sz, "%u%c", cigOp[ i ].length, cigOp[ i ].code);
+ j += sz;
+ }
+ cols[ alg_CIGAR ].base.v = newCIGAR;
+ cols[ alg_CIGAR ].len = j;
+ }
+ }
+ return rc;
+}
+
+
+static bool DumpAlignedRow( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+ int64_t row,
+ bool const primary,
+ int const cg_style,
+ rc_t *prc )
+{
+ rc_t rc = 0;
+
+ /* if SEQ_SPOT_ID is open then skip rows with no SEQ_SPOT_ID */
+ if ( ds->cols[ alg_SEQ_SPOT_ID ].idx )
+ {
+ rc = Cursor_Read( ds, row, alg_SEQ_SPOT_ID, 1 );
+ if ( rc != 0 )
+ {
+ if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+ *prc = rc;
+ return false;
+ }
+ if ( ds->cols[ alg_SEQ_SPOT_ID ].len == 0 ||
+ ds->cols[ alg_SEQ_SPOT_ID ].base.i64[ 0 ] == 0 )
+ return false;
+ }
+
+ /* skip rows that fail mate distance filter */
+ if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+ {
+ rc = Cursor_Read( ds, row, alg_TEMPLATE_LEN, 1 );
+ if ( rc != 0 )
+ {
+ if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+ *prc = rc;
+ return false;
+ }
+ if ( !AlignDistanceFilter( ds->cols ) )
+ return false;
+ }
+
+ rc = Cursor_ReadAlign( &ds->curs, row, ds->cols, 0 );
+ if ( rc != 0 )
+ {
+ if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+ *prc = rc;
+ return false;
+ }
+
+ if ( param->fasta || param->fastq )
+ {
+ unsigned const read_id = ds->cols[ alg_SEQ_READ_ID ].base.v ? ds->cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+
+ rc = DumpAlignedFastX( ctx->pri.cols, row, read_id, primary, false );
+ }
+ else
+ {
+ if ( cg_style != 0 )
+ {
+ rc = GenerateCGData( ds->cols, cg_style );
+ if ( rc != 0 )
+ {
+ *prc = rc;
+ return false;
+ }
+ }
+ rc = DumpAlignedSAM(ctx, ds, row, ctx->readGroup, 0 );
+ }
+ *prc = rc;
+ return true;
+}
+
+
+static rc_t DumpAlignedRowList( SAM_dump_ctx_t *const ctx, DataSource *const ds, SCol const *const ids,
+ int64_t *rcount,
+ bool const primary,
+ int const cg_style,
+ bool const noFilter )
+{
+ rc_t rc;
+ unsigned i;
+ unsigned const n = ids->len;
+
+ for ( i = 0; ( rc = Quitting() ) == 0 && i < n; ++i )
+ {
+ int64_t const row = ids->base.i64[ i ];
+
+ if ( ! noFilter )
+ rc = Cursor_Read( ds, row, alg_REGION_FILTER, ~(unsigned)0 );
+
+ if ( rc == 0 )
+ {
+ if ( noFilter || AlignRegionFilter(ds->cols) )
+ {
+ if ( DumpAlignedRow( ctx, ds, row, primary, cg_style, &rc ) )
+ ++*rcount;
+ if ( rc != 0 )
+ break;
+ }
+ }
+ }
+ return rc;
+}
+
+static rc_t DumpAlignedRowListIndirect( SAM_dump_ctx_t *const ctx,
+ DataSource *const indirectSource,
+ DataSource *const directSource,
+ SCol const *const directIDs,
+ int64_t *rcount,
+ bool const primary,
+ int const cg_style )
+{
+ unsigned i;
+
+ for ( i = 0; i < directIDs->len; ++i )
+ {
+ int64_t const row = directIDs->base.i64[ i ];
+ rc_t rc = Cursor_Read( directSource, row, alg_REGION_FILTER, ~(unsigned)0 );
+
+ if ( rc != 0 )
+ return rc;
+
+ if ( !AlignRegionFilter( directSource->cols ) )
+ continue;
+
+ rc = Cursor_Read( directSource, row, alg_EVIDENCE_ALIGNMENT_IDS, 1 );
+ if ( rc != 0 )
+ return rc;
+
+ rc = DumpAlignedRowList( ctx, indirectSource, &directSource->cols[ alg_EVIDENCE_ALIGNMENT_IDS ],
+ rcount, primary, cg_style, true );
+ if ( rc != 0 )
+ return rc;
+ }
+ return 0;
+}
+
+
+enum e_tables
+{
+ primary_alignment,
+ secondary_alignment,
+ evidence_interval,
+ evidence_alignment
+};
+
+enum e_IDS_opts
+{
+ primary_IDS = ( 1 << primary_alignment ),
+ secondary_IDS = ( 1 << secondary_alignment ),
+ evidence_interval_IDS = ( 1 << evidence_interval ),
+ evidence_alignment_IDS = ( 1 << evidence_alignment )
+};
+
+
+static rc_t DumpAlignedRowList_cb( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn,
+ int options, int which, int64_t *rcount, SCol const *const IDS )
+{
+ /*SAM_DUMP_DBG(2, ("row %s index range is [%lu:%lu] pos %lu\n",
+ param->region[r].name, start, start + count - 1, cur_pos));*/
+ switch ( which )
+ {
+ case primary_IDS:
+ return DumpAlignedRowList( ctx, &ctx->pri, IDS, rcount, true, param->cg_style, false );
+
+ case secondary_IDS:
+ return DumpAlignedRowList( ctx, &ctx->sec, IDS, rcount, false, param->cg_style, false );
+
+ case evidence_interval_IDS:
+ {
+ rc_t rc = 0;
+
+ if ( ( options & evidence_interval_IDS ) != 0 )
+ rc = DumpAlignedRowList( ctx, &ctx->evi, IDS, rcount, true, 0, false );
+
+ if ( rc == 0 && ( options & evidence_alignment_IDS ) != 0 )
+ rc = DumpAlignedRowListIndirect( ctx, &ctx->eva, &ctx->evi, IDS, rcount, true, param->cg_style );
+
+ return rc;
+ }
+ }
+ return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
+}
+
+
+typedef struct CigOps{
+ char op;
+ int8_t ref_sign; /*** 0;+1;-1; ref_offset = ref_sign * offset ***/
+ int8_t seq_sign; /*** 0;+1;-1; seq_offset = seq_sign * offset ***/
+ uint32_t oplen;
+} CigOps;
+
+static void SetCigOp(CigOps *dst,char op,uint32_t oplen)
+{
+ dst->op = op;
+ dst->oplen = oplen;
+ switch(op) { /*MX= DN B IS PH*/
+ case 'M': case 'X': case '=':
+ dst->ref_sign=+1;
+ dst->seq_sign=+1;
+ break;
+ case 'D': case 'N':
+ dst->ref_sign=+1;
+ dst->seq_sign= 0;
+ break;
+ case 'B':
+ dst->ref_sign=-1;
+ dst->seq_sign= 0;
+ break;
+ case 'S': case 'I':
+ dst->ref_sign= 0;
+ dst->seq_sign=+1;
+ break;
+ case 'P': case 'H':
+ case 0: /** terminating op **/
+ dst->ref_sign= 0;
+ dst->seq_sign= 0;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+}
+
+static unsigned ExplodeCIGAR( CigOps dst[], unsigned len, char const cigar[], unsigned ciglen )
+{
+ unsigned i;
+ unsigned j;
+ int opLen;
+
+ for ( i = j = opLen=0; i < ciglen; i++) {
+ if(isdigit(cigar[i])){
+ opLen = opLen * 10 + cigar[i] - '0';
+ } else {
+ assert(isalpha(cigar[i]));
+ SetCigOp(dst+j,cigar[i],opLen);
+ opLen=0;
+ j++;
+ }
+ }
+ SetCigOp(dst+j,0,0);
+ j++;
+ return j;
+}
+
+
+#define CG_CIGAR_STRING_MAX (35 * 11 + 1)
+
+
+#if 0
+static unsigned FormatCIGAR( char dst[], unsigned cp, unsigned oplen, int opcode )
+{
+ size_t sz;
+ string_printf( dst + cp, CG_CIGAR_STRING_MAX - cp, &sz, "%u%c", oplen, opcode );
+ return sz;
+}
+
+
+static unsigned DeletedCIGAR( char dst[], unsigned const cp, int opcode, unsigned D,
+ uint32_t const Op[], int ri, unsigned len )
+{
+ unsigned i;
+ unsigned curPos = 0;
+ int curOp = opcode;
+ unsigned oplen = 0;
+
+ for ( i = 0; i < D && ri < len; ++i, ++ri )
+ {
+ uint32_t const op = Op[ ri ];
+ int const d = op >> 2;
+ int const m = op & 1;
+ int const nxtOp = m ? opcode : 'P';
+
+ if ( d != 0 )
+ {
+ if ( oplen != 0 )
+ curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+ curPos += FormatCIGAR( dst, cp, d, 'D' );
+ oplen = 0;
+ }
+ if ( oplen == 0 || nxtOp == curOp )
+ {
+ ++oplen;
+ }
+ else
+ {
+ curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+ oplen = 1;
+ }
+ curOp = nxtOp;
+ }
+
+ if ( oplen != 0 && curOp != opcode)
+ {
+ curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+ oplen = 0;
+ }
+ if ( i < D )
+ oplen += D - i;
+ if ( oplen )
+ curPos += FormatCIGAR( dst, curPos + cp, oplen, opcode );
+ return curPos;
+}
+#endif
+
+static char merge_M_type_ops(char a,char b)
+{ /*MX=*/
+ char c=0;
+ switch(b){
+ case 'X':
+ switch(a){
+ case '=': c='X'; break;
+ case 'X': c='M'; break; /**we don't know - 2X may create '=' **/
+ case 'M': c='M'; break;
+ }
+ break;
+ case 'M':
+ c='M';
+ break;
+ case '=':
+ c=a;
+ break;
+ }
+ assert(c!=0);
+ return c;
+}
+
+
+static unsigned CombineCIGAR( char dst[], CigOps const seqOp[], unsigned seq_len,
+ int refPos, CigOps const refOp[], unsigned ref_len )
+{
+ bool done=false;
+ unsigned ciglen=0,last_ciglen=0;
+ char last_cig_op;
+ uint32_t last_cig_oplen=0;
+ int si=0,ri=0;
+ CigOps seq_cop={0,0,0,0},ref_cop={0,0,0,0};
+ int seq_pos=0; /** seq_pos is tracked roughly - with every extraction from seqOp **/
+ int ref_pos=0; /** ref_pos is tracked precisely - with every delta and consumption in cigar **/
+ int delta=refPos; /*** delta in relative positions of seq and ref **/
+ /*** when delta < 0 - rewind or extend the reference ***/
+ /*** wher delta > 0 - skip reference ***/
+#define MACRO_BUILD_CIGAR(OP,OPLEN) \
+ if( last_cig_oplen > 0 && last_cig_op == OP){ \
+ last_cig_oplen += OPLEN; \
+ ciglen = last_ciglen + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op); \
+ } else { \
+ last_ciglen = ciglen; \
+ last_cig_oplen = OPLEN; \
+ last_cig_op = OP; \
+ ciglen = ciglen + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op); \
+ }
+ while(!done){
+ while(delta < 0){
+ ref_pos += delta; /** we will make it to back up this way **/
+ if(ri > 0){ /** backing up on ref if possible ***/
+ int avail_oplen = refOp[ri-1].oplen - ref_cop.oplen;
+ if(avail_oplen > 0 ){
+ if((-delta) <= avail_oplen * ref_cop.ref_sign){ /*** rewind within last operation **/
+ ref_cop.oplen -= delta;
+ delta -= delta * ref_cop.ref_sign;
+ } else { /*** rewind the whole ***/
+ ref_cop.oplen += avail_oplen;
+ delta += avail_oplen * ref_cop.ref_sign;
+ }
+ } else {
+ ri--;
+ /** pick the previous as used up **/
+ ref_cop = refOp[ri-1];
+ ref_cop.oplen =0;
+ }
+ } else { /** extending the reference **/
+ SetCigOp(&ref_cop,'=',ref_cop.oplen - delta);
+ delta = 0;
+ }
+ ref_pos -= delta;
+ }
+ if(ref_cop.oplen == 0){ /*** advance the reference ***/
+ ref_cop = refOp[ri++];
+ if(ref_cop.oplen == 0) { /** extending beyond the reference **/
+ SetCigOp(&ref_cop,'=',1000);
+ }
+ assert(ref_cop.oplen > 0 );
+ }
+ if(delta > 0){ /*** skip refOps ***/
+ ref_pos += delta; /** may need to back up **/
+ if(delta >= ref_cop.oplen){ /** full **/
+ delta -= ref_cop.oplen * ref_cop.ref_sign;
+ ref_cop.oplen = 0;
+ } else { /** partial **/
+ ref_cop.oplen -= delta;
+ delta -= delta * ref_cop.ref_sign;
+ }
+ ref_pos -= delta; /** if something left - restore ***/
+ continue;
+ }
+ /*** seq and ref should be synchronized here **/
+ assert(delta == 0);
+ if(seq_cop.oplen == 0){ /*** advance sequence ***/
+ if(seq_pos < seq_len){
+ seq_cop = seqOp[si++];
+ assert(seq_cop.oplen > 0 );
+ seq_pos += seq_cop.oplen * seq_cop.seq_sign;
+ } else {
+ done=true;
+ }
+ }
+ if(!done){
+ int seq_seq_step = seq_cop.oplen * seq_cop.seq_sign; /** sequence movement**/
+ int seq_ref_step = seq_cop.oplen * seq_cop.ref_sign; /** influence of sequence movement on intermediate reference **/
+ int ref_seq_step = ref_cop.oplen * ref_cop.seq_sign; /** movement of the intermediate reference ***/
+ int ref_ref_step = ref_cop.oplen * ref_cop.ref_sign; /** influence of the intermediate reference movement on final reference ***/
+ assert( ref_ref_step >= 0); /** no B in the reference **/
+ if( seq_ref_step <= 0){ /** BSIPH in the sequence against anything ***/
+ MACRO_BUILD_CIGAR( seq_cop.op, seq_cop.oplen );
+ seq_cop.oplen = 0;
+ delta = seq_ref_step; /** if negative - will force rewind next cycle **/
+ } else if(ref_ref_step <= 0){ /** MX=DN against SIPH in the reference***/
+ if(ref_seq_step == 0){ /** MX=DN against PH **/
+ MACRO_BUILD_CIGAR( ref_cop.op,ref_cop.oplen);
+ ref_cop.oplen = 0;
+ } else {
+ int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+ if(seq_seq_step == 0){ /** DN agains SI **/
+ MACRO_BUILD_CIGAR('P',min_len);
+ } else { /** MX= agains SI ***/
+ MACRO_BUILD_CIGAR( ref_cop.op,min_len);
+ }
+ seq_cop.oplen -= min_len;
+ ref_cop.oplen -= min_len;
+ }
+ } else { /*MX=DN against MX=DN*/
+ int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+ if(seq_seq_step == 0){ /* DN against MX=DN */
+ if(ref_seq_step == 0){ /** padding DN against DN **/
+ MACRO_BUILD_CIGAR('P',min_len);
+ ref_cop.oplen -= min_len;
+ seq_cop.oplen -= min_len;
+ } else { /* DN against MX= **/
+ MACRO_BUILD_CIGAR(seq_cop.op,min_len);
+ seq_cop.oplen -= min_len;
+ }
+ } else if (ref_cop.seq_sign == 0){ /* MX= against DN - always wins */
+ MACRO_BUILD_CIGAR(ref_cop.op,min_len);
+ ref_cop.oplen -= min_len;
+ } else { /** MX= against MX= ***/
+ MACRO_BUILD_CIGAR(merge_M_type_ops(seq_cop.op,ref_cop.op),min_len);
+ ref_cop.oplen -= min_len;
+ seq_cop.oplen -= min_len;
+ }
+ ref_pos += min_len;
+ }
+ }
+ }
+ return ciglen;
+}
+
+
+static rc_t DumpCGSAM( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn, int options,
+ int which, int64_t *rows, SCol const *const ids )
+{
+ if ( which == evidence_interval_IDS )
+ {
+ rc_t rc = 0;
+ unsigned i;
+
+ for ( i = 0; i < ids->len; ++i )
+ {
+ int64_t const rowInterval = ids->base.i64[ i ];
+
+ rc = Cursor_Read( &ctx->evi, rowInterval, alg_REGION_FILTER, ~(0u) );
+ if ( rc == 0 )
+ {
+ if ( AlignRegionFilter( ctx->evi.cols ) )
+ {
+ rc = Cursor_ReadAlign( &ctx->evi.curs, rowInterval, ctx->evi.cols, 0 );
+ if ( rc == 0 )
+ {
+ unsigned const evidence = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].len;
+ if ( evidence != 0 )
+ {
+ INSDC_coord_len const *const refLen = ctx->evi.cols[ alg_READ_LEN ].base.coord_len;
+ INSDC_coord_len const *const cigLen = ctx->evi.cols[ alg_CIGAR_LEN ].base.coord_len;
+ unsigned const ploids = ctx->evi.cols[ alg_CIGAR_LEN ].len;
+ unsigned const totalIntervalReadLen = ctx->evi.cols[ alg_READ ].len;
+ CigOps refCigOps_stack[1024];
+ CigOps *refCigOps_heap=NULL;
+ CigOps *refCigOps;
+
+ if( totalIntervalReadLen > 1000){
+ refCigOps=refCigOps_heap = malloc( sizeof( refCigOps[ 0 ] ) * (totalIntervalReadLen+ploids) );
+ } else {
+ refCigOps=refCigOps_stack;
+ }
+
+ if ( refCigOps != NULL )
+ {
+ unsigned j;
+ unsigned start;
+ unsigned cigop_starts[256];
+
+ assert(ploids < 256);
+
+ for ( start = j = 0, cigop_starts[0]=0; j < ploids; ++j )
+ {
+ unsigned len = cigLen[ j ];
+ cigop_starts[j+1] = cigop_starts[j] + ExplodeCIGAR( refCigOps + cigop_starts[j], refLen[ j ],
+ ctx->evi.cols[ alg_CIGAR ].base.str + start, len );
+ start += len;
+ }
+
+ for ( j = 0; j < evidence; ++j )
+ {
+ int64_t const rowAlign = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].base.i64[ j ];
+
+ rc = Cursor_ReadAlign( &ctx->eva.curs, rowAlign, ctx->eva.cols, 0 );
+ if ( rc == 0 )
+ {
+ if(param->cg_style != 0)
+ rc = GenerateCGData( ctx->eva.cols, param->cg_style );
+ if ( rc == 0 )
+ {
+ int const ploidy = ctx->eva.cols[ alg_REF_PLOIDY ].base.u32[ 0 ];
+ int const readLen = ctx->eva.cols[ alg_READ ].len;
+ INSDC_coord_zero refPos = ctx->eva.cols[ alg_REF_POS ].base.coord0[ 0 ];
+ CigOps op[ 36 ];
+ char cigbuf[ CG_CIGAR_STRING_MAX ];
+
+ memset( cigbuf, 0, CG_CIGAR_STRING_MAX );
+ ExplodeCIGAR( op, readLen, ctx->eva.cols[ alg_CIGAR ].base.str,
+ ctx->eva.cols[ alg_CIGAR ].len );
+ ctx->eva.cols[ alg_CIGAR ].len = CombineCIGAR( cigbuf, op, readLen, refPos,
+ refCigOps + cigop_starts[ ploidy - 1 ], refLen[ ploidy - 1 ] );
+ ctx->eva.cols[ alg_CIGAR ].base.str = cigbuf;
+ ctx->eva.cols[ alg_REF_POS ].base.v = &refPos;
+ refPos += ctx->evi.cols[ alg_REF_POS ].base.coord0[ 0 ] ;
+ if(refPos < 0){
+ ReferenceObj const *r = NULL;
+ rc = ReferenceList_Find( gRefList, &r,
+ ctx->evi.cols[ alg_REF_NAME ].base.str,
+ ctx->evi.cols[ alg_REF_NAME ].len );
+ if(rc == 0){
+ bool circular=false;
+ rc=ReferenceObj_Circular(r, &circular);
+ if(rc == 0 && circular){
+ INSDC_coord_len len;
+ rc=ReferenceObj_SeqLength(r,&len);
+ if(rc == 0)
+ refPos += len;
+ }
+ ReferenceObj_Release(r);
+ }
+ }
+ rc = DumpAlignedSAM( ctx, &ctx->eva, rowAlign, ctx->readGroup, 1 );
+ ++*rows;
+ }
+ else
+ break;
+ }
+ else
+ break;
+ }
+ if(refCigOps_heap) free( refCigOps_heap );
+ }
+ else
+ rc = RC( rcExe, rcTable, rcReading, rcMemory, rcExhausted );
+ }
+ }
+ }
+ }
+ else
+ break;
+ rc = rc ? rc : Quitting();
+ if ( rc != 0 )
+ break;
+ }
+ return rc;
+ }
+ return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
+}
+
+
+static rc_t ForEachAlignedRegion( SAM_dump_ctx_t *const ctx, enum e_IDS_opts const Options,
+ rc_t ( *user_func )( SAM_dump_ctx_t *ctx, TAlignedRegion const *rgn, int options, int which, int64_t *rows, SCol const *IDS ) )
+{
+ SCol cols[] =
+ {
+ { "MAX_SEQ_LEN", 0, { NULL }, 0, false },
+ { "OVERLAP_REF_POS", 0, { NULL }, 0, true },
+ { "PRIMARY_ALIGNMENT_IDS", 0, { NULL }, 0, false },
+ { "SECONDARY_ALIGNMENT_IDS", 0, { NULL }, 0, true },
+ { "EVIDENCE_INTERVAL_IDS", 0, { NULL }, 0, true },
+ { NULL, 0, { NULL }, 0, false }
+ };
+ enum eref_col
+ {
+ ref_MAX_SEQ_LEN = 0,
+ ref_OVERLAP_REF_LEN,
+ ref_PRIMARY_ALIGNMENT_IDS,
+ ref_SECONDARY_ALIGNMENT_IDS,
+ ref_EVIDENCE_INTERVAL_IDS
+ };
+
+ KIndex const *iname = NULL;
+ int64_t rows = 0;
+ rc_t rc = 0;
+ int options = Options & 7;
+
+ if ( Options & evidence_alignment_IDS )
+ options |= evidence_interval_IDS;
+
+ if ( ( options & primary_IDS ) == 0 )
+ cols[ ref_PRIMARY_ALIGNMENT_IDS ].name = "";
+ if ( ( options & secondary_IDS ) == 0 )
+ cols[ ref_SECONDARY_ALIGNMENT_IDS ].name = "";
+ if ( ( options & evidence_interval_IDS ) == 0 )
+ cols[ ref_EVIDENCE_INTERVAL_IDS ].name = "";
+
+ ctx->ref.cols = cols;
+
+ rc = VTableOpenIndexRead( ctx->ref.tbl.vtbl, &iname, "i_name" );
+ if ( rc == 0 )
+ {
+ rc = Cursor_Open( &ctx->ref.tbl, &ctx->ref.curs, ctx->ref.cols, NULL );
+ if ( rc == 0 )
+ {
+ int64_t rowid = 1;
+ uint64_t count = 0;
+ char refname[ 1024 ];
+ size_t sz;
+
+ if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS ].idx == 0 )
+ options &= ~primary_IDS;
+ if ( ctx->ref.cols[ ref_SECONDARY_ALIGNMENT_IDS ].idx == 0 )
+ options &= ~secondary_IDS;
+ if ( ctx->ref.cols[ ref_EVIDENCE_INTERVAL_IDS ].idx == 0 )
+ options &= ~evidence_interval_IDS;
+
+ /* new: if we have a list of regions, reset the their print-flag */
+ if ( param->region_qty > 0 )
+ {
+ unsigned r;
+ for ( r = 0; r < param->region_qty; ++r )
+ {
+ param->region[ r ].printed = 0;
+ }
+ }
+
+ while ( ( rc = KIndexProjectText(iname, rowid + count, &rowid, &count, refname, sizeof( refname ), &sz ) ) == 0 )
+ {
+ bool include;
+ unsigned r;
+ unsigned max_to = UINT_MAX;
+ unsigned min_from = 0;
+
+ for ( include = false, r = 0; r < param->region_qty; ++r )
+ {
+ if ( sz == string_size( param->region[ r ].name ) &&
+ memcmp( param->region[ r ].name, refname, sz ) == 0 )
+ {
+ include = true;
+ max_to = param->region[ r ].max_to;
+ min_from = param->region[ r ].min_from;
+ param->region[ r ].printed++; /* new: mark a region as printed */
+ break;
+ }
+ }
+
+ if ( param->region_qty == 0 || include )
+ {
+ int64_t const endrow_exclusive = rowid + count;
+ unsigned m;
+ unsigned k;
+
+ for ( k = 0, m = 1; rc == 0 && k < 3; ++k, m <<= 1 )
+ {
+ if ( m & options )
+ {
+ unsigned lookback = 0;
+ int64_t row;
+ int32_t row_start_offset;
+ unsigned pos;
+ unsigned const maxseqlen = 5000; /***** TODO: this code is to be rewritten anyway ****/
+
+ if ( param->region_qty )
+ {
+ if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].idx )
+ {
+ rc = Cursor_Read( &ctx->ref, rowid, 0, ~(0u) );
+ if ( rc != 0 )
+ break;
+ if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].len > k )
+ {
+ unsigned const overlap = ctx->ref.cols[ ref_OVERLAP_REF_LEN ].base.coord0[ k ];
+
+ if ( overlap != 0 )
+ {
+
+ assert( overlap < rowid * maxseqlen );
+ lookback = ( rowid - ( overlap / maxseqlen ) );
+ }
+ }
+ }
+ else
+ lookback = 1;
+ }
+ row_start_offset = min_from/maxseqlen - lookback;
+ if(row_start_offset < 0) row_start_offset=0;
+
+
+ for ( pos = row_start_offset*maxseqlen, row = rowid + row_start_offset; rc == 0 && row < endrow_exclusive; ++row )
+ {
+ if ( row < 1 )
+ {
+ row = 0;
+ continue;
+ }
+ rc = Cursor_Read( &ctx->ref, row, 0, ~(0u) );
+ if ( rc != 0 )
+ break;
+ if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ].len > 0 )
+ rc = user_func( ctx, ¶m->region[r], Options, m, &rows,
+ &ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ] );
+ pos += ctx->ref.cols[ ref_MAX_SEQ_LEN ].base.u32[ 0 ];
+ if ( pos >= max_to )
+ break;
+ if ( param->test_rows != 0 && rows > param->test_rows )
+ break;
+ }
+ }
+ }
+ }
+ if ( param->test_rows != 0 && rows > param->test_rows )
+ break;
+ if ( rc != 0 )
+ break;
+ } /* while */
+
+ /* new: walk the list of regions and report what was NOT printed ( found ) ... */
+ if ( param->region_qty > 0 && GetRCState( rc ) != rcCanceled )
+ {
+ unsigned r;
+ for ( r = 0; r < param->region_qty; ++r )
+ {
+ if ( param->region[ r ].printed == 0 )
+ {
+ (void)PLOGMSG( klogWarn, ( klogWarn, "reference >$(a)< not found", "a=%s", param->region[ r ].name ) );
+ }
+ }
+ }
+
+ if ( GetRCObject( rc ) == rcId && GetRCState( rc ) == rcNotFound )
+ {
+ rc = 0;
+ }
+
+ }
+ }
+ Cursor_Close( &ctx->ref.curs );
+ KIndexRelease( iname );
+
+ return rc;
+}
+
+
+static rc_t DumpAlignedTable( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+ bool const primary, int const cg_style, unsigned *const rcount )
+{
+ unsigned i;
+ int64_t start;
+ uint64_t count;
+ rc_t rc = VCursorIdRange( ds->curs.vcurs, 0, &start, &count );
+
+ if ( rc != 0 )
+ return rc;
+ for ( i = 0; i != (unsigned)count; ++i )
+ {
+ if ( DumpAlignedRow(ctx, ds, start + i, primary, cg_style, &rc ) )
+ ++*rcount;
+ if ( rc != 0 || ( rc = Quitting() ) != 0 )
+ return rc;
+ if ( param->test_rows && *rcount > param->test_rows )
+ break;
+ }
+ return 0;
+}
+
+
+static rc_t DumpUnsorted( SAM_dump_ctx_t *const ctx )
+{
+ rc_t rc = 0;
+ unsigned rcount;
+
+ if ( rc == 0 && param->cg_evidence )
+ {
+ SAM_DUMP_DBG( 2, ( "%s EVIDENCE_INTERVAL\n", ctx->accession ) );
+ rcount = 0;
+ rc = DumpAlignedTable( ctx, &ctx->evi, false, 0, &rcount );
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) allele sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ if ( rc == 0 && param->cg_ev_dnb )
+ {
+ SAM_DUMP_DBG( 2, ( "%s EVIDENCE_ALIGNMENT\n", ctx->accession ) );
+ rcount = 0;
+ rc = DumpAlignedTable( ctx, &ctx->eva, false, param->cg_style, &rcount );
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) support sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ if ( rc == 0 && ctx->pri.curs.vcurs )
+ {
+ SAM_DUMP_DBG( 2, ( "%s PRIMARY_ALIGNMENT\n", ctx->accession ) );
+ rcount = 0;
+ rc = DumpAlignedTable( ctx, &ctx->pri, true, param->cg_style, &rcount );
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) primary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ if ( rc == 0 && ctx->sec.curs.vcurs )
+ {
+ SAM_DUMP_DBG( 2, ( "%s SECONDARY_ALIGNMENT\n", ctx->accession ) );
+ rcount = 0;
+ rc = DumpAlignedTable( ctx, &ctx->sec, false, param->cg_style, &rcount );
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) secondary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ return rc;
+}
+
+
+static rc_t DumpUnaligned( SAM_dump_ctx_t *const ctx, bool const aligned )
+{
+ rc_t rc = 0;
+ int64_t start = 0;
+ uint64_t count = 0;
+
+ rc = VCursorIdRange( ctx->seq.curs.vcurs, 0, &start, &count );
+ if ( rc == 0 )
+ {
+ uint64_t rcount = 0;
+ if ( param->test_rows != 0 && count > param->test_rows )
+ {
+ count = param->test_rows;
+ }
+ SAM_DUMP_DBG( 2, ( "%s SEQUENCE table range from %ld qty %lu\n", ctx->accession, start, count ) );
+ while ( count > 0 && rc == 0 )
+ {
+ uint32_t i;
+
+ if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx == 0)
+ {
+ rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+ }
+ else
+ {
+ /* avoid reading whole sequence cursor data unnecessarily */
+ rc = Cursor_Read( &ctx->seq, start, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+ if ( rc == 0 )
+ {
+ /* find if its completely unaligned */
+ int64_t min_prim_id = 0;
+ bool has_unaligned = false;
+ for ( i = 0; rc == 0 && i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+ {
+ int64_t x = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ];
+ has_unaligned |= x == 0;
+ if ( ( min_prim_id == 0 && x != 0 ) || min_prim_id < x )
+ {
+ min_prim_id = x;
+ }
+ }
+ if ( min_prim_id == 0 )
+ {
+ rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+ }
+ else if ( has_unaligned && !param->unaligned_spots )
+ {
+ if ( rc == 0 )
+ {
+#if USE_MATE_CACHE
+ uint64_t val;
+ rc = Cache_Get( &ctx->pri.curs, min_prim_id, &val );
+ if ( rc == 0 )
+ {
+ ctx->pri.cols[ alg_REF_POS ].len = 0;
+ Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+ ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &start;
+ ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+ memcpy( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+ memcpy( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+ memcpy( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+ }
+ else if ( !( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcItem ) )
+ {
+ break;
+ }
+ else
+ {
+#endif /* USE_MATE_CACHE */
+ rc = Cursor_ReadAlign( &ctx->pri.curs, min_prim_id, ctx->pri.cols, alg_MATE_ALIGN_ID );
+#if USE_MATE_CACHE
+ }
+#endif /* USE_MATE_CACHE */
+ rc = rc ? rc : DumpUnalignedReads( ctx, ctx->pri.cols, min_prim_id, &rcount );
+ }
+ }
+ } else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+ {
+ rc = 0;
+ }
+ }
+ start++;
+ count--;
+ rc = rc ? rc : Quitting();
+ }
+ (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) unaligned sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+ }
+ return rc;
+}
+
+#if USE_MATE_CACHE
+static rc_t FlushUnalignedRead_cb (uint64_t key, bool value,void *user_data)
+{
+ rc_t rc;
+ int64_t spot_id = (int64_t) key;
+ int64_t aligned_mate_id = (int64_t) value;
+ SAM_dump_ctx_t *const ctx = user_data;
+ rc = Cursor_Read( &ctx->seq, spot_id, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+ if ( rc == 0 ) {
+ uint64_t rcount;
+ uint64_t val;
+ assert(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len == 2);
+ if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0]==0){
+ aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1];
+ assert(aligned_mate_id != 0);
+ } else if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1] == 0){
+ aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0];
+ assert(aligned_mate_id != 0);
+ } else {
+ assert(0);
+ }
+ rc = Cache_Get( &ctx->pri.curs, aligned_mate_id, &val );
+ if ( rc == 0 ) {
+ ctx->pri.cols[ alg_REF_POS ].len = 0;
+ Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+ ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &spot_id;
+ ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+ memcpy( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+ memcpy( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+ memcpy( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+ rc =DumpUnalignedReads( ctx, ctx->pri.cols, aligned_mate_id, &rcount );
+ }
+ }
+ return rc;
+}
+static rc_t FlushUnaligned( SAM_dump_ctx_t *const ctx, const SCursCache * cache )
+{
+ return KVectorVisitBool (cache->cache_unaligned_mate, false, FlushUnalignedRead_cb, ctx );
+}
+#endif
+
+static rc_t DumpHeader( SAM_dump_ctx_t const *ctx )
+{
+ bool reheader = param->reheader;
+ rc_t rc = 0;
+
+ if ( !reheader )
+ {
+ if ( ctx->db )
+ {
+ /* grab header from db meta node */
+ KMetadata const *meta;
+
+ rc = VDatabaseOpenMetadataRead( ctx->db, &meta );
+ if ( rc == 0 )
+ {
+ KMDataNode const *node;
+
+ rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+ KMetadataRelease( meta );
+
+ if ( rc == 0 )
+ {
+ size_t offset = 0;
+
+ for ( offset = 0; ; )
+ {
+ size_t remain;
+ size_t nread;
+ char buffer[ 4096 ];
+
+ rc = KMDataNodeRead( node, offset, buffer, sizeof(buffer), &nread, &remain );
+ if ( rc != 0 )
+ break;
+ BufferedWriter( NULL, buffer, nread, NULL );
+ if ( remain == 0 )
+ {
+ if ( buffer[nread - 1] != '\n' )
+ {
+ buffer[ 0 ] = '\n';
+ rc = BufferedWriter( NULL, buffer, 1, NULL );
+ }
+ break;
+ }
+ offset += nread;
+ }
+ KMDataNodeRelease(node);
+ }
+ else if ( GetRCState( rc ) == rcNotFound )
+ {
+ reheader = true;
+ rc = 0;
+ }
+ }
+ }
+ else
+ {
+ reheader = true;
+ rc = 0;
+ }
+ }
+
+ if ( rc == 0 && reheader )
+ {
+ rc = KOutMsg( "@HD\tVN:1.3\n" );
+ if ( rc == 0 && gRefList )
+ rc = RefSeqPrint();
+ if ( rc == 0 && ctx->readGroup )
+ rc = ReadGroup_print( ctx->readGroup );
+ if ( rc == 0 && ctx->seq.tbl.vtbl )
+ rc = DumpReadGroups( &ctx->seq.tbl );
+ }
+
+ if ( rc == 0 && param->comments )
+ {
+ unsigned i;
+
+ for( i = 0; rc == 0 && param->comments[ i ]; ++i )
+ rc = KOutMsg( "@CO\t%s\n", param->comments[ i ] );
+ }
+ return rc;
+}
+
+
+static rc_t DumpDB( SAM_dump_ctx_t *const ctx )
+{
+ rc_t rc = 0;
+
+ if ( ctx->ref.tbl.vtbl != NULL )
+ rc = ReferenceList_MakeTable( &gRefList, ctx->ref.tbl.vtbl, 0, CURSOR_CACHE, NULL, 0 );
+ if ( !param->noheader )
+ rc = DumpHeader( ctx );
+ if ( rc == 0 )
+ {
+ if ( param->region_qty ){
+ rc = ForEachAlignedRegion( ctx
+ , ( param->primaries ? primary_IDS : 0 )
+ | ( param->secondaries ? secondary_IDS : 0 )
+ | ( param->cg_evidence ? evidence_interval_IDS : 0 )
+ | ( param->cg_ev_dnb ? evidence_alignment_IDS : 0 )
+ , DumpAlignedRowList_cb );
+#if USE_MATE_CACHE
+ if ( rc == 0 && param->unaligned ){
+ rc = FlushUnaligned( ctx,ctx->pri.curs.cache);
+ }
+#endif
+ }
+ if ( param->cg_sam )
+ rc = ForEachAlignedRegion( ctx, evidence_interval_IDS, DumpCGSAM );
+
+ if ( param->region_qty == 0 )
+ {
+ rc = DumpUnsorted( ctx );
+ if ( rc == 0 && param->unaligned )
+ rc = DumpUnaligned( ctx, ctx->pri.tbl.vtbl != NULL );
+ }
+ }
+ ReferenceList_Release( gRefList );
+ return rc;
+}
+
+
+static rc_t DumpTable( SAM_dump_ctx_t *ctx )
+{
+ rc_t rc = 0;
+
+ if ( !param->noheader )
+ rc = DumpHeader( ctx );
+ if ( rc == 0 )
+ rc = DumpUnaligned( ctx, false );
+ return rc;
+}
+
+
+static rc_t ProcessTable( VDBManager const *mgr, char const fullPath[],
+ char const accession[], char const readGroup[] )
+{
+ VTable const *tbl;
+ rc_t rc = VDBManagerOpenTableRead( mgr, &tbl, 0, fullPath );
+
+ if ( rc != 0 )
+ {
+ VSchema *schema;
+
+ rc = VDBManagerMakeSRASchema( mgr, &schema );
+ if ( rc == 0 )
+ {
+ rc = VDBManagerOpenTableRead( mgr, &tbl, schema, fullPath );
+ VSchemaRelease( schema );
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ SAM_dump_ctx_t ctx;
+ SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+
+ memset( &ctx, 0, sizeof( ctx ) );
+
+ ctx.fullPath = fullPath;
+ ctx.accession = accession;
+ ctx.readGroup = readGroup;
+
+ DATASOURCE_INIT( ctx.seq, accession );
+ ctx.seq.tbl.vtbl = tbl;
+ ctx.seq.type = edstt_Sequence;
+
+ ReportResetTable( fullPath, tbl );
+
+ ctx.seq.cols = seq_cols;
+ memcpy( ctx.seq.cols, gSeqCol, sizeof( gSeqCol ) );
+ rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+ if ( rc == 0 ) {
+ rc = DumpTable( &ctx );
+ Cursor_Close(&ctx.seq.curs);
+ }
+ VTableRelease( tbl );
+ }
+ return rc;
+}
+
+
+static void SetupColumns( DataSource *ds, enum eDSTableType type )
+{
+ memcpy( ds->cols, g_alg_col_tmpl, sizeof( g_alg_col_tmpl ) );
+
+ ds->type = type;
+ if ( param->use_seqid )
+ ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_SEQ_ID";
+ else
+ ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_NAME";
+
+ if ( param->fasta || param->fastq )
+ ds->cols[ alg_READ ].name = "RAW_READ";
+ else if ( param->hide_identical )
+ ds->cols[ alg_READ ].name = "MISMATCH_READ";
+ else
+ ds->cols[ alg_READ ].name = "READ";
+
+ if ( param->long_cigar )
+ {
+ ds->cols[ alg_CIGAR ].name = "CIGAR_LONG";
+ ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_LONG_LEN";
+ }
+ else
+ {
+ ds->cols[ alg_CIGAR ].name = "CIGAR_SHORT";
+ ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_SHORT_LEN";
+ }
+
+ if(param->qualQuant && param->qualQuantSingle){ /** we don't really need quality ***/
+ ds->cols[ alg_SAM_QUALITY ].name = "";
+ }
+
+ switch ( type )
+ {
+ case edstt_EvidenceInterval:
+
+ ds->cols[ alg_SEQ_SPOT_ID ].name = "";
+ ds->cols[ alg_SEQ_NAME ].name = "";
+ ds->cols[ alg_SAM_QUALITY ].name = "";
+ ds->cols[ alg_SPOT_GROUP ].name = "";
+ ds->cols[ alg_SEQ_SPOT_GROUP].name = "";
+ ds->cols[ alg_SEQ_READ_ID ].name = "";
+ ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+ ds->cols[ alg_MATE_REF_ID ].name = "";
+ ds->cols[ alg_MATE_REF_NAME ].name = "";
+ ds->cols[ alg_SAM_FLAGS ].name = "";
+ ds->cols[ alg_MATE_REF_POS ].name = "";
+ ds->cols[ alg_ALIGN_GROUP ].name = "";
+ ds->cols[ alg_TEMPLATE_LEN ].name = "";
+ if ( param->cg_sam || param->cg_ev_dnb )
+ ds->cols[ alg_EVIDENCE_ALIGNMENT_IDS ].name = "EVIDENCE_ALIGNMENT_IDS";
+ break;
+
+ case edstt_EvidenceAlignment:
+ ds->cols[ alg_REF_PLOIDY ].name = "REF_PLOIDY";
+ ds->cols[ alg_REF_ID ].name = "REF_ID";
+ ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+ ds->cols[ alg_MATE_REF_ID ].name = "";
+ ds->cols[ alg_MATE_REF_NAME ].name = "";
+ ds->cols[ alg_SAM_FLAGS ].name = "";
+ ds->cols[ alg_MATE_REF_POS ].name = "";
+ ds->cols[ alg_ALIGN_GROUP ].name = "";
+ ds->cols[ alg_TEMPLATE_LEN ].name = "";
+ break;
+ default:
+ break;
+ }
+}
+
+
+static rc_t ProcessDB( VDatabase const *db, char const fullPath[],
+ char const accession[], char const readGroup[] )
+{
+ char const *const refTableName = ( param->region_qty > 0
+ || param->cg_evidence
+ || param->cg_ev_dnb
+ || param->cg_sam
+ || param->reheader
+ || param->primaries
+ || param->secondaries
+ )
+ ? "REFERENCE"
+ : 0;
+ char const *const priTableName = param->primaries ? "PRIMARY_ALIGNMENT" : 0;
+ char const *const secTableName = param->secondaries ? "SECONDARY_ALIGNMENT" : 0;
+ char const *const seqTableName = ( param->unaligned || param->reheader ) ? "SEQUENCE" : 0;
+ char const *const eviTableName = ( param->cg_evidence || ( param->cg_ev_dnb & ( param->region_qty > 0 ) ) || param->cg_sam ) ? "EVIDENCE_INTERVAL" : 0;
+ char const *const evaTableName = ( param->cg_ev_dnb || param->cg_sam ) ? "EVIDENCE_ALIGNMENT" : 0;
+
+ SAM_dump_ctx_t ctx;
+ SCol align_cols[ ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) * 4 ];
+ SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+ rc_t rc = 0;
+
+ memset( &ctx, 0, sizeof( ctx ) );
+ memset( align_cols, 0, sizeof( align_cols ) );
+ memset( seq_cols, 0, sizeof( seq_cols ) );
+
+ ctx.db = db;
+ ctx.fullPath = fullPath;
+ ctx.accession = accession;
+ ctx.readGroup = readGroup;
+
+ DATASOURCE_INIT( ctx.seq, seqTableName );
+ DATASOURCE_INIT( ctx.ref, refTableName );
+ DATASOURCE_INIT( ctx.pri, priTableName );
+ DATASOURCE_INIT( ctx.sec, secTableName );
+ DATASOURCE_INIT( ctx.evi, eviTableName );
+ DATASOURCE_INIT( ctx.eva, evaTableName );
+
+ if ( ctx.seq.tbl.name )
+ {
+ rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, ctx.seq.tbl.name );
+ if ( rc == 0 )
+ {
+ ctx.seq.cols = seq_cols;
+ memcpy(seq_cols, gSeqCol, sizeof(gSeqCol));
+ rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+ }
+ }
+ ctx.pri.cols = &align_cols[ 0 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+ ctx.sec.cols = &align_cols[ 1 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+ ctx.evi.cols = &align_cols[ 2 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+ ctx.eva.cols = &align_cols[ 3 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+
+ SetupColumns( &ctx.pri, edstt_PrimaryAlignment );
+ SetupColumns( &ctx.sec, edstt_SecondaryAlignment );
+ SetupColumns( &ctx.evi, edstt_EvidenceInterval );
+ SetupColumns( &ctx.eva, edstt_EvidenceAlignment );
+
+ if ( ctx.pri.tbl.name )
+ VDatabaseOpenTableRead( db, &ctx.pri.tbl.vtbl, ctx.pri.tbl.name );
+ if ( ctx.sec.tbl.name )
+ VDatabaseOpenTableRead( db, &ctx.sec.tbl.vtbl, ctx.sec.tbl.name );
+ if ( ctx.evi.tbl.name )
+ VDatabaseOpenTableRead( db, &ctx.evi.tbl.vtbl, ctx.evi.tbl.name );
+ if ( ctx.eva.tbl.name )
+ VDatabaseOpenTableRead( db, &ctx.eva.tbl.vtbl, ctx.eva.tbl.name );
+
+ if ( ctx.pri.tbl.vtbl == NULL
+ && ctx.sec.tbl.vtbl == NULL
+ && ctx.evi.tbl.vtbl == NULL
+ && ctx.eva.tbl.vtbl == NULL )
+ {
+ memset (&ctx.pri, 0, sizeof( ctx.pri ) * 4 );
+ if ( ctx.seq.tbl.name == NULL )
+ {
+ ctx.seq.tbl.name = "SEQUENCE";
+ rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, ctx.seq.tbl.name );
+ }
+ if ( rc == 0 )
+ {
+ ctx.seq.cols = seq_cols;
+ memcpy(seq_cols, gSeqCol, sizeof(gSeqCol));
+ rc = Cursor_Open(&ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL);
+ if ( rc == 0 )
+ {
+ rc = DumpTable( &ctx );
+ Cursor_Close(&ctx.seq.curs);
+ }
+ VTableRelease(ctx.seq.tbl.vtbl);
+ }
+ VDatabaseRelease( db );
+ return rc;
+ }
+ ReportResetDatabase( fullPath, db );
+
+ if ( ctx.ref.tbl.name )
+ {
+ rc = VDatabaseOpenTableRead( db, &ctx.ref.tbl.vtbl, ctx.ref.tbl.name );
+ ctx.ref.type = edstt_Reference;
+ }
+ if ( rc == 0 )
+ rc = Cursor_Open( &ctx.pri.tbl, &ctx.pri.curs, ctx.pri.cols, ctx.seq.curs.cache );
+ if ( rc == 0 )
+ rc = Cursor_Open( &ctx.sec.tbl, &ctx.sec.curs, ctx.sec.cols, NULL );
+ if ( rc == 0 )
+ rc = Cursor_Open( &ctx.evi.tbl, &ctx.evi.curs, ctx.evi.cols, NULL );
+ if ( rc == 0 )
+ rc = Cursor_Open( &ctx.eva.tbl, &ctx.eva.curs, ctx.eva.cols, NULL );
+ if ( rc == 0 )
+ rc = DumpDB( &ctx );
+
+ Cursor_Close(&ctx.ref.curs);
+ Cursor_Close(&ctx.pri.curs);
+ Cursor_Close(&ctx.sec.curs);
+ Cursor_Close(&ctx.evi.curs);
+ Cursor_Close(&ctx.eva.curs);
+ Cursor_Close(&ctx.seq.curs);
+
+ VTableRelease( ctx.ref.tbl.vtbl );
+ VTableRelease( ctx.pri.tbl.vtbl );
+ VTableRelease( ctx.sec.tbl.vtbl );
+ VTableRelease( ctx.evi.tbl.vtbl );
+ VTableRelease( ctx.eva.tbl.vtbl );
+ VTableRelease( ctx.seq.tbl.vtbl );
+
+ return rc;
+}
+
+#if 0
+rc_t ResolvePath( char const *accession, char const ** path )
+{
+ rc_t rc = 0;
+ static char tblpath[ 4096 ];
+#if TOOLS_USE_SRAPATH != 0
+ static SRAPath* pmgr = NULL;
+
+ if ( accession == NULL && path == NULL )
+ {
+ SRAPathRelease( pmgr );
+ return 0;
+ }
+ if ( pmgr != NULL
+ || ( rc = SRAPathMake( &pmgr, NULL ) ) == 0
+ || ( GetRCState( rc ) == rcNotFound && GetRCTarget( rc ) == rcDylib ) )
+ {
+ *path = tblpath;
+ tblpath[ 0 ] = '\0';
+ rc = 0;
+ do {
+ if ( pmgr != NULL && !SRAPathTest( pmgr, accession ) )
+ {
+ /* try to resolve the path using mgr */
+ rc = SRAPathFind( pmgr, accession, tblpath, sizeof( tblpath ) );
+ if ( rc == 0 )
+ break;
+ }
+ if ( string_size( accession ) >= sizeof( tblpath ) )
+ {
+ rc = RC( rcExe, rcPath, rcResolving, rcBuffer, rcInsufficient );
+ }
+ else
+ {
+ string_copy( tblpath, ( sizeof tblpath ) - 1, accession, string_size( accession ) );
+ rc = 0;
+ }
+ } while( false );
+ }
+#else
+ if ( accession != NULL && path != NULL )
+ {
+ *path = tblpath;
+ string_copy( tblpath, ( sizeof tblpath ) - 1, accession, string_size( accession ) );
+ }
+#endif
+
+ return rc;
+}
+#endif
+
+
+static rc_t ProcessPath( VDBManager const *mgr, char const Path[] )
+{
+#if 0
+ unsigned pathlen = string_size( Path );
+ char *readGroup = NULL;
+ char *path = NULL;
+ unsigned i;
+ rc_t rc;
+
+ /* strip trailing path seperators */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = Path[ --i ];
+
+ if ( ch == '/' || ch == '\\' )
+ --pathlen;
+ else
+ break;
+ }
+
+ /* find read group alias */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = Path[ --i ];
+
+ if ( ch == '=' )
+ {
+ unsigned const pos = i + 1;
+ unsigned const len = pathlen - pos;
+
+ pathlen = i;
+
+ readGroup = malloc( len + 1 );
+ if ( readGroup == NULL )
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ memcpy( readGroup, &Path[ pos ], len );
+ readGroup[ len ] = '\0';
+ break;
+ }
+ }
+
+ path = malloc( pathlen + 1 );
+ if ( path == NULL )
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ memcpy( path, Path, pathlen );
+ path[ pathlen ] = '\0';
+
+ rc = ReportResetObject( path );
+ if ( rc == 0 )
+ {
+ char const *fullPath;
+
+ rc = ResolvePath( path, &fullPath );
+ if ( rc == 0 )
+ {
+ char const *accession = fullPath;
+ VDatabase const *db;
+
+ /* use last path element as accession */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = path[ --i ];
+
+ if ( ch == '/' || ch == '\\' )
+ {
+ accession = &fullPath[ i + 1 ];
+ break;
+ }
+ }
+ rc = VDBManagerOpenDBRead( mgr, &db, NULL, fullPath );
+ if ( rc == 0 )
+ {
+ rc = ProcessDB( db, fullPath, accession, readGroup );
+ VDatabaseRelease( db );
+ }
+ else
+ rc = ProcessTable( mgr, fullPath, accession, readGroup );
+ }
+ }
+ free( path );
+ free( readGroup );
+ return rc;
+
+#else
+
+ char * pc;
+ rc_t rc = 0;
+
+ pc = strchr (Path, ':');
+ if (pc == NULL)
+ {
+ unsigned pathlen;
+ char *readGroup;
+ char *path;
+ unsigned i;
+
+ old:
+ pathlen = string_size( Path );
+ readGroup = NULL;
+ path = NULL;
+
+ /* strip trailing path seperators */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = Path[ --i ];
+
+ if ( ch == '/' || ch == '\\' )
+ --pathlen;
+ else
+ break;
+ }
+
+ /* find read group alias */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = Path[ --i ];
+
+ if ( ch == '=' )
+ {
+ unsigned const pos = i + 1;
+ unsigned const len = pathlen - pos;
+
+ pathlen = i;
+
+ readGroup = malloc( len + 1 );
+ if ( readGroup == NULL )
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ memcpy( readGroup, &Path[ pos ], len );
+ readGroup[ len ] = '\0';
+ break;
+ }
+ }
+
+ path = malloc( pathlen + 1 );
+ if ( path == NULL )
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ memcpy( path, Path, pathlen );
+ path[ pathlen ] = '\0';
+
+ rc = ReportResetObject( path );
+ if ( rc == 0 )
+ {
+ char const *accession = path;
+ VDatabase const *db;
+
+ /* use last path element as accession */
+ for ( i = pathlen; i > 0; )
+ {
+ int const ch = path[ --i ];
+
+ if ( ch == '/' || ch == '\\' )
+ {
+ accession = &path[ i + 1 ];
+ break;
+ }
+ }
+ rc = VDBManagerOpenDBRead( mgr, &db, NULL, path );
+ if ( rc == 0 )
+ {
+ rc = ProcessDB( db, path, accession, readGroup );
+ if (UIError(rc, db, NULL)) {
+ UIDatabaseLOGError(rc, db, true);
+/* *error_reported = true; */
+ }
+ VDatabaseRelease( db );
+ }
+ else {
+ rc = ProcessTable( mgr, path, accession, readGroup );
+ if (UIError(rc, NULL, NULL)) {
+ UITableLOGError(rc, NULL, true);
+/* *error_reported = true; */
+ }
+ }
+ }
+ free( path );
+ free( readGroup );
+ return rc;
+ }
+ else
+ {
+ VPath * vpath;
+ char * basename;
+ size_t zz;
+ char buffer [8193];
+ char readgroup_ [257];
+ char * readgroup;
+
+ rc = VPathMake (&vpath, Path);
+ if (rc)
+ ; /* LOGERR */
+ else
+ {
+ VPUri_t uri_t;
+ switch (uri_t = VPathGetUri_t (vpath))
+ {
+ default:
+ case vpuri_invalid:
+ rc = RC (rcExe, rcParam, rcAccessing, rcPath, rcInvalid);
+ break;
+ case vpuri_not_supported:
+ rc = RC (rcExe, rcParam, rcAccessing, rcPath, rcUnsupported);
+ break;
+ case vpuri_none:
+ goto old;
+
+ case vpuri_ncbi_vfs:
+ case vpuri_file:
+ case vpuri_ncbi_acc:
+ case vpuri_http:
+ rc = VPathReadPath (vpath, buffer, sizeof buffer - 1, &zz);
+ if (rc)
+ ;
+ else
+ {
+ loop:
+ basename = strrchr (buffer, '/');
+ if (basename)
+ {
+ if (basename[1] == '\0')
+ {
+ basename[0] = '\0';
+ goto loop;
+ }
+ else
+ ++basename;
+ }
+ else
+ basename = buffer;
+
+ {
+ char * ext;
+
+ /* cut off [.lite].[c]sra[.nenc||.ncbi_enc] if any */
+ ext = strrchr( basename, '.' );
+ if ( ext != NULL )
+ {
+ if ( strcasecmp( ext, ".nenc" ) == 0 || strcasecmp( ext, ",ncbi_enc" ) == 0 )
+ {
+ *ext = '\0';
+ ext = strrchr( basename, '.' );
+ }
+ if ( ext != NULL )
+ {
+ if ( strcasecmp( ext, ".sra" ) == 0 || strcasecmp( ext, ".csra" ) == 0 )
+ {
+ *ext = '\0';
+ ext = strrchr( basename, '.' );
+ if ( ext != NULL && strcasecmp( ext, ".lite" ) == 0 )
+ *ext = '\0';
+ }
+ }
+ }
+ }
+
+ rc = VPathOption (vpath, vpopt_readgroup, readgroup_,
+ sizeof readgroup_ - 1, &zz);
+ if (rc)
+ {
+ if (GetRCState (rc) == rcNotFound)
+ {
+ rc = 0;
+ readgroup = NULL;
+ }
+ }
+ else
+ readgroup = readgroup_;
+
+
+ if (rc)
+ ;
+ else
+ {
+ VDatabase const *db;
+
+ rc = VDBManagerOpenDBRead( mgr, &db, NULL, Path );
+ if ( rc == 0 )
+ {
+ rc = ProcessDB( db, Path, basename, readgroup );
+ VDatabaseRelease( db );
+ }
+ else
+ rc = ProcessTable( mgr, Path, basename, readgroup );
+ }
+ }
+ break;
+ }
+ VPathRelease (vpath);
+ }
+ }
+ return rc;
+#endif
+}
+
+/*
+ver_t CC KAppVersion( void )
+{
+ return SAM_DUMP_VERS;
+}
+*/
+
+char const *unaligned_usage[] = {"Output unaligned reads", NULL};
+char const *unaligned_only_usage[] = {"Only output unaligned spots", NULL};
+char const *primaryonly_usage[] = {"Output only primary alignments", NULL};
+char const *cigartype_usage[] = {"Output long version of CIGAR", NULL};
+char const *cigarCG_usage[] = {"Output CG version of CIGAR", NULL};
+char const *cigarCGMerge_usage[] = {"Apply CG fixups to CIGAR/SEQ/QUAL and outputs CG-specific columns", NULL};
+char const *CG_evidence[] = {"Output CG evidence aligned to reference", NULL};
+char const *CG_ev_dnb[] = {"Output CG evidence DNB's aligned to evidence", NULL};
+char const *CG_SAM[] = {"Output CG evidence DNB's aligned to reference ", NULL};
+char const *CG_mappings[] = {"Output CG sequences aligned to reference ", NULL};
+char const *header_usage[] = {"Replace original BAM header with a reconstructed one", NULL};
+char const *noheader_usage[] = {"Do not output headers", NULL};
+char const *region_usage[] = {"Filter by position on genome.",
+ "Name can either be file specific name (ex: \"chr1\" or \"1\").",
+ "\"from\" and \"to\" are 1-based coordinates", NULL};
+char const *distance_usage[] = {"Filter by distance between matepairs.",
+ "Use \"unknown\" to find matepairs split between the references.",
+ "Use from-to to limit matepair distance on the same reference", NULL};
+char const *seq_id_usage[] = {"Print reference SEQ_ID in RNAME instead of NAME", NULL};
+char const *identicalbases_usage[] = {"Output '=' if base is identical to reference", NULL};
+char const *gzip_usage[] = {"Compress output using gzip", NULL};
+char const *bzip2_usage[] = {"Compress output using bzip2", NULL};
+char const *qname_usage[] = {"Add .SPOT_GROUP to QNAME", NULL};
+char const *fasta_usage[] = {"Produce Fasta formatted output", NULL};
+char const *fastq_usage[] = {"Produce FastQ formatted output", NULL};
+char const *prefix_usage[] = {"Prefix QNAME: prefix.QNAME", NULL};
+char const *reverse_usage[] = {"Reverse unaligned reads according to read type", NULL};
+char const *comment_usage[] = {"Add comment to header. Use multiple times for several lines. Use quotes", NULL};
+char const *XI_usage[] = {"Output cSRA alignment id in XI column", NULL};
+char const *qual_quant_usage[] = {"Quality scores quantization level",
+ "a string like '1:10,10:20,20:30,30:-'", NULL};
+char const *CG_names[] = { "Generate CG friendly read names", NULL};
+
+char const *usage_params[] =
+{
+ NULL, /* unaligned */
+ NULL, /* unaligned-only */
+ NULL, /* primaryonly */
+ NULL, /* cigartype */
+ NULL, /* cigarCG */
+ NULL, /* header */
+ NULL, /* no-header */
+ "text", /* comment */
+ "name[:from-to]", /* region */
+ "from-to|'unknown'", /* distance */
+ NULL, /* seq-id */
+ NULL, /* identical-bases */
+ NULL, /* gzip */
+ NULL, /* bzip2 */
+ NULL, /* qname */
+ NULL, /* fasta */
+ NULL, /* fastq */
+ "prefix", /* prefix */
+ NULL, /* reverse */
+ NULL, /* test-rows */
+ NULL, /* mate-row-gap-cacheable */
+ NULL, /* cigarCGMerge */
+ NULL, /* XI */
+ "quantization string", /* qual-quant */
+ NULL, /* cigarCGMerge */
+ NULL, /* CG-evidence */
+ NULL, /* CG-ev-dnb */
+ NULL, /* CG-mappings */
+ NULL, /* CG-SAM */
+ NULL /* CG-names */
+};
+
+enum eArgs
+{
+ earg_unaligned = 0, /* unaligned */
+ earg_unaligned_only, /* unaligned */
+ earg_prim_only, /* primaryonly */
+ earg_cigartype, /* cigartype */
+ earg_cigarCG, /* cigarCG */
+ earg_header, /* header */
+ earg_noheader, /* no-header */
+ earg_comment, /* comment */
+ earg_region, /* region */
+ earg_distance, /* distance */
+ earg_seq_id, /* seq-id */
+ earg_identicalbases, /* identical-bases */
+ earg_gzip, /* gzip */
+ earg_bzip2, /* bzip2 */
+ earg_qname, /* qname */
+ earg_fastq, /* fasta */
+ earg_fasta, /* fastq */
+ earg_prefix, /* prefix */
+ earg_reverse, /* reverse */
+ earg_test_rows, /* test-rows */
+ earg_mate_row_gap_cachable, /* mate-row-gap-cacheable */
+ earg_cigarCG_merge, /* cigarCGMerge */
+ earg_XI, /* XI */
+ earg_QualQuant, /* qual-quant */
+ earg_CG_evidence, /* CG-evidence */
+ earg_CG_ev_dnb, /* CG-ev-dnb */
+ earg_CG_mappings, /* CG-mappings */
+ earg_CG_SAM, /* CG-SAM */
+ earg_CG_names /* CG-names */
+};
+
+OptDef DumpArgs[] =
+{
+ { "unaligned", "u", NULL, unaligned_usage, 0, false, false }, /* unaligned */
+ { "unaligned-only", "U", NULL, unaligned_usage, 0, false, false }, /* unaligned-only */
+ { "primary", "1", NULL, primaryonly_usage, 0, false, false }, /* primaryonly */
+ { "cigar-long", "c", NULL, cigartype_usage, 0, false, false }, /* cigartype */
+ { "cigar-CG", NULL, NULL, cigarCG_usage, 0, false, false }, /* cigarCG */
+ { "header", "r", NULL, header_usage, 0, false, false }, /* header */
+ { "no-header", "n", NULL, noheader_usage, 0, false, false }, /* no-header */
+ { "header-comment", NULL, NULL, comment_usage, 0, true, false }, /* comment */
+ { "aligned-region", NULL, NULL, region_usage, 0, true, false }, /* region */
+ { "matepair-distance", NULL, NULL, distance_usage, 0, true, false }, /* distance */
+ { "seqid", "s", NULL, seq_id_usage, 0, false, false }, /* seq-id */
+ { "hide-identical", "=", NULL, identicalbases_usage, 0, false, false }, /* identical-bases */
+ { "gzip", NULL, NULL, gzip_usage, 0, false, false }, /* gzip */
+ { "bzip2", NULL, NULL, bzip2_usage, 0, false, false }, /* bzip2 */
+ { "spot-group", "g", NULL, qname_usage, 0, false, false }, /* qname */
+ { "fastq", NULL, NULL, fastq_usage, 0, false, false }, /* fasta */
+ { "fasta", NULL, NULL, fasta_usage, 0, false, false }, /* fastq */
+ { "prefix", "p", NULL, prefix_usage, 0, true, false }, /* prefix */
+ { "reverse", NULL, NULL, reverse_usage, 0, false, false }, /* reverse */
+ { "test-rows", NULL, NULL, NULL, 0, true, false }, /* test-rows */
+ { "mate-cache-row-gap", NULL, NULL, NULL, 0, true, false }, /* mate-row-gap-cacheable */
+ { "cigar-CG-merge", NULL, NULL, cigarCGMerge_usage, 0, false, false }, /* cigarCGMerge */
+ { "XI", NULL, NULL, XI_usage, 0, false, false }, /* XI */
+ { "qual-quant", "Q", NULL, qual_quant_usage, 0, true, false }, /* qual-quant */
+ { "CG-evidence", NULL, NULL, CG_evidence, 0, false, false }, /* CG-evidence */
+ { "CG-ev-dnb" , NULL, NULL, CG_ev_dnb , 0, false, false }, /* CG-ev-dnb */
+ { "CG-mappings", NULL, NULL, CG_mappings, 0, false, false }, /* CG-mappings */
+ { "CG-SAM", NULL, NULL, CG_SAM, 0, false, false }, /* CG-SAM */
+ { "CG-names", NULL, NULL, CG_names, 0, false, false }, /* CG-names */
+ { "legacy", NULL, NULL, NULL, 0, false, false }
+};
+
+
+/*
+const char UsageDefaultName[] = "sam-dump";
+
+
+rc_t CC UsageSummary( char const *progname )
+{
+ return KOutMsg( "Usage:\n"
+ "\t%s [options] path-to-run[ path-to-run ...] > output.sam\n\n", progname );
+}
+
+
+rc_t CC Usage( Args const *args)
+{
+ char const *progname = UsageDefaultName;
+ char const *fullpath = UsageDefaultName;
+ rc_t rc;
+ unsigned i;
+
+ rc = ArgsProgram( args, &fullpath, &progname );
+
+ UsageSummary( progname );
+
+ KOutMsg( "Options:\n" );
+ for( i = 0; i < sizeof( DumpArgs ) / sizeof( DumpArgs[ 0 ] ); i++ )
+ {
+ if ( DumpArgs[ i ].help != NULL )
+ {
+ HelpOptionLine( DumpArgs[ i ].aliases, DumpArgs[ i ].name,
+ usage_params[ i ], DumpArgs[ i ].help);
+ }
+ }
+ KOutMsg( "\n" );
+ HelpOptionsStandard();
+
+ HelpVersion( fullpath, KAppVersion() );
+
+ return rc;
+}
+*/
+
+#define ARGS_COUNT (sizeof(DumpArgs)/sizeof(DumpArgs[0]))
+
+
+static unsigned ParamCount( Args const *const args, rc_t *const prc )
+{
+ uint32_t y = 0;
+ rc_t rc = ArgsParamCount( args, &y );
+
+ if ( prc != NULL )
+ *prc = rc;
+ return y;
+}
+
+
+static unsigned ArgCount( Args const *const args, rc_t *const prc )
+{
+ uint32_t y = 0;
+ rc_t rc = ArgsArgvCount( args, &y );
+
+ if ( prc != NULL )
+ *prc = rc;
+ return y;
+}
+
+
+static rc_t CountArgs( Args const *const args, unsigned count[],
+ char const **const errmsg )
+{
+ rc_t rc;
+ unsigned const pcount = ParamCount( args, &rc );
+
+ memset( count, 0, ARGS_COUNT );
+ if ( rc != 0 || pcount == 0 )
+ {
+ *errmsg = "";
+ MiniUsage( args );
+ return ( ArgCount( args, NULL ) < 2 )
+ ? 0
+ : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+ }
+#define COUNT_ARG(E) do {\
+ char const *const optname = DumpArgs[ (E) ].name; \
+ if ( ( rc = ArgsOptionCount( args, optname, &count[ (E) ] ) ) != 0 ) { \
+ *errmsg = optname; \
+ return rc; \
+ } } while( 0 )
+
+
+ /* record source options */
+ COUNT_ARG( earg_unaligned );
+ COUNT_ARG( earg_unaligned_only );
+ COUNT_ARG( earg_prim_only );
+ COUNT_ARG( earg_CG_evidence );
+ COUNT_ARG( earg_CG_ev_dnb );
+ COUNT_ARG( earg_CG_mappings );
+ COUNT_ARG( earg_CG_SAM );
+
+ /* record filter options */
+ COUNT_ARG( earg_region );
+ COUNT_ARG( earg_distance );
+
+ /* output format options */
+ COUNT_ARG( earg_fastq );
+ COUNT_ARG( earg_fasta );
+
+ /* SAM header options */
+ COUNT_ARG( earg_header );
+ COUNT_ARG( earg_noheader );
+ COUNT_ARG( earg_comment );
+
+ /* SAM field options */
+ COUNT_ARG( earg_prefix );
+ COUNT_ARG( earg_qname );
+ COUNT_ARG( earg_seq_id );
+ COUNT_ARG( earg_CG_names );
+
+ COUNT_ARG( earg_cigartype );
+ COUNT_ARG( earg_cigarCG );
+ COUNT_ARG( earg_cigarCG_merge );
+
+ COUNT_ARG( earg_identicalbases );
+ COUNT_ARG( earg_reverse );
+ COUNT_ARG( earg_QualQuant );
+
+ /* output encoding options */
+ COUNT_ARG( earg_gzip );
+ COUNT_ARG( earg_bzip2 );
+
+ COUNT_ARG( earg_mate_row_gap_cachable );
+
+ /* debug options */
+ COUNT_ARG( earg_XI );
+ COUNT_ARG( earg_test_rows );
+#undef COUNT_ARG
+ return 0;
+}
+
+
+static unsigned GetOptValU( Args const *const args, char const *const argname,
+ unsigned const defval, rc_t *const prc )
+{
+ unsigned y = defval;
+ char const *valstr;
+ rc_t rc = ArgsOptionValue( args, argname, 0, &valstr );
+
+ if ( rc == 0 )
+ {
+ char *endp;
+
+ y = strtou32( valstr, &endp, 0 );
+ if ( *endp != '\0' )
+ {
+ rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+ y = 0;
+ }
+ if ( y == 0 )
+ y = defval;
+ }
+ if ( prc )
+ *prc = rc;
+ return y;
+}
+
+
+static rc_t GetComments( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+ parms->comments = calloc( n + 1, sizeof( parms->comments[ 0 ] ) );
+ if ( parms->comments != NULL )
+ {
+ unsigned i;
+
+ for ( i = 0; i < n; ++i )
+ {
+ rc_t const rc = ArgsOptionValue( args, DumpArgs[ earg_comment ].name, i, &parms->comments[ i ] );
+ if ( rc != 0 )
+ {
+ free( ( void * )parms->comments );
+ parms->comments = NULL;
+ return rc;
+ }
+ }
+ return 0;
+ }
+ else
+ return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+}
+
+
+static rc_t ParseFromTo( int *const pFrom, int *const pTo, char const str[] )
+{
+ /* $str =~ /((\d+)-(\d+))|(-(\d+))|(\d+)/ */
+ int n;
+ char fr_str[ 16 ];
+ char to_str[ 16 ];
+ uint32_t fr = 0;
+ uint32_t to = 0;
+ int i = sscanf( str, "%15[0-9]-%15[0-9]%n", fr_str, to_str, &n );
+
+ if ( i != 2 )
+ {
+ unsigned const offset = ( str[ 0 ] == '-' ) ? 1 : 0;
+
+ fr = 0;
+ i = sscanf( str + offset, "%15[0-9]%n", to_str, &n );
+ if ( i != 1 )
+ return RC( rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange );
+ to = strtou32( to_str, 0, 0 );
+ }
+ else
+ {
+ fr = strtou32( fr_str, 0, 0 );
+ to = strtou32( to_str, 0, 0 );
+
+ if ( to < fr )
+ {
+ uint32_t const tmp = to;
+ to = fr;
+ fr = tmp;
+ }
+ }
+ /* was the entire string consumed */
+ if ( str[ n ] != 0 )
+ return RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+ *pFrom = ( int )fr;
+ *pTo = ( int )to;
+ return 0;
+}
+
+
+static rc_t GetDistance( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+ rc_t rc;
+ TMatepairDistance *const mpd = calloc( n, sizeof( mpd[ 0 ] ) );
+
+ if ( mpd == NULL )
+ rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ else
+ {
+ unsigned i;
+ unsigned j;
+
+ for ( j = i = 0; i < n; ++i )
+ {
+ char const *valstr;
+ int from = 0;
+ int to = 0;
+
+ rc = ArgsOptionValue( args, DumpArgs[earg_distance].name, i, &valstr );
+ if ( rc != 0 )
+ break;
+ if ( strcasecmp( valstr, "unknown" ) == 0 )
+ {
+ parms->mp_dist_unknown = true;
+ continue;
+ }
+ rc = ParseFromTo( &from, &to, valstr );
+ if ( rc != 0 )
+ break;
+ if ( ( from != 0 ) || ( to != 0 ) )
+ {
+ mpd[ j ].from = from;
+ mpd[ j ].to = to;
+ ++j;
+ }
+ }
+ if ( rc == 0 )
+ {
+ parms->mp_dist = mpd;
+ parms->mp_dist_qty = j;
+
+ SAM_DUMP_DBG( 2, ( "filter by mate pair distance\n" ) );
+ if ( parms->mp_dist_unknown )
+ SAM_DUMP_DBG( 2, ( " distance: unknown\n" ) );
+ for ( i = 0; i < j; ++i )
+ {
+ SAM_DUMP_DBG( 2, ( " distance [%lu-%lu]\n",
+ parms->mp_dist[ i ].from, parms->mp_dist[ i ].to ) );
+ }
+ }
+ else
+ free( mpd );
+ }
+ return rc;
+}
+
+
+static rc_t GetRegion( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+ rc_t rc;
+ TAlignedRegion *const reg = calloc( n, sizeof( reg[ 0 ] ) );
+
+ if ( reg == NULL )
+ rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+ else
+ {
+ unsigned i;
+ unsigned j;
+
+ for ( rc = 0, j = i = 0; i < n; ++i )
+ {
+ char const *valstr;
+ char const *sep;
+ unsigned namelen;
+ unsigned f;
+ unsigned e;
+ TAlignedRegion r;
+
+ memset(&r,0,sizeof(r));
+
+ rc = ArgsOptionValue( args, DumpArgs[ earg_region ].name, i, &valstr );
+ if ( rc != 0 ) break;
+
+ sep = strchr( valstr, ':' );
+ if ( sep != NULL )
+ namelen = sep - valstr;
+ else
+ namelen = string_size( valstr );
+
+ if ( namelen >= sizeof( r.name ) )
+ return RC( rcExe, rcArgv, rcProcessing, rcParam, rcTooLong );
+
+ memcpy( r.name, valstr, namelen );
+ r.name[ namelen ] = '\0';
+
+ r.rq = UINT_MAX;
+ if ( sep != NULL )
+ {
+ int from = -1;
+ int to = -1;
+
+ rc = ParseFromTo( &from, &to, sep + 1 );
+ if ( rc != 0 )
+ break;
+ if ( from > 0 ) /* convert to 0-based */
+ --from;
+ else if ( to > 0 )
+ from = 0;
+ if ( to > 0 )
+ --to;
+ else if ( from >= 0 && to < 0 )
+ to = from;
+ if ( from >= 0 || to >= 0 )
+ {
+ if ( from > to )
+ {
+ int tmp = to;
+ to = from;
+ from = tmp;
+ }
+ r.r[ 0 ].from = from;
+ r.r[ 0 ].to = to;
+ r.rq = 1;
+ }
+ }
+
+ for ( f = 0, e = j; f < e; )
+ {
+ unsigned const m = ( ( f + e ) / 2 );
+ int const diff = strcmp( r.name, reg[ m ].name );
+
+ if ( diff < 0 )
+ e = m;
+ else
+ f = m + 1;
+ }
+ if ( 0 < e && e < j && strcmp( r.name, reg[ e-1 ].name ) == 0 )
+ {
+ TAlignedRegion *const fnd = ®[ e - 1 ];
+
+ if ( fnd->rq != UINT_MAX )
+ {
+ for ( f = 0, e = fnd->rq; f < e; )
+ {
+ unsigned const m = ( ( f + e ) / 2 );
+
+ if ( r.r[ 0 ].from < fnd->r[ m ].from )
+ e = m;
+ else
+ f = m + 1;
+ }
+ if ( fnd->rq >= ( sizeof( r.r ) / sizeof( r.r[0] ) ) )
+ {
+ rc = RC( rcExe, rcArgv, rcProcessing, rcBuffer, rcInsufficient );
+ break;
+ }
+ memmove( &fnd->r[ e +1 ], &fnd->r[ e ], ( fnd->rq - e ) * sizeof( fnd->r[ 0 ] ) );
+ fnd->r[ e ] = r.r[ 0 ];
+ ++fnd->rq;
+ }
+ }
+ else
+ {
+ memmove( ®[ e + 1 ], ®[ e ], ( j - e ) * sizeof( reg[ 0 ] ) );
+ reg[ e ] = r;
+ ++j;
+ }
+ }
+ if ( rc == 0 )
+ {
+ parms->region = reg;
+ parms->region_qty = j;
+
+ for ( i = 0; i < parms->region_qty; ++i )
+ {
+ TAlignedRegion *const r = &parms->region[ i ];
+
+ SAM_DUMP_DBG( 2, ( "filter by %s\n", r->name ) );
+ if ( r->rq == UINT_MAX )
+ {
+ r->rq = 1;
+ r->r[ 0 ].from = 0;
+ r->r[ 0 ].to = UINT_MAX;
+ }
+ for ( j = 0; j < r->rq; ++j )
+ {
+ unsigned const to = r->r[ j ].to;
+ unsigned const from = r->r[ j ].from;
+
+ SAM_DUMP_DBG( 2, ( " range: [%u:%u]\n", r->r[ j ].from, to ) );
+ if ( r->max_to < to ) r->max_to = to;
+ if ( r->min_from < from ) r->min_from = from;
+ }
+ }
+ }
+ else
+ free( reg );
+ }
+ return rc;
+}
+
+
+static rc_t GetQualQuant( Args const *const args, struct params_s *const parms )
+{
+ char const *valstr;
+ int i;
+ rc_t rc = ArgsOptionValue( args, DumpArgs[ earg_QualQuant ].name, 0, &valstr );
+
+ if ( rc == 0 && strcmp( valstr, "0" ) != 0 )
+ parms->quantizeQual = QualityQuantizerInitMatrix( parms->qualQuant, valstr );
+ for(i=1; parms->qualQuant[i]==parms->qualQuant[0] && i<256;i++){}
+ if(i<256) parms->qualQuantSingle=0;
+ else parms->qualQuantSingle = parms->qualQuant[0];
+ return rc;
+}
+
+
+static rc_t GetArgs( Args const *const args, unsigned const count[],
+ char const **const errmsg )
+{
+ static struct params_s parms;
+ bool const multipass = ParamCount( args, 0 ) > 1;
+ rc_t rc;
+
+ memset( &parms, 0, sizeof( parms ) );
+
+ if ( count[ earg_comment ] )
+ {
+ rc = GetComments( args, &parms, count[ earg_comment ] );
+ if ( rc != 0 )
+ {
+ *errmsg = DumpArgs[ earg_comment ].name;
+ return rc;
+ }
+ }
+
+ if ( count[ earg_region ] && count[ earg_unaligned_only ] == 0 )
+ {
+ rc = GetRegion( args, &parms, count[ earg_region ] );
+ if ( rc != 0 )
+ {
+ *errmsg = DumpArgs[ earg_region ].name;
+ return rc;
+ }
+ }
+
+ if ( count[ earg_distance ] && count[ earg_unaligned_only ] == 0 )
+ {
+ rc = GetDistance( args, &parms, count[ earg_distance ] );
+ if ( rc != 0 )
+ {
+ *errmsg = DumpArgs[ earg_distance ].name;
+ return rc;
+ }
+ }
+
+ if ( count[ earg_QualQuant ] )
+ {
+ rc = GetQualQuant( args, &parms );
+ if ( rc != 0 )
+ {
+ *errmsg = DumpArgs[ earg_QualQuant ].name;
+ return rc;
+ }
+ }
+
+ parms.cg_sam = ( count[ earg_CG_SAM ] != 0 );
+ parms.cg_evidence = ( count[ earg_CG_evidence ] != 0 );
+ parms.cg_ev_dnb = ( count[ earg_CG_ev_dnb ] != 0 );
+
+ if ( count[ earg_CG_mappings ] == 0 &&
+ ( parms.cg_sam || parms.cg_evidence || parms.cg_ev_dnb ) )
+ {
+ parms.primaries = false;
+ parms.secondaries = false;
+ parms.unaligned = false;
+ }
+ else
+ {
+ parms.primaries = true;
+ parms.secondaries = ( count[ earg_prim_only ] == 0 );
+ parms.unaligned = ( ( count[ earg_unaligned ] != 0 ) /*&& ( parms.region_qty == 0 )*/ );
+ }
+
+ parms.long_cigar = ( count[ earg_cigartype ] != 0 );
+ parms.use_seqid = ( ( count[ earg_seq_id ] != 0 ) || multipass );
+ parms.hide_identical = ( count[ earg_identicalbases ] != 0 );
+ parms.fasta = ( count[ earg_fasta ] != 0 );
+ parms.fastq = ( count[ earg_fastq ] != 0 );
+ parms.reverse_unaligned = ( count[ earg_reverse ] != 0 );
+ parms.cg_friendly_names = count[ earg_CG_names ] != 0;
+ parms.spot_group_in_name = ( count[ earg_qname ] != 0 || multipass );
+ parms.noheader = ( ( count[ earg_noheader ] != 0 ) || parms.fasta || parms.fastq || multipass );
+ parms.reheader = ( ( count[ earg_header ] != 0 ) && !parms.noheader );
+ parms.xi = ( count[ earg_XI ] != 0 );
+ if ( ( count[ earg_cigarCG ] == 0 ) && ( count[ earg_cigarCG_merge ] == 0 ) )
+ {
+ parms.cg_style = 0;
+ }
+ else if ( count[ earg_cigarCG ] == 0 )
+ {
+ parms.cg_style = 1;
+ parms.long_cigar = false;
+ }
+ else if ( count[ earg_cigarCG_merge ] == 0 )
+ {
+ parms.cg_style = 2;
+ }
+ else
+ {
+ rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInconsistent );
+ *errmsg = "cigar-CG and CG are mutually exclusive";
+ parms.cg_style = 0;
+ }
+
+ if (count[ earg_unaligned_only ] > 0) {
+ parms.unaligned_spots = true;
+
+ parms.primaries = false;
+ parms.secondaries = false;
+ parms.unaligned = true;
+ parms.cg_ev_dnb = false;
+ parms.cg_evidence = false;
+ parms.cg_sam = false;
+ parms.cg_style = 0;
+ }
+
+ parms.test_rows = GetOptValU( args, DumpArgs[ earg_test_rows ].name, 0, NULL );
+ parms.mate_row_gap_cachable = GetOptValU( args, DumpArgs[ earg_mate_row_gap_cachable ].name, 1000000, NULL );
+
+ param = &parms;
+ return 0;
+}
+
+
+static rc_t GetParams( Args const *const args, char const **const errmsg )
+{
+ unsigned count[ ARGS_COUNT ];
+ rc_t rc = CountArgs( args, count, errmsg );
+
+ if ( rc == 0 )
+ rc = GetArgs( args, count, errmsg );
+ return rc;
+}
+
+
+rc_t CC SAM_Dump_Main( int argc, char* argv[] )
+{
+ rc_t rc = 0;
+ Args* args;
+ char const *errmsg = "stop";
+ bool error_reported = false;
+
+ memset( &g_out_writer, 0, sizeof( g_out_writer ) );
+ KOutHandlerSetStdOut();
+ KStsHandlerSetStdErr();
+ KLogHandlerSetStdErr();
+ (void)KDbgHandlerSetStdErr();
+
+ ReportBuildDate( __DATE__ );
+
+ rc = ArgsMakeAndHandle( &args, argc, argv, 1, DumpArgs, ARGS_COUNT );
+ if ( rc == 0 )
+ {
+ uint32_t pcount;
+
+ rc = ArgsParamCount( args, &pcount );
+ if ( rc != 0 || pcount < 1 )
+ {
+ errmsg = "";
+ rc = argc < 2 ? 0 : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+ MiniUsage( args );
+ }
+ else if ( ( rc = GetParams( args, &errmsg ) ) != 0 )
+ {
+ }
+ else
+ {
+ VDBManager const *mgr;
+
+ rc = VDBManagerMakeRead( &mgr, NULL );
+ if ( rc == 0 )
+ {
+ rc = BufferedWriterMake( param->output_gzip, param->output_bz2 );
+ if ( rc == 0 )
+ {
+ unsigned i;
+
+ for ( i = 0; i < pcount; ++i )
+ {
+ char const *arg;
+
+ rc = ArgsParamValue( args, i, &arg );
+ if ( rc != 0 ) break;
+ rc = ProcessPath( mgr, arg );
+#if _ARCH_BITS < 64
+ /* look for "param excessive while writing vector within container module" */
+ if (GetRCState(rc) == rcExcessive &&
+ GetRCObject(rc) == rcParam &&
+ GetRCContext(rc) == rcWriting &&
+ GetRCTarget(rc) == rcVector &&
+ GetRCModule(rc) == rcCont)
+ {
+ ( void )PLOGMSG( klogErr, (klogErr, "This run '$(run)' contains too many reads to be processed with a $(bits)-bit executable; please try again with a 64-bit executable.", "run=%s,bits=%u", arg, _ARCH_BITS));
+ }
+#endif
+ if ( rc != 0 ) break;
+ }
+ BufferedWriterRelease( rc == 0 );
+ }
+ VDBManagerRelease( mgr );
+ }
+ }
+ ArgsWhack( args );
+ }
+
+ if ( rc != 0 && !error_reported )
+ {
+ if ( errmsg[ 0 ] )
+ {
+ ( void )LOGERR( klogErr, rc, errmsg );
+ } else if ( KLogLastErrorCode() != rc )
+ {
+ ( void )LOGERR( klogErr, rc, "stop" );
+ }
+ }
+
+ {
+ /* Report execution environment if necessary */
+ rc_t rc2 = ReportFinalize( rc );
+ if ( rc == 0 )
+ rc = rc2;
+ }
+ return rc;
+}
+
+
+rc_t CC Legacy_KMain( int argc, char* argv[] )
+{
+ char filename[ 4096 ];
+ /*
+ Try to find a option-file - parameter in the original parameters
+ This is a hack to teach sam-dump to read it's parameters from a file/pipe instead
+ of the commandline
+ It is neccessary because the code above does not use libkapp to parse parameters!
+ */
+ rc_t rc = Args_find_option_in_argv( argc, argv, "--option-file", filename, sizeof filename );
+ if ( rc == 0 )
+ {
+ int new_argc;
+ char ** new_argv;
+ /* we found it! Now comes the special treatment: we fake a new argc/argv-pair! */
+ rc = Args_tokenize_file_and_progname_into_argv( filename, "sam-dump", &new_argc, &new_argv );
+ if ( rc == 0 )
+ {
+ /* pass the faked input-parameters from */
+ rc = SAM_Dump_Main( new_argc, new_argv );
+
+ Args_free_token_argv( new_argc, new_argv );
+ }
+ }
+ else
+ {
+ /* we did not found the special option, just use the commandline-parameters unchanged */
+ rc = SAM_Dump_Main( argc, argv );
+ }
+ return rc;
+}
diff --git a/tools/sra-pileup/sam-dump.vers b/tools/sra-pileup/sam-dump.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/sra-pileup/sam-dump.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/sra-pileup/sam-dump3.c b/tools/sra-pileup/sam-dump3.c
new file mode 100644
index 0000000..01f217a
--- /dev/null
+++ b/tools/sra-pileup/sam-dump3.c
@@ -0,0 +1,532 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "sam-dump.vers.h"
+
+#include <kapp/main.h>
+#include <vdb/report.h> /* ReportSetVDBManager */
+#include <klib/report.h>
+#include <sysalloc.h>
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+#include "sam-hdr.h"
+#include "matecache.h"
+#include "cg_tools.h"
+#include "out_redir.h"
+#include "sam-aligned.h"
+#include "sam-unaligned.h"
+
+
+char const *sd_unaligned_usage[] = { "Output unaligned reads along with aligned reads",
+ NULL };
+
+char const *sd_primaryonly_usage[] = { "Output only primary alignments",
+ NULL };
+
+char const *sd_cigartype_usage[] = { "Output long version of CIGAR",
+ NULL };
+
+char const *sd_cigarCG_usage[] = { "Output CG version of CIGAR",
+ NULL };
+
+char const *sd_cigarCGMerge_usage[] = { "Apply CG fixups to CIGAR/SEQ/QUAL and outputs CG-specific columns",
+ NULL };
+
+char const *sd_CG_evidence[] = { "Output CG evidence aligned to reference",
+ NULL };
+
+char const *sd_CG_ev_dnb[] = { "Output CG evidence DNB's aligned to evidence",
+ NULL };
+
+char const *sd_CG_SAM[] = { "Output CG evidence DNB's aligned to reference ",
+ NULL };
+
+char const *sd_CG_mappings[] = { "Output CG sequences aligned to reference ",
+ NULL };
+
+char const *sd_header_usage[] = { "Always reconstruct header",
+ NULL };
+
+char const *sd_noheader_usage[] = { "Do not output headers",
+ NULL };
+
+char const *sd_region_usage[] = { "Filter by position on genome.",
+ "Name can either be file specific name (ex: \"chr1\" or \"1\").",
+ "\"from\" and \"to\" (inclusive) are 1-based coordinates",
+ NULL };
+
+char const *sd_distance_usage[] = { "Filter by distance between matepairs.",
+ "Use \"unknown\" to find matepairs split between the references.",
+ "Use from-to (inclusive) to limit matepair distance on the same reference",
+ NULL };
+
+char const *sd_seq_id_usage[] = { "Print reference SEQ_ID in RNAME instead of NAME",
+ NULL };
+
+char const *sd_identicalbases_usage[] = { "Output '=' if base is identical to reference",
+ NULL };
+
+char const *sd_gzip_usage[] = { "Compress output using gzip",
+ NULL };
+
+char const *sd_bzip2_usage[] = { "Compress output using bzip2",
+ NULL };
+
+char const *sd_qname_usage[] = { "Add .SPOT_GROUP to QNAME",
+ NULL };
+
+char const *sd_fasta_usage[] = { "Produce Fasta formatted output",
+ NULL };
+
+char const *sd_fastq_usage[] = { "Produce FastQ formatted output",
+ NULL };
+
+char const *sd_prefix_usage[] = { "Prefix QNAME: prefix.QNAME",
+ NULL };
+
+char const *sd_reverse_usage[] = { "Reverse unaligned reads according to read type",
+ NULL };
+
+char const *sd_comment_usage[] = { "Add comment to header. Use multiple times for several lines. Use quotes",
+ NULL };
+
+char const *sd_XI_usage[] = { "Output cSRA alignment id in XI column",
+ NULL };
+
+char const *sd_qual_quant_usage[] = { "Quality scores quantization level",
+ "a string like '1:10,10:20,20:30,30:-'",
+ NULL };
+
+char const *sd_report_usage[] = { "report options instead of executing",
+ NULL };
+
+char const *sd_outputfile_usage[] = { "print output into this file (instead of STDOUT)",
+ NULL };
+
+char const *sd_outbufsize_usage[] = { "size of output-buffer(dflt:32k, 0...off)",
+ NULL };
+
+char const *sd_cachereport_usage[] = { "print report about mate-pair-cache",
+ NULL };
+
+char const *sd_unaligned_only_usage[] = { "output reads for spots with no aligned reads",
+ NULL };
+
+char const *sd_cg_names_usage[] = { "prints cg-style spotgroup.spotid fromed names",
+ NULL };
+
+char const *sd_cur_cache_usage[] = { "open cached cursor with this size",
+ NULL };
+
+char const *sd_min_mapq_usage[] = { "min. mapq an alignment has to have, to be printed",
+ NULL };
+
+char const *sd_no_mate_cache_usage[] = { "do not use a mate-cache, slower but less memory usage",
+ NULL };
+
+OptDef SamDumpArgs[] =
+{
+ { OPT_UNALIGNED, "u", NULL, sd_unaligned_usage, 0, false, false }, /* print unaligned reads */
+ { OPT_PRIM_ONLY, "1", NULL, sd_primaryonly_usage, 0, false, false }, /* print only primary alignments */
+ { OPT_CIGAR_LONG, "c", NULL, sd_cigartype_usage, 0, false, false }, /* use long cigar-string instead of short */
+ { OPT_CIGAR_CG, NULL, NULL, sd_cigarCG_usage, 0, false, false }, /* transform cigar into cg-style ( has B/N ) */
+ { OPT_RECAL_HDR, "r", NULL, sd_header_usage, 0, false, false }, /* recalculate header */
+ { OPT_NO_HDR, "n", NULL, sd_noheader_usage, 0, false, false }, /* do not print header */
+ { OPT_HDR_COMMENT, NULL, NULL, sd_comment_usage, 0, true, false }, /* insert this comment into header */
+ { OPT_REGION, NULL, NULL, sd_region_usage, 0, true, false }, /* filter by region */
+ { OPT_MATE_DIST, NULL, NULL, sd_distance_usage, 0, true, false }, /* filter by a list of mate-pair-distances */
+ { OPT_USE_SEQID, "s", NULL, sd_seq_id_usage, 0, false, false }, /* print seq-id instead of seq-name*/
+ { OPT_HIDE_IDENT, "=", NULL, sd_identicalbases_usage, 0, false, false }, /* replace bases that match the reference with '=' */
+ { OPT_GZIP, NULL, NULL, sd_gzip_usage, 0, false, false }, /* compress the output with gzip */
+ { OPT_BZIP2, NULL, NULL, sd_bzip2_usage, 0, false, false }, /* compress the output with bzip2 */
+ { OPT_SPOTGRP, "g", NULL, sd_qname_usage, 0, false, false }, /* add spotgroup to qname */
+ { OPT_FASTQ, NULL, NULL, sd_fastq_usage, 0, false, false }, /* output-format = fastq ( instead of SAM ) */
+ { OPT_FASTA, NULL, NULL, sd_fasta_usage, 0, false, false }, /* output-format = fasta ( instead of SAM ) */
+ { OPT_PREFIX, "p", NULL, sd_prefix_usage, 0, true, false }, /* prefix QNAME with this string */
+ { OPT_REVERSE, NULL, NULL, sd_reverse_usage, 0, false, false }, /* reverse unaligned reads if reverse-flag set*/
+ { OPT_TEST_ROWS, NULL, NULL, NULL, 0, true, false }, /* test-rows, if >0 limit output to this amount of rows */
+ { OPT_MATE_GAP, NULL, NULL, NULL, 0, true, false }, /* int value, mate's farther apart than this are not cached */
+ { OPT_CIGAR_CG_M, NULL, NULL, sd_cigarCGMerge_usage, 0, false, false }, /* transform cg-data(length of read/patterns in cigar) into valid SAM (cigar/READ/QUALITY)*/
+ { OPT_XI_DEBUG, NULL, NULL, sd_XI_usage, 0, false, false }, /* output alignment id for debugging... XI:I:NNNNNNN */
+ { OPT_Q_QUANT, "Q", NULL, sd_qual_quant_usage, 0, true, false }, /* quality-quantization string */
+ { OPT_CG_EVIDENCE, NULL, NULL, sd_CG_evidence, 0, false, false }, /* CG-evidence */
+ { OPT_CG_EV_DNB, NULL, NULL, sd_CG_ev_dnb, 0, false, false }, /* CG-ev-dnb */
+ { OPT_CG_MAPP, NULL, NULL, sd_CG_mappings, 0, false, false }, /* CG-mappings */
+ { OPT_CG_SAM, NULL, NULL, sd_CG_SAM, 0, false, false }, /* cga-tools emulation mode */
+ { OPT_REPORT, NULL, NULL, sd_report_usage, 0, false, false }, /* report options instead of executing */
+ { OPT_OUTPUTFILE, NULL, NULL, sd_outputfile_usage, 0, true, false }, /* write into output-file */
+ { OPT_OUTBUFSIZE, NULL, NULL, sd_outbufsize_usage, 0, true, false }, /* size of output-buffer */
+ { OPT_CACHEREPORT, NULL, NULL, sd_cachereport_usage, 0, false, false }, /* report usage of mate-pair-cache */
+ { OPT_UNALIGNED_ONLY,NULL, NULL, sd_unaligned_only_usage, 0, false, false }, /* print only unaligned spots */
+ { OPT_CG_NAMES, NULL, NULL, sd_cg_names_usage, 0, false, false }, /* print cg-style spotnames */
+ { OPT_CURSOR_CACHE, NULL, NULL, sd_cur_cache_usage, 0, true, false }, /* size of cursor cache */
+ { OPT_MIN_MAPQ, NULL, NULL, sd_min_mapq_usage, 0, true, false }, /* minimal mapping quality */
+ { OPT_NO_MATE_CACHE,NULL, NULL, sd_no_mate_cache_usage, 0, false, false }, /* do not use mate-cache */
+ { OPT_DUMP_MODE, NULL, NULL, NULL, 0, true, false }, /* how to produce aligned reads if no regions given */
+ { OPT_CIGAR_TEST, NULL, NULL, NULL, 0, true, false }, /* test cg-treatment of cigar string */
+ { OPT_LEGACY, NULL, NULL, NULL, 0, false, false } /* force legacy code-path */
+};
+
+char const *sd_usage_params[] =
+{
+ NULL, /* unaligned */
+ NULL, /* primaryonly */
+ NULL, /* cigartype */
+ NULL, /* cigarCG */
+ NULL, /* recalc header */
+ NULL, /* no-header */
+ "text", /* hdr-comment */
+ "name[:from-to]", /* region */
+ "from-to|'unknown'", /* mate distance filter*/
+ NULL, /* seq-id */
+ NULL, /* identical-bases */
+ NULL, /* gzip */
+ NULL, /* bzip2 */
+ NULL, /* qname */
+ NULL, /* fasta */
+ NULL, /* fastq */
+ "prefix", /* prefix */
+ NULL, /* reverse */
+ NULL, /* test-rows */
+ NULL, /* mate-row-gap-cacheable */
+ NULL, /* cigarCGMerge */
+ NULL, /* XI */
+ "quantization string", /* qual-quant */
+ NULL, /* CG-evidence */
+ NULL, /* CG-ev-dnb */
+ NULL, /* CG-mappings */
+ NULL, /* CG-SAM */
+ NULL, /* report */
+ NULL, /* outputfile */
+ NULL, /* outputfile buffsize */
+ NULL, /* cachereport */
+ NULL, /* unaligned-only */
+ NULL, /* CG-names */
+ NULL, /* cursor cache */
+ NULL, /* min_mapq */
+ NULL, /* no mate-cache */
+ NULL, /* dump_mode */
+ NULL, /* cigar test */
+ NULL /* force legacy code path */
+};
+
+ver_t CC KAppVersion( void )
+{
+ return SAM_DUMP_VERS;
+}
+
+const char UsageDefaultName[] = "sam-dump";
+
+
+rc_t CC UsageSummary( char const *progname )
+{
+ return KOutMsg( "Usage:\n"
+ "\t%s [options] path-to-run[ path-to-run ...]\n\n", progname );
+}
+
+
+rc_t CC Usage( Args const *args )
+{
+ char const *progname = UsageDefaultName;
+ char const *fullpath = UsageDefaultName;
+ rc_t rc;
+ unsigned i, n;
+
+ rc = ArgsProgram( args, &fullpath, &progname );
+
+ UsageSummary( progname );
+
+ KOutMsg( "Options:\n" );
+
+ n = sizeof( SamDumpArgs ) / sizeof( SamDumpArgs[ 0 ] );
+ n--; /* do not print the last option in the SamDumpArgs as help */
+ for( i = 0; i < n; i++ )
+ {
+ if ( SamDumpArgs[ i ].help != NULL )
+ {
+ HelpOptionLine( SamDumpArgs[ i ].aliases, SamDumpArgs[ i ].name,
+ sd_usage_params[ i ], SamDumpArgs[ i ].help );
+ }
+ }
+ KOutMsg( "\n" );
+ HelpOptionsStandard();
+
+ HelpVersion( fullpath, KAppVersion() );
+
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t CC write_to_FILE( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+ * num_writ = fwrite ( buffer, 1, bytes, f );
+ if ( * num_writ != bytes )
+ return RC( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+ return 0;
+}
+
+
+/* =========================================================================================== */
+
+
+static uint32_t tabsel_2_ReferenceList_Options( const samdump_opts * opts )
+{
+ uint32_t res = 0;
+ if ( opts->dump_primary_alignments )
+ res |= ereferencelist_usePrimaryIds;
+ if ( opts->dump_secondary_alignments )
+ res |= ereferencelist_useSecondaryIds;
+ if ( opts->dump_cg_evidence | opts->dump_cg_ev_dnb )
+ res |= ereferencelist_useEvidenceIds;
+ return res;
+}
+
+
+static rc_t print_samdump( const samdump_opts * const opts )
+{
+ KDirectory *dir;
+
+ rc_t rc = KDirectoryNativeDir( &dir );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot create native directory" );
+ }
+ else
+ {
+ const VDBManager *mgr;
+ rc = VDBManagerMakeRead( &mgr, dir );
+ if ( rc != 0 )
+ {
+ (void)LOGERR( klogErr, rc, "cannot create vdb-manager" );
+ }
+ else
+ {
+ input_files * ifs; /* input_files.h */
+ uint32_t reflist_opt = tabsel_2_ReferenceList_Options( opts );
+ ReportSetVDBManager(mgr);
+ rc = discover_input_files( &ifs, mgr, opts->input_files, reflist_opt ); /* inputfiles.c */
+ if ( rc == 0 )
+ {
+ if ( ifs->database_count == 0 && ifs->table_count == 0 )
+ {
+ rc = RC( rcExe, rcFile, rcReading, rcItem, rcNotFound );
+ (void)LOGERR( klogErr, rc, "input object(s) not found" );
+ }
+ else
+ {
+ matecache * mc = NULL;
+
+ if ( opts->use_mate_cache )
+ rc = make_matecache( &mc, ifs->database_count );
+
+ if ( rc == 0 )
+ {
+ uint64_t rows_so_far = 0;
+
+ /* print output of header */
+ if ( ( opts->output_format == of_sam ) &&
+ ( ifs->database_count > 0 ) &&
+ ( opts->header_mode != hm_none ) &&
+ !opts->dump_unaligned_only )
+ /* ------------------------------------------------------ */
+ rc = print_headers( opts, ifs ); /* sam-hdr.c */
+ /* ------------------------------------------------------ */
+
+
+ /* print output of aligned reads */
+ if ( rc == 0 &&
+ ifs->database_count > 0 &&
+ !opts->dump_unaligned_only )
+ /* ------------------------------------------------------ */
+ rc = print_aligned_spots( opts, ifs, mc, &rows_so_far ); /* sam-aligned.c */
+ /* ------------------------------------------------------ */
+
+
+ /* print output of unaligned reads */
+ if ( rc == 0 )
+ {
+ /* ------------------------------------------------------ */
+ rc = print_unaligned_spots( opts, ifs, mc, &rows_so_far ); /* sam-unaligned.c */
+ /* ------------------------------------------------------ */
+ }
+
+ if ( opts->use_mate_cache )
+ {
+ if ( opts->report_cache )
+ rc = matecache_report( mc ); /* matecache.c */
+ release_matecache( mc ); /* matecache.c */
+ }
+ }
+ }
+ release_input_files( ifs ); /* inputfiles.c */
+ }
+ VDBManagerRelease( mgr );
+ }
+ KDirectoryRelease( dir );
+ }
+ return rc;
+}
+
+
+static rc_t perform_cigar_test( const samdump_opts * const opts )
+{
+ rc_t rc;
+ cg_cigar_input input;
+ cg_cigar_output output;
+
+ memset( &input, 0, sizeof input );
+ memset( &output, 0, sizeof output );
+
+ input.cigar_len = string_size( opts->cigar_test );
+ input.cigar = opts->cigar_test;
+
+ rc = make_cg_cigar( &input, &output );
+ if ( rc == 0 )
+ {
+ KOutMsg( "%s\n", output.cigar );
+ }
+ else
+ {
+ (void)PLOGERR( klogErr, ( klogErr, rc, "error testing cg-cigar treatment '$(t)'",
+ "t=%s", opts->cigar_test ) );
+ }
+ return rc;
+}
+
+/* =========================================================================================== */
+
+static rc_t samdump_main( Args * args, const samdump_opts * const opts )
+{
+ rc_t rc = 0;
+ out_redir redir; /* from out_redir.h */
+ enum out_redir_mode mode;
+
+ switch( opts->output_compression )
+ {
+ case oc_none : mode = orm_uncompressed; break;
+ case oc_gzip : mode = orm_gzip; break;
+ case oc_bzip2 : mode = orm_bzip2; break;
+ }
+
+ rc = init_out_redir( &redir, mode, opts->outputfile, opts->output_buffer_size ); /* from out_redir.c */
+ if ( rc == 0 )
+ {
+ if ( opts->report_options )
+ {
+ report_options( opts ); /* from sam-dump-opts.c */
+ }
+ else if ( opts->cigar_test != NULL )
+ {
+ rc = perform_cigar_test( opts );
+ }
+ else
+ {
+ if ( opts->input_file_count < 1 )
+ {
+ rc = RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+ (void)LOGERR( klogErr, rc, "no inputfiles given at commandline" );
+ Usage( args );
+ }
+ else
+ {
+ /* ------------------------------------------------------ */
+ rc = print_samdump( opts );
+ /* ------------------------------------------------------ */
+ }
+ }
+ release_out_redir( &redir ); /* from out_redir.c */
+ }
+ return rc;
+}
+
+
+/* forward declaration, code is in sam-dump.c */
+rc_t CC Legacy_KMain( int argc, char* argv[] );
+
+
+#define LEGACY_FOR_CGI 1
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+ bool call_legacy_dumper = false;
+
+ rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+ }
+ else
+ {
+ Args * args;
+
+ KLogHandlerSetStdErr();
+ rc = ArgsMakeAndHandle( &args, argc, argv, 1,
+ SamDumpArgs, sizeof SamDumpArgs / sizeof SamDumpArgs [ 0 ] );
+ if ( rc == 0 )
+ {
+ samdump_opts opts; /* from sam-dump-opts.h */
+
+ memset( &opts, 0, sizeof opts );
+ rc = gather_options( args, &opts ); /* from sam-dump-opts.c */
+ if ( rc == 0 )
+ {
+ if ( LEGACY_FOR_CGI > 0 )
+ {
+ call_legacy_dumper = ( opts.dump_cg_evidence ||
+ opts.dump_cg_sam ||
+ opts.dump_cg_ev_dnb ||
+ opts.force_legacy ||
+ opts.merge_cg_cigar );
+ }
+ if ( !call_legacy_dumper )
+ {
+ ReportBuildDate( __DATE__ );
+ rc = samdump_main( args, &opts );
+ }
+ /* because the options have sub-structures, like tree/vector's */
+ release_options( &opts ); /* from sam-dump-opts.c */
+ }
+ ArgsWhack( args );
+ }
+ }
+
+ /* trick to call the legacy sam-dump code if cg-functionality is requested */
+ if ( call_legacy_dumper )
+ {
+ rc = Legacy_KMain( argc, argv );
+ }
+ else
+ {
+ /* Report execution environment if necessary */
+ rc_t rc2 = ReportFinalize( rc );
+ if ( rc == 0 )
+ rc = rc2;
+ }
+ return rc;
+}
diff --git a/tools/sra-pileup/sam-hdr.c b/tools/sra-pileup/sam-hdr.c
new file mode 100644
index 0000000..0adc2fa
--- /dev/null
+++ b/tools/sra-pileup/sam-hdr.c
@@ -0,0 +1,425 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <align/reference.h>
+#include <sysalloc.h>
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+
+
+static rc_t print_headers_from_metadata( const VDatabase * db, bool * recalc, const char * path )
+{
+ const KMetadata * meta;
+ rc_t rc = VDatabaseOpenMetadataRead( db, &meta );
+ if ( rc != 0 )
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open metadata from '$(t)'", "t=%s", path ) );
+ else
+ {
+ const KMDataNode * node;
+ rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) == rcNotFound )
+ {
+ *recalc = true;
+ rc = 0;
+ }
+ else
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open meta-node 'BAM_HEADER' from '$(t)'", "t=%s", path ) );
+ }
+ else
+ {
+ size_t offset = 0, num_read, remaining = ~0;
+ char buffer[ 40960 ];
+ while ( rc == 0 && remaining > 0 )
+ {
+ rc = KMDataNodeRead( node, offset, buffer, sizeof( buffer ),
+ &num_read, &remaining );
+ if ( rc == 0 )
+ {
+ rc = KOutMsg( "%.*s", ( uint32_t )num_read, buffer );
+ offset += num_read;
+ }
+ }
+ if ( rc == 0 && buffer[ num_read - 1 ] != '\n' )
+ {
+ rc = KOutMsg( "\n" );
+ }
+ KMDataNodeRelease( node );
+ }
+ KMetadataRelease( meta );
+ }
+ return rc;
+}
+
+
+typedef struct seq_id_node
+{
+ BSTNode node;
+ char * seq_id;
+ char * name;
+ INSDC_coord_len seq_len;
+} seq_id_node;
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+ int res = 0;
+ if ( ( a != NULL )&&( b != NULL ) )
+ {
+ size_t len_a = string_size( a );
+ size_t len_b = string_size( b );
+ res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+ }
+ return res;
+}
+
+
+static seq_id_node * make_seq_id_node( const char * seq_id, const char * name, INSDC_coord_len seq_len )
+{
+ seq_id_node *res = calloc( sizeof *res, 1 );
+ if ( res != NULL )
+ {
+ res->name = string_dup( name, string_size( name ) );
+ res->seq_id = string_dup( seq_id, string_size( seq_id ) );
+ res->seq_len = seq_len;
+ }
+ return res;
+}
+
+
+static void free_seq_id_node( seq_id_node * node )
+{
+ if ( node != NULL )
+ {
+ if ( node->seq_id != NULL )
+ free( node->seq_id );
+ if ( node->name != NULL )
+ free( node->name );
+ free( node );
+ }
+}
+
+
+static void CC free_seq_id_tree_callback( BSTNode *n, void * data )
+{
+ free_seq_id_node( ( seq_id_node * )n );
+}
+
+
+static void free_seq_id_tree( BSTree * tree )
+{
+ BSTreeWhack( tree, free_seq_id_tree_callback, NULL );
+}
+
+
+static int CC seq_id_node_vs_pchar_wrapper( const void *item, const BSTNode *n )
+{
+ const seq_id_node * node = ( const seq_id_node * )n;
+ return cmp_pchar( (const char *)item, node->seq_id );
+}
+
+
+static seq_id_node * find_seq_id_node( BSTree * tree, const char * key )
+{
+ return ( seq_id_node * ) BSTreeFind( tree, key, seq_id_node_vs_pchar_wrapper );
+}
+
+
+static int CC node_vs_node_wrapper( const BSTNode *item, const BSTNode *n )
+{
+ const seq_id_node * a = ( const seq_id_node * )item;
+ const seq_id_node * b = ( const seq_id_node * )n;
+ return cmp_pchar( a->seq_id, b->seq_id );
+}
+
+
+static rc_t add_seq_id_node( BSTree * tree, const char * seq_id, const char * name, INSDC_coord_len len )
+{
+ rc_t rc = 0;
+ seq_id_node * node = make_seq_id_node( seq_id, name, len );
+ if ( node != NULL )
+ {
+ rc = BSTreeInsert( tree, (BSTNode *)node, node_vs_node_wrapper );
+ if ( rc != 0 )
+ free_seq_id_node( node );
+ }
+ else
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ return rc;
+}
+
+
+static rc_t print_seq_id_tree( BSTree * tree, input_files * ifs )
+{
+ rc_t rc = 0;
+ uint32_t i;
+ for ( i = 0; i < ifs->database_count && rc == 0; ++i )
+ {
+ input_database * id = VectorGet( &ifs->dbs, i );
+ if ( id != NULL )
+ {
+ uint32_t rcount;
+ rc = ReferenceList_Count( id->reflist, &rcount );
+ if ( rc == 0 && rcount > 0 )
+ {
+ uint32_t r_idx;
+ for ( r_idx = 0; r_idx < rcount && rc == 0; ++r_idx )
+ {
+ const ReferenceObj * ref_obj;
+ rc = ReferenceList_Get( id->reflist, &ref_obj, r_idx );
+ if ( rc == 0 && ref_obj != NULL )
+ {
+ const char * seqid;
+ rc = ReferenceObj_SeqId( ref_obj, &seqid );
+ if ( rc == 0 )
+ {
+ const char * name;
+ rc = ReferenceObj_Name( ref_obj, &name );
+ if ( rc == 0 )
+ {
+ INSDC_coord_len seq_len;
+ rc = ReferenceObj_SeqLength( ref_obj, &seq_len );
+ if ( rc == 0 )
+ {
+ seq_id_node * node = find_seq_id_node( tree, seqid );
+ if ( node != NULL )
+ {
+ if ( node->seq_len != seq_len )
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcData, rcInvalid );
+ }
+ else
+ rc = add_seq_id_node( tree, seqid, name, seq_len );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+typedef struct hdr_print_ctx
+{
+ rc_t rc;
+ bool use_seq_id;
+} hdr_print_ctx;
+
+
+static void CC print_header_callback( BSTNode *n, void *data )
+{
+ seq_id_node * node = ( seq_id_node * )n;
+ hdr_print_ctx * hctx = ( hdr_print_ctx * )data;
+ if ( hctx->rc == 0 )
+ {
+ if ( hctx->use_seq_id )
+ hctx->rc = KOutMsg( "@SQ\tSN:%s\tLN:%u\n", node->seq_id, node->seq_len );
+ else
+ {
+ if ( cmp_pchar( node->seq_id, node->name ) == 0 )
+ hctx->rc = KOutMsg( "@SQ\tSN:%s\tLN:%u\n", node->name, node->seq_len );
+ else
+ hctx->rc = KOutMsg( "@SQ\tSN:%s\tAS:%s\tLN:%u\n", node->name, node->seq_id, node->seq_len );
+ }
+ }
+}
+
+
+static rc_t extract_spotgroups( VNamelist * spotgroups, input_files * ifs )
+{
+ rc_t rc = 0;
+ uint32_t i;
+ for ( i = 0; i < ifs->database_count && rc == 0; ++i )
+ {
+ input_database * id = VectorGet( &ifs->dbs, i );
+ if ( id != NULL )
+ {
+ const VTable * tab;
+ rc = VDatabaseOpenTableRead( id->db, &tab, "SEQUENCE" );
+ if ( rc != 0 )
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open table SEQUENCE in '$(t)'", "t=%s", id->path ) );
+ else
+ {
+ const KMetadata * meta;
+ rc = VTableOpenMetadataRead( tab, &meta );
+ if ( rc != 0 )
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open metadata from '$(t)'", "t=%s", id->path ) );
+ else
+ {
+ const KMDataNode * node;
+ rc = KMetadataOpenNodeRead( meta, &node, "STATS/SPOT_GROUP" );
+ if ( rc != 0 )
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open meta-node 'STATS/SPOT_GROUP' from '$(t)'", "t=%s", id->path ) );
+ else
+ {
+ KNamelist * node_childs;
+ rc = KMDataNodeListChildren( node, &node_childs );
+ if ( rc != 0 )
+ (void)PLOGERR( klogErr, ( klogErr, rc, "cannot list children of SPOT_GROUP-node in '$(t)'", "t=%s", id->path ) );
+ else
+ {
+ uint32_t n_count;
+ rc = KNamelistCount( node_childs, &n_count );
+ if ( rc == 0 && n_count > 0 )
+ {
+ uint32_t n_idx;
+ for ( n_idx = 0; n_idx < n_count && rc == 0; ++n_idx )
+ {
+ const char * spotgroup;
+ rc = KNamelistGet( node_childs, n_idx, &spotgroup );
+ if ( rc == 0 && spotgroup != NULL )
+ {
+ uint32_t found;
+ rc_t rc1 = VNamelistIndexOf( spotgroups, spotgroup, &found );
+ if ( GetRCState( rc1 ) == rcNotFound )
+ rc = VNamelistAppend( spotgroups, spotgroup );
+ }
+ }
+ }
+ KNamelistRelease( node_childs );
+ }
+ KMDataNodeRelease( node );
+ }
+ KMetadataRelease( meta );
+ }
+ VTableRelease( tab );
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t print_spotgroups( VNamelist * spotgroups )
+{
+ uint32_t count;
+ rc_t rc = VNameListCount( spotgroups, &count );
+ if ( rc == 0 && count > 0 )
+ {
+ uint32_t i;
+ for ( i = 0; i < count && rc == 0; ++i )
+ {
+ const char * s;
+ rc = VNameListGet( spotgroups, i, &s );
+ if ( rc == 0 && s != NULL )
+ {
+ if ( cmp_pchar( s, "default" ) != 0 )
+ rc = KOutMsg( "@RG\tID:%s\n", s );
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t print_headers_by_recalculating( const samdump_opts * opts, input_files * ifs )
+{
+ BSTree tree;
+ rc_t rc = KOutMsg( "@HD\tVN:1.3\n" );
+ if ( rc == 0 )
+ {
+ /* collect sequenc-id's and names and their lengths, unique by sequence-id */
+ BSTreeInit( &tree );
+ rc = print_seq_id_tree( &tree, ifs );
+ if ( rc == 0 )
+ {
+ hdr_print_ctx hctx;
+ hctx.rc = 0;
+ hctx.use_seq_id = opts->use_seqid_as_refname;
+ /* ptrint it */
+ BSTreeForEach( &tree, false, print_header_callback, &hctx );
+ rc = hctx.rc;
+ }
+ free_seq_id_tree( &tree );
+
+ /* collect spot-groups ( unique ) */
+ if ( rc == 0 )
+ {
+ VNamelist * spotgroups;
+ rc = VNamelistMake( &spotgroups, 10 );
+ if ( rc == 0 )
+ {
+ rc = extract_spotgroups( spotgroups, ifs );
+ if ( rc == 0 )
+ rc = print_spotgroups( spotgroups );
+ VNamelistRelease( spotgroups );
+ }
+ }
+ }
+ return rc;
+}
+
+
+rc_t print_headers( const samdump_opts * opts, input_files * ifs )
+{
+ rc_t rc = 0;
+ if ( ifs->database_count > 1 )
+ rc = print_headers_by_recalculating( opts, ifs );
+ else
+ {
+ bool recalc = false;
+ switch( opts->header_mode )
+ {
+ case hm_dump : {
+ input_database * id = VectorGet( &ifs->dbs, 0 );
+ rc = print_headers_from_metadata( id->db, &recalc, id->path );
+ if ( rc == 0 && recalc )
+ rc = print_headers_by_recalculating( opts, ifs );
+ }
+ break;
+
+ case hm_recalc : rc = print_headers_by_recalculating( opts, ifs );
+ break;
+
+ case hm_none : break; /* to not let the compiler complain about not handled enum */
+ }
+ }
+
+ /* attach header comments from the commandline */
+ if ( rc == 0 && opts->hdr_comments != NULL )
+ {
+ uint32_t count;
+ rc = VNameListCount( opts->hdr_comments, &count );
+ if ( rc == 0 && count > 0 )
+ {
+ uint32_t i;
+ for ( i = 0; i < count && rc == 0; ++i )
+ {
+ const char * s;
+ rc = VNameListGet( opts->hdr_comments, i, &s );
+ if ( rc == 0 && s != NULL )
+ rc = KOutMsg( "@CO\t%s\n", s );
+ }
+ }
+ }
+ return rc;
+}
diff --git a/tools/sra-pileup/sam-hdr.h b/tools/sra-pileup/sam-hdr.h
new file mode 100644
index 0000000..7b373c4
--- /dev/null
+++ b/tools/sra-pileup/sam-hdr.h
@@ -0,0 +1,41 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_headers_
+#define _h_sam_headers_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+
+rc_t print_headers( const samdump_opts * opts, input_files * ifs );
+
+#endif
diff --git a/tools/sra-pileup/sam-unaligned.c b/tools/sra-pileup/sam-unaligned.c
new file mode 100644
index 0000000..ea966b6
--- /dev/null
+++ b/tools/sra-pileup/sam-unaligned.c
@@ -0,0 +1,1411 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "read_fkt.h"
+#include "sam-unaligned.h"
+#include <kapp/main.h>
+#include <sysalloc.h>
+#include <ctype.h>
+
+#define COL_READ "(INSDC:dna:text)READ"
+#define COL_REF_NAME "(ascii)REF_NAME"
+#define COL_REF_SEQ_ID "(ascii)REF_SEQ_ID"
+#define COL_REF_POS "(INSDC:coord:zero)REF_POS"
+
+typedef struct prim_table_ctx
+{
+ const VCursor * cursor;
+
+ uint32_t ref_name_idx;
+ uint32_t ref_seq_id_idx;
+ uint32_t ref_pos_idx;
+} prim_table_ctx;
+
+
+static rc_t prepare_prim_table_ctx( const samdump_opts * const opts, const input_table * const itab, prim_table_ctx * const ptx )
+{
+ rc_t rc;
+
+ if ( opts->cursor_cache_size == 0 )
+ rc = VTableCreateCursorRead( itab->tab, &ptx->cursor );
+ else
+ rc = VTableCreateCachedCursorRead( itab->tab, &ptx->cursor, opts->cursor_cache_size );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( PRIMARY_ALIGNMENT ) for $(tn) failed", "tn=%s", itab->path ) );
+ }
+ else
+ {
+ rc = add_column( ptx->cursor, COL_REF_NAME, &ptx->ref_name_idx );
+ if ( rc == 0 )
+ rc = add_column( ptx->cursor, COL_REF_SEQ_ID, &ptx->ref_seq_id_idx );
+ if ( rc == 0 )
+ rc = add_column( ptx->cursor, COL_REF_POS, &ptx->ref_pos_idx );
+ if ( rc == 0 )
+ {
+ rc = VCursorOpen( ptx->cursor );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( PRIMARY_ALIGNMENT ) for $(tn) failed", "tn=%s", itab->path ) );
+ }
+ }
+ }
+ return rc;
+}
+
+
+#define COL_ALIGN_COUNT "(U8)ALIGNMENT_COUNT"
+#define COL_SPOT_ID "(INSDC:SRA:spotid_t)SPOT_ID"
+#define COL_PRIM_AL_ID "(I64)PRIMARY_ALIGNMENT_ID"
+#define COL_READ_TYPE "(INSDC:SRA:xread_type)READ_TYPE"
+#define COL_READ_FILTER "(INSDC:SRA:read_filter)READ_FILTER"
+#define COL_READ_LEN "(INSDC:coord:len)READ_LEN"
+#define COL_READ_START "(INSDC:coord:zero)READ_START"
+/* #define COL_QUALITY "(INSDC:quality:text:phred_33)QUALITY" */
+#define COL_QUALITY "(INSDC:quality:phred)QUALITY"
+#define COL_SPOT_GROUP "(ascii)SPOT_GROUP"
+#define COL_NAME "(ascii)NAME"
+
+#define INVALID_COLUMN 0xFFFFFFFF
+
+typedef struct seq_table_ctx
+{
+ const VCursor * cursor;
+
+ uint32_t align_count_idx;
+ uint32_t prim_al_id_idx;
+ uint32_t read_type_idx;
+ uint32_t read_filter_idx;
+ uint32_t read_len_idx;
+ uint32_t read_start_idx;
+ uint32_t read_idx;
+ uint32_t quality_idx;
+ uint32_t spot_group_idx;
+ uint32_t name_idx;
+} seq_table_ctx;
+
+
+static rc_t prepare_seq_table_ctx( const samdump_opts * const opts, const input_table * const itab, seq_table_ctx * const stx, bool legacy )
+{
+ rc_t rc;
+
+ if ( opts->cursor_cache_size == 0 )
+ rc = VTableCreateCursorRead( itab->tab, &stx->cursor );
+ else
+ rc = VTableCreateCachedCursorRead( itab->tab, &stx->cursor, opts->cursor_cache_size );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( SEQUENCE ) for $(tn) failed", "tn=%s", itab->path ) );
+ }
+ else
+ {
+ if ( legacy )
+ stx->align_count_idx = INVALID_COLUMN;
+ else
+ rc = add_column( stx->cursor, COL_ALIGN_COUNT, &stx->align_count_idx );
+
+ if ( rc == 0 )
+ {
+ if ( legacy )
+ stx->prim_al_id_idx = INVALID_COLUMN;
+ else
+ rc = add_column( stx->cursor, COL_PRIM_AL_ID, &stx->prim_al_id_idx );
+ }
+
+ if ( rc == 0 )
+ {
+ if ( legacy )
+ rc = add_column( stx->cursor, COL_NAME, &stx->name_idx );
+ else
+ stx->name_idx = INVALID_COLUMN;
+ }
+
+ if ( rc == 0 )
+ rc = add_column( stx->cursor, COL_READ_TYPE, &stx->read_type_idx );
+ if ( rc == 0 )
+ rc = add_column( stx->cursor, COL_READ_FILTER, &stx->read_filter_idx );
+ if ( rc == 0 )
+ rc = add_column( stx->cursor, COL_READ_LEN, &stx->read_len_idx );
+ if ( rc == 0 )
+ rc = add_column( stx->cursor, COL_READ_START, &stx->read_start_idx );
+ if ( rc == 0 )
+ rc = add_column( stx->cursor, COL_READ, &stx->read_idx );
+ if ( rc == 0 )
+ rc = add_column( stx->cursor, COL_QUALITY, &stx->quality_idx );
+ if ( rc == 0 )
+ rc = add_column( stx->cursor, COL_SPOT_GROUP, &stx->spot_group_idx );
+ }
+ return rc;
+}
+
+
+typedef struct seq_row
+{
+ uint32_t nreads;
+
+ bool fully_unaligned;
+ bool partly_unaligned;
+ bool filtered_out;
+} seq_row;
+
+
+static rc_t complain_size_diff( int64_t row_id, const char * txt )
+{
+ rc_t rc = RC( rcExe, rcNoTarg, rcConstructing, rcSize, rcInvalid );
+ (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(tx)", "rn=%ld,tx=%s", row_id, txt ) );
+ return rc;
+}
+
+
+static rc_t read_seq_row( const samdump_opts * const opts, const seq_table_ctx * const stx, const int64_t row_id, seq_row * const row )
+{
+ rc_t rc = 0;
+
+ if ( stx->align_count_idx == INVALID_COLUMN )
+ {
+ const INSDC_read_type *ptr;
+
+ row->fully_unaligned = true;
+ row->partly_unaligned = false;
+ row->filtered_out = false;
+ rc = read_INSDC_read_type_ptr( row_id, stx->cursor, stx->read_type_idx, &ptr, &row->nreads );
+ }
+ else
+ {
+ const uint8_t * u8ptr;
+ size_t u8ptr_len;
+
+ /* ALIGNMENT_COUNT ... only to detect if reads are unaligned, could be done with PRIMARY_ALINGMENT too,
+ but this one is only 8 bit instead of 64 bit, that means faster */
+ rc = read_u8_ptr_and_size( row_id, stx->cursor, stx->align_count_idx, &u8ptr, &u8ptr_len );
+ if ( rc == 0 )
+ {
+ uint32_t i, n;
+
+ row->nreads = u8ptr_len;
+ for ( i = 0, n = 0; i < u8ptr_len; ++i )
+ if ( u8ptr[ i ] != 0 )
+ n++;
+ row->fully_unaligned = ( n == 0 );
+ row->partly_unaligned = ( n < u8ptr_len && n > 0 );
+
+ if ( row->partly_unaligned )
+ row->filtered_out = !opts->print_half_unaligned_reads;
+ else if ( row->fully_unaligned )
+ row->filtered_out = !opts->print_fully_unaligned_reads;
+ else
+ row->filtered_out = true;
+ }
+ }
+ return rc;
+}
+
+
+/**********************************************************************************
+
+ 0x001 template having multiple fragments in sequencing
+ (row->nreads > 1 )
+
+ 0x002 each fragment properly aligned according to the aligner
+ ( never the case in an unaligned read )
+
+ 0x004 fragment unmapped
+ ( always true in an unaligned read )
+
+ 0x008 next fragment in the template unmapped
+ ( is the mate aligned? next: read_idx+1, if read_idx==row->nreads-1 then read_idx-1 )
+
+ 0x010 SEQ being reverse complemented
+ ( column 'READ_TYPE' has bit READ_TYPE_REVERSE set )
+
+ 0x020 SEQ of the next fragment in the template being reversed
+ ( is the mate reversed? )
+
+ 0x040 the first fragment in the template
+ ( read_idx == 0 )
+
+ 0x080 the last fragment in the template
+ ( read_idx == ( row->nreads - 1 ) )
+
+ 0x100 secondary alignment
+ ( never the case in an unaligned read )
+
+ 0x200 not passing quality controls
+ ( column 'READ_FILTER' has bit READ_FILTER_REJECT set )
+
+ 0x400 PCR or optical duplicate
+ ( column 'READ_FILTER' has bit READ_FILTER_CRITERIA set )
+
+**********************************************************************************/
+static uint32_t calculate_unaligned_sam_flags_db( uint32_t nreads, uint32_t read_idx,
+ uint32_t mate_idx, int64_t mate_id,
+ const INSDC_read_type * read_type,
+ bool reverse_flag,
+ const INSDC_read_filter * read_filter )
+{
+ uint32_t res = 0x04;
+
+ if ( nreads > 1 )
+ {
+ res |= 0x01;
+ /* the following test only make sense if there is a mate */
+
+ if ( mate_id == 0 )
+ res |= 0x08;
+ if ( ( read_type[ mate_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE )
+ res |= 0x020;
+ if ( read_idx == 0 )
+ res |= 0x040;
+ if ( read_idx == ( nreads - 1 ) )
+ res |= 0x080;
+ }
+
+ if ( reverse_flag )
+ res |= 0x010;
+ if ( ( read_filter[ read_idx ] & READ_FILTER_REJECT ) == READ_FILTER_REJECT )
+ res |= 0x200;
+ if ( ( read_filter[ read_idx ] & READ_FILTER_CRITERIA ) == READ_FILTER_CRITERIA )
+ res |= 0x400;
+ return res;
+}
+
+
+const char * ref_name_star = "*";
+
+static rc_t get_mate_info( const prim_table_ctx * const ptx, const matecache * const mc,
+ const input_database * const ids, const int64_t row_id, const int64_t mate_id, const uint32_t nreads,
+ const char ** mate_ref_name, uint32_t * const mate_ref_name_len, INSDC_coord_zero * const mate_ref_pos )
+{
+ rc_t rc = 0;
+
+ *mate_ref_name = ref_name_star;
+ *mate_ref_name_len = 1;
+ *mate_ref_pos = 0;
+ if ( nreads < 2 )
+ return rc;
+
+ if ( mate_id != 0 )
+ {
+ uint32_t ref_idx;
+ int64_t seq_spot_id;
+ rc = matecache_lookup_unaligned( mc, ids->db_idx, mate_id, mate_ref_pos, &ref_idx, &seq_spot_id );
+ if ( rc == 0 )
+ {
+ const ReferenceObj* refobj;
+ *mate_ref_pos += 1;
+ /* now we have to lookup the reference-name based on it's index into the ids->reflist */
+ rc = ReferenceList_Get( ids->reflist, &refobj, ref_idx );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_id, row_id ) );
+ }
+ else
+ {
+ rc = ReferenceObj_Name( refobj, mate_ref_name );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_id, row_id ) );
+ }
+ else
+ {
+ *mate_ref_name_len = string_size( *mate_ref_name );
+ }
+ }
+ }
+ else if ( GetRCState( rc ) == rcNotFound )
+ {
+ /* we have a mate and it is aligned! ---> look it up in the PRIMARY_ALIGNMENT - table*/
+ const char * ptr;
+ size_t len;
+
+ rc = read_char_ptr_and_size( mate_id, ptx->cursor, ptx->ref_name_idx, &ptr, &len );
+ if ( rc == 0 && len > 0 )
+ {
+ *mate_ref_name = ptr;
+ *mate_ref_name_len = len;
+ }
+
+ if ( rc == 0 )
+ {
+ INSDC_coord_zero pos;
+ rc = read_INSDC_coord_zero( mate_id, ptx->cursor, ptx->ref_pos_idx, &pos, &len );
+ if ( rc == 0 && len > 0 )
+ {
+ *mate_ref_pos = ( pos + 1 );
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t print_sliced_read( const INSDC_dna_text * read, uint32_t read_idx,
+ bool reverse, const INSDC_coord_zero * read_start, const INSDC_coord_len * read_len )
+{
+ rc_t rc = 0;
+ const INSDC_dna_text * ptr = read + read_start[ read_idx ];
+ if ( !reverse )
+ {
+ rc = KOutMsg( "%.*s", read_len[ read_idx ], ptr );
+ }
+ else
+ {
+ const char cmp_tbl [] =
+ {
+ 'T', 'V', 'G', 'H', 'E', 'F', 'C', 'D',
+ 'I', 'J', 'M', 'L', 'K', 'N', 'O', 'P',
+ 'Q', 'Y', 'S', 'A', 'U', 'B', 'W', 'X',
+ 'R', 'Z'
+ };
+
+ int32_t i = ( read_len[ read_idx ] - 1 );
+ while( i >= 0 && rc == 0 )
+ {
+ int c = ptr [ i ];
+ if ( isalpha ( c ) )
+ {
+ if ( islower ( c ) )
+ c = tolower ( cmp_tbl [ toupper ( c ) - 'A' ] );
+ else
+ c = cmp_tbl [ c - 'A' ];
+ }
+
+ rc = KOutMsg( "%c", ( char ) c );
+ i--;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t print_sliced_quality( const samdump_opts * const opts, const char * quality, uint32_t read_idx,
+ bool reverse, const INSDC_coord_zero * read_start, const INSDC_coord_len * read_len )
+{
+ const char * ptr = quality + read_start[ read_idx ];
+ return dump_quality( opts, ptr, read_len[ read_idx ], reverse ); /* sam-dump-opts.c */
+}
+
+
+static rc_t dump_the_other_read( const seq_table_ctx * const stx, const prim_table_ctx * const ptx,
+ const int64_t row_id, const uint32_t mate_idx )
+{
+ uint32_t row_len;
+ int64_t *prim_al_id_ptr;
+
+ /* read from the SEQUENCE-table the value of the colum "PRIMARY_ALIGNMENT_ID"[ mate_idx ] */
+ rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_al_id_ptr, &row_len );
+ if ( rc == 0 )
+ {
+ if ( row_len == 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "rowlen zero in row $(rn) of SEQUENCE.PRIMARY_ALIGNMENT_ID", "rn=%ld", row_id ) );
+ }
+ else if ( mate_idx >= row_len )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "mate_idx invalid in row $(rn) of SEQUENCE.PRIMARY_ALIGNMENT_ID", "rn=%ld", row_id ) );
+ }
+ else
+ {
+ /* read from the PRIMARY_ALIGNMENT_TABLE the value of the columns "REF_NAME" and "REF_POS" */
+ int64_t a_row_id = prim_al_id_ptr[ mate_idx ];
+ if ( a_row_id == 0 )
+ {
+ rc = KOutMsg( "*\t0\t" );
+ }
+ else
+ {
+ const char * ref_name;
+ size_t ref_name_len;
+ rc = read_char_ptr_and_size( a_row_id, ptx->cursor, ptx->ref_name_idx, &ref_name, &ref_name_len );
+ if ( rc == 0 )
+ {
+ if ( ref_name_len == 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "rowlen zero in row $(rn) of PRIM.REF_NAME", "rn=%ld", a_row_id ) );
+ }
+ else
+ {
+ const INSDC_coord_zero *ref_pos;
+ rc = read_INSDC_coord_zero_ptr( a_row_id, ptx->cursor, ptx->ref_pos_idx, &ref_pos, &row_len );
+ if ( rc == 0 )
+ {
+ rc = KOutMsg( "%.*s\t%i\t", ref_name_len, ref_name, ref_pos[ 0 ] + 1 );
+ }
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static uint32_t calc_mate_idx( const uint32_t n_reads, const uint32_t read_idx )
+{
+ if ( read_idx == ( n_reads - 1 ) )
+ return ( read_idx - 1 );
+ else
+ return ( read_idx + 1 );
+}
+
+
+static rc_t read_quality( const seq_table_ctx * const stx,
+ const int64_t row_id, const char **quality, const uint32_t read_len )
+{
+ size_t quality_len;
+ rc_t rc = read_char_ptr_and_size( row_id, stx->cursor, stx->quality_idx, quality, &quality_len );
+ if ( rc == 0 && read_len != quality_len )
+ rc = complain_size_diff( row_id, "QUALITY" );
+ return rc;
+}
+
+
+static rc_t read_read_type( const seq_table_ctx * const stx,
+ const int64_t row_id, const INSDC_read_type **read_type, const uint32_t read_len )
+{
+ uint32_t read_type_len;
+ rc_t rc = read_INSDC_read_type_ptr( row_id, stx->cursor, stx->read_type_idx, read_type, &read_type_len );
+ if ( rc == 0 && read_type_len != read_len )
+ rc = complain_size_diff( row_id, "READ_TYPE" );
+ return rc;
+}
+
+
+static rc_t read_read_filter( const seq_table_ctx * const stx,
+ const int64_t row_id, const INSDC_read_filter **read_filter, const uint32_t read_len )
+{
+ uint32_t read_filter_len;
+ rc_t rc = read_INSDC_read_filter_ptr( row_id, stx->cursor, stx->read_filter_idx, read_filter, &read_filter_len );
+ if ( rc == 0 && read_filter_len != read_len )
+ rc = complain_size_diff( row_id, "READ_FILTER" );
+ return rc;
+}
+
+
+static rc_t read_read_start( const seq_table_ctx * const stx,
+ const int64_t row_id, const INSDC_coord_zero **read_start, const uint32_t nreads )
+{
+ uint32_t read_start_len;
+ rc_t rc = read_INSDC_coord_zero_ptr( row_id, stx->cursor, stx->read_start_idx, read_start, &read_start_len );
+ if ( rc == 0 && nreads != read_start_len )
+ rc = complain_size_diff( row_id, "READ_START" );
+ return rc;
+}
+
+
+static rc_t read_read_len( const seq_table_ctx * const stx,
+ const int64_t row_id, const INSDC_coord_len **read_len, const uint32_t nreads )
+{
+ uint32_t read_len_len;
+ rc_t rc = read_INSDC_coord_len_ptr( row_id, stx->cursor, stx->read_len_idx, read_len, &read_len_len );
+ if ( rc == 0 && nreads != read_len_len )
+ rc = complain_size_diff( row_id, "READ_LEN" );
+ return rc;
+}
+
+
+static bool calc_reverse_flag( const samdump_opts * const opts, const uint32_t read_idx, const INSDC_read_type * read_type )
+{
+ bool res = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+ if ( res )
+ res = opts -> reverse_unaligned_reads;
+ return res;
+}
+
+
+static rc_t dump_seq_row_sam_filtered( const samdump_opts * const opts, const seq_table_ctx * const stx,
+ const prim_table_ctx * const ptx, const matecache * const mc,
+ const input_database * const ids, const int64_t row_id, const uint32_t nreads,
+ uint64_t * const printed )
+{
+ uint32_t read_idx, rd_len, prim_align_ids_len;
+ int64_t * prim_align_ids = NULL;
+ const char * spot_group = NULL;
+ const char * quality = NULL;
+ const INSDC_dna_text * read = NULL;
+ const INSDC_read_type * read_type = NULL;
+ const INSDC_read_filter * read_filter = NULL;
+ const INSDC_coord_zero * read_start = NULL;
+ const INSDC_coord_len * read_len;
+ size_t spot_group_len;
+
+ rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len );
+ if ( rc == 0 && nreads != prim_align_ids_len )
+ rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+ if ( rc == 0 )
+ rc = read_read_len( stx, row_id, &read_len, nreads );
+
+ for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+ {
+ int64_t align_id = prim_align_ids[ read_idx ];
+ if ( align_id == 0 && /* read is NOT aligned! */
+ read_len[ read_idx ] > 0 ) /* and has a length! */
+ {
+ uint32_t mate_idx = calc_mate_idx( nreads, read_idx );
+
+ /* here we have to find out if the read is actually requested:
+ -----------------------------------------------------------
+ read from the SEQ-table the ID of the mate in PRIM-table
+ look if we have the requested ID in the mate-cache, if not here it ends...
+ */
+ align_id = prim_align_ids[ mate_idx ];
+ if ( align_id != 0 )
+ {
+ uint32_t ref_idx;
+ INSDC_coord_zero mate_ref_pos;
+ int64_t seq_spot_id;
+ /* this is the filter: we look up in the mate-cache! */
+ rc = matecache_lookup_unaligned( mc, ids->db_idx, align_id, &mate_ref_pos, &ref_idx, &seq_spot_id );
+ if ( rc == 0 )
+ {
+ const ReferenceObj* refobj;
+ /* now we have to lookup the reference-name based on it's index into the ids->reflist */
+ rc = ReferenceList_Get( ids->reflist, &refobj, ref_idx );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_idx, row_id ) );
+ }
+ else
+ {
+ const char * mate_ref_name;
+ rc = ReferenceObj_Name( refobj, &mate_ref_name );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_idx, row_id ) );
+ }
+ else
+ {
+ bool reverse = false;
+
+ /* SAM-FIELD: QNAME SRA-column: SPOT_ID ( int64 ) */
+ if ( rc == 0 )
+ rc = KOutMsg( "%ld\t", seq_spot_id );
+
+ if ( rc == 0 && read_type == NULL )
+ rc = read_read_type( stx, row_id, &read_type, nreads );
+
+ if ( rc == 0 )
+ reverse = calc_reverse_flag( opts, read_idx, read_type );
+
+ if ( rc == 0 && read_filter == NULL )
+ rc = read_read_filter( stx, row_id, &read_filter, nreads );
+
+ /* SAM-FIELD: FLAG SRA-column: calculated from READ_TYPE, READ_FILTER etc. */
+ if ( rc == 0 )
+ {
+ uint32_t sam_flags = calculate_unaligned_sam_flags_db( nreads, read_idx, mate_idx,
+ align_id, read_type, reverse, read_filter );
+ rc = KOutMsg( "%u\t", sam_flags );
+ }
+
+ /* SAM-FIELD: RNAME SRA-column: none, fix '*' */
+ /* SAM-FIELD: POS SRA-column: none, fix '0' */
+ /* SAM-FIELD: MAPQ SRA-column: none, fix '0' */
+ /* SAM-FIELD: CIGAR SRA-column: none, fix '*' */
+ if ( rc == 0 )
+ rc = KOutMsg( "*\t0\t0\t*\t" );
+
+ /* SAM-FIELD: RNEXT SRA-column: found in cache */
+ /* SAM-FIELD: POS SRA-column: found in cache */
+ if ( rc == 0 )
+ rc = KOutMsg( "%s\t%li\t", mate_ref_name, mate_ref_pos + 1 );
+
+ /* SAM-FIELD: TLEN SRA-column: none, fix '0' */
+ if ( rc == 0 )
+ rc = KOutMsg( "0\t" );
+
+ if ( rc == 0 && read == NULL )
+ rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+ if ( rc == 0 && quality == NULL )
+ rc = read_quality( stx, row_id, &quality, rd_len );
+ if ( rc == 0 && read_start == NULL )
+ rc = read_read_start( stx, row_id, &read_start, nreads );
+
+ /* SAM-FIELD: SEQ SRA-column: READ, sliced by READ_START/READ_LEN */
+ if ( rc == 0 )
+ rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\t" );
+
+ /* SAM-FIELD: QUAL SRA-column: QUALITY, sliced by READ_START/READ_LEN */
+ if ( rc == 0 )
+ rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+
+ /* OPT SAM-FIIELD: SRA-column: ALIGN_ID */
+ if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+ rc = KOutMsg( "\tXI:i:%u", row_id );
+
+ /* OPT SAM-FIIELD: SRA-column: SPOT_GROUP */
+ if ( rc == 0 && spot_group == NULL )
+ rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\tRG:Z:%.*s", spot_group_len, spot_group );
+
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+
+ if ( rc == 0 )
+ (*printed)++;
+
+ }
+ }
+ }
+ else
+ {
+ rc = 0; /* it is OK if an alignment is not found in the cache, do not terminate! */
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t dump_seq_prim_row_sam( const samdump_opts * const opts, const seq_table_ctx * const stx,
+ const prim_table_ctx * const ptx, const matecache * const mc,
+ const input_database * const ids, const int64_t row_id, const uint32_t nreads,
+ uint64_t * const printed )
+{
+ uint32_t read_idx, rd_len, prim_align_ids_len;
+ int64_t * prim_align_ids = NULL;
+ const char * spot_group = NULL;
+ const char * quality = NULL;
+ const INSDC_dna_text * read = NULL;
+ const INSDC_read_type * read_type = NULL;
+ const INSDC_read_filter * read_filter = NULL;
+ const INSDC_coord_zero * read_start = NULL;
+ const INSDC_coord_len * read_len;
+ size_t spot_group_len;
+
+ rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len );
+ if ( rc == 0 && nreads != prim_align_ids_len )
+ rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+ if ( rc == 0 )
+ rc = read_read_len( stx, row_id, &read_len, nreads );
+
+ for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+ {
+ if ( prim_align_ids[ read_idx ] == 0 && /* read is NOT aligned! */
+ read_len[ read_idx ] > 0 ) /* and has a length! */
+ {
+ bool reverse = false;
+ uint32_t mate_idx;
+ int64_t mate_id = 0;
+
+ if ( read_idx == ( nreads - 1 ) )
+ mate_idx = read_idx - 1;
+ else
+ mate_idx = read_idx + 1;
+
+ if ( mate_idx < prim_align_ids_len )
+ mate_id = prim_align_ids[ mate_idx ];
+
+ if ( rc == 0 && read_type == NULL )
+ rc = read_read_type( stx, row_id, &read_type, nreads );
+ if ( rc == 0 )
+ reverse = calc_reverse_flag( opts, read_idx, read_type );
+
+ if ( rc == 0 && read_filter == NULL )
+ rc = read_read_filter( stx, row_id, &read_filter, nreads );
+
+ /* SAM-FIELD: QNAME SRA-column: SPOT_ID ( int64 ) */
+ if ( rc == 0 )
+ rc = KOutMsg( "%ld\t", row_id );
+
+ /* SAM-FIELD: FLAG SRA-column: calculated from READ_TYPE, READ_FILTER etc. */
+ if ( rc == 0 )
+ {
+ uint32_t sam_flags;
+ if ( stx->prim_al_id_idx != INVALID_COLUMN )
+ {
+ uint32_t temp_nreads = nreads;
+ if ( mate_id == 0 && read_len[ mate_idx ] == 0 ) temp_nreads--;
+ sam_flags = calculate_unaligned_sam_flags_db( temp_nreads, read_idx, mate_idx,
+ mate_id, read_type, reverse, read_filter );
+ }
+ else
+ {
+ if ( reverse )
+ sam_flags = ( 0x04 | 0x10 );
+ else
+ sam_flags = 0x04;
+ }
+ rc = KOutMsg( "%u\t", sam_flags );
+ }
+
+ /* SAM-FIELD: RNAME SRA-column: none, fix '*' */
+ /* SAM-FIELD: POS SRA-column: none, fix '0' */
+ /* SAM-FIELD: MAPQ SRA-column: none, fix '0' */
+ /* SAM-FIELD: CIGAR SRA-column: none, fix '*' */
+ if ( rc == 0 )
+ rc = KOutMsg( "*\t0\t0\t*\t" );
+
+ /* SAM-FIELD: RNEXT SRA-column: look up in cache, or none */
+ /* SAM-FIELD: POS SRA-column: look up in cache, or none */
+ if ( rc == 0 )
+ {
+ if ( ptx == NULL )
+ {
+ rc = KOutMsg( "0\t0\t" ); /* no way to get that without PRIM_ALIGN-table */
+ }
+ else
+ {
+ if ( opts->use_mate_cache && mc != NULL && ids != NULL )
+ {
+ const char * mate_ref_name;
+ uint32_t mate_ref_name_len;
+ INSDC_coord_zero mate_ref_pos;
+
+ rc = get_mate_info( ptx, mc, ids, row_id, mate_id, nreads, &mate_ref_name, &mate_ref_name_len, &mate_ref_pos );
+ if ( rc == 0 )
+ rc = KOutMsg( "%.*s\t%li\t", mate_ref_name_len, mate_ref_name, mate_ref_pos );
+ }
+ else
+ {
+ /* print the mate info */
+ rc = dump_the_other_read( stx, ptx, row_id, mate_idx );
+ }
+ }
+ }
+
+
+ /* SAM-FIELD: TLEN SRA-column: none, fix '0' */
+ if ( rc == 0 )
+ rc = KOutMsg( "0\t" );
+
+ if ( rc == 0 && read == NULL )
+ rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+ if ( rc == 0 && read_start == NULL )
+ rc = read_read_start( stx, row_id, &read_start, nreads );
+
+ /* SAM-FIELD: SEQ SRA-column: READ, sliced by READ_START/READ_LEN */
+ if ( rc == 0 )
+ rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\t" );
+
+ if ( rc == 0 && quality == NULL )
+ rc = read_quality( stx, row_id, &quality, rd_len );
+
+ /* SAM-FIELD: QUAL SRA-column: QUALITY, sliced by READ_START/READ_LEN */
+ if ( rc == 0 )
+ rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+
+ /* OPT SAM-FIIELD: SRA-column: ALIGN_ID */
+ if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+ rc = KOutMsg( "\tXI:i:%u", row_id );
+
+ /* OPT SAM-FIIELD: SRA-column: SPOT_GROUP */
+ if ( rc == 0 && spot_group == NULL )
+ rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\tRG:Z:%.*s", spot_group_len, spot_group );
+
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+
+ if ( rc == 0 )
+ (*printed)++;
+ }
+ }
+ return rc;
+}
+
+
+/* called if we are dumping from a legacy table instead from a database */
+static rc_t dump_seq_row_sam( const samdump_opts * const opts, const seq_table_ctx * const stx,
+ const int64_t row_id, const uint32_t nreads, uint64_t * const printed )
+{
+ uint32_t read_idx, rd_len;
+ const char * spot_group = NULL;
+ const char * quality = NULL;
+ const char * name;
+ const INSDC_dna_text * read = NULL;
+ const INSDC_read_type * read_type;
+ const INSDC_read_filter * read_filter = NULL;
+ const INSDC_coord_zero * read_start = NULL;
+ const INSDC_coord_len * read_len;
+ size_t spot_group_len, name_len;
+
+ rc_t rc = read_read_len( stx, row_id, &read_len, nreads );
+ if ( rc == 0 )
+ rc = read_char_ptr_and_size( row_id, stx->cursor, stx->name_idx, &name, &name_len );
+ if ( rc == 0 )
+ rc = read_read_type( stx, row_id, &read_type, nreads );
+
+ for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+ {
+ if ( ( read_len[ read_idx ] > 0 ) && /* has a length! */
+ ( ( read_type[ read_idx ] & READ_TYPE_BIOLOGICAL ) == READ_TYPE_BIOLOGICAL ) )
+ {
+ bool reverse = false;
+ uint32_t mate_idx;
+
+ if ( read_idx == ( nreads - 1 ) )
+ mate_idx = read_idx - 1;
+ else
+ mate_idx = read_idx + 1;
+
+ if ( rc == 0 ) /* types in interfaces/insdc/insdc.h */
+ reverse = calc_reverse_flag( opts, read_idx, read_type );
+
+ if ( rc == 0 && read_filter == NULL )
+ rc = read_read_filter( stx, row_id, &read_filter, nreads );
+
+ /* SAM-FIELD: QNAME SRA-column: SPOT_ID ( int64 ) */
+ if ( rc == 0 )
+ rc = KOutMsg( "%.*s\t", name_len, name );
+
+ /* SAM-FIELD: FLAG SRA-column: calculated from READ_TYPE, READ_FILTER etc. */
+ if ( rc == 0 )
+ {
+ uint32_t sam_flags = calculate_unaligned_sam_flags_db( nreads, read_idx, mate_idx,
+ 0, read_type, reverse, read_filter );
+ rc = KOutMsg( "%u\t", sam_flags );
+ }
+
+ /* SAM-FIELD: RNAME SRA-column: none, fix '*' */
+ /* SAM-FIELD: POS SRA-column: none, fix '0' */
+ /* SAM-FIELD: MAPQ SRA-column: none, fix '0' */
+ /* SAM-FIELD: CIGAR SRA-column: none, fix '*' */
+ /* SAM-FIELD: RNEXT SRA-column: none, fix '*' */
+ /* SAM-FIELD: POS SRA-column: none, fix '0' */
+ /* SAM-FIELD: TLEN SRA-column: none, fix '0' */
+
+ if ( rc == 0 )
+ rc = KOutMsg( "*\t0\t0\t*\t*\t0\t0\t" );
+
+ if ( rc == 0 && read == NULL )
+ rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+ if ( rc == 0 && read_start == NULL )
+ rc = read_read_start( stx, row_id, &read_start, nreads );
+
+ /* SAM-FIELD: SEQ SRA-column: READ, sliced by READ_START/READ_LEN */
+ if ( rc == 0 )
+ rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\t" );
+
+ if ( rc == 0 && quality == NULL )
+ rc = read_quality( stx, row_id, &quality, rd_len );
+
+ /* SAM-FIELD: QUAL SRA-column: QUALITY, sliced by READ_START/READ_LEN */
+ if ( rc == 0 )
+ rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+
+ /* OPT SAM-FIIELD: SRA-column: ALIGN_ID */
+ if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+ rc = KOutMsg( "\tXI:i:%u", row_id );
+
+ /* OPT SAM-FIIELD: SRA-column: SPOT_GROUP */
+ if ( rc == 0 && spot_group == NULL )
+ rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+ if ( rc == 0 && ( spot_group != NULL ) && ( spot_group_len > 0 ) )
+ rc = KOutMsg( "\tRG:Z:%.*s", spot_group_len, spot_group );
+
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+
+ if ( rc == 0 )
+ (*printed)++;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t dump_seq_row_fastx_filtered( const samdump_opts * const opts, const seq_table_ctx * const stx,
+ const prim_table_ctx * const ptx, const matecache * const mc,
+ const input_database * const ids,
+ const int64_t row_id, const uint32_t nreads, uint64_t * const printed )
+{
+ uint32_t read_idx, rd_len, prim_align_ids_len;
+ int64_t * prim_align_ids = NULL;
+ const char * quality = NULL;
+ const INSDC_dna_text * read = NULL;
+ const char * spot_group = NULL;
+ const INSDC_read_type * read_type = NULL;
+ const INSDC_coord_zero * read_start = NULL;
+ const INSDC_coord_len * read_len;
+ size_t spot_group_len = 0;
+
+ rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len );
+ if ( rc == 0 && nreads != prim_align_ids_len )
+ rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+ if ( rc == 0 )
+ rc = read_read_len( stx, row_id, &read_len, nreads );
+
+ for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+ {
+ if ( prim_align_ids[ read_idx ] == 0 && /* read is NOT aligned! */
+ read_len[ read_idx ] > 0 ) /* and has a length! */
+ {
+ uint32_t mate_idx = calc_mate_idx( nreads, read_idx );
+ int64_t align_id = prim_align_ids[ mate_idx ];
+ if ( align_id != 0 )
+ {
+ uint32_t ref_idx;
+ INSDC_coord_zero mate_ref_pos;
+ int64_t seq_spot_id;
+ rc = matecache_lookup_unaligned( mc, ids->db_idx, align_id, &mate_ref_pos, &ref_idx, &seq_spot_id );
+ if ( rc == 0 )
+ {
+ bool reverse;
+
+ /* the NAME */
+ if ( opts->output_format == of_fastq )
+ rc = KOutMsg( "@" );
+ else
+ rc = KOutMsg( ">" );
+
+ if ( rc == 0 )
+ {
+ if ( opts->print_spot_group_in_name && spot_group == NULL )
+ rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+ if ( rc == 0 )
+ rc = dump_name( opts, seq_spot_id, spot_group, spot_group_len ); /* sam-dump-opts.c */
+ if ( rc == 0 )
+ rc = KOutMsg( "/%u unaligned\n", read_idx + 1 );
+ }
+
+ if ( rc == 0 && read == NULL )
+ rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+ if ( rc == 0 && quality == NULL )
+ rc = read_quality( stx, row_id, &quality, rd_len );
+ if ( rc == 0 && read_type == NULL )
+ rc = read_read_type( stx, row_id, &read_type, nreads );
+ if ( rc == 0 )
+ reverse = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+ if ( rc == 0 && read_start == NULL )
+ rc = read_read_start( stx, row_id, &read_start, nreads );
+
+ /* the READ */
+ if ( rc == 0 )
+ rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+
+ /* in case of fastq : the QUALITY-line */
+ if ( rc == 0 && opts->output_format == of_fastq )
+ {
+ rc = KOutMsg( "+\n" );
+ if ( rc == 0 )
+ rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+ }
+ (*printed)++;
+ }
+ else
+ {
+ rc = 0;
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t dump_seq_row_fastx( const samdump_opts * const opts, const seq_table_ctx * const stx,
+ const int64_t row_id, const uint32_t nreads, uint64_t * const printed )
+{
+ uint32_t read_idx, rd_len, prim_align_ids_len;
+ int64_t * prim_align_ids = NULL;
+ const char * quality = NULL;
+ const INSDC_dna_text * read = NULL ;
+ const char * spot_group = NULL;
+ const INSDC_read_type * read_type = NULL;
+ const INSDC_coord_zero * read_start = NULL;
+ const INSDC_coord_len * read_len;
+ size_t spot_group_len = 0;
+
+ rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len );
+ if ( rc == 0 && nreads != prim_align_ids_len )
+ rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+ if ( rc == 0 )
+ rc = read_read_len( stx, row_id, &read_len, nreads );
+
+ for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+ {
+ if ( prim_align_ids[ read_idx ] == 0 && /* read is NOT aligned! */
+ read_len[ read_idx ] > 0 ) /* and has a length! */
+ {
+ bool reverse;
+
+ /* the NAME */
+ if ( opts->output_format == of_fastq )
+ rc = KOutMsg( "@" );
+ else
+ rc = KOutMsg( ">" );
+ if ( rc == 0 )
+ {
+ if ( opts->print_spot_group_in_name && spot_group == NULL )
+ rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+ if ( rc == 0 )
+ rc = dump_name( opts, row_id, spot_group, spot_group_len ); /* sam-dump-opts.c */
+ if ( rc == 0 )
+ rc = KOutMsg( "/%u unaligned\n", read_idx + 1 );
+ }
+
+ if ( rc == 0 && read == NULL )
+ rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+ if ( rc == 0 && quality == NULL )
+ rc = read_quality( stx, row_id, &quality, rd_len );
+ if ( rc == 0 && read_type == NULL )
+ rc = read_read_type( stx, row_id, &read_type, nreads );
+ if ( rc == 0 )
+ reverse = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+ if ( rc == 0 && read_start == NULL )
+ rc = read_read_start( stx, row_id, &read_start, nreads );
+
+ /* the READ */
+ if ( rc == 0 )
+ rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+
+ /* in case of fastq : the QUALITY-line */
+ if ( rc == 0 && opts->output_format == of_fastq )
+ {
+ rc = KOutMsg( "+\n" );
+ if ( rc == 0 )
+ rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+ }
+ (*printed)++;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t dump_seq_tab_row_fastx( const samdump_opts * const opts, const seq_table_ctx * const stx,
+ const int64_t row_id, const uint32_t nreads, uint64_t * const printed )
+{
+ uint32_t read_idx, rd_len;
+ const char * quality = NULL;
+ const char * name;
+ const INSDC_dna_text * read = NULL ;
+ const char * spot_group = NULL;
+ const INSDC_read_type * read_type;
+ const INSDC_coord_zero * read_start = NULL;
+ const INSDC_coord_len * read_len;
+ size_t name_len, spot_group_len = 0;
+
+ rc_t rc = read_read_len( stx, row_id, &read_len, nreads );
+ if ( rc == 0 )
+ rc = read_char_ptr_and_size( row_id, stx->cursor, stx->name_idx, &name, &name_len );
+ if ( rc == 0 )
+ rc = read_read_type( stx, row_id, &read_type, nreads );
+
+ for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+ {
+ if ( ( read_len[ read_idx ] > 0 ) && /* has a length! */
+ ( ( read_type[ read_idx ] & READ_TYPE_BIOLOGICAL ) == READ_TYPE_BIOLOGICAL ) )
+ {
+ bool reverse;
+
+ /* the NAME */
+ if ( opts->output_format == of_fastq )
+ rc = KOutMsg( "@" );
+ else
+ rc = KOutMsg( ">" );
+ if ( rc == 0 )
+ {
+ if ( opts->print_spot_group_in_name && spot_group == NULL )
+ rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+
+ if ( rc == 0 )
+ rc = dump_name_legacy( opts, name, name_len, spot_group, spot_group_len ); /* sam-dump-opts.c */
+
+ if ( rc == 0 )
+ rc = KOutMsg( "/%u unaligned\n", read_idx + 1 );
+ }
+
+ if ( rc == 0 && read == NULL )
+ rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+ if ( rc == 0 && quality == NULL )
+ rc = read_quality( stx, row_id, &quality, rd_len );
+ if ( rc == 0 )
+ reverse = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+ if ( rc == 0 && read_start == NULL )
+ rc = read_read_start( stx, row_id, &read_start, nreads );
+
+ /* the READ */
+ if ( rc == 0 )
+ rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+
+ /* in case of fastq : the QUALITY-line */
+ if ( rc == 0 && opts->output_format == of_fastq )
+ {
+ if ( quality == NULL )
+ rc = read_quality( stx, row_id, &quality, rd_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "+\n" );
+ if ( rc == 0 )
+ rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+ }
+ (*printed)++;
+ }
+ }
+ return rc;
+}
+
+
+/* we are printing from a sra-database, we print half aligned reads only if we find them in the mate-cache */
+static rc_t print_unaligned_database_filtered( const samdump_opts * const opts, const input_table * const seq,
+ const input_table * const prim, const matecache * const mc,
+ const input_database * const ids, uint64_t * const rows_so_far )
+{
+ seq_table_ctx stx;
+ rc_t rc = prepare_seq_table_ctx( opts, seq, &stx, ( prim == NULL ) );
+ if ( rc == 0 )
+ {
+ rc = VCursorOpen( stx.cursor );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+ }
+ else
+ {
+ int64_t first_row;
+ uint64_t row_count;
+ rc = VCursorIdRange( stx.cursor, stx.prim_al_id_idx, &first_row, &row_count );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorIdRange( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+ }
+ else
+ {
+ prim_table_ctx ptx;
+ rc = prepare_prim_table_ctx( opts, prim, &ptx );
+ if ( rc == 0 )
+ {
+ int64_t row_id;
+ seq_row row;
+
+ for ( row_id = first_row; ( ( row_id - first_row ) < row_count ) && rc == 0 && !test_limit_reached( opts, *rows_so_far ); ++row_id )
+ {
+ rc = Quitting();
+ if ( rc == 0 )
+ {
+ rc = read_seq_row( opts, &stx, row_id, &row );
+ if ( rc == 0 && !row.filtered_out )
+ {
+ switch( opts->output_format )
+ {
+ case of_sam : rc = dump_seq_row_sam_filtered( opts, &stx, &ptx, mc, ids, row_id, row.nreads, rows_so_far ); break;
+ case of_fasta : /* fall through intended ! */
+ case of_fastq : rc = dump_seq_row_fastx_filtered( opts, &stx, &ptx, mc, ids, row_id, row.nreads, rows_so_far ); break;
+ }
+ }
+ }
+ }
+ VCursorRelease( ptx.cursor );
+ }
+ }
+ }
+ VCursorRelease( stx.cursor );
+ }
+ return rc;
+}
+
+
+/* we are printing from a sra-database, we print all unaligned read we can find */
+static rc_t print_unaligned_database_full( const samdump_opts * const opts, const input_table * const seq,
+ const input_table * const prim, const matecache * const mc,
+ const input_database * const ids, uint64_t * const rows_so_far )
+{
+ seq_table_ctx stx;
+ rc_t rc = prepare_seq_table_ctx( opts, seq, &stx, ( prim == NULL ) );
+ if ( rc == 0 )
+ {
+ rc = VCursorOpen( stx.cursor );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+ }
+ else
+ {
+ prim_table_ctx ptx;
+ if ( opts->output_format == of_sam )
+ rc = prepare_prim_table_ctx( opts, prim, &ptx );
+ if ( rc == 0 )
+ {
+ int64_t first_row, row_id;
+ uint64_t row_count;
+ rc = VCursorIdRange( stx.cursor, stx.read_type_idx, &first_row, &row_count );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorIdRange( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+ }
+ else
+ {
+ seq_row row;
+ for ( row_id = first_row; ( ( row_id - first_row ) < row_count ) && rc == 0 && !test_limit_reached( opts, *rows_so_far ); ++row_id )
+ {
+ rc = Quitting();
+ if ( rc == 0 )
+ {
+ rc = read_seq_row( opts, &stx, row_id, &row );
+ if ( rc == 0 && !row.filtered_out )
+ {
+ switch( opts->output_format )
+ {
+ case of_sam : rc = dump_seq_prim_row_sam( opts, &stx, &ptx, mc, ids, row_id, row.nreads, rows_so_far ); break;
+ case of_fasta : /* fall through intended ! */
+ case of_fastq : rc = dump_seq_row_fastx( opts, &stx, row_id, row.nreads, rows_so_far ); break;
+ }
+ }
+ }
+ }
+ }
+ if ( opts->output_format == of_sam )
+ VCursorRelease( ptx.cursor );
+ }
+ }
+ VCursorRelease( stx.cursor );
+ }
+ return rc;
+}
+
+
+/* we are printing from a (legacy) table not from a database! */
+static rc_t print_unaligned_table( const samdump_opts * const opts, const input_table * const seq, uint64_t * const rows_so_far )
+{
+ seq_table_ctx stx;
+ rc_t rc = prepare_seq_table_ctx( opts, seq, &stx, true ); /* true ... this is a legacy table, not a database */
+ if ( rc == 0 )
+ {
+ rc = VCursorOpen( stx.cursor );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+ }
+ else
+ {
+ int64_t first_row, row_id;
+ uint64_t row_count;
+ rc = VCursorIdRange( stx.cursor, stx.read_type_idx, &first_row, &row_count );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorIdRange( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+ }
+ else
+ {
+ seq_row row;
+ for ( row_id = first_row; ( ( row_id - first_row ) < row_count ) && rc == 0 && !test_limit_reached( opts, *rows_so_far ); ++row_id )
+ {
+ rc = Quitting();
+ if ( rc == 0 )
+ {
+ rc = read_seq_row( opts, &stx, row_id, &row );
+ if ( rc == 0 && !row.filtered_out )
+ {
+ switch( opts->output_format )
+ {
+ case of_sam : rc = dump_seq_row_sam( opts, &stx, row_id, row.nreads, rows_so_far ); break;
+ case of_fasta : /* fall through intended ! */
+ case of_fastq : rc = dump_seq_tab_row_fastx( opts, &stx, row_id, row.nreads, rows_so_far ); break;
+ }
+ }
+ }
+ }
+ }
+ }
+ VCursorRelease( stx.cursor );
+ }
+ return rc;
+}
+
+
+/* entry point from sam-dump3.c */
+rc_t print_unaligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+ const matecache * const mc, uint64_t * const rows_so_far )
+{
+ rc_t rc = 0;
+ if ( ( ifs->database_count > 0 ) && ( opts->dump_unaligned_reads || opts->dump_unaligned_only ) )
+ {
+ uint32_t db_idx;
+ for ( db_idx = 0; db_idx < ifs->database_count && rc == 0; ++db_idx )
+ {
+ const input_database * ids = VectorGet( &ifs->dbs, db_idx );
+ if ( ids != NULL )
+ {
+ input_table seq;
+
+ seq.path = ids->path;
+ rc = VDatabaseOpenTableRead( ids->db, &seq.tab, "SEQUENCE" );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "cannot open table SEQUENCE for $(tn)", "tn=%s", ids->path ) );
+ }
+ else
+ {
+ input_table prim;
+ prim.path = ids->path;
+ rc = VDatabaseOpenTableRead( ids->db, &prim.tab, "PRIMARY_ALIGNMENT" );
+ if ( rc != 0 )
+ {
+ (void)PLOGERR( klogInt, ( klogInt, rc, "cannot open table PRIMARY_ALIGNMENT $(tn)", "tn=%s", ids->path ) );
+ }
+ else
+ {
+ if ( opts->region_count > 0 )
+ {
+ rc = print_unaligned_database_filtered( opts, &seq, &prim, mc, ids, rows_so_far );
+ }
+ else
+ {
+ rc = print_unaligned_database_full( opts, &seq, &prim, mc, ids, rows_so_far );
+ }
+ VTableRelease( prim.tab );
+ }
+ VTableRelease( seq.tab );
+ }
+ }
+ }
+ }
+
+ if ( rc == 0 && ifs->table_count > 0 )
+ {
+ uint32_t tab_idx;
+ for ( tab_idx = 0; tab_idx < ifs->table_count && rc == 0; ++tab_idx )
+ {
+ input_table * itab = VectorGet( &ifs->tabs, tab_idx );
+ if ( itab != NULL )
+ rc = print_unaligned_table( opts, itab, rows_so_far );
+ }
+ }
+ return rc;
+}
diff --git a/tools/sra-pileup/sam-unaligned.h b/tools/sra-pileup/sam-unaligned.h
new file mode 100644
index 0000000..fe66f0d
--- /dev/null
+++ b/tools/sra-pileup/sam-unaligned.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_unaligned_
+#define _h_sam_unaligned_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+#include "matecache.h"
+
+rc_t print_unaligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+ const matecache * const mc, uint64_t * const rows_so_far );
+
+#endif
\ No newline at end of file
diff --git a/tools/sra-pileup/sra-pileup.c b/tools/sra-pileup/sra-pileup.c
new file mode 100644
index 0000000..437d885
--- /dev/null
+++ b/tools/sra-pileup/sra-pileup.c
@@ -0,0 +1,1834 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "sra-pileup.vers.h"
+
+#include "cmdline_cmn.h"
+#include "reref.h"
+
+#include <kapp/main.h>
+
+#include <klib/out.h>
+#include <klib/printf.h>
+#include <klib/report.h>
+
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+
+#include <insdc/sra.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/report.h> /* ReportSetVDBManager */
+
+#include <sra/sraschema.h>
+#include <align/manager.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#define COL_QUALITY "QUALITY"
+#define COL_REF_ORIENTATION "REF_ORIENTATION"
+#define COL_READ_FILTER "READ_FILTER"
+
+#define OPTION_MINMAPQ "minmapq"
+#define ALIAS_MINMAPQ "q"
+
+#define OPTION_DUPS "duplicates"
+#define ALIAS_DUPS "d"
+
+#define OPTION_MODE "mode"
+#define ALIAS_MODE "m"
+
+#define OPTION_NOQUAL "noqual"
+#define ALIAS_NOQUAL "n"
+
+#define OPTION_NOSKIP "noskip"
+#define ALIAS_NOSKIP "s"
+
+#define OPTION_SHOWID "showid"
+#define ALIAS_SHOWID "i"
+
+#define OPTION_SPOTGRP "spotgroups"
+#define ALIAS_SPOTGRP "p"
+
+#define OPTION_SEQNAME "seqname"
+#define ALIAS_SEQNAME "e"
+
+#define OPTION_REREF "report-ref"
+#define ALIAS_REREF NULL
+
+#define OPTION_REREFEX "report-ref-ext"
+#define ALIAS_REREFEX NULL
+
+enum
+{
+ sra_pileup_samtools = 0,
+ sra_pileup_counters = 1,
+ sra_pileup_detect = 2
+};
+
+static const char * minmapq_usage[] = { "Minimum mapq-value, ",
+ "alignments with lower mapq",
+ "will be ignored (default=0)", NULL };
+
+static const char * dups_usage[] = { "process duplicates ( 0...off/1..on )", NULL };
+
+static const char * mode_usage[] = { "Output-format: 0...samtools, 1...just counters",
+ "(default=0)", NULL };
+
+static const char * noqual_usage[] = { "Omit qualities in output", NULL };
+
+static const char * noskip_usage[] = { "Does not skip reference-regions without alignments", NULL };
+
+static const char * showid_usage[] = { "Shows alignment-id for every base", NULL };
+
+static const char * spotgrp_usage[] = { "divide by spotgroups", NULL };
+
+static const char * seqname_usage[] = { "use original seq-name", NULL };
+
+static const char * reref_usage[] = { "report used references", NULL };
+
+static const char * rerefex_usage[] = { "report used references and coverage", NULL };
+
+
+OptDef MyOptions[] =
+{
+ /*name, alias, hfkt, usage-help, maxcount, needs value, required */
+ { OPTION_MINMAPQ, ALIAS_MINMAPQ, NULL, minmapq_usage, 1, true, false },
+ { OPTION_DUPS, ALIAS_DUPS, NULL, dups_usage, 1, true, false },
+ { OPTION_MODE, ALIAS_MODE, NULL, mode_usage, 1, true, false },
+ { OPTION_NOQUAL, ALIAS_NOQUAL, NULL, noqual_usage, 1, false, false },
+ { OPTION_NOSKIP, ALIAS_NOSKIP, NULL, noskip_usage, 1, false, false },
+ { OPTION_SHOWID, ALIAS_SHOWID, NULL, showid_usage, 1, false, false },
+ { OPTION_SPOTGRP, ALIAS_SPOTGRP, NULL, spotgrp_usage, 1, false, false },
+ { OPTION_SEQNAME, ALIAS_SEQNAME, NULL, seqname_usage, 1, false, false },
+ { OPTION_REREF, ALIAS_REREF, NULL, reref_usage, 1, false, false },
+ { OPTION_REREFEX, ALIAS_REREFEX, NULL, rerefex_usage, 1, false, false }
+};
+
+/* =========================================================================================== */
+
+typedef struct pileup_options
+{
+ common_options cmn;
+ bool process_dups;
+ bool omit_qualities;
+ bool no_skip;
+ bool show_id;
+ bool div_by_spotgrp;
+ bool use_seq_name;
+ bool reref;
+ bool rerefex;
+ uint32_t minmapq;
+ uint32_t output_mode;
+ uint32_t source_table;
+} pileup_options;
+
+
+typedef struct pileup_callback_data
+{
+ const AlignMgr *almgr;
+ pileup_options *options;
+} pileup_callback_data;
+
+
+/* =========================================================================================== */
+
+static rc_t get_str_option( const Args *args, const char *name, const char ** res )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, name, &count );
+ *res = NULL;
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+ }
+ else
+ {
+ if ( count > 0 )
+ {
+ rc = ArgsOptionValue( args, name, 0, res );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t get_uint32_option( const Args *args, const char *name,
+ uint32_t *res, const uint32_t def )
+{
+ const char * s;
+ rc_t rc = get_str_option( args, name, &s );
+ if ( rc == 0 && s != NULL )
+ *res = atoi( s );
+ else
+ *res = def;
+ return rc;
+}
+
+
+static rc_t get_bool_option( const Args *args, const char *name, bool *res, const bool def )
+{
+ uint32_t count;
+ rc_t rc = ArgsOptionCount( args, name, &count );
+ if ( rc == 0 && count > 0 )
+ {
+ *res = true;
+ }
+ else
+ {
+ *res = def;
+ }
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t get_pileup_options( Args * args, pileup_options *opts )
+{
+ rc_t rc = get_common_options( args, &opts->cmn );
+
+ if ( rc == 0 )
+ rc = get_uint32_option( args, OPTION_MINMAPQ, &opts->minmapq, 0 );
+
+ if ( rc == 0 )
+ rc = get_uint32_option( args, OPTION_MODE, &opts->output_mode, sra_pileup_samtools );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_DUPS, &opts->process_dups, false );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_NOQUAL, &opts->omit_qualities, false );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_NOSKIP, &opts->no_skip, false );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_SHOWID, &opts->show_id, false );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_SPOTGRP, &opts->div_by_spotgrp, false );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_SEQNAME, &opts->use_seq_name, false );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_REREF, &opts->reref, false );
+
+ if ( rc == 0 )
+ rc = get_bool_option( args, OPTION_REREFEX, &opts->rerefex, false );
+
+ return rc;
+}
+
+/* GLOBAL VARIABLES */
+struct {
+ KWrtWriter org_writer;
+ void* org_data;
+ KFile* kfile;
+ uint64_t pos;
+} g_out_writer = { NULL };
+
+const char UsageDefaultName[] = "sra-pileup";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+ return KOutMsg ("\n"
+ "Usage:\n"
+ " %s <path> [options]\n"
+ "\n", progname);
+}
+
+
+rc_t CC Usage ( const Args * args )
+{
+ const char * progname = UsageDefaultName;
+ const char * fullpath = UsageDefaultName;
+ rc_t rc;
+
+ if ( args == NULL )
+ rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+ else
+ rc = ArgsProgram ( args, &fullpath, &progname );
+
+ if ( rc )
+ progname = fullpath = UsageDefaultName;
+
+ UsageSummary ( progname );
+ KOutMsg ( "Options:\n" );
+ print_common_helplines();
+ HelpOptionLine ( ALIAS_MINMAPQ, OPTION_MINMAPQ, "min. mapq", minmapq_usage );
+ HelpOptionLine ( ALIAS_DUPS, OPTION_DUPS, "duplicates", dups_usage );
+ HelpOptionLine ( ALIAS_MODE, OPTION_MODE, "output-modes", mode_usage );
+ HelpOptionLine ( ALIAS_SPOTGRP, OPTION_SPOTGRP, "spotgroups-modes", spotgrp_usage );
+ HelpOptionLine ( ALIAS_SEQNAME, OPTION_SEQNAME, "org. seq-name", seqname_usage );
+ HelpOptionLine ( ALIAS_REREF, OPTION_REREF, "report reference", reref_usage );
+ HelpOptionLine ( ALIAS_REREFEX, OPTION_REREFEX, "report reference", rerefex_usage );
+ HelpOptionsStandard ();
+ HelpVersion ( fullpath, KAppVersion() );
+ return rc;
+}
+
+
+/* Version EXTERN
+ * return 4-part version code: 0xMMmmrrrr, where
+ * MM = major release
+ * mm = minor release
+ * rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+ return SRA_PILEUP_VERS;
+}
+
+/***************************************
+ N (0x4E) n (0x6E) <--> 0x0
+ A (0x41) a (0x61) <--> 0x1
+ C (0x43) c (0x63) <--> 0x2
+ M (0x4D) m (0x6D) <--> 0x3
+ G (0x47) g (0x67) <--> 0x4
+ R (0x52) r (0x72) <--> 0x5
+ S (0x53) s (0x73) <--> 0x6
+ V (0x56) v (0x76) <--> 0x7
+ T (0x54) t (0x74) <--> 0x8
+ W (0x57) w (0x77) <--> 0x9
+ Y (0x59) y (0x79) <--> 0xA
+ H (0x48) h (0x68) <--> 0xB
+ K (0x4B) k (0x6B) <--> 0xC
+ D (0x44) d (0x64) <--> 0xD
+ B (0x42) b (0x62) <--> 0xE
+ N (0x4E) n (0x6E) <--> 0xF
+***************************************/
+
+
+char _4na_2_ascii_tab[] =
+{
+/* 0x0 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F */
+ 'N', 'A', 'C', 'M', 'G', 'R', 'S', 'V', 'T', 'W', 'Y', 'H', 'K', 'D', 'B', 'N',
+ 'n', 'a', 'c', 'm', 'g', 'r', 's', 'v', 't', 'w', 'y', 'h', 'k', 'd', 'b', 'n'
+};
+
+
+static char _4na_to_ascii( INSDC_4na_bin c, bool reverse )
+{
+ return _4na_2_ascii_tab[ ( c & 0x0F ) | ( reverse ? 0x10 : 0 ) ];
+}
+
+
+/* =========================================================================================== */
+
+
+typedef struct dyn_string
+{
+ char * data;
+ size_t allocated;
+ size_t data_len;
+} dyn_string;
+
+
+static rc_t allocated_dyn_string ( dyn_string *self, size_t size )
+{
+ rc_t rc = 0;
+ self->data_len = 0;
+ self->data = malloc( size );
+ if ( self->data != NULL )
+ {
+ self->allocated = size;
+ }
+ else
+ {
+ self->allocated = 0;
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ }
+ return rc;
+}
+
+static void free_dyn_string ( dyn_string *self )
+{
+ free( self->data );
+ self->data = NULL;
+ self->allocated = 0;
+ self->data_len = 0;
+}
+
+static void reset_dyn_string( dyn_string *self )
+{
+ self->data_len = 0;
+}
+
+static rc_t expand_dyn_string( dyn_string *self, size_t new_size )
+{
+ rc_t rc = 0;
+ if ( new_size > self->allocated )
+ {
+ self->data = realloc ( self->data, new_size );
+ if ( self->data != NULL )
+ {
+ self->allocated = new_size;
+ }
+ else
+ {
+ self->allocated = 0;
+ self->data_len = 0;
+ rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t add_char_2_dyn_string( dyn_string *self, const char c )
+{
+ /* does nothing if self->data_len + 2 < self->allocated */
+ rc_t rc = expand_dyn_string( self, self->data_len + 2 );
+ if ( rc == 0 )
+ {
+ self->data[ self->data_len++ ] = c;
+ self->data[ self->data_len ] = 0;
+ }
+ return rc;
+}
+
+
+static rc_t add_string_2_dyn_string( dyn_string *self, const char * s )
+{
+ rc_t rc;
+ size_t size = string_size ( s );
+ /* does nothing if self->data_len + size + 1 < self->allocated */
+ rc = expand_dyn_string( self, self->data_len + size + 1 );
+ if ( rc == 0 )
+ {
+ string_copy ( &(self->data[ self->data_len ]), self->allocated, s, size );
+ self->data_len += size;
+ self->data[ self->data_len ] = 0;
+ }
+ return rc;
+}
+
+
+static rc_t print_2_dyn_string( dyn_string * self, const char *fmt, ... )
+{
+ rc_t rc = 0;
+ bool not_enough;
+
+ do
+ {
+ size_t num_writ;
+ va_list args;
+ va_start ( args, fmt );
+ rc = string_vprintf ( &(self->data[ self->data_len ]),
+ self->allocated - ( self->data_len + 1 ),
+ &num_writ,
+ fmt,
+ args );
+ va_end ( args );
+
+ if ( rc == 0 )
+ {
+ self->data_len += num_writ;
+ self->data[ self->data_len ] = 0;
+ }
+ not_enough = ( GetRCState( rc ) == rcInsufficient );
+ if ( not_enough )
+ {
+ rc = expand_dyn_string( self, self->allocated + ( num_writ * 2 ) );
+ }
+ } while ( not_enough && rc == 0 );
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t CC BufferedWriter ( void* self, const char* buffer, size_t bufsize, size_t* num_writ )
+{
+ rc_t rc = 0;
+
+ assert( buffer != NULL );
+ assert( num_writ != NULL );
+
+ do {
+ rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos, buffer, bufsize, num_writ );
+ if ( rc == 0 )
+ {
+ buffer += *num_writ;
+ bufsize -= *num_writ;
+ g_out_writer.pos += *num_writ;
+ }
+ } while ( rc == 0 && bufsize > 0 );
+ return rc;
+}
+
+
+static rc_t set_stdout_to( bool gzip, bool bzip2, const char * filename, size_t bufsize )
+{
+ rc_t rc = 0;
+ if ( gzip && bzip2 )
+ {
+ rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+ }
+ else
+ {
+ KDirectory *dir;
+ rc = KDirectoryNativeDir( &dir );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+ }
+ else
+ {
+ KFile *of;
+ rc = KDirectoryCreateFile ( dir, &of, false, 0664, kcmInit, "%s", filename );
+ if ( rc == 0 )
+ {
+ KFile *buf;
+ if ( gzip )
+ {
+ KFile *gz;
+ rc = KFileMakeGzipForWrite( &gz, of );
+ if ( rc == 0 )
+ {
+ KFileRelease( of );
+ of = gz;
+ }
+ }
+ if ( bzip2 )
+ {
+ KFile *bz;
+ rc = KFileMakeBzip2ForWrite( &bz, of );
+ if ( rc == 0 )
+ {
+ KFileRelease( of );
+ of = bz;
+ }
+ }
+
+ rc = KBufFileMakeWrite( &buf, of, false, bufsize );
+ if ( rc == 0 )
+ {
+ g_out_writer.kfile = buf;
+ g_out_writer.org_writer = KOutWriterGet();
+ g_out_writer.org_data = KOutDataGet();
+ rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+ }
+ }
+ KFileRelease( of );
+ }
+ KDirectoryRelease( dir );
+ }
+ }
+ return rc;
+}
+
+
+static void release_stdout_redirection( void )
+{
+ KFileRelease( g_out_writer.kfile );
+ if( g_out_writer.org_writer != NULL )
+ {
+ KOutHandlerSet( g_out_writer.org_writer, g_out_writer.org_data );
+ }
+ g_out_writer.org_writer = NULL;
+}
+
+
+static rc_t CC write_to_FILE( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+ * num_writ = fwrite ( buffer, 1, bytes, f );
+ if ( * num_writ != bytes )
+ return RC( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+ return 0;
+}
+
+
+/* =========================================================================================== */
+
+
+typedef struct tool_rec tool_rec;
+struct tool_rec
+{
+ /* orientation towards reference ( false...in ref-orientation / true...reverse) */
+ bool reverse;
+ /* ptr to quality... */
+ uint8_t * quality;
+};
+
+
+static rc_t read_base_and_len( struct VCursor const *curs,
+ const char * name,
+ int64_t row_id,
+ const void ** base,
+ uint32_t * len )
+{
+ uint32_t column_idx;
+ rc_t rc = VCursorGetColumnIdx ( curs, &column_idx, name );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VCursorGetColumnIdx() failed" );
+ }
+ else
+ {
+ uint32_t elem_bits, boff, len_intern;
+ const void * ptr;
+ rc = VCursorCellDataDirect ( curs, row_id, column_idx,
+ &elem_bits, &ptr, &boff, &len_intern );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VCursorCellDataDirect() failed" );
+ }
+ else
+ {
+ if ( len != NULL ) *len = len_intern;
+ if ( base != NULL ) *base = ptr;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t CC populate_tooldata( void *obj, const PlacementRecord *placement,
+ struct VCursor const *curs,
+ INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len,
+ void *data )
+{
+ tool_rec * rec = ( tool_rec * ) obj;
+ pileup_callback_data *cb_data = ( pileup_callback_data * )data;
+ rc_t rc = 0;
+
+ rec->quality = NULL;
+ if ( !cb_data->options->process_dups )
+ {
+ const uint8_t * read_filter;
+ uint32_t read_filter_len;
+ rc = read_base_and_len( curs, COL_READ_FILTER, placement->id,
+ (const void **)&read_filter, &read_filter_len );
+ if ( rc == 0 )
+ {
+ if ( ( *read_filter == SRA_READ_FILTER_REJECT )||
+ ( *read_filter == SRA_READ_FILTER_CRITERIA ) )
+ {
+ rc = RC( rcAlign, rcType, rcAccessing, rcId, rcIgnored );
+ }
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ const bool * orientation;
+ rc = read_base_and_len( curs, COL_REF_ORIENTATION, placement->id,
+ (const void **)&orientation, NULL );
+ if ( rc == 0 )
+ {
+ rec->reverse = *orientation;
+ }
+ }
+
+ if ( rc == 0 && !cb_data->options->omit_qualities )
+ {
+ const uint8_t * quality;
+ uint32_t quality_len;
+
+ rc = read_base_and_len( curs, COL_QUALITY, placement->id,
+ (const void **)&quality, &quality_len );
+ if ( rc == 0 )
+ {
+ rec->quality = ( uint8_t * )rec;
+ rec->quality += sizeof ( * rec );
+ memcpy( rec->quality, quality, quality_len );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t CC alloc_size( struct VCursor const *curs, int64_t row_id, size_t * size, void *data )
+{
+ rc_t rc = 0;
+ tool_rec * rec;
+ pileup_callback_data *cb_data = ( pileup_callback_data * )data;
+ *size = ( sizeof *rec );
+
+ if ( !cb_data->options->omit_qualities )
+ {
+ uint32_t q_len;
+ rc = read_base_and_len( curs, COL_QUALITY, row_id, NULL, &q_len );
+ if ( rc == 0 )
+ {
+ *size += q_len;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t walk_ref_position( ReferenceIterator *ref_iter,
+ const PlacementRecord *rec,
+ dyn_string *line,
+ char * qual,
+ pileup_options *options )
+{
+ rc_t rc = 0;
+ INSDC_coord_zero seq_pos;
+ int32_t state = ReferenceIteratorState ( ref_iter, &seq_pos );
+ tool_rec *xrec = ( tool_rec * ) PlacementRecordCast ( rec, placementRecordExtension1 );
+ bool reverse = xrec->reverse;
+
+ if ( !options->omit_qualities )
+ {
+ *qual = xrec->quality[ seq_pos ];
+ }
+
+ if ( ( state & align_iter_invalid ) == align_iter_invalid )
+ {
+ return add_char_2_dyn_string( line, '?' );
+ }
+
+ if ( ( state & align_iter_first ) == align_iter_first )
+ {
+ char s[ 3 ];
+ int32_t c = rec->mapq + 33;
+ if ( c > '~' ) { c = '~'; }
+ if ( c < 33 ) { c = 33; }
+ s[ 0 ] = '^';
+ s[ 1 ] = c;
+ s[ 2 ] = 0;
+ rc = add_string_2_dyn_string( line, s );
+ }
+
+ if ( rc == 0 )
+ {
+ if ( ( state & align_iter_skip ) == align_iter_skip )
+ {
+ rc = add_char_2_dyn_string( line, '*' );
+ if ( !options->omit_qualities )
+ *qual = xrec->quality[ seq_pos + 1 ];
+ }
+ else
+ {
+ if ( ( state & align_iter_match ) == align_iter_match )
+ rc = add_char_2_dyn_string( line, ( reverse ? ',' : '.' ) );
+ else
+ rc = add_char_2_dyn_string( line, _4na_to_ascii( state, reverse ) );
+ }
+ }
+
+ if ( ( state & align_iter_insert ) == align_iter_insert )
+ {
+ const INSDC_4na_bin *bases;
+ uint32_t i;
+ uint32_t n = ReferenceIteratorBasesInserted ( ref_iter, &bases );
+
+ rc = print_2_dyn_string( line, "+%u", n );
+ for ( i = 0; i < n && rc == 0; ++i )
+ {
+ rc = add_char_2_dyn_string( line, _4na_to_ascii( bases[ i ], reverse ) );
+ }
+ }
+
+ if ( ( state & align_iter_delete ) == align_iter_delete )
+ {
+ const INSDC_4na_bin *bases;
+ INSDC_coord_zero ref_pos;
+ uint32_t n = ReferenceIteratorBasesDeleted ( ref_iter, &ref_pos, &bases );
+ if ( bases != NULL )
+ {
+ uint32_t i;
+ rc = print_2_dyn_string( line, "-%u", n );
+ for ( i = 0; i < n && rc == 0; ++i )
+ {
+ rc = add_char_2_dyn_string( line, _4na_to_ascii( bases[ i ], reverse ) );
+ }
+ free( (void *) bases );
+ }
+ }
+
+ if ( ( ( state & align_iter_last ) == align_iter_last )&& ( rc == 0 ) )
+ rc = add_char_2_dyn_string( line, '$' );
+
+ if ( options->show_id )
+ rc = print_2_dyn_string( line, "(%lu:%u-%u/%u)",
+ rec->id, rec->pos + 1, rec->pos + rec->len, seq_pos );
+
+ return rc;
+}
+
+
+static rc_t walk_alignments( ReferenceIterator *ref_iter,
+ dyn_string *line,
+ dyn_string *qualities,
+ pileup_options *options )
+{
+ uint32_t depth = 0;
+ rc_t rc;
+ do
+ {
+ const PlacementRecord *rec;
+ rc = ReferenceIteratorNextPlacement ( ref_iter, &rec );
+ if ( rc == 0 )
+ rc = walk_ref_position( ref_iter, rec, line, &( qualities->data[ depth++ ] ), options );
+ if ( rc == 0 )
+ rc = Quitting();
+ } while ( rc == 0 );
+
+ if ( !options->omit_qualities )
+ {
+ uint32_t i;
+ add_char_2_dyn_string( line, '\t' );
+ for ( i = 0; i < depth; ++i )
+ {
+ add_char_2_dyn_string( line, qualities->data[ i ] + 33 );
+ }
+ }
+
+ if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+ return rc;
+}
+
+
+static rc_t walk_spot_groups( ReferenceIterator *ref_iter,
+ dyn_string *line,
+ dyn_string *qualities,
+ pileup_options *options )
+{
+ rc_t rc;
+ do
+ {
+ rc = ReferenceIteratorNextSpotGroup ( ref_iter, NULL, NULL );
+ if ( rc == 0 )
+ add_char_2_dyn_string( line, '\t' );
+ if ( rc == 0 )
+ rc = walk_alignments( ref_iter, line, qualities, options );
+ } while ( rc == 0 );
+
+ if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+ return rc;
+}
+
+
+static rc_t walk_position( ReferenceIterator *ref_iter,
+ const char * refname,
+ dyn_string *line,
+ dyn_string *qualities,
+ pileup_options *options )
+{
+ INSDC_coord_zero pos;
+ uint32_t depth;
+ INSDC_4na_bin base;
+
+ rc_t rc = ReferenceIteratorPosition ( ref_iter, &pos, &depth, &base );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+ }
+ }
+ else if ( ( depth > 0 )||( options->no_skip ) )
+ {
+ rc = expand_dyn_string( line, ( 5 * depth ) + 100 );
+ if ( rc == 0 )
+ {
+ rc = expand_dyn_string( qualities, depth + 100 );
+ if ( rc == 0 )
+ {
+ char c = _4na_to_ascii( base, false );
+
+ reset_dyn_string( line );
+ rc = print_2_dyn_string( line, "%s\t%u\t%c\t%u", refname, pos + 1, c, depth );
+ if ( rc == 0 )
+ {
+ if ( depth > 0 )
+ {
+ rc = walk_spot_groups( ref_iter, line, qualities, options );
+ }
+
+ if ( rc == 0 )
+ {
+ /* only one KOutMsg() per line... */
+ KOutMsg( "%s\n", line->data );
+ }
+
+ if ( GetRCState( rc ) == rcDone )
+ {
+ rc = 0;
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static rc_t walk_reference_window( ReferenceIterator *ref_iter,
+ const char * refname,
+ dyn_string *line,
+ dyn_string *qualities,
+ pileup_options *options )
+{
+ rc_t rc = 0;
+ while ( rc == 0 )
+ {
+ rc = ReferenceIteratorNextPos ( ref_iter, !options->no_skip );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+ }
+ }
+ else
+ {
+ rc = walk_position( ref_iter, refname, line, qualities, options );
+ }
+ if ( rc == 0 )
+ {
+ rc = Quitting();
+ }
+ }
+ if ( GetRCState( rc ) == rcDone ) rc = 0;
+ return rc;
+}
+
+
+static rc_t walk_reference( ReferenceIterator *ref_iter,
+ const char * refname,
+ pileup_options *options )
+{
+ dyn_string line;
+ rc_t rc = allocated_dyn_string ( &line, 4096 );
+ if ( rc == 0 )
+ {
+ dyn_string qualities;
+ rc = allocated_dyn_string ( &qualities, 4096 );
+ if ( rc == 0 )
+ {
+ while ( rc == 0 )
+ {
+ rc = Quitting ();
+ if ( rc == 0 )
+ {
+ INSDC_coord_zero first_pos;
+ INSDC_coord_len len;
+ rc = ReferenceIteratorNextWindow ( ref_iter, &first_pos, &len );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "ReferenceIteratorNextWindow() failed" );
+ }
+ }
+ else
+ {
+ rc = walk_reference_window( ref_iter, refname, &line, &qualities, options );
+ }
+ }
+ }
+ free_dyn_string ( &qualities );
+ }
+ free_dyn_string ( &line );
+ }
+ if ( GetRCState( rc ) == rcDone ) rc = 0;
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+typedef struct pileup_counters
+{
+ uint32_t matches;
+ uint32_t mismatches[ 4 ];
+ uint32_t inserts;
+ uint32_t deletes;
+ dyn_string ins;
+ dyn_string del;
+} pileup_counters;
+
+
+static void clear_counters( pileup_counters * counters )
+{
+ uint32_t i;
+
+ counters->matches = 0;
+ for ( i = 0; i < 4; ++i )
+ counters->mismatches[ i ] = 0;
+ counters->inserts = 0;
+ counters->deletes = 0;
+ reset_dyn_string( &(counters->ins) );
+ reset_dyn_string( &(counters->del) );
+}
+
+static rc_t prepare_counters( pileup_counters * counters )
+{
+ rc_t rc = allocated_dyn_string ( &(counters->ins), 1024 );
+ if ( rc == 0 )
+ {
+ rc = allocated_dyn_string ( &(counters->del), 1024 );
+ }
+ return rc;
+}
+
+
+static void finish_counters( pileup_counters * counters )
+{
+ free_dyn_string ( &(counters->ins) );
+ free_dyn_string ( &(counters->del) );
+}
+
+
+static void walk_counter_state( ReferenceIterator *ref_iter,
+ pileup_counters * counters )
+{
+ INSDC_coord_zero seq_pos;
+ int32_t state = ReferenceIteratorState ( ref_iter, &seq_pos );
+
+ if ( ( state & align_iter_invalid ) == align_iter_invalid )
+ {
+ return;
+ }
+
+ if ( ( state & align_iter_skip ) != align_iter_skip )
+ {
+ if ( ( state & align_iter_match ) == align_iter_match )
+ {
+ (counters->matches)++;
+ }
+ else
+ {
+ char c = _4na_to_ascii( state, false );
+ switch( c )
+ {
+ case 'A' : ( counters->mismatches[ 0 ] )++; break;
+ case 'C' : ( counters->mismatches[ 1 ] )++; break;
+ case 'G' : ( counters->mismatches[ 2 ] )++; break;
+ case 'T' : ( counters->mismatches[ 3 ] )++; break;
+ }
+ }
+ }
+
+ if ( ( state & align_iter_insert ) == align_iter_insert )
+ {
+ const INSDC_4na_bin *bases;
+ uint32_t i, n = ReferenceIteratorBasesInserted ( ref_iter, &bases );
+ (counters->inserts) += n;
+ for ( i = 0; i < n; ++i )
+ {
+ add_char_2_dyn_string( &(counters->ins), _4na_to_ascii( bases[ i ], false ) );
+ }
+ }
+
+ if ( ( state & align_iter_delete ) == align_iter_delete )
+ {
+ const INSDC_4na_bin *bases;
+ INSDC_coord_zero ref_pos;
+ uint32_t n = ReferenceIteratorBasesDeleted ( ref_iter, &ref_pos, &bases );
+ if ( bases != NULL )
+ {
+ uint32_t i;
+ (counters->deletes) += n;
+ for ( i = 0; i < n; ++i )
+ {
+ add_char_2_dyn_string( &(counters->del), _4na_to_ascii( bases[ i ], false ) );
+ }
+ free( (void *) bases );
+ }
+ }
+}
+
+
+static void print_counter_line( const char * refname,
+ INSDC_coord_zero pos,
+ INSDC_4na_bin base,
+ uint32_t depth,
+ pileup_counters * counters )
+{
+ char c = _4na_to_ascii( base, false );
+ KOutMsg( "%s\t%u\t%c\t%u\t", refname, pos + 1, c, depth );
+ if ( counters->matches > 0 )
+ KOutMsg( "%u=", counters->matches );
+ if ( counters->mismatches[ 0 ] > 0 )
+ KOutMsg( "%uA", counters->mismatches[ 0 ] );
+ if ( counters->mismatches[ 1 ] > 0 )
+ KOutMsg( "%uC", counters->mismatches[ 1 ] );
+ if ( counters->mismatches[ 2 ] > 0 )
+ KOutMsg( "%uG", counters->mismatches[ 2 ] );
+ if ( counters->mismatches[ 3 ] > 0 )
+ KOutMsg( "%uT", counters->mismatches[ 3 ] );
+ if ( counters->inserts > 0 )
+ {
+ KOutMsg( "%uI%s", counters->inserts, counters->ins.data );
+ }
+ if ( counters->deletes > 0 )
+ {
+ KOutMsg( "%uD%s", counters->deletes, counters->del.data );
+ }
+ KOutMsg( "\n" );
+}
+
+static rc_t walk_counter_position( ReferenceIterator *ref_iter,
+ const char * refname,
+ pileup_counters * counters )
+{
+ INSDC_coord_zero pos;
+ uint32_t depth;
+ INSDC_4na_bin base;
+
+ rc_t rc = ReferenceIteratorPosition ( ref_iter, &pos, &depth, &base );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+ }
+ }
+ else if ( depth > 0 )
+ {
+ const PlacementRecord *rec;
+ rc_t rc1 = ReferenceIteratorNextPlacement ( ref_iter, &rec );
+ clear_counters( counters );
+ while ( rc1 == 0 )
+ {
+ walk_counter_state( ref_iter, counters );
+ rc1 = ReferenceIteratorNextPlacement ( ref_iter, &rec );
+ }
+
+ if ( GetRCState( rc1 ) == rcDone ) { rc = 0; } else { rc = rc1; }
+ if ( rc == 0 )
+ {
+ print_counter_line( refname, pos, base, depth, counters );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t walk_just_counters( ReferenceIterator *ref_iter,
+ const char * refname,
+ bool skip_empty )
+{
+ pileup_counters counters;
+ rc_t rc = prepare_counters( &counters );
+ if ( rc == 0 )
+ {
+ while ( rc == 0 )
+ {
+ rc = Quitting ();
+ if ( rc == 0 )
+ {
+ /* this is the 2nd level of walking the reference-iterator:
+ visiting each position (that has alignments) on this reference */
+ rc = ReferenceIteratorNextPos ( ref_iter, skip_empty );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+ }
+ }
+ else
+ {
+ rc = walk_counter_position( ref_iter, refname, &counters );
+ if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+ }
+ }
+ }
+ finish_counters( &counters );
+ }
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+enum { fsm_INIT = 0, fsm_DATA, fsm_GAP1, fsm_GAP2 };
+
+typedef struct fsm_context fsm_context;
+struct fsm_context
+{
+ uint32_t state;
+ const char * refname;
+ INSDC_coord_zero start;
+ INSDC_coord_zero end;
+};
+
+
+static void fsm_initialize( fsm_context * ctx, const char * refname )
+{
+ ctx->state = fsm_INIT;
+ ctx->refname = refname;
+ ctx->start = 0;
+ ctx->end = 0;
+}
+
+static void fsm_finalize( fsm_context * ctx, INSDC_coord_zero pos )
+{
+ switch( ctx->state )
+ {
+ case fsm_DATA : ;
+ case fsm_GAP1 : KOutMsg( "%s:%u-%u\n", ctx->refname, ctx->start, pos ); break;
+ }
+}
+
+/* transition into state 'fsm_DATA' */
+static void fsm_data( fsm_context * ctx, INSDC_coord_zero pos )
+{
+ switch( ctx->state )
+ {
+ case fsm_INIT : ;
+ case fsm_GAP2 : ctx->start = pos; break;
+ }
+ ctx->state = fsm_DATA;
+}
+
+/* transition into state 'fsm_GAP1' */
+static void fsm_gap1( fsm_context * ctx, INSDC_coord_zero pos )
+{
+ if ( ctx->state == fsm_DATA )
+ {
+ ctx->end = pos;
+ }
+ ctx->state = fsm_GAP1;
+}
+
+/* transition into state 'fsm_GAP2' */
+static void fsm_gap2( fsm_context * ctx )
+{
+ if ( ctx->state == fsm_GAP1 )
+ {
+ KOutMsg( "%s:%u-%u\n", ctx->refname, ctx->start, ctx->end );
+ }
+ ctx->state = fsm_GAP2;
+}
+
+
+static void fsm_run( fsm_context * ctx, uint32_t depth, INSDC_coord_zero pos, uint32_t maxgap )
+{
+ switch( ctx->state )
+ {
+ case fsm_INIT : if ( depth > 0 )
+ fsm_data( ctx, pos );
+ else
+ fsm_gap2( ctx );
+ break;
+
+ case fsm_DATA : if ( depth == 0 )
+ fsm_gap1( ctx, pos );
+ break;
+
+ case fsm_GAP1 : if ( ( pos - ctx->end ) > maxgap )
+ fsm_gap2( ctx );
+ if ( depth > 0 )
+ fsm_data( ctx, pos );
+ break;
+
+ case fsm_GAP2 : if ( depth > 0 )
+ fsm_data( ctx, pos );
+ break;
+ }
+
+}
+
+#if 0
+static void fsm_show( fsm_context * ctx, INSDC_coord_zero pos )
+{
+ switch( ctx->state )
+ {
+ case fsm_INIT : KOutMsg( "[%u].INIT\n", pos ); break;
+ case fsm_DATA : KOutMsg( "[%u].DATA\n", pos ); break;
+ case fsm_GAP1 : KOutMsg( "[%u].GAP1\n", pos ); break;
+ case fsm_GAP2 : KOutMsg( "[%u].GAP2\n", pos ); break;
+ }
+}
+#endif
+
+static rc_t walk_and_detect( ReferenceIterator *ref_iter,
+ const char * refname, uint32_t maxgap )
+{
+ rc_t rc = 0;
+ INSDC_coord_zero pos;
+
+ /* here we have a little FSM with these states: INIT, DATA, GAP1, GAP2 */
+ fsm_context ctx;
+ fsm_initialize( &ctx, refname );
+ while ( rc == 0 )
+ {
+ rc = Quitting ();
+ if ( rc == 0 )
+ {
+ /* this is the 2nd level of walking the reference-iterator:
+ visiting each position (that has alignments) on this reference */
+ rc = ReferenceIteratorNextPos ( ref_iter, true );
+ if ( rc != 0 )
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+ }
+ }
+ else
+ {
+ uint32_t depth;
+ rc = ReferenceIteratorPosition ( ref_iter, &pos, &depth, NULL );
+ if ( rc == 0 )
+ {
+ fsm_run( &ctx, depth, pos, maxgap );
+ /* fsm_show( &ctx, pos ); */
+ }
+ if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+ }
+ }
+ }
+ fsm_finalize( &ctx, pos );
+ return 0;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t walk_ref_iter( ReferenceIterator *ref_iter, pileup_options *options )
+{
+ rc_t rc = 0;
+ while( rc == 0 )
+ {
+ /* this is the 1st level of walking the reference-iterator:
+ visiting each (requested) reference */
+ struct ReferenceObj const * refobj;
+
+ rc = ReferenceIteratorNextReference( ref_iter, NULL, NULL, &refobj );
+ if ( rc == 0 )
+ {
+ if ( refobj != NULL )
+ {
+ const char * refname = NULL;
+ if ( options->use_seq_name )
+ rc = ReferenceObj_Name( refobj, &refname );
+ else
+ rc = ReferenceObj_SeqId( refobj, &refname );
+ if ( rc == 0 )
+ {
+ switch( options->output_mode )
+ {
+ case sra_pileup_samtools : rc = walk_reference( ref_iter, refname, options );
+ break;
+
+ case sra_pileup_counters : rc = walk_just_counters( ref_iter, refname, true );
+ break;
+
+ case sra_pileup_detect : rc = walk_and_detect( ref_iter, refname, 200 );
+ break;
+
+ default : KOutMsg( "unknown output-mode '%u'\n", options->output_mode );
+ break;
+
+ }
+ if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+ }
+ else
+ {
+ if ( options->use_seq_name )
+ {
+ LOGERR( klogInt, rc, "ReferenceObj_Name() failed" );
+ }
+ else
+ {
+ LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+ }
+ }
+ }
+ }
+ else
+ {
+ if ( GetRCState( rc ) != rcDone )
+ {
+ LOGERR( klogInt, rc, "ReferenceIteratorNextReference() failed" );
+ }
+ }
+ }
+ if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+ if ( GetRCState( rc ) == rcCanceled ) { rc = 0; }
+ /* RC ( rcExe, rcProcess, rcExecuting, rcProcess, rcCanceled ); */
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t add_quality_and_orientation( const VTable *tbl, const VCursor ** cursor, bool omit_qualities )
+{
+ rc_t rc = VTableCreateCursorRead ( tbl, cursor );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VTableCreateCursorRead() failed" );
+ }
+
+ if ( rc == 0 && !omit_qualities )
+ {
+ uint32_t quality_idx;
+ rc = VCursorAddColumn ( *cursor, &quality_idx, COL_QUALITY );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VCursorAddColumn(QUALITY) failed" );
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ uint32_t ref_orientation_idx;
+ rc = VCursorAddColumn ( *cursor, &ref_orientation_idx, COL_REF_ORIENTATION );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VCursorAddColumn(REF_ORIENTATION) failed" );
+ }
+ }
+
+ if ( rc == 0 )
+ {
+ uint32_t read_filter_idx;
+ rc = VCursorAddColumn ( *cursor, &read_filter_idx, COL_READ_FILTER );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VCursorAddColumn(READ_FILTER) failed" );
+ }
+ }
+ return rc;
+}
+
+
+static rc_t prepare_prim_cursor( const VDatabase *db, const VCursor ** cursor, bool omit_qualities )
+{
+ const VTable *tbl;
+ rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "PRIMARY_ALIGNMENT" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VDatabaseOpenTableRead(PRIMARY_ALIGNMENT) failed" );
+ }
+ else
+ {
+ rc = add_quality_and_orientation( tbl, cursor, omit_qualities );
+ VTableRelease ( tbl );
+ }
+ return rc;
+}
+
+
+static rc_t prepare_sec_cursor( const VDatabase *db, const VCursor ** cursor, bool omit_qualities )
+{
+ const VTable *tbl;
+ rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "SECONDARY_ALIGNMENT" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VDatabaseOpenTableRead(SECONDARY_ALIGNMENT) failed" );
+ }
+ else
+ {
+ rc = add_quality_and_orientation( tbl, cursor, omit_qualities );
+ VTableRelease ( tbl );
+ }
+ return rc;
+}
+
+
+static rc_t prepare_evidence_cursor( const VDatabase *db, const VCursor ** cursor, bool omit_qualities )
+{
+ const VTable *tbl;
+ rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "EVIDENCE_ALIGNMENT" );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VDatabaseOpenTableRead(EVIDENCE) failed" );
+ }
+ else
+ {
+ rc = add_quality_and_orientation( tbl, cursor, omit_qualities );
+ VTableRelease ( tbl );
+ }
+ return rc;
+}
+
+#if 0
+static void show_placement_params( const char * prefix, const ReferenceObj *refobj,
+ uint32_t start, uint32_t end )
+{
+ const char * name;
+ rc_t rc = ReferenceObj_SeqId( refobj, &name );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+ }
+ else
+ {
+ KOutMsg( "prepare %s: <%s> %u..%u\n", prefix, name, start, end ) ;
+ }
+}
+#endif
+
+static rc_t CC prepare_section_cb( prepare_ctx * ctx, uint32_t start, uint32_t end )
+{
+ rc_t rc = 0;
+ INSDC_coord_len len;
+ if ( ctx->db == NULL || ctx->refobj == NULL )
+ {
+ rc = SILENT_RC ( rcApp, rcNoTarg, rcOpening, rcSelf, rcInvalid );
+ /* it is opened in prepare_db_table even if ctx->db == NULL */
+ PLOGERR(klogInt, (klogInt, rc, "failed to process $(path)",
+ "path=%s", ctx->path == NULL ? "input argument" : ctx->path));
+ ReportSilence();
+ }
+ else
+ {
+ rc = ReferenceObj_SeqLength( ctx->refobj, &len );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "ReferenceObj_SeqLength() failed" );
+ }
+ else
+ {
+ rc_t rc1 = 0, rc2 = 0, rc3 = 0;
+
+ if ( start == 0 ) start = 1;
+ if ( ( end == 0 )||( end > len + 1 ) )
+ {
+ end = ( len - start ) + 1;
+ }
+ /* depending on ctx->select prepare primary, secondary or both... */
+ if ( ctx->use_primary_alignments )
+ {
+ const VCursor * prim_align_cursor = NULL;
+ rc1 = prepare_prim_cursor( ctx->db, &prim_align_cursor, ctx->omit_qualities );
+ if ( rc1 == 0 )
+ {
+ /* show_placement_params( "primary", ctx->refobj, start, end ); */
+ rc1 = ReferenceIteratorAddPlacements ( ctx->ref_iter, /* the outer ref-iter */
+ ctx->refobj, /* the ref-obj for this chromosome */
+ start - 1, /* start ( zero-based ) */
+ end - start + 1, /* length */
+ NULL, /* ref-cursor */
+ prim_align_cursor, /* align-cursor */
+ primary_align_ids, /* which id's */
+ ctx->spot_group ); /* what read-group */
+ if ( rc1 != 0 )
+ {
+ LOGERR( klogInt, rc1, "ReferenceIteratorAddPlacements(prim) failed" );
+ }
+ VCursorRelease( prim_align_cursor );
+ }
+ }
+ if ( ctx->use_secondary_alignments )
+ {
+ const VCursor * sec_align_cursor = NULL;
+ rc2 = prepare_sec_cursor( ctx->db, &sec_align_cursor, ctx->omit_qualities );
+ if ( rc2 == 0 )
+ {
+ /* show_placement_params( "secondary", ctx->refobj, start, end ); */
+ rc2 = ReferenceIteratorAddPlacements ( ctx->ref_iter, /* the outer ref-iter */
+ ctx->refobj, /* the ref-obj for this chromosome */
+ start - 1, /* start ( zero-based ) */
+ end - start + 1, /* length */
+ NULL, /* ref-cursor */
+ sec_align_cursor, /* align-cursor */
+ secondary_align_ids, /* which id's */
+ ctx->spot_group ); /* what read-group */
+ if ( rc2 != 0 )
+ {
+ LOGERR( klogInt, rc2, "ReferenceIteratorAddPlacements(sec) failed" );
+ }
+ VCursorRelease( sec_align_cursor );
+ }
+ }
+
+ if ( ctx->use_evidence_alignments )
+ {
+ const VCursor * ev_align_cursor = NULL;
+ rc3 = prepare_evidence_cursor( ctx->db, &ev_align_cursor, ctx->omit_qualities );
+ if ( rc3 == 0 )
+ {
+ /* show_placement_params( "evidende", ctx->refobj, start, end ); */
+ rc3 = ReferenceIteratorAddPlacements ( ctx->ref_iter, /* the outer ref-iter */
+ ctx->refobj, /* the ref-obj for this chromosome */
+ start - 1, /* start ( zero-based ) */
+ end - start + 1, /* length */
+ NULL, /* ref-cursor */
+ ev_align_cursor, /* align-cursor */
+ evidence_align_ids, /* which id's */
+ ctx->spot_group ); /* what read-group */
+ if ( rc3 != 0 )
+ {
+ LOGERR( klogInt, rc3, "ReferenceIteratorAddPlacements(evidence) failed" );
+ }
+ VCursorRelease( ev_align_cursor );
+ }
+ }
+
+ if ( rc1 == SILENT_RC( rcAlign, rcType, rcAccessing, rcRow, rcNotFound ) )
+ { /* from allocate_populate_rec */
+ rc = rc1;
+ }
+ else if ( rc1 == 0 )
+ rc = 0;
+ else if ( rc2 == 0 )
+ rc = 0;
+ else if ( rc3 == 0 )
+ rc = 0;
+ else
+ rc = rc1;
+ }
+ }
+ return rc;
+}
+
+
+typedef struct foreach_arg_ctx
+{
+ pileup_options *options;
+ const VDBManager *vdb_mgr;
+ VSchema *vdb_schema;
+ ReferenceIterator *ref_iter;
+ BSTree *ranges;
+} foreach_arg_ctx;
+
+
+/* called for each source-file/accession */
+static rc_t CC on_argument( const char * path, const char * spot_group, void * data )
+{
+ rc_t rc = 0;
+ foreach_arg_ctx * ctx = ( foreach_arg_ctx * )data;
+ prepare_ctx prep;
+
+ prep.omit_qualities = ctx->options->omit_qualities;
+ prep.use_primary_alignments = ( ( ctx->options->cmn.tab_select & primary_ats ) == primary_ats );
+ prep.use_secondary_alignments = ( ( ctx->options->cmn.tab_select & secondary_ats ) == secondary_ats );
+ prep.use_evidence_alignments = ( ( ctx->options->cmn.tab_select & evidence_ats ) == evidence_ats );
+ prep.ref_iter = ctx->ref_iter;
+ prep.spot_group = spot_group;
+ prep.on_section = prepare_section_cb;
+ prep.data = NULL;
+ prep.path = path;
+
+ rc = prepare_ref_iter( &prep, ctx->vdb_mgr, ctx->vdb_schema, path, ctx->ranges );
+ if ( rc == 0 && prep.db == NULL )
+ {
+ rc = RC ( rcApp, rcNoTarg, rcOpening, rcSelf, rcInvalid );
+ LOGERR( klogInt, rc, "unsupported source" );
+ }
+ return rc;
+}
+
+
+static rc_t pileup_main( Args * args, pileup_options *options )
+{
+ foreach_arg_ctx arg_ctx;
+ pileup_callback_data cb_data;
+ KDirectory *dir;
+
+ /* (1) make the align-manager ( necessary to make a ReferenceIterator... ) */
+ rc_t rc = AlignMgrMakeRead ( &cb_data.almgr );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "AlignMgrMake() failed" );
+ }
+
+ cb_data.options = options;
+ arg_ctx.options = options;
+ arg_ctx.vdb_schema = NULL;
+
+ /* (2) make the reference-iterator */
+ if ( rc == 0 )
+ {
+ PlacementRecordExtendFuncs cb_block;
+
+ cb_block.data = &cb_data;
+ cb_block.destroy = NULL;
+ cb_block.populate = populate_tooldata;
+ cb_block.alloc_size = alloc_size;
+ cb_block.fixed_size = 0;
+
+ rc = AlignMgrMakeReferenceIterator ( cb_data.almgr, &arg_ctx.ref_iter, &cb_block, options->minmapq );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "AlignMgrMakeReferenceIterator() failed" );
+ }
+ }
+
+ /* (3) make a KDirectory ( necessary to make a vdb-manager ) */
+ if ( rc == 0 )
+ {
+ rc = KDirectoryNativeDir( &dir );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+ }
+ }
+
+ /* (4) make a vdb-manager */
+ if ( rc == 0 )
+ {
+ rc = VDBManagerMakeRead ( &arg_ctx.vdb_mgr, dir );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+ }
+ else {
+ ReportSetVDBManager(arg_ctx.vdb_mgr);
+ }
+ }
+
+
+ /* (5) make a vdb-schema */
+ if ( rc == 0 )
+ {
+ rc = VDBManagerMakeSRASchema( arg_ctx.vdb_mgr, &arg_ctx.vdb_schema );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VDBManagerMakeSRASchema() failed" );
+ }
+ else if ( options->cmn.schema_file != NULL )
+ {
+ rc = VSchemaParseFile( arg_ctx.vdb_schema, options->cmn.schema_file );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "VSchemaParseFile() failed" );
+ }
+ }
+ }
+
+ /* (5) loop through the given input-filenames and load the ref-iter with it's input */
+ if ( rc == 0 )
+ {
+ BSTree regions;
+ rc = init_ref_regions( ®ions, args ); /* cmdline_cmn.c */
+ if ( rc == 0 )
+ {
+ bool empty = false;
+ check_ref_regions( ®ions ); /* sanitize input... */
+ arg_ctx.ranges = ®ions;
+ rc = foreach_argument( args, dir, options->div_by_spotgrp, &empty, on_argument, &arg_ctx ); /* cmdline_cmn.c */
+ if ( empty )
+ {
+ Usage ( args );
+ }
+ free_ref_regions( ®ions );
+ }
+ }
+
+ /* (6) walk the "loaded" ref-iterator ===> perform the pileup */
+ if ( rc == 0 )
+ {
+ /* ============================================== */
+ rc = walk_ref_iter( arg_ctx.ref_iter, options );
+ /* ============================================== */
+ }
+
+ if ( arg_ctx.vdb_mgr != NULL ) VDBManagerRelease( arg_ctx.vdb_mgr );
+ if ( arg_ctx.vdb_schema != NULL ) VSchemaRelease( arg_ctx.vdb_schema );
+ if ( dir != NULL ) KDirectoryRelease( dir );
+ if ( arg_ctx.ref_iter != NULL ) ReferenceIteratorRelease( arg_ctx.ref_iter );
+ if ( cb_data.almgr != NULL ) AlignMgrRelease ( cb_data.almgr );
+ return rc;
+}
+
+
+/* =========================================================================================== */
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+ rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+ ReportBuildDate( __DATE__ );
+ if ( rc != 0 )
+ {
+ LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+ }
+ else
+ {
+ Args * args;
+
+ KLogHandlerSetStdErr();
+ rc = ArgsMakeAndHandle( &args, argc, argv, 2,
+ MyOptions, sizeof MyOptions / sizeof MyOptions [ 0 ],
+ CommonOptions_ptr(), CommonOptions_count() );
+ if ( rc == 0 )
+ {
+ rc = parse_inf_file( args ); /* cmdline_cmn.h */
+ if ( rc == 0 )
+ {
+ pileup_options options;
+ rc = get_pileup_options( args, &options );
+ if ( rc == 0 )
+ {
+ if ( options.cmn.output_file != NULL )
+ {
+ rc = set_stdout_to( options.cmn.gzip_output,
+ options.cmn.bzip_output,
+ options.cmn.output_file,
+ 32 * 1024 );
+ }
+
+ if ( rc == 0 )
+ {
+ if ( options.reref || options.rerefex )
+ {
+ rc = report_on_reference( args, options.rerefex ); /* reref.c */
+ }
+ else
+ {
+ /* ============================== */
+ rc = pileup_main( args, &options );
+ /* ============================== */
+ }
+ }
+
+ if ( options.cmn.output_file != NULL )
+ release_stdout_redirection();
+ }
+ }
+ ArgsWhack( args );
+ }
+ }
+
+ {
+ /* Report execution environment if necessary */
+ rc_t rc2 = ReportFinalize( rc );
+ if ( rc == 0 )
+ rc = rc2;
+ }
+ return rc;
+}
diff --git a/tools/sra-pileup/sra-pileup.vers b/tools/sra-pileup/sra-pileup.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/sra-pileup/sra-pileup.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/sra-sort/Makefile b/tools/sra-sort/Makefile
new file mode 100644
index 0000000..8125979
--- /dev/null
+++ b/tools/sra-sort/Makefile
@@ -0,0 +1,141 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/sra-sort
+
+include $(TOP)/build/Makefile.env
+include $(SRCDIR)/Makefile.$(COMP)
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+
+ifneq (win,$(OS))
+EXT_TOOLS += sra-sort
+endif
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# sra-sort
+#
+SRA_SORT_SRC = \
+ caps \
+ mem \
+ membank \
+ paged-membank \
+ paged-mmapbank \
+ except \
+ idx-mapping \
+ map-file \
+ col-pair \
+ row-set \
+ simple-row-set \
+ mapping-row-set \
+ sorting-row-set \
+ meta-pair \
+ dir-pair \
+ tbl-pair \
+ db-pair \
+ glob-poslen \
+ poslen-col-pair \
+ ref-alignid-col \
+ buff-writer \
+ id-mapper-col \
+ capture-first-half-aligned \
+ csra-tbl \
+ csra-pair \
+ run \
+ sra-sort \
+ xcheck-ref-align
+
+SRA_SORT_OBJ = \
+ $(addsuffix .$(OBJX),$(SRA_SORT_SRC))
+
+SRA_SORT_LIB = \
+ -lkapp \
+ $(UPDATE_SCHEMA_LIBS) \
+ -dalign-reader \
+ -dksrch \
+ -ssraschema \
+ -lwvdb \
+ -lwkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lkproc \
+ -lklib \
+ -lm
+
+$(BINDIR)/sra-sort: $(SRA_SORT_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRA_SORT_LIB)
diff --git a/tools/sra-sort/Makefile.cc b/tools/sra-sort/Makefile.cc
new file mode 100644
index 0000000..ca33e13
--- /dev/null
+++ b/tools/sra-sort/Makefile.cc
@@ -0,0 +1,24 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
diff --git a/tools/sra-sort/Makefile.clang b/tools/sra-sort/Makefile.clang
new file mode 100644
index 0000000..bad5e3a
--- /dev/null
+++ b/tools/sra-sort/Makefile.clang
@@ -0,0 +1,27 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+PED = -std=gnu99 -fgnu89-inline
+
diff --git a/tools/sra-sort/Makefile.gcc b/tools/sra-sort/Makefile.gcc
new file mode 100644
index 0000000..02182c4
--- /dev/null
+++ b/tools/sra-sort/Makefile.gcc
@@ -0,0 +1,27 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+PED = $(shell $(SRCDIR)/gcc-ped.sh -std=gnu99 -fgnu89-inline)
+
diff --git a/tools/sra-sort/Makefile.vc++ b/tools/sra-sort/Makefile.vc++
new file mode 100644
index 0000000..ca33e13
--- /dev/null
+++ b/tools/sra-sort/Makefile.vc++
@@ -0,0 +1,24 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
diff --git a/tools/sra-sort/buff-writer.c b/tools/sra-sort/buff-writer.c
new file mode 100644
index 0000000..22af68a
--- /dev/null
+++ b/tools/sra-sort/buff-writer.c
@@ -0,0 +1,785 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct BufferedPairColWriter BufferedPairColWriter;
+#define COLWRITER_IMPL BufferedPairColWriter
+
+#include "buff-writer.h"
+#include "row-set.h"
+#include "idx-mapping.h"
+#include "map-file.h"
+#include "csra-tbl.h"
+#include "col-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/sort.h>
+#include <klib/rc.h>
+#include <kdb/btree.h>
+
+#include <string.h>
+#include <bitstr.h>
+
+FILE_ENTRY ( buff-writer );
+
+
+/*--------------------------------------------------------------------------
+ * BufferedPairColWriter
+ */
+struct BufferedPairColWriter
+{
+ ColumnWriter dad;
+
+ cSRATblPair *tbl; /* borrowed reference to table */
+
+ ColumnWriter *cw; /* where to write data */
+
+ MemBank *mbank; /* paged memory bank */
+#define MAX_VOCAB_SIZE 32*1024
+ /*** introducing VOCABULARY value->id->vocab_value ***/
+ KBTree *vocab_key2id;
+ const void *vocab_id2val[MAX_VOCAB_SIZE];
+ uint32_t vocab_cnt;
+ /******************************************************/
+ MapFile *idx; /* optional row-id mapping index */
+
+ union
+ {
+ /* for mapping writers */
+ struct
+ {
+ union
+ {
+ /* "immediate" data - size <= 64 bits and row_len == 1 */
+ uint64_t imm;
+
+ /* "indirect" data - stored in "mbank" */
+ void *ptr;
+
+ } val;
+ int64_t new_id;
+ } *data;
+
+ /* standard ( old_id, new_id ) mapping pair */
+ IdxMapping *map;
+
+ /* for non-mapping writers */
+ int64_t *ids;
+
+ } u;
+
+ /* for non-mapping writers - new=>old ord */
+ uint32_t *ord;
+
+ size_t num_items; /* total number of items */
+ size_t cur_item; /* index of currently available item */
+ size_t num_immed; /* number of immediate items written */
+
+ uint32_t elem_bits; /* number of bits of each element */
+ uint32_t min_row_len;
+ uint32_t max_row_len;
+};
+
+static
+void BufferedPairColWriterWhack ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ MapFileRelease ( self -> idx, ctx );
+ MemBankRelease ( self -> mbank, ctx );
+ if(self -> vocab_key2id) KBTreeRelease ( self -> vocab_key2id );
+ ColumnWriterRelease ( self -> cw, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+const char *BufferedPairColWriterFullSpec ( const BufferedPairColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ return ColumnWriterFullSpec ( self -> cw, ctx );
+}
+
+static
+void BufferedPairColWriterPreCopy ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ ColumnWriterPreCopy ( self -> cw, ctx );
+}
+
+static
+void BufferedPairColWriterPostCopy ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> mbank != NULL )
+ {
+ MemBankRelease ( self -> mbank, ctx );
+ self -> mbank = NULL;
+ }
+ if ( self -> vocab_key2id != NULL )
+ {
+ KBTreeRelease ( self -> vocab_key2id );
+ self -> vocab_key2id = 0;
+ self -> vocab_cnt = 0;
+ }
+
+ ColumnWriterPostCopy ( self -> cw, ctx );
+}
+
+static
+void BufferedPairColWriterMapValues ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ size_t i;
+ int64_t id;
+ bool assign_ids = ( bool ) self -> dad . align [ 0 ];
+
+ if ( self -> elem_bits != 64 )
+ {
+ rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+ INTERNAL_ERROR ( rc, "column '%s' does not have 64-bit elements and cannot be mapped",
+ ColumnWriterFullSpec ( self -> cw, ctx ) );
+ return;
+ }
+
+ if ( self -> num_immed != self -> num_items )
+ {
+#if DISALLOW_VARIABLE_ROW_LENGTH_MAPPING
+ rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+ INTERNAL_ERROR ( rc, "column '%s' does not have fixed row-length of 1 and cannot be mapped",
+ ColumnWriterFullSpec ( self -> cw, ctx ) );
+#else
+ const uint32_t *base;
+ /* detect case when we have ids that were written
+ sparsely ( as NULLs ) rather than densely ( zeros for NULL ). */
+ if ( self -> min_row_len == 0 && self -> max_row_len == 1 )
+ {
+ for ( i = 0; i < self -> num_items; ++ i )
+ {
+ base = self -> u . data [ i ] . val . ptr;
+ if ( base != NULL )
+ memcpy ( & self -> u . data [ i ] . val . imm, & base [ 1 ], 8 );
+ }
+
+ MemBankRelease ( self -> mbank, ctx );
+ self -> mbank = NULL;
+ self -> num_immed = self -> num_items;
+ self -> min_row_len = 1;
+
+ }
+ else
+ {
+ STATUS ( 3, "randomly mapping old=>new values" );
+ for ( i = 0; i < self -> num_immed; ++ i )
+ {
+ id = self -> u . data [ i ] . val . imm;
+ if ( id != 0 )
+ {
+ uint32_t *base;
+ ON_FAIL ( base = MemBankAlloc ( self -> mbank, ctx, sizeof id + sizeof * base, false ) )
+ return;
+ ON_FAIL ( id = MapFileMapSingleOldToNew ( self -> idx, ctx, id, assign_ids ) )
+ return;
+ memcpy ( & base [ 1 ], & id, sizeof id );
+ base [ 0 ] = 1;
+ self -> u . data [ i ] . val . ptr = base;
+ }
+ }
+ for ( self -> num_immed = 0; i < self -> num_items; ++ i )
+ {
+ base = self -> u . data [ i ] . val . ptr;
+ if ( base != NULL )
+ {
+ uint32_t j, row_len = base [ 0 ];
+ int64_t *ids = ( int64_t* ) & base [ 1 ];
+ for ( j = 0; j < row_len; ++ j )
+ {
+ id = ids [ j ];
+ if ( id != 0 )
+ {
+ ON_FAIL ( ids [ j ] = MapFileMapSingleOldToNew ( self -> idx, ctx, id, assign_ids ) )
+ return;
+ }
+ }
+ }
+ }
+ return;
+ }
+#endif
+ }
+
+ STATUS ( 3, "sorting %,u ( data, new_id ) map entries on immediate value", self -> num_items );
+#if USE_OLD_KSORT
+ ksort ( self -> u . map, self -> num_items, sizeof self -> u . map [ 0 ], IdxMappingCmpOld, ( void* ) ctx );
+#else
+ IdxMappingSortOld ( self -> u . map, ctx, self -> num_items );
+#endif
+
+ STATUS ( 3, "mapping old=>new values" );
+ for ( i = 0; i < self -> num_items; ++ i )
+ {
+ id = self -> u . map [ i ] . old_id;
+ if ( id != 0 )
+ {
+ ON_FAIL ( self -> u . map [ i ] . old_id = MapFileMapSingleOldToNew ( self -> idx, ctx, id, assign_ids ) )
+ break;
+ }
+ }
+}
+
+static
+void BufferedPairColWriterWriteMapped ( BufferedPairColWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ uint32_t *base;
+ size_t i, row_bytes;
+ const size_t pg_size = 256 * 1024;
+
+ /* detect first write */
+ if ( self -> u . data == NULL )
+ {
+ /* get map and content length from table */
+ assert ( self -> idx != NULL );
+ ON_FAIL ( self -> u . map = RowSetIteratorGetIdxMapping ( self -> tbl -> rsi, ctx, & self -> num_items ) )
+ {
+ ANNOTATE ( "failed to get ( old_id, new_id ) map for column '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+ return;
+ }
+
+ /* require elem_bits to be constant for column */
+ self -> elem_bits = elem_bits;
+
+ /* OPTIMIZATION:
+ IFF elem_bits <= 64 and row_len == 1, store in union
+ otherwise, use membank. This requires that if row_len
+ ever changes, we have to recover. */
+ if ( elem_bits > 64 || row_len != 1 )
+ {
+ /* create a memory bank */
+ /* TBD - used configured page size rather than 256K */
+ ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+ return;
+ }
+
+ /* initialize min/max */
+ self -> min_row_len = self -> max_row_len = row_len;
+ }
+
+ /* elem_bits should be constant */
+ assert ( self -> elem_bits == elem_bits );
+
+ /* handle optimized case */
+ if ( self -> mbank == NULL )
+ {
+ /* first, detect a change */
+ if ( row_len == 1 )
+ {
+ /* continue on optimized case */
+ row_bytes = ( ( size_t ) elem_bits + 7 ) >> 3;
+ if ( boff != 0 )
+ {
+ bitcpy ( & self -> u . data [ self -> cur_item ] . val . imm,
+ 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+ }
+ else
+ {
+ memcpy ( & self -> u . data [ self -> cur_item ] . val . imm, data, row_bytes );
+ }
+
+ /* record another immediate row */
+ ++ self -> num_immed;
+
+ /* detect last row */
+ if ( ++ self -> cur_item < self -> num_items )
+ return;
+
+ /* map values */
+ TRY ( BufferedPairColWriterMapValues ( self, ctx ) )
+ {
+ /* need to resort map on new_id */
+ STATUS ( 3, "sorting %,u ( data, new_id ) map entries on new_id", self -> num_items );
+#if USE_OLD_KSORT
+ ksort ( self -> u . map, self -> num_items, sizeof self -> u . map [ 0 ], IdxMappingCmpNew, ( void* ) ctx );
+#else
+ IdxMappingSortNew ( self -> u . map, ctx, self -> num_items );
+#endif
+
+ /* write all rows to column writer */
+ STATUS ( 3, "writing cell data to '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+ for ( i = 0; i < self -> num_items; ++ i )
+ {
+ /* write out row */
+ ON_FAIL ( ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . data [ i ] . val . imm, 0, 1 ) )
+ break;
+ }
+ }
+
+ /* forget about map */
+ self -> u . map = NULL;
+ self -> cur_item = self -> num_items = self -> num_immed = 0;
+ self -> elem_bits = 0;
+
+ return;
+ }
+
+ /* need to recover */
+ ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+ return;
+ }
+
+ /* update min/max row-len */
+ if ( row_len < self -> min_row_len )
+ self -> min_row_len = row_len;
+ else if ( row_len > self -> max_row_len )
+ self -> max_row_len = row_len;
+
+ /* handle zero-length rows specially */
+ if ( row_len == 0 )
+ self -> u . data [ self -> cur_item ] . val . ptr = NULL;
+ else
+ {
+ /* allocate space for the row */
+ row_bytes = ( ( size_t ) elem_bits * row_len + 7 ) >> 3;
+ TRY ( base = MemBankAlloc ( self -> mbank, ctx, row_bytes + sizeof row_len, false ) )
+ {
+ /* copy it in */
+ memcpy ( base, & row_len, sizeof row_len );
+ if ( boff != 0 )
+ bitcpy ( & base [ 1 ], 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+ else
+ memcpy ( & base [ 1 ], data, row_bytes );
+
+ /* remember its location in the map */
+ self -> u . data [ self -> cur_item ] . val . ptr = base;
+
+ /* remember the last input pointer */
+ }
+ }
+
+ if ( ! FAILED () )
+ {
+ /* detect last row */
+ if ( ++ self -> cur_item == self -> num_items )
+ {
+ /* map values */
+ TRY ( BufferedPairColWriterMapValues ( self, ctx ) )
+ {
+ /* need to resort map on new_id */
+ STATUS ( 3, "sorting %,u ( data, new_id ) map entries on new_id", self -> num_items );
+#if USE_OLD_KSORT
+ ksort ( self -> u . map, self -> num_items, sizeof self -> u . map [ 0 ], IdxMappingCmpNew, ( void* ) ctx );
+#else
+ IdxMappingSortNew ( self -> u . map, ctx, self -> num_items );
+#endif
+
+ /* write all rows to column writer */
+ STATUS ( 3, "writing cell data to '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+ for ( i = 0; i < self -> num_immed; ++ i )
+ {
+ /* write out row */
+ ON_FAIL ( ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . data [ i ] . val . imm, 0, 1 ) )
+ break;
+ }
+ for ( ; ! FAILED () && i < self -> num_items; ++ i )
+ {
+ /* write out row */
+ base = self -> u . data [ i ] . val . ptr;
+ if ( base == NULL )
+ ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, "", 0, 0 );
+ else
+ ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & base [ 1 ], 0, base [ 0 ] );
+ }
+ }
+
+ /* drop the mem-bank */
+ MemBankRelease ( self -> mbank, ctx );
+ self -> mbank = NULL;
+
+ /* forget about map */
+ self -> u . data = NULL;
+ self -> cur_item = self -> num_items = self -> num_immed = 0;
+ self -> elem_bits = 0;
+ }
+ }
+}
+
+static
+void BufferedPairColWriterWriteUnmapped ( BufferedPairColWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ size_t i, j, row_bytes;
+ const size_t pg_size = 256 * 1024;
+
+ /* detect first write */
+ if ( self -> u . data == NULL )
+ {
+ /* get ids, ord and content length from table */
+ assert ( self -> idx == NULL );
+ ON_FAIL ( self -> u . ids = RowSetIteratorGetSourceIds ( self -> tbl -> rsi, ctx, & self -> ord, & self -> num_items ) )
+ {
+ ANNOTATE ( "failed to get old_id, ord maps for column '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+ return;
+ }
+
+ /* require elem_bits to be constant for column */
+ self -> elem_bits = elem_bits;
+
+ /* OPTIMIZATION:
+ IFF elem_bits <= 64 and row_len == 1, store in union
+ otherwise, use membank. This requires that if row_len
+ ever changes, we have to recover. */
+ if ( elem_bits > 64 || row_len != 1 )
+ {
+ rc_t rc=KBTreeMakeUpdate(&self->vocab_key2id, NULL, 100*1024*1024,
+ false, kbtOpaqueKey,
+ 1, 1024, sizeof ( uint32_t ),
+ NULL
+ );
+ if(rc != 0) self->vocab_key2id = NULL;
+ self->vocab_cnt=0;
+ /* create a memory bank */
+ /* TBD - used configured page size rather than 256K */
+ ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+ return;
+ }
+ /* initialize min/max */
+ self -> min_row_len = self -> max_row_len = row_len;
+ }
+
+ /* elem_bits should be constant */
+ assert ( self -> elem_bits == elem_bits );
+
+ /* handle optimized case */
+ if ( self -> mbank == NULL )
+ {
+ /* first, detect a change */
+ if ( row_len == 1 )
+ {
+ /* continue on optimized case */
+ row_bytes = ( ( size_t ) elem_bits + 7 ) >> 3;
+ if ( boff != 0 )
+ {
+ bitcpy ( & self -> u . ids [ self -> cur_item ],
+ 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+ }
+ else
+ {
+ memcpy ( & self -> u . ids [ self -> cur_item ], data, row_bytes );
+ }
+
+ /* record another immediate row */
+ ++ self -> num_immed;
+
+ /* detect last row */
+ if ( ++ self -> cur_item < self -> num_items )
+ return;
+
+ /* write all rows to column writer */
+ STATUS ( 3, "writing cell data to '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+ for ( i = 0; i < self -> num_items; ++ i )
+ {
+ /* map to new order */
+ j = self -> ord [ i ];
+
+ /* write out row */
+ ON_FAIL ( ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . ids [ j ], 0, 1 ) )
+ break;
+ }
+
+ /* forget about map */
+ self -> u . ids = NULL;
+ self -> ord = NULL;
+ self -> cur_item = self -> num_items = self -> num_immed = 0;
+ self -> elem_bits = 0;
+
+ return;
+ }
+
+ /* need to recover */
+ {
+ rc_t rc=KBTreeMakeUpdate(&self->vocab_key2id, NULL, 100*1024*1024,
+ false, kbtOpaqueKey,
+ 1, 1024, sizeof ( uint32_t ),
+ NULL
+ );
+ if(rc != 0) self->vocab_key2id = NULL;
+ self->vocab_cnt=0;
+ /* create a memory bank */
+ /* create a memory bank */
+ /* TBD - used configured page size rather than 256K */
+ ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+ return;
+ }
+ }
+
+ /* update min/max row-len */
+ if ( row_len < self -> min_row_len )
+ self -> min_row_len = row_len;
+ else if ( row_len > self -> max_row_len )
+ self -> max_row_len = row_len;
+
+ /* handle zero-length rows specially */
+ if ( row_len == 0 ){
+ self -> u . ids [ self -> cur_item ] = 0;
+ } else {
+ uint32_t *base = NULL;
+ row_bytes = ( ( size_t ) elem_bits * row_len + 7 ) >> 3;
+ if(self -> vocab_key2id){
+ rc_t rc;
+ bool wasInserted;
+ uint64_t tmp_id=self -> vocab_cnt;
+ if( self -> vocab_cnt < sizeof(self -> vocab_id2val)/sizeof(self -> vocab_id2val[0])){
+ rc = KBTreeEntry(self -> vocab_key2id, &tmp_id, &wasInserted, data, row_bytes);
+ } else {
+ rc = KBTreeFind (self -> vocab_key2id, &tmp_id, data, row_bytes);
+ if(rc == 0) wasInserted=false;
+ }
+ if(rc == 0){ /*** either entered or found **/
+ if(wasInserted){/** allocate and remember in vocabulary ***/
+ /* allocate space for the row */
+ TRY ( base = MemBankAlloc ( self -> mbank, ctx, row_bytes + sizeof row_len, false ) )
+ {
+ /* copy it in */
+ base[0] = row_len;
+ if ( boff != 0 ) bitcpy ( & base [ 1 ], 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+ else memcpy ( & base [ 1 ], data, row_bytes );
+ self -> vocab_id2val[self -> vocab_cnt++] = base;
+ }
+ } else { /** get from vocabulary **/
+ assert(tmp_id < self -> vocab_cnt);
+ base = (uint32_t*)self -> vocab_id2val[tmp_id];
+ }
+ }
+ rc = 0;
+ }
+ if(base == NULL){
+ TRY ( base = MemBankAlloc ( self -> mbank, ctx, row_bytes + sizeof row_len, false ) )
+ {
+ /* copy it in */
+ base[0] = row_len;
+ if ( boff != 0 )
+ bitcpy ( & base [ 1 ], 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+ else
+ memcpy ( & base [ 1 ], data, row_bytes );
+ }
+
+ }
+ /* remember base location in the map */
+ self -> u . ids [ self -> cur_item ] = ( int64_t ) ( size_t ) base;
+ /* remember the last input pointer */
+ }
+
+ if ( ! FAILED () )
+ {
+ /* detect last row */
+ if ( ++ self -> cur_item == self -> num_items )
+ {
+ /* write all rows to column writer */
+ uint32_t *last_base=NULL;
+ uint32_t cnt=0;
+ STATUS ( 3, "writing cell data to '%s' num_items=%ld vocab_size=%d num_immed=%d", ColumnWriterFullSpec ( self -> cw, ctx ), self -> num_items, self ->vocab_cnt, self -> num_immed );
+ for ( i = 0; ! FAILED () && i < self -> num_items; ++ i )
+ {
+ /* map to new order */
+ j = self -> ord [ i ];
+ if ( j < self -> num_immed ){
+ if(cnt > 0){ /*** flush accumulated count ***/
+ if(last_base==NULL) ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits, "",0, 0,cnt);
+ else ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,&last_base[1],0,last_base[0],cnt);
+ last_base=NULL;
+ cnt=0;
+ }
+ ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . ids [ j ], 0, 1 );
+ } else {
+ /* accumulate repeated rows */
+ void* ptr = (void*)(size_t)self->u.ids [ j ];
+ if (cnt == 0){
+ cnt=1;
+ last_base = ptr;
+ } else if (ptr == last_base){
+ cnt++;
+ } else {
+ if(last_base==NULL) ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits, "",0, 0,cnt);
+ else ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,&last_base[1],0,last_base[0],cnt);
+ last_base = ptr;
+ cnt=1;
+ }
+ }
+ }
+ if(cnt > 0){ /*** flush accumulated count ***/
+ if(last_base==NULL) ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits, "",0, 0,cnt);
+ else ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,&last_base[1],0,last_base[0],cnt);
+ }
+ /* drop the mem-bank */
+ MemBankRelease ( self -> mbank, ctx );
+ self -> mbank = NULL;
+
+ /* forget about map */
+ self -> u . ids = NULL;
+ self -> ord = NULL;
+ self -> cur_item = self -> num_items = self -> num_immed = 0;
+ self -> elem_bits = 0;
+
+ /* cleanup vocabulary */
+ if(self -> vocab_key2id ) {
+ KBTreeRelease ( self -> vocab_key2id );
+ self -> vocab_key2id = 0;
+ }
+ self -> vocab_cnt = 0;
+
+ }
+ }
+}
+
+static
+void BufferedPairColWriterWriteStatic ( BufferedPairColWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+ FUNC_ENTRY ( ctx );
+ rc_t rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+ INTERNAL_ERROR ( rc, "writing to a non-static column" );
+}
+
+
+static
+void BufferedPairColWriterCommit ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ ColumnWriterCommit ( self -> cw, ctx );
+}
+
+
+struct ColumnWriter_vt UnmappedBufferedPairColWriter_vt =
+{
+ BufferedPairColWriterWhack,
+ BufferedPairColWriterFullSpec,
+ BufferedPairColWriterPreCopy,
+ BufferedPairColWriterPostCopy,
+ BufferedPairColWriterWriteUnmapped,
+ BufferedPairColWriterWriteStatic,
+ BufferedPairColWriterCommit
+};
+
+
+struct ColumnWriter_vt MappedBufferedPairColWriter_vt =
+{
+ BufferedPairColWriterWhack,
+ BufferedPairColWriterFullSpec,
+ BufferedPairColWriterPreCopy,
+ BufferedPairColWriterPostCopy,
+ BufferedPairColWriterWriteMapped,
+ BufferedPairColWriterWriteStatic,
+ BufferedPairColWriterCommit
+};
+
+
+/*--------------------------------------------------------------------------
+ * cSRATblPair
+ * interface to pairing of source and destination tables
+ */
+
+/* MakeBufferedColumnWriter
+ * make a wrapper that buffers all rows written
+ * then sorts on flush
+ */
+ColumnWriter *cSRATblPairMakeBufferedColumnWriter ( cSRATblPair *self,
+ const ctx_t *ctx, ColumnWriter *writer )
+{
+ FUNC_ENTRY ( ctx );
+
+ BufferedPairColWriter *buff;
+
+ TRY ( buff = MemAlloc ( ctx, sizeof * buff, true ) )
+ {
+ TRY ( ColumnWriterInit ( & buff -> dad, ctx, & UnmappedBufferedPairColWriter_vt, false ) )
+ {
+ /* duplicate our friend */
+ TRY ( buff -> cw = ColumnWriterDuplicate ( writer, ctx ) )
+ {
+ /* borrowed ( weak ) reference
+ cannot duplicate without creating cycle */
+ buff -> tbl = self;
+
+ return & buff -> dad;
+ }
+ }
+
+ MemFree ( ctx, buff, sizeof * buff );
+ }
+
+ return NULL;
+}
+
+/* MakeBufferedIdRemapColumnWriter
+ * make a wrapper that buffers all rows written
+ * maps all ids through index MapFile
+ * then sorts on flush
+ */
+ColumnWriter *cSRATblPairMakeBufferedIdRemapColumnWriter ( cSRATblPair *self,
+ const ctx_t *ctx, ColumnWriter *writer, MapFile *idx, bool assign_ids )
+{
+ FUNC_ENTRY ( ctx );
+
+ BufferedPairColWriter *buff;
+
+ TRY ( buff = MemAlloc ( ctx, sizeof * buff, true ) )
+ {
+ TRY ( ColumnWriterInit ( & buff -> dad, ctx, & MappedBufferedPairColWriter_vt, idx != NULL ) )
+ {
+ /* duplicate our friend */
+ TRY ( buff -> cw = ColumnWriterDuplicate ( writer, ctx ) )
+ {
+ TRY ( buff -> idx = MapFileDuplicate ( idx, ctx ) )
+ {
+ /* borrowed ( weak ) reference
+ cannot duplicate without creating cycle */
+ buff -> tbl = self;
+
+ /* preserve boolean in one of Dad's align bytes */
+ buff -> dad . align [ 0 ] = assign_ids;
+
+ return & buff -> dad;
+ }
+
+ ColumnWriterRelease ( writer, ctx );
+ }
+ }
+
+ MemFree ( ctx, buff, sizeof * buff );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/buff-writer.h b/tools/sra-sort/buff-writer.h
new file mode 100644
index 0000000..261788a
--- /dev/null
+++ b/tools/sra-sort/buff-writer.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_buff_writer_
+#define _h_sra_sort_buff_writer_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct cSRATblPair;
+struct ColumnWriter;
+
+
+/*--------------------------------------------------------------------------
+ * cSRATblPair
+ * interface to pairing of source and destination tables
+ */
+
+/* MakeBufferedColumnWriter
+ * make a wrapper that buffers all rows written
+ * then sorts on flush
+ */
+struct ColumnWriter *cSRATblPairMakeBufferedColumnWriter ( struct cSRATblPair *self,
+ const ctx_t *ctx, struct ColumnWriter *writer );
+
+/* MakeBufferedIdRemapColumnWriter
+ * make a wrapper that buffers all rows written
+ * maps all ids through index MapFile
+ * then sorts on flush
+ */
+struct ColumnWriter *cSRATblPairMakeBufferedIdRemapColumnWriter ( struct cSRATblPair *self,
+ const ctx_t *ctx, struct ColumnWriter *writer, struct MapFile *idx, bool assign_ids );
+
+
+#endif /* _h_sra_sort_buff_writer_ */
diff --git a/tools/sra-sort/caps.c b/tools/sra-sort/caps.c
new file mode 100644
index 0000000..9becbb1
--- /dev/null
+++ b/tools/sra-sort/caps.c
@@ -0,0 +1,125 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+
+#include <vdb/manager.h>
+#include <kdb/manager.h>
+#include <kfg/config.h>
+
+#include <string.h>
+
+FILE_ENTRY ( caps );
+
+/*--------------------------------------------------------------------------
+ * Caps
+ * a very watered down version of vdb-3 capabilities
+ */
+
+
+/* Init
+ * initialize a local block from another
+ */
+void CapsInit ( Caps *caps, const ctx_t *ctx )
+{
+ if ( caps != NULL )
+ {
+ memset ( caps, 0, sizeof * caps );
+ if ( ctx != NULL && ctx -> caps != NULL )
+ {
+ const Caps *orig = ctx -> caps;
+ FUNC_ENTRY ( ctx );
+ TRY ( caps -> mem = MemBankDuplicate ( orig -> mem, ctx ) )
+ {
+ rc_t rc = KConfigAddRef ( caps -> cfg = orig -> cfg );
+ if ( rc != 0 )
+ {
+ caps -> cfg = NULL;
+ ERROR ( rc, "failed to duplicate reference to KConfig" );
+ }
+ else
+ {
+ rc = KDBManagerAddRef ( caps -> kdb = orig -> kdb );
+ if ( rc != 0 )
+ {
+ caps -> kdb = NULL;
+ ERROR ( rc, "failed to duplicate reference to KDBManager" );
+ }
+ else
+ {
+ rc = VDBManagerAddRef ( caps -> vdb = orig -> vdb );
+ if ( rc != 0 )
+ {
+ caps -> vdb = NULL;
+ ERROR ( rc, "failed to duplicate reference to VDBManager" );
+ }
+ else
+ {
+ caps -> tool = orig -> tool;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+/* Whack
+ * release references
+ */
+void CapsWhack ( Caps *self, const ctx_t *ctx )
+{
+ if ( self != NULL )
+ {
+ rc_t rc;
+ MemBank *mem;
+
+ self -> tool = NULL;
+
+ rc = VDBManagerRelease ( self -> vdb );
+ if ( rc != 0 )
+ ABORT ( rc, "failed to release reference to VDBManager" );
+ self -> vdb = NULL;
+
+ rc = KDBManagerRelease ( self -> kdb );
+ if ( rc != 0 )
+ ABORT ( rc, "failed to release reference to KDBManager" );
+ self -> kdb = NULL;
+
+ rc = KConfigRelease ( self -> cfg );
+ if ( rc != 0 )
+ ABORT ( rc, "failed to release reference to KConfig" );
+ self -> cfg = NULL;
+
+ mem = self -> mem;
+ MemBankRelease ( mem, ctx );
+ self -> mem = NULL;
+ }
+}
diff --git a/tools/sra-sort/caps.h b/tools/sra-sort/caps.h
new file mode 100644
index 0000000..7368556
--- /dev/null
+++ b/tools/sra-sort/caps.h
@@ -0,0 +1,70 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_caps_
+#define _h_sra_sort_caps_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MemBank;
+struct KConfig;
+struct KDBManager;
+struct VDBManager;
+struct Tool;
+
+
+/*--------------------------------------------------------------------------
+ * Caps
+ * a very watered-down version of vdb-3 capabilities
+ */
+typedef struct Caps Caps;
+struct Caps
+{
+ struct MemBank *mem;
+ struct KConfig const *cfg;
+ struct KDBManager *kdb;
+ struct VDBManager *vdb;
+ struct Tool const *tool;
+};
+
+
+/* Init
+ * initialize a local block from another
+ */
+void CapsInit ( Caps *caps, const ctx_t *ctx );
+
+
+/* Whack
+ * release references
+ */
+void CapsWhack ( Caps *self, const ctx_t *ctx );
+
+#endif
diff --git a/tools/sra-sort/capture-first-half-aligned.c b/tools/sra-sort/capture-first-half-aligned.c
new file mode 100644
index 0000000..73cd829
--- /dev/null
+++ b/tools/sra-sort/capture-first-half-aligned.c
@@ -0,0 +1,192 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct CaptureFirstHalfAlignedColWriter CaptureFirstHalfAlignedColWriter;
+#define COLWRITER_IMPL CaptureFirstHalfAlignedColWriter
+
+#include "csra-pair.h"
+#include "col-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+FILE_ENTRY ( capture-first-half-aligned );
+
+
+/*--------------------------------------------------------------------------
+ * CaptureFirstHalfAlignedColWriter
+ */
+struct CaptureFirstHalfAlignedColWriter
+{
+ ColumnWriter dad;
+
+ int64_t row_id;
+ cSRAPair *csra;
+ ColumnWriter *writer;
+};
+
+static
+void CaptureFirstHalfAlignedColWriterWhack ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ ColumnWriterRelease ( self -> writer, ctx );
+ self -> csra = NULL;
+ self -> writer = NULL;
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+const char *CaptureFirstHalfAlignedColWriterFullSpec ( const CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ return ColumnWriterFullSpec ( self -> writer, ctx );
+}
+
+static
+void CaptureFirstHalfAlignedColWriterPreCopy ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ ColumnWriterPreCopy ( self -> writer, ctx );
+}
+
+static
+void CaptureFirstHalfAlignedColWriterPostCopy ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ ColumnWriterPostCopy ( self -> writer, ctx );
+}
+
+static
+void CaptureFirstHalfAlignedColWriterWrite ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ cSRAPair *csra = self -> csra;
+ if ( csra -> first_half_aligned_spot == 0 )
+ {
+ uint32_t i;
+ const int64_t *row = data;
+
+ for ( i = 0; i < row_len; ++ i )
+ {
+ if ( row [ i ] == 0 )
+ {
+ csra -> first_half_aligned_spot = self -> row_id;
+ break;
+ }
+ }
+ }
+
+ TRY ( ColumnWriterWrite ( self -> writer, ctx, elem_bits, data, boff, row_len ) )
+ {
+ ++ self -> row_id;
+ }
+}
+
+static
+void CaptureFirstHalfAlignedColWriterWriteStatic ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+ FUNC_ENTRY ( ctx );
+
+ cSRAPair *csra = self -> csra;
+ if ( csra -> first_half_aligned_spot == 0 )
+ {
+ uint32_t i;
+ const int64_t *row = data;
+
+ for ( i = 0; i < row_len; ++ i )
+ {
+ if ( row [ i ] == 0 )
+ {
+ csra -> first_half_aligned_spot = self -> row_id;
+ break;
+ }
+ }
+ }
+
+ TRY ( ColumnWriterWriteStatic ( self -> writer, ctx, elem_bits, data, boff, row_len, count ) )
+ {
+ self -> row_id += count;
+ }
+}
+
+static
+void CaptureFirstHalfAlignedColWriterCommit ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ ColumnWriterCommit ( self -> writer, ctx );
+}
+
+static ColumnWriter_vt CaptureFirstHalfAlignedColWriter_vt =
+{
+ CaptureFirstHalfAlignedColWriterWhack,
+ CaptureFirstHalfAlignedColWriterFullSpec,
+ CaptureFirstHalfAlignedColWriterPreCopy,
+ CaptureFirstHalfAlignedColWriterPostCopy,
+ CaptureFirstHalfAlignedColWriterWrite,
+ CaptureFirstHalfAlignedColWriterWriteStatic,
+ CaptureFirstHalfAlignedColWriterCommit
+};
+
+/*--------------------------------------------------------------------------
+ * cSRAPair
+ */
+
+/* MakeFirstHalfAlignedRowIdCaptureWriter
+ * a simple monitor on SEQUENCE.PRIMARY_ALIGNMENT_ID looking for
+ * half-aligned spots and capturing the first occurrence.
+ */
+ColumnWriter *cSRAPairMakeFirstHalfAlignedRowIdCaptureWriter ( cSRAPair *self,
+ const ctx_t *ctx, ColumnWriter *writer )
+{
+ FUNC_ENTRY ( ctx );
+
+ CaptureFirstHalfAlignedColWriter *mon;
+
+ TRY ( mon = MemAlloc ( ctx, sizeof * mon, false ) )
+ {
+ TRY ( ColumnWriterInit ( & mon -> dad, ctx, & CaptureFirstHalfAlignedColWriter_vt, false ) )
+ {
+ mon -> row_id = 1;
+ mon -> csra = self;
+ TRY ( mon -> writer = ColumnWriterDuplicate ( writer, ctx ) )
+ {
+ return & mon -> dad;
+ }
+ }
+
+ MemFree ( ctx, mon, sizeof * mon );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/col-pair.c b/tools/sra-sort/col-pair.c
new file mode 100644
index 0000000..11e7779
--- /dev/null
+++ b/tools/sra-sort/col-pair.c
@@ -0,0 +1,816 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct SimpleColumnReader SimpleColumnReader;
+#define COLREADER_IMPL SimpleColumnReader
+
+typedef struct SimpleColumnWriter SimpleColumnWriter;
+#define COLWRITER_IMPL SimpleColumnWriter
+
+#include "col-pair.h"
+#include "tbl-pair.h"
+#include "row-set.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kapp/main.h>
+#include <kfs/defs.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( col-pair );
+
+
+/*--------------------------------------------------------------------------
+ * SimpleColumnReader
+ * implementation of ColumnReader based upon VCursor direct read
+ */
+struct SimpleColumnReader
+{
+ ColumnReader dad;
+
+ const VCursor *curs;
+ uint32_t idx;
+
+ uint32_t full_spec_size;
+ char full_spec [ 1 ];
+};
+
+
+/* Whack
+ */
+static
+void SimpleColumnReaderWhack ( SimpleColumnReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ size_t bytes = sizeof * self + self -> full_spec_size;
+
+ rc = VCursorRelease ( self -> curs );
+ if ( rc != 0 )
+ WARN ( "VCursorRelease failed on '%s'", self -> full_spec );
+
+ self -> curs = NULL;
+ MemFree ( ctx, self, bytes );
+}
+
+/* FullSpec
+ */
+static
+const char *SimpleColumnReaderFullSpec ( const SimpleColumnReader *self, const ctx_t *ctx )
+{
+ return self -> full_spec;
+}
+
+
+/* IdRange
+ * returns the number of ids available
+ * and optionally the first id
+ */
+static
+uint64_t SimpleColumnReaderIdRange ( const SimpleColumnReader *self,
+ const ctx_t *ctx, int64_t *opt_first )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ uint64_t count;
+
+ rc = VCursorIdRange ( self -> curs, self -> idx, opt_first, & count );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorIdRange failed for column '%s'", self -> full_spec );
+
+ return count;
+}
+
+
+/* DummyStub
+ * useful for pre/post-copy
+ */
+static
+void SimpleColumnReaderDummyStub ( SimpleColumnReader *self, const ctx_t *ctx )
+{
+}
+
+
+/* Read
+ * read next row of data
+ * returns NULL if no rows are available
+ */
+static
+const void *SimpleColumnReaderRead ( SimpleColumnReader *self, const ctx_t *ctx,
+ int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const void *base;
+
+ rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx, elem_bits, & base, boff, row_len );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorCellDataDirect ( %ld ) failed for column '%s'", row_id, self -> full_spec );
+
+ return base;
+}
+
+static ColumnReader_vt SimpleColumnReader_vt =
+{
+ SimpleColumnReaderWhack,
+ SimpleColumnReaderFullSpec,
+ SimpleColumnReaderIdRange,
+ SimpleColumnReaderDummyStub,
+ SimpleColumnReaderDummyStub,
+ SimpleColumnReaderRead
+};
+
+
+/*--------------------------------------------------------------------------
+ * ColumnReader
+ * interface to read column in serial order
+ */
+
+
+/* MakeColumnReader
+ * make simple column reader
+ */
+ColumnReader *TablePairMakeColumnReader ( TablePair *self, const ctx_t *ctx,
+ const VCursor *opt_curs, const char *colspec, bool required )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const VCursor *curs;
+
+ if ( opt_curs != NULL )
+ rc = VCursorAddRef ( curs = opt_curs );
+ else
+ rc = VTableCreateCursorRead ( self -> stbl, & curs );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to create cursor on column 'src.%s.%s'", self -> full_spec, colspec );
+ else
+ {
+ uint32_t idx;
+ rc = VCursorAddColumn ( curs, & idx, colspec );
+ if ( rc != 0 && GetRCState ( rc ) != rcExists )
+ {
+ if ( required )
+ ERROR ( rc, "failed to add column 'src.%s.%s' to cursor", self -> full_spec, colspec );
+ }
+ else
+ {
+ rc = VCursorOpen ( curs );
+ if ( rc != 0 )
+ {
+ if ( required )
+ ERROR ( rc, "failed to open cursor on column 'src.%s.%s'", self -> full_spec, colspec );
+ }
+ else
+ {
+ SimpleColumnReader *col;
+ size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "src.." - 1;
+
+ TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+ {
+ ColumnReaderInit ( & col -> dad, ctx, & SimpleColumnReader_vt );
+ col -> curs = curs;
+ col -> idx = idx;
+ col -> full_spec_size = ( uint32_t ) full_spec_size;
+
+ rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+ "src.%s.%s", self -> full_spec, colspec );
+ if ( rc == 0 )
+ return & col -> dad;
+
+ ABORT ( rc, "miscalculated string size" );
+ }
+ CATCH_ALL ()
+ {
+ ANNOTATE ( "failed to allocate %zu bytes for SimpleColumnReader", sizeof * col + full_spec_size );
+ }
+ }
+ }
+
+ VCursorRelease ( curs );
+ }
+
+ return NULL;
+}
+
+
+/* Release
+ * releases reference
+ */
+void ColumnReaderRelease ( const ColumnReader *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "ColumnReader" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release ColumnReader" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+ColumnReader *ColumnReaderDuplicate ( const ColumnReader *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "ColumnReader" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate ColumnReader" );
+ return NULL;
+ }
+ }
+
+ return ( ColumnReader* ) self;
+}
+
+
+/* Init
+ */
+void ColumnReaderInit ( ColumnReader *self, const ctx_t *ctx, const ColumnReader_vt *vt )
+{
+ if ( self == NULL )
+ {
+ rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad ColumnReader" );
+ }
+ else
+ {
+ self -> vt = vt;
+ KRefcountInit ( & self -> refcount, 1, "ColumnReader", "init", "" );
+ self -> presorted = false;
+ memset ( self -> align, 0, sizeof self -> align );
+ }
+}
+
+
+/*--------------------------------------------------------------------------
+ * SimpleColumnWriter
+ * implementation of ColumnWriter based upon VCursor
+ */
+struct SimpleColumnWriter
+{
+ ColumnWriter dad;
+
+ VCursor *curs;
+ uint32_t idx;
+
+ uint32_t full_spec_size;
+ char full_spec [ 1 ];
+};
+
+static
+void SimpleColumnWriterWhack ( SimpleColumnWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ rc = VCursorRelease ( self -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+
+ MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+
+static
+const char *SimpleColumnWriterFullSpec ( const SimpleColumnWriter *self, const ctx_t *ctx )
+{
+ return self -> full_spec;
+}
+
+static
+void SimpleColumnWriterDummyStub ( SimpleColumnWriter *self, const ctx_t *ctx )
+{
+}
+
+static
+void SimpleColumnWriterWrite ( SimpleColumnWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ rc = VCursorOpenRow ( self -> curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorWrite ( self -> curs, self -> idx, elem_bits, data, boff, row_len );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorWrite failed for column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorCommitRow ( self -> curs );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorCommit failed for column '%s'", self -> full_spec );
+ }
+
+ rc = VCursorCloseRow ( self -> curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+ }
+}
+
+static
+void SimpleColumnWriterWriteStatic ( SimpleColumnWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+ FUNC_ENTRY ( ctx );
+
+ for ( ; ! FAILED () && count > 0; -- count )
+ {
+ rc_t rc = VCursorOpenRow ( self -> curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorWrite ( self -> curs, self -> idx, elem_bits, data, boff, row_len );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorWrite failed for column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorCommitRow ( self -> curs );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorCommitRow failed for column '%s'", self -> full_spec );
+ else if ( count > 1 )
+ {
+ /* setting it small since threshold is detected in CommitRow, but execused on CloseRow */
+ uint64_t cnt = ( count < 0x20000000U ) ? count : 0x20000000U;
+ rc = VCursorRepeatRow ( self -> curs, cnt - 1 );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorRepeatRow failed for column '%s'", self -> full_spec );
+ else
+ count -= cnt - 1;
+ }
+ }
+
+ rc = VCursorCloseRow ( self -> curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+ }
+ }
+}
+
+static
+void SimpleColumnWriterCommit ( SimpleColumnWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ rc = VCursorCommit ( self -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorCommit failed on column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorRelease ( self -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+ else
+ {
+ self -> curs = NULL;
+ }
+ }
+}
+
+
+static ColumnWriter_vt SimpleColumnWriter_vt =
+{
+ SimpleColumnWriterWhack,
+ SimpleColumnWriterFullSpec,
+ SimpleColumnWriterDummyStub,
+ SimpleColumnWriterDummyStub,
+ SimpleColumnWriterWrite,
+ SimpleColumnWriterWriteStatic,
+ SimpleColumnWriterCommit
+};
+
+
+
+/*--------------------------------------------------------------------------
+ * ColumnWriter
+ * interface to write column in serial order
+ */
+
+
+/* MakeColumnWriter
+ * make simple column writer
+ */
+ColumnWriter *TablePairMakeColumnWriter ( TablePair *self, const ctx_t *ctx,
+ VCursor *opt_curs, const char *colspec )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ VCursor *curs;
+
+ if ( opt_curs != NULL )
+ rc = VCursorAddRef ( curs = opt_curs );
+ else
+ rc = VTableCreateCursorWrite ( self -> dtbl, & curs, kcmInsert );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to create cursor on column 'dst.%s.%s'", self -> full_spec, colspec );
+ else
+ {
+ uint32_t idx;
+ rc = VCursorAddColumn ( curs, & idx, colspec );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to add column 'dst.%s.%s' to cursor", self -> full_spec, colspec );
+ else
+ {
+ VCursorSuspendTriggers ( curs );
+ rc = VCursorOpen ( curs );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to open cursor on column 'dst.%s.%s'", self -> full_spec, colspec );
+ {
+ SimpleColumnWriter *col;
+ size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "dst.." - 1;
+
+ TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+ {
+ ColumnWriterInit ( & col -> dad, ctx, & SimpleColumnWriter_vt, false );
+ col -> curs = curs;
+ col -> idx = idx;
+
+ col -> full_spec_size = ( uint32_t ) full_spec_size;
+ rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+ "dst.%s.%s", self -> full_spec, colspec );
+ if ( rc == 0 )
+ return & col -> dad;
+
+ ABORT ( rc, "miscalculated string size" );
+ }
+ CATCH_ALL ()
+ {
+ ANNOTATE ( "failed to allocate %zu bytes for SimpleColumnWriter", sizeof * col + full_spec_size );
+ }
+ }
+ }
+
+ VCursorRelease ( curs );
+ }
+
+ return NULL;
+}
+
+
+/* Release
+ * releases reference
+ */
+void ColumnWriterRelease ( ColumnWriter *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "ColumnWriter" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release ColumnWriter" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+ColumnWriter *ColumnWriterDuplicate ( const ColumnWriter *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "ColumnWriter" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate ColumnWriter" );
+ return NULL;
+ }
+ }
+
+ return ( ColumnWriter* ) self;
+}
+
+
+/* Init
+ */
+void ColumnWriterInit ( ColumnWriter *self, const ctx_t *ctx, const ColumnWriter_vt *vt, bool mapped )
+{
+ if ( self == NULL )
+ {
+ rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad ColumnWriter" );
+ }
+ else
+ {
+ self -> vt = vt;
+ KRefcountInit ( & self -> refcount, 1, "ColumnWriter", "init", "" );
+ self -> mapped = mapped;
+ memset ( self -> align, 0, sizeof self -> align );
+ }
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * ColumnPair
+ * interface to pairing of source and destination columns
+ */
+
+/* Whack
+ */
+static
+void ColumnPairWhack ( ColumnPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnReaderRelease ( self -> reader, ctx );
+ ColumnWriterRelease ( self -> writer, ctx );
+ MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+/* MakeColumnPair
+ * make a simple ColumnPair
+ * takes an optional source VCursor
+ * and a colspec
+ */
+ColumnPair *TablePairMakeColumnPair ( TablePair *self, const ctx_t *ctx,
+ ColumnReader *reader, ColumnWriter *writer, const char *colspec, bool large )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col;
+ size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + 1;
+
+ TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+ {
+ TRY ( col -> reader = ColumnReaderDuplicate ( reader, ctx ) )
+ {
+ TRY ( col -> writer = ColumnWriterDuplicate ( writer, ctx ) )
+ {
+ rc_t rc;
+
+ col -> full_spec_size = full_spec_size;
+ KRefcountInit ( & col -> refcount, 1, "ColumnPair", "make", colspec );
+ col -> is_static = false;
+ col -> is_mapped = writer -> mapped;
+ col -> presorted = reader -> presorted;
+ col -> large = large;
+
+ rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+ "%s.%s", self -> full_spec, colspec );
+ if ( rc == 0 )
+ {
+ col -> colspec = & col -> full_spec [ self -> full_spec_size + 1 ];
+ return col;
+ }
+
+ ABORT ( rc, "miscalculated string size" );
+ }
+
+ ColumnReaderRelease ( col -> reader, ctx );
+ }
+
+ MemFree ( ctx, col, sizeof * col + full_spec_size );
+ }
+
+ return NULL;
+}
+
+ColumnPair *TablePairMakeStaticColumnPair ( TablePair *self, const ctx_t *ctx,
+ ColumnReader *reader, ColumnWriter *writer, const char *colspec )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col;
+
+ TRY ( col = TablePairMakeColumnPair ( self, ctx, reader, writer, colspec, false ) )
+ {
+ if ( col != NULL )
+ col -> is_static = true;
+ }
+
+ return col;
+}
+
+
+/* Release
+ * called by table at end of copy
+ */
+void ColumnPairRelease ( ColumnPair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "ColumnPair" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ColumnPairWhack ( self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcColumn, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release ColumnPair" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+ColumnPair *ColumnPairDuplicate ( const ColumnPair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "ColumnPair" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcColumn, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate ColumnPair" );
+ return NULL;
+ }
+ }
+
+ return ( ColumnPair* ) self;
+}
+
+
+/* PreCopy
+ * PostCopy
+ */
+void ColumnPairPreCopy ( const ColumnPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ ColumnReaderPreCopy ( self -> reader, ctx );
+ ColumnWriterPreCopy ( self -> writer, ctx );
+}
+
+void ColumnPairPostCopy ( const ColumnPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ ColumnReaderPostCopy ( self -> reader, ctx );
+ ColumnWriterPostCopy ( self -> writer, ctx );
+}
+
+
+/* Copy
+ * copy from source to destination column
+ */
+void ColumnPairCopy ( ColumnPair *self, const ctx_t *ctx, RowSet *rs )
+{
+ FUNC_ENTRY ( ctx );
+
+ STATUS ( 3, "copying column '%s'", self -> full_spec );
+
+ TRY ( RowSetReset ( rs, ctx, self -> is_static ) )
+ {
+ TRY ( ColumnPairPreCopy ( self, ctx ) )
+ {
+ while ( ! FAILED () )
+ {
+ rc_t rc;
+ size_t i, count;
+ int64_t row_ids [ 8 * 1024 ];
+
+ ON_FAIL ( count = RowSetNext ( rs, ctx, row_ids, sizeof row_ids / sizeof row_ids [ 0 ] ) )
+ break;
+ if ( count == 0 )
+ break;
+
+ rc = Quitting ();
+ if ( rc != 0 )
+ {
+ INFO_ERROR ( rc, "quitting" );
+ break;
+ }
+
+ for ( i = 0; ! FAILED () && i < count; ++ i )
+ {
+ const void *base;
+ uint32_t elem_bits, boff, row_len;
+
+ TRY ( base = ColumnReaderRead ( self -> reader, ctx, row_ids [ i ], & elem_bits, & boff, & row_len ) )
+ {
+ ColumnWriterWrite ( self -> writer, ctx, elem_bits, base, boff, row_len );
+ }
+ }
+ }
+
+ ColumnPairPostCopy ( self, ctx );
+ }
+ }
+}
+
+
+/* CopyStatic
+ * copy static column from source to destination
+ */
+void ColumnPairCopyStatic ( ColumnPair *self, const ctx_t *ctx, int64_t first_id, uint64_t count )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const void *base;
+ uint32_t elem_bits, boff, row_len;
+
+ if ( ! self -> is_static )
+ {
+ rc = RC ( rcExe, rcColumn, rcCopying, rcType, rcIncorrect );
+ INTERNAL_ERROR ( rc, "'%s' IS NOT A STATIC COLUMN", self -> full_spec );
+ return;
+ }
+
+ STATUS ( 3, "copying static column '%s'", self -> full_spec );
+
+ TRY ( base = ColumnReaderRead ( self -> reader, ctx, first_id, & elem_bits, & boff, & row_len ) )
+ {
+ ColumnWriterWriteStatic ( self -> writer, ctx, elem_bits, base, boff, row_len, count );
+ }
+}
diff --git a/tools/sra-sort/col-pair.h b/tools/sra-sort/col-pair.h
new file mode 100644
index 0000000..b14df08
--- /dev/null
+++ b/tools/sra-sort/col-pair.h
@@ -0,0 +1,323 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_col_pair_
+#define _h_sra_sort_col_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VCursor;
+struct TablePair;
+struct RowSet;
+
+
+/*--------------------------------------------------------------------------
+ * ColumnReader
+ * interface to read column in random order
+ */
+typedef struct ColumnReader_vt ColumnReader_vt;
+
+typedef struct ColumnReader ColumnReader;
+struct ColumnReader
+{
+ const ColumnReader_vt *vt;
+ KRefcount refcount;
+ bool presorted;
+ uint8_t align [ 3 ];
+};
+
+#ifndef COLREADER_IMPL
+#define COLREADER_IMPL ColumnReader
+#endif
+
+struct ColumnReader_vt
+{
+ /* called by Release */
+ void ( * whack ) ( COLREADER_IMPL *self, const ctx_t *ctx );
+
+ /* full spec */
+ const char* ( * full_spec ) ( const COLREADER_IMPL *self, const ctx_t *ctx );
+
+ /* id-range */
+ uint64_t ( * id_range ) ( const COLREADER_IMPL *self, const ctx_t *ctx, int64_t *opt_first );
+
+ /* pre-post copy handlers */
+ void ( * pre_copy ) ( COLREADER_IMPL *self, const ctx_t *ctx );
+ void ( * post_copy ) ( COLREADER_IMPL *self, const ctx_t *ctx );
+
+ /* retrieve next source row */
+ const void* ( * read ) ( COLREADER_IMPL *self, const ctx_t *ctx,
+ int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len );
+};
+
+
+/* MakeColumnReader
+ * make simple column reader
+ */
+ColumnReader *TablePairMakeColumnReader ( struct TablePair *self, const ctx_t *ctx,
+ struct VCursor const *opt_curs, const char *colspec, bool required );
+
+
+/* Release
+ * releases reference
+ */
+void ColumnReaderRelease ( const ColumnReader *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+ColumnReader *ColumnReaderDuplicate ( const ColumnReader *self, const ctx_t *ctx );
+
+
+/* FullSpec
+ * returns 'src.<tbl>.<colspec>'
+ */
+#define ColumnReaderFullSpec( self, ctx ) \
+ POLY_DISPATCH_PTR ( full_spec, self, const COLREADER_IMPL, ctx )
+
+
+/* IdRange
+ * returns the number of ids available
+ * and optionally the first id
+ */
+#define ColumnReaderIdRange( self, ctx, opt_first ) \
+ POLY_DISPATCH_INT ( id_range, self, const COLREADER_IMPL, ctx, opt_first )
+
+
+/* PreCopy
+ * PostCopy
+ * handlers for any operations
+ */
+#define ColumnReaderPreCopy( self, ctx ) \
+ POLY_DISPATCH_VOID ( pre_copy, self, COLREADER_IMPL, ctx )
+#define ColumnReaderPostCopy( self, ctx ) \
+ POLY_DISPATCH_VOID ( post_copy, self, COLREADER_IMPL, ctx )
+
+
+/* Read
+ * read next row of data
+ * returns NULL if no rows are available
+ */
+#define ColumnReaderRead( self, ctx, row_id, elem_bits, boff, row_len ) \
+ POLY_DISPATCH_PTR ( read, self, COLREADER_IMPL, ctx, row_id, elem_bits, boff, row_len )
+
+
+/* Init
+ */
+void ColumnReaderInit ( ColumnReader *self, const ctx_t *ctx, const ColumnReader_vt *vt );
+
+/* Destroy
+ */
+#define ColumnReaderDestroy( self, ctx ) \
+ ( ( void ) 0 )
+
+
+/*--------------------------------------------------------------------------
+ * ColumnWriter
+ * interface to write column in serial order
+ */
+typedef struct ColumnWriter_vt ColumnWriter_vt;
+
+typedef struct ColumnWriter ColumnWriter;
+struct ColumnWriter
+{
+ const ColumnWriter_vt *vt;
+ KRefcount refcount;
+ bool mapped;
+ uint8_t align [ 3 ];
+};
+
+#ifndef COLWRITER_IMPL
+#define COLWRITER_IMPL ColumnWriter
+#endif
+
+struct ColumnWriter_vt
+{
+ /* called by Release */
+ void ( * whack ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+
+ /* full spec */
+ const char* ( * full_spec ) ( const COLWRITER_IMPL *self, const ctx_t *ctx );
+
+ /* pre-post copy handlers */
+ void ( * pre_copy ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+ void ( * post_copy ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+
+ /* write row to destination */
+ void ( * write ) ( COLWRITER_IMPL *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len );
+ void ( * write_static ) ( COLWRITER_IMPL *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count );
+
+ /* commit all writes */
+ void ( * commit ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* MakeColumnWriter
+ * make simple column writer
+ */
+ColumnWriter *TablePairMakeColumnWriter ( struct TablePair *self, const ctx_t *ctx,
+ struct VCursor *opt_curs, const char *colspec );
+
+
+/* Release
+ * releases reference
+ */
+void ColumnWriterRelease ( ColumnWriter *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+ColumnWriter *ColumnWriterDuplicate ( const ColumnWriter *self, const ctx_t *ctx );
+
+
+/* FullSpec
+ * returns 'dst.<tbl>.<colspec>'
+ */
+#define ColumnWriterFullSpec( self, ctx ) \
+ POLY_DISPATCH_PTR ( full_spec, self, const COLWRITER_IMPL, ctx )
+
+
+/* PreCopy
+ * PostCopy
+ * handlers for any operations
+ */
+#define ColumnWriterPreCopy( self, ctx ) \
+ POLY_DISPATCH_VOID ( pre_copy, self, COLWRITER_IMPL, ctx )
+#define ColumnWriterPostCopy( self, ctx ) \
+ POLY_DISPATCH_VOID ( post_copy, self, COLWRITER_IMPL, ctx )
+
+
+/* Write
+ * write a row of data
+ */
+#define ColumnWriterWrite( self, ctx, elem_bits, data, boff, row_len ) \
+ POLY_DISPATCH_VOID ( write, self, COLWRITER_IMPL, ctx, elem_bits, data, boff, row_len )
+
+/* WriteStatic
+ * writes a repeated row
+ */
+#define ColumnWriterWriteStatic( self, ctx, elem_bits, data, boff, row_len, count ) \
+ POLY_DISPATCH_VOID ( write_static, self, COLWRITER_IMPL, ctx, elem_bits, data, boff, row_len, count )
+
+
+/* Commit
+ * commits all writes
+ */
+#define ColumnWriterCommit( self, ctx ) \
+ POLY_DISPATCH_VOID ( commit, self, COLWRITER_IMPL, ctx )
+
+
+/* Init
+ */
+void ColumnWriterInit ( ColumnWriter *self, const ctx_t *ctx,
+ const ColumnWriter_vt *vt, bool mapped );
+
+/* Destroy
+ */
+#define ColumnWriterDestroy( self, ctx ) \
+ ( ( void ) 0 )
+
+
+/*--------------------------------------------------------------------------
+ * ColumnPair
+ * interface to pairing of source and destination columns
+ */
+typedef struct ColumnPair ColumnPair;
+struct ColumnPair
+{
+ ColumnReader *reader;
+ ColumnWriter *writer;
+
+ const char *colspec;
+
+ size_t full_spec_size;
+
+ KRefcount refcount;
+
+ bool is_static;
+
+ bool is_mapped;
+
+ bool presorted;
+
+ bool large;
+
+ char full_spec [ 1 ];
+};
+
+
+/* MakeColumnPair
+ * make a simple ColumnPair
+ * takes an optional source VCursor
+ * and a colspec
+ */
+ColumnPair *TablePairMakeColumnPair ( struct TablePair *self, const ctx_t *ctx,
+ ColumnReader *reader, ColumnWriter *writer, const char *colspec, bool large );
+
+ColumnPair *TablePairMakeStaticColumnPair ( struct TablePair *self, const ctx_t *ctx,
+ ColumnReader *reader, ColumnWriter *writer, const char *colspec );
+
+
+/* Release
+ * called by table at end of copy
+ */
+void ColumnPairRelease ( ColumnPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+ColumnPair *ColumnPairDuplicate ( const ColumnPair *self, const ctx_t *ctx );
+
+
+/* PreCopy
+ * PostCopy
+ */
+void ColumnPairPreCopy ( const ColumnPair *self, const ctx_t *ctx );
+void ColumnPairPostCopy ( const ColumnPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ * copy from source to destination column
+ */
+void ColumnPairCopy ( ColumnPair *self, const ctx_t *ctx, struct RowSet *rs );
+
+
+/* CopyStatic
+ * copy static column from source to destination
+ */
+void ColumnPairCopyStatic ( ColumnPair *self, const ctx_t *ctx, int64_t first_id, uint64_t count );
+
+
+#endif /* _h_sra_sort_col_pair_ */
diff --git a/tools/sra-sort/csra-pair.c b/tools/sra-sort/csra-pair.c
new file mode 100644
index 0000000..579863c
--- /dev/null
+++ b/tools/sra-sort/csra-pair.c
@@ -0,0 +1,216 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct cSRAPair;
+#define DBPAIR_IMPL struct cSRAPair
+
+#include "csra-pair.h"
+#include "csra-tbl.h"
+#include "meta-pair.h"
+#include "dir-pair.h"
+#include "sra-sort.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "map-file.h"
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( csra-pair );
+
+
+/*--------------------------------------------------------------------------
+ * cSRAPair
+ */
+
+static
+void cSRAPairWhack ( cSRAPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* destroy me */
+ MapFileRelease ( self -> seq_idx, ctx );
+ MapFileRelease ( self -> sa_idx, ctx );
+ MapFileRelease ( self -> pa_idx, ctx );
+
+ DbPairDestroy ( & self -> dad, ctx );
+
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+TablePair *cSRAPairMakeTablePair ( cSRAPair *self, const ctx_t *ctx,
+ const char *member, const char *name, uint32_t align_idx, bool required, bool reorder,
+ TablePair* ( * make ) ( DbPair *self, const ctx_t *ctx, const VTable *src, VTable *dst, const char *name, bool reorder ) )
+{
+ FUNC_ENTRY ( ctx );
+
+ TablePair *tbl;
+
+ if ( name == NULL )
+ name = member;
+
+ TRY ( tbl = DbPairMakeTablePair ( & self -> dad, ctx, member, name, required, reorder, make ) )
+ {
+ if ( tbl != NULL )
+ {
+ TRY ( DbPairAddTablePair ( & self -> dad, ctx, tbl ) )
+ {
+ ( ( cSRATblPair* ) tbl ) -> align_idx = align_idx;
+ return tbl;
+ }
+
+ TablePairRelease ( tbl, ctx );
+ }
+ }
+
+ return NULL;
+}
+
+static
+void cSRAPairExplode ( cSRAPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ TablePair *tbl;
+
+ TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, "REFERENCE", NULL, 0, true, false, cSRATblPairMakeRef ) )
+ {
+ self -> reference = tbl;
+
+ TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, "PRIMARY_ALIGNMENT", NULL, 1, true, true, cSRATblPairMakeAlign ) )
+ {
+ self -> prim_align = tbl;
+
+ TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, "SECONDARY_ALIGNMENT", NULL, 2, false, true, cSRATblPairMakeAlign ) )
+ {
+ self -> sec_align = tbl;
+
+ TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, NULL, "EVIDENCE_ALIGNMENT", 3, false, false, cSRATblPairMakeAlign ) )
+ {
+ self -> evidence_align = tbl;
+
+ TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, NULL, "SEQUENCE", 0, false, true, cSRATblPairMakeSeq ) )
+ {
+ DirPair *dir;
+
+ self -> sequence = tbl;
+
+ TRY ( dir = DbPairMakeDirPair ( & self -> dad, ctx, "extra", false, DbPairMakeStdDirPair ) )
+ {
+ ON_FAIL ( DbPairAddDirPair ( & self -> dad, ctx, dir ) )
+ DirPairRelease ( dir, ctx );
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+static
+const char *cSRAPairGetTblMember ( const cSRAPair *self, const ctx_t *ctx, const VTable *src, const char *name )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* special kludge for "SEQUENCE" table */
+ if ( strcmp ( name, "SEQUENCE" ) == 0 )
+ {
+ /* determine whether table has CMP_CSREAD */
+ rc_t rc;
+ const VCursor *curs;
+
+ STATUS ( 4, "determining member name of SEQUENCE table" );
+
+ rc = VTableCreateCursorRead ( src, & curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VTableOpenCursorRead failed on '%s.%s'", self -> dad . full_spec, name );
+ else
+ {
+ uint32_t idx;
+ rc = VCursorAddColumn ( curs, & idx, "CMP_CSREAD" );
+ if ( rc == 0 )
+ {
+ rc = VCursorOpen ( curs );
+ if ( rc == 0 )
+ name = "CS_SEQUENCE";
+ }
+
+ VCursorRelease ( curs );
+ }
+
+ STATUS ( 4, "SEQUENCE table member name determined to be '%s'", name );
+ }
+
+ return name;
+}
+
+static DbPair_vt cSRAPair_vt =
+{
+ cSRAPairWhack,
+ cSRAPairExplode,
+ cSRAPairGetTblMember
+};
+
+DbPair *cSRAPairMake ( const ctx_t *ctx,
+ const VDatabase *src, VDatabase *dst, const char *name )
+{
+ FUNC_ENTRY ( ctx );
+
+ cSRAPair *db;
+
+ TRY ( db = MemAlloc ( ctx, sizeof * db, true ) )
+ {
+ TRY ( DbPairInit ( & db -> dad, ctx, & cSRAPair_vt, src, dst, name, NULL ) )
+ {
+ static const char *exclude_tbls [] =
+ {
+ "EVIDENCE_ALIGNMENT",
+ "PRIMARY_ALIGNMENT",
+ "REFERENCE",
+ "SECONDARY_ALIGNMENT",
+ "SEQUENCE"
+ };
+ db -> dad . exclude_tbls = exclude_tbls;
+
+ return & db -> dad;
+ }
+
+ MemFree ( ctx, db, sizeof * db );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/csra-pair.h b/tools/sra-sort/csra-pair.h
new file mode 100644
index 0000000..a9de62e
--- /dev/null
+++ b/tools/sra-sort/csra-pair.h
@@ -0,0 +1,84 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_csra_pair_
+#define _h_sra_sort_csra_pair_
+
+#ifndef _h_sra_sort_db_pair_
+#include "db-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct TablePair;
+struct ColumnWriter;
+
+
+/*--------------------------------------------------------------------------
+ * cSRAPair
+ * interface to pairing of source and destination tables
+ */
+typedef struct cSRAPair cSRAPair;
+struct cSRAPair
+{
+ DbPair dad;
+
+ /* for ultimate metadata */
+ int64_t first_half_aligned_spot;
+ int64_t first_unaligned_spot;
+
+ /* the reference table */
+ struct TablePair *reference;
+
+ /* the alignment tables */
+ struct TablePair *prim_align, *sec_align, *evidence_align;
+
+ /* the sequence table */
+ struct TablePair *sequence;
+
+ /* mapping indices */
+ struct MapFile *pa_idx, *sa_idx, *seq_idx;
+};
+
+
+/* Make
+ * makes an object based upon open source and destination VDatabase objects
+ */
+DbPair *cSRAPairMake ( const ctx_t *ctx,
+ struct VDatabase const *src, struct VDatabase *dst, const char *name );
+
+
+/* MakeFirstHalfAlignedRowIdCaptureWriter
+ * a simple monitor on SEQUENCE.PRIMARY_ALIGNMENT_ID looking for
+ * half-aligned spots and capturing the first occurrence.
+ */
+struct ColumnWriter *cSRAPairMakeFirstHalfAlignedRowIdCaptureWriter ( cSRAPair *self,
+ const ctx_t *ctx, struct ColumnWriter *writer );
+
+
+#endif /* _h_sra_sort_csra_pair_ */
diff --git a/tools/sra-sort/csra-tbl.c b/tools/sra-sort/csra-tbl.c
new file mode 100644
index 0000000..3365163
--- /dev/null
+++ b/tools/sra-sort/csra-tbl.c
@@ -0,0 +1,783 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct cSRATblPair;
+#define TBLPAIR_IMPL struct cSRATblPair
+
+#include "csra-tbl.h"
+#include "csra-pair.h"
+#include "ref-alignid-col.h"
+#include "row-set.h"
+#include "id-mapper-col.h"
+#include "buff-writer.h"
+#include "poslen-col-pair.h"
+#include "meta-pair.h"
+#include "map-file.h"
+#include "xcheck.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/table.h>
+#include <kdb/meta.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( csra-tbl );
+
+
+/*--------------------------------------------------------------------------
+ * RefTblPair
+ * generic database object pair
+ */
+
+static
+void cSRATblPairWhack ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ RowSetIteratorRelease ( self -> rsi, ctx );
+ TablePairDestroy ( & self -> dad, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void cSRATblPairDummyStub ( cSRATblPair *self, const ctx_t *ctx )
+{
+}
+
+
+/* REFERENCE table
+ */
+static
+ColumnPair *cSRATblPairMakePrimAlignIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col = NULL;
+ cSRAPair *csra = self -> csra;
+
+ ColumnReader *reader;
+ const char *colspec = "(I64)PRIMARY_ALIGNMENT_IDS";
+
+ TRY ( reader = TablePairMakeAlignIdReader ( & self -> dad, ctx,
+ csra -> prim_align, csra -> pa_idx, colspec ) )
+ {
+ ColumnWriter *writer;
+ TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+ {
+ col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, false );
+
+ ColumnWriterRelease ( writer, ctx );
+ }
+
+ ColumnReaderRelease ( reader, ctx );
+ }
+
+ return col;
+}
+
+static
+ColumnPair *cSRATblPairMakeSecAlignIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col = NULL;
+ cSRAPair *csra = self -> csra;
+
+ if ( csra -> sec_align != NULL )
+ {
+ ColumnReader *reader;
+ const char *colspec = "(I64)SECONDARY_ALIGNMENT_IDS";
+
+ TRY ( reader = TablePairMakeAlignIdReader ( & self -> dad, ctx,
+ csra -> sec_align, csra -> sa_idx, colspec ) )
+ {
+ ColumnWriter *writer;
+ TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+ {
+ col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, false );
+
+ ColumnWriterRelease ( writer, ctx );
+ }
+
+ ColumnReaderRelease ( reader, ctx );
+ }
+ }
+
+ return col;
+}
+
+static
+void cSRATblPairExplodeRef ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col;
+
+ TRY ( col = cSRATblPairMakePrimAlignIdColPair ( self, ctx ) )
+ {
+ TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+ {
+ TRY ( col = cSRATblPairMakeSecAlignIdColPair ( self, ctx ) )
+ {
+ TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+ {
+ }
+ CATCH_ALL ()
+ {
+ ColumnPairRelease ( col, ctx );
+ }
+ }
+ }
+ CATCH_ALL ()
+ {
+ ColumnPairRelease ( col, ctx );
+ }
+ }
+}
+
+static
+ColumnPair *cSRATblPairMakeColumnPairRef ( cSRATblPair *self, const ctx_t *ctx,
+ struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+ FUNC_ENTRY ( ctx );
+ return TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, large );
+}
+
+static
+RowSetIterator *cSRATblPairGetRowSetIteratorRef ( cSRATblPair *self, const ctx_t *ctx, bool mapping, bool large )
+{
+ FUNC_ENTRY ( ctx );
+ const bool is_paired = false;
+ assert ( mapping == false );
+ return TablePairMakeRowSetIterator ( & self -> dad, ctx, NULL, is_paired, large );
+}
+
+static TablePair_vt cSRATblPair_Ref_vt =
+{
+ cSRATblPairWhack,
+ cSRATblPairDummyStub,
+ cSRATblPairExplodeRef,
+ cSRATblPairMakeColumnPairRef,
+ cSRATblPairDummyStub,
+ cSRATblPairDummyStub,
+ cSRATblPairGetRowSetIteratorRef
+};
+
+
+
+/* *_ALIGNMENT tables
+ */
+
+static
+ColumnPair *cSRATblPairMakeSeqSpotIdColPairPrim ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col = NULL;
+ cSRAPair *csra = self -> csra;
+
+ ColumnReader *reader;
+ const char *colspec = "(I64)SEQ_SPOT_ID";
+
+ /* we expect this column to be present */
+ TRY ( reader = TablePairMakeColumnReader ( & self -> dad, ctx, NULL, colspec, true ) )
+ {
+ ColumnWriter *writer;
+ TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+ {
+ ColumnWriter *mapped;
+ const bool can_assign_ids = true;
+ TRY ( mapped = TablePairMakeMapRowIdWriter ( & self -> dad, ctx, writer, csra -> seq_idx, can_assign_ids ) )
+ {
+ ColumnWriter *buffered;
+ TRY ( buffered = cSRATblPairMakeBufferedColumnWriter ( self, ctx, mapped ) )
+ {
+ col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, false );
+
+ ColumnWriterRelease ( buffered, ctx );
+ }
+
+ ColumnWriterRelease ( mapped, ctx );
+ }
+
+ ColumnWriterRelease ( writer, ctx );
+ }
+
+ ColumnReaderRelease ( reader, ctx );
+ }
+
+ return col;
+}
+
+static
+ColumnPair *cSRATblPairMakeSeqSpotIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col = NULL;
+ cSRAPair *csra = self -> csra;
+
+ ColumnReader *reader;
+ const char *colspec = "(I64)SEQ_SPOT_ID";
+
+ /* we expect this column to be present */
+ TRY ( reader = TablePairMakeColumnReader ( & self -> dad, ctx, NULL, colspec, true ) )
+ {
+ ColumnWriter *writer;
+ TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+ {
+ ColumnWriter *buffered;
+ /* create a buffered writer with NO id-assignment capabilities. */
+ TRY ( buffered = cSRATblPairMakeBufferedIdRemapColumnWriter ( self, ctx,
+ writer, csra -> seq_idx, false ) )
+ {
+ col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, false );
+
+ ColumnWriterRelease ( buffered, ctx );
+ }
+
+ ColumnWriterRelease ( writer, ctx );
+ }
+
+ ColumnReaderRelease ( reader, ctx );
+ }
+
+ return col;
+}
+
+static
+ColumnPair *cSRATblPairMakePoslenColPair ( cSRATblPair *self, const ctx_t *ctx, const MapFile *idx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col = NULL;
+
+ ColumnReader *reader;
+ const char *colspec = "(U64)GLOBAL_POSLEN";
+
+ /* we expect this column to be present */
+ TRY ( reader = TablePairMakePoslenColReader ( & self -> dad, ctx, idx, colspec ) )
+ {
+ ColumnWriter *writer;
+ TRY ( writer = TablePairMakePoslenColWriter ( & self -> dad, ctx, NULL, colspec ) )
+ {
+ col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, false );
+
+ ColumnWriterRelease ( writer, ctx );
+ }
+
+ ColumnReaderRelease ( reader, ctx );
+ }
+
+ return col;
+}
+
+static
+void cSRATblPairPreExplodeAlign ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ cSRAPair *csra = self -> csra;
+
+ switch ( self -> align_idx )
+ {
+ case 1:
+ csra -> pa_idx = MapFileMakeForPoslen ( ctx, csra -> prim_align -> name );
+ break;
+ case 2:
+ csra -> sa_idx = MapFileMakeForPoslen ( ctx, csra -> sec_align -> name );
+ break;
+ }
+}
+
+static
+void cSRATblPairExplodeAlign ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col;
+
+ /* create special case for SEQ_SPOT_ID */
+ switch ( self -> align_idx )
+ {
+ case 1:
+ col = cSRATblPairMakeSeqSpotIdColPairPrim ( self, ctx );
+ break;
+ case 0:
+ case 2:
+ case 3:
+ col = cSRATblPairMakeSeqSpotIdColPair ( self, ctx );
+ break;
+ default:
+ ANNOTATE ( "not going to dignify with an rc - bad align_idx" );
+ return;
+ }
+
+ if ( ! FAILED () )
+ {
+ TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+ {
+ cSRAPair *csra = self -> csra;
+
+ switch ( self -> align_idx )
+ {
+ case 1:
+ col = cSRATblPairMakePoslenColPair ( self, ctx, csra -> pa_idx );
+ break;
+ case 2:
+ col = cSRATblPairMakePoslenColPair ( self, ctx, csra -> sa_idx );
+ break;
+ default:
+ return;
+ }
+
+ if ( ! FAILED () )
+ {
+ TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+ {
+ return;
+ }
+ }
+ }
+
+ ColumnPairRelease ( col, ctx );
+ }
+}
+
+static
+ColumnPair *cSRATblPairMakeColumnPairAlign ( cSRATblPair *self, const ctx_t *ctx,
+ struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+ FUNC_ENTRY ( ctx );
+
+ MapFile *idx = NULL;
+ ColumnPair *col = NULL;
+ ColumnWriter *buffered;
+
+ switch ( self -> align_idx )
+ {
+ case 0:
+ case 3:
+ return TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, large );
+ case 1:
+ case 2:
+ {
+ /* look for special MATE_ALIGN_ID column */
+ const char *colname = strrchr ( colspec, ')' );
+ if ( colname ++ == NULL )
+ colname = colspec;
+ if ( strcmp ( colname, "MATE_ALIGN_ID" ) == 0 )
+ {
+ cSRAPair *csra = self -> csra;
+ idx = self -> align_idx == 1 ? csra -> pa_idx : csra -> sa_idx;
+ }
+ break;
+ }
+
+ default:
+ ANNOTATE ( "not going to dignify with an rc - bad align_idx" );
+ return NULL;
+ }
+
+ /* create a buffer on writer, possibly with mapping */
+ buffered = ( idx != NULL ) ?
+ /* create a buffered mapping writer but WITHOUT id assignment capabilities */
+ cSRATblPairMakeBufferedIdRemapColumnWriter ( self, ctx, writer, idx, false ):
+ /* create a normal buffered writer */
+ cSRATblPairMakeBufferedColumnWriter ( self, ctx, writer );
+
+ if ( ! FAILED () )
+ {
+ col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, large );
+ ColumnWriterRelease ( buffered, ctx );
+ }
+
+ return col;
+}
+
+static
+void cSRATblPairPostCopyAlign ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ cSRAPair *csra = self -> csra;
+
+ RowSetIteratorRelease ( self -> rsi, ctx );
+ self -> rsi = NULL;
+
+ if ( self -> align_idx == 2 )
+ {
+ MapFileRelease ( self -> csra -> sa_idx, ctx );
+ self -> csra -> sa_idx = NULL;
+ }
+
+ switch ( self -> align_idx )
+ {
+ case 1:
+ CrossCheckRefAlignTbl ( ctx, csra -> reference -> dtbl, csra -> prim_align -> dtbl, "PRIMARY_ALIGNMENT" );
+ break;
+ case 2:
+ CrossCheckRefAlignTbl ( ctx, csra -> reference -> dtbl, csra -> sec_align -> dtbl, "SECONDARY_ALIGNMENT" );
+ break;
+ }
+}
+
+static
+RowSetIterator *cSRATblPairGetRowSetIteratorAlign ( cSRATblPair *self, const ctx_t *ctx, bool mapping, bool large )
+{
+ FUNC_ENTRY ( ctx );
+
+ TRY ( RowSetIteratorRelease ( self -> rsi, ctx ) )
+ {
+ cSRAPair *csra = self -> csra;
+ MapFile *idx = self -> align_idx == 1 ? csra -> pa_idx : csra -> sa_idx;
+ TRY ( self -> rsi = TablePairMakeRowSetIterator ( & self -> dad, ctx, idx, mapping, large ) )
+ {
+ return RowSetIteratorDuplicate ( self -> rsi, ctx );
+ }
+ }
+
+ return NULL;
+}
+
+
+static TablePair_vt cSRATblPair_Align_vt =
+{
+ cSRATblPairWhack,
+ cSRATblPairPreExplodeAlign,
+ cSRATblPairExplodeAlign,
+ cSRATblPairMakeColumnPairAlign,
+ cSRATblPairDummyStub,
+ cSRATblPairPostCopyAlign,
+ cSRATblPairGetRowSetIteratorAlign
+};
+
+
+
+/* SEQUENCE table
+ */
+
+static
+ColumnPair *cSRATblPairMakeSeqPrimAlignIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col = NULL;
+ cSRAPair *csra = self -> csra;
+
+
+ ColumnReader *reader;
+ const char *colspec = "(I64)PRIMARY_ALIGNMENT_ID";
+
+ /* this column may not be present if there are no alignments */
+ TRY ( reader = TablePairMakeColumnReader ( & self -> dad, ctx, NULL, colspec, false ) )
+ {
+ if ( reader != NULL )
+ {
+ ColumnWriter *writer;
+ TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+ {
+ ColumnWriter *capture;
+ TRY ( capture = cSRAPairMakeFirstHalfAlignedRowIdCaptureWriter ( csra, ctx, writer ) )
+ {
+ ColumnWriter *buffered;
+
+ /* create a buffered writer WITHOUT id-assignment capabilities. */
+ TRY ( buffered = cSRATblPairMakeBufferedIdRemapColumnWriter ( self, ctx,
+ capture, csra -> pa_idx, false ) )
+ {
+ col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, true );
+
+ ColumnWriterRelease ( buffered, ctx );
+ }
+
+ ColumnWriterRelease ( capture, ctx );
+ }
+
+ ColumnWriterRelease ( writer, ctx );
+ }
+
+ ColumnReaderRelease ( reader, ctx );
+ }
+ }
+
+ return col;
+}
+
+static
+void cSRATblPairPreExplodeSeq ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ TRY ( TablePairExplode ( & self -> dad, ctx ) )
+ {
+ cSRAPair *csra = self -> csra;
+ TRY ( csra -> seq_idx = MapFileMake ( ctx, self -> dad . name, true ) )
+ {
+ TRY ( MapFileSetIdRange ( csra -> seq_idx, ctx, self -> dad . first_id,
+ self -> dad . last_excl - self -> dad . first_id ) )
+ {
+ ColumnPair *col;
+
+ /* create special case for PRIMARY_ALIGNMENT_ID */
+ TRY ( col = cSRATblPairMakeSeqPrimAlignIdColPair ( self, ctx ) )
+ {
+ TablePairAddColumnPair ( & self -> dad, ctx, col );
+ }
+ }
+ }
+ }
+}
+
+static
+ColumnPair *cSRATblPairMakeColumnPairSeq ( cSRATblPair *self, const ctx_t *ctx,
+ struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnPair *col = NULL;
+ ColumnWriter *buffered;
+
+ TRY ( buffered = cSRATblPairMakeBufferedColumnWriter ( self, ctx, writer ) )
+ {
+ col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, large );
+ ColumnWriterRelease ( buffered, ctx );
+ }
+
+ return col;
+}
+
+static
+void cSRATblPairPreCopySeq ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ cSRAPair *csra = self -> csra;
+
+ STATUS ( 3, "assigning new row-ids to unaligned sequences" );
+ csra -> first_unaligned_spot = MapFileAllocMissingNewIds ( self -> csra -> seq_idx, ctx );
+}
+
+static
+void cSRATblPairPostCopySeq ( cSRATblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ cSRAPair *csra = self -> csra;
+
+ RowSetIteratorRelease ( self -> rsi, ctx );
+ self -> rsi = NULL;
+
+ MapFileRelease ( csra -> pa_idx, ctx );
+ csra -> pa_idx = NULL;
+
+ MapFileRelease ( csra -> seq_idx, ctx );
+ csra -> seq_idx = NULL;
+
+ /* record markers in metadata */
+ if ( ! FAILED () && ( csra -> first_half_aligned_spot != 0 || csra -> first_unaligned_spot != 0 ) )
+ {
+ MetaPair *meta = self -> dad . meta;
+ KMDataNode *unaligned_node;
+ const char *node_path = "unaligned";
+ rc_t rc = KMetadataOpenNodeUpdate ( meta -> dmeta, & unaligned_node, node_path );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMetadataOpenNodeUpdate failed to open '%s'", node_path );
+ else
+ {
+ KMDataNode *node;
+ if ( csra -> first_half_aligned_spot != 0 )
+ {
+ node_path = "first-half-aligned";
+ rc = KMDataNodeOpenNodeUpdate ( unaligned_node, & node, node_path );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMDataNodeOpenNodeUpdate failed to open 'unaligned/%s'", node_path );
+ else
+ {
+ rc = KMDataNodeWriteB64 ( node, & csra -> first_half_aligned_spot );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMDataNodeWriteB64 failed to write 'unaligned/%s'", node_path );
+
+ KMDataNodeRelease ( node );
+ }
+ }
+
+ if ( ! FAILED () && csra -> first_unaligned_spot != 0 )
+ {
+ node_path = "first-unaligned";
+ rc = KMDataNodeOpenNodeUpdate ( unaligned_node, & node, node_path );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMDataNodeOpenNodeUpdate failed to open 'unaligned/%s'", node_path );
+ else
+ {
+ rc = KMDataNodeWriteB64 ( node, & csra -> first_unaligned_spot );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMDataNodeWriteB64 failed to write 'unaligned/%s'", node_path );
+
+ KMDataNodeRelease ( node );
+ }
+ }
+
+ KMDataNodeRelease ( unaligned_node );
+ }
+ }
+}
+
+static
+RowSetIterator *cSRATblPairGetRowSetIteratorSeq ( cSRATblPair *self, const ctx_t *ctx, bool mapping, bool large )
+{
+ FUNC_ENTRY ( ctx );
+
+ TRY ( RowSetIteratorRelease ( self -> rsi, ctx ) )
+ {
+ cSRAPair *csra = self -> csra;
+ TRY ( self -> rsi = TablePairMakeRowSetIterator ( & self -> dad, ctx, csra -> seq_idx, mapping, large ) )
+ {
+ return RowSetIteratorDuplicate ( self -> rsi, ctx );
+ }
+ }
+
+ return NULL;
+}
+
+static TablePair_vt cSRATblPair_Seq_vt =
+{
+ cSRATblPairWhack,
+ cSRATblPairPreExplodeSeq,
+ cSRATblPairDummyStub,
+ cSRATblPairMakeColumnPairSeq,
+ cSRATblPairPreCopySeq,
+ cSRATblPairPostCopySeq,
+ cSRATblPairGetRowSetIteratorSeq
+};
+
+
+
+/* Init
+ * common initialization code
+ */
+static
+void cSRATblPairInit ( void *self, cSRATblPair *tbl )
+{
+ tbl -> csra = self;
+ tbl -> rsi = NULL;
+ tbl -> align_idx = 0;
+}
+
+
+/* MakeRef
+ * special cased for REFERENCE table
+ */
+TablePair *cSRATblPairMakeRef ( DbPair *self, const ctx_t *ctx,
+ const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+ FUNC_ENTRY ( ctx );
+
+ cSRATblPair *tbl;
+
+ TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+ {
+ TRY ( TablePairInit ( & tbl -> dad, ctx, & cSRATblPair_Ref_vt, src, dst, name, self -> full_spec, reorder ) )
+ {
+ static const char *exclude_cols [] = { "PRIMARY_ALIGNMENT_IDS", "SECONDARY_ALIGNMENT_IDS", "READ", "SPOT_GROUP", NULL };
+ static const char *nonstatic_cols [] = { "NAME", NULL };
+ tbl -> dad . exclude_col_names = exclude_cols;
+ tbl -> dad . nonstatic_col_names = nonstatic_cols;
+ cSRATblPairInit ( self, tbl );
+ return & tbl -> dad;
+ }
+
+ MemFree ( ctx, tbl, sizeof * tbl );
+ }
+
+ return NULL;
+}
+
+
+/* MakeAlign
+ * special cased for *_ALIGNMENT tables
+ */
+TablePair *cSRATblPairMakeAlign ( DbPair *self, const ctx_t *ctx,
+ const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+ FUNC_ENTRY ( ctx );
+
+ cSRATblPair *tbl;
+
+ TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+ {
+ TRY ( TablePairInit ( & tbl -> dad, ctx, & cSRATblPair_Align_vt, src, dst, name, self -> full_spec, reorder ) )
+ {
+ static const char *exclude_cols [] = { "GLOBAL_REF_START", "READ_LEN", "REF_ID", "REF_START", "REF_LEN", "SEQ_SPOT_ID", NULL };
+ static const char *unsorted_exclude_cols [] = { "READ_LEN", "SEQ_SPOT_ID", NULL };
+ tbl -> dad . exclude_col_names = reorder ? exclude_cols : unsorted_exclude_cols;
+ cSRATblPairInit ( self, tbl );
+ return & tbl -> dad;
+ }
+
+ MemFree ( ctx, tbl, sizeof * tbl );
+ }
+
+ return NULL;
+}
+
+
+/* MakeSeq
+ * special cased for SEQUENCE table
+ */
+TablePair *cSRATblPairMakeSeq ( DbPair *self, const ctx_t *ctx,
+ const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+ FUNC_ENTRY ( ctx );
+
+ cSRATblPair *tbl;
+
+ TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+ {
+ TRY ( TablePairInit ( & tbl -> dad, ctx, & cSRATblPair_Seq_vt, src, dst, name, self -> full_spec, reorder ) )
+ {
+ static const char *exclude_cols [] = { "PRIMARY_ALIGNMENT_ID", NULL };
+ static const char *nonstatic_cols [] = { "NAME_FMT", NULL };
+ static const char *large_cols [] = { "CMP_READ", "QUALITY", NULL };
+ static const char *exclude_meta [] = { "unaligned", NULL };
+ tbl -> dad . exclude_col_names = exclude_cols;
+ tbl -> dad . nonstatic_col_names = nonstatic_cols;
+ tbl -> dad . large_col_names = large_cols;
+ tbl -> dad . exclude_meta = exclude_meta;
+ cSRATblPairInit ( self, tbl );
+ return & tbl -> dad;
+ }
+
+ MemFree ( ctx, tbl, sizeof * tbl );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/csra-tbl.h b/tools/sra-sort/csra-tbl.h
new file mode 100644
index 0000000..7eae0b2
--- /dev/null
+++ b/tools/sra-sort/csra-tbl.h
@@ -0,0 +1,83 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_csra_tbl_
+#define _h_sra_sort_csra_tbl_
+
+#ifndef _h_sra_sort_tbl_pair_
+#include "tbl-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct cSRAPair;
+struct RowSetIterator;
+
+
+/*--------------------------------------------------------------------------
+ * cSRATblPair
+ * interface to pairing of source and destination tables
+ */
+typedef struct cSRATblPair cSRATblPair;
+struct cSRATblPair
+{
+ TablePair dad;
+
+ /* database */
+ struct cSRAPair *csra;
+
+ /* special rowset iterator */
+ struct RowSetIterator *rsi;
+
+ /* if an alignment table, which one? */
+ uint32_t align_idx;
+};
+
+
+/* MakeRef
+ * special cased for REFERENCE table
+ */
+TablePair *cSRATblPairMakeRef ( struct DbPair *self, const ctx_t *ctx,
+ struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+/* MakeAlign
+ * special cased for *_ALIGNMENT tables
+ */
+TablePair *cSRATblPairMakeAlign ( struct DbPair *self, const ctx_t *ctx,
+ struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+/* MakeSeq
+ * special cased for SEQUENCE table
+ */
+TablePair *cSRATblPairMakeSeq ( struct DbPair *self, const ctx_t *ctx,
+ struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+#endif /* _h_sra_sort_csra_tbl_ */
diff --git a/tools/sra-sort/ctx.h b/tools/sra-sort/ctx.h
new file mode 100644
index 0000000..30366db
--- /dev/null
+++ b/tools/sra-sort/ctx.h
@@ -0,0 +1,105 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_ctx_
+#define _h_sra_sort_ctx_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct Caps;
+
+
+/*--------------------------------------------------------------------------
+ * file entry
+ * modified from vdb-3 to not place requirements on Makefile
+ */
+#define FILE_ENTRY( __file_name__ ) \
+ static const char __mod__ [] = "tools/sra-sort"; \
+ static const char __file__ [] = STRINGIZE_DEFINE ( __file_name__ )
+
+
+/*--------------------------------------------------------------------------
+ * ctx_info_t
+ */
+typedef struct ctx_info_t ctx_info_t;
+struct ctx_info_t
+{
+ const char *mod;
+ const char *file;
+ const char *func;
+};
+
+#define DECLARE_CTX_INFO() \
+ static ctx_info_t ctx_info = { __mod__, __file__, __func__ }
+
+
+/*--------------------------------------------------------------------------
+ * ctx_t
+ * modified from vdb-3
+ */
+struct ctx_t
+{
+ struct Caps const *caps;
+ const ctx_t *caller;
+ const ctx_info_t *info;
+ volatile rc_t rc;
+};
+
+
+/* INIT
+ * initialize local context block
+ */
+static __inline__
+const ctx_t ctx_init ( ctx_t *new_ctx, const ctx_t **ctxp, const ctx_info_t *info )
+{
+ const ctx_t *ctx = * ctxp;
+ ctx_t local_ctx = { ctx -> caps, ctx, info };
+ * ctxp = new_ctx;
+ return local_ctx;
+}
+
+
+/* FUNC_ENTRY
+ */
+#define FUNC_ENTRY( ctx ) \
+ DECLARE_CTX_INFO (); \
+ ctx_t local_ctx = ctx_init ( & local_ctx, & ( ctx ), & ctx_info )
+
+
+/* POP_CTX
+ * intended to have VERY specific usage
+ */
+#define POP_CTX( ctx ) \
+ ctx = ctx -> caller
+
+
+#endif
diff --git a/tools/sra-sort/db-pair.c b/tools/sra-sort/db-pair.c
new file mode 100644
index 0000000..b350da1
--- /dev/null
+++ b/tools/sra-sort/db-pair.c
@@ -0,0 +1,883 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct DbPair StdDbPair;
+#define DBPAIR_IMPL StdDbPair
+
+#include "db-pair.h"
+#include "csra-pair.h"
+#include "tbl-pair.h"
+#include "dir-pair.h"
+#include "meta-pair.h"
+#include "sra-sort.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/database.h>
+#include <kdb/meta.h>
+#include <kdb/kdb-priv.h>
+#include <kfs/directory.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( db-pair );
+
+
+/*--------------------------------------------------------------------------
+ * StdDbPair
+ * generic database object pair
+ */
+
+static
+void StdDbPairWhack ( StdDbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ DbPairDestroy ( self, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void StdDbPairExplode ( StdDbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+}
+
+static
+const char *StdDbPairGetTblMember ( const StdDbPair *self, const ctx_t *ctx, const VTable *src, const char *name )
+{
+ return name;
+}
+
+static DbPair_vt StdDbPair_vt =
+{
+ StdDbPairWhack,
+ StdDbPairExplode,
+ StdDbPairGetTblMember
+};
+
+static
+DbPair *StdDbPairMake ( const ctx_t *ctx,
+ const VDatabase *src, VDatabase *dst, const char *name, const char *opt_full_spec )
+{
+ FUNC_ENTRY ( ctx );
+
+ StdDbPair *db;
+
+ TRY ( db = MemAlloc ( ctx, sizeof * db, false ) )
+ {
+ TRY ( DbPairInit ( db, ctx, & StdDbPair_vt, src, dst, name, opt_full_spec ) )
+ {
+ return db;
+ }
+
+ MemFree ( ctx, db, sizeof * db );
+ }
+
+ return NULL;
+}
+
+/*--------------------------------------------------------------------------
+ * DbPair
+ * interface code
+ */
+
+
+/* Make
+ * makes an object based upon open source and destination VDatabase objects
+ */
+static
+bool is_csra_db ( const VDatabase *src, const ctx_t *ctx )
+{
+ /* TBD - hack'o-matic */
+ return true;
+}
+
+DbPair *DbPairMake ( const ctx_t *ctx,
+ const VDatabase *src, VDatabase *dst, const char *name )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* intercept certain types of databases - right now cSRA */
+ if ( is_csra_db ( src, ctx ) )
+ return cSRAPairMake ( ctx, src, dst, name );
+
+ return StdDbPairMake ( ctx, src, dst, name, NULL );
+}
+
+DbPair *DbPairMakeStdDbPair ( DbPair *self, const ctx_t *ctx,
+ const VDatabase *src, VDatabase *dst, const char *name )
+{
+ FUNC_ENTRY ( ctx );
+ return StdDbPairMake ( ctx, src, dst, name, self -> full_spec );
+}
+
+
+/* Release
+ */
+void DbPairRelease ( DbPair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "DbPair" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcDatabase, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release DbPair" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+DbPair *DbPairDuplicate ( DbPair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "DbPair" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcDatabase, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate DbPair" );
+ return NULL;
+ }
+ }
+
+ return ( DbPair* ) self;
+}
+
+
+/* Copy
+ */
+static
+bool CC DbPairCopyDbPair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ TRY ( DbPairCopy ( item, ctx ) )
+ {
+ return false;
+ }
+ return true;
+}
+
+static
+bool CC DbPairCopyTablePair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ TRY ( TablePairCopy ( item, ctx ) )
+ {
+ return false;
+ }
+ return true;
+}
+
+static
+bool CC DbPairCopyDirPair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ TRY ( DirPairCopy ( item, ctx ) )
+ {
+ return false;
+ }
+ return true;
+}
+
+void DbPairCopy ( DbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ STATUS ( 2, "copying database '%s'", self -> full_spec );
+
+ /* copy metadata */
+ MetaPairCopy ( self -> meta, ctx, self -> full_spec, self -> exclude_meta );
+
+ /* copy all child databases */
+ if ( ! FAILED () && VectorLength ( & self -> dbs ) != 0 )
+ {
+ STATUS ( 2, "copying '%s' sub-databases", self -> full_spec );
+ VectorDoUntil ( & self -> dbs, false, DbPairCopyDbPair, ( void* ) ctx );
+ }
+
+ /* now we should be able to copy each table */
+ if ( ! FAILED () && VectorLength ( & self -> tbls ) != 0 )
+ {
+ STATUS ( 2, "copying '%s' tables", self -> full_spec );
+ VectorDoUntil ( & self -> tbls, false, DbPairCopyTablePair, ( void* ) ctx );
+ }
+
+ /* copy any directories - extra */
+ if ( ! FAILED () && VectorLength ( & self -> dirs ) != 0 )
+ {
+ STATUS ( 2, "copying '%s' directories", self -> full_spec );
+ VectorDoUntil ( & self -> dirs, false, DbPairCopyDirPair, ( void* ) ctx );
+ }
+}
+
+
+/* Explode
+ * probably a bad name, but it is intended to mean
+ * register all enclosed tables and databases
+ * and create a proper pair of KMetadata
+ */
+static
+MetaPair *DbPairExplodeMetaPair ( DbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ MetaPair *meta = NULL;
+ const KMetadata *smeta;
+
+ rc = VDatabaseOpenMetadataRead ( self -> sdb, & smeta );
+ if ( rc != 0 )
+ ERROR ( rc, "VDatabaseOpenMetadataRead failed on 'src.%s'", self -> full_spec );
+ else
+ {
+ KMetadata *dmeta;
+ rc = VDatabaseOpenMetadataUpdate ( self -> ddb, & dmeta );
+ if ( rc != 0 )
+ ERROR ( rc, "VDatabaseOpenMetadataUpdate failed on 'dst.%s'", self -> full_spec );
+ else
+ {
+ meta = MetaPairMake ( ctx, smeta, dmeta, self -> full_spec );
+
+ KMetadataRelease ( dmeta );
+ }
+
+ KMetadataRelease ( smeta );
+ }
+
+ return meta;
+}
+
+static
+void DbPairExplode ( DbPair *self, const ctx_t *ctx );
+
+static
+bool CC DbPairExplodeDbPair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ TRY ( DbPairExplode ( item, ctx ) )
+ {
+ return false;
+ }
+ return true;
+}
+
+static
+bool CC DbPairPreExplodeTablePair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ TRY ( TablePairPreExplode ( ( ( TablePair* ) item ), ctx ) )
+ {
+ return false;
+ }
+ return true;
+}
+
+static
+void DbPairDefaultExplodeDB ( DbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ KNamelist *names;
+
+ rc = VDatabaseListDB ( self -> sdb, & names );
+ if ( rc != 0 )
+ ERROR ( rc, "VDatabaseListDB failed listing '%s' databases", self -> full_spec );
+ else
+ {
+ uint32_t count;
+ rc = KNamelistCount ( names, & count );
+ if ( rc != 0 )
+ ERROR ( rc, "KNamelistCount failed listing '%s' databases", self -> full_spec );
+ else if ( count > 0 )
+ {
+ uint32_t i;
+ for ( i = 0; ! FAILED () && i < count; ++ i )
+ {
+ DbPair *db;
+
+ const char *name;
+ rc = KNamelistGet ( names, i, & name );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "KNamelistGet ( %u ) failed listing '%s' databases", i, self -> full_spec );
+ break;
+ }
+
+ if ( self -> exclude_dbs != NULL )
+ {
+ uint32_t j;
+ for ( j = 0; self -> exclude_dbs [ j ] != NULL; ++ j )
+ {
+ if ( strcmp ( name, self -> exclude_dbs [ j ] ) == 0 )
+ {
+ name = NULL;
+ break;
+ }
+ }
+ if ( name == NULL )
+ continue;
+ }
+
+ TRY ( db = DbPairMakeDbPair ( self, ctx, name, name, true, DbPairMakeStdDbPair ) )
+ {
+ ON_FAIL ( DbPairAddDbPair ( self, ctx, db ) )
+ {
+ DbPairRelease ( db, ctx );
+ }
+ }
+ }
+ }
+
+ KNamelistRelease ( names );
+ }
+}
+
+static
+void DbPairDefaultExplodeTbl ( DbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ KNamelist *names;
+
+ rc = VDatabaseListTbl ( self -> sdb, & names );
+ if ( rc != 0 )
+ ERROR ( rc, "VDatabaseListTbl failed listing '%s' tables", self -> full_spec );
+ else
+ {
+ uint32_t count;
+ rc = KNamelistCount ( names, & count );
+ if ( rc != 0 )
+ ERROR ( rc, "KNamelistCount failed listing '%s' tables", self -> full_spec );
+ else if ( count > 0 )
+ {
+ uint32_t i;
+ for ( i = 0; ! FAILED () && i < count; ++ i )
+ {
+ TablePair *tbl;
+
+ const char *name;
+ rc = KNamelistGet ( names, i, & name );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "KNamelistGet ( %u ) failed listing '%s' tables", i, self -> full_spec );
+ break;
+ }
+
+ if ( self -> exclude_tbls != NULL )
+ {
+ uint32_t j;
+ for ( j = 0; self -> exclude_tbls [ j ] != NULL; ++ j )
+ {
+ if ( strcmp ( name, self -> exclude_tbls [ j ] ) == 0 )
+ {
+ name = NULL;
+ break;
+ }
+ }
+ if ( name == NULL )
+ continue;
+ }
+
+ TRY ( tbl = DbPairMakeTablePair ( self, ctx, name, name, true, false, DbPairMakeStdTblPair ) )
+ {
+ ON_FAIL ( DbPairAddTablePair ( self, ctx, tbl ) )
+ {
+ TablePairRelease ( tbl, ctx );
+ }
+ }
+ }
+ }
+
+ KNamelistRelease ( names );
+ }
+}
+
+static
+void DbPairDefaultExplode ( DbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+#if 0
+ TRY ( DbPairDefaultExplodeDB ( self, ctx ) )
+#endif
+ {
+ DbPairDefaultExplodeTbl ( self, ctx );
+ }
+}
+
+static
+void DbPairExplode ( DbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ STATUS ( 2, "exploding database '%s'", self -> full_spec );
+
+ /* first, ask subclass to perform explicit explode */
+ if ( self == NULL )
+ {
+ rc_t rc = RC ( rcExe, rcDatabase, rcAccessing, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad DbPair" );
+ }
+ else
+ {
+ TRY ( ( * self -> vt -> explode ) ( self, ctx ) )
+ {
+ /* next, perform default self-explode for all dbs, tbls not excluded */
+ TRY ( DbPairDefaultExplode ( self, ctx ) )
+ {
+ /* now create metadata pair */
+ if ( self -> meta == NULL )
+ self -> meta = DbPairExplodeMetaPair ( self, ctx );
+ if ( ! FAILED () )
+ {
+ /* now explode all child dbs, tbls */
+ TRY ( VectorDoUntil ( & self -> dbs, false, DbPairExplodeDbPair, ( void* ) ctx ) )
+ {
+ VectorDoUntil ( & self -> tbls, false, DbPairPreExplodeTablePair, ( void* ) ctx );
+ }
+ }
+ }
+ }
+ }
+}
+
+
+/* Run
+ */
+void DbPairRun ( DbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ const Tool *tp = ctx -> caps -> tool;
+
+ STATUS ( 1, "input database is '%s'", tp -> src_path );
+ STATUS ( 1, "output database is '%s'", tp -> dst_path );
+
+ /* the first thing to do is to explode the database
+ to create sub-dbs, sub-tables, and metadata */
+ TRY ( DbPairExplode ( self, ctx ) )
+ {
+ /* now copy */
+ DbPairCopy ( self, ctx );
+ }
+
+ if ( FAILED () )
+ STATUS ( 1, "failed processing database '%s'", self -> full_spec );
+ else
+ STATUS ( 1, "finished processing database '%s'", self -> full_spec );
+}
+
+
+/* MakeDbPair
+ */
+DbPair *DbPairMakeDbPair ( DbPair *self, const ctx_t *ctx, const char *member, const char *name, bool required,
+ DbPair* ( * make ) ( DbPair *self, const ctx_t *ctx, const VDatabase *src, VDatabase *dst, const char *name ) )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const VDatabase *src;
+ DbPair *db = NULL;
+
+ STATUS ( 4, "creating db pair '%s.%s'", self -> full_spec, name );
+ rc = VDatabaseOpenDBRead ( self -> sdb, & src, name );
+ if ( rc != 0 )
+ {
+ if ( required )
+ ERROR ( rc, "VDatabaseOpenDBRead: failed to open db '%s.%s'", self -> full_spec, name );
+ else
+ STATUS ( 4, "optional db '%s.%s' was not opened", self -> full_spec, name );
+ }
+ else
+ {
+#if 0
+ if ( member == NULL )
+ member = DbPairGetTblMember ( self, ctx, src, name );
+#endif
+
+ if ( ! FAILED () )
+ {
+ VDatabase *dst;
+ const Tool *tp = ctx -> caps -> tool;
+ rc = VDatabaseCreateDB ( self -> ddb, & dst, member, kcmOpen | ( tp -> db . cmode & kcmMD5 ), name );
+ if ( rc != 0 )
+ ERROR ( rc, "VDatabaseCreateDB: failed to create %s db '%s.%s'", member, self -> full_spec, name );
+ else
+ {
+ db = ( * make ) ( self, ctx, src, dst, name );
+
+ VDatabaseRelease ( dst );
+ }
+ }
+
+ VDatabaseRelease ( src );
+ }
+
+ return db;
+}
+
+
+/* MakeTablePair
+ */
+TablePair *DbPairMakeTablePair ( DbPair *self, const ctx_t *ctx, const char *member, const char *name, bool required, bool reorder,
+ TablePair* ( * make ) ( DbPair *self, const ctx_t *ctx, const VTable *src, VTable *dst, const char *name, bool reorder ) )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const VTable *src;
+ TablePair *tbl = NULL;
+
+ STATUS ( 4, "creating table pair '%s.%s'", self -> full_spec, name );
+ rc = VDatabaseOpenTableRead ( self -> sdb, & src, name );
+ if ( rc != 0 )
+ {
+ if ( required )
+ ERROR ( rc, "VDatabaseOpenTableRead: failed to open table '%s.%s'", self -> full_spec, name );
+ else
+ STATUS ( 4, "optional table '%s.%s' was not opened", self -> full_spec, name );
+ }
+ else
+ {
+ if ( member == NULL )
+ member = DbPairGetTblMember ( self, ctx, src, name );
+
+ if ( ! FAILED () )
+ {
+ VTable *dst;
+ const Tool *tp = ctx -> caps -> tool;
+ rc = VDatabaseCreateTable ( self -> ddb, & dst, member, kcmOpen | ( tp -> db . cmode & kcmMD5 ), name );
+ if ( rc != 0 )
+ ERROR ( rc, "VDatabaseCreateTable: failed to create %s table '%s.%s'", member, self -> full_spec, name );
+ else
+ {
+ tbl = ( * make ) ( self, ctx, src, dst, name, reorder );
+
+ VTableRelease ( dst );
+ }
+ }
+
+ VTableRelease ( src );
+ }
+
+ return tbl;
+}
+
+
+/* AddDbPair
+ * called from implementations
+ */
+void DbPairAddDbPair ( DbPair *self, const ctx_t *ctx, DbPair *db )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ STATUS ( 4, "adding db pair '%s'", db -> full_spec );
+ rc = VectorAppend ( & self -> dbs, NULL, ( const void* ) db );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "failed to add db pair '%s'", db -> full_spec );
+}
+
+
+/* AddTablePair
+ * called from implementations
+ */
+void DbPairAddTablePair ( DbPair *self, const ctx_t *ctx, TablePair *tbl )
+{
+ if ( tbl != NULL )
+ {
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ STATUS ( 4, "adding table pair '%s'", tbl -> full_spec );
+ rc = VectorAppend ( & self -> tbls, NULL, ( const void* ) tbl );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "failed to add table pair '%s'", tbl -> full_spec );
+ }
+}
+
+
+/* MakeDirPair
+ */
+DirPair *DbPairMakeDirPair ( DbPair *self, const ctx_t *ctx, const char *name, bool required,
+ DirPair* ( * make ) ( DbPair *self, const ctx_t *ctx, const KDirectory *src, KDirectory *dst, const char *name ) )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ DirPair *dir = NULL;
+ const KDatabase *sdb;
+
+ STATUS ( 4, "creating directory pair '%s./%s'", self -> full_spec, name );
+
+ rc = VDatabaseOpenKDatabaseRead ( self -> sdb, & sdb );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VDatabaseOpenKDatabaseRead: failed to access KDatabase 'src.%s'", self -> full_spec );
+ else
+ {
+ KDatabase *ddb;
+ rc = VDatabaseOpenKDatabaseUpdate ( self -> ddb, & ddb );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VDatabaseOpenKDatabaseUpdate: failed to access KDatabase 'dst.%s'", self -> full_spec );
+ else
+ {
+ const KDirectory *sdir;
+ rc = KDatabaseOpenDirectoryRead ( sdb, & sdir );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KDatabaseOpenDirectoryRead: failed to access KDirectory 'src.%s'", self -> full_spec );
+ else
+ {
+ KDirectory *ddir;
+ rc = KDatabaseOpenDirectoryUpdate ( ddb, & ddir );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KDatabaseOpenDirectoryUpdate: failed to access KDirectory 'dst.%s'", self -> full_spec );
+ else
+ {
+ switch ( KDirectoryPathType ( sdir, name ) )
+ {
+ case kptNotFound:
+ if ( required )
+ {
+ rc = RC ( rcExe, rcDirectory, rcOpening, rcPath, rcNotFound );
+ ERROR ( rc, "required directory 'src.%s./%s' does not exist", self -> full_spec, name );
+ }
+ break;
+
+ case kptBadPath:
+ rc = RC ( rcExe, rcDirectory, rcOpening, rcPath, rcInvalid );
+ INTERNAL_ERROR ( rc, "directory path 'src.%s./%s' is invalid", self -> full_spec, name );
+ break;
+
+ case kptDir:
+ case kptDir | kptAlias:
+ {
+ dir = ( * make ) ( self, ctx, sdir, ddir, name );
+ break;
+ }
+
+ default:
+ rc = RC ( rcExe, rcDirectory, rcOpening, rcPath, rcIncorrect );
+ INTERNAL_ERROR ( rc, "directory path 'src.%s./%s' is not a directory", self -> full_spec, name );
+ }
+
+ KDirectoryRelease ( ddir );
+ }
+
+ KDirectoryRelease ( sdir );
+ }
+
+ KDatabaseRelease ( ddb );
+ }
+
+ KDatabaseRelease ( sdb );
+ }
+
+ return dir;
+}
+
+
+/* AddDirPair
+ * called from implementations
+ */
+void DbPairAddDirPair ( DbPair *self, const ctx_t *ctx, struct DirPair *dir )
+{
+ if ( dir != NULL )
+ {
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ STATUS ( 4, "adding directory pair '%s'", dir -> full_spec );
+ rc = VectorAppend ( & self -> dirs, NULL, ( const void* ) dir );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "failed to add directory pair '%s'", dir -> full_spec );
+ }
+}
+
+
+/* Init
+ */
+void DbPairInit ( DbPair *self, const ctx_t *ctx, const DbPair_vt *vt,
+ const VDatabase *src, VDatabase *dst, const char *name, const char *opt_full_spec )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcDatabase, rcConstructing, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad DbPair" );
+ return;
+ }
+
+ memset ( self, 0, sizeof * self );
+ self -> vt = vt;
+ VectorInit ( & self -> dbs, 0, 4 );
+ VectorInit ( & self -> tbls, 0, 8 );
+ VectorInit ( & self -> dirs, 0, 8 );
+
+ if ( opt_full_spec == NULL )
+ opt_full_spec = "";
+
+ rc = VDatabaseAddRef ( self -> sdb = src );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to duplicate db 'src.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+ else
+ {
+ rc = VDatabaseAddRef ( self -> ddb = dst );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to duplicate db 'dst.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+ else
+ {
+ char *full_spec;
+
+ self -> full_spec_size = string_size ( opt_full_spec ) + string_size ( name );
+ if ( opt_full_spec [ 0 ] != 0 )
+ ++ self -> full_spec_size;
+
+ TRY ( full_spec = MemAlloc ( ctx, self -> full_spec_size + 1, false ) )
+ {
+ if ( opt_full_spec [ 0 ] != 0 )
+ rc = string_printf ( full_spec, self -> full_spec_size + 1, NULL, "%s.%s", opt_full_spec, name );
+ else
+ strcpy ( full_spec, name );
+ if ( rc != 0 )
+ ABORT ( rc, "miscalculated string size" );
+ else
+ {
+ static const char *no_exclude [] = { NULL };
+
+ self -> full_spec = full_spec;
+ self -> name = full_spec;
+ if ( opt_full_spec [ 0 ] != 0 )
+ self -> name += string_size ( opt_full_spec ) + 1;
+
+ self -> exclude_dbs = no_exclude;
+ self -> exclude_tbls = no_exclude;
+ self -> exclude_meta = no_exclude;
+
+ KRefcountInit ( & self -> refcount, 1, "DbPair", "init", name );
+ return;
+ }
+ }
+
+ VDatabaseRelease ( self -> ddb );
+ self -> ddb = NULL;
+ }
+
+ VDatabaseRelease ( self -> sdb );
+ self -> sdb = NULL;
+ }
+}
+
+/* Destroy
+ * destroys superclass items
+ */
+static
+void CC DbPairReleaseDbPair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ DbPairRelease ( item, ctx );
+}
+
+static
+void CC DbPairReleaseTablePair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ TablePairRelease ( item, ctx );
+}
+
+static
+void CC DbPairReleaseDirPair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ DirPairRelease ( item, ctx );
+}
+
+void DbPairDestroy ( DbPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ VectorWhack ( & self -> dbs, DbPairReleaseDbPair, ( void* ) ctx );
+ VectorWhack ( & self -> tbls, DbPairReleaseTablePair, ( void* ) ctx );
+ VectorWhack ( & self -> dirs, DbPairReleaseDirPair, ( void* ) ctx );
+
+ MetaPairRelease ( self -> meta, ctx );
+
+ rc = VDatabaseRelease ( self -> ddb );
+ if ( rc != 0 )
+ WARN ( "VDatabaseRelease failed on 'dst.%s'", self -> full_spec );
+ VDatabaseRelease ( self -> sdb );
+
+ MemFree ( ctx, ( void* ) self -> full_spec, self -> full_spec_size + 1 );
+
+ memset ( self, 0, sizeof * self );
+}
diff --git a/tools/sra-sort/db-pair.h b/tools/sra-sort/db-pair.h
new file mode 100644
index 0000000..94bf817
--- /dev/null
+++ b/tools/sra-sort/db-pair.h
@@ -0,0 +1,208 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_db_pair_
+#define _h_sra_sort_db_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_vector_
+#include <klib/vector.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KDirectory;
+struct VTable;
+struct VDatabase;
+struct TablePair;
+struct MetaPair;
+struct DirPair;
+
+
+/*--------------------------------------------------------------------------
+ * DbPair
+ * interface to pairing of source and destination tables
+ */
+typedef struct DbPair_vt DbPair_vt;
+
+typedef struct DbPair DbPair;
+struct DbPair
+{
+ /* polymorphic */
+ const DbPair_vt *vt;
+
+ /* the pair of VDatabases */
+ struct VDatabase const *sdb;
+ struct VDatabase *ddb;
+
+ /* the set of enclosed DbPairs */
+ Vector dbs;
+
+ /* the set of TablePairs */
+ Vector tbls;
+
+ /* the set of DirPairs */
+ Vector dirs;
+
+ /* the pair of KMetadata */
+ struct MetaPair *meta;
+
+ /* exclusions */
+ const char **exclude_dbs;
+ const char **exclude_tbls;
+ const char **exclude_meta;
+
+ /* simple db name */
+ const char *name;
+
+ /* full db spec */
+ size_t full_spec_size;
+ const char *full_spec;
+
+ /* reference counting */
+ KRefcount refcount;
+ uint32_t align;
+};
+
+#ifndef DBPAIR_IMPL
+#define DBPAIR_IMPL DbPair
+#endif
+
+struct DbPair_vt
+{
+ void ( * whack ) ( DBPAIR_IMPL *self, const ctx_t *ctx );
+ void ( * explode ) ( DBPAIR_IMPL *self, const ctx_t *ctx );
+ const char* ( * get_tbl_mbr ) ( const DBPAIR_IMPL *self, const ctx_t *ctx,
+ struct VTable const *src, const char *name );
+};
+
+
+/* Make
+ * makes an object based upon open source and destination VDatabase objects
+ */
+DbPair *DbPairMake ( const ctx_t *ctx,
+ struct VDatabase const *src, struct VDatabase *dst, const char *name );
+
+
+/* Release
+ */
+void DbPairRelease ( DbPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+DbPair *DbPairDuplicate ( DbPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ * copy from source to destination
+ */
+void DbPairCopy ( DbPair *self, const ctx_t *ctx );
+
+
+/* Run
+ */
+void DbPairRun ( DbPair *self, const ctx_t *ctx );
+
+
+/* MakeDbPair
+ */
+DbPair *DbPairMakeDbPair ( DbPair *self, const ctx_t *ctx, const char *member, const char *name, bool required,
+ DbPair* ( * make ) ( DbPair *self, const ctx_t *ctx,
+ struct VDatabase const *src, struct VDatabase *dst, const char *name )
+ );
+
+DbPair *DbPairMakeStdDbPair ( struct DbPair *self, const ctx_t *ctx,
+ struct VDatabase const *src, struct VDatabase *dst, const char *name );
+
+
+/* MakeTablePair
+ */
+struct TablePair *DbPairMakeTablePair ( DbPair *self, const ctx_t *ctx,
+ const char *member, const char *name, bool required, bool reorder,
+ struct TablePair* ( * make ) ( DbPair *self, const ctx_t *ctx,
+ struct VTable const *src, struct VTable *dst, const char *name, bool reorder )
+ );
+
+
+/* GetTblMember
+ * v1 schema does not preserve member name with an object
+ * some schemas confuse types with the same name
+ */
+#define DbPairGetTblMember( self, ctx, src, name ) \
+ POLY_DISPATCH_PTR ( get_tbl_mbr, self, const DBPAIR_IMPL, ctx, src, name )
+
+
+/* AddDbPair
+ * called from implementations
+ */
+void DbPairAddDbPair ( DbPair *self, const ctx_t *ctx, DbPair *db );
+
+
+/* AddTablePair
+ * called from implementations
+ */
+void DbPairAddTablePair ( DbPair *self, const ctx_t *ctx, struct TablePair *tbl );
+
+
+/* MakeDirPair
+ */
+struct DirPair *DbPairMakeDirPair ( DbPair *self, const ctx_t *ctx, const char *name, bool required,
+ struct DirPair* ( * make ) ( DbPair *self, const ctx_t *ctx,
+ struct KDirectory const *src, struct KDirectory *dst, const char *name )
+ );
+
+
+/* AddDirPair
+ * called from implementations
+ */
+void DbPairAddDirPair ( DbPair *self, const ctx_t *ctx, struct DirPair *dir );
+
+
+/* Init
+ * initialize superclass with vt
+ * also db pair and name
+ * plus optional full-spec
+ */
+void DbPairInit ( DbPair *self, const ctx_t *ctx, const DbPair_vt *vt,
+ struct VDatabase const *src, struct VDatabase *dst,
+ const char *name, const char *opt_full_spec );
+
+/* Destroy
+ * destroys superclass items
+ */
+void DbPairDestroy ( DbPair *self, const ctx_t *ctx );
+
+
+#endif /* _h_sra_sort_db_pair_ */
diff --git a/tools/sra-sort/dir-pair.c b/tools/sra-sort/dir-pair.c
new file mode 100644
index 0000000..5f7f63a
--- /dev/null
+++ b/tools/sra-sort/dir-pair.c
@@ -0,0 +1,504 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct DirPair StdDirPair;
+#define DIRPAIR_IMPL StdDirPair
+
+#include "dir-pair.h"
+#include "db-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( dir-pair );
+
+
+static
+void StdDirPairWhack ( StdDirPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ DirPairDestroy ( self, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static DirPair_vt StdDirPair_vt =
+{
+ StdDirPairWhack
+};
+
+
+/* Make
+ * make a standard directory pair from existing KDirectory objects
+ */
+DirPair *DirPairMake ( const ctx_t *ctx,
+ const KDirectory *src, KDirectory *dst,
+ const char *name, const char *opt_full_spec )
+{
+ FUNC_ENTRY ( ctx );
+
+ StdDirPair *dir;
+
+ TRY ( dir = MemAlloc ( ctx, sizeof * dir, false ) )
+ {
+ TRY ( DirPairInit ( dir, ctx, & StdDirPair_vt, src, dst, name, opt_full_spec ) )
+ {
+ return dir;
+ }
+
+ MemFree ( ctx, dir, sizeof * dir );
+ }
+
+ return NULL;
+}
+
+
+DirPair *DbPairMakeStdDirPair ( DbPair *self, const ctx_t *ctx,
+ const KDirectory *src, KDirectory *dst, const char *name )
+{
+ FUNC_ENTRY ( ctx );
+ return DirPairMake ( ctx, src, dst, name, self -> full_spec );
+}
+
+
+/* Release
+ * called by db at end of copy
+ */
+void DirPairRelease ( DirPair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "DirPair" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcDirectory, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release DirPair" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+DirPair *DirPairDuplicate ( DirPair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "DirPair" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcDirectory, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate DirPair" );
+ return NULL;
+ }
+ }
+
+ return ( DirPair* ) self;
+}
+
+
+/* Copy
+ * copy from source to destination directory
+ */
+typedef struct DirPairCopyParams DirPairCopyParams;
+struct DirPairCopyParams
+{
+ const DirPair *self;
+ const ctx_t *ctx;
+ char *relpath;
+ size_t psize;
+ const KDirectory *src;
+ KDirectory *dst;
+};
+
+static
+rc_t DirPairCopyDir ( const DirPair *self, const ctx_t *ctx,
+ const KDirectory *src, KDirectory *dst, char *relpath, size_t psize );
+
+static
+rc_t DirPairCopyFile ( const DirPair *self, const ctx_t *ctx,
+ const KDirectory *src, KDirectory *dst, char *relpath )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* get source access mode */
+ uint32_t access;
+ rc_t rc = KDirectoryAccess ( src, & access, relpath );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to determine access mode of file 'dst.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ else
+ {
+ KFile *d;
+ rc = KDirectoryCreateFile ( dst, & d, false, access, kcmInit | kcmParents, relpath );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to create file 'dst.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ else
+ {
+ const KFile *s;
+ /* open source */
+ rc = KDirectoryOpenFileRead ( src, & s, relpath );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to open file 'src.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ else
+ {
+ const KMMap *mm;
+ rc = KMMapMakeMaxRead ( & mm, s );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to map file 'src.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ else
+ {
+ uint64_t mm_pos;
+
+ /* get initial position and size */
+ rc = KMMapPosition ( mm, & mm_pos );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to determine position of map file 'src.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ else
+ {
+ size_t mm_size;
+ rc = KMMapSize ( mm, & mm_size );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to determine size of map file 'src.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ else while ( mm_size != 0 )
+ {
+ size_t num_writ;
+ const void *mm_addr;
+
+ /* access address */
+ rc = KMMapAddrRead ( mm, & mm_addr );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to access address of map file 'src.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ break;
+ }
+
+ /* write region to output */
+ rc = KFileWriteAll ( d, mm_pos, mm_addr, mm_size, & num_writ );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to write to file 'dst.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ break;
+ }
+ if ( num_writ != mm_size )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+ ERROR ( rc, "failed to write to file 'dst.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ break;
+ }
+
+ /* now try to shift region */
+ mm_pos += mm_size;
+ rc = KMMapReposition ( mm, mm_pos, & mm_size );
+ if ( rc != 0 )
+ {
+ if ( GetRCState ( rc ) == rcInvalid )
+ rc = 0;
+ else
+ {
+ ERROR ( rc, "failed to remap file 'src.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ break;
+ }
+ }
+ }
+
+ KMMapRelease ( mm );
+ }
+
+ KFileRelease ( s );
+ }
+
+ KFileRelease ( d );
+ }
+ }
+
+ return rc;
+}
+
+static
+rc_t DirPairCopyAlias ( const DirPair *self, const ctx_t *ctx,
+ const KDirectory *src, KDirectory *dst, char *relpath )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+#if WINDOWS
+ rc = RC ( rcExe, rcAlias, rcCopying, rcFunction, rcUnsupported );
+ ERROR ( rc, "Windows... failed to create alias 'dst.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+#else
+ char apath [ 4096 ];
+
+ /* resolve the alias */
+ rc = KDirectoryResolveAlias ( src, false, apath, sizeof apath, relpath );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to resolve alias 'src.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ else
+ {
+ rc = KDirectoryCreateAlias ( dst, 0777, kcmInit, apath, relpath );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to create alias 'dst.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ }
+#endif
+
+ return rc;
+}
+
+static
+rc_t CC DirPairCopyEntry ( const KDirectory *local, uint32_t type, const char *name, void *data )
+{
+ DirPairCopyParams *pb = data;
+ const ctx_t *ctx = pb -> ctx;
+
+ FUNC_ENTRY ( ctx );
+
+ const DirPair *self = pb -> self;
+ char *relpath = pb -> relpath;
+ size_t num_writ, psize = pb -> psize;
+
+ /* since we are walking two directories in parallel,
+ build a path relative to each base directory and go */
+ rc_t rc = string_printf ( & relpath [ psize ], 4096 - psize, & num_writ, "/%s", name );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to build path for entry '%.*s%.*s/%s'",
+ self -> owner_spec_size, self -> full_spec,
+ ( uint32_t ) psize, relpath, name );
+ return rc;
+ }
+
+ /* see what type of entry we have */
+ switch ( type )
+ {
+ case kptFile:
+ return DirPairCopyFile ( pb -> self, ctx, pb -> src, pb -> dst, relpath );
+ case kptDir:
+ return DirPairCopyDir ( pb -> self, ctx, pb -> src, pb -> dst, relpath, psize + num_writ );
+ case kptFile | kptAlias:
+ case kptDir | kptAlias:
+ return DirPairCopyAlias ( pb -> self, ctx, pb -> src, pb -> dst, relpath );
+ }
+
+ rc = RC ( rcExe, rcDirectory, rcVisiting, rcType, rcUnsupported );
+ ERROR ( rc, "cannot copy entry '%.*s%s' - not a supported file system type",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ return rc;
+}
+
+static
+rc_t DirPairCopyDir ( const DirPair *self, const ctx_t *ctx,
+ const KDirectory *src, KDirectory *dst, char *relpath, size_t psize )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* get source access mode */
+ uint32_t access;
+ rc_t rc = KDirectoryAccess ( src, & access, relpath );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "failed to determine access mode of directory 'src.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ }
+ else
+ {
+ /* create the destination directory */
+ rc = KDirectoryCreateDir ( dst, access, kcmOpen | kcmParents, relpath );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to create directory 'dst.%.*s%s'",
+ self -> owner_spec_size, self -> full_spec, relpath );
+ else
+ {
+ DirPairCopyParams pb;
+
+ pb . self = self;
+ pb . ctx = ctx;
+ pb . relpath = relpath;
+ pb . psize = psize;
+ pb . src = src;
+ pb . dst = dst;
+
+ /* going to perform shallow copy */
+ rc = KDirectoryVisit ( src, false, DirPairCopyEntry, & pb, relpath );
+ }
+ }
+
+ return rc;
+}
+
+
+void DirPairCopy ( DirPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ size_t psize;
+ char relpath [ 4096 ];
+
+ STATUS ( 2, "copying directory '%s'", self -> full_spec );
+
+ rc = string_printf ( relpath, sizeof relpath, & psize, "./%s", self -> name );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "failed to build initial path string for '%s'", self -> full_spec );
+ else
+ {
+ DirPairCopyDir ( self, ctx, self -> sdir, self -> ddir, relpath, psize );
+ }
+}
+
+
+/* Init
+ */
+void DirPairInit ( DirPair *self, const ctx_t *ctx, const DirPair_vt *vt,
+ const KDirectory *src, KDirectory *dst,
+ const char *name, const char *full_spec )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcDirectory, rcConstructing, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad DirPair" );
+ return;
+ }
+
+ memset ( self, 0, sizeof * self );
+ self -> vt = vt;
+
+ rc = KDirectoryAddRef ( self -> sdir = src );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to duplicate dir 'src.%s./%s'", full_spec, name );
+ else
+ {
+ rc = KDirectoryAddRef ( self -> ddir = dst );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to duplicate dir 'dst.%s./%s'", full_spec, name );
+ else
+ {
+ char *new_full_spec;
+
+ self -> owner_spec_size = ( uint32_t ) string_size ( full_spec );
+ self -> full_spec_size = self -> owner_spec_size + string_size ( name ) + 2;
+
+ TRY ( new_full_spec = MemAlloc ( ctx, self -> full_spec_size + 1, false ) )
+ {
+ rc = string_printf ( new_full_spec, self -> full_spec_size + 1, NULL, "%s./%s", full_spec, name );
+ if ( rc != 0 )
+ ABORT ( rc, "miscalculated string size" );
+ else
+ {
+ self -> full_spec = new_full_spec;
+ self -> name = new_full_spec + self -> owner_spec_size + 2;
+
+ KRefcountInit ( & self -> refcount, 1, "DirPair", "init", name );
+ return;
+ }
+ }
+
+ KDirectoryRelease ( self -> ddir );
+ self -> ddir = NULL;
+ }
+
+ KDirectoryRelease ( self -> sdir );
+ self -> sdir = NULL;
+ }
+}
+
+/* Destroy
+ */
+void DirPairDestroy ( DirPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ rc = KDirectoryRelease ( self -> ddir );
+ if ( rc != 0 )
+ WARN ( "KDirectoryRelease failed on 'dst.%s'", self -> full_spec );
+ KDirectoryRelease ( self -> sdir );
+
+ MemFree ( ctx, ( void* ) self -> full_spec, self -> full_spec_size + 1 );
+
+ memset ( self, 0, sizeof * self );
+}
diff --git a/tools/sra-sort/dir-pair.h b/tools/sra-sort/dir-pair.h
new file mode 100644
index 0000000..7bccb93
--- /dev/null
+++ b/tools/sra-sort/dir-pair.h
@@ -0,0 +1,124 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_dir_pair_
+#define _h_sra_sort_dir_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct DbPair;
+struct KDirectory;
+
+
+/*--------------------------------------------------------------------------
+ * DirPair
+ * interface to pairing of source and destination directories
+ */
+typedef struct DirPair_vt DirPair_vt;
+
+typedef struct DirPair DirPair;
+struct DirPair
+{
+ /* polymorphic */
+ const DirPair_vt *vt;
+
+ /* the pair of KDirectories */
+ struct KDirectory const *sdir;
+ struct KDirectory *ddir;
+
+ /* simple directory name */
+ const char *name;
+
+ /* full directory spec */
+ size_t full_spec_size;
+ const char *full_spec;
+
+ /* reference counting */
+ KRefcount refcount;
+
+ /* owner spec size */
+ uint32_t owner_spec_size;
+};
+
+#ifndef DIRPAIR_IMPL
+#define DIRPAIR_IMPL DirPair
+#endif
+
+struct DirPair_vt
+{
+ void ( * whack ) ( DIRPAIR_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* Make
+ * make a standard directory pair from existing KDirectory objects
+ */
+DirPair *DirPairMake ( const ctx_t *ctx,
+ struct KDirectory const *src, struct KDirectory *dst,
+ const char *name, const char *full_spec );
+
+DirPair *DbPairMakeStdDirPair ( struct DbPair *self, const ctx_t *ctx,
+ struct KDirectory const *src, struct KDirectory *dst, const char *name );
+
+
+/* Release
+ * called by db at end of copy
+ */
+void DirPairRelease ( DirPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+DirPair *DirPairDuplicate ( DirPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ * copy from source to destination directory
+ */
+void DirPairCopy ( DirPair *self, const ctx_t *ctx );
+
+
+/* Init
+ */
+void DirPairInit ( DirPair *self, const ctx_t *ctx, const DirPair_vt *vt,
+ struct KDirectory const *src, struct KDirectory *dst,
+ const char *name, const char *opt_full_spec );
+
+/* Destroy
+ */
+void DirPairDestroy ( DirPair *self, const ctx_t *ctx );
+
+
+#endif /* _h_sra_sort_dir_pair_ */
diff --git a/tools/sra-sort/dump-blob-boundaries.c b/tools/sra-sort/dump-blob-boundaries.c
new file mode 100644
index 0000000..6639d8a
--- /dev/null
+++ b/tools/sra-sort/dump-blob-boundaries.c
@@ -0,0 +1,203 @@
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/column.h>
+#include <kdb/namelist.h>
+#include <klib/namelist.h>
+#include <klib/rc.h>
+
+#include <stdio.h>
+
+static int64_t blob_limit = 10;
+
+static
+uint32_t dump_col ( const KColumn *col, const char *dbname, const char *tblname, const char *colname )
+{
+ rc_t rc = 0;
+ int64_t row, first;
+ const KColumnBlob *blob;
+ uint32_t count, num_blobs;
+
+ for ( num_blobs = 0, row = 1; rc == 0 && num_blobs < blob_limit; ++ num_blobs, row = first + count )
+ {
+ rc = KColumnOpenBlobRead ( col, & blob, row );
+ if ( rc == 0 )
+ {
+ rc = KColumnBlobIdRange ( blob, & first, & count );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to get row-range for blob containing row '%s.%s.%s.%ld'\n", dbname, tblname, colname, row );
+ else
+ {
+ size_t num_read, remaining;
+ rc = KColumnBlobRead ( blob, 0, & first, 0, & num_read, & remaining );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to get size of blob containing row '%s.%s.%s.%ld'\n", dbname, tblname, colname, row );
+ else
+ {
+ printf ( " %ld .. %ld ( %u rows ), %zu bytes\n", first, first + count - 1, count, remaining );
+ }
+ }
+
+ KColumnBlobRelease ( blob );
+ }
+ else if ( GetRCState ( rc ) == rcNotFound )
+ return num_blobs;
+ else
+ {
+ fprintf ( stderr, "failed to open blob for row '%s.%s.%s.%ld'\n", dbname, tblname, colname, row );
+ }
+ }
+
+ for ( ; rc == 0; ++ num_blobs, row = first + count )
+ {
+ rc = KColumnOpenBlobRead ( col, & blob, row );
+ if ( rc == 0 )
+ {
+ rc = KColumnBlobIdRange ( blob, & first, & count );
+ KColumnBlobRelease ( blob );
+ }
+ }
+
+ return num_blobs;
+}
+
+static
+void dump_col_name ( const KTable *tbl, const char *dbname, const char *tblname, const char *colname )
+{
+ const KColumn *col;
+ rc_t rc = KTableOpenColumnRead ( tbl, & col, colname );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to open column '%s.%s.%s'\n", dbname, tblname, colname );
+ else
+ {
+ uint32_t num_blobs;
+ printf ( "COLUMN '%s.%s.%s'\n", dbname, tblname, colname );
+ num_blobs = dump_col ( col, dbname, tblname, colname );
+ KColumnRelease ( col );
+ if ( num_blobs > blob_limit )
+ printf ( " %u blobs in column\n", num_blobs );
+ }
+}
+
+static
+void dump_tbl ( const KTable *tbl, const char *tblname, int argc, char *argv [] )
+{
+ if ( argc >= 4 )
+ {
+ int i;
+ for ( i = 3; i < argc; ++ i )
+ {
+ dump_col_name ( tbl, argv [ 1 ], tblname, argv [ i ] );
+ }
+ }
+ else
+ {
+ KNamelist *names;
+ rc_t rc = KTableListCol ( tbl, & names );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to list columns for tbl '%s.%s'\n", argv [ 1 ], tblname );
+ else
+ {
+ uint32_t count;
+ rc = KNamelistCount ( names, & count );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to count columns for tbl '%s.%s'\n", argv [ 1 ], tblname );
+ else
+ {
+ uint32_t i;
+ for ( i = 0; i < count; ++ i )
+ {
+ const char *name;
+ rc = KNamelistGet ( names, i, & name );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to access column name [ %u ] for tbl '%s.%s'\n", i, argv [ 1 ], tblname );
+ else
+ {
+ dump_col_name ( tbl, argv [ 1 ], tblname, name );
+ }
+ }
+ }
+
+ KNamelistRelease ( names );
+ }
+ }
+}
+
+static
+void dump_tbl_name ( const KDatabase *db, const char *tblname, int argc, char *argv [] )
+{
+ const KTable *tbl;
+ rc_t rc = KDatabaseOpenTableRead ( db, & tbl, tblname );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to open table '%s.%s'\n", argv [ 1 ], tblname );
+ else
+ {
+ dump_tbl ( tbl, tblname, argc, argv );
+ KTableRelease ( tbl );
+ }
+}
+
+static
+void dump_db ( const KDatabase *db, int argc, char *argv [] )
+{
+ if ( argc >= 3 )
+ dump_tbl_name ( db, argv [ 2 ], argc, argv );
+ else
+ {
+ KNamelist *names;
+ rc_t rc = KDatabaseListTbl ( db, & names );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to list tables for db '%s'\n", argv [ 1 ] );
+ else
+ {
+ uint32_t count;
+ rc = KNamelistCount ( names, & count );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to count tables for db '%s'\n", argv [ 1 ] );
+ else
+ {
+ uint32_t i;
+ for ( i = 0; i < count; ++ i )
+ {
+ const char *name;
+ rc = KNamelistGet ( names, i, & name );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to access table name [ %u ] for db '%s'\n", i, argv [ 1 ] );
+ else
+ {
+ dump_tbl_name ( db, name, argc, argv );
+ }
+ }
+ }
+
+ KNamelistRelease ( names );
+ }
+ }
+}
+
+int main ( int argc, char *argv [] )
+{
+ if ( argc < 2 )
+ printf ( "Usage: %s database [ table [ col ... ] ]\n", argv [ 0 ] );
+ else
+ {
+ const KDBManager *mgr;
+ rc_t rc = KDBManagerMakeRead ( & mgr, NULL );
+ if ( rc == 0 )
+ {
+ const KDatabase *db;
+ rc = KDBManagerOpenDBRead ( mgr, & db, argv [ 1 ] );
+ if ( rc != 0 )
+ fprintf ( stderr, "failed to open database '%s'\n", argv [ 1 ] );
+ else
+ {
+ dump_db ( db, argc, argv );
+ KDatabaseRelease ( db );
+ }
+
+ KDBManagerRelease ( mgr );
+ }
+ }
+
+ return 0;
+}
diff --git a/tools/sra-sort/except.c b/tools/sra-sort/except.c
new file mode 100644
index 0000000..c95d7e0
--- /dev/null
+++ b/tools/sra-sort/except.c
@@ -0,0 +1,231 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "except.h"
+#include "status.h"
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/status.h>
+#include <klib/printf.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+FILE_ENTRY ( except );
+
+
+/*--------------------------------------------------------------------------
+ * exception-related activities
+ */
+
+static
+rc_t log_msg ( const ctx_t *ctx, uint32_t lineno, KLogLevel lvl, const char *msg )
+{
+#if _DEBUGGING
+ const ctx_info_t *ctx_info = ctx -> info;
+ return pLogMsg ( lvl, "$(mod)/$(file).c:$(line): $(func): $(msg)",
+ "mod=%s,file=%s,line=%u,func=%s,msg=%s",
+ ctx_info -> mod,
+ ctx_info -> file,
+ lineno,
+ ctx_info -> func,
+ msg );
+#else
+ return LogMsg ( lvl, msg );
+#endif
+}
+
+static
+rc_t log_err ( const ctx_t *ctx, uint32_t lineno, KLogLevel lvl, rc_t rc, const char *msg )
+{
+#if _DEBUGGING
+ const ctx_info_t *ctx_info = ctx -> info;
+ return pLogErr ( lvl, rc, "$(mod)/$(file).c:$(line): $(func): $(msg)",
+ "mod=%s,file=%s,line=%u,func=%s,msg=%s",
+ ctx_info -> mod,
+ ctx_info -> file,
+ lineno,
+ ctx_info -> func,
+ msg );
+#else
+ return LogErr ( lvl, rc, msg );
+#endif
+}
+
+static
+rc_t status_msg ( const ctx_t *ctx, uint32_t lineno, uint32_t level, const char *msg )
+{
+#if _DEBUGGING
+ const ctx_info_t *ctx_info = ctx -> info;
+ return KStsMsg ( "%s/%s.c:%u: %s: [ %u ] %s",
+ ctx_info -> mod,
+ ctx_info -> file,
+ lineno,
+ ctx_info -> func,
+ level,
+ msg );
+#else
+ return KStsMsg ( "%s", msg );
+#endif
+}
+
+
+/* Annotate
+ * make some annotation
+ * but not an error
+ */
+void Annotate ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, const char *msg, ... )
+{
+ rc_t rc2;
+ size_t num_writ;
+ char buff [ 8 * 1024 ];
+
+ va_list args;
+ va_start ( args, msg );
+
+ rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+ if ( rc2 != 0 )
+ log_err ( ctx, lineno, klogInt, rc2, "Annotate failure" );
+ else
+ log_msg ( ctx, lineno, level, buff );
+
+ va_end ( args );
+}
+
+
+/* Error
+ * make an annotation
+ * record an error as an rc_t
+ */
+void Error ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, rc_t rc, const char *msg, ... )
+{
+ rc_t rc2;
+ ctx_t *mctx;
+ size_t num_writ;
+ char buff [ 8 * 1024 ];
+
+ va_list args;
+ va_start ( args, msg );
+
+ rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+ if ( rc2 != 0 )
+ log_err ( ctx, lineno, klogInt, rc2, "Error annotation failure" );
+ else
+ log_err ( ctx, lineno, level, rc, buff );
+
+ va_end ( args );
+
+ for ( mctx = ( ctx_t* ) ctx; mctx != NULL && mctx -> rc == 0; mctx = ( ctx_t* ) mctx -> caller )
+ mctx -> rc = rc;
+}
+
+
+/* Abort
+ * make an annotation
+ * record an error as an rc_t
+ * exit process
+ */
+void Abort ( const ctx_t *ctx, uint32_t lineno, rc_t rc, const char *msg, ... )
+{
+ rc_t rc2;
+ ctx_t *mctx;
+ size_t num_writ;
+ char buff [ 8 * 1024 ];
+
+ va_list args;
+ va_start ( args, msg );
+
+ rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+ if ( rc2 != 0 )
+ log_err ( ctx, lineno, klogFatal, rc2, "Abort annotation failure" );
+ else
+ log_err ( ctx, lineno, klogFatal, rc, buff );
+
+ va_end ( args );
+
+ for ( mctx = ( ctx_t* ) ctx; mctx != NULL && mctx -> rc == 0; mctx = ( ctx_t* ) mctx -> caller )
+ mctx -> rc = rc;
+
+ exit ( -1 );
+}
+
+
+/* Clear
+ * clears annotation and error
+ */
+void ClearAnnotation ( const ctx_t *ctx )
+{
+ ClearError ( ctx );
+}
+
+
+/* ClearError
+ * clears error, leaving any annotation
+ */
+void ClearError ( const ctx_t *ctx )
+{
+ ctx_t *mctx;
+ for ( mctx = ( ctx_t* ) ctx; mctx != NULL && mctx -> rc != 0; mctx = ( ctx_t* ) mctx -> caller )
+ mctx -> rc = 0;
+}
+
+
+/* Status
+ * report status
+ */
+void Status ( const ctx_t *ctx, uint32_t lineno, uint32_t level, const char *msg, ... )
+{
+ if ( KStsLevelGet () >= level )
+ {
+ rc_t rc2;
+ size_t num_writ;
+ char buff [ 8 * 1024 ];
+
+ va_list args;
+ va_start ( args, msg );
+
+ rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+ if ( rc2 != 0 )
+ log_err ( ctx, lineno, klogInt, rc2, "Status failure" );
+ else
+ status_msg ( ctx, lineno, level, buff );
+
+ va_end ( args );
+ }
+}
+
+/* POLY_DISPATCH
+ * dispatch a polymorphic message
+ */
+void null_self_error ( const ctx_t *ctx, uint32_t lineno, const char *msg )
+{
+ rc_t rc = RC ( rcExe, rcFunction, rcResolving, rcSelf, rcNull );
+ Error ( ctx, lineno, klogInt, rc, "cannot dispatch message '%s'", msg );
+}
diff --git a/tools/sra-sort/except.h b/tools/sra-sort/except.h
new file mode 100644
index 0000000..911149b
--- /dev/null
+++ b/tools/sra-sort/except.h
@@ -0,0 +1,160 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_except_
+#define _h_sra_sort_except_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_log_
+#include <klib/log.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * exception-related macros
+ */
+
+
+/* ANNOTATE
+ * make some annotation
+ * but not an error
+ */
+void Annotate ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, const char *msg, ... );
+#define ANNOTATE( msg, ... ) \
+ Annotate ( ctx, __LINE__, klogInfo, msg, ## __VA_ARGS__ )
+
+
+/* WARN
+ * make some annotation
+ * but not an error
+ */
+#define WARN( msg, ... ) \
+ Annotate ( ctx, __LINE__, klogWarn, msg, ## __VA_ARGS__ )
+
+
+/* INFO_ERROR
+ * make an annotation
+ * record an informational error as an rc_t
+ */
+void Error ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, rc_t rc, const char *msg, ... );
+#define INFO_ERROR( rc, msg, ... ) \
+ Error ( ctx, __LINE__, klogInfo, rc, msg, ## __VA_ARGS__ )
+
+
+/* ERROR
+ * make an annotation
+ * record an error as an rc_t
+ */
+#ifdef ERROR
+#undef ERROR
+#endif
+#define ERROR( rc, msg, ... ) \
+ Error ( ctx, __LINE__, klogErr, rc, msg, ## __VA_ARGS__ )
+
+
+/* INTERNAL_ERROR
+ * make an annotation
+ * record an internal error as an rc_t
+ */
+#define INTERNAL_ERROR( rc, msg, ... ) \
+ Error ( ctx, __LINE__, klogInt, rc, msg, ## __VA_ARGS__ )
+
+
+/* SYSTEM_ERROR
+ * make an annotation
+ * record a system error as an rc_t
+ */
+#define SYSTEM_ERROR( rc, msg, ... ) \
+ Error ( ctx, __LINE__, klogSys, rc, msg, ## __VA_ARGS__ )
+
+
+/* ABORT
+ * make an annotation
+ * record an error as an rc_t
+ * exit process
+ */
+void Abort ( const ctx_t *ctx, uint32_t lineno, rc_t rc, const char *msg, ... );
+#define ABORT( rc, msg, ... ) \
+ Abort ( ctx, __LINE__, rc, msg, ## __VA_ARGS__ )
+
+
+/* FAILED
+ * a test of rc within ctx_t
+ */
+#ifdef FAILED
+#undef FAILED
+#endif
+#define FAILED() \
+ ( ctx -> rc != 0 )
+
+
+/* TRY
+ * another C language "try" macro
+ */
+#define TRY( expr ) \
+ expr; \
+ if ( ! FAILED () )
+
+
+/* CATCH
+ * attempts to catch rc on certain types
+ */
+#define CATCH( obj_code, state_code ) \
+ else if ( GetRCObject ( ctx -> rc ) == obj_code && GetRCState ( ctx -> rc ) == state_code )
+#define CATCH_STATE( state_code ) \
+ else if ( GetRCState ( ctx -> rc ) == state_code )
+#define CATCH_OBJ( obj_code ) \
+ else if ( GetRCObject ( ctx -> rc ) == obj_code )
+#define CATCH_ALL() \
+ else
+
+/* ON_FAIL
+ */
+#define ON_FAIL( expr ) \
+ expr; \
+ if ( FAILED () )
+
+
+/* CLEAR
+ * clears annotation and error
+ */
+void ClearAnnotation ( const ctx_t *ctx );
+#define CLEAR() \
+ ClearAnnotation ( ctx )
+
+
+/* CLEAR_ERR
+ * clears error, leaving any annotation
+ */
+void ClearError ( const ctx_t *ctx );
+#define CLEAR_ERR() \
+ ClearError ( ctx )
+
+
+#endif
diff --git a/tools/sra-sort/gcc-ped.sh b/tools/sra-sort/gcc-ped.sh
new file mode 100755
index 0000000..7db5891
--- /dev/null
+++ b/tools/sra-sort/gcc-ped.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# test gcc for support of supplied parameters
+
+if test $# -ge 4
+then
+ if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 $2 $3 $4 > /dev/null 2>&1 )
+ then
+ echo $1 $2 $3 $4
+ exit 0
+ fi
+fi
+
+if test $# -ge 3
+then
+ if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 $2 $3 > /dev/null 2>&1 )
+ then
+ echo $1 $2 $3
+ exit 0
+ fi
+fi
+
+if test $# -ge 2
+then
+ if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 $2 > /dev/null 2>&1 )
+ then
+ echo $1 $2
+ exit 0
+ fi
+fi
+
+if test $# -ge 1
+then
+ if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 > /dev/null 2>&1 )
+ then
+ echo $1
+ exit 0
+ fi
+fi
diff --git a/tools/sra-sort/glob-poslen.c b/tools/sra-sort/glob-poslen.c
new file mode 100644
index 0000000..4f028a4
--- /dev/null
+++ b/tools/sra-sort/glob-poslen.c
@@ -0,0 +1,349 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct GlobalPosLenReader;
+#define COLREADER_IMPL struct GlobalPosLenReader
+
+#include "glob-poslen.h"
+#include "tbl-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "map-file.h"
+#include "sra-sort.h"
+
+#include <insdc/insdc.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <klib/printf.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <assert.h>
+
+FILE_ENTRY ( glob-poslen );
+
+
+/*--------------------------------------------------------------------------
+ * GlobalPosLenReader
+ */
+struct GlobalPosLenReader
+{
+ ColumnReader dad;
+
+ uint64_t poslen;
+
+ const VCursor *curs;
+ uint32_t idx [ 3 ];
+
+ uint32_t chunk_size;
+
+ size_t full_spec_size;
+ char full_spec [ 1 ];
+};
+
+static
+void GlobalPosLenReaderWhack ( GlobalPosLenReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ VCursorRelease ( self -> curs );
+ MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+static
+const char *GlobalPosLenReaderFullSpec ( const GlobalPosLenReader *self, const ctx_t *ctx )
+{
+ return self -> full_spec;
+}
+
+static
+uint64_t GlobalPosLenReaderIdRange ( const GlobalPosLenReader *self, const ctx_t *ctx, int64_t *opt_first )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ uint64_t count;
+
+ rc = VCursorIdRange ( self -> curs, 0, opt_first, & count );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorIdRange failed on '%s'", self -> full_spec );
+
+ return count;
+}
+
+static
+void GlobalPosLenReaderPreCopy ( GlobalPosLenReader *self, const ctx_t *ctx )
+{
+}
+
+static
+void GlobalPosLenReaderPostCopy ( GlobalPosLenReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ /* called after a single copy
+ assumes that entire row-range of table has been copied */
+
+ rc = VCursorRelease ( self -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorRelease failed on '%s'", self -> full_spec );
+ else
+ self -> curs = NULL;
+}
+
+static
+const void *GlobalPosLenReaderReadGlobal ( GlobalPosLenReader *self, const ctx_t *ctx,
+ int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const void *base;
+
+ assert ( elem_bits != NULL );
+ assert ( boff != NULL );
+ assert ( row_len != NULL );
+
+ rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 0 ],
+ elem_bits, & base, boff, row_len );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to read REF_LEN for row %ld", row_id );
+ else
+ {
+ INSDC_coord_len ref_len;
+ assert ( * boff == 0 );
+ assert ( * row_len == 1 );
+ assert ( * elem_bits == sizeof ref_len * 8 );
+ ref_len = ( ( const INSDC_coord_len* ) base ) [ 0 ];
+
+ rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 1 ],
+ elem_bits, & base, boff, row_len );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to read GLOBAL_REF_START for row %ld", row_id );
+ else
+ {
+ uint64_t pos;
+ assert ( * boff == 0 );
+ assert ( * row_len == 1 );
+ assert ( * elem_bits == sizeof ( uint64_t ) * 8 );
+ pos = ( ( const uint64_t* ) base ) [ 0 ];
+
+ self -> poslen = encode_pos_len ( pos, ref_len );
+#if 1
+ assert ( decode_pos_len ( self -> poslen ) == pos );
+ assert ( poslen_to_len ( self -> poslen ) == ref_len );
+#endif
+ return & self -> poslen;
+ }
+ }
+
+ return NULL;
+
+}
+
+static
+const void *GlobalPosLenReaderReadLocal ( GlobalPosLenReader *self, const ctx_t *ctx,
+ int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const void *base;
+
+ assert ( elem_bits != NULL );
+ assert ( boff != NULL );
+ assert ( row_len != NULL );
+
+ rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 0 ],
+ elem_bits, & base, boff, row_len );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to read REF_LEN for row %ld", row_id );
+ else
+ {
+ INSDC_coord_len ref_len;
+ assert ( * boff == 0 );
+ assert ( * row_len == 1 );
+ assert ( * elem_bits == sizeof ref_len * 8 );
+ ref_len = ( ( const INSDC_coord_len* ) base ) [ 0 ];
+
+ rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 1 ],
+ elem_bits, & base, boff, row_len );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to read REF_START for row %ld", row_id );
+ else
+ {
+ INSDC_coord_zero ref_start;
+ assert ( * boff == 0 );
+ assert ( * row_len == 1 );
+ assert ( * elem_bits == sizeof ref_start * 8 );
+ ref_start = ( ( const INSDC_coord_zero* ) base ) [ 0 ];
+
+ rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 2 ],
+ elem_bits, & base, boff, row_len );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to read REF_ID for row %ld", row_id );
+ else
+ {
+ int64_t ref_id;
+ assert ( * boff == 0 );
+ assert ( * row_len == 1 );
+ assert ( * elem_bits == sizeof ref_id * 8 );
+ ref_id = ( ( const int64_t* ) base ) [ 0 ];
+
+ if ( ref_id <= 0 )
+ self -> poslen = 0;
+ else
+ {
+ uint64_t pos = local_to_global ( ref_id, self -> chunk_size, ref_start );
+ self -> poslen = encode_pos_len ( pos, ref_len );
+#if 1
+ assert ( global_to_row_id ( pos, self -> chunk_size ) == ref_id );
+ assert ( decode_pos_len ( self -> poslen ) == pos );
+ assert ( poslen_to_len ( self -> poslen ) == ref_len );
+#endif
+ }
+
+ return & self -> poslen;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+static ColumnReader_vt GlobalPosLenReader_vt =
+{
+ GlobalPosLenReaderWhack,
+ GlobalPosLenReaderFullSpec,
+ GlobalPosLenReaderIdRange,
+ GlobalPosLenReaderPreCopy,
+ GlobalPosLenReaderPostCopy,
+ GlobalPosLenReaderReadGlobal
+};
+
+static ColumnReader_vt LocalPosLenReader_vt =
+{
+ GlobalPosLenReaderWhack,
+ GlobalPosLenReaderFullSpec,
+ GlobalPosLenReaderIdRange,
+ GlobalPosLenReaderPreCopy,
+ GlobalPosLenReaderPostCopy,
+ GlobalPosLenReaderReadLocal
+};
+
+
+
+/* MakeGlobalPosLenReader
+ */
+ColumnReader *TablePairMakeGlobalPosLenReader ( TablePair *self, const ctx_t *ctx, uint32_t chunk_size )
+{
+ FUNC_ENTRY ( ctx );
+
+ GlobalPosLenReader *reader;
+ size_t full_spec_size = self -> full_spec_size + sizeof "src..GLOBAL_POSLEN" - 1;
+
+ TRY ( reader = MemAlloc ( ctx, sizeof * reader + full_spec_size, false ) )
+ {
+ /* we don't yet know whether the reader will have GLOBAL_REF_START */
+ TRY ( ColumnReaderInit ( & reader -> dad, ctx, & GlobalPosLenReader_vt ) )
+ {
+ rc_t rc = string_printf ( reader -> full_spec, full_spec_size + 1, NULL, "src.%s.GLOBAL_POSLEN", self -> full_spec );
+ if ( rc != 0 )
+ ABORT ( rc, "cannot seem to calculate string sizes" );
+ else
+ {
+ rc = VTableCreateCursorRead ( self -> stbl, & reader -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to create cursor on 'src.%s'", self -> full_spec );
+ else
+ {
+ /* we need length as a 2nd sorting key */
+ rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 0 ], "REF_LEN" );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorAddColumn failed on '%s' cursor", self -> full_spec );
+ else
+ {
+ /* add columns AFTER open */
+ rc = VCursorPermitPostOpenAdd ( reader -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorPermitPostOpenAdd failed on '%s' cursor", self -> full_spec );
+ else
+ {
+ /* open single-column cursor - errors adding further columns
+ help determine what type of positioning we have */
+ rc = VCursorOpen ( reader -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorOpen failed on '%s' cursor", self -> full_spec );
+ else
+ {
+ /* finish initialization */
+ reader -> chunk_size = chunk_size;
+ reader -> full_spec_size = ( uint32_t ) full_spec_size;
+
+ /* now try to get GLOBAL_REF_START */
+ rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 1 ], "GLOBAL_REF_START" );
+ if ( rc == 0 )
+ {
+ STATUS ( 3, "'%s' table has GLOBAL_REF_START", self -> full_spec );
+
+ /* retrieval function returns this position directly */
+ return & reader -> dad;
+ }
+
+ /* try for local refpos */
+ rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 1 ], "REF_START" );
+ if ( rc == 0 )
+ rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 2 ], "REF_ID" );
+ if ( rc == 0 )
+ {
+ STATUS ( 3, "'%s' table has local REF_START", self -> full_spec );
+
+ /* retrieval function synthesizes local to global */
+ reader -> dad . vt = & LocalPosLenReader_vt;
+ return & reader -> dad;
+ }
+
+ ERROR ( rc, "failed to populate '%s' cursor", reader -> full_spec );
+ }
+ }
+ }
+
+ VCursorRelease ( reader -> curs );
+ }
+ }
+ }
+
+ MemFree ( ctx, reader, sizeof * reader + full_spec_size );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/glob-poslen.h b/tools/sra-sort/glob-poslen.h
new file mode 100644
index 0000000..0a39102
--- /dev/null
+++ b/tools/sra-sort/glob-poslen.h
@@ -0,0 +1,95 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_glob_poslen_
+#define _h_sra_sort_glob_poslen_
+
+#ifndef _h_sra_sort_col_pair_
+#include "col-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * inline functions
+ */
+#define MAX_POS_BITS 34
+#define MAX_LEN_BITS ( 64 - MAX_POS_BITS )
+
+
+static __inline__
+uint64_t encode_pos_len ( uint64_t pos, uint32_t len )
+{
+ assert ( pos < ( ( ~ ( uint64_t ) 0 ) >> MAX_LEN_BITS ) );
+ assert ( 0 < len && len <= ( ( ~ ( uint32_t ) 0 ) >> ( 32 - MAX_LEN_BITS ) ) );
+
+ /* position ascending, length descending */
+ return ( ( pos + 1 ) << MAX_LEN_BITS ) - len;
+}
+
+static __inline__
+uint64_t decode_pos_len ( uint64_t pos_len )
+{
+ return pos_len >> MAX_LEN_BITS;
+}
+
+static __inline__
+uint32_t poslen_to_len ( uint64_t pos_len )
+{
+ return ( 1U << MAX_LEN_BITS ) - ( ( uint32_t ) pos_len & ( ( ~ ( uint32_t ) 0 ) >> ( 32 - MAX_LEN_BITS ) ) );
+}
+
+static __inline__
+uint64_t local_to_global ( int64_t row_id, uint32_t chunk_size, uint32_t offset )
+{
+ assert ( row_id > 0 );
+ return ( row_id - 1 ) * chunk_size + offset;
+}
+
+static __inline__
+int64_t global_to_row_id ( uint64_t pos, uint32_t chunk_size )
+{
+ return ( pos / chunk_size ) + 1;
+}
+
+
+/*--------------------------------------------------------------------------
+ * GlobalPosLenReader
+ */
+typedef struct GlobalPosLenReader GlobalPosLenReader;
+
+
+/* MakeGlobalPosLenReader
+ */
+ColumnReader *TablePairMakeGlobalPosLenReader ( struct TablePair *self, const ctx_t *ctx, uint32_t chunk_size );
+
+
+#endif /* _h_sra_sort_glob_poslen_ */
diff --git a/tools/sra-sort/id-mapper-col.c b/tools/sra-sort/id-mapper-col.c
new file mode 100644
index 0000000..0bfea9b
--- /dev/null
+++ b/tools/sra-sort/id-mapper-col.c
@@ -0,0 +1,260 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MapRowIdColWriter MapRowIdColWriter;
+#define COLWRITER_IMPL MapRowIdColWriter
+
+#include "id-mapper-col.h"
+#include "map-file.h"
+#include "csra-tbl.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( id-mapper-col );
+
+
+/*--------------------------------------------------------------------------
+ * MapRowIdColWriter
+ */
+
+struct MapRowIdColWriter
+{
+ ColumnWriter dad;
+
+ ColumnWriter *cw;
+
+ MapFile *idx;
+
+ int64_t *row;
+ uint32_t max_row_len;
+
+ bool assign_ids;
+};
+
+/* called by Release */
+static
+void MapRowIdColWriterDestroy ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnWriterRelease ( self -> cw, ctx );
+ self -> cw = NULL;
+
+ MapFileRelease ( self -> idx, ctx );
+ self -> idx = NULL;
+
+ if ( self -> row != NULL )
+ {
+ MemFree ( ctx, self -> row, sizeof * self -> row * self -> max_row_len );
+ self -> row = NULL;
+ self -> max_row_len = 0;
+ }
+}
+
+static
+void MapRowIdColWriterWhack ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ MapRowIdColWriterDestroy ( self, ctx );
+ ColumnWriterDestroy ( & self -> dad, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+/* full spec */
+static
+const char* MapRowIdColWriterFullSpec ( const MapRowIdColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ return ColumnWriterFullSpec ( self -> cw, ctx );
+}
+
+static
+void MapRowIdColWriterPreCopy ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ ColumnWriterPreCopy ( self -> cw, ctx );
+}
+
+static
+void MapRowIdColWriterPostCopy ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> max_row_len > 16 )
+ {
+ void *row;
+ TRY ( row = MemAlloc ( ctx, sizeof * self -> row * 16, false ) )
+ {
+ MemFree ( ctx, self -> row, sizeof * self -> row * self -> max_row_len );
+ self -> row = row;
+ self -> max_row_len = 16;
+ }
+ CATCH_ALL ()
+ {
+ CLEAR ();
+ }
+ }
+
+ ColumnWriterPostCopy ( self -> cw, ctx );
+}
+
+/* write row to destination */
+static
+void MapRowIdColWriterWrite ( MapRowIdColWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ uint32_t i;
+
+ /* here is where the VALUE coming in, which is a row-id,
+ gets mapped to its new value before being written out */
+ assert ( elem_bits == sizeof * self -> row * 8 );
+ assert ( boff == 0 );
+
+ /* resize row if needed */
+ if ( self -> max_row_len < row_len )
+ {
+ MemFree ( ctx, self -> row, sizeof * self -> row * self -> max_row_len );
+
+ self -> max_row_len = ( row_len + 15 ) & ~ 15U;
+ ON_FAIL ( self -> row = MemAlloc ( ctx, sizeof * self -> row * self -> max_row_len, false ) )
+ {
+ ANNOTATE ( "failed to allocate memory for %u row-ids", self -> max_row_len );
+ return;
+ }
+ }
+
+ /* copy row */
+ memcpy ( self -> row, data, row_len * sizeof * self -> row );
+
+ /* map ids */
+ for ( i = 0; i < row_len; ++ i )
+ {
+ if ( self -> row [ i ] != 0 )
+ {
+ int64_t new_id;
+
+ /* map old row-id to new row-id */
+ ON_FAIL ( new_id = MapFileMapSingleOldToNew ( self -> idx, ctx, self -> row [ i ], self -> assign_ids ) )
+ {
+ ANNOTATE ( "failed to map source row-id %ld", self -> row [ i ] );
+ return;
+ }
+ if ( new_id == 0 )
+ {
+ rc_t rc = RC ( rcExe, rcColumn, rcWriting, rcId, rcNotFound );
+ ERROR ( rc, "failed to map source row-id %ld", self -> row [ i ] );
+ return;
+ }
+
+ self -> row [ i ] = new_id;
+ }
+ }
+
+ /* now write the translated ids */
+ ColumnWriterWrite ( self -> cw, ctx, sizeof * self -> row * 8, self -> row, 0, row_len );
+}
+
+static
+void MapRowIdColWriterWriteStatic ( MapRowIdColWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+ FUNC_ENTRY ( ctx );
+ rc_t rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+ INTERNAL_ERROR ( rc, "writing to a non-static column" );
+}
+
+/* commit all writes */
+static
+void MapRowIdColWriterCommit ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ ColumnWriterCommit ( self -> cw, ctx );
+ MapRowIdColWriterDestroy ( self, ctx );
+}
+
+static ColumnWriter_vt MapRowIdColWriter_vt =
+{
+ MapRowIdColWriterWhack,
+ MapRowIdColWriterFullSpec,
+ MapRowIdColWriterPreCopy,
+ MapRowIdColWriterPostCopy,
+ MapRowIdColWriterWrite,
+ MapRowIdColWriterWriteStatic,
+ MapRowIdColWriterCommit
+};
+
+
+/* MakeMapRowIdWriter
+ * if "assign_ids" is true, the MapFile will be asked to
+ * map an old=>new id or assign (and record) a new id.
+ */
+ColumnWriter *TablePairMakeMapRowIdWriter ( TablePair *self,
+ const ctx_t *ctx, ColumnWriter *cw, MapFile *idx, bool assign_ids )
+{
+ FUNC_ENTRY ( ctx );
+
+ MapRowIdColWriter *writer;
+
+ TRY ( writer = MemAlloc ( ctx, sizeof * writer, false ) )
+ {
+ TRY ( ColumnWriterInit ( & writer -> dad, ctx, & MapRowIdColWriter_vt, true ) )
+ {
+ writer -> max_row_len = 16;
+ TRY ( writer -> row = MemAlloc ( ctx, sizeof * writer -> row * writer -> max_row_len, false ) )
+ {
+ TRY ( writer -> idx = MapFileDuplicate ( idx, ctx ) )
+ {
+ TRY ( writer -> cw = ColumnWriterDuplicate ( cw, ctx ) )
+ {
+ writer -> assign_ids = assign_ids;
+ return & writer -> dad;
+ }
+
+ MapFileRelease ( writer -> idx, ctx );
+ }
+
+ ColumnWriterDestroy ( & writer -> dad, ctx );
+ }
+
+ MemFree ( ctx, writer -> row, sizeof * writer -> row * writer -> max_row_len );
+ }
+
+ MemFree ( ctx, writer, sizeof * writer );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/id-mapper-col.h b/tools/sra-sort/id-mapper-col.h
new file mode 100644
index 0000000..ae5770f
--- /dev/null
+++ b/tools/sra-sort/id-mapper-col.h
@@ -0,0 +1,55 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_id_mapper_col_
+#define _h_sra_sort_id_mapper_col_
+
+#ifndef _h_sra_sort_col_pair_
+#include "col-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * MapRowIdColWriter
+ */
+
+
+/* MakeMapRowIdWriter
+ * if "assign_ids" is true, the MapFile will be asked to
+ * map an old=>new id or assign (and record) a new id.
+ */
+ColumnWriter *TablePairMakeMapRowIdWriter ( struct TablePair *self,
+ const ctx_t *ctx, ColumnWriter *cw, struct MapFile *idx, bool assign_ids );
+
+
+#endif /* _h_sra_sort_id_mapper_col_ */
diff --git a/tools/sra-sort/idx-mapping.c b/tools/sra-sort/idx-mapping.c
new file mode 100644
index 0000000..d1434aa
--- /dev/null
+++ b/tools/sra-sort/idx-mapping.c
@@ -0,0 +1,92 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "idx-mapping.h"
+#include "ctx.h"
+
+#include <klib/sort.h>
+
+FILE_ENTRY ( idx-mapping );
+
+
+/*--------------------------------------------------------------------------
+ * IdxMapping
+ *
+ */
+
+#if USE_OLD_KSORT
+
+int CC IdxMappingCmpOld ( const void *a, const void *b, void *data )
+{
+ const IdxMapping *ap = a;
+ const IdxMapping *bp = b;
+
+ if ( ap -> old_id < bp -> old_id )
+ return -1;
+ return ap -> old_id > bp -> old_id;
+}
+
+int CC IdxMappingCmpNew ( const void *a, const void *b, void *data )
+{
+ const IdxMapping *ap = a;
+ const IdxMapping *bp = b;
+
+ if ( ap -> new_id < bp -> new_id )
+ return -1;
+ return ap -> new_id > bp -> new_id;
+}
+
+#else /* USE_OLD_KSORT */
+
+#define T( x ) ( ( const IdxMapping* ) ( x ) )
+
+#define SWAP( a, b, off, size ) KSORT_TSWAP ( IdxMapping, a, b )
+
+
+void IdxMappingSortOld ( IdxMapping *self, const ctx_t *ctx, size_t count )
+{
+#define CMP( a, b ) \
+ ( ( T ( a ) -> old_id < T ( b ) -> old_id ) ? -1 : ( T ( a ) -> old_id > T ( b ) -> old_id ) )
+
+ KSORT ( self, count, sizeof * self, 0, sizeof * self );
+
+#undef CMP
+}
+
+void IdxMappingSortNew ( IdxMapping *self, const ctx_t *ctx, size_t count )
+{
+#define CMP( a, b ) \
+ ( ( T ( a ) -> new_id < T ( b ) -> new_id ) ? -1 : ( T ( a ) -> new_id > T ( b ) -> new_id ) )
+
+ KSORT ( self, count, sizeof * self, 0, sizeof * self );
+
+#undef CMP
+}
+
+#undef T
+#undef SWAP
+
+#endif /* USE_OLD_KSORT */
diff --git a/tools/sra-sort/idx-mapping.h b/tools/sra-sort/idx-mapping.h
new file mode 100644
index 0000000..7691526
--- /dev/null
+++ b/tools/sra-sort/idx-mapping.h
@@ -0,0 +1,59 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_idx_mapping_
+#define _h_sra_sort_idx_mapping_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * IdxMapping
+ *
+ */
+typedef struct IdxMapping IdxMapping;
+struct IdxMapping
+{
+ int64_t old_id, new_id;
+};
+
+#if USE_OLD_KSORT
+
+/* ksort callbacks */
+int CC IdxMappingCmpOld ( const void *a, const void *b, void *data );
+int CC IdxMappingCmpNew ( const void *a, const void *b, void *data );
+
+#else
+
+/* ksort_inlines */
+void IdxMappingSortOld ( IdxMapping *self, const ctx_t *ctx, size_t count );
+void IdxMappingSortNew ( IdxMapping *self, const ctx_t *ctx, size_t count );
+
+#endif
+
+#endif /* _h_sra_sort_idx_mapping_ */
diff --git a/tools/sra-sort/map-file.c b/tools/sra-sort/map-file.c
new file mode 100644
index 0000000..209876f
--- /dev/null
+++ b/tools/sra-sort/map-file.c
@@ -0,0 +1,1192 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "map-file.h"
+#include "idx-mapping.h"
+#include "ctx.h"
+#include "caps.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <endian.h>
+#include <byteswap.h>
+
+#include "except.h"
+
+FILE_ENTRY ( map-file );
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ * a file for storing id mappings
+ */
+struct MapFile
+{
+ int64_t first_id;
+ uint64_t num_ids;
+ uint64_t num_mapped_ids;
+ int64_t max_new_id;
+ KFile *f_old, *f_new, *f_pos;
+ size_t id_size;
+ KRefcount refcount;
+};
+
+
+/* Whack
+ */
+static
+void MapFileWhack ( MapFile *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ rc_t rc = KFileRelease ( self -> f_old );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "KFileRelease failed on old=>new" );
+ else
+ {
+ rc = KFileRelease ( self -> f_new );
+ if ( rc != 0 )
+ ABORT ( rc, "KFileRelease failed on new=>old" );
+ else if ( self -> f_pos != NULL )
+ {
+ rc = KFileRelease ( self -> f_pos );
+ if ( rc != 0 )
+ ABORT ( rc, "KFileRelease failed on global poslen temp column" );
+ }
+
+ MemFree ( ctx, self, sizeof * self );
+ }
+}
+
+
+/* Make
+ * creates an id map
+ */
+static
+void MapFileMakeFork ( KFile **fp, const ctx_t *ctx, const char *name,
+ KDirectory *wd, const char *tmpdir, int pid, size_t bsize, const char *fork )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* create temporary KFile */
+ rc_t rc;
+ KFile *backing;
+
+ rc = KDirectoryCreateFile ( wd, & backing, true,
+ 0600, kcmInit | kcmParents, "%s/sra-sort-%s.%s.%d", tmpdir, name, fork, pid );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "failed to create %s id map file '%s'", fork, name );
+ else
+ {
+#if ! WINDOWS
+ /* never try to remove files on Windows */
+ if ( ctx -> caps -> tool -> unlink_idx_files )
+ {
+ /* unlink KFile */
+ rc = KDirectoryRemove ( wd, false, "%s/sra-sort-%s.%s.%d", tmpdir, name, fork, pid );
+ if ( rc != 0 )
+ WARN ( "failed to unlink %s id map file '%s'", fork, name );
+ }
+#endif
+
+ /* create a read/write buffer file */
+ rc = KBufFileMakeWrite ( fp, backing, true, bsize );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "failed to create buffer for %s id map file '%s'", fork, name );
+
+ KFileRelease ( backing );
+ }
+}
+
+static
+MapFile *MapFileMakeInt ( const ctx_t *ctx, const char *name, bool random, bool for_poslen )
+{
+ MapFile *mf;
+ TRY ( mf = MemAlloc ( ctx, sizeof * mf, true ) )
+ {
+ /* create KDirectory */
+ KDirectory *wd;
+ rc_t rc = KDirectoryNativeDir ( & wd );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "failed to create native directory" );
+ else
+ {
+ const Tool *tp = ctx -> caps -> tool;
+ size_t bsize = random ? tp -> map_file_random_bsize : tp -> map_file_bsize;
+
+ /* create old=>new id file */
+ TRY ( MapFileMakeFork ( & mf -> f_old, ctx, name, wd, tp -> tmpdir, tp -> pid, bsize, "old" ) )
+ {
+ TRY ( MapFileMakeFork ( & mf -> f_new, ctx, name, wd, tp -> tmpdir, tp -> pid, 32 * 1024, "new" ) )
+ {
+ if ( for_poslen )
+ MapFileMakeFork ( & mf -> f_pos, ctx, name, wd, tp -> tmpdir, tp -> pid, 32 * 1024, "pos" );
+
+ KDirectoryRelease ( wd );
+
+ if ( ! FAILED () )
+ {
+ /* this is our guy */
+ KRefcountInit ( & mf -> refcount, 1, "MapFile", "make", name );
+
+ return mf;
+ }
+
+ KFileRelease ( mf -> f_new );
+ }
+
+ KFileRelease ( mf -> f_old );
+ }
+
+ KDirectoryRelease ( wd );
+ }
+
+ MemFree ( ctx, mf, sizeof * mf );
+ }
+
+ return NULL;
+}
+
+MapFile *MapFileMake ( const ctx_t *ctx, const char *name, bool random )
+{
+ FUNC_ENTRY ( ctx );
+ return MapFileMakeInt ( ctx, name, random, false );
+}
+
+/* MakeForPoslen
+ * creates an id map with an additional poslen file
+ * this is specially for PRIMARY_ALIGNMENT_IDS and SECONDARY_ALIGNMENT_IDS
+ * that use *_ALIGNMENT global position and length as a sorting key
+ * we drop it to a file after its generation so that it can be
+ * picked up later when copying the corresponding alignment table.
+ */
+MapFile *MapFileMakeForPoslen ( const ctx_t *ctx, const char *name )
+{
+ FUNC_ENTRY ( ctx );
+ return MapFileMakeInt ( ctx, name, false, true );
+}
+
+
+/* Release
+ */
+void MapFileRelease ( const MapFile *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "MapFile" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ MapFileWhack ( ( MapFile* ) self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcFile, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release MapFile" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+MapFile *MapFileDuplicate ( const MapFile *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "MapFile" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcFile, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate MapFile" );
+ return NULL;
+ }
+ }
+
+ return ( MapFile* ) self;
+}
+
+
+/* SsetIdRange
+ * required second-stage initialization
+ * must be called before any writes occur
+ */
+void MapFileSetIdRange ( MapFile *self, const ctx_t *ctx,
+ int64_t first_id, uint64_t num_ids )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcUpdating, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad self" );
+ }
+ else if ( self -> max_new_id != 0 )
+ {
+ rc = RC ( rcExe, rcFile, rcUpdating, rcConstraint, rcViolated );
+ INTERNAL_ERROR ( rc, "cannot change id range after writing has begun" );
+ }
+ else
+ {
+ /* record new first id and count */
+ self -> first_id = first_id;
+ self -> num_ids = num_ids;
+
+ /* determine id size for all ids PLUS 0 for NULL */
+ for ( ++ num_ids, self -> id_size = 1; self -> id_size < 8; ++ self -> id_size )
+ {
+ if ( num_ids <= ( ( uint64_t ) 1 ) << ( self -> id_size * 8 ) )
+ break;
+ }
+ }
+}
+
+
+/* First
+ * return first mapped id
+ */
+int64_t MapFileFirst ( const MapFile *self, const ctx_t *ctx )
+{
+ return self -> first_id;
+}
+
+
+/* Count
+ * return num_ids
+ */
+uint64_t MapFileCount ( const MapFile *self, const ctx_t *ctx )
+{
+ return self -> num_ids;
+}
+
+
+/* SetOldToNew
+ * write old=>new id mappings
+ */
+void MapFileSetOldToNew ( MapFile *self, const ctx_t *ctx, const IdxMapping *ids, size_t count )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad self reference" );
+ }
+ else if ( self -> num_ids == 0 )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+ INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+ }
+ else
+ {
+ size_t i;
+ for ( i = 0; i < count; ++ i )
+ {
+ size_t num_writ;
+ /* zero-based index */
+ int64_t old_id = ids [ i ] . old_id - self -> first_id;
+ /* position in bytes */
+ uint64_t pos = old_id * self -> id_size;
+ /* 1-based translated new-id */
+ int64_t new_id = ids [ i ] . new_id - self -> first_id + 1;
+ assert ( old_id >= 0 );
+ assert ( new_id >= 0 );
+#if __BYTE_ORDER == __BIG_ENDIAN
+ new_id = bswap_64 ( new_id );
+#endif
+ rc = KFileWriteAll ( self -> f_old, pos, & new_id, self -> id_size, & num_writ );
+ if ( rc != 0 )
+ {
+ SYSTEM_ERROR ( rc, "failed to write old=>new id mapping" );
+ break;
+ }
+
+ if ( num_writ != self -> id_size )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+ SYSTEM_ERROR ( rc, "failed to write old=>new id mapping" );
+ break;
+ }
+ }
+ }
+}
+
+
+/* SetNewToOld
+ * write new=>old id mappings
+ */
+void MapFileSetNewToOld ( MapFile *self, const ctx_t *ctx, const IdxMapping *ids, size_t count )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad self reference" );
+ }
+ else if ( self -> num_ids == 0 )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+ INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+ }
+ else
+ {
+ if ( ! ctx -> caps -> tool -> write_new_to_old )
+ self -> max_new_id = self -> first_id + count - 1;
+ else
+ {
+ size_t i;
+ for ( i = 0; i < count; ++ i )
+ {
+ size_t num_writ;
+ /* zero based index */
+ int64_t new_id = ids [ i ] . new_id - self -> first_id;
+ /* zero based byte offset */
+ uint64_t pos = new_id * self -> id_size;
+ /* 1-based translated old-id */
+ int64_t old_id = ids [ i ] . old_id - self -> first_id + 1;
+ assert ( new_id >= 0 );
+ assert ( old_id >= 0 );
+#if __BYTE_ORDER == __BIG_ENDIAN
+ old_id = bswap_64 ( old_id );
+#endif
+ rc = KFileWriteAll ( self -> f_new, pos, & old_id, self -> id_size, & num_writ );
+ if ( rc != 0 )
+ {
+ SYSTEM_ERROR ( rc, "failed to write new=>old id mapping" );
+ break;
+ }
+
+ if ( num_writ != self -> id_size )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+ SYSTEM_ERROR ( rc, "failed to write new=>old id mapping" );
+ break;
+ }
+
+ self -> max_new_id = new_id + self -> first_id;
+ }
+ }
+ }
+}
+
+
+/* SetPoslen
+ * write global position/length in new-id order
+ */
+void MapFileSetPoslen ( MapFile *self, const ctx_t *ctx, const IdxMapping *ids, size_t count )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad self reference" );
+ }
+ else if ( self -> f_pos == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcFile, rcIncorrect );
+ INTERNAL_ERROR ( rc, "MapFile must be created with MapFileMakeForPoslen" );
+ }
+ else if ( self -> num_ids == 0 )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+ INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+ }
+ else
+ {
+ /* start writing after the last new id recorded */
+ uint64_t pos = ( self -> max_new_id - self -> first_id + 1 ) * sizeof ids -> new_id;
+
+ size_t i;
+ for ( i = 0; i < count; pos += sizeof ids -> new_id, ++ i )
+ {
+ size_t num_writ;
+ int64_t poslen = ids [ i ] . new_id;
+#if __BYTE_ORDER == __BIG_ENDIAN
+ poslen = bswap_64 ( poslen );
+#endif
+ rc = KFileWriteAll ( self -> f_pos, pos, & poslen, sizeof ids -> new_id, & num_writ );
+ if ( rc != 0 )
+ {
+ SYSTEM_ERROR ( rc, "failed to write poslen temporary column" );
+ break;
+ }
+
+ if ( num_writ != sizeof ids -> new_id )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+ SYSTEM_ERROR ( rc, "failed to write poslen temporary column" );
+ break;
+ }
+ }
+ }
+}
+
+
+/* ReadPoslen
+ * read global position/length in new-id order
+ * starts reading at the indicated row
+ * returns the number read
+ */
+size_t MapFileReadPoslen ( const MapFile *self, const ctx_t *ctx,
+ int64_t start_id, uint64_t *poslen, size_t max_count )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ size_t total = 0;
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad self reference" );
+ }
+ else if ( self -> f_pos == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcFile, rcIncorrect );
+ INTERNAL_ERROR ( rc, "MapFile must be created with MapFileMakeForPoslen" );
+ }
+ /* the column is read until end, but
+ this is not an error. just return no-more-data */
+ else if ( start_id == self -> first_id + self -> num_ids )
+ return 0;
+ else if ( start_id < self -> first_id || start_id > self -> first_id + self -> num_ids )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+ INTERNAL_ERROR ( rc, "start_id ( %ld ) is not within column range ( %ld .. %ld )",
+ start_id, self -> first_id, self -> first_id + self -> num_ids - 1 );
+ }
+ else if ( max_count != 0 )
+ {
+ /* limit read to number of ids in index */
+ if ( start_id + max_count > self -> first_id + self -> num_ids )
+ max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+ if ( poslen == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcBuffer, rcNull );
+ INTERNAL_ERROR ( rc, "bad buffer parameter" );
+ }
+ else
+ {
+ /* read as many bytes of id as possible */
+ size_t num_read, to_read = max_count * sizeof * poslen;
+ uint64_t pos = ( start_id - self -> first_id ) * sizeof * poslen;
+ rc = KFileReadAll ( self -> f_pos, pos, poslen, to_read, & num_read );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "failed to read new=>old map" );
+ else
+ {
+ total = ( size_t ) ( num_read / sizeof * poslen );
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+ {
+ /* revert byte-order */
+ size_t i;
+ for ( i = 0; i < total; ++ i )
+ poslen [ i ] = bswap_64 ( poslen [ i ] );
+ }
+#endif
+ }
+ }
+ }
+
+ return total;
+}
+
+
+/* AllocMissingNewIds
+ * it is possible to have written fewer new=>old mappings
+ * than are supposed to be there, e.g. SEQUENCE that gets
+ * initially written by align tables. unaligned sequences
+ * need to fill in the remainder.
+ */
+static
+size_t make_missing_entry ( MapFile *self, const ctx_t *ctx,
+ IdxMapping *missing, size_t i, size_t max_missing_ids,
+ int64_t old_id, int64_t new_id )
+{
+ if ( i == max_missing_ids )
+ {
+ ON_FAIL ( MapFileSetNewToOld ( self, ctx, missing, i ) )
+ return i;
+
+ i = 0;
+ }
+
+ /* insert into missing id map */
+ missing [ i ] . old_id = old_id;
+ missing [ i ] . new_id = new_id;
+
+ /* update old=>new mapping */
+ MapFileSetOldToNew ( self, ctx, & missing [ i ], 1 );
+
+ return i + 1;
+}
+
+int64_t MapFileAllocMissingNewIds ( MapFile *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ int64_t first_allocated = 0;
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcUpdating, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad self reference" );
+ }
+ else if ( self -> num_ids == 0 )
+ {
+ rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+ INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+ }
+ else
+ {
+ uint64_t num_missing_ids = self -> num_ids - ( self -> max_new_id - self -> first_id + 1 );
+ if ( num_missing_ids != 0 )
+ {
+ IdxMapping *missing;
+
+ /* determine maximum missing id mappings */
+ size_t max_missing_ids = ctx -> caps -> tool -> max_missing_ids;
+ if ( ( uint64_t ) max_missing_ids > num_missing_ids )
+ max_missing_ids = ( size_t ) num_missing_ids;
+
+ /* allocate a buffer of IdxMapping */
+ TRY ( missing = MemAlloc ( ctx, sizeof * missing * max_missing_ids, false ) )
+ {
+ /* use a scan buffer somewhere around 32K,
+ to keep page-file cache focused on a few pages */
+ void *scan_buffer;
+ const size_t scan_buffer_size = 32 * 1024;
+ TRY ( scan_buffer = MemAlloc ( ctx, scan_buffer_size, false ) )
+ {
+ size_t i, num_read;
+ int64_t new_id, old_id = self -> first_id;
+ uint64_t eof = self -> num_ids * self -> id_size;
+
+ /* this guy will be used to assign new ids */
+ int64_t max_new_id = self -> max_new_id;
+ int64_t entry_max_new_id = self -> max_new_id;
+
+
+ /* in a loop, read as many ids as possible into scan buffer
+ the number is dependent upon self->id_size */
+ for ( i = 0; ; old_id += num_read )
+ {
+ size_t j, to_read;
+
+ /* determine position from old_id */
+ uint64_t pos = ( old_id - self -> first_id ) * self -> id_size;
+ if ( pos == eof )
+ break;
+
+ /* determine bytes to read - this must be limited
+ or we risk tricking page-buffer into resizing */
+ to_read = scan_buffer_size;
+ if ( pos + to_read > eof )
+ to_read = ( size_t ) ( eof - pos );
+
+ /* read as many bytes as we can */
+ rc = KFileReadAll ( self -> f_old, pos, scan_buffer, to_read, & num_read );
+ if ( rc != 0 )
+ {
+ SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+ break;
+ }
+
+ /* convert to count */
+ num_read /= self -> id_size;
+ if ( num_read == 0 )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcTransfer, rcIncomplete );
+ SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+ break;
+ }
+
+ /* scan for zeros, and for every zero found,
+ make entry into IdxMapping table, writing
+ new-id back to old=>new map */
+ switch ( self -> id_size )
+ {
+ case 1:
+ for ( j = 0; j < num_read; ++ j )
+ {
+ if ( ( ( const uint8_t* ) scan_buffer ) [ j ] == 0 )
+ {
+ ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+ i, max_missing_ids, old_id + j, ++ max_new_id ) )
+ break;
+ }
+ }
+ break;
+ case 2:
+ for ( j = 0; j < num_read; ++ j )
+ {
+ if ( ( ( const uint16_t* ) scan_buffer ) [ j ] == 0 )
+ {
+ ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+ i, max_missing_ids, old_id + j, ++ max_new_id ) )
+ break;
+ }
+ }
+ break;
+ case 3:
+ for ( num_read *= 3, j = 0; j < num_read; j += 3 )
+ {
+ if ( ( ( const uint8_t* ) scan_buffer ) [ j + 0 ] == 0 &&
+ ( ( const uint8_t* ) scan_buffer ) [ j + 1 ] == 0 &&
+ ( ( const uint8_t* ) scan_buffer ) [ j + 2 ] == 0 )
+ {
+ ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+ i, max_missing_ids, old_id + j / 3, ++ max_new_id ) )
+ break;
+ }
+ }
+ num_read /= 3;
+ break;
+ case 4:
+ for ( j = 0; j < num_read; ++ j )
+ {
+ if ( ( ( const uint32_t* ) scan_buffer ) [ j ] == 0 )
+ {
+ ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+ i, max_missing_ids, old_id + j, ++ max_new_id ) )
+ break;
+ }
+ }
+ break;
+ case 8:
+ for ( j = 0; j < num_read; ++ j )
+ {
+ if ( ( ( const uint64_t* ) scan_buffer ) [ j ] == 0 )
+ {
+ ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+ i, max_missing_ids, old_id + j, ++ max_new_id ) )
+ break;
+ }
+ }
+ break;
+ default:
+ for ( num_read *= self -> id_size, j = 0; j < num_read; j += self -> id_size )
+ {
+ new_id = 0;
+ memcpy ( & new_id, & ( ( const uint8_t* ) scan_buffer ) [ j ], self -> id_size );
+ if ( new_id == 0 )
+ {
+ ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+ i, max_missing_ids, old_id + j / self -> id_size, ++ max_new_id ) )
+ break;
+ }
+ }
+ num_read /= self -> id_size;
+ }
+ }
+
+ if ( ! FAILED () && i != 0 )
+ MapFileSetNewToOld ( self, ctx, missing, i );
+
+ assert ( FAILED () || self -> max_new_id == max_new_id );
+
+ if ( max_new_id != entry_max_new_id )
+ first_allocated = entry_max_new_id + 1;
+
+ MemFree ( ctx, scan_buffer, scan_buffer_size );
+ }
+
+ MemFree ( ctx, missing, sizeof * missing * max_missing_ids );
+ }
+ }
+ }
+
+ return first_allocated;
+}
+
+
+/* ReadNewToOld
+ * reads a bunch of new=>old mappings
+ */
+static
+size_t MapFileReadNewToOld ( const MapFile *self, const ctx_t *ctx,
+ int64_t start_id, IdxMapping *ids, size_t max_count )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ size_t total = 0;
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad self reference" );
+ }
+ /* the new=>old mapping is read until end, but
+ this is not an error. just return no-more-data */
+ else if ( start_id == self -> first_id + self -> num_ids )
+ return 0;
+ else if ( start_id < self -> first_id || start_id > self -> first_id + self -> num_ids )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+ INTERNAL_ERROR ( rc, "start_id ( %ld ) is not within map range ( %ld .. %ld )",
+ start_id, self -> first_id, self -> first_id + self -> num_ids - 1 );
+ }
+ else if ( max_count != 0 )
+ {
+ /* limit read to number of ids in index */
+ if ( start_id + max_count > self -> first_id + self -> num_ids )
+ max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+ if ( ids == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcBuffer, rcNull );
+ INTERNAL_ERROR ( rc, "bad buffer parameter" );
+ }
+ else
+ {
+ /* read as many bytes of id as possible */
+ size_t num_read, to_read = max_count * self -> id_size;
+ uint64_t pos = ( start_id - self -> first_id ) * self -> id_size;
+ rc = KFileReadAll ( self -> f_new, pos, ids, to_read, & num_read );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "failed to read new=>old map" );
+ else
+ {
+ size_t i;
+ const char *packed = ( const char* ) ids;
+ total = ( size_t ) ( num_read /self -> id_size );
+
+ /* read each packed id as little-endian integer onto
+ pre-zeroed 64-bit integer, swap if needed */
+ for ( num_read = total * self -> id_size, i = total; i > 0; )
+ {
+ int64_t unpacked = 0;
+
+ num_read -= self -> id_size;
+ -- i;
+
+ memcpy ( & unpacked, & packed [ num_read ], self -> id_size );
+#if __BYTE_ORDER == __BIG_ENDIAN
+ unpacked = bswap_64 ( unpacked );
+#endif
+ if ( unpacked != 0 )
+ unpacked += self -> first_id - 1;
+
+ ids [ i ] . old_id = unpacked;
+ ids [ i ] . new_id = start_id + i;
+ }
+ }
+ }
+ }
+
+ return total;
+}
+
+
+/* SelectOldToNewPairs
+ * specify the range of new ids to select from
+ * read them in old=>new order
+ */
+size_t MapFileSelectOldToNewPairs ( const MapFile *self, const ctx_t *ctx,
+ int64_t start_id, IdxMapping *ids, size_t max_count )
+{
+ FUNC_ENTRY ( ctx );
+
+ uint64_t eof;
+ int64_t end_excl;
+ size_t i, j, total;
+
+ /* limit read to number of ids in index */
+ if ( start_id + max_count > self -> first_id + self -> num_ids )
+ max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+ /* range is start_id to end_excl */
+ end_excl = start_id + max_count;
+
+ /* eof for f_old */
+ eof = self -> num_ids * self -> id_size;
+
+ for ( total = i = 0; i < max_count; total += j )
+ {
+ rc_t rc;
+ size_t off, num_read;
+ char buff [ 32 * 1024 ];
+
+ /* read some data from file */
+ uint64_t pos = total * self -> id_size;
+ size_t to_read = sizeof buff;
+ if ( pos == eof )
+ break;
+ if ( pos + to_read > eof )
+ to_read = ( size_t ) ( eof - pos );
+ rc = KFileReadAll ( self -> f_old, pos, buff, to_read, & num_read );
+ if ( rc != 0 )
+ {
+ SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+ break;
+ }
+
+ /* reached end - requested more ids than we have */
+ if ( num_read == 0 )
+ break;
+
+ /* the number of whole ids actually read */
+ if ( ( num_read /= self -> id_size ) == 0 )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcTransfer, rcIncomplete );
+ SYSTEM_ERROR ( rc, "failed to read old=>new map - file incomplete" );
+ break;
+ }
+
+ /* select new-ids from ids read */
+ for ( off = j = 0; j < num_read; off += self -> id_size, ++ j )
+ {
+ int64_t unpacked = 0;
+ memcpy ( & unpacked, & buff [ off ], self -> id_size );
+#if __BYTE_ORDER == __BIG_ENDIAN
+ unpacked = bswap_64 ( unpacked );
+#endif
+ /* only offset non-zero (NULL) ids */
+ if ( unpacked != 0 )
+ unpacked += self -> first_id - 1;
+
+ /* if id meets criteria */
+ if ( unpacked >= start_id && unpacked < end_excl )
+ {
+ ids [ i ] . old_id = self -> first_id + total + j;
+ ids [ i ] . new_id = unpacked;
+ if ( ++ i == max_count )
+ break;
+ }
+ }
+ }
+
+ return i;
+}
+
+
+/* SelectOldToNewSingle
+ * specify the range of new ids to select from
+ * read them in old=>new order
+ */
+size_t MapFileSelectOldToNewSingle ( const MapFile *self, const ctx_t *ctx,
+ int64_t start_id, int64_t *ids, uint32_t *opt_ord, size_t max_count )
+{
+ FUNC_ENTRY ( ctx );
+
+ uint64_t eof;
+ int64_t end_excl;
+ size_t i, j, total;
+
+ /* limit read to number of ids in index */
+ if ( start_id + max_count > self -> first_id + self -> num_ids )
+ max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+ /* range is start_id to end_excl */
+ end_excl = start_id + max_count;
+
+ /* eof for f_old */
+ eof = self -> num_ids * self -> id_size;
+
+ for ( total = i = 0; i < max_count; total += j )
+ {
+ rc_t rc;
+ size_t off, num_read;
+ char buff [ 32 * 1024 ];
+
+ /* read some data from file */
+ uint64_t pos = total * self -> id_size;
+ size_t to_read = sizeof buff;
+ if ( pos == eof )
+ break;
+ if ( pos + to_read > eof )
+ to_read = ( size_t ) ( eof - pos );
+ rc = KFileReadAll ( self -> f_old, pos, buff, to_read, & num_read );
+ if ( rc != 0 )
+ {
+ SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+ break;
+ }
+
+ /* reached end - requested more ids than we have */
+ if ( num_read == 0 )
+ break;
+
+ /* the number of whole ids actually read */
+ if ( ( num_read /= self -> id_size ) == 0 )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcTransfer, rcIncomplete );
+ SYSTEM_ERROR ( rc, "failed to read old=>new map - file incomplete" );
+ break;
+ }
+
+ /* select new-ids from ids read */
+ for ( off = j = 0; j < num_read; off += self -> id_size, ++ j )
+ {
+ int64_t unpacked = 0;
+ memcpy ( & unpacked, & buff [ off ], self -> id_size );
+#if __BYTE_ORDER == __BIG_ENDIAN
+ unpacked = bswap_64 ( unpacked );
+#endif
+ /* only offset non-zero (NULL) ids */
+ if ( unpacked != 0 )
+ unpacked += self -> first_id - 1;
+
+ /* if id meets criteria */
+ if ( unpacked >= start_id && unpacked < end_excl )
+ {
+ ids [ i ] = self -> first_id + total + j;
+ assert ( i <= 0xFFFFFFFF );
+ if ( opt_ord != NULL )
+ opt_ord [ unpacked - start_id ] = ( uint32_t ) i;
+ if ( ++ i == max_count )
+ break;
+ }
+ }
+ }
+
+ return i;
+}
+
+
+/* MapSingleOldToNew
+ * reads a single old=>new mapping
+ * returns new id or 0 if not found
+ * optionally allocates a new id if "insert" is true
+ */
+int64_t MapFileMapSingleOldToNew ( MapFile *self, const ctx_t *ctx,
+ int64_t old_id, bool insert )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ int64_t new_id = 0;
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad self reference" );
+ }
+ else if ( old_id < self -> first_id || old_id >= self -> first_id + self -> num_ids )
+ {
+ rc = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+ INTERNAL_ERROR ( rc, "old_id ( %ld ) is not within map range ( %ld .. %ld )",
+ old_id, self -> first_id, self -> first_id + self -> num_ids - 1 );
+ }
+ else
+ {
+ size_t num_read, to_read = self -> id_size;
+ uint64_t pos = ( old_id - self -> first_id ) * self -> id_size;
+ rc = KFileReadAll ( self -> f_old, pos, & new_id, to_read, & num_read );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+ else
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN
+ new_id = bswap_64 ( new_id );
+#endif
+ if ( new_id != 0 )
+ new_id += self -> first_id - 1;
+ else if ( insert )
+ {
+ /* create a mapping using the last known
+ new id plus one as the id to assign on insert */
+ IdxMapping mapping;
+ mapping . old_id = old_id;
+ mapping . new_id = self -> max_new_id + 1;
+
+ TRY ( MapFileSetOldToNew ( self, ctx, & mapping, 1 ) )
+ {
+ TRY ( MapFileSetNewToOld ( self, ctx, & mapping, 1 ) )
+ {
+ new_id = mapping . new_id;
+
+ if ( self -> num_ids >= 100000 )
+ {
+ uint64_t scaled = ++ self -> num_mapped_ids * 100;
+ uint64_t prior = scaled - 100;
+ if ( ( prior / self -> num_ids ) != ( scaled /= self -> num_ids ) )
+ STATUS ( 2, "have mapped %lu%% ids", scaled );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return new_id;
+}
+
+
+/* ConsistencyCheck
+ */
+static
+void MapFileCrossCheck ( const MapFile *self, const ctx_t *ctx, IdxMapping *ids, size_t max_ids )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ uint64_t total;
+ size_t num_read;
+ int64_t last_old, last_new;
+
+ for ( last_old = last_new = -1, total = 0; total < self -> num_ids; total += num_read )
+ {
+ int64_t id;
+ size_t i;
+
+ STATUS ( 2, "reading new=>old ids" );
+
+ ON_FAIL ( num_read = MapFileReadNewToOld ( self, ctx, self -> first_id + total, ids, max_ids ) )
+ {
+ ANNOTATE ( "failed to read new=>old ids" );
+ return;
+ }
+
+ STATUS ( 2, "read %,u pairs", num_read );
+
+ STATUS ( 2, "checking for repeats in new-id space" );
+ for ( i = 0; i < num_read; last_new = id, ++ i )
+ {
+ id = ids [ i ] . new_id;
+ if ( id == last_new )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcDuplicate );
+ ERROR ( rc, "new id %,ld repeats", id );
+ return;
+ }
+ }
+
+ STATUS ( 2, "sorting on old id" );
+
+#if USE_OLD_KSORT
+ ksort ( ids, num_read, sizeof ids [ 0 ], IdxMappingCmpOld, ( void* ) ctx );
+#else
+ IdxMappingSortOld ( ids, ctx, num_read );
+#endif
+
+ STATUS ( 2, "checking for repeats in old-id space" );
+ for ( i = 0; i < num_read; last_old = id, ++ i )
+ {
+ id = ids [ i ] . old_id;
+ if ( id == last_old )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcDuplicate );
+ ERROR ( rc, "old id %,ld repeats", id );
+ return;
+ }
+ }
+
+ STATUS ( 2, "cross-checking against old=>new index" );
+
+ for ( i = 0; i < num_read; ++ i )
+ {
+ int64_t new_id;
+
+ /* cast away const on "self" for prototype,
+ but function is only non-const if "insert"
+ were true - we use "false" */
+ ON_FAIL ( new_id = MapFileMapSingleOldToNew ( ( MapFile* ) self, ctx, ids [ i ] . old_id, false ) )
+ return;
+
+ if ( new_id != ids [ i ] . new_id )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcUnequal );
+ ERROR ( rc, "mismatch of new ids %,ld != %,ld", new_id, ids [ i ] . new_id );
+ return;
+ }
+ }
+ }
+}
+
+void MapFileConsistencyCheck ( const MapFile *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ IdxMapping *ids;
+ const size_t max_ids = 1024 * 1024;
+
+ STATUS ( 2, "running consistency check on index files" );
+
+ /* "self" is valid */
+ if ( self == NULL )
+ {
+ ANNOTATE ( "checking the validity of a NULL MapFile" );
+ return;
+ }
+
+ STATUS ( 2, "checking id_size" );
+
+ /* number of ids requires some number of bits */
+ if ( ( ( uint64_t ) 1 << ( self -> id_size * 8 ) ) < self -> num_ids )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcSize, rcIncorrect );
+ ERROR ( rc, "calculated id size ( %zu bytes ) is insufficient to represent count of %,lu ids",
+ self -> id_size, self -> num_ids );
+ return;
+ }
+
+ STATUS ( 2, "allocating id buffer" );
+
+ TRY ( ids = MemAlloc ( ctx, sizeof * ids * max_ids, false ) )
+ {
+ MapFileCrossCheck ( self, ctx, ids, max_ids );
+ MemFree ( ctx, ids, sizeof * ids * max_ids );
+ }
+ CATCH_ALL ()
+ {
+ ANNOTATE ( "failed to allocate memory ( %zu pairs ) for consistency check", max_ids );
+ return;
+ }
+
+ STATUS ( 2, "finished idx consistency check" );
+}
diff --git a/tools/sra-sort/map-file.h b/tools/sra-sort/map-file.h
new file mode 100644
index 0000000..992d765
--- /dev/null
+++ b/tools/sra-sort/map-file.h
@@ -0,0 +1,172 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_map_file_
+#define _h_sra_sort_map_file_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct IdxMapping;
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ * a file for storing id mappings
+ */
+typedef struct MapFile MapFile;
+
+
+/* Make
+ * creates an id map
+ */
+MapFile *MapFileMake ( const ctx_t *ctx, const char *name, bool random_access );
+
+
+/* MakeForPoslen
+ * creates an id map with an additional poslen file
+ * this is specially for PRIMARY_ALIGNMENT_IDS and SECONDARY_ALIGNMENT_IDS
+ * that use *_ALIGNMENT global position and length as a sorting key
+ * we drop it to a file after its generation so that it can be
+ * picked up later when copying the corresponding alignment table.
+ */
+MapFile *MapFileMakeForPoslen ( const ctx_t *ctx, const char *name );
+
+
+/* Release
+ */
+void MapFileRelease ( const MapFile *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+MapFile *MapFileDuplicate ( const MapFile *self, const ctx_t *ctx );
+
+
+/* SetIdRange
+ * required second-stage initialization
+ * must be called before any writes occur
+ */
+void MapFileSetIdRange ( MapFile *self, const ctx_t *ctx,
+ int64_t first_id, uint64_t num_ids );
+
+
+/* First
+ * return first mapped id
+ * Count
+ * return number of ids
+ */
+int64_t MapFileFirst ( const MapFile *self, const ctx_t *ctx );
+uint64_t MapFileCount ( const MapFile *self, const ctx_t *ctx );
+
+
+/* SetOldToNew
+ * write new=>old id mappings
+ */
+void MapFileSetOldToNew ( MapFile *self, const ctx_t *ctx,
+ struct IdxMapping const *ids, size_t count );
+
+
+/* SetNewToOld
+ * write new=>old id mappings
+ */
+void MapFileSetNewToOld ( MapFile *self, const ctx_t *ctx,
+ struct IdxMapping const *ids, size_t count );
+
+
+/* SetPoslen
+ * write global position/length in new-id order
+ */
+void MapFileSetPoslen ( MapFile *self, const ctx_t *ctx,
+ struct IdxMapping const *ids, size_t count );
+
+
+/* ReadPoslen
+ * read global position/length in new-id order
+ * starts reading at the indicated row
+ * returns the number read
+ */
+size_t MapFileReadPoslen ( const MapFile *self, const ctx_t *ctx,
+ int64_t start_id, uint64_t *poslen, size_t max_count );
+
+
+/* AllocMissingNewIds
+ * it is possible to have written fewer new=>old mappings
+ * than are supposed to be there, e.g. SEQUENCE that gets
+ * initially written by align tables. unaligned sequences
+ * need to fill in the remainder.
+ *
+ * returns the first newly allocated id
+ */
+int64_t MapFileAllocMissingNewIds ( MapFile *self, const ctx_t *ctx );
+
+
+/* SelectOldToNewPairs
+ * specify the range of new ids to select from
+ * read them in old=>new order
+ */
+size_t MapFileSelectOldToNewPairs ( const MapFile *self, const ctx_t *ctx,
+ int64_t start_id, struct IdxMapping *ids, size_t max_count );
+
+
+/* SelectOldToNewSingle
+ * specify the range of new ids to select from
+ * read them in old=>new order
+ */
+size_t MapFileSelectOldToNewSingle ( const MapFile *self, const ctx_t *ctx,
+ int64_t start_id, int64_t *ids, uint32_t *opt_ord, size_t max_count );
+
+
+/* MapSingleOldToNew
+ * reads a single old=>new mapping
+ * returns new id or 0 if not found
+ * optionally allocates a new id if "insert" is true
+ */
+int64_t MapFileMapSingleOldToNew ( MapFile *self, const ctx_t *ctx,
+ int64_t old_id, bool insert );
+
+
+/* MapMultipleOldToNew
+ * reads a single old=>new mapping
+ * returns new id or 0 if not found
+ * optionally allocates a new id if "insert" is true
+ */
+void MapFileMapMultipleOldToNew ( MapFile *self, const ctx_t *ctx,
+ int64_t *ids, size_t count, bool insert );
+
+
+/* ConsistencyCheck
+ * should be const, but MapFileOldToNew claims to be non-const
+ * and is used within. only non-const if "insert" is true.
+ */
+void MapFileConsistencyCheck ( const MapFile *self, const ctx_t *ctx );
+
+
+#endif
diff --git a/tools/sra-sort/mapping-row-set.c b/tools/sra-sort/mapping-row-set.c
new file mode 100644
index 0000000..6e69549
--- /dev/null
+++ b/tools/sra-sort/mapping-row-set.c
@@ -0,0 +1,496 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MappingRowSet MappingRowSet;
+#define ROWSET_IMPL MappingRowSet
+
+typedef struct MappingRowSetIterator MappingRowSetIterator;
+#define ROWSET_ITER_IMPL MappingRowSetIterator
+
+#include "row-set-priv.h"
+#include "tbl-pair.h"
+#include "idx-mapping.h"
+#include "map-file.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+FILE_ENTRY ( mapping-row-set );
+
+
+/*--------------------------------------------------------------------------
+ * MappingRowSetIterator
+ * interface to iterate RowSets
+ */
+struct MappingRowSetIterator
+{
+ RowSetIterator dad;
+
+ /* base row-id */
+ int64_t row_id;
+
+ /* last row-id + 1 */
+ int64_t last_excl;
+
+ /* takes its input from new=>old index */
+ const MapFile *idx;
+
+ /* working data within map */
+ IdxMapping *map;
+ size_t max_elems;
+ size_t num_elems;
+
+ bool large;
+};
+
+/*--------------------------------------------------------------------------
+ * MappingRowSet
+ * implementation of RowSet based upon auto-generated id pairs
+ */
+struct MappingRowSet
+{
+ RowSet dad;
+
+ /* keep-alive reference */
+ MappingRowSetIterator *iter;
+
+ /* working data within map */
+ IdxMapping *map;
+ size_t num_elems;
+ size_t cur_elem;
+};
+
+static
+void MappingRowSetWhack ( MappingRowSet *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ RowSetIteratorRelease ( & self -> iter -> dad, ctx );
+ MemFree ( ctx, self, sizeof *self );
+}
+
+static
+size_t MappingRowSetNextStat ( MappingRowSet *self, const ctx_t *ctx,
+ int64_t *ids, size_t max_ids )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* the starting row-id is taken from row-set-iterator
+ and offset by our current element counter */
+ int64_t row_id = self -> iter -> row_id + self -> cur_elem;
+
+ /* limit id generation to request */
+ size_t i, to_set = self -> num_elems - self -> cur_elem;
+ if ( to_set > max_ids )
+ to_set = max_ids;
+
+ /* fill request with serial numbers
+ could just as easily be the same number
+ the important thing is to limit the count
+ and produce the correct range */
+ for ( i = 0; i < to_set; ++ i )
+ ids [ i ] = row_id + i;
+
+ /* advance counter */
+ self -> cur_elem += to_set;
+ return to_set;
+}
+
+static
+size_t MappingRowSetNextPhys ( MappingRowSet *self, const ctx_t *ctx,
+ int64_t *ids, size_t max_ids )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* limit copy to request */
+ size_t i, to_copy = self -> num_elems - self -> cur_elem;
+ if ( to_copy > max_ids )
+ to_copy = max_ids;
+
+ /* copy out old-ids */
+ for ( i = 0; i < to_copy; ++ i )
+ ids [ i ] = self -> map [ self -> cur_elem + i ] . old_id;
+
+ /* advance counter */
+ self -> cur_elem += to_copy;
+ return to_copy;
+}
+
+static
+void MappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static );
+
+static RowSet_vt MappingRowSetPhys_vt =
+{
+ MappingRowSetWhack,
+ MappingRowSetNextPhys,
+ MappingRowSetReset
+};
+
+static RowSet_vt MappingRowSetStat_vt =
+{
+ MappingRowSetWhack,
+ MappingRowSetNextStat,
+ MappingRowSetReset
+};
+
+static
+void MappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( for_static )
+ {
+ /* go static */
+ self -> dad . vt = & MappingRowSetStat_vt;
+ }
+ else
+ {
+ size_t i, max_elems;
+ MappingRowSetIterator *iter = self -> iter;
+
+ /* go physical */
+ self -> dad . vt = & MappingRowSetPhys_vt;
+
+ /* limit id generation */
+ max_elems = iter -> max_elems;
+ if ( iter -> row_id + max_elems >= iter -> last_excl )
+ max_elems = ( size_t ) ( iter -> last_excl - iter -> row_id );
+
+ STATUS ( 4, "auto-generating %,zu ( old_id, new_id ) pairs where new_id >= %ld",
+ max_elems, iter -> row_id );
+ for ( i = 0; i < max_elems; ++ i )
+ iter -> map [ i ] . old_id = iter -> map [ i ] . new_id = iter -> row_id + i;
+
+ self -> num_elems = iter -> num_elems = max_elems;
+ }
+
+ /* ready */
+ self -> cur_elem = 0;
+}
+
+static
+void MapFileMappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static );
+
+static RowSet_vt MapFileMappingRowSetPhys_vt =
+{
+ MappingRowSetWhack,
+ MappingRowSetNextPhys,
+ MapFileMappingRowSetReset
+};
+
+static RowSet_vt MapFileMappingRowSetStat_vt =
+{
+ MappingRowSetWhack,
+ MappingRowSetNextStat,
+ MapFileMappingRowSetReset
+};
+
+static
+void MapFileMappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( for_static )
+ {
+ /* go static */
+ self -> dad . vt = & MapFileMappingRowSetStat_vt;
+ }
+ else
+ {
+ MappingRowSetIterator *iter = self -> iter;
+
+ /* go physical */
+ self -> dad . vt = & MapFileMappingRowSetPhys_vt;
+
+ /* read new-ids from file, selecting only those within range */
+ STATUS ( 3, "selecting first %,zu ( old_id, new_id ) pairs from old=>new where new_id >= %,ld",
+ iter -> max_elems, iter -> row_id );
+ ON_FAIL ( iter -> num_elems = MapFileSelectOldToNewPairs ( iter -> idx, ctx,
+ iter -> row_id, iter -> map, iter -> max_elems ) )
+ return;
+
+ self -> num_elems = iter -> num_elems;
+ STATUS ( 3, "selected %,zu ( old_id, new_id ) pairs", self -> num_elems );
+ }
+
+ /* ready */
+ self -> cur_elem = 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * MappingRowSetIterator
+ * interface to iterate RowSets
+ */
+
+static
+void MappingRowSetIteratorWhack ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> map != NULL )
+ MemFree ( ctx, self -> map, sizeof self -> map [ 0 ] * self -> max_elems );
+
+ RowSetIteratorDestroy ( & self -> dad, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void MapFileMappingRowSetIteratorWhack ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> map != NULL )
+ MemFree ( ctx, self -> map, sizeof self -> map [ 0 ] * self -> max_elems );
+
+ MapFileRelease ( self -> idx, ctx );
+
+ RowSetIteratorDestroy ( & self -> dad, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+RowSet *MappingRowSetIteratorMakeTheRowSet ( MappingRowSetIterator *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+ FUNC_ENTRY ( ctx );
+
+ MappingRowSet *rs;
+ TRY ( rs = MemAlloc ( ctx, sizeof * rs, false ) )
+ {
+ TRY ( RowSetInit ( & rs -> dad, ctx, vt ) )
+ {
+ /* initialize the row-set with map and self reference */
+ rs -> map = self -> map;
+ rs -> iter = ( MappingRowSetIterator* ) RowSetIteratorDuplicate ( & self -> dad, ctx );
+ rs -> num_elems = self -> num_elems;
+ rs -> cur_elem = 0;
+ return & rs -> dad;
+ }
+
+ MemFree ( ctx, rs, sizeof * rs );
+ }
+
+ return NULL;
+ }
+
+static
+struct IdxMapping *MappingRowSetIteratorGetIdxMapping ( MappingRowSetIterator *self, const ctx_t *ctx, size_t *num_items )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> map == NULL )
+ {
+ rc_t rc = RC ( rcExe, rcCursor, rcAccessing, rcSelf, rcInconsistent );
+ ERROR ( rc, "IdxMapping array is NULL" );
+ if ( num_items != NULL )
+ * num_items = 0;
+ return NULL;
+ }
+
+ if ( num_items != NULL )
+ * num_items = self -> num_elems;
+ return self -> map;
+}
+
+static
+int64_t *MappingRowSetIteratorGetSourceIds ( MappingRowSetIterator *self, const ctx_t *ctx, uint32_t **opt_ord, size_t *num_items )
+{
+ FUNC_ENTRY ( ctx );
+
+ ANNOTATE ( "CALLING GetSourceIds ON MAPPING ROWSET ITERATOR" );
+
+ if ( opt_ord != NULL )
+ * opt_ord = NULL;
+
+ if ( num_items != NULL )
+ * num_items = 0;
+
+ return NULL;
+}
+
+static
+void MappingRowSetIteratorAllocMap ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* determine the maximum number of elements */
+ const Tool *tp = ctx -> caps -> tool;
+ uint64_t count = self -> last_excl - self -> row_id;
+ self -> max_elems = self -> large ? tp -> max_large_idx_ids : tp -> max_idx_ids;
+ if ( ( uint64_t ) self -> max_elems > count )
+ self -> max_elems = ( size_t ) count;
+
+ /* try to allocate the memory
+ this may be limited by the MemBank */
+ do
+ {
+ CLEAR ();
+
+ TRY ( self -> map = MemAlloc ( ctx, sizeof self -> map [ 0 ] * self -> max_elems, false ) )
+ {
+ STATUS ( 4, "allocated mapping array of %,u elements", self -> max_elems );
+ return;
+ }
+
+ self -> max_elems >>= 1;
+ }
+ while ( self -> max_elems >= ctx -> caps -> tool -> min_idx_ids );
+
+ ANNOTATE ( "failed to allocate map for row-set" );
+}
+
+static
+RowSet *MappingRowSetIteratorNextInt ( MappingRowSetIterator *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+ /* no FUNC_ENTRY */
+
+ RowSet *rs = NULL;
+
+ /* on first invocation, allocate the map */
+ if ( self -> map == NULL )
+ {
+ ON_FAIL ( MappingRowSetIteratorAllocMap ( self, ctx ) )
+ return NULL;
+ }
+
+ /* advance row_id */
+ self -> row_id += self -> num_elems;
+ self -> num_elems = 0;
+
+ /* create the empty row-set */
+ if ( self -> row_id < self -> last_excl )
+ rs = MappingRowSetIteratorMakeTheRowSet ( self, ctx, vt );
+
+ return rs;
+}
+
+static
+RowSet *MappingRowSetIteratorNext ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ return MappingRowSetIteratorNextInt ( self, ctx, & MappingRowSetPhys_vt );
+}
+
+static
+RowSet *MapFileMappingRowSetIteratorNext ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ return MappingRowSetIteratorNextInt ( self, ctx, & MapFileMappingRowSetPhys_vt );
+}
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+static RowSetIterator_vt MappingRowSetIterator_vt =
+{
+ MappingRowSetIteratorWhack,
+ MappingRowSetIteratorGetIdxMapping,
+ MappingRowSetIteratorGetSourceIds,
+ MappingRowSetIteratorNext
+};
+
+/* MakeMappingRowSetIterator
+ * runs from first to last id in cursor
+ */
+RowSetIterator *TablePairMakeMappingRowSetIterator ( TablePair *self, const ctx_t *ctx, bool large )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> first_id > self -> last_excl )
+ {
+ rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcRange, rcInvalid );
+ INTERNAL_ERROR ( rc, "union of all column ranges improperly set" );
+ }
+ else
+ {
+ MappingRowSetIterator *rsi;
+
+ TRY ( rsi = MemAlloc ( ctx, sizeof * rsi, true ) )
+ {
+ TRY ( RowSetIteratorInit ( & rsi -> dad, ctx, & MappingRowSetIterator_vt ) )
+ {
+ rsi -> row_id = self -> first_id;
+ rsi -> last_excl = self -> last_excl;
+ rsi -> large = large;
+ return & rsi -> dad;
+ }
+
+ MemFree ( ctx, rsi, sizeof * rsi );
+ }
+ }
+
+ return NULL;
+}
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ */
+
+static RowSetIterator_vt MapFileMappingRowSetIterator_vt =
+{
+ MapFileMappingRowSetIteratorWhack,
+ MappingRowSetIteratorGetIdxMapping,
+ MappingRowSetIteratorGetSourceIds,
+ MapFileMappingRowSetIteratorNext
+};
+
+RowSetIterator * MapFileMakeMappingRowSetIterator ( const MapFile *self, const ctx_t *ctx, bool large )
+{
+ FUNC_ENTRY ( ctx );
+
+ MappingRowSetIterator *rsi;
+
+ /* create the iterator */
+ TRY ( rsi = MemAlloc ( ctx, sizeof * rsi, true ) )
+ {
+ TRY ( RowSetIteratorInit ( & rsi -> dad, ctx, & MapFileMappingRowSetIterator_vt ) )
+ {
+ /* initialize the row-set with map and self reference */
+ TRY ( rsi -> row_id = MapFileFirst ( self, ctx ) )
+ {
+ TRY ( rsi -> last_excl = rsi -> row_id + MapFileCount ( self, ctx ) )
+ {
+ TRY ( rsi -> idx = MapFileDuplicate ( self, ctx ) )
+ {
+ rsi -> large = large;
+ return & rsi -> dad;
+ }
+ }
+ }
+ }
+
+ MemFree ( ctx, rsi, sizeof * rsi );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/mem.c b/tools/sra-sort/mem.c
new file mode 100644
index 0000000..313a90f
--- /dev/null
+++ b/tools/sra-sort/mem.c
@@ -0,0 +1,68 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+FILE_ENTRY ( mem );
+
+
+/*--------------------------------------------------------------------------
+ * Mem
+ * memory allocation via MemBank in Caps
+ */
+void *MemAlloc ( const ctx_t *ctx, size_t bytes, bool clear )
+{
+ assert ( ctx != NULL );
+ assert ( ctx -> caps != NULL );
+ assert ( ctx -> caps -> mem != NULL );
+
+ return MemBankAlloc ( ctx -> caps -> mem, ctx, bytes, clear );
+}
+
+void MemFree ( const ctx_t *ctx, void *mem, size_t bytes )
+{
+ if ( mem != NULL )
+ {
+ assert ( ctx != NULL );
+ assert ( ctx -> caps != NULL );
+ assert ( ctx -> caps -> mem != NULL );
+
+ MemBankFree ( ctx -> caps -> mem, ctx, mem, bytes );
+ }
+}
+
+size_t MemInUse ( const ctx_t *ctx, size_t *opt_quota )
+{
+ assert ( ctx != NULL );
+ assert ( ctx -> caps != NULL );
+ assert ( ctx -> caps -> mem != NULL );
+
+ return MemBankInUse ( ctx -> caps -> mem, ctx, opt_quota );
+}
diff --git a/tools/sra-sort/mem.h b/tools/sra-sort/mem.h
new file mode 100644
index 0000000..fc3db7e
--- /dev/null
+++ b/tools/sra-sort/mem.h
@@ -0,0 +1,128 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_mem_
+#define _h_sra_sort_mem_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * Mem
+ * memory allocation via MemBank in Caps
+ */
+void *MemAlloc ( const ctx_t *ctx, size_t bytes, bool clear );
+void MemFree ( const ctx_t *ctx, void *mem, size_t bytes );
+size_t MemInUse ( const ctx_t *ctx, size_t *opt_quota );
+
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ * very, very, very watered down memory bank
+ */
+typedef struct MemBank_vt MemBank_vt;
+
+typedef struct MemBank MemBank;
+struct MemBank
+{
+ const MemBank_vt *vt;
+ KRefcount refcount;
+ uint32_t align;
+};
+
+#ifndef MEMBANK_IMPL
+#define MEMBANK_IMPL MemBank
+#endif
+
+struct MemBank_vt
+{
+ void ( * whack ) ( MEMBANK_IMPL *self, const ctx_t *ctx );
+ size_t ( * in_use ) ( const MEMBANK_IMPL *self, const ctx_t *ctx, size_t *opt_quota );
+ void* ( * alloc ) ( MEMBANK_IMPL *self, const ctx_t *ctx, size_t bytes, bool clear );
+ void ( * free ) ( MEMBANK_IMPL *self, const ctx_t *ctx, void *mem, size_t bytes );
+};
+
+
+/* Make
+ * make a new memory bank
+ */
+MemBank *MemBankMake ( const ctx_t *ctx, size_t quota );
+
+
+/* MakePaged
+ * make a new paged memory bank
+ */
+MemBank *MemBankMakePaged ( const ctx_t *ctx, size_t quota, size_t pgsize );
+
+
+/* Duplicate
+ * Release
+ */
+MemBank *MemBankDuplicate ( const MemBank *self, const ctx_t *ctx );
+void MemBankRelease ( const MemBank *self, const ctx_t *ctx );
+
+
+/* InUse
+ * report the number of bytes in use
+ * optionally returns quota
+ */
+#define MemBankInUse( self, ctx, opt_quota ) \
+ POLY_DISPATCH_INT ( in_use, self, const MEMBANK_IMPL, ctx, opt_quota )
+
+
+/* Alloc
+ * allocates some memory from bank
+ */
+#define MemBankAlloc( self, ctx, bytes, clear ) \
+ POLY_DISPATCH_PTR ( alloc, self, MEMBANK_IMPL, ctx, bytes, clear )
+
+
+/* Free
+ * returns memory to bank
+ * ignored by paged bank
+ * burden on caller to remember allocation size
+ */
+#define MemBankFree( self, ctx, mem, bytes ) \
+ POLY_DISPATCH_VOID ( free, self, MEMBANK_IMPL, ctx, mem, bytes )
+
+
+/* Init
+ */
+void MemBankInit ( MemBank *self, const ctx_t *ctx, const MemBank_vt *vt, const char *name );
+
+/* Destroy
+ */
+#define MemBankDestroy( self, ctx ) \
+ ( ( void ) 0 )
+
+#endif
diff --git a/tools/sra-sort/membank-priv.h b/tools/sra-sort/membank-priv.h
new file mode 100644
index 0000000..69301d4
--- /dev/null
+++ b/tools/sra-sort/membank-priv.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_membank_priv_
+#define _h_sra_sort_membank_priv_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ */
+
+/* MakePagedMMap
+ * make a new paged memory bank backed by memory map
+ */
+MemBank *MemBankMakePagedMMap ( const ctx_t *ctx, size_t quota, size_t pgsize );
+
+#endif
diff --git a/tools/sra-sort/membank.c b/tools/sra-sort/membank.c
new file mode 100644
index 0000000..6f29b75
--- /dev/null
+++ b/tools/sra-sort/membank.c
@@ -0,0 +1,296 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MemBankImpl MemBankImpl;
+#define MEMBANK_IMPL MemBankImpl
+
+#include <sysalloc.h>
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <klib/refcount.h>
+#include <klib/container.h>
+#include <klib/rc.h>
+#include <atomic.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+FILE_ENTRY ( membank );
+
+
+/*--------------------------------------------------------------------------
+ * MemBankImpl
+ * maintains a quota
+ */
+struct MemBankImpl
+{
+ MemBank dad;
+ size_t quota;
+ atomic_t avail;
+};
+
+static
+void MemBankImplWhack ( MemBankImpl *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ Caps *caps;
+
+ MemBankDestroy ( & self -> dad, ctx );
+
+ caps = ( Caps* ) ctx -> caps;
+ if ( & self -> dad != caps -> mem )
+ MemBankFree ( caps -> mem, ctx, self, sizeof * self );
+ else
+ {
+ free ( self );
+ caps -> mem = NULL;
+ }
+}
+
+
+/* InUse
+ * report the number of bytes in use
+ * optionally returns quota
+ */
+static
+size_t MemBankImplInUse ( const MemBankImpl *self, const ctx_t *ctx, size_t *quota )
+{
+ size_t dummy;
+
+ if ( quota == NULL )
+ quota = & dummy;
+
+ if ( self != NULL )
+ {
+ * quota = self -> quota;
+ return self -> quota - atomic_read ( & self -> avail );
+ }
+
+ * quota = 0;
+ return 0;
+}
+
+
+/* Alloc
+ * allocates some memory from bank
+ */
+static
+void *MemBankImplAlloc ( MemBankImpl *self, const ctx_t *ctx, size_t bytes, bool clear )
+{
+ if ( self != NULL )
+ {
+ /* allocation from the raw bank */
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ /* update "avail" atomicially */
+ size_t remaining, avail;
+ for ( avail = atomic_read ( & self -> avail ); avail >= bytes; avail = remaining )
+ {
+ /* subtract the bytes */
+ remaining = atomic_test_and_set ( & self -> avail,
+ ( atomic_int ) ( avail - bytes ), ( atomic_int ) avail );
+ if ( remaining == avail )
+ {
+ /* try to allocate the memory directly */
+ void *mem = clear ? calloc ( 1, bytes ) : malloc ( bytes );
+ if ( mem == NULL )
+ {
+ /* failed to get memory */
+ atomic_add ( & self -> avail, ( atomic_int ) bytes );
+ rc = RC ( rcExe, rcMemory, rcAllocating, rcMemory, rcExhausted );
+ ERROR ( rc, "failed to allocate %zu bytes of memory", bytes );
+ }
+ else if ( bytes > 256 * 1024 )
+ {
+ if ( bytes > 1024 * 1024 )
+ STATUS ( 3, "allocated %,zu bytes of memory", bytes );
+ else
+ STATUS ( 4, "allocated %,zu bytes of memory", bytes );
+ }
+
+ return mem;
+ }
+ }
+
+ /* at this point we could be using a timeout */
+ rc = RC ( rcExe, rcMemory, rcAllocating, rcRange, rcExcessive );
+ ERROR ( rc, "quota exceeded allocating %zu bytes of memory", bytes );
+ }
+
+ return NULL;
+}
+
+
+/* Free
+ * returns memory to bank
+ * ignored by paged bank
+ * burden on caller to remember allocation size
+ */
+static
+void MemBankImplFree ( MemBankImpl *self, const ctx_t *ctx, void *mem, size_t bytes )
+{
+ if ( mem != NULL )
+ {
+ FUNC_ENTRY ( ctx );
+
+ if ( self == NULL )
+ {
+ rc_t rc = RC ( rcExe, rcMemory, rcReleasing, rcSelf, rcNull );
+ ERROR ( rc, "attempt to return memory to NULL MemBank" );
+ }
+ else
+ {
+ /* release the memory */
+ free ( mem );
+
+ /* update the counters */
+ if ( bytes == 0 )
+ ANNOTATE ( "freed memory with size of 0 bytes" );
+ else
+ {
+ atomic_add ( & self -> avail, ( atomic_int ) bytes );
+
+ if ( bytes > 256 * 1024 )
+ {
+ if ( bytes > 1024 * 1024 )
+ STATUS ( 3, "freed %,zu bytes of memory", bytes );
+ else
+ STATUS ( 4, "freed %,zu bytes of memory", bytes );
+ }
+ }
+ }
+ }
+}
+
+static MemBank_vt MemBankImpl_vt =
+{
+ MemBankImplWhack,
+ MemBankImplInUse,
+ MemBankImplAlloc,
+ MemBankImplFree
+};
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ * very, very, very watered down memory bank
+ */
+
+
+/* Make
+ * make a new memory bank
+ * in a real system, this could make a bank linked to
+ * the primordial one. in this system, there is only
+ * a single bank, so this function is overloaded to
+ * create both the primordial and to reset quota on it.
+ */
+MemBank *MemBankMake ( const ctx_t *ctx, size_t quota )
+{
+ FUNC_ENTRY ( ctx );
+
+ MemBankImpl *mem = malloc ( sizeof * mem );
+ if ( mem == NULL )
+ exit ( -1 );
+
+ MemBankInit ( & mem -> dad, ctx, & MemBankImpl_vt, "Process MemBank" );
+
+ if ( quota < 4096 )
+ quota = 4096;
+
+ mem -> quota = quota;
+ atomic_set ( & mem -> avail, ( atomic_int ) ( quota - sizeof * mem ) );
+
+ return & mem -> dad;
+}
+
+
+/* Init
+ */
+void MemBankInit ( MemBank *self, const ctx_t *ctx, const MemBank_vt *vt, const char *name )
+{
+ FUNC_ENTRY ( ctx );
+
+ self -> vt = vt;
+ KRefcountInit ( & self -> refcount, 1, "MemBank", "Make", name );
+ self -> align = 0;
+}
+
+
+/* Duplicate
+ * Release
+ */
+MemBank *MemBankDuplicate ( const MemBank *self, const ctx_t *ctx )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "MemBank" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative: {
+ FUNC_ENTRY ( ctx );
+ rc_t rc = RC ( rcExe, rcMemory, rcAttaching, rcRange, rcExcessive );
+ ERROR ( rc, "excessive references on MemBank" );
+ return NULL;
+ }}
+ }
+ return ( MemBank* ) self;
+}
+
+void MemBankRelease ( const MemBank *self, const ctx_t *ctx )
+{
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "MemBank" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ( * self -> vt -> whack ) ( ( MEMBANK_IMPL* ) self, ctx );
+ break;
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative: {
+ FUNC_ENTRY ( ctx );
+ rc_t rc = RC ( rcExe, rcMemory, rcReleasing, rcRange, rcExcessive );
+ ERROR ( rc, "excessive releases on MemBank" );
+ }}
+ }
+}
diff --git a/tools/sra-sort/meta-pair.c b/tools/sra-sort/meta-pair.c
new file mode 100644
index 0000000..b4ca027
--- /dev/null
+++ b/tools/sra-sort/meta-pair.c
@@ -0,0 +1,458 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MetaPair StdMetaPair;
+#define METAPAIR_IMPL StdMetaPair
+
+#include "meta-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( meta-pair );
+
+
+/*--------------------------------------------------------------------------
+ * StdMetaPair
+ */
+
+static
+void StdMetaPairWhack ( StdMetaPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ MetaPairDestroy ( self, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static MetaPair_vt StdMetaPair_vt =
+{
+ StdMetaPairWhack
+};
+
+
+/*--------------------------------------------------------------------------
+ * MetaPair
+ * interface to pairing of source and destination tables
+ */
+
+
+/* Make
+ * make a standard metadata pair from existing KMetadata objects
+ */
+MetaPair *MetaPairMake ( const ctx_t *ctx,
+ const KMetadata *src, KMetadata *dst, const char *full_path )
+{
+ FUNC_ENTRY ( ctx );
+
+ StdMetaPair *meta;
+
+ TRY ( meta = MemAlloc ( ctx, sizeof * meta, false ) )
+ {
+ TRY ( MetaPairInit ( meta, ctx, & StdMetaPair_vt, src, dst, full_path ) )
+ {
+ return meta;
+ }
+
+ MemFree ( ctx, meta, sizeof * meta );
+ }
+
+ return NULL;
+}
+
+
+/* Release
+ * called by table at end of copy
+ */
+void MetaPairRelease ( MetaPair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "MetaPair" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcMetadata, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release MetaPair" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+MetaPair *MetaPairDuplicate ( MetaPair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "MetaPair" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcMetadata, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate MetaPair" );
+ return NULL;
+ }
+ }
+
+ return ( MetaPair* ) self;
+}
+
+
+/* Init
+ */
+void MetaPairInit ( MetaPair *self, const ctx_t *ctx, const MetaPair_vt *vt,
+ const KMetadata *src, KMetadata *dst, const char *full_spec )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ if ( self == NULL )
+ {
+ rc = RC ( rcExe, rcMetadata, rcConstructing, rcSelf, rcNull );
+ INTERNAL_ERROR ( rc, "bad MetaPair" );
+ return;
+ }
+
+ memset ( self, 0, sizeof * self );
+ self -> vt = vt;
+
+ rc = KMetadataAddRef ( self -> smeta = src );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to duplicate metadata 'src.%s'", full_spec );
+ else
+ {
+ rc = KMetadataAddRef ( self -> dmeta = dst );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to duplicate metadata 'dst.%s'", full_spec );
+ else
+ {
+ KRefcountInit ( & self -> refcount, 1, "MetaPair", "init", full_spec );
+ return;
+ }
+
+ KMetadataRelease ( self -> smeta );
+ self -> smeta = NULL;
+ }
+}
+
+/* Destroy
+ */
+void MetaPairDestroy ( MetaPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ rc = KMetadataRelease ( self -> dmeta );
+ if ( rc != 0 )
+ WARN ( "KMetadataRelease failed" );
+ KMetadataRelease ( self -> smeta );
+
+ memset ( self, 0, sizeof * self );
+}
+
+
+static
+void copy_meta_node_value ( const KMDataNode *src, const ctx_t *ctx, KMDataNode *dst )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ char buff [ 4096 ];
+ size_t num_read, remaining;
+
+ rc = KMDataNodeRead ( src, 0, buff, sizeof buff, & num_read, & remaining );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMDataNodeRead failed" );
+ else if ( num_read != 0 )
+ {
+ rc = KMDataNodeWrite ( dst, buff, num_read );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "KMDataNodeWrite failed" );
+ else
+ {
+ size_t offset;
+ for ( offset = num_read; remaining != 0; offset += num_read )
+ {
+ rc = KMDataNodeRead ( src, offset, buff, sizeof buff, & num_read, & remaining );
+ if ( rc != 0 )
+ {
+ INTERNAL_ERROR ( rc, "KMDataNodeRead failed" );
+ break;
+ }
+ rc = KMDataNodeAppend ( dst, buff, num_read );
+ if ( rc != 0 )
+ {
+ SYSTEM_ERROR ( rc, "KMDataNodeAppend failed" );
+ break;
+ }
+ }
+ }
+ }
+}
+
+static
+void copy_meta_node_attr ( const KMDataNode *src, const ctx_t *ctx, KMDataNode *dst, const char *name )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ size_t num_read;
+ char buff [ 4096 ];
+
+ rc = KMDataNodeReadAttr ( src, name, buff, sizeof buff, & num_read );
+ if ( rc != 0 )
+ ERROR ( rc, "KMDataNodeReadAttr '%s' failed", name );
+ else
+ {
+ rc = KMDataNodeWriteAttr ( dst, name, buff );
+ if ( rc != 0 )
+ ERROR ( rc, "KMDataNodeWriteAttr '%s' failed", name );
+ }
+}
+
+
+static
+const char *filter_node_name ( const char *name, size_t nsize, const char **exclude )
+{
+ uint32_t i;
+ for ( i = 0; exclude [ i ] != NULL; ++ i )
+ {
+ const char *x = exclude [ i ];
+ size_t xsize = strlen ( x );
+
+ /* allow exclude to be a prefix */
+ if ( xsize > 0 && x [ xsize - 1 ] == '*' )
+ {
+ if ( nsize < -- xsize )
+ continue;
+ }
+ else if ( nsize != xsize )
+ {
+ continue;
+ }
+
+ if ( memcmp ( name, x, xsize ) == 0 )
+ return NULL;
+ }
+
+ return name;
+ }
+
+
+static
+void copy_meta_node ( const KMDataNode *src, const ctx_t *ctx, KMDataNode *dst,
+ char path [ 4096 ], size_t psize, const char *owner_spec, const char **exclude )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* first, copy value */
+ TRY ( copy_meta_node_value ( src, ctx, dst ) )
+ {
+ /* next, copy attributes */
+ KNamelist *names;
+ rc_t rc = KMDataNodeListAttr ( src, & names );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMDataNodeListAttr failed" );
+ else
+ {
+ uint32_t count;
+ rc = KNamelistCount ( names, & count );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KNamelistCount failed" );
+ else
+ {
+ uint32_t i;
+ const char *name;
+ for ( i = 0; i < count; ++ i )
+ {
+ rc = KNamelistGet ( names, i, & name );
+ if ( rc != 0 )
+ {
+ INTERNAL_ERROR ( rc, "KNamelistGet [ %u ] failed", i );
+ break;
+ }
+
+ ON_FAIL ( copy_meta_node_attr ( src, ctx, dst, name ) )
+ break;
+ }
+
+ if ( ! FAILED () )
+ {
+ KNamelistRelease ( names );
+
+ /* last, copy children */
+ rc = KMDataNodeListChildren ( src, & names );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMDataNodeListChildren failed" );
+ else
+ {
+ rc = KNamelistCount ( names, & count );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KNamelistCount failed" );
+ else if ( psize + 1 == 4096 )
+ {
+ rc = RC ( rcExe, rcNode, rcCopying, rcBuffer, rcInsufficient );
+ ERROR ( rc, "metadata path too long" );
+ }
+ else
+ {
+ for ( i = 0; i < count; ++ i )
+ {
+ KMDataNode *dchild;
+ const KMDataNode *schild;
+
+ size_t nsize;
+ static const char *always_exclude [] =
+ {
+ ".seq", "col", "schema",
+ "HUFFMAN*", "MSC454*", "NREADS", "NUMBER_P*", "NUMBER_S*",
+ NULL
+ };
+
+ rc = KNamelistGet ( names, i, & name );
+ if ( rc != 0 )
+ {
+ INTERNAL_ERROR ( rc, "KNamelistGet [ %u ] failed", i );
+ break;
+ }
+
+ nsize = string_size ( name );
+ if ( psize + nsize + 1 >= 4096 )
+ {
+ WARN ( "skipping node '%.*s/%s' - path too long", ( uint32_t ) psize, path, name );
+ continue;
+ }
+
+ if ( psize != 0 )
+ path [ psize ++ ] = '/';
+ strcpy ( & path [ psize ], name );
+
+ if ( exclude != NULL )
+ {
+ name = filter_node_name ( name, nsize, exclude );
+ if ( name == NULL )
+ continue;
+ }
+
+ name = filter_node_name ( name, nsize, always_exclude );
+ if ( name == NULL )
+ continue;
+
+ rc = KMDataNodeOpenNodeRead ( src, & schild, name );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to open source metadata node '%s'", name );
+ else
+ {
+ rc = KMDataNodeOpenNodeUpdate ( dst, & dchild, name );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to open destination metadata node '%s'", name );
+ else
+ {
+ copy_meta_node ( schild, ctx, dchild, path, psize + nsize, owner_spec, exclude );
+ KMDataNodeRelease ( dchild );
+ }
+
+ KMDataNodeRelease ( schild );
+ }
+
+ if ( FAILED () )
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ KNamelistRelease ( names );
+ }
+ }
+}
+
+
+/* Copy
+ * copy from source to destination
+ */
+void MetaPairCopy ( MetaPair *self, const ctx_t *ctx, const char *owner_spec, const char **exclude )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ char path [ 4096 ];
+ const KMDataNode *src;
+
+ STATUS ( 3, "copying '%s' metadata", owner_spec );
+
+ rc = KMetadataOpenNodeRead ( self -> smeta, & src, "/" );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMetadataOpenNodeRead failed to obtain '%s' root node", owner_spec );
+ else
+ {
+ KMDataNode *dst;
+ rc = KMetadataOpenNodeUpdate ( self -> dmeta, & dst, "/" );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMetadataOpenNodeUpdate failed to obtain '%s' root node", owner_spec );
+ else
+ {
+ path [ 0 ] = 0;
+ copy_meta_node ( src, ctx, dst, path, 0, owner_spec, exclude );
+
+ KMDataNodeRelease ( dst );
+ }
+
+ KMDataNodeRelease ( src );
+ }
+
+ STATUS ( 3, "finished copying metadata" );
+}
diff --git a/tools/sra-sort/meta-pair.h b/tools/sra-sort/meta-pair.h
new file mode 100644
index 0000000..1aa65e5
--- /dev/null
+++ b/tools/sra-sort/meta-pair.h
@@ -0,0 +1,109 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_meta_pair_
+#define _h_sra_sort_meta_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KMetadata;
+
+
+/*--------------------------------------------------------------------------
+ * MetaPair
+ * interface to pairing of source and destination tables
+ */
+typedef struct MetaPair_vt MetaPair_vt;
+
+typedef struct MetaPair MetaPair;
+struct MetaPair
+{
+ /* polymorphic */
+ const MetaPair_vt *vt;
+
+ /* the pair of KMetadata */
+ struct KMetadata const *smeta;
+ struct KMetadata *dmeta;
+
+ KRefcount refcount;
+};
+
+#ifndef METAPAIR_IMPL
+#define METAPAIR_IMPL MetaPair
+#endif
+
+struct MetaPair_vt
+{
+ void ( * whack ) ( METAPAIR_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* Make
+ * make a standard metadata pair from existing KMetadata objects
+ */
+MetaPair *MetaPairMake ( const ctx_t *ctx,
+ struct KMetadata const *src, struct KMetadata *dst,
+ const char *full_path );
+
+
+/* Release
+ * called by table at end of copy
+ */
+void MetaPairRelease ( MetaPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+MetaPair *MetaPairDuplicate ( MetaPair *self, const ctx_t *ctx );
+
+
+/* Init
+ */
+void MetaPairInit ( MetaPair *self, const ctx_t *ctx, const MetaPair_vt *vt,
+ struct KMetadata const *src, struct KMetadata *dst, const char *full_spec );
+
+/* Destroy
+ */
+void MetaPairDestroy ( MetaPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ * copy from source to destination
+ */
+void MetaPairCopy ( MetaPair *self, const ctx_t *ctx,
+ const char *owner_spec, const char **exclude );
+
+
+#endif /* _h_sra_sort_meta_pair_ */
diff --git a/tools/sra-sort/paged-membank.c b/tools/sra-sort/paged-membank.c
new file mode 100644
index 0000000..a91c4d4
--- /dev/null
+++ b/tools/sra-sort/paged-membank.c
@@ -0,0 +1,244 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct PagedMemBank PagedMemBank;
+#define MEMBANK_IMPL PagedMemBank
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+#include "sra-sort.h"
+
+#include "membank-priv.h"
+
+#include <klib/container.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+FILE_ENTRY ( paged-membank );
+
+
+/*--------------------------------------------------------------------------
+ * MemPage
+ */
+typedef struct MemPage MemPage;
+struct MemPage
+{
+ SLNode n;
+ size_t used;
+};
+
+/*--------------------------------------------------------------------------
+ * PagedMemBank
+ * designed to allocate a lot of little bits of memory
+ * and then free them all at once
+ */
+struct PagedMemBank
+{
+ MemBank dad;
+ size_t quota;
+ size_t avail;
+ size_t pgsize;
+ SLList pages;
+};
+
+
+/* Whack
+ */
+static
+void PagedMemBankWhack ( PagedMemBank *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ MemPage *pg = ( MemPage* ) SLListPopHead ( & self -> pages );
+ while ( pg != NULL )
+ {
+ MemFree ( ctx, pg, self -> pgsize );
+ pg = ( MemPage* ) SLListPopHead ( & self -> pages );
+ }
+
+ MemBankDestroy ( & self -> dad, ctx );
+
+ MemFree ( ctx, self, sizeof * self );
+}
+
+
+/* InUse
+ * report the number of bytes in use
+ * optionally returns quota
+ */
+static
+size_t PagedMemBankInUse ( const PagedMemBank *self, const ctx_t *ctx, size_t *quota )
+{
+ size_t dummy;
+
+ if ( quota == NULL )
+ quota = & dummy;
+
+ if ( self != NULL )
+ {
+ * quota = self -> quota;
+ return self -> quota - self -> avail;
+ }
+
+ * quota = 0;
+ return 0;
+}
+
+
+/* Alloc
+ * allocates some memory from bank
+ */
+static
+void *PagedMemBankAlloc ( PagedMemBank *self, const ctx_t *ctx, size_t bytes, bool clear )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ void *mem;
+ size_t avail;
+
+ /* check current alloc page */
+ MemPage *pg = ( MemPage* ) SLListHead ( & self -> pages );
+ if ( pg != NULL )
+ {
+ /* calculate bytes available */
+ avail = self -> pgsize - pg -> used;
+ if ( avail >= bytes )
+ {
+ /* got the memory */
+ mem = & ( ( uint8_t* ) pg ) [ pg -> used ];
+ pg -> used += bytes;
+
+ /* zero it out if so requested */
+ if ( clear )
+ memset ( mem, 0, bytes );
+
+ return mem;
+ }
+ }
+
+ /* either didn't have a page or didn't have enough memory
+ test for being able to fit in ANY page */
+ if ( bytes > self -> pgsize - sizeof * pg )
+ {
+ rc = RC ( rcExe, rcMemory, rcAllocating, rcData, rcExcessive );
+ ERROR ( rc, "requested memory allocation of %zu bytes is too large to fit into a page", bytes );
+ return NULL;
+ }
+
+ /* allocate the bytes */
+ if ( self -> avail >= self -> pgsize )
+ {
+ /* going to allocate a full page */
+ self -> avail -= self -> pgsize;
+
+ /* ask process for memory block */
+ TRY ( pg = MemAlloc ( ctx, self -> pgsize, false ) )
+ {
+ /* got it - push it onto stack */
+ pg -> used = sizeof * pg + bytes;
+ SLListPushHead ( & self -> pages, & pg -> n );
+
+ /* clear memory of asked */
+ mem = pg + 1;
+ if ( clear )
+ memset ( mem, 0, bytes );
+
+ return mem;
+ }
+
+ /* return with error from main MemBank */
+ return NULL;
+ }
+
+ /* at this point we could be using a timeout */
+ rc = RC ( rcExe, rcMemory, rcAllocating, rcRange, rcExcessive );
+ ERROR ( rc, "quota exceeded allocating %zu bytes of page memory for a %zu byte block", self -> pgsize, bytes );
+
+ return NULL;
+}
+
+
+/* Free
+ * ignored by paged bank
+ */
+static
+void PagedMemBankFree ( PagedMemBank *self, const ctx_t *ctx, void *mem, size_t bytes )
+{
+}
+
+
+static MemBank_vt PagedMemBank_vt =
+{
+ PagedMemBankWhack,
+ PagedMemBankInUse,
+ PagedMemBankAlloc,
+ PagedMemBankFree
+};
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ * very, very, very watered down memory bank
+ */
+
+/* MakePaged
+ * make a new paged memory bank
+ */
+MemBank *MemBankMakePaged ( const ctx_t *ctx, size_t quota, size_t pgsize )
+{
+ FUNC_ENTRY ( ctx );
+ PagedMemBank *mem;
+
+ /* special case for using memory mapped banks */
+ if ( ctx -> caps -> tool -> mmapdir != NULL )
+ return MemBankMakePagedMMap ( ctx, quota, pgsize );
+
+ if ( pgsize < 4096 )
+ pgsize = 4096;
+
+ if ( quota < pgsize )
+ quota = pgsize;
+
+ TRY ( mem = MemAlloc ( ctx, sizeof * mem, true ) )
+ {
+ TRY ( MemBankInit ( & mem -> dad, ctx, & PagedMemBank_vt, "Task MemBank" ) )
+ {
+ mem -> quota = mem -> avail = quota;
+ mem -> pgsize = pgsize;
+ return & mem -> dad;
+ }
+
+ MemFree ( ctx, mem, sizeof * mem );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/paged-mmapbank.c b/tools/sra-sort/paged-mmapbank.c
new file mode 100644
index 0000000..aa6d6e5
--- /dev/null
+++ b/tools/sra-sort/paged-mmapbank.c
@@ -0,0 +1,399 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct PagedMMapBank PagedMMapBank;
+#define MEMBANK_IMPL PagedMMapBank
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+#include "sra-sort.h"
+
+#include "membank-priv.h"
+
+#include <kfs/mmap.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <klib/container.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+FILE_ENTRY ( paged-mmapbank );
+
+
+/*--------------------------------------------------------------------------
+ * MMapPage
+ * a "page" which is really an entire mmap
+ */
+typedef struct MMapPage MMapPage;
+struct MMapPage
+{
+ SLNode n;
+ KMMap *mmap;
+ uint8_t *addr;
+ size_t size;
+ size_t used;
+};
+
+static
+void CC MMapPageWhack ( SLNode *n, void *data )
+{
+ MMapPage *self = ( MMapPage* ) n;
+ const ctx_t *ctx = ( const void* ) data;
+
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc = KMMapRelease ( self -> mmap );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "KMMapRelease failed" );
+
+ MemFree ( ctx, self, sizeof * self );
+}
+
+
+/*--------------------------------------------------------------------------
+ * PagedMMapBank
+ * a memory bank based upon system mmap
+ */
+struct PagedMMapBank
+{
+ MemBank dad;
+ size_t quota;
+ size_t used;
+ size_t pgsize;
+ KFile *backing;
+ SLList pages;
+};
+
+
+/* Whack
+ */
+static
+void PagedMMapBankWhack ( PagedMMapBank *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ SLListWhack ( & self -> pages, MMapPageWhack, ( void* ) ctx );
+
+ rc = KFileRelease ( self -> backing );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "KFileRelease failed on backing file" );
+ self -> backing = NULL;
+
+ MemBankDestroy ( & self -> dad, ctx );
+
+ MemFree ( ctx, self, sizeof * self );
+}
+
+
+/* InUse
+ * report the number of bytes in use
+ * optionally returns quota
+ */
+static
+size_t PagedMMapBankInUse ( const PagedMMapBank *self, const ctx_t *ctx, size_t *quota )
+{
+ size_t dummy;
+
+ if ( quota == NULL )
+ quota = & dummy;
+
+ if ( self != NULL )
+ {
+ * quota = self -> quota;
+ return self -> used;
+ }
+
+ * quota = 0;
+ return 0;
+}
+
+
+/* CreateBacking
+ */
+static
+void PagedMMapBankCreateBacking ( PagedMMapBank *self, const ctx_t *ctx, KFile **backing )
+{
+ FUNC_ENTRY ( ctx );
+
+ KDirectory *wd;
+ rc_t rc = KDirectoryNativeDir ( & wd );
+ if ( rc != 0 )
+ ABORT ( rc, "KDirectoryNativeDir failed" );
+ else
+ {
+ static uint32_t file_no;
+ const Tool *tp = ctx -> caps -> tool;
+
+ ++ file_no;
+ STATUS ( 5, "creating backing file '%s/sra-sort-buffer.%d.%u'", tp -> mmapdir, tp -> pid, file_no );
+
+ rc = KDirectoryCreateFile ( wd, backing, true,
+ 0600, kcmInit | kcmParents, "%s/sra-sort-buffer.%d.%u",
+ tp -> mmapdir, tp -> pid, file_no );
+ if ( rc != 0 )
+ ABORT ( rc, "KDirectoryCreateFile failed when creating mem-mapped buffer" );
+ else
+ {
+#if ! WINDOWS
+ /* unlinking file is a wonderful thing */
+ if ( tp -> unlink_idx_files )
+ {
+ /* unlink KFile */
+ STATUS ( 5, "unlinking backing file '%s/sra-sort-buffer.%d.%u'", tp -> mmapdir, tp -> pid, file_no );
+ rc = KDirectoryRemove ( wd, false, "%s/sra-sort-buffer.%d.%u",
+ tp -> mmapdir, tp -> pid, file_no );
+ if ( rc != 0 )
+ WARN ( "failed to unlink mem-mapped buffer file #%u", file_no );
+ }
+#endif
+ /* set initial size to a page */
+ rc = KFileSetSize ( * backing, self -> pgsize );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "KFileSetSize failed to set file to %zu bytes", self -> pgsize );
+ }
+
+ KDirectoryRelease ( wd );
+ }
+}
+
+
+/* ExtendBacking
+ * creates a backing file if not there
+ * extends it otherwise
+ */
+static
+void PagedMMapBankExtendBacking ( PagedMMapBank *self, const ctx_t *ctx )
+{
+#if USE_SINGLE_BACKING_FILE
+
+ /* this code is only useful if using a single file for all maps */
+ FUNC_ENTRY ( ctx );
+
+ /* create the file on first attempt */
+ if ( self -> backing == NULL )
+ {
+ assert ( self -> used == 0 );
+ PagedMMapBankCreateBacking ( self, ctx, & self -> backing )l
+ }
+ else
+ {
+ /* extend the file */
+ rc_t rc;
+ STATUS ( 4, "extending common buffer file to %,zu bytes", self -> used + self -> pgsize );
+ rc = KFileSetSize ( self -> backing, self -> used + self -> pgsize );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "KFileSetSize failed to extend file size to %zu bytes", self -> used + self -> pgsize );
+ }
+#endif
+}
+
+
+/* MapPage
+ */
+static
+void PagedMMapBankMapPage ( PagedMMapBank *self, const ctx_t *ctx, MMapPage *pg )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+#if USE_SINGLE_BACKING_FILE
+ STATUS ( 4, "allocating new mmap of %,zu bytes onto common file at offset %,zu", self -> pgsize, self -> used );
+ rc = KMMapMakeRgnUpdate ( & pg -> mmap, self -> backing, self -> used, self -> pgsize );
+#else
+ KFile *backing;
+ ON_FAIL ( PagedMMapBankCreateBacking ( self, ctx, & backing ) )
+ return;
+
+ STATUS ( 4, "allocating new mmap of %,zu bytes onto its own file", self -> pgsize );
+ rc = KMMapMakeRgnUpdate ( & pg -> mmap, backing, 0, self -> pgsize );
+ KFileRelease ( backing );
+#endif
+
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "KMMapMakeRgnUpdate failed creating %zu byte region", self -> pgsize );
+ else
+ {
+ rc = KMMapAddrUpdate ( pg -> mmap, ( void** ) & pg -> addr );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMMapAddrUpdate failed" );
+ else
+ {
+ rc = KMMapSize ( pg -> mmap, & pg -> size );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "KMMapSize failed" );
+ else
+ {
+ pg -> used = 0;
+ self -> used += self -> pgsize;
+ STATUS ( 4, "total mem-mapped buffer space: %,zu bytes", self -> used );
+ return;
+ }
+ }
+
+ KMMapRelease ( pg -> mmap );
+ pg -> mmap = NULL;
+ }
+}
+
+
+/* Alloc
+ * allocates some memory from bank
+ */
+static
+void *PagedMMapBankAlloc ( PagedMMapBank *self, const ctx_t *ctx, size_t bytes, bool clear )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ void *mem;
+ size_t avail;
+
+ /* check current alloc page */
+ MMapPage *pg = ( MMapPage* ) SLListHead ( & self -> pages );
+ if ( pg != NULL )
+ {
+ /* calculate bytes available */
+ avail = pg -> size - pg -> used;
+ if ( avail >= bytes )
+ {
+ /* got the memory */
+ mem = & pg -> addr [ pg -> used ];
+ pg -> used += bytes;
+
+ /* zero it out if so requested */
+ if ( clear )
+ memset ( mem, 0, bytes );
+
+ return mem;
+ }
+ }
+
+ /* either didn't have a page or didn't have enough memory
+ test for being able to fit in ANY page */
+ if ( bytes > self -> pgsize )
+ {
+ rc = RC ( rcExe, rcMemory, rcAllocating, rcData, rcExcessive );
+ ERROR ( rc, "requested memory allocation of %zu bytes is too large to fit into a page", bytes );
+ return NULL;
+ }
+
+ /* allocate the bytes */
+ if ( self -> used + self -> pgsize <= self -> quota )
+ {
+ /* ask process for memory block */
+ TRY ( pg = MemAlloc ( ctx, sizeof * pg, false ) )
+ {
+ /* increase size of underlying file */
+ TRY ( PagedMMapBankExtendBacking ( self, ctx ) )
+ {
+ TRY ( PagedMMapBankMapPage ( self, ctx, pg ) )
+ {
+ /* got it - push it onto stack */
+ SLListPushHead ( & self -> pages, & pg -> n );
+
+ /* clear memory of asked */
+ mem = pg -> addr;
+ pg -> used = bytes;
+ if ( clear )
+ memset ( mem, 0, bytes );
+
+ return mem;
+ }
+ }
+
+ MemFree ( ctx, pg, sizeof * pg );
+ }
+
+ return NULL;
+ }
+
+ /* at this point we could be using a timeout */
+ rc = RC ( rcExe, rcMemory, rcAllocating, rcRange, rcExcessive );
+ ERROR ( rc, "quota exceeded allocating %zu bytes of page memory for a %zu byte block", self -> pgsize, bytes );
+
+ return NULL;
+}
+
+
+/* Free
+ * ignored by paged bank
+ */
+static
+void PagedMMapBankFree ( PagedMMapBank *self, const ctx_t *ctx, void *mem, size_t bytes )
+{
+}
+
+
+static MemBank_vt PagedMMapBank_vt =
+{
+ PagedMMapBankWhack,
+ PagedMMapBankInUse,
+ PagedMMapBankAlloc,
+ PagedMMapBankFree
+};
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ * very, very, very watered down memory bank
+ */
+
+/* MakePagedMMap
+ * make a new paged memory bank backed by memory map
+ */
+MemBank *MemBankMakePagedMMap ( const ctx_t *ctx, size_t quota, size_t pgsize )
+{
+ FUNC_ENTRY ( ctx );
+ PagedMMapBank *mem;
+
+ if ( pgsize < 256 * 1024 * 1024 )
+ pgsize = 256 * 1024 * 1024;
+
+ if ( quota < pgsize )
+ quota = pgsize;
+
+ TRY ( mem = MemAlloc ( ctx, sizeof * mem, true ) )
+ {
+ TRY ( MemBankInit ( & mem -> dad, ctx, & PagedMMapBank_vt, "Memory Mapped Task MemBank" ) )
+ {
+ mem -> quota = quota;
+ mem -> pgsize = pgsize;
+ return & mem -> dad;
+ }
+
+ MemFree ( ctx, mem, sizeof * mem );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/poslen-col-pair.c b/tools/sra-sort/poslen-col-pair.c
new file mode 100644
index 0000000..452b134
--- /dev/null
+++ b/tools/sra-sort/poslen-col-pair.c
@@ -0,0 +1,559 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct PoslenColReader PoslenColReader;
+#define COLREADER_IMPL PoslenColReader
+
+typedef struct PoslenColWriter PoslenColWriter;
+#define COLWRITER_IMPL PoslenColWriter
+
+#include "col-pair.h"
+#include "tbl-pair.h"
+#include "map-file.h"
+#include "glob-poslen.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kapp/main.h>
+#include <kfs/defs.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( poslen-col-pair );
+
+
+/*--------------------------------------------------------------------------
+ * PoslenColReader
+ * implementation of ColumnReader based upon MapFile temp column read
+ */
+struct PoslenColReader
+{
+ ColumnReader dad;
+
+ /* cached first id in column */
+ int64_t first_id;
+
+ /* buffer for reading poslen */
+ int64_t start_id, excl_stop_id;
+ uint64_t *buff;
+ size_t max_ids;
+
+ /* source of poslen */
+ const MapFile *tmp_col;
+
+ size_t full_spec_size;
+ char full_spec [ 1 ];
+};
+
+
+/* Whack
+ */
+static
+void PoslenColReaderWhack ( PoslenColReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* self-bytes */
+ size_t bytes = sizeof * self + self -> full_spec_size;
+
+ /* free buffer */
+ if ( self -> buff != NULL )
+ {
+ ON_FAIL ( MemFree ( ctx, self -> buff, self -> max_ids * sizeof * self -> buff ) )
+ {
+ CLEAR ();
+ }
+ self -> buff = NULL;
+ }
+
+ /* release MapFile */
+ ON_FAIL ( MapFileRelease ( self -> tmp_col, ctx ) )
+ {
+ WARN ( "MapFileRelease failed on '%s'", self -> full_spec );
+ CLEAR ();
+ }
+ self -> tmp_col = NULL;
+
+ /* free self */
+ MemFree ( ctx, self, bytes );
+}
+
+/* FullSpec
+ */
+static
+const char *PoslenColReaderFullSpec ( const PoslenColReader *self, const ctx_t *ctx )
+{
+ return self -> full_spec;
+}
+
+
+/* IdRange
+ * returns the number of ids available
+ * and optionally the first id
+ */
+static
+uint64_t PoslenColReaderIdRange ( const PoslenColReader *self,
+ const ctx_t *ctx, int64_t *opt_first )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( opt_first != NULL )
+ {
+ ON_FAIL ( * opt_first = self -> first_id )
+ return 0;
+ }
+
+ return MapFileCount ( self -> tmp_col, ctx );
+}
+
+
+/* PreCopy
+ * create buffer
+ */
+static
+void PoslenColReaderPreCopy ( PoslenColReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ const Tool *tp = ctx -> caps -> tool;
+
+ self -> max_ids = tp -> max_poslen_ids;
+ if ( tp -> max_poslen_ids < 4096 )
+ self -> max_ids = 4096;
+
+ TRY ( self -> buff = MemAlloc ( ctx, self -> max_ids * sizeof * self -> buff, false ) )
+ {
+ self -> start_id = self -> excl_stop_id = self -> first_id;
+ }
+ CATCH_ALL ()
+ {
+ ANNOTATE ( "failed to allocate buffer for PoslenColReader" );
+ }
+}
+
+
+/* PostCopy
+ * douse buffer
+ */
+static
+void PoslenColReaderPostCopy ( PoslenColReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> buff != NULL )
+ {
+ TRY ( MemFree ( ctx, self -> buff, self -> max_ids * sizeof * self -> buff ) )
+ {
+ self -> buff = NULL;
+ }
+ }
+}
+
+
+/* Read
+ * read next row of data
+ * returns NULL if no rows are available
+ */
+static
+const void *PoslenColReaderRead ( PoslenColReader *self, const ctx_t *ctx,
+ int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ uint32_t dummy;
+
+ if ( elem_bits == NULL )
+ elem_bits = & dummy;
+ if ( boff == NULL )
+ boff = & dummy;
+ if ( row_len == NULL )
+ row_len = & dummy;
+
+ * elem_bits = 64;
+ * boff = 0;
+ * row_len = 0;
+
+ assert ( self -> buff != NULL );
+
+ if ( row_id < self -> start_id || row_id >= self -> excl_stop_id )
+ {
+ size_t num_read;
+
+ if ( row_id < self -> first_id )
+ return NULL;
+
+ /* generate page-aligned starting id */
+ self -> start_id = ( row_id - self -> first_id );
+ self -> start_id -= self -> start_id % self -> max_ids;
+ self -> start_id += self -> first_id;
+ assert ( self -> start_id + self -> max_ids > row_id );
+
+ /* read into buffer */
+ ON_FAIL ( num_read = MapFileReadPoslen ( self -> tmp_col, ctx, self -> start_id, self -> buff, self -> max_ids ) )
+ {
+ self -> start_id = self -> excl_stop_id = self -> first_id;
+ return NULL;
+ }
+ self -> excl_stop_id = self -> start_id + num_read;
+
+ if ( row_id >= self -> excl_stop_id )
+ return NULL;
+ }
+
+ * row_len = 1;
+ return & self -> buff [ row_id - self -> start_id ];
+}
+
+static ColumnReader_vt PoslenColReader_vt =
+{
+ PoslenColReaderWhack,
+ PoslenColReaderFullSpec,
+ PoslenColReaderIdRange,
+ PoslenColReaderPreCopy,
+ PoslenColReaderPostCopy,
+ PoslenColReaderRead
+};
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+
+/* MakePoslenColReader
+ * make temporary column reader
+ */
+ColumnReader *TablePairMakePoslenColReader ( TablePair *self, const ctx_t *ctx,
+ const MapFile *tmp_col, const char *colspec )
+{
+ FUNC_ENTRY ( ctx );
+
+ PoslenColReader *col;
+ size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "src.." - 1;
+
+ TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+ {
+ TRY ( ColumnReaderInit ( & col -> dad, ctx, & PoslenColReader_vt ) )
+ {
+ TRY ( col -> first_id = MapFileFirst ( tmp_col, ctx ) )
+ {
+ TRY ( col -> tmp_col = MapFileDuplicate ( tmp_col, ctx ) )
+ {
+ rc_t rc;
+
+ col -> dad . presorted = true;
+ col -> start_id = col -> excl_stop_id = col -> first_id;
+ col -> buff = NULL;
+ col -> max_ids = ctx -> caps -> tool -> max_poslen_ids;
+ col -> full_spec_size = ( uint32_t ) full_spec_size;
+
+ rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+ "src.%s.%s", self -> full_spec, colspec );
+ if ( rc == 0 )
+ return & col -> dad;
+
+ ABORT ( rc, "miscalculated string size" );
+ }
+ }
+ }
+
+ MemFree ( ctx, col, sizeof * col + full_spec_size );
+ }
+ CATCH_ALL ()
+ {
+ ANNOTATE ( "failed to allocate %zu bytes for PoslenColReader", sizeof * col + full_spec_size );
+ }
+
+ return NULL;
+
+}
+
+
+/*--------------------------------------------------------------------------
+ * PoslenColWriter
+ * implementation of ColumnWriter based upon VCursor
+ */
+struct PoslenColWriter
+{
+ ColumnWriter dad;
+
+ VCursor *curs;
+ uint32_t global_ref_start;
+ uint32_t ref_len;
+
+ uint32_t full_spec_size;
+ char full_spec [ 1 ];
+};
+
+static
+void PoslenColWriterWhack ( PoslenColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ rc = VCursorRelease ( self -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+
+ MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+
+static
+const char *PoslenColWriterFullSpec ( const PoslenColWriter *self, const ctx_t *ctx )
+{
+ return self -> full_spec;
+}
+
+static
+void PoslenColWriterDummyStub ( PoslenColWriter *self, const ctx_t *ctx )
+{
+}
+
+static
+void PoslenColWriterWrite ( PoslenColWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ uint64_t poslen;
+
+ uint32_t ref_len;
+ uint64_t global_ref_start;
+
+ assert ( elem_bits == 64 );
+ assert ( boff == 0 );
+ assert ( row_len == 1 );
+
+ memcpy ( & poslen, data, sizeof poslen );
+ global_ref_start = decode_pos_len ( poslen );
+ ref_len = poslen_to_len ( poslen );
+
+ rc = VCursorOpenRow ( self -> curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorWrite ( self -> curs, self -> global_ref_start, sizeof global_ref_start * 8, & global_ref_start, 0, 1 );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorWrite failed for GLOBAL_REF_START of column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorWrite ( self -> curs, self -> ref_len, sizeof ref_len * 8, & ref_len, 0, 1 );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorWrite failed for REF_LEN of column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorCommitRow ( self -> curs );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorCommit failed for column '%s'", self -> full_spec );
+ }
+ }
+
+ rc = VCursorCloseRow ( self -> curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+ }
+}
+
+static
+void PoslenColWriterWriteStatic ( PoslenColWriter *self, const ctx_t *ctx,
+ uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+ FUNC_ENTRY ( ctx );
+
+ uint64_t poslen;
+
+ uint32_t ref_len;
+ uint64_t global_ref_start;
+
+ assert ( elem_bits == 64 );
+ assert ( boff == 0 );
+ assert ( row_len == 1 );
+
+ memcpy ( & poslen, data, sizeof poslen );
+ global_ref_start = decode_pos_len ( poslen );
+ ref_len = poslen_to_len ( poslen );
+
+ for ( ; ! FAILED () && count > 0; -- count )
+ {
+ rc_t rc = VCursorOpenRow ( self -> curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorWrite ( self -> curs, self -> global_ref_start, sizeof global_ref_start * 8, & global_ref_start, 0, 1 );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorWrite failed for GLOBAL_REF_START of column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorWrite ( self -> curs, self -> ref_len, sizeof ref_len * 8, & ref_len, 0, 1 );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorWrite failed for REF_LEN of column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorCommitRow ( self -> curs );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorCommit failed for column '%s'", self -> full_spec );
+ else if ( count > 1 )
+ {
+ uint64_t cnt = (count < 0x20000000U ) ? count : 0x20000000U;
+ rc = VCursorRepeatRow ( self -> curs, cnt - 1 );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "VCursorRepeatRow failed for column '%s'", self -> full_spec );
+ count -= cnt - 1;
+ }
+ }
+ }
+
+ rc = VCursorCloseRow ( self -> curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+ }
+ }
+}
+
+static
+void PoslenColWriterCommit ( PoslenColWriter *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ rc = VCursorCommit ( self -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorCommit failed on column '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorRelease ( self -> curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+ else
+ {
+ self -> curs = NULL;
+ }
+ }
+}
+
+
+static ColumnWriter_vt PoslenColWriter_vt =
+{
+ PoslenColWriterWhack,
+ PoslenColWriterFullSpec,
+ PoslenColWriterDummyStub,
+ PoslenColWriterDummyStub,
+ PoslenColWriterWrite,
+ PoslenColWriterWriteStatic,
+ PoslenColWriterCommit
+};
+
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+
+/* MakePoslenColWriter
+ */
+ColumnWriter *TablePairMakePoslenColWriter ( TablePair *self, const ctx_t *ctx,
+ VCursor *opt_curs, const char *colspec )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ VCursor *curs;
+
+ if ( opt_curs != NULL )
+ rc = VCursorAddRef ( curs = opt_curs );
+ else
+ rc = VTableCreateCursorWrite ( self -> dtbl, & curs, kcmInsert );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to create cursor on column 'dst.%s.%s'", self -> full_spec, colspec );
+ else
+ {
+ uint32_t global_ref_start;
+ const char *subcolspec = "(U64)GLOBAL_REF_START";
+ rc = VCursorAddColumn ( curs, & global_ref_start, subcolspec );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to add column 'dst.%s.%s' to cursor", self -> full_spec, subcolspec );
+ else
+ {
+ uint32_t ref_len;
+ subcolspec = "(INSDC:coord:len)REF_LEN";
+ rc = VCursorAddColumn ( curs, & ref_len, subcolspec );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to add column 'dst.%s.%s' to cursor", self -> full_spec, subcolspec );
+ else
+ {
+ VCursorSuspendTriggers ( curs );
+ rc = VCursorOpen ( curs );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to open cursor on columns for 'dst.%s.%s'", self -> full_spec, colspec );
+ else
+ {
+ PoslenColWriter *col;
+ size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "dst.." - 1;
+
+ TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+ {
+ ColumnWriterInit ( & col -> dad, ctx, & PoslenColWriter_vt, false );
+ col -> curs = curs;
+ col -> global_ref_start = global_ref_start;
+ col -> ref_len = ref_len;
+
+ col -> full_spec_size = ( uint32_t ) full_spec_size;
+ rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+ "dst.%s.%s", self -> full_spec, colspec );
+ if ( rc == 0 )
+ return & col -> dad;
+
+ ABORT ( rc, "miscalculated string size" );
+ }
+ CATCH_ALL ()
+ {
+ ANNOTATE ( "failed to allocate %zu bytes for PoslenColWriter", sizeof * col + full_spec_size );
+ }
+ }
+ }
+ }
+
+ VCursorRelease ( curs );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/poslen-col-pair.h b/tools/sra-sort/poslen-col-pair.h
new file mode 100644
index 0000000..e4f4087
--- /dev/null
+++ b/tools/sra-sort/poslen-col-pair.h
@@ -0,0 +1,63 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_poslen_col_pair_
+#define _h_sra_sort_poslen_col_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VCursor;
+struct TablePair;
+struct ColumnReader;
+struct ColumnWriter;
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+
+/* MakePoslenColReader
+ * make temporary column reader
+ */
+struct ColumnReader *TablePairMakePoslenColReader ( struct TablePair *self, const ctx_t *ctx,
+ struct MapFile const *tmp_col, const char *colspec );
+
+
+/* MakePoslenColWriter
+ */
+struct ColumnWriter *TablePairMakePoslenColWriter ( struct TablePair *self,
+ const ctx_t *ctx, struct VCursor *opt_curs, const char *colspec );
+
+
+
+#endif /* _h_sra_sort_poslen_col_pair_ */
diff --git a/tools/sra-sort/ref-alignid-col.c b/tools/sra-sort/ref-alignid-col.c
new file mode 100644
index 0000000..59570df
--- /dev/null
+++ b/tools/sra-sort/ref-alignid-col.c
@@ -0,0 +1,705 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct AlignIdColReader;
+#define COLREADER_IMPL struct AlignIdColReader
+
+#include "ref-alignid-col.h"
+#include "glob-poslen.h"
+#include "csra-tbl.h"
+#include "csra-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "idx-mapping.h"
+#include "map-file.h"
+#include "sra-sort.h"
+
+#include <vdb/cursor.h>
+#include <kapp/main.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <assert.h>
+
+FILE_ENTRY ( ref-alignid-col );
+
+
+/*--------------------------------------------------------------------------
+ * IdPosLen
+ */
+typedef struct IdPosLen IdPosLen;
+struct IdPosLen
+{
+ int64_t id;
+ uint64_t poslen;
+};
+
+#if USE_OLD_KSORT
+static
+int CC IdPosLenCmpPos ( const void *a, const void *b, void *data )
+{
+ const IdPosLen *ap = a;
+ const IdPosLen *bp = b;
+
+ if ( ap -> poslen < bp -> poslen )
+ return -1;
+ if ( ap -> poslen > bp -> poslen )
+ return 1;
+ if ( ap -> id < bp -> id )
+ return -1;
+ return ap -> id > bp -> id;
+}
+
+static
+int CC cmp_int64_t ( const void *a, const void *b, void *data )
+{
+ const int64_t *ap = a;
+ const int64_t *bp = b;
+
+ if ( * ap < * bp )
+ return -1;
+ return * ap > * bp;
+}
+#else
+
+static
+void ksort_IdPosLen_pos ( IdPosLen *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size ) \
+ do \
+ { \
+ IdPosLen tmp = * ( const IdPosLen* ) ( a ); \
+ * ( IdPosLen* ) ( a ) = * ( const IdPosLen* ) ( b ); \
+ * ( IdPosLen* ) ( b ) = tmp; \
+ } while ( 0 )
+
+
+#define CMP( a, b ) \
+ ( ( ( ( const IdPosLen* ) ( a ) ) -> poslen == ( ( const IdPosLen* ) ( b ) ) -> poslen ) ? \
+ ( ( ( const IdPosLen* ) ( a ) ) -> id < ( ( const IdPosLen* ) ( b ) ) -> id ) ? -1 : \
+ ( ( ( const IdPosLen* ) ( a ) ) -> id > ( ( const IdPosLen* ) ( b ) ) -> id ) \
+ : ( ( ( const IdPosLen* ) ( a ) ) -> poslen < ( ( const IdPosLen* ) ( b ) ) -> poslen ) ? -1 : \
+ ( ( ( const IdPosLen* ) ( a ) ) -> poslen > ( ( const IdPosLen* ) ( b ) ) -> poslen ) )
+
+ KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+
+}
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * AlignIdColReader
+ */
+typedef struct AlignIdColReader AlignIdColReader;
+struct AlignIdColReader
+{
+ ColumnReader dad;
+
+ /* state for id range:
+ first = slot [ 0 ] of map
+ row_id = needs to match request - we only accept serial scans
+ next_id = next id to fetch from "ids"
+ last_excl = end of "ids" */
+ int64_t first, row_id, next_id, last_excl;
+
+ /* sequence for handing out new ids */
+ int64_t new_id;
+
+ /* reader onto our join index column */
+ ColumnReader *ids;
+
+ /* reader onto alignment table
+ to retrieve GLOBAL_REF_START + REF_LEN */
+ ColumnReader *poslen;
+
+ /* bi-directional index for writing
+ new=>old and old=>new mappings */
+ MapFile *idx;
+
+ /* buffer for sorted data */
+ union
+ {
+ int64_t *ids;
+ IdPosLen *id_poslen;
+ IdxMapping *id_map;
+ } u;
+ size_t max_elems;
+ size_t num_elems;
+ size_t cur_elem;
+
+ /* buffer for id row */
+ int64_t *row;
+ size_t max_row_len;
+
+ /* chunk-size */
+ size_t chunk_size;
+
+ /* whether we have all ids or not */
+ bool entire_table;
+};
+
+static
+void AlignIdColReaderDestroy ( AlignIdColReader *self, const ctx_t *ctx )
+{
+ if ( self -> ids != NULL )
+ {
+ FUNC_ENTRY ( ctx );
+
+ STATUS ( 4, "destroying align-column reader '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+
+ /* tear everything down */
+ MapFileRelease ( self -> idx, ctx );
+ self -> idx = NULL;
+
+ ColumnReaderRelease ( self -> poslen, ctx );
+ self -> poslen = NULL;
+
+ ColumnReaderRelease ( self -> ids, ctx );
+ self -> ids = NULL;
+
+ if ( self -> u . id_poslen != NULL )
+ {
+ MemFree ( ctx, self -> u . id_poslen, sizeof * self -> u . id_poslen * self -> max_elems );
+ self -> u . id_poslen = NULL;
+ }
+ if ( self -> row != NULL )
+ {
+ MemFree ( ctx, self -> row, sizeof self -> row [ 0 ] * self -> max_row_len );
+ self -> row = NULL;
+ }
+ }
+}
+
+static
+void AlignIdColReaderWhack ( AlignIdColReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* tear down self */
+ AlignIdColReaderDestroy ( self, ctx );
+
+ /* tear down super-class */
+ ColumnReaderDestroy ( & self -> dad, ctx );
+
+ /* gone */
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+const char *AlignIdColReaderFullSpec ( const AlignIdColReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ return ColumnReaderFullSpec ( self -> ids, ctx );
+}
+
+static
+uint64_t AlignIdColReaderIdRange ( const AlignIdColReader *self, const ctx_t *ctx, int64_t *opt_first )
+{
+ FUNC_ENTRY ( ctx );
+ return ColumnReaderIdRange ( self -> ids, ctx, opt_first );
+}
+
+static
+void AlignIdColReaderFlushToIdx ( AlignIdColReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> idx != NULL )
+ {
+ const Tool *tp = ctx -> caps -> tool;
+
+ /* write new=>old ids */
+ STATUS ( 3, "%s new=>old id map", tp -> write_new_to_old ? "writing" : "setting" );
+ ON_FAIL ( MapFileSetNewToOld ( self -> idx, ctx, self -> u . id_map, self -> num_elems ) )
+ {
+ ANNOTATE ( "failed to record new to old id mappings for '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+ return;
+ }
+ if ( tp -> sort_before_old2new )
+ {
+ /* sort by old ids */
+ STATUS ( 3, "sorting id-map by old-id" );
+#if USE_OLD_KSORT
+ ksort ( self -> u . id_map, self -> num_elems, sizeof self -> u . id_map [ 0 ], IdxMappingCmpOld, ( void* ) ctx );
+#else
+ IdxMappingSortOld ( self -> u . id_map, ctx, self -> num_elems );
+#endif
+ }
+
+ /* write old=>new ids */
+ STATUS ( 3, "writing old=>new id map" );
+ ON_FAIL ( MapFileSetOldToNew ( self -> idx, ctx, self -> u . id_map, self -> num_elems ) )
+ {
+ ANNOTATE ( "failed to record old to new id mappings for '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+ return;
+ }
+
+ STATUS ( 3, "done writing id maps" );
+ }
+
+ /* empty buffer */
+ self -> first = self -> next_id;
+}
+
+static
+void AlignIdColReaderPreCopy ( AlignIdColReader *self, const ctx_t *ctx )
+{
+ /* TBD - a good place to allocate memory */
+}
+
+static
+void AlignIdColReaderPostCopy ( AlignIdColReader *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* called after a single copy
+ assumes that entire row-range of table has been copied */
+
+ /* tear down self */
+ AlignIdColReaderDestroy ( self, ctx );
+}
+
+static
+const void *AlignIdColReaderRead ( AlignIdColReader *self, const ctx_t *ctx,
+ int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const void *base;
+ uint32_t num_read32;
+ size_t i, num_read;
+
+ /* handle bad parameters */
+ uint32_t dummy [ 3 ];
+ if ( elem_bits == NULL )
+ elem_bits = & dummy [ 0 ];
+ if ( boff == NULL )
+ boff = & dummy [ 1 ];
+ if ( row_len == NULL )
+ row_len = & dummy [ 2 ];
+
+ /* THERE ARE three stages to this method:
+ 1a. detect need to allocate id map
+ 1b. detect need to flush to index
+ 2. detect need to refresh id map
+ 3. respond to read request
+ */
+
+ if ( row_id != self -> row_id )
+ {
+ /* error condition */
+ rc = RC ( rcExe, rcCursor, rcReading, rcParam, rcIncorrect );
+ INTERNAL_ERROR ( rc, "AlignIdColReader only supports serial access" );
+ return NULL;
+ }
+
+ /* stage 1 - allocate or flush */
+ if ( self -> u . ids == NULL && ! self -> entire_table )
+ {
+ /* limit ids to actual count */
+ uint64_t num_ids = MapFileCount ( self -> idx, ctx );
+ self -> max_elems = ctx -> caps -> tool -> max_ref_idx_ids;
+ if ( ( uint64_t ) self -> max_elems > num_ids )
+ self -> max_elems = ( size_t ) num_ids;
+
+ /* allocate the buffer */
+ do
+ {
+ CLEAR ();
+
+ TRY ( self -> u . id_poslen = MemAlloc ( ctx, sizeof self -> u . id_poslen [ 0 ] * self -> max_elems, false ) )
+ {
+ STATUS ( 4, "allocated map buffer with %,zu elements", self -> max_elems );
+ break;
+ }
+
+ self -> max_elems >>= 1;
+ }
+ while ( self -> max_elems >= 1024 * 1024 );
+
+ if ( FAILED () )
+ {
+ ANNOTATE ( "failed to allocate id buffer" );
+ return NULL;
+ }
+
+ /* notice if we have the entire table */
+ if ( ( uint64_t ) self -> max_elems == num_ids )
+ self -> entire_table = true;
+
+ /* allocate a row buffer */
+ self -> max_row_len = 8 * 1024;
+ ON_FAIL ( self -> row = MemAlloc ( ctx, sizeof self -> row [ 8 ] * self -> max_row_len, false ) )
+ {
+ ANNOTATE ( "failed to allocate row buffer" );
+ return NULL;
+ }
+
+ assert ( self -> first == self -> next_id );
+ assert ( self -> first == row_id );
+ }
+ else if ( row_id == self -> next_id && self -> first < row_id )
+ {
+ ON_FAIL ( AlignIdColReaderFlushToIdx ( self, ctx ) )
+ return NULL;
+ }
+
+ /* stage 2 - refresh */
+ if ( self -> first == self -> next_id )
+ {
+ /* if there are no more rows, return NULL */
+ if ( self -> next_id == self -> last_excl )
+ {
+ STATUS ( 3, "done reading '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+ return NULL;
+ }
+
+ self -> cur_elem = 0;
+
+ /* if the entire table will be read into memory,
+ there is no point in reading/sorting the ids */
+ if ( self -> entire_table )
+ {
+ STATUS ( 3, "auto-generating %,zu ids for '%s'", self -> max_elems, ColumnReaderFullSpec ( self -> ids, ctx ) );
+ for ( i = 0; i < self -> max_elems; ++ i )
+ {
+ self -> u . id_poslen [ i ] . id = self -> first + i;
+#if _DEBUGGING
+ self -> u . id_poslen [ i ] . poslen = 0;
+#endif
+ }
+
+ self -> num_elems = self -> max_elems;
+ self -> next_id = self -> last_excl;
+ }
+ else
+ {
+ /* read up to max_elems into id array */
+ STATUS ( 3, "reading ids from '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+ for ( self -> num_elems = 0; self -> next_id < self -> last_excl; self -> num_elems += num_read, ++ self -> next_id )
+ {
+ /* read a row of ids */
+ ON_FAIL ( base = ColumnReaderRead ( self -> ids, ctx, self -> next_id, elem_bits, boff, & num_read32 ) )
+ {
+ ANNOTATE ( "failed to read id column" );
+ return NULL;
+ }
+
+ /* we expect empty rows */
+ num_read = num_read32;
+ if ( num_read == 0 )
+ continue;
+
+ assert ( * elem_bits == sizeof self -> u . ids [ 0 ] * 8 );
+ assert ( * boff == 0 );
+
+ /* detect when buffer is full */
+ if ( self -> num_elems + num_read > self -> max_elems )
+ {
+ /* if we've read at least one row, then we're okay */
+ if ( self -> first < self -> next_id )
+ break;
+
+ /* error condition - buffer was too small to read a single row */
+ rc = RC ( rcExe, rcCursor, rcReading, rcBuffer, rcInsufficient );
+ ERROR ( rc, "allocated buffer was too small ( %zu elems ) to read a single row ( id %ld, row-len %zu )",
+ self -> max_elems, self -> next_id, num_read );
+ return NULL;
+ }
+
+ /* bring them in */
+ memcpy ( & self -> u . ids [ self -> num_elems ], base, num_read * sizeof self -> u . ids [ 0 ] );
+ }
+
+ /* sort to produce sparse but ordered list */
+ STATUS ( 3, "sorting %,zu 64-bit ids", self -> num_elems );
+#if USE_OLD_KSORT
+ ksort ( self -> u . ids, self -> num_elems, sizeof self -> u . ids [ 0 ], cmp_int64_t, ( void* ) ctx );
+#else
+ ksort_int64_t ( self -> u . ids, self -> num_elems );
+#endif
+
+ /* transform from ids to id_poslen */
+ STATUS ( 3, "expanding ids to ( id, position, len ) tuples" );
+ for ( i = self -> num_elems; i > 1 ; )
+ {
+ -- i;
+ self -> u . id_poslen [ i ] . id = self -> u . ids [ i ];
+ }
+ }
+
+ /* read num_elems from poslen */
+ STATUS ( 3, "reading ( position, len ) pairs from '%s'", ColumnReaderFullSpec ( self -> poslen, ctx ) );
+ for ( i = 0; i < self -> num_elems; ++ i )
+ {
+ ON_FAIL ( base = ColumnReaderRead ( self -> poslen, ctx, self -> u . id_poslen [ i ] . id, elem_bits, boff, & num_read32 ) )
+ {
+ ANNOTATE ( "failed to read global ref-start from alignment table" );
+ return NULL;
+ }
+
+ num_read = num_read32;
+ assert ( * elem_bits == sizeof self -> u . id_poslen [ 0 ] . poslen * 8 );
+ assert ( * boff == 0 );
+ assert ( num_read == 1 );
+
+ self -> u . id_poslen [ i ] . poslen = * ( uint64_t* ) base;
+ }
+
+ /* sort by poslen */
+ STATUS ( 3, "sorting ( id, position, len ) tuples on position, len DESC" );
+#if USE_OLD_KSORT
+ ksort ( self -> u . id_poslen, self -> num_elems, sizeof self -> u . id_poslen [ 0 ], IdPosLenCmpPos, ( void* ) ctx );
+#else
+ ksort_IdPosLen_pos ( self -> u . id_poslen, self -> num_elems );
+#endif
+
+ /* write poslen to temp column */
+ STATUS ( 3, "writing ( position, len ) to temp column" );
+ ON_FAIL ( MapFileSetPoslen ( self -> idx, ctx, self -> u . id_map, self -> num_elems ) )
+ {
+ ANNOTATE ( "failed to write temporary poslen column for '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+ return NULL;
+ }
+
+ STATUS ( 3, "done writing ( position, len )" );
+ }
+
+ /* stage 3 - build a row */
+ for ( num_read = ( size_t ) ( self -> num_elems - self -> cur_elem ), i = 0; i < num_read; ++ i )
+ {
+ /* whatever the current element is, it must belong to this row */
+ uint64_t pos = decode_pos_len ( self -> u . id_poslen [ self -> cur_elem + i ] . poslen );
+ int64_t cur_row_id = global_to_row_id ( pos, self -> chunk_size );
+ if ( cur_row_id != row_id )
+ {
+ num_read = i;
+ break;
+ }
+ }
+
+ /* "num_read" now has the number of elements in this row */
+ if ( num_read > self -> max_row_len )
+ {
+ STATUS ( 4, "reallocating row buffer for row-length %,zu", num_read );
+
+ /* realloc the row buffer */
+ MemFree ( ctx, self -> row, self -> max_row_len * sizeof self -> row [ 0 ] );
+
+ self -> max_row_len = ( num_read + 4095 ) & ~ ( size_t ) 4095;
+ ON_FAIL ( self -> row = MemAlloc ( ctx, sizeof self -> row [ 0 ] * self -> max_row_len, false ) )
+ {
+ ANNOTATE ( "failed to reallocate row buffer" );
+ return NULL;
+ }
+ }
+
+ /* build the row, assigning new ids */
+ for ( i = 0; i < num_read; ++ i )
+ {
+ self -> row [ i ] = ++ self -> new_id;
+ self -> u . id_map [ self -> cur_elem + i ] . new_id = self -> new_id;
+ }
+
+ /* advance row_id */
+ self -> cur_elem += num_read;
+ if ( ++ self -> row_id == self -> last_excl )
+ {
+ /* if this was the last row, flush index */
+ ON_FAIL ( AlignIdColReaderFlushToIdx ( self, ctx ) )
+ return NULL;
+
+ if ( ctx -> caps -> tool -> idx_consistency_check && self -> idx != NULL )
+ {
+ ON_FAIL ( MapFileConsistencyCheck ( self -> idx, ctx ) )
+ return NULL;
+ }
+ }
+
+ /* return row */
+ * elem_bits = sizeof self -> row [ 0 ] * 8;
+ * boff = 0;
+ * row_len = num_read;
+ return self -> row;
+}
+
+static ColumnReader_vt AlignIdColReader_vt =
+{
+ AlignIdColReaderWhack,
+ AlignIdColReaderFullSpec,
+ AlignIdColReaderIdRange,
+ AlignIdColReaderPreCopy,
+ AlignIdColReaderPostCopy,
+ AlignIdColReaderRead
+};
+
+
+/*--------------------------------------------------------------------------
+ * RefTblPair
+ */
+static
+size_t RefTblPairGetChunkSize ( TablePair *self, const ctx_t *ctx, const VCursor **cursp )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ rc = VTableCreateCursorRead ( self -> stbl, cursp );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to create cursor on '%s'", self -> full_spec );
+ else
+ {
+ uint32_t idx;
+ const VCursor *curs = * cursp;
+ rc = VCursorAddColumn ( curs, & idx, "MAX_SEQ_LEN" );
+ if ( rc != 0 )
+ rc = VCursorAddColumn ( curs, & idx, "CHUNK_SIZE" );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorAddColumn - failed to determine chunk size of '%s'", self -> full_spec );
+ else
+ {
+ rc = VCursorOpen ( curs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorOpen - failed to determine chunk size of '%s'", self -> full_spec );
+ else
+ {
+ uint32_t row_len, chunk_size;
+ rc = VCursorReadDirect ( curs, 1, idx,
+ sizeof chunk_size * 8, & chunk_size, 1, & row_len );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorReadDirect - failed to determine chunk size of '%s'", self -> full_spec );
+ else if ( row_len != 1 )
+ {
+ rc = RC ( rcExe, rcCursor, rcReading, rcData, rcInsufficient );
+ ERROR ( rc, "VCursorReadDirect - failed to determine chunk size of '%s'", self -> full_spec );
+ }
+ else
+ {
+ STATUS ( 3, "'%s' chunk size determined to be %u", self -> full_spec, chunk_size );
+ return chunk_size;
+ }
+ }
+ }
+
+ VCursorRelease ( curs );
+ * cursp = NULL;
+ }
+
+ return 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * ColumnReader
+ * interface to read column in random order
+ */
+
+
+/* MakeAlignIdReader
+ */
+ColumnReader *TablePairMakeAlignIdReader ( TablePair *self,
+ const ctx_t *ctx, TablePair *align_tbl, MapFile *idx, const char *colspec )
+{
+ FUNC_ENTRY ( ctx );
+
+ size_t chunk_size;
+ const VCursor *curs;
+
+ /* determine chunk size and keep cursor for id reader */
+ TRY ( chunk_size = RefTblPairGetChunkSize ( self, ctx, & curs ) )
+ {
+ ColumnReader *ids;
+
+ /* need to create a traditional reader on self */
+ TRY ( ids = TablePairMakeColumnReader ( self, ctx, curs, colspec, true ) )
+ {
+ ColumnReader *poslen;
+
+ /* need to create a poslen reader on align_tbl */
+ TRY ( poslen = TablePairMakeGlobalPosLenReader ( align_tbl, ctx, ( uint32_t ) chunk_size ) )
+ {
+ int64_t first;
+ uint64_t count;
+
+ /* need to create a mapfile based on range of poslen */
+ TRY ( count = ColumnReaderIdRange ( poslen, ctx, & first ) )
+ {
+ TRY ( MapFileSetIdRange ( idx, ctx, first, count ) )
+ {
+ AlignIdColReader *col;
+ TRY ( col = MemAlloc ( ctx, sizeof * col, true ) )
+ {
+ TRY ( ColumnReaderInit ( & col -> dad, ctx, & AlignIdColReader_vt ) )
+ {
+ /* one more point of failure when obtaining the id range */
+ TRY ( count = ColumnReaderIdRange ( ids, ctx, & first ) )
+ {
+ TRY ( col -> idx = MapFileDuplicate ( idx, ctx ) )
+ {
+ col -> first = col -> row_id = col -> next_id = first;
+ col -> last_excl = first + count;
+ col -> ids = ids;
+ col -> poslen = poslen;
+ col -> chunk_size = chunk_size;
+ col -> entire_table = false;
+
+ /* the actual working buffer is allocated upon demand
+ to avoid occupying space while waiting to execute */
+
+ /* douse the cursor here */
+ VCursorRelease ( curs );
+
+ return & col -> dad;
+ }
+ }
+ }
+
+ MemFree ( ctx, col, sizeof * col );
+ }
+
+ MapFileRelease ( idx, ctx );
+ }
+ }
+
+ ColumnReaderRelease ( poslen, ctx );
+ }
+
+ ColumnReaderRelease ( ids, ctx );
+ }
+
+ VCursorRelease ( curs );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/ref-alignid-col.h b/tools/sra-sort/ref-alignid-col.h
new file mode 100644
index 0000000..9b5ee84
--- /dev/null
+++ b/tools/sra-sort/ref-alignid-col.h
@@ -0,0 +1,53 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_ref_alignid_col_
+#define _h_sra_sort_ref_alignid_col_
+
+#ifndef _h_sra_sort_col_pair_
+#include "col-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * AlignIdColReader
+ */
+
+
+/* MakeAlignIdReader
+ */
+ColumnReader *TablePairMakeAlignIdReader ( struct TablePair *self,
+ const ctx_t *ctx, struct TablePair *align_tbl, struct MapFile *idx, const char *colspec );
+
+
+#endif /* _h_sra_sort_ref_alignid_col_ */
diff --git a/tools/sra-sort/row-set-priv.h b/tools/sra-sort/row-set-priv.h
new file mode 100644
index 0000000..62c50d6
--- /dev/null
+++ b/tools/sra-sort/row-set-priv.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_row_set_priv_
+#define _h_sra_sort_row_set_priv_
+
+#ifndef _h_sra_sort_row_set_
+#include "row-set.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * RowSetIterator
+ * the basic 4 types
+ */
+RowSetIterator * MapFileMakeMappingRowSetIterator ( struct MapFile const *self, const ctx_t *ctx, bool large );
+RowSetIterator * MapFileMakeSortingRowSetIterator ( struct MapFile const *self, const ctx_t *ctx, bool large );
+RowSetIterator * TablePairMakeMappingRowSetIterator ( struct TablePair *self, const ctx_t *ctx, bool large );
+RowSetIterator * TablePairMakeSimpleRowSetIterator ( struct TablePair *self, const ctx_t *ctx );
+
+#endif /* _h_sra_sort_row_set_priv_ */
diff --git a/tools/sra-sort/row-set.c b/tools/sra-sort/row-set.c
new file mode 100644
index 0000000..59f1851
--- /dev/null
+++ b/tools/sra-sort/row-set.c
@@ -0,0 +1,208 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "row-set-priv.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/cursor.h>
+#include <klib/rc.h>
+
+FILE_ENTRY ( row-set );
+
+
+/*--------------------------------------------------------------------------
+ * RowSet
+ * interface to iterate row-ids
+ */
+
+
+/* Release
+ * releases reference
+ */
+void RowSetRelease ( const RowSet *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "RowSet" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release RowSet" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+RowSet *RowSetDuplicate ( const RowSet *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "RowSet" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate RowSet" );
+ return NULL;
+ }
+ }
+
+ return ( RowSet* ) self;
+}
+
+
+/* Init
+ */
+void RowSetInit ( RowSet *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+ self -> vt = vt;
+ KRefcountInit ( & self -> refcount, 1, "RowSet", "init", "" );
+ self -> align = 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * RowSetIterator
+ * interface to iterate RowSets
+ */
+
+/* MakeRowSetIterator
+ * make RowSet iterator based upon parameters
+ * each RowSet will generate row-ids in src order
+ *
+ * "sort_idx" [ IN ]
+ * if NULL, the RowSet objects will auto-generate row-ids
+ * otherwise, src row-ids will be selected from MapFile
+ *
+ * "pairs" [ IN ]
+ * if true, the row-ids will be generated into an IdxMapping pair
+ * if false but "idx" is not NULL, the src row-ids will be generated
+ * into a single-id map, and new ordering preserved in parallel
+ * if false and "idx" is NULL, no additional structure will be generated
+ */
+RowSetIterator *TablePairMakeRowSetIterator ( struct TablePair *self, const ctx_t *ctx,
+ struct MapFile const *sort_idx, bool pairs, bool large )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( sort_idx != NULL )
+ {
+ if ( pairs )
+ return MapFileMakeMappingRowSetIterator ( sort_idx, ctx, large );
+
+ return MapFileMakeSortingRowSetIterator ( sort_idx, ctx, large );
+ }
+
+ if ( pairs )
+ return TablePairMakeMappingRowSetIterator ( self, ctx, large );
+
+ return TablePairMakeSimpleRowSetIterator ( self, ctx );
+}
+
+
+/* Release
+ * releases reference
+ */
+void RowSetIteratorRelease ( const RowSetIterator *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "RowSetIterator" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release RowSetIterator" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+RowSetIterator *RowSetIteratorDuplicate ( const RowSetIterator *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "RowSetIterator" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate RowSetIterator" );
+ return NULL;
+ }
+ }
+
+ return ( RowSetIterator* ) self;
+}
+
+
+/* Init
+ */
+void RowSetIteratorInit ( RowSetIterator *self, const ctx_t *ctx, const RowSetIterator_vt *vt )
+{
+ self -> vt = vt;
+ KRefcountInit ( & self -> refcount, 1, "RowSetIterator", "init", "" );
+ self -> align = 0;
+}
diff --git a/tools/sra-sort/row-set.h b/tools/sra-sort/row-set.h
new file mode 100644
index 0000000..8ffa38a
--- /dev/null
+++ b/tools/sra-sort/row-set.h
@@ -0,0 +1,215 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_row_set_
+#define _h_sra_sort_row_set_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct TablePair;
+struct IdxMapping;
+
+
+/*--------------------------------------------------------------------------
+ * RowSet
+ * interface to iterate row-ids
+ */
+typedef struct RowSet_vt RowSet_vt;
+
+typedef struct RowSet RowSet;
+struct RowSet
+{
+ const RowSet_vt *vt;
+ KRefcount refcount;
+ uint32_t align;
+};
+
+#ifndef ROWSET_IMPL
+#define ROWSET_IMPL RowSet
+#endif
+
+struct RowSet_vt
+{
+ /* called by Release */
+ void ( * whack ) ( ROWSET_IMPL *self, const ctx_t *ctx );
+
+ /* retrieve next set of row-ids */
+ size_t ( * next ) ( ROWSET_IMPL *self, const ctx_t *ctx,
+ int64_t *ids, size_t max_ids );
+
+ /* reset iterator to initial state */
+ void ( * reset ) ( ROWSET_IMPL *self, const ctx_t *ctx,
+ bool for_static );
+};
+
+
+/* Release
+ * releases reference
+ */
+void RowSetRelease ( const RowSet *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+RowSet *RowSetDuplicate ( const RowSet *self, const ctx_t *ctx );
+
+
+/* Next
+ * return next set of row-ids
+ * returns 0 if no rows are available
+ */
+#define RowSetNext( self, ctx, ids, max_ids ) \
+ POLY_DISPATCH_INT ( next, self, ROWSET_IMPL, ctx, ids, max_ids )
+
+
+/* Reset
+ * reset iterator to beginning
+ */
+#define RowSetReset( self, ctx, for_static ) \
+ POLY_DISPATCH_VOID ( reset, self, ROWSET_IMPL, ctx, for_static )
+
+
+/* Init
+ */
+void RowSetInit ( RowSet *self, const ctx_t *ctx, const RowSet_vt *vt );
+
+/* Destroy
+ */
+#define RowSetDestroy( self, ctx ) \
+ ( ( void ) 0 )
+
+
+/*--------------------------------------------------------------------------
+ * RowSetIterator
+ * interface to iterate RowSets
+ */
+typedef struct RowSetIterator_vt RowSetIterator_vt;
+
+typedef struct RowSetIterator RowSetIterator;
+struct RowSetIterator
+{
+ const RowSetIterator_vt *vt;
+ KRefcount refcount;
+ uint32_t align;
+};
+
+#ifndef ROWSET_ITER_IMPL
+#define ROWSET_ITER_IMPL RowSetIterator
+#endif
+
+struct RowSetIterator_vt
+{
+ /* called by Release */
+ void ( * whack ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx );
+
+ /* retrieve row-id mapping pair */
+ struct IdxMapping* ( * get_idx_mapping ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx,
+ size_t *num_items );
+
+ /* retrieve src row-id array */
+ int64_t* ( * get_src_ids ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx,
+ uint32_t **opt_ord, size_t *num_items );
+
+ /* retrieve next row-set */
+ RowSet* ( * next ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* MakeRowSetIterator
+ * make RowSet iterator based upon parameters
+ * each RowSet will generate row-ids in src order
+ *
+ * "sort_idx" [ IN ]
+ * if NULL, the RowSet objects will auto-generate row-ids
+ * otherwise, src row-ids will be selected from MapFile
+ *
+ * "pairs" [ IN ]
+ * if true, the row-ids will be generated into an IdxMapping pair
+ * if false but "idx" is not NULL, the src row-ids will be generated
+ * into a single-id map, and new ordering preserved in parallel
+ * if false and "idx" is NULL, no additional structure will be generated
+ *
+ * "large" [ IN ]
+ * if true, use a reduced id-range for the row-set
+ */
+RowSetIterator *TablePairMakeRowSetIterator ( struct TablePair *self, const ctx_t *ctx,
+ struct MapFile const *sort_idx, bool pairs, bool large );
+
+
+/* Release
+ * releases reference
+ */
+void RowSetIteratorRelease ( const RowSetIterator *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+RowSetIterator *RowSetIteratorDuplicate ( const RowSetIterator *self, const ctx_t *ctx );
+
+
+/* GetIdxMapping
+ * a little bit of plumbing to get the IdxMapping map
+ */
+#define RowSetIteratorGetIdxMapping( self, ctx, num_items ) \
+ POLY_DISPATCH_PTR ( get_idx_mapping, self, ROWSET_ITER_IMPL, ctx, num_items )
+
+
+/* GetSourceIds
+ * a little bit of plumbing to get the individual source ids
+ * and optional new id ordering
+ */
+#define RowSetIteratorGetSourceIds( self, ctx, opt_ord, num_items ) \
+ POLY_DISPATCH_PTR ( get_src_ids, self, ROWSET_ITER_IMPL, ctx, opt_ord, num_items )
+
+
+/* Next
+ * return next RowSet
+ * returns NULL if no rows are available
+ */
+#define RowSetIteratorNext( self, ctx ) \
+ POLY_DISPATCH_PTR ( next, self, ROWSET_ITER_IMPL, ctx )
+
+
+/* Init
+ */
+void RowSetIteratorInit ( RowSetIterator *self, const ctx_t *ctx, const RowSetIterator_vt *vt );
+
+/* Destroy
+ */
+#define RowSetIteratorDestroy( self, ctx ) \
+ ( ( void ) 0 )
+
+
+#endif /* _h_sra_sort_row_set_ */
diff --git a/tools/sra-sort/run.c b/tools/sra-sort/run.c
new file mode 100644
index 0000000..8b55da7
--- /dev/null
+++ b/tools/sra-sort/run.c
@@ -0,0 +1,388 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "sra-sort.h"
+#include "db-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+#include <sra/sraschema.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <kfg/config.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( run );
+
+static
+void typename_to_config_path ( const char *in, char *out )
+{
+ bool end;
+ uint32_t i;
+
+ for ( end = false, i = 0; ! end; ++ i )
+ {
+ switch ( out [ i ] = in [ i ] )
+ {
+ case ':':
+ out [ i ] = '/';
+ break;
+ case ' ':
+ case '#':
+ out [ i ] = 0;
+ case 0:
+ end = true;
+ return;
+ }
+ }
+}
+
+static
+bool map_typename_builtin ( const ctx_t *ctx, const char *sub_node, const char *in, char *out, char *schema_src, size_t size )
+{
+ FUNC_ENTRY ( ctx );
+
+ size_t copied;
+
+#define ALIGN_EVIDENCE_MAP "NCBI:align:db:alignment_evidence_sorted"
+#define ALIGN_UNSORTED_MAP "NCBI:align:db:alignment_sorted"
+#define ALIGN_SRC "align/align.vschema"
+
+ if ( strcmp ( out, "NCBI/align/db/alignment_evidence" ) == 0 )
+ copied = string_copy ( out, size, ALIGN_EVIDENCE_MAP, sizeof ALIGN_EVIDENCE_MAP - 1 );
+ else if ( strcmp ( out, "NCBI/align/db/alignment_unsorted" ) == 0 )
+ copied = string_copy ( out, size, ALIGN_UNSORTED_MAP, sizeof ALIGN_UNSORTED_MAP - 1 );
+ else
+ {
+ strcpy ( out, in );
+ schema_src [ 0 ] = 0;
+ return false;
+ }
+
+ if ( copied != size )
+ {
+ out [ copied ] = 0;
+ copied = string_copy ( schema_src, size, ALIGN_SRC, sizeof ALIGN_SRC - 1 );
+ }
+
+ if ( copied == size )
+ {
+ rc_t rc = RC ( rcExe, rcType, rcCopying, rcBuffer, rcInsufficient );
+ INTERNAL_ERROR ( rc, "failed to copy a built-in constant" );
+ strcpy ( out, in );
+ schema_src [ 0 ] = 0;
+ return false;
+ }
+
+#undef ALIGN_EVIDENCE_MAP
+#undef ALIGN_UNSORTED_MAP
+#undef ALIGN_SRC
+
+ schema_src [ copied ] = 0;
+ return true;
+}
+
+static
+bool map_typename ( const ctx_t *ctx, const char *sub_node, const char *in, char *out, char *schema_src, size_t size )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const KConfigNode *n;
+ size_t num_read, remaining;
+
+ typename_to_config_path ( in, out );
+
+ rc = KConfigOpenNodeRead ( ctx -> caps -> cfg, & n, "sra-sort/%s/%s", sub_node, out );
+ if ( rc != 0 )
+ return map_typename_builtin ( ctx, sub_node, in, out, schema_src, size );
+
+ rc = KConfigNodeRead ( n, 0, out, size - 1, & num_read, & remaining );
+ if ( rc != 0 )
+ ERROR ( rc, "KConfigNodeRead failed" );
+ else if ( remaining != 0 )
+ {
+ rc = RC ( rcExe, rcNode, rcReading, rcBuffer, rcInsufficient );
+ ERROR ( rc, "type map of '%s' is too long", in );
+ }
+ else
+ {
+ out [ num_read ] = 0;
+ typename_to_config_path ( out, schema_src );
+
+ KConfigNodeRelease ( n );
+ rc = KConfigOpenNodeRead ( ctx -> caps -> cfg, & n, "sra-sort/schema-src/%s", schema_src );
+ if ( rc != 0 )
+ ERROR ( rc, "KConfigOpenNodeRead - failed to find entry 'sra-sort/schema-src/%s'", schema_src );
+ else
+ {
+ rc = KConfigNodeRead ( n, 0, schema_src, size - 1, & num_read, & remaining );
+ if ( rc != 0 )
+ ERROR ( rc, "KConfigNodeRead failed" );
+ else if ( remaining != 0 )
+ {
+ rc = RC ( rcExe, rcNode, rcReading, rcBuffer, rcInsufficient );
+ ERROR ( rc, "type map of '%s' is too long", in );
+ }
+ else
+ {
+ schema_src [ num_read ] = 0;
+ }
+ }
+ }
+
+ KConfigNodeRelease ( n );
+ return true;
+}
+
+static
+VSchema *map_schema_types ( TypeParams *type, const ctx_t *ctx, const VSchema *src_schema )
+{
+ FUNC_ENTRY ( ctx );
+
+ bool mapped;
+ char schema_src [ 256 ];
+ assert ( sizeof schema_src == sizeof type -> dst_type );
+
+ TRY ( mapped = map_typename ( ctx, "out-map", type -> src_type, type -> dst_type, schema_src, sizeof schema_src ) )
+ {
+ rc_t rc;
+ VSchema *dst_schema;
+
+ if ( ! mapped )
+ {
+ type -> view_type [ 0 ] = 0;
+ rc = VSchemaAddRef ( src_schema );
+ if ( rc != 0 )
+ ERROR ( rc, "VSchemaAddRef failed" );
+ return ( VSchema* ) src_schema;
+ }
+
+ rc = VDBManagerMakeSchema ( ctx -> caps -> vdb, & dst_schema );
+ if ( rc != 0 )
+ ERROR ( rc, "VDBManagerMakeSchema failed" );
+ else
+ {
+ rc = VSchemaParseFile ( dst_schema, schema_src );
+ if ( rc != 0 )
+ ERROR ( rc, "VSchemaParseFile failed adding file '%s' for destination", src_schema );
+ else
+ {
+ TRY ( mapped = map_typename ( ctx, "view-map", type -> src_type, type -> view_type, schema_src, sizeof schema_src ) )
+ {
+ if ( ! mapped )
+ {
+ type -> view_type [ 0 ] = 0;
+ return dst_schema;
+ }
+
+ rc = VSchemaParseFile ( dst_schema, schema_src );
+ if ( rc == 0 )
+ return dst_schema;
+
+ ERROR ( rc, "VSchemaParseFile failed adding file '%s' for view", src_schema );
+ }
+ }
+
+ VSchemaRelease ( dst_schema );
+ }
+ }
+
+ return NULL;
+}
+
+/* open_db
+ * called from run
+ * determines the type of schema
+ * opens output object
+ * dispatches to the appropriate handler
+ */
+static
+void open_db ( const ctx_t *ctx, const VDatabase **srcp )
+{
+ FUNC_ENTRY ( ctx );
+
+ const VDatabase *src = *srcp;
+
+ const VSchema *src_schema;
+ rc_t rc = VDatabaseOpenSchema ( src, & src_schema );
+ if ( rc != 0 )
+ ERROR ( rc, "VDatabaseOpenSchema failed" );
+ else
+ {
+ TypeParams type;
+ rc = VDatabaseTypespec ( src, type . src_type, sizeof type . src_type );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to obtain database typespec" );
+ else
+ {
+ VSchema *dst_schema;
+
+ /* map input type to output type */
+ TRY ( dst_schema = map_schema_types ( & type, ctx, src_schema ) )
+ {
+ const Tool *tp = ctx -> caps -> tool;
+
+ /* if view was remapped, reopen the database */
+ if ( type . view_type [ 0 ] != 0 )
+ {
+ VSchemaRelease ( src_schema );
+ rc = VSchemaAddRef ( dst_schema );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "VSchemaAddRef failed" );
+ src_schema = NULL;
+ }
+ else
+ {
+ src_schema = dst_schema;
+ VDatabaseRelease ( src );
+ rc = VDBManagerOpenDBRead ( ctx -> caps -> vdb, srcp, src_schema, tp -> src_path );
+ if ( rc != 0 )
+ ERROR ( rc, "VDBManagerOpenDBRead failed reopening db '%s'", tp -> src_path );
+ src = *srcp;
+ }
+ }
+
+ if ( ! FAILED () )
+ {
+ VDatabase *dst;
+ rc = VDBManagerCreateDB ( ctx -> caps -> vdb, & dst, dst_schema,
+ type . dst_type, tp -> db . cmode, tp -> dst_path );
+ if ( rc != 0 )
+ ERROR ( rc, "VDBManagerCreateDB failed to create '%s' with type '%s'", tp -> dst_path, type . dst_type );
+ else
+ {
+ rc = VDatabaseColumnCreateParams ( dst, tp -> col . cmode, tp -> col . checksum, tp -> col . pgsize );
+ if ( rc != 0 )
+ ERROR ( rc, "VDatabaseColumnCreateParams: failed to set column create params on db '%s'", tp -> dst_path );
+ else
+ {
+ DbPair *pb;
+
+ /* TBD - this has to be fixed to use proper stuff */
+ const char *name = strrchr ( tp -> src_path, '/' );
+ if ( name ++ == NULL )
+ name = tp -> src_path;
+
+ TRY ( pb = DbPairMake ( ctx, src, dst, name ) )
+ {
+ DbPairRun ( pb, ctx );
+ DbPairRelease ( pb, ctx );
+ }
+ }
+
+ rc = VDatabaseRelease ( dst );
+ if ( rc != 0 )
+ ERROR ( rc, "VDatabaseRelease failed on '%s'", tp -> dst_path );
+ }
+ }
+
+ VSchemaRelease ( dst_schema );
+ }
+ }
+
+ VSchemaRelease ( src_schema );
+ }
+}
+
+
+/* open_tbl
+ * called from run
+ * determines the type of schema
+ * opens output object
+ * dispatches to the appropriate handler
+ */
+static
+void open_tbl ( const ctx_t *ctx, const VTable **tblp )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc = RC ( rcExe, rcFunction, rcExecuting, rcFunction, rcUnsupported );
+ ERROR ( rc, "unimplemented function" );
+}
+
+/* run
+ * called from KMain
+ * determines the type of object being copied/sorted
+ * opens input object
+ * dispatches to the appropriate handler
+ */
+void run ( const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ VDBManager *mgr = ctx -> caps -> vdb;
+ const Tool *tp = ctx -> caps -> tool;
+
+ const VDatabase *db;
+ rc_t rc = VDBManagerOpenDBRead ( mgr, & db, NULL, tp -> src_path );
+ if ( rc == 0 )
+ {
+ open_db ( ctx, & db );
+ VDatabaseRelease ( db );
+ }
+ else
+ {
+ const VTable *tbl;
+ rc_t rc2 = VDBManagerOpenTableRead ( mgr, & tbl, NULL, tp -> src_path );
+ if ( rc2 == 0 )
+ {
+ rc = 0;
+ open_tbl ( ctx, & tbl );
+ VTableRelease ( tbl );
+ }
+ else
+ {
+ VSchema *sra_dflt;
+ rc2 = VDBManagerMakeSRASchema ( mgr, & sra_dflt );
+ if ( rc2 == 0 )
+ {
+ rc2 = VDBManagerOpenTableRead ( mgr, & tbl, sra_dflt, tp -> src_path );
+ if ( rc2 == 0 )
+ {
+ rc = 0;
+ open_tbl ( ctx, & tbl );
+ VTableRelease ( tbl );
+ }
+
+ VSchemaRelease ( sra_dflt );
+ }
+ }
+ }
+
+ if ( rc != 0 )
+ ERROR ( rc, "failed to open object '%s'", tp -> src_path );
+}
diff --git a/tools/sra-sort/simple-row-set.c b/tools/sra-sort/simple-row-set.c
new file mode 100644
index 0000000..e4e5833
--- /dev/null
+++ b/tools/sra-sort/simple-row-set.c
@@ -0,0 +1,212 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct SimpleRowSet SimpleRowSet;
+#define ROWSET_IMPL SimpleRowSet
+
+typedef struct SimpleRowSetIterator SimpleRowSetIterator;
+#define ROWSET_ITER_IMPL SimpleRowSetIterator
+
+#include "row-set-priv.h"
+#include "tbl-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <klib/rc.h>
+
+FILE_ENTRY ( simple-row-set );
+
+
+/*--------------------------------------------------------------------------
+ * SimpleRowSet
+ * implementation of RowSet based upon auto-generated serial ids
+ */
+struct SimpleRowSet
+{
+ RowSet dad;
+ int64_t first, row_id, last_excl;
+};
+
+static
+void SimpleRowSetWhack ( SimpleRowSet *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ MemFree ( ctx, self, sizeof *self );
+}
+
+static
+size_t SimpleRowSetNext ( SimpleRowSet *self, const ctx_t *ctx,
+ int64_t *row_ids, size_t max_ids )
+{
+ if ( row_ids != NULL )
+ {
+ size_t i;
+
+ uint64_t max_avail = self -> last_excl - self -> row_id;
+ if ( max_avail < ( uint64_t ) max_ids )
+ max_ids = ( size_t ) max_avail;
+
+ for ( i = 0; i < max_ids; ++ i )
+ row_ids [ i ] = self -> row_id + i;
+
+ self -> row_id += max_ids;
+ return max_ids;
+ }
+ return 0;
+}
+
+static
+void SimpleRowSetReset ( SimpleRowSet *self, const ctx_t *ctx, bool for_static )
+{
+ self -> row_id = self -> first;
+}
+
+static RowSet_vt SimpleRowSet_vt =
+{
+ SimpleRowSetWhack,
+ SimpleRowSetNext,
+ SimpleRowSetReset
+};
+
+
+/* Make
+ */
+static
+RowSet *SimpleRowSetMake ( const ctx_t *ctx, int64_t first, int64_t last_excl )
+{
+ FUNC_ENTRY ( ctx );
+
+ SimpleRowSet *rs;
+ TRY ( rs = MemAlloc ( ctx, sizeof * rs, false ) )
+ {
+ RowSetInit ( & rs -> dad, ctx, & SimpleRowSet_vt );
+ rs -> first = rs -> row_id = first;
+ rs -> last_excl = last_excl;
+ return & rs -> dad;
+ }
+
+ return NULL;
+}
+
+
+/*--------------------------------------------------------------------------
+ * SimpleRowSetIterator
+ * interface to iterate RowSets
+ */
+struct SimpleRowSetIterator
+{
+ RowSetIterator dad;
+ RowSet *rs;
+};
+
+static
+void SimpleRowSetIteratorWhack ( SimpleRowSetIterator *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ RowSetRelease ( self -> rs, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+struct IdxMapping *SimpleRowSetIteratorGetIdxMapping ( SimpleRowSetIterator *self, const ctx_t *ctx, size_t *num_items )
+{
+ FUNC_ENTRY ( ctx );
+
+ ANNOTATE ( "CALLING GetIdxMapping ON SIMPLE ROWSET ITERATOR" );
+
+ if ( num_items != NULL )
+ * num_items = 0;
+
+ return NULL;
+}
+
+static
+int64_t *SimpleRowSetIteratorGetSourceIds ( SimpleRowSetIterator *self, const ctx_t *ctx, uint32_t **opt_ord, size_t *num_items )
+{
+ FUNC_ENTRY ( ctx );
+
+ ANNOTATE ( "CALLING GetSourceIds ON SIMPLE ROWSET ITERATOR" );
+
+ if ( opt_ord != NULL )
+ * opt_ord = NULL;
+
+ if ( num_items != NULL )
+ * num_items = 0;
+
+ return NULL;
+}
+
+static
+RowSet *SimpleRowSetIteratorNext ( SimpleRowSetIterator *self, const ctx_t *ctx )
+{
+ RowSet *rs = self -> rs;
+ self -> rs = NULL;
+ return rs;
+}
+
+static RowSetIterator_vt SimpleRowSetIterator_vt =
+{
+ SimpleRowSetIteratorWhack,
+ SimpleRowSetIteratorGetIdxMapping,
+ SimpleRowSetIteratorGetSourceIds,
+ SimpleRowSetIteratorNext
+};
+
+
+/* MakeSimpleRowSetIterator
+ * make simple row-id iterator
+ * runs from first to last id in cursor
+ */
+RowSetIterator *TablePairMakeSimpleRowSetIterator ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> first_id > self -> last_excl )
+ {
+ rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcRange, rcInvalid );
+ INTERNAL_ERROR ( rc, "union of all column ranges improperly set" );
+ }
+ else
+ {
+ SimpleRowSetIterator *it;
+
+ TRY ( it = MemAlloc ( ctx, sizeof * it, false ) )
+ {
+ RowSetIteratorInit ( & it -> dad, ctx, & SimpleRowSetIterator_vt );
+ TRY ( it -> rs = SimpleRowSetMake ( ctx, self -> first_id, self -> last_excl ) )
+ {
+ return & it -> dad;
+ }
+
+ MemFree ( ctx, it, sizeof * it );
+ }
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/sort-defs.h b/tools/sra-sort/sort-defs.h
new file mode 100644
index 0000000..f4aff84
--- /dev/null
+++ b/tools/sra-sort/sort-defs.h
@@ -0,0 +1,82 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_defs_
+#define _h_sra_sort_defs_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <assert.h>
+
+#if _DEBUGGING &&! defined SRA_SORT_CHECK_NULL_SELF
+#define SRA_SORT_CHECK_NULL_SELF 1
+#endif
+
+#define USE_OLD_KSORT 0
+
+
+/*--------------------------------------------------------------------------
+ * vdb-3 items missing from klib/defs.h
+ */
+typedef uint32_t caps_t;
+typedef struct ctx_t ctx_t;
+#define STRINGIZE( str ) # str
+#define STRINGIZE_DEFINE( def ) STRINGIZE ( def )
+
+
+/* POLY_DISPATCH
+ * dispatch a polymorphic message
+ */
+#if SRA_SORT_CHECK_NULL_SELF
+
+void null_self_error ( const ctx_t *ctx, uint32_t lineno, const char *msg );
+
+#define POLY_DISPATCH_VOID( msg, self, cast_expr, ctx, ... ) \
+ ( ( ( self ) == NULL ) ? null_self_error ( ctx, __LINE__, # msg ) : \
+ ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ ) )
+
+#define POLY_DISPATCH_INT( msg, self, cast_expr, ctx, ... ) \
+ ( ( ( self ) == NULL ) ? ( null_self_error ( ctx, __LINE__, # msg ), 0 ) : \
+ ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ ) )
+
+#define POLY_DISPATCH_PTR( msg, self, cast_expr, ctx, ... ) \
+ ( ( ( self ) == NULL ) ? ( null_self_error ( ctx, __LINE__, # msg ), NULL ) : \
+ ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ ) )
+
+#else
+
+#define POLY_DISPATCH_VOID( msg, self, cast_expr, ctx, ... ) \
+ ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ )
+#define POLY_DISPATCH_INT( msg, self, cast_expr, ctx, ... ) \
+ ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ )
+#define POLY_DISPATCH_PTR( msg, self, cast_expr, ctx, ... ) \
+ ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ )
+
+#endif
+
+#endif /* _h_sra_sort_defs_ */
diff --git a/tools/sra-sort/sorting-row-set.c b/tools/sra-sort/sorting-row-set.c
new file mode 100644
index 0000000..e94336c
--- /dev/null
+++ b/tools/sra-sort/sorting-row-set.c
@@ -0,0 +1,405 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct SortingRowSet SortingRowSet;
+#define ROWSET_IMPL SortingRowSet
+
+typedef struct SortingRowSetIterator SortingRowSetIterator;
+#define ROWSET_ITER_IMPL SortingRowSetIterator
+
+#include "row-set-priv.h"
+#include "tbl-pair.h"
+#include "map-file.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( sorting-row-set );
+
+
+/*--------------------------------------------------------------------------
+ * SortingRowSetIterator
+ * interface to iterate RowSets
+ */
+struct SortingRowSetIterator
+{
+ RowSetIterator dad;
+
+ /* base row-id */
+ int64_t row_id;
+
+ /* last row-id + 1 */
+ int64_t last_excl;
+
+ /* takes its input from new=>old index */
+ const MapFile *idx;
+
+ /* working data within map */
+ int64_t *src_ids;
+ uint32_t *new_ord;
+ size_t max_elems;
+ size_t num_elems;
+
+ /* if true, use setting for large-columns */
+ bool large;
+
+ /* if true, no need to regenerate new_ord */
+ bool new_ord_valid;
+};
+
+/*--------------------------------------------------------------------------
+ * SortingRowSet
+ * implementation of RowSet based upon auto-generated id pairs
+ */
+struct SortingRowSet
+{
+ RowSet dad;
+
+ /* keep-alive reference */
+ SortingRowSetIterator *iter;
+
+ /* working data within map */
+ int64_t *src_ids;
+ size_t num_elems;
+ size_t cur_elem;
+};
+
+static
+void SortingRowSetWhack ( SortingRowSet *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ RowSetIteratorRelease ( & self -> iter -> dad, ctx );
+ MemFree ( ctx, self, sizeof *self );
+}
+
+static
+size_t SortingRowSetNextStat ( SortingRowSet *self, const ctx_t *ctx,
+ int64_t *ids, size_t max_ids )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* the starting row-id is taken from row-set-iterator
+ and offset by our current element counter */
+ int64_t row_id = self -> iter -> row_id + self -> cur_elem;
+
+ /* limit id generation to request */
+ size_t i, to_set = self -> num_elems - self -> cur_elem;
+ if ( to_set > max_ids )
+ to_set = max_ids;
+
+ /* fill request with serial numbers
+ could just as easily be the same number
+ the important thing is to limit the count
+ and produce the correct range */
+ for ( i = 0; i < to_set; ++ i )
+ ids [ i ] = row_id + i;
+
+ /* advance counter */
+ self -> cur_elem += to_set;
+ return to_set;
+}
+
+static
+size_t SortingRowSetNextPhys ( SortingRowSet *self, const ctx_t *ctx,
+ int64_t *ids, size_t max_ids )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* limit copy to request */
+ size_t to_copy = self -> num_elems - self -> cur_elem;
+ if ( to_copy > max_ids )
+ to_copy = max_ids;
+
+ /* copy out old-ids */
+ memcpy ( ids, & self -> src_ids [ self -> cur_elem ], to_copy * sizeof ids [ 0 ] );
+
+ /* advance counter */
+ self -> cur_elem += to_copy;
+ return to_copy;
+}
+
+static
+void SortingRowSetReset ( SortingRowSet *self, const ctx_t *ctx, bool for_static );
+
+static RowSet_vt SortingRowSetPhys_vt =
+{
+ SortingRowSetWhack,
+ SortingRowSetNextPhys,
+ SortingRowSetReset
+};
+
+static RowSet_vt SortingRowSetStat_vt =
+{
+ SortingRowSetWhack,
+ SortingRowSetNextStat,
+ SortingRowSetReset
+};
+
+static
+void SortingRowSetReset ( SortingRowSet *self, const ctx_t *ctx, bool for_static )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( for_static )
+ {
+ /* go static */
+ self -> dad . vt = & SortingRowSetStat_vt;
+ }
+ else
+ {
+ SortingRowSetIterator *iter = self -> iter;
+
+ /* go physical */
+ self -> dad . vt = & SortingRowSetPhys_vt;
+
+ if ( iter -> new_ord_valid )
+ {
+ /* read new-ids from file, selecting old-ids within range */
+ STATUS ( 3, "selecting first %,zu ids from old=>new where new_id >= %,ld",
+ iter -> max_elems, iter -> row_id );
+ iter -> num_elems = MapFileSelectOldToNewSingle ( iter -> idx, ctx,
+ iter -> row_id, iter -> src_ids, NULL, iter -> max_elems );
+ }
+ else
+ {
+ /* read new-ids from file, init new-ord, selecting old-ids within range */
+ STATUS ( 3, "selecting first %,zu ids, new_ord from old=>new where new_id >= %,ld",
+ iter -> max_elems, iter -> row_id );
+ TRY ( iter -> num_elems = MapFileSelectOldToNewSingle ( iter -> idx, ctx,
+ iter -> row_id, iter -> src_ids, iter -> new_ord, iter -> max_elems ) )
+ {
+ iter -> new_ord_valid = true;
+ }
+ }
+
+ if ( FAILED () )
+ return;
+
+ self -> num_elems = iter -> num_elems;
+ STATUS ( 3, "selected %,zu ids", self -> num_elems );
+ }
+
+ /* ready */
+ self -> cur_elem = 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * SortingRowSetIterator
+ * interface to iterate RowSets
+ */
+
+static
+void SortingRowSetIteratorWhack ( SortingRowSetIterator *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( self -> src_ids != NULL )
+ MemFree ( ctx, self -> src_ids, sizeof self -> src_ids [ 0 ] * self -> max_elems );
+ if ( self -> new_ord != NULL )
+ MemFree ( ctx, self -> new_ord, sizeof self -> new_ord [ 0 ] * self -> max_elems );
+
+ MapFileRelease ( self -> idx, ctx );
+
+ RowSetIteratorDestroy ( & self -> dad, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+RowSet *SortingRowSetIteratorMakeTheRowSet ( SortingRowSetIterator *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+ FUNC_ENTRY ( ctx );
+
+ SortingRowSet *rs;
+ TRY ( rs = MemAlloc ( ctx, sizeof * rs, false ) )
+ {
+ TRY ( RowSetInit ( & rs -> dad, ctx, vt ) )
+ {
+ /* initialize the row-set with map and self reference */
+ rs -> src_ids = self -> src_ids;
+ rs -> iter = ( SortingRowSetIterator* ) RowSetIteratorDuplicate ( & self -> dad, ctx );
+ rs -> num_elems = self -> num_elems;
+ rs -> cur_elem = 0;
+ return & rs -> dad;
+ }
+
+ MemFree ( ctx, rs, sizeof * rs );
+ }
+
+ return NULL;
+ }
+
+static
+struct IdxMapping *SortingRowSetIteratorGetIdxMapping ( SortingRowSetIterator *self, const ctx_t *ctx, size_t *num_items )
+{
+ FUNC_ENTRY ( ctx );
+
+ ANNOTATE ( "CALLING GetIdxMapping ON SORTING ROWSET ITERATOR" );
+
+ if ( num_items != NULL )
+ * num_items = 0;
+
+ return NULL;
+}
+
+static
+int64_t *SortingRowSetIteratorGetSourceIds ( SortingRowSetIterator *self, const ctx_t *ctx, uint32_t **opt_ord, size_t *num_items )
+{
+ FUNC_ENTRY ( ctx );
+
+ if ( opt_ord != NULL )
+ * opt_ord = self -> new_ord;
+
+ if ( self -> src_ids == NULL )
+ {
+ rc_t rc = RC ( rcExe, rcCursor, rcAccessing, rcSelf, rcInconsistent );
+ ERROR ( rc, "source id array is NULL" );
+ if ( num_items != NULL )
+ * num_items = 0;
+ return NULL;
+ }
+
+ if ( num_items != NULL )
+ * num_items = self -> num_elems;
+ return self -> src_ids;
+}
+
+static
+void SortingRowSetIteratorAllocMap ( SortingRowSetIterator *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* determine the maximum number of elements */
+ const Tool *tp = ctx -> caps -> tool;
+ uint64_t count = self -> last_excl - self -> row_id;
+ self -> max_elems = self -> large ? tp -> max_large_idx_ids : tp -> max_idx_ids;
+ if ( ( uint64_t ) self -> max_elems > count )
+ self -> max_elems = ( size_t ) count;
+
+ /* try to allocate the memory
+ this may be limited by the MemBank */
+ do
+ {
+ CLEAR ();
+
+ TRY ( self -> src_ids = MemAlloc ( ctx, sizeof self -> src_ids [ 0 ] * self -> max_elems, false ) )
+ {
+ TRY ( self -> new_ord = MemAlloc ( ctx, sizeof self -> new_ord [ 0 ] * self -> max_elems, false ) )
+ {
+ STATUS ( 4, "allocated mapping array of %,u elements", self -> max_elems );
+ return;
+ }
+
+ MemFree ( ctx, self -> src_ids, sizeof self -> src_ids [ 0 ] * self -> max_elems );
+ self -> src_ids = NULL;
+ }
+
+ self -> max_elems >>= 1;
+ }
+ while ( self -> max_elems >= ctx -> caps -> tool -> min_idx_ids );
+
+ ANNOTATE ( "failed to allocate map for row-set" );
+}
+
+static
+RowSet *SortingRowSetIteratorNext ( SortingRowSetIterator *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ RowSet *rs = NULL;
+
+ /* on first invocation, allocate the map */
+ if ( self -> src_ids == NULL )
+ {
+ ON_FAIL ( SortingRowSetIteratorAllocMap ( self, ctx ) )
+ return NULL;
+
+ assert ( self -> src_ids != NULL );
+ assert ( self -> new_ord != NULL );
+ }
+
+ /* advance row_id */
+ self -> row_id += self -> num_elems;
+ self -> num_elems = 0;
+ self -> new_ord_valid = false;
+
+ /* create the empty row-set */
+ if ( self -> row_id < self -> last_excl )
+ rs = SortingRowSetIteratorMakeTheRowSet ( self, ctx, & SortingRowSetPhys_vt );
+
+ return rs;
+}
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ */
+
+static RowSetIterator_vt SortingRowSetIterator_vt =
+{
+ SortingRowSetIteratorWhack,
+ SortingRowSetIteratorGetIdxMapping,
+ SortingRowSetIteratorGetSourceIds,
+ SortingRowSetIteratorNext
+};
+
+RowSetIterator * MapFileMakeSortingRowSetIterator ( const MapFile *self, const ctx_t *ctx, bool large )
+{
+ FUNC_ENTRY ( ctx );
+
+ SortingRowSetIterator *rsi;
+
+ /* create the iterator */
+ TRY ( rsi = MemAlloc ( ctx, sizeof * rsi, true ) )
+ {
+ TRY ( RowSetIteratorInit ( & rsi -> dad, ctx, & SortingRowSetIterator_vt ) )
+ {
+ /* initialize the row-set with map and self reference */
+ TRY ( rsi -> row_id = MapFileFirst ( self, ctx ) )
+ {
+ TRY ( rsi -> last_excl = rsi -> row_id + MapFileCount ( self, ctx ) )
+ {
+ TRY ( rsi -> idx = MapFileDuplicate ( self, ctx ) )
+ {
+ rsi -> large = large;
+ return & rsi -> dad;
+ }
+ }
+ }
+ }
+
+ MemFree ( ctx, rsi, sizeof * rsi );
+ }
+
+ return NULL;
+}
diff --git a/tools/sra-sort/sra-sort.c b/tools/sra-sort/sra-sort.c
new file mode 100644
index 0000000..0c7eb92
--- /dev/null
+++ b/tools/sra-sort/sra-sort.c
@@ -0,0 +1,754 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "ctx.h"
+#include "caps.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+#include "sra-sort.h"
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/manager.h>
+#include <kfg/config.h>
+#include <kfs/directory.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <strtol.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _WIN32
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+
+#include "sra-sort.vers.h"
+
+
+FILE_ENTRY ( sra-sort );
+
+
+/* this goes away in vdb-3 */
+const char UsageDefaultName [] = "sra-sort";
+
+rc_t CC UsageSummary ( const char *prog_name )
+{
+ return KOutMsg ( "Usage: %s [options] src-object dst-object\n"
+ " %s [options] src-object [src-object...] dst-dir\n"
+ "\n"
+ , prog_name
+ , prog_name
+ );
+}
+
+#define OPT_IGNORE_FAILURE "ignore-failure"
+#define OPT_FORCE "force"
+#define OPT_MEM_LIMIT "mem-limit"
+#define OPT_MAP_FILE_BSIZE "map-file-bsize"
+#define OPT_MAX_IDX_IDS "max-idx-ids"
+#define OPT_MAX_REF_IDX_IDS "max-ref-idx-ids"
+#define OPT_MAX_LARGE_IDX_IDS "max-large-idx-ids"
+#define OPT_TEMP_DIR "tempdir"
+#define OPT_MMAP_DIR "mmapdir"
+#define OPT_UNSORTED_OLD_NEW "unsorted-old-new"
+
+#define OPT_COLUMN_MD5 "column-md5"
+#define OPT_NO_COLUMN_CHECKSUM "no-column-checksum"
+
+#define OPT_BLOB_CRC32 "blob-crc32"
+#define OPT_BLOB_MD5 "blob-md5"
+#define OPT_NO_BLOB_CHECKSUM "no-blob-checksum"
+
+#define OPT_KEEP_IDX_FILES "keep-idx-files"
+#define OPT_IDX_CONSISTENCY_CHECK "idx-cc"
+
+static const char *hlp_ignore_failure [] = { "ignore failure when sorting multiple objects",
+ "i.e. continue in spite of previous errors", NULL };
+static const char *hlp_force [] = { "force overwrite of existing destination", NULL };
+static const char *hlp_mem_limit [] = { "sets limit on dynamic memory usage", NULL };
+static const char *hlp_map_file_bsize [] = { "sets id map-file cache size", NULL };
+static const char *hlp_max_idx_ids [] = { "sets number of join-index ids to process at a time", NULL };
+static const char *hlp_max_ref_idx_ids [] = { "sets number of join-index ids to process within REFERENCE table", NULL };
+static const char *hlp_max_large_idx_ids [] = { "sets number of rows to process with large columns", NULL };
+static const char *hlp_temp_dir [] = { "sets a specific directory to use for temporary files", NULL };
+static const char *hlp_mmap_dir [] = { "sets a specific directory to use for memory-mapped buffers", NULL };
+static const char *hlp_unsorted_old_new [] = { "write old=>new index in unsorted order", NULL };
+
+static const char *hlp_column_md5 [] = { "generate md5sum compatible checksum files for each column [default]", NULL };
+static const char *hlp_no_column_checksum [] = { "disable generation of column checksums", NULL };
+
+static const char *hlp_blob_crc32 [] = { "generate CRC32 checksums for each blob [default]", NULL };
+static const char *hlp_blob_md5 [] = { "generate MD5 checksums for each blob", NULL };
+static const char *hlp_no_blob_checksum [] = { "disable generation of blob checksums", NULL };
+
+#if _DEBUGGING
+static const char *hlp_keep_idx_files [] = { "keep temporary index files for debugging", NULL };
+static const char *hlp_idx_consistency_check [] = { "run consistency check on index files", NULL };
+#endif
+
+static OptDef options [] =
+{
+ /* 1. long-name
+ 2. list of single character short names
+ 3. help-gen function
+ 4. list of help strings, NULL terminated
+ 5. max count
+ 6. option requires value
+ 7. option is required
+ */
+ { OPT_IGNORE_FAILURE, "i", NULL, hlp_ignore_failure, 1, false, false }
+ , { OPT_FORCE, "f", NULL, hlp_force, 1, false, false }
+ , { OPT_MEM_LIMIT, NULL, NULL, hlp_mem_limit, 1, true, false }
+ , { OPT_MAP_FILE_BSIZE, NULL, NULL, hlp_map_file_bsize, 1, true, false }
+ , { OPT_MAX_IDX_IDS, NULL, NULL, hlp_max_idx_ids, 1, true, false }
+ , { OPT_MAX_REF_IDX_IDS, NULL, NULL, hlp_max_ref_idx_ids, 1, true, false }
+ , { OPT_MAX_LARGE_IDX_IDS, NULL, NULL, hlp_max_large_idx_ids, 1, true, false }
+ , { OPT_TEMP_DIR, NULL, NULL, hlp_temp_dir, 1, true, false }
+ , { OPT_MMAP_DIR, NULL, NULL, hlp_mmap_dir, 1, true, false }
+ , { OPT_UNSORTED_OLD_NEW, NULL, NULL, hlp_unsorted_old_new, 1, false, false }
+
+ , { OPT_COLUMN_MD5, NULL, NULL, hlp_column_md5, 1, false, false }
+ , { OPT_NO_COLUMN_CHECKSUM, NULL, NULL, hlp_no_column_checksum, 1, false, false }
+ , { OPT_BLOB_CRC32, NULL, NULL, hlp_blob_crc32, 1, false, false }
+ , { OPT_BLOB_MD5, NULL, NULL, hlp_blob_md5, 1, false, false }
+ , { OPT_NO_BLOB_CHECKSUM, NULL, NULL, hlp_no_blob_checksum, 1, false, false }
+#if _DEBUGGING
+ , { OPT_KEEP_IDX_FILES, NULL, NULL, hlp_keep_idx_files, 1, false, false }
+ , { OPT_IDX_CONSISTENCY_CHECK, NULL, NULL, hlp_idx_consistency_check, 1, false, false }
+#endif
+};
+
+static const char *option_params [] =
+{
+ NULL
+ , NULL
+ , "bytes"
+ , "cache-size"
+ , "num-ids"
+ , "num-ids"
+ , "num-ids"
+ , "path-to-tmp"
+ , "path-to-mmaps"
+ , NULL
+ , NULL
+ , NULL
+ , NULL
+ , NULL
+ , NULL
+#if _DEBUGGING
+ , NULL
+ , NULL
+#endif
+};
+
+rc_t CC Usage ( const Args *args )
+{
+ uint32_t i;
+ const char *progname, *fullpath;
+ rc_t rc = ArgsProgram ( args, & fullpath, & progname );
+ if ( rc != 0 )
+ progname = fullpath = UsageDefaultName;
+
+ UsageSummary ( progname );
+
+ KOutMsg ( "Options:\n" );
+
+ for ( i = 0; i < sizeof options / sizeof options [ 0 ]; ++ i )
+ {
+ HelpOptionLine ( options [ i ] . aliases, options [ i ] . name,
+ option_params [ i ], options [ i ] . help );
+ }
+
+ HelpOptionsStandard ();
+
+ HelpVersion ( fullpath, KAppVersion () );
+
+ return 0;
+}
+
+uint32_t CC KAppVersion ( void )
+{
+ return SRA_SORT_VERS;
+}
+
+static
+const char *ArgsGetOptStr ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count )
+{
+ rc_t rc;
+ const char *val = NULL;
+
+ uint32_t dummy;
+ if ( count == NULL )
+ count = & dummy;
+
+ rc = ArgsOptionCount ( self, optname, count );
+ if ( rc == 0 && * count != 0 )
+ {
+ rc = ArgsOptionValue ( self, optname, 0, & val );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "failed to retrieve '%s' parameter", optname );
+ }
+
+ return val;
+}
+
+static
+uint64_t ArgsGetOptU64 ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count )
+{
+ rc_t rc;
+ uint64_t val = 0;
+
+ uint32_t dummy;
+ if ( count == NULL )
+ count = & dummy;
+
+ rc = ArgsOptionCount ( self, optname, count );
+ if ( rc == 0 && * count != 0 )
+ {
+ const char *str;
+ rc = ArgsOptionValue ( self, optname, 0, & str );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "failed to retrieve '%s' parameter", optname );
+ else
+ {
+ char *end;
+ val = strtou64 ( str, & end, 0 );
+ if ( end [ 0 ] != 0 )
+ {
+ rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcIncorrect );
+ ERROR ( rc, "bad '%s' parameter: '%s'", optname, str );
+ }
+ }
+ }
+
+ return val;
+}
+
+static
+bool ArgsGetOptBool ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count )
+{
+ rc_t rc;
+ bool val = false;
+
+ uint32_t dummy;
+ if ( count == NULL )
+ count = & dummy;
+
+ rc = ArgsOptionCount ( self, optname, count );
+ if ( rc == 0 && * count != 0 )
+ val = true;
+
+ return val;
+}
+
+static
+uint64_t KConfigGetNodeU64 ( const ctx_t *ctx, const char *path, bool *found )
+{
+ rc_t rc;
+ uint64_t val = 0;
+ const KConfigNode *n;
+
+ bool dummy;
+ if ( found == NULL )
+ found = & dummy;
+
+ rc = KConfigOpenNodeRead ( ctx -> caps -> cfg, & n, "sra-sort/map_file_bsize" );
+ if ( rc == 0 )
+ {
+ char buff [ 256 ];
+ size_t num_read, remaining;
+
+ rc = KConfigNodeRead ( n, 0, buff, sizeof buff - 1, & num_read, & remaining );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to read KConfig node '%s'", path );
+ else if ( remaining != 0 )
+ {
+ rc = RC ( rcExe, rcNode, rcReading, rcBuffer, rcInsufficient );
+ ERROR ( rc, "failed to read KConfig node '%s'", path );
+ }
+ else
+ {
+ char *end;
+ buff [ num_read ] = 0;
+ val = strtou64 ( buff, & end, 0 );
+ if ( end [ 0 ] != 0 )
+ {
+ rc = RC ( rcExe, rcNode, rcReading, rcNumeral, rcIncorrect );
+ ERROR ( rc, "bad '%s' config value: '%s'", path, buff );
+ }
+ }
+
+ KConfigNodeRelease ( n );
+ }
+
+ return val;
+}
+
+static
+void initialize_params ( const ctx_t *ctx, Caps *caps, Tool *tp, Selection *sel, Args *args )
+{
+ bool found=false;
+ uint64_t val;
+ uint32_t count;
+ const char *str;
+
+ int col_md5 = kcmMD5;
+
+ memset ( sel, 0, sizeof * sel );
+ memset ( tp, 0, sizeof * tp );
+ tp -> sel = sel;
+
+ /* default to host tmp */
+ tp -> tmpdir = "/tmp";
+
+ /* default to mmap dir */
+ tp -> mmapdir = NULL;
+
+ /* default buffer size for map cache */
+ tp -> map_file_bsize = 64 * 1024 * 1024;
+ tp -> map_file_random_bsize = tp -> map_file_bsize;
+
+ /* default max index ids to gather at a time */
+ tp -> max_ref_idx_ids = tp -> max_large_idx_ids = tp -> max_idx_ids = 256 * 1024 * 1024;
+ tp -> max_poslen_ids = 64 * 1024 * 1024;
+ tp -> min_idx_ids = 64 * 1024 * 1024;
+ tp -> max_missing_ids = tp -> max_idx_ids;
+
+#if 0
+ /* refpos cache size */
+ tp -> refpos_cache_capacity = 100 * 1024 * 1024;
+#endif
+
+ /* for creating mapping files */
+ tp -> pid = getpid ();
+
+ /* db create defaults */
+ tp -> db . cmode = kcmCreate;
+
+ /* tbl create defaults */
+ tp -> tbl . cmode = kcmCreate;
+
+ /* column create mode defaults */
+ tp -> col . pgsize = 1;
+ tp -> col . cmode = kcmInit;
+ tp -> col . checksum = kcsCRC32;
+
+ /* normally do not ignore failures */
+ tp -> ignore = false;
+
+ /* normally do not force overwrite */
+ tp -> force = false;
+
+ /* not needed under normal circumstances */
+ tp -> write_new_to_old = false;
+tp->write_new_to_old=true;
+
+ /* default is to sort on old */
+ tp -> sort_before_old2new = true;
+
+ /* when debugging, this can be turned off */
+ tp -> unlink_idx_files = true;
+ tp -> idx_consistency_check = false;
+
+
+ /* record them as caps */
+ caps -> tool = tp;
+
+ /* look in config */
+ /* TBD - COMPLETE THIS */
+ ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/map_file_bsize", & found ) )
+ return;
+ if ( found )
+ tp -> map_file_bsize = tp -> map_file_random_bsize = ( size_t ) val;
+
+ ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/map_file_random_bsize", & found ) )
+ return;
+ if ( found )
+ tp -> map_file_random_bsize = ( size_t ) val;
+
+ ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/max_idx_ids", & found ) )
+ return;
+ if ( found )
+ tp -> max_idx_ids = ( size_t ) val;
+
+ ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/max_ref_idx_ids", & found ) )
+ return;
+ if ( found )
+ tp -> max_ref_idx_ids = ( size_t ) val;
+
+ /* finally look in args */
+ ON_FAIL ( str = ArgsGetOptStr ( args, ctx, OPT_TEMP_DIR, & count ) )
+ return;
+ if ( count != 0 && str [ 0 ] != 0 )
+ tp -> tmpdir = str;
+
+ ON_FAIL ( str = ArgsGetOptStr ( args, ctx, OPT_MMAP_DIR, & count ) )
+ return;
+ if ( count != 0 && str [ 0 ] != 0 )
+ tp -> mmapdir = str;
+
+ ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAP_FILE_BSIZE, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> map_file_random_bsize = ( size_t ) val;
+
+ ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAX_IDX_IDS, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> max_idx_ids = tp -> max_ref_idx_ids = ( size_t ) val;
+
+ ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAX_REF_IDX_IDS, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> max_ref_idx_ids = ( size_t ) val;
+
+ ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAX_LARGE_IDX_IDS, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> max_large_idx_ids = ( size_t ) val;
+
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_IGNORE_FAILURE, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> ignore = true;
+
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_FORCE, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> force = true;
+
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_UNSORTED_OLD_NEW, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> sort_before_old2new = false;
+
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_COLUMN_MD5, & count ) )
+ return;
+ if ( count != 0 )
+ col_md5 = kcmMD5;
+ else
+ {
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_NO_COLUMN_CHECKSUM, & count ) )
+ return;
+ if ( count != 0 )
+ col_md5 = 0;
+ }
+
+ tp -> db . cmode |= col_md5;
+ tp -> tbl . cmode |= col_md5;
+ tp -> col . cmode |= col_md5;
+
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_BLOB_CRC32, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> col . checksum = kcsCRC32;
+ else
+ {
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_BLOB_MD5, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> col . checksum = kcsMD5;
+ else
+ {
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_NO_BLOB_CHECKSUM, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> col . checksum = kcsNone;
+ }
+ }
+
+#if _DEBUGGING
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_KEEP_IDX_FILES, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> unlink_idx_files = false;
+
+ ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_IDX_CONSISTENCY_CHECK, & count ) )
+ return;
+ if ( count != 0 )
+ tp -> idx_consistency_check = tp -> write_new_to_old = true;
+#endif
+}
+
+static
+void initialize_caps ( const ctx_t *ctx, Caps *caps, Args *args )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* get specified limit */
+ uint32_t count;
+ size_t mem_limit = ( size_t ) ArgsGetOptU64 ( args, ctx, OPT_MEM_LIMIT, & count );
+ if ( ! FAILED () && count != 0 )
+ {
+ MemBank *mem;
+ TRY ( mem = MemBankMake ( ctx, mem_limit ) )
+ {
+ MemBankRelease ( caps -> mem, ctx );
+ caps -> mem = mem;
+ }
+ }
+
+ if ( ! FAILED () )
+ {
+ /* here's a chance to pick up special config */
+ /* TBD */
+
+ /* open up KConfig */
+ rc_t rc = KConfigMake ( ( KConfig** ) & caps -> cfg, NULL );
+ if ( rc != 0 )
+ ERROR ( rc, "KConfigMake failed" );
+ }
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+ DECLARE_CTX_INFO ();
+
+ /* initialize context */
+ Caps caps;
+ ctx_t main_ctx = { & caps, NULL, & ctx_info };
+ const ctx_t *ctx = & main_ctx;
+ CapsInit ( & caps, NULL );
+
+ if ( argc <= 1 )
+ main_ctx . rc = UsageSummary ( "sra-sort" );
+ else
+ {
+ /* create MemBank with unlimited quota */
+ TRY ( caps . mem = MemBankMake ( ctx, -1 ) )
+ {
+ rc_t rc = VDBManagerMakeUpdate ( & caps . vdb, NULL );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to create VDBManager" );
+ else
+ {
+ rc = VDBManagerOpenKDBManagerUpdate ( caps . vdb, & caps . kdb );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to create KDBManager" );
+ else
+ {
+ Args * args;
+ rc = ArgsMakeAndHandle ( & args, argc, argv, 1,
+ options, sizeof options / sizeof options [ 0 ] );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to parse command line" );
+ else
+ {
+ TRY ( initialize_caps ( ctx, & caps, args ) )
+ {
+ Tool tp;
+ Selection sel;
+ TRY ( initialize_params ( ctx, & caps, & tp, & sel, args ) )
+ {
+ uint32_t count;
+ rc = ArgsParamCount ( args, & count );
+ if ( rc != 0 )
+ ERROR ( rc, "ArgsParamCount failed" );
+ else if ( count < 2 )
+ {
+ rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+ ERROR ( rc, "expected source and destination parameters" );
+ }
+ else
+ {
+ /* check type of last parameter */
+ const char *dst;
+ rc = ArgsParamValue ( args, count - 1, & dst );
+ if ( rc != 0 )
+ ERROR ( rc, "ArgsParamValue [ %u ] failed", count - 1 );
+ else
+ {
+ enum RCTarget targ = rcNoTarg;
+
+ bool dst_is_dir = false;
+ int dst_type = KDBManagerPathType ( caps . kdb, dst ) & ~ kptAlias;
+ if ( dst_type == kptDir )
+ dst_is_dir = true;
+ else if ( count != 2 )
+ {
+ rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+ ERROR ( rc, "multiple source objects require last parameter to be a directory" );
+ }
+ else switch ( dst_type )
+ {
+ case kptNotFound:
+ tp . db . cmode |= kcmParents;
+ tp . tbl . cmode |= kcmParents;
+ break;
+ case kptFile:
+ case kptFile | kptAlias:
+ rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+ ERROR ( rc, "destination object is a file - remove first or rename before trying again" );
+ break;
+ case kptDatabase:
+ targ = rcDatabase;
+ break;
+ case kptTable:
+ targ = rcTable;
+ break;
+ case kptPrereleaseTbl:
+ dst_type = kptTable;
+ break;
+ default:
+ rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+ ERROR ( rc, "destination object type cannot be overwritten" );
+ break;
+ }
+
+ if ( ! FAILED () )
+ {
+ if ( dst_is_dir )
+ {
+ uint32_t i;
+ rc_t first_rc = 0;
+ bool issue_divider_line;
+
+ if ( tp . force )
+ {
+ tp . db . cmode = kcmInit | ( tp . db . cmode & ~ kcmValueMask );
+ tp . tbl . cmode = kcmInit | ( tp . tbl . cmode & ~ kcmValueMask );
+ }
+
+ for ( issue_divider_line = false, i = 0; i < count - 1; issue_divider_line = true, ++ i )
+ {
+ rc = ArgsParamValue ( args, i, & tp . src_path );
+ if ( rc != 0 )
+ ERROR ( rc, "ArgParamValue [ %u ] failed", i );
+ else
+ {
+ char dst_path [ 4096 ];
+ const char *leaf = strrchr ( tp . src_path, '/' );
+ if ( leaf ++ == NULL )
+ leaf = tp . src_path;
+ rc = string_printf ( dst_path, sizeof dst_path, NULL, "%s/%s", dst, leaf );
+ if ( rc != 0 )
+ ERROR ( rc, "string_printf on param [ %u ] failed", i );
+ else
+ {
+ size_t size = string_size ( dst_path );
+ char *ext = string_rchr ( dst_path, size, '.' );
+ if ( ext != NULL )
+ {
+ size -= ext - dst_path;
+ switch ( size )
+ {
+ case 4:
+ if ( strcase_cmp ( ext, 4, ".sra", 4, 4 ) == 0 )
+ * ext = 0;
+ break;
+ case 5:
+ if ( strcase_cmp ( ext, 5, ".csra", 5, 5 ) == 0 )
+ * ext = 0;
+ break;
+ }
+ }
+
+ if ( issue_divider_line )
+ STATUS ( 1, "################################################################" );
+
+ tp . dst_path = dst_path;
+ ON_FAIL ( run ( ctx ) )
+ {
+ if ( ! tp . ignore )
+ break;
+
+ if ( first_rc == 0 )
+ first_rc = ctx -> rc;
+
+ CLEAR ();
+ }
+ }
+ }
+ }
+
+ if ( first_rc != 0 )
+ main_ctx . rc = first_rc;
+ }
+ else
+ {
+ tp . dst_path = dst;
+ rc = ArgsParamValue ( args, 0, & tp . src_path );
+ if ( rc != 0 )
+ ERROR ( rc, "ArgParamValue [ 0 ] failed" );
+ else
+ {
+ int src_type;
+
+ switch ( dst_type )
+ {
+ case kptDatabase:
+ case kptTable:
+ src_type = KDBManagerPathType ( caps . kdb, tp . src_path ) & ~ kptAlias;
+ if ( src_type == kptPrereleaseTbl )
+ src_type = kptTable;
+ if ( src_type != dst_type )
+ {
+ rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+ ERROR ( rc, "source and destination object types are not compatible" );
+ }
+ else if ( ! tp . force )
+ {
+ rc = RC ( rcExe, targ, rcCopying, targ, rcExists );
+ ERROR ( rc, "destination object cannot be overwritten - try again with '-f'" );
+ }
+ else
+ {
+ tp . db . cmode = kcmInit | ( tp . db . cmode & ~ kcmValueMask );
+ tp . tbl . cmode = kcmInit | ( tp . tbl . cmode & ~ kcmValueMask );
+ }
+ }
+
+ if ( ! FAILED () )
+ run ( ctx );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ ArgsWhack ( args );
+ }
+ }
+ }
+
+ CapsWhack ( & caps, ctx );
+ }
+ }
+
+ return main_ctx . rc;
+}
diff --git a/tools/sra-sort/sra-sort.h b/tools/sra-sort/sra-sort.h
new file mode 100644
index 0000000..027d591
--- /dev/null
+++ b/tools/sra-sort/sra-sort.h
@@ -0,0 +1,171 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_
+#define _h_sra_sort_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#ifndef _h_kdb_column_
+#include <kdb/column.h>
+#endif
+
+
+#define NEW_TYPES 1
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct DbPair;
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * Selection
+ * input selection criteria
+ */
+typedef struct Selection Selection;
+struct Selection
+{
+ int dummy;
+};
+
+/*--------------------------------------------------------------------------
+ * Tool
+ * parameter block generated by KMain
+ */
+typedef struct Tool Tool;
+struct Tool
+{
+ /* input selection */
+ const Selection *sel;
+
+ /* directory for temporary files */
+ const char *tmpdir;
+
+ /* directory for mmap page files */
+ const char *mmapdir;
+
+ /* source object path */
+ const char *src_path;
+
+ /* destination object path */
+ const char *dst_path;
+
+ /* buffer size for id map files */
+ size_t map_file_bsize;
+ size_t map_file_random_bsize;
+
+ /* the number of ids to gather at a time */
+ size_t max_ref_idx_ids;
+ size_t max_large_idx_ids;
+ size_t max_poslen_ids;
+ size_t max_idx_ids;
+ size_t min_idx_ids;
+
+ /* the number of missing SEQUENCE ids to gather at a time */
+ size_t max_missing_ids;
+
+ /* pid of tool */
+ int pid;
+
+ /* db create mode */
+ struct
+ {
+ KCreateMode cmode;
+ } db;
+
+ /* tbl create mode */
+ struct
+ {
+ KCreateMode cmode;
+ } tbl;
+
+ /* column blob checksum mode */
+ struct
+ {
+ size_t pgsize;
+ KCreateMode cmode;
+ KChecksum checksum;
+ } col;
+
+ /* ignore failure on multiple sorts */
+ bool ignore;
+
+ /* force overwrite */
+ bool force;
+
+ /* write new=>old mappings
+ not normally needed */
+ bool write_new_to_old;
+
+ /* whether to apply a sort on old-id
+ before writing old=>new mapping or
+ to let pagefile handle it */
+ bool sort_before_old2new;
+
+ /* normally remove idx files right away
+ but if they are being debugged... */
+ bool unlink_idx_files;
+
+ /* perform consistency check on index */
+ bool idx_consistency_check;
+};
+
+
+/*--------------------------------------------------------------------------
+ * TypeParams
+ * object type params
+ */
+typedef struct TypeParams TypeParams;
+struct TypeParams
+{
+ char src_type [ 256 ];
+ char dst_type [ 256 ];
+ char view_type [ 256 ];
+};
+
+
+/*--------------------------------------------------------------------------
+ * sra-sort functions
+ */
+
+/* run
+ * called from KMain
+ * determines the type of object being copied/sorted
+ * opens input object
+ * dispatches to the appropriate handler
+ */
+void run ( const ctx_t *ctx );
+
+
+#endif
diff --git a/tools/sra-sort/sra-sort.vers b/tools/sra-sort/sra-sort.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/sra-sort/sra-sort.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/sra-sort/status.h b/tools/sra-sort/status.h
new file mode 100644
index 0000000..bbf15ab
--- /dev/null
+++ b/tools/sra-sort/status.h
@@ -0,0 +1,48 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_status_
+#define _h_sra_sort_status_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * status generation
+ */
+
+
+/* STATUS
+ * give feedback
+ */
+void Status ( const ctx_t *ctx, uint32_t lineno, uint32_t level, const char *msg, ... );
+#define STATUS( lvl, msg, ... ) \
+ Status ( ctx, __LINE__, lvl, msg, ## __VA_ARGS__ )
+
+
+#endif
diff --git a/tools/sra-sort/tbl-pair.c b/tools/sra-sort/tbl-pair.c
new file mode 100644
index 0000000..f0c6597
--- /dev/null
+++ b/tools/sra-sort/tbl-pair.c
@@ -0,0 +1,1055 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct TablePair StdTblPair;
+#define TBLPAIR_IMPL StdTblPair
+
+#include "tbl-pair.h"
+#include "col-pair.h"
+#include "db-pair.h"
+#include "meta-pair.h"
+#include "row-set-priv.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/meta.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/namelist.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( tbl-pair );
+
+
+/*--------------------------------------------------------------------------
+ * StdTblPair
+ * generic database object pair
+ */
+
+static
+void StdTblPairWhack ( StdTblPair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+ TablePairDestroy ( self, ctx );
+ MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void StdTblPairDummyStub ( StdTblPair *self, const ctx_t *ctx )
+{
+}
+
+static
+ColumnPair *StdTblPairMakeColumnPair ( StdTblPair *self, const ctx_t *ctx,
+ struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+ FUNC_ENTRY ( ctx );
+ return TablePairMakeColumnPair ( self, ctx, reader, writer, colspec, large );
+}
+
+static
+RowSetIterator *StdTblPairGetRowSetIterator ( StdTblPair *self, const ctx_t *ctx, bool mapped, bool large )
+{
+ FUNC_ENTRY ( ctx );
+ return TablePairMakeRowSetIterator ( self, ctx, NULL, mapped, large );
+}
+
+static TablePair_vt StdTblPair_vt =
+{
+ StdTblPairWhack,
+ StdTblPairDummyStub,
+ StdTblPairDummyStub,
+ StdTblPairMakeColumnPair,
+ StdTblPairDummyStub,
+ StdTblPairDummyStub,
+ StdTblPairGetRowSetIterator
+};
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ * interface code
+ */
+
+
+/* Make
+ * makes an object based upon open source and destination VDatabase objects
+ */
+TablePair *TablePairMake ( const ctx_t *ctx,
+ const VTable *src, VTable *dst, const char *name, const char *opt_full_spec, bool reorder )
+{
+ FUNC_ENTRY ( ctx );
+
+ StdTblPair *tbl;
+
+ TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+ {
+ TRY ( TablePairInit ( tbl, ctx, & StdTblPair_vt, src, dst, name, opt_full_spec, reorder ) )
+ {
+ return tbl;
+ }
+
+ MemFree ( ctx, tbl, sizeof * tbl );
+ }
+
+ return NULL;
+}
+
+TablePair *DbPairMakeStdTblPair ( DbPair *self, const ctx_t *ctx,
+ const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+ FUNC_ENTRY ( ctx );
+ return TablePairMake ( ctx, src, dst, name, self -> full_spec, reorder );
+}
+
+
+/* Release
+ */
+void TablePairRelease ( TablePair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountDrop ( & self -> refcount, "TablePair" ) )
+ {
+ case krefOkay:
+ break;
+ case krefWhack:
+ ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+ break;
+ case krefZero:
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcTable, rcDestroying, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to release TablePair" );
+ }
+ }
+}
+
+/* Duplicate
+ */
+TablePair *TablePairDuplicate ( TablePair *self, const ctx_t *ctx )
+{
+ rc_t rc;
+ FUNC_ENTRY ( ctx );
+
+ if ( self != NULL )
+ {
+ switch ( KRefcountAdd ( & self -> refcount, "TablePair" ) )
+ {
+ case krefOkay:
+ case krefWhack:
+ case krefZero:
+ break;
+ case krefLimit:
+ case krefNegative:
+ rc = RC ( rcExe, rcTable, rcAttaching, rcRefcount, rcInvalid );
+ INTERNAL_ERROR ( rc, "failed to duplicate TablePair" );
+ return NULL;
+ }
+ }
+
+ return ( TablePair* ) self;
+}
+
+
+/* CommitColumnPair
+ */
+static
+bool CC TablePairCommitColumnPair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ ColumnPair *col = item;
+ TRY ( ColumnWriterCommit ( col -> writer, ctx ) )
+ {
+ return false;
+ }
+ return true;
+}
+
+
+/* ReleaseColumnPair
+ */
+static
+void CC TablePairReleaseColumnPair ( void *item, void *data )
+{
+ const ctx_t *ctx = ( const void* ) data;
+ FUNC_ENTRY ( ctx );
+ ColumnPairRelease ( item, ctx );
+}
+
+
+/* Copy
+ * the table has to obtain a RowSetIterator
+ * which it walks vertically
+ *
+ * for each RowSet, it walks its columns horizontally,
+ * resetting it between columns
+ */
+static
+void TablePairCopyStaticColumns ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* copy static columns */
+ uint32_t count = VectorLength ( & self -> static_cols );
+ if ( count != 0 )
+ {
+#if OLD_STATIC_WRITE
+ RowSetIterator *rsi;
+ TRY ( rsi = TablePairMakeRowSetIterator ( self, ctx, NULL, false ) )
+ {
+#endif
+ STATUS ( 2, "copying '%s' static columns", self -> full_spec );
+
+ while ( ! FAILED () )
+ {
+ uint32_t i;
+
+#if OLD_STATIC_WRITE
+ RowSet *rs;
+ ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+ break;
+ if ( rs == NULL )
+ break;
+#endif
+ for ( i = 0; i < count; ++ i )
+ {
+ ColumnPair *col = VectorGet ( & self -> static_cols, i );
+ assert ( col != NULL );
+#if OLD_STATIC_WRITE
+ ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+ break;
+#else
+ ON_FAIL ( ColumnPairCopyStatic ( col, ctx, self -> first_id, self -> last_excl - self -> first_id ) )
+ break;
+#endif
+ }
+
+#if OLD_STATIC_WRITE
+ RowSetRelease ( rs, ctx );
+#else
+ break;
+#endif
+ }
+
+#if OLD_STATIC_WRITE
+ RowSetIteratorRelease ( rsi, ctx );
+ }
+#endif
+
+ /* commit columns */
+ if ( ! FAILED () )
+ {
+ STATUS ( 3, "committing static columns" );
+ VectorDoUntil ( & self -> static_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+ }
+
+ /* douse columns */
+ STATUS ( 3, "releasing static columns" );
+ VectorWhack ( & self -> static_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ }
+}
+
+static
+void TablePairCopyPresortColumns ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* copy remaining columns */
+ uint32_t count = VectorLength ( & self -> presort_cols );
+ if ( count != 0 )
+ {
+ RowSetIterator *rsi;
+ TRY ( rsi = TablePairMakeSimpleRowSetIterator ( self, ctx ) )
+ {
+ STATUS ( 2, "copying '%s' presorted columns", self -> full_spec );
+
+ while ( ! FAILED () )
+ {
+ uint32_t i;
+
+ RowSet *rs;
+ ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+ break;
+ if ( rs == NULL )
+ break;
+
+ for ( i = 0; i < count; ++ i )
+ {
+ ColumnPair *col = VectorGet ( & self -> presort_cols, i );
+ assert ( col != NULL );
+ ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+ break;
+ }
+
+ RowSetRelease ( rs, ctx );
+ }
+
+ RowSetIteratorRelease ( rsi, ctx );
+ }
+
+ /* commit columns */
+ if ( ! FAILED () )
+ {
+ STATUS ( 3, "committing presorted columns" );
+ VectorDoUntil ( & self -> presort_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+ }
+
+ /* douse columns */
+ STATUS ( 3, "releasing presorted columns" );
+ VectorWhack ( & self -> presort_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ }
+}
+
+static
+void TablePairCopyMappedColumns ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* copy mapped columns */
+ uint32_t count = VectorLength ( & self -> mapped_cols );
+ if ( count != 0 )
+ {
+ RowSetIterator *rsi;
+ const bool is_mapped = true;
+ const bool is_large = false;
+ TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+ {
+ STATUS ( 2, "copying '%s' mapped columns", self -> full_spec );
+
+ while ( ! FAILED () )
+ {
+ uint32_t i;
+
+ RowSet *rs;
+ ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+ break;
+ if ( rs == NULL )
+ break;
+
+ for ( i = 0; i < count; ++ i )
+ {
+ ColumnPair *col = VectorGet ( & self -> mapped_cols, i );
+ assert ( col != NULL );
+ ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+ break;
+ }
+
+ RowSetRelease ( rs, ctx );
+ }
+
+ RowSetIteratorRelease ( rsi, ctx );
+ }
+
+ /* commit columns */
+ if ( ! FAILED () )
+ {
+ STATUS ( 3, "committing mapped columns" );
+ VectorDoUntil ( & self -> mapped_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+ }
+
+ /* douse columns */
+ STATUS ( 3, "releasing mapped columns" );
+ VectorWhack ( & self -> mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ }
+}
+
+static
+void TablePairCopyLargeColumns ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* copy large columns */
+ uint32_t count = VectorLength ( & self -> large_cols );
+ if ( count != 0 )
+ {
+ RowSetIterator *rsi;
+ const bool is_mapped = false;
+ const bool is_large = true;
+ TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+ {
+ STATUS ( 2, "copying '%s' large columns", self -> full_spec );
+
+ while ( ! FAILED () )
+ {
+ uint32_t i;
+
+ RowSet *rs;
+ ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+ break;
+ if ( rs == NULL )
+ break;
+
+ for ( i = 0; i < count; ++ i )
+ {
+ ColumnPair *col = VectorGet ( & self -> large_cols, i );
+ assert ( col != NULL );
+ ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+ break;
+ }
+
+ RowSetRelease ( rs, ctx );
+ }
+
+ RowSetIteratorRelease ( rsi, ctx );
+ }
+
+ /* commit columns */
+ if ( ! FAILED () )
+ {
+ STATUS ( 3, "committing large columns" );
+ VectorDoUntil ( & self -> large_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+ }
+
+ /* douse columns */
+ STATUS ( 3, "releasing large columns" );
+ VectorWhack ( & self -> large_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ }
+}
+
+static
+void TablePairCopyLargeMappedColumns ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* copy large mapped columns */
+ uint32_t count = VectorLength ( & self -> large_mapped_cols );
+ if ( count != 0 )
+ {
+ RowSetIterator *rsi;
+ const bool is_mapped = true;
+ const bool is_large = true;
+ TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+ {
+ STATUS ( 2, "copying '%s' large mapped columns", self -> full_spec );
+
+ while ( ! FAILED () )
+ {
+ uint32_t i;
+
+ RowSet *rs;
+ ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+ break;
+ if ( rs == NULL )
+ break;
+
+ for ( i = 0; i < count; ++ i )
+ {
+ ColumnPair *col = VectorGet ( & self -> large_mapped_cols, i );
+ assert ( col != NULL );
+ ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+ break;
+ }
+
+ RowSetRelease ( rs, ctx );
+ }
+
+ RowSetIteratorRelease ( rsi, ctx );
+ }
+
+ /* commit columns */
+ if ( ! FAILED () )
+ {
+ STATUS ( 3, "committing large mapped columns" );
+ VectorDoUntil ( & self -> large_mapped_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+ }
+
+ /* douse columns */
+ STATUS ( 3, "releasing large mapped columns" );
+ VectorWhack ( & self -> large_mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ }
+}
+
+static
+void TablePairCopyNormalColumns ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ /* copy remaining columns */
+ uint32_t count = VectorLength ( & self -> normal_cols );
+ if ( count != 0 )
+ {
+ RowSetIterator *rsi;
+ const bool is_mapped = false;
+ const bool is_large = false;
+ TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+ {
+ STATUS ( 2, "copying '%s' columns", self -> full_spec );
+
+ while ( ! FAILED () )
+ {
+ uint32_t i;
+
+ RowSet *rs;
+ ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+ break;
+ if ( rs == NULL )
+ break;
+
+ for ( i = 0; i < count; ++ i )
+ {
+ ColumnPair *col = VectorGet ( & self -> normal_cols, i );
+ assert ( col != NULL );
+ ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+ break;
+ }
+
+ RowSetRelease ( rs, ctx );
+ }
+
+ RowSetIteratorRelease ( rsi, ctx );
+ }
+
+ /* commit columns */
+ if ( ! FAILED () )
+ {
+ STATUS ( 3, "committing columns" );
+ VectorDoUntil ( & self -> normal_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+ }
+
+ /* douse columns */
+ STATUS ( 3, "releasing columns" );
+ VectorWhack ( & self -> normal_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ }
+}
+
+void TablePairCopy ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ size_t in_use, quota;
+
+ /* copy columns */
+
+
+ ON_FAIL ( TablePairExplode ( self, ctx ) )
+ return;
+
+ STATUS ( 2, "copying table '%s'", self -> full_spec );
+
+ in_use = MemInUse ( ctx, & quota );
+ if ( ( quota + 1 ) != 0 )
+ STATUS ( 4, "MEMORY: %,zu bytes used out of %,zu total ( %u%% )", in_use, quota, ( uint32_t ) ( in_use * 100 ) / quota );
+ else
+ STATUS ( 4, "MEMORY: %,zu bytes used", in_use );
+
+ TRY ( TablePairPreCopy ( self, ctx ) )
+ {
+ TRY ( TablePairCopyStaticColumns ( self, ctx ) )
+ {
+ TRY ( TablePairCopyPresortColumns ( self, ctx ) )
+ {
+ TRY ( TablePairCopyMappedColumns ( self, ctx ) )
+ {
+ TRY ( TablePairCopyLargeColumns ( self, ctx ) )
+ {
+ TRY ( TablePairCopyLargeMappedColumns ( self, ctx ) )
+ {
+ TablePairCopyNormalColumns ( self, ctx );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* cleanup */
+ if ( ! FAILED () )
+ TablePairPostCopy ( self, ctx );
+
+ in_use = MemInUse ( ctx, & quota );
+ if ( ( quota + 1 ) != 0 )
+ STATUS ( 4, "MEMORY: %,zu bytes used out of %,zu total ( %u%% )", in_use, quota, ( uint32_t ) ( in_use * 100 ) / quota );
+ else
+ STATUS ( 4, "MEMORY: %,zu bytes used", in_use );
+
+ STATUS ( 2, "finished with table '%s'", self -> full_spec );
+}
+
+
+/* Explode
+ * probably a bad name, but it is intended to mean
+ * register all enclosed columns
+ * and create a proper pair of KMetadata
+ */
+static
+MetaPair *TablePairExplodeMetaPair ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ MetaPair *meta = NULL;
+ const KMetadata *smeta;
+
+ rc = VTableOpenMetadataRead ( self -> stbl, & smeta );
+ if ( rc != 0 )
+ ERROR ( rc, "VTableOpenMetadataRead failed on 'src.%s'", self -> full_spec );
+ else
+ {
+ KMetadata *dmeta;
+ rc = VTableOpenMetadataUpdate ( self -> dtbl, & dmeta );
+ if ( rc != 0 )
+ ERROR ( rc, "VTableOpenMetadataUpdate failed on 'dst.%s'", self -> full_spec );
+ else
+ {
+ meta = MetaPairMake ( ctx, smeta, dmeta, self -> full_spec );
+
+ KMetadataRelease ( dmeta );
+ }
+
+ KMetadataRelease ( smeta );
+ }
+
+ return meta;
+}
+
+static
+ColumnPair *TablePairMatchColumnPair ( TablePair *self, const ctx_t *ctx, const char *name, bool required )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ KNamelist *types;
+ ColumnPair *col = NULL;
+
+ rc = VTableListWritableDatatypes ( self -> dtbl, name, & types );
+ if ( rc != 0 )
+ ERROR ( rc, "VTableListWritableDatatypes failed listing 'dst.%s.%s' datatypes", self -> full_spec, name );
+ else
+ {
+ uint32_t count;
+ rc = KNamelistCount ( types, & count );
+ if ( rc != 0 )
+ ERROR ( rc, "KNamelistCount failed listing 'dst.%s.%s' datatypes", self -> full_spec, name );
+ else
+ {
+ const VCursor *scurs;
+ rc = VTableCreateCursorRead ( self -> stbl, & scurs );
+ if ( rc != 0 )
+ ERROR ( rc, "VTableCreateCursorRead failed on 'src.%s'", self -> full_spec, name );
+ else
+ {
+ rc = VCursorPermitPostOpenAdd ( scurs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorPermitPostOpenAdd failed on 'src.%s'", self -> full_spec, name );
+ else
+ {
+ rc = VCursorOpen ( scurs );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorOpen failed with no contents on 'src.%s'", self -> full_spec, name );
+ else
+ {
+ uint32_t i;
+ for ( i = 0; i < count; ++ i )
+ {
+ uint32_t idx;
+ char colspec [ 256 ];
+
+ const char *td;
+ rc = KNamelistGet ( types, i, & td );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "KNamelistGet ( %u ) failed listing 'dst.%s.%s' datatypes", i, self -> full_spec, name );
+ break;
+ }
+
+ rc = string_printf ( colspec, sizeof colspec, NULL, "(%s)%s", td, name );
+ if ( rc != 0 )
+ {
+ ABORT ( rc, "failed creating colspec for 'dst.%s.%s'", self -> full_spec, name );
+ break;
+ }
+
+ rc = VCursorAddColumn ( scurs, & idx, colspec );
+ if ( rc == 0 )
+ {
+ ColumnReader *reader;
+ TRY ( reader = TablePairMakeColumnReader ( self, ctx, scurs, colspec, true ) )
+ {
+ ColumnWriter *writer;
+ TRY ( writer = TablePairMakeColumnWriter ( self, ctx, NULL, colspec ) )
+ {
+ uint32_t j;
+ bool large = false;
+ bool is_static = VTableHasStaticColumn ( self -> stbl, name );
+ if ( is_static )
+ {
+ if ( self -> nonstatic_col_names != NULL )
+ {
+ for ( j = 0; self -> nonstatic_col_names [ j ] != NULL; ++ j )
+ {
+ if ( strcmp ( name, self -> nonstatic_col_names [ j ] ) == 0 )
+ {
+ is_static = false;
+ break;
+ }
+ }
+ }
+ }
+ else if ( self -> large_col_names != NULL )
+ {
+ for ( j = 0; self -> large_col_names [ j ] != NULL; ++ j )
+ {
+ if ( strcmp ( name, self -> large_col_names [ j ] ) == 0 )
+ {
+ large = true;
+ break;
+ }
+ }
+ }
+
+ /* at this point, if the column is static, then avoid
+ any rigorous treatment and create an otherwise normal
+ column pair. may want to special case it for reporting */
+ col = is_static
+ ? TablePairMakeStaticColumnPair ( self, ctx, reader, writer, colspec )
+ : ( * self -> vt -> make_column_pair ) ( ( TBLPAIR_IMPL* ) self, ctx, reader, writer, colspec, large );
+
+ ColumnWriterRelease ( writer, ctx );
+ }
+
+ ColumnReaderRelease ( reader, ctx );
+ }
+ break;
+ }
+ }
+
+ if ( col == NULL && ! FAILED () )
+ ANNOTATE ( "column '%s' cannot be written", name );
+ }
+ }
+
+
+ VCursorRelease ( scurs );
+ }
+ }
+
+ KNamelistRelease ( types );
+ }
+
+ return col;
+}
+
+static
+void TablePairDefaultExplode ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ KNamelist *pnames;
+
+ /* look at the physical columns in source */
+ rc = VTableListPhysColumns ( self -> stbl, & pnames );
+ if ( rc != 0 )
+ ERROR ( rc, "VTableListWritableColumns failed listing 'src.%s' physical columns", self -> full_spec );
+ else
+ {
+ KNamelist *dnames;
+
+ /* this gives us the columns that could potentially take input */
+ rc = VTableListSeededWritableColumns ( self -> dtbl, & dnames, pnames );
+ if ( rc != 0 )
+ ERROR ( rc, "VTableListWritableColumns failed listing 'dst.%s' columns", self -> full_spec );
+ else
+ {
+ uint32_t count;
+ rc = KNamelistCount ( dnames, & count );
+ if ( rc != 0 )
+ ERROR ( rc, "KNamelistCount failed listing 'dst.%s' columns", self -> full_spec );
+ else if ( count > 0 )
+ {
+ uint32_t i;
+ for ( i = 0; ! FAILED () && i < count; ++ i )
+ {
+ ColumnPair *col;
+
+ const char *name;
+ rc = KNamelistGet ( dnames, i, & name );
+ if ( rc != 0 )
+ {
+ ERROR ( rc, "KNamelistGet ( %u ) failed listing 'dst.%s' columns", i, self -> full_spec );
+ break;
+ }
+
+ /* filter out the column names that are specifically excluded */
+ if ( self -> exclude_col_names != NULL )
+ {
+ uint32_t j;
+ for ( j = 0; self -> exclude_col_names [ j ] != NULL; ++ j )
+ {
+ if ( strcmp ( name, self -> exclude_col_names [ j ] ) == 0 )
+ {
+ name = NULL;
+ break;
+ }
+ }
+ if ( name == NULL )
+ continue;
+ }
+
+ TRY ( col = TablePairMatchColumnPair ( self, ctx, name, true ) )
+ {
+ if ( col != NULL )
+ {
+ ON_FAIL ( TablePairAddColumnPair ( self, ctx, col ) )
+ {
+ ColumnPairRelease ( col, ctx );
+ }
+ }
+ }
+ }
+ }
+
+ KNamelistRelease ( dnames );
+ }
+
+ KNamelistRelease ( pnames );
+ }
+}
+
+void TablePairExplode ( TablePair *self, const ctx_t *ctx )
+{
+ if ( ! self -> exploded )
+ {
+ FUNC_ENTRY ( ctx );
+
+ STATUS ( 2, "exploding table '%s'", self -> full_spec );
+
+ /* first, ask subclass to perform explicit explode */
+ TRY ( ( * self -> vt -> explode ) ( self, ctx ) )
+ {
+ if ( self -> meta == NULL )
+ {
+ TRY ( self -> meta = TablePairExplodeMetaPair ( self, ctx ) )
+ {
+ MetaPairCopy ( self -> meta, ctx, self -> full_spec, self -> exclude_meta );
+ STATUS ( 3, "releasing metadata" );
+ MetaPairRelease ( self -> meta, ctx );
+ self -> meta = NULL;
+ }
+ }
+
+ if ( ! FAILED () )
+ {
+ /* next, perform default self-explode for all columns not excluded */
+ TRY ( TablePairDefaultExplode ( self, ctx ) )
+ {
+ /* now create metadata pair */
+ if ( self -> meta == NULL )
+ self -> meta = TablePairExplodeMetaPair ( self, ctx );
+ if ( ! FAILED () )
+ self -> exploded = true;
+ }
+ }
+ }
+ }
+}
+
+
+/* AddColumnPair
+ * called from implementations
+ */
+void TablePairAddColumnPair ( TablePair *self, const ctx_t *ctx, ColumnPair *col )
+{
+ if ( col != NULL )
+ {
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ Vector *v = & self -> normal_cols;
+
+ const char *col_type = "";
+ const char *col_size = "";
+
+ if ( col -> large )
+ {
+ col_size = "large ";
+ v = & self -> large_cols;
+ }
+
+ if ( col -> is_static )
+ {
+ col_type = "static ";
+ v = & self -> static_cols;
+ }
+ else if ( col -> presorted )
+ {
+ col_type = "presorted ";
+ v = & self -> presort_cols;
+ }
+ else if ( col -> is_mapped )
+ {
+ col_type = "mapped ";
+ v = col -> large ? & self -> large_mapped_cols : & self -> mapped_cols;
+ }
+
+ STATUS ( 4, "adding %s%scolumn pair '%s'", col_size, col_type, col -> full_spec );
+ rc = VectorAppend ( v, NULL, ( const void* ) col );
+ if ( rc != 0 )
+ SYSTEM_ERROR ( rc, "failed to add column pair '%s'", col -> full_spec );
+ else
+ {
+ int64_t first;
+ uint64_t count;
+
+ TRY ( count = ColumnReaderIdRange ( col -> reader, ctx, & first ) )
+ {
+ int64_t last_excl = first + count;
+ if ( first < self -> first_id )
+ self -> first_id = first;
+ /* Static columns may have incorrect range in legacy data */
+ if ( last_excl > self -> last_excl && !col->is_static)
+ self -> last_excl = last_excl;
+ }
+ }
+ }
+}
+
+
+/* Init
+ */
+void TablePairInit ( TablePair *self, const ctx_t *ctx, const TablePair_vt *vt,
+ const VTable *src, VTable *dst, const char *name, const char *opt_full_spec, bool reorder )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ memset ( self, 0, sizeof * self );
+ self -> vt = vt;
+
+ VectorInit ( & self -> static_cols, 0, 32 );
+ VectorInit ( & self -> presort_cols, 0, 4 );
+ VectorInit ( & self -> large_cols, 0, 32 );
+ VectorInit ( & self -> mapped_cols, 0, 32 );
+ VectorInit ( & self -> large_mapped_cols, 0, 32 );
+ VectorInit ( & self -> normal_cols, 0, 32 );
+
+ if ( opt_full_spec == NULL )
+ opt_full_spec = "";
+
+ rc = VTableAddRef ( self -> stbl = src );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to duplicate tbl 'src.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+ else
+ {
+ rc = VTableAddRef ( self -> dtbl = dst );
+ if ( rc != 0 )
+ ERROR ( rc, "failed to duplicate tbl 'dst.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+ else
+ {
+ char *full_spec;
+
+ self -> full_spec_size = string_size ( opt_full_spec ) + string_size ( name );
+ if ( opt_full_spec [ 0 ] != 0 )
+ ++ self -> full_spec_size;
+
+ TRY ( full_spec = MemAlloc ( ctx, self -> full_spec_size + 1, false ) )
+ {
+ if ( opt_full_spec [ 0 ] != 0 )
+ rc = string_printf ( full_spec, self -> full_spec_size + 1, NULL, "%s.%s", opt_full_spec, name );
+ else
+ strcpy ( full_spec, name );
+ if ( rc != 0 )
+ ABORT ( rc, "miscalculated string size" );
+ else
+ {
+ const Tool *tp = ctx -> caps -> tool;
+
+ self -> full_spec = full_spec;
+ self -> name = full_spec;
+ if ( opt_full_spec [ 0 ] != 0 )
+ self -> name += string_size ( opt_full_spec ) + 1;
+
+ /* start with an invalid range */
+ self -> first_id = ( int64_t ) ( ~ ( uint64_t ) 0 >> 1 );
+ self -> last_excl = - self -> first_id;
+
+ /* row-set id ranges */
+ self -> max_idx_ids = tp -> max_idx_ids;
+ self -> min_idx_ids = tp -> min_idx_ids;
+
+ /* record reordering */
+ self -> reorder = reorder;
+
+ KRefcountInit ( & self -> refcount, 1, "TablePair", "init", name );
+ return;
+ }
+ }
+
+ VTableRelease ( self -> dtbl );
+ self -> dtbl = NULL;
+ }
+
+ VTableRelease ( self -> stbl );
+ self -> stbl = NULL;
+ }
+}
+
+/* Destroy
+ * destroys superclass items
+ */
+void TablePairDestroy ( TablePair *self, const ctx_t *ctx )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+
+ VectorWhack ( & self -> static_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ VectorWhack ( & self -> presort_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ VectorWhack ( & self -> large_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ VectorWhack ( & self -> mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ VectorWhack ( & self -> large_mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+ VectorWhack ( & self -> normal_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+
+ MetaPairRelease ( self -> meta, ctx );
+
+ rc = VTableReindex ( self -> dtbl );
+ if ( rc != 0 )
+ WARN ( "VTableReindex failed on 'dst.%s'", self -> full_spec );
+ rc = VTableRelease ( self -> dtbl );
+ if ( rc != 0 )
+ WARN ( "VTableRelease failed on 'dst.%s'", self -> full_spec );
+ VTableRelease ( self -> stbl );
+
+ MemFree ( ctx, ( void* ) self -> full_spec, self -> full_spec_size + 1 );
+
+ memset ( self, 0, sizeof * self );
+}
diff --git a/tools/sra-sort/tbl-pair.h b/tools/sra-sort/tbl-pair.h
new file mode 100644
index 0000000..4ee383e
--- /dev/null
+++ b/tools/sra-sort/tbl-pair.h
@@ -0,0 +1,209 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_tbl_pair_
+#define _h_sra_sort_tbl_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_vector_
+#include <klib/vector.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VTable;
+struct DbPair;
+struct ColumnReader;
+struct ColumnWriter;
+struct ColumnPair;
+struct MetaPair;
+struct RowSetIterator;
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ * interface to pairing of source and destination tables
+ */
+typedef struct TablePair_vt TablePair_vt;
+
+typedef struct TablePair TablePair;
+struct TablePair
+{
+ /* table id range */
+ int64_t first_id, last_excl;
+
+ /* polymorphic */
+ const TablePair_vt *vt;
+
+ /* the pair of VTables */
+ struct VTable const *stbl;
+ struct VTable *dtbl;
+
+ /* the pair of KMetadata */
+ struct MetaPair *meta;
+
+ /* the ColumnPairs */
+ Vector static_cols;
+ Vector presort_cols;
+ Vector large_cols;
+ Vector mapped_cols;
+ Vector large_mapped_cols;
+ Vector normal_cols;
+
+ /* filters */
+ const char **exclude_meta;
+ const char **exclude_col_names;
+ const char **mapped_col_names;
+ const char **nonstatic_col_names;
+ const char **large_col_names;
+
+ /* row-set id ranges */
+ size_t max_idx_ids;
+ size_t min_idx_ids;
+
+ /* simple table name */
+ const char *name;
+
+ /* full table spec */
+ size_t full_spec_size;
+ const char *full_spec;
+
+ /* reference counting */
+ KRefcount refcount;
+
+ /* true if table will be reordered */
+ bool reorder;
+
+ /* true if already exploded */
+ bool exploded;
+
+ uint8_t align [ 2 ];
+};
+
+#ifndef TBLPAIR_IMPL
+#define TBLPAIR_IMPL TablePair
+#endif
+
+struct TablePair_vt
+{
+ void ( * whack ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+ void ( * pre_explode ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+ void ( * explode ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+ struct ColumnPair* ( *make_column_pair ) ( TBLPAIR_IMPL *self, const ctx_t *ctx,
+ struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large );
+ void ( * pre_copy ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+ void ( * post_copy ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+ struct RowSetIterator* ( *get_rowset_iter ) ( TBLPAIR_IMPL *self,
+ const ctx_t *ctx, bool mapped, bool large );
+};
+
+
+/* Make
+ * make a standard table pair from existing VTable objects
+ */
+TablePair *TablePairMake ( const ctx_t *ctx,
+ struct VTable const *src, struct VTable *dst,
+ const char *name, const char *opt_full_spec, bool reorder );
+
+TablePair *DbPairMakeStdTblPair ( struct DbPair *self, const ctx_t *ctx,
+ struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+/* Release
+ * called by table at end of copy
+ */
+void TablePairRelease ( TablePair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+TablePair *TablePairDuplicate ( TablePair *self, const ctx_t *ctx );
+
+
+/* Copy
+ * copy from source to destination table
+ */
+void TablePairCopy ( TablePair *self, const ctx_t *ctx );
+
+
+/* PreExplode
+ * perform explosion before overall coopy
+ */
+#define TablePairPreExplode( self, ctx ) \
+ POLY_DISPATCH_VOID ( pre_explode, self, TBLPAIR_IMPL, ctx )
+
+
+/* Explode
+ * probably a bad name, but it is intended to mean
+ * register all enclosed columns
+ * and create a proper pair of KMetadata
+ */
+void TablePairExplode ( TablePair *self, const ctx_t *ctx );
+
+
+/* AddColumnPair
+ * called from implementations
+ */
+void TablePairAddColumnPair ( TablePair *self, const ctx_t *ctx, struct ColumnPair *col );
+
+
+/* PreCopy
+ * PostCopy
+ * give table a chance to prepare and cleanup
+ */
+#define TablePairPreCopy( self, ctx ) \
+ POLY_DISPATCH_VOID ( pre_copy, self, TBLPAIR_IMPL, ctx )
+#define TablePairPostCopy( self, ctx ) \
+ POLY_DISPATCH_VOID ( post_copy, self, TBLPAIR_IMPL, ctx )
+
+
+/* GetRowSetIterator
+ * returns an iterator for copying
+ */
+#define TablePairGetRowSetIterator( self, ctx, mapped, large ) \
+ POLY_DISPATCH_PTR ( get_rowset_iter, self, TBLPAIR_IMPL, ctx, mapped, large )
+
+
+/* Init
+ */
+void TablePairInit ( TablePair *self, const ctx_t *ctx, const TablePair_vt *vt,
+ struct VTable const *src, struct VTable *dst,
+ const char *name, const char *opt_full_spec, bool reorder );
+
+/* Destroy
+ */
+void TablePairDestroy ( TablePair *self, const ctx_t *ctx );
+
+
+#endif /* _h_sra_sort_tbl_pair_ */
diff --git a/tools/sra-sort/xcheck-ref-align.c b/tools/sra-sort/xcheck-ref-align.c
new file mode 100644
index 0000000..2c7a1cf
--- /dev/null
+++ b/tools/sra-sort/xcheck-ref-align.c
@@ -0,0 +1,404 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+#include <kapp/main.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <kproc/thread.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+#if ! _DEBUGGING
+#define USE_BGTHREAD 1
+#endif
+
+FILE_ENTRY ( xcheck-ref-align );
+
+
+/*--------------------------------------------------------------------------
+ * TestReferenceCell
+ * properly sorted tables will allow both columns to be walked.
+ * each row of the REFERENCE table column MUST contain zero or more
+ * sequential integers, and the first integer MUST continue the sequence
+ * established by previous rows. therefore, the row will be fully specified
+ * by a start and stop id pair.
+ */
+static
+int64_t TestReferenceCell ( const ctx_t *ctx,
+ const VCursor *ref_curs, uint32_t align_ids_idx,
+ const char *align_name, int64_t ref_row_id, int64_t excl_ref_last_idx )
+{
+ FUNC_ENTRY ( ctx );
+
+ const int64_t *cell;
+ uint32_t elem_bits, boff, row_len;
+
+ rc_t rc = VCursorCellDataDirect ( ref_curs, ref_row_id, align_ids_idx,
+ & elem_bits, ( const void** ) & cell, & boff, & row_len );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorCellDataDirect - failed to read row %ld from REFERENCE cursor", ref_row_id );
+ else if ( elem_bits != sizeof * cell * 8 )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcSize, rcIncorrect );
+ ERROR ( rc, "VCursorCellDataDirect - elem_bits of %u reading row %ld from REFERENCE cursor", elem_bits, ref_row_id );
+ }
+ else if ( boff != 0 )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcOffset, rcIncorrect );
+ ERROR ( rc, "VCursorCellDataDirect - bit offset of %u reading row %ld from REFERENCE cursor", boff, ref_row_id );
+ }
+ else
+ {
+ uint32_t i;
+ for ( i = 0; i < row_len; ++ i )
+ {
+ if ( cell [ i ] != excl_ref_last_idx + i )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcIncorrect );
+ ERROR ( rc, "REFERENCE.%s_IDS.%ld: expected id %ld but found %ld",
+ align_name, ref_row_id, excl_ref_last_idx + i, cell [ i ] );
+ break;
+ }
+ }
+
+ excl_ref_last_idx += row_len;
+ }
+
+ return excl_ref_last_idx;
+}
+
+static
+void TestAlignCell ( const ctx_t *ctx,
+ const VCursor *align_curs, uint32_t ref_id_idx,
+ const char *align_name, int64_t align_row_id, int64_t ref_row_id )
+{
+ FUNC_ENTRY ( ctx );
+
+ const int64_t *cell;
+ uint32_t elem_bits, boff, row_len;
+
+
+ rc_t rc = VCursorCellDataDirect ( align_curs, align_row_id, ref_id_idx,
+ & elem_bits, ( const void** ) & cell, & boff, & row_len );
+ if ( rc != 0 )
+ ERROR ( rc, "VCursorCellDataDirect - failed to read row %ld from %s cursor", align_row_id, align_name );
+ else if ( elem_bits != sizeof * cell * 8 )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcSize, rcIncorrect );
+ ERROR ( rc, "VCursorCellDataDirect - elem_bits of %u reading row %ld from %s cursor", elem_bits, align_row_id, align_name );
+ }
+ else if ( boff != 0 )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcOffset, rcIncorrect );
+ ERROR ( rc, "VCursorCellDataDirect - bit offset of %u reading row %ld from %s cursor", boff, align_row_id, align_name );
+ }
+ else if ( row_len != 1 )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcRange, rcIncorrect );
+ ERROR ( rc, "VCursorCellDataDirect - row_len of %u reading row %ld from %s cursor", row_len, align_row_id, align_name );
+ }
+ else if ( * cell != ref_row_id )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcIncorrect );
+ ERROR ( rc, "%s.REF_ID.%ld: expected id %ld but found %ld",
+ align_name, align_row_id, ref_row_id, cell [ 0 ] );
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignCols
+ * performs the cross-check
+ */
+static
+void CrossCheckRefAlignCols ( const ctx_t *ctx,
+ const VCursor *ref_curs, uint32_t align_ids_idx,
+ const VCursor *align_curs, uint32_t ref_id_idx, const char *align_name )
+{
+ FUNC_ENTRY ( ctx );
+
+ int64_t ref_row_id, excl_ref_last_id;
+ rc_t rc = VCursorIdRange ( ref_curs, 0, & ref_row_id, ( uint64_t* ) & excl_ref_last_id );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorIdRange - failed to establish row range on REFERENCE cursor" );
+ else
+ {
+ int64_t align_row_id, excl_align_last_id;
+
+ excl_ref_last_id += ref_row_id;
+
+ rc = VCursorIdRange ( align_curs, 0, & align_row_id, ( uint64_t* ) & excl_align_last_id );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorIdRange - failed to establish row range on %s cursor", align_name );
+ else
+ {
+ int64_t excl_last_align_idx;
+
+ excl_align_last_id += align_row_id;
+
+ for ( excl_last_align_idx = 1; ref_row_id < excl_ref_last_id; ++ ref_row_id )
+ {
+ int64_t first_align_idx = excl_last_align_idx;
+
+ /* rule for bailing out */
+ rc = Quitting ();
+ if ( rc != 0 || FAILED () )
+ break;
+
+ /* the REFERENCE id cell should be filled purely with sequential ids */
+ TRY ( excl_last_align_idx = TestReferenceCell ( ctx, ref_curs, align_ids_idx,
+ align_name, ref_row_id, excl_last_align_idx ) )
+ {
+ /* the ids must be within the range of the alignment table */
+ if ( excl_last_align_idx > excl_align_last_id )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcExcessive );
+ ERROR ( rc, "REFERENCE.%s_IDS.%ld: references non-existant rows ( %ld .. %ld : max %ld )",
+ align_name, ref_row_id, first_align_idx, excl_last_align_idx, excl_align_last_id );
+ break;
+ }
+
+ /* this is more of a permanent assert */
+ if ( first_align_idx != align_row_id )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcIncorrect );
+ ERROR ( rc, "REFERENCE.%s_IDS.%ld: expected id %ld but found %ld",
+ align_name, ref_row_id, first_align_idx, align_row_id );
+ break;
+ }
+
+ /* each of the rows in alignment table must point back
+ to the same row in the REFERENCE table */
+ for ( ; align_row_id < excl_last_align_idx; ++ align_row_id )
+ {
+ ON_FAIL ( TestAlignCell ( ctx, align_curs, ref_id_idx,
+ align_name, align_row_id, ref_row_id ) )
+ break;
+ }
+ }
+ }
+
+ /* at this point, we must have seen every record */
+ if ( ! FAILED () )
+ {
+ if ( ref_row_id != excl_ref_last_id )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcRange, rcIncomplete );
+ ERROR ( rc, "REFERENCE.%s_IDS: scan stopped on row %ld of %ld",
+ align_name, ref_row_id, excl_ref_last_id );
+ }
+ if ( align_row_id != excl_align_last_id )
+ {
+ rc = RC ( rcExe, rcIndex, rcValidating, rcRange, rcIncomplete );
+ ERROR ( rc, "%s.REF_ID: scan stopped on row %ld of %ld",
+ align_name, align_row_id, excl_align_last_id );
+ }
+ }
+ }
+ }
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignCurs
+ * adds columns and opens cursors
+ */
+static
+void CrossCheckRefAlignCurs ( const ctx_t *ctx,
+ const VCursor *ref_curs, const VCursor *align_curs, const char *align_name )
+{
+ FUNC_ENTRY ( ctx );
+
+ uint32_t align_ids_idx;
+ rc_t rc = VCursorAddColumn ( ref_curs, & align_ids_idx, "%s_IDS", align_name );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorAddColumn - failed to add column '%s_IDS' to REFERENCE cursor", align_name );
+ else
+ {
+ uint32_t ref_id_idx;
+ rc = VCursorAddColumn ( align_curs, & ref_id_idx, "REF_ID" );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorAddColumn - failed to add column 'REF_ID' to %s cursor", align_name );
+ else
+ {
+ rc = VCursorOpen ( ref_curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorOpen - failed to open cursor on REFERENCE table" );
+ else
+ {
+ rc = VCursorOpen ( align_curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorOpen - failed to open cursor on %s table", align_name );
+ else
+ {
+ rc = VCursorSetRowId ( ref_curs, 1 );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorSetRowId - failed to set row-id on REFERENCE cursor" );
+ else
+ {
+ rc = VCursorSetRowId ( align_curs, 1 );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VCursorSetRowId - failed to set row-id on %s cursor", align_name );
+ else
+ {
+ CrossCheckRefAlignCols ( ctx, ref_curs, align_ids_idx, align_curs, ref_id_idx, align_name );
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignTbl
+ * checks REFERENCE.<name>_IDS for properly sorted form
+ * runs a cross-check of REFERENCE.<name>_IDS against <name>.REF_ID
+ */
+static
+void CrossCheckRefAlignTblInt ( const ctx_t *ctx,
+ const VTable *ref_tbl, const VTable *align_tbl, const char *align_name )
+{
+ FUNC_ENTRY ( ctx );
+
+ rc_t rc;
+ const VCursor *ref_curs;
+
+ rc = VTableCreateCursorRead ( ref_tbl, & ref_curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VTableCreateCursorRead - failed to open cursor on REFERENCE table" );
+ else
+ {
+ const VCursor *align_curs;
+ rc = VTableCreateCursorRead ( align_tbl, & align_curs );
+ if ( rc != 0 )
+ INTERNAL_ERROR ( rc, "VTableCreateCursorRead - failed to open cursor on %s table", align_name );
+ else
+ {
+ CrossCheckRefAlignCurs ( ctx, ref_curs, align_curs, align_name );
+
+ VCursorRelease ( align_curs );
+ }
+
+ VCursorRelease ( ref_curs );
+ }
+}
+
+#if USE_BGTHREAD
+
+typedef struct CrossCheckRefAlignTblData CrossCheckRefAlignTblData;
+struct CrossCheckRefAlignTblData
+{
+ Caps caps;
+ const VTable *ref_tbl, *align_tbl;
+ char align_name [ 1 ];
+};
+
+static
+rc_t CC CrossCheckRefAlignTblRun ( const KThread *self, void *data )
+{
+ CrossCheckRefAlignTblData *pb = data;
+
+ DECLARE_CTX_INFO ();
+ ctx_t thread_ctx = { & pb -> caps, NULL, & ctx_info };
+ const ctx_t *ctx = & thread_ctx;
+
+ STATUS ( 2, "running consistency-check on background thread" );
+
+ CrossCheckRefAlignTblInt ( ctx, pb -> ref_tbl, pb -> align_tbl, pb -> align_name );
+
+ STATUS ( 2, "finished consistency-check on background thread" );
+
+ VTableRelease ( pb -> align_tbl );
+ VTableRelease ( pb -> ref_tbl );
+ CapsWhack ( & pb -> caps, ctx );
+
+ return ctx -> rc;
+}
+
+#endif
+
+void CrossCheckRefAlignTbl ( const ctx_t *ctx,
+ const VTable *ref_tbl, const VTable *align_tbl, const char *align_name )
+{
+ FUNC_ENTRY ( ctx );
+
+#if USE_BGTHREAD
+ size_t name_len;
+ CrossCheckRefAlignTblData *pb;
+#endif
+
+ STATUS ( 2, "consistency-check on join indices between REFERENCE and %s tables", align_name );
+
+#if USE_BGTHREAD
+ name_len = strlen ( align_name );
+ TRY ( pb = MemAlloc ( ctx, sizeof * pb + name_len, false ) )
+ {
+ TRY ( CapsInit ( & pb -> caps, ctx ) )
+ {
+ rc_t rc = VTableAddRef ( pb -> ref_tbl = ref_tbl );
+ if ( rc != 0 )
+ ERROR ( rc, "VTableAddRef failed on REFERENCE table" );
+ else
+ {
+ rc = VTableAddRef ( pb -> align_tbl = align_tbl );
+ if ( rc != 0 )
+ ERROR ( rc, "VTableAddRef failed on %s table", align_name );
+ else
+ {
+ KThread *t;
+
+ strcpy ( pb -> align_name, align_name );
+
+ rc = KThreadMake ( & t, CrossCheckRefAlignTblRun, pb );
+ if ( rc == 0 )
+ {
+ return;
+ }
+
+ VTableRelease ( pb -> align_tbl );
+ }
+
+ VTableRelease ( pb -> ref_tbl );
+ }
+
+ CapsWhack ( & pb -> caps, ctx );
+ }
+
+ MemFree ( ctx, pb, sizeof * pb + name_len );
+ }
+#else
+ CrossCheckRefAlignTblInt ( ctx, ref_tbl, align_tbl, align_name );
+#endif
+}
diff --git a/tools/sra-sort/xcheck.h b/tools/sra-sort/xcheck.h
new file mode 100644
index 0000000..adf44c5
--- /dev/null
+++ b/tools/sra-sort/xcheck.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_xcheck_
+#define _h_sra_sort_xcheck_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VTable;
+
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignTbl
+ * checks REFERENCE.<name>_IDS for properly sorted form
+ * runs a cross-check of REFERENCE.<name>_IDS against <name>.REF_ID
+ */
+void CrossCheckRefAlignTbl ( const ctx_t *ctx,
+ struct VTable const *ref_tbl, struct VTable const *align_tbl, const char *align_name );
+
+#endif
diff --git a/tools/sra-stat/Makefile b/tools/sra-stat/Makefile
index 68e40c5..db91c9c 100644
--- a/tools/sra-stat/Makefile
+++ b/tools/sra-stat/Makefile
@@ -42,15 +42,13 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# std
@@ -61,23 +59,22 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
-# clean
+# vers-includes
#
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
#-------------------------------------------------------------------------------
-# tag
+# clean
#
-tag: \
- $(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
#-------------------------------------------------------------------------------
-# sra-dump
-# vdb table copy tool
+# sra-stat
+# sra statistics
#
SRASTAT_SRC = \
sra-stat
@@ -89,25 +86,18 @@ SRASTAT_LIB = \
-lkapp \
-dalign-reader \
-lsradb \
- -ssrapath \
- -ssraschema \
- -daxf \
- -dsraxf \
- -dvxf \
+ $(READONLY_SCHEMA_LIBS) \
-lvdb \
-lkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
-dksrch \
+ -lkproc \
-lklib \
- -ldl \
- -lz \
- -lbz2 \
-lm
$(BINDIR)/sra-stat: $(SRASTAT_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRASTAT_LIB)
-
-sradump_tag:
- @ $(TOP)/build/tag-module.sh $(MODULE) sradump $(SRASTAT_OBJ)
-
diff --git a/tools/sra-stat/sra-stat.c b/tools/sra-stat/sra-stat.c
index 026fb1b..14322ce 100644
--- a/tools/sra-stat/sra-stat.c
+++ b/tools/sra-stat/sra-stat.c
@@ -28,10 +28,15 @@
#include <kapp/main.h>
-#include <sra/sradb.h>
+#include <sra/wsradb.h>
#include <sra/sradb-priv.h>
#include <sra/types.h>
+#include <vdb/dependencies.h> /* VDBDependencies */
+#include <vdb/database.h> /* VDatabaseRelease */
+#include <vdb/table.h> /* VTableRelease */
+#include <vdb/cursor.h> /* VCursor */
+
#include <kdb/database.h> /* KDatabase */
#include <kdb/table.h>
#include <kdb/meta.h> /* KMetadata */
@@ -39,19 +44,28 @@
#include <kdb/kdb-priv.h>
#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <klib/sort.h> /* ksort */
+#include <klib/checksum.h>
#include <klib/container.h>
#include <klib/namelist.h>
+#include <klib/printf.h>
#include <klib/log.h>
#include <klib/out.h>
#include <klib/debug.h> /* DBGMSG */
#include <klib/rc.h>
+#include <os-native.h> /* strtok_r on Windows */
+
#include <assert.h>
+#include <math.h> /* sqrt */
#include <stdlib.h>
#include <string.h>
#include <time.h>
+#include <stdio.h> /* stderr */
+
#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
@@ -60,23 +74,677 @@
#define DISP_RC_Read(rc, name, spot, msg) (void)((rc == 0) ? 0 : \
PLOGERR(klogInt, (klogInt, rc, "column $(name), spot $(spot): $(msg)", \
- "name=%s,spot=%lu,msg=%s", name, msg)))
+ "name=%s,spot=%lu,msg=%s", name, spot, msg)))
-#define DESTRUCT(type, obj) do { rc_t rc2 = type##Release(obj); \
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
#define MAX_NREADS 2*1024
+
+/*********** XMLLogger_Encode : copied from kapp/log-xml.c (-lload) ***********/
+
+static
+rc_t CC XMLLogger_Encode(const char* src,
+ char* aDst, size_t dst_sz, size_t *num_writ)
+{
+ rc_t rc = 0;
+ size_t bytes;
+ const char* p;
+ char* dst = aDst;
+
+ assert(src != NULL && num_writ != NULL);
+
+ *num_writ = 0;
+ if( *src == '\0' ) {
+ *dst = *src;
+ } else {
+ do {
+ switch(*src) {
+ case '\'':
+ bytes = 6;
+ p = "'";
+ break;
+ case '"':
+ bytes = 6;
+ p = """;
+ break;
+ case '&':
+ bytes = 5;
+ p = "&";
+ break;
+ case '<':
+ bytes = 4;
+ p = "<";
+ break;
+ case '>':
+ bytes = 4;
+ p = ">";
+ break;
+ default:
+ bytes = 1;
+ p = src;
+ break;
+ }
+ if( (*num_writ + bytes) > dst_sz ) {
+ rc = RC(rcExe, rcLog, rcEncoding, rcBuffer, rcInsufficient);
+ } else {
+ memcpy(dst, p, bytes);
+ *num_writ = *num_writ + bytes;
+ dst += bytes;
+ }
+ } while(rc == 0 && *++src != '\0');
+ if (rc == 0 && *src == '\0' && ((*num_writ + bytes) <= dst_sz)) {
+ *dst = *src;
+ }
+ }
+ return rc;
+}
+
+/*********** XMLLogger_Encode : copied from kapp/log-xml.c (-lload) ***********/
+
+typedef struct BAM_HEADER_RG { /* @RG: Read group. */
+ char* ID; /* Read group identifier. */
+ char* LB; /* Library. */
+ char* SM; /* Sample. */
+} BAM_HEADER_RG;
+static
+rc_t BAM_HEADER_RG_copy(BAM_HEADER_RG* dest, const BAM_HEADER_RG* src)
+{
+ assert(dest && !dest->ID && !dest->LB && !dest->SM
+ && src && src ->ID && src ->LB && src ->SM);
+ dest->ID = strdup(src->ID);
+ dest->LB = strdup(src->LB);
+ dest->SM = strdup(src->SM);
+ if (!dest->ID || !dest->LB || !dest->SM) {
+ return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+ return 0;
+}
+static void BAM_HEADER_RG_free(BAM_HEADER_RG* rg) {
+ assert(rg);
+ free(rg->ID);
+ free(rg->LB);
+ free(rg->SM);
+ rg->ID = rg->LB = rg->SM = NULL;
+}
+static void BAM_HEADER_RG_print_xml(const BAM_HEADER_RG* rg) {
+ rc_t rc = 0;
+ char library[1024] = "";
+ char sample[1024] = "";
+ char* l = library;
+ char* s = sample;
+ size_t num_writ = 0;
+ assert(rg);
+ if (rg->LB) {
+ rc = XMLLogger_Encode(rg->LB, library, sizeof library, &num_writ);
+ if (rc) {
+ l = rg->LB;
+ PLOGMSG(klogWarn, (klogWarn, "Library value is too long: "
+ "XML-safe conversion was disabled for @RG\tID:$(ID)\tLB:$(LB)"
+ "ID=%s,LB=%s", rg->ID, rg->LB));
+ }
+ OUTMSG((" library=\"%s\"", l ? l : ""));
+ }
+ if (rg->SM) {
+ rc = XMLLogger_Encode(rg->SM, sample, sizeof sample, &num_writ);
+ if (rc) {
+ s = rg->SM;
+ PLOGMSG(klogWarn, (klogWarn, "Sample value is too long: "
+ "XML-safe conversion was disabled for @RG\tID:$(ID)\tSM:$(SM)"
+ "ID=%s,SM=%s", rg->ID, rg->SM));
+ }
+ OUTMSG((" sample=\"%s\"" , s ? s : ""));
+ }
+}
+typedef struct SraStats {
+ BSTNode n;
+ char spot_group[1024]; /* SPOT_GROUP Column */
+ uint64_t spot_count; /*** spot count ***/
+ uint64_t spot_count_mates; /*** spots with mates ***/
+ uint64_t bio_len; /** biological len (BIO_BASE_COUNT) **/
+ uint64_t bio_len_mates; /** biological len when mates are present**/
+ uint64_t total_len; /** total len (BASE_COUNT) **/
+ uint64_t bad_spot_count; /** number of spots flagged with rd_filter=2 **/
+ uint64_t bad_bio_len; /** biological length of bad spots ***/
+ uint64_t filtered_spot_count; /* number of spots flagged with rd_filter=2 */
+ uint64_t filtered_bio_len; /** biological length of filtered spots **/
+ uint64_t total_cmp_len; /* CMP_READ : compressed */
+ BAM_HEADER_RG BAM_HEADER;
+} SraStats;
+typedef struct Statistics { /* READ_LEN columnn */
+ /* average READ_LEN value */
+ /* READ_LEN standard deviation. Is calculated just when requested. */
+ /* running (continuous) standard deviation */
+
+ int64_t n; /* number of values */
+ double a; /* the mean value */
+ double q; /* Qi = Q[i-1] + (Xi - A[i-1])(Xi - Ai) */
+
+ bool variable; /* variable or fixed value */
+ double prev_val;
+} Statistics;
+typedef struct Statistics2 {
+ int n;
+ double average;
+ double diff_sq_sum;
+} Statistics2;
+static
+void Statistics2Init(Statistics2* self, double sum, spotid_t count) {
+ assert(self);
+
+ if (count) {
+ self->average = sum / count;
+ }
+}
+
+static void Statistics2Add(Statistics2* self, double value) {
+ double diff = 0;
+
+ assert(self);
+
+ ++self->n;
+
+ diff = value - self->average;
+ self->diff_sq_sum += diff * diff;
+}
+
+static
+void Statistics2Print(const Statistics2* selfs,
+ uint32_t nreads, const char* indent,
+
+ /* the same as in <Statistics: just to make <Statistics> and <Statistics2>
+ look the same */
+ uint64_t spot_count)
+{
+ int i = 0;
+
+ if (nreads) {
+ assert(selfs && indent);
+ }
+
+ OUTMSG(("%s<Statistics2 nreads=\"%u\" nspots=\"%lu\">\n",
+ indent, nreads, spot_count));
+
+ for (i = 0; i < nreads; ++i) {
+ double dev = 0;
+ const Statistics2* stats = selfs + i;
+ double avr = stats->average;
+ if (stats->n > 0) {
+ dev = sqrt(stats->diff_sq_sum / stats->n);
+ }
+
+ OUTMSG(("%s "
+ "<Read index=\"%d\" count=\"%ld\" average=\"%f\" stdev=\"%f\"/>\n",
+ indent, i, stats->n, avr, dev));
+ }
+
+ OUTMSG(("%s</Statistics2>\n", indent));
+}
+
+typedef struct {
+ uint64_t cnt[5];
+ bool CS_NATIVE;
+ const SRAColumn *col;
+ bool finalized;
+} Bases;
+static
+void BasesInit(Bases *self, const SRATable *tbl)
+{
+ rc_t rc = 0;
+ const char name[] = "CS_NATIVE";
+ const SRAColumn *col = NULL;
+ const void *base = NULL;
+ bitsz_t boff = ~0;
+ bitsz_t row_bits = ~0;
+
+ assert(self);
+ memset(self, 0, sizeof *self);
+ self->CS_NATIVE = true;
+
+ rc = SRATableOpenColumnRead(tbl, &col, name, NULL);
+ if (rc != 0) {
+ PLOGERR(klogInt, (klogErr, rc,
+ "while SRATableOpenColumnRead($(name))", "name=%s", name));
+ }
+
+ if (rc == 0) {
+ rc = SRAColumnRead(col, 1, &base, &boff, &row_bits);
+ if (rc != 0) {
+ PLOGERR(klogInt, (klogErr, rc,
+ "while SRAColumnRead($(name))", "name=%s", name));
+ }
+ if (boff != 0 || row_bits != 8) {
+ rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+ PLOGERR(klogInt, (klogErr, rc,
+ "invalid boff or row_bits while SRAColumnRead($(name))",
+ "name=%s", name));
+ }
+ }
+
+ if (rc == 0) {
+ self->CS_NATIVE = *((bool*)base);
+ }
+
+ RELEASE(SRAColumn, col);
+
+ {
+ const char *name = self->CS_NATIVE ? "CSREAD" : "READ";
+ const char *datatype
+ = self->CS_NATIVE ? "INSDC:x2cs:bin" : "INSDC:x2na:bin";
+ rc = SRATableOpenColumnRead(tbl, &self->col, name, datatype);
+ if (rc != 0) {
+ PLOGERR(klogInt, (klogErr, rc,
+ "while SRATableOpenColumnRead($(name), $(type))",
+ "name=%s,type=%s", name, datatype));
+ }
+ }
+}
+
+static
+void BasesFinalize(Bases *self)
+{
+ assert(self);
+
+ if (self->col == NULL) {
+ LOGMSG(klogInfo, "Bases statistics will not be printed : "
+ "READ column was not opened during BasesFinalize()");
+ return;
+ }
+
+ self->finalized = true;
+}
+
+static
+rc_t BasesRelease(Bases *self)
+{
+ rc_t rc = 0;
+
+ assert(self);
+
+ RELEASE(SRAColumn, self->col);
+
+ return rc;
+}
+
+static
+void BasesAdd(Bases *self, spotid_t spotid)
+{
+ rc_t rc = 0;
+ const void *base = NULL;
+ bitsz_t boff = ~0;
+ bitsz_t row_bits = ~0;
+ bitsz_t i = ~0;
+ const unsigned char *bases = NULL;
+
+ assert(self);
+
+ if (self->col == NULL) {
+ return;
+ }
+
+ rc = SRAColumnRead(self->col, spotid, &base, &boff, &row_bits);
+ if (rc != 0) {
+ PLOGERR(klogInt, (klogErr, rc,
+ "while SRAColumnRead(READ, $(type))",
+ "type=%s", self->CS_NATIVE ? "CS_NATIVE" : "not CS_NATIVE"));
+ BasesRelease(self);
+ return;
+ }
+
+ if ((row_bits % 8) != 0) {
+ rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+ PLOGERR(klogInt, (klogErr, rc, "Invalid row_bits '$(row_bits) "
+ "while SRAColumnRead(READ, $(type), spotid=$(spotid))",
+ "row_bits=%lu,type=%s,spotid=%lu",
+ row_bits, self->CS_NATIVE ? "CS_NATIVE" : "not CS_NATIVE", spotid));
+ BasesRelease(self);
+ return;
+ }
+
+ row_bits /= 8;
+ bases = base;
+ for (i = 0; i < row_bits; ++i) {
+ unsigned char base = bases[i];
+ if (base > 4) {
+ rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+ PLOGERR(klogInt, (klogErr, rc,
+ "Invalid READ column value '$(base) "
+ "while SRAColumnRead($(type), spotid=$(spotid), index=$(i))",
+ "base=%d,type=%s,spotid=%lu,index=%lu",
+ base, self->CS_NATIVE ? "CS_NATIVE" : "not CS_NATIVE",
+ spotid, i));
+ BasesRelease(self);
+ return;
+ }
+ ++self->cnt[base];
+ }
+}
+
+static
+void BasesPrint(const Bases *self,
+ uint64_t base_count, const char* indent)
+{
+ const char tag[] = "Bases";
+ const char *name = NULL;
+ int i = ~0;
+
+ assert(self);
+
+ if (!self->finalized) {
+ LOGMSG(klogInfo, "Bases statistics will not be printed : "
+ "Bases object was not finalized during BasesPrint()");
+ return;
+ }
+
+ if (self->cnt[0] + self->cnt[1] + self->cnt[2] +
+ self->cnt[3] + self->cnt[4] != base_count)
+ {
+ rc_t rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+ LOGERR(klogErr, rc,
+ "BASE_COUNT MISMATCH DURING BASES COUNT CALCULATION");
+ return;
+ }
+
+ name = self->CS_NATIVE ? "0123." : "ACGTN";
+
+ OUTMSG(("%s<%s cs_native=\"%s\" count=\"%lu\">\n",
+ indent, tag, self->CS_NATIVE ? "true" : "false", base_count));
+ for (i = 0; i < 5; ++i) {
+ OUTMSG(("%s <Base value=\"%c\" count=\"%lu\"/>\n",
+ indent, name[i], self->cnt[i]));
+ }
+ OUTMSG(("%s</%s>\n", indent, tag));
+}
+
+typedef struct {
+ uint64_t spot_count;
+ uint64_t spot_count_mates;
+ uint64_t BIO_BASE_COUNT; /* bio_len */
+ uint64_t bio_len_mates;
+ uint64_t BASE_COUNT; /* total_len */
+ uint64_t bad_spot_count;
+ uint64_t bad_bio_len;
+ uint64_t filtered_spot_count;
+ uint64_t filtered_bio_len;
+ uint64_t total_cmp_len; /* CMP_READ : compressed */
+
+ bool variable_nreads;
+ uint32_t nreads; /* if (nreads == 0) then (nreads is variable) */
+ Statistics * stats ; /* nreads elements */
+ Statistics2* stats2; /* nreads elements */
+
+ Bases bases_count;
+} SraStatsTotal;
+static
+rc_t SraStatsTotalMakeStatistics(SraStatsTotal* self, uint32_t nreads)
+{
+ assert(self);
+
+ if (nreads == 0) {
+ return 0;
+ }
+
+ assert(self->stats == NULL);
+ self->stats = calloc(nreads, sizeof *self->stats);
+ if (self->stats == NULL) {
+ return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+
+ assert(self->stats2 == NULL);
+ self->stats2 = calloc(nreads, sizeof *self->stats2);
+ if (self->stats2 == NULL) {
+ free(self->stats);
+ self->stats = NULL;
+ return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+
+ self->nreads = nreads;
+
+ return 0;
+}
+
+static
+void SraStatsTotalStatistics2Init(SraStatsTotal* self,
+ int nreads, uint64_t* sums, uint64_t* count)
+{
+ int i = 0;
+ assert(self);
+ if (nreads) {
+ assert(sums);
+ }
+ for (i = 0; i < nreads; ++i) {
+ uint64_t sum = sums[i];
+ Statistics2* stats = self->stats2 + i;
+ assert(stats);
+ Statistics2Init(stats, sum, count[i]);
+ }
+}
+
+static rc_t SraStatsTotalFree(SraStatsTotal* self) {
+ assert(self);
+
+ free(self->stats);
+ self->stats = NULL;
+
+ free(self->stats2);
+ self->stats2 = NULL;
+
+ BasesRelease(&self->bases_count);
+
+ self->nreads = 0;
+
+ return 0;
+}
+
+static void StatisticsAdd(Statistics* self, double value) {
+ double a_1 = 0;
+
+ /* http://en.wikipedia.org/wiki/Stdev#Rapid_calculation_methods */
+
+ assert(self);
+
+ a_1 = self->a;
+
+ if (self->n++ == 0) {
+ self->prev_val = value;
+ }
+ else if (self->prev_val != value) {
+ self->variable = true;
+ }
+
+ self->a += (value - a_1) / self->n;
+ self->q += ((double)value - a_1) * ((double)value - self->a);
+}
+
+static double StatisticsAverage(const Statistics* self) {
+ assert(self);
+
+ return self->a;
+}
+
+static double StatisticsStdev(const Statistics* self) {
+ assert(self);
+
+ if (self->n == 0) {
+ return 0;
+ }
+
+ return sqrt(self->q / self->n);
+}
+
+static
+void SraStatsTotalAdd(SraStatsTotal* self,
+ uint32_t* values, uint32_t nreads)
+{
+ int i = ~0;
+
+ assert(self && values);
+
+ if (self->nreads != nreads) {
+ self->variable_nreads = true;
+ }
+
+ if (self->variable_nreads) {
+ return;
+ }
+
+ for (i = 0; i < nreads; ++i) {
+ uint32_t value = values[i];
+ if (value > 0) {
+ Statistics* stats = self->stats + i;
+ assert(stats);
+
+ StatisticsAdd(stats, value);
+ }
+ }
+}
+
+static
+void SraStatsTotalAdd2(SraStatsTotal* self, uint32_t* values) {
+ int i = 0;
+
+ assert(self && values);
+
+ for (i = 0; i < self->nreads; ++i) {
+ uint32_t value = values[i];
+ if (value > 0) {
+ Statistics2* stats = self->stats2 + i;
+ assert(stats);
+
+ Statistics2Add(stats, value);
+ }
+ }
+}
+
+static double s_Round(double X) { return floor(X + 0.5); }
+
+static
+void print_double_or_int(const char* name, double val, bool variable) {
+ double rnd = s_Round(val);
+ assert(name);
+ if (variable) {
+ OUTMSG((" %s=\"%.2f\"", name, val));
+ }
+ else {
+ OUTMSG((" %s=\"%d\"", name, (int)rnd));
+ }
+}
+
+static
+void StatisticsPrint(const Statistics* selfs,
+ uint32_t nreads, const char* indent)
+{
+ int i = ~0;
+
+ if (nreads) {
+ assert(selfs && indent);
+ }
+
+ for (i = 0; i < nreads; ++i) {
+ const Statistics* stats = selfs + i;
+ double avr = StatisticsAverage(stats);
+ double dev = StatisticsStdev(stats);
+
+ OUTMSG(("%s <Read index=\"%d\"", indent, i));
+ OUTMSG((" count=\"%ld\"", stats->n, i));
+ print_double_or_int("average", avr, stats->variable);
+ print_double_or_int("stdev" , dev, stats->variable);
+ OUTMSG(("/>\n"));
+ }
+}
+static rc_t StatisticsDiff(const Statistics* ss,
+ const Statistics2* ss2, uint32_t nreads)
+{
+ rc_t rc = 0;
+
+ int i = ~0;
+
+ assert(ss && ss2);
+
+ for (i = 0; i < nreads; ++i) {
+ const Statistics * s = ss + i;
+ const Statistics2* s2 = ss2 + i;
+
+ double d = StatisticsStdev(s);
+ double d2 = sqrt(s2->diff_sq_sum / s2->n);
+
+ double diff = d - d2;
+ if (diff < 0) {
+ diff = -diff;
+ }
+
+ if (diff > 1e-6) {
+ /* RC(rcExe, rcTest, rcExecuting, rcTest, rcFailed); */
+ rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+ DISP_RC(rc, "While comparing calculated standard deviations");
+ }
+
+ if (s->n != s2->n) {
+ rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+ DISP_RC(rc, "While comparing read statistics counts");
+ }
+
+ diff = StatisticsAverage(s) - s2->average;
+ if (diff < 0) {
+ diff = -diff;
+ }
+ if (diff > 1e-10) {
+ /* RC(rcExe, rcTest, rcExecuting, rcTest, rcFailed); */
+ rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+ DISP_RC(rc, "While comparing calculated average");
+ }
+ }
+
+ return rc;
+}
+
+static
+rc_t SraStatsTotalPrintStatistics(const SraStatsTotal* self,
+ const char* indent, bool test)
+{
+ rc_t rc = 0;
+
+ assert(self && indent);
+
+ OUTMSG(("%s<Statistics nreads=\"", indent));
+
+ if (self->variable_nreads) {
+ OUTMSG(("variable\"/>\n"));
+ }
+ else {
+ OUTMSG(("%u\"", self->nreads));
+ OUTMSG((" nspots=\"%lu\">\n", self->spot_count));
+ StatisticsPrint(self->stats, self->nreads, indent);
+ OUTMSG(("%s</Statistics>\n", indent));
+
+ if (test) {
+ Statistics2Print(self->stats2, self->nreads, indent,
+ self->spot_count);
+ rc = StatisticsDiff(self->stats, self->stats2, self->nreads);
+ }
+ }
+
+ return rc;
+}
+
typedef struct srastat_parms {
const char* table_path;
bool xml; /* output format (txt or xml) */
bool printMeta;
bool quick; /* quick mode: stats from meta */
+ bool skip_members; /* not to print spot_group statistics */
+ bool skip_alignment; /* not to print alignment info */
+ bool print_arcinfo;
+ bool statistics; /* calculate average and stdev */
+ bool test; /* test stdev */
spotid_t start, stop;
bool hasSPOT_GROUP;
bool variableReadLength;
+
+ SraStatsTotal total; /* is used in srastat_print */
} srastat_parms;
typedef struct SraStatsMeta {
bool found;
@@ -85,6 +753,7 @@ typedef struct SraStatsMeta {
uint64_t CMP_BASE_COUNT; /* compressed base count when present */
uint64_t spot_count;
char* spot_group; /* optional */
+ BAM_HEADER_RG BAM_HEADER;
} SraStatsMeta;
typedef struct MetaDataStats {
bool found;
@@ -92,26 +761,6 @@ typedef struct MetaDataStats {
uint32_t spotGroupN;
SraStatsMeta *spotGroup;
} MetaDataStats;
-typedef struct SraStats {
- BSTNode n;
- char spot_group[1024]; /* SPOT_GROUP Column */
- uint64_t spot_count; /*** spot count ***/
- uint64_t spot_count_mates; /*** spots with mates ***/
- uint64_t bio_len; /** biological len **/
- uint64_t bio_len_mates; /** biological len when mates are present**/
- uint64_t total_len; /** total len **/
- uint64_t bad_spot_count; /** number of spots flagged with rd_filter=2 **/
- uint64_t bad_bio_len; /** biological length of bad spots ***/
- uint64_t filtered_spot_count; /* number of spots flagged with rd_filter=2 */
- uint64_t filtered_bio_len; /** biological length of filtered spots **/
- uint64_t total_cmp_len; /* CMP_READ : compressed */
-} SraStats;
-typedef struct SraStatsTotal {
- uint64_t BASE_COUNT;
- uint64_t BIO_BASE_COUNT;
- uint64_t spot_count;
- uint64_t total_cmp_len; /* CMP_READ : compressed */
-} SraStatsTotal;
typedef struct SraSizeStats { uint64_t size; } SraSizeStats;
typedef struct Formatter {
char name[256];
@@ -129,15 +778,674 @@ typedef struct SraMeta {
Formatter formatter;
Loader loader;
} SraMeta;
+typedef struct ArcInfo_struct {
+ KTime_t timestamp;
+ struct {
+ const char* tag;
+ uint64_t size;
+ char md5[32 + 1];
+ } i[2];
+} ArcInfo;
+typedef struct Quality {
+ uint32_t value;
+ uint64_t count;
+} Quality;
+typedef struct QualityStats {
+ Quality* QUALITY;
+ size_t allocated;
+ size_t used;
+} QualityStats;
+typedef enum EMetaState {
+ eMSNotFound,
+ eMSFound
+} EMetaState;
+typedef struct Count {
+ EMetaState state;
+ uint64_t value;
+} Count;
+typedef struct Counts {
+ char* tableName;
+ EMetaState tableState;
+ EMetaState metaState;
+ Count BASE_COUNT;
+ Count SPOT_COUNT;
+} Counts;
+typedef struct TableCounts {
+ EMetaState state;
+ Counts* count;
+ size_t allocated;
+ size_t used;
+} TableCounts;
+typedef struct Ctx {
+ const BSTree* tr;
+ const MetaDataStats* meta;
+ const SraMeta* info;
+ const SraSizeStats* sizes;
+ const ArcInfo* arc_info;
+ srastat_parms* pb;
+ SraStatsTotal* total;
+ const VDatabase* db;
+ QualityStats quality;
+ TableCounts tables;
+} Ctx;
+
+typedef rc_t (CC * RG_callback)(const BAM_HEADER_RG* rg, const void* data);
+
+static
+rc_t CC meta_RG_callback(const BAM_HEADER_RG* rg, const void* data)
+{
+ rc_t rc = 0;
+
+ const MetaDataStats* meta = data;
+
+ int i = 0;
+ bool found = false;
+
+ assert(rg && meta && rg->ID);
+
+ for (i = 0; i < meta->spotGroupN && rc == 0; ++i) {
+ SraStatsMeta* ss = &meta->spotGroup[i];
+ const char* spot_group = ss->spot_group;
+
+ assert(spot_group);
+ if (strcmp(spot_group, rg->ID) == 0) {
+ rc = BAM_HEADER_RG_copy(&ss->BAM_HEADER, rg);
+ found = true;
+ break;
+ }
+ }
+
+ if (rc == 0 && !found) {
+ /* There could be Read groups that are present in the BAM_HEADER
+ but missed in the csra. We was just ignore them. */
+ }
+
+ return rc;
+}
+
+static
+int CC srastats_cmp ( const void *item, const BSTNode *n )
+{
+ const char *sg = item;
+ const SraStats *ss = ( const SraStats* ) n;
+
+ return strcmp(sg,ss->spot_group);
+}
+
+static
+rc_t CC tree_RG_callback(const BAM_HEADER_RG* rg, const void* data)
+{
+ rc_t rc = 0;
+
+ const BSTree* tr = data;
+ SraStats* ss = NULL;
+
+ assert(rg && tr && rg->ID);
+
+ ss = (SraStats*) BSTreeFind(tr, rg->ID, srastats_cmp);
+ if (ss == NULL) {
+ /* There could be Read groups that are present in the BAM_HEADER
+ but missed in the csra. We was just ignore them. */
+ }
+ else {
+ rc = BAM_HEADER_RG_copy(&ss->BAM_HEADER, rg);
+ }
+
+ return rc;
+}
+
+static
+int CC QualityCmp(const void* s1, const void* s2, void *data) {
+ const Quality* q1 = s1;
+ const Quality* q2 = s2;
+ assert(q1 && q2);
+ return q1->value < q2->value ? -1 : q1->value == q2->value ? 0 : 1;
+}
+
+static
+int CC CountsCmp(const void* v1, const void* v2, void *data) {
+ const Counts* e1 = v1;
+ const Counts* e2 = v2;
+ assert(e1 && e2 && e1->tableName && e2->tableName);
+ return strcmp(e1->tableName, e2->tableName);
+}
+
+static
+rc_t QualityParse(Quality* self, const KMDataNode* node, const char* name)
+{
+ rc_t rc = 0;
+ const char start[] = "PHRED_";
+ int i = strlen(start);
+
+ assert(self && name);
+
+ if (strlen(name) <= strlen(start)) {
+ rc = RC(rcExe, rcXmlDoc, rcParsing, rcName, rcInvalid);
+ PLOGERR(klogInt, (klogErr, rc,
+ "Bad node name: STATS/QUALITY/$(name)", "name=%s", name));
+ return rc;
+ }
+
+ self->value = 0;
+ for (; i < strlen(name); ++i) {
+ if (name[i] < '0' || name[i] > '9') {
+ rc_t rc = RC(rcExe, rcXmlDoc, rcParsing, rcName, rcInvalid);
+ PLOGERR(klogInt, (klogErr, rc,
+ "Bad node name: STATS/QUALITY/$(name)", "name=%s", name));
+ return rc;
+ }
+ self->value = self->value * 10 + name[i] - '0';
+ }
+
+ rc = KMDataNodeReadAsU64(node, &self->count);
+ if (rc != 0) {
+ PLOGERR(klogInt, (klogErr, rc,
+ "while reading the value of STATS/QUALITY/$(name)",
+ "name=%s", name));
+ }
+
+ return rc;
+}
+
+static
+rc_t QualityStatsRead1(QualityStats* self,
+ const KMDataNode* parent, const char* name)
+{
+ const KMDataNode* node = NULL;
+
+ rc_t rc = KMDataNodeOpenNodeRead(parent, &node, name);
+ DISP_RC2(rc, name, "while calling KMDataNodeOpenNodeRead");
+
+ if (rc == 0) {
+ size_t size = 64;
+ assert(self);
+ if (self->allocated == 0) {
+ assert(self->QUALITY == NULL && self->used == 0);
+ self->QUALITY = malloc(size * sizeof *self->QUALITY);
+ if (self->QUALITY == NULL) {
+ return
+ RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+ self->allocated = size;
+ }
+ else if (self->used >= self->allocated) {
+ Quality* tmp = NULL;
+ size = self->allocated * 2;
+ tmp = realloc(self->QUALITY, size * sizeof *self->QUALITY);
+ if (tmp == NULL) {
+ return
+ RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+ self->QUALITY = tmp;
+ self->allocated = size;
+ }
+ }
+
+ if (rc == 0) {
+ assert((self->used < self->allocated) && self->QUALITY);
+ rc = QualityParse(&self->QUALITY[self->used], node, name);
+ if (rc == 0)
+ { ++self->used; }
+ }
+
+ RELEASE(KMDataNode, node);
+
+ return rc;
+}
+
+static
+rc_t QualityStatsRead(QualityStats* self, const KMetadata* meta)
+{
+ rc_t rc = 0;
+ const char name[] = "STATS/QUALITY";
+ const KMDataNode* node = NULL;
+
+ assert(self && meta);
+
+ memset(self, 0, sizeof *self);
+
+ rc = KMetadataOpenNodeRead(meta, &node, name);
+
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+ return 0;
+ }
+ DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+ }
+
+ if (rc == 0 && node) {
+ KNamelist* names = NULL;
+ rc = KMDataNodeListChild(node, &names);
+ DISP_RC2(rc, name, "while calling KMDataNodeListChild");
+ if (rc == 0) {
+ uint32_t count = 0;
+ rc = KNamelistCount(names, &count);
+ DISP_RC2(rc, name, "while calling KNamelistCount");
+ if (rc == 0) {
+ uint32_t i = ~0;
+ for (i = 0; i < count && rc == 0; ++i) {
+ const char* child = NULL;
+ rc = KNamelistGet(names, i, &child);
+ if (rc != 0) {
+ PLOGERR(klogInt, (klogInt, rc,
+ "while calling STATS/QUALITY::KNamelistGet($(idx))",
+ "idx=%i", i));
+ }
+ else
+ { rc = QualityStatsRead1(self, node, child); }
+ }
+ }
+ }
+ RELEASE(KNamelist, names);
+ }
+ RELEASE(KMDataNode, node);
+ return 0;
+}
+
+static
+void QualityStatsSort(QualityStats* self)
+{
+ assert(self);
+ ksort(self->QUALITY, self->used, sizeof *self->QUALITY, QualityCmp, NULL);
+}
+
+static
+void TableCountsSort(TableCounts* self)
+{
+ assert(self);
+ ksort(self->count, self->used, sizeof *self->count, CountsCmp, NULL);
+}
+static
+rc_t QualityStatsPrint(const QualityStats* self, const char* indent)
+{
+ size_t i = ~0;
+ const char tag[] = "QualityCount";
+ assert(self && indent);
+
+ if (self->allocated == 0)
+ { return 0; }
+
+ OUTMSG(("%s<%s>\n", indent, tag));
+ for (i = 0; i < self->used; ++i) {
+ Quality* q = &self->QUALITY[i];
+ OUTMSG((" %s<Quality value=\"%lu\" count=\"%lu\"/>\n",
+ indent, q->value, q->count));
+ }
+ OUTMSG(("%s</%s>\n", indent, tag));
+
+ return 0;
+}
+
+static
+void QualityStatsRelease(QualityStats* self)
+{
+ assert(self);
+ free(self->QUALITY);
+ memset(self, 0, sizeof *self);
+}
+
+static
+rc_t CountRead(Count* self, const char* name, const KMDataNode* parent)
+{
+ rc_t rc = 0;
+
+ const KMDataNode* node = NULL;
+
+ assert(self && parent && name);
+
+ memset(self, 0, sizeof *self);
+
+ rc = KMDataNodeOpenNodeRead(parent, &node, name);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+ rc = 0;
+ }
+ DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+ }
+ else {
+ rc = KMDataNodeReadAsU64(node, &self->value);
+ DISP_RC2(rc, name, "while calling KMDataNodeReadAsU64");
+ if (rc == 0)
+ { self->state = eMSFound; }
+ }
+
+ RELEASE(KMDataNode, node);
+
+ return rc;
+}
+
+static
+rc_t TableCountsRead1(TableCounts* self,
+ const VDatabase* db, const char* tableName)
+{
+ const VTable* tbl = NULL;
+ const KMetadata* meta = NULL;
+ const char name[] = "STATS/TABLE";
+ const KMDataNode* node = NULL;
+ rc_t rc = VDatabaseOpenTableRead(db, &tbl, tableName);
+ DISP_RC2(rc, tableName, "while calling VDatabaseOpenTableRead");
+
+ if (rc == 0) {
+ size_t size = 8;
+ assert(self);
+ if (self->allocated == 0) {
+ assert(self->count == NULL && self->used == 0);
+ self->count = malloc(size * sizeof *self->count);
+ if (self->count == NULL) {
+ return
+ RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+ self->allocated = size;
+ }
+ else if (self->used >= self->allocated) {
+ Counts* tmp = NULL;
+ size = self->allocated * 2;
+ tmp = realloc(self->count, size * sizeof *self->count);
+ if (tmp == NULL) {
+ return
+ RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+ self->count = tmp;
+ self->allocated = size;
+ }
+ }
+ if (rc == 0) {
+ assert(self->used < self->allocated && self->count);
+ }
+ if (rc == 0) {
+ rc = VTableOpenMetadataRead(tbl, &meta);
+ DISP_RC2(rc, name, "while calling VTableOpenMetadataRead");
+ }
+ if (rc == 0) {
+ rc = KMetadataOpenNodeRead(meta, &node, name);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+ rc = 0;
+ }
+ DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+ }
+ else
+ { assert(node); }
+ }
+
+ if (rc == 0 && node != NULL) {
+ Counts* c = NULL;
+ assert((self->used < self->allocated) && (self->count != NULL));
+ c = &self->count[self->used];
+ memset(c, 0, sizeof *c);
+ c->tableName = strdup(tableName);
+ if (c->tableName == NULL)
+ { return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted); }
+ c->tableState = eMSFound;
+ c->metaState = eMSFound;
+ rc = CountRead(&c->BASE_COUNT, "BASE_COUNT", node);
+
+ {
+ rc_t rc2 = CountRead(&c->SPOT_COUNT, "SPOT_COUNT", node);
+ if (rc2 != 0 && rc == 0)
+ { rc = rc2; }
+ }
+
+ if (rc == 0)
+ { ++self->used; }
+ }
+
+ RELEASE(KMDataNode, node);
+ RELEASE(KMetadata, meta);
+ RELEASE(VTable, tbl);
+
+ return rc;
+}
+
+static
+rc_t TableCountsRead(TableCounts* self, const VDatabase* db)
+{
+ rc_t rc = 0;
+ KNamelist* names = NULL;
+
+ assert(self);
+
+ memset(self, 0, sizeof *self);
+
+ if (db == NULL)
+ { return 0; }
+
+ rc = VDatabaseListTbl(db, &names);
+ DISP_RC(rc, "while calling VDatabaseListTbl");
+ if (rc == 0) {
+ uint32_t count = 0;
+ rc = KNamelistCount(names, &count);
+ DISP_RC(rc, "while calling VDatabaseListTbl::KNamelistCount");
+ if (rc == 0) {
+ uint32_t i = ~0;
+ for (i = 0; i < count && rc == 0; ++i) {
+ const char* table = NULL;
+ rc = KNamelistGet(names, i, &table);
+ if (rc != 0) {
+ PLOGERR(klogInt, (klogInt, rc,
+ "while calling VDatabaseListTbl::KNamelistGet($(idx))",
+ "idx=%i", i));
+ }
+ else
+ { rc = TableCountsRead1(self, db, table); }
+ }
+ }
+ }
+
+ RELEASE(KNamelist, names);
+
+ return rc;
+}
+
+static
+rc_t CountPrint(const Count* self, const char* indent, const char* tag)
+{
+ assert(self && indent && tag);
+ switch (self->state) {
+ case eMSNotFound:
+ OUTMSG((" %s<%s state=\"not found\"/>\n", indent, tag));
+ break;
+ case eMSFound:
+ OUTMSG((" %s<%s count=\"%lu\"/>\n", indent, tag, self->value));
+ break;
+ default:
+ assert(0);
+ OUTMSG((" %s<%s state=\"UNEXPECTED\"/>\n", indent, tag));
+ break;
+ }
+ return 0;
+}
+
+static
+rc_t TableCountsPrint(const TableCounts* self, const char* indent)
+{
+ rc_t rc = 0;
+ const char tag[] = "Databases";
+
+ assert(self && indent);
+
+ if (self->allocated == 0)
+ { return 0; }
+
+ OUTMSG(("%s<%s>\n", indent, tag));
+ {
+ size_t i = ~0;
+ const char tag[] = "Database";
+ OUTMSG((" %s<%s>\n", indent, tag));
+ for (i = 0; i < self->used; ++i) {
+ const char tag[] = "Statistics";
+ const Counts* p = &self->count[i];
+ OUTMSG((" %s<Table name=\"%s\">\n", indent, p->tableName));
+ switch (p->metaState) {
+ case eMSNotFound:
+ OUTMSG((" %s<%s source=\"meta\" state=\"not found\"/>\n",
+ indent, tag));
+ break;
+ case eMSFound: {
+ char buf[512];
+ OUTMSG((" %s<%s source=\"meta\">\n", indent, tag));
+ rc = string_printf(buf, sizeof buf, NULL, " %s", indent);
+ if (rc == 0) {
+ CountPrint(&p->SPOT_COUNT, buf, "Rows");
+ CountPrint(&p->BASE_COUNT, buf, "Elements");
+ }
+ OUTMSG((" %s</%s>\n", indent, tag));
+ break;
+ }
+ default:
+ assert(0);
+ OUTMSG((" %s<%s source=\"meta\" state=\"UNEXPECTED\"/>\n",
+ indent, tag));
+ break;
+ }
+ OUTMSG((" %s</Table>\n", indent));
+ }
+ OUTMSG((" %s</%s>\n", indent, tag));
+ }
+ OUTMSG(("%s</%s>\n", indent, tag));
+
+ return rc;
+}
+
+static
+void TableCountsRelease(TableCounts* self)
+{
+ size_t i = ~0;
+ assert(self);
+ for (i = 0; i < self->used; ++i) {
+ assert(self->count);
+ free(self->count[i].tableName);
+ self->count[i].tableName = NULL;
+ }
+ free(self->count);
+ memset(self, 0, sizeof *self);
+}
+
+static
+rc_t parse_bam_header(const VDatabase* db,
+ const RG_callback cb, const void* data)
+{
+ rc_t rc = 0;
+ const char name[] = "BAM_HEADER";
+ const KMetadata* meta = NULL;
+ const KMDataNode* node = NULL;
+ char* buffer = NULL;
+
+ if (db == NULL) {
+ return rc;
+ }
+ assert(cb);
+
+ if (rc == 0) {
+ rc = VDatabaseOpenMetadataRead(db, &meta);
+ DISP_RC(rc, "while calling VDatabaseOpenMetadataRead");
+ }
+
+ if (rc == 0) {
+ rc = KMetadataOpenNodeRead(meta, &node, name);
+ if (rc != 0) {
+ if (GetRCState(rc) == rcNotFound) {
+ return 0;
+ }
+ DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+ }
+ }
+
+ if (rc == 0) {
+ size_t num_read = 0;
+ size_t remaining = 0;
+ rc = KMDataNodeRead(node, 0, NULL, 0, &num_read, &remaining);
+ DISP_RC2(rc, name, "while calling KMDataNodeRead");
+ assert(num_read == 0);
+ if (rc == 0 && remaining > 0) {
+ buffer = malloc(remaining + 1);
+ if (buffer == NULL) {
+ rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+ }
+ else {
+ size_t size = 0;
+ rc = KMDataNodeReadCString(node, buffer, remaining + 1, &size);
+ DISP_RC2(rc, name, "while calling KMDataNodeReadCString");
+ assert(size == remaining);
+ }
+ }
+ }
+
+ if (rc == 0 && buffer) {
+ const char* token = strtok(buffer, "\n");
+ while (token) {
+ const char RG[] = "@RG\t";
+ if (strncmp(token, RG, sizeof RG - 1) == 0) {
+ const char ID[] = "\tID:";
+ const char LB[] = "\tLB:";
+ const char SM[] = "\tSM:";
+ char* id_end = NULL;
+ char* lb_end = NULL;
+ char* sm_end = NULL;
+ BAM_HEADER_RG rg;
+ memset(&rg, 0, sizeof rg);
+ rg.ID = strstr(token, ID);
+ rg.LB = strstr(token, LB);
+ rg.SM = strstr(token, "\tSM:");
+ if (rg.ID) {
+ rg.ID += sizeof ID - 1;
+ }
+ if (rg.ID) {
+ id_end = strchr(rg.ID, '\t');
+ }
+ if (rg.LB) {
+ rg.LB += sizeof LB - 1;
+ }
+ if (rg.LB) {
+ lb_end = strchr(rg.LB, '\t');
+ }
+ if (rg.SM) {
+ rg.SM += sizeof SM - 1;
+ }
+ if (rg.SM) {
+ sm_end = strchr(rg.SM, '\t');
+ }
+ if (id_end) {
+ *id_end = '\0';
+ }
+ if (lb_end) {
+ *lb_end = '\0';
+ }
+ if (sm_end) {
+ *sm_end = '\0';
+ }
+ if (rg.ID && rg.LB && rg.SM) {
+ rc = cb(&rg, data);
+ }
+ if (rc) {
+ break;
+ }
+ }
+ token = strtok(NULL, "\n");
+ }
+ }
+ free(buffer);
+ buffer = NULL;
+ RELEASE(KMDataNode, node);
+ RELEASE(KMetadata, meta);
+ return rc;
+}
+
static
void SraStatsMetaDestroy(SraStatsMeta* self)
{
if (self == NULL)
{ return; }
+ BAM_HEADER_RG_free(&self->BAM_HEADER);
free(self->spot_group);
+ self->spot_group = NULL;
}
+
static
-rc_t CC visitor(const KDirectory* dir,
+rc_t CC fileSizeVisitor(const KDirectory* dir,
uint32_t type, const char* name, void* data)
{
rc_t rc = 0;
@@ -163,7 +1471,7 @@ rc_t CC visitor(const KDirectory* dir,
}
case kptDir:
DBGMSG(DBG_APP, DBG_COND_1, ("Dir '%s'\n", name));
- rc = KDirectoryVisit(dir, false, visitor, sizes, name);
+ rc = KDirectoryVisit(dir, false, fileSizeVisitor, sizes, name);
DISP_RC2(rc, name, "while calling KDirectoryVisit");
break;
default:
@@ -176,6 +1484,46 @@ rc_t CC visitor(const KDirectory* dir,
}
static
+rc_t get_arc_info(const SRAMgr* mgr, const char* path,
+ const SRATable* tbl, ArcInfo* arc_info)
+{
+ rc_t rc = 0;
+ memset(arc_info, 0, sizeof(*arc_info));
+
+ if( (rc = SRAMgrGetTableModDate(mgr, &arc_info->timestamp, "%s", path)) == 0 ) {
+ uint32_t i;
+ for(i = 0; i < sizeof(arc_info->i) / sizeof(arc_info->i[0]); i++) {
+ const KFile* kfile;
+ arc_info->i[i].tag = i == 0 ? "sra" : "lite.sra";
+ if( (rc = SRATableMakeSingleFileArchive(tbl, &kfile, i == 1, NULL)) == 0 ) {
+ MD5State md5;
+ uint64_t pos = 0;
+ uint8_t buffer[256 * 1024];
+ size_t num_read = 0, x;
+
+ MD5StateInit(&md5);
+ do {
+ if( (rc = KFileRead(kfile, pos, buffer, sizeof(buffer), &num_read)) == 0 ) {
+ MD5StateAppend(&md5, buffer, num_read);
+ pos += num_read;
+ }
+ } while(rc == 0 && num_read != 0);
+ if( rc == 0 && (rc = KFileSize(kfile, &arc_info->i[i].size)) == 0 ) {
+ uint8_t digest[16];
+ MD5StateFinish(&md5, digest);
+ for(pos = 0, x = 0; rc == 0 && pos < sizeof(digest); pos++) {
+ rc = string_printf(&arc_info->i[i].md5[x], sizeof(arc_info->i[i].md5) - x, &num_read, "%02x", digest[pos]);
+ x += num_read;
+ }
+ }
+ KFileRelease(kfile);
+ }
+ }
+ }
+ return rc;
+}
+
+static
rc_t get_size(const SRATable* tbl, SraSizeStats* sizes)
{
rc_t rc = 0;
@@ -202,7 +1550,7 @@ rc_t get_size(const SRATable* tbl, SraSizeStats* sizes)
if (par == NULL)
{ break; }
else {
- DESTRUCT(KDatabase, kDb);
+ RELEASE(KDatabase, kDb);
kDb = par;
}
}
@@ -220,13 +1568,13 @@ rc_t get_size(const SRATable* tbl, SraSizeStats* sizes)
memset(sizes, 0, sizeof *sizes);
if (rc == 0) {
- rc = KDirectoryVisit(dir, false, visitor, sizes, NULL);
+ rc = KDirectoryVisit(dir, false, fileSizeVisitor, sizes, NULL);
DISP_RC(rc, "while calling KDirectoryVisit");
}
- DESTRUCT(KDirectory, dir);
- DESTRUCT(KTable, kTbl);
- DESTRUCT(KDatabase, kDb);
+ RELEASE(KDirectory, dir);
+ RELEASE(KTable, kTbl);
+ RELEASE(KDatabase, kDb);
return rc;
}
@@ -237,19 +1585,24 @@ rc_t readTxtAttr(const KMDataNode* self, const char* name, const char* attrName,
{
rc_t rc = 0;
size_t num_read = 0;
+
if (self == NULL) {
rc = RC(rcExe, rcMetadata, rcReading, rcSelf, rcNull);
return rc;
}
+
assert(self && name && attrName && buf && buf_size);
+
rc = KMDataNodeReadAttr(self, attrName, buf, buf_size, &num_read);
if (rc != 0) {
PLOGERR(klogErr, (klogErr, rc, "Cannot read '$(name)@$(attr)'",
"name=%s,attr=%s", name, attrName));
}
else { DBGMSG(DBG_APP, DBG_COND_1, ("%s@%s = %s\n", name, attrName, buf)); }
+
return rc;
}
+
static
rc_t get_load_info(const KMetadata* meta, SraMeta* info)
{
@@ -259,6 +1612,7 @@ rc_t get_load_info(const KMetadata* meta, SraMeta* info)
memset(info, 0, sizeof *info);
info->metaVersion = 99;
info->tblVersion = -1;
+
if (rc == 0) {
rc = KMetadataVersion(meta, &info->metaVersion);
DISP_RC(rc, "While calling KMetadataVersion");
@@ -323,9 +1677,10 @@ rc_t get_load_info(const KMetadata* meta, SraMeta* info)
}
}
}
+
if (rc == 0) {
const char name[] = "SOFTWARE/formatter";
- DESTRUCT(KMDataNode, node);
+ RELEASE(KMDataNode, node);
rc = KMetadataOpenNodeRead(meta, &node, name);
if (rc != 0) {
if (GetRCState(rc) == rcNotFound ) {
@@ -355,9 +1710,10 @@ rc_t get_load_info(const KMetadata* meta, SraMeta* info)
}
}
}
+
if (rc == 0) {
const char name[] = "LOAD/timestamp";
- DESTRUCT(KMDataNode, node);
+ RELEASE(KMDataNode, node);
rc = KMetadataOpenNodeRead(meta, &node, name);
if (rc != 0) {
if (GetRCState(rc) == rcNotFound ) {
@@ -386,7 +1742,9 @@ rc_t get_load_info(const KMetadata* meta, SraMeta* info)
DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
}
}
- DESTRUCT(KMDataNode, node);
+
+ RELEASE(KMDataNode, node);
+
return rc;
}
@@ -395,9 +1753,12 @@ rc_t readStatsMetaNode(const KMDataNode* parent, const char* parentName,
const char* name, uint64_t* result, bool quick, bool optional)
{
rc_t rc = 0;
+
const KMDataNode* node = NULL;
+
assert(parent && parentName && name && result);
- rc = KMDataNodeOpenNodeRead (parent, &node, name);
+
+ rc = KMDataNodeOpenNodeRead(parent, &node, name);
if (rc != 0)
{
if (GetRCState(rc) == rcNotFound && optional)
@@ -411,58 +1772,74 @@ rc_t readStatsMetaNode(const KMDataNode* parent, const char* parentName,
"parent=%s,child=%s", parentName, name));
}
}
- else
- {
+ else {
rc = KMDataNodeReadAsU64(node, result);
+ if (GetRCObject(rc) == rcTransfer && GetRCState(rc) == rcIncomplete) {
+ *result = 0;
+ rc = 0;
+ }
if ( rc != 0 && quick )
{
PLOGERR(klogInt, (klogInt, rc, "while reading $(parent)/$(child)",
"parent=%s,child=%s", parentName, name));
}
}
+
+ RELEASE(KMDataNode, node);
+
return rc;
}
+
static
rc_t readStatsMetaNodes(const KMDataNode* parent, const char* name,
SraStatsMeta* stats, bool quick)
{
rc_t rc = 0;
const char* parentName = name;
+
assert(parent && stats);
+
if (parentName == NULL)
{ parentName = "STATS/TABLE"; }
+
if (rc == 0 && name) {
stats->spot_group = strdup(name);
if (stats->spot_group == NULL)
{ rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted); }
}
+
if (rc == 0) {
- rc = readStatsMetaNode
- (parent, parentName, "BASE_COUNT", &stats->BASE_COUNT, quick, false);
+ rc = readStatsMetaNode(parent,
+ parentName, "BASE_COUNT", &stats->BASE_COUNT, quick, false);
}
if (rc == 0) {
- rc = readStatsMetaNode
- (parent, parentName, "BIO_BASE_COUNT", &stats->BIO_BASE_COUNT, quick, false);
+ rc = readStatsMetaNode(parent,
+ parentName, "BIO_BASE_COUNT", &stats->BIO_BASE_COUNT, quick, false);
}
if (rc == 0) {
- rc = readStatsMetaNode
- (parent, parentName, "SPOT_COUNT", &stats->spot_count, quick, false);
+ rc = readStatsMetaNode(parent,
+ parentName, "SPOT_COUNT", &stats->spot_count, quick, false);
}
if (rc == 0) {
- rc = readStatsMetaNode
- (parent, parentName, "CMP_BASE_COUNT", &stats->CMP_BASE_COUNT, quick, true);
+ rc = readStatsMetaNode(parent,
+ parentName, "CMP_BASE_COUNT", &stats->CMP_BASE_COUNT, quick, true);
}
+
if (rc == 0)
{ stats->found = true; }
else { SraStatsMetaDestroy(stats); }
+
return rc;
}
+
static
-rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
+rc_t get_stats_meta(const KMetadata* meta,
+ MetaDataStats* stats, bool quick)
{
rc_t rc = 0;
assert(meta && stats);
memset(stats, 0, sizeof *stats);
+
if (rc == 0) {
const char name[] = "STATS/TABLE";
const KMDataNode* node = NULL;
@@ -476,8 +1853,9 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
}
if (rc == 0 && node)
{ rc = readStatsMetaNodes(node, NULL, &stats->table, quick); }
- DESTRUCT(KMDataNode, node);
+ RELEASE(KMDataNode, node);
}
+
if (rc == 0) {
const char name[] = "STATS/SPOT_GROUP";
const KMDataNode* parent = NULL;
@@ -489,6 +1867,7 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
}
DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
}
+
if (rc == 0 && parent) {
uint32_t count = 0, i = 0;
KNamelist* names = NULL;
@@ -506,6 +1885,7 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
}
}
}
+
for (i = 0; i < count && rc == 0; ++i) {
const KMDataNode* node = NULL;
const char* child = NULL;
@@ -520,14 +1900,16 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
DISP_RC2(rc, child, "while calling KMDataNodeOpenNodeRead");
}
if (rc == 0) {
- rc = readStatsMetaNodes(node, child, &stats->spotGroup[i], quick);
+ rc = readStatsMetaNodes
+ (node, child, &stats->spotGroup[i], quick);
}
- DESTRUCT(KMDataNode, node);
+ RELEASE(KMDataNode, node);
}
- DESTRUCT(KNamelist, names);
+ RELEASE(KNamelist, names);
}
- DESTRUCT(KMDataNode, parent);
+ RELEASE(KMDataNode, parent);
}
+
if (rc == 0) {
uint32_t i = 0;
bool found = stats->table.found;
@@ -535,208 +1917,432 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
{ found = stats->spotGroup[i].found; }
stats->found = found;
}
+
return rc;
}
+
static
-void srastatmeta_print(const MetaDataStats* meta,
- const srastat_parms *pb)
+void srastatmeta_print(const MetaDataStats* meta, srastat_parms *pb)
{
uint32_t i = 0;
assert(pb && meta);
- for (i = 0; i < meta->spotGroupN; ++i) {
- const SraStatsMeta *ss = &meta->spotGroup[i];
- if (pb->xml) {
- if (pb->hasSPOT_GROUP) {
- OUTMSG((" <Member member_name=\"%s\"", ss->spot_group));
+
+ if (meta->spotGroupN) {
+ for (i = 0; i < meta->spotGroupN; ++i) {
+ const SraStatsMeta* ss = &meta->spotGroup[i];
+ if (!pb->skip_members) {
+ const char* spot_group = "";
+ if (strcmp("default", ss->spot_group) != 0)
+ { spot_group = ss->spot_group; }
+ if ((spot_group == NULL || spot_group[0] == '\0')
+ && meta->spotGroupN > 1)
+ {
+ /* skip an empty "extra" 'default' spot_group */
+ if (ss->BASE_COUNT == 0 && ss->BIO_BASE_COUNT == 0 &&
+ ss->CMP_BASE_COUNT == 0 && ss->spot_count == 0)
+ { continue; }
+ }
+ if (pb->xml) {
+ if (pb->hasSPOT_GROUP) {
+ OUTMSG((" <Member member_name=\"%s\"", ss->spot_group));
+ OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
+ ss->spot_count, ss->BASE_COUNT));
+ OUTMSG((" base_count_bio=\"%ld\"", ss->BIO_BASE_COUNT));
+ if (ss->CMP_BASE_COUNT > 0) {
+ OUTMSG((" cmp_base_count=\"%ld\"",
+ ss->CMP_BASE_COUNT));
+ }
+ BAM_HEADER_RG_print_xml(&ss->BAM_HEADER);
+ OUTMSG(("/>\n"));
+ }
+ }
+ else {
+ OUTMSG(("%s|%s|%ld:%ld:%ld|:|:|:\n",
+ pb->table_path, spot_group, ss->spot_count,
+ ss->BASE_COUNT, ss->BIO_BASE_COUNT));
+ }
}
- OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
- ss->spot_count, ss->BASE_COUNT));
- OUTMSG((" base_count_bio=\"%ld\"", ss->BIO_BASE_COUNT));
- if (ss->CMP_BASE_COUNT > 0)
- { OUTMSG((" cmp_base_count=\"%ld\"", ss->CMP_BASE_COUNT)); }
- if (pb->hasSPOT_GROUP)
- { OUTMSG(("/>\n")); }
+ pb->total.spot_count += ss->spot_count;
+ pb->total.BASE_COUNT += ss->BASE_COUNT;
+ pb->total.BIO_BASE_COUNT += ss->BIO_BASE_COUNT;
+ pb->total.total_cmp_len += ss->CMP_BASE_COUNT;
}
- else {
- const char* spot_group = "";
- if (strcmp("default", ss->spot_group) != 0)
- { spot_group = ss->spot_group; }
- OUTMSG(("%s|%s|%ld:%ld:%ld|:|:|:\n",
- pb->table_path, spot_group, ss->spot_count, ss->BASE_COUNT,
- ss->BIO_BASE_COUNT));
+ }
+ else {
+ if (!pb->xml && !(pb->quick && pb->skip_members)) {
+ const char* spot_group = "";
+ OUTMSG(("%s|%s|%ld:%ld:%ld|:|:|:\n",
+ pb->table_path, spot_group, meta->table.spot_count,
+ meta->table.BASE_COUNT, meta->table.BIO_BASE_COUNT));
}
+ pb->total.spot_count = meta->table.spot_count;
+ pb->total.BASE_COUNT = meta->table.BASE_COUNT;
+ pb->total.BIO_BASE_COUNT = meta->table.BIO_BASE_COUNT;
+ pb->total.total_cmp_len = meta->table.CMP_BASE_COUNT;
}
}
+
static
void CC srastat_print( BSTNode* n, void* data )
{
- const srastat_parms *pb = (const srastat_parms*) data;
- const SraStats *ss = ( const SraStats* ) n;
- assert(pb && ss);
- if (pb->xml) {
- if (pb->hasSPOT_GROUP) {
- OUTMSG((" <Member member_name=\"%s\"", ss->spot_group));
- }
- OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"", ss->spot_count, ss->total_len));
- OUTMSG((" base_count_bio=\"%ld\"", ss->bio_len));
- OUTMSG((" spot_count_mates=\"%ld\" base_count_bio_mates=\"%ld\"", ss->spot_count_mates, ss->bio_len_mates));
- OUTMSG((" spot_count_bad=\"%ld\" base_count_bio_bad=\"%ld\"", ss->bad_spot_count, ss->bad_bio_len));
- OUTMSG((" spot_count_filtered=\"%ld\" base_count_bio_filtered=\"%ld\"", ss->filtered_spot_count, ss->filtered_bio_len));
- if (ss->total_cmp_len > 0)
- { OUTMSG((" cmp_base_count=\"%ld\"", ss->total_cmp_len)); }
- if (pb->hasSPOT_GROUP) {
- OUTMSG(("/>\n"));
+ srastat_parms *pb = (srastat_parms*) data;
+ const SraStats *ss = (const SraStats*) n;
+ assert(pb && ss);
+ if (!pb->skip_members) {
+ if (pb->xml) {
+ if (pb->hasSPOT_GROUP) {
+ OUTMSG((" <Member member_name=\"%s\"", ss->spot_group));
+ OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"", ss->spot_count, ss->total_len));
+ OUTMSG((" base_count_bio=\"%ld\"", ss->bio_len));
+ OUTMSG((" spot_count_mates=\"%ld\" base_count_bio_mates=\"%ld\"", ss->spot_count_mates, ss->bio_len_mates));
+ OUTMSG((" spot_count_bad=\"%ld\" base_count_bio_bad=\"%ld\"", ss->bad_spot_count, ss->bad_bio_len));
+ OUTMSG((" spot_count_filtered=\"%ld\" base_count_bio_filtered=\"%ld\"",
+ ss->filtered_spot_count, ss->filtered_bio_len));
+ if (ss->total_cmp_len > 0)
+ { OUTMSG((" cmp_base_count=\"%ld\"", ss->total_cmp_len)); }
+ BAM_HEADER_RG_print_xml(&ss->BAM_HEADER);
+ OUTMSG(("/>\n"));
+ }
+ }
+ else {
+ OUTMSG(("%s|%s|%ld:%ld:%ld|%ld:%ld|%ld:%ld|%ld:%ld\n",
+ pb->table_path,ss->spot_group,ss->spot_count,ss->total_len,ss->bio_len,ss->spot_count_mates,ss->bio_len_mates,
+ ss->bad_spot_count,ss->bad_bio_len,ss->filtered_spot_count,ss->filtered_bio_len));
}
}
- else {
- OUTMSG(("%s|%s|%ld:%ld:%ld|%ld:%ld|%ld:%ld|%ld:%ld\n",
- pb->table_path,ss->spot_group,ss->spot_count,ss->total_len,ss->bio_len,ss->spot_count_mates,ss->bio_len_mates,
- ss->bad_spot_count,ss->bad_bio_len,ss->filtered_spot_count,ss->filtered_bio_len));
- }
+ pb->total.spot_count += ss->spot_count;
+ pb->total.spot_count_mates += ss->spot_count_mates;
+ pb->total.BIO_BASE_COUNT += ss->bio_len;
+ pb->total.bio_len_mates += ss->bio_len_mates;
+ pb->total.BASE_COUNT += ss->total_len;
+ pb->total.bad_spot_count += ss->bad_spot_count;
+ pb->total.bad_bio_len += ss->bad_bio_len;
+ pb->total.filtered_spot_count += ss->filtered_spot_count;
+ pb->total.filtered_bio_len += ss->filtered_bio_len;
+ pb->total.total_cmp_len += ss->total_cmp_len;
}
static
-int CC srastats_cmp ( const void *item, const BSTNode *n )
+rc_t process_align_info(const char* indent, const Ctx* ctx)
{
- const char *sg = item;
- const SraStats *ss = ( const SraStats* ) n;
+ rc_t rc = 0;
+ uint32_t count = 0;
+ int i = 0;
+ const VDBDependencies* dep = NULL;
- return strcmp(sg,ss->spot_group);
+ assert(indent && ctx);
+
+ if (ctx->db == NULL) {
+ return rc;
+ }
+
+ rc = VDatabaseListDependencies(ctx->db, &dep, false);
+ DISP_RC2(rc, ctx->pb->table_path,
+ "while calling VDatabaseListDependencies");
+
+ rc = VDBDependenciesCount(dep, &count);
+ if (rc) {
+ DISP_RC(rc, "while calling VDBDependenciesCount");
+ return rc;
+ }
+
+
+ OUTMSG(("%s<AlignInfo>\n", indent));
+
+ for (i = 0; i < count && rc == 0; ++i) {
+ bool circular = false;
+ const char* name = NULL;
+ const char* path = NULL;
+ bool local = false;
+ const char* seqId = NULL;
+
+ rc = VDBDependenciesCircular(dep, &circular, i);
+ if (rc != 0) {
+ DISP_RC(rc, "while calling VDBDependenciesCircular");
+ break;
+ }
+ rc = VDBDependenciesName(dep, &name, i);
+ if (rc != 0) {
+ DISP_RC(rc, "while calling VDBDependenciesName");
+ break;
+ }
+ rc = VDBDependenciesPath(dep, &path, i);
+ if (rc != 0) {
+ DISP_RC(rc, "while calling VDBDependenciesPath");
+ break;
+ }
+ rc = VDBDependenciesLocal(dep, &local, i);
+ if (rc != 0) {
+ DISP_RC(rc, "while calling VDBDependenciesLocal");
+ break;
+ }
+ rc = VDBDependenciesSeqId(dep, &seqId, i);
+ if (rc != 0) {
+ DISP_RC(rc, "while calling VDBDependenciesSeqId");
+ break;
+ }
+
+ OUTMSG((
+ "%s <Ref seqId=\"%s\" name=\"%s\" circular=\"%s\" local=\"%s\"",
+ indent, seqId, name, (circular ? "true" : "false"),
+ (local ? "local" : "remote")));
+ if (path && path[0]) {
+ OUTMSG((" path=\"%s\"", path));
+ }
+ OUTMSG(("/>\n"));
+ }
+
+ OUTMSG(("%s</AlignInfo>\n", indent));
+
+ RELEASE(VDBDependencies, dep);
+
+ return rc;
}
static
-void print_results(srastat_parms* pb, const BSTree* tr,
- const SraSizeStats* sizes, const SraMeta* info,
- const MetaDataStats* meta, const SraStatsTotal* total)
+rc_t print_results(const Ctx* ctx)
{
- assert(pb && tr && sizes && info && meta && total);
+ rc_t rc = 0;
+ bool mismatch = false;
+
+ assert(ctx && ctx->pb
+ && ctx->tr && ctx->sizes && ctx->info && ctx->meta && ctx->total);
- if (pb->quick) {
- if ( ! meta -> found )
+ if (ctx->pb->quick) {
+ if ( ! ctx->meta -> found )
LOGMSG(klogWarn, "Statistics metadata not found");
else
{
- pb->hasSPOT_GROUP = meta->spotGroupN > 1 ||
- (meta->spotGroupN == 1
- && strcmp("default", meta->spotGroup[0].spot_group) != 0);
+ ctx->pb->hasSPOT_GROUP = ctx->meta->spotGroupN > 1 ||
+ (ctx->meta->spotGroupN == 1
+ && strcmp("default", ctx->meta->spotGroup[0].spot_group) != 0);
}
}
- if (meta->found)
- {
+
+ if (ctx->meta->found && ! ctx->pb->quick) {
bool mismatch = false;
- SraStats* ss = (SraStats*)BSTreeFind(tr, "", srastats_cmp);
- const SraStatsMeta* m = &meta->table;
- if (total->BASE_COUNT != m->BASE_COUNT
- || total->BIO_BASE_COUNT != m->BIO_BASE_COUNT
- || total->spot_count != m->spot_count
- || total->total_cmp_len != m->CMP_BASE_COUNT)
+ SraStats* ss = (SraStats*)BSTreeFind(ctx->tr, "", srastats_cmp);
+ const SraStatsMeta* m = &ctx->meta->table;
+ if (ctx->total->BASE_COUNT != m->BASE_COUNT
+ || ctx->total->BIO_BASE_COUNT != m->BIO_BASE_COUNT
+ || ctx->total->spot_count != m->spot_count
+ || ctx->total->total_cmp_len != m->CMP_BASE_COUNT)
{ mismatch = true; }
if (ss != NULL) {
- const SraStatsMeta* m = &meta->table;
- if (ss->total_len != m->BASE_COUNT
- || ss->bio_len != m->BIO_BASE_COUNT
- || ss->spot_count != m->spot_count
- || ss->total_cmp_len != m->CMP_BASE_COUNT)
- { mismatch = true; }
- else {
- uint32_t i = 0;
- for (i = 0; i < meta->spotGroupN && !mismatch; ++i) {
- const char* spot_group = "";
- m = &meta->spotGroup[i];
- assert(m);
- if (strcmp("default", m->spot_group) != 0)
- { spot_group = m->spot_group; }
- ss = (SraStats*)BSTreeFind(tr, spot_group, srastats_cmp);
- if (ss == NULL) {
- mismatch = true;
- break;
- }
- if (ss->total_len != m->BASE_COUNT
- || ss->bio_len != m->BIO_BASE_COUNT
- || ss->spot_count != m->spot_count
- || ss->total_cmp_len != m->CMP_BASE_COUNT)
- {
- mismatch = true;
- break;
- }
+ const SraStatsMeta* m = &ctx->meta->table;
+ uint32_t i = 0;
+ for (i = 0; i < ctx->meta->spotGroupN && !mismatch; ++i) {
+ const char* spot_group = "";
+ m = &ctx->meta->spotGroup[i];
+ assert(m);
+ if (strcmp("default", m->spot_group) != 0)
+ { spot_group = m->spot_group; }
+ ss = (SraStats*)BSTreeFind(ctx->tr, spot_group, srastats_cmp);
+ if (ss == NULL) {
+ mismatch = true;
+ break;
+ }
+ if (ss->total_len != m->BASE_COUNT
+ || ss->bio_len != m->BIO_BASE_COUNT
+ || ss->spot_count != m->spot_count
+ || ss->total_cmp_len != m->CMP_BASE_COUNT)
+ {
+ mismatch = true;
+ break;
}
}
}
- if (mismatch) {
- LOGMSG(klogWarn,
- "Mismatch between calculated and recorded statistics");
- }
}
- if (pb->xml) {
- OUTMSG(("<Run accession=\"%s\"", pb->table_path));
- if (!pb->quick || ! meta->found) {
+ if (ctx->pb->xml) {
+ OUTMSG(("<Run accession=\"%s\"", ctx->pb->table_path));
+ if (!ctx->pb->quick || ! ctx->meta->found) {
OUTMSG((" read_length=\"%s\"",
- pb->variableReadLength ? "variable" : "fixed"));
+ ctx->pb->variableReadLength ? "variable" : "fixed"));
+ }
+ if (ctx->pb->quick) {
+ OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
+ ctx->meta->table.spot_count, ctx->meta->table.BASE_COUNT));
+ OUTMSG((" base_count_bio=\"%ld\"",
+ ctx->meta->table.BIO_BASE_COUNT));
+ if (ctx->meta->table.CMP_BASE_COUNT > 0) {
+ OUTMSG((" cmp_base_count=\"%ld\"",
+ ctx->meta->table.CMP_BASE_COUNT));
+ }
+ }
+ else {
+ OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
+ ctx->total->spot_count, ctx->total->BASE_COUNT));
+ OUTMSG((" base_count_bio=\"%ld\"", ctx->total->BIO_BASE_COUNT));
+ OUTMSG((" spot_count_mates=\"%ld\" base_count_bio_mates=\"%ld\"",
+ ctx->total->spot_count_mates, ctx->total->bio_len_mates));
+ OUTMSG((" spot_count_bad=\"%ld\" base_count_bio_bad=\"%ld\"",
+ ctx->total->bad_spot_count, ctx->total->bad_bio_len));
+ OUTMSG((
+ " spot_count_filtered=\"%ld\" base_count_bio_filtered=\"%ld\"",
+ ctx->total->filtered_spot_count, ctx->total->filtered_bio_len));
+ if (ctx->total->total_cmp_len > 0) {
+ OUTMSG((" cmp_base_count=\"%ld\"", ctx->total->total_cmp_len));
+ }
+ }
+ OUTMSG((">\n"));
+ }
+ else if (ctx->pb->skip_members) {
+ if (ctx->pb->quick) {
+ OUTMSG(("%s||%ld:%ld:%ld|:|:|:\n",
+ ctx->pb->table_path, ctx->meta->table.spot_count,
+ ctx->meta->table.BASE_COUNT, ctx->meta->table.BIO_BASE_COUNT));
+ }
+ else {
+ OUTMSG(("%s||%ld:%ld:%ld|%ld:%ld|%ld:%ld|%ld:%ld\n",
+ ctx->pb->table_path,
+ ctx->total->spot_count, ctx->total->BASE_COUNT,
+ ctx->total->BIO_BASE_COUNT,
+ ctx->total->spot_count_mates, ctx->total->bio_len_mates,
+ ctx->total->bad_spot_count, ctx->total->bad_bio_len,
+ ctx->total->filtered_spot_count, ctx->total->filtered_bio_len));
}
- if (pb->hasSPOT_GROUP)
- { OUTMSG((">\n")); }
}
- if (pb->quick && meta->found)
- { srastatmeta_print(meta, pb); }
- else { BSTreeForEach(tr, false, srastat_print, pb); }
+ if (ctx->pb->quick && ctx->meta->found) {
+ memset(&ctx->pb->total, 0, sizeof ctx->pb->total);
+ rc = parse_bam_header(ctx->db, meta_RG_callback, ctx->meta);
+ srastatmeta_print(ctx->meta, ctx->pb);
+ if (ctx->pb->total.spot_count != ctx->meta->table.spot_count ||
+ ctx->pb->total.BIO_BASE_COUNT != ctx->meta->table.BIO_BASE_COUNT ||
+ ctx->pb->total.BASE_COUNT != ctx->meta->table.BASE_COUNT ||
+ ctx->pb->total.total_cmp_len != ctx->meta->table.CMP_BASE_COUNT)
+ {
+ rc = RC(rcExe, rcData, rcValidating, rcData, rcUnequal);
+ }
+ assert(rc == 0);
+ }
+ else {
+ memset(&ctx->pb->total, 0, sizeof ctx->pb->total);
+ rc = parse_bam_header(ctx->db, tree_RG_callback, ctx->tr);
+ BSTreeForEach(ctx->tr, false, srastat_print, ctx->pb);
+ if (ctx->meta->found) {
+ const SraStatsMeta* m = &ctx->meta->table;
+ if (ctx->pb->total.BASE_COUNT != m->BASE_COUNT
+ || ctx->pb->total.BIO_BASE_COUNT != m->BIO_BASE_COUNT
+ || ctx->pb->total.spot_count != m->spot_count
+ || ctx->pb->total.total_cmp_len != m->CMP_BASE_COUNT)
+ {
+ mismatch = true;
+ }
+ }
+ if (ctx->pb->total.spot_count != ctx->total->spot_count ||
+ ctx->pb->total.spot_count_mates != ctx->total->spot_count_mates ||
+ ctx->pb->total.BIO_BASE_COUNT != ctx->total->BIO_BASE_COUNT ||
+ ctx->pb->total.bio_len_mates != ctx->total->bio_len_mates ||
+ ctx->pb->total.BASE_COUNT != ctx->total->BASE_COUNT ||
+ ctx->pb->total.bad_spot_count != ctx->total->bad_spot_count ||
+ ctx->pb->total.bad_bio_len != ctx->total->bad_bio_len ||
+ ctx->pb->total.filtered_spot_count
+ != ctx->total->filtered_spot_count ||
+ ctx->pb->total.filtered_bio_len != ctx->total->filtered_bio_len ||
+ ctx->pb->total.total_cmp_len != ctx->total->total_cmp_len)
+ {
+ rc = RC(rcExe, rcData, rcValidating, rcData, rcUnequal);
+ }
+ assert(rc == 0);
+ }
- if (pb->xml) {
- if (!pb->hasSPOT_GROUP)
- { OUTMSG((">")); }
- if (sizes) {
- if (!pb->hasSPOT_GROUP)
- { OUTMSG(("\n")); }
- OUTMSG((" <Size value=\"%lu\" units=\"bytes\"/>\n", sizes->size));
+ if (ctx->pb->xml) {
+ if (ctx->sizes) {
+ OUTMSG((" <Size value=\"%lu\" units=\"bytes\"/>\n",
+ ctx->sizes->size));
}
- if (pb->printMeta && info->tblVersion >= 0) {
+ if (ctx->pb->printMeta && ctx->info->tblVersion >= 0) {
OUTMSG((" <Table vers=\"%d\">\n <Meta vers=\"%d\">\n",
- info->tblVersion, info->metaVersion));
- if (info->formatter.name[0] || info->formatter.vers[0] ||
- info->loader.date[0] || info->loader.name[0] ||
- info->loader.vers[0])
+ ctx->info->tblVersion, ctx->info->metaVersion));
+ if (ctx->info->formatter.name[0] || ctx->info->formatter.vers[0] ||
+ ctx->info->loader.date[0] || ctx->info->loader.name[0] ||
+ ctx->info->loader.vers[0])
{
OUTMSG((" <SOFTWARE>\n"));
- if (info->formatter.name[0] || info->formatter.vers[0]) {
+ if (ctx->info->formatter.name[0] ||
+ ctx->info->formatter.vers[0])
+ {
OUTMSG((" <formatter"));
- if (info->formatter.name[0])
- { OUTMSG((" name=\"%s\"", info->formatter.name)); }
- if (info->formatter.vers[0])
- { OUTMSG((" vers=\"%s\"", info->formatter.vers)); }
+ if (ctx->info->formatter.name[0])
+ { OUTMSG((" name=\"%s\"", ctx->info->formatter.name)); }
+ if (ctx->info->formatter.vers[0])
+ { OUTMSG((" vers=\"%s\"", ctx->info->formatter.vers)); }
OUTMSG(("/>\n"));
}
- if (info->loader.date[0] || info->loader.name[0] ||
- info->loader.vers[0])
+ if (ctx->info->loader.date[0] || ctx->info->loader.name[0] ||
+ ctx->info->loader.vers[0])
{
OUTMSG((" <loader"));
- if (info->loader.date[0])
- { OUTMSG((" date=\"%s\"", info->loader.date)); }
- if (info->loader.name[0])
- { OUTMSG((" name=\"%s\"", info->loader.name)); }
- if (info->loader.vers[0])
- { OUTMSG((" vers=\"%s\"", info->loader.vers)); }
+ if (ctx->info->loader.date[0])
+ { OUTMSG((" date=\"%s\"", ctx->info->loader.date)); }
+ if (ctx->info->loader.name[0])
+ { OUTMSG((" name=\"%s\"", ctx->info->loader.name)); }
+ if (ctx->info->loader.vers[0])
+ { OUTMSG((" vers=\"%s\"", ctx->info->loader.vers)); }
OUTMSG(("/>\n"));
}
OUTMSG((" </SOFTWARE>\n"));
}
- if (info->loadTimestamp) {
+ if (ctx->info->loadTimestamp) {
char buf[80];
- struct tm* ts = localtime(&info->loadTimestamp);
+ struct tm* ts = localtime(&ctx->info->loadTimestamp);
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", ts);
OUTMSG((" <LOAD timestamp=\"%lX\">%s</LOAD>\n",
- info->loadTimestamp, buf));
+ ctx->info->loadTimestamp, buf));
}
OUTMSG((" </Meta>\n </Table>\n"));
}
+ if (rc == 0 && !ctx->pb->quick) {
+ BasesPrint(&ctx->total->bases_count, ctx->total->BASE_COUNT, " ");
+ }
+ if (rc == 0 && !ctx->pb->skip_alignment) {
+ rc = process_align_info(" ", ctx);
+ }
+ if (rc == 0 && ctx->pb->statistics) {
+ rc = SraStatsTotalPrintStatistics(ctx->total, " ", ctx->pb->test);
+ }
+ if (rc == 0 && ctx->pb->print_arcinfo) {
+ const ArcInfo* a = ctx->arc_info;
+ uint32_t i;
+ char b[1024];
+ time_t ts = a->timestamp;
+ struct tm* tm = localtime(&ts);
+
+ if( tm == NULL ) {
+ rc = RC(rcExe, rcData, rcReading, rcParam, rcInvalid);
+ }
+ else {
+ size_t k = strftime(b, sizeof(b), "%Y-%m-%dT%H:%M:%S", tm);
+ OUTMSG((" <Archive timestamp=\"%.*s\"", k, b));
+ for(i = 0; i < sizeof(a->i) / sizeof(a->i[0]); i++) {
+ OUTMSG((" size.%s=\"%lu\" md5.%s=\"%s\"",
+ a->i[i].tag, a->i[i].size, a->i[i].tag, a->i[i].md5));
+ }
+ OUTMSG((" />\n"));
+ }
+ }
+ if (rc == 0)
+ { rc = QualityStatsPrint(&ctx->quality, " "); }
+ if (rc == 0)
+ { rc = TableCountsPrint(&ctx->tables, " "); }
OUTMSG(("</Run>\n"));
}
+ if (mismatch && ctx->pb->start == 0 && ctx->pb->stop == 0) {
+ /* check mismatch just when no --start, --stop specified */
+ LOGMSG(klogWarn,
+ "Mismatch between calculated and recorded statistics");
+ }
+ return rc;
}
static
void CC bst_whack_free ( BSTNode *n, void *ignore )
{
- free ( n );
+ SraStats* ss = (SraStats*)n;
+ BAM_HEADER_RG_free(&ss->BAM_HEADER);
+ free(ss);
}
static
@@ -766,6 +2372,17 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
const SRAColumn* cREAD_TYPE = NULL;
const SRAColumn* cSPOT_GROUP = NULL;
+ int g_nreads = 0;
+ spotid_t n_spots = 0;
+ spotid_t start = pb->start, stop = pb->stop;
+
+ /* filled with dREAD_LEN[i] for (spotid == start);
+ used to check fixedReadLength */
+ uint64_t g_totalREAD_LEN[MAX_NREADS];
+ uint64_t g_nonZeroLenReads[MAX_NREADS];
+ memset(g_totalREAD_LEN, 0, sizeof g_totalREAD_LEN);
+ memset(g_nonZeroLenReads, 0, sizeof g_nonZeroLenReads);
+
assert(pb && tbl && tr && total);
if (rc == 0) {
@@ -818,18 +2435,23 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
rc = SRATableMaxSpotId(tbl, &spotid);
DISP_RC(rc, "failed to read max spot id");
if (rc == 0) {
+ BasesInit(&total->bases_count, tbl);
+ }
+ if (rc == 0) {
+ bool bad_read_filter = false;
+ bool fixedNReads = true;
bool fixedReadLength = true;
- int g_nreads = 0;
+
uint32_t g_dREAD_LEN[MAX_NREADS];
memset(g_dREAD_LEN, 0, sizeof g_dREAD_LEN);
- if (pb->start == 0)
- { pb->start = 1; }
- if (pb->stop == 0 || pb -> stop > spotid)
- { pb->stop = spotid; }
+ if (start == 0)
+ { start = 1; }
+ if (stop == 0 || pb -> stop > spotid)
+ { stop = spotid; }
- for (spotid = pb->start; spotid <= pb->stop && rc == 0;
+ for (spotid = start; spotid <= stop && rc == 0;
++spotid)
{
SraStats* ss;
@@ -863,16 +2485,16 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
int i, bio_len, bio_count, bad_cnt, filt_cnt;
memcpy(dREAD_LEN, ((const char*)base) + (boff>>3), row_bits>>3);
nreads = (row_bits >> 3) / sizeof(*dREAD_LEN);
- if (spotid == pb->start) {
+ if (spotid == start) {
g_nreads = nreads;
+ if (pb->statistics) {
+ rc = SraStatsTotalMakeStatistics
+ (total, g_nreads);
+ }
}
-#if 0
else if (g_nreads != nreads) {
- rc = RC(rcExe, rcTable, rcReading, rcData, rcInconsistent);
- PLOGERR(klogInt, (klogInt, rc,
- "spot=$(spot), ReadNumber=$(n), previous=$(prev)", "spot=%lu,n=%d,prev=%d", spotid, nreads, g_nreads));
+ fixedNReads = false;
}
-#endif
if (rc == 0) {
rc = SRAColumnRead(cREAD_TYPE, spotid, &base, &boff, &row_bits);
@@ -896,7 +2518,6 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
DISP_RC_Read(rc, SPOT_GROUP, spotid, "while calling SRAColumnRead");
if (rc == 0) {
if (row_bits > 0) {
- pb -> hasSPOT_GROUP = 1;
if (boff & 7)
{ rc = RC(rcExe, rcColumn, rcReading, rcOffset, rcInvalid); }
if (row_bits & 7)
@@ -905,8 +2526,12 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
{ rc = RC(rcExe, rcColumn, rcReading, rcBuffer, rcInsufficient); }
DISP_RC_Read(rc, SPOT_GROUP, spotid, "after calling SRAColumnRead");
if (rc == 0) {
+ int n = row_bits >> 3;
memcpy(dSPOT_GROUP,((const char*)base) + (boff>>3),row_bits>>3);
- dSPOT_GROUP[row_bits>>3]='\0';
+ dSPOT_GROUP[n]='\0';
+ if (n > 1 ||
+ (n == 1 && dSPOT_GROUP[0]))
+ { pb -> hasSPOT_GROUP = 1; }
}
}
else { dSPOT_GROUP[0]='\0'; }
@@ -919,15 +2544,42 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
rc = SRAColumnRead(cRD_FILTER, spotid, &base, &boff, &row_bits);
DISP_RC_Read(rc, RD_FILTER, spotid, "while calling SRAColumnRead");
if (rc == 0) {
+ int size = row_bits >> 3;
if (boff & 7)
{ rc = RC(rcExe, rcColumn, rcReading, rcOffset, rcInvalid); }
if (row_bits & 7)
{ rc = RC(rcExe, rcColumn, rcReading, rcSize, rcInvalid); }
- if ((row_bits >> 3) > sizeof(dRD_FILTER))
+ if (size > sizeof dRD_FILTER)
{ rc = RC(rcExe, rcColumn, rcReading, rcBuffer, rcInsufficient); }
DISP_RC_Read(rc, RD_FILTER, spotid, "after calling SRAColumnRead");
- if (rc == 0)
- { memcpy(dRD_FILTER,((const char*)base) + (boff>>3),row_bits>>3); }
+ if (rc == 0) {
+ memcpy(dRD_FILTER,((const char*)base) + (boff>>3), size);
+ if (size < nreads) {
+ /* RD_FILTER is expected to have nreads elements */
+ if (size == 1) {
+ /* fill all RD_FILTER elements with RD_FILTER[0] */
+ int i = 0;
+ for (i = 1; i < nreads; ++i) {
+ memcpy(dRD_FILTER + i,
+ ((const char*)base) + (boff>>3), 1);
+ }
+ if (!bad_read_filter) {
+ bad_read_filter = true;
+ PLOGMSG(klogWarn, (klogWarn, "RD_FILTER column"
+ " size is 1 but it is expected to be $(n)",
+ "n=%d", nreads));
+ }
+ }
+ else { /* something really bad with RD_FILTER column:
+ let's pretend it does not exist */
+ cRD_FILTER = NULL;
+ bad_read_filter = true;
+ PLOGMSG(klogWarn, (klogWarn, "RD_FILTER column size"
+ " is $(real) but it is expected to be $(exp)",
+ "real=%d,exp=%d", size, nreads));
+ }
+ }
+ }
} else { break; }
}
@@ -980,11 +2632,21 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
ss->total_cmp_len += cmp_len;
total->total_cmp_len += cmp_len;
+ BasesAdd(&total->bases_count, spotid);
+
+ if (pb->statistics) {
+ SraStatsTotalAdd(total, dREAD_LEN, nreads);
+ }
for (bio_len = bio_count = i = bad_cnt = filt_cnt = 0; (i < nreads) && (rc == 0); i++) {
- if (spotid == pb->start) {
+ if (dREAD_LEN[i] > 0) {
+ g_totalREAD_LEN[i] += dREAD_LEN[i];
+ ++g_nonZeroLenReads[i];
+ }
+ if (spotid == start) {
g_dREAD_LEN[i] = dREAD_LEN[i];
}
- else if (g_dREAD_LEN[i] != dREAD_LEN[i]) { fixedReadLength = false; }
+ else if (g_dREAD_LEN[i] != dREAD_LEN[i])
+ { fixedReadLength = false; }
if (dREAD_LEN[i] > 0) {
bool biological = false;
@@ -1001,13 +2663,17 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
break;
case SRA_READ_FILTER_REJECT:
case SRA_READ_FILTER_CRITERIA:
- if (biological)
- { ss->bad_bio_len += dREAD_LEN[i]; }
+ if (biological) {
+ ss->bad_bio_len += dREAD_LEN[i];
+ total->bad_bio_len += dREAD_LEN[i];
+ }
bad_cnt++;
break;
case SRA_READ_FILTER_REDACTED:
- if (biological)
- { ss->filtered_bio_len += dREAD_LEN[i]; }
+ if (biological) {
+ ss->filtered_bio_len += dREAD_LEN[i];
+ total->filtered_bio_len += dREAD_LEN[i];
+ }
filt_cnt++;
break;
default:
@@ -1023,36 +2689,105 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
ss->bio_len += bio_len;
total->BIO_BASE_COUNT += bio_len;
if (bio_count > 1) {
- ss->spot_count_mates++;
+ ++ss->spot_count_mates;
+ ++total->spot_count_mates;
ss->bio_len_mates += bio_len;
+ total->bio_len_mates += bio_len;
+ }
+ if (bad_cnt) {
+ ss->bad_spot_count++;
+ total->bad_spot_count++;
+ }
+ if (filt_cnt) {
+ ss->filtered_spot_count++;
+ total->filtered_spot_count++;
}
- if (bad_cnt)
- { ss->bad_spot_count++; }
- if (filt_cnt)
- { ss->filtered_spot_count++; }
}
}
- }
- /******* Output Results here ************/
+ } /* for (spotid = start; spotid <= stop && rc == 0; ++spotid) */
if (rc == 0) {
+ BasesFinalize(&total->bases_count);
pb->variableReadLength = !fixedReadLength;
+
+ /* --- g_totalREAD_LEN[i] is sum(READ_LEN[i]) for all spots --- */
+ if (fixedNReads) {
+ int i = 0;
+ if (stop >= start) {
+ n_spots = stop - start + 1;
+ }
+ if (n_spots > 0) {
+ for (i = 0; i < g_nreads && rc == 0; ++i) {
+ if (fixedReadLength) {
+ assert(g_totalREAD_LEN[i] / n_spots
+ == g_dREAD_LEN[i]);
+ }
+ }
+ }
+ }
}
}
- SRAColumnRelease(cSPOT_GROUP);
+ RELEASE(SRAColumn, cSPOT_GROUP);
}
}
}
- DESTRUCT(SRAColumn, cPRIMARY_ALIGNMENT_ID);
- DESTRUCT(SRAColumn, cRD_FILTER);
- DESTRUCT(SRAColumn, cREAD_TYPE);
- DESTRUCT(SRAColumn, cREAD_LEN);
+ RELEASE(SRAColumn, cPRIMARY_ALIGNMENT_ID);
+ RELEASE(SRAColumn, cRD_FILTER);
+ RELEASE(SRAColumn, cREAD_TYPE);
+ RELEASE(SRAColumn, cREAD_LEN);
+
+ if (pb->test) {
+ int i = 0;
+ spotid_t spotid = 0;
+ double average[MAX_NREADS];
+ double diff_sq[MAX_NREADS];
+ SraStatsTotalStatistics2Init(total,
+ g_nreads, g_totalREAD_LEN, g_nonZeroLenReads);
+ memset(diff_sq, 0, sizeof diff_sq);
+ for (i = 0; i < g_nreads; ++i) {
+ average[i] = (double)g_totalREAD_LEN[i] / n_spots;
+ }
+ if (rc == 0) {
+ const char* name = READ_LEN;
+ rc = SRATableOpenColumnRead(tbl, &cREAD_LEN, name, vdb_uint32_t);
+ DISP_RC2(rc, name, "while calling SRATableOpenColumnRead");
+ }
+ for (spotid = start; spotid <= stop && rc == 0; ++spotid) {
+ uint32_t dREAD_LEN[MAX_NREADS];
+ const void* base;
+ bitsz_t boff, row_bits;
+ if (rc == 0) {
+ rc = SRAColumnRead(cREAD_LEN, spotid, &base, &boff, &row_bits);
+ DISP_RC_Read(rc, READ_LEN, spotid,
+ "while calling SRAColumnRead");
+ }
+ if (rc == 0) {
+ memcpy(dREAD_LEN, ((const char*)base) + (boff>>3), row_bits>>3);
+ }
+ for (i = 0; i < g_nreads; ++i) {
+ diff_sq[i] +=
+ (dREAD_LEN[i] - average[i]) * (dREAD_LEN[i] - average[i]);
+ }
+ SraStatsTotalAdd2(total, dREAD_LEN);
+ }
+ RELEASE(SRAColumn, cREAD_LEN);
+ }
return rc;
}
static
+void CtxRelease(Ctx* ctx)
+{
+ assert(ctx);
+
+ QualityStatsRelease(&ctx->quality);
+ TableCountsRelease(&ctx->tables);
+
+ memset(ctx, 0, sizeof *ctx);
+}
+static
rc_t run(srastat_parms* pb)
{
rc_t rc = 0;
@@ -1067,6 +2802,7 @@ rc_t run(srastat_parms* pb)
}
else {
SraSizeStats sizes;
+ ArcInfo arc_info;
SraMeta info;
const SRATable* tbl = NULL;
@@ -1080,11 +2816,14 @@ rc_t run(srastat_parms* pb)
SraStatsTotal total;
const KTable* ktbl = NULL;
const KMetadata* meta = NULL;
-
- bool quick = pb -> quick;
+ const VTable* vtbl = NULL;
+ const VDatabase* db = NULL;
BSTree tr;
+ Ctx ctx;
+
BSTreeInit(&tr);
+ memset(&ctx, 0, sizeof ctx);
memset(&total, 0, sizeof total);
@@ -1095,12 +2834,22 @@ rc_t run(srastat_parms* pb)
DISP_RC(rc, "While calling KTableOpenMetadataRead");
}
if (rc == 0) {
- rc = get_stats_meta(meta, &stats, quick);
+ rc = SRATableGetVTableRead(tbl, &vtbl);
+ DISP_RC2(rc, pb->table_path,
+ "while calling SRATableGetVTableRead");
+ }
+ if (rc == 0) {
+ rc = VTableOpenParentRead(vtbl, &db);
+ DISP_RC2(rc, pb->table_path,
+ "while calling VTableOpenParentRead");
+ }
+ if (rc == 0) {
+ rc = get_stats_meta(meta, &stats, pb->quick);
if (rc == 0) {
- if (quick && !stats.found) {
+ if (pb->quick && !stats.found) {
LOGMSG(klogWarn, "Statistics metadata not found: "
"performing full table scan");
- quick = false;
+ pb->quick = false;
}
}
rc = 0;
@@ -1109,26 +2858,55 @@ rc_t run(srastat_parms* pb)
{ rc = get_size(tbl, &sizes); }
if (rc == 0 && pb->printMeta)
{ rc = get_load_info(meta, &info); }
- if (rc == 0 && !quick)
+ if (rc == 0 && !pb->quick)
{ rc = sra_stat(pb, tbl, &tr, &total); }
- if (rc == 0)
- { print_results(pb, &tr, &sizes, &info, &stats, &total); }
+ if (rc == 0 && pb->print_arcinfo ) {
+ rc = get_arc_info(mgr, pb->table_path, tbl, &arc_info);
+ }
+ if (rc == 0) {
+ rc = QualityStatsRead(&ctx.quality, meta);
+ if (rc == 0)
+ { QualityStatsSort(&ctx.quality); }
+ }
+ if (rc == 0) {
+ rc = TableCountsRead(&ctx.tables, db);
+ if (rc == 0)
+ { TableCountsSort(&ctx.tables); }
+ }
+ if (rc == 0) {
+ ctx.db = db;
+ ctx.info = &info;
+ ctx.meta = &stats;
+ ctx.pb = pb;
+ ctx.sizes = &sizes;
+ ctx.total = &total;
+ ctx.arc_info = &arc_info;
+ ctx.tr = &tr;
+ rc = print_results(&ctx);
+ }
BSTreeWhack(&tr, bst_whack_free, NULL);
- DESTRUCT(KMetadata, meta);
- DESTRUCT(KTable, ktbl);
- }
- {
- rc_t rc2 = SRATableRelease(tbl);
- if (rc == 0)
- { rc = rc2; }
+ SraStatsTotalFree(&total);
+ RELEASE(VDatabase, db);
+ RELEASE(VTable, vtbl);
+ RELEASE(KTable, ktbl);
+ {
+ int i;
+ for (i = 0; i < stats.spotGroupN; ++i) {
+ SraStatsMetaDestroy(&stats.spotGroup[i]);
+ }
+
+ SraStatsMetaDestroy(&stats.table);
+
+ free(stats.spotGroup);
+ stats.spotGroup = NULL;
+ }
+ CtxRelease(&ctx);
+ RELEASE(KMetadata, meta);
}
+ RELEASE(SRATable, tbl);
}
- {
- rc_t rc2 = SRAMgrRelease(mgr);
- if (rc == 0)
- { rc = rc2; }
- }
+ RELEASE(SRAMgr, mgr);
return rc;
}
@@ -1147,40 +2925,57 @@ ver_t CC KAppVersion ( void )
/* Usage
*/
+#define OPTION_ALIGN "alignment"
#define OPTION_SPT_D "spot-desc"
+#define OPTION_MEMBR "member-stats"
#define OPTION_META "meta"
#define OPTION_QUICK "quick"
#define OPTION_START "start"
+#define OPTION_STATS "statistics"
#define OPTION_STOP "stop"
+#define OPTION_TEST "test"
#define OPTION_XML "xml"
+#define OPTION_ARCINFO "archive-info"
+#define ALIAS_ALIGN "a"
#define ALIAS_SPT_D "d"
+#define ALIAS_MEMBR NULL
#define ALIAS_META "m"
#define ALIAS_QUICK "q"
#define ALIAS_START "b"
+#define ALIAS_STATS "s"
#define ALIAS_STOP "e"
+#define ALIAS_TEST "t"
#define ALIAS_XML "x"
+#define ALIAS_ARCINFO NULL
-
+static const char * align_usage[] = { "print alignment info, default is on", NULL };
static const char * spt_d_usage[] = { "print table spot descriptor", NULL };
+static const char * membr_usage[] = { "print member stats, default is on", NULL };
static const char * meta_usage[] = { "print load metadata", NULL };
-static const char * start_usage[] = { "starting spot id ( default 1 )", NULL };
-static const char * stop_usage[] = { "ending spot id ( default max )", NULL };
-static const char * quick_usage[] ={ "quick mode: get statistics from metadata",
- "not to scan the table", NULL };
-static const char * xml_usage[] = { "output as XML (default is text)", NULL };
+static const char * start_usage[] = { "starting spot id, default is 1", NULL };
+static const char * stop_usage[] = { "ending spot id, default is max", NULL };
+static const char * stats_usage[] = { "calculate READ_LEN average and standard deviation", NULL };
+static const char * quick_usage[] = { "quick mode: get statistics from metadata;", "do not scan the table", NULL };
+static const char * test_usage[] = { "test READ_LEN average and standard deviation calculation", NULL };
+static const char * xml_usage[] = { "output as XML, default is text", NULL };
+static const char * arcinfo_usage[] = { "output archive info, default is off", NULL };
OptDef Options[] =
{
- { OPTION_SPT_D, ALIAS_SPT_D, NULL, spt_d_usage, 1, false, false }
+ { OPTION_ALIGN, ALIAS_ALIGN, NULL, align_usage, 1, true , false }
+ , { OPTION_SPT_D, ALIAS_SPT_D, NULL, spt_d_usage, 1, false, false }
+ , { OPTION_MEMBR, ALIAS_MEMBR, NULL, membr_usage, 1, true , false }
+ , { OPTION_ARCINFO, ALIAS_ARCINFO, NULL, arcinfo_usage, 0, false, false }
, { OPTION_META, ALIAS_META, NULL, meta_usage, 1, false, false }
, { OPTION_QUICK, ALIAS_QUICK, NULL, quick_usage, 1, false, false }
, { OPTION_START, ALIAS_START, NULL, start_usage, 1, true, false }
+ , { OPTION_STATS, ALIAS_STATS, NULL, stats_usage, 1, false, false }
, { OPTION_STOP, ALIAS_STOP, NULL, stop_usage, 1, true, false }
- , { OPTION_XML, ALIAS_XML, NULL, xml_usage, 0, false, false }
+ , { OPTION_TEST , ALIAS_TEST , NULL, test_usage, 1, false, false }
+ , { OPTION_XML, ALIAS_XML, NULL, xml_usage, 1, false, false }
};
-
rc_t CC UsageSummary (const char * progname)
{
return KOutMsg (
@@ -1216,6 +3011,11 @@ rc_t CC Usage (const Args * args)
HelpOptionLine (ALIAS_STOP, OPTION_STOP, "row-id", stop_usage);
HelpOptionLine (ALIAS_META, OPTION_META, NULL, meta_usage);
HelpOptionLine (ALIAS_QUICK, OPTION_QUICK, NULL, quick_usage);
+ HelpOptionLine (ALIAS_MEMBR, OPTION_MEMBR, "on | off", membr_usage);
+ HelpOptionLine (ALIAS_ARCINFO, OPTION_ARCINFO, NULL, arcinfo_usage);
+ HelpOptionLine (ALIAS_STATS, OPTION_STATS, NULL, stats_usage);
+ HelpOptionLine (ALIAS_ALIGN, OPTION_ALIGN, "on | off", align_usage);
+ KOutMsg ("\n");
HelpOptionsStandard ();
HelpVersion (fullpath, KAppVersion());
return rc;
@@ -1302,16 +3102,73 @@ rc_t CC KMain ( int argc, char *argv [] )
if (pcount)
pb.printMeta = true;
+ rc = ArgsOptionCount (args, OPTION_MEMBR, &pcount);
+ if (rc)
+ break;
+
+ if (pcount) {
+ const char* v = NULL;
+ rc = ArgsOptionValue (args, OPTION_MEMBR, 0, &v);
+ if (rc)
+ break;
+ if (!strcmp(v, "off")) {
+ pb.skip_members = true;
+ }
+ }
+
+ rc = ArgsOptionCount (args, OPTION_ARCINFO, &pcount);
+ if (rc)
+ break;
+
+ pb.print_arcinfo = pcount > 0;
+
+ rc = ArgsOptionCount (args, OPTION_ALIGN, &pcount);
+ if (rc)
+ break;
+
+ if (pcount) {
+ const char* v = NULL;
+ rc = ArgsOptionValue (args, OPTION_ALIGN, 0, &v);
+ if (rc)
+ break;
+ if (!strcmp(v, "off")) {
+ pb.skip_alignment = true;
+ }
+ }
+
+ rc = ArgsOptionCount (args, OPTION_STATS, &pcount);
+ if (rc)
+ break;
+
+ if (pcount)
+ pb.statistics = true;
+
+ rc = ArgsOptionCount (args, OPTION_TEST, &pcount);
+ if (rc)
+ break;
+
+ if (pcount)
+ pb.test = pb.statistics = true;
+
rc = ArgsParamCount (args, &pcount);
if (rc)
break;
- if (pcount == 0)
- return MiniUsage (args);
+ if (pcount == 0) {
+ MiniUsage (args);
+ exit(1);
+ }
rc = ArgsParamValue (args, 0, &pb.table_path);
if (rc)
break;
+
+ if (pb.statistics && (pb.quick || ! pb.xml)) {
+ KOutMsg("\n--" OPTION_STATS
+ " option can be used just in XML NON-QUICK mode\n");
+ MiniUsage (args);
+ exit(1);
+ }
} while (0);
}
diff --git a/tools/sra-stat/sra-stat.vers b/tools/sra-stat/sra-stat.vers
index 8dbb0f2..f90b1af 100644
--- a/tools/sra-stat/sra-stat.vers
+++ b/tools/sra-stat/sra-stat.vers
@@ -1 +1 @@
-2.1.10
+2.3.2
diff --git a/tools/sra-stat/sra-stat.vers.h b/tools/sra-stat/sra-stat.vers.h
deleted file mode 100644
index 83e9dcd..0000000
--- a/tools/sra-stat/sra-stat.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRA_STAT_VERS 0x0201000A
diff --git a/tools/srapath/Makefile b/tools/srapath/Makefile
new file mode 100644
index 0000000..2e346aa
--- /dev/null
+++ b/tools/srapath/Makefile
@@ -0,0 +1,96 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/srapath
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+ srapath
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# srapath
+# vdb table copy tool
+#
+SRAPATH_SRC = \
+ srapath
+
+SRAPATH_OBJ = \
+ $(addsuffix .$(OBJX),$(SRAPATH_SRC))
+
+SRAPATH_LIB += \
+ -lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lkproc \
+ -lklib
+
+$(BINDIR)/srapath: $(SRAPATH_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRAPATH_LIB)
diff --git a/tools/srapath/srapath.c b/tools/srapath/srapath.c
new file mode 100644
index 0000000..0bc7b30
--- /dev/null
+++ b/tools/srapath/srapath.c
@@ -0,0 +1,283 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "srapath.vers.h"
+
+#include <vfs/resolver.h>
+#include <vfs/path.h>
+#include <vfs/manager.h>
+#include <kfs/directory.h>
+#include <kfs/defs.h>
+#include <kfg/config.h>
+#include <sra/impl.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h> /* STSMSG */
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#include <limits.h> /* PATH_MAX */
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+/* Version EXTERN
+ * return 4-part version code: 0xMMmmrrrr, where
+ * MM = major release
+ * mm = minor release
+ * rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+ return SRAPATH_VERS;
+}
+
+const char UsageDefaultName[] = "srapath";
+
+rc_t CC UsageSummary (const char * progname)
+{
+ return OUTMSG(("\n"
+ "Usage:\n"
+ " %s [options] <accession> ...\n\n"
+ "Summary:\n"
+ " Tool to produce a list of full paths to files\n"
+ " (SRA and WGS runs, refseqs: reference sequences)\n"
+ " from list of NCBI accessions.\n"
+ "\n", progname));
+}
+
+rc_t CC Usage(const Args *args) {
+ const char * progname = UsageDefaultName;
+ const char * fullpath = UsageDefaultName;
+ rc_t rc;
+
+ if (args == NULL) {
+ rc = RC (rcExe, rcArgv, rcAccessing, rcSelf, rcNull);
+ }
+ else {
+ rc = ArgsProgram(args, &fullpath, &progname);
+ }
+
+ if (rc != 0) {
+ progname = fullpath = UsageDefaultName;
+ }
+
+ UsageSummary(progname);
+
+ OUTMSG((
+ " Output paths are ordered according to accession list.\n"
+ "\n"
+ " The accession search path will be determined according to the\n"
+ " configuration. It will attempt to find files in local and site\n"
+ " repositories, and will also check remote repositories for run\n"
+ " location.\n"));
+ OUTMSG((
+ " This tool produces a path that is 'likely' to be a run, in that\n"
+ " an entry exists in the file system at the location predicted.\n"
+ " It is possible that this path will fail to produce success upon\n"
+ " opening a run if the path does not point to a valid object.\n\n"));
+
+ OUTMSG(("Options:\n"));
+
+ HelpOptionsStandard();
+
+ HelpVersion(fullpath, KAppVersion());
+
+ return rc;
+}
+
+/* KMain
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+ Args * args;
+ rc_t rc;
+
+ rc = ArgsMakeAndHandle (&args, argc, argv, 0);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to parse arguments");
+ else do
+ {
+ uint32_t acount;
+ rc = ArgsParamCount (args, &acount);
+ if (rc)
+ {
+ LOGERR (klogInt, rc, "failed to count parameters");
+ break;
+ }
+
+ if (acount == 0)
+ {
+ rc = MiniUsage (args);
+ break;
+ }
+ else
+ {
+ VFSManager* mgr;
+ rc = VFSManagerMake(&mgr);
+ if (rc)
+ LOGERR ( klogErr, rc, "failed to create VFSManager object" );
+ else
+ {
+ VResolver * resolver;
+
+ rc = VFSManagerGetResolver (mgr, &resolver);
+ if (rc == 0)
+ {
+ uint32_t ix;
+ for ( ix = 0; ix < acount; ++ ix )
+ {
+ const char * pc;
+ rc = ArgsParamValue (args, ix, &pc );
+ if (rc)
+ LOGERR (klogInt, rc,
+ "failed to retrieve parameter value");
+ else
+ {
+ const VPath * upath;
+
+ rc = VPathMakeSysPath ((VPath**)&upath, pc);
+ if (rc == 0)
+ {
+ const VPath * rpath;
+
+ rc = VResolverLocal (resolver, upath, &rpath);
+ if (rc == 0) {
+ STSMSG(1, ("'%s': found locally", pc));
+ }
+ else if (GetRCState(rc) == rcNotFound) {
+ STSMSG(1, ("'%s': not found locally", pc));
+ rc = VResolverRemote(resolver,
+ upath, &rpath, NULL);
+ if (rc == 0) {
+ STSMSG(1, ("'%s': found remotely", pc));
+ }
+ else if (GetRCState(rc) == rcNotFound) {
+ STSMSG(1,
+ ("'%s': not found remotely", pc));
+ }
+ else {
+ STSMSG(1, ("'%s': "
+ "error resolving remotely: %R",
+ pc, rc));
+ }
+ }
+ else {
+ STSMSG(1, (
+ "'%s': error resolving locally: %R",
+ pc, rc));
+ }
+
+ if (rc == 0)
+ {
+ const String * s;
+
+ rc = VPathMakeString (rpath, &s);
+ if (rc == 0)
+ {
+ OUTMSG (("%S\n", s));
+ free ((void*)s);
+ }
+ }
+ else
+ {
+ KDirectory * cwd;
+ rc_t orc = VFSManagerGetCWD (mgr, &cwd);
+ if (orc == 0)
+ {
+ KPathType kpt
+ = KDirectoryPathType(cwd, "%s", pc);
+ switch (kpt &= ~kptAlias)
+ {
+ case kptNotFound:
+ STSMSG(1, ("'%s': not found while "
+ "searching the file system",
+ pc));
+ break;
+ case kptBadPath:
+ STSMSG(1, ("'%s': bad path while "
+ "searching the file system",
+ pc));
+ break;
+ default:
+ STSMSG(1, ("'%s': "
+ "found in the file system",
+ pc));
+ rc = 0;
+ break;
+ }
+ }
+ if (orc == 0 && rc == 0) {
+ if (rc != 0) {
+ PLOGMSG(klogErr, (klogErr,
+ "'$(name)': not found",
+ "name=%s", pc));
+ }
+ else {
+ char resolved[PATH_MAX] = "";
+ rc = KDirectoryResolvePath(cwd, true,
+ resolved, sizeof resolved, pc);
+ if (rc == 0) {
+ STSMSG(1, ("'%s': found in "
+ "the current directory at '%s'",
+ pc, resolved));
+ OUTMSG (("%s\n", resolved));
+ }
+ else {
+ STSMSG(1, ("'%s': cannot resolve "
+ "in the current directory",
+ pc));
+ OUTMSG (("./%s\n", pc));
+ }
+ }
+ }
+ KDirectoryRelease(cwd);
+ }
+ VPathRelease (rpath);
+ VPathRelease (upath);
+ }
+ }
+ }
+ VResolverRelease (resolver);
+ }
+ VFSManagerRelease(mgr);
+ }
+ }
+ ArgsWhack (args);
+
+ } while (0);
+
+ return rc;
+}
diff --git a/tools/srapath/srapath.vers b/tools/srapath/srapath.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/srapath/srapath.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/util/Makefile b/tools/util/Makefile
index d285adc..c970fde 100644
--- a/tools/util/Makefile
+++ b/tools/util/Makefile
@@ -36,7 +36,9 @@ EXT_TOOLS = \
rcexplain \
kdbmeta \
vdb-lock \
- vdb-unlock
+ vdb-unlock \
+ test-sra \
+ vdb-passwd
ALL_TOOLS = \
$(INT_TOOLS) \
@@ -45,25 +47,38 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
- @ $(MAKE_CMD) $(TARGDIR)/std
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/$@
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
#-------------------------------------------------------------------------------
# std
#
$(TARGDIR)/std: \
- $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+ $(addprefix $(BINDIR)/,$(EXT_TOOLS))
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
@@ -90,6 +105,12 @@ RCEXPLAIN_OBJ = \
RCEXPLAIN_LIB = \
-skapp \
+ -svfs \
+ -skurl \
+ -skrypto \
+ -skfg \
+ -skfs \
+ -sksproc \
-sklib
$(BINDIR)/rcexplain: $(RCEXPLAIN_OBJ)
@@ -106,15 +127,15 @@ KDBMETA_OBJ = \
$(addsuffix .$(OBJX),$(KDBMETA_SRC))
KDBMETA_LIB = \
- -ssrapath \
-skapp \
- -skdb \
+ -lwkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
- -skfs \
- -sklib \
- -ldl \
- -lz \
- -lbz2
+ -lkfs \
+ -lkproc \
+ -lklib
$(BINDIR)/kdbmeta: $(KDBMETA_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(KDBMETA_LIB)
@@ -131,17 +152,17 @@ VDB_LOCK_OBJ = \
$(addsuffix .$(OBJX),$(VDB_LOCK_SRC))
VDB_LOCK_LIB = \
- -ssrapath \
-skapp \
-lwvdb \
-lwkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
- -lklib \
-lkproc \
- -ldl \
- -lz \
- -lbz2
+ -lklib \
+ -lm
$(BINDIR)/vdb-lock: $(VDB_LOCK_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_LOCK_LIB)
@@ -158,38 +179,70 @@ VDB_UNLOCK_OBJ = \
$(addsuffix .$(OBJX),$(VDB_UNLOCK_SRC))
VDB_UNLOCK_LIB = \
- -ssrapath \
-skapp \
-lwvdb \
-lwkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
- -lklib \
-lkproc \
- -ldl \
- -lz \
- -lbz2
+ -lklib \
+ -lm
$(BINDIR)/vdb-unlock: $(VDB_UNLOCK_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_UNLOCK_LIB)
-
#-------------------------------------------------------------------------------
-# testld - test dynamic load of libraries
+# test-sra: print config, resolve sra, check dependencies
#
-TESTLD_SRC = \
- testld
-TESTLD_OBJ = \
- $(addsuffix .$(OBJX),$(TESTLD_SRC))
+T_SRC = \
+ test-sra
+
+T_OBJ = \
+ $(addsuffix .$(OBJX),$(T_SRC))
+
+T_LIB = \
+ -lkapp \
+ -dalign-reader \
+ $(READONLY_SCHEMA_LIBS) \
+ -lsradb \
+ -lvdb \
+ -lkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -dksrch \
+ -lkproc \
+ -lklib \
+ -lm
-TESTLD_LIB = \
+$(BINDIR)/test-sra: $(T_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(T_LIB)
+
+#----------------------------------------------------------------
+# vdb-passwd
+#
+VDB_PASSWD_SRC = \
+ vdb-passwd \
+ syspass
+
+VDB_PASSWD_OBJ = \
+ $(addsuffix .$(OBJX),$(VDB_PASSWD_SRC))
+
+VDB_PASSWD_LIB = \
-skapp \
- -skfs \
- -sklib \
- -ldl \
- -lz \
- -lbz2
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -sksproc \
+ -lklib
-$(BINDIR)/testld: $(TESTLD_OBJ)
- $(LD) --exe -o $@ $^ $(TESTLD_LIB)
+$(BINDIR)/vdb-passwd: $(VDB_PASSWD_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_PASSWD_LIB)
diff --git a/tools/util/kdbmeta.c b/tools/util/kdbmeta.c
index a1d4bf3..27fd8ca 100644
--- a/tools/util/kdbmeta.c
+++ b/tools/util/kdbmeta.c
@@ -32,6 +32,15 @@
* for the "big loop"
*/
+
+/* The original intention of this tool was to support updating nodes.
+ This was later removed with the thought that this functionality would
+ be better implemented by another tool.
+
+ Going to temporarily add it in...
+*/
+#define ALLOW_UPDATE 1
+
#include "kdbmeta.vers.h"
#include <sra/srapath.h>
@@ -61,25 +70,24 @@
#include <assert.h>
#include <ctype.h>
+/* use cpp define CONST */
+#undef CONST
+#if ALLOW_UPDATE
+#define CONST
+#else
+#define CONST const
+#endif
-enum
-{
- kptMetadata = kptColumn + 1,
- kptPrereleaseTbl
-};
-
-
-typedef struct KDBMetaConst KDBMetaConst;
-struct KDBMetaConst
+typedef struct KDBMetaParms KDBMetaParms;
+struct KDBMetaParms
{
- const KDBManager *mgr;
- const KMetadata *md;
+ CONST KDBManager *mgr;
+ CONST KMetadata *md;
const char *targ;
const Vector *q;
rc_t rc;
};
-
/* select reporting
*/
static bool xml_ish = true;
@@ -87,6 +95,8 @@ static int indent_lvl;
static int tabsz = 2;
static const char *spaces = " ";
static bool as_unsigned = false;
+static const char *table_arg = NULL;
+static bool read_only_arg = true;
static
void indent ( void )
@@ -107,13 +117,25 @@ void indent ( void )
static
void node_open ( const char *path, size_t plen )
{
+ if ( plen && path[plen - 1] == '/' ) {
+ /* do not use trailing slash */
+ --plen;
+ }
if ( xml_ish )
{
+ int size = plen;
/* find leaf name of node */
const char *slash = string_rchr ( path, plen, '/' );
+ if ( slash ) {
+ /* make sure not to print trailing slash */
+ size = plen - (slash - path) - 1;
+ if ( size < 0 ) {
+ size = 0;
+ }
+ }
indent ();
- OUTMSG (( "<%s", ( slash != NULL ) ? slash + 1 : path ));
+ OUTMSG (( "<%.*s", size, ( slash != NULL ) ? slash + 1 : path ));
}
}
@@ -121,16 +143,26 @@ static
void node_close ( const char *path, size_t plen,
size_t vsize, uint32_t num_children, bool close_indent )
{
+ if ( plen && path[plen - 1] == '/' ) {
+ --plen;
+ }
if ( xml_ish )
{
if ( vsize == 0 && num_children == 0 )
OUTMSG (( "/>\n" ));
else
{
+ int size = plen;
const char *slash = string_rchr ( path, plen, '/' );
+ if ( slash ) {
+ size = plen - (slash - path) - 1;
+ if ( size < 0 ) {
+ size = 0;
+ }
+ }
if ( close_indent )
indent ();
- OUTMSG (( "</%s>\n", ( slash != NULL ) ? slash + 1 : path ));
+ OUTMSG (( "</%.*s>\n", size, ( slash != NULL ) ? slash + 1 : path ));
}
}
}
@@ -328,6 +360,9 @@ rc_t md_select_expr ( const KMDataNode *node, char *path, size_t psize, int plen
/* close it off */
node_close ( path, plen, 0, 0, false );
+
+ /* Exit here if an attribute was requested in query */
+ return 0;
}
else
{
@@ -476,69 +511,183 @@ rc_t md_select_expr ( const KMDataNode *node, char *path, size_t psize, int plen
return 0;
}
+#if ALLOW_UPDATE
+static
+rc_t md_update_expr ( KMDataNode *node, const char *path, const char *attr, const char *expr )
+{
+ rc_t rc;
+
+ /* according to documentation, "expr" is allowed to be text
+ or text with escaped hex sequences. examine for escaped hex */
+ size_t len = string_size ( expr );
+ char *buff = malloc ( len + 1 );
+ if ( buff == NULL )
+ rc = RC ( rcExe, rcMetadata, rcUpdating, rcMemory, rcExhausted );
+ else
+ {
+ size_t i, j;
+ for ( i = j = 0; i < len; ++ i, ++ j )
+ {
+ if ( ( buff [ j ] = expr [ i ] ) == '\\' )
+ {
+ /* we know "expr" is NUL-terminated, so this is safe */
+ if ( tolower ( expr [ i + 1 ] ) == 'x' &&
+ isxdigit ( expr [ i + 2 ] ) &&
+ isxdigit ( expr [ i + 3 ] ) )
+ {
+ int msn = toupper ( expr [ i + 2 ] ) - '0';
+ int lsn = toupper ( expr [ i + 3 ] ) - '0';
+ if ( msn >= 10 )
+ msn += '0' - 'A' + 10;
+ if ( lsn >= 10 )
+ lsn += '0' - 'A' + 10;
+ buff [ j ] = ( char ) ( ( msn << 4 ) | lsn );
+ i += 3;
+ }
+ }
+ }
+
+ if ( attr != NULL )
+ {
+ /* set attribute value */
+ buff [ j ] = 0;
+ rc = KMDataNodeWriteAttr ( node, attr, buff );
+ }
+ else
+ {
+ /* now set the value of the node */
+ rc = KMDataNodeWrite ( node, buff, j );
+ }
+ free ( buff );
+ }
+
+ return rc;
+}
+#endif
+
static
bool CC md_select ( void *item, void *data )
{
bool fail = true;
- KDBMetaConst *pb = data;
-
- const KMDataNode *node;
- pb -> rc = KMetadataOpenNodeRead ( pb -> md, & node, NULL );
+ KDBMetaParms *pb = data;
+
+ CONST KMDataNode *node;
+#if ALLOW_UPDATE
+ bool read_only = true;
+ if ( ! read_only_arg ) {
+ pb -> rc = KMetadataOpenNodeUpdate ( pb -> md, & node, NULL );
+ if ( pb -> rc == 0 )
+ read_only = false;
+ }
+#endif
+ if ( read_only )
+ pb -> rc = KMetadataOpenNodeRead ( pb -> md, ( const KMDataNode** ) & node, NULL );
if ( pb -> rc != 0 )
PLOGERR ( klogErr, (klogErr, pb -> rc, "failed to open root node for '$(path)'", "path=%s", pb -> targ ));
else
{
- const char *expr = ( const void* ) item;
- const char *attr = strchr ( expr, '@' );
+ bool wildcard;
+ char *expr, *attr, path [ 4096 ];
+ size_t len = string_copy_measure ( path, sizeof path, item );
- size_t len;
- char path [ 4096 ];
+ /* detect assignment */
+ expr = string_rchr ( path, len, '=' );
+ if ( expr != NULL )
+ {
+ len = expr - path;
+ * expr ++ = 0;
+ }
+ attr = string_rchr ( path, len, '@' );
+ if ( attr != NULL )
+ {
+ len = attr - path;
+ * attr ++ = 0;
+ }
- pb -> rc = attr == NULL ?
- string_printf ( path, sizeof path, & len, "%s", expr ):
- string_printf ( path, sizeof path, & len, "%.*s", ( uint32_t ) ( attr ++ - expr ), expr );
- if ( pb -> rc != 0 )
- PLOGERR ( klogErr, (klogErr, pb -> rc, "failed to evaluate query '$(expr)'", "expr=%s", expr ));
- else
+ if ( expr != NULL )
{
- bool wildcard = false;
- if ( len >= 1 && path [ len - 1 ] == '*' )
+#if ALLOW_UPDATE
+ if ( read_only )
{
- if ( len == 1 )
- {
- path [ len = 0 ] = 0;
- wildcard = true;
- }
- else if ( len >= 2 && path [ len - 2 ] == '/' )
- {
- path [ len -= 2 ] = 0;
- wildcard = true;
- }
+ PLOGMSG ( klogWarn, ( klogWarn, "node update expressions are not supported - "
+ "'$(path)' is read-only - "
+ "'$(expr)' treated as select."
+ , "path=%s,expr=%s", pb -> targ, item ) );
+ expr = NULL;
}
+#else
+ PLOGMSG ( klogWarn, ( klogWarn, "node update expressions are not supported - "
+ "'$(expr)' treated as select.", "expr=%s", item ) );
+ expr = NULL;
+#endif
+ }
- if ( len == 0 )
- pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
- else
+ wildcard = false;
+ if ( len >= 1 && path [ len - 1 ] == '*' )
+ {
+ if ( len == 1 )
{
- const KMDataNode *root = node;
- pb -> rc = KMDataNodeOpenNodeRead ( root, & node, path );
- KMDataNodeRelease ( root );
+ path [ len = 0 ] = 0;
+ wildcard = true;
+ }
+ else if ( len >= 2 && path [ len - 2 ] == '/' )
+ {
+ path [ len -= 2 ] = 0;
+ wildcard = true;
+ }
+ }
- if ( pb -> rc != 0 )
- {
- PLOGERR ( klogErr, (klogErr, pb -> rc, "failed to open node '$(node) for '$(path)'",
- "node=%s,path=%s", path, pb -> targ ));
- }
- else
- {
- pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
- }
+#if ALLOW_UPDATE
+ if ( expr != NULL )
+ {
+ KMDataNode *root = node;
+
+ if ( wildcard || len == 0 )
+ {
+ pb -> rc = RC ( rcExe, rcMetadata, rcUpdating, rcExpression, rcIncorrect );
+ PLOGERR ( klogErr, ( klogErr, pb -> rc, "node updates require explicit paths - "
+ "'$(expr)' cannot be evaluated", "expr=%s", item ) );
+ return true;
+ }
+
+ pb -> rc = KMDataNodeOpenNodeUpdate ( root, & node, path );
+ KMDataNodeRelease ( root );
+
+ if ( pb -> rc != 0 )
+ {
+ PLOGERR ( klogErr, (klogErr, pb -> rc, "failed to open node '$(node) for '$(path)'",
+ "node=%s,path=%s", path, pb -> targ ));
+ }
+ else
+ {
+ pb -> rc = md_update_expr ( node, path, attr, expr );
}
+ }
+ else
+#endif
+
+ if ( len == 0 )
+ pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
+ else
+ {
+ const KMDataNode *root = node;
+ pb -> rc = KMDataNodeOpenNodeRead ( root, ( const KMDataNode** ) & node, path );
+ KMDataNodeRelease ( root );
- if ( pb -> rc == 0 )
- fail = false;
+ if ( pb -> rc != 0 )
+ {
+ PLOGERR ( klogErr, (klogErr, pb -> rc, "failed to open node '$(node) for '$(path)'",
+ "node=%s,path=%s", path, pb -> targ ));
+ }
+ else
+ {
+ pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
+ }
}
+ if ( pb -> rc == 0 )
+ fail = false;
+
KMDataNodeRelease ( node );
}
@@ -546,17 +695,38 @@ bool CC md_select ( void *item, void *data )
}
static
-rc_t col_select ( KDBMetaConst * pb)
+rc_t col_select ( KDBMetaParms * pb)
{
- const KColumn *col;
+ CONST KColumn *col;
rc_t rc;
- rc = KDBManagerOpenColumnRead ( pb -> mgr, & col, pb->targ );
+ bool read_only = true;
+
+#if ALLOW_UPDATE
+ if ( ! read_only_arg ) {
+ read_only = false;
+
+ rc = KDBManagerOpenColumnUpdate ( pb -> mgr, & col, pb->targ );
+ if ( rc != 0 )
+ read_only = true;
+ }
+#endif
+ if ( read_only )
+ rc = KDBManagerOpenColumnRead ( pb -> mgr, ( const KColumn** ) & col, pb->targ );
if ( rc != 0 )
PLOGERR ( klogErr, (klogErr, rc, "failed to open column '$(col)'", "col=%s", pb->targ ));
else
{
- rc = KColumnOpenMetadataRead ( col, & pb -> md );
+#if ALLOW_UPDATE
+ if ( ! read_only_arg ) {
+ read_only = false;
+ rc = KColumnOpenMetadataUpdate ( col, & pb -> md );
+ if ( rc != 0 )
+ read_only = true;
+ }
+#endif
+ if ( read_only )
+ rc = KColumnOpenMetadataRead ( col, ( const KMetadata** ) & pb -> md );
if ( rc != 0 )
PLOGERR ( klogErr, (klogErr, rc, "failed to open metadata for column '$(col)'", "col=%s", pb->targ ));
else
@@ -577,17 +747,39 @@ rc_t col_select ( KDBMetaConst * pb)
}
static
-rc_t tbl_select ( KDBMetaConst * pb)
+rc_t tbl_select ( KDBMetaParms * pb)
{
- const KTable *tbl;
+ CONST KTable *tbl;
rc_t rc;
- rc = KDBManagerOpenTableRead ( pb -> mgr, & tbl, pb->targ );
+ bool read_only = true;
+
+#if ALLOW_UPDATE
+ if ( ! read_only_arg ) {
+ read_only = false;
+
+ rc = KDBManagerOpenTableUpdate ( pb -> mgr, & tbl, pb->targ );
+ if ( rc != 0 )
+ read_only = true;
+ }
+#endif
+ if ( read_only )
+ rc = KDBManagerOpenTableRead ( pb -> mgr, ( const KTable** ) & tbl, pb->targ );
if ( rc != 0 )
PLOGERR ( klogErr, (klogErr, rc, "failed to open table '$(tbl)'", "tbl=%s", pb->targ ));
else
{
- rc = KTableOpenMetadataRead ( tbl, & pb -> md );
+ read_only = true;
+#if ALLOW_UPDATE
+ if ( ! read_only_arg ) {
+ read_only = false;
+ rc = KTableOpenMetadataUpdate ( tbl, & pb -> md );
+ if ( rc != 0 )
+ read_only = true;
+ }
+#endif
+ if ( read_only )
+ rc = KTableOpenMetadataRead ( tbl, ( const KMetadata** ) & pb -> md );
if ( rc != 0 )
PLOGERR ( klogErr, (klogErr, rc, "failed to open metadata for table '$(tbl)'", "tbl=%s", pb->targ ));
else
@@ -608,29 +800,94 @@ rc_t tbl_select ( KDBMetaConst * pb)
}
static
-rc_t db_select (KDBMetaConst * pb)
+rc_t db_select (KDBMetaParms * pb)
{
- const KDatabase *db;
+ CONST KDatabase *db;
rc_t rc;
- rc = KDBManagerOpenDBRead ( pb -> mgr, & db, pb->targ );
- if ( pb -> rc != 0 )
- PLOGERR ( klogErr, (klogErr, rc, "failed to open db '$(db)'", "db=%s", pb->targ ));
- else
- {
- rc = KDatabaseOpenMetadataRead ( db, & pb -> md );
- if ( rc != 0 )
- PLOGERR ( klogErr, (klogErr, rc, "failed to open metadata for db '$(db)'", "db=%s", pb->targ ));
- else
- {
- bool fail;
+ bool read_only = true;
- fail = VectorDoUntil ( pb -> q, false, md_select, pb );
- if(fail)
- rc = pb->rc;
- KMetadataRelease ( pb -> md ), pb -> md = NULL;
+#if ALLOW_UPDATE
+ if ( ! read_only_arg ) {
+ read_only = false;
+
+ rc = KDBManagerOpenDBUpdate ( pb -> mgr, & db, pb->targ );
+ if ( rc != 0 )
+ read_only = true;
+ }
+#endif
+ if ( read_only )
+ rc = KDBManagerOpenDBRead ( pb -> mgr, ( const KDatabase** ) & db, pb->targ );
+ if ( rc != 0 ) {
+ PLOGERR ( klogErr, (klogErr, rc, "failed to open db '$(db)'",
+ "db=%s", pb->targ ));
+ }
+ else {
+ CONST KTable* tbl = NULL;
+ if (table_arg) {
+ read_only = true;
+#if ALLOW_UPDATE
+ if ( ! read_only_arg ) {
+ read_only = false;
+ rc = KDatabaseOpenTableUpdate ( db, &tbl, table_arg );
+ if ( rc != 0 )
+ read_only = true;
+ }
+#endif
+ if ( read_only )
+ rc = KDatabaseOpenTableRead ( db, ( const KTable** ) &tbl, table_arg );
+ if ( rc != 0 ) {
+ PLOGERR ( klogErr, (klogErr, rc,
+ "failed to open table '$(table)'", "table=%s", table_arg ));
+ }
}
+ if ( rc == 0) {
+ if (tbl) {
+ read_only = true;
+#if ALLOW_UPDATE
+ if ( ! read_only_arg ) {
+ read_only = false;
+ rc = KTableOpenMetadataUpdate ( tbl, & pb -> md );
+ if ( rc != 0 )
+ read_only = true;
+ }
+#endif
+ if ( read_only )
+ rc = KTableOpenMetadataRead ( tbl, ( const KMetadata** ) & pb -> md );
+ if ( rc != 0 ) {
+ PLOGERR ( klogErr, (klogErr, rc,
+ "failed to open metadata for table '$(table)'",
+ "table=%s", table_arg ));
+ }
+ }
+ else {
+ read_only = true;
+#if ALLOW_UPDATE
+ if ( ! read_only_arg ) {
+ read_only = false;
+ rc = KDatabaseOpenMetadataUpdate ( db, & pb -> md );
+ if ( rc != 0 )
+ read_only = true;
+ }
+#endif
+ if ( read_only )
+ rc = KDatabaseOpenMetadataRead ( db, ( const KMetadata** ) & pb -> md );
+ if ( rc != 0 ) {
+ PLOGERR ( klogErr, (klogErr, rc,
+ "failed to open metadata for db '$(db)'",
+ "db=%s", pb->targ ));
+ }
+ }
+ if ( rc == 0 ) {
+ bool fail;
+ fail = VectorDoUntil ( pb -> q, false, md_select, pb );
+ if(fail)
+ rc = pb->rc;
+ KMetadataRelease ( pb -> md ), pb -> md = NULL;
+ }
+ }
+ KTableRelease ( tbl );
KDatabaseRelease ( db );
}
@@ -638,9 +895,9 @@ rc_t db_select (KDBMetaConst * pb)
}
static
-rc_t tool_select ( const KDBManager * mgr, uint32_t type, const char * targ, const Vector * q)
+rc_t tool_select ( CONST KDBManager * mgr, uint32_t type, const char * targ, const Vector * q)
{
- KDBMetaConst pb;
+ KDBMetaParms pb;
rc_t rc;
pb.mgr = mgr;
@@ -694,8 +951,11 @@ rc_t CC UsageSummary (const char * progname)
" %s [Options] <target> [<query> ...]\n"
"\n"
"Summary:\n"
- " Display the contents of one or more metadata stores.\n",
- progname);
+ " Display the contents of one or more metadata stores.\n"
+#if ALLOW_UPDATE
+ " Update metadata.\n"
+#endif
+ , progname);
}
static const char *const t1 [] = { "path-to-database", "access database metadata", NULL };
@@ -707,19 +967,43 @@ static const char *const q1 [] = { "*","all nodes and attributes", NULL };
static const char *const q2 [] = { "NAME","a named root node and children", NULL };
static const char *const q3 [] = { "PATH/NAME","an internal node and children", NULL };
static const char *const q4 [] = { "<node>@ATTR","a named attribute", NULL };
+#if ALLOW_UPDATE
static const char *const q5 [] = { "<obj>=VALUE","a simple value assignment where",
"value string is text, and binary",
"values use hex escape codes", NULL };
+#endif
-static const char* o1[] = { "try to interpret binary values as unsigned ints", NULL };
+/* static const char* o1[] = { "try to interpret binary values as unsigned ints", NULL }; */
-const OptDef opt[] =
-{
- {"unsigned", NULL, NULL, o1, 0, false, false}
+#define ALIAS_READ_ONLY "r"
+#define OPTION_READ_ONLY "read-only"
+static const char* USAGE_READ_ONLY[] = { "operate in read-only mode", NULL };
+
+#define ALIAS_TABLE "T"
+#define OPTION_TABLE "table"
+static const char* USAGE_TABLE[] = { "table-name", NULL };
+
+#define ALIAS_UNSIGNED "u"
+#define OPTION_UNSIGNED "unsigned"
+static const char* USAGE_UNSIGNED[]
+ = { "print numeric values as unsigned", NULL };
+
+const OptDef opt[] = {
+ { OPTION_TABLE , ALIAS_TABLE , NULL, USAGE_TABLE , 1, true , false }
+ ,{ OPTION_UNSIGNED , ALIAS_UNSIGNED , NULL, USAGE_UNSIGNED , 1, false, false }
+#if ALLOW_UPDATE
+ ,{ OPTION_READ_ONLY, ALIAS_READ_ONLY, NULL, USAGE_READ_ONLY, 1, false, false }
+#endif
};
static const char * const * target_usage [] = { t1, t2, t3, t4 };
-static const char * const * query_usage [] = { q1, q2, q3, q4, q5 };
+static const char * const * query_usage [] =
+{
+ q1, q2, q3, q4
+#if ALLOW_UPDATE
+ , q5
+#endif
+};
rc_t CC Usage (const Args * args)
@@ -789,7 +1073,7 @@ rc_t CC Usage (const Args * args)
*/
rc_t CC KMain ( int argc, char *argv [] )
{
- Args * args;
+ Args * args = NULL;
rc_t rc;
rc = ArgsMakeAndHandle(&args, argc, argv, 1, opt, sizeof(opt) / sizeof(opt[0]));
@@ -802,21 +1086,50 @@ rc_t CC KMain ( int argc, char *argv [] )
uint32_t pcount;
int ix;
- if( (rc = ArgsOptionCount(args, opt[0].name, &pcount)) != 0 ) {
+#if ALLOW_UPDATE
+ read_only_arg = false;
+ rc = ArgsOptionCount (args, OPTION_READ_ONLY, &pcount);
+ if (rc) {
+ LOGERR(klogErr, rc,
+ "Failure to get '" OPTION_READ_ONLY "' argument");
+ break;
+ }
+ read_only_arg = pcount > 0;
+#endif
+
+ rc = ArgsOptionCount (args, OPTION_UNSIGNED, &pcount);
+ if (rc) {
+ LOGERR(klogErr, rc,
+ "Failure to get '" OPTION_UNSIGNED "' argument");
break;
}
as_unsigned = pcount > 0;
+ rc = ArgsOptionCount (args, OPTION_TABLE, &pcount);
+ if (rc) {
+ LOGERR(klogErr, rc,
+ "Failure to get '" OPTION_TABLE "' argument");
+ break;
+ }
+ if (pcount) {
+ rc = ArgsOptionValue (args, OPTION_TABLE, 0, &table_arg);
+ if (rc) {
+ LOGERR(klogErr, rc,
+ "Failure to get '" OPTION_TABLE "' argument");
+ break;
+ }
+ }
+
rc = ArgsParamCount (args, &pcount);
if (rc)
break;
if (pcount == 0)
{
- rc = RC (rcExe, rcArgv, rcReading, rcParam, rcInsufficient);
- LOGERR (klogFatal, rc, "missing database target path and queries" );
+ OUTMSG (( "missing database target path and queries\n" ));
MiniUsage (args);
- break;
+ ArgsWhack(args);
+ exit(EXIT_FAILURE);
}
rc = KDirectoryNativeDir (&curwd);
@@ -826,9 +1139,12 @@ rc_t CC KMain ( int argc, char *argv [] )
}
else
{
- const KDBManager * mgr;
-
+ CONST KDBManager * mgr;
+#if ALLOW_UPDATE
+ rc = KDBManagerMakeUpdate (&mgr, curwd);
+#else
rc = KDBManagerMakeRead (&mgr, curwd);
+#endif
if (rc)
LOGERR (klogInt, rc, "Unable to open the database system");
else
@@ -840,26 +1156,29 @@ rc_t CC KMain ( int argc, char *argv [] )
else
{
char objpath [ 4096 ];
- SRAPath * sra_path;
bool found;
uint32_t type;
found = false;
- rc = SRAPathMake (&sra_path, NULL);
- if ( rc == 0 )
+#if 1 /* TOOLS_USE_SRAPATH != 0 */
{
- if ( ! SRAPathTest (sra_path, pc))
+ SRAPath * sra_path = NULL;
+ rc = SRAPathMake (&sra_path, NULL);
+ if ( rc == 0 )
{
- rc = SRAPathFind (sra_path, pc, objpath, sizeof (objpath));
- if (rc == 0)
- found = true;
+ if ( ! SRAPathTest (sra_path, pc))
+ {
+ rc = SRAPathFind (sra_path, pc, objpath, sizeof (objpath));
+ if (rc == 0)
+ found = true;
+ }
+ SRAPathRelease (sra_path);
+ }
+ else if ( GetRCState ( rc ) == rcNotFound && GetRCTarget ( rc ) == rcDylib )
+ {
+ rc = 0;
}
- SRAPathRelease (sra_path);
- }
- else if ( GetRCState ( rc ) == rcNotFound && GetRCTarget ( rc ) == rcDylib )
- {
- rc = 0;
}
if ( ! found)
@@ -870,6 +1189,7 @@ rc_t CC KMain ( int argc, char *argv [] )
if (rc)
LOGERR (klogFatal, rc, "Unable to resolved target path");
}
+#endif
type = KDBManagerVPathType (mgr, objpath, NULL);
@@ -938,6 +1258,9 @@ rc_t CC KMain ( int argc, char *argv [] )
}
} while (0);
}
- /* done */
+
+ ArgsWhack(args);
+ args = NULL;
+
return rc;
}
diff --git a/tools/util/kdbmeta.vers b/tools/util/kdbmeta.vers
index 04b10b4..f90b1af 100644
--- a/tools/util/kdbmeta.vers
+++ b/tools/util/kdbmeta.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/util/kdbmeta.vers.h b/tools/util/kdbmeta.vers.h
deleted file mode 100644
index 5521f79..0000000
--- a/tools/util/kdbmeta.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define KDBMETA_VERS 0x02010007
diff --git a/tools/util/mac/syspass.c b/tools/util/mac/syspass.c
new file mode 100644
index 0000000..2a2d9f1
--- /dev/null
+++ b/tools/util/mac/syspass.c
@@ -0,0 +1,48 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <klib/rc.h>
+
+#include <readpassphrase.h>
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz) {
+ if (prompt == NULL || buf == NULL) {
+ return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+ }
+
+ if (bufsiz == 0)
+ { return 0; }
+
+ buf[0] = '\0';
+
+ if (readpassphrase(prompt, buf, bufsiz, 0) == NULL) {
+ return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/tools/util/rcexplain.vers b/tools/util/rcexplain.vers
index 04b10b4..f90b1af 100644
--- a/tools/util/rcexplain.vers
+++ b/tools/util/rcexplain.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/util/rcexplain.vers.h b/tools/util/rcexplain.vers.h
deleted file mode 100644
index 64b667d..0000000
--- a/tools/util/rcexplain.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define RCEXPLAIN_VERS 0x02010007
diff --git a/tools/util/rowwritetest.c b/tools/util/rowwritetest.c
index 7d9d2a9..9d8a3e3 100644
--- a/tools/util/rowwritetest.c
+++ b/tools/util/rowwritetest.c
@@ -15,7 +15,6 @@
#include <stdlib.h> /* malloc */
#include <assert.h>
#include <os-native.h>
-#include <fmtdef.h>
#define OPTION_TABLE "table-path"
#define OPTION_ROW "row-count"
@@ -31,11 +30,6 @@ OptDef MyOptions[] =
{ OPTION_ROW, ALIAS_ROW, NULL, row_usage, 1, true, false }
};
-static bool __BadLogLevel = false;
-static const char *__dummy4NextLogLevel(void *data) {
- __BadLogLevel = true;
- return "info";
-}
#define COLUMNS 5
#define ROWLEN 64
#define ROWS 0x400000
@@ -318,18 +312,18 @@ rc_t run (const char * table_path, uint64_t N )
KDirectoryRelease(dir);
if (rc == 0) {
puts("");
- printf("%" LD64 " rows, %d bytes per row:\n", N, ROWLEN);
+ KOutMsg("%ld rows, %d bytes per row:\n", N, ROWLEN);
for (i = 0; i < COLUMNS; ++i) {
puts(colInf[i]);
}
puts("");
for (i = 0; i < COLUMNS; ++i) {
int64_t over = sizes[i] - total[i];
- printf("C%d: %9" LD64 " bytes written; "
- "%9" LD64 " in 'data'", i + 1, total[i], sizes[i]);
+ KOutMsg("C%d: %9ld bytes written; "
+ "%9ld in 'data'", i + 1, total[i], sizes[i]);
if (over > 0) {
double p = 100.0 * over / sizes[i];
- printf(": %7" LD64 " extra bytes (%.4f%%)\n", over, p);
+ printf(": %7ld extra bytes (%.4f%%)\n", over, p);
}
else {
puts("");
diff --git a/tools/util/rowwritetest.vers b/tools/util/rowwritetest.vers
index 7dea76e..f90b1af 100644
--- a/tools/util/rowwritetest.vers
+++ b/tools/util/rowwritetest.vers
@@ -1 +1 @@
-1.0.1
+2.3.2
diff --git a/tools/util/syspass-priv.h b/tools/util/syspass-priv.h
new file mode 100644
index 0000000..6f8cb80
--- /dev/null
+++ b/tools/util/syspass-priv.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_util_syspass_priv_
+#define _h_util_syspass_priv_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_util_syspass_priv_ */
diff --git a/tools/util/test-sra.c b/tools/util/test-sra.c
new file mode 100644
index 0000000..fab93ea
--- /dev/null
+++ b/tools/util/test-sra.c
@@ -0,0 +1,1165 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*
+SRR125365
+SRR292195
+SRR413283
+SRR600096
+SRR619505
+SRR953827
+/home/klymenka/ncbi/public/sra/SRR619505
+/home/klymenka/ncbi/public/sra/SRR619505.sra
+/netmnt/traces04/sra2/SRR/000122/SRR125365
+/netmnt/traces04/sra2/SRR/000586/SRR600096
+/netmnt/traces04/sra3/SRR/000403/SRR413283
+/netmnt/traces04/sra4/SRR/000345/SRR353827
+/netmnt/traces04/sra5/SRR/000604/SRR619505
+/netmnt/traces04/sra7/SRR/000285/SRR292195
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col/
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col/READ
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col/READ/md
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col/READ/md5
+/netmnt/traces04/sra7/SRR/000285/SRR292195/idx
+/netmnt/traces04/sra7/SRR/000285/SRR292195/idx/skey
+/panfs/traces01/sra_backup/SRA/sra_trash/duplicatedOn_sra-s/sra0/SRR005459
+http://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByRun/sra/SRR/SRR619/SRR619505/SRR619505.sra
+*/
+
+#include <kapp/main.h> /* KMain */
+#include <kdb/manager.h> /* kptDatabase */
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/database.h> /* VDatabase */
+#include <vdb/dependencies.h> /* VDBDependencies */
+#include <kdb/manager.h> /* kptDatabase */
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h> /* VPath */
+#include <kns/manager.h> /* KNSManager */
+#include <kfg/config.h> /* KConfig */
+#include <kfs/directory.h> /* KDirectory */
+#include <kfs/file.h> /* KFile */
+#include <klib/printf.h> /* string_vprintf */
+#include <klib/log.h> /* KLogHandlerSet */
+#include <klib/out.h> /* KOutMsg */
+#include <klib/text.h> /* String */
+#include <klib/rc.h>
+#include <ctype.h> /* isprint */
+#include <stdlib.h> /* calloc */
+#include <string.h> /* memset */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
+
+typedef enum {
+ eCfg = 1,
+/* eType = 2, */
+ eResolve = 2,
+ eDependMissing = 4,
+ eDependAll = 8,
+ eAll = 16
+} Type;
+typedef struct {
+ KConfig *cfg;
+ KDirectory *dir;
+ const VDBManager *mgr;
+ VResolver *resolver;
+ uint8_t tests;
+ bool recursive;
+ bool noVDBManagerPathType;
+} Main;
+
+uint32_t CC KAppVersion(void) { return 0; }
+
+const char UsageDefaultName[] = "test-sra";
+
+rc_t CC UsageSummary(const char *prog_name) {
+ return KOutMsg(
+ "Usage:\n"
+ " %s [+crdDa] [-crdDa] [options] name [ name... ]\n"
+ " %s -R [-N] name [ name... ]\n",
+ prog_name, prog_name);
+}
+
+rc_t CC Usage(const Args *args) {
+ rc_t rc2 = 0;
+
+ const char *progname, *fullpath;
+ rc_t rc = ArgsProgram(args, &fullpath, &progname);
+ if (rc != 0) {
+ progname = fullpath = UsageDefaultName;
+ }
+
+ rc2 = UsageSummary(progname);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+
+/* " t - test object's VDB type\n" */
+ rc2 = KOutMsg("\n"
+ "Test [SRA] object, resolve it, print dependencies, configuration\n\n"
+ "[+tests] - add tests\n"
+ "[-tests] - remove tests\n\n"
+ "Tests:\n"
+ " c - print configuration\n"
+ " r - call VResolver\n"
+ " d - call ListDependencies(missing)\n"
+ " D - call ListDependencies(all)\n"
+ " a - all tests\n\n"
+ "If no tests were specified then all tests will be run\n\n"
+ "-R - check object type recursively\n"
+ "-N - do not call VDBManagerPathType\n\n"
+ "More options:\n");
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+
+ HelpOptionsStandard();
+
+ return rc;
+}
+
+static bool testArg(const char *arg, uint8_t *testOn, uint8_t *testOff) {
+ int j = 1;
+ uint8_t *res = NULL;
+
+/* const char tests[] = "ctrdDa"; */
+ const char tests[] = "crdDa";
+
+ assert(arg && testOn && testOff);
+ if (arg[0] != '+' && arg[0] != '-') {
+ return false;
+ }
+
+ if (arg[0] == '-' &&
+ arg[1] != '\0' && strchr(tests, arg[1]) == NULL)
+ {
+ return false;
+ }
+
+ res = arg[0] == '-' ? testOff : testOn;
+
+ for (j = 1; arg[j] != '\0'; ++j) {
+ char *c = strchr(tests, arg[j]);
+ if (c != NULL) {
+ int offset = c - tests;
+ *res |= 1 << offset;
+ }
+ }
+
+ return true;
+}
+
+static uint8_t Turn(uint8_t in, uint8_t tests, bool on) {
+ uint8_t c = 1;
+ for (c = 1; c < eAll; c <<= 1) {
+ if (tests & c) {
+ if (on) {
+ in |= c;
+ }
+ else {
+ in &= ~c;
+ }
+ }
+ }
+ return in;
+}
+
+static uint8_t processTests(uint8_t testsOn, uint8_t testsOff) {
+ uint8_t tests = 0;
+
+ bool allOn = false;
+ bool allOff = false;
+
+ if (testsOn & eAll && testsOff & eAll) {
+ testsOn &= ~eAll;
+ testsOff &= ~eAll;
+ }
+ else if (testsOn & eAll) {
+ allOn = true;
+ }
+ else if (testsOff & eAll) {
+ allOff = true;
+ }
+
+ if (allOn) {
+ tests = ~0;
+ tests = Turn(tests, testsOff, false);
+ }
+ else if (allOff) {
+ tests = Turn(tests, testsOn, true);
+ }
+ else if (testsOn != 0 || testsOff != 0) {
+ tests = Turn(tests, testsOff, false);
+ tests = Turn(tests, testsOn, true);
+ }
+ else {
+ tests = ~0;
+ }
+
+ return tests;
+}
+
+static bool MainHasTest(const Main *self, Type type) {
+ assert(self);
+ return self->tests & type;
+}
+
+static void MainPrint(const Main *self) {
+ return;
+
+ assert(self);
+
+ if (MainHasTest(self, eCfg)) {
+ KOutMsg("eCfg\n");
+ }
+
+/* if (MainHasTest(self, eType)) {
+ KOutMsg("eType\n");
+ }*/
+
+ if (MainHasTest(self, eResolve)) {
+ KOutMsg("eResolve\n");
+ }
+
+ if (MainHasTest(self, eDependMissing)) {
+ KOutMsg("eDependMissing\n");
+ }
+
+ if (MainHasTest(self, eDependAll)) {
+ KOutMsg("eDependAll\n");
+ }
+}
+
+static rc_t MainInitObjects(Main *self) {
+ rc_t rc = 0;
+
+ VFSManager* mgr = NULL;
+ VResolver *resolver = NULL;
+
+ if (rc == 0) {
+ rc = KDirectoryNativeDir(&self->dir);
+ }
+
+ if (rc == 0) {
+ rc = VDBManagerMakeRead(&self->mgr, NULL);
+ }
+
+ if (rc == 0) {
+ rc = KConfigMake(&self->cfg, NULL);
+ }
+
+ if (rc == 0) {
+ rc = VFSManagerMake(&mgr);
+ }
+
+ if (rc == 0) {
+ rc = VFSManagerGetResolver(mgr, &resolver);
+ }
+
+ if (rc == 0) {
+ VResolverCacheEnable(resolver, vrAlwaysDisable);
+ }
+
+ if (rc == 0) {
+ rc = VFSManagerMakeResolver(mgr, &self->resolver, self->cfg);
+ }
+
+
+ RELEASE(VResolver, resolver);
+ RELEASE(VFSManager, mgr);
+
+ return rc;
+}
+
+static
+rc_t _MainInit(Main *self, int argc, char *argv[], int *argi, char **argv2)
+{
+ rc_t rc = 0;
+ int i = 0;
+
+ uint8_t testsOn = 0;
+ uint8_t testsOff = 0;
+
+ assert(self && argv && argi && argv2);
+
+ *argi = 0;
+ argv2[(*argi)++] = argv[0];
+
+ for (i = 1; i < argc; ++i) {
+ if (!testArg(argv[i], &testsOn, &testsOff)) {
+ argv2[(*argi)++] = argv[i];
+ }
+ }
+
+ self->tests = processTests(testsOn, testsOff);
+
+ MainPrint(self);
+
+ rc = MainInitObjects(self);
+
+ return rc;
+}
+
+static char** MainInit(Main *self, rc_t *rc,
+ int argc, char *argv[], int *argi)
+{
+ char **argv2 = calloc(argc, sizeof *argv2);
+
+ assert(self && rc);
+
+ memset(self, 0, sizeof *self);
+
+ if (argv2 != NULL) {
+ *rc = _MainInit(self, argc, argv, argi, argv2);
+ }
+
+ return argv2;
+}
+
+static rc_t MainPrintConfig(const Main *self) {
+ rc_t rc = 0;
+
+ assert(self);
+
+ if (rc == 0) {
+ rc = KConfigPrint(self->cfg, 0);
+ if (rc != 0) {
+ OUTMSG(("KConfigPrint() = %R", rc));
+ }
+ OUTMSG(("\n"));
+ }
+
+ return rc;
+}
+
+static
+rc_t _KDBPathTypePrint(const char *head, KPathType type, const char *tail)
+{
+ rc_t rc = 0;
+ rc_t rc2 = 0;
+ assert(head && tail);
+ {
+ rc_t rc2 = OUTMSG(("%s", head));
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+ switch (type) {
+ case kptNotFound:
+ rc2 = OUTMSG(("NotFound"));
+ break;
+ case kptBadPath:
+ rc2 = OUTMSG(("BadPath"));
+ break;
+ case kptFile:
+ rc2 = OUTMSG(("File"));
+ break;
+ case kptDir:
+ rc2 = OUTMSG(("Dir"));
+ break;
+ case kptCharDev:
+ rc2 = OUTMSG(("CharDev"));
+ break;
+ case kptBlockDev:
+ rc2 = OUTMSG(("BlockDev"));
+ break;
+ case kptFIFO:
+ rc2 = OUTMSG(("FIFO"));
+ break;
+ case kptZombieFile:
+ rc2 = OUTMSG(("ZombieFile"));
+ break;
+ case kptDataset:
+ rc2 = OUTMSG(("Dataset"));
+ break;
+ case kptDatatype:
+ rc2 = OUTMSG(("Datatype"));
+ break;
+ case kptDatabase:
+ rc2 = OUTMSG(("Database"));
+ break;
+ case kptTable:
+ rc2 = OUTMSG(("Table"));
+ break;
+ case kptIndex:
+ rc2 = OUTMSG(("Index"));
+ break;
+ case kptColumn:
+ rc2 = OUTMSG(("Column"));
+ break;
+ case kptMetadata:
+ rc2 = OUTMSG(("Metadata"));
+ break;
+ case kptPrereleaseTbl:
+ rc2 = OUTMSG(("PrereleaseTbl"));
+ break;
+ default:
+ rc2 = OUTMSG(("unexpectedFileType(%d)", type));
+ assert(0);
+ break;
+ }
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ {
+ rc_t rc2 = OUTMSG(("%s", tail));
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+ return rc;
+}
+
+static bool isprintString(const unsigned char *s) {
+ assert(s);
+
+ while (*s) {
+ int c = *(s++);
+ if (!isprint(c)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static rc_t printString(const char *s) {
+ rc_t rc = 0;
+
+ const unsigned char *u = (unsigned char*)s;
+
+ assert(u);
+
+ if (isprintString(u)) {
+ return OUTMSG(("%s", u));
+ }
+
+ while (*u) {
+ rc_t rc2 = 0;
+ int c = *(u++);
+ if (isprint(c)) {
+ rc2 = OUTMSG(("%c", c));
+ }
+ else {
+ rc2 = OUTMSG(("\\%03o", c));
+ }
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ return rc;
+}
+
+static rc_t _KDirectoryReport(const KDirectory *self,
+ const char *name, int64_t *size, KPathType *type, bool *alias)
+{
+ rc_t rc = 0;
+ const KFile *f = NULL;
+
+ bool dummyB = false;
+ int64_t dummy = 0;
+
+ KPathType dummyT = kptNotFound;;
+ if (type == NULL) {
+ type = &dummyT;
+ }
+
+ if (alias == NULL) {
+ alias = &dummyB;
+ }
+ if (size == NULL) {
+ size = &dummy;
+ }
+
+ *type = KDirectoryPathType(self, name);
+
+ if (*type & kptAlias) {
+ OUTMSG(("alias|"));
+ *type &= ~kptAlias;
+ *alias = true;
+ }
+
+ rc = _KDBPathTypePrint("", *type, " ");
+
+ if (*type == kptFile) {
+ rc = KDirectoryOpenFileRead(self, &f, name);
+ if (rc != 0) {
+ OUTMSG(("KDirectoryOpenFileRead("));
+ printString(name);
+ OUTMSG((")=%R ", rc));
+ }
+ else {
+ uint64_t sz = 0;
+ rc = KFileSize(f, &sz);
+ if (rc != 0) {
+ OUTMSG(("KFileSize(%s)=%R ", name, rc));
+ }
+ else {
+ OUTMSG(("%lu ", sz));
+ *size = sz;
+ }
+ }
+ }
+
+ RELEASE(KFile, f);
+
+ return rc;
+}
+
+static rc_t _VDBManagerReport(const VDBManager *self,
+ const char *name, KPathType *type)
+{
+ KPathType dummy = kptNotFound;;
+
+ if (type == NULL) {
+ type = &dummy;
+ }
+
+ *type = VDBManagerPathType(self, name);
+
+ *type &= ~kptAlias;
+
+ return _KDBPathTypePrint("", *type, " ");
+}
+
+static rc_t MainReport(const Main *self,
+ const char *name, int64_t *size, KPathType *type, bool *alias)
+{
+ rc_t rc = 0;
+
+ assert(self);
+
+ rc = _KDirectoryReport(self->dir, name, size, type, alias);
+
+ if (!self->noVDBManagerPathType) { /* && MainHasTest(self, eType)) { */
+ _VDBManagerReport(self->mgr, name, type);
+ }
+
+ return rc;
+}
+
+#define rcResolver rcTree
+static bool NotFoundByResolver(rc_t rc) {
+ if (GetRCModule(rc) == rcVFS) {
+ if (GetRCTarget(rc) == rcResolver) {
+ if (GetRCContext(rc) == rcResolving) {
+ if (GetRCState(rc) == rcNotFound) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+
+static rc_t MainResolveLocal(const Main *self,
+ const char *name, const VPath* acc, int64_t *size)
+{
+ rc_t rc = 0;
+
+ const VPath* local = NULL;
+
+ assert(self);
+
+ OUTMSG(("Local: "));
+
+ rc = VResolverLocal(self->resolver, acc, &local);
+ if (rc != 0) {
+ if (NotFoundByResolver(rc)) {
+ OUTMSG(("not found\n"));
+ rc = 0;
+ }
+ else {
+ OUTMSG(("VResolverLocal(%s) = %R\n", name, rc));
+ }
+ }
+ else {
+ const String *s = NULL;
+
+ rc_t rc = VPathMakeString(local, &s);
+ if (rc == 0) {
+ OUTMSG(("%.*s ", s->size, s->addr));
+ rc = MainReport(self, s->addr, size, NULL, NULL);
+ OUTMSG(("\n"));
+ } else {
+ OUTMSG(("VPathMakeString(VResolverLocal(%s)) = %R\n",
+ name, rc));
+ }
+
+ free((void*)s);
+ }
+
+ RELEASE(VPath, local);
+
+ return rc;
+}
+
+static rc_t MainResolveRemote(const Main *self, const char *name,
+ const VPath* acc, const VPath **remote, int64_t *size)
+{
+ rc_t rc = 0;
+
+ const KFile* f = NULL;
+
+ assert(self && size);
+
+ OUTMSG(("Remote: "));
+
+ rc = VResolverRemote(self->resolver, acc, remote, &f);
+ if (rc != 0) {
+ if (NotFoundByResolver(rc)) {
+ OUTMSG(("not found\n"));
+ rc = 0;
+ }
+ else {
+ OUTMSG(("VResolverRemote(%s) = %R\n", name, rc));
+ }
+ }
+ else {
+ const String *s = NULL;
+ rc_t rc = VPathMakeString(*remote, &s);
+ if (rc == 0) {
+ uint64_t sz = 0;
+ OUTMSG(("%.*s ", s->size, s->addr));
+ rc = KFileSize(f, &sz);
+ if (rc != 0) {
+ OUTMSG(("KFileSize(%s)=%R ", name, rc));
+ }
+ else {
+ OUTMSG(("%lu ", sz));
+ *size = sz;
+ }
+ OUTMSG(("\n"));
+ } else {
+ OUTMSG(("VPathMakeString(VResolverRemote(%s)) = %R\n",
+ name, rc));
+ }
+ free((void*)s);
+ }
+
+ RELEASE(KFile, f);
+
+ return rc;
+}
+
+static rc_t MainResolveCache(const Main *self,
+ const char *name, const VPath* remote)
+{
+ rc_t rc = 0;
+
+ assert(self);
+
+ OUTMSG(("Cache: "));
+
+ if (remote == NULL) {
+ OUTMSG(("skipped\n"));
+ }
+ else {
+ VResolverEnableState enabled = VResolverCacheEnable(self->resolver, vrAlwaysEnable);
+ const VPath* cache = NULL;
+ uint64_t file_size = 0;
+ rc = VResolverCache(self->resolver, remote, &cache, file_size);
+ VResolverCacheEnable(self->resolver, enabled);
+ if (rc != 0) {
+ if (NotFoundByResolver(rc)) {
+ OUTMSG(("not found\n"));
+ rc = 0;
+ }
+ else {
+ OUTMSG(("VResolverCache(%s) = %R\n", name, rc));
+ }
+ }
+ else {
+ const String *s = NULL;
+ rc_t rc = VPathMakeString(cache, &s);
+ if (rc == 0) {
+ OUTMSG(("%.*s ", s->size, s->addr));
+ rc = MainReport(self, s->addr, NULL, NULL, NULL);
+ OUTMSG(("\n"));
+ } else {
+ OUTMSG((
+ "VPathMakeString(VResolverCache(%s, %d)) = %R\n",
+ name, file_size, rc));
+ }
+ free((void*)s);
+ }
+
+ RELEASE(VPath, cache);
+ }
+
+ return rc;
+}
+
+static rc_t MainResolve(const Main *self,
+ const char *name, int64_t *localSz, int64_t *remoteSz)
+{
+ rc_t rc = 0;
+
+ VPath* acc = NULL;
+
+ assert(self);
+
+ if (rc == 0) {
+ rc = VPathMake(&acc, name);
+ if (rc != 0) {
+ OUTMSG(("VPathMake(%s) = %R\n", name, rc));
+ }
+ }
+
+ if (rc == 0) {
+ const VPath* remote = NULL;
+
+ rc_t rc2 = MainResolveLocal(self, name, acc, localSz);
+ if (rc2 != 0 && rc == 0) {
+ rc = rc2;
+ }
+
+ rc2 = MainResolveRemote(self, name, acc, &remote, remoteSz);
+ if (rc2 != 0 && rc == 0) {
+ rc = rc2;
+ }
+
+ rc2 = MainResolveCache(self, name, remote);
+ if (rc2 != 0 && rc == 0) {
+ rc = rc2;
+ }
+
+ RELEASE(VPath, remote);
+ }
+
+ RELEASE(VPath, acc);
+
+ return rc;
+}
+
+static
+rc_t MainDepend(const Main *self, const char *name, bool missing)
+{
+ rc_t rc = 0;
+
+ const VDatabase *db = NULL;
+ const VDBDependencies* dep = NULL;
+ uint32_t count = 0;
+
+ if (rc == 0) {
+ rc = VDBManagerOpenDBRead(self->mgr, &db, NULL, name);
+ if (rc != 0) {
+ if (rc == SILENT_RC(rcVFS,rcMgr,rcOpening,rcDirectory,rcNotFound)) {
+ return 0;
+ }
+ OUTMSG(("VDBManagerOpenDBRead(%s) = %R\n", name, rc));
+ }
+ }
+
+ if (rc == 0) {
+ rc = VDatabaseListDependencies(db, &dep, missing);
+ if (rc != 0) {
+ OUTMSG(("VDatabaseListDependencies(%s, %s) = %R\n",
+ name, missing ? "missing" : "all", rc));
+ }
+ }
+
+ if (rc == 0) {
+ rc = VDBDependenciesCount(dep, &count);
+ if (rc != 0) {
+ OUTMSG(("VDBDependenciesCount(%s, %s) = %R\n",
+ name, missing ? "missing" : "all", rc));
+ }
+ else {
+ OUTMSG(("VDBDependenciesCount(%s)=%d\n",
+ missing ? "missing" : "all", count));
+ }
+ }
+
+ if (rc == 0) {
+ uint32_t i = 0;
+ rc_t rc2 = 0;
+ for (i = 0; i < count; ++i) {
+ bool b = true;
+ const char *s = NULL;
+ KPathType type = kptNotFound;
+
+ OUTMSG((" %6d\t", i + 1));
+
+ rc2 = VDBDependenciesSeqId(dep, &s, i);
+ if (rc2 == 0) {
+ OUTMSG(("seqId=%s,", s));
+ }
+ else {
+ OUTMSG(("VDBDependenciesSeqId(%s, %s, %i)=%R ",
+ name, missing ? "missing" : "all", i, rc));
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ rc2 = VDBDependenciesName(dep, &s, i);
+ if (rc2 == 0) {
+ OUTMSG(("name=%s,", s));
+ }
+ else {
+ OUTMSG(("VDBDependenciesName(%s, %s, %i)=%R ",
+ name, missing ? "missing" : "all", i, rc));
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ rc2 = VDBDependenciesCircular(dep, &b, i);
+ if (rc2 == 0) {
+ OUTMSG(("circular=%s,", b ? "true" : "false"));
+ }
+ else {
+ OUTMSG(("VDBDependenciesCircular(%s, %s, %i)=%R ",
+ name, missing ? "missing" : "all", i, rc));
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ rc2 = VDBDependenciesType(dep, &type, i);
+ if (rc2 == 0) {
+ rc2 = _KDBPathTypePrint("type=", type, ",");
+ if (rc2 != 0 && rc == 0) {
+ rc = rc2;
+ }
+ }
+ else {
+ OUTMSG(("VDBDependenciesType(%s, %s, %i)=%R ",
+ name, missing ? "missing" : "all", i, rc));
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ rc2 = VDBDependenciesLocal(dep, &b, i);
+ if (rc2 == 0) {
+ OUTMSG(("local=%s,", b ? "local" : "remote"));
+ }
+ else {
+ OUTMSG(("VDBDependenciesLocal(%s, %s, %i)=%R ",
+ name, missing ? "missing" : "all", i, rc));
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ rc2 = VDBDependenciesPath(dep, &s, i);
+ if (rc2 == 0) {
+ OUTMSG(("pathLocal=%s,", s == NULL ? "notFound" : s));
+ }
+ else {
+ OUTMSG(("VDBDependenciesPath(%s, %s, %i)=%R ",
+ name, missing ? "missing" : "all", i, rc));
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ rc2 = VDBDependenciesPathRemote(dep, &s, i);
+ if (rc2 == 0) {
+ OUTMSG(("pathRemote=%s,", s == NULL ? "notFound" : s));
+ }
+ else {
+ OUTMSG(("VDBDependenciesPathRemote(%s, %s, %i)=%R ",
+ name, missing ? "missing" : "all", i, rc));
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ rc2 = VDBDependenciesPathCache(dep, &s, i);
+ if (rc2 == 0) {
+ OUTMSG(("pathCache=%s", s == NULL ? "notFound" : s));
+ }
+ else {
+ OUTMSG(("VDBDependenciesPathCache(%s, %s, %i)=%R ",
+ name, missing ? "missing" : "all", i, rc));
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+
+ OUTMSG(("\n"));
+ }
+ }
+
+ RELEASE(VDBDependencies, dep);
+ RELEASE(VDatabase, db);
+
+ return rc;
+}
+
+static rc_t PrintCurl() {
+ KNSManager *mgr = NULL;
+ rc_t rc = KNSManagerMake(&mgr);
+ if (rc != 0) {
+ OUTMSG(("KNSManagerMake = %R\n", rc));
+ }
+ if (rc == 0) {
+ rc_t rc = KNSManagerAvail(mgr);
+ OUTMSG(("KNSManagerAvail = %R", rc));
+ if (rc == 0) {
+ const char *version_string = NULL;
+ rc = KNSManagerCurlVersion(mgr, &version_string);
+ if (rc == 0) {
+ OUTMSG((". Curl Version = %s\n", version_string));
+ }
+ else {
+ OUTMSG((". KNSManagerCurlVersion = %R\n", rc));
+ }
+ }
+ }
+ RELEASE(KNSManager, mgr);
+ return rc;
+}
+
+static rc_t MainExec(const Main *self, const char *aArg, ...) {
+ rc_t rc = 0;
+ rc_t rce = 0;
+
+ KPathType type = kptNotFound;
+ bool alias = false;
+ int64_t directSz = -1;
+ int64_t localSz = -1;
+ int64_t remoteSz = -1;
+ size_t num_writ = 0;
+ char arg[PATH_MAX] = "";
+
+ va_list args;
+ va_start(args, aArg);
+
+ assert(self);
+
+ rc = string_vprintf(arg, sizeof arg, &num_writ, aArg, args);
+ if (rc != 0) {
+ OUTMSG(("string_vprintf(%s)=%R\n", aArg, rc));
+ return rc;
+ }
+ assert(num_writ < sizeof arg);
+
+ OUTMSG(("\n"));
+ rc = printString(arg);
+ if (rc != 0) {
+ OUTMSG(("printString=%R\n", rc));
+ return rc;
+ }
+ OUTMSG((" "));
+ rc = MainReport(self, arg, &directSz, &type, &alias);
+ OUTMSG(("\n"));
+
+ if (self->recursive && type == kptDir && !alias) {
+ uint32_t i = 0;
+ uint32_t count = 0;
+ KNamelist *list = NULL;
+ rc = KDirectoryList(self->dir, &list, NULL, NULL, arg);
+ if (rc != 0) {
+ OUTMSG(("KDirectoryList(%s)=%R ", arg, rc));
+ }
+ else {
+ rc = KNamelistCount(list, &count);
+ if (rc != 0) {
+ OUTMSG(("KNamelistCount(KDirectoryList(%s))=%R ", arg, rc));
+ }
+ }
+ for (i = 0; i < count && rc == 0; ++i) {
+ const char *name = NULL;
+ rc = KNamelistGet(list, i, &name);
+ if (rc != 0) {
+ OUTMSG(("KNamelistGet(KDirectoryList(%s), %d)=%R ",
+ arg, i, rc));
+ }
+ else {
+ rc_t rc2 = MainExec(self, "%s/%s", arg, name);
+ if (rc2 != 0 && rce == 0) {
+ rce = rc2;
+ }
+ }
+ }
+ RELEASE(KNamelist, list);
+ }
+ else {
+ if (MainHasTest(self, eResolve)) {
+ rc_t rc2 = MainResolve(self, arg, &localSz, &remoteSz);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ if (type == kptDatabase || type == kptNotFound) {
+ if (MainHasTest(self, eDependMissing)) {
+ rc_t rc2 = MainDepend(self, arg, true);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ if (MainHasTest(self, eDependAll)) {
+ rc_t rc2 = MainDepend(self, arg, false);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+ }
+
+ if (MainHasTest(self, eResolve) && (
+ (directSz != -1 && localSz != -1 && directSz != localSz) ||
+ (remoteSz != -1 && localSz != -1 && localSz != remoteSz)))
+ {
+ OUTMSG(("FILE SIZES DO NOT MATCH: "));
+ if (directSz != -1 && localSz != -1 && directSz != remoteSz) {
+ OUTMSG(("direct=%ld != remote=%ld. ", directSz, remoteSz));
+ }
+ if (remoteSz != -1 && localSz != -1 && localSz != remoteSz) {
+ OUTMSG(("local=%ld != remote=%ld. ", localSz, remoteSz));
+ }
+ OUTMSG(("\n"));
+ }
+
+ OUTMSG(("\n"));
+ }
+
+ if (rce != 0 && rc == 0) {
+ rc = rce;
+ }
+ return rc;
+}
+
+static rc_t MainFini(Main *self) {
+ rc_t rc = 0;
+
+ assert(self);
+
+ RELEASE(VResolver, self->resolver);
+ RELEASE(KConfig, self->cfg);
+ RELEASE(VDBManager, self->mgr);
+ RELEASE(KDirectory, self->dir);
+
+ return rc;
+}
+
+#define ALIAS_NO_VDB "N"
+#define OPTION_NO_VDB "no-vdb"
+static const char* USAGE_NO_VDB[] = { "do not call VDBManagerPathType", NULL };
+
+#define ALIAS_REC "R"
+#define OPTION_REC "recursive"
+static const char* USAGE_REC[] = { "check object type recursively", NULL };
+
+OptDef Options[] = { /* needs_value, required */
+ { OPTION_NO_VDB, ALIAS_NO_VDB, NULL, USAGE_NO_VDB, 1, false, false },
+ { OPTION_REC , ALIAS_REC , NULL, USAGE_REC , 1, false, false }
+};
+
+rc_t CC KMain(int argc, char *argv[]) {
+ rc_t rc = 0;
+ uint32_t pcount = 0;
+ uint32_t i = 0;
+ Args *args = NULL;
+ rc_t rc3 = 0;
+ int argi = 0;
+
+ Main prms;
+ char **argv2 = MainInit(&prms, &rc, argc, argv, &argi);
+
+ if (rc == 0) {
+ rc = ArgsMakeAndHandle(&args, argi, argv2, 1,
+ Options, sizeof Options / sizeof Options[0]);
+ }
+
+ if (MainHasTest(&prms, eCfg)) {
+ rc_t rc2 = MainPrintConfig(&prms);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+
+ PrintCurl();
+
+ if (rc == 0) {
+ rc = ArgsOptionCount(args, OPTION_REC, &pcount);
+ if (rc) {
+ LOGERR(klogErr, rc, "Failure to get '" OPTION_REC "' argument");
+ }
+ else {
+ if (pcount > 0) {
+ prms.recursive = true;
+ }
+ }
+ }
+
+ if (rc == 0) {
+ rc = ArgsOptionCount(args, OPTION_NO_VDB, &pcount);
+ if (rc) {
+ LOGERR(klogErr, rc, "Failure to get '" OPTION_NO_VDB "' argument");
+ }
+ else {
+ if (pcount > 0) {
+ prms.noVDBManagerPathType = true;
+ }
+ }
+ }
+
+ if (rc == 0) {
+ rc = ArgsParamCount(args, &pcount);
+ }
+
+ for (i = 0; i < pcount; ++i) {
+ const char *name = NULL;
+ rc3 = ArgsParamValue(args, i, &name);
+ if (rc3 == 0) {
+ rc_t rc2 = MainExec(&prms, name);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+ }
+ if (rc == 0 && rc3 != 0) {
+ rc = rc3;
+ }
+
+ RELEASE(Args, args);
+
+ {
+ rc_t rc2 = MainFini(&prms);
+ if (rc == 0 && rc2 != 0) {
+ rc = rc2;
+ }
+ }
+ free(argv2);
+
+ OUTMSG(("\n"));
+
+ return rc;
+}
diff --git a/tools/util/test-sra.vers b/tools/util/test-sra.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/util/test-sra.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/util/testld.vers b/tools/util/testld.vers
index 7dea76e..f90b1af 100644
--- a/tools/util/testld.vers
+++ b/tools/util/testld.vers
@@ -1 +1 @@
-1.0.1
+2.3.2
diff --git a/tools/util/txt2kdb.vers b/tools/util/txt2kdb.vers
index 7dea76e..f90b1af 100644
--- a/tools/util/txt2kdb.vers
+++ b/tools/util/txt2kdb.vers
@@ -1 +1 @@
-1.0.1
+2.3.2
diff --git a/tools/util/unix/syspass.c b/tools/util/unix/syspass.c
new file mode 100644
index 0000000..b464f39
--- /dev/null
+++ b/tools/util/unix/syspass.c
@@ -0,0 +1,62 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#define __EXTENSIONS__ 1
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <klib/rc.h>
+
+#include <string.h> /* strdup */
+
+#include <stdlib.h>
+#include <unistd.h> /* getpass */
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz) {
+ if (prompt == NULL || buf == NULL) {
+ return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+ }
+
+ if (bufsiz == 0)
+ { return 0; }
+
+ buf[0] = '\0';
+
+ {
+ const char *p = getpass(prompt);
+
+ if (p == NULL) {
+ return RC(rcExe, rcString, rcReading, rcFunction, rcFailed);
+ }
+ else if ((strlen(p) + 1) > bufsiz) {
+ return RC(rcExe, rcString, rcReading, rcBuffer, rcInsufficient);
+ }
+
+ strcpy(buf, p);
+
+ return 0;
+ }
+}
diff --git a/tools/util/vdb-lock.c b/tools/util/vdb-lock.c
index a62dd2b..2c82a18 100644
--- a/tools/util/vdb-lock.c
+++ b/tools/util/vdb-lock.c
@@ -115,8 +115,9 @@ rc_t CC KMain ( int argc, char *argv [] )
else
{
VDBManager *mgr;
- char full [ 4096 ];
+#if TOOLS_USE_SRAPATH != 0
+ char full [ 4096 ];
SRAPath *sra_path;
rc = SRAPathMake ( & sra_path, NULL );
if ( rc == 0 )
@@ -129,6 +130,7 @@ rc_t CC KMain ( int argc, char *argv [] )
}
SRAPathRelease ( sra_path );
}
+#endif
rc = VDBManagerMakeUpdate ( & mgr, NULL );
if ( rc != 0 )
diff --git a/tools/util/vdb-lock.vers b/tools/util/vdb-lock.vers
index 04b10b4..f90b1af 100644
--- a/tools/util/vdb-lock.vers
+++ b/tools/util/vdb-lock.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/util/vdb-lock.vers.h b/tools/util/vdb-lock.vers.h
deleted file mode 100644
index 6eb4c4a..0000000
--- a/tools/util/vdb-lock.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_LOCK_VERS 0x02010007
diff --git a/tools/util/vdb-passwd.c b/tools/util/vdb-passwd.c
new file mode 100644
index 0000000..ee929f4
--- /dev/null
+++ b/tools/util/vdb-passwd.c
@@ -0,0 +1,276 @@
+/*==============================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-passwd.vers.h" /* VDB_PASSWD_VERS */
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <kapp/main.h> /* KMain */
+
+#include <vfs/manager.h> /* VFSManager */
+#include <klib/log.h> /* LOGERR */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/rc.h>
+
+#include <string.h> /* strcmp */
+#include <assert.h>
+#include <limits.h> /* PATH_MAX */
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/******************************************************************************/
+static
+rc_t SetPwd(const char *password, bool no_prompt)
+{
+ rc_t rc = 0;
+
+ VFSManager *mgr = NULL;
+
+ assert(password);
+
+ if (rc == 0) {
+ rc = VFSManagerMake(&mgr);
+ DISP_RC(rc, "while calling VFSManagerMake");
+ }
+
+ if (rc == 0) {
+ char pwd_dir[PATH_MAX] = "";
+ rc = VFSManagerUpdateKryptoPassword
+ (mgr, password, strlen(password), pwd_dir, sizeof pwd_dir);
+ if (rc) {
+ if (no_prompt) {
+ LOGERR(klogInt, rc, "while updating the password");
+ }
+ else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+ rcDirectory, rcExcessive))
+ {
+ OUTMSG((
+ "\nSecurity warning:\n"
+ "Directory \"%s\" has excessive access permissions.\n"
+ "Run \"chmod 700 %s\" to repair\n"
+ "or ask your system administrator for assistance.\n",
+ pwd_dir, pwd_dir));
+ rc = 0;
+ }
+ else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+ rcSize, rcExcessive))
+ {
+ OUTMSG((
+ "\nError:\n"
+ "Password is too long.\n"
+ "Maximum password size is %ld.\n",
+ VFS_KRYPTO_PASSWORD_MAX_SIZE));
+ }
+ else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+ rcEncryptionKey, rcInvalid))
+ {
+ OUTMSG((
+ "\nError:\n"
+ "Invalid character in password\n"
+ "(CR/LF are not allowed)\n"));
+ }
+ else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+ rcPath, rcExcessive))
+ {
+ OUTMSG((
+ "\nError:\n"
+ "Cannot set the password.\n"
+ "Path to password file is too long.\n"
+ "Your configuration should be updated.\n"));
+ }
+ else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+ rcPath, rcIncorrect))
+ {
+ OUTMSG((
+ "\nError:\n"
+ "Cannot set the password.\n"
+ "Existing path to password is not a file.\n"
+ "Your configuration should be updated.\n"));
+ }
+ else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+ rcPath, rcCorrupt))
+ {
+ OUTMSG((
+ "\nError:\n"
+ "Cannot set the password.\n"
+ "Unknown file type for configured path/file name.\n"
+ "Your configuration should be updated.\n"));
+ }
+ else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcWriting,
+ rcFile, rcInsufficient))
+ {
+ OUTMSG((
+ "\nError:\n"
+ "Incomplete writes to temporary password file.\n"
+ "Cannot set the password.\n"));
+ }
+ else {
+ OUTMSG(("\nCannot set the password. Please run "
+ "\"perl configuration-assistant.perl\" and try again.\n"));
+ }
+ }
+ }
+
+ RELEASE(VFSManager, mgr);
+
+ return rc;
+}
+
+#define PWD_SZ 1024
+
+static
+rc_t run(bool quiet)
+{
+ rc_t rc = 0;
+
+ char password[PWD_SZ] = "";
+
+ bool empty = false;
+
+ KWrtHandler handler;
+ handler.writer = KOutWriterGet();
+ handler.data = KOutDataGet();
+
+ KOutHandlerSetStdErr();
+ KLogLibHandlerSet(NULL, NULL);
+
+ OUTMSG(("Changing password\n"));
+
+#if 1
+ if (rc == 0) {
+ int i = 0;
+ for (i = 0; i < 3 && rc == 0; ++i) {
+ rc = get_pass("New password:", password, sizeof password);
+ DISP_RC(rc, "cannot read the password");
+ if (rc != 0) {
+ break;
+ }
+ if (password[0] == '\0') {
+ OUTMSG(("BAD PASSWORD: too short\n"));
+ }
+ else {
+ break;
+ }
+ }
+ if (rc == 0 && password[0] == '\0') {
+ rc = RC(rcExe, rcString, rcReading, rcString, rcIncorrect);
+ empty = true;
+ /* LOGERR(klogErr, rc, "failed to set password"); */
+ }
+ }
+
+ if (rc == 0) {
+ char repassword[PWD_SZ] = "";
+ rc = get_pass("Retype new password:", repassword, sizeof repassword);
+ DISP_RC(rc, "cannot read the password");
+ if (rc == 0) {
+ if (strcmp(password, repassword)) {
+ OUTMSG(("Sorry, passwords do not match.\n"));
+ rc = RC(rcExe, rcString, rcReading, rcString, rcInconsistent);
+ /* LOGERR(klogErr, rc, "failed to set password"); */
+ }
+ }
+ }
+
+#else
+ strcpy(password, "1n2");
+#endif
+
+ if (rc == 0) {
+ rc = SetPwd(password, quiet);
+ }
+
+ KOutHandlerSet(handler.writer, handler.data);
+
+ if (empty)
+ { rc = 0; }
+
+ return rc;
+}
+
+#define SL_OPTION "noprompt"
+#define SL_ALIAS "n"
+static const char *SL_USAGE[]
+ = { "Do not suggest running configuration-assistant", NULL };
+
+OptDef Options[] = { { SL_OPTION, SL_ALIAS, NULL, SL_USAGE, 1, false, false } };
+
+const char UsageDefaultName[] = "vdb-passwd";
+
+rc_t CC UsageSummary(const char *progname) {
+ KOutMsg("Update user's NCBI VDB crypto password\n"
+ "If not run with --quiet recommendations\n"
+ "are given if errors are detected.\n"
+ "\n");
+
+ return 0;
+}
+
+rc_t CC Usage(const Args *args) {
+ UsageSummary(UsageDefaultName);
+
+ KOutMsg("Options:\n");
+ HelpOptionsStandard ();
+
+ HelpVersion(UsageDefaultName, KAppVersion());
+
+ return 0;
+}
+
+ver_t CC KAppVersion(void) { return VDB_PASSWD_VERS; }
+
+rc_t CC KMain(int argc, char *argv[]) {
+ Args *args;
+ rc_t rc, orc;
+
+ rc = ArgsMakeAndHandle(&args, argc, argv, 0);
+ if (rc == 0)
+ {
+ uint32_t pcount;
+ rc_t orc;
+
+ /* non standard use of --quiet */
+ rc = ArgsOptionCount(args, OPTION_QUIET, &pcount);
+ if (rc)
+ LOGERR(klogErr, rc, "error check " OPTION_QUIET " option");
+
+ else
+ rc = run (pcount != 0);
+
+ orc = ArgsWhack(args);
+ if (rc == 0)
+ rc = orc;
+ }
+
+ return rc;
+}
diff --git a/tools/util/vdb-passwd.vers b/tools/util/vdb-passwd.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/util/vdb-passwd.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/util/vdb-unlock.c b/tools/util/vdb-unlock.c
index a0a97fe..cdcba36 100644
--- a/tools/util/vdb-unlock.c
+++ b/tools/util/vdb-unlock.c
@@ -117,8 +117,9 @@ rc_t CC KMain ( int argc, char *argv [] )
else
{
VDBManager *mgr;
- char full [ 4096 ];
+#if TOOLS_USE_SRAPATH != 0
+ char full [ 4096 ];
SRAPath *sra_path;
rc = SRAPathMake ( & sra_path, NULL );
if ( rc == 0 )
@@ -131,6 +132,7 @@ rc_t CC KMain ( int argc, char *argv [] )
}
SRAPathRelease ( sra_path );
}
+#endif
rc = VDBManagerMakeUpdate ( & mgr, NULL );
if ( rc != 0 )
diff --git a/tools/util/vdb-unlock.vers b/tools/util/vdb-unlock.vers
index 04b10b4..f90b1af 100644
--- a/tools/util/vdb-unlock.vers
+++ b/tools/util/vdb-unlock.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/util/vdb-unlock.vers.h b/tools/util/vdb-unlock.vers.h
deleted file mode 100644
index f109f03..0000000
--- a/tools/util/vdb-unlock.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_UNLOCK_VERS 0x02010007
diff --git a/tools/util/win/syspass.c b/tools/util/win/syspass.c
new file mode 100644
index 0000000..745b0cc
--- /dev/null
+++ b/tools/util/win/syspass.c
@@ -0,0 +1,53 @@
+/*===========================================================================
+*
+* PUBLIC DOMAIN NOTICE
+* National Center for Biotechnology Information
+*
+* This software/database is a "United States Government Work" under the
+* terms of the United States Copyright Act. It was written as part of
+* the author's official duties as a United States Government employee and
+* thus cannot be copyrighted. This software/database is freely available
+* to the public for use. The National Library of Medicine and the U.S.
+* Government have not placed any restriction on its use or reproduction.
+*
+* Although all reasonable efforts have been taken to ensure the accuracy
+* and reliability of the software and data, the NLM and the U.S.
+* Government do not and cannot warrant the performance or results that
+* may be obtained by using this software or data. The NLM and the U.S.
+* Government disclaim all warranties, express or implied, including
+* warranties of performance, merchantability or fitness for any particular
+* purpose.
+*
+* Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <klib/rc.h>
+
+#include <conio.h> /* _getch */
+#include <stdio.h>
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz) {
+ if (prompt == NULL || buf == NULL) {
+ return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+ }
+
+ fprintf(stderr, "%s", prompt);
+
+ {
+ size_t i = 0;
+ for (i = 0; i < bufsiz; ++i) {
+ buf[i] = _getch();
+ if (buf[i] == '\r') {
+ fprintf(stderr, "\r\n");
+ buf[i] = '\0';
+ return 0;
+ }
+ }
+ return RC(rcExe, rcString, rcReading, rcBuffer, rcInsufficient);
+ }
+}
diff --git a/tools/vdb-config/Makefile b/tools/vdb-config/Makefile
index 1971ef6..9147b01 100644
--- a/tools/vdb-config/Makefile
+++ b/tools/vdb-config/Makefile
@@ -25,7 +25,7 @@
default: std
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
MODULE = tools/vdb-config
include $(TOP)/build/Makefile.env
@@ -42,15 +42,13 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/std
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# std
@@ -61,6 +59,13 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
# clean
#
clean: stdclean
@@ -89,12 +94,14 @@ VDB_CONFIG_LIB = \
-lsraschema \
-lvdb \
-lkdb \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
+ -lkproc \
-lklib \
- -lbz2 \
- -ldl \
- -lz
+ -lm
$(BINDIR)/vdb-config: $(VDB_CONFIG_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_CONFIG_LIB)
diff --git a/tools/vdb-config/vdb-config.c b/tools/vdb-config/vdb-config.c
index 5cd7a1b..75cf64a 100644
--- a/tools/vdb-config/vdb-config.c
+++ b/tools/vdb-config/vdb-config.c
@@ -23,13 +23,17 @@
* ===========================================================================
*
*/
+
#include "vdb-config.vers.h"
#include <kapp/main.h>
+#include <vdb/vdb-priv.h> /* VDBManagerListExternalSchemaModules */
+#include <vdb/manager.h> /* VDBManager */
+
#include <kfg/kfg-priv.h> /* KConfig */
-#include <kfs/kfs-priv.h> /* KPathGetCWD */
+#include <vfs/path-priv.h> /* KPathGetCWD */
#include <kfs/directory.h>
#include <kfs/file.h>
@@ -39,16 +43,18 @@
#include <klib/out.h> /* OUTMSG */
#include <klib/rc.h> /* RC */
+#include <sysalloc.h> /* redefine malloc etc calls */
#include <os-native.h> /* SHLX */
#include <assert.h>
#include <errno.h>
-#include <limits.h> /* PATH_MAX */
#include <stdio.h> /* scanf */
#include <stdlib.h> /* getenv */
#include <string.h> /* memset */
/* #include <unistd.h> access */
+#include <limits.h> /* PATH_MAX */
+
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
@@ -57,7 +63,7 @@
#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
PLOGERR(klogInt, (klogInt, rc, \
"$(name): $(msg)", "name=%s,msg=%s", name, msg)))
-#define DESTRUCT(type, obj) do { rc_t rc2 = type##Release(obj); \
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
#define ALIAS_ALL "a"
@@ -80,23 +86,39 @@ static const char* USAGE_ENV[] = { "print shell variables", NULL };
#define OPTION_FIL "files"
static const char* USAGE_FIL[] = { "print loaded files", NULL };
+#define ALIAS_IMP NULL
+#define OPTION_IMP "import"
+static const char* USAGE_IMP[] = { "import ngc file", NULL };
+
#define ALIAS_MOD "m"
#define OPTION_MOD "modules"
static const char* USAGE_MOD[] = { "print external modules", NULL };
+#define ALIAS_OUT "o"
+#define OPTION_OUT "output"
+static const char* USAGE_OUT[] = { "output type: one of (x n), "
+ "where 'x' is xml (default), 'n' is native", NULL };
+
#define ALIAS_CFG "p"
#define OPTION_CFG "cfg"
static const char* USAGE_CFG[] = { "print current configuration", NULL };
+#define ALIAS_SET "s"
+#define OPTION_SET "set"
+static const char* USAGE_SET[] = { "set configuration node value", NULL };
+
OptDef Options[] =
-{
+{ /* needs_value, required */
{ OPTION_ALL, ALIAS_ALL, NULL, USAGE_ALL, 1, false, false }
, { OPTION_CFG, ALIAS_CFG, NULL, USAGE_CFG, 1, false, false }
, { OPTION_DIR, ALIAS_DIR, NULL, USAGE_DIR, 1, false, false }
, { OPTION_ENV, ALIAS_ENV, NULL, USAGE_ENV, 1, false, false }
, { OPTION_FIL, ALIAS_FIL, NULL, USAGE_FIL, 1, false, false }
+ , { OPTION_IMP, ALIAS_IMP, NULL, USAGE_IMP, 1, true , false }
, { OPTION_MOD, ALIAS_MOD, NULL, USAGE_MOD, 1, false, false }
, { OPTION_NEW, ALIAS_NEW, NULL, USAGE_NEW, 1, false, false }
+ , { OPTION_OUT, ALIAS_OUT, NULL, USAGE_OUT, 1, true , false }
+ , { OPTION_SET, ALIAS_SET, NULL, USAGE_SET, 1, true , false }
};
rc_t CC UsageSummary (const char * progname) {
@@ -129,6 +151,15 @@ rc_t CC Usage(const Args* args) {
/* HelpOptionLine (ALIAS_NEW, OPTION_MOD, NULL, USAGE_NEW); */
HelpOptionLine (ALIAS_FIL, OPTION_FIL, NULL, USAGE_FIL);
HelpOptionLine (ALIAS_ENV, OPTION_ENV, NULL, USAGE_ENV);
+ HelpOptionLine (ALIAS_MOD, OPTION_MOD, NULL, USAGE_MOD);
+ KOutMsg ("\n");
+ HelpOptionLine (ALIAS_SET, OPTION_SET, "name=value", USAGE_SET);
+ KOutMsg ("\n");
+ HelpOptionLine (ALIAS_IMP, OPTION_IMP, "ngc-file", USAGE_IMP);
+ KOutMsg ("\n");
+ HelpOptionLine (ALIAS_OUT, OPTION_OUT, "x | n", USAGE_OUT);
+
+ KOutMsg ("\n");
HelpOptionsStandard ();
@@ -141,9 +172,9 @@ const char UsageDefaultName[] = "vdb-config";
ver_t CC KAppVersion(void) { return VDB_CONFIG_VERS; }
-static rc_t ArgsRelease(Args* self) { return ArgsWhack(self); }
-
-static void Indent(int n) {
+static void Indent(bool xml, int n) {
+ if (!xml)
+ { return; }
while (n--)
{ OUTMSG((" ")); }
}
@@ -159,7 +190,9 @@ static rc_t KConfigNodeReadData(const KConfigNode* self,
assert(*num_read <= blen);
return rc;
}
-static rc_t KConfigNodePrintChildNames(const KConfigNode* self,
+
+#define VDB_CONGIG_OUTMSG(args) do { if (xml) { OUTMSG(args); } } while (false)
+static rc_t KConfigNodePrintChildNames(bool xml, const KConfigNode* self,
const char* name, int indent, const char* aFullpath)
{
rc_t rc = 0;
@@ -178,8 +211,9 @@ static rc_t KConfigNodePrintChildNames(const KConfigNode* self,
if (rc == 0) {
rc = KConfigNodeReadData(node, buffer, sizeof buffer, &num_read);
hasData = num_read;
- if (hasData)
- { /* OUTMSG(("\n%s = \"%.*s\"\n\n", aFullpath, num_read, buffer)); */ }
+ if (hasData) {
+ /* VDB_CONGIG_OUTMSG(("\n%s = \"%.*s\"\n\n", aFullpath, num_read, buffer)); */
+ }
}
if (rc == 0)
{ rc = KConfigNodeListChild(node, &names); }
@@ -188,16 +222,21 @@ static rc_t KConfigNodePrintChildNames(const KConfigNode* self,
hasChildren = count;
}
- Indent(indent);
- OUTMSG(("<%s", name));
+ Indent(xml, indent);
+ VDB_CONGIG_OUTMSG(("<%s", name));
if (!hasChildren && !hasData)
- { OUTMSG(("/>")); }
+ { VDB_CONGIG_OUTMSG(("/>\n")); }
else
- { OUTMSG((">")); }
- if (hasData)
- { OUTMSG(("%.*s", (int)num_read, buffer)); }
+ { VDB_CONGIG_OUTMSG((">")); }
+ if (hasData) {
+ if (xml) {
+ VDB_CONGIG_OUTMSG(("%.*s", (int)num_read, buffer));
+ }
+ else
+ { OUTMSG(("%s = \"%.*s\"\n", aFullpath, (int)num_read, buffer)); }
+ }
if (hasChildren)
- { OUTMSG(("\n"));}
+ { VDB_CONGIG_OUTMSG(("\n"));}
if (hasChildren) {
for (i = 0; i < count && rc == 0; ++i) {
@@ -216,19 +255,19 @@ static rc_t KConfigNodePrintChildNames(const KConfigNode* self,
}
if (rc == 0) {
rc = KConfigNodePrintChildNames
- (node, name, indent + 1, fullpath);
+ (xml, node, name, indent + 1, fullpath);
}
free(fullpath);
}
}
if (hasChildren)
- { Indent(indent); }
+ { Indent(xml, indent); }
if (hasChildren || hasData)
- { OUTMSG(("</%s>\n",name)); }
+ { VDB_CONGIG_OUTMSG(("</%s>\n",name)); }
- DESTRUCT(KNamelist, names);
- DESTRUCT(KConfigNode, node);
+ RELEASE(KNamelist, names);
+ RELEASE(KConfigNode, node);
return rc;
}
@@ -237,6 +276,13 @@ typedef struct Params {
uint32_t argsParamIdx;
uint32_t argsParamCnt;
+ bool xml;
+
+ const char* setValue;
+
+ const char* ngc;
+
+ bool modeSetNode;
bool modeCreate;
bool modeShowCfg;
bool modeShowEnv;
@@ -272,7 +318,30 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
++count;
}
- rc = ArgsOptionCount (args, OPTION_CFG, &pcount);
+ prm->xml = true;
+ rc = ArgsOptionCount(args, OPTION_OUT, &pcount);
+ if (rc) {
+ LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument");
+ break;
+ }
+ if (pcount) {
+ const char* dummy = NULL;
+ rc = ArgsOptionValue(args, OPTION_OUT, 0, &dummy);
+ if (rc) {
+ LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument");
+ break;
+ }
+ if (!strcmp(dummy, "n")) {
+ prm->xml = false;
+ }
+ else if (strcmp(dummy, "x")) {
+ rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+ LOGERR(klogErr, rc, "Bad " OPTION_OUT " value");
+ break;
+ }
+ }
+
+ rc = ArgsOptionCount(args, OPTION_CFG, &pcount);
if (rc) {
LOGERR(klogErr, rc, "Failure to get '" OPTION_CFG "' argument");
break;
@@ -284,7 +353,7 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
}
}
- rc = ArgsOptionCount (args, OPTION_ENV, &pcount);
+ rc = ArgsOptionCount(args, OPTION_ENV, &pcount);
if (rc) {
LOGERR(klogErr, rc, "Failure to get '" OPTION_ENV "' argument");
break;
@@ -294,7 +363,7 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
++count;
}
- rc = ArgsOptionCount (args, OPTION_FIL, &pcount);
+ rc = ArgsOptionCount(args, OPTION_FIL, &pcount);
if (rc) {
LOGERR(klogErr, rc, "Failure to get '" OPTION_FIL "' argument");
break;
@@ -304,7 +373,20 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
++count;
}
- rc = ArgsOptionCount (args, OPTION_MOD, &pcount);
+ rc = ArgsOptionCount(args, OPTION_IMP, &pcount);
+ if (rc) {
+ LOGERR(klogErr, rc, "Failure to get '" OPTION_IMP "' argument");
+ break;
+ }
+ if (pcount) {
+ rc = ArgsOptionValue(args, OPTION_IMP, 0, &prm->ngc);
+ if (rc) {
+ LOGERR(klogErr, rc, "Failure to get '" OPTION_IMP "' argument");
+ break;
+ }
+ }
+
+ rc = ArgsOptionCount(args, OPTION_MOD, &pcount);
if (rc) {
LOGERR(klogErr, rc, "Failure to get '" OPTION_MOD "' argument");
break;
@@ -314,7 +396,8 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
++count;
}
- rc = ArgsOptionCount (args, OPTION_NEW, &pcount);
+#if 0
+ rc = ArgsOptionCount(args, OPTION_NEW, &pcount);
if (rc) {
LOGERR(klogErr, rc, "Failure to get '" OPTION_NEW "' argument");
break;
@@ -323,8 +406,9 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
prm->modeCreate = true;
++count;
}
+#endif
- rc = ArgsOptionCount (args, OPTION_DIR, &pcount);
+ rc = ArgsOptionCount(args, OPTION_DIR, &pcount);
if (rc) {
LOGERR(klogErr, rc, "Failure to get '" OPTION_DIR "' argument");
break;
@@ -334,7 +418,29 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
++count;
}
- rc = ArgsOptionCount (args, OPTION_ALL, &pcount);
+ rc = ArgsOptionCount(args, OPTION_SET, &pcount);
+ if (rc) {
+ LOGERR(klogErr, rc, "Failure to get '" OPTION_SET "' argument");
+ break;
+ }
+ if (pcount) {
+ rc = ArgsOptionValue(args, OPTION_SET, 0, &prm->setValue);
+ if (rc == 0) {
+ const char* p = strchr(prm->setValue, '=');
+ if (p == NULL || *(p + 1) == '\0') {
+ rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+ LOGERR(klogErr, rc, "Bad " OPTION_SET " value");
+ break;
+ }
+ prm->modeSetNode = true;
+ prm->modeCreate = prm->modeShowCfg = prm->modeShowEnv
+ = prm->modeShowFiles = prm->modeShowLoadPath
+ = prm->modeShowModules = false;
+ count = 1;
+ }
+ }
+
+ rc = ArgsOptionCount(args, OPTION_ALL, &pcount);
if (rc) {
LOGERR(klogErr, rc, "Failure to get '" OPTION_ALL "' argument");
break;
@@ -342,7 +448,8 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
if (pcount
|| ( !prm->modeShowCfg && ! prm->modeShowLoadPath
&& !prm->modeShowEnv && !prm->modeShowFiles
- && !prm->modeShowModules && !prm->modeCreate ))
+ && !prm->modeShowModules && !prm->modeCreate
+ && !prm->modeSetNode && !prm->ngc))
/* show all by default */
{
prm->modeShowCfg = prm->modeShowEnv = prm->modeShowFiles = true;
@@ -374,7 +481,7 @@ static rc_t ParamsGetNextParam(Params* prm, const char** param) {
static rc_t ParamsDestruct(Params* prm) {
rc_t rc = 0;
assert(prm);
- DESTRUCT(Args, prm->args);
+ RELEASE(Args, prm->args);
return rc;
}
@@ -386,7 +493,7 @@ rc_t privReadStdinLine(char* buf, size_t bsize, bool destroy)
static uint64_t pos = 0;
size_t num_read = 0;
if (destroy) {
- DESTRUCT(KFile, std_in);
+ RELEASE(KFile, std_in);
pos = 0;
return rc;
}
@@ -496,7 +603,7 @@ static rc_t CreateConfig(char* argv0) {
if (home)
{ def = home; }
else {
- rc = KPathGetCWD(cwd, sizeof cwd);
+ rc = VPathGetCWD(cwd, sizeof cwd);
if (rc == 0 && cwd[0])
{ def = cwd; }
else
@@ -547,7 +654,7 @@ static rc_t CreateConfig(char* argv0) {
{ break; }
rc = KDirectoryOpenDirRead(native, &dir, false, refseq);
if (rc == 0) {
- DESTRUCT(KDirectory, dir);
+ RELEASE(KDirectory, dir);
break;
}
else if (GetRCObject(rc) == rcPath
@@ -608,21 +715,22 @@ static rc_t CreateConfig(char* argv0) {
pos += num_writ;
}
}
- DESTRUCT(KFile, f);
+ RELEASE(KFile, f);
}
free(mod);
free(wmod);
free(refseq);
free(location);
- DESTRUCT(KDirectory, dir);
- DESTRUCT(KDirectory, native);
- DESTRUCT(KFile, std_in);
+ RELEASE(KDirectory, dir);
+ RELEASE(KDirectory, native);
+ RELEASE(KFile, std_in);
DestroyStdin();
return rc;
}
#ifndef _STATIC
+#if 0
static rc_t CC scan_mod_dir(const KDirectory* dir,
uint32_t type, const char* name, void* data)
{
@@ -670,18 +778,50 @@ static rc_t ShowModDir(const KDirectory* native, char* path) {
}
return rc;
}
-
#endif
+#endif
+
static rc_t ShowModules(const KConfig* cfg, const Params* prm) {
rc_t rc = 0;
#ifdef _STATIC
OUTMSG(("<!-- Modules are not used in static build -->\n"));
#else
+ const VDBManager* mgr = NULL;
+ KNamelist* list = NULL;
+ OUTMSG(("<!-- Modules -->\n"));
+ rc = VDBManagerMakeRead(&mgr, NULL);
+ DISP_RC(rc, "while calling VDBManagerMakeRead");
+ if (rc == 0) {
+ rc = VDBManagerListExternalSchemaModules(mgr, &list);
+ DISP_RC(rc, "while calling VDBManagerListExternalSchemaModules");
+ }
+ if (rc == 0) {
+ uint32_t count = 0;
+ rc = KNamelistCount(list, &count);
+ DISP_RC(rc, "while calling KNamelistCount "
+ "on VDBManagerListExternalSchemaModules result");
+ if (rc == 0) {
+ int64_t i = 0;
+ for (i = 0; i < count && rc == 0; ++i) {
+ const char* name = NULL;
+ rc = KNamelistGet(list, i, &name);
+ DISP_RC(rc, "while calling KNamelistGet "
+ "on VDBManagerListExternalSchemaModules result");
+ if (rc == 0) {
+ OUTMSG(("%s\n", name));
+ }
+ }
+ }
+ }
+ OUTMSG(("\n"));
+ RELEASE(KNamelist, list);
+ RELEASE(VDBManager, mgr);
+#endif
+#if 0
KDirectory* dir = NULL;
const char* paths[] = { "vdb/module/paths", "vdb/wmodule/paths" };
int i = 0;
assert(cfg);
- OUTMSG(("<!-- Modules -->\n"));
for (i = 0; i < sizeof paths / sizeof paths[0] && rc == 0; ++i) {
const KConfigNode* node = NULL;
if (rc == 0) {
@@ -717,19 +857,72 @@ static rc_t ShowModules(const KConfig* cfg, const Params* prm) {
}
}
}
- DESTRUCT(KConfigNode, node);
+ RELEASE(KConfigNode, node);
}
}
- DESTRUCT(KDirectory, dir);
+ RELEASE(KDirectory, dir);
#endif
return rc;
}
+static rc_t SetNode(KConfig* cfg, const Params* prm) {
+ rc_t rc = 0;
+
+ KConfigNode* node = NULL;
+ char* name = NULL;
+ char* val = NULL;
+
+ assert(cfg && prm && prm->setValue);
+
+ name = strdup(prm->setValue);
+ if (name == NULL)
+ { return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted); }
+
+ val = strchr(name, '=');
+ if (val == NULL || *(val + 1) == '\0') {
+ rc_t rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+ LOGERR(klogErr, rc, "Bad " OPTION_SET " value");
+ }
+
+ if (rc == 0) {
+ *(val++) = '\0';
+
+ rc = KConfigOpenNodeUpdate(cfg, &node, name);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "Cannot open node '$(name)' for update", "name=%s", name));
+ }
+ }
+
+ if (rc == 0) {
+ assert(val);
+ rc = KConfigNodeWrite(node, val, strlen(val));
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "Cannot write value '$(val) to node '$(name)'",
+ "val=%s,name=%s", val, name));
+ }
+ }
+
+ if (rc == 0) {
+ rc = KConfigCommit(cfg);
+ DISP_RC(rc, "while calling KConfigCommit");
+ }
+
+ free(name);
+ name = NULL;
+
+ RELEASE(KConfigNode, node);
+ return rc;
+}
+
static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
rc_t rc = 0;
bool hasAny = false;
bool hasQuery = false;
+ bool xml = true;
assert(cfg && prm);
+ xml = prm->xml;
while (rc == 0) {
KNamelist* names = NULL;
const KConfigNode* node = NULL;
@@ -765,9 +958,12 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
}
else {
char *c = memrchr(root, '/', len);
- if (c != NULL)
- { nodeName = c + 1; }
- else { nodeName = root; }
+ if (c != NULL) {
+ nodeName = c + 1;
+ }
+ else {
+ nodeName = root;
+ }
}
assert(nodeName && nodeName[0]);
nodeNameL = strlen(nodeName);
@@ -792,9 +988,15 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
if (rc == 0 && num_read > 0) {
if (prm->showMultiple)
{ OUTMSG(("<!-- Configuration node %s -->\n", root)); }
- OUTMSG(("<%.*s>", nodeNameL, nodeName));
- OUTMSG(("%.*s", (int)num_read, buf));
- OUTMSG(("</%.*s>\n", nodeNameL, nodeName));
+ if (xml) {
+ VDB_CONGIG_OUTMSG(("<%.*s>", nodeNameL, nodeName));
+ VDB_CONGIG_OUTMSG(("%.*s", (int)num_read, buf));
+ VDB_CONGIG_OUTMSG(("</%.*s>\n", nodeNameL, nodeName));
+ }
+ else {
+ OUTMSG(("%.*s = \"%.*s\"\n",
+ nodeNameL, nodeName, (int)num_read, buf));
+ }
hasAny = true;
}
}
@@ -803,11 +1005,11 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
if (nodeName[0] != '/') {
if (prm->showMultiple)
{ OUTMSG(("<!-- Configuration node %s -->\n", root)); }
- OUTMSG(("<%.*s>\n", nodeNameL, nodeName));
+ VDB_CONGIG_OUTMSG(("<%.*s>\n", nodeNameL, nodeName));
} else {
if (prm->showMultiple)
{ OUTMSG(("<!-- Current configuration -->\n")); }
- OUTMSG(("<Config>\n"));
+ VDB_CONGIG_OUTMSG(("<Config>\n"));
}
hasAny = true;
++indent;
@@ -819,11 +1021,12 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
if (rc == 0) {
char* fullname = NULL;
if (strcmp(root, "/") == 0) {
- fullname = calloc(1, 1);
+ fullname = malloc(strlen(name) + 2);
if (fullname == NULL) {
rc = RC(rcExe,
rcStorage, rcAllocating, rcMemory, rcExhausted);
}
+ sprintf(fullname, "/%s", name);
}
else {
fullname = strdup(root);
@@ -834,7 +1037,7 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
}
if (rc == 0) {
rc = KConfigNodePrintChildNames
- (node, name, indent, fullname);
+ (xml, node, name, indent, fullname);
hasAny = true;
}
free(fullname);
@@ -842,17 +1045,26 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
}
}
if (rc == 0) {
- if (nodeName[0] != '/')
- { OUTMSG(("</%.*s>\n", nodeNameL, nodeName)); }
- else { OUTMSG(("</Config>\n")); }
+ if (nodeName[0] != '/') {
+ VDB_CONGIG_OUTMSG(("</%.*s>\n", nodeNameL, nodeName));
+ }
+ else {
+ VDB_CONGIG_OUTMSG(("</Config>\n"));
+ }
}
}
- DESTRUCT(KConfigNode, node);
- DESTRUCT(KNamelist, names);
+ RELEASE(KConfigNode, node);
+ RELEASE(KNamelist, names);
- if (rc == 0 && hasAny)
- { OUTMSG(("\n")); }
+ if (rc == 0) {
+ if (hasAny) {
+ OUTMSG(("\n"));
+ }
+ else if (nodeNameL > 0 && nodeName != NULL) {
+ VDB_CONGIG_OUTMSG(("<%.*s/>\n", nodeNameL, nodeName));
+ }
+ }
if (!hasQuery)
{ break; }
@@ -889,6 +1101,9 @@ static rc_t ShowFiles(const KConfig* cfg, const Params* prm) {
}
if (rc == 0 && hasAny)
{ OUTMSG(("\n")); }
+
+ RELEASE(KNamelist, names);
+
return rc;
}
@@ -897,7 +1112,8 @@ static void ShowEnv(const Params* prm) {
const char * env_list [] = {
"KLIB_CONFIG",
"VDB_CONFIG",
- "VDBCONFIG"
+ "VDBCONFIG",
+ "LD_LIBRARY_PATH"
};
int i = 0;
@@ -924,8 +1140,9 @@ rc_t CC KMain(int argc, char* argv[]) {
Params prm;
KConfig* cfg = NULL;
- if (rc == 0)
- { rc = ParamsConstruct(argc, argv, &prm); }
+ if (rc == 0) {
+ rc = ParamsConstruct(argc, argv, &prm);
+ }
if (rc == 0) {
rc = KConfigMake(&cfg, NULL);
@@ -933,34 +1150,57 @@ rc_t CC KMain(int argc, char* argv[]) {
}
if (rc == 0) {
- if (prm.modeShowCfg)
- { rc = ShowConfig(cfg, &prm); }
+ if (prm.ngc) {
+ rc = KConfigImportNgc(cfg, prm.ngc, NULL);
+ if (rc == 0) {
+ rc = KConfigCommit(cfg);
+ }
+ if (rc == 0) {
+ OUTMSG(("%s was imported\n", prm.ngc));
+ }
+ }
+ else if (prm.modeSetNode) {
+ rc_t rc3 = SetNode(cfg, &prm);
+ if (rc3 != 0 && rc == 0) {
+ rc = rc3;
+ }
+ }
+ if (prm.modeShowCfg) {
+ rc_t rc3 = ShowConfig(cfg, &prm);
+ if (rc3 != 0 && rc == 0) {
+ rc = rc3;
+ }
+ }
if (prm.modeShowFiles) {
rc_t rc3 = ShowFiles(cfg, &prm);
- if (rc3 != 0 && rc == 0)
- { rc = rc3; }
+ if (rc3 != 0 && rc == 0) {
+ rc = rc3;
+ }
}
if (prm.modeShowModules) {
rc_t rc3 = ShowModules(cfg, &prm);
- if (rc3 != 0 && rc == 0)
- { rc = rc3; }
+ if (rc3 != 0 && rc == 0) {
+ rc = rc3;
+ }
}
if (prm.modeShowLoadPath) {
const char* path = NULL;
rc_t rc3 = KConfigGetLoadPath(cfg, &path);
if (rc3 == 0) {
- if (path != NULL && path[0])
- { OUTMSG(("%s\n", path)); }
+ if (path != NULL && path[0]) {
+ OUTMSG(("%s\n", path));
+ }
+ }
+ else if (rc == 0) {
+ rc = rc3;
}
- else if (rc == 0)
- { rc = rc3; }
}
}
if (prm.modeShowEnv)
{ ShowEnv(&prm); }
- DESTRUCT(KConfig, cfg);
+ RELEASE(KConfig, cfg);
if (rc == 0 && prm.modeCreate)
{ rc = CreateConfig(argv[0]); }
diff --git a/tools/vdb-config/vdb-config.vers b/tools/vdb-config/vdb-config.vers
index 04b10b4..f90b1af 100644
--- a/tools/vdb-config/vdb-config.vers
+++ b/tools/vdb-config/vdb-config.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/vdb-config/vdb-config.vers.h b/tools/vdb-config/vdb-config.vers.h
deleted file mode 100644
index 7be5280..0000000
--- a/tools/vdb-config/vdb-config.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_CONFIG_VERS 0x02010007
diff --git a/tools/vdb-copy/#Makefile# b/tools/vdb-copy/#Makefile#
new file mode 100644
index 0000000..e404a18
--- /dev/null
+++ b/tools/vdb-copy/#Makefile#
@@ -0,0 +1,137 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/vdb-copy
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+ vdb-copy
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: $(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# vdb-copy
+# vdb copy tool
+#
+$(BINDIR)/vdb-copy: $(NCBIDIR)/vdb-copy.kfg
+
+$(NCBIDIR)/vdb-copy.kfg: $(SRCDIR)/vdb-copy.kfg
+ cp $^ $@
+
+VDB_COPY_SRC = \
+ num-gen \
+ context \
+ helper \
+ coldefs \
+ get_platform \
+ namelist_tools \
+ progressbar \
+ copy_meta \
+ type_matcher \
+ redactval \
+ config_values \
+ vdb-copy
+
+VDB_COPY_OBJ = \
+ $(addsuffix .$(OBJX),$(VDB_COPY_SRC))
+
+VDB_COPY_LIB = \
+ -ssrapath \
+ -swsraschema \
+ -dwsraxf \
+ -dwvxf \
+ -lwvdb \
+ -lwkdb \
+ -lkapp \
+ -lvfs \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lksrch \
+ -lklib \
+ -lkproc \
+ -lm
+
+$(BINDIR)/vdb-copy: $(VDB_COPY_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_COPY_LIB)
+
+vdb-copy_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) vdb-copy $(VDB_COPY_OBJ)
diff --git a/tools/vdb-copy/Makefile b/tools/vdb-copy/Makefile
index 34d5ae5..eea6e0d 100644
--- a/tools/vdb-copy/Makefile
+++ b/tools/vdb-copy/Makefile
@@ -25,7 +25,7 @@
default: std
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
MODULE = tools/vdb-copy
include $(TOP)/build/Makefile.env
@@ -42,15 +42,13 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/$@
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# all
@@ -69,18 +67,18 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
-# clean
+# vers-includes
#
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
#-------------------------------------------------------------------------------
-# tag
+# clean
#
-tag: $(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
#-------------------------------------------------------------------------------
# vdb-copy
@@ -111,23 +109,20 @@ VDB_COPY_OBJ = \
VDB_COPY_LIB = \
-ssrapath \
-swsraschema \
- -dwsraxf \
- -dwvxf \
+ $(UPDATE_SCHEMA_LIBS) \
+ -lalign-reader \
-lwvdb \
-lwkdb \
-lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
-lksrch \
- -lklib \
-lkproc \
- -ldl \
- -lz \
- -lbz2 \
+ -lklib \
-lm
$(BINDIR)/vdb-copy: $(VDB_COPY_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_COPY_LIB)
-
-vdb-copy_tag:
- @ $(TOP)/build/tag-module.sh $(MODULE) vdb-copy $(VDB_COPY_OBJ)
diff --git a/tools/vdb-copy/coldefs.c b/tools/vdb-copy/coldefs.c
index e4aca12..b89a2e8 100644
--- a/tools/vdb-copy/coldefs.c
+++ b/tools/vdb-copy/coldefs.c
@@ -28,9 +28,11 @@
#include "helper.h"
#include "definitions.h"
+#include <klib/text.h>
+#include <klib/printf.h>
+
#include <sysalloc.h>
-#include <fmtdef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -230,7 +232,7 @@ rc_t col_defs_add_to_rd_cursor( col_defs* defs, const VCursor *cursor, bool show
DISP_RC( rc, "col_defs_add_to_cursor:VCursorDatatype() failed" );
col->src_valid = ( rc == 0 );
if ( show && col->src_valid )
- OUTMSG(( "added to rd-cursor: >%s<\n", col->name ));
+ KOutMsg( "added to rd-cursor: >%s<\n", col->name );
}
}
@@ -322,9 +324,9 @@ rc_t col_defs_add_to_wr_cursor( col_defs* defs, const VCursor* cursor, bool show
if ( show )
{
if ( col->to_copy )
- OUTMSG(( "added to wr-cursor: >%s<\n", col->name ));
+ KOutMsg( "added to wr-cursor: >%s<\n", col->name );
else
- OUTMSG(( "cannot add >%s<\n", col->name ));
+ KOutMsg( "cannot add >%s<\n", col->name );
}
}
}
@@ -545,11 +547,10 @@ uint32_t col_defs_count_copy_cols( col_defs* defs )
* given list of column-names the to copy-flag is cleared
* does not require an open cursor.
*/
-rc_t col_defs_exclude_these_columns( col_defs* defs, const char * column_names )
+rc_t col_defs_exclude_these_columns( col_defs* defs, const char * prefix, const char * column_names )
{
rc_t rc = 0;
const KNamelist *names;
- uint32_t idx, len;
if ( defs == NULL )
return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
@@ -563,14 +564,40 @@ rc_t col_defs_exclude_these_columns( col_defs* defs, const char * column_names )
DISP_RC( rc, "col_defs_parse_string:nlt_make_namelist_from_string() failed" );
if ( rc == 0 )
{
- len = VectorLength( &(defs->cols) );
+ uint32_t idx, len = VectorLength( &(defs->cols) );
+ size_t prefix_len = 0;
+ if ( prefix != 0 )
+ prefix_len = string_size( prefix ) + 2;
for ( idx = 0; idx < len; ++idx )
{
p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
if ( col != NULL )
+ {
if ( col->requested )
+ {
if ( nlt_is_name_in_namelist( names, col->name ) )
col->requested = false;
+ else
+ {
+ if ( prefix != NULL )
+ {
+ size_t len1 = string_size ( col->name ) + prefix_len;
+ char * s = malloc( len1 );
+ if ( s != NULL )
+ {
+ size_t num_writ;
+ rc_t rc1 = string_printf ( s, len1, &num_writ, "%s:%s", prefix, col->name );
+ if ( rc1 == 0 )
+ {
+ if ( nlt_is_name_in_namelist( names, s ) )
+ col->requested = false;
+ }
+ free( s );
+ }
+ }
+ }
+ }
+ }
}
KNamelistRelease( names );
}
@@ -696,7 +723,7 @@ rc_t col_defs_mark_writable_columns( col_defs* defs, VTable *tab, bool show )
if ( nlt_is_name_in_namelist( writables, col->name ) )
{
if ( show )
- OUTMSG(( "writable column: >%s<\n", col->name ));
+ KOutMsg( "writable column: >%s<\n", col->name );
col->to_copy = true;
}
}
diff --git a/tools/vdb-copy/coldefs.h b/tools/vdb-copy/coldefs.h
index 9cd92ae..5313f18 100644
--- a/tools/vdb-copy/coldefs.h
+++ b/tools/vdb-copy/coldefs.h
@@ -231,7 +231,7 @@ uint32_t col_defs_count_copy_cols( col_defs* defs );
* does not require an open cursor.
*/
rc_t col_defs_exclude_these_columns( col_defs* defs,
- const char * column_names );
+ const char * prefix, const char * column_names );
rc_t col_defs_as_string( col_defs* defs, char ** dst, bool only_requested );
diff --git a/tools/vdb-copy/context.c b/tools/vdb-copy/context.c
index b6c5d52..6dfe569 100644
--- a/tools/vdb-copy/context.c
+++ b/tools/vdb-copy/context.c
@@ -428,7 +428,11 @@ static void context_evaluate_options( const Args *my_args, p_context ctx )
context_set_md5_mode( ctx, context_get_str_option( my_args, OPTION_MD5_MODE ) );
context_set_blob_checksum( ctx, context_get_str_option( my_args, OPTION_BLOB_CHECKSUM ) );
+
+#if ALLOW_EXTERNAL_CONFIG
context_set_kfg_path( ctx, context_get_str_option( my_args, OPTION_KFG_PATH ) );
+#endif
+
context_set_table( ctx, context_get_str_option( my_args, OPTION_TABLE ) );
#if ALLOW_COLUMN_SPEC
context_set_columns( ctx, context_get_str_option( my_args, OPTION_COLUMNS ) );
diff --git a/tools/vdb-copy/context.h b/tools/vdb-copy/context.h
index 43d047a..dbeb202 100644
--- a/tools/vdb-copy/context.h
+++ b/tools/vdb-copy/context.h
@@ -54,7 +54,11 @@ extern "C" {
#define OPTION_WITHOUT_ACCESSION "without_accession"
#define OPTION_IGNORE_REJECT "ignore_reject"
#define OPTION_IGNORE_REDACT "ignore_redact"
+
+#if ALLOW_EXTERNAL_CONFIG
#define OPTION_KFG_PATH "kfg_path"
+#endif
+
#define OPTION_SHOW_MATCHING "show_matching"
#define OPTION_SHOW_PROGRESS "show_progress"
#define OPTION_IGNORE_INCOMP "ignore_incompatible_columns"
@@ -75,7 +79,11 @@ extern "C" {
#define ALIAS_WITHOUT_ACCESSION "a"
#define ALIAS_IGNORE_REJECT "r"
#define ALIAS_IGNORE_REDACT "e"
+
+#if ALLOW_EXTERNAL_CONFIG
#define ALIAS_KFG_PATH "k"
+#endif
+
#define ALIAS_SHOW_MATCHING "m"
#define ALIAS_SHOW_PROGRESS "p"
#define ALIAS_IGNORE_INCOMP "i"
diff --git a/tools/vdb-copy/copy_meta.c b/tools/vdb-copy/copy_meta.c
index 1786fb9..f80feed 100644
--- a/tools/vdb-copy/copy_meta.c
+++ b/tools/vdb-copy/copy_meta.c
@@ -29,6 +29,7 @@
#include "definitions.h"
#include <klib/text.h>
#include <klib/printf.h>
+#include <klib/time.h>
#include <kdb/meta.h>
#include <kdb/namelist.h>
#include <sysalloc.h>
@@ -86,7 +87,7 @@ static rc_t copy_metadata_attribs ( const KMDataNode *snode, KMDataNode *dnode,
if ( rc == 0 )
{
if ( show_meta )
- OUTMSG (( "copy atr %s : %s\n", node_path, attr ));
+ KOutMsg( "copy atr %s : %s\n", node_path, attr );
rc = KMDataNodeWriteAttr ( dnode, attr, buffer );
}
}
@@ -110,7 +111,7 @@ static rc_t copy_metadata_child ( const KMDataNode *src_root, KMDataNode *dst_ro
if ( rc != 0 ) return rc;
if ( show_meta )
- OUTMSG (( "copy child-node: %s\n", node_path ));
+ KOutMsg( "copy child-node: %s\n", node_path );
rc = KMDataNodeOpenNodeUpdate ( dst_root, & dnode, node_path );
DISP_RC( rc, "copy_metadata_child:KMDataNodeOpenNodeUpdate(dst) failed" );
@@ -137,8 +138,8 @@ static rc_t copy_metadata_child ( const KMDataNode *src_root, KMDataNode *dst_ro
char temp_path[ 1024 ];
size_t temp_len;
- strncpy( temp_path, node_path, sizeof(temp_path) - 1 );
- temp_len = strlen( temp_path );
+ string_copy ( temp_path, ( sizeof temp_path ) - 1, node_path, string_size( node_path ) );
+ temp_len = string_size( temp_path );
temp_path[ temp_len++ ] = '/';
temp_path[ temp_len ] = 0;
rc = KNamelistCount ( names, & count );
@@ -148,7 +149,7 @@ static rc_t copy_metadata_child ( const KMDataNode *src_root, KMDataNode *dst_ro
rc = KNamelistGet ( names, i, & child_name );
if ( rc == 0 )
{
- strncat( temp_path, child_name, sizeof( temp_path ) -1 );
+ string_copy( temp_path + temp_len, ( sizeof temp_path ) - temp_len, child_name, string_size( child_name ) );
rc = copy_metadata_child ( src_root, dst_root, temp_path, show_meta );
temp_path[ temp_len ] = 0;
}
@@ -258,7 +259,7 @@ static rc_t copy_back_revisions ( const KMetadata *src_meta, VTable *dst_table,
const KMetadata *src_rev_meta;
if ( show_meta )
- OUTMSG (( "+++copy metadata rev. #%u:\n", revision ));
+ KOutMsg( "+++copy metadata rev. #%u:\n", revision );
rc = KMetadataOpenRevision ( src_meta, &src_rev_meta, revision );
DISP_RC( rc, "copy_back_revisions:KMetadataOpenRevision() failed" );
if ( rc == 0 )
@@ -288,38 +289,39 @@ static rc_t copy_back_revisions ( const KMetadata *src_meta, VTable *dst_table,
return rc;
}
-
-static
-rc_t enter_time( KMDataNode *node, const char * key )
+static rc_t fill_timestring( char * s, size_t size )
{
- time_t rawtime;
- struct tm * timeinfo;
- size_t size;
- char * s;
+ KTime tr;
rc_t rc;
+
+ KTimeLocal ( &tr, KTimeStamp() );
+/*
+ rc = string_printf ( s, size, NULL,
+ "%.04u-%.02u-%.02u %.02u:%.02u:%.02u",
+ tr.year, tr.month + 1, tr.day, tr.hour, tr.minute, tr.second );
+*/
+ rc = string_printf ( s, size, NULL, "%lT", &tr );
- time( &rawtime );
- timeinfo = localtime( &rawtime );
- s = string_dup_measure ( asctime( timeinfo ), &size );
- if ( s == NULL )
- return RC( rcExe, rcNoTarg, rcCopying, rcMemory, rcExhausted );
- if ( size < 2 )
+ DISP_RC( rc, "fill_timestring:string_printf( date/time ) failed" );
+ return rc;
+}
+
+static rc_t enter_time( KMDataNode *node, const char * key )
+{
+ char timestring[ 160 ];
+ rc_t rc = fill_timestring( timestring, sizeof timestring );
+ if ( rc == 0 )
{
- free( s );
- return RC( rcExe, rcNoTarg, rcCopying, rcBuffer, rcInvalid );
+ rc = KMDataNodeWriteAttr ( node, key, timestring );
+ DISP_RC( rc, "enter_time:KMDataNodeWriteAttr( timestring ) failed" );
}
- s[ size - 1 ] = 0; /* remove the newline */
- rc = KMDataNodeWriteAttr ( node, key, s );
- DISP_RC( rc, "enter_time:KMDataNodeWriteAttr() failed" );
- free( s );
return rc;
}
-static
-rc_t enter_version( KMDataNode *node, const char * key )
+static rc_t enter_version( KMDataNode *node, const char * key )
{
- char buff[32];
+ char buff[ 32 ];
rc_t rc;
rc = string_printf ( buff, sizeof( buff ), NULL, "%.3V", VDB_COPY_VERS );
@@ -329,35 +331,104 @@ rc_t enter_version( KMDataNode *node, const char * key )
return rc;
}
-static
-rc_t enter_schema_update( KMetadata *dst_meta, const bool show_meta )
+
+static rc_t enter_date_name_vers( KMDataNode *node )
+{
+ rc_t rc = enter_time( node, "run" );
+ DISP_RC( rc, "enter_date_name_vers:enter_time() failed" );
+ if ( rc == 0 )
+ {
+ rc = KMDataNodeWriteAttr ( node, "tool", "vdb-copy" );
+ DISP_RC( rc, "enter_date_name_vers:KMDataNodeWriteAttr(tool=vdb-copy) failed" );
+ if ( rc == 0 )
+ {
+ rc = enter_version ( node, "vers" );
+ DISP_RC( rc, "enter_date_name_vers:enter_version() failed" );
+ if ( rc == 0 )
+ {
+ rc = KMDataNodeWriteAttr ( node, "build", __DATE__ );
+ DISP_RC( rc, "enter_date_name_vers:KMDataNodeWriteAttr(build=_DATE_) failed" );
+ }
+ }
+ }
+ return rc;
+}
+
+static rc_t enter_schema_update( KMetadata *dst_meta, const bool show_meta )
{
rc_t rc;
KMDataNode *sw_node;
if ( show_meta )
- OUTMSG(( "--- entering schema-update\n" ));
+ KOutMsg( "--- entering schema-update\n" );
rc = KMetadataOpenNodeUpdate ( dst_meta, &sw_node, "SOFTWARE" );
- DISP_RC( rc, "enter_schema_update:KMetadataOpenNodeUpdate() failed" );
+ DISP_RC( rc, "enter_schema_update:KMetadataOpenNodeUpdate('SOFTWARE') failed" );
if ( rc == 0 )
{
KMDataNode *update_node;
rc = KMDataNodeOpenNodeUpdate ( sw_node, &update_node, "update" );
- DISP_RC( rc, "enter_schema_update:KMDataNodeOpenNodeUpdate() failed" );
+ DISP_RC( rc, "enter_schema_update:KMDataNodeOpenNodeUpdate('update') failed" );
if ( rc == 0 )
{
- rc = enter_time( update_node, "date" );
- rc = KMDataNodeWriteAttr ( update_node, "name", "vdb-copy" );
- DISP_RC( rc, "enter_schema_update:KMDataNodeWriteAttr( name=vdb-copy) failed" );
- rc = enter_version ( update_node, "vers" );
+ rc = enter_date_name_vers( update_node );
KMDataNodeRelease ( update_node );
}
+ KMDataNodeRelease ( sw_node );
}
- KMDataNodeRelease ( sw_node );
return rc;
}
+
+static uint32_t get_child_count( KMDataNode *node )
+{
+ uint32_t res = 0;
+ KNamelist *names;
+ rc_t rc = KMDataNodeListChild ( node, &names );
+ DISP_RC( rc, "get_child_count:KMDataNodeListChild() failed" );
+ if ( rc == 0 )
+ {
+ rc = KNamelistCount ( names, &res );
+ DISP_RC( rc, "get_child_count:KNamelistCount() failed" );
+ KNamelistRelease ( names );
+ }
+ return res;
+}
+
+
+static rc_t enter_vdbcopy_node( KMetadata *dst_meta, const bool show_meta )
+{
+ rc_t rc;
+ KMDataNode *hist_node;
+
+ if ( show_meta )
+ KOutMsg( "--- entering Copy entry...\n" );
+
+ rc = KMetadataOpenNodeUpdate ( dst_meta, &hist_node, "HISTORY" );
+ DISP_RC( rc, "enter_vdbcopy_node:KMetadataOpenNodeUpdate('HISTORY') failed" );
+ if ( rc == 0 )
+ {
+ char event_name[ 32 ];
+ uint32_t index = get_child_count( hist_node ) + 1;
+ rc = string_printf ( event_name, sizeof( event_name ), NULL, "EVENT_%u", index );
+ DISP_RC( rc, "enter_vdbcopy_node:string_printf(EVENT_NR) failed" );
+ if ( rc == 0 )
+ {
+ KMDataNode *event_node;
+ rc = KMDataNodeOpenNodeUpdate ( hist_node, &event_node, event_name );
+ DISP_RC( rc, "enter_vdbcopy_node:KMDataNodeOpenNodeUpdate('EVENT_NR') failed" );
+ if ( rc == 0 )
+ {
+ rc = enter_date_name_vers( event_node );
+ KMDataNodeRelease ( event_node );
+ }
+ }
+ KMDataNodeRelease ( hist_node );
+ }
+ return rc;
+}
+
+
rc_t copy_table_meta ( const VTable *src_table, VTable *dst_table,
const char * excluded_nodes,
const bool show_meta, const bool schema_updated )
@@ -382,16 +453,26 @@ rc_t copy_table_meta ( const VTable *src_table, VTable *dst_table,
if ( rc == 0 )
{
if ( show_meta )
- OUTMSG (( "+++copy current metadata\n" ));
+ KOutMsg( "+++copy current metadata\n" );
rc = copy_stray_metadata ( src_meta, dst_meta, excluded_nodes,
show_meta );
if ( show_meta )
- OUTMSG (( "+++end of copy current metadata\n" ));
+ KOutMsg( "+++end of copy current metadata\n" );
+ /* enter a attribute "vdb-copy" under '/SOFTWARE/update'
+ *if the schema was updated ! */
if ( rc == 0 && schema_updated )
rc = enter_schema_update( dst_meta, show_meta );
+ /* enter a unconditional node under '/SOFTWARE/Copy'
+ <%TIMESTAMP%>
+ <Application date="%DATE%" name="vdb-copy" vers="%VERSION%"/>
+ </%TIMESTAMP%>
+ */
+ if ( rc == 0 )
+ rc = enter_vdbcopy_node( dst_meta, show_meta );
+
KMetadataRelease ( dst_meta );
}
}
@@ -422,12 +503,12 @@ rc_t copy_database_meta ( const VDatabase *src_db, VDatabase *dst_db,
if ( rc == 0 )
{
if ( show_meta )
- OUTMSG (( "+++copy current db-metadata\n" ));
+ KOutMsg( "+++copy current db-metadata\n" );
rc = copy_stray_metadata ( src_meta, dst_meta, excluded_nodes,
show_meta );
if ( show_meta )
- OUTMSG (( "+++end of copy db-current metadata\n" ));
+ KOutMsg( "+++end of copy db-current metadata\n" );
KMetadataRelease ( dst_meta );
}
diff --git a/tools/vdb-copy/definitions.h b/tools/vdb-copy/definitions.h
index f349c66..0628692 100644
--- a/tools/vdb-copy/definitions.h
+++ b/tools/vdb-copy/definitions.h
@@ -50,6 +50,8 @@ extern "C" {
#define DB_COPY_ENABLED 1
+#define ALLOW_EXTERNAL_CONFIG 1
+
#define SRA_PF_UNDEF 0
#define SRA_PF_454 1
#define SRA_PF_ILLUMINA 2
diff --git a/tools/vdb-copy/helper.c b/tools/vdb-copy/helper.c
index 49458aa..8e40b2e 100644
--- a/tools/vdb-copy/helper.c
+++ b/tools/vdb-copy/helper.c
@@ -166,6 +166,7 @@ rc_t helper_parse_schema( const VDBManager *my_manager,
}
+#if TOOLS_USE_SRAPATH != 0
static char *translate_accession( SRAPath *my_sra_path,
const char *accession,
const size_t bufsize )
@@ -182,7 +183,6 @@ static char *translate_accession( SRAPath *my_sra_path,
}
else if ( GetRCState( rc ) == rcInsufficient )
{
- /* bufsize was insufficient ---> repeat */
free( res );
return translate_accession( my_sra_path, accession, bufsize * 2 );
}
@@ -193,15 +193,10 @@ static char *translate_accession( SRAPath *my_sra_path,
}
return res;
}
+#endif
-/*
- * tries to interpret the given string in path as a accession
- * and returns the path of the found accession back in path
- * if it is possible, if not the original value of path remains unchanged
- * rc = 0 if the given path is a file-system-path or we are not
- * (weakly) linked against the sra-path-library
-*/
+#if TOOLS_USE_SRAPATH != 0
rc_t helper_resolve_accession( const KDirectory *my_dir, char ** path )
{
SRAPath *my_sra_path;
@@ -233,6 +228,7 @@ rc_t helper_resolve_accession( const KDirectory *my_dir, char ** path )
}
return rc;
}
+#endif
/*
@@ -920,4 +916,4 @@ KChecksum helper_assemble_ChecksumMode( uint8_t ctx_blob_checksum )
case BLOB_CHECKSUM_AUTO : res = kcsCRC32; break;
}
return res;
-}
\ No newline at end of file
+}
diff --git a/tools/vdb-copy/helper.h b/tools/vdb-copy/helper.h
index 8253402..998961e 100644
--- a/tools/vdb-copy/helper.h
+++ b/tools/vdb-copy/helper.h
@@ -61,10 +61,9 @@ rc_t helper_parse_schema( const VDBManager *my_manager,
* if it is possible, if not the original value of path remains unchanged
* rc = 0 if the given path is a file-system-path or we are not
* (weakly) linked against the sra-path-library
-*/
rc_t helper_resolve_accession( const KDirectory *my_dir,
char ** path );
-
+*/
/*
* calls VTableTypespec to discover the table-name out of the schema
diff --git a/tools/vdb-copy/namelist_tools.c b/tools/vdb-copy/namelist_tools.c
index 1c7df2b..270449b 100644
--- a/tools/vdb-copy/namelist_tools.c
+++ b/tools/vdb-copy/namelist_tools.c
@@ -184,4 +184,4 @@ rc_t nlt_remove_strings_from_namelist( const KNamelist *source,
KNamelistRelease( to_remove );
}
return rc;
-}
\ No newline at end of file
+}
diff --git a/tools/vdb-copy/num-gen.c b/tools/vdb-copy/num-gen.c
index d7922db..93125ac 100644
--- a/tools/vdb-copy/num-gen.c
+++ b/tools/vdb-copy/num-gen.c
@@ -25,6 +25,8 @@
*/
#include "num-gen.h"
+#include <klib/printf.h>
+
#include <sysalloc.h>
#include <strtol.h>
#include <stdlib.h>
@@ -617,11 +619,11 @@ static void CC num_gen_as_string_cb( void *item, void *data )
long unsigned int end = ( start + node->count - 1 );
switch( node->count )
{
- case 0 : temp[0]=0;
+ case 0 : temp[ 0 ] = 0;
break;
- case 1 : sprintf( temp, "%lu,", start );
+ case 1 : string_printf ( temp, sizeof temp, NULL, "%lu,", start );
break;
- default: sprintf( temp, "%lu-%lu,", start, end );
+ default: string_printf ( temp, sizeof temp, NULL, "%lu-%lu,", start, end );
break;
}
string_ctx_add( ( p_string_ctx )data, temp );
@@ -657,7 +659,7 @@ static void CC num_gen_debug_cb( void *item, void *data )
p_num_gen_node node = ( p_num_gen_node )item;
long unsigned int start = node->start;
long unsigned int count = node->count;
- sprintf( temp, "[s:%lu c:%lu]", start, count );
+ string_printf ( temp, sizeof temp, NULL, "[s:%lu c:%lu]", start, count );
string_ctx_add( ( p_string_ctx )data, temp );
}
diff --git a/tools/vdb-copy/progressbar.c b/tools/vdb-copy/progressbar.c
index 043e9df..85a793a 100644
--- a/tools/vdb-copy/progressbar.c
+++ b/tools/vdb-copy/progressbar.c
@@ -56,22 +56,22 @@ rc_t destroy_progressbar( progressbar * pb )
static void progess_0a( const uint16_t percent )
{
- OUTMSG (( "| %2u%%", percent ));
+ KOutMsg( "| %2u%%", percent );
}
static void progess_0( const uint16_t percent )
{
if ( percent & 1 )
- OUTMSG (( "\b\b\b\b- %2u%%", percent ));
+ KOutMsg( "\b\b\b\b- %2u%%", percent );
else
- OUTMSG (( "\b\b\b%2u%%", percent ));
+ KOutMsg( "\b\b\b%2u%%", percent );
}
static void progess_1a( const uint16_t percent )
{
uint16_t p1 = percent / 10;
uint16_t p0 = percent - ( p1 * 10 );
- OUTMSG (( "| %2u.%01u%%", p1, p0 ));
+ KOutMsg( "| %2u.%01u%%", p1, p0 );
}
static void progess_1( const uint16_t percent )
@@ -79,16 +79,16 @@ static void progess_1( const uint16_t percent )
uint16_t p1 = percent / 10;
uint16_t p0 = percent - ( p1 * 10 );
if ( ( p1 & 1 )&&( p0 == 0 ) )
- OUTMSG (( "\b\b\b\b\b\b- %2u.%01u%%", p1, p0 ));
+ KOutMsg( "\b\b\b\b\b\b- %2u.%01u%%", p1, p0 );
else
- OUTMSG (( "\b\b\b\b\b%2u.%01u%%", p1, p0 ));
+ KOutMsg( "\b\b\b\b\b%2u.%01u%%", p1, p0 );
}
static void progess_2a( const uint16_t percent )
{
uint16_t p1 = percent / 100;
uint16_t p0 = percent - ( p1 * 100 );
- OUTMSG (( "| %2u.%02u%%", p1, p0 ));
+ KOutMsg( "| %2u.%02u%%", p1, p0 );
}
static void progess_2( const uint16_t percent )
@@ -96,9 +96,9 @@ static void progess_2( const uint16_t percent )
uint16_t p1 = percent / 100;
uint16_t p0 = percent - ( p1 * 100 );
if ( ( p1 & 1 )&&( p0 == 0 ) )
- OUTMSG (( "\b\b\b\b\b\b\b- %2u.%02u%%", p1, p0 ));
+ KOutMsg( "\b\b\b\b\b\b\b- %2u.%02u%%", p1, p0 );
else
- OUTMSG (( "\b\b\b\b\b\b%2u.%02u%%", p1, p0 ));
+ KOutMsg( "\b\b\b\b\b\b%2u.%02u%%", p1, p0 );
}
rc_t update_progressbar( progressbar * pb, const uint8_t fract_digits,
diff --git a/tools/vdb-copy/redactval.c b/tools/vdb-copy/redactval.c
index a33b7dc..a8c0538 100644
--- a/tools/vdb-copy/redactval.c
+++ b/tools/vdb-copy/redactval.c
@@ -29,7 +29,6 @@
#include "helper.h"
#include <sysalloc.h>
-#include <fmtdef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
diff --git a/tools/vdb-copy/type_matcher.c b/tools/vdb-copy/type_matcher.c
index 2a0efc7..5b08bec 100644
--- a/tools/vdb-copy/type_matcher.c
+++ b/tools/vdb-copy/type_matcher.c
@@ -332,7 +332,7 @@ bool matcher_src_has_type( const matcher* self, const VSchema * s,
res = match_type_with_id_vector( s, &td, id_vector );
/*
if ( res )
- OUTMSG (( "redact-type found on (%s)%s\n", col->type_cast->dst->name, name ));
+ KOutMsg( "redact-type found on (%s)%s\n", col->type_cast->dst->name, name );
*/
return res;
}
@@ -343,14 +343,14 @@ static void matcher_report_types( const char * s, const Vector *v )
len = VectorLength( v );
if ( len > 0 )
{
- OUTMSG (( "%s: ", s ));
+ KOutMsg( "%s: ", s );
for ( idx = 0; idx < len; ++idx )
{
p_mtype item = (p_mtype) VectorGet ( v, idx );
if ( item != NULL )
- OUTMSG (( "[ %s ] ", item->name ));
+ KOutMsg( "[ %s ] ", item->name );
}
- OUTMSG (( "\n" ));
+ KOutMsg( "\n" );
}
}
@@ -360,15 +360,15 @@ static void matcher_report_pair( const p_mpair pair )
if ( pair->src == NULL || pair->dst == NULL )
return;
if ( pair->compatible == 0 )
- OUTMSG (( "[%s](l=%u/o=%u/d=%u) --> [%s] (c) dist=%u\n",
+ KOutMsg( "[%s](l=%u/o=%u/d=%u) --> [%s] (c) dist=%u\n",
pair->src->name,
pair->src->lossy_score, pair->src->order, pair->src->dflt,
- pair->dst->name, pair->distance ));
+ pair->dst->name, pair->distance );
else
- OUTMSG (( "[%s](l=%u/o=%u/d=%u) --> [%s] dist=%u\n",
+ KOutMsg( "[%s](l=%u/o=%u/d=%u) --> [%s] dist=%u\n",
pair->src->name,
pair->src->lossy_score, pair->src->order, pair->src->dflt,
- pair->dst->name, pair->distance ));
+ pair->dst->name, pair->distance );
}
@@ -383,15 +383,15 @@ static void matcher_report_pairs( const Vector *v )
static void matcher_report_col( const p_mcol item )
{
- OUTMSG (( "----------------------------------\n" ));
+ KOutMsg( "----------------------------------\n" );
if ( item->to_copy )
- OUTMSG (( "col: %s (c)\n", item->name ));
+ KOutMsg( "col: %s (c)\n", item->name );
else
- OUTMSG (( "col: %s\n", item->name ));
+ KOutMsg( "col: %s\n", item->name );
matcher_report_types( " src", &(item->src_types ) );
matcher_report_types( " dst", &(item->dst_types ) );
matcher_report_pairs( &(item->pairs ) );
- OUTMSG (( "\n" ));
+ KOutMsg( "\n" );
}
diff --git a/tools/vdb-copy/vdb-copy-includes.h b/tools/vdb-copy/vdb-copy-includes.h
index 0b998c9..f274df6 100644
--- a/tools/vdb-copy/vdb-copy-includes.h
+++ b/tools/vdb-copy/vdb-copy-includes.h
@@ -102,9 +102,11 @@ extern "C" {
#include <sra/sraschema.h>
#endif
+/*
#ifndef _h_sra_srapath_
#include <sra/srapath.h>
#endif
+*/
#ifndef _h_namelist_tools_
#include "namelist_tools.h"
diff --git a/tools/vdb-copy/vdb-copy.c b/tools/vdb-copy/vdb-copy.c
index c71c2e3..aea9fb7 100644
--- a/tools/vdb-copy/vdb-copy.c
+++ b/tools/vdb-copy/vdb-copy.c
@@ -212,14 +212,14 @@ static rc_t vdb_copy_redact_cell( const VCursor * src_cursor, VCursor * dst_curs
if ( show_redact )
{
char * c = ( char * )col->r_val->value;
- OUTMSG (( "redacting #%lu %s -> 0x%.02x\n", row_id, col->dst_cast, *c ));
+ KOutMsg( "redacting #%lu %s -> 0x%.02x\n", row_id, col->dst_cast, *c );
}
redact_val_fill_buffer( col->r_val, rbuf, new_size );
}
else
{
if ( show_redact )
- OUTMSG (( "redacting #%lu %s -> 0\n", row_id, col->dst_cast ));
+ KOutMsg( "redacting #%lu %s -> 0\n", row_id, col->dst_cast );
memset( rbuf->buffer, 0, new_size );
}
@@ -252,8 +252,8 @@ static rc_t vdb_copy_cell( const VCursor * src_cursor, VCursor * dst_cursor,
uint32_t elem_bits;
/*
- OUTMSG (( " - copy cell %s ( src_idx=%u / dst_idx=%u )\n",
- col->name, col->src_idx, col->dst_idx ));
+ KOutMsg( " - copy cell %s ( src_idx=%u / dst_idx=%u )\n",
+ col->name, col->src_idx, col->dst_idx );
*/
rc = VCursorCellData( src_cursor, col->src_idx, &elem_bits,
&buffer, &offset_in_bits, &number_of_elements );
@@ -269,8 +269,8 @@ static rc_t vdb_copy_cell( const VCursor * src_cursor, VCursor * dst_cursor,
if ( rc != 0 ) return rc;
/*
- OUTMSG (( "bit-offset = %u / elements = %u / element-bits = %u\n",
- offset_in_bits, number_of_elements, elem_bits ));
+ KOutMsg( "bit-offset = %u / elements = %u / element-bits = %u\n",
+ offset_in_bits, number_of_elements, elem_bits );
*/
rc = VCursorWrite( dst_cursor, col->dst_idx, elem_bits,
buffer, offset_in_bits, number_of_elements );
@@ -427,61 +427,69 @@ static rc_t vdb_copy_row_loop( const p_context ctx,
fract_digits = vdb_copy_calc_fract_digits( iter );
count = 0;
- while ( ( num_gen_iterator_next( iter, &row_id ) == 0 )&&
- ( rc == 0 ) )
+ rc = num_gen_iterator_next( iter, &row_id );
+ while ( rc == 0 )
{
rc = Quitting(); /* to be able to cancel the loop by signal */
- if ( rc != 0 ) break;
-
- rc = VCursorSetRowId( src_cursor, row_id );
- if ( rc != 0 )
- {
- PLOGERR( klogInt, (klogInt, rc,
- "VCursorSetRowId(src) row #$(row_nr) failed",
- "row_nr=%lu", row_id ));
- }
if ( rc == 0 )
{
- rc = VCursorOpenRow( src_cursor );
+ rc = VCursorSetRowId( src_cursor, row_id );
if ( rc != 0 )
- {
PLOGERR( klogInt, (klogInt, rc,
- "VCursorOpenRow(src) row #$(row_nr) failed",
+ "VCursorSetRowId(src) row #$(row_nr) failed",
"row_nr=%lu", row_id ));
- }
- else
+
+ if ( rc == 0 )
{
- bool pass_flag = true;
- bool redact_flag = false;
- rc_t rc1;
-
- if ( filter_col_def != NULL )
- vdb_copy_read_row_flags( ctx, src_cursor,
- filter_col_def->src_idx, &pass_flag, &redact_flag );
- if ( pass_flag )
+ rc = VCursorOpenRow( src_cursor );
+ if ( rc != 0 )
+ PLOGERR( klogInt, (klogInt, rc,
+ "VCursorOpenRow(src) row #$(row_nr) failed",
+ "row_nr=%lu", row_id ));
+ else
{
- rc = vdb_copy_row( src_cursor, dst_cursor,
- columns, row_id,
- &rbuf, redact_flag, ctx->show_redact );
- if ( rc == 0 ) count++;
- }
+ bool pass_flag = true;
+ bool redact_flag = false;
- rc1 = VCursorCloseRow( src_cursor );
- if ( rc1 != 0 )
+ if ( filter_col_def != NULL )
+ vdb_copy_read_row_flags( ctx, src_cursor,
+ filter_col_def->src_idx, &pass_flag, &redact_flag );
+ if ( pass_flag )
+ rc = vdb_copy_row( src_cursor, dst_cursor,
+ columns, row_id,
+ &rbuf, redact_flag, ctx->show_redact );
+
+ if ( rc == 0 )
+ {
+ count++;
+ rc = VCursorCloseRow( src_cursor );
+ if ( rc != 0 )
+ PLOGERR( klogInt, ( klogInt, rc,
+ "VCursorCloseRow(src) row #$(row_nr) failed",
+ "row_nr=%lu", row_id ) );
+ }
+ }
+ rc = num_gen_iterator_next( iter, &row_id );
+ if ( ctx->show_progress )
{
- PLOGERR( klogInt, ( klogInt, rc1,
- "VCursorCloseRow(src) row #$(row_nr) failed",
- "row_nr=%lu", row_id ) );
+ if ( num_gen_iterator_percent( iter, fract_digits, &percent ) == 0 )
+ update_progressbar( progress, fract_digits, percent );
}
+
}
}
- if ( ctx->show_progress )
- if ( num_gen_iterator_percent( iter, fract_digits, &percent ) == 0 )
- update_progressbar( progress, fract_digits, percent );
-
}
+
+ /* set rc to zero for num_gen_iterator_next() reached last id */
+ if ( GetRCModule( rc ) == rcVDB &&
+ GetRCTarget( rc ) == rcNoTarg &&
+ GetRCContext( rc ) == rcReading &&
+ GetRCObject( rc ) == rcId &&
+ GetRCState( rc ) == rcInvalid )
+ rc = 0;
+
if ( ctx->show_progress )
- OUTMSG(( "\n" ));
+ KOutMsg( "\n" );
destroy_progressbar( progress );
PLOGMSG( klogInfo, ( klogInfo, "\n $(row_cnt) rows copied", "row_cnt=%lu", count ));
@@ -516,7 +524,7 @@ static rc_t vdb_copy_make_dst_table( const p_context ctx,
{
/* load it from a file */
/*
- OUTMSG (( "we are using '%s'\n", cctx->legacy_schema_file ));
+ KOutMsg( "we are using '%s'\n", cctx->legacy_schema_file );
*/
if ( *dst_schema == NULL )
{
@@ -674,7 +682,8 @@ static rc_t vdb_copy_prepare_legacy_tab( const p_context ctx,
}
-static rc_t vdb_copy_find_out_what_columns_to_use( const VTable * src_table,
+static rc_t vdb_copy_find_out_what_columns_to_use( const VTable * src_table,
+ const char * tablename,
col_defs * columns,
const char * requested,
const char * excluded )
@@ -696,7 +705,7 @@ static rc_t vdb_copy_find_out_what_columns_to_use( const VTable * src_table,
DISP_RC( rc, "vdb_copy_find_out_what_columns_to_use:col_defs_mark_requested_columns() failed" );
if ( rc == 0 && excluded != NULL )
{
- rc = col_defs_exclude_these_columns( columns, excluded );
+ rc = col_defs_exclude_these_columns( columns, tablename, excluded );
DISP_RC( rc, "vdb_copy_find_out_what_columns_to_use:col_defs_unmark_writable_columns() failed" );
}
}
@@ -915,7 +924,8 @@ static rc_t vdb_copy_table2( const p_context ctx,
static rc_t vdb_copy_table( const p_context ctx,
VDBManager * vdb_mgr,
- const VTable * src_table )
+ const VTable * src_table,
+ const char * tablename )
{
const VSchema * src_schema;
rc_t rc = VTableOpenSchema ( src_table, &src_schema );
@@ -927,7 +937,7 @@ static rc_t vdb_copy_table( const p_context ctx,
DISP_RC( rc, "vdb_copy_table:col_defs_init() failed" );
if ( rc == 0 )
{
- rc = vdb_copy_find_out_what_columns_to_use( src_table, columns,
+ rc = vdb_copy_find_out_what_columns_to_use( src_table, tablename, columns,
ctx->columns, ctx->excluded_columns );
if ( rc == 0 )
{
@@ -1001,7 +1011,8 @@ static rc_t vdb_copy_cur_2_cur( const p_context ctx,
col_defs_unmark_do_not_redact_columns( columns,
ctx->config.do_not_redact_columns );
- OUTMSG(( "copy of >%s<\n", tab_name ));
+ if ( ctx->show_progress )
+ KOutMsg( "copy of >%s<\n", tab_name );
vdb_copy_find_filter_and_redact_columns( schema,
columns, &(ctx->config), type_matcher );
@@ -1034,7 +1045,7 @@ static rc_t vdb_copy_tab_2_tab( const p_context ctx,
DISP_RC( rc, "vdb_copy_tab_2_tab:col_defs_init() failed" );
if ( rc == 0 )
{
- rc = vdb_copy_find_out_what_columns_to_use( src_tab, columns,
+ rc = vdb_copy_find_out_what_columns_to_use( src_tab, tab_name, columns,
NULL, ctx->excluded_columns );
if ( rc == 0 )
{
@@ -1352,7 +1363,7 @@ static rc_t vdb_copy_perform( const p_context ctx,
if ( rc == 0 )
{
/*********************************************/
- rc = vdb_copy_table( ctx, vdb_mgr, src_table );
+ rc = vdb_copy_table( ctx, vdb_mgr, src_table, NULL );
/*********************************************/
DISP_RC( rc, "vdb_copy_perform:vdb_copy_table() failed" );
VTableRelease( src_table );
@@ -1394,6 +1405,7 @@ static rc_t vdb_copy_main( const p_context ctx )
{
KConfig * config_mgr;
+#if TOOLS_USE_SRAPATH != 0
if ( !ctx->dont_check_accession )
ctx->dont_check_accession = helper_is_this_a_filesystem_path( ctx->src_path );
if ( !ctx->dont_check_accession )
@@ -1401,6 +1413,7 @@ static rc_t vdb_copy_main( const p_context ctx )
rc_t rc1 = helper_resolve_accession( directory, (char**)&( ctx->src_path ) );
DISP_RC( rc1, "vdb_copy_main:helper_check_accession() failed" );
}
+#endif
rc = helper_make_config_mgr( &config_mgr, ctx->kfg_path );
DISP_RC( rc, "vdb_copy_main:helper_make_config_mgr() failed" );
diff --git a/tools/vdb-copy/vdb-copy.vers b/tools/vdb-copy/vdb-copy.vers
index 04b10b4..f90b1af 100644
--- a/tools/vdb-copy/vdb-copy.vers
+++ b/tools/vdb-copy/vdb-copy.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/vdb-copy/vdb-copy.vers.h b/tools/vdb-copy/vdb-copy.vers.h
deleted file mode 100644
index bda5bf2..0000000
--- a/tools/vdb-copy/vdb-copy.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_COPY_VERS 0x02010007
diff --git a/tools/vdb-decrypt/Makefile b/tools/vdb-decrypt/Makefile
new file mode 100644
index 0000000..cd0e1da
--- /dev/null
+++ b/tools/vdb-decrypt/Makefile
@@ -0,0 +1,130 @@
+# ==============================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+USE_GCC_IF_ICC = 1
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/vdb-decrypt
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+ vdb-decrypt \
+ vdb-encrypt
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+
+
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-decrypt
+# Copy files from one directory to another while cataloging the contents.
+# XML files can be redirected as well.
+#
+VDB_DECRYPT_SRC = \
+ vdb-decrypt \
+ shared
+
+VDB_DECRYPT_OBJ = \
+ $(addsuffix .$(OBJX),$(VDB_DECRYPT_SRC))
+
+VDB_DECRYPT_LIB = \
+ -lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lkproc \
+ -lklib
+
+$(BINDIR)/vdb-decrypt: $(VDB_DECRYPT_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_DECRYPT_LIB)
+
+#-------------------------------------------------------------------------------
+# vdb-encrypt
+# Copy files from one directory to another while cataloging the contents.
+# XML files can be redirected as well.
+#
+VDB_ENCRYPT_SRC = \
+ vdb-encrypt \
+ shared
+
+VDB_ENCRYPT_OBJ = \
+ $(addsuffix .$(OBJX),$(VDB_ENCRYPT_SRC))
+
+VDB_ENCRYPT_LIB = \
+ -lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lkproc \
+ -lklib
+
+$(BINDIR)/vdb-encrypt: $(VDB_ENCRYPT_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_ENCRYPT_LIB)
+
diff --git a/tools/vdb-decrypt/shared.c b/tools/vdb-decrypt/shared.c
new file mode 100644
index 0000000..de41eaf
--- /dev/null
+++ b/tools/vdb-decrypt/shared.c
@@ -0,0 +1,1270 @@
+/*==============================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "shared.h"
+
+#include <klib/defs.h>
+#include <klib/callconv.h>
+
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/log.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/status.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/namelist.h>
+
+#include <kfs/defs.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/sra.h>
+#include <kfs/lockfile.h>
+#include <kfs/cacheteefile.h>
+#include <kfs/buffile.h>
+#include <vfs/manager.h>
+
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <kapp/args.h>
+#include <kapp/main.h>
+
+#include <assert.h>
+#include <string.h>
+#include <stdint.h>
+
+#ifndef RIGOROUS_SRA_CHECK
+#define RIGOROUS_SRA_CHECK 0
+#endif
+
+#define OPTION_FORCE "force"
+#define OPTION_SRA "decrypt-sra-files"
+#define ALIAS_FORCE "f"
+#define ALIAS_SRA NULL
+
+#define MY_MAX_PATH 4096
+
+
+bool ForceFlag = false;
+bool TmpFoundFlag = false;
+bool UseStdin = false;
+bool UseStdout = false;
+bool IsArchive = false;
+
+/* for wga decrypt */
+char Password [4096 + 2];
+size_t PasswordSize;
+
+/* for encfile encrypt/decrypt */
+KKey Key;
+
+const char * ForceUsage[] =
+{ "Force overwrite of existing files", NULL };
+
+/*
+ * option control flags
+ */
+
+const char EncExt[] = ".ncbi_enc";
+static const char TmpExt[] = ".vdb-decrypt-tmp";
+static const char TmpLockExt[] = ".vdb-decrypt-tmp.lock";
+static const char CacheExt[] = ".cache";
+static const char CacheLockExt[] = ".cache.lock";
+
+/* Usage
+ */
+rc_t CC UsageSummary (const char * progname)
+{
+ rc_t rc;
+ {
+ rc = KOutMsg (
+ /*345679012345678901234567890123456789012345678901234567890123456789012345678*/
+ "\n"
+ "Usage:\n"
+ " %s [options] <source-file>\n"
+ " %s [options] <source-file> <destination-file>\n"
+ " %s [options] <source-file> <destination-directory>\n"
+ " %s [options] <directory>\n",
+ progname, progname, progname, progname);
+ }
+#if DIRECTORY_TO_DIRECTORY_SUPPORTED
+ if (rc == 0)
+ rc = KOutMsg (
+ " %s [options] <source-directory> <destination-directory>\n",
+ progname);
+#endif
+ if (rc == 0)
+ {
+ rc = KOutMsg (
+ "\n"
+ "Summary:\n"
+ " %scrypt a file or all the files (recursively) in a directory\n\n",
+ De);
+ }
+ return rc;
+}
+
+rc_t CC Usage (const Args * args)
+{
+ const char * progname = UsageDefaultName;
+ const char * fullpath = UsageDefaultName;
+ const char * pline[] = {
+ "file to encrypt", NULL,
+ "name of resulting file", NULL,
+ "directory of resulting file", NULL,
+ "directory to encrypt", NULL
+ };
+
+ rc_t rc, orc;
+
+ /* super-fragilistic molti-hacki-docious
+ let's find a better way to reuse things. */
+ if ( de [ 0 ] == 'd' )
+ {
+ pline [ 0 ] = "file to decrypt";
+ pline [ 6 ] = "directory to decrypt";
+ }
+
+ if (args == NULL)
+ rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ else
+ rc = ArgsProgram (args, &fullpath, &progname);
+
+ orc = UsageSummary (progname);
+ if (rc == 0)
+ rc = orc;
+
+ KOutMsg ("Parameters:\n");
+ HelpParamLine ("source-file" , pline);
+ HelpParamLine ("destination-file" , pline + 2);
+ HelpParamLine ("destination-directory", pline + 4);
+ HelpParamLine ("directory" , pline + 6);
+ KOutMsg ("\nOptions:\n");
+ HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, ForceUsage);
+ CryptOptionLines ();
+ HelpOptionsStandard ();
+
+ /* forcing editor alignment */
+ /* 12345678901234567890123456789012345678901234567890123456789012345678901234567890*/
+ KOutMsg (
+ "\n"
+ "Details:\n"
+ " All %scryptions are non-destructive until successful. No files are deleted or\n"
+ " replaced until the %scryptions are complete.\n"
+ "\n", de, de);
+
+ KOutMsg (
+ " The extension '.ncbi_enc' will be %s when a file is %scrypted.\n"
+ "\n", Decrypting ? "removed" : "added", de);
+
+ if (Decrypting) KOutMsg (
+ " NCBI Archive files that contain NCBI database objects will not be decrypted\n"
+ " unless the %s option is used. As these objects can be used without\n"
+ " decryption it is recommended they remain encrypted.\n"
+ "\n", OPTION_SRA);
+ else KOutMsg (
+ " NCBI Archive files that contain NCBI database objects will not have the\n"
+ " .ncbi_enc extension added.\n\n");
+
+
+ KOutMsg (
+ " If the only parameter is a file name then it will be replaced by a file that\n"
+ " is %scrypted with a possible changed extension.\n"
+ " \n", de);
+
+ KOutMsg (
+ " If the only parameter is a directory, all files in that directory including\n"
+ " all files in subdirectories will be replaced with a possible change\n"
+ " in the extension.\n"
+ "\n");
+
+ KOutMsg (
+ " If there are two parameters a copy is made but the copy will be %scrypted.\n"
+ " If the second parameter is a directory the new file might have a different\n"
+ " extension. If it is not a directory, the extension will be as given in the\n"
+ " the parameter.\n"
+ "\n", de);
+
+ KOutMsg (
+ " Missing directories in the destination path will be created.\n"
+ "\n");
+
+ KOutMsg (
+ " Already existing destination files will cause the program to end with\n"
+ " an error and will be left unchanged unless the --%s option is used to\n"
+ " force the files to be overwritten.\n"
+ "\n", OPTION_FORCE);
+
+ KOutMsg (
+ "Encryption key (file password):\n"
+ " The encryption key or file password is handled by configuration. If not yet\n"
+ " set, this program will fail.\n\n"
+ " You can set the encryption key by running:\n\n"
+ " perl configuration-assistant.perl\n"
+ "\n");
+
+ HelpVersion (fullpath, KAppVersion());
+
+ return rc;
+}
+
+
+
+
+
+/*
+ * determine the archive type for KFile f with pathname name
+ *
+ * This could be extended to handle tar files with a larger head size and
+ * and some less simple checks for a tar header block at the start of
+ * the file.
+ */
+ArcScheme ArchiveTypeCheck (const KFile * f)
+{
+ size_t num_read;
+ rc_t rc;
+ char head [128];
+
+ IsArchive = false;
+ rc = KFileReadAll (f, 0, head, sizeof head, &num_read);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "Unable to read head of decrypted file");
+ return arcError;
+ }
+
+ rc = KFileIsSRA (head, num_read);
+ if (rc == 0)
+ {
+
+/* OUTMSG (("+++++ ARCHIVE\n")); */
+
+
+ /* a hack... */
+
+ IsArchive = true;
+ return arcSRAFile;
+ }
+/* OUTMSG (("----- not an archive\n")); */
+ return arcNone;
+}
+
+
+/*
+ * Copy a file from a const KFile * to a KFile * with the paths for the two
+ * for logging purposes
+ *
+ * return rc_t = 0 for success
+ * return rc_t != 0 for failure
+ */
+rc_t CopyFile (const KFile * src, KFile * dst, const char * source, const char * dest)
+{
+ rc_t rc;
+ uint8_t buff [256 * 1024];
+ size_t num_read;
+ size_t num_writ;
+ uint64_t pos;
+
+ for (pos = 0; ; pos += num_read)
+ {
+ rc = Quitting ();
+ if (rc)
+ {
+ LOGMSG (klogFatal, "Received quit");
+ break;
+ }
+
+ rc = KFileReadAll (src, pos, buff, sizeof (buff), &num_read);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to read from file $(F) at $(P)",
+ "F=%s,P=%lu", source, pos));
+ break;
+ }
+
+ if (num_read == 0)
+ break;
+
+ rc = KFileWriteAll (dst, pos, buff, num_read, &num_writ);
+ if (rc)
+ {
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to write to file $(F) at $(P)",
+ "F=%s,P=%lu", dest, pos));
+ break;
+ }
+
+ if (num_writ != num_read)
+ {
+ rc = RC (rcExe, rcFile, rcWriting, rcFile, rcInsufficient);
+ PLOGERR (klogErr,
+ (klogErr, rc,
+ "Failed to write all to file $(F) at $(P)",
+ "F=%s,P=%lu", dest, pos));
+ break;
+ }
+ }
+ return rc;
+}
+
+
+/*
+ * determine the encryption type for KFile f with pathname name
+ */
+rc_t EncryptionTypeCheck (const KFile * f, const char * name, EncScheme * scheme)
+{
+ size_t num_read;
+ rc_t rc;
+ char head [128];
+
+ assert (f != NULL);
+ assert (name != NULL);
+
+ rc = KFileReadAll (f, 0, head, sizeof head, &num_read);
+ if (rc)
+ {
+ PLOGERR (klogErr, (klogErr, rc, "Unable to read head of "
+ "'$(F)'", "F=%s", name));
+ *scheme = encError;
+ return rc;
+ }
+
+ /* looks for files with NCBInenc or NCBIsenc signatures */
+ rc = KFileIsEnc (head, num_read);
+ if (rc == 0)
+ {
+ /* looks for files with just NCBIsenc signatures */
+ rc = KFileIsSraEnc (head, num_read);
+
+ *scheme = (rc == 0) ? encSraEncFile : encEncFile;
+ }
+ else
+ {
+ rc = KFileIsWGAEnc (head, num_read);
+ if (rc == 0)
+ *scheme = encWGAEncFile;
+ else
+ *scheme = encNone;
+ }
+ return 0;
+}
+
+
+/*
+ * Check a file path name for ending in the extension used by this program
+ *
+ * return true if it ends with the extension and false if it does not
+ */
+static
+bool IsTmpFile (const char * path)
+{
+ const char * pc;
+
+ pc = strrchr (path, '.');
+ if (pc == NULL)
+ return false;
+
+ if (strcmp (pc, TmpExt) == 0)
+ return true;
+
+ pc = string_chr (path, pc - path, '.');
+ if (pc == NULL)
+ return false;
+
+ return (strcmp (pc, TmpLockExt) == 0);
+}
+
+
+static
+bool IsCacheFile (const char * path)
+{
+ const char * pc;
+
+ pc = strrchr (path, '.');
+ if (pc == NULL)
+ return false;
+
+ if (strcmp (pc, CacheExt) == 0)
+ return true;
+
+ pc = string_chr (path, pc - path, '.');
+ if (pc == NULL)
+ return false;
+
+ return (strcmp (pc, CacheLockExt) == 0);
+}
+
+
+static
+rc_t FileInPlace (KDirectory * cwd, const char * leaf, bool try_rename)
+{
+ rc_t rc;
+ bool is_tmp;
+
+ STSMSG (1, ("%scrypting file in place %s",De,leaf));
+
+ rc = 0;
+ is_tmp = IsTmpFile (leaf);
+ if (is_tmp)
+ {
+ STSMSG (1, ("%s is a vdb-decrypt/vdb-encrypt temporary file and will "
+ "be ignored", leaf));
+ TmpFoundFlag = true;
+ if (ForceFlag)
+ ; /* LOG OVERWRITE */
+ else
+ ; /* LOG TMP */
+ }
+ if (!is_tmp || ForceFlag)
+ {
+ char temp [MY_MAX_PATH];
+
+
+ rc = KDirectoryResolvePath (cwd, false, temp, sizeof temp, ".%s%s",
+ leaf, TmpExt);
+
+ if (rc)
+ PLOGERR (klogErr, (klogErr, rc, "unable to resolve '.$(S)$(E)'",
+ "S=%s,E=%s",leaf,TmpExt));
+ else
+ {
+ KPathType kpt;
+ uint32_t kcm;
+
+ kcm = kcmCreate|kcmParents;
+ kpt = KDirectoryPathType (cwd, temp);
+ if (kpt != kptNotFound)
+ {
+ /* log busy */
+ if (ForceFlag)
+ {
+ kcm = kcmInit|kcmParents;
+ /* log force */
+ kpt = kptNotFound;
+ }
+ }
+
+ if (kpt == kptNotFound)
+ {
+ const KFile * infile;
+
+ rc = KDirectoryOpenFileRead (cwd, &infile, "%s", leaf);
+ if (rc)
+ PLOGERR (klogErr, (klogErr, rc, "Unable to resolve '$(F)'",
+ "F=%s",leaf));
+ else
+ {
+ uint64_t fz;
+ size_t z;
+ rc_t irc;
+ uint64_t ignored;
+
+ rc = KFileSize (infile, &fz);
+ /* ignore rc for now? yes hack */
+ z = string_size (leaf);
+
+ /* vdb-decrypt and vdb-encrypt both ignore repository cache files. */
+ irc = GetCacheTruncatedSize (infile, &ignored, true);
+ if (irc == 0)
+ STSMSG (1, ("skipping cache download file %s", leaf));
+ else if ((fz == 0) &&
+ (string_cmp (leaf + (z - (sizeof (".lock")-1)), sizeof (".lock"),
+ ".lock", sizeof (".lock") , sizeof (".lock")) == 0))
+ STSMSG (1, ("skipping cache lock download file %s", leaf));
+ else
+ {
+ EncScheme scheme;
+
+ rc = EncryptionTypeCheck (infile, leaf, &scheme);
+ if (rc == 0)
+ {
+ ArcScheme ascheme;
+ bool changed;
+ bool do_this_file;
+ char new_name [MY_MAX_PATH + sizeof EncExt];
+
+ do_this_file = DoThisFile (infile, scheme, &ascheme);
+ strcpy (new_name, leaf);
+ if (try_rename && do_this_file)
+ changed = NameFixUp (new_name);
+ else
+ changed = false;
+/* KOutMsg ("### %d \n", changed); */
+
+ if (!do_this_file)
+ {
+ if (changed)
+ {
+ STSMSG (1, ("renaming %s to %s", leaf, new_name));
+ rc = KDirectoryRename (cwd, false, leaf, new_name);
+ }
+ else
+ STSMSG (1, ("skipping %s",leaf));
+ }
+ else
+ {
+ KFile * outfile;
+
+ rc = KDirectoryCreateExclusiveAccessFile (cwd, &outfile,
+ false, 0600, kcm,
+ temp);
+ if (rc == 0)
+ {
+ const KFile * Infile;
+ KFile * Outfile;
+
+ rc = CryptFile (infile, &Infile, outfile, &Outfile, scheme);
+
+ if (rc == 0)
+ {
+ STSMSG (1, ("copying %s to %s", leaf, temp));
+
+ rc = CopyFile (Infile, Outfile, leaf, temp);
+
+ if (rc == 0)
+ {
+ uint32_t access;
+ KTime_t date;
+
+ rc = KDirectoryAccess (cwd, &access, "%s", leaf);
+ if (rc == 0)
+ rc = KDirectoryDate (cwd, &date, "%s", leaf);
+
+ KFileRelease (infile);
+ KFileRelease (outfile);
+ KFileRelease (Infile);
+ KFileRelease (Outfile);
+
+ if (rc == 0)
+ {
+ STSMSG (1, ("renaming %s to %s", temp, new_name));
+
+ rc = KDirectoryRename (cwd, true, temp, new_name);
+ if (rc)
+ LOGERR (klogErr, rc, "error renaming");
+ else
+ {
+ if (changed)
+ KDirectoryRemove (cwd, false, "%s", leaf);
+
+ /*rc =*/
+ KDirectorySetAccess (cwd, false, access,
+ 0777, "%s", new_name);
+ KDirectorySetDate (cwd, false, date, "%s", new_name);
+ /* gonna ignore an error here I think */
+ return rc;
+ }
+ }
+ }
+ }
+ KFileRelease (outfile);
+ }
+ }
+ }
+ }
+ KFileRelease (infile);
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static
+rc_t FileToFile (const KDirectory * sd, const char * source,
+ KDirectory *dd, const char * dest_, bool try_rename,
+ char * base)
+{
+ const KFile * infile;
+ rc_t rc;
+ uint32_t access;
+ KTime_t date;
+ bool is_tmp;
+ char dest [MY_MAX_PATH + sizeof EncExt];
+
+ strcpy (dest, dest_);
+ if (try_rename)
+ NameFixUp (dest);
+
+ if ((sd == dd) && (strcmp (source, dest) == 0))
+ return FileInPlace (dd, dest, try_rename);
+
+ if (base == NULL)
+ STSMSG (1, ("%scrypting file %s to %s", De, source, dest));
+ else
+ STSMSG (1, ("%scrypting file %s to %s/%s", De, source, base, dest));
+
+ /*
+ * A Hack to make stdin/stout work within KFS
+ */
+ if (UseStdin)
+ {
+ const KFile * iinfile;
+ rc = KFileMakeStdIn (&iinfile);
+ if (rc == 0)
+ {
+ rc = KBufReadFileMakeRead (&infile, iinfile, 64 * 1024);
+ KFileRelease (iinfile);
+ if (rc == 0)
+ {
+ access = 0640;
+ date = 0;
+ goto stdin_shortcut;
+ }
+ LOGERR (klogErr, rc, "error wrapping stdin");
+ return rc;
+ }
+ }
+ rc = 0;
+ is_tmp = IsTmpFile (source);
+
+ if (is_tmp)
+ {
+ TmpFoundFlag = true;
+ if (ForceFlag)
+ ; /* LOG OVERWRITE */
+ else
+ ; /* LOG TMP */
+ }
+ if (!is_tmp || ForceFlag)
+ {
+ rc = KDirectoryAccess (sd, &access, "%s", source);
+ if (rc)
+ LOGERR (klogErr, rc, "Error check permission of source");
+
+ else
+ {
+ rc = KDirectoryDate (sd, &date, "%s", source);
+ if (rc)
+ LOGERR (klogErr, rc, "Error check date of source");
+
+ else
+ {
+ rc = KDirectoryOpenFileRead (sd, &infile, "%s", source);
+ if (rc)
+ PLOGERR (klogErr, (klogErr, rc,
+ "Error opening source file '$(S)'",
+ "S=%s", source));
+ else
+ {
+ EncScheme scheme;
+
+ stdin_shortcut:
+ rc = EncryptionTypeCheck (infile, source, &scheme);
+ if (rc == 0)
+ {
+ KFile * outfile;
+ uint32_t kcm;
+
+ /*
+ * Hack to support stdout before VFS is complete enough to use here
+ */
+ if (UseStdout)
+ {
+ rc = KFileMakeStdOut (&outfile);
+ if (rc)
+ LOGERR (klogErr, rc, "error wrapping stdout");
+ }
+ else
+ {
+ kcm = ForceFlag ? kcmInit|kcmParents : kcmCreate|kcmParents;
+
+ rc = KDirectoryCreateFile (dd, &outfile, false, 0600, kcm, "%s", dest);
+ if (rc)
+ PLOGERR (klogErr,(klogErr, rc, "error opening output '$(O)'",
+ "O=%s", dest));
+ }
+ if (rc == 0)
+ {
+ const KFile * Infile;
+ KFile * Outfile;
+
+ rc = CryptFile (infile, &Infile, outfile, &Outfile, scheme);
+ if (rc == 0)
+ {
+ rc = CopyFile (Infile, Outfile, source, dest);
+ if (rc == 0)
+ {
+ if (UseStdin || UseStdout)
+ ;
+ else
+ {
+ rc = KDirectorySetAccess (dd, false, access, 0777,
+ "%s", dest);
+
+ if (rc == 0 && date != 0)
+ rc = KDirectorySetDate (dd, false, date, "%s", dest);
+ }
+ }
+ KFileRelease (Infile);
+ KFileRelease (Outfile);
+ }
+ KFileRelease (outfile);
+ }
+ }
+ KFileRelease (infile);
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+
+static
+rc_t DoDir (const KDirectory * sd, KDirectory * dd)
+{
+ KNamelist * names;
+ rc_t rc;
+
+ rc = KDirectoryList (sd, &names, NULL, NULL, ".");
+ if (rc)
+ ;
+ else
+ {
+ uint32_t count;
+
+ rc = KNamelistCount (names, &count);
+ if (rc)
+ ;
+ else
+ {
+ uint32_t idx;
+
+ for (idx = 0; idx < count; ++idx)
+ {
+ const char * name;
+
+ rc = KNamelistGet (names, idx, &name);
+ if (rc)
+ ;
+ else
+ {
+ const KDirectory * nsd;
+ KDirectory * ndd;
+ KPathType kpt;
+
+ kpt = KDirectoryPathType (sd, name);
+
+ switch (kpt)
+ {
+ default:
+ break;
+
+ case kptFile:
+ if (sd == dd)
+ rc = FileInPlace (dd, name, true);
+ else
+ rc = FileToFile (sd, name, dd, name, true, NULL);
+ break;
+
+ case kptDir:
+ if (sd == dd)
+ {
+ rc = KDirectoryOpenDirUpdate (dd, &ndd, false, "%s", name);
+ if (rc)
+ ;
+ else
+ {
+ /* RECURSION */
+ STSMSG (1, ("%scrypting directory %s", De, name));
+ rc = DoDir (ndd, ndd);
+ STSMSG (1, ("done with directory %s", name));
+ KDirectoryRelease (ndd);
+ }
+ }
+ else
+ {
+ rc = KDirectoryOpenDirRead (sd, &nsd, false, name);
+ if (rc)
+ ;
+ else
+ {
+ rc = KDirectoryCreateDir (dd, 0600, kcmOpen, "%s", name);
+ if (rc)
+ ;
+ else
+ {
+ rc = KDirectoryOpenDirUpdate (dd, &ndd, false, "%s", name);
+ if (rc)
+ ;
+ else
+ {
+ /* RECURSION */
+ STSMSG (1, ("%scrypting directory %s", De, name));
+ rc = DoDir (nsd, ndd);
+ STSMSG (1, ("done with directory %s", name));
+
+ KDirectoryRelease (ndd);
+ }
+ }
+ KDirectoryRelease (nsd);
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ KNamelistRelease (names);
+ }
+ return rc;
+}
+
+
+static
+rc_t Start (KDirectory * cwd, const char * src, const char * dst)
+{
+ KPathType dtype;
+ KPathType stype;
+ char dpath [MY_MAX_PATH];
+ char spath [MY_MAX_PATH];
+ rc_t rc;
+ bool using_stdin, using_stdout, try_rename;
+
+ /* limited anti oops checks */
+ try_rename = (dst == NULL);
+ if (!try_rename)
+ {
+ /* try to prevent file to file clash */
+ if (strcmp (src,dst) == 0)
+ dst = NULL;
+
+ /* try to prevent file to dir clash */
+ else
+ {
+ size_t s,d;
+
+ s = string_size (src);
+ d = string_size (dst);
+
+ if (s > d)
+ {
+ if (string_cmp (src, s, dst, d, d) == 0)
+ {
+ if ((strchr (src+d+1, '/') == NULL) &&
+ ((src[d] == '/') ||
+ (src[d-1] == '/')))
+ {
+ try_rename = true;
+ dst = NULL;
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * This is a quick fix "hack"
+ * A fully built out VFS should replace the KFS in use and eliminate this
+ */
+ using_stdin = (strcmp (src, "/dev/stdin") == 0);
+
+ if (using_stdin)
+ {
+ if (dst == NULL)
+ {
+ rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcNull);
+ LOGERR (klogErr, rc, "Unable to handle stdin in place");
+ return rc;
+ }
+ stype = kptFile;
+ strcpy (spath, src);
+ UseStdin = true;
+ STSMSG (1, ("reading console / stdin as input"));
+ goto stdin_shortcut;
+ }
+
+ rc = KDirectoryResolvePath (cwd, false, spath, sizeof spath, "%s", src);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "can't resolve source");
+ return rc;
+ }
+
+ stype = KDirectoryPathType (cwd, spath);
+
+ switch (stype)
+ {
+ case kptNotFound:
+ rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcNotFound);
+ break;
+
+ default:
+ case kptBadPath:
+ rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcInvalid);
+ break;
+
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ case kptDataset:
+ case kptDatatype:
+ rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+ break;
+
+ case kptFile:
+ case kptDir:
+ break;
+ }
+ if (rc)
+ {
+ PLOGERR (klogErr, (klogErr, rc, "can not use source '$(S)'", "S=%s", src));
+ return rc;
+ }
+
+ /*
+ * In Place Operation
+ */
+ if (dst == NULL)
+ {
+
+ /*
+ * Input is a file
+ */
+ if (stype == kptFile)
+ {
+ KDirectory * ndir;
+ char * pc;
+
+ pc = strrchr (spath, '/');
+ if (pc == NULL)
+ {
+ pc = spath;
+ ndir = cwd;
+ rc = KDirectoryAddRef (cwd);
+ }
+ else if (pc == spath)
+ {
+ ++pc;
+ ndir = cwd;
+ rc = KDirectoryAddRef (cwd);
+ }
+ else
+ {
+ *pc++ = '\0';
+ rc = KDirectoryOpenDirUpdate (cwd, &ndir, false, spath);
+ }
+
+ if (rc == 0)
+ {
+ rc = FileInPlace (ndir, pc, try_rename);
+ KDirectoryRelease (ndir);
+ }
+ }
+ /*
+ * Input is a directory
+ */
+ else
+ {
+ KDirectory * ndir;
+
+ rc = KDirectoryOpenDirUpdate (cwd, &ndir, false, spath);
+ if (rc)
+ ;
+ else
+ {
+ STSMSG (1, ("%scrypting directory %s", De, spath));
+ rc = DoDir (ndir, ndir);
+ STSMSG (1, ("done with directory %s", spath));
+ KDirectoryRelease (ndir);
+ }
+ }
+ }
+
+ /*
+ * 'Copy' Operation
+ */
+ else
+ {
+ stdin_shortcut:
+ using_stdout = (strcmp (dst, "/dev/stdout") == 0);
+ if (using_stdout == true)
+ {
+ dtype = kptFile;
+ strcpy (dpath, dst);
+ UseStdout = true;
+ STSMSG (1, ("writing console / stdout as output"));
+ goto do_file;
+ }
+ rc = KDirectoryResolvePath (cwd, false, dpath, sizeof dpath, "%s", dst);
+ if (rc)
+ {
+ LOGERR (klogErr, rc, "can't resolve destination");
+ return rc;
+ }
+ dtype = KDirectoryPathType (cwd, dpath);
+ switch (dtype)
+ {
+ default:
+ case kptBadPath:
+ rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcInvalid);
+ PLOGERR (klogErr, (klogErr, rc, "can not use destination '$(S)'", "S=%s", dst));
+ break;
+
+ case kptCharDev:
+ case kptBlockDev:
+ case kptFIFO:
+ case kptZombieFile:
+ case kptDataset:
+ case kptDatatype:
+ rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+ PLOGERR (klogErr, (klogErr, rc, "can not use destination parameter '$(S)'", "S=%s", dst));
+ break;
+
+ case kptNotFound:
+ {
+ size_t z;
+
+ z = strlen (dst) - 1;
+ if ((dst[z] == '/') || (stype == kptDir))
+ goto do_dir;
+ else
+ goto do_file;
+ }
+
+ case kptFile:
+ if (!ForceFlag)
+ {
+ rc = RC (rcExe, rcArgv, rcParsing, rcFile, rcExists);
+ PLOGERR (klogErr, (klogErr, rc, "can not over-write '$(F)' without --force",
+ "F=%s", dpath));
+ break;
+ }
+ do_file:
+ if (stype == kptFile)
+ {
+ rc = FileToFile (cwd, spath, cwd, dpath, try_rename, NULL);
+ }
+ else
+ {
+ rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+ LOGERR (klogErr, rc, "Can't do directory to file");
+ }
+ break;
+
+ do_dir:
+ case kptDir:
+ /*
+ * Input is a directory
+ */
+ if (stype == kptDir)
+ {
+#if DIRECTORY_TO_DIRECTORY_SUPPORTED
+ const KDirectory * sdir;
+ KDirectory * ddir;
+
+ rc = KDirectoryOpenDirRead (cwd, &sdir, false, spath);
+ if (rc)
+ ;
+ else
+ {
+ if (dtype == kptNotFound)
+ {
+ STSMSG (1, ("creating output directory %s", dpath));
+ rc = KDirectoryCreateDir (cwd, 0775, kcmCreate|kcmParents,
+ "%s", dpath);
+ }
+ if (rc == 0)
+ {
+ rc = KDirectoryOpenDirUpdate (cwd, &ddir, false, dpath);
+ if (rc)
+ ;
+ else
+ {
+ STSMSG (1, ("%scrypting directory %s to %s", De, spath, dpath));
+ rc = DoDir (sdir, ddir);
+ STSMSG (1, ("done with directory %s to %s", spath, dpath));
+ KDirectoryRelease (ddir);
+ }
+ }
+ KDirectoryRelease (sdir);
+ }
+#else
+ rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+ LOGERR (klogErr, rc, "Can't do directory to directory");
+#endif
+ }
+ /*
+ * Input is a file
+ */
+ else
+ {
+ KDirectory * ndir;
+ const char * pc;
+
+ if (dtype == kptNotFound)
+ {
+ STSMSG (1, ("creating output directory %s", dpath));
+ rc = KDirectoryCreateDir (cwd, 0775, kcmCreate|kcmParents,
+ "%s", dpath);
+ }
+ if (rc == 0)
+ {
+
+ STSMSG (1, ("opening output directory %s", dpath));
+ rc = KDirectoryOpenDirUpdate (cwd, &ndir, false, dpath);
+ if (rc)
+ ;
+ else
+ {
+ pc = strrchr (spath, '/');
+ if (pc == NULL)
+ pc = spath;
+ else
+ ++pc;
+
+ rc = FileToFile (cwd, spath, ndir, pc, true, dpath);
+
+ KDirectoryRelease (ndir);
+ }
+ }
+ }
+ break;
+ }
+ }
+ return rc;
+}
+
+
+static
+rc_t StartFileSystem (const char * src, const char * dst)
+{
+ VFSManager * vmanager;
+ rc_t rc;
+
+ rc = VFSManagerMake (&vmanager);
+ if (rc)
+ LOGERR (klogErr, rc, "Failed to open file system");
+
+ else
+ {
+ rc = VFSManagerGetKryptoPassword (vmanager, Password, sizeof Password,
+ &PasswordSize);
+ if (rc != 0)
+ LOGERR (klogErr, rc, "unable to obtain a password");
+
+ else
+ {
+ rc = KKeyInitRead (&Key, kkeyAES128, Password, PasswordSize);
+ if (rc)
+ LOGERR (klogErr, rc, "Unable to make encryption/decryption key");
+
+ else
+ {
+ KDirectory * cwd;
+
+ rc = VFSManagerGetCWD (vmanager, &cwd);
+ if (rc)
+ LOGERR (klogInt, rc, "unable to access current directory");
+
+ else
+ {
+ rc = Start (cwd, src, dst);
+
+ KDirectoryRelease (cwd);
+ }
+ }
+ }
+ VFSManagerRelease (vmanager);
+ }
+ return rc;
+}
+
+
+rc_t CommonMain (Args * args)
+{
+ rc_t rc;
+ uint32_t ocount; /* we take the address of ocount but not pcount. */
+ uint32_t pcount; /* does that help the compiler optimize? */
+
+ rc = ArgsParamCount (args, &ocount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to count parameters");
+
+ else if ((pcount = ocount) == 0)
+ MiniUsage (args);
+
+ else if (pcount > 2)
+ {
+ LOGERR (klogErr, rc, "too many parameters");
+ MiniUsage(args);
+ }
+
+ else
+ {
+ const char * dst; /* we only take the address of one of these */
+ const char * src;
+
+ rc = ArgsOptionCount (args, OPTION_FORCE, &ocount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to examine force option");
+
+ else
+ {
+ ForceFlag = (ocount > 0);
+
+ /* -----
+ * letting comp put src in register
+ * only if it wants
+ */
+ rc = ArgsParamValue (args, 0, &dst);
+ if (rc)
+ LOGERR (klogInt, rc, "Failure to fetch "
+ "source parameter");
+
+ else
+ {
+ src = dst;
+
+ if (pcount == 1)
+ dst = NULL;
+
+ else
+ {
+ rc = ArgsParamValue (args, 1, &dst);
+ if (rc)
+ LOGERR (klogInt, rc, "Failure to fetch "
+ "destination parameter");
+ }
+
+ if (rc == 0)
+ rc = StartFileSystem (src, dst);
+ }
+ }
+ }
+ return rc;
+}
+
+/* EOF */
diff --git a/tools/vdb-decrypt/shared.h b/tools/vdb-decrypt/shared.h
new file mode 100644
index 0000000..37998bd
--- /dev/null
+++ b/tools/vdb-decrypt/shared.h
@@ -0,0 +1,93 @@
+/*==============================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _tools_vdb_decrypt_shared_h_
+#define _tools_vdb_decrypt_shared_h_
+
+#define DIRECTORY_TO_DIRECTORY_SUPPORTED 0
+
+#include <klib/defs.h>
+#include <krypto/key.h>
+#include <kapp/args.h>
+
+#define OPTION_FORCE "force"
+#define OPTION_DEC_SRA "decrypt-sra-files"
+#define ALIAS_FORCE "f"
+#define ALIAS_DEC_SRA NULL
+
+extern const bool Decrypting;
+
+extern char Password [];
+extern size_t PasswordSize;
+
+extern const char De [];
+extern const char de [];
+extern const char SraOption[];
+
+extern const char EncExt[];
+bool NameFixUp (char * name);
+extern const char * ForceUsage[];
+
+/* for encfile encrypt/decrypt */
+extern KKey Key;
+
+
+typedef enum ArcScheme
+{
+ arcError,
+ arcNone,
+ arcSRAFile
+} ArcScheme;
+
+extern bool IsArchive; /* this approach makes threading fail */
+
+struct KFile;
+
+ArcScheme ArchiveTypeCheck (const struct KFile * f);
+
+typedef enum EncScheme
+{
+ encError,
+ encNone,
+ encEncFile,
+ encSraEncFile,
+ encWGAEncFile
+} EncScheme;
+
+void CryptOptionLines ();
+
+bool DoThisFile (const struct KFile * infile, EncScheme enc, ArcScheme * arc);
+
+struct Args;
+rc_t CommonMain (struct Args * args);
+
+rc_t CryptFile (const struct KFile * in, const struct KFile ** new_in,
+ struct KFile * out, struct KFile ** new_out, EncScheme scheme);
+
+
+#endif
+
+/* EOF */
diff --git a/tools/vdb-decrypt/vdb-decrypt.c b/tools/vdb-decrypt/vdb-decrypt.c
new file mode 100644
index 0000000..6ff5d65
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-decrypt.c
@@ -0,0 +1,280 @@
+/*==============================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#include "vdb-decrypt.vers.h"
+
+#include "shared.h"
+
+#include <krypto/wgaencrypt.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+#include <kfs/cacheteefile.h>
+#include <klib/rc.h>
+#include <klib/defs.h>
+#include <klib/log.h>
+#include <klib/status.h>
+
+#include <string.h>
+#include <assert.h>
+
+/* Version EXTERN
+ * return 4-part version code: 0xMMmmrrrr, where
+ * MM = major release
+ * mm = minor release
+ * rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+ return VDB_DECRYPT_VERS;
+}
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "vdb-decrypt";
+const char * UsageSra [] = { "decrypt sra archives - [NOT RECOMMENDED]",
+ NULL };
+const char De[] = "De";
+const char de[] = "de";
+const char OptionSra[] = OPTION_DEC_SRA;
+
+
+static
+OptDef Options[] =
+{
+ /* name alias max times oparam required fmtfunc help text loc */
+ { OPTION_DEC_SRA, ALIAS_DEC_SRA, NULL, UsageSra, 0, false, false },
+ { OPTION_FORCE, ALIAS_FORCE, NULL, ForceUsage, 0, false, false }
+};
+
+
+static
+bool DecryptSraFlag = false;
+
+
+const bool Decrypting = true;
+
+void CryptOptionLines ()
+{
+ HelpOptionLine (ALIAS_DEC_SRA, OPTION_DEC_SRA, NULL, UsageSra);
+}
+
+bool DoThisFile (const KFile * infile, EncScheme enc, ArcScheme * parc)
+{
+ const KFile * Infile;
+ ArcScheme arc;
+ rc_t rc;
+
+ *parc = arcNone;
+
+ switch (enc)
+ {
+ default:
+ STSMSG (1, ("not encrypted"));
+ return false;
+
+ case encEncFile:
+ /*
+ * this will apply to KEncFiles versions 1 and 2, maybe not 3
+ * but will hopefully become obsolete eventually.
+ */
+ rc = KEncFileMakeRead (&Infile, infile, &Key);
+ if (rc)
+ return false;
+ break;
+
+ case encSraEncFile:
+ /* these are NCBIsenc instead of NCBInenc */
+ goto sra_enc_file;
+
+ case encWGAEncFile:
+ rc = KFileMakeWGAEncRead (&Infile, infile, Password, PasswordSize);
+ if (rc)
+ return false;
+ break;
+ }
+ arc = ArchiveTypeCheck (Infile);
+ KFileRelease (Infile);
+ switch (arc)
+ {
+ default:
+ return false;
+ case arcNone:
+ return true;
+ case arcSRAFile:
+ break;
+ }
+sra_enc_file:
+ *parc = arcSRAFile;
+ STSMSG (1, ("encrypted sra archive\ndecryption%s requested",
+ DecryptSraFlag ? "" : " not"));
+ return DecryptSraFlag;
+}
+
+bool NameFixUp (char * name)
+{
+ char * pc = strrchr (name, '.');
+ if (pc != NULL)
+ {
+ if (strcmp (pc, EncExt) == 0)
+ {
+ pc[0] = '\0';
+ return true;
+ }
+ }
+ return false;
+}
+
+rc_t CryptFile (const KFile * in, const KFile ** new_in,
+ KFile * out, KFile ** new_out, EncScheme scheme)
+{
+ const KFile * dec;
+ rc_t rc;
+
+ assert (in);
+ assert (out);
+ assert (new_in);
+ assert (new_out);
+
+
+ rc = KFileAddRef (out);
+ if (rc)
+ return rc;
+
+ switch (scheme)
+ {
+ default:
+ case encError:
+ rc = RC (rcExe, rcFile, rcClassifying, rcFile, rcInvalid);
+ break;
+
+ case encNone:
+ copy:
+ rc = KFileAddRef (in);
+ if (rc)
+ goto fail;
+ *new_in = in;
+ *new_out = out;
+ STSMSG (1, ("not encrypted just copying"));
+ return 0;
+
+ case encEncFile:
+ rc = KEncFileMakeRead (&dec, in, &Key);
+ made_enc:
+ if (rc)
+ goto fail;
+
+ switch (ArchiveTypeCheck (dec))
+ {
+ default:
+ case arcError:
+ rc = RC (rcExe, rcFile, rcClassifying, rcFile, rcInvalid);
+ break;
+
+ case arcSRAFile:
+ if (!DecryptSraFlag)
+ {
+ rc = KFileRelease (dec);
+ if (rc)
+ {
+ KFileRelease (dec);
+ KFileRelease (in);
+ goto fail;
+ }
+ goto copy;
+ }
+ /* fall through */
+ case arcNone:
+ *new_out = out;
+ *new_in = dec;
+ return 0;
+ }
+ break;
+
+ case encWGAEncFile:
+ rc = KFileMakeWGAEncRead (&dec, in, Password, PasswordSize);
+ goto made_enc;
+ break;
+ }
+ fail:
+ KFileRelease (out);
+ *new_in = *new_out = NULL;
+ return rc;
+}
+
+
+/* KMain - EXTERN
+ * executable entrypoint "main" is implemented by
+ * an OS-specific wrapper that takes care of establishing
+ * signal handlers, logging, etc.
+ *
+ * in turn, OS-specific "main" will invoke "KMain" as
+ * platform independent main entrypoint.
+ *
+ * "argc" [ IN ] - the number of textual parameters in "argv"
+ * should never be < 0, but has been left as a signed int
+ * for reasons of tradition.
+ *
+ * "argv" [ IN ] - array of NUL terminated strings expected
+ * to be in the shell-native character set: ASCII or UTF-8
+ * element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+ Args * args;
+ rc_t rc;
+
+ KStsLevelSet (1);
+
+ rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options,
+ sizeof (Options) / sizeof (Options[0]));
+ if (rc)
+ LOGERR (klogInt, rc, "failed to parse command line parameters");
+
+ else
+ {
+ uint32_t ocount;
+
+ rc = ArgsOptionCount (args, OPTION_DEC_SRA, &ocount);
+ if (rc)
+ LOGERR (klogInt, rc, "failed to examine decrypt "
+ "sra option");
+ else
+ {
+ DecryptSraFlag = (ocount > 0);
+
+ rc = CommonMain (args);
+ }
+ ArgsWhack (args);
+ }
+
+ STSMSG (1, ("exiting: %R (%u)", rc, rc));
+ return rc;
+}
+
+
+/* EOF */
diff --git a/tools/vdb-decrypt/vdb-decrypt.vers b/tools/vdb-decrypt/vdb-decrypt.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-decrypt.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/vdb-decrypt/vdb-encrypt.c b/tools/vdb-decrypt/vdb-encrypt.c
new file mode 100644
index 0000000..c50de63
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-encrypt.c
@@ -0,0 +1,227 @@
+/*==============================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#include "vdb-encrypt.vers.h"
+
+#include "shared.h"
+
+#include <krypto/wgaencrypt.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+#include <klib/rc.h>
+#include <klib/defs.h>
+#include <klib/log.h>
+#include <klib/status.h>
+
+#include <assert.h>
+#include <string.h>
+
+/* Version EXTERN
+ * return 4-part version code: 0xMMmmrrrr, where
+ * MM = major release
+ * mm = minor release
+ * rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+ return VDB_ENCRYPT_VERS;
+}
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "vdb-encrypt";
+const char De[] = "En";
+const char de[] = "en";
+
+
+static
+OptDef Options[] =
+{
+ /* name alias max times oparam required fmtfunc help text loc */
+ { OPTION_FORCE, ALIAS_FORCE, NULL, ForceUsage, 0, false, false }
+};
+
+
+static
+bool DecryptSraFlag = false;
+
+const bool Decrypting = false;
+
+void CryptOptionLines () {}
+
+bool DoThisFile (const KFile * infile, EncScheme enc, ArcScheme * parc)
+{
+ const KFile * Infile;
+ ArcScheme arc;
+ rc_t rc;
+ bool do_enc;
+
+ *parc = arcNone;
+
+ switch (enc)
+ {
+ default:
+ STSMSG (1, ("error checking encrypted"));
+ return false;
+
+ case encNone:
+ do_enc = true;
+ rc = KFileAddRef (infile);
+ if (rc)
+ return false;
+ Infile = infile;
+ break;
+
+ case encEncFile:
+ do_enc = false;
+ rc = KEncFileMakeRead (&Infile, infile, &Key);
+ if (rc)
+ return false;
+ break;
+
+ case encWGAEncFile:
+ do_enc = false;
+ rc = KFileMakeWGAEncRead (&Infile, infile, Password, PasswordSize);
+ if (rc)
+ return false;
+ break;
+ }
+ arc = ArchiveTypeCheck (Infile);
+ KFileRelease (Infile);
+ if (arc == arcSRAFile)
+ {
+ STSMSG (1, ("%sencrypted sra archive", do_enc ? "un" : ""));
+ *parc = arcSRAFile;
+ }
+ return do_enc;
+}
+
+bool NameFixUp (char * name)
+{
+ char * pc = strrchr (name, '.');
+
+ if (((pc != NULL) &&
+ (strcmp (pc, EncExt) == 0)) ||
+ IsArchive )
+ return false;
+
+ strcat (name, EncExt);
+
+ return true;
+}
+
+rc_t CryptFile (const KFile * in, const KFile ** new_in,
+ KFile * out, KFile ** new_out, EncScheme scheme)
+{
+ rc_t rc;
+
+ assert (in);
+ assert (out);
+ assert (new_in);
+ assert (new_out);
+
+ *new_in = *new_out = NULL;
+
+ rc = KFileAddRef (in);
+ if (rc)
+ return rc;
+
+ switch (scheme)
+ {
+ default:
+ case encError:
+ KFileRelease (in);
+ return RC (rcExe, rcEncryption, rcParsing, rcFile, rcInvalid);
+
+ case encNone:
+ rc = KEncFileMakeWrite (new_out, out, &Key);
+ if (rc)
+ {
+ KFileRelease (in);
+ return rc;
+ }
+ break;
+
+ case encEncFile:
+ case encWGAEncFile:
+ rc = KFileAddRef (out);
+ if (rc)
+ {
+ KFileRelease (in);
+ return rc;
+ }
+ *new_out = out;
+ STSMSG (1, ("already encrypted just copying"));
+ break;
+ }
+ *new_in = in;
+ return 0;
+}
+
+
+/* KMain - EXTERN
+ * executable entrypoint "main" is implemented by
+ * an OS-specific wrapper that takes care of establishing
+ * signal handlers, logging, etc.
+ *
+ * in turn, OS-specific "main" will invoke "KMain" as
+ * platform independent main entrypoint.
+ *
+ * "argc" [ IN ] - the number of textual parameters in "argv"
+ * should never be < 0, but has been left as a signed int
+ * for reasons of tradition.
+ *
+ * "argv" [ IN ] - array of NUL terminated strings expected
+ * to be in the shell-native character set: ASCII or UTF-8
+ * element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+ Args * args;
+ rc_t rc;
+
+ KStsLevelSet (1);
+
+ rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options,
+ sizeof (Options) / sizeof (Options[0]));
+ if (rc)
+ LOGERR (klogInt, rc, "failed to parse command line parameters");
+
+ else
+ {
+ rc = CommonMain (args);
+
+ ArgsWhack (args);
+ }
+
+ STSMSG (1, ("exiting: %R (%u)", rc, rc));
+ return rc;
+}
+
+
+/* EOF */
diff --git a/tools/vdb-decrypt/vdb-encrypt.vers b/tools/vdb-decrypt/vdb-encrypt.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-encrypt.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/vdb-dump/#Makefile# b/tools/vdb-dump/#Makefile#
new file mode 100644
index 0000000..35872c2
--- /dev/null
+++ b/tools/vdb-dump/#Makefile#
@@ -0,0 +1,130 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/vdb-dump
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+ vdb-dump
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: $(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# vdb-dump
+# vdb dump tool
+#
+VDB_DUMP_SRC = \
+ vdb-dump-num-gen \
+ vdb-dump-context \
+ vdb-dump-coldefs \
+ vdb-dump-tools \
+ vdb-dump-str \
+ vdb-dump-helper \
+ vdb-dump-filter \
+ vdb-dump-formats \
+ vdb-dump
+
+VDB_DUMP_OBJ = \
+ $(addsuffix .$(OBJX),$(VDB_DUMP_SRC))
+
+VDB_DUMP_LIB = \
+ -ssrapath \
+ -ssraschema \
+ -dalign-reader \
+ -daxf \
+ -dsraxf \
+ -dvxf \
+ -lksrch \
+ -lvdb \
+ -lkdb \
+ -lvfs \
+ -lkrypto \
+ -lkapp \
+ -lkfg \
+ -lkfs \
+ -lklib \
+ -lm
+
+$(BINDIR)/vdb-dump: $(VDB_DUMP_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_DUMP_LIB)
+
+vdb-dump_tag:
+ @ $(TOP)/build/tag-module.sh $(MODULE) vdb-dump $(VDB_DUMP_OBJ)
diff --git a/tools/vdb-dump/Makefile b/tools/vdb-dump/Makefile
index aa2fddd..6500242 100644
--- a/tools/vdb-dump/Makefile
+++ b/tools/vdb-dump/Makefile
@@ -42,15 +42,13 @@ ALL_TOOLS = \
#-------------------------------------------------------------------------------
# outer targets
#
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
@ $(MAKE_CMD) $(TARGDIR)/$@
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
@ $(MAKE_CMD) $(BINDIR)/$@
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
#-------------------------------------------------------------------------------
# all
@@ -69,18 +67,18 @@ $(TARGDIR)/std: \
.PHONY: $(TARGDIR)/std
#-------------------------------------------------------------------------------
-# clean
+# vers-includes
#
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
#-------------------------------------------------------------------------------
-# tag
+# clean
#
-tag: $(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
#-------------------------------------------------------------------------------
# vdb-dump
@@ -101,26 +99,21 @@ VDB_DUMP_OBJ = \
$(addsuffix .$(OBJX),$(VDB_DUMP_SRC))
VDB_DUMP_LIB = \
- -ssrapath \
+ -lkapp \
-ssraschema \
-dalign-reader \
- -daxf \
- -dsraxf \
- -dvxf \
- -lksrch \
+ $(READONLY_SCHEMA_LIBS) \
-lvdb \
-lkdb \
- -lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
-lkfg \
-lkfs \
+ -lksrch \
+ -lkproc \
-lklib \
- -ldl \
- -lz \
- -lbz2 \
-lm
$(BINDIR)/vdb-dump: $(VDB_DUMP_OBJ)
$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_DUMP_LIB)
-
-vdb-dump_tag:
- @ $(TOP)/build/tag-module.sh $(MODULE) vdb-dump $(VDB_DUMP_OBJ)
diff --git a/tools/vdb-dump/vdb-dump-coldefs.c b/tools/vdb-dump/vdb-dump-coldefs.c
index fcd9974..fac3f38 100644
--- a/tools/vdb-dump/vdb-dump-coldefs.c
+++ b/tools/vdb-dump/vdb-dump-coldefs.c
@@ -33,17 +33,36 @@
#include <klib/printf.h>
#include <klib/log.h>
#include <klib/rc.h>
+#include <vdb/vdb-priv.h>
#include <sra/sradb.h>
#include <sra/pacbio.h>
-#include <fmtdef.h>
#include <os-native.h>
#include <sysalloc.h>
+/* for platforms */
+#include <insdc/sra.h>
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
+/* once we get used to having moved the read descriptor
+ out of SRA, we should begin using those names.
+ if anyone has an investment in the old names, we may
+ want to provide a switch for using them... */
+#if USE_OLD_SRA_NAME || 1
+#define SRA_NAME( name ) \
+ "SRA_" #name
+#define SRA_NAMES( name1, name2 ) \
+ "SRA_" #name1 "|SRA_" #name2
+#else
+#define SRA_NAME( name ) \
+ # name
+#define SRA_NAMES( name1, name2 ) \
+ #name1 "|" #name2
+#endif
+
/* implementation of the value-translation-functions */
const char SRA_PB_HS_0[] = { "SRA_PACBIO_HOLE_SEQUENCING" };
@@ -74,38 +93,34 @@ const char *vdcd_get_hole_status_txt( const uint32_t id )
return( SRA_PB_HS_9 );
}
-const char SRA_PF_0[] = { "SRA_PLATFORM_UNDEFINED" };
-const char SRA_PF_1[] = { "SRA_PLATFORM_454" };
-const char SRA_PF_2[] = { "SRA_PLATFORM_ILLUMINA" };
-const char SRA_PF_3[] = { "SRA_PLATFORM_ABSOLID" };
-const char SRA_PF_4[] = { "SRA_PLATFORM_COMPLETE_GENOMICS" };
-const char SRA_PF_5[] = { "SRA_PLATFORM_HELICOS" };
-const char SRA_PF_6[] = { "SRA_PLATFORM_PACBIO_SMRT" };
-const char SRA_PF_7[] = { "SRA_PLATFORM_ION_TORRENT" };
-const char SRA_PF_8[] = { "unknown platform" };
-
const char *vdcd_get_platform_txt( const uint32_t id )
{
+#define CASE( id ) \
+ case id : return # id; break
+
switch( id )
{
- case 0 : return( SRA_PF_0 ); break;
- case 1 : return( SRA_PF_1 ); break;
- case 2 : return( SRA_PF_2 ); break;
- case 3 : return( SRA_PF_3 ); break;
- case 4 : return( SRA_PF_4 ); break;
- case 5 : return( SRA_PF_5 ); break;
- case 6 : return( SRA_PF_6 ); break;
- case 7 : return( SRA_PF_7 ); break;
+ CASE ( SRA_PLATFORM_UNDEFINED );
+ CASE ( SRA_PLATFORM_454 );
+ CASE ( SRA_PLATFORM_ILLUMINA );
+ CASE ( SRA_PLATFORM_ABSOLID );
+ CASE ( SRA_PLATFORM_COMPLETE_GENOMICS );
+ CASE ( SRA_PLATFORM_HELICOS );
+ CASE ( SRA_PLATFORM_PACBIO_SMRT );
+ CASE ( SRA_PLATFORM_ION_TORRENT );
+ CASE ( SRA_PLATFORM_SANGER );
}
- return( SRA_PF_8 );
+#undef CASE
+
+ return "unknown platform";
}
-const char SRA_RT_0[] = { "SRA_READ_TYPE_TECHNICAL" };
-const char SRA_RT_1[] = { "SRA_READ_TYPE_BIOLOGICAL" };
-const char SRA_RT_2[] = { "SRA_READ_TYPE_TECHNICAL|SRA_READ_TYPE_FORWARD" };
-const char SRA_RT_3[] = { "SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD" };
-const char SRA_RT_4[] = { "SRA_READ_TYPE_TECHNICAL|SRA_READ_TYPE_REVERSE" };
-const char SRA_RT_5[] = { "SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_REVERSE" };
+const char SRA_RT_0[] = { SRA_NAME ( READ_TYPE_TECHNICAL ) };
+const char SRA_RT_1[] = { SRA_NAME ( READ_TYPE_BIOLOGICAL ) };
+const char SRA_RT_2[] = { SRA_NAMES ( READ_TYPE_TECHNICAL, READ_TYPE_FORWARD ) };
+const char SRA_RT_3[] = { SRA_NAMES ( READ_TYPE_BIOLOGICAL, READ_TYPE_FORWARD ) };
+const char SRA_RT_4[] = { SRA_NAMES ( READ_TYPE_TECHNICAL, READ_TYPE_REVERSE ) };
+const char SRA_RT_5[] = { SRA_NAMES ( READ_TYPE_BIOLOGICAL, READ_TYPE_REVERSE ) };
const char SRA_RT_6[] = { "unknown read-type" };
const char *vdcd_get_read_type_txt( const uint32_t id )
@@ -122,10 +137,10 @@ const char *vdcd_get_read_type_txt( const uint32_t id )
return( SRA_RT_6 );
}
-const char SRA_FT_0[] = { "SRA_READ_FILTER_PASS" };
-const char SRA_FT_1[] = { "SRA_READ_FILTER_REJECT" };
-const char SRA_FT_2[] = { "SRA_READ_FILTER_CRITERIA" };
-const char SRA_FT_3[] = { "SRA_READ_FILTER_REDACTED" };
+const char SRA_FT_0[] = { SRA_NAME ( READ_FILTER_PASS ) };
+const char SRA_FT_1[] = { SRA_NAME ( READ_FILTER_REJECT ) };
+const char SRA_FT_2[] = { SRA_NAME ( READ_FILTER_CRITERIA ) };
+const char SRA_FT_3[] = { SRA_NAME ( READ_FILTER_REDACTED ) };
const char SRA_FT_4[] = { "unknown read-filter" };
const char *vdcd_get_read_filter_txt( const uint32_t id )
@@ -147,28 +162,43 @@ const char *vdcd_get_read_filter_txt( const uint32_t id )
#define SRA_KEY_READ_FILTER "INSDC:SRA:read_filter"
#define SRA_PACBIO_HOLE_STATUS "PacBio:hole:status"
-value_trans_fct_t vdcd_get_value_trans_fct( const char* name )
+
+static bool vdcd_type_cmp( const VSchema *my_schema, VTypedecl * typedecl, const char * to_check )
+{
+ VTypedecl type_to_check;
+ rc_t rc = VSchemaResolveTypedecl ( my_schema, &type_to_check, to_check );
+ if ( rc == 0 )
+ {
+ return VTypedeclToTypedecl ( typedecl, my_schema, &type_to_check, NULL, NULL );
+ }
+ return false;
+}
+
+
+static value_trans_fct_t vdcd_get_value_trans_fct( const VSchema *my_schema, VTypedecl * typedecl )
{
value_trans_fct_t res = NULL;
- if ( name == NULL ) return res;
- if ( strcmp( name, SRA_KEY_PLATFORM_ID ) == 0 )
+ if ( my_schema == NULL ) return res;
+ if ( typedecl == NULL ) return res;
+
+ if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_PLATFORM_ID ) )
{
res = vdcd_get_platform_txt;
}
- else if ( strcmp( name, SRA_KEY_XREAD_TYPE ) == 0 )
+ else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_XREAD_TYPE ) )
{
res = vdcd_get_read_type_txt;
}
- else if ( strcmp( name, SRA_KEY_READ_TYPE ) == 0 )
+ else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_READ_TYPE ) )
{
res = vdcd_get_read_type_txt;
}
- else if ( strcmp( name, SRA_KEY_READ_FILTER ) == 0 )
+ else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_READ_FILTER ) )
{
res = vdcd_get_read_filter_txt;
}
- else if ( strcmp( name, SRA_PACBIO_HOLE_STATUS ) == 0 )
+ else if ( vdcd_type_cmp( my_schema, typedecl, SRA_PACBIO_HOLE_STATUS ) )
{
res = vdcd_get_hole_status_txt;
}
@@ -176,8 +206,9 @@ value_trans_fct_t vdcd_get_value_trans_fct( const char* name )
return res;
}
+
/* implementation of the dimension-translation-functions */
-char *vdcd_get_read_desc_txt( const uint8_t * src )
+static char *vdcd_get_read_desc_txt( const uint8_t * src )
{
char *res = calloc( 1, 120 );
SRAReadDesc desc;
@@ -189,7 +220,7 @@ char *vdcd_get_read_desc_txt( const uint8_t * src )
return res;
}
-char *vdcd_get_spot_desc_txt( const uint8_t *src )
+static char *vdcd_get_spot_desc_txt( const uint8_t *src )
{
char *res = calloc( 1, 120 );
SRASpotDesc desc;
@@ -205,11 +236,22 @@ char *vdcd_get_spot_desc_txt( const uint8_t *src )
#define SRA_KEY_READ_DESC "NCBI:SRA:ReadDesc"
#define SRA_KEY_SPOT_DESC "NCBI:SRA:SpotDesc"
-dim_trans_fct_t vdcd_get_dim_trans_fct( const char* name )
+static dim_trans_fct_t vdcd_get_dim_trans_fct( const VSchema *my_schema, VTypedecl * typedecl )
{
dim_trans_fct_t res = NULL;
- if ( name == NULL ) return res;
+ if ( my_schema == NULL ) return res;
+ if ( typedecl == NULL ) return res;
+
+ if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_READ_DESC ) )
+ {
+ res = vdcd_get_read_desc_txt;
+ }
+ else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_SPOT_DESC ) )
+ {
+ res = vdcd_get_spot_desc_txt;
+ }
+/*
if ( strcmp( name, SRA_KEY_READ_DESC ) == 0 )
{
res = vdcd_get_read_desc_txt;
@@ -218,22 +260,31 @@ dim_trans_fct_t vdcd_get_dim_trans_fct( const char* name )
{
res = vdcd_get_spot_desc_txt;
}
+*/
return res;
}
+const char * const_s_Ascii = "Ascii";
+const char * const_s_Unicode = "Unicode";
+const char * const_s_Uint = "Uint";
+const char * const_s_Int = "Int";
+const char * const_s_Float = "Float";
+const char * const_s_Bool = "Bool";
+const char * const_s_Unknown = "unknown";
+
char *vdcd_make_domain_txt( const uint32_t domain )
{
char* res= NULL;
switch( domain )
{
- case vtdAscii : res = strdup( "Ascii" ); break;
- case vtdUnicode : res = strdup( "Unicode" ); break;
- case vtdUint : res = strdup( "Uint" ); break;
- case vtdInt : res = strdup( "Int" ); break;
- case vtdFloat : res = strdup( "Float" ); break;
- case vtdBool : res = strdup( "Bool" ); break;
- default : res = strdup( "unknown" ); break;
+ case vtdAscii : res = string_dup_measure( const_s_Ascii, NULL ); break;
+ case vtdUnicode : res = string_dup_measure( const_s_Unicode, NULL ); break;
+ case vtdUint : res = string_dup_measure( const_s_Uint, NULL ); break;
+ case vtdInt : res = string_dup_measure( const_s_Int, NULL ); break;
+ case vtdFloat : res = string_dup_measure( const_s_Float, NULL ); break;
+ case vtdBool : res = string_dup_measure( const_s_Bool, NULL ); break;
+ default : res = string_dup_measure( const_s_Unknown, NULL ); break;
}
return res;
}
@@ -244,11 +295,11 @@ p_col_def vdcd_init_col( const char* name, const size_t str_limit )
p_col_def res = NULL;
if ( name == NULL ) return res;
if ( name[0] == 0 ) return res;
- res = (p_col_def)calloc( 1, sizeof( col_def ) );
+ res = ( p_col_def )calloc( 1, sizeof( col_def ) );
if ( res != NULL )
{
res->name = string_dup_measure ( name, NULL );
- vds_make( &(res->content), str_limit, DUMP_STR_INC );
+ vds_make( &( res->content ), str_limit, DUMP_STR_INC );
}
return res;
}
@@ -257,7 +308,7 @@ void vdcd_destroy_col( p_col_def col_def )
{
if ( col_def == NULL ) return;
if ( col_def->name ) free( col_def->name );
- vds_free( &(col_def->content) );
+ vds_free( &( col_def->content ) );
free( col_def );
}
@@ -273,7 +324,7 @@ bool vdcd_init( col_defs** defs, const size_t str_limit )
(*defs)->max_colname_chars = 0;
res = true;
}
- (*defs)->str_limit = str_limit;
+ ( *defs )->str_limit = str_limit;
return res;
}
@@ -296,7 +347,7 @@ static p_col_def vdcd_append_col( col_defs* defs, const char* name )
{
if ( VectorAppend( &(defs->cols), NULL, new_col ) == 0 )
{
- int len = strlen( name );
+ int len = string_size( name );
if ( len > defs->max_colname_chars )
defs->max_colname_chars = len;
}
@@ -304,8 +355,10 @@ static p_col_def vdcd_append_col( col_defs* defs, const char* name )
return new_col;
}
-bool vdcd_parse_string( col_defs* defs, const char* src )
+
+bool vdcd_parse_string( col_defs* defs, const char* src, const VTable *my_table )
{
+ uint32_t count = 0;
char colname[MAX_COL_NAME_LEN+1];
size_t i_dest = 0;
if ( defs == NULL ) return false;
@@ -332,9 +385,42 @@ bool vdcd_parse_string( col_defs* defs, const char* src )
colname[i_dest]=0;
vdcd_append_col( defs, colname );
}
- return ( VectorLength( &(defs->cols) ) > 0 );
+ count = VectorLength( &(defs->cols) ) > 0;
+ if ( count > 0 && my_table != NULL )
+ {
+ const VCursor *my_cursor;
+ rc_t rc = VTableCreateCursorRead( my_table, &my_cursor );
+ DISP_RC( rc, "VTableCreateCursorRead() failed" );
+ if ( rc == 0 )
+ {
+ uint32_t found = 0;
+ uint32_t idx;
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ col_def *col = ( col_def * )VectorGet( &(defs->cols), idx );
+ if ( col != NULL )
+ {
+ rc = VCursorAddColumn( my_cursor, &(col->idx), col->name );
+ DISP_RC( rc, "VCursorAddColumn() failed" );
+ if ( rc == 0 )
+ {
+ rc = VCursorDatatype( my_cursor, col->idx,
+ &(col->type_decl), &(col->type_desc) );
+ DISP_RC( rc, "VCursorDatatype() failed" );
+ if ( rc == 0 )
+ found++;
+ }
+ }
+ }
+ count = found;
+ rc = VCursorRelease( my_cursor );
+ DISP_RC( rc, "VCursorRelease() failed" );
+ }
+ }
+ return ( count > 0 );
}
+
bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table )
{
bool col_defs_found = false;
@@ -355,7 +441,7 @@ bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table )
if ( rc == 0 )
{
uint32_t i;
- for ( i=0; i<n; ++i )
+ for ( i = 0; i < n && rc ==0; ++i )
{
const char *col_name;
rc = KNamelistGet( names, i, &col_name );
@@ -377,7 +463,7 @@ bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table )
}
}
}
- col_defs_found = ( found > 0 );
+ col_defs_found = ( found > 0 );
}
rc = VCursorRelease( my_cursor );
DISP_RC( rc, "VCursorRelease() failed" );
@@ -388,6 +474,41 @@ bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table )
return col_defs_found;
}
+
+bool vdcd_extract_from_phys_table( col_defs* defs, const VTable *my_table )
+{
+ bool col_defs_found = false;
+ KNamelist *names;
+ rc_t rc = VTableListPhysColumns( my_table, &names );
+ DISP_RC( rc, "VTableListPhysColumns() failed" );
+ if ( rc == 0 )
+ {
+ uint32_t n;
+ uint32_t found = 0;
+ rc = KNamelistCount( names, &n );
+ DISP_RC( rc, "KNamelistCount() failed" );
+ if ( rc == 0 )
+ {
+ uint32_t i;
+ for ( i = 0; i < n && rc == 0; ++i )
+ {
+ const char *col_name;
+ rc = KNamelistGet( names, i, &col_name );
+ DISP_RC( rc, "KNamelistGet() failed" );
+ if ( rc == 0 )
+ {
+ vdcd_append_col( defs, col_name );
+ found++;
+ }
+ }
+ col_defs_found = ( found > 0 );
+ }
+ rc = KNamelistRelease( names );
+ DISP_RC( rc, "KNamelistRelease() failed" );
+ }
+ return col_defs_found;
+}
+
typedef struct add_2_cur_context
{
const VCursor *my_cursor;
@@ -449,24 +570,17 @@ void vdcd_reset_content( col_defs* defs )
static void CC vdcd_ins_1_trans_fkt( void *item, void *data )
{
- rc_t rc;
- char buf[64];
- p_col_def my_col_def = (p_col_def)item;
- const VSchema *my_schema = (const VSchema*)data;
+ p_col_def my_col_def = ( p_col_def )item;
+ const VSchema *my_schema = ( const VSchema * )data;
if ( my_col_def == NULL ) return;
if ( my_schema == NULL ) return;
- rc = VTypedeclToText( &(my_col_def->type_decl), my_schema,
- buf, sizeof(buf) );
- DISP_RC( rc, "VTypedeclToText() failed" );
- if ( rc == 0 )
- {
- /* resolves special sra-types and retrieves the addr of
- a function that later can translate the values into plain-text
- --- is defined in this file! */
- my_col_def->value_trans_fct = vdcd_get_value_trans_fct( buf );
- my_col_def->dim_trans_fct = vdcd_get_dim_trans_fct( buf );
- }
+
+ /* resolves special sra-types and retrieves the addr of
+ a function that later can translate the values into plain-text
+ --- is defined in this file! */
+ my_col_def->value_trans_fct = vdcd_get_value_trans_fct( my_schema, &(my_col_def->type_decl) );
+ my_col_def->dim_trans_fct = vdcd_get_dim_trans_fct( my_schema, &(my_col_def->type_decl) );
}
void vdcd_ins_trans_fkt( col_defs* defs, const VSchema *my_schema )
diff --git a/tools/vdb-dump/vdb-dump-coldefs.h b/tools/vdb-dump/vdb-dump-coldefs.h
index c26e667..83ee20a 100644
--- a/tools/vdb-dump/vdb-dump-coldefs.h
+++ b/tools/vdb-dump/vdb-dump-coldefs.h
@@ -58,6 +58,7 @@ typedef struct col_def
{
char *name;
uint32_t idx;
+ uint64_t elementsum;
bool valid;
bool excluded;
VTypedecl type_decl;
@@ -86,8 +87,9 @@ char *vdcd_make_domain_txt( const uint32_t domain );
bool vdcd_init( col_defs** defs, const size_t str_limit );
void vdcd_destroy( col_defs* defs );
-bool vdcd_parse_string( col_defs* defs, const char* src );
+bool vdcd_parse_string( col_defs* defs, const char* src, const VTable *my_table );
bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table );
+bool vdcd_extract_from_phys_table( col_defs* defs, const VTable *my_table );
bool vdcd_add_to_cursor( col_defs* defs, const VCursor *my_cursor );
void vdcd_reset_content( col_defs* defs );
void vdcd_ins_trans_fkt( col_defs* defs, const VSchema *my_schema );
diff --git a/tools/vdb-dump/vdb-dump-context.c b/tools/vdb-dump/vdb-dump-context.c
index 37949f1..c24899c 100644
--- a/tools/vdb-dump/vdb-dump-context.c
+++ b/tools/vdb-dump/vdb-dump-context.c
@@ -35,7 +35,6 @@
#include <os-native.h>
#include <sysalloc.h>
-#include <fmtdef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -61,7 +60,7 @@ static rc_t vdco_set_str( char **dst, const char *src )
{
return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
}
- len = strlen( src );
+ len = string_size( src );
if ( len == 0 )
{
return RC( rcVDB, rcNoTarg, rcWriting, rcItem, rcEmpty );
@@ -71,7 +70,7 @@ static rc_t vdco_set_str( char **dst, const char *src )
{
return RC( rcVDB, rcNoTarg, rcWriting, rcMemory, rcExhausted );
}
- strcpy( *dst, src );
+ string_copy( *dst, len+1, src, len );
return 0;
}
@@ -101,6 +100,9 @@ static void vdco_init_values( p_dump_context ctx )
ctx->id_range_requested = false;
ctx->without_sra_types = false;
ctx->dont_check_accession = false;
+ ctx->print_num_elem = false;
+ ctx->objver_requested = false;
+ ctx->objtype_requested = false;
}
rc_t vdco_init( dump_context **ctx )
@@ -142,11 +144,6 @@ rc_t vdco_destroy( p_dump_context ctx )
}
if ( rc == 0 )
{
- if ( ctx->path != NULL )
- {
- free( (void*)ctx->path );
- ctx->path = NULL;
- }
VectorWhack( &(ctx->schema_list),
vdco_schema_list_entry_whack, NULL );
if ( ctx->table != NULL )
@@ -170,20 +167,6 @@ rc_t vdco_destroy( p_dump_context ctx )
return rc;
}
-static rc_t vdco_set_path( p_dump_context ctx, const char *src )
-{
- rc_t rc = 0;
- if ( ( ctx == NULL )||( src == NULL ) )
- {
- rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
- }
- if ( rc == 0 )
- {
- rc = vdco_set_str( (char**)&(ctx->path), src );
- DISP_RC( rc, "dump_context_set_str() failed" );
- }
- return rc;
-}
static rc_t vdco_add_schema( p_dump_context ctx, const char *src )
{
@@ -285,12 +268,6 @@ static rc_t vdco_set_row_range( p_dump_context ctx, const char *src )
return rc;
}
-static bool vdco_check_if_usage_necessary( p_dump_context ctx )
-{
- if ( ctx == NULL ) return false;
- if ( ctx->path == NULL ) ctx->usage_requested = true;
- return ctx->usage_requested;
-}
static bool vdco_set_format( p_dump_context ctx, const char *src )
{
@@ -323,34 +300,6 @@ static bool vdco_set_boolean_char( dump_context *ctx, const char * src )
return true;
}
-static rc_t vdco_evaluate_arguments( const Args *my_args,
- dump_context *context )
-{
- uint32_t count;
- rc_t rc = ArgsParamCount( my_args, &count );
- DISP_RC( rc, "ArgsParamCount() failed" );
- if ( rc == 0 )
- {
- uint32_t idx;
- for ( idx=0; idx<count; ++idx )
- {
- const char *value = NULL;
- rc = ArgsParamValue( my_args, idx, &value );
- DISP_RC( rc, "ArgsParamValue() failed" );
- if ( rc == 0 )
- {
- switch( idx )
- {
- case 0 : rc = vdco_set_path( context, value );
- DISP_RC( rc, "dump_context_set_path() failed" );
- break;
- }
- }
- }
- }
- return rc;
-}
-
static bool vdco_get_bool_option( const Args *my_args,
const char *name,
@@ -457,12 +406,18 @@ static void vdco_evaluate_options( const Args *my_args,
ctx->column_enum_requested = vdco_get_bool_option( my_args, OPTION_COLUMN_ENUM, false );
ctx->column_enum_short = vdco_get_bool_option( my_args, OPTION_COLUMN_SHORT, false );
ctx->print_dna_bases = vdco_get_bool_option( my_args, OPTION_DNA_BASES, false );
+ ctx->objver_requested = vdco_get_bool_option( my_args, OPTION_OBJVER, false );
+ ctx->objtype_requested = vdco_get_bool_option( my_args, OPTION_OBJTYPE, false );
ctx->max_line_len = vdco_get_uint16_option( my_args, OPTION_MAX_LINE_LEN, 0 );
ctx->indented_line_len = vdco_get_uint16_option( my_args, OPTION_LINE_INDENT, 0 );
ctx->id_range_requested = vdco_get_bool_option( my_args, OPTION_ID_RANGE, false );
vdco_set_format( ctx, vdco_get_str_option( my_args, OPTION_FORMAT ) );
ctx->without_sra_types = vdco_get_bool_option( my_args, OPTION_WITHOUT_SRA, false );
ctx->dont_check_accession = vdco_get_bool_option( my_args, OPTION_WITHOUT_ACCESSION, false );
+ ctx->print_num_elem = vdco_get_bool_option( my_args, OPTION_NUMELEM, false );
+ ctx->sum_num_elem = vdco_get_bool_option( my_args, OPTION_NUMELEMSUM, false );
+ ctx->show_blobbing = vdco_get_bool_option( my_args, OPTION_SHOW_BLOBBING, false );
+ ctx->enum_phys = vdco_get_bool_option( my_args, OPTION_ENUM_PHYS, false );
vdco_set_table( ctx, vdco_get_str_option( my_args, OPTION_TABLE ) );
vdco_set_columns( ctx, vdco_get_str_option( my_args, OPTION_COLUMNS ) );
@@ -477,15 +432,9 @@ rc_t vdco_capture_arguments_and_options( const Args * args, dump_context *ctx)
{
rc_t rc;
- rc = vdco_evaluate_arguments( args, ctx );
- DISP_RC( rc, "evaluate_arguments() failed" );
- if ( rc == 0 )
- {
- vdco_evaluate_options( args, ctx );
- vdco_check_if_usage_necessary( ctx );
+ vdco_evaluate_options( args, ctx );
- rc = ArgsHandleLogLevel( args );
- DISP_RC( rc, "ArgsHandleLogLevel() failed" );
- }
+ rc = ArgsHandleLogLevel( args );
+ DISP_RC( rc, "ArgsHandleLogLevel() failed" );
return rc;
}
diff --git a/tools/vdb-dump/vdb-dump-context.h b/tools/vdb-dump/vdb-dump-context.h
index d71cdc8..185e9f1 100644
--- a/tools/vdb-dump/vdb-dump-context.h
+++ b/tools/vdb-dump/vdb-dump-context.h
@@ -60,6 +60,12 @@ extern "C" {
#define OPTION_WITHOUT_ACCESSION "without_accession"
#define OPTION_EXCLUDED_COLUMNS "exclude"
#define OPTION_BOOLEAN "boolean"
+#define OPTION_OBJVER "obj_version"
+#define OPTION_OBJTYPE "obj_type"
+#define OPTION_NUMELEM "numelem"
+#define OPTION_NUMELEMSUM "numelemsum"
+#define OPTION_SHOW_BLOBBING "blobbing"
+#define OPTION_ENUM_PHYS "phys"
#define ALIAS_ROW_ID_ON "I"
#define ALIAS_LINE_FEED "l"
@@ -83,7 +89,10 @@ extern "C" {
#define ALIAS_WITHOUT_ACCESSION "a"
#define ALIAS_EXCLUDED_COLUMNS "x"
#define ALIAS_BOOLEAN "b"
-
+#define ALIAS_OBJVER "j"
+#define ALIAS_OBJTYPE "y"
+#define ALIAS_NUMELEM "u"
+#define ALIAS_NUMELEMSUM "U"
typedef enum dump_format_t
{
@@ -128,6 +137,12 @@ typedef struct dump_context
bool id_range_requested;
bool without_sra_types;
bool dont_check_accession;
+ bool objver_requested;
+ bool objtype_requested;
+ bool print_num_elem;
+ bool sum_num_elem;
+ bool show_blobbing;
+ bool enum_phys;
} dump_context;
typedef dump_context* p_dump_context;
diff --git a/tools/vdb-dump/vdb-dump-filter.c b/tools/vdb-dump/vdb-dump-filter.c
index 488e45f..962f0e7 100644
--- a/tools/vdb-dump/vdb-dump-filter.c
+++ b/tools/vdb-dump/vdb-dump-filter.c
@@ -25,8 +25,8 @@
*/
#include "vdb-dump-filter.h"
+#include <klib/text.h>
-#include <fmtdef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -41,7 +41,7 @@ bool vdfi_make_filter( filter **flt, const char *expression )
(*flt) = malloc( sizeof( flt ) );
if ( *flt )
{
- (*flt)->expression = strdup( expression );
+ (*flt)->expression = string_dup_measure( expression, NULL );
(*flt)->filter_type = filter_unknown;
res = true;
}
diff --git a/tools/vdb-dump/vdb-dump-formats.c b/tools/vdb-dump/vdb-dump-formats.c
index ce9b691..4b66d7a 100644
--- a/tools/vdb-dump/vdb-dump-formats.c
+++ b/tools/vdb-dump/vdb-dump-formats.c
@@ -81,21 +81,23 @@ static void CC vdfo_print_col_default( void *item, void *data )
}
/* FINALLY we print the content of a column... */
- OUTMSG ( ( "%s\n", r_ctx->s_col.buf ) );
+ KOutMsg( "%s\n", r_ctx->s_col.buf );
}
static rc_t vdfo_print_row_default( const p_row_context r_ctx )
{
+ rc_t rc = 0;
if ( r_ctx->ctx->print_row_id )
- OUTMSG ( ( "ROW-ID = %u\n", r_ctx->row_id ) );
+ rc = KOutMsg( "ROW-ID = %u\n", r_ctx->row_id );
- VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_default, r_ctx );
+ if ( rc == 0 )
+ VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_default, r_ctx );
- if ( r_ctx->ctx->lf_after_row > 0 )
+ if ( rc == 0 && r_ctx->ctx->lf_after_row > 0 )
{
uint16_t i=0;
- while ( i++ < r_ctx->ctx->lf_after_row )
- OUTMSG ( ( "\n" ) );
+ while ( i++ < r_ctx->ctx->lf_after_row && rc == 0 )
+ rc = KOutMsg( "\n" );
}
return 0;
}
@@ -138,7 +140,7 @@ static rc_t vdfo_print_row_csv( const p_row_context r_ctx )
{
r_ctx->col_nr = 0;
VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_csv, r_ctx );
- OUTMSG (( "%s\n", r_ctx->s_col.buf ));
+ rc = KOutMsg( "%s\n", r_ctx->s_col.buf );
}
return rc;
}
@@ -152,9 +154,9 @@ static void CC vdfo_print_col_xml( void *item, void *data )
if ( my_col_def->valid == false ) return;
if ( my_col_def->excluded == true ) return;
- OUTMSG (( " <%s>\n", my_col_def->name ));
- OUTMSG (( "%s", my_col_def->content.buf ));
- OUTMSG (( " </%s>\n", my_col_def->name ));
+ KOutMsg( " <%s>\n", my_col_def->name );
+ KOutMsg( "%s", my_col_def->content.buf );
+ KOutMsg( " </%s>\n", my_col_def->name );
}
static rc_t vdfo_print_row_xml( const p_row_context r_ctx )
@@ -163,9 +165,12 @@ static rc_t vdfo_print_row_xml( const p_row_context r_ctx )
DISP_RC( rc, "dump_str_clear() failed" )
if ( rc == 0 )
{
- OUTMSG ( ( "<row_%lu>\n", r_ctx->row_id ) );
- VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_xml, r_ctx );
- OUTMSG ( ( "</row_%lu>\n\n", r_ctx->row_id ) );
+ rc = KOutMsg( "<row>\n" );
+ if ( rc == 0 )
+ {
+ VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_xml, r_ctx );
+ rc = KOutMsg( "</row>\n");
+ }
}
return rc;
}
@@ -203,7 +208,7 @@ static void CC vdfo_print_col_json( void *item, void *data )
}
if ( rc == 0 )
- OUTMSG ( ( ",\n\"%s\":%s", my_col_def->name, my_col_def->content.buf ) );
+ KOutMsg( ",\n\"%s\":%s", my_col_def->name, my_col_def->content.buf );
}
static rc_t vdfo_print_row_json( const p_row_context r_ctx )
@@ -212,10 +217,16 @@ static rc_t vdfo_print_row_json( const p_row_context r_ctx )
DISP_RC( rc, "dump_str_clear() failed" )
if ( rc == 0 )
{
- OUTMSG ( ( "{\n" ) );
- OUTMSG ( ( "\"row_id\": %lu", r_ctx->row_id ) );
- VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_json, r_ctx );
- OUTMSG ( ( "\n},\n\n" ) );
+ rc = KOutMsg( "{\n" );
+ if ( rc == 0 )
+ {
+ rc = KOutMsg( "\"row_id\": %lu", r_ctx->row_id );
+ if ( rc == 0 )
+ {
+ VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_json, r_ctx );
+ rc = KOutMsg( "\n},\n\n" );
+ }
+ }
}
return rc;
}
@@ -234,7 +245,7 @@ static void CC vdfo_print_col_piped( void *item, void *data )
if ( my_col_def->excluded == true ) return;
/* first we print the row_id and the column-name for every column! */
- OUTMSG ( ( "%lu, %s: ", r_ctx->row_id, my_col_def->name ) );
+ KOutMsg( "%lu, %s: ", r_ctx->row_id, my_col_def->name );
if ( ( my_col_def->type_desc.domain == vtdAscii )||
( my_col_def->type_desc.domain == vtdUnicode ) )
@@ -257,7 +268,7 @@ static void CC vdfo_print_col_piped( void *item, void *data )
}
if ( rc == 0 )
- OUTMSG ( ( "%s\n", my_col_def->content.buf ) );
+ KOutMsg( "%s\n", my_col_def->content.buf );
}
@@ -294,7 +305,7 @@ static rc_t vdfo_print_row_piped( const p_row_context r_ctx )
if ( rc == 0 )
{
VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_piped, r_ctx );
- OUTMSG ( ( "\n" ) );
+ rc = KOutMsg( "\n" );
}
return rc;
}
@@ -307,7 +318,7 @@ static rc_t vdfo_print_row_tab( const p_row_context r_ctx )
{
r_ctx->col_nr = 0;
VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_tab, r_ctx );
- OUTMSG (( "%s\n", r_ctx->s_col.buf ));
+ rc = KOutMsg( "%s\n", r_ctx->s_col.buf );
}
return rc;
}
diff --git a/tools/vdb-dump/vdb-dump-helper.c b/tools/vdb-dump/vdb-dump-helper.c
index a90e47b..2ff775e 100644
--- a/tools/vdb-dump/vdb-dump-helper.c
+++ b/tools/vdb-dump/vdb-dump-helper.c
@@ -36,7 +36,6 @@
#include <sysalloc.h>
#include "vdb-dump-helper.h"
-#include <fmtdef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -133,6 +132,9 @@ bool vdh_is_path_table( const VDBManager *my_manager, const char *path,
return res;
}
+
+const char * backback = "/../..";
+
/********************************************************************
helper function to test if a given path is a vdb-column
by testing if the parent/parent dir is a vdb-table
@@ -141,7 +143,7 @@ bool vdh_is_path_column( const VDBManager *my_manager, const char *path,
Vector *schema_list )
{
bool res = false;
- size_t path_len = strlen( path );
+ size_t path_len = string_size( path );
char *pp_path = malloc( path_len + 20 );
if ( pp_path )
{
@@ -153,8 +155,8 @@ bool vdh_is_path_column( const VDBManager *my_manager, const char *path,
DISP_RC( rc, "KDirectoryNativeDir() failed" );
if ( rc == 0 )
{
- strcpy( pp_path, path );
- strcat( pp_path, "/../.." );
+ string_copy( pp_path, path_len + 20, path, path_len );
+ string_copy( &pp_path[ path_len ], 20, backback, string_size( backback ) );
rc = KDirectoryResolvePath( my_directory, true, resolved, 1023, pp_path );
if ( rc == 0 )
res = vdh_is_path_table( my_manager, resolved, schema_list );
@@ -276,97 +278,99 @@ bool vdh_take_this_table_from_db( dump_context *ctx, const VDatabase *my_databas
}
-static void vdh_print_full_col_info( dump_context *ctx,
+const char * s_unknown_tab = "unknown table";
+
+static rc_t vdh_print_full_col_info( dump_context *ctx,
const p_col_def col_def,
const VSchema *my_schema )
{
- char *s_domain;
-
- s_domain = vdcd_make_domain_txt( col_def->type_desc.domain );
+ rc_t rc = 0;
+ char * s_domain = vdcd_make_domain_txt( col_def->type_desc.domain );
if ( s_domain != NULL )
{
if ( ctx->table == NULL )
{
- ctx->table = strdup( "unknown table" ); /* will be free'd when ctx get free'd */
+ ctx->table = string_dup_measure( s_unknown_tab, NULL ); /* will be free'd when ctx get free'd */
}
if ( ( ctx->table != NULL )&&( col_def->name != NULL ) )
{
- OUTMSG ( ( "%s.%.02d : (%.3d bits [%.02d], %8s) %s",
+ rc = KOutMsg( "%s.%.02d : (%.3d bits [%.02d], %8s) %s",
ctx->table,
ctx->generic_idx++,
col_def->type_desc.intrinsic_bits,
col_def->type_desc.intrinsic_dim,
s_domain,
- col_def->name ) );
- if ( my_schema )
+ col_def->name );
+ if ( rc == 0 && my_schema )
{
char buf[64];
- rc_t rc = VTypedeclToText( &(col_def->type_decl), my_schema,
- buf, sizeof(buf) );
+ rc = VTypedeclToText( &(col_def->type_decl), my_schema,
+ buf, sizeof(buf) );
DISP_RC( rc, "VTypedeclToText() failed" );
if ( rc == 0 )
- {
- OUTMSG ( ( "\n (%s)", buf ) );
- }
+ rc = KOutMsg( "\n (%s)", buf );
}
- OUTMSG ( ( "\n" ) );
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
}
else
{
if ( ctx->table == NULL )
{
- puts( "error: no table-name in print_column_info()" );
+ rc = KOutMsg( "error: no table-name in print_column_info()" );
}
if ( col_def->name == NULL )
{
- puts( "error: no column-name in print_column_info()" );
+ rc = KOutMsg( "error: no column-name in print_column_info()" );
}
}
free( s_domain );
}
else
{
- puts( "error: making domain-text in print_column_info()" );
+ rc = KOutMsg( "error: making domain-text in print_column_info()" );
}
+ return rc;
}
-static void vdh_print_short_col_info( const p_col_def col_def,
+static rc_t vdh_print_short_col_info( const p_col_def col_def,
const VSchema *my_schema )
{
+ rc_t rc = 0;
if ( col_def->name != NULL )
{
- OUTMSG ( ( "%s", col_def->name ) );
+ rc = KOutMsg( "%s", col_def->name );
if ( my_schema )
{
char buf[64];
- rc_t rc = VTypedeclToText( &(col_def->type_decl), my_schema,
- buf, sizeof(buf) );
+ rc = VTypedeclToText( &(col_def->type_decl), my_schema,
+ buf, sizeof(buf) );
DISP_RC( rc, "VTypedeclToText() failed" );
if ( rc == 0 )
{
- OUTMSG ( ( " (%s)", buf ) );
+ rc = KOutMsg( " (%s)", buf );
}
}
- OUTMSG ( ( "\n" ) );
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
}
+ return rc;
}
-void vdh_print_col_info( dump_context *ctx,
+rc_t vdh_print_col_info( dump_context *ctx,
const p_col_def col_def,
const VSchema *my_schema )
{
- if ( ctx == NULL ) return;
- if ( col_def == NULL ) return;
-
- if ( ctx->column_enum_requested )
+ rc_t rc = 0;
+ if ( ctx != NULL && col_def != NULL )
{
- vdh_print_full_col_info( ctx, col_def, my_schema );
- }
- else
- {
- vdh_print_short_col_info( col_def, my_schema );
+ if ( ctx->column_enum_requested )
+ rc = vdh_print_full_col_info( ctx, col_def, my_schema );
+ else
+ rc = vdh_print_short_col_info( col_def, my_schema );
}
+ return rc;
}
diff --git a/tools/vdb-dump/vdb-dump-helper.h b/tools/vdb-dump/vdb-dump-helper.h
index 593d7bc..07be4d9 100644
--- a/tools/vdb-dump/vdb-dump-helper.h
+++ b/tools/vdb-dump/vdb-dump-helper.h
@@ -73,7 +73,7 @@ bool vdh_take_1st_table_from_db( dump_context *ctx,
bool vdh_take_this_table_from_db( dump_context *ctx, const VDatabase *my_database,
const char * table_to_find );
-void vdh_print_col_info( dump_context *ctx,
+rc_t vdh_print_col_info( dump_context *ctx,
const p_col_def col_def,
const VSchema *my_schema );
diff --git a/tools/vdb-dump/vdb-dump-num-gen.c b/tools/vdb-dump/vdb-dump-num-gen.c
index 9843bda..83fc592 100644
--- a/tools/vdb-dump/vdb-dump-num-gen.c
+++ b/tools/vdb-dump/vdb-dump-num-gen.c
@@ -30,7 +30,7 @@
#include <klib/log.h>
#include <klib/rc.h>
#include <klib/out.h>
-#include <fmtdef.h>
+#include <klib/text.h>
#include <strtol.h>
#include <sysalloc.h>
@@ -144,7 +144,7 @@ uint32_t vdn_parse( num_gen* generator, const char* src )
if ( generator == NULL ) return res;
if ( src == NULL ) return res;
- n = strlen( src );
+ n = string_size( src );
generator->node_count = 0;
generator->curr_node = 0;
generator->curr_node_sub_pos = 0;
diff --git a/tools/vdb-dump/vdb-dump-num-gen.h b/tools/vdb-dump/vdb-dump-num-gen.h
index 0a76656..ac67a58 100644
--- a/tools/vdb-dump/vdb-dump-num-gen.h
+++ b/tools/vdb-dump/vdb-dump-num-gen.h
@@ -48,12 +48,13 @@ typedef struct num_gen_node
} num_gen_node;
typedef num_gen_node* p_num_gen_node;
+
typedef struct num_gen
{
Vector nodes;
uint32_t node_count;
uint64_t curr_node;
- uint32_t curr_node_sub_pos;
+ uint64_t curr_node_sub_pos;
} num_gen;
rc_t vdn_make( num_gen** generator );
diff --git a/tools/vdb-dump/vdb-dump-row-context.h b/tools/vdb-dump/vdb-dump-row-context.h
index 497ebd5..1c56e30 100644
--- a/tools/vdb-dump/vdb-dump-row-context.h
+++ b/tools/vdb-dump/vdb-dump-row-context.h
@@ -52,6 +52,7 @@ extern "C" {
*************************************************************************************/
typedef struct row_context
{
+ const VTable* table;
const VCursor* cursor;
p_col_defs col_defs;
p_dump_context ctx;
diff --git a/tools/vdb-dump/vdb-dump-str.c b/tools/vdb-dump/vdb-dump-str.c
index b109bc0..5031ebe 100644
--- a/tools/vdb-dump/vdb-dump-str.c
+++ b/tools/vdb-dump/vdb-dump-str.c
@@ -29,7 +29,6 @@
#include <klib/printf.h>
#include <sysalloc.h>
-#include <fmtdef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -90,6 +89,7 @@ char *vds_ptr( p_dump_str s )
return s->buf;
}
+
static rc_t vds_inc_buffer( p_dump_str s, const size_t by_len )
{
if ( s == NULL )
@@ -109,6 +109,7 @@ static rc_t vds_inc_buffer( p_dump_str s, const size_t by_len )
return 0;
}
+
static rc_t vds_truncate( p_dump_str s )
{
if ( s == NULL )
@@ -119,7 +120,7 @@ static rc_t vds_truncate( p_dump_str s )
{
return RC( rcVDB, rcNoTarg, rcResizing, rcParam, rcNull );
}
- s->str_len = strlen( s->buf );
+ s->str_len = string_size( s->buf );
if ( ( s->str_limit > 0 )&&( s->str_len > s->str_limit ) )
{
s->buf[ s->str_limit ] = 0;
@@ -129,6 +130,7 @@ static rc_t vds_truncate( p_dump_str s )
return 0;
}
+
rc_t vds_append_fmt( p_dump_str s, const size_t aprox_len, const char *fmt, ... )
{
va_list argp;
@@ -161,6 +163,7 @@ rc_t vds_append_fmt( p_dump_str s, const size_t aprox_len, const char *fmt, ...
return rc;
}
+
rc_t vds_append_str( p_dump_str s, const char *s1 )
{
rc_t rc = 0;
@@ -171,7 +174,7 @@ rc_t vds_append_str( p_dump_str s, const char *s1 )
}
else
{
- size_t append_len = strlen( s1 );
+ size_t append_len = string_size( s1 );
if ( append_len > 0 )
{
if ( ( s->str_limit > 0 )&&( s->str_len >= s->str_limit ) )
@@ -183,7 +186,8 @@ rc_t vds_append_str( p_dump_str s, const char *s1 )
rc = vds_inc_buffer( s, append_len );
if ( rc == 0 )
{
- strcat( s->buf, s1 ); /* strncat would not do it... */
+ size_t l = string_size( s->buf );
+ string_copy( s->buf + l, s->buf_size - l, s1, append_len );
rc = vds_truncate( s ); /* adjusts str_len */
}
}
@@ -192,6 +196,7 @@ rc_t vds_append_str( p_dump_str s, const char *s1 )
return rc;
}
+
rc_t vds_append_str_no_limit_check( p_dump_str s, const char *s1 )
{
rc_t rc;
@@ -200,7 +205,7 @@ rc_t vds_append_str_no_limit_check( p_dump_str s, const char *s1 )
{
return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
}
- append_len = strlen( s1 );
+ append_len = string_size( s1 );
if ( append_len == 0 )
{
return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcEmpty );
@@ -208,12 +213,14 @@ rc_t vds_append_str_no_limit_check( p_dump_str s, const char *s1 )
rc = vds_inc_buffer( s, append_len );
if ( rc == 0 )
{
- strcat( s->buf, s1 );
+ size_t l = string_size( s->buf );
+ string_copy( s->buf + l, s->buf_size - l, s1, append_len );
s->str_len += append_len;
}
return rc;
}
+
rc_t vds_rinsert( p_dump_str s, const char *s1 )
{
size_t len;
@@ -221,18 +228,19 @@ rc_t vds_rinsert( p_dump_str s, const char *s1 )
{
return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
}
- len = strlen( s1 );
+ len = string_size( s1 );
if ( len == 0 )
{
return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcEmpty );
}
if ( s->str_len <= len ) return 0;
len = s->str_len - len;
- strcpy( s->buf + len, s1 );
+ string_copy( s->buf + len, sizeof( s->buf ) - len, s1, string_size( s1 ) );
/* s->str_len does not change */
return 0;
}
+
rc_t vds_indent( p_dump_str s, const size_t limit, const size_t indent )
{
size_t remaining_chars, lines, indent_block, line_idx;
@@ -289,14 +297,14 @@ void vds_escape_quotes_loop( p_dump_str s, const char to_escape,
{
if ( *temp == to_escape )
{
- size_t to_move = strlen( temp ) + 1;
+ size_t to_move = string_size( temp ) + 1;
memmove( temp+1, temp, to_move );
(*temp) = escape_char;
temp++;
}
temp++;
}
- s->str_len = strlen( s->buf );
+ s->str_len = string_size( s->buf );
}
rc_t vds_escape( p_dump_str s, const char to_escape, const char escape_char )
@@ -326,7 +334,7 @@ rc_t vds_enclose_string( p_dump_str s, const char c_left, const char c_right )
{
return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
}
- to_move = strlen( s->buf ) + 1;
+ to_move = string_size( s->buf ) + 1;
rc = vds_inc_buffer( s, 2 );
if ( rc == 0 )
{
@@ -334,7 +342,7 @@ rc_t vds_enclose_string( p_dump_str s, const char c_left, const char c_right )
s->buf[0]=c_left;
s->buf[to_move]=c_right;
s->buf[to_move+1]=0;
- s->str_len = strlen( s->buf );
+ s->str_len = string_size( s->buf );
}
return rc;
}
diff --git a/tools/vdb-dump/vdb-dump-tools.c b/tools/vdb-dump/vdb-dump-tools.c
index 0c5cf01..2a280b9 100644
--- a/tools/vdb-dump/vdb-dump-tools.c
+++ b/tools/vdb-dump/vdb-dump-tools.c
@@ -33,7 +33,6 @@
#include <klib/pack.h>
#include <sysalloc.h>
-#include <fmtdef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
diff --git a/tools/vdb-dump/vdb-dump.c b/tools/vdb-dump/vdb-dump.c
index 61742ce..bb41d5e 100644
--- a/tools/vdb-dump/vdb-dump.c
+++ b/tools/vdb-dump/vdb-dump.c
@@ -31,9 +31,18 @@
#include <vdb/table.h>
#include <vdb/cursor.h>
#include <vdb/database.h>
+#include <vdb/dependencies.h>
+#include <vdb/vdb-priv.h>
+
+#include <kdb/table.h>
+#include <kdb/column.h>
+#include <kdb/manager.h>
+
#include <kfs/directory.h>
+
#include <kapp/main.h>
#include <kapp/args.h>
+
#include <klib/container.h>
#include <klib/vector.h>
#include <klib/log.h>
@@ -41,18 +50,14 @@
#include <klib/debug.h>
#include <klib/status.h>
#include <klib/text.h>
+#include <klib/printf.h>
#include <klib/rc.h>
#include <klib/namelist.h>
+
#include <os-native.h>
#include <sysalloc.h>
-#include <sra/srapath.h>
-
-#include <fmtdef.h>
#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
#include <bitstr.h>
#include "vdb-dump-num-gen.h"
@@ -63,6 +68,9 @@
#include "vdb-dump-row-context.h"
#include "vdb-dump-formats.h"
+
+#define CURSOR_CACHE_SIZE 256*1024*1024
+
static const char * row_id_on_usage[] = { "print row id", NULL };
static const char * line_feed_usage[] = { "line-feed's inbetween rows", NULL };
static const char * colname_off_usage[] = { "do not print column-names", NULL };
@@ -85,6 +93,12 @@ static const char * without_sra_usage[] = { "without sra-type-translation", NULL
static const char * without_accession_usage[] = { "without accession-test", NULL };
static const char * excluded_columns_usage[] = { "exclude these columns", NULL };
static const char * boolean_usage[] = { "defines how boolean's are printed (1,T)", NULL };
+static const char * objver_usage[] = { "request vdb-version", NULL };
+static const char * numelem_usage[] = { "print only element-count", NULL };
+static const char * numelemsum_usage[] = { "sum element-count", NULL };
+static const char * show_blobbing_usage[] = { "show blobbing", NULL };
+static const char * enum_phys_usage[] = { "enumerate physical columns", NULL };
+static const char * objtype_usage[] = { "report type of object", NULL };
OptDef DumpOptions[] =
{
@@ -110,7 +124,13 @@ OptDef DumpOptions[] =
{ OPTION_WITHOUT_SRA, ALIAS_WITHOUT_SRA, NULL, without_sra_usage, 1, false, false },
{ OPTION_WITHOUT_ACCESSION, ALIAS_WITHOUT_ACCESSION, NULL, without_accession_usage, 1, false, false },
{ OPTION_EXCLUDED_COLUMNS, ALIAS_EXCLUDED_COLUMNS, NULL, excluded_columns_usage, 1, true, false },
- { OPTION_BOOLEAN, ALIAS_BOOLEAN, NULL, boolean_usage, 1, true, false }
+ { OPTION_BOOLEAN, ALIAS_BOOLEAN, NULL, boolean_usage, 1, true, false },
+ { OPTION_NUMELEM, ALIAS_NUMELEM, NULL, numelem_usage, 1, false, false },
+ { OPTION_NUMELEMSUM, ALIAS_NUMELEMSUM, NULL, numelemsum_usage, 1, false, false },
+ { OPTION_SHOW_BLOBBING, NULL, NULL, show_blobbing_usage, 1, false, false },
+ { OPTION_ENUM_PHYS, NULL, NULL, enum_phys_usage, 1, false, false },
+ { OPTION_OBJVER, ALIAS_OBJVER, NULL, objver_usage, 1, false, false },
+ { OPTION_OBJTYPE, ALIAS_OBJTYPE, NULL, objtype_usage, 1, false, false }
};
const char UsageDefaultName[] = "vdb-dump";
@@ -120,53 +140,60 @@ rc_t CC UsageSummary ( const char * progname )
{
return KOutMsg ("\n"
"Usage:\n"
- " %s <path> [options]\n"
+ " %s <path> [<path> ...] [options]\n"
"\n", progname);
}
-rc_t CC Usage (const Args * args)
+rc_t CC Usage ( const Args * args )
{
const char * progname = UsageDefaultName;
const char * fullpath = UsageDefaultName;
rc_t rc;
- if (args == NULL)
- rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+ if ( args == NULL )
+ rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
else
- rc = ArgsProgram (args, &fullpath, &progname);
- if (rc)
+ rc = ArgsProgram ( args, &fullpath, &progname );
+
+ if ( rc )
progname = fullpath = UsageDefaultName;
- UsageSummary (progname);
-
- KOutMsg ("Options:\n");
-
- HelpOptionLine (ALIAS_ROW_ID_ON, OPTION_ROW_ID_ON, NULL, row_id_on_usage);
- HelpOptionLine (ALIAS_LINE_FEED, OPTION_LINE_FEED, "line_feed", line_feed_usage);
- HelpOptionLine (ALIAS_COLNAME_OFF, OPTION_COLNAME_OFF, NULL, colname_off_usage);
- HelpOptionLine (ALIAS_IN_HEX, OPTION_IN_HEX, NULL, in_hex_usage);
- HelpOptionLine (ALIAS_TABLE, OPTION_TABLE, "table", table_usage);
- HelpOptionLine (ALIAS_ROWS, OPTION_ROWS, "rows", rows_usage);
- HelpOptionLine (ALIAS_COLUMNS, OPTION_COLUMNS, "columns", columns_usage);
- HelpOptionLine (ALIAS_SCHEMA, OPTION_SCHEMA, "schema", schema_usage);
- HelpOptionLine (ALIAS_SCHEMA_DUMP, OPTION_SCHEMA_DUMP, NULL, schema_dump_usage);
- HelpOptionLine (ALIAS_TABLE_ENUM, OPTION_TABLE_ENUM, NULL, table_enum_usage);
- HelpOptionLine (ALIAS_COLUMN_ENUM, OPTION_COLUMN_ENUM, NULL, column_enum_usage);
- HelpOptionLine (ALIAS_COLUMN_SHORT, OPTION_COLUMN_SHORT, NULL, column_short_usage);
- HelpOptionLine (ALIAS_DNA_BASES, OPTION_DNA_BASES, "dna_bases", dna_bases_usage);
- HelpOptionLine (ALIAS_MAX_LINE_LEN, OPTION_MAX_LINE_LEN, "max_length", max_line_len_usage);
- HelpOptionLine (ALIAS_LINE_INDENT, OPTION_LINE_INDENT, "indent_width", line_indent_usage);
- HelpOptionLine (ALIAS_FORMAT, OPTION_FORMAT, "format", format_usage);
- HelpOptionLine (ALIAS_ID_RANGE, OPTION_ID_RANGE, NULL, id_range_usage);
- HelpOptionLine (ALIAS_WITHOUT_SRA, OPTION_WITHOUT_SRA, NULL, without_sra_usage);
- HelpOptionLine (ALIAS_WITHOUT_ACCESSION, OPTION_WITHOUT_ACCESSION, NULL, without_accession_usage);
- HelpOptionLine (ALIAS_EXCLUDED_COLUMNS, OPTION_EXCLUDED_COLUMNS, NULL, excluded_columns_usage);
- HelpOptionLine (ALIAS_BOOLEAN, OPTION_BOOLEAN, NULL, boolean_usage);
+ UsageSummary ( progname );
+
+ KOutMsg ( "Options:\n" );
+
+ HelpOptionLine ( ALIAS_ROW_ID_ON, OPTION_ROW_ID_ON, NULL, row_id_on_usage );
+ HelpOptionLine ( ALIAS_LINE_FEED, OPTION_LINE_FEED, "line_feed", line_feed_usage );
+ HelpOptionLine ( ALIAS_COLNAME_OFF, OPTION_COLNAME_OFF, NULL, colname_off_usage );
+ HelpOptionLine ( ALIAS_IN_HEX, OPTION_IN_HEX, NULL, in_hex_usage );
+ HelpOptionLine ( ALIAS_TABLE, OPTION_TABLE, "table", table_usage );
+ HelpOptionLine ( ALIAS_ROWS, OPTION_ROWS, "rows", rows_usage );
+ HelpOptionLine ( ALIAS_COLUMNS, OPTION_COLUMNS, "columns", columns_usage );
+ HelpOptionLine ( ALIAS_SCHEMA, OPTION_SCHEMA, "schema", schema_usage );
+ HelpOptionLine ( ALIAS_SCHEMA_DUMP, OPTION_SCHEMA_DUMP, NULL, schema_dump_usage );
+ HelpOptionLine ( ALIAS_TABLE_ENUM, OPTION_TABLE_ENUM, NULL, table_enum_usage );
+ HelpOptionLine ( ALIAS_COLUMN_ENUM, OPTION_COLUMN_ENUM, NULL, column_enum_usage );
+ HelpOptionLine ( ALIAS_COLUMN_SHORT, OPTION_COLUMN_SHORT, NULL, column_short_usage );
+ HelpOptionLine ( ALIAS_DNA_BASES, OPTION_DNA_BASES, "dna_bases", dna_bases_usage );
+ HelpOptionLine ( ALIAS_MAX_LINE_LEN, OPTION_MAX_LINE_LEN, "max_length", max_line_len_usage );
+ HelpOptionLine ( ALIAS_LINE_INDENT, OPTION_LINE_INDENT, "indent_width", line_indent_usage );
+ HelpOptionLine ( ALIAS_FORMAT, OPTION_FORMAT, "format", format_usage );
+ HelpOptionLine ( ALIAS_ID_RANGE, OPTION_ID_RANGE, NULL, id_range_usage );
+ HelpOptionLine ( ALIAS_WITHOUT_SRA, OPTION_WITHOUT_SRA, NULL, without_sra_usage );
+ HelpOptionLine ( ALIAS_WITHOUT_ACCESSION, OPTION_WITHOUT_ACCESSION, NULL, without_accession_usage );
+ HelpOptionLine ( ALIAS_EXCLUDED_COLUMNS, OPTION_EXCLUDED_COLUMNS, NULL, excluded_columns_usage );
+ HelpOptionLine ( ALIAS_BOOLEAN, OPTION_BOOLEAN, NULL, boolean_usage );
+ HelpOptionLine ( ALIAS_OBJVER, OPTION_OBJVER, NULL, objver_usage );
+ HelpOptionLine ( ALIAS_OBJTYPE, OPTION_OBJTYPE, NULL, objtype_usage );
+ HelpOptionLine ( ALIAS_NUMELEM, OPTION_NUMELEM, NULL, numelem_usage );
+ HelpOptionLine ( ALIAS_NUMELEMSUM, OPTION_NUMELEMSUM, NULL, numelemsum_usage );
+ HelpOptionLine ( NULL, OPTION_SHOW_BLOBBING, NULL, show_blobbing_usage );
+ HelpOptionLine ( NULL, OPTION_ENUM_PHYS, NULL, enum_phys_usage );
HelpOptionsStandard ();
- HelpVersion (fullpath, KAppVersion());
+ HelpVersion ( fullpath, KAppVersion() );
return rc;
}
@@ -214,13 +241,17 @@ static void CC vdm_read_cell_data( void *item, void *data )
&src.offset_in_bits, &src.number_of_elements );
if ( r_ctx->rc != 0 )
{
- PLOGERR( klogInt,
- (klogInt,
- r_ctx->rc,
- "VCursorCellData( col:$(col_name) at row #$(row_nr) ) failed",
- "col_name=%s,row_nr=%lu",
- my_col_def->name, r_ctx->row_id ));
- /* be forgiving and continue if a cell cannot be read */
+ if( UIError(r_ctx->rc, NULL, r_ctx->table) ) {
+ UITableLOGError(r_ctx->rc, r_ctx->table, true);
+ } else {
+ PLOGERR( klogInt,
+ (klogInt,
+ r_ctx->rc,
+ "VCursorCellData( col:$(col_name) at row #$(row_nr) ) failed",
+ "col_name=%s,row_nr=%lu",
+ my_col_def->name, r_ctx->row_id ));
+ /* be forgiving and continue if a cell cannot be read */
+ }
r_ctx->rc = 0;
}
@@ -254,34 +285,67 @@ static void CC vdm_read_cell_data( void *item, void *data )
print_comma = false;
}
- /* loop through the elements(dimension's) of a cell */
- while( ( src.element_idx < src.number_of_elements )&&( r_ctx->rc == 0 ) )
+ if ( r_ctx->ctx->print_num_elem )
{
- uint32_t eidx = src.element_idx;
- if ( ( eidx > 0 )&& ( src.print_dna_bases == false ) && print_comma )
- {
- vds_append_str( &(my_col_def->content), ", " );
- }
+ char temp[ 16 ];
+ size_t num_writ;
- /* dumps the basic data-types, implementation in vdb-dump-tools.c
- >>> that means it appends the element-string to
- my_col_def->content <<<
- the formated output is only collected, to be printed later
- dump_element is also responsible for incrementing
- the src.element_idx by: 1...bool/int/uint/float
- n...string/unicode-string */
- r_ctx->rc = vdt_dump_element( &src, my_col_def );
-
- /* insurance against endless loop */
- if ( eidx == src.element_idx )
+ r_ctx->rc = string_printf ( temp, sizeof temp, &num_writ, "%u", src.number_of_elements );
+ if ( r_ctx->rc == 0 )
+ vds_append_str( &(my_col_def->content), temp );
+ }
+ else if ( r_ctx->ctx->sum_num_elem )
+ {
+ my_col_def->elementsum += src.number_of_elements;
+ }
+ else
+ {
+ /* loop through the elements(dimension's) of a cell */
+ while( ( src.element_idx < src.number_of_elements )&&( r_ctx->rc == 0 ) )
{
- src.element_idx++;
+ uint32_t eidx = src.element_idx;
+ if ( ( eidx > 0 )&& ( src.print_dna_bases == false ) && print_comma )
+ {
+ vds_append_str( &(my_col_def->content), ", " );
+ }
+
+ /* dumps the basic data-types, implementation in vdb-dump-tools.c
+ >>> that means it appends the element-string to
+ my_col_def->content <<<
+ the formated output is only collected, to be printed later
+ dump_element is also responsible for incrementing
+ the src.element_idx by: 1...bool/int/uint/float
+ n...string/unicode-string */
+ r_ctx->rc = vdt_dump_element( &src, my_col_def );
+
+ /* insurance against endless loop */
+ if ( eidx == src.element_idx )
+ {
+ src.element_idx++;
+ }
}
}
}
}
+
+static void CC vdm_print_elem_sum( void *item, void *data )
+{
+ char temp[ 16 ];
+ size_t num_writ;
+ p_col_def my_col_def = (p_col_def)item;
+ p_row_context r_ctx = (p_row_context)data;
+
+ if ( r_ctx->rc != 0 ) return; /* important to stop if the last read was not successful */
+ vds_clear( &(my_col_def->content) ); /* clear the destination-dump-string */
+
+ r_ctx->rc = string_printf ( temp, sizeof temp, &num_writ, "%u", my_col_def->elementsum );
+ if ( r_ctx->rc == 0 )
+ vds_append_str( &(my_col_def->content), temp );
+}
+
+
static void vdm_row_error( const char * fmt, rc_t rc, uint64_t row_id )
{
PLOGERR( klogInt, ( klogInt, rc, fmt, "row_nr=%lu", row_id ) );
@@ -342,11 +406,13 @@ static rc_t vdm_dump_rows( p_row_context r_ctx )
if ( r_ctx->rc == 0 )
{
/* prints the collected strings, in vdb-dump-formats.c */
- r_ctx->rc = vdfo_print_row( r_ctx );
- if ( r_ctx->rc != 0 )
- vdm_row_error( "vdfo_print_row( row#$(row_nr) ) failed",
- r_ctx->rc, r_ctx->row_id );
-
+ if ( !r_ctx->ctx->sum_num_elem )
+ {
+ r_ctx->rc = vdfo_print_row( r_ctx );
+ if ( r_ctx->rc != 0 )
+ vdm_row_error( "vdfo_print_row( row#$(row_nr) ) failed",
+ r_ctx->rc, r_ctx->row_id );
+ }
}
r_ctx->rc = VCursorCloseRow( r_ctx->cursor );
if ( r_ctx->rc != 0 )
@@ -355,6 +421,16 @@ static rc_t vdm_dump_rows( p_row_context r_ctx )
}
}
}
+ if ( r_ctx->rc == 0 && r_ctx->ctx->sum_num_elem )
+ {
+ VectorForEach( &(r_ctx->col_defs->cols),
+ false, vdm_print_elem_sum, r_ctx );
+ if ( r_ctx->rc == 0 )
+ {
+ r_ctx->rc = vdfo_print_row( r_ctx );
+ DISP_RC( r_ctx->rc, "VTableOpenSchema() failed" );
+ }
+ }
vds_free( &(r_ctx->s_col) );
}
return r_ctx->rc;
@@ -366,20 +442,42 @@ static bool vdm_extract_or_parse_columns( const p_dump_context ctx,
p_col_defs my_col_defs )
{
bool res = false;
- bool cols_unknown;
-
- if ( ctx == NULL ) return res;
- if ( my_col_defs == NULL ) return res;
- cols_unknown = ( (ctx->columns == NULL)||(strcmp(ctx->columns, "*")== 0) );
- if ( cols_unknown )
- /* the user does not know the column-names or wants all of them */
- res = vdcd_extract_from_table( my_col_defs, my_table );
- else
- /* the user knows the names of the wanted columns... */
- res = vdcd_parse_string( my_col_defs, ctx->columns );
+ if ( ctx != NULL && my_col_defs != NULL )
+ {
+ bool cols_unknown = ( ( ctx->columns == NULL ) || ( string_cmp( ctx->columns, 1, "*", 1, 1 ) == 0 ) );
+ if ( cols_unknown )
+ /* the user does not know the column-names or wants all of them */
+ res = vdcd_extract_from_table( my_col_defs, my_table );
+ else
+ /* the user knows the names of the wanted columns... */
+ res = vdcd_parse_string( my_col_defs, ctx->columns, my_table );
- if ( ctx->excluded_columns != NULL )
- vdcd_exclude_these_columns( my_col_defs, ctx->excluded_columns );
+ if ( ctx->excluded_columns != NULL )
+ vdcd_exclude_these_columns( my_col_defs, ctx->excluded_columns );
+ }
+
+ return res;
+}
+
+
+static bool vdm_extract_or_parse_phys_columns( const p_dump_context ctx,
+ const VTable *my_table,
+ p_col_defs my_col_defs )
+{
+ bool res = false;
+ if ( ctx != NULL && my_col_defs != NULL )
+ {
+ bool cols_unknown = ( ( ctx->columns == NULL ) || ( string_cmp( ctx->columns, 1, "*", 1, 1 ) == 0 ) );
+ if ( cols_unknown )
+ /* the user does not know the column-names or wants all of them */
+ res = vdcd_extract_from_phys_table( my_col_defs, my_table );
+ else
+ /* the user knows the names of the wanted columns... */
+ res = vdcd_parse_string( my_col_defs, ctx->columns, NULL );
+
+ if ( ctx->excluded_columns != NULL )
+ vdcd_exclude_these_columns( my_col_defs, ctx->excluded_columns );
+ }
return res;
}
@@ -404,10 +502,11 @@ my_table [IN] ... open table needed for vdb-calls
static rc_t vdm_dump_opened_table( const p_dump_context ctx, const VTable *my_table )
{
row_context r_ctx;
- rc_t rc = VTableCreateCursorRead( my_table, &(r_ctx.cursor) );
+ rc_t rc = VTableCreateCachedCursorRead( my_table, &(r_ctx.cursor), CURSOR_CACHE_SIZE );
DISP_RC( rc, "VTableCreateCursorRead() failed" );
if ( rc == 0 )
{
+ r_ctx.table = my_table;
if ( !vdcd_init( &(r_ctx.col_defs), ctx->max_line_len ) )
{
rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
@@ -569,32 +668,31 @@ my_database [IN] ... open database needed for vdb-calls
static rc_t vdm_enum_tables( const p_dump_context ctx,
const VDatabase *my_database )
{
- rc_t rc;
- KNamelist *tbl_names;
-
- OUTMSG ( ( ">>> enumerating the tables of database >%s<\n", ctx->path ) );
- rc = VDatabaseListTbl( my_database, &tbl_names );
- DISP_RC( rc, "VDatabaseListTbl() failed" );
+ rc_t rc = KOutMsg( "enumerating the tables of database '%s'\n", ctx->path );
if ( rc == 0 )
{
- uint32_t n;
- rc = KNamelistCount( tbl_names, &n );
- DISP_RC( rc, "KNamelistCount() failed" );
+ KNamelist *tbl_names;
+ rc = VDatabaseListTbl( my_database, &tbl_names );
+ DISP_RC( rc, "VDatabaseListTbl() failed" );
if ( rc == 0 )
{
- uint32_t i;
- for ( i=0; i<n; ++i )
+ uint32_t n;
+ rc = KNamelistCount( tbl_names, &n );
+ DISP_RC( rc, "KNamelistCount() failed" );
+ if ( rc == 0 )
{
- const char *tbl_name;
- rc = KNamelistGet( tbl_names, i, &tbl_name );
- DISP_RC( rc, "KNamelistGet() failed" );
- if ( rc == 0 )
+ uint32_t i;
+ for ( i = 0; i < n && rc == 0; ++i )
{
- OUTMSG( ( "tbl #%u: %s\n", i+1, tbl_name ) );
+ const char *tbl_name;
+ rc = KNamelistGet( tbl_names, i, &tbl_name );
+ DISP_RC( rc, "KNamelistGet() failed" );
+ if ( rc == 0 )
+ rc = KOutMsg( "tbl #%u: %s\n", i+1, tbl_name );
}
}
+ KNamelistRelease( tbl_names );
}
- KNamelistRelease( tbl_names );
}
return rc;
}
@@ -604,10 +702,11 @@ typedef struct col_info_context
p_dump_context ctx;
const VSchema *my_schema;
const VTable *my_table;
+ const KTable *my_ktable;
} col_info_context;
typedef struct col_info_context* p_col_info_context;
-static void vdm_print_column_datatypes( const p_col_def col_def,
+static rc_t vdm_print_column_datatypes( const p_col_def col_def,
const p_col_info_context ci )
{
KNamelist *names;
@@ -623,7 +722,7 @@ static void vdm_print_column_datatypes( const p_col_def col_def,
if ( rc == 0 )
{
uint32_t i;
- for ( i=0; i<n; ++i )
+ for ( i = 0; i < n && rc == 0; ++i )
{
const char *type_name;
rc = KNamelistGet( names, i, &type_name );
@@ -631,16 +730,76 @@ static void vdm_print_column_datatypes( const p_col_def col_def,
if ( rc == 0 )
{
if ( dflt_idx == i )
- OUTMSG ( ( "%20s.type[%d] = %s (dflt)\n", col_def->name, i, type_name ) );
+ rc = KOutMsg( "%20s.type[%d] = %s (dflt)\n", col_def->name, i, type_name );
else
- OUTMSG ( ( "%20s.type[%d] = %s\n", col_def->name, i, type_name ) );
+ rc = KOutMsg( "%20s.type[%d] = %s\n", col_def->name, i, type_name );
}
}
}
rc = KNamelistRelease( names );
DISP_RC( rc, "KNamelistRelease() failed" );
}
- OUTMSG ( ( "\n" ) );
+ if ( rc == 0 )
+ rc = KOutMsg( "\n" );
+ return rc;
+}
+
+
+static rc_t vdm_show_row_blobbing( const p_col_def col_def,
+ const p_col_info_context ci )
+{
+ const KColumn * kcol;
+ rc_t rc = KTableOpenColumnRead( ci->my_ktable, &kcol, "%s", col_def->name );
+ if ( rc != 0 )
+ return KOutMsg( "'%s' is not a physical column\n", col_def->name );
+ else
+ rc = KOutMsg( "\nCOLUMN '%s':\n", col_def->name );
+
+ if ( rc == 0 )
+ {
+ int64_t first;
+ uint64_t count;
+ rc = KColumnIdRange( kcol, &first, &count );
+ DISP_RC( rc, "KColumnIdRange() failed" );
+ if ( rc == 0 )
+ {
+ int64_t last = first + count;
+ rc = KOutMsg( "range: %,ld ... %,ld\n", first, last );
+ if ( rc == 0 )
+ {
+ int64_t id = first;
+ while ( id < last && rc == 0 )
+ {
+ const KColumnBlob *blob;
+ rc = KColumnOpenBlobRead( kcol, &blob, id );
+ DISP_RC( rc, "KColumnOpenBlobRead() failed" );
+ if ( rc == 0 )
+ {
+ int64_t first_id_in_blob;
+ uint32_t ids_in_blob;
+ rc = KColumnBlobIdRange( blob, &first_id_in_blob, &ids_in_blob );
+ DISP_RC( rc, "KColumnBlobIdRange() failed" );
+ if ( rc == 0 )
+ {
+ int64_t last_id_in_blob = first_id_in_blob + ids_in_blob - 1;
+ char buffer[ 8 ];
+ size_t num_read, remaining;
+ rc = KColumnBlobRead ( blob, 0, &buffer, 0, &num_read, &remaining );
+ DISP_RC( rc, "KColumnBlobRead() failed" );
+ if ( rc == 0 )
+ {
+ rc = KOutMsg( "blob[ %,ld ... %,ld] size = %,zu\n", first_id_in_blob, last_id_in_blob, remaining );
+ }
+ id = last_id_in_blob + 1;
+ }
+ KColumnBlobRelease( blob );
+ }
+ }
+ }
+ }
+ KColumnRelease( kcol );
+ }
+ return rc;
}
/*************************************************************************************
@@ -652,17 +811,61 @@ static void vdm_print_column_datatypes( const p_col_def col_def,
item [IN] ... pointer to a column-definition-struct ( from "vdb-dump-coldefs.h" )
data [IN] ... pointer to dump-context ( in this case to have a line-idx )
*************************************************************************************/
-static void CC vdm_print_column_info( void *item, void *data )
+static rc_t vdm_print_column_info( const p_col_def col_def, p_col_info_context ci_ctx )
{
- p_col_info_context ci_ctx = (p_col_info_context)data;
- const p_col_def col_def = (const p_col_def)item;
+ rc_t rc = 0;
+
+ if ( ci_ctx->ctx->show_blobbing )
+ rc = vdm_show_row_blobbing( col_def, ci_ctx );
+ else
+ {
+ /* print_col_info is in vdb-dump-helper.c */
+ rc = vdh_print_col_info( ci_ctx->ctx , col_def, ci_ctx->my_schema );
+
+ /* to test VTableColumnDatatypes() */
+ if ( rc == 0 && ci_ctx->ctx->column_enum_requested )
+ rc = vdm_print_column_datatypes( col_def, ci_ctx );
+ }
+ return rc;
+}
- /* print_col_info is in vdb-dump-helper.c */
- vdh_print_col_info( ci_ctx->ctx , col_def, ci_ctx->my_schema );
- /* to test VTableColumnDatatypes() */
- if ( ci_ctx->ctx->column_enum_requested )
- vdm_print_column_datatypes( col_def, ci_ctx );
+static rc_t vdm_enum_phys_columns( const VTable *my_table )
+{
+ rc_t rc = KOutMsg( "physical columns:\n" );
+ if ( rc == 0 )
+ {
+ KNamelist *phys;
+ rc = VTableListPhysColumns( my_table, &phys );
+ DISP_RC( rc, "VTableListPhysColumns() failed" );
+ if ( rc == 0 )
+ {
+ uint32_t count;
+ rc = KNamelistCount( phys, &count );
+ DISP_RC( rc, "KNamelistCount( physical columns ) failed" );
+ if ( rc == 0 )
+ {
+ if ( count > 0 )
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ const char * name;
+ rc = KNamelistGet( phys, idx, &name );
+ DISP_RC( rc, "KNamelistGet( physical columns ) failed" );
+ if ( rc == 0 )
+ rc = KOutMsg( "[%.02d] = %s\n", idx, name );
+ }
+ }
+ else
+ {
+ rc = KOutMsg( "... list is empty!\n" );
+ }
+ }
+ KNamelistRelease( phys );
+ }
+ }
+ return rc;
}
/*************************************************************************************
@@ -680,39 +883,68 @@ my_database [IN] ... open database needed for vdb-calls
static rc_t vdm_enum_tab_columns( const p_dump_context ctx, const VTable *my_table )
{
rc_t rc = 0;
- col_defs *my_col_defs;
-
- if ( !vdcd_init( &my_col_defs, ctx->max_line_len ) )
+ if ( ctx->enum_phys )
{
- rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
- DISP_RC( rc, "col_defs_init() failed" );
+ rc = vdm_enum_phys_columns( my_table );
}
-
- if ( rc == 0 )
+ else
{
- if ( vdcd_extract_from_table( my_col_defs, my_table ) )
+ col_defs *my_col_defs;
+ if ( !vdcd_init( &my_col_defs, ctx->max_line_len ) )
+ {
+ rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+ DISP_RC( rc, "col_defs_init() failed" );
+ }
+
+ if ( rc == 0 )
{
col_info_context ci_ctx;
+ bool extracted;
+
ci_ctx.ctx = ctx;
ci_ctx.my_table = my_table;
- rc = VTableOpenSchema( my_table, &(ci_ctx.my_schema) );
- DISP_RC( rc, "VTableOpenSchema() failed" );
- if ( rc == 0 )
+ if ( ctx->show_blobbing )
{
- ctx->generic_idx = 1;
- VectorForEach( &(my_col_defs->cols), false,
- vdm_print_column_info, &ci_ctx );
+ extracted = vdm_extract_or_parse_phys_columns( ctx, my_table, my_col_defs );
+ rc = VTableOpenKTableRead( my_table, &ci_ctx.my_ktable );
+ DISP_RC( rc, "VTableOpenKTableRead() failed" );
+ }
+ else
+ {
+ extracted = vdm_extract_or_parse_columns( ctx, my_table, my_col_defs );
+ ci_ctx.my_ktable = NULL;
+ }
+
+ if ( extracted && rc == 0 )
+ {
+ rc = VTableOpenSchema( my_table, &(ci_ctx.my_schema) );
+ DISP_RC( rc, "VTableOpenSchema() failed" );
+ if ( rc == 0 )
+ {
+ uint32_t idx, count;
- vdcd_destroy( my_col_defs );
- VSchemaRelease( ci_ctx.my_schema );
+ ctx->generic_idx = 1;
+ count = VectorLength( &(my_col_defs->cols) );
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ col_def *col = ( col_def * )VectorGet( &(my_col_defs->cols), idx );
+ if ( col != 0 )
+ {
+ rc = vdm_print_column_info( col, &ci_ctx );
+ }
+ }
+ VSchemaRelease( ci_ctx.my_schema );
+ }
+ if ( ci_ctx.my_ktable != NULL )
+ KTableRelease( ci_ctx.my_ktable );
}
- }
- else
- {
- OUTMSG ( ( "error in col_defs_extract_from_table\n" ) );
+ else
+ {
+ rc = KOutMsg( "error in col_defs_extract_from_table\n" );
+ }
+ vdcd_destroy( my_col_defs );
}
}
-
return rc;
}
@@ -741,6 +973,7 @@ static rc_t vdm_enum_db_columns( const p_dump_context ctx, const VDatabase *my_d
return rc;
}
+
static rc_t vdm_print_tab_id_range( const p_dump_context ctx, const VTable *my_table )
{
const VCursor *my_cursor;
@@ -771,9 +1004,7 @@ static rc_t vdm_print_tab_id_range( const p_dump_context ctx, const VTable *my_t
rc = VCursorIdRange( my_cursor, 0, &first, &count );
DISP_RC( rc, "VCursorIdRange() failed" );
if ( rc == 0 )
- {
- OUTMSG ( ( "id-range: first-row = %ld, row-count = %ld\n", first, count ) );
- }
+ rc = KOutMsg( "id-range: first-row = %,ld, row-count = %,ld\n", first, count );
}
}
}
@@ -850,6 +1081,13 @@ static rc_t vdm_dump_tab_fkt( const p_dump_context ctx,
return rc;
}
+
+static bool enum_col_request( const p_dump_context ctx )
+{
+ return ( ctx->column_enum_requested || ctx->column_enum_short ||
+ ctx->show_blobbing || ctx->enum_phys );
+}
+
/***************************************************************************
dump_table:
* called by "dump_main()" to handle a table
@@ -859,7 +1097,7 @@ static rc_t vdm_dump_tab_fkt( const p_dump_context ctx,
ctx [IN] ... contains path, tablename, columns, row-range etc.
my_manager [IN] ... open manager needed for vdb-calls
***************************************************************************/
-rc_t vdm_dump_table( const p_dump_context ctx, const VDBManager *my_manager )
+static rc_t vdm_dump_table( const p_dump_context ctx, const VDBManager *my_manager )
{
rc_t rc;
@@ -874,10 +1112,10 @@ rc_t vdm_dump_table( const p_dump_context ctx, const VDBManager *my_manager )
}
else if ( ctx->table_enum_requested )
{
- OUTMSG(( "cannot enum tables of a table-object\n" ));
+ KOutMsg( "cannot enum tables of a table-object\n" );
rc = RC ( rcApp, rcArgv, rcAccessing, rcParam, rcInvalid );
}
- else if ( ctx->column_enum_requested || ctx->column_enum_short )
+ else if ( enum_col_request( ctx ) )
{
rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_enum_tab_columns );
}
@@ -942,7 +1180,7 @@ static rc_t vdm_dump_db_fkt( const p_dump_context ctx,
}
else
{
- LOGMSG( klogInfo, "opened as vdb-dabase, but no table found" );
+ LOGMSG( klogInfo, "opened as vdb-database, but no table found" );
ctx->usage_requested = true;
}
VDatabaseRelease( my_database );
@@ -956,6 +1194,7 @@ static rc_t vdm_dump_db_fkt( const p_dump_context ctx,
return rc;
}
+
/***************************************************************************
dump_database:
* called by "dump_main()"
@@ -965,7 +1204,7 @@ static rc_t vdm_dump_db_fkt( const p_dump_context ctx,
ctx [IN] ... contains path, tablename, columns, row-range etc.
my_manager [IN] ... open manager needed for vdb-calls
***************************************************************************/
-rc_t vdm_dump_database( const p_dump_context ctx, const VDBManager *my_manager )
+static rc_t vdm_dump_database( const p_dump_context ctx, const VDBManager *my_manager )
{
rc_t rc;
@@ -977,7 +1216,7 @@ rc_t vdm_dump_database( const p_dump_context ctx, const VDBManager *my_manager )
{
rc = vdm_dump_db_fkt( ctx, my_manager, vdm_enum_tables );
}
- else if ( ctx->column_enum_requested || ctx->column_enum_short )
+ else if ( enum_col_request( ctx ) )
{
rc = vdm_dump_db_fkt( ctx, my_manager, vdm_enum_db_columns );
}
@@ -993,64 +1232,137 @@ rc_t vdm_dump_database( const p_dump_context ctx, const VDBManager *my_manager )
return rc;
}
-char *vdm_translate_accession( SRAPath *my_sra_path,
- const char *accession,
- const size_t bufsize )
+
+static rc_t vdm_print_objver( const p_dump_context ctx, const VDBManager *mgr )
{
- char *res = malloc( bufsize );
- if ( res != NULL )
+ ver_t version;
+ rc_t rc = VDBManagerGetObjVersion ( mgr, &version, ctx->path );
+ DISP_RC( rc, "VDBManagerGetObjVersion() failed" );
+ if ( rc == 0 )
+ rc = KOutMsg( "%V\n", version );
+ return rc;
+}
+
+
+static void vdm_print_objtype( const VDBManager *mgr, const char * acc_or_path )
+{
+ int path_type = ( VDBManagerPathType ( mgr, acc_or_path ) & ~ kptAlias );
+ switch ( path_type )
{
- rc_t rc = SRAPathFind( my_sra_path, accession, res, bufsize );
- if ( GetRCState( rc ) == rcNotFound )
- {
- free( res );
- res = NULL;
- }
- else if ( GetRCState( rc ) == rcInsufficient )
- {
- DBGMSG ( DBG_APP, 0, ( "bufsize %lu was insufficient\n", bufsize ) );
- free( res );
- res = vdm_translate_accession( my_sra_path, accession, bufsize * 2 );
- }
- else if ( rc != 0 )
+ case kptDatabase : KOutMsg( "Database\n" ); break;
+ case kptTable : KOutMsg( "Table\n" ); break;
+ case kptPrereleaseTbl : KOutMsg( "Prerelease Table\n" ); break;
+ case kptColumn : KOutMsg( "Column\n" ); break;
+ case kptIndex : KOutMsg( "Index\n" ); break;
+ case kptNotFound : KOutMsg( "not found\n" ); break;
+ case kptBadPath : KOutMsg( "bad path\n" ); break;
+ case kptFile : KOutMsg( "File\n" ); break;
+ case kptDir : KOutMsg( "Dir\n" ); break;
+ case kptCharDev : KOutMsg( "CharDev\n" ); break;
+ case kptBlockDev : KOutMsg( "BlockDev\n" ); break;
+ case kptFIFO : KOutMsg( "FIFO\n" ); break;
+ case kptZombieFile : KOutMsg( "ZombieFile\n" ); break;
+ case kptDataset : KOutMsg( "Dataset\n" ); break;
+ case kptDatatype : KOutMsg( "Datatype\n" ); break;
+ default : KOutMsg( "value = '%i'\n", path_type ); break;
+ }
+}
+
+
+#define USE_PATHTYPE_TO_DETECT_DB_OR_TAB 1
+
+static rc_t vdb_main_one_obj_by_pathtype( const p_dump_context ctx,
+ const VDBManager *mgr,
+ const char * acc_or_path )
+{
+ rc_t rc;
+ int path_type = ( VDBManagerPathType ( mgr, acc_or_path ) & ~ kptAlias );
+ switch ( path_type )
+ {
+ case kptDatabase : rc = vdm_dump_database( ctx, mgr );
+ DISP_RC( rc, "dump_database() failed" );
+ break;
+
+ case kptPrereleaseTbl:
+ case kptTable : rc = vdm_dump_table( ctx, mgr );
+ DISP_RC( rc, "dump_table() failed" );
+ break;
+
+ default : rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+ PLOGERR( klogInt, ( klogInt, rc,
+ "the path '$(p)' cannot be opened as vdb-database or vdb-table",
+ "p=%s", ctx->path ) );
+ if ( vdco_schema_count( ctx ) == 0 )
+ {
+ LOGERR( klogInt, rc, "Maybe it is a legacy table. If so, specify a schema with the -S option" );
+ }
+ break;
+ }
+ return rc;
+}
+
+
+static rc_t vdb_main_one_obj_by_probing( const p_dump_context ctx,
+ const VDBManager *mgr,
+ const char * acc_or_path )
+{
+ rc_t rc;
+ if ( vdh_is_path_database( mgr, ctx->path, &(ctx->schema_list) ) )
+ {
+ rc = vdm_dump_database( ctx, mgr );
+ DISP_RC( rc, "dump_database() failed" );
+ }
+ else if ( vdh_is_path_table( mgr, ctx->path, &(ctx->schema_list) ) )
+ {
+ rc = vdm_dump_table( ctx, mgr );
+ DISP_RC( rc, "dump_table() failed" );
+ }
+ else
+ {
+ rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+ PLOGERR( klogInt, ( klogInt, rc,
+ "the path '$(p)' cannot be opened as vdb-database or vdb-table",
+ "p=%s", ctx->path ) );
+ if ( vdco_schema_count( ctx ) == 0 )
{
- free( res );
- res = NULL;
+ LOGERR( klogInt, rc, "Maybe it is a legacy table. If so, specify a schema with the -S option" );
}
}
- return res;
+ return rc;
}
-rc_t vdm_check_accession( const p_dump_context ctx, const KDirectory *my_dir )
+
+static rc_t vdm_main_one_obj( const p_dump_context ctx,
+ KDirectory *dir, const VDBManager *mgr,
+ const char * acc_or_path )
{
rc_t rc = 0;
- if ( strchr ( ctx->path, '/' ) == NULL )
+
+ ctx->path = string_dup_measure ( acc_or_path, NULL );
+
+ if ( ctx->objver_requested )
{
- SRAPath *my_sra_path;
- rc = SRAPathMake( &my_sra_path, my_dir );
- if ( rc != 0 )
+ rc = vdm_print_objver( ctx, mgr );
+ }
+ else if ( ctx->objtype_requested )
+ {
+ vdm_print_objtype( mgr, acc_or_path );
+ }
+ else
+ {
+ if ( USE_PATHTYPE_TO_DETECT_DB_OR_TAB )
{
- if ( GetRCState ( rc ) != rcNotFound || GetRCTarget ( rc ) != rcDylib )
- LOGERR( klogInt, rc, "SRAPathMake() failed" );
- else
- rc = 0;
+ rc = vdb_main_one_obj_by_pathtype( ctx, mgr, acc_or_path );
}
else
{
- if ( !SRAPathTest( my_sra_path, ctx->path ) )
- {
- char *buf = vdm_translate_accession( my_sra_path, ctx->path, 64 );
- if ( buf != NULL )
- {
- DBGMSG ( DBG_APP, 0, ( "sra-accession found! >%s<\n", buf ) );
- free( (char*)ctx->path );
- ctx->path = buf;
- }
- }
- SRAPathRelease( my_sra_path );
+ rc = vdb_main_one_obj_by_probing( ctx, mgr, acc_or_path );
}
}
+ free( (char*)ctx->path );
+ ctx->path = NULL;
+
return rc;
}
@@ -1069,56 +1381,58 @@ rc_t vdm_check_accession( const p_dump_context ctx, const KDirectory *my_dir )
ctx [IN] ... contains path, tablename, columns, row-range etc.
***************************************************************************/
-rc_t vdm_main( const p_dump_context ctx )
+static rc_t vdm_main( const p_dump_context ctx, Args * args )
{
- rc_t rc;
- KDirectory *my_directory;
- rc = KDirectoryNativeDir( &my_directory );
+ rc_t rc, rc1;
+ KDirectory *dir;
+
+ rc = KDirectoryNativeDir( &dir );
DISP_RC( rc, "KDirectoryNativeDir() failed" );
if ( rc == 0 )
{
- rc_t rc1;
- const VDBManager *my_manager;
-
- if ( ctx->dont_check_accession == false )
- {
- rc1 = vdm_check_accession( ctx, my_directory );
- DISP_RC( rc, "check_accession() failed" );
- }
+ const VDBManager *mgr;
- rc = VDBManagerMakeRead ( &my_manager, my_directory );
+ rc = VDBManagerMakeRead ( &mgr, dir );
DISP_RC( rc, "VDBManagerMakeRead() failed" );
if ( rc == 0 )
{
/* show manager is independend form db or tab */
if ( ctx->version_requested )
{
- rc1 = vdh_show_manager_version( my_manager );
- DISP_RC( rc1, "show_manager_version() failed" );
- }
-
- /* if the path is a database-path... (from vdb-dump-helper.c) */
- if ( vdh_is_path_database( my_manager, ctx->path, &(ctx->schema_list) ) )
- {
- rc = vdm_dump_database( ctx, my_manager );
- DISP_RC( rc, "dump_database() failed" );
- }
- /* if the path is a table-path... (from vdb-dump-helper.c) */
- else if ( vdh_is_path_table( my_manager, ctx->path, &(ctx->schema_list) ) )
- {
- rc = vdm_dump_table( ctx, my_manager );
- DISP_RC( rc, "dump_table() failed" );
+ rc = vdh_show_manager_version( mgr );
+ DISP_RC( rc, "show_manager_version() failed" );
}
else
{
- OUTMSG ( ( "\nthe path >%s< cannot be opened as vdb-database or vdb-table !!!\n", ctx->path ) );
- if ( vdco_schema_count( ctx ) == 0 )
- OUTMSG ( ( "Maybe it is a legacy table. If so, specify a schema with the -S option\n" ) );
+ uint32_t count;
+ rc = ArgsParamCount( args, &count );
+ DISP_RC( rc, "ArgsParamCount() failed" );
+ if ( rc == 0 )
+ {
+ if ( count > 0 )
+ {
+ uint32_t idx;
+ for ( idx = 0; idx < count && rc == 0; ++idx )
+ {
+ const char *value = NULL;
+ rc = ArgsParamValue( args, idx, &value );
+ DISP_RC( rc, "ArgsParamValue() failed" );
+ if ( rc == 0 )
+ {
+ rc = vdm_main_one_obj( ctx, dir, mgr, value );
+ }
+ }
+ }
+ else
+ {
+ rc = UsageSummary ( UsageDefaultName );
+ }
+ }
}
- rc1 = VDBManagerRelease( my_manager );
+ rc1 = VDBManagerRelease( mgr );
DISP_RC( rc1, "VDBManagerRelease() failed" );
}
- rc1 = KDirectoryRelease( my_directory );
+ rc1 = KDirectoryRelease( dir );
DISP_RC( rc1, "KDirectoryRelease() failed" );
}
return rc;
@@ -1164,21 +1478,8 @@ rc_t CC KMain ( int argc, char *argv [] )
rc = vdco_capture_arguments_and_options( args, ctx );
if ( rc == 0 )
{
- if ( ctx->usage_requested )
- {
- MiniUsage(args);
- }
- else
- {
- KLogHandlerSetStdErr();
- rc = vdm_main( ctx );
-
- /* usage can be requested during dump_main */
- if ( ctx->usage_requested )
- {
- MiniUsage(args);
- }
- }
+ KLogHandlerSetStdErr();
+ rc = vdm_main( ctx, args );
}
vdco_destroy( ctx );
}
diff --git a/tools/vdb-dump/vdb-dump.vers b/tools/vdb-dump/vdb-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/vdb-dump/vdb-dump.vers
+++ b/tools/vdb-dump/vdb-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/vdb-dump/vdb-dump.vers.h b/tools/vdb-dump/vdb-dump.vers.h
deleted file mode 100644
index d829bf0..0000000
--- a/tools/vdb-dump/vdb-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_DUMP_VERS 0x02010007
diff --git a/tools/vdb-validate/Makefile b/tools/vdb-validate/Makefile
new file mode 100644
index 0000000..dc1fb21
--- /dev/null
+++ b/tools/vdb-validate/Makefile
@@ -0,0 +1,114 @@
+# ===========================================================================
+#
+# PUBLIC DOMAIN NOTICE
+# National Center for Biotechnology Information
+#
+# This software/database is a "United States Government Work" under the
+# terms of the United States Copyright Act. It was written as part of
+# the author's official duties as a United States Government employee and
+# thus cannot be copyrighted. This software/database is freely available
+# to the public for use. The National Library of Medicine and the U.S.
+# Government have not placed any restriction on its use or reproduction.
+#
+# Although all reasonable efforts have been taken to ensure the accuracy
+# and reliability of the software and data, the NLM and the U.S.
+# Government do not and cannot warrant the performance or results that
+# may be obtained by using this software or data. The NLM and the U.S.
+# Government disclaim all warranties, express or implied, including
+# warranties of performance, merchantability or fitness for any particular
+# purpose.
+#
+# Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/vdb-validate
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+
+EXT_TOOLS = \
+ vdb-validate
+
+ALL_TOOLS = \
+ $(INT_TOOLS) \
+ $(EXT_TOOLS)
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+ @ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+ @ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+ $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+ $(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-validate
+#
+VDB_VALIDATE_SRC = \
+ vdb-validate
+
+VDB_VALIDATE_OBJ = \
+ $(addsuffix .$(OBJX),$(VDB_VALIDATE_SRC))
+
+VDB_VALIDATE_LIB = \
+ -dalign-reader \
+ $(READONLY_SCHEMA_LIBS) \
+ -dksrch \
+ -lsradb \
+ -lvdb \
+ -lkdb \
+ -lkapp \
+ -lvfs \
+ -lkurl \
+ -lkrypto \
+ -lkfg \
+ -lkfs \
+ -lkproc \
+ -lklib \
+ -lm
+
+vdb-validate.vers.h: vdb-validate.vers
+ $(TOP)/build/make-vers-inc.sh VDB_VALIDATE_VERS $^ > $@
+
+$(BINDIR)/vdb-validate: $(VDB_VALIDATE_OBJ)
+ $(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_VALIDATE_LIB)
diff --git a/tools/vdb-validate/vdb-validate.c b/tools/vdb-validate/vdb-validate.c
new file mode 100644
index 0000000..d166bed
--- /dev/null
+++ b/tools/vdb-validate/vdb-validate.c
@@ -0,0 +1,2325 @@
+/*===========================================================================
+ *
+ * PUBLIC DOMAIN NOTICE
+ * National Center for Biotechnology Information
+ *
+ * This software/database is a "United States Government Work" under the
+ * terms of the United States Copyright Act. It was written as part of
+ * the author's official duties as a United States Government employee and
+ * thus cannot be copyrighted. This software/database is freely available
+ * to the public for use. The National Library of Medicine and the U.S.
+ * Government have not placed any restriction on its use or reproduction.
+ *
+ * Although all reasonable efforts have been taken to ensure the accuracy
+ * and reliability of the software and data, the NLM and the U.S.
+ * Government do not and cannot warrant the performance or results that
+ * may be obtained by using this software or data. The NLM and the U.S.
+ * Government disclaim all warranties, express or implied, including
+ * warranties of performance, merchantability or fitness for any particular
+ * purpose.
+ *
+ * Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <vfs/manager-priv.h> /* VFSManagerOpenFileReadDecrypt */
+#include <vfs/manager.h> /* VFSManagerMake */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h> /* VPathMake */
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/namelist.h>
+#include <klib/container.h>
+#include <klib/text.h> /* String */
+#include <klib/debug.h>
+#include <klib/data-buffer.h>
+#include <klib/sort.h>
+
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <kdb/consistency-check.h>
+#include <kdb/kdb-priv.h> /* KTableOpenDirectoryRead */
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/dependencies.h> /* UIError */
+#include <vdb/vdb-priv.h> /* VTableOpenKTableRead */
+
+#include <krypto/encfile.h> /* KEncFileValidate */
+#include <krypto/wgaencrypt.h> /* KEncFileValidate */
+
+#include <kfs/kfs-priv.h>
+#include <kfs/sra.h>
+#include <kfs/tar.h>
+#include <kfs/file.h> /* KFileRelease */
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <sra/srapath.h>
+#include <sra/sradb.h>
+#include <sra/sraschema.h>
+
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "vdb-validate.vers.h"
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+ if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
+
+static bool exhaustive;
+static bool md5_required;
+static bool ref_int_check;
+static bool s_IndexOnly;
+
+typedef struct node_s {
+ int parent;
+ int prvSibl;
+ int nxtSibl;
+ int firstChild;
+ unsigned depth;
+ unsigned name;
+ uint32_t objType;
+} node_t;
+typedef struct cc_context_s {
+ node_t *nodes;
+ char *names;
+ rc_t rc;
+ unsigned num_columns;
+ unsigned nextNode;
+ unsigned nextName;
+} cc_context_t;
+static
+rc_t report_rtn ( rc_t rc )
+{
+ return exhaustive ? 0 : rc;
+}
+
+static rc_t report_index(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+ switch (what->type) {
+ case ccrpt_Done:
+ if (what->info.done.rc) {
+ (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+ "Index '$(index)': $(mesg)",
+ "index=%s,mesg=%s", what->objName, what->info.done.mesg));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.done.rc;
+ }
+ return report_rtn (what->info.done.rc);
+ case ccrpt_Index:
+ return 0; /* continue with check */
+ case ccrpt_MD5:
+ if (what->info.MD5.rc) {
+ (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+ "File '$(file)' of index '$(index)' failed MD5 check",
+ "file=%s,index=%s", what->info.MD5.file, what->objName));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.MD5.rc;
+ }
+ return report_rtn (what->info.MD5.rc);
+ default:
+ return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+ }
+}
+
+static rc_t report_column(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+ switch (what->type) {
+ case ccrpt_Done:
+ if (what->info.done.rc) {
+ (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+ "Column '$(column)': $(mesg)",
+ "column=%s,mesg=%s", what->objName, what->info.done.mesg));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.done.rc;
+ }
+ else {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Column '$(column)': $(mesg)",
+ "column=%s,mesg=%s", what->objName,
+ what->info.done.mesg ? what->info.done.mesg : "checked"));
+ ++ctx->num_columns;
+ }
+ return report_rtn (what->info.done.rc);
+ case ccrpt_Blob:
+ return 0; /* continue with check */
+ case ccrpt_MD5:
+ if (what->info.MD5.rc) {
+ (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+ "File '$(file)' of column '$(column)' failed MD5 check",
+ "file=%s,column=%s", what->info.MD5.file, what->objName));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.MD5.rc;
+ }
+ return report_rtn (what->info.MD5.rc);
+ default:
+ return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+ }
+}
+
+static rc_t report_table(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+ switch (what->type) {
+ case ccrpt_Done:
+ if (what->info.done.rc) {
+ (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+ "Table '$(table)': $(mesg)",
+ "table=%s,mesg=%s", what->objName, what->info.done.mesg));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.done.rc;
+ }
+ else if (what->info.done.mesg) {
+ if (strcmp(what->info.done.mesg, "missing md5 file") == 0
+ && md5_required)
+ {
+ rc_t rc = RC(0, rcTable, rcValidating, rcChecksum, rcNotFound);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Table '$(table)': is missing required md5 files",
+ "table=%s", what->objName));
+ return rc;
+ }
+ else if (strncmp("unexpected object ",
+ what->info.done.mesg, 18) == 0)
+ {
+ (void)PLOGMSG(klogWarn, (klogWarn,
+ "Table '$(tbl)': $(mesg)", "tbl=%s,mesg=%s",
+ what->objName, what->info.done.mesg));
+ }
+ else {
+ (void)PLOGMSG(klogInfo, (klogInfo,
+ "Table '$(tbl)' metadata: $(mesg)",
+ "tbl=%s,mesg=%s", what->objName, what->info.done.mesg));
+ }
+ }
+ return report_rtn (what->info.done.rc);
+ case ccrpt_MD5:
+ if (what->info.MD5.rc) {
+ (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+ "File '$(file)' of table '$(table)' failed MD5 check",
+ "file=%s,table=%s", what->info.MD5.file, what->objName));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.MD5.rc;
+ }
+ return report_rtn (what->info.MD5.rc);
+ default:
+ return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+ }
+}
+
+static rc_t report_database(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+ switch (what->type) {
+ case ccrpt_Done:
+ if (what->info.done.rc) {
+ (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+ "Database '$(db)': $(mesg)",
+ "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.done.rc;
+ }
+ else if (what->info.done.mesg) {
+ if (strcmp(what->info.done.mesg, "missing md5 file") == 0
+ && md5_required)
+ {
+ rc_t rc
+ = RC(rcExe, rcTable, rcValidating, rcChecksum, rcNotFound);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(table)': is missing required md5 files",
+ "table=%s", what->objName));
+ return rc;
+ }
+ else {
+ (void)PLOGMSG(klogInfo, (klogInfo,
+ "Database '$(db)' metadata: $(mesg)",
+ "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+ }
+ }
+ return report_rtn (what->info.done.rc);
+ case ccrpt_MD5:
+ if (what->info.MD5.rc) {
+ (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+ "File '$(file)' of database '$(db)' failed MD5 check",
+ "file=%s,db=%s", what->info.MD5.file, what->objName));
+ if (ctx->rc == 0)
+ ctx->rc = what->info.MD5.rc;
+ }
+ return report_rtn (what->info.MD5.rc);
+ default:
+ return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+ }
+}
+
+static rc_t visiting(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+ unsigned const nn = ctx->nextNode++;
+ node_t *const nxt = &ctx->nodes[nn];
+ node_t *const cur = nxt - 1;
+
+ nxt->parent = nxt->prvSibl = nxt->nxtSibl = nxt->firstChild = -1;
+ nxt->depth = what->info.visit.depth;
+ nxt->objType = what->objType;
+ nxt->name = ctx->nextName;
+ ctx->nextName += strlen(what->objName) + 1;
+ strcpy(&ctx->names[nxt->name], what->objName);
+
+ if (nn) {
+ if (cur->depth == nxt->depth) {
+ nxt->parent = cur->parent;
+ nxt->prvSibl = nn - 1;
+ cur->nxtSibl = nn;
+ }
+ else if (cur->depth < nxt->depth) {
+ nxt->parent = nn - 1;
+ cur->firstChild = nn;
+ }
+ else {
+ unsigned sibling = cur->parent;
+
+ while (ctx->nodes[sibling].depth > nxt->depth)
+ sibling = ctx->nodes[sibling].parent;
+ nxt->parent = ctx->nodes[sibling].parent;
+ nxt->prvSibl = sibling;
+ ctx->nodes[sibling].nxtSibl = nn;
+ }
+ }
+ return 0;
+}
+
+static rc_t CC report(CCReportInfoBlock const *what, void *Ctx)
+{
+ cc_context_t *ctx = Ctx;
+ rc_t rc = Quitting();
+
+ if (rc)
+ return rc;
+
+ if (what->type == ccrpt_Visit)
+ return visiting(what, ctx);
+
+ switch (what->objType) {
+ case kptDatabase:
+ return report_database(what, ctx);
+ case kptTable:
+ return report_table(what, ctx);
+ case kptColumn:
+ return report_column(what, ctx);
+ case kptIndex:
+ return report_index(what, ctx);
+ default:
+ return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+ }
+}
+
+static
+rc_t kdbcc ( const KDBManager *mgr, char const name[], uint32_t mode,
+ KPathType *pathType, bool is_file, node_t nodes[], char names[],
+ INSDC_SRA_platform_id platform )
+{
+ rc_t rc = 0;
+ cc_context_t ctx;
+ char const *objtype;
+
+ uint32_t level = ( mode & 4 ) ? 3 : ( mode & 2 ) ? 1 : 0;
+ if (s_IndexOnly)
+ level |= CC_INDEX_ONLY;
+
+
+ memset(&ctx, 0, sizeof(ctx));
+ ctx.nodes = &nodes[0];
+ ctx.names = &names[0];
+
+ if (KDBManagerExists(mgr, kptDatabase, name))
+ *pathType = kptDatabase;
+ else if (KDBManagerExists(mgr, kptTable, name))
+ *pathType = kptTable;
+ else if (*pathType == kptDatabase || *pathType == kptTable)
+ /* is known already: may be encrypted */ ( void) 0;
+ else
+ {
+ rc = RC(rcExe, rcPath, rcValidating, rcType, rcUnknown);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Object '$(table)' "
+ "has unknown type", "table=%s", name));
+ return rc;
+ }
+
+ if (*pathType == kptDatabase)
+ {
+ const KDatabase *db;
+
+ objtype = "database";
+ rc = KDBManagerOpenDBRead ( mgr, & db, name );
+ if ( rc == 0 )
+ {
+ rc = KDatabaseConsistencyCheck ( db, 0, level, report, & ctx );
+ if ( rc == 0 )
+ {
+ rc = ctx.rc;
+ if ( s_IndexOnly )
+ (void)LOGMSG(klogInfo, "Indices: checked");
+ }
+
+ KDatabaseRelease ( db );
+ }
+ }
+ else
+ {
+ const KTable *tbl;
+
+ objtype = "table";
+ rc = KDBManagerOpenTableRead ( mgr, & tbl, name );
+ if ( rc == 0 )
+ {
+ rc = KTableConsistencyCheck ( tbl, 0, level, report, & ctx, platform );
+ if ( rc == 0 )
+ rc = ctx.rc;
+
+ if ( rc == 0 && s_IndexOnly )
+ (void)LOGMSG(klogInfo, "Index: checked");
+
+ KTableRelease ( tbl );
+ }
+ }
+
+ if (rc == 0 && ctx.num_columns == 0 && !s_IndexOnly)
+ {
+ if (is_file)
+ {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; "
+ "the file '$(file)' has no checksums or is truncated.",
+ "file=%s", name));
+ }
+ else
+ {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; "
+ "the $(type) '$(file)' has no checksums or is empty.",
+ "type=%s,file=%s", objtype, name));
+ }
+ }
+
+ return rc;
+}
+
+static
+rc_t vdbcc ( const VDBManager *mgr, char const name[], uint32_t mode,
+ KPathType *pathType, bool is_file)
+{
+#if 0
+ if ( ( mode & 8) != 0 )
+ {
+ const VTable *tbl;
+ rc_t rc = VDBManagerOpenTableRead(mgr, &tbl, NULL, name);
+ if (rc == 0)
+ rc = VTableConsistencyCheck(tbl, 2);
+ return rc;
+ }
+#endif
+ return 0;
+}
+
+typedef struct ColumnInfo_s {
+ char const *name;
+ union {
+ void const *vp;
+ char const *string;
+ bool const *tf;
+ int8_t const *i8;
+ uint8_t const *u8;
+ int16_t const *i16;
+ uint16_t const *u16;
+ int32_t const *i32;
+ uint32_t const *u32;
+ int64_t const *i64;
+ uint64_t const *u64;
+ float const *f32;
+ double const *f64;
+ } value;
+ uint32_t idx;
+ uint32_t elem_bits;
+ uint32_t elem_count;
+} ColumnInfo;
+
+static rc_t CC get_sizes_cb(const KDirectory *dir,
+ uint32_t type, const char *name, void *data)
+{
+ struct {
+ unsigned count;
+ size_t size;
+ } *pb = data;
+
+ ++pb->count;
+ pb->size += strlen(name) + 1;
+
+ return 0;
+}
+
+static rc_t get_sizes(KDirectory const *dir, unsigned *nobj, size_t *namesz)
+{
+ rc_t rc;
+ struct {
+ unsigned count;
+ size_t size;
+ } pb;
+
+ memset(&pb, 0, sizeof(pb));
+ rc = KDirectoryVVisit(dir, true, get_sizes_cb, &pb, NULL, NULL);
+ if (rc)
+ memset(&pb, 0, sizeof(pb));
+ *nobj = pb.count;
+ *namesz = pb.size;
+ return rc;
+}
+
+static rc_t EncFileReadAll(const char *name,
+ char *buffer, size_t bsize, size_t *num_read)
+{
+ rc_t rc = 0;
+
+ VFSManager *mgr = NULL;
+ VPath *path = NULL;
+ const KFile *f = NULL;
+
+ rc = VFSManagerMake(&mgr);
+ if (rc != 0) {
+ LOGERR(klogErr, rc, "Failed to VFSManagerMake()");
+ }
+
+ if (rc == 0) {
+ rc = VPathMake(&path, name);
+ if (rc != 0) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to VPathMake($(name))", "name=%s", name));
+ }
+ }
+
+ if (rc == 0) {
+ rc = VFSManagerOpenFileReadDecrypt(mgr, &f, path);
+ if (rc != 0) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to VFSManagerOpenFileReadDecrypt($(name))",
+ "name=%s", name));
+ }
+ }
+
+ if (rc == 0) {
+ rc = KFileReadAll(f, 0, buffer, bsize, num_read);
+ if (rc != 0) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to KFileReadAll($(name))", "name=%s", name));
+ }
+ }
+
+ KFileRelease(f);
+ VPathRelease(path);
+ VFSManagerRelease(mgr);
+
+ return rc;
+}
+
+
+#if 0
+static rc_t verify_encryption(const KDirectory *dir, const char *name,
+ bool *enc, bool *sra)
+{
+ rc_t rc = 0;
+ const KFile *f = NULL;
+ char buffer[24];
+ size_t num_read = ~0;
+
+ assert(enc && sra);
+ *enc = false;
+ *sra = true;
+
+ rc = KDirectoryOpenFileRead(dir, &f, name);
+ if (rc == 0) {
+ rc = KFileReadAll(f, 0, &buffer, sizeof buffer, &num_read);
+ }
+
+ if (rc == 0) {
+ size_t sz = num_read < 8 ? num_read : 8;
+ assert(num_read <= sizeof buffer);
+ rc = KFileIsEnc(buffer, sz);
+ if (rc == 0)
+ {
+ (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)' is encrypted",
+ "f=%s", name));
+ *enc = true;
+ rc = KEncFileValidate(f);
+ if (rc != 0) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Failure of encryption "
+ "validation of file '$(name)'", "name=%s", name));
+ }
+ else {
+ (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)': encryption OK",
+ "f=%s", name));
+ rc = EncFileReadAll(name, buffer, sizeof buffer, &num_read);
+ }
+ }
+ else {
+ rc = 0;
+ (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)' is not encrypted",
+ "f=%s", name));
+ }
+ }
+
+ if (rc == 0) {
+ rc = KFileIsSRA(buffer, num_read);
+ if (rc == 0) {
+ *sra = true;
+ }
+ else if (rc
+ == SILENT_RC(rcFS, rcFile, rcIdentifying, rcBuffer, rcWrongType))
+ {
+ rc = 0;
+ *sra = false;
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to KFileIsSRA($(name))", "name=%s", name));
+ }
+ }
+
+ KFileRelease(f);
+
+ return rc;
+}
+#endif
+
+static rc_t init_dbcc(KDirectory const *dir, char const name[], bool is_file,
+ node_t **nodes, char **names, KPathType *pathType)
+{
+ KDirectory const *obj;
+ unsigned nobj;
+ size_t namesz;
+ rc_t rc = 0;
+
+ assert(pathType);
+
+ if (is_file) {
+ rc = KDirectoryOpenSraArchiveRead_silent(dir, &obj, false, name);
+ if (rc != 0)
+ { rc = KDirectoryOpenTarArchiveRead_silent(dir, &obj, false, name); }
+ if (rc != 0) {
+ const VDBManager *mgr = NULL;
+ const VTable *tbl = NULL;
+ VSchema *sra_schema = NULL;
+ rc = VDBManagerMakeRead(&mgr, dir);
+ if (rc != 0)
+ { return rc; }
+ for ( ; rc == 0; ) {
+ rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+ VSchemaRelease(sra_schema);
+ if (rc == 0) {
+ const KTable *ktbl = NULL;
+ rc = VTableOpenKTableRead(tbl, &ktbl);
+ if (rc == 0)
+ { rc = KTableOpenDirectoryRead(ktbl, &obj); }
+ KTableRelease(ktbl);
+ *pathType = kptTable;
+ break;
+ }
+ else if (GetRCState(rc) == rcNotFound
+ && GetRCObject(rc) == rcSchema && sra_schema == NULL)
+ {
+ rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+ }
+ else {
+ const VDatabase *db = NULL;
+ const KDatabase *kdb = NULL;
+ rc = VDBManagerOpenDBRead(mgr, &db, NULL, name);
+ if (rc == 0)
+ { rc = VDatabaseOpenKDatabaseRead(db, &kdb); }
+ if (rc == 0)
+ { rc = KDatabaseOpenDirectoryRead(kdb, &obj); }
+ if (rc == 0)
+ { *pathType = kptDatabase; }
+ KDatabaseRelease(kdb);
+ VDatabaseRelease(db);
+ break;
+ }
+ }
+ VTableRelease(tbl);
+ VDBManagerRelease(mgr);
+ }
+ }
+ else {
+ rc = KDirectoryOpenDirRead(dir, &obj, false, name);
+ }
+ if (rc)
+ return rc;
+ rc = get_sizes(obj, &nobj, &namesz);
+ KDirectoryRelease(obj);
+ if (rc) {
+ *nodes = NULL;
+ *names = NULL;
+ }
+ else {
+ *nodes = malloc(nobj * sizeof(**nodes) + namesz);
+ if (nodes)
+ *names = (char *)&(*nodes)[nobj];
+ else
+ rc = RC(rcExe, rcSelf, rcConstructing, rcMemory, rcExhausted);
+ }
+ return rc;
+}
+
+static rc_t get_schema_info(KMetadata const *meta, char buffer[], size_t bsz,
+ char **vers)
+{
+ KMDataNode const *node;
+ rc_t rc = KMetadataOpenNodeRead(meta, &node, "schema");
+
+ if (rc == 0) {
+ size_t sz;
+
+ rc = KMDataNodeReadAttr(node, "name", buffer, bsz, &sz);
+ if (rc == 0) {
+ buffer[sz] = '\0';
+ *vers = &buffer[sz];
+ while (sz) {
+ --sz;
+ if (buffer[sz] == '#') {
+ buffer[sz] = '\0';
+ *vers = &buffer[sz + 1];
+ break;
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+static rc_t get_tbl_schema_info(VTable const *tbl, char buffer[], size_t bsz,
+ char **vers)
+{
+ KMetadata const *meta;
+ rc_t rc = VTableOpenMetadataRead(tbl, &meta);
+
+ *(*vers = &buffer[0]) = '\0';
+ if (rc == 0) rc = get_schema_info(meta, buffer, bsz, vers);
+ return 0;
+}
+
+static rc_t get_db_schema_info(VDatabase const *db, char buffer[], size_t bsz,
+ char **vers)
+{
+ KMetadata const *meta;
+ rc_t rc = VDatabaseOpenMetadataRead(db, &meta);
+
+ *(*vers = &buffer[0]) = '\0';
+ if (rc == 0) rc = get_schema_info(meta, buffer, bsz, vers);
+ return rc;
+}
+
+static rc_t sra_dbcc_454(VTable const *tbl, char const name[])
+{
+ /* TODO: complete this */
+ return 0;
+}
+
+static rc_t sra_dbcc_fastq(VTable const *tbl, char const name[])
+{
+ static char const *const cn_FastQ[] = {
+ "READ", "QUALITY", "SPOT_LEN", "READ_START", "READ_LEN", "READ_TYPE"
+ };
+
+ VCursor const *curs;
+ rc_t rc = VTableCreateCursorRead(tbl, &curs);
+
+ if (rc == 0) {
+ unsigned const n = sizeof(cn_FastQ)/sizeof(cn_FastQ[0]);
+ ColumnInfo cols[sizeof(cn_FastQ)/sizeof(cn_FastQ[0])];
+ unsigned i;
+
+ memset(cols, 0, sizeof(cols));
+ for (i = 0; i < n; ++i) {
+ cols[i].name = cn_FastQ[i];
+ VCursorAddColumn(curs, &cols[i].idx, cols[i].name);
+ }
+ rc = VCursorOpen(curs);
+ if (rc == 0) {
+ rc = VCursorOpenRow(curs);
+ for (i = 0; i < n && rc == 0; ++i) {
+ VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits,
+ &cols[i].value.vp, NULL, &cols[i].elem_count);
+ }
+ if ( cols[0].idx == 0 || cols[0].elem_bits == 0
+ || cols[0].value.vp == NULL
+ || cols[1].idx == 0 || cols[1].elem_bits == 0
+ || cols[1].value.vp == NULL)
+ {
+ rc = RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound);
+ }
+ else if (cols[2].idx == 0 || cols[2].elem_bits == 0
+ || cols[2].value.vp == NULL)
+ {
+ (void)PLOGERR(klogWarn, (klogWarn,
+ RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound),
+ "Table '$(name)' is usable for fasta only; no quality data",
+ "name=%s", name));
+ }
+ }
+ VCursorRelease(curs);
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Table '$(name)' is damaged beyond any use", "name=%s", name));
+ }
+ return rc;
+}
+
+static rc_t VTable_get_platform(VTable const *tbl,
+ INSDC_SRA_platform_id *rslt)
+{
+ rc_t rc;
+ VCursor const *curs;
+ INSDC_SRA_platform_id platform = -1;
+
+ rc = VTableCreateCursorRead(tbl, &curs);
+ if (rc == 0) {
+ uint32_t cid;
+
+ rc = VCursorAddColumn(curs, &cid, "("sra_platform_id_t")PLATFORM");
+ if (rc == 0) {
+ rc = VCursorOpen(curs);
+ if (rc == 0) {
+ uint32_t ebits;
+ void const *data;
+ uint32_t boff;
+ uint32_t ecnt;
+
+ rc = VCursorCellDataDirect(curs, 1, cid,
+ &ebits, &data, &boff, &ecnt);
+ if (rc == 0) {
+ if (ebits == sizeof(platform) * 8 && boff == 0 && ecnt == 1)
+ platform = ((INSDC_SRA_platform_id *)data)[0];
+ else
+ rc =
+ RC(rcExe, rcTable, rcReading, rcType, rcUnexpected);
+ }
+ }
+ }
+ else
+ rc = 0;
+ VCursorRelease(curs);
+ }
+ rslt[0] = platform;
+ return rc;
+}
+
+static rc_t verify_table(VTable const *tbl, char const name[])
+{
+ char schemaName[1024];
+ char *schemaVers = NULL;
+ rc_t rc = 0;
+
+ get_tbl_schema_info(tbl, schemaName, sizeof(schemaName), &schemaVers);
+
+ if (schemaName[0] == '\0' || strncmp(schemaName, "NCBI:SRA:", 9) == 0) {
+ /* SRA or legacy SRA */
+ INSDC_SRA_platform_id platform;
+
+ rc = VTable_get_platform(tbl, &platform);
+ if (rc == 0) {
+ if (platform == (INSDC_SRA_platform_id)-1) {
+ (void)PLOGMSG(klogWarn, (klogWarn, "Couldn't determine "
+ "SRA Platform; type of table '$(name)' is indeterminate.",
+ "name=%s", name));
+ }
+ rc = sra_dbcc_fastq(tbl, name);
+ if (rc == 0 && platform == SRA_PLATFORM_454) {
+ rc = sra_dbcc_454(tbl, name);
+ }
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to read table '$(name)'", "name=%s", name));
+ }
+ }
+ return rc;
+}
+
+static rc_t verify_mgr_table(VDBManager const *mgr, char const name[])
+{
+ VTable const *tbl;
+ VSchema *sra_schema = NULL;
+
+ for ( ; ; ) {
+ rc_t rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+ VSchemaRelease(sra_schema);
+ if (rc == 0) {
+ rc = verify_table(tbl, name);
+ VTableRelease(tbl);
+ return rc;
+ }
+ else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcSchema
+ && sra_schema == NULL)
+ {
+ rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to open table '$(name)'", "name=%s", name));
+ return rc;
+ }
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to open table '$(name)'", "name=%s", name));
+ return rc;
+ }
+ }
+}
+
+#if 0
+static rc_t verify_db_table(VDatabase const *db, char const name[])
+{
+ VTable const *tbl;
+ rc_t rc = VDatabaseOpenTableRead(db, &tbl, name);
+
+ if (rc == 0) {
+ rc = verify_table(tbl, name);
+ VTableRelease(tbl);
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to open table '$(name)'", "name=%s", name));
+ }
+ return rc;
+}
+
+static rc_t align_dbcc_primary_alignment(VTable const *tbl, char const name[])
+{
+ VCursor const *curs;
+ rc_t rc = VTableCreateCursorRead(tbl, &curs);
+
+ if (rc == 0) {
+ static char const *const cn_SAM[] = {
+ "SEQ_NAME",
+ "SAM_FLAGS",
+ "REF_NAME",
+ "REF_POS",
+ "MAPQ",
+ "HAS_MISMATCH",
+ "HAS_REF_OFFSET",
+ "REF_OFFSET",
+ "MATE_REF_NAME",
+ "MATE_REF_POS",
+ "TEMPLATE_LEN",
+ "READ",
+ "QUALITY"
+ };
+ unsigned const n = sizeof(cn_SAM)/sizeof(cn_SAM[0]);
+ ColumnInfo cols[sizeof(cn_SAM)/sizeof(cn_SAM[0])];
+ unsigned i;
+
+ memset(cols, 0, sizeof(cols));
+ for (i = 0; i < n; ++i) {
+ cols[i].name = cn_SAM[i];
+ VCursorAddColumn(curs, &cols[i].idx, cols[i].name);
+ }
+ rc = VCursorOpen(curs);
+ if (rc == 0) {
+ rc = VCursorOpenRow(curs);
+ for (i = 0; i < n && rc == 0; ++i) {
+ VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits,
+ &cols[i].value.vp, NULL, &cols[i].elem_count);
+ }
+ for (i = 0; i < n && rc == 0; ++i) {
+ if (cols[i].idx == 0 || cols[i].elem_bits == 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' "
+ "could not be used to generate SAM", "name=%s", name));
+ break;
+ }
+ }
+ }
+ VCursorRelease(curs);
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)' is damaged beyond any use", "name=%s", name));
+ }
+ return rc;
+}
+#endif
+
+typedef struct id_pair_s {
+ int64_t first;
+ int64_t second;
+} id_pair_t;
+static int CC id_pair_cmp(void const *A, void const *B, void *ignored)
+{
+ id_pair_t const *a = A;
+ id_pair_t const *b = B;
+
+ return a->first < b->first
+ ? -1
+ : a->first == b->first
+ ? a->second < b->second
+ ? -1
+ : a->second == b->second ? 0 : 1
+ : 1;
+}
+
+static rc_t ric_align_ref_and_align(char const dbname[],
+ VTable const *ref,
+ VTable const *align,
+ int which)
+{
+ char const *const id_col_name = which == 0 ? "PRIMARY_ALIGNMENT_IDS"
+ : which == 1 ? "SECONDARY_ALIGNMENT_IDS"
+ : which == 2 ? "EVIDENCE_ALIGNMENT_IDS"
+ : NULL;
+ rc_t rc;
+ VCursor const *curs = NULL;
+ ColumnInfo ci;
+ int64_t startId;
+ uint64_t count;
+
+ rc = VTableCreateCursorRead(align, &curs);
+ if (rc == 0) {
+ rc = VCursorAddColumn(curs, &ci.idx, "REF_ID");
+ if (rc == 0)
+ rc = VCursorOpen(curs);
+ if (rc == 0)
+ rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+ "alignment table can not be read", "name=%s", dbname));
+ }
+ else {
+ id_pair_t *const id_pair = malloc(sizeof(id_pair_t) * count);
+
+ if (id_pair) {
+ uint64_t i;
+ uint64_t j;
+
+ for (j = i = 0; i < count && rc == 0; ++i) {
+ int64_t const row = startId + i;
+
+ rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+ if (rc == 0) {
+ if (ci.elem_count != 1) {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcUnexpected);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)': failed referential integrity "
+ "check", "name=%s", dbname));
+ break;
+ }
+ else {
+ id_pair[j].second = row;
+ id_pair[j].first = ci.value.i64[0];
+ ++j;
+ }
+ }
+ else if (GetRCObject(rc) == rcRow
+ && GetRCState(rc) == rcNotFound)
+ { rc = 0; }
+ }
+ VCursorRelease(curs); curs = NULL;
+ if (rc == 0) {
+ bool ooo_warned = false;
+ bool failed = false;
+
+ ksort(id_pair, count, sizeof(id_pair_t), id_pair_cmp, NULL);
+
+ rc = VTableCreateCursorRead(ref, &curs);
+ if (rc == 0)
+ rc = VCursorAddColumn(curs, &ci.idx, id_col_name);
+ if (rc == 0)
+ rc = VCursorOpen(curs);
+ if (rc == 0)
+ rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+ if (rc == 0) {
+ for (i = j = 0; rc == 0 && i < count; ++i) {
+ int64_t const row = startId + i;
+
+ rc = VCursorCellDataDirect(curs, row, ci.idx,
+ &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+ if (rc == 0) {
+ unsigned k;
+ int64_t prvId = ci.value.i64[0];
+
+ for (k = 0; rc == 0 && k < ci.elem_count;
+ ++k, ++j)
+ {
+ int64_t const alignId = ci.value.i64[k];
+
+ if (!ooo_warned && prvId > alignId) {
+ (void)PLOGMSG(klogWarn, (klogWarn,
+ "Database '$(name)': "
+ "column '$(idcol)' is not ordered",
+ "name=%s,idcol=%s",
+ dbname, id_col_name));
+ ooo_warned = true;
+ }
+ if (id_pair[j].first != row) {
+ if (!failed) {
+ rc = RC(rcExe, rcDatabase, rcValidating,
+ rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)': column '$(idcol)' failed referential integrity check",
+ "name=%s,idcol=%s", dbname, id_col_name));
+ }
+ failed = true;
+ }
+ else if (id_pair[j].second != alignId) {
+ if (!ooo_warned) {
+ (void)PLOGMSG(klogWarn, (klogWarn,
+ "Database '$(name)': column '$(idcol)' might fail referential integrity check",
+ "name=%s,idcol=%s", dbname, id_col_name));
+ }
+ }
+ prvId = alignId;
+ }
+ }
+ else if (GetRCObject(rc) == rcRow
+ && GetRCState(rc) == rcNotFound)
+ { rc = 0; }
+ }
+ if (!failed && i < count) {
+ rc = RC(rcExe, rcDatabase, rcValidating,
+ rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)': column '$(idcol)' failed "
+ "referential integrity check",
+ "name=%s,idcol=%s", dbname, id_col_name));
+ }
+ }
+ else
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+ "reference table can not be read", "name=%s", dbname));
+ }
+ free(id_pair);
+ VCursorRelease(curs);
+ }
+ else {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+ "referential integrity could not be checked",
+ "name=%s", dbname));
+ }
+ }
+ return rc;
+}
+
+static rc_t ric_align_seq_and_pri(char const dbname[],
+ VTable const *seq,
+ VTable const *pri)
+{
+ rc_t rc;
+ VCursor const *curs = NULL;
+ ColumnInfo ci;
+ int64_t startId;
+ uint64_t count;
+
+ rc = VTableCreateCursorRead(pri, &curs);
+ if (rc == 0) {
+ rc = VCursorAddColumn(curs, &ci.idx, "SEQ_SPOT_ID");
+ if (rc == 0)
+ rc = VCursorOpen(curs);
+ if (rc == 0)
+ rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+ }
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+ "alignment table can not be read", "name=%s", dbname));
+ }
+ else {
+ id_pair_t *const id_pair = malloc(sizeof(id_pair_t) * count);
+
+ if (id_pair) {
+ uint64_t i;
+ uint64_t j;
+
+ for (j = i = 0; i < count && rc == 0; ++i) {
+ int64_t const row = startId + i;
+
+ rc = VCursorCellDataDirect(curs, row, ci.idx,
+ &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+ if (rc == 0) {
+ if (ci.elem_count != 1) {
+ rc = RC(rcExe, rcDatabase, rcValidating,
+ rcData, rcUnexpected);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)': failed "
+ "referential integrity check", "name=%s", dbname));
+ break;
+ }
+ else {
+ id_pair[j].second = row;
+ id_pair[j].first = ci.value.i64[0];
+ ++j;
+ }
+ }
+ else if (GetRCObject(rc) == rcRow
+ && GetRCState(rc) == rcNotFound)
+ { rc = 0; }
+ }
+ VCursorRelease(curs); curs = NULL;
+ if (rc == 0) {
+ ksort(id_pair, count, sizeof(id_pair_t), id_pair_cmp, NULL);
+
+ rc = VTableCreateCursorRead(seq, &curs);
+ if (rc == 0)
+ rc = VCursorAddColumn(curs, &ci.idx,
+ "PRIMARY_ALIGNMENT_ID");
+ if (rc == 0)
+ rc = VCursorOpen(curs);
+ if (rc == 0) {
+ for (i = 0; rc == 0 && i < count; ++i) {
+ int64_t const row = id_pair[i].first;
+ int64_t const alignId = id_pair[i].second;
+
+ rc = VCursorCellDataDirect(curs, row, ci.idx,
+ &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+ if (rc == 0) {
+ bool found = false;
+
+ for (j = 0; j < ci.elem_count; ++j)
+ found |= (alignId == ci.value.i64[j]);
+
+ if (!found) {
+ rc = RC(rcExe, rcDatabase, rcValidating,
+ rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)': column 'SEQ_SPOT_ID' failed referential integrity check",
+ "name=%s", dbname));
+ }
+ }
+ else if (GetRCObject(rc) == rcRow
+ && GetRCState(rc) == rcNotFound)
+ {
+ rc = RC(rcExe, rcDatabase, rcValidating,
+ rcData, rcInconsistent);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)': column 'SEQ_SPOT_ID' failed referential integrity check",
+ "name=%s", dbname));
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)': sequence table can not be read", "name=%s", dbname));
+ }
+ }
+ }
+ else
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+ "sequence table can not be read", "name=%s", dbname));
+ }
+ free(id_pair);
+ }
+ else {
+ rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+ (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+ "referential integrity could not be checked",
+ "name=%s", dbname));
+ }
+ VCursorRelease(curs);
+ }
+ return rc;
+}
+
+/* database referential integrity check for alignment database */
+static rc_t dbric_align(char const dbname[],
+ VTable const *pri,
+ VTable const *seq,
+ VTable const *ref)
+{
+ rc_t rc = 0;
+
+ if ((rc == 0 || exhaustive) && (pri != NULL && seq != NULL)) {
+ rc_t rc2 = ric_align_seq_and_pri(dbname, seq, pri);
+
+ if (rc2 == 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': "
+ "SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID"
+ " referential integrity ok", "dbname=%s", dbname));
+ }
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+ if ((rc == 0 || exhaustive) && (pri != NULL && ref != NULL)) {
+ rc_t rc2 = ric_align_ref_and_align(dbname, ref, pri, 0);
+
+ if (rc2 == 0) {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': "
+ "REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID "
+ "referential integrity ok", "dbname=%s", dbname));
+ }
+ if (rc == 0) {
+ rc = rc2;
+ }
+ }
+ return rc;
+}
+
+
+static rc_t verify_database_align(VDatabase const *db,
+ char const name[], node_t const nodes[], char const names[])
+{
+ rc_t rc = 0;
+ unsigned tables = 0;
+ node_t const *tbl = &nodes[nodes[0].firstChild];
+ enum table_bits {
+ tbEvidenceInterval = ( 1u << 0 ),
+ tbEvidenceAlignment = ( 1u << 1 ),
+ tbPrimaryAlignment = ( 1u << 2 ),
+ tbReference = ( 1u << 3 ),
+ tbSequence = ( 1u << 4 ),
+ tbSecondaryAlignment = ( 1u << 5 )
+ };
+
+ if (nodes[0].firstChild) {
+ for ( ; ; ) {
+ char const *tname = &names[tbl->name];
+ unsigned this_table = 0;
+
+ if (tbl->objType == kptTable) {
+ switch (tname[0]) {
+ case 'E':
+ if (strcmp(tname, "EVIDENCE_INTERVAL") == 0)
+ this_table |= tbEvidenceInterval;
+ else if (strcmp(tname, "EVIDENCE_ALIGNMENT") == 0)
+ this_table |= tbEvidenceAlignment;
+ break;
+ case 'P':
+ if (strcmp(tname, "PRIMARY_ALIGNMENT") == 0)
+ this_table |= tbPrimaryAlignment;
+ break;
+ case 'R':
+ if (strcmp(tname, "REFERENCE") == 0)
+ this_table |= tbReference;
+ break;
+ case 'S':
+ if (strcmp(tname, "SEQUENCE") == 0)
+ this_table |= tbSequence;
+ else if (strcmp(tname, "SECONDARY_ALIGNMENT") == 0)
+ this_table |= tbSecondaryAlignment;
+ break;
+ }
+ if (this_table == 0) {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(
+ rcExe, rcDatabase, rcValidating, rcTable, rcUnexpected),
+ "Database '$(name)' contains unexpected table '$(table)'",
+ "name=%s,table=%s", name, tname));
+ }
+ tables |= this_table;
+ }
+ else {
+ (void)PLOGERR(klogWarn, (klogWarn, RC(
+ rcExe, rcDatabase, rcValidating, rcType, rcUnexpected),
+ "Database '$(name)' contains unexpected object '$(obj)'",
+ "name=%s,obj=%s", name, tname));
+ }
+ if (tbl->nxtSibl > 0)
+ tbl = &nodes[tbl->nxtSibl];
+ else
+ break;
+ }
+ }
+ if (tables == tbSequence) {
+ /* sequence data only */
+ (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' "
+ "contains only unaligned reads", "name=%s", name));
+ }
+ else if ( (tables & tbReference) == 0
+ || (tables & tbPrimaryAlignment) == 0)
+ {
+ /* missing reference or primary alignment */
+ rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete);
+ (void)PLOGERR(klogWarn, (klogWarn, rc,
+ "Database '$(name)' does not contain all required tables",
+ "name=%s", name));
+ }
+ else if ( ((tables & tbEvidenceAlignment) != 0)
+ != ((tables & tbEvidenceInterval ) != 0))
+ {
+ /* both must be present or both must be absent */
+ rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete);
+ (void)PLOGERR(klogWarn, (klogWarn, rc,
+ "Database '$(name)' does not contain all required tables",
+ "name=%s", name));
+ }
+ while (ref_int_check) {
+ VTable const *pri = NULL;
+ VTable const *seq = NULL;
+ VTable const *ref = NULL;
+
+ if ((tables & tbPrimaryAlignment) != 0) {
+ rc = VDatabaseOpenTableRead(db, &pri, "PRIMARY_ALIGNMENT");
+ if (rc) break;
+ }
+ if ((tables & tbSequence) != 0) {
+ rc = VDatabaseOpenTableRead(db, &seq, "SEQUENCE");
+ if (rc) break;
+ }
+ if ((tables & tbReference) != 0) {
+ rc = VDatabaseOpenTableRead(db, &ref, "REFERENCE");
+ if (rc) break;
+ }
+ rc = dbric_align(name, pri, seq, ref);
+ break;
+ }
+ return rc;
+}
+
+static rc_t verify_database(VDatabase const *db,
+ char const name[], node_t const nodes[], char const names[])
+{
+ char schemaName[1024];
+ char *schemaVers = NULL;
+ rc_t rc;
+
+ rc = get_db_schema_info(db, schemaName, sizeof(schemaName), &schemaVers);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to find database schema for '$(name)'", "name=%s", name));
+ }
+ else if (strncmp(schemaName, "NCBI:var:db:", 12) == 0) {
+ /* TODO: verify NCBI:var:db:* */
+ }
+ else if (strncmp(schemaName, "NCBI:WGS:db:", 12) == 0) {
+ /* TODO: verify NCBI:WGS:db:* */
+ }
+ else if (strncmp(schemaName, "NCBI:align:db:", 14) == 0) {
+ rc = verify_database_align(db, name, nodes, names);
+ }
+ else if (strcmp(schemaName, "NCBI:SRA:PacBio:smrt:db") == 0) {
+ /* TODO: verify NCBI:SRA:PacBio:smrt:db */
+ }
+ else {
+ (void)PLOGERR(klogWarn, (klogWarn,
+ RC(rcExe, rcDatabase, rcValidating, rcType, rcUnrecognized),
+ "Database '$(name)' has unrecognized type '$(type)'",
+ "name=%s,type=%s", name, schemaName));
+ }
+ return rc;
+}
+
+static rc_t verify_mgr_database(VDBManager const *mgr,
+ char const name[], node_t const nodes[], char const names[])
+{
+ VDatabase const *child;
+ rc_t rc = VDBManagerOpenDBRead(mgr, &child, NULL, name);
+
+ if (rc == 0) {
+ rc = verify_database(child, name, nodes, names);
+ VDatabaseRelease(child);
+ }
+
+ return rc;
+}
+
+static rc_t sra_dbcc(const VDBManager *mgr,
+ char const name[], node_t const nodes[], char const names[])
+{
+ rc_t rc;
+
+ if (nodes[0].objType == kptDatabase)
+ rc = verify_mgr_database(mgr, name, nodes, names);
+ else
+ rc = verify_mgr_table(mgr, name);
+
+ return rc;
+}
+
+static
+rc_t get_platform(const VDBManager *mgr,
+ const VTable *aTbl, char const name[],
+ INSDC_SRA_platform_id *platform)
+{
+ rc_t rc = 0;
+ const VTable *tbl = aTbl;
+ assert(name && platform);
+ if (tbl == NULL) {
+ VSchema *sra_schema = NULL;
+ for ( ; rc == 0; ) {
+ rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+ VSchemaRelease(sra_schema);
+ if (rc == 0) {
+ rc = VTable_get_platform(tbl, platform);
+ break;
+ }
+ else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcSchema
+ && sra_schema == NULL)
+ {
+ rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+ }
+ }
+ }
+
+ if (aTbl == NULL)
+ VTableRelease(tbl);
+
+ return rc;
+}
+
+typedef struct vdb_validate_params vdb_validate_params;
+struct vdb_validate_params
+{
+ const KDirectory *wd;
+ const KDBManager *kmgr;
+ const VDBManager *vmgr;
+
+ bool md5_chk;
+ bool md5_chk_explicit;
+ bool blob_crc;
+ bool index_chk;
+};
+
+static
+rc_t dbcc ( const vdb_validate_params *pb, const char *path, bool is_file )
+{
+ char *names;
+ KPathType pathType;
+ node_t *nodes = NULL;
+ const char *obj_type, *obj_name;
+
+ rc_t rc = init_dbcc ( pb -> wd, path, is_file, & nodes, & names, & pathType );
+ if ( rc == 0 )
+ {
+ /* construct mode */
+ uint32_t mode = ( pb -> md5_chk ? 1 : 0 )
+ | ( pb -> blob_crc ? 2 : 0 )
+ | ( pb -> index_chk ? 4 : 0 )
+ ;
+
+ INSDC_SRA_platform_id platform = SRA_PLATFORM_UNDEFINED;
+ get_platform ( pb -> vmgr, NULL, path, & platform );
+
+ /* check as kdb object */
+ rc = kdbcc ( pb -> kmgr, path, mode, & pathType, is_file, nodes, names, platform );
+ if ( rc == 0 )
+ rc = vdbcc ( pb -> vmgr, path, mode, & pathType, is_file );
+ if ( rc == 0 )
+ rc = sra_dbcc ( pb -> vmgr, path, nodes, names );
+ }
+
+ obj_type = ( pathType == kptDatabase ) ? "Database" : "Table";
+ obj_name = strrchr ( path, '/' );
+ if ( obj_name ++ == NULL )
+ obj_name = path;
+
+ if ( rc != 0 )
+ {
+ PLOGERR ( klogErr, ( klogErr, rc,
+ "$(objType) '$(objName)' check failed"
+ , "objType=%s,objName=%s"
+ , obj_type, obj_name ) );
+ }
+ else
+ {
+ PLOGMSG ( klogInfo, ( klogInfo,
+ "$(objType) '$(objName)' is consistent"
+ , "objType=%s,objName=%s"
+ , obj_type, obj_name ) );
+ }
+
+ free ( nodes );
+ return rc;
+}
+
+static
+const char *generate_relpath ( const vdb_validate_params *pb, const KDirectory *dir,
+ char *buffer, size_t bsize, const char *path )
+{
+ if ( dir != pb -> wd )
+ {
+ char full [ 4096 ];
+ rc_t rc = KDirectoryResolvePath ( dir, true, full, sizeof full, path );
+ if ( rc == 0 )
+ {
+ rc = KDirectoryResolvePath ( pb -> wd, false, buffer, bsize, full );
+ if ( rc == 0 )
+ path = buffer;
+ }
+ }
+
+ return path;
+}
+
+static
+rc_t vdb_validate_file ( const vdb_validate_params *pb, const KDirectory *dir, const char *path )
+{
+ char buffer [ 4096 ];
+ const char *relpath = generate_relpath ( pb, dir, buffer, sizeof buffer, path );
+
+ const KFile *f;
+ rc_t rc = KDirectoryOpenFileRead ( dir, & f, path );
+ if ( rc != 0 )
+ PLOGERR ( klogErr, ( klogErr, rc, "File '$(fname)' could not be opened", "fname=%s", relpath ) );
+ else
+ {
+ bool is_sra = false;
+ enum EEncrypted {
+ eNo,
+ eEncrypted,
+ eWGA
+ } encrypted = eNo;
+
+ size_t num_read;
+ char buffer [ 4096 ];
+ rc = KFileReadAll ( f, 0, buffer, sizeof buffer, & num_read );
+ if ( rc != 0 )
+ PLOGERR ( klogErr, ( klogErr, rc, "File '$(fname)' could not be read", "fname=%s", relpath ) );
+ else {
+ /* special kludge to prevent code from looking too far at header */
+ size_t hdr_bytes = num_read;
+ if ( num_read > 8 )
+ hdr_bytes = 8;
+
+ /* check for encrypted file */
+ if ( KFileIsEnc ( buffer, hdr_bytes ) == 0 ) {
+ encrypted = eEncrypted;
+ }
+ else if ( KFileIsWGAEnc ( buffer, hdr_bytes ) == 0 ) {
+ encrypted = eWGA;
+ }
+
+ if (encrypted != eNo) {
+ PLOGMSG ( klogInfo, ( klogInfo,
+ "Validating $(type)encrypted file '$(fname)'...",
+ "type=%s,fname=%s",
+ encrypted == eWGA ? "WGA " : " ", relpath ) );
+ switch (encrypted) {
+ case eEncrypted:
+ rc = KEncFileValidate(f);
+ break;
+ case eWGA: {
+ VFSManager *mgr = NULL;
+ rc = VFSManagerMake(&mgr);
+ if (rc != 0) {
+ LOGERR(klogInt, rc, "Cannot VFSManagerMake");
+ }
+ else {
+ rc = VFSManagerWGAValidateHack(mgr, f, relpath);
+ }
+ VFSManagerRelease(mgr);
+ break;
+ }
+ default:
+ assert(0);
+ }
+ if ( rc != 0 ) {
+ PLOGERR ( klogErr, ( klogErr, rc,
+ "Encrypted file '$(fname)' could not be validated",
+ "fname=%s", relpath ) );
+ }
+ else {
+ PLOGMSG ( klogInfo, ( klogInfo,
+ "Encrypted file '$(fname)' appears valid",
+ "fname=%s", relpath ) );
+
+ rc = EncFileReadAll ( relpath, buffer, sizeof buffer,
+ & num_read );
+ if ( rc == 0 && KFileIsSRA ( buffer, num_read ) == 0 )
+ is_sra = true;
+ }
+ }
+ else if ( KFileIsSRA ( buffer, num_read ) == 0 ) {
+ is_sra = true;
+ }
+ }
+
+ KFileRelease ( f );
+
+ if ( rc == 0 && is_sra )
+ rc = dbcc ( pb, relpath, true );
+ }
+
+ return rc;
+}
+
+static
+rc_t vdb_validate_database ( const vdb_validate_params *pb, const KDirectory *dir, const char *path )
+{
+ char buffer [ 4096 ];
+ const char *relpath = generate_relpath ( pb, dir, buffer, sizeof buffer, path );
+ return dbcc ( pb, relpath, false );
+}
+
+static
+rc_t vdb_validate_table ( const vdb_validate_params *pb, const KDirectory *dir, const char *path )
+{
+ char buffer [ 4096 ];
+ const char *relpath = generate_relpath ( pb, dir, buffer, sizeof buffer, path );
+ return dbcc ( pb, relpath, false );
+}
+
+static
+KPathType vdb_subdir_type ( const vdb_validate_params *pb, const KDirectory *dir, const char *name )
+{
+ char full [ 4096 ];
+ rc_t rc = KDirectoryResolvePath ( dir, true, full, sizeof full, name );
+ if ( rc == 0 )
+ {
+ switch ( KDBManagerPathType ( pb -> kmgr, full ) )
+ {
+ case kptDatabase:
+ return kptDatabase;
+ case kptTable:
+ return kptTable;
+ }
+ }
+ return kptDir;
+}
+
+static
+rc_t CC vdb_validate_dir ( const KDirectory *dir, uint32_t type, const char *name, void *data )
+{
+ switch ( type & ~ kptAlias )
+ {
+ case kptFile:
+ return vdb_validate_file ( data, dir, name );
+ case kptDir:
+ switch ( vdb_subdir_type ( data, dir, name ) )
+ {
+ case kptDatabase:
+ return vdb_validate_database ( data, dir, name );
+ case kptTable:
+ return vdb_validate_table ( data, dir, name );
+ default:
+ return KDirectoryVisit ( dir, false, vdb_validate_dir, data, name );
+ }
+ }
+
+ return 0;
+}
+
+static rc_t vdb_validate(const vdb_validate_params *pb, const char *aPath) {
+ bool bad = false;
+ const String *local = NULL;
+ VFSManager *mgr = NULL;
+ VResolver *resolver = NULL;
+ const char *path = aPath;
+ KPathType pt = kptNotFound;
+
+ rc_t rc = VFSManagerMake(&mgr);
+ if (rc != 0) {
+ LOGERR(klogInt, rc, "Cannot VFSManagerMake");
+ return rc;
+ }
+
+ rc = VFSManagerGetResolver(mgr, &resolver);
+ if (rc != 0) {
+ LOGERR(klogInt, rc, "Cannot VFSManagerGetResolver");
+ }
+ else {
+ VResolverRemoteEnable(resolver, vrAlwaysDisable);
+ }
+
+ RELEASE(VFSManager, mgr);
+
+ /* what type of thing is this path? */
+ pt = KDirectoryPathType(pb->wd, path);
+
+ if ((pt & ~kptAlias) == kptNotFound) {
+ const VPath *pLocal = NULL;
+ VPath *acc = NULL;
+ bad = true;
+ rc = VPathMake(&acc, path);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "VPathMake($(path)) failed", PLOG_S(path), path));
+ }
+ else {
+ rc = VResolverLocal(resolver, acc, &pLocal);
+ }
+
+ if (rc == 0) {
+ rc = VPathMakeString(pLocal, &local);
+ if (rc != 0) {
+ PLOGERR(klogErr, (klogErr, rc,
+ "VPathMake(local $(path)) failed", PLOG_S(path), path));
+ }
+ }
+
+ if (rc == 0) {
+ path = local->addr;
+ PLOGMSG(klogInfo, (klogInfo,
+ "Validating '$(path)'...", PLOG_S(path), path));
+ pt = KDirectoryPathType(pb -> wd, path);
+ bad = false;
+ }
+
+ RELEASE(VPath, acc);
+ RELEASE(VPath, pLocal);
+ }
+ RELEASE(VResolver, resolver);
+
+ if (rc == 0) {
+ switch (pt & ~kptAlias) {
+ case kptNotFound:
+ rc = RC(rcExe, rcPath, rcValidating, rcPath, rcNotFound);
+ bad = true;
+ break;
+ case kptBadPath:
+ rc = RC(rcExe, rcPath, rcValidating, rcPath, rcInvalid);
+ bad = true;
+ break;
+ case kptFile:
+ rc = vdb_validate_file(pb, pb->wd, path);
+ break;
+ case kptDir:
+ switch(KDBManagerPathType (pb->kmgr, path)) {
+ case kptDatabase:
+ rc = vdb_validate_database(pb, pb->wd, path);
+ break;
+ case kptTable:
+ case kptPrereleaseTbl:
+ rc = vdb_validate_table(pb, pb->wd, path);
+ break;
+ case kptIndex:
+ case kptColumn:
+ rc = RC(rcExe, rcPath, rcValidating,
+ rcType, rcUnsupported);
+ bad = true;
+ break;
+ default:
+ rc = KDirectoryVisit(pb -> wd, false,
+ vdb_validate_dir, (void*)pb, path);
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ free((void*)local);
+
+ if (bad) {
+ PLOGMSG ( klogWarn, ( klogWarn,
+ "Path '$(fname)' could not be validated", "fname=%s", path ) );
+ }
+
+ return rc;
+}
+
+static char const* const defaultLogLevel =
+#if _DEBUGGING
+"debug5";
+#else
+"info";
+#endif
+
+/******************************************************************************
+ * Usage
+ ******************************************************************************/
+const char UsageDefaultName[] = "vdb-validate";
+
+rc_t CC UsageSummary(const char *prog_name)
+{
+ return KOutMsg ( "Usage: %s [options] path [ path... ]\n"
+ "\n"
+ , prog_name );
+}
+
+static char const *help_text[] =
+{
+ "Check components md5s if present, "
+ "fail unless other checks are requested (default: yes)", NULL,
+ "Check blobs CRC32 (default: no)", NULL,
+ "Check 'skey' index (default: no)", NULL,
+ "Continue checking object for all possible errors (default: no)", NULL,
+ "Check data referential integrity for databases (default: no)", NULL,
+ "Check index-only with blobs CRC32 (default: no)", NULL
+};
+
+static OptDef options [] =
+{
+ { "md5" , "5", NULL, &help_text[0], 1, false, false }
+ , { "blob-crc" , "b", NULL, &help_text[2], 1, false, false }
+#if CHECK_INDEX
+ , { "index" , "i", NULL, &help_text[4], 1, false, false }
+#endif
+ , { "exhaustive", "x", NULL, &help_text[6], 1, false, false }
+ , { "referential-integrity", "d", NULL, &help_text[8], 1, false, false }
+
+ /* should be the last ones here: not printed by --help */
+ , { "dri" , NULL, NULL, &help_text[8], 1, false, false }
+ , { "index-only",NULL, NULL, &help_text[10], 1, false, false }
+};
+
+#define NUM_SILENT_TRAILING_OPTIONS 2
+
+static const char *option_params [] =
+{
+ NULL
+ , NULL
+#if CHECK_INDEX
+ , NULL
+#endif
+ , NULL
+ , NULL
+ , NULL
+ , NULL
+};
+
+rc_t CC Usage ( const Args * args )
+{
+ uint32_t i;
+ const char *progname, *fullpath;
+ rc_t rc = ArgsProgram ( args, & fullpath, & progname );
+ if ( rc != 0 )
+ progname = fullpath = UsageDefaultName;
+
+ UsageSummary ( progname );
+
+ KOutMsg ( " Examine directories, files and VDB objects,\n"
+ " reporting any problems that can be detected.\n"
+ "\n"
+ "Options:\n"
+ );
+
+#define NUM_LISTABLE_OPTIONS \
+ ( sizeof options / sizeof options [ 0 ] - NUM_SILENT_TRAILING_OPTIONS )
+
+ for ( i = 0; i < NUM_LISTABLE_OPTIONS; ++i )
+ {
+ HelpOptionLine ( options [ i ] . aliases, options [ i ] . name,
+ option_params [ i ], options [ i ] . help );
+ }
+
+ HelpOptionsStandard ();
+
+ HelpVersion ( fullpath, KAppVersion () );
+
+ return 0;
+}
+
+uint32_t CC KAppVersion ( void )
+{
+ return VDB_VALIDATE_VERS;
+}
+
+static
+rc_t parse_args ( vdb_validate_params *pb, Args *args )
+{
+ rc_t rc;
+ uint32_t cnt;
+
+ pb -> md5_chk = true;
+
+ rc = ArgsOptionCount ( args, "md5", & cnt );
+ if ( rc != 0 )
+ return rc;
+ pb -> md5_chk_explicit = md5_required = cnt != 0;
+
+ rc = ArgsOptionCount ( args, "blob-crc", & cnt );
+ if ( rc != 0 )
+ return rc;
+ pb -> blob_crc = cnt != 0;
+
+ rc = ArgsOptionCount ( args, "exhaustive", & cnt );
+ if ( rc != 0 )
+ return rc;
+ exhaustive = cnt != 0;
+
+ rc = ArgsOptionCount ( args, "referential-integrity", & cnt );
+ if ( rc != 0 )
+ return rc;
+ ref_int_check = cnt != 0;
+
+ rc = ArgsOptionCount ( args, "dri", & cnt );
+ if ( rc != 0 )
+ return rc;
+ ref_int_check = cnt != 0;
+
+#if CHECK_INDEX
+ rc = ArgsOptionCount ( args, "index", & cnt );
+ if ( rc != 0 )
+ return rc;
+ pb -> index_chk = cnt != 0;
+#endif
+
+ rc = ArgsOptionCount ( args, "index-only", & cnt );
+ if ( rc != 0 )
+ return rc;
+ if ( cnt != 0 )
+ s_IndexOnly = pb -> blob_crc = true;
+
+ if ( pb -> blob_crc || pb -> index_chk )
+ pb -> md5_chk = pb -> md5_chk_explicit;
+
+ return 0;
+}
+
+static
+void vdb_validate_params_whack ( vdb_validate_params *pb )
+{
+ VDBManagerRelease ( pb -> vmgr );
+ KDBManagerRelease ( pb -> kmgr );
+ KDirectoryRelease ( pb -> wd );
+ memset ( pb, 0, sizeof * pb );
+}
+
+static
+rc_t vdb_validate_params_init ( vdb_validate_params *pb )
+{
+ rc_t rc;
+ KDirectory *wd;
+
+ memset ( pb, 0, sizeof * pb );
+
+ rc = KDirectoryNativeDir ( & wd );
+ if ( rc == 0 )
+ {
+ pb -> wd = wd;
+ rc = VDBManagerMakeRead ( & pb -> vmgr, wd );
+ if ( rc == 0 )
+ {
+ rc = VDBManagerOpenKDBManagerRead ( pb -> vmgr, & pb -> kmgr );
+ if ( rc == 0 )
+ return 0;
+ }
+ }
+
+ vdb_validate_params_whack ( pb );
+ return rc;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+ Args * args;
+ rc_t rc = ArgsMakeAndHandle ( & args, argc, argv, 1,
+ options, sizeof options / sizeof options [ 0 ] );
+ if ( rc != 0 )
+ LOGERR ( klogErr, rc, "Failed to parse command line" );
+ else
+ {
+ uint32_t pcount;
+ rc = ArgsParamCount ( args, & pcount );
+ if ( rc != 0 )
+ LOGERR ( klogErr, rc, "Failed to count command line parameters" );
+ else if ( argc <= 1 )
+ {
+ rc = RC ( rcExe, rcPath, rcValidating, rcParam, rcInsufficient );
+ MiniUsage ( args );
+ }
+ else if ( pcount == 0 )
+ {
+ rc = RC ( rcExe, rcPath, rcValidating, rcParam, rcInsufficient );
+ LOGERR ( klogErr, rc, "No paths to validate" );
+ MiniUsage ( args );
+ }
+ else
+ {
+ vdb_validate_params pb;
+ rc = vdb_validate_params_init ( & pb );
+ if ( rc != 0 )
+ LOGERR ( klogErr, rc, "Failed to initialize internal managers" );
+ else
+ {
+ rc = parse_args ( & pb, args );
+ if ( rc != 0 )
+ LOGERR ( klogErr, rc, "Failed to extract command line options" );
+ else
+ {
+ rc = KLogLevelSet ( klogInfo );
+ if ( rc != 0 )
+ LOGERR ( klogErr, rc, "Failed to set log level" );
+ else
+ {
+ uint32_t i;
+ for ( i = 0; i < pcount; ++ i )
+ {
+ rc_t rc2;
+ const char *path;
+ rc = ArgsParamValue ( args, i, & path );
+ if ( rc != 0 )
+ {
+ LOGERR ( klogErr, rc, "Failed to extract command line options" );
+ break;
+ }
+
+ rc2 = vdb_validate ( & pb, path );
+ if ( rc == 0 )
+ rc = rc2;
+ }
+ }
+ }
+
+ vdb_validate_params_whack ( & pb );
+ }
+ }
+
+ ArgsWhack ( args );
+ }
+
+ return rc;
+}
+
+
+
+
+
+#if 0
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+ Args * args;
+ char *src_dir_path = NULL;
+ char *src_path = NULL;
+ char *obj_name = NULL;
+ bool md5_chk = true, md5_chk_explicit = false;
+ bool blob_crc = false;
+ bool index_chk = false;
+ bool is_file = false;
+ const KDirectory *src_dir = NULL;
+ char path_buffer [ 4096 ];
+
+ rc_t rc = KLogLevelSet ( klogInfo );
+
+ if ( rc == 0 )
+ {
+ rc = ArgsMakeAndHandle ( & args, argc, argv, 1,
+ options, sizeof options / sizeof options [ 0 ] );
+ }
+
+ while (rc == 0)
+ {
+ uint32_t pcount;
+ rc = ArgsParamCount(args, &pcount);
+ if ( rc != 0 )
+ break;
+
+ if (pcount == 1)
+ {
+ KDirectory *dir;
+ rc = KDirectoryNativeDir(&dir);
+ if (rc == 0)
+ {
+ char const *value;
+
+ rc = ArgsParamValue (args, 0, &value); if (rc) break;
+ src_dir_path = string_dup_measure(value, NULL);
+ src_path = string_dup_measure(value, NULL);
+ obj_name = strrchr(src_dir_path, '/');
+ if ( obj_name != NULL && obj_name [ 1 ] == 0 )
+ {
+ * obj_name = 0;
+ obj_name = strrchr(src_dir_path, '/');
+ }
+ if (obj_name != NULL)
+ {
+ if (obj_name == src_dir_path) {
+ src_dir_path[0] = '/';
+ src_dir_path[1] = '\0';
+ }
+ *obj_name++ = '\0';
+ }
+ else
+ {
+ SRAPath *pmgr = NULL;
+
+ /* check for accession */
+ rc = SRAPathMake ( & pmgr, dir );
+ if ( rc == 0 )
+ {
+ rc = SRAPathFind(pmgr,
+ src_path, path_buffer, sizeof path_buffer);
+ if ( rc == 0 )
+ {
+ /* use mapped path */
+ free(src_path);
+ src_path = string_dup_measure(path_buffer, NULL);
+ free(src_dir_path);
+ src_dir_path
+ = string_dup_measure(path_buffer, NULL);
+ obj_name = strrchr(src_dir_path, '/');
+ if ( obj_name == NULL )
+ obj_name = src_dir_path;
+ else
+ {
+ if ( obj_name == src_dir_path ) {
+ src_dir_path[0] = '/';
+ src_dir_path[1] = '\0';
+ }
+ * obj_name ++ = '\0';
+ }
+ }
+
+ (void)SRAPathRelease ( pmgr );
+ }
+
+ if ( rc != 0 )
+ {
+ /* appears to be a simple name */
+ obj_name = string_dup_measure(src_dir_path, NULL);
+ src_dir_path[0] = '.';
+ src_dir_path[1] = '\0';
+ }
+ }
+
+ rc = KDirectoryOpenDirRead(dir, &src_dir, false, src_dir_path);
+ KDirectoryRelease(dir);
+ if (rc) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Failed to open '$(dir)'", "dir=%s", src_dir_path));
+ break;
+ }
+ else {
+ uint32_t const obj_type = KDirectoryPathType(src_dir,
+ obj_name) & (~((uint32_t)kptAlias));
+
+ switch (obj_type) {
+ case kptFile:
+ is_file = true;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ else {
+ MiniUsage(args);
+ ArgsWhack(args);
+ exit(EXIT_FAILURE);
+ }
+
+ rc = ArgsOptionCount(args, "md5", &pcount); if (rc) break;
+ md5_chk_explicit = md5_required = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
+ }
+
+ rc = ArgsOptionCount(args, "blob-crc", &pcount); if (rc) break;
+ blob_crc = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
+ }
+
+ rc = ArgsOptionCount(args, "exhaustive", &pcount); if (rc) break;
+ exhaustive = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
+ }
+
+ rc = ArgsOptionCount(args, "dri", &pcount); if (rc) break;
+ ref_int_check = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
+ }
+
+#if CHECK_INDEX
+ rc = ArgsOptionCount(args, "index", &pcount); if (rc) break;
+ index_chk = (pcount == 1);
+ if (pcount > 1) {
+ KOutMsg("argument given too many times\n");
+ MiniUsage(args);
+ break;
+ }
+#endif
+
+ rc = ArgsOptionCount(args, "index-only", &pcount);
+ if (rc) {
+ break;
+ }
+ if (pcount > 0) {
+ s_IndexOnly = blob_crc = true;
+ }
+
+
+ if (blob_crc || index_chk)
+ {
+ /* if blob or index is requested,
+ md5 is off unless explicitly requested */
+ md5_chk = md5_chk_explicit;
+ }
+
+ {
+ KPathType pathType = kptBadPath;
+ Bool enc = false;
+ rc = dbcc(src_path, src_dir, obj_name,
+ (md5_chk ? 1 : 0)|(blob_crc ? 2 : 0)|(index_chk ? 4 : 0),
+ & pathType, is_file, &enc);
+ if ( pathType == kptDatabase )
+ {
+ if (rc != 0) {
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(db)' check failed", PLOG_S(db), obj_name));
+ }
+ else {
+ (void)PLOGMSG(klogInfo, (klogInfo,
+ "Database '$(db)' is consistent", PLOG_S(db), obj_name));
+ }
+ }
+ else if ( pathType == kptTable )
+ {
+ if (rc != 0) {
+ (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(table)' "
+ "check failed", PLOG_S(table), obj_name));
+ }
+ else {
+ (void)PLOGMSG(klogInfo, (klogInfo, "Table '$(table)' "
+ "is consistent", PLOG_S(table), obj_name));
+ }
+ }
+ else if (pathType != kptFile)
+ {
+ if (rc != 0) {
+ if (UIError(rc, NULL, NULL)) {
+ const char *c = UIDatabaseGetErrorString(rc);
+ if (c != NULL)
+ { (void)LOGMSG(klogInfo, c); }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc, "'$(table)' "
+ "check failed", PLOG_S(table), obj_name));
+ }
+ if (enc) {
+ rc = 0;
+ (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)' "
+ "is consistent", PLOG_S(f), obj_name));
+ }
+ else {
+ (void)PLOGERR(klogErr, (klogErr, rc, "File '$(f)'"
+ " check failed", PLOG_S(f), obj_name));
+ }
+ }
+ }
+ else {
+ rc = RC(rcExe, rcPath, rcValidating, rcType, rcUnknown);
+ (void)PLOGERR(klogErr, (klogErr, rc,
+ "Object $(table)' check failed: it has un unknown type",
+ PLOG_S(table), obj_name));
+ }
+ }
+ }
+ break;
+ }
+
+ free(src_path);
+ KDirectoryRelease(src_dir);
+
+ return rc;
+}
+
+#endif
diff --git a/tools/vdb-validate/vdb-validate.vers b/tools/vdb-validate/vdb-validate.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/vdb-validate/vdb-validate.vers
@@ -0,0 +1 @@
+2.3.2
--
Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/sra-sdk.git
More information about the debian-med-commit
mailing list